]> git.sur5r.net Git - freertos/commitdiff
Update version number in readiness for V10.3.0 release. Sync SVN with reviewed releas...
authoryuhzheng <yuhzheng@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Fri, 7 Feb 2020 20:14:50 +0000 (20:14 +0000)
committeryuhzheng <yuhzheng@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Fri, 7 Feb 2020 20:14:50 +0000 (20:14 +0000)
git-svn-id: https://svn.code.sf.net/p/freertos/code/trunk@2821 1d2547de-c912-0410-9cb9-b8ca96c0e9e2

1991 files changed:
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/https/common/DemoTasks/SimpleHTTPSExamples.c
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/https/common/WinPCap/arch.c
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/https/common/WinPCap/netif.h
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/https/common/demo_logging.c
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/https/common/demo_logging.h
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/https/common/main.c
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/https/http_plain_text/FreeRTOSConfig.h
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/https/http_plain_text/FreeRTOSIPConfig.h
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/https/http_plain_text/demo_config.h
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/https/https_basic_tls_server_auth/FreeRTOSConfig.h
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/https/https_basic_tls_server_auth/FreeRTOSIPConfig.h
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/https/https_basic_tls_server_auth/demo_config.h
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/https/https_tls_mutual_auth/FreeRTOSConfig.h
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/https/https_tls_mutual_auth/FreeRTOSIPConfig.h
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/https/https_tls_mutual_auth/demo_config.h
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/include/aws_iot_demo_profile.h
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/include/aws_iot_setup_check.h
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/include/https_demo_profile.h
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/include/mqtt_demo_profile.h
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/jobs/jobs_notify_next/DemoTasks/JobsNotifyNextExamples.c
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/jobs/jobs_notify_next/FreeRTOSConfig.h
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/jobs/jobs_notify_next/FreeRTOSIPConfig.h
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/jobs/jobs_notify_next/WinPCap/arch.c
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/jobs/jobs_notify_next/WinPCap/netif.h
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/jobs/jobs_notify_next/demo_config.h
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/jobs/jobs_notify_next/demo_logging.c
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/jobs/jobs_notify_next/demo_logging.h
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/jobs/jobs_notify_next/main.c
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/mqtt/common/DemoTasks/LightWeightMQTTExample.c
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/mqtt/common/DemoTasks/SimpleMQTTExamples.c
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/mqtt/common/Run-time-stats-utils.c
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/mqtt/common/WinPCap/arch.c
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/mqtt/common/WinPCap/netif.h
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/mqtt/common/demo_logging.c
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/mqtt/common/demo_logging.h
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/mqtt/common/main.c
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/mqtt/mqtt_basic_tls_server_auth/FreeRTOSConfig.h
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/mqtt/mqtt_basic_tls_server_auth/FreeRTOSIPConfig.h
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/mqtt/mqtt_basic_tls_server_auth/demo_config.h
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/mqtt/mqtt_plain_text/FreeRTOSConfig.h
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/mqtt/mqtt_plain_text/FreeRTOSIPConfig.h
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/mqtt/mqtt_plain_text/demo_config.h
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/mqtt/mqtt_tls_mutual_auth/FreeRTOSConfig.h
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/mqtt/mqtt_tls_mutual_auth/FreeRTOSIPConfig.h
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/mqtt/mqtt_tls_mutual_auth/demo_config.h
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/shadow/shadow_device_operations/DemoTasks/ShadowDeviceOperationsExamples.c
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/shadow/shadow_device_operations/FreeRTOSConfig.h
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/shadow/shadow_device_operations/FreeRTOSIPConfig.h
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/shadow/shadow_device_operations/WinPCap/arch.c
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/shadow/shadow_device_operations/WinPCap/netif.h
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/shadow/shadow_device_operations/demo_config.h
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/shadow/shadow_device_operations/demo_logging.c
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/shadow/shadow_device_operations/demo_logging.h
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/shadow/shadow_device_operations/main.c
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/tools/aws_config_offline/js/aws_iot_demo_profile_template.js
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/tools/aws_config_quick_start/aws_iot_demo_profile.templ
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/tools/aws_config_quick_start/aws_iot_demo_profile_empty.templ
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/utilities/task_pool/DemoTasks/SimpleTaskPoolExamples.c
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/utilities/task_pool/FreeRTOSConfig.h
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/utilities/task_pool/FreeRTOSIPConfig.h
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/utilities/task_pool/WinPCap/arch.c
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/utilities/task_pool/WinPCap/netif.h
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/utilities/task_pool/demo_config.h
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/utilities/task_pool/demo_logging.c
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/utilities/task_pool/demo_logging.h
FreeRTOS-Labs/Demo/FreeRTOS_IoT_Libraries/utilities/task_pool/main.c
FreeRTOS-Plus/Demo/Common/FreeRTOS_Plus_CLI_Demos/File-Related-CLI-commands.c
FreeRTOS-Plus/Demo/Common/FreeRTOS_Plus_CLI_Demos/Sample-CLI-commands.c
FreeRTOS-Plus/Demo/Common/FreeRTOS_Plus_CLI_Demos/UARTCommandConsole.c
FreeRTOS-Plus/Demo/Common/FreeRTOS_Plus_CLI_Demos/UDP-Related-CLI-commands.c
FreeRTOS-Plus/Demo/Common/FreeRTOS_Plus_FAT_SL_Demos/CreateExampleFiles/File-system-demo.c
FreeRTOS-Plus/Demo/Common/FreeRTOS_Plus_UDP_Demos/CLICommands/CLI-commands.c
FreeRTOS-Plus/Demo/Common/FreeRTOS_Plus_UDP_Demos/CLICommands/UDPCommandInterpreter.h
FreeRTOS-Plus/Demo/Common/FreeRTOS_Plus_UDP_Demos/CLICommands/UDPCommandServer.c
FreeRTOS-Plus/Demo/Common/FreeRTOS_Plus_UDP_Demos/EchoClients/TwoEchoClients.c
FreeRTOS-Plus/Demo/Common/FreeRTOS_Plus_UDP_Demos/EchoClients/TwoEchoClients.h
FreeRTOS-Plus/Demo/Common/FreeRTOS_Plus_UDP_Demos/TraceMacros/Example1/DemoIPTrace.c
FreeRTOS-Plus/Demo/Common/FreeRTOS_Plus_UDP_Demos/TraceMacros/Example1/DemoIPTrace.h
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/DemoTasks/SimpleMQTTExamples.c [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/FreeRTOSConfig.h [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/FreeRTOSIPConfig.h [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/READ_ME_INSTRUCTIONS.url [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WIN32.vcxproj [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WIN32.vcxproj.filters [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WinPCap/Packet32.h [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WinPCap/PacketData.h [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WinPCap/Win32-Extensions.h [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WinPCap/arch.c [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WinPCap/bittypes.h [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WinPCap/ip6_misc.h [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WinPCap/netif.h [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WinPCap/pcap-bpf.h [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WinPCap/pcap-namedb.h [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WinPCap/pcap-stdinc.h [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WinPCap/pcap.h [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WinPCap/pcap/bluetooth.h [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WinPCap/pcap/bpf.h [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WinPCap/pcap/namedb.h [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WinPCap/pcap/pcap.h [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WinPCap/pcap/sll.h [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WinPCap/pcap/usb.h [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WinPCap/pcap/vlan.h [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WinPCap/remote-ext.h [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WinPCap/wpcap.lib [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/atomic.h [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/demo_logging.c [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/demo_logging.h [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/iot_config.h [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/iot_config_common.h [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/iot_secure_sockets_config.h [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/main.c [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/mqtt_demo.sln [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/printf-stdarg.c [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/DemoTasks/SimpleTaskPoolExamples.c [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/DemoTasks/SimpleUDPClientAndServer.c [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/FreeRTOSConfig.h [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/FreeRTOSIPConfig.h [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/READ_ME_INSTRUCTIONS.url [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WIN32.vcxproj [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WIN32.vcxproj.filters [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WinPCap/Packet32.h [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WinPCap/PacketData.h [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WinPCap/Win32-Extensions.h [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WinPCap/arch.c [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WinPCap/bittypes.h [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WinPCap/ip6_misc.h [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WinPCap/netif.h [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WinPCap/pcap-bpf.h [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WinPCap/pcap-namedb.h [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WinPCap/pcap-stdinc.h [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WinPCap/pcap.h [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WinPCap/pcap/bluetooth.h [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WinPCap/pcap/bpf.h [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WinPCap/pcap/namedb.h [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WinPCap/pcap/pcap.h [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WinPCap/pcap/sll.h [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WinPCap/pcap/usb.h [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WinPCap/pcap/vlan.h [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WinPCap/remote-ext.h [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WinPCap/wpcap.lib [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/demo_logging.c [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/demo_logging.h [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/iot_config.h [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/iot_config_common.h [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/main.c [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/printf-stdarg.c [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/task_pool_demo.sln [deleted file]
FreeRTOS-Plus/Demo/FreeRTOS_Plus_CLI_with_Trace_Windows_Simulator/CLI-commands.c
FreeRTOS-Plus/Demo/FreeRTOS_Plus_CLI_with_Trace_Windows_Simulator/FreeRTOSConfig.h
FreeRTOS-Plus/Demo/FreeRTOS_Plus_CLI_with_Trace_Windows_Simulator/Run-time-stats-utils.c
FreeRTOS-Plus/Demo/FreeRTOS_Plus_CLI_with_Trace_Windows_Simulator/UDPCommandServer.c
FreeRTOS-Plus/Demo/FreeRTOS_Plus_CLI_with_Trace_Windows_Simulator/main.c
FreeRTOS-Plus/Demo/FreeRTOS_Plus_Reliance_Edge_and_CLI_Windows_Simulator/ConfigurationFiles/FreeRTOSConfig.h
FreeRTOS-Plus/Demo/FreeRTOS_Plus_Reliance_Edge_and_CLI_Windows_Simulator/File-Related-CLI-commands.c
FreeRTOS-Plus/Demo/FreeRTOS_Plus_Reliance_Edge_and_CLI_Windows_Simulator/File-system-demo.c
FreeRTOS-Plus/Demo/FreeRTOS_Plus_Reliance_Edge_and_CLI_Windows_Simulator/Run-time-stats-utils.c
FreeRTOS-Plus/Demo/FreeRTOS_Plus_Reliance_Edge_and_CLI_Windows_Simulator/Sample-CLI-commands.c
FreeRTOS-Plus/Demo/FreeRTOS_Plus_Reliance_Edge_and_CLI_Windows_Simulator/UDPCommandServer.c
FreeRTOS-Plus/Demo/FreeRTOS_Plus_Reliance_Edge_and_CLI_Windows_Simulator/main.c
FreeRTOS-Plus/Demo/FreeRTOS_Plus_TCP_Minimal_Windows_Simulator/DemoTasks/SimpleUDPClientAndServer.c
FreeRTOS-Plus/Demo/FreeRTOS_Plus_TCP_Minimal_Windows_Simulator/DemoTasks/TCPEchoClient_SingleTasks.c
FreeRTOS-Plus/Demo/FreeRTOS_Plus_TCP_Minimal_Windows_Simulator/DemoTasks/include/SimpleUDPClientAndServer.h
FreeRTOS-Plus/Demo/FreeRTOS_Plus_TCP_Minimal_Windows_Simulator/DemoTasks/include/TCPEchoClient_SingleTasks.h
FreeRTOS-Plus/Demo/FreeRTOS_Plus_TCP_Minimal_Windows_Simulator/FreeRTOSConfig.h
FreeRTOS-Plus/Demo/FreeRTOS_Plus_TCP_Minimal_Windows_Simulator/FreeRTOSIPConfig.h
FreeRTOS-Plus/Demo/FreeRTOS_Plus_TCP_Minimal_Windows_Simulator/WinPCap/arch.c
FreeRTOS-Plus/Demo/FreeRTOS_Plus_TCP_Minimal_Windows_Simulator/WinPCap/netif.h
FreeRTOS-Plus/Demo/FreeRTOS_Plus_TCP_Minimal_Windows_Simulator/demo_logging.c
FreeRTOS-Plus/Demo/FreeRTOS_Plus_TCP_Minimal_Windows_Simulator/demo_logging.h
FreeRTOS-Plus/Demo/FreeRTOS_Plus_TCP_Minimal_Windows_Simulator/main.c
FreeRTOS-Plus/Demo/FreeRTOS_Plus_WolfSSL_Windows_Simulator/FreeRTOSConfig.h
FreeRTOS-Plus/Demo/FreeRTOS_Plus_WolfSSL_Windows_Simulator/SecureTCPClientTask.c
FreeRTOS-Plus/Demo/FreeRTOS_Plus_WolfSSL_Windows_Simulator/SecureTCPServerTask.c
FreeRTOS-Plus/Demo/FreeRTOS_Plus_WolfSSL_Windows_Simulator/main.c
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/FreeRTOS_ARP.c
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/FreeRTOS_DHCP.c
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/FreeRTOS_DNS.c
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/FreeRTOS_IP.c
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/FreeRTOS_Sockets.c
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/FreeRTOS_Stream_Buffer.c
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/FreeRTOS_TCP_IP.c
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/FreeRTOS_TCP_WIN.c
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/FreeRTOS_UDP_IP.c
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/History.txt
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/ReadMe.url
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/include/FreeRTOSIPConfigDefaults.h
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/include/FreeRTOS_ARP.h
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/include/FreeRTOS_DHCP.h
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/include/FreeRTOS_DNS.h
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/include/FreeRTOS_IP.h
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/include/FreeRTOS_IP_Private.h
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/include/FreeRTOS_Sockets.h
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/include/FreeRTOS_Stream_Buffer.h
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/include/FreeRTOS_TCP_IP.h
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/include/FreeRTOS_TCP_WIN.h
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/include/FreeRTOS_UDP_IP.h
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/include/FreeRTOS_errno_TCP.h
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/include/IPTraceMacroDefaults.h
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/include/NetworkBufferManagement.h
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/include/NetworkInterface.h
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/BufferManagement/BufferAllocation_1.c
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/BufferManagement/BufferAllocation_2.c
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/Compiler/CompilerName/ReadMe.txt [new file with mode: 0644]
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/Compiler/CompilerName/pack_struct_end.h [new file with mode: 0644]
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/Compiler/CompilerName/pack_struct_start.h [new file with mode: 0644]
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/Compiler/GCC/pack_struct_end.h
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/Compiler/GCC/pack_struct_start.h
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/Compiler/IAR/pack_struct_end.h
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/Compiler/IAR/pack_struct_start.h
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/Compiler/Keil/pack_struct_end.h
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/Compiler/Keil/pack_struct_start.h
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/Compiler/MSVC/pack_struct_end.h
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/Compiler/MSVC/pack_struct_start.h
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/Compiler/Renesas/pack_struct_end.h
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/Compiler/Renesas/pack_struct_start.h
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/ATSAM4E/NetworkInterface.c
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/ATSAM4E/component/gmac.h
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/ATSAM4E/ethernet_phy.c
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/ATSAM4E/ethernet_phy.h
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/ATSAM4E/gmac.c
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/ATSAM4E/gmac.h
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/ATSAM4E/instance/gmac.h
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/Common/phyHandling.c [deleted file]
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/LPC17xx/NetworkInterface.c
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/LPC18xx/NetworkInterface.c
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/LPC18xx/ReadMe.txt
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/M487/NetworkInterface.c
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/M487/m480_eth.c
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/M487/m480_eth.h
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/README_DRIVER_DISCLAIMER.txt
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/RX/NetworkInterface.c
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/RX/ether_callback.c
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/SH2A/NetworkInterface.c
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/STM32F7xx/NetworkInterface.c [deleted file]
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/STM32F7xx/stm32f7xx_hal_eth.c [deleted file]
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/STM32F7xx/stm32f7xx_hal_eth.h [deleted file]
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/STM32Fxx/NetworkInterface.c
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/STM32Fxx/readme.txt [deleted file]
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/STM32Fxx/stm32f2xx_hal_eth.h [deleted file]
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/STM32Fxx/stm32f4xx_hal_eth.c [deleted file]
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/STM32Fxx/stm32f4xx_hal_eth.h [deleted file]
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/STM32Fxx/stm32f7xx_hal_eth.h [deleted file]
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/STM32Fxx/stm32fxx_hal_eth.c [deleted file]
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/STM32Fxx/stm32fxx_hal_eth.h [deleted file]
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/WinPCap/FaultInjection.c
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/WinPCap/NetworkInterface.c
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/Zynq/NetworkInterface.c
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/Zynq/README.txt
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/Zynq/uncached_memory.c [deleted file]
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/Zynq/uncached_memory.h [deleted file]
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/Zynq/x_emacpsif.h
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/Zynq/x_emacpsif_dma.c
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/Zynq/x_emacpsif_hw.c
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/Zynq/x_emacpsif_hw.h
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/Zynq/x_emacpsif_physpeed.c
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/Zynq/x_topology.h
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/board_family/NetworkInterface.c
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/esp32/NetworkInterface.c
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/include/phyHandling.h [deleted file]
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/ksz8851snl/NetworkInterface.c
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/ksz8851snl/ksz8851snl.c [deleted file]
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/ksz8851snl/ksz8851snl.h [deleted file]
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/ksz8851snl/ksz8851snl_reg.h [deleted file]
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/mw300_rd/NetworkInterface.c
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/pic32mzef/BufferAllocation_2.c
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/pic32mzef/NetworkInterface_eth.c
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/pic32mzef/NetworkInterface_wifi.c
FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/readme.txt
FreeRTOS/Demo/ARM7_AT91FR40008_GCC/FreeRTOSConfig.h
FreeRTOS/Demo/ARM7_AT91FR40008_GCC/Makefile
FreeRTOS/Demo/ARM7_AT91FR40008_GCC/ParTest/ParTest.c
FreeRTOS/Demo/ARM7_AT91FR40008_GCC/main.c
FreeRTOS/Demo/ARM7_AT91FR40008_GCC/serial/serial.c
FreeRTOS/Demo/ARM7_AT91FR40008_GCC/serial/serialISR.c
FreeRTOS/Demo/ARM7_AT91SAM7S64_IAR/FreeRTOSConfig.h
FreeRTOS/Demo/ARM7_AT91SAM7S64_IAR/ParTest/ParTest.c
FreeRTOS/Demo/ARM7_AT91SAM7S64_IAR/USB/USBSample.c
FreeRTOS/Demo/ARM7_AT91SAM7S64_IAR/main.c
FreeRTOS/Demo/ARM7_AT91SAM7S64_IAR/serial/serial.c
FreeRTOS/Demo/ARM7_LPC2106_GCC/FreeRTOSConfig.h
FreeRTOS/Demo/ARM7_LPC2106_GCC/Makefile
FreeRTOS/Demo/ARM7_LPC2106_GCC/ParTest/ParTest.c
FreeRTOS/Demo/ARM7_LPC2106_GCC/main.c
FreeRTOS/Demo/ARM7_LPC2106_GCC/serial/serial.c
FreeRTOS/Demo/ARM7_LPC2106_GCC/serial/serialISR.c
FreeRTOS/Demo/ARM7_LPC2129_IAR/FreeRTOSConfig.h
FreeRTOS/Demo/ARM7_LPC2129_IAR/ParTest/ParTest.c
FreeRTOS/Demo/ARM7_LPC2129_IAR/main.c
FreeRTOS/Demo/ARM7_LPC2129_IAR/serial/serial.c
FreeRTOS/Demo/ARM7_LPC2129_Keil_RVDS/FreeRTOSConfig.h
FreeRTOS/Demo/ARM7_LPC2129_Keil_RVDS/ParTest/ParTest.c
FreeRTOS/Demo/ARM7_LPC2129_Keil_RVDS/main.c
FreeRTOS/Demo/ARM7_LPC2129_Keil_RVDS/serial/serial.c
FreeRTOS/Demo/ARM7_LPC2129_Keil_RVDS/serial/serialISR.s
FreeRTOS/Demo/ARM7_LPC2138_Rowley/FreeRTOSConfig.h
FreeRTOS/Demo/ARM7_LPC2138_Rowley/main.c
FreeRTOS/Demo/ARM7_LPC2138_Rowley/mainISR.c
FreeRTOS/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/FreeRTOSConfig.h
FreeRTOS/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/Makefile
FreeRTOS/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/ParTest/ParTest.c
FreeRTOS/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/main.c
FreeRTOS/Demo/ARM7_LPC2368_Eclipse/RTOSDemo/webserver/uIP_Task.c
FreeRTOS/Demo/ARM7_LPC2368_Rowley/FreeRTOSConfig.h
FreeRTOS/Demo/ARM7_LPC2368_Rowley/ParTest/ParTest.c
FreeRTOS/Demo/ARM7_LPC2368_Rowley/main.c
FreeRTOS/Demo/ARM7_LPC2368_Rowley/webserver/uIP_Task.c
FreeRTOS/Demo/ARM7_STR71x_IAR/FreeRTOSConfig.h
FreeRTOS/Demo/ARM7_STR71x_IAR/ParTest/ParTest.c
FreeRTOS/Demo/ARM7_STR71x_IAR/main.c
FreeRTOS/Demo/ARM7_STR71x_IAR/serial/serial.c
FreeRTOS/Demo/ARM7_STR75x_GCC/FreeRTOSConfig.h
FreeRTOS/Demo/ARM7_STR75x_GCC/ParTest/ParTest.c
FreeRTOS/Demo/ARM7_STR75x_GCC/main.c
FreeRTOS/Demo/ARM7_STR75x_GCC/serial/serial.c
FreeRTOS/Demo/ARM7_STR75x_GCC/serial/serialISR.c
FreeRTOS/Demo/ARM7_STR75x_IAR/FreeRTOSConfig.h
FreeRTOS/Demo/ARM7_STR75x_IAR/ParTest/ParTest.c
FreeRTOS/Demo/ARM7_STR75x_IAR/main.c
FreeRTOS/Demo/ARM7_STR75x_IAR/serial/serial.c
FreeRTOS/Demo/ARM9_AT91SAM9XE_IAR/FreeRTOSConfig.h
FreeRTOS/Demo/ARM9_AT91SAM9XE_IAR/ParTest/ParTest.c
FreeRTOS/Demo/ARM9_AT91SAM9XE_IAR/main.c
FreeRTOS/Demo/ARM9_AT91SAM9XE_IAR/serial/serial.c
FreeRTOS/Demo/ARM9_STR91X_IAR/FreeRTOSConfig.h
FreeRTOS/Demo/ARM9_STR91X_IAR/ParTest/ParTest.c
FreeRTOS/Demo/ARM9_STR91X_IAR/lwip/include/lwIPWebServer/BasicWEB.h
FreeRTOS/Demo/ARM9_STR91X_IAR/lwip/lwipWebServer/BasicWEB.c
FreeRTOS/Demo/ARM9_STR91X_IAR/main.c
FreeRTOS/Demo/ARM9_STR91X_IAR/serial/serial.c
FreeRTOS/Demo/ARM9_STR91X_IAR/webserver/uIP_Task.c
FreeRTOS/Demo/AVR32_UC3/main.c
FreeRTOS/Demo/AVR_ATMega323_IAR/FreeRTOSConfig.h
FreeRTOS/Demo/AVR_ATMega323_IAR/ParTest/ParTest.c
FreeRTOS/Demo/AVR_ATMega323_IAR/main.c
FreeRTOS/Demo/AVR_ATMega323_IAR/regtest.c
FreeRTOS/Demo/AVR_ATMega323_IAR/regtest.h
FreeRTOS/Demo/AVR_ATMega323_IAR/serial/serial.c
FreeRTOS/Demo/AVR_ATMega323_WinAVR/FreeRTOSConfig.h
FreeRTOS/Demo/AVR_ATMega323_WinAVR/ParTest/ParTest.c
FreeRTOS/Demo/AVR_ATMega323_WinAVR/main.c
FreeRTOS/Demo/AVR_ATMega323_WinAVR/regtest.c
FreeRTOS/Demo/AVR_ATMega323_WinAVR/regtest.h
FreeRTOS/Demo/AVR_ATMega323_WinAVR/serial/serial.c
FreeRTOS/Demo/CORTEX_A2F200_IAR_and_Keil/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_A2F200_IAR_and_Keil/ParTest.c
FreeRTOS/Demo/CORTEX_A2F200_IAR_and_Keil/main-blinky.c
FreeRTOS/Demo/CORTEX_A2F200_IAR_and_Keil/main-full.c
FreeRTOS/Demo/CORTEX_A2F200_IAR_and_Keil/uIP_Task.c
FreeRTOS/Demo/CORTEX_A2F200_SoftConsole/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_A2F200_SoftConsole/ParTest.c
FreeRTOS/Demo/CORTEX_A2F200_SoftConsole/main-blinky.c
FreeRTOS/Demo/CORTEX_A2F200_SoftConsole/main-full.c
FreeRTOS/Demo/CORTEX_A2F200_SoftConsole/uIP_Task.c
FreeRTOS/Demo/CORTEX_A53_64-bit_UltraScale_MPSoC/RTOSDemo_A53/src/Blinky_Demo/main_blinky.c
FreeRTOS/Demo/CORTEX_A53_64-bit_UltraScale_MPSoC/RTOSDemo_A53/src/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_A53_64-bit_UltraScale_MPSoC/RTOSDemo_A53/src/FreeRTOS_tick_config.c
FreeRTOS/Demo/CORTEX_A53_64-bit_UltraScale_MPSoC/RTOSDemo_A53/src/Full_Demo/IntQueueTimer.c
FreeRTOS/Demo/CORTEX_A53_64-bit_UltraScale_MPSoC/RTOSDemo_A53/src/Full_Demo/IntQueueTimer.h
FreeRTOS/Demo/CORTEX_A53_64-bit_UltraScale_MPSoC/RTOSDemo_A53/src/Full_Demo/main_full.c
FreeRTOS/Demo/CORTEX_A53_64-bit_UltraScale_MPSoC/RTOSDemo_A53/src/Full_Demo/reg_test.S
FreeRTOS/Demo/CORTEX_A53_64-bit_UltraScale_MPSoC/RTOSDemo_A53/src/main.c
FreeRTOS/Demo/CORTEX_A5_SAMA5D2x_Xplained_IAR/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_A5_SAMA5D2x_Xplained_IAR/FreeRTOS_tick_config.c
FreeRTOS/Demo/CORTEX_A5_SAMA5D2x_Xplained_IAR/Full_Demo/IntQueueTimer.c
FreeRTOS/Demo/CORTEX_A5_SAMA5D2x_Xplained_IAR/Full_Demo/IntQueueTimer.h
FreeRTOS/Demo/CORTEX_A5_SAMA5D2x_Xplained_IAR/Full_Demo/main_full.c
FreeRTOS/Demo/CORTEX_A5_SAMA5D2x_Xplained_IAR/Full_Demo/reg_test.S
FreeRTOS/Demo/CORTEX_A5_SAMA5D2x_Xplained_IAR/LEDs.c
FreeRTOS/Demo/CORTEX_A5_SAMA5D2x_Xplained_IAR/blinky_demo/main_blinky.c
FreeRTOS/Demo/CORTEX_A5_SAMA5D2x_Xplained_IAR/main.c
FreeRTOS/Demo/CORTEX_A5_SAMA5D3x_Xplained_IAR/CDCCommandConsole.c
FreeRTOS/Demo/CORTEX_A5_SAMA5D3x_Xplained_IAR/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_A5_SAMA5D3x_Xplained_IAR/FreeRTOS_tick_config.c
FreeRTOS/Demo/CORTEX_A5_SAMA5D3x_Xplained_IAR/Full_Demo/IntQueueTimer.c
FreeRTOS/Demo/CORTEX_A5_SAMA5D3x_Xplained_IAR/Full_Demo/IntQueueTimer.h
FreeRTOS/Demo/CORTEX_A5_SAMA5D3x_Xplained_IAR/Full_Demo/main_full.c
FreeRTOS/Demo/CORTEX_A5_SAMA5D3x_Xplained_IAR/Full_Demo/reg_test.S
FreeRTOS/Demo/CORTEX_A5_SAMA5D3x_Xplained_IAR/LEDs.c
FreeRTOS/Demo/CORTEX_A5_SAMA5D3x_Xplained_IAR/blinky_demo/main_blinky.c
FreeRTOS/Demo/CORTEX_A5_SAMA5D3x_Xplained_IAR/main.c
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/Blinky_Demo/main_blinky.c
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/CDCCommandConsole.c
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/FreeRTOS_tick_config.c
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/Full_Demo/IntQueueTimer.c
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/Full_Demo/IntQueueTimer.h
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/Full_Demo/main_full.c
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/Full_Demo/reg_test.S
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/LEDs.c
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/main.c
FreeRTOS/Demo/CORTEX_A9_Cyclone_V_SoC_DK/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_A9_Cyclone_V_SoC_DK/LEDs.c
FreeRTOS/Demo/CORTEX_A9_Cyclone_V_SoC_DK/main.c
FreeRTOS/Demo/CORTEX_A9_Cyclone_V_SoC_DK/main_blinky.c
FreeRTOS/Demo/CORTEX_A9_Cyclone_V_SoC_DK/main_full.c
FreeRTOS/Demo/CORTEX_A9_Cyclone_V_SoC_DK/reg_test.S
FreeRTOS/Demo/CORTEX_A9_Cyclone_V_SoC_DK/serial.c
FreeRTOS/Demo/CORTEX_A9_Zynq_ZC702/RTOSDemo/src/Blinky_Demo/main_blinky.c
FreeRTOS/Demo/CORTEX_A9_Zynq_ZC702/RTOSDemo/src/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_A9_Zynq_ZC702/RTOSDemo/src/FreeRTOS_tick_config.c
FreeRTOS/Demo/CORTEX_A9_Zynq_ZC702/RTOSDemo/src/Full_Demo/IntQueueTimer.c
FreeRTOS/Demo/CORTEX_A9_Zynq_ZC702/RTOSDemo/src/Full_Demo/IntQueueTimer.h
FreeRTOS/Demo/CORTEX_A9_Zynq_ZC702/RTOSDemo/src/Full_Demo/main_full.c
FreeRTOS/Demo/CORTEX_A9_Zynq_ZC702/RTOSDemo/src/Full_Demo/reg_test.S
FreeRTOS/Demo/CORTEX_A9_Zynq_ZC702/RTOSDemo/src/Full_Demo/serial.c
FreeRTOS/Demo/CORTEX_A9_Zynq_ZC702/RTOSDemo/src/ParTest.c
FreeRTOS/Demo/CORTEX_A9_Zynq_ZC702/RTOSDemo/src/lwIP_Demo/lwIP_Apps/apps/BasicSocketCommandServer/BasicSocketCommandServer.c
FreeRTOS/Demo/CORTEX_A9_Zynq_ZC702/RTOSDemo/src/lwIP_Demo/lwIP_Apps/lwIP_Apps.c
FreeRTOS/Demo/CORTEX_A9_Zynq_ZC702/RTOSDemo/src/lwIP_Demo/lwIP_Apps/lwIP_Apps.h
FreeRTOS/Demo/CORTEX_A9_Zynq_ZC702/RTOSDemo/src/lwIP_Demo/main_lwIP.c
FreeRTOS/Demo/CORTEX_A9_Zynq_ZC702/RTOSDemo/src/main.c
FreeRTOS/Demo/CORTEX_AT91SAM3U256_IAR/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_AT91SAM3U256_IAR/ParTest/ParTest.c
FreeRTOS/Demo/CORTEX_AT91SAM3U256_IAR/lcd_message.h
FreeRTOS/Demo/CORTEX_AT91SAM3U256_IAR/main.c
FreeRTOS/Demo/CORTEX_AT91SAM3U256_IAR/serial/serial.c
FreeRTOS/Demo/CORTEX_ATSAM3S-EK2_Atmel_Studio/src/Common-Demo-Source/comtest.c
FreeRTOS/Demo/CORTEX_ATSAM3S-EK2_Atmel_Studio/src/Common-Demo-Source/include/demo_serial.h
FreeRTOS/Demo/CORTEX_ATSAM3S-EK2_Atmel_Studio/src/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_ATSAM3S-EK2_Atmel_Studio/src/ParTest.c
FreeRTOS/Demo/CORTEX_ATSAM3S-EK2_Atmel_Studio/src/main.c
FreeRTOS/Demo/CORTEX_ATSAM3S-EK2_Atmel_Studio/src/main_blinky.c
FreeRTOS/Demo/CORTEX_ATSAM3S-EK2_Atmel_Studio/src/main_full.c
FreeRTOS/Demo/CORTEX_ATSAM3S-EK2_Atmel_Studio/src/serial.c
FreeRTOS/Demo/CORTEX_ATSAM3X_Atmel_Studio/src/Common-Demo-Source/comtest.c
FreeRTOS/Demo/CORTEX_ATSAM3X_Atmel_Studio/src/Common-Demo-Source/include/demo_serial.h
FreeRTOS/Demo/CORTEX_ATSAM3X_Atmel_Studio/src/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_ATSAM3X_Atmel_Studio/src/ParTest.c
FreeRTOS/Demo/CORTEX_ATSAM3X_Atmel_Studio/src/main.c
FreeRTOS/Demo/CORTEX_ATSAM3X_Atmel_Studio/src/main_blinky.c
FreeRTOS/Demo/CORTEX_ATSAM3X_Atmel_Studio/src/main_full.c
FreeRTOS/Demo/CORTEX_ATSAM3X_Atmel_Studio/src/serial.c
FreeRTOS/Demo/CORTEX_CY8C5588_PSoC_Creator_GCC/FreeRTOS_Demo.cydsn/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_CY8C5588_PSoC_Creator_GCC/FreeRTOS_Demo.cydsn/IntQueueTimer.c
FreeRTOS/Demo/CORTEX_CY8C5588_PSoC_Creator_GCC/FreeRTOS_Demo.cydsn/IntQueueTimer.h
FreeRTOS/Demo/CORTEX_CY8C5588_PSoC_Creator_GCC/FreeRTOS_Demo.cydsn/ParTest.c
FreeRTOS/Demo/CORTEX_CY8C5588_PSoC_Creator_GCC/FreeRTOS_Demo.cydsn/Serial.c
FreeRTOS/Demo/CORTEX_CY8C5588_PSoC_Creator_GCC/FreeRTOS_Demo.cydsn/TimerTest.c
FreeRTOS/Demo/CORTEX_CY8C5588_PSoC_Creator_GCC/FreeRTOS_Demo.cydsn/main.c
FreeRTOS/Demo/CORTEX_CY8C5588_PSoC_Creator_Keil/FreeRTOS_Demo.cydsn/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_CY8C5588_PSoC_Creator_Keil/FreeRTOS_Demo.cydsn/IntQueueTimer.c
FreeRTOS/Demo/CORTEX_CY8C5588_PSoC_Creator_Keil/FreeRTOS_Demo.cydsn/IntQueueTimer.h
FreeRTOS/Demo/CORTEX_CY8C5588_PSoC_Creator_Keil/FreeRTOS_Demo.cydsn/ParTest.c
FreeRTOS/Demo/CORTEX_CY8C5588_PSoC_Creator_Keil/FreeRTOS_Demo.cydsn/Serial.c
FreeRTOS/Demo/CORTEX_CY8C5588_PSoC_Creator_Keil/FreeRTOS_Demo.cydsn/TimerTest.c
FreeRTOS/Demo/CORTEX_CY8C5588_PSoC_Creator_Keil/FreeRTOS_Demo.cydsn/main.c
FreeRTOS/Demo/CORTEX_CY8C5588_PSoC_Creator_RVDS/FreeRTOS_Demo.cydsn/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_CY8C5588_PSoC_Creator_RVDS/FreeRTOS_Demo.cydsn/IntQueueTimer.c
FreeRTOS/Demo/CORTEX_CY8C5588_PSoC_Creator_RVDS/FreeRTOS_Demo.cydsn/IntQueueTimer.h
FreeRTOS/Demo/CORTEX_CY8C5588_PSoC_Creator_RVDS/FreeRTOS_Demo.cydsn/ParTest.c
FreeRTOS/Demo/CORTEX_CY8C5588_PSoC_Creator_RVDS/FreeRTOS_Demo.cydsn/Serial.c
FreeRTOS/Demo/CORTEX_CY8C5588_PSoC_Creator_RVDS/FreeRTOS_Demo.cydsn/TimerTest.c
FreeRTOS/Demo/CORTEX_CY8C5588_PSoC_Creator_RVDS/FreeRTOS_Demo.cydsn/main.c
FreeRTOS/Demo/CORTEX_EFM32_Giant_Gecko_Simplicity_Studio/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_EFM32_Giant_Gecko_Simplicity_Studio/Full_Demo/RegTest.c
FreeRTOS/Demo/CORTEX_EFM32_Giant_Gecko_Simplicity_Studio/Full_Demo/main_full.c
FreeRTOS/Demo/CORTEX_EFM32_Giant_Gecko_Simplicity_Studio/Low_Power_Demo/low_power_tick_management_BURTC.c
FreeRTOS/Demo/CORTEX_EFM32_Giant_Gecko_Simplicity_Studio/Low_Power_Demo/low_power_tick_management_RTC.c
FreeRTOS/Demo/CORTEX_EFM32_Giant_Gecko_Simplicity_Studio/Low_Power_Demo/main_low_power.c
FreeRTOS/Demo/CORTEX_EFM32_Giant_Gecko_Simplicity_Studio/main.c
FreeRTOS/Demo/CORTEX_EFM32_Pearl_Gecko_Simplicity_Studio/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_EFM32_Pearl_Gecko_Simplicity_Studio/Full_Demo/RegTest.c
FreeRTOS/Demo/CORTEX_EFM32_Pearl_Gecko_Simplicity_Studio/Full_Demo/main_full.c
FreeRTOS/Demo/CORTEX_EFM32_Pearl_Gecko_Simplicity_Studio/Low_Power_Demo/low_power_tick_management_RTCC.c
FreeRTOS/Demo/CORTEX_EFM32_Pearl_Gecko_Simplicity_Studio/Low_Power_Demo/main_low_power.c
FreeRTOS/Demo/CORTEX_EFM32_Pearl_Gecko_Simplicity_Studio/main.c
FreeRTOS/Demo/CORTEX_Kinetis_K60_Tower_IAR/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_Kinetis_K60_Tower_IAR/ParTest.c
FreeRTOS/Demo/CORTEX_Kinetis_K60_Tower_IAR/main-full.c
FreeRTOS/Demo/CORTEX_Kinetis_K60_Tower_IAR/main_blinky.c
FreeRTOS/Demo/CORTEX_Kinetis_K60_Tower_IAR/uIP_Task.c
FreeRTOS/Demo/CORTEX_Kinetis_K60_Tower_IAR/webserver/EMAC.c
FreeRTOS/Demo/CORTEX_Kinetis_K60_Tower_IAR/webserver/EMAC.h
FreeRTOS/Demo/CORTEX_LM3S102_GCC/Demo1/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_LM3S102_GCC/Demo1/main.c
FreeRTOS/Demo/CORTEX_LM3S102_GCC/Demo2/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_LM3S102_GCC/Demo2/main.c
FreeRTOS/Demo/CORTEX_LM3S102_GCC/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_LM3S102_GCC/ParTest/ParTest.c
FreeRTOS/Demo/CORTEX_LM3S102_GCC/main.c
FreeRTOS/Demo/CORTEX_LM3S102_Rowley/Demo1/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_LM3S102_Rowley/Demo1/ParTest.c
FreeRTOS/Demo/CORTEX_LM3S102_Rowley/Demo1/main.c
FreeRTOS/Demo/CORTEX_LM3S102_Rowley/Demo2/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_LM3S102_Rowley/Demo2/ParTest.c
FreeRTOS/Demo/CORTEX_LM3S102_Rowley/Demo2/main.c
FreeRTOS/Demo/CORTEX_LM3S102_Rowley/Demo3/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_LM3S102_Rowley/Demo3/ParTest.c
FreeRTOS/Demo/CORTEX_LM3S102_Rowley/Demo3/main.c
FreeRTOS/Demo/CORTEX_LM3S316_IAR/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_LM3S316_IAR/ParTest/ParTest.c
FreeRTOS/Demo/CORTEX_LM3S316_IAR/commstest.c
FreeRTOS/Demo/CORTEX_LM3S316_IAR/commstest.h
FreeRTOS/Demo/CORTEX_LM3S316_IAR/main.c
FreeRTOS/Demo/CORTEX_LM3S811_GCC/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_LM3S811_GCC/main.c
FreeRTOS/Demo/CORTEX_LM3S811_IAR/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_LM3S811_IAR/main.c
FreeRTOS/Demo/CORTEX_LM3S811_KEIL/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_LM3S811_KEIL/heap/heap_1.c
FreeRTOS/Demo/CORTEX_LM3S811_KEIL/main.c
FreeRTOS/Demo/CORTEX_LM3Sxxxx_IAR_Keil/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_LM3Sxxxx_IAR_Keil/IntQueueTimer.c
FreeRTOS/Demo/CORTEX_LM3Sxxxx_IAR_Keil/IntQueueTimer.h
FreeRTOS/Demo/CORTEX_LM3Sxxxx_IAR_Keil/ParTest/ParTest.c
FreeRTOS/Demo/CORTEX_LM3Sxxxx_IAR_Keil/main.c
FreeRTOS/Demo/CORTEX_LM3Sxxxx_IAR_Keil/timertest.c
FreeRTOS/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/emac.c
FreeRTOS/Demo/CORTEX_LM3Sxxxx_IAR_Keil/webserver/uIP_Task.c
FreeRTOS/Demo/CORTEX_LM3Sxxxx_Rowley/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_LM3Sxxxx_Rowley/IntQueueTimer.c
FreeRTOS/Demo/CORTEX_LM3Sxxxx_Rowley/IntQueueTimer.h
FreeRTOS/Demo/CORTEX_LM3Sxxxx_Rowley/ParTest/ParTest.c
FreeRTOS/Demo/CORTEX_LM3Sxxxx_Rowley/main.c
FreeRTOS/Demo/CORTEX_LM3Sxxxx_Rowley/timertest.c
FreeRTOS/Demo/CORTEX_LM3Sxxxx_Rowley/webserver/emac.c
FreeRTOS/Demo/CORTEX_LM3Sxxxx_Rowley/webserver/uIP_Task.c
FreeRTOS/Demo/CORTEX_LPC1768_GCC_RedSuite/src/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_LPC1768_GCC_RedSuite/src/ParTest.c
FreeRTOS/Demo/CORTEX_LPC1768_GCC_RedSuite/src/main.c
FreeRTOS/Demo/CORTEX_LPC1768_GCC_RedSuite/src/webserver/emac.c
FreeRTOS/Demo/CORTEX_LPC1768_GCC_RedSuite/src/webserver/uIP_Task.c
FreeRTOS/Demo/CORTEX_LPC1768_GCC_Rowley/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_LPC1768_GCC_Rowley/LED.h
FreeRTOS/Demo/CORTEX_LPC1768_GCC_Rowley/ParTest.c
FreeRTOS/Demo/CORTEX_LPC1768_GCC_Rowley/main.c
FreeRTOS/Demo/CORTEX_LPC1768_GCC_Rowley/webserver/emac.c
FreeRTOS/Demo/CORTEX_LPC1768_GCC_Rowley/webserver/uIP_Task.c
FreeRTOS/Demo/CORTEX_LPC1768_IAR/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_LPC1768_IAR/LED.h
FreeRTOS/Demo/CORTEX_LPC1768_IAR/ParTest.c
FreeRTOS/Demo/CORTEX_LPC1768_IAR/main.c
FreeRTOS/Demo/CORTEX_LPC1768_IAR/webserver/emac.c
FreeRTOS/Demo/CORTEX_LPC1768_IAR/webserver/uIP_Task.c
FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/RegTest.c
FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/Sample-CLI-commands.c
FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/UARTCommandConsole.c
FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/UARTCommandConsole.h
FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/config/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/main-blinky.c
FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/main-full.c
FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/main.c
FreeRTOS/Demo/CORTEX_M0+_LPC51U68_GCC_IAR_KEIL/GCC_specific/RegTest.c
FreeRTOS/Demo/CORTEX_M0+_LPC51U68_GCC_IAR_KEIL/GCC_specific/compiler_attributes.h
FreeRTOS/Demo/CORTEX_M0+_LPC51U68_GCC_IAR_KEIL/IAR_specific/RegTest_IAR.s
FreeRTOS/Demo/CORTEX_M0+_LPC51U68_GCC_IAR_KEIL/IAR_specific/compiler_attributes.h
FreeRTOS/Demo/CORTEX_M0+_LPC51U68_GCC_IAR_KEIL/Keil_specific/RegTest_Keil.s
FreeRTOS/Demo/CORTEX_M0+_LPC51U68_GCC_IAR_KEIL/Keil_specific/compiler_attributes.h
FreeRTOS/Demo/CORTEX_M0+_LPC51U68_GCC_IAR_KEIL/app/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_M0+_LPC51U68_GCC_IAR_KEIL/app/IntQueueTimer.c
FreeRTOS/Demo/CORTEX_M0+_LPC51U68_GCC_IAR_KEIL/app/IntQueueTimer.h
FreeRTOS/Demo/CORTEX_M0+_LPC51U68_GCC_IAR_KEIL/app/main_blinky.c
FreeRTOS/Demo/CORTEX_M0+_LPC51U68_GCC_IAR_KEIL/app/main_full.c
FreeRTOS/Demo/CORTEX_M0_Infineon_XMC1000_IAR_Keil_GCC/Atollic_Specific/RegTest.c
FreeRTOS/Demo/CORTEX_M0_Infineon_XMC1000_IAR_Keil_GCC/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_M0_Infineon_XMC1000_IAR_Keil_GCC/IAR_Specific/RegTest_IAR.s
FreeRTOS/Demo/CORTEX_M0_Infineon_XMC1000_IAR_Keil_GCC/Keil_Specific/RegTest_Keil.s
FreeRTOS/Demo/CORTEX_M0_Infineon_XMC1000_IAR_Keil_GCC/ParTest_XMC1100.c
FreeRTOS/Demo/CORTEX_M0_Infineon_XMC1000_IAR_Keil_GCC/ParTest_XMC1200.c
FreeRTOS/Demo/CORTEX_M0_Infineon_XMC1000_IAR_Keil_GCC/ParTest_XMC1300.c
FreeRTOS/Demo/CORTEX_M0_Infineon_XMC1000_IAR_Keil_GCC/main-blinky.c
FreeRTOS/Demo/CORTEX_M0_Infineon_XMC1000_IAR_Keil_GCC/main-full.c
FreeRTOS/Demo/CORTEX_M0_Infineon_XMC1000_IAR_Keil_GCC/main.c
FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/IntQueueTimer.c
FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/IntQueueTimer.h
FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/RegTest.c
FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/main-blinky.c
FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/main-full.c
FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/main.c
FreeRTOS/Demo/CORTEX_M0_STM32F0518_IAR/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_M0_STM32F0518_IAR/ParTest.c
FreeRTOS/Demo/CORTEX_M0_STM32F0518_IAR/RegTest.s
FreeRTOS/Demo/CORTEX_M0_STM32F0518_IAR/main-blinky.c
FreeRTOS/Demo/CORTEX_M0_STM32F0518_IAR/main-full.c
FreeRTOS/Demo/CORTEX_M0_STM32F0518_IAR/main.c
FreeRTOS/Demo/CORTEX_M4F_CEC1302_Keil_GCC/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_M4F_CEC1302_Keil_GCC/GCC_Specific/RegTest.c
FreeRTOS/Demo/CORTEX_M4F_CEC1302_Keil_GCC/Keil_Specific/RegTest.c
FreeRTOS/Demo/CORTEX_M4F_CEC1302_Keil_GCC/main.c
FreeRTOS/Demo/CORTEX_M4F_CEC1302_Keil_GCC/main_full/IntQueueTimer.c
FreeRTOS/Demo/CORTEX_M4F_CEC1302_Keil_GCC/main_full/IntQueueTimer.h
FreeRTOS/Demo/CORTEX_M4F_CEC1302_Keil_GCC/main_full/main_full.c
FreeRTOS/Demo/CORTEX_M4F_CEC1302_Keil_GCC/main_low_power/low_power_tick_config.c
FreeRTOS/Demo/CORTEX_M4F_CEC1302_Keil_GCC/main_low_power/main_low_power.c
FreeRTOS/Demo/CORTEX_M4F_CEC1302_MikroC/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_M4F_CEC1302_MikroC/MikroC_Specific/RegTest.c
FreeRTOS/Demo/CORTEX_M4F_CEC1302_MikroC/main.c
FreeRTOS/Demo/CORTEX_M4F_CEC1302_MikroC/main_full/IntQueueTimer.c
FreeRTOS/Demo/CORTEX_M4F_CEC1302_MikroC/main_full/IntQueueTimer.h
FreeRTOS/Demo/CORTEX_M4F_CEC1302_MikroC/main_full/main_full.c
FreeRTOS/Demo/CORTEX_M4F_CEC1302_MikroC/main_low_power/low_power_tick_config.c
FreeRTOS/Demo/CORTEX_M4F_CEC1302_MikroC/main_low_power/main_low_power.c
FreeRTOS/Demo/CORTEX_M4F_CEC_MEC_17xx_51xx_Keil_GCC/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_M4F_CEC_MEC_17xx_51xx_Keil_GCC/main.c
FreeRTOS/Demo/CORTEX_M4F_Infineon_XMC4000_GCC_Dave/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_M4F_Infineon_XMC4000_GCC_Dave/main.c
FreeRTOS/Demo/CORTEX_M4F_Infineon_XMC4000_GCC_Dave/main_blinky.c
FreeRTOS/Demo/CORTEX_M4F_Infineon_XMC4000_GCC_Dave/main_full.c
FreeRTOS/Demo/CORTEX_M4F_Infineon_XMC4000_IAR/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_M4F_Infineon_XMC4000_IAR/RegTest.s
FreeRTOS/Demo/CORTEX_M4F_Infineon_XMC4000_IAR/main.c
FreeRTOS/Demo/CORTEX_M4F_Infineon_XMC4000_IAR/main_blinky.c
FreeRTOS/Demo/CORTEX_M4F_Infineon_XMC4000_IAR/main_full.c
FreeRTOS/Demo/CORTEX_M4F_Infineon_XMC4000_Keil/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_M4F_Infineon_XMC4000_Keil/RegTest.c
FreeRTOS/Demo/CORTEX_M4F_Infineon_XMC4000_Keil/main.c
FreeRTOS/Demo/CORTEX_M4F_Infineon_XMC4000_Keil/main_blinky.c
FreeRTOS/Demo/CORTEX_M4F_Infineon_XMC4000_Keil/main_full.c
FreeRTOS/Demo/CORTEX_M4F_Infineon_XMC4000_Tasking/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_M4F_Infineon_XMC4000_Tasking/main.c
FreeRTOS/Demo/CORTEX_M4F_Infineon_XMC4000_Tasking/main_blinky.c
FreeRTOS/Demo/CORTEX_M4F_Infineon_XMC4000_Tasking/main_full.c
FreeRTOS/Demo/CORTEX_M4F_Infineon_XMC4500_GCC_Atollic/src/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_M4F_Infineon_XMC4500_GCC_Atollic/src/main.c
FreeRTOS/Demo/CORTEX_M4F_Infineon_XMC4500_GCC_Atollic/src/main_blinky.c
FreeRTOS/Demo/CORTEX_M4F_Infineon_XMC4500_GCC_Atollic/src/main_full.c
FreeRTOS/Demo/CORTEX_M4F_M0_LPC43xx_Keil/M4/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_M4F_M0_LPC43xx_Keil/M4/ParTest.c
FreeRTOS/Demo/CORTEX_M4F_M0_LPC43xx_Keil/M4/RegTest.c
FreeRTOS/Demo/CORTEX_M4F_M0_LPC43xx_Keil/M4/main.c
FreeRTOS/Demo/CORTEX_M4F_MSP432_LaunchPad_IAR_CCS_Keil/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_M4F_MSP432_LaunchPad_IAR_CCS_Keil/Full_Demo/IntQueueTimer.c
FreeRTOS/Demo/CORTEX_M4F_MSP432_LaunchPad_IAR_CCS_Keil/Full_Demo/IntQueueTimer.h
FreeRTOS/Demo/CORTEX_M4F_MSP432_LaunchPad_IAR_CCS_Keil/Full_Demo/RegTest.asm
FreeRTOS/Demo/CORTEX_M4F_MSP432_LaunchPad_IAR_CCS_Keil/Full_Demo/RegTest.c
FreeRTOS/Demo/CORTEX_M4F_MSP432_LaunchPad_IAR_CCS_Keil/Full_Demo/RegTest.s
FreeRTOS/Demo/CORTEX_M4F_MSP432_LaunchPad_IAR_CCS_Keil/Full_Demo/RunTimeStatsTimer.c
FreeRTOS/Demo/CORTEX_M4F_MSP432_LaunchPad_IAR_CCS_Keil/Full_Demo/main_full.c
FreeRTOS/Demo/CORTEX_M4F_MSP432_LaunchPad_IAR_CCS_Keil/Full_Demo/serial.c
FreeRTOS/Demo/CORTEX_M4F_MSP432_LaunchPad_IAR_CCS_Keil/SimplyBlinkyDemo/main_blinky.c
FreeRTOS/Demo/CORTEX_M4F_MSP432_LaunchPad_IAR_CCS_Keil/main.c
FreeRTOS/Demo/CORTEX_M4F_STM32F407ZG-SK/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_M4F_STM32F407ZG-SK/ParTest.c
FreeRTOS/Demo/CORTEX_M4F_STM32F407ZG-SK/RegTest.s
FreeRTOS/Demo/CORTEX_M4F_STM32F407ZG-SK/main.c
FreeRTOS/Demo/CORTEX_M4_ATSAM4L_Atmel_Studio/src/ParTest.c
FreeRTOS/Demo/CORTEX_M4_ATSAM4L_Atmel_Studio/src/SAM4L_low_power_tick_management.c
FreeRTOS/Demo/CORTEX_M4_ATSAM4L_Atmel_Studio/src/config/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_M4_ATSAM4L_Atmel_Studio/src/main.c
FreeRTOS/Demo/CORTEX_M4_ATSAM4L_Atmel_Studio/src/main_full.c
FreeRTOS/Demo/CORTEX_M4_ATSAM4L_Atmel_Studio/src/main_low_power.c
FreeRTOS/Demo/CORTEX_M4_ATSAM4S_Atmel_Studio/src/Common-Demo-Source/comtest.c
FreeRTOS/Demo/CORTEX_M4_ATSAM4S_Atmel_Studio/src/Common-Demo-Source/include/demo_serial.h
FreeRTOS/Demo/CORTEX_M4_ATSAM4S_Atmel_Studio/src/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_M4_ATSAM4S_Atmel_Studio/src/IntQueueTimer.c
FreeRTOS/Demo/CORTEX_M4_ATSAM4S_Atmel_Studio/src/IntQueueTimer.h
FreeRTOS/Demo/CORTEX_M4_ATSAM4S_Atmel_Studio/src/ParTest.c
FreeRTOS/Demo/CORTEX_M4_ATSAM4S_Atmel_Studio/src/main.c
FreeRTOS/Demo/CORTEX_M4_ATSAM4S_Atmel_Studio/src/main_blinky.c
FreeRTOS/Demo/CORTEX_M4_ATSAM4S_Atmel_Studio/src/main_full.c
FreeRTOS/Demo/CORTEX_M4_ATSAM4S_Atmel_Studio/src/serial.c
FreeRTOS/Demo/CORTEX_M4_SimpleLink_CC3220SF_CCS/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_M4_SimpleLink_CC3220SF_CCS/Full_Demo/RegTest.asm
FreeRTOS/Demo/CORTEX_M4_SimpleLink_CC3220SF_CCS/Full_Demo/main_full.c
FreeRTOS/Demo/CORTEX_M4_SimpleLink_CC3220SF_CCS/Simply_Blinky_Demo/main_blinky.c
FreeRTOS/Demo/CORTEX_M4_SimpleLink_CC3220SF_CCS/main.c
FreeRTOS/Demo/CORTEX_M7_M4_AMP_STM32H745I_Discovery_IAR/CM4/main.c
FreeRTOS/Demo/CORTEX_M7_M4_AMP_STM32H745I_Discovery_IAR/CM7/main.c
FreeRTOS/Demo/CORTEX_M7_SAME70_Xplained_AtmelStudio/src/Blinky_Demo/main_blinky.c
FreeRTOS/Demo/CORTEX_M7_SAME70_Xplained_AtmelStudio/src/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_M7_SAME70_Xplained_AtmelStudio/src/Full_Demo/IntQueueTimer.c
FreeRTOS/Demo/CORTEX_M7_SAME70_Xplained_AtmelStudio/src/Full_Demo/IntQueueTimer.h
FreeRTOS/Demo/CORTEX_M7_SAME70_Xplained_AtmelStudio/src/Full_Demo/RegTest_GCC.c
FreeRTOS/Demo/CORTEX_M7_SAME70_Xplained_AtmelStudio/src/Full_Demo/main_full.c
FreeRTOS/Demo/CORTEX_M7_SAME70_Xplained_AtmelStudio/src/main.c
FreeRTOS/Demo/CORTEX_M7_SAMV71_Xplained_AtmelStudio/Blinky_Demo/main_blinky.c
FreeRTOS/Demo/CORTEX_M7_SAMV71_Xplained_AtmelStudio/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_M7_SAMV71_Xplained_AtmelStudio/Full_Demo/IntQueueTimer.c
FreeRTOS/Demo/CORTEX_M7_SAMV71_Xplained_AtmelStudio/Full_Demo/IntQueueTimer.h
FreeRTOS/Demo/CORTEX_M7_SAMV71_Xplained_AtmelStudio/Full_Demo/RegTest_GCC.c
FreeRTOS/Demo/CORTEX_M7_SAMV71_Xplained_AtmelStudio/Full_Demo/main_full.c
FreeRTOS/Demo/CORTEX_M7_SAMV71_Xplained_AtmelStudio/main.c
FreeRTOS/Demo/CORTEX_M7_SAMV71_Xplained_IAR_Keil/Blinky_Demo/main_blinky.c
FreeRTOS/Demo/CORTEX_M7_SAMV71_Xplained_IAR_Keil/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_M7_SAMV71_Xplained_IAR_Keil/Full_Demo/IntQueueTimer.c
FreeRTOS/Demo/CORTEX_M7_SAMV71_Xplained_IAR_Keil/Full_Demo/IntQueueTimer.h
FreeRTOS/Demo/CORTEX_M7_SAMV71_Xplained_IAR_Keil/Full_Demo/RegTest.c
FreeRTOS/Demo/CORTEX_M7_SAMV71_Xplained_IAR_Keil/Full_Demo/RegTest.s
FreeRTOS/Demo/CORTEX_M7_SAMV71_Xplained_IAR_Keil/Full_Demo/main_full.c
FreeRTOS/Demo/CORTEX_M7_SAMV71_Xplained_IAR_Keil/main.c
FreeRTOS/Demo/CORTEX_M7_STM32F7_STM32756G-EVAL_IAR_Keil/Blinky_Demo/main_blinky.c
FreeRTOS/Demo/CORTEX_M7_STM32F7_STM32756G-EVAL_IAR_Keil/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_M7_STM32F7_STM32756G-EVAL_IAR_Keil/Full_Demo/IntQueueTimer.c
FreeRTOS/Demo/CORTEX_M7_STM32F7_STM32756G-EVAL_IAR_Keil/Full_Demo/IntQueueTimer.h
FreeRTOS/Demo/CORTEX_M7_STM32F7_STM32756G-EVAL_IAR_Keil/Full_Demo/RegTest_IAR.s
FreeRTOS/Demo/CORTEX_M7_STM32F7_STM32756G-EVAL_IAR_Keil/Full_Demo/RegTest_Keil.c
FreeRTOS/Demo/CORTEX_M7_STM32F7_STM32756G-EVAL_IAR_Keil/Full_Demo/main_full.c
FreeRTOS/Demo/CORTEX_M7_STM32F7_STM32756G-EVAL_IAR_Keil/main.c
FreeRTOS/Demo/CORTEX_MB9A310_IAR_Keil/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_MB9A310_IAR_Keil/ParTest.c
FreeRTOS/Demo/CORTEX_MB9A310_IAR_Keil/main-full.c
FreeRTOS/Demo/CORTEX_MB9A310_IAR_Keil/main_blinky.c
FreeRTOS/Demo/CORTEX_MB9A310_IAR_Keil/serial.c
FreeRTOS/Demo/CORTEX_MB9B500_IAR_Keil/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_MB9B500_IAR_Keil/ParTest.c
FreeRTOS/Demo/CORTEX_MB9B500_IAR_Keil/main-full.c
FreeRTOS/Demo/CORTEX_MB9B500_IAR_Keil/main_blinky.c
FreeRTOS/Demo/CORTEX_MB9B500_IAR_Keil/serial.c
FreeRTOS/Demo/CORTEX_MPU_CEC_MEC_17xx_51xx_Keil_GCC/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_MPU_CEC_MEC_17xx_51xx_Keil_GCC/GCC_Specific/RegTest.c
FreeRTOS/Demo/CORTEX_MPU_CEC_MEC_17xx_51xx_Keil_GCC/Keil_Specific/RegTest.c
FreeRTOS/Demo/CORTEX_MPU_CEC_MEC_17xx_51xx_Keil_GCC/main.c
FreeRTOS/Demo/CORTEX_MPU_LPC54018_MCUXpresso/Config/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_MPU_LPC54018_MCUXpresso/Demo/main.c
FreeRTOS/Demo/CORTEX_MPU_LPC54018_MCUXpresso/Demo/mpu_demo.c
FreeRTOS/Demo/CORTEX_MPU_LPC54018_MCUXpresso/Demo/mpu_demo.h
FreeRTOS/Demo/CORTEX_MPU_LPC54018_MCUXpresso/Projects/MCUXpresso/Startup/memfault_handler.c
FreeRTOS/Demo/CORTEX_MPU_M23_Nuvoton_NuMaker_PFM_M2351_IAR_GCC/Projects/IAR/Config/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_MPU_M23_Nuvoton_NuMaker_PFM_M2351_IAR_GCC/Projects/IAR/NonSecure/fault_handler.s
FreeRTOS/Demo/CORTEX_MPU_M23_Nuvoton_NuMaker_PFM_M2351_IAR_GCC/Projects/IAR/NonSecure/main_ns.c
FreeRTOS/Demo/CORTEX_MPU_M23_Nuvoton_NuMaker_PFM_M2351_IAR_GCC/Projects/IAR/Secure/main_s.c
FreeRTOS/Demo/CORTEX_MPU_M23_Nuvoton_NuMaker_PFM_M2351_IAR_GCC/Projects/Keil/Config/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_MPU_M23_Nuvoton_NuMaker_PFM_M2351_IAR_GCC/Projects/Keil/NonSecure/main_ns.c
FreeRTOS/Demo/CORTEX_MPU_M23_Nuvoton_NuMaker_PFM_M2351_IAR_GCC/Projects/Keil/Secure/main_s.c
FreeRTOS/Demo/CORTEX_MPU_M33F_NXP_LPC55S69_MCUXpresso/Projects/MCUXpresso/Config/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_MPU_M33F_NXP_LPC55S69_MCUXpresso/Projects/MCUXpresso/NonSecure/main_ns.c
FreeRTOS/Demo/CORTEX_MPU_M33F_NXP_LPC55S69_MCUXpresso/Projects/MCUXpresso/Secure/main_s.c
FreeRTOS/Demo/CORTEX_MPU_M33F_Simulator_Keil_GCC/Config/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_MPU_M33F_Simulator_Keil_GCC/NonSecure/main_ns.c
FreeRTOS/Demo/CORTEX_MPU_M33F_Simulator_Keil_GCC/Secure/main_s.c
FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/Config/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/Demo/app_main.c
FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/Demo/app_main.h
FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/Demo/mpu_demo.c
FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/Demo/mpu_demo.h
FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/Projects/GCC/Startup/memfault_handler.c
FreeRTOS/Demo/CORTEX_MPU_STM32L4_Discovery_GCC_IAR_Keil/Config/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_MPU_STM32L4_Discovery_GCC_IAR_Keil/Demo/app_main.c
FreeRTOS/Demo/CORTEX_MPU_STM32L4_Discovery_GCC_IAR_Keil/Demo/app_main.h
FreeRTOS/Demo/CORTEX_MPU_STM32L4_Discovery_GCC_IAR_Keil/Demo/mpu_demo.c
FreeRTOS/Demo/CORTEX_MPU_STM32L4_Discovery_GCC_IAR_Keil/Demo/mpu_demo.h
FreeRTOS/Demo/CORTEX_MPU_STM32L4_Discovery_GCC_IAR_Keil/Projects/GCC/Startup/memfault_handler.c
FreeRTOS/Demo/CORTEX_MPU_STM32L4_Discovery_GCC_IAR_Keil/Projects/IAR/memfault_handler.s
FreeRTOS/Demo/CORTEX_MPU_STM32L4_Discovery_GCC_IAR_Keil/Projects/Keil/memfault_handler.c
FreeRTOS/Demo/CORTEX_MPU_Simulator_Keil_GCC/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_MPU_Simulator_Keil_GCC/GCC_Specific/RegTest.c
FreeRTOS/Demo/CORTEX_MPU_Simulator_Keil_GCC/Keil_Specific/RegTest.c
FreeRTOS/Demo/CORTEX_MPU_Simulator_Keil_GCC/main.c
FreeRTOS/Demo/CORTEX_MPU_Static_Simulator_Keil_GCC/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_MPU_Static_Simulator_Keil_GCC/GCC_Specific/RegTest.c
FreeRTOS/Demo/CORTEX_MPU_Static_Simulator_Keil_GCC/Keil_Specific/RegTest.c
FreeRTOS/Demo/CORTEX_MPU_Static_Simulator_Keil_GCC/main.c
FreeRTOS/Demo/CORTEX_R4F_RZ_T_GCC_IAR/System/IAR/Interrupt_Entry_Stubs.asm
FreeRTOS/Demo/CORTEX_R4F_RZ_T_GCC_IAR/src/Blinky_Demo/main_blinky.c
FreeRTOS/Demo/CORTEX_R4F_RZ_T_GCC_IAR/src/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_R4F_RZ_T_GCC_IAR/src/FreeRTOS_tick_config.c
FreeRTOS/Demo/CORTEX_R4F_RZ_T_GCC_IAR/src/Full_Demo/IntQueueTimer.c
FreeRTOS/Demo/CORTEX_R4F_RZ_T_GCC_IAR/src/Full_Demo/IntQueueTimer.h
FreeRTOS/Demo/CORTEX_R4F_RZ_T_GCC_IAR/src/Full_Demo/main_full.c
FreeRTOS/Demo/CORTEX_R4F_RZ_T_GCC_IAR/src/Full_Demo/reg_test_GCC.S
FreeRTOS/Demo/CORTEX_R4F_RZ_T_GCC_IAR/src/Full_Demo/reg_test_IAR.asm
FreeRTOS/Demo/CORTEX_R4F_RZ_T_GCC_IAR/src/main.c
FreeRTOS/Demo/CORTEX_R4_RM48_TMS570_CCS5/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_R4_RM48_TMS570_CCS5/Library/het.c
FreeRTOS/Demo/CORTEX_R4_RM48_TMS570_CCS5/Library/het.h
FreeRTOS/Demo/CORTEX_R4_RM48_TMS570_CCS5/ParTest.c
FreeRTOS/Demo/CORTEX_R4_RM48_TMS570_CCS5/flop_hercules.c
FreeRTOS/Demo/CORTEX_R4_RM48_TMS570_CCS5/flop_hercules.h
FreeRTOS/Demo/CORTEX_R4_RM48_TMS570_CCS5/main.c
FreeRTOS/Demo/CORTEX_R4_RM48_TMS570_CCS5/main_blinky.c
FreeRTOS/Demo/CORTEX_R4_RM48_TMS570_CCS5/main_full.c
FreeRTOS/Demo/CORTEX_R4_RM48_TMS570_CCS5/reg_test.asm
FreeRTOS/Demo/CORTEX_R4_RM48_TMS570_CCS5/serial.c
FreeRTOS/Demo/CORTEX_R5_UltraScale_MPSoC/RTOSDemo_R5/src/Blinky_Demo/main_blinky.c
FreeRTOS/Demo/CORTEX_R5_UltraScale_MPSoC/RTOSDemo_R5/src/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_R5_UltraScale_MPSoC/RTOSDemo_R5/src/FreeRTOS_tick_config.c
FreeRTOS/Demo/CORTEX_R5_UltraScale_MPSoC/RTOSDemo_R5/src/Full_Demo/IntQueueTimer.c
FreeRTOS/Demo/CORTEX_R5_UltraScale_MPSoC/RTOSDemo_R5/src/Full_Demo/IntQueueTimer.h
FreeRTOS/Demo/CORTEX_R5_UltraScale_MPSoC/RTOSDemo_R5/src/Full_Demo/main_full.c
FreeRTOS/Demo/CORTEX_R5_UltraScale_MPSoC/RTOSDemo_R5/src/Full_Demo/reg_test.S
FreeRTOS/Demo/CORTEX_R5_UltraScale_MPSoC/RTOSDemo_R5/src/main.c
FreeRTOS/Demo/CORTEX_STM32F100_Atollic/Simple_Demo_Source/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_STM32F100_Atollic/Simple_Demo_Source/main.c
FreeRTOS/Demo/CORTEX_STM32F103_GCC_Rowley/Drivers/STM32_USART.c
FreeRTOS/Demo/CORTEX_STM32F103_GCC_Rowley/Drivers/STM32_USART.h
FreeRTOS/Demo/CORTEX_STM32F103_GCC_Rowley/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_STM32F103_GCC_Rowley/ParTest/ParTest_MCBSTM32.c
FreeRTOS/Demo/CORTEX_STM32F103_GCC_Rowley/ParTest/ParTest_ST_Eval.c
FreeRTOS/Demo/CORTEX_STM32F103_GCC_Rowley/main.c
FreeRTOS/Demo/CORTEX_STM32F103_IAR/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_STM32F103_IAR/ParTest/ParTest.c
FreeRTOS/Demo/CORTEX_STM32F103_IAR/main.c
FreeRTOS/Demo/CORTEX_STM32F103_IAR/serial/serial.c
FreeRTOS/Demo/CORTEX_STM32F103_IAR/timertest.c
FreeRTOS/Demo/CORTEX_STM32F103_Keil/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_STM32F103_Keil/ParTest/ParTest.c
FreeRTOS/Demo/CORTEX_STM32F103_Keil/main.c
FreeRTOS/Demo/CORTEX_STM32F103_Keil/serial/serial.c
FreeRTOS/Demo/CORTEX_STM32F103_Keil/timertest.c
FreeRTOS/Demo/CORTEX_STM32F103_Primer_GCC/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_STM32F103_Primer_GCC/ParTest/ParTest.c
FreeRTOS/Demo/CORTEX_STM32F103_Primer_GCC/bitmap.h
FreeRTOS/Demo/CORTEX_STM32F103_Primer_GCC/main.c
FreeRTOS/Demo/CORTEX_STM32F103_Primer_GCC/timertest.c
FreeRTOS/Demo/CORTEX_STM32F107_GCC_Rowley/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_STM32F107_GCC_Rowley/ParTest/ParTest.c
FreeRTOS/Demo/CORTEX_STM32F107_GCC_Rowley/main.c
FreeRTOS/Demo/CORTEX_STM32F107_GCC_Rowley/scsc.tmp
FreeRTOS/Demo/CORTEX_STM32F107_GCC_Rowley/timertest.c
FreeRTOS/Demo/CORTEX_STM32F107_GCC_Rowley/webserver/emac.c
FreeRTOS/Demo/CORTEX_STM32F107_GCC_Rowley/webserver/emac.c.scsc
FreeRTOS/Demo/CORTEX_STM32F107_GCC_Rowley/webserver/emac.h
FreeRTOS/Demo/CORTEX_STM32F107_GCC_Rowley/webserver/emac.h.scsc
FreeRTOS/Demo/CORTEX_STM32F107_GCC_Rowley/webserver/uIP_Task.c
FreeRTOS/Demo/CORTEX_STM32L152_Discovery_IAR/STM32L_low_power_tick_management.c
FreeRTOS/Demo/CORTEX_STM32L152_Discovery_IAR/include/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_STM32L152_Discovery_IAR/main.c
FreeRTOS/Demo/CORTEX_STM32L152_Discovery_IAR/main_full.c
FreeRTOS/Demo/CORTEX_STM32L152_Discovery_IAR/main_low_power.c
FreeRTOS/Demo/CORTEX_STM32L152_IAR/FreeRTOSConfig.h
FreeRTOS/Demo/CORTEX_STM32L152_IAR/ParTest.c
FreeRTOS/Demo/CORTEX_STM32L152_IAR/main.c
FreeRTOS/Demo/CORTEX_STM32L152_IAR/serial.c
FreeRTOS/Demo/CORTUS_APS3_GCC/Demo/7seg.c
FreeRTOS/Demo/CORTUS_APS3_GCC/Demo/7seg.h
FreeRTOS/Demo/CORTUS_APS3_GCC/Demo/FreeRTOSConfig.h
FreeRTOS/Demo/CORTUS_APS3_GCC/Demo/ParTest.c
FreeRTOS/Demo/CORTUS_APS3_GCC/Demo/RegTest.c
FreeRTOS/Demo/CORTUS_APS3_GCC/Demo/RegTest.h
FreeRTOS/Demo/CORTUS_APS3_GCC/Demo/demoGpio.h
FreeRTOS/Demo/CORTUS_APS3_GCC/Demo/main.c
FreeRTOS/Demo/CORTUS_APS3_GCC/Demo/serial.c
FreeRTOS/Demo/ColdFire_MCF51CN128_CodeWarrior/Sources/FreeRTOSConfig.h
FreeRTOS/Demo/ColdFire_MCF51CN128_CodeWarrior/Sources/ParTest/ParTest.c
FreeRTOS/Demo/ColdFire_MCF51CN128_CodeWarrior/Sources/httpd/uIP_Task.c
FreeRTOS/Demo/ColdFire_MCF51CN128_CodeWarrior/Sources/main.c
FreeRTOS/Demo/ColdFire_MCF52221_CodeWarrior/sources/FreeRTOSConfig.h
FreeRTOS/Demo/ColdFire_MCF52221_CodeWarrior/sources/FreeRTOS_Tick_Setup.c
FreeRTOS/Demo/ColdFire_MCF52221_CodeWarrior/sources/ParTest/ParTest.c
FreeRTOS/Demo/ColdFire_MCF52221_CodeWarrior/sources/main.c
FreeRTOS/Demo/ColdFire_MCF52221_CodeWarrior/sources/serial/serial.c
FreeRTOS/Demo/ColdFire_MCF52259_CodeWarrior/FreeRTOSConfig.h
FreeRTOS/Demo/ColdFire_MCF52259_CodeWarrior/FreeRTOS_Tick_Setup.c
FreeRTOS/Demo/ColdFire_MCF52259_CodeWarrior/HTTPDemo.c
FreeRTOS/Demo/ColdFire_MCF52259_CodeWarrior/HTTPDemo.h
FreeRTOS/Demo/ColdFire_MCF52259_CodeWarrior/ParTest/ParTest.c
FreeRTOS/Demo/ColdFire_MCF52259_CodeWarrior/main.c
FreeRTOS/Demo/Common/ARMv8M/mpu_demo/mpu_demo.c
FreeRTOS/Demo/Common/ARMv8M/mpu_demo/mpu_demo.h
FreeRTOS/Demo/Common/ARMv8M/tz_demo/nsc_functions.c
FreeRTOS/Demo/Common/ARMv8M/tz_demo/nsc_functions.h
FreeRTOS/Demo/Common/ARMv8M/tz_demo/tz_demo.c
FreeRTOS/Demo/Common/ARMv8M/tz_demo/tz_demo.h
FreeRTOS/Demo/Common/Full/BlockQ.c
FreeRTOS/Demo/Common/Full/PollQ.c
FreeRTOS/Demo/Common/Full/comtest.c
FreeRTOS/Demo/Common/Full/death.c
FreeRTOS/Demo/Common/Full/dynamic.c
FreeRTOS/Demo/Common/Full/events.c
FreeRTOS/Demo/Common/Full/flash.c
FreeRTOS/Demo/Common/Full/flop.c
FreeRTOS/Demo/Common/Full/integer.c
FreeRTOS/Demo/Common/Full/print.c
FreeRTOS/Demo/Common/Full/semtest.c
FreeRTOS/Demo/Common/Minimal/AbortDelay.c
FreeRTOS/Demo/Common/Minimal/BlockQ.c
FreeRTOS/Demo/Common/Minimal/EventGroupsDemo.c
FreeRTOS/Demo/Common/Minimal/GenQTest.c
FreeRTOS/Demo/Common/Minimal/IntQueue.c
FreeRTOS/Demo/Common/Minimal/IntSemTest.c
FreeRTOS/Demo/Common/Minimal/MessageBufferAMP.c
FreeRTOS/Demo/Common/Minimal/MessageBufferDemo.c
FreeRTOS/Demo/Common/Minimal/PollQ.c
FreeRTOS/Demo/Common/Minimal/QPeek.c
FreeRTOS/Demo/Common/Minimal/QueueOverwrite.c
FreeRTOS/Demo/Common/Minimal/QueueSet.c
FreeRTOS/Demo/Common/Minimal/QueueSetPolling.c
FreeRTOS/Demo/Common/Minimal/StaticAllocation.c
FreeRTOS/Demo/Common/Minimal/StreamBufferDemo.c
FreeRTOS/Demo/Common/Minimal/StreamBufferInterrupt.c
FreeRTOS/Demo/Common/Minimal/TaskNotify.c
FreeRTOS/Demo/Common/Minimal/TimerDemo.c
FreeRTOS/Demo/Common/Minimal/blocktim.c
FreeRTOS/Demo/Common/Minimal/comtest.c
FreeRTOS/Demo/Common/Minimal/comtest_strings.c
FreeRTOS/Demo/Common/Minimal/countsem.c
FreeRTOS/Demo/Common/Minimal/crflash.c
FreeRTOS/Demo/Common/Minimal/crhook.c
FreeRTOS/Demo/Common/Minimal/death.c
FreeRTOS/Demo/Common/Minimal/dynamic.c
FreeRTOS/Demo/Common/Minimal/flash.c
FreeRTOS/Demo/Common/Minimal/flash_timer.c
FreeRTOS/Demo/Common/Minimal/flop.c
FreeRTOS/Demo/Common/Minimal/integer.c
FreeRTOS/Demo/Common/Minimal/recmutex.c
FreeRTOS/Demo/Common/Minimal/semtest.c
FreeRTOS/Demo/Common/Minimal/sp_flop.c
FreeRTOS/Demo/Common/ethernet/lwip-1.4.0/ports/MicroBlaze-Ethernet-Lite/ethernetif.c
FreeRTOS/Demo/Common/ethernet/lwip-1.4.0/ports/win32/WinPCap/arch.c
FreeRTOS/Demo/Common/ethernet/lwip-1.4.0/ports/win32/WinPCap/netif.h
FreeRTOS/Demo/Common/ethernet/lwip-1.4.0/ports/win32/ethernetif.c
FreeRTOS/Demo/Common/include/AbortDelay.h
FreeRTOS/Demo/Common/include/BlockQ.h
FreeRTOS/Demo/Common/include/EventGroupsDemo.h
FreeRTOS/Demo/Common/include/GenQTest.h
FreeRTOS/Demo/Common/include/IntQueue.h
FreeRTOS/Demo/Common/include/IntSemTest.h
FreeRTOS/Demo/Common/include/MessageBufferAMP.h
FreeRTOS/Demo/Common/include/MessageBufferDemo.h
FreeRTOS/Demo/Common/include/PollQ.h
FreeRTOS/Demo/Common/include/QPeek.h
FreeRTOS/Demo/Common/include/QueueOverwrite.h
FreeRTOS/Demo/Common/include/QueueSet.h
FreeRTOS/Demo/Common/include/QueueSetPolling.h
FreeRTOS/Demo/Common/include/StaticAllocation.h
FreeRTOS/Demo/Common/include/StreamBufferDemo.h
FreeRTOS/Demo/Common/include/StreamBufferInterrupt.h
FreeRTOS/Demo/Common/include/TaskNotify.h
FreeRTOS/Demo/Common/include/TimerDemo.h
FreeRTOS/Demo/Common/include/blocktim.h
FreeRTOS/Demo/Common/include/comtest.h
FreeRTOS/Demo/Common/include/comtest2.h
FreeRTOS/Demo/Common/include/comtest_strings.h
FreeRTOS/Demo/Common/include/countsem.h
FreeRTOS/Demo/Common/include/crflash.h
FreeRTOS/Demo/Common/include/crhook.h
FreeRTOS/Demo/Common/include/death.h
FreeRTOS/Demo/Common/include/dynamic.h
FreeRTOS/Demo/Common/include/fileIO.h
FreeRTOS/Demo/Common/include/flash.h
FreeRTOS/Demo/Common/include/flash_timer.h
FreeRTOS/Demo/Common/include/flop.h
FreeRTOS/Demo/Common/include/integer.h
FreeRTOS/Demo/Common/include/mevents.h
FreeRTOS/Demo/Common/include/partest.h
FreeRTOS/Demo/Common/include/print.h
FreeRTOS/Demo/Common/include/recmutex.h
FreeRTOS/Demo/Common/include/semtest.h
FreeRTOS/Demo/Common/include/serial.h
FreeRTOS/Demo/Cygnal/FreeRTOSConfig.h
FreeRTOS/Demo/Cygnal/Makefile
FreeRTOS/Demo/Cygnal/ParTest/ParTest.c
FreeRTOS/Demo/Cygnal/main.c
FreeRTOS/Demo/Cygnal/serial/serial.c
FreeRTOS/Demo/Flshlite/FRConfig.h
FreeRTOS/Demo/Flshlite/FileIO/fileIO.c
FreeRTOS/Demo/Flshlite/FreeRTOSConfig.h
FreeRTOS/Demo/Flshlite/ParTest/ParTest.c
FreeRTOS/Demo/Flshlite/main.c
FreeRTOS/Demo/Flshlite/serial/serial.c
FreeRTOS/Demo/H8S/RTOSDemo/FreeRTOSConfig.h
FreeRTOS/Demo/H8S/RTOSDemo/ParTest/ParTest.c
FreeRTOS/Demo/H8S/RTOSDemo/main.c
FreeRTOS/Demo/H8S/RTOSDemo/serial/serial.c
FreeRTOS/Demo/HCS12_CodeWarrior_banked/CODE/COM0.C [deleted file]
FreeRTOS/Demo/HCS12_CodeWarrior_banked/CODE/COM0.H [deleted file]
FreeRTOS/Demo/HCS12_CodeWarrior_banked/CODE/_COM0.C [new file with mode: 0644]
FreeRTOS/Demo/HCS12_CodeWarrior_banked/CODE/_COM0.H [new file with mode: 0644]
FreeRTOS/Demo/HCS12_CodeWarrior_banked/FreeRTOSConfig.h
FreeRTOS/Demo/HCS12_CodeWarrior_banked/ParTest/ParTest.c
FreeRTOS/Demo/HCS12_CodeWarrior_banked/main.c
FreeRTOS/Demo/HCS12_CodeWarrior_banked/serial/serial.c
FreeRTOS/Demo/HCS12_CodeWarrior_small/FreeRTOSConfig.h
FreeRTOS/Demo/HCS12_CodeWarrior_small/ParTest/ParTest.c
FreeRTOS/Demo/HCS12_CodeWarrior_small/main.c
FreeRTOS/Demo/HCS12_CodeWarrior_small/serial/serial.c
FreeRTOS/Demo/HCS12_GCC_banked/FreeRTOSConfig.h
FreeRTOS/Demo/HCS12_GCC_banked/ParTest.c
FreeRTOS/Demo/HCS12_GCC_banked/main.c
FreeRTOS/Demo/HCS12_GCC_banked/startup.c
FreeRTOS/Demo/IA32_flat_GCC_Galileo_Gen_2/Blinky_Demo/main_blinky.c
FreeRTOS/Demo/IA32_flat_GCC_Galileo_Gen_2/FreeRTOSConfig.h
FreeRTOS/Demo/IA32_flat_GCC_Galileo_Gen_2/Full_Demo/IntQueueTimer.c
FreeRTOS/Demo/IA32_flat_GCC_Galileo_Gen_2/Full_Demo/IntQueueTimer.h
FreeRTOS/Demo/IA32_flat_GCC_Galileo_Gen_2/Full_Demo/RegTest.S
FreeRTOS/Demo/IA32_flat_GCC_Galileo_Gen_2/Full_Demo/main_full.c
FreeRTOS/Demo/IA32_flat_GCC_Galileo_Gen_2/Support_Files/freestanding_functions.c
FreeRTOS/Demo/IA32_flat_GCC_Galileo_Gen_2/Support_Files/math.h
FreeRTOS/Demo/IA32_flat_GCC_Galileo_Gen_2/Support_Files/startup.S
FreeRTOS/Demo/IA32_flat_GCC_Galileo_Gen_2/Support_Files/stdint.h
FreeRTOS/Demo/IA32_flat_GCC_Galileo_Gen_2/main.c
FreeRTOS/Demo/MB91460_Softune/SRC/FreeRTOSConfig.h
FreeRTOS/Demo/MB91460_Softune/SRC/crflash_modified.c
FreeRTOS/Demo/MB91460_Softune/SRC/main.c
FreeRTOS/Demo/MB91460_Softune/SRC/partest/partest.c
FreeRTOS/Demo/MB91460_Softune/SRC/serial/serial.c
FreeRTOS/Demo/MB96340_Softune/FreeRTOS_96348hs_SK16FX100PMC/Src/FreeRTOSConfig.h
FreeRTOS/Demo/MB96340_Softune/FreeRTOS_96348hs_SK16FX100PMC/Src/crflash_sk16fx100mpc.c
FreeRTOS/Demo/MB96340_Softune/FreeRTOS_96348hs_SK16FX100PMC/Src/main.c
FreeRTOS/Demo/MB96340_Softune/FreeRTOS_96348hs_SK16FX100PMC/Src/partest/partest.c
FreeRTOS/Demo/MB96340_Softune/FreeRTOS_96348hs_SK16FX100PMC/Src/serial/serial.c
FreeRTOS/Demo/MB96350_Softune_Dice_Kit/DiceTask.c
FreeRTOS/Demo/MB96350_Softune_Dice_Kit/DiceTask.h
FreeRTOS/Demo/MB96350_Softune_Dice_Kit/FreeRTOSConfig.h
FreeRTOS/Demo/MB96350_Softune_Dice_Kit/ParTest/ParTest.c
FreeRTOS/Demo/MB96350_Softune_Dice_Kit/SegmentToggleTasks.c
FreeRTOS/Demo/MB96350_Softune_Dice_Kit/main.c
FreeRTOS/Demo/MSP430X_MSP430F5438_CCS/Demo_Source/FreeRTOSConfig.h
FreeRTOS/Demo/MSP430X_MSP430F5438_CCS/Demo_Source/ParTest.c
FreeRTOS/Demo/MSP430X_MSP430F5438_CCS/Demo_Source/RegTest.asm
FreeRTOS/Demo/MSP430X_MSP430F5438_CCS/Demo_Source/RunTimeStatsConfig.c
FreeRTOS/Demo/MSP430X_MSP430F5438_CCS/Demo_Source/main.c
FreeRTOS/Demo/MSP430X_MSP430F5438_CCS/Demo_Source/serial.c
FreeRTOS/Demo/MSP430X_MSP430F5438_IAR/FreeRTOSConfig.h
FreeRTOS/Demo/MSP430X_MSP430F5438_IAR/ParTest.c
FreeRTOS/Demo/MSP430X_MSP430F5438_IAR/RegTest.s43
FreeRTOS/Demo/MSP430X_MSP430F5438_IAR/RunTimeStatsConfig.c
FreeRTOS/Demo/MSP430X_MSP430F5438_IAR/main.c
FreeRTOS/Demo/MSP430X_MSP430F5438_IAR/serial.c
FreeRTOS/Demo/MSP430X_MSP430FR5969_LaunchPad_IAR_CCS/Blinky_Demo/main_blinky.c
FreeRTOS/Demo/MSP430X_MSP430FR5969_LaunchPad_IAR_CCS/CCS_Only/RegTest.asm
FreeRTOS/Demo/MSP430X_MSP430FR5969_LaunchPad_IAR_CCS/FreeRTOSConfig.h
FreeRTOS/Demo/MSP430X_MSP430FR5969_LaunchPad_IAR_CCS/Full_Demo/main_full.c
FreeRTOS/Demo/MSP430X_MSP430FR5969_LaunchPad_IAR_CCS/Full_Demo/serial.c
FreeRTOS/Demo/MSP430X_MSP430FR5969_LaunchPad_IAR_CCS/IAR_Only/RegTest.s43
FreeRTOS/Demo/MSP430X_MSP430FR5969_LaunchPad_IAR_CCS/LEDs.c
FreeRTOS/Demo/MSP430X_MSP430FR5969_LaunchPad_IAR_CCS/main.c
FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/RTOSDemo/src/Blinky_Demo/main_blinky.c
FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/RTOSDemo/src/FreeRTOSConfig.h
FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/RTOSDemo/src/Full_Demo/RegisterTests.S
FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/RTOSDemo/src/Full_Demo/main_full.c
FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/RTOSDemo/src/LEDs.c
FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/RTOSDemo/src/lwIP_Demo/lwIP_Apps/apps/BasicSocketCommandServer/BasicSocketCommandServer.c
FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/RTOSDemo/src/lwIP_Demo/lwIP_Apps/lwIP_Apps.c
FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/RTOSDemo/src/lwIP_Demo/lwIP_Apps/lwIP_Apps.h
FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/RTOSDemo/src/lwIP_Demo/main_lwIP.c
FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/RTOSDemo/src/main.c
FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/RTOSDemo/src/serial.c
FreeRTOS/Demo/NEC_78K0R_IAR/ButtonISR.s26
FreeRTOS/Demo/NEC_78K0R_IAR/ButtonTask.c
FreeRTOS/Demo/NEC_78K0R_IAR/FreeRTOSConfig.h
FreeRTOS/Demo/NEC_78K0R_IAR/RegTest.s26
FreeRTOS/Demo/NEC_78K0R_IAR/main.c
FreeRTOS/Demo/NEC_V850ES_IAR/FreeRTOSConfig.h
FreeRTOS/Demo/NEC_V850ES_IAR/LowLevelInit/LowLevelInit.c
FreeRTOS/Demo/NEC_V850ES_IAR/LowLevelInit/LowLevelInit_Fx3.c
FreeRTOS/Demo/NEC_V850ES_IAR/LowLevelInit/LowLevelInit_Hx2.c
FreeRTOS/Demo/NEC_V850ES_IAR/ParTest/ParTest_Fx3_App_Board.c
FreeRTOS/Demo/NEC_V850ES_IAR/ParTest/ParTest_Generic_Target_Board.c
FreeRTOS/Demo/NEC_V850ES_IAR/RegTest.s85
FreeRTOS/Demo/NEC_V850ES_IAR/main.c
FreeRTOS/Demo/NEC_V850ES_IAR/serial/serial.c
FreeRTOS/Demo/NiosII_CycloneIII_DBC3C40_GCC/RTOSDemo/FreeRTOSConfig.h
FreeRTOS/Demo/NiosII_CycloneIII_DBC3C40_GCC/RTOSDemo/ParTest/ParTest.c
FreeRTOS/Demo/NiosII_CycloneIII_DBC3C40_GCC/RTOSDemo/main.c
FreeRTOS/Demo/NiosII_CycloneIII_DBC3C40_GCC/RTOSDemo/serial.c
FreeRTOS/Demo/PIC18_MPLAB/FreeRTOSConfig.h
FreeRTOS/Demo/PIC18_MPLAB/ParTest/ParTest.c
FreeRTOS/Demo/PIC18_MPLAB/main1.c
FreeRTOS/Demo/PIC18_MPLAB/main2.c
FreeRTOS/Demo/PIC18_MPLAB/main3.c
FreeRTOS/Demo/PIC18_MPLAB/serial/serial.c
FreeRTOS/Demo/PIC18_WizC/Demo1/FreeRTOSConfig.h
FreeRTOS/Demo/PIC18_WizC/Demo1/WIZCmake.h
FreeRTOS/Demo/PIC18_WizC/Demo1/fuses.c
FreeRTOS/Demo/PIC18_WizC/Demo1/interrupt.c
FreeRTOS/Demo/PIC18_WizC/Demo1/main.c
FreeRTOS/Demo/PIC18_WizC/Demo2/FreeRTOSConfig.h
FreeRTOS/Demo/PIC18_WizC/Demo2/WIZCmake.h
FreeRTOS/Demo/PIC18_WizC/Demo2/fuses.c
FreeRTOS/Demo/PIC18_WizC/Demo2/interrupt.c
FreeRTOS/Demo/PIC18_WizC/Demo2/main.c
FreeRTOS/Demo/PIC18_WizC/Demo3/FreeRTOSConfig.h
FreeRTOS/Demo/PIC18_WizC/Demo3/WIZCmake.h
FreeRTOS/Demo/PIC18_WizC/Demo3/fuses.c
FreeRTOS/Demo/PIC18_WizC/Demo3/interrupt.c
FreeRTOS/Demo/PIC18_WizC/Demo3/main.c
FreeRTOS/Demo/PIC18_WizC/Demo4/FreeRTOSConfig.h
FreeRTOS/Demo/PIC18_WizC/Demo4/WIZCmake.h
FreeRTOS/Demo/PIC18_WizC/Demo4/fuses.c
FreeRTOS/Demo/PIC18_WizC/Demo4/interrupt.c
FreeRTOS/Demo/PIC18_WizC/Demo4/main.c
FreeRTOS/Demo/PIC18_WizC/Demo5/FreeRTOSConfig.h
FreeRTOS/Demo/PIC18_WizC/Demo5/WIZCmake.h
FreeRTOS/Demo/PIC18_WizC/Demo5/fuses.c
FreeRTOS/Demo/PIC18_WizC/Demo5/interrupt.c
FreeRTOS/Demo/PIC18_WizC/Demo5/main.c
FreeRTOS/Demo/PIC18_WizC/Demo6/FreeRTOSConfig.h
FreeRTOS/Demo/PIC18_WizC/Demo6/WIZCmake.h
FreeRTOS/Demo/PIC18_WizC/Demo6/fuses.c
FreeRTOS/Demo/PIC18_WizC/Demo6/interrupt.c
FreeRTOS/Demo/PIC18_WizC/Demo6/main.c
FreeRTOS/Demo/PIC18_WizC/Demo7/FreeRTOSConfig.h
FreeRTOS/Demo/PIC18_WizC/Demo7/WIZCmake.h
FreeRTOS/Demo/PIC18_WizC/Demo7/fuses.c
FreeRTOS/Demo/PIC18_WizC/Demo7/interrupt.c
FreeRTOS/Demo/PIC18_WizC/Demo7/main.c
FreeRTOS/Demo/PIC18_WizC/ParTest/ParTest.c
FreeRTOS/Demo/PIC18_WizC/serial/isrSerialRx.c
FreeRTOS/Demo/PIC18_WizC/serial/isrSerialTx.c
FreeRTOS/Demo/PIC18_WizC/serial/serial.c
FreeRTOS/Demo/PIC24_MPLAB/FreeRTOSConfig.h
FreeRTOS/Demo/PIC24_MPLAB/ParTest/ParTest.c
FreeRTOS/Demo/PIC24_MPLAB/lcd.c
FreeRTOS/Demo/PIC24_MPLAB/lcd.h
FreeRTOS/Demo/PIC24_MPLAB/main.c
FreeRTOS/Demo/PIC24_MPLAB/serial/serial.c
FreeRTOS/Demo/PIC24_MPLAB/timertest.c
FreeRTOS/Demo/PIC24_MPLAB/timertest.h
FreeRTOS/Demo/PIC32MEC14xx_MPLAB/src/Blinky_Demo/main_blinky.c
FreeRTOS/Demo/PIC32MEC14xx_MPLAB/src/FreeRTOSConfig.h
FreeRTOS/Demo/PIC32MEC14xx_MPLAB/src/Full_Demo/IntQueueTimer.c
FreeRTOS/Demo/PIC32MEC14xx_MPLAB/src/Full_Demo/IntQueueTimer.h
FreeRTOS/Demo/PIC32MEC14xx_MPLAB/src/Full_Demo/IntQueueTimer_isr.S
FreeRTOS/Demo/PIC32MEC14xx_MPLAB/src/Full_Demo/RegisterTestTasks.S
FreeRTOS/Demo/PIC32MEC14xx_MPLAB/src/Full_Demo/main_full.c
FreeRTOS/Demo/PIC32MEC14xx_MPLAB/src/Full_Demo/timertest.c
FreeRTOS/Demo/PIC32MEC14xx_MPLAB/src/Full_Demo/timertest.h
FreeRTOS/Demo/PIC32MEC14xx_MPLAB/src/main.c
FreeRTOS/Demo/PIC32MX_MPLAB/ConfigPerformance.c
FreeRTOS/Demo/PIC32MX_MPLAB/ConfigPerformance.h
FreeRTOS/Demo/PIC32MX_MPLAB/FreeRTOSConfig.h
FreeRTOS/Demo/PIC32MX_MPLAB/IntQueueTimer.c
FreeRTOS/Demo/PIC32MX_MPLAB/IntQueueTimer.h
FreeRTOS/Demo/PIC32MX_MPLAB/IntQueueTimer_isr.S
FreeRTOS/Demo/PIC32MX_MPLAB/ParTest/ParTest_Explorer16.c
FreeRTOS/Demo/PIC32MX_MPLAB/ParTest/ParTest_USBII_Starter_Kit.c
FreeRTOS/Demo/PIC32MX_MPLAB/RegisterTestTasks.S
FreeRTOS/Demo/PIC32MX_MPLAB/lcd.c
FreeRTOS/Demo/PIC32MX_MPLAB/lcd.h
FreeRTOS/Demo/PIC32MX_MPLAB/main.c
FreeRTOS/Demo/PIC32MX_MPLAB/main_blinky.c
FreeRTOS/Demo/PIC32MX_MPLAB/main_full.c
FreeRTOS/Demo/PIC32MX_MPLAB/serial/serial.c
FreeRTOS/Demo/PIC32MX_MPLAB/timertest.c
FreeRTOS/Demo/PIC32MX_MPLAB/timertest.h
FreeRTOS/Demo/PIC32MX_MPLAB/timertest_isr.S
FreeRTOS/Demo/PIC32MZ_MPLAB/ConfigPerformance.c
FreeRTOS/Demo/PIC32MZ_MPLAB/ConfigPerformance.h
FreeRTOS/Demo/PIC32MZ_MPLAB/FreeRTOSConfig.h
FreeRTOS/Demo/PIC32MZ_MPLAB/ISRTriggeredTask.c
FreeRTOS/Demo/PIC32MZ_MPLAB/ISRTriggeredTask_isr.S
FreeRTOS/Demo/PIC32MZ_MPLAB/IntQueueTimer.c
FreeRTOS/Demo/PIC32MZ_MPLAB/IntQueueTimer.h
FreeRTOS/Demo/PIC32MZ_MPLAB/IntQueueTimer_isr.S
FreeRTOS/Demo/PIC32MZ_MPLAB/ParTest/ParTest.c
FreeRTOS/Demo/PIC32MZ_MPLAB/RegisterTestTasks.S
FreeRTOS/Demo/PIC32MZ_MPLAB/flop_mz.c
FreeRTOS/Demo/PIC32MZ_MPLAB/flop_mz.h
FreeRTOS/Demo/PIC32MZ_MPLAB/main.c
FreeRTOS/Demo/PIC32MZ_MPLAB/main_blinky.c
FreeRTOS/Demo/PIC32MZ_MPLAB/main_full.c
FreeRTOS/Demo/PIC32MZ_MPLAB/timertest.c
FreeRTOS/Demo/PIC32MZ_MPLAB/timertest.h
FreeRTOS/Demo/PIC32MZ_MPLAB/timertest_isr.S
FreeRTOS/Demo/PPC440_DP_FPU_Xilinx_Virtex5_GCC/RTOSDemo/FreeRTOSConfig.h
FreeRTOS/Demo/PPC440_DP_FPU_Xilinx_Virtex5_GCC/RTOSDemo/flop/flop-reg-test.c
FreeRTOS/Demo/PPC440_DP_FPU_Xilinx_Virtex5_GCC/RTOSDemo/flop/flop-reg-test.h
FreeRTOS/Demo/PPC440_DP_FPU_Xilinx_Virtex5_GCC/RTOSDemo/flop/flop.c
FreeRTOS/Demo/PPC440_DP_FPU_Xilinx_Virtex5_GCC/RTOSDemo/main.c
FreeRTOS/Demo/PPC440_DP_FPU_Xilinx_Virtex5_GCC/RTOSDemo/partest/partest.c
FreeRTOS/Demo/PPC440_DP_FPU_Xilinx_Virtex5_GCC/RTOSDemo/serial/serial.c
FreeRTOS/Demo/PPC440_SP_FPU_Xilinx_Virtex5_GCC/RTOSDemo/FreeRTOSConfig.h
FreeRTOS/Demo/PPC440_SP_FPU_Xilinx_Virtex5_GCC/RTOSDemo/flop/flop-reg-test.c
FreeRTOS/Demo/PPC440_SP_FPU_Xilinx_Virtex5_GCC/RTOSDemo/flop/flop-reg-test.h
FreeRTOS/Demo/PPC440_SP_FPU_Xilinx_Virtex5_GCC/RTOSDemo/flop/flop.c
FreeRTOS/Demo/PPC440_SP_FPU_Xilinx_Virtex5_GCC/RTOSDemo/main.c
FreeRTOS/Demo/PPC440_SP_FPU_Xilinx_Virtex5_GCC/RTOSDemo/partest/partest.c
FreeRTOS/Demo/PPC440_SP_FPU_Xilinx_Virtex5_GCC/RTOSDemo/serial/serial.c
FreeRTOS/Demo/PPC440_Xilinx_Virtex5_GCC/RTOSDemo/FreeRTOSConfig.h
FreeRTOS/Demo/PPC440_Xilinx_Virtex5_GCC/RTOSDemo/flop/flop-reg-test.c
FreeRTOS/Demo/PPC440_Xilinx_Virtex5_GCC/RTOSDemo/flop/flop-reg-test.h
FreeRTOS/Demo/PPC440_Xilinx_Virtex5_GCC/RTOSDemo/flop/flop.c
FreeRTOS/Demo/PPC440_Xilinx_Virtex5_GCC/RTOSDemo/main.c
FreeRTOS/Demo/PPC440_Xilinx_Virtex5_GCC/RTOSDemo/partest/partest.c
FreeRTOS/Demo/PPC440_Xilinx_Virtex5_GCC/RTOSDemo/serial/serial.c
FreeRTOS/Demo/RISC-V-Qemu-sifive_e-Eclipse-GCC/blinky_demo/main_blinky.c
FreeRTOS/Demo/RISC-V-Qemu-sifive_e-Eclipse-GCC/full_demo/RegTest.S
FreeRTOS/Demo/RISC-V-Qemu-sifive_e-Eclipse-GCC/full_demo/main_full.c
FreeRTOS/Demo/RISC-V-Qemu-sifive_e-Eclipse-GCC/main.c
FreeRTOS/Demo/RISC-V_RV32M1_Vega_GCC_Eclipse/projects/RTOSDemo_ri5cy/blinky_demo/main_blinky.c
FreeRTOS/Demo/RISC-V_RV32M1_Vega_GCC_Eclipse/projects/RTOSDemo_ri5cy/full_demo/RegTest.S
FreeRTOS/Demo/RISC-V_RV32M1_Vega_GCC_Eclipse/projects/RTOSDemo_ri5cy/full_demo/main_full.c
FreeRTOS/Demo/RISC-V_RV32M1_Vega_GCC_Eclipse/projects/RTOSDemo_ri5cy/main.c
FreeRTOS/Demo/RISC-V_RV32_SiFive_HiFive1-RevB_FreedomStudio/FreeRTOSConfig.h
FreeRTOS/Demo/RISC-V_RV32_SiFive_HiFive1-RevB_FreedomStudio/blinky_demo/main_blinky.c
FreeRTOS/Demo/RISC-V_RV32_SiFive_HiFive1-RevB_FreedomStudio/full_demo/RegTest.S
FreeRTOS/Demo/RISC-V_RV32_SiFive_HiFive1-RevB_FreedomStudio/full_demo/main_full.c
FreeRTOS/Demo/RISC-V_RV32_SiFive_HiFive1-RevB_FreedomStudio/main.c
FreeRTOS/Demo/RISC-V_RV32_SiFive_HiFive1-RevB_IAR/FreeRTOSConfig.h
FreeRTOS/Demo/RISC-V_RV32_SiFive_HiFive1-RevB_IAR/blinky_demo/main_blinky.c
FreeRTOS/Demo/RISC-V_RV32_SiFive_HiFive1-RevB_IAR/full_demo/RegTest.s
FreeRTOS/Demo/RISC-V_RV32_SiFive_HiFive1-RevB_IAR/full_demo/main_full.c
FreeRTOS/Demo/RISC-V_RV32_SiFive_HiFive1-RevB_IAR/main.c
FreeRTOS/Demo/RISC-V_Renode_Emulator_SoftConsole/blinky_demo/main_blinky.c
FreeRTOS/Demo/RISC-V_Renode_Emulator_SoftConsole/full_demo/RegTest.S
FreeRTOS/Demo/RISC-V_Renode_Emulator_SoftConsole/full_demo/main_full.c
FreeRTOS/Demo/RISC-V_Renode_Emulator_SoftConsole/main.c
FreeRTOS/Demo/RL78_E2Studio_GCC/.HardwareDebuglinker [deleted file]
FreeRTOS/Demo/RL78_E2Studio_GCC/.RL78_G1A_TBlinker [deleted file]
FreeRTOS/Demo/RL78_E2Studio_GCC/.RSKRL78G1Clinker [deleted file]
FreeRTOS/Demo/RL78_E2Studio_GCC/.RSKRL78L13linker [deleted file]
FreeRTOS/Demo/RL78_E2Studio_GCC/.RSKRL78L1Clinker [deleted file]
FreeRTOS/Demo/RL78_E2Studio_GCC/.YRDKRL78G14linker [deleted file]
FreeRTOS/Demo/RL78_E2Studio_GCC/.cproject [deleted file]
FreeRTOS/Demo/RL78_E2Studio_GCC/.info [deleted file]
FreeRTOS/Demo/RL78_E2Studio_GCC/.project [deleted file]
FreeRTOS/Demo/RL78_E2Studio_GCC/.settings/Project_Generation_Prefrences.prefs [deleted file]
FreeRTOS/Demo/RL78_E2Studio_GCC/.settings/org.eclipse.ltk.core.refactoring.prefs [deleted file]
FreeRTOS/Demo/RL78_E2Studio_GCC/custom.bat [deleted file]
FreeRTOS/Demo/RL78_E2Studio_GCC/src/Common-Demo-Tasks/PollQ.c [deleted file]
FreeRTOS/Demo/RL78_E2Studio_GCC/src/Common-Demo-Tasks/blocktim.c [deleted file]
FreeRTOS/Demo/RL78_E2Studio_GCC/src/Common-Demo-Tasks/dynamic.c [deleted file]
FreeRTOS/Demo/RL78_E2Studio_GCC/src/Common-Demo-Tasks/include/PollQ.h [deleted file]
FreeRTOS/Demo/RL78_E2Studio_GCC/src/Common-Demo-Tasks/include/blocktim.h [deleted file]
FreeRTOS/Demo/RL78_E2Studio_GCC/src/Common-Demo-Tasks/include/dynamic.h [deleted file]
FreeRTOS/Demo/RL78_E2Studio_GCC/src/ExampleISR.S [deleted file]
FreeRTOS/Demo/RL78_E2Studio_GCC/src/FreeRTOSConfig.h [deleted file]
FreeRTOS/Demo/RL78_E2Studio_GCC/src/RegTest.S [deleted file]
FreeRTOS/Demo/RL78_E2Studio_GCC/src/demo_specific_io.h [deleted file]
FreeRTOS/Demo/RL78_E2Studio_GCC/src/hardware_setup.c [deleted file]
FreeRTOS/Demo/RL78_E2Studio_GCC/src/iodefine/iodefine_RL78G14.h [deleted file]
FreeRTOS/Demo/RL78_E2Studio_GCC/src/iodefine/iodefine_RL78G14_ext.h [deleted file]
FreeRTOS/Demo/RL78_E2Studio_GCC/src/iodefine/iodefine_RL78G1A.h [deleted file]
FreeRTOS/Demo/RL78_E2Studio_GCC/src/iodefine/iodefine_RL78G1A_ext.h [deleted file]
FreeRTOS/Demo/RL78_E2Studio_GCC/src/iodefine/iodefine_RL78G1C.h [deleted file]
FreeRTOS/Demo/RL78_E2Studio_GCC/src/iodefine/iodefine_RL78G1C_ext.h [deleted file]
FreeRTOS/Demo/RL78_E2Studio_GCC/src/iodefine/iodefine_RL78L13.h [deleted file]
FreeRTOS/Demo/RL78_E2Studio_GCC/src/iodefine/iodefine_RL78L13_ext.h [deleted file]
FreeRTOS/Demo/RL78_E2Studio_GCC/src/iodefine/iodefine_RL78L1C.h [deleted file]
FreeRTOS/Demo/RL78_E2Studio_GCC/src/iodefine/iodefine_RL78L1C_ext.h [deleted file]
FreeRTOS/Demo/RL78_E2Studio_GCC/src/main.c [deleted file]
FreeRTOS/Demo/RL78_E2Studio_GCC/src/main_blinky.c [deleted file]
FreeRTOS/Demo/RL78_E2Studio_GCC/src/main_full.c [deleted file]
FreeRTOS/Demo/RL78_E2Studio_GCC/src/reset_program.asm [deleted file]
FreeRTOS/Demo/RL78_E2Studio_GCC/src/typedefine.h [deleted file]
FreeRTOS/Demo/RL78_E2Studio_GCC/src/vector_table.c [deleted file]
FreeRTOS/Demo/RL78_RL78G13_Promo_Board_IAR/FreeRTOSConfig.h
FreeRTOS/Demo/RL78_RL78G13_Promo_Board_IAR/RegTest.s87
FreeRTOS/Demo/RL78_RL78G13_Promo_Board_IAR/main.c
FreeRTOS/Demo/RL78_multiple_IAR/ExampleISR.s87
FreeRTOS/Demo/RL78_multiple_IAR/FreeRTOSConfig.h
FreeRTOS/Demo/RL78_multiple_IAR/RegTest.s87
FreeRTOS/Demo/RL78_multiple_IAR/demo_specific_io.h
FreeRTOS/Demo/RL78_multiple_IAR/main.c
FreeRTOS/Demo/RL78_multiple_IAR/main_blinky.c
FreeRTOS/Demo/RL78_multiple_IAR/main_full.c
FreeRTOS/Demo/RX100-RSK_GCC_e2studio/RTOSDemo/FreeRTOSConfig.h
FreeRTOS/Demo/RX100-RSK_GCC_e2studio/RTOSDemo/ParTest.c
FreeRTOS/Demo/RX100-RSK_GCC_e2studio/RTOSDemo/main.c
FreeRTOS/Demo/RX100-RSK_GCC_e2studio/RTOSDemo/main_full.c
FreeRTOS/Demo/RX100-RSK_GCC_e2studio/RTOSDemo/main_low_power.c
FreeRTOS/Demo/RX100-RSK_IAR/FreeRTOSConfig.h
FreeRTOS/Demo/RX100-RSK_IAR/ParTest.c
FreeRTOS/Demo/RX100-RSK_IAR/PriorityDefinitions.h
FreeRTOS/Demo/RX100-RSK_IAR/main.c
FreeRTOS/Demo/RX100-RSK_IAR/main_full.c
FreeRTOS/Demo/RX100-RSK_IAR/main_low_power.c
FreeRTOS/Demo/RX100-RSK_IAR/reg_test.s
FreeRTOS/Demo/RX100-RSK_Renesas_e2studio/RTOSDemo/FreeRTOSConfig.h
FreeRTOS/Demo/RX100-RSK_Renesas_e2studio/RTOSDemo/ParTest.c
FreeRTOS/Demo/RX100-RSK_Renesas_e2studio/RTOSDemo/main.c
FreeRTOS/Demo/RX100-RSK_Renesas_e2studio/RTOSDemo/main_full.c
FreeRTOS/Demo/RX100-RSK_Renesas_e2studio/RTOSDemo/main_low_power.c
FreeRTOS/Demo/RX100_RX113-RSK_GCC_e2studio_IAR/src/Blinky_Demo/main_blinky.c
FreeRTOS/Demo/RX100_RX113-RSK_GCC_e2studio_IAR/src/FreeRTOSConfig.h
FreeRTOS/Demo/RX100_RX113-RSK_GCC_e2studio_IAR/src/Full_Demo/IntQueueTimer.c
FreeRTOS/Demo/RX100_RX113-RSK_GCC_e2studio_IAR/src/Full_Demo/IntQueueTimer.h
FreeRTOS/Demo/RX100_RX113-RSK_GCC_e2studio_IAR/src/Full_Demo/RegTest_GCC.S
FreeRTOS/Demo/RX100_RX113-RSK_GCC_e2studio_IAR/src/Full_Demo/RegTest_IAR.s
FreeRTOS/Demo/RX100_RX113-RSK_GCC_e2studio_IAR/src/Full_Demo/main_full.c
FreeRTOS/Demo/RX100_RX113-RSK_GCC_e2studio_IAR/src/PriorityDefinitions.h
FreeRTOS/Demo/RX100_RX113-RSK_GCC_e2studio_IAR/src/main.c
FreeRTOS/Demo/RX100_RX113-RSK_Renesas_e2studio/src/Blinky_Demo/main_blinky.c
FreeRTOS/Demo/RX100_RX113-RSK_Renesas_e2studio/src/FreeRTOSConfig.h
FreeRTOS/Demo/RX100_RX113-RSK_Renesas_e2studio/src/Full_Demo/IntQueueTimer.c
FreeRTOS/Demo/RX100_RX113-RSK_Renesas_e2studio/src/Full_Demo/IntQueueTimer.h
FreeRTOS/Demo/RX100_RX113-RSK_Renesas_e2studio/src/Full_Demo/main_full.c
FreeRTOS/Demo/RX100_RX113-RSK_Renesas_e2studio/src/main.c
FreeRTOS/Demo/RX200_RX210-RSK_Renesas/RTOSDemo/ButtonAndLCD.c
FreeRTOS/Demo/RX200_RX210-RSK_Renesas/RTOSDemo/FreeRTOSConfig.h
FreeRTOS/Demo/RX200_RX210-RSK_Renesas/RTOSDemo/HighFrequencyTimerTest.c
FreeRTOS/Demo/RX200_RX210-RSK_Renesas/RTOSDemo/IntQueueTimer.c
FreeRTOS/Demo/RX200_RX210-RSK_Renesas/RTOSDemo/ParTest.c
FreeRTOS/Demo/RX200_RX210-RSK_Renesas/RTOSDemo/include/ButtonAndLCD.h
FreeRTOS/Demo/RX200_RX210-RSK_Renesas/RTOSDemo/include/IntQueueTimer.h
FreeRTOS/Demo/RX200_RX210-RSK_Renesas/RTOSDemo/main-blinky.c
FreeRTOS/Demo/RX200_RX210-RSK_Renesas/RTOSDemo/main-full.c
FreeRTOS/Demo/RX200_RX231-RSK_GCC_e2studio_IAR/src/Blinky_Demo/main_blinky.c
FreeRTOS/Demo/RX200_RX231-RSK_GCC_e2studio_IAR/src/FreeRTOSConfig.h
FreeRTOS/Demo/RX200_RX231-RSK_GCC_e2studio_IAR/src/Full_Demo/IntQueueTimer.c
FreeRTOS/Demo/RX200_RX231-RSK_GCC_e2studio_IAR/src/Full_Demo/IntQueueTimer.h
FreeRTOS/Demo/RX200_RX231-RSK_GCC_e2studio_IAR/src/Full_Demo/RegTest_GCC.S
FreeRTOS/Demo/RX200_RX231-RSK_GCC_e2studio_IAR/src/Full_Demo/RegTest_IAR.s
FreeRTOS/Demo/RX200_RX231-RSK_GCC_e2studio_IAR/src/Full_Demo/main_full.c
FreeRTOS/Demo/RX200_RX231-RSK_GCC_e2studio_IAR/src/PriorityDefinitions.h
FreeRTOS/Demo/RX200_RX231-RSK_GCC_e2studio_IAR/src/main.c
FreeRTOS/Demo/RX200_RX231-RSK_Renesas_e2studio/src/Blinky_Demo/main_blinky.c
FreeRTOS/Demo/RX200_RX231-RSK_Renesas_e2studio/src/FreeRTOSConfig.h
FreeRTOS/Demo/RX200_RX231-RSK_Renesas_e2studio/src/Full_Demo/IntQueueTimer.c
FreeRTOS/Demo/RX200_RX231-RSK_Renesas_e2studio/src/Full_Demo/IntQueueTimer.h
FreeRTOS/Demo/RX200_RX231-RSK_Renesas_e2studio/src/Full_Demo/main_full.c
FreeRTOS/Demo/RX200_RX231-RSK_Renesas_e2studio/src/main.c
FreeRTOS/Demo/RX600_RX62N-RDK_GNURX/RTOSDemo/FreeRTOSConfig.h
FreeRTOS/Demo/RX600_RX62N-RDK_GNURX/RTOSDemo/HighFrequencyTimerTest.c
FreeRTOS/Demo/RX600_RX62N-RDK_GNURX/RTOSDemo/IntQueueTimer.c
FreeRTOS/Demo/RX600_RX62N-RDK_GNURX/RTOSDemo/ParTest.c
FreeRTOS/Demo/RX600_RX62N-RDK_GNURX/RTOSDemo/include/IntQueueTimer.h
FreeRTOS/Demo/RX600_RX62N-RDK_GNURX/RTOSDemo/main-blinky.c
FreeRTOS/Demo/RX600_RX62N-RDK_GNURX/RTOSDemo/main-full.c
FreeRTOS/Demo/RX600_RX62N-RDK_GNURX/RTOSDemo/uIP_Task.c
FreeRTOS/Demo/RX600_RX62N-RDK_GNURX/RTOSDemo/webserver/EMAC.c
FreeRTOS/Demo/RX600_RX62N-RDK_IAR/FreeRTOSConfig.h
FreeRTOS/Demo/RX600_RX62N-RDK_IAR/HighFrequencyTimerTest.c
FreeRTOS/Demo/RX600_RX62N-RDK_IAR/IntQueueTimer.c
FreeRTOS/Demo/RX600_RX62N-RDK_IAR/ParTest.c
FreeRTOS/Demo/RX600_RX62N-RDK_IAR/PriorityDefinitions.h
FreeRTOS/Demo/RX600_RX62N-RDK_IAR/RegTest.s
FreeRTOS/Demo/RX600_RX62N-RDK_IAR/include/IntQueueTimer.h
FreeRTOS/Demo/RX600_RX62N-RDK_IAR/main-blinky.c
FreeRTOS/Demo/RX600_RX62N-RDK_IAR/main-full.c
FreeRTOS/Demo/RX600_RX62N-RDK_IAR/uIP_Task.c
FreeRTOS/Demo/RX600_RX62N-RDK_IAR/webserver/EMAC.c
FreeRTOS/Demo/RX600_RX62N-RDK_Renesas/RTOSDemo/FreeRTOSConfig.h
FreeRTOS/Demo/RX600_RX62N-RDK_Renesas/RTOSDemo/HighFrequencyTimerTest.c
FreeRTOS/Demo/RX600_RX62N-RDK_Renesas/RTOSDemo/IntQueueTimer.c
FreeRTOS/Demo/RX600_RX62N-RDK_Renesas/RTOSDemo/ParTest.c
FreeRTOS/Demo/RX600_RX62N-RDK_Renesas/RTOSDemo/include/IntQueueTimer.h
FreeRTOS/Demo/RX600_RX62N-RDK_Renesas/RTOSDemo/main-blinky.c
FreeRTOS/Demo/RX600_RX62N-RDK_Renesas/RTOSDemo/main-full.c
FreeRTOS/Demo/RX600_RX62N-RDK_Renesas/RTOSDemo/uIP_Task.c
FreeRTOS/Demo/RX600_RX62N-RDK_Renesas/RTOSDemo/webserver/EMAC.c
FreeRTOS/Demo/RX600_RX62N-RSK_GNURX/RTOSDemo/FreeRTOSConfig.h
FreeRTOS/Demo/RX600_RX62N-RSK_GNURX/RTOSDemo/HighFrequencyTimerTest.c
FreeRTOS/Demo/RX600_RX62N-RSK_GNURX/RTOSDemo/IntQueueTimer.c
FreeRTOS/Demo/RX600_RX62N-RSK_GNURX/RTOSDemo/ParTest.c
FreeRTOS/Demo/RX600_RX62N-RSK_GNURX/RTOSDemo/include/IntQueueTimer.h
FreeRTOS/Demo/RX600_RX62N-RSK_GNURX/RTOSDemo/main-blinky.c
FreeRTOS/Demo/RX600_RX62N-RSK_GNURX/RTOSDemo/main-full.c
FreeRTOS/Demo/RX600_RX62N-RSK_GNURX/RTOSDemo/uIP_Task.c
FreeRTOS/Demo/RX600_RX62N-RSK_GNURX/RTOSDemo/webserver/EMAC.c
FreeRTOS/Demo/RX600_RX62N-RSK_IAR/FreeRTOSConfig.h
FreeRTOS/Demo/RX600_RX62N-RSK_IAR/HighFrequencyTimerTest.c
FreeRTOS/Demo/RX600_RX62N-RSK_IAR/IntQueueTimer.c
FreeRTOS/Demo/RX600_RX62N-RSK_IAR/ParTest.c
FreeRTOS/Demo/RX600_RX62N-RSK_IAR/PriorityDefinitions.h
FreeRTOS/Demo/RX600_RX62N-RSK_IAR/RegTest.s
FreeRTOS/Demo/RX600_RX62N-RSK_IAR/include/IntQueueTimer.h
FreeRTOS/Demo/RX600_RX62N-RSK_IAR/main-blinky.c
FreeRTOS/Demo/RX600_RX62N-RSK_IAR/main-full.c
FreeRTOS/Demo/RX600_RX62N-RSK_IAR/uIP_Task.c
FreeRTOS/Demo/RX600_RX62N-RSK_IAR/webserver/EMAC.c
FreeRTOS/Demo/RX600_RX62N-RSK_Renesas/RTOSDemo/FreeRTOSConfig.h
FreeRTOS/Demo/RX600_RX62N-RSK_Renesas/RTOSDemo/HighFrequencyTimerTest.c
FreeRTOS/Demo/RX600_RX62N-RSK_Renesas/RTOSDemo/IntQueueTimer.c
FreeRTOS/Demo/RX600_RX62N-RSK_Renesas/RTOSDemo/ParTest.c
FreeRTOS/Demo/RX600_RX62N-RSK_Renesas/RTOSDemo/include/IntQueueTimer.h
FreeRTOS/Demo/RX600_RX62N-RSK_Renesas/RTOSDemo/main-blinky.c
FreeRTOS/Demo/RX600_RX62N-RSK_Renesas/RTOSDemo/main-full.c
FreeRTOS/Demo/RX600_RX62N-RSK_Renesas/RTOSDemo/uIP_Task.c
FreeRTOS/Demo/RX600_RX62N-RSK_Renesas/RTOSDemo/webserver/EMAC.c
FreeRTOS/Demo/RX600_RX630-RSK_Renesas/RTOSDemo/FreeRTOSConfig.h
FreeRTOS/Demo/RX600_RX630-RSK_Renesas/RTOSDemo/HighFrequencyTimerTest.c
FreeRTOS/Demo/RX600_RX630-RSK_Renesas/RTOSDemo/IntQueueTimer.c
FreeRTOS/Demo/RX600_RX630-RSK_Renesas/RTOSDemo/ParTest.c
FreeRTOS/Demo/RX600_RX630-RSK_Renesas/RTOSDemo/include/IntQueueTimer.h
FreeRTOS/Demo/RX600_RX630-RSK_Renesas/RTOSDemo/main-blinky.c
FreeRTOS/Demo/RX600_RX630-RSK_Renesas/RTOSDemo/main-full.c
FreeRTOS/Demo/RX600_RX63N-RDK_Renesas/RTOSDemo/FreeRTOSConfig.h
FreeRTOS/Demo/RX600_RX63N-RDK_Renesas/RTOSDemo/HighFrequencyTimerTest.c
FreeRTOS/Demo/RX600_RX63N-RDK_Renesas/RTOSDemo/IntQueueTimer.c
FreeRTOS/Demo/RX600_RX63N-RDK_Renesas/RTOSDemo/IntQueueTimer.h
FreeRTOS/Demo/RX600_RX63N-RDK_Renesas/RTOSDemo/ParTest.c
FreeRTOS/Demo/RX600_RX63N-RDK_Renesas/RTOSDemo/main-blinky.c
FreeRTOS/Demo/RX600_RX63N-RDK_Renesas/RTOSDemo/main-full.c
FreeRTOS/Demo/RX600_RX63N-RDK_Renesas/RTOSDemo/uIP_Task.c
FreeRTOS/Demo/RX600_RX63N-RDK_Renesas/RTOSDemo/webserver/EMAC.c
FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo.Hbp [deleted file]
FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo.hws [deleted file]
FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo.tws [deleted file]
FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/DefaultSession.hsf [deleted file]
FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/FreeRTOSConfig.h [deleted file]
FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/HighFrequencyTimerTest.c [deleted file]
FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/IntQueueTimer.c [deleted file]
FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/IntQueueTimer.h [deleted file]
FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/ParTest.c [deleted file]
FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/RTOSDemo.hwp [deleted file]
FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/RTOSDemo.nav [deleted file]
FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/RTOSDemo.tps [deleted file]
FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/Renesas-Files/board/rskrx63n/dbsct.c [deleted file]
FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/Renesas-Files/board/rskrx63n/flash_options.c [deleted file]
FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/Renesas-Files/board/rskrx63n/hwsetup.c [deleted file]
FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/Renesas-Files/board/rskrx63n/hwsetup.h [deleted file]
FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/Renesas-Files/board/rskrx63n/lowlvl.src [deleted file]
FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/Renesas-Files/board/rskrx63n/lowsrc.c [deleted file]
FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/Renesas-Files/board/rskrx63n/mcu_info.h [deleted file]
FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/Renesas-Files/board/rskrx63n/r_bsp.h [deleted file]
FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/Renesas-Files/board/rskrx63n/r_bsp_config_reference.h [deleted file]
FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/Renesas-Files/board/rskrx63n/resetprg.c [deleted file]
FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/Renesas-Files/board/rskrx63n/rskrx63n.h [deleted file]
FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/Renesas-Files/board/rskrx63n/sbrk.c [deleted file]
FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/Renesas-Files/board/rskrx63n/vecttbl.c [deleted file]
FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/Renesas-Files/mcu/rx63n/iodefine.h [deleted file]
FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/Renesas-Files/mcu/rx63n/iodefine.h_from_toolchain [deleted file]
FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/Renesas-Files/platform.h [deleted file]
FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/SessionRX600_E1_E20_SYSTEM.hsf [deleted file]
FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/SessionRX600_E1_E20_SYSTEM.ini [deleted file]
FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/SimSessionRX600.hsf [deleted file]
FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/main-blinky.c [deleted file]
FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/main-full.c [deleted file]
FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/r_bsp_config.h [deleted file]
FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/uIP_Task.c [deleted file]
FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/webserver/EMAC.c [deleted file]
FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/webserver/httpd-cgi.c [deleted file]
FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/webserver/httpd-fs/404.html [deleted file]
FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/webserver/httpd-fs/index.html [deleted file]
FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/webserver/httpd-fs/index.shtml [deleted file]
FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/webserver/httpd-fs/io.shtml [deleted file]
FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/webserver/httpd-fs/runtime.shtml [deleted file]
FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/webserver/httpd-fs/stats.shtml [deleted file]
FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/webserver/httpd-fs/tcp.shtml [deleted file]
FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/webserver/httpd-fsdata.c [deleted file]
FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/webserver/makefsdata [deleted file]
FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/webserver/phy.c [deleted file]
FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/webserver/phy.h [deleted file]
FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/webserver/r_ether.h [deleted file]
FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/webserver/uip-conf.h [deleted file]
FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/webserver/webserver.h [deleted file]
FreeRTOS/Demo/RX600_RX64M_RSK_GCC_e2studio/src/FreeRTOSConfig.h
FreeRTOS/Demo/RX600_RX64M_RSK_GCC_e2studio/src/IntQueueTimer.c
FreeRTOS/Demo/RX600_RX64M_RSK_GCC_e2studio/src/IntQueueTimer.h
FreeRTOS/Demo/RX600_RX64M_RSK_GCC_e2studio/src/ParTest.c
FreeRTOS/Demo/RX600_RX64M_RSK_GCC_e2studio/src/RegTest.S
FreeRTOS/Demo/RX600_RX64M_RSK_GCC_e2studio/src/main.c
FreeRTOS/Demo/RX600_RX64M_RSK_GCC_e2studio/src/main_blinky.c
FreeRTOS/Demo/RX600_RX64M_RSK_GCC_e2studio/src/main_full.c
FreeRTOS/Demo/RX600_RX64M_RSK_Renesas_e2studio/Source/FreeRTOSConfig.h
FreeRTOS/Demo/RX600_RX64M_RSK_Renesas_e2studio/Source/IntQueueTimer.c
FreeRTOS/Demo/RX600_RX64M_RSK_Renesas_e2studio/Source/IntQueueTimer.h
FreeRTOS/Demo/RX600_RX64M_RSK_Renesas_e2studio/Source/ParTest.c
FreeRTOS/Demo/RX600_RX64M_RSK_Renesas_e2studio/Source/RegTest.src
FreeRTOS/Demo/RX600_RX64M_RSK_Renesas_e2studio/Source/main.c
FreeRTOS/Demo/RX600_RX64M_RSK_Renesas_e2studio/Source/main_blinky.c
FreeRTOS/Demo/RX600_RX64M_RSK_Renesas_e2studio/Source/main_full.c
FreeRTOS/Demo/RX700_RX71M_RSK_GCC_e2studio_IAR/src/Blinky_Demo/main_blinky.c
FreeRTOS/Demo/RX700_RX71M_RSK_GCC_e2studio_IAR/src/FreeRTOSConfig.h
FreeRTOS/Demo/RX700_RX71M_RSK_GCC_e2studio_IAR/src/Full_Demo/IntQueueTimer.c
FreeRTOS/Demo/RX700_RX71M_RSK_GCC_e2studio_IAR/src/Full_Demo/IntQueueTimer.h
FreeRTOS/Demo/RX700_RX71M_RSK_GCC_e2studio_IAR/src/Full_Demo/RegTest_GCC.S
FreeRTOS/Demo/RX700_RX71M_RSK_GCC_e2studio_IAR/src/Full_Demo/RegTest_IAR.s
FreeRTOS/Demo/RX700_RX71M_RSK_GCC_e2studio_IAR/src/Full_Demo/main_full.c
FreeRTOS/Demo/RX700_RX71M_RSK_GCC_e2studio_IAR/src/PriorityDefinitions.h
FreeRTOS/Demo/RX700_RX71M_RSK_GCC_e2studio_IAR/src/main.c
FreeRTOS/Demo/RX700_RX71M_RSK_Renesas_e2studio/src/Blinky_Demo/main_blinky.c
FreeRTOS/Demo/RX700_RX71M_RSK_Renesas_e2studio/src/FreeRTOSConfig.h
FreeRTOS/Demo/RX700_RX71M_RSK_Renesas_e2studio/src/Full_Demo/IntQueueTimer.c
FreeRTOS/Demo/RX700_RX71M_RSK_Renesas_e2studio/src/Full_Demo/IntQueueTimer.h
FreeRTOS/Demo/RX700_RX71M_RSK_Renesas_e2studio/src/Full_Demo/main_full.c
FreeRTOS/Demo/RX700_RX71M_RSK_Renesas_e2studio/src/main.c
FreeRTOS/Demo/SuperH_SH7216_Renesas/RTOSDemo/FreeRTOSConfig.h
FreeRTOS/Demo/SuperH_SH7216_Renesas/RTOSDemo/ParTest/ParTest.c
FreeRTOS/Demo/SuperH_SH7216_Renesas/RTOSDemo/flop.c
FreeRTOS/Demo/SuperH_SH7216_Renesas/RTOSDemo/main.c
FreeRTOS/Demo/SuperH_SH7216_Renesas/RTOSDemo/regtest.src
FreeRTOS/Demo/SuperH_SH7216_Renesas/RTOSDemo/uIP_Task.c
FreeRTOS/Demo/SuperH_SH7216_Renesas/RTOSDemo/webserver/EMAC.c
FreeRTOS/Demo/SuperH_SH7216_Renesas/RTOSDemo/webserver/EMAC_ISR.src
FreeRTOS/Demo/T-HEAD_CB2201_CDK/FreeRTOSConfig.h
FreeRTOS/Demo/Tensilica_Simulator_Xplorer_XCC/IntQueueTimer.c
FreeRTOS/Demo/Tensilica_Simulator_Xplorer_XCC/IntQueueTimer.h
FreeRTOS/Demo/Tensilica_Simulator_Xplorer_XCC/main.c
FreeRTOS/Demo/Tensilica_Simulator_Xplorer_XCC/main_blinky.c
FreeRTOS/Demo/Tensilica_Simulator_Xplorer_XCC/regtest_xtensa.S
FreeRTOS/Demo/TriCore_TC1782_TriBoard_GCC/RTOSDemo/FreeRTOSConfig.h
FreeRTOS/Demo/TriCore_TC1782_TriBoard_GCC/RTOSDemo/InterruptNestTest.c
FreeRTOS/Demo/TriCore_TC1782_TriBoard_GCC/RTOSDemo/InterruptNestTest.h
FreeRTOS/Demo/TriCore_TC1782_TriBoard_GCC/RTOSDemo/ParTest.c
FreeRTOS/Demo/TriCore_TC1782_TriBoard_GCC/RTOSDemo/main.c
FreeRTOS/Demo/TriCore_TC1782_TriBoard_GCC/RTOSDemo/serial.c
FreeRTOS/Demo/WIN32-MSVC-Static-Allocation-Only/FreeRTOSConfig.h
FreeRTOS/Demo/WIN32-MSVC-Static-Allocation-Only/main.c
FreeRTOS/Demo/WIN32-MSVC-lwIP/FreeRTOSConfig.h [deleted file]
FreeRTOS/Demo/WIN32-MSVC-lwIP/WIN32.sln [deleted file]
FreeRTOS/Demo/WIN32-MSVC-lwIP/WIN32.vcxproj [deleted file]
FreeRTOS/Demo/WIN32-MSVC-lwIP/WIN32.vcxproj.filters [deleted file]
FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/BasicSocketCommandServer/BasicSocketCommandServer.c [deleted file]
FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/fs.c [deleted file]
FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/fs.h [deleted file]
FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/fsdata.c [deleted file]
FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/fsdata.h [deleted file]
FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/httpd.c [deleted file]
FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/httpd.h [deleted file]
FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/httpd_structs.h [deleted file]
FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/makefsdata/MakeFSData_proj.sln [deleted file]
FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/makefsdata/MakeFSData_proj.suo [deleted file]
FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/makefsdata/MakeFSData_proj.vcxproj [deleted file]
FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/makefsdata/MakeFSData_proj.vcxproj.filters [deleted file]
FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/makefsdata/MakeFSData_proj.vcxproj.user [deleted file]
FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/makefsdata/fs/404.html [deleted file]
FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/makefsdata/fs/index.shtml [deleted file]
FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/makefsdata/fs/runtime.shtml [deleted file]
FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/makefsdata/fsdata.c [deleted file]
FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/makefsdata/makefsdata [deleted file]
FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/makefsdata/makefsdata.c [deleted file]
FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/makefsdata/makefsdata.exe [deleted file]
FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/makefsdata/stdafx.cpp [deleted file]
FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/makefsdata/stdafx.h [deleted file]
FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/makefsdata/targetver.h [deleted file]
FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/lwIP_Apps.c [deleted file]
FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/lwIP_Apps.h [deleted file]
FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/lwipcfg_msvc.h [deleted file]
FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/lwipopts.h [deleted file]
FreeRTOS/Demo/WIN32-MSVC-lwIP/main.c [deleted file]
FreeRTOS/Demo/WIN32-MSVC/FreeRTOSConfig.h
FreeRTOS/Demo/WIN32-MSVC/Run-time-stats-utils.c
FreeRTOS/Demo/WIN32-MSVC/main.c
FreeRTOS/Demo/WIN32-MSVC/main_blinky.c
FreeRTOS/Demo/WIN32-MSVC/main_full.c
FreeRTOS/Demo/WIN32-MingW/DemosModifiedForLowTickRate/recmutex.c
FreeRTOS/Demo/WIN32-MingW/FreeRTOSConfig.h
FreeRTOS/Demo/WIN32-MingW/Run-time-stats-utils.c
FreeRTOS/Demo/WIN32-MingW/code_coverage_additions.c
FreeRTOS/Demo/WIN32-MingW/main.c
FreeRTOS/Demo/WIN32-MingW/main_blinky.c
FreeRTOS/Demo/WIN32-MingW/main_full.c
FreeRTOS/Demo/WizNET_DEMO_GCC_ARM7/FreeRTOSConfig.h
FreeRTOS/Demo/WizNET_DEMO_GCC_ARM7/HTTP_Serv.c
FreeRTOS/Demo/WizNET_DEMO_GCC_ARM7/HTTP_Serv.h
FreeRTOS/Demo/WizNET_DEMO_GCC_ARM7/Makefile
FreeRTOS/Demo/WizNET_DEMO_GCC_ARM7/TCP.c
FreeRTOS/Demo/WizNET_DEMO_GCC_ARM7/TCP.h
FreeRTOS/Demo/WizNET_DEMO_GCC_ARM7/TCPISR.c
FreeRTOS/Demo/WizNET_DEMO_GCC_ARM7/html_pages.h
FreeRTOS/Demo/WizNET_DEMO_GCC_ARM7/i2c.c
FreeRTOS/Demo/WizNET_DEMO_GCC_ARM7/i2c.h
FreeRTOS/Demo/WizNET_DEMO_GCC_ARM7/i2cISR.c
FreeRTOS/Demo/WizNET_DEMO_GCC_ARM7/main.c
FreeRTOS/Demo/WizNET_DEMO_TERN_186/FreeRTOSConfig.h
FreeRTOS/Demo/WizNET_DEMO_TERN_186/HTTPTask.c
FreeRTOS/Demo/WizNET_DEMO_TERN_186/HTTPTask.h
FreeRTOS/Demo/WizNET_DEMO_TERN_186/main.c
FreeRTOS/Demo/WizNET_DEMO_TERN_186/serial/serial.c
FreeRTOS/Demo/dsPIC_MPLAB/FreeRTOSConfig.h
FreeRTOS/Demo/dsPIC_MPLAB/ParTest/ParTest.c
FreeRTOS/Demo/dsPIC_MPLAB/lcd.c
FreeRTOS/Demo/dsPIC_MPLAB/lcd.h
FreeRTOS/Demo/dsPIC_MPLAB/main.c
FreeRTOS/Demo/dsPIC_MPLAB/serial/serial.c
FreeRTOS/Demo/dsPIC_MPLAB/timertest.c
FreeRTOS/Demo/dsPIC_MPLAB/timertest.h
FreeRTOS/Demo/lwIP_Demo_Rowley_ARM7/BasicWEB.c
FreeRTOS/Demo/lwIP_Demo_Rowley_ARM7/BasicWEB.h
FreeRTOS/Demo/lwIP_Demo_Rowley_ARM7/EMAC/SAM7_EMAC.c
FreeRTOS/Demo/lwIP_Demo_Rowley_ARM7/EMAC/SAM7_EMAC.h
FreeRTOS/Demo/lwIP_Demo_Rowley_ARM7/EMAC/SAM7_EMAC_ISR.c
FreeRTOS/Demo/lwIP_Demo_Rowley_ARM7/FreeRTOSConfig.h
FreeRTOS/Demo/lwIP_Demo_Rowley_ARM7/ParTest/ParTest.c
FreeRTOS/Demo/lwIP_Demo_Rowley_ARM7/USB/USB-CDC.c
FreeRTOS/Demo/lwIP_Demo_Rowley_ARM7/USB/USB-CDC.h
FreeRTOS/Demo/lwIP_Demo_Rowley_ARM7/USB/USBIsr.c
FreeRTOS/Demo/lwIP_Demo_Rowley_ARM7/USB/descriptors.h
FreeRTOS/Demo/lwIP_Demo_Rowley_ARM7/USB/usb.h
FreeRTOS/Demo/lwIP_Demo_Rowley_ARM7/main.c
FreeRTOS/Demo/lwIP_Demo_Rowley_ARM7/makefile
FreeRTOS/Demo/msp430_CrossWorks/FreeRTOSConfig.h
FreeRTOS/Demo/msp430_CrossWorks/ParTest/ParTest.c
FreeRTOS/Demo/msp430_CrossWorks/main.c
FreeRTOS/Demo/msp430_CrossWorks/serial/serial.c
FreeRTOS/Demo/msp430_CrossWorks/serial/serialASM.asm
FreeRTOS/Demo/msp430_GCC/FreeRTOSConfig.h
FreeRTOS/Demo/msp430_GCC/ParTest/ParTest.c
FreeRTOS/Demo/msp430_GCC/main.c
FreeRTOS/Demo/msp430_GCC/makefile
FreeRTOS/Demo/msp430_GCC/serial/serial.c
FreeRTOS/Demo/msp430_IAR/FreeRTOSConfig.h
FreeRTOS/Demo/msp430_IAR/ParTest/ParTest.c
FreeRTOS/Demo/msp430_IAR/main.c
FreeRTOS/Demo/msp430_IAR/serial/serial.c
FreeRTOS/Demo/msp430_IAR/serial/serialASM.s43
FreeRTOS/History.txt
FreeRTOS/License/license.txt
FreeRTOS/Source/croutine.c
FreeRTOS/Source/event_groups.c
FreeRTOS/Source/include/FreeRTOS.h
FreeRTOS/Source/include/StackMacros.h
FreeRTOS/Source/include/atomic.h
FreeRTOS/Source/include/croutine.h
FreeRTOS/Source/include/deprecated_definitions.h
FreeRTOS/Source/include/event_groups.h
FreeRTOS/Source/include/list.h
FreeRTOS/Source/include/message_buffer.h
FreeRTOS/Source/include/mpu_prototypes.h
FreeRTOS/Source/include/mpu_wrappers.h
FreeRTOS/Source/include/portable.h
FreeRTOS/Source/include/projdefs.h
FreeRTOS/Source/include/queue.h
FreeRTOS/Source/include/semphr.h
FreeRTOS/Source/include/stack_macros.h
FreeRTOS/Source/include/stream_buffer.h
FreeRTOS/Source/include/task.h
FreeRTOS/Source/include/timers.h
FreeRTOS/Source/list.c
FreeRTOS/Source/portable/ARMv8M/copy_files.py
FreeRTOS/Source/portable/ARMv8M/non_secure/port.c
FreeRTOS/Source/portable/ARMv8M/non_secure/portable/GCC/ARM_CM23/portasm.c
FreeRTOS/Source/portable/ARMv8M/non_secure/portable/GCC/ARM_CM23/portmacro.h
FreeRTOS/Source/portable/ARMv8M/non_secure/portable/GCC/ARM_CM23_NTZ/portasm.c
FreeRTOS/Source/portable/ARMv8M/non_secure/portable/GCC/ARM_CM23_NTZ/portmacro.h
FreeRTOS/Source/portable/ARMv8M/non_secure/portable/GCC/ARM_CM33/portasm.c
FreeRTOS/Source/portable/ARMv8M/non_secure/portable/GCC/ARM_CM33/portmacro.h
FreeRTOS/Source/portable/ARMv8M/non_secure/portable/GCC/ARM_CM33_NTZ/portasm.c
FreeRTOS/Source/portable/ARMv8M/non_secure/portable/GCC/ARM_CM33_NTZ/portmacro.h
FreeRTOS/Source/portable/ARMv8M/non_secure/portable/IAR/ARM_CM23/portasm.s
FreeRTOS/Source/portable/ARMv8M/non_secure/portable/IAR/ARM_CM23/portmacro.h
FreeRTOS/Source/portable/ARMv8M/non_secure/portable/IAR/ARM_CM23_NTZ/portasm.s
FreeRTOS/Source/portable/ARMv8M/non_secure/portable/IAR/ARM_CM23_NTZ/portmacro.h
FreeRTOS/Source/portable/ARMv8M/non_secure/portable/IAR/ARM_CM33/portasm.s
FreeRTOS/Source/portable/ARMv8M/non_secure/portable/IAR/ARM_CM33/portmacro.h
FreeRTOS/Source/portable/ARMv8M/non_secure/portable/IAR/ARM_CM33_NTZ/portasm.s
FreeRTOS/Source/portable/ARMv8M/non_secure/portable/IAR/ARM_CM33_NTZ/portmacro.h
FreeRTOS/Source/portable/ARMv8M/non_secure/portasm.h
FreeRTOS/Source/portable/ARMv8M/secure/context/portable/GCC/ARM_CM23/secure_context_port.c
FreeRTOS/Source/portable/ARMv8M/secure/context/portable/GCC/ARM_CM33/secure_context_port.c
FreeRTOS/Source/portable/ARMv8M/secure/context/portable/IAR/ARM_CM23/secure_context_port.c
FreeRTOS/Source/portable/ARMv8M/secure/context/portable/IAR/ARM_CM23/secure_context_port_asm.s
FreeRTOS/Source/portable/ARMv8M/secure/context/portable/IAR/ARM_CM33/secure_context_port.c
FreeRTOS/Source/portable/ARMv8M/secure/context/portable/IAR/ARM_CM33/secure_context_port_asm.s
FreeRTOS/Source/portable/ARMv8M/secure/context/secure_context.c
FreeRTOS/Source/portable/ARMv8M/secure/context/secure_context.h
FreeRTOS/Source/portable/ARMv8M/secure/heap/secure_heap.c
FreeRTOS/Source/portable/ARMv8M/secure/heap/secure_heap.h
FreeRTOS/Source/portable/ARMv8M/secure/init/secure_init.c
FreeRTOS/Source/portable/ARMv8M/secure/init/secure_init.h
FreeRTOS/Source/portable/ARMv8M/secure/macros/secure_port_macros.h
FreeRTOS/Source/portable/BCC/16BitDOS/Flsh186/port.c
FreeRTOS/Source/portable/BCC/16BitDOS/Flsh186/prtmacro.h
FreeRTOS/Source/portable/BCC/16BitDOS/PC/port.c
FreeRTOS/Source/portable/BCC/16BitDOS/PC/prtmacro.h
FreeRTOS/Source/portable/BCC/16BitDOS/common/portasm.h
FreeRTOS/Source/portable/BCC/16BitDOS/common/portcomn.c
FreeRTOS/Source/portable/CCS/ARM_CM3/port.c
FreeRTOS/Source/portable/CCS/ARM_CM3/portasm.asm
FreeRTOS/Source/portable/CCS/ARM_CM3/portmacro.h
FreeRTOS/Source/portable/CCS/ARM_CM4F/port.c
FreeRTOS/Source/portable/CCS/ARM_CM4F/portasm.asm
FreeRTOS/Source/portable/CCS/ARM_CM4F/portmacro.h
FreeRTOS/Source/portable/CCS/ARM_Cortex-R4/port.c
FreeRTOS/Source/portable/CCS/ARM_Cortex-R4/portASM.asm
FreeRTOS/Source/portable/CCS/ARM_Cortex-R4/portmacro.h
FreeRTOS/Source/portable/CCS/MSP430X/data_model.h
FreeRTOS/Source/portable/CCS/MSP430X/port.c
FreeRTOS/Source/portable/CCS/MSP430X/portext.asm
FreeRTOS/Source/portable/CCS/MSP430X/portmacro.h
FreeRTOS/Source/portable/CodeWarrior/ColdFire_V1/port.c
FreeRTOS/Source/portable/CodeWarrior/ColdFire_V1/portasm.S
FreeRTOS/Source/portable/CodeWarrior/ColdFire_V1/portmacro.h
FreeRTOS/Source/portable/CodeWarrior/ColdFire_V2/port.c
FreeRTOS/Source/portable/CodeWarrior/ColdFire_V2/portasm.S
FreeRTOS/Source/portable/CodeWarrior/ColdFire_V2/portmacro.h
FreeRTOS/Source/portable/CodeWarrior/HCS12/port.c
FreeRTOS/Source/portable/CodeWarrior/HCS12/portmacro.h
FreeRTOS/Source/portable/Common/mpu_wrappers.c
FreeRTOS/Source/portable/GCC/ARM7_AT91FR40008/port.c
FreeRTOS/Source/portable/GCC/ARM7_AT91FR40008/portISR.c
FreeRTOS/Source/portable/GCC/ARM7_AT91FR40008/portmacro.h
FreeRTOS/Source/portable/GCC/ARM7_AT91SAM7S/port.c
FreeRTOS/Source/portable/GCC/ARM7_AT91SAM7S/portISR.c
FreeRTOS/Source/portable/GCC/ARM7_AT91SAM7S/portmacro.h
FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c
FreeRTOS/Source/portable/GCC/ARM7_LPC2000/portISR.c
FreeRTOS/Source/portable/GCC/ARM7_LPC2000/portmacro.h
FreeRTOS/Source/portable/GCC/ARM7_LPC23xx/port.c
FreeRTOS/Source/portable/GCC/ARM7_LPC23xx/portISR.c
FreeRTOS/Source/portable/GCC/ARM7_LPC23xx/portmacro.h
FreeRTOS/Source/portable/GCC/ARM_CA53_64_BIT/port.c
FreeRTOS/Source/portable/GCC/ARM_CA53_64_BIT/portASM.S
FreeRTOS/Source/portable/GCC/ARM_CA53_64_BIT/portmacro.h
FreeRTOS/Source/portable/GCC/ARM_CA9/port.c
FreeRTOS/Source/portable/GCC/ARM_CA9/portASM.S
FreeRTOS/Source/portable/GCC/ARM_CA9/portmacro.h
FreeRTOS/Source/portable/GCC/ARM_CM0/port.c
FreeRTOS/Source/portable/GCC/ARM_CM0/portmacro.h
FreeRTOS/Source/portable/GCC/ARM_CM23/non_secure/port.c
FreeRTOS/Source/portable/GCC/ARM_CM23/non_secure/portasm.c
FreeRTOS/Source/portable/GCC/ARM_CM23/non_secure/portasm.h
FreeRTOS/Source/portable/GCC/ARM_CM23/non_secure/portmacro.h
FreeRTOS/Source/portable/GCC/ARM_CM23/secure/secure_context.c
FreeRTOS/Source/portable/GCC/ARM_CM23/secure/secure_context.h
FreeRTOS/Source/portable/GCC/ARM_CM23/secure/secure_context_port.c
FreeRTOS/Source/portable/GCC/ARM_CM23/secure/secure_heap.c
FreeRTOS/Source/portable/GCC/ARM_CM23/secure/secure_heap.h
FreeRTOS/Source/portable/GCC/ARM_CM23/secure/secure_init.c
FreeRTOS/Source/portable/GCC/ARM_CM23/secure/secure_init.h
FreeRTOS/Source/portable/GCC/ARM_CM23/secure/secure_port_macros.h
FreeRTOS/Source/portable/GCC/ARM_CM23_NTZ/non_secure/port.c
FreeRTOS/Source/portable/GCC/ARM_CM23_NTZ/non_secure/portasm.c
FreeRTOS/Source/portable/GCC/ARM_CM23_NTZ/non_secure/portasm.h
FreeRTOS/Source/portable/GCC/ARM_CM23_NTZ/non_secure/portmacro.h
FreeRTOS/Source/portable/GCC/ARM_CM3/port.c
FreeRTOS/Source/portable/GCC/ARM_CM3/portmacro.h
FreeRTOS/Source/portable/GCC/ARM_CM33/non_secure/port.c
FreeRTOS/Source/portable/GCC/ARM_CM33/non_secure/portasm.c
FreeRTOS/Source/portable/GCC/ARM_CM33/non_secure/portasm.h
FreeRTOS/Source/portable/GCC/ARM_CM33/non_secure/portmacro.h
FreeRTOS/Source/portable/GCC/ARM_CM33/secure/secure_context.c
FreeRTOS/Source/portable/GCC/ARM_CM33/secure/secure_context.h
FreeRTOS/Source/portable/GCC/ARM_CM33/secure/secure_context_port.c
FreeRTOS/Source/portable/GCC/ARM_CM33/secure/secure_heap.c
FreeRTOS/Source/portable/GCC/ARM_CM33/secure/secure_heap.h
FreeRTOS/Source/portable/GCC/ARM_CM33/secure/secure_init.c
FreeRTOS/Source/portable/GCC/ARM_CM33/secure/secure_init.h
FreeRTOS/Source/portable/GCC/ARM_CM33/secure/secure_port_macros.h
FreeRTOS/Source/portable/GCC/ARM_CM33_NTZ/non_secure/port.c
FreeRTOS/Source/portable/GCC/ARM_CM33_NTZ/non_secure/portasm.c
FreeRTOS/Source/portable/GCC/ARM_CM33_NTZ/non_secure/portasm.h
FreeRTOS/Source/portable/GCC/ARM_CM33_NTZ/non_secure/portmacro.h
FreeRTOS/Source/portable/GCC/ARM_CM3_MPU/port.c
FreeRTOS/Source/portable/GCC/ARM_CM3_MPU/portmacro.h
FreeRTOS/Source/portable/GCC/ARM_CM4F/port.c
FreeRTOS/Source/portable/GCC/ARM_CM4F/portmacro.h
FreeRTOS/Source/portable/GCC/ARM_CM4_MPU/port.c
FreeRTOS/Source/portable/GCC/ARM_CM4_MPU/portmacro.h
FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1/port.c
FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1/portmacro.h
FreeRTOS/Source/portable/GCC/ARM_CR5/port.c
FreeRTOS/Source/portable/GCC/ARM_CR5/portASM.S
FreeRTOS/Source/portable/GCC/ARM_CR5/portmacro.h
FreeRTOS/Source/portable/GCC/ARM_CRx_No_GIC/port.c
FreeRTOS/Source/portable/GCC/ARM_CRx_No_GIC/portASM.S
FreeRTOS/Source/portable/GCC/ARM_CRx_No_GIC/portmacro.h
FreeRTOS/Source/portable/GCC/ATMega323/port.c
FreeRTOS/Source/portable/GCC/ATMega323/portmacro.h
FreeRTOS/Source/portable/GCC/AVR32_UC3/port.c
FreeRTOS/Source/portable/GCC/AVR32_UC3/portmacro.h
FreeRTOS/Source/portable/GCC/CORTUS_APS3/port.c
FreeRTOS/Source/portable/GCC/CORTUS_APS3/portmacro.h
FreeRTOS/Source/portable/GCC/ColdFire_V2/port.c
FreeRTOS/Source/portable/GCC/ColdFire_V2/portasm.S
FreeRTOS/Source/portable/GCC/ColdFire_V2/portmacro.h
FreeRTOS/Source/portable/GCC/H8S2329/port.c
FreeRTOS/Source/portable/GCC/H8S2329/portmacro.h
FreeRTOS/Source/portable/GCC/HCS12/port.c
FreeRTOS/Source/portable/GCC/HCS12/portmacro.h
FreeRTOS/Source/portable/GCC/IA32_flat/ISR_Support.h
FreeRTOS/Source/portable/GCC/IA32_flat/port.c
FreeRTOS/Source/portable/GCC/IA32_flat/portASM.S
FreeRTOS/Source/portable/GCC/IA32_flat/portmacro.h
FreeRTOS/Source/portable/GCC/MSP430F449/port.c
FreeRTOS/Source/portable/GCC/MSP430F449/portmacro.h
FreeRTOS/Source/portable/GCC/MicroBlaze/port.c
FreeRTOS/Source/portable/GCC/MicroBlaze/portasm.s
FreeRTOS/Source/portable/GCC/MicroBlaze/portmacro.h
FreeRTOS/Source/portable/GCC/MicroBlazeV8/port.c
FreeRTOS/Source/portable/GCC/MicroBlazeV8/port_exceptions.c
FreeRTOS/Source/portable/GCC/MicroBlazeV8/portasm.S
FreeRTOS/Source/portable/GCC/MicroBlazeV8/portmacro.h
FreeRTOS/Source/portable/GCC/MicroBlazeV9/port.c
FreeRTOS/Source/portable/GCC/MicroBlazeV9/port_exceptions.c
FreeRTOS/Source/portable/GCC/MicroBlazeV9/portasm.S
FreeRTOS/Source/portable/GCC/MicroBlazeV9/portmacro.h
FreeRTOS/Source/portable/GCC/NiosII/port.c
FreeRTOS/Source/portable/GCC/NiosII/port_asm.S
FreeRTOS/Source/portable/GCC/NiosII/portmacro.h
FreeRTOS/Source/portable/GCC/PPC405_Xilinx/FPU_Macros.h
FreeRTOS/Source/portable/GCC/PPC405_Xilinx/port.c
FreeRTOS/Source/portable/GCC/PPC405_Xilinx/portasm.S
FreeRTOS/Source/portable/GCC/PPC405_Xilinx/portmacro.h
FreeRTOS/Source/portable/GCC/PPC440_Xilinx/FPU_Macros.h
FreeRTOS/Source/portable/GCC/PPC440_Xilinx/port.c
FreeRTOS/Source/portable/GCC/PPC440_Xilinx/portasm.S
FreeRTOS/Source/portable/GCC/PPC440_Xilinx/portmacro.h
FreeRTOS/Source/portable/GCC/RISC-V/chip_specific_extensions/Pulpino_Vega_RV32M1RM/freertos_risc_v_chip_specific_extensions.h
FreeRTOS/Source/portable/GCC/RISC-V/chip_specific_extensions/RV32I_CLINT_no_extensions/freertos_risc_v_chip_specific_extensions.h
FreeRTOS/Source/portable/GCC/RISC-V/port.c
FreeRTOS/Source/portable/GCC/RISC-V/portASM.S
FreeRTOS/Source/portable/GCC/RISC-V/portmacro.h
FreeRTOS/Source/portable/GCC/RL78/isr_support.h
FreeRTOS/Source/portable/GCC/RL78/port.c
FreeRTOS/Source/portable/GCC/RL78/portasm.S
FreeRTOS/Source/portable/GCC/RL78/portmacro.h
FreeRTOS/Source/portable/GCC/RX100/port.c
FreeRTOS/Source/portable/GCC/RX100/portmacro.h
FreeRTOS/Source/portable/GCC/RX600/port.c
FreeRTOS/Source/portable/GCC/RX600/portmacro.h
FreeRTOS/Source/portable/GCC/RX600v2/port.c
FreeRTOS/Source/portable/GCC/RX600v2/portmacro.h
FreeRTOS/Source/portable/GCC/STR75x/port.c
FreeRTOS/Source/portable/GCC/STR75x/portISR.c
FreeRTOS/Source/portable/GCC/STR75x/portmacro.h
FreeRTOS/Source/portable/GCC/TriCore_1782/port.c
FreeRTOS/Source/portable/GCC/TriCore_1782/portmacro.h
FreeRTOS/Source/portable/GCC/TriCore_1782/porttrap.c
FreeRTOS/Source/portable/IAR/78K0R/ISR_Support.h
FreeRTOS/Source/portable/IAR/78K0R/port.c
FreeRTOS/Source/portable/IAR/78K0R/portasm.s26
FreeRTOS/Source/portable/IAR/78K0R/portmacro.h
FreeRTOS/Source/portable/IAR/ARM_CA5_No_GIC/port.c
FreeRTOS/Source/portable/IAR/ARM_CA5_No_GIC/portASM.h
FreeRTOS/Source/portable/IAR/ARM_CA5_No_GIC/portASM.s
FreeRTOS/Source/portable/IAR/ARM_CA5_No_GIC/portmacro.h
FreeRTOS/Source/portable/IAR/ARM_CA9/port.c
FreeRTOS/Source/portable/IAR/ARM_CA9/portASM.h
FreeRTOS/Source/portable/IAR/ARM_CA9/portASM.s
FreeRTOS/Source/portable/IAR/ARM_CA9/portmacro.h
FreeRTOS/Source/portable/IAR/ARM_CM0/port.c
FreeRTOS/Source/portable/IAR/ARM_CM0/portasm.s
FreeRTOS/Source/portable/IAR/ARM_CM0/portmacro.h
FreeRTOS/Source/portable/IAR/ARM_CM23/non_secure/port.c
FreeRTOS/Source/portable/IAR/ARM_CM23/non_secure/portasm.h
FreeRTOS/Source/portable/IAR/ARM_CM23/non_secure/portasm.s
FreeRTOS/Source/portable/IAR/ARM_CM23/non_secure/portmacro.h
FreeRTOS/Source/portable/IAR/ARM_CM23/secure/secure_context.c
FreeRTOS/Source/portable/IAR/ARM_CM23/secure/secure_context.h
FreeRTOS/Source/portable/IAR/ARM_CM23/secure/secure_context_port.c
FreeRTOS/Source/portable/IAR/ARM_CM23/secure/secure_context_port_asm.s
FreeRTOS/Source/portable/IAR/ARM_CM23/secure/secure_heap.c
FreeRTOS/Source/portable/IAR/ARM_CM23/secure/secure_heap.h
FreeRTOS/Source/portable/IAR/ARM_CM23/secure/secure_init.c
FreeRTOS/Source/portable/IAR/ARM_CM23/secure/secure_init.h
FreeRTOS/Source/portable/IAR/ARM_CM23/secure/secure_port_macros.h
FreeRTOS/Source/portable/IAR/ARM_CM23_NTZ/non_secure/port.c
FreeRTOS/Source/portable/IAR/ARM_CM23_NTZ/non_secure/portasm.h
FreeRTOS/Source/portable/IAR/ARM_CM23_NTZ/non_secure/portasm.s
FreeRTOS/Source/portable/IAR/ARM_CM23_NTZ/non_secure/portmacro.h
FreeRTOS/Source/portable/IAR/ARM_CM3/port.c
FreeRTOS/Source/portable/IAR/ARM_CM3/portasm.s
FreeRTOS/Source/portable/IAR/ARM_CM3/portmacro.h
FreeRTOS/Source/portable/IAR/ARM_CM33/non_secure/port.c
FreeRTOS/Source/portable/IAR/ARM_CM33/non_secure/portasm.h
FreeRTOS/Source/portable/IAR/ARM_CM33/non_secure/portasm.s
FreeRTOS/Source/portable/IAR/ARM_CM33/non_secure/portmacro.h
FreeRTOS/Source/portable/IAR/ARM_CM33/secure/secure_context.c
FreeRTOS/Source/portable/IAR/ARM_CM33/secure/secure_context.h
FreeRTOS/Source/portable/IAR/ARM_CM33/secure/secure_context_port.c
FreeRTOS/Source/portable/IAR/ARM_CM33/secure/secure_context_port_asm.s
FreeRTOS/Source/portable/IAR/ARM_CM33/secure/secure_heap.c
FreeRTOS/Source/portable/IAR/ARM_CM33/secure/secure_heap.h
FreeRTOS/Source/portable/IAR/ARM_CM33/secure/secure_init.c
FreeRTOS/Source/portable/IAR/ARM_CM33/secure/secure_init.h
FreeRTOS/Source/portable/IAR/ARM_CM33/secure/secure_port_macros.h
FreeRTOS/Source/portable/IAR/ARM_CM33_NTZ/non_secure/port.c
FreeRTOS/Source/portable/IAR/ARM_CM33_NTZ/non_secure/portasm.h
FreeRTOS/Source/portable/IAR/ARM_CM33_NTZ/non_secure/portasm.s
FreeRTOS/Source/portable/IAR/ARM_CM33_NTZ/non_secure/portmacro.h
FreeRTOS/Source/portable/IAR/ARM_CM4F/port.c
FreeRTOS/Source/portable/IAR/ARM_CM4F/portasm.s
FreeRTOS/Source/portable/IAR/ARM_CM4F/portmacro.h
FreeRTOS/Source/portable/IAR/ARM_CM4F_MPU/port.c
FreeRTOS/Source/portable/IAR/ARM_CM4F_MPU/portasm.s
FreeRTOS/Source/portable/IAR/ARM_CM4F_MPU/portmacro.h
FreeRTOS/Source/portable/IAR/ARM_CM7/r0p1/port.c
FreeRTOS/Source/portable/IAR/ARM_CM7/r0p1/portasm.s
FreeRTOS/Source/portable/IAR/ARM_CM7/r0p1/portmacro.h
FreeRTOS/Source/portable/IAR/ARM_CRx_No_GIC/port.c
FreeRTOS/Source/portable/IAR/ARM_CRx_No_GIC/portASM.s
FreeRTOS/Source/portable/IAR/ARM_CRx_No_GIC/portmacro.h
FreeRTOS/Source/portable/IAR/ATMega323/port.c
FreeRTOS/Source/portable/IAR/ATMega323/portmacro.h
FreeRTOS/Source/portable/IAR/ATMega323/portmacro.s90
FreeRTOS/Source/portable/IAR/AVR32_UC3/port.c
FreeRTOS/Source/portable/IAR/AVR32_UC3/portmacro.h
FreeRTOS/Source/portable/IAR/AtmelSAM7S64/ISR_Support.h
FreeRTOS/Source/portable/IAR/AtmelSAM7S64/port.c
FreeRTOS/Source/portable/IAR/AtmelSAM7S64/portasm.s79
FreeRTOS/Source/portable/IAR/AtmelSAM7S64/portmacro.h
FreeRTOS/Source/portable/IAR/AtmelSAM9XE/port.c
FreeRTOS/Source/portable/IAR/AtmelSAM9XE/portmacro.h
FreeRTOS/Source/portable/IAR/LPC2000/ISR_Support.h
FreeRTOS/Source/portable/IAR/LPC2000/port.c
FreeRTOS/Source/portable/IAR/LPC2000/portasm.s79
FreeRTOS/Source/portable/IAR/LPC2000/portmacro.h
FreeRTOS/Source/portable/IAR/MSP430/port.c
FreeRTOS/Source/portable/IAR/MSP430/portasm.h
FreeRTOS/Source/portable/IAR/MSP430/portext.s43
FreeRTOS/Source/portable/IAR/MSP430/portmacro.h
FreeRTOS/Source/portable/IAR/MSP430X/data_model.h
FreeRTOS/Source/portable/IAR/MSP430X/port.c
FreeRTOS/Source/portable/IAR/MSP430X/portext.s43
FreeRTOS/Source/portable/IAR/MSP430X/portmacro.h
FreeRTOS/Source/portable/IAR/RISC-V/chip_specific_extensions/RV32I_CLINT_no_extensions/freertos_risc_v_chip_specific_extensions.h
FreeRTOS/Source/portable/IAR/RISC-V/port.c
FreeRTOS/Source/portable/IAR/RISC-V/portASM.s
FreeRTOS/Source/portable/IAR/RISC-V/portmacro.h
FreeRTOS/Source/portable/IAR/RL78/ISR_Support.h
FreeRTOS/Source/portable/IAR/RL78/port.c
FreeRTOS/Source/portable/IAR/RL78/portasm.s87
FreeRTOS/Source/portable/IAR/RL78/portmacro.h
FreeRTOS/Source/portable/IAR/RX100/port.c
FreeRTOS/Source/portable/IAR/RX100/port_asm.s
FreeRTOS/Source/portable/IAR/RX100/portmacro.h
FreeRTOS/Source/portable/IAR/RX600/port.c
FreeRTOS/Source/portable/IAR/RX600/port_asm.s
FreeRTOS/Source/portable/IAR/RX600/portmacro.h
FreeRTOS/Source/portable/IAR/RXv2/port.c
FreeRTOS/Source/portable/IAR/RXv2/port_asm.s
FreeRTOS/Source/portable/IAR/RXv2/portmacro.h
FreeRTOS/Source/portable/IAR/STR71x/ISR_Support.h
FreeRTOS/Source/portable/IAR/STR71x/port.c
FreeRTOS/Source/portable/IAR/STR71x/portasm.s79
FreeRTOS/Source/portable/IAR/STR71x/portmacro.h
FreeRTOS/Source/portable/IAR/STR75x/ISR_Support.h
FreeRTOS/Source/portable/IAR/STR75x/port.c
FreeRTOS/Source/portable/IAR/STR75x/portasm.s79
FreeRTOS/Source/portable/IAR/STR75x/portmacro.h
FreeRTOS/Source/portable/IAR/STR91x/ISR_Support.h
FreeRTOS/Source/portable/IAR/STR91x/port.c
FreeRTOS/Source/portable/IAR/STR91x/portasm.s79
FreeRTOS/Source/portable/IAR/STR91x/portmacro.h
FreeRTOS/Source/portable/IAR/V850ES/ISR_Support.h
FreeRTOS/Source/portable/IAR/V850ES/port.c
FreeRTOS/Source/portable/IAR/V850ES/portasm.s85
FreeRTOS/Source/portable/IAR/V850ES/portasm_Fx3.s85
FreeRTOS/Source/portable/IAR/V850ES/portasm_Hx2.s85
FreeRTOS/Source/portable/IAR/V850ES/portmacro.h
FreeRTOS/Source/portable/MPLAB/PIC18F/port.c
FreeRTOS/Source/portable/MPLAB/PIC18F/portmacro.h
FreeRTOS/Source/portable/MPLAB/PIC24_dsPIC/port.c
FreeRTOS/Source/portable/MPLAB/PIC24_dsPIC/portasm_PIC24.S
FreeRTOS/Source/portable/MPLAB/PIC24_dsPIC/portasm_dsPIC.S
FreeRTOS/Source/portable/MPLAB/PIC24_dsPIC/portmacro.h
FreeRTOS/Source/portable/MPLAB/PIC32MEC14xx/ISR_Support.h
FreeRTOS/Source/portable/MPLAB/PIC32MEC14xx/port.c
FreeRTOS/Source/portable/MPLAB/PIC32MEC14xx/port_asm.S
FreeRTOS/Source/portable/MPLAB/PIC32MEC14xx/portmacro.h
FreeRTOS/Source/portable/MPLAB/PIC32MX/ISR_Support.h
FreeRTOS/Source/portable/MPLAB/PIC32MX/port.c
FreeRTOS/Source/portable/MPLAB/PIC32MX/port_asm.S
FreeRTOS/Source/portable/MPLAB/PIC32MX/portmacro.h
FreeRTOS/Source/portable/MPLAB/PIC32MZ/ISR_Support.h
FreeRTOS/Source/portable/MPLAB/PIC32MZ/port.c
FreeRTOS/Source/portable/MPLAB/PIC32MZ/port_asm.S
FreeRTOS/Source/portable/MPLAB/PIC32MZ/portmacro.h
FreeRTOS/Source/portable/MSVC-MingW/port.c
FreeRTOS/Source/portable/MSVC-MingW/portmacro.h
FreeRTOS/Source/portable/MemMang/heap_1.c
FreeRTOS/Source/portable/MemMang/heap_2.c
FreeRTOS/Source/portable/MemMang/heap_3.c
FreeRTOS/Source/portable/MemMang/heap_4.c
FreeRTOS/Source/portable/MemMang/heap_5.c
FreeRTOS/Source/portable/MikroC/ARM_CM4F/port.c
FreeRTOS/Source/portable/MikroC/ARM_CM4F/portmacro.h
FreeRTOS/Source/portable/Paradigm/Tern_EE/large_untested/port.c
FreeRTOS/Source/portable/Paradigm/Tern_EE/large_untested/portasm.h
FreeRTOS/Source/portable/Paradigm/Tern_EE/large_untested/portmacro.h
FreeRTOS/Source/portable/Paradigm/Tern_EE/small/port.c
FreeRTOS/Source/portable/Paradigm/Tern_EE/small/portasm.h
FreeRTOS/Source/portable/Paradigm/Tern_EE/small/portmacro.h
FreeRTOS/Source/portable/RVDS/ARM7_LPC21xx/port.c
FreeRTOS/Source/portable/RVDS/ARM7_LPC21xx/portASM.s
FreeRTOS/Source/portable/RVDS/ARM7_LPC21xx/portmacro.h
FreeRTOS/Source/portable/RVDS/ARM7_LPC21xx/portmacro.inc
FreeRTOS/Source/portable/RVDS/ARM_CA9/port.c
FreeRTOS/Source/portable/RVDS/ARM_CA9/portASM.s
FreeRTOS/Source/portable/RVDS/ARM_CA9/portmacro.h
FreeRTOS/Source/portable/RVDS/ARM_CA9/portmacro.inc
FreeRTOS/Source/portable/RVDS/ARM_CM0/port.c
FreeRTOS/Source/portable/RVDS/ARM_CM0/portmacro.h
FreeRTOS/Source/portable/RVDS/ARM_CM3/port.c
FreeRTOS/Source/portable/RVDS/ARM_CM3/portmacro.h
FreeRTOS/Source/portable/RVDS/ARM_CM4F/port.c
FreeRTOS/Source/portable/RVDS/ARM_CM4F/portmacro.h
FreeRTOS/Source/portable/RVDS/ARM_CM4_MPU/port.c
FreeRTOS/Source/portable/RVDS/ARM_CM4_MPU/portmacro.h
FreeRTOS/Source/portable/RVDS/ARM_CM7/r0p1/port.c
FreeRTOS/Source/portable/RVDS/ARM_CM7/r0p1/portmacro.h
FreeRTOS/Source/portable/Renesas/RX100/port.c
FreeRTOS/Source/portable/Renesas/RX100/port_asm.src
FreeRTOS/Source/portable/Renesas/RX100/portmacro.h
FreeRTOS/Source/portable/Renesas/RX200/port.c
FreeRTOS/Source/portable/Renesas/RX200/port_asm.src
FreeRTOS/Source/portable/Renesas/RX200/portmacro.h
FreeRTOS/Source/portable/Renesas/RX600/port.c
FreeRTOS/Source/portable/Renesas/RX600/port_asm.src
FreeRTOS/Source/portable/Renesas/RX600/portmacro.h
FreeRTOS/Source/portable/Renesas/RX600v2/port.c
FreeRTOS/Source/portable/Renesas/RX600v2/port_asm.src
FreeRTOS/Source/portable/Renesas/RX600v2/portmacro.h
FreeRTOS/Source/portable/Renesas/SH2A_FPU/ISR_Support.inc
FreeRTOS/Source/portable/Renesas/SH2A_FPU/port.c
FreeRTOS/Source/portable/Renesas/SH2A_FPU/portasm.src
FreeRTOS/Source/portable/Renesas/SH2A_FPU/portmacro.h
FreeRTOS/Source/portable/Rowley/MSP430F449/port.c
FreeRTOS/Source/portable/Rowley/MSP430F449/portasm.h
FreeRTOS/Source/portable/Rowley/MSP430F449/portext.asm
FreeRTOS/Source/portable/Rowley/MSP430F449/portmacro.h
FreeRTOS/Source/portable/SDCC/Cygnal/port.c
FreeRTOS/Source/portable/SDCC/Cygnal/portmacro.h
FreeRTOS/Source/portable/Softune/MB91460/port.c
FreeRTOS/Source/portable/Softune/MB91460/portmacro.h
FreeRTOS/Source/portable/Softune/MB96340/port.c
FreeRTOS/Source/portable/Softune/MB96340/portmacro.h
FreeRTOS/Source/portable/Tasking/ARM_CM4F/port.c
FreeRTOS/Source/portable/Tasking/ARM_CM4F/port_asm.asm
FreeRTOS/Source/portable/Tasking/ARM_CM4F/portmacro.h
FreeRTOS/Source/portable/WizC/PIC18/Drivers/Tick/Tick.c
FreeRTOS/Source/portable/WizC/PIC18/Drivers/Tick/isrTick.c
FreeRTOS/Source/portable/WizC/PIC18/addFreeRTOS.h
FreeRTOS/Source/portable/WizC/PIC18/port.c
FreeRTOS/Source/portable/WizC/PIC18/portmacro.h
FreeRTOS/Source/portable/oWatcom/16BitDOS/Flsh186/port.c
FreeRTOS/Source/portable/oWatcom/16BitDOS/Flsh186/portmacro.h
FreeRTOS/Source/portable/oWatcom/16BitDOS/PC/port.c
FreeRTOS/Source/portable/oWatcom/16BitDOS/PC/portmacro.h
FreeRTOS/Source/portable/oWatcom/16BitDOS/common/portasm.h
FreeRTOS/Source/portable/oWatcom/16BitDOS/common/portcomn.c
FreeRTOS/Source/queue.c
FreeRTOS/Source/stream_buffer.c
FreeRTOS/Source/tasks.c
FreeRTOS/Source/timers.c
Upgrading to FreeRTOS V10.3.0.url [deleted file]

index a543fae8307e21ad312fbd455f9010114baf0910..c2c236de7551621ce0945cf179cb5c469b92812f 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 02bf82bf9588a897c33bbce2bd23c2e8ae5254fa..1f62658ce01eac5740299175f71e6616eb9b94e7 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 2d51478c01815f56173d9f98897f0f344b6a1c55..1a25c309f7a60a8bedf3fbd2d5bf8339ef8742ee 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 2dc08cf05ab5346f81483c9cd23cae90c95bdc59..8eef94a78bc8db0cbfb7a424e314c56f4447998b 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 197b2168433dc25f04a3300d812a69437e239bf0..ae31ae8cfa970c09a3613574d3be252ec5798a62 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index a1b0fa5e92ac201029761d69858ac8624d70697d..7af543bdaedbe37c24f851f5410e1201507a92c9 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d58a0b80fdb49386f1db8dc42ce420e8ebbb032c..5b50d813b5e5ccad92b2af8ad81cb9a1255bc697 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 92b7773b7b4348c6ecb574880dc417b9a28bf930..b165942724ae65b0b1dcacf018e083f178e0fec6 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e81cc2cd94899e6ff18f06818c2c97a5e56c3323..b6e7b4e9b74b14db55ac67878645e3728b269ba7 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d58a0b80fdb49386f1db8dc42ce420e8ebbb032c..5b50d813b5e5ccad92b2af8ad81cb9a1255bc697 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 92b7773b7b4348c6ecb574880dc417b9a28bf930..b165942724ae65b0b1dcacf018e083f178e0fec6 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 73f33188314bc5de06712e36997959eeabd8a8ee..14751dfff2a8f64f21033cc0d36c27f247d3c2a1 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d58a0b80fdb49386f1db8dc42ce420e8ebbb032c..5b50d813b5e5ccad92b2af8ad81cb9a1255bc697 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f6985100f74f876dd4aa73455f26da960c6257d8..1b09c3e1f12b47368e5e80c87ee6f7c712cc2aa3 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 1e286386bcb12c2ddf4068e869fba6e525fe8934..2b1f43f675ab563f7f2a70e64c1eabd58a0ab67e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c4a3e1a58f70a5f8d5dc00504f2025dfe9ef370d..d1263f261c3d8f82209b71a3139ae8a245009a78 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 0fefe0305df462f78bf92c7cbc45e80edd3919a2..85ee6958a9863bc31ea493d21e45d6f9a2b03f46 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 8ef81df01254c8a9d8b0e0b56b51bee5a1feb9c0..eab9021347f791003e44a1c9b584f41fe4d702a7 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 40b5a97732e5cf23587380d70286a1510681bc2d..51cb52e1f3c425764dafbfe18c795ea421a39b1e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 89d36a4826f7118666ff4376b7ce3914e79c91fb..37a9ae8a76d99a6686cb969d90df30a3dc81e3d7 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d58a0b80fdb49386f1db8dc42ce420e8ebbb032c..5b50d813b5e5ccad92b2af8ad81cb9a1255bc697 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 6f86009bf5b6a279759c8d39ddc7148e2fb8219d..a2084f05c5725cc0131d153ff062dd9a2e9e4cdf 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 02bf82bf9588a897c33bbce2bd23c2e8ae5254fa..1f62658ce01eac5740299175f71e6616eb9b94e7 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 2d51478c01815f56173d9f98897f0f344b6a1c55..1a25c309f7a60a8bedf3fbd2d5bf8339ef8742ee 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 971405caa42273d422261bb3d0f298211283b876..407cd7683e20336ef03eb9e78c78bf8d97571627 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e22e91093676a35c789d371d871a0876cb27a3b3..8388bab0e915613f4dcd8e6b8635c1f2ce32e3c5 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 197b2168433dc25f04a3300d812a69437e239bf0..ae31ae8cfa970c09a3613574d3be252ec5798a62 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f06d37c21038cf9aa512c6cad414c635e85614ee..924ecee9a361be290f40708df350f50cc718d7a1 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index aabb3a6f3bda27758f5df6e75eeeea09e932dbc3..94b52417705a052e545c384a524500a4485af722 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index feb872c52bffcbd94b9db2c0e8293566ea399964..7288238fde11b3cfdb60c45dec45c354dc759346 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d9b7a593dcaf560f16f5d02f6b35199145b55475..bda52a958ae7d7ba7bbdfc200a000573e5d3705e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 02bf82bf9588a897c33bbce2bd23c2e8ae5254fa..1f62658ce01eac5740299175f71e6616eb9b94e7 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 2d51478c01815f56173d9f98897f0f344b6a1c55..1a25c309f7a60a8bedf3fbd2d5bf8339ef8742ee 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e22e91093676a35c789d371d871a0876cb27a3b3..8388bab0e915613f4dcd8e6b8635c1f2ce32e3c5 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 197b2168433dc25f04a3300d812a69437e239bf0..ae31ae8cfa970c09a3613574d3be252ec5798a62 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 0c11b0c1dfb560d185ae75964909c6a351e96d2d..d8403fd069377f6c7f95adfe9afb87be1e23c880 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d58a0b80fdb49386f1db8dc42ce420e8ebbb032c..5b50d813b5e5ccad92b2af8ad81cb9a1255bc697 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index b4f55e1373cf66e8e62d363c7019c0f3b10fd24e..b28a4490ea620b37582e95b111c760465150169f 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 20a783d5123d3d9d53dca0a52c84597bb05a6789..a289ae50d3a82c8e67cb255063ea3bd5db4cccc8 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 841ebd1a89fcdab2e1bc08246833d223942234ba..9f4f4e6d0b3d9bce8867c1ee520df89b3f096fdb 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 92b7773b7b4348c6ecb574880dc417b9a28bf930..b165942724ae65b0b1dcacf018e083f178e0fec6 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 6ea370304ef5481a3577f28aaa219efb61331d21..14382ad1c9b3044ed2fc44ae3804b532faecff52 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d58a0b80fdb49386f1db8dc42ce420e8ebbb032c..5b50d813b5e5ccad92b2af8ad81cb9a1255bc697 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 6f86009bf5b6a279759c8d39ddc7148e2fb8219d..a2084f05c5725cc0131d153ff062dd9a2e9e4cdf 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 6639d2407d66db24b978dada4bd0525def644ded..5adfd95c32a7884cdeb3feac748410031163b0a8 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 614e2614c1c181a5e4a9b3d23fa132a5ed10bcde..25b7d77a539d00732d4fcefb07fb77923a7f3700 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e407f438d41425cbed09fb5c614acf75a694de46..727998023fd1be9346ddd8ef9d9494a61a9ea307 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 6f86009bf5b6a279759c8d39ddc7148e2fb8219d..a2084f05c5725cc0131d153ff062dd9a2e9e4cdf 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 02bf82bf9588a897c33bbce2bd23c2e8ae5254fa..1f62658ce01eac5740299175f71e6616eb9b94e7 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 2d51478c01815f56173d9f98897f0f344b6a1c55..1a25c309f7a60a8bedf3fbd2d5bf8339ef8742ee 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index b96fc0bc93ce40176740891036b5c5a13378494f..f0d8362c7ab11687ceab667c8184de43093e5826 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e22e91093676a35c789d371d871a0876cb27a3b3..8388bab0e915613f4dcd8e6b8635c1f2ce32e3c5 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 197b2168433dc25f04a3300d812a69437e239bf0..ae31ae8cfa970c09a3613574d3be252ec5798a62 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 357a2c2235ea4b8157f51a03651ab2924a93e490..131daa6895238bb2efee3d0ac77e6478b608294b 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d30abd5a5194520fbee5f6eca818f080de711a03..a89619b732ed0bc62168dbe1e2bc6e64651bfeac 100644 (file)
@@ -1,7 +1,7 @@
 var awsIotProfileTemplate =\r
 `/*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 817f706a917c75ccd1d494907e9c7422fde5df6d..c9a54ab15daf4226c436f95a0f175e30bfb4f65c 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c4a3e1a58f70a5f8d5dc00504f2025dfe9ef370d..d1263f261c3d8f82209b71a3139ae8a245009a78 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 3c8fa06994e34bc1ac60fb0d8ccf35564137cb7a..e0667d79a72d5bb2dbf057a3304b627d58f5a39c 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 8ec7ee00fc0b1e2c89e71022ac032a2f1ec466cc..1a46df0214633ca5a83ac6119dac3cb358f13cc5 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 11f8f00b93c981322d9a103f732ffd5e8f4eb58f..e788d28e602f04f04d6ba598c6e219654f493a96 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 02bf82bf9588a897c33bbce2bd23c2e8ae5254fa..1f62658ce01eac5740299175f71e6616eb9b94e7 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 2d51478c01815f56173d9f98897f0f344b6a1c55..1a25c309f7a60a8bedf3fbd2d5bf8339ef8742ee 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 971405caa42273d422261bb3d0f298211283b876..407cd7683e20336ef03eb9e78c78bf8d97571627 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e22e91093676a35c789d371d871a0876cb27a3b3..8388bab0e915613f4dcd8e6b8635c1f2ce32e3c5 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 197b2168433dc25f04a3300d812a69437e239bf0..ae31ae8cfa970c09a3613574d3be252ec5798a62 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 22f95907c075ef821ca8d53f727904f108fc47d3..fa9f5aababdfde351101b07df2766bbd9647cf72 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e973cef02d64d6456ea0ca3a73fd80132ac32655..20fbe615c59886f8b69483cfd1c71929909c49a1 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
+ * FreeRTOS Kernel V10.3.0\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
index fd548844ff22903f3b313f8e6f4bdf8275ec400c..0ee1b62246cb51b91eda5e13d9c604250fbf2fb5 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
+ * FreeRTOS Kernel V10.3.0\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
index ba3a43e6fec42154fa69e15d8b625c9784f744fd..d61e017f8a6705e41284552ea37b6617d4f8b3f8 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
+ * FreeRTOS Kernel V10.3.0\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
index bac9b7a1a1776d0193872577cf2d0dc599c9e009..27a948e2a8293cd5e4ecf9874f13f8ba02a3d8e2 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
+ * FreeRTOS Kernel V10.3.0\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
index 157463544f5f20d27c01588726de30bb7ac797b7..b47c4dec125e917c3f5fe4c0bedbe3e9e75cb06b 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
+ * FreeRTOS Kernel V10.3.0\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
index a4326481968f31fe085cdb8630207bc9350e1aa7..3df1c445895a60943cafda8999238843abba48e0 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
+ * FreeRTOS Kernel V10.3.0\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
index 69dda29957de7ab25d3338cc21620197a324a61a..69698c6a65564b27e97d157bb377d12d7009b6ea 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
+ * FreeRTOS Kernel V10.3.0\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
index eb0d078acf7783009f677a513e4bd0910fdfd2c3..f8ea22e760f9c1fe0b8217b0de233bcd5408d4fb 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
+ * FreeRTOS Kernel V10.3.0\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
index cc1872876b4064ebf9b0bfea68667aa826f3c342..e0f89d2e9736e4b670efba60c4b25f7f88253b90 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
+ * FreeRTOS Kernel V10.3.0\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
index 3f1f6ef4fd3c548f59ca806212d0f4ca5be217b4..e3c32fcd06c97ba8c321f9eaf2e867efd3ade6c5 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
+ * FreeRTOS Kernel V10.3.0\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
index b241fd36984854dba1012c0014a6db188fde5d0b..b159373e5c51f4ed338bf4f93620ee1df951547a 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
+ * FreeRTOS Kernel V10.3.0\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
index 1a73f1cf14543dbc62fcb8aad7b52f4b1e3ce4b9..939bff283e192fd1f608f0cc1eeb1991e53e4b0c 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
+ * FreeRTOS Kernel V10.3.0\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
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/DemoTasks/SimpleMQTTExamples.c b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/DemoTasks/SimpleMQTTExamples.c
deleted file mode 100644 (file)
index 80a0416..0000000
+++ /dev/null
@@ -1,548 +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
-/* Standard inclues. */\r
-#include <string.h>\r
-#include <stdio.h>\r
-\r
-/* Kernel includes. */\r
-#include "FreeRTOS.h"\r
-#include "task.h"\r
-\r
-/* IoT SDK includes. */\r
-#include "iot_mqtt.h"\r
-#include "iot_taskpool.h"\r
-#include "platform/iot_network_freertos.h"\r
-\r
-/**\r
- * @brief The keep-alive interval used for this example.\r
- *\r
- * An MQTT ping request will be sent periodically at this interval.\r
- */\r
-#define mqttexampleKEEP_ALIVE_SECONDS          ( 60 )\r
-\r
-/**\r
- * @brief The timeout for MQTT operations in this example.\r
- */\r
-#define mqttexampleMQTT_TIMEOUT_MS                     ( 50000 )\r
-\r
-/**\r
- * @brief The MQTT client identifier used in this example.\r
- */\r
-#define mqttexampleCLIENT_IDENTIFIER           "mqttexampleclient"\r
-\r
-const char *pcClientIdentifiers[] = { "AAA" };//, "BBB", "CCC", "DDD", "EEE", "FFF", "GGG", "HHH", "III", "JJJ" };\r
-\r
-/**\r
- * @brief Details of the MQTT broker to connect to.\r
- *\r
- * @note This example does not use TLS and therefore won't work with AWS IoT.\r
- *\r
- */\r
-#define mqttexampleMQTT_BROKER_ENDPOINT                "test.mosquitto.org"\r
-#define mqttexampleMQTT_BROKER_PORT                    1883\r
-\r
-/**\r
- * @brief The topic to subscribe and publish to in the example.\r
- */\r
-#define mqttexampleTOPIC                                       "example/topic"\r
-\r
-/**\r
- * @brief The MQTT message published in this example.\r
- */\r
-#define mqttexampleMESSAGE                                     "Hello World!"\r
-\r
-/**\r
- * @brief Paramters to control the retry behaviour in case a QoS1 publish\r
- * message gets lost.\r
- *\r
- * Retry every minutes up to a maximum of 5 retries.\r
- */\r
-#define mqttexamplePUBLISH_RETRY_MS                    ( 1000 )\r
-#define mqttexamplePUBLISH_RETRY_LIMIT         ( 5 )\r
-\r
-/**\r
- * @brief The bit which is set in the demo task's notification value from the\r
- * disconnect callback to inform the demo task about the MQTT disconnect.\r
- */\r
-#define mqttexampleDISCONNECTED_BIT                    ( 1UL << 0UL )\r
-\r
-/**\r
- * @brief The bit which is set in the demo task's notification value from the\r
- * publish callback to inform the demo task about the message received from the\r
- * MQTT broker.\r
- */\r
-#define mqttexampleMESSAGE_RECEIVED_BIT                ( 1UL << 1UL )\r
-/*-----------------------------------------------------------*/\r
-\r
-/**\r
- * @brief Parameters used to create the system task pool.\r
- */\r
-static const IotTaskPoolInfo_t xTaskPoolParameters = {\r
-                                                                                                               /* Minimum number of threads in a task pool.\r
-                                                                                                                * Note the slimmed down version of the task\r
-                                                                                                                * pool used by this library does not autoscale\r
-                                                                                                                * the number of tasks in the pool so in this\r
-                                                                                                                * case this sets the number of tasks in the\r
-                                                                                                                * pool. */\r
-                                                                                                               2,\r
-                                                                                                               /* Maximum number of threads in a task pool.\r
-                                                                                                                * Note the slimmed down version of the task\r
-                                                                                                                * pool used by this library does not autoscale\r
-                                                                                                                * the number of tasks in the pool so in this\r
-                                                                                                                * case this parameter is just ignored. */\r
-                                                                                                               2,\r
-                                                                                                               /* Stack size for every task pool thread - in\r
-                                                                                                                * bytes, hence multiplying by the number of bytes\r
-                                                                                                                * in a word as configMINIMAL_STACK_SIZE is\r
-                                                                                                                * specified in words. */\r
-                                                                                                               configMINIMAL_STACK_SIZE * sizeof( portSTACK_TYPE ),\r
-                                                                                                               /* Priority for every task pool thread. */\r
-                                                                                                               tskIDLE_PRIORITY,\r
-                                                                                                        };\r
-/*-----------------------------------------------------------*/\r
-\r
-/**\r
- * @brief The task used to demonstrate the MQTT API.\r
- *\r
- * @param[in] pvParameters Parmaters as passed at the time of task creation. Not\r
- * used in this example.\r
- */\r
-static void prvMQTTDemoTask( void *pvParameters );\r
-\r
-/**\r
- * @brief The callback invoked by the MQTT library when the MQTT connection gets\r
- * disconnected.\r
- *\r
- * @param[in] pvCallbackContext Callback context as provided at the time of\r
- * connect.\r
- * @param[in] pxCallbackParams Contains the reason why the MQTT connection was\r
- * disconnected.\r
- */\r
-static void prvExample_OnDisconnect( void * pvCallbackContext,\r
-                                                                        IotMqttCallbackParam_t * pxCallbackParams );\r
-\r
-/**\r
- * @brief The callback invoked by the MQTT library when a message is received on\r
- * a subscribed topic from the MQTT broker.\r
- *\r
- * @param[in] pvCallbackContext Callback context as provided at the time of\r
- * subscribe.\r
- * @param[in] pxCallbackParams Contain the details about the received message -\r
- * topic on which the message was received, the received message.\r
- */\r
-static void prvExample_OnMessageReceived( void * pvCallbackContext,\r
-                                                                                 IotMqttCallbackParam_t * pxCallbackParams );\r
-\r
-/**\r
- * @brief Connects to the MQTT broker as specified in mqttexampleMQTT_BROKER_ENDPOINT\r
- * and mqttexampleMQTT_BROKER_PORT.\r
- *\r
- * @note This example does not use TLS and therefore will not work with MQTT.\r
- */\r
-static void prvMQTTConnect( IotMqttConnection_t *xMQTTConnection, const char *pcClientID );\r
-\r
-/**\r
- * @brief Subscribes to pcTopicString.\r
- */\r
-static void prvMQTTSubscribe( IotMqttConnection_t xMQTTConnection, const char * const pcTopicString );\r
-\r
-/**\r
- * @brief Publishes a messages mqttexampleMESSAGE on mqttexampleTOPIC topic.\r
- */\r
-static void prvMQTTPublish( IotMqttConnection_t xMQTTConnection, const char * const pcTopicString );\r
-\r
-/**\r
- * @brief Unsubscribes from the mqttexampleTOPIC topic.\r
- */\r
-static void prvMQTTUnsubscribe( IotMqttConnection_t xMQTTConnection, const char * const pcTopicString );\r
-\r
-/**\r
- * @brief Disconnects from the MQTT broker gracefully by sending an MQTT\r
- * DISCONNECT message.\r
- */\r
-static void prvMQTTDisconnect( IotMqttConnection_t xMQTTConnection );\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvExample_OnDisconnect( void * pvCallbackContext,\r
-                                                                                  IotMqttCallbackParam_t * pxCallbackParams )\r
-{\r
-TaskHandle_t xDemoTaskHandle = ( TaskHandle_t ) pvCallbackContext;\r
-\r
-       /* Ensure that we initiated the disconnect. */\r
-       configASSERT( pxCallbackParams->u.disconnectReason == IOT_MQTT_DISCONNECT_CALLED );\r
-\r
-       /* Inform the demo task about the disconnect. */\r
-       xTaskNotify( xDemoTaskHandle,\r
-                               mqttexampleDISCONNECTED_BIT,\r
-                               eSetBits /* Set the mqttexampleDISCONNECTED_BIT in the demo task's notification value. */\r
-                               );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvExample_OnMessageReceived( void * pvCallbackContext,\r
-                                                                               IotMqttCallbackParam_t * pxCallbackParams )\r
-{\r
-TaskHandle_t xDemoTaskHandle = ( TaskHandle_t ) pvCallbackContext;\r
-\r
-       /* Ensure that the message is received on the expected topic. */\r
-//     configASSERT( pxCallbackParams->u.message.info.topicNameLength == strlen( mqttexampleTOPIC ) );\r
-//     configASSERT( strncmp( pxCallbackParams->u.message.info.pTopicName,\r
-//                                                mqttexampleTOPIC,\r
-//                                                strlen( mqttexampleTOPIC ) ) == 0 );\r
-\r
-       /* Ensure that the expected message is received. */\r
-       configASSERT( pxCallbackParams->u.message.info.payloadLength == strlen( mqttexampleMESSAGE ) );\r
-       configASSERT( strncmp( pxCallbackParams->u.message.info.pPayload,\r
-                                                  mqttexampleMESSAGE,\r
-                                                  strlen( mqttexampleMESSAGE ) ) == 0 );\r
-\r
-       /* Ensure that the message QoS is as expected. */\r
-       configASSERT( pxCallbackParams->u.message.info.qos == IOT_MQTT_QOS_1 );\r
-\r
-       /* Although this print uses the constants rather than the data from the\r
-        * message payload the asserts above have already checked the message\r
-        * payload equals the constants, and it is more efficient not to have to\r
-        * worry about lengths in the print. */\r
-       configPRINTF( ( "Received %s on the topic %s\r\n", mqttexampleMESSAGE, mqttexampleTOPIC ) );\r
-\r
-       /* Inform the demo task about the message received from the MQTT broker. */\r
-       xTaskNotify( xDemoTaskHandle,\r
-                                mqttexampleMESSAGE_RECEIVED_BIT,\r
-                                eSetBits /* Set the mqttexampleMESSAGE_RECEIVED_BIT in the demo task's notification value. */\r
-                               );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-void vStartSimpleMQTTDemo( void )\r
-{\r
-uint32_t x;\r
-const uint32_t ulMax_x = sizeof( pcClientIdentifiers ) / sizeof( char * );\r
-\r
-       /* This example uses a single application task, which in turn is used to\r
-        * connect, subscribe, publish, unsubscribe and disconnect from the MQTT\r
-        * broker. */\r
-for( x = 0; x < ulMax_x; x++ )\r
-{\r
-       xTaskCreate( prvMQTTDemoTask,                   /* Function that implements the task. */\r
-                                "MQTTDemo",                            /* Text name for the task - only used for debugging. */\r
-                                configMINIMAL_STACK_SIZE,      /* Size of stack (in words, not bytes) to allocate for the task. */\r
-                                ( void * ) x,                                          /* Task parameter - not used in this case. */\r
-                                tskIDLE_PRIORITY,                      /* Task priority, must be between 0 and configMAX_PRIORITIES - 1. */\r
-                                NULL );                                        /* Used to pass out a handle to the created task - not used in this case. */\r
-}\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvMQTTDemoTask( void *pvParameters )\r
-{\r
-IotMqttError_t xResult;\r
-uint32_t ulNotificationValue = 0, ulPublishCount;\r
-uint32_t ulMaxPublishCount = 0UL;\r
-const TickType_t xNoDelay = ( TickType_t ) 1;\r
-IotMqttConnection_t xMQTTConnection = IOT_MQTT_CONNECTION_INITIALIZER;\r
-uint32_t ulTaskNumber = ( uint32_t ) pvParameters, x;\r
-char cTopicString[ sizeof( mqttexampleTOPIC ) + 5 ];//_RB_ Access by other tasks so must be persistant and will cause memory faults on memory protected systems.\r
-#pragma message ("Access by other tasks so must be persistant and will cause memory faults on memory protected systems.")\r
-\r
-       /* Remove compiler warnings about unused parameters. */\r
-       ( void ) pvParameters;\r
-\r
-       /* The MQTT library needs a task pool, so create the system task pool. */\r
-       xResult = IotTaskPool_CreateSystemTaskPool( &( xTaskPoolParameters ) );\r
-       configASSERT( xResult == IOT_TASKPOOL_SUCCESS );\r
-\r
-       /* MQTT library must be initialized before it can be used. This is just one\r
-        * time initialization. */\r
-       xResult = IotMqtt_Init();\r
-       configASSERT( xResult == IOT_MQTT_SUCCESS );\r
-\r
-       /* Create a topic string that is unique to the MQTT connection created by\r
-       this task. */\r
-       snprintf( cTopicString, sizeof( cTopicString ), "%s/%s", mqttexampleTOPIC, pcClientIdentifiers[ ulTaskNumber ] );\r
-\r
-       for( ; ; )\r
-       {\r
-               /* Don't expect any notifications to be pending yet. */\r
-               ulNotificationValue = ulTaskNotifyTake( pdTRUE, xNoDelay );\r
-               configASSERT( ulNotificationValue == 0 );\r
-\r
-\r
-               /****************************** Connect. ******************************/\r
-\r
-               /* Establish a connection to the MQTT broker. This example connects to\r
-                * the MQTT broker as specified in mqttexampleMQTT_BROKER_ENDPOINT and\r
-                * mqttexampleMQTT_BROKER_PORT at the top of this file. Please change\r
-                * it to the MQTT broker you want to connect to. Note that this example\r
-                * does not use TLS and therefore will not work with AWS IoT. */\r
-               prvMQTTConnect( &xMQTTConnection, pcClientIdentifiers[ ulTaskNumber ] );\r
-               configPRINTF( ( "Connected to %s\r\n", mqttexampleMQTT_BROKER_ENDPOINT ) );\r
-\r
-\r
-               /**************************** Subscribe. ******************************/\r
-\r
-               /* The client is now connected to the broker. Subscribe to the topic\r
-                * as specified in mqttexampleTOPIC at the top of this file.  This\r
-                * client will then publish to the same topic it subscribed to, so will\r
-                * expect all the messages it sends to the broker to be sent back to it\r
-                * from the broker. */\r
-               prvMQTTSubscribe( xMQTTConnection, cTopicString );\r
-               configPRINTF( ( "Subscribed to the topic %s\r\n", cTopicString ) );\r
-\r
-\r
-               /*********************** Publish 5 messages. **************************/\r
-\r
-               /* Publish a few messages while connected. */\r
-               for( x = 0; x < ( ulTaskNumber + 1UL ); x++ )\r
-               {\r
-                       ulMaxPublishCount = uxRand();\r
-               }\r
-\r
-               /* Cap ulMaxPublishCount but ensure it is not zero. */\r
-               ulMaxPublishCount %= 10UL;\r
-               ulMaxPublishCount++;\r
-\r
-               for( ulPublishCount = 0; ulPublishCount < ulMaxPublishCount; ulPublishCount++ )\r
-               {\r
-                       /* Publish a message on the mqttexampleTOPIC topic as specified at\r
-                        * the top of this file. */\r
-                       prvMQTTPublish( xMQTTConnection, cTopicString );\r
-                       configPRINTF( ( "Published %s on the topic %s\r\n", mqttexampleMESSAGE, cTopicString ) );\r
-\r
-                       /* Since we are subscribed to the same topic as we published on, we\r
-                        * will get the same message back from the MQTT broker. Wait for the\r
-                        * message to be received which is informed to us by the publish\r
-                        * callback (prvExample_OnMessageReceived) by setting the\r
-                        * mqttexampleMESSAGE_RECEIVED_BIT in this task's notification\r
-                        * value. Note that the bit is cleared in the task's notification\r
-                        * value to ensure that it is ready for next message. */\r
-                       xTaskNotifyWait( 0UL, /* Don't clear any bits on entry. */\r
-                                                        mqttexampleMESSAGE_RECEIVED_BIT, /* Clear bit on exit. */\r
-                                                        &( ulNotificationValue ), /* Obtain the notification value. */\r
-                                                        pdMS_TO_TICKS( mqttexampleMQTT_TIMEOUT_MS ) );\r
-                       configASSERT( ( ulNotificationValue & mqttexampleMESSAGE_RECEIVED_BIT ) == mqttexampleMESSAGE_RECEIVED_BIT );\r
-               }\r
-\r
-\r
-               /******************* Unsubscribe and Disconnect. **********************/\r
-\r
-               /* Unsubscribe from the topic mqttexampleTOPIC and disconnect\r
-                * gracefully. */\r
-               prvMQTTUnsubscribe( xMQTTConnection, cTopicString );\r
-               prvMQTTDisconnect( xMQTTConnection );\r
-               configPRINTF( ( "Disconnected from %s\r\n\r\n", mqttexampleMQTT_BROKER_ENDPOINT ) );\r
-\r
-               /* Wait for the disconnect operation to complete which is informed to us\r
-                * by the disconnect callback (prvExample_OnDisconnect)by setting\r
-                * the mqttexampleDISCONNECTED_BIT in this task's notification value.\r
-                * Note that the bit is cleared in the task's notification value to\r
-                * ensure that it is ready for the next run. */\r
-               xTaskNotifyWait( 0UL, /* Don't clear any bits on entry. */\r
-                                                mqttexampleDISCONNECTED_BIT, /* Clear bit on exit. */\r
-                                                &( ulNotificationValue ), /* Obtain the notification value. */\r
-                                                pdMS_TO_TICKS( mqttexampleMQTT_TIMEOUT_MS ) );\r
-               configASSERT( ( ulNotificationValue & mqttexampleDISCONNECTED_BIT ) == mqttexampleDISCONNECTED_BIT );\r
-\r
-               /* Wait for some time between two iterations to ensure that we do not\r
-                * bombard the public test mosquitto broker. */\r
-               configPRINTF( ( "prvMQTTDemoTask() completed an iteration without hitting an assert. Total free heap is %u\r\n\r\n", xPortGetFreeHeapSize() ) );\r
-//             vTaskDelay( pdMS_TO_TICKS( 5000 ) );\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvMQTTConnect( IotMqttConnection_t *xMQTTConnection, const char *pcClientID )\r
-{\r
-IotMqttError_t xResult;\r
-IotNetworkServerInfo_t xMQTTBrokerInfo;\r
-IotMqttNetworkInfo_t xNetworkInfo = IOT_MQTT_NETWORK_INFO_INITIALIZER;\r
-IotMqttConnectInfo_t xConnectInfo = IOT_MQTT_CONNECT_INFO_INITIALIZER;\r
-static char c[ 10 ];\r
-static int id = 0;\r
-\r
-       /******************* Broker information setup. **********************/\r
-\r
-       xMQTTBrokerInfo.pHostName = mqttexampleMQTT_BROKER_ENDPOINT;\r
-       xMQTTBrokerInfo.port = mqttexampleMQTT_BROKER_PORT;\r
-\r
-\r
-       /******************* Network information setup. **********************/\r
-\r
-       /* No connection to the MQTT broker has been established yet and we want to\r
-        * establish a new connection. */\r
-       xNetworkInfo.createNetworkConnection = true;\r
-       xNetworkInfo.u.setup.pNetworkServerInfo = &( xMQTTBrokerInfo );\r
-\r
-       /* This example does not use TLS and therefore pNetworkCredentialInfo must\r
-        * be set to NULL. */\r
-       xNetworkInfo.u.setup.pNetworkCredentialInfo = NULL;\r
-\r
-       /* Use FreeRTOS+TCP network. */\r
-       xNetworkInfo.pNetworkInterface = IOT_NETWORK_INTERFACE_FREERTOS;\r
-\r
-       /* Setup the callback which is called when the MQTT connection is\r
-        * disconnected. The task handle is passed as the callback context which\r
-        * is used by the callback to send a task notification to this task.*/\r
-       xNetworkInfo.disconnectCallback.pCallbackContext = ( void * ) xTaskGetCurrentTaskHandle();\r
-       xNetworkInfo.disconnectCallback.function = prvExample_OnDisconnect;\r
-\r
-\r
-       /****************** MQTT Connection information setup. ********************/\r
-\r
-       /* Set this flag to true if connecting to the AWS IoT MQTT broker. This\r
-        * example does not use TLS and therefore won't work with AWS IoT. */\r
-       xConnectInfo.awsIotMqttMode = false;\r
-\r
-       /* Start with a clean session i.e. direct the MQTT broker to discard any\r
-        * previous session data. Also, establishing a connection with clean session\r
-        * will ensure that the broker does not store any data when this client\r
-        * gets disconnected. */\r
-       xConnectInfo.cleanSession = true;\r
-\r
-       /* Since we are starting with a clean session, there are no previous\r
-        * subscriptions to be restored. */\r
-       xConnectInfo.pPreviousSubscriptions = NULL;\r
-       xConnectInfo.previousSubscriptionCount = 0;\r
-\r
-       /* We do not want to publish Last Will and Testament (LWT) message if the\r
-        * client gets disconnected. */\r
-       xConnectInfo.pWillInfo = NULL;\r
-\r
-       /* Send an MQTT PING request every minute to keep the connection open if\r
-       there is no other MQTT traffic. */\r
-       xConnectInfo.keepAliveSeconds = mqttexampleKEEP_ALIVE_SECONDS;\r
-\r
-       /* The client identifier is used to uniquely identify this MQTT client to\r
-        * the MQTT broker.  In a production device the identifier can be something\r
-        * unique, such as a device serial number. */\r
-       xConnectInfo.pClientIdentifier = pcClientID;\r
-       xConnectInfo.clientIdentifierLength = ( uint16_t ) strlen( pcClientID );\r
-\r
-       /* This example does not use any authentication and therefore username and\r
-        * password fields are not used. */\r
-       xConnectInfo.pUserName = NULL;\r
-       xConnectInfo.userNameLength = 0;\r
-       xConnectInfo.pPassword = NULL;\r
-       xConnectInfo.passwordLength = 0;\r
-\r
-       /* Establish the connection to the MQTT broker - It is a blocking call and\r
-       will return only when connection is complete or a timeout occurs. */\r
-       xResult = IotMqtt_Connect( &( xNetworkInfo ),\r
-                                                          &( xConnectInfo ),\r
-                                                          mqttexampleMQTT_TIMEOUT_MS,\r
-                                                          xMQTTConnection );\r
-       configASSERT( xResult == IOT_MQTT_SUCCESS );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvMQTTSubscribe( IotMqttConnection_t xMQTTConnection, const char * const pcTopicString )\r
-{\r
-IotMqttError_t xResult;\r
-IotMqttSubscription_t xMQTTSubscription;\r
-\r
-       /* Subscribe to the mqttexampleTOPIC topic filter. The task handle is passed\r
-        * as the callback context which is used by the callback to send a task\r
-        * notification to this task.*/\r
-       xMQTTSubscription.qos = IOT_MQTT_QOS_1;\r
-       xMQTTSubscription.pTopicFilter = pcTopicString;\r
-       xMQTTSubscription.topicFilterLength = ( uint16_t ) strlen( pcTopicString );\r
-       xMQTTSubscription.callback.pCallbackContext = ( void * ) xTaskGetCurrentTaskHandle();\r
-       xMQTTSubscription.callback.function = prvExample_OnMessageReceived;\r
-\r
-       /* Use the synchronous API to subscribe - It is a blocking call and only\r
-        * returns when the subscribe operation is complete or a timeout occurs. */\r
-       xResult = IotMqtt_TimedSubscribe( xMQTTConnection,\r
-                                                                         &( xMQTTSubscription ),\r
-                                                                         1, /* We are subscribing to one topic filter. */\r
-                                                                         0, /* flags - currently ignored. */\r
-                                                                         mqttexampleMQTT_TIMEOUT_MS );\r
-       configASSERT( xResult == IOT_MQTT_SUCCESS );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvMQTTPublish( IotMqttConnection_t xMQTTConnection, const char * const pcTopicString )\r
-{\r
-IotMqttError_t xResult;\r
-IotMqttPublishInfo_t xMQTTPublishInfo;\r
-\r
-       /* Publish a message with QoS1 on the mqttexampleTOPIC topic. Since we are\r
-        * subscribed to the same topic, the MQTT broker will send the same message\r
-        * back to us. It is verified in the publish callback. */\r
-       xMQTTPublishInfo.qos = IOT_MQTT_QOS_1;\r
-       xMQTTPublishInfo.retain = false;\r
-       xMQTTPublishInfo.pTopicName = pcTopicString;\r
-       xMQTTPublishInfo.topicNameLength = ( uint16_t ) strlen( pcTopicString );\r
-       xMQTTPublishInfo.pPayload = mqttexampleMESSAGE;\r
-       xMQTTPublishInfo.payloadLength = strlen( mqttexampleMESSAGE );\r
-       xMQTTPublishInfo.retryMs = mqttexamplePUBLISH_RETRY_MS;\r
-       xMQTTPublishInfo.retryLimit = mqttexamplePUBLISH_RETRY_LIMIT;\r
-\r
-       /* Use the synchronous API to publish - It is a blocking call and only\r
-        * returns when the publish operation is complete or a timeout occurs. */\r
-       xResult = IotMqtt_TimedPublish( xMQTTConnection,\r
-                                                                       &( xMQTTPublishInfo ),\r
-                                                                       0, /* flags - currently ignored. */\r
-                                                                       mqttexampleMQTT_TIMEOUT_MS );\r
-       configASSERT( xResult == IOT_MQTT_SUCCESS );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvMQTTUnsubscribe( IotMqttConnection_t xMQTTConnection, const char * const pcTopicString )\r
-{\r
-IotMqttError_t xResult;\r
-IotMqttSubscription_t xMQTTSubscription;\r
-\r
-       /* Unsubscribe from the mqttexampleTOPIC topic filter. */\r
-       xMQTTSubscription.pTopicFilter = pcTopicString;\r
-       xMQTTSubscription.topicFilterLength = ( uint16_t ) strlen( pcTopicString );\r
-       /* The following members of the IotMqttSubscription_t are ignored by the\r
-        * unsubscribe operation. Just initialize them to avoid "use of uninitialized\r
-        * variable" warnings. */\r
-       xMQTTSubscription.qos = IOT_MQTT_QOS_1;\r
-       xMQTTSubscription.callback.pCallbackContext = NULL;\r
-       xMQTTSubscription.callback.function = NULL;\r
-\r
-       /* Use the synchronous API to unsubscribe - It is a blocking call and only\r
-        * returns when the unsubscribe operation is complete or a timeout occurs. */\r
-       xResult = IotMqtt_TimedUnsubscribe( xMQTTConnection,\r
-                                                                               &( xMQTTSubscription ),\r
-                                                                               1, /* We are unsubscribing from one topic filter. */\r
-                                                                               0, /* flags - currently ignored. */\r
-                                                                               mqttexampleMQTT_TIMEOUT_MS );\r
-       configASSERT( xResult == IOT_MQTT_SUCCESS );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvMQTTDisconnect( IotMqttConnection_t xMQTTConnection )\r
-{\r
-       /* Send a MQTT DISCONNECT packet to the MQTT broker to do a graceful\r
-        * disconnect. */\r
-       IotMqtt_Disconnect( xMQTTConnection,\r
-                                               0 /* flags - 0 means a graceful disconnect by sending MQTT DISCONNECT. */\r
-                                               );\r
-}\r
-/*-----------------------------------------------------------*/\r
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/FreeRTOSConfig.h b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/FreeRTOSConfig.h
deleted file mode 100644 (file)
index 29b4aac..0000000
+++ /dev/null
@@ -1,210 +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
-#ifndef FREERTOS_CONFIG_H\r
-#define FREERTOS_CONFIG_H\r
-\r
-/*-----------------------------------------------------------\r
- * Application specific definitions.\r
- *\r
- * These definitions should be adjusted for your particular hardware and\r
- * application requirements.\r
- *\r
- * THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
- * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.\r
- * http://www.freertos.org/a00110.html\r
- *\r
- * The bottom of this file contains some constants specific to running the UDP\r
- * stack in this demo.  Constants specific to FreeRTOS+TCP itself (rather than\r
- * the demo) are contained in FreeRTOSIPConfig.h.\r
- *----------------------------------------------------------*/\r
-#define configUSE_PREEMPTION                                   1\r
-#define configUSE_PORT_OPTIMISED_TASK_SELECTION        1\r
-#define configMAX_PRIORITIES                                   ( 7 )\r
-#define configTICK_RATE_HZ                                             ( 1000 ) /* In this non-real time simulated environment the tick frequency has to be at least a multiple of the Win32 tick frequency, and therefore very slow. */\r
-#define configMINIMAL_STACK_SIZE                               ( ( unsigned short ) 60 ) /* In this simulated case, the stack only has to hold one small structure as the real stack is part of the Win32 thread. */\r
-#define configTOTAL_HEAP_SIZE                                  ( ( size_t ) ( 2048U * 1024U ) )\r
-#define configMAX_TASK_NAME_LEN                                        ( 15 )\r
-#define configUSE_TRACE_FACILITY                               1\r
-#define configUSE_16_BIT_TICKS                                 0\r
-#define configIDLE_SHOULD_YIELD                                        1\r
-#define configUSE_CO_ROUTINES                                  0\r
-#define configUSE_MUTEXES                                              1\r
-#define configUSE_RECURSIVE_MUTEXES                            1\r
-#define configQUEUE_REGISTRY_SIZE                              0\r
-#define configUSE_APPLICATION_TASK_TAG                 0\r
-#define configUSE_COUNTING_SEMAPHORES                  1\r
-#define configUSE_ALTERNATIVE_API                              0\r
-#define configNUM_THREAD_LOCAL_STORAGE_POINTERS        0\r
-#define configENABLE_BACKWARD_COMPATIBILITY            1\r
-#define configSUPPORT_STATIC_ALLOCATION                        1\r
-\r
-/* Hook function related definitions. */\r
-#define configUSE_TICK_HOOK                            0\r
-#define configUSE_IDLE_HOOK                            0\r
-#define configUSE_MALLOC_FAILED_HOOK   0\r
-#define configCHECK_FOR_STACK_OVERFLOW 0 /* Not applicable to the Win32 port. */\r
-\r
-/* Software timer related definitions. */\r
-#define configUSE_TIMERS                               1\r
-#define configTIMER_TASK_PRIORITY              ( configMAX_PRIORITIES - 1 )\r
-#define configTIMER_QUEUE_LENGTH               5\r
-#define configTIMER_TASK_STACK_DEPTH   ( configMINIMAL_STACK_SIZE * 2 )\r
-\r
-/* Event group related definitions. */\r
-#define configUSE_EVENT_GROUPS                 1\r
-\r
-/* Run time stats gathering definitions. */\r
-#define configGENERATE_RUN_TIME_STATS  0\r
-\r
-/* Co-routine definitions. */\r
-#define configUSE_CO_ROUTINES                  0\r
-#define configMAX_CO_ROUTINE_PRIORITIES ( 2 )\r
-\r
-/* Set the following definitions to 1 to include the API function, or zero\r
-to exclude the API function. */\r
-#define INCLUDE_vTaskPrioritySet                               1\r
-#define INCLUDE_uxTaskPriorityGet                              1\r
-#define INCLUDE_vTaskDelete                                            1\r
-#define INCLUDE_vTaskCleanUpResources                  0\r
-#define INCLUDE_vTaskSuspend                                   1\r
-#define INCLUDE_vTaskDelayUntil                                        1\r
-#define INCLUDE_vTaskDelay                                             1\r
-#define INCLUDE_uxTaskGetStackHighWaterMark            1\r
-#define INCLUDE_xTaskGetSchedulerState                 1\r
-#define INCLUDE_xTimerGetTimerTaskHandle               0\r
-#define INCLUDE_xTaskGetIdleTaskHandle                 0\r
-#define INCLUDE_xQueueGetMutexHolder                   1\r
-#define INCLUDE_eTaskGetState                                  1\r
-#define INCLUDE_xEventGroupSetBitsFromISR              1\r
-#define INCLUDE_xTimerPendFunctionCall                 1\r
-#define INCLUDE_pcTaskGetTaskName                              1\r
-\r
-/* This demo makes use of one or more example stats formatting functions.  These\r
-format the raw data provided by the uxTaskGetSystemState() function in to human\r
-readable ASCII form.  See the notes in the implementation of vTaskList() within\r
-FreeRTOS/Source/tasks.c for limitations.  configUSE_STATS_FORMATTING_FUNCTIONS\r
-is set to 2 so the formatting functions are included without the stdio.h being\r
-included in tasks.c.  That is because this project defines its own sprintf()\r
-functions. */\r
-#define configUSE_STATS_FORMATTING_FUNCTIONS   1\r
-\r
-/* Assert call defined for debug builds. */\r
-#ifdef _DEBUG\r
-       extern void vAssertCalled( const char *pcFile, uint32_t ulLine );\r
-       #define configASSERT( x ) if( ( x ) == 0 ) vAssertCalled( __FILE__, __LINE__ )\r
-#endif /* _DEBUG */\r
-\r
-\r
-\r
-/* Application specific definitions follow. **********************************/\r
-\r
-/* Only used when running in the FreeRTOS Windows simulator.  Defines the\r
-priority of the task used to simulate Ethernet interrupts. */\r
-#define configMAC_ISR_SIMULATOR_PRIORITY       ( configMAX_PRIORITIES - 1 )\r
-\r
-/* This demo creates a virtual network connection by accessing the raw Ethernet\r
-or WiFi data to and from a real network connection.  Many computers have more\r
-than one real network port, and configNETWORK_INTERFACE_TO_USE is used to tell\r
-the demo which real port should be used to create the virtual port.  The ports\r
-available are displayed on the console when the application is executed.  For\r
-example, on my development laptop setting configNETWORK_INTERFACE_TO_USE to 4\r
-results in the wired network being used, while setting\r
-configNETWORK_INTERFACE_TO_USE to 2 results in the wireless network being\r
-used. */\r
-#define configNETWORK_INTERFACE_TO_USE 2L\r
-\r
-/* The address of an echo server is only left in this project as it doubles as\r
-the address to which logging is sent should UDP logging be enabled. */\r
-#define configECHO_SERVER_ADDR0        192\r
-#define configECHO_SERVER_ADDR1 168\r
-#define configECHO_SERVER_ADDR2 26\r
-#define configECHO_SERVER_ADDR3 100\r
-\r
-/* Default MAC address configuration.  The demo creates a virtual network\r
-connection that uses this MAC address by accessing the raw Ethernet/WiFi data\r
-to and from a real network connection on the host PC.  See the\r
-configNETWORK_INTERFACE_TO_USE definition above for information on how to\r
-configure the real network connection to use. */\r
-#define configMAC_ADDR0                0x00\r
-#define configMAC_ADDR1                0x11\r
-#define configMAC_ADDR2                0x11\r
-#define configMAC_ADDR3                0x11\r
-#define configMAC_ADDR4                0x11\r
-#define configMAC_ADDR5                0x41\r
-\r
-/* Default IP address configuration.  Used in ipconfigUSE_DNS is set to 0, or\r
-ipconfigUSE_DNS is set to 1 but a DNS server cannot be contacted. */\r
-#define configIP_ADDR0         192\r
-#define configIP_ADDR1         168\r
-#define configIP_ADDR2         1\r
-#define configIP_ADDR3         51\r
-\r
-/* Default gateway IP address configuration.  Used in ipconfigUSE_DNS is set to\r
-0, or ipconfigUSE_DNS is set to 1 but a DNS server cannot be contacted. */\r
-#define configGATEWAY_ADDR0    192\r
-#define configGATEWAY_ADDR1    168\r
-#define configGATEWAY_ADDR2    1\r
-#define configGATEWAY_ADDR3    1\r
-\r
-/* Default DNS server configuration.  OpenDNS addresses are 208.67.222.222 and\r
-208.67.220.220.  Used in ipconfigUSE_DNS is set to 0, or ipconfigUSE_DNS is set\r
-to 1 but a DNS server cannot be contacted.*/\r
-#define configDNS_SERVER_ADDR0         8\r
-#define configDNS_SERVER_ADDR1         8\r
-#define configDNS_SERVER_ADDR2         8\r
-#define configDNS_SERVER_ADDR3         8\r
-\r
-/* Default netmask configuration.  Used in ipconfigUSE_DNS is set to 0, or\r
-ipconfigUSE_DNS is set to 1 but a DNS server cannot be contacted. */\r
-#define configNET_MASK0                255\r
-#define configNET_MASK1                255\r
-#define configNET_MASK2                255\r
-#define configNET_MASK3                0\r
-\r
-/* The UDP port to which print messages are sent. */\r
-#define configPRINT_PORT       ( 15000 )\r
-\r
-#if( defined( _MSC_VER ) && ( _MSC_VER <= 1600 ) && !defined( snprintf ) )\r
-       /* Map to Windows names. */\r
-       #define snprintf        _snprintf\r
-       #define vsnprintf       _vsnprintf\r
-#endif\r
-\r
-/* Visual studio does not have an implementation of strcasecmp(). */\r
-#define strcasecmp _stricmp\r
-#define strncasecmp _strnicmp\r
-#define strcmpi _strcmpi\r
-\r
-/* Prototype for the function used to print out.  In this case it prints to the\r
-console before the network is connected then a UDP port after the network has\r
-connected. */\r
-extern void vLoggingPrintf( const char *pcFormatString, ... );\r
-#define configPRINTF( X )    vLoggingPrintf X\r
-\r
-#endif /* FREERTOS_CONFIG_H */\r
-\r
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/FreeRTOSIPConfig.h b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/FreeRTOSIPConfig.h
deleted file mode 100644 (file)
index 563f0cb..0000000
+++ /dev/null
@@ -1,307 +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
-/*****************************************************************************\r
- *\r
- * See the following URL for configuration information.\r
- * http://www.freertos.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/TCP_IP_Configuration.html\r
- *\r
- *****************************************************************************/\r
-\r
-#ifndef FREERTOS_IP_CONFIG_H\r
-#define FREERTOS_IP_CONFIG_H\r
-\r
-/* Prototype for the function used to print out.  In this case it prints to the\r
-console before the network is connected then a UDP port after the network has\r
-connected. */\r
-extern void vLoggingPrintf( const char *pcFormatString, ... );\r
-\r
-/* Set to 1 to print out debug messages.  If ipconfigHAS_DEBUG_PRINTF is set to\r
-1 then FreeRTOS_debug_printf should be defined to the function used to print\r
-out the debugging messages. */\r
-#define ipconfigHAS_DEBUG_PRINTF       0\r
-#if( ipconfigHAS_DEBUG_PRINTF == 1 )\r
-       #define FreeRTOS_debug_printf(X)        vLoggingPrintf X\r
-#endif\r
-\r
-/* Set to 1 to print out non debugging messages, for example the output of the\r
-FreeRTOS_netstat() command, and ping replies.  If ipconfigHAS_PRINTF is set to 1\r
-then FreeRTOS_printf should be set to the function used to print out the\r
-messages. */\r
-#define ipconfigHAS_PRINTF                     1\r
-#if( ipconfigHAS_PRINTF == 1 )\r
-       #define FreeRTOS_printf(X)                      vLoggingPrintf X\r
-#endif\r
-\r
-/* Define the byte order of the target MCU (the MCU FreeRTOS+TCP is executing\r
-on).  Valid options are pdFREERTOS_BIG_ENDIAN and pdFREERTOS_LITTLE_ENDIAN. */\r
-#define ipconfigBYTE_ORDER pdFREERTOS_LITTLE_ENDIAN\r
-\r
-/* If the network card/driver includes checksum offloading (IP/TCP/UDP checksums)\r
-then set ipconfigDRIVER_INCLUDED_RX_IP_CHECKSUM to 1 to prevent the software\r
-stack repeating the checksum calculations. */\r
-#define ipconfigDRIVER_INCLUDED_RX_IP_CHECKSUM   1\r
-\r
-/* Several API's will block until the result is known, or the action has been\r
-performed, for example FreeRTOS_send() and FreeRTOS_recv().  The timeouts can be\r
-set per socket, using setsockopt().  If not set, the times below will be\r
-used as defaults. */\r
-#define ipconfigSOCK_DEFAULT_RECEIVE_BLOCK_TIME        ( 5000 )\r
-#define        ipconfigSOCK_DEFAULT_SEND_BLOCK_TIME    ( 5000 )\r
-\r
-/* Include support for LLMNR: Link-local Multicast Name Resolution\r
-(non-Microsoft) */\r
-#define ipconfigUSE_LLMNR                                      ( 0 )\r
-\r
-/* Include support for NBNS: NetBIOS Name Service (Microsoft) */\r
-#define ipconfigUSE_NBNS                                       ( 0 )\r
-\r
-/* Include support for DNS caching.  For TCP, having a small DNS cache is very\r
-useful.  When a cache is present, ipconfigDNS_REQUEST_ATTEMPTS can be kept low\r
-and also DNS may use small timeouts.  If a DNS reply comes in after the DNS\r
-socket has been destroyed, the result will be stored into the cache.  The next\r
-call to FreeRTOS_gethostbyname() will return immediately, without even creating\r
-a socket. */\r
-#define ipconfigUSE_DNS_CACHE                          ( 1 )\r
-#define ipconfigDNS_CACHE_NAME_LENGTH          ( 32 )\r
-#define ipconfigDNS_CACHE_ENTRIES                      ( 4 )\r
-#define ipconfigDNS_REQUEST_ATTEMPTS           ( 2 )\r
-\r
-/* The IP stack executes it its own task (although any application task can make\r
-use of its services through the published sockets API). ipconfigUDP_TASK_PRIORITY\r
-sets the priority of the task that executes the IP stack.  The priority is a\r
-standard FreeRTOS task priority so can take any value from 0 (the lowest\r
-priority) to (configMAX_PRIORITIES - 1) (the highest priority).\r
-configMAX_PRIORITIES is a standard FreeRTOS configuration parameter defined in\r
-FreeRTOSConfig.h, not FreeRTOSIPConfig.h. Consideration needs to be given as to\r
-the priority assigned to the task executing the IP stack relative to the\r
-priority assigned to tasks that use the IP stack. */\r
-#define ipconfigIP_TASK_PRIORITY                       ( configMAX_PRIORITIES - 2 )\r
-\r
-/* The size, in words (not bytes), of the stack allocated to the FreeRTOS+TCP\r
-task.  This setting is less important when the FreeRTOS Win32 simulator is used\r
-as the Win32 simulator only stores a fixed amount of information on the task\r
-stack.  FreeRTOS includes optional stack overflow detection, see:\r
-http://www.freertos.org/Stacks-and-stack-overflow-checking.html */\r
-#define ipconfigIP_TASK_STACK_SIZE_WORDS       ( configMINIMAL_STACK_SIZE * 5 )\r
-\r
-/* ipconfigRAND32() is called by the IP stack to generate random numbers for\r
-things such as a DHCP transaction number or initial sequence number.  Random\r
-number generation is performed via this macro to allow applications to use their\r
-own random number generation method.  For example, it might be possible to\r
-generate a random number by sampling noise on an analogue input. */\r
-extern UBaseType_t uxRand();\r
-#define ipconfigRAND32()       uxRand()\r
-\r
-/* If ipconfigUSE_NETWORK_EVENT_HOOK is set to 1 then FreeRTOS+TCP will call the\r
-network event hook at the appropriate times.  If ipconfigUSE_NETWORK_EVENT_HOOK\r
-is not set to 1 then the network event hook will never be called.  See\r
-http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_UDP/API/vApplicationIPNetworkEventHook.shtml\r
-*/\r
-#define ipconfigUSE_NETWORK_EVENT_HOOK 1\r
-\r
-/* Sockets have a send block time attribute.  If FreeRTOS_sendto() is called but\r
-a network buffer cannot be obtained then the calling task is held in the Blocked\r
-state (so other tasks can continue to executed) until either a network buffer\r
-becomes available or the send block time expires.  If the send block time expires\r
-then the send operation is aborted.  The maximum allowable send block time is\r
-capped to the value set by ipconfigMAX_SEND_BLOCK_TIME_TICKS.  Capping the\r
-maximum allowable send block time prevents prevents a deadlock occurring when\r
-all the network buffers are in use and the tasks that process (and subsequently\r
-free) the network buffers are themselves blocked waiting for a network buffer.\r
-ipconfigMAX_SEND_BLOCK_TIME_TICKS is specified in RTOS ticks.  A time in\r
-milliseconds can be converted to a time in ticks by dividing the time in\r
-milliseconds by portTICK_PERIOD_MS. */\r
-#define ipconfigUDP_MAX_SEND_BLOCK_TIME_TICKS ( 5000 / portTICK_PERIOD_MS )\r
-\r
-/* If ipconfigUSE_DHCP is 1 then FreeRTOS+TCP will attempt to retrieve an IP\r
-address, netmask, DNS server address and gateway address from a DHCP server.  If\r
-ipconfigUSE_DHCP is 0 then FreeRTOS+TCP will use a static IP address.  The\r
-stack will revert to using the static IP address even when ipconfigUSE_DHCP is\r
-set to 1 if a valid configuration cannot be obtained from a DHCP server for any\r
-reason.  The static configuration used is that passed into the stack by the\r
-FreeRTOS_IPInit() function call. */\r
-#define ipconfigUSE_DHCP       0\r
-\r
-/* When ipconfigUSE_DHCP is set to 1, DHCP requests will be sent out at\r
-increasing time intervals until either a reply is received from a DHCP server\r
-and accepted, or the interval between transmissions reaches\r
-ipconfigMAXIMUM_DISCOVER_TX_PERIOD.  The IP stack will revert to using the\r
-static IP address passed as a parameter to FreeRTOS_IPInit() if the\r
-re-transmission time interval reaches ipconfigMAXIMUM_DISCOVER_TX_PERIOD without\r
-a DHCP reply being received. */\r
-#define ipconfigMAXIMUM_DISCOVER_TX_PERIOD             ( 120000 / portTICK_PERIOD_MS )\r
-\r
-/* The ARP cache is a table that maps IP addresses to MAC addresses.  The IP\r
-stack can only send a UDP message to a remove IP address if it knowns the MAC\r
-address associated with the IP address, or the MAC address of the router used to\r
-contact the remote IP address.  When a UDP message is received from a remote IP\r
-address the MAC address and IP address are added to the ARP cache.  When a UDP\r
-message is sent to a remote IP address that does not already appear in the ARP\r
-cache then the UDP message is replaced by a ARP message that solicits the\r
-required MAC address information.  ipconfigARP_CACHE_ENTRIES defines the maximum\r
-number of entries that can exist in the ARP table at any one time. */\r
-#define ipconfigARP_CACHE_ENTRIES              6\r
-\r
-/* ARP requests that do not result in an ARP response will be re-transmitted a\r
-maximum of ipconfigMAX_ARP_RETRANSMISSIONS times before the ARP request is\r
-aborted. */\r
-#define ipconfigMAX_ARP_RETRANSMISSIONS ( 5 )\r
-\r
-/* ipconfigMAX_ARP_AGE defines the maximum time between an entry in the ARP\r
-table being created or refreshed and the entry being removed because it is stale.\r
-New ARP requests are sent for ARP cache entries that are nearing their maximum\r
-age.  ipconfigMAX_ARP_AGE is specified in tens of seconds, so a value of 150 is\r
-equal to 1500 seconds (or 25 minutes). */\r
-#define ipconfigMAX_ARP_AGE                    150\r
-\r
-/* Implementing FreeRTOS_inet_addr() necessitates the use of string handling\r
-routines, which are relatively large.  To save code space the full\r
-FreeRTOS_inet_addr() implementation is made optional, and a smaller and faster\r
-alternative called FreeRTOS_inet_addr_quick() is provided.  FreeRTOS_inet_addr()\r
-takes an IP in decimal dot format (for example, "192.168.0.1") as its parameter.\r
-FreeRTOS_inet_addr_quick() takes an IP address as four separate numerical octets\r
-(for example, 192, 168, 0, 1) as its parameters.  If\r
-ipconfigINCLUDE_FULL_INET_ADDR is set to 1 then both FreeRTOS_inet_addr() and\r
-FreeRTOS_indet_addr_quick() are available.  If ipconfigINCLUDE_FULL_INET_ADDR is\r
-not set to 1 then only FreeRTOS_indet_addr_quick() is available. */\r
-#define ipconfigINCLUDE_FULL_INET_ADDR 1\r
-\r
-/* ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS defines the total number of network buffer that\r
-are available to the IP stack.  The total number of network buffers is limited\r
-to ensure the total amount of RAM that can be consumed by the IP stack is capped\r
-to a pre-determinable value. */\r
-#define ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS         60\r
-\r
-/* A FreeRTOS queue is used to send events from application tasks to the IP\r
-stack.  ipconfigEVENT_QUEUE_LENGTH sets the maximum number of events that can\r
-be queued for processing at any one time.  The event queue must be a minimum of\r
-5 greater than the total number of network buffers. */\r
-#define ipconfigEVENT_QUEUE_LENGTH             ( ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS + 5 )\r
-\r
-/* The address of a socket is the combination of its IP address and its port\r
-number.  FreeRTOS_bind() is used to manually allocate a port number to a socket\r
-(to 'bind' the socket to a port), but manual binding is not normally necessary\r
-for client sockets (those sockets that initiate outgoing connections rather than\r
-wait for incoming connections on a known port number).  If\r
-ipconfigALLOW_SOCKET_SEND_WITHOUT_BIND is set to 1 then calling\r
-FreeRTOS_sendto() on a socket that has not yet been bound will result in the IP\r
-stack automatically binding the socket to a port number from the range\r
-socketAUTO_PORT_ALLOCATION_START_NUMBER to 0xffff.  If\r
-ipconfigALLOW_SOCKET_SEND_WITHOUT_BIND is set to 0 then calling FreeRTOS_sendto()\r
-on a socket that has not yet been bound will result in the send operation being\r
-aborted. */\r
-#define ipconfigALLOW_SOCKET_SEND_WITHOUT_BIND 1\r
-\r
-/* Defines the Time To Live (TTL) values used in outgoing UDP packets. */\r
-#define ipconfigUDP_TIME_TO_LIVE               128\r
-#define ipconfigTCP_TIME_TO_LIVE               128 /* also defined in FreeRTOSIPConfigDefaults.h */\r
-\r
-/* USE_TCP: Use TCP and all its features */\r
-#define ipconfigUSE_TCP                                ( 1 )\r
-\r
-/* USE_WIN: Let TCP use windowing mechanism. */\r
-#define ipconfigUSE_TCP_WIN                    ( 1 )\r
-\r
-/* The MTU is the maximum number of bytes the payload of a network frame can\r
-contain.  For normal Ethernet V2 frames the maximum MTU is 1500.  Setting a\r
-lower value can save RAM, depending on the buffer management scheme used.  If\r
-ipconfigCAN_FRAGMENT_OUTGOING_PACKETS is 1 then (ipconfigNETWORK_MTU - 28) must\r
-be divisible by 8. */\r
-#define ipconfigNETWORK_MTU            1200\r
-\r
-/* Set ipconfigUSE_DNS to 1 to include a basic DNS client/resolver.  DNS is used\r
-through the FreeRTOS_gethostbyname() API function. */\r
-#define ipconfigUSE_DNS                        1\r
-\r
-/* If ipconfigREPLY_TO_INCOMING_PINGS is set to 1 then the IP stack will\r
-generate replies to incoming ICMP echo (ping) requests. */\r
-#define ipconfigREPLY_TO_INCOMING_PINGS                                1\r
-\r
-/* If ipconfigSUPPORT_OUTGOING_PINGS is set to 1 then the\r
-FreeRTOS_SendPingRequest() API function is available. */\r
-#define ipconfigSUPPORT_OUTGOING_PINGS                         0\r
-\r
-/* If ipconfigSUPPORT_SELECT_FUNCTION is set to 1 then the FreeRTOS_select()\r
-(and associated) API function is available. */\r
-#define ipconfigSUPPORT_SELECT_FUNCTION                                1\r
-\r
-/* If ipconfigFILTER_OUT_NON_ETHERNET_II_FRAMES is set to 1 then Ethernet frames\r
-that are not in Ethernet II format will be dropped.  This option is included for\r
-potential future IP stack developments. */\r
-#define ipconfigFILTER_OUT_NON_ETHERNET_II_FRAMES  1\r
-\r
-/* If ipconfigETHERNET_DRIVER_FILTERS_FRAME_TYPES is set to 1 then it is the\r
-responsibility of the Ethernet interface to filter out packets that are of no\r
-interest.  If the Ethernet interface does not implement this functionality, then\r
-set ipconfigETHERNET_DRIVER_FILTERS_FRAME_TYPES to 0 to have the IP stack\r
-perform the filtering instead (it is much less efficient for the stack to do it\r
-because the packet will already have been passed into the stack).  If the\r
-Ethernet driver does all the necessary filtering in hardware then software\r
-filtering can be removed by using a value other than 1 or 0. */\r
-#define ipconfigETHERNET_DRIVER_FILTERS_FRAME_TYPES    1\r
-\r
-/* The windows simulator cannot really simulate MAC interrupts, and needs to\r
-block occasionally to allow other tasks to run. */\r
-#define configWINDOWS_MAC_INTERRUPT_SIMULATOR_DELAY ( 20 / portTICK_PERIOD_MS )\r
-\r
-/* Advanced only: in order to access 32-bit fields in the IP packets with\r
-32-bit memory instructions, all packets will be stored 32-bit-aligned, plus 16-bits.\r
-This has to do with the contents of the IP-packets: all 32-bit fields are\r
-32-bit-aligned, plus 16-bit(!) */\r
-#define ipconfigPACKET_FILLER_SIZE 2\r
-\r
-/* Define the size of the pool of TCP window descriptors.  On the average, each\r
-TCP socket will use up to 2 x 6 descriptors, meaning that it can have 2 x 6\r
-outstanding packets (for Rx and Tx).  When using up to 10 TP sockets\r
-simultaneously, one could define TCP_WIN_SEG_COUNT as 120. */\r
-#define ipconfigTCP_WIN_SEG_COUNT              240\r
-\r
-/* Each TCP socket has a circular buffers for Rx and Tx, which have a fixed\r
-maximum size.  Define the size of Rx buffer for TCP sockets. */\r
-#define ipconfigTCP_RX_BUFFER_LENGTH                   ( 1000 )\r
-\r
-/* Define the size of Tx buffer for TCP sockets. */\r
-#define ipconfigTCP_TX_BUFFER_LENGTH                   ( 1000 )\r
-\r
-/* When using call-back handlers, the driver may check if the handler points to\r
-real program memory (RAM or flash) or just has a random non-zero value. */\r
-#define ipconfigIS_VALID_PROG_ADDRESS(x) ( (x) != NULL )\r
-\r
-/* Include support for TCP hang protection.  All sockets in a connecting or\r
-disconnecting stage will timeout after a period of non-activity. */\r
-#define ipconfigTCP_HANG_PROTECTION                    ( 1 )\r
-#define ipconfigTCP_HANG_PROTECTION_TIME       ( 30 )\r
-\r
-/* Include support for TCP keep-alive messages. */\r
-#define ipconfigTCP_KEEP_ALIVE                         ( 1 )\r
-#define ipconfigTCP_KEEP_ALIVE_INTERVAL                ( 20 ) /* in seconds */\r
-\r
-#define portINLINE __inline\r
-\r
-#endif /* FREERTOS_IP_CONFIG_H */\r
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/READ_ME_INSTRUCTIONS.url b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/READ_ME_INSTRUCTIONS.url
deleted file mode 100644 (file)
index 8a5a861..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-[{000214A0-0000-0000-C000-000000000046}]\r
-Prop3=19,11\r
-[InternetShortcut]\r
-IDList=\r
-URL=https://www.freertos.org/mqtt/\r
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WIN32.vcxproj b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WIN32.vcxproj
deleted file mode 100644 (file)
index b922783..0000000
+++ /dev/null
@@ -1,224 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup Label="ProjectConfigurations">\r
-    <ProjectConfiguration Include="Debug|Win32">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|Win32">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-  </ItemGroup>\r
-  <PropertyGroup Label="Globals">\r
-    <ProjectGuid>{C686325E-3261-42F7-AEB1-DDE5280E1CEB}</ProjectGuid>\r
-    <ProjectName>RTOSDemo</ProjectName>\r
-    <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <UseOfMfc>false</UseOfMfc>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v142</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <UseOfMfc>false</UseOfMfc>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v142</PlatformToolset>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
-  <ImportGroup Label="ExtensionSettings">\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props" />\r
-  </ImportGroup>\r
-  <PropertyGroup Label="UserMacros" />\r
-  <PropertyGroup>\r
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\Debug\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\Debug\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\Release\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\Release\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-  </PropertyGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
-    <Midl>\r
-      <TypeLibraryName>.\Debug/WIN32.tlb</TypeLibraryName>\r
-      <HeaderFileName>\r
-      </HeaderFileName>\r
-    </Midl>\r
-    <ClCompile>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>..\..\..\Source\FreeRTOS-Plus-TCP\include;..\..\..\Source\FreeRTOS-Plus-TCP\portable\BufferManagement;..\..\..\Source\FreeRTOS-Plus-TCP\portable\Compiler\MSVC;.\DemoTasks\include;.\WinPCap;..\..\..\..\FreeRTOS\Source\include;..\..\..\..\FreeRTOS\Source\portable\MSVC-MingW;..\..\..\Source\FreeRTOS-IoT-Libraries\c_sdk\standard\common\include\private;..\..\..\Source\FreeRTOS-IoT-Libraries\c_sdk\standard\common\include;..\..\..\Source\FreeRTOS-IoT-Libraries\abstractions\platform\include;..\..\..\Source\FreeRTOS-IoT-Libraries\abstractions\platform\freertos\include;..\..\..\Source\FreeRTOS-IoT-Libraries\c_sdk\standard\mqtt\include;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;WINVER=0x400;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>false</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <PrecompiledHeaderOutputFile>.\Debug/WIN32.pch</PrecompiledHeaderOutputFile>\r
-      <AssemblerListingLocation>.\Debug/</AssemblerListingLocation>\r
-      <ObjectFileName>.\Debug/</ObjectFileName>\r
-      <ProgramDataBaseFileName>.\Debug/</ProgramDataBaseFileName>\r
-      <WarningLevel>Level4</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <DisableLanguageExtensions>false</DisableLanguageExtensions>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <AdditionalOptions>/wd4210 /wd4127 /wd4214 /wd4201 /wd4244  /wd4310 /wd4200 %(AdditionalOptions)</AdditionalOptions>\r
-      <BrowseInformation>true</BrowseInformation>\r
-      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
-      <ExceptionHandling>false</ExceptionHandling>\r
-      <CompileAs>CompileAsC</CompileAs>\r
-    </ClCompile>\r
-    <ResourceCompile>\r
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <Culture>0x0c09</Culture>\r
-    </ResourceCompile>\r
-    <Link>\r
-      <OutputFile>.\Debug/RTOSDemo.exe</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <ProgramDatabaseFile>.\Debug/WIN32.pdb</ProgramDatabaseFile>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <AdditionalDependencies>wpcap.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>.\WinPCap</AdditionalLibraryDirectories>\r
-      <Profile>false</Profile>\r
-      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>\r
-    </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>.\Debug/WIN32.bsc</OutputFile>\r
-    </Bscmake>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
-    <Midl>\r
-      <TypeLibraryName>.\Release/WIN32.tlb</TypeLibraryName>\r
-      <HeaderFileName>\r
-      </HeaderFileName>\r
-    </Midl>\r
-    <ClCompile>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
-      <PreprocessorDefinitions>_WINSOCKAPI_;WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeaderOutputFile>.\Release/WIN32.pch</PrecompiledHeaderOutputFile>\r
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>\r
-      <ObjectFileName>.\Release/</ObjectFileName>\r
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <AdditionalIncludeDirectories>..\Common\Utils;..\Common\ethernet\lwip-1.4.0\ports\win32\WinPCap;..\Common\ethernet\lwip-1.4.0\src\include\ipv4;..\Common\ethernet\lwip-1.4.0\src\include;..\..\..\Source\include;..\..\..\Source\portable\MSVC-MingW;..\Common\ethernet\lwip-1.4.0\ports\win32\include;..\Common\Include;.\lwIP_Apps;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-    </ClCompile>\r
-    <ResourceCompile>\r
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <Culture>0x0c09</Culture>\r
-    </ResourceCompile>\r
-    <Link>\r
-      <OutputFile>.\Release/RTOSDemo.exe</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <ProgramDatabaseFile>.\Release/WIN32.pdb</ProgramDatabaseFile>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <AdditionalLibraryDirectories>..\Common\ethernet\lwip-1.4.0\ports\win32\WinPCap</AdditionalLibraryDirectories>\r
-      <AdditionalDependencies>wpcap.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-    </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>.\Release/WIN32.bsc</OutputFile>\r
-    </Bscmake>\r
-  </ItemDefinitionGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\..\FreeRTOS\Source\event_groups.c" />\r
-    <ClCompile Include="..\..\..\..\FreeRTOS\Source\list.c" />\r
-    <ClCompile Include="..\..\..\..\FreeRTOS\Source\portable\MemMang\heap_4.c" />\r
-    <ClCompile Include="..\..\..\..\FreeRTOS\Source\portable\MSVC-MingW\port.c" />\r
-    <ClCompile Include="..\..\..\..\FreeRTOS\Source\queue.c" />\r
-    <ClCompile Include="..\..\..\..\FreeRTOS\Source\tasks.c" />\r
-    <ClCompile Include="..\..\..\..\FreeRTOS\Source\timers.c" />\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-IoT-Libraries\abstractions\platform\freertos\iot_clock_freertos.c" />\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-IoT-Libraries\abstractions\platform\freertos\iot_network_freertos.c" />\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-IoT-Libraries\abstractions\platform\freertos\iot_threads_freertos.c" />\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-IoT-Libraries\c_sdk\standard\common\logging\iot_logging.c" />\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-IoT-Libraries\c_sdk\standard\common\taskpool\iot_taskpool.c" />\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-IoT-Libraries\c_sdk\standard\mqtt\src\iot_mqtt_api.c" />\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-IoT-Libraries\c_sdk\standard\mqtt\src\iot_mqtt_network.c" />\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-IoT-Libraries\c_sdk\standard\mqtt\src\iot_mqtt_operation.c" />\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-IoT-Libraries\c_sdk\standard\mqtt\src\iot_mqtt_serialize.c" />\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-IoT-Libraries\c_sdk\standard\mqtt\src\iot_mqtt_subscription.c" />\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-IoT-Libraries\c_sdk\standard\mqtt\src\iot_mqtt_validate.c" />\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-Plus-TCP\FreeRTOS_ARP.c" />\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-Plus-TCP\FreeRTOS_DHCP.c" />\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-Plus-TCP\FreeRTOS_DNS.c" />\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-Plus-TCP\FreeRTOS_IP.c" />\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-Plus-TCP\FreeRTOS_Sockets.c" />\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-Plus-TCP\FreeRTOS_Stream_Buffer.c" />\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-Plus-TCP\FreeRTOS_TCP_IP.c" />\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-Plus-TCP\FreeRTOS_TCP_WIN.c" />\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-Plus-TCP\FreeRTOS_UDP_IP.c" />\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-Plus-TCP\portable\BufferManagement\BufferAllocation_2.c" />\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-Plus-TCP\portable\NetworkInterface\WinPCap\NetworkInterface.c" />\r
-    <ClCompile Include="DemoTasks\SimpleMQTTExamples.c" />\r
-    <ClCompile Include="demo_logging.c" />\r
-    <ClCompile Include="main.c">\r
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-    </ClCompile>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\..\FreeRTOS\Source\include\event_groups.h" />\r
-    <ClInclude Include="..\..\..\..\FreeRTOS\Source\include\FreeRTOS.h" />\r
-    <ClInclude Include="..\..\..\..\FreeRTOS\Source\include\portable.h" />\r
-    <ClInclude Include="..\..\..\..\FreeRTOS\Source\include\projdefs.h" />\r
-    <ClInclude Include="..\..\..\..\FreeRTOS\Source\include\queue.h" />\r
-    <ClInclude Include="..\..\..\..\FreeRTOS\Source\include\semphr.h" />\r
-    <ClInclude Include="..\..\..\..\FreeRTOS\Source\include\task.h" />\r
-    <ClInclude Include="..\..\..\..\FreeRTOS\Source\include\timers.h" />\r
-    <ClInclude Include="..\..\..\..\FreeRTOS\Source\portable\MSVC-MingW\portmacro.h" />\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-IoT-Libraries\abstractions\platform\freertos\include\platform\iot_platform_types_freertos.h" />\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-IoT-Libraries\abstractions\platform\include\platform\iot_clock.h" />\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-IoT-Libraries\abstractions\platform\include\platform\iot_metrics.h" />\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-IoT-Libraries\abstractions\platform\include\platform\iot_network.h" />\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-IoT-Libraries\abstractions\platform\include\platform\iot_threads.h" />\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-IoT-Libraries\abstractions\platform\include\types\iot_platform_types.h" />\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-IoT-Libraries\c_sdk\standard\common\include\iot_taskpool.h" />\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-IoT-Libraries\c_sdk\standard\common\include\private\iot_error.h" />\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-IoT-Libraries\c_sdk\standard\common\include\private\iot_logging.h" />\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-IoT-Libraries\c_sdk\standard\common\include\private\iot_static_memory.h" />\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-IoT-Libraries\c_sdk\standard\common\include\private\iot_taskpool_internal.h" />\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-IoT-Libraries\c_sdk\standard\common\include\types\iot_taskpool_types.h" />\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-IoT-Libraries\c_sdk\standard\mqtt\include\iot_mqtt.h" />\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-IoT-Libraries\c_sdk\standard\mqtt\include\types\iot_mqtt_types.h" />\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-Plus-TCP\include\FreeRTOSIPConfigDefaults.h" />\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-Plus-TCP\include\FreeRTOS_ARP.h" />\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-Plus-TCP\include\FreeRTOS_DHCP.h" />\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-Plus-TCP\include\FreeRTOS_DNS.h" />\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-Plus-TCP\include\FreeRTOS_IP.h" />\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-Plus-TCP\include\FreeRTOS_IP_Private.h" />\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-Plus-TCP\include\FreeRTOS_Sockets.h" />\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-Plus-TCP\include\FreeRTOS_Stream_Buffer.h" />\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-Plus-TCP\include\FreeRTOS_TCP_IP.h" />\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-Plus-TCP\include\FreeRTOS_TCP_WIN.h" />\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-Plus-TCP\include\FreeRTOS_UDP_IP.h" />\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-Plus-TCP\include\IPTraceMacroDefaults.h" />\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-Plus-TCP\include\NetworkBufferManagement.h" />\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-Plus-TCP\include\NetworkInterface.h" />\r
-    <ClInclude Include="FreeRTOSConfig.h" />\r
-    <ClInclude Include="FreeRTOSIPConfig.h" />\r
-    <ClInclude Include="iot_config.h" />\r
-    <ClInclude Include="iot_config_common.h" />\r
-  </ItemGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
-  <ImportGroup Label="ExtensionTargets">\r
-  </ImportGroup>\r
-</Project>
\ No newline at end of file
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WIN32.vcxproj.filters b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WIN32.vcxproj.filters
deleted file mode 100644 (file)
index 98cdff0..0000000
+++ /dev/null
@@ -1,308 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup>\r
-    <Filter Include="Resource Files">\r
-      <UniqueIdentifier>{38712199-cebf-4124-bf15-398f7c3419ea}</UniqueIdentifier>\r
-      <Extensions>ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe</Extensions>\r
-    </Filter>\r
-    <Filter Include="FreeRTOS">\r
-      <UniqueIdentifier>{af3445a1-4908-4170-89ed-39345d90d30c}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="FreeRTOS\Source">\r
-      <UniqueIdentifier>{f32be356-4763-4cae-9020-974a2638cb08}</UniqueIdentifier>\r
-      <Extensions>*.c</Extensions>\r
-    </Filter>\r
-    <Filter Include="FreeRTOS\Source\Portable">\r
-      <UniqueIdentifier>{88f409e6-d396-4ac5-94bd-7a99c914be46}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="FreeRTOS+">\r
-      <UniqueIdentifier>{e5ad4ec7-23dc-4295-8add-2acaee488f5a}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="FreeRTOS\Source\include">\r
-      <UniqueIdentifier>{d2dcd641-8d91-492b-852f-5563ffadaec6}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="FreeRTOS+\FreeRTOS+TCP">\r
-      <UniqueIdentifier>{8672fa26-b119-481f-8b8d-086419c01a3e}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="FreeRTOS+\FreeRTOS+TCP\portable">\r
-      <UniqueIdentifier>{4570be11-ec96-4b55-ac58-24b50ada980a}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="FreeRTOS+\FreeRTOS+TCP\include">\r
-      <UniqueIdentifier>{5d93ed51-023a-41ad-9243-8d230165d34b}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="DemoTasks">\r
-      <UniqueIdentifier>{b71e974a-9f28-4815-972b-d930ba8a34d0}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="FreeRTOS+\FreeRTOS IoT Libraries">\r
-      <UniqueIdentifier>{60717407-397f-4ea5-8492-3314acdd25f0}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="FreeRTOS+\FreeRTOS IoT Libraries\standard">\r
-      <UniqueIdentifier>{8a90222f-d723-4b4e-8e6e-c57afaf7fa92}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="FreeRTOS+\FreeRTOS IoT Libraries\standard\common">\r
-      <UniqueIdentifier>{7c995f05-2a10-4771-ad77-18a755876e46}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="FreeRTOS+\FreeRTOS IoT Libraries\standard\common\task_pool">\r
-      <UniqueIdentifier>{e07288b6-a8e7-416a-947d-7f0260673dcc}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="FreeRTOS+\FreeRTOS IoT Libraries\standard\common\include">\r
-      <UniqueIdentifier>{9a636cc3-ebc6-48c5-8c18-c72494686e81}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="FreeRTOS+\FreeRTOS IoT Libraries\standard\common\include\private">\r
-      <UniqueIdentifier>{fe53a296-12ec-4819-bf2b-fd9dca2c6e96}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="FreeRTOS+\FreeRTOS IoT Libraries\standard\common\include\types">\r
-      <UniqueIdentifier>{29376c48-bc8b-4624-ad59-16807874c9f2}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="FreeRTOS+\FreeRTOS IoT Libraries\abstractions">\r
-      <UniqueIdentifier>{91ef4008-de51-4b41-ba5e-bf24d8cda378}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="FreeRTOS+\FreeRTOS IoT Libraries\abstractions\platform">\r
-      <UniqueIdentifier>{ade43c6c-04c5-4897-abdb-91af2df04e5d}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="FreeRTOS+\FreeRTOS IoT Libraries\abstractions\platform\freertos">\r
-      <UniqueIdentifier>{08a4e35c-19ca-4b1e-af24-bac368c2bf7b}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="FreeRTOS+\FreeRTOS IoT Libraries\abstractions\platform\include">\r
-      <UniqueIdentifier>{1fc5fc25-c18b-45a2-bad3-0c07795db1e9}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="FreeRTOS+\FreeRTOS IoT Libraries\abstractions\platform\include\platform">\r
-      <UniqueIdentifier>{f3a69e5b-1462-4e19-8651-274e86c252b0}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="FreeRTOS+\FreeRTOS IoT Libraries\abstractions\platform\include\types">\r
-      <UniqueIdentifier>{9a849d9e-91e5-4035-ab4c-70a986c6aed1}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="FreeRTOS+\FreeRTOS IoT Libraries\abstractions\platform\freertos\include">\r
-      <UniqueIdentifier>{1e324500-91b4-4c76-b699-59ba75691760}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="FreeRTOS+\FreeRTOS IoT Libraries\abstractions\platform\freertos\include\platform">\r
-      <UniqueIdentifier>{bdcbc1ec-99b8-4c72-9075-49035c115488}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="FreeRTOS+\FreeRTOS IoT Libraries\standard\mqtt">\r
-      <UniqueIdentifier>{2d17d5e6-ed70-4e42-9693-f7a63baf4948}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="FreeRTOS+\FreeRTOS IoT Libraries\standard\mqtt\src">\r
-      <UniqueIdentifier>{7158b0be-01e7-42d1-8d3f-c75118a596a2}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="FreeRTOS+\FreeRTOS IoT Libraries\standard\mqtt\include">\r
-      <UniqueIdentifier>{6ad56e6d-c330-4830-8f4b-c75b05dfa866}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="FreeRTOS+\FreeRTOS IoT Libraries\standard\mqtt\include\types">\r
-      <UniqueIdentifier>{1d80b387-5a86-4744-a4cc-930033a52e4b}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="FreeRTOS+\FreeRTOS IoT Libraries\standard\common\logging">\r
-      <UniqueIdentifier>{1943ad1a-a367-4ef5-ab65-1313801e6327}</UniqueIdentifier>\r
-    </Filter>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\..\FreeRTOS\Source\portable\MSVC-MingW\port.c">\r
-      <Filter>FreeRTOS\Source\Portable</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\..\FreeRTOS\Source\timers.c">\r
-      <Filter>FreeRTOS\Source</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\..\FreeRTOS\Source\list.c">\r
-      <Filter>FreeRTOS\Source</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\..\FreeRTOS\Source\queue.c">\r
-      <Filter>FreeRTOS\Source</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\..\FreeRTOS\Source\tasks.c">\r
-      <Filter>FreeRTOS\Source</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-Plus-TCP\FreeRTOS_UDP_IP.c">\r
-      <Filter>FreeRTOS+\FreeRTOS+TCP</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-Plus-TCP\FreeRTOS_DHCP.c">\r
-      <Filter>FreeRTOS+\FreeRTOS+TCP</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-Plus-TCP\FreeRTOS_DNS.c">\r
-      <Filter>FreeRTOS+\FreeRTOS+TCP</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-Plus-TCP\FreeRTOS_Sockets.c">\r
-      <Filter>FreeRTOS+\FreeRTOS+TCP</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-Plus-TCP\portable\BufferManagement\BufferAllocation_2.c">\r
-      <Filter>FreeRTOS+\FreeRTOS+TCP\portable</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-Plus-TCP\portable\NetworkInterface\WinPCap\NetworkInterface.c">\r
-      <Filter>FreeRTOS+\FreeRTOS+TCP\portable</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-Plus-TCP\FreeRTOS_ARP.c">\r
-      <Filter>FreeRTOS+\FreeRTOS+TCP</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-Plus-TCP\FreeRTOS_IP.c">\r
-      <Filter>FreeRTOS+\FreeRTOS+TCP</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-Plus-TCP\FreeRTOS_TCP_IP.c">\r
-      <Filter>FreeRTOS+\FreeRTOS+TCP</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-Plus-TCP\FreeRTOS_TCP_WIN.c">\r
-      <Filter>FreeRTOS+\FreeRTOS+TCP</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\..\FreeRTOS\Source\event_groups.c">\r
-      <Filter>FreeRTOS\Source</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\..\FreeRTOS\Source\portable\MemMang\heap_4.c">\r
-      <Filter>FreeRTOS\Source\Portable</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="main.c" />\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-Plus-TCP\FreeRTOS_Stream_Buffer.c">\r
-      <Filter>FreeRTOS+\FreeRTOS+TCP</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="demo_logging.c" />\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-IoT-Libraries\c_sdk\standard\common\taskpool\iot_taskpool.c">\r
-      <Filter>FreeRTOS+\FreeRTOS IoT Libraries\standard\common\task_pool</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-IoT-Libraries\c_sdk\standard\mqtt\src\iot_mqtt_api.c">\r
-      <Filter>FreeRTOS+\FreeRTOS IoT Libraries\standard\mqtt\src</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-IoT-Libraries\c_sdk\standard\mqtt\src\iot_mqtt_operation.c">\r
-      <Filter>FreeRTOS+\FreeRTOS IoT Libraries\standard\mqtt\src</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-IoT-Libraries\c_sdk\standard\mqtt\src\iot_mqtt_serialize.c">\r
-      <Filter>FreeRTOS+\FreeRTOS IoT Libraries\standard\mqtt\src</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-IoT-Libraries\c_sdk\standard\common\logging\iot_logging.c">\r
-      <Filter>FreeRTOS+\FreeRTOS IoT Libraries\standard\common\logging</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-IoT-Libraries\c_sdk\standard\mqtt\src\iot_mqtt_network.c">\r
-      <Filter>FreeRTOS+\FreeRTOS IoT Libraries\standard\mqtt\src</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-IoT-Libraries\c_sdk\standard\mqtt\src\iot_mqtt_subscription.c">\r
-      <Filter>FreeRTOS+\FreeRTOS IoT Libraries\standard\mqtt\src</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-IoT-Libraries\c_sdk\standard\mqtt\src\iot_mqtt_validate.c">\r
-      <Filter>FreeRTOS+\FreeRTOS IoT Libraries\standard\mqtt\src</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-IoT-Libraries\abstractions\platform\freertos\iot_clock_freertos.c">\r
-      <Filter>FreeRTOS+\FreeRTOS IoT Libraries\abstractions\platform\freertos</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-IoT-Libraries\abstractions\platform\freertos\iot_threads_freertos.c">\r
-      <Filter>FreeRTOS+\FreeRTOS IoT Libraries\abstractions\platform\freertos</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="DemoTasks\SimpleMQTTExamples.c">\r
-      <Filter>DemoTasks</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-IoT-Libraries\abstractions\platform\freertos\iot_network_freertos.c">\r
-      <Filter>FreeRTOS+\FreeRTOS IoT Libraries\abstractions\platform\freertos</Filter>\r
-    </ClCompile>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-Plus-TCP\include\NetworkInterface.h">\r
-      <Filter>FreeRTOS+\FreeRTOS+TCP\include</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-Plus-TCP\include\FreeRTOS_DNS.h">\r
-      <Filter>FreeRTOS+\FreeRTOS+TCP\include</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-Plus-TCP\include\FreeRTOS_Sockets.h">\r
-      <Filter>FreeRTOS+\FreeRTOS+TCP\include</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-Plus-TCP\include\FreeRTOS_UDP_IP.h">\r
-      <Filter>FreeRTOS+\FreeRTOS+TCP\include</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\..\FreeRTOS\Source\include\timers.h">\r
-      <Filter>FreeRTOS\Source\include</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\..\FreeRTOS\Source\include\event_groups.h">\r
-      <Filter>FreeRTOS\Source\include</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\..\FreeRTOS\Source\include\FreeRTOS.h">\r
-      <Filter>FreeRTOS\Source\include</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\..\FreeRTOS\Source\include\queue.h">\r
-      <Filter>FreeRTOS\Source\include</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\..\FreeRTOS\Source\include\semphr.h">\r
-      <Filter>FreeRTOS\Source\include</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\..\FreeRTOS\Source\include\task.h">\r
-      <Filter>FreeRTOS\Source\include</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\..\FreeRTOS\Source\portable\MSVC-MingW\portmacro.h">\r
-      <Filter>FreeRTOS\Source\include</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-Plus-TCP\include\FreeRTOS_IP_Private.h">\r
-      <Filter>FreeRTOS+\FreeRTOS+TCP\include</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-Plus-TCP\include\NetworkBufferManagement.h">\r
-      <Filter>FreeRTOS+\FreeRTOS+TCP\include</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-Plus-TCP\include\FreeRTOS_ARP.h">\r
-      <Filter>FreeRTOS+\FreeRTOS+TCP\include</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-Plus-TCP\include\FreeRTOS_DHCP.h">\r
-      <Filter>FreeRTOS+\FreeRTOS+TCP\include</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-Plus-TCP\include\FreeRTOS_IP.h">\r
-      <Filter>FreeRTOS+\FreeRTOS+TCP\include</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-Plus-TCP\include\FreeRTOS_TCP_IP.h">\r
-      <Filter>FreeRTOS+\FreeRTOS+TCP\include</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-Plus-TCP\include\FreeRTOS_TCP_WIN.h">\r
-      <Filter>FreeRTOS+\FreeRTOS+TCP\include</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-Plus-TCP\include\FreeRTOSIPConfigDefaults.h">\r
-      <Filter>FreeRTOS+\FreeRTOS+TCP\include</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-Plus-TCP\include\IPTraceMacroDefaults.h">\r
-      <Filter>FreeRTOS+\FreeRTOS+TCP\include</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="FreeRTOSConfig.h" />\r
-    <ClInclude Include="FreeRTOSIPConfig.h" />\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-Plus-TCP\include\FreeRTOS_Stream_Buffer.h">\r
-      <Filter>FreeRTOS+\FreeRTOS+TCP\include</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\..\FreeRTOS\Source\include\portable.h">\r
-      <Filter>FreeRTOS\Source\include</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\..\FreeRTOS\Source\include\projdefs.h">\r
-      <Filter>FreeRTOS\Source\include</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-IoT-Libraries\c_sdk\standard\common\include\iot_taskpool.h">\r
-      <Filter>FreeRTOS+\FreeRTOS IoT Libraries\standard\common\include</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-IoT-Libraries\c_sdk\standard\common\include\types\iot_taskpool_types.h">\r
-      <Filter>FreeRTOS+\FreeRTOS IoT Libraries\standard\common\include\types</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-IoT-Libraries\c_sdk\standard\common\include\private\iot_error.h">\r
-      <Filter>FreeRTOS+\FreeRTOS IoT Libraries\standard\common\include\private</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-IoT-Libraries\c_sdk\standard\common\include\private\iot_logging.h">\r
-      <Filter>FreeRTOS+\FreeRTOS IoT Libraries\standard\common\include\private</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-IoT-Libraries\c_sdk\standard\common\include\private\iot_static_memory.h">\r
-      <Filter>FreeRTOS+\FreeRTOS IoT Libraries\standard\common\include\private</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-IoT-Libraries\c_sdk\standard\common\include\private\iot_taskpool_internal.h">\r
-      <Filter>FreeRTOS+\FreeRTOS IoT Libraries\standard\common\include\private</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="iot_config.h" />\r
-    <ClInclude Include="iot_config_common.h" />\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-IoT-Libraries\abstractions\platform\include\types\iot_platform_types.h">\r
-      <Filter>FreeRTOS+\FreeRTOS IoT Libraries\abstractions\platform\include\types</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-IoT-Libraries\c_sdk\standard\mqtt\include\iot_mqtt.h">\r
-      <Filter>FreeRTOS+\FreeRTOS IoT Libraries\standard\mqtt\include</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-IoT-Libraries\c_sdk\standard\mqtt\include\types\iot_mqtt_types.h">\r
-      <Filter>FreeRTOS+\FreeRTOS IoT Libraries\standard\mqtt\include\types</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-IoT-Libraries\abstractions\platform\freertos\include\platform\iot_platform_types_freertos.h">\r
-      <Filter>FreeRTOS+\FreeRTOS IoT Libraries\abstractions\platform\freertos\include\platform</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-IoT-Libraries\abstractions\platform\include\platform\iot_clock.h">\r
-      <Filter>FreeRTOS+\FreeRTOS IoT Libraries\abstractions\platform\include\platform</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-IoT-Libraries\abstractions\platform\include\platform\iot_metrics.h">\r
-      <Filter>FreeRTOS+\FreeRTOS IoT Libraries\abstractions\platform\include\platform</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-IoT-Libraries\abstractions\platform\include\platform\iot_network.h">\r
-      <Filter>FreeRTOS+\FreeRTOS IoT Libraries\abstractions\platform\include\platform</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-IoT-Libraries\abstractions\platform\include\platform\iot_threads.h">\r
-      <Filter>FreeRTOS+\FreeRTOS IoT Libraries\abstractions\platform\include\platform</Filter>\r
-    </ClInclude>\r
-  </ItemGroup>\r
-</Project>
\ No newline at end of file
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WinPCap/Packet32.h b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WinPCap/Packet32.h
deleted file mode 100644 (file)
index 1e0eacd..0000000
+++ /dev/null
@@ -1,359 +0,0 @@
-/*\r
- * Copyright (c) 1999 - 2005 NetGroup, Politecnico di Torino (Italy)\r
- * Copyright (c) 2005 - 2007 CACE Technologies, Davis (California)\r
- * All rights reserved.\r
- *\r
- * Redistribution and use in source and binary forms, with or without\r
- * modification, are permitted provided that the following conditions\r
- * are met:\r
- *\r
- * 1. Redistributions of source code must retain the above copyright\r
- * notice, this list of conditions and the following disclaimer.\r
- * 2. Redistributions in binary form must reproduce the above copyright\r
- * notice, this list of conditions and the following disclaimer in the\r
- * documentation and/or other materials provided with the distribution.\r
- * 3. Neither the name of the Politecnico di Torino, CACE Technologies \r
- * nor the names of its contributors may be used to endorse or promote \r
- * products derived from this software without specific prior written \r
- * permission.\r
- *\r
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
- *\r
- */\r
-\r
-/** @ingroup packetapi\r
- *  @{ \r
- */\r
-\r
-/** @defgroup packet32h Packet.dll definitions and data structures\r
- *  Packet32.h contains the data structures and the definitions used by packet.dll.\r
- *  The file is used both by the Win9x and the WinNTx versions of packet.dll, and can be included\r
- *  by the applications that use the functions of this library\r
- *  @{\r
- */\r
-\r
-#ifndef __PACKET32\r
-#define __PACKET32\r
-\r
-#include <winsock2.h>\r
-\r
-#ifdef HAVE_AIRPCAP_API\r
-#include <airpcap.h>\r
-#else\r
-#if !defined(AIRPCAP_HANDLE__EAE405F5_0171_9592_B3C2_C19EC426AD34__DEFINED_)\r
-#define AIRPCAP_HANDLE__EAE405F5_0171_9592_B3C2_C19EC426AD34__DEFINED_\r
-typedef struct _AirpcapHandle *PAirpcapHandle;\r
-#endif /* AIRPCAP_HANDLE__EAE405F5_0171_9592_B3C2_C19EC426AD34__DEFINED_ */\r
-#endif /* HAVE_AIRPCAP_API */\r
-\r
-#ifdef HAVE_DAG_API\r
-#include <dagc.h>\r
-#endif /* HAVE_DAG_API */\r
-\r
-// Working modes\r
-#define PACKET_MODE_CAPT 0x0 ///< Capture mode\r
-#define PACKET_MODE_STAT 0x1 ///< Statistical mode\r
-#define PACKET_MODE_MON 0x2 ///< Monitoring mode\r
-#define PACKET_MODE_DUMP 0x10 ///< Dump mode\r
-#define PACKET_MODE_STAT_DUMP MODE_DUMP | MODE_STAT ///< Statistical dump Mode\r
-\r
-\r
-/// Alignment macro. Defines the alignment size.\r
-#define Packet_ALIGNMENT sizeof(int)\r
-/// Alignment macro. Rounds up to the next even multiple of Packet_ALIGNMENT. \r
-#define Packet_WORDALIGN(x) (((x)+(Packet_ALIGNMENT-1))&~(Packet_ALIGNMENT-1))\r
-\r
-#define NdisMediumNull -1              ///< Custom linktype: NDIS doesn't provide an equivalent\r
-#define NdisMediumCHDLC        -2              ///< Custom linktype: NDIS doesn't provide an equivalent\r
-#define NdisMediumPPPSerial    -3      ///< Custom linktype: NDIS doesn't provide an equivalent\r
-#define NdisMediumBare80211    -4      ///< Custom linktype: NDIS doesn't provide an equivalent\r
-#define NdisMediumRadio80211   -5      ///< Custom linktype: NDIS doesn't provide an equivalent\r
-#define NdisMediumPpi          -6      ///< Custom linktype: NDIS doesn't provide an equivalent\r
-\r
-// Loopback behaviour definitions\r
-#define NPF_DISABLE_LOOPBACK   1       ///< Drop the packets sent by the NPF driver\r
-#define NPF_ENABLE_LOOPBACK            2       ///< Capture the packets sent by the NPF driver\r
-\r
-/*!\r
-  \brief Network type structure.\r
-\r
-  This structure is used by the PacketGetNetType() function to return information on the current adapter's type and speed.\r
-*/\r
-typedef struct NetType\r
-{\r
-       UINT LinkType;  ///< The MAC of the current network adapter (see function PacketGetNetType() for more information)\r
-       ULONGLONG LinkSpeed;    ///< The speed of the network in bits per second\r
-}NetType;\r
-\r
-\r
-//some definitions stolen from libpcap\r
-\r
-#ifndef BPF_MAJOR_VERSION\r
-\r
-/*!\r
-  \brief A BPF pseudo-assembly program.\r
-\r
-  The program will be injected in the kernel by the PacketSetBPF() function and applied to every incoming packet. \r
-*/\r
-struct bpf_program \r
-{\r
-       UINT bf_len;                            ///< Indicates the number of instructions of the program, i.e. the number of struct bpf_insn that will follow.\r
-       struct bpf_insn *bf_insns;      ///< A pointer to the first instruction of the program.\r
-};\r
-\r
-/*!\r
-  \brief A single BPF pseudo-instruction.\r
-\r
-  bpf_insn contains a single instruction for the BPF register-machine. It is used to send a filter program to the driver.\r
-*/\r
-struct bpf_insn \r
-{\r
-       USHORT  code;           ///< Instruction type and addressing mode.\r
-       UCHAR   jt;                     ///< Jump if true\r
-       UCHAR   jf;                     ///< Jump if false\r
-       int k;                          ///< Generic field used for various purposes.\r
-};\r
-\r
-/*!\r
-  \brief Structure that contains a couple of statistics values on the current capture.\r
-\r
-  It is used by packet.dll to return statistics about a capture session.\r
-*/\r
-struct bpf_stat \r
-{\r
-       UINT bs_recv;           ///< Number of packets that the driver received from the network adapter \r
-                                               ///< from the beginning of the current capture. This value includes the packets \r
-                                               ///< lost by the driver.\r
-       UINT bs_drop;           ///< number of packets that the driver lost from the beginning of a capture. \r
-                                               ///< Basically, a packet is lost when the the buffer of the driver is full. \r
-                                               ///< In this situation the packet cannot be stored and the driver rejects it.\r
-       UINT ps_ifdrop;         ///< drops by interface. XXX not yet supported\r
-       UINT bs_capt;           ///< number of packets that pass the filter, find place in the kernel buffer and\r
-                                               ///< thus reach the application.\r
-};\r
-\r
-/*!\r
-  \brief Packet header.\r
-\r
-  This structure defines the header associated with every packet delivered to the application.\r
-*/\r
-struct bpf_hdr \r
-{\r
-       struct timeval  bh_tstamp;      ///< The timestamp associated with the captured packet. \r
-                                                               ///< It is stored in a TimeVal structure.\r
-       UINT    bh_caplen;                      ///< Length of captured portion. The captured portion <b>can be different</b>\r
-                                                               ///< from the original packet, because it is possible (with a proper filter)\r
-                                                               ///< to instruct the driver to capture only a portion of the packets.\r
-       UINT    bh_datalen;                     ///< Original length of packet\r
-       USHORT          bh_hdrlen;              ///< Length of bpf header (this struct plus alignment padding). In some cases,\r
-                                                               ///< a padding could be added between the end of this structure and the packet\r
-                                                               ///< data for performance reasons. This filed can be used to retrieve the actual data \r
-                                                               ///< of the packet.\r
-};\r
-\r
-/*!\r
-  \brief Dump packet header.\r
-\r
-  This structure defines the header associated with the packets in a buffer to be used with PacketSendPackets().\r
-  It is simpler than the bpf_hdr, because it corresponds to the header associated by WinPcap and libpcap to a\r
-  packet in a dump file. This makes straightforward sending WinPcap dump files to the network.\r
-*/\r
-struct dump_bpf_hdr{\r
-    struct timeval     ts;                     ///< Time stamp of the packet\r
-    UINT                       caplen;         ///< Length of captured portion. The captured portion can smaller than the \r
-                                                               ///< the original packet, because it is possible (with a proper filter) to \r
-                                                               ///< instruct the driver to capture only a portion of the packets. \r
-    UINT                       len;            ///< Length of the original packet (off wire).\r
-};\r
-\r
-\r
-#endif\r
-\r
-struct bpf_stat;\r
-\r
-#define        DOSNAMEPREFIX   TEXT("Packet_") ///< Prefix added to the adapters device names to create the WinPcap devices\r
-#define        MAX_LINK_NAME_LENGTH    64                      //< Maximum length of the devices symbolic links\r
-#define        NMAX_PACKET 65535\r
-\r
-/*!\r
-  \brief Addresses of a network adapter.\r
-\r
-  This structure is used by the PacketGetNetInfoEx() function to return the IP addresses associated with \r
-  an adapter.\r
-*/\r
-typedef struct npf_if_addr {\r
-       struct sockaddr_storage IPAddress;      ///< IP address.\r
-       struct sockaddr_storage SubnetMask;     ///< Netmask for that address.\r
-       struct sockaddr_storage Broadcast;      ///< Broadcast address.\r
-}npf_if_addr;\r
-\r
-\r
-#define ADAPTER_NAME_LENGTH 256 + 12   ///<  Maximum length for the name of an adapter. The value is the same used by the IP Helper API.\r
-#define ADAPTER_DESC_LENGTH 128                        ///<  Maximum length for the description of an adapter. The value is the same used by the IP Helper API.\r
-#define MAX_MAC_ADDR_LENGTH 8                  ///<  Maximum length for the link layer address of an adapter. The value is the same used by the IP Helper API.\r
-#define MAX_NETWORK_ADDRESSES 16               ///<  Maximum length for the link layer address of an adapter. The value is the same used by the IP Helper API.\r
-\r
-\r
-typedef struct WAN_ADAPTER_INT WAN_ADAPTER; ///< Describes an opened wan (dialup, VPN...) network adapter using the NetMon API\r
-typedef WAN_ADAPTER *PWAN_ADAPTER; ///< Describes an opened wan (dialup, VPN...) network adapter using the NetMon API\r
-\r
-#define INFO_FLAG_NDIS_ADAPTER         0       ///< Flag for ADAPTER_INFO: this is a traditional ndis adapter\r
-#define INFO_FLAG_NDISWAN_ADAPTER      1       ///< Flag for ADAPTER_INFO: this is a NdisWan adapter, and it's managed by WANPACKET\r
-#define INFO_FLAG_DAG_CARD                     2       ///< Flag for ADAPTER_INFO: this is a DAG card\r
-#define INFO_FLAG_DAG_FILE                     6       ///< Flag for ADAPTER_INFO: this is a DAG file\r
-#define INFO_FLAG_DONT_EXPORT          8       ///< Flag for ADAPTER_INFO: when this flag is set, the adapter will not be listed or openend by winpcap. This allows to prevent exporting broken network adapters, like for example FireWire ones.\r
-#define INFO_FLAG_AIRPCAP_CARD         16      ///< Flag for ADAPTER_INFO: this is an airpcap card\r
-#define INFO_FLAG_NPFIM_DEVICE         32\r
-\r
-/*!\r
-  \brief Describes an opened network adapter.\r
-\r
-  This structure is the most important for the functioning of packet.dll, but the great part of its fields\r
-  should be ignored by the user, since the library offers functions that avoid to cope with low-level parameters\r
-*/\r
-typedef struct _ADAPTER  { \r
-       HANDLE hFile;                           ///< \internal Handle to an open instance of the NPF driver.\r
-       CHAR  SymbolicLink[MAX_LINK_NAME_LENGTH]; ///< \internal A string containing the name of the network adapter currently opened.\r
-       int NumWrites;                          ///< \internal Number of times a packets written on this adapter will be repeated \r
-                                                               ///< on the wire.\r
-       HANDLE ReadEvent;                       ///< A notification event associated with the read calls on the adapter.\r
-                                                               ///< It can be passed to standard Win32 functions (like WaitForSingleObject\r
-                                                               ///< or WaitForMultipleObjects) to wait until the driver's buffer contains some \r
-                                                               ///< data. It is particularly useful in GUI applications that need to wait \r
-                                                               ///< concurrently on several events. In Windows NT/2000 the PacketSetMinToCopy()\r
-                                                               ///< function can be used to define the minimum amount of data in the kernel buffer\r
-                                                               ///< that will cause the event to be signalled. \r
-       \r
-       UINT ReadTimeOut;                       ///< \internal The amount of time after which a read on the driver will be released and \r
-                                                               ///< ReadEvent will be signaled, also if no packets were captured\r
-       CHAR Name[ADAPTER_NAME_LENGTH];\r
-       PWAN_ADAPTER pWanAdapter;\r
-       UINT Flags;                                     ///< Adapter's flags. Tell if this adapter must be treated in a different way, using the Netmon API or the dagc API.\r
-\r
-#ifdef HAVE_AIRPCAP_API\r
-       PAirpcapHandle  AirpcapAd;\r
-#endif // HAVE_AIRPCAP_API\r
-\r
-#ifdef HAVE_NPFIM_API\r
-       void* NpfImHandle;\r
-#endif // HAVE_NPFIM_API\r
-\r
-#ifdef HAVE_DAG_API\r
-       dagc_t *pDagCard;                       ///< Pointer to the dagc API adapter descriptor for this adapter\r
-       PCHAR DagBuffer;                        ///< Pointer to the buffer with the packets that is received from the DAG card\r
-       struct timeval DagReadTimeout;  ///< Read timeout. The dagc API requires a timeval structure\r
-       unsigned DagFcsLen;                     ///< Length of the frame check sequence attached to any packet by the card. Obtained from the registry\r
-       DWORD DagFastProcess;           ///< True if the user requests fast capture processing on this card. Higher level applications can use this value to provide a faster but possibly unprecise capture (for example, libpcap doesn't convert the timestamps).\r
-#endif // HAVE_DAG_API\r
-}  ADAPTER, *LPADAPTER;\r
-\r
-/*!\r
-  \brief Structure that contains a group of packets coming from the driver.\r
-\r
-  This structure defines the header associated with every packet delivered to the application.\r
-*/\r
-typedef struct _PACKET {  \r
-       HANDLE       hEvent;            ///< \deprecated Still present for compatibility with old applications.\r
-       OVERLAPPED   OverLapped;        ///< \deprecated Still present for compatibility with old applications.\r
-       PVOID        Buffer;            ///< Buffer with containing the packets. See the PacketReceivePacket() for\r
-                                                               ///< details about the organization of the data in this buffer\r
-       UINT         Length;            ///< Length of the buffer\r
-       DWORD        ulBytesReceived;   ///< Number of valid bytes present in the buffer, i.e. amount of data\r
-                                                                       ///< received by the last call to PacketReceivePacket()\r
-       BOOLEAN      bIoComplete;       ///< \deprecated Still present for compatibility with old applications.\r
-}  PACKET, *LPPACKET;\r
-\r
-/*!\r
-  \brief Structure containing an OID request.\r
-\r
-  It is used by the PacketRequest() function to send an OID to the interface card driver. \r
-  It can be used, for example, to retrieve the status of the error counters on the adapter, its MAC address, \r
-  the list of the multicast groups defined on it, and so on.\r
-*/\r
-struct _PACKET_OID_DATA {\r
-    ULONG Oid;                                 ///< OID code. See the Microsoft DDK documentation or the file ntddndis.h\r
-                                                               ///< for a complete list of valid codes.\r
-    ULONG Length;                              ///< Length of the data field\r
-    UCHAR Data[1];                             ///< variable-lenght field that contains the information passed to or received \r
-                                                               ///< from the adapter.\r
-}; \r
-typedef struct _PACKET_OID_DATA PACKET_OID_DATA, *PPACKET_OID_DATA;\r
-\r
-#ifdef __cplusplus\r
-extern "C" {\r
-#endif\r
-\r
-/**\r
- *  @}\r
- */\r
-\r
-/*\r
-BOOLEAN QueryWinPcapRegistryStringA(CHAR *SubKeyName,\r
-                                                                CHAR *Value,\r
-                                                                UINT *pValueLen,\r
-                                                                CHAR *DefaultVal);\r
-\r
-BOOLEAN QueryWinPcapRegistryStringW(WCHAR *SubKeyName,\r
-                                                                WCHAR *Value,\r
-                                                                UINT *pValueLen,\r
-                                                                WCHAR *DefaultVal);\r
-*/\r
-                                                                \r
-//---------------------------------------------------------------------------\r
-// EXPORTED FUNCTIONS\r
-//---------------------------------------------------------------------------\r
-\r
-PCHAR PacketGetVersion();\r
-PCHAR PacketGetDriverVersion();\r
-BOOLEAN PacketSetMinToCopy(LPADAPTER AdapterObject,int nbytes);\r
-BOOLEAN PacketSetNumWrites(LPADAPTER AdapterObject,int nwrites);\r
-BOOLEAN PacketSetMode(LPADAPTER AdapterObject,int mode);\r
-BOOLEAN PacketSetReadTimeout(LPADAPTER AdapterObject,int timeout);\r
-BOOLEAN PacketSetBpf(LPADAPTER AdapterObject,struct bpf_program *fp);\r
-BOOLEAN PacketSetLoopbackBehavior(LPADAPTER  AdapterObject, UINT LoopbackBehavior);\r
-INT PacketSetSnapLen(LPADAPTER AdapterObject,int snaplen);\r
-BOOLEAN PacketGetStats(LPADAPTER AdapterObject,struct bpf_stat *s);\r
-BOOLEAN PacketGetStatsEx(LPADAPTER AdapterObject,struct bpf_stat *s);\r
-BOOLEAN PacketSetBuff(LPADAPTER AdapterObject,int dim);\r
-BOOLEAN PacketGetNetType (LPADAPTER AdapterObject,NetType *type);\r
-LPADAPTER PacketOpenAdapter(PCHAR AdapterName);\r
-BOOLEAN PacketSendPacket(LPADAPTER AdapterObject,LPPACKET pPacket,BOOLEAN Sync);\r
-INT PacketSendPackets(LPADAPTER AdapterObject,PVOID PacketBuff,ULONG Size, BOOLEAN Sync);\r
-LPPACKET PacketAllocatePacket(void);\r
-VOID PacketInitPacket(LPPACKET lpPacket,PVOID  Buffer,UINT  Length);\r
-VOID PacketFreePacket(LPPACKET lpPacket);\r
-BOOLEAN PacketReceivePacket(LPADAPTER AdapterObject,LPPACKET lpPacket,BOOLEAN Sync);\r
-BOOLEAN PacketSetHwFilter(LPADAPTER AdapterObject,ULONG Filter);\r
-BOOLEAN PacketGetAdapterNames(PTSTR pStr,PULONG  BufferSize);\r
-BOOLEAN PacketGetNetInfoEx(PCHAR AdapterName, npf_if_addr* buffer, PLONG NEntries);\r
-BOOLEAN PacketRequest(LPADAPTER  AdapterObject,BOOLEAN Set,PPACKET_OID_DATA  OidData);\r
-HANDLE PacketGetReadEvent(LPADAPTER AdapterObject);\r
-BOOLEAN PacketSetDumpName(LPADAPTER AdapterObject, void *name, int len);\r
-BOOLEAN PacketSetDumpLimits(LPADAPTER AdapterObject, UINT maxfilesize, UINT maxnpacks);\r
-BOOLEAN PacketIsDumpEnded(LPADAPTER AdapterObject, BOOLEAN sync);\r
-BOOL PacketStopDriver();\r
-VOID PacketCloseAdapter(LPADAPTER lpAdapter);\r
-BOOLEAN PacketStartOem(PCHAR errorString, UINT errorStringLength);\r
-BOOLEAN PacketStartOemEx(PCHAR errorString, UINT errorStringLength, ULONG flags);\r
-PAirpcapHandle PacketGetAirPcapHandle(LPADAPTER AdapterObject);\r
-\r
-//\r
-// Used by PacketStartOemEx\r
-//\r
-#define PACKET_START_OEM_NO_NETMON     0x00000001\r
-\r
-#ifdef __cplusplus\r
-}\r
-#endif \r
-\r
-#endif //__PACKET32\r
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WinPCap/PacketData.h b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WinPCap/PacketData.h
deleted file mode 100644 (file)
index 8124db6..0000000
+++ /dev/null
@@ -1,267 +0,0 @@
-char pkt1[] = {\r
-0x00, 0x01, 0x02, 0x45, 0x09, 0x11, 0x00, 0x14,\r
-0x22, 0xcb, 0x18, 0x2d, 0x08, 0x00, 0x45, 0x00,\r
-0x00, 0x30, 0x09, 0x9c, 0x40, 0x00, 0x80, 0x06,\r
-0x6f, 0x07, 0xc0, 0xa8, 0x00, 0xc8, 0xc0, 0xa8,\r
-0x00, 0x0c, 0x0f, 0xe2, 0x00, 0x50, 0x09, 0xe7,\r
-0xc7, 0x35, 0x00, 0x00, 0x00, 0x00, 0x70, 0x02,\r
-0x40, 0x00, 0xdf, 0xab, 0x00, 0x00, 0x02, 0x04,\r
-0x05, 0xb4, 0x01, 0x01, 0x04, 0x02 };\r
-\r
-char pkt2[] = {\r
-0x00, 0x14, 0x22, 0xcb, 0x18, 0x2d, 0x00, 0x01,\r
-0x02, 0x45, 0x09, 0x11, 0x08, 0x00, 0x45, 0x00,\r
-0x00, 0x2c, 0x00, 0x01, 0x00, 0x00, 0x40, 0x06,\r
-0xf8, 0xa6, 0xc0, 0xa8, 0x00, 0x0c, 0xc0, 0xa8,\r
-0x00, 0xc8, 0x00, 0x50, 0x0f, 0xe2, 0x00, 0x00,\r
-0x06, 0x68, 0x09, 0xe7, 0xc7, 0x36, 0x60, 0x12,\r
-0x05, 0x92, 0x28, 0xca, 0x00, 0x00, 0x02, 0x04,\r
-0x05, 0x92 };\r
-\r
-char pkt3[] = {\r
-0x00, 0x01, 0x02, 0x45, 0x09, 0x11, 0x00, 0x14,\r
-0x22, 0xcb, 0x18, 0x2d, 0x08, 0x00, 0x45, 0x00,\r
-0x00, 0x28, 0x09, 0x9e, 0x40, 0x00, 0x80, 0x06,\r
-0x6f, 0x0d, 0xc0, 0xa8, 0x00, 0xc8, 0xc0, 0xa8,\r
-0x00, 0x0c, 0x0f, 0xe2, 0x00, 0x50, 0x09, 0xe7,\r
-0xc7, 0x36, 0x00, 0x00, 0x06, 0x69, 0x50, 0x10,\r
-0x42, 0xd8, 0x82, 0x3f, 0x00, 0x00 };\r
-\r
-char pkt4[] = {\r
-0x00, 0x01, 0x02, 0x45, 0x09, 0x11, 0x00, 0x14,\r
-0x22, 0xcb, 0x18, 0x2d, 0x08, 0x00, 0x45, 0x00,\r
-0x02, 0x27, 0x09, 0x9f, 0x40, 0x00, 0x80, 0x06,\r
-0x6d, 0x0d, 0xc0, 0xa8, 0x00, 0xc8, 0xc0, 0xa8,\r
-0x00, 0x0c, 0x0f, 0xe2, 0x00, 0x50, 0x09, 0xe7,\r
-0xc7, 0x36, 0x00, 0x00, 0x06, 0x69, 0x50, 0x18,\r
-0x42, 0xd8, 0x84, 0x3e, 0x00, 0x00, 0x47, 0x45,\r
-0x54, 0x20, 0x2f, 0x20, 0x48, 0x54, 0x54, 0x50,\r
-0x2f, 0x31, 0x2e, 0x31, 0x0d, 0x0a, 0x41, 0x63,\r
-0x63, 0x65, 0x70, 0x74, 0x3a, 0x20, 0x69, 0x6d,\r
-0x61, 0x67, 0x65, 0x2f, 0x67, 0x69, 0x66, 0x2c,\r
-0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x78,\r
-0x2d, 0x78, 0x62, 0x69, 0x74, 0x6d, 0x61, 0x70,\r
-0x2c, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f,\r
-0x6a, 0x70, 0x65, 0x67, 0x2c, 0x20, 0x69, 0x6d,\r
-0x61, 0x67, 0x65, 0x2f, 0x70, 0x6a, 0x70, 0x65,\r
-0x67, 0x2c, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69,\r
-0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76,\r
-0x6e, 0x64, 0x2e, 0x6d, 0x73, 0x2d, 0x65, 0x78,\r
-0x63, 0x65, 0x6c, 0x2c, 0x20, 0x61, 0x70, 0x70,\r
-0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,\r
-0x2f, 0x6d, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x2c,\r
-0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61,\r
-0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x6e, 0x64,\r
-0x2e, 0x6d, 0x73, 0x2d, 0x70, 0x6f, 0x77, 0x65,\r
-0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x2c, 0x20,\r
-0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,\r
-0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x6d, 0x73,\r
-0x2d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61,\r
-0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x61, 0x70,\r
-0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,\r
-0x6e, 0x2f, 0x78, 0x2d, 0x6d, 0x73, 0x2d, 0x78,\r
-0x62, 0x61, 0x70, 0x2c, 0x20, 0x61, 0x70, 0x70,\r
-0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,\r
-0x2f, 0x76, 0x6e, 0x64, 0x2e, 0x6d, 0x73, 0x2d,\r
-0x78, 0x70, 0x73, 0x64, 0x6f, 0x63, 0x75, 0x6d,\r
-0x65, 0x6e, 0x74, 0x2c, 0x20, 0x61, 0x70, 0x70,\r
-0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,\r
-0x2f, 0x78, 0x61, 0x6d, 0x6c, 0x2b, 0x78, 0x6d,\r
-0x6c, 0x2c, 0x20, 0x2a, 0x2f, 0x2a, 0x0d, 0x0a,\r
-0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d, 0x4c,\r
-0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x3a,\r
-0x20, 0x65, 0x6e, 0x2d, 0x67, 0x62, 0x0d, 0x0a,\r
-0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d, 0x45,\r
-0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x3a,\r
-0x20, 0x67, 0x7a, 0x69, 0x70, 0x2c, 0x20, 0x64,\r
-0x65, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x0d, 0x0a,\r
-0x55, 0x73, 0x65, 0x72, 0x2d, 0x41, 0x67, 0x65,\r
-0x6e, 0x74, 0x3a, 0x20, 0x4d, 0x6f, 0x7a, 0x69,\r
-0x6c, 0x6c, 0x61, 0x2f, 0x34, 0x2e, 0x30, 0x20,\r
-0x28, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69,\r
-0x62, 0x6c, 0x65, 0x3b, 0x20, 0x4d, 0x53, 0x49,\r
-0x45, 0x20, 0x36, 0x2e, 0x30, 0x3b, 0x20, 0x57,\r
-0x69, 0x6e, 0x64, 0x6f, 0x77, 0x73, 0x20, 0x4e,\r
-0x54, 0x20, 0x35, 0x2e, 0x31, 0x3b, 0x20, 0x53,\r
-0x56, 0x31, 0x3b, 0x20, 0x47, 0x6f, 0x6f, 0x67,\r
-0x6c, 0x65, 0x54, 0x35, 0x3b, 0x20, 0x2e, 0x4e,\r
-0x45, 0x54, 0x20, 0x43, 0x4c, 0x52, 0x20, 0x32,\r
-0x2e, 0x30, 0x2e, 0x35, 0x30, 0x37, 0x32, 0x37,\r
-0x3b, 0x20, 0x2e, 0x4e, 0x45, 0x54, 0x20, 0x43,\r
-0x4c, 0x52, 0x20, 0x33, 0x2e, 0x30, 0x2e, 0x30,\r
-0x34, 0x35, 0x30, 0x36, 0x2e, 0x36, 0x34, 0x38,\r
-0x3b, 0x20, 0x2e, 0x4e, 0x45, 0x54, 0x20, 0x43,\r
-0x4c, 0x52, 0x20, 0x33, 0x2e, 0x35, 0x2e, 0x32,\r
-0x31, 0x30, 0x32, 0x32, 0x29, 0x0d, 0x0a, 0x48,\r
-0x6f, 0x73, 0x74, 0x3a, 0x20, 0x31, 0x39, 0x32,\r
-0x2e, 0x31, 0x36, 0x38, 0x2e, 0x30, 0x2e, 0x31,\r
-0x32, 0x0d, 0x0a, 0x43, 0x6f, 0x6e, 0x6e, 0x65,\r
-0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x4b,\r
-0x65, 0x65, 0x70, 0x2d, 0x41, 0x6c, 0x69, 0x76,\r
-0x65, 0x0d, 0x0a, 0x0d, 0x0a };\r
-\r
-char pkt5[] = {\r
-0x00, 0x14, 0x22, 0xcb, 0x18, 0x2d, 0x00, 0x01,\r
-0x02, 0x45, 0x09, 0x11, 0x08, 0x00, 0x45, 0x00,\r
-0x00, 0x2c, 0x00, 0x02, 0x00, 0x00, 0x40, 0x06,\r
-0xf8, 0xa5, 0xc0, 0xa8, 0x00, 0x0c, 0xc0, 0xa8,\r
-0x00, 0xc8, 0x00, 0x50, 0x0f, 0xe2, 0x00, 0x00,\r
-0x06, 0x68, 0x09, 0xe7, 0xc7, 0x36, 0x60, 0x12,\r
-0x05, 0x92, 0x28, 0xca, 0x00, 0x00, 0x02, 0x04,\r
-0x05, 0x92 };\r
-\r
-char pkt6[] = {\r
-0x00, 0x01, 0x02, 0x45, 0x09, 0x11, 0x00, 0x14,\r
-0x22, 0xcb, 0x18, 0x2d, 0x08, 0x00, 0x45, 0x00,\r
-0x00, 0x28, 0x09, 0xa1, 0x40, 0x00, 0x80, 0x06,\r
-0x6f, 0x0a, 0xc0, 0xa8, 0x00, 0xc8, 0xc0, 0xa8,\r
-0x00, 0x0c, 0x0f, 0xe2, 0x00, 0x50, 0x09, 0xe7,\r
-0xc9, 0x35, 0x00, 0x00, 0x06, 0x69, 0x50, 0x10,\r
-0x42, 0xd8, 0x82, 0x3f, 0x00, 0x00 };\r
-\r
-char pkt7[] = {\r
-0x00, 0x01, 0x02, 0x45, 0x09, 0x11, 0x00, 0x14,\r
-0x22, 0xcb, 0x18, 0x2d, 0x08, 0x00, 0x45, 0x00,\r
-0x02, 0x27, 0x09, 0xa2, 0x40, 0x00, 0x80, 0x06,\r
-0x6d, 0x0a, 0xc0, 0xa8, 0x00, 0xc8, 0xc0, 0xa8,\r
-0x00, 0x0c, 0x0f, 0xe2, 0x00, 0x50, 0x09, 0xe7,\r
-0xc7, 0x36, 0x00, 0x00, 0x06, 0x69, 0x50, 0x18,\r
-0x42, 0xd8, 0x84, 0x3e, 0x00, 0x00, 0x47, 0x45,\r
-0x54, 0x20, 0x2f, 0x20, 0x48, 0x54, 0x54, 0x50,\r
-0x2f, 0x31, 0x2e, 0x31, 0x0d, 0x0a, 0x41, 0x63,\r
-0x63, 0x65, 0x70, 0x74, 0x3a, 0x20, 0x69, 0x6d,\r
-0x61, 0x67, 0x65, 0x2f, 0x67, 0x69, 0x66, 0x2c,\r
-0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x78,\r
-0x2d, 0x78, 0x62, 0x69, 0x74, 0x6d, 0x61, 0x70,\r
-0x2c, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f,\r
-0x6a, 0x70, 0x65, 0x67, 0x2c, 0x20, 0x69, 0x6d,\r
-0x61, 0x67, 0x65, 0x2f, 0x70, 0x6a, 0x70, 0x65,\r
-0x67, 0x2c, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69,\r
-0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76,\r
-0x6e, 0x64, 0x2e, 0x6d, 0x73, 0x2d, 0x65, 0x78,\r
-0x63, 0x65, 0x6c, 0x2c, 0x20, 0x61, 0x70, 0x70,\r
-0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,\r
-0x2f, 0x6d, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x2c,\r
-0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61,\r
-0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x6e, 0x64,\r
-0x2e, 0x6d, 0x73, 0x2d, 0x70, 0x6f, 0x77, 0x65,\r
-0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x2c, 0x20,\r
-0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,\r
-0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x6d, 0x73,\r
-0x2d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61,\r
-0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x61, 0x70,\r
-0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,\r
-0x6e, 0x2f, 0x78, 0x2d, 0x6d, 0x73, 0x2d, 0x78,\r
-0x62, 0x61, 0x70, 0x2c, 0x20, 0x61, 0x70, 0x70,\r
-0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,\r
-0x2f, 0x76, 0x6e, 0x64, 0x2e, 0x6d, 0x73, 0x2d,\r
-0x78, 0x70, 0x73, 0x64, 0x6f, 0x63, 0x75, 0x6d,\r
-0x65, 0x6e, 0x74, 0x2c, 0x20, 0x61, 0x70, 0x70,\r
-0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,\r
-0x2f, 0x78, 0x61, 0x6d, 0x6c, 0x2b, 0x78, 0x6d,\r
-0x6c, 0x2c, 0x20, 0x2a, 0x2f, 0x2a, 0x0d, 0x0a,\r
-0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d, 0x4c,\r
-0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x3a,\r
-0x20, 0x65, 0x6e, 0x2d, 0x67, 0x62, 0x0d, 0x0a,\r
-0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d, 0x45,\r
-0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x3a,\r
-0x20, 0x67, 0x7a, 0x69, 0x70, 0x2c, 0x20, 0x64,\r
-0x65, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x0d, 0x0a,\r
-0x55, 0x73, 0x65, 0x72, 0x2d, 0x41, 0x67, 0x65,\r
-0x6e, 0x74, 0x3a, 0x20, 0x4d, 0x6f, 0x7a, 0x69,\r
-0x6c, 0x6c, 0x61, 0x2f, 0x34, 0x2e, 0x30, 0x20,\r
-0x28, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69,\r
-0x62, 0x6c, 0x65, 0x3b, 0x20, 0x4d, 0x53, 0x49,\r
-0x45, 0x20, 0x36, 0x2e, 0x30, 0x3b, 0x20, 0x57,\r
-0x69, 0x6e, 0x64, 0x6f, 0x77, 0x73, 0x20, 0x4e,\r
-0x54, 0x20, 0x35, 0x2e, 0x31, 0x3b, 0x20, 0x53,\r
-0x56, 0x31, 0x3b, 0x20, 0x47, 0x6f, 0x6f, 0x67,\r
-0x6c, 0x65, 0x54, 0x35, 0x3b, 0x20, 0x2e, 0x4e,\r
-0x45, 0x54, 0x20, 0x43, 0x4c, 0x52, 0x20, 0x32,\r
-0x2e, 0x30, 0x2e, 0x35, 0x30, 0x37, 0x32, 0x37,\r
-0x3b, 0x20, 0x2e, 0x4e, 0x45, 0x54, 0x20, 0x43,\r
-0x4c, 0x52, 0x20, 0x33, 0x2e, 0x30, 0x2e, 0x30,\r
-0x34, 0x35, 0x30, 0x36, 0x2e, 0x36, 0x34, 0x38,\r
-0x3b, 0x20, 0x2e, 0x4e, 0x45, 0x54, 0x20, 0x43,\r
-0x4c, 0x52, 0x20, 0x33, 0x2e, 0x35, 0x2e, 0x32,\r
-0x31, 0x30, 0x32, 0x32, 0x29, 0x0d, 0x0a, 0x48,\r
-0x6f, 0x73, 0x74, 0x3a, 0x20, 0x31, 0x39, 0x32,\r
-0x2e, 0x31, 0x36, 0x38, 0x2e, 0x30, 0x2e, 0x31,\r
-0x32, 0x0d, 0x0a, 0x43, 0x6f, 0x6e, 0x6e, 0x65,\r
-0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x4b,\r
-0x65, 0x65, 0x70, 0x2d, 0x41, 0x6c, 0x69, 0x76,\r
-0x65, 0x0d, 0x0a, 0x0d, 0x0a };\r
-\r
-char pkt8[] = {\r
-0x00, 0x14, 0x22, 0xcb, 0x18, 0x2d, 0x00, 0x01,\r
-0x02, 0x45, 0x09, 0x11, 0x08, 0x00, 0x45, 0x00,\r
-0x00, 0x2c, 0x00, 0x03, 0x00, 0x00, 0x40, 0x06,\r
-0xf8, 0xa4, 0xc0, 0xa8, 0x00, 0x0c, 0xc0, 0xa8,\r
-0x00, 0xc8, 0x00, 0x50, 0x0f, 0xe2, 0x00, 0x00,\r
-0x06, 0x68, 0x09, 0xe7, 0xc7, 0x36, 0x60, 0x12,\r
-0x05, 0x92, 0x28, 0xca, 0x00, 0x00, 0x02, 0x04,\r
-0x05, 0x92 };\r
-\r
-char pkt9[] = {\r
-0x00, 0x01, 0x02, 0x45, 0x09, 0x11, 0x00, 0x14,\r
-0x22, 0xcb, 0x18, 0x2d, 0x08, 0x00, 0x45, 0x00,\r
-0x00, 0x28, 0x09, 0xa3, 0x40, 0x00, 0x80, 0x06,\r
-0x6f, 0x08, 0xc0, 0xa8, 0x00, 0xc8, 0xc0, 0xa8,\r
-0x00, 0x0c, 0x0f, 0xe2, 0x00, 0x50, 0x09, 0xe7,\r
-0xc9, 0x35, 0x00, 0x00, 0x06, 0x69, 0x50, 0x10,\r
-0x42, 0xd8, 0x82, 0x3f, 0x00, 0x00 };\r
-\r
-char pkt10[] = {\r
-0x00, 0x14, 0x22, 0xcb, 0x18, 0x2d, 0x00, 0x01,\r
-0x02, 0x45, 0x09, 0x11, 0x08, 0x00, 0x45, 0x00,\r
-0x00, 0x2c, 0x00, 0x04, 0x00, 0x00, 0x40, 0x06,\r
-0xf8, 0xa3, 0xc0, 0xa8, 0x00, 0x0c, 0xc0, 0xa8,\r
-0x00, 0xc8, 0x00, 0x50, 0x0f, 0xe2, 0x00, 0x00,\r
-0x06, 0x68, 0x09, 0xe7, 0xc7, 0x36, 0x60, 0x12,\r
-0x05, 0x92, 0x28, 0xca, 0x00, 0x00, 0x02, 0x04,\r
-0x05, 0x92 };\r
-\r
-char pkt11[] = {\r
-0x00, 0x01, 0x02, 0x45, 0x09, 0x11, 0x00, 0x14,\r
-0x22, 0xcb, 0x18, 0x2d, 0x08, 0x00, 0x45, 0x00,\r
-0x00, 0x28, 0x09, 0xa6, 0x40, 0x00, 0x80, 0x06,\r
-0x6f, 0x05, 0xc0, 0xa8, 0x00, 0xc8, 0xc0, 0xa8,\r
-0x00, 0x0c, 0x0f, 0xe2, 0x00, 0x50, 0x09, 0xe7,\r
-0xc9, 0x35, 0x00, 0x00, 0x06, 0x69, 0x50, 0x10,\r
-0x42, 0xd8, 0x82, 0x3f, 0x00, 0x00 };\r
-\r
-char pkt12[] = {\r
-0x00, 0x01, 0x02, 0x45, 0x09, 0x11, 0x00, 0x14,\r
-0x22, 0xcb, 0x18, 0x2d, 0x08, 0x00, 0x45, 0x00,\r
-0x00, 0x28, 0x09, 0xa7, 0x40, 0x00, 0x80, 0x06,\r
-0x6f, 0x04, 0xc0, 0xa8, 0x00, 0xc8, 0xc0, 0xa8,\r
-0x00, 0x0c, 0x0f, 0xe2, 0x00, 0x50, 0x09, 0xe7,\r
-0xc9, 0x35, 0x00, 0x00, 0x06, 0x69, 0x50, 0x14,\r
-0x00, 0x00, 0x43, 0xf4, 0x00, 0x00 };\r
-\r
-\r
-typedef struct\r
-{\r
-       char *pcData;\r
-       int iDataLen;\r
-} xPacketData;\r
-\r
-xPacketData xAllPackets[] =\r
-{\r
-       { pkt1, sizeof( pkt1 ) },\r
-//     { pkt2, sizeof( pkt2 ) },\r
-       { pkt3, sizeof( pkt3 ) },\r
-       { pkt4, sizeof( pkt4 ) },\r
-//     { pkt5, sizeof( pkt5 ) },\r
-       { pkt6, sizeof( pkt6 ) },\r
-       { pkt7, sizeof( pkt7 ) },\r
-       { pkt8, sizeof( pkt8 ) },\r
-       { pkt9, sizeof( pkt9 ) },\r
-       { pkt10, sizeof( pkt10 ) },\r
-//     { pkt11, sizeof( pkt11 ) },\r
-//     { pkt12, sizeof( pkt12 ) },\r
-//     { pkt13, sizeof( pkt13 ) },\r
-//     { pkt14, sizeof( pkt14 ) },\r
-//     { pkt15, sizeof( pkt15 ) },\r
-//     { pkt16, sizeof( pkt16 ) },\r
-};\r
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WinPCap/Win32-Extensions.h b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WinPCap/Win32-Extensions.h
deleted file mode 100644 (file)
index be71c85..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-/*\r
- * Copyright (c) 1999 - 2005 NetGroup, Politecnico di Torino (Italy)\r
- * Copyright (c) 2005 - 2006 CACE Technologies, Davis (California)\r
- * All rights reserved.\r
- *\r
- * Redistribution and use in source and binary forms, with or without\r
- * modification, are permitted provided that the following conditions\r
- * are met:\r
- *\r
- * 1. Redistributions of source code must retain the above copyright\r
- * notice, this list of conditions and the following disclaimer.\r
- * 2. Redistributions in binary form must reproduce the above copyright\r
- * notice, this list of conditions and the following disclaimer in the\r
- * documentation and/or other materials provided with the distribution.\r
- * 3. Neither the name of the Politecnico di Torino, CACE Technologies \r
- * nor the names of its contributors may be used to endorse or promote \r
- * products derived from this software without specific prior written \r
- * permission.\r
- *\r
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
- *\r
- */\r
-\r
-\r
-#ifndef __WIN32_EXTENSIONS_H__\r
-#define __WIN32_EXTENSIONS_H__\r
-\r
-#ifdef __cplusplus\r
-extern "C" {\r
-#endif\r
-\r
-/* Definitions */\r
-\r
-/*!\r
-  \brief A queue of raw packets that will be sent to the network with pcap_sendqueue_transmit().\r
-*/\r
-struct pcap_send_queue\r
-{\r
-       u_int maxlen;           ///< Maximum size of the the queue, in bytes. This variable contains the size of the buffer field.\r
-       u_int len;                      ///< Current size of the queue, in bytes.\r
-       char *buffer;           ///< Buffer containing the packets to be sent.\r
-};\r
-\r
-typedef struct pcap_send_queue pcap_send_queue;\r
-\r
-/*!\r
-  \brief This typedef is a support for the pcap_get_airpcap_handle() function\r
-*/\r
-#if !defined(AIRPCAP_HANDLE__EAE405F5_0171_9592_B3C2_C19EC426AD34__DEFINED_)\r
-#define AIRPCAP_HANDLE__EAE405F5_0171_9592_B3C2_C19EC426AD34__DEFINED_\r
-typedef struct _AirpcapHandle *PAirpcapHandle;\r
-#endif\r
-\r
-#define                BPF_MEM_EX_IMM  0xc0\r
-#define                BPF_MEM_EX_IND  0xe0\r
-\r
-/*used for ST*/\r
-#define                BPF_MEM_EX              0xc0\r
-#define                BPF_TME                                 0x08\r
-\r
-#define                BPF_LOOKUP                              0x90   \r
-#define                BPF_EXECUTE                             0xa0\r
-#define                BPF_INIT                                0xb0\r
-#define                BPF_VALIDATE                    0xc0\r
-#define                BPF_SET_ACTIVE                  0xd0\r
-#define                BPF_RESET                               0xe0\r
-#define                BPF_SET_MEMORY                  0x80\r
-#define                BPF_GET_REGISTER_VALUE  0x70\r
-#define                BPF_SET_REGISTER_VALUE  0x60\r
-#define                BPF_SET_WORKING                 0x50\r
-#define                BPF_SET_ACTIVE_READ             0x40\r
-#define                BPF_SET_AUTODELETION    0x30\r
-#define                BPF_SEPARATION                  0xff\r
-\r
-/* Prototypes */\r
-pcap_send_queue* pcap_sendqueue_alloc(u_int memsize);\r
-\r
-void pcap_sendqueue_destroy(pcap_send_queue* queue);\r
-\r
-int pcap_sendqueue_queue(pcap_send_queue* queue, const struct pcap_pkthdr *pkt_header, const u_char *pkt_data);\r
-\r
-u_int pcap_sendqueue_transmit(pcap_t *p, pcap_send_queue* queue, int sync);\r
-\r
-HANDLE pcap_getevent(pcap_t *p);\r
-\r
-struct pcap_stat *pcap_stats_ex(pcap_t *p, int *pcap_stat_size);\r
-\r
-int pcap_setuserbuffer(pcap_t *p, int size);\r
-\r
-int pcap_live_dump(pcap_t *p, char *filename, int maxsize, int maxpacks);\r
-\r
-int pcap_live_dump_ended(pcap_t *p, int sync);\r
-\r
-int pcap_offline_filter(struct bpf_program *prog, const struct pcap_pkthdr *header, const u_char *pkt_data);\r
-\r
-int pcap_start_oem(char* err_str, int flags);\r
-\r
-PAirpcapHandle pcap_get_airpcap_handle(pcap_t *p);\r
-\r
-#ifdef __cplusplus\r
-}\r
-#endif\r
-\r
-#endif //__WIN32_EXTENSIONS_H__\r
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WinPCap/arch.c b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WinPCap/arch.c
deleted file mode 100644 (file)
index d704da8..0000000
+++ /dev/null
@@ -1,336 +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
-/* WinPCap includes. */\r
-#include "pcap.h"\r
-#include "remote-ext.h"\r
-\r
-/* uIP includes. */\r
-#include "net/uip.h"\r
-#include "net/uip_arp.h"\r
-#include "net/clock-arch.h"\r
-\r
-/* FreeRTOS includes. */\r
-#include "FreeRTOS.h"\r
-#include "task.h"\r
-#include "queue.h"\r
-\r
-/*\r
- * Query the computer the simulation is being executed on to find the network\r
- * interfaces it has installed.\r
- */\r
-static pcap_if_t * prvPrintAvailableNetworkInterfaces( void );\r
-\r
-/*\r
- * Open the network interface.  The number of the interface to be opened is set\r
- * by the configNETWORK_INTERFACE_TO_USE constant in FreeRTOSConfig.h.\r
- */\r
-static void prvOpenSelectedNetworkInterface( pcap_if_t *pxAllNetworkInterfaces );\r
-\r
-/*\r
- * Configure the capture filter to allow blocking reads, and to filter out\r
- * packets that are not of interest to this demo.\r
- */\r
-static void prvConfigureCaptureBehaviour( void );\r
-\r
-pcap_t *pxOpenedInterfaceHandle = NULL;\r
-LARGE_INTEGER freq, sys_start_time;\r
-\r
-#define archNUM_BUFFERS        5\r
-#define archNUM_BUFFER_POINTERS ( archNUM_BUFFERS - 1 )\r
-\r
-static void prvInterruptSimulator( void *pvParameters );\r
-\r
-static unsigned char ucEthernetBuffer[ archNUM_BUFFERS ][ UIP_CONF_BUFFER_SIZE ];\r
-static unsigned char *pucEthernetBufferPointers[ archNUM_BUFFER_POINTERS ];\r
-\r
-static long lLengthOfDataInBuffer[ archNUM_BUFFER_POINTERS ] = { 0 };\r
-static unsigned char ucNextBufferToFill = 0U, ucNextBufferToProcess = 0U;\r
-\r
-unsigned char *uip_buf = NULL;\r
-char cErrorBuffer[PCAP_ERRBUF_SIZE];\r
-\r
-void vNetifTx( void )\r
-{\r
-       pcap_sendpacket( pxOpenedInterfaceHandle, uip_buf, uip_len );\r
-       pcap_sendpacket( pxOpenedInterfaceHandle, uip_buf, uip_len );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-UBaseType_t uxNetifRx( void )\r
-{\r
-UBaseType_t xDataLen;\r
-unsigned char *pucTemp;\r
-\r
-       /* Check there is really data available. */\r
-       xDataLen = lLengthOfDataInBuffer[ ucNextBufferToProcess ];\r
-       if( xDataLen != 0L )\r
-       {\r
-\r
-               /* The buffer pointed to by uip_buf is going to change.  Remember which\r
-               buffer uip_buf is currently pointing to. */\r
-               pucTemp = uip_buf;\r
-\r
-               /* Point uip_buf at the next buffer that contains data. */\r
-               uip_buf = pucEthernetBufferPointers[ ucNextBufferToProcess ];\r
-\r
-               /* The buffer pointed to by \r
-               pucEthernetBufferPointeres[ ucNextBufferToProcess ] is now in use by\r
-               uip_buf, but the buffer uip_buf was pointing to on entry to this\r
-               function is free.  Set \r
-               pucEthernetBufferPointeres[ ucNextBufferToProcess ] to the free \r
-               buffer. */\r
-               pucEthernetBufferPointers[ ucNextBufferToProcess ] = pucTemp;\r
-               lLengthOfDataInBuffer[ ucNextBufferToProcess ] = 0L;\r
-\r
-               ucNextBufferToProcess++;\r
-               if( ucNextBufferToProcess >= archNUM_BUFFER_POINTERS )\r
-               {\r
-                       ucNextBufferToProcess = 0L;\r
-               }\r
-       }\r
-\r
-       return xDataLen;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-BaseType_t xNetifInit( void )\r
-{\r
-BaseType_t x;\r
-pcap_if_t *pxAllNetworkInterfaces;\r
-\r
-       /* Allocate a free buffer to each buffer pointer. */\r
-       for( x = 0; x < sizeof( pucEthernetBufferPointers ) / sizeof( unsigned char * ); x++ )\r
-       {\r
-               pucEthernetBufferPointers[ x ] = &( ucEthernetBuffer[ x ][ 0 ] );\r
-       }\r
-\r
-       /* Start with uip_buf pointing to a buffer that is not referenced from the\r
-       pucEthernetBufferPointers[] array. */\r
-       uip_buf = &( ucEthernetBuffer[ archNUM_BUFFERS - 1 ][ 0 ] );\r
-\r
-       /* Query the computer the simulation is being executed on to find the \r
-       network interfaces it has installed. */\r
-       pxAllNetworkInterfaces = prvPrintAvailableNetworkInterfaces();\r
-       \r
-       /* Open the network interface.  The number of the interface to be opened is \r
-       set by the configNETWORK_INTERFACE_TO_USE constant in FreeRTOSConfig.h.\r
-       Calling this function will set the pxOpenedInterfaceHandle variable.  If,\r
-       after calling this function, pxOpenedInterfaceHandle is equal to NULL, then\r
-       the interface could not be opened. */\r
-       if( pxAllNetworkInterfaces != NULL )\r
-       {\r
-               prvOpenSelectedNetworkInterface( pxAllNetworkInterfaces );\r
-       }\r
-       \r
-\r
-       return x;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static pcap_if_t * prvPrintAvailableNetworkInterfaces( void )\r
-{    \r
-pcap_if_t * pxAllNetworkInterfaces = NULL, *xInterface;\r
-long lInterfaceNumber = 1;\r
-\r
-    if( pcap_findalldevs_ex( PCAP_SRC_IF_STRING, NULL, &pxAllNetworkInterfaces, cErrorBuffer ) == -1 )\r
-    {\r
-        printf( "\r\nCould not obtain a list of network interfaces\r\n%s\r\n", cErrorBuffer );\r
-        pxAllNetworkInterfaces = NULL;\r
-    }\r
-\r
-       if( pxAllNetworkInterfaces != NULL )\r
-       {\r
-               /* Print out the list of network interfaces.  The first in the list\r
-               is interface '1', not interface '0'. */\r
-               for( xInterface = pxAllNetworkInterfaces; xInterface != NULL; xInterface = xInterface->next )\r
-               {\r
-                       printf( "%d. %s", lInterfaceNumber, xInterface->name );\r
-                       \r
-                       if( xInterface->description != NULL )\r
-                       {\r
-                               printf( " (%s)\r\n", xInterface->description );\r
-                       }\r
-                       else\r
-                       {\r
-                               printf( " (No description available)\r\n") ;\r
-                       }\r
-                       \r
-                       lInterfaceNumber++;\r
-               }\r
-       }\r
-\r
-    if( lInterfaceNumber == 1 )\r
-    {\r
-               /* The interface number was never incremented, so the above for() loop\r
-               did not execute meaning no interfaces were found. */\r
-        printf( " \r\nNo network interfaces were found.\r\n" );\r
-        pxAllNetworkInterfaces = NULL;\r
-    }\r
-\r
-       printf( "\r\nThe interface that will be opened is set by configNETWORK_INTERFACE_TO_USE which should be defined in FreeRTOSConfig.h\r\n" );\r
-       printf( "Attempting to open interface number %d.\r\n", configNETWORK_INTERFACE_TO_USE );\r
-       \r
-    if( ( configNETWORK_INTERFACE_TO_USE < 1L ) || ( configNETWORK_INTERFACE_TO_USE > lInterfaceNumber ) )\r
-    {\r
-        printf("\r\nconfigNETWORK_INTERFACE_TO_USE is not in the valid range.\r\n" );\r
-               \r
-               if( pxAllNetworkInterfaces != NULL )\r
-               {\r
-                       /* Free the device list, as no devices are going to be opened. */\r
-                       pcap_freealldevs( pxAllNetworkInterfaces );\r
-                       pxAllNetworkInterfaces = NULL;\r
-               }\r
-    }\r
-\r
-       return pxAllNetworkInterfaces;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvOpenSelectedNetworkInterface( pcap_if_t *pxAllNetworkInterfaces )\r
-{\r
-pcap_if_t *xInterface;\r
-long x;\r
-\r
-    /* Walk the list of devices until the selected device is located. */\r
-       xInterface = pxAllNetworkInterfaces;\r
-    for( x = 0L; x < ( configNETWORK_INTERFACE_TO_USE - 1L ); x++ )\r
-       {\r
-               xInterface = xInterface->next;\r
-       }\r
-\r
-    /* Open the selected interface. */\r
-       pxOpenedInterfaceHandle = pcap_open(    xInterface->name,               /* The name of the selected interface. */\r
-                                                                                       UIP_CONF_BUFFER_SIZE,           /* The size of the packet to capture. */\r
-                                                                                       PCAP_OPENFLAG_PROMISCUOUS,      /* Open in promiscious mode as the MAC and \r
-                                                                                                                                               IP address is going to be "simulated", and \r
-                                                                                                                                               not be the real MAC and IP address.  This allows\r
-                                                                                                                                               trafic to the simulated IP address to be routed\r
-                                                                                                                                               to uIP, and trafic to the real IP address to be\r
-                                                                                                                                               routed to the Windows TCP/IP stack. */\r
-                                                                                       0xfffffffL,                     /* The read time out.  This is going to block\r
-                                                                                                                                               until data is available. */\r
-                                                                                       NULL,                                   /* No authentication is required as this is\r
-                                                                                                                                               not a remote capture session. */\r
-                                                                                       cErrorBuffer            \r
-                                                                          );\r
-                                                                          \r
-    if ( pxOpenedInterfaceHandle == NULL )\r
-    {\r
-        printf( "\r\n%s is not supported by WinPcap and cannot be opened\r\n", xInterface->name );\r
-    }\r
-       else\r
-       {\r
-               /* Configure the capture filter to allow blocking reads, and to filter \r
-               out packets that are not of interest to this demo. */\r
-               prvConfigureCaptureBehaviour();\r
-       }\r
-\r
-       /* The device list is no longer required. */\r
-       pcap_freealldevs( pxAllNetworkInterfaces );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvConfigureCaptureBehaviour( void )\r
-{\r
-struct bpf_program xFilterCode;\r
-const long lMinBytesToCopy = 10L, lBlocking = 0L;\r
-unsigned long ulNetMask;\r
-\r
-       /* Unblock a read as soon as anything is received. */\r
-       pcap_setmintocopy( pxOpenedInterfaceHandle, lMinBytesToCopy );\r
-\r
-       /* Allow blocking. */\r
-       pcap_setnonblock( pxOpenedInterfaceHandle, lBlocking, cErrorBuffer );\r
-\r
-       /* Set up a filter so only the packets of interest are passed to the uIP\r
-       stack.  cErrorBuffer is used for convenience to create the string.  Don't\r
-       confuse this with an error message. */\r
-       sprintf( cErrorBuffer, "broadcast or multicast or host %d.%d.%d.%d", configIP_ADDR0, configIP_ADDR1, configIP_ADDR2, configIP_ADDR3 );\r
-\r
-       ulNetMask = ( configNET_MASK3 << 24UL ) | ( configNET_MASK2 << 16UL ) | ( configNET_MASK1 << 8L ) | configNET_MASK0;\r
-\r
-       if( pcap_compile(pxOpenedInterfaceHandle, &xFilterCode, cErrorBuffer, 1, ulNetMask ) < 0 )\r
-    {\r
-        printf("\r\nThe packet filter string is invalid\r\n" );\r
-    }\r
-       else\r
-       {    \r
-               if( pcap_setfilter( pxOpenedInterfaceHandle, &xFilterCode ) < 0 )\r
-               {\r
-                       printf( "\r\nAn error occurred setting the packet filter.\r\n" );\r
-               }\r
-       }\r
-\r
-       /* Create a task that simulates an interrupt in a real system.  This will\r
-       block waiting for packets, then send a message to the uIP task when data\r
-       is available. */\r
-       xTaskCreate( prvInterruptSimulator, ( signed char * ) "MAC_ISR", configMINIMAL_STACK_SIZE, NULL, ( configuIP_TASK_PRIORITY - 1 ), NULL );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvInterruptSimulator( void *pvParameters )\r
-{\r
-static struct pcap_pkthdr *pxHeader;\r
-const unsigned char *pucPacketData;\r
-extern QueueHandle_t xEMACEventQueue;\r
-const unsigned long ulRxEvent = uipETHERNET_RX_EVENT;\r
-long lResult;\r
-\r
-       /* Just to kill the compiler warning. */\r
-       ( void ) pvParameters;\r
-\r
-       for( ;; )\r
-       {\r
-               /* Get the next packet. */\r
-               lResult = pcap_next_ex( pxOpenedInterfaceHandle, &pxHeader, &pucPacketData );\r
-               if( lResult )\r
-               {\r
-                       /* Is the next buffer into which data should be placed free? */\r
-                       if( lLengthOfDataInBuffer[ ucNextBufferToFill ] == 0L )\r
-                       {\r
-                               /* Copy the data from the captured packet into the buffer. */\r
-                               memcpy( pucEthernetBufferPointers[ ucNextBufferToFill ], pucPacketData, pxHeader->len );\r
-\r
-                               /* Note the amount of data that was copied. */\r
-                               lLengthOfDataInBuffer[ ucNextBufferToFill ] = pxHeader->len;\r
-\r
-                               /* Move onto the next buffer, wrapping around if necessary. */\r
-                               ucNextBufferToFill++;\r
-                               if( ucNextBufferToFill >= archNUM_BUFFER_POINTERS )\r
-                               {\r
-                                       ucNextBufferToFill = 0U;\r
-                               }\r
-\r
-                               /* Data was received and stored.  Send a message to the uIP task\r
-                               to let it know. */\r
-                               xQueueSendToBack( xEMACEventQueue, &ulRxEvent, portMAX_DELAY );\r
-                       }\r
-               }\r
-       }\r
-}\r
-\r
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WinPCap/bittypes.h b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WinPCap/bittypes.h
deleted file mode 100644 (file)
index f55fcec..0000000
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Copyright (C) 1999 WIDE Project.
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the project nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-#ifndef _BITTYPES_H
-#define _BITTYPES_H
-
-#ifndef HAVE_U_INT8_T
-
-#if SIZEOF_CHAR == 1
-typedef unsigned char u_int8_t;
-typedef signed char _int8_t;
-#elif SIZEOF_INT == 1
-typedef unsigned int u_int8_t;
-typedef signed int int8_t;
-#else  /* XXX */
-#error "there's no appropriate type for u_int8_t"
-#endif
-#define HAVE_U_INT8_T 1
-#define HAVE_INT8_T 1
-
-#endif /* HAVE_U_INT8_T */
-
-#ifndef HAVE_U_INT16_T 
-
-#if SIZEOF_SHORT == 2
-typedef unsigned short u_int16_t;
-typedef signed short _int16_t;
-#elif SIZEOF_INT == 2
-typedef unsigned int u_int16_t;
-typedef signed int int16_t;
-#elif SIZEOF_CHAR == 2
-typedef unsigned char u_int16_t;
-typedef signed char int16_t;
-#else  /* XXX */
-#error "there's no appropriate type for u_int16_t"
-#endif
-#define HAVE_U_INT16_T 1
-#define HAVE_INT16_T 1
-
-#endif /* HAVE_U_INT16_T */
-
-#ifndef HAVE_U_INT32_T
-
-#if SIZEOF_INT == 4
-typedef unsigned int u_int32_t;
-typedef signed int _int32_t;
-#elif SIZEOF_LONG == 4
-typedef unsigned long u_int32_t;
-typedef signed long int32_t;
-#elif SIZEOF_SHORT == 4
-typedef unsigned short u_int32_t;
-typedef signed short int32_t;
-#else  /* XXX */
-#error "there's no appropriate type for u_int32_t"
-#endif
-#define HAVE_U_INT32_T 1
-#define HAVE_INT32_T 1
-
-#endif /* HAVE_U_INT32_T */
-
-#ifndef HAVE_U_INT64_T
-#if SIZEOF_LONG_LONG == 8
-typedef unsigned long long u_int64_t;
-typedef long long int64_t;
-#elif defined(_MSC_EXTENSIONS)
-typedef unsigned _int64 u_int64_t;
-typedef _int64 int64_t;
-#elif SIZEOF_INT == 8
-typedef unsigned int u_int64_t;
-#elif SIZEOF_LONG == 8
-typedef unsigned long u_int64_t;
-#elif SIZEOF_SHORT == 8
-typedef unsigned short u_int64_t;
-#else  /* XXX */
-#error "there's no appropriate type for u_int64_t"
-#endif
-
-#endif /* HAVE_U_INT64_T */
-
-#ifndef PRId64
-#ifdef _MSC_EXTENSIONS
-#define PRId64 "I64d"
-#else /* _MSC_EXTENSIONS */
-#define PRId64 "lld"
-#endif /* _MSC_EXTENSIONS */
-#endif /* PRId64 */
-
-#ifndef PRIo64
-#ifdef _MSC_EXTENSIONS
-#define PRIo64 "I64o"
-#else /* _MSC_EXTENSIONS */
-#define PRIo64 "llo"
-#endif /* _MSC_EXTENSIONS */
-#endif /* PRIo64 */
-
-#ifndef PRIx64
-#ifdef _MSC_EXTENSIONS
-#define PRIx64 "I64x"
-#else /* _MSC_EXTENSIONS */
-#define PRIx64 "llx"
-#endif /* _MSC_EXTENSIONS */
-#endif /* PRIx64 */
-
-#ifndef PRIu64
-#ifdef _MSC_EXTENSIONS
-#define PRIu64 "I64u"
-#else /* _MSC_EXTENSIONS */
-#define PRIu64 "llu"
-#endif /* _MSC_EXTENSIONS */
-#endif /* PRIu64 */
-
-#endif /* _BITTYPES_H */
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WinPCap/ip6_misc.h b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WinPCap/ip6_misc.h
deleted file mode 100644 (file)
index 562fa61..0000000
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- * Copyright (c) 1993, 1994, 1997
- *     The Regents of the University of California.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that: (1) source code distributions
- * retain the above copyright notice and this paragraph in its entirety, (2)
- * distributions including binary code include the above copyright notice and
- * this paragraph in its entirety in the documentation or other materials
- * provided with the distribution, and (3) all advertising materials mentioning
- * features or use of this software display the following acknowledgement:
- * ``This product includes software developed by the University of California,
- * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
- * the University nor the names of its contributors may be used to endorse
- * or promote products derived from this software without specific prior
- * written permission.
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- *
- * @(#) $Header: /tcpdump/master/libpcap/Win32/Include/ip6_misc.h,v 1.5 2006-01-22 18:02:18 gianluca Exp $ (LBL)
- */
-
-/*
- * This file contains a collage of declarations for IPv6 from FreeBSD not present in Windows
- */
-
-#include <winsock2.h>
-
-#include <ws2tcpip.h>
-
-#ifndef __MINGW32__
-#define        IN_MULTICAST(a)         IN_CLASSD(a)
-#endif
-
-#define        IN_EXPERIMENTAL(a)      ((((u_int32_t) (a)) & 0xf0000000) == 0xf0000000)
-
-#define        IN_LOOPBACKNET          127
-
-#if defined(__MINGW32__) && defined(DEFINE_ADDITIONAL_IPV6_STUFF)
-/* IPv6 address */
-struct in6_addr
-  {
-    union
-      {
-       u_int8_t                u6_addr8[16];
-       u_int16_t       u6_addr16[8];
-       u_int32_t       u6_addr32[4];
-      } in6_u;
-#define s6_addr                        in6_u.u6_addr8
-#define s6_addr16              in6_u.u6_addr16
-#define s6_addr32              in6_u.u6_addr32
-#define s6_addr64              in6_u.u6_addr64
-  };
-
-#define IN6ADDR_ANY_INIT { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }
-#define IN6ADDR_LOOPBACK_INIT { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 }
-#endif /* __MINGW32__ */
-
-
-#if (defined _MSC_VER) || (defined(__MINGW32__) && defined(DEFINE_ADDITIONAL_IPV6_STUFF))
-typedef unsigned short sa_family_t;
-#endif
-
-
-#if defined(__MINGW32__) && defined(DEFINE_ADDITIONAL_IPV6_STUFF)
-
-#define        __SOCKADDR_COMMON(sa_prefix) \
-  sa_family_t sa_prefix##family
-
-/* Ditto, for IPv6.  */
-struct sockaddr_in6
-  {
-    __SOCKADDR_COMMON (sin6_);
-    u_int16_t sin6_port;               /* Transport layer port # */
-    u_int32_t sin6_flowinfo;   /* IPv6 flow information */
-    struct in6_addr sin6_addr; /* IPv6 address */
-  };
-
-#define IN6_IS_ADDR_V4MAPPED(a) \
-       ((((u_int32_t *) (a))[0] == 0) && (((u_int32_t *) (a))[1] == 0) && \
-        (((u_int32_t *) (a))[2] == htonl (0xffff)))
-
-#define IN6_IS_ADDR_MULTICAST(a) (((u_int8_t *) (a))[0] == 0xff)
-
-#define IN6_IS_ADDR_LINKLOCAL(a) \
-       ((((u_int32_t *) (a))[0] & htonl (0xffc00000)) == htonl (0xfe800000))
-
-#define IN6_IS_ADDR_LOOPBACK(a) \
-       (((u_int32_t *) (a))[0] == 0 && ((u_int32_t *) (a))[1] == 0 && \
-        ((u_int32_t *) (a))[2] == 0 && ((u_int32_t *) (a))[3] == htonl (1))
-#endif /* __MINGW32__ */
-
-#define ip6_vfc   ip6_ctlun.ip6_un2_vfc
-#define ip6_flow  ip6_ctlun.ip6_un1.ip6_un1_flow
-#define ip6_plen  ip6_ctlun.ip6_un1.ip6_un1_plen
-#define ip6_nxt   ip6_ctlun.ip6_un1.ip6_un1_nxt
-#define ip6_hlim  ip6_ctlun.ip6_un1.ip6_un1_hlim
-#define ip6_hops  ip6_ctlun.ip6_un1.ip6_un1_hlim
-
-#define nd_rd_type               nd_rd_hdr.icmp6_type
-#define nd_rd_code               nd_rd_hdr.icmp6_code
-#define nd_rd_cksum              nd_rd_hdr.icmp6_cksum
-#define nd_rd_reserved           nd_rd_hdr.icmp6_data32[0]
-
-/*
- *     IPV6 extension headers
- */
-#define IPPROTO_HOPOPTS                0       /* IPv6 hop-by-hop options      */
-#define IPPROTO_IPV6           41  /* IPv6 header.  */
-#define IPPROTO_ROUTING                43      /* IPv6 routing header          */
-#define IPPROTO_FRAGMENT       44      /* IPv6 fragmentation header    */
-#define IPPROTO_ESP            50      /* encapsulating security payload */
-#define IPPROTO_AH             51      /* authentication header        */
-#define IPPROTO_ICMPV6         58      /* ICMPv6                       */
-#define IPPROTO_NONE           59      /* IPv6 no next header          */
-#define IPPROTO_DSTOPTS                60      /* IPv6 destination options     */
-#define IPPROTO_PIM                    103 /* Protocol Independent Multicast.  */
-
-#define         IPV6_RTHDR_TYPE_0 0
-
-/* Option types and related macros */
-#define IP6OPT_PAD1            0x00    /* 00 0 00000 */
-#define IP6OPT_PADN            0x01    /* 00 0 00001 */
-#define IP6OPT_JUMBO           0xC2    /* 11 0 00010 = 194 */
-#define IP6OPT_JUMBO_LEN       6
-#define IP6OPT_ROUTER_ALERT    0x05    /* 00 0 00101 */
-
-#define IP6OPT_RTALERT_LEN     4
-#define IP6OPT_RTALERT_MLD     0       /* Datagram contains an MLD message */
-#define IP6OPT_RTALERT_RSVP    1       /* Datagram contains an RSVP message */
-#define IP6OPT_RTALERT_ACTNET  2       /* contains an Active Networks msg */
-#define IP6OPT_MINLEN          2
-
-#define IP6OPT_BINDING_UPDATE  0xc6    /* 11 0 00110 */
-#define IP6OPT_BINDING_ACK     0x07    /* 00 0 00111 */
-#define IP6OPT_BINDING_REQ     0x08    /* 00 0 01000 */
-#define IP6OPT_HOME_ADDRESS    0xc9    /* 11 0 01001 */
-#define IP6OPT_EID             0x8a    /* 10 0 01010 */
-
-#define IP6OPT_TYPE(o)         ((o) & 0xC0)
-#define IP6OPT_TYPE_SKIP       0x00
-#define IP6OPT_TYPE_DISCARD    0x40
-#define IP6OPT_TYPE_FORCEICMP  0x80
-#define IP6OPT_TYPE_ICMP       0xC0
-
-#define IP6OPT_MUTABLE         0x20
-
-
-#if defined(__MINGW32__) && defined(DEFINE_ADDITIONAL_IPV6_STUFF)
-#ifndef EAI_ADDRFAMILY
-struct addrinfo {
-       int     ai_flags;       /* AI_PASSIVE, AI_CANONNAME */
-       int     ai_family;      /* PF_xxx */
-       int     ai_socktype;    /* SOCK_xxx */
-       int     ai_protocol;    /* 0 or IPPROTO_xxx for IPv4 and IPv6 */
-       size_t  ai_addrlen;     /* length of ai_addr */
-       char    *ai_canonname;  /* canonical name for hostname */
-       struct sockaddr *ai_addr;       /* binary address */
-       struct addrinfo *ai_next;       /* next structure in linked list */
-};
-#endif
-#endif /* __MINGW32__ */
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WinPCap/netif.h b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WinPCap/netif.h
deleted file mode 100644 (file)
index 8fe5393..0000000
+++ /dev/null
@@ -1,52 +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
-#ifndef NET_IF_H\r
-#define NET_IF_H\r
-\r
-/*\r
- * Send uip_len bytes from uip_buf to the network interface selected by the \r
- * configNETWORK_INTERFACE_TO_USE constant (defined in FreeRTOSConfig.h). \r
- */\r
-void vNetifTx( void );\r
-\r
-/*\r
- * Receive bytes from the network interface selected by the \r
- * configNETWORK_INTERFACE_TO_USE constant (defined in FreeRTOSConfig.h).  The\r
- * bytes are placed in uip_buf.  The number of bytes copied into uip_buf is\r
- * returned.\r
- */\r
-UBaseType_t uxNetifRx( void );\r
-\r
-/*\r
- * Prepare a packet capture session.  This will print out all the network \r
- * interfaces available, and the one actually used is set by the \r
- * configNETWORK_INTERFACE_TO_USE constant that is defined in \r
- * FreeRTOSConfig.h. */\r
-BaseType_t xNetifInit( void );\r
-\r
-#endif /* NET_IF_H */\r
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WinPCap/pcap-bpf.h b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WinPCap/pcap-bpf.h
deleted file mode 100644 (file)
index 5fe129d..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/*-
- * Copyright (c) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from the Stanford/CMU enet packet filter,
- * (net/enet.c) distributed as part of 4.3BSD, and code contributed
- * to Berkeley by Steven McCanne and Van Jacobson both of Lawrence 
- * Berkeley Laboratory.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *      This product includes software developed by the University of
- *      California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#) $Header: /tcpdump/master/libpcap/pcap-bpf.h,v 1.50 2007/04/01 21:43:55 guy Exp $ (LBL)
- */
-
-/*
- * For backwards compatibility.
- *
- * Note to OS vendors: do NOT get rid of this file!  Some applications
- * might expect to be able to include <pcap-bpf.h>.
- */
-#include <pcap/bpf.h>
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WinPCap/pcap-namedb.h b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WinPCap/pcap-namedb.h
deleted file mode 100644 (file)
index 80a2f00..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (c) 1994, 1996
- *     The Regents of the University of California.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the Computer Systems
- *     Engineering Group at Lawrence Berkeley Laboratory.
- * 4. Neither the name of the University nor of the Laboratory may be used
- *    to endorse or promote products derived from this software without
- *    specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#) $Header: /tcpdump/master/libpcap/pcap-namedb.h,v 1.13 2006/10/04 18:13:32 guy Exp $ (LBL)
- */
-
-/*
- * For backwards compatibility.
- *
- * Note to OS vendors: do NOT get rid of this file!  Some applications
- * might expect to be able to include <pcap-namedb.h>.
- */
-#include <pcap/namedb.h>
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WinPCap/pcap-stdinc.h b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WinPCap/pcap-stdinc.h
deleted file mode 100644 (file)
index cbd62d1..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-/*\r
- * Copyright (c) 2002 - 2005 NetGroup, Politecnico di Torino (Italy)\r
- * Copyright (c) 2005 - 2009 CACE Technologies, Inc. Davis (California)\r
- * All rights reserved.\r
- *\r
- * Redistribution and use in source and binary forms, with or without\r
- * modification, are permitted provided that the following conditions\r
- * are met:\r
- *\r
- * 1. Redistributions of source code must retain the above copyright\r
- * notice, this list of conditions and the following disclaimer.\r
- * 2. Redistributions in binary form must reproduce the above copyright\r
- * notice, this list of conditions and the following disclaimer in the\r
- * documentation and/or other materials provided with the distribution.\r
- * 3. Neither the name of the Politecnico di Torino nor the names of its\r
- * contributors may be used to endorse or promote products derived from\r
- * this software without specific prior written permission.\r
- *\r
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
- *\r
- * @(#) $Header: /tcpdump/master/libpcap/pcap-stdinc.h,v 1.10.2.1 2008-10-06 15:38:39 gianluca Exp $ (LBL)\r
- */\r
-\r
-#define SIZEOF_CHAR 1\r
-#define SIZEOF_SHORT 2\r
-#define SIZEOF_INT 4\r
-#ifndef _MSC_EXTENSIONS\r
-#define SIZEOF_LONG_LONG 8\r
-#endif\r
-\r
-/*\r
- * Avoids a compiler warning in case this was already defined      \r
- * (someone defined _WINSOCKAPI_ when including 'windows.h', in order\r
- * to prevent it from including 'winsock.h')\r
- */\r
-#ifdef _WINSOCKAPI_\r
-#undef _WINSOCKAPI_\r
-#endif\r
-#include <winsock2.h>\r
-\r
-#include <fcntl.h>\r
-\r
-#include "bittypes.h"\r
-#include <time.h>\r
-#include <io.h>\r
-\r
-#ifndef __MINGW32__\r
-#include "IP6_misc.h"\r
-#endif\r
-\r
-#define caddr_t char*\r
-\r
-#if _MSC_VER < 1500\r
-#define snprintf _snprintf\r
-#define vsnprintf _vsnprintf\r
-#define strdup _strdup\r
-#endif\r
-\r
-#define inline __inline \r
-\r
-#ifdef __MINGW32__\r
-#include <stdint.h>\r
-#else /*__MINGW32__*/\r
-/* MSVC compiler */\r
-#ifndef _UINTPTR_T_DEFINED\r
-#ifdef  _WIN64\r
-typedef unsigned __int64    uintptr_t;\r
-#else\r
-typedef _W64 unsigned int   uintptr_t;\r
-#endif\r
-#define _UINTPTR_T_DEFINED\r
-#endif\r
-\r
-#ifndef _INTPTR_T_DEFINED\r
-#ifdef  _WIN64\r
-typedef __int64    intptr_t;\r
-#else\r
-typedef _W64 int   intptr_t;\r
-#endif\r
-#define _INTPTR_T_DEFINED\r
-#endif \r
-\r
-#endif /*__MINGW32__*/\r
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WinPCap/pcap.h b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WinPCap/pcap.h
deleted file mode 100644 (file)
index 935f949..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (c) 1993, 1994, 1995, 1996, 1997
- *     The Regents of the University of California.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the Computer Systems
- *     Engineering Group at Lawrence Berkeley Laboratory.
- * 4. Neither the name of the University nor of the Laboratory may be used
- *    to endorse or promote products derived from this software without
- *    specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#) $Header: /tcpdump/master/libpcap/pcap.h,v 1.59 2006/10/04 18:09:22 guy Exp $ (LBL)
- */
-
-/*
- * For backwards compatibility.
- *
- * Note to OS vendors: do NOT get rid of this file!  Many applications
- * expect to be able to include <pcap.h>, and at least some of them
- * go through contortions in their configure scripts to try to detect
- * OSes that have "helpfully" moved pcap.h to <pcap/pcap.h> without
- * leaving behind a <pcap.h> file.
- */
-#include <pcap/pcap.h>
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WinPCap/pcap/bluetooth.h b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WinPCap/pcap/bluetooth.h
deleted file mode 100644 (file)
index 7bf65df..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 2006 Paolo Abeni (Italy)
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote 
- * products derived from this software without specific prior written 
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * bluetooth data struct
- * By Paolo Abeni <paolo.abeni@email.it>
- *
- * @(#) $Header: /tcpdump/master/libpcap/pcap/bluetooth.h,v 1.1 2007/09/22 02:10:17 guy Exp $
- */
-#ifndef _PCAP_BLUETOOTH_STRUCTS_H__
-#define _PCAP_BLUETOOTH_STRUCTS_H__
-
-/*
- * Header prepended libpcap to each bluetooth h:4 frame.
- * fields are in network byte order
- */
-typedef struct _pcap_bluetooth_h4_header {
-       u_int32_t direction; /* if first bit is set direction is incoming */
-} pcap_bluetooth_h4_header;
-
-
-#endif
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WinPCap/pcap/bpf.h b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WinPCap/pcap/bpf.h
deleted file mode 100644 (file)
index 9f4ca33..0000000
+++ /dev/null
@@ -1,934 +0,0 @@
-/*-
- * Copyright (c) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from the Stanford/CMU enet packet filter,
- * (net/enet.c) distributed as part of 4.3BSD, and code contributed
- * to Berkeley by Steven McCanne and Van Jacobson both of Lawrence 
- * Berkeley Laboratory.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *      This product includes software developed by the University of
- *      California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *      @(#)bpf.h       7.1 (Berkeley) 5/7/91
- *
- * @(#) $Header: /tcpdump/master/libpcap/pcap/bpf.h,v 1.19.2.8 2008-09-22 20:16:01 guy Exp $ (LBL)
- */
-
-/*
- * This is libpcap's cut-down version of bpf.h; it includes only
- * the stuff needed for the code generator and the userland BPF
- * interpreter, and the libpcap APIs for setting filters, etc..
- *
- * "pcap-bpf.c" will include the native OS version, as it deals with
- * the OS's BPF implementation.
- *
- * XXX - should this all just be moved to "pcap.h"?
- */
-
-#ifndef BPF_MAJOR_VERSION
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* BSD style release date */
-#define BPF_RELEASE 199606
-
-#ifdef MSDOS /* must be 32-bit */
-typedef long          bpf_int32;
-typedef unsigned long bpf_u_int32;
-#else
-typedef        int bpf_int32;
-typedef        u_int bpf_u_int32;
-#endif
-
-/*
- * Alignment macros.  BPF_WORDALIGN rounds up to the next 
- * even multiple of BPF_ALIGNMENT. 
- */
-#ifndef __NetBSD__
-#define BPF_ALIGNMENT sizeof(bpf_int32)
-#else
-#define BPF_ALIGNMENT sizeof(long)
-#endif
-#define BPF_WORDALIGN(x) (((x)+(BPF_ALIGNMENT-1))&~(BPF_ALIGNMENT-1))
-
-#define BPF_MAXBUFSIZE 0x8000
-#define BPF_MINBUFSIZE 32
-
-/*
- * Structure for "pcap_compile()", "pcap_setfilter()", etc..
- */
-struct bpf_program {
-       u_int bf_len;
-       struct bpf_insn *bf_insns;
-};
-/*
- * Struct return by BIOCVERSION.  This represents the version number of 
- * the filter language described by the instruction encodings below.
- * bpf understands a program iff kernel_major == filter_major &&
- * kernel_minor >= filter_minor, that is, if the value returned by the
- * running kernel has the same major number and a minor number equal
- * equal to or less than the filter being downloaded.  Otherwise, the
- * results are undefined, meaning an error may be returned or packets
- * may be accepted haphazardly.
- * It has nothing to do with the source code version.
- */
-struct bpf_version {
-       u_short bv_major;
-       u_short bv_minor;
-};
-/* Current version number of filter architecture. */
-#define BPF_MAJOR_VERSION 1
-#define BPF_MINOR_VERSION 1
-
-/*
- * Data-link level type codes.
- *
- * Do *NOT* add new values to this list without asking
- * "tcpdump-workers@lists.tcpdump.org" for a value.  Otherwise, you run
- * the risk of using a value that's already being used for some other
- * purpose, and of having tools that read libpcap-format captures not
- * being able to handle captures with your new DLT_ value, with no hope
- * that they will ever be changed to do so (as that would destroy their
- * ability to read captures using that value for that other purpose).
- */
-
-/*
- * These are the types that are the same on all platforms, and that
- * have been defined by <net/bpf.h> for ages.
- */
-#define DLT_NULL       0       /* BSD loopback encapsulation */
-#define DLT_EN10MB     1       /* Ethernet (10Mb) */
-#define DLT_EN3MB      2       /* Experimental Ethernet (3Mb) */
-#define DLT_AX25       3       /* Amateur Radio AX.25 */
-#define DLT_PRONET     4       /* Proteon ProNET Token Ring */
-#define DLT_CHAOS      5       /* Chaos */
-#define DLT_IEEE802    6       /* 802.5 Token Ring */
-#define DLT_ARCNET     7       /* ARCNET, with BSD-style header */
-#define DLT_SLIP       8       /* Serial Line IP */
-#define DLT_PPP                9       /* Point-to-point Protocol */
-#define DLT_FDDI       10      /* FDDI */
-
-/*
- * These are types that are different on some platforms, and that
- * have been defined by <net/bpf.h> for ages.  We use #ifdefs to
- * detect the BSDs that define them differently from the traditional
- * libpcap <net/bpf.h>
- *
- * XXX - DLT_ATM_RFC1483 is 13 in BSD/OS, and DLT_RAW is 14 in BSD/OS,
- * but I don't know what the right #define is for BSD/OS.
- */
-#define DLT_ATM_RFC1483        11      /* LLC-encapsulated ATM */
-
-#ifdef __OpenBSD__
-#define DLT_RAW                14      /* raw IP */
-#else
-#define DLT_RAW                12      /* raw IP */
-#endif
-
-/*
- * Given that the only OS that currently generates BSD/OS SLIP or PPP
- * is, well, BSD/OS, arguably everybody should have chosen its values
- * for DLT_SLIP_BSDOS and DLT_PPP_BSDOS, which are 15 and 16, but they
- * didn't.  So it goes.
- */
-#if defined(__NetBSD__) || defined(__FreeBSD__)
-#ifndef DLT_SLIP_BSDOS
-#define DLT_SLIP_BSDOS 13      /* BSD/OS Serial Line IP */
-#define DLT_PPP_BSDOS  14      /* BSD/OS Point-to-point Protocol */
-#endif
-#else
-#define DLT_SLIP_BSDOS 15      /* BSD/OS Serial Line IP */
-#define DLT_PPP_BSDOS  16      /* BSD/OS Point-to-point Protocol */
-#endif
-
-/*
- * 17 is used for DLT_OLD_PFLOG in OpenBSD;
- *     OBSOLETE: DLT_PFLOG is 117 in OpenBSD now as well. See below.
- * 18 is used for DLT_PFSYNC in OpenBSD; don't use it for anything else.
- */
-
-#define DLT_ATM_CLIP   19      /* Linux Classical-IP over ATM */
-
-/*
- * Apparently Redback uses this for its SmartEdge 400/800.  I hope
- * nobody else decided to use it, too.
- */
-#define DLT_REDBACK_SMARTEDGE  32
-
-/*
- * These values are defined by NetBSD; other platforms should refrain from
- * using them for other purposes, so that NetBSD savefiles with link
- * types of 50 or 51 can be read as this type on all platforms.
- */
-#define DLT_PPP_SERIAL 50      /* PPP over serial with HDLC encapsulation */
-#define DLT_PPP_ETHER  51      /* PPP over Ethernet */
-
-/*
- * The Axent Raptor firewall - now the Symantec Enterprise Firewall - uses
- * a link-layer type of 99 for the tcpdump it supplies.  The link-layer
- * header has 6 bytes of unknown data, something that appears to be an
- * Ethernet type, and 36 bytes that appear to be 0 in at least one capture
- * I've seen.
- */
-#define DLT_SYMANTEC_FIREWALL  99
-
-/*
- * Values between 100 and 103 are used in capture file headers as
- * link-layer types corresponding to DLT_ types that differ
- * between platforms; don't use those values for new DLT_ new types.
- */
-
-/*
- * This value was defined by libpcap 0.5; platforms that have defined
- * it with a different value should define it here with that value -
- * a link type of 104 in a save file will be mapped to DLT_C_HDLC,
- * whatever value that happens to be, so programs will correctly
- * handle files with that link type regardless of the value of
- * DLT_C_HDLC.
- *
- * The name DLT_C_HDLC was used by BSD/OS; we use that name for source
- * compatibility with programs written for BSD/OS.
- *
- * libpcap 0.5 defined it as DLT_CHDLC; we define DLT_CHDLC as well,
- * for source compatibility with programs written for libpcap 0.5.
- */
-#define DLT_C_HDLC     104     /* Cisco HDLC */
-#define DLT_CHDLC      DLT_C_HDLC
-
-#define DLT_IEEE802_11 105     /* IEEE 802.11 wireless */
-
-/*
- * 106 is reserved for Linux Classical IP over ATM; it's like DLT_RAW,
- * except when it isn't.  (I.e., sometimes it's just raw IP, and
- * sometimes it isn't.)  We currently handle it as DLT_LINUX_SLL,
- * so that we don't have to worry about the link-layer header.)
- */
-
-/*
- * Frame Relay; BSD/OS has a DLT_FR with a value of 11, but that collides
- * with other values.
- * DLT_FR and DLT_FRELAY packets start with the Q.922 Frame Relay header
- * (DLCI, etc.).
- */
-#define DLT_FRELAY     107
-
-/*
- * OpenBSD DLT_LOOP, for loopback devices; it's like DLT_NULL, except
- * that the AF_ type in the link-layer header is in network byte order.
- *
- * DLT_LOOP is 12 in OpenBSD, but that's DLT_RAW in other OSes, so
- * we don't use 12 for it in OSes other than OpenBSD.
- */
-#ifdef __OpenBSD__
-#define DLT_LOOP       12
-#else
-#define DLT_LOOP       108
-#endif
-
-/*
- * Encapsulated packets for IPsec; DLT_ENC is 13 in OpenBSD, but that's
- * DLT_SLIP_BSDOS in NetBSD, so we don't use 13 for it in OSes other
- * than OpenBSD.
- */
-#ifdef __OpenBSD__
-#define DLT_ENC                13
-#else
-#define DLT_ENC                109
-#endif
-
-/*
- * Values between 110 and 112 are reserved for use in capture file headers
- * as link-layer types corresponding to DLT_ types that might differ
- * between platforms; don't use those values for new DLT_ types
- * other than the corresponding DLT_ types.
- */
-
-/*
- * This is for Linux cooked sockets.
- */
-#define DLT_LINUX_SLL  113
-
-/*
- * Apple LocalTalk hardware.
- */
-#define DLT_LTALK      114
-
-/*
- * Acorn Econet.
- */
-#define DLT_ECONET     115
-
-/*
- * Reserved for use with OpenBSD ipfilter.
- */
-#define DLT_IPFILTER   116
-
-/*
- * OpenBSD DLT_PFLOG; DLT_PFLOG is 17 in OpenBSD, but that's DLT_LANE8023
- * in SuSE 6.3, so we can't use 17 for it in capture-file headers.
- *
- * XXX: is there a conflict with DLT_PFSYNC 18 as well?
- */
-#ifdef __OpenBSD__
-#define DLT_OLD_PFLOG  17
-#define DLT_PFSYNC     18
-#endif
-#define DLT_PFLOG      117
-
-/*
- * Registered for Cisco-internal use.
- */
-#define DLT_CISCO_IOS  118
-
-/*
- * For 802.11 cards using the Prism II chips, with a link-layer
- * header including Prism monitor mode information plus an 802.11
- * header.
- */
-#define DLT_PRISM_HEADER       119
-
-/*
- * Reserved for Aironet 802.11 cards, with an Aironet link-layer header
- * (see Doug Ambrisko's FreeBSD patches).
- */
-#define DLT_AIRONET_HEADER     120
-
-/*
- * Reserved for Siemens HiPath HDLC.
- */
-#define DLT_HHDLC              121
-
-/*
- * This is for RFC 2625 IP-over-Fibre Channel.
- *
- * This is not for use with raw Fibre Channel, where the link-layer
- * header starts with a Fibre Channel frame header; it's for IP-over-FC,
- * where the link-layer header starts with an RFC 2625 Network_Header
- * field.
- */
-#define DLT_IP_OVER_FC         122
-
-/*
- * This is for Full Frontal ATM on Solaris with SunATM, with a
- * pseudo-header followed by an AALn PDU.
- *
- * There may be other forms of Full Frontal ATM on other OSes,
- * with different pseudo-headers.
- *
- * If ATM software returns a pseudo-header with VPI/VCI information
- * (and, ideally, packet type information, e.g. signalling, ILMI,
- * LANE, LLC-multiplexed traffic, etc.), it should not use
- * DLT_ATM_RFC1483, but should get a new DLT_ value, so tcpdump
- * and the like don't have to infer the presence or absence of a
- * pseudo-header and the form of the pseudo-header.
- */
-#define DLT_SUNATM             123     /* Solaris+SunATM */
-
-/* 
- * Reserved as per request from Kent Dahlgren <kent@praesum.com>
- * for private use.
- */
-#define DLT_RIO                 124     /* RapidIO */
-#define DLT_PCI_EXP             125     /* PCI Express */
-#define DLT_AURORA              126     /* Xilinx Aurora link layer */
-
-/*
- * Header for 802.11 plus a number of bits of link-layer information
- * including radio information, used by some recent BSD drivers as
- * well as the madwifi Atheros driver for Linux.
- */
-#define DLT_IEEE802_11_RADIO   127     /* 802.11 plus radiotap radio header */
-
-/*
- * Reserved for the TZSP encapsulation, as per request from
- * Chris Waters <chris.waters@networkchemistry.com>
- * TZSP is a generic encapsulation for any other link type,
- * which includes a means to include meta-information
- * with the packet, e.g. signal strength and channel
- * for 802.11 packets.
- */
-#define DLT_TZSP                128     /* Tazmen Sniffer Protocol */
-
-/*
- * BSD's ARCNET headers have the source host, destination host,
- * and type at the beginning of the packet; that's what's handed
- * up to userland via BPF.
- *
- * Linux's ARCNET headers, however, have a 2-byte offset field
- * between the host IDs and the type; that's what's handed up
- * to userland via PF_PACKET sockets.
- *
- * We therefore have to have separate DLT_ values for them.
- */
-#define DLT_ARCNET_LINUX       129     /* ARCNET */
-
-/*
- * Juniper-private data link types, as per request from
- * Hannes Gredler <hannes@juniper.net>.  The DLT_s are used
- * for passing on chassis-internal metainformation such as
- * QOS profiles, etc..
- */
-#define DLT_JUNIPER_MLPPP       130
-#define DLT_JUNIPER_MLFR        131
-#define DLT_JUNIPER_ES          132
-#define DLT_JUNIPER_GGSN        133
-#define DLT_JUNIPER_MFR         134
-#define DLT_JUNIPER_ATM2        135
-#define DLT_JUNIPER_SERVICES    136
-#define DLT_JUNIPER_ATM1        137
-
-/*
- * Apple IP-over-IEEE 1394, as per a request from Dieter Siegmund
- * <dieter@apple.com>.  The header that's presented is an Ethernet-like
- * header:
- *
- *     #define FIREWIRE_EUI64_LEN      8
- *     struct firewire_header {
- *             u_char  firewire_dhost[FIREWIRE_EUI64_LEN];
- *             u_char  firewire_shost[FIREWIRE_EUI64_LEN];
- *             u_short firewire_type;
- *     };
- *
- * with "firewire_type" being an Ethernet type value, rather than,
- * for example, raw GASP frames being handed up.
- */
-#define DLT_APPLE_IP_OVER_IEEE1394     138
-
-/*
- * Various SS7 encapsulations, as per a request from Jeff Morriss
- * <jeff.morriss[AT]ulticom.com> and subsequent discussions.
- */
-#define DLT_MTP2_WITH_PHDR     139     /* pseudo-header with various info, followed by MTP2 */
-#define DLT_MTP2               140     /* MTP2, without pseudo-header */
-#define DLT_MTP3               141     /* MTP3, without pseudo-header or MTP2 */
-#define DLT_SCCP               142     /* SCCP, without pseudo-header or MTP2 or MTP3 */
-
-/*
- * DOCSIS MAC frames.
- */
-#define DLT_DOCSIS             143
-
-/*
- * Linux-IrDA packets. Protocol defined at http://www.irda.org.
- * Those packets include IrLAP headers and above (IrLMP...), but
- * don't include Phy framing (SOF/EOF/CRC & byte stuffing), because Phy
- * framing can be handled by the hardware and depend on the bitrate.
- * This is exactly the format you would get capturing on a Linux-IrDA
- * interface (irdaX), but not on a raw serial port.
- * Note the capture is done in "Linux-cooked" mode, so each packet include
- * a fake packet header (struct sll_header). This is because IrDA packet
- * decoding is dependant on the direction of the packet (incomming or
- * outgoing).
- * When/if other platform implement IrDA capture, we may revisit the
- * issue and define a real DLT_IRDA...
- * Jean II
- */
-#define DLT_LINUX_IRDA         144
-
-/*
- * Reserved for IBM SP switch and IBM Next Federation switch.
- */
-#define DLT_IBM_SP             145
-#define DLT_IBM_SN             146
-
-/*
- * Reserved for private use.  If you have some link-layer header type
- * that you want to use within your organization, with the capture files
- * using that link-layer header type not ever be sent outside your
- * organization, you can use these values.
- *
- * No libpcap release will use these for any purpose, nor will any
- * tcpdump release use them, either.
- *
- * Do *NOT* use these in capture files that you expect anybody not using
- * your private versions of capture-file-reading tools to read; in
- * particular, do *NOT* use them in products, otherwise you may find that
- * people won't be able to use tcpdump, or snort, or Ethereal, or... to
- * read capture files from your firewall/intrusion detection/traffic
- * monitoring/etc. appliance, or whatever product uses that DLT_ value,
- * and you may also find that the developers of those applications will
- * not accept patches to let them read those files.
- *
- * Also, do not use them if somebody might send you a capture using them
- * for *their* private type and tools using them for *your* private type
- * would have to read them.
- *
- * Instead, ask "tcpdump-workers@lists.tcpdump.org" for a new DLT_ value,
- * as per the comment above, and use the type you're given.
- */
-#define DLT_USER0              147
-#define DLT_USER1              148
-#define DLT_USER2              149
-#define DLT_USER3              150
-#define DLT_USER4              151
-#define DLT_USER5              152
-#define DLT_USER6              153
-#define DLT_USER7              154
-#define DLT_USER8              155
-#define DLT_USER9              156
-#define DLT_USER10             157
-#define DLT_USER11             158
-#define DLT_USER12             159
-#define DLT_USER13             160
-#define DLT_USER14             161
-#define DLT_USER15             162
-
-/*
- * For future use with 802.11 captures - defined by AbsoluteValue
- * Systems to store a number of bits of link-layer information
- * including radio information:
- *
- *     http://www.shaftnet.org/~pizza/software/capturefrm.txt
- *
- * but it might be used by some non-AVS drivers now or in the
- * future.
- */
-#define DLT_IEEE802_11_RADIO_AVS 163   /* 802.11 plus AVS radio header */
-
-/*
- * Juniper-private data link type, as per request from
- * Hannes Gredler <hannes@juniper.net>.  The DLT_s are used
- * for passing on chassis-internal metainformation such as
- * QOS profiles, etc..
- */
-#define DLT_JUNIPER_MONITOR     164
-
-/*
- * Reserved for BACnet MS/TP.
- */
-#define DLT_BACNET_MS_TP       165
-
-/*
- * Another PPP variant as per request from Karsten Keil <kkeil@suse.de>.
- *
- * This is used in some OSes to allow a kernel socket filter to distinguish
- * between incoming and outgoing packets, on a socket intended to
- * supply pppd with outgoing packets so it can do dial-on-demand and
- * hangup-on-lack-of-demand; incoming packets are filtered out so they
- * don't cause pppd to hold the connection up (you don't want random
- * input packets such as port scans, packets from old lost connections,
- * etc. to force the connection to stay up).
- *
- * The first byte of the PPP header (0xff03) is modified to accomodate
- * the direction - 0x00 = IN, 0x01 = OUT.
- */
-#define DLT_PPP_PPPD           166
-
-/*
- * Names for backwards compatibility with older versions of some PPP
- * software; new software should use DLT_PPP_PPPD.
- */
-#define DLT_PPP_WITH_DIRECTION DLT_PPP_PPPD
-#define DLT_LINUX_PPP_WITHDIRECTION    DLT_PPP_PPPD
-
-/*
- * Juniper-private data link type, as per request from
- * Hannes Gredler <hannes@juniper.net>.  The DLT_s are used
- * for passing on chassis-internal metainformation such as
- * QOS profiles, cookies, etc..
- */
-#define DLT_JUNIPER_PPPOE       167
-#define DLT_JUNIPER_PPPOE_ATM   168
-
-#define DLT_GPRS_LLC           169     /* GPRS LLC */
-#define DLT_GPF_T              170     /* GPF-T (ITU-T G.7041/Y.1303) */
-#define DLT_GPF_F              171     /* GPF-F (ITU-T G.7041/Y.1303) */
-
-/*
- * Requested by Oolan Zimmer <oz@gcom.com> for use in Gcom's T1/E1 line
- * monitoring equipment.
- */
-#define DLT_GCOM_T1E1          172
-#define DLT_GCOM_SERIAL                173
-
-/*
- * Juniper-private data link type, as per request from
- * Hannes Gredler <hannes@juniper.net>.  The DLT_ is used
- * for internal communication to Physical Interface Cards (PIC)
- */
-#define DLT_JUNIPER_PIC_PEER    174
-
-/*
- * Link types requested by Gregor Maier <gregor@endace.com> of Endace
- * Measurement Systems.  They add an ERF header (see
- * http://www.endace.com/support/EndaceRecordFormat.pdf) in front of
- * the link-layer header.
- */
-#define DLT_ERF_ETH            175     /* Ethernet */
-#define DLT_ERF_POS            176     /* Packet-over-SONET */
-
-/*
- * Requested by Daniele Orlandi <daniele@orlandi.com> for raw LAPD
- * for vISDN (http://www.orlandi.com/visdn/).  Its link-layer header
- * includes additional information before the LAPD header, so it's
- * not necessarily a generic LAPD header.
- */
-#define DLT_LINUX_LAPD         177
-
-/*
- * Juniper-private data link type, as per request from
- * Hannes Gredler <hannes@juniper.net>. 
- * The DLT_ are used for prepending meta-information
- * like interface index, interface name
- * before standard Ethernet, PPP, Frelay & C-HDLC Frames
- */
-#define DLT_JUNIPER_ETHER       178
-#define DLT_JUNIPER_PPP         179
-#define DLT_JUNIPER_FRELAY      180
-#define DLT_JUNIPER_CHDLC       181
-
-/*
- * Multi Link Frame Relay (FRF.16)
- */
-#define DLT_MFR                 182
-
-/*
- * Juniper-private data link type, as per request from
- * Hannes Gredler <hannes@juniper.net>. 
- * The DLT_ is used for internal communication with a
- * voice Adapter Card (PIC)
- */
-#define DLT_JUNIPER_VP          183
-
-/*
- * Arinc 429 frames.
- * DLT_ requested by Gianluca Varenni <gianluca.varenni@cacetech.com>.
- * Every frame contains a 32bit A429 label.
- * More documentation on Arinc 429 can be found at
- * http://www.condoreng.com/support/downloads/tutorials/ARINCTutorial.pdf
- */
-#define DLT_A429                184
-
-/*
- * Arinc 653 Interpartition Communication messages.
- * DLT_ requested by Gianluca Varenni <gianluca.varenni@cacetech.com>.
- * Please refer to the A653-1 standard for more information.
- */
-#define DLT_A653_ICM            185
-
-/*
- * USB packets, beginning with a USB setup header; requested by
- * Paolo Abeni <paolo.abeni@email.it>.
- */
-#define DLT_USB                        186
-
-/*
- * Bluetooth HCI UART transport layer (part H:4); requested by
- * Paolo Abeni.
- */
-#define DLT_BLUETOOTH_HCI_H4   187
-
-/*
- * IEEE 802.16 MAC Common Part Sublayer; requested by Maria Cruz
- * <cruz_petagay@bah.com>.
- */
-#define DLT_IEEE802_16_MAC_CPS 188
-
-/*
- * USB packets, beginning with a Linux USB header; requested by
- * Paolo Abeni <paolo.abeni@email.it>.
- */
-#define DLT_USB_LINUX          189
-
-/*
- * Controller Area Network (CAN) v. 2.0B packets.
- * DLT_ requested by Gianluca Varenni <gianluca.varenni@cacetech.com>.
- * Used to dump CAN packets coming from a CAN Vector board.
- * More documentation on the CAN v2.0B frames can be found at
- * http://www.can-cia.org/downloads/?269
- */
-#define DLT_CAN20B              190
-
-/*
- * IEEE 802.15.4, with address fields padded, as is done by Linux
- * drivers; requested by Juergen Schimmer.
- */
-#define DLT_IEEE802_15_4_LINUX 191
-
-/*
- * Per Packet Information encapsulated packets.
- * DLT_ requested by Gianluca Varenni <gianluca.varenni@cacetech.com>.
- */
-#define DLT_PPI                        192
-
-/*
- * Header for 802.16 MAC Common Part Sublayer plus a radiotap radio header;
- * requested by Charles Clancy.
- */
-#define DLT_IEEE802_16_MAC_CPS_RADIO   193
-
-/*
- * Juniper-private data link type, as per request from
- * Hannes Gredler <hannes@juniper.net>. 
- * The DLT_ is used for internal communication with a
- * integrated service module (ISM).
- */
-#define DLT_JUNIPER_ISM         194
-
-/*
- * IEEE 802.15.4, exactly as it appears in the spec (no padding, no
- * nothing); requested by Mikko Saarnivala <mikko.saarnivala@sensinode.com>.
- */
-#define DLT_IEEE802_15_4       195
-
-/*
- * Various link-layer types, with a pseudo-header, for SITA
- * (http://www.sita.aero/); requested by Fulko Hew (fulko.hew@gmail.com).
- */
-#define DLT_SITA               196
-
-/*
- * Various link-layer types, with a pseudo-header, for Endace DAG cards;
- * encapsulates Endace ERF records.  Requested by Stephen Donnelly
- * <stephen@endace.com>.
- */
-#define DLT_ERF                        197
-
-/*
- * Special header prepended to Ethernet packets when capturing from a
- * u10 Networks board.  Requested by Phil Mulholland
- * <phil@u10networks.com>.
- */
-#define DLT_RAIF1              198
-
-/*
- * IPMB packet for IPMI, beginning with the I2C slave address, followed
- * by the netFn and LUN, etc..  Requested by Chanthy Toeung
- * <chanthy.toeung@ca.kontron.com>.
- */
-#define DLT_IPMB               199
-
-/*
- * Juniper-private data link type, as per request from
- * Hannes Gredler <hannes@juniper.net>. 
- * The DLT_ is used for capturing data on a secure tunnel interface.
- */
-#define DLT_JUNIPER_ST          200
-
-/*
- * Bluetooth HCI UART transport layer (part H:4), with pseudo-header
- * that includes direction information; requested by Paolo Abeni.
- */
-#define DLT_BLUETOOTH_HCI_H4_WITH_PHDR 201
-
-/*
- * AX.25 packet with a 1-byte KISS header; see
- *
- *     http://www.ax25.net/kiss.htm
- *
- * as per Richard Stearn <richard@rns-stearn.demon.co.uk>.
- */
-#define DLT_AX25_KISS          202
-
-/*
- * LAPD packets from an ISDN channel, starting with the address field,
- * with no pseudo-header.
- * Requested by Varuna De Silva <varunax@gmail.com>.
- */
-#define DLT_LAPD               203
-
-/*
- * Variants of various link-layer headers, with a one-byte direction
- * pseudo-header prepended - zero means "received by this host",
- * non-zero (any non-zero value) means "sent by this host" - as per
- * Will Barker <w.barker@zen.co.uk>.
- */
-#define DLT_PPP_WITH_DIR       204     /* PPP - don't confuse with DLT_PPP_WITH_DIRECTION */
-#define DLT_C_HDLC_WITH_DIR    205     /* Cisco HDLC */
-#define DLT_FRELAY_WITH_DIR    206     /* Frame Relay */
-#define DLT_LAPB_WITH_DIR      207     /* LAPB */
-
-/*
- * 208 is reserved for an as-yet-unspecified proprietary link-layer
- * type, as requested by Will Barker.
- */
-
-/*
- * IPMB with a Linux-specific pseudo-header; as requested by Alexey Neyman
- * <avn@pigeonpoint.com>.
- */
-#define DLT_IPMB_LINUX         209
-
-/*
- * FlexRay automotive bus - http://www.flexray.com/ - as requested
- * by Hannes Kaelber <hannes.kaelber@x2e.de>.
- */
-#define DLT_FLEXRAY            210
-
-/*
- * Media Oriented Systems Transport (MOST) bus for multimedia
- * transport - http://www.mostcooperation.com/ - as requested
- * by Hannes Kaelber <hannes.kaelber@x2e.de>.
- */
-#define DLT_MOST               211
-
-/*
- * Local Interconnect Network (LIN) bus for vehicle networks -
- * http://www.lin-subbus.org/ - as requested by Hannes Kaelber
- * <hannes.kaelber@x2e.de>.
- */
-#define DLT_LIN                        212
-
-/*
- * X2E-private data link type used for serial line capture,
- * as requested by Hannes Kaelber <hannes.kaelber@x2e.de>.
- */
-#define DLT_X2E_SERIAL         213
-
-/*
- * X2E-private data link type used for the Xoraya data logger
- * family, as requested by Hannes Kaelber <hannes.kaelber@x2e.de>.
- */
-#define DLT_X2E_XORAYA         214
-
-/*
- * IEEE 802.15.4, exactly as it appears in the spec (no padding, no
- * nothing), but with the PHY-level data for non-ASK PHYs (4 octets
- * of 0 as preamble, one octet of SFD, one octet of frame length+
- * reserved bit, and then the MAC-layer data, starting with the
- * frame control field).
- *
- * Requested by Max Filippov <jcmvbkbc@gmail.com>.
- */
-#define DLT_IEEE802_15_4_NONASK_PHY    215
-
-
-/*
- * DLT and savefile link type values are split into a class and
- * a member of that class.  A class value of 0 indicates a regular
- * DLT_/LINKTYPE_ value.
- */
-#define DLT_CLASS(x)           ((x) & 0x03ff0000)
-
-/*
- * NetBSD-specific generic "raw" link type.  The class value indicates
- * that this is the generic raw type, and the lower 16 bits are the
- * address family we're dealing with.  Those values are NetBSD-specific;
- * do not assume that they correspond to AF_ values for your operating
- * system.
- */
-#define        DLT_CLASS_NETBSD_RAWAF  0x02240000
-#define        DLT_NETBSD_RAWAF(af)    (DLT_CLASS_NETBSD_RAWAF | (af))
-#define        DLT_NETBSD_RAWAF_AF(x)  ((x) & 0x0000ffff)
-#define        DLT_IS_NETBSD_RAWAF(x)  (DLT_CLASS(x) == DLT_CLASS_NETBSD_RAWAF)
-
-
-/*
- * The instruction encodings.
- */
-/* instruction classes */
-#define BPF_CLASS(code) ((code) & 0x07)
-#define                BPF_LD          0x00
-#define                BPF_LDX         0x01
-#define                BPF_ST          0x02
-#define                BPF_STX         0x03
-#define                BPF_ALU         0x04
-#define                BPF_JMP         0x05
-#define                BPF_RET         0x06
-#define                BPF_MISC        0x07
-
-/* ld/ldx fields */
-#define BPF_SIZE(code) ((code) & 0x18)
-#define                BPF_W           0x00
-#define                BPF_H           0x08
-#define                BPF_B           0x10
-#define BPF_MODE(code) ((code) & 0xe0)
-#define                BPF_IMM         0x00
-#define                BPF_ABS         0x20
-#define                BPF_IND         0x40
-#define                BPF_MEM         0x60
-#define                BPF_LEN         0x80
-#define                BPF_MSH         0xa0
-
-/* alu/jmp fields */
-#define BPF_OP(code)   ((code) & 0xf0)
-#define                BPF_ADD         0x00
-#define                BPF_SUB         0x10
-#define                BPF_MUL         0x20
-#define                BPF_DIV         0x30
-#define                BPF_OR          0x40
-#define                BPF_AND         0x50
-#define                BPF_LSH         0x60
-#define                BPF_RSH         0x70
-#define                BPF_NEG         0x80
-#define                BPF_JA          0x00
-#define                BPF_JEQ         0x10
-#define                BPF_JGT         0x20
-#define                BPF_JGE         0x30
-#define                BPF_JSET        0x40
-#define BPF_SRC(code)  ((code) & 0x08)
-#define                BPF_K           0x00
-#define                BPF_X           0x08
-
-/* ret - BPF_K and BPF_X also apply */
-#define BPF_RVAL(code) ((code) & 0x18)
-#define                BPF_A           0x10
-
-/* misc */
-#define BPF_MISCOP(code) ((code) & 0xf8)
-#define                BPF_TAX         0x00
-#define                BPF_TXA         0x80
-
-/*
- * The instruction data structure.
- */
-struct bpf_insn {
-       u_short code;
-       u_char  jt;
-       u_char  jf;
-       bpf_u_int32 k;
-};
-
-/*
- * Macros for insn array initializers.
- */
-#define BPF_STMT(code, k) { (u_short)(code), 0, 0, k }
-#define BPF_JUMP(code, k, jt, jf) { (u_short)(code), jt, jf, k }
-
-#if __STDC__ || defined(__cplusplus)
-extern int bpf_validate(const struct bpf_insn *, int);
-extern u_int bpf_filter(const struct bpf_insn *, const u_char *, u_int, u_int);
-#else
-extern int bpf_validate();
-extern u_int bpf_filter();
-#endif
-
-/*
- * Number of scratch memory words (for BPF_LD|BPF_MEM and BPF_ST).
- */
-#define BPF_MEMWORDS 16
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WinPCap/pcap/namedb.h b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WinPCap/pcap/namedb.h
deleted file mode 100644 (file)
index 9002c75..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright (c) 1994, 1996
- *     The Regents of the University of California.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the Computer Systems
- *     Engineering Group at Lawrence Berkeley Laboratory.
- * 4. Neither the name of the University nor of the Laboratory may be used
- *    to endorse or promote products derived from this software without
- *    specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#) $Header: /tcpdump/master/libpcap/pcap/namedb.h,v 1.1 2006/10/04 18:09:22 guy Exp $ (LBL)
- */
-
-#ifndef lib_pcap_namedb_h
-#define lib_pcap_namedb_h
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * As returned by the pcap_next_etherent()
- * XXX this stuff doesn't belong in this interface, but this
- * library already must do name to address translation, so
- * on systems that don't have support for /etc/ethers, we
- * export these hooks since they'll
- */
-struct pcap_etherent {
-       u_char addr[6];
-       char name[122];
-};
-#ifndef PCAP_ETHERS_FILE
-#define PCAP_ETHERS_FILE "/etc/ethers"
-#endif
-struct pcap_etherent *pcap_next_etherent(FILE *);
-u_char *pcap_ether_hostton(const char*);
-u_char *pcap_ether_aton(const char *);
-
-bpf_u_int32 **pcap_nametoaddr(const char *);
-#ifdef INET6
-struct addrinfo *pcap_nametoaddrinfo(const char *);
-#endif
-bpf_u_int32 pcap_nametonetaddr(const char *);
-
-int    pcap_nametoport(const char *, int *, int *);
-int    pcap_nametoportrange(const char *, int *, int *, int *);
-int    pcap_nametoproto(const char *);
-int    pcap_nametoeproto(const char *);
-int    pcap_nametollc(const char *);
-/*
- * If a protocol is unknown, PROTO_UNDEF is returned.
- * Also, pcap_nametoport() returns the protocol along with the port number.
- * If there are ambiguous entried in /etc/services (i.e. domain
- * can be either tcp or udp) PROTO_UNDEF is returned.
- */
-#define PROTO_UNDEF            -1
-
-/* XXX move these to pcap-int.h? */
-int __pcap_atodn(const char *, bpf_u_int32 *);
-int __pcap_atoin(const char *, bpf_u_int32 *);
-u_short        __pcap_nametodnaddr(const char *);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WinPCap/pcap/pcap.h b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WinPCap/pcap/pcap.h
deleted file mode 100644 (file)
index ad8fc40..0000000
+++ /dev/null
@@ -1,407 +0,0 @@
-/* -*- Mode: c; tab-width: 8; indent-tabs-mode: 1; c-basic-offset: 8; -*- */
-/*
- * Copyright (c) 1993, 1994, 1995, 1996, 1997
- *     The Regents of the University of California.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the Computer Systems
- *     Engineering Group at Lawrence Berkeley Laboratory.
- * 4. Neither the name of the University nor of the Laboratory may be used
- *    to endorse or promote products derived from this software without
- *    specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#) $Header: /tcpdump/master/libpcap/pcap/pcap.h,v 1.4.2.11 2008-10-06 15:38:39 gianluca Exp $ (LBL)
- */
-
-#ifndef lib_pcap_pcap_h
-#define lib_pcap_pcap_h
-
-#if defined(WIN32)
-  #include <pcap-stdinc.h>
-#elif defined(MSDOS)
-  #include <sys/types.h>
-  #include <sys/socket.h>  /* u_int, u_char etc. */
-#else /* UN*X */
-  #include <sys/types.h>
-  #include <sys/time.h>
-#endif /* WIN32/MSDOS/UN*X */
-
-#ifndef PCAP_DONT_INCLUDE_PCAP_BPF_H
-#include <pcap/bpf.h>
-#endif
-
-#include <stdio.h>
-
-#ifdef HAVE_REMOTE
-       // We have to define the SOCKET here, although it has been defined in sockutils.h
-       // This is to avoid the distribution of the 'sockutils.h' file around
-       // (for example in the WinPcap developer's pack)
-       #ifndef SOCKET
-               #ifdef WIN32
-                       #define SOCKET unsigned int
-               #else
-                       #define SOCKET int
-               #endif
-       #endif
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define PCAP_VERSION_MAJOR 2
-#define PCAP_VERSION_MINOR 4
-
-#define PCAP_ERRBUF_SIZE 256
-
-/*
- * Compatibility for systems that have a bpf.h that
- * predates the bpf typedefs for 64-bit support.
- */
-#if BPF_RELEASE - 0 < 199406
-typedef        int bpf_int32;
-typedef        u_int bpf_u_int32;
-#endif
-
-typedef struct pcap pcap_t;
-typedef struct pcap_dumper pcap_dumper_t;
-typedef struct pcap_if pcap_if_t;
-typedef struct pcap_addr pcap_addr_t;
-
-/*
- * The first record in the file contains saved values for some
- * of the flags used in the printout phases of tcpdump.
- * Many fields here are 32 bit ints so compilers won't insert unwanted
- * padding; these files need to be interchangeable across architectures.
- *
- * Do not change the layout of this structure, in any way (this includes
- * changes that only affect the length of fields in this structure).
- *
- * Also, do not change the interpretation of any of the members of this
- * structure, in any way (this includes using values other than
- * LINKTYPE_ values, as defined in "savefile.c", in the "linktype"
- * field).
- *
- * Instead:
- *
- *     introduce a new structure for the new format, if the layout
- *     of the structure changed;
- *
- *     send mail to "tcpdump-workers@lists.tcpdump.org", requesting
- *     a new magic number for your new capture file format, and, when
- *     you get the new magic number, put it in "savefile.c";
- *
- *     use that magic number for save files with the changed file
- *     header;
- *
- *     make the code in "savefile.c" capable of reading files with
- *     the old file header as well as files with the new file header
- *     (using the magic number to determine the header format).
- *
- * Then supply the changes as a patch at
- *
- *     http://sourceforge.net/projects/libpcap/
- *
- * so that future versions of libpcap and programs that use it (such as
- * tcpdump) will be able to read your new capture file format.
- */
-struct pcap_file_header {
-       bpf_u_int32 magic;
-       u_short version_major;
-       u_short version_minor;
-       bpf_int32 thiszone;     /* gmt to local correction */
-       bpf_u_int32 sigfigs;    /* accuracy of timestamps */
-       bpf_u_int32 snaplen;    /* max length saved portion of each pkt */
-       bpf_u_int32 linktype;   /* data link type (LINKTYPE_*) */
-};
-
-/*
- * Macros for the value returned by pcap_datalink_ext().
- * 
- * If LT_FCS_LENGTH_PRESENT(x) is true, the LT_FCS_LENGTH(x) macro
- * gives the FCS length of packets in the capture.
- */
-#define LT_FCS_LENGTH_PRESENT(x)       ((x) & 0x04000000)
-#define LT_FCS_LENGTH(x)               (((x) & 0xF0000000) >> 28)
-#define LT_FCS_DATALINK_EXT(x)         ((((x) & 0xF) << 28) | 0x04000000)
-
-typedef enum {
-       PCAP_D_INOUT = 0,
-       PCAP_D_IN,
-       PCAP_D_OUT
-} pcap_direction_t;
-
-/*
- * Generic per-packet information, as supplied by libpcap.
- *
- * The time stamp can and should be a "struct timeval", regardless of
- * whether your system supports 32-bit tv_sec in "struct timeval",
- * 64-bit tv_sec in "struct timeval", or both if it supports both 32-bit
- * and 64-bit applications.  The on-disk format of savefiles uses 32-bit
- * tv_sec (and tv_usec); this structure is irrelevant to that.  32-bit
- * and 64-bit versions of libpcap, even if they're on the same platform,
- * should supply the appropriate version of "struct timeval", even if
- * that's not what the underlying packet capture mechanism supplies.
- */
-struct pcap_pkthdr {
-       struct timeval ts;      /* time stamp */
-       bpf_u_int32 caplen;     /* length of portion present */
-       bpf_u_int32 len;        /* length this packet (off wire) */
-};
-
-/*
- * As returned by the pcap_stats()
- */
-struct pcap_stat {
-       u_int ps_recv;          /* number of packets received */
-       u_int ps_drop;          /* number of packets dropped */
-       u_int ps_ifdrop;        /* drops by interface XXX not yet supported */
-#ifdef HAVE_REMOTE
-       u_int ps_capt;          /* number of packets that are received by the application; please get rid off the Win32 ifdef */
-       u_int ps_sent;          /* number of packets sent by the server on the network */
-       u_int ps_netdrop;       /* number of packets lost on the network */
-#endif /* HAVE_REMOTE */
-};
-
-#ifdef MSDOS
-/*
- * As returned by the pcap_stats_ex()
- */
-struct pcap_stat_ex {
-       u_long  rx_packets;        /* total packets received       */
-       u_long  tx_packets;        /* total packets transmitted    */
-       u_long  rx_bytes;          /* total bytes received         */
-       u_long  tx_bytes;          /* total bytes transmitted      */
-       u_long  rx_errors;         /* bad packets received         */
-       u_long  tx_errors;         /* packet transmit problems     */
-       u_long  rx_dropped;        /* no space in Rx buffers       */
-       u_long  tx_dropped;        /* no space available for Tx    */
-       u_long  multicast;         /* multicast packets received   */
-       u_long  collisions;
-
-       /* detailed rx_errors: */
-       u_long  rx_length_errors;
-       u_long  rx_over_errors;    /* receiver ring buff overflow  */
-       u_long  rx_crc_errors;     /* recv'd pkt with crc error    */
-       u_long  rx_frame_errors;   /* recv'd frame alignment error */
-       u_long  rx_fifo_errors;    /* recv'r fifo overrun          */
-       u_long  rx_missed_errors;  /* recv'r missed packet         */
-
-       /* detailed tx_errors */
-       u_long  tx_aborted_errors;
-       u_long  tx_carrier_errors;
-       u_long  tx_fifo_errors;
-       u_long  tx_heartbeat_errors;
-       u_long  tx_window_errors;
-     };
-#endif
-
-/*
- * Item in a list of interfaces.
- */
-struct pcap_if {
-       struct pcap_if *next;
-       char *name;             /* name to hand to "pcap_open_live()" */
-       char *description;      /* textual description of interface, or NULL */
-       struct pcap_addr *addresses;
-       bpf_u_int32 flags;      /* PCAP_IF_ interface flags */
-};
-
-#define PCAP_IF_LOOPBACK       0x00000001      /* interface is loopback */
-
-/*
- * Representation of an interface address.
- */
-struct pcap_addr {
-       struct pcap_addr *next;
-       struct sockaddr *addr;          /* address */
-       struct sockaddr *netmask;       /* netmask for that address */
-       struct sockaddr *broadaddr;     /* broadcast address for that address */
-       struct sockaddr *dstaddr;       /* P2P destination address for that address */
-};
-
-typedef void (*pcap_handler)(u_char *, const struct pcap_pkthdr *,
-                            const u_char *);
-
-/*
- * Error codes for the pcap API.
- * These will all be negative, so you can check for the success or
- * failure of a call that returns these codes by checking for a
- * negative value.
- */
-#define PCAP_ERROR                     -1      /* generic error code */
-#define PCAP_ERROR_BREAK               -2      /* loop terminated by pcap_breakloop */
-#define PCAP_ERROR_NOT_ACTIVATED       -3      /* the capture needs to be activated */
-#define PCAP_ERROR_ACTIVATED           -4      /* the operation can't be performed on already activated captures */
-#define PCAP_ERROR_NO_SUCH_DEVICE      -5      /* no such device exists */
-#define PCAP_ERROR_RFMON_NOTSUP                -6      /* this device doesn't support rfmon (monitor) mode */
-#define PCAP_ERROR_NOT_RFMON           -7      /* operation supported only in monitor mode */
-#define PCAP_ERROR_PERM_DENIED         -8      /* no permission to open the device */
-#define PCAP_ERROR_IFACE_NOT_UP                -9      /* interface isn't up */
-
-/*
- * Warning codes for the pcap API.
- * These will all be positive and non-zero, so they won't look like
- * errors.
- */
-#define PCAP_WARNING                   1       /* generic warning code */
-#define PCAP_WARNING_PROMISC_NOTSUP    2       /* this device doesn't support promiscuous mode */
-
-char   *pcap_lookupdev(char *);
-int    pcap_lookupnet(const char *, bpf_u_int32 *, bpf_u_int32 *, char *);
-
-pcap_t *pcap_create(const char *, char *);
-int    pcap_set_snaplen(pcap_t *, int);
-int    pcap_set_promisc(pcap_t *, int);
-int    pcap_can_set_rfmon(pcap_t *);
-int    pcap_set_rfmon(pcap_t *, int);
-int    pcap_set_timeout(pcap_t *, int);
-int    pcap_set_buffer_size(pcap_t *, int);
-int    pcap_activate(pcap_t *);
-
-pcap_t *pcap_open_live(const char *, int, int, int, char *);
-pcap_t *pcap_open_dead(int, int);
-pcap_t *pcap_open_offline(const char *, char *);
-#if defined(WIN32)
-pcap_t  *pcap_hopen_offline(intptr_t, char *);
-#if !defined(LIBPCAP_EXPORTS)
-#define pcap_fopen_offline(f,b) \
-       pcap_hopen_offline(_get_osfhandle(_fileno(f)), b)
-#else /*LIBPCAP_EXPORTS*/
-static pcap_t *pcap_fopen_offline(FILE *, char *);
-#endif
-#else /*WIN32*/
-pcap_t *pcap_fopen_offline(FILE *, char *);
-#endif /*WIN32*/
-
-void   pcap_close(pcap_t *);
-int    pcap_loop(pcap_t *, int, pcap_handler, u_char *);
-int    pcap_dispatch(pcap_t *, int, pcap_handler, u_char *);
-const u_char*
-       pcap_next(pcap_t *, struct pcap_pkthdr *);
-int    pcap_next_ex(pcap_t *, struct pcap_pkthdr **, const u_char **);
-void   pcap_breakloop(pcap_t *);
-int    pcap_stats(pcap_t *, struct pcap_stat *);
-int    pcap_setfilter(pcap_t *, struct bpf_program *);
-int    pcap_setdirection(pcap_t *, pcap_direction_t);
-int    pcap_getnonblock(pcap_t *, char *);
-int    pcap_setnonblock(pcap_t *, int, char *);
-int    pcap_inject(pcap_t *, const void *, size_t);
-int    pcap_sendpacket(pcap_t *, const u_char *, int);
-const char *pcap_statustostr(int);
-const char *pcap_strerror(int);
-char   *pcap_geterr(pcap_t *);
-void   pcap_perror(pcap_t *, char *);
-int    pcap_compile(pcap_t *, struct bpf_program *, const char *, int,
-           bpf_u_int32);
-int    pcap_compile_nopcap(int, int, struct bpf_program *,
-           const char *, int, bpf_u_int32);
-void   pcap_freecode(struct bpf_program *);
-int    pcap_offline_filter(struct bpf_program *, const struct pcap_pkthdr *,
-           const u_char *);
-int    pcap_datalink(pcap_t *);
-int    pcap_datalink_ext(pcap_t *);
-int    pcap_list_datalinks(pcap_t *, int **);
-int    pcap_set_datalink(pcap_t *, int);
-void   pcap_free_datalinks(int *);
-int    pcap_datalink_name_to_val(const char *);
-const char *pcap_datalink_val_to_name(int);
-const char *pcap_datalink_val_to_description(int);
-int    pcap_snapshot(pcap_t *);
-int    pcap_is_swapped(pcap_t *);
-int    pcap_major_version(pcap_t *);
-int    pcap_minor_version(pcap_t *);
-
-/* XXX */
-FILE   *pcap_file(pcap_t *);
-int    pcap_fileno(pcap_t *);
-
-pcap_dumper_t *pcap_dump_open(pcap_t *, const char *);
-pcap_dumper_t *pcap_dump_fopen(pcap_t *, FILE *fp);
-FILE   *pcap_dump_file(pcap_dumper_t *);
-long   pcap_dump_ftell(pcap_dumper_t *);
-int    pcap_dump_flush(pcap_dumper_t *);
-void   pcap_dump_close(pcap_dumper_t *);
-void   pcap_dump(u_char *, const struct pcap_pkthdr *, const u_char *);
-
-int    pcap_findalldevs(pcap_if_t **, char *);
-void   pcap_freealldevs(pcap_if_t *);
-
-const char *pcap_lib_version(void);
-
-/* XXX this guy lives in the bpf tree */
-u_int  bpf_filter(const struct bpf_insn *, const u_char *, u_int, u_int);
-int    bpf_validate(const struct bpf_insn *f, int len);
-char   *bpf_image(const struct bpf_insn *, int);
-void   bpf_dump(const struct bpf_program *, int);
-
-#if defined(WIN32)
-
-/*
- * Win32 definitions
- */
-
-int pcap_setbuff(pcap_t *p, int dim);
-int pcap_setmode(pcap_t *p, int mode);
-int pcap_setmintocopy(pcap_t *p, int size);
-
-#ifdef WPCAP
-/* Include file with the wpcap-specific extensions */
-#include <Win32-Extensions.h>
-#endif /* WPCAP */
-
-#define MODE_CAPT 0
-#define MODE_STAT 1
-#define MODE_MON 2
-
-#elif defined(MSDOS)
-
-/*
- * MS-DOS definitions
- */
-
-int  pcap_stats_ex (pcap_t *, struct pcap_stat_ex *);
-void pcap_set_wait (pcap_t *p, void (*yield)(void), int wait);
-u_long pcap_mac_packets (void);
-
-#else /* UN*X */
-
-/*
- * UN*X definitions
- */
-
-int    pcap_get_selectable_fd(pcap_t *);
-
-#endif /* WIN32/MSDOS/UN*X */
-
-#ifdef HAVE_REMOTE
-/* Includes most of the public stuff that is needed for the remote capture */
-#include <remote-ext.h>
-#endif  /* HAVE_REMOTE */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WinPCap/pcap/sll.h b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WinPCap/pcap/sll.h
deleted file mode 100644 (file)
index e9d5452..0000000
+++ /dev/null
@@ -1,129 +0,0 @@
-/*-
- * Copyright (c) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from the Stanford/CMU enet packet filter,
- * (net/enet.c) distributed as part of 4.3BSD, and code contributed
- * to Berkeley by Steven McCanne and Van Jacobson both of Lawrence
- * Berkeley Laboratory.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *      This product includes software developed by the University of
- *      California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#) $Header: /tcpdump/master/libpcap/pcap/sll.h,v 1.2.2.1 2008-05-30 01:36:06 guy Exp $ (LBL)
- */
-
-/*
- * For captures on Linux cooked sockets, we construct a fake header
- * that includes:
- *
- *     a 2-byte "packet type" which is one of:
- *
- *             LINUX_SLL_HOST          packet was sent to us
- *             LINUX_SLL_BROADCAST     packet was broadcast
- *             LINUX_SLL_MULTICAST     packet was multicast
- *             LINUX_SLL_OTHERHOST     packet was sent to somebody else
- *             LINUX_SLL_OUTGOING      packet was sent *by* us;
- *
- *     a 2-byte Ethernet protocol field;
- *
- *     a 2-byte link-layer type;
- *
- *     a 2-byte link-layer address length;
- *
- *     an 8-byte source link-layer address, whose actual length is
- *     specified by the previous value.
- *
- * All fields except for the link-layer address are in network byte order.
- *
- * DO NOT change the layout of this structure, or change any of the
- * LINUX_SLL_ values below.  If you must change the link-layer header
- * for a "cooked" Linux capture, introduce a new DLT_ type (ask
- * "tcpdump-workers@lists.tcpdump.org" for one, so that you don't give it
- * a value that collides with a value already being used), and use the
- * new header in captures of that type, so that programs that can
- * handle DLT_LINUX_SLL captures will continue to handle them correctly
- * without any change, and so that capture files with different headers
- * can be told apart and programs that read them can dissect the
- * packets in them.
- */
-
-#ifndef lib_pcap_sll_h
-#define lib_pcap_sll_h
-
-/*
- * A DLT_LINUX_SLL fake link-layer header.
- */
-#define SLL_HDR_LEN    16              /* total header length */
-#define SLL_ADDRLEN    8               /* length of address field */
-
-struct sll_header {
-       u_int16_t sll_pkttype;          /* packet type */
-       u_int16_t sll_hatype;           /* link-layer address type */
-       u_int16_t sll_halen;            /* link-layer address length */
-       u_int8_t sll_addr[SLL_ADDRLEN]; /* link-layer address */
-       u_int16_t sll_protocol;         /* protocol */
-};
-
-/*
- * The LINUX_SLL_ values for "sll_pkttype"; these correspond to the
- * PACKET_ values on Linux, but are defined here so that they're
- * available even on systems other than Linux, and so that they
- * don't change even if the PACKET_ values change.
- */
-#define LINUX_SLL_HOST         0
-#define LINUX_SLL_BROADCAST    1
-#define LINUX_SLL_MULTICAST    2
-#define LINUX_SLL_OTHERHOST    3
-#define LINUX_SLL_OUTGOING     4
-
-/*
- * The LINUX_SLL_ values for "sll_protocol"; these correspond to the
- * ETH_P_ values on Linux, but are defined here so that they're
- * available even on systems other than Linux.  We assume, for now,
- * that the ETH_P_ values won't change in Linux; if they do, then:
- *
- *     if we don't translate them in "pcap-linux.c", capture files
- *     won't necessarily be readable if captured on a system that
- *     defines ETH_P_ values that don't match these values;
- *
- *     if we do translate them in "pcap-linux.c", that makes life
- *     unpleasant for the BPF code generator, as the values you test
- *     for in the kernel aren't the values that you test for when
- *     reading a capture file, so the fixup code run on BPF programs
- *     handed to the kernel ends up having to do more work.
- *
- * Add other values here as necessary, for handling packet types that
- * might show up on non-Ethernet, non-802.x networks.  (Not all the ones
- * in the Linux "if_ether.h" will, I suspect, actually show up in
- * captures.)
- */
-#define LINUX_SLL_P_802_3      0x0001  /* Novell 802.3 frames without 802.2 LLC header */
-#define LINUX_SLL_P_802_2      0x0004  /* 802.2 frames (not D/I/X Ethernet) */
-
-#endif
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WinPCap/pcap/usb.h b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WinPCap/pcap/usb.h
deleted file mode 100644 (file)
index adcd19c..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright (c) 2006 Paolo Abeni (Italy)
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote 
- * products derived from this software without specific prior written 
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * Basic USB data struct
- * By Paolo Abeni <paolo.abeni@email.it>
- *
- * @(#) $Header: /tcpdump/master/libpcap/pcap/usb.h,v 1.6 2007/09/22 02:06:08 guy Exp $
- */
-#ifndef _PCAP_USB_STRUCTS_H__
-#define _PCAP_USB_STRUCTS_H__
-
-/* 
- * possible transfer mode
- */
-#define URB_TRANSFER_IN   0x80
-#define URB_ISOCHRONOUS   0x0
-#define URB_INTERRUPT     0x1
-#define URB_CONTROL       0x2
-#define URB_BULK          0x3
-
-/*
- * possible event type
- */
-#define URB_SUBMIT        'S'
-#define URB_COMPLETE      'C'
-#define URB_ERROR         'E'
-
-/*
- * USB setup header as defined in USB specification.
- * Appears at the front of each packet in DLT_USB captures.
- */
-typedef struct _usb_setup {
-       u_int8_t bmRequestType;
-       u_int8_t bRequest;
-       u_int16_t wValue;
-       u_int16_t wIndex;
-       u_int16_t wLength;
-} pcap_usb_setup;
-
-
-/*
- * Header prepended by linux kernel to each event.
- * Appears at the front of each packet in DLT_USB_LINUX captures.
- */
-typedef struct _usb_header {
-       u_int64_t id;
-       u_int8_t event_type;
-       u_int8_t transfer_type;
-       u_int8_t endpoint_number;
-       u_int8_t device_address;
-       u_int16_t bus_id;
-       char setup_flag;/*if !=0 the urb setup header is not present*/
-       char data_flag; /*if !=0 no urb data is present*/
-       int64_t ts_sec;
-       int32_t ts_usec;
-       int32_t status;
-       u_int32_t urb_len;
-       u_int32_t data_len; /* amount of urb data really present in this event*/
-       pcap_usb_setup setup;
-} pcap_usb_header;
-
-
-#endif
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WinPCap/pcap/vlan.h b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WinPCap/pcap/vlan.h
deleted file mode 100644 (file)
index b0cb794..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-/*-
- * Copyright (c) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
- *     The Regents of the University of California.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *      This product includes software developed by the University of
- *      California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#) $Header: /tcpdump/master/libpcap/pcap/vlan.h,v 1.1.2.2 2008-08-06 07:45:59 guy Exp $
- */
-
-#ifndef lib_pcap_vlan_h
-#define lib_pcap_vlan_h
-
-struct vlan_tag {
-       u_int16_t       vlan_tpid;              /* ETH_P_8021Q */
-       u_int16_t       vlan_tci;               /* VLAN TCI */
-};
-
-#define VLAN_TAG_LEN   4
-
-#endif
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WinPCap/remote-ext.h b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WinPCap/remote-ext.h
deleted file mode 100644 (file)
index 9f54d69..0000000
+++ /dev/null
@@ -1,444 +0,0 @@
-/*\r
- * Copyright (c) 2002 - 2003\r
- * NetGroup, Politecnico di Torino (Italy)\r
- * All rights reserved.\r
- * \r
- * Redistribution and use in source and binary forms, with or without \r
- * modification, are permitted provided that the following conditions \r
- * are met:\r
- * \r
- * 1. Redistributions of source code must retain the above copyright \r
- * notice, this list of conditions and the following disclaimer.\r
- * 2. Redistributions in binary form must reproduce the above copyright \r
- * notice, this list of conditions and the following disclaimer in the \r
- * documentation and/or other materials provided with the distribution. \r
- * 3. Neither the name of the Politecnico di Torino nor the names of its \r
- * contributors may be used to endorse or promote products derived from \r
- * this software without specific prior written permission. \r
- * \r
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \r
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT \r
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR \r
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT \r
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, \r
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT \r
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, \r
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY \r
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT \r
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE \r
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
- * \r
- */\r
-\r
-\r
-#ifndef __REMOTE_EXT_H__\r
-#define __REMOTE_EXT_H__\r
-\r
-\r
-#ifndef HAVE_REMOTE\r
-#error Please do not include this file directly. Just define HAVE_REMOTE and then include pcap.h\r
-#endif\r
-\r
-// Definition for Microsoft Visual Studio\r
-#if _MSC_VER > 1000\r
-#pragma once\r
-#endif\r
-\r
-#ifdef __cplusplus\r
-extern "C" {\r
-#endif\r
-\r
-/*!\r
-       \file remote-ext.h\r
-\r
-       The goal of this file it to include most of the new definitions that should be\r
-       placed into the pcap.h file.\r
-\r
-       It includes all new definitions (structures and functions like pcap_open().\r
-    Some of the functions are not really a remote feature, but, right now, \r
-       they are placed here.\r
-*/\r
-\r
-\r
-\r
-// All this stuff is public\r
-/*! \addtogroup remote_struct\r
-       \{\r
-*/\r
-\r
-\r
-\r
-\r
-/*!\r
-       \brief Defines the maximum buffer size in which address, port, interface names are kept.\r
-\r
-       In case the adapter name or such is larger than this value, it is truncated.\r
-       This is not used by the user; however it must be aware that an hostname / interface\r
-       name longer than this value will be truncated.\r
-*/\r
-#define PCAP_BUF_SIZE 1024\r
-\r
-\r
-/*! \addtogroup remote_source_ID\r
-       \{\r
-*/\r
-\r
-\r
-/*!\r
-       \brief Internal representation of the type of source in use (file, \r
-       remote/local interface).\r
-\r
-       This indicates a file, i.e. the user want to open a capture from a local file.\r
-*/\r
-#define PCAP_SRC_FILE 2\r
-/*!\r
-       \brief Internal representation of the type of source in use (file, \r
-       remote/local interface).\r
-\r
-       This indicates a local interface, i.e. the user want to open a capture from \r
-       a local interface. This does not involve the RPCAP protocol.\r
-*/\r
-#define PCAP_SRC_IFLOCAL 3\r
-/*!\r
-       \brief Internal representation of the type of source in use (file, \r
-       remote/local interface).\r
-\r
-       This indicates a remote interface, i.e. the user want to open a capture from \r
-       an interface on a remote host. This does involve the RPCAP protocol.\r
-*/\r
-#define PCAP_SRC_IFREMOTE 4\r
-\r
-/*!\r
-       \}\r
-*/\r
-\r
-\r
-\r
-/*! \addtogroup remote_source_string\r
-\r
-       The formats allowed by the pcap_open() are the following:\r
-       - file://path_and_filename [opens a local file]\r
-       - rpcap://devicename [opens the selected device devices available on the local host, without using the RPCAP protocol]\r
-       - rpcap://host/devicename [opens the selected device available on a remote host]\r
-       - rpcap://host:port/devicename [opens the selected device available on a remote host, using a non-standard port for RPCAP]\r
-       - adaptername [to open a local adapter; kept for compability, but it is strongly discouraged]\r
-       - (NULL) [to open the first local adapter; kept for compability, but it is strongly discouraged]\r
-\r
-       The formats allowed by the pcap_findalldevs_ex() are the following:\r
-       - file://folder/ [lists all the files in the given folder]\r
-       - rpcap:// [lists all local adapters]\r
-       - rpcap://host:port/ [lists the devices available on a remote host]\r
-\r
-       Referring to the 'host' and 'port' paramters, they can be either numeric or literal. Since\r
-       IPv6 is fully supported, these are the allowed formats:\r
-\r
-       - host (literal): e.g. host.foo.bar\r
-       - host (numeric IPv4): e.g. 10.11.12.13\r
-       - host (numeric IPv4, IPv6 style): e.g. [10.11.12.13]\r
-       - host (numeric IPv6): e.g. [1:2:3::4]\r
-       - port: can be either numeric (e.g. '80') or literal (e.g. 'http')\r
-\r
-       Here you find some allowed examples:\r
-       - rpcap://host.foo.bar/devicename [everything literal, no port number]\r
-       - rpcap://host.foo.bar:1234/devicename [everything literal, with port number]\r
-       - rpcap://10.11.12.13/devicename [IPv4 numeric, no port number]\r
-       - rpcap://10.11.12.13:1234/devicename [IPv4 numeric, with port number]\r
-       - rpcap://[10.11.12.13]:1234/devicename [IPv4 numeric with IPv6 format, with port number]\r
-       - rpcap://[1:2:3::4]/devicename [IPv6 numeric, no port number]\r
-       - rpcap://[1:2:3::4]:1234/devicename [IPv6 numeric, with port number]\r
-       - rpcap://[1:2:3::4]:http/devicename [IPv6 numeric, with literal port number]\r
-       \r
-       \{\r
-*/\r
-\r
-\r
-/*!\r
-       \brief String that will be used to determine the type of source in use (file,\r
-       remote/local interface).\r
-\r
-       This string will be prepended to the interface name in order to create a string\r
-       that contains all the information required to open the source.\r
-\r
-       This string indicates that the user wants to open a capture from a local file.\r
-*/\r
-#define PCAP_SRC_FILE_STRING "file://"\r
-/*!\r
-       \brief String that will be used to determine the type of source in use (file,\r
-       remote/local interface).\r
-\r
-       This string will be prepended to the interface name in order to create a string\r
-       that contains all the information required to open the source.\r
-\r
-       This string indicates that the user wants to open a capture from a network interface.\r
-       This string does not necessarily involve the use of the RPCAP protocol. If the\r
-       interface required resides on the local host, the RPCAP protocol is not involved\r
-       and the local functions are used.\r
-*/\r
-#define PCAP_SRC_IF_STRING "rpcap://"\r
-\r
-/*!\r
-       \}\r
-*/\r
-\r
-\r
-\r
-\r
-\r
-/*!\r
-       \addtogroup remote_open_flags\r
-       \{\r
-*/\r
-\r
-/*!\r
-       \brief Defines if the adapter has to go in promiscuous mode.\r
-\r
-       It is '1' if you have to open the adapter in promiscuous mode, '0' otherwise.\r
-       Note that even if this parameter is false, the interface could well be in promiscuous\r
-       mode for some other reason (for example because another capture process with \r
-       promiscuous mode enabled is currently using that interface).\r
-       On on Linux systems with 2.2 or later kernels (that have the "any" device), this\r
-       flag does not work on the "any" device; if an argument of "any" is supplied,\r
-       the 'promisc' flag is ignored.\r
-*/\r
-#define PCAP_OPENFLAG_PROMISCUOUS              1\r
-\r
-/*!\r
-       \brief Defines if the data trasfer (in case of a remote\r
-       capture) has to be done with UDP protocol.\r
-\r
-       If it is '1' if you want a UDP data connection, '0' if you want\r
-       a TCP data connection; control connection is always TCP-based.\r
-       A UDP connection is much lighter, but it does not guarantee that all\r
-       the captured packets arrive to the client workstation. Moreover, \r
-       it could be harmful in case of network congestion.\r
-       This flag is meaningless if the source is not a remote interface.\r
-       In that case, it is simply ignored.\r
-*/\r
-#define PCAP_OPENFLAG_DATATX_UDP                       2\r
-\r
-\r
-/*!\r
-       \brief Defines if the remote probe will capture its own generated traffic.\r
-\r
-       In case the remote probe uses the same interface to capture traffic and to send\r
-       data back to the caller, the captured traffic includes the RPCAP traffic as well.\r
-       If this flag is turned on, the RPCAP traffic is excluded from the capture, so that\r
-       the trace returned back to the collector is does not include this traffic.\r
-*/\r
-#define PCAP_OPENFLAG_NOCAPTURE_RPCAP  4\r
-\r
-/*!\r
-       \brief Defines if the local adapter will capture its own generated traffic.\r
-\r
-       This flag tells the underlying capture driver to drop the packets that were sent by itself. \r
-       This is usefult when building applications like bridges, that should ignore the traffic\r
-       they just sent.\r
-*/\r
-#define PCAP_OPENFLAG_NOCAPTURE_LOCAL  8\r
-\r
-/*!\r
-       \brief This flag configures the adapter for maximum responsiveness.\r
-\r
-       In presence of a large value for nbytes, WinPcap waits for the arrival of several packets before \r
-       copying the data to the user. This guarantees a low number of system calls, i.e. lower processor usage, \r
-       i.e. better performance, which is good for applications like sniffers. If the user sets the \r
-       PCAP_OPENFLAG_MAX_RESPONSIVENESS flag, the capture driver will copy the packets as soon as the application \r
-       is ready to receive them. This is suggested for real time applications (like, for example, a bridge) \r
-       that need the best responsiveness.*/\r
-#define PCAP_OPENFLAG_MAX_RESPONSIVENESS       16\r
-\r
-/*!\r
-       \}\r
-*/\r
-\r
-\r
-/*!\r
-       \addtogroup remote_samp_methods\r
-       \{\r
-*/\r
-\r
-/*!\r
-       \brief No sampling has to be done on the current capture.\r
-\r
-       In this case, no sampling algorithms are applied to the current capture.\r
-*/\r
-#define PCAP_SAMP_NOSAMP       0\r
-\r
-/*!\r
-       \brief It defines that only 1 out of N packets must be returned to the user.\r
-\r
-       In this case, the 'value' field of the 'pcap_samp' structure indicates the\r
-       number of packets (minus 1) that must be discarded before one packet got accepted.\r
-       In other words, if 'value = 10', the first packet is returned to the caller, while\r
-       the following 9 are discarded.\r
-*/\r
-#define PCAP_SAMP_1_EVERY_N    1\r
-\r
-/*!\r
-       \brief It defines that we have to return 1 packet every N milliseconds.\r
-\r
-       In this case, the 'value' field of the 'pcap_samp' structure indicates the 'waiting\r
-       time' in milliseconds before one packet got accepted.\r
-       In other words, if 'value = 10', the first packet is returned to the caller; the next \r
-       returned one will be the first packet that arrives when 10ms have elapsed. \r
-*/\r
-#define PCAP_SAMP_FIRST_AFTER_N_MS 2\r
-\r
-/*!\r
-       \}\r
-*/\r
-\r
-\r
-/*!\r
-       \addtogroup remote_auth_methods\r
-       \{\r
-*/\r
-\r
-/*!\r
-       \brief It defines the NULL authentication.\r
-\r
-       This value has to be used within the 'type' member of the pcap_rmtauth structure.\r
-       The 'NULL' authentication has to be equal to 'zero', so that old applications\r
-       can just put every field of struct pcap_rmtauth to zero, and it does work.\r
-*/\r
-#define RPCAP_RMTAUTH_NULL 0\r
-/*!\r
-       \brief It defines the username/password authentication.\r
-\r
-       With this type of authentication, the RPCAP protocol will use the username/\r
-       password provided to authenticate the user on the remote machine. If the\r
-       authentication is successful (and the user has the right to open network devices)\r
-       the RPCAP connection will continue; otherwise it will be dropped.\r
-\r
-       This value has to be used within the 'type' member of the pcap_rmtauth structure.\r
-*/\r
-#define RPCAP_RMTAUTH_PWD 1\r
-\r
-/*!\r
-       \}\r
-*/\r
-\r
-\r
-\r
-\r
-/*!\r
-\r
-       \brief This structure keeps the information needed to autheticate\r
-       the user on a remote machine.\r
-       \r
-       The remote machine can either grant or refuse the access according \r
-       to the information provided.\r
-       In case the NULL authentication is required, both 'username' and\r
-       'password' can be NULL pointers.\r
-       \r
-       This structure is meaningless if the source is not a remote interface;\r
-       in that case, the functions which requires such a structure can accept\r
-       a NULL pointer as well.\r
-*/\r
-struct pcap_rmtauth\r
-{\r
-       /*!\r
-               \brief Type of the authentication required.\r
-\r
-               In order to provide maximum flexibility, we can support different types\r
-               of authentication based on the value of this 'type' variable. The currently \r
-               supported authentication methods are defined into the\r
-               \link remote_auth_methods Remote Authentication Methods Section\endlink.\r
-\r
-       */\r
-       int type;\r
-       /*!\r
-               \brief Zero-terminated string containing the username that has to be \r
-               used on the remote machine for authentication.\r
-               \r
-               This field is meaningless in case of the RPCAP_RMTAUTH_NULL authentication\r
-               and it can be NULL.\r
-       */\r
-       char *username;\r
-       /*!\r
-               \brief Zero-terminated string containing the password that has to be \r
-               used on the remote machine for authentication.\r
-               \r
-               This field is meaningless in case of the RPCAP_RMTAUTH_NULL authentication\r
-               and it can be NULL.\r
-       */\r
-       char *password;\r
-};\r
-\r
-\r
-/*!\r
-       \brief This structure defines the information related to sampling.\r
-\r
-       In case the sampling is requested, the capturing device should read\r
-       only a subset of the packets coming from the source. The returned packets depend\r
-       on the sampling parameters.\r
-\r
-       \warning The sampling process is applied <strong>after</strong> the filtering process.\r
-       In other words, packets are filtered first, then the sampling process selects a\r
-       subset of the 'filtered' packets and it returns them to the caller.\r
-*/\r
-struct pcap_samp\r
-{\r
-       /*!\r
-               Method used for sampling. Currently, the supported methods are listed in the\r
-               \link remote_samp_methods Sampling Methods Section\endlink.\r
-       */\r
-       int method;\r
-\r
-       /*!\r
-               This value depends on the sampling method defined. For its meaning, please check\r
-               at the \link remote_samp_methods Sampling Methods Section\endlink.\r
-       */\r
-       int value;\r
-};\r
-\r
-\r
-\r
-\r
-//! Maximum lenght of an host name (needed for the RPCAP active mode)\r
-#define RPCAP_HOSTLIST_SIZE 1024\r
-\r
-\r
-/*!\r
-       \}\r
-*/ // end of public documentation\r
-\r
-\r
-// Exported functions\r
-\r
-\r
-\r
-/** \name New WinPcap functions\r
-\r
-       This section lists the new functions that are able to help considerably in writing\r
-       WinPcap programs because of their easiness of use.\r
- */\r
-//\{\r
-pcap_t *pcap_open(const char *source, int snaplen, int flags, int read_timeout, struct pcap_rmtauth *auth, char *errbuf);\r
-int pcap_createsrcstr(char *source, int type, const char *host, const char *port, const char *name, char *errbuf);\r
-int pcap_parsesrcstr(const char *source, int *type, char *host, char *port, char *name, char *errbuf);\r
-int pcap_findalldevs_ex(char *source, struct pcap_rmtauth *auth, pcap_if_t **alldevs, char *errbuf);\r
-struct pcap_samp *pcap_setsampling(pcap_t *p);\r
-\r
-//\}\r
-// End of new winpcap functions\r
-\r
-\r
-\r
-/** \name Remote Capture functions\r
- */\r
-//\{ \r
-SOCKET pcap_remoteact_accept(const char *address, const char *port, const char *hostlist, char *connectinghost, struct pcap_rmtauth *auth, char *errbuf);\r
-int pcap_remoteact_list(char *hostlist, char sep, int size, char *errbuf);\r
-int pcap_remoteact_close(const char *host, char *errbuf);\r
-void pcap_remoteact_cleanup();\r
-//\}\r
-// End of remote capture functions\r
-\r
-#ifdef __cplusplus\r
-}\r
-#endif\r
-\r
-\r
-#endif\r
-\r
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WinPCap/wpcap.lib b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WinPCap/wpcap.lib
deleted file mode 100644 (file)
index f832e04..0000000
Binary files a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WinPCap/wpcap.lib and /dev/null differ
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/atomic.h b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/atomic.h
deleted file mode 100644 (file)
index d44593d..0000000
+++ /dev/null
@@ -1,547 +0,0 @@
-/*\r
- * FreeRTOS Kernel V10.2.0\r
- * Copyright (C) 2019 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
- * @file atomic.h\r
- * @brief FreeRTOS atomic operation support.\r
- *\r
- * Two implementations of atomic are given in this header file:\r
- * 1. Disabling interrupt globally.\r
- * 2. ISA native atomic support.\r
- * The former is available to all ports (compiler-architecture combination),\r
- * while the latter is only available to ports compiling with GCC (version at\r
- * least 4.7.0), which also have ISA atomic support.\r
- *\r
- * User can select which implementation to use by:\r
- * setting/clearing configUSE_ATOMIC_INSTRUCTION in FreeRTOSConfig.h.\r
- * Define AND set configUSE_ATOMIC_INSTRUCTION to 1 for ISA native atomic support.\r
- * Undefine OR clear configUSE_ATOMIC_INSTRUCTION for disabling global interrupt\r
- * implementation.\r
- *\r
- * @see GCC Built-in Functions for Memory Model Aware Atomic Operations\r
- *      https://gcc.gnu.org/onlinedocs/gcc/_005f_005fatomic-Builtins.html\r
- */\r
-\r
-#ifndef ATOMIC_H\r
-#define ATOMIC_H\r
-\r
-#ifndef INC_FREERTOS_H\r
-    #error "include FreeRTOS.h must appear in source files before include atomic.h"\r
-#endif\r
-\r
-/* Standard includes. */\r
-#include <stdint.h>\r
-\r
-#ifdef __cplusplus\r
-extern "C" {\r
-#endif\r
-\r
-#if defined ( configUSE_GCC_BUILTIN_ATOMICS ) && ( configUSE_GCC_BUILTIN_ATOMICS == 1 )\r
-\r
-    /* Needed for __atomic_compare_exchange() weak=false. */\r
-    #include <stdbool.h>\r
-\r
-    /* This branch is for GCC compiler and GCC compiler only. */\r
-    #ifndef portFORCE_INLINE\r
-        #define portFORCE_INLINE  inline __attribute__((always_inline))\r
-    #endif\r
-\r
-#else\r
-\r
-    /* Port specific definitions -- entering/exiting critical section.\r
-     * Refer template -- ./lib/FreeRTOS/portable/Compiler/Arch/portmacro.h\r
-     *\r
-     * Every call to ATOMIC_EXIT_CRITICAL() must be closely paired with\r
-     * ATOMIC_ENTER_CRITICAL().\r
-     */\r
-    #if defined( portSET_INTERRUPT_MASK_FROM_ISR )\r
-\r
-        /* Nested interrupt scheme is supported in this port. */\r
-        #define ATOMIC_ENTER_CRITICAL()     \\r
-            UBaseType_t uxCriticalSectionType = portSET_INTERRUPT_MASK_FROM_ISR()\r
-\r
-        #define ATOMIC_EXIT_CRITICAL()      \\r
-            portCLEAR_INTERRUPT_MASK_FROM_ISR( uxCriticalSectionType )\r
-\r
-    #else\r
-\r
-        /* Nested interrupt scheme is NOT supported in this port. */\r
-        #define ATOMIC_ENTER_CRITICAL()     portENTER_CRITICAL()\r
-        #define ATOMIC_EXIT_CRITICAL()      portEXIT_CRITICAL()\r
-\r
-    #endif /* portSET_INTERRUPT_MASK_FROM_ISR() */\r
-\r
-    /* Port specific definition -- "always inline". \r
-     * Inline is compiler specific, and may not always get inlined depending on your optimization level. \r
-     * Also, inline is considerred as performance optimization for atomic. \r
-     * Thus, if portFORCE_INLINE is not provided by portmacro.h, instead of resulting error,\r
-     * simply define it. \r
-     */\r
-    #ifndef portFORCE_INLINE\r
-        #define portFORCE_INLINE \r
-    #endif\r
-\r
-#endif /* configUSE_GCC_BUILTIN_ATOMICS */\r
-\r
-#define ATOMIC_COMPARE_AND_SWAP_SUCCESS     0x1U        /**< Compare and swap succeeded, swapped. */\r
-#define ATOMIC_COMPARE_AND_SWAP_FAILURE     0x0U        /**< Compare and swap failed, did not swap. */\r
-\r
-/*----------------------------- Swap && CAS ------------------------------*/\r
-\r
-/**\r
- * Atomic compare-and-swap\r
- *\r
- * @brief Performs an atomic compare-and-swap operation on the specified values.\r
- *\r
- * @param[in, out] pDestination  Pointer to memory location from where value is\r
- *                               to be loaded and checked.\r
- * @param[in] ulExchange         If condition meets, write this value to memory.\r
- * @param[in] ulComparand        Swap condition.\r
- *\r
- * @return Unsigned integer of value 1 or 0. 1 for swapped, 0 for not swapped.\r
- *\r
- * @note This function only swaps *pDestination with ulExchange, if previous\r
- *       *pDestination value equals ulComparand.\r
- */\r
-static portFORCE_INLINE uint32_t Atomic_CompareAndSwap_u32(\r
-        uint32_t volatile * pDestination,\r
-        uint32_t ulExchange,\r
-        uint32_t ulComparand )\r
-{\r
-\r
-    uint32_t ulReturnValue = ATOMIC_COMPARE_AND_SWAP_FAILURE;\r
-\r
-#if defined ( configUSE_GCC_BUILTIN_ATOMICS ) && ( configUSE_GCC_BUILTIN_ATOMICS == 1 )\r
-\r
-    if ( __atomic_compare_exchange( pDestination,\r
-                                    &ulComparand,\r
-                                    &ulExchange,\r
-                                    false,\r
-                                    __ATOMIC_SEQ_CST,\r
-                                    __ATOMIC_SEQ_CST ) )\r
-    {\r
-        ulReturnValue = ATOMIC_COMPARE_AND_SWAP_SUCCESS;\r
-    }\r
-\r
-#else\r
-\r
-    ATOMIC_ENTER_CRITICAL();\r
-\r
-    if ( *pDestination == ulComparand )\r
-    {\r
-        *pDestination = ulExchange;\r
-        ulReturnValue = ATOMIC_COMPARE_AND_SWAP_SUCCESS;\r
-    }\r
-\r
-    ATOMIC_EXIT_CRITICAL();\r
-\r
-#endif\r
-\r
-    return ulReturnValue;\r
-\r
-}\r
-\r
-/**\r
- * Atomic swap (pointers)\r
- *\r
- * @brief Atomically sets the address pointed to by *ppDestination to the value\r
- *        of *pExchange.\r
- *\r
- * @param[in, out] ppDestination  Pointer to memory location from where a pointer\r
- *                                value is to be loaded and written back to.\r
- * @param[in] pExchange           Pointer value to be written to *ppDestination.\r
- *\r
- * @return The initial value of *ppDestination.\r
- */\r
-static portFORCE_INLINE void * Atomic_SwapPointers_p32(\r
-        void * volatile * ppDestination,\r
-        void * pExchange )\r
-{\r
-    void * pReturnValue;\r
-\r
-#if defined ( configUSE_GCC_BUILTIN_ATOMICS ) && ( configUSE_GCC_BUILTIN_ATOMICS == 1 )\r
-\r
-    __atomic_exchange( ppDestination, &pExchange, &pReturnValue, __ATOMIC_SEQ_CST );\r
-\r
-#else\r
-\r
-    ATOMIC_ENTER_CRITICAL();\r
-\r
-    pReturnValue = *ppDestination;\r
-\r
-    *ppDestination = pExchange;\r
-\r
-    ATOMIC_EXIT_CRITICAL();\r
-\r
-#endif\r
-\r
-    return pReturnValue;\r
-}\r
-\r
-/**\r
- * Atomic compare-and-swap (pointers)\r
- *\r
- * @brief Performs an atomic compare-and-swap operation on the specified pointer\r
- *        values.\r
- *\r
- * @param[in, out] ppDestination  Pointer to memory location from where a pointer\r
- *                                value is to be loaded and checked.\r
- * @param[in] pExchange           If condition meets, write this value to memory.\r
- * @param[in] pComparand          Swap condition.\r
- *\r
- * @return Unsigned integer of value 1 or 0. 1 for swapped, 0 for not swapped.\r
- *\r
- * @note This function only swaps *ppDestination with pExchange, if previous\r
- *       *ppDestination value equals pComparand.\r
- */\r
-static portFORCE_INLINE uint32_t Atomic_CompareAndSwapPointers_p32(\r
-        void * volatile * ppDestination,\r
-        void * pExchange, void * pComparand )\r
-{\r
-    uint32_t ulReturnValue = ATOMIC_COMPARE_AND_SWAP_FAILURE;\r
-\r
-#if defined ( configUSE_GCC_BUILTIN_ATOMICS ) && ( configUSE_GCC_BUILTIN_ATOMICS == 1 )\r
-    if ( __atomic_compare_exchange( ppDestination,\r
-                                    &pComparand,\r
-                                    &pExchange,\r
-                                    false,\r
-                                    __ATOMIC_SEQ_CST,\r
-                                    __ATOMIC_SEQ_CST ) )\r
-    {\r
-        ulReturnValue = ATOMIC_COMPARE_AND_SWAP_SUCCESS;\r
-    }\r
-\r
-#else\r
-\r
-    ATOMIC_ENTER_CRITICAL();\r
-\r
-    if ( *ppDestination == pComparand )\r
-    {\r
-        *ppDestination = pExchange;\r
-        ulReturnValue = ATOMIC_COMPARE_AND_SWAP_SUCCESS;\r
-    }\r
-\r
-    ATOMIC_EXIT_CRITICAL();\r
-\r
-#endif\r
-\r
-    return ulReturnValue;\r
-}\r
-\r
-\r
-/*----------------------------- Arithmetic ------------------------------*/\r
-\r
-/**\r
- * Atomic add\r
- *\r
- * @brief Atomically adds count to the value of the specified pointer points to.\r
- *\r
- * @param[in,out] pAddend  Pointer to memory location from where value is to be\r
- *                         loaded and written back to.\r
- * @param[in] ulCount      Value to be added to *pAddend.\r
- *\r
- * @return previous *pAddend value.\r
- */\r
-static portFORCE_INLINE uint32_t Atomic_Add_u32(\r
-        uint32_t volatile * pAddend,\r
-        uint32_t ulCount )\r
-{\r
-#if defined ( configUSE_GCC_BUILTIN_ATOMICS ) && ( configUSE_GCC_BUILTIN_ATOMICS == 1 )\r
-\r
-    return __atomic_fetch_add(pAddend, ulCount, __ATOMIC_SEQ_CST);\r
-\r
-#else\r
-\r
-    uint32_t ulCurrent;\r
-\r
-    ATOMIC_ENTER_CRITICAL();\r
-\r
-    ulCurrent = *pAddend;\r
-\r
-    *pAddend += ulCount;\r
-\r
-    ATOMIC_EXIT_CRITICAL();\r
-\r
-    return ulCurrent;\r
-\r
-#endif\r
-}\r
-\r
-/**\r
- * Atomic subtract\r
- *\r
- * @brief Atomically subtracts count from the value of the specified pointer\r
- *        pointers to.\r
- *\r
- * @param[in,out] pAddend  Pointer to memory location from where value is to be\r
- *                         loaded and written back to.\r
- * @param[in] ulCount      Value to be subtract from *pAddend.\r
- *\r
- * @return previous *pAddend value.\r
- */\r
-static portFORCE_INLINE uint32_t Atomic_Subtract_u32(\r
-        uint32_t volatile * pAddend,\r
-        uint32_t ulCount )\r
-{\r
-#if defined ( configUSE_GCC_BUILTIN_ATOMICS ) && ( configUSE_GCC_BUILTIN_ATOMICS == 1 )\r
-\r
-    return __atomic_fetch_sub(pAddend, ulCount, __ATOMIC_SEQ_CST);\r
-\r
-#else\r
-\r
-    uint32_t ulCurrent;\r
-\r
-    ATOMIC_ENTER_CRITICAL();\r
-\r
-    ulCurrent = *pAddend;\r
-\r
-    *pAddend -= ulCount;\r
-\r
-    ATOMIC_EXIT_CRITICAL();\r
-\r
-    return ulCurrent;\r
-\r
-#endif\r
-}\r
-\r
-/**\r
- * Atomic increment\r
- *\r
- * @brief Atomically increments the value of the specified pointer points to.\r
- *\r
- * @param[in,out] pAddend  Pointer to memory location from where value is to be\r
- *                         loaded and written back to.\r
- *\r
- * @return *pAddend value before increment.\r
- */\r
-static portFORCE_INLINE uint32_t Atomic_Increment_u32( uint32_t volatile * pAddend )\r
-{\r
-#if defined ( configUSE_GCC_BUILTIN_ATOMICS ) && ( configUSE_GCC_BUILTIN_ATOMICS == 1 )\r
-\r
-    return __atomic_fetch_add(pAddend, 1, __ATOMIC_SEQ_CST);\r
-\r
-#else\r
-\r
-    uint32_t ulCurrent;\r
-\r
-    ATOMIC_ENTER_CRITICAL();\r
-\r
-    ulCurrent = *pAddend;\r
-\r
-    *pAddend += 1;\r
-\r
-    ATOMIC_EXIT_CRITICAL();\r
-\r
-    return ulCurrent;\r
-\r
-#endif\r
-}\r
-\r
-/**\r
- * Atomic decrement\r
- *\r
- * @brief Atomically decrements the value of the specified pointer points to\r
- *\r
- * @param[in,out] pAddend  Pointer to memory location from where value is to be\r
- *                         loaded and written back to.\r
- *\r
- * @return *pAddend value before decrement.\r
- */\r
-static portFORCE_INLINE uint32_t Atomic_Decrement_u32( uint32_t volatile * pAddend )\r
-{\r
-#if defined ( configUSE_GCC_BUILTIN_ATOMICS ) && ( configUSE_GCC_BUILTIN_ATOMICS == 1 )\r
-\r
-    return __atomic_fetch_sub(pAddend, 1, __ATOMIC_SEQ_CST);\r
-\r
-#else\r
-\r
-    uint32_t ulCurrent;\r
-\r
-    ATOMIC_ENTER_CRITICAL();\r
-\r
-    ulCurrent = *pAddend;\r
-\r
-    *pAddend -= 1;\r
-\r
-    ATOMIC_EXIT_CRITICAL();\r
-\r
-    return ulCurrent;\r
-\r
-#endif\r
-}\r
-\r
-/*----------------------------- Bitwise Logical ------------------------------*/\r
-\r
-/**\r
- * Atomic OR\r
- *\r
- * @brief Performs an atomic OR operation on the specified values.\r
- *\r
- * @param [in, out] pDestination  Pointer to memory location from where value is\r
- *                                to be loaded and written back to.\r
- * @param [in] ulValue            Value to be ORed with *pDestination.\r
- *\r
- * @return The original value of *pDestination.\r
- */\r
-static portFORCE_INLINE uint32_t Atomic_OR_u32(\r
-        uint32_t volatile * pDestination,\r
-        uint32_t ulValue )\r
-{\r
-#if defined ( configUSE_GCC_BUILTIN_ATOMICS ) && ( configUSE_GCC_BUILTIN_ATOMICS == 1 )\r
-\r
-    return __atomic_fetch_or(pDestination, ulValue, __ATOMIC_SEQ_CST);\r
-\r
-#else\r
-\r
-    uint32_t ulCurrent;\r
-\r
-    ATOMIC_ENTER_CRITICAL();\r
-\r
-    ulCurrent = *pDestination;\r
-\r
-    *pDestination |= ulValue;\r
-\r
-    ATOMIC_EXIT_CRITICAL();\r
-\r
-    return ulCurrent;\r
-\r
-#endif\r
-}\r
-\r
-/**\r
- * Atomic AND\r
- *\r
- * @brief Performs an atomic AND operation on the specified values.\r
- *\r
- * @param [in, out] pDestination  Pointer to memory location from where value is\r
- *                                to be loaded and written back to.\r
- * @param [in] ulValue            Value to be ANDed with *pDestination.\r
- *\r
- * @return The original value of *pDestination.\r
- */\r
-static portFORCE_INLINE uint32_t Atomic_AND_u32(\r
-        uint32_t volatile * pDestination,\r
-        uint32_t ulValue )\r
-{\r
-#if defined ( configUSE_GCC_BUILTIN_ATOMICS ) && ( configUSE_GCC_BUILTIN_ATOMICS == 1 )\r
-\r
-    return __atomic_fetch_and(pDestination, ulValue, __ATOMIC_SEQ_CST);\r
-\r
-#else\r
-\r
-    uint32_t ulCurrent;\r
-\r
-    ATOMIC_ENTER_CRITICAL();\r
-\r
-    ulCurrent = *pDestination;\r
-\r
-    *pDestination &= ulValue;\r
-\r
-    ATOMIC_EXIT_CRITICAL();\r
-\r
-    return ulCurrent;\r
-\r
-#endif\r
-}\r
-\r
-/**\r
- * Atomic NAND\r
- *\r
- * @brief Performs an atomic NAND operation on the specified values.\r
- *\r
- * @param [in, out] pDestination  Pointer to memory location from where value is\r
- *                                to be loaded and written back to.\r
- * @param [in] ulValue            Value to be NANDed with *pDestination.\r
- *\r
- * @return The original value of *pDestination.\r
- */\r
-static portFORCE_INLINE uint32_t Atomic_NAND_u32(\r
-        uint32_t volatile * pDestination,\r
-        uint32_t ulValue )\r
-{\r
-#if defined ( configUSE_GCC_BUILTIN_ATOMICS ) && ( configUSE_GCC_BUILTIN_ATOMICS == 1 )\r
-\r
-    return __atomic_fetch_nand(pDestination, ulValue, __ATOMIC_SEQ_CST);\r
-\r
-#else\r
-\r
-    uint32_t ulCurrent;\r
-\r
-    ATOMIC_ENTER_CRITICAL();\r
-\r
-    ulCurrent = *pDestination;\r
-\r
-    *pDestination = ~(ulCurrent & ulValue);\r
-\r
-    ATOMIC_EXIT_CRITICAL();\r
-\r
-    return ulCurrent;\r
-\r
-#endif\r
-}\r
-\r
-/**\r
- * Atomic XOR\r
- *\r
- * @brief Performs an atomic XOR operation on the specified values.\r
- *\r
- * @param [in, out] pDestination  Pointer to memory location from where value is\r
- *                                to be loaded and written back to.\r
- * @param [in] ulValue            Value to be XORed with *pDestination.\r
- *\r
- * @return The original value of *pDestination.\r
- */\r
-static portFORCE_INLINE uint32_t Atomic_XOR_u32(\r
-        uint32_t volatile * pDestination,\r
-        uint32_t ulValue )\r
-{\r
-#if defined ( configUSE_GCC_BUILTIN_ATOMICS ) && ( configUSE_GCC_BUILTIN_ATOMICS == 1 )\r
-\r
-    return __atomic_fetch_xor(pDestination, ulValue, __ATOMIC_SEQ_CST);\r
-\r
-#else\r
-\r
-    uint32_t ulCurrent;\r
-\r
-    ATOMIC_ENTER_CRITICAL();\r
-\r
-    ulCurrent = *pDestination;\r
-\r
-    *pDestination ^= ulValue;\r
-\r
-    ATOMIC_EXIT_CRITICAL();\r
-\r
-    return ulCurrent;\r
-\r
-#endif\r
-}\r
-\r
-#ifdef __cplusplus\r
-}\r
-#endif\r
-\r
-#endif /* ATOMIC_H */\r
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/demo_logging.c b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/demo_logging.c
deleted file mode 100644 (file)
index d6a1d25..0000000
+++ /dev/null
@@ -1,526 +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
- * Logging utility that allows FreeRTOS tasks to log to a UDP port, stdout, and\r
- * disk file without making any Win32 system calls themselves.\r
- *\r
- * Messages logged to a UDP port are sent directly (using FreeRTOS+TCP), but as\r
- * FreeRTOS tasks cannot make Win32 system calls messages sent to stdout or a\r
- * disk file are sent via a stream buffer to a Win32 thread which then performs\r
- * the actual output.\r
- */\r
-\r
-/* Standard includes. */\r
-#include <stdio.h>\r
-#include <stdint.h>\r
-#include <stdarg.h>\r
-#include <io.h>\r
-#include <ctype.h>\r
-\r
-/* FreeRTOS includes. */\r
-#include <FreeRTOS.h>\r
-#include "task.h"\r
-\r
-/* FreeRTOS+TCP includes. */\r
-#include "FreeRTOS_IP.h"\r
-#include "FreeRTOS_Sockets.h"\r
-#include "FreeRTOS_Stream_Buffer.h"\r
-\r
-/* Demo includes. */\r
-#include "demo_logging.h"\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-/* The maximum size to which the log file may grow, before being renamed\r
-to .ful. */\r
-#define dlLOGGING_FILE_SIZE            ( 40ul * 1024ul * 1024ul )\r
-\r
-/* Dimensions the arrays into which print messages are created. */\r
-#define dlMAX_PRINT_STRING_LENGTH      255\r
-\r
-/* The size of the stream buffer used to pass messages from FreeRTOS tasks to\r
-the Win32 thread that is responsible for making any Win32 system calls that are\r
-necessary for the selected logging method. */\r
-#define dlLOGGING_STREAM_BUFFER_SIZE  32768\r
-\r
-/* A block time of zero simply means don't block. */\r
-#define dlDONT_BLOCK   0\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-/*\r
- * Called from vLoggingInit() to start a new disk log file.\r
- */\r
-static void prvFileLoggingInit( void );\r
-\r
-/*\r
- * Attempt to write a message to the file.\r
- */\r
-static void prvLogToFile( const char *pcMessage, size_t xLength );\r
-\r
-/*\r
- * Simply close the logging file, if it is open.\r
- */\r
-static void prvFileClose( void );\r
-\r
-/*\r
- * Before the scheduler is started this function is called directly.  After the\r
- * scheduler has started it is called from the Windows thread dedicated to\r
- * outputting log messages.  Only the windows thread actually performs the\r
- * writing so as not to disrupt the simulation by making Windows system calls\r
- * from FreeRTOS tasks.\r
- */\r
-static void prvLoggingFlushBuffer( void );\r
-\r
-/*\r
- * The windows thread that performs the actual writing of messages that require\r
- * Win32 system calls.  Only the windows thread can make system calls so as not\r
- * to disrupt the simulation by making Windows calls from FreeRTOS tasks.\r
- */\r
-static DWORD WINAPI prvWin32LoggingThread( void *pvParam );\r
-\r
-/*\r
- * Creates the socket to which UDP messages are sent.  This function is not\r
- * called directly to prevent the print socket being created from within the IP\r
- * task - which could result in a deadlock.  Instead the function call is\r
- * deferred to run in the RTOS daemon task - hence it prototype.\r
- */\r
-static void prvCreatePrintSocket( void *pvParameter1, uint32_t ulParameter2 );\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-/* Windows event used to wake the Win32 thread which performs any logging that\r
-needs Win32 system calls. */\r
-static void *pvLoggingThreadEvent = NULL;\r
-\r
-/* Stores the selected logging targets passed in as parameters to the\r
-vLoggingInit() function. */\r
-BaseType_t xStdoutLoggingUsed = pdFALSE, xDiskFileLoggingUsed = pdFALSE, xUDPLoggingUsed = pdFALSE;\r
-\r
-/* Circular buffer used to pass messages from the FreeRTOS tasks to the Win32\r
-thread that is responsible for making Win32 calls (when stdout or a disk log is\r
-used). */\r
-static StreamBuffer_t *xLogStreamBuffer = NULL;\r
-\r
-/* Handle to the file used for logging.  This is left open while there are\r
-messages waiting to be logged, then closed again in between logs. */\r
-static FILE *pxLoggingFileHandle = NULL;\r
-\r
-/* When true prints are performed directly.  After start up xDirectPrint is set\r
-to pdFALSE - at which time prints that require Win32 system calls are done by\r
-the Win32 thread responsible for logging. */\r
-BaseType_t xDirectPrint = pdTRUE;\r
-\r
-/* File names for the in use and complete (full) log files. */\r
-static const char *pcLogFileName = "RTOSDemo.log";\r
-static const char *pcFullLogFileName = "RTOSDemo.ful";\r
-\r
-/* Keep the current file size in a variable, as an optimisation. */\r
-static size_t ulSizeOfLoggingFile = 0ul;\r
-\r
-/* The UDP socket and address on/to which print messages are sent. */\r
-Socket_t xPrintSocket = FREERTOS_INVALID_SOCKET;\r
-struct freertos_sockaddr xPrintUDPAddress;\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-void vLoggingInit( BaseType_t xLogToStdout, BaseType_t xLogToFile, BaseType_t xLogToUDP, uint32_t ulRemoteIPAddress, uint16_t usRemotePort )\r
-{\r
-       /* Can only be called before the scheduler has started. */\r
-       configASSERT( xTaskGetSchedulerState() == taskSCHEDULER_NOT_STARTED );\r
-\r
-       #if( ( ipconfigHAS_DEBUG_PRINTF == 1 ) || ( ipconfigHAS_PRINTF == 1 ) )\r
-       {\r
-               HANDLE Win32Thread;\r
-\r
-               /* Record which output methods are to be used. */\r
-               xStdoutLoggingUsed = xLogToStdout;\r
-               xDiskFileLoggingUsed = xLogToFile;\r
-               xUDPLoggingUsed = xLogToUDP;\r
-\r
-               /* If a disk file is used then initialise it now. */\r
-               if( xDiskFileLoggingUsed != pdFALSE )\r
-               {\r
-                       prvFileLoggingInit();\r
-               }\r
-\r
-               /* If UDP logging is used then store the address to which the log data\r
-               will be sent - but don't create the socket yet because the network is\r
-               not initialised. */\r
-               if( xUDPLoggingUsed != pdFALSE )\r
-               {\r
-                       /* Set the address to which the print messages are sent. */\r
-                       xPrintUDPAddress.sin_port = FreeRTOS_htons( usRemotePort );\r
-                       xPrintUDPAddress.sin_addr = ulRemoteIPAddress;\r
-               }\r
-\r
-               /* If a disk file or stdout are to be used then Win32 system calls will\r
-               have to be made.  Such system calls cannot be made from FreeRTOS tasks\r
-               so create a stream buffer to pass the messages to a Win32 thread, then\r
-               create the thread itself, along with a Win32 event that can be used to\r
-               unblock the thread. */\r
-               if( ( xStdoutLoggingUsed != pdFALSE ) || ( xDiskFileLoggingUsed != pdFALSE ) )\r
-               {\r
-                       /* Create the buffer. */\r
-                       xLogStreamBuffer = ( StreamBuffer_t * ) malloc( sizeof( *xLogStreamBuffer ) - sizeof( xLogStreamBuffer->ucArray ) + dlLOGGING_STREAM_BUFFER_SIZE + 1 );\r
-                       configASSERT( xLogStreamBuffer );\r
-                       memset( xLogStreamBuffer, '\0', sizeof( *xLogStreamBuffer ) - sizeof( xLogStreamBuffer->ucArray ) );\r
-                       xLogStreamBuffer->LENGTH = dlLOGGING_STREAM_BUFFER_SIZE + 1;\r
-\r
-                       /* Create the Windows event. */\r
-                       pvLoggingThreadEvent = CreateEvent( NULL, FALSE, TRUE, "StdoutLoggingEvent" );\r
-\r
-                       /* Create the thread itself. */\r
-                       Win32Thread = CreateThread(\r
-                               NULL,   /* Pointer to thread security attributes. */\r
-                               0,              /* Initial thread stack size, in bytes. */\r
-                               prvWin32LoggingThread,  /* Pointer to thread function. */\r
-                               NULL,   /* Argument for new thread. */\r
-                               0,              /* Creation flags. */\r
-                               NULL );\r
-\r
-                       /* Use the cores that are not used by the FreeRTOS tasks. */\r
-                       SetThreadAffinityMask( Win32Thread, ~0x01u );\r
-                       SetThreadPriorityBoost( Win32Thread, TRUE );\r
-                       SetThreadPriority( Win32Thread, THREAD_PRIORITY_IDLE );\r
-               }\r
-       }\r
-       #else\r
-       {\r
-               /* FreeRTOSIPConfig is set such that no print messages will be output.\r
-               Avoid compiler warnings about unused parameters. */\r
-               ( void ) xLogToStdout;\r
-               ( void ) xLogToFile;\r
-               ( void ) xLogToUDP;\r
-               ( void ) usRemotePort;\r
-               ( void ) ulRemoteIPAddress;\r
-       }\r
-       #endif /* ( ipconfigHAS_DEBUG_PRINTF == 1 ) || ( ipconfigHAS_PRINTF == 1 )  */\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvCreatePrintSocket( void *pvParameter1, uint32_t ulParameter2 )\r
-{\r
-static const TickType_t xSendTimeOut = pdMS_TO_TICKS( 0 );\r
-Socket_t xSocket;\r
-\r
-       /* The function prototype is that of a deferred function, but the parameters\r
-       are not actually used. */\r
-       ( void ) pvParameter1;\r
-       ( void ) ulParameter2;\r
-\r
-       xSocket = FreeRTOS_socket( FREERTOS_AF_INET, FREERTOS_SOCK_DGRAM, FREERTOS_IPPROTO_UDP );\r
-\r
-       if( xSocket != FREERTOS_INVALID_SOCKET )\r
-       {\r
-               /* FreeRTOS+TCP decides which port to bind to. */\r
-               FreeRTOS_setsockopt( xSocket, 0, FREERTOS_SO_SNDTIMEO, &xSendTimeOut, sizeof( xSendTimeOut ) );\r
-               FreeRTOS_bind( xSocket, NULL, 0 );\r
-\r
-               /* Now the socket is bound it can be assigned to the print socket. */\r
-               xPrintSocket = xSocket;\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-void vLoggingPrintf( const char *pcFormat, ... )\r
-{\r
-char cPrintString[ dlMAX_PRINT_STRING_LENGTH ];\r
-char cOutputString[ dlMAX_PRINT_STRING_LENGTH ];\r
-char *pcSource, *pcTarget, *pcBegin;\r
-size_t xLength, xLength2, rc;\r
-static BaseType_t xMessageNumber = 0;\r
-va_list args;\r
-uint32_t ulIPAddress;\r
-const char *pcTaskName;\r
-const char *pcNoTask = "None";\r
-int iOriginalPriority;\r
-HANDLE xCurrentTask;\r
-\r
-\r
-       if( ( xStdoutLoggingUsed != pdFALSE ) || ( xDiskFileLoggingUsed != pdFALSE ) || ( xUDPLoggingUsed != pdFALSE ) )\r
-       {\r
-               /* There are a variable number of parameters. */\r
-               va_start( args, pcFormat );\r
-\r
-               /* Additional info to place at the start of the log. */\r
-               if( xTaskGetSchedulerState() != taskSCHEDULER_NOT_STARTED )\r
-               {\r
-                       pcTaskName = pcTaskGetName( NULL );\r
-               }\r
-               else\r
-               {\r
-                       pcTaskName = pcNoTask;\r
-               }\r
-\r
-               if( strcmp( pcFormat, "\n" ) != 0 )\r
-               {\r
-                       xLength = snprintf( cPrintString, dlMAX_PRINT_STRING_LENGTH, "%lu %lu [%s] ",\r
-                               xMessageNumber++,\r
-                               ( unsigned long ) xTaskGetTickCount(),\r
-                               pcTaskName );\r
-               }\r
-               else\r
-               {\r
-                       xLength = 0;\r
-                       memset( cPrintString, 0x00, dlMAX_PRINT_STRING_LENGTH );\r
-               }\r
-\r
-               xLength2 = vsnprintf( cPrintString + xLength, dlMAX_PRINT_STRING_LENGTH - xLength, pcFormat, args );\r
-\r
-               if( xLength2 <  0 )\r
-               {\r
-                       /* Clean up. */\r
-                       xLength2 = dlMAX_PRINT_STRING_LENGTH - 1 - xLength;\r
-                       cPrintString[ dlMAX_PRINT_STRING_LENGTH - 1 ] = '\0';\r
-               }\r
-\r
-               xLength += xLength2;\r
-               va_end( args );\r
-\r
-               /* For ease of viewing, copy the string into another buffer, converting\r
-               IP addresses to dot notation on the way. */\r
-               pcSource = cPrintString;\r
-               pcTarget = cOutputString;\r
-\r
-               while( ( *pcSource ) != '\0' )\r
-               {\r
-                       *pcTarget = *pcSource;\r
-                       pcTarget++;\r
-                       pcSource++;\r
-\r
-                       /* Look forward for an IP address denoted by 'ip'. */\r
-                       if( ( isxdigit( pcSource[ 0 ] ) != pdFALSE ) && ( pcSource[ 1 ] == 'i' ) && ( pcSource[ 2 ] == 'p' ) )\r
-                       {\r
-                               *pcTarget = *pcSource;\r
-                               pcTarget++;\r
-                               *pcTarget = '\0';\r
-                               pcBegin = pcTarget - 8;\r
-\r
-                               while( ( pcTarget > pcBegin ) && ( isxdigit( pcTarget[ -1 ] ) != pdFALSE ) )\r
-                               {\r
-                                       pcTarget--;\r
-                               }\r
-\r
-                               sscanf( pcTarget, "%8X", &ulIPAddress );\r
-                               rc = sprintf( pcTarget, "%lu.%lu.%lu.%lu",\r
-                                       ( unsigned long ) ( ulIPAddress >> 24UL ),\r
-                                       ( unsigned long ) ( (ulIPAddress >> 16UL) & 0xffUL ),\r
-                                       ( unsigned long ) ( (ulIPAddress >> 8UL) & 0xffUL ),\r
-                                       ( unsigned long ) ( ulIPAddress & 0xffUL ) );\r
-                               pcTarget += rc;\r
-                               pcSource += 3; /* skip "<n>ip" */\r
-                       }\r
-               }\r
-\r
-               /* How far through the buffer was written? */\r
-               xLength = ( BaseType_t ) ( pcTarget - cOutputString );\r
-\r
-               /* If the message is to be logged to a UDP port then it can be sent directly\r
-               because it only uses FreeRTOS function (not Win32 functions). */\r
-               if( xUDPLoggingUsed != pdFALSE )\r
-               {\r
-                       if( ( xPrintSocket == FREERTOS_INVALID_SOCKET ) && ( FreeRTOS_IsNetworkUp() != pdFALSE ) )\r
-                       {\r
-                               /* Create and bind the socket to which print messages are sent.  The\r
-                               xTimerPendFunctionCall() function is used even though this is\r
-                               not an interrupt because this function is called from the IP task\r
-                               and the IP task cannot itself wait for a socket to bind.  The\r
-                               parameters to prvCreatePrintSocket() are not required so set to\r
-                               NULL or 0. */\r
-                               xTimerPendFunctionCall( prvCreatePrintSocket, NULL, 0, dlDONT_BLOCK );\r
-                       }\r
-\r
-                       if( xPrintSocket != FREERTOS_INVALID_SOCKET )\r
-                       {\r
-                               FreeRTOS_sendto( xPrintSocket, cOutputString, xLength, 0, &xPrintUDPAddress, sizeof( xPrintUDPAddress ) );\r
-\r
-                               /* Just because the UDP data logger I'm using is dumb. */\r
-                               FreeRTOS_sendto( xPrintSocket, "\r", sizeof( char ), 0, &xPrintUDPAddress, sizeof( xPrintUDPAddress ) );\r
-                       }\r
-               }\r
-\r
-               /* If logging is also to go to either stdout or a disk file then it cannot\r
-               be output here - so instead write the message to the stream buffer and wake\r
-               the Win32 thread which will read it from the stream buffer and perform the\r
-               actual output. */\r
-               if( ( xStdoutLoggingUsed != pdFALSE ) || ( xDiskFileLoggingUsed != pdFALSE ) )\r
-               {\r
-                       configASSERT( xLogStreamBuffer );\r
-\r
-                       /* How much space is in the buffer? */\r
-                       xLength2 = uxStreamBufferGetSpace( xLogStreamBuffer );\r
-\r
-                       /* There must be enough space to write both the string and the length of\r
-                       the string. */\r
-                       if( xLength2 >= ( xLength + sizeof( xLength ) ) )\r
-                       {\r
-                               /* First write in the length of the data, then write in the data\r
-                               itself.  Raising the thread priority is used as a critical section\r
-                               as there are potentially multiple writers.  The stream buffer is\r
-                               only thread safe when there is a single writer (likewise for\r
-                               reading from the buffer). */\r
-                               xCurrentTask = GetCurrentThread();\r
-                               iOriginalPriority = GetThreadPriority( xCurrentTask );\r
-                               SetThreadPriority( GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL );\r
-                               uxStreamBufferAdd( xLogStreamBuffer, 0, ( const uint8_t * ) &( xLength ), sizeof( xLength ) );\r
-                               uxStreamBufferAdd( xLogStreamBuffer, 0, ( const uint8_t * ) cOutputString, xLength );\r
-                               SetThreadPriority( GetCurrentThread(), iOriginalPriority );\r
-                       }\r
-\r
-                       /* xDirectPrint is initialised to pdTRUE, and while it remains true the\r
-                       logging output function is called directly.  When the system is running\r
-                       the output function cannot be called directly because it would get\r
-                       called from both FreeRTOS tasks and Win32 threads - so instead wake the\r
-                       Win32 thread responsible for the actual output. */\r
-                       if( xDirectPrint != pdFALSE )\r
-                       {\r
-                               /* While starting up, the thread which calls prvWin32LoggingThread()\r
-                               is not running yet and xDirectPrint will be pdTRUE. */\r
-                               prvLoggingFlushBuffer();\r
-                       }\r
-                       else if( pvLoggingThreadEvent != NULL )\r
-                       {\r
-                               /* While running, wake up prvWin32LoggingThread() to send the\r
-                               logging data. */\r
-                               SetEvent( pvLoggingThreadEvent );\r
-                       }\r
-               }\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvLoggingFlushBuffer( void )\r
-{\r
-size_t xLength;\r
-char cPrintString[ dlMAX_PRINT_STRING_LENGTH ];\r
-\r
-       /* Is there more than the length value stored in the circular buffer\r
-       used to pass data from the FreeRTOS simulator into this Win32 thread? */\r
-       while( uxStreamBufferGetSize( xLogStreamBuffer ) > sizeof( xLength ) )\r
-       {\r
-               memset( cPrintString, 0x00, dlMAX_PRINT_STRING_LENGTH );\r
-               uxStreamBufferGet( xLogStreamBuffer, 0, ( uint8_t * ) &xLength, sizeof( xLength ), pdFALSE );\r
-               uxStreamBufferGet( xLogStreamBuffer, 0, ( uint8_t * ) cPrintString, xLength, pdFALSE );\r
-\r
-               /* Write the message to standard out if requested to do so when\r
-               vLoggingInit() was called, or if the network is not yet up. */\r
-               if( ( xStdoutLoggingUsed != pdFALSE ) || ( FreeRTOS_IsNetworkUp() == pdFALSE ) )\r
-               {\r
-                       /* Write the message to stdout. */\r
-                       printf( "%s", cPrintString ); /*_RB_ Replace with _write(). */\r
-               }\r
-\r
-               /* Write the message to a file if requested to do so when\r
-               vLoggingInit() was called. */\r
-               if( xDiskFileLoggingUsed != pdFALSE )\r
-               {\r
-                       prvLogToFile( cPrintString, xLength );\r
-               }\r
-       }\r
-\r
-       prvFileClose();\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static DWORD WINAPI prvWin32LoggingThread( void *pvParameter )\r
-{\r
-const DWORD xMaxWait = 1000;\r
-\r
-       ( void ) pvParameter;\r
-\r
-       /* From now on, prvLoggingFlushBuffer() will only be called from this\r
-       Windows thread */\r
-       xDirectPrint = pdFALSE;\r
-\r
-       for( ;; )\r
-       {\r
-               /* Wait to be told there are message waiting to be logged. */\r
-               WaitForSingleObject( pvLoggingThreadEvent, xMaxWait );\r
-\r
-               /* Write out all waiting messages. */\r
-               prvLoggingFlushBuffer();\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvFileLoggingInit( void )\r
-{\r
-FILE *pxHandle = fopen( pcLogFileName, "a" );\r
-\r
-       if( pxHandle != NULL )\r
-       {\r
-               fseek( pxHandle, SEEK_END, 0ul );\r
-               ulSizeOfLoggingFile = ftell( pxHandle );\r
-               fclose( pxHandle );\r
-       }\r
-       else\r
-       {\r
-               ulSizeOfLoggingFile = 0ul;\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvFileClose( void )\r
-{\r
-       if( pxLoggingFileHandle != NULL )\r
-       {\r
-               fclose( pxLoggingFileHandle );\r
-               pxLoggingFileHandle = NULL;\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvLogToFile( const char *pcMessage, size_t xLength )\r
-{\r
-       if( pxLoggingFileHandle == NULL )\r
-       {\r
-               pxLoggingFileHandle = fopen( pcLogFileName, "a" );\r
-       }\r
-\r
-       if( pxLoggingFileHandle != NULL )\r
-       {\r
-               fwrite( pcMessage, 1, xLength, pxLoggingFileHandle );\r
-               ulSizeOfLoggingFile += xLength;\r
-\r
-               /* If the file has grown to its maximum permissible size then close and\r
-               rename it - then start with a new file. */\r
-               if( ulSizeOfLoggingFile > ( size_t ) dlLOGGING_FILE_SIZE )\r
-               {\r
-                       prvFileClose();\r
-                       if( _access( pcFullLogFileName, 00 ) == 0 )\r
-                       {\r
-                               remove( pcFullLogFileName );\r
-                       }\r
-                       rename( pcLogFileName, pcFullLogFileName );\r
-                       ulSizeOfLoggingFile = 0;\r
-               }\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/demo_logging.h b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/demo_logging.h
deleted file mode 100644 (file)
index 62ae46a..0000000
+++ /dev/null
@@ -1,48 +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
-#ifndef DEMO_LOGGING_H\r
-#define DEMO_LOGGING_H\r
-\r
-/*\r
- * Initialise a logging system that can be used from FreeRTOS tasks and Win32\r
- * threads.  Do not call printf() directly while the scheduler is running.\r
- *\r
- * Set xLogToStdout, xLogToFile and xLogToUDP to either pdTRUE or pdFALSE to\r
- * lot to stdout, a disk file and a UDP port respectively.\r
- *\r
- * If xLogToUDP is pdTRUE then ulRemoteIPAddress and usRemotePort must be set\r
- * to the IP address and port number to which UDP log messages will be sent.\r
- */\r
-void vLoggingInit(     BaseType_t xLogToStdout,\r
-                                       BaseType_t xLogToFile,\r
-                                       BaseType_t xLogToUDP,\r
-                                       uint32_t ulRemoteIPAddress,\r
-                                       uint16_t usRemotePort );\r
-\r
-#endif /* DEMO_LOGGING_H */\r
-\r
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/iot_config.h b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/iot_config.h
deleted file mode 100644 (file)
index 8a06baa..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-/*\r
- * Copyright (C) 2018 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
-\r
-/* This file contains configuration settings for the demos. */\r
-\r
-#ifndef IOT_CONFIG_H_\r
-#define IOT_CONFIG_H_\r
-\r
-\r
-/**\r
- * @brief The number of recyclable jobs for the task pool to cache.\r
- *\r
- * Caching dynamically allocated jobs (recyclable jobs) helps the application\r
- * to limit the number of allocations at runtime. Caching recyclable jobs may\r
- * help making the application more responsive and predictable, by removing a\r
- * potential for memory allocation failures, but it may also have negative\r
- * repercussions on the amount of memory available at any given time. It is up\r
- * to the application developer to strike the correct balance among these\r
- * competing needs. The task pool will cache a job when the application calls\r
- * IotTaskPool_RecycleJob on a job which was created using\r
- * IotTaskPool_CreateRecyclableJob API. Any recycled jobs in excess of\r
- * IOT_TASKPOOL_JOBS_RECYCLE_LIMIT will be destroyed and its memory will be\r
- * released.\r
- *\r
- * Default value (if undefined): 8\r
- */\r
-#define IOT_TASKPOOL_JOBS_RECYCLE_LIMIT             8\r
-\r
-/**\r
- * @brief Enable/Disable asserts for the task pool library.\r
- *\r
- * Set this to 1 to perform sanity checks when using the task pool library.\r
- * Asserts are useful for debugging, but should be disabled in production code.\r
- * If this is set to 1, IotTaskPool_Assert can be defined to set the assertion\r
- * function; otherwise, the standard library's assert function will be used.\r
- *\r
- * Possible values: 0 (asserts disabled) or 1 (asserts enabled)\r
- * Recommended values: 1 when debugging; 0 in production code.\r
- * Default value (if undefined): 0\r
- */\r
-#define IOT_TASKPOOL_ENABLE_ASSERTS                 1\r
-\r
-/**\r
- * @brief The numer of worker tasks in the task pool.\r
- *\r
- * The full IoT Task Pool Library has many use cases, including Linux\r
- * development. Typical FreeRTOS use cases do not require the full\r
- * functionality so an optimized implementation is provided specifically for use\r
- * with FreeRTOS. The optimized version has a fixed number of tasks in the\r
- * task pool, each of which uses statically allocated memory to ensure creation\r
- * of the task pool is guaranteed (it does not run out of heap space).\r
- */\r
-#define IOT_TASKPOOL_NUMBER_OF_WORKERS               3\r
-\r
-/*\r
- * @brief Set the log level of the task pool library.\r
- *\r
- * Log messages from the task pool library at or below this setting will be\r
- * printed.\r
- *\r
- * Possible values: One of the Log levels.\r
- * Default value (if undefined): IOT_LOG_LEVEL_GLOBAL; if that is undefined,\r
- * then IOT_LOG_NONE.\r
- */\r
-#define IOT_LOG_LEVEL_TASKPOOL                      IOT_LOG_WARN\r
-\r
-\r
-/**\r
- * @brief The stack size (in bytes) for each worker task in the task pool.\r
- *\r
- * The minimal version of the of task pool library only supports one task pool\r
- * and the configuration of each worker task fixed at the compile time.\r
- */\r
-#define IOT_TASKPOOL_WORKER_STACK_SIZE_BYTES        2048\r
-\r
-/**\r
- * @brief The amount of time the MQTT library waits for responses (PINGRESPs or\r
- * PUBACKs) from the MQTT broker.\r
- */\r
-#define IOT_MQTT_RESPONSE_WAIT_MS                   ( 10000 )\r
-\r
-/**\r
- * @brief Enable/Disable anonymous metrics collection when using AWS IoT.\r
- *\r
- * This demo does not use TLS and so does not work with AWS IoT. Therefore,\r
- * the metric collection must be disabled.\r
- */\r
-#define AWS_IOT_MQTT_ENABLE_METRICS                 0\r
-\r
-/**\r
- * @brief Set the log level of the MQTT library.\r
- *\r
- * Log messages from the MQTT library at or below this setting will be printed.\r
- *\r
- * Possible values: One of the Log levels.\r
- * Default value (if undefined): IOT_LOG_LEVEL_GLOBAL; if that is undefined,\r
- * then IOT_LOG_NONE.\r
- */\r
-#define IOT_LOG_LEVEL_MQTT                          IOT_LOG_WARN\r
-\r
-/* Include the common configuration file for FreeRTOS. */\r
-#include "iot_config_common.h"\r
-\r
-#endif /* ifndef IOT_CONFIG_H_ */\r
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/iot_config_common.h b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/iot_config_common.h
deleted file mode 100644 (file)
index 8d39bac..0000000
+++ /dev/null
@@ -1,200 +0,0 @@
-/*\r
- * Amazon FreeRTOS V201906.00 Major\r
- * Copyright (C) 2019 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://aws.amazon.com/freertos\r
- * http://www.FreeRTOS.org\r
- */\r
-\r
-/* This file contains default configuration settings for the demos on FreeRTOS. */\r
-\r
-#ifndef IOT_CONFIG_COMMON_H_\r
-#define IOT_CONFIG_COMMON_H_\r
-\r
-/* FreeRTOS include. */\r
-#include "FreeRTOS.h" //_RB_Makes common config file FreeRTOS specific\r
-\r
-/* Use platform types on FreeRTOS. */\r
-#include "platform/iot_platform_types_freertos.h" //_RB_Makes common config file FreeRTOS specific\r
-\r
-/* SDK version. */\r
-#define IOT_SDK_VERSION    "4.0.0"\r
-\r
-/* This config file is for the demos; disable any test code. */\r
-#define IOT_BUILD_TESTS    ( 0 )\r
-\r
-/* Logging puts function. */\r
-#define IotLogging_Puts( str )                 configPRINTF( ( "%s\r\n", str ) )\r
-\r
-/* Enable asserts in libraries by default. */\r
-#ifndef IOT_METRICS_ENABLE_ASSERTS\r
-    #define IOT_METRICS_ENABLE_ASSERTS         ( 1 )\r
-#endif\r
-#ifndef IOT_CONTAINERS_ENABLE_ASSERTS\r
-    #define IOT_CONTAINERS_ENABLE_ASSERTS      ( 1 )\r
-#endif\r
-#ifndef IOT_TASKPOOL_ENABLE_ASSERTS\r
-    #define IOT_TASKPOOL_ENABLE_ASSERTS        ( 1 )\r
-#endif\r
-#ifndef IOT_MQTT_ENABLE_ASSERTS\r
-    #define IOT_MQTT_ENABLE_ASSERTS            ( 1 )\r
-#endif\r
-#ifndef AWS_IOT_SHADOW_ENABLE_ASSERTS\r
-    #define AWS_IOT_SHADOW_ENABLE_ASSERTS      ( 1 )\r
-#endif\r
-#ifndef AWS_IOT_DEFENDER_ENABLE_ASSERTS\r
-    #define AWS_IOT_DEFENDER_ENABLE_ASSERTS    ( 1 )\r
-#endif\r
-#ifndef IOT_BLE_ENABLE_ASSERTS\r
-    #define IOT_BLE_ENABLE_ASSERTS             ( 1 )\r
-#endif\r
-\r
-/* Assert functions. */\r
-#define IotMetrics_Assert( expression )        configASSERT( expression )\r
-#define IotContainers_Assert( expression )     configASSERT( expression )\r
-#define IotTaskPool_Assert( expression )       configASSERT( expression )\r
-#define IotMqtt_Assert( expression )           configASSERT( expression )\r
-#define AwsIotShadow_Assert( expression )      configASSERT( expression )\r
-#define AwsIotDefender_Assert( expression )    configASSERT( expression )\r
-#define IotBle_Assert( expression )            configASSERT( expression )\r
-\r
-/* Control the usage of dynamic memory allocation. */\r
-#ifndef IOT_STATIC_MEMORY_ONLY\r
-    #define IOT_STATIC_MEMORY_ONLY    ( 0 )\r
-#endif\r
-\r
-/* Memory allocation configuration. Note that these functions will not be affected\r
- * by IOT_STATIC_MEMORY_ONLY. */\r
-#define IotNetwork_Malloc    pvPortMalloc\r
-#define IotNetwork_Free      vPortFree\r
-#define IotThreads_Malloc    pvPortMalloc\r
-#define IotThreads_Free      vPortFree\r
-#define IotLogging_Malloc    pvPortMalloc\r
-#define IotLogging_Free      vPortFree\r
-#define IotBle_Malloc        pvPortMalloc\r
-#define IotBle_Free          vPortFree\r
-/* #define IotLogging_StaticBufferSize */\r
-\r
-/* Memory allocation function configuration for the MQTT and Defender library.\r
- * These libraries will be affected by IOT_STATIC_MEMORY_ONLY. */\r
-#if IOT_STATIC_MEMORY_ONLY == 0\r
-    #define IotMetrics_MallocTcpConnection       pvPortMalloc\r
-    #define IotMetrics_FreeTcpConnection         vPortFree\r
-    #define IotMetrics_MallocIpAddress           pvPortMalloc\r
-    #define IotMetrics_FreeIpAddress             vPortFree\r
-\r
-    #define IotTaskPool_MallocTaskPool           pvPortMalloc\r
-    #define IotTaskPool_FreeTaskPool             vPortFree\r
-    #define IotTaskPool_MallocJob                pvPortMalloc\r
-    #define IotTaskPool_FreeJob                  vPortFree\r
-    #define IotTaskPool_MallocTimerEvent         pvPortMalloc\r
-    #define IotTaskPool_FreeTimerEvent           vPortFree\r
-\r
-    #define IotMqtt_MallocConnection             pvPortMalloc\r
-    #define IotMqtt_FreeConnection               vPortFree\r
-    #define IotMqtt_MallocMessage                pvPortMalloc\r
-    #define IotMqtt_FreeMessage                  vPortFree\r
-    #define IotMqtt_MallocOperation              pvPortMalloc\r
-    #define IotMqtt_FreeOperation                vPortFree\r
-    #define IotMqtt_MallocSubscription           pvPortMalloc\r
-    #define IotMqtt_FreeSubscription             vPortFree\r
-\r
-    #define IotSerializer_MallocCborEncoder      pvPortMalloc\r
-    #define IotSerializer_FreeCborEncoder        vPortFree\r
-    #define IotSerializer_MallocCborParser       pvPortMalloc\r
-    #define IotSerializer_FreeCborParser         vPortFree\r
-    #define IotSerializer_MallocCborValue        pvPortMalloc\r
-    #define IotSerializer_FreeCborValue          vPortFree\r
-    #define IotSerializer_MallocDecoderObject    pvPortMalloc\r
-    #define IotSerializer_FreeDecoderObject      vPortFree\r
-\r
-    #define AwsIotShadow_MallocOperation         pvPortMalloc\r
-    #define AwsIotShadow_FreeOperation           vPortFree\r
-    #define AwsIotShadow_MallocString            pvPortMalloc\r
-    #define AwsIotShadow_FreeString              vPortFree\r
-    #define AwsIotShadow_MallocSubscription      pvPortMalloc\r
-    #define AwsIotShadow_FreeSubscription        vPortFree\r
-\r
-    #define AwsIotDefender_MallocReport          pvPortMalloc\r
-    #define AwsIotDefender_FreeReport            vPortFree\r
-    #define AwsIotDefender_MallocTopic           pvPortMalloc\r
-    #define AwsIotDefender_FreeTopic             vPortFree\r
-#endif /* if IOT_STATIC_MEMORY_ONLY == 0 */\r
-\r
-/* Default platform thread stack size and priority. */\r
-#ifndef IOT_THREAD_DEFAULT_STACK_SIZE\r
-    #define IOT_THREAD_DEFAULT_STACK_SIZE    2048\r
-#endif\r
-#ifndef IOT_THREAD_DEFAULT_PRIORITY\r
-    #define IOT_THREAD_DEFAULT_PRIORITY      tskIDLE_PRIORITY\r
-#endif\r
-\r
-/* Platform network configuration. */\r
-#ifndef IOT_NETWORK_RECEIVE_TASK_PRIORITY\r
-    #define IOT_NETWORK_RECEIVE_TASK_PRIORITY      ( tskIDLE_PRIORITY + 1 )\r
-#endif\r
-#ifndef IOT_NETWORK_RECEIVE_TASK_STACK_SIZE\r
-    #define IOT_NETWORK_RECEIVE_TASK_STACK_SIZE    IOT_THREAD_DEFAULT_STACK_SIZE\r
-#endif\r
-\r
-/* Platform and SDK name for AWS IoT MQTT metrics. Only used when\r
- * AWS_IOT_MQTT_ENABLE_METRICS is 1. */\r
-#define IOT_SDK_NAME             "AmazonFreeRTOS"\r
-#ifdef configPLATFORM_NAME\r
-    #define IOT_PLATFORM_NAME    configPLATFORM_NAME\r
-#else\r
-    #define IOT_PLATFORM_NAME    "Unknown"\r
-#endif\r
-\r
-/* Cloud endpoint to which the device connects to. */\r
-#define IOT_CLOUD_ENDPOINT                    clientcredentialMQTT_BROKER_ENDPOINT\r
-\r
-/**\r
- * @brief Unique identifier used to recognize a device by the cloud.\r
- * This could be SHA-256 of the device certificate.\r
- */\r
-extern const char *getDeviceIdentifier( void );\r
-#define IOT_DEVICE_IDENTIFIER                getDeviceIdentifier()\r
-\r
-/**\r
- * @brief Metrics emitted by the device.\r
- */\r
-extern const char *getDeviceMetrics( void );\r
-#define AWS_IOT_METRICS_USERNAME     getDeviceMetrics()\r
-\r
-/**\r
- * @brief Length of the metrics emitted by device.\r
- */\r
-extern uint16_t getDeviceMetricsLength( void );\r
-#define AWS_IOT_METRICS_USERNAME_LENGTH getDeviceMetricsLength()\r
-\r
-/* Define the data type of metrics connection id as same as Socket_t in aws_secure_socket.h */\r
-#define IotMetricsConnectionId_t            void *\r
-\r
-/* Configuration for defender demo: set format to CBOR. */\r
-#define AWS_IOT_DEFENDER_FORMAT             AWS_IOT_DEFENDER_FORMAT_CBOR\r
-\r
-/* Configuration for defender demo: use long tag for readable output. Please use short tag for the real application. */\r
-#define AWS_IOT_DEFENDER_USE_LONG_TAG       ( 1 )\r
-\r
-/* Demo runner configuration. */\r
-//_RB_#include "aws_demo_config.h"\r
-\r
-#endif /* ifndef IOT_CONFIG_COMMON_H_ */\r
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/iot_secure_sockets_config.h b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/iot_secure_sockets_config.h
deleted file mode 100644 (file)
index 6442e8d..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-/*\r
- * Amazon FreeRTOS V1.4.7\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://aws.amazon.com/freertos\r
- * http://www.FreeRTOS.org\r
- */\r
-\r
-/**\r
- * @file aws_secure_sockets_config.h\r
- * @brief Secure sockets configuration options.\r
- */\r
-\r
-#ifndef _AWS_SECURE_SOCKETS_CONFIG_H_\r
-#define _AWS_SECURE_SOCKETS_CONFIG_H_\r
-\r
-/**\r
- * @brief Byte order of the target MCU.\r
- *\r
- * Valid values are pdLITTLE_ENDIAN and pdBIG_ENDIAN.\r
- */\r
-#define socketsconfigBYTE_ORDER                   pdLITTLE_ENDIAN\r
-\r
-/**\r
- * @brief Default socket send timeout.\r
- */\r
-#define socketsconfigDEFAULT_SEND_TIMEOUT         ( 10000 )\r
-\r
-/**\r
- * @brief Default socket receive timeout.\r
- */\r
-#define socketsconfigDEFAULT_RECV_TIMEOUT         ( 10000 )\r
-\r
-/**\r
- * @brief Enable metrics of secure socket.\r
- */\r
-#define AWS_IOT_SECURE_SOCKETS_METRICS_ENABLED    ( 0 )\r
-\r
-#endif /* _AWS_SECURE_SOCKETS_CONFIG_H_ */
\ No newline at end of file
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
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/mqtt_demo.sln b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/mqtt_demo.sln
deleted file mode 100644 (file)
index b362f36..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-\r
-Microsoft Visual Studio Solution File, Format Version 11.00\r
-# Visual Studio 2010\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RTOSDemo", "WIN32.vcxproj", "{C686325E-3261-42F7-AEB1-DDE5280E1CEB}"\r
-EndProject\r
-Global\r
-       GlobalSection(TestCaseManagementSettings) = postSolution\r
-               CategoryFile = FreeRTOS_Plus_TCP_Minimal.vsmdi\r
-       EndGlobalSection\r
-       GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
-               Debug|Win32 = Debug|Win32\r
-               Release|Win32 = Release|Win32\r
-       EndGlobalSection\r
-       GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
-               {C686325E-3261-42F7-AEB1-DDE5280E1CEB}.Debug|Win32.ActiveCfg = Debug|Win32\r
-               {C686325E-3261-42F7-AEB1-DDE5280E1CEB}.Debug|Win32.Build.0 = Debug|Win32\r
-               {C686325E-3261-42F7-AEB1-DDE5280E1CEB}.Release|Win32.ActiveCfg = Release|Win32\r
-               {C686325E-3261-42F7-AEB1-DDE5280E1CEB}.Release|Win32.Build.0 = Release|Win32\r
-       EndGlobalSection\r
-       GlobalSection(SolutionProperties) = preSolution\r
-               HideSolutionNode = FALSE\r
-       EndGlobalSection\r
-EndGlobal\r
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/printf-stdarg.c b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/printf-stdarg.c
deleted file mode 100644 (file)
index 5505535..0000000
+++ /dev/null
@@ -1,667 +0,0 @@
-/*\r
-       Copyright 2001, 2002 Georges Menie (www.menie.org)\r
-       stdarg version contributed by Christian Ettinger\r
-\r
-       This program is free software; you can redistribute it and/or modify\r
-       it under the terms of the GNU Lesser General Public License as published by\r
-       the Free Software Foundation; either version 2 of the License, or\r
-       (at your option) any later version.\r
-\r
-       Changes for the FreeRTOS ports:\r
-\r
-       - The dot in "%-8.8s"\r
-       - The specifiers 'l' (long) and 'L' (long long)\r
-       - The specifier 'u' for unsigned\r
-       - Dot notation for IP addresses:\r
-         sprintf("IP = %xip\n", 0xC0A80164);\r
-      will produce "IP = 192.168.1.100\n"\r
-*/\r
-\r
-#include <stdarg.h>\r
-#include <stdio.h>\r
-#include <stdlib.h>\r
-#include <string.h>\r
-\r
-#include "FreeRTOS.h"\r
-\r
-#define PAD_RIGHT 1\r
-#define PAD_ZERO 2\r
-\r
-/*\r
- * Return 1 for readable, 2 for writeable, 3 for both.\r
- * Function must be provided by the application.\r
- */\r
-extern BaseType_t xApplicationMemoryPermissions( uint32_t aAddress );\r
-\r
-extern void vOutputChar( const char cChar, const TickType_t xTicksToWait  );\r
-static const TickType_t xTicksToWait = pdMS_TO_TICKS( 20 );\r
-\r
-struct xPrintFlags\r
-{\r
-       int base;\r
-       int width;\r
-       int printLimit;\r
-       unsigned\r
-               pad : 8,\r
-               letBase : 8,\r
-               isSigned : 1,\r
-               isNumber : 1,\r
-               long32 : 1,\r
-               long64 : 1;\r
-};\r
-\r
-struct SStringBuf\r
-{\r
-       char *str;\r
-       const char *orgStr;\r
-       const char *nulPos;\r
-       int curLen;\r
-       struct xPrintFlags flags;\r
-};\r
-\r
-static void strbuf_init( struct SStringBuf *apStr, char *apBuf, const char *apMaxStr )\r
-{\r
-       apStr->str = apBuf;\r
-       apStr->orgStr = apBuf;\r
-       apStr->nulPos = apMaxStr-1;\r
-       apStr->curLen = 0;\r
-\r
-       memset( &apStr->flags, '\0', sizeof( apStr->flags ) );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static BaseType_t strbuf_printchar( struct SStringBuf *apStr, int c )\r
-{\r
-       if( apStr->str == NULL )\r
-       {\r
-               vOutputChar( ( char ) c, xTicksToWait );\r
-               apStr->curLen++;\r
-               return pdTRUE;\r
-       }\r
-       if( apStr->str < apStr->nulPos )\r
-       {\r
-               *( apStr->str++ ) = c;\r
-               apStr->curLen++;\r
-               return pdTRUE;\r
-       }\r
-       if( apStr->str == apStr->nulPos )\r
-       {\r
-               *( apStr->str++ ) = '\0';\r
-       }\r
-       return pdFALSE;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static portINLINE BaseType_t strbuf_printchar_inline( struct SStringBuf *apStr, int c )\r
-{\r
-       if( apStr->str == NULL )\r
-       {\r
-               vOutputChar( ( char ) c, xTicksToWait );\r
-               if( c == 0 )\r
-               {\r
-                       return pdFALSE;\r
-               }\r
-               apStr->curLen++;\r
-               return pdTRUE;\r
-       }\r
-       if( apStr->str < apStr->nulPos )\r
-       {\r
-               *(apStr->str++) = c;\r
-               if( c == 0 )\r
-               {\r
-                       return pdFALSE;\r
-               }\r
-               apStr->curLen++;\r
-               return pdTRUE;\r
-       }\r
-       if( apStr->str == apStr->nulPos )\r
-       {\r
-               *( apStr->str++ ) = '\0';\r
-       }\r
-       return pdFALSE;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static portINLINE int i2hex( int aCh )\r
-{\r
-int iResult;\r
-\r
-       if( aCh < 10 )\r
-       {\r
-               iResult = '0' + aCh;\r
-       }\r
-       else\r
-       {\r
-               iResult = 'A' + aCh - 10;\r
-       }\r
-\r
-       return iResult;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static BaseType_t prints(struct SStringBuf *apBuf, const char *apString )\r
-{\r
-       register int padchar = ' ';\r
-       int i,len;\r
-\r
-       if( xApplicationMemoryPermissions( ( uint32_t )apString ) == 0 )\r
-       {\r
-               /* The user has probably made a mistake with the parameter\r
-               for '%s', the memory is not readbale. */\r
-               apString = "INV_MEM";\r
-       }\r
-\r
-       if( apBuf->flags.width > 0 )\r
-       {\r
-               register int len = 0;\r
-               register const char *ptr;\r
-               for( ptr = apString; *ptr; ++ptr )\r
-               {\r
-                       ++len;\r
-               }\r
-\r
-               if( len >= apBuf->flags.width )\r
-               {\r
-                       apBuf->flags.width = 0;\r
-               }\r
-               else\r
-               {\r
-                       apBuf->flags.width -= len;\r
-               }\r
-\r
-               if( apBuf->flags.pad & PAD_ZERO )\r
-               {\r
-                       padchar = '0';\r
-               }\r
-       }\r
-       if( ( apBuf->flags.pad & PAD_RIGHT ) == 0 )\r
-       {\r
-               for( ; apBuf->flags.width > 0; --apBuf->flags.width )\r
-               {\r
-                       if( strbuf_printchar( apBuf, padchar ) == 0 )\r
-                       {\r
-                               return pdFALSE;\r
-                       }\r
-               }\r
-       }\r
-       if( ( apBuf->flags.isNumber == pdTRUE ) && ( apBuf->flags.pad == pdTRUE ) )\r
-       {\r
-               /* The string to print represents an integer number.\r
-                * In this case, printLimit is the min number of digits to print\r
-                * If the length of the number to print is less than the min nb of i\r
-                * digits to display, we add 0 before printing the number\r
-                */\r
-               len = strlen( apString );\r
-\r
-               if( len < apBuf->flags.printLimit )\r
-               {\r
-                       i = apBuf->flags.printLimit - len;\r
-                       for( ; i; i-- )\r
-                       {\r
-                               if( strbuf_printchar( apBuf, '0' )  == 0 )\r
-                               {\r
-                                       return pdFALSE;\r
-                               }\r
-                       }\r
-               }\r
-       }\r
-       /* The string to print is not the result of a number conversion to ascii.\r
-        * For a string, printLimit is the max number of characters to display\r
-        */\r
-       for( ; apBuf->flags.printLimit && *apString ; ++apString, --apBuf->flags.printLimit )\r
-       {\r
-               if( !strbuf_printchar( apBuf, *apString ) )\r
-               {\r
-                       return pdFALSE;\r
-               }\r
-       }\r
-\r
-       for( ; apBuf->flags.width > 0; --apBuf->flags.width )\r
-       {\r
-               if( !strbuf_printchar( apBuf, padchar ) )\r
-               {\r
-                       return pdFALSE;\r
-               }\r
-       }\r
-\r
-       return pdTRUE;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-/* the following should be enough for 32 bit int */\r
-#define PRINT_BUF_LEN 12       /* to print 4294967296 */\r
-\r
-#if    SPRINTF_LONG_LONG\r
-#warning 64-bit libraries will be included as well\r
-static BaseType_t printll( struct SStringBuf *apBuf, long long i )\r
-{\r
-       char print_buf[ 2 * PRINT_BUF_LEN ];\r
-       register char *s;\r
-       register int t, neg = 0;\r
-       register unsigned long long u = i;\r
-       lldiv_t lldiv_result;\r
-\r
-/* typedef struct\r
- * {\r
- *     long long int quot; // quotient\r
- *     long long int rem;  // remainder\r
- * } lldiv_t;\r
- */\r
-\r
-       apBuf->flags.isNumber = pdTRUE; /* Parameter for prints */\r
-       if( i == 0LL )\r
-       {\r
-               print_buf[ 0 ] = '0';\r
-               print_buf[ 1 ] = '\0';\r
-               return prints( apBuf, print_buf );\r
-       }\r
-\r
-       if( ( apBuf->flags.isSigned == pdTRUE ) && ( apBuf->flags.base == 10 ) && ( i < 0LL ) )\r
-       {\r
-               neg = 1;\r
-               u = -i;\r
-       }\r
-\r
-       s = print_buf + sizeof( print_buf ) - 1;\r
-\r
-       *s = '\0';\r
-       /* 18446744073709551616 */\r
-       while( u != 0 )\r
-       {\r
-               lldiv_result = lldiv( u, ( unsigned long long ) apBuf->flags.base );\r
-               t = lldiv_result.rem;\r
-               if( t >= 10 )\r
-               {\r
-                       t += apBuf->flags.letBase - '0' - 10;\r
-               }\r
-               *( --s ) = t + '0';\r
-               u = lldiv_result.quot;\r
-       }\r
-\r
-       if( neg != 0 )\r
-       {\r
-               if( ( apBuf->flags.width != 0 ) && ( apBuf->flags.pad & PAD_ZERO ) )\r
-               {\r
-                       if( !strbuf_printchar( apBuf, '-' ) )\r
-                       {\r
-                               return pdFALSE;\r
-                       }\r
-                       --apBuf->flags.width;\r
-               }\r
-               else\r
-               {\r
-                       *( --s ) = '-';\r
-               }\r
-       }\r
-\r
-       return prints( apBuf, s );\r
-}\r
-#endif /* SPRINTF_LONG_LONG */\r
-/*-----------------------------------------------------------*/\r
-\r
-static BaseType_t printi( struct SStringBuf *apBuf, int i )\r
-{\r
-       char print_buf[ PRINT_BUF_LEN ];\r
-       register char *s;\r
-       register int t, neg = 0;\r
-       register unsigned int u = i;\r
-       register unsigned base = apBuf->flags.base;\r
-\r
-       apBuf->flags.isNumber = pdTRUE; /* Parameter for prints */\r
-\r
-       if( i == 0 )\r
-       {\r
-               print_buf[ 0 ] = '0';\r
-               print_buf[ 1 ] = '\0';\r
-               return prints( apBuf, print_buf );\r
-       }\r
-\r
-       if( ( apBuf->flags.isSigned == pdTRUE ) && ( base == 10 ) && ( i < 0 ) )\r
-       {\r
-               neg = 1;\r
-               u = -i;\r
-       }\r
-\r
-       s = print_buf + sizeof( print_buf ) - 1;\r
-\r
-       *s = '\0';\r
-       switch( base )\r
-       {\r
-       case 16:\r
-               while( u != 0 )\r
-               {\r
-                       t = u & 0xF;\r
-                       if( t >= 10 )\r
-                       {\r
-                               t += apBuf->flags.letBase - '0' - 10;\r
-                       }\r
-                       *( --s ) = t + '0';\r
-                       u >>= 4;\r
-               }\r
-               break;\r
-\r
-       case 8:\r
-       case 10:\r
-               /* GCC compiles very efficient */\r
-               while( u )\r
-               {\r
-                       t = u % base;\r
-                       *( --s ) = t + '0';\r
-                       u /= base;\r
-               }\r
-               break;\r
-/*\r
-       // The generic case, not yet in use\r
-       default:\r
-               while( u )\r
-               {\r
-                       t = u % base;\r
-                       if( t >= 10)\r
-                       {\r
-                               t += apBuf->flags.letBase - '0' - 10;\r
-                       }\r
-                       *( --s ) = t + '0';\r
-                       u /= base;\r
-               }\r
-               break;\r
-*/\r
-       }\r
-\r
-       if( neg != 0 )\r
-       {\r
-               if( apBuf->flags.width && (apBuf->flags.pad & PAD_ZERO ) )\r
-               {\r
-                       if( strbuf_printchar( apBuf, '-' ) == 0 )\r
-                       {\r
-                               return pdFALSE;\r
-                       }\r
-                       --apBuf->flags.width;\r
-               }\r
-               else\r
-               {\r
-                       *( --s ) = '-';\r
-               }\r
-       }\r
-\r
-       return prints( apBuf, s );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static BaseType_t printIp(struct SStringBuf *apBuf, unsigned i )\r
-{\r
-       char print_buf[16];\r
-\r
-       sprintf( print_buf, "%u.%u.%u.%u",\r
-               i >> 24,\r
-               ( i >> 16 ) & 0xff,\r
-               ( i >> 8 ) & 0xff,\r
-               i & 0xff );\r
-       apBuf->flags.isNumber = pdTRUE; /* Parameter for prints */\r
-       prints( apBuf, print_buf );\r
-\r
-       return pdTRUE;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void tiny_print( struct SStringBuf *apBuf, const char *format, va_list args )\r
-{\r
-       char scr[2];\r
-\r
-       for( ; ; )\r
-       {\r
-               int ch = *( format++ );\r
-\r
-               if( ch != '%' )\r
-               {\r
-                       do\r
-                       {\r
-                               /* Put the most like flow in a small loop */\r
-                               if( strbuf_printchar_inline( apBuf, ch ) == 0 )\r
-                               {\r
-                                       return;\r
-                               }\r
-                               ch = *( format++ );\r
-                       } while( ch != '%' );\r
-               }\r
-               ch = *( format++ );\r
-               /* Now ch has character after '%', format pointing to next */\r
-\r
-               if( ch == '\0' )\r
-               {\r
-                       break;\r
-               }\r
-               if( ch == '%' )\r
-               {\r
-                       if( strbuf_printchar( apBuf, ch ) == 0 )\r
-                       {\r
-                               return;\r
-                       }\r
-                       continue;\r
-               }\r
-               memset( &apBuf->flags, '\0', sizeof( apBuf->flags ) );\r
-\r
-               if( ch == '-' )\r
-               {\r
-                       ch = *( format++ );\r
-                       apBuf->flags.pad = PAD_RIGHT;\r
-               }\r
-               while( ch == '0' )\r
-               {\r
-                       ch = *( format++ );\r
-                       apBuf->flags.pad |= PAD_ZERO;\r
-               }\r
-               if( ch == '*' )\r
-               {\r
-                       ch = *( format++ );\r
-                       apBuf->flags.width = va_arg( args, int );\r
-               }\r
-               else\r
-               {\r
-                       while( ch >= '0' && ch <= '9' )\r
-                       {\r
-                               apBuf->flags.width *= 10;\r
-                               apBuf->flags.width += ch - '0';\r
-                               ch = *( format++ );\r
-                       }\r
-               }\r
-               if( ch == '.' )\r
-               {\r
-                       ch = *( format++ );\r
-                       if( ch == '*' )\r
-                       {\r
-                               apBuf->flags.printLimit = va_arg( args, int );\r
-                               ch = *( format++ );\r
-                       }\r
-                       else\r
-                       {\r
-                               while( ch >= '0' && ch <= '9' )\r
-                               {\r
-                                       apBuf->flags.printLimit *= 10;\r
-                                       apBuf->flags.printLimit += ch - '0';\r
-                                       ch = *( format++ );\r
-                               }\r
-                       }\r
-               }\r
-               if( apBuf->flags.printLimit == 0 )\r
-               {\r
-                       apBuf->flags.printLimit--;  /* -1: make it unlimited */\r
-               }\r
-               if( ch == 's' )\r
-               {\r
-                       register char *s = ( char * )va_arg( args, int );\r
-                       if( prints( apBuf, s ? s : "(null)" ) == 0 )\r
-                       {\r
-                               break;\r
-                       }\r
-                       continue;\r
-               }\r
-               if( ch == 'c' )\r
-               {\r
-                       /* char are converted to int then pushed on the stack */\r
-                       scr[0] = ( char ) va_arg( args, int );\r
-\r
-                       if( strbuf_printchar( apBuf, scr[0] )  == 0 )\r
-                       {\r
-                               return;\r
-                       }\r
-\r
-                       continue;\r
-               }\r
-               if( ch == 'l' )\r
-               {\r
-                       ch = *( format++ );\r
-                       apBuf->flags.long32 = 1;\r
-                       /* Makes not difference as u32 == long */\r
-               }\r
-               if( ch == 'L' )\r
-               {\r
-                       ch = *( format++ );\r
-                       apBuf->flags.long64 = 1;\r
-                       /* Does make a difference */\r
-               }\r
-               apBuf->flags.base = 10;\r
-               apBuf->flags.letBase = 'a';\r
-\r
-               if( ch == 'd' || ch == 'u' )\r
-               {\r
-                       apBuf->flags.isSigned = ( ch == 'd' );\r
-#if    SPRINTF_LONG_LONG\r
-                       if( apBuf->flags.long64 != pdFALSE )\r
-                       {\r
-                               if( printll( apBuf, va_arg( args, long long ) ) == 0 )\r
-                               {\r
-                                       break;\r
-                               }\r
-                       } else\r
-#endif /* SPRINTF_LONG_LONG */\r
-                       if( printi( apBuf, va_arg( args, int ) ) == 0 )\r
-                       {\r
-                               break;\r
-                       }\r
-                       continue;\r
-               }\r
-\r
-               apBuf->flags.base = 16;         /* From here all hexadecimal */\r
-\r
-               if( ch == 'x' && format[0] == 'i' && format[1] == 'p' )\r
-               {\r
-                       format += 2;    /* eat the "xi" of "xip" */\r
-                       /* Will use base 10 again */\r
-                       if( printIp( apBuf, va_arg( args, int ) ) == 0 )\r
-                       {\r
-                               break;\r
-                       }\r
-                       continue;\r
-               }\r
-               if( ch == 'x' || ch == 'X' || ch == 'p' || ch == 'o' )\r
-               {\r
-                       if( ch == 'X' )\r
-                       {\r
-                               apBuf->flags.letBase = 'A';\r
-                       }\r
-                       else if( ch == 'o' )\r
-                       {\r
-                               apBuf->flags.base = 8;\r
-                       }\r
-#if    SPRINTF_LONG_LONG\r
-                       if( apBuf->flags.long64 != pdFALSE )\r
-                       {\r
-                               if( printll( apBuf, va_arg( args, long long ) ) == 0 )\r
-                               {\r
-                                       break;\r
-                               }\r
-                       } else\r
-#endif /* SPRINTF_LONG_LONG */\r
-                       if( printi( apBuf, va_arg( args, int ) ) == 0 )\r
-                       {\r
-                               break;\r
-                       }\r
-                       continue;\r
-               }\r
-       }\r
-       strbuf_printchar( apBuf, '\0' );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-int vsnprintf( char *apBuf, size_t aMaxLen, const char *apFmt, va_list args )\r
-{\r
-       struct SStringBuf strBuf;\r
-       strbuf_init( &strBuf, apBuf, ( const char* )apBuf + aMaxLen );\r
-       tiny_print( &strBuf, apFmt, args );\r
-\r
-       return strBuf.curLen;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-int snprintf( char *apBuf, size_t aMaxLen, const char *apFmt, ... )\r
-{\r
-       va_list args;\r
-\r
-       va_start( args,  apFmt );\r
-       struct SStringBuf strBuf;\r
-       strbuf_init( &strBuf, apBuf, ( const char* )apBuf + aMaxLen );\r
-       tiny_print( &strBuf, apFmt, args );\r
-       va_end( args );\r
-\r
-       return strBuf.curLen;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-int sprintf( char *apBuf, const char *apFmt, ... )\r
-{\r
-       va_list args;\r
-\r
-       va_start( args,  apFmt );\r
-       struct SStringBuf strBuf;\r
-       strbuf_init( &strBuf, apBuf, ( const char * )apBuf + 1024 );\r
-       tiny_print( &strBuf, apFmt, args );\r
-       va_end( args );\r
-\r
-       return strBuf.curLen;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-int vsprintf( char *apBuf, const char *apFmt, va_list args )\r
-{\r
-       struct SStringBuf strBuf;\r
-       strbuf_init( &strBuf, apBuf, ( const char* ) apBuf + 1024 );\r
-       tiny_print( &strBuf, apFmt, args );\r
-\r
-       return strBuf.curLen;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-const char *mkSize (unsigned long long aSize, char *apBuf, int aLen)\r
-{\r
-static char retString[33];\r
-size_t gb, mb, kb, sb;\r
-\r
-       if (apBuf == NULL) {\r
-               apBuf = retString;\r
-               aLen = sizeof( retString );\r
-       }\r
-       gb = aSize / (1024*1024*1024);\r
-       aSize -= gb * (1024*1024*1024);\r
-       mb = aSize / (1024*1024);\r
-       aSize -= mb * (1024*1024);\r
-       kb = aSize / (1024);\r
-       aSize -= kb * (1024);\r
-       sb = aSize;\r
-       if( gb )\r
-       {\r
-               snprintf (apBuf, aLen, "%u.%02u GB", ( unsigned ) gb, ( unsigned ) ( ( 100 * mb ) / 1024ul ) );\r
-       }\r
-       else if( mb )\r
-       {\r
-               snprintf (apBuf, aLen, "%u.%02u MB", ( unsigned ) mb, ( unsigned ) ( ( 100 * kb) / 1024ul ) );\r
-       }\r
-       else if( kb != 0ul )\r
-       {\r
-               snprintf (apBuf, aLen, "%u.%02u KB", ( unsigned ) kb, ( unsigned ) ( ( 100 * sb) / 1024ul ) );\r
-       }\r
-       else\r
-       {\r
-               snprintf (apBuf, aLen, "%u bytes", ( unsigned ) sb);\r
-       }\r
-       return apBuf;\r
-}\r
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/DemoTasks/SimpleTaskPoolExamples.c b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/DemoTasks/SimpleTaskPoolExamples.c
deleted file mode 100644 (file)
index fb2eaca..0000000
+++ /dev/null
@@ -1,695 +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
-/* Kernel includes. */\r
-#include "FreeRTOS.h"\r
-#include "task.h"\r
-\r
-/* Standard includes. */\r
-#include <stdio.h>\r
-\r
-/* IoT SDK includes. */\r
-#include "iot_taskpool.h"\r
-\r
-/* The priority at which that tasks in the task pool (the worker tasks) get\r
-created. */\r
-#define tpTASK_POOL_WORKER_PRIORITY            1\r
-\r
-/*\r
- * Prototypes for the functions that demonstrate the task pool API.\r
- * See the implementation of the prvTaskPoolDemoTask() function within this file\r
- * for a description of the individual functions.  A configASSERT() is hit if\r
- * any of the demos encounter any unexpected behaviour.\r
- */\r
-static void prvExample_BasicSingleJob( void );\r
-static void prvExample_DeferredJobAndCancellingJobs( void );\r
-static void prvExample_BasicRecyclableJob( void );\r
-static void prvExample_ReuseRecyclableJobFromLowPriorityTask( void );\r
-static void prvExample_ReuseRecyclableJobFromHighPriorityTask( void );\r
-\r
-/*\r
- * Prototypes of the callback functions used in the examples.  The callback\r
- * simply sends a signal (in the form of a direct task notification) to the\r
- * prvTaskPoolDemoTask() task to let the task know that the callback execute.\r
- * The handle of the prvTaskPoolDemoTask() task is not accessed directly, but\r
- * instead passed into the task pool job as the job's context.\r
- */\r
-static void prvSimpleTaskNotifyCallback( IotTaskPool_t pTaskPool, IotTaskPoolJob_t pJob, void *pUserContext );\r
-\r
-/*\r
- * The task used to demonstrate the task pool API.  This task just loops through\r
- * each demo in turn.\r
- */\r
-static void prvTaskPoolDemoTask( void *pvParameters );\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-/* Parameters used to create the system task pool - see TBD for more information\r
- * as the task pool used in this example is a slimmed down version of the full\r
- * library - the slimmed down version being intended specifically for FreeRTOS\r
- * kernel use cases. */\r
-static const IotTaskPoolInfo_t xTaskPoolParameters = {\r
-                                                                                                               /* Minimum number of threads in a task pool.\r
-                                                                                                                * Note the slimmed down version of the task\r
-                                                                                                                * pool used by this library does not autoscale\r
-                                                                                                                * the number of tasks in the pool so in this\r
-                                                                                                                * case this sets the number of tasks in the\r
-                                                                                                                * pool. */\r
-                                                                                                               2,\r
-                                                                                                               /* Maximum number of threads in a task pool.\r
-                                                                                                                * Note the slimmed down version of the task\r
-                                                                                                                * pool used by this library does not autoscale\r
-                                                                                                                * the number of tasks in the pool so in this\r
-                                                                                                                * case this parameter is just ignored. */\r
-                                                                                                               2,\r
-                                                                                                               /* Stack size for every task pool thread - in\r
-                                                                                                                * bytes, hence multiplying by the number of bytes\r
-                                                                                                                * in a word as configMINIMAL_STACK_SIZE is\r
-                                                                                                                * specified in words. */\r
-                                                                                                               configMINIMAL_STACK_SIZE * sizeof( portSTACK_TYPE ),\r
-                                                                                                               /* Priority for every task pool thread. */\r
-                                                                                                               tpTASK_POOL_WORKER_PRIORITY,\r
-                                                                                                        };\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-void vStartSimpleTaskPoolDemo( void )\r
-{\r
-       /* This example uses a single application task, which in turn is used to\r
-        * create and send jobs to task pool tasks. */\r
-       xTaskCreate( prvTaskPoolDemoTask,               /* Function that implements the task. */\r
-                                "PoolDemo",                            /* Text name for the task - only used for debugging. */\r
-                                configMINIMAL_STACK_SIZE,      /* Size of stack (in words, not bytes) to allocate for the task. */\r
-                                NULL,                                          /* Task parameter - not used in this case. */\r
-                                tskIDLE_PRIORITY,                      /* Task priority, must be between 0 and configMAX_PRIORITIES - 1. */\r
-                                NULL );                                        /* Used to pass out a handle to the created task - not used in this case. */\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvTaskPoolDemoTask( void *pvParameters )\r
-{\r
-IotTaskPoolError_t xResult;\r
-uint32_t ulLoops = 0;\r
-\r
-       /* Remove compiler warnings about unused parameters. */\r
-       ( void ) pvParameters;\r
-\r
-       /* The task pool must be created before it can be used.  The system task\r
-        * pool is the task pool managed by the task pool library itself - the storage\r
-        * used by the task pool is provided by the library. */\r
-       xResult = IotTaskPool_CreateSystemTaskPool( &xTaskPoolParameters );\r
-       configASSERT( xResult == IOT_TASKPOOL_SUCCESS );\r
-\r
-       /* Attempting to create the task pool again should then appear to succeed\r
-        * (in case it is initialised by more than one library), but have no effect. */\r
-       xResult = IotTaskPool_CreateSystemTaskPool( &xTaskPoolParameters );\r
-       configASSERT( xResult == IOT_TASKPOOL_SUCCESS );\r
-\r
-       for( ;; )\r
-       {\r
-               /* Demonstrate the most basic use case where a non persistent job is\r
-                * created and scheduled to run immediately.  The task pool worker tasks\r
-                * (in which the job callback function executes) have a priority above the\r
-                * priority of this task so the job's callback executes as soon as it is\r
-                * scheduled. */\r
-               prvExample_BasicSingleJob();\r
-\r
-               /* Demonstrate a job being scheduled to run at some time in the\r
-                * future, and how a job scheduled to run in the future can be cancelled\r
-                * if it has not yet started executing.  */\r
-               prvExample_DeferredJobAndCancellingJobs();\r
-\r
-               /* Demonstrate the most basic use of a recyclable job.  This is similar\r
-                * to prvExample_BasicSingleJob() but using a recyclable job.  Creating a\r
-                * recyclable job will re-use a previously created and now spare job from\r
-                * the task pool's job cache if one is available, or otherwise dynamically\r
-                * create a new job if a spare job is not available in the cache but space\r
-                * remains in the cache. */\r
-               prvExample_BasicRecyclableJob();\r
-\r
-               /* Demonstrate a recyclable job being created, used, and then re-used.\r
-                * In this the task pool worker tasks (in which the job callback\r
-                * functions execute) have a priority above the priority of this task so\r
-                * the job's callback functions execute as soon as they are scheduled. */\r
-               prvExample_ReuseRecyclableJobFromLowPriorityTask();\r
-\r
-               /* Again demonstrate a recyclable job being created, used, and then\r
-                * re-usedbut this time the priority of the task pool worker tasks (in\r
-                * which the job callback functions execute) are lower than the priority\r
-                * of this task so the job's callback functions don't execute until this\r
-                * task enters the blocked state. */\r
-               prvExample_ReuseRecyclableJobFromHighPriorityTask();\r
-\r
-               ulLoops++;\r
-               if( ( ulLoops % 10UL ) == 0 )\r
-               {\r
-                       configPRINTF( ( "prvTaskPoolDemoTask() performed %u iterations without hitting an assert.\r\n", ulLoops ) );\r
-                       fflush( stdout );\r
-               }\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvSimpleTaskNotifyCallback( IotTaskPool_t pTaskPool, IotTaskPoolJob_t pJob, void *pUserContext )\r
-{\r
-/* The jobs context is the handle of the task to which a notification should\r
- * be sent. */\r
-TaskHandle_t xTaskToNotify = ( TaskHandle_t ) pUserContext;\r
-\r
-       /* Remove warnings about unused parameters. */\r
-       ( void ) pTaskPool;\r
-       ( void ) pJob;\r
-\r
-       /* Notify the task that created this job. */\r
-       xTaskNotifyGive( xTaskToNotify );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvExample_BasicSingleJob( void )\r
-{\r
-IotTaskPoolJobStorage_t xJobStorage;\r
-IotTaskPoolJob_t xJob;\r
-IotTaskPoolError_t xResult;\r
-uint32_t ulReturn;\r
-const uint32_t ulNoFlags = 0UL;\r
-const TickType_t xNoDelay = ( TickType_t ) 0;\r
-size_t xFreeHeapBeforeCreatingJob = xPortGetFreeHeapSize();\r
-IotTaskPoolJobStatus_t xJobStatus;\r
-\r
-       /* Don't expect any notifications to be pending yet. */\r
-       configASSERT( ulTaskNotifyTake( pdTRUE, xNoDelay ) == 0 );\r
-\r
-       /* Create and schedule a job using the handle of this task as the job's\r
-        * context and the function that sends a notification to the task handle as\r
-        * the job's callback function.  This is not a recyclable job so the storage\r
-        * required to hold information about the job is provided by this task - in\r
-        * this case the storage is on the stack of this task so no memory is allocated\r
-        * dynamically but the stack frame must remain in scope for the lifetime of\r
-        * the job. */\r
-       xResult = IotTaskPool_CreateJob(  prvSimpleTaskNotifyCallback, /* Callback function. */\r
-                                                                         ( void * ) xTaskGetCurrentTaskHandle(), /* Job context. */\r
-                                                                         &xJobStorage,\r
-                                                                         &xJob );\r
-       configASSERT( xResult == IOT_TASKPOOL_SUCCESS );\r
-\r
-       /* The job has been created but not scheduled so is now ready. */\r
-       IotTaskPool_GetStatus( NULL, xJob, &xJobStatus );\r
-       configASSERT( xJobStatus == IOT_TASKPOOL_STATUS_READY );\r
-\r
-       /* This is not a persistent (recyclable) job and its storage is on the\r
-        * stack of this function, so the amount of heap space available should not\r
-        * have changed since entering this function. */\r
-       configASSERT( xFreeHeapBeforeCreatingJob == xPortGetFreeHeapSize() );\r
-\r
-       /* In the full task pool implementation the first parameter is used to\r
-        * pass the handle of the task pool to schedule.  The lean task pool\r
-        * implementation used in this demo only supports a single task pool, which\r
-        * is created internally within the library, so the first parameter is NULL. */\r
-       xResult = IotTaskPool_Schedule( NULL, xJob, ulNoFlags );\r
-       configASSERT( xResult == IOT_TASKPOOL_SUCCESS );\r
-\r
-       /* Look for the notification coming from the job's callback function.  The\r
-        * priority of the task pool worker task that executes the callback is higher\r
-        * than the priority of this task so a block time is not needed - the task pool\r
-        * worker task preempts this task and sends the notification (from the job's\r
-        * callback) as soon as the job is scheduled. */\r
-       ulReturn = ulTaskNotifyTake( pdTRUE, xNoDelay );\r
-       configASSERT( ulReturn );\r
-\r
-       /* The job's callback has executed so the job has now completed. */\r
-       IotTaskPool_GetStatus( NULL, xJob, &xJobStatus );\r
-       configASSERT( xJobStatus == IOT_TASKPOOL_STATUS_COMPLETED );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvExample_DeferredJobAndCancellingJobs( void )\r
-{\r
-IotTaskPoolJobStorage_t xJobStorage;\r
-IotTaskPoolJob_t xJob;\r
-IotTaskPoolError_t xResult;\r
-uint32_t ulReturn;\r
-const uint32_t ulShortDelay_ms = 100UL;\r
-const TickType_t xNoDelay = ( TickType_t ) 0, xAllowableMargin = ( TickType_t ) 5; /* Large margin for Windows port, which is not real time. */\r
-TickType_t xTimeBefore, xElapsedTime, xShortDelay_ticks;\r
-size_t xFreeHeapBeforeCreatingJob = xPortGetFreeHeapSize();\r
-IotTaskPoolJobStatus_t xJobStatus;\r
-\r
-       /* Don't expect any notifications to be pending yet. */\r
-       configASSERT( ulTaskNotifyTake( pdTRUE, xNoDelay ) == 0 );\r
-\r
-       /* Create a job using the handle of this task as the job's context and the\r
-        * function that sends a notification to the task handle as the job's callback\r
-        * function.  The job is created using storage allocated on the stack of this\r
-        * function - so no memory is allocated. */\r
-       xResult = IotTaskPool_CreateJob(  prvSimpleTaskNotifyCallback, /* Callback function. */\r
-                                                                         ( void * ) xTaskGetCurrentTaskHandle(), /* Job context. */\r
-                                                                         &xJobStorage,\r
-                                                                         &xJob );\r
-       configASSERT( xResult == IOT_TASKPOOL_SUCCESS );\r
-\r
-       /* The job has been created but not scheduled so is now ready. */\r
-       IotTaskPool_GetStatus( NULL, xJob, &xJobStatus );\r
-       configASSERT( xJobStatus == IOT_TASKPOOL_STATUS_READY );\r
-\r
-       /* This is not a persistent (recyclable) job and its storage is on the\r
-        * stack of this function, so the amount of heap space available should not\r
-        * have changed since entering this function. */\r
-       configASSERT( xFreeHeapBeforeCreatingJob == xPortGetFreeHeapSize() );\r
-\r
-       /* Schedule the job to run its callback in ulShortDelay_ms milliseconds time.\r
-        * In the full task pool implementation the first parameter is used to  pass the\r
-        * handle of the task pool to schedule.  The lean task pool implementation used\r
-        * in this demo only supports a single task pool, which is created internally\r
-        * within the library, so the first parameter is NULL. */\r
-       xResult = IotTaskPool_ScheduleDeferred( NULL, xJob, ulShortDelay_ms );\r
-       configASSERT( xResult == IOT_TASKPOOL_SUCCESS );\r
-\r
-       /* The scheduled job should not have executed yet, so don't expect any\r
-        * notifications and expect the job's status to be 'deferred'. */\r
-       ulReturn = ulTaskNotifyTake( pdTRUE, xNoDelay );\r
-       configASSERT( ulReturn == 0 );\r
-       IotTaskPool_GetStatus( NULL, xJob, &xJobStatus );\r
-       configASSERT( xJobStatus == IOT_TASKPOOL_STATUS_DEFERRED );\r
-\r
-       /* As the job has not yet been executed it can be cancelled. */\r
-       xResult = IotTaskPool_TryCancel( NULL, xJob, &xJobStatus );\r
-       configASSERT( xResult == IOT_TASKPOOL_SUCCESS );\r
-       IotTaskPool_GetStatus( NULL, xJob, &xJobStatus );\r
-       configASSERT( xJobStatus == IOT_TASKPOOL_STATUS_CANCELED );\r
-\r
-       /* Schedule the job again, and this time wait until its callback is\r
-        * executed (the callback function sends a notification to this task) to see\r
-        * that it executes at the right time. */\r
-       xTimeBefore = xTaskGetTickCount();\r
-       xResult = IotTaskPool_ScheduleDeferred( NULL, xJob, ulShortDelay_ms );\r
-       configASSERT( xResult == IOT_TASKPOOL_SUCCESS );\r
-\r
-       /* Wait twice the deferred execution time to ensure the callback is executed\r
-        * before the call below times out. */\r
-       ulReturn = ulTaskNotifyTake( pdTRUE, pdMS_TO_TICKS( ulShortDelay_ms * 2UL ) );\r
-       xElapsedTime = xTaskGetTickCount() - xTimeBefore;\r
-\r
-       /* A single notification should have been received... */\r
-       configASSERT( ulReturn == 1 );\r
-\r
-       /* ...and the time since scheduling the job should be greater than or\r
-        * equal to the deferred execution time - which is converted to ticks for\r
-        * comparison. */\r
-       xShortDelay_ticks = pdMS_TO_TICKS( ulShortDelay_ms );\r
-       configASSERT( ( xElapsedTime >= xShortDelay_ticks ) && ( xElapsedTime  < ( xShortDelay_ticks + xAllowableMargin ) ) );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvExample_BasicRecyclableJob( void )\r
-{\r
-IotTaskPoolJob_t xJob;\r
-IotTaskPoolError_t xResult;\r
-uint32_t ulReturn;\r
-const uint32_t ulNoFlags = 0UL;\r
-const TickType_t xNoDelay = ( TickType_t ) 0;\r
-size_t xFreeHeapBeforeCreatingJob = xPortGetFreeHeapSize();\r
-\r
-       /* Don't expect any notifications to be pending yet. */\r
-       configASSERT( ulTaskNotifyTake( pdTRUE, xNoDelay ) == 0 );\r
-\r
-       /* Create and schedule a job using the handle of this task as the job's\r
-        * context and the function that sends a notification to the task handle as\r
-        * the job's callback function.  The job is created as a recyclable job and in\r
-        * this case the memory used to hold the job status is allocated inside the\r
-        * create function.  As the job is persistent it can be used multiple times,\r
-        * as demonstrated in other examples within this demo.  In the full task pool\r
-        * implementation the first parameter is used to pass the handle of the task\r
-        * pool this recyclable job is to be associated with.  In the lean\r
-        * implementation of the task pool used by this demo there is only one task\r
-        * pool (the system task pool created within the task pool library) so the\r
-        * first parameter is NULL. */\r
-       xResult = IotTaskPool_CreateRecyclableJob( NULL,\r
-                                                                                          prvSimpleTaskNotifyCallback,\r
-                                                                                          (void * ) xTaskGetCurrentTaskHandle(),\r
-                                                                                          &xJob );\r
-       configASSERT( xResult == IOT_TASKPOOL_SUCCESS );\r
-\r
-       /* This recyclable job is persistent, and in this case created dynamically,\r
-        * so expect there to be less heap space than when entering the function. */\r
-       configASSERT( xPortGetFreeHeapSize() < xFreeHeapBeforeCreatingJob );\r
-\r
-       /* In the full task pool implementation the first parameter is used to\r
-        * pass the handle of the task pool to schedule.  The lean task pool\r
-        * implementation used in this demo only supports a single task pool, which\r
-        * is created internally within the library, so the first parameter is NULL. */\r
-       xResult = IotTaskPool_Schedule( NULL, xJob, ulNoFlags );\r
-       configASSERT( xResult == IOT_TASKPOOL_SUCCESS );\r
-\r
-       /* Look for the notification coming from the job's callback function.  The\r
-        * priority of the task pool worker task that executes the callback is higher\r
-        * than the priority of this task so a block time is not needed - the task pool\r
-        * worker task  preempts this task and sends the notification (from the job's\r
-        * callback) as soon as the job is scheduled. */\r
-       ulReturn = ulTaskNotifyTake( pdTRUE, xNoDelay );\r
-       configASSERT( ulReturn );\r
-\r
-       /* Clean up recyclable job.  In the full implementation of the task pool\r
-        * the first parameter is used to pass a handle to the task pool the job is\r
-        * associated with.  In the lean implementation of the task pool used by this\r
-        * demo there is only one task pool (the system task pool created in the\r
-        * task pool library itself) so the first parameter is NULL. */\r
-       IotTaskPool_DestroyRecyclableJob( NULL, xJob );\r
-\r
-       /* Once the job has been deleted the memory used to hold the job is\r
-        * returned, so the available heap should be exactly as when entering this\r
-        * function. */\r
-       configASSERT( xPortGetFreeHeapSize() == xFreeHeapBeforeCreatingJob );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvExample_ReuseRecyclableJobFromLowPriorityTask( void )\r
-{\r
-IotTaskPoolError_t xResult;\r
-uint32_t ulNotificationValue;\r
-const uint32_t ulNoFlags = 0UL;\r
-const TickType_t xNoDelay = ( TickType_t ) 0;\r
-IotTaskPoolJob_t xJob, xJobRecycled;\r
-size_t xFreeHeapBeforeCreatingJob = xPortGetFreeHeapSize(), xFreeHeapAfterCreatingJob = 0;\r
-IotTaskPoolJobStatus_t xJobStatus;\r
-\r
-       /* Don't expect any notifications to be pending yet. */\r
-       configASSERT( ulTaskNotifyTake( pdTRUE, xNoDelay ) == 0 );\r
-\r
-       /* Create a recycleable job using the handle of this task as the job's\r
-        * context and the function that sends a notification to the task handle as\r
-        * the job's callback function.  In the full task pool implementation the\r
-        * first parameter is used to pass the handle of the task pool this\r
-        * recyclable job is to be associated with.  In the lean implementation of\r
-        * the task pool used by this demo there is only one task pool (the system\r
-        * task pool created within the task pool library) so the first parameter is\r
-        * NULL. */\r
-       xResult = IotTaskPool_CreateRecyclableJob( NULL,\r
-                                                                                          prvSimpleTaskNotifyCallback,\r
-                                                                                          (void * ) xTaskGetCurrentTaskHandle(),\r
-                                                                                          &( xJob ) );\r
-       configASSERT( xResult == IOT_TASKPOOL_SUCCESS );\r
-\r
-       /* The job is created as a recyclable job and in this case the memory to\r
-        * store the job information is allocated within the create function as at\r
-        * this time there are no recyclable jobs in the task pool jobs cache. So\r
-        * expect there to be less heap space than when entering the function. */\r
-       xFreeHeapAfterCreatingJob = xPortGetFreeHeapSize();\r
-       configASSERT( xFreeHeapAfterCreatingJob < xFreeHeapBeforeCreatingJob );\r
-\r
-       /* The job has been created but not scheduled so is now ready. */\r
-       IotTaskPool_GetStatus( NULL, xJob, &xJobStatus );\r
-       configASSERT( xJobStatus == IOT_TASKPOOL_STATUS_READY );\r
-\r
-       /* In the full task pool implementation the first parameter is used to\r
-        * pass the handle of the task pool to schedule.  The lean task pool\r
-        * implementation used in this demo only supports a single task pool, which\r
-        * is created internally within the library, so the first parameter is NULL. */\r
-       xResult = IotTaskPool_Schedule( NULL, xJob, ulNoFlags );\r
-       configASSERT( xResult == IOT_TASKPOOL_SUCCESS );\r
-\r
-       /* The priority of the task pool task(s) is higher than the priority\r
-        * of this task, so the job's callback function should have already\r
-        * executed, sending a notification to this task, and incrementing this\r
-        * task's notification value. */\r
-       xTaskNotifyWait( 0UL, /* Don't clear any bits on entry. */\r
-                                        0UL, /* Don't clear any bits on exit. */\r
-                                        &ulNotificationValue, /* Obtain the notification value. */\r
-                                        xNoDelay ); /* No block time, return immediately. */\r
-       configASSERT( ulNotificationValue == 1 );\r
-\r
-       /* The job's callback has executed so the job is now completed. */\r
-       IotTaskPool_GetStatus( NULL, xJob, &xJobStatus );\r
-       configASSERT( xJobStatus == IOT_TASKPOOL_STATUS_COMPLETED );\r
-\r
-       /* Return the job to the task pool's job cache. */\r
-       IotTaskPool_RecycleJob( NULL, xJob );\r
-\r
-       /* Create a recycleable job again using the handle of this task as the job's\r
-        * context and the function that sends a notification to the task handle as\r
-        * the job's callback function.  In the full task pool implementation the\r
-        * first parameter is used to pass the handle of the task pool this\r
-        * recyclable job is to be associated with.  In the lean implementation of\r
-        * the task pool used by this demo there is only one task pool (the system\r
-        * task pool created within the task pool library) so the first parameter is\r
-        * NULL. */\r
-       xResult = IotTaskPool_CreateRecyclableJob( NULL,\r
-                                                                                          prvSimpleTaskNotifyCallback,\r
-                                                                                          (void * ) xTaskGetCurrentTaskHandle(),\r
-                                                                                          &( xJobRecycled ) );\r
-       configASSERT( xResult == IOT_TASKPOOL_SUCCESS );\r
-\r
-       /* Since this time the task pool's job cache had a recycleable job, it must\r
-        * have been re-used. Thefore expect the free heap space to be same as after\r
-        * the creation of first job */\r
-       configASSERT( xPortGetFreeHeapSize() == xFreeHeapAfterCreatingJob );\r
-\r
-       /* Expect the task pool to re-use the job in its cache as opposed to\r
-        * allocating a new one. */\r
-       configASSERT( xJobRecycled == xJob );\r
-\r
-       /* In the full task pool implementation the first parameter is used to\r
-        * pass the handle of the task pool to schedule.  The lean task pool\r
-        * implementation used in this demo only supports a single task pool, which\r
-        * is created internally within the library, so the first parameter is NULL. */\r
-       xResult = IotTaskPool_Schedule( NULL, xJobRecycled, ulNoFlags );\r
-       configASSERT( xResult == IOT_TASKPOOL_SUCCESS );\r
-\r
-       /* The priority of the task pool task(s) is higher than the priority\r
-        * of this task, so the job's callback function should have already\r
-        * executed, sending a notification to this task, and incrementing this\r
-        * task's notification value. */\r
-       xTaskNotifyWait( 0UL, /* Don't clear any bits on entry. */\r
-                                        0UL, /* Don't clear any bits on exit. */\r
-                                        &ulNotificationValue, /* Obtain the notification value. */\r
-                                        xNoDelay ); /* No block time, return immediately. */\r
-       configASSERT( ulNotificationValue == 2 );\r
-\r
-       /* The job's callback has executed so the job is now completed. */\r
-       IotTaskPool_GetStatus( NULL, xJobRecycled, &xJobStatus );\r
-       configASSERT( xJobStatus == IOT_TASKPOOL_STATUS_COMPLETED );\r
-\r
-       /* Clean up the recyclable job.  In the full implementation of the task\r
-        * pool the first parameter is used to pass a handle to the task pool the job\r
-        * is associated with.  In the lean implementation of the task pool used by\r
-        * this demo there is only one task pool (the system task pool created in the\r
-        * task pool library itself) so the first parameter is NULL. */\r
-       xResult = IotTaskPool_DestroyRecyclableJob( NULL, xJobRecycled );\r
-       configASSERT( xResult == IOT_TASKPOOL_SUCCESS );\r
-\r
-       /* Clear all the notification value bits ready for the next example. */\r
-       xTaskNotifyWait( portMAX_DELAY, /* Clear all bits on entry - portMAX_DELAY is used as it is a portable way of having all bits set. */\r
-                                        0UL, /* Don't clear any bits on exit. */\r
-                                        NULL, /* Don't need the notification value this time. */\r
-                                        xNoDelay ); /* No block time, return immediately. */\r
-       configASSERT( ulTaskNotifyTake( pdTRUE, xNoDelay ) == 0 );\r
-\r
-       /* Once the job has been deleted the memory used to hold the job is\r
-        * returned, so the available heap should be exactly as when entering this\r
-        * function. */\r
-       configASSERT( xPortGetFreeHeapSize() == xFreeHeapBeforeCreatingJob );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvExample_ReuseRecyclableJobFromHighPriorityTask( void )\r
-{\r
-IotTaskPoolError_t xResult;\r
-uint32_t ulNotificationValue;\r
-const uint32_t ulNoFlags = 0UL;\r
-const TickType_t xNoDelay = ( TickType_t ) 0;\r
-TickType_t xShortDelay = pdMS_TO_TICKS( 150 );\r
-IotTaskPoolJob_t xJob, xJobRecycled;\r
-size_t xFreeHeapBeforeCreatingJob = xPortGetFreeHeapSize(), xFreeHeapAfterCreatingJob = 0;\r
-IotTaskPoolJobStatus_t xJobStatus;\r
-\r
-       /* Don't expect any notifications to be pending yet. */\r
-       configASSERT( ulTaskNotifyTake( pdTRUE, xNoDelay ) == 0 );\r
-\r
-       /* prvExample_ReuseRecyclableJobFromLowPriorityTask() executes in a task\r
-        * that has a lower [task] priority than the task pool's worker tasks.\r
-        * Therefore a task pool worker preempts the task that calls\r
-        * prvExample_ReuseRecyclableJobFromHighPriorityTask() as soon as the job is\r
-        * scheduled.  prvExample_ReuseRecyclableJobFromHighPriorityTask() reverses the\r
-        * priorities - prvExample_ReuseRecyclableJobFromHighPriorityTask() raises its\r
-        * priority to above the task pool's worker tasks, so the worker tasks do not\r
-        * execute until the calling task enters the blocked state.  First raise the\r
-        * priority - passing NULL means raise the priority of the calling task. */\r
-       vTaskPrioritySet( NULL, tpTASK_POOL_WORKER_PRIORITY + 1 );\r
-\r
-       /* Create a recycleable job using the handle of this task as the job's\r
-        * context and the function that sends a notification to the task handle as\r
-        * the job's callback function.  In the full task pool implementation the\r
-        * first parameter is used to pass the handle of the task pool this\r
-        * recyclable job is to be associated with.  In the lean implementation of\r
-        * the task pool used by this demo there is only one task pool (the system\r
-        * task pool created within the task pool library) so the first parameter is\r
-        * NULL. */\r
-       xResult = IotTaskPool_CreateRecyclableJob( NULL,\r
-                                                                                          prvSimpleTaskNotifyCallback,\r
-                                                                                          (void * ) xTaskGetCurrentTaskHandle(),\r
-                                                                                          &( xJob ) );\r
-       configASSERT( xResult == IOT_TASKPOOL_SUCCESS );\r
-\r
-       /* The job is created as a recyclable job and in this case the memory to\r
-        * store the job information is allocated within the create function as at\r
-        * this time there are no recyclable jobs in the task pool jobs cache. So\r
-        * expect there to be less heap space than when entering the function. */\r
-       xFreeHeapAfterCreatingJob = xPortGetFreeHeapSize();\r
-       configASSERT( xFreeHeapAfterCreatingJob < xFreeHeapBeforeCreatingJob );\r
-\r
-       /* The job has been created but not scheduled so is now ready. */\r
-       IotTaskPool_GetStatus( NULL, xJob, &xJobStatus );\r
-       configASSERT( xJobStatus == IOT_TASKPOOL_STATUS_READY );\r
-\r
-       /* In the full task pool implementation the first parameter is used to\r
-        * pass the handle of the task pool to schedule.  The lean task pool\r
-        * implementation used in this demo only supports a single task pool, which\r
-        * is created internally within the library, so the first parameter is NULL. */\r
-       xResult = IotTaskPool_Schedule( NULL, xJob, ulNoFlags );\r
-       configASSERT( xResult == IOT_TASKPOOL_SUCCESS );\r
-\r
-       /* The priority of the task pool task(s) is lower than the priority\r
-        * of this task, so the job's callback function should not have executed\r
-        * yet, so don't expect the notification value for this task to have\r
-        * changed. */\r
-       xTaskNotifyWait( 0UL, /* Don't clear any bits on entry. */\r
-                                        0UL, /* Don't clear any bits on exit. */\r
-                                        &ulNotificationValue, /* Obtain the notification value. */\r
-                                        xNoDelay ); /* No block time, return immediately. */\r
-       configASSERT( ulNotificationValue == 0 );\r
-\r
-       /* When this task blocks to wait for a notification, a worker thread will be\r
-        * able to execute - but as soon as its callback function sends a\r
-        * notification to this task, this task will preempt it (because it has a\r
-        * higher priority). So this task expects to receive one notification. */\r
-       xTaskNotifyWait( 0UL, /* Don't clear any bits on entry. */\r
-                                        0UL, /* Don't clear any bits on exit. */\r
-                                        &ulNotificationValue, /* Obtain the notification value. */\r
-                                        xShortDelay ); /* Short delay to allow a task pool worker to execute. */\r
-       configASSERT( ulNotificationValue == 1 );\r
-\r
-       /* Since the scheduled job has now executed, so waiting for another\r
-        * notification should timeout without the notification value changing. */\r
-       xTaskNotifyWait( 0UL, /* Don't clear any bits on entry. */\r
-                                        0UL, /* Don't clear any bits on exit. */\r
-                                        &ulNotificationValue, /* Obtain the notification value. */\r
-                                        xShortDelay ); /* Short delay to allow a task pool worker to execute. */\r
-       configASSERT( ulNotificationValue == 1 );\r
-\r
-       /* The job's callback has executed so the job is now completed. */\r
-       IotTaskPool_GetStatus( NULL, xJob, &xJobStatus );\r
-       configASSERT( xJobStatus == IOT_TASKPOOL_STATUS_COMPLETED );\r
-\r
-       /* Return the job to the task pool's job cache. */\r
-       IotTaskPool_RecycleJob( NULL, xJob );\r
-\r
-       /* Create a recycleable job again using the handle of this task as the job's\r
-        * context and the function that sends a notification to the task handle as\r
-        * the job's callback function.  In the full task pool implementation the\r
-        * first parameter is used to pass the handle of the task pool this\r
-        * recyclable job is to be associated with.  In the lean implementation of\r
-        * the task pool used by this demo there is only one task pool (the system\r
-        * task pool created within the task pool library) so the first parameter is\r
-        * NULL. */\r
-       xResult = IotTaskPool_CreateRecyclableJob( NULL,\r
-                                                                                          prvSimpleTaskNotifyCallback,\r
-                                                                                          (void * ) xTaskGetCurrentTaskHandle(),\r
-                                                                                          &( xJobRecycled ) );\r
-       configASSERT( xResult == IOT_TASKPOOL_SUCCESS );\r
-\r
-       /* Since this time the task pool's job cache had a recycleable job, it must\r
-        * have been re-used. Thefore expect the free heap space to be same as after\r
-        * the creation of first job */\r
-       configASSERT( xPortGetFreeHeapSize() == xFreeHeapAfterCreatingJob );\r
-\r
-       /* Expect the task pool to re-use the job in its cache as opposed to\r
-        * allocating a new one. */\r
-       configASSERT( xJobRecycled == xJob );\r
-\r
-       /* In the full task pool implementation the first parameter is used to\r
-        * pass the handle of the task pool to schedule.  The lean task pool\r
-        * implementation used in this demo only supports a single task pool, which\r
-        * is created internally within the library, so the first parameter is NULL. */\r
-       xResult = IotTaskPool_Schedule( NULL, xJobRecycled, ulNoFlags );\r
-       configASSERT( xResult == IOT_TASKPOOL_SUCCESS );\r
-\r
-       /* The priority of the task pool task(s) is lower than the priority\r
-        * of this task, so the job's callback function should not have executed\r
-        * yet, so don't expect the notification value for this task to have\r
-        * changed. */\r
-       xTaskNotifyWait( 0UL, /* Don't clear any bits on entry. */\r
-                                        0UL, /* Don't clear any bits on exit. */\r
-                                        &ulNotificationValue, /* Obtain the notification value. */\r
-                                        xNoDelay ); /* No block time, return immediately. */\r
-       configASSERT( ulNotificationValue == 1 );\r
-\r
-       /* When this task blocks to wait for a notification, a worker thread will be\r
-        * able to execute - but as soon as its callback function sends a\r
-        * notification to this task, this task will preempt it (because it has a\r
-        * higher priority). So this task expects to receive one notification. */\r
-       xTaskNotifyWait( 0UL, /* Don't clear any bits on entry. */\r
-                                        0UL, /* Don't clear any bits on exit. */\r
-                                        &ulNotificationValue, /* Obtain the notification value. */\r
-                                        xShortDelay ); /* Short delay to allow a task pool worker to execute. */\r
-       configASSERT( ulNotificationValue == 2 );\r
-\r
-       /* Since the scheduled job has now executed, so waiting for another\r
-        * notification should timeout without the notification value changing. */\r
-       xTaskNotifyWait( 0UL, /* Don't clear any bits on entry. */\r
-                                        0UL, /* Don't clear any bits on exit. */\r
-                                        &ulNotificationValue, /* Obtain the notification value. */\r
-                                        xShortDelay ); /* Short delay to allow a task pool worker to execute. */\r
-       configASSERT( ulNotificationValue == 2 );\r
-\r
-       /* The job's callback has executed so the job is now completed. */\r
-       IotTaskPool_GetStatus( NULL, xJobRecycled, &xJobStatus );\r
-       configASSERT( xJobStatus == IOT_TASKPOOL_STATUS_COMPLETED );\r
-\r
-       /* Clean up the recyclable job.  In the full implementation of the task\r
-        * pool the first parameter is used to pass a handle to the task pool the job\r
-        * is associated with.  In the lean implementation of the task pool used by\r
-        * this demo there is only one task pool (the system task pool created in the\r
-        * task pool library itself) so the first parameter is NULL. */\r
-       xResult = IotTaskPool_DestroyRecyclableJob( NULL, xJobRecycled );\r
-       configASSERT( xResult == IOT_TASKPOOL_SUCCESS );\r
-\r
-       /* Reset this task's priority. */\r
-       vTaskPrioritySet( NULL, tskIDLE_PRIORITY );\r
-\r
-       /* Clear all the notification value bits ready for the next example. */\r
-       xTaskNotifyWait( portMAX_DELAY, /* Clear all bits on entry - portMAX_DELAY is used as it is a portable way of having all bits set. */\r
-                                        0UL, /* Don't clear any bits on exit. */\r
-                                        NULL, /* Don't need the notification value this time. */\r
-                                        xNoDelay ); /* No block time, return immediately. */\r
-       configASSERT( ulTaskNotifyTake( pdTRUE, xNoDelay ) == 0 );\r
-\r
-       /* Once the job has been deleted the memory used to hold the job is\r
-        * returned, so the available heap should be exactly as when entering this\r
-        * function. */\r
-       configASSERT( xPortGetFreeHeapSize() == xFreeHeapBeforeCreatingJob );\r
-}\r
-/*-----------------------------------------------------------*/\r
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/DemoTasks/SimpleUDPClientAndServer.c b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/DemoTasks/SimpleUDPClientAndServer.c
deleted file mode 100644 (file)
index 54143c3..0000000
+++ /dev/null
@@ -1,355 +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
- * Creates two transmitting tasks and two receiving tasks.  The transmitting\r
- * tasks send values that are received by the receiving tasks.  One set of tasks\r
- * uses the standard API.  The other set of tasks uses the zero copy API.\r
- *\r
- * See the following web page for essential demo usage and configuration\r
- * details:\r
- * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/examples_FreeRTOS_simulator.html\r
- */\r
-\r
-/* Standard includes. */\r
-#include <stdint.h>\r
-#include <stdio.h>\r
-\r
-/* FreeRTOS includes. */\r
-#include "FreeRTOS.h"\r
-#include "task.h"\r
-\r
-/* FreeRTOS+TCP includes. */\r
-#include "FreeRTOS_IP.h"\r
-#include "FreeRTOS_Sockets.h"\r
-\r
-#define simpTINY_DELAY ( ( TickType_t ) 2 )\r
-\r
-/*\r
- * Uses a socket to send data without using the zero copy option.\r
- * prvSimpleServerTask() will receive the data.\r
- */\r
-static void prvSimpleClientTask( void *pvParameters );\r
-\r
-/*\r
- * Uses a socket to receive the data sent by the prvSimpleClientTask() task.\r
- * Does not use the zero copy option.\r
- */\r
-static void prvSimpleServerTask( void *pvParameters );\r
-\r
-/*\r
- * Uses a socket to send data using the zero copy option.\r
- * prvSimpleZeroCopyServerTask() will receive the data.\r
- */\r
-static void prvSimpleZeroCopyUDPClientTask( void *pvParameters );\r
-\r
-/*\r
- * Uses a socket to receive the data sent by the prvSimpleZeroCopyUDPClientTask()\r
- * task.  Uses the zero copy option.\r
- */\r
-static void prvSimpleZeroCopyServerTask( void *pvParameters );\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-void vStartSimpleUDPClientServerTasks( uint16_t usStackSize, uint32_t ulPort, UBaseType_t uxPriority )\r
-{\r
-       /* Create the client and server tasks that do not use the zero copy\r
-       interface. */\r
-       xTaskCreate( prvSimpleClientTask, "SimpCpyClnt", usStackSize, ( void * ) ulPort, uxPriority, NULL );\r
-       xTaskCreate( prvSimpleServerTask, "SimpCpySrv", usStackSize, ( void * ) ulPort, uxPriority + 1, NULL );\r
-\r
-       /* Create the client and server tasks that do use the zero copy interface. */\r
-       xTaskCreate( prvSimpleZeroCopyUDPClientTask, "SimpZCpyClnt", usStackSize, ( void * ) ( ulPort + 1 ), uxPriority, NULL );\r
-       xTaskCreate( prvSimpleZeroCopyServerTask, "SimpZCpySrv", usStackSize, ( void * ) ( ulPort + 1 ), uxPriority + 1, NULL );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvSimpleClientTask( void *pvParameters )\r
-{\r
-Socket_t xClientSocket;\r
-struct freertos_sockaddr xDestinationAddress;\r
-uint8_t cString[ 65 ];\r
-BaseType_t lReturned;\r
-uint32_t ulCount = 0UL, ulIPAddress;\r
-const uint32_t ulLoopsPerSocket = 10UL;\r
-const TickType_t x150ms = 150UL / portTICK_PERIOD_MS;\r
-\r
-       /* Remove compiler warning about unused parameters. */\r
-       ( void ) pvParameters;\r
-\r
-       /* It is assumed that this task is not created until the network is up,\r
-       so the IP address can be obtained immediately.  store the IP address being\r
-       used in ulIPAddress.  This is done so the socket can send to a different\r
-       port on the same IP address. */\r
-       FreeRTOS_GetAddressConfiguration( &ulIPAddress, NULL, NULL, NULL );\r
-\r
-       /* This test sends to itself, so data sent from here is received by a server\r
-       socket on the same IP address.  Setup the freertos_sockaddr structure with\r
-       this nodes IP address, and the port number being sent to.  The strange\r
-       casting is to try and remove compiler warnings on 32 bit machines. */\r
-       xDestinationAddress.sin_addr = ulIPAddress;\r
-       xDestinationAddress.sin_port = ( uint16_t ) ( ( uint32_t ) pvParameters ) & 0xffffUL;\r
-       xDestinationAddress.sin_port = FreeRTOS_htons( xDestinationAddress.sin_port );\r
-\r
-       for( ;; )\r
-       {\r
-               /* Create the socket. */\r
-               xClientSocket = FreeRTOS_socket( FREERTOS_AF_INET, FREERTOS_SOCK_DGRAM, FREERTOS_IPPROTO_UDP );\r
-               configASSERT( xClientSocket != FREERTOS_INVALID_SOCKET );\r
-\r
-               /* The count is used to differentiate between different messages sent to\r
-               the server, and to break out of the do while loop below. */\r
-               ulCount = 0UL;\r
-\r
-               do\r
-               {\r
-                       /* Create the string that is sent to the server. */\r
-                       sprintf( ( char * ) cString, "Server received (not zero copy): Message number %lu\r\n", ulCount );\r
-\r
-                       /* Send the string to the socket.  ulFlags is set to 0, so the zero\r
-                       copy option is not selected.  That means the data from cString[] is\r
-                       copied into a network buffer inside FreeRTOS_sendto(), and cString[]\r
-                       can be reused as soon as FreeRTOS_sendto() has returned. */\r
-                       lReturned = FreeRTOS_sendto( xClientSocket, ( void * ) cString, strlen( ( const char * ) cString ), 0, &xDestinationAddress, sizeof( xDestinationAddress ) );\r
-\r
-                       ulCount++;\r
-\r
-               } while( ( lReturned != FREERTOS_SOCKET_ERROR ) && ( ulCount < ulLoopsPerSocket ) );\r
-\r
-               FreeRTOS_closesocket( xClientSocket );\r
-\r
-               /* A short delay to prevent the messages printed by the server task\r
-               scrolling off the screen too quickly, and to prevent reduce the network\r
-               loading. */\r
-               vTaskDelay( x150ms );\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvSimpleServerTask( void *pvParameters )\r
-{\r
-int32_t lBytes;\r
-uint8_t cReceivedString[ 60 ];\r
-struct freertos_sockaddr xClient, xBindAddress;\r
-uint32_t xClientLength = sizeof( xClient );\r
-Socket_t xListeningSocket;\r
-\r
-       /* Just to prevent compiler warnings. */\r
-       ( void ) pvParameters;\r
-\r
-       /* Attempt to open the socket. */\r
-       xListeningSocket = FreeRTOS_socket( FREERTOS_AF_INET, FREERTOS_SOCK_DGRAM, FREERTOS_IPPROTO_UDP );\r
-       configASSERT( xListeningSocket != FREERTOS_INVALID_SOCKET );\r
-\r
-       /* This test receives data sent from a different port on the same IP\r
-       address.  Configure the freertos_sockaddr structure with the address being\r
-       bound to.  The strange casting is to try and remove     compiler warnings on 32\r
-       bit machines.  Note that this task is only created after the network is up,\r
-       so the IP address is valid here. */\r
-       xBindAddress.sin_port = ( uint16_t ) ( ( uint32_t ) pvParameters ) & 0xffffUL;\r
-       xBindAddress.sin_port = FreeRTOS_htons( xBindAddress.sin_port );\r
-\r
-       /* Bind the socket to the port that the client task will send to. */\r
-       FreeRTOS_bind( xListeningSocket, &xBindAddress, sizeof( xBindAddress ) );\r
-\r
-       for( ;; )\r
-       {\r
-               /* Zero out the receive array so there is NULL at the end of the string\r
-               when it is printed out. */\r
-               memset( cReceivedString, 0x00, sizeof( cReceivedString ) );\r
-\r
-               /* Receive data on the socket.  ulFlags is zero, so the zero copy option\r
-               is not set and the received data is copied into the buffer pointed to by\r
-               cReceivedString.  By default the block time is portMAX_DELAY.\r
-               xClientLength is not actually used by FreeRTOS_recvfrom(), but is set\r
-               appropriately in case future versions do use it. */\r
-               lBytes = FreeRTOS_recvfrom( xListeningSocket, cReceivedString, sizeof( cReceivedString ), 0, &xClient, &xClientLength );\r
-\r
-               /* Error check. */\r
-               configASSERT( lBytes == ( BaseType_t ) strlen( ( const char * ) cReceivedString ) );\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvSimpleZeroCopyUDPClientTask( void *pvParameters )\r
-{\r
-Socket_t xClientSocket;\r
-uint8_t *pucUDPPayloadBuffer;\r
-struct freertos_sockaddr xDestinationAddress;\r
-BaseType_t lReturned;\r
-uint32_t ulCount = 0UL, ulIPAddress;\r
-const uint32_t ulLoopsPerSocket = 10UL;\r
-const char *pcStringToSend = "Server received (using zero copy): Message number ";\r
-const TickType_t x150ms = 150UL / portTICK_PERIOD_MS;\r
-/* 15 is added to ensure the number, \r\n and terminating zero fit. */\r
-const size_t xStringLength = strlen( pcStringToSend ) + 15;\r
-\r
-       /* Remove compiler warning about unused parameters. */\r
-       ( void ) pvParameters;\r
-\r
-       /* It is assumed that this task is not created until the network is up,\r
-       so the IP address can be obtained immediately.  store the IP address being\r
-       used in ulIPAddress.  This is done so the socket can send to a different\r
-       port on the same IP address. */\r
-       FreeRTOS_GetAddressConfiguration( &ulIPAddress, NULL, NULL, NULL );\r
-\r
-       /* This test sends to itself, so data sent from here is received by a server\r
-       socket on the same IP address.  Setup the freertos_sockaddr structure with\r
-       this nodes IP address, and the port number being sent to.  The strange\r
-       casting is to try and remove compiler warnings on 32 bit machines. */\r
-       xDestinationAddress.sin_addr = ulIPAddress;\r
-       xDestinationAddress.sin_port = ( uint16_t ) ( ( uint32_t ) pvParameters ) & 0xffffUL;\r
-       xDestinationAddress.sin_port = FreeRTOS_htons( xDestinationAddress.sin_port );\r
-\r
-       for( ;; )\r
-       {\r
-               /* Create the socket. */\r
-               xClientSocket = FreeRTOS_socket( FREERTOS_AF_INET, FREERTOS_SOCK_DGRAM, FREERTOS_IPPROTO_UDP );\r
-               configASSERT( xClientSocket != FREERTOS_INVALID_SOCKET );\r
-\r
-               /* The count is used to differentiate between different messages sent to\r
-               the server, and to break out of the do while loop below. */\r
-               ulCount = 0UL;\r
-\r
-               do\r
-               {\r
-                       /* This task is going to send using the zero copy interface.  The\r
-                       data being sent is therefore written directly into a buffer that is\r
-                       passed into, rather than copied into, the FreeRTOS_sendto()\r
-                       function.\r
-\r
-                       First obtain a buffer of adequate length from the IP stack into which\r
-                       the string will be written.  Although a max delay is used, the actual\r
-                       delay will be capped to ipconfigMAX_SEND_BLOCK_TIME_TICKS, hence\r
-                       the do while loop is used to ensure a buffer is obtained. */\r
-                       do\r
-                       {\r
-                       } while( ( pucUDPPayloadBuffer = ( uint8_t * ) FreeRTOS_GetUDPPayloadBuffer( xStringLength, portMAX_DELAY ) ) == NULL );\r
-\r
-                       /* A buffer was successfully obtained.  Create the string that is\r
-                       sent to the server.  First the string is filled with zeros as this will\r
-                       effectively be the null terminator when the string is received at the other\r
-                       end.  Note that the string is being written directly into the buffer\r
-                       obtained from the IP stack above. */\r
-                       memset( ( void * ) pucUDPPayloadBuffer, 0x00, xStringLength );\r
-                       sprintf( ( char * ) pucUDPPayloadBuffer, "%s%lu\r\n", pcStringToSend, ulCount );\r
-\r
-                       /* Pass the buffer into the send function.  ulFlags has the\r
-                       FREERTOS_ZERO_COPY bit set so the IP stack will take control of the\r
-                       buffer rather than copy data out of the buffer. */\r
-                       lReturned = FreeRTOS_sendto( xClientSocket,                             /* The socket being sent to. */\r
-                                                                               ( void * ) pucUDPPayloadBuffer, /* A pointer to the the data being sent. */\r
-                                                                               strlen( ( const char * ) pucUDPPayloadBuffer ) + 1, /* The length of the data being sent - including the string's null terminator. */\r
-                                                                               FREERTOS_ZERO_COPY,                     /* ulFlags with the FREERTOS_ZERO_COPY bit set. */\r
-                                                                               &xDestinationAddress,                   /* Where the data is being sent. */\r
-                                                                               sizeof( xDestinationAddress ) );\r
-\r
-                       if( lReturned == 0 )\r
-                       {\r
-                               /* The send operation failed, so this task is still responsible\r
-                               for the buffer obtained from the IP stack.  To ensure the buffer\r
-                               is not lost it must either be used again, or, as in this case,\r
-                               returned to the IP stack using FreeRTOS_ReleaseUDPPayloadBuffer().\r
-                               pucUDPPayloadBuffer can be safely re-used after this call. */\r
-                               FreeRTOS_ReleaseUDPPayloadBuffer( ( void * ) pucUDPPayloadBuffer );\r
-                       }\r
-                       else\r
-                       {\r
-                               /* The send was successful so the IP stack is now managing the\r
-                               buffer pointed to by pucUDPPayloadBuffer, and the IP stack will\r
-                               return the buffer once it has been sent.  pucUDPPayloadBuffer can\r
-                               be safely re-used. */\r
-                       }\r
-\r
-                       ulCount++;\r
-\r
-               } while( ( lReturned != FREERTOS_SOCKET_ERROR ) && ( ulCount < ulLoopsPerSocket ) );\r
-\r
-               FreeRTOS_closesocket( xClientSocket );\r
-\r
-               /* A short delay to prevent the messages scrolling off the screen too\r
-               quickly. */\r
-               vTaskDelay( x150ms );\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvSimpleZeroCopyServerTask( void *pvParameters )\r
-{\r
-int32_t lBytes;\r
-uint8_t *pucUDPPayloadBuffer;\r
-struct freertos_sockaddr xClient, xBindAddress;\r
-uint32_t xClientLength = sizeof( xClient ), ulIPAddress;\r
-Socket_t xListeningSocket;\r
-\r
-       /* Just to prevent compiler warnings. */\r
-       ( void ) pvParameters;\r
-\r
-       /* Attempt to open the socket. */\r
-       xListeningSocket = FreeRTOS_socket( FREERTOS_AF_INET, FREERTOS_SOCK_DGRAM, FREERTOS_IPPROTO_UDP );\r
-       configASSERT( xListeningSocket != FREERTOS_INVALID_SOCKET );\r
-\r
-       /* This test receives data sent from a different port on the same IP address.\r
-       Obtain the nodes IP address.  Configure the freertos_sockaddr structure with\r
-       the address being bound to.  The strange casting is to try and remove\r
-       compiler warnings on 32 bit machines.  Note that this task is only created\r
-       after the network is up, so the IP address is valid here. */\r
-       FreeRTOS_GetAddressConfiguration( &ulIPAddress, NULL, NULL, NULL );\r
-       xBindAddress.sin_addr = ulIPAddress;\r
-       xBindAddress.sin_port = ( uint16_t ) ( ( uint32_t ) pvParameters ) & 0xffffUL;\r
-       xBindAddress.sin_port = FreeRTOS_htons( xBindAddress.sin_port );\r
-\r
-       /* Bind the socket to the port that the client task will send to. */\r
-       FreeRTOS_bind( xListeningSocket, &xBindAddress, sizeof( xBindAddress ) );\r
-\r
-       for( ;; )\r
-       {\r
-               /* Receive data on the socket.  ulFlags has the zero copy bit set\r
-               (FREERTOS_ZERO_COPY) indicating to the stack that a reference to the\r
-               received data should be passed out to this task using the second\r
-               parameter to the FreeRTOS_recvfrom() call.  When this is done the\r
-               IP stack is no longer responsible for releasing the buffer, and\r
-               the task *must* return the buffer to the stack when it is no longer\r
-               needed.  By default the block time is portMAX_DELAY. */\r
-               lBytes = FreeRTOS_recvfrom( xListeningSocket, ( void * ) &pucUDPPayloadBuffer, 0, FREERTOS_ZERO_COPY, &xClient, &xClientLength );\r
-\r
-               /* Print the received characters. */\r
-               if( lBytes > 0 )\r
-               {\r
-                       /* It is expected to receive one more byte than the string length as\r
-                       the NULL terminator is also transmitted. */\r
-                       configASSERT( lBytes == ( ( BaseType_t ) strlen( ( const char * ) pucUDPPayloadBuffer ) + 1 ) );\r
-               }\r
-\r
-               if( lBytes >= 0 )\r
-               {\r
-                       /* The buffer *must* be freed once it is no longer needed. */\r
-                       FreeRTOS_ReleaseUDPPayloadBuffer( pucUDPPayloadBuffer );\r
-               }\r
-       }\r
-}\r
-\r
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/FreeRTOSConfig.h b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/FreeRTOSConfig.h
deleted file mode 100644 (file)
index 3b63eb0..0000000
+++ /dev/null
@@ -1,208 +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
-#ifndef FREERTOS_CONFIG_H\r
-#define FREERTOS_CONFIG_H\r
-\r
-/*-----------------------------------------------------------\r
- * Application specific definitions.\r
- *\r
- * These definitions should be adjusted for your particular hardware and\r
- * application requirements.\r
- *\r
- * THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
- * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.\r
- * http://www.freertos.org/a00110.html\r
- *\r
- * The bottom of this file contains some constants specific to running the UDP\r
- * stack in this demo.  Constants specific to FreeRTOS+TCP itself (rather than\r
- * the demo) are contained in FreeRTOSIPConfig.h.\r
- *----------------------------------------------------------*/\r
-#define configUSE_PREEMPTION                                   1\r
-#define configUSE_PORT_OPTIMISED_TASK_SELECTION        1\r
-#define configMAX_PRIORITIES                                   ( 7 )\r
-#define configTICK_RATE_HZ                                             ( 1000 ) /* In this non-real time simulated environment the tick frequency has to be at least a multiple of the Win32 tick frequency, and therefore very slow. */\r
-#define configMINIMAL_STACK_SIZE                               ( ( unsigned short ) 60 ) /* In this simulated case, the stack only has to hold one small structure as the real stack is part of the Win32 thread. */\r
-#define configTOTAL_HEAP_SIZE                                  ( ( size_t ) ( 2048U * 1024U ) )\r
-#define configMAX_TASK_NAME_LEN                                        ( 15 )\r
-#define configUSE_TRACE_FACILITY                               1\r
-#define configUSE_16_BIT_TICKS                                 0\r
-#define configIDLE_SHOULD_YIELD                                        1\r
-#define configUSE_CO_ROUTINES                                  0\r
-#define configUSE_MUTEXES                                              1\r
-#define configUSE_RECURSIVE_MUTEXES                            1\r
-#define configQUEUE_REGISTRY_SIZE                              0\r
-#define configUSE_APPLICATION_TASK_TAG                 0\r
-#define configUSE_COUNTING_SEMAPHORES                  1\r
-#define configUSE_ALTERNATIVE_API                              0\r
-#define configNUM_THREAD_LOCAL_STORAGE_POINTERS        0\r
-#define configENABLE_BACKWARD_COMPATIBILITY            1\r
-#define configSUPPORT_STATIC_ALLOCATION                        1\r
-\r
-/* Hook function related definitions. */\r
-#define configUSE_TICK_HOOK                            0\r
-#define configUSE_IDLE_HOOK                            0\r
-#define configUSE_MALLOC_FAILED_HOOK   0\r
-#define configCHECK_FOR_STACK_OVERFLOW 0 /* Not applicable to the Win32 port. */\r
-\r
-/* Software timer related definitions. */\r
-#define configUSE_TIMERS                               1\r
-#define configTIMER_TASK_PRIORITY              ( configMAX_PRIORITIES - 1 )\r
-#define configTIMER_QUEUE_LENGTH               5\r
-#define configTIMER_TASK_STACK_DEPTH   ( configMINIMAL_STACK_SIZE * 2 )\r
-\r
-/* Event group related definitions. */\r
-#define configUSE_EVENT_GROUPS                 1\r
-\r
-/* Run time stats gathering definitions. */\r
-#define configGENERATE_RUN_TIME_STATS  0\r
-\r
-/* Co-routine definitions. */\r
-#define configUSE_CO_ROUTINES                  0\r
-#define configMAX_CO_ROUTINE_PRIORITIES ( 2 )\r
-\r
-/* Set the following definitions to 1 to include the API function, or zero\r
-to exclude the API function. */\r
-#define INCLUDE_vTaskPrioritySet                               1\r
-#define INCLUDE_uxTaskPriorityGet                              1\r
-#define INCLUDE_vTaskDelete                                            1\r
-#define INCLUDE_vTaskCleanUpResources                  0\r
-#define INCLUDE_vTaskSuspend                                   1\r
-#define INCLUDE_vTaskDelayUntil                                        1\r
-#define INCLUDE_vTaskDelay                                             1\r
-#define INCLUDE_uxTaskGetStackHighWaterMark            1\r
-#define INCLUDE_xTaskGetSchedulerState                 1\r
-#define INCLUDE_xTimerGetTimerTaskHandle               0\r
-#define INCLUDE_xTaskGetIdleTaskHandle                 0\r
-#define INCLUDE_xQueueGetMutexHolder                   1\r
-#define INCLUDE_eTaskGetState                                  1\r
-#define INCLUDE_xEventGroupSetBitsFromISR              1\r
-#define INCLUDE_xTimerPendFunctionCall                 1\r
-#define INCLUDE_pcTaskGetTaskName                              1\r
-\r
-/* This demo makes use of one or more example stats formatting functions.  These\r
-format the raw data provided by the uxTaskGetSystemState() function in to human\r
-readable ASCII form.  See the notes in the implementation of vTaskList() within\r
-FreeRTOS/Source/tasks.c for limitations.  configUSE_STATS_FORMATTING_FUNCTIONS\r
-is set to 2 so the formatting functions are included without the stdio.h being\r
-included in tasks.c.  That is because this project defines its own sprintf()\r
-functions. */\r
-#define configUSE_STATS_FORMATTING_FUNCTIONS   1\r
-\r
-/* Assert call defined for debug builds. */\r
-#ifdef _DEBUG\r
-       extern void vAssertCalled( const char *pcFile, uint32_t ulLine );\r
-       #define configASSERT( x ) if( ( x ) == 0 ) vAssertCalled( __FILE__, __LINE__ )\r
-#endif /* _DEBUG */\r
-\r
-\r
-\r
-/* Application specific definitions follow. **********************************/\r
-\r
-/* Only used when running in the FreeRTOS Windows simulator.  Defines the\r
-priority of the task used to simulate Ethernet interrupts. */\r
-#define configMAC_ISR_SIMULATOR_PRIORITY       ( configMAX_PRIORITIES - 1 )\r
-\r
-/* This demo creates a virtual network connection by accessing the raw Ethernet\r
-or WiFi data to and from a real network connection.  Many computers have more\r
-than one real network port, and configNETWORK_INTERFACE_TO_USE is used to tell\r
-the demo which real port should be used to create the virtual port.  The ports\r
-available are displayed on the console when the application is executed.  For\r
-example, on my development laptop setting configNETWORK_INTERFACE_TO_USE to 4\r
-results in the wired network being used, while setting\r
-configNETWORK_INTERFACE_TO_USE to 2 results in the wireless network being\r
-used. */\r
-#define configNETWORK_INTERFACE_TO_USE 4L\r
-\r
-/* The address of an echo server that will be used by the two demo echo client\r
-tasks.\r
-http://www.freertos.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/TCP_Echo_Clients.html\r
-http://www.freertos.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/UDP_Echo_Clients.html */\r
-#define configECHO_SERVER_ADDR0        192\r
-#define configECHO_SERVER_ADDR1 168\r
-#define configECHO_SERVER_ADDR2 0\r
-#define configECHO_SERVER_ADDR3 11\r
-\r
-/* Default MAC address configuration.  The demo creates a virtual network\r
-connection that uses this MAC address by accessing the raw Ethernet/WiFi data\r
-to and from a real network connection on the host PC.  See the\r
-configNETWORK_INTERFACE_TO_USE definition above for information on how to\r
-configure the real network connection to use. */\r
-#define configMAC_ADDR0                0x00\r
-#define configMAC_ADDR1                0x11\r
-#define configMAC_ADDR2                0x22\r
-#define configMAC_ADDR3                0x33\r
-#define configMAC_ADDR4                0x44\r
-#define configMAC_ADDR5                0x41\r
-\r
-/* Default IP address configuration.  Used in ipconfigUSE_DNS is set to 0, or\r
-ipconfigUSE_DNS is set to 1 but a DNS server cannot be contacted. */\r
-#define configIP_ADDR0         10\r
-#define configIP_ADDR1         10\r
-#define configIP_ADDR2         10\r
-#define configIP_ADDR3         200\r
-\r
-/* Default gateway IP address configuration.  Used in ipconfigUSE_DNS is set to\r
-0, or ipconfigUSE_DNS is set to 1 but a DNS server cannot be contacted. */\r
-#define configGATEWAY_ADDR0    10\r
-#define configGATEWAY_ADDR1    10\r
-#define configGATEWAY_ADDR2    10\r
-#define configGATEWAY_ADDR3    1\r
-\r
-/* Default DNS server configuration.  OpenDNS addresses are 208.67.222.222 and\r
-208.67.220.220.  Used in ipconfigUSE_DNS is set to 0, or ipconfigUSE_DNS is set\r
-to 1 but a DNS server cannot be contacted.*/\r
-#define configDNS_SERVER_ADDR0         208\r
-#define configDNS_SERVER_ADDR1         67\r
-#define configDNS_SERVER_ADDR2         222\r
-#define configDNS_SERVER_ADDR3         222\r
-\r
-/* Default netmask configuration.  Used in ipconfigUSE_DNS is set to 0, or\r
-ipconfigUSE_DNS is set to 1 but a DNS server cannot be contacted. */\r
-#define configNET_MASK0                255\r
-#define configNET_MASK1                0\r
-#define configNET_MASK2                0\r
-#define configNET_MASK3                0\r
-\r
-/* The UDP port to which print messages are sent. */\r
-#define configPRINT_PORT       ( 15000 )\r
-\r
-#if( defined( _MSC_VER ) && ( _MSC_VER <= 1600 ) && !defined( snprintf ) )\r
-       /* Map to Windows names. */\r
-       #define snprintf        _snprintf\r
-       #define vsnprintf       _vsnprintf\r
-#endif\r
-\r
-/* Visual studio does not have an implementation of strcasecmp(). */\r
-#define strcasecmp _stricmp\r
-#define strncasecmp _strnicmp\r
-#define strcmpi _strcmpi\r
-\r
-#define configPRINTF( X )    printf X\r
-\r
-#endif /* FREERTOS_CONFIG_H */\r
-\r
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/FreeRTOSIPConfig.h b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/FreeRTOSIPConfig.h
deleted file mode 100644 (file)
index 7092fca..0000000
+++ /dev/null
@@ -1,307 +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
-/*****************************************************************************\r
- *\r
- * See the following URL for configuration information.\r
- * http://www.freertos.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/TCP_IP_Configuration.html\r
- *\r
- *****************************************************************************/\r
-\r
-#ifndef FREERTOS_IP_CONFIG_H\r
-#define FREERTOS_IP_CONFIG_H\r
-\r
-/* Prototype for the function used to print out.  In this case it prints to the\r
-console before the network is connected then a UDP port after the network has\r
-connected. */\r
-extern void vLoggingPrintf( const char *pcFormatString, ... );\r
-\r
-/* Set to 1 to print out debug messages.  If ipconfigHAS_DEBUG_PRINTF is set to\r
-1 then FreeRTOS_debug_printf should be defined to the function used to print\r
-out the debugging messages. */\r
-#define ipconfigHAS_DEBUG_PRINTF       0\r
-#if( ipconfigHAS_DEBUG_PRINTF == 1 )\r
-       #define FreeRTOS_debug_printf(X)        vLoggingPrintf X\r
-#endif\r
-\r
-/* Set to 1 to print out non debugging messages, for example the output of the\r
-FreeRTOS_netstat() command, and ping replies.  If ipconfigHAS_PRINTF is set to 1\r
-then FreeRTOS_printf should be set to the function used to print out the\r
-messages. */\r
-#define ipconfigHAS_PRINTF                     0\r
-#if( ipconfigHAS_PRINTF == 1 )\r
-       #define FreeRTOS_printf(X)                      vLoggingPrintf X\r
-#endif\r
-\r
-/* Define the byte order of the target MCU (the MCU FreeRTOS+TCP is executing\r
-on).  Valid options are pdFREERTOS_BIG_ENDIAN and pdFREERTOS_LITTLE_ENDIAN. */\r
-#define ipconfigBYTE_ORDER pdFREERTOS_LITTLE_ENDIAN\r
-\r
-/* If the network card/driver includes checksum offloading (IP/TCP/UDP checksums)\r
-then set ipconfigDRIVER_INCLUDED_RX_IP_CHECKSUM to 1 to prevent the software\r
-stack repeating the checksum calculations. */\r
-#define ipconfigDRIVER_INCLUDED_RX_IP_CHECKSUM   1\r
-\r
-/* Several API's will block until the result is known, or the action has been\r
-performed, for example FreeRTOS_send() and FreeRTOS_recv().  The timeouts can be\r
-set per socket, using setsockopt().  If not set, the times below will be\r
-used as defaults. */\r
-#define ipconfigSOCK_DEFAULT_RECEIVE_BLOCK_TIME        ( 5000 )\r
-#define        ipconfigSOCK_DEFAULT_SEND_BLOCK_TIME    ( 5000 )\r
-\r
-/* Include support for LLMNR: Link-local Multicast Name Resolution\r
-(non-Microsoft) */\r
-#define ipconfigUSE_LLMNR                                      ( 0 )\r
-\r
-/* Include support for NBNS: NetBIOS Name Service (Microsoft) */\r
-#define ipconfigUSE_NBNS                                       ( 0 )\r
-\r
-/* Include support for DNS caching.  For TCP, having a small DNS cache is very\r
-useful.  When a cache is present, ipconfigDNS_REQUEST_ATTEMPTS can be kept low\r
-and also DNS may use small timeouts.  If a DNS reply comes in after the DNS\r
-socket has been destroyed, the result will be stored into the cache.  The next\r
-call to FreeRTOS_gethostbyname() will return immediately, without even creating\r
-a socket. */\r
-#define ipconfigUSE_DNS_CACHE                          ( 1 )\r
-#define ipconfigDNS_CACHE_NAME_LENGTH          ( 16 )\r
-#define ipconfigDNS_CACHE_ENTRIES                      ( 4 )\r
-#define ipconfigDNS_REQUEST_ATTEMPTS           ( 2 )\r
-\r
-/* The IP stack executes it its own task (although any application task can make\r
-use of its services through the published sockets API). ipconfigUDP_TASK_PRIORITY\r
-sets the priority of the task that executes the IP stack.  The priority is a\r
-standard FreeRTOS task priority so can take any value from 0 (the lowest\r
-priority) to (configMAX_PRIORITIES - 1) (the highest priority).\r
-configMAX_PRIORITIES is a standard FreeRTOS configuration parameter defined in\r
-FreeRTOSConfig.h, not FreeRTOSIPConfig.h. Consideration needs to be given as to\r
-the priority assigned to the task executing the IP stack relative to the\r
-priority assigned to tasks that use the IP stack. */\r
-#define ipconfigIP_TASK_PRIORITY                       ( configMAX_PRIORITIES - 2 )\r
-\r
-/* The size, in words (not bytes), of the stack allocated to the FreeRTOS+TCP\r
-task.  This setting is less important when the FreeRTOS Win32 simulator is used\r
-as the Win32 simulator only stores a fixed amount of information on the task\r
-stack.  FreeRTOS includes optional stack overflow detection, see:\r
-http://www.freertos.org/Stacks-and-stack-overflow-checking.html */\r
-#define ipconfigIP_TASK_STACK_SIZE_WORDS       ( configMINIMAL_STACK_SIZE * 5 )\r
-\r
-/* ipconfigRAND32() is called by the IP stack to generate random numbers for\r
-things such as a DHCP transaction number or initial sequence number.  Random\r
-number generation is performed via this macro to allow applications to use their\r
-own random number generation method.  For example, it might be possible to\r
-generate a random number by sampling noise on an analogue input. */\r
-extern UBaseType_t uxRand();\r
-#define ipconfigRAND32()       uxRand()\r
-\r
-/* If ipconfigUSE_NETWORK_EVENT_HOOK is set to 1 then FreeRTOS+TCP will call the\r
-network event hook at the appropriate times.  If ipconfigUSE_NETWORK_EVENT_HOOK\r
-is not set to 1 then the network event hook will never be called.  See\r
-http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_UDP/API/vApplicationIPNetworkEventHook.shtml\r
-*/\r
-#define ipconfigUSE_NETWORK_EVENT_HOOK 1\r
-\r
-/* Sockets have a send block time attribute.  If FreeRTOS_sendto() is called but\r
-a network buffer cannot be obtained then the calling task is held in the Blocked\r
-state (so other tasks can continue to executed) until either a network buffer\r
-becomes available or the send block time expires.  If the send block time expires\r
-then the send operation is aborted.  The maximum allowable send block time is\r
-capped to the value set by ipconfigMAX_SEND_BLOCK_TIME_TICKS.  Capping the\r
-maximum allowable send block time prevents prevents a deadlock occurring when\r
-all the network buffers are in use and the tasks that process (and subsequently\r
-free) the network buffers are themselves blocked waiting for a network buffer.\r
-ipconfigMAX_SEND_BLOCK_TIME_TICKS is specified in RTOS ticks.  A time in\r
-milliseconds can be converted to a time in ticks by dividing the time in\r
-milliseconds by portTICK_PERIOD_MS. */\r
-#define ipconfigUDP_MAX_SEND_BLOCK_TIME_TICKS ( 5000 / portTICK_PERIOD_MS )\r
-\r
-/* If ipconfigUSE_DHCP is 1 then FreeRTOS+TCP will attempt to retrieve an IP\r
-address, netmask, DNS server address and gateway address from a DHCP server.  If\r
-ipconfigUSE_DHCP is 0 then FreeRTOS+TCP will use a static IP address.  The\r
-stack will revert to using the static IP address even when ipconfigUSE_DHCP is\r
-set to 1 if a valid configuration cannot be obtained from a DHCP server for any\r
-reason.  The static configuration used is that passed into the stack by the\r
-FreeRTOS_IPInit() function call. */\r
-#define ipconfigUSE_DHCP       0\r
-\r
-/* When ipconfigUSE_DHCP is set to 1, DHCP requests will be sent out at\r
-increasing time intervals until either a reply is received from a DHCP server\r
-and accepted, or the interval between transmissions reaches\r
-ipconfigMAXIMUM_DISCOVER_TX_PERIOD.  The IP stack will revert to using the\r
-static IP address passed as a parameter to FreeRTOS_IPInit() if the\r
-re-transmission time interval reaches ipconfigMAXIMUM_DISCOVER_TX_PERIOD without\r
-a DHCP reply being received. */\r
-#define ipconfigMAXIMUM_DISCOVER_TX_PERIOD             ( 120000 / portTICK_PERIOD_MS )\r
-\r
-/* The ARP cache is a table that maps IP addresses to MAC addresses.  The IP\r
-stack can only send a UDP message to a remove IP address if it knowns the MAC\r
-address associated with the IP address, or the MAC address of the router used to\r
-contact the remote IP address.  When a UDP message is received from a remote IP\r
-address the MAC address and IP address are added to the ARP cache.  When a UDP\r
-message is sent to a remote IP address that does not already appear in the ARP\r
-cache then the UDP message is replaced by a ARP message that solicits the\r
-required MAC address information.  ipconfigARP_CACHE_ENTRIES defines the maximum\r
-number of entries that can exist in the ARP table at any one time. */\r
-#define ipconfigARP_CACHE_ENTRIES              6\r
-\r
-/* ARP requests that do not result in an ARP response will be re-transmitted a\r
-maximum of ipconfigMAX_ARP_RETRANSMISSIONS times before the ARP request is\r
-aborted. */\r
-#define ipconfigMAX_ARP_RETRANSMISSIONS ( 5 )\r
-\r
-/* ipconfigMAX_ARP_AGE defines the maximum time between an entry in the ARP\r
-table being created or refreshed and the entry being removed because it is stale.\r
-New ARP requests are sent for ARP cache entries that are nearing their maximum\r
-age.  ipconfigMAX_ARP_AGE is specified in tens of seconds, so a value of 150 is\r
-equal to 1500 seconds (or 25 minutes). */\r
-#define ipconfigMAX_ARP_AGE                    150\r
-\r
-/* Implementing FreeRTOS_inet_addr() necessitates the use of string handling\r
-routines, which are relatively large.  To save code space the full\r
-FreeRTOS_inet_addr() implementation is made optional, and a smaller and faster\r
-alternative called FreeRTOS_inet_addr_quick() is provided.  FreeRTOS_inet_addr()\r
-takes an IP in decimal dot format (for example, "192.168.0.1") as its parameter.\r
-FreeRTOS_inet_addr_quick() takes an IP address as four separate numerical octets\r
-(for example, 192, 168, 0, 1) as its parameters.  If\r
-ipconfigINCLUDE_FULL_INET_ADDR is set to 1 then both FreeRTOS_inet_addr() and\r
-FreeRTOS_indet_addr_quick() are available.  If ipconfigINCLUDE_FULL_INET_ADDR is\r
-not set to 1 then only FreeRTOS_indet_addr_quick() is available. */\r
-#define ipconfigINCLUDE_FULL_INET_ADDR 1\r
-\r
-/* ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS defines the total number of network buffer that\r
-are available to the IP stack.  The total number of network buffers is limited\r
-to ensure the total amount of RAM that can be consumed by the IP stack is capped\r
-to a pre-determinable value. */\r
-#define ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS         60\r
-\r
-/* A FreeRTOS queue is used to send events from application tasks to the IP\r
-stack.  ipconfigEVENT_QUEUE_LENGTH sets the maximum number of events that can\r
-be queued for processing at any one time.  The event queue must be a minimum of\r
-5 greater than the total number of network buffers. */\r
-#define ipconfigEVENT_QUEUE_LENGTH             ( ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS + 5 )\r
-\r
-/* The address of a socket is the combination of its IP address and its port\r
-number.  FreeRTOS_bind() is used to manually allocate a port number to a socket\r
-(to 'bind' the socket to a port), but manual binding is not normally necessary\r
-for client sockets (those sockets that initiate outgoing connections rather than\r
-wait for incoming connections on a known port number).  If\r
-ipconfigALLOW_SOCKET_SEND_WITHOUT_BIND is set to 1 then calling\r
-FreeRTOS_sendto() on a socket that has not yet been bound will result in the IP\r
-stack automatically binding the socket to a port number from the range\r
-socketAUTO_PORT_ALLOCATION_START_NUMBER to 0xffff.  If\r
-ipconfigALLOW_SOCKET_SEND_WITHOUT_BIND is set to 0 then calling FreeRTOS_sendto()\r
-on a socket that has not yet been bound will result in the send operation being\r
-aborted. */\r
-#define ipconfigALLOW_SOCKET_SEND_WITHOUT_BIND 1\r
-\r
-/* Defines the Time To Live (TTL) values used in outgoing UDP packets. */\r
-#define ipconfigUDP_TIME_TO_LIVE               128\r
-#define ipconfigTCP_TIME_TO_LIVE               128 /* also defined in FreeRTOSIPConfigDefaults.h */\r
-\r
-/* USE_TCP: Use TCP and all its features */\r
-#define ipconfigUSE_TCP                                ( 1 )\r
-\r
-/* USE_WIN: Let TCP use windowing mechanism. */\r
-#define ipconfigUSE_TCP_WIN                    ( 1 )\r
-\r
-/* The MTU is the maximum number of bytes the payload of a network frame can\r
-contain.  For normal Ethernet V2 frames the maximum MTU is 1500.  Setting a\r
-lower value can save RAM, depending on the buffer management scheme used.  If\r
-ipconfigCAN_FRAGMENT_OUTGOING_PACKETS is 1 then (ipconfigNETWORK_MTU - 28) must\r
-be divisible by 8. */\r
-#define ipconfigNETWORK_MTU            1200\r
-\r
-/* Set ipconfigUSE_DNS to 1 to include a basic DNS client/resolver.  DNS is used\r
-through the FreeRTOS_gethostbyname() API function. */\r
-#define ipconfigUSE_DNS                        1\r
-\r
-/* If ipconfigREPLY_TO_INCOMING_PINGS is set to 1 then the IP stack will\r
-generate replies to incoming ICMP echo (ping) requests. */\r
-#define ipconfigREPLY_TO_INCOMING_PINGS                                1\r
-\r
-/* If ipconfigSUPPORT_OUTGOING_PINGS is set to 1 then the\r
-FreeRTOS_SendPingRequest() API function is available. */\r
-#define ipconfigSUPPORT_OUTGOING_PINGS                         0\r
-\r
-/* If ipconfigSUPPORT_SELECT_FUNCTION is set to 1 then the FreeRTOS_select()\r
-(and associated) API function is available. */\r
-#define ipconfigSUPPORT_SELECT_FUNCTION                                1\r
-\r
-/* If ipconfigFILTER_OUT_NON_ETHERNET_II_FRAMES is set to 1 then Ethernet frames\r
-that are not in Ethernet II format will be dropped.  This option is included for\r
-potential future IP stack developments. */\r
-#define ipconfigFILTER_OUT_NON_ETHERNET_II_FRAMES  1\r
-\r
-/* If ipconfigETHERNET_DRIVER_FILTERS_FRAME_TYPES is set to 1 then it is the\r
-responsibility of the Ethernet interface to filter out packets that are of no\r
-interest.  If the Ethernet interface does not implement this functionality, then\r
-set ipconfigETHERNET_DRIVER_FILTERS_FRAME_TYPES to 0 to have the IP stack\r
-perform the filtering instead (it is much less efficient for the stack to do it\r
-because the packet will already have been passed into the stack).  If the\r
-Ethernet driver does all the necessary filtering in hardware then software\r
-filtering can be removed by using a value other than 1 or 0. */\r
-#define ipconfigETHERNET_DRIVER_FILTERS_FRAME_TYPES    1\r
-\r
-/* The windows simulator cannot really simulate MAC interrupts, and needs to\r
-block occasionally to allow other tasks to run. */\r
-#define configWINDOWS_MAC_INTERRUPT_SIMULATOR_DELAY ( 20 / portTICK_PERIOD_MS )\r
-\r
-/* Advanced only: in order to access 32-bit fields in the IP packets with\r
-32-bit memory instructions, all packets will be stored 32-bit-aligned, plus 16-bits.\r
-This has to do with the contents of the IP-packets: all 32-bit fields are\r
-32-bit-aligned, plus 16-bit(!) */\r
-#define ipconfigPACKET_FILLER_SIZE 2\r
-\r
-/* Define the size of the pool of TCP window descriptors.  On the average, each\r
-TCP socket will use up to 2 x 6 descriptors, meaning that it can have 2 x 6\r
-outstanding packets (for Rx and Tx).  When using up to 10 TP sockets\r
-simultaneously, one could define TCP_WIN_SEG_COUNT as 120. */\r
-#define ipconfigTCP_WIN_SEG_COUNT              240\r
-\r
-/* Each TCP socket has a circular buffers for Rx and Tx, which have a fixed\r
-maximum size.  Define the size of Rx buffer for TCP sockets. */\r
-#define ipconfigTCP_RX_BUFFER_LENGTH                   ( 1000 )\r
-\r
-/* Define the size of Tx buffer for TCP sockets. */\r
-#define ipconfigTCP_TX_BUFFER_LENGTH                   ( 1000 )\r
-\r
-/* When using call-back handlers, the driver may check if the handler points to\r
-real program memory (RAM or flash) or just has a random non-zero value. */\r
-#define ipconfigIS_VALID_PROG_ADDRESS(x) ( (x) != NULL )\r
-\r
-/* Include support for TCP hang protection.  All sockets in a connecting or\r
-disconnecting stage will timeout after a period of non-activity. */\r
-#define ipconfigTCP_HANG_PROTECTION                    ( 1 )\r
-#define ipconfigTCP_HANG_PROTECTION_TIME       ( 30 )\r
-\r
-/* Include support for TCP keep-alive messages. */\r
-#define ipconfigTCP_KEEP_ALIVE                         ( 1 )\r
-#define ipconfigTCP_KEEP_ALIVE_INTERVAL                ( 20 ) /* in seconds */\r
-\r
-#define portINLINE __inline\r
-\r
-#endif /* FREERTOS_IP_CONFIG_H */\r
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/READ_ME_INSTRUCTIONS.url b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/READ_ME_INSTRUCTIONS.url
deleted file mode 100644 (file)
index c00147b..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-[{000214A0-0000-0000-C000-000000000046}]\r
-Prop3=19,11\r
-[InternetShortcut]\r
-IDList=\r
-URL=https://www.freertos.org/task-pool/\r
-HotKey=0\r
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WIN32.vcxproj b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WIN32.vcxproj
deleted file mode 100644 (file)
index 7f9596a..0000000
+++ /dev/null
@@ -1,210 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup Label="ProjectConfigurations">\r
-    <ProjectConfiguration Include="Debug|Win32">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|Win32">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-  </ItemGroup>\r
-  <PropertyGroup Label="Globals">\r
-    <ProjectGuid>{C686325E-3261-42F7-AEB1-DDE5280E1CEB}</ProjectGuid>\r
-    <ProjectName>RTOSDemo</ProjectName>\r
-    <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <UseOfMfc>false</UseOfMfc>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v142</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <UseOfMfc>false</UseOfMfc>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v142</PlatformToolset>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
-  <ImportGroup Label="ExtensionSettings">\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props" />\r
-  </ImportGroup>\r
-  <PropertyGroup Label="UserMacros" />\r
-  <PropertyGroup>\r
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\Debug\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\Debug\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\Release\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\Release\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
-    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
-  </PropertyGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
-    <Midl>\r
-      <TypeLibraryName>.\Debug/WIN32.tlb</TypeLibraryName>\r
-      <HeaderFileName>\r
-      </HeaderFileName>\r
-    </Midl>\r
-    <ClCompile>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>..\..\..\Source\FreeRTOS-Plus-TCP\include;..\..\..\Source\FreeRTOS-Plus-TCP\portable\BufferManagement;..\..\..\Source\FreeRTOS-Plus-TCP\portable\Compiler\MSVC;.\DemoTasks\include;.\WinPCap;..\..\..\..\FreeRTOS\Source\include;..\..\..\..\FreeRTOS\Source\portable\MSVC-MingW;..\..\..\Source\FreeRTOS-IoT-Libraries\c_sdk\standard\common\include;..\..\..\Source\FreeRTOS-IoT-Libraries\abstractions\platform\include;..\..\..\Source\FreeRTOS-IoT-Libraries\abstractions\platform\freertos\include;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;WINVER=0x400;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <PrecompiledHeaderOutputFile>.\Debug/WIN32.pch</PrecompiledHeaderOutputFile>\r
-      <AssemblerListingLocation>.\Debug/</AssemblerListingLocation>\r
-      <ObjectFileName>.\Debug/</ObjectFileName>\r
-      <ProgramDataBaseFileName>.\Debug/</ProgramDataBaseFileName>\r
-      <WarningLevel>Level4</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <DisableLanguageExtensions>false</DisableLanguageExtensions>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-      <AdditionalOptions>/wd4210 /wd4127 /wd4214 /wd4201 /wd4244  /wd4310 %(AdditionalOptions)</AdditionalOptions>\r
-      <BrowseInformation>true</BrowseInformation>\r
-      <PrecompiledHeader>NotUsing</PrecompiledHeader>\r
-      <ExceptionHandling>false</ExceptionHandling>\r
-      <CompileAs>CompileAsC</CompileAs>\r
-    </ClCompile>\r
-    <ResourceCompile>\r
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <Culture>0x0c09</Culture>\r
-    </ResourceCompile>\r
-    <Link>\r
-      <OutputFile>.\Debug/RTOSDemo.exe</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <ProgramDatabaseFile>.\Debug/WIN32.pdb</ProgramDatabaseFile>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <AdditionalDependencies>wpcap.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>.\WinPCap</AdditionalLibraryDirectories>\r
-      <Profile>false</Profile>\r
-      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>\r
-    </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>.\Debug/WIN32.bsc</OutputFile>\r
-    </Bscmake>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
-    <Midl>\r
-      <TypeLibraryName>.\Release/WIN32.tlb</TypeLibraryName>\r
-      <HeaderFileName>\r
-      </HeaderFileName>\r
-    </Midl>\r
-    <ClCompile>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
-      <PreprocessorDefinitions>_WINSOCKAPI_;WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeaderOutputFile>.\Release/WIN32.pch</PrecompiledHeaderOutputFile>\r
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>\r
-      <ObjectFileName>.\Release/</ObjectFileName>\r
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <AdditionalIncludeDirectories>..\Common\Utils;..\Common\ethernet\lwip-1.4.0\ports\win32\WinPCap;..\Common\ethernet\lwip-1.4.0\src\include\ipv4;..\Common\ethernet\lwip-1.4.0\src\include;..\..\..\Source\include;..\..\..\Source\portable\MSVC-MingW;..\Common\ethernet\lwip-1.4.0\ports\win32\include;..\Common\Include;.\lwIP_Apps;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-    </ClCompile>\r
-    <ResourceCompile>\r
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <Culture>0x0c09</Culture>\r
-    </ResourceCompile>\r
-    <Link>\r
-      <OutputFile>.\Release/RTOSDemo.exe</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <ProgramDatabaseFile>.\Release/WIN32.pdb</ProgramDatabaseFile>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <AdditionalLibraryDirectories>..\Common\ethernet\lwip-1.4.0\ports\win32\WinPCap</AdditionalLibraryDirectories>\r
-      <AdditionalDependencies>wpcap.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-    </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>.\Release/WIN32.bsc</OutputFile>\r
-    </Bscmake>\r
-  </ItemDefinitionGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\..\FreeRTOS\Source\event_groups.c" />\r
-    <ClCompile Include="..\..\..\..\FreeRTOS\Source\list.c" />\r
-    <ClCompile Include="..\..\..\..\FreeRTOS\Source\portable\MemMang\heap_4.c" />\r
-    <ClCompile Include="..\..\..\..\FreeRTOS\Source\portable\MSVC-MingW\port.c" />\r
-    <ClCompile Include="..\..\..\..\FreeRTOS\Source\queue.c" />\r
-    <ClCompile Include="..\..\..\..\FreeRTOS\Source\tasks.c" />\r
-    <ClCompile Include="..\..\..\..\FreeRTOS\Source\timers.c" />\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-IoT-Libraries\abstractions\platform\freertos\iot_clock_freertos.c" />\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-IoT-Libraries\c_sdk\standard\common\logging\iot_logging.c" />\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-IoT-Libraries\c_sdk\standard\common\taskpool\iot_taskpool.c" />\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-Plus-TCP\FreeRTOS_ARP.c" />\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-Plus-TCP\FreeRTOS_DHCP.c" />\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-Plus-TCP\FreeRTOS_DNS.c" />\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-Plus-TCP\FreeRTOS_IP.c" />\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-Plus-TCP\FreeRTOS_Sockets.c" />\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-Plus-TCP\FreeRTOS_Stream_Buffer.c" />\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-Plus-TCP\FreeRTOS_TCP_IP.c" />\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-Plus-TCP\FreeRTOS_TCP_WIN.c" />\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-Plus-TCP\FreeRTOS_UDP_IP.c" />\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-Plus-TCP\portable\BufferManagement\BufferAllocation_2.c" />\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-Plus-TCP\portable\NetworkInterface\WinPCap\NetworkInterface.c" />\r
-    <ClCompile Include="DemoTasks\SimpleTaskPoolExamples.c" />\r
-    <ClCompile Include="DemoTasks\SimpleUDPClientAndServer.c" />\r
-    <ClCompile Include="demo_logging.c" />\r
-    <ClCompile Include="main.c">\r
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-    </ClCompile>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\..\FreeRTOS\Source\include\event_groups.h" />\r
-    <ClInclude Include="..\..\..\..\FreeRTOS\Source\include\FreeRTOS.h" />\r
-    <ClInclude Include="..\..\..\..\FreeRTOS\Source\include\portable.h" />\r
-    <ClInclude Include="..\..\..\..\FreeRTOS\Source\include\projdefs.h" />\r
-    <ClInclude Include="..\..\..\..\FreeRTOS\Source\include\queue.h" />\r
-    <ClInclude Include="..\..\..\..\FreeRTOS\Source\include\semphr.h" />\r
-    <ClInclude Include="..\..\..\..\FreeRTOS\Source\include\task.h" />\r
-    <ClInclude Include="..\..\..\..\FreeRTOS\Source\include\timers.h" />\r
-    <ClInclude Include="..\..\..\..\FreeRTOS\Source\portable\MSVC-MingW\portmacro.h" />\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-IoT-Libraries\abstractions\platform\freertos\include\platform\iot_platform_types_freertos.h" />\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-IoT-Libraries\abstractions\platform\include\types\iot_platform_types.h" />\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-IoT-Libraries\c_sdk\standard\common\include\iot_taskpool.h" />\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-IoT-Libraries\c_sdk\standard\common\include\private\iot_error.h" />\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-IoT-Libraries\c_sdk\standard\common\include\private\iot_logging.h" />\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-IoT-Libraries\c_sdk\standard\common\include\private\iot_static_memory.h" />\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-IoT-Libraries\c_sdk\standard\common\include\private\iot_taskpool_internal.h" />\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-IoT-Libraries\c_sdk\standard\common\include\types\iot_taskpool_types.h" />\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-Plus-TCP\include\FreeRTOSIPConfigDefaults.h" />\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-Plus-TCP\include\FreeRTOS_ARP.h" />\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-Plus-TCP\include\FreeRTOS_DHCP.h" />\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-Plus-TCP\include\FreeRTOS_DNS.h" />\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-Plus-TCP\include\FreeRTOS_IP.h" />\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-Plus-TCP\include\FreeRTOS_IP_Private.h" />\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-Plus-TCP\include\FreeRTOS_Sockets.h" />\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-Plus-TCP\include\FreeRTOS_Stream_Buffer.h" />\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-Plus-TCP\include\FreeRTOS_TCP_IP.h" />\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-Plus-TCP\include\FreeRTOS_TCP_WIN.h" />\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-Plus-TCP\include\FreeRTOS_UDP_IP.h" />\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-Plus-TCP\include\IPTraceMacroDefaults.h" />\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-Plus-TCP\include\NetworkBufferManagement.h" />\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-Plus-TCP\include\NetworkInterface.h" />\r
-    <ClInclude Include="FreeRTOSConfig.h" />\r
-    <ClInclude Include="FreeRTOSIPConfig.h" />\r
-    <ClInclude Include="iot_config.h" />\r
-    <ClInclude Include="iot_config_common.h" />\r
-  </ItemGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
-  <ImportGroup Label="ExtensionTargets">\r
-  </ImportGroup>\r
-</Project>
\ No newline at end of file
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WIN32.vcxproj.filters b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WIN32.vcxproj.filters
deleted file mode 100644 (file)
index 3653a6c..0000000
+++ /dev/null
@@ -1,260 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup>\r
-    <Filter Include="Resource Files">\r
-      <UniqueIdentifier>{38712199-cebf-4124-bf15-398f7c3419ea}</UniqueIdentifier>\r
-      <Extensions>ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe</Extensions>\r
-    </Filter>\r
-    <Filter Include="FreeRTOS">\r
-      <UniqueIdentifier>{af3445a1-4908-4170-89ed-39345d90d30c}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="FreeRTOS\Source">\r
-      <UniqueIdentifier>{f32be356-4763-4cae-9020-974a2638cb08}</UniqueIdentifier>\r
-      <Extensions>*.c</Extensions>\r
-    </Filter>\r
-    <Filter Include="FreeRTOS\Source\Portable">\r
-      <UniqueIdentifier>{88f409e6-d396-4ac5-94bd-7a99c914be46}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="FreeRTOS+">\r
-      <UniqueIdentifier>{e5ad4ec7-23dc-4295-8add-2acaee488f5a}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="FreeRTOS\Source\include">\r
-      <UniqueIdentifier>{d2dcd641-8d91-492b-852f-5563ffadaec6}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="FreeRTOS+\FreeRTOS+TCP">\r
-      <UniqueIdentifier>{8672fa26-b119-481f-8b8d-086419c01a3e}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="FreeRTOS+\FreeRTOS+TCP\portable">\r
-      <UniqueIdentifier>{4570be11-ec96-4b55-ac58-24b50ada980a}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="FreeRTOS+\FreeRTOS+TCP\include">\r
-      <UniqueIdentifier>{5d93ed51-023a-41ad-9243-8d230165d34b}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="DemoTasks">\r
-      <UniqueIdentifier>{b71e974a-9f28-4815-972b-d930ba8a34d0}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="FreeRTOS+\FreeRTOS IoT Libraries">\r
-      <UniqueIdentifier>{60717407-397f-4ea5-8492-3314acdd25f0}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="FreeRTOS+\FreeRTOS IoT Libraries\standard">\r
-      <UniqueIdentifier>{8a90222f-d723-4b4e-8e6e-c57afaf7fa92}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="FreeRTOS+\FreeRTOS IoT Libraries\standard\common">\r
-      <UniqueIdentifier>{7c995f05-2a10-4771-ad77-18a755876e46}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="FreeRTOS+\FreeRTOS IoT Libraries\standard\common\task_pool">\r
-      <UniqueIdentifier>{e07288b6-a8e7-416a-947d-7f0260673dcc}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="FreeRTOS+\FreeRTOS IoT Libraries\standard\common\include">\r
-      <UniqueIdentifier>{9a636cc3-ebc6-48c5-8c18-c72494686e81}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="FreeRTOS+\FreeRTOS IoT Libraries\standard\common\include\private">\r
-      <UniqueIdentifier>{fe53a296-12ec-4819-bf2b-fd9dca2c6e96}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="FreeRTOS+\FreeRTOS IoT Libraries\standard\common\include\types">\r
-      <UniqueIdentifier>{29376c48-bc8b-4624-ad59-16807874c9f2}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="FreeRTOS+\FreeRTOS IoT Libraries\abstractions">\r
-      <UniqueIdentifier>{91ef4008-de51-4b41-ba5e-bf24d8cda378}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="FreeRTOS+\FreeRTOS IoT Libraries\abstractions\platform">\r
-      <UniqueIdentifier>{ade43c6c-04c5-4897-abdb-91af2df04e5d}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="FreeRTOS+\FreeRTOS IoT Libraries\abstractions\platform\freertos">\r
-      <UniqueIdentifier>{08a4e35c-19ca-4b1e-af24-bac368c2bf7b}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="FreeRTOS+\FreeRTOS IoT Libraries\abstractions\platform\include">\r
-      <UniqueIdentifier>{1fc5fc25-c18b-45a2-bad3-0c07795db1e9}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="FreeRTOS+\FreeRTOS IoT Libraries\abstractions\platform\include\platform">\r
-      <UniqueIdentifier>{f3a69e5b-1462-4e19-8651-274e86c252b0}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="FreeRTOS+\FreeRTOS IoT Libraries\abstractions\platform\include\types">\r
-      <UniqueIdentifier>{9a849d9e-91e5-4035-ab4c-70a986c6aed1}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="FreeRTOS+\FreeRTOS IoT Libraries\abstractions\platform\freertos\include">\r
-      <UniqueIdentifier>{1e324500-91b4-4c76-b699-59ba75691760}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="FreeRTOS+\FreeRTOS IoT Libraries\abstractions\platform\freertos\include\platform">\r
-      <UniqueIdentifier>{bdcbc1ec-99b8-4c72-9075-49035c115488}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="FreeRTOS+\FreeRTOS IoT Libraries\abstractions\platform\freertos\include\platform\types">\r
-      <UniqueIdentifier>{35ce7745-52a2-4220-be31-50dfaa35c0ab}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="FreeRTOS+\FreeRTOS IoT Libraries\standard\common\logging">\r
-      <UniqueIdentifier>{6c8bc003-a388-4666-99f4-a31faa932a36}</UniqueIdentifier>\r
-    </Filter>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\..\..\FreeRTOS\Source\portable\MSVC-MingW\port.c">\r
-      <Filter>FreeRTOS\Source\Portable</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\..\FreeRTOS\Source\timers.c">\r
-      <Filter>FreeRTOS\Source</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\..\FreeRTOS\Source\list.c">\r
-      <Filter>FreeRTOS\Source</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\..\FreeRTOS\Source\queue.c">\r
-      <Filter>FreeRTOS\Source</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\..\FreeRTOS\Source\tasks.c">\r
-      <Filter>FreeRTOS\Source</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="DemoTasks\SimpleUDPClientAndServer.c">\r
-      <Filter>DemoTasks</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-Plus-TCP\FreeRTOS_UDP_IP.c">\r
-      <Filter>FreeRTOS+\FreeRTOS+TCP</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-Plus-TCP\FreeRTOS_DHCP.c">\r
-      <Filter>FreeRTOS+\FreeRTOS+TCP</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-Plus-TCP\FreeRTOS_DNS.c">\r
-      <Filter>FreeRTOS+\FreeRTOS+TCP</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-Plus-TCP\FreeRTOS_Sockets.c">\r
-      <Filter>FreeRTOS+\FreeRTOS+TCP</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-Plus-TCP\portable\BufferManagement\BufferAllocation_2.c">\r
-      <Filter>FreeRTOS+\FreeRTOS+TCP\portable</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-Plus-TCP\portable\NetworkInterface\WinPCap\NetworkInterface.c">\r
-      <Filter>FreeRTOS+\FreeRTOS+TCP\portable</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-Plus-TCP\FreeRTOS_ARP.c">\r
-      <Filter>FreeRTOS+\FreeRTOS+TCP</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-Plus-TCP\FreeRTOS_IP.c">\r
-      <Filter>FreeRTOS+\FreeRTOS+TCP</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-Plus-TCP\FreeRTOS_TCP_IP.c">\r
-      <Filter>FreeRTOS+\FreeRTOS+TCP</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-Plus-TCP\FreeRTOS_TCP_WIN.c">\r
-      <Filter>FreeRTOS+\FreeRTOS+TCP</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\..\FreeRTOS\Source\event_groups.c">\r
-      <Filter>FreeRTOS\Source</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\..\FreeRTOS\Source\portable\MemMang\heap_4.c">\r
-      <Filter>FreeRTOS\Source\Portable</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="main.c" />\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-Plus-TCP\FreeRTOS_Stream_Buffer.c">\r
-      <Filter>FreeRTOS+\FreeRTOS+TCP</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="demo_logging.c" />\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-IoT-Libraries\c_sdk\standard\common\taskpool\iot_taskpool.c">\r
-      <Filter>FreeRTOS+\FreeRTOS IoT Libraries\standard\common\task_pool</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="DemoTasks\SimpleTaskPoolExamples.c">\r
-      <Filter>DemoTasks</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-IoT-Libraries\c_sdk\standard\common\logging\iot_logging.c">\r
-      <Filter>FreeRTOS+\FreeRTOS IoT Libraries\standard\common\logging</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\..\Source\FreeRTOS-IoT-Libraries\abstractions\platform\freertos\iot_clock_freertos.c">\r
-      <Filter>FreeRTOS+\FreeRTOS IoT Libraries\abstractions\platform\freertos</Filter>\r
-    </ClCompile>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-Plus-TCP\include\NetworkInterface.h">\r
-      <Filter>FreeRTOS+\FreeRTOS+TCP\include</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-Plus-TCP\include\FreeRTOS_DNS.h">\r
-      <Filter>FreeRTOS+\FreeRTOS+TCP\include</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-Plus-TCP\include\FreeRTOS_Sockets.h">\r
-      <Filter>FreeRTOS+\FreeRTOS+TCP\include</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-Plus-TCP\include\FreeRTOS_UDP_IP.h">\r
-      <Filter>FreeRTOS+\FreeRTOS+TCP\include</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\..\FreeRTOS\Source\include\timers.h">\r
-      <Filter>FreeRTOS\Source\include</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\..\FreeRTOS\Source\include\event_groups.h">\r
-      <Filter>FreeRTOS\Source\include</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\..\FreeRTOS\Source\include\FreeRTOS.h">\r
-      <Filter>FreeRTOS\Source\include</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\..\FreeRTOS\Source\include\queue.h">\r
-      <Filter>FreeRTOS\Source\include</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\..\FreeRTOS\Source\include\semphr.h">\r
-      <Filter>FreeRTOS\Source\include</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\..\FreeRTOS\Source\include\task.h">\r
-      <Filter>FreeRTOS\Source\include</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\..\FreeRTOS\Source\portable\MSVC-MingW\portmacro.h">\r
-      <Filter>FreeRTOS\Source\include</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-Plus-TCP\include\FreeRTOS_IP_Private.h">\r
-      <Filter>FreeRTOS+\FreeRTOS+TCP\include</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-Plus-TCP\include\NetworkBufferManagement.h">\r
-      <Filter>FreeRTOS+\FreeRTOS+TCP\include</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-Plus-TCP\include\FreeRTOS_ARP.h">\r
-      <Filter>FreeRTOS+\FreeRTOS+TCP\include</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-Plus-TCP\include\FreeRTOS_DHCP.h">\r
-      <Filter>FreeRTOS+\FreeRTOS+TCP\include</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-Plus-TCP\include\FreeRTOS_IP.h">\r
-      <Filter>FreeRTOS+\FreeRTOS+TCP\include</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-Plus-TCP\include\FreeRTOS_TCP_IP.h">\r
-      <Filter>FreeRTOS+\FreeRTOS+TCP\include</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-Plus-TCP\include\FreeRTOS_TCP_WIN.h">\r
-      <Filter>FreeRTOS+\FreeRTOS+TCP\include</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-Plus-TCP\include\FreeRTOSIPConfigDefaults.h">\r
-      <Filter>FreeRTOS+\FreeRTOS+TCP\include</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-Plus-TCP\include\IPTraceMacroDefaults.h">\r
-      <Filter>FreeRTOS+\FreeRTOS+TCP\include</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="FreeRTOSConfig.h" />\r
-    <ClInclude Include="FreeRTOSIPConfig.h" />\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-Plus-TCP\include\FreeRTOS_Stream_Buffer.h">\r
-      <Filter>FreeRTOS+\FreeRTOS+TCP\include</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\..\FreeRTOS\Source\include\portable.h">\r
-      <Filter>FreeRTOS\Source\include</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\..\FreeRTOS\Source\include\projdefs.h">\r
-      <Filter>FreeRTOS\Source\include</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-IoT-Libraries\c_sdk\standard\common\include\iot_taskpool.h">\r
-      <Filter>FreeRTOS+\FreeRTOS IoT Libraries\standard\common\include</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-IoT-Libraries\c_sdk\standard\common\include\types\iot_taskpool_types.h">\r
-      <Filter>FreeRTOS+\FreeRTOS IoT Libraries\standard\common\include\types</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-IoT-Libraries\c_sdk\standard\common\include\private\iot_error.h">\r
-      <Filter>FreeRTOS+\FreeRTOS IoT Libraries\standard\common\include\private</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-IoT-Libraries\c_sdk\standard\common\include\private\iot_logging.h">\r
-      <Filter>FreeRTOS+\FreeRTOS IoT Libraries\standard\common\include\private</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-IoT-Libraries\c_sdk\standard\common\include\private\iot_static_memory.h">\r
-      <Filter>FreeRTOS+\FreeRTOS IoT Libraries\standard\common\include\private</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-IoT-Libraries\c_sdk\standard\common\include\private\iot_taskpool_internal.h">\r
-      <Filter>FreeRTOS+\FreeRTOS IoT Libraries\standard\common\include\private</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="iot_config.h" />\r
-    <ClInclude Include="iot_config_common.h" />\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-IoT-Libraries\abstractions\platform\include\types\iot_platform_types.h">\r
-      <Filter>FreeRTOS+\FreeRTOS IoT Libraries\abstractions\platform\include\types</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\..\Source\FreeRTOS-IoT-Libraries\abstractions\platform\freertos\include\platform\iot_platform_types_freertos.h">\r
-      <Filter>FreeRTOS+\FreeRTOS IoT Libraries\abstractions\platform\freertos\include\platform\types</Filter>\r
-    </ClInclude>\r
-  </ItemGroup>\r
-</Project>
\ No newline at end of file
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WinPCap/Packet32.h b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WinPCap/Packet32.h
deleted file mode 100644 (file)
index 1e0eacd..0000000
+++ /dev/null
@@ -1,359 +0,0 @@
-/*\r
- * Copyright (c) 1999 - 2005 NetGroup, Politecnico di Torino (Italy)\r
- * Copyright (c) 2005 - 2007 CACE Technologies, Davis (California)\r
- * All rights reserved.\r
- *\r
- * Redistribution and use in source and binary forms, with or without\r
- * modification, are permitted provided that the following conditions\r
- * are met:\r
- *\r
- * 1. Redistributions of source code must retain the above copyright\r
- * notice, this list of conditions and the following disclaimer.\r
- * 2. Redistributions in binary form must reproduce the above copyright\r
- * notice, this list of conditions and the following disclaimer in the\r
- * documentation and/or other materials provided with the distribution.\r
- * 3. Neither the name of the Politecnico di Torino, CACE Technologies \r
- * nor the names of its contributors may be used to endorse or promote \r
- * products derived from this software without specific prior written \r
- * permission.\r
- *\r
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
- *\r
- */\r
-\r
-/** @ingroup packetapi\r
- *  @{ \r
- */\r
-\r
-/** @defgroup packet32h Packet.dll definitions and data structures\r
- *  Packet32.h contains the data structures and the definitions used by packet.dll.\r
- *  The file is used both by the Win9x and the WinNTx versions of packet.dll, and can be included\r
- *  by the applications that use the functions of this library\r
- *  @{\r
- */\r
-\r
-#ifndef __PACKET32\r
-#define __PACKET32\r
-\r
-#include <winsock2.h>\r
-\r
-#ifdef HAVE_AIRPCAP_API\r
-#include <airpcap.h>\r
-#else\r
-#if !defined(AIRPCAP_HANDLE__EAE405F5_0171_9592_B3C2_C19EC426AD34__DEFINED_)\r
-#define AIRPCAP_HANDLE__EAE405F5_0171_9592_B3C2_C19EC426AD34__DEFINED_\r
-typedef struct _AirpcapHandle *PAirpcapHandle;\r
-#endif /* AIRPCAP_HANDLE__EAE405F5_0171_9592_B3C2_C19EC426AD34__DEFINED_ */\r
-#endif /* HAVE_AIRPCAP_API */\r
-\r
-#ifdef HAVE_DAG_API\r
-#include <dagc.h>\r
-#endif /* HAVE_DAG_API */\r
-\r
-// Working modes\r
-#define PACKET_MODE_CAPT 0x0 ///< Capture mode\r
-#define PACKET_MODE_STAT 0x1 ///< Statistical mode\r
-#define PACKET_MODE_MON 0x2 ///< Monitoring mode\r
-#define PACKET_MODE_DUMP 0x10 ///< Dump mode\r
-#define PACKET_MODE_STAT_DUMP MODE_DUMP | MODE_STAT ///< Statistical dump Mode\r
-\r
-\r
-/// Alignment macro. Defines the alignment size.\r
-#define Packet_ALIGNMENT sizeof(int)\r
-/// Alignment macro. Rounds up to the next even multiple of Packet_ALIGNMENT. \r
-#define Packet_WORDALIGN(x) (((x)+(Packet_ALIGNMENT-1))&~(Packet_ALIGNMENT-1))\r
-\r
-#define NdisMediumNull -1              ///< Custom linktype: NDIS doesn't provide an equivalent\r
-#define NdisMediumCHDLC        -2              ///< Custom linktype: NDIS doesn't provide an equivalent\r
-#define NdisMediumPPPSerial    -3      ///< Custom linktype: NDIS doesn't provide an equivalent\r
-#define NdisMediumBare80211    -4      ///< Custom linktype: NDIS doesn't provide an equivalent\r
-#define NdisMediumRadio80211   -5      ///< Custom linktype: NDIS doesn't provide an equivalent\r
-#define NdisMediumPpi          -6      ///< Custom linktype: NDIS doesn't provide an equivalent\r
-\r
-// Loopback behaviour definitions\r
-#define NPF_DISABLE_LOOPBACK   1       ///< Drop the packets sent by the NPF driver\r
-#define NPF_ENABLE_LOOPBACK            2       ///< Capture the packets sent by the NPF driver\r
-\r
-/*!\r
-  \brief Network type structure.\r
-\r
-  This structure is used by the PacketGetNetType() function to return information on the current adapter's type and speed.\r
-*/\r
-typedef struct NetType\r
-{\r
-       UINT LinkType;  ///< The MAC of the current network adapter (see function PacketGetNetType() for more information)\r
-       ULONGLONG LinkSpeed;    ///< The speed of the network in bits per second\r
-}NetType;\r
-\r
-\r
-//some definitions stolen from libpcap\r
-\r
-#ifndef BPF_MAJOR_VERSION\r
-\r
-/*!\r
-  \brief A BPF pseudo-assembly program.\r
-\r
-  The program will be injected in the kernel by the PacketSetBPF() function and applied to every incoming packet. \r
-*/\r
-struct bpf_program \r
-{\r
-       UINT bf_len;                            ///< Indicates the number of instructions of the program, i.e. the number of struct bpf_insn that will follow.\r
-       struct bpf_insn *bf_insns;      ///< A pointer to the first instruction of the program.\r
-};\r
-\r
-/*!\r
-  \brief A single BPF pseudo-instruction.\r
-\r
-  bpf_insn contains a single instruction for the BPF register-machine. It is used to send a filter program to the driver.\r
-*/\r
-struct bpf_insn \r
-{\r
-       USHORT  code;           ///< Instruction type and addressing mode.\r
-       UCHAR   jt;                     ///< Jump if true\r
-       UCHAR   jf;                     ///< Jump if false\r
-       int k;                          ///< Generic field used for various purposes.\r
-};\r
-\r
-/*!\r
-  \brief Structure that contains a couple of statistics values on the current capture.\r
-\r
-  It is used by packet.dll to return statistics about a capture session.\r
-*/\r
-struct bpf_stat \r
-{\r
-       UINT bs_recv;           ///< Number of packets that the driver received from the network adapter \r
-                                               ///< from the beginning of the current capture. This value includes the packets \r
-                                               ///< lost by the driver.\r
-       UINT bs_drop;           ///< number of packets that the driver lost from the beginning of a capture. \r
-                                               ///< Basically, a packet is lost when the the buffer of the driver is full. \r
-                                               ///< In this situation the packet cannot be stored and the driver rejects it.\r
-       UINT ps_ifdrop;         ///< drops by interface. XXX not yet supported\r
-       UINT bs_capt;           ///< number of packets that pass the filter, find place in the kernel buffer and\r
-                                               ///< thus reach the application.\r
-};\r
-\r
-/*!\r
-  \brief Packet header.\r
-\r
-  This structure defines the header associated with every packet delivered to the application.\r
-*/\r
-struct bpf_hdr \r
-{\r
-       struct timeval  bh_tstamp;      ///< The timestamp associated with the captured packet. \r
-                                                               ///< It is stored in a TimeVal structure.\r
-       UINT    bh_caplen;                      ///< Length of captured portion. The captured portion <b>can be different</b>\r
-                                                               ///< from the original packet, because it is possible (with a proper filter)\r
-                                                               ///< to instruct the driver to capture only a portion of the packets.\r
-       UINT    bh_datalen;                     ///< Original length of packet\r
-       USHORT          bh_hdrlen;              ///< Length of bpf header (this struct plus alignment padding). In some cases,\r
-                                                               ///< a padding could be added between the end of this structure and the packet\r
-                                                               ///< data for performance reasons. This filed can be used to retrieve the actual data \r
-                                                               ///< of the packet.\r
-};\r
-\r
-/*!\r
-  \brief Dump packet header.\r
-\r
-  This structure defines the header associated with the packets in a buffer to be used with PacketSendPackets().\r
-  It is simpler than the bpf_hdr, because it corresponds to the header associated by WinPcap and libpcap to a\r
-  packet in a dump file. This makes straightforward sending WinPcap dump files to the network.\r
-*/\r
-struct dump_bpf_hdr{\r
-    struct timeval     ts;                     ///< Time stamp of the packet\r
-    UINT                       caplen;         ///< Length of captured portion. The captured portion can smaller than the \r
-                                                               ///< the original packet, because it is possible (with a proper filter) to \r
-                                                               ///< instruct the driver to capture only a portion of the packets. \r
-    UINT                       len;            ///< Length of the original packet (off wire).\r
-};\r
-\r
-\r
-#endif\r
-\r
-struct bpf_stat;\r
-\r
-#define        DOSNAMEPREFIX   TEXT("Packet_") ///< Prefix added to the adapters device names to create the WinPcap devices\r
-#define        MAX_LINK_NAME_LENGTH    64                      //< Maximum length of the devices symbolic links\r
-#define        NMAX_PACKET 65535\r
-\r
-/*!\r
-  \brief Addresses of a network adapter.\r
-\r
-  This structure is used by the PacketGetNetInfoEx() function to return the IP addresses associated with \r
-  an adapter.\r
-*/\r
-typedef struct npf_if_addr {\r
-       struct sockaddr_storage IPAddress;      ///< IP address.\r
-       struct sockaddr_storage SubnetMask;     ///< Netmask for that address.\r
-       struct sockaddr_storage Broadcast;      ///< Broadcast address.\r
-}npf_if_addr;\r
-\r
-\r
-#define ADAPTER_NAME_LENGTH 256 + 12   ///<  Maximum length for the name of an adapter. The value is the same used by the IP Helper API.\r
-#define ADAPTER_DESC_LENGTH 128                        ///<  Maximum length for the description of an adapter. The value is the same used by the IP Helper API.\r
-#define MAX_MAC_ADDR_LENGTH 8                  ///<  Maximum length for the link layer address of an adapter. The value is the same used by the IP Helper API.\r
-#define MAX_NETWORK_ADDRESSES 16               ///<  Maximum length for the link layer address of an adapter. The value is the same used by the IP Helper API.\r
-\r
-\r
-typedef struct WAN_ADAPTER_INT WAN_ADAPTER; ///< Describes an opened wan (dialup, VPN...) network adapter using the NetMon API\r
-typedef WAN_ADAPTER *PWAN_ADAPTER; ///< Describes an opened wan (dialup, VPN...) network adapter using the NetMon API\r
-\r
-#define INFO_FLAG_NDIS_ADAPTER         0       ///< Flag for ADAPTER_INFO: this is a traditional ndis adapter\r
-#define INFO_FLAG_NDISWAN_ADAPTER      1       ///< Flag for ADAPTER_INFO: this is a NdisWan adapter, and it's managed by WANPACKET\r
-#define INFO_FLAG_DAG_CARD                     2       ///< Flag for ADAPTER_INFO: this is a DAG card\r
-#define INFO_FLAG_DAG_FILE                     6       ///< Flag for ADAPTER_INFO: this is a DAG file\r
-#define INFO_FLAG_DONT_EXPORT          8       ///< Flag for ADAPTER_INFO: when this flag is set, the adapter will not be listed or openend by winpcap. This allows to prevent exporting broken network adapters, like for example FireWire ones.\r
-#define INFO_FLAG_AIRPCAP_CARD         16      ///< Flag for ADAPTER_INFO: this is an airpcap card\r
-#define INFO_FLAG_NPFIM_DEVICE         32\r
-\r
-/*!\r
-  \brief Describes an opened network adapter.\r
-\r
-  This structure is the most important for the functioning of packet.dll, but the great part of its fields\r
-  should be ignored by the user, since the library offers functions that avoid to cope with low-level parameters\r
-*/\r
-typedef struct _ADAPTER  { \r
-       HANDLE hFile;                           ///< \internal Handle to an open instance of the NPF driver.\r
-       CHAR  SymbolicLink[MAX_LINK_NAME_LENGTH]; ///< \internal A string containing the name of the network adapter currently opened.\r
-       int NumWrites;                          ///< \internal Number of times a packets written on this adapter will be repeated \r
-                                                               ///< on the wire.\r
-       HANDLE ReadEvent;                       ///< A notification event associated with the read calls on the adapter.\r
-                                                               ///< It can be passed to standard Win32 functions (like WaitForSingleObject\r
-                                                               ///< or WaitForMultipleObjects) to wait until the driver's buffer contains some \r
-                                                               ///< data. It is particularly useful in GUI applications that need to wait \r
-                                                               ///< concurrently on several events. In Windows NT/2000 the PacketSetMinToCopy()\r
-                                                               ///< function can be used to define the minimum amount of data in the kernel buffer\r
-                                                               ///< that will cause the event to be signalled. \r
-       \r
-       UINT ReadTimeOut;                       ///< \internal The amount of time after which a read on the driver will be released and \r
-                                                               ///< ReadEvent will be signaled, also if no packets were captured\r
-       CHAR Name[ADAPTER_NAME_LENGTH];\r
-       PWAN_ADAPTER pWanAdapter;\r
-       UINT Flags;                                     ///< Adapter's flags. Tell if this adapter must be treated in a different way, using the Netmon API or the dagc API.\r
-\r
-#ifdef HAVE_AIRPCAP_API\r
-       PAirpcapHandle  AirpcapAd;\r
-#endif // HAVE_AIRPCAP_API\r
-\r
-#ifdef HAVE_NPFIM_API\r
-       void* NpfImHandle;\r
-#endif // HAVE_NPFIM_API\r
-\r
-#ifdef HAVE_DAG_API\r
-       dagc_t *pDagCard;                       ///< Pointer to the dagc API adapter descriptor for this adapter\r
-       PCHAR DagBuffer;                        ///< Pointer to the buffer with the packets that is received from the DAG card\r
-       struct timeval DagReadTimeout;  ///< Read timeout. The dagc API requires a timeval structure\r
-       unsigned DagFcsLen;                     ///< Length of the frame check sequence attached to any packet by the card. Obtained from the registry\r
-       DWORD DagFastProcess;           ///< True if the user requests fast capture processing on this card. Higher level applications can use this value to provide a faster but possibly unprecise capture (for example, libpcap doesn't convert the timestamps).\r
-#endif // HAVE_DAG_API\r
-}  ADAPTER, *LPADAPTER;\r
-\r
-/*!\r
-  \brief Structure that contains a group of packets coming from the driver.\r
-\r
-  This structure defines the header associated with every packet delivered to the application.\r
-*/\r
-typedef struct _PACKET {  \r
-       HANDLE       hEvent;            ///< \deprecated Still present for compatibility with old applications.\r
-       OVERLAPPED   OverLapped;        ///< \deprecated Still present for compatibility with old applications.\r
-       PVOID        Buffer;            ///< Buffer with containing the packets. See the PacketReceivePacket() for\r
-                                                               ///< details about the organization of the data in this buffer\r
-       UINT         Length;            ///< Length of the buffer\r
-       DWORD        ulBytesReceived;   ///< Number of valid bytes present in the buffer, i.e. amount of data\r
-                                                                       ///< received by the last call to PacketReceivePacket()\r
-       BOOLEAN      bIoComplete;       ///< \deprecated Still present for compatibility with old applications.\r
-}  PACKET, *LPPACKET;\r
-\r
-/*!\r
-  \brief Structure containing an OID request.\r
-\r
-  It is used by the PacketRequest() function to send an OID to the interface card driver. \r
-  It can be used, for example, to retrieve the status of the error counters on the adapter, its MAC address, \r
-  the list of the multicast groups defined on it, and so on.\r
-*/\r
-struct _PACKET_OID_DATA {\r
-    ULONG Oid;                                 ///< OID code. See the Microsoft DDK documentation or the file ntddndis.h\r
-                                                               ///< for a complete list of valid codes.\r
-    ULONG Length;                              ///< Length of the data field\r
-    UCHAR Data[1];                             ///< variable-lenght field that contains the information passed to or received \r
-                                                               ///< from the adapter.\r
-}; \r
-typedef struct _PACKET_OID_DATA PACKET_OID_DATA, *PPACKET_OID_DATA;\r
-\r
-#ifdef __cplusplus\r
-extern "C" {\r
-#endif\r
-\r
-/**\r
- *  @}\r
- */\r
-\r
-/*\r
-BOOLEAN QueryWinPcapRegistryStringA(CHAR *SubKeyName,\r
-                                                                CHAR *Value,\r
-                                                                UINT *pValueLen,\r
-                                                                CHAR *DefaultVal);\r
-\r
-BOOLEAN QueryWinPcapRegistryStringW(WCHAR *SubKeyName,\r
-                                                                WCHAR *Value,\r
-                                                                UINT *pValueLen,\r
-                                                                WCHAR *DefaultVal);\r
-*/\r
-                                                                \r
-//---------------------------------------------------------------------------\r
-// EXPORTED FUNCTIONS\r
-//---------------------------------------------------------------------------\r
-\r
-PCHAR PacketGetVersion();\r
-PCHAR PacketGetDriverVersion();\r
-BOOLEAN PacketSetMinToCopy(LPADAPTER AdapterObject,int nbytes);\r
-BOOLEAN PacketSetNumWrites(LPADAPTER AdapterObject,int nwrites);\r
-BOOLEAN PacketSetMode(LPADAPTER AdapterObject,int mode);\r
-BOOLEAN PacketSetReadTimeout(LPADAPTER AdapterObject,int timeout);\r
-BOOLEAN PacketSetBpf(LPADAPTER AdapterObject,struct bpf_program *fp);\r
-BOOLEAN PacketSetLoopbackBehavior(LPADAPTER  AdapterObject, UINT LoopbackBehavior);\r
-INT PacketSetSnapLen(LPADAPTER AdapterObject,int snaplen);\r
-BOOLEAN PacketGetStats(LPADAPTER AdapterObject,struct bpf_stat *s);\r
-BOOLEAN PacketGetStatsEx(LPADAPTER AdapterObject,struct bpf_stat *s);\r
-BOOLEAN PacketSetBuff(LPADAPTER AdapterObject,int dim);\r
-BOOLEAN PacketGetNetType (LPADAPTER AdapterObject,NetType *type);\r
-LPADAPTER PacketOpenAdapter(PCHAR AdapterName);\r
-BOOLEAN PacketSendPacket(LPADAPTER AdapterObject,LPPACKET pPacket,BOOLEAN Sync);\r
-INT PacketSendPackets(LPADAPTER AdapterObject,PVOID PacketBuff,ULONG Size, BOOLEAN Sync);\r
-LPPACKET PacketAllocatePacket(void);\r
-VOID PacketInitPacket(LPPACKET lpPacket,PVOID  Buffer,UINT  Length);\r
-VOID PacketFreePacket(LPPACKET lpPacket);\r
-BOOLEAN PacketReceivePacket(LPADAPTER AdapterObject,LPPACKET lpPacket,BOOLEAN Sync);\r
-BOOLEAN PacketSetHwFilter(LPADAPTER AdapterObject,ULONG Filter);\r
-BOOLEAN PacketGetAdapterNames(PTSTR pStr,PULONG  BufferSize);\r
-BOOLEAN PacketGetNetInfoEx(PCHAR AdapterName, npf_if_addr* buffer, PLONG NEntries);\r
-BOOLEAN PacketRequest(LPADAPTER  AdapterObject,BOOLEAN Set,PPACKET_OID_DATA  OidData);\r
-HANDLE PacketGetReadEvent(LPADAPTER AdapterObject);\r
-BOOLEAN PacketSetDumpName(LPADAPTER AdapterObject, void *name, int len);\r
-BOOLEAN PacketSetDumpLimits(LPADAPTER AdapterObject, UINT maxfilesize, UINT maxnpacks);\r
-BOOLEAN PacketIsDumpEnded(LPADAPTER AdapterObject, BOOLEAN sync);\r
-BOOL PacketStopDriver();\r
-VOID PacketCloseAdapter(LPADAPTER lpAdapter);\r
-BOOLEAN PacketStartOem(PCHAR errorString, UINT errorStringLength);\r
-BOOLEAN PacketStartOemEx(PCHAR errorString, UINT errorStringLength, ULONG flags);\r
-PAirpcapHandle PacketGetAirPcapHandle(LPADAPTER AdapterObject);\r
-\r
-//\r
-// Used by PacketStartOemEx\r
-//\r
-#define PACKET_START_OEM_NO_NETMON     0x00000001\r
-\r
-#ifdef __cplusplus\r
-}\r
-#endif \r
-\r
-#endif //__PACKET32\r
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WinPCap/PacketData.h b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WinPCap/PacketData.h
deleted file mode 100644 (file)
index 8124db6..0000000
+++ /dev/null
@@ -1,267 +0,0 @@
-char pkt1[] = {\r
-0x00, 0x01, 0x02, 0x45, 0x09, 0x11, 0x00, 0x14,\r
-0x22, 0xcb, 0x18, 0x2d, 0x08, 0x00, 0x45, 0x00,\r
-0x00, 0x30, 0x09, 0x9c, 0x40, 0x00, 0x80, 0x06,\r
-0x6f, 0x07, 0xc0, 0xa8, 0x00, 0xc8, 0xc0, 0xa8,\r
-0x00, 0x0c, 0x0f, 0xe2, 0x00, 0x50, 0x09, 0xe7,\r
-0xc7, 0x35, 0x00, 0x00, 0x00, 0x00, 0x70, 0x02,\r
-0x40, 0x00, 0xdf, 0xab, 0x00, 0x00, 0x02, 0x04,\r
-0x05, 0xb4, 0x01, 0x01, 0x04, 0x02 };\r
-\r
-char pkt2[] = {\r
-0x00, 0x14, 0x22, 0xcb, 0x18, 0x2d, 0x00, 0x01,\r
-0x02, 0x45, 0x09, 0x11, 0x08, 0x00, 0x45, 0x00,\r
-0x00, 0x2c, 0x00, 0x01, 0x00, 0x00, 0x40, 0x06,\r
-0xf8, 0xa6, 0xc0, 0xa8, 0x00, 0x0c, 0xc0, 0xa8,\r
-0x00, 0xc8, 0x00, 0x50, 0x0f, 0xe2, 0x00, 0x00,\r
-0x06, 0x68, 0x09, 0xe7, 0xc7, 0x36, 0x60, 0x12,\r
-0x05, 0x92, 0x28, 0xca, 0x00, 0x00, 0x02, 0x04,\r
-0x05, 0x92 };\r
-\r
-char pkt3[] = {\r
-0x00, 0x01, 0x02, 0x45, 0x09, 0x11, 0x00, 0x14,\r
-0x22, 0xcb, 0x18, 0x2d, 0x08, 0x00, 0x45, 0x00,\r
-0x00, 0x28, 0x09, 0x9e, 0x40, 0x00, 0x80, 0x06,\r
-0x6f, 0x0d, 0xc0, 0xa8, 0x00, 0xc8, 0xc0, 0xa8,\r
-0x00, 0x0c, 0x0f, 0xe2, 0x00, 0x50, 0x09, 0xe7,\r
-0xc7, 0x36, 0x00, 0x00, 0x06, 0x69, 0x50, 0x10,\r
-0x42, 0xd8, 0x82, 0x3f, 0x00, 0x00 };\r
-\r
-char pkt4[] = {\r
-0x00, 0x01, 0x02, 0x45, 0x09, 0x11, 0x00, 0x14,\r
-0x22, 0xcb, 0x18, 0x2d, 0x08, 0x00, 0x45, 0x00,\r
-0x02, 0x27, 0x09, 0x9f, 0x40, 0x00, 0x80, 0x06,\r
-0x6d, 0x0d, 0xc0, 0xa8, 0x00, 0xc8, 0xc0, 0xa8,\r
-0x00, 0x0c, 0x0f, 0xe2, 0x00, 0x50, 0x09, 0xe7,\r
-0xc7, 0x36, 0x00, 0x00, 0x06, 0x69, 0x50, 0x18,\r
-0x42, 0xd8, 0x84, 0x3e, 0x00, 0x00, 0x47, 0x45,\r
-0x54, 0x20, 0x2f, 0x20, 0x48, 0x54, 0x54, 0x50,\r
-0x2f, 0x31, 0x2e, 0x31, 0x0d, 0x0a, 0x41, 0x63,\r
-0x63, 0x65, 0x70, 0x74, 0x3a, 0x20, 0x69, 0x6d,\r
-0x61, 0x67, 0x65, 0x2f, 0x67, 0x69, 0x66, 0x2c,\r
-0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x78,\r
-0x2d, 0x78, 0x62, 0x69, 0x74, 0x6d, 0x61, 0x70,\r
-0x2c, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f,\r
-0x6a, 0x70, 0x65, 0x67, 0x2c, 0x20, 0x69, 0x6d,\r
-0x61, 0x67, 0x65, 0x2f, 0x70, 0x6a, 0x70, 0x65,\r
-0x67, 0x2c, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69,\r
-0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76,\r
-0x6e, 0x64, 0x2e, 0x6d, 0x73, 0x2d, 0x65, 0x78,\r
-0x63, 0x65, 0x6c, 0x2c, 0x20, 0x61, 0x70, 0x70,\r
-0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,\r
-0x2f, 0x6d, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x2c,\r
-0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61,\r
-0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x6e, 0x64,\r
-0x2e, 0x6d, 0x73, 0x2d, 0x70, 0x6f, 0x77, 0x65,\r
-0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x2c, 0x20,\r
-0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,\r
-0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x6d, 0x73,\r
-0x2d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61,\r
-0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x61, 0x70,\r
-0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,\r
-0x6e, 0x2f, 0x78, 0x2d, 0x6d, 0x73, 0x2d, 0x78,\r
-0x62, 0x61, 0x70, 0x2c, 0x20, 0x61, 0x70, 0x70,\r
-0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,\r
-0x2f, 0x76, 0x6e, 0x64, 0x2e, 0x6d, 0x73, 0x2d,\r
-0x78, 0x70, 0x73, 0x64, 0x6f, 0x63, 0x75, 0x6d,\r
-0x65, 0x6e, 0x74, 0x2c, 0x20, 0x61, 0x70, 0x70,\r
-0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,\r
-0x2f, 0x78, 0x61, 0x6d, 0x6c, 0x2b, 0x78, 0x6d,\r
-0x6c, 0x2c, 0x20, 0x2a, 0x2f, 0x2a, 0x0d, 0x0a,\r
-0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d, 0x4c,\r
-0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x3a,\r
-0x20, 0x65, 0x6e, 0x2d, 0x67, 0x62, 0x0d, 0x0a,\r
-0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d, 0x45,\r
-0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x3a,\r
-0x20, 0x67, 0x7a, 0x69, 0x70, 0x2c, 0x20, 0x64,\r
-0x65, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x0d, 0x0a,\r
-0x55, 0x73, 0x65, 0x72, 0x2d, 0x41, 0x67, 0x65,\r
-0x6e, 0x74, 0x3a, 0x20, 0x4d, 0x6f, 0x7a, 0x69,\r
-0x6c, 0x6c, 0x61, 0x2f, 0x34, 0x2e, 0x30, 0x20,\r
-0x28, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69,\r
-0x62, 0x6c, 0x65, 0x3b, 0x20, 0x4d, 0x53, 0x49,\r
-0x45, 0x20, 0x36, 0x2e, 0x30, 0x3b, 0x20, 0x57,\r
-0x69, 0x6e, 0x64, 0x6f, 0x77, 0x73, 0x20, 0x4e,\r
-0x54, 0x20, 0x35, 0x2e, 0x31, 0x3b, 0x20, 0x53,\r
-0x56, 0x31, 0x3b, 0x20, 0x47, 0x6f, 0x6f, 0x67,\r
-0x6c, 0x65, 0x54, 0x35, 0x3b, 0x20, 0x2e, 0x4e,\r
-0x45, 0x54, 0x20, 0x43, 0x4c, 0x52, 0x20, 0x32,\r
-0x2e, 0x30, 0x2e, 0x35, 0x30, 0x37, 0x32, 0x37,\r
-0x3b, 0x20, 0x2e, 0x4e, 0x45, 0x54, 0x20, 0x43,\r
-0x4c, 0x52, 0x20, 0x33, 0x2e, 0x30, 0x2e, 0x30,\r
-0x34, 0x35, 0x30, 0x36, 0x2e, 0x36, 0x34, 0x38,\r
-0x3b, 0x20, 0x2e, 0x4e, 0x45, 0x54, 0x20, 0x43,\r
-0x4c, 0x52, 0x20, 0x33, 0x2e, 0x35, 0x2e, 0x32,\r
-0x31, 0x30, 0x32, 0x32, 0x29, 0x0d, 0x0a, 0x48,\r
-0x6f, 0x73, 0x74, 0x3a, 0x20, 0x31, 0x39, 0x32,\r
-0x2e, 0x31, 0x36, 0x38, 0x2e, 0x30, 0x2e, 0x31,\r
-0x32, 0x0d, 0x0a, 0x43, 0x6f, 0x6e, 0x6e, 0x65,\r
-0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x4b,\r
-0x65, 0x65, 0x70, 0x2d, 0x41, 0x6c, 0x69, 0x76,\r
-0x65, 0x0d, 0x0a, 0x0d, 0x0a };\r
-\r
-char pkt5[] = {\r
-0x00, 0x14, 0x22, 0xcb, 0x18, 0x2d, 0x00, 0x01,\r
-0x02, 0x45, 0x09, 0x11, 0x08, 0x00, 0x45, 0x00,\r
-0x00, 0x2c, 0x00, 0x02, 0x00, 0x00, 0x40, 0x06,\r
-0xf8, 0xa5, 0xc0, 0xa8, 0x00, 0x0c, 0xc0, 0xa8,\r
-0x00, 0xc8, 0x00, 0x50, 0x0f, 0xe2, 0x00, 0x00,\r
-0x06, 0x68, 0x09, 0xe7, 0xc7, 0x36, 0x60, 0x12,\r
-0x05, 0x92, 0x28, 0xca, 0x00, 0x00, 0x02, 0x04,\r
-0x05, 0x92 };\r
-\r
-char pkt6[] = {\r
-0x00, 0x01, 0x02, 0x45, 0x09, 0x11, 0x00, 0x14,\r
-0x22, 0xcb, 0x18, 0x2d, 0x08, 0x00, 0x45, 0x00,\r
-0x00, 0x28, 0x09, 0xa1, 0x40, 0x00, 0x80, 0x06,\r
-0x6f, 0x0a, 0xc0, 0xa8, 0x00, 0xc8, 0xc0, 0xa8,\r
-0x00, 0x0c, 0x0f, 0xe2, 0x00, 0x50, 0x09, 0xe7,\r
-0xc9, 0x35, 0x00, 0x00, 0x06, 0x69, 0x50, 0x10,\r
-0x42, 0xd8, 0x82, 0x3f, 0x00, 0x00 };\r
-\r
-char pkt7[] = {\r
-0x00, 0x01, 0x02, 0x45, 0x09, 0x11, 0x00, 0x14,\r
-0x22, 0xcb, 0x18, 0x2d, 0x08, 0x00, 0x45, 0x00,\r
-0x02, 0x27, 0x09, 0xa2, 0x40, 0x00, 0x80, 0x06,\r
-0x6d, 0x0a, 0xc0, 0xa8, 0x00, 0xc8, 0xc0, 0xa8,\r
-0x00, 0x0c, 0x0f, 0xe2, 0x00, 0x50, 0x09, 0xe7,\r
-0xc7, 0x36, 0x00, 0x00, 0x06, 0x69, 0x50, 0x18,\r
-0x42, 0xd8, 0x84, 0x3e, 0x00, 0x00, 0x47, 0x45,\r
-0x54, 0x20, 0x2f, 0x20, 0x48, 0x54, 0x54, 0x50,\r
-0x2f, 0x31, 0x2e, 0x31, 0x0d, 0x0a, 0x41, 0x63,\r
-0x63, 0x65, 0x70, 0x74, 0x3a, 0x20, 0x69, 0x6d,\r
-0x61, 0x67, 0x65, 0x2f, 0x67, 0x69, 0x66, 0x2c,\r
-0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x78,\r
-0x2d, 0x78, 0x62, 0x69, 0x74, 0x6d, 0x61, 0x70,\r
-0x2c, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f,\r
-0x6a, 0x70, 0x65, 0x67, 0x2c, 0x20, 0x69, 0x6d,\r
-0x61, 0x67, 0x65, 0x2f, 0x70, 0x6a, 0x70, 0x65,\r
-0x67, 0x2c, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69,\r
-0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76,\r
-0x6e, 0x64, 0x2e, 0x6d, 0x73, 0x2d, 0x65, 0x78,\r
-0x63, 0x65, 0x6c, 0x2c, 0x20, 0x61, 0x70, 0x70,\r
-0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,\r
-0x2f, 0x6d, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x2c,\r
-0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61,\r
-0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x6e, 0x64,\r
-0x2e, 0x6d, 0x73, 0x2d, 0x70, 0x6f, 0x77, 0x65,\r
-0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x2c, 0x20,\r
-0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,\r
-0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x6d, 0x73,\r
-0x2d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61,\r
-0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x61, 0x70,\r
-0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,\r
-0x6e, 0x2f, 0x78, 0x2d, 0x6d, 0x73, 0x2d, 0x78,\r
-0x62, 0x61, 0x70, 0x2c, 0x20, 0x61, 0x70, 0x70,\r
-0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,\r
-0x2f, 0x76, 0x6e, 0x64, 0x2e, 0x6d, 0x73, 0x2d,\r
-0x78, 0x70, 0x73, 0x64, 0x6f, 0x63, 0x75, 0x6d,\r
-0x65, 0x6e, 0x74, 0x2c, 0x20, 0x61, 0x70, 0x70,\r
-0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,\r
-0x2f, 0x78, 0x61, 0x6d, 0x6c, 0x2b, 0x78, 0x6d,\r
-0x6c, 0x2c, 0x20, 0x2a, 0x2f, 0x2a, 0x0d, 0x0a,\r
-0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d, 0x4c,\r
-0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x3a,\r
-0x20, 0x65, 0x6e, 0x2d, 0x67, 0x62, 0x0d, 0x0a,\r
-0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d, 0x45,\r
-0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x3a,\r
-0x20, 0x67, 0x7a, 0x69, 0x70, 0x2c, 0x20, 0x64,\r
-0x65, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x0d, 0x0a,\r
-0x55, 0x73, 0x65, 0x72, 0x2d, 0x41, 0x67, 0x65,\r
-0x6e, 0x74, 0x3a, 0x20, 0x4d, 0x6f, 0x7a, 0x69,\r
-0x6c, 0x6c, 0x61, 0x2f, 0x34, 0x2e, 0x30, 0x20,\r
-0x28, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69,\r
-0x62, 0x6c, 0x65, 0x3b, 0x20, 0x4d, 0x53, 0x49,\r
-0x45, 0x20, 0x36, 0x2e, 0x30, 0x3b, 0x20, 0x57,\r
-0x69, 0x6e, 0x64, 0x6f, 0x77, 0x73, 0x20, 0x4e,\r
-0x54, 0x20, 0x35, 0x2e, 0x31, 0x3b, 0x20, 0x53,\r
-0x56, 0x31, 0x3b, 0x20, 0x47, 0x6f, 0x6f, 0x67,\r
-0x6c, 0x65, 0x54, 0x35, 0x3b, 0x20, 0x2e, 0x4e,\r
-0x45, 0x54, 0x20, 0x43, 0x4c, 0x52, 0x20, 0x32,\r
-0x2e, 0x30, 0x2e, 0x35, 0x30, 0x37, 0x32, 0x37,\r
-0x3b, 0x20, 0x2e, 0x4e, 0x45, 0x54, 0x20, 0x43,\r
-0x4c, 0x52, 0x20, 0x33, 0x2e, 0x30, 0x2e, 0x30,\r
-0x34, 0x35, 0x30, 0x36, 0x2e, 0x36, 0x34, 0x38,\r
-0x3b, 0x20, 0x2e, 0x4e, 0x45, 0x54, 0x20, 0x43,\r
-0x4c, 0x52, 0x20, 0x33, 0x2e, 0x35, 0x2e, 0x32,\r
-0x31, 0x30, 0x32, 0x32, 0x29, 0x0d, 0x0a, 0x48,\r
-0x6f, 0x73, 0x74, 0x3a, 0x20, 0x31, 0x39, 0x32,\r
-0x2e, 0x31, 0x36, 0x38, 0x2e, 0x30, 0x2e, 0x31,\r
-0x32, 0x0d, 0x0a, 0x43, 0x6f, 0x6e, 0x6e, 0x65,\r
-0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x4b,\r
-0x65, 0x65, 0x70, 0x2d, 0x41, 0x6c, 0x69, 0x76,\r
-0x65, 0x0d, 0x0a, 0x0d, 0x0a };\r
-\r
-char pkt8[] = {\r
-0x00, 0x14, 0x22, 0xcb, 0x18, 0x2d, 0x00, 0x01,\r
-0x02, 0x45, 0x09, 0x11, 0x08, 0x00, 0x45, 0x00,\r
-0x00, 0x2c, 0x00, 0x03, 0x00, 0x00, 0x40, 0x06,\r
-0xf8, 0xa4, 0xc0, 0xa8, 0x00, 0x0c, 0xc0, 0xa8,\r
-0x00, 0xc8, 0x00, 0x50, 0x0f, 0xe2, 0x00, 0x00,\r
-0x06, 0x68, 0x09, 0xe7, 0xc7, 0x36, 0x60, 0x12,\r
-0x05, 0x92, 0x28, 0xca, 0x00, 0x00, 0x02, 0x04,\r
-0x05, 0x92 };\r
-\r
-char pkt9[] = {\r
-0x00, 0x01, 0x02, 0x45, 0x09, 0x11, 0x00, 0x14,\r
-0x22, 0xcb, 0x18, 0x2d, 0x08, 0x00, 0x45, 0x00,\r
-0x00, 0x28, 0x09, 0xa3, 0x40, 0x00, 0x80, 0x06,\r
-0x6f, 0x08, 0xc0, 0xa8, 0x00, 0xc8, 0xc0, 0xa8,\r
-0x00, 0x0c, 0x0f, 0xe2, 0x00, 0x50, 0x09, 0xe7,\r
-0xc9, 0x35, 0x00, 0x00, 0x06, 0x69, 0x50, 0x10,\r
-0x42, 0xd8, 0x82, 0x3f, 0x00, 0x00 };\r
-\r
-char pkt10[] = {\r
-0x00, 0x14, 0x22, 0xcb, 0x18, 0x2d, 0x00, 0x01,\r
-0x02, 0x45, 0x09, 0x11, 0x08, 0x00, 0x45, 0x00,\r
-0x00, 0x2c, 0x00, 0x04, 0x00, 0x00, 0x40, 0x06,\r
-0xf8, 0xa3, 0xc0, 0xa8, 0x00, 0x0c, 0xc0, 0xa8,\r
-0x00, 0xc8, 0x00, 0x50, 0x0f, 0xe2, 0x00, 0x00,\r
-0x06, 0x68, 0x09, 0xe7, 0xc7, 0x36, 0x60, 0x12,\r
-0x05, 0x92, 0x28, 0xca, 0x00, 0x00, 0x02, 0x04,\r
-0x05, 0x92 };\r
-\r
-char pkt11[] = {\r
-0x00, 0x01, 0x02, 0x45, 0x09, 0x11, 0x00, 0x14,\r
-0x22, 0xcb, 0x18, 0x2d, 0x08, 0x00, 0x45, 0x00,\r
-0x00, 0x28, 0x09, 0xa6, 0x40, 0x00, 0x80, 0x06,\r
-0x6f, 0x05, 0xc0, 0xa8, 0x00, 0xc8, 0xc0, 0xa8,\r
-0x00, 0x0c, 0x0f, 0xe2, 0x00, 0x50, 0x09, 0xe7,\r
-0xc9, 0x35, 0x00, 0x00, 0x06, 0x69, 0x50, 0x10,\r
-0x42, 0xd8, 0x82, 0x3f, 0x00, 0x00 };\r
-\r
-char pkt12[] = {\r
-0x00, 0x01, 0x02, 0x45, 0x09, 0x11, 0x00, 0x14,\r
-0x22, 0xcb, 0x18, 0x2d, 0x08, 0x00, 0x45, 0x00,\r
-0x00, 0x28, 0x09, 0xa7, 0x40, 0x00, 0x80, 0x06,\r
-0x6f, 0x04, 0xc0, 0xa8, 0x00, 0xc8, 0xc0, 0xa8,\r
-0x00, 0x0c, 0x0f, 0xe2, 0x00, 0x50, 0x09, 0xe7,\r
-0xc9, 0x35, 0x00, 0x00, 0x06, 0x69, 0x50, 0x14,\r
-0x00, 0x00, 0x43, 0xf4, 0x00, 0x00 };\r
-\r
-\r
-typedef struct\r
-{\r
-       char *pcData;\r
-       int iDataLen;\r
-} xPacketData;\r
-\r
-xPacketData xAllPackets[] =\r
-{\r
-       { pkt1, sizeof( pkt1 ) },\r
-//     { pkt2, sizeof( pkt2 ) },\r
-       { pkt3, sizeof( pkt3 ) },\r
-       { pkt4, sizeof( pkt4 ) },\r
-//     { pkt5, sizeof( pkt5 ) },\r
-       { pkt6, sizeof( pkt6 ) },\r
-       { pkt7, sizeof( pkt7 ) },\r
-       { pkt8, sizeof( pkt8 ) },\r
-       { pkt9, sizeof( pkt9 ) },\r
-       { pkt10, sizeof( pkt10 ) },\r
-//     { pkt11, sizeof( pkt11 ) },\r
-//     { pkt12, sizeof( pkt12 ) },\r
-//     { pkt13, sizeof( pkt13 ) },\r
-//     { pkt14, sizeof( pkt14 ) },\r
-//     { pkt15, sizeof( pkt15 ) },\r
-//     { pkt16, sizeof( pkt16 ) },\r
-};\r
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WinPCap/Win32-Extensions.h b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WinPCap/Win32-Extensions.h
deleted file mode 100644 (file)
index be71c85..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-/*\r
- * Copyright (c) 1999 - 2005 NetGroup, Politecnico di Torino (Italy)\r
- * Copyright (c) 2005 - 2006 CACE Technologies, Davis (California)\r
- * All rights reserved.\r
- *\r
- * Redistribution and use in source and binary forms, with or without\r
- * modification, are permitted provided that the following conditions\r
- * are met:\r
- *\r
- * 1. Redistributions of source code must retain the above copyright\r
- * notice, this list of conditions and the following disclaimer.\r
- * 2. Redistributions in binary form must reproduce the above copyright\r
- * notice, this list of conditions and the following disclaimer in the\r
- * documentation and/or other materials provided with the distribution.\r
- * 3. Neither the name of the Politecnico di Torino, CACE Technologies \r
- * nor the names of its contributors may be used to endorse or promote \r
- * products derived from this software without specific prior written \r
- * permission.\r
- *\r
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
- *\r
- */\r
-\r
-\r
-#ifndef __WIN32_EXTENSIONS_H__\r
-#define __WIN32_EXTENSIONS_H__\r
-\r
-#ifdef __cplusplus\r
-extern "C" {\r
-#endif\r
-\r
-/* Definitions */\r
-\r
-/*!\r
-  \brief A queue of raw packets that will be sent to the network with pcap_sendqueue_transmit().\r
-*/\r
-struct pcap_send_queue\r
-{\r
-       u_int maxlen;           ///< Maximum size of the the queue, in bytes. This variable contains the size of the buffer field.\r
-       u_int len;                      ///< Current size of the queue, in bytes.\r
-       char *buffer;           ///< Buffer containing the packets to be sent.\r
-};\r
-\r
-typedef struct pcap_send_queue pcap_send_queue;\r
-\r
-/*!\r
-  \brief This typedef is a support for the pcap_get_airpcap_handle() function\r
-*/\r
-#if !defined(AIRPCAP_HANDLE__EAE405F5_0171_9592_B3C2_C19EC426AD34__DEFINED_)\r
-#define AIRPCAP_HANDLE__EAE405F5_0171_9592_B3C2_C19EC426AD34__DEFINED_\r
-typedef struct _AirpcapHandle *PAirpcapHandle;\r
-#endif\r
-\r
-#define                BPF_MEM_EX_IMM  0xc0\r
-#define                BPF_MEM_EX_IND  0xe0\r
-\r
-/*used for ST*/\r
-#define                BPF_MEM_EX              0xc0\r
-#define                BPF_TME                                 0x08\r
-\r
-#define                BPF_LOOKUP                              0x90   \r
-#define                BPF_EXECUTE                             0xa0\r
-#define                BPF_INIT                                0xb0\r
-#define                BPF_VALIDATE                    0xc0\r
-#define                BPF_SET_ACTIVE                  0xd0\r
-#define                BPF_RESET                               0xe0\r
-#define                BPF_SET_MEMORY                  0x80\r
-#define                BPF_GET_REGISTER_VALUE  0x70\r
-#define                BPF_SET_REGISTER_VALUE  0x60\r
-#define                BPF_SET_WORKING                 0x50\r
-#define                BPF_SET_ACTIVE_READ             0x40\r
-#define                BPF_SET_AUTODELETION    0x30\r
-#define                BPF_SEPARATION                  0xff\r
-\r
-/* Prototypes */\r
-pcap_send_queue* pcap_sendqueue_alloc(u_int memsize);\r
-\r
-void pcap_sendqueue_destroy(pcap_send_queue* queue);\r
-\r
-int pcap_sendqueue_queue(pcap_send_queue* queue, const struct pcap_pkthdr *pkt_header, const u_char *pkt_data);\r
-\r
-u_int pcap_sendqueue_transmit(pcap_t *p, pcap_send_queue* queue, int sync);\r
-\r
-HANDLE pcap_getevent(pcap_t *p);\r
-\r
-struct pcap_stat *pcap_stats_ex(pcap_t *p, int *pcap_stat_size);\r
-\r
-int pcap_setuserbuffer(pcap_t *p, int size);\r
-\r
-int pcap_live_dump(pcap_t *p, char *filename, int maxsize, int maxpacks);\r
-\r
-int pcap_live_dump_ended(pcap_t *p, int sync);\r
-\r
-int pcap_offline_filter(struct bpf_program *prog, const struct pcap_pkthdr *header, const u_char *pkt_data);\r
-\r
-int pcap_start_oem(char* err_str, int flags);\r
-\r
-PAirpcapHandle pcap_get_airpcap_handle(pcap_t *p);\r
-\r
-#ifdef __cplusplus\r
-}\r
-#endif\r
-\r
-#endif //__WIN32_EXTENSIONS_H__\r
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WinPCap/arch.c b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WinPCap/arch.c
deleted file mode 100644 (file)
index d704da8..0000000
+++ /dev/null
@@ -1,336 +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
-/* WinPCap includes. */\r
-#include "pcap.h"\r
-#include "remote-ext.h"\r
-\r
-/* uIP includes. */\r
-#include "net/uip.h"\r
-#include "net/uip_arp.h"\r
-#include "net/clock-arch.h"\r
-\r
-/* FreeRTOS includes. */\r
-#include "FreeRTOS.h"\r
-#include "task.h"\r
-#include "queue.h"\r
-\r
-/*\r
- * Query the computer the simulation is being executed on to find the network\r
- * interfaces it has installed.\r
- */\r
-static pcap_if_t * prvPrintAvailableNetworkInterfaces( void );\r
-\r
-/*\r
- * Open the network interface.  The number of the interface to be opened is set\r
- * by the configNETWORK_INTERFACE_TO_USE constant in FreeRTOSConfig.h.\r
- */\r
-static void prvOpenSelectedNetworkInterface( pcap_if_t *pxAllNetworkInterfaces );\r
-\r
-/*\r
- * Configure the capture filter to allow blocking reads, and to filter out\r
- * packets that are not of interest to this demo.\r
- */\r
-static void prvConfigureCaptureBehaviour( void );\r
-\r
-pcap_t *pxOpenedInterfaceHandle = NULL;\r
-LARGE_INTEGER freq, sys_start_time;\r
-\r
-#define archNUM_BUFFERS        5\r
-#define archNUM_BUFFER_POINTERS ( archNUM_BUFFERS - 1 )\r
-\r
-static void prvInterruptSimulator( void *pvParameters );\r
-\r
-static unsigned char ucEthernetBuffer[ archNUM_BUFFERS ][ UIP_CONF_BUFFER_SIZE ];\r
-static unsigned char *pucEthernetBufferPointers[ archNUM_BUFFER_POINTERS ];\r
-\r
-static long lLengthOfDataInBuffer[ archNUM_BUFFER_POINTERS ] = { 0 };\r
-static unsigned char ucNextBufferToFill = 0U, ucNextBufferToProcess = 0U;\r
-\r
-unsigned char *uip_buf = NULL;\r
-char cErrorBuffer[PCAP_ERRBUF_SIZE];\r
-\r
-void vNetifTx( void )\r
-{\r
-       pcap_sendpacket( pxOpenedInterfaceHandle, uip_buf, uip_len );\r
-       pcap_sendpacket( pxOpenedInterfaceHandle, uip_buf, uip_len );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-UBaseType_t uxNetifRx( void )\r
-{\r
-UBaseType_t xDataLen;\r
-unsigned char *pucTemp;\r
-\r
-       /* Check there is really data available. */\r
-       xDataLen = lLengthOfDataInBuffer[ ucNextBufferToProcess ];\r
-       if( xDataLen != 0L )\r
-       {\r
-\r
-               /* The buffer pointed to by uip_buf is going to change.  Remember which\r
-               buffer uip_buf is currently pointing to. */\r
-               pucTemp = uip_buf;\r
-\r
-               /* Point uip_buf at the next buffer that contains data. */\r
-               uip_buf = pucEthernetBufferPointers[ ucNextBufferToProcess ];\r
-\r
-               /* The buffer pointed to by \r
-               pucEthernetBufferPointeres[ ucNextBufferToProcess ] is now in use by\r
-               uip_buf, but the buffer uip_buf was pointing to on entry to this\r
-               function is free.  Set \r
-               pucEthernetBufferPointeres[ ucNextBufferToProcess ] to the free \r
-               buffer. */\r
-               pucEthernetBufferPointers[ ucNextBufferToProcess ] = pucTemp;\r
-               lLengthOfDataInBuffer[ ucNextBufferToProcess ] = 0L;\r
-\r
-               ucNextBufferToProcess++;\r
-               if( ucNextBufferToProcess >= archNUM_BUFFER_POINTERS )\r
-               {\r
-                       ucNextBufferToProcess = 0L;\r
-               }\r
-       }\r
-\r
-       return xDataLen;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-BaseType_t xNetifInit( void )\r
-{\r
-BaseType_t x;\r
-pcap_if_t *pxAllNetworkInterfaces;\r
-\r
-       /* Allocate a free buffer to each buffer pointer. */\r
-       for( x = 0; x < sizeof( pucEthernetBufferPointers ) / sizeof( unsigned char * ); x++ )\r
-       {\r
-               pucEthernetBufferPointers[ x ] = &( ucEthernetBuffer[ x ][ 0 ] );\r
-       }\r
-\r
-       /* Start with uip_buf pointing to a buffer that is not referenced from the\r
-       pucEthernetBufferPointers[] array. */\r
-       uip_buf = &( ucEthernetBuffer[ archNUM_BUFFERS - 1 ][ 0 ] );\r
-\r
-       /* Query the computer the simulation is being executed on to find the \r
-       network interfaces it has installed. */\r
-       pxAllNetworkInterfaces = prvPrintAvailableNetworkInterfaces();\r
-       \r
-       /* Open the network interface.  The number of the interface to be opened is \r
-       set by the configNETWORK_INTERFACE_TO_USE constant in FreeRTOSConfig.h.\r
-       Calling this function will set the pxOpenedInterfaceHandle variable.  If,\r
-       after calling this function, pxOpenedInterfaceHandle is equal to NULL, then\r
-       the interface could not be opened. */\r
-       if( pxAllNetworkInterfaces != NULL )\r
-       {\r
-               prvOpenSelectedNetworkInterface( pxAllNetworkInterfaces );\r
-       }\r
-       \r
-\r
-       return x;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static pcap_if_t * prvPrintAvailableNetworkInterfaces( void )\r
-{    \r
-pcap_if_t * pxAllNetworkInterfaces = NULL, *xInterface;\r
-long lInterfaceNumber = 1;\r
-\r
-    if( pcap_findalldevs_ex( PCAP_SRC_IF_STRING, NULL, &pxAllNetworkInterfaces, cErrorBuffer ) == -1 )\r
-    {\r
-        printf( "\r\nCould not obtain a list of network interfaces\r\n%s\r\n", cErrorBuffer );\r
-        pxAllNetworkInterfaces = NULL;\r
-    }\r
-\r
-       if( pxAllNetworkInterfaces != NULL )\r
-       {\r
-               /* Print out the list of network interfaces.  The first in the list\r
-               is interface '1', not interface '0'. */\r
-               for( xInterface = pxAllNetworkInterfaces; xInterface != NULL; xInterface = xInterface->next )\r
-               {\r
-                       printf( "%d. %s", lInterfaceNumber, xInterface->name );\r
-                       \r
-                       if( xInterface->description != NULL )\r
-                       {\r
-                               printf( " (%s)\r\n", xInterface->description );\r
-                       }\r
-                       else\r
-                       {\r
-                               printf( " (No description available)\r\n") ;\r
-                       }\r
-                       \r
-                       lInterfaceNumber++;\r
-               }\r
-       }\r
-\r
-    if( lInterfaceNumber == 1 )\r
-    {\r
-               /* The interface number was never incremented, so the above for() loop\r
-               did not execute meaning no interfaces were found. */\r
-        printf( " \r\nNo network interfaces were found.\r\n" );\r
-        pxAllNetworkInterfaces = NULL;\r
-    }\r
-\r
-       printf( "\r\nThe interface that will be opened is set by configNETWORK_INTERFACE_TO_USE which should be defined in FreeRTOSConfig.h\r\n" );\r
-       printf( "Attempting to open interface number %d.\r\n", configNETWORK_INTERFACE_TO_USE );\r
-       \r
-    if( ( configNETWORK_INTERFACE_TO_USE < 1L ) || ( configNETWORK_INTERFACE_TO_USE > lInterfaceNumber ) )\r
-    {\r
-        printf("\r\nconfigNETWORK_INTERFACE_TO_USE is not in the valid range.\r\n" );\r
-               \r
-               if( pxAllNetworkInterfaces != NULL )\r
-               {\r
-                       /* Free the device list, as no devices are going to be opened. */\r
-                       pcap_freealldevs( pxAllNetworkInterfaces );\r
-                       pxAllNetworkInterfaces = NULL;\r
-               }\r
-    }\r
-\r
-       return pxAllNetworkInterfaces;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvOpenSelectedNetworkInterface( pcap_if_t *pxAllNetworkInterfaces )\r
-{\r
-pcap_if_t *xInterface;\r
-long x;\r
-\r
-    /* Walk the list of devices until the selected device is located. */\r
-       xInterface = pxAllNetworkInterfaces;\r
-    for( x = 0L; x < ( configNETWORK_INTERFACE_TO_USE - 1L ); x++ )\r
-       {\r
-               xInterface = xInterface->next;\r
-       }\r
-\r
-    /* Open the selected interface. */\r
-       pxOpenedInterfaceHandle = pcap_open(    xInterface->name,               /* The name of the selected interface. */\r
-                                                                                       UIP_CONF_BUFFER_SIZE,           /* The size of the packet to capture. */\r
-                                                                                       PCAP_OPENFLAG_PROMISCUOUS,      /* Open in promiscious mode as the MAC and \r
-                                                                                                                                               IP address is going to be "simulated", and \r
-                                                                                                                                               not be the real MAC and IP address.  This allows\r
-                                                                                                                                               trafic to the simulated IP address to be routed\r
-                                                                                                                                               to uIP, and trafic to the real IP address to be\r
-                                                                                                                                               routed to the Windows TCP/IP stack. */\r
-                                                                                       0xfffffffL,                     /* The read time out.  This is going to block\r
-                                                                                                                                               until data is available. */\r
-                                                                                       NULL,                                   /* No authentication is required as this is\r
-                                                                                                                                               not a remote capture session. */\r
-                                                                                       cErrorBuffer            \r
-                                                                          );\r
-                                                                          \r
-    if ( pxOpenedInterfaceHandle == NULL )\r
-    {\r
-        printf( "\r\n%s is not supported by WinPcap and cannot be opened\r\n", xInterface->name );\r
-    }\r
-       else\r
-       {\r
-               /* Configure the capture filter to allow blocking reads, and to filter \r
-               out packets that are not of interest to this demo. */\r
-               prvConfigureCaptureBehaviour();\r
-       }\r
-\r
-       /* The device list is no longer required. */\r
-       pcap_freealldevs( pxAllNetworkInterfaces );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvConfigureCaptureBehaviour( void )\r
-{\r
-struct bpf_program xFilterCode;\r
-const long lMinBytesToCopy = 10L, lBlocking = 0L;\r
-unsigned long ulNetMask;\r
-\r
-       /* Unblock a read as soon as anything is received. */\r
-       pcap_setmintocopy( pxOpenedInterfaceHandle, lMinBytesToCopy );\r
-\r
-       /* Allow blocking. */\r
-       pcap_setnonblock( pxOpenedInterfaceHandle, lBlocking, cErrorBuffer );\r
-\r
-       /* Set up a filter so only the packets of interest are passed to the uIP\r
-       stack.  cErrorBuffer is used for convenience to create the string.  Don't\r
-       confuse this with an error message. */\r
-       sprintf( cErrorBuffer, "broadcast or multicast or host %d.%d.%d.%d", configIP_ADDR0, configIP_ADDR1, configIP_ADDR2, configIP_ADDR3 );\r
-\r
-       ulNetMask = ( configNET_MASK3 << 24UL ) | ( configNET_MASK2 << 16UL ) | ( configNET_MASK1 << 8L ) | configNET_MASK0;\r
-\r
-       if( pcap_compile(pxOpenedInterfaceHandle, &xFilterCode, cErrorBuffer, 1, ulNetMask ) < 0 )\r
-    {\r
-        printf("\r\nThe packet filter string is invalid\r\n" );\r
-    }\r
-       else\r
-       {    \r
-               if( pcap_setfilter( pxOpenedInterfaceHandle, &xFilterCode ) < 0 )\r
-               {\r
-                       printf( "\r\nAn error occurred setting the packet filter.\r\n" );\r
-               }\r
-       }\r
-\r
-       /* Create a task that simulates an interrupt in a real system.  This will\r
-       block waiting for packets, then send a message to the uIP task when data\r
-       is available. */\r
-       xTaskCreate( prvInterruptSimulator, ( signed char * ) "MAC_ISR", configMINIMAL_STACK_SIZE, NULL, ( configuIP_TASK_PRIORITY - 1 ), NULL );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvInterruptSimulator( void *pvParameters )\r
-{\r
-static struct pcap_pkthdr *pxHeader;\r
-const unsigned char *pucPacketData;\r
-extern QueueHandle_t xEMACEventQueue;\r
-const unsigned long ulRxEvent = uipETHERNET_RX_EVENT;\r
-long lResult;\r
-\r
-       /* Just to kill the compiler warning. */\r
-       ( void ) pvParameters;\r
-\r
-       for( ;; )\r
-       {\r
-               /* Get the next packet. */\r
-               lResult = pcap_next_ex( pxOpenedInterfaceHandle, &pxHeader, &pucPacketData );\r
-               if( lResult )\r
-               {\r
-                       /* Is the next buffer into which data should be placed free? */\r
-                       if( lLengthOfDataInBuffer[ ucNextBufferToFill ] == 0L )\r
-                       {\r
-                               /* Copy the data from the captured packet into the buffer. */\r
-                               memcpy( pucEthernetBufferPointers[ ucNextBufferToFill ], pucPacketData, pxHeader->len );\r
-\r
-                               /* Note the amount of data that was copied. */\r
-                               lLengthOfDataInBuffer[ ucNextBufferToFill ] = pxHeader->len;\r
-\r
-                               /* Move onto the next buffer, wrapping around if necessary. */\r
-                               ucNextBufferToFill++;\r
-                               if( ucNextBufferToFill >= archNUM_BUFFER_POINTERS )\r
-                               {\r
-                                       ucNextBufferToFill = 0U;\r
-                               }\r
-\r
-                               /* Data was received and stored.  Send a message to the uIP task\r
-                               to let it know. */\r
-                               xQueueSendToBack( xEMACEventQueue, &ulRxEvent, portMAX_DELAY );\r
-                       }\r
-               }\r
-       }\r
-}\r
-\r
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WinPCap/bittypes.h b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WinPCap/bittypes.h
deleted file mode 100644 (file)
index f55fcec..0000000
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Copyright (C) 1999 WIDE Project.
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the project nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-#ifndef _BITTYPES_H
-#define _BITTYPES_H
-
-#ifndef HAVE_U_INT8_T
-
-#if SIZEOF_CHAR == 1
-typedef unsigned char u_int8_t;
-typedef signed char _int8_t;
-#elif SIZEOF_INT == 1
-typedef unsigned int u_int8_t;
-typedef signed int int8_t;
-#else  /* XXX */
-#error "there's no appropriate type for u_int8_t"
-#endif
-#define HAVE_U_INT8_T 1
-#define HAVE_INT8_T 1
-
-#endif /* HAVE_U_INT8_T */
-
-#ifndef HAVE_U_INT16_T 
-
-#if SIZEOF_SHORT == 2
-typedef unsigned short u_int16_t;
-typedef signed short _int16_t;
-#elif SIZEOF_INT == 2
-typedef unsigned int u_int16_t;
-typedef signed int int16_t;
-#elif SIZEOF_CHAR == 2
-typedef unsigned char u_int16_t;
-typedef signed char int16_t;
-#else  /* XXX */
-#error "there's no appropriate type for u_int16_t"
-#endif
-#define HAVE_U_INT16_T 1
-#define HAVE_INT16_T 1
-
-#endif /* HAVE_U_INT16_T */
-
-#ifndef HAVE_U_INT32_T
-
-#if SIZEOF_INT == 4
-typedef unsigned int u_int32_t;
-typedef signed int _int32_t;
-#elif SIZEOF_LONG == 4
-typedef unsigned long u_int32_t;
-typedef signed long int32_t;
-#elif SIZEOF_SHORT == 4
-typedef unsigned short u_int32_t;
-typedef signed short int32_t;
-#else  /* XXX */
-#error "there's no appropriate type for u_int32_t"
-#endif
-#define HAVE_U_INT32_T 1
-#define HAVE_INT32_T 1
-
-#endif /* HAVE_U_INT32_T */
-
-#ifndef HAVE_U_INT64_T
-#if SIZEOF_LONG_LONG == 8
-typedef unsigned long long u_int64_t;
-typedef long long int64_t;
-#elif defined(_MSC_EXTENSIONS)
-typedef unsigned _int64 u_int64_t;
-typedef _int64 int64_t;
-#elif SIZEOF_INT == 8
-typedef unsigned int u_int64_t;
-#elif SIZEOF_LONG == 8
-typedef unsigned long u_int64_t;
-#elif SIZEOF_SHORT == 8
-typedef unsigned short u_int64_t;
-#else  /* XXX */
-#error "there's no appropriate type for u_int64_t"
-#endif
-
-#endif /* HAVE_U_INT64_T */
-
-#ifndef PRId64
-#ifdef _MSC_EXTENSIONS
-#define PRId64 "I64d"
-#else /* _MSC_EXTENSIONS */
-#define PRId64 "lld"
-#endif /* _MSC_EXTENSIONS */
-#endif /* PRId64 */
-
-#ifndef PRIo64
-#ifdef _MSC_EXTENSIONS
-#define PRIo64 "I64o"
-#else /* _MSC_EXTENSIONS */
-#define PRIo64 "llo"
-#endif /* _MSC_EXTENSIONS */
-#endif /* PRIo64 */
-
-#ifndef PRIx64
-#ifdef _MSC_EXTENSIONS
-#define PRIx64 "I64x"
-#else /* _MSC_EXTENSIONS */
-#define PRIx64 "llx"
-#endif /* _MSC_EXTENSIONS */
-#endif /* PRIx64 */
-
-#ifndef PRIu64
-#ifdef _MSC_EXTENSIONS
-#define PRIu64 "I64u"
-#else /* _MSC_EXTENSIONS */
-#define PRIu64 "llu"
-#endif /* _MSC_EXTENSIONS */
-#endif /* PRIu64 */
-
-#endif /* _BITTYPES_H */
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WinPCap/ip6_misc.h b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WinPCap/ip6_misc.h
deleted file mode 100644 (file)
index 562fa61..0000000
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- * Copyright (c) 1993, 1994, 1997
- *     The Regents of the University of California.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that: (1) source code distributions
- * retain the above copyright notice and this paragraph in its entirety, (2)
- * distributions including binary code include the above copyright notice and
- * this paragraph in its entirety in the documentation or other materials
- * provided with the distribution, and (3) all advertising materials mentioning
- * features or use of this software display the following acknowledgement:
- * ``This product includes software developed by the University of California,
- * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
- * the University nor the names of its contributors may be used to endorse
- * or promote products derived from this software without specific prior
- * written permission.
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- *
- * @(#) $Header: /tcpdump/master/libpcap/Win32/Include/ip6_misc.h,v 1.5 2006-01-22 18:02:18 gianluca Exp $ (LBL)
- */
-
-/*
- * This file contains a collage of declarations for IPv6 from FreeBSD not present in Windows
- */
-
-#include <winsock2.h>
-
-#include <ws2tcpip.h>
-
-#ifndef __MINGW32__
-#define        IN_MULTICAST(a)         IN_CLASSD(a)
-#endif
-
-#define        IN_EXPERIMENTAL(a)      ((((u_int32_t) (a)) & 0xf0000000) == 0xf0000000)
-
-#define        IN_LOOPBACKNET          127
-
-#if defined(__MINGW32__) && defined(DEFINE_ADDITIONAL_IPV6_STUFF)
-/* IPv6 address */
-struct in6_addr
-  {
-    union
-      {
-       u_int8_t                u6_addr8[16];
-       u_int16_t       u6_addr16[8];
-       u_int32_t       u6_addr32[4];
-      } in6_u;
-#define s6_addr                        in6_u.u6_addr8
-#define s6_addr16              in6_u.u6_addr16
-#define s6_addr32              in6_u.u6_addr32
-#define s6_addr64              in6_u.u6_addr64
-  };
-
-#define IN6ADDR_ANY_INIT { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }
-#define IN6ADDR_LOOPBACK_INIT { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 }
-#endif /* __MINGW32__ */
-
-
-#if (defined _MSC_VER) || (defined(__MINGW32__) && defined(DEFINE_ADDITIONAL_IPV6_STUFF))
-typedef unsigned short sa_family_t;
-#endif
-
-
-#if defined(__MINGW32__) && defined(DEFINE_ADDITIONAL_IPV6_STUFF)
-
-#define        __SOCKADDR_COMMON(sa_prefix) \
-  sa_family_t sa_prefix##family
-
-/* Ditto, for IPv6.  */
-struct sockaddr_in6
-  {
-    __SOCKADDR_COMMON (sin6_);
-    u_int16_t sin6_port;               /* Transport layer port # */
-    u_int32_t sin6_flowinfo;   /* IPv6 flow information */
-    struct in6_addr sin6_addr; /* IPv6 address */
-  };
-
-#define IN6_IS_ADDR_V4MAPPED(a) \
-       ((((u_int32_t *) (a))[0] == 0) && (((u_int32_t *) (a))[1] == 0) && \
-        (((u_int32_t *) (a))[2] == htonl (0xffff)))
-
-#define IN6_IS_ADDR_MULTICAST(a) (((u_int8_t *) (a))[0] == 0xff)
-
-#define IN6_IS_ADDR_LINKLOCAL(a) \
-       ((((u_int32_t *) (a))[0] & htonl (0xffc00000)) == htonl (0xfe800000))
-
-#define IN6_IS_ADDR_LOOPBACK(a) \
-       (((u_int32_t *) (a))[0] == 0 && ((u_int32_t *) (a))[1] == 0 && \
-        ((u_int32_t *) (a))[2] == 0 && ((u_int32_t *) (a))[3] == htonl (1))
-#endif /* __MINGW32__ */
-
-#define ip6_vfc   ip6_ctlun.ip6_un2_vfc
-#define ip6_flow  ip6_ctlun.ip6_un1.ip6_un1_flow
-#define ip6_plen  ip6_ctlun.ip6_un1.ip6_un1_plen
-#define ip6_nxt   ip6_ctlun.ip6_un1.ip6_un1_nxt
-#define ip6_hlim  ip6_ctlun.ip6_un1.ip6_un1_hlim
-#define ip6_hops  ip6_ctlun.ip6_un1.ip6_un1_hlim
-
-#define nd_rd_type               nd_rd_hdr.icmp6_type
-#define nd_rd_code               nd_rd_hdr.icmp6_code
-#define nd_rd_cksum              nd_rd_hdr.icmp6_cksum
-#define nd_rd_reserved           nd_rd_hdr.icmp6_data32[0]
-
-/*
- *     IPV6 extension headers
- */
-#define IPPROTO_HOPOPTS                0       /* IPv6 hop-by-hop options      */
-#define IPPROTO_IPV6           41  /* IPv6 header.  */
-#define IPPROTO_ROUTING                43      /* IPv6 routing header          */
-#define IPPROTO_FRAGMENT       44      /* IPv6 fragmentation header    */
-#define IPPROTO_ESP            50      /* encapsulating security payload */
-#define IPPROTO_AH             51      /* authentication header        */
-#define IPPROTO_ICMPV6         58      /* ICMPv6                       */
-#define IPPROTO_NONE           59      /* IPv6 no next header          */
-#define IPPROTO_DSTOPTS                60      /* IPv6 destination options     */
-#define IPPROTO_PIM                    103 /* Protocol Independent Multicast.  */
-
-#define         IPV6_RTHDR_TYPE_0 0
-
-/* Option types and related macros */
-#define IP6OPT_PAD1            0x00    /* 00 0 00000 */
-#define IP6OPT_PADN            0x01    /* 00 0 00001 */
-#define IP6OPT_JUMBO           0xC2    /* 11 0 00010 = 194 */
-#define IP6OPT_JUMBO_LEN       6
-#define IP6OPT_ROUTER_ALERT    0x05    /* 00 0 00101 */
-
-#define IP6OPT_RTALERT_LEN     4
-#define IP6OPT_RTALERT_MLD     0       /* Datagram contains an MLD message */
-#define IP6OPT_RTALERT_RSVP    1       /* Datagram contains an RSVP message */
-#define IP6OPT_RTALERT_ACTNET  2       /* contains an Active Networks msg */
-#define IP6OPT_MINLEN          2
-
-#define IP6OPT_BINDING_UPDATE  0xc6    /* 11 0 00110 */
-#define IP6OPT_BINDING_ACK     0x07    /* 00 0 00111 */
-#define IP6OPT_BINDING_REQ     0x08    /* 00 0 01000 */
-#define IP6OPT_HOME_ADDRESS    0xc9    /* 11 0 01001 */
-#define IP6OPT_EID             0x8a    /* 10 0 01010 */
-
-#define IP6OPT_TYPE(o)         ((o) & 0xC0)
-#define IP6OPT_TYPE_SKIP       0x00
-#define IP6OPT_TYPE_DISCARD    0x40
-#define IP6OPT_TYPE_FORCEICMP  0x80
-#define IP6OPT_TYPE_ICMP       0xC0
-
-#define IP6OPT_MUTABLE         0x20
-
-
-#if defined(__MINGW32__) && defined(DEFINE_ADDITIONAL_IPV6_STUFF)
-#ifndef EAI_ADDRFAMILY
-struct addrinfo {
-       int     ai_flags;       /* AI_PASSIVE, AI_CANONNAME */
-       int     ai_family;      /* PF_xxx */
-       int     ai_socktype;    /* SOCK_xxx */
-       int     ai_protocol;    /* 0 or IPPROTO_xxx for IPv4 and IPv6 */
-       size_t  ai_addrlen;     /* length of ai_addr */
-       char    *ai_canonname;  /* canonical name for hostname */
-       struct sockaddr *ai_addr;       /* binary address */
-       struct addrinfo *ai_next;       /* next structure in linked list */
-};
-#endif
-#endif /* __MINGW32__ */
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WinPCap/netif.h b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WinPCap/netif.h
deleted file mode 100644 (file)
index 8fe5393..0000000
+++ /dev/null
@@ -1,52 +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
-#ifndef NET_IF_H\r
-#define NET_IF_H\r
-\r
-/*\r
- * Send uip_len bytes from uip_buf to the network interface selected by the \r
- * configNETWORK_INTERFACE_TO_USE constant (defined in FreeRTOSConfig.h). \r
- */\r
-void vNetifTx( void );\r
-\r
-/*\r
- * Receive bytes from the network interface selected by the \r
- * configNETWORK_INTERFACE_TO_USE constant (defined in FreeRTOSConfig.h).  The\r
- * bytes are placed in uip_buf.  The number of bytes copied into uip_buf is\r
- * returned.\r
- */\r
-UBaseType_t uxNetifRx( void );\r
-\r
-/*\r
- * Prepare a packet capture session.  This will print out all the network \r
- * interfaces available, and the one actually used is set by the \r
- * configNETWORK_INTERFACE_TO_USE constant that is defined in \r
- * FreeRTOSConfig.h. */\r
-BaseType_t xNetifInit( void );\r
-\r
-#endif /* NET_IF_H */\r
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WinPCap/pcap-bpf.h b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WinPCap/pcap-bpf.h
deleted file mode 100644 (file)
index 5fe129d..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/*-
- * Copyright (c) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from the Stanford/CMU enet packet filter,
- * (net/enet.c) distributed as part of 4.3BSD, and code contributed
- * to Berkeley by Steven McCanne and Van Jacobson both of Lawrence 
- * Berkeley Laboratory.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *      This product includes software developed by the University of
- *      California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#) $Header: /tcpdump/master/libpcap/pcap-bpf.h,v 1.50 2007/04/01 21:43:55 guy Exp $ (LBL)
- */
-
-/*
- * For backwards compatibility.
- *
- * Note to OS vendors: do NOT get rid of this file!  Some applications
- * might expect to be able to include <pcap-bpf.h>.
- */
-#include <pcap/bpf.h>
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WinPCap/pcap-namedb.h b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WinPCap/pcap-namedb.h
deleted file mode 100644 (file)
index 80a2f00..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (c) 1994, 1996
- *     The Regents of the University of California.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the Computer Systems
- *     Engineering Group at Lawrence Berkeley Laboratory.
- * 4. Neither the name of the University nor of the Laboratory may be used
- *    to endorse or promote products derived from this software without
- *    specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#) $Header: /tcpdump/master/libpcap/pcap-namedb.h,v 1.13 2006/10/04 18:13:32 guy Exp $ (LBL)
- */
-
-/*
- * For backwards compatibility.
- *
- * Note to OS vendors: do NOT get rid of this file!  Some applications
- * might expect to be able to include <pcap-namedb.h>.
- */
-#include <pcap/namedb.h>
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WinPCap/pcap-stdinc.h b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WinPCap/pcap-stdinc.h
deleted file mode 100644 (file)
index cbd62d1..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-/*\r
- * Copyright (c) 2002 - 2005 NetGroup, Politecnico di Torino (Italy)\r
- * Copyright (c) 2005 - 2009 CACE Technologies, Inc. Davis (California)\r
- * All rights reserved.\r
- *\r
- * Redistribution and use in source and binary forms, with or without\r
- * modification, are permitted provided that the following conditions\r
- * are met:\r
- *\r
- * 1. Redistributions of source code must retain the above copyright\r
- * notice, this list of conditions and the following disclaimer.\r
- * 2. Redistributions in binary form must reproduce the above copyright\r
- * notice, this list of conditions and the following disclaimer in the\r
- * documentation and/or other materials provided with the distribution.\r
- * 3. Neither the name of the Politecnico di Torino nor the names of its\r
- * contributors may be used to endorse or promote products derived from\r
- * this software without specific prior written permission.\r
- *\r
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
- *\r
- * @(#) $Header: /tcpdump/master/libpcap/pcap-stdinc.h,v 1.10.2.1 2008-10-06 15:38:39 gianluca Exp $ (LBL)\r
- */\r
-\r
-#define SIZEOF_CHAR 1\r
-#define SIZEOF_SHORT 2\r
-#define SIZEOF_INT 4\r
-#ifndef _MSC_EXTENSIONS\r
-#define SIZEOF_LONG_LONG 8\r
-#endif\r
-\r
-/*\r
- * Avoids a compiler warning in case this was already defined      \r
- * (someone defined _WINSOCKAPI_ when including 'windows.h', in order\r
- * to prevent it from including 'winsock.h')\r
- */\r
-#ifdef _WINSOCKAPI_\r
-#undef _WINSOCKAPI_\r
-#endif\r
-#include <winsock2.h>\r
-\r
-#include <fcntl.h>\r
-\r
-#include "bittypes.h"\r
-#include <time.h>\r
-#include <io.h>\r
-\r
-#ifndef __MINGW32__\r
-#include "IP6_misc.h"\r
-#endif\r
-\r
-#define caddr_t char*\r
-\r
-#if _MSC_VER < 1500\r
-#define snprintf _snprintf\r
-#define vsnprintf _vsnprintf\r
-#define strdup _strdup\r
-#endif\r
-\r
-#define inline __inline \r
-\r
-#ifdef __MINGW32__\r
-#include <stdint.h>\r
-#else /*__MINGW32__*/\r
-/* MSVC compiler */\r
-#ifndef _UINTPTR_T_DEFINED\r
-#ifdef  _WIN64\r
-typedef unsigned __int64    uintptr_t;\r
-#else\r
-typedef _W64 unsigned int   uintptr_t;\r
-#endif\r
-#define _UINTPTR_T_DEFINED\r
-#endif\r
-\r
-#ifndef _INTPTR_T_DEFINED\r
-#ifdef  _WIN64\r
-typedef __int64    intptr_t;\r
-#else\r
-typedef _W64 int   intptr_t;\r
-#endif\r
-#define _INTPTR_T_DEFINED\r
-#endif \r
-\r
-#endif /*__MINGW32__*/\r
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WinPCap/pcap.h b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WinPCap/pcap.h
deleted file mode 100644 (file)
index 935f949..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (c) 1993, 1994, 1995, 1996, 1997
- *     The Regents of the University of California.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the Computer Systems
- *     Engineering Group at Lawrence Berkeley Laboratory.
- * 4. Neither the name of the University nor of the Laboratory may be used
- *    to endorse or promote products derived from this software without
- *    specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#) $Header: /tcpdump/master/libpcap/pcap.h,v 1.59 2006/10/04 18:09:22 guy Exp $ (LBL)
- */
-
-/*
- * For backwards compatibility.
- *
- * Note to OS vendors: do NOT get rid of this file!  Many applications
- * expect to be able to include <pcap.h>, and at least some of them
- * go through contortions in their configure scripts to try to detect
- * OSes that have "helpfully" moved pcap.h to <pcap/pcap.h> without
- * leaving behind a <pcap.h> file.
- */
-#include <pcap/pcap.h>
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WinPCap/pcap/bluetooth.h b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WinPCap/pcap/bluetooth.h
deleted file mode 100644 (file)
index 7bf65df..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 2006 Paolo Abeni (Italy)
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote 
- * products derived from this software without specific prior written 
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * bluetooth data struct
- * By Paolo Abeni <paolo.abeni@email.it>
- *
- * @(#) $Header: /tcpdump/master/libpcap/pcap/bluetooth.h,v 1.1 2007/09/22 02:10:17 guy Exp $
- */
-#ifndef _PCAP_BLUETOOTH_STRUCTS_H__
-#define _PCAP_BLUETOOTH_STRUCTS_H__
-
-/*
- * Header prepended libpcap to each bluetooth h:4 frame.
- * fields are in network byte order
- */
-typedef struct _pcap_bluetooth_h4_header {
-       u_int32_t direction; /* if first bit is set direction is incoming */
-} pcap_bluetooth_h4_header;
-
-
-#endif
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WinPCap/pcap/bpf.h b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WinPCap/pcap/bpf.h
deleted file mode 100644 (file)
index 9f4ca33..0000000
+++ /dev/null
@@ -1,934 +0,0 @@
-/*-
- * Copyright (c) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from the Stanford/CMU enet packet filter,
- * (net/enet.c) distributed as part of 4.3BSD, and code contributed
- * to Berkeley by Steven McCanne and Van Jacobson both of Lawrence 
- * Berkeley Laboratory.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *      This product includes software developed by the University of
- *      California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *      @(#)bpf.h       7.1 (Berkeley) 5/7/91
- *
- * @(#) $Header: /tcpdump/master/libpcap/pcap/bpf.h,v 1.19.2.8 2008-09-22 20:16:01 guy Exp $ (LBL)
- */
-
-/*
- * This is libpcap's cut-down version of bpf.h; it includes only
- * the stuff needed for the code generator and the userland BPF
- * interpreter, and the libpcap APIs for setting filters, etc..
- *
- * "pcap-bpf.c" will include the native OS version, as it deals with
- * the OS's BPF implementation.
- *
- * XXX - should this all just be moved to "pcap.h"?
- */
-
-#ifndef BPF_MAJOR_VERSION
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* BSD style release date */
-#define BPF_RELEASE 199606
-
-#ifdef MSDOS /* must be 32-bit */
-typedef long          bpf_int32;
-typedef unsigned long bpf_u_int32;
-#else
-typedef        int bpf_int32;
-typedef        u_int bpf_u_int32;
-#endif
-
-/*
- * Alignment macros.  BPF_WORDALIGN rounds up to the next 
- * even multiple of BPF_ALIGNMENT. 
- */
-#ifndef __NetBSD__
-#define BPF_ALIGNMENT sizeof(bpf_int32)
-#else
-#define BPF_ALIGNMENT sizeof(long)
-#endif
-#define BPF_WORDALIGN(x) (((x)+(BPF_ALIGNMENT-1))&~(BPF_ALIGNMENT-1))
-
-#define BPF_MAXBUFSIZE 0x8000
-#define BPF_MINBUFSIZE 32
-
-/*
- * Structure for "pcap_compile()", "pcap_setfilter()", etc..
- */
-struct bpf_program {
-       u_int bf_len;
-       struct bpf_insn *bf_insns;
-};
-/*
- * Struct return by BIOCVERSION.  This represents the version number of 
- * the filter language described by the instruction encodings below.
- * bpf understands a program iff kernel_major == filter_major &&
- * kernel_minor >= filter_minor, that is, if the value returned by the
- * running kernel has the same major number and a minor number equal
- * equal to or less than the filter being downloaded.  Otherwise, the
- * results are undefined, meaning an error may be returned or packets
- * may be accepted haphazardly.
- * It has nothing to do with the source code version.
- */
-struct bpf_version {
-       u_short bv_major;
-       u_short bv_minor;
-};
-/* Current version number of filter architecture. */
-#define BPF_MAJOR_VERSION 1
-#define BPF_MINOR_VERSION 1
-
-/*
- * Data-link level type codes.
- *
- * Do *NOT* add new values to this list without asking
- * "tcpdump-workers@lists.tcpdump.org" for a value.  Otherwise, you run
- * the risk of using a value that's already being used for some other
- * purpose, and of having tools that read libpcap-format captures not
- * being able to handle captures with your new DLT_ value, with no hope
- * that they will ever be changed to do so (as that would destroy their
- * ability to read captures using that value for that other purpose).
- */
-
-/*
- * These are the types that are the same on all platforms, and that
- * have been defined by <net/bpf.h> for ages.
- */
-#define DLT_NULL       0       /* BSD loopback encapsulation */
-#define DLT_EN10MB     1       /* Ethernet (10Mb) */
-#define DLT_EN3MB      2       /* Experimental Ethernet (3Mb) */
-#define DLT_AX25       3       /* Amateur Radio AX.25 */
-#define DLT_PRONET     4       /* Proteon ProNET Token Ring */
-#define DLT_CHAOS      5       /* Chaos */
-#define DLT_IEEE802    6       /* 802.5 Token Ring */
-#define DLT_ARCNET     7       /* ARCNET, with BSD-style header */
-#define DLT_SLIP       8       /* Serial Line IP */
-#define DLT_PPP                9       /* Point-to-point Protocol */
-#define DLT_FDDI       10      /* FDDI */
-
-/*
- * These are types that are different on some platforms, and that
- * have been defined by <net/bpf.h> for ages.  We use #ifdefs to
- * detect the BSDs that define them differently from the traditional
- * libpcap <net/bpf.h>
- *
- * XXX - DLT_ATM_RFC1483 is 13 in BSD/OS, and DLT_RAW is 14 in BSD/OS,
- * but I don't know what the right #define is for BSD/OS.
- */
-#define DLT_ATM_RFC1483        11      /* LLC-encapsulated ATM */
-
-#ifdef __OpenBSD__
-#define DLT_RAW                14      /* raw IP */
-#else
-#define DLT_RAW                12      /* raw IP */
-#endif
-
-/*
- * Given that the only OS that currently generates BSD/OS SLIP or PPP
- * is, well, BSD/OS, arguably everybody should have chosen its values
- * for DLT_SLIP_BSDOS and DLT_PPP_BSDOS, which are 15 and 16, but they
- * didn't.  So it goes.
- */
-#if defined(__NetBSD__) || defined(__FreeBSD__)
-#ifndef DLT_SLIP_BSDOS
-#define DLT_SLIP_BSDOS 13      /* BSD/OS Serial Line IP */
-#define DLT_PPP_BSDOS  14      /* BSD/OS Point-to-point Protocol */
-#endif
-#else
-#define DLT_SLIP_BSDOS 15      /* BSD/OS Serial Line IP */
-#define DLT_PPP_BSDOS  16      /* BSD/OS Point-to-point Protocol */
-#endif
-
-/*
- * 17 is used for DLT_OLD_PFLOG in OpenBSD;
- *     OBSOLETE: DLT_PFLOG is 117 in OpenBSD now as well. See below.
- * 18 is used for DLT_PFSYNC in OpenBSD; don't use it for anything else.
- */
-
-#define DLT_ATM_CLIP   19      /* Linux Classical-IP over ATM */
-
-/*
- * Apparently Redback uses this for its SmartEdge 400/800.  I hope
- * nobody else decided to use it, too.
- */
-#define DLT_REDBACK_SMARTEDGE  32
-
-/*
- * These values are defined by NetBSD; other platforms should refrain from
- * using them for other purposes, so that NetBSD savefiles with link
- * types of 50 or 51 can be read as this type on all platforms.
- */
-#define DLT_PPP_SERIAL 50      /* PPP over serial with HDLC encapsulation */
-#define DLT_PPP_ETHER  51      /* PPP over Ethernet */
-
-/*
- * The Axent Raptor firewall - now the Symantec Enterprise Firewall - uses
- * a link-layer type of 99 for the tcpdump it supplies.  The link-layer
- * header has 6 bytes of unknown data, something that appears to be an
- * Ethernet type, and 36 bytes that appear to be 0 in at least one capture
- * I've seen.
- */
-#define DLT_SYMANTEC_FIREWALL  99
-
-/*
- * Values between 100 and 103 are used in capture file headers as
- * link-layer types corresponding to DLT_ types that differ
- * between platforms; don't use those values for new DLT_ new types.
- */
-
-/*
- * This value was defined by libpcap 0.5; platforms that have defined
- * it with a different value should define it here with that value -
- * a link type of 104 in a save file will be mapped to DLT_C_HDLC,
- * whatever value that happens to be, so programs will correctly
- * handle files with that link type regardless of the value of
- * DLT_C_HDLC.
- *
- * The name DLT_C_HDLC was used by BSD/OS; we use that name for source
- * compatibility with programs written for BSD/OS.
- *
- * libpcap 0.5 defined it as DLT_CHDLC; we define DLT_CHDLC as well,
- * for source compatibility with programs written for libpcap 0.5.
- */
-#define DLT_C_HDLC     104     /* Cisco HDLC */
-#define DLT_CHDLC      DLT_C_HDLC
-
-#define DLT_IEEE802_11 105     /* IEEE 802.11 wireless */
-
-/*
- * 106 is reserved for Linux Classical IP over ATM; it's like DLT_RAW,
- * except when it isn't.  (I.e., sometimes it's just raw IP, and
- * sometimes it isn't.)  We currently handle it as DLT_LINUX_SLL,
- * so that we don't have to worry about the link-layer header.)
- */
-
-/*
- * Frame Relay; BSD/OS has a DLT_FR with a value of 11, but that collides
- * with other values.
- * DLT_FR and DLT_FRELAY packets start with the Q.922 Frame Relay header
- * (DLCI, etc.).
- */
-#define DLT_FRELAY     107
-
-/*
- * OpenBSD DLT_LOOP, for loopback devices; it's like DLT_NULL, except
- * that the AF_ type in the link-layer header is in network byte order.
- *
- * DLT_LOOP is 12 in OpenBSD, but that's DLT_RAW in other OSes, so
- * we don't use 12 for it in OSes other than OpenBSD.
- */
-#ifdef __OpenBSD__
-#define DLT_LOOP       12
-#else
-#define DLT_LOOP       108
-#endif
-
-/*
- * Encapsulated packets for IPsec; DLT_ENC is 13 in OpenBSD, but that's
- * DLT_SLIP_BSDOS in NetBSD, so we don't use 13 for it in OSes other
- * than OpenBSD.
- */
-#ifdef __OpenBSD__
-#define DLT_ENC                13
-#else
-#define DLT_ENC                109
-#endif
-
-/*
- * Values between 110 and 112 are reserved for use in capture file headers
- * as link-layer types corresponding to DLT_ types that might differ
- * between platforms; don't use those values for new DLT_ types
- * other than the corresponding DLT_ types.
- */
-
-/*
- * This is for Linux cooked sockets.
- */
-#define DLT_LINUX_SLL  113
-
-/*
- * Apple LocalTalk hardware.
- */
-#define DLT_LTALK      114
-
-/*
- * Acorn Econet.
- */
-#define DLT_ECONET     115
-
-/*
- * Reserved for use with OpenBSD ipfilter.
- */
-#define DLT_IPFILTER   116
-
-/*
- * OpenBSD DLT_PFLOG; DLT_PFLOG is 17 in OpenBSD, but that's DLT_LANE8023
- * in SuSE 6.3, so we can't use 17 for it in capture-file headers.
- *
- * XXX: is there a conflict with DLT_PFSYNC 18 as well?
- */
-#ifdef __OpenBSD__
-#define DLT_OLD_PFLOG  17
-#define DLT_PFSYNC     18
-#endif
-#define DLT_PFLOG      117
-
-/*
- * Registered for Cisco-internal use.
- */
-#define DLT_CISCO_IOS  118
-
-/*
- * For 802.11 cards using the Prism II chips, with a link-layer
- * header including Prism monitor mode information plus an 802.11
- * header.
- */
-#define DLT_PRISM_HEADER       119
-
-/*
- * Reserved for Aironet 802.11 cards, with an Aironet link-layer header
- * (see Doug Ambrisko's FreeBSD patches).
- */
-#define DLT_AIRONET_HEADER     120
-
-/*
- * Reserved for Siemens HiPath HDLC.
- */
-#define DLT_HHDLC              121
-
-/*
- * This is for RFC 2625 IP-over-Fibre Channel.
- *
- * This is not for use with raw Fibre Channel, where the link-layer
- * header starts with a Fibre Channel frame header; it's for IP-over-FC,
- * where the link-layer header starts with an RFC 2625 Network_Header
- * field.
- */
-#define DLT_IP_OVER_FC         122
-
-/*
- * This is for Full Frontal ATM on Solaris with SunATM, with a
- * pseudo-header followed by an AALn PDU.
- *
- * There may be other forms of Full Frontal ATM on other OSes,
- * with different pseudo-headers.
- *
- * If ATM software returns a pseudo-header with VPI/VCI information
- * (and, ideally, packet type information, e.g. signalling, ILMI,
- * LANE, LLC-multiplexed traffic, etc.), it should not use
- * DLT_ATM_RFC1483, but should get a new DLT_ value, so tcpdump
- * and the like don't have to infer the presence or absence of a
- * pseudo-header and the form of the pseudo-header.
- */
-#define DLT_SUNATM             123     /* Solaris+SunATM */
-
-/* 
- * Reserved as per request from Kent Dahlgren <kent@praesum.com>
- * for private use.
- */
-#define DLT_RIO                 124     /* RapidIO */
-#define DLT_PCI_EXP             125     /* PCI Express */
-#define DLT_AURORA              126     /* Xilinx Aurora link layer */
-
-/*
- * Header for 802.11 plus a number of bits of link-layer information
- * including radio information, used by some recent BSD drivers as
- * well as the madwifi Atheros driver for Linux.
- */
-#define DLT_IEEE802_11_RADIO   127     /* 802.11 plus radiotap radio header */
-
-/*
- * Reserved for the TZSP encapsulation, as per request from
- * Chris Waters <chris.waters@networkchemistry.com>
- * TZSP is a generic encapsulation for any other link type,
- * which includes a means to include meta-information
- * with the packet, e.g. signal strength and channel
- * for 802.11 packets.
- */
-#define DLT_TZSP                128     /* Tazmen Sniffer Protocol */
-
-/*
- * BSD's ARCNET headers have the source host, destination host,
- * and type at the beginning of the packet; that's what's handed
- * up to userland via BPF.
- *
- * Linux's ARCNET headers, however, have a 2-byte offset field
- * between the host IDs and the type; that's what's handed up
- * to userland via PF_PACKET sockets.
- *
- * We therefore have to have separate DLT_ values for them.
- */
-#define DLT_ARCNET_LINUX       129     /* ARCNET */
-
-/*
- * Juniper-private data link types, as per request from
- * Hannes Gredler <hannes@juniper.net>.  The DLT_s are used
- * for passing on chassis-internal metainformation such as
- * QOS profiles, etc..
- */
-#define DLT_JUNIPER_MLPPP       130
-#define DLT_JUNIPER_MLFR        131
-#define DLT_JUNIPER_ES          132
-#define DLT_JUNIPER_GGSN        133
-#define DLT_JUNIPER_MFR         134
-#define DLT_JUNIPER_ATM2        135
-#define DLT_JUNIPER_SERVICES    136
-#define DLT_JUNIPER_ATM1        137
-
-/*
- * Apple IP-over-IEEE 1394, as per a request from Dieter Siegmund
- * <dieter@apple.com>.  The header that's presented is an Ethernet-like
- * header:
- *
- *     #define FIREWIRE_EUI64_LEN      8
- *     struct firewire_header {
- *             u_char  firewire_dhost[FIREWIRE_EUI64_LEN];
- *             u_char  firewire_shost[FIREWIRE_EUI64_LEN];
- *             u_short firewire_type;
- *     };
- *
- * with "firewire_type" being an Ethernet type value, rather than,
- * for example, raw GASP frames being handed up.
- */
-#define DLT_APPLE_IP_OVER_IEEE1394     138
-
-/*
- * Various SS7 encapsulations, as per a request from Jeff Morriss
- * <jeff.morriss[AT]ulticom.com> and subsequent discussions.
- */
-#define DLT_MTP2_WITH_PHDR     139     /* pseudo-header with various info, followed by MTP2 */
-#define DLT_MTP2               140     /* MTP2, without pseudo-header */
-#define DLT_MTP3               141     /* MTP3, without pseudo-header or MTP2 */
-#define DLT_SCCP               142     /* SCCP, without pseudo-header or MTP2 or MTP3 */
-
-/*
- * DOCSIS MAC frames.
- */
-#define DLT_DOCSIS             143
-
-/*
- * Linux-IrDA packets. Protocol defined at http://www.irda.org.
- * Those packets include IrLAP headers and above (IrLMP...), but
- * don't include Phy framing (SOF/EOF/CRC & byte stuffing), because Phy
- * framing can be handled by the hardware and depend on the bitrate.
- * This is exactly the format you would get capturing on a Linux-IrDA
- * interface (irdaX), but not on a raw serial port.
- * Note the capture is done in "Linux-cooked" mode, so each packet include
- * a fake packet header (struct sll_header). This is because IrDA packet
- * decoding is dependant on the direction of the packet (incomming or
- * outgoing).
- * When/if other platform implement IrDA capture, we may revisit the
- * issue and define a real DLT_IRDA...
- * Jean II
- */
-#define DLT_LINUX_IRDA         144
-
-/*
- * Reserved for IBM SP switch and IBM Next Federation switch.
- */
-#define DLT_IBM_SP             145
-#define DLT_IBM_SN             146
-
-/*
- * Reserved for private use.  If you have some link-layer header type
- * that you want to use within your organization, with the capture files
- * using that link-layer header type not ever be sent outside your
- * organization, you can use these values.
- *
- * No libpcap release will use these for any purpose, nor will any
- * tcpdump release use them, either.
- *
- * Do *NOT* use these in capture files that you expect anybody not using
- * your private versions of capture-file-reading tools to read; in
- * particular, do *NOT* use them in products, otherwise you may find that
- * people won't be able to use tcpdump, or snort, or Ethereal, or... to
- * read capture files from your firewall/intrusion detection/traffic
- * monitoring/etc. appliance, or whatever product uses that DLT_ value,
- * and you may also find that the developers of those applications will
- * not accept patches to let them read those files.
- *
- * Also, do not use them if somebody might send you a capture using them
- * for *their* private type and tools using them for *your* private type
- * would have to read them.
- *
- * Instead, ask "tcpdump-workers@lists.tcpdump.org" for a new DLT_ value,
- * as per the comment above, and use the type you're given.
- */
-#define DLT_USER0              147
-#define DLT_USER1              148
-#define DLT_USER2              149
-#define DLT_USER3              150
-#define DLT_USER4              151
-#define DLT_USER5              152
-#define DLT_USER6              153
-#define DLT_USER7              154
-#define DLT_USER8              155
-#define DLT_USER9              156
-#define DLT_USER10             157
-#define DLT_USER11             158
-#define DLT_USER12             159
-#define DLT_USER13             160
-#define DLT_USER14             161
-#define DLT_USER15             162
-
-/*
- * For future use with 802.11 captures - defined by AbsoluteValue
- * Systems to store a number of bits of link-layer information
- * including radio information:
- *
- *     http://www.shaftnet.org/~pizza/software/capturefrm.txt
- *
- * but it might be used by some non-AVS drivers now or in the
- * future.
- */
-#define DLT_IEEE802_11_RADIO_AVS 163   /* 802.11 plus AVS radio header */
-
-/*
- * Juniper-private data link type, as per request from
- * Hannes Gredler <hannes@juniper.net>.  The DLT_s are used
- * for passing on chassis-internal metainformation such as
- * QOS profiles, etc..
- */
-#define DLT_JUNIPER_MONITOR     164
-
-/*
- * Reserved for BACnet MS/TP.
- */
-#define DLT_BACNET_MS_TP       165
-
-/*
- * Another PPP variant as per request from Karsten Keil <kkeil@suse.de>.
- *
- * This is used in some OSes to allow a kernel socket filter to distinguish
- * between incoming and outgoing packets, on a socket intended to
- * supply pppd with outgoing packets so it can do dial-on-demand and
- * hangup-on-lack-of-demand; incoming packets are filtered out so they
- * don't cause pppd to hold the connection up (you don't want random
- * input packets such as port scans, packets from old lost connections,
- * etc. to force the connection to stay up).
- *
- * The first byte of the PPP header (0xff03) is modified to accomodate
- * the direction - 0x00 = IN, 0x01 = OUT.
- */
-#define DLT_PPP_PPPD           166
-
-/*
- * Names for backwards compatibility with older versions of some PPP
- * software; new software should use DLT_PPP_PPPD.
- */
-#define DLT_PPP_WITH_DIRECTION DLT_PPP_PPPD
-#define DLT_LINUX_PPP_WITHDIRECTION    DLT_PPP_PPPD
-
-/*
- * Juniper-private data link type, as per request from
- * Hannes Gredler <hannes@juniper.net>.  The DLT_s are used
- * for passing on chassis-internal metainformation such as
- * QOS profiles, cookies, etc..
- */
-#define DLT_JUNIPER_PPPOE       167
-#define DLT_JUNIPER_PPPOE_ATM   168
-
-#define DLT_GPRS_LLC           169     /* GPRS LLC */
-#define DLT_GPF_T              170     /* GPF-T (ITU-T G.7041/Y.1303) */
-#define DLT_GPF_F              171     /* GPF-F (ITU-T G.7041/Y.1303) */
-
-/*
- * Requested by Oolan Zimmer <oz@gcom.com> for use in Gcom's T1/E1 line
- * monitoring equipment.
- */
-#define DLT_GCOM_T1E1          172
-#define DLT_GCOM_SERIAL                173
-
-/*
- * Juniper-private data link type, as per request from
- * Hannes Gredler <hannes@juniper.net>.  The DLT_ is used
- * for internal communication to Physical Interface Cards (PIC)
- */
-#define DLT_JUNIPER_PIC_PEER    174
-
-/*
- * Link types requested by Gregor Maier <gregor@endace.com> of Endace
- * Measurement Systems.  They add an ERF header (see
- * http://www.endace.com/support/EndaceRecordFormat.pdf) in front of
- * the link-layer header.
- */
-#define DLT_ERF_ETH            175     /* Ethernet */
-#define DLT_ERF_POS            176     /* Packet-over-SONET */
-
-/*
- * Requested by Daniele Orlandi <daniele@orlandi.com> for raw LAPD
- * for vISDN (http://www.orlandi.com/visdn/).  Its link-layer header
- * includes additional information before the LAPD header, so it's
- * not necessarily a generic LAPD header.
- */
-#define DLT_LINUX_LAPD         177
-
-/*
- * Juniper-private data link type, as per request from
- * Hannes Gredler <hannes@juniper.net>. 
- * The DLT_ are used for prepending meta-information
- * like interface index, interface name
- * before standard Ethernet, PPP, Frelay & C-HDLC Frames
- */
-#define DLT_JUNIPER_ETHER       178
-#define DLT_JUNIPER_PPP         179
-#define DLT_JUNIPER_FRELAY      180
-#define DLT_JUNIPER_CHDLC       181
-
-/*
- * Multi Link Frame Relay (FRF.16)
- */
-#define DLT_MFR                 182
-
-/*
- * Juniper-private data link type, as per request from
- * Hannes Gredler <hannes@juniper.net>. 
- * The DLT_ is used for internal communication with a
- * voice Adapter Card (PIC)
- */
-#define DLT_JUNIPER_VP          183
-
-/*
- * Arinc 429 frames.
- * DLT_ requested by Gianluca Varenni <gianluca.varenni@cacetech.com>.
- * Every frame contains a 32bit A429 label.
- * More documentation on Arinc 429 can be found at
- * http://www.condoreng.com/support/downloads/tutorials/ARINCTutorial.pdf
- */
-#define DLT_A429                184
-
-/*
- * Arinc 653 Interpartition Communication messages.
- * DLT_ requested by Gianluca Varenni <gianluca.varenni@cacetech.com>.
- * Please refer to the A653-1 standard for more information.
- */
-#define DLT_A653_ICM            185
-
-/*
- * USB packets, beginning with a USB setup header; requested by
- * Paolo Abeni <paolo.abeni@email.it>.
- */
-#define DLT_USB                        186
-
-/*
- * Bluetooth HCI UART transport layer (part H:4); requested by
- * Paolo Abeni.
- */
-#define DLT_BLUETOOTH_HCI_H4   187
-
-/*
- * IEEE 802.16 MAC Common Part Sublayer; requested by Maria Cruz
- * <cruz_petagay@bah.com>.
- */
-#define DLT_IEEE802_16_MAC_CPS 188
-
-/*
- * USB packets, beginning with a Linux USB header; requested by
- * Paolo Abeni <paolo.abeni@email.it>.
- */
-#define DLT_USB_LINUX          189
-
-/*
- * Controller Area Network (CAN) v. 2.0B packets.
- * DLT_ requested by Gianluca Varenni <gianluca.varenni@cacetech.com>.
- * Used to dump CAN packets coming from a CAN Vector board.
- * More documentation on the CAN v2.0B frames can be found at
- * http://www.can-cia.org/downloads/?269
- */
-#define DLT_CAN20B              190
-
-/*
- * IEEE 802.15.4, with address fields padded, as is done by Linux
- * drivers; requested by Juergen Schimmer.
- */
-#define DLT_IEEE802_15_4_LINUX 191
-
-/*
- * Per Packet Information encapsulated packets.
- * DLT_ requested by Gianluca Varenni <gianluca.varenni@cacetech.com>.
- */
-#define DLT_PPI                        192
-
-/*
- * Header for 802.16 MAC Common Part Sublayer plus a radiotap radio header;
- * requested by Charles Clancy.
- */
-#define DLT_IEEE802_16_MAC_CPS_RADIO   193
-
-/*
- * Juniper-private data link type, as per request from
- * Hannes Gredler <hannes@juniper.net>. 
- * The DLT_ is used for internal communication with a
- * integrated service module (ISM).
- */
-#define DLT_JUNIPER_ISM         194
-
-/*
- * IEEE 802.15.4, exactly as it appears in the spec (no padding, no
- * nothing); requested by Mikko Saarnivala <mikko.saarnivala@sensinode.com>.
- */
-#define DLT_IEEE802_15_4       195
-
-/*
- * Various link-layer types, with a pseudo-header, for SITA
- * (http://www.sita.aero/); requested by Fulko Hew (fulko.hew@gmail.com).
- */
-#define DLT_SITA               196
-
-/*
- * Various link-layer types, with a pseudo-header, for Endace DAG cards;
- * encapsulates Endace ERF records.  Requested by Stephen Donnelly
- * <stephen@endace.com>.
- */
-#define DLT_ERF                        197
-
-/*
- * Special header prepended to Ethernet packets when capturing from a
- * u10 Networks board.  Requested by Phil Mulholland
- * <phil@u10networks.com>.
- */
-#define DLT_RAIF1              198
-
-/*
- * IPMB packet for IPMI, beginning with the I2C slave address, followed
- * by the netFn and LUN, etc..  Requested by Chanthy Toeung
- * <chanthy.toeung@ca.kontron.com>.
- */
-#define DLT_IPMB               199
-
-/*
- * Juniper-private data link type, as per request from
- * Hannes Gredler <hannes@juniper.net>. 
- * The DLT_ is used for capturing data on a secure tunnel interface.
- */
-#define DLT_JUNIPER_ST          200
-
-/*
- * Bluetooth HCI UART transport layer (part H:4), with pseudo-header
- * that includes direction information; requested by Paolo Abeni.
- */
-#define DLT_BLUETOOTH_HCI_H4_WITH_PHDR 201
-
-/*
- * AX.25 packet with a 1-byte KISS header; see
- *
- *     http://www.ax25.net/kiss.htm
- *
- * as per Richard Stearn <richard@rns-stearn.demon.co.uk>.
- */
-#define DLT_AX25_KISS          202
-
-/*
- * LAPD packets from an ISDN channel, starting with the address field,
- * with no pseudo-header.
- * Requested by Varuna De Silva <varunax@gmail.com>.
- */
-#define DLT_LAPD               203
-
-/*
- * Variants of various link-layer headers, with a one-byte direction
- * pseudo-header prepended - zero means "received by this host",
- * non-zero (any non-zero value) means "sent by this host" - as per
- * Will Barker <w.barker@zen.co.uk>.
- */
-#define DLT_PPP_WITH_DIR       204     /* PPP - don't confuse with DLT_PPP_WITH_DIRECTION */
-#define DLT_C_HDLC_WITH_DIR    205     /* Cisco HDLC */
-#define DLT_FRELAY_WITH_DIR    206     /* Frame Relay */
-#define DLT_LAPB_WITH_DIR      207     /* LAPB */
-
-/*
- * 208 is reserved for an as-yet-unspecified proprietary link-layer
- * type, as requested by Will Barker.
- */
-
-/*
- * IPMB with a Linux-specific pseudo-header; as requested by Alexey Neyman
- * <avn@pigeonpoint.com>.
- */
-#define DLT_IPMB_LINUX         209
-
-/*
- * FlexRay automotive bus - http://www.flexray.com/ - as requested
- * by Hannes Kaelber <hannes.kaelber@x2e.de>.
- */
-#define DLT_FLEXRAY            210
-
-/*
- * Media Oriented Systems Transport (MOST) bus for multimedia
- * transport - http://www.mostcooperation.com/ - as requested
- * by Hannes Kaelber <hannes.kaelber@x2e.de>.
- */
-#define DLT_MOST               211
-
-/*
- * Local Interconnect Network (LIN) bus for vehicle networks -
- * http://www.lin-subbus.org/ - as requested by Hannes Kaelber
- * <hannes.kaelber@x2e.de>.
- */
-#define DLT_LIN                        212
-
-/*
- * X2E-private data link type used for serial line capture,
- * as requested by Hannes Kaelber <hannes.kaelber@x2e.de>.
- */
-#define DLT_X2E_SERIAL         213
-
-/*
- * X2E-private data link type used for the Xoraya data logger
- * family, as requested by Hannes Kaelber <hannes.kaelber@x2e.de>.
- */
-#define DLT_X2E_XORAYA         214
-
-/*
- * IEEE 802.15.4, exactly as it appears in the spec (no padding, no
- * nothing), but with the PHY-level data for non-ASK PHYs (4 octets
- * of 0 as preamble, one octet of SFD, one octet of frame length+
- * reserved bit, and then the MAC-layer data, starting with the
- * frame control field).
- *
- * Requested by Max Filippov <jcmvbkbc@gmail.com>.
- */
-#define DLT_IEEE802_15_4_NONASK_PHY    215
-
-
-/*
- * DLT and savefile link type values are split into a class and
- * a member of that class.  A class value of 0 indicates a regular
- * DLT_/LINKTYPE_ value.
- */
-#define DLT_CLASS(x)           ((x) & 0x03ff0000)
-
-/*
- * NetBSD-specific generic "raw" link type.  The class value indicates
- * that this is the generic raw type, and the lower 16 bits are the
- * address family we're dealing with.  Those values are NetBSD-specific;
- * do not assume that they correspond to AF_ values for your operating
- * system.
- */
-#define        DLT_CLASS_NETBSD_RAWAF  0x02240000
-#define        DLT_NETBSD_RAWAF(af)    (DLT_CLASS_NETBSD_RAWAF | (af))
-#define        DLT_NETBSD_RAWAF_AF(x)  ((x) & 0x0000ffff)
-#define        DLT_IS_NETBSD_RAWAF(x)  (DLT_CLASS(x) == DLT_CLASS_NETBSD_RAWAF)
-
-
-/*
- * The instruction encodings.
- */
-/* instruction classes */
-#define BPF_CLASS(code) ((code) & 0x07)
-#define                BPF_LD          0x00
-#define                BPF_LDX         0x01
-#define                BPF_ST          0x02
-#define                BPF_STX         0x03
-#define                BPF_ALU         0x04
-#define                BPF_JMP         0x05
-#define                BPF_RET         0x06
-#define                BPF_MISC        0x07
-
-/* ld/ldx fields */
-#define BPF_SIZE(code) ((code) & 0x18)
-#define                BPF_W           0x00
-#define                BPF_H           0x08
-#define                BPF_B           0x10
-#define BPF_MODE(code) ((code) & 0xe0)
-#define                BPF_IMM         0x00
-#define                BPF_ABS         0x20
-#define                BPF_IND         0x40
-#define                BPF_MEM         0x60
-#define                BPF_LEN         0x80
-#define                BPF_MSH         0xa0
-
-/* alu/jmp fields */
-#define BPF_OP(code)   ((code) & 0xf0)
-#define                BPF_ADD         0x00
-#define                BPF_SUB         0x10
-#define                BPF_MUL         0x20
-#define                BPF_DIV         0x30
-#define                BPF_OR          0x40
-#define                BPF_AND         0x50
-#define                BPF_LSH         0x60
-#define                BPF_RSH         0x70
-#define                BPF_NEG         0x80
-#define                BPF_JA          0x00
-#define                BPF_JEQ         0x10
-#define                BPF_JGT         0x20
-#define                BPF_JGE         0x30
-#define                BPF_JSET        0x40
-#define BPF_SRC(code)  ((code) & 0x08)
-#define                BPF_K           0x00
-#define                BPF_X           0x08
-
-/* ret - BPF_K and BPF_X also apply */
-#define BPF_RVAL(code) ((code) & 0x18)
-#define                BPF_A           0x10
-
-/* misc */
-#define BPF_MISCOP(code) ((code) & 0xf8)
-#define                BPF_TAX         0x00
-#define                BPF_TXA         0x80
-
-/*
- * The instruction data structure.
- */
-struct bpf_insn {
-       u_short code;
-       u_char  jt;
-       u_char  jf;
-       bpf_u_int32 k;
-};
-
-/*
- * Macros for insn array initializers.
- */
-#define BPF_STMT(code, k) { (u_short)(code), 0, 0, k }
-#define BPF_JUMP(code, k, jt, jf) { (u_short)(code), jt, jf, k }
-
-#if __STDC__ || defined(__cplusplus)
-extern int bpf_validate(const struct bpf_insn *, int);
-extern u_int bpf_filter(const struct bpf_insn *, const u_char *, u_int, u_int);
-#else
-extern int bpf_validate();
-extern u_int bpf_filter();
-#endif
-
-/*
- * Number of scratch memory words (for BPF_LD|BPF_MEM and BPF_ST).
- */
-#define BPF_MEMWORDS 16
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WinPCap/pcap/namedb.h b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WinPCap/pcap/namedb.h
deleted file mode 100644 (file)
index 9002c75..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright (c) 1994, 1996
- *     The Regents of the University of California.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the Computer Systems
- *     Engineering Group at Lawrence Berkeley Laboratory.
- * 4. Neither the name of the University nor of the Laboratory may be used
- *    to endorse or promote products derived from this software without
- *    specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#) $Header: /tcpdump/master/libpcap/pcap/namedb.h,v 1.1 2006/10/04 18:09:22 guy Exp $ (LBL)
- */
-
-#ifndef lib_pcap_namedb_h
-#define lib_pcap_namedb_h
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * As returned by the pcap_next_etherent()
- * XXX this stuff doesn't belong in this interface, but this
- * library already must do name to address translation, so
- * on systems that don't have support for /etc/ethers, we
- * export these hooks since they'll
- */
-struct pcap_etherent {
-       u_char addr[6];
-       char name[122];
-};
-#ifndef PCAP_ETHERS_FILE
-#define PCAP_ETHERS_FILE "/etc/ethers"
-#endif
-struct pcap_etherent *pcap_next_etherent(FILE *);
-u_char *pcap_ether_hostton(const char*);
-u_char *pcap_ether_aton(const char *);
-
-bpf_u_int32 **pcap_nametoaddr(const char *);
-#ifdef INET6
-struct addrinfo *pcap_nametoaddrinfo(const char *);
-#endif
-bpf_u_int32 pcap_nametonetaddr(const char *);
-
-int    pcap_nametoport(const char *, int *, int *);
-int    pcap_nametoportrange(const char *, int *, int *, int *);
-int    pcap_nametoproto(const char *);
-int    pcap_nametoeproto(const char *);
-int    pcap_nametollc(const char *);
-/*
- * If a protocol is unknown, PROTO_UNDEF is returned.
- * Also, pcap_nametoport() returns the protocol along with the port number.
- * If there are ambiguous entried in /etc/services (i.e. domain
- * can be either tcp or udp) PROTO_UNDEF is returned.
- */
-#define PROTO_UNDEF            -1
-
-/* XXX move these to pcap-int.h? */
-int __pcap_atodn(const char *, bpf_u_int32 *);
-int __pcap_atoin(const char *, bpf_u_int32 *);
-u_short        __pcap_nametodnaddr(const char *);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WinPCap/pcap/pcap.h b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WinPCap/pcap/pcap.h
deleted file mode 100644 (file)
index ad8fc40..0000000
+++ /dev/null
@@ -1,407 +0,0 @@
-/* -*- Mode: c; tab-width: 8; indent-tabs-mode: 1; c-basic-offset: 8; -*- */
-/*
- * Copyright (c) 1993, 1994, 1995, 1996, 1997
- *     The Regents of the University of California.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the Computer Systems
- *     Engineering Group at Lawrence Berkeley Laboratory.
- * 4. Neither the name of the University nor of the Laboratory may be used
- *    to endorse or promote products derived from this software without
- *    specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#) $Header: /tcpdump/master/libpcap/pcap/pcap.h,v 1.4.2.11 2008-10-06 15:38:39 gianluca Exp $ (LBL)
- */
-
-#ifndef lib_pcap_pcap_h
-#define lib_pcap_pcap_h
-
-#if defined(WIN32)
-  #include <pcap-stdinc.h>
-#elif defined(MSDOS)
-  #include <sys/types.h>
-  #include <sys/socket.h>  /* u_int, u_char etc. */
-#else /* UN*X */
-  #include <sys/types.h>
-  #include <sys/time.h>
-#endif /* WIN32/MSDOS/UN*X */
-
-#ifndef PCAP_DONT_INCLUDE_PCAP_BPF_H
-#include <pcap/bpf.h>
-#endif
-
-#include <stdio.h>
-
-#ifdef HAVE_REMOTE
-       // We have to define the SOCKET here, although it has been defined in sockutils.h
-       // This is to avoid the distribution of the 'sockutils.h' file around
-       // (for example in the WinPcap developer's pack)
-       #ifndef SOCKET
-               #ifdef WIN32
-                       #define SOCKET unsigned int
-               #else
-                       #define SOCKET int
-               #endif
-       #endif
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define PCAP_VERSION_MAJOR 2
-#define PCAP_VERSION_MINOR 4
-
-#define PCAP_ERRBUF_SIZE 256
-
-/*
- * Compatibility for systems that have a bpf.h that
- * predates the bpf typedefs for 64-bit support.
- */
-#if BPF_RELEASE - 0 < 199406
-typedef        int bpf_int32;
-typedef        u_int bpf_u_int32;
-#endif
-
-typedef struct pcap pcap_t;
-typedef struct pcap_dumper pcap_dumper_t;
-typedef struct pcap_if pcap_if_t;
-typedef struct pcap_addr pcap_addr_t;
-
-/*
- * The first record in the file contains saved values for some
- * of the flags used in the printout phases of tcpdump.
- * Many fields here are 32 bit ints so compilers won't insert unwanted
- * padding; these files need to be interchangeable across architectures.
- *
- * Do not change the layout of this structure, in any way (this includes
- * changes that only affect the length of fields in this structure).
- *
- * Also, do not change the interpretation of any of the members of this
- * structure, in any way (this includes using values other than
- * LINKTYPE_ values, as defined in "savefile.c", in the "linktype"
- * field).
- *
- * Instead:
- *
- *     introduce a new structure for the new format, if the layout
- *     of the structure changed;
- *
- *     send mail to "tcpdump-workers@lists.tcpdump.org", requesting
- *     a new magic number for your new capture file format, and, when
- *     you get the new magic number, put it in "savefile.c";
- *
- *     use that magic number for save files with the changed file
- *     header;
- *
- *     make the code in "savefile.c" capable of reading files with
- *     the old file header as well as files with the new file header
- *     (using the magic number to determine the header format).
- *
- * Then supply the changes as a patch at
- *
- *     http://sourceforge.net/projects/libpcap/
- *
- * so that future versions of libpcap and programs that use it (such as
- * tcpdump) will be able to read your new capture file format.
- */
-struct pcap_file_header {
-       bpf_u_int32 magic;
-       u_short version_major;
-       u_short version_minor;
-       bpf_int32 thiszone;     /* gmt to local correction */
-       bpf_u_int32 sigfigs;    /* accuracy of timestamps */
-       bpf_u_int32 snaplen;    /* max length saved portion of each pkt */
-       bpf_u_int32 linktype;   /* data link type (LINKTYPE_*) */
-};
-
-/*
- * Macros for the value returned by pcap_datalink_ext().
- * 
- * If LT_FCS_LENGTH_PRESENT(x) is true, the LT_FCS_LENGTH(x) macro
- * gives the FCS length of packets in the capture.
- */
-#define LT_FCS_LENGTH_PRESENT(x)       ((x) & 0x04000000)
-#define LT_FCS_LENGTH(x)               (((x) & 0xF0000000) >> 28)
-#define LT_FCS_DATALINK_EXT(x)         ((((x) & 0xF) << 28) | 0x04000000)
-
-typedef enum {
-       PCAP_D_INOUT = 0,
-       PCAP_D_IN,
-       PCAP_D_OUT
-} pcap_direction_t;
-
-/*
- * Generic per-packet information, as supplied by libpcap.
- *
- * The time stamp can and should be a "struct timeval", regardless of
- * whether your system supports 32-bit tv_sec in "struct timeval",
- * 64-bit tv_sec in "struct timeval", or both if it supports both 32-bit
- * and 64-bit applications.  The on-disk format of savefiles uses 32-bit
- * tv_sec (and tv_usec); this structure is irrelevant to that.  32-bit
- * and 64-bit versions of libpcap, even if they're on the same platform,
- * should supply the appropriate version of "struct timeval", even if
- * that's not what the underlying packet capture mechanism supplies.
- */
-struct pcap_pkthdr {
-       struct timeval ts;      /* time stamp */
-       bpf_u_int32 caplen;     /* length of portion present */
-       bpf_u_int32 len;        /* length this packet (off wire) */
-};
-
-/*
- * As returned by the pcap_stats()
- */
-struct pcap_stat {
-       u_int ps_recv;          /* number of packets received */
-       u_int ps_drop;          /* number of packets dropped */
-       u_int ps_ifdrop;        /* drops by interface XXX not yet supported */
-#ifdef HAVE_REMOTE
-       u_int ps_capt;          /* number of packets that are received by the application; please get rid off the Win32 ifdef */
-       u_int ps_sent;          /* number of packets sent by the server on the network */
-       u_int ps_netdrop;       /* number of packets lost on the network */
-#endif /* HAVE_REMOTE */
-};
-
-#ifdef MSDOS
-/*
- * As returned by the pcap_stats_ex()
- */
-struct pcap_stat_ex {
-       u_long  rx_packets;        /* total packets received       */
-       u_long  tx_packets;        /* total packets transmitted    */
-       u_long  rx_bytes;          /* total bytes received         */
-       u_long  tx_bytes;          /* total bytes transmitted      */
-       u_long  rx_errors;         /* bad packets received         */
-       u_long  tx_errors;         /* packet transmit problems     */
-       u_long  rx_dropped;        /* no space in Rx buffers       */
-       u_long  tx_dropped;        /* no space available for Tx    */
-       u_long  multicast;         /* multicast packets received   */
-       u_long  collisions;
-
-       /* detailed rx_errors: */
-       u_long  rx_length_errors;
-       u_long  rx_over_errors;    /* receiver ring buff overflow  */
-       u_long  rx_crc_errors;     /* recv'd pkt with crc error    */
-       u_long  rx_frame_errors;   /* recv'd frame alignment error */
-       u_long  rx_fifo_errors;    /* recv'r fifo overrun          */
-       u_long  rx_missed_errors;  /* recv'r missed packet         */
-
-       /* detailed tx_errors */
-       u_long  tx_aborted_errors;
-       u_long  tx_carrier_errors;
-       u_long  tx_fifo_errors;
-       u_long  tx_heartbeat_errors;
-       u_long  tx_window_errors;
-     };
-#endif
-
-/*
- * Item in a list of interfaces.
- */
-struct pcap_if {
-       struct pcap_if *next;
-       char *name;             /* name to hand to "pcap_open_live()" */
-       char *description;      /* textual description of interface, or NULL */
-       struct pcap_addr *addresses;
-       bpf_u_int32 flags;      /* PCAP_IF_ interface flags */
-};
-
-#define PCAP_IF_LOOPBACK       0x00000001      /* interface is loopback */
-
-/*
- * Representation of an interface address.
- */
-struct pcap_addr {
-       struct pcap_addr *next;
-       struct sockaddr *addr;          /* address */
-       struct sockaddr *netmask;       /* netmask for that address */
-       struct sockaddr *broadaddr;     /* broadcast address for that address */
-       struct sockaddr *dstaddr;       /* P2P destination address for that address */
-};
-
-typedef void (*pcap_handler)(u_char *, const struct pcap_pkthdr *,
-                            const u_char *);
-
-/*
- * Error codes for the pcap API.
- * These will all be negative, so you can check for the success or
- * failure of a call that returns these codes by checking for a
- * negative value.
- */
-#define PCAP_ERROR                     -1      /* generic error code */
-#define PCAP_ERROR_BREAK               -2      /* loop terminated by pcap_breakloop */
-#define PCAP_ERROR_NOT_ACTIVATED       -3      /* the capture needs to be activated */
-#define PCAP_ERROR_ACTIVATED           -4      /* the operation can't be performed on already activated captures */
-#define PCAP_ERROR_NO_SUCH_DEVICE      -5      /* no such device exists */
-#define PCAP_ERROR_RFMON_NOTSUP                -6      /* this device doesn't support rfmon (monitor) mode */
-#define PCAP_ERROR_NOT_RFMON           -7      /* operation supported only in monitor mode */
-#define PCAP_ERROR_PERM_DENIED         -8      /* no permission to open the device */
-#define PCAP_ERROR_IFACE_NOT_UP                -9      /* interface isn't up */
-
-/*
- * Warning codes for the pcap API.
- * These will all be positive and non-zero, so they won't look like
- * errors.
- */
-#define PCAP_WARNING                   1       /* generic warning code */
-#define PCAP_WARNING_PROMISC_NOTSUP    2       /* this device doesn't support promiscuous mode */
-
-char   *pcap_lookupdev(char *);
-int    pcap_lookupnet(const char *, bpf_u_int32 *, bpf_u_int32 *, char *);
-
-pcap_t *pcap_create(const char *, char *);
-int    pcap_set_snaplen(pcap_t *, int);
-int    pcap_set_promisc(pcap_t *, int);
-int    pcap_can_set_rfmon(pcap_t *);
-int    pcap_set_rfmon(pcap_t *, int);
-int    pcap_set_timeout(pcap_t *, int);
-int    pcap_set_buffer_size(pcap_t *, int);
-int    pcap_activate(pcap_t *);
-
-pcap_t *pcap_open_live(const char *, int, int, int, char *);
-pcap_t *pcap_open_dead(int, int);
-pcap_t *pcap_open_offline(const char *, char *);
-#if defined(WIN32)
-pcap_t  *pcap_hopen_offline(intptr_t, char *);
-#if !defined(LIBPCAP_EXPORTS)
-#define pcap_fopen_offline(f,b) \
-       pcap_hopen_offline(_get_osfhandle(_fileno(f)), b)
-#else /*LIBPCAP_EXPORTS*/
-static pcap_t *pcap_fopen_offline(FILE *, char *);
-#endif
-#else /*WIN32*/
-pcap_t *pcap_fopen_offline(FILE *, char *);
-#endif /*WIN32*/
-
-void   pcap_close(pcap_t *);
-int    pcap_loop(pcap_t *, int, pcap_handler, u_char *);
-int    pcap_dispatch(pcap_t *, int, pcap_handler, u_char *);
-const u_char*
-       pcap_next(pcap_t *, struct pcap_pkthdr *);
-int    pcap_next_ex(pcap_t *, struct pcap_pkthdr **, const u_char **);
-void   pcap_breakloop(pcap_t *);
-int    pcap_stats(pcap_t *, struct pcap_stat *);
-int    pcap_setfilter(pcap_t *, struct bpf_program *);
-int    pcap_setdirection(pcap_t *, pcap_direction_t);
-int    pcap_getnonblock(pcap_t *, char *);
-int    pcap_setnonblock(pcap_t *, int, char *);
-int    pcap_inject(pcap_t *, const void *, size_t);
-int    pcap_sendpacket(pcap_t *, const u_char *, int);
-const char *pcap_statustostr(int);
-const char *pcap_strerror(int);
-char   *pcap_geterr(pcap_t *);
-void   pcap_perror(pcap_t *, char *);
-int    pcap_compile(pcap_t *, struct bpf_program *, const char *, int,
-           bpf_u_int32);
-int    pcap_compile_nopcap(int, int, struct bpf_program *,
-           const char *, int, bpf_u_int32);
-void   pcap_freecode(struct bpf_program *);
-int    pcap_offline_filter(struct bpf_program *, const struct pcap_pkthdr *,
-           const u_char *);
-int    pcap_datalink(pcap_t *);
-int    pcap_datalink_ext(pcap_t *);
-int    pcap_list_datalinks(pcap_t *, int **);
-int    pcap_set_datalink(pcap_t *, int);
-void   pcap_free_datalinks(int *);
-int    pcap_datalink_name_to_val(const char *);
-const char *pcap_datalink_val_to_name(int);
-const char *pcap_datalink_val_to_description(int);
-int    pcap_snapshot(pcap_t *);
-int    pcap_is_swapped(pcap_t *);
-int    pcap_major_version(pcap_t *);
-int    pcap_minor_version(pcap_t *);
-
-/* XXX */
-FILE   *pcap_file(pcap_t *);
-int    pcap_fileno(pcap_t *);
-
-pcap_dumper_t *pcap_dump_open(pcap_t *, const char *);
-pcap_dumper_t *pcap_dump_fopen(pcap_t *, FILE *fp);
-FILE   *pcap_dump_file(pcap_dumper_t *);
-long   pcap_dump_ftell(pcap_dumper_t *);
-int    pcap_dump_flush(pcap_dumper_t *);
-void   pcap_dump_close(pcap_dumper_t *);
-void   pcap_dump(u_char *, const struct pcap_pkthdr *, const u_char *);
-
-int    pcap_findalldevs(pcap_if_t **, char *);
-void   pcap_freealldevs(pcap_if_t *);
-
-const char *pcap_lib_version(void);
-
-/* XXX this guy lives in the bpf tree */
-u_int  bpf_filter(const struct bpf_insn *, const u_char *, u_int, u_int);
-int    bpf_validate(const struct bpf_insn *f, int len);
-char   *bpf_image(const struct bpf_insn *, int);
-void   bpf_dump(const struct bpf_program *, int);
-
-#if defined(WIN32)
-
-/*
- * Win32 definitions
- */
-
-int pcap_setbuff(pcap_t *p, int dim);
-int pcap_setmode(pcap_t *p, int mode);
-int pcap_setmintocopy(pcap_t *p, int size);
-
-#ifdef WPCAP
-/* Include file with the wpcap-specific extensions */
-#include <Win32-Extensions.h>
-#endif /* WPCAP */
-
-#define MODE_CAPT 0
-#define MODE_STAT 1
-#define MODE_MON 2
-
-#elif defined(MSDOS)
-
-/*
- * MS-DOS definitions
- */
-
-int  pcap_stats_ex (pcap_t *, struct pcap_stat_ex *);
-void pcap_set_wait (pcap_t *p, void (*yield)(void), int wait);
-u_long pcap_mac_packets (void);
-
-#else /* UN*X */
-
-/*
- * UN*X definitions
- */
-
-int    pcap_get_selectable_fd(pcap_t *);
-
-#endif /* WIN32/MSDOS/UN*X */
-
-#ifdef HAVE_REMOTE
-/* Includes most of the public stuff that is needed for the remote capture */
-#include <remote-ext.h>
-#endif  /* HAVE_REMOTE */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WinPCap/pcap/sll.h b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WinPCap/pcap/sll.h
deleted file mode 100644 (file)
index e9d5452..0000000
+++ /dev/null
@@ -1,129 +0,0 @@
-/*-
- * Copyright (c) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from the Stanford/CMU enet packet filter,
- * (net/enet.c) distributed as part of 4.3BSD, and code contributed
- * to Berkeley by Steven McCanne and Van Jacobson both of Lawrence
- * Berkeley Laboratory.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *      This product includes software developed by the University of
- *      California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#) $Header: /tcpdump/master/libpcap/pcap/sll.h,v 1.2.2.1 2008-05-30 01:36:06 guy Exp $ (LBL)
- */
-
-/*
- * For captures on Linux cooked sockets, we construct a fake header
- * that includes:
- *
- *     a 2-byte "packet type" which is one of:
- *
- *             LINUX_SLL_HOST          packet was sent to us
- *             LINUX_SLL_BROADCAST     packet was broadcast
- *             LINUX_SLL_MULTICAST     packet was multicast
- *             LINUX_SLL_OTHERHOST     packet was sent to somebody else
- *             LINUX_SLL_OUTGOING      packet was sent *by* us;
- *
- *     a 2-byte Ethernet protocol field;
- *
- *     a 2-byte link-layer type;
- *
- *     a 2-byte link-layer address length;
- *
- *     an 8-byte source link-layer address, whose actual length is
- *     specified by the previous value.
- *
- * All fields except for the link-layer address are in network byte order.
- *
- * DO NOT change the layout of this structure, or change any of the
- * LINUX_SLL_ values below.  If you must change the link-layer header
- * for a "cooked" Linux capture, introduce a new DLT_ type (ask
- * "tcpdump-workers@lists.tcpdump.org" for one, so that you don't give it
- * a value that collides with a value already being used), and use the
- * new header in captures of that type, so that programs that can
- * handle DLT_LINUX_SLL captures will continue to handle them correctly
- * without any change, and so that capture files with different headers
- * can be told apart and programs that read them can dissect the
- * packets in them.
- */
-
-#ifndef lib_pcap_sll_h
-#define lib_pcap_sll_h
-
-/*
- * A DLT_LINUX_SLL fake link-layer header.
- */
-#define SLL_HDR_LEN    16              /* total header length */
-#define SLL_ADDRLEN    8               /* length of address field */
-
-struct sll_header {
-       u_int16_t sll_pkttype;          /* packet type */
-       u_int16_t sll_hatype;           /* link-layer address type */
-       u_int16_t sll_halen;            /* link-layer address length */
-       u_int8_t sll_addr[SLL_ADDRLEN]; /* link-layer address */
-       u_int16_t sll_protocol;         /* protocol */
-};
-
-/*
- * The LINUX_SLL_ values for "sll_pkttype"; these correspond to the
- * PACKET_ values on Linux, but are defined here so that they're
- * available even on systems other than Linux, and so that they
- * don't change even if the PACKET_ values change.
- */
-#define LINUX_SLL_HOST         0
-#define LINUX_SLL_BROADCAST    1
-#define LINUX_SLL_MULTICAST    2
-#define LINUX_SLL_OTHERHOST    3
-#define LINUX_SLL_OUTGOING     4
-
-/*
- * The LINUX_SLL_ values for "sll_protocol"; these correspond to the
- * ETH_P_ values on Linux, but are defined here so that they're
- * available even on systems other than Linux.  We assume, for now,
- * that the ETH_P_ values won't change in Linux; if they do, then:
- *
- *     if we don't translate them in "pcap-linux.c", capture files
- *     won't necessarily be readable if captured on a system that
- *     defines ETH_P_ values that don't match these values;
- *
- *     if we do translate them in "pcap-linux.c", that makes life
- *     unpleasant for the BPF code generator, as the values you test
- *     for in the kernel aren't the values that you test for when
- *     reading a capture file, so the fixup code run on BPF programs
- *     handed to the kernel ends up having to do more work.
- *
- * Add other values here as necessary, for handling packet types that
- * might show up on non-Ethernet, non-802.x networks.  (Not all the ones
- * in the Linux "if_ether.h" will, I suspect, actually show up in
- * captures.)
- */
-#define LINUX_SLL_P_802_3      0x0001  /* Novell 802.3 frames without 802.2 LLC header */
-#define LINUX_SLL_P_802_2      0x0004  /* 802.2 frames (not D/I/X Ethernet) */
-
-#endif
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WinPCap/pcap/usb.h b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WinPCap/pcap/usb.h
deleted file mode 100644 (file)
index adcd19c..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright (c) 2006 Paolo Abeni (Italy)
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote 
- * products derived from this software without specific prior written 
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * Basic USB data struct
- * By Paolo Abeni <paolo.abeni@email.it>
- *
- * @(#) $Header: /tcpdump/master/libpcap/pcap/usb.h,v 1.6 2007/09/22 02:06:08 guy Exp $
- */
-#ifndef _PCAP_USB_STRUCTS_H__
-#define _PCAP_USB_STRUCTS_H__
-
-/* 
- * possible transfer mode
- */
-#define URB_TRANSFER_IN   0x80
-#define URB_ISOCHRONOUS   0x0
-#define URB_INTERRUPT     0x1
-#define URB_CONTROL       0x2
-#define URB_BULK          0x3
-
-/*
- * possible event type
- */
-#define URB_SUBMIT        'S'
-#define URB_COMPLETE      'C'
-#define URB_ERROR         'E'
-
-/*
- * USB setup header as defined in USB specification.
- * Appears at the front of each packet in DLT_USB captures.
- */
-typedef struct _usb_setup {
-       u_int8_t bmRequestType;
-       u_int8_t bRequest;
-       u_int16_t wValue;
-       u_int16_t wIndex;
-       u_int16_t wLength;
-} pcap_usb_setup;
-
-
-/*
- * Header prepended by linux kernel to each event.
- * Appears at the front of each packet in DLT_USB_LINUX captures.
- */
-typedef struct _usb_header {
-       u_int64_t id;
-       u_int8_t event_type;
-       u_int8_t transfer_type;
-       u_int8_t endpoint_number;
-       u_int8_t device_address;
-       u_int16_t bus_id;
-       char setup_flag;/*if !=0 the urb setup header is not present*/
-       char data_flag; /*if !=0 no urb data is present*/
-       int64_t ts_sec;
-       int32_t ts_usec;
-       int32_t status;
-       u_int32_t urb_len;
-       u_int32_t data_len; /* amount of urb data really present in this event*/
-       pcap_usb_setup setup;
-} pcap_usb_header;
-
-
-#endif
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WinPCap/pcap/vlan.h b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WinPCap/pcap/vlan.h
deleted file mode 100644 (file)
index b0cb794..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-/*-
- * Copyright (c) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
- *     The Regents of the University of California.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *      This product includes software developed by the University of
- *      California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#) $Header: /tcpdump/master/libpcap/pcap/vlan.h,v 1.1.2.2 2008-08-06 07:45:59 guy Exp $
- */
-
-#ifndef lib_pcap_vlan_h
-#define lib_pcap_vlan_h
-
-struct vlan_tag {
-       u_int16_t       vlan_tpid;              /* ETH_P_8021Q */
-       u_int16_t       vlan_tci;               /* VLAN TCI */
-};
-
-#define VLAN_TAG_LEN   4
-
-#endif
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WinPCap/remote-ext.h b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WinPCap/remote-ext.h
deleted file mode 100644 (file)
index 9f54d69..0000000
+++ /dev/null
@@ -1,444 +0,0 @@
-/*\r
- * Copyright (c) 2002 - 2003\r
- * NetGroup, Politecnico di Torino (Italy)\r
- * All rights reserved.\r
- * \r
- * Redistribution and use in source and binary forms, with or without \r
- * modification, are permitted provided that the following conditions \r
- * are met:\r
- * \r
- * 1. Redistributions of source code must retain the above copyright \r
- * notice, this list of conditions and the following disclaimer.\r
- * 2. Redistributions in binary form must reproduce the above copyright \r
- * notice, this list of conditions and the following disclaimer in the \r
- * documentation and/or other materials provided with the distribution. \r
- * 3. Neither the name of the Politecnico di Torino nor the names of its \r
- * contributors may be used to endorse or promote products derived from \r
- * this software without specific prior written permission. \r
- * \r
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \r
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT \r
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR \r
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT \r
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, \r
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT \r
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, \r
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY \r
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT \r
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE \r
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
- * \r
- */\r
-\r
-\r
-#ifndef __REMOTE_EXT_H__\r
-#define __REMOTE_EXT_H__\r
-\r
-\r
-#ifndef HAVE_REMOTE\r
-#error Please do not include this file directly. Just define HAVE_REMOTE and then include pcap.h\r
-#endif\r
-\r
-// Definition for Microsoft Visual Studio\r
-#if _MSC_VER > 1000\r
-#pragma once\r
-#endif\r
-\r
-#ifdef __cplusplus\r
-extern "C" {\r
-#endif\r
-\r
-/*!\r
-       \file remote-ext.h\r
-\r
-       The goal of this file it to include most of the new definitions that should be\r
-       placed into the pcap.h file.\r
-\r
-       It includes all new definitions (structures and functions like pcap_open().\r
-    Some of the functions are not really a remote feature, but, right now, \r
-       they are placed here.\r
-*/\r
-\r
-\r
-\r
-// All this stuff is public\r
-/*! \addtogroup remote_struct\r
-       \{\r
-*/\r
-\r
-\r
-\r
-\r
-/*!\r
-       \brief Defines the maximum buffer size in which address, port, interface names are kept.\r
-\r
-       In case the adapter name or such is larger than this value, it is truncated.\r
-       This is not used by the user; however it must be aware that an hostname / interface\r
-       name longer than this value will be truncated.\r
-*/\r
-#define PCAP_BUF_SIZE 1024\r
-\r
-\r
-/*! \addtogroup remote_source_ID\r
-       \{\r
-*/\r
-\r
-\r
-/*!\r
-       \brief Internal representation of the type of source in use (file, \r
-       remote/local interface).\r
-\r
-       This indicates a file, i.e. the user want to open a capture from a local file.\r
-*/\r
-#define PCAP_SRC_FILE 2\r
-/*!\r
-       \brief Internal representation of the type of source in use (file, \r
-       remote/local interface).\r
-\r
-       This indicates a local interface, i.e. the user want to open a capture from \r
-       a local interface. This does not involve the RPCAP protocol.\r
-*/\r
-#define PCAP_SRC_IFLOCAL 3\r
-/*!\r
-       \brief Internal representation of the type of source in use (file, \r
-       remote/local interface).\r
-\r
-       This indicates a remote interface, i.e. the user want to open a capture from \r
-       an interface on a remote host. This does involve the RPCAP protocol.\r
-*/\r
-#define PCAP_SRC_IFREMOTE 4\r
-\r
-/*!\r
-       \}\r
-*/\r
-\r
-\r
-\r
-/*! \addtogroup remote_source_string\r
-\r
-       The formats allowed by the pcap_open() are the following:\r
-       - file://path_and_filename [opens a local file]\r
-       - rpcap://devicename [opens the selected device devices available on the local host, without using the RPCAP protocol]\r
-       - rpcap://host/devicename [opens the selected device available on a remote host]\r
-       - rpcap://host:port/devicename [opens the selected device available on a remote host, using a non-standard port for RPCAP]\r
-       - adaptername [to open a local adapter; kept for compability, but it is strongly discouraged]\r
-       - (NULL) [to open the first local adapter; kept for compability, but it is strongly discouraged]\r
-\r
-       The formats allowed by the pcap_findalldevs_ex() are the following:\r
-       - file://folder/ [lists all the files in the given folder]\r
-       - rpcap:// [lists all local adapters]\r
-       - rpcap://host:port/ [lists the devices available on a remote host]\r
-\r
-       Referring to the 'host' and 'port' paramters, they can be either numeric or literal. Since\r
-       IPv6 is fully supported, these are the allowed formats:\r
-\r
-       - host (literal): e.g. host.foo.bar\r
-       - host (numeric IPv4): e.g. 10.11.12.13\r
-       - host (numeric IPv4, IPv6 style): e.g. [10.11.12.13]\r
-       - host (numeric IPv6): e.g. [1:2:3::4]\r
-       - port: can be either numeric (e.g. '80') or literal (e.g. 'http')\r
-\r
-       Here you find some allowed examples:\r
-       - rpcap://host.foo.bar/devicename [everything literal, no port number]\r
-       - rpcap://host.foo.bar:1234/devicename [everything literal, with port number]\r
-       - rpcap://10.11.12.13/devicename [IPv4 numeric, no port number]\r
-       - rpcap://10.11.12.13:1234/devicename [IPv4 numeric, with port number]\r
-       - rpcap://[10.11.12.13]:1234/devicename [IPv4 numeric with IPv6 format, with port number]\r
-       - rpcap://[1:2:3::4]/devicename [IPv6 numeric, no port number]\r
-       - rpcap://[1:2:3::4]:1234/devicename [IPv6 numeric, with port number]\r
-       - rpcap://[1:2:3::4]:http/devicename [IPv6 numeric, with literal port number]\r
-       \r
-       \{\r
-*/\r
-\r
-\r
-/*!\r
-       \brief String that will be used to determine the type of source in use (file,\r
-       remote/local interface).\r
-\r
-       This string will be prepended to the interface name in order to create a string\r
-       that contains all the information required to open the source.\r
-\r
-       This string indicates that the user wants to open a capture from a local file.\r
-*/\r
-#define PCAP_SRC_FILE_STRING "file://"\r
-/*!\r
-       \brief String that will be used to determine the type of source in use (file,\r
-       remote/local interface).\r
-\r
-       This string will be prepended to the interface name in order to create a string\r
-       that contains all the information required to open the source.\r
-\r
-       This string indicates that the user wants to open a capture from a network interface.\r
-       This string does not necessarily involve the use of the RPCAP protocol. If the\r
-       interface required resides on the local host, the RPCAP protocol is not involved\r
-       and the local functions are used.\r
-*/\r
-#define PCAP_SRC_IF_STRING "rpcap://"\r
-\r
-/*!\r
-       \}\r
-*/\r
-\r
-\r
-\r
-\r
-\r
-/*!\r
-       \addtogroup remote_open_flags\r
-       \{\r
-*/\r
-\r
-/*!\r
-       \brief Defines if the adapter has to go in promiscuous mode.\r
-\r
-       It is '1' if you have to open the adapter in promiscuous mode, '0' otherwise.\r
-       Note that even if this parameter is false, the interface could well be in promiscuous\r
-       mode for some other reason (for example because another capture process with \r
-       promiscuous mode enabled is currently using that interface).\r
-       On on Linux systems with 2.2 or later kernels (that have the "any" device), this\r
-       flag does not work on the "any" device; if an argument of "any" is supplied,\r
-       the 'promisc' flag is ignored.\r
-*/\r
-#define PCAP_OPENFLAG_PROMISCUOUS              1\r
-\r
-/*!\r
-       \brief Defines if the data trasfer (in case of a remote\r
-       capture) has to be done with UDP protocol.\r
-\r
-       If it is '1' if you want a UDP data connection, '0' if you want\r
-       a TCP data connection; control connection is always TCP-based.\r
-       A UDP connection is much lighter, but it does not guarantee that all\r
-       the captured packets arrive to the client workstation. Moreover, \r
-       it could be harmful in case of network congestion.\r
-       This flag is meaningless if the source is not a remote interface.\r
-       In that case, it is simply ignored.\r
-*/\r
-#define PCAP_OPENFLAG_DATATX_UDP                       2\r
-\r
-\r
-/*!\r
-       \brief Defines if the remote probe will capture its own generated traffic.\r
-\r
-       In case the remote probe uses the same interface to capture traffic and to send\r
-       data back to the caller, the captured traffic includes the RPCAP traffic as well.\r
-       If this flag is turned on, the RPCAP traffic is excluded from the capture, so that\r
-       the trace returned back to the collector is does not include this traffic.\r
-*/\r
-#define PCAP_OPENFLAG_NOCAPTURE_RPCAP  4\r
-\r
-/*!\r
-       \brief Defines if the local adapter will capture its own generated traffic.\r
-\r
-       This flag tells the underlying capture driver to drop the packets that were sent by itself. \r
-       This is usefult when building applications like bridges, that should ignore the traffic\r
-       they just sent.\r
-*/\r
-#define PCAP_OPENFLAG_NOCAPTURE_LOCAL  8\r
-\r
-/*!\r
-       \brief This flag configures the adapter for maximum responsiveness.\r
-\r
-       In presence of a large value for nbytes, WinPcap waits for the arrival of several packets before \r
-       copying the data to the user. This guarantees a low number of system calls, i.e. lower processor usage, \r
-       i.e. better performance, which is good for applications like sniffers. If the user sets the \r
-       PCAP_OPENFLAG_MAX_RESPONSIVENESS flag, the capture driver will copy the packets as soon as the application \r
-       is ready to receive them. This is suggested for real time applications (like, for example, a bridge) \r
-       that need the best responsiveness.*/\r
-#define PCAP_OPENFLAG_MAX_RESPONSIVENESS       16\r
-\r
-/*!\r
-       \}\r
-*/\r
-\r
-\r
-/*!\r
-       \addtogroup remote_samp_methods\r
-       \{\r
-*/\r
-\r
-/*!\r
-       \brief No sampling has to be done on the current capture.\r
-\r
-       In this case, no sampling algorithms are applied to the current capture.\r
-*/\r
-#define PCAP_SAMP_NOSAMP       0\r
-\r
-/*!\r
-       \brief It defines that only 1 out of N packets must be returned to the user.\r
-\r
-       In this case, the 'value' field of the 'pcap_samp' structure indicates the\r
-       number of packets (minus 1) that must be discarded before one packet got accepted.\r
-       In other words, if 'value = 10', the first packet is returned to the caller, while\r
-       the following 9 are discarded.\r
-*/\r
-#define PCAP_SAMP_1_EVERY_N    1\r
-\r
-/*!\r
-       \brief It defines that we have to return 1 packet every N milliseconds.\r
-\r
-       In this case, the 'value' field of the 'pcap_samp' structure indicates the 'waiting\r
-       time' in milliseconds before one packet got accepted.\r
-       In other words, if 'value = 10', the first packet is returned to the caller; the next \r
-       returned one will be the first packet that arrives when 10ms have elapsed. \r
-*/\r
-#define PCAP_SAMP_FIRST_AFTER_N_MS 2\r
-\r
-/*!\r
-       \}\r
-*/\r
-\r
-\r
-/*!\r
-       \addtogroup remote_auth_methods\r
-       \{\r
-*/\r
-\r
-/*!\r
-       \brief It defines the NULL authentication.\r
-\r
-       This value has to be used within the 'type' member of the pcap_rmtauth structure.\r
-       The 'NULL' authentication has to be equal to 'zero', so that old applications\r
-       can just put every field of struct pcap_rmtauth to zero, and it does work.\r
-*/\r
-#define RPCAP_RMTAUTH_NULL 0\r
-/*!\r
-       \brief It defines the username/password authentication.\r
-\r
-       With this type of authentication, the RPCAP protocol will use the username/\r
-       password provided to authenticate the user on the remote machine. If the\r
-       authentication is successful (and the user has the right to open network devices)\r
-       the RPCAP connection will continue; otherwise it will be dropped.\r
-\r
-       This value has to be used within the 'type' member of the pcap_rmtauth structure.\r
-*/\r
-#define RPCAP_RMTAUTH_PWD 1\r
-\r
-/*!\r
-       \}\r
-*/\r
-\r
-\r
-\r
-\r
-/*!\r
-\r
-       \brief This structure keeps the information needed to autheticate\r
-       the user on a remote machine.\r
-       \r
-       The remote machine can either grant or refuse the access according \r
-       to the information provided.\r
-       In case the NULL authentication is required, both 'username' and\r
-       'password' can be NULL pointers.\r
-       \r
-       This structure is meaningless if the source is not a remote interface;\r
-       in that case, the functions which requires such a structure can accept\r
-       a NULL pointer as well.\r
-*/\r
-struct pcap_rmtauth\r
-{\r
-       /*!\r
-               \brief Type of the authentication required.\r
-\r
-               In order to provide maximum flexibility, we can support different types\r
-               of authentication based on the value of this 'type' variable. The currently \r
-               supported authentication methods are defined into the\r
-               \link remote_auth_methods Remote Authentication Methods Section\endlink.\r
-\r
-       */\r
-       int type;\r
-       /*!\r
-               \brief Zero-terminated string containing the username that has to be \r
-               used on the remote machine for authentication.\r
-               \r
-               This field is meaningless in case of the RPCAP_RMTAUTH_NULL authentication\r
-               and it can be NULL.\r
-       */\r
-       char *username;\r
-       /*!\r
-               \brief Zero-terminated string containing the password that has to be \r
-               used on the remote machine for authentication.\r
-               \r
-               This field is meaningless in case of the RPCAP_RMTAUTH_NULL authentication\r
-               and it can be NULL.\r
-       */\r
-       char *password;\r
-};\r
-\r
-\r
-/*!\r
-       \brief This structure defines the information related to sampling.\r
-\r
-       In case the sampling is requested, the capturing device should read\r
-       only a subset of the packets coming from the source. The returned packets depend\r
-       on the sampling parameters.\r
-\r
-       \warning The sampling process is applied <strong>after</strong> the filtering process.\r
-       In other words, packets are filtered first, then the sampling process selects a\r
-       subset of the 'filtered' packets and it returns them to the caller.\r
-*/\r
-struct pcap_samp\r
-{\r
-       /*!\r
-               Method used for sampling. Currently, the supported methods are listed in the\r
-               \link remote_samp_methods Sampling Methods Section\endlink.\r
-       */\r
-       int method;\r
-\r
-       /*!\r
-               This value depends on the sampling method defined. For its meaning, please check\r
-               at the \link remote_samp_methods Sampling Methods Section\endlink.\r
-       */\r
-       int value;\r
-};\r
-\r
-\r
-\r
-\r
-//! Maximum lenght of an host name (needed for the RPCAP active mode)\r
-#define RPCAP_HOSTLIST_SIZE 1024\r
-\r
-\r
-/*!\r
-       \}\r
-*/ // end of public documentation\r
-\r
-\r
-// Exported functions\r
-\r
-\r
-\r
-/** \name New WinPcap functions\r
-\r
-       This section lists the new functions that are able to help considerably in writing\r
-       WinPcap programs because of their easiness of use.\r
- */\r
-//\{\r
-pcap_t *pcap_open(const char *source, int snaplen, int flags, int read_timeout, struct pcap_rmtauth *auth, char *errbuf);\r
-int pcap_createsrcstr(char *source, int type, const char *host, const char *port, const char *name, char *errbuf);\r
-int pcap_parsesrcstr(const char *source, int *type, char *host, char *port, char *name, char *errbuf);\r
-int pcap_findalldevs_ex(char *source, struct pcap_rmtauth *auth, pcap_if_t **alldevs, char *errbuf);\r
-struct pcap_samp *pcap_setsampling(pcap_t *p);\r
-\r
-//\}\r
-// End of new winpcap functions\r
-\r
-\r
-\r
-/** \name Remote Capture functions\r
- */\r
-//\{ \r
-SOCKET pcap_remoteact_accept(const char *address, const char *port, const char *hostlist, char *connectinghost, struct pcap_rmtauth *auth, char *errbuf);\r
-int pcap_remoteact_list(char *hostlist, char sep, int size, char *errbuf);\r
-int pcap_remoteact_close(const char *host, char *errbuf);\r
-void pcap_remoteact_cleanup();\r
-//\}\r
-// End of remote capture functions\r
-\r
-#ifdef __cplusplus\r
-}\r
-#endif\r
-\r
-\r
-#endif\r
-\r
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WinPCap/wpcap.lib b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WinPCap/wpcap.lib
deleted file mode 100644 (file)
index f832e04..0000000
Binary files a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/WinPCap/wpcap.lib and /dev/null differ
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/demo_logging.c b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/demo_logging.c
deleted file mode 100644 (file)
index d6a1d25..0000000
+++ /dev/null
@@ -1,526 +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
- * Logging utility that allows FreeRTOS tasks to log to a UDP port, stdout, and\r
- * disk file without making any Win32 system calls themselves.\r
- *\r
- * Messages logged to a UDP port are sent directly (using FreeRTOS+TCP), but as\r
- * FreeRTOS tasks cannot make Win32 system calls messages sent to stdout or a\r
- * disk file are sent via a stream buffer to a Win32 thread which then performs\r
- * the actual output.\r
- */\r
-\r
-/* Standard includes. */\r
-#include <stdio.h>\r
-#include <stdint.h>\r
-#include <stdarg.h>\r
-#include <io.h>\r
-#include <ctype.h>\r
-\r
-/* FreeRTOS includes. */\r
-#include <FreeRTOS.h>\r
-#include "task.h"\r
-\r
-/* FreeRTOS+TCP includes. */\r
-#include "FreeRTOS_IP.h"\r
-#include "FreeRTOS_Sockets.h"\r
-#include "FreeRTOS_Stream_Buffer.h"\r
-\r
-/* Demo includes. */\r
-#include "demo_logging.h"\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-/* The maximum size to which the log file may grow, before being renamed\r
-to .ful. */\r
-#define dlLOGGING_FILE_SIZE            ( 40ul * 1024ul * 1024ul )\r
-\r
-/* Dimensions the arrays into which print messages are created. */\r
-#define dlMAX_PRINT_STRING_LENGTH      255\r
-\r
-/* The size of the stream buffer used to pass messages from FreeRTOS tasks to\r
-the Win32 thread that is responsible for making any Win32 system calls that are\r
-necessary for the selected logging method. */\r
-#define dlLOGGING_STREAM_BUFFER_SIZE  32768\r
-\r
-/* A block time of zero simply means don't block. */\r
-#define dlDONT_BLOCK   0\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-/*\r
- * Called from vLoggingInit() to start a new disk log file.\r
- */\r
-static void prvFileLoggingInit( void );\r
-\r
-/*\r
- * Attempt to write a message to the file.\r
- */\r
-static void prvLogToFile( const char *pcMessage, size_t xLength );\r
-\r
-/*\r
- * Simply close the logging file, if it is open.\r
- */\r
-static void prvFileClose( void );\r
-\r
-/*\r
- * Before the scheduler is started this function is called directly.  After the\r
- * scheduler has started it is called from the Windows thread dedicated to\r
- * outputting log messages.  Only the windows thread actually performs the\r
- * writing so as not to disrupt the simulation by making Windows system calls\r
- * from FreeRTOS tasks.\r
- */\r
-static void prvLoggingFlushBuffer( void );\r
-\r
-/*\r
- * The windows thread that performs the actual writing of messages that require\r
- * Win32 system calls.  Only the windows thread can make system calls so as not\r
- * to disrupt the simulation by making Windows calls from FreeRTOS tasks.\r
- */\r
-static DWORD WINAPI prvWin32LoggingThread( void *pvParam );\r
-\r
-/*\r
- * Creates the socket to which UDP messages are sent.  This function is not\r
- * called directly to prevent the print socket being created from within the IP\r
- * task - which could result in a deadlock.  Instead the function call is\r
- * deferred to run in the RTOS daemon task - hence it prototype.\r
- */\r
-static void prvCreatePrintSocket( void *pvParameter1, uint32_t ulParameter2 );\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-/* Windows event used to wake the Win32 thread which performs any logging that\r
-needs Win32 system calls. */\r
-static void *pvLoggingThreadEvent = NULL;\r
-\r
-/* Stores the selected logging targets passed in as parameters to the\r
-vLoggingInit() function. */\r
-BaseType_t xStdoutLoggingUsed = pdFALSE, xDiskFileLoggingUsed = pdFALSE, xUDPLoggingUsed = pdFALSE;\r
-\r
-/* Circular buffer used to pass messages from the FreeRTOS tasks to the Win32\r
-thread that is responsible for making Win32 calls (when stdout or a disk log is\r
-used). */\r
-static StreamBuffer_t *xLogStreamBuffer = NULL;\r
-\r
-/* Handle to the file used for logging.  This is left open while there are\r
-messages waiting to be logged, then closed again in between logs. */\r
-static FILE *pxLoggingFileHandle = NULL;\r
-\r
-/* When true prints are performed directly.  After start up xDirectPrint is set\r
-to pdFALSE - at which time prints that require Win32 system calls are done by\r
-the Win32 thread responsible for logging. */\r
-BaseType_t xDirectPrint = pdTRUE;\r
-\r
-/* File names for the in use and complete (full) log files. */\r
-static const char *pcLogFileName = "RTOSDemo.log";\r
-static const char *pcFullLogFileName = "RTOSDemo.ful";\r
-\r
-/* Keep the current file size in a variable, as an optimisation. */\r
-static size_t ulSizeOfLoggingFile = 0ul;\r
-\r
-/* The UDP socket and address on/to which print messages are sent. */\r
-Socket_t xPrintSocket = FREERTOS_INVALID_SOCKET;\r
-struct freertos_sockaddr xPrintUDPAddress;\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-void vLoggingInit( BaseType_t xLogToStdout, BaseType_t xLogToFile, BaseType_t xLogToUDP, uint32_t ulRemoteIPAddress, uint16_t usRemotePort )\r
-{\r
-       /* Can only be called before the scheduler has started. */\r
-       configASSERT( xTaskGetSchedulerState() == taskSCHEDULER_NOT_STARTED );\r
-\r
-       #if( ( ipconfigHAS_DEBUG_PRINTF == 1 ) || ( ipconfigHAS_PRINTF == 1 ) )\r
-       {\r
-               HANDLE Win32Thread;\r
-\r
-               /* Record which output methods are to be used. */\r
-               xStdoutLoggingUsed = xLogToStdout;\r
-               xDiskFileLoggingUsed = xLogToFile;\r
-               xUDPLoggingUsed = xLogToUDP;\r
-\r
-               /* If a disk file is used then initialise it now. */\r
-               if( xDiskFileLoggingUsed != pdFALSE )\r
-               {\r
-                       prvFileLoggingInit();\r
-               }\r
-\r
-               /* If UDP logging is used then store the address to which the log data\r
-               will be sent - but don't create the socket yet because the network is\r
-               not initialised. */\r
-               if( xUDPLoggingUsed != pdFALSE )\r
-               {\r
-                       /* Set the address to which the print messages are sent. */\r
-                       xPrintUDPAddress.sin_port = FreeRTOS_htons( usRemotePort );\r
-                       xPrintUDPAddress.sin_addr = ulRemoteIPAddress;\r
-               }\r
-\r
-               /* If a disk file or stdout are to be used then Win32 system calls will\r
-               have to be made.  Such system calls cannot be made from FreeRTOS tasks\r
-               so create a stream buffer to pass the messages to a Win32 thread, then\r
-               create the thread itself, along with a Win32 event that can be used to\r
-               unblock the thread. */\r
-               if( ( xStdoutLoggingUsed != pdFALSE ) || ( xDiskFileLoggingUsed != pdFALSE ) )\r
-               {\r
-                       /* Create the buffer. */\r
-                       xLogStreamBuffer = ( StreamBuffer_t * ) malloc( sizeof( *xLogStreamBuffer ) - sizeof( xLogStreamBuffer->ucArray ) + dlLOGGING_STREAM_BUFFER_SIZE + 1 );\r
-                       configASSERT( xLogStreamBuffer );\r
-                       memset( xLogStreamBuffer, '\0', sizeof( *xLogStreamBuffer ) - sizeof( xLogStreamBuffer->ucArray ) );\r
-                       xLogStreamBuffer->LENGTH = dlLOGGING_STREAM_BUFFER_SIZE + 1;\r
-\r
-                       /* Create the Windows event. */\r
-                       pvLoggingThreadEvent = CreateEvent( NULL, FALSE, TRUE, "StdoutLoggingEvent" );\r
-\r
-                       /* Create the thread itself. */\r
-                       Win32Thread = CreateThread(\r
-                               NULL,   /* Pointer to thread security attributes. */\r
-                               0,              /* Initial thread stack size, in bytes. */\r
-                               prvWin32LoggingThread,  /* Pointer to thread function. */\r
-                               NULL,   /* Argument for new thread. */\r
-                               0,              /* Creation flags. */\r
-                               NULL );\r
-\r
-                       /* Use the cores that are not used by the FreeRTOS tasks. */\r
-                       SetThreadAffinityMask( Win32Thread, ~0x01u );\r
-                       SetThreadPriorityBoost( Win32Thread, TRUE );\r
-                       SetThreadPriority( Win32Thread, THREAD_PRIORITY_IDLE );\r
-               }\r
-       }\r
-       #else\r
-       {\r
-               /* FreeRTOSIPConfig is set such that no print messages will be output.\r
-               Avoid compiler warnings about unused parameters. */\r
-               ( void ) xLogToStdout;\r
-               ( void ) xLogToFile;\r
-               ( void ) xLogToUDP;\r
-               ( void ) usRemotePort;\r
-               ( void ) ulRemoteIPAddress;\r
-       }\r
-       #endif /* ( ipconfigHAS_DEBUG_PRINTF == 1 ) || ( ipconfigHAS_PRINTF == 1 )  */\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvCreatePrintSocket( void *pvParameter1, uint32_t ulParameter2 )\r
-{\r
-static const TickType_t xSendTimeOut = pdMS_TO_TICKS( 0 );\r
-Socket_t xSocket;\r
-\r
-       /* The function prototype is that of a deferred function, but the parameters\r
-       are not actually used. */\r
-       ( void ) pvParameter1;\r
-       ( void ) ulParameter2;\r
-\r
-       xSocket = FreeRTOS_socket( FREERTOS_AF_INET, FREERTOS_SOCK_DGRAM, FREERTOS_IPPROTO_UDP );\r
-\r
-       if( xSocket != FREERTOS_INVALID_SOCKET )\r
-       {\r
-               /* FreeRTOS+TCP decides which port to bind to. */\r
-               FreeRTOS_setsockopt( xSocket, 0, FREERTOS_SO_SNDTIMEO, &xSendTimeOut, sizeof( xSendTimeOut ) );\r
-               FreeRTOS_bind( xSocket, NULL, 0 );\r
-\r
-               /* Now the socket is bound it can be assigned to the print socket. */\r
-               xPrintSocket = xSocket;\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-void vLoggingPrintf( const char *pcFormat, ... )\r
-{\r
-char cPrintString[ dlMAX_PRINT_STRING_LENGTH ];\r
-char cOutputString[ dlMAX_PRINT_STRING_LENGTH ];\r
-char *pcSource, *pcTarget, *pcBegin;\r
-size_t xLength, xLength2, rc;\r
-static BaseType_t xMessageNumber = 0;\r
-va_list args;\r
-uint32_t ulIPAddress;\r
-const char *pcTaskName;\r
-const char *pcNoTask = "None";\r
-int iOriginalPriority;\r
-HANDLE xCurrentTask;\r
-\r
-\r
-       if( ( xStdoutLoggingUsed != pdFALSE ) || ( xDiskFileLoggingUsed != pdFALSE ) || ( xUDPLoggingUsed != pdFALSE ) )\r
-       {\r
-               /* There are a variable number of parameters. */\r
-               va_start( args, pcFormat );\r
-\r
-               /* Additional info to place at the start of the log. */\r
-               if( xTaskGetSchedulerState() != taskSCHEDULER_NOT_STARTED )\r
-               {\r
-                       pcTaskName = pcTaskGetName( NULL );\r
-               }\r
-               else\r
-               {\r
-                       pcTaskName = pcNoTask;\r
-               }\r
-\r
-               if( strcmp( pcFormat, "\n" ) != 0 )\r
-               {\r
-                       xLength = snprintf( cPrintString, dlMAX_PRINT_STRING_LENGTH, "%lu %lu [%s] ",\r
-                               xMessageNumber++,\r
-                               ( unsigned long ) xTaskGetTickCount(),\r
-                               pcTaskName );\r
-               }\r
-               else\r
-               {\r
-                       xLength = 0;\r
-                       memset( cPrintString, 0x00, dlMAX_PRINT_STRING_LENGTH );\r
-               }\r
-\r
-               xLength2 = vsnprintf( cPrintString + xLength, dlMAX_PRINT_STRING_LENGTH - xLength, pcFormat, args );\r
-\r
-               if( xLength2 <  0 )\r
-               {\r
-                       /* Clean up. */\r
-                       xLength2 = dlMAX_PRINT_STRING_LENGTH - 1 - xLength;\r
-                       cPrintString[ dlMAX_PRINT_STRING_LENGTH - 1 ] = '\0';\r
-               }\r
-\r
-               xLength += xLength2;\r
-               va_end( args );\r
-\r
-               /* For ease of viewing, copy the string into another buffer, converting\r
-               IP addresses to dot notation on the way. */\r
-               pcSource = cPrintString;\r
-               pcTarget = cOutputString;\r
-\r
-               while( ( *pcSource ) != '\0' )\r
-               {\r
-                       *pcTarget = *pcSource;\r
-                       pcTarget++;\r
-                       pcSource++;\r
-\r
-                       /* Look forward for an IP address denoted by 'ip'. */\r
-                       if( ( isxdigit( pcSource[ 0 ] ) != pdFALSE ) && ( pcSource[ 1 ] == 'i' ) && ( pcSource[ 2 ] == 'p' ) )\r
-                       {\r
-                               *pcTarget = *pcSource;\r
-                               pcTarget++;\r
-                               *pcTarget = '\0';\r
-                               pcBegin = pcTarget - 8;\r
-\r
-                               while( ( pcTarget > pcBegin ) && ( isxdigit( pcTarget[ -1 ] ) != pdFALSE ) )\r
-                               {\r
-                                       pcTarget--;\r
-                               }\r
-\r
-                               sscanf( pcTarget, "%8X", &ulIPAddress );\r
-                               rc = sprintf( pcTarget, "%lu.%lu.%lu.%lu",\r
-                                       ( unsigned long ) ( ulIPAddress >> 24UL ),\r
-                                       ( unsigned long ) ( (ulIPAddress >> 16UL) & 0xffUL ),\r
-                                       ( unsigned long ) ( (ulIPAddress >> 8UL) & 0xffUL ),\r
-                                       ( unsigned long ) ( ulIPAddress & 0xffUL ) );\r
-                               pcTarget += rc;\r
-                               pcSource += 3; /* skip "<n>ip" */\r
-                       }\r
-               }\r
-\r
-               /* How far through the buffer was written? */\r
-               xLength = ( BaseType_t ) ( pcTarget - cOutputString );\r
-\r
-               /* If the message is to be logged to a UDP port then it can be sent directly\r
-               because it only uses FreeRTOS function (not Win32 functions). */\r
-               if( xUDPLoggingUsed != pdFALSE )\r
-               {\r
-                       if( ( xPrintSocket == FREERTOS_INVALID_SOCKET ) && ( FreeRTOS_IsNetworkUp() != pdFALSE ) )\r
-                       {\r
-                               /* Create and bind the socket to which print messages are sent.  The\r
-                               xTimerPendFunctionCall() function is used even though this is\r
-                               not an interrupt because this function is called from the IP task\r
-                               and the IP task cannot itself wait for a socket to bind.  The\r
-                               parameters to prvCreatePrintSocket() are not required so set to\r
-                               NULL or 0. */\r
-                               xTimerPendFunctionCall( prvCreatePrintSocket, NULL, 0, dlDONT_BLOCK );\r
-                       }\r
-\r
-                       if( xPrintSocket != FREERTOS_INVALID_SOCKET )\r
-                       {\r
-                               FreeRTOS_sendto( xPrintSocket, cOutputString, xLength, 0, &xPrintUDPAddress, sizeof( xPrintUDPAddress ) );\r
-\r
-                               /* Just because the UDP data logger I'm using is dumb. */\r
-                               FreeRTOS_sendto( xPrintSocket, "\r", sizeof( char ), 0, &xPrintUDPAddress, sizeof( xPrintUDPAddress ) );\r
-                       }\r
-               }\r
-\r
-               /* If logging is also to go to either stdout or a disk file then it cannot\r
-               be output here - so instead write the message to the stream buffer and wake\r
-               the Win32 thread which will read it from the stream buffer and perform the\r
-               actual output. */\r
-               if( ( xStdoutLoggingUsed != pdFALSE ) || ( xDiskFileLoggingUsed != pdFALSE ) )\r
-               {\r
-                       configASSERT( xLogStreamBuffer );\r
-\r
-                       /* How much space is in the buffer? */\r
-                       xLength2 = uxStreamBufferGetSpace( xLogStreamBuffer );\r
-\r
-                       /* There must be enough space to write both the string and the length of\r
-                       the string. */\r
-                       if( xLength2 >= ( xLength + sizeof( xLength ) ) )\r
-                       {\r
-                               /* First write in the length of the data, then write in the data\r
-                               itself.  Raising the thread priority is used as a critical section\r
-                               as there are potentially multiple writers.  The stream buffer is\r
-                               only thread safe when there is a single writer (likewise for\r
-                               reading from the buffer). */\r
-                               xCurrentTask = GetCurrentThread();\r
-                               iOriginalPriority = GetThreadPriority( xCurrentTask );\r
-                               SetThreadPriority( GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL );\r
-                               uxStreamBufferAdd( xLogStreamBuffer, 0, ( const uint8_t * ) &( xLength ), sizeof( xLength ) );\r
-                               uxStreamBufferAdd( xLogStreamBuffer, 0, ( const uint8_t * ) cOutputString, xLength );\r
-                               SetThreadPriority( GetCurrentThread(), iOriginalPriority );\r
-                       }\r
-\r
-                       /* xDirectPrint is initialised to pdTRUE, and while it remains true the\r
-                       logging output function is called directly.  When the system is running\r
-                       the output function cannot be called directly because it would get\r
-                       called from both FreeRTOS tasks and Win32 threads - so instead wake the\r
-                       Win32 thread responsible for the actual output. */\r
-                       if( xDirectPrint != pdFALSE )\r
-                       {\r
-                               /* While starting up, the thread which calls prvWin32LoggingThread()\r
-                               is not running yet and xDirectPrint will be pdTRUE. */\r
-                               prvLoggingFlushBuffer();\r
-                       }\r
-                       else if( pvLoggingThreadEvent != NULL )\r
-                       {\r
-                               /* While running, wake up prvWin32LoggingThread() to send the\r
-                               logging data. */\r
-                               SetEvent( pvLoggingThreadEvent );\r
-                       }\r
-               }\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvLoggingFlushBuffer( void )\r
-{\r
-size_t xLength;\r
-char cPrintString[ dlMAX_PRINT_STRING_LENGTH ];\r
-\r
-       /* Is there more than the length value stored in the circular buffer\r
-       used to pass data from the FreeRTOS simulator into this Win32 thread? */\r
-       while( uxStreamBufferGetSize( xLogStreamBuffer ) > sizeof( xLength ) )\r
-       {\r
-               memset( cPrintString, 0x00, dlMAX_PRINT_STRING_LENGTH );\r
-               uxStreamBufferGet( xLogStreamBuffer, 0, ( uint8_t * ) &xLength, sizeof( xLength ), pdFALSE );\r
-               uxStreamBufferGet( xLogStreamBuffer, 0, ( uint8_t * ) cPrintString, xLength, pdFALSE );\r
-\r
-               /* Write the message to standard out if requested to do so when\r
-               vLoggingInit() was called, or if the network is not yet up. */\r
-               if( ( xStdoutLoggingUsed != pdFALSE ) || ( FreeRTOS_IsNetworkUp() == pdFALSE ) )\r
-               {\r
-                       /* Write the message to stdout. */\r
-                       printf( "%s", cPrintString ); /*_RB_ Replace with _write(). */\r
-               }\r
-\r
-               /* Write the message to a file if requested to do so when\r
-               vLoggingInit() was called. */\r
-               if( xDiskFileLoggingUsed != pdFALSE )\r
-               {\r
-                       prvLogToFile( cPrintString, xLength );\r
-               }\r
-       }\r
-\r
-       prvFileClose();\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static DWORD WINAPI prvWin32LoggingThread( void *pvParameter )\r
-{\r
-const DWORD xMaxWait = 1000;\r
-\r
-       ( void ) pvParameter;\r
-\r
-       /* From now on, prvLoggingFlushBuffer() will only be called from this\r
-       Windows thread */\r
-       xDirectPrint = pdFALSE;\r
-\r
-       for( ;; )\r
-       {\r
-               /* Wait to be told there are message waiting to be logged. */\r
-               WaitForSingleObject( pvLoggingThreadEvent, xMaxWait );\r
-\r
-               /* Write out all waiting messages. */\r
-               prvLoggingFlushBuffer();\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvFileLoggingInit( void )\r
-{\r
-FILE *pxHandle = fopen( pcLogFileName, "a" );\r
-\r
-       if( pxHandle != NULL )\r
-       {\r
-               fseek( pxHandle, SEEK_END, 0ul );\r
-               ulSizeOfLoggingFile = ftell( pxHandle );\r
-               fclose( pxHandle );\r
-       }\r
-       else\r
-       {\r
-               ulSizeOfLoggingFile = 0ul;\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvFileClose( void )\r
-{\r
-       if( pxLoggingFileHandle != NULL )\r
-       {\r
-               fclose( pxLoggingFileHandle );\r
-               pxLoggingFileHandle = NULL;\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvLogToFile( const char *pcMessage, size_t xLength )\r
-{\r
-       if( pxLoggingFileHandle == NULL )\r
-       {\r
-               pxLoggingFileHandle = fopen( pcLogFileName, "a" );\r
-       }\r
-\r
-       if( pxLoggingFileHandle != NULL )\r
-       {\r
-               fwrite( pcMessage, 1, xLength, pxLoggingFileHandle );\r
-               ulSizeOfLoggingFile += xLength;\r
-\r
-               /* If the file has grown to its maximum permissible size then close and\r
-               rename it - then start with a new file. */\r
-               if( ulSizeOfLoggingFile > ( size_t ) dlLOGGING_FILE_SIZE )\r
-               {\r
-                       prvFileClose();\r
-                       if( _access( pcFullLogFileName, 00 ) == 0 )\r
-                       {\r
-                               remove( pcFullLogFileName );\r
-                       }\r
-                       rename( pcLogFileName, pcFullLogFileName );\r
-                       ulSizeOfLoggingFile = 0;\r
-               }\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/demo_logging.h b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/demo_logging.h
deleted file mode 100644 (file)
index 62ae46a..0000000
+++ /dev/null
@@ -1,48 +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
-#ifndef DEMO_LOGGING_H\r
-#define DEMO_LOGGING_H\r
-\r
-/*\r
- * Initialise a logging system that can be used from FreeRTOS tasks and Win32\r
- * threads.  Do not call printf() directly while the scheduler is running.\r
- *\r
- * Set xLogToStdout, xLogToFile and xLogToUDP to either pdTRUE or pdFALSE to\r
- * lot to stdout, a disk file and a UDP port respectively.\r
- *\r
- * If xLogToUDP is pdTRUE then ulRemoteIPAddress and usRemotePort must be set\r
- * to the IP address and port number to which UDP log messages will be sent.\r
- */\r
-void vLoggingInit(     BaseType_t xLogToStdout,\r
-                                       BaseType_t xLogToFile,\r
-                                       BaseType_t xLogToUDP,\r
-                                       uint32_t ulRemoteIPAddress,\r
-                                       uint16_t usRemotePort );\r
-\r
-#endif /* DEMO_LOGGING_H */\r
-\r
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/iot_config.h b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/iot_config.h
deleted file mode 100644 (file)
index 6851788..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-/*\r
- * Copyright (C) 2018 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
-\r
-/* This file contains configuration settings for the demos. */\r
-\r
-#ifndef IOT_CONFIG_H_\r
-#define IOT_CONFIG_H_\r
-\r
-\r
-/*\r
- * Set this to the number of recyclable tasks for the task pool to cache.\r
- *\r
- * Caching dynamically allocated tasks (recyclable tasks) helps the application\r
- * to limit the number of allocations at runtime. Caching recyclable tasks may\r
- * help making the application more responsive and predictable, by removing a\r
- * potential for memory allocation failures, but it may also have negative\r
- * repercussions on the amount of memory available at any given time. It is up\r
- * to the application developer to strike the correct balance these competing\r
- * needs. The task pool will cache when the application calling\r
- * IotTaskPool_RecycleJob. Any recycled tasks in excess of\r
- * IOT_TASKPOOL_JOBS_RECYCLE_LIMIT will be destroyed and its memory will be\r
- * release.\r
- *\r
- * Default value (if undefined): 8\r
- */\r
-#define IOT_TASKPOOL_JOBS_RECYCLE_LIMIT 8\r
-\r
-/*\r
- * Set this to 1 to perform sanity checks when using the task pool library.\r
- *\r
- * Asserts are useful for debugging, but should be disabled in production code.\r
- * If this is set to 1, IotTaskPool_Assert can be defined to set the assertion\r
- * function; otherwise, the standard library's assert function will be used.\r
- *\r
- * Possible values: 0 (asserts disabled) or 1 (asserts enabled)\r
- * Recommended values: 1 when debugging; 0 in production code.\r
- * Default value (if undefined): 0\r
- */\r
-#define IOT_TASKPOOL_ENABLE_ASSERTS 1\r
-\r
-/*\r
- * The full IoT Task Pool Library has many use cases, including Linux\r
- * development. Â Typical FreeRTOS use cases do not require the full\r
- * functionality so an optimised implementation is provided specifically for use\r
- * with FreeRTOS.  The optimised version has a fixed number of tasks in the\r
- * pool, each of which uses statically allocated memory to ensure creation of\r
- * the pool is guaranteed (it does not run out of heap space).\r
- * IOT_TASKPOOL_NUMBER_OF_WORKERS sets the number of tasks in the pool.\r
- */\r
-#define IOT_TASKPOOL_NUMBER_OF_WORKERS               3\r
-\r
-/*\r
- * Set the log level of the task pool library.\r
- *\r
- * Log messages from the task pool library at or below this setting will be\r
- * printed.\r
- *\r
- * Possible values: One of the Log levels.\r
- * Default value (if undefined): IOT_LOG_LEVEL_GLOBAL; if that is undefined,\r
- * then IOT_LOG_NONE.\r
- */\r
-#define IOT_LOG_LEVEL_TASKPOOL IOT_LOG_INFO\r
-\r
-\r
-/**\r
- * @brief The stack size (in bytes) for each worker task in the task pool.\r
- * \r
- * The minimal version of the of task pool library only supports one task pool\r
- * and the configuration of each worker task fixed at the compile time.\r
- */\r
-#define IOT_TASKPOOL_WORKER_STACK_SIZE_BYTES        2048\r
-\r
-/* Include the common configuration file for FreeRTOS. */\r
-#include "iot_config_common.h"\r
-\r
-#endif /* ifndef IOT_CONFIG_H_ */\r
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/iot_config_common.h b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/iot_config_common.h
deleted file mode 100644 (file)
index 8b97610..0000000
+++ /dev/null
@@ -1,197 +0,0 @@
-/*\r
- * Amazon FreeRTOS V201906.00 Major\r
- * Copyright (C) 2019 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://aws.amazon.com/freertos\r
- * http://www.FreeRTOS.org\r
- */\r
-\r
-/* This file contains default configuration settings for the demos on FreeRTOS. */\r
-\r
-#ifndef IOT_CONFIG_COMMON_H_\r
-#define IOT_CONFIG_COMMON_H_\r
-\r
-/* FreeRTOS include. */\r
-#include "FreeRTOS.h" //_RB_Makes common config file FreeRTOS specific\r
-\r
-/* Use platform types on FreeRTOS. */\r
-#include "platform/iot_platform_types_freertos.h" //_RB_Makes common config file FreeRTOS specific\r
-\r
-/* SDK version. */\r
-#define IOT_SDK_VERSION    "4.0.0"\r
-\r
-/* This config file is for the demos; disable any test code. */\r
-#define IOT_BUILD_TESTS    ( 0 )\r
-\r
-/* Logging puts function. */\r
-#define IotLogging_Puts( str )                 configPRINTF( ( "%s\r\n", str ) )\r
-\r
-/* Enable asserts in libraries by default. */\r
-#ifndef IOT_METRICS_ENABLE_ASSERTS\r
-    #define IOT_METRICS_ENABLE_ASSERTS         ( 1 )\r
-#endif\r
-#ifndef IOT_CONTAINERS_ENABLE_ASSERTS\r
-    #define IOT_CONTAINERS_ENABLE_ASSERTS      ( 1 )\r
-#endif\r
-#ifndef IOT_TASKPOOL_ENABLE_ASSERTS\r
-    #define IOT_TASKPOOL_ENABLE_ASSERTS        ( 1 )\r
-#endif\r
-#ifndef IOT_MQTT_ENABLE_ASSERTS\r
-    #define IOT_MQTT_ENABLE_ASSERTS            ( 1 )\r
-#endif\r
-#ifndef AWS_IOT_SHADOW_ENABLE_ASSERTS\r
-    #define AWS_IOT_SHADOW_ENABLE_ASSERTS      ( 1 )\r
-#endif\r
-#ifndef AWS_IOT_DEFENDER_ENABLE_ASSERTS\r
-    #define AWS_IOT_DEFENDER_ENABLE_ASSERTS    ( 1 )\r
-#endif\r
-#ifndef IOT_BLE_ENABLE_ASSERTS\r
-    #define IOT_BLE_ENABLE_ASSERTS             ( 1 )\r
-#endif\r
-\r
-/* Assert functions. */\r
-#define IotMetrics_Assert( expression )        configASSERT( expression )\r
-#define IotContainers_Assert( expression )     configASSERT( expression )\r
-#define IotTaskPool_Assert( expression )       configASSERT( expression )\r
-#define IotMqtt_Assert( expression )           configASSERT( expression )\r
-#define AwsIotShadow_Assert( expression )      configASSERT( expression )\r
-#define AwsIotDefender_Assert( expression )    configASSERT( expression )\r
-#define IotBle_Assert( expression )            configASSERT( expression )\r
-\r
-/* Control the usage of dynamic memory allocation. */\r
-#ifndef IOT_STATIC_MEMORY_ONLY\r
-    #define IOT_STATIC_MEMORY_ONLY    ( 0 )\r
-#endif\r
-\r
-/* Memory allocation configuration. Note that these functions will not be affected\r
- * by IOT_STATIC_MEMORY_ONLY. */\r
-#define IotNetwork_Malloc    pvPortMalloc\r
-#define IotNetwork_Free      vPortFree\r
-#define IotThreads_Malloc    pvPortMalloc\r
-#define IotThreads_Free      vPortFree\r
-#define IotLogging_Malloc    pvPortMalloc\r
-#define IotLogging_Free      vPortFree\r
-#define IotBle_Malloc        pvPortMalloc\r
-#define IotBle_Free          vPortFree\r
-/* #define IotLogging_StaticBufferSize */\r
-\r
-/* Memory allocation function configuration for the MQTT and Defender library.\r
- * These libraries will be affected by IOT_STATIC_MEMORY_ONLY. */\r
-#if IOT_STATIC_MEMORY_ONLY == 0\r
-    #define IotMetrics_MallocTcpConnection       pvPortMalloc\r
-    #define IotMetrics_FreeTcpConnection         vPortFree\r
-    #define IotMetrics_MallocIpAddress           pvPortMalloc\r
-    #define IotMetrics_FreeIpAddress             vPortFree\r
-\r
-    #define IotTaskPool_MallocTaskPool           pvPortMalloc\r
-    #define IotTaskPool_FreeTaskPool             vPortFree\r
-    #define IotTaskPool_MallocJob                pvPortMalloc\r
-    #define IotTaskPool_FreeJob                  vPortFree\r
-    #define IotTaskPool_MallocTimerEvent         pvPortMalloc\r
-    #define IotTaskPool_FreeTimerEvent           vPortFree\r
-\r
-    #define IotMqtt_MallocConnection             pvPortMalloc\r
-    #define IotMqtt_FreeConnection               vPortFree\r
-    #define IotMqtt_MallocMessage                pvPortMalloc\r
-    #define IotMqtt_FreeMessage                  vPortFree\r
-    #define IotMqtt_MallocOperation              pvPortMalloc\r
-    #define IotMqtt_FreeOperation                vPortFree\r
-    #define IotMqtt_MallocSubscription           pvPortMalloc\r
-    #define IotMqtt_FreeSubscription             vPortFree\r
-\r
-    #define IotSerializer_MallocCborEncoder      pvPortMalloc\r
-    #define IotSerializer_FreeCborEncoder        vPortFree\r
-    #define IotSerializer_MallocCborParser       pvPortMalloc\r
-    #define IotSerializer_FreeCborParser         vPortFree\r
-    #define IotSerializer_MallocCborValue        pvPortMalloc\r
-    #define IotSerializer_FreeCborValue          vPortFree\r
-    #define IotSerializer_MallocDecoderObject    pvPortMalloc\r
-    #define IotSerializer_FreeDecoderObject      vPortFree\r
-\r
-    #define AwsIotShadow_MallocOperation         pvPortMalloc\r
-    #define AwsIotShadow_FreeOperation           vPortFree\r
-    #define AwsIotShadow_MallocString            pvPortMalloc\r
-    #define AwsIotShadow_FreeString              vPortFree\r
-    #define AwsIotShadow_MallocSubscription      pvPortMalloc\r
-    #define AwsIotShadow_FreeSubscription        vPortFree\r
-\r
-    #define AwsIotDefender_MallocReport          pvPortMalloc\r
-    #define AwsIotDefender_FreeReport            vPortFree\r
-    #define AwsIotDefender_MallocTopic           pvPortMalloc\r
-    #define AwsIotDefender_FreeTopic             vPortFree\r
-#endif /* if IOT_STATIC_MEMORY_ONLY == 0 */\r
-\r
-/* Default platform thread stack size and priority. */\r
-#ifndef IOT_THREAD_DEFAULT_STACK_SIZE\r
-    #define IOT_THREAD_DEFAULT_STACK_SIZE    2048\r
-#endif\r
-#ifndef IOT_THREAD_DEFAULT_PRIORITY\r
-    #define IOT_THREAD_DEFAULT_PRIORITY      tskIDLE_PRIORITY\r
-#endif\r
-\r
-/* Platform network configuration. */\r
-#ifndef IOT_NETWORK_RECEIVE_TASK_PRIORITY\r
-    #define IOT_NETWORK_RECEIVE_TASK_PRIORITY      ( tskIDLE_PRIORITY + 1 )\r
-#endif\r
-#ifndef IOT_NETWORK_RECEIVE_TASK_STACK_SIZE\r
-    #define IOT_NETWORK_RECEIVE_TASK_STACK_SIZE    IOT_THREAD_DEFAULT_STACK_SIZE\r
-#endif\r
-\r
-/* Platform and SDK name for AWS IoT MQTT metrics. Only used when\r
- * AWS_IOT_MQTT_ENABLE_METRICS is 1. */\r
-#define IOT_SDK_NAME             "AmazonFreeRTOS"\r
-#ifdef configPLATFORM_NAME\r
-    #define IOT_PLATFORM_NAME    configPLATFORM_NAME\r
-#else\r
-    #define IOT_PLATFORM_NAME    "Unknown"\r
-#endif\r
-\r
-/* Cloud endpoint to which the device connects to. */\r
-#define IOT_CLOUD_ENDPOINT                    clientcredentialMQTT_BROKER_ENDPOINT\r
-\r
-/**\r
- * @brief Unique identifier used to recognize a device by the cloud.\r
- * This could be SHA-256 of the device certificate.\r
- */\r
-extern const char *getDeviceIdentifier( void );\r
-#define IOT_DEVICE_IDENTIFIER                getDeviceIdentifier()\r
-\r
-/**\r
- * @brief Metrics emitted by the device.\r
- */\r
-extern const char *getDeviceMetrics( void );\r
-#define AWS_IOT_METRICS_USERNAME     getDeviceMetrics()\r
-\r
-/**\r
- * @brief Length of the metrics emitted by device.\r
- */\r
-extern uint16_t getDeviceMetricsLength( void );\r
-#define AWS_IOT_METRICS_USERNAME_LENGTH getDeviceMetricsLength()\r
-\r
-/* Define the data type of metrics connection id as same as Socket_t in aws_secure_socket.h */\r
-#define IotMetricsConnectionId_t            void *\r
-\r
-/* Configuration for defender demo: set format to CBOR. */\r
-#define AWS_IOT_DEFENDER_FORMAT             AWS_IOT_DEFENDER_FORMAT_CBOR\r
-\r
-/* Configuration for defender demo: use long tag for readable output. Please use short tag for the real application. */\r
-#define AWS_IOT_DEFENDER_USE_LONG_TAG       ( 1 )\r
-\r
-#endif /* ifndef IOT_CONFIG_COMMON_H_ */\r
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/main.c b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/main.c
deleted file mode 100644 (file)
index 2cf6b38..0000000
+++ /dev/null
@@ -1,210 +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/task-pool/ for configuration and usage instructions.\r
-        ***/\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
-\r
-/*\r
- * Prototypes for the demos that can be started from this project.\r
- */\r
-extern void vStartSimpleTaskPoolDemo( void );\r
-\r
-/* This example is the first in a sequence that adds IoT functionality into\r
-an existing TCP/IP project.  In this first project the TCP/IP stack is not\r
-actually used, but it is still built, which requires this array to be\r
-present. */\r
-const uint8_t ucMACAddress[ 6 ] = { configMAC_ADDR0, configMAC_ADDR1, configMAC_ADDR2, configMAC_ADDR3, configMAC_ADDR4, configMAC_ADDR5 };\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-int main( void )\r
-{\r
-       /***\r
-        * See https://www.FreeRTOS.org/task-pool/ for configuration and usage instructions.\r
-        ***/\r
-\r
-       /* Create the example that demonstrates task pool functionality.  Examples\r
-       that demonstrate networking connectivity will be added in future projects\r
-       and get started after the network has connected (from within the\r
-       vApplicationIPNetworkEventHook() function).*/\r
-       vStartSimpleTaskPoolDemo();\r
-\r
-       /* Start the scheduler - if all is well from this point on only FreeRTOS\r
-       tasks will execute. */\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
-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
-/* 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
-       /* This example is the first in a sequence that adds IoT functionality into\r
-       an existing TCP/IP project.  In this first project the TCP/IP stack is not\r
-       actually used, but it is still built, which requires this function to be\r
-       present.  For now this function does not need to do anything, so just ensure\r
-       the unused parameters don't cause compiler warnings and that calls to this\r
-       function are trapped by the debugger. */\r
-       __debugbreak();\r
-       ( void ) eNetworkEvent;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-extern uint32_t ulApplicationGetNextSequenceNumber( uint32_t ulSourceAddress,\r
-                                                                                                       uint16_t usSourcePort,\r
-                                                                                                       uint32_t ulDestinationAddress,\r
-                                                                                                       uint16_t usDestinationPort )\r
-{\r
-       /* This example is the first in a sequence that adds IoT functionality into\r
-       an existing TCP/IP project.  In this first project the TCP/IP stack is not\r
-       actually used, but it is still built, which requires this function to be\r
-       present.  For now this function does not need to do anything, so just ensure\r
-       the unused parameters don't cause compiler warnings and that calls to this\r
-       function are trapped by the debugger. */\r
-       ( void ) ulSourceAddress;\r
-       ( void ) usSourcePort;\r
-       ( void ) ulDestinationAddress;\r
-       ( void ) usDestinationPort;\r
-       __debugbreak();\r
-       return 0;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-UBaseType_t uxRand( void )\r
-{\r
-       /* This example is the first in a sequence that adds IoT functionality into\r
-       an existing TCP/IP project.  In this first project the TCP/IP stack is not\r
-       actually used, but it is still built, which requires this function to be\r
-       present.  For now this function does not need to do anything, so just ensure\r
-       the calls to the function are trapped by the debugger. */\r
-       __debugbreak();\r
-       return 0;\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
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/printf-stdarg.c b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/printf-stdarg.c
deleted file mode 100644 (file)
index 5505535..0000000
+++ /dev/null
@@ -1,667 +0,0 @@
-/*\r
-       Copyright 2001, 2002 Georges Menie (www.menie.org)\r
-       stdarg version contributed by Christian Ettinger\r
-\r
-       This program is free software; you can redistribute it and/or modify\r
-       it under the terms of the GNU Lesser General Public License as published by\r
-       the Free Software Foundation; either version 2 of the License, or\r
-       (at your option) any later version.\r
-\r
-       Changes for the FreeRTOS ports:\r
-\r
-       - The dot in "%-8.8s"\r
-       - The specifiers 'l' (long) and 'L' (long long)\r
-       - The specifier 'u' for unsigned\r
-       - Dot notation for IP addresses:\r
-         sprintf("IP = %xip\n", 0xC0A80164);\r
-      will produce "IP = 192.168.1.100\n"\r
-*/\r
-\r
-#include <stdarg.h>\r
-#include <stdio.h>\r
-#include <stdlib.h>\r
-#include <string.h>\r
-\r
-#include "FreeRTOS.h"\r
-\r
-#define PAD_RIGHT 1\r
-#define PAD_ZERO 2\r
-\r
-/*\r
- * Return 1 for readable, 2 for writeable, 3 for both.\r
- * Function must be provided by the application.\r
- */\r
-extern BaseType_t xApplicationMemoryPermissions( uint32_t aAddress );\r
-\r
-extern void vOutputChar( const char cChar, const TickType_t xTicksToWait  );\r
-static const TickType_t xTicksToWait = pdMS_TO_TICKS( 20 );\r
-\r
-struct xPrintFlags\r
-{\r
-       int base;\r
-       int width;\r
-       int printLimit;\r
-       unsigned\r
-               pad : 8,\r
-               letBase : 8,\r
-               isSigned : 1,\r
-               isNumber : 1,\r
-               long32 : 1,\r
-               long64 : 1;\r
-};\r
-\r
-struct SStringBuf\r
-{\r
-       char *str;\r
-       const char *orgStr;\r
-       const char *nulPos;\r
-       int curLen;\r
-       struct xPrintFlags flags;\r
-};\r
-\r
-static void strbuf_init( struct SStringBuf *apStr, char *apBuf, const char *apMaxStr )\r
-{\r
-       apStr->str = apBuf;\r
-       apStr->orgStr = apBuf;\r
-       apStr->nulPos = apMaxStr-1;\r
-       apStr->curLen = 0;\r
-\r
-       memset( &apStr->flags, '\0', sizeof( apStr->flags ) );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static BaseType_t strbuf_printchar( struct SStringBuf *apStr, int c )\r
-{\r
-       if( apStr->str == NULL )\r
-       {\r
-               vOutputChar( ( char ) c, xTicksToWait );\r
-               apStr->curLen++;\r
-               return pdTRUE;\r
-       }\r
-       if( apStr->str < apStr->nulPos )\r
-       {\r
-               *( apStr->str++ ) = c;\r
-               apStr->curLen++;\r
-               return pdTRUE;\r
-       }\r
-       if( apStr->str == apStr->nulPos )\r
-       {\r
-               *( apStr->str++ ) = '\0';\r
-       }\r
-       return pdFALSE;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static portINLINE BaseType_t strbuf_printchar_inline( struct SStringBuf *apStr, int c )\r
-{\r
-       if( apStr->str == NULL )\r
-       {\r
-               vOutputChar( ( char ) c, xTicksToWait );\r
-               if( c == 0 )\r
-               {\r
-                       return pdFALSE;\r
-               }\r
-               apStr->curLen++;\r
-               return pdTRUE;\r
-       }\r
-       if( apStr->str < apStr->nulPos )\r
-       {\r
-               *(apStr->str++) = c;\r
-               if( c == 0 )\r
-               {\r
-                       return pdFALSE;\r
-               }\r
-               apStr->curLen++;\r
-               return pdTRUE;\r
-       }\r
-       if( apStr->str == apStr->nulPos )\r
-       {\r
-               *( apStr->str++ ) = '\0';\r
-       }\r
-       return pdFALSE;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static portINLINE int i2hex( int aCh )\r
-{\r
-int iResult;\r
-\r
-       if( aCh < 10 )\r
-       {\r
-               iResult = '0' + aCh;\r
-       }\r
-       else\r
-       {\r
-               iResult = 'A' + aCh - 10;\r
-       }\r
-\r
-       return iResult;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static BaseType_t prints(struct SStringBuf *apBuf, const char *apString )\r
-{\r
-       register int padchar = ' ';\r
-       int i,len;\r
-\r
-       if( xApplicationMemoryPermissions( ( uint32_t )apString ) == 0 )\r
-       {\r
-               /* The user has probably made a mistake with the parameter\r
-               for '%s', the memory is not readbale. */\r
-               apString = "INV_MEM";\r
-       }\r
-\r
-       if( apBuf->flags.width > 0 )\r
-       {\r
-               register int len = 0;\r
-               register const char *ptr;\r
-               for( ptr = apString; *ptr; ++ptr )\r
-               {\r
-                       ++len;\r
-               }\r
-\r
-               if( len >= apBuf->flags.width )\r
-               {\r
-                       apBuf->flags.width = 0;\r
-               }\r
-               else\r
-               {\r
-                       apBuf->flags.width -= len;\r
-               }\r
-\r
-               if( apBuf->flags.pad & PAD_ZERO )\r
-               {\r
-                       padchar = '0';\r
-               }\r
-       }\r
-       if( ( apBuf->flags.pad & PAD_RIGHT ) == 0 )\r
-       {\r
-               for( ; apBuf->flags.width > 0; --apBuf->flags.width )\r
-               {\r
-                       if( strbuf_printchar( apBuf, padchar ) == 0 )\r
-                       {\r
-                               return pdFALSE;\r
-                       }\r
-               }\r
-       }\r
-       if( ( apBuf->flags.isNumber == pdTRUE ) && ( apBuf->flags.pad == pdTRUE ) )\r
-       {\r
-               /* The string to print represents an integer number.\r
-                * In this case, printLimit is the min number of digits to print\r
-                * If the length of the number to print is less than the min nb of i\r
-                * digits to display, we add 0 before printing the number\r
-                */\r
-               len = strlen( apString );\r
-\r
-               if( len < apBuf->flags.printLimit )\r
-               {\r
-                       i = apBuf->flags.printLimit - len;\r
-                       for( ; i; i-- )\r
-                       {\r
-                               if( strbuf_printchar( apBuf, '0' )  == 0 )\r
-                               {\r
-                                       return pdFALSE;\r
-                               }\r
-                       }\r
-               }\r
-       }\r
-       /* The string to print is not the result of a number conversion to ascii.\r
-        * For a string, printLimit is the max number of characters to display\r
-        */\r
-       for( ; apBuf->flags.printLimit && *apString ; ++apString, --apBuf->flags.printLimit )\r
-       {\r
-               if( !strbuf_printchar( apBuf, *apString ) )\r
-               {\r
-                       return pdFALSE;\r
-               }\r
-       }\r
-\r
-       for( ; apBuf->flags.width > 0; --apBuf->flags.width )\r
-       {\r
-               if( !strbuf_printchar( apBuf, padchar ) )\r
-               {\r
-                       return pdFALSE;\r
-               }\r
-       }\r
-\r
-       return pdTRUE;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-/* the following should be enough for 32 bit int */\r
-#define PRINT_BUF_LEN 12       /* to print 4294967296 */\r
-\r
-#if    SPRINTF_LONG_LONG\r
-#warning 64-bit libraries will be included as well\r
-static BaseType_t printll( struct SStringBuf *apBuf, long long i )\r
-{\r
-       char print_buf[ 2 * PRINT_BUF_LEN ];\r
-       register char *s;\r
-       register int t, neg = 0;\r
-       register unsigned long long u = i;\r
-       lldiv_t lldiv_result;\r
-\r
-/* typedef struct\r
- * {\r
- *     long long int quot; // quotient\r
- *     long long int rem;  // remainder\r
- * } lldiv_t;\r
- */\r
-\r
-       apBuf->flags.isNumber = pdTRUE; /* Parameter for prints */\r
-       if( i == 0LL )\r
-       {\r
-               print_buf[ 0 ] = '0';\r
-               print_buf[ 1 ] = '\0';\r
-               return prints( apBuf, print_buf );\r
-       }\r
-\r
-       if( ( apBuf->flags.isSigned == pdTRUE ) && ( apBuf->flags.base == 10 ) && ( i < 0LL ) )\r
-       {\r
-               neg = 1;\r
-               u = -i;\r
-       }\r
-\r
-       s = print_buf + sizeof( print_buf ) - 1;\r
-\r
-       *s = '\0';\r
-       /* 18446744073709551616 */\r
-       while( u != 0 )\r
-       {\r
-               lldiv_result = lldiv( u, ( unsigned long long ) apBuf->flags.base );\r
-               t = lldiv_result.rem;\r
-               if( t >= 10 )\r
-               {\r
-                       t += apBuf->flags.letBase - '0' - 10;\r
-               }\r
-               *( --s ) = t + '0';\r
-               u = lldiv_result.quot;\r
-       }\r
-\r
-       if( neg != 0 )\r
-       {\r
-               if( ( apBuf->flags.width != 0 ) && ( apBuf->flags.pad & PAD_ZERO ) )\r
-               {\r
-                       if( !strbuf_printchar( apBuf, '-' ) )\r
-                       {\r
-                               return pdFALSE;\r
-                       }\r
-                       --apBuf->flags.width;\r
-               }\r
-               else\r
-               {\r
-                       *( --s ) = '-';\r
-               }\r
-       }\r
-\r
-       return prints( apBuf, s );\r
-}\r
-#endif /* SPRINTF_LONG_LONG */\r
-/*-----------------------------------------------------------*/\r
-\r
-static BaseType_t printi( struct SStringBuf *apBuf, int i )\r
-{\r
-       char print_buf[ PRINT_BUF_LEN ];\r
-       register char *s;\r
-       register int t, neg = 0;\r
-       register unsigned int u = i;\r
-       register unsigned base = apBuf->flags.base;\r
-\r
-       apBuf->flags.isNumber = pdTRUE; /* Parameter for prints */\r
-\r
-       if( i == 0 )\r
-       {\r
-               print_buf[ 0 ] = '0';\r
-               print_buf[ 1 ] = '\0';\r
-               return prints( apBuf, print_buf );\r
-       }\r
-\r
-       if( ( apBuf->flags.isSigned == pdTRUE ) && ( base == 10 ) && ( i < 0 ) )\r
-       {\r
-               neg = 1;\r
-               u = -i;\r
-       }\r
-\r
-       s = print_buf + sizeof( print_buf ) - 1;\r
-\r
-       *s = '\0';\r
-       switch( base )\r
-       {\r
-       case 16:\r
-               while( u != 0 )\r
-               {\r
-                       t = u & 0xF;\r
-                       if( t >= 10 )\r
-                       {\r
-                               t += apBuf->flags.letBase - '0' - 10;\r
-                       }\r
-                       *( --s ) = t + '0';\r
-                       u >>= 4;\r
-               }\r
-               break;\r
-\r
-       case 8:\r
-       case 10:\r
-               /* GCC compiles very efficient */\r
-               while( u )\r
-               {\r
-                       t = u % base;\r
-                       *( --s ) = t + '0';\r
-                       u /= base;\r
-               }\r
-               break;\r
-/*\r
-       // The generic case, not yet in use\r
-       default:\r
-               while( u )\r
-               {\r
-                       t = u % base;\r
-                       if( t >= 10)\r
-                       {\r
-                               t += apBuf->flags.letBase - '0' - 10;\r
-                       }\r
-                       *( --s ) = t + '0';\r
-                       u /= base;\r
-               }\r
-               break;\r
-*/\r
-       }\r
-\r
-       if( neg != 0 )\r
-       {\r
-               if( apBuf->flags.width && (apBuf->flags.pad & PAD_ZERO ) )\r
-               {\r
-                       if( strbuf_printchar( apBuf, '-' ) == 0 )\r
-                       {\r
-                               return pdFALSE;\r
-                       }\r
-                       --apBuf->flags.width;\r
-               }\r
-               else\r
-               {\r
-                       *( --s ) = '-';\r
-               }\r
-       }\r
-\r
-       return prints( apBuf, s );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static BaseType_t printIp(struct SStringBuf *apBuf, unsigned i )\r
-{\r
-       char print_buf[16];\r
-\r
-       sprintf( print_buf, "%u.%u.%u.%u",\r
-               i >> 24,\r
-               ( i >> 16 ) & 0xff,\r
-               ( i >> 8 ) & 0xff,\r
-               i & 0xff );\r
-       apBuf->flags.isNumber = pdTRUE; /* Parameter for prints */\r
-       prints( apBuf, print_buf );\r
-\r
-       return pdTRUE;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void tiny_print( struct SStringBuf *apBuf, const char *format, va_list args )\r
-{\r
-       char scr[2];\r
-\r
-       for( ; ; )\r
-       {\r
-               int ch = *( format++ );\r
-\r
-               if( ch != '%' )\r
-               {\r
-                       do\r
-                       {\r
-                               /* Put the most like flow in a small loop */\r
-                               if( strbuf_printchar_inline( apBuf, ch ) == 0 )\r
-                               {\r
-                                       return;\r
-                               }\r
-                               ch = *( format++ );\r
-                       } while( ch != '%' );\r
-               }\r
-               ch = *( format++ );\r
-               /* Now ch has character after '%', format pointing to next */\r
-\r
-               if( ch == '\0' )\r
-               {\r
-                       break;\r
-               }\r
-               if( ch == '%' )\r
-               {\r
-                       if( strbuf_printchar( apBuf, ch ) == 0 )\r
-                       {\r
-                               return;\r
-                       }\r
-                       continue;\r
-               }\r
-               memset( &apBuf->flags, '\0', sizeof( apBuf->flags ) );\r
-\r
-               if( ch == '-' )\r
-               {\r
-                       ch = *( format++ );\r
-                       apBuf->flags.pad = PAD_RIGHT;\r
-               }\r
-               while( ch == '0' )\r
-               {\r
-                       ch = *( format++ );\r
-                       apBuf->flags.pad |= PAD_ZERO;\r
-               }\r
-               if( ch == '*' )\r
-               {\r
-                       ch = *( format++ );\r
-                       apBuf->flags.width = va_arg( args, int );\r
-               }\r
-               else\r
-               {\r
-                       while( ch >= '0' && ch <= '9' )\r
-                       {\r
-                               apBuf->flags.width *= 10;\r
-                               apBuf->flags.width += ch - '0';\r
-                               ch = *( format++ );\r
-                       }\r
-               }\r
-               if( ch == '.' )\r
-               {\r
-                       ch = *( format++ );\r
-                       if( ch == '*' )\r
-                       {\r
-                               apBuf->flags.printLimit = va_arg( args, int );\r
-                               ch = *( format++ );\r
-                       }\r
-                       else\r
-                       {\r
-                               while( ch >= '0' && ch <= '9' )\r
-                               {\r
-                                       apBuf->flags.printLimit *= 10;\r
-                                       apBuf->flags.printLimit += ch - '0';\r
-                                       ch = *( format++ );\r
-                               }\r
-                       }\r
-               }\r
-               if( apBuf->flags.printLimit == 0 )\r
-               {\r
-                       apBuf->flags.printLimit--;  /* -1: make it unlimited */\r
-               }\r
-               if( ch == 's' )\r
-               {\r
-                       register char *s = ( char * )va_arg( args, int );\r
-                       if( prints( apBuf, s ? s : "(null)" ) == 0 )\r
-                       {\r
-                               break;\r
-                       }\r
-                       continue;\r
-               }\r
-               if( ch == 'c' )\r
-               {\r
-                       /* char are converted to int then pushed on the stack */\r
-                       scr[0] = ( char ) va_arg( args, int );\r
-\r
-                       if( strbuf_printchar( apBuf, scr[0] )  == 0 )\r
-                       {\r
-                               return;\r
-                       }\r
-\r
-                       continue;\r
-               }\r
-               if( ch == 'l' )\r
-               {\r
-                       ch = *( format++ );\r
-                       apBuf->flags.long32 = 1;\r
-                       /* Makes not difference as u32 == long */\r
-               }\r
-               if( ch == 'L' )\r
-               {\r
-                       ch = *( format++ );\r
-                       apBuf->flags.long64 = 1;\r
-                       /* Does make a difference */\r
-               }\r
-               apBuf->flags.base = 10;\r
-               apBuf->flags.letBase = 'a';\r
-\r
-               if( ch == 'd' || ch == 'u' )\r
-               {\r
-                       apBuf->flags.isSigned = ( ch == 'd' );\r
-#if    SPRINTF_LONG_LONG\r
-                       if( apBuf->flags.long64 != pdFALSE )\r
-                       {\r
-                               if( printll( apBuf, va_arg( args, long long ) ) == 0 )\r
-                               {\r
-                                       break;\r
-                               }\r
-                       } else\r
-#endif /* SPRINTF_LONG_LONG */\r
-                       if( printi( apBuf, va_arg( args, int ) ) == 0 )\r
-                       {\r
-                               break;\r
-                       }\r
-                       continue;\r
-               }\r
-\r
-               apBuf->flags.base = 16;         /* From here all hexadecimal */\r
-\r
-               if( ch == 'x' && format[0] == 'i' && format[1] == 'p' )\r
-               {\r
-                       format += 2;    /* eat the "xi" of "xip" */\r
-                       /* Will use base 10 again */\r
-                       if( printIp( apBuf, va_arg( args, int ) ) == 0 )\r
-                       {\r
-                               break;\r
-                       }\r
-                       continue;\r
-               }\r
-               if( ch == 'x' || ch == 'X' || ch == 'p' || ch == 'o' )\r
-               {\r
-                       if( ch == 'X' )\r
-                       {\r
-                               apBuf->flags.letBase = 'A';\r
-                       }\r
-                       else if( ch == 'o' )\r
-                       {\r
-                               apBuf->flags.base = 8;\r
-                       }\r
-#if    SPRINTF_LONG_LONG\r
-                       if( apBuf->flags.long64 != pdFALSE )\r
-                       {\r
-                               if( printll( apBuf, va_arg( args, long long ) ) == 0 )\r
-                               {\r
-                                       break;\r
-                               }\r
-                       } else\r
-#endif /* SPRINTF_LONG_LONG */\r
-                       if( printi( apBuf, va_arg( args, int ) ) == 0 )\r
-                       {\r
-                               break;\r
-                       }\r
-                       continue;\r
-               }\r
-       }\r
-       strbuf_printchar( apBuf, '\0' );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-int vsnprintf( char *apBuf, size_t aMaxLen, const char *apFmt, va_list args )\r
-{\r
-       struct SStringBuf strBuf;\r
-       strbuf_init( &strBuf, apBuf, ( const char* )apBuf + aMaxLen );\r
-       tiny_print( &strBuf, apFmt, args );\r
-\r
-       return strBuf.curLen;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-int snprintf( char *apBuf, size_t aMaxLen, const char *apFmt, ... )\r
-{\r
-       va_list args;\r
-\r
-       va_start( args,  apFmt );\r
-       struct SStringBuf strBuf;\r
-       strbuf_init( &strBuf, apBuf, ( const char* )apBuf + aMaxLen );\r
-       tiny_print( &strBuf, apFmt, args );\r
-       va_end( args );\r
-\r
-       return strBuf.curLen;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-int sprintf( char *apBuf, const char *apFmt, ... )\r
-{\r
-       va_list args;\r
-\r
-       va_start( args,  apFmt );\r
-       struct SStringBuf strBuf;\r
-       strbuf_init( &strBuf, apBuf, ( const char * )apBuf + 1024 );\r
-       tiny_print( &strBuf, apFmt, args );\r
-       va_end( args );\r
-\r
-       return strBuf.curLen;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-int vsprintf( char *apBuf, const char *apFmt, va_list args )\r
-{\r
-       struct SStringBuf strBuf;\r
-       strbuf_init( &strBuf, apBuf, ( const char* ) apBuf + 1024 );\r
-       tiny_print( &strBuf, apFmt, args );\r
-\r
-       return strBuf.curLen;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-const char *mkSize (unsigned long long aSize, char *apBuf, int aLen)\r
-{\r
-static char retString[33];\r
-size_t gb, mb, kb, sb;\r
-\r
-       if (apBuf == NULL) {\r
-               apBuf = retString;\r
-               aLen = sizeof( retString );\r
-       }\r
-       gb = aSize / (1024*1024*1024);\r
-       aSize -= gb * (1024*1024*1024);\r
-       mb = aSize / (1024*1024);\r
-       aSize -= mb * (1024*1024);\r
-       kb = aSize / (1024);\r
-       aSize -= kb * (1024);\r
-       sb = aSize;\r
-       if( gb )\r
-       {\r
-               snprintf (apBuf, aLen, "%u.%02u GB", ( unsigned ) gb, ( unsigned ) ( ( 100 * mb ) / 1024ul ) );\r
-       }\r
-       else if( mb )\r
-       {\r
-               snprintf (apBuf, aLen, "%u.%02u MB", ( unsigned ) mb, ( unsigned ) ( ( 100 * kb) / 1024ul ) );\r
-       }\r
-       else if( kb != 0ul )\r
-       {\r
-               snprintf (apBuf, aLen, "%u.%02u KB", ( unsigned ) kb, ( unsigned ) ( ( 100 * sb) / 1024ul ) );\r
-       }\r
-       else\r
-       {\r
-               snprintf (apBuf, aLen, "%u bytes", ( unsigned ) sb);\r
-       }\r
-       return apBuf;\r
-}\r
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/task_pool_demo.sln b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/task_pool/task_pool_demo.sln
deleted file mode 100644 (file)
index b362f36..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-\r
-Microsoft Visual Studio Solution File, Format Version 11.00\r
-# Visual Studio 2010\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RTOSDemo", "WIN32.vcxproj", "{C686325E-3261-42F7-AEB1-DDE5280E1CEB}"\r
-EndProject\r
-Global\r
-       GlobalSection(TestCaseManagementSettings) = postSolution\r
-               CategoryFile = FreeRTOS_Plus_TCP_Minimal.vsmdi\r
-       EndGlobalSection\r
-       GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
-               Debug|Win32 = Debug|Win32\r
-               Release|Win32 = Release|Win32\r
-       EndGlobalSection\r
-       GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
-               {C686325E-3261-42F7-AEB1-DDE5280E1CEB}.Debug|Win32.ActiveCfg = Debug|Win32\r
-               {C686325E-3261-42F7-AEB1-DDE5280E1CEB}.Debug|Win32.Build.0 = Debug|Win32\r
-               {C686325E-3261-42F7-AEB1-DDE5280E1CEB}.Release|Win32.ActiveCfg = Release|Win32\r
-               {C686325E-3261-42F7-AEB1-DDE5280E1CEB}.Release|Win32.Build.0 = Release|Win32\r
-       EndGlobalSection\r
-       GlobalSection(SolutionProperties) = preSolution\r
-               HideSolutionNode = FALSE\r
-       EndGlobalSection\r
-EndGlobal\r
index 5f4fa3da6bd5ebf2b7ef23e8eca27c7d84dba4ed..0a0774b1d47a8584ca52b1ddfdc6bf1cd1e356f1 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
+ * FreeRTOS Kernel V10.3.0\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
index f73e0f3522ffffd73c1f896a537006514220b44c..c0670fe87273bca3f8926079cfdb1298d9874640 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
+ * FreeRTOS Kernel V10.3.0\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
index 37204d126fb987096912da6c76fc0ec3c5565369..ea340418cab3f5cd869b9493230479a55fc0a510 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
+ * FreeRTOS Kernel V10.3.0\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
index d155d87a75cf4417330e73ebcf4a6c16fe6fcefb..6cd24037fc95fc1f06fedf06293fcd7645f90029 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
+ * FreeRTOS Kernel V10.3.0\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
index a8e293dce0d199cdc79b19cb63d98fbb11363a45..d02c44aa096ddc5248b8d052a9a70e0706024b30 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
+ * FreeRTOS Kernel V10.3.0\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
index 347140a11cb3fac174ae9153ec167ceb75e5b2ff..2ff605a6fa3ab4b63fa058d7ac6c69aa7d755fef 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
+ * FreeRTOS Kernel V10.3.0\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
index 523fc8bad2c561e2dfd706920286e8684bbc700a..a2702090eb54d7c9835c396c86f71e346358b2ef 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
+ * FreeRTOS Kernel V10.3.0\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
index 04a8a656e5bc2fd1a609445bcc33542d0532d165..420a39f758f9127ca572d1cea6369aa40b060d3c 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
+ * FreeRTOS Kernel V10.3.0\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
index 72ed5a42592c72d3647a4e027e7832615732a1db..b87d8c79c7d197d71c1e8e10a8af2264d87a0aca 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
+ * FreeRTOS Kernel V10.3.0\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
index 42e7cc43ca3e81213f6e7345bccb676c3b55019b..f36a93f92d41cb5b7532453d4dcf6f52679dc5b2 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
+ * FreeRTOS Kernel V10.3.0\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
index 565982363f4d226c9cdcb2da4bc25b5c5050472d..bd7079965e26a082ce1cb2a1c2f8c0cbe9714410 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
+ * FreeRTOS Kernel V10.3.0\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
index f5bf1673a9dcd41ed5324bdfcc5b5230bceb41a6..182afeac1838802abb5de0593e1ca7a7ab16691f 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
+ * FreeRTOS Kernel V10.3.0\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
index 54143c367594f74089c5c3817f2306a9f223919e..3bd55b372fa14c144241fd21cf9c74cbb68b6070 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
+ * FreeRTOS Kernel V10.3.0\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
index e89d369dc6a8d44efdf28b2fbf64de8175e1d377..c4f8eb146fc825b3b87d8a22dd6575a7a9c4e2af 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
+ * FreeRTOS Kernel V10.3.0\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
index 342ab123a47f9c333fd271febce5c7502a6bc0d7..d178d2c2db5aa43240a04cbbe1d3b139b9e6f4e3 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
+ * FreeRTOS Kernel V10.3.0\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
index 0f4676f4772e3d3a415326e5e8e74e3e96ef43bc..864a3a10f243186387ebc1474a4b19ea1279876b 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
+ * FreeRTOS Kernel V10.3.0\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
index 7fdff102b08e0f02e7ae35d6ea4d5cccc60d1b99..2ea535408aa6e9235fd646a2231c1c4c5f96becd 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
+ * FreeRTOS Kernel V10.3.0\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
index 4aa549e8c8c1969a982219301847036707dde4f2..9adb448e9c8151d9ad71030eed87f86f61333bc5 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
+ * FreeRTOS Kernel V10.3.0\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
index d704da8004f74c3a28b10916a765b07d20024a48..ea1c431c02bb70f048a627672d7ac742c252bd58 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
+ * FreeRTOS Kernel V10.3.0\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
index 8fe5393764f542bd3e1a4446664aea4071029b1d..6a93bea2c1f97cac6dc7ec0f8110f84de2d768e2 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
+ * FreeRTOS Kernel V10.3.0\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
index d6a1d257778ae5f2aa64025fee0c1e97e4926793..61d6f2039d12996bb43b6c0255fe8534ebf3de4d 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
+ * FreeRTOS Kernel V10.3.0\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
index 62ae46a52ce1a126b10634c49e896f0c69d80290..ad6886b1736a532b51bac8347d148e0fc876668a 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
+ * FreeRTOS Kernel V10.3.0\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
index fae30bd74690936f5093d293410595857276ac2c..9641e062488aca0924e4c4bb8000fe3ac013439a 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
+ * FreeRTOS Kernel V10.3.0\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
index e031afb8eda55484a680fe6a6fe86272cf7f10c4..c0898511d7ab0f264086a6a61b81548e54d29706 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
+ * FreeRTOS Kernel V10.3.0\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
index ad8d22cc43bc445f7f0b25fb8399ca92b0c9d0ef..727a805d060efe764782bd9e5b294fb0ba9f3786 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
+ * FreeRTOS Kernel V10.3.0\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
index ba678b98c7c99ddf57d8ea79c652207e390a37c5..8667ac2e0fe783f97dc0dc5cfb2b14617595e4fb 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
+ * FreeRTOS Kernel V10.3.0\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
index 05587047e53001aca5703a4dbcbd47852229f6f6..08616dc114cb8c434e5545443b27346bb4849dd2 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
+ * FreeRTOS Kernel V10.3.0\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
index c98a7e8703653d7d616713cf2f543a68419f403a..7d8ed18c692fbb19447a874be2e54062708ace59 100644 (file)
-/*\r
- * FreeRTOS+TCP V2.2.0\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://aws.amazon.com/freertos\r
- * http://www.FreeRTOS.org\r
- */\r
-\r
-/* Standard includes. */\r
-#include <stdint.h>\r
-#include <stdio.h>\r
-\r
-/* FreeRTOS includes. */\r
-#include "FreeRTOS.h"\r
-#include "task.h"\r
-#include "queue.h"\r
-#include "semphr.h"\r
-\r
-/* FreeRTOS+TCP includes. */\r
-#include "FreeRTOS_IP.h"\r
-#include "FreeRTOS_Sockets.h"\r
-#include "FreeRTOS_IP_Private.h"\r
-#include "FreeRTOS_ARP.h"\r
-#include "FreeRTOS_UDP_IP.h"\r
-#include "FreeRTOS_DHCP.h"\r
-#if( ipconfigUSE_LLMNR == 1 )\r
-       #include "FreeRTOS_DNS.h"\r
-#endif /* ipconfigUSE_LLMNR */\r
-#include "NetworkInterface.h"\r
-#include "NetworkBufferManagement.h"\r
-\r
-\r
-/* When the age of an entry in the ARP table reaches this value (it counts down\r
-to zero, so this is an old entry) an ARP request will be sent to see if the\r
-entry is still valid and can therefore be refreshed. */\r
-#define arpMAX_ARP_AGE_BEFORE_NEW_ARP_REQUEST          ( 3 )\r
-\r
-/* The time between gratuitous ARPs. */\r
-#ifndef arpGRATUITOUS_ARP_PERIOD\r
-       #define arpGRATUITOUS_ARP_PERIOD                                        ( pdMS_TO_TICKS( 20000 ) )\r
-#endif\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-/*\r
- * Lookup an MAC address in the ARP cache from the IP address.\r
- */\r
-static eARPLookupResult_t prvCacheLookup( uint32_t ulAddressToLookup, MACAddress_t * const pxMACAddress );\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-/* The ARP cache. */\r
-static ARPCacheRow_t xARPCache[ ipconfigARP_CACHE_ENTRIES ];\r
-\r
-/* The time at which the last gratuitous ARP was sent.  Gratuitous ARPs are used\r
-to ensure ARP tables are up to date and to detect IP address conflicts. */\r
-static TickType_t xLastGratuitousARPTime = ( TickType_t ) 0;\r
-\r
-/*\r
- * IP-clash detection is currently only used internally. When DHCP doesn't respond, the\r
- * driver can try out a random LinkLayer IP address (169.254.x.x).  It will send out a\r
- * gratuitos ARP message and, after a period of time, check the variables here below:\r
- */\r
-#if( ipconfigARP_USE_CLASH_DETECTION != 0 )\r
-       /* Becomes non-zero if another device responded to a gratuitos ARP message. */\r
-       BaseType_t xARPHadIPClash;\r
-       /* MAC-address of the other device containing the same IP-address. */\r
-       MACAddress_t xARPClashMacAddress;\r
-#endif /* ipconfigARP_USE_CLASH_DETECTION */\r
-\r
-/* Part of the Ethernet and ARP headers are always constant when sending an IPv4\r
-ARP packet.  This array defines the constant parts, allowing this part of the\r
-packet to be filled in using a simple memcpy() instead of individual writes. */\r
-static const uint8_t xDefaultPartARPPacketHeader[] =\r
-{\r
-       0xff, 0xff, 0xff, 0xff, 0xff, 0xff,     /* Ethernet destination address. */\r
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x00,     /* Ethernet source address. */\r
-       0x08, 0x06,                                                     /* Ethernet frame type (ipARP_FRAME_TYPE). */\r
-       0x00, 0x01,                                                     /* usHardwareType (ipARP_HARDWARE_TYPE_ETHERNET). */\r
-       0x08, 0x00,                                                             /* usProtocolType. */\r
-       ipMAC_ADDRESS_LENGTH_BYTES,                     /* ucHardwareAddressLength. */\r
-       ipIP_ADDRESS_LENGTH_BYTES,                              /* ucProtocolAddressLength. */\r
-       0x00, 0x01,                                                     /* usOperation (ipARP_REQUEST). */\r
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x00,     /* xSenderHardwareAddress. */\r
-       0x00, 0x00, 0x00, 0x00,                                 /* ulSenderProtocolAddress. */\r
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x00              /* xTargetHardwareAddress. */\r
-};\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-eFrameProcessingResult_t eARPProcessPacket( ARPPacket_t * const pxARPFrame )\r
-{\r
-eFrameProcessingResult_t eReturn = eReleaseBuffer;\r
-ARPHeader_t *pxARPHeader;\r
-uint32_t ulTargetProtocolAddress, ulSenderProtocolAddress;\r
-\r
-       pxARPHeader = &( pxARPFrame->xARPHeader );\r
-\r
-       /* The field ulSenderProtocolAddress is badly aligned, copy byte-by-byte. */\r
-       memcpy( ( void *)&( ulSenderProtocolAddress ), ( void * )pxARPHeader->ucSenderProtocolAddress, sizeof( ulSenderProtocolAddress ) );\r
-       /* The field ulTargetProtocolAddress is well-aligned, a 32-bits copy. */\r
-       ulTargetProtocolAddress = pxARPHeader->ulTargetProtocolAddress;\r
-\r
-       traceARP_PACKET_RECEIVED();\r
-\r
-       /* Don't do anything if the local IP address is zero because\r
-       that means a DHCP request has not completed. */\r
-       if( *ipLOCAL_IP_ADDRESS_POINTER != 0UL )\r
-       {\r
-               switch( pxARPHeader->usOperation )\r
-               {\r
-                       case ipARP_REQUEST      :\r
-                               /* The packet contained an ARP request.  Was it for the IP\r
-                               address of the node running this code? */\r
-                               if( ulTargetProtocolAddress == *ipLOCAL_IP_ADDRESS_POINTER )\r
-                               {\r
-                                       iptraceSENDING_ARP_REPLY( ulSenderProtocolAddress );\r
-\r
-                                       /* The request is for the address of this node.  Add the\r
-                                       entry into the ARP cache, or refresh the entry if it\r
-                                       already exists. */\r
-                                       vARPRefreshCacheEntry( &( pxARPHeader->xSenderHardwareAddress ), ulSenderProtocolAddress );\r
-\r
-                                       /* Generate a reply payload in the same buffer. */\r
-                                       pxARPHeader->usOperation = ( uint16_t ) ipARP_REPLY;\r
-                                       if( ulTargetProtocolAddress == ulSenderProtocolAddress )\r
-                                       {\r
-                                               /* A double IP address is detected! */\r
-                                               /* Give the sources MAC address the value of the broadcast address, will be swapped later */\r
-                                               memcpy( pxARPFrame->xEthernetHeader.xSourceAddress.ucBytes, xBroadcastMACAddress.ucBytes, sizeof( xBroadcastMACAddress ) );\r
-                                               memset( pxARPHeader->xTargetHardwareAddress.ucBytes, '\0', sizeof( MACAddress_t ) );\r
-                                               pxARPHeader->ulTargetProtocolAddress = 0UL;\r
-                                       }\r
-                                       else\r
-                                       {\r
-                                               memcpy( pxARPHeader->xTargetHardwareAddress.ucBytes, pxARPHeader->xSenderHardwareAddress.ucBytes, sizeof( MACAddress_t ) );\r
-                                               pxARPHeader->ulTargetProtocolAddress = ulSenderProtocolAddress;\r
-                                       }\r
-                                       memcpy( pxARPHeader->xSenderHardwareAddress.ucBytes, ( void * ) ipLOCAL_MAC_ADDRESS, sizeof( MACAddress_t ) );\r
-                                       memcpy( ( void* )pxARPHeader->ucSenderProtocolAddress, ( void* )ipLOCAL_IP_ADDRESS_POINTER, sizeof( pxARPHeader->ucSenderProtocolAddress ) );\r
-\r
-                                       eReturn = eReturnEthernetFrame;\r
-                               }\r
-                               break;\r
-\r
-                       case ipARP_REPLY :\r
-                               iptracePROCESSING_RECEIVED_ARP_REPLY( ulTargetProtocolAddress );\r
-                               vARPRefreshCacheEntry( &( pxARPHeader->xSenderHardwareAddress ), ulSenderProtocolAddress );\r
-                               /* Process received ARP frame to see if there is a clash. */\r
-                               #if( ipconfigARP_USE_CLASH_DETECTION != 0 )\r
-                               {\r
-                                       if( ulSenderProtocolAddress == *ipLOCAL_IP_ADDRESS_POINTER )\r
-                                       {\r
-                                               xARPHadIPClash = pdTRUE;\r
-                                               memcpy( xARPClashMacAddress.ucBytes, pxARPHeader->xSenderHardwareAddress.ucBytes, sizeof( xARPClashMacAddress.ucBytes ) );\r
-                                       }\r
-                               }\r
-                               #endif /* ipconfigARP_USE_CLASH_DETECTION */\r
-                               break;\r
-\r
-                       default :\r
-                               /* Invalid. */\r
-                               break;\r
-               }\r
-       }\r
-\r
-       return eReturn;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_ARP_REMOVE_ENTRY != 0 )\r
-\r
-       uint32_t ulARPRemoveCacheEntryByMac( const MACAddress_t * pxMACAddress )\r
-       {\r
-       BaseType_t x;\r
-       uint32_t lResult = 0;\r
-\r
-               /* For each entry in the ARP cache table. */\r
-               for( x = 0; x < ipconfigARP_CACHE_ENTRIES; x++ )\r
-               {\r
-                       if( ( memcmp( xARPCache[ x ].xMACAddress.ucBytes, pxMACAddress->ucBytes, sizeof( pxMACAddress->ucBytes ) ) == 0 ) )\r
-                       {\r
-                               lResult = xARPCache[ x ].ulIPAddress;\r
-                               memset( &xARPCache[ x ], '\0', sizeof( xARPCache[ x ] ) );\r
-                               break;\r
-                       }\r
-               }\r
-\r
-               return lResult;\r
-       }\r
-\r
-#endif /* ipconfigUSE_ARP_REMOVE_ENTRY != 0 */\r
-/*-----------------------------------------------------------*/\r
-\r
-void vARPRefreshCacheEntry( const MACAddress_t * pxMACAddress, const uint32_t ulIPAddress )\r
-{\r
-BaseType_t x = 0;\r
-BaseType_t xIpEntry = -1;\r
-BaseType_t xMacEntry = -1;\r
-BaseType_t xUseEntry = 0;\r
-uint8_t ucMinAgeFound = 0U;\r
-\r
-       #if( ipconfigARP_STORES_REMOTE_ADDRESSES == 0 )\r
-               /* Only process the IP address if it is on the local network.\r
-               Unless: when '*ipLOCAL_IP_ADDRESS_POINTER' equals zero, the IP-address\r
-               and netmask are still unknown. */\r
-               if( ( ( ulIPAddress & xNetworkAddressing.ulNetMask ) == ( ( *ipLOCAL_IP_ADDRESS_POINTER ) & xNetworkAddressing.ulNetMask ) ) ||\r
-                       ( *ipLOCAL_IP_ADDRESS_POINTER == 0ul ) )\r
-       #else\r
-               /* If ipconfigARP_STORES_REMOTE_ADDRESSES is non-zero, IP addresses with\r
-               a different netmask will also be stored.  After when replying to a UDP\r
-               message from a different netmask, the IP address can be looped up and a\r
-               reply sent.  This option is useful for systems with multiple gateways,\r
-               the reply will surely arrive.  If ipconfigARP_STORES_REMOTE_ADDRESSES is\r
-               zero the the gateway address is the only option. */\r
-               if( pdTRUE )\r
-       #endif\r
-       {\r
-               /* Start with the maximum possible number. */\r
-               ucMinAgeFound--;\r
-\r
-               /* For each entry in the ARP cache table. */\r
-               for( x = 0; x < ipconfigARP_CACHE_ENTRIES; x++ )\r
-               {\r
-                       /* Does this line in the cache table hold an entry for the IP\r
-                       address being queried? */\r
-                       if( xARPCache[ x ].ulIPAddress == ulIPAddress )\r
-                       {\r
-                               if( pxMACAddress == NULL )\r
-                               {\r
-                                       /* In case the parameter pxMACAddress is NULL, an entry will be reserved to\r
-                                       indicate that there is an outstanding ARP request, This entry will have\r
-                                       "ucValid == pdFALSE". */\r
-                                       xIpEntry = x;\r
-                                       break;\r
-                               }\r
-\r
-                               /* See if the MAC-address also matches. */\r
-                               if( memcmp( xARPCache[ x ].xMACAddress.ucBytes, pxMACAddress->ucBytes, sizeof( pxMACAddress->ucBytes ) ) == 0 )\r
-                               {\r
-                                       /* This function will be called for each received packet\r
-                                       As this is by far the most common path the coding standard\r
-                                       is relaxed in this case and a return is permitted as an\r
-                                       optimisation. */\r
-                                       xARPCache[ x ].ucAge = ( uint8_t ) ipconfigMAX_ARP_AGE;\r
-                                       xARPCache[ x ].ucValid = ( uint8_t ) pdTRUE;\r
-                                       return;\r
-                               }\r
-\r
-                               /* Found an entry containing ulIPAddress, but the MAC address\r
-                               doesn't match.  Might be an entry with ucValid=pdFALSE, waiting\r
-                               for an ARP reply.  Still want to see if there is match with the\r
-                               given MAC address.ucBytes.  If found, either of the two entries\r
-                               must be cleared. */\r
-                               xIpEntry = x;\r
-                       }\r
-                       else if( ( pxMACAddress != NULL ) && ( memcmp( xARPCache[ x ].xMACAddress.ucBytes, pxMACAddress->ucBytes, sizeof( pxMACAddress->ucBytes ) ) == 0 ) )\r
-                       {\r
-                               /* Found an entry with the given MAC-address, but the IP-address\r
-                               is different.  Continue looping to find a possible match with\r
-                               ulIPAddress. */\r
-       #if( ipconfigARP_STORES_REMOTE_ADDRESSES != 0 )\r
-                               /* If ARP stores the MAC address of IP addresses outside the\r
-                               network, than the MAC address of the gateway should not be\r
-                               overwritten. */\r
-                               BaseType_t bIsLocal[ 2 ];\r
-                               bIsLocal[ 0 ] = ( ( xARPCache[ x ].ulIPAddress & xNetworkAddressing.ulNetMask ) == ( ( *ipLOCAL_IP_ADDRESS_POINTER ) & xNetworkAddressing.ulNetMask ) );\r
-                               bIsLocal[ 1 ] = ( ( ulIPAddress & xNetworkAddressing.ulNetMask ) == ( ( *ipLOCAL_IP_ADDRESS_POINTER ) & xNetworkAddressing.ulNetMask ) );\r
-                               if( bIsLocal[ 0 ] == bIsLocal[ 1 ] )\r
-                               {\r
-                                       xMacEntry = x;\r
-                               }\r
-       #else\r
-                               xMacEntry = x;\r
-       #endif\r
-                       }\r
-                       /* _HT_\r
-                       Shouldn't we test for xARPCache[ x ].ucValid == pdFALSE here ? */\r
-                       else if( xARPCache[ x ].ucAge < ucMinAgeFound )\r
-                       {\r
-                               /* As the table is traversed, remember the table row that\r
-                               contains the oldest entry (the lowest age count, as ages are\r
-                               decremented to zero) so the row can be re-used if this function\r
-                               needs to add an entry that does not already exist. */\r
-                               ucMinAgeFound = xARPCache[ x ].ucAge;\r
-                               xUseEntry = x;\r
-                       }\r
-               }\r
-\r
-               if( xMacEntry >= 0 )\r
-               {\r
-                       xUseEntry = xMacEntry;\r
-\r
-                       if( xIpEntry >= 0 )\r
-                       {\r
-                               /* Both the MAC address as well as the IP address were found in\r
-                               different locations: clear the entry which matches the\r
-                               IP-address */\r
-                               memset( &xARPCache[ xIpEntry ], '\0', sizeof( xARPCache[ xIpEntry ] ) );\r
-                       }\r
-               }\r
-               else if( xIpEntry >= 0 )\r
-               {\r
-                       /* An entry containing the IP-address was found, but it had a different MAC address */\r
-                       xUseEntry = xIpEntry;\r
-               }\r
-\r
-               /* If the entry was not found, we use the oldest entry and set the IPaddress */\r
-               xARPCache[ xUseEntry ].ulIPAddress = ulIPAddress;\r
-\r
-               if( pxMACAddress != NULL )\r
-               {\r
-                       memcpy( xARPCache[ xUseEntry ].xMACAddress.ucBytes, pxMACAddress->ucBytes, sizeof( pxMACAddress->ucBytes ) );\r
-\r
-                       iptraceARP_TABLE_ENTRY_CREATED( ulIPAddress, (*pxMACAddress) );\r
-                       /* And this entry does not need immediate attention */\r
-                       xARPCache[ xUseEntry ].ucAge = ( uint8_t ) ipconfigMAX_ARP_AGE;\r
-                       xARPCache[ xUseEntry ].ucValid = ( uint8_t ) pdTRUE;\r
-               }\r
-               else if( xIpEntry < 0 )\r
-               {\r
-                       xARPCache[ xUseEntry ].ucAge = ( uint8_t ) ipconfigMAX_ARP_RETRANSMISSIONS;\r
-                       xARPCache[ xUseEntry ].ucValid = ( uint8_t ) pdFALSE;\r
-               }\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_ARP_REVERSED_LOOKUP == 1 )\r
-       eARPLookupResult_t eARPGetCacheEntryByMac( MACAddress_t * const pxMACAddress, uint32_t *pulIPAddress )\r
-       {\r
-       BaseType_t x;\r
-       eARPLookupResult_t eReturn = eARPCacheMiss;\r
-\r
-               /* Loop through each entry in the ARP cache. */\r
-               for( x = 0; x < ipconfigARP_CACHE_ENTRIES; x++ )\r
-               {\r
-                       /* Does this row in the ARP cache table hold an entry for the MAC\r
-                       address being searched? */\r
-                       if( memcmp( pxMACAddress->ucBytes, xARPCache[ x ].xMACAddress.ucBytes, sizeof( MACAddress_t ) ) == 0 )\r
-                       {\r
-                               *pulIPAddress = xARPCache[ x ].ulIPAddress;\r
-                               eReturn = eARPCacheHit;\r
-                               break;\r
-                       }\r
-               }\r
-\r
-               return eReturn;\r
-       }\r
-#endif /* ipconfigUSE_ARP_REVERSED_LOOKUP */\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-eARPLookupResult_t eARPGetCacheEntry( uint32_t *pulIPAddress, MACAddress_t * const pxMACAddress )\r
-{\r
-eARPLookupResult_t eReturn;\r
-uint32_t ulAddressToLookup;\r
-\r
-#if( ipconfigUSE_LLMNR == 1 )\r
-       if( *pulIPAddress == ipLLMNR_IP_ADDR )  /* Is in network byte order. */\r
-       {\r
-               /* The LLMNR IP-address has a fixed virtual MAC address. */\r
-               memcpy( pxMACAddress->ucBytes, xLLMNR_MacAdress.ucBytes, sizeof( MACAddress_t ) );\r
-               eReturn = eARPCacheHit;\r
-       }\r
-       else\r
-#endif\r
-       if( ( *pulIPAddress == ipBROADCAST_IP_ADDRESS ) ||      /* Is it the general broadcast address 255.255.255.255? */\r
-               ( *pulIPAddress == xNetworkAddressing.ulBroadcastAddress ) )/* Or a local broadcast address, eg 192.168.1.255? */\r
-       {\r
-               /* This is a broadcast so uses the broadcast MAC address. */\r
-               memcpy( pxMACAddress->ucBytes, xBroadcastMACAddress.ucBytes, sizeof( MACAddress_t ) );\r
-               eReturn = eARPCacheHit;\r
-       }\r
-       else if( *ipLOCAL_IP_ADDRESS_POINTER == 0UL )\r
-       {\r
-               /* The IP address has not yet been assigned, so there is nothing that\r
-               can be done. */\r
-               eReturn = eCantSendPacket;\r
-       }\r
-       else\r
-       {\r
-               eReturn = eARPCacheMiss;\r
-\r
-               if( ( *pulIPAddress & xNetworkAddressing.ulNetMask ) != ( ( *ipLOCAL_IP_ADDRESS_POINTER ) & xNetworkAddressing.ulNetMask ) )\r
-               {\r
-#if( ipconfigARP_STORES_REMOTE_ADDRESSES == 1 )\r
-                       eReturn = prvCacheLookup( *pulIPAddress, pxMACAddress );\r
-\r
-                       if( eReturn == eARPCacheHit )\r
-                       {\r
-                               /* The stack is configured to store 'remote IP addresses', i.e. addresses\r
-                               belonging to a different the netmask.  prvCacheLookup() returned a hit, so\r
-                               the MAC address is known */\r
-                       }\r
-                       else\r
-#endif\r
-                       {\r
-                               /* The IP address is off the local network, so look up the\r
-                               hardware address of the router, if any. */\r
-                               if( xNetworkAddressing.ulGatewayAddress != ( uint32_t )0u )\r
-                               {\r
-                                       ulAddressToLookup = xNetworkAddressing.ulGatewayAddress;\r
-                               }\r
-                               else\r
-                               {\r
-                                       ulAddressToLookup = *pulIPAddress;\r
-                               }\r
-                       }\r
-               }\r
-               else\r
-               {\r
-                       /* The IP address is on the local network, so lookup the requested\r
-                       IP address directly. */\r
-                       ulAddressToLookup = *pulIPAddress;\r
-               }\r
-\r
-               if( eReturn == eARPCacheMiss )\r
-               {\r
-                       if( ulAddressToLookup == 0UL )\r
-                       {\r
-                               /* The address is not on the local network, and there is not a\r
-                               router. */\r
-                               eReturn = eCantSendPacket;\r
-                       }\r
-                       else\r
-                       {\r
-                               eReturn = prvCacheLookup( ulAddressToLookup, pxMACAddress );\r
-\r
-                               if( eReturn == eARPCacheMiss )\r
-                               {\r
-                                       /* It might be that the ARP has to go to the gateway. */\r
-                                       *pulIPAddress = ulAddressToLookup;\r
-                               }\r
-                       }\r
-               }\r
-       }\r
-\r
-       return eReturn;\r
-}\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-static eARPLookupResult_t prvCacheLookup( uint32_t ulAddressToLookup, MACAddress_t * const pxMACAddress )\r
-{\r
-BaseType_t x;\r
-eARPLookupResult_t eReturn = eARPCacheMiss;\r
-\r
-       /* Loop through each entry in the ARP cache. */\r
-       for( x = 0; x < ipconfigARP_CACHE_ENTRIES; x++ )\r
-       {\r
-               /* Does this row in the ARP cache table hold an entry for the IP address\r
-               being queried? */\r
-               if( xARPCache[ x ].ulIPAddress == ulAddressToLookup )\r
-               {\r
-                       /* A matching valid entry was found. */\r
-                       if( xARPCache[ x ].ucValid == ( uint8_t ) pdFALSE )\r
-                       {\r
-                               /* This entry is waiting an ARP reply, so is not valid. */\r
-                               eReturn = eCantSendPacket;\r
-                       }\r
-                       else\r
-                       {\r
-                               /* A valid entry was found. */\r
-                               memcpy( pxMACAddress->ucBytes, xARPCache[ x ].xMACAddress.ucBytes, sizeof( MACAddress_t ) );\r
-                               eReturn = eARPCacheHit;\r
-                       }\r
-                       break;\r
-               }\r
-       }\r
-\r
-       return eReturn;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-void vARPAgeCache( void )\r
-{\r
-BaseType_t x;\r
-TickType_t xTimeNow;\r
-\r
-       /* Loop through each entry in the ARP cache. */\r
-       for( x = 0; x < ipconfigARP_CACHE_ENTRIES; x++ )\r
-       {\r
-               /* If the entry is valid (its age is greater than zero). */\r
-               if( xARPCache[ x ].ucAge > 0U )\r
-               {\r
-                       /* Decrement the age value of the entry in this ARP cache table row.\r
-                       When the age reaches zero it is no longer considered valid. */\r
-                       ( xARPCache[ x ].ucAge )--;\r
-\r
-                       /* If the entry is not yet valid, then it is waiting an ARP\r
-                       reply, and the ARP request should be retransmitted. */\r
-                       if( xARPCache[ x ].ucValid == ( uint8_t ) pdFALSE )\r
-                       {\r
-                               FreeRTOS_OutputARPRequest( xARPCache[ x ].ulIPAddress );\r
-                       }\r
-                       else if( xARPCache[ x ].ucAge <= ( uint8_t ) arpMAX_ARP_AGE_BEFORE_NEW_ARP_REQUEST )\r
-                       {\r
-                               /* This entry will get removed soon.  See if the MAC address is\r
-                               still valid to prevent this happening. */\r
-                               iptraceARP_TABLE_ENTRY_WILL_EXPIRE( xARPCache[ x ].ulIPAddress );\r
-                               FreeRTOS_OutputARPRequest( xARPCache[ x ].ulIPAddress );\r
-                       }\r
-                       else\r
-                       {\r
-                               /* The age has just ticked down, with nothing to do. */\r
-                       }\r
-\r
-                       if( xARPCache[ x ].ucAge == 0u )\r
-                       {\r
-                               /* The entry is no longer valid.  Wipe it out. */\r
-                               iptraceARP_TABLE_ENTRY_EXPIRED( xARPCache[ x ].ulIPAddress );\r
-                               xARPCache[ x ].ulIPAddress = 0UL;\r
-                       }\r
-               }\r
-       }\r
-\r
-       xTimeNow = xTaskGetTickCount ();\r
-\r
-       if( ( xLastGratuitousARPTime == ( TickType_t ) 0 ) || ( ( xTimeNow - xLastGratuitousARPTime ) > ( TickType_t ) arpGRATUITOUS_ARP_PERIOD ) )\r
-       {\r
-               FreeRTOS_OutputARPRequest( *ipLOCAL_IP_ADDRESS_POINTER );\r
-               xLastGratuitousARPTime = xTimeNow;\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-void vARPSendGratuitous( void )\r
-{\r
-       /* Setting xLastGratuitousARPTime to 0 will force a gratuitous ARP the next\r
-       time vARPAgeCache() is called. */\r
-       xLastGratuitousARPTime = ( TickType_t ) 0;\r
-\r
-       /* Let the IP-task call vARPAgeCache(). */\r
-       xSendEventToIPTask( eARPTimerEvent );\r
-}\r
-\r
-/*-----------------------------------------------------------*/\r
-void FreeRTOS_OutputARPRequest( uint32_t ulIPAddress )\r
-{\r
-NetworkBufferDescriptor_t *pxNetworkBuffer;\r
-\r
-       /* This is called from the context of the IP event task, so a block time\r
-       must not be used. */\r
-       pxNetworkBuffer = pxGetNetworkBufferWithDescriptor( sizeof( ARPPacket_t ), ( TickType_t ) 0 );\r
-\r
-       if( pxNetworkBuffer != NULL )\r
-       {\r
-               pxNetworkBuffer->ulIPAddress = ulIPAddress;\r
-               vARPGenerateRequestPacket( pxNetworkBuffer );\r
-\r
-               #if defined( ipconfigETHERNET_MINIMUM_PACKET_BYTES )\r
-               {\r
-                       if( pxNetworkBuffer->xDataLength < ( size_t ) ipconfigETHERNET_MINIMUM_PACKET_BYTES )\r
-                       {\r
-                       BaseType_t xIndex;\r
-\r
-                               for( xIndex = ( BaseType_t ) pxNetworkBuffer->xDataLength; xIndex < ( BaseType_t ) ipconfigETHERNET_MINIMUM_PACKET_BYTES; xIndex++ )\r
-                               {\r
-                                       pxNetworkBuffer->pucEthernetBuffer[ xIndex ] = 0u;\r
-                               }\r
-                               pxNetworkBuffer->xDataLength = ( size_t ) ipconfigETHERNET_MINIMUM_PACKET_BYTES;\r
-                       }\r
-               }\r
-               #endif\r
-               if( xIsCallingFromIPTask() != 0 )\r
-               {\r
-                       /* Only the IP-task is allowed to call this function directly. */\r
-                       xNetworkInterfaceOutput( pxNetworkBuffer, pdTRUE );\r
-               }\r
-               else\r
-               {\r
-               IPStackEvent_t xSendEvent;\r
-\r
-                       /* Send a message to the IP-task to send this ARP packet. */\r
-                       xSendEvent.eEventType = eNetworkTxEvent;\r
-                       xSendEvent.pvData = ( void * ) pxNetworkBuffer;\r
-                       if( xSendEventStructToIPTask( &xSendEvent, ( TickType_t ) portMAX_DELAY ) == pdFAIL )\r
-                       {\r
-                               /* Failed to send the message, so release the network buffer. */\r
-                               vReleaseNetworkBufferAndDescriptor( pxNetworkBuffer );\r
-                       }\r
-               }\r
-       }\r
-}\r
-\r
-void vARPGenerateRequestPacket( NetworkBufferDescriptor_t * const pxNetworkBuffer )\r
-{\r
-ARPPacket_t *pxARPPacket;\r
-\r
-       /* Buffer allocation ensures that buffers always have space\r
-       for an ARP packet. See buffer allocation implementations 1\r
-       and 2 under portable/BufferManagement. */\r
-       configASSERT( pxNetworkBuffer );\r
-       configASSERT( pxNetworkBuffer->xDataLength >= sizeof(ARPPacket_t) );\r
-\r
-       pxARPPacket = ( ARPPacket_t * ) pxNetworkBuffer->pucEthernetBuffer;\r
-\r
-       /* memcpy the const part of the header information into the correct\r
-       location in the packet.  This copies:\r
-               xEthernetHeader.ulDestinationAddress\r
-               xEthernetHeader.usFrameType;\r
-               xARPHeader.usHardwareType;\r
-               xARPHeader.usProtocolType;\r
-               xARPHeader.ucHardwareAddressLength;\r
-               xARPHeader.ucProtocolAddressLength;\r
-               xARPHeader.usOperation;\r
-               xARPHeader.xTargetHardwareAddress;\r
-       */\r
-       memcpy( ( void * ) pxARPPacket, ( void * ) xDefaultPartARPPacketHeader, sizeof( xDefaultPartARPPacketHeader ) );\r
-       memcpy( ( void * ) pxARPPacket->xEthernetHeader.xSourceAddress.ucBytes , ( void * ) ipLOCAL_MAC_ADDRESS, ( size_t ) ipMAC_ADDRESS_LENGTH_BYTES );\r
-       memcpy( ( void * ) pxARPPacket->xARPHeader.xSenderHardwareAddress.ucBytes, ( void * ) ipLOCAL_MAC_ADDRESS, ( size_t ) ipMAC_ADDRESS_LENGTH_BYTES );\r
-\r
-       memcpy( ( void* )pxARPPacket->xARPHeader.ucSenderProtocolAddress, ( void* )ipLOCAL_IP_ADDRESS_POINTER, sizeof( pxARPPacket->xARPHeader.ucSenderProtocolAddress ) );\r
-       pxARPPacket->xARPHeader.ulTargetProtocolAddress = pxNetworkBuffer->ulIPAddress;\r
-\r
-       pxNetworkBuffer->xDataLength = sizeof( ARPPacket_t );\r
-\r
-       iptraceCREATING_ARP_REQUEST( pxNetworkBuffer->ulIPAddress );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-void FreeRTOS_ClearARP( void )\r
-{\r
-       memset( xARPCache, '\0', sizeof( xARPCache ) );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigHAS_PRINTF != 0 ) || ( ipconfigHAS_DEBUG_PRINTF != 0 )\r
-\r
-       void FreeRTOS_PrintARPCache( void )\r
-       {\r
-       BaseType_t x, xCount = 0;\r
-\r
-               /* Loop through each entry in the ARP cache. */\r
-               for( x = 0; x < ipconfigARP_CACHE_ENTRIES; x++ )\r
-               {\r
-                       if( ( xARPCache[ x ].ulIPAddress != 0ul ) && ( xARPCache[ x ].ucAge > 0U ) )\r
-                       {\r
-                               /* See if the MAC-address also matches, and we're all happy */\r
-                               FreeRTOS_printf( ( "Arp %2ld: %3u - %16lxip : %02x:%02x:%02x : %02x:%02x:%02x\n",\r
-                                       x,\r
-                                       xARPCache[ x ].ucAge,\r
-                                       xARPCache[ x ].ulIPAddress,\r
-                                       xARPCache[ x ].xMACAddress.ucBytes[0],\r
-                                       xARPCache[ x ].xMACAddress.ucBytes[1],\r
-                                       xARPCache[ x ].xMACAddress.ucBytes[2],\r
-                                       xARPCache[ x ].xMACAddress.ucBytes[3],\r
-                                       xARPCache[ x ].xMACAddress.ucBytes[4],\r
-                                       xARPCache[ x ].xMACAddress.ucBytes[5] ) );\r
-                               xCount++;\r
-                       }\r
-               }\r
-\r
-               FreeRTOS_printf( ( "Arp has %ld entries\n", xCount ) );\r
-       }\r
-\r
-#endif /* ( ipconfigHAS_PRINTF != 0 ) || ( ipconfigHAS_DEBUG_PRINTF != 0 ) */\r
+/*
+ * FreeRTOS+TCP V2.2.0
+ * 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
+ */
+
+/* Standard includes. */
+#include <stdint.h>
+#include <stdio.h>
+
+/* FreeRTOS includes. */
+#include "FreeRTOS.h"
+#include "task.h"
+#include "queue.h"
+#include "semphr.h"
+
+/* FreeRTOS+TCP includes. */
+#include "FreeRTOS_IP.h"
+#include "FreeRTOS_Sockets.h"
+#include "FreeRTOS_IP_Private.h"
+#include "FreeRTOS_ARP.h"
+#include "FreeRTOS_UDP_IP.h"
+#include "FreeRTOS_DHCP.h"
+#if( ipconfigUSE_LLMNR == 1 )
+       #include "FreeRTOS_DNS.h"
+#endif /* ipconfigUSE_LLMNR */
+#include "NetworkInterface.h"
+#include "NetworkBufferManagement.h"
+
+
+/* When the age of an entry in the ARP table reaches this value (it counts down
+to zero, so this is an old entry) an ARP request will be sent to see if the
+entry is still valid and can therefore be refreshed. */
+#define arpMAX_ARP_AGE_BEFORE_NEW_ARP_REQUEST          ( 3 )
+
+/* The time between gratuitous ARPs. */
+#ifndef arpGRATUITOUS_ARP_PERIOD
+       #define arpGRATUITOUS_ARP_PERIOD                                        ( pdMS_TO_TICKS( 20000 ) )
+#endif
+
+/*-----------------------------------------------------------*/
+
+/*
+ * Lookup an MAC address in the ARP cache from the IP address.
+ */
+static eARPLookupResult_t prvCacheLookup( uint32_t ulAddressToLookup, MACAddress_t * const pxMACAddress );
+
+/*-----------------------------------------------------------*/
+
+/* The ARP cache. */
+static ARPCacheRow_t xARPCache[ ipconfigARP_CACHE_ENTRIES ];
+
+/* The time at which the last gratuitous ARP was sent.  Gratuitous ARPs are used
+to ensure ARP tables are up to date and to detect IP address conflicts. */
+static TickType_t xLastGratuitousARPTime = ( TickType_t ) 0;
+
+/*
+ * IP-clash detection is currently only used internally. When DHCP doesn't respond, the
+ * driver can try out a random LinkLayer IP address (169.254.x.x).  It will send out a
+ * gratuitos ARP message and, after a period of time, check the variables here below:
+ */
+#if( ipconfigARP_USE_CLASH_DETECTION != 0 )
+       /* Becomes non-zero if another device responded to a gratuitos ARP message. */
+       BaseType_t xARPHadIPClash;
+       /* MAC-address of the other device containing the same IP-address. */
+       MACAddress_t xARPClashMacAddress;
+#endif /* ipconfigARP_USE_CLASH_DETECTION */
+
+/* Part of the Ethernet and ARP headers are always constant when sending an IPv4
+ARP packet.  This array defines the constant parts, allowing this part of the
+packet to be filled in using a simple memcpy() instead of individual writes. */
+static const uint8_t xDefaultPartARPPacketHeader[] =
+{
+       0xff, 0xff, 0xff, 0xff, 0xff, 0xff,     /* Ethernet destination address. */
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00,     /* Ethernet source address. */
+       0x08, 0x06,                                                     /* Ethernet frame type (ipARP_FRAME_TYPE). */
+       0x00, 0x01,                                                     /* usHardwareType (ipARP_HARDWARE_TYPE_ETHERNET). */
+       0x08, 0x00,                                                             /* usProtocolType. */
+       ipMAC_ADDRESS_LENGTH_BYTES,                     /* ucHardwareAddressLength. */
+       ipIP_ADDRESS_LENGTH_BYTES,                              /* ucProtocolAddressLength. */
+       0x00, 0x01,                                                     /* usOperation (ipARP_REQUEST). */
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00,     /* xSenderHardwareAddress. */
+       0x00, 0x00, 0x00, 0x00,                                 /* ulSenderProtocolAddress. */
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00              /* xTargetHardwareAddress. */
+};
+
+/*-----------------------------------------------------------*/
+
+eFrameProcessingResult_t eARPProcessPacket( ARPPacket_t * const pxARPFrame )
+{
+eFrameProcessingResult_t eReturn = eReleaseBuffer;
+ARPHeader_t *pxARPHeader;
+uint32_t ulTargetProtocolAddress, ulSenderProtocolAddress;
+
+       pxARPHeader = &( pxARPFrame->xARPHeader );
+
+       /* The field ulSenderProtocolAddress is badly aligned, copy byte-by-byte. */
+       memcpy( ( void *)&( ulSenderProtocolAddress ), ( void * )pxARPHeader->ucSenderProtocolAddress, sizeof( ulSenderProtocolAddress ) );
+       /* The field ulTargetProtocolAddress is well-aligned, a 32-bits copy. */
+       ulTargetProtocolAddress = pxARPHeader->ulTargetProtocolAddress;
+
+       traceARP_PACKET_RECEIVED();
+
+       /* Don't do anything if the local IP address is zero because
+       that means a DHCP request has not completed. */
+       if( *ipLOCAL_IP_ADDRESS_POINTER != 0UL )
+       {
+               switch( pxARPHeader->usOperation )
+               {
+                       case ipARP_REQUEST      :
+                               /* The packet contained an ARP request.  Was it for the IP
+                               address of the node running this code? */
+                               if( ulTargetProtocolAddress == *ipLOCAL_IP_ADDRESS_POINTER )
+                               {
+                                       iptraceSENDING_ARP_REPLY( ulSenderProtocolAddress );
+
+                                       /* The request is for the address of this node.  Add the
+                                       entry into the ARP cache, or refresh the entry if it
+                                       already exists. */
+                                       vARPRefreshCacheEntry( &( pxARPHeader->xSenderHardwareAddress ), ulSenderProtocolAddress );
+
+                                       /* Generate a reply payload in the same buffer. */
+                                       pxARPHeader->usOperation = ( uint16_t ) ipARP_REPLY;
+                                       if( ulTargetProtocolAddress == ulSenderProtocolAddress )
+                                       {
+                                               /* A double IP address is detected! */
+                                               /* Give the sources MAC address the value of the broadcast address, will be swapped later */
+                                               memcpy( pxARPFrame->xEthernetHeader.xSourceAddress.ucBytes, xBroadcastMACAddress.ucBytes, sizeof( xBroadcastMACAddress ) );
+                                               memset( pxARPHeader->xTargetHardwareAddress.ucBytes, '\0', sizeof( MACAddress_t ) );
+                                               pxARPHeader->ulTargetProtocolAddress = 0UL;
+                                       }
+                                       else
+                                       {
+                                               memcpy( pxARPHeader->xTargetHardwareAddress.ucBytes, pxARPHeader->xSenderHardwareAddress.ucBytes, sizeof( MACAddress_t ) );
+                                               pxARPHeader->ulTargetProtocolAddress = ulSenderProtocolAddress;
+                                       }
+                                       memcpy( pxARPHeader->xSenderHardwareAddress.ucBytes, ( void * ) ipLOCAL_MAC_ADDRESS, sizeof( MACAddress_t ) );
+                                       memcpy( ( void* )pxARPHeader->ucSenderProtocolAddress, ( void* )ipLOCAL_IP_ADDRESS_POINTER, sizeof( pxARPHeader->ucSenderProtocolAddress ) );
+
+                                       eReturn = eReturnEthernetFrame;
+                               }
+                               break;
+
+                       case ipARP_REPLY :
+                               iptracePROCESSING_RECEIVED_ARP_REPLY( ulTargetProtocolAddress );
+                               vARPRefreshCacheEntry( &( pxARPHeader->xSenderHardwareAddress ), ulSenderProtocolAddress );
+                               /* Process received ARP frame to see if there is a clash. */
+                               #if( ipconfigARP_USE_CLASH_DETECTION != 0 )
+                               {
+                                       if( ulSenderProtocolAddress == *ipLOCAL_IP_ADDRESS_POINTER )
+                                       {
+                                               xARPHadIPClash = pdTRUE;
+                                               memcpy( xARPClashMacAddress.ucBytes, pxARPHeader->xSenderHardwareAddress.ucBytes, sizeof( xARPClashMacAddress.ucBytes ) );
+                                       }
+                               }
+                               #endif /* ipconfigARP_USE_CLASH_DETECTION */
+                               break;
+
+                       default :
+                               /* Invalid. */
+                               break;
+               }
+       }
+
+       return eReturn;
+}
+/*-----------------------------------------------------------*/
+
+#if( ipconfigUSE_ARP_REMOVE_ENTRY != 0 )
+
+       uint32_t ulARPRemoveCacheEntryByMac( const MACAddress_t * pxMACAddress )
+       {
+       BaseType_t x;
+       uint32_t lResult = 0;
+
+               /* For each entry in the ARP cache table. */
+               for( x = 0; x < ipconfigARP_CACHE_ENTRIES; x++ )
+               {
+                       if( ( memcmp( xARPCache[ x ].xMACAddress.ucBytes, pxMACAddress->ucBytes, sizeof( pxMACAddress->ucBytes ) ) == 0 ) )
+                       {
+                               lResult = xARPCache[ x ].ulIPAddress;
+                               memset( &xARPCache[ x ], '\0', sizeof( xARPCache[ x ] ) );
+                               break;
+                       }
+               }
+
+               return lResult;
+       }
+
+#endif /* ipconfigUSE_ARP_REMOVE_ENTRY != 0 */
+/*-----------------------------------------------------------*/
+
+void vARPRefreshCacheEntry( const MACAddress_t * pxMACAddress, const uint32_t ulIPAddress )
+{
+BaseType_t x = 0;
+BaseType_t xIpEntry = -1;
+BaseType_t xMacEntry = -1;
+BaseType_t xUseEntry = 0;
+uint8_t ucMinAgeFound = 0U;
+
+       #if( ipconfigARP_STORES_REMOTE_ADDRESSES == 0 )
+               /* Only process the IP address if it is on the local network.
+               Unless: when '*ipLOCAL_IP_ADDRESS_POINTER' equals zero, the IP-address
+               and netmask are still unknown. */
+               if( ( ( ulIPAddress & xNetworkAddressing.ulNetMask ) == ( ( *ipLOCAL_IP_ADDRESS_POINTER ) & xNetworkAddressing.ulNetMask ) ) ||
+                       ( *ipLOCAL_IP_ADDRESS_POINTER == 0ul ) )
+       #else
+               /* If ipconfigARP_STORES_REMOTE_ADDRESSES is non-zero, IP addresses with
+               a different netmask will also be stored.  After when replying to a UDP
+               message from a different netmask, the IP address can be looped up and a
+               reply sent.  This option is useful for systems with multiple gateways,
+               the reply will surely arrive.  If ipconfigARP_STORES_REMOTE_ADDRESSES is
+               zero the the gateway address is the only option. */
+               if( pdTRUE )
+       #endif
+       {
+               /* Start with the maximum possible number. */
+               ucMinAgeFound--;
+
+               /* For each entry in the ARP cache table. */
+               for( x = 0; x < ipconfigARP_CACHE_ENTRIES; x++ )
+               {
+                       /* Does this line in the cache table hold an entry for the IP
+                       address being queried? */
+                       if( xARPCache[ x ].ulIPAddress == ulIPAddress )
+                       {
+                               if( pxMACAddress == NULL )
+                               {
+                                       /* In case the parameter pxMACAddress is NULL, an entry will be reserved to
+                                       indicate that there is an outstanding ARP request, This entry will have
+                                       "ucValid == pdFALSE". */
+                                       xIpEntry = x;
+                                       break;
+                               }
+
+                               /* See if the MAC-address also matches. */
+                               if( memcmp( xARPCache[ x ].xMACAddress.ucBytes, pxMACAddress->ucBytes, sizeof( pxMACAddress->ucBytes ) ) == 0 )
+                               {
+                                       /* This function will be called for each received packet
+                                       As this is by far the most common path the coding standard
+                                       is relaxed in this case and a return is permitted as an
+                                       optimisation. */
+                                       xARPCache[ x ].ucAge = ( uint8_t ) ipconfigMAX_ARP_AGE;
+                                       xARPCache[ x ].ucValid = ( uint8_t ) pdTRUE;
+                                       return;
+                               }
+
+                               /* Found an entry containing ulIPAddress, but the MAC address
+                               doesn't match.  Might be an entry with ucValid=pdFALSE, waiting
+                               for an ARP reply.  Still want to see if there is match with the
+                               given MAC address.ucBytes.  If found, either of the two entries
+                               must be cleared. */
+                               xIpEntry = x;
+                       }
+                       else if( ( pxMACAddress != NULL ) && ( memcmp( xARPCache[ x ].xMACAddress.ucBytes, pxMACAddress->ucBytes, sizeof( pxMACAddress->ucBytes ) ) == 0 ) )
+                       {
+                               /* Found an entry with the given MAC-address, but the IP-address
+                               is different.  Continue looping to find a possible match with
+                               ulIPAddress. */
+       #if( ipconfigARP_STORES_REMOTE_ADDRESSES != 0 )
+                               /* If ARP stores the MAC address of IP addresses outside the
+                               network, than the MAC address of the gateway should not be
+                               overwritten. */
+                               BaseType_t bIsLocal[ 2 ];
+                               bIsLocal[ 0 ] = ( ( xARPCache[ x ].ulIPAddress & xNetworkAddressing.ulNetMask ) == ( ( *ipLOCAL_IP_ADDRESS_POINTER ) & xNetworkAddressing.ulNetMask ) );
+                               bIsLocal[ 1 ] = ( ( ulIPAddress & xNetworkAddressing.ulNetMask ) == ( ( *ipLOCAL_IP_ADDRESS_POINTER ) & xNetworkAddressing.ulNetMask ) );
+                               if( bIsLocal[ 0 ] == bIsLocal[ 1 ] )
+                               {
+                                       xMacEntry = x;
+                               }
+       #else
+                               xMacEntry = x;
+       #endif
+                       }
+                       /* _HT_
+                       Shouldn't we test for xARPCache[ x ].ucValid == pdFALSE here ? */
+                       else if( xARPCache[ x ].ucAge < ucMinAgeFound )
+                       {
+                               /* As the table is traversed, remember the table row that
+                               contains the oldest entry (the lowest age count, as ages are
+                               decremented to zero) so the row can be re-used if this function
+                               needs to add an entry that does not already exist. */
+                               ucMinAgeFound = xARPCache[ x ].ucAge;
+                               xUseEntry = x;
+                       }
+               }
+
+               if( xMacEntry >= 0 )
+               {
+                       xUseEntry = xMacEntry;
+
+                       if( xIpEntry >= 0 )
+                       {
+                               /* Both the MAC address as well as the IP address were found in
+                               different locations: clear the entry which matches the
+                               IP-address */
+                               memset( &xARPCache[ xIpEntry ], '\0', sizeof( xARPCache[ xIpEntry ] ) );
+                       }
+               }
+               else if( xIpEntry >= 0 )
+               {
+                       /* An entry containing the IP-address was found, but it had a different MAC address */
+                       xUseEntry = xIpEntry;
+               }
+
+               /* If the entry was not found, we use the oldest entry and set the IPaddress */
+               xARPCache[ xUseEntry ].ulIPAddress = ulIPAddress;
+
+               if( pxMACAddress != NULL )
+               {
+                       memcpy( xARPCache[ xUseEntry ].xMACAddress.ucBytes, pxMACAddress->ucBytes, sizeof( pxMACAddress->ucBytes ) );
+
+                       iptraceARP_TABLE_ENTRY_CREATED( ulIPAddress, (*pxMACAddress) );
+                       /* And this entry does not need immediate attention */
+                       xARPCache[ xUseEntry ].ucAge = ( uint8_t ) ipconfigMAX_ARP_AGE;
+                       xARPCache[ xUseEntry ].ucValid = ( uint8_t ) pdTRUE;
+               }
+               else if( xIpEntry < 0 )
+               {
+                       xARPCache[ xUseEntry ].ucAge = ( uint8_t ) ipconfigMAX_ARP_RETRANSMISSIONS;
+                       xARPCache[ xUseEntry ].ucValid = ( uint8_t ) pdFALSE;
+               }
+       }
+}
+/*-----------------------------------------------------------*/
+
+#if( ipconfigUSE_ARP_REVERSED_LOOKUP == 1 )
+       eARPLookupResult_t eARPGetCacheEntryByMac( MACAddress_t * const pxMACAddress, uint32_t *pulIPAddress )
+       {
+       BaseType_t x;
+       eARPLookupResult_t eReturn = eARPCacheMiss;
+
+               /* Loop through each entry in the ARP cache. */
+               for( x = 0; x < ipconfigARP_CACHE_ENTRIES; x++ )
+               {
+                       /* Does this row in the ARP cache table hold an entry for the MAC
+                       address being searched? */
+                       if( memcmp( pxMACAddress->ucBytes, xARPCache[ x ].xMACAddress.ucBytes, sizeof( MACAddress_t ) ) == 0 )
+                       {
+                               *pulIPAddress = xARPCache[ x ].ulIPAddress;
+                               eReturn = eARPCacheHit;
+                               break;
+                       }
+               }
+
+               return eReturn;
+       }
+#endif /* ipconfigUSE_ARP_REVERSED_LOOKUP */
+
+/*-----------------------------------------------------------*/
+
+eARPLookupResult_t eARPGetCacheEntry( uint32_t *pulIPAddress, MACAddress_t * const pxMACAddress )
+{
+eARPLookupResult_t eReturn;
+uint32_t ulAddressToLookup;
+
+#if( ipconfigUSE_LLMNR == 1 )
+       if( *pulIPAddress == ipLLMNR_IP_ADDR )  /* Is in network byte order. */
+       {
+               /* The LLMNR IP-address has a fixed virtual MAC address. */
+               memcpy( pxMACAddress->ucBytes, xLLMNR_MacAdress.ucBytes, sizeof( MACAddress_t ) );
+               eReturn = eARPCacheHit;
+       }
+       else
+#endif
+       if( ( *pulIPAddress == ipBROADCAST_IP_ADDRESS ) ||      /* Is it the general broadcast address 255.255.255.255? */
+               ( *pulIPAddress == xNetworkAddressing.ulBroadcastAddress ) )/* Or a local broadcast address, eg 192.168.1.255? */
+       {
+               /* This is a broadcast so uses the broadcast MAC address. */
+               memcpy( pxMACAddress->ucBytes, xBroadcastMACAddress.ucBytes, sizeof( MACAddress_t ) );
+               eReturn = eARPCacheHit;
+       }
+       else if( *ipLOCAL_IP_ADDRESS_POINTER == 0UL )
+       {
+               /* The IP address has not yet been assigned, so there is nothing that
+               can be done. */
+               eReturn = eCantSendPacket;
+       }
+       else
+       {
+               eReturn = eARPCacheMiss;
+
+               if( ( *pulIPAddress & xNetworkAddressing.ulNetMask ) != ( ( *ipLOCAL_IP_ADDRESS_POINTER ) & xNetworkAddressing.ulNetMask ) )
+               {
+#if( ipconfigARP_STORES_REMOTE_ADDRESSES == 1 )
+                       eReturn = prvCacheLookup( *pulIPAddress, pxMACAddress );
+
+                       if( eReturn == eARPCacheHit )
+                       {
+                               /* The stack is configured to store 'remote IP addresses', i.e. addresses
+                               belonging to a different the netmask.  prvCacheLookup() returned a hit, so
+                               the MAC address is known */
+                       }
+                       else
+#endif
+                       {
+                               /* The IP address is off the local network, so look up the
+                               hardware address of the router, if any. */
+                               if( xNetworkAddressing.ulGatewayAddress != ( uint32_t )0u )
+                               {
+                                       ulAddressToLookup = xNetworkAddressing.ulGatewayAddress;
+                               }
+                               else
+                               {
+                                       ulAddressToLookup = *pulIPAddress;
+                               }
+                       }
+               }
+               else
+               {
+                       /* The IP address is on the local network, so lookup the requested
+                       IP address directly. */
+                       ulAddressToLookup = *pulIPAddress;
+               }
+
+               if( eReturn == eARPCacheMiss )
+               {
+                       if( ulAddressToLookup == 0UL )
+                       {
+                               /* The address is not on the local network, and there is not a
+                               router. */
+                               eReturn = eCantSendPacket;
+                       }
+                       else
+                       {
+                               eReturn = prvCacheLookup( ulAddressToLookup, pxMACAddress );
+
+                               if( eReturn == eARPCacheMiss )
+                               {
+                                       /* It might be that the ARP has to go to the gateway. */
+                                       *pulIPAddress = ulAddressToLookup;
+                               }
+                       }
+               }
+       }
+
+       return eReturn;
+}
+
+/*-----------------------------------------------------------*/
+
+static eARPLookupResult_t prvCacheLookup( uint32_t ulAddressToLookup, MACAddress_t * const pxMACAddress )
+{
+BaseType_t x;
+eARPLookupResult_t eReturn = eARPCacheMiss;
+
+       /* Loop through each entry in the ARP cache. */
+       for( x = 0; x < ipconfigARP_CACHE_ENTRIES; x++ )
+       {
+               /* Does this row in the ARP cache table hold an entry for the IP address
+               being queried? */
+               if( xARPCache[ x ].ulIPAddress == ulAddressToLookup )
+               {
+                       /* A matching valid entry was found. */
+                       if( xARPCache[ x ].ucValid == ( uint8_t ) pdFALSE )
+                       {
+                               /* This entry is waiting an ARP reply, so is not valid. */
+                               eReturn = eCantSendPacket;
+                       }
+                       else
+                       {
+                               /* A valid entry was found. */
+                               memcpy( pxMACAddress->ucBytes, xARPCache[ x ].xMACAddress.ucBytes, sizeof( MACAddress_t ) );
+                               eReturn = eARPCacheHit;
+                       }
+                       break;
+               }
+       }
+
+       return eReturn;
+}
+/*-----------------------------------------------------------*/
+
+void vARPAgeCache( void )
+{
+BaseType_t x;
+TickType_t xTimeNow;
+
+       /* Loop through each entry in the ARP cache. */
+       for( x = 0; x < ipconfigARP_CACHE_ENTRIES; x++ )
+       {
+               /* If the entry is valid (its age is greater than zero). */
+               if( xARPCache[ x ].ucAge > 0U )
+               {
+                       /* Decrement the age value of the entry in this ARP cache table row.
+                       When the age reaches zero it is no longer considered valid. */
+                       ( xARPCache[ x ].ucAge )--;
+
+                       /* If the entry is not yet valid, then it is waiting an ARP
+                       reply, and the ARP request should be retransmitted. */
+                       if( xARPCache[ x ].ucValid == ( uint8_t ) pdFALSE )
+                       {
+                               FreeRTOS_OutputARPRequest( xARPCache[ x ].ulIPAddress );
+                       }
+                       else if( xARPCache[ x ].ucAge <= ( uint8_t ) arpMAX_ARP_AGE_BEFORE_NEW_ARP_REQUEST )
+                       {
+                               /* This entry will get removed soon.  See if the MAC address is
+                               still valid to prevent this happening. */
+                               iptraceARP_TABLE_ENTRY_WILL_EXPIRE( xARPCache[ x ].ulIPAddress );
+                               FreeRTOS_OutputARPRequest( xARPCache[ x ].ulIPAddress );
+                       }
+                       else
+                       {
+                               /* The age has just ticked down, with nothing to do. */
+                       }
+
+                       if( xARPCache[ x ].ucAge == 0u )
+                       {
+                               /* The entry is no longer valid.  Wipe it out. */
+                               iptraceARP_TABLE_ENTRY_EXPIRED( xARPCache[ x ].ulIPAddress );
+                               xARPCache[ x ].ulIPAddress = 0UL;
+                       }
+               }
+       }
+
+       xTimeNow = xTaskGetTickCount ();
+
+       if( ( xLastGratuitousARPTime == ( TickType_t ) 0 ) || ( ( xTimeNow - xLastGratuitousARPTime ) > ( TickType_t ) arpGRATUITOUS_ARP_PERIOD ) )
+       {
+               FreeRTOS_OutputARPRequest( *ipLOCAL_IP_ADDRESS_POINTER );
+               xLastGratuitousARPTime = xTimeNow;
+       }
+}
+/*-----------------------------------------------------------*/
+
+void vARPSendGratuitous( void )
+{
+       /* Setting xLastGratuitousARPTime to 0 will force a gratuitous ARP the next
+       time vARPAgeCache() is called. */
+       xLastGratuitousARPTime = ( TickType_t ) 0;
+
+       /* Let the IP-task call vARPAgeCache(). */
+       xSendEventToIPTask( eARPTimerEvent );
+}
+
+/*-----------------------------------------------------------*/
+void FreeRTOS_OutputARPRequest( uint32_t ulIPAddress )
+{
+NetworkBufferDescriptor_t *pxNetworkBuffer;
+
+       /* This is called from the context of the IP event task, so a block time
+       must not be used. */
+       pxNetworkBuffer = pxGetNetworkBufferWithDescriptor( sizeof( ARPPacket_t ), ( TickType_t ) 0 );
+
+       if( pxNetworkBuffer != NULL )
+       {
+               pxNetworkBuffer->ulIPAddress = ulIPAddress;
+               vARPGenerateRequestPacket( pxNetworkBuffer );
+
+               #if defined( ipconfigETHERNET_MINIMUM_PACKET_BYTES )
+               {
+                       if( pxNetworkBuffer->xDataLength < ( size_t ) ipconfigETHERNET_MINIMUM_PACKET_BYTES )
+                       {
+                       BaseType_t xIndex;
+
+                               for( xIndex = ( BaseType_t ) pxNetworkBuffer->xDataLength; xIndex < ( BaseType_t ) ipconfigETHERNET_MINIMUM_PACKET_BYTES; xIndex++ )
+                               {
+                                       pxNetworkBuffer->pucEthernetBuffer[ xIndex ] = 0u;
+                               }
+                               pxNetworkBuffer->xDataLength = ( size_t ) ipconfigETHERNET_MINIMUM_PACKET_BYTES;
+                       }
+               }
+               #endif
+               if( xIsCallingFromIPTask() != 0 )
+               {
+                       /* Only the IP-task is allowed to call this function directly. */
+                       xNetworkInterfaceOutput( pxNetworkBuffer, pdTRUE );
+               }
+               else
+               {
+               IPStackEvent_t xSendEvent;
+
+                       /* Send a message to the IP-task to send this ARP packet. */
+                       xSendEvent.eEventType = eNetworkTxEvent;
+                       xSendEvent.pvData = ( void * ) pxNetworkBuffer;
+                       if( xSendEventStructToIPTask( &xSendEvent, ( TickType_t ) portMAX_DELAY ) == pdFAIL )
+                       {
+                               /* Failed to send the message, so release the network buffer. */
+                               vReleaseNetworkBufferAndDescriptor( pxNetworkBuffer );
+                       }
+               }
+       }
+}
+
+void vARPGenerateRequestPacket( NetworkBufferDescriptor_t * const pxNetworkBuffer )
+{
+ARPPacket_t *pxARPPacket;
+
+       /* Buffer allocation ensures that buffers always have space
+       for an ARP packet. See buffer allocation implementations 1
+       and 2 under portable/BufferManagement. */
+       configASSERT( pxNetworkBuffer );
+       configASSERT( pxNetworkBuffer->xDataLength >= sizeof(ARPPacket_t) );
+
+       pxARPPacket = ( ARPPacket_t * ) pxNetworkBuffer->pucEthernetBuffer;
+
+       /* memcpy the const part of the header information into the correct
+       location in the packet.  This copies:
+               xEthernetHeader.ulDestinationAddress
+               xEthernetHeader.usFrameType;
+               xARPHeader.usHardwareType;
+               xARPHeader.usProtocolType;
+               xARPHeader.ucHardwareAddressLength;
+               xARPHeader.ucProtocolAddressLength;
+               xARPHeader.usOperation;
+               xARPHeader.xTargetHardwareAddress;
+       */
+       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->xARPHeader.xSenderHardwareAddress.ucBytes, ( void * ) ipLOCAL_MAC_ADDRESS, ( size_t ) ipMAC_ADDRESS_LENGTH_BYTES );
+
+       memcpy( ( void* )pxARPPacket->xARPHeader.ucSenderProtocolAddress, ( void* )ipLOCAL_IP_ADDRESS_POINTER, sizeof( pxARPPacket->xARPHeader.ucSenderProtocolAddress ) );
+       pxARPPacket->xARPHeader.ulTargetProtocolAddress = pxNetworkBuffer->ulIPAddress;
+
+       pxNetworkBuffer->xDataLength = sizeof( ARPPacket_t );
+
+       iptraceCREATING_ARP_REQUEST( pxNetworkBuffer->ulIPAddress );
+}
+/*-----------------------------------------------------------*/
+
+void FreeRTOS_ClearARP( void )
+{
+       memset( xARPCache, '\0', sizeof( xARPCache ) );
+}
+/*-----------------------------------------------------------*/
+
+#if( ipconfigHAS_PRINTF != 0 ) || ( ipconfigHAS_DEBUG_PRINTF != 0 )
+
+       void FreeRTOS_PrintARPCache( void )
+       {
+       BaseType_t x, xCount = 0;
+
+               /* Loop through each entry in the ARP cache. */
+               for( x = 0; x < ipconfigARP_CACHE_ENTRIES; x++ )
+               {
+                       if( ( xARPCache[ x ].ulIPAddress != 0ul ) && ( xARPCache[ x ].ucAge > 0U ) )
+                       {
+                               /* See if the MAC-address also matches, and we're all happy */
+                               FreeRTOS_printf( ( "Arp %2ld: %3u - %16lxip : %02x:%02x:%02x : %02x:%02x:%02x\n",
+                                       x,
+                                       xARPCache[ x ].ucAge,
+                                       xARPCache[ x ].ulIPAddress,
+                                       xARPCache[ x ].xMACAddress.ucBytes[0],
+                                       xARPCache[ x ].xMACAddress.ucBytes[1],
+                                       xARPCache[ x ].xMACAddress.ucBytes[2],
+                                       xARPCache[ x ].xMACAddress.ucBytes[3],
+                                       xARPCache[ x ].xMACAddress.ucBytes[4],
+                                       xARPCache[ x ].xMACAddress.ucBytes[5] ) );
+                               xCount++;
+                       }
+               }
+
+               FreeRTOS_printf( ( "Arp has %ld entries\n", xCount ) );
+       }
+
+#endif /* ( ipconfigHAS_PRINTF != 0 ) || ( ipconfigHAS_DEBUG_PRINTF != 0 ) */
index 8871d6563990607693bcf2f52932f197ff4f7cdb..930768055483ea21405ab38afbca01fc6aab9168 100644 (file)
-/*\r
- * FreeRTOS+TCP V2.2.0\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://aws.amazon.com/freertos\r
- * http://www.FreeRTOS.org\r
- */\r
-\r
-/* Standard includes. */\r
-#include <stdint.h>\r
-\r
-/* FreeRTOS includes. */\r
-#include "FreeRTOS.h"\r
-#include "task.h"\r
-#include "semphr.h"\r
-\r
-/* FreeRTOS+TCP includes. */\r
-#include "FreeRTOS_IP.h"\r
-#include "FreeRTOS_Sockets.h"\r
-#include "FreeRTOS_IP_Private.h"\r
-#include "FreeRTOS_UDP_IP.h"\r
-#include "FreeRTOS_TCP_IP.h"\r
-#include "FreeRTOS_DHCP.h"\r
-#include "FreeRTOS_ARP.h"\r
-#include "NetworkInterface.h"\r
-#include "NetworkBufferManagement.h"\r
-\r
-/* Exclude the entire file if DHCP is not enabled. */\r
-#if( ipconfigUSE_DHCP != 0 )\r
-\r
-#if ( ipconfigUSE_DHCP != 0 ) && ( ipconfigNETWORK_MTU < 586u )\r
-       /* DHCP must be able to receive an options field of 312 bytes, the fixed\r
-       part of the DHCP packet is 240 bytes, and the IP/UDP headers take 28 bytes. */\r
-       #error ipconfigNETWORK_MTU needs to be at least 586 to use DHCP\r
-#endif\r
-\r
-/* Parameter widths in the DHCP packet. */\r
-#define dhcpCLIENT_HARDWARE_ADDRESS_LENGTH             16\r
-#define dhcpSERVER_HOST_NAME_LENGTH                            64\r
-#define dhcpBOOT_FILE_NAME_LENGTH                              128\r
-\r
-/* Timer parameters */\r
-#ifndef dhcpINITIAL_DHCP_TX_PERIOD\r
-       #define dhcpINITIAL_TIMER_PERIOD                        ( pdMS_TO_TICKS( 250 ) )\r
-       #define dhcpINITIAL_DHCP_TX_PERIOD                      ( pdMS_TO_TICKS( 5000 ) )\r
-#endif\r
-\r
-/* Codes of interest found in the DHCP options field. */\r
-#define dhcpZERO_PAD_OPTION_CODE                               ( 0u )\r
-#define dhcpSUBNET_MASK_OPTION_CODE                            ( 1u )\r
-#define dhcpGATEWAY_OPTION_CODE                                        ( 3u )\r
-#define dhcpDNS_SERVER_OPTIONS_CODE                            ( 6u )\r
-#define dhcpDNS_HOSTNAME_OPTIONS_CODE                  ( 12u )\r
-#define dhcpREQUEST_IP_ADDRESS_OPTION_CODE             ( 50u )\r
-#define dhcpLEASE_TIME_OPTION_CODE                             ( 51u )\r
-#define dhcpMESSAGE_TYPE_OPTION_CODE                   ( 53u )\r
-#define dhcpSERVER_IP_ADDRESS_OPTION_CODE              ( 54u )\r
-#define dhcpPARAMETER_REQUEST_OPTION_CODE              ( 55u )\r
-#define dhcpCLIENT_IDENTIFIER_OPTION_CODE              ( 61u )\r
-\r
-/* The four DHCP message types of interest. */\r
-#define dhcpMESSAGE_TYPE_DISCOVER                              ( 1 )\r
-#define dhcpMESSAGE_TYPE_OFFER                                 ( 2 )\r
-#define dhcpMESSAGE_TYPE_REQUEST                               ( 3 )\r
-#define dhcpMESSAGE_TYPE_ACK                                   ( 5 )\r
-#define dhcpMESSAGE_TYPE_NACK                                  ( 6 )\r
-\r
-/* Offsets into the transmitted DHCP options fields at which various parameters\r
-are located. */\r
-#define dhcpCLIENT_IDENTIFIER_OFFSET                   ( 5 )\r
-#define dhcpREQUESTED_IP_ADDRESS_OFFSET                        ( 13 )\r
-#define dhcpDHCP_SERVER_IP_ADDRESS_OFFSET              ( 19 )\r
-\r
-/* Values used in the DHCP packets. */\r
-#define dhcpREQUEST_OPCODE                                             ( 1 )\r
-#define dhcpREPLY_OPCODE                                               ( 2 )\r
-#define dhcpADDRESS_TYPE_ETHERNET                              ( 1 )\r
-#define dhcpETHERNET_ADDRESS_LENGTH                            ( 6 )\r
-\r
-/* If a lease time is not received, use the default of two days. */\r
-/* 48 hours in ticks.  Can not use pdMS_TO_TICKS() as integer overflow can occur. */\r
-#define dhcpDEFAULT_LEASE_TIME                                 ( ( 48UL * 60UL * 60UL ) * configTICK_RATE_HZ )\r
-\r
-/* Don't allow the lease time to be too short. */\r
-#define dhcpMINIMUM_LEASE_TIME                                 ( pdMS_TO_TICKS( 60000UL ) )    /* 60 seconds in ticks. */\r
-\r
-/* Marks the end of the variable length options field in the DHCP packet. */\r
-#define dhcpOPTION_END_BYTE 0xffu\r
-\r
-/* Offset into a DHCP message at which the first byte of the options is\r
-located. */\r
-#define dhcpFIRST_OPTION_BYTE_OFFSET                   ( 0xf0 )\r
-\r
-/* Standard DHCP port numbers and magic cookie value. */\r
-#if( ipconfigBYTE_ORDER == pdFREERTOS_LITTLE_ENDIAN )\r
-       #define dhcpCLIENT_PORT 0x4400u\r
-       #define dhcpSERVER_PORT 0x4300u\r
-       #define dhcpCOOKIE              0x63538263ul\r
-       #define dhcpBROADCAST   0x0080u\r
-#else\r
-       #define dhcpCLIENT_PORT 0x0044u\r
-       #define dhcpSERVER_PORT 0x0043u\r
-       #define dhcpCOOKIE              0x63825363ul\r
-       #define dhcpBROADCAST   0x8000u\r
-#endif /* ipconfigBYTE_ORDER */\r
-\r
-#include "pack_struct_start.h"\r
-struct xDHCPMessage\r
-{\r
-       uint8_t ucOpcode;\r
-       uint8_t ucAddressType;\r
-       uint8_t ucAddressLength;\r
-       uint8_t ucHops;\r
-       uint32_t ulTransactionID;\r
-       uint16_t usElapsedTime;\r
-       uint16_t usFlags;\r
-       uint32_t ulClientIPAddress_ciaddr;\r
-       uint32_t ulYourIPAddress_yiaddr;\r
-       uint32_t ulServerIPAddress_siaddr;\r
-       uint32_t ulRelayAgentIPAddress_giaddr;\r
-       uint8_t ucClientHardwareAddress[ dhcpCLIENT_HARDWARE_ADDRESS_LENGTH ];\r
-       uint8_t ucServerHostName[ dhcpSERVER_HOST_NAME_LENGTH ];\r
-       uint8_t ucBootFileName[ dhcpBOOT_FILE_NAME_LENGTH ];\r
-       uint32_t ulDHCPCookie;\r
-       uint8_t ucFirstOptionByte;\r
-}\r
-#include "pack_struct_end.h"\r
-typedef struct xDHCPMessage DHCPMessage_t;\r
-\r
-/* DHCP state machine states. */\r
-typedef enum\r
-{\r
-       eWaitingSendFirstDiscover = 0,  /* Initial state.  Send a discover the first time it is called, and reset all timers. */\r
-       eWaitingOffer,                                  /* Either resend the discover, or, if the offer is forthcoming, send a request. */\r
-       eWaitingAcknowledge,                    /* Either resend the request. */\r
-       #if( ipconfigDHCP_FALL_BACK_AUTO_IP != 0 )\r
-               eGetLinkLayerAddress,           /* When DHCP didn't respond, try to obtain a LinkLayer address 168.254.x.x. */\r
-       #endif\r
-       eLeasedAddress,                                 /* Resend the request at the appropriate time to renew the lease. */\r
-       eNotUsingLeasedAddress                  /* DHCP failed, and a default IP address is being used. */\r
-} eDHCPState_t;\r
-\r
-/* Hold information in between steps in the DHCP state machine. */\r
-struct xDHCP_DATA\r
-{\r
-       uint32_t ulTransactionId;\r
-       uint32_t ulOfferedIPAddress;\r
-       uint32_t ulDHCPServerAddress;\r
-       uint32_t ulLeaseTime;\r
-       /* Hold information on the current timer state. */\r
-       TickType_t xDHCPTxTime;\r
-       TickType_t xDHCPTxPeriod;\r
-       /* Try both without and with the broadcast flag */\r
-       BaseType_t xUseBroadcast;\r
-       /* Maintains the DHCP state machine state. */\r
-       eDHCPState_t eDHCPState;\r
-       /* The UDP socket used for all incoming and outgoing DHCP traffic. */\r
-       Socket_t xDHCPSocket;\r
-};\r
-\r
-typedef struct xDHCP_DATA DHCPData_t;\r
-\r
-#if( ipconfigDHCP_FALL_BACK_AUTO_IP != 0 )\r
-       /* Define the Link Layer IP address: 169.254.x.x */\r
-       #define LINK_LAYER_ADDRESS_0    169\r
-       #define LINK_LAYER_ADDRESS_1    254\r
-\r
-       /* Define the netmask used: 255.255.0.0 */\r
-       #define LINK_LAYER_NETMASK_0    255\r
-       #define LINK_LAYER_NETMASK_1    255\r
-       #define LINK_LAYER_NETMASK_2    0\r
-       #define LINK_LAYER_NETMASK_3    0\r
-#endif\r
-\r
-\r
-/*\r
- * Generate a DHCP discover message and send it on the DHCP socket.\r
- */\r
-static void prvSendDHCPDiscover( void );\r
-\r
-/*\r
- * Interpret message received on the DHCP socket.\r
- */\r
-static BaseType_t prvProcessDHCPReplies( BaseType_t xExpectedMessageType );\r
-\r
-/*\r
- * Generate a DHCP request packet, and send it on the DHCP socket.\r
- */\r
-static void prvSendDHCPRequest( void );\r
-\r
-/*\r
- * Prepare to start a DHCP transaction.  This initialises some state variables\r
- * and creates the DHCP socket if necessary.\r
- */\r
-static void prvInitialiseDHCP( void );\r
-\r
-/*\r
- * Creates the part of outgoing DHCP messages that are common to all outgoing\r
- * DHCP messages.\r
- */\r
-static uint8_t *prvCreatePartDHCPMessage( struct freertos_sockaddr *pxAddress, BaseType_t xOpcode, const uint8_t * const pucOptionsArray, size_t *pxOptionsArraySize );\r
-\r
-/*\r
- * Create the DHCP socket, if it has not been created already.\r
- */\r
-static void prvCreateDHCPSocket( void );\r
-\r
-/*\r
- * After DHCP has failed to answer, prepare everything to start searching\r
- * for (trying-out) LinkLayer IP-addresses, using the random method: Send\r
- * a gratuitous ARP request and wait if another device responds to it.\r
- */\r
-#if( ipconfigDHCP_FALL_BACK_AUTO_IP != 0 )\r
-       static void prvPrepareLinkLayerIPLookUp( void );\r
-#endif\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-/* The next DHCP transaction Id to be used. */\r
-static DHCPData_t xDHCPData;\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-BaseType_t xIsDHCPSocket( Socket_t xSocket )\r
-{\r
-BaseType_t xReturn;\r
-\r
-       if( xDHCPData.xDHCPSocket == xSocket )\r
-       {\r
-               xReturn = pdTRUE;\r
-       }\r
-       else\r
-       {\r
-               xReturn = pdFALSE;\r
-       }\r
-\r
-       return xReturn;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-void vDHCPProcess( BaseType_t xReset )\r
-{\r
-BaseType_t xGivingUp = pdFALSE;\r
-#if( ipconfigUSE_DHCP_HOOK != 0 )\r
-       eDHCPCallbackAnswer_t eAnswer;\r
-#endif /* ipconfigUSE_DHCP_HOOK */\r
-\r
-       /* Is DHCP starting over? */\r
-       if( xReset != pdFALSE )\r
-       {\r
-               xDHCPData.eDHCPState = eWaitingSendFirstDiscover;\r
-       }\r
-\r
-       switch( xDHCPData.eDHCPState )\r
-       {\r
-               case eWaitingSendFirstDiscover :\r
-                       /* Ask the user if a DHCP discovery is required. */\r
-               #if( ipconfigUSE_DHCP_HOOK != 0 )\r
-                       eAnswer = xApplicationDHCPHook( eDHCPPhasePreDiscover, xNetworkAddressing.ulDefaultIPAddress );\r
-                       if( eAnswer == eDHCPContinue )\r
-               #endif  /* ipconfigUSE_DHCP_HOOK */\r
-                       {\r
-                               /* Initial state.  Create the DHCP socket, timer, etc. if they\r
-                               have not already been created. */\r
-                               prvInitialiseDHCP();\r
-\r
-                               /* See if prvInitialiseDHCP() has creates a socket. */\r
-                               if( xDHCPData.xDHCPSocket == NULL )\r
-                               {\r
-                                       xGivingUp = pdTRUE;\r
-                                       break;\r
-                               }\r
-\r
-                               *ipLOCAL_IP_ADDRESS_POINTER = 0UL;\r
-\r
-                               /* Send the first discover request. */\r
-                               if( xDHCPData.xDHCPSocket != NULL )\r
-                               {\r
-                                       xDHCPData.xDHCPTxTime = xTaskGetTickCount();\r
-                                       prvSendDHCPDiscover( );\r
-                                       xDHCPData.eDHCPState = eWaitingOffer;\r
-                               }\r
-                       }\r
-               #if( ipconfigUSE_DHCP_HOOK != 0 )\r
-                       else\r
-                       {\r
-                               if( eAnswer == eDHCPUseDefaults )\r
-                               {\r
-                                       memcpy( &xNetworkAddressing, &xDefaultAddressing, sizeof( xNetworkAddressing ) );\r
-                               }\r
-\r
-                               /* The user indicates that the DHCP process does not continue. */\r
-                               xGivingUp = pdTRUE;\r
-                       }\r
-               #endif  /* ipconfigUSE_DHCP_HOOK */\r
-                       break;\r
-\r
-               case eWaitingOffer :\r
-\r
-                       xGivingUp = pdFALSE;\r
-\r
-                       /* Look for offers coming in. */\r
-                       if( prvProcessDHCPReplies( dhcpMESSAGE_TYPE_OFFER ) == pdPASS )\r
-                       {\r
-                       #if( ipconfigUSE_DHCP_HOOK != 0 )\r
-                               /* Ask the user if a DHCP request is required. */\r
-                               eAnswer = xApplicationDHCPHook( eDHCPPhasePreRequest, xDHCPData.ulOfferedIPAddress );\r
-\r
-                               if( eAnswer == eDHCPContinue )\r
-                       #endif  /* ipconfigUSE_DHCP_HOOK */\r
-                               {\r
-                                       /* An offer has been made, the user wants to continue,\r
-                                       generate the request. */\r
-                                       xDHCPData.xDHCPTxTime = xTaskGetTickCount();\r
-                                       xDHCPData.xDHCPTxPeriod = dhcpINITIAL_DHCP_TX_PERIOD;\r
-                                       prvSendDHCPRequest( );\r
-                                       xDHCPData.eDHCPState = eWaitingAcknowledge;\r
-                                       break;\r
-                               }\r
-\r
-                       #if( ipconfigUSE_DHCP_HOOK != 0 )\r
-                               if( eAnswer == eDHCPUseDefaults )\r
-                               {\r
-                                       memcpy( &xNetworkAddressing, &xDefaultAddressing, sizeof( xNetworkAddressing ) );\r
-                               }\r
-\r
-                               /* The user indicates that the DHCP process does not continue. */\r
-                               xGivingUp = pdTRUE;\r
-                       #endif  /* ipconfigUSE_DHCP_HOOK */\r
-                       }\r
-                       else if( ( xTaskGetTickCount() - xDHCPData.xDHCPTxTime ) > xDHCPData.xDHCPTxPeriod )\r
-                       {\r
-                               /* It is time to send another Discover.  Increase the time\r
-                               period, and if it has not got to the point of giving up - send\r
-                               another discovery. */\r
-                               xDHCPData.xDHCPTxPeriod <<= 1;\r
-\r
-                               if( xDHCPData.xDHCPTxPeriod <= ipconfigMAXIMUM_DISCOVER_TX_PERIOD )\r
-                               {\r
-                                       if( xApplicationGetRandomNumber( &( xDHCPData.ulTransactionId ) ) != pdFALSE )\r
-                                       {\r
-                                               xDHCPData.xDHCPTxTime = xTaskGetTickCount( );\r
-                                               xDHCPData.xUseBroadcast = !xDHCPData.xUseBroadcast;\r
-                                               prvSendDHCPDiscover( );\r
-                                               FreeRTOS_debug_printf( ( "vDHCPProcess: timeout %lu ticks\n", xDHCPData.xDHCPTxPeriod ) );\r
-                                       }\r
-                                       else\r
-                                       {\r
-                                               FreeRTOS_debug_printf( ( "vDHCPProcess: failed to generate a random Transaction ID\n" ) );\r
-                                       }\r
-                               }\r
-                               else\r
-                               {\r
-                                       FreeRTOS_debug_printf( ( "vDHCPProcess: giving up %lu > %lu ticks\n", xDHCPData.xDHCPTxPeriod, ipconfigMAXIMUM_DISCOVER_TX_PERIOD ) );\r
-\r
-                                       #if( ipconfigDHCP_FALL_BACK_AUTO_IP != 0 )\r
-                                       {\r
-                                               /* Only use a fake Ack if the default IP address == 0x00\r
-                                               and the link local addressing is used.  Start searching\r
-                                               a free LinkLayer IP-address.  Next state will be\r
-                                               'eGetLinkLayerAddress'. */\r
-                                               prvPrepareLinkLayerIPLookUp();\r
-\r
-                                               /* Setting an IP address manually so set to not using\r
-                                               leased address mode. */\r
-                                               xDHCPData.eDHCPState = eGetLinkLayerAddress;\r
-                                       }\r
-                                       #else\r
-                                       {\r
-                                               xGivingUp = pdTRUE;\r
-                                       }\r
-                                       #endif /* ipconfigDHCP_FALL_BACK_AUTO_IP */\r
-                               }\r
-                       }\r
-                       break;\r
-\r
-               case eWaitingAcknowledge :\r
-\r
-                       /* Look for acks coming in. */\r
-                       if( prvProcessDHCPReplies( dhcpMESSAGE_TYPE_ACK ) == pdPASS )\r
-                       {\r
-                               FreeRTOS_debug_printf( ( "vDHCPProcess: acked %lxip\n", FreeRTOS_ntohl( xDHCPData.ulOfferedIPAddress ) ) );\r
-\r
-                               /* DHCP completed.  The IP address can now be used, and the\r
-                               timer set to the lease timeout time. */\r
-                               *ipLOCAL_IP_ADDRESS_POINTER = xDHCPData.ulOfferedIPAddress;\r
-\r
-                               /* Setting the 'local' broadcast address, something like\r
-                               '192.168.1.255'. */\r
-                               xNetworkAddressing.ulBroadcastAddress = ( xDHCPData.ulOfferedIPAddress & xNetworkAddressing.ulNetMask ) |  ~xNetworkAddressing.ulNetMask;\r
-                               xDHCPData.eDHCPState = eLeasedAddress;\r
-\r
-                               iptraceDHCP_SUCCEDEED( xDHCPData.ulOfferedIPAddress );\r
-\r
-                               /* DHCP failed, the default configured IP-address will be used\r
-                               Now call vIPNetworkUpCalls() to send the network-up event and\r
-                               start the ARP timer. */\r
-                               vIPNetworkUpCalls( );\r
-\r
-                               /* Close socket to ensure packets don't queue on it. */\r
-                               vSocketClose( xDHCPData.xDHCPSocket );\r
-                               xDHCPData.xDHCPSocket = NULL;\r
-\r
-                               if( xDHCPData.ulLeaseTime == 0UL )\r
-                               {\r
-                                       xDHCPData.ulLeaseTime = dhcpDEFAULT_LEASE_TIME;\r
-                               }\r
-                               else if( xDHCPData.ulLeaseTime < dhcpMINIMUM_LEASE_TIME )\r
-                               {\r
-                                       xDHCPData.ulLeaseTime = dhcpMINIMUM_LEASE_TIME;\r
-                               }\r
-                               else\r
-                               {\r
-                                       /* The lease time is already valid. */\r
-                               }\r
-\r
-                               /* Check for clashes. */\r
-                               vARPSendGratuitous();\r
-                               vIPReloadDHCPTimer( xDHCPData.ulLeaseTime );\r
-                       }\r
-                       else\r
-                       {\r
-                               /* Is it time to send another Discover? */\r
-                               if( ( xTaskGetTickCount() - xDHCPData.xDHCPTxTime ) > xDHCPData.xDHCPTxPeriod )\r
-                               {\r
-                                       /* Increase the time period, and if it has not got to the\r
-                                       point of giving up - send another request. */\r
-                                       xDHCPData.xDHCPTxPeriod <<= 1;\r
-\r
-                                       if( xDHCPData.xDHCPTxPeriod <= ipconfigMAXIMUM_DISCOVER_TX_PERIOD )\r
-                                       {\r
-                                               xDHCPData.xDHCPTxTime = xTaskGetTickCount();\r
-                                               prvSendDHCPRequest( );\r
-                                       }\r
-                                       else\r
-                                       {\r
-                                               /* Give up, start again. */\r
-                                               xDHCPData.eDHCPState = eWaitingSendFirstDiscover;\r
-                                       }\r
-                               }\r
-                       }\r
-                       break;\r
-\r
-       #if( ipconfigDHCP_FALL_BACK_AUTO_IP != 0 )\r
-               case eGetLinkLayerAddress:\r
-                       if( ( xTaskGetTickCount() - xDHCPData.xDHCPTxTime ) > xDHCPData.xDHCPTxPeriod )\r
-                       {\r
-                               if( xARPHadIPClash == pdFALSE )\r
-                               {\r
-                                       /* ARP OK. proceed. */\r
-                                       iptraceDHCP_SUCCEDEED( xDHCPData.ulOfferedIPAddress );\r
-\r
-                                       /* Auto-IP succeeded, the default configured IP-address will\r
-                                       be used.  Now call vIPNetworkUpCalls() to send the\r
-                                       network-up event and start the ARP timer. */\r
-                                       vIPNetworkUpCalls( );\r
-                                       xDHCPData.eDHCPState = eNotUsingLeasedAddress;\r
-                               }\r
-                               else\r
-                               {\r
-                                       /* ARP clashed - try another IP address. */\r
-                                       prvPrepareLinkLayerIPLookUp();\r
-\r
-                                       /* Setting an IP address manually so set to not using leased\r
-                                       address mode. */\r
-                                       xDHCPData.eDHCPState = eGetLinkLayerAddress;\r
-                               }\r
-                       }\r
-                       break;\r
-       #endif  /* ipconfigDHCP_FALL_BACK_AUTO_IP */\r
-\r
-               case eLeasedAddress :\r
-\r
-                       /* Resend the request at the appropriate time to renew the lease. */\r
-                       prvCreateDHCPSocket();\r
-\r
-                       if( xDHCPData.xDHCPSocket != NULL )\r
-                       {\r
-                               xDHCPData.xDHCPTxTime = xTaskGetTickCount();\r
-                               xDHCPData.xDHCPTxPeriod = dhcpINITIAL_DHCP_TX_PERIOD;\r
-                               prvSendDHCPRequest( );\r
-                               xDHCPData.eDHCPState = eWaitingAcknowledge;\r
-\r
-                               /* From now on, we should be called more often */\r
-                               vIPReloadDHCPTimer( dhcpINITIAL_TIMER_PERIOD );\r
-                       }\r
-                       break;\r
-\r
-               case eNotUsingLeasedAddress:\r
-\r
-                       vIPSetDHCPTimerEnableState( pdFALSE );\r
-                       break;\r
-\r
-               default:\r
-                       break;\r
-       }\r
-\r
-       if( xGivingUp != pdFALSE )\r
-       {\r
-               /* xGivingUp became true either because of a time-out, or because\r
-               xApplicationDHCPHook() returned another value than 'eDHCPContinue',\r
-               meaning that the conversion is canceled from here. */\r
-\r
-               /* Revert to static IP address. */\r
-               taskENTER_CRITICAL();\r
-               {\r
-                       *ipLOCAL_IP_ADDRESS_POINTER = xNetworkAddressing.ulDefaultIPAddress;\r
-                       iptraceDHCP_REQUESTS_FAILED_USING_DEFAULT_IP_ADDRESS( xNetworkAddressing.ulDefaultIPAddress );\r
-               }\r
-               taskEXIT_CRITICAL();\r
-\r
-               xDHCPData.eDHCPState = eNotUsingLeasedAddress;\r
-               vIPSetDHCPTimerEnableState( pdFALSE );\r
-\r
-               /* DHCP failed, the default configured IP-address will be used.  Now\r
-               call vIPNetworkUpCalls() to send the network-up event and start the ARP\r
-               timer. */\r
-               vIPNetworkUpCalls( );\r
-\r
-               /* Test if socket was indeed created. */\r
-               if( xDHCPData.xDHCPSocket != NULL )\r
-               {\r
-                       /* Close socket to ensure packets don't queue on it. */\r
-                       vSocketClose( xDHCPData.xDHCPSocket );\r
-                       xDHCPData.xDHCPSocket = NULL;\r
-               }\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvCreateDHCPSocket( void )\r
-{\r
-struct freertos_sockaddr xAddress;\r
-BaseType_t xReturn;\r
-TickType_t xTimeoutTime = ( TickType_t ) 0;\r
-\r
-       /* Create the socket, if it has not already been created. */\r
-       if( xDHCPData.xDHCPSocket == NULL )\r
-       {\r
-               xDHCPData.xDHCPSocket = FreeRTOS_socket( FREERTOS_AF_INET, FREERTOS_SOCK_DGRAM, FREERTOS_IPPROTO_UDP );\r
-               if( xDHCPData.xDHCPSocket != FREERTOS_INVALID_SOCKET )\r
-               {\r
-\r
-                       /* Ensure the Rx and Tx timeouts are zero as the DHCP executes in the\r
-                       context of the IP task. */\r
-                       FreeRTOS_setsockopt( xDHCPData.xDHCPSocket, 0, FREERTOS_SO_RCVTIMEO, ( void * ) &xTimeoutTime, sizeof( TickType_t ) );\r
-                       FreeRTOS_setsockopt( xDHCPData.xDHCPSocket, 0, FREERTOS_SO_SNDTIMEO, ( void * ) &xTimeoutTime, sizeof( TickType_t ) );\r
-\r
-                       /* Bind to the standard DHCP client port. */\r
-                       xAddress.sin_port = ( uint16_t ) dhcpCLIENT_PORT;\r
-                       xReturn = vSocketBind( xDHCPData.xDHCPSocket, &xAddress, sizeof( xAddress ), pdFALSE );\r
-                       if( xReturn != 0 )\r
-                       {\r
-                               /* Binding failed, close the socket again. */\r
-                               vSocketClose( xDHCPData.xDHCPSocket );\r
-                               xDHCPData.xDHCPSocket = NULL;\r
-                       }\r
-               }\r
-               else\r
-               {\r
-                       /* Change to NULL for easier testing. */\r
-                       xDHCPData.xDHCPSocket = NULL;\r
-               }\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvInitialiseDHCP( void )\r
-{\r
-       /* Initialise the parameters that will be set by the DHCP process. Per\r
-       https://www.ietf.org/rfc/rfc2131.txt, Transaction ID should be a random\r
-       value chosen by the client. */\r
-\r
-       /* Check for random number generator API failure. */\r
-       if( xApplicationGetRandomNumber( &( xDHCPData.ulTransactionId ) ) != pdFALSE )\r
-       {\r
-               xDHCPData.xUseBroadcast = 0;\r
-               xDHCPData.ulOfferedIPAddress = 0UL;\r
-               xDHCPData.ulDHCPServerAddress = 0UL;\r
-               xDHCPData.xDHCPTxPeriod = dhcpINITIAL_DHCP_TX_PERIOD;\r
-\r
-               /* Create the DHCP socket if it has not already been created. */\r
-               prvCreateDHCPSocket();\r
-               FreeRTOS_debug_printf( ( "prvInitialiseDHCP: start after %lu ticks\n", dhcpINITIAL_TIMER_PERIOD ) );\r
-               vIPReloadDHCPTimer( dhcpINITIAL_TIMER_PERIOD );\r
-       }\r
-       else\r
-       {\r
-               /* There was a problem with the randomiser. */\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static BaseType_t prvProcessDHCPReplies( BaseType_t xExpectedMessageType )\r
-{\r
-uint8_t *pucUDPPayload, *pucLastByte;\r
-struct freertos_sockaddr xClient;\r
-uint32_t xClientLength = sizeof( xClient );\r
-int32_t lBytes;\r
-DHCPMessage_t *pxDHCPMessage;\r
-uint8_t *pucByte, ucOptionCode, ucLength;\r
-uint32_t ulProcessed, ulParameter;\r
-BaseType_t xReturn = pdFALSE;\r
-const uint32_t ulMandatoryOptions = 2ul; /* DHCP server address, and the correct DHCP message type must be present in the options. */\r
-\r
-       lBytes = FreeRTOS_recvfrom( xDHCPData.xDHCPSocket, ( void * ) &pucUDPPayload, 0ul, FREERTOS_ZERO_COPY, &xClient, &xClientLength );\r
-\r
-       if( lBytes > 0 )\r
-       {\r
-               /* Map a DHCP structure onto the received data. */\r
-               pxDHCPMessage = ( DHCPMessage_t * ) ( pucUDPPayload );\r
-\r
-               /* Sanity check. */\r
-               if( ( lBytes >= sizeof( DHCPMessage_t ) ) &&\r
-                       ( pxDHCPMessage->ulDHCPCookie == ( uint32_t ) dhcpCOOKIE ) &&\r
-                       ( pxDHCPMessage->ucOpcode == ( uint8_t ) dhcpREPLY_OPCODE ) &&\r
-                       ( pxDHCPMessage->ulTransactionID == FreeRTOS_htonl( xDHCPData.ulTransactionId ) ) )\r
-               {\r
-                       if( memcmp( ( void * ) &( pxDHCPMessage->ucClientHardwareAddress ),\r
-                                               ( void * ) ipLOCAL_MAC_ADDRESS,\r
-                                               sizeof( MACAddress_t ) ) == 0 )\r
-                       {\r
-                               /* None of the essential options have been processed yet. */\r
-                               ulProcessed = 0ul;\r
-\r
-                               /* Walk through the options until the dhcpOPTION_END_BYTE byte\r
-                               is found, taking care not to walk off the end of the options. */\r
-                               pucByte = &( pxDHCPMessage->ucFirstOptionByte );\r
-                /* Maintain a pointer to the last valid byte (i.e. not the first\r
-                invalid byte). */\r
-                               pucLastByte = pucUDPPayload + lBytes - 1;\r
-\r
-                               while( pucByte <= pucLastByte )\r
-                               {\r
-                                       ucOptionCode = pucByte[ 0 ];\r
-                                       if( ucOptionCode == dhcpOPTION_END_BYTE )\r
-                                       {\r
-                                               /* Ready, the last byte has been seen. */\r
-                                               break;\r
-                                       }\r
-                                       if( ucOptionCode == dhcpZERO_PAD_OPTION_CODE )\r
-                                       {\r
-                                               /* The value zero is used as a pad byte,\r
-                                               it is not followed by a length byte. */\r
-                                               pucByte += 1;\r
-                                               continue;\r
-                                       }\r
-\r
-                                       /* Stop if the response is malformed. */\r
-                                       if( pucByte < pucLastByte )\r
-                                       {\r
-                        /* There are at least two bytes left. */\r
-                                               ucLength = pucByte[ 1 ];\r
-                                               pucByte += 2;\r
-\r
-                                               if( pucByte + ucLength > pucLastByte )\r
-                                               {\r
-                                                       break;\r
-                                               }\r
-                                       }\r
-                                       else\r
-                                       {\r
-                                               break;\r
-                                       }\r
-\r
-                                       /* In most cases, a 4-byte network-endian parameter follows,\r
-                                       just get it once here and use later. */\r
-                                       if( ucLength >= sizeof( ulParameter ) )\r
-                                       {\r
-                                               memcpy( ( void * ) &( ulParameter ),\r
-                                                               ( void * ) pucByte,\r
-                                                               ( size_t ) sizeof( ulParameter ) );\r
-                                       }\r
-                                       else\r
-                                       {\r
-                                               ulParameter = 0;\r
-                                       }\r
-\r
-                                       /* Option-specific handling. */\r
-                                       switch( ucOptionCode )\r
-                                       {\r
-                                               case dhcpMESSAGE_TYPE_OPTION_CODE       :\r
-\r
-                                                       if( *pucByte == ( uint8_t ) xExpectedMessageType )\r
-                                                       {\r
-                                                               /* The message type is the message type the\r
-                                                               state machine is expecting. */\r
-                                                               ulProcessed++;\r
-                                                       }\r
-                                                       else if( *pucByte == ( uint8_t ) dhcpMESSAGE_TYPE_NACK )\r
-                                                       {\r
-                                                               if( xExpectedMessageType == ( BaseType_t ) dhcpMESSAGE_TYPE_ACK )\r
-                                                               {\r
-                                                                       /* Start again. */\r
-                                                                       xDHCPData.eDHCPState = eWaitingSendFirstDiscover;\r
-                                                               }\r
-                                                       }\r
-                                                       else\r
-                                                       {\r
-                                                               /* Don't process other message types. */\r
-                                                       }\r
-                                                       break;\r
-\r
-                                               case dhcpSUBNET_MASK_OPTION_CODE :\r
-\r
-                                                       if( ucLength == sizeof( uint32_t ) )\r
-                                                       {\r
-                                                               xNetworkAddressing.ulNetMask = ulParameter;\r
-                                                       }\r
-                                                       break;\r
-\r
-                                               case dhcpGATEWAY_OPTION_CODE :\r
-\r
-                                                       if( ucLength == sizeof( uint32_t ) )\r
-                                                       {\r
-                                                               /* ulProcessed is not incremented in this case\r
-                                                               because the gateway is not essential. */\r
-                                                               xNetworkAddressing.ulGatewayAddress = ulParameter;\r
-                                                       }\r
-                                                       break;\r
-\r
-                                               case dhcpDNS_SERVER_OPTIONS_CODE :\r
-\r
-                                                       /* ulProcessed is not incremented in this case\r
-                                                       because the DNS server is not essential.  Only the\r
-                                                       first DNS server address is taken. */\r
-                                                       xNetworkAddressing.ulDNSServerAddress = ulParameter;\r
-                                                       break;\r
-\r
-                                               case dhcpSERVER_IP_ADDRESS_OPTION_CODE :\r
-\r
-                                                       if( ucLength == sizeof( uint32_t ) )\r
-                                                       {\r
-                                                               if( xExpectedMessageType == ( BaseType_t ) dhcpMESSAGE_TYPE_OFFER )\r
-                                                               {\r
-                                                                       /* Offers state the replying server. */\r
-                                                                       ulProcessed++;\r
-                                                                       xDHCPData.ulDHCPServerAddress = ulParameter;\r
-                                                               }\r
-                                                               else\r
-                                                               {\r
-                                                                       /* The ack must come from the expected server. */\r
-                                                                       if( xDHCPData.ulDHCPServerAddress == ulParameter )\r
-                                                                       {\r
-                                                                               ulProcessed++;\r
-                                                                       }\r
-                                                               }\r
-                                                       }\r
-                                                       break;\r
-\r
-                                               case dhcpLEASE_TIME_OPTION_CODE :\r
-\r
-                                                       if( ucLength == sizeof( xDHCPData.ulLeaseTime ) )\r
-                                                       {\r
-                                                               /* ulProcessed is not incremented in this case\r
-                                                               because the lease time is not essential. */\r
-                                                               /* The DHCP parameter is in seconds, convert\r
-                                                               to host-endian format. */\r
-                                                               xDHCPData.ulLeaseTime = FreeRTOS_ntohl( ulParameter );\r
-\r
-                                                               /* Divide the lease time by two to ensure a\r
-                                                               renew request is sent before the lease actually\r
-                                                               expires. */\r
-                                                               xDHCPData.ulLeaseTime >>= 1UL;\r
-\r
-                                                               /* Multiply with configTICK_RATE_HZ to get clock\r
-                                                               ticks. */\r
-                                                               xDHCPData.ulLeaseTime = configTICK_RATE_HZ * xDHCPData.ulLeaseTime;\r
-                                                       }\r
-                                                       break;\r
-\r
-                                               default :\r
-\r
-                                                       /* Not interested in this field. */\r
-\r
-                                                       break;\r
-                                       }\r
-\r
-                                       /* Jump over the data to find the next option code. */\r
-                                       if( ucLength == 0u )\r
-                                       {\r
-                                               break;\r
-                                       }\r
-                                       else\r
-                                       {\r
-                                               pucByte += ucLength;\r
-                                       }\r
-                               }\r
-\r
-                               /* Were all the mandatory options received? */\r
-                               if( ulProcessed >= ulMandatoryOptions )\r
-                               {\r
-                                       /* HT:endian: used to be network order */\r
-                                       xDHCPData.ulOfferedIPAddress = pxDHCPMessage->ulYourIPAddress_yiaddr;\r
-                                       FreeRTOS_printf( ( "vDHCPProcess: offer %lxip\n", FreeRTOS_ntohl( xDHCPData.ulOfferedIPAddress ) ) );\r
-                                       xReturn = pdPASS;\r
-                               }\r
-                       }\r
-               }\r
-\r
-               FreeRTOS_ReleaseUDPPayloadBuffer( ( void * ) pucUDPPayload );\r
-       }\r
-\r
-       return xReturn;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static uint8_t *prvCreatePartDHCPMessage( struct freertos_sockaddr *pxAddress, BaseType_t xOpcode, const uint8_t * const pucOptionsArray, size_t *pxOptionsArraySize )\r
-{\r
-DHCPMessage_t *pxDHCPMessage;\r
-size_t xRequiredBufferSize = sizeof( DHCPMessage_t ) + *pxOptionsArraySize;\r
-uint8_t *pucUDPPayloadBuffer;\r
-\r
-#if( ipconfigDHCP_REGISTER_HOSTNAME == 1 )\r
-       const char *pucHostName = pcApplicationHostnameHook ();\r
-       size_t xNameLength = strlen( pucHostName );\r
-       uint8_t *pucPtr;\r
-\r
-       xRequiredBufferSize += ( 2 + xNameLength );\r
-#endif\r
-\r
-       /* Get a buffer.  This uses a maximum delay, but the delay will be capped\r
-       to ipconfigUDP_MAX_SEND_BLOCK_TIME_TICKS so the return value still needs to\r
-       be test. */\r
-       do\r
-       {\r
-       } while( ( pucUDPPayloadBuffer = ( uint8_t * ) FreeRTOS_GetUDPPayloadBuffer( xRequiredBufferSize, portMAX_DELAY ) ) == NULL );\r
-\r
-       pxDHCPMessage = ( DHCPMessage_t * ) pucUDPPayloadBuffer;\r
-\r
-       /* Most fields need to be zero. */\r
-       memset( ( void * ) pxDHCPMessage, 0x00, sizeof( DHCPMessage_t ) );\r
-\r
-       /* Create the message. */\r
-       pxDHCPMessage->ucOpcode = ( uint8_t ) xOpcode;\r
-       pxDHCPMessage->ucAddressType = ( uint8_t ) dhcpADDRESS_TYPE_ETHERNET;\r
-       pxDHCPMessage->ucAddressLength = ( uint8_t ) dhcpETHERNET_ADDRESS_LENGTH;\r
-       pxDHCPMessage->ulTransactionID = FreeRTOS_htonl( xDHCPData.ulTransactionId );\r
-       pxDHCPMessage->ulDHCPCookie = ( uint32_t ) dhcpCOOKIE;\r
-       if( xDHCPData.xUseBroadcast != pdFALSE )\r
-       {\r
-               pxDHCPMessage->usFlags = ( uint16_t ) dhcpBROADCAST;\r
-       }\r
-       else\r
-       {\r
-               pxDHCPMessage->usFlags = 0u;\r
-       }\r
-\r
-       memcpy( ( void * ) &( pxDHCPMessage->ucClientHardwareAddress[ 0 ] ), ( void * ) ipLOCAL_MAC_ADDRESS, sizeof( MACAddress_t ) );\r
-\r
-       /* Copy in the const part of the options options. */\r
-       memcpy( ( void * ) &( pucUDPPayloadBuffer[ dhcpFIRST_OPTION_BYTE_OFFSET ] ), ( void * ) pucOptionsArray, *pxOptionsArraySize );\r
-\r
-       #if( ipconfigDHCP_REGISTER_HOSTNAME == 1 )\r
-       {\r
-               /* With this option, the hostname can be registered as well which makes\r
-               it easier to lookup a device in a router's list of DHCP clients. */\r
-\r
-               /* Point to where the OPTION_END was stored to add data. */\r
-               pucPtr = &( pucUDPPayloadBuffer[ dhcpFIRST_OPTION_BYTE_OFFSET + ( *pxOptionsArraySize - 1 ) ] );\r
-               pucPtr[ 0 ] = dhcpDNS_HOSTNAME_OPTIONS_CODE;\r
-               pucPtr[ 1 ] = ( uint8_t ) xNameLength;\r
-               memcpy( ( void *) ( pucPtr + 2 ), pucHostName, xNameLength );\r
-               pucPtr[ 2 + xNameLength ] = dhcpOPTION_END_BYTE;\r
-               *pxOptionsArraySize += ( 2 + xNameLength );\r
-       }\r
-       #endif\r
-\r
-       /* Map in the client identifier. */\r
-       memcpy( ( void * ) &( pucUDPPayloadBuffer[ dhcpFIRST_OPTION_BYTE_OFFSET + dhcpCLIENT_IDENTIFIER_OFFSET ] ),\r
-               ( void * ) ipLOCAL_MAC_ADDRESS, sizeof( MACAddress_t ) );\r
-\r
-       /* Set the addressing. */\r
-       pxAddress->sin_addr = ipBROADCAST_IP_ADDRESS;\r
-       pxAddress->sin_port = ( uint16_t ) dhcpSERVER_PORT;\r
-\r
-       return pucUDPPayloadBuffer;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvSendDHCPRequest( void )\r
-{\r
-uint8_t *pucUDPPayloadBuffer;\r
-struct freertos_sockaddr xAddress;\r
-static const uint8_t ucDHCPRequestOptions[] =\r
-{\r
-       /* Do not change the ordering without also changing\r
-       dhcpCLIENT_IDENTIFIER_OFFSET, dhcpREQUESTED_IP_ADDRESS_OFFSET and\r
-       dhcpDHCP_SERVER_IP_ADDRESS_OFFSET. */\r
-       dhcpMESSAGE_TYPE_OPTION_CODE, 1, dhcpMESSAGE_TYPE_REQUEST,              /* Message type option. */\r
-       dhcpCLIENT_IDENTIFIER_OPTION_CODE, 6, 0, 0, 0, 0, 0, 0,                 /* Client identifier. */\r
-       dhcpREQUEST_IP_ADDRESS_OPTION_CODE, 4, 0, 0, 0, 0,                              /* The IP address being requested. */\r
-       dhcpSERVER_IP_ADDRESS_OPTION_CODE, 4, 0, 0, 0, 0,                               /* The IP address of the DHCP server. */\r
-       dhcpOPTION_END_BYTE\r
-};\r
-size_t xOptionsLength = sizeof( ucDHCPRequestOptions );\r
-\r
-       pucUDPPayloadBuffer = prvCreatePartDHCPMessage( &xAddress, dhcpREQUEST_OPCODE, ucDHCPRequestOptions, &xOptionsLength );\r
-\r
-       /* Copy in the IP address being requested. */\r
-       memcpy( ( void * ) &( pucUDPPayloadBuffer[ dhcpFIRST_OPTION_BYTE_OFFSET + dhcpREQUESTED_IP_ADDRESS_OFFSET ] ),\r
-               ( void * ) &( xDHCPData.ulOfferedIPAddress ), sizeof( xDHCPData.ulOfferedIPAddress ) );\r
-\r
-       /* Copy in the address of the DHCP server being used. */\r
-       memcpy( ( void * ) &( pucUDPPayloadBuffer[ dhcpFIRST_OPTION_BYTE_OFFSET + dhcpDHCP_SERVER_IP_ADDRESS_OFFSET ] ),\r
-               ( void * ) &( xDHCPData.ulDHCPServerAddress ), sizeof( xDHCPData.ulDHCPServerAddress ) );\r
-\r
-       FreeRTOS_debug_printf( ( "vDHCPProcess: reply %lxip\n", FreeRTOS_ntohl( xDHCPData.ulOfferedIPAddress ) ) );\r
-       iptraceSENDING_DHCP_REQUEST();\r
-\r
-       /* 'ucFirstOptionByte' is part of DHCP message struct, so subtract one byte. */\r
-       if( FreeRTOS_sendto( xDHCPData.xDHCPSocket, pucUDPPayloadBuffer, ( sizeof( DHCPMessage_t ) + xOptionsLength - 1 ), FREERTOS_ZERO_COPY, &xAddress, sizeof( xAddress ) ) == 0 )\r
-       {\r
-               /* The packet was not successfully queued for sending and must be\r
-               returned to the stack. */\r
-               FreeRTOS_ReleaseUDPPayloadBuffer( pucUDPPayloadBuffer );\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvSendDHCPDiscover( void )\r
-{\r
-uint8_t *pucUDPPayloadBuffer;\r
-struct freertos_sockaddr xAddress;\r
-static const uint8_t ucDHCPDiscoverOptions[] =\r
-{\r
-       /* Do not change the ordering without also changing dhcpCLIENT_IDENTIFIER_OFFSET. */\r
-       dhcpMESSAGE_TYPE_OPTION_CODE, 1, dhcpMESSAGE_TYPE_DISCOVER,                                     /* Message type option. */\r
-       dhcpCLIENT_IDENTIFIER_OPTION_CODE, 6, 0, 0, 0, 0, 0, 0,                                         /* Client identifier. */\r
-       dhcpPARAMETER_REQUEST_OPTION_CODE, 3, dhcpSUBNET_MASK_OPTION_CODE, dhcpGATEWAY_OPTION_CODE, dhcpDNS_SERVER_OPTIONS_CODE,        /* Parameter request option. */\r
-       dhcpOPTION_END_BYTE\r
-};\r
-size_t xOptionsLength = sizeof( ucDHCPDiscoverOptions );\r
-\r
-       pucUDPPayloadBuffer = prvCreatePartDHCPMessage( &xAddress, dhcpREQUEST_OPCODE, ucDHCPDiscoverOptions, &xOptionsLength );\r
-\r
-       FreeRTOS_debug_printf( ( "vDHCPProcess: discover\n" ) );\r
-       iptraceSENDING_DHCP_DISCOVER();\r
-\r
-       /* 'ucFirstOptionByte' is part of DHCP message struct, so subtract one byte. */\r
-       if( FreeRTOS_sendto( xDHCPData.xDHCPSocket, pucUDPPayloadBuffer, ( sizeof( DHCPMessage_t ) + xOptionsLength - 1 ), FREERTOS_ZERO_COPY, &xAddress, sizeof( xAddress ) ) == 0 )\r
-       {\r
-               /* The packet was not successfully queued for sending and must be\r
-               returned to the stack. */\r
-               FreeRTOS_ReleaseUDPPayloadBuffer( pucUDPPayloadBuffer );\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigDHCP_FALL_BACK_AUTO_IP != 0 )\r
-\r
-       static void prvPrepareLinkLayerIPLookUp( void )\r
-       {\r
-       uint8_t ucLinkLayerIPAddress[ 2 ];\r
-       uint32_t ulNumbers[ 2 ];\r
-\r
-               /* After DHCP has failed to answer, prepare everything to start\r
-               trying-out LinkLayer IP-addresses, using the random method. */\r
-               xDHCPData.xDHCPTxTime = xTaskGetTickCount();\r
-\r
-               xApplicationGetRandomNumber( &( ulNumbers[ 0 ] ) );\r
-               xApplicationGetRandomNumber( &( ulNumbers[ 1 ] ) );\r
-               ucLinkLayerIPAddress[ 0 ] = ( uint8_t )1 + ( uint8_t )( ulNumbers[ 0 ] % 0xFDu );               /* get value 1..254 for IP-address 3rd byte of IP address to try. */\r
-               ucLinkLayerIPAddress[ 1 ] = ( uint8_t )1 + ( uint8_t )( ulNumbers[ 1 ] % 0xFDu );               /* get value 1..254 for IP-address 4th byte of IP address to try. */\r
-\r
-               xNetworkAddressing.ulGatewayAddress = FreeRTOS_htonl( 0xA9FE0203 );\r
-\r
-               /* prepare xDHCPData with data to test. */\r
-               xDHCPData.ulOfferedIPAddress =\r
-                       FreeRTOS_inet_addr_quick( LINK_LAYER_ADDRESS_0, LINK_LAYER_ADDRESS_1, ucLinkLayerIPAddress[ 0 ], ucLinkLayerIPAddress[ 1 ] );\r
-\r
-               xDHCPData.ulLeaseTime = dhcpDEFAULT_LEASE_TIME;  /*  don't care about lease time. just put anything. */\r
-\r
-               xNetworkAddressing.ulNetMask =\r
-                       FreeRTOS_inet_addr_quick( LINK_LAYER_NETMASK_0, LINK_LAYER_NETMASK_1, LINK_LAYER_NETMASK_2, LINK_LAYER_NETMASK_3 );\r
-\r
-               /* DHCP completed.  The IP address can now be used, and the\r
-               timer set to the lease timeout time. */\r
-               *ipLOCAL_IP_ADDRESS_POINTER = xDHCPData.ulOfferedIPAddress;\r
-\r
-               /* Setting the 'local' broadcast address, something like 192.168.1.255' */\r
-               xNetworkAddressing.ulBroadcastAddress = ( xDHCPData.ulOfferedIPAddress & xNetworkAddressing.ulNetMask ) |  ~xNetworkAddressing.ulNetMask;\r
-\r
-               /* Close socket to ensure packets don't queue on it. not needed anymore as DHCP failed. but still need timer for ARP testing. */\r
-               if( xDHCPData.xDHCPSocket != NULL )\r
-               {\r
-                       /* Close socket to ensure packets don't queue on it. */\r
-                       vSocketClose( xDHCPData.xDHCPSocket );\r
-                   xDHCPData.xDHCPSocket = NULL;\r
-               }\r
-\r
-               xApplicationGetRandomNumber( &( ulNumbers[ 0 ] ) );\r
-               xDHCPData.xDHCPTxPeriod = pdMS_TO_TICKS( 3000ul + ( ulNumbers[ 0 ] & 0x3ffuL ) ); /*  do ARP test every (3 + 0-1024mS) seconds. */\r
-\r
-               xARPHadIPClash = pdFALSE;          /* reset flag that shows if have ARP clash. */\r
-               vARPSendGratuitous();\r
-       }\r
-\r
-#endif /* ipconfigDHCP_FALL_BACK_AUTO_IP */\r
-/*-----------------------------------------------------------*/\r
-\r
-#endif /* ipconfigUSE_DHCP != 0 */\r
-\r
-\r
+/*
+ * FreeRTOS+TCP V2.2.0
+ * 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
+ */
+
+/* Standard includes. */
+#include <stdint.h>
+
+/* FreeRTOS includes. */
+#include "FreeRTOS.h"
+#include "task.h"
+#include "semphr.h"
+
+/* FreeRTOS+TCP includes. */
+#include "FreeRTOS_IP.h"
+#include "FreeRTOS_Sockets.h"
+#include "FreeRTOS_IP_Private.h"
+#include "FreeRTOS_UDP_IP.h"
+#include "FreeRTOS_TCP_IP.h"
+#include "FreeRTOS_DHCP.h"
+#include "FreeRTOS_ARP.h"
+#include "NetworkInterface.h"
+#include "NetworkBufferManagement.h"
+
+/* Exclude the entire file if DHCP is not enabled. */
+#if( ipconfigUSE_DHCP != 0 )
+
+#if ( ipconfigUSE_DHCP != 0 ) && ( ipconfigNETWORK_MTU < 586u )
+       /* DHCP must be able to receive an options field of 312 bytes, the fixed
+       part of the DHCP packet is 240 bytes, and the IP/UDP headers take 28 bytes. */
+       #error ipconfigNETWORK_MTU needs to be at least 586 to use DHCP
+#endif
+
+/* Parameter widths in the DHCP packet. */
+#define dhcpCLIENT_HARDWARE_ADDRESS_LENGTH             16
+#define dhcpSERVER_HOST_NAME_LENGTH                            64
+#define dhcpBOOT_FILE_NAME_LENGTH                              128
+
+/* Timer parameters */
+#ifndef dhcpINITIAL_DHCP_TX_PERIOD
+       #define dhcpINITIAL_TIMER_PERIOD                        ( pdMS_TO_TICKS( 250 ) )
+       #define dhcpINITIAL_DHCP_TX_PERIOD                      ( pdMS_TO_TICKS( 5000 ) )
+#endif
+
+/* Codes of interest found in the DHCP options field. */
+#define dhcpZERO_PAD_OPTION_CODE                               ( 0u )
+#define dhcpSUBNET_MASK_OPTION_CODE                            ( 1u )
+#define dhcpGATEWAY_OPTION_CODE                                        ( 3u )
+#define dhcpDNS_SERVER_OPTIONS_CODE                            ( 6u )
+#define dhcpDNS_HOSTNAME_OPTIONS_CODE                  ( 12u )
+#define dhcpREQUEST_IP_ADDRESS_OPTION_CODE             ( 50u )
+#define dhcpLEASE_TIME_OPTION_CODE                             ( 51u )
+#define dhcpMESSAGE_TYPE_OPTION_CODE                   ( 53u )
+#define dhcpSERVER_IP_ADDRESS_OPTION_CODE              ( 54u )
+#define dhcpPARAMETER_REQUEST_OPTION_CODE              ( 55u )
+#define dhcpCLIENT_IDENTIFIER_OPTION_CODE              ( 61u )
+
+/* The four DHCP message types of interest. */
+#define dhcpMESSAGE_TYPE_DISCOVER                              ( 1 )
+#define dhcpMESSAGE_TYPE_OFFER                                 ( 2 )
+#define dhcpMESSAGE_TYPE_REQUEST                               ( 3 )
+#define dhcpMESSAGE_TYPE_ACK                                   ( 5 )
+#define dhcpMESSAGE_TYPE_NACK                                  ( 6 )
+
+/* Offsets into the transmitted DHCP options fields at which various parameters
+are located. */
+#define dhcpCLIENT_IDENTIFIER_OFFSET                   ( 5 )
+#define dhcpREQUESTED_IP_ADDRESS_OFFSET                        ( 13 )
+#define dhcpDHCP_SERVER_IP_ADDRESS_OFFSET              ( 19 )
+
+/* Values used in the DHCP packets. */
+#define dhcpREQUEST_OPCODE                                             ( 1 )
+#define dhcpREPLY_OPCODE                                               ( 2 )
+#define dhcpADDRESS_TYPE_ETHERNET                              ( 1 )
+#define dhcpETHERNET_ADDRESS_LENGTH                            ( 6 )
+
+/* If a lease time is not received, use the default of two days. */
+/* 48 hours in ticks.  Can not use pdMS_TO_TICKS() as integer overflow can occur. */
+#define dhcpDEFAULT_LEASE_TIME                                 ( ( 48UL * 60UL * 60UL ) * configTICK_RATE_HZ )
+
+/* Don't allow the lease time to be too short. */
+#define dhcpMINIMUM_LEASE_TIME                                 ( pdMS_TO_TICKS( 60000UL ) )    /* 60 seconds in ticks. */
+
+/* Marks the end of the variable length options field in the DHCP packet. */
+#define dhcpOPTION_END_BYTE 0xffu
+
+/* Offset into a DHCP message at which the first byte of the options is
+located. */
+#define dhcpFIRST_OPTION_BYTE_OFFSET                   ( 0xf0 )
+
+/* Standard DHCP port numbers and magic cookie value. */
+#if( ipconfigBYTE_ORDER == pdFREERTOS_LITTLE_ENDIAN )
+       #define dhcpCLIENT_PORT 0x4400u
+       #define dhcpSERVER_PORT 0x4300u
+       #define dhcpCOOKIE              0x63538263ul
+       #define dhcpBROADCAST   0x0080u
+#else
+       #define dhcpCLIENT_PORT 0x0044u
+       #define dhcpSERVER_PORT 0x0043u
+       #define dhcpCOOKIE              0x63825363ul
+       #define dhcpBROADCAST   0x8000u
+#endif /* ipconfigBYTE_ORDER */
+
+#include "pack_struct_start.h"
+struct xDHCPMessage
+{
+       uint8_t ucOpcode;
+       uint8_t ucAddressType;
+       uint8_t ucAddressLength;
+       uint8_t ucHops;
+       uint32_t ulTransactionID;
+       uint16_t usElapsedTime;
+       uint16_t usFlags;
+       uint32_t ulClientIPAddress_ciaddr;
+       uint32_t ulYourIPAddress_yiaddr;
+       uint32_t ulServerIPAddress_siaddr;
+       uint32_t ulRelayAgentIPAddress_giaddr;
+       uint8_t ucClientHardwareAddress[ dhcpCLIENT_HARDWARE_ADDRESS_LENGTH ];
+       uint8_t ucServerHostName[ dhcpSERVER_HOST_NAME_LENGTH ];
+       uint8_t ucBootFileName[ dhcpBOOT_FILE_NAME_LENGTH ];
+       uint32_t ulDHCPCookie;
+       uint8_t ucFirstOptionByte;
+}
+#include "pack_struct_end.h"
+typedef struct xDHCPMessage DHCPMessage_t;
+
+/* DHCP state machine states. */
+typedef enum
+{
+       eWaitingSendFirstDiscover = 0,  /* Initial state.  Send a discover the first time it is called, and reset all timers. */
+       eWaitingOffer,                                  /* Either resend the discover, or, if the offer is forthcoming, send a request. */
+       eWaitingAcknowledge,                    /* Either resend the request. */
+       #if( ipconfigDHCP_FALL_BACK_AUTO_IP != 0 )
+               eGetLinkLayerAddress,           /* When DHCP didn't respond, try to obtain a LinkLayer address 168.254.x.x. */
+       #endif
+       eLeasedAddress,                                 /* Resend the request at the appropriate time to renew the lease. */
+       eNotUsingLeasedAddress                  /* DHCP failed, and a default IP address is being used. */
+} eDHCPState_t;
+
+/* Hold information in between steps in the DHCP state machine. */
+struct xDHCP_DATA
+{
+       uint32_t ulTransactionId;
+       uint32_t ulOfferedIPAddress;
+       uint32_t ulDHCPServerAddress;
+       uint32_t ulLeaseTime;
+       /* Hold information on the current timer state. */
+       TickType_t xDHCPTxTime;
+       TickType_t xDHCPTxPeriod;
+       /* Try both without and with the broadcast flag */
+       BaseType_t xUseBroadcast;
+       /* Maintains the DHCP state machine state. */
+       eDHCPState_t eDHCPState;
+       /* The UDP socket used for all incoming and outgoing DHCP traffic. */
+       Socket_t xDHCPSocket;
+};
+
+typedef struct xDHCP_DATA DHCPData_t;
+
+#if( ipconfigDHCP_FALL_BACK_AUTO_IP != 0 )
+       /* Define the Link Layer IP address: 169.254.x.x */
+       #define LINK_LAYER_ADDRESS_0    169
+       #define LINK_LAYER_ADDRESS_1    254
+
+       /* Define the netmask used: 255.255.0.0 */
+       #define LINK_LAYER_NETMASK_0    255
+       #define LINK_LAYER_NETMASK_1    255
+       #define LINK_LAYER_NETMASK_2    0
+       #define LINK_LAYER_NETMASK_3    0
+#endif
+
+
+/*
+ * Generate a DHCP discover message and send it on the DHCP socket.
+ */
+static void prvSendDHCPDiscover( void );
+
+/*
+ * Interpret message received on the DHCP socket.
+ */
+static BaseType_t prvProcessDHCPReplies( BaseType_t xExpectedMessageType );
+
+/*
+ * Generate a DHCP request packet, and send it on the DHCP socket.
+ */
+static void prvSendDHCPRequest( void );
+
+/*
+ * Prepare to start a DHCP transaction.  This initialises some state variables
+ * and creates the DHCP socket if necessary.
+ */
+static void prvInitialiseDHCP( void );
+
+/*
+ * Creates the part of outgoing DHCP messages that are common to all outgoing
+ * DHCP messages.
+ */
+static uint8_t *prvCreatePartDHCPMessage( struct freertos_sockaddr *pxAddress, BaseType_t xOpcode, const uint8_t * const pucOptionsArray, size_t *pxOptionsArraySize );
+
+/*
+ * Create the DHCP socket, if it has not been created already.
+ */
+static void prvCreateDHCPSocket( void );
+
+/*
+ * After DHCP has failed to answer, prepare everything to start searching
+ * for (trying-out) LinkLayer IP-addresses, using the random method: Send
+ * a gratuitous ARP request and wait if another device responds to it.
+ */
+#if( ipconfigDHCP_FALL_BACK_AUTO_IP != 0 )
+       static void prvPrepareLinkLayerIPLookUp( void );
+#endif
+
+/*-----------------------------------------------------------*/
+
+/* The next DHCP transaction Id to be used. */
+static DHCPData_t xDHCPData;
+
+/*-----------------------------------------------------------*/
+
+BaseType_t xIsDHCPSocket( Socket_t xSocket )
+{
+BaseType_t xReturn;
+
+       if( xDHCPData.xDHCPSocket == xSocket )
+       {
+               xReturn = pdTRUE;
+       }
+       else
+       {
+               xReturn = pdFALSE;
+       }
+
+       return xReturn;
+}
+/*-----------------------------------------------------------*/
+
+void vDHCPProcess( BaseType_t xReset )
+{
+BaseType_t xGivingUp = pdFALSE;
+#if( ipconfigUSE_DHCP_HOOK != 0 )
+       eDHCPCallbackAnswer_t eAnswer;
+#endif /* ipconfigUSE_DHCP_HOOK */
+
+       /* Is DHCP starting over? */
+       if( xReset != pdFALSE )
+       {
+               xDHCPData.eDHCPState = eWaitingSendFirstDiscover;
+       }
+
+       switch( xDHCPData.eDHCPState )
+       {
+               case eWaitingSendFirstDiscover :
+                       /* Ask the user if a DHCP discovery is required. */
+               #if( ipconfigUSE_DHCP_HOOK != 0 )
+                       eAnswer = xApplicationDHCPHook( eDHCPPhasePreDiscover, xNetworkAddressing.ulDefaultIPAddress );
+                       if( eAnswer == eDHCPContinue )
+               #endif  /* ipconfigUSE_DHCP_HOOK */
+                       {
+                               /* Initial state.  Create the DHCP socket, timer, etc. if they
+                               have not already been created. */
+                               prvInitialiseDHCP();
+
+                               /* See if prvInitialiseDHCP() has creates a socket. */
+                               if( xDHCPData.xDHCPSocket == NULL )
+                               {
+                                       xGivingUp = pdTRUE;
+                                       break;
+                               }
+
+                               *ipLOCAL_IP_ADDRESS_POINTER = 0UL;
+
+                               /* Send the first discover request. */
+                               if( xDHCPData.xDHCPSocket != NULL )
+                               {
+                                       xDHCPData.xDHCPTxTime = xTaskGetTickCount();
+                                       prvSendDHCPDiscover( );
+                                       xDHCPData.eDHCPState = eWaitingOffer;
+                               }
+                       }
+               #if( ipconfigUSE_DHCP_HOOK != 0 )
+                       else
+                       {
+                               if( eAnswer == eDHCPUseDefaults )
+                               {
+                                       memcpy( &xNetworkAddressing, &xDefaultAddressing, sizeof( xNetworkAddressing ) );
+                               }
+
+                               /* The user indicates that the DHCP process does not continue. */
+                               xGivingUp = pdTRUE;
+                       }
+               #endif  /* ipconfigUSE_DHCP_HOOK */
+                       break;
+
+               case eWaitingOffer :
+
+                       xGivingUp = pdFALSE;
+
+                       /* Look for offers coming in. */
+                       if( prvProcessDHCPReplies( dhcpMESSAGE_TYPE_OFFER ) == pdPASS )
+                       {
+                       #if( ipconfigUSE_DHCP_HOOK != 0 )
+                               /* Ask the user if a DHCP request is required. */
+                               eAnswer = xApplicationDHCPHook( eDHCPPhasePreRequest, xDHCPData.ulOfferedIPAddress );
+
+                               if( eAnswer == eDHCPContinue )
+                       #endif  /* ipconfigUSE_DHCP_HOOK */
+                               {
+                                       /* An offer has been made, the user wants to continue,
+                                       generate the request. */
+                                       xDHCPData.xDHCPTxTime = xTaskGetTickCount();
+                                       xDHCPData.xDHCPTxPeriod = dhcpINITIAL_DHCP_TX_PERIOD;
+                                       prvSendDHCPRequest( );
+                                       xDHCPData.eDHCPState = eWaitingAcknowledge;
+                                       break;
+                               }
+
+                       #if( ipconfigUSE_DHCP_HOOK != 0 )
+                               if( eAnswer == eDHCPUseDefaults )
+                               {
+                                       memcpy( &xNetworkAddressing, &xDefaultAddressing, sizeof( xNetworkAddressing ) );
+                               }
+
+                               /* The user indicates that the DHCP process does not continue. */
+                               xGivingUp = pdTRUE;
+                       #endif  /* ipconfigUSE_DHCP_HOOK */
+                       }
+                       else if( ( xTaskGetTickCount() - xDHCPData.xDHCPTxTime ) > xDHCPData.xDHCPTxPeriod )
+                       {
+                               /* It is time to send another Discover.  Increase the time
+                               period, and if it has not got to the point of giving up - send
+                               another discovery. */
+                               xDHCPData.xDHCPTxPeriod <<= 1;
+
+                               if( xDHCPData.xDHCPTxPeriod <= ipconfigMAXIMUM_DISCOVER_TX_PERIOD )
+                               {
+                                       if( xApplicationGetRandomNumber( &( xDHCPData.ulTransactionId ) ) != pdFALSE )
+                                       {
+                                               xDHCPData.xDHCPTxTime = xTaskGetTickCount( );
+                                               xDHCPData.xUseBroadcast = !xDHCPData.xUseBroadcast;
+                                               prvSendDHCPDiscover( );
+                                               FreeRTOS_debug_printf( ( "vDHCPProcess: timeout %lu ticks\n", xDHCPData.xDHCPTxPeriod ) );
+                                       }
+                                       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 ) );
+
+                                       #if( ipconfigDHCP_FALL_BACK_AUTO_IP != 0 )
+                                       {
+                                               /* Only use a fake Ack if the default IP address == 0x00
+                                               and the link local addressing is used.  Start searching
+                                               a free LinkLayer IP-address.  Next state will be
+                                               'eGetLinkLayerAddress'. */
+                                               prvPrepareLinkLayerIPLookUp();
+
+                                               /* Setting an IP address manually so set to not using
+                                               leased address mode. */
+                                               xDHCPData.eDHCPState = eGetLinkLayerAddress;
+                                       }
+                                       #else
+                                       {
+                                               xGivingUp = pdTRUE;
+                                       }
+                                       #endif /* ipconfigDHCP_FALL_BACK_AUTO_IP */
+                               }
+                       }
+                       break;
+
+               case eWaitingAcknowledge :
+
+                       /* Look for acks coming in. */
+                       if( prvProcessDHCPReplies( dhcpMESSAGE_TYPE_ACK ) == pdPASS )
+                       {
+                               FreeRTOS_debug_printf( ( "vDHCPProcess: acked %lxip\n", FreeRTOS_ntohl( xDHCPData.ulOfferedIPAddress ) ) );
+
+                               /* DHCP completed.  The IP address can now be used, and the
+                               timer set to the lease timeout time. */
+                               *ipLOCAL_IP_ADDRESS_POINTER = xDHCPData.ulOfferedIPAddress;
+
+                               /* Setting the 'local' broadcast address, something like
+                               '192.168.1.255'. */
+                               xNetworkAddressing.ulBroadcastAddress = ( xDHCPData.ulOfferedIPAddress & xNetworkAddressing.ulNetMask ) |  ~xNetworkAddressing.ulNetMask;
+                               xDHCPData.eDHCPState = eLeasedAddress;
+
+                               iptraceDHCP_SUCCEDEED( xDHCPData.ulOfferedIPAddress );
+
+                               /* DHCP failed, the default configured IP-address will be used
+                               Now call vIPNetworkUpCalls() to send the network-up event and
+                               start the ARP timer. */
+                               vIPNetworkUpCalls( );
+
+                               /* Close socket to ensure packets don't queue on it. */
+                               vSocketClose( xDHCPData.xDHCPSocket );
+                               xDHCPData.xDHCPSocket = NULL;
+
+                               if( xDHCPData.ulLeaseTime == 0UL )
+                               {
+                                       xDHCPData.ulLeaseTime = dhcpDEFAULT_LEASE_TIME;
+                               }
+                               else if( xDHCPData.ulLeaseTime < dhcpMINIMUM_LEASE_TIME )
+                               {
+                                       xDHCPData.ulLeaseTime = dhcpMINIMUM_LEASE_TIME;
+                               }
+                               else
+                               {
+                                       /* The lease time is already valid. */
+                               }
+
+                               /* Check for clashes. */
+                               vARPSendGratuitous();
+                               vIPReloadDHCPTimer( xDHCPData.ulLeaseTime );
+                       }
+                       else
+                       {
+                               /* Is it time to send another Discover? */
+                               if( ( xTaskGetTickCount() - xDHCPData.xDHCPTxTime ) > xDHCPData.xDHCPTxPeriod )
+                               {
+                                       /* Increase the time period, and if it has not got to the
+                                       point of giving up - send another request. */
+                                       xDHCPData.xDHCPTxPeriod <<= 1;
+
+                                       if( xDHCPData.xDHCPTxPeriod <= ipconfigMAXIMUM_DISCOVER_TX_PERIOD )
+                                       {
+                                               xDHCPData.xDHCPTxTime = xTaskGetTickCount();
+                                               prvSendDHCPRequest( );
+                                       }
+                                       else
+                                       {
+                                               /* Give up, start again. */
+                                               xDHCPData.eDHCPState = eWaitingSendFirstDiscover;
+                                       }
+                               }
+                       }
+                       break;
+
+       #if( ipconfigDHCP_FALL_BACK_AUTO_IP != 0 )
+               case eGetLinkLayerAddress:
+                       if( ( xTaskGetTickCount() - xDHCPData.xDHCPTxTime ) > xDHCPData.xDHCPTxPeriod )
+                       {
+                               if( xARPHadIPClash == pdFALSE )
+                               {
+                                       /* ARP OK. proceed. */
+                                       iptraceDHCP_SUCCEDEED( xDHCPData.ulOfferedIPAddress );
+
+                                       /* Auto-IP succeeded, the default configured IP-address will
+                                       be used.  Now call vIPNetworkUpCalls() to send the
+                                       network-up event and start the ARP timer. */
+                                       vIPNetworkUpCalls( );
+                                       xDHCPData.eDHCPState = eNotUsingLeasedAddress;
+                               }
+                               else
+                               {
+                                       /* ARP clashed - try another IP address. */
+                                       prvPrepareLinkLayerIPLookUp();
+
+                                       /* Setting an IP address manually so set to not using leased
+                                       address mode. */
+                                       xDHCPData.eDHCPState = eGetLinkLayerAddress;
+                               }
+                       }
+                       break;
+       #endif  /* ipconfigDHCP_FALL_BACK_AUTO_IP */
+
+               case eLeasedAddress :
+
+                       /* Resend the request at the appropriate time to renew the lease. */
+                       prvCreateDHCPSocket();
+
+                       if( xDHCPData.xDHCPSocket != NULL )
+                       {
+                               xDHCPData.xDHCPTxTime = xTaskGetTickCount();
+                               xDHCPData.xDHCPTxPeriod = dhcpINITIAL_DHCP_TX_PERIOD;
+                               prvSendDHCPRequest( );
+                               xDHCPData.eDHCPState = eWaitingAcknowledge;
+
+                               /* From now on, we should be called more often */
+                               vIPReloadDHCPTimer( dhcpINITIAL_TIMER_PERIOD );
+                       }
+                       break;
+
+               case eNotUsingLeasedAddress:
+
+                       vIPSetDHCPTimerEnableState( pdFALSE );
+                       break;
+
+               default:
+                       break;
+       }
+
+       if( xGivingUp != pdFALSE )
+       {
+               /* xGivingUp became true either because of a time-out, or because
+               xApplicationDHCPHook() returned another value than 'eDHCPContinue',
+               meaning that the conversion is canceled from here. */
+
+               /* Revert to static IP address. */
+               taskENTER_CRITICAL();
+               {
+                       *ipLOCAL_IP_ADDRESS_POINTER = xNetworkAddressing.ulDefaultIPAddress;
+                       iptraceDHCP_REQUESTS_FAILED_USING_DEFAULT_IP_ADDRESS( xNetworkAddressing.ulDefaultIPAddress );
+               }
+               taskEXIT_CRITICAL();
+
+               xDHCPData.eDHCPState = eNotUsingLeasedAddress;
+               vIPSetDHCPTimerEnableState( pdFALSE );
+
+               /* DHCP failed, the default configured IP-address will be used.  Now
+               call vIPNetworkUpCalls() to send the network-up event and start the ARP
+               timer. */
+               vIPNetworkUpCalls( );
+
+               /* Test if socket was indeed created. */
+               if( xDHCPData.xDHCPSocket != NULL )
+               {
+                       /* Close socket to ensure packets don't queue on it. */
+                       vSocketClose( xDHCPData.xDHCPSocket );
+                       xDHCPData.xDHCPSocket = NULL;
+               }
+       }
+}
+/*-----------------------------------------------------------*/
+
+static void prvCreateDHCPSocket( void )
+{
+struct freertos_sockaddr xAddress;
+BaseType_t xReturn;
+TickType_t xTimeoutTime = ( TickType_t ) 0;
+
+       /* Create the socket, if it has not already been created. */
+       if( xDHCPData.xDHCPSocket == NULL )
+       {
+               xDHCPData.xDHCPSocket = FreeRTOS_socket( FREERTOS_AF_INET, FREERTOS_SOCK_DGRAM, FREERTOS_IPPROTO_UDP );
+               if( xDHCPData.xDHCPSocket != FREERTOS_INVALID_SOCKET )
+               {
+
+                       /* Ensure the Rx and Tx timeouts are zero as the DHCP executes in the
+                       context of the IP task. */
+                       FreeRTOS_setsockopt( xDHCPData.xDHCPSocket, 0, FREERTOS_SO_RCVTIMEO, ( void * ) &xTimeoutTime, sizeof( TickType_t ) );
+                       FreeRTOS_setsockopt( xDHCPData.xDHCPSocket, 0, FREERTOS_SO_SNDTIMEO, ( void * ) &xTimeoutTime, sizeof( TickType_t ) );
+
+                       /* Bind to the standard DHCP client port. */
+                       xAddress.sin_port = ( uint16_t ) dhcpCLIENT_PORT;
+                       xReturn = vSocketBind( xDHCPData.xDHCPSocket, &xAddress, sizeof( xAddress ), pdFALSE );
+                       if( xReturn != 0 )
+                       {
+                               /* Binding failed, close the socket again. */
+                               vSocketClose( xDHCPData.xDHCPSocket );
+                               xDHCPData.xDHCPSocket = NULL;
+                       }
+               }
+               else
+               {
+                       /* Change to NULL for easier testing. */
+                       xDHCPData.xDHCPSocket = NULL;
+               }
+       }
+}
+/*-----------------------------------------------------------*/
+
+static void prvInitialiseDHCP( void )
+{
+       /* Initialise the parameters that will be set by the DHCP process. Per
+       https://www.ietf.org/rfc/rfc2131.txt, Transaction ID should be a random
+       value chosen by the client. */
+
+       /* Check for random number generator API failure. */
+       if( xApplicationGetRandomNumber( &( xDHCPData.ulTransactionId ) ) != pdFALSE )
+       {
+               xDHCPData.xUseBroadcast = 0;
+               xDHCPData.ulOfferedIPAddress = 0UL;
+               xDHCPData.ulDHCPServerAddress = 0UL;
+               xDHCPData.xDHCPTxPeriod = dhcpINITIAL_DHCP_TX_PERIOD;
+
+               /* Create the DHCP socket if it has not already been created. */
+               prvCreateDHCPSocket();
+               FreeRTOS_debug_printf( ( "prvInitialiseDHCP: start after %lu ticks\n", dhcpINITIAL_TIMER_PERIOD ) );
+               vIPReloadDHCPTimer( dhcpINITIAL_TIMER_PERIOD );
+       }
+       else
+       {
+               /* There was a problem with the randomiser. */
+       }
+}
+/*-----------------------------------------------------------*/
+
+static BaseType_t prvProcessDHCPReplies( BaseType_t xExpectedMessageType )
+{
+uint8_t *pucUDPPayload, *pucLastByte;
+struct freertos_sockaddr xClient;
+uint32_t xClientLength = sizeof( xClient );
+int32_t lBytes;
+DHCPMessage_t *pxDHCPMessage;
+uint8_t *pucByte, ucOptionCode, ucLength;
+uint32_t ulProcessed, ulParameter;
+BaseType_t xReturn = pdFALSE;
+const uint32_t ulMandatoryOptions = 2ul; /* DHCP server address, and the correct DHCP message type must be present in the options. */
+
+       lBytes = FreeRTOS_recvfrom( xDHCPData.xDHCPSocket, ( void * ) &pucUDPPayload, 0ul, FREERTOS_ZERO_COPY, &xClient, &xClientLength );
+
+       if( lBytes > 0 )
+       {
+               /* Map a DHCP structure onto the received data. */
+               pxDHCPMessage = ( DHCPMessage_t * ) ( pucUDPPayload );
+
+               /* Sanity check. */
+               if( ( lBytes >= sizeof( DHCPMessage_t ) ) &&
+                       ( pxDHCPMessage->ulDHCPCookie == ( uint32_t ) dhcpCOOKIE ) &&
+                       ( pxDHCPMessage->ucOpcode == ( uint8_t ) dhcpREPLY_OPCODE ) &&
+                       ( pxDHCPMessage->ulTransactionID == FreeRTOS_htonl( xDHCPData.ulTransactionId ) ) )
+               {
+                       if( memcmp( ( void * ) &( pxDHCPMessage->ucClientHardwareAddress ),
+                                               ( void * ) ipLOCAL_MAC_ADDRESS,
+                                               sizeof( MACAddress_t ) ) == 0 )
+                       {
+                               /* None of the essential options have been processed yet. */
+                               ulProcessed = 0ul;
+
+                               /* Walk through the options until the dhcpOPTION_END_BYTE byte
+                               is found, taking care not to walk off the end of the options. */
+                               pucByte = &( pxDHCPMessage->ucFirstOptionByte );
+                /* Maintain a pointer to the last valid byte (i.e. not the first
+                invalid byte). */
+                               pucLastByte = pucUDPPayload + lBytes - 1;
+
+                               while( pucByte <= pucLastByte )
+                               {
+                                       ucOptionCode = pucByte[ 0 ];
+                                       if( ucOptionCode == dhcpOPTION_END_BYTE )
+                                       {
+                                               /* Ready, the last byte has been seen. */
+                                               break;
+                                       }
+                                       if( ucOptionCode == dhcpZERO_PAD_OPTION_CODE )
+                                       {
+                                               /* The value zero is used as a pad byte,
+                                               it is not followed by a length byte. */
+                                               pucByte += 1;
+                                               continue;
+                                       }
+
+                                       /* Stop if the response is malformed. */
+                                       if( pucByte < pucLastByte )
+                                       {
+                        /* There are at least two bytes left. */
+                                               ucLength = pucByte[ 1 ];
+                                               pucByte += 2;
+
+                                               if( pucByte + ucLength > pucLastByte )
+                                               {
+                                                       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 )
+                                       {
+                                               case dhcpMESSAGE_TYPE_OPTION_CODE       :
+
+                                                       if( *pucByte == ( uint8_t ) xExpectedMessageType )
+                                                       {
+                                                               /* The message type is the message type the
+                                                               state machine is expecting. */
+                                                               ulProcessed++;
+                                                       }
+                                                       else if( *pucByte == ( uint8_t ) dhcpMESSAGE_TYPE_NACK )
+                                                       {
+                                                               if( xExpectedMessageType == ( BaseType_t ) dhcpMESSAGE_TYPE_ACK )
+                                                               {
+                                                                       /* Start again. */
+                                                                       xDHCPData.eDHCPState = eWaitingSendFirstDiscover;
+                                                               }
+                                                       }
+                                                       else
+                                                       {
+                                                               /* Don't process other message types. */
+                                                       }
+                                                       break;
+
+                                               case dhcpSUBNET_MASK_OPTION_CODE :
+
+                                                       if( ucLength == sizeof( uint32_t ) )
+                                                       {
+                                                               xNetworkAddressing.ulNetMask = ulParameter;
+                                                       }
+                                                       break;
+
+                                               case dhcpGATEWAY_OPTION_CODE :
+
+                                                       if( ucLength == sizeof( uint32_t ) )
+                                                       {
+                                                               /* ulProcessed is not incremented in this case
+                                                               because the gateway is not essential. */
+                                                               xNetworkAddressing.ulGatewayAddress = ulParameter;
+                                                       }
+                                                       break;
+
+                                               case dhcpDNS_SERVER_OPTIONS_CODE :
+
+                                                       /* ulProcessed is not incremented in this case
+                                                       because the DNS server is not essential.  Only the
+                                                       first DNS server address is taken. */
+                                                       xNetworkAddressing.ulDNSServerAddress = ulParameter;
+                                                       break;
+
+                                               case dhcpSERVER_IP_ADDRESS_OPTION_CODE :
+
+                                                       if( ucLength == sizeof( uint32_t ) )
+                                                       {
+                                                               if( xExpectedMessageType == ( BaseType_t ) dhcpMESSAGE_TYPE_OFFER )
+                                                               {
+                                                                       /* Offers state the replying server. */
+                                                                       ulProcessed++;
+                                                                       xDHCPData.ulDHCPServerAddress = ulParameter;
+                                                               }
+                                                               else
+                                                               {
+                                                                       /* The ack must come from the expected server. */
+                                                                       if( xDHCPData.ulDHCPServerAddress == ulParameter )
+                                                                       {
+                                                                               ulProcessed++;
+                                                                       }
+                                                               }
+                                                       }
+                                                       break;
+
+                                               case dhcpLEASE_TIME_OPTION_CODE :
+
+                                                       if( ucLength == sizeof( xDHCPData.ulLeaseTime ) )
+                                                       {
+                                                               /* ulProcessed is not incremented in this case
+                                                               because the lease time is not essential. */
+                                                               /* The DHCP parameter is in seconds, convert
+                                                               to host-endian format. */
+                                                               xDHCPData.ulLeaseTime = FreeRTOS_ntohl( ulParameter );
+
+                                                               /* Divide the lease time by two to ensure a
+                                                               renew request is sent before the lease actually
+                                                               expires. */
+                                                               xDHCPData.ulLeaseTime >>= 1UL;
+
+                                                               /* Multiply with configTICK_RATE_HZ to get clock
+                                                               ticks. */
+                                                               xDHCPData.ulLeaseTime = configTICK_RATE_HZ * xDHCPData.ulLeaseTime;
+                                                       }
+                                                       break;
+
+                                               default :
+
+                                                       /* Not interested in this field. */
+
+                                                       break;
+                                       }
+
+                                       /* Jump over the data to find the next option code. */
+                                       if( ucLength == 0u )
+                                       {
+                                               break;
+                                       }
+                                       else
+                                       {
+                                               pucByte += ucLength;
+                                       }
+                               }
+
+                               /* Were all the mandatory options received? */
+                               if( ulProcessed >= ulMandatoryOptions )
+                               {
+                                       /* HT:endian: used to be network order */
+                                       xDHCPData.ulOfferedIPAddress = pxDHCPMessage->ulYourIPAddress_yiaddr;
+                                       FreeRTOS_printf( ( "vDHCPProcess: offer %lxip\n", FreeRTOS_ntohl( xDHCPData.ulOfferedIPAddress ) ) );
+                                       xReturn = pdPASS;
+                               }
+                       }
+               }
+
+               FreeRTOS_ReleaseUDPPayloadBuffer( ( void * ) pucUDPPayload );
+       }
+
+       return xReturn;
+}
+/*-----------------------------------------------------------*/
+
+static uint8_t *prvCreatePartDHCPMessage( struct freertos_sockaddr *pxAddress, BaseType_t xOpcode, const uint8_t * const pucOptionsArray, size_t *pxOptionsArraySize )
+{
+DHCPMessage_t *pxDHCPMessage;
+size_t xRequiredBufferSize = sizeof( DHCPMessage_t ) + *pxOptionsArraySize;
+uint8_t *pucUDPPayloadBuffer;
+
+#if( ipconfigDHCP_REGISTER_HOSTNAME == 1 )
+       const char *pucHostName = pcApplicationHostnameHook ();
+       size_t xNameLength = strlen( pucHostName );
+       uint8_t *pucPtr;
+
+       xRequiredBufferSize += ( 2 + xNameLength );
+#endif
+
+       /* Get a buffer.  This uses a maximum delay, but the delay will be capped
+       to ipconfigUDP_MAX_SEND_BLOCK_TIME_TICKS so the return value still needs to
+       be test. */
+       do
+       {
+       } while( ( pucUDPPayloadBuffer = ( uint8_t * ) FreeRTOS_GetUDPPayloadBuffer( xRequiredBufferSize, portMAX_DELAY ) ) == NULL );
+
+       pxDHCPMessage = ( DHCPMessage_t * ) pucUDPPayloadBuffer;
+
+       /* Most fields need to be zero. */
+       memset( ( void * ) pxDHCPMessage, 0x00, sizeof( DHCPMessage_t ) );
+
+       /* Create the message. */
+       pxDHCPMessage->ucOpcode = ( uint8_t ) xOpcode;
+       pxDHCPMessage->ucAddressType = ( uint8_t ) dhcpADDRESS_TYPE_ETHERNET;
+       pxDHCPMessage->ucAddressLength = ( uint8_t ) dhcpETHERNET_ADDRESS_LENGTH;
+       pxDHCPMessage->ulTransactionID = FreeRTOS_htonl( xDHCPData.ulTransactionId );
+       pxDHCPMessage->ulDHCPCookie = ( uint32_t ) dhcpCOOKIE;
+       if( xDHCPData.xUseBroadcast != pdFALSE )
+       {
+               pxDHCPMessage->usFlags = ( uint16_t ) dhcpBROADCAST;
+       }
+       else
+       {
+               pxDHCPMessage->usFlags = 0u;
+       }
+
+       memcpy( ( void * ) &( pxDHCPMessage->ucClientHardwareAddress[ 0 ] ), ( void * ) ipLOCAL_MAC_ADDRESS, sizeof( MACAddress_t ) );
+
+       /* Copy in the const part of the options options. */
+       memcpy( ( void * ) &( pucUDPPayloadBuffer[ dhcpFIRST_OPTION_BYTE_OFFSET ] ), ( void * ) pucOptionsArray, *pxOptionsArraySize );
+
+       #if( ipconfigDHCP_REGISTER_HOSTNAME == 1 )
+       {
+               /* With this option, the hostname can be registered as well which makes
+               it easier to lookup a device in a router's list of DHCP clients. */
+
+               /* Point to where the OPTION_END was stored to add data. */
+               pucPtr = &( pucUDPPayloadBuffer[ dhcpFIRST_OPTION_BYTE_OFFSET + ( *pxOptionsArraySize - 1 ) ] );
+               pucPtr[ 0 ] = dhcpDNS_HOSTNAME_OPTIONS_CODE;
+               pucPtr[ 1 ] = ( uint8_t ) xNameLength;
+               memcpy( ( void *) ( pucPtr + 2 ), pucHostName, xNameLength );
+               pucPtr[ 2 + xNameLength ] = dhcpOPTION_END_BYTE;
+               *pxOptionsArraySize += ( 2 + xNameLength );
+       }
+       #endif
+
+       /* Map in the client identifier. */
+       memcpy( ( void * ) &( pucUDPPayloadBuffer[ dhcpFIRST_OPTION_BYTE_OFFSET + dhcpCLIENT_IDENTIFIER_OFFSET ] ),
+               ( void * ) ipLOCAL_MAC_ADDRESS, sizeof( MACAddress_t ) );
+
+       /* Set the addressing. */
+       pxAddress->sin_addr = ipBROADCAST_IP_ADDRESS;
+       pxAddress->sin_port = ( uint16_t ) dhcpSERVER_PORT;
+
+       return pucUDPPayloadBuffer;
+}
+/*-----------------------------------------------------------*/
+
+static void prvSendDHCPRequest( void )
+{
+uint8_t *pucUDPPayloadBuffer;
+struct freertos_sockaddr xAddress;
+static const uint8_t ucDHCPRequestOptions[] =
+{
+       /* Do not change the ordering without also changing
+       dhcpCLIENT_IDENTIFIER_OFFSET, dhcpREQUESTED_IP_ADDRESS_OFFSET and
+       dhcpDHCP_SERVER_IP_ADDRESS_OFFSET. */
+       dhcpMESSAGE_TYPE_OPTION_CODE, 1, dhcpMESSAGE_TYPE_REQUEST,              /* Message type option. */
+       dhcpCLIENT_IDENTIFIER_OPTION_CODE, 6, 0, 0, 0, 0, 0, 0,                 /* Client identifier. */
+       dhcpREQUEST_IP_ADDRESS_OPTION_CODE, 4, 0, 0, 0, 0,                              /* The IP address being requested. */
+       dhcpSERVER_IP_ADDRESS_OPTION_CODE, 4, 0, 0, 0, 0,                               /* The IP address of the DHCP server. */
+       dhcpOPTION_END_BYTE
+};
+size_t xOptionsLength = sizeof( ucDHCPRequestOptions );
+
+       pucUDPPayloadBuffer = prvCreatePartDHCPMessage( &xAddress, dhcpREQUEST_OPCODE, ucDHCPRequestOptions, &xOptionsLength );
+
+       /* Copy in the IP address being requested. */
+       memcpy( ( void * ) &( pucUDPPayloadBuffer[ dhcpFIRST_OPTION_BYTE_OFFSET + dhcpREQUESTED_IP_ADDRESS_OFFSET ] ),
+               ( void * ) &( xDHCPData.ulOfferedIPAddress ), sizeof( xDHCPData.ulOfferedIPAddress ) );
+
+       /* Copy in the address of the DHCP server being used. */
+       memcpy( ( void * ) &( pucUDPPayloadBuffer[ dhcpFIRST_OPTION_BYTE_OFFSET + dhcpDHCP_SERVER_IP_ADDRESS_OFFSET ] ),
+               ( void * ) &( xDHCPData.ulDHCPServerAddress ), sizeof( xDHCPData.ulDHCPServerAddress ) );
+
+       FreeRTOS_debug_printf( ( "vDHCPProcess: reply %lxip\n", FreeRTOS_ntohl( xDHCPData.ulOfferedIPAddress ) ) );
+       iptraceSENDING_DHCP_REQUEST();
+
+       /* 'ucFirstOptionByte' is part of DHCP message struct, so subtract one byte. */
+       if( FreeRTOS_sendto( xDHCPData.xDHCPSocket, pucUDPPayloadBuffer, ( sizeof( DHCPMessage_t ) + xOptionsLength - 1 ), FREERTOS_ZERO_COPY, &xAddress, sizeof( xAddress ) ) == 0 )
+       {
+               /* The packet was not successfully queued for sending and must be
+               returned to the stack. */
+               FreeRTOS_ReleaseUDPPayloadBuffer( pucUDPPayloadBuffer );
+       }
+}
+/*-----------------------------------------------------------*/
+
+static void prvSendDHCPDiscover( void )
+{
+uint8_t *pucUDPPayloadBuffer;
+struct freertos_sockaddr xAddress;
+static const uint8_t ucDHCPDiscoverOptions[] =
+{
+       /* Do not change the ordering without also changing dhcpCLIENT_IDENTIFIER_OFFSET. */
+       dhcpMESSAGE_TYPE_OPTION_CODE, 1, dhcpMESSAGE_TYPE_DISCOVER,                                     /* Message type option. */
+       dhcpCLIENT_IDENTIFIER_OPTION_CODE, 6, 0, 0, 0, 0, 0, 0,                                         /* Client identifier. */
+       dhcpPARAMETER_REQUEST_OPTION_CODE, 3, dhcpSUBNET_MASK_OPTION_CODE, dhcpGATEWAY_OPTION_CODE, dhcpDNS_SERVER_OPTIONS_CODE,        /* Parameter request option. */
+       dhcpOPTION_END_BYTE
+};
+size_t xOptionsLength = sizeof( ucDHCPDiscoverOptions );
+
+       pucUDPPayloadBuffer = prvCreatePartDHCPMessage( &xAddress, dhcpREQUEST_OPCODE, ucDHCPDiscoverOptions, &xOptionsLength );
+
+       FreeRTOS_debug_printf( ( "vDHCPProcess: discover\n" ) );
+       iptraceSENDING_DHCP_DISCOVER();
+
+       /* 'ucFirstOptionByte' is part of DHCP message struct, so subtract one byte. */
+       if( FreeRTOS_sendto( xDHCPData.xDHCPSocket, pucUDPPayloadBuffer, ( sizeof( DHCPMessage_t ) + xOptionsLength - 1 ), FREERTOS_ZERO_COPY, &xAddress, sizeof( xAddress ) ) == 0 )
+       {
+               /* The packet was not successfully queued for sending and must be
+               returned to the stack. */
+               FreeRTOS_ReleaseUDPPayloadBuffer( pucUDPPayloadBuffer );
+       }
+}
+/*-----------------------------------------------------------*/
+
+#if( ipconfigDHCP_FALL_BACK_AUTO_IP != 0 )
+
+       static void prvPrepareLinkLayerIPLookUp( void )
+       {
+       uint8_t ucLinkLayerIPAddress[ 2 ];
+       uint32_t ulNumbers[ 2 ];
+
+               /* After DHCP has failed to answer, prepare everything to start
+               trying-out LinkLayer IP-addresses, using the random method. */
+               xDHCPData.xDHCPTxTime = xTaskGetTickCount();
+
+               xApplicationGetRandomNumber( &( ulNumbers[ 0 ] ) );
+               xApplicationGetRandomNumber( &( ulNumbers[ 1 ] ) );
+               ucLinkLayerIPAddress[ 0 ] = ( uint8_t )1 + ( uint8_t )( ulNumbers[ 0 ] % 0xFDu );               /* get value 1..254 for IP-address 3rd byte of IP address to try. */
+               ucLinkLayerIPAddress[ 1 ] = ( uint8_t )1 + ( uint8_t )( ulNumbers[ 1 ] % 0xFDu );               /* get value 1..254 for IP-address 4th byte of IP address to try. */
+
+               xNetworkAddressing.ulGatewayAddress = FreeRTOS_htonl( 0xA9FE0203 );
+
+               /* prepare xDHCPData with data to test. */
+               xDHCPData.ulOfferedIPAddress =
+                       FreeRTOS_inet_addr_quick( LINK_LAYER_ADDRESS_0, LINK_LAYER_ADDRESS_1, ucLinkLayerIPAddress[ 0 ], ucLinkLayerIPAddress[ 1 ] );
+
+               xDHCPData.ulLeaseTime = dhcpDEFAULT_LEASE_TIME;  /*  don't care about lease time. just put anything. */
+
+               xNetworkAddressing.ulNetMask =
+                       FreeRTOS_inet_addr_quick( LINK_LAYER_NETMASK_0, LINK_LAYER_NETMASK_1, LINK_LAYER_NETMASK_2, LINK_LAYER_NETMASK_3 );
+
+               /* DHCP completed.  The IP address can now be used, and the
+               timer set to the lease timeout time. */
+               *ipLOCAL_IP_ADDRESS_POINTER = xDHCPData.ulOfferedIPAddress;
+
+               /* Setting the 'local' broadcast address, something like 192.168.1.255' */
+               xNetworkAddressing.ulBroadcastAddress = ( xDHCPData.ulOfferedIPAddress & xNetworkAddressing.ulNetMask ) |  ~xNetworkAddressing.ulNetMask;
+
+               /* Close socket to ensure packets don't queue on it. not needed anymore as DHCP failed. but still need timer for ARP testing. */
+               if( xDHCPData.xDHCPSocket != NULL )
+               {
+                       /* Close socket to ensure packets don't queue on it. */
+                       vSocketClose( xDHCPData.xDHCPSocket );
+                   xDHCPData.xDHCPSocket = NULL;
+               }
+
+               xApplicationGetRandomNumber( &( ulNumbers[ 0 ] ) );
+               xDHCPData.xDHCPTxPeriod = pdMS_TO_TICKS( 3000ul + ( ulNumbers[ 0 ] & 0x3ffuL ) ); /*  do ARP test every (3 + 0-1024mS) seconds. */
+
+               xARPHadIPClash = pdFALSE;          /* reset flag that shows if have ARP clash. */
+               vARPSendGratuitous();
+       }
+
+#endif /* ipconfigDHCP_FALL_BACK_AUTO_IP */
+/*-----------------------------------------------------------*/
+
+#endif /* ipconfigUSE_DHCP != 0 */
+
+
index 43b246d26dd9be2d5aba76625fa103621dbed623..d4f167af113ae3709bd1775b2fb22dd6508474a8 100644 (file)
-/*\r
- * FreeRTOS+TCP V2.2.0\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://aws.amazon.com/freertos\r
- * http://www.FreeRTOS.org\r
- */\r
-\r
-/* Standard includes. */\r
-#include <stdint.h>\r
-\r
-/* FreeRTOS includes. */\r
-#include "FreeRTOS.h"\r
-#include "task.h"\r
-#include "queue.h"\r
-#include "list.h"\r
-#include "semphr.h"\r
-\r
-/* FreeRTOS+TCP includes. */\r
-#include "FreeRTOS_IP.h"\r
-#include "FreeRTOS_Sockets.h"\r
-#include "FreeRTOS_IP_Private.h"\r
-#include "FreeRTOS_UDP_IP.h"\r
-#include "FreeRTOS_DNS.h"\r
-#include "NetworkBufferManagement.h"\r
-#include "NetworkInterface.h"\r
-#include "IPTraceMacroDefaults.h"\r
-\r
-/* Exclude the entire file if DNS is not enabled. */\r
-#if( ipconfigUSE_DNS != 0 )\r
-\r
-#if( ipconfigBYTE_ORDER == pdFREERTOS_LITTLE_ENDIAN )\r
-       #define dnsDNS_PORT                             0x3500u\r
-       #define dnsONE_QUESTION                 0x0100u\r
-       #define dnsOUTGOING_FLAGS               0x0001u     /* Standard query. */\r
-       #define dnsRX_FLAGS_MASK                0x0f80u     /* The bits of interest in the flags field of incoming DNS messages. */\r
-       #define dnsEXPECTED_RX_FLAGS    0x0080u     /* Should be a response, without any errors. */\r
-#else\r
-       #define dnsDNS_PORT                             0x0035u\r
-       #define dnsONE_QUESTION                 0x0001u\r
-       #define dnsOUTGOING_FLAGS               0x0100u     /* Standard query. */\r
-       #define dnsRX_FLAGS_MASK                0x800fu     /* The bits of interest in the flags field of incoming DNS messages. */\r
-       #define dnsEXPECTED_RX_FLAGS    0x8000u     /* Should be a response, without any errors. */\r
-\r
-#endif /* ipconfigBYTE_ORDER */\r
-\r
-/* The maximum number of times a DNS request should be sent out if a response\r
-is not received, before giving up. */\r
-#ifndef ipconfigDNS_REQUEST_ATTEMPTS\r
-       #define ipconfigDNS_REQUEST_ATTEMPTS    5\r
-#endif\r
-\r
-/* If the top two bits in the first character of a name field are set then the\r
-name field is an offset to the string, rather than the string itself. */\r
-#define dnsNAME_IS_OFFSET                                       ( ( uint8_t ) 0xc0 )\r
-\r
-/* NBNS flags. */\r
-#define dnsNBNS_FLAGS_RESPONSE                          0x8000u\r
-#define dnsNBNS_FLAGS_OPCODE_MASK                       0x7800u\r
-#define dnsNBNS_FLAGS_OPCODE_QUERY                      0x0000u\r
-#define dnsNBNS_FLAGS_OPCODE_REGISTRATION       0x2800u\r
-\r
-/* Host types. */\r
-#define dnsTYPE_A_HOST                                          0x01u\r
-#define dnsCLASS_IN                                                     0x01u\r
-\r
-/* LLMNR constants. */\r
-#define dnsLLMNR_TTL_VALUE                                      300000uL\r
-#define dnsLLMNR_FLAGS_IS_REPONSE                       0x8000u\r
-\r
-/* NBNS constants. */\r
-#define dnsNBNS_TTL_VALUE                                       3600uL /* 1 hour valid */\r
-#define dnsNBNS_TYPE_NET_BIOS                           0x0020u\r
-#define dnsNBNS_CLASS_IN                                        0x01u\r
-#define dnsNBNS_NAME_FLAGS                                      0x6000u\r
-#define dnsNBNS_ENCODED_NAME_LENGTH                     32\r
-\r
-/* If the queried NBNS name matches with the device's name,\r
-the query will be responded to with these flags: */\r
-#define dnsNBNS_QUERY_RESPONSE_FLAGS            ( 0x8500u )\r
-\r
-/* Flag DNS parsing errors in situations where an IPv4 address is the return\r
-type. */\r
-#define dnsPARSE_ERROR                                          0uL\r
-\r
-/*\r
- * Create a socket and bind it to the standard DNS port number.  Return the\r
- * the created socket - or NULL if the socket could not be created or bound.\r
- */\r
-static Socket_t prvCreateDNSSocket( void );\r
-\r
-/*\r
- * Create the DNS message in the zero copy buffer passed in the first parameter.\r
- */\r
-static size_t prvCreateDNSMessage( uint8_t *pucUDPPayloadBuffer,\r
-                                                                  const char *pcHostName,\r
-                                                                  TickType_t uxIdentifier );\r
-\r
-/*\r
- * Simple routine that jumps over the NAME field of a resource record.\r
- */\r
-static uint8_t * prvSkipNameField( uint8_t *pucByte,\r
-                                                                  size_t uxSourceLen );\r
-\r
-/*\r
- * Process a response packet from a DNS server.\r
- * The parameter 'xExpected' indicates whether the identifier in the reply\r
- * was expected, and thus if the DNS cache may be updated with the reply.\r
- */\r
-static uint32_t prvParseDNSReply( uint8_t *pucUDPPayloadBuffer,\r
-                                                                 size_t uxBufferLength,\r
-                                                                 BaseType_t xExpected );\r
-\r
-/*\r
- * Prepare and send a message to a DNS server.  'uxReadTimeOut_ticks' will be passed as\r
- * zero, in case the user has supplied a call-back function.\r
- */\r
-static uint32_t prvGetHostByName( const char *pcHostName,\r
-                                                                 TickType_t uxIdentifier,\r
-                                                                 TickType_t uxReadTimeOut_ticks );\r
-\r
-/*\r
- * The NBNS and the LLMNR protocol share this reply function.\r
- */\r
-#if( ( ipconfigUSE_NBNS == 1 ) || ( ipconfigUSE_LLMNR == 1 ) )\r
-       static void prvReplyDNSMessage( NetworkBufferDescriptor_t *pxNetworkBuffer,\r
-                                                                       BaseType_t lNetLength );\r
-#endif\r
-\r
-#if( ipconfigUSE_NBNS == 1 )\r
-       static portINLINE void prvTreatNBNS( uint8_t *pucUDPPayloadBuffer,\r
-                                                                                size_t uxBufferLength,\r
-                                                                                uint32_t ulIPAddress );\r
-#endif /* ipconfigUSE_NBNS */\r
-\r
-\r
-#if( ipconfigUSE_DNS_CACHE == 1 ) || ( ipconfigDNS_USE_CALLBACKS == 1 )\r
-       static uint8_t * prvReadNameField( uint8_t *pucByte,\r
-                                                                          size_t uxSourceLen,\r
-                                                                          char *pcName,\r
-                                                                          size_t uxLen );\r
-#endif /* ipconfigUSE_DNS_CACHE || ipconfigDNS_USE_CALLBACKS */\r
-\r
-#if( ipconfigUSE_DNS_CACHE == 1 )\r
-       static void prvProcessDNSCache( const char *pcName,\r
-                                                                       uint32_t *pulIP,\r
-                                                                       uint32_t ulTTL,\r
-                                                                       BaseType_t xLookUp );\r
-\r
-       typedef struct xDNS_CACHE_TABLE_ROW\r
-       {\r
-               uint32_t ulIPAddress;                         /* The IP address of an ARP cache entry. */\r
-               char pcName[ ipconfigDNS_CACHE_NAME_LENGTH ]; /* The name of the host */\r
-               uint32_t ulTTL;                               /* Time-to-Live (in seconds) from the DNS server. */\r
-               uint32_t ulTimeWhenAddedInSeconds;\r
-       } DNSCacheRow_t;\r
-\r
-       static DNSCacheRow_t xDNSCache[ ipconfigDNS_CACHE_ENTRIES ];\r
-\r
-       void FreeRTOS_dnsclear()\r
-       {\r
-               memset( xDNSCache, 0x0, sizeof( xDNSCache ) );\r
-       }\r
-#endif /* ipconfigUSE_DNS_CACHE == 1 */\r
-\r
-#if( ipconfigUSE_LLMNR == 1 )\r
-       const MACAddress_t xLLMNR_MacAdress = { { 0x01, 0x00, 0x5e, 0x00, 0x00, 0xfc } };\r
-#endif /* ipconfigUSE_LLMNR == 1 */\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-#include "pack_struct_start.h"\r
-struct xDNSMessage\r
-{\r
-       uint16_t usIdentifier;\r
-       uint16_t usFlags;\r
-       uint16_t usQuestions;\r
-       uint16_t usAnswers;\r
-       uint16_t usAuthorityRRs;\r
-       uint16_t usAdditionalRRs;\r
-}\r
-#include "pack_struct_end.h"\r
-typedef struct xDNSMessage DNSMessage_t;\r
-\r
-/* A DNS query consists of a header, as described in 'struct xDNSMessage'\r
-It is followed by 1 or more queries, each one consisting of a name and a tail,\r
-with two fields: type and class\r
-*/\r
-#include "pack_struct_start.h"\r
-struct xDNSTail\r
-{\r
-       uint16_t usType;\r
-       uint16_t usClass;\r
-}\r
-#include "pack_struct_end.h"\r
-typedef struct xDNSTail DNSTail_t;\r
-\r
-/* DNS answer record header. */\r
-#include "pack_struct_start.h"\r
-struct xDNSAnswerRecord\r
-{\r
-       uint16_t usType;\r
-       uint16_t usClass;\r
-       uint32_t ulTTL;\r
-       uint16_t usDataLength;\r
-}\r
-#include "pack_struct_end.h"\r
-typedef struct xDNSAnswerRecord DNSAnswerRecord_t;\r
-\r
-#if( ipconfigUSE_LLMNR == 1 )\r
-\r
-       #include "pack_struct_start.h"\r
-       struct xLLMNRAnswer\r
-       {\r
-               uint8_t ucNameCode;\r
-               uint8_t ucNameOffset;   /* The name is not repeated in the answer, only the offset is given with "0xc0 <offs>" */\r
-               uint16_t usType;\r
-               uint16_t usClass;\r
-               uint32_t ulTTL;\r
-               uint16_t usDataLength;\r
-               uint32_t ulIPAddress;\r
-       }\r
-       #include "pack_struct_end.h"\r
-       typedef struct xLLMNRAnswer LLMNRAnswer_t;\r
-\r
-#endif /* ipconfigUSE_LLMNR == 1 */\r
-\r
-#if( ipconfigUSE_NBNS == 1 )\r
-\r
-       #include "pack_struct_start.h"\r
-       struct xNBNSRequest\r
-       {\r
-               uint16_t usRequestId;\r
-               uint16_t usFlags;\r
-               uint16_t ulRequestCount;\r
-               uint16_t usAnswerRSS;\r
-               uint16_t usAuthRSS;\r
-               uint16_t usAdditionalRSS;\r
-               uint8_t ucNameSpace;\r
-               uint8_t ucName[ dnsNBNS_ENCODED_NAME_LENGTH ];\r
-               uint8_t ucNameZero;\r
-               uint16_t usType;\r
-               uint16_t usClass;\r
-       }\r
-       #include "pack_struct_end.h"\r
-       typedef struct xNBNSRequest NBNSRequest_t;\r
-\r
-       #include "pack_struct_start.h"\r
-       struct xNBNSAnswer\r
-       {\r
-               uint16_t usType;\r
-               uint16_t usClass;\r
-               uint32_t ulTTL;\r
-               uint16_t usDataLength;\r
-               uint16_t usNbFlags;     /* NetBIOS flags 0x6000 : IP-address, big-endian */\r
-               uint32_t ulIPAddress;\r
-       }\r
-       #include "pack_struct_end.h"\r
-       typedef struct xNBNSAnswer NBNSAnswer_t;\r
-\r
-       #endif /* ipconfigUSE_NBNS == 1 */\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_DNS_CACHE == 1 )\r
-       uint32_t FreeRTOS_dnslookup( const char *pcHostName )\r
-       {\r
-       uint32_t ulIPAddress = 0uL;\r
-\r
-               prvProcessDNSCache( pcHostName, &ulIPAddress, 0, pdTRUE );\r
-               return ulIPAddress;\r
-       }\r
-#endif /* ipconfigUSE_DNS_CACHE == 1 */\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigDNS_USE_CALLBACKS == 1 )\r
-\r
-       typedef struct xDNS_Callback\r
-       {\r
-               TickType_t uxRemaningTime;              /* Timeout in ms */\r
-               FOnDNSEvent pCallbackFunction;  /* Function to be called when the address has been found or when a timeout has beeen reached */\r
-               TimeOut_t uxTimeoutState;\r
-               void *pvSearchID;\r
-               struct xLIST_ITEM xListItem;\r
-               char pcName[ 1 ];\r
-       } DNSCallback_t;\r
-\r
-       static List_t xCallbackList;\r
-\r
-       /* Define FreeRTOS_gethostbyname() as a normal blocking call. */\r
-       uint32_t FreeRTOS_gethostbyname( const char *pcHostName )\r
-       {\r
-               return FreeRTOS_gethostbyname_a( pcHostName, ( FOnDNSEvent ) NULL, ( void * ) NULL, 0 );\r
-       }\r
-       /*-----------------------------------------------------------*/\r
-\r
-       /* Initialise the list of call-back structures. */\r
-       void vDNSInitialise( void );\r
-       void vDNSInitialise( void )\r
-       {\r
-               vListInitialise( &xCallbackList );\r
-       }\r
-       /*-----------------------------------------------------------*/\r
-\r
-       /* Iterate through the list of call-back structures and remove\r
-       old entries which have reached a timeout.\r
-       As soon as the list hase become empty, the DNS timer will be stopped\r
-       In case pvSearchID is supplied, the user wants to cancel a DNS request\r
-       */\r
-       void vDNSCheckCallBack( void *pvSearchID );\r
-       void vDNSCheckCallBack( void *pvSearchID )\r
-       {\r
-       const ListItem_t *pxIterator;\r
-       const MiniListItem_t * xEnd = ( const MiniListItem_t * ) listGET_END_MARKER( &xCallbackList );\r
-\r
-               vTaskSuspendAll();\r
-               {\r
-                       for( pxIterator  = ( const ListItem_t * ) listGET_NEXT( xEnd );\r
-                                pxIterator != ( const ListItem_t * ) xEnd;\r
-                                )\r
-                       {\r
-                       DNSCallback_t *pxCallback = ( DNSCallback_t * ) listGET_LIST_ITEM_OWNER( pxIterator );\r
-\r
-                               /* Move to the next item because we might remove this item */\r
-                               pxIterator = ( const ListItem_t * ) listGET_NEXT( pxIterator );\r
-\r
-                               if( ( pvSearchID != NULL ) && ( pvSearchID == pxCallback->pvSearchID ) )\r
-                               {\r
-                                       uxListRemove( &pxCallback->xListItem );\r
-                                       vPortFree( pxCallback );\r
-                               }\r
-                               else if( xTaskCheckForTimeOut( &pxCallback->uxTimeoutState, &pxCallback->uxRemaningTime ) != pdFALSE )\r
-                               {\r
-                                       pxCallback->pCallbackFunction( pxCallback->pcName, pxCallback->pvSearchID, 0 );\r
-                                       uxListRemove( &pxCallback->xListItem );\r
-                                       vPortFree( ( void * ) pxCallback );\r
-                               }\r
-                       }\r
-               }\r
-               xTaskResumeAll();\r
-\r
-               if( listLIST_IS_EMPTY( &xCallbackList ) )\r
-               {\r
-                       vIPSetDnsTimerEnableState( pdFALSE );\r
-               }\r
-       }\r
-       /*-----------------------------------------------------------*/\r
-\r
-       void FreeRTOS_gethostbyname_cancel( void *pvSearchID )\r
-       {\r
-               /* _HT_ Should better become a new API call to have the IP-task remove the callback */\r
-               vDNSCheckCallBack( pvSearchID );\r
-       }\r
-       /*-----------------------------------------------------------*/\r
-\r
-       /* FreeRTOS_gethostbyname_a() was called along with callback parameters.\r
-       Store them in a list for later reference. */\r
-       static void vDNSSetCallBack( const char *pcHostName,\r
-                                                                void *pvSearchID,\r
-                                                                FOnDNSEvent pCallbackFunction,\r
-                                                                TickType_t uxTimeout,\r
-                                                                TickType_t uxIdentifier );\r
-       static void vDNSSetCallBack( const char *pcHostName,\r
-                                                                void *pvSearchID,\r
-                                                                FOnDNSEvent pCallbackFunction,\r
-                                                                TickType_t uxTimeout,\r
-                                                                TickType_t uxIdentifier )\r
-       {\r
-       size_t lLength = strlen( pcHostName );\r
-       DNSCallback_t *pxCallback = ( DNSCallback_t * ) pvPortMalloc( sizeof( *pxCallback ) + lLength );\r
-\r
-               /* Translate from ms to number of clock ticks. */\r
-               uxTimeout /= portTICK_PERIOD_MS;\r
-\r
-               if( pxCallback != NULL )\r
-               {\r
-                       if( listLIST_IS_EMPTY( &xCallbackList ) )\r
-                       {\r
-                               /* This is the first one, start the DNS timer to check for timeouts */\r
-                               vIPReloadDNSTimer( FreeRTOS_min_uint32( 1000U, uxTimeout ) );\r
-                       }\r
-\r
-                       strcpy( pxCallback->pcName, pcHostName );\r
-                       pxCallback->pCallbackFunction = pCallbackFunction;\r
-                       pxCallback->pvSearchID = pvSearchID;\r
-                       pxCallback->uxRemaningTime = uxTimeout;\r
-                       vTaskSetTimeOutState( &pxCallback->uxTimeoutState );\r
-                       listSET_LIST_ITEM_OWNER( &( pxCallback->xListItem ), ( void * ) pxCallback );\r
-                       listSET_LIST_ITEM_VALUE( &( pxCallback->xListItem ), uxIdentifier );\r
-                       vTaskSuspendAll();\r
-                       {\r
-                               vListInsertEnd( &xCallbackList, &pxCallback->xListItem );\r
-                       }\r
-                       xTaskResumeAll();\r
-               }\r
-       }\r
-       /*-----------------------------------------------------------*/\r
-\r
-       /* A DNS reply was received, see if there is any matching entry and\r
-       call the handler.  Returns pdTRUE if uxIdentifier was recognised. */\r
-       static BaseType_t xDNSDoCallback( TickType_t uxIdentifier,\r
-                                                                         const char *pcName,\r
-                                                                         uint32_t ulIPAddress );\r
-       static BaseType_t xDNSDoCallback( TickType_t uxIdentifier,\r
-                                                                         const char *pcName,\r
-                                                                         uint32_t ulIPAddress )\r
-       {\r
-       BaseType_t xResult = pdFALSE;\r
-       const ListItem_t *pxIterator;\r
-       const MiniListItem_t * xEnd = ( const MiniListItem_t * ) listGET_END_MARKER( &xCallbackList );\r
-\r
-               vTaskSuspendAll();\r
-               {\r
-                       for( pxIterator  = ( const ListItem_t * ) listGET_NEXT( xEnd );\r
-                                pxIterator != ( const ListItem_t * ) xEnd;\r
-                                pxIterator  = ( const ListItem_t * ) listGET_NEXT( pxIterator ) )\r
-                       {\r
-                               /* The cast will take away the 'configLIST_VOLATILE' */\r
-                               if( uxIdentifier == ( TickType_t ) listGET_LIST_ITEM_VALUE( pxIterator ) )\r
-                               {\r
-                               DNSCallback_t *pxCallback = ( DNSCallback_t * ) listGET_LIST_ITEM_OWNER( pxIterator );\r
-\r
-                                       pxCallback->pCallbackFunction( pcName, pxCallback->pvSearchID, ulIPAddress );\r
-                                       uxListRemove( &pxCallback->xListItem );\r
-                                       vPortFree( pxCallback );\r
-\r
-                                       if( listLIST_IS_EMPTY( &xCallbackList ) )\r
-                                       {\r
-                                               /* The list of outstanding requests is empty. No need for periodic polling. */\r
-                                               vIPSetDnsTimerEnableState( pdFALSE );\r
-                                       }\r
-\r
-                                       xResult = pdTRUE;\r
-                                       break;\r
-                               }\r
-                       }\r
-               }\r
-               xTaskResumeAll();\r
-               return xResult;\r
-       }\r
-\r
-#endif /* ipconfigDNS_USE_CALLBACKS == 1 */\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigDNS_USE_CALLBACKS == 0 )\r
-       uint32_t FreeRTOS_gethostbyname( const char *pcHostName )\r
-#else\r
-       uint32_t FreeRTOS_gethostbyname_a( const char *pcHostName,\r
-                                                                          FOnDNSEvent pCallback,\r
-                                                                          void *pvSearchID,\r
-                                                                          TickType_t uxTimeout )\r
-#endif\r
-{\r
-uint32_t ulIPAddress = 0uL;\r
-TickType_t uxReadTimeOut_ticks = ipconfigDNS_RECEIVE_BLOCK_TIME_TICKS;\r
-TickType_t uxIdentifier = 0u;\r
-BaseType_t xHasRandom = pdFALSE;\r
-\r
-       if( pcHostName != NULL )\r
-       {\r
-               /* If the supplied hostname is IP address, convert it to uint32_t\r
-               and return. */\r
-               #if( ipconfigINCLUDE_FULL_INET_ADDR == 1 )\r
-               {\r
-                       ulIPAddress = FreeRTOS_inet_addr( pcHostName );\r
-               }\r
-               #endif /* ipconfigINCLUDE_FULL_INET_ADDR == 1 */\r
-\r
-               /* If a DNS cache is used then check the cache before issuing another DNS\r
-               request. */\r
-               #if( ipconfigUSE_DNS_CACHE == 1 )\r
-               {\r
-                       if( ulIPAddress == 0uL )\r
-                       {\r
-                               ulIPAddress = FreeRTOS_dnslookup( pcHostName );\r
-\r
-                               if( ulIPAddress != 0 )\r
-                               {\r
-                                       FreeRTOS_debug_printf( ( "FreeRTOS_gethostbyname: found '%s' in cache: %lxip\n", pcHostName, ulIPAddress ) );\r
-                               }\r
-                               else\r
-                               {\r
-                                       /* prvGetHostByName will be called to start a DNS lookup. */\r
-                               }\r
-                       }\r
-               }\r
-               #endif /* ipconfigUSE_DNS_CACHE == 1 */\r
-\r
-               /* Generate a unique identifier. */\r
-               if( ulIPAddress == 0uL )\r
-               {\r
-               uint32_t ulNumber;\r
-\r
-                       xHasRandom = xApplicationGetRandomNumber( &( ulNumber ) );\r
-                       /* DNS identifiers are 16-bit. */\r
-                       uxIdentifier = ( TickType_t ) ( ulNumber & 0xffffu );\r
-                       /* ipconfigRAND32() may not return a non-zero value. */\r
-               }\r
-\r
-               #if( ipconfigDNS_USE_CALLBACKS == 1 )\r
-               {\r
-                       if( pCallback != NULL )\r
-                       {\r
-                               if( ulIPAddress == 0uL )\r
-                               {\r
-                                       /* The user has provided a callback function, so do not block on recvfrom() */\r
-                                       if( xHasRandom != pdFALSE )\r
-                                       {\r
-                                               uxReadTimeOut_ticks = 0u;\r
-                                               vDNSSetCallBack( pcHostName, pvSearchID, pCallback, uxTimeout, uxIdentifier );\r
-                                       }\r
-                               }\r
-                               else\r
-                               {\r
-                                       /* The IP address is known, do the call-back now. */\r
-                                       pCallback( pcHostName, pvSearchID, ulIPAddress );\r
-                               }\r
-                       }\r
-               }\r
-               #endif /* if ( ipconfigDNS_USE_CALLBACKS == 1 ) */\r
-\r
-               if( ( ulIPAddress == 0uL ) && ( xHasRandom != pdFALSE ) )\r
-               {\r
-                       ulIPAddress = prvGetHostByName( pcHostName, uxIdentifier, uxReadTimeOut_ticks );\r
-               }\r
-       }\r
-       return ulIPAddress;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static uint32_t prvGetHostByName( const char *pcHostName,\r
-                                                                 TickType_t uxIdentifier,\r
-                                                                 TickType_t uxReadTimeOut_ticks )\r
-{\r
-struct freertos_sockaddr xAddress;\r
-Socket_t xDNSSocket;\r
-uint32_t ulIPAddress = 0uL;\r
-uint8_t *pucUDPPayloadBuffer;\r
-uint32_t ulAddressLength = sizeof( struct freertos_sockaddr );\r
-BaseType_t xAttempt;\r
-int32_t lBytes;\r
-size_t uxPayloadLength, uxExpectedPayloadLength;\r
-TickType_t uxWriteTimeOut_ticks = ipconfigDNS_SEND_BLOCK_TIME_TICKS;\r
-\r
-#if( ipconfigUSE_LLMNR == 1 )\r
-       BaseType_t bHasDot = pdFALSE;\r
-#endif /* ipconfigUSE_LLMNR == 1 */\r
-\r
-       /* If LLMNR is being used then determine if the host name includes a '.' -\r
-       if not then LLMNR can be used as the lookup method. */\r
-       #if( ipconfigUSE_LLMNR == 1 )\r
-       {\r
-       const char *pucPtr;\r
-\r
-               for( pucPtr = pcHostName; *pucPtr; pucPtr++ )\r
-               {\r
-                       if( *pucPtr == '.' )\r
-                       {\r
-                               bHasDot = pdTRUE;\r
-                               break;\r
-                       }\r
-               }\r
-       }\r
-       #endif /* ipconfigUSE_LLMNR == 1 */\r
-\r
-       /* Two is added at the end for the count of characters in the first\r
-       subdomain part and the string end byte. */\r
-       uxExpectedPayloadLength = sizeof( DNSMessage_t ) + strlen( pcHostName ) + sizeof( uint16_t ) + sizeof( uint16_t ) + 2u;\r
-\r
-       xDNSSocket = prvCreateDNSSocket();\r
-\r
-       if( xDNSSocket != NULL )\r
-       {\r
-               FreeRTOS_setsockopt( xDNSSocket, 0, FREERTOS_SO_SNDTIMEO, ( void * ) &uxWriteTimeOut_ticks, sizeof( TickType_t ) );\r
-               FreeRTOS_setsockopt( xDNSSocket, 0, FREERTOS_SO_RCVTIMEO, ( void * ) &uxReadTimeOut_ticks,  sizeof( TickType_t ) );\r
-\r
-               for( xAttempt = 0; xAttempt < ipconfigDNS_REQUEST_ATTEMPTS; xAttempt++ )\r
-               {\r
-                       /* Get a buffer.  This uses a maximum delay, but the delay will be\r
-                       capped to ipconfigUDP_MAX_SEND_BLOCK_TIME_TICKS so the return value\r
-                       still needs to be tested. */\r
-                       pucUDPPayloadBuffer = ( uint8_t * ) FreeRTOS_GetUDPPayloadBuffer( uxExpectedPayloadLength, portMAX_DELAY );\r
-\r
-                       if( pucUDPPayloadBuffer != NULL )\r
-                       {\r
-                               /* Create the message in the obtained buffer. */\r
-                               uxPayloadLength = prvCreateDNSMessage( pucUDPPayloadBuffer, pcHostName, uxIdentifier );\r
-\r
-                               iptraceSENDING_DNS_REQUEST();\r
-\r
-                               /* Obtain the DNS server address. */\r
-                               FreeRTOS_GetAddressConfiguration( NULL, NULL, NULL, &ulIPAddress );\r
-\r
-                               /* Send the DNS message. */\r
-#if( ipconfigUSE_LLMNR == 1 )\r
-                               if( bHasDot == pdFALSE )\r
-                               {\r
-                                       /* Use LLMNR addressing. */\r
-                                       ( ( DNSMessage_t * ) pucUDPPayloadBuffer )->usFlags = 0;\r
-                                       xAddress.sin_addr = ipLLMNR_IP_ADDR; /* Is in network byte order. */\r
-                                       xAddress.sin_port = FreeRTOS_ntohs( ipLLMNR_PORT );\r
-                               }\r
-                               else\r
-#endif\r
-                               {\r
-                                       /* Use DNS server. */\r
-                                       xAddress.sin_addr = ulIPAddress;\r
-                                       xAddress.sin_port = dnsDNS_PORT;\r
-                               }\r
-\r
-                               ulIPAddress = 0uL;\r
-\r
-                               if( FreeRTOS_sendto( xDNSSocket, pucUDPPayloadBuffer, uxPayloadLength, FREERTOS_ZERO_COPY, &xAddress, sizeof( xAddress ) ) != 0 )\r
-                               {\r
-                                       /* Wait for the reply. */\r
-                                       lBytes = FreeRTOS_recvfrom( xDNSSocket, &pucUDPPayloadBuffer, 0, FREERTOS_ZERO_COPY, &xAddress, &ulAddressLength );\r
-\r
-                                       if( lBytes > 0 )\r
-                                       {\r
-                                       BaseType_t xExpected;\r
-                                       DNSMessage_t *pxDNSMessageHeader = ( DNSMessage_t * ) pucUDPPayloadBuffer;\r
-\r
-                                               /* See if the identifiers match. */\r
-                                               if( uxIdentifier == ( TickType_t ) pxDNSMessageHeader->usIdentifier )\r
-                                               {\r
-                                                       xExpected = pdTRUE;\r
-                                               }\r
-                                               else\r
-                                               {\r
-                                                       /* The reply was not expected. */\r
-                                                       xExpected = pdFALSE;\r
-                                               }\r
-\r
-                                               /* The reply was received.  Process it. */\r
-                                       #if( ipconfigDNS_USE_CALLBACKS == 0 )\r
-                                               /* It is useless to analyse the unexpected reply\r
-                                               unless asynchronous look-ups are enabled. */\r
-                                               if( xExpected != pdFALSE )\r
-                                       #endif /* ipconfigDNS_USE_CALLBACKS == 0 */\r
-                                               {\r
-                                                       ulIPAddress = prvParseDNSReply( pucUDPPayloadBuffer, ( size_t ) lBytes, xExpected );\r
-                                               }\r
-\r
-                                               /* Finished with the buffer.  The zero copy interface\r
-                                               is being used, so the buffer must be freed by the\r
-                                               task. */\r
-                                               FreeRTOS_ReleaseUDPPayloadBuffer( ( void * ) pucUDPPayloadBuffer );\r
-\r
-                                               if( ulIPAddress != 0uL )\r
-                                               {\r
-                                                       /* All done. */\r
-                                                       break;\r
-                                               }\r
-                                       }\r
-                               }\r
-                               else\r
-                               {\r
-                                       /* The message was not sent so the stack will not be\r
-                                       releasing the zero copy - it must be released here. */\r
-                                       FreeRTOS_ReleaseUDPPayloadBuffer( ( void * ) pucUDPPayloadBuffer );\r
-                               }\r
-                       }\r
-\r
-                       if( uxReadTimeOut_ticks == 0u )\r
-                       {\r
-                               /* This DNS lookup is asynchronous, using a call-back:\r
-                               send the request only once. */\r
-                               break;\r
-                       }\r
-               }\r
-\r
-               /* Finished with the socket. */\r
-               FreeRTOS_closesocket( xDNSSocket );\r
-       }\r
-\r
-       return ulIPAddress;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static size_t prvCreateDNSMessage( uint8_t *pucUDPPayloadBuffer,\r
-                                                                  const char *pcHostName,\r
-                                                                  TickType_t uxIdentifier )\r
-{\r
-DNSMessage_t *pxDNSMessageHeader;\r
-uint8_t *pucStart, *pucByte;\r
-DNSTail_t *pxTail;\r
-static const DNSMessage_t xDefaultPartDNSHeader =\r
-{\r
-       0,                 /* The identifier will be overwritten. */\r
-       dnsOUTGOING_FLAGS, /* Flags set for standard query. */\r
-       dnsONE_QUESTION,   /* One question is being asked. */\r
-       0,                 /* No replies are included. */\r
-       0,                 /* No authorities. */\r
-       0                  /* No additional authorities. */\r
-};\r
-\r
-       /* Copy in the const part of the header. */\r
-       memcpy( ( void * ) pucUDPPayloadBuffer, ( void * ) &xDefaultPartDNSHeader, sizeof( xDefaultPartDNSHeader ) );\r
-\r
-       /* Write in a unique identifier. */\r
-       pxDNSMessageHeader = ( DNSMessage_t * ) pucUDPPayloadBuffer;\r
-       pxDNSMessageHeader->usIdentifier = ( uint16_t ) uxIdentifier;\r
-\r
-       /* Create the resource record at the end of the header.  First\r
-       find the end of the header. */\r
-       pucStart = pucUDPPayloadBuffer + sizeof( xDefaultPartDNSHeader );\r
-\r
-       /* Leave a gap for the first length bytes. */\r
-       pucByte = pucStart + 1;\r
-\r
-       /* Copy in the host name. */\r
-       strcpy( ( char * ) pucByte, pcHostName );\r
-\r
-       /* Mark the end of the string. */\r
-       pucByte += strlen( pcHostName );\r
-       *pucByte = 0x00u;\r
-\r
-       /* Walk the string to replace the '.' characters with byte counts.\r
-       pucStart holds the address of the byte count.  Walking the string\r
-       starts after the byte count position. */\r
-       pucByte = pucStart;\r
-\r
-       do\r
-       {\r
-               pucByte++;\r
-\r
-               while( ( *pucByte != 0x00 ) && ( *pucByte != '.' ) )\r
-               {\r
-                       pucByte++;\r
-               }\r
-\r
-               /* Fill in the byte count, then move the pucStart pointer up to\r
-               the found byte position. */\r
-               *pucStart = ( uint8_t ) ( ( uint32_t ) pucByte - ( uint32_t ) pucStart );\r
-               ( *pucStart )--;\r
-\r
-               pucStart = pucByte;\r
-       } while( *pucByte != 0x00 );\r
-\r
-       /* Finish off the record. */\r
-\r
-       pxTail = ( DNSTail_t * ) ( pucByte + 1 );\r
-\r
-       vSetField16( pxTail, DNSTail_t, usType, dnsTYPE_A_HOST ); /* Type A: host */\r
-       vSetField16( pxTail, DNSTail_t, usClass, dnsCLASS_IN );   /* 1: Class IN */\r
-\r
-       /* Return the total size of the generated message, which is the space from\r
-       the last written byte to the beginning of the buffer. */\r
-       return ( ( uint32_t ) pucByte - ( uint32_t ) pucUDPPayloadBuffer + 1 ) + sizeof( *pxTail );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_DNS_CACHE == 1 ) || ( ipconfigDNS_USE_CALLBACKS == 1 )\r
-\r
-       static uint8_t * prvReadNameField( uint8_t *pucByte,\r
-                                                                          size_t uxSourceLen,\r
-                                                                          char *pcName,\r
-                                                                          size_t uxDestLen )\r
-       {\r
-       size_t uxNameLen = 0;\r
-       BaseType_t xCount;\r
-\r
-               if( 0 == uxSourceLen )\r
-               {\r
-                       return NULL;\r
-               }\r
-\r
-               /* Determine if the name is the fully coded name, or an offset to the name\r
-               elsewhere in the message. */\r
-               if( ( *pucByte & dnsNAME_IS_OFFSET ) == dnsNAME_IS_OFFSET )\r
-               {\r
-                       /* Jump over the two byte offset. */\r
-                       if( uxSourceLen > sizeof( uint16_t ) )\r
-                       {\r
-                               pucByte += sizeof( uint16_t );\r
-                       }\r
-                       else\r
-                       {\r
-                               pucByte = NULL;\r
-                       }\r
-               }\r
-               else\r
-               {\r
-                       /* pucByte points to the full name. Walk over the string. */\r
-                       while( ( NULL != pucByte ) && ( *pucByte != 0x00u ) && ( uxSourceLen > 1u ) )\r
-                       {\r
-                               /* If this is not the first time through the loop, then add a\r
-                               separator in the output. */\r
-                               if( ( uxNameLen > 0 ) && ( uxNameLen < ( uxDestLen - 1u ) ) )\r
-                               {\r
-                                       pcName[ uxNameLen++ ] = '.';\r
-                               }\r
-\r
-                               /* Process the first/next sub-string. */\r
-                               for( xCount = *( pucByte++ ), uxSourceLen--;\r
-                                        xCount-- && uxSourceLen > 1u;\r
-                                        pucByte++, uxSourceLen-- )\r
-                               {\r
-                                       if( uxNameLen < uxDestLen - 1u )\r
-                                       {\r
-                                               pcName[ uxNameLen++ ] = *( ( char * ) pucByte );\r
-                                       }\r
-                                       else\r
-                                       {\r
-                                               /* DNS name is too big for the provided buffer. */\r
-                                               pucByte = NULL;\r
-                                               break;\r
-                                       }\r
-                               }\r
-                       }\r
-\r
-                       /* Confirm that a fully formed name was found. */\r
-                       if( NULL != pucByte )\r
-                       {\r
-                               if( 0x00 == *pucByte )\r
-                               {\r
-                                       pucByte++;\r
-                                       uxSourceLen--;\r
-                                       pcName[ uxNameLen++ ] = '\0';\r
-                               }\r
-                               else\r
-                               {\r
-                                       pucByte = NULL;\r
-                               }\r
-                       }\r
-               }\r
-\r
-               return pucByte;\r
-       }\r
-#endif /* ipconfigUSE_DNS_CACHE || ipconfigDNS_USE_CALLBACKS */\r
-/*-----------------------------------------------------------*/\r
-\r
-static uint8_t * prvSkipNameField( uint8_t *pucByte,\r
-                                                                  size_t uxSourceLen )\r
-{\r
-size_t uxChunkLength;\r
-\r
-       if( 0u == uxSourceLen )\r
-       {\r
-               return NULL;\r
-       }\r
-\r
-       /* Determine if the name is the fully coded name, or an offset to the name\r
-       elsewhere in the message. */\r
-       if( ( *pucByte & dnsNAME_IS_OFFSET ) == dnsNAME_IS_OFFSET )\r
-       {\r
-               /* Jump over the two byte offset. */\r
-               if( uxSourceLen > sizeof( uint16_t ) )\r
-               {\r
-                       pucByte += sizeof( uint16_t );\r
-               }\r
-               else\r
-               {\r
-                       pucByte = NULL;\r
-               }\r
-       }\r
-       else\r
-       {\r
-               /* pucByte points to the full name. Walk over the string. */\r
-               while( ( *pucByte != 0x00u ) && ( uxSourceLen > 1u ) )\r
-               {\r
-                       uxChunkLength = *pucByte + 1u;\r
-\r
-                       if( uxSourceLen > uxChunkLength )\r
-                       {\r
-                               uxSourceLen -= uxChunkLength;\r
-                               pucByte += uxChunkLength;\r
-                       }\r
-                       else\r
-                       {\r
-                               pucByte = NULL;\r
-                               break;\r
-                       }\r
-               }\r
-\r
-               /* Confirm that a fully formed name was found. */\r
-               if( NULL != pucByte )\r
-               {\r
-                       if( 0x00u == *pucByte )\r
-                       {\r
-                               pucByte++;\r
-                       }\r
-                       else\r
-                       {\r
-                               pucByte = NULL;\r
-                       }\r
-               }\r
-       }\r
-\r
-       return pucByte;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-/* The function below will only be called :\r
-when ipconfigDNS_USE_CALLBACKS == 1\r
-when ipconfigUSE_LLMNR == 1\r
-for testing purposes, by the module iot_test_freertos_tcp.c\r
-*/\r
-uint32_t ulDNSHandlePacket( NetworkBufferDescriptor_t *pxNetworkBuffer )\r
-{\r
-DNSMessage_t *pxDNSMessageHeader;\r
-size_t uxPayloadSize;\r
-\r
-    /* Only proceed if the payload length indicated in the header\r
-    appears to be valid. */\r
-    if( pxNetworkBuffer->xDataLength >= sizeof( UDPPacket_t ) )\r
-    {\r
-        uxPayloadSize = pxNetworkBuffer->xDataLength - sizeof( UDPPacket_t );\r
-\r
-        if( uxPayloadSize >= sizeof( DNSMessage_t ) )\r
-        {\r
-            pxDNSMessageHeader =\r
-                ( DNSMessage_t * ) ( pxNetworkBuffer->pucEthernetBuffer + sizeof( UDPPacket_t ) );\r
-\r
-            /* The parameter pdFALSE indicates that the reply was not expected. */\r
-            prvParseDNSReply( ( uint8_t * ) pxDNSMessageHeader,\r
-                uxPayloadSize,\r
-                pdFALSE );\r
-        }\r
-    }\r
-\r
-       /* The packet was not consumed. */\r
-       return pdFAIL;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_NBNS == 1 )\r
-\r
-       uint32_t ulNBNSHandlePacket( NetworkBufferDescriptor_t * pxNetworkBuffer )\r
-       {\r
-       UDPPacket_t *pxUDPPacket = ( UDPPacket_t * ) pxNetworkBuffer->pucEthernetBuffer;\r
-       uint8_t *pucUDPPayloadBuffer = pxNetworkBuffer->pucEthernetBuffer + sizeof( UDPPacket_t );\r
-       size_t uxPayloadSize = pxNetworkBuffer->xDataLength - sizeof( UDPPacket_t );\r
-\r
-               /* The network buffer data length has already been set to the\r
-               length of the UDP payload. */\r
-               prvTreatNBNS( pucUDPPayloadBuffer,\r
-                                         uxPayloadSize,\r
-                                         pxUDPPacket->xIPHeader.ulSourceIPAddress );\r
-\r
-               /* The packet was not consumed. */\r
-               return pdFAIL;\r
-       }\r
-\r
-#endif /* ipconfigUSE_NBNS */\r
-/*-----------------------------------------------------------*/\r
-\r
-static uint32_t prvParseDNSReply( uint8_t *pucUDPPayloadBuffer,\r
-                                                                 size_t uxBufferLength,\r
-                                                                 BaseType_t xExpected )\r
-{\r
-DNSMessage_t *pxDNSMessageHeader;\r
-DNSAnswerRecord_t *pxDNSAnswerRecord;\r
-uint32_t ulIPAddress = 0uL;\r
-#if( ipconfigUSE_LLMNR == 1 )\r
-       char *pcRequestedName = NULL;\r
-#endif\r
-uint8_t *pucByte;\r
-size_t uxSourceBytesRemaining;\r
-uint16_t x, usDataLength, usQuestions;\r
-BaseType_t xDoStore = xExpected;\r
-#if( ipconfigUSE_LLMNR == 1 )\r
-       uint16_t usType = 0, usClass = 0;\r
-#endif\r
-#if( ipconfigUSE_DNS_CACHE == 1 ) || ( ipconfigDNS_USE_CALLBACKS == 1 )\r
-       char pcName[ ipconfigDNS_CACHE_NAME_LENGTH ] = "";\r
-#endif\r
-\r
-       /* Ensure that the buffer is of at least minimal DNS message length. */\r
-       if( uxBufferLength < sizeof( DNSMessage_t ) )\r
-       {\r
-               return dnsPARSE_ERROR;\r
-       }\r
-\r
-       uxSourceBytesRemaining = uxBufferLength;\r
-\r
-       /* Parse the DNS message header. */\r
-       pxDNSMessageHeader = ( DNSMessage_t * ) pucUDPPayloadBuffer;\r
-\r
-       /* Introduce a do {} while (0) to allow the use of breaks. */\r
-       do\r
-       {\r
-               /* Start at the first byte after the header. */\r
-               pucByte = pucUDPPayloadBuffer + sizeof( DNSMessage_t );\r
-               uxSourceBytesRemaining -= sizeof( DNSMessage_t );\r
-\r
-               /* Skip any question records. */\r
-               usQuestions = FreeRTOS_ntohs( pxDNSMessageHeader->usQuestions );\r
-\r
-               for( x = 0; x < usQuestions; x++ )\r
-               {\r
-                       #if( ipconfigUSE_LLMNR == 1 )\r
-                       {\r
-                               if( x == 0 )\r
-                               {\r
-                                       pcRequestedName = ( char * ) pucByte;\r
-                               }\r
-                       }\r
-                       #endif\r
-\r
-#if( ipconfigUSE_DNS_CACHE == 1 ) || ( ipconfigDNS_USE_CALLBACKS == 1 )\r
-                       if( x == 0 )\r
-                       {\r
-                               pucByte = prvReadNameField( pucByte,\r
-                                                                                       uxSourceBytesRemaining,\r
-                                                                                       pcName,\r
-                                                                                       sizeof( pcName ) );\r
-\r
-                               /* Check for a malformed response. */\r
-                               if( NULL == pucByte )\r
-                               {\r
-                                       return dnsPARSE_ERROR;\r
-                               }\r
-\r
-                               uxSourceBytesRemaining = ( pucUDPPayloadBuffer + uxBufferLength ) - pucByte;\r
-                       }\r
-                       else\r
-#endif /* ipconfigUSE_DNS_CACHE || ipconfigDNS_USE_CALLBACKS */\r
-                       {\r
-                               /* Skip the variable length pcName field. */\r
-                               pucByte = prvSkipNameField( pucByte,\r
-                                                                                       uxSourceBytesRemaining );\r
-\r
-                               /* Check for a malformed response. */\r
-                               if( NULL == pucByte )\r
-                               {\r
-                                       return dnsPARSE_ERROR;\r
-                               }\r
-\r
-                               uxSourceBytesRemaining = ( size_t )\r
-                                       ( pucUDPPayloadBuffer + uxBufferLength - pucByte );\r
-                       }\r
-\r
-                       /* Check the remaining buffer size. */\r
-                       if( uxSourceBytesRemaining >= sizeof( uint32_t ) )\r
-                       {\r
-                               #if( ipconfigUSE_LLMNR == 1 )\r
-                               {\r
-                                       /* usChar2u16 returns value in host endianness. */\r
-                                       usType = usChar2u16( pucByte );\r
-                                       usClass = usChar2u16( pucByte + 2 );\r
-                               }\r
-                               #endif /* ipconfigUSE_LLMNR */\r
-\r
-                               /* Skip the type and class fields. */\r
-                               pucByte += sizeof( uint32_t );\r
-                               uxSourceBytesRemaining -= sizeof( uint32_t );\r
-                       }\r
-                       else\r
-                       {\r
-                               /* Malformed response. */\r
-                               return dnsPARSE_ERROR;\r
-                       }\r
-               }\r
-\r
-               /* Search through the answer records. */\r
-               pxDNSMessageHeader->usAnswers = FreeRTOS_ntohs( pxDNSMessageHeader->usAnswers );\r
-\r
-               if( ( pxDNSMessageHeader->usFlags & dnsRX_FLAGS_MASK ) == dnsEXPECTED_RX_FLAGS )\r
-               {\r
-                       for( x = 0; x < pxDNSMessageHeader->usAnswers; x++ )\r
-                       {\r
-                               pucByte = prvSkipNameField( pucByte,\r
-                                                                                       uxSourceBytesRemaining );\r
-\r
-                               /* Check for a malformed response. */\r
-                               if( NULL == pucByte )\r
-                               {\r
-                                       return dnsPARSE_ERROR;\r
-                               }\r
-\r
-                               uxSourceBytesRemaining = ( size_t )\r
-                                       ( pucUDPPayloadBuffer + uxBufferLength - pucByte );\r
-\r
-                               /* Is there enough data for an IPv4 A record answer and, if so,\r
-                               is this an A record? */\r
-                               if( ( uxSourceBytesRemaining >= ( sizeof( DNSAnswerRecord_t ) + sizeof( uint32_t ) ) ) &&\r
-                                       ( usChar2u16( pucByte ) == dnsTYPE_A_HOST ) )\r
-                               {\r
-                                       /* This is the required record type and is of sufficient size. */\r
-                                       pxDNSAnswerRecord = ( DNSAnswerRecord_t * ) pucByte;\r
-\r
-                                       /* Sanity check the data length of an IPv4 answer. */\r
-                                       if( FreeRTOS_ntohs( pxDNSAnswerRecord->usDataLength ) == sizeof( uint32_t ) )\r
-                                       {\r
-                                               /* Copy the IP address out of the record. */\r
-                                               memcpy( &ulIPAddress,\r
-                                                               pucByte + sizeof( DNSAnswerRecord_t ),\r
-                                                               sizeof( uint32_t ) );\r
-\r
-                                               #if( ipconfigDNS_USE_CALLBACKS == 1 )\r
-                                               {\r
-                                                       /* See if any asynchronous call was made to FreeRTOS_gethostbyname_a() */\r
-                                                       if( xDNSDoCallback( ( TickType_t ) pxDNSMessageHeader->usIdentifier, pcName, ulIPAddress ) != pdFALSE )\r
-                                                       {\r
-                                                               /* This device has requested this DNS look-up.\r
-                                                               The result may be stored in the DNS cache. */\r
-                                                               xDoStore = pdTRUE;\r
-                                                       }\r
-                                               }\r
-                                               #endif /* ipconfigDNS_USE_CALLBACKS == 1 */\r
-                                               #if( ipconfigUSE_DNS_CACHE == 1 )\r
-                                               {\r
-                                                       /* The reply will only be stored in the DNS cache when the\r
-                                                       request was issued by this device. */\r
-                                                       if( xDoStore != pdFALSE )\r
-                                                       {\r
-                                                               prvProcessDNSCache( pcName, &ulIPAddress, pxDNSAnswerRecord->ulTTL, pdFALSE );\r
-                                                       }\r
-\r
-                                                       /* Show what has happened. */\r
-                                                       FreeRTOS_printf( ( "DNS[0x%04X]: The answer to '%s' (%xip) will%s be stored\n",\r
-                                                                                          ( unsigned ) pxDNSMessageHeader->usIdentifier,\r
-                                                                                          pcName,\r
-                                                                                          ( unsigned ) FreeRTOS_ntohl( ulIPAddress ),\r
-                                                                                          ( xDoStore != 0 ) ? "" : " NOT" ) );\r
-                                               }\r
-                                               #endif /* ipconfigUSE_DNS_CACHE */\r
-                                       }\r
-\r
-                                       pucByte += sizeof( DNSAnswerRecord_t ) + sizeof( uint32_t );\r
-                                       uxSourceBytesRemaining -= ( sizeof( DNSAnswerRecord_t ) + sizeof( uint32_t ) );\r
-                                       break;\r
-                               }\r
-                               else if( uxSourceBytesRemaining >= sizeof( DNSAnswerRecord_t ) )\r
-                               {\r
-                                       /* It's not an A record, so skip it. Get the header location\r
-                                       and then jump over the header. */\r
-                                       pxDNSAnswerRecord = ( DNSAnswerRecord_t * ) pucByte;\r
-                                       pucByte += sizeof( DNSAnswerRecord_t );\r
-                                       uxSourceBytesRemaining -= sizeof( DNSAnswerRecord_t );\r
-\r
-                                       /* Determine the length of the answer data from the header. */\r
-                                       usDataLength = FreeRTOS_ntohs( pxDNSAnswerRecord->usDataLength );\r
-\r
-                                       /* Jump over the answer. */\r
-                                       if( uxSourceBytesRemaining >= usDataLength )\r
-                                       {\r
-                                               pucByte += usDataLength;\r
-                                               uxSourceBytesRemaining -= usDataLength;\r
-                                       }\r
-                                       else\r
-                                       {\r
-                                               /* Malformed response. */\r
-                                               return dnsPARSE_ERROR;\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-\r
-#if( ipconfigUSE_LLMNR == 1 )\r
-               else if( usQuestions && ( usType == dnsTYPE_A_HOST ) && ( usClass == dnsCLASS_IN ) )\r
-               {\r
-                       /* If this is not a reply to our DNS request, it might an LLMNR\r
-                       request. */\r
-                       if( xApplicationDNSQueryHook( ( pcRequestedName + 1 ) ) )\r
-                       {\r
-                       int16_t usLength;\r
-                       NetworkBufferDescriptor_t *pxNewBuffer = NULL;\r
-                       NetworkBufferDescriptor_t *pxNetworkBuffer = pxUDPPayloadBuffer_to_NetworkBuffer( pucUDPPayloadBuffer );\r
-                       LLMNRAnswer_t *pxAnswer;\r
-\r
-                               if( ( xBufferAllocFixedSize == pdFALSE ) && ( pxNetworkBuffer != NULL ) )\r
-                               {\r
-                               BaseType_t xDataLength = uxBufferLength + sizeof( UDPHeader_t ) + sizeof( EthernetHeader_t ) + sizeof( IPHeader_t );\r
-\r
-                                       /* Set the size of the outgoing packet. */\r
-                                       pxNetworkBuffer->xDataLength = xDataLength;\r
-                                       pxNewBuffer = pxDuplicateNetworkBufferWithDescriptor( pxNetworkBuffer, xDataLength + sizeof( LLMNRAnswer_t ) );\r
-\r
-                                       if( pxNewBuffer != NULL )\r
-                                       {\r
-                                       BaseType_t xOffset1, xOffset2;\r
-\r
-                                               xOffset1 = ( BaseType_t ) ( pucByte - pucUDPPayloadBuffer );\r
-                                               xOffset2 = ( BaseType_t ) ( ( ( uint8_t * ) pcRequestedName ) - pucUDPPayloadBuffer );\r
-\r
-                                               pxNetworkBuffer = pxNewBuffer;\r
-                                               pucUDPPayloadBuffer = pxNetworkBuffer->pucEthernetBuffer + ipUDP_PAYLOAD_OFFSET_IPv4;\r
-\r
-                                               pucByte = pucUDPPayloadBuffer + xOffset1;\r
-                                               pcRequestedName = ( char * ) ( pucUDPPayloadBuffer + xOffset2 );\r
-                                               pxDNSMessageHeader = ( DNSMessage_t * ) pucUDPPayloadBuffer;\r
-                                       }\r
-                                       else\r
-                                       {\r
-                                               /* Just to indicate that the message may not be answered. */\r
-                                               pxNetworkBuffer = NULL;\r
-                                       }\r
-                               }\r
-\r
-                               if( pxNetworkBuffer != NULL )\r
-                               {\r
-                                       pxAnswer = ( LLMNRAnswer_t * ) pucByte;\r
-\r
-                                       /* We leave 'usIdentifier' and 'usQuestions' untouched */\r
-                                       vSetField16( pxDNSMessageHeader, DNSMessage_t, usFlags, dnsLLMNR_FLAGS_IS_REPONSE ); /* Set the response flag */\r
-                                       vSetField16( pxDNSMessageHeader, DNSMessage_t, usAnswers, 1 );                       /* Provide a single answer */\r
-                                       vSetField16( pxDNSMessageHeader, DNSMessage_t, usAuthorityRRs, 0 );                  /* No authority */\r
-                                       vSetField16( pxDNSMessageHeader, DNSMessage_t, usAdditionalRRs, 0 );                 /* No additional info */\r
-\r
-                                       pxAnswer->ucNameCode = dnsNAME_IS_OFFSET;\r
-                                       pxAnswer->ucNameOffset = ( uint8_t ) ( pcRequestedName - ( char * ) pucUDPPayloadBuffer );\r
-\r
-                                       vSetField16( pxAnswer, LLMNRAnswer_t, usType, dnsTYPE_A_HOST ); /* Type A: host */\r
-                                       vSetField16( pxAnswer, LLMNRAnswer_t, usClass, dnsCLASS_IN );   /* 1: Class IN */\r
-                                       vSetField32( pxAnswer, LLMNRAnswer_t, ulTTL, dnsLLMNR_TTL_VALUE );\r
-                                       vSetField16( pxAnswer, LLMNRAnswer_t, usDataLength, 4 );\r
-                                       vSetField32( pxAnswer, LLMNRAnswer_t, ulIPAddress, FreeRTOS_ntohl( *ipLOCAL_IP_ADDRESS_POINTER ) );\r
-\r
-                                       usLength = ( int16_t ) ( sizeof( *pxAnswer ) + ( size_t ) ( pucByte - pucUDPPayloadBuffer ) );\r
-\r
-                                       prvReplyDNSMessage( pxNetworkBuffer, usLength );\r
-\r
-                                       if( pxNewBuffer != NULL )\r
-                                       {\r
-                                               vReleaseNetworkBufferAndDescriptor( pxNewBuffer );\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-#endif /* ipconfigUSE_LLMNR == 1 */\r
-       } while( 0 );\r
-\r
-       if( xExpected == pdFALSE )\r
-       {\r
-               /* Do not return a valid IP-address in case the reply was not expected. */\r
-               ulIPAddress = 0uL;\r
-       }\r
-\r
-       return ulIPAddress;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_NBNS == 1 )\r
-\r
-       static void prvTreatNBNS( uint8_t *pucUDPPayloadBuffer,\r
-                                                         size_t uxBufferLength,\r
-                                                         uint32_t ulIPAddress )\r
-       {\r
-       uint16_t usFlags, usType, usClass;\r
-       uint8_t *pucSource, *pucTarget;\r
-       uint8_t ucByte;\r
-       uint8_t ucNBNSName[ 17 ];\r
-\r
-               /* Check for minimum buffer size. */\r
-               if( uxBufferLength < sizeof( NBNSRequest_t ) )\r
-               {\r
-                       return;\r
-               }\r
-\r
-               /* Read the request flags in host endianness. */\r
-               usFlags = usChar2u16( pucUDPPayloadBuffer + offsetof( NBNSRequest_t, usFlags ) );\r
-\r
-               if( ( usFlags & dnsNBNS_FLAGS_OPCODE_MASK ) == dnsNBNS_FLAGS_OPCODE_QUERY )\r
-               {\r
-                       usType  = usChar2u16( pucUDPPayloadBuffer + offsetof( NBNSRequest_t, usType ) );\r
-                       usClass = usChar2u16( pucUDPPayloadBuffer + offsetof( NBNSRequest_t, usClass ) );\r
-\r
-                       /* Not used for now */\r
-                       ( void ) usClass;\r
-\r
-                       /* For NBNS a name is 16 bytes long, written with capitals only.\r
-                       Make sure that the copy is terminated with a zero. */\r
-                       pucTarget = ucNBNSName + sizeof( ucNBNSName ) - 2;\r
-                       pucTarget[ 1 ] = '\0';\r
-\r
-                       /* Start with decoding the last 2 bytes. */\r
-                       pucSource = pucUDPPayloadBuffer + ( offsetof( NBNSRequest_t, ucName ) + ( dnsNBNS_ENCODED_NAME_LENGTH - 2 ) );\r
-\r
-                       for( ;; )\r
-                       {\r
-                               ucByte = ( uint8_t ) ( ( ( pucSource[ 0 ] - 0x41 ) << 4 ) | ( pucSource[ 1 ] - 0x41 ) );\r
-\r
-                               /* Make sure there are no trailing spaces in the name. */\r
-                               if( ( ucByte == ' ' ) && ( pucTarget[ 1 ] == '\0' ) )\r
-                               {\r
-                                       ucByte = '\0';\r
-                               }\r
-\r
-                               *pucTarget = ucByte;\r
-\r
-                               if( pucTarget == ucNBNSName )\r
-                               {\r
-                                       break;\r
-                               }\r
-\r
-                               pucTarget -= 1;\r
-                               pucSource -= 2;\r
-                       }\r
-\r
-                       #if( ipconfigUSE_DNS_CACHE == 1 )\r
-                       {\r
-                               if( ( usFlags & dnsNBNS_FLAGS_RESPONSE ) != 0 )\r
-                               {\r
-                                       /* If this is a response from another device,\r
-                                       add the name to the DNS cache */\r
-                                       prvProcessDNSCache( ( char * ) ucNBNSName, &ulIPAddress, 0, pdFALSE );\r
-                               }\r
-                       }\r
-                       #else\r
-                       {\r
-                               /* Avoid compiler warnings. */\r
-                               ( void ) ulIPAddress;\r
-                       }\r
-                       #endif /* ipconfigUSE_DNS_CACHE */\r
-\r
-                       if( ( ( usFlags & dnsNBNS_FLAGS_RESPONSE ) == 0 ) &&\r
-                               ( usType == dnsNBNS_TYPE_NET_BIOS ) &&\r
-                               ( xApplicationDNSQueryHook( ( const char * ) ucNBNSName ) != pdFALSE ) )\r
-                       {\r
-                       uint16_t usLength;\r
-                       DNSMessage_t *pxMessage;\r
-                       NBNSAnswer_t *pxAnswer;\r
-\r
-                               /* Someone is looking for a device with ucNBNSName,\r
-                               prepare a positive reply. */\r
-                               NetworkBufferDescriptor_t *pxNetworkBuffer = pxUDPPayloadBuffer_to_NetworkBuffer( pucUDPPayloadBuffer );\r
-\r
-                               if( ( xBufferAllocFixedSize == pdFALSE ) && ( pxNetworkBuffer != NULL ) )\r
-                               {\r
-                               NetworkBufferDescriptor_t *pxNewBuffer;\r
-\r
-                                       /* The field xDataLength was set to the total length of the UDP packet,\r
-                                       i.e. the payload size plus sizeof( UDPPacket_t ). */\r
-                                       pxNewBuffer = pxDuplicateNetworkBufferWithDescriptor( pxNetworkBuffer, pxNetworkBuffer->xDataLength + sizeof( NBNSAnswer_t ) );\r
-\r
-                                       if( pxNewBuffer != NULL )\r
-                                       {\r
-                                               pucUDPPayloadBuffer = pxNewBuffer->pucEthernetBuffer + sizeof( UDPPacket_t );\r
-                                               pxNetworkBuffer = pxNewBuffer;\r
-                                       }\r
-                                       else\r
-                                       {\r
-                                               /* Just prevent that a reply will be sent */\r
-                                               pxNetworkBuffer = NULL;\r
-                                       }\r
-                               }\r
-\r
-                               /* Should not occur: pucUDPPayloadBuffer is part of a xNetworkBufferDescriptor */\r
-                               if( pxNetworkBuffer != NULL )\r
-                               {\r
-                                       pxMessage = ( DNSMessage_t * ) pucUDPPayloadBuffer;\r
-\r
-                                       /* As the fields in the structures are not word-aligned, we have to\r
-                                       copy the values byte-by-byte using macro's vSetField16() and vSetField32() */\r
-                                       vSetField16( pxMessage, DNSMessage_t, usFlags, dnsNBNS_QUERY_RESPONSE_FLAGS ); /* 0x8500 */\r
-                                       vSetField16( pxMessage, DNSMessage_t, usQuestions, 0 );\r
-                                       vSetField16( pxMessage, DNSMessage_t, usAnswers, 1 );\r
-                                       vSetField16( pxMessage, DNSMessage_t, usAuthorityRRs, 0 );\r
-                                       vSetField16( pxMessage, DNSMessage_t, usAdditionalRRs, 0 );\r
-\r
-                                       pxAnswer = ( NBNSAnswer_t * ) ( pucUDPPayloadBuffer + offsetof( NBNSRequest_t, usType ) );\r
-\r
-                                       vSetField16( pxAnswer, NBNSAnswer_t, usType, usType );            /* Type */\r
-                                       vSetField16( pxAnswer, NBNSAnswer_t, usClass, dnsNBNS_CLASS_IN ); /* Class */\r
-                                       vSetField32( pxAnswer, NBNSAnswer_t, ulTTL, dnsNBNS_TTL_VALUE );\r
-                                       vSetField16( pxAnswer, NBNSAnswer_t, usDataLength, 6 );           /* 6 bytes including the length field */\r
-                                       vSetField16( pxAnswer, NBNSAnswer_t, usNbFlags, dnsNBNS_NAME_FLAGS );\r
-                                       vSetField32( pxAnswer, NBNSAnswer_t, ulIPAddress, FreeRTOS_ntohl( *ipLOCAL_IP_ADDRESS_POINTER ) );\r
-\r
-                                       usLength = ( uint16_t ) ( offsetof( NBNSRequest_t, usType ) + sizeof( NBNSAnswer_t ) );\r
-\r
-                                       prvReplyDNSMessage( pxNetworkBuffer, usLength );\r
-                               }\r
-                       }\r
-               }\r
-       }\r
-\r
-#endif /* ipconfigUSE_NBNS */\r
-/*-----------------------------------------------------------*/\r
-\r
-static Socket_t prvCreateDNSSocket( void )\r
-{\r
-Socket_t xSocket = NULL;\r
-struct freertos_sockaddr xAddress;\r
-BaseType_t xReturn;\r
-\r
-       /* This must be the first time this function has been called.  Create\r
-       the socket. */\r
-       xSocket = FreeRTOS_socket( FREERTOS_AF_INET, FREERTOS_SOCK_DGRAM, FREERTOS_IPPROTO_UDP );\r
-\r
-       /* Auto bind the port. */\r
-       xAddress.sin_port = 0u;\r
-       xReturn = FreeRTOS_bind( xSocket, &xAddress, sizeof( xAddress ) );\r
-\r
-       /* Check the bind was successful, and clean up if not. */\r
-       if( xReturn != 0 )\r
-       {\r
-               FreeRTOS_closesocket( xSocket );\r
-               xSocket = NULL;\r
-       }\r
-       else\r
-       {\r
-               /* The send and receive timeouts will be set later on. */\r
-       }\r
-\r
-       return xSocket;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ( ipconfigUSE_NBNS == 1 ) || ( ipconfigUSE_LLMNR == 1 ) )\r
-\r
-       static void prvReplyDNSMessage( NetworkBufferDescriptor_t *pxNetworkBuffer,\r
-                                                                       BaseType_t lNetLength )\r
-       {\r
-       UDPPacket_t *pxUDPPacket;\r
-       IPHeader_t *pxIPHeader;\r
-       UDPHeader_t *pxUDPHeader;\r
-\r
-               pxUDPPacket = ( UDPPacket_t * ) pxNetworkBuffer->pucEthernetBuffer;\r
-               pxIPHeader = &pxUDPPacket->xIPHeader;\r
-               pxUDPHeader = &pxUDPPacket->xUDPHeader;\r
-               /* HT: started using defines like 'ipSIZE_OF_xxx' */\r
-               pxIPHeader->usLength                       = FreeRTOS_htons( lNetLength + ipSIZE_OF_IPv4_HEADER + ipSIZE_OF_UDP_HEADER );\r
-               /* HT:endian: should not be translated, copying from packet to packet */\r
-               pxIPHeader->ulDestinationIPAddress = pxIPHeader->ulSourceIPAddress;\r
-               pxIPHeader->ulSourceIPAddress      = *ipLOCAL_IP_ADDRESS_POINTER;\r
-               pxIPHeader->ucTimeToLive                   = ipconfigUDP_TIME_TO_LIVE;\r
-               pxIPHeader->usIdentification       = FreeRTOS_htons( usPacketIdentifier );\r
-               usPacketIdentifier++;\r
-               pxUDPHeader->usLength                      = FreeRTOS_htons( lNetLength + ipSIZE_OF_UDP_HEADER );\r
-               vFlip_16( pxUDPPacket->xUDPHeader.usSourcePort, pxUDPPacket->xUDPHeader.usDestinationPort );\r
-\r
-               /* Important: tell NIC driver how many bytes must be sent */\r
-               pxNetworkBuffer->xDataLength = ( size_t ) ( lNetLength + ipSIZE_OF_IPv4_HEADER + ipSIZE_OF_UDP_HEADER + ipSIZE_OF_ETH_HEADER );\r
-\r
-               #if( ipconfigDRIVER_INCLUDED_TX_IP_CHECKSUM == 0 )\r
-               {\r
-                       /* calculate the IP header checksum */\r
-                       pxIPHeader->usHeaderChecksum = 0x00;\r
-                       pxIPHeader->usHeaderChecksum = usGenerateChecksum( 0uL, ( uint8_t * ) &( pxIPHeader->ucVersionHeaderLength ), ipSIZE_OF_IPv4_HEADER );\r
-                       pxIPHeader->usHeaderChecksum = ~FreeRTOS_htons( pxIPHeader->usHeaderChecksum );\r
-\r
-                       /* calculate the UDP checksum for outgoing package */\r
-                       usGenerateProtocolChecksum( ( uint8_t* ) pxUDPPacket, pxNetworkBuffer->xDataLength, pdTRUE );\r
-               }\r
-               #endif\r
-\r
-               /* This function will fill in the eth addresses and send the packet */\r
-               vReturnEthernetFrame( pxNetworkBuffer, pdFALSE );\r
-       }\r
-\r
-#endif /* ipconfigUSE_NBNS == 1 || ipconfigUSE_LLMNR == 1 */\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_DNS_CACHE == 1 )\r
-\r
-       static void prvProcessDNSCache( const char *pcName,\r
-                                                                       uint32_t *pulIP,\r
-                                                                       uint32_t ulTTL,\r
-                                                                       BaseType_t xLookUp )\r
-       {\r
-       BaseType_t x;\r
-       BaseType_t xFound = pdFALSE;\r
-       uint32_t ulCurrentTimeSeconds = ( xTaskGetTickCount() / portTICK_PERIOD_MS ) / 1000;\r
-       static BaseType_t xFreeEntry = 0;\r
-               configASSERT(pcName);\r
-\r
-               /* For each entry in the DNS cache table. */\r
-               for( x = 0; x < ipconfigDNS_CACHE_ENTRIES; x++ )\r
-               {\r
-                       if( xDNSCache[ x ].pcName[ 0 ] == 0 )\r
-                       {\r
-                               continue;\r
-                       }\r
-\r
-                       if( 0 == strcmp( xDNSCache[ x ].pcName, pcName ) )\r
-                       {\r
-                               /* Is this function called for a lookup or to add/update an IP address? */\r
-                               if( xLookUp != pdFALSE )\r
-                               {\r
-                                       /* Confirm that the record is still fresh. */\r
-                                       if( ulCurrentTimeSeconds < ( xDNSCache[ x ].ulTimeWhenAddedInSeconds + FreeRTOS_ntohl( xDNSCache[ x ].ulTTL ) ) )\r
-                                       {\r
-                                               *pulIP = xDNSCache[ x ].ulIPAddress;\r
-                                       }\r
-                                       else\r
-                                       {\r
-                                               /* Age out the old cached record. */\r
-                                               xDNSCache[ x ].pcName[ 0 ] = 0;\r
-                                       }\r
-                               }\r
-                               else\r
-                               {\r
-                                       xDNSCache[ x ].ulIPAddress = *pulIP;\r
-                                       xDNSCache[ x ].ulTTL = ulTTL;\r
-                                       xDNSCache[ x ].ulTimeWhenAddedInSeconds = ulCurrentTimeSeconds;\r
-                               }\r
-\r
-                               xFound = pdTRUE;\r
-                               break;\r
-                       }\r
-               }\r
-\r
-               if( xFound == pdFALSE )\r
-               {\r
-                       if( xLookUp != pdFALSE )\r
-                       {\r
-                               *pulIP = 0;\r
-                       }\r
-                       else\r
-                       {\r
-                               /* Add or update the item. */\r
-                               if( strlen( pcName ) < ipconfigDNS_CACHE_NAME_LENGTH )\r
-                               {\r
-                                       strcpy( xDNSCache[ xFreeEntry ].pcName, pcName );\r
-\r
-                                       xDNSCache[ xFreeEntry ].ulIPAddress = *pulIP;\r
-                                       xDNSCache[ xFreeEntry ].ulTTL = ulTTL;\r
-                                       xDNSCache[ xFreeEntry ].ulTimeWhenAddedInSeconds = ulCurrentTimeSeconds;\r
-\r
-                                       xFreeEntry++;\r
-\r
-                                       if( xFreeEntry == ipconfigDNS_CACHE_ENTRIES )\r
-                                       {\r
-                                               xFreeEntry = 0;\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-\r
-               if( ( xLookUp == 0 ) || ( *pulIP != 0 ) )\r
-               {\r
-                       FreeRTOS_debug_printf( ( "prvProcessDNSCache: %s: '%s' @ %lxip\n", xLookUp ? "look-up" : "add", pcName, FreeRTOS_ntohl( *pulIP ) ) );\r
-               }\r
-       }\r
-\r
-#endif /* ipconfigUSE_DNS_CACHE */\r
-\r
-#endif /* ipconfigUSE_DNS != 0 */\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-/* Provide access to private members for testing. */\r
-#ifdef AMAZON_FREERTOS_ENABLE_UNIT_TESTS\r
-       #include "iot_freertos_tcp_test_access_dns_define.h"\r
-#endif\r
-\r
+/*
+ * FreeRTOS+TCP V2.2.0
+ * 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
+ */
+
+/* Standard includes. */
+#include <stdint.h>
+
+/* FreeRTOS includes. */
+#include "FreeRTOS.h"
+#include "task.h"
+#include "queue.h"
+#include "list.h"
+#include "semphr.h"
+
+/* FreeRTOS+TCP includes. */
+#include "FreeRTOS_IP.h"
+#include "FreeRTOS_Sockets.h"
+#include "FreeRTOS_IP_Private.h"
+#include "FreeRTOS_UDP_IP.h"
+#include "FreeRTOS_DNS.h"
+#include "NetworkBufferManagement.h"
+#include "NetworkInterface.h"
+#include "IPTraceMacroDefaults.h"
+
+/* Exclude the entire file if DNS is not enabled. */
+#if( ipconfigUSE_DNS != 0 )
+
+#if( ipconfigBYTE_ORDER == pdFREERTOS_LITTLE_ENDIAN )
+       #define dnsDNS_PORT                             0x3500u
+       #define dnsONE_QUESTION                 0x0100u
+       #define dnsOUTGOING_FLAGS               0x0001u     /* Standard query. */
+       #define dnsRX_FLAGS_MASK                0x0f80u     /* The bits of interest in the flags field of incoming DNS messages. */
+       #define dnsEXPECTED_RX_FLAGS    0x0080u     /* Should be a response, without any errors. */
+#else
+       #define dnsDNS_PORT                             0x0035u
+       #define dnsONE_QUESTION                 0x0001u
+       #define dnsOUTGOING_FLAGS               0x0100u     /* Standard query. */
+       #define dnsRX_FLAGS_MASK                0x800fu     /* The bits of interest in the flags field of incoming DNS messages. */
+       #define dnsEXPECTED_RX_FLAGS    0x8000u     /* Should be a response, without any errors. */
+
+#endif /* ipconfigBYTE_ORDER */
+
+/* The maximum number of times a DNS request should be sent out if a response
+is not received, before giving up. */
+#ifndef ipconfigDNS_REQUEST_ATTEMPTS
+       #define ipconfigDNS_REQUEST_ATTEMPTS    5
+#endif
+
+/* If the top two bits in the first character of a name field are set then the
+name field is an offset to the string, rather than the string itself. */
+#define dnsNAME_IS_OFFSET                                       ( ( uint8_t ) 0xc0 )
+
+/* NBNS flags. */
+#define dnsNBNS_FLAGS_RESPONSE                          0x8000u
+#define dnsNBNS_FLAGS_OPCODE_MASK                       0x7800u
+#define dnsNBNS_FLAGS_OPCODE_QUERY                      0x0000u
+#define dnsNBNS_FLAGS_OPCODE_REGISTRATION       0x2800u
+
+/* Host types. */
+#define dnsTYPE_A_HOST                                          0x01u
+#define dnsCLASS_IN                                                     0x01u
+
+/* LLMNR constants. */
+#define dnsLLMNR_TTL_VALUE                                      300000uL
+#define dnsLLMNR_FLAGS_IS_REPONSE                       0x8000u
+
+/* NBNS constants. */
+#define dnsNBNS_TTL_VALUE                                       3600uL /* 1 hour valid */
+#define dnsNBNS_TYPE_NET_BIOS                           0x0020u
+#define dnsNBNS_CLASS_IN                                        0x01u
+#define dnsNBNS_NAME_FLAGS                                      0x6000u
+#define dnsNBNS_ENCODED_NAME_LENGTH                     32
+
+/* If the queried NBNS name matches with the device's name,
+the query will be responded to with these flags: */
+#define dnsNBNS_QUERY_RESPONSE_FLAGS            ( 0x8500u )
+
+/* 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
+ * the created socket - or NULL if the socket could not be created or bound.
+ */
+static Socket_t prvCreateDNSSocket( void );
+
+/*
+ * Create the DNS message in the zero copy buffer passed in the first parameter.
+ */
+static size_t prvCreateDNSMessage( uint8_t *pucUDPPayloadBuffer,
+                                                                  const char *pcHostName,
+                                                                  TickType_t uxIdentifier );
+
+/*
+ * Simple routine that jumps over the NAME field of a resource record.
+ */
+static uint8_t * prvSkipNameField( uint8_t *pucByte,
+                                                                  size_t uxSourceLen );
+
+/*
+ * Process a response packet from a DNS server.
+ * The parameter 'xExpected' indicates whether the identifier in the reply
+ * was expected, and thus if the DNS cache may be updated with the reply.
+ */
+static uint32_t prvParseDNSReply( uint8_t *pucUDPPayloadBuffer,
+                                                                 size_t uxBufferLength,
+                                                                 BaseType_t xExpected );
+
+/*
+ * Prepare and send a message to a DNS server.  'uxReadTimeOut_ticks' will be passed as
+ * zero, in case the user has supplied a call-back function.
+ */
+static uint32_t prvGetHostByName( const char *pcHostName,
+                                                                 TickType_t uxIdentifier,
+                                                                 TickType_t uxReadTimeOut_ticks );
+
+/*
+ * The NBNS and the LLMNR protocol share this reply function.
+ */
+#if( ( ipconfigUSE_NBNS == 1 ) || ( ipconfigUSE_LLMNR == 1 ) )
+       static void prvReplyDNSMessage( NetworkBufferDescriptor_t *pxNetworkBuffer,
+                                                                       BaseType_t lNetLength );
+#endif
+
+#if( ipconfigUSE_NBNS == 1 )
+       static portINLINE void prvTreatNBNS( uint8_t *pucUDPPayloadBuffer,
+                                                                                size_t uxBufferLength,
+                                                                                uint32_t ulIPAddress );
+#endif /* ipconfigUSE_NBNS */
+
+
+#if( ipconfigUSE_DNS_CACHE == 1 ) || ( ipconfigDNS_USE_CALLBACKS == 1 )
+       static uint8_t * prvReadNameField( uint8_t *pucByte,
+                                                                          size_t uxSourceLen,
+                                                                          char *pcName,
+                                                                          size_t uxLen );
+#endif /* ipconfigUSE_DNS_CACHE || ipconfigDNS_USE_CALLBACKS */
+
+#if( ipconfigUSE_DNS_CACHE == 1 )
+       static void prvProcessDNSCache( const char *pcName,
+                                                                       uint32_t *pulIP,
+                                                                       uint32_t ulTTL,
+                                                                       BaseType_t xLookUp );
+
+       typedef struct xDNS_CACHE_TABLE_ROW
+       {
+               uint32_t ulIPAddress;                         /* The IP address of an ARP cache entry. */
+               char pcName[ ipconfigDNS_CACHE_NAME_LENGTH ]; /* The name of the host */
+               uint32_t ulTTL;                               /* Time-to-Live (in seconds) from the DNS server. */
+               uint32_t ulTimeWhenAddedInSeconds;
+       } DNSCacheRow_t;
+
+       static DNSCacheRow_t xDNSCache[ ipconfigDNS_CACHE_ENTRIES ];
+
+       void FreeRTOS_dnsclear()
+       {
+               memset( xDNSCache, 0x0, sizeof( xDNSCache ) );
+       }
+#endif /* ipconfigUSE_DNS_CACHE == 1 */
+
+#if( ipconfigUSE_LLMNR == 1 )
+       const MACAddress_t xLLMNR_MacAdress = { { 0x01, 0x00, 0x5e, 0x00, 0x00, 0xfc } };
+#endif /* ipconfigUSE_LLMNR == 1 */
+
+/*-----------------------------------------------------------*/
+
+#include "pack_struct_start.h"
+struct xDNSMessage
+{
+       uint16_t usIdentifier;
+       uint16_t usFlags;
+       uint16_t usQuestions;
+       uint16_t usAnswers;
+       uint16_t usAuthorityRRs;
+       uint16_t usAdditionalRRs;
+}
+#include "pack_struct_end.h"
+typedef struct xDNSMessage DNSMessage_t;
+
+/* A DNS query consists of a header, as described in 'struct xDNSMessage'
+It is followed by 1 or more queries, each one consisting of a name and a tail,
+with two fields: type and class
+*/
+#include "pack_struct_start.h"
+struct xDNSTail
+{
+       uint16_t usType;
+       uint16_t usClass;
+}
+#include "pack_struct_end.h"
+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 )
+
+       #include "pack_struct_start.h"
+       struct xLLMNRAnswer
+       {
+               uint8_t ucNameCode;
+               uint8_t ucNameOffset;   /* The name is not repeated in the answer, only the offset is given with "0xc0 <offs>" */
+               uint16_t usType;
+               uint16_t usClass;
+               uint32_t ulTTL;
+               uint16_t usDataLength;
+               uint32_t ulIPAddress;
+       }
+       #include "pack_struct_end.h"
+       typedef struct xLLMNRAnswer LLMNRAnswer_t;
+
+#endif /* ipconfigUSE_LLMNR == 1 */
+
+#if( ipconfigUSE_NBNS == 1 )
+
+       #include "pack_struct_start.h"
+       struct xNBNSRequest
+       {
+               uint16_t usRequestId;
+               uint16_t usFlags;
+               uint16_t ulRequestCount;
+               uint16_t usAnswerRSS;
+               uint16_t usAuthRSS;
+               uint16_t usAdditionalRSS;
+               uint8_t ucNameSpace;
+               uint8_t ucName[ dnsNBNS_ENCODED_NAME_LENGTH ];
+               uint8_t ucNameZero;
+               uint16_t usType;
+               uint16_t usClass;
+       }
+       #include "pack_struct_end.h"
+       typedef struct xNBNSRequest NBNSRequest_t;
+
+       #include "pack_struct_start.h"
+       struct xNBNSAnswer
+       {
+               uint16_t usType;
+               uint16_t usClass;
+               uint32_t ulTTL;
+               uint16_t usDataLength;
+               uint16_t usNbFlags;     /* NetBIOS flags 0x6000 : IP-address, big-endian */
+               uint32_t ulIPAddress;
+       }
+       #include "pack_struct_end.h"
+       typedef struct xNBNSAnswer NBNSAnswer_t;
+
+       #endif /* ipconfigUSE_NBNS == 1 */
+
+/*-----------------------------------------------------------*/
+
+#if( ipconfigUSE_DNS_CACHE == 1 )
+       uint32_t FreeRTOS_dnslookup( const char *pcHostName )
+       {
+       uint32_t ulIPAddress = 0uL;
+
+               prvProcessDNSCache( pcHostName, &ulIPAddress, 0, pdTRUE );
+               return ulIPAddress;
+       }
+#endif /* ipconfigUSE_DNS_CACHE == 1 */
+/*-----------------------------------------------------------*/
+
+#if( ipconfigDNS_USE_CALLBACKS == 1 )
+
+       typedef struct xDNS_Callback
+       {
+               TickType_t uxRemaningTime;              /* Timeout in ms */
+               FOnDNSEvent pCallbackFunction;  /* Function to be called when the address has been found or when a timeout has beeen reached */
+               TimeOut_t uxTimeoutState;
+               void *pvSearchID;
+               struct xLIST_ITEM xListItem;
+               char pcName[ 1 ];
+       } DNSCallback_t;
+
+       static List_t xCallbackList;
+
+       /* Define FreeRTOS_gethostbyname() as a normal blocking call. */
+       uint32_t FreeRTOS_gethostbyname( const char *pcHostName )
+       {
+               return FreeRTOS_gethostbyname_a( pcHostName, ( FOnDNSEvent ) NULL, ( void * ) NULL, 0 );
+       }
+       /*-----------------------------------------------------------*/
+
+       /* Initialise the list of call-back structures. */
+       void vDNSInitialise( void );
+       void vDNSInitialise( void )
+       {
+               vListInitialise( &xCallbackList );
+       }
+       /*-----------------------------------------------------------*/
+
+       /* Iterate through the list of call-back structures and remove
+       old entries which have reached a timeout.
+       As soon as the list hase become empty, the DNS timer will be stopped
+       In case pvSearchID is supplied, the user wants to cancel a DNS request
+       */
+       void vDNSCheckCallBack( void *pvSearchID );
+       void vDNSCheckCallBack( void *pvSearchID )
+       {
+       const ListItem_t *pxIterator;
+       const MiniListItem_t * xEnd = ( const MiniListItem_t * ) listGET_END_MARKER( &xCallbackList );
+
+               vTaskSuspendAll();
+               {
+                       for( pxIterator  = ( const ListItem_t * ) listGET_NEXT( xEnd );
+                                pxIterator != ( const ListItem_t * ) xEnd;
+                                )
+                       {
+                       DNSCallback_t *pxCallback = ( DNSCallback_t * ) listGET_LIST_ITEM_OWNER( pxIterator );
+
+                               /* Move to the next item because we might remove this item */
+                               pxIterator = ( const ListItem_t * ) listGET_NEXT( pxIterator );
+
+                               if( ( pvSearchID != NULL ) && ( pvSearchID == pxCallback->pvSearchID ) )
+                               {
+                                       uxListRemove( &pxCallback->xListItem );
+                                       vPortFree( pxCallback );
+                               }
+                               else if( xTaskCheckForTimeOut( &pxCallback->uxTimeoutState, &pxCallback->uxRemaningTime ) != pdFALSE )
+                               {
+                                       pxCallback->pCallbackFunction( pxCallback->pcName, pxCallback->pvSearchID, 0 );
+                                       uxListRemove( &pxCallback->xListItem );
+                                       vPortFree( ( void * ) pxCallback );
+                               }
+                       }
+               }
+               xTaskResumeAll();
+
+               if( listLIST_IS_EMPTY( &xCallbackList ) )
+               {
+                       vIPSetDnsTimerEnableState( pdFALSE );
+               }
+       }
+       /*-----------------------------------------------------------*/
+
+       void FreeRTOS_gethostbyname_cancel( void *pvSearchID )
+       {
+               /* _HT_ Should better become a new API call to have the IP-task remove the callback */
+               vDNSCheckCallBack( pvSearchID );
+       }
+       /*-----------------------------------------------------------*/
+
+       /* FreeRTOS_gethostbyname_a() was called along with callback parameters.
+       Store them in a list for later reference. */
+       static void vDNSSetCallBack( const char *pcHostName,
+                                                                void *pvSearchID,
+                                                                FOnDNSEvent pCallbackFunction,
+                                                                TickType_t uxTimeout,
+                                                                TickType_t uxIdentifier );
+       static void vDNSSetCallBack( const char *pcHostName,
+                                                                void *pvSearchID,
+                                                                FOnDNSEvent pCallbackFunction,
+                                                                TickType_t uxTimeout,
+                                                                TickType_t uxIdentifier )
+       {
+       size_t lLength = strlen( pcHostName );
+       DNSCallback_t *pxCallback = ( DNSCallback_t * ) pvPortMalloc( sizeof( *pxCallback ) + lLength );
+
+               /* Translate from ms to number of clock ticks. */
+               uxTimeout /= portTICK_PERIOD_MS;
+
+               if( pxCallback != NULL )
+               {
+                       if( listLIST_IS_EMPTY( &xCallbackList ) )
+                       {
+                               /* This is the first one, start the DNS timer to check for timeouts */
+                               vIPReloadDNSTimer( FreeRTOS_min_uint32( 1000U, uxTimeout ) );
+                       }
+
+                       strcpy( pxCallback->pcName, pcHostName );
+                       pxCallback->pCallbackFunction = pCallbackFunction;
+                       pxCallback->pvSearchID = pvSearchID;
+                       pxCallback->uxRemaningTime = uxTimeout;
+                       vTaskSetTimeOutState( &pxCallback->uxTimeoutState );
+                       listSET_LIST_ITEM_OWNER( &( pxCallback->xListItem ), ( void * ) pxCallback );
+                       listSET_LIST_ITEM_VALUE( &( pxCallback->xListItem ), uxIdentifier );
+                       vTaskSuspendAll();
+                       {
+                               vListInsertEnd( &xCallbackList, &pxCallback->xListItem );
+                       }
+                       xTaskResumeAll();
+               }
+       }
+       /*-----------------------------------------------------------*/
+
+       /* A DNS reply was received, see if there is any matching entry and
+       call the handler.  Returns pdTRUE if uxIdentifier was recognised. */
+       static BaseType_t xDNSDoCallback( TickType_t uxIdentifier,
+                                                                         const char *pcName,
+                                                                         uint32_t ulIPAddress );
+       static BaseType_t xDNSDoCallback( TickType_t uxIdentifier,
+                                                                         const char *pcName,
+                                                                         uint32_t ulIPAddress )
+       {
+       BaseType_t xResult = pdFALSE;
+       const ListItem_t *pxIterator;
+       const MiniListItem_t * xEnd = ( const MiniListItem_t * ) listGET_END_MARKER( &xCallbackList );
+
+               vTaskSuspendAll();
+               {
+                       for( pxIterator  = ( const ListItem_t * ) listGET_NEXT( xEnd );
+                                pxIterator != ( const ListItem_t * ) xEnd;
+                                pxIterator  = ( const ListItem_t * ) listGET_NEXT( pxIterator ) )
+                       {
+                               /* The cast will take away the 'configLIST_VOLATILE' */
+                               if( uxIdentifier == ( TickType_t ) listGET_LIST_ITEM_VALUE( pxIterator ) )
+                               {
+                               DNSCallback_t *pxCallback = ( DNSCallback_t * ) listGET_LIST_ITEM_OWNER( pxIterator );
+
+                                       pxCallback->pCallbackFunction( pcName, pxCallback->pvSearchID, ulIPAddress );
+                                       uxListRemove( &pxCallback->xListItem );
+                                       vPortFree( pxCallback );
+
+                                       if( listLIST_IS_EMPTY( &xCallbackList ) )
+                                       {
+                                               /* The list of outstanding requests is empty. No need for periodic polling. */
+                                               vIPSetDnsTimerEnableState( pdFALSE );
+                                       }
+
+                                       xResult = pdTRUE;
+                                       break;
+                               }
+                       }
+               }
+               xTaskResumeAll();
+               return xResult;
+       }
+
+#endif /* ipconfigDNS_USE_CALLBACKS == 1 */
+/*-----------------------------------------------------------*/
+
+#if( ipconfigDNS_USE_CALLBACKS == 0 )
+       uint32_t FreeRTOS_gethostbyname( const char *pcHostName )
+#else
+       uint32_t FreeRTOS_gethostbyname_a( const char *pcHostName,
+                                                                          FOnDNSEvent pCallback,
+                                                                          void *pvSearchID,
+                                                                          TickType_t uxTimeout )
+#endif
+{
+uint32_t ulIPAddress = 0uL;
+TickType_t uxReadTimeOut_ticks = ipconfigDNS_RECEIVE_BLOCK_TIME_TICKS;
+TickType_t uxIdentifier = 0u;
+BaseType_t xHasRandom = pdFALSE;
+
+       if( pcHostName != NULL )
+       {
+               /* If the supplied hostname is IP address, convert it to uint32_t
+               and return. */
+               #if( ipconfigINCLUDE_FULL_INET_ADDR == 1 )
+               {
+                       ulIPAddress = FreeRTOS_inet_addr( pcHostName );
+               }
+               #endif /* ipconfigINCLUDE_FULL_INET_ADDR == 1 */
+
+               /* If a DNS cache is used then check the cache before issuing another DNS
+               request. */
+               #if( ipconfigUSE_DNS_CACHE == 1 )
+               {
+                       if( ulIPAddress == 0uL )
+                       {
+                               ulIPAddress = FreeRTOS_dnslookup( pcHostName );
+
+                               if( ulIPAddress != 0 )
+                               {
+                                       FreeRTOS_debug_printf( ( "FreeRTOS_gethostbyname: found '%s' in cache: %lxip\n", pcHostName, ulIPAddress ) );
+                               }
+                               else
+                               {
+                                       /* prvGetHostByName will be called to start a DNS lookup. */
+                               }
+                       }
+               }
+               #endif /* ipconfigUSE_DNS_CACHE == 1 */
+
+               /* Generate a unique identifier. */
+               if( ulIPAddress == 0uL )
+               {
+               uint32_t ulNumber;
+
+                       xHasRandom = xApplicationGetRandomNumber( &( ulNumber ) );
+                       /* DNS identifiers are 16-bit. */
+                       uxIdentifier = ( TickType_t ) ( ulNumber & 0xffffu );
+                       /* ipconfigRAND32() may not return a non-zero value. */
+               }
+
+               #if( ipconfigDNS_USE_CALLBACKS == 1 )
+               {
+                       if( pCallback != NULL )
+                       {
+                               if( ulIPAddress == 0uL )
+                               {
+                                       /* The user has provided a callback function, so do not block on recvfrom() */
+                                       if( xHasRandom != pdFALSE )
+                                       {
+                                               uxReadTimeOut_ticks = 0u;
+                                               vDNSSetCallBack( pcHostName, pvSearchID, pCallback, uxTimeout, uxIdentifier );
+                                       }
+                               }
+                               else
+                               {
+                                       /* The IP address is known, do the call-back now. */
+                                       pCallback( pcHostName, pvSearchID, ulIPAddress );
+                               }
+                       }
+               }
+               #endif /* if ( ipconfigDNS_USE_CALLBACKS == 1 ) */
+
+               if( ( ulIPAddress == 0uL ) && ( xHasRandom != pdFALSE ) )
+               {
+                       ulIPAddress = prvGetHostByName( pcHostName, uxIdentifier, uxReadTimeOut_ticks );
+               }
+       }
+       return ulIPAddress;
+}
+/*-----------------------------------------------------------*/
+
+static uint32_t prvGetHostByName( const char *pcHostName,
+                                                                 TickType_t uxIdentifier,
+                                                                 TickType_t uxReadTimeOut_ticks )
+{
+struct freertos_sockaddr xAddress;
+Socket_t xDNSSocket;
+uint32_t ulIPAddress = 0uL;
+uint8_t *pucUDPPayloadBuffer;
+uint32_t ulAddressLength = sizeof( struct freertos_sockaddr );
+BaseType_t xAttempt;
+int32_t lBytes;
+size_t uxPayloadLength, uxExpectedPayloadLength;
+TickType_t uxWriteTimeOut_ticks = ipconfigDNS_SEND_BLOCK_TIME_TICKS;
+
+#if( ipconfigUSE_LLMNR == 1 )
+       BaseType_t bHasDot = pdFALSE;
+#endif /* ipconfigUSE_LLMNR == 1 */
+
+       /* If LLMNR is being used then determine if the host name includes a '.' -
+       if not then LLMNR can be used as the lookup method. */
+       #if( ipconfigUSE_LLMNR == 1 )
+       {
+       const char *pucPtr;
+
+               for( pucPtr = pcHostName; *pucPtr; pucPtr++ )
+               {
+                       if( *pucPtr == '.' )
+                       {
+                               bHasDot = pdTRUE;
+                               break;
+                       }
+               }
+       }
+       #endif /* ipconfigUSE_LLMNR == 1 */
+
+       /* Two is added at the end for the count of characters in the first
+       subdomain part and the string end byte. */
+       uxExpectedPayloadLength = sizeof( DNSMessage_t ) + strlen( pcHostName ) + sizeof( uint16_t ) + sizeof( uint16_t ) + 2u;
+
+       xDNSSocket = prvCreateDNSSocket();
+
+       if( xDNSSocket != NULL )
+       {
+               FreeRTOS_setsockopt( xDNSSocket, 0, FREERTOS_SO_SNDTIMEO, ( void * ) &uxWriteTimeOut_ticks, sizeof( TickType_t ) );
+               FreeRTOS_setsockopt( xDNSSocket, 0, FREERTOS_SO_RCVTIMEO, ( void * ) &uxReadTimeOut_ticks,  sizeof( TickType_t ) );
+
+               for( xAttempt = 0; xAttempt < ipconfigDNS_REQUEST_ATTEMPTS; xAttempt++ )
+               {
+                       /* Get a buffer.  This uses a maximum delay, but the delay will be
+                       capped to ipconfigUDP_MAX_SEND_BLOCK_TIME_TICKS so the return value
+                       still needs to be tested. */
+                       pucUDPPayloadBuffer = ( uint8_t * ) FreeRTOS_GetUDPPayloadBuffer( uxExpectedPayloadLength, portMAX_DELAY );
+
+                       if( pucUDPPayloadBuffer != NULL )
+                       {
+                               /* Create the message in the obtained buffer. */
+                               uxPayloadLength = prvCreateDNSMessage( pucUDPPayloadBuffer, pcHostName, uxIdentifier );
+
+                               iptraceSENDING_DNS_REQUEST();
+
+                               /* Obtain the DNS server address. */
+                               FreeRTOS_GetAddressConfiguration( NULL, NULL, NULL, &ulIPAddress );
+
+                               /* Send the DNS message. */
+#if( ipconfigUSE_LLMNR == 1 )
+                               if( bHasDot == pdFALSE )
+                               {
+                                       /* Use LLMNR addressing. */
+                                       ( ( DNSMessage_t * ) pucUDPPayloadBuffer )->usFlags = 0;
+                                       xAddress.sin_addr = ipLLMNR_IP_ADDR; /* Is in network byte order. */
+                                       xAddress.sin_port = FreeRTOS_ntohs( ipLLMNR_PORT );
+                               }
+                               else
+#endif
+                               {
+                                       /* Use DNS server. */
+                                       xAddress.sin_addr = ulIPAddress;
+                                       xAddress.sin_port = dnsDNS_PORT;
+                               }
+
+                               ulIPAddress = 0uL;
+
+                               if( FreeRTOS_sendto( xDNSSocket, pucUDPPayloadBuffer, uxPayloadLength, FREERTOS_ZERO_COPY, &xAddress, sizeof( xAddress ) ) != 0 )
+                               {
+                                       /* Wait for the reply. */
+                                       lBytes = FreeRTOS_recvfrom( xDNSSocket, &pucUDPPayloadBuffer, 0, FREERTOS_ZERO_COPY, &xAddress, &ulAddressLength );
+
+                                       if( lBytes > 0 )
+                                       {
+                                       BaseType_t xExpected;
+                                       DNSMessage_t *pxDNSMessageHeader = ( DNSMessage_t * ) pucUDPPayloadBuffer;
+
+                                               /* See if the identifiers match. */
+                                               if( uxIdentifier == ( TickType_t ) pxDNSMessageHeader->usIdentifier )
+                                               {
+                                                       xExpected = pdTRUE;
+                                               }
+                                               else
+                                               {
+                                                       /* The reply was not expected. */
+                                                       xExpected = pdFALSE;
+                                               }
+
+                                               /* The reply was received.  Process it. */
+                                       #if( ipconfigDNS_USE_CALLBACKS == 0 )
+                                               /* It is useless to analyse the unexpected reply
+                                               unless asynchronous look-ups are enabled. */
+                                               if( xExpected != pdFALSE )
+                                       #endif /* ipconfigDNS_USE_CALLBACKS == 0 */
+                                               {
+                                                       ulIPAddress = prvParseDNSReply( pucUDPPayloadBuffer, ( size_t ) lBytes, xExpected );
+                                               }
+
+                                               /* Finished with the buffer.  The zero copy interface
+                                               is being used, so the buffer must be freed by the
+                                               task. */
+                                               FreeRTOS_ReleaseUDPPayloadBuffer( ( void * ) pucUDPPayloadBuffer );
+
+                                               if( ulIPAddress != 0uL )
+                                               {
+                                                       /* All done. */
+                                                       break;
+                                               }
+                                       }
+                               }
+                               else
+                               {
+                                       /* The message was not sent so the stack will not be
+                                       releasing the zero copy - it must be released here. */
+                                       FreeRTOS_ReleaseUDPPayloadBuffer( ( void * ) pucUDPPayloadBuffer );
+                               }
+                       }
+
+                       if( uxReadTimeOut_ticks == 0u )
+                       {
+                               /* This DNS lookup is asynchronous, using a call-back:
+                               send the request only once. */
+                               break;
+                       }
+               }
+
+               /* Finished with the socket. */
+               FreeRTOS_closesocket( xDNSSocket );
+       }
+
+       return ulIPAddress;
+}
+/*-----------------------------------------------------------*/
+
+static size_t prvCreateDNSMessage( uint8_t *pucUDPPayloadBuffer,
+                                                                  const char *pcHostName,
+                                                                  TickType_t uxIdentifier )
+{
+DNSMessage_t *pxDNSMessageHeader;
+uint8_t *pucStart, *pucByte;
+DNSTail_t *pxTail;
+static const DNSMessage_t xDefaultPartDNSHeader =
+{
+       0,                 /* The identifier will be overwritten. */
+       dnsOUTGOING_FLAGS, /* Flags set for standard query. */
+       dnsONE_QUESTION,   /* One question is being asked. */
+       0,                 /* No replies are included. */
+       0,                 /* No authorities. */
+       0                  /* No additional authorities. */
+};
+
+       /* Copy in the const part of the header. */
+       memcpy( ( void * ) pucUDPPayloadBuffer, ( void * ) &xDefaultPartDNSHeader, sizeof( xDefaultPartDNSHeader ) );
+
+       /* Write in a unique identifier. */
+       pxDNSMessageHeader = ( DNSMessage_t * ) pucUDPPayloadBuffer;
+       pxDNSMessageHeader->usIdentifier = ( uint16_t ) uxIdentifier;
+
+       /* Create the resource record at the end of the header.  First
+       find the end of the header. */
+       pucStart = pucUDPPayloadBuffer + sizeof( xDefaultPartDNSHeader );
+
+       /* Leave a gap for the first length bytes. */
+       pucByte = pucStart + 1;
+
+       /* Copy in the host name. */
+       strcpy( ( char * ) pucByte, pcHostName );
+
+       /* Mark the end of the string. */
+       pucByte += strlen( pcHostName );
+       *pucByte = 0x00u;
+
+       /* Walk the string to replace the '.' characters with byte counts.
+       pucStart holds the address of the byte count.  Walking the string
+       starts after the byte count position. */
+       pucByte = pucStart;
+
+       do
+       {
+               pucByte++;
+
+               while( ( *pucByte != 0x00 ) && ( *pucByte != '.' ) )
+               {
+                       pucByte++;
+               }
+
+               /* Fill in the byte count, then move the pucStart pointer up to
+               the found byte position. */
+               *pucStart = ( uint8_t ) ( ( uint32_t ) pucByte - ( uint32_t ) pucStart );
+               ( *pucStart )--;
+
+               pucStart = pucByte;
+       } while( *pucByte != 0x00 );
+
+       /* Finish off the record. */
+
+       pxTail = ( DNSTail_t * ) ( pucByte + 1 );
+
+       vSetField16( pxTail, DNSTail_t, usType, dnsTYPE_A_HOST ); /* Type A: host */
+       vSetField16( pxTail, DNSTail_t, usClass, dnsCLASS_IN );   /* 1: Class IN */
+
+       /* Return the total size of the generated message, which is the space from
+       the last written byte to the beginning of the buffer. */
+       return ( ( uint32_t ) pucByte - ( uint32_t ) pucUDPPayloadBuffer + 1 ) + sizeof( *pxTail );
+}
+/*-----------------------------------------------------------*/
+
+#if( ipconfigUSE_DNS_CACHE == 1 ) || ( ipconfigDNS_USE_CALLBACKS == 1 )
+
+       static uint8_t * prvReadNameField( uint8_t *pucByte,
+                                                                          size_t uxSourceLen,
+                                                                          char *pcName,
+                                                                          size_t uxDestLen )
+       {
+       size_t uxNameLen = 0;
+       BaseType_t xCount;
+
+               if( 0 == uxSourceLen )
+               {
+                       return NULL;
+               }
+
+               /* Determine if the name is the fully coded name, or an offset to the name
+               elsewhere in the message. */
+               if( ( *pucByte & dnsNAME_IS_OFFSET ) == dnsNAME_IS_OFFSET )
+               {
+                       /* Jump over the two byte offset. */
+                       if( uxSourceLen > sizeof( uint16_t ) )
+                       {
+                               pucByte += sizeof( uint16_t );
+                       }
+                       else
+                       {
+                               pucByte = NULL;
+                       }
+               }
+               else
+               {
+                       /* pucByte points to the full name. Walk over the string. */
+                       while( ( NULL != pucByte ) && ( *pucByte != 0x00u ) && ( uxSourceLen > 1u ) )
+                       {
+                               /* If this is not the first time through the loop, then add a
+                               separator in the output. */
+                               if( ( uxNameLen > 0 ) && ( uxNameLen < ( uxDestLen - 1u ) ) )
+                               {
+                                       pcName[ uxNameLen++ ] = '.';
+                               }
+
+                               /* Process the first/next sub-string. */
+                               for( xCount = *( pucByte++ ), uxSourceLen--;
+                                        xCount-- && uxSourceLen > 1u;
+                                        pucByte++, uxSourceLen-- )
+                               {
+                                       if( uxNameLen < uxDestLen - 1u )
+                                       {
+                                               pcName[ uxNameLen++ ] = *( ( 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++;
+                                       uxSourceLen--;
+                                       pcName[ uxNameLen++ ] = '\0';
+                               }
+                               else
+                               {
+                                       pucByte = NULL;
+                               }
+                       }
+               }
+
+               return pucByte;
+       }
+#endif /* ipconfigUSE_DNS_CACHE || ipconfigDNS_USE_CALLBACKS */
+/*-----------------------------------------------------------*/
+
+static uint8_t * prvSkipNameField( uint8_t *pucByte,
+                                                                  size_t uxSourceLen )
+{
+size_t uxChunkLength;
+
+       if( 0u == uxSourceLen )
+       {
+               return NULL;
+       }
+
+       /* Determine if the name is the fully coded name, or an offset to the name
+       elsewhere in the message. */
+       if( ( *pucByte & dnsNAME_IS_OFFSET ) == dnsNAME_IS_OFFSET )
+       {
+               /* Jump over the two byte offset. */
+               if( uxSourceLen > sizeof( uint16_t ) )
+               {
+                       pucByte += sizeof( uint16_t );
+               }
+               else
+               {
+                       pucByte = NULL;
+               }
+       }
+       else
+       {
+               /* pucByte points to the full name. Walk over the string. */
+               while( ( *pucByte != 0x00u ) && ( uxSourceLen > 1u ) )
+               {
+                       uxChunkLength = *pucByte + 1u;
+
+                       if( uxSourceLen > uxChunkLength )
+                       {
+                               uxSourceLen -= uxChunkLength;
+                               pucByte += uxChunkLength;
+                       }
+                       else
+                       {
+                               pucByte = NULL;
+                               break;
+                       }
+               }
+
+               /* Confirm that a fully formed name was found. */
+               if( NULL != pucByte )
+               {
+                       if( 0x00u == *pucByte )
+                       {
+                               pucByte++;
+                       }
+                       else
+                       {
+                               pucByte = NULL;
+                       }
+               }
+       }
+
+       return pucByte;
+}
+/*-----------------------------------------------------------*/
+
+/* The function below will only be called :
+when ipconfigDNS_USE_CALLBACKS == 1
+when ipconfigUSE_LLMNR == 1
+for testing purposes, by the module iot_test_freertos_tcp.c
+*/
+uint32_t ulDNSHandlePacket( NetworkBufferDescriptor_t *pxNetworkBuffer )
+{
+DNSMessage_t *pxDNSMessageHeader;
+size_t uxPayloadSize;
+
+    /* Only proceed if the payload length indicated in the header
+    appears to be valid. */
+    if( pxNetworkBuffer->xDataLength >= sizeof( UDPPacket_t ) )
+    {
+        uxPayloadSize = pxNetworkBuffer->xDataLength - sizeof( UDPPacket_t );
+
+        if( uxPayloadSize >= sizeof( DNSMessage_t ) )
+        {
+            pxDNSMessageHeader =
+                ( DNSMessage_t * ) ( pxNetworkBuffer->pucEthernetBuffer + sizeof( UDPPacket_t ) );
+
+            /* The parameter pdFALSE indicates that the reply was not expected. */
+            prvParseDNSReply( ( uint8_t * ) pxDNSMessageHeader,
+                uxPayloadSize,
+                pdFALSE );
+        }
+    }
+
+       /* The packet was not consumed. */
+       return pdFAIL;
+}
+/*-----------------------------------------------------------*/
+
+#if( ipconfigUSE_NBNS == 1 )
+
+       uint32_t ulNBNSHandlePacket( NetworkBufferDescriptor_t * pxNetworkBuffer )
+       {
+       UDPPacket_t *pxUDPPacket = ( UDPPacket_t * ) pxNetworkBuffer->pucEthernetBuffer;
+       uint8_t *pucUDPPayloadBuffer = pxNetworkBuffer->pucEthernetBuffer + sizeof( UDPPacket_t );
+       size_t uxPayloadSize = pxNetworkBuffer->xDataLength - sizeof( UDPPacket_t );
+
+               /* The network buffer data length has already been set to the
+               length of the UDP payload. */
+               prvTreatNBNS( pucUDPPayloadBuffer,
+                                         uxPayloadSize,
+                                         pxUDPPacket->xIPHeader.ulSourceIPAddress );
+
+               /* The packet was not consumed. */
+               return pdFAIL;
+       }
+
+#endif /* ipconfigUSE_NBNS */
+/*-----------------------------------------------------------*/
+
+static uint32_t prvParseDNSReply( uint8_t *pucUDPPayloadBuffer,
+                                                                 size_t uxBufferLength,
+                                                                 BaseType_t xExpected )
+{
+DNSMessage_t *pxDNSMessageHeader;
+DNSAnswerRecord_t *pxDNSAnswerRecord;
+uint32_t ulIPAddress = 0uL;
+#if( ipconfigUSE_LLMNR == 1 )
+       char *pcRequestedName = NULL;
+#endif
+uint8_t *pucByte;
+size_t uxSourceBytesRemaining;
+uint16_t x, usDataLength, usQuestions;
+BaseType_t xDoStore = xExpected;
+#if( ipconfigUSE_LLMNR == 1 )
+       uint16_t usType = 0, usClass = 0;
+#endif
+#if( ipconfigUSE_DNS_CACHE == 1 ) || ( ipconfigDNS_USE_CALLBACKS == 1 )
+       char pcName[ ipconfigDNS_CACHE_NAME_LENGTH ] = "";
+#endif
+
+       /* Ensure that the buffer is of at least minimal DNS message length. */
+       if( uxBufferLength < sizeof( DNSMessage_t ) )
+       {
+               return dnsPARSE_ERROR;
+       }
+
+       uxSourceBytesRemaining = uxBufferLength;
+
+       /* Parse the DNS message header. */
+       pxDNSMessageHeader = ( DNSMessage_t * ) pucUDPPayloadBuffer;
+
+       /* Introduce a do {} while (0) to allow the use of breaks. */
+       do
+       {
+               /* Start at the first byte after the header. */
+               pucByte = pucUDPPayloadBuffer + sizeof( DNSMessage_t );
+               uxSourceBytesRemaining -= sizeof( DNSMessage_t );
+
+               /* Skip any question records. */
+               usQuestions = FreeRTOS_ntohs( pxDNSMessageHeader->usQuestions );
+
+               for( x = 0; x < usQuestions; x++ )
+               {
+                       #if( ipconfigUSE_LLMNR == 1 )
+                       {
+                               if( x == 0 )
+                               {
+                                       pcRequestedName = ( char * ) pucByte;
+                               }
+                       }
+                       #endif
+
+#if( ipconfigUSE_DNS_CACHE == 1 ) || ( ipconfigDNS_USE_CALLBACKS == 1 )
+                       if( x == 0 )
+                       {
+                               pucByte = prvReadNameField( pucByte,
+                                                                                       uxSourceBytesRemaining,
+                                                                                       pcName,
+                                                                                       sizeof( pcName ) );
+
+                               /* Check for a malformed response. */
+                               if( NULL == pucByte )
+                               {
+                                       return dnsPARSE_ERROR;
+                               }
+
+                               uxSourceBytesRemaining = ( pucUDPPayloadBuffer + uxBufferLength ) - pucByte;
+                       }
+                       else
+#endif /* ipconfigUSE_DNS_CACHE || ipconfigDNS_USE_CALLBACKS */
+                       {
+                               /* Skip the variable length pcName field. */
+                               pucByte = prvSkipNameField( pucByte,
+                                                                                       uxSourceBytesRemaining );
+
+                               /* Check for a malformed response. */
+                               if( NULL == pucByte )
+                               {
+                                       return dnsPARSE_ERROR;
+                               }
+
+                               uxSourceBytesRemaining = ( size_t )
+                                       ( pucUDPPayloadBuffer + uxBufferLength - pucByte );
+                       }
+
+                       /* Check the remaining buffer size. */
+                       if( uxSourceBytesRemaining >= sizeof( uint32_t ) )
+                       {
+                               #if( ipconfigUSE_LLMNR == 1 )
+                               {
+                                       /* usChar2u16 returns value in host endianness. */
+                                       usType = usChar2u16( pucByte );
+                                       usClass = usChar2u16( pucByte + 2 );
+                               }
+                               #endif /* ipconfigUSE_LLMNR */
+
+                               /* Skip the type and class fields. */
+                               pucByte += sizeof( uint32_t );
+                               uxSourceBytesRemaining -= sizeof( uint32_t );
+                       }
+                       else
+                       {
+                               /* Malformed response. */
+                               return dnsPARSE_ERROR;
+                       }
+               }
+
+               /* Search through the answer records. */
+               pxDNSMessageHeader->usAnswers = FreeRTOS_ntohs( pxDNSMessageHeader->usAnswers );
+
+               if( ( pxDNSMessageHeader->usFlags & dnsRX_FLAGS_MASK ) == dnsEXPECTED_RX_FLAGS )
+               {
+                       for( x = 0; x < pxDNSMessageHeader->usAnswers; x++ )
+                       {
+                               pucByte = prvSkipNameField( pucByte,
+                                                                                       uxSourceBytesRemaining );
+
+                               /* Check for a malformed response. */
+                               if( NULL == pucByte )
+                               {
+                                       return dnsPARSE_ERROR;
+                               }
+
+                               uxSourceBytesRemaining = ( size_t )
+                                       ( pucUDPPayloadBuffer + uxBufferLength - pucByte );
+
+                               /* Is there enough data for an IPv4 A record answer and, if so,
+                               is this an A record? */
+                               if( ( uxSourceBytesRemaining >= ( 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. */
+                                               memcpy( &ulIPAddress,
+                                                               pucByte + sizeof( DNSAnswerRecord_t ),
+                                                               sizeof( uint32_t ) );
+
+                                               #if( ipconfigDNS_USE_CALLBACKS == 1 )
+                                               {
+                                                       /* See if any asynchronous call was made to FreeRTOS_gethostbyname_a() */
+                                                       if( xDNSDoCallback( ( TickType_t ) pxDNSMessageHeader->usIdentifier, pcName, ulIPAddress ) != pdFALSE )
+                                                       {
+                                                               /* This device has requested this DNS look-up.
+                                                               The result may be stored in the DNS cache. */
+                                                               xDoStore = pdTRUE;
+                                                       }
+                                               }
+                                               #endif /* ipconfigDNS_USE_CALLBACKS == 1 */
+                                               #if( ipconfigUSE_DNS_CACHE == 1 )
+                                               {
+                                                       /* The reply will only be stored in the DNS cache when the
+                                                       request was issued by this device. */
+                                                       if( xDoStore != pdFALSE )
+                                                       {
+                                                               prvProcessDNSCache( pcName, &ulIPAddress, pxDNSAnswerRecord->ulTTL, pdFALSE );
+                                                       }
+
+                                                       /* Show what has happened. */
+                                                       FreeRTOS_printf( ( "DNS[0x%04X]: The answer to '%s' (%xip) will%s be stored\n",
+                                                                                          ( unsigned ) pxDNSMessageHeader->usIdentifier,
+                                                                                          pcName,
+                                                                                          ( unsigned ) FreeRTOS_ntohl( ulIPAddress ),
+                                                                                          ( xDoStore != 0 ) ? "" : " NOT" ) );
+                                               }
+                                               #endif /* ipconfigUSE_DNS_CACHE */
+                                       }
+
+                                       pucByte += sizeof( DNSAnswerRecord_t ) + sizeof( uint32_t );
+                                       uxSourceBytesRemaining -= ( sizeof( DNSAnswerRecord_t ) + sizeof( uint32_t ) );
+                                       break;
+                               }
+                               else if( uxSourceBytesRemaining >= 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 );
+                                       uxSourceBytesRemaining -= sizeof( DNSAnswerRecord_t );
+
+                                       /* Determine the length of the answer data from the header. */
+                                       usDataLength = FreeRTOS_ntohs( pxDNSAnswerRecord->usDataLength );
+
+                                       /* Jump over the answer. */
+                                       if( uxSourceBytesRemaining >= usDataLength )
+                                       {
+                                               pucByte += usDataLength;
+                                               uxSourceBytesRemaining -= usDataLength;
+                                       }
+                                       else
+                                       {
+                                               /* Malformed response. */
+                                               return dnsPARSE_ERROR;
+                                       }
+                               }
+                       }
+               }
+
+#if( ipconfigUSE_LLMNR == 1 )
+               else if( usQuestions && ( usType == dnsTYPE_A_HOST ) && ( usClass == dnsCLASS_IN ) )
+               {
+                       /* If this is not a reply to our DNS request, it might an LLMNR
+                       request. */
+                       if( xApplicationDNSQueryHook( ( pcRequestedName + 1 ) ) )
+                       {
+                       int16_t usLength;
+                       NetworkBufferDescriptor_t *pxNewBuffer = NULL;
+                       NetworkBufferDescriptor_t *pxNetworkBuffer = pxUDPPayloadBuffer_to_NetworkBuffer( pucUDPPayloadBuffer );
+                       LLMNRAnswer_t *pxAnswer;
+
+                               if( ( xBufferAllocFixedSize == pdFALSE ) && ( pxNetworkBuffer != NULL ) )
+                               {
+                               BaseType_t xDataLength = uxBufferLength + sizeof( UDPHeader_t ) + sizeof( EthernetHeader_t ) + sizeof( IPHeader_t );
+
+                                       /* Set the size of the outgoing packet. */
+                                       pxNetworkBuffer->xDataLength = xDataLength;
+                                       pxNewBuffer = pxDuplicateNetworkBufferWithDescriptor( pxNetworkBuffer, xDataLength + sizeof( LLMNRAnswer_t ) );
+
+                                       if( pxNewBuffer != NULL )
+                                       {
+                                       BaseType_t xOffset1, xOffset2;
+
+                                               xOffset1 = ( BaseType_t ) ( pucByte - pucUDPPayloadBuffer );
+                                               xOffset2 = ( BaseType_t ) ( ( ( uint8_t * ) pcRequestedName ) - pucUDPPayloadBuffer );
+
+                                               pxNetworkBuffer = pxNewBuffer;
+                                               pucUDPPayloadBuffer = pxNetworkBuffer->pucEthernetBuffer + ipUDP_PAYLOAD_OFFSET_IPv4;
+
+                                               pucByte = pucUDPPayloadBuffer + xOffset1;
+                                               pcRequestedName = ( char * ) ( pucUDPPayloadBuffer + xOffset2 );
+                                               pxDNSMessageHeader = ( DNSMessage_t * ) pucUDPPayloadBuffer;
+                                       }
+                                       else
+                                       {
+                                               /* Just to indicate that the message may not be answered. */
+                                               pxNetworkBuffer = NULL;
+                                       }
+                               }
+
+                               if( pxNetworkBuffer != NULL )
+                               {
+                                       pxAnswer = ( LLMNRAnswer_t * ) pucByte;
+
+                                       /* We leave 'usIdentifier' and 'usQuestions' untouched */
+                                       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, usAuthorityRRs, 0 );                  /* No authority */
+                                       vSetField16( pxDNSMessageHeader, DNSMessage_t, usAdditionalRRs, 0 );                 /* No additional info */
+
+                                       pxAnswer->ucNameCode = dnsNAME_IS_OFFSET;
+                                       pxAnswer->ucNameOffset = ( uint8_t ) ( pcRequestedName - ( char * ) pucUDPPayloadBuffer );
+
+                                       vSetField16( pxAnswer, LLMNRAnswer_t, usType, dnsTYPE_A_HOST ); /* Type A: host */
+                                       vSetField16( pxAnswer, LLMNRAnswer_t, usClass, dnsCLASS_IN );   /* 1: Class IN */
+                                       vSetField32( pxAnswer, LLMNRAnswer_t, ulTTL, dnsLLMNR_TTL_VALUE );
+                                       vSetField16( pxAnswer, LLMNRAnswer_t, usDataLength, 4 );
+                                       vSetField32( pxAnswer, LLMNRAnswer_t, ulIPAddress, FreeRTOS_ntohl( *ipLOCAL_IP_ADDRESS_POINTER ) );
+
+                                       usLength = ( int16_t ) ( sizeof( *pxAnswer ) + ( size_t ) ( pucByte - pucUDPPayloadBuffer ) );
+
+                                       prvReplyDNSMessage( pxNetworkBuffer, usLength );
+
+                                       if( pxNewBuffer != NULL )
+                                       {
+                                               vReleaseNetworkBufferAndDescriptor( pxNewBuffer );
+                                       }
+                               }
+                       }
+               }
+#endif /* ipconfigUSE_LLMNR == 1 */
+       } while( 0 );
+
+       if( xExpected == pdFALSE )
+       {
+               /* Do not return a valid IP-address in case the reply was not expected. */
+               ulIPAddress = 0uL;
+       }
+
+       return ulIPAddress;
+}
+/*-----------------------------------------------------------*/
+
+#if( ipconfigUSE_NBNS == 1 )
+
+       static void prvTreatNBNS( uint8_t *pucUDPPayloadBuffer,
+                                                         size_t uxBufferLength,
+                                                         uint32_t ulIPAddress )
+       {
+       uint16_t usFlags, usType, usClass;
+       uint8_t *pucSource, *pucTarget;
+       uint8_t ucByte;
+       uint8_t ucNBNSName[ 17 ];
+
+               /* Check for minimum buffer size. */
+               if( uxBufferLength < sizeof( NBNSRequest_t ) )
+               {
+                       return;
+               }
+
+               /* Read the request flags in host endianness. */
+               usFlags = usChar2u16( pucUDPPayloadBuffer + offsetof( NBNSRequest_t, usFlags ) );
+
+               if( ( usFlags & dnsNBNS_FLAGS_OPCODE_MASK ) == dnsNBNS_FLAGS_OPCODE_QUERY )
+               {
+                       usType  = usChar2u16( pucUDPPayloadBuffer + offsetof( NBNSRequest_t, usType ) );
+                       usClass = usChar2u16( pucUDPPayloadBuffer + offsetof( NBNSRequest_t, usClass ) );
+
+                       /* Not used for now */
+                       ( void ) usClass;
+
+                       /* For NBNS a name is 16 bytes long, written with capitals only.
+                       Make sure that the copy is terminated with a zero. */
+                       pucTarget = ucNBNSName + sizeof( ucNBNSName ) - 2;
+                       pucTarget[ 1 ] = '\0';
+
+                       /* Start with decoding the last 2 bytes. */
+                       pucSource = pucUDPPayloadBuffer + ( offsetof( NBNSRequest_t, ucName ) + ( dnsNBNS_ENCODED_NAME_LENGTH - 2 ) );
+
+                       for( ;; )
+                       {
+                               ucByte = ( uint8_t ) ( ( ( pucSource[ 0 ] - 0x41 ) << 4 ) | ( pucSource[ 1 ] - 0x41 ) );
+
+                               /* Make sure there are no trailing spaces in the name. */
+                               if( ( ucByte == ' ' ) && ( pucTarget[ 1 ] == '\0' ) )
+                               {
+                                       ucByte = '\0';
+                               }
+
+                               *pucTarget = ucByte;
+
+                               if( pucTarget == ucNBNSName )
+                               {
+                                       break;
+                               }
+
+                               pucTarget -= 1;
+                               pucSource -= 2;
+                       }
+
+                       #if( ipconfigUSE_DNS_CACHE == 1 )
+                       {
+                               if( ( usFlags & dnsNBNS_FLAGS_RESPONSE ) != 0 )
+                               {
+                                       /* If this is a response from another device,
+                                       add the name to the DNS cache */
+                                       prvProcessDNSCache( ( char * ) ucNBNSName, &ulIPAddress, 0, pdFALSE );
+                               }
+                       }
+                       #else
+                       {
+                               /* Avoid compiler warnings. */
+                               ( void ) ulIPAddress;
+                       }
+                       #endif /* ipconfigUSE_DNS_CACHE */
+
+                       if( ( ( usFlags & dnsNBNS_FLAGS_RESPONSE ) == 0 ) &&
+                               ( usType == dnsNBNS_TYPE_NET_BIOS ) &&
+                               ( xApplicationDNSQueryHook( ( const char * ) ucNBNSName ) != pdFALSE ) )
+                       {
+                       uint16_t usLength;
+                       DNSMessage_t *pxMessage;
+                       NBNSAnswer_t *pxAnswer;
+
+                               /* Someone is looking for a device with ucNBNSName,
+                               prepare a positive reply. */
+                               NetworkBufferDescriptor_t *pxNetworkBuffer = pxUDPPayloadBuffer_to_NetworkBuffer( pucUDPPayloadBuffer );
+
+                               if( ( xBufferAllocFixedSize == pdFALSE ) && ( pxNetworkBuffer != NULL ) )
+                               {
+                               NetworkBufferDescriptor_t *pxNewBuffer;
+
+                                       /* The field xDataLength was set to the total length of the UDP packet,
+                                       i.e. the payload size plus sizeof( UDPPacket_t ). */
+                                       pxNewBuffer = pxDuplicateNetworkBufferWithDescriptor( pxNetworkBuffer, pxNetworkBuffer->xDataLength + sizeof( NBNSAnswer_t ) );
+
+                                       if( pxNewBuffer != NULL )
+                                       {
+                                               pucUDPPayloadBuffer = pxNewBuffer->pucEthernetBuffer + sizeof( UDPPacket_t );
+                                               pxNetworkBuffer = pxNewBuffer;
+                                       }
+                                       else
+                                       {
+                                               /* Just prevent that a reply will be sent */
+                                               pxNetworkBuffer = NULL;
+                                       }
+                               }
+
+                               /* Should not occur: pucUDPPayloadBuffer is part of a xNetworkBufferDescriptor */
+                               if( pxNetworkBuffer != NULL )
+                               {
+                                       pxMessage = ( DNSMessage_t * ) pucUDPPayloadBuffer;
+
+                                       /* As the fields in the structures are not word-aligned, we have to
+                                       copy the values byte-by-byte using macro's vSetField16() and vSetField32() */
+                                       vSetField16( pxMessage, DNSMessage_t, usFlags, dnsNBNS_QUERY_RESPONSE_FLAGS ); /* 0x8500 */
+                                       vSetField16( pxMessage, DNSMessage_t, usQuestions, 0 );
+                                       vSetField16( pxMessage, DNSMessage_t, usAnswers, 1 );
+                                       vSetField16( pxMessage, DNSMessage_t, usAuthorityRRs, 0 );
+                                       vSetField16( pxMessage, DNSMessage_t, usAdditionalRRs, 0 );
+
+                                       pxAnswer = ( NBNSAnswer_t * ) ( pucUDPPayloadBuffer + offsetof( NBNSRequest_t, usType ) );
+
+                                       vSetField16( pxAnswer, NBNSAnswer_t, usType, usType );            /* Type */
+                                       vSetField16( pxAnswer, NBNSAnswer_t, usClass, dnsNBNS_CLASS_IN ); /* Class */
+                                       vSetField32( pxAnswer, NBNSAnswer_t, ulTTL, dnsNBNS_TTL_VALUE );
+                                       vSetField16( pxAnswer, NBNSAnswer_t, usDataLength, 6 );           /* 6 bytes including the length field */
+                                       vSetField16( pxAnswer, NBNSAnswer_t, usNbFlags, dnsNBNS_NAME_FLAGS );
+                                       vSetField32( pxAnswer, NBNSAnswer_t, ulIPAddress, FreeRTOS_ntohl( *ipLOCAL_IP_ADDRESS_POINTER ) );
+
+                                       usLength = ( uint16_t ) ( offsetof( NBNSRequest_t, usType ) + sizeof( NBNSAnswer_t ) );
+
+                                       prvReplyDNSMessage( pxNetworkBuffer, usLength );
+                               }
+                       }
+               }
+       }
+
+#endif /* ipconfigUSE_NBNS */
+/*-----------------------------------------------------------*/
+
+static Socket_t prvCreateDNSSocket( void )
+{
+Socket_t xSocket = NULL;
+struct freertos_sockaddr xAddress;
+BaseType_t xReturn;
+
+       /* This must be the first time this function has been called.  Create
+       the socket. */
+       xSocket = FreeRTOS_socket( FREERTOS_AF_INET, FREERTOS_SOCK_DGRAM, FREERTOS_IPPROTO_UDP );
+
+       /* Auto bind the port. */
+       xAddress.sin_port = 0u;
+       xReturn = FreeRTOS_bind( xSocket, &xAddress, sizeof( xAddress ) );
+
+       /* Check the bind was successful, and clean up if not. */
+       if( xReturn != 0 )
+       {
+               FreeRTOS_closesocket( xSocket );
+               xSocket = NULL;
+       }
+       else
+       {
+               /* The send and receive timeouts will be set later on. */
+       }
+
+       return xSocket;
+}
+/*-----------------------------------------------------------*/
+
+#if( ( ipconfigUSE_NBNS == 1 ) || ( ipconfigUSE_LLMNR == 1 ) )
+
+       static void prvReplyDNSMessage( NetworkBufferDescriptor_t *pxNetworkBuffer,
+                                                                       BaseType_t lNetLength )
+       {
+       UDPPacket_t *pxUDPPacket;
+       IPHeader_t *pxIPHeader;
+       UDPHeader_t *pxUDPHeader;
+
+               pxUDPPacket = ( UDPPacket_t * ) pxNetworkBuffer->pucEthernetBuffer;
+               pxIPHeader = &pxUDPPacket->xIPHeader;
+               pxUDPHeader = &pxUDPPacket->xUDPHeader;
+               /* HT: started using defines like 'ipSIZE_OF_xxx' */
+               pxIPHeader->usLength                       = FreeRTOS_htons( lNetLength + ipSIZE_OF_IPv4_HEADER + ipSIZE_OF_UDP_HEADER );
+               /* HT:endian: should not be translated, copying from packet to packet */
+               pxIPHeader->ulDestinationIPAddress = pxIPHeader->ulSourceIPAddress;
+               pxIPHeader->ulSourceIPAddress      = *ipLOCAL_IP_ADDRESS_POINTER;
+               pxIPHeader->ucTimeToLive                   = ipconfigUDP_TIME_TO_LIVE;
+               pxIPHeader->usIdentification       = FreeRTOS_htons( usPacketIdentifier );
+               usPacketIdentifier++;
+               pxUDPHeader->usLength                      = FreeRTOS_htons( lNetLength + ipSIZE_OF_UDP_HEADER );
+               vFlip_16( pxUDPPacket->xUDPHeader.usSourcePort, pxUDPPacket->xUDPHeader.usDestinationPort );
+
+               /* Important: tell NIC driver how many bytes must be sent */
+               pxNetworkBuffer->xDataLength = ( size_t ) ( lNetLength + ipSIZE_OF_IPv4_HEADER + ipSIZE_OF_UDP_HEADER + ipSIZE_OF_ETH_HEADER );
+
+               #if( ipconfigDRIVER_INCLUDED_TX_IP_CHECKSUM == 0 )
+               {
+                       /* calculate the IP header checksum */
+                       pxIPHeader->usHeaderChecksum = 0x00;
+                       pxIPHeader->usHeaderChecksum = usGenerateChecksum( 0uL, ( uint8_t * ) &( pxIPHeader->ucVersionHeaderLength ), ipSIZE_OF_IPv4_HEADER );
+                       pxIPHeader->usHeaderChecksum = ~FreeRTOS_htons( pxIPHeader->usHeaderChecksum );
+
+                       /* calculate the UDP checksum for outgoing package */
+                       usGenerateProtocolChecksum( ( uint8_t* ) pxUDPPacket, pxNetworkBuffer->xDataLength, pdTRUE );
+               }
+               #endif
+
+               /* This function will fill in the eth addresses and send the packet */
+               vReturnEthernetFrame( pxNetworkBuffer, pdFALSE );
+       }
+
+#endif /* ipconfigUSE_NBNS == 1 || ipconfigUSE_LLMNR == 1 */
+/*-----------------------------------------------------------*/
+
+#if( ipconfigUSE_DNS_CACHE == 1 )
+
+       static void prvProcessDNSCache( const char *pcName,
+                                                                       uint32_t *pulIP,
+                                                                       uint32_t ulTTL,
+                                                                       BaseType_t xLookUp )
+       {
+       BaseType_t x;
+       BaseType_t xFound = pdFALSE;
+       uint32_t ulCurrentTimeSeconds = ( xTaskGetTickCount() / portTICK_PERIOD_MS ) / 1000;
+       static BaseType_t xFreeEntry = 0;
+               configASSERT(pcName);
+
+               /* For each entry in the DNS cache table. */
+               for( x = 0; x < ipconfigDNS_CACHE_ENTRIES; x++ )
+               {
+                       if( xDNSCache[ x ].pcName[ 0 ] == 0 )
+                       {
+                               continue;
+                       }
+
+                       if( 0 == strcmp( xDNSCache[ x ].pcName, pcName ) )
+                       {
+                               /* Is this function called for a lookup or to add/update an IP address? */
+                               if( xLookUp != pdFALSE )
+                               {
+                                       /* Confirm that the record is still fresh. */
+                                       if( ulCurrentTimeSeconds < ( xDNSCache[ x ].ulTimeWhenAddedInSeconds + FreeRTOS_ntohl( xDNSCache[ x ].ulTTL ) ) )
+                                       {
+                                               *pulIP = xDNSCache[ x ].ulIPAddress;
+                                       }
+                                       else
+                                       {
+                                               /* Age out the old cached record. */
+                                               xDNSCache[ x ].pcName[ 0 ] = 0;
+                                       }
+                               }
+                               else
+                               {
+                                       xDNSCache[ x ].ulIPAddress = *pulIP;
+                                       xDNSCache[ x ].ulTTL = ulTTL;
+                                       xDNSCache[ x ].ulTimeWhenAddedInSeconds = ulCurrentTimeSeconds;
+                               }
+
+                               xFound = pdTRUE;
+                               break;
+                       }
+               }
+
+               if( xFound == pdFALSE )
+               {
+                       if( xLookUp != pdFALSE )
+                       {
+                               *pulIP = 0;
+                       }
+                       else
+                       {
+                               /* Add or update the item. */
+                               if( strlen( pcName ) < ipconfigDNS_CACHE_NAME_LENGTH )
+                               {
+                                       strcpy( xDNSCache[ xFreeEntry ].pcName, pcName );
+
+                                       xDNSCache[ xFreeEntry ].ulIPAddress = *pulIP;
+                                       xDNSCache[ xFreeEntry ].ulTTL = ulTTL;
+                                       xDNSCache[ xFreeEntry ].ulTimeWhenAddedInSeconds = ulCurrentTimeSeconds;
+
+                                       xFreeEntry++;
+
+                                       if( xFreeEntry == ipconfigDNS_CACHE_ENTRIES )
+                                       {
+                                               xFreeEntry = 0;
+                                       }
+                               }
+                       }
+               }
+
+               if( ( xLookUp == 0 ) || ( *pulIP != 0 ) )
+               {
+                       FreeRTOS_debug_printf( ( "prvProcessDNSCache: %s: '%s' @ %lxip\n", xLookUp ? "look-up" : "add", pcName, FreeRTOS_ntohl( *pulIP ) ) );
+               }
+       }
+
+#endif /* ipconfigUSE_DNS_CACHE */
+
+#endif /* ipconfigUSE_DNS != 0 */
+
+/*-----------------------------------------------------------*/
+
+/* Provide access to private members for testing. */
+#ifdef AMAZON_FREERTOS_ENABLE_UNIT_TESTS
+       #include "iot_freertos_tcp_test_access_dns_define.h"
+#endif
+
index c94f55dd74d5ecdd829f090f21a822194551c9d8..48e632a01f8c8d9706cddf295c0e42d76e574a6e 100644 (file)
-/*\r
- * FreeRTOS+TCP V2.2.0\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://aws.amazon.com/freertos\r
- * http://www.FreeRTOS.org\r
- */\r
-\r
-/* Standard includes. */\r
-#include <stdint.h>\r
-#include <stdio.h>\r
-#include <string.h>\r
-\r
-/* FreeRTOS includes. */\r
-#include "FreeRTOS.h"\r
-#include "task.h"\r
-#include "queue.h"\r
-#include "semphr.h"\r
-\r
-/* FreeRTOS+TCP includes. */\r
-#include "FreeRTOS_IP.h"\r
-#include "FreeRTOS_Sockets.h"\r
-#include "FreeRTOS_IP_Private.h"\r
-#include "FreeRTOS_ARP.h"\r
-#include "FreeRTOS_UDP_IP.h"\r
-#include "FreeRTOS_TCP_IP.h"\r
-#include "FreeRTOS_DHCP.h"\r
-#include "NetworkInterface.h"\r
-#include "NetworkBufferManagement.h"\r
-#include "FreeRTOS_DNS.h"\r
-\r
-\r
-/* Used to ensure the structure packing is having the desired effect.  The\r
-'volatile' is used to prevent compiler warnings about comparing a constant with\r
-a constant. */\r
-#define ipEXPECTED_EthernetHeader_t_SIZE       ( ( size_t ) 14 )\r
-#define ipEXPECTED_ARPHeader_t_SIZE                    ( ( size_t ) 28 )\r
-#define ipEXPECTED_IPHeader_t_SIZE                     ( ( size_t ) 20 )\r
-#define ipEXPECTED_IGMPHeader__SIZE                    ( ( size_t ) 8 )\r
-#define ipEXPECTED_ICMPHeader_t_SIZE           ( ( size_t ) 8 )\r
-#define ipEXPECTED_UDPHeader_t_SIZE                    ( ( size_t ) 8 )\r
-#define ipEXPECTED_TCPHeader_t_SIZE                    ( ( size_t ) 20 )\r
-\r
-\r
-/* ICMP protocol definitions. */\r
-#define ipICMP_ECHO_REQUEST                            ( ( uint8_t ) 8 )\r
-#define ipICMP_ECHO_REPLY                              ( ( uint8_t ) 0 )\r
-\r
-\r
-/* Time delay between repeated attempts to initialise the network hardware. */\r
-#ifndef ipINITIALISATION_RETRY_DELAY\r
-       #define ipINITIALISATION_RETRY_DELAY    ( pdMS_TO_TICKS( 3000 ) )\r
-#endif\r
-\r
-/* Defines how often the ARP timer callback function is executed.  The time is\r
-shorted in the Windows simulator as simulated time is not real time. */\r
-#ifndef        ipARP_TIMER_PERIOD_MS\r
-       #ifdef _WINDOWS_\r
-               #define ipARP_TIMER_PERIOD_MS   ( 500 ) /* For windows simulator builds. */\r
-       #else\r
-               #define ipARP_TIMER_PERIOD_MS   ( 10000 )\r
-       #endif\r
-#endif\r
-\r
-#ifndef iptraceIP_TASK_STARTING\r
-       #define iptraceIP_TASK_STARTING()       do {} while( 0 )\r
-#endif\r
-\r
-#if( ( ipconfigUSE_TCP == 1 ) && !defined( ipTCP_TIMER_PERIOD_MS ) )\r
-       /* When initialising the TCP timer,\r
-       give it an initial time-out of 1 second. */\r
-       #define ipTCP_TIMER_PERIOD_MS   ( 1000 )\r
-#endif\r
-\r
-/* If ipconfigETHERNET_DRIVER_FILTERS_FRAME_TYPES is set to 1, then the Ethernet\r
-driver will filter incoming packets and only pass the stack those packets it\r
-considers need processing.  In this case ipCONSIDER_FRAME_FOR_PROCESSING() can\r
-be #defined away.  If ipconfigETHERNET_DRIVER_FILTERS_FRAME_TYPES is set to 0\r
-then the Ethernet driver will pass all received packets to the stack, and the\r
-stack must do the filtering itself.  In this case ipCONSIDER_FRAME_FOR_PROCESSING\r
-needs to call eConsiderFrameForProcessing. */\r
-#if ipconfigETHERNET_DRIVER_FILTERS_FRAME_TYPES == 0\r
-       #define ipCONSIDER_FRAME_FOR_PROCESSING( pucEthernetBuffer ) eConsiderFrameForProcessing( ( pucEthernetBuffer ) )\r
-#else\r
-       #define ipCONSIDER_FRAME_FOR_PROCESSING( pucEthernetBuffer ) eProcessBuffer\r
-#endif\r
-\r
-/* The character used to fill ICMP echo requests, and therefore also the\r
-character expected to fill ICMP echo replies. */\r
-#define ipECHO_DATA_FILL_BYTE                                          'x'\r
-\r
-#if( ipconfigBYTE_ORDER == pdFREERTOS_LITTLE_ENDIAN )\r
-       /* The bits in the two byte IP header field that make up the fragment offset value. */\r
-       #define ipFRAGMENT_OFFSET_BIT_MASK                              ( ( uint16_t ) 0xff0f )\r
-#else\r
-       /* The bits in the two byte IP header field that make up the fragment offset value. */\r
-       #define ipFRAGMENT_OFFSET_BIT_MASK                              ( ( uint16_t ) 0x0fff )\r
-#endif /* ipconfigBYTE_ORDER */\r
-\r
-/* The maximum time the IP task is allowed to remain in the Blocked state if no\r
-events are posted to the network event queue. */\r
-#ifndef        ipconfigMAX_IP_TASK_SLEEP_TIME\r
-       #define ipconfigMAX_IP_TASK_SLEEP_TIME ( pdMS_TO_TICKS( 10000UL ) )\r
-#endif\r
-\r
-/* When a new TCP connection is established, the value of\r
-'ulNextInitialSequenceNumber' will be used as the initial sequence number.  It\r
-is very important that at start-up, 'ulNextInitialSequenceNumber' contains a\r
-random value.  Also its value must be increased continuously in time, to prevent\r
-a third party guessing the next sequence number and take-over a TCP connection.\r
-It is advised to increment it by 1 ever 4us, which makes about 256 times\r
-per ms: */\r
-#define ipINITIAL_SEQUENCE_NUMBER_FACTOR       256UL\r
-\r
-/* Returned as the (invalid) checksum when the protocol being checked is not\r
-handled.  The value is chosen simply to be easy to spot when debugging. */\r
-#define ipUNHANDLED_PROTOCOL           0x4321u\r
-\r
-/* Returned to indicate a valid checksum when the checksum does not need to be\r
-calculated. */\r
-#define ipCORRECT_CRC                          0xffffu\r
-\r
-/* Returned as the (invalid) checksum when the length of the data being checked\r
-had an invalid length. */\r
-#define ipINVALID_LENGTH                       0x1234u\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-typedef struct xIP_TIMER\r
-{\r
-       uint32_t\r
-               bActive : 1,    /* This timer is running and must be processed. */\r
-               bExpired : 1;   /* Timer has expired and a task must be processed. */\r
-       TimeOut_t xTimeOut;\r
-       TickType_t ulRemainingTime;\r
-       TickType_t ulReloadTime;\r
-} IPTimer_t;\r
-\r
-/* Used in checksum calculation. */\r
-typedef union _xUnion32\r
-{\r
-       uint32_t u32;\r
-       uint16_t u16[ 2 ];\r
-       uint8_t u8[ 4 ];\r
-} xUnion32;\r
-\r
-/* Used in checksum calculation. */\r
-typedef union _xUnionPtr\r
-{\r
-       uint32_t *u32ptr;\r
-       uint16_t *u16ptr;\r
-       uint8_t *u8ptr;\r
-} xUnionPtr;\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-/*\r
- * The main TCP/IP stack processing task.  This task receives commands/events\r
- * from the network hardware drivers and tasks that are using sockets.  It also\r
- * maintains a set of protocol timers.\r
- */\r
-static void prvIPTask( void *pvParameters );\r
-\r
-/*\r
- * Called when new data is available from the network interface.\r
- */\r
-static void prvProcessEthernetPacket( NetworkBufferDescriptor_t * const pxNetworkBuffer );\r
-\r
-/*\r
- * Process incoming IP packets.\r
- */\r
-static eFrameProcessingResult_t prvProcessIPPacket( IPPacket_t * const pxIPPacket, NetworkBufferDescriptor_t * const pxNetworkBuffer );\r
-\r
-#if ( ipconfigREPLY_TO_INCOMING_PINGS == 1 ) || ( ipconfigSUPPORT_OUTGOING_PINGS == 1 )\r
-       /*\r
-        * Process incoming ICMP packets.\r
-        */\r
-       static eFrameProcessingResult_t prvProcessICMPPacket( ICMPPacket_t * const pxICMPPacket );\r
-#endif /* ( ipconfigREPLY_TO_INCOMING_PINGS == 1 ) || ( ipconfigSUPPORT_OUTGOING_PINGS == 1 ) */\r
-\r
-/*\r
- * Turns around an incoming ping request to convert it into a ping reply.\r
- */\r
-#if ( ipconfigREPLY_TO_INCOMING_PINGS == 1 )\r
-       static eFrameProcessingResult_t prvProcessICMPEchoRequest( ICMPPacket_t * const pxICMPPacket );\r
-#endif /* ipconfigREPLY_TO_INCOMING_PINGS */\r
-\r
-/*\r
- * Processes incoming ping replies.  The application callback function\r
- * vApplicationPingReplyHook() is called with the results.\r
- */\r
-#if ( ipconfigSUPPORT_OUTGOING_PINGS == 1 )\r
-       static void prvProcessICMPEchoReply( ICMPPacket_t * const pxICMPPacket );\r
-#endif /* ipconfigSUPPORT_OUTGOING_PINGS */\r
-\r
-/*\r
- * Called to create a network connection when the stack is first started, or\r
- * when the network connection is lost.\r
- */\r
-static void prvProcessNetworkDownEvent( void );\r
-\r
-/*\r
- * Checks the ARP, DHCP and TCP timers to see if any periodic or timeout\r
- * processing is required.\r
- */\r
-static void prvCheckNetworkTimers( void );\r
-\r
-/*\r
- * Determine how long the IP task can sleep for, which depends on when the next\r
- * periodic or timeout processing must be performed.\r
- */\r
-static TickType_t prvCalculateSleepTime( void );\r
-\r
-/*\r
- * The network card driver has received a packet.  In the case that it is part\r
- * of a linked packet chain, walk through it to handle every message.\r
- */\r
-static void prvHandleEthernetPacket( NetworkBufferDescriptor_t *pxBuffer );\r
-\r
-/*\r
- * Utility functions for the light weight IP timers.\r
- */\r
-static void prvIPTimerStart( IPTimer_t *pxTimer, TickType_t xTime );\r
-static BaseType_t prvIPTimerCheck( IPTimer_t *pxTimer );\r
-static void prvIPTimerReload( IPTimer_t *pxTimer, TickType_t xTime );\r
-\r
-static eFrameProcessingResult_t prvAllowIPPacket( const IPPacket_t * const pxIPPacket,\r
-       NetworkBufferDescriptor_t * const pxNetworkBuffer, UBaseType_t uxHeaderLength );\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-/* The queue used to pass events into the IP-task for processing. */\r
-QueueHandle_t xNetworkEventQueue = NULL;\r
-\r
-/*_RB_ Requires comment. */\r
-uint16_t usPacketIdentifier = 0U;\r
-\r
-/* For convenience, a MAC address of all 0xffs is defined const for quick\r
-reference. */\r
-const MACAddress_t xBroadcastMACAddress = { { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff } };\r
-\r
-/* Structure that stores the netmask, gateway address and DNS server addresses. */\r
-NetworkAddressingParameters_t xNetworkAddressing = { 0, 0, 0, 0, 0 };\r
-\r
-/* Default values for the above struct in case DHCP\r
-does not lead to a confirmed request. */\r
-NetworkAddressingParameters_t xDefaultAddressing = { 0, 0, 0, 0, 0 };\r
-\r
-/* Used to ensure network down events cannot be missed when they cannot be\r
-posted to the network event queue because the network event queue is already\r
-full. */\r
-static BaseType_t xNetworkDownEventPending = pdFALSE;\r
-\r
-/* Stores the handle of the task that handles the stack.  The handle is used\r
-(indirectly) by some utility function to determine if the utility function is\r
-being called by a task (in which case it is ok to block) or by the IP task\r
-itself (in which case it is not ok to block). */\r
-static TaskHandle_t xIPTaskHandle = NULL;\r
-\r
-#if( ipconfigUSE_TCP != 0 )\r
-       /* Set to a non-zero value if one or more TCP message have been processed\r
-       within the last round. */\r
-       static BaseType_t xProcessedTCPMessage;\r
-#endif\r
-\r
-/* Simple set to pdTRUE or pdFALSE depending on whether the network is up or\r
-down (connected, not connected) respectively. */\r
-static BaseType_t xNetworkUp = pdFALSE;\r
-\r
-/*\r
-A timer for each of the following processes, all of which need attention on a\r
-regular basis:\r
-       1. ARP, to check its table entries\r
-       2. DPHC, to send requests and to renew a reservation\r
-       3. TCP, to check for timeouts, resends\r
-       4. DNS, to check for timeouts when looking-up a domain.\r
- */\r
-static IPTimer_t xARPTimer;\r
-#if( ipconfigUSE_DHCP != 0 )\r
-       static IPTimer_t xDHCPTimer;\r
-#endif\r
-#if( ipconfigUSE_TCP != 0 )\r
-       static IPTimer_t xTCPTimer;\r
-#endif\r
-#if( ipconfigDNS_USE_CALLBACKS != 0 )\r
-       static IPTimer_t xDNSTimer;\r
-#endif\r
-\r
-/* Set to pdTRUE when the IP task is ready to start processing packets. */\r
-static BaseType_t xIPTaskInitialised = pdFALSE;\r
-\r
-#if( ipconfigCHECK_IP_QUEUE_SPACE != 0 )\r
-       /* Keep track of the lowest amount of space in 'xNetworkEventQueue'. */\r
-       static UBaseType_t uxQueueMinimumSpace = ipconfigEVENT_QUEUE_LENGTH;\r
-#endif\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvIPTask( void *pvParameters )\r
-{\r
-IPStackEvent_t xReceivedEvent;\r
-TickType_t xNextIPSleep;\r
-FreeRTOS_Socket_t *pxSocket;\r
-struct freertos_sockaddr xAddress;\r
-\r
-       /* Just to prevent compiler warnings about unused parameters. */\r
-       ( void ) pvParameters;\r
-\r
-       /* A possibility to set some additional task properties. */\r
-       iptraceIP_TASK_STARTING();\r
-\r
-       /* Generate a dummy message to say that the network connection has gone\r
-       down.  This will cause this task to initialise the network interface.  After\r
-       this it is the responsibility of the network interface hardware driver to\r
-       send this message if a previously connected network is disconnected. */\r
-       FreeRTOS_NetworkDown();\r
-\r
-       #if( ipconfigUSE_TCP == 1 )\r
-       {\r
-               /* Initialise the TCP timer. */\r
-               prvIPTimerReload( &xTCPTimer, pdMS_TO_TICKS( ipTCP_TIMER_PERIOD_MS ) );\r
-       }\r
-       #endif\r
-\r
-       /* Initialisation is complete and events can now be processed. */\r
-       xIPTaskInitialised = pdTRUE;\r
-\r
-       FreeRTOS_debug_printf( ( "prvIPTask started\n" ) );\r
-\r
-       /* Loop, processing IP events. */\r
-       for( ;; )\r
-       {\r
-               ipconfigWATCHDOG_TIMER();\r
-\r
-               /* Check the ARP, DHCP and TCP timers to see if there is any periodic\r
-               or timeout processing to perform. */\r
-               prvCheckNetworkTimers();\r
-\r
-               /* Calculate the acceptable maximum sleep time. */\r
-               xNextIPSleep = prvCalculateSleepTime();\r
-\r
-               /* Wait until there is something to do. If the following call exits\r
-                * due to a time out rather than a message being received, set a\r
-                * 'NoEvent' value. */\r
-               if ( xQueueReceive( xNetworkEventQueue, ( void * ) &xReceivedEvent, xNextIPSleep ) == pdFALSE ) \r
-               {\r
-                       xReceivedEvent.eEventType = eNoEvent;\r
-               }\r
-\r
-               #if( ipconfigCHECK_IP_QUEUE_SPACE != 0 )\r
-               {\r
-                       if( xReceivedEvent.eEventType != eNoEvent )\r
-                       {\r
-                       UBaseType_t uxCount;\r
-\r
-                               uxCount = uxQueueSpacesAvailable( xNetworkEventQueue );\r
-                               if( uxQueueMinimumSpace > uxCount )\r
-                               {\r
-                                       uxQueueMinimumSpace = uxCount;\r
-                               }\r
-                       }\r
-               }\r
-               #endif /* ipconfigCHECK_IP_QUEUE_SPACE */\r
-\r
-               iptraceNETWORK_EVENT_RECEIVED( xReceivedEvent.eEventType );\r
-\r
-               switch( xReceivedEvent.eEventType )\r
-               {\r
-                       case eNetworkDownEvent :\r
-                               /* Attempt to establish a connection. */\r
-                               xNetworkUp = pdFALSE;\r
-                               prvProcessNetworkDownEvent();\r
-                               break;\r
-\r
-                       case eNetworkRxEvent:\r
-                               /* The network hardware driver has received a new packet.  A\r
-                               pointer to the received buffer is located in the pvData member\r
-                               of the received event structure. */\r
-                               prvHandleEthernetPacket( ( NetworkBufferDescriptor_t * ) ( xReceivedEvent.pvData ) );\r
-                               break;\r
-\r
-                       case eNetworkTxEvent:\r
-                               /* Send a network packet. The ownership will  be transferred to\r
-                               the driver, which will release it after delivery. */\r
-                               xNetworkInterfaceOutput( ( NetworkBufferDescriptor_t * ) ( xReceivedEvent.pvData ), pdTRUE );\r
-                               break;\r
-\r
-                       case eARPTimerEvent :\r
-                               /* The ARP timer has expired, process the ARP cache. */\r
-                               vARPAgeCache();\r
-                               break;\r
-\r
-                       case eSocketBindEvent:\r
-                               /* FreeRTOS_bind (a user API) wants the IP-task to bind a socket\r
-                               to a port. The port number is communicated in the socket field\r
-                               usLocalPort. vSocketBind() will actually bind the socket and the\r
-                               API will unblock as soon as the eSOCKET_BOUND event is\r
-                               triggered. */\r
-                               pxSocket = ( FreeRTOS_Socket_t * ) ( xReceivedEvent.pvData );\r
-                               xAddress.sin_addr = 0u; /* For the moment. */\r
-                               xAddress.sin_port = FreeRTOS_ntohs( pxSocket->usLocalPort );\r
-                               pxSocket->usLocalPort = 0u;\r
-                               vSocketBind( pxSocket, &xAddress, sizeof( xAddress ), pdFALSE );\r
-\r
-                               /* Before 'eSocketBindEvent' was sent it was tested that\r
-                               ( xEventGroup != NULL ) so it can be used now to wake up the\r
-                               user. */\r
-                               pxSocket->xEventBits |= eSOCKET_BOUND;\r
-                               vSocketWakeUpUser( pxSocket );\r
-                               break;\r
-\r
-                       case eSocketCloseEvent :\r
-                               /* The user API FreeRTOS_closesocket() has sent a message to the\r
-                               IP-task to actually close a socket. This is handled in\r
-                               vSocketClose().  As the socket gets closed, there is no way to\r
-                               report back to the API, so the API won't wait for the result */\r
-                               vSocketClose( ( FreeRTOS_Socket_t * ) ( xReceivedEvent.pvData ) );\r
-                               break;\r
-\r
-                       case eStackTxEvent :\r
-                               /* The network stack has generated a packet to send.  A\r
-                               pointer to the generated buffer is located in the pvData\r
-                               member of the received event structure. */\r
-                               vProcessGeneratedUDPPacket( ( NetworkBufferDescriptor_t * ) ( xReceivedEvent.pvData ) );\r
-                               break;\r
-\r
-                       case eDHCPEvent:\r
-                               /* The DHCP state machine needs processing. */\r
-                               #if( ipconfigUSE_DHCP == 1 )\r
-                               {\r
-                                       vDHCPProcess( pdFALSE );\r
-                               }\r
-                               #endif /* ipconfigUSE_DHCP */\r
-                               break;\r
-\r
-                       case eSocketSelectEvent :\r
-                               /* FreeRTOS_select() has got unblocked by a socket event,\r
-                               vSocketSelect() will check which sockets actually have an event\r
-                               and update the socket field xSocketBits. */\r
-                               #if( ipconfigSUPPORT_SELECT_FUNCTION == 1 )\r
-                               {\r
-                                       vSocketSelect( ( SocketSelect_t * ) ( xReceivedEvent.pvData ) );\r
-                               }\r
-                               #endif /* ipconfigSUPPORT_SELECT_FUNCTION == 1 */\r
-                               break;\r
-\r
-                       case eSocketSignalEvent :\r
-                               #if( ipconfigSUPPORT_SIGNALS != 0 )\r
-                               {\r
-                                       /* Some task wants to signal the user of this socket in\r
-                                       order to interrupt a call to recv() or a call to select(). */\r
-                                       FreeRTOS_SignalSocket( ( Socket_t ) xReceivedEvent.pvData );\r
-                               }\r
-                               #endif /* ipconfigSUPPORT_SIGNALS */\r
-                               break;\r
-\r
-                       case eTCPTimerEvent :\r
-                               #if( ipconfigUSE_TCP == 1 )\r
-                               {\r
-                                       /* Simply mark the TCP timer as expired so it gets processed\r
-                                       the next time prvCheckNetworkTimers() is called. */\r
-                                       xTCPTimer.bExpired = pdTRUE_UNSIGNED;\r
-                               }\r
-                               #endif /* ipconfigUSE_TCP */\r
-                               break;\r
-\r
-                       case eTCPAcceptEvent:\r
-                               /* The API FreeRTOS_accept() was called, the IP-task will now\r
-                               check if the listening socket (communicated in pvData) actually\r
-                               received a new connection. */\r
-                               #if( ipconfigUSE_TCP == 1 )\r
-                               {\r
-                                       pxSocket = ( FreeRTOS_Socket_t * ) ( xReceivedEvent.pvData );\r
-\r
-                                       if( xTCPCheckNewClient( pxSocket ) != pdFALSE )\r
-                                       {\r
-                                               pxSocket->xEventBits |= eSOCKET_ACCEPT;\r
-                                               vSocketWakeUpUser( pxSocket );\r
-                                       }\r
-                               }\r
-                               #endif /* ipconfigUSE_TCP */\r
-                               break;\r
-\r
-                       case eTCPNetStat:\r
-                               /* FreeRTOS_netstat() was called to have the IP-task print an\r
-                               overview of all sockets and their connections */\r
-                               #if( ( ipconfigUSE_TCP == 1 ) && ( ipconfigHAS_PRINTF == 1 ) )\r
-                               {\r
-                                       vTCPNetStat();\r
-                               }\r
-                               #endif /* ipconfigUSE_TCP */\r
-                               break;\r
-\r
-                       default :\r
-                               /* Should not get here. */\r
-                               break;\r
-               }\r
-\r
-               if( xNetworkDownEventPending != pdFALSE )\r
-               {\r
-                       /* A network down event could not be posted to the network event\r
-                       queue because the queue was full.  Try posting again. */\r
-                       FreeRTOS_NetworkDown();\r
-               }\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-BaseType_t xIsCallingFromIPTask( void )\r
-{\r
-BaseType_t xReturn;\r
-\r
-       if( xTaskGetCurrentTaskHandle() == xIPTaskHandle )\r
-       {\r
-               xReturn = pdTRUE;\r
-       }\r
-       else\r
-       {\r
-               xReturn = pdFALSE;\r
-       }\r
-\r
-       return xReturn;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvHandleEthernetPacket( NetworkBufferDescriptor_t *pxBuffer )\r
-{\r
-       #if( ipconfigUSE_LINKED_RX_MESSAGES == 0 )\r
-       {\r
-               /* When ipconfigUSE_LINKED_RX_MESSAGES is not set to 0 then only one\r
-               buffer will be sent at a time.  This is the default way for +TCP to pass\r
-               messages from the MAC to the TCP/IP stack. */\r
-               prvProcessEthernetPacket( pxBuffer );\r
-       }\r
-       #else /* ipconfigUSE_LINKED_RX_MESSAGES */\r
-       {\r
-       NetworkBufferDescriptor_t *pxNextBuffer;\r
-\r
-               /* An optimisation that is useful when there is high network traffic.\r
-               Instead of passing received packets into the IP task one at a time the\r
-               network interface can chain received packets together and pass them into\r
-               the IP task in one go.  The packets are chained using the pxNextBuffer\r
-               member.  The loop below walks through the chain processing each packet\r
-               in the chain in turn. */\r
-               do\r
-               {\r
-                       /* Store a pointer to the buffer after pxBuffer for use later on. */\r
-                       pxNextBuffer = pxBuffer->pxNextBuffer;\r
-\r
-                       /* Make it NULL to avoid using it later on. */\r
-                       pxBuffer->pxNextBuffer = NULL;\r
-\r
-                       prvProcessEthernetPacket( pxBuffer );\r
-                       pxBuffer = pxNextBuffer;\r
-\r
-               /* While there is another packet in the chain. */\r
-               } while( pxBuffer != NULL );\r
-       }\r
-       #endif /* ipconfigUSE_LINKED_RX_MESSAGES */\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static TickType_t prvCalculateSleepTime( void )\r
-{\r
-TickType_t xMaximumSleepTime;\r
-\r
-       /* Start with the maximum sleep time, then check this against the remaining\r
-       time in any other timers that are active. */\r
-       xMaximumSleepTime = ipconfigMAX_IP_TASK_SLEEP_TIME;\r
-\r
-       if( xARPTimer.bActive != pdFALSE_UNSIGNED )\r
-       {\r
-               if( xARPTimer.ulRemainingTime < xMaximumSleepTime )\r
-               {\r
-                       xMaximumSleepTime = xARPTimer.ulReloadTime;\r
-               }\r
-       }\r
-\r
-       #if( ipconfigUSE_DHCP == 1 )\r
-       {\r
-               if( xDHCPTimer.bActive != pdFALSE_UNSIGNED )\r
-               {\r
-                       if( xDHCPTimer.ulRemainingTime < xMaximumSleepTime )\r
-                       {\r
-                               xMaximumSleepTime = xDHCPTimer.ulRemainingTime;\r
-                       }\r
-               }\r
-       }\r
-       #endif /* ipconfigUSE_DHCP */\r
-\r
-       #if( ipconfigUSE_TCP == 1 )\r
-       {\r
-               if( xTCPTimer.ulRemainingTime < xMaximumSleepTime )\r
-               {\r
-                       xMaximumSleepTime = xTCPTimer.ulRemainingTime;\r
-               }\r
-       }\r
-       #endif\r
-\r
-       #if( ipconfigDNS_USE_CALLBACKS != 0 )\r
-       {\r
-               if( xDNSTimer.bActive != pdFALSE )\r
-               {\r
-                       if( xDNSTimer.ulRemainingTime < xMaximumSleepTime )\r
-                       {\r
-                               xMaximumSleepTime = xDNSTimer.ulRemainingTime;\r
-                       }\r
-               }\r
-       }\r
-       #endif\r
-\r
-       return xMaximumSleepTime;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvCheckNetworkTimers( void )\r
-{\r
-       /* Is it time for ARP processing? */\r
-       if( prvIPTimerCheck( &xARPTimer ) != pdFALSE )\r
-       {\r
-               xSendEventToIPTask( eARPTimerEvent );\r
-       }\r
-\r
-       #if( ipconfigUSE_DHCP == 1 )\r
-       {\r
-               /* Is it time for DHCP processing? */\r
-               if( prvIPTimerCheck( &xDHCPTimer ) != pdFALSE )\r
-               {\r
-                       xSendEventToIPTask( eDHCPEvent );\r
-               }\r
-       }\r
-       #endif /* ipconfigUSE_DHCP */\r
-\r
-       #if( ipconfigDNS_USE_CALLBACKS != 0 )\r
-       {\r
-       extern void vDNSCheckCallBack( void *pvSearchID );\r
-\r
-               /* Is it time for DNS processing? */\r
-               if( prvIPTimerCheck( &xDNSTimer ) != pdFALSE )\r
-               {\r
-                       vDNSCheckCallBack( NULL );\r
-               }\r
-       }\r
-       #endif /* ipconfigDNS_USE_CALLBACKS */\r
-\r
-       #if( ipconfigUSE_TCP == 1 )\r
-       {\r
-       BaseType_t xWillSleep;\r
-       TickType_t xNextTime;\r
-       BaseType_t xCheckTCPSockets;\r
-\r
-               if( uxQueueMessagesWaiting( xNetworkEventQueue ) == 0u )\r
-               {\r
-                       xWillSleep = pdTRUE;\r
-               }\r
-               else\r
-               {\r
-                       xWillSleep = pdFALSE;\r
-               }\r
-\r
-               /* Sockets need to be checked if the TCP timer has expired. */\r
-               xCheckTCPSockets = prvIPTimerCheck( &xTCPTimer );\r
-\r
-               /* Sockets will also be checked if there are TCP messages but the\r
-               message queue is empty (indicated by xWillSleep being true). */\r
-               if( ( xProcessedTCPMessage != pdFALSE ) && ( xWillSleep != pdFALSE ) )\r
-               {\r
-                       xCheckTCPSockets = pdTRUE;\r
-               }\r
-\r
-               if( xCheckTCPSockets != pdFALSE )\r
-               {\r
-                       /* Attend to the sockets, returning the period after which the\r
-                       check must be repeated. */\r
-                       xNextTime = xTCPTimerCheck( xWillSleep );\r
-                       prvIPTimerStart( &xTCPTimer, xNextTime );\r
-                       xProcessedTCPMessage = 0;\r
-               }\r
-       }\r
-       #endif /* ipconfigUSE_TCP == 1 */\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvIPTimerStart( IPTimer_t *pxTimer, TickType_t xTime )\r
-{\r
-       vTaskSetTimeOutState( &pxTimer->xTimeOut );\r
-       pxTimer->ulRemainingTime = xTime;\r
-\r
-       if( xTime == ( TickType_t ) 0 )\r
-       {\r
-               pxTimer->bExpired = pdTRUE_UNSIGNED;\r
-       }\r
-       else\r
-       {\r
-               pxTimer->bExpired = pdFALSE_UNSIGNED;\r
-       }\r
-\r
-       pxTimer->bActive = pdTRUE_UNSIGNED;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvIPTimerReload( IPTimer_t *pxTimer, TickType_t xTime )\r
-{\r
-       pxTimer->ulReloadTime = xTime;\r
-       prvIPTimerStart( pxTimer, xTime );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static BaseType_t prvIPTimerCheck( IPTimer_t *pxTimer )\r
-{\r
-BaseType_t xReturn;\r
-\r
-       if( pxTimer->bActive == pdFALSE_UNSIGNED )\r
-       {\r
-               /* The timer is not enabled. */\r
-               xReturn = pdFALSE;\r
-       }\r
-       else\r
-       {\r
-               /* The timer might have set the bExpired flag already, if not, check the\r
-               value of xTimeOut against ulRemainingTime. */\r
-               if( ( pxTimer->bExpired != pdFALSE_UNSIGNED ) ||\r
-                       ( xTaskCheckForTimeOut( &( pxTimer->xTimeOut ), &( pxTimer->ulRemainingTime ) ) != pdFALSE ) )\r
-               {\r
-                       prvIPTimerStart( pxTimer, pxTimer->ulReloadTime );\r
-                       xReturn = pdTRUE;\r
-               }\r
-               else\r
-               {\r
-                       xReturn = pdFALSE;\r
-               }\r
-       }\r
-\r
-       return xReturn;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-void FreeRTOS_NetworkDown( void )\r
-{\r
-static const IPStackEvent_t xNetworkDownEvent = { eNetworkDownEvent, NULL };\r
-const TickType_t xDontBlock = ( TickType_t ) 0;\r
-\r
-       /* Simply send the network task the appropriate event. */\r
-       if( xSendEventStructToIPTask( &xNetworkDownEvent, xDontBlock ) != pdPASS )\r
-       {\r
-               /* Could not send the message, so it is still pending. */\r
-               xNetworkDownEventPending = pdTRUE;\r
-       }\r
-       else\r
-       {\r
-               /* Message was sent so it is not pending. */\r
-               xNetworkDownEventPending = pdFALSE;\r
-       }\r
-\r
-       iptraceNETWORK_DOWN();\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-BaseType_t FreeRTOS_NetworkDownFromISR( void )\r
-{\r
-static const IPStackEvent_t xNetworkDownEvent = { eNetworkDownEvent, NULL };\r
-BaseType_t xHigherPriorityTaskWoken = pdFALSE;\r
-\r
-       /* Simply send the network task the appropriate event. */\r
-       if( xQueueSendToBackFromISR( xNetworkEventQueue, &xNetworkDownEvent, &xHigherPriorityTaskWoken ) != pdPASS )\r
-       {\r
-               xNetworkDownEventPending = pdTRUE;\r
-       }\r
-       else\r
-       {\r
-               xNetworkDownEventPending = pdFALSE;\r
-       }\r
-\r
-       iptraceNETWORK_DOWN();\r
-\r
-       return xHigherPriorityTaskWoken;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-void *FreeRTOS_GetUDPPayloadBuffer( size_t xRequestedSizeBytes, TickType_t xBlockTimeTicks )\r
-{\r
-NetworkBufferDescriptor_t *pxNetworkBuffer;\r
-void *pvReturn;\r
-\r
-       /* Cap the block time.  The reason for this is explained where\r
-       ipconfigUDP_MAX_SEND_BLOCK_TIME_TICKS is defined (assuming an official\r
-       FreeRTOSIPConfig.h header file is being used). */\r
-       if( xBlockTimeTicks > ipconfigUDP_MAX_SEND_BLOCK_TIME_TICKS )\r
-       {\r
-               xBlockTimeTicks = ipconfigUDP_MAX_SEND_BLOCK_TIME_TICKS;\r
-       }\r
-\r
-       /* Obtain a network buffer with the required amount of storage. */\r
-       pxNetworkBuffer = pxGetNetworkBufferWithDescriptor( sizeof( UDPPacket_t ) + xRequestedSizeBytes, xBlockTimeTicks );\r
-\r
-       if( pxNetworkBuffer != NULL )\r
-       {\r
-               /* Set the actual packet size in case a bigger buffer was returned. */\r
-               pxNetworkBuffer->xDataLength = sizeof( UDPPacket_t ) + xRequestedSizeBytes;\r
-\r
-               /* Leave space for the UPD header. */\r
-               pvReturn = ( void * ) &( pxNetworkBuffer->pucEthernetBuffer[ ipUDP_PAYLOAD_OFFSET_IPv4 ] );\r
-       }\r
-       else\r
-       {\r
-               pvReturn = NULL;\r
-       }\r
-\r
-       return ( void * ) pvReturn;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-NetworkBufferDescriptor_t *pxDuplicateNetworkBufferWithDescriptor( NetworkBufferDescriptor_t * const pxNetworkBuffer,\r
-       size_t uxNewLength )\r
-{\r
-NetworkBufferDescriptor_t * pxNewBuffer;\r
-\r
-       /* This function is only used when 'ipconfigZERO_COPY_TX_DRIVER' is set to 1.\r
-       The transmit routine wants to have ownership of the network buffer\r
-       descriptor, because it will pass the buffer straight to DMA. */\r
-       pxNewBuffer = pxGetNetworkBufferWithDescriptor( uxNewLength, ( TickType_t ) 0 );\r
-\r
-       if( pxNewBuffer != NULL )\r
-       {\r
-               /* Set the actual packet size in case a bigger buffer than requested\r
-               was returned. */\r
-               pxNewBuffer->xDataLength = uxNewLength;\r
-\r
-               /* Copy the original packet information. */\r
-               pxNewBuffer->ulIPAddress = pxNetworkBuffer->ulIPAddress;\r
-               pxNewBuffer->usPort = pxNetworkBuffer->usPort;\r
-               pxNewBuffer->usBoundPort = pxNetworkBuffer->usBoundPort;\r
-               memcpy( pxNewBuffer->pucEthernetBuffer, pxNetworkBuffer->pucEthernetBuffer, pxNetworkBuffer->xDataLength );\r
-       }\r
-\r
-       return pxNewBuffer;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigZERO_COPY_TX_DRIVER != 0 ) || ( ipconfigZERO_COPY_RX_DRIVER != 0 )\r
-\r
-       NetworkBufferDescriptor_t *pxPacketBuffer_to_NetworkBuffer( const void *pvBuffer )\r
-       {\r
-       uint8_t *pucBuffer;\r
-       NetworkBufferDescriptor_t *pxResult;\r
-\r
-               if( pvBuffer == NULL )\r
-               {\r
-                       pxResult = NULL;\r
-               }\r
-               else\r
-               {\r
-                       /* Obtain the network buffer from the zero copy pointer. */\r
-                       pucBuffer = ( uint8_t * ) pvBuffer;\r
-\r
-                       /* The input here is a pointer to a payload buffer.  Subtract the\r
-                       size of the header in the network buffer, usually 8 + 2 bytes. */\r
-                       pucBuffer -= ipBUFFER_PADDING;\r
-\r
-                       /* Here a pointer was placed to the network descriptor.  As a\r
-                       pointer is dereferenced, make sure it is well aligned. */\r
-                       if( ( ( ( uint32_t ) pucBuffer ) & ( sizeof( pucBuffer ) - ( size_t ) 1 ) ) == ( uint32_t ) 0 )\r
-                       {\r
-                               pxResult = * ( ( NetworkBufferDescriptor_t ** ) pucBuffer );\r
-                       }\r
-                       else\r
-                       {\r
-                               pxResult = NULL;\r
-                       }\r
-               }\r
-\r
-               return pxResult;\r
-       }\r
-\r
-#endif /* ipconfigZERO_COPY_TX_DRIVER != 0 */\r
-/*-----------------------------------------------------------*/\r
-\r
-NetworkBufferDescriptor_t *pxUDPPayloadBuffer_to_NetworkBuffer( void *pvBuffer )\r
-{\r
-uint8_t *pucBuffer;\r
-NetworkBufferDescriptor_t *pxResult;\r
-\r
-       if( pvBuffer == NULL )\r
-       {\r
-               pxResult = NULL;\r
-       }\r
-       else\r
-       {\r
-               /* Obtain the network buffer from the zero copy pointer. */\r
-               pucBuffer = ( uint8_t * ) pvBuffer;\r
-\r
-               /* The input here is a pointer to a payload buffer.  Subtract\r
-               the total size of a UDP/IP header plus the size of the header in\r
-               the network buffer, usually 8 + 2 bytes. */\r
-               pucBuffer -= ( sizeof( UDPPacket_t ) + ipBUFFER_PADDING );\r
-\r
-               /* Here a pointer was placed to the network descriptor,\r
-               As a pointer is dereferenced, make sure it is well aligned */\r
-               if( ( ( ( uint32_t ) pucBuffer ) & ( sizeof( pucBuffer ) - 1 ) ) == 0 )\r
-               {\r
-                       /* The following statement may trigger a:\r
-                       warning: cast increases required alignment of target type [-Wcast-align].\r
-                       It has been confirmed though that the alignment is suitable. */\r
-                       pxResult = * ( ( NetworkBufferDescriptor_t ** ) pucBuffer );\r
-               }\r
-               else\r
-               {\r
-                       pxResult = NULL;\r
-               }\r
-       }\r
-\r
-       return pxResult;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-void FreeRTOS_ReleaseUDPPayloadBuffer( void *pvBuffer )\r
-{\r
-       vReleaseNetworkBufferAndDescriptor( pxUDPPayloadBuffer_to_NetworkBuffer( pvBuffer ) );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-/*_RB_ Should we add an error or assert if the task priorities are set such that the servers won't function as expected? */\r
-/*_HT_ There was a bug in FreeRTOS_TCP_IP.c that only occurred when the applications' priority was too high.\r
- As that bug has been repaired, there is not an urgent reason to warn.\r
- It is better though to use the advised priority scheme. */\r
-BaseType_t FreeRTOS_IPInit( const uint8_t ucIPAddress[ ipIP_ADDRESS_LENGTH_BYTES ], const uint8_t ucNetMask[ ipIP_ADDRESS_LENGTH_BYTES ], const uint8_t ucGatewayAddress[ ipIP_ADDRESS_LENGTH_BYTES ], const uint8_t ucDNSServerAddress[ ipIP_ADDRESS_LENGTH_BYTES ], const uint8_t ucMACAddress[ ipMAC_ADDRESS_LENGTH_BYTES ] )\r
-{\r
-BaseType_t xReturn = pdFALSE;\r
-\r
-       /* This function should only be called once. */\r
-       configASSERT( xIPIsNetworkTaskReady() == pdFALSE );\r
-       configASSERT( xNetworkEventQueue == NULL );\r
-       configASSERT( xIPTaskHandle == NULL );\r
-\r
-       /* Check structure packing is correct. */\r
-       configASSERT( sizeof( EthernetHeader_t ) == ipEXPECTED_EthernetHeader_t_SIZE );\r
-       configASSERT( sizeof( ARPHeader_t ) == ipEXPECTED_ARPHeader_t_SIZE );\r
-       configASSERT( sizeof( IPHeader_t ) == ipEXPECTED_IPHeader_t_SIZE );\r
-       configASSERT( sizeof( ICMPHeader_t ) == ipEXPECTED_ICMPHeader_t_SIZE );\r
-       configASSERT( sizeof( UDPHeader_t ) == ipEXPECTED_UDPHeader_t_SIZE );\r
-\r
-       /* Attempt to create the queue used to communicate with the IP task. */\r
-       xNetworkEventQueue = xQueueCreate( ( UBaseType_t ) ipconfigEVENT_QUEUE_LENGTH, ( UBaseType_t ) sizeof( IPStackEvent_t ) );\r
-       configASSERT( xNetworkEventQueue );\r
-\r
-       if( xNetworkEventQueue != NULL )\r
-       {\r
-               #if ( configQUEUE_REGISTRY_SIZE > 0 )\r
-               {\r
-                       /* A queue registry is normally used to assist a kernel aware\r
-                       debugger.  If one is in use then it will be helpful for the debugger\r
-                       to show information about the network event queue. */\r
-                       vQueueAddToRegistry( xNetworkEventQueue, "NetEvnt" );\r
-               }\r
-               #endif /* configQUEUE_REGISTRY_SIZE */\r
-\r
-               if( xNetworkBuffersInitialise() == pdPASS )\r
-               {\r
-                       /* Store the local IP and MAC address. */\r
-                       xNetworkAddressing.ulDefaultIPAddress = FreeRTOS_inet_addr_quick( ucIPAddress[ 0 ], ucIPAddress[ 1 ], ucIPAddress[ 2 ], ucIPAddress[ 3 ] );\r
-                       xNetworkAddressing.ulNetMask = FreeRTOS_inet_addr_quick( ucNetMask[ 0 ], ucNetMask[ 1 ], ucNetMask[ 2 ], ucNetMask[ 3 ] );\r
-                       xNetworkAddressing.ulGatewayAddress = FreeRTOS_inet_addr_quick( ucGatewayAddress[ 0 ], ucGatewayAddress[ 1 ], ucGatewayAddress[ 2 ], ucGatewayAddress[ 3 ] );\r
-                       xNetworkAddressing.ulDNSServerAddress = FreeRTOS_inet_addr_quick( ucDNSServerAddress[ 0 ], ucDNSServerAddress[ 1 ], ucDNSServerAddress[ 2 ], ucDNSServerAddress[ 3 ] );\r
-                       xNetworkAddressing.ulBroadcastAddress = ( xNetworkAddressing.ulDefaultIPAddress & xNetworkAddressing.ulNetMask ) |  ~xNetworkAddressing.ulNetMask;\r
-\r
-                       memcpy( &xDefaultAddressing, &xNetworkAddressing, sizeof( xDefaultAddressing ) );\r
-\r
-                       #if ipconfigUSE_DHCP == 1\r
-                       {\r
-                               /* The IP address is not set until DHCP completes. */\r
-                               *ipLOCAL_IP_ADDRESS_POINTER = 0x00UL;\r
-                       }\r
-                       #else\r
-                       {\r
-                               /* The IP address is set from the value passed in. */\r
-                               *ipLOCAL_IP_ADDRESS_POINTER = xNetworkAddressing.ulDefaultIPAddress;\r
-\r
-                               /* Added to prevent ARP flood to gateway.  Ensure the\r
-                               gateway is on the same subnet as the IP address. */\r
-                               if( xNetworkAddressing.ulGatewayAddress != 0ul )\r
-                               {\r
-                                       configASSERT( ( ( *ipLOCAL_IP_ADDRESS_POINTER ) & xNetworkAddressing.ulNetMask ) == ( xNetworkAddressing.ulGatewayAddress & xNetworkAddressing.ulNetMask ) );\r
-                               }\r
-                       }\r
-                       #endif /* ipconfigUSE_DHCP == 1 */\r
-\r
-                       /* The MAC address is stored in the start of the default packet\r
-                       header fragment, which is used when sending UDP packets. */\r
-                       memcpy( ( void * ) ipLOCAL_MAC_ADDRESS, ( void * ) ucMACAddress, ( size_t ) ipMAC_ADDRESS_LENGTH_BYTES );\r
-\r
-                       /* Prepare the sockets interface. */\r
-                       xReturn = vNetworkSocketsInit();\r
-\r
-                       if( pdTRUE == xReturn )\r
-                       {\r
-                               /* Create the task that processes Ethernet and stack events. */\r
-                               xReturn = xTaskCreate( prvIPTask, "IP-task", ( uint16_t )ipconfigIP_TASK_STACK_SIZE_WORDS, NULL, ( UBaseType_t )ipconfigIP_TASK_PRIORITY, &xIPTaskHandle );\r
-                       }\r
-               }\r
-               else\r
-               {\r
-                       FreeRTOS_debug_printf( ( "FreeRTOS_IPInit: xNetworkBuffersInitialise() failed\n") );\r
-\r
-                       /* Clean up. */\r
-                       vQueueDelete( xNetworkEventQueue );\r
-                       xNetworkEventQueue = NULL;\r
-               }\r
-       }\r
-       else\r
-       {\r
-               FreeRTOS_debug_printf( ( "FreeRTOS_IPInit: Network event queue could not be created\n") );\r
-       }\r
-\r
-       return xReturn;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-void FreeRTOS_GetAddressConfiguration( uint32_t *pulIPAddress, uint32_t *pulNetMask, uint32_t *pulGatewayAddress, uint32_t *pulDNSServerAddress )\r
-{\r
-       /* Return the address configuration to the caller. */\r
-\r
-       if( pulIPAddress != NULL )\r
-       {\r
-               *pulIPAddress = *ipLOCAL_IP_ADDRESS_POINTER;\r
-       }\r
-\r
-       if( pulNetMask != NULL )\r
-       {\r
-               *pulNetMask = xNetworkAddressing.ulNetMask;\r
-       }\r
-\r
-       if( pulGatewayAddress != NULL )\r
-       {\r
-               *pulGatewayAddress = xNetworkAddressing.ulGatewayAddress;\r
-       }\r
-\r
-       if( pulDNSServerAddress != NULL )\r
-       {\r
-               *pulDNSServerAddress = xNetworkAddressing.ulDNSServerAddress;\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-void FreeRTOS_SetAddressConfiguration( const uint32_t *pulIPAddress, const uint32_t *pulNetMask, const uint32_t *pulGatewayAddress, const uint32_t *pulDNSServerAddress )\r
-{\r
-       /* Update the address configuration. */\r
-\r
-       if( pulIPAddress != NULL )\r
-       {\r
-               *ipLOCAL_IP_ADDRESS_POINTER = *pulIPAddress;\r
-       }\r
-\r
-       if( pulNetMask != NULL )\r
-       {\r
-               xNetworkAddressing.ulNetMask = *pulNetMask;\r
-       }\r
-\r
-       if( pulGatewayAddress != NULL )\r
-       {\r
-               xNetworkAddressing.ulGatewayAddress = *pulGatewayAddress;\r
-       }\r
-\r
-       if( pulDNSServerAddress != NULL )\r
-       {\r
-               xNetworkAddressing.ulDNSServerAddress = *pulDNSServerAddress;\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-#if ( ipconfigSUPPORT_OUTGOING_PINGS == 1 )\r
-\r
-       BaseType_t FreeRTOS_SendPingRequest( uint32_t ulIPAddress, size_t xNumberOfBytesToSend, TickType_t xBlockTimeTicks )\r
-       {\r
-       NetworkBufferDescriptor_t *pxNetworkBuffer;\r
-       ICMPHeader_t *pxICMPHeader;\r
-       BaseType_t xReturn = pdFAIL;\r
-       static uint16_t usSequenceNumber = 0;\r
-       uint8_t *pucChar;\r
-       IPStackEvent_t xStackTxEvent = { eStackTxEvent, NULL };\r
-\r
-               if( (xNumberOfBytesToSend >= 1 ) && ( xNumberOfBytesToSend < ( ( ipconfigNETWORK_MTU - sizeof( IPHeader_t ) ) - sizeof( ICMPHeader_t ) ) ) && ( uxGetNumberOfFreeNetworkBuffers() >= 3 ) )\r
-               {\r
-                       pxNetworkBuffer = pxGetNetworkBufferWithDescriptor( xNumberOfBytesToSend + sizeof( ICMPPacket_t ), xBlockTimeTicks );\r
-\r
-                       if( pxNetworkBuffer != NULL )\r
-                       {\r
-                               pxICMPHeader = ( ICMPHeader_t * ) &( pxNetworkBuffer->pucEthernetBuffer[ ipIP_PAYLOAD_OFFSET ] );\r
-                               usSequenceNumber++;\r
-\r
-                               /* Fill in the basic header information. */\r
-                               pxICMPHeader->ucTypeOfMessage = ipICMP_ECHO_REQUEST;\r
-                               pxICMPHeader->ucTypeOfService = 0;\r
-                               pxICMPHeader->usIdentifier = usSequenceNumber;\r
-                               pxICMPHeader->usSequenceNumber = usSequenceNumber;\r
-\r
-                               /* Find the start of the data. */\r
-                               pucChar = ( uint8_t * ) pxICMPHeader;\r
-                               pucChar += sizeof( ICMPHeader_t );\r
-\r
-                               /* Just memset the data to a fixed value. */\r
-                               memset( ( void * ) pucChar, ( int ) ipECHO_DATA_FILL_BYTE, xNumberOfBytesToSend );\r
-\r
-                               /* The message is complete, IP and checksum's are handled by\r
-                               vProcessGeneratedUDPPacket */\r
-                               pxNetworkBuffer->pucEthernetBuffer[ ipSOCKET_OPTIONS_OFFSET ] = FREERTOS_SO_UDPCKSUM_OUT;\r
-                               pxNetworkBuffer->ulIPAddress = ulIPAddress;\r
-                               pxNetworkBuffer->usPort = ipPACKET_CONTAINS_ICMP_DATA;\r
-                               /* xDataLength is the size of the total packet, including the Ethernet header. */\r
-                               pxNetworkBuffer->xDataLength = xNumberOfBytesToSend + sizeof( ICMPPacket_t );\r
-\r
-                               /* Send to the stack. */\r
-                               xStackTxEvent.pvData = pxNetworkBuffer;\r
-\r
-                               if( xSendEventStructToIPTask( &xStackTxEvent, xBlockTimeTicks) != pdPASS )\r
-                               {\r
-                                       vReleaseNetworkBufferAndDescriptor( pxNetworkBuffer );\r
-                                       iptraceSTACK_TX_EVENT_LOST( ipSTACK_TX_EVENT );\r
-                               }\r
-                               else\r
-                               {\r
-                                       xReturn = usSequenceNumber;\r
-                               }\r
-                       }\r
-               }\r
-               else\r
-               {\r
-                       /* The requested number of bytes will not fit in the available space\r
-                       in the network buffer. */\r
-               }\r
-\r
-               return xReturn;\r
-       }\r
-\r
-#endif /* ipconfigSUPPORT_OUTGOING_PINGS == 1 */\r
-/*-----------------------------------------------------------*/\r
-\r
-BaseType_t xSendEventToIPTask( eIPEvent_t eEvent )\r
-{\r
-IPStackEvent_t xEventMessage;\r
-const TickType_t xDontBlock = ( TickType_t ) 0;\r
-\r
-       xEventMessage.eEventType = eEvent;\r
-       xEventMessage.pvData = ( void* )NULL;\r
-\r
-       return xSendEventStructToIPTask( &xEventMessage, xDontBlock );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-BaseType_t xSendEventStructToIPTask( const IPStackEvent_t *pxEvent, TickType_t xTimeout )\r
-{\r
-BaseType_t xReturn, xSendMessage;\r
-\r
-       if( ( xIPIsNetworkTaskReady() == pdFALSE ) && ( pxEvent->eEventType != eNetworkDownEvent ) )\r
-       {\r
-               /* Only allow eNetworkDownEvent events if the IP task is not ready\r
-               yet.  Not going to attempt to send the message so the send failed. */\r
-               xReturn = pdFAIL;\r
-       }\r
-       else\r
-       {\r
-               xSendMessage = pdTRUE;\r
-\r
-               #if( ipconfigUSE_TCP == 1 )\r
-               {\r
-                       if( pxEvent->eEventType == eTCPTimerEvent )\r
-                       {\r
-                               /* TCP timer events are sent to wake the timer task when\r
-                               xTCPTimer has expired, but there is no point sending them if the\r
-                               IP task is already awake processing other message. */\r
-                               xTCPTimer.bExpired = pdTRUE_UNSIGNED;\r
-\r
-                               if( uxQueueMessagesWaiting( xNetworkEventQueue ) != 0u )\r
-                               {\r
-                                       /* Not actually going to send the message but this is not a\r
-                                       failure as the message didn't need to be sent. */\r
-                                       xSendMessage = pdFALSE;\r
-                               }\r
-                       }\r
-               }\r
-               #endif /* ipconfigUSE_TCP */\r
-\r
-               if( xSendMessage != pdFALSE )\r
-               {\r
-                       /* The IP task cannot block itself while waiting for itself to\r
-                       respond. */\r
-                       if( ( xIsCallingFromIPTask() == pdTRUE ) && ( xTimeout > ( TickType_t ) 0 ) )\r
-                       {\r
-                               xTimeout = ( TickType_t ) 0;\r
-                       }\r
-\r
-                       xReturn = xQueueSendToBack( xNetworkEventQueue, pxEvent, xTimeout );\r
-\r
-                       if( xReturn == pdFAIL )\r
-                       {\r
-                               /* A message should have been sent to the IP task, but wasn't. */\r
-                               FreeRTOS_debug_printf( ( "xSendEventStructToIPTask: CAN NOT ADD %d\n", pxEvent->eEventType ) );\r
-                               iptraceSTACK_TX_EVENT_LOST( pxEvent->eEventType );\r
-                       }\r
-               }\r
-               else\r
-               {\r
-                       /* It was not necessary to send the message to process the event so\r
-                       even though the message was not sent the call was successful. */\r
-                       xReturn = pdPASS;\r
-               }\r
-       }\r
-\r
-       return xReturn;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-eFrameProcessingResult_t eConsiderFrameForProcessing( const uint8_t * const pucEthernetBuffer )\r
-{\r
-eFrameProcessingResult_t eReturn;\r
-const EthernetHeader_t *pxEthernetHeader;\r
-\r
-       pxEthernetHeader = ( const EthernetHeader_t * ) pucEthernetBuffer;\r
-\r
-       if( memcmp( ( void * ) ipLOCAL_MAC_ADDRESS, ( void * ) &( pxEthernetHeader->xDestinationAddress ), sizeof( MACAddress_t ) ) == 0 )\r
-       {\r
-               /* The packet was directed to this node directly - process it. */\r
-               eReturn = eProcessBuffer;\r
-       }\r
-       else if( memcmp( ( void * ) xBroadcastMACAddress.ucBytes, ( void * ) pxEthernetHeader->xDestinationAddress.ucBytes, sizeof( MACAddress_t ) ) == 0 )\r
-       {\r
-               /* The packet was a broadcast - process it. */\r
-               eReturn = eProcessBuffer;\r
-       }\r
-       else\r
-#if( ipconfigUSE_LLMNR == 1 )\r
-       if( memcmp( ( void * ) xLLMNR_MacAdress.ucBytes, ( void * ) pxEthernetHeader->xDestinationAddress.ucBytes, sizeof( MACAddress_t ) ) == 0 )\r
-       {\r
-               /* The packet is a request for LLMNR - process it. */\r
-               eReturn = eProcessBuffer;\r
-       }\r
-       else\r
-#endif /* ipconfigUSE_LLMNR */\r
-       {\r
-               /* The packet was not a broadcast, or for this node, just release\r
-               the buffer without taking any other action. */\r
-               eReturn = eReleaseBuffer;\r
-       }\r
-\r
-       #if( ipconfigFILTER_OUT_NON_ETHERNET_II_FRAMES == 1 )\r
-       {\r
-       uint16_t usFrameType;\r
-\r
-               if( eReturn == eProcessBuffer )\r
-               {\r
-                       usFrameType = pxEthernetHeader->usFrameType;\r
-                       usFrameType = FreeRTOS_ntohs( usFrameType );\r
-\r
-                       if( usFrameType <= 0x600U )\r
-                       {\r
-                               /* Not an Ethernet II frame. */\r
-                               eReturn = eReleaseBuffer;\r
-                       }\r
-               }\r
-       }\r
-       #endif /* ipconfigFILTER_OUT_NON_ETHERNET_II_FRAMES == 1  */\r
-\r
-       return eReturn;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvProcessNetworkDownEvent( void )\r
-{\r
-       /* Stop the ARP timer while there is no network. */\r
-       xARPTimer.bActive = pdFALSE_UNSIGNED;\r
-\r
-       #if ipconfigUSE_NETWORK_EVENT_HOOK == 1\r
-       {\r
-               static BaseType_t xCallEventHook = pdFALSE;\r
-\r
-               /* The first network down event is generated by the IP stack itself to\r
-               initialise the network hardware, so do not call the network down event\r
-               the first time through. */\r
-               if( xCallEventHook == pdTRUE )\r
-               {\r
-                       vApplicationIPNetworkEventHook( eNetworkDown );\r
-               }\r
-               xCallEventHook = pdTRUE;\r
-       }\r
-       #endif\r
-\r
-       /* Per the ARP Cache Validation section of https://tools.ietf.org/html/rfc1122, \r
-       treat network down as a "delivery problem" and flush the ARP cache for this\r
-       interface. */\r
-       FreeRTOS_ClearARP( );\r
-\r
-       /* The network has been disconnected (or is being initialised for the first\r
-       time).  Perform whatever hardware processing is necessary to bring it up\r
-       again, or wait for it to be available again.  This is hardware dependent. */\r
-       if( xNetworkInterfaceInitialise() != pdPASS )\r
-       {\r
-               /* Ideally the network interface initialisation function will only\r
-               return when the network is available.  In case this is not the case,\r
-               wait a while before retrying the initialisation. */\r
-               vTaskDelay( ipINITIALISATION_RETRY_DELAY );\r
-               FreeRTOS_NetworkDown();\r
-       }\r
-       else\r
-       {\r
-               /* Set remaining time to 0 so it will become active immediately. */\r
-               #if ipconfigUSE_DHCP == 1\r
-               {\r
-                       /* The network is not up until DHCP has completed. */\r
-                       vDHCPProcess( pdTRUE );\r
-                       xSendEventToIPTask( eDHCPEvent );\r
-               }\r
-               #else\r
-               {\r
-                       /* Perform any necessary 'network up' processing. */\r
-                       vIPNetworkUpCalls();\r
-               }\r
-               #endif\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-void vIPNetworkUpCalls( void )\r
-{\r
-       xNetworkUp = pdTRUE;\r
-\r
-       #if( ipconfigUSE_NETWORK_EVENT_HOOK == 1 )\r
-       {\r
-               vApplicationIPNetworkEventHook( eNetworkUp );\r
-       }\r
-       #endif /* ipconfigUSE_NETWORK_EVENT_HOOK */\r
-\r
-       #if( ipconfigDNS_USE_CALLBACKS != 0 )\r
-       {\r
-               /* The following function is declared in FreeRTOS_DNS.c and 'private' to\r
-               this library */\r
-               extern void vDNSInitialise( void );\r
-               vDNSInitialise();\r
-       }\r
-       #endif /* ipconfigDNS_USE_CALLBACKS != 0 */\r
-\r
-       /* Set remaining time to 0 so it will become active immediately. */\r
-       prvIPTimerReload( &xARPTimer, pdMS_TO_TICKS( ipARP_TIMER_PERIOD_MS ) );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvProcessEthernetPacket( NetworkBufferDescriptor_t * const pxNetworkBuffer )\r
-{\r
-EthernetHeader_t *pxEthernetHeader;\r
-eFrameProcessingResult_t eReturned = eReleaseBuffer;\r
-\r
-       configASSERT( pxNetworkBuffer );\r
-\r
-       /* Interpret the Ethernet frame. */\r
-       if( pxNetworkBuffer->xDataLength >= sizeof( EthernetHeader_t ) )\r
-       {\r
-               eReturned = ipCONSIDER_FRAME_FOR_PROCESSING( pxNetworkBuffer->pucEthernetBuffer );\r
-               pxEthernetHeader = ( EthernetHeader_t * )( pxNetworkBuffer->pucEthernetBuffer );\r
-\r
-               if( eReturned == eProcessBuffer )\r
-               {\r
-                       /* Interpret the received Ethernet packet. */\r
-                       switch( pxEthernetHeader->usFrameType )\r
-                       {\r
-                       case ipARP_FRAME_TYPE:\r
-                               /* The Ethernet frame contains an ARP packet. */\r
-                               if( pxNetworkBuffer->xDataLength >= sizeof( ARPPacket_t ) )\r
-                               {\r
-                                       eReturned = eARPProcessPacket( ( ARPPacket_t * )pxNetworkBuffer->pucEthernetBuffer );\r
-                               }\r
-                               else\r
-                               {\r
-                                       eReturned = eReleaseBuffer;\r
-                               }\r
-                               break;\r
-\r
-                       case ipIPv4_FRAME_TYPE:\r
-                               /* The Ethernet frame contains an IP packet. */\r
-                               if( pxNetworkBuffer->xDataLength >= sizeof( IPPacket_t ) )\r
-                               {\r
-                                       eReturned = prvProcessIPPacket( ( IPPacket_t * )pxNetworkBuffer->pucEthernetBuffer, pxNetworkBuffer );\r
-                               }\r
-                               else\r
-                               {\r
-                                       eReturned = eReleaseBuffer;\r
-                               }\r
-                               break;\r
-\r
-                       default:\r
-                               /* No other packet types are handled.  Nothing to do. */\r
-                               eReturned = eReleaseBuffer;\r
-                               break;\r
-                       }\r
-               }\r
-       }\r
-\r
-       /* Perform any actions that resulted from processing the Ethernet frame. */\r
-       switch( eReturned )\r
-       {\r
-               case eReturnEthernetFrame :\r
-                       /* The Ethernet frame will have been updated (maybe it was\r
-                       an ARP request or a PING request?) and should be sent back to\r
-                       its source. */\r
-                       vReturnEthernetFrame( pxNetworkBuffer, pdTRUE );\r
-                       /* parameter pdTRUE: the buffer must be released once\r
-                       the frame has been transmitted */\r
-                       break;\r
-\r
-               case eFrameConsumed :\r
-                       /* The frame is in use somewhere, don't release the buffer\r
-                       yet. */\r
-                       break;\r
-\r
-               default :\r
-                       /* The frame is not being used anywhere, and the\r
-                       NetworkBufferDescriptor_t structure containing the frame should\r
-                       just be released back to the list of free buffers. */\r
-                       vReleaseNetworkBufferAndDescriptor( pxNetworkBuffer );\r
-                       break;\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static eFrameProcessingResult_t prvAllowIPPacket( const IPPacket_t * const pxIPPacket,\r
-       NetworkBufferDescriptor_t * const pxNetworkBuffer, UBaseType_t uxHeaderLength )\r
-{\r
-eFrameProcessingResult_t eReturn = eProcessBuffer;\r
-\r
-#if( ( ipconfigETHERNET_DRIVER_FILTERS_PACKETS == 0 ) || ( ipconfigDRIVER_INCLUDED_RX_IP_CHECKSUM == 0 ) )\r
-       const IPHeader_t * pxIPHeader = &( pxIPPacket->xIPHeader );\r
-#else\r
-       /* or else, the parameter won't be used and the function will be optimised\r
-       away */\r
-       ( void ) pxIPPacket;\r
-#endif\r
-\r
-       #if( ipconfigETHERNET_DRIVER_FILTERS_PACKETS == 0 )\r
-       {\r
-               /* In systems with a very small amount of RAM, it might be advantageous\r
-               to have incoming messages checked earlier, by the network card driver.\r
-               This method may decrease the usage of sparse network buffers. */\r
-               uint32_t ulDestinationIPAddress = pxIPHeader->ulDestinationIPAddress;\r
-\r
-                       /* Ensure that the incoming packet is not fragmented (only outgoing\r
-                       packets can be fragmented) as these are the only handled IP frames\r
-                       currently. */\r
-                       if( ( pxIPHeader->usFragmentOffset & ipFRAGMENT_OFFSET_BIT_MASK ) != 0U )\r
-                       {\r
-                               /* Can not handle, fragmented packet. */\r
-                               eReturn = eReleaseBuffer;\r
-                       }\r
-                       /* 0x45 means: IPv4 with an IP header of 5 x 4 = 20 bytes\r
-                        * 0x47 means: IPv4 with an IP header of 7 x 4 = 28 bytes */\r
-                       else if( ( pxIPHeader->ucVersionHeaderLength < 0x45u ) || ( pxIPHeader->ucVersionHeaderLength > 0x4Fu ) )\r
-                       {\r
-                               /* Can not handle, unknown or invalid header version. */\r
-                               eReturn = eReleaseBuffer;\r
-                       }\r
-                               /* Is the packet for this IP address? */\r
-                       else if( ( ulDestinationIPAddress != *ipLOCAL_IP_ADDRESS_POINTER ) &&\r
-                               /* Is it the global broadcast address 255.255.255.255 ? */\r
-                               ( ulDestinationIPAddress != ipBROADCAST_IP_ADDRESS ) &&\r
-                               /* Is it a specific broadcast address 192.168.1.255 ? */\r
-                               ( ulDestinationIPAddress != xNetworkAddressing.ulBroadcastAddress ) &&\r
-                       #if( ipconfigUSE_LLMNR == 1 )\r
-                               /* Is it the LLMNR multicast address? */\r
-                               ( ulDestinationIPAddress != ipLLMNR_IP_ADDR ) &&\r
-                       #endif\r
-                               /* Or (during DHCP negotiation) we have no IP-address yet? */\r
-                               ( *ipLOCAL_IP_ADDRESS_POINTER != 0UL ) )\r
-                       {\r
-                               /* Packet is not for this node, release it */\r
-                               eReturn = eReleaseBuffer;\r
-                       }\r
-       }\r
-       #endif /* ipconfigETHERNET_DRIVER_FILTERS_PACKETS */\r
-\r
-       #if( ipconfigDRIVER_INCLUDED_RX_IP_CHECKSUM == 0 )\r
-       {\r
-               /* Some drivers of NIC's with checksum-offloading will enable the above\r
-               define, so that the checksum won't be checked again here */\r
-               if (eReturn == eProcessBuffer )\r
-               {\r
-                       /* Is the IP header checksum correct? */\r
-                       if( ( pxIPHeader->ucProtocol != ( uint8_t ) ipPROTOCOL_ICMP ) &&\r
-                               ( usGenerateChecksum( 0UL, ( uint8_t * ) &( pxIPHeader->ucVersionHeaderLength ), ( size_t ) uxHeaderLength ) != ipCORRECT_CRC ) )\r
-                       {\r
-                               /* Check sum in IP-header not correct. */\r
-                               eReturn = eReleaseBuffer;\r
-                       }\r
-                       /* Is the upper-layer checksum (TCP/UDP/ICMP) correct? */\r
-                       else if( usGenerateProtocolChecksum( ( uint8_t * )( pxNetworkBuffer->pucEthernetBuffer ), pxNetworkBuffer->xDataLength, pdFALSE ) != ipCORRECT_CRC )\r
-                       {\r
-                               /* Protocol checksum not accepted. */\r
-                               eReturn = eReleaseBuffer;\r
-                       }\r
-               }\r
-       }\r
-       #else\r
-       {\r
-               /* to avoid warning unused parameters */\r
-               ( void ) pxNetworkBuffer;\r
-               ( void ) uxHeaderLength;\r
-       }\r
-       #endif /* ipconfigDRIVER_INCLUDED_RX_IP_CHECKSUM == 0 */\r
-\r
-       return eReturn;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static eFrameProcessingResult_t prvProcessIPPacket( IPPacket_t * const pxIPPacket, NetworkBufferDescriptor_t * const pxNetworkBuffer )\r
-{\r
-eFrameProcessingResult_t eReturn;\r
-IPHeader_t * pxIPHeader = &( pxIPPacket->xIPHeader );\r
-UBaseType_t uxHeaderLength = ( UBaseType_t ) ( ( pxIPHeader->ucVersionHeaderLength & 0x0Fu ) << 2 );\r
-uint8_t ucProtocol;\r
-\r
-       /* Bound the calculated header length: take away the Ethernet header size,\r
-       then check if the IP header is claiming to be longer than the remaining\r
-       total packet size. Also check for minimal header field length. */\r
-       if( ( uxHeaderLength > ( pxNetworkBuffer->xDataLength - ipSIZE_OF_ETH_HEADER ) ) ||\r
-               ( uxHeaderLength < ipSIZE_OF_IPv4_HEADER ) )\r
-       {\r
-               return eReleaseBuffer;\r
-       }\r
-\r
-       ucProtocol = pxIPPacket->xIPHeader.ucProtocol;\r
-       /* Check if the IP headers are acceptable and if it has our destination. */\r
-       eReturn = prvAllowIPPacket( pxIPPacket, pxNetworkBuffer, uxHeaderLength );\r
-\r
-       if( eReturn == eProcessBuffer )\r
-       {\r
-               if( uxHeaderLength > ipSIZE_OF_IPv4_HEADER )\r
-               {\r
-                       /* All structs of headers expect a IP header size of 20 bytes\r
-                        * IP header options were included, we'll ignore them and cut them out\r
-                        * Note: IP options are mostly use in Multi-cast protocols */\r
-                       const size_t optlen = ( ( size_t ) uxHeaderLength ) - ipSIZE_OF_IPv4_HEADER;\r
-                       /* From: the previous start of UDP/ICMP/TCP data */\r
-                       uint8_t *pucSource = ( uint8_t* )(pxNetworkBuffer->pucEthernetBuffer + sizeof( EthernetHeader_t ) + uxHeaderLength);\r
-                       /* To: the usual start of UDP/ICMP/TCP data at offset 20 from IP header */\r
-                       uint8_t *pucTarget = ( uint8_t* )(pxNetworkBuffer->pucEthernetBuffer + sizeof( EthernetHeader_t ) + ipSIZE_OF_IPv4_HEADER);\r
-                       /* How many: total length minus the options and the lower headers */\r
-                       const size_t  xMoveLen = pxNetworkBuffer->xDataLength - optlen - ipSIZE_OF_IPv4_HEADER - ipSIZE_OF_ETH_HEADER;\r
-\r
-                       memmove( pucTarget, pucSource, xMoveLen );\r
-                       pxNetworkBuffer->xDataLength -= optlen;\r
-\r
-                       /* Fix-up new version/header length field in IP packet. */\r
-                       pxIPHeader->ucVersionHeaderLength = ( pxIPHeader->ucVersionHeaderLength & 0xF0 ) | /* High nibble is the version. */\r
-                                                                                               ( ( ipSIZE_OF_IPv4_HEADER >> 2 ) & 0x0F ); /* Low nibble is the header size, in bytes, divided by four. */\r
-               }\r
-\r
-               /* Add the IP and MAC addresses to the ARP table if they are not\r
-               already there - otherwise refresh the age of the existing\r
-               entry. */\r
-               if( ucProtocol != ( uint8_t ) ipPROTOCOL_UDP )\r
-               {\r
-                       /* Refresh the ARP cache with the IP/MAC-address of the received packet\r
-                        * For UDP packets, this will be done later in xProcessReceivedUDPPacket()\r
-                        * as soon as know that the message will be handled by someone\r
-                        * This will prevent that the ARP cache will get overwritten\r
-                        * with the IP-address of useless broadcast packets\r
-                        */\r
-                       vARPRefreshCacheEntry( &( pxIPPacket->xEthernetHeader.xSourceAddress ), pxIPHeader->ulSourceIPAddress );\r
-               }\r
-               switch( ucProtocol )\r
-               {\r
-                       case ipPROTOCOL_ICMP :\r
-                               /* The IP packet contained an ICMP frame.  Don't bother\r
-                               checking the ICMP checksum, as if it is wrong then the\r
-                               wrong data will also be returned, and the source of the\r
-                               ping will know something went wrong because it will not\r
-                               be able to validate what it receives. */\r
-                               #if ( ipconfigREPLY_TO_INCOMING_PINGS == 1 ) || ( ipconfigSUPPORT_OUTGOING_PINGS == 1 )\r
-                               {\r
-                                       if( pxNetworkBuffer->xDataLength >= sizeof( ICMPPacket_t ) )\r
-                                       {\r
-                                               ICMPPacket_t *pxICMPPacket = ( ICMPPacket_t * )( pxNetworkBuffer->pucEthernetBuffer );\r
-                                               if( pxIPHeader->ulDestinationIPAddress == *ipLOCAL_IP_ADDRESS_POINTER )\r
-                                               {\r
-                                                       eReturn = prvProcessICMPPacket( pxICMPPacket );\r
-                                               }\r
-                                       }\r
-                                       else\r
-                                       {\r
-                                               eReturn = eReleaseBuffer;\r
-                                       }\r
-                               }\r
-                               #endif /* ( ipconfigREPLY_TO_INCOMING_PINGS == 1 ) || ( ipconfigSUPPORT_OUTGOING_PINGS == 1 ) */\r
-                               break;\r
-\r
-                       case ipPROTOCOL_UDP :\r
-                               {\r
-                                       /* The IP packet contained a UDP frame. */\r
-                                       UDPPacket_t *pxUDPPacket = ( UDPPacket_t * ) ( pxNetworkBuffer->pucEthernetBuffer );\r
-\r
-                                       /* Only proceed if the payload length indicated in the header\r
-                                       appears to be valid. */\r
-                                       if ( ( pxNetworkBuffer->xDataLength >= sizeof( UDPPacket_t ) ) && ( FreeRTOS_ntohs( pxUDPPacket->xUDPHeader.usLength ) >= sizeof( UDPHeader_t ) ) )\r
-                                       {\r
-                                       size_t uxPayloadSize_1, uxPayloadSize_2;\r
-                                               /* The UDP payload size can be calculated by subtracting the\r
-                                                * header size from `xDataLength`.\r
-                                                * However, the `xDataLength` may be longer that expected,\r
-                                                * e.g. when a small packet is padded with zero's.\r
-                                                * The UDP header contains a field `usLength` reflecting\r
-                                                * the payload size plus the UDP header ( 8 bytes ).\r
-                                                * Set `xDataLength` to the size of the headers,\r
-                                                * plus the lower of the two calculated payload sizes.\r
-                                                */\r
-\r
-                                               uxPayloadSize_1 = pxNetworkBuffer->xDataLength - sizeof( UDPPacket_t );\r
-                                               uxPayloadSize_2 = FreeRTOS_ntohs( pxUDPPacket->xUDPHeader.usLength ) - sizeof( UDPHeader_t );\r
-                                               if( uxPayloadSize_1 > uxPayloadSize_2 )\r
-                                               {\r
-                                                       pxNetworkBuffer->xDataLength = uxPayloadSize_2 + sizeof( UDPPacket_t );\r
-                                               }\r
-\r
-                                               /* Fields in pxNetworkBuffer (usPort, ulIPAddress) are network order. */\r
-                                               pxNetworkBuffer->usPort = pxUDPPacket->xUDPHeader.usSourcePort;\r
-                                               pxNetworkBuffer->ulIPAddress = pxUDPPacket->xIPHeader.ulSourceIPAddress;\r
-\r
-                                               /* ipconfigDRIVER_INCLUDED_RX_IP_CHECKSUM:\r
-                                                * In some cases, the upper-layer checksum has been calculated\r
-                                                * by the NIC driver.\r
-                                                *\r
-                                                * Pass the packet payload to the UDP sockets implementation. */\r
-                                               if( xProcessReceivedUDPPacket( pxNetworkBuffer,\r
-                                                                                                          pxUDPPacket->xUDPHeader.usDestinationPort ) == pdPASS )\r
-                                               {\r
-                                                       eReturn = eFrameConsumed;\r
-                                               }\r
-                                       }\r
-                                       else\r
-                                       {\r
-                                               eReturn = eReleaseBuffer;\r
-                                       }\r
-                               }\r
-                               break;\r
-\r
-#if ipconfigUSE_TCP == 1\r
-                       case ipPROTOCOL_TCP :\r
-                               {\r
-\r
-                                       if( xProcessReceivedTCPPacket( pxNetworkBuffer ) == pdPASS )\r
-                                       {\r
-                                               eReturn = eFrameConsumed;\r
-                                       }\r
-\r
-                                       /* Setting this variable will cause xTCPTimerCheck()\r
-                                       to be called just before the IP-task blocks. */\r
-                                       xProcessedTCPMessage++;\r
-                               }\r
-                               break;\r
-#endif\r
-                       default :\r
-                               /* Not a supported frame type. */\r
-                               break;\r
-               }\r
-       }\r
-\r
-       return eReturn;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-#if ( ipconfigSUPPORT_OUTGOING_PINGS == 1 )\r
-\r
-       static void prvProcessICMPEchoReply( ICMPPacket_t * const pxICMPPacket )\r
-       {\r
-       ePingReplyStatus_t eStatus = eSuccess;\r
-       uint16_t usDataLength, usCount;\r
-       uint8_t *pucByte;\r
-\r
-               /* Find the total length of the IP packet. */\r
-               usDataLength = pxICMPPacket->xIPHeader.usLength;\r
-               usDataLength = FreeRTOS_ntohs( usDataLength );\r
-\r
-               /* Remove the length of the IP headers to obtain the length of the ICMP\r
-               message itself. */\r
-               usDataLength = ( uint16_t ) ( ( ( uint32_t ) usDataLength ) - ipSIZE_OF_IPv4_HEADER );\r
-\r
-               /* Remove the length of the ICMP header, to obtain the length of\r
-               data contained in the ping. */\r
-               usDataLength = ( uint16_t ) ( ( ( uint32_t ) usDataLength ) - ipSIZE_OF_ICMP_HEADER );\r
-\r
-               /* Checksum has already been checked before in prvProcessIPPacket */\r
-\r
-               /* Find the first byte of the data within the ICMP packet. */\r
-               pucByte = ( uint8_t * ) pxICMPPacket;\r
-               pucByte += sizeof( ICMPPacket_t );\r
-\r
-               /* Check each byte. */\r
-               for( usCount = 0; usCount < usDataLength; usCount++ )\r
-               {\r
-                       if( *pucByte != ipECHO_DATA_FILL_BYTE )\r
-                       {\r
-                               eStatus = eInvalidData;\r
-                               break;\r
-                       }\r
-\r
-                       pucByte++;\r
-               }\r
-\r
-               /* Call back into the application to pass it the result. */\r
-               vApplicationPingReplyHook( eStatus, pxICMPPacket->xICMPHeader.usIdentifier );\r
-       }\r
-\r
-#endif\r
-/*-----------------------------------------------------------*/\r
-\r
-#if ( ipconfigREPLY_TO_INCOMING_PINGS == 1 )\r
-\r
-       static eFrameProcessingResult_t prvProcessICMPEchoRequest( ICMPPacket_t * const pxICMPPacket )\r
-       {\r
-       ICMPHeader_t *pxICMPHeader;\r
-       IPHeader_t *pxIPHeader;\r
-       uint16_t usRequest;\r
-\r
-               pxICMPHeader = &( pxICMPPacket->xICMPHeader );\r
-               pxIPHeader = &( pxICMPPacket->xIPHeader );\r
-\r
-               /* HT:endian: changed back */\r
-               iptraceSENDING_PING_REPLY( pxIPHeader->ulSourceIPAddress );\r
-\r
-               /* The checksum can be checked here - but a ping reply should be\r
-               returned even if the checksum is incorrect so the other end can\r
-               tell that the ping was received - even if the ping reply contains\r
-               invalid data. */\r
-               pxICMPHeader->ucTypeOfMessage = ( uint8_t ) ipICMP_ECHO_REPLY;\r
-               pxIPHeader->ulDestinationIPAddress = pxIPHeader->ulSourceIPAddress;\r
-               pxIPHeader->ulSourceIPAddress = *ipLOCAL_IP_ADDRESS_POINTER;\r
-\r
-               /* Update the checksum because the ucTypeOfMessage member in the header\r
-               has been changed to ipICMP_ECHO_REPLY.  This is faster than calling\r
-               usGenerateChecksum(). */\r
-\r
-               /* due to compiler warning "integer operation result is out of range" */\r
-\r
-               usRequest = ( uint16_t ) ( ( uint16_t )ipICMP_ECHO_REQUEST << 8 );\r
-\r
-               if( pxICMPHeader->usChecksum >= FreeRTOS_htons( 0xFFFFu - usRequest ) )\r
-               {\r
-                       pxICMPHeader->usChecksum = ( uint16_t )\r
-                               ( ( ( uint32_t ) pxICMPHeader->usChecksum ) +\r
-                                       FreeRTOS_htons( usRequest + 1UL ) );\r
-               }\r
-               else\r
-               {\r
-                       pxICMPHeader->usChecksum = ( uint16_t )\r
-                               ( ( ( uint32_t ) pxICMPHeader->usChecksum ) +\r
-                                       FreeRTOS_htons( usRequest ) );\r
-               }\r
-               return eReturnEthernetFrame;\r
-       }\r
-\r
-#endif /* ipconfigREPLY_TO_INCOMING_PINGS == 1 */\r
-/*-----------------------------------------------------------*/\r
-\r
-#if ( ipconfigREPLY_TO_INCOMING_PINGS == 1 ) || ( ipconfigSUPPORT_OUTGOING_PINGS == 1 )\r
-\r
-       static eFrameProcessingResult_t prvProcessICMPPacket( ICMPPacket_t * const pxICMPPacket )\r
-       {\r
-       eFrameProcessingResult_t eReturn = eReleaseBuffer;\r
-\r
-               iptraceICMP_PACKET_RECEIVED();\r
-               switch( pxICMPPacket->xICMPHeader.ucTypeOfMessage )\r
-               {\r
-                       case ipICMP_ECHO_REQUEST        :\r
-                               #if ( ipconfigREPLY_TO_INCOMING_PINGS == 1 )\r
-                               {\r
-                                       eReturn = prvProcessICMPEchoRequest( pxICMPPacket );\r
-                               }\r
-                               #endif /* ( ipconfigREPLY_TO_INCOMING_PINGS == 1 ) */\r
-                               break;\r
-\r
-                       case ipICMP_ECHO_REPLY          :\r
-                               #if ( ipconfigSUPPORT_OUTGOING_PINGS == 1 )\r
-                               {\r
-                                       prvProcessICMPEchoReply( pxICMPPacket );\r
-                               }\r
-                               #endif /* ipconfigSUPPORT_OUTGOING_PINGS */\r
-                               break;\r
-\r
-                       default :\r
-                               break;\r
-               }\r
-\r
-               return eReturn;\r
-       }\r
-\r
-#endif /* ( ipconfigREPLY_TO_INCOMING_PINGS == 1 ) || ( ipconfigSUPPORT_OUTGOING_PINGS == 1 ) */\r
-/*-----------------------------------------------------------*/\r
-\r
-uint16_t usGenerateProtocolChecksum( const uint8_t * const pucEthernetBuffer, size_t uxBufferLength, BaseType_t xOutgoingPacket )\r
-{\r
-uint32_t ulLength;\r
-uint16_t usChecksum, *pusChecksum;\r
-const IPPacket_t * pxIPPacket;\r
-UBaseType_t uxIPHeaderLength;\r
-ProtocolPacket_t *pxProtPack;\r
-uint8_t ucProtocol;\r
-#if( ipconfigHAS_DEBUG_PRINTF != 0 )\r
-       const char *pcType;\r
-#endif\r
-\r
-       /* Check for minimum packet size. */\r
-       if( uxBufferLength < sizeof( IPPacket_t ) )\r
-       {\r
-               return ipINVALID_LENGTH;\r
-       }\r
-\r
-       /* Parse the packet length. */\r
-       pxIPPacket = ( const IPPacket_t * ) pucEthernetBuffer;\r
-\r
-       /* Per https://tools.ietf.org/html/rfc791, the four-bit Internet Header\r
-       Length field contains the length of the internet header in 32-bit words. */\r
-       uxIPHeaderLength = ( UBaseType_t ) ( sizeof( uint32_t ) * ( pxIPPacket->xIPHeader.ucVersionHeaderLength & 0x0Fu ) );\r
-\r
-       /* Check for minimum packet size. */\r
-       if( uxBufferLength < sizeof( IPPacket_t ) + uxIPHeaderLength - ipSIZE_OF_IPv4_HEADER )\r
-       {\r
-               return ipINVALID_LENGTH;\r
-       }\r
-       if( uxBufferLength < ( size_t ) ( ipSIZE_OF_ETH_HEADER + FreeRTOS_ntohs( pxIPPacket->xIPHeader.usLength ) ) )\r
-       {\r
-               return ipINVALID_LENGTH;\r
-       }\r
-\r
-       /* Identify the next protocol. */\r
-       ucProtocol = pxIPPacket->xIPHeader.ucProtocol;\r
-\r
-       /* N.B., if this IP packet header includes Options, then the following\r
-       assignment results in a pointer into the protocol packet with the Ethernet\r
-       and IP headers incorrectly aligned. However, either way, the "third"\r
-       protocol (Layer 3 or 4) header will be aligned, which is the convenience\r
-       of this calculation. */\r
-       pxProtPack = ( ProtocolPacket_t * ) ( pucEthernetBuffer + ( uxIPHeaderLength - ipSIZE_OF_IPv4_HEADER ) );\r
-\r
-       /* Switch on the Layer 3/4 protocol. */\r
-       if( ucProtocol == ( uint8_t ) ipPROTOCOL_UDP )\r
-       {\r
-               if( uxBufferLength < ( uxIPHeaderLength + ipSIZE_OF_ETH_HEADER + ipSIZE_OF_UDP_HEADER ) )\r
-               {\r
-                       return ipINVALID_LENGTH;\r
-               }\r
-\r
-               pusChecksum = ( uint16_t * ) ( &( pxProtPack->xUDPPacket.xUDPHeader.usChecksum ) );\r
-               #if( ipconfigHAS_DEBUG_PRINTF != 0 )\r
-               {\r
-                       pcType = "UDP";\r
-               }\r
-               #endif  /* ipconfigHAS_DEBUG_PRINTF != 0 */\r
-       }\r
-       else if( ucProtocol == ( uint8_t ) ipPROTOCOL_TCP )\r
-       {\r
-               if( uxBufferLength < ( uxIPHeaderLength + ipSIZE_OF_ETH_HEADER + ipSIZE_OF_TCP_HEADER ) )\r
-               {\r
-                       return ipINVALID_LENGTH;\r
-               }\r
-\r
-               pusChecksum = ( uint16_t * ) ( &( pxProtPack->xTCPPacket.xTCPHeader.usChecksum ) );\r
-               #if( ipconfigHAS_DEBUG_PRINTF != 0 )\r
-               {\r
-                       pcType = "TCP";\r
-               }\r
-               #endif  /* ipconfigHAS_DEBUG_PRINTF != 0 */\r
-       }\r
-       else if( ( ucProtocol == ( uint8_t ) ipPROTOCOL_ICMP ) ||\r
-                       ( ucProtocol == ( uint8_t ) ipPROTOCOL_IGMP ) )\r
-       {\r
-               if( uxBufferLength < ( uxIPHeaderLength + ipSIZE_OF_ETH_HEADER + ipSIZE_OF_ICMP_HEADER ) )\r
-               {\r
-                       return ipINVALID_LENGTH;\r
-               }\r
-\r
-               pusChecksum = ( uint16_t * ) ( &( pxProtPack->xICMPPacket.xICMPHeader.usChecksum ) );\r
-               #if( ipconfigHAS_DEBUG_PRINTF != 0 )\r
-               {\r
-                       if( ucProtocol == ( uint8_t ) ipPROTOCOL_ICMP )\r
-                       {\r
-                               pcType = "ICMP";\r
-                       }\r
-                       else\r
-                       {\r
-                               pcType = "IGMP";\r
-                       }\r
-               }\r
-               #endif  /* ipconfigHAS_DEBUG_PRINTF != 0 */\r
-       }\r
-       else\r
-       {\r
-               /* Unhandled protocol, other than ICMP, IGMP, UDP, or TCP. */\r
-               return ipUNHANDLED_PROTOCOL;\r
-       }\r
-\r
-       /* The protocol and checksum field have been identified. Check the direction\r
-       of the packet. */\r
-       if( xOutgoingPacket != pdFALSE )\r
-       {\r
-               /* This is an outgoing packet. Before calculating the checksum, set it\r
-               to zero. */\r
-               *( pusChecksum ) = 0u;\r
-       }\r
-       else if( ( *pusChecksum == 0u ) && ( ucProtocol == ( uint8_t ) ipPROTOCOL_UDP ) )\r
-       {\r
-               /* Sender hasn't set the checksum, no use to calculate it. */\r
-               return ipCORRECT_CRC;\r
-       }\r
-\r
-       ulLength = ( uint32_t )\r
-               ( FreeRTOS_ntohs( pxIPPacket->xIPHeader.usLength ) - ( ( uint16_t ) uxIPHeaderLength ) ); /* normally minus 20 */\r
-\r
-       if( ( ulLength < sizeof( pxProtPack->xUDPPacket.xUDPHeader ) ) ||\r
-               ( ulLength > ( uint32_t )( ipconfigNETWORK_MTU - uxIPHeaderLength ) ) )\r
-       {\r
-               #if( ipconfigHAS_DEBUG_PRINTF != 0 )\r
-               {\r
-                       FreeRTOS_debug_printf( ( "usGenerateProtocolChecksum[%s]: len invalid: %lu\n", pcType, ulLength ) );\r
-               }\r
-               #endif  /* ipconfigHAS_DEBUG_PRINTF != 0 */\r
-\r
-               /* Again, in a 16-bit return value there is no space to indicate an\r
-               error.  For incoming packets, 0x1234 will cause dropping of the packet.\r
-               For outgoing packets, there is a serious problem with the\r
-               format/length */\r
-               return ipINVALID_LENGTH;\r
-       }\r
-       if( ucProtocol <= ( uint8_t ) ipPROTOCOL_IGMP )\r
-       {\r
-               /* ICMP/IGMP do not have a pseudo header for CRC-calculation. */\r
-               usChecksum = ( uint16_t )\r
-                       ( ~usGenerateChecksum( 0UL,\r
-                               ( uint8_t * ) &( pxProtPack->xTCPPacket.xTCPHeader ), ( size_t ) ulLength ) );\r
-       }\r
-       else\r
-       {\r
-               /* For UDP and TCP, sum the pseudo header, i.e. IP protocol + length\r
-               fields */\r
-               usChecksum = ( uint16_t ) ( ulLength + ( ( uint16_t ) ucProtocol ) );\r
-\r
-               /* And then continue at the IPv4 source and destination addresses. */\r
-               usChecksum = ( uint16_t )\r
-                       ( ~usGenerateChecksum( ( uint32_t ) usChecksum, ( uint8_t * )&( pxIPPacket->xIPHeader.ulSourceIPAddress ),\r
-                               ( 2u * sizeof( pxIPPacket->xIPHeader.ulSourceIPAddress ) + ulLength ) ) );\r
-\r
-               /* Sum TCP header and data. */\r
-       }\r
-\r
-       if( xOutgoingPacket == pdFALSE )\r
-       {\r
-               /* This is in incoming packet. If the CRC is correct, it should be zero. */\r
-               if( usChecksum == 0u )\r
-               {\r
-                       usChecksum = ( uint16_t )ipCORRECT_CRC;\r
-               }\r
-       }\r
-       else\r
-       {\r
-               if( ( usChecksum == 0u ) && ( ucProtocol == ( uint8_t ) ipPROTOCOL_UDP ) )\r
-               {\r
-                       /* In case of UDP, a calculated checksum of 0x0000 is transmitted\r
-                       as 0xffff. A value of zero would mean that the checksum is not used. */\r
-                       #if( ipconfigHAS_DEBUG_PRINTF != 0 )\r
-                       {\r
-                               if( xOutgoingPacket != pdFALSE )\r
-                               {\r
-                                       FreeRTOS_debug_printf( ( "usGenerateProtocolChecksum[%s]: crc swap: %04X\n", pcType, usChecksum ) );\r
-                               }\r
-                       }\r
-                       #endif  /* ipconfigHAS_DEBUG_PRINTF != 0 */\r
-\r
-                       usChecksum = ( uint16_t )0xffffu;\r
-               }\r
-       }\r
-       usChecksum = FreeRTOS_htons( usChecksum );\r
-\r
-       if( xOutgoingPacket != pdFALSE )\r
-       {\r
-               *( pusChecksum ) = usChecksum;\r
-       }\r
-       #if( ipconfigHAS_DEBUG_PRINTF != 0 )\r
-       else if( ( xOutgoingPacket == pdFALSE ) && ( usChecksum != ipCORRECT_CRC ) )\r
-       {\r
-               FreeRTOS_debug_printf( ( "usGenerateProtocolChecksum[%s]: ID %04X: from %lxip to %lxip bad crc: %04X\n",\r
-                       pcType,\r
-                       FreeRTOS_ntohs( pxIPPacket->xIPHeader.usIdentification ),\r
-                       FreeRTOS_ntohl( pxIPPacket->xIPHeader.ulSourceIPAddress ),\r
-                       FreeRTOS_ntohl( pxIPPacket->xIPHeader.ulDestinationIPAddress ),\r
-                       FreeRTOS_ntohs( *pusChecksum ) ) );\r
-       }\r
-       #endif  /* ipconfigHAS_DEBUG_PRINTF != 0 */\r
-\r
-       return usChecksum;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-/**\r
- * This method generates a checksum for a given IPv4 header, per RFC791 (page 14).\r
- * The checksum algorithm is decribed as:\r
- *   "[T]he 16 bit one's complement of the one's complement sum of all 16 bit words in the\r
- *   header.  For purposes of computing the checksum, the value of the checksum field is zero."\r
- *\r
- * In a nutshell, that means that each 16-bit 'word' must be summed, after which\r
- * the number of 'carries' (overflows) is added to the result. If that addition\r
- * produces an overflow, that 'carry' must also be added to the final result. The final checksum\r
- * should be the bitwise 'not' (ones-complement) of the result if the packet is\r
- * meant to be transmitted, but this method simply returns the raw value, probably\r
- * because when a packet is received, the checksum is verified by checking that\r
- * ((received & calculated) == 0) without applying a bitwise 'not' to the 'calculated' checksum.\r
- *\r
- * This logic is optimized for microcontrollers which have limited resources, so the logic looks odd.\r
- * It iterates over the full range of 16-bit words, but it does so by processing several 32-bit\r
- * words at once whenever possible. Its first step is to align the memory pointer to a 32-bit boundary,\r
- * after which it runs a fast loop to process multiple 32-bit words at once and adding their 'carries'.\r
- * Finally, it finishes up by processing any remaining 16-bit words, and adding up all of the 'carries'.\r
- * With 32-bit arithmetic, the number of 16-bit 'carries' produced by sequential additions can be found\r
- * by looking at the 16 most-significant bits of the 32-bit integer, since a 32-bit int will continue\r
- * counting up instead of overflowing after 16 bits. That is why the actual checksum calculations look like:\r
- *   union.u32 = ( uint32_t ) union.u16[ 0 ] + union.u16[ 1 ];\r
- *\r
- * Arguments:\r
- *   ulSum: This argument provides a value to initialize the progressive summation\r
- *      of the header's values to. It is often 0, but protocols like TCP or UDP\r
- *      can have pseudo-header fields which need to be included in the checksum.\r
- *   pucNextData: This argument contains the address of the first byte which this\r
- *      method should process. The method's memory iterator is initialized to this value.\r
- *   uxDataLengthBytes: This argument contains the number of bytes that this method\r
- *      should process.\r
- */\r
-uint16_t usGenerateChecksum( uint32_t ulSum, const uint8_t * pucNextData, size_t uxDataLengthBytes )\r
-{\r
-xUnion32 xSum2, xSum, xTerm;\r
-xUnionPtr xSource;             /* Points to first byte */\r
-xUnionPtr xLastSource; /* Points to last byte plus one */\r
-uint32_t ulAlignBits, ulCarry = 0ul;\r
-\r
-       /* Small MCUs often spend up to 30% of the time doing checksum calculations\r
-       This function is optimised for 32-bit CPUs; Each time it will try to fetch\r
-       32-bits, sums it with an accumulator and counts the number of carries. */\r
-\r
-       /* Swap the input (little endian platform only). */\r
-       xSum.u32 = FreeRTOS_ntohs( ulSum );\r
-       xTerm.u32 = 0ul;\r
-\r
-       xSource.u8ptr = ( uint8_t * ) pucNextData;\r
-       ulAlignBits = ( ( ( uint32_t ) pucNextData ) & 0x03u ); /* gives 0, 1, 2, or 3 */\r
-\r
-       /* If byte (8-bit) aligned... */\r
-       if( ( ( ulAlignBits & 1ul ) != 0ul ) && ( uxDataLengthBytes >= ( size_t ) 1 ) )\r
-       {\r
-               xTerm.u8[ 1 ] = *( xSource.u8ptr );\r
-               ( xSource.u8ptr )++;\r
-               uxDataLengthBytes--;\r
-               /* Now xSource is word (16-bit) aligned. */\r
-       }\r
-\r
-       /* If half-word (16-bit) aligned... */\r
-       if( ( ( ulAlignBits == 1u ) || ( ulAlignBits == 2u ) ) && ( uxDataLengthBytes >= 2u ) )\r
-       {\r
-               xSum.u32 += *(xSource.u16ptr);\r
-               ( xSource.u16ptr )++;\r
-               uxDataLengthBytes -= 2u;\r
-               /* Now xSource is word (32-bit) aligned. */\r
-       }\r
-\r
-       /* Word (32-bit) aligned, do the most part. */\r
-       xLastSource.u32ptr = ( xSource.u32ptr + ( uxDataLengthBytes / 4u ) ) - 3u;\r
-\r
-       /* In this loop, four 32-bit additions will be done, in total 16 bytes.\r
-       Indexing with constants (0,1,2,3) gives faster code than using\r
-       post-increments. */\r
-       while( xSource.u32ptr < xLastSource.u32ptr )\r
-       {\r
-               /* Use a secondary Sum2, just to see if the addition produced an\r
-               overflow. */\r
-               xSum2.u32 = xSum.u32 + xSource.u32ptr[ 0 ];\r
-               if( xSum2.u32 < xSum.u32 )\r
-               {\r
-                       ulCarry++;\r
-               }\r
-\r
-               /* Now add the secondary sum to the major sum, and remember if there was\r
-               a carry. */\r
-               xSum.u32 = xSum2.u32 + xSource.u32ptr[ 1 ];\r
-               if( xSum2.u32 > xSum.u32 )\r
-               {\r
-                       ulCarry++;\r
-               }\r
-\r
-               /* And do the same trick once again for indexes 2 and 3 */\r
-               xSum2.u32 = xSum.u32 + xSource.u32ptr[ 2 ];\r
-               if( xSum2.u32 < xSum.u32 )\r
-               {\r
-                       ulCarry++;\r
-               }\r
-\r
-               xSum.u32 = xSum2.u32 + xSource.u32ptr[ 3 ];\r
-\r
-               if( xSum2.u32 > xSum.u32 )\r
-               {\r
-                       ulCarry++;\r
-               }\r
-\r
-               /* And finally advance the pointer 4 * 4 = 16 bytes. */\r
-               xSource.u32ptr += 4;\r
-       }\r
-\r
-       /* Now add all carries. */\r
-       xSum.u32 = ( uint32_t )xSum.u16[ 0 ] + xSum.u16[ 1 ] + ulCarry;\r
-\r
-       uxDataLengthBytes %= 16u;\r
-       xLastSource.u8ptr = ( uint8_t * ) ( xSource.u8ptr + ( uxDataLengthBytes & ~( ( size_t ) 1 ) ) );\r
-\r
-       /* Half-word aligned. */\r
-       while( xSource.u16ptr < xLastSource.u16ptr )\r
-       {\r
-               /* At least one more short. */\r
-               xSum.u32 += xSource.u16ptr[ 0 ];\r
-               xSource.u16ptr++;\r
-       }\r
-\r
-       if( ( uxDataLengthBytes & ( size_t ) 1 ) != 0u )        /* Maybe one more ? */\r
-       {\r
-               xTerm.u8[ 0 ] = xSource.u8ptr[ 0 ];\r
-       }\r
-       xSum.u32 += xTerm.u32;\r
-\r
-       /* Now add all carries again. */\r
-       xSum.u32 = ( uint32_t ) xSum.u16[ 0 ] + xSum.u16[ 1 ];\r
-\r
-       /* The previous summation might have given a 16-bit carry. */\r
-       xSum.u32 = ( uint32_t ) xSum.u16[ 0 ] + xSum.u16[ 1 ];\r
-\r
-       if( ( ulAlignBits & 1u ) != 0u )\r
-       {\r
-               /* Quite unlikely, but pucNextData might be non-aligned, which would\r
-                mean that a checksum is calculated starting at an odd position. */\r
-               xSum.u32 = ( ( xSum.u32 & 0xffu ) << 8 ) | ( ( xSum.u32 & 0xff00u ) >> 8 );\r
-       }\r
-\r
-       /* swap the output (little endian platform only). */\r
-       return FreeRTOS_htons( ( (uint16_t) xSum.u32 ) );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-void vReturnEthernetFrame( NetworkBufferDescriptor_t * pxNetworkBuffer, BaseType_t xReleaseAfterSend )\r
-{\r
-EthernetHeader_t *pxEthernetHeader;\r
-\r
-#if( ipconfigZERO_COPY_TX_DRIVER != 0 )\r
-       NetworkBufferDescriptor_t *pxNewBuffer;\r
-#endif\r
-\r
-       #if defined( ipconfigETHERNET_MINIMUM_PACKET_BYTES )\r
-       {\r
-               if( pxNetworkBuffer->xDataLength < ( size_t ) ipconfigETHERNET_MINIMUM_PACKET_BYTES )\r
-               {\r
-               BaseType_t xIndex;\r
-\r
-                       FreeRTOS_printf( ( "vReturnEthernetFrame: length %lu\n", ( uint32_t )pxNetworkBuffer->xDataLength ) );\r
-                       for( xIndex = ( BaseType_t ) pxNetworkBuffer->xDataLength; xIndex < ( BaseType_t ) ipconfigETHERNET_MINIMUM_PACKET_BYTES; xIndex++ )\r
-                       {\r
-                               pxNetworkBuffer->pucEthernetBuffer[ xIndex ] = 0u;\r
-                       }\r
-                       pxNetworkBuffer->xDataLength = ( size_t ) ipconfigETHERNET_MINIMUM_PACKET_BYTES;\r
-               }\r
-       }\r
-       #endif\r
-\r
-#if( ipconfigZERO_COPY_TX_DRIVER != 0 )\r
-\r
-       if( xReleaseAfterSend == pdFALSE )\r
-       {\r
-               pxNewBuffer = pxDuplicateNetworkBufferWithDescriptor( pxNetworkBuffer, ( BaseType_t ) pxNetworkBuffer->xDataLength );\r
-               xReleaseAfterSend = pdTRUE;\r
-               pxNetworkBuffer = pxNewBuffer;\r
-       }\r
-\r
-       if( pxNetworkBuffer != NULL )\r
-#endif\r
-       {\r
-               pxEthernetHeader = ( EthernetHeader_t * ) ( pxNetworkBuffer->pucEthernetBuffer );\r
-\r
-               /* Swap source and destination MAC addresses. */\r
-               memcpy( ( void * ) &( pxEthernetHeader->xDestinationAddress ), ( void * ) &( pxEthernetHeader->xSourceAddress ), sizeof( pxEthernetHeader->xDestinationAddress ) );\r
-               memcpy( ( void * ) &( pxEthernetHeader->xSourceAddress) , ( void * ) ipLOCAL_MAC_ADDRESS, ( size_t ) ipMAC_ADDRESS_LENGTH_BYTES );\r
-\r
-               /* Send! */\r
-               xNetworkInterfaceOutput( pxNetworkBuffer, xReleaseAfterSend );\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-uint32_t FreeRTOS_GetIPAddress( void )\r
-{\r
-       /* Returns the IP address of the NIC. */\r
-       return *ipLOCAL_IP_ADDRESS_POINTER;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-void FreeRTOS_SetIPAddress( uint32_t ulIPAddress )\r
-{\r
-       /* Sets the IP address of the NIC. */\r
-       *ipLOCAL_IP_ADDRESS_POINTER = ulIPAddress;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-uint32_t FreeRTOS_GetGatewayAddress( void )\r
-{\r
-       return xNetworkAddressing.ulGatewayAddress;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-uint32_t FreeRTOS_GetDNSServerAddress( void )\r
-{\r
-       return xNetworkAddressing.ulDNSServerAddress;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-uint32_t FreeRTOS_GetNetmask( void )\r
-{\r
-       return xNetworkAddressing.ulNetMask;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-void FreeRTOS_UpdateMACAddress( const uint8_t ucMACAddress[ipMAC_ADDRESS_LENGTH_BYTES] )\r
-{\r
-       /* Copy the MAC address at the start of the default packet header fragment. */\r
-       memcpy( ( void * )ipLOCAL_MAC_ADDRESS, ( void * )ucMACAddress, ( size_t )ipMAC_ADDRESS_LENGTH_BYTES );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-const uint8_t * FreeRTOS_GetMACAddress( void )\r
-{\r
-       return ipLOCAL_MAC_ADDRESS;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-void FreeRTOS_SetNetmask ( uint32_t ulNetmask )\r
-{\r
-       xNetworkAddressing.ulNetMask = ulNetmask;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-void FreeRTOS_SetGatewayAddress ( uint32_t ulGatewayAddress )\r
-{\r
-       xNetworkAddressing.ulGatewayAddress = ulGatewayAddress;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_DHCP == 1 )\r
-       void vIPSetDHCPTimerEnableState( BaseType_t xEnableState )\r
-       {\r
-               if( xEnableState != pdFALSE )\r
-               {\r
-                       xDHCPTimer.bActive = pdTRUE_UNSIGNED;\r
-               }\r
-               else\r
-               {\r
-                       xDHCPTimer.bActive = pdFALSE_UNSIGNED;\r
-               }\r
-       }\r
-#endif /* ipconfigUSE_DHCP */\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_DHCP == 1 )\r
-       void vIPReloadDHCPTimer( uint32_t ulLeaseTime )\r
-       {\r
-               prvIPTimerReload( &xDHCPTimer, ulLeaseTime );\r
-       }\r
-#endif /* ipconfigUSE_DHCP */\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigDNS_USE_CALLBACKS == 1 )\r
-       void vIPSetDnsTimerEnableState( BaseType_t xEnableState )\r
-       {\r
-               if( xEnableState != 0 )\r
-               {\r
-                       xDNSTimer.bActive = pdTRUE;\r
-               }\r
-               else\r
-               {\r
-                       xDNSTimer.bActive = pdFALSE;\r
-               }\r
-       }\r
-#endif /* ipconfigUSE_DHCP */\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigDNS_USE_CALLBACKS != 0 )\r
-       void vIPReloadDNSTimer( uint32_t ulCheckTime )\r
-       {\r
-               prvIPTimerReload( &xDNSTimer, ulCheckTime );\r
-       }\r
-#endif /* ipconfigDNS_USE_CALLBACKS != 0 */\r
-/*-----------------------------------------------------------*/\r
-\r
-BaseType_t xIPIsNetworkTaskReady( void )\r
-{\r
-       return xIPTaskInitialised;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-BaseType_t FreeRTOS_IsNetworkUp( void )\r
-{\r
-       return xNetworkUp;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigCHECK_IP_QUEUE_SPACE != 0 )\r
-       UBaseType_t uxGetMinimumIPQueueSpace( void )\r
-       {\r
-               return uxQueueMinimumSpace;\r
-       }\r
-#endif\r
-/*-----------------------------------------------------------*/\r
-\r
-/* Provide access to private members for verification. */\r
-#ifdef FREERTOS_TCP_ENABLE_VERIFICATION\r
-       #include "aws_freertos_ip_verification_access_ip_define.h"\r
-#endif\r
-\r
+/*
+ * FreeRTOS+TCP V2.2.0
+ * 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
+ */
+
+/* Standard includes. */
+#include <stdint.h>
+#include <stdio.h>
+#include <string.h>
+
+/* FreeRTOS includes. */
+#include "FreeRTOS.h"
+#include "task.h"
+#include "queue.h"
+#include "semphr.h"
+
+/* FreeRTOS+TCP includes. */
+#include "FreeRTOS_IP.h"
+#include "FreeRTOS_Sockets.h"
+#include "FreeRTOS_IP_Private.h"
+#include "FreeRTOS_ARP.h"
+#include "FreeRTOS_UDP_IP.h"
+#include "FreeRTOS_TCP_IP.h"
+#include "FreeRTOS_DHCP.h"
+#include "NetworkInterface.h"
+#include "NetworkBufferManagement.h"
+#include "FreeRTOS_DNS.h"
+
+
+/* Used to ensure the structure packing is having the desired effect.  The
+'volatile' is used to prevent compiler warnings about comparing a constant with
+a constant. */
+#define ipEXPECTED_EthernetHeader_t_SIZE       ( ( size_t ) 14 )
+#define ipEXPECTED_ARPHeader_t_SIZE                    ( ( size_t ) 28 )
+#define ipEXPECTED_IPHeader_t_SIZE                     ( ( size_t ) 20 )
+#define ipEXPECTED_IGMPHeader__SIZE                    ( ( size_t ) 8 )
+#define ipEXPECTED_ICMPHeader_t_SIZE           ( ( size_t ) 8 )
+#define ipEXPECTED_UDPHeader_t_SIZE                    ( ( size_t ) 8 )
+#define ipEXPECTED_TCPHeader_t_SIZE                    ( ( size_t ) 20 )
+
+
+/* ICMP protocol definitions. */
+#define ipICMP_ECHO_REQUEST                            ( ( uint8_t ) 8 )
+#define ipICMP_ECHO_REPLY                              ( ( uint8_t ) 0 )
+
+
+/* Time delay between repeated attempts to initialise the network hardware. */
+#ifndef ipINITIALISATION_RETRY_DELAY
+       #define ipINITIALISATION_RETRY_DELAY    ( pdMS_TO_TICKS( 3000 ) )
+#endif
+
+/* 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. */
+#ifndef        ipARP_TIMER_PERIOD_MS
+       #ifdef _WINDOWS_
+               #define ipARP_TIMER_PERIOD_MS   ( 500 ) /* For windows simulator builds. */
+       #else
+               #define ipARP_TIMER_PERIOD_MS   ( 10000 )
+       #endif
+#endif
+
+#ifndef iptraceIP_TASK_STARTING
+       #define iptraceIP_TASK_STARTING()       do {} while( 0 )
+#endif
+
+#if( ( ipconfigUSE_TCP == 1 ) && !defined( ipTCP_TIMER_PERIOD_MS ) )
+       /* When initialising the TCP timer,
+       give it an initial time-out of 1 second. */
+       #define ipTCP_TIMER_PERIOD_MS   ( 1000 )
+#endif
+
+/* If ipconfigETHERNET_DRIVER_FILTERS_FRAME_TYPES is set to 1, then the Ethernet
+driver will filter incoming packets and only pass the stack those packets it
+considers need processing.  In this case ipCONSIDER_FRAME_FOR_PROCESSING() can
+be #defined away.  If ipconfigETHERNET_DRIVER_FILTERS_FRAME_TYPES is set to 0
+then the Ethernet driver will pass all received packets to the stack, and the
+stack must do the filtering itself.  In this case ipCONSIDER_FRAME_FOR_PROCESSING
+needs to call eConsiderFrameForProcessing. */
+#if ipconfigETHERNET_DRIVER_FILTERS_FRAME_TYPES == 0
+       #define ipCONSIDER_FRAME_FOR_PROCESSING( pucEthernetBuffer ) eConsiderFrameForProcessing( ( pucEthernetBuffer ) )
+#else
+       #define ipCONSIDER_FRAME_FOR_PROCESSING( pucEthernetBuffer ) eProcessBuffer
+#endif
+
+/* The character used to fill ICMP echo requests, and therefore also the
+character expected to fill ICMP echo replies. */
+#define ipECHO_DATA_FILL_BYTE                                          'x'
+
+#if( ipconfigBYTE_ORDER == pdFREERTOS_LITTLE_ENDIAN )
+       /* The bits in the two byte IP header field that make up the fragment offset value. */
+       #define ipFRAGMENT_OFFSET_BIT_MASK                              ( ( uint16_t ) 0xff0f )
+#else
+       /* The bits in the two byte IP header field that make up the fragment offset value. */
+       #define ipFRAGMENT_OFFSET_BIT_MASK                              ( ( uint16_t ) 0x0fff )
+#endif /* ipconfigBYTE_ORDER */
+
+/* The maximum time the IP task is allowed to remain in the Blocked state if no
+events are posted to the network event queue. */
+#ifndef        ipconfigMAX_IP_TASK_SLEEP_TIME
+       #define ipconfigMAX_IP_TASK_SLEEP_TIME ( pdMS_TO_TICKS( 10000UL ) )
+#endif
+
+/* When a new TCP connection is established, the value of
+'ulNextInitialSequenceNumber' will be used as the initial sequence number.  It
+is very important that at start-up, 'ulNextInitialSequenceNumber' contains a
+random value.  Also its value must be increased continuously in time, to prevent
+a third party guessing the next sequence number and take-over a TCP connection.
+It is advised to increment it by 1 ever 4us, which makes about 256 times
+per ms: */
+#define ipINITIAL_SEQUENCE_NUMBER_FACTOR       256UL
+
+/* Returned as the (invalid) checksum when the protocol being checked is not
+handled.  The value is chosen simply to be easy to spot when debugging. */
+#define ipUNHANDLED_PROTOCOL           0x4321u
+
+/* Returned to indicate a valid checksum when the checksum does not need to be
+calculated. */
+#define ipCORRECT_CRC                          0xffffu
+
+/* Returned as the (invalid) checksum when the length of the data being checked
+had an invalid length. */
+#define ipINVALID_LENGTH                       0x1234u
+
+/*-----------------------------------------------------------*/
+
+typedef struct xIP_TIMER
+{
+       uint32_t
+               bActive : 1,    /* This timer is running and must be processed. */
+               bExpired : 1;   /* Timer has expired and a task must be processed. */
+       TimeOut_t xTimeOut;
+       TickType_t ulRemainingTime;
+       TickType_t ulReloadTime;
+} IPTimer_t;
+
+/* Used in checksum calculation. */
+typedef union _xUnion32
+{
+       uint32_t u32;
+       uint16_t u16[ 2 ];
+       uint8_t u8[ 4 ];
+} xUnion32;
+
+/* Used in checksum calculation. */
+typedef union _xUnionPtr
+{
+       uint32_t *u32ptr;
+       uint16_t *u16ptr;
+       uint8_t *u8ptr;
+} xUnionPtr;
+
+/*-----------------------------------------------------------*/
+
+/*
+ * The main TCP/IP stack processing task.  This task receives commands/events
+ * from the network hardware drivers and tasks that are using sockets.  It also
+ * maintains a set of protocol timers.
+ */
+static void prvIPTask( void *pvParameters );
+
+/*
+ * Called when new data is available from the network interface.
+ */
+static void prvProcessEthernetPacket( NetworkBufferDescriptor_t * const pxNetworkBuffer );
+
+/*
+ * Process incoming IP packets.
+ */
+static eFrameProcessingResult_t prvProcessIPPacket( IPPacket_t * const pxIPPacket, NetworkBufferDescriptor_t * const pxNetworkBuffer );
+
+#if ( ipconfigREPLY_TO_INCOMING_PINGS == 1 ) || ( ipconfigSUPPORT_OUTGOING_PINGS == 1 )
+       /*
+        * Process incoming ICMP packets.
+        */
+       static eFrameProcessingResult_t prvProcessICMPPacket( ICMPPacket_t * const pxICMPPacket );
+#endif /* ( ipconfigREPLY_TO_INCOMING_PINGS == 1 ) || ( ipconfigSUPPORT_OUTGOING_PINGS == 1 ) */
+
+/*
+ * Turns around an incoming ping request to convert it into a ping reply.
+ */
+#if ( ipconfigREPLY_TO_INCOMING_PINGS == 1 )
+       static eFrameProcessingResult_t prvProcessICMPEchoRequest( ICMPPacket_t * const pxICMPPacket );
+#endif /* ipconfigREPLY_TO_INCOMING_PINGS */
+
+/*
+ * Processes incoming ping replies.  The application callback function
+ * vApplicationPingReplyHook() is called with the results.
+ */
+#if ( ipconfigSUPPORT_OUTGOING_PINGS == 1 )
+       static void prvProcessICMPEchoReply( ICMPPacket_t * const pxICMPPacket );
+#endif /* ipconfigSUPPORT_OUTGOING_PINGS */
+
+/*
+ * Called to create a network connection when the stack is first started, or
+ * when the network connection is lost.
+ */
+static void prvProcessNetworkDownEvent( void );
+
+/*
+ * Checks the ARP, DHCP and TCP timers to see if any periodic or timeout
+ * processing is required.
+ */
+static void prvCheckNetworkTimers( void );
+
+/*
+ * Determine how long the IP task can sleep for, which depends on when the next
+ * periodic or timeout processing must be performed.
+ */
+static TickType_t prvCalculateSleepTime( void );
+
+/*
+ * The network card driver has received a packet.  In the case that it is part
+ * of a linked packet chain, walk through it to handle every message.
+ */
+static void prvHandleEthernetPacket( NetworkBufferDescriptor_t *pxBuffer );
+
+/*
+ * Utility functions for the light weight IP timers.
+ */
+static void prvIPTimerStart( IPTimer_t *pxTimer, TickType_t xTime );
+static BaseType_t prvIPTimerCheck( IPTimer_t *pxTimer );
+static void prvIPTimerReload( IPTimer_t *pxTimer, TickType_t xTime );
+
+static eFrameProcessingResult_t prvAllowIPPacket( const IPPacket_t * const pxIPPacket,
+       NetworkBufferDescriptor_t * const pxNetworkBuffer, UBaseType_t uxHeaderLength );
+
+/*-----------------------------------------------------------*/
+
+/* The queue used to pass events into the IP-task for processing. */
+QueueHandle_t xNetworkEventQueue = NULL;
+
+/*_RB_ Requires comment. */
+uint16_t usPacketIdentifier = 0U;
+
+/* For convenience, a MAC address of all 0xffs is defined const for quick
+reference. */
+const MACAddress_t xBroadcastMACAddress = { { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff } };
+
+/* Structure that stores the netmask, gateway address and DNS server addresses. */
+NetworkAddressingParameters_t xNetworkAddressing = { 0, 0, 0, 0, 0 };
+
+/* Default values for the above struct in case DHCP
+does not lead to a confirmed request. */
+NetworkAddressingParameters_t xDefaultAddressing = { 0, 0, 0, 0, 0 };
+
+/* Used to ensure network down events cannot be missed when they cannot be
+posted to the network event queue because the network event queue is already
+full. */
+static BaseType_t xNetworkDownEventPending = pdFALSE;
+
+/* Stores the handle of the task that handles the stack.  The handle is used
+(indirectly) by some utility function to determine if the utility function is
+being called by a task (in which case it is ok to block) or by the IP task
+itself (in which case it is not ok to block). */
+static TaskHandle_t xIPTaskHandle = NULL;
+
+#if( ipconfigUSE_TCP != 0 )
+       /* Set to a non-zero value if one or more TCP message have been processed
+       within the last round. */
+       static BaseType_t xProcessedTCPMessage;
+#endif
+
+/* Simple set to pdTRUE or pdFALSE depending on whether the network is up or
+down (connected, not connected) respectively. */
+static BaseType_t xNetworkUp = pdFALSE;
+
+/*
+A timer for each of the following processes, all of which need attention on a
+regular basis:
+       1. ARP, to check its table entries
+       2. DPHC, to send requests and to renew a reservation
+       3. TCP, to check for timeouts, resends
+       4. DNS, to check for timeouts when looking-up a domain.
+ */
+static IPTimer_t xARPTimer;
+#if( ipconfigUSE_DHCP != 0 )
+       static IPTimer_t xDHCPTimer;
+#endif
+#if( ipconfigUSE_TCP != 0 )
+       static IPTimer_t xTCPTimer;
+#endif
+#if( ipconfigDNS_USE_CALLBACKS != 0 )
+       static IPTimer_t xDNSTimer;
+#endif
+
+/* Set to pdTRUE when the IP task is ready to start processing packets. */
+static BaseType_t xIPTaskInitialised = pdFALSE;
+
+#if( ipconfigCHECK_IP_QUEUE_SPACE != 0 )
+       /* Keep track of the lowest amount of space in 'xNetworkEventQueue'. */
+       static UBaseType_t uxQueueMinimumSpace = ipconfigEVENT_QUEUE_LENGTH;
+#endif
+
+/*-----------------------------------------------------------*/
+
+static void prvIPTask( void *pvParameters )
+{
+IPStackEvent_t xReceivedEvent;
+TickType_t xNextIPSleep;
+FreeRTOS_Socket_t *pxSocket;
+struct freertos_sockaddr xAddress;
+
+       /* Just to prevent compiler warnings about unused parameters. */
+       ( void ) pvParameters;
+
+       /* A possibility to set some additional task properties. */
+       iptraceIP_TASK_STARTING();
+
+       /* Generate a dummy message to say that the network connection has gone
+       down.  This will cause this task to initialise the network interface.  After
+       this it is the responsibility of the network interface hardware driver to
+       send this message if a previously connected network is disconnected. */
+       FreeRTOS_NetworkDown();
+
+       #if( ipconfigUSE_TCP == 1 )
+       {
+               /* Initialise the TCP timer. */
+               prvIPTimerReload( &xTCPTimer, pdMS_TO_TICKS( ipTCP_TIMER_PERIOD_MS ) );
+       }
+       #endif
+
+       /* Initialisation is complete and events can now be processed. */
+       xIPTaskInitialised = pdTRUE;
+
+       FreeRTOS_debug_printf( ( "prvIPTask started\n" ) );
+
+       /* Loop, processing IP events. */
+       for( ;; )
+       {
+               ipconfigWATCHDOG_TIMER();
+
+               /* Check the ARP, DHCP and TCP timers to see if there is any periodic
+               or timeout processing to perform. */
+               prvCheckNetworkTimers();
+
+               /* Calculate the acceptable maximum sleep time. */
+               xNextIPSleep = prvCalculateSleepTime();
+
+               /* Wait until there is something to do. If the following call exits
+                * due to a time out rather than a message being received, set a
+                * 'NoEvent' value. */
+               if ( xQueueReceive( xNetworkEventQueue, ( void * ) &xReceivedEvent, xNextIPSleep ) == pdFALSE ) 
+               {
+                       xReceivedEvent.eEventType = eNoEvent;
+               }
+
+               #if( ipconfigCHECK_IP_QUEUE_SPACE != 0 )
+               {
+                       if( xReceivedEvent.eEventType != eNoEvent )
+                       {
+                       UBaseType_t uxCount;
+
+                               uxCount = uxQueueSpacesAvailable( xNetworkEventQueue );
+                               if( uxQueueMinimumSpace > uxCount )
+                               {
+                                       uxQueueMinimumSpace = uxCount;
+                               }
+                       }
+               }
+               #endif /* ipconfigCHECK_IP_QUEUE_SPACE */
+
+               iptraceNETWORK_EVENT_RECEIVED( xReceivedEvent.eEventType );
+
+               switch( xReceivedEvent.eEventType )
+               {
+                       case eNetworkDownEvent :
+                               /* Attempt to establish a connection. */
+                               xNetworkUp = pdFALSE;
+                               prvProcessNetworkDownEvent();
+                               break;
+
+                       case eNetworkRxEvent:
+                               /* The network hardware driver has received a new packet.  A
+                               pointer to the received buffer is located in the pvData member
+                               of the received event structure. */
+                               prvHandleEthernetPacket( ( NetworkBufferDescriptor_t * ) ( xReceivedEvent.pvData ) );
+                               break;
+
+                       case eNetworkTxEvent:
+                               /* Send a network packet. The ownership will  be transferred to
+                               the driver, which will release it after delivery. */
+                               xNetworkInterfaceOutput( ( NetworkBufferDescriptor_t * ) ( xReceivedEvent.pvData ), pdTRUE );
+                               break;
+
+                       case eARPTimerEvent :
+                               /* The ARP timer has expired, process the ARP cache. */
+                               vARPAgeCache();
+                               break;
+
+                       case eSocketBindEvent:
+                               /* FreeRTOS_bind (a user API) wants the IP-task to bind a socket
+                               to a port. The port number is communicated in the socket field
+                               usLocalPort. vSocketBind() will actually bind the socket and the
+                               API will unblock as soon as the eSOCKET_BOUND event is
+                               triggered. */
+                               pxSocket = ( FreeRTOS_Socket_t * ) ( xReceivedEvent.pvData );
+                               xAddress.sin_addr = 0u; /* For the moment. */
+                               xAddress.sin_port = FreeRTOS_ntohs( pxSocket->usLocalPort );
+                               pxSocket->usLocalPort = 0u;
+                               vSocketBind( pxSocket, &xAddress, sizeof( xAddress ), pdFALSE );
+
+                               /* Before 'eSocketBindEvent' was sent it was tested that
+                               ( xEventGroup != NULL ) so it can be used now to wake up the
+                               user. */
+                               pxSocket->xEventBits |= eSOCKET_BOUND;
+                               vSocketWakeUpUser( pxSocket );
+                               break;
+
+                       case eSocketCloseEvent :
+                               /* The user API FreeRTOS_closesocket() has sent a message to the
+                               IP-task to actually close a socket. This is handled in
+                               vSocketClose().  As the socket gets closed, there is no way to
+                               report back to the API, so the API won't wait for the result */
+                               vSocketClose( ( FreeRTOS_Socket_t * ) ( xReceivedEvent.pvData ) );
+                               break;
+
+                       case eStackTxEvent :
+                               /* The network stack has generated a packet to send.  A
+                               pointer to the generated buffer is located in the pvData
+                               member of the received event structure. */
+                               vProcessGeneratedUDPPacket( ( NetworkBufferDescriptor_t * ) ( xReceivedEvent.pvData ) );
+                               break;
+
+                       case eDHCPEvent:
+                               /* The DHCP state machine needs processing. */
+                               #if( ipconfigUSE_DHCP == 1 )
+                               {
+                                       vDHCPProcess( pdFALSE );
+                               }
+                               #endif /* ipconfigUSE_DHCP */
+                               break;
+
+                       case eSocketSelectEvent :
+                               /* FreeRTOS_select() has got unblocked by a socket event,
+                               vSocketSelect() will check which sockets actually have an event
+                               and update the socket field xSocketBits. */
+                               #if( ipconfigSUPPORT_SELECT_FUNCTION == 1 )
+                               {
+                                       vSocketSelect( ( SocketSelect_t * ) ( xReceivedEvent.pvData ) );
+                               }
+                               #endif /* ipconfigSUPPORT_SELECT_FUNCTION == 1 */
+                               break;
+
+                       case eSocketSignalEvent :
+                               #if( ipconfigSUPPORT_SIGNALS != 0 )
+                               {
+                                       /* Some task wants to signal the user of this socket in
+                                       order to interrupt a call to recv() or a call to select(). */
+                                       FreeRTOS_SignalSocket( ( Socket_t ) xReceivedEvent.pvData );
+                               }
+                               #endif /* ipconfigSUPPORT_SIGNALS */
+                               break;
+
+                       case eTCPTimerEvent :
+                               #if( ipconfigUSE_TCP == 1 )
+                               {
+                                       /* Simply mark the TCP timer as expired so it gets processed
+                                       the next time prvCheckNetworkTimers() is called. */
+                                       xTCPTimer.bExpired = pdTRUE_UNSIGNED;
+                               }
+                               #endif /* ipconfigUSE_TCP */
+                               break;
+
+                       case eTCPAcceptEvent:
+                               /* The API FreeRTOS_accept() was called, the IP-task will now
+                               check if the listening socket (communicated in pvData) actually
+                               received a new connection. */
+                               #if( ipconfigUSE_TCP == 1 )
+                               {
+                                       pxSocket = ( FreeRTOS_Socket_t * ) ( xReceivedEvent.pvData );
+
+                                       if( xTCPCheckNewClient( pxSocket ) != pdFALSE )
+                                       {
+                                               pxSocket->xEventBits |= eSOCKET_ACCEPT;
+                                               vSocketWakeUpUser( pxSocket );
+                                       }
+                               }
+                               #endif /* ipconfigUSE_TCP */
+                               break;
+
+                       case eTCPNetStat:
+                               /* FreeRTOS_netstat() was called to have the IP-task print an
+                               overview of all sockets and their connections */
+                               #if( ( ipconfigUSE_TCP == 1 ) && ( ipconfigHAS_PRINTF == 1 ) )
+                               {
+                                       vTCPNetStat();
+                               }
+                               #endif /* ipconfigUSE_TCP */
+                               break;
+
+                       default :
+                               /* Should not get here. */
+                               break;
+               }
+
+               if( xNetworkDownEventPending != pdFALSE )
+               {
+                       /* A network down event could not be posted to the network event
+                       queue because the queue was full.  Try posting again. */
+                       FreeRTOS_NetworkDown();
+               }
+       }
+}
+/*-----------------------------------------------------------*/
+
+BaseType_t xIsCallingFromIPTask( void )
+{
+BaseType_t xReturn;
+
+       if( xTaskGetCurrentTaskHandle() == xIPTaskHandle )
+       {
+               xReturn = pdTRUE;
+       }
+       else
+       {
+               xReturn = pdFALSE;
+       }
+
+       return xReturn;
+}
+/*-----------------------------------------------------------*/
+
+static void prvHandleEthernetPacket( NetworkBufferDescriptor_t *pxBuffer )
+{
+       #if( ipconfigUSE_LINKED_RX_MESSAGES == 0 )
+       {
+               /* When ipconfigUSE_LINKED_RX_MESSAGES is not set to 0 then only one
+               buffer will be sent at a time.  This is the default way for +TCP to pass
+               messages from the MAC to the TCP/IP stack. */
+               prvProcessEthernetPacket( pxBuffer );
+       }
+       #else /* ipconfigUSE_LINKED_RX_MESSAGES */
+       {
+       NetworkBufferDescriptor_t *pxNextBuffer;
+
+               /* An optimisation that is useful when there is high network traffic.
+               Instead of passing received packets into the IP task one at a time the
+               network interface can chain received packets together and pass them into
+               the IP task in one go.  The packets are chained using the pxNextBuffer
+               member.  The loop below walks through the chain processing each packet
+               in the chain in turn. */
+               do
+               {
+                       /* Store a pointer to the buffer after pxBuffer for use later on. */
+                       pxNextBuffer = pxBuffer->pxNextBuffer;
+
+                       /* Make it NULL to avoid using it later on. */
+                       pxBuffer->pxNextBuffer = NULL;
+
+                       prvProcessEthernetPacket( pxBuffer );
+                       pxBuffer = pxNextBuffer;
+
+               /* While there is another packet in the chain. */
+               } while( pxBuffer != NULL );
+       }
+       #endif /* ipconfigUSE_LINKED_RX_MESSAGES */
+}
+/*-----------------------------------------------------------*/
+
+static TickType_t prvCalculateSleepTime( void )
+{
+TickType_t xMaximumSleepTime;
+
+       /* Start with the maximum sleep time, then check this against the remaining
+       time in any other timers that are active. */
+       xMaximumSleepTime = ipconfigMAX_IP_TASK_SLEEP_TIME;
+
+       if( xARPTimer.bActive != pdFALSE_UNSIGNED )
+       {
+               if( xARPTimer.ulRemainingTime < xMaximumSleepTime )
+               {
+                       xMaximumSleepTime = xARPTimer.ulReloadTime;
+               }
+       }
+
+       #if( ipconfigUSE_DHCP == 1 )
+       {
+               if( xDHCPTimer.bActive != pdFALSE_UNSIGNED )
+               {
+                       if( xDHCPTimer.ulRemainingTime < xMaximumSleepTime )
+                       {
+                               xMaximumSleepTime = xDHCPTimer.ulRemainingTime;
+                       }
+               }
+       }
+       #endif /* ipconfigUSE_DHCP */
+
+       #if( ipconfigUSE_TCP == 1 )
+       {
+               if( xTCPTimer.ulRemainingTime < xMaximumSleepTime )
+               {
+                       xMaximumSleepTime = xTCPTimer.ulRemainingTime;
+               }
+       }
+       #endif
+
+       #if( ipconfigDNS_USE_CALLBACKS != 0 )
+       {
+               if( xDNSTimer.bActive != pdFALSE )
+               {
+                       if( xDNSTimer.ulRemainingTime < xMaximumSleepTime )
+                       {
+                               xMaximumSleepTime = xDNSTimer.ulRemainingTime;
+                       }
+               }
+       }
+       #endif
+
+       return xMaximumSleepTime;
+}
+/*-----------------------------------------------------------*/
+
+static void prvCheckNetworkTimers( void )
+{
+       /* Is it time for ARP processing? */
+       if( prvIPTimerCheck( &xARPTimer ) != pdFALSE )
+       {
+               xSendEventToIPTask( eARPTimerEvent );
+       }
+
+       #if( ipconfigUSE_DHCP == 1 )
+       {
+               /* Is it time for DHCP processing? */
+               if( prvIPTimerCheck( &xDHCPTimer ) != pdFALSE )
+               {
+                       xSendEventToIPTask( eDHCPEvent );
+               }
+       }
+       #endif /* ipconfigUSE_DHCP */
+
+       #if( ipconfigDNS_USE_CALLBACKS != 0 )
+       {
+       extern void vDNSCheckCallBack( void *pvSearchID );
+
+               /* Is it time for DNS processing? */
+               if( prvIPTimerCheck( &xDNSTimer ) != pdFALSE )
+               {
+                       vDNSCheckCallBack( NULL );
+               }
+       }
+       #endif /* ipconfigDNS_USE_CALLBACKS */
+
+       #if( ipconfigUSE_TCP == 1 )
+       {
+       BaseType_t xWillSleep;
+       TickType_t xNextTime;
+       BaseType_t xCheckTCPSockets;
+
+               if( uxQueueMessagesWaiting( xNetworkEventQueue ) == 0u )
+               {
+                       xWillSleep = pdTRUE;
+               }
+               else
+               {
+                       xWillSleep = pdFALSE;
+               }
+
+               /* Sockets need to be checked if the TCP timer has expired. */
+               xCheckTCPSockets = prvIPTimerCheck( &xTCPTimer );
+
+               /* Sockets will also be checked if there are TCP messages but the
+               message queue is empty (indicated by xWillSleep being true). */
+               if( ( xProcessedTCPMessage != pdFALSE ) && ( xWillSleep != pdFALSE ) )
+               {
+                       xCheckTCPSockets = pdTRUE;
+               }
+
+               if( xCheckTCPSockets != pdFALSE )
+               {
+                       /* Attend to the sockets, returning the period after which the
+                       check must be repeated. */
+                       xNextTime = xTCPTimerCheck( xWillSleep );
+                       prvIPTimerStart( &xTCPTimer, xNextTime );
+                       xProcessedTCPMessage = 0;
+               }
+       }
+       #endif /* ipconfigUSE_TCP == 1 */
+}
+/*-----------------------------------------------------------*/
+
+static void prvIPTimerStart( IPTimer_t *pxTimer, TickType_t xTime )
+{
+       vTaskSetTimeOutState( &pxTimer->xTimeOut );
+       pxTimer->ulRemainingTime = xTime;
+
+       if( xTime == ( TickType_t ) 0 )
+       {
+               pxTimer->bExpired = pdTRUE_UNSIGNED;
+       }
+       else
+       {
+               pxTimer->bExpired = pdFALSE_UNSIGNED;
+       }
+
+       pxTimer->bActive = pdTRUE_UNSIGNED;
+}
+/*-----------------------------------------------------------*/
+
+static void prvIPTimerReload( IPTimer_t *pxTimer, TickType_t xTime )
+{
+       pxTimer->ulReloadTime = xTime;
+       prvIPTimerStart( pxTimer, xTime );
+}
+/*-----------------------------------------------------------*/
+
+static BaseType_t prvIPTimerCheck( IPTimer_t *pxTimer )
+{
+BaseType_t xReturn;
+
+       if( pxTimer->bActive == pdFALSE_UNSIGNED )
+       {
+               /* The timer is not enabled. */
+               xReturn = pdFALSE;
+       }
+       else
+       {
+               /* The timer might have set the bExpired flag already, if not, check the
+               value of xTimeOut against ulRemainingTime. */
+               if( ( pxTimer->bExpired != pdFALSE_UNSIGNED ) ||
+                       ( xTaskCheckForTimeOut( &( pxTimer->xTimeOut ), &( pxTimer->ulRemainingTime ) ) != pdFALSE ) )
+               {
+                       prvIPTimerStart( pxTimer, pxTimer->ulReloadTime );
+                       xReturn = pdTRUE;
+               }
+               else
+               {
+                       xReturn = pdFALSE;
+               }
+       }
+
+       return xReturn;
+}
+/*-----------------------------------------------------------*/
+
+void FreeRTOS_NetworkDown( void )
+{
+static const IPStackEvent_t xNetworkDownEvent = { eNetworkDownEvent, NULL };
+const TickType_t xDontBlock = ( TickType_t ) 0;
+
+       /* Simply send the network task the appropriate event. */
+       if( xSendEventStructToIPTask( &xNetworkDownEvent, xDontBlock ) != pdPASS )
+       {
+               /* Could not send the message, so it is still pending. */
+               xNetworkDownEventPending = pdTRUE;
+       }
+       else
+       {
+               /* Message was sent so it is not pending. */
+               xNetworkDownEventPending = pdFALSE;
+       }
+
+       iptraceNETWORK_DOWN();
+}
+/*-----------------------------------------------------------*/
+
+BaseType_t FreeRTOS_NetworkDownFromISR( void )
+{
+static const IPStackEvent_t xNetworkDownEvent = { eNetworkDownEvent, NULL };
+BaseType_t xHigherPriorityTaskWoken = pdFALSE;
+
+       /* Simply send the network task the appropriate event. */
+       if( xQueueSendToBackFromISR( xNetworkEventQueue, &xNetworkDownEvent, &xHigherPriorityTaskWoken ) != pdPASS )
+       {
+               xNetworkDownEventPending = pdTRUE;
+       }
+       else
+       {
+               xNetworkDownEventPending = pdFALSE;
+       }
+
+       iptraceNETWORK_DOWN();
+
+       return xHigherPriorityTaskWoken;
+}
+/*-----------------------------------------------------------*/
+
+void *FreeRTOS_GetUDPPayloadBuffer( size_t xRequestedSizeBytes, TickType_t xBlockTimeTicks )
+{
+NetworkBufferDescriptor_t *pxNetworkBuffer;
+void *pvReturn;
+
+       /* Cap the block time.  The reason for this is explained where
+       ipconfigUDP_MAX_SEND_BLOCK_TIME_TICKS is defined (assuming an official
+       FreeRTOSIPConfig.h header file is being used). */
+       if( xBlockTimeTicks > ipconfigUDP_MAX_SEND_BLOCK_TIME_TICKS )
+       {
+               xBlockTimeTicks = ipconfigUDP_MAX_SEND_BLOCK_TIME_TICKS;
+       }
+
+       /* Obtain a network buffer with the required amount of storage. */
+       pxNetworkBuffer = pxGetNetworkBufferWithDescriptor( sizeof( UDPPacket_t ) + xRequestedSizeBytes, xBlockTimeTicks );
+
+       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. */
+               pvReturn = ( void * ) &( pxNetworkBuffer->pucEthernetBuffer[ ipUDP_PAYLOAD_OFFSET_IPv4 ] );
+       }
+       else
+       {
+               pvReturn = NULL;
+       }
+
+       return ( void * ) pvReturn;
+}
+/*-----------------------------------------------------------*/
+
+NetworkBufferDescriptor_t *pxDuplicateNetworkBufferWithDescriptor( NetworkBufferDescriptor_t * const pxNetworkBuffer,
+       size_t uxNewLength )
+{
+NetworkBufferDescriptor_t * pxNewBuffer;
+
+       /* This function is only used when 'ipconfigZERO_COPY_TX_DRIVER' is set to 1.
+       The transmit routine wants to have ownership of the network buffer
+       descriptor, because it will pass the buffer straight to DMA. */
+       pxNewBuffer = pxGetNetworkBufferWithDescriptor( uxNewLength, ( TickType_t ) 0 );
+
+       if( pxNewBuffer != NULL )
+       {
+               /* Set the actual packet size in case a bigger buffer than requested
+               was returned. */
+               pxNewBuffer->xDataLength = uxNewLength;
+
+               /* Copy the original packet information. */
+               pxNewBuffer->ulIPAddress = pxNetworkBuffer->ulIPAddress;
+               pxNewBuffer->usPort = pxNetworkBuffer->usPort;
+               pxNewBuffer->usBoundPort = pxNetworkBuffer->usBoundPort;
+               memcpy( pxNewBuffer->pucEthernetBuffer, pxNetworkBuffer->pucEthernetBuffer, pxNetworkBuffer->xDataLength );
+       }
+
+       return pxNewBuffer;
+}
+/*-----------------------------------------------------------*/
+
+#if( ipconfigZERO_COPY_TX_DRIVER != 0 ) || ( ipconfigZERO_COPY_RX_DRIVER != 0 )
+
+       NetworkBufferDescriptor_t *pxPacketBuffer_to_NetworkBuffer( const void *pvBuffer )
+       {
+       uint8_t *pucBuffer;
+       NetworkBufferDescriptor_t *pxResult;
+
+               if( pvBuffer == NULL )
+               {
+                       pxResult = NULL;
+               }
+               else
+               {
+                       /* Obtain the network buffer from the zero copy pointer. */
+                       pucBuffer = ( uint8_t * ) pvBuffer;
+
+                       /* The input here is a pointer to a payload buffer.  Subtract the
+                       size of the header in the network buffer, usually 8 + 2 bytes. */
+                       pucBuffer -= ipBUFFER_PADDING;
+
+                       /* Here a pointer was placed to the network descriptor.  As a
+                       pointer is dereferenced, make sure it is well aligned. */
+                       if( ( ( ( uint32_t ) pucBuffer ) & ( sizeof( pucBuffer ) - ( size_t ) 1 ) ) == ( uint32_t ) 0 )
+                       {
+                               pxResult = * ( ( NetworkBufferDescriptor_t ** ) pucBuffer );
+                       }
+                       else
+                       {
+                               pxResult = NULL;
+                       }
+               }
+
+               return pxResult;
+       }
+
+#endif /* ipconfigZERO_COPY_TX_DRIVER != 0 */
+/*-----------------------------------------------------------*/
+
+NetworkBufferDescriptor_t *pxUDPPayloadBuffer_to_NetworkBuffer( void *pvBuffer )
+{
+uint8_t *pucBuffer;
+NetworkBufferDescriptor_t *pxResult;
+
+       if( pvBuffer == NULL )
+       {
+               pxResult = NULL;
+       }
+       else
+       {
+               /* Obtain the network buffer from the zero copy pointer. */
+               pucBuffer = ( uint8_t * ) pvBuffer;
+
+               /* The input here is a pointer to a payload buffer.  Subtract
+               the total size of a UDP/IP header plus the size of the header in
+               the network buffer, usually 8 + 2 bytes. */
+               pucBuffer -= ( sizeof( UDPPacket_t ) + ipBUFFER_PADDING );
+
+               /* Here a pointer was placed to the network descriptor,
+               As a pointer is dereferenced, make sure it is well aligned */
+               if( ( ( ( uint32_t ) pucBuffer ) & ( sizeof( pucBuffer ) - 1 ) ) == 0 )
+               {
+                       /* The following statement may trigger a:
+                       warning: cast increases required alignment of target type [-Wcast-align].
+                       It has been confirmed though that the alignment is suitable. */
+                       pxResult = * ( ( NetworkBufferDescriptor_t ** ) pucBuffer );
+               }
+               else
+               {
+                       pxResult = NULL;
+               }
+       }
+
+       return pxResult;
+}
+/*-----------------------------------------------------------*/
+
+void FreeRTOS_ReleaseUDPPayloadBuffer( void *pvBuffer )
+{
+       vReleaseNetworkBufferAndDescriptor( pxUDPPayloadBuffer_to_NetworkBuffer( pvBuffer ) );
+}
+/*-----------------------------------------------------------*/
+
+/*_RB_ Should we add an error or assert if the task priorities are set such that the servers won't function as expected? */
+/*_HT_ There was a bug in FreeRTOS_TCP_IP.c that only occurred when the applications' priority was too high.
+ As that bug has been repaired, there is not an urgent reason to warn.
+ It is better though to use the advised priority scheme. */
+BaseType_t FreeRTOS_IPInit( const uint8_t ucIPAddress[ ipIP_ADDRESS_LENGTH_BYTES ], const uint8_t ucNetMask[ ipIP_ADDRESS_LENGTH_BYTES ], const uint8_t ucGatewayAddress[ ipIP_ADDRESS_LENGTH_BYTES ], const uint8_t ucDNSServerAddress[ ipIP_ADDRESS_LENGTH_BYTES ], const uint8_t ucMACAddress[ ipMAC_ADDRESS_LENGTH_BYTES ] )
+{
+BaseType_t xReturn = pdFALSE;
+
+       /* This function should only be called once. */
+       configASSERT( xIPIsNetworkTaskReady() == pdFALSE );
+       configASSERT( xNetworkEventQueue == NULL );
+       configASSERT( xIPTaskHandle == NULL );
+
+       /* Check structure packing is correct. */
+       configASSERT( sizeof( EthernetHeader_t ) == ipEXPECTED_EthernetHeader_t_SIZE );
+       configASSERT( sizeof( ARPHeader_t ) == ipEXPECTED_ARPHeader_t_SIZE );
+       configASSERT( sizeof( IPHeader_t ) == ipEXPECTED_IPHeader_t_SIZE );
+       configASSERT( sizeof( ICMPHeader_t ) == ipEXPECTED_ICMPHeader_t_SIZE );
+       configASSERT( sizeof( UDPHeader_t ) == ipEXPECTED_UDPHeader_t_SIZE );
+
+       /* Attempt to create the queue used to communicate with the IP task. */
+       xNetworkEventQueue = xQueueCreate( ( UBaseType_t ) ipconfigEVENT_QUEUE_LENGTH, ( UBaseType_t ) sizeof( IPStackEvent_t ) );
+       configASSERT( xNetworkEventQueue );
+
+       if( xNetworkEventQueue != NULL )
+       {
+               #if ( configQUEUE_REGISTRY_SIZE > 0 )
+               {
+                       /* A queue registry is normally used to assist a kernel aware
+                       debugger.  If one is in use then it will be helpful for the debugger
+                       to show information about the network event queue. */
+                       vQueueAddToRegistry( xNetworkEventQueue, "NetEvnt" );
+               }
+               #endif /* configQUEUE_REGISTRY_SIZE */
+
+               if( xNetworkBuffersInitialise() == pdPASS )
+               {
+                       /* Store the local IP and MAC address. */
+                       xNetworkAddressing.ulDefaultIPAddress = FreeRTOS_inet_addr_quick( ucIPAddress[ 0 ], ucIPAddress[ 1 ], ucIPAddress[ 2 ], ucIPAddress[ 3 ] );
+                       xNetworkAddressing.ulNetMask = FreeRTOS_inet_addr_quick( ucNetMask[ 0 ], ucNetMask[ 1 ], ucNetMask[ 2 ], ucNetMask[ 3 ] );
+                       xNetworkAddressing.ulGatewayAddress = FreeRTOS_inet_addr_quick( ucGatewayAddress[ 0 ], ucGatewayAddress[ 1 ], ucGatewayAddress[ 2 ], ucGatewayAddress[ 3 ] );
+                       xNetworkAddressing.ulDNSServerAddress = FreeRTOS_inet_addr_quick( ucDNSServerAddress[ 0 ], ucDNSServerAddress[ 1 ], ucDNSServerAddress[ 2 ], ucDNSServerAddress[ 3 ] );
+                       xNetworkAddressing.ulBroadcastAddress = ( xNetworkAddressing.ulDefaultIPAddress & xNetworkAddressing.ulNetMask ) |  ~xNetworkAddressing.ulNetMask;
+
+                       memcpy( &xDefaultAddressing, &xNetworkAddressing, sizeof( xDefaultAddressing ) );
+
+                       #if ipconfigUSE_DHCP == 1
+                       {
+                               /* The IP address is not set until DHCP completes. */
+                               *ipLOCAL_IP_ADDRESS_POINTER = 0x00UL;
+                       }
+                       #else
+                       {
+                               /* The IP address is set from the value passed in. */
+                               *ipLOCAL_IP_ADDRESS_POINTER = xNetworkAddressing.ulDefaultIPAddress;
+
+                               /* Added to prevent ARP flood to gateway.  Ensure the
+                               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 ) );
+                               }
+                       }
+                       #endif /* ipconfigUSE_DHCP == 1 */
+
+                       /* The MAC address is stored in the start of the default packet
+                       header fragment, which is used when sending UDP packets. */
+                       memcpy( ( void * ) ipLOCAL_MAC_ADDRESS, ( void * ) ucMACAddress, ( size_t ) ipMAC_ADDRESS_LENGTH_BYTES );
+
+                       /* Prepare the sockets interface. */
+                       xReturn = vNetworkSocketsInit();
+
+                       if( pdTRUE == xReturn )
+                       {
+                               /* 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 );
+                       }
+               }
+               else
+               {
+                       FreeRTOS_debug_printf( ( "FreeRTOS_IPInit: xNetworkBuffersInitialise() failed\n") );
+
+                       /* Clean up. */
+                       vQueueDelete( xNetworkEventQueue );
+                       xNetworkEventQueue = NULL;
+               }
+       }
+       else
+       {
+               FreeRTOS_debug_printf( ( "FreeRTOS_IPInit: Network event queue could not be created\n") );
+       }
+
+       return xReturn;
+}
+/*-----------------------------------------------------------*/
+
+void FreeRTOS_GetAddressConfiguration( uint32_t *pulIPAddress, uint32_t *pulNetMask, uint32_t *pulGatewayAddress, uint32_t *pulDNSServerAddress )
+{
+       /* Return the address configuration to the caller. */
+
+       if( pulIPAddress != NULL )
+       {
+               *pulIPAddress = *ipLOCAL_IP_ADDRESS_POINTER;
+       }
+
+       if( pulNetMask != NULL )
+       {
+               *pulNetMask = xNetworkAddressing.ulNetMask;
+       }
+
+       if( pulGatewayAddress != NULL )
+       {
+               *pulGatewayAddress = xNetworkAddressing.ulGatewayAddress;
+       }
+
+       if( pulDNSServerAddress != NULL )
+       {
+               *pulDNSServerAddress = xNetworkAddressing.ulDNSServerAddress;
+       }
+}
+/*-----------------------------------------------------------*/
+
+void FreeRTOS_SetAddressConfiguration( const uint32_t *pulIPAddress, const uint32_t *pulNetMask, const uint32_t *pulGatewayAddress, const uint32_t *pulDNSServerAddress )
+{
+       /* Update the address configuration. */
+
+       if( pulIPAddress != NULL )
+       {
+               *ipLOCAL_IP_ADDRESS_POINTER = *pulIPAddress;
+       }
+
+       if( pulNetMask != NULL )
+       {
+               xNetworkAddressing.ulNetMask = *pulNetMask;
+       }
+
+       if( pulGatewayAddress != NULL )
+       {
+               xNetworkAddressing.ulGatewayAddress = *pulGatewayAddress;
+       }
+
+       if( pulDNSServerAddress != NULL )
+       {
+               xNetworkAddressing.ulDNSServerAddress = *pulDNSServerAddress;
+       }
+}
+/*-----------------------------------------------------------*/
+
+#if ( ipconfigSUPPORT_OUTGOING_PINGS == 1 )
+
+       BaseType_t FreeRTOS_SendPingRequest( uint32_t ulIPAddress, size_t xNumberOfBytesToSend, TickType_t xBlockTimeTicks )
+       {
+       NetworkBufferDescriptor_t *pxNetworkBuffer;
+       ICMPHeader_t *pxICMPHeader;
+       BaseType_t xReturn = pdFAIL;
+       static uint16_t usSequenceNumber = 0;
+       uint8_t *pucChar;
+       IPStackEvent_t xStackTxEvent = { eStackTxEvent, NULL };
+
+               if( (xNumberOfBytesToSend >= 1 ) && ( xNumberOfBytesToSend < ( ( ipconfigNETWORK_MTU - sizeof( IPHeader_t ) ) - sizeof( ICMPHeader_t ) ) ) && ( uxGetNumberOfFreeNetworkBuffers() >= 3 ) )
+               {
+                       pxNetworkBuffer = pxGetNetworkBufferWithDescriptor( xNumberOfBytesToSend + sizeof( ICMPPacket_t ), xBlockTimeTicks );
+
+                       if( pxNetworkBuffer != NULL )
+                       {
+                               pxICMPHeader = ( ICMPHeader_t * ) &( pxNetworkBuffer->pucEthernetBuffer[ ipIP_PAYLOAD_OFFSET ] );
+                               usSequenceNumber++;
+
+                               /* Fill in the basic header information. */
+                               pxICMPHeader->ucTypeOfMessage = ipICMP_ECHO_REQUEST;
+                               pxICMPHeader->ucTypeOfService = 0;
+                               pxICMPHeader->usIdentifier = usSequenceNumber;
+                               pxICMPHeader->usSequenceNumber = usSequenceNumber;
+
+                               /* Find the start of the data. */
+                               pucChar = ( uint8_t * ) pxICMPHeader;
+                               pucChar += sizeof( ICMPHeader_t );
+
+                               /* Just memset the data to a fixed value. */
+                               memset( ( void * ) pucChar, ( int ) ipECHO_DATA_FILL_BYTE, xNumberOfBytesToSend );
+
+                               /* The message is complete, IP and checksum's are handled by
+                               vProcessGeneratedUDPPacket */
+                               pxNetworkBuffer->pucEthernetBuffer[ ipSOCKET_OPTIONS_OFFSET ] = FREERTOS_SO_UDPCKSUM_OUT;
+                               pxNetworkBuffer->ulIPAddress = ulIPAddress;
+                               pxNetworkBuffer->usPort = ipPACKET_CONTAINS_ICMP_DATA;
+                               /* xDataLength is the size of the total packet, including the Ethernet header. */
+                               pxNetworkBuffer->xDataLength = xNumberOfBytesToSend + sizeof( ICMPPacket_t );
+
+                               /* Send to the stack. */
+                               xStackTxEvent.pvData = pxNetworkBuffer;
+
+                               if( xSendEventStructToIPTask( &xStackTxEvent, xBlockTimeTicks) != pdPASS )
+                               {
+                                       vReleaseNetworkBufferAndDescriptor( pxNetworkBuffer );
+                                       iptraceSTACK_TX_EVENT_LOST( ipSTACK_TX_EVENT );
+                               }
+                               else
+                               {
+                                       xReturn = usSequenceNumber;
+                               }
+                       }
+               }
+               else
+               {
+                       /* The requested number of bytes will not fit in the available space
+                       in the network buffer. */
+               }
+
+               return xReturn;
+       }
+
+#endif /* ipconfigSUPPORT_OUTGOING_PINGS == 1 */
+/*-----------------------------------------------------------*/
+
+BaseType_t xSendEventToIPTask( eIPEvent_t eEvent )
+{
+IPStackEvent_t xEventMessage;
+const TickType_t xDontBlock = ( TickType_t ) 0;
+
+       xEventMessage.eEventType = eEvent;
+       xEventMessage.pvData = ( void* )NULL;
+
+       return xSendEventStructToIPTask( &xEventMessage, xDontBlock );
+}
+/*-----------------------------------------------------------*/
+
+BaseType_t xSendEventStructToIPTask( const IPStackEvent_t *pxEvent, TickType_t xTimeout )
+{
+BaseType_t xReturn, xSendMessage;
+
+       if( ( xIPIsNetworkTaskReady() == pdFALSE ) && ( pxEvent->eEventType != eNetworkDownEvent ) )
+       {
+               /* Only allow eNetworkDownEvent events if the IP task is not ready
+               yet.  Not going to attempt to send the message so the send failed. */
+               xReturn = pdFAIL;
+       }
+       else
+       {
+               xSendMessage = pdTRUE;
+
+               #if( ipconfigUSE_TCP == 1 )
+               {
+                       if( pxEvent->eEventType == eTCPTimerEvent )
+                       {
+                               /* TCP timer events are sent to wake the timer task when
+                               xTCPTimer has expired, but there is no point sending them if the
+                               IP task is already awake processing other message. */
+                               xTCPTimer.bExpired = pdTRUE_UNSIGNED;
+
+                               if( uxQueueMessagesWaiting( xNetworkEventQueue ) != 0u )
+                               {
+                                       /* Not actually going to send the message but this is not a
+                                       failure as the message didn't need to be sent. */
+                                       xSendMessage = pdFALSE;
+                               }
+                       }
+               }
+               #endif /* ipconfigUSE_TCP */
+
+               if( xSendMessage != pdFALSE )
+               {
+                       /* The IP task cannot block itself while waiting for itself to
+                       respond. */
+                       if( ( xIsCallingFromIPTask() == pdTRUE ) && ( xTimeout > ( TickType_t ) 0 ) )
+                       {
+                               xTimeout = ( TickType_t ) 0;
+                       }
+
+                       xReturn = xQueueSendToBack( xNetworkEventQueue, pxEvent, xTimeout );
+
+                       if( xReturn == pdFAIL )
+                       {
+                               /* A message should have been sent to the IP task, but wasn't. */
+                               FreeRTOS_debug_printf( ( "xSendEventStructToIPTask: CAN NOT ADD %d\n", pxEvent->eEventType ) );
+                               iptraceSTACK_TX_EVENT_LOST( pxEvent->eEventType );
+                       }
+               }
+               else
+               {
+                       /* It was not necessary to send the message to process the event so
+                       even though the message was not sent the call was successful. */
+                       xReturn = pdPASS;
+               }
+       }
+
+       return xReturn;
+}
+/*-----------------------------------------------------------*/
+
+eFrameProcessingResult_t eConsiderFrameForProcessing( const uint8_t * const pucEthernetBuffer )
+{
+eFrameProcessingResult_t eReturn;
+const EthernetHeader_t *pxEthernetHeader;
+
+       pxEthernetHeader = ( const EthernetHeader_t * ) pucEthernetBuffer;
+
+       if( memcmp( ( void * ) ipLOCAL_MAC_ADDRESS, ( void * ) &( pxEthernetHeader->xDestinationAddress ), sizeof( MACAddress_t ) ) == 0 )
+       {
+               /* The packet was directed to this node directly - process it. */
+               eReturn = eProcessBuffer;
+       }
+       else if( memcmp( ( void * ) xBroadcastMACAddress.ucBytes, ( void * ) pxEthernetHeader->xDestinationAddress.ucBytes, sizeof( MACAddress_t ) ) == 0 )
+       {
+               /* The packet was a broadcast - process it. */
+               eReturn = eProcessBuffer;
+       }
+       else
+#if( ipconfigUSE_LLMNR == 1 )
+       if( memcmp( ( void * ) xLLMNR_MacAdress.ucBytes, ( void * ) pxEthernetHeader->xDestinationAddress.ucBytes, sizeof( MACAddress_t ) ) == 0 )
+       {
+               /* The packet is a request for LLMNR - process it. */
+               eReturn = eProcessBuffer;
+       }
+       else
+#endif /* ipconfigUSE_LLMNR */
+       {
+               /* The packet was not a broadcast, or for this node, just release
+               the buffer without taking any other action. */
+               eReturn = eReleaseBuffer;
+       }
+
+       #if( ipconfigFILTER_OUT_NON_ETHERNET_II_FRAMES == 1 )
+       {
+       uint16_t usFrameType;
+
+               if( eReturn == eProcessBuffer )
+               {
+                       usFrameType = pxEthernetHeader->usFrameType;
+                       usFrameType = FreeRTOS_ntohs( usFrameType );
+
+                       if( usFrameType <= 0x600U )
+                       {
+                               /* Not an Ethernet II frame. */
+                               eReturn = eReleaseBuffer;
+                       }
+               }
+       }
+       #endif /* ipconfigFILTER_OUT_NON_ETHERNET_II_FRAMES == 1  */
+
+       return eReturn;
+}
+/*-----------------------------------------------------------*/
+
+static void prvProcessNetworkDownEvent( void )
+{
+       /* Stop the ARP timer while there is no network. */
+       xARPTimer.bActive = pdFALSE_UNSIGNED;
+
+       #if ipconfigUSE_NETWORK_EVENT_HOOK == 1
+       {
+               static BaseType_t xCallEventHook = pdFALSE;
+
+               /* The first network down event is generated by the IP stack itself to
+               initialise the network hardware, so do not call the network down event
+               the first time through. */
+               if( xCallEventHook == pdTRUE )
+               {
+                       vApplicationIPNetworkEventHook( eNetworkDown );
+               }
+               xCallEventHook = pdTRUE;
+       }
+       #endif
+
+       /* Per the ARP Cache Validation section of https://tools.ietf.org/html/rfc1122, 
+       treat network down as a "delivery problem" and flush the ARP cache for this
+       interface. */
+       FreeRTOS_ClearARP( );
+
+       /* The network has been disconnected (or is being initialised for the first
+       time).  Perform whatever hardware processing is necessary to bring it up
+       again, or wait for it to be available again.  This is hardware dependent. */
+       if( xNetworkInterfaceInitialise() != pdPASS )
+       {
+               /* Ideally the network interface initialisation function will only
+               return when the network is available.  In case this is not the case,
+               wait a while before retrying the initialisation. */
+               vTaskDelay( ipINITIALISATION_RETRY_DELAY );
+               FreeRTOS_NetworkDown();
+       }
+       else
+       {
+               /* Set remaining time to 0 so it will become active immediately. */
+               #if ipconfigUSE_DHCP == 1
+               {
+                       /* The network is not up until DHCP has completed. */
+                       vDHCPProcess( pdTRUE );
+                       xSendEventToIPTask( eDHCPEvent );
+               }
+               #else
+               {
+                       /* Perform any necessary 'network up' processing. */
+                       vIPNetworkUpCalls();
+               }
+               #endif
+       }
+}
+/*-----------------------------------------------------------*/
+
+void vIPNetworkUpCalls( void )
+{
+       xNetworkUp = pdTRUE;
+
+       #if( ipconfigUSE_NETWORK_EVENT_HOOK == 1 )
+       {
+               vApplicationIPNetworkEventHook( eNetworkUp );
+       }
+       #endif /* ipconfigUSE_NETWORK_EVENT_HOOK */
+
+       #if( ipconfigDNS_USE_CALLBACKS != 0 )
+       {
+               /* The following function is declared in FreeRTOS_DNS.c and 'private' to
+               this library */
+               extern void vDNSInitialise( void );
+               vDNSInitialise();
+       }
+       #endif /* ipconfigDNS_USE_CALLBACKS != 0 */
+
+       /* Set remaining time to 0 so it will become active immediately. */
+       prvIPTimerReload( &xARPTimer, pdMS_TO_TICKS( ipARP_TIMER_PERIOD_MS ) );
+}
+/*-----------------------------------------------------------*/
+
+static void prvProcessEthernetPacket( NetworkBufferDescriptor_t * const pxNetworkBuffer )
+{
+EthernetHeader_t *pxEthernetHeader;
+eFrameProcessingResult_t eReturned = eReleaseBuffer;
+
+       configASSERT( pxNetworkBuffer );
+
+       /* Interpret the Ethernet frame. */
+       if( pxNetworkBuffer->xDataLength >= sizeof( EthernetHeader_t ) )
+       {
+               eReturned = ipCONSIDER_FRAME_FOR_PROCESSING( pxNetworkBuffer->pucEthernetBuffer );
+               pxEthernetHeader = ( EthernetHeader_t * )( pxNetworkBuffer->pucEthernetBuffer );
+
+               if( eReturned == eProcessBuffer )
+               {
+                       /* Interpret the received Ethernet packet. */
+                       switch( pxEthernetHeader->usFrameType )
+                       {
+                       case ipARP_FRAME_TYPE:
+                               /* The Ethernet frame contains an ARP packet. */
+                               if( pxNetworkBuffer->xDataLength >= sizeof( ARPPacket_t ) )
+                               {
+                                       eReturned = eARPProcessPacket( ( ARPPacket_t * )pxNetworkBuffer->pucEthernetBuffer );
+                               }
+                               else
+                               {
+                                       eReturned = eReleaseBuffer;
+                               }
+                               break;
+
+                       case ipIPv4_FRAME_TYPE:
+                               /* The Ethernet frame contains an IP packet. */
+                               if( pxNetworkBuffer->xDataLength >= sizeof( IPPacket_t ) )
+                               {
+                                       eReturned = prvProcessIPPacket( ( IPPacket_t * )pxNetworkBuffer->pucEthernetBuffer, pxNetworkBuffer );
+                               }
+                               else
+                               {
+                                       eReturned = eReleaseBuffer;
+                               }
+                               break;
+
+                       default:
+                               /* No other packet types are handled.  Nothing to do. */
+                               eReturned = eReleaseBuffer;
+                               break;
+                       }
+               }
+       }
+
+       /* Perform any actions that resulted from processing the Ethernet frame. */
+       switch( eReturned )
+       {
+               case eReturnEthernetFrame :
+                       /* The Ethernet frame will have been updated (maybe it was
+                       an ARP request or a PING request?) and should be sent back to
+                       its source. */
+                       vReturnEthernetFrame( pxNetworkBuffer, pdTRUE );
+                       /* parameter pdTRUE: the buffer must be released once
+                       the frame has been transmitted */
+                       break;
+
+               case eFrameConsumed :
+                       /* The frame is in use somewhere, don't release the buffer
+                       yet. */
+                       break;
+
+               default :
+                       /* The frame is not being used anywhere, and the
+                       NetworkBufferDescriptor_t structure containing the frame should
+                       just be released back to the list of free buffers. */
+                       vReleaseNetworkBufferAndDescriptor( pxNetworkBuffer );
+                       break;
+       }
+}
+/*-----------------------------------------------------------*/
+
+static eFrameProcessingResult_t prvAllowIPPacket( const IPPacket_t * const pxIPPacket,
+       NetworkBufferDescriptor_t * const pxNetworkBuffer, UBaseType_t uxHeaderLength )
+{
+eFrameProcessingResult_t eReturn = eProcessBuffer;
+
+#if( ( ipconfigETHERNET_DRIVER_FILTERS_PACKETS == 0 ) || ( ipconfigDRIVER_INCLUDED_RX_IP_CHECKSUM == 0 ) )
+       const IPHeader_t * pxIPHeader = &( pxIPPacket->xIPHeader );
+#else
+       /* or else, the parameter won't be used and the function will be optimised
+       away */
+       ( void ) pxIPPacket;
+#endif
+
+       #if( ipconfigETHERNET_DRIVER_FILTERS_PACKETS == 0 )
+       {
+               /* In systems with a very small amount of RAM, it might be advantageous
+               to have incoming messages checked earlier, by the network card driver.
+               This method may decrease the usage of sparse network buffers. */
+               uint32_t ulDestinationIPAddress = pxIPHeader->ulDestinationIPAddress;
+
+                       /* Ensure that the incoming packet is not fragmented (only outgoing
+                       packets can be fragmented) as these are the only handled IP frames
+                       currently. */
+                       if( ( pxIPHeader->usFragmentOffset & ipFRAGMENT_OFFSET_BIT_MASK ) != 0U )
+                       {
+                               /* Can not handle, fragmented packet. */
+                               eReturn = eReleaseBuffer;
+                       }
+                       /* 0x45 means: IPv4 with an IP header of 5 x 4 = 20 bytes
+                        * 0x47 means: IPv4 with an IP header of 7 x 4 = 28 bytes */
+                       else if( ( pxIPHeader->ucVersionHeaderLength < 0x45u ) || ( pxIPHeader->ucVersionHeaderLength > 0x4Fu ) )
+                       {
+                               /* Can not handle, unknown or invalid header version. */
+                               eReturn = eReleaseBuffer;
+                       }
+                               /* Is the packet for this IP address? */
+                       else if( ( ulDestinationIPAddress != *ipLOCAL_IP_ADDRESS_POINTER ) &&
+                               /* Is it the global broadcast address 255.255.255.255 ? */
+                               ( ulDestinationIPAddress != ipBROADCAST_IP_ADDRESS ) &&
+                               /* Is it a specific broadcast address 192.168.1.255 ? */
+                               ( ulDestinationIPAddress != xNetworkAddressing.ulBroadcastAddress ) &&
+                       #if( ipconfigUSE_LLMNR == 1 )
+                               /* Is it the LLMNR multicast address? */
+                               ( ulDestinationIPAddress != ipLLMNR_IP_ADDR ) &&
+                       #endif
+                               /* Or (during DHCP negotiation) we have no IP-address yet? */
+                               ( *ipLOCAL_IP_ADDRESS_POINTER != 0UL ) )
+                       {
+                               /* Packet is not for this node, release it */
+                               eReturn = eReleaseBuffer;
+                       }
+       }
+       #endif /* ipconfigETHERNET_DRIVER_FILTERS_PACKETS */
+
+       #if( ipconfigDRIVER_INCLUDED_RX_IP_CHECKSUM == 0 )
+       {
+               /* Some drivers of NIC's with checksum-offloading will enable the above
+               define, so that the checksum won't be checked again here */
+               if (eReturn == eProcessBuffer )
+               {
+                       /* Is the IP header checksum correct? */
+                       if( ( pxIPHeader->ucProtocol != ( uint8_t ) ipPROTOCOL_ICMP ) &&
+                               ( usGenerateChecksum( 0UL, ( uint8_t * ) &( pxIPHeader->ucVersionHeaderLength ), ( size_t ) uxHeaderLength ) != ipCORRECT_CRC ) )
+                       {
+                               /* Check sum in IP-header not correct. */
+                               eReturn = eReleaseBuffer;
+                       }
+                       /* Is the upper-layer checksum (TCP/UDP/ICMP) correct? */
+                       else if( usGenerateProtocolChecksum( ( uint8_t * )( pxNetworkBuffer->pucEthernetBuffer ), pxNetworkBuffer->xDataLength, pdFALSE ) != ipCORRECT_CRC )
+                       {
+                               /* Protocol checksum not accepted. */
+                               eReturn = eReleaseBuffer;
+                       }
+               }
+       }
+       #else
+       {
+               /* to avoid warning unused parameters */
+               ( void ) pxNetworkBuffer;
+               ( void ) uxHeaderLength;
+       }
+       #endif /* ipconfigDRIVER_INCLUDED_RX_IP_CHECKSUM == 0 */
+
+       return eReturn;
+}
+/*-----------------------------------------------------------*/
+
+static eFrameProcessingResult_t prvProcessIPPacket( IPPacket_t * const pxIPPacket, NetworkBufferDescriptor_t * const pxNetworkBuffer )
+{
+eFrameProcessingResult_t eReturn;
+IPHeader_t * pxIPHeader = &( pxIPPacket->xIPHeader );
+UBaseType_t uxHeaderLength = ( UBaseType_t ) ( ( pxIPHeader->ucVersionHeaderLength & 0x0Fu ) << 2 );
+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;
+       /* Check if the IP headers are acceptable and if it has our destination. */
+       eReturn = prvAllowIPPacket( pxIPPacket, pxNetworkBuffer, uxHeaderLength );
+
+       if( eReturn == eProcessBuffer )
+       {
+               if( uxHeaderLength > ipSIZE_OF_IPv4_HEADER )
+               {
+                       /* All structs of headers expect a IP header size of 20 bytes
+                        * IP header options were included, we'll ignore them and cut them out
+                        * Note: IP options are mostly use in Multi-cast protocols */
+                       const size_t optlen = ( ( size_t ) uxHeaderLength ) - ipSIZE_OF_IPv4_HEADER;
+                       /* From: the previous start of UDP/ICMP/TCP data */
+                       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 */
+                       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 */
+                       const size_t  xMoveLen = pxNetworkBuffer->xDataLength - optlen - ipSIZE_OF_IPv4_HEADER - ipSIZE_OF_ETH_HEADER;
+
+                       memmove( pucTarget, pucSource, xMoveLen );
+                       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
+               already there - otherwise refresh the age of the existing
+               entry. */
+               if( ucProtocol != ( uint8_t ) ipPROTOCOL_UDP )
+               {
+                       /* Refresh the ARP cache with the IP/MAC-address of the received packet
+                        * For UDP packets, this will be done later in xProcessReceivedUDPPacket()
+                        * as soon as know that the message will be handled by someone
+                        * This will prevent that the ARP cache will get overwritten
+                        * with the IP-address of useless broadcast packets
+                        */
+                       vARPRefreshCacheEntry( &( pxIPPacket->xEthernetHeader.xSourceAddress ), pxIPHeader->ulSourceIPAddress );
+               }
+               switch( ucProtocol )
+               {
+                       case ipPROTOCOL_ICMP :
+                               /* The IP packet contained an ICMP frame.  Don't bother
+                               checking the ICMP checksum, as if it is wrong then the
+                               wrong data will also be returned, and the source of the
+                               ping will know something went wrong because it will not
+                               be able to validate what it receives. */
+                               #if ( ipconfigREPLY_TO_INCOMING_PINGS == 1 ) || ( ipconfigSUPPORT_OUTGOING_PINGS == 1 )
+                               {
+                                       if( pxNetworkBuffer->xDataLength >= sizeof( ICMPPacket_t ) )
+                                       {
+                                               ICMPPacket_t *pxICMPPacket = ( ICMPPacket_t * )( pxNetworkBuffer->pucEthernetBuffer );
+                                               if( pxIPHeader->ulDestinationIPAddress == *ipLOCAL_IP_ADDRESS_POINTER )
+                                               {
+                                                       eReturn = prvProcessICMPPacket( pxICMPPacket );
+                                               }
+                                       }
+                                       else
+                                       {
+                                               eReturn = eReleaseBuffer;
+                                       }
+                               }
+                               #endif /* ( ipconfigREPLY_TO_INCOMING_PINGS == 1 ) || ( ipconfigSUPPORT_OUTGOING_PINGS == 1 ) */
+                               break;
+
+                       case ipPROTOCOL_UDP :
+                               {
+                                       /* The IP packet contained a UDP frame. */
+                                       UDPPacket_t *pxUDPPacket = ( UDPPacket_t * ) ( pxNetworkBuffer->pucEthernetBuffer );
+
+                                       /* Only proceed if the payload length indicated in the header
+                                       appears to be valid. */
+                                       if ( ( pxNetworkBuffer->xDataLength >= sizeof( UDPPacket_t ) ) && ( FreeRTOS_ntohs( pxUDPPacket->xUDPHeader.usLength ) >= sizeof( UDPHeader_t ) ) )
+                                       {
+                                       size_t uxPayloadSize_1, uxPayloadSize_2;
+                                               /* The UDP payload size can be calculated by subtracting the
+                                                * header size from `xDataLength`.
+                                                * However, the `xDataLength` may be longer that expected,
+                                                * e.g. when a small packet is padded with zero's.
+                                                * The UDP header contains a field `usLength` reflecting
+                                                * the payload size plus the UDP header ( 8 bytes ).
+                                                * Set `xDataLength` to the size of the headers,
+                                                * plus the lower of the two calculated payload sizes.
+                                                */
+
+                                               uxPayloadSize_1 = pxNetworkBuffer->xDataLength - sizeof( UDPPacket_t );
+                                               uxPayloadSize_2 = FreeRTOS_ntohs( pxUDPPacket->xUDPHeader.usLength ) - sizeof( UDPHeader_t );
+                                               if( uxPayloadSize_1 > uxPayloadSize_2 )
+                                               {
+                                                       pxNetworkBuffer->xDataLength = uxPayloadSize_2 + sizeof( UDPPacket_t );
+                                               }
+
+                                               /* Fields in pxNetworkBuffer (usPort, ulIPAddress) are network order. */
+                                               pxNetworkBuffer->usPort = pxUDPPacket->xUDPHeader.usSourcePort;
+                                               pxNetworkBuffer->ulIPAddress = pxUDPPacket->xIPHeader.ulSourceIPAddress;
+
+                                               /* ipconfigDRIVER_INCLUDED_RX_IP_CHECKSUM:
+                                                * In some cases, the upper-layer checksum has been calculated
+                                                * by the NIC driver.
+                                                *
+                                                * Pass the packet payload to the UDP sockets implementation. */
+                                               if( xProcessReceivedUDPPacket( pxNetworkBuffer,
+                                                                                                          pxUDPPacket->xUDPHeader.usDestinationPort ) == pdPASS )
+                                               {
+                                                       eReturn = eFrameConsumed;
+                                               }
+                                       }
+                                       else
+                                       {
+                                               eReturn = eReleaseBuffer;
+                                       }
+                               }
+                               break;
+
+#if ipconfigUSE_TCP == 1
+                       case ipPROTOCOL_TCP :
+                               {
+
+                                       if( xProcessReceivedTCPPacket( pxNetworkBuffer ) == pdPASS )
+                                       {
+                                               eReturn = eFrameConsumed;
+                                       }
+
+                                       /* Setting this variable will cause xTCPTimerCheck()
+                                       to be called just before the IP-task blocks. */
+                                       xProcessedTCPMessage++;
+                               }
+                               break;
+#endif
+                       default :
+                               /* Not a supported frame type. */
+                               break;
+               }
+       }
+
+       return eReturn;
+}
+/*-----------------------------------------------------------*/
+
+#if ( ipconfigSUPPORT_OUTGOING_PINGS == 1 )
+
+       static void prvProcessICMPEchoReply( ICMPPacket_t * const pxICMPPacket )
+       {
+       ePingReplyStatus_t eStatus = eSuccess;
+       uint16_t usDataLength, usCount;
+       uint8_t *pucByte;
+
+               /* Find the total length of the IP packet. */
+               usDataLength = pxICMPPacket->xIPHeader.usLength;
+               usDataLength = FreeRTOS_ntohs( usDataLength );
+
+               /* Remove the length of the IP headers to obtain the length of the ICMP
+               message itself. */
+               usDataLength = ( uint16_t ) ( ( ( uint32_t ) usDataLength ) - ipSIZE_OF_IPv4_HEADER );
+
+               /* Remove the length of the ICMP header, to obtain the length of
+               data contained in the ping. */
+               usDataLength = ( uint16_t ) ( ( ( uint32_t ) usDataLength ) - ipSIZE_OF_ICMP_HEADER );
+
+               /* Checksum has already been checked before in prvProcessIPPacket */
+
+               /* Find the first byte of the data within the ICMP packet. */
+               pucByte = ( uint8_t * ) pxICMPPacket;
+               pucByte += sizeof( ICMPPacket_t );
+
+               /* Check each byte. */
+               for( usCount = 0; usCount < usDataLength; usCount++ )
+               {
+                       if( *pucByte != ipECHO_DATA_FILL_BYTE )
+                       {
+                               eStatus = eInvalidData;
+                               break;
+                       }
+
+                       pucByte++;
+               }
+
+               /* Call back into the application to pass it the result. */
+               vApplicationPingReplyHook( eStatus, pxICMPPacket->xICMPHeader.usIdentifier );
+       }
+
+#endif
+/*-----------------------------------------------------------*/
+
+#if ( ipconfigREPLY_TO_INCOMING_PINGS == 1 )
+
+       static eFrameProcessingResult_t prvProcessICMPEchoRequest( ICMPPacket_t * const pxICMPPacket )
+       {
+       ICMPHeader_t *pxICMPHeader;
+       IPHeader_t *pxIPHeader;
+       uint16_t usRequest;
+
+               pxICMPHeader = &( pxICMPPacket->xICMPHeader );
+               pxIPHeader = &( pxICMPPacket->xIPHeader );
+
+               /* HT:endian: changed back */
+               iptraceSENDING_PING_REPLY( pxIPHeader->ulSourceIPAddress );
+
+               /* The checksum can be checked here - but a ping reply should be
+               returned even if the checksum is incorrect so the other end can
+               tell that the ping was received - even if the ping reply contains
+               invalid data. */
+               pxICMPHeader->ucTypeOfMessage = ( uint8_t ) ipICMP_ECHO_REPLY;
+               pxIPHeader->ulDestinationIPAddress = pxIPHeader->ulSourceIPAddress;
+               pxIPHeader->ulSourceIPAddress = *ipLOCAL_IP_ADDRESS_POINTER;
+
+               /* Update the checksum because the ucTypeOfMessage member in the header
+               has been changed to ipICMP_ECHO_REPLY.  This is faster than calling
+               usGenerateChecksum(). */
+
+               /* due to compiler warning "integer operation result is out of range" */
+
+               usRequest = ( uint16_t ) ( ( uint16_t )ipICMP_ECHO_REQUEST << 8 );
+
+               if( pxICMPHeader->usChecksum >= FreeRTOS_htons( 0xFFFFu - usRequest ) )
+               {
+                       pxICMPHeader->usChecksum = ( uint16_t )
+                               ( ( ( uint32_t ) pxICMPHeader->usChecksum ) +
+                                       FreeRTOS_htons( usRequest + 1UL ) );
+               }
+               else
+               {
+                       pxICMPHeader->usChecksum = ( uint16_t )
+                               ( ( ( uint32_t ) pxICMPHeader->usChecksum ) +
+                                       FreeRTOS_htons( usRequest ) );
+               }
+               return eReturnEthernetFrame;
+       }
+
+#endif /* ipconfigREPLY_TO_INCOMING_PINGS == 1 */
+/*-----------------------------------------------------------*/
+
+#if ( ipconfigREPLY_TO_INCOMING_PINGS == 1 ) || ( ipconfigSUPPORT_OUTGOING_PINGS == 1 )
+
+       static eFrameProcessingResult_t prvProcessICMPPacket( ICMPPacket_t * const pxICMPPacket )
+       {
+       eFrameProcessingResult_t eReturn = eReleaseBuffer;
+
+               iptraceICMP_PACKET_RECEIVED();
+               switch( pxICMPPacket->xICMPHeader.ucTypeOfMessage )
+               {
+                       case ipICMP_ECHO_REQUEST        :
+                               #if ( ipconfigREPLY_TO_INCOMING_PINGS == 1 )
+                               {
+                                       eReturn = prvProcessICMPEchoRequest( pxICMPPacket );
+                               }
+                               #endif /* ( ipconfigREPLY_TO_INCOMING_PINGS == 1 ) */
+                               break;
+
+                       case ipICMP_ECHO_REPLY          :
+                               #if ( ipconfigSUPPORT_OUTGOING_PINGS == 1 )
+                               {
+                                       prvProcessICMPEchoReply( pxICMPPacket );
+                               }
+                               #endif /* ipconfigSUPPORT_OUTGOING_PINGS */
+                               break;
+
+                       default :
+                               break;
+               }
+
+               return eReturn;
+       }
+
+#endif /* ( ipconfigREPLY_TO_INCOMING_PINGS == 1 ) || ( ipconfigSUPPORT_OUTGOING_PINGS == 1 ) */
+/*-----------------------------------------------------------*/
+
+uint16_t usGenerateProtocolChecksum( const uint8_t * const pucEthernetBuffer, size_t uxBufferLength, BaseType_t xOutgoingPacket )
+{
+uint32_t ulLength;
+uint16_t usChecksum, *pusChecksum;
+const IPPacket_t * pxIPPacket;
+UBaseType_t uxIPHeaderLength;
+ProtocolPacket_t *pxProtPack;
+uint8_t ucProtocol;
+#if( ipconfigHAS_DEBUG_PRINTF != 0 )
+       const char *pcType;
+#endif
+
+       /* Check for minimum packet size. */
+       if( uxBufferLength < sizeof( IPPacket_t ) )
+       {
+               return ipINVALID_LENGTH;
+       }
+
+       /* Parse the packet length. */
+       pxIPPacket = ( const IPPacket_t * ) pucEthernetBuffer;
+
+       /* 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 < ( size_t ) ( ipSIZE_OF_ETH_HEADER + FreeRTOS_ntohs( pxIPPacket->xIPHeader.usLength ) ) )
+       {
+               return ipINVALID_LENGTH;
+       }
+
+       /* Identify the next protocol. */
+       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( uxBufferLength < ( uxIPHeaderLength + ipSIZE_OF_ETH_HEADER + ipSIZE_OF_UDP_HEADER ) )
+               {
+                       return ipINVALID_LENGTH;
+               }
+
+               pusChecksum = ( uint16_t * ) ( &( pxProtPack->xUDPPacket.xUDPHeader.usChecksum ) );
+               #if( ipconfigHAS_DEBUG_PRINTF != 0 )
+               {
+                       pcType = "UDP";
+               }
+               #endif  /* ipconfigHAS_DEBUG_PRINTF != 0 */
+       }
+       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 ) );
+               #if( ipconfigHAS_DEBUG_PRINTF != 0 )
+               {
+                       pcType = "TCP";
+               }
+               #endif  /* ipconfigHAS_DEBUG_PRINTF != 0 */
+       }
+       else if( ( ucProtocol == ( uint8_t ) ipPROTOCOL_ICMP ) ||
+                       ( ucProtocol == ( uint8_t ) ipPROTOCOL_IGMP ) )
+       {
+               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( ucProtocol == ( uint8_t ) ipPROTOCOL_ICMP )
+                       {
+                               pcType = "ICMP";
+                       }
+                       else
+                       {
+                               pcType = "IGMP";
+                       }
+               }
+               #endif  /* ipconfigHAS_DEBUG_PRINTF != 0 */
+       }
+       else
+       {
+               /* Unhandled protocol, other than ICMP, IGMP, UDP, or TCP. */
+               return ipUNHANDLED_PROTOCOL;
+       }
+
+       /* The protocol and checksum field have been identified. Check the direction
+       of the packet. */
+       if( xOutgoingPacket != pdFALSE )
+       {
+               /* This is an outgoing packet. Before calculating the checksum, set it
+               to zero. */
+               *( pusChecksum ) = 0u;
+       }
+       else if( ( *pusChecksum == 0u ) && ( ucProtocol == ( uint8_t ) ipPROTOCOL_UDP ) )
+       {
+               /* Sender hasn't set the checksum, no use to calculate it. */
+               return ipCORRECT_CRC;
+       }
+
+       ulLength = ( uint32_t )
+               ( FreeRTOS_ntohs( pxIPPacket->xIPHeader.usLength ) - ( ( uint16_t ) uxIPHeaderLength ) ); /* normally minus 20 */
+
+       if( ( ulLength < sizeof( pxProtPack->xUDPPacket.xUDPHeader ) ) ||
+               ( ulLength > ( uint32_t )( ipconfigNETWORK_MTU - uxIPHeaderLength ) ) )
+       {
+               #if( ipconfigHAS_DEBUG_PRINTF != 0 )
+               {
+                       FreeRTOS_debug_printf( ( "usGenerateProtocolChecksum[%s]: len invalid: %lu\n", pcType, ulLength ) );
+               }
+               #endif  /* ipconfigHAS_DEBUG_PRINTF != 0 */
+
+               /* Again, in a 16-bit return value there is no space to indicate an
+               error.  For incoming packets, 0x1234 will cause dropping of the packet.
+               For outgoing packets, there is a serious problem with the
+               format/length */
+               return ipINVALID_LENGTH;
+       }
+       if( ucProtocol <= ( uint8_t ) ipPROTOCOL_IGMP )
+       {
+               /* ICMP/IGMP do not have a pseudo header for CRC-calculation. */
+               usChecksum = ( uint16_t )
+                       ( ~usGenerateChecksum( 0UL,
+                               ( uint8_t * ) &( pxProtPack->xTCPPacket.xTCPHeader ), ( size_t ) ulLength ) );
+       }
+       else
+       {
+               /* For UDP and TCP, sum the pseudo header, i.e. IP protocol + length
+               fields */
+               usChecksum = ( uint16_t ) ( ulLength + ( ( uint16_t ) ucProtocol ) );
+
+               /* And then continue at the IPv4 source and destination addresses. */
+               usChecksum = ( uint16_t )
+                       ( ~usGenerateChecksum( ( uint32_t ) usChecksum, ( uint8_t * )&( pxIPPacket->xIPHeader.ulSourceIPAddress ),
+                               ( 2u * sizeof( pxIPPacket->xIPHeader.ulSourceIPAddress ) + ulLength ) ) );
+
+               /* Sum TCP header and data. */
+       }
+
+       if( xOutgoingPacket == pdFALSE )
+       {
+               /* This is in incoming packet. If the CRC is correct, it should be zero. */
+               if( usChecksum == 0u )
+               {
+                       usChecksum = ( uint16_t )ipCORRECT_CRC;
+               }
+       }
+       else
+       {
+               if( ( usChecksum == 0u ) && ( ucProtocol == ( uint8_t ) ipPROTOCOL_UDP ) )
+               {
+                       /* In case of UDP, a calculated checksum of 0x0000 is transmitted
+                       as 0xffff. A value of zero would mean that the checksum is not used. */
+                       #if( ipconfigHAS_DEBUG_PRINTF != 0 )
+                       {
+                               if( xOutgoingPacket != pdFALSE )
+                               {
+                                       FreeRTOS_debug_printf( ( "usGenerateProtocolChecksum[%s]: crc swap: %04X\n", pcType, usChecksum ) );
+                               }
+                       }
+                       #endif  /* ipconfigHAS_DEBUG_PRINTF != 0 */
+
+                       usChecksum = ( uint16_t )0xffffu;
+               }
+       }
+       usChecksum = FreeRTOS_htons( usChecksum );
+
+       if( xOutgoingPacket != pdFALSE )
+       {
+               *( pusChecksum ) = usChecksum;
+       }
+       #if( ipconfigHAS_DEBUG_PRINTF != 0 )
+       else if( ( xOutgoingPacket == pdFALSE ) && ( usChecksum != ipCORRECT_CRC ) )
+       {
+               FreeRTOS_debug_printf( ( "usGenerateProtocolChecksum[%s]: ID %04X: from %lxip to %lxip bad crc: %04X\n",
+                       pcType,
+                       FreeRTOS_ntohs( pxIPPacket->xIPHeader.usIdentification ),
+                       FreeRTOS_ntohl( pxIPPacket->xIPHeader.ulSourceIPAddress ),
+                       FreeRTOS_ntohl( pxIPPacket->xIPHeader.ulDestinationIPAddress ),
+                       FreeRTOS_ntohs( *pusChecksum ) ) );
+       }
+       #endif  /* ipconfigHAS_DEBUG_PRINTF != 0 */
+
+       return usChecksum;
+}
+/*-----------------------------------------------------------*/
+
+/**
+ * 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 )
+{
+xUnion32 xSum2, xSum, xTerm;
+xUnionPtr xSource;             /* Points to first byte */
+xUnionPtr xLastSource; /* Points to last byte plus one */
+uint32_t ulAlignBits, ulCarry = 0ul;
+
+       /* Small MCUs often spend up to 30% of the time doing checksum calculations
+       This function is optimised for 32-bit CPUs; Each time it will try to fetch
+       32-bits, sums it with an accumulator and counts the number of carries. */
+
+       /* Swap the input (little endian platform only). */
+       xSum.u32 = FreeRTOS_ntohs( ulSum );
+       xTerm.u32 = 0ul;
+
+       xSource.u8ptr = ( uint8_t * ) pucNextData;
+       ulAlignBits = ( ( ( uint32_t ) pucNextData ) & 0x03u ); /* gives 0, 1, 2, or 3 */
+
+       /* If byte (8-bit) aligned... */
+       if( ( ( ulAlignBits & 1ul ) != 0ul ) && ( uxDataLengthBytes >= ( size_t ) 1 ) )
+       {
+               xTerm.u8[ 1 ] = *( xSource.u8ptr );
+               ( xSource.u8ptr )++;
+               uxDataLengthBytes--;
+               /* Now xSource is word (16-bit) aligned. */
+       }
+
+       /* If half-word (16-bit) aligned... */
+       if( ( ( ulAlignBits == 1u ) || ( ulAlignBits == 2u ) ) && ( uxDataLengthBytes >= 2u ) )
+       {
+               xSum.u32 += *(xSource.u16ptr);
+               ( xSource.u16ptr )++;
+               uxDataLengthBytes -= 2u;
+               /* Now xSource is word (32-bit) aligned. */
+       }
+
+       /* Word (32-bit) aligned, do the most part. */
+       xLastSource.u32ptr = ( xSource.u32ptr + ( uxDataLengthBytes / 4u ) ) - 3u;
+
+       /* In this loop, four 32-bit additions will be done, in total 16 bytes.
+       Indexing with constants (0,1,2,3) gives faster code than using
+       post-increments. */
+       while( xSource.u32ptr < xLastSource.u32ptr )
+       {
+               /* Use a secondary Sum2, just to see if the addition produced an
+               overflow. */
+               xSum2.u32 = xSum.u32 + xSource.u32ptr[ 0 ];
+               if( xSum2.u32 < xSum.u32 )
+               {
+                       ulCarry++;
+               }
+
+               /* Now add the secondary sum to the major sum, and remember if there was
+               a carry. */
+               xSum.u32 = xSum2.u32 + xSource.u32ptr[ 1 ];
+               if( xSum2.u32 > xSum.u32 )
+               {
+                       ulCarry++;
+               }
+
+               /* And do the same trick once again for indexes 2 and 3 */
+               xSum2.u32 = xSum.u32 + xSource.u32ptr[ 2 ];
+               if( xSum2.u32 < xSum.u32 )
+               {
+                       ulCarry++;
+               }
+
+               xSum.u32 = xSum2.u32 + xSource.u32ptr[ 3 ];
+
+               if( xSum2.u32 > xSum.u32 )
+               {
+                       ulCarry++;
+               }
+
+               /* And finally advance the pointer 4 * 4 = 16 bytes. */
+               xSource.u32ptr += 4;
+       }
+
+       /* Now add all carries. */
+       xSum.u32 = ( uint32_t )xSum.u16[ 0 ] + xSum.u16[ 1 ] + ulCarry;
+
+       uxDataLengthBytes %= 16u;
+       xLastSource.u8ptr = ( uint8_t * ) ( xSource.u8ptr + ( uxDataLengthBytes & ~( ( size_t ) 1 ) ) );
+
+       /* Half-word aligned. */
+       while( xSource.u16ptr < xLastSource.u16ptr )
+       {
+               /* At least one more short. */
+               xSum.u32 += xSource.u16ptr[ 0 ];
+               xSource.u16ptr++;
+       }
+
+       if( ( uxDataLengthBytes & ( size_t ) 1 ) != 0u )        /* Maybe one more ? */
+       {
+               xTerm.u8[ 0 ] = xSource.u8ptr[ 0 ];
+       }
+       xSum.u32 += xTerm.u32;
+
+       /* Now add all carries again. */
+       xSum.u32 = ( uint32_t ) xSum.u16[ 0 ] + xSum.u16[ 1 ];
+
+       /* The previous summation might have given a 16-bit carry. */
+       xSum.u32 = ( uint32_t ) xSum.u16[ 0 ] + xSum.u16[ 1 ];
+
+       if( ( ulAlignBits & 1u ) != 0u )
+       {
+               /* Quite unlikely, but pucNextData might be non-aligned, which would
+                mean that a checksum is calculated starting at an odd position. */
+               xSum.u32 = ( ( xSum.u32 & 0xffu ) << 8 ) | ( ( xSum.u32 & 0xff00u ) >> 8 );
+       }
+
+       /* swap the output (little endian platform only). */
+       return FreeRTOS_htons( ( (uint16_t) xSum.u32 ) );
+}
+/*-----------------------------------------------------------*/
+
+void vReturnEthernetFrame( NetworkBufferDescriptor_t * pxNetworkBuffer, BaseType_t xReleaseAfterSend )
+{
+EthernetHeader_t *pxEthernetHeader;
+
+#if( ipconfigZERO_COPY_TX_DRIVER != 0 )
+       NetworkBufferDescriptor_t *pxNewBuffer;
+#endif
+
+       #if defined( ipconfigETHERNET_MINIMUM_PACKET_BYTES )
+       {
+               if( pxNetworkBuffer->xDataLength < ( size_t ) ipconfigETHERNET_MINIMUM_PACKET_BYTES )
+               {
+               BaseType_t xIndex;
+
+                       FreeRTOS_printf( ( "vReturnEthernetFrame: length %lu\n", ( uint32_t )pxNetworkBuffer->xDataLength ) );
+                       for( xIndex = ( BaseType_t ) pxNetworkBuffer->xDataLength; xIndex < ( BaseType_t ) ipconfigETHERNET_MINIMUM_PACKET_BYTES; xIndex++ )
+                       {
+                               pxNetworkBuffer->pucEthernetBuffer[ xIndex ] = 0u;
+                       }
+                       pxNetworkBuffer->xDataLength = ( size_t ) ipconfigETHERNET_MINIMUM_PACKET_BYTES;
+               }
+       }
+       #endif
+
+#if( ipconfigZERO_COPY_TX_DRIVER != 0 )
+
+       if( xReleaseAfterSend == pdFALSE )
+       {
+               pxNewBuffer = pxDuplicateNetworkBufferWithDescriptor( pxNetworkBuffer, ( BaseType_t ) pxNetworkBuffer->xDataLength );
+               xReleaseAfterSend = pdTRUE;
+               pxNetworkBuffer = pxNewBuffer;
+       }
+
+       if( pxNetworkBuffer != NULL )
+#endif
+       {
+               pxEthernetHeader = ( EthernetHeader_t * ) ( pxNetworkBuffer->pucEthernetBuffer );
+
+               /* Swap source and destination MAC addresses. */
+               memcpy( ( void * ) &( pxEthernetHeader->xDestinationAddress ), ( void * ) &( pxEthernetHeader->xSourceAddress ), sizeof( pxEthernetHeader->xDestinationAddress ) );
+               memcpy( ( void * ) &( pxEthernetHeader->xSourceAddress) , ( void * ) ipLOCAL_MAC_ADDRESS, ( size_t ) ipMAC_ADDRESS_LENGTH_BYTES );
+
+               /* Send! */
+               xNetworkInterfaceOutput( pxNetworkBuffer, xReleaseAfterSend );
+       }
+}
+/*-----------------------------------------------------------*/
+
+uint32_t FreeRTOS_GetIPAddress( void )
+{
+       /* Returns the IP address of the NIC. */
+       return *ipLOCAL_IP_ADDRESS_POINTER;
+}
+/*-----------------------------------------------------------*/
+
+void FreeRTOS_SetIPAddress( uint32_t ulIPAddress )
+{
+       /* Sets the IP address of the NIC. */
+       *ipLOCAL_IP_ADDRESS_POINTER = ulIPAddress;
+}
+/*-----------------------------------------------------------*/
+
+uint32_t FreeRTOS_GetGatewayAddress( void )
+{
+       return xNetworkAddressing.ulGatewayAddress;
+}
+/*-----------------------------------------------------------*/
+
+uint32_t FreeRTOS_GetDNSServerAddress( void )
+{
+       return xNetworkAddressing.ulDNSServerAddress;
+}
+/*-----------------------------------------------------------*/
+
+uint32_t FreeRTOS_GetNetmask( void )
+{
+       return xNetworkAddressing.ulNetMask;
+}
+/*-----------------------------------------------------------*/
+
+void FreeRTOS_UpdateMACAddress( const uint8_t ucMACAddress[ipMAC_ADDRESS_LENGTH_BYTES] )
+{
+       /* Copy the MAC address at the start of the default packet header fragment. */
+       memcpy( ( void * )ipLOCAL_MAC_ADDRESS, ( void * )ucMACAddress, ( size_t )ipMAC_ADDRESS_LENGTH_BYTES );
+}
+/*-----------------------------------------------------------*/
+
+const uint8_t * FreeRTOS_GetMACAddress( void )
+{
+       return ipLOCAL_MAC_ADDRESS;
+}
+/*-----------------------------------------------------------*/
+
+void FreeRTOS_SetNetmask ( uint32_t ulNetmask )
+{
+       xNetworkAddressing.ulNetMask = ulNetmask;
+}
+/*-----------------------------------------------------------*/
+
+void FreeRTOS_SetGatewayAddress ( uint32_t ulGatewayAddress )
+{
+       xNetworkAddressing.ulGatewayAddress = ulGatewayAddress;
+}
+/*-----------------------------------------------------------*/
+
+#if( ipconfigUSE_DHCP == 1 )
+       void vIPSetDHCPTimerEnableState( BaseType_t xEnableState )
+       {
+               if( xEnableState != pdFALSE )
+               {
+                       xDHCPTimer.bActive = pdTRUE_UNSIGNED;
+               }
+               else
+               {
+                       xDHCPTimer.bActive = pdFALSE_UNSIGNED;
+               }
+       }
+#endif /* ipconfigUSE_DHCP */
+/*-----------------------------------------------------------*/
+
+#if( ipconfigUSE_DHCP == 1 )
+       void vIPReloadDHCPTimer( uint32_t ulLeaseTime )
+       {
+               prvIPTimerReload( &xDHCPTimer, ulLeaseTime );
+       }
+#endif /* ipconfigUSE_DHCP */
+/*-----------------------------------------------------------*/
+
+#if( ipconfigDNS_USE_CALLBACKS == 1 )
+       void vIPSetDnsTimerEnableState( BaseType_t xEnableState )
+       {
+               if( xEnableState != 0 )
+               {
+                       xDNSTimer.bActive = pdTRUE;
+               }
+               else
+               {
+                       xDNSTimer.bActive = pdFALSE;
+               }
+       }
+#endif /* ipconfigUSE_DHCP */
+/*-----------------------------------------------------------*/
+
+#if( ipconfigDNS_USE_CALLBACKS != 0 )
+       void vIPReloadDNSTimer( uint32_t ulCheckTime )
+       {
+               prvIPTimerReload( &xDNSTimer, ulCheckTime );
+       }
+#endif /* ipconfigDNS_USE_CALLBACKS != 0 */
+/*-----------------------------------------------------------*/
+
+BaseType_t xIPIsNetworkTaskReady( void )
+{
+       return xIPTaskInitialised;
+}
+/*-----------------------------------------------------------*/
+
+BaseType_t FreeRTOS_IsNetworkUp( void )
+{
+       return xNetworkUp;
+}
+/*-----------------------------------------------------------*/
+
+#if( ipconfigCHECK_IP_QUEUE_SPACE != 0 )
+       UBaseType_t uxGetMinimumIPQueueSpace( void )
+       {
+               return uxQueueMinimumSpace;
+       }
+#endif
+/*-----------------------------------------------------------*/
+
+/* Provide access to private members for verification. */
+#ifdef FREERTOS_TCP_ENABLE_VERIFICATION
+       #include "aws_freertos_ip_verification_access_ip_define.h"
+#endif
+
index e15834849ef2dd590f8671223d17e3d639a13dc8..87099ecf15abf9076bfb92609ed49a83ea6632e3 100644 (file)
-/*\r
- * FreeRTOS+TCP V2.2.0\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://aws.amazon.com/freertos\r
- * http://www.FreeRTOS.org\r
- */\r
-\r
-/* Standard includes. */\r
-#include <stdint.h>\r
-#include <stdio.h>\r
-\r
-/* FreeRTOS includes. */\r
-#include "FreeRTOS.h"\r
-#include "task.h"\r
-#include "queue.h"\r
-#include "semphr.h"\r
-\r
-/* FreeRTOS+TCP includes. */\r
-#include "FreeRTOS_UDP_IP.h"\r
-#include "FreeRTOS_IP.h"\r
-#include "FreeRTOS_Sockets.h"\r
-#include "FreeRTOS_IP_Private.h"\r
-#include "FreeRTOS_DNS.h"\r
-#include "NetworkBufferManagement.h"\r
-\r
-/* The ItemValue of the sockets xBoundSocketListItem member holds the socket's\r
-port number. */\r
-#define socketSET_SOCKET_PORT( pxSocket, usPort ) listSET_LIST_ITEM_VALUE( ( &( ( pxSocket )->xBoundSocketListItem ) ), ( usPort ) )\r
-#define socketGET_SOCKET_PORT( pxSocket ) listGET_LIST_ITEM_VALUE( ( &( ( pxSocket )->xBoundSocketListItem ) ) )\r
-\r
-/* Test if a socket it bound which means it is either included in\r
-xBoundUDPSocketsList or xBoundTCPSocketsList */\r
-#define socketSOCKET_IS_BOUND( pxSocket )        ( listLIST_ITEM_CONTAINER( & ( pxSocket )->xBoundSocketListItem ) != NULL )\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
-port number is automatically generated for the socket.  Automatically generated\r
-port numbers will be between socketAUTO_PORT_ALLOCATION_START_NUMBER and\r
-0xffff.\r
-\r
-Per https://tools.ietf.org/html/rfc6056, "the dynamic ports consist of the range\r
-49152-65535. However, ephemeral port selection algorithms should use the whole\r
-range 1024-65535" excluding those already in use (inbound or outbound). */\r
-#if !defined( socketAUTO_PORT_ALLOCATION_START_NUMBER )\r
-       #define socketAUTO_PORT_ALLOCATION_START_NUMBER ( ( uint16_t ) 0x0400 )\r
-#endif\r
-\r
-#define socketAUTO_PORT_ALLOCATION_MAX_NUMBER   ( ( uint16_t ) 0xffff )\r
-\r
-/* The number of octets that make up an IP address. */\r
-#define socketMAX_IP_ADDRESS_OCTETS            4u\r
-\r
-/* A block time of 0 simply means "don't block". */\r
-#define socketDONT_BLOCK                               ( ( TickType_t ) 0 )\r
-\r
-#if( ( ipconfigUSE_TCP == 1 ) && !defined( ipTCP_TIMER_PERIOD_MS ) )\r
-       #define ipTCP_TIMER_PERIOD_MS   ( 1000 )\r
-#endif\r
-\r
-/* The next private port number to use when binding a client socket is stored in\r
-the usNextPortToUse[] array - which has either 1 or two indexes depending on\r
-whether TCP is being supported. */\r
-#if( ipconfigUSE_TCP == 1 )\r
-       #define socketPROTOCOL_COUNT            2\r
-#else\r
-       #define socketPROTOCOL_COUNT            1\r
-#endif\r
-\r
-/* Indexes into the usNextPortToUse[] array for UDP and TCP sockets\r
-respectively. */\r
-#define socketNEXT_UDP_PORT_NUMBER_INDEX       0\r
-#define socketNEXT_TCP_PORT_NUMBER_INDEX       1\r
-\r
-/* Some helper macro's for defining the 20/80 % limits of uxLittleSpace / uxEnoughSpace. */\r
-#define sock20_PERCENT                                         20\r
-#define sock80_PERCENT                                         80\r
-#define sock100_PERCENT                                                100\r
-\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-/*\r
- * Allocate the next port number from the private allocation range.\r
- * TCP and UDP each have their own series of port numbers\r
- * ulProtocol is either ipPROTOCOL_UDP or ipPROTOCOL_TCP\r
- */\r
-static uint16_t prvGetPrivatePortNumber( BaseType_t xProtocol );\r
-\r
-/*\r
- * Return the list item from within pxList that has an item value of\r
- * xWantedItemValue.  If there is no such list item return NULL.\r
- */\r
-static const ListItem_t * pxListFindListItemWithValue( const List_t *pxList, TickType_t xWantedItemValue );\r
-\r
-/*\r
- * Return pdTRUE only if pxSocket is valid and bound, as far as can be\r
- * determined.\r
- */\r
-static BaseType_t prvValidSocket( FreeRTOS_Socket_t *pxSocket, BaseType_t xProtocol, BaseType_t xIsBound );\r
-\r
-/*\r
- * Before creating a socket, check the validity of the parameters used\r
- * and find the size of the socket space, which is different for UDP and TCP\r
- */\r
-static BaseType_t prvDetermineSocketSize( BaseType_t xDomain, BaseType_t xType, BaseType_t xProtocol, size_t *pxSocketSize );\r
-\r
-#if( ipconfigUSE_TCP == 1 )\r
-       /*\r
-        * Create a txStream or a rxStream, depending on the parameter 'xIsInputStream'\r
-        */\r
-       static StreamBuffer_t *prvTCPCreateStream (FreeRTOS_Socket_t *pxSocket, BaseType_t xIsInputStream );\r
-#endif /* ipconfigUSE_TCP == 1 */\r
-\r
-#if( ipconfigUSE_TCP == 1 )\r
-       /*\r
-        * Called from FreeRTOS_send(): some checks which will be done before\r
-        * sending a TCP packed.\r
-        */\r
-       static int32_t prvTCPSendCheck( FreeRTOS_Socket_t *pxSocket, size_t xDataLength );\r
-#endif /* ipconfigUSE_TCP */\r
-\r
-#if( ipconfigUSE_TCP == 1 )\r
-       /*\r
-        * When a child socket gets closed, make sure to update the child-count of the parent\r
-        */\r
-       static void prvTCPSetSocketCount( FreeRTOS_Socket_t *pxSocketToDelete );\r
-#endif  /* ipconfigUSE_TCP == 1 */\r
-\r
-#if( ipconfigUSE_TCP == 1 )\r
-       /*\r
-        * Called from FreeRTOS_connect(): make some checks and if allowed, send a\r
-        * message to the IP-task to start connecting to a remote socket\r
-        */\r
-       static BaseType_t prvTCPConnectStart( FreeRTOS_Socket_t *pxSocket, struct freertos_sockaddr *pxAddress );\r
-#endif /* ipconfigUSE_TCP */\r
-\r
-#if( ipconfigSUPPORT_SELECT_FUNCTION == 1 )\r
-\r
-       /* Executed by the IP-task, it will check all sockets belonging to a set */\r
-       static FreeRTOS_Socket_t *prvFindSelectedSocket( SocketSelect_t *pxSocketSet );\r
-\r
-#endif /* ipconfigSUPPORT_SELECT_FUNCTION == 1 */\r
-/*-----------------------------------------------------------*/\r
-\r
-/* The list that contains mappings between sockets and port numbers.  Accesses\r
-to this list must be protected by critical sections of one kind or another. */\r
-List_t xBoundUDPSocketsList;\r
-\r
-#if ipconfigUSE_TCP == 1\r
-       List_t xBoundTCPSocketsList;\r
-#endif /* ipconfigUSE_TCP == 1 */\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-static BaseType_t prvValidSocket( FreeRTOS_Socket_t *pxSocket, BaseType_t xProtocol, BaseType_t xIsBound )\r
-{\r
-BaseType_t xReturn = pdTRUE;\r
-\r
-       if( ( pxSocket == NULL ) || ( pxSocket == FREERTOS_INVALID_SOCKET ) )\r
-       {\r
-               xReturn = pdFALSE;\r
-       }\r
-       else if( ( xIsBound != pdFALSE ) && ( socketSOCKET_IS_BOUND( pxSocket ) == pdFALSE ) )\r
-       {\r
-               /* The caller expects the socket to be bound, but it isn't. */\r
-               xReturn = pdFALSE;\r
-       }\r
-       else if( pxSocket->ucProtocol != ( uint8_t ) xProtocol )\r
-       {\r
-               /* Socket has a wrong type (UDP != TCP). */\r
-               xReturn = pdFALSE;\r
-       }\r
-\r
-       return xReturn;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-BaseType_t vNetworkSocketsInit( void )\r
-{\r
-       vListInitialise( &xBoundUDPSocketsList );\r
-\r
-       #if( ipconfigUSE_TCP == 1 )\r
-       {\r
-               vListInitialise( &xBoundTCPSocketsList );\r
-       }\r
-       #endif  /* ipconfigUSE_TCP == 1 */\r
-\r
-       return pdTRUE;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static BaseType_t prvDetermineSocketSize( BaseType_t xDomain, BaseType_t xType, BaseType_t xProtocol, size_t *pxSocketSize )\r
-{\r
-BaseType_t xReturn = pdPASS;\r
-FreeRTOS_Socket_t *pxSocket;\r
-\r
-       /* Asserts must not appear before it has been determined that the network\r
-       task is ready - otherwise the asserts will fail. */\r
-       if( xIPIsNetworkTaskReady() == pdFALSE )\r
-       {\r
-               xReturn = pdFAIL;\r
-       }\r
-       else\r
-       {\r
-               /* Only Ethernet is currently supported. */\r
-               configASSERT( xDomain == FREERTOS_AF_INET );\r
-\r
-               /* Check if the UDP socket-list has been initialised. */\r
-               configASSERT( listLIST_IS_INITIALISED( &xBoundUDPSocketsList ) );\r
-               #if( ipconfigUSE_TCP == 1 )\r
-               {\r
-                       /* Check if the TCP socket-list has been initialised. */\r
-                       configASSERT( listLIST_IS_INITIALISED( &xBoundTCPSocketsList ) );\r
-               }\r
-               #endif  /* ipconfigUSE_TCP == 1 */\r
-\r
-               if( xProtocol == FREERTOS_IPPROTO_UDP )\r
-               {\r
-                       if( xType != FREERTOS_SOCK_DGRAM )\r
-                       {\r
-                               xReturn = pdFAIL;\r
-                               configASSERT( xReturn );\r
-                       }\r
-                       /* In case a UDP socket is created, do not allocate space for TCP data. */\r
-                       *pxSocketSize = ( sizeof( *pxSocket ) - sizeof( pxSocket->u ) ) + sizeof( pxSocket->u.xUDP );\r
-               }\r
-#if( ipconfigUSE_TCP == 1 )\r
-               else if( xProtocol == FREERTOS_IPPROTO_TCP )\r
-               {\r
-                       if( xType != FREERTOS_SOCK_STREAM )\r
-                       {\r
-                               xReturn = pdFAIL;\r
-                               configASSERT( xReturn );\r
-                       }\r
-\r
-                       *pxSocketSize = ( sizeof( *pxSocket ) - sizeof( pxSocket->u ) ) + sizeof( pxSocket->u.xTCP );\r
-               }\r
-#endif  /* ipconfigUSE_TCP == 1 */\r
-               else\r
-               {\r
-                       xReturn = pdFAIL;\r
-                       configASSERT( xReturn );\r
-               }\r
-       }\r
-       /* In case configASSERT() is not used */\r
-       ( void )xDomain;\r
-       return xReturn;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-/* FreeRTOS_socket() allocates and initiates a socket */\r
-Socket_t FreeRTOS_socket( BaseType_t xDomain, BaseType_t xType, BaseType_t xProtocol )\r
-{\r
-FreeRTOS_Socket_t *pxSocket;\r
-size_t uxSocketSize;\r
-EventGroupHandle_t xEventGroup;\r
-Socket_t xReturn;\r
-\r
-       if( prvDetermineSocketSize( xDomain, xType, xProtocol, &uxSocketSize ) == pdFAIL )\r
-       {\r
-               xReturn = FREERTOS_INVALID_SOCKET;\r
-       }\r
-       else\r
-       {\r
-               /* Allocate the structure that will hold the socket information.  The\r
-               size depends on the type of socket: UDP sockets need less space.  A\r
-               define 'pvPortMallocSocket' will used to allocate the necessary space.\r
-               By default it points to the FreeRTOS function 'pvPortMalloc()'. */\r
-               pxSocket = ( FreeRTOS_Socket_t * ) pvPortMallocSocket( uxSocketSize );\r
-\r
-               if( pxSocket == NULL )\r
-               {\r
-                       pxSocket = ( FreeRTOS_Socket_t * ) FREERTOS_INVALID_SOCKET;\r
-                       iptraceFAILED_TO_CREATE_SOCKET();\r
-               }\r
-               else if( ( xEventGroup = xEventGroupCreate() ) == NULL )\r
-               {\r
-                       vPortFreeSocket( pxSocket );\r
-                       pxSocket = ( FreeRTOS_Socket_t * ) FREERTOS_INVALID_SOCKET;\r
-                       iptraceFAILED_TO_CREATE_EVENT_GROUP();\r
-               }\r
-               else\r
-               {\r
-                       /* Clear the entire space to avoid nulling individual entries */\r
-                       memset( pxSocket, '\0', uxSocketSize );\r
-\r
-                       pxSocket->xEventGroup = xEventGroup;\r
-\r
-                       /* Initialise the socket's members.  The semaphore will be created\r
-                       if the socket is bound to an address, for now the pointer to the\r
-                       semaphore is just set to NULL to show it has not been created. */\r
-                       if( xProtocol == FREERTOS_IPPROTO_UDP )\r
-                       {\r
-                               vListInitialise( &( pxSocket->u.xUDP.xWaitingPacketsList ) );\r
-\r
-                               #if( ipconfigUDP_MAX_RX_PACKETS > 0 )\r
-                               {\r
-                                       pxSocket->u.xUDP.uxMaxPackets = ( UBaseType_t ) ipconfigUDP_MAX_RX_PACKETS;\r
-                               }\r
-                               #endif /* ipconfigUDP_MAX_RX_PACKETS > 0 */\r
-                       }\r
-\r
-                       vListInitialiseItem( &( pxSocket->xBoundSocketListItem ) );\r
-                       listSET_LIST_ITEM_OWNER( &( pxSocket->xBoundSocketListItem ), ( void * ) pxSocket );\r
-\r
-                       pxSocket->xReceiveBlockTime = ipconfigSOCK_DEFAULT_RECEIVE_BLOCK_TIME;\r
-                       pxSocket->xSendBlockTime        = ipconfigSOCK_DEFAULT_SEND_BLOCK_TIME;\r
-                       pxSocket->ucSocketOptions   = ( uint8_t ) FREERTOS_SO_UDPCKSUM_OUT;\r
-                       pxSocket->ucProtocol            = ( uint8_t ) xProtocol; /* protocol: UDP or TCP */\r
-\r
-                       #if( ipconfigUSE_TCP == 1 )\r
-                       {\r
-                               if( xProtocol == FREERTOS_IPPROTO_TCP )\r
-                               {\r
-                                       /* StreamSize is expressed in number of bytes */\r
-                                       /* Round up buffer sizes to nearest multiple of MSS */\r
-                                       pxSocket->u.xTCP.usInitMSS      = pxSocket->u.xTCP.usCurMSS = ipconfigTCP_MSS;\r
-                                       pxSocket->u.xTCP.uxRxStreamSize = ( size_t ) ipconfigTCP_RX_BUFFER_LENGTH;\r
-                                       pxSocket->u.xTCP.uxTxStreamSize = ( size_t ) FreeRTOS_round_up( ipconfigTCP_TX_BUFFER_LENGTH, ipconfigTCP_MSS );\r
-                                       /* Use half of the buffer size of the TCP windows */\r
-                                       #if ( ipconfigUSE_TCP_WIN == 1 )\r
-                                       {\r
-                                               pxSocket->u.xTCP.uxRxWinSize  = FreeRTOS_max_uint32( 1UL, ( uint32_t ) ( pxSocket->u.xTCP.uxRxStreamSize / 2 ) / ipconfigTCP_MSS );\r
-                                               pxSocket->u.xTCP.uxTxWinSize  = FreeRTOS_max_uint32( 1UL, ( uint32_t ) ( pxSocket->u.xTCP.uxTxStreamSize / 2 ) / ipconfigTCP_MSS );\r
-                                       }\r
-                                       #else\r
-                                       {\r
-                                               pxSocket->u.xTCP.uxRxWinSize  = 1u;\r
-                                               pxSocket->u.xTCP.uxTxWinSize  = 1u;\r
-                                       }\r
-                                       #endif\r
-                                       /* The above values are just defaults, and can be overridden by\r
-                                       calling FreeRTOS_setsockopt().  No buffers will be allocated until a\r
-                                       socket is connected and data is exchanged. */\r
-                               }\r
-                       }\r
-                       #endif  /* ipconfigUSE_TCP == 1 */\r
-               }\r
-\r
-               xReturn = ( Socket_t ) pxSocket;\r
-       }\r
-\r
-       /* Remove compiler warnings in the case the configASSERT() is not defined. */\r
-       ( void ) xDomain;\r
-\r
-       return xReturn;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigSUPPORT_SELECT_FUNCTION == 1 )\r
-\r
-       SocketSet_t FreeRTOS_CreateSocketSet( void )\r
-       {\r
-       SocketSelect_t *pxSocketSet;\r
-\r
-               pxSocketSet = ( SocketSelect_t * ) pvPortMalloc( sizeof( *pxSocketSet ) );\r
-\r
-               if( pxSocketSet != NULL )\r
-               {\r
-                       memset( pxSocketSet, '\0', sizeof( *pxSocketSet ) );\r
-                       pxSocketSet->xSelectGroup = xEventGroupCreate();\r
-\r
-                       if( pxSocketSet->xSelectGroup == NULL )\r
-                       {\r
-                               vPortFree( ( void* ) pxSocketSet );\r
-                               pxSocketSet = NULL;\r
-                       }\r
-               }\r
-\r
-               return ( SocketSet_t ) pxSocketSet;\r
-       }\r
-\r
-#endif /* ipconfigSUPPORT_SELECT_FUNCTION == 1 */\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigSUPPORT_SELECT_FUNCTION == 1 )\r
-\r
-       void FreeRTOS_DeleteSocketSet( SocketSet_t xSocketSet )\r
-       {\r
-               SocketSelect_t *pxSocketSet = ( SocketSelect_t*) xSocketSet;\r
-\r
-               vEventGroupDelete( pxSocketSet->xSelectGroup );\r
-               vPortFree( ( void* ) pxSocketSet );\r
-       }\r
-\r
-#endif /* ipconfigSUPPORT_SELECT_FUNCTION == 1 */\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigSUPPORT_SELECT_FUNCTION == 1 )\r
-\r
-       /* Add a socket to a set */\r
-       void FreeRTOS_FD_SET( Socket_t xSocket, SocketSet_t xSocketSet, EventBits_t xSelectBits )\r
-       {\r
-       FreeRTOS_Socket_t *pxSocket = ( FreeRTOS_Socket_t * ) xSocket;\r
-       SocketSelect_t *pxSocketSet = ( SocketSelect_t * ) xSocketSet;\r
-\r
-               configASSERT( pxSocket != NULL );\r
-               configASSERT( xSocketSet != NULL );\r
-\r
-               /* Make sure we're not adding bits which are reserved for internal use,\r
-               such as eSELECT_CALL_IP */\r
-               pxSocket->xSelectBits |= ( xSelectBits & eSELECT_ALL );\r
-\r
-               if( ( pxSocket->xSelectBits & eSELECT_ALL ) != 0 )\r
-               {\r
-                       /* Adding a socket to a socket set. */\r
-                       pxSocket->pxSocketSet = ( SocketSelect_t * ) xSocketSet;\r
-\r
-                       /* Now have the IP-task call vSocketSelect() to see if the set contains\r
-                       any sockets which are 'ready' and set the proper bits.\r
-                       By setting 'bApiCalled = false', vSocketSelect() knows that it was\r
-                       not called from a user API */\r
-                       pxSocketSet->bApiCalled = pdFALSE;\r
-                       prvFindSelectedSocket( pxSocketSet );\r
-               }\r
-       }\r
-\r
-#endif /* ipconfigSUPPORT_SELECT_FUNCTION == 1 */\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigSUPPORT_SELECT_FUNCTION == 1 )\r
-       /* Clear select bits for a socket\r
-       If the mask becomes 0, remove the socket from the set */\r
-       void FreeRTOS_FD_CLR( Socket_t xSocket, SocketSet_t xSocketSet, EventBits_t xSelectBits )\r
-       {\r
-       FreeRTOS_Socket_t *pxSocket = ( FreeRTOS_Socket_t * ) xSocket;\r
-\r
-               configASSERT( pxSocket != NULL );\r
-               configASSERT( xSocketSet != NULL );\r
-\r
-               pxSocket->xSelectBits &= ~( xSelectBits & eSELECT_ALL );\r
-               if( ( pxSocket->xSelectBits & eSELECT_ALL ) != 0 )\r
-               {\r
-                       pxSocket->pxSocketSet = ( SocketSelect_t *)xSocketSet;\r
-               }\r
-               else\r
-               {\r
-                       /* disconnect it from the socket set */\r
-                       pxSocket->pxSocketSet = ( SocketSelect_t *)NULL;\r
-               }\r
-       }\r
-\r
-#endif /* ipconfigSUPPORT_SELECT_FUNCTION == 1 */\r
-/*-----------------------------------------------------------*/\r
-\r
-\r
-#if( ipconfigSUPPORT_SELECT_FUNCTION == 1 )\r
-\r
-       /* Test if a socket belongs to a socket-set */\r
-       EventBits_t FreeRTOS_FD_ISSET( Socket_t xSocket, SocketSet_t xSocketSet )\r
-       {\r
-       EventBits_t xReturn;\r
-       FreeRTOS_Socket_t *pxSocket = ( FreeRTOS_Socket_t * ) xSocket;\r
-\r
-               configASSERT( pxSocket != NULL );\r
-               configASSERT( xSocketSet != NULL );\r
-\r
-               if( xSocketSet == ( SocketSet_t ) pxSocket->pxSocketSet )\r
-               {\r
-                       /* Make sure we're not adding bits which are reserved for internal\r
-                       use. */\r
-                       xReturn = pxSocket->xSocketBits & eSELECT_ALL;\r
-               }\r
-               else\r
-               {\r
-                       xReturn = 0;\r
-               }\r
-\r
-               return xReturn;\r
-       }\r
-\r
-#endif /* ipconfigSUPPORT_SELECT_FUNCTION == 1 */\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigSUPPORT_SELECT_FUNCTION == 1 )\r
-\r
-       /* The select() statement: wait for an event to occur on any of the sockets\r
-       included in a socket set */\r
-       BaseType_t FreeRTOS_select( SocketSet_t xSocketSet, TickType_t xBlockTimeTicks )\r
-       {\r
-       TimeOut_t xTimeOut;\r
-       TickType_t xRemainingTime;\r
-       SocketSelect_t *pxSocketSet = ( SocketSelect_t*) xSocketSet;\r
-       BaseType_t xResult;\r
-\r
-               configASSERT( xSocketSet != NULL );\r
-\r
-               /* Only in the first round, check for non-blocking */\r
-               xRemainingTime = xBlockTimeTicks;\r
-\r
-               /* Fetch the current time */\r
-               vTaskSetTimeOutState( &xTimeOut );\r
-\r
-               for( ;; )\r
-               {\r
-                       /* Find a socket which might have triggered the bit\r
-                       This function might return immediately or block for a limited time */\r
-                       xResult = ( BaseType_t ) xEventGroupWaitBits( pxSocketSet->xSelectGroup, eSELECT_ALL, pdFALSE, pdFALSE, xRemainingTime );\r
-\r
-                       #if( ipconfigSUPPORT_SIGNALS != 0 )\r
-                       {\r
-                               if( ( xResult & eSELECT_INTR ) != 0u )\r
-                               {\r
-                                       xEventGroupClearBits( pxSocketSet->xSelectGroup, eSELECT_INTR );\r
-                                       FreeRTOS_debug_printf( ( "FreeRTOS_select: interrupted\n" ) );\r
-                                       break;\r
-                               }\r
-                       }\r
-                       #endif /* ipconfigSUPPORT_SIGNALS */\r
-\r
-                       /* Have the IP-task find the socket which had an event */\r
-                       pxSocketSet->bApiCalled = pdTRUE;\r
-                       prvFindSelectedSocket( pxSocketSet );\r
-\r
-                       xResult = ( BaseType_t ) xEventGroupGetBits( pxSocketSet->xSelectGroup );\r
-\r
-                       if( xResult != 0 )\r
-                       {\r
-                               break;\r
-                       }\r
-\r
-                       /* Has the timeout been reached? */\r
-                       if( xTaskCheckForTimeOut( &xTimeOut, &xRemainingTime ) != pdFALSE )\r
-                       {\r
-                               break;\r
-                       }\r
-               }\r
-\r
-               return xResult;\r
-       }\r
-\r
-#endif /* ipconfigSUPPORT_SELECT_FUNCTION */\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigSUPPORT_SELECT_FUNCTION == 1 )\r
-\r
-       /* Send a message to the IP-task to have it check all sockets belonging to\r
-       'pxSocketSet' */\r
-       static FreeRTOS_Socket_t *prvFindSelectedSocket( SocketSelect_t *pxSocketSet )\r
-       {\r
-       IPStackEvent_t xSelectEvent;\r
-       FreeRTOS_Socket_t *xReturn;\r
-\r
-               xSelectEvent.eEventType = eSocketSelectEvent;\r
-               xSelectEvent.pvData = ( void * ) pxSocketSet;\r
-\r
-               /* while the IP-task works on the request, the API will block on\r
-               'eSELECT_CALL_IP'.  So clear it first. */\r
-               xEventGroupClearBits( pxSocketSet->xSelectGroup, eSELECT_CALL_IP );\r
-\r
-               /* Now send the socket select event */\r
-               if( xSendEventStructToIPTask( &xSelectEvent, ( TickType_t ) portMAX_DELAY ) == pdFAIL )\r
-               {\r
-                       /* Oops, we failed to wake-up the IP task. No use to wait for it. */\r
-                       FreeRTOS_debug_printf( ( "prvFindSelectedSocket: failed\n" ) );\r
-                       xReturn = NULL;\r
-               }\r
-               else\r
-               {\r
-                       /* As soon as the IP-task is ready, it will set 'eSELECT_CALL_IP' to\r
-                       wakeup the calling API */\r
-                       xEventGroupWaitBits( pxSocketSet->xSelectGroup, eSELECT_CALL_IP, pdTRUE, pdFALSE, portMAX_DELAY );\r
-\r
-                       /* Return 'pxSocket' which is set by the IP-task */\r
-                       xReturn = pxSocketSet->pxSocket;\r
-               }\r
-\r
-               return xReturn;\r
-       }\r
-\r
-#endif /* ipconfigSUPPORT_SELECT_FUNCTION == 1 */\r
-/*-----------------------------------------------------------*/\r
-\r
-/*\r
- * FreeRTOS_recvfrom: receive data from a bound socket\r
- * In this library, the function can only be used with connectionsless sockets\r
- * (UDP)\r
- */\r
-int32_t FreeRTOS_recvfrom( Socket_t xSocket, void *pvBuffer, size_t xBufferLength, BaseType_t xFlags, struct freertos_sockaddr *pxSourceAddress, socklen_t *pxSourceAddressLength )\r
-{\r
-BaseType_t lPacketCount = 0;\r
-NetworkBufferDescriptor_t *pxNetworkBuffer;\r
-FreeRTOS_Socket_t *pxSocket = ( FreeRTOS_Socket_t * ) xSocket;\r
-TickType_t xRemainingTime = ( TickType_t ) 0; /* Obsolete assignment, but some compilers output a warning if its not done. */\r
-BaseType_t xTimed = pdFALSE;\r
-TimeOut_t xTimeOut;\r
-int32_t lReturn;\r
-EventBits_t xEventBits = ( EventBits_t ) 0;\r
-\r
-       if( prvValidSocket( pxSocket, FREERTOS_IPPROTO_UDP, pdTRUE ) == pdFALSE )\r
-       {\r
-               return -pdFREERTOS_ERRNO_EINVAL;\r
-       }\r
-\r
-       lPacketCount = ( BaseType_t ) listCURRENT_LIST_LENGTH( &( pxSocket->u.xUDP.xWaitingPacketsList ) );\r
-\r
-       /* The function prototype is designed to maintain the expected Berkeley\r
-       sockets standard, but this implementation does not use all the parameters. */\r
-       ( void ) pxSourceAddressLength;\r
-\r
-       while( lPacketCount == 0 )\r
-       {\r
-               if( xTimed == pdFALSE )\r
-               {\r
-                       /* Check to see if the socket is non blocking on the first\r
-                       iteration.  */\r
-                       xRemainingTime = pxSocket->xReceiveBlockTime;\r
-\r
-                       if( xRemainingTime == ( TickType_t ) 0 )\r
-                       {\r
-                               #if( ipconfigSUPPORT_SIGNALS != 0 )\r
-                               {\r
-                                       /* Just check for the interrupt flag. */\r
-                                       xEventBits = xEventGroupWaitBits( pxSocket->xEventGroup, eSOCKET_INTR,\r
-                                               pdTRUE /*xClearOnExit*/, pdFALSE /*xWaitAllBits*/, socketDONT_BLOCK );\r
-                               }\r
-                               #endif /* ipconfigSUPPORT_SIGNALS */\r
-                               break;\r
-                       }\r
-\r
-                       if( ( xFlags & FREERTOS_MSG_DONTWAIT ) != 0 )\r
-                       {\r
-                               break;\r
-                       }\r
-\r
-                       /* To ensure this part only executes once. */\r
-                       xTimed = pdTRUE;\r
-\r
-                       /* Fetch the current time. */\r
-                       vTaskSetTimeOutState( &xTimeOut );\r
-               }\r
-\r
-               /* Wait for arrival of data.  While waiting, the IP-task may set the\r
-               'eSOCKET_RECEIVE' bit in 'xEventGroup', if it receives data for this\r
-               socket, thus unblocking this API call. */\r
-               xEventBits = xEventGroupWaitBits( pxSocket->xEventGroup, eSOCKET_RECEIVE | eSOCKET_INTR,\r
-                       pdTRUE /*xClearOnExit*/, pdFALSE /*xWaitAllBits*/, xRemainingTime );\r
-\r
-               #if( ipconfigSUPPORT_SIGNALS != 0 )\r
-               {\r
-                       if( ( xEventBits & eSOCKET_INTR ) != 0 )\r
-                       {\r
-                               if( ( xEventBits & eSOCKET_RECEIVE ) != 0 )\r
-                               {\r
-                                       /* Shouldn't have cleared the eSOCKET_RECEIVE flag. */\r
-                                       xEventGroupSetBits( pxSocket->xEventGroup, eSOCKET_RECEIVE );\r
-                               }\r
-                               break;\r
-                       }\r
-               }\r
-               #else\r
-               {\r
-                       ( void ) xEventBits;\r
-               }\r
-               #endif /* ipconfigSUPPORT_SIGNALS */\r
-\r
-               lPacketCount = ( BaseType_t ) listCURRENT_LIST_LENGTH( &( pxSocket->u.xUDP.xWaitingPacketsList ) );\r
-\r
-               if( lPacketCount != 0 )\r
-               {\r
-                       break;\r
-               }\r
-\r
-               /* Has the timeout been reached ? */\r
-               if( xTaskCheckForTimeOut( &xTimeOut, &xRemainingTime ) )\r
-               {\r
-                       break;\r
-               }\r
-       } /* while( lPacketCount == 0 ) */\r
-\r
-       if( lPacketCount != 0 )\r
-       {\r
-               taskENTER_CRITICAL();\r
-               {\r
-                       /* The owner of the list item is the network buffer. */\r
-                       pxNetworkBuffer = ( NetworkBufferDescriptor_t * ) listGET_OWNER_OF_HEAD_ENTRY( &( pxSocket->u.xUDP.xWaitingPacketsList ) );\r
-\r
-                       if( ( xFlags & FREERTOS_MSG_PEEK ) == 0 )\r
-                       {\r
-                               /* Remove the network buffer from the list of buffers waiting to\r
-                               be processed by the socket. */\r
-                               uxListRemove( &( pxNetworkBuffer->xBufferListItem ) );\r
-                       }\r
-               }\r
-               taskEXIT_CRITICAL();\r
-\r
-               /* The returned value is the length of the payload data, which is\r
-               calculated at the total packet size minus the headers.\r
-               The validity of `xDataLength` prvProcessIPPacket has been confirmed\r
-               in 'prvProcessIPPacket()'. */\r
-               lReturn = ( int32_t ) ( pxNetworkBuffer->xDataLength - sizeof( UDPPacket_t ) );\r
-\r
-               if( pxSourceAddress != NULL )\r
-               {\r
-                       pxSourceAddress->sin_port = pxNetworkBuffer->usPort;\r
-                       pxSourceAddress->sin_addr = pxNetworkBuffer->ulIPAddress;\r
-               }\r
-\r
-               if( ( xFlags & FREERTOS_ZERO_COPY ) == 0 )\r
-               {\r
-                       /* The zero copy flag is not set.  Truncate the length if it won't\r
-                       fit in the provided buffer. */\r
-                       if( lReturn > ( int32_t ) xBufferLength )\r
-                       {\r
-                               iptraceRECVFROM_DISCARDING_BYTES( ( xBufferLength - lReturn ) );\r
-                               lReturn = ( int32_t )xBufferLength;\r
-                       }\r
-\r
-                       /* Copy the received data into the provided buffer, then release the\r
-                       network buffer. */\r
-                       memcpy( pvBuffer, ( void * ) &( pxNetworkBuffer->pucEthernetBuffer[ ipUDP_PAYLOAD_OFFSET_IPv4 ] ), ( size_t )lReturn );\r
-\r
-                       if( ( xFlags & FREERTOS_MSG_PEEK ) == 0 )\r
-                       {\r
-                               vReleaseNetworkBufferAndDescriptor( pxNetworkBuffer );\r
-                       }\r
-               }\r
-               else\r
-               {\r
-                       /* The zero copy flag was set.  pvBuffer is not a buffer into which\r
-                       the received data can be copied, but a pointer that must be set to\r
-                       point to the buffer in which the received data has already been\r
-                       placed. */\r
-                       *( ( void** ) pvBuffer ) = ( void * ) ( &( pxNetworkBuffer->pucEthernetBuffer[ ipUDP_PAYLOAD_OFFSET_IPv4 ] ) );\r
-               }\r
-\r
-       }\r
-#if( ipconfigSUPPORT_SIGNALS != 0 )\r
-       else if( ( xEventBits & eSOCKET_INTR ) != 0 )\r
-       {\r
-               lReturn = -pdFREERTOS_ERRNO_EINTR;\r
-               iptraceRECVFROM_INTERRUPTED();\r
-       }\r
-#endif /* ipconfigSUPPORT_SIGNALS */\r
-       else\r
-       {\r
-               lReturn = -pdFREERTOS_ERRNO_EWOULDBLOCK;\r
-               iptraceRECVFROM_TIMEOUT();\r
-       }\r
-\r
-       return lReturn;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-int32_t FreeRTOS_sendto( Socket_t xSocket, const void *pvBuffer, size_t xTotalDataLength, BaseType_t xFlags, const struct freertos_sockaddr *pxDestinationAddress, socklen_t xDestinationAddressLength )\r
-{\r
-NetworkBufferDescriptor_t *pxNetworkBuffer;\r
-IPStackEvent_t xStackTxEvent = { eStackTxEvent, NULL };\r
-TimeOut_t xTimeOut;\r
-TickType_t xTicksToWait;\r
-int32_t lReturn = 0;\r
-FreeRTOS_Socket_t *pxSocket;\r
-\r
-       pxSocket = ( FreeRTOS_Socket_t * ) xSocket;\r
-\r
-       /* The function prototype is designed to maintain the expected Berkeley\r
-       sockets standard, but this implementation does not use all the\r
-       parameters. */\r
-       ( void ) xDestinationAddressLength;\r
-       configASSERT( pvBuffer );\r
-\r
-       if( xTotalDataLength <= ( size_t ) ipMAX_UDP_PAYLOAD_LENGTH )\r
-       {\r
-               /* If the socket is not already bound to an address, bind it now.\r
-               Passing NULL as the address parameter tells FreeRTOS_bind() to select\r
-               the address to bind to. */\r
-               if( ( socketSOCKET_IS_BOUND( pxSocket ) != pdFALSE ) ||\r
-                       ( FreeRTOS_bind( xSocket, NULL, 0u ) == 0 ) )\r
-               {\r
-                       xTicksToWait = pxSocket->xSendBlockTime;\r
-\r
-                       #if( ipconfigUSE_CALLBACKS != 0 )\r
-                       {\r
-                               if( xIsCallingFromIPTask() != pdFALSE )\r
-                               {\r
-                                       /* If this send function is called from within a call-back\r
-                                       handler it may not block, otherwise chances would be big to\r
-                                       get a deadlock: the IP-task waiting for itself. */\r
-                                       xTicksToWait = ( TickType_t )0;\r
-                               }\r
-                       }\r
-                       #endif /* ipconfigUSE_CALLBACKS */\r
-\r
-                       if( ( xFlags & FREERTOS_MSG_DONTWAIT ) != 0 )\r
-                       {\r
-                               xTicksToWait = ( TickType_t ) 0;\r
-                       }\r
-\r
-                       if( ( xFlags & FREERTOS_ZERO_COPY ) == 0 )\r
-                       {\r
-                               /* Zero copy is not set, so obtain a network buffer into\r
-                               which the payload will be copied. */\r
-                               vTaskSetTimeOutState( &xTimeOut );\r
-\r
-                               /* Block until a buffer becomes available, or until a\r
-                               timeout has been reached */\r
-                               pxNetworkBuffer = pxGetNetworkBufferWithDescriptor( xTotalDataLength + sizeof( UDPPacket_t ), xTicksToWait );\r
-\r
-                               if( pxNetworkBuffer != NULL )\r
-                               {\r
-                                       memcpy( ( void * ) &( pxNetworkBuffer->pucEthernetBuffer[ ipUDP_PAYLOAD_OFFSET_IPv4 ] ), ( void * ) pvBuffer, xTotalDataLength );\r
-\r
-                                       if( xTaskCheckForTimeOut( &xTimeOut, &xTicksToWait ) == pdTRUE )\r
-                                       {\r
-                                               /* The entire block time has been used up. */\r
-                                               xTicksToWait = ( TickType_t ) 0;\r
-                                       }\r
-                               }\r
-                       }\r
-                       else\r
-                       {\r
-                               /* When zero copy is used, pvBuffer is a pointer to the\r
-                               payload of a buffer that has already been obtained from the\r
-                               stack.  Obtain the network buffer pointer from the buffer. */\r
-                               pxNetworkBuffer = pxUDPPayloadBuffer_to_NetworkBuffer( (void*)pvBuffer );\r
-                       }\r
-\r
-                       if( pxNetworkBuffer != NULL )\r
-                       {\r
-                               /* xDataLength is the size of the total packet, including the Ethernet header. */\r
-                               pxNetworkBuffer->xDataLength = xTotalDataLength + sizeof( UDPPacket_t );\r
-                               pxNetworkBuffer->usPort = pxDestinationAddress->sin_port;\r
-                               pxNetworkBuffer->usBoundPort = ( uint16_t ) socketGET_SOCKET_PORT( pxSocket );\r
-                               pxNetworkBuffer->ulIPAddress = pxDestinationAddress->sin_addr;\r
-\r
-                               /* The socket options are passed to the IP layer in the\r
-                               space that will eventually get used by the Ethernet header. */\r
-                               pxNetworkBuffer->pucEthernetBuffer[ ipSOCKET_OPTIONS_OFFSET ] = pxSocket->ucSocketOptions;\r
-\r
-                               /* Tell the networking task that the packet needs sending. */\r
-                               xStackTxEvent.pvData = pxNetworkBuffer;\r
-\r
-                               /* Ask the IP-task to send this packet */\r
-                               if( xSendEventStructToIPTask( &xStackTxEvent, xTicksToWait ) == pdPASS )\r
-                               {\r
-                                       /* The packet was successfully sent to the IP task. */\r
-                                       lReturn = ( int32_t ) xTotalDataLength;\r
-                                       #if( ipconfigUSE_CALLBACKS == 1 )\r
-                                       {\r
-                                               if( ipconfigIS_VALID_PROG_ADDRESS( pxSocket->u.xUDP.pxHandleSent ) )\r
-                                               {\r
-                                                       pxSocket->u.xUDP.pxHandleSent( ( Socket_t )pxSocket, xTotalDataLength );\r
-                                               }\r
-                                       }\r
-                                       #endif /* ipconfigUSE_CALLBACKS */\r
-                               }\r
-                               else\r
-                               {\r
-                                       /* If the buffer was allocated in this function, release\r
-                                       it. */\r
-                                       if( ( xFlags & FREERTOS_ZERO_COPY ) == 0 )\r
-                                       {\r
-                                               vReleaseNetworkBufferAndDescriptor( pxNetworkBuffer );\r
-                                       }\r
-                                       iptraceSTACK_TX_EVENT_LOST( ipSTACK_TX_EVENT );\r
-                               }\r
-                       }\r
-                       else\r
-                       {\r
-                               /* If errno was available, errno would be set to\r
-                               FREERTOS_ENOPKTS.  As it is, the function must return the\r
-                               number of transmitted bytes, so the calling function knows\r
-                               how     much data was actually sent. */\r
-                               iptraceNO_BUFFER_FOR_SENDTO();\r
-                       }\r
-               }\r
-               else\r
-               {\r
-                       iptraceSENDTO_SOCKET_NOT_BOUND();\r
-               }\r
-       }\r
-       else\r
-       {\r
-               /* The data is longer than the available buffer space. */\r
-               iptraceSENDTO_DATA_TOO_LONG();\r
-       }\r
-\r
-       return lReturn;\r
-} /* Tested */\r
-/*-----------------------------------------------------------*/\r
-\r
-/*\r
- * FreeRTOS_bind() : binds a sockt to a local port number.  If port 0 is\r
- * provided, a system provided port number will be assigned.  This function can\r
- * be used for both UDP and TCP sockets.  The actual binding will be performed\r
- * by the IP-task to avoid mutual access to the bound-socket-lists\r
- * (xBoundUDPSocketsList or xBoundTCPSocketsList).\r
- */\r
-BaseType_t FreeRTOS_bind( Socket_t xSocket, struct freertos_sockaddr * pxAddress, socklen_t xAddressLength )\r
-{\r
-IPStackEvent_t xBindEvent;\r
-FreeRTOS_Socket_t *pxSocket = ( FreeRTOS_Socket_t * ) xSocket;\r
-BaseType_t xReturn = 0;\r
-\r
-       ( void ) xAddressLength;\r
-\r
-       if( ( pxSocket == NULL ) || ( pxSocket == FREERTOS_INVALID_SOCKET ) )\r
-       {\r
-               xReturn = -pdFREERTOS_ERRNO_EINVAL;\r
-       }\r
-       /* Once a socket is bound to a port, it can not be bound to a different\r
-       port number */\r
-       else if( socketSOCKET_IS_BOUND( pxSocket) != pdFALSE )\r
-       {\r
-               /* The socket is already bound. */\r
-               FreeRTOS_debug_printf( ( "vSocketBind: Socket already bound to %d\n", pxSocket->usLocalPort ) );\r
-               xReturn = -pdFREERTOS_ERRNO_EINVAL;\r
-       }\r
-       else\r
-       {\r
-               /* Prepare a messages to the IP-task in order to perform the binding.\r
-               The desired port number will be passed in usLocalPort. */\r
-               xBindEvent.eEventType = eSocketBindEvent;\r
-               xBindEvent.pvData = ( void * ) xSocket;\r
-               if( pxAddress != NULL )\r
-               {\r
-                       pxSocket->usLocalPort = FreeRTOS_ntohs( pxAddress->sin_port );\r
-               }\r
-               else\r
-               {\r
-                       /* Caller wants to bind to a random port number. */\r
-                       pxSocket->usLocalPort = 0u;\r
-               }\r
-\r
-               /* portMAX_DELAY is used as a the time-out parameter, as binding *must*\r
-               succeed before the socket can be used.  _RB_ The use of an infinite\r
-               block time needs be changed as it could result in the task hanging. */\r
-               if( xSendEventStructToIPTask( &xBindEvent, ( TickType_t ) portMAX_DELAY ) == pdFAIL )\r
-               {\r
-                       /* Failed to wake-up the IP-task, no use to wait for it */\r
-                       FreeRTOS_debug_printf( ( "FreeRTOS_bind: send event failed\n" ) );\r
-                       xReturn = -pdFREERTOS_ERRNO_ECANCELED;\r
-               }\r
-               else\r
-               {\r
-                       /* The IP-task will set the 'eSOCKET_BOUND' bit when it has done its\r
-                       job. */\r
-                       xEventGroupWaitBits( pxSocket->xEventGroup, eSOCKET_BOUND, pdTRUE /*xClearOnExit*/, pdFALSE /*xWaitAllBits*/, portMAX_DELAY );\r
-                       if( socketSOCKET_IS_BOUND( pxSocket ) == pdFALSE )\r
-                       {\r
-                               xReturn = -pdFREERTOS_ERRNO_EINVAL;\r
-                       }\r
-               }\r
-       }\r
-\r
-       return xReturn;\r
-}\r
-\r
-/*\r
- * vSocketBind(): internal version of bind() that should not be called directly.\r
- * 'xInternal' is used for TCP sockets only: it allows to have several\r
- * (connected) child sockets bound to the same server port.\r
- */\r
-BaseType_t vSocketBind( FreeRTOS_Socket_t *pxSocket, struct freertos_sockaddr * pxAddress, size_t uxAddressLength, BaseType_t xInternal )\r
-{\r
-BaseType_t xReturn = 0; /* In Berkeley sockets, 0 means pass for bind(). */\r
-List_t *pxSocketList;\r
-#if( ipconfigALLOW_SOCKET_SEND_WITHOUT_BIND == 1 )\r
-       struct freertos_sockaddr xAddress;\r
-#endif /* ipconfigALLOW_SOCKET_SEND_WITHOUT_BIND */\r
-\r
-#if( ipconfigUSE_TCP == 1 )\r
-       if( pxSocket->ucProtocol == ( uint8_t ) FREERTOS_IPPROTO_TCP )\r
-       {\r
-               pxSocketList = &xBoundTCPSocketsList;\r
-       }\r
-       else\r
-#endif  /* ipconfigUSE_TCP == 1 */\r
-       {\r
-               pxSocketList = &xBoundUDPSocketsList;\r
-       }\r
-\r
-       /* The function prototype is designed to maintain the expected Berkeley\r
-       sockets standard, but this implementation does not use all the parameters. */\r
-       ( void ) uxAddressLength;\r
-\r
-       configASSERT( pxSocket );\r
-       configASSERT( pxSocket != FREERTOS_INVALID_SOCKET );\r
-\r
-       #if( ipconfigALLOW_SOCKET_SEND_WITHOUT_BIND == 1 )\r
-       {\r
-               /* pxAddress will be NULL if sendto() was called on a socket without the\r
-               socket being bound to an address. In this case, automatically allocate\r
-               an address and port to the socket. */\r
-               if( pxAddress == NULL )\r
-               {\r
-                       pxAddress = &xAddress;\r
-                       /* Put the port to zero to be assigned later. */\r
-                       pxAddress->sin_port = 0u;\r
-               }\r
-       }\r
-       #endif /* ipconfigALLOW_SOCKET_SEND_WITHOUT_BIND == 1 */\r
-\r
-       /* Sockets must be bound before calling FreeRTOS_sendto() if\r
-       ipconfigALLOW_SOCKET_SEND_WITHOUT_BIND is not set to 1. */\r
-       configASSERT( pxAddress );\r
-\r
-       if( pxAddress != NULL )\r
-       {\r
-               if( pxAddress->sin_port == 0u )\r
-               {\r
-                       pxAddress->sin_port = prvGetPrivatePortNumber( ( BaseType_t )pxSocket->ucProtocol );\r
-                       if( 0 == pxAddress->sin_port )\r
-                       {\r
-                               return -pdFREERTOS_ERRNO_EADDRNOTAVAIL;\r
-                       }\r
-               }\r
-\r
-               /* If vSocketBind() is called from the API FreeRTOS_bind() it has been\r
-               confirmed that the socket was not yet bound to a port.  If it is called\r
-               from the IP-task, no such check is necessary. */\r
-\r
-               /* Check to ensure the port is not already in use.  If the bind is\r
-               called internally, a port MAY be used by more than one socket. */\r
-               if( ( ( xInternal == pdFALSE ) || ( pxSocket->ucProtocol != ( uint8_t ) FREERTOS_IPPROTO_TCP ) ) &&\r
-                       ( pxListFindListItemWithValue( pxSocketList, ( TickType_t ) pxAddress->sin_port ) != NULL ) )\r
-               {\r
-                       FreeRTOS_debug_printf( ( "vSocketBind: %sP port %d in use\n",\r
-                               pxSocket->ucProtocol == ( uint8_t ) FREERTOS_IPPROTO_TCP ? "TC" : "UD",\r
-                               FreeRTOS_ntohs( pxAddress->sin_port ) ) );\r
-                       xReturn = -pdFREERTOS_ERRNO_EADDRINUSE;\r
-               }\r
-               else\r
-               {\r
-                       /* Allocate the port number to the socket.\r
-                       This macro will set 'xBoundSocketListItem->xItemValue' */\r
-                       socketSET_SOCKET_PORT( pxSocket, pxAddress->sin_port );\r
-\r
-                       /* And also store it in a socket field 'usLocalPort' in host-byte-order,\r
-                       mostly used for logging and debugging purposes */\r
-                       pxSocket->usLocalPort = FreeRTOS_ntohs( pxAddress->sin_port );\r
-\r
-                       /* Add the socket to the list of bound ports. */\r
-                       {\r
-                               /* If the network driver can iterate through 'xBoundUDPSocketsList',\r
-                               by calling xPortHasUDPSocket() then the IP-task must temporarily\r
-                               suspend the scheduler to keep the list in a consistent state. */\r
-                               #if( ipconfigETHERNET_DRIVER_FILTERS_PACKETS == 1 )\r
-                               {\r
-                                       vTaskSuspendAll();\r
-                               }\r
-                               #endif /* ipconfigETHERNET_DRIVER_FILTERS_PACKETS */\r
-\r
-                               /* Add the socket to 'xBoundUDPSocketsList' or 'xBoundTCPSocketsList' */\r
-                               vListInsertEnd( pxSocketList, &( pxSocket->xBoundSocketListItem ) );\r
-\r
-                               #if( ipconfigETHERNET_DRIVER_FILTERS_PACKETS == 1 )\r
-                               {\r
-                                       xTaskResumeAll();\r
-                               }\r
-                               #endif /* ipconfigETHERNET_DRIVER_FILTERS_PACKETS */\r
-                       }\r
-               }\r
-       }\r
-       else\r
-       {\r
-               xReturn = -pdFREERTOS_ERRNO_EADDRNOTAVAIL;\r
-               FreeRTOS_debug_printf( ( "vSocketBind: Socket no addr\n" ) );\r
-       }\r
-\r
-       if( xReturn != 0 )\r
-       {\r
-               iptraceBIND_FAILED( xSocket, ( FreeRTOS_ntohs( pxAddress->sin_port ) ) );\r
-       }\r
-\r
-       return xReturn;\r
-} /* Tested */\r
-/*-----------------------------------------------------------*/\r
-\r
-/*\r
- * Close a socket and free the allocated space\r
- * In case of a TCP socket: the connection will not be closed automatically\r
- * Subsequent messages for the closed socket will be responded to with a RST\r
- * The IP-task will actually close the socket, after receiving a 'eSocketCloseEvent' message\r
- */\r
-BaseType_t FreeRTOS_closesocket( Socket_t xSocket )\r
-{\r
-BaseType_t xResult;\r
-#if( ipconfigUSE_TCP == 1 ) && ( ipconfigUSE_CALLBACKS == 1 )\r
-       FreeRTOS_Socket_t *pxSocket = ( FreeRTOS_Socket_t * )xSocket;\r
-#endif\r
-IPStackEvent_t xCloseEvent;\r
-xCloseEvent.eEventType = eSocketCloseEvent;\r
-xCloseEvent.pvData = ( void * ) xSocket;\r
-\r
-       if( ( xSocket == NULL ) || ( xSocket == FREERTOS_INVALID_SOCKET ) )\r
-       {\r
-               xResult = 0;\r
-       }\r
-       else\r
-       {\r
-               #if( ( ipconfigUSE_TCP == 1 ) && ( ipconfigUSE_CALLBACKS == 1 ) )\r
-               {\r
-                       if( pxSocket->ucProtocol == ( uint8_t ) FREERTOS_IPPROTO_TCP )\r
-                       {\r
-                               /* Make sure that IP-task won't call the user callback's anymore */\r
-                               pxSocket->u.xTCP.pxHandleConnected = NULL;\r
-                               pxSocket->u.xTCP.pxHandleReceive = NULL;\r
-                               pxSocket->u.xTCP.pxHandleSent = NULL;\r
-                       }\r
-               }\r
-               #endif  /* ( ( ipconfigUSE_TCP == 1 ) && ( ipconfigUSE_CALLBACKS == 1 ) ) */\r
-\r
-               /* Let the IP task close the socket to keep it synchronised     with the\r
-               packet handling. */\r
-\r
-               /* Note when changing the time-out value below, it must be checked who is calling\r
-               this function. If it is called by the IP-task, a deadlock could occur.\r
-               The IP-task would only call it in case of a user call-back */\r
-               if( xSendEventStructToIPTask( &xCloseEvent, ( TickType_t ) 0 ) == pdFAIL )\r
-               {\r
-                       FreeRTOS_debug_printf( ( "FreeRTOS_closesocket: failed\n" ) );\r
-                       xResult = -1;\r
-               }\r
-               else\r
-               {\r
-                       xResult = 1;\r
-               }\r
-       }\r
-\r
-       return xResult;\r
-}\r
-\r
-/* This is the internal version of FreeRTOS_closesocket()\r
- * It will be called by the IPtask only to avoid problems with synchronicity\r
- */\r
-void *vSocketClose( FreeRTOS_Socket_t *pxSocket )\r
-{\r
-NetworkBufferDescriptor_t *pxNetworkBuffer;\r
-\r
-       #if( ipconfigUSE_TCP == 1 )\r
-       {\r
-               /* For TCP: clean up a little more. */\r
-               if( pxSocket->ucProtocol == ( uint8_t ) FREERTOS_IPPROTO_TCP )\r
-               {\r
-                       #if( ipconfigUSE_TCP_WIN == 1 )\r
-                       {\r
-                               if( pxSocket->u.xTCP.pxAckMessage != NULL )\r
-                               {\r
-                                       vReleaseNetworkBufferAndDescriptor( pxSocket->u.xTCP.pxAckMessage );\r
-                               }\r
-                               /* Free the resources which were claimed by the tcpWin member */\r
-                               vTCPWindowDestroy( &pxSocket->u.xTCP.xTCPWindow );\r
-                       }\r
-                       #endif /* ipconfigUSE_TCP_WIN */\r
-\r
-                       /* Free the input and output streams */\r
-                       if( pxSocket->u.xTCP.rxStream != NULL )\r
-                       {\r
-                               vPortFreeLarge( pxSocket->u.xTCP.rxStream );\r
-                       }\r
-\r
-                       if( pxSocket->u.xTCP.txStream != NULL )\r
-                       {\r
-                               vPortFreeLarge( pxSocket->u.xTCP.txStream );\r
-                       }\r
-\r
-                       /* In case this is a child socket, make sure the child-count of the\r
-                       parent socket is decreased. */\r
-                       prvTCPSetSocketCount( pxSocket );\r
-               }\r
-       }\r
-       #endif  /* ipconfigUSE_TCP == 1 */\r
-\r
-       /* Socket must be unbound first, to ensure no more packets are queued on\r
-       it. */\r
-       if( socketSOCKET_IS_BOUND( pxSocket ) != pdFALSE )\r
-       {\r
-               /* If the network driver can iterate through 'xBoundUDPSocketsList',\r
-               by calling xPortHasUDPSocket(), then the IP-task must temporarily\r
-               suspend the scheduler to keep the list in a consistent state. */\r
-               #if( ipconfigETHERNET_DRIVER_FILTERS_PACKETS == 1 )\r
-               {\r
-                       vTaskSuspendAll();\r
-               }\r
-               #endif /* ipconfigETHERNET_DRIVER_FILTERS_PACKETS */\r
-\r
-               uxListRemove( &( pxSocket->xBoundSocketListItem ) );\r
-\r
-               #if( ipconfigETHERNET_DRIVER_FILTERS_PACKETS == 1 )\r
-               {\r
-                       xTaskResumeAll();\r
-               }\r
-               #endif /* ipconfigETHERNET_DRIVER_FILTERS_PACKETS */\r
-       }\r
-\r
-       /* Now the socket is not bound the list of waiting packets can be\r
-       drained. */\r
-       if( pxSocket->ucProtocol == ( uint8_t ) FREERTOS_IPPROTO_UDP )\r
-       {\r
-               while( listCURRENT_LIST_LENGTH( &( pxSocket->u.xUDP.xWaitingPacketsList ) ) > 0U )\r
-               {\r
-                       pxNetworkBuffer = ( NetworkBufferDescriptor_t * ) listGET_OWNER_OF_HEAD_ENTRY( &( pxSocket->u.xUDP.xWaitingPacketsList ) );\r
-                       uxListRemove( &( pxNetworkBuffer->xBufferListItem ) );\r
-                       vReleaseNetworkBufferAndDescriptor( pxNetworkBuffer );\r
-               }\r
-       }\r
-\r
-       if( pxSocket->xEventGroup )\r
-       {\r
-               vEventGroupDelete( pxSocket->xEventGroup );\r
-       }\r
-\r
-       #if( ipconfigUSE_TCP == 1 ) && ( ipconfigHAS_DEBUG_PRINTF != 0 )\r
-       {\r
-               if( pxSocket->ucProtocol == ( uint8_t ) FREERTOS_IPPROTO_TCP )\r
-               {\r
-                       FreeRTOS_debug_printf( ( "FreeRTOS_closesocket[%u to %lxip:%u]: buffers %lu socks %lu\n",\r
-                               pxSocket->usLocalPort,\r
-                               pxSocket->u.xTCP.ulRemoteIP,\r
-                               pxSocket->u.xTCP.usRemotePort,\r
-                               uxGetNumberOfFreeNetworkBuffers(),\r
-                               listCURRENT_LIST_LENGTH( &xBoundTCPSocketsList ) ) );\r
-               }\r
-       }\r
-       #endif /* ( ipconfigUSE_TCP == 1 ) && ( ipconfigHAS_DEBUG_PRINTF != 0 ) */\r
-\r
-       /* Anf finally, after all resources have been freed, free the socket space */\r
-       vPortFreeSocket( pxSocket );\r
-\r
-       return 0;\r
-} /* Tested */\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-#if ipconfigUSE_TCP == 1\r
-\r
-       /*\r
-        * When a child socket gets closed, make sure to update the child-count of the\r
-        * parent.  When a listening parent socket is closed, make sure no child-sockets\r
-        * keep a pointer to it.\r
-        */\r
-       static void prvTCPSetSocketCount( FreeRTOS_Socket_t *pxSocketToDelete )\r
-       {\r
-       const ListItem_t *pxIterator;\r
-       const MiniListItem_t *pxEnd = ( const MiniListItem_t* )listGET_END_MARKER( &xBoundTCPSocketsList );\r
-       FreeRTOS_Socket_t *pxOtherSocket;\r
-       uint16_t usLocalPort = pxSocketToDelete->usLocalPort;\r
-\r
-               for( pxIterator  = ( const ListItem_t * ) listGET_NEXT( pxEnd );\r
-                        pxIterator != ( const ListItem_t * ) pxEnd;\r
-                        pxIterator  = ( const ListItem_t * ) listGET_NEXT( pxIterator ) )\r
-               {\r
-                       pxOtherSocket = ( FreeRTOS_Socket_t * ) listGET_LIST_ITEM_OWNER( pxIterator );\r
-                       if( ( pxOtherSocket->u.xTCP.ucTCPState == eTCP_LISTEN ) &&\r
-                               ( pxOtherSocket->usLocalPort == usLocalPort ) &&\r
-                               ( pxOtherSocket->u.xTCP.usChildCount ) )\r
-                       {\r
-                               pxOtherSocket->u.xTCP.usChildCount--;\r
-                               FreeRTOS_debug_printf( ( "Lost: Socket %u now has %u / %u child%s\n",\r
-                                       pxOtherSocket->usLocalPort,\r
-                                       pxOtherSocket->u.xTCP.usChildCount,\r
-                                       pxOtherSocket->u.xTCP.usBacklog,\r
-                                       pxOtherSocket->u.xTCP.usChildCount == 1u ? "" : "ren" ) );\r
-                               break;\r
-                       }\r
-               }\r
-       }\r
-\r
-#endif /* ipconfigUSE_TCP == 1 */\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-BaseType_t FreeRTOS_setsockopt( Socket_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
-BaseType_t xReturn = -pdFREERTOS_ERRNO_EINVAL;\r
-BaseType_t lOptionValue;\r
-FreeRTOS_Socket_t *pxSocket;\r
-\r
-       pxSocket = ( FreeRTOS_Socket_t * ) xSocket;\r
-\r
-       /* The function prototype is designed to maintain the expected Berkeley\r
-       sockets standard, but this implementation does not use all the parameters. */\r
-       ( void ) lLevel;\r
-       ( void ) xOptionLength;\r
-\r
-       configASSERT( xSocket );\r
-\r
-       switch( lOptionName )\r
-       {\r
-               case FREERTOS_SO_RCVTIMEO       :\r
-                       /* Receive time out. */\r
-                       pxSocket->xReceiveBlockTime = *( ( TickType_t * ) pvOptionValue );\r
-                       xReturn = 0;\r
-                       break;\r
-\r
-               case FREERTOS_SO_SNDTIMEO       :\r
-                       pxSocket->xSendBlockTime = *( ( TickType_t * ) pvOptionValue );\r
-                       if( pxSocket->ucProtocol == ( uint8_t ) FREERTOS_IPPROTO_UDP )\r
-                       {\r
-                               /* The send time out is capped for the reason stated in the\r
-                               comments where ipconfigUDP_MAX_SEND_BLOCK_TIME_TICKS is defined\r
-                               in FreeRTOSIPConfig.h (assuming an official configuration file\r
-                               is being used. */\r
-                               if( pxSocket->xSendBlockTime > ipconfigUDP_MAX_SEND_BLOCK_TIME_TICKS )\r
-                               {\r
-                                       pxSocket->xSendBlockTime = ipconfigUDP_MAX_SEND_BLOCK_TIME_TICKS;\r
-                               }\r
-                       }\r
-                       else\r
-                       {\r
-                               /* For TCP socket, it isn't necessary to limit the blocking time\r
-                               because the FreeRTOS_send() function does not wait for a network\r
-                               buffer to become available. */\r
-                       }\r
-                       xReturn = 0;\r
-                       break;\r
-               #if( ipconfigUDP_MAX_RX_PACKETS > 0 )\r
-                       case FREERTOS_SO_UDP_MAX_RX_PACKETS:\r
-                               if( pxSocket->ucProtocol != ( uint8_t ) FREERTOS_IPPROTO_UDP )\r
-                               {\r
-                                       break;  /* will return -pdFREERTOS_ERRNO_EINVAL */\r
-                               }\r
-                               pxSocket->u.xUDP.uxMaxPackets = *( ( UBaseType_t * ) pvOptionValue );\r
-                               xReturn = 0;\r
-                               break;\r
-               #endif /* ipconfigUDP_MAX_RX_PACKETS */\r
-\r
-               case FREERTOS_SO_UDPCKSUM_OUT :\r
-                       /* Turn calculating of the UDP checksum on/off for this socket. */\r
-                       lOptionValue = ( BaseType_t ) pvOptionValue;\r
-\r
-                       if( lOptionValue == 0 )\r
-                       {\r
-                               pxSocket->ucSocketOptions &= ( uint8_t ) ~FREERTOS_SO_UDPCKSUM_OUT;\r
-                       }\r
-                       else\r
-                       {\r
-                               pxSocket->ucSocketOptions |= ( uint8_t ) FREERTOS_SO_UDPCKSUM_OUT;\r
-                       }\r
-                       xReturn = 0;\r
-                       break;\r
-\r
-               #if( ipconfigUSE_CALLBACKS == 1 )\r
-                       #if( ipconfigUSE_TCP == 1 )\r
-                               case FREERTOS_SO_TCP_CONN_HANDLER:      /* Set a callback for (dis)connection events */\r
-                               case FREERTOS_SO_TCP_RECV_HANDLER:      /* Install a callback for receiving TCP data. Supply pointer to 'F_TCP_UDP_Handler_t' (see below) */\r
-                               case FREERTOS_SO_TCP_SENT_HANDLER:      /* Install a callback for sending TCP data. Supply pointer to 'F_TCP_UDP_Handler_t' (see below) */\r
-                       #endif /* ipconfigUSE_TCP */\r
-                               case FREERTOS_SO_UDP_RECV_HANDLER:      /* Install a callback for receiving UDP data. Supply pointer to 'F_TCP_UDP_Handler_t' (see below) */\r
-                               case FREERTOS_SO_UDP_SENT_HANDLER:      /* Install a callback for sending UDP data. Supply pointer to 'F_TCP_UDP_Handler_t' (see below) */\r
-                                       {\r
-                                               #if( ipconfigUSE_TCP == 1 )\r
-                                               {\r
-                                                       UBaseType_t uxProtocol;\r
-                                                       if( ( lOptionName == FREERTOS_SO_UDP_RECV_HANDLER ) ||\r
-                                                               ( lOptionName == FREERTOS_SO_UDP_SENT_HANDLER ) )\r
-                                                       {\r
-                                                               uxProtocol = ( UBaseType_t ) FREERTOS_IPPROTO_UDP;\r
-                                                       }\r
-                                                       else\r
-                                                       {\r
-                                                               uxProtocol = ( UBaseType_t ) FREERTOS_IPPROTO_TCP;\r
-                                                       }\r
-\r
-                                                       if( pxSocket->ucProtocol != ( uint8_t ) uxProtocol )\r
-                                                       {\r
-                                                               break;  /* will return -pdFREERTOS_ERRNO_EINVAL */\r
-                                                       }\r
-                                               }\r
-                                               #else\r
-                                               {\r
-                                                       /* No need to check if the socket has the right\r
-                                                       protocol, because only UDP socket can be created. */\r
-                                               }\r
-                                               #endif /* ipconfigUSE_TCP */\r
-\r
-                                               switch( lOptionName )\r
-                                               {\r
-                                               #if ipconfigUSE_TCP == 1\r
-                                                       case FREERTOS_SO_TCP_CONN_HANDLER:\r
-                                                               pxSocket->u.xTCP.pxHandleConnected = ((F_TCP_UDP_Handler_t *)pvOptionValue)->pxOnTCPConnected;\r
-                                                               break;\r
-                                                       case FREERTOS_SO_TCP_RECV_HANDLER:\r
-                                                               pxSocket->u.xTCP.pxHandleReceive = ((F_TCP_UDP_Handler_t *)pvOptionValue)->pxOnTCPReceive;\r
-                                                               break;\r
-                                                       case FREERTOS_SO_TCP_SENT_HANDLER:\r
-                                                               pxSocket->u.xTCP.pxHandleSent = ((F_TCP_UDP_Handler_t *)pvOptionValue)->pxOnTCPSent;\r
-                                                               break;\r
-                                               #endif /* ipconfigUSE_TCP */\r
-                                               case FREERTOS_SO_UDP_RECV_HANDLER:\r
-                                                       pxSocket->u.xUDP.pxHandleReceive = ((F_TCP_UDP_Handler_t *)pvOptionValue)->pxOnUDPReceive;\r
-                                                       break;\r
-                                               case FREERTOS_SO_UDP_SENT_HANDLER:\r
-                                                       pxSocket->u.xUDP.pxHandleSent = ((F_TCP_UDP_Handler_t *)pvOptionValue)->pxOnUDPSent;\r
-                                                       break;\r
-                                               default:\r
-                                                       break;\r
-                                               }\r
-                                       }\r
-\r
-                                       xReturn = 0;\r
-                                       break;\r
-               #endif /* ipconfigUSE_CALLBACKS */\r
-\r
-               #if( ipconfigUSE_TCP != 0 )\r
-                       #if( ipconfigSOCKET_HAS_USER_SEMAPHORE != 0 )\r
-                               /* Each socket has a semaphore on which the using task normally\r
-                               sleeps. */\r
-                               case FREERTOS_SO_SET_SEMAPHORE:\r
-                                       {\r
-                                               pxSocket->pxUserSemaphore = *( ( SemaphoreHandle_t * ) pvOptionValue );\r
-                                               xReturn = 0;\r
-                                       }\r
-                                       break;\r
-                       #endif /* ipconfigSOCKET_HAS_USER_SEMAPHORE */\r
-\r
-                       #if( ipconfigSOCKET_HAS_USER_WAKE_CALLBACK != 0 )\r
-                               case FREERTOS_SO_WAKEUP_CALLBACK:\r
-                               {\r
-                                       /* Each socket can have a callback function that is executed\r
-                                       when there is an event the socket's owner might want to\r
-                                       process. */\r
-                                       pxSocket->pxUserWakeCallback = ( SocketWakeupCallback_t ) pvOptionValue;\r
-                                       xReturn = 0;\r
-                               }\r
-                               break;\r
-                       #endif /* ipconfigSOCKET_HAS_USER_WAKE_CALLBACK */\r
-\r
-                       case FREERTOS_SO_SET_LOW_HIGH_WATER:\r
-                               {\r
-                               LowHighWater_t *pxLowHighWater = ( LowHighWater_t * ) pvOptionValue;\r
-\r
-                                       if( pxSocket->ucProtocol != ( uint8_t ) FREERTOS_IPPROTO_TCP )\r
-                                       {\r
-                                               /* It is not allowed to access 'pxSocket->u.xTCP'. */\r
-                                               FreeRTOS_debug_printf( ( "FREERTOS_SO_SET_LOW_HIGH_WATER: wrong socket type\n" ) );\r
-                                               break;  /* will return -pdFREERTOS_ERRNO_EINVAL */\r
-                                       }\r
-                                       if( ( pxLowHighWater->uxLittleSpace >= pxLowHighWater->uxEnoughSpace ) ||\r
-                                               ( pxLowHighWater->uxEnoughSpace > pxSocket->u.xTCP.uxRxStreamSize ) )\r
-                                       {\r
-                                               /* Impossible values. */\r
-                                               FreeRTOS_debug_printf( ( "FREERTOS_SO_SET_LOW_HIGH_WATER: bad values\n" ) );\r
-                                               break;  /* will return -pdFREERTOS_ERRNO_EINVAL */\r
-                                       }\r
-                                       /* Send a STOP when buffer space drops below 'uxLittleSpace' bytes. */\r
-                                       pxSocket->u.xTCP.uxLittleSpace = pxLowHighWater->uxLittleSpace;\r
-                                       /* Send a GO when buffer space grows above 'uxEnoughSpace' bytes. */\r
-                                       pxSocket->u.xTCP.uxEnoughSpace = pxLowHighWater->uxEnoughSpace;\r
-                                       xReturn = 0;\r
-                               }\r
-                               break;\r
-\r
-                       case FREERTOS_SO_SNDBUF:        /* Set the size of the send buffer, in units of MSS (TCP only) */\r
-                       case FREERTOS_SO_RCVBUF:        /* Set the size of the receive buffer, in units of MSS (TCP only) */\r
-                               {\r
-                                       uint32_t ulNewValue;\r
-\r
-                                       if( pxSocket->ucProtocol != ( uint8_t ) FREERTOS_IPPROTO_TCP )\r
-                                       {\r
-                                               FreeRTOS_debug_printf( ( "Set SO_%sBUF: wrong socket type\n",\r
-                                                       ( lOptionName == FREERTOS_SO_SNDBUF ) ? "SND" : "RCV" ) );\r
-                                               break;  /* will return -pdFREERTOS_ERRNO_EINVAL */\r
-                                       }\r
-\r
-                                       if( ( ( lOptionName == FREERTOS_SO_SNDBUF ) && ( pxSocket->u.xTCP.txStream != NULL ) ) ||\r
-                                               ( ( lOptionName == FREERTOS_SO_RCVBUF ) && ( pxSocket->u.xTCP.rxStream != NULL ) ) )\r
-                                       {\r
-                                               FreeRTOS_debug_printf( ( "Set SO_%sBUF: buffer already created\n",\r
-                                                       ( lOptionName == FREERTOS_SO_SNDBUF ) ? "SND" : "RCV" ) );\r
-                                               break;  /* will return -pdFREERTOS_ERRNO_EINVAL */\r
-                                       }\r
-\r
-                                       ulNewValue = *( ( uint32_t * ) pvOptionValue );\r
-\r
-                                       if( lOptionName == FREERTOS_SO_SNDBUF )\r
-                                       {\r
-                                               /* Round up to nearest MSS size */\r
-                                               ulNewValue = FreeRTOS_round_up( ulNewValue, ( uint32_t ) pxSocket->u.xTCP.usInitMSS );\r
-                                               pxSocket->u.xTCP.uxTxStreamSize = ulNewValue;\r
-                                       }\r
-                                       else\r
-                                       {\r
-                                               pxSocket->u.xTCP.uxRxStreamSize = ulNewValue;\r
-                                       }\r
-                               }\r
-                               xReturn = 0;\r
-                               break;\r
-\r
-                       case FREERTOS_SO_WIN_PROPERTIES:        /* Set all buffer and window properties in one call, parameter is pointer to WinProperties_t */\r
-                               {\r
-                                       WinProperties_t* pxProps;\r
-\r
-                                       if( pxSocket->ucProtocol != ( uint8_t ) FREERTOS_IPPROTO_TCP )\r
-                                       {\r
-                                               FreeRTOS_debug_printf( ( "Set SO_WIN_PROP: wrong socket type\n" ) );\r
-                                               break;  /* will return -pdFREERTOS_ERRNO_EINVAL */\r
-                                       }\r
-\r
-                                       if( ( pxSocket->u.xTCP.txStream != NULL ) || ( pxSocket->u.xTCP.rxStream != NULL ) )\r
-                                       {\r
-                                               FreeRTOS_debug_printf( ( "Set SO_WIN_PROP: buffer already created\n" ) );\r
-                                               break;  /* will return -pdFREERTOS_ERRNO_EINVAL */\r
-                                       }\r
-\r
-                                       pxProps = ( ( WinProperties_t * ) pvOptionValue );\r
-\r
-                                       if ( FreeRTOS_setsockopt( xSocket, 0, FREERTOS_SO_SNDBUF, &( pxProps->lTxBufSize ), sizeof( pxProps->lTxBufSize ) ) != 0 )\r
-                                       {\r
-                                               break;  /* will return -pdFREERTOS_ERRNO_EINVAL */\r
-                                       }\r
-\r
-                                       if ( FreeRTOS_setsockopt( xSocket, 0, FREERTOS_SO_RCVBUF, &( pxProps->lRxBufSize ), sizeof( pxProps->lRxBufSize ) ) != 0 )\r
-                                       {\r
-                                               break;  /* will return -pdFREERTOS_ERRNO_EINVAL */\r
-                                       }\r
-\r
-                                       #if( ipconfigUSE_TCP_WIN == 1 )\r
-                                       {\r
-                                               pxSocket->u.xTCP.uxRxWinSize = ( uint32_t )pxProps->lRxWinSize; /* Fixed value: size of the TCP reception window */\r
-                                               pxSocket->u.xTCP.uxTxWinSize = ( uint32_t )pxProps->lTxWinSize; /* Fixed value: size of the TCP transmit window */\r
-                                       }\r
-                                       #else\r
-                                       {\r
-                                               pxSocket->u.xTCP.uxRxWinSize = 1u;\r
-                                               pxSocket->u.xTCP.uxTxWinSize = 1u;\r
-                                       }\r
-                                       #endif\r
-\r
-                                       /* In case the socket has already initialised its tcpWin,\r
-                                       adapt the window size parameters */\r
-                                       if( pxSocket->u.xTCP.xTCPWindow.u.bits.bHasInit != pdFALSE_UNSIGNED )\r
-                                       {\r
-                                               pxSocket->u.xTCP.xTCPWindow.xSize.ulRxWindowLength = pxSocket->u.xTCP.uxRxWinSize * pxSocket->u.xTCP.usInitMSS;\r
-                                               pxSocket->u.xTCP.xTCPWindow.xSize.ulTxWindowLength = pxSocket->u.xTCP.uxTxWinSize * pxSocket->u.xTCP.usInitMSS;\r
-                                       }\r
-                               }\r
-\r
-                               xReturn = 0;\r
-                               break;\r
-\r
-                       case FREERTOS_SO_REUSE_LISTEN_SOCKET:   /* If true, the server-socket will turn into a connected socket */\r
-                               {\r
-                                       if( pxSocket->ucProtocol != ( uint8_t ) FREERTOS_IPPROTO_TCP )\r
-                                       {\r
-                                               break;  /* will return -pdFREERTOS_ERRNO_EINVAL */\r
-                                       }\r
-                                       if( *( ( BaseType_t * ) pvOptionValue ) != 0 )\r
-                                       {\r
-                                               pxSocket->u.xTCP.bits.bReuseSocket = pdTRUE_UNSIGNED;\r
-                                       }\r
-                                       else\r
-                                       {\r
-                                               pxSocket->u.xTCP.bits.bReuseSocket = pdFALSE_UNSIGNED;\r
-                                       }\r
-                               }\r
-                               xReturn = 0;\r
-                               break;\r
-\r
-                       case FREERTOS_SO_CLOSE_AFTER_SEND:              /* As soon as the last byte has been transmitted, finalise the connection */\r
-                               {\r
-                                       if( pxSocket->ucProtocol != ( uint8_t ) FREERTOS_IPPROTO_TCP )\r
-                                       {\r
-                                               break;  /* will return -pdFREERTOS_ERRNO_EINVAL */\r
-                                       }\r
-\r
-                                       if( *( ( BaseType_t * ) pvOptionValue ) != 0 )\r
-                                       {\r
-                                               pxSocket->u.xTCP.bits.bCloseAfterSend = pdTRUE_UNSIGNED;\r
-                                       }\r
-                                       else\r
-                                       {\r
-                                               pxSocket->u.xTCP.bits.bCloseAfterSend = pdFALSE_UNSIGNED;\r
-                                       }\r
-                               }\r
-                               xReturn = 0;\r
-                               break;\r
-\r
-                       case FREERTOS_SO_SET_FULL_SIZE:         /* Refuse to send packets smaller than MSS  */\r
-                               {\r
-                                       if( pxSocket->ucProtocol != ( uint8_t ) FREERTOS_IPPROTO_TCP )\r
-                                       {\r
-                                               break;  /* will return -pdFREERTOS_ERRNO_EINVAL */\r
-                                       }\r
-\r
-                                       if( *( ( BaseType_t * ) pvOptionValue ) != 0 )\r
-                                       {\r
-                                               pxSocket->u.xTCP.xTCPWindow.u.bits.bSendFullSize = pdTRUE_UNSIGNED;\r
-                                       }\r
-                                       else\r
-                                       {\r
-                                               pxSocket->u.xTCP.xTCPWindow.u.bits.bSendFullSize = pdFALSE_UNSIGNED;\r
-                                       }\r
-\r
-                                       if( ( pxSocket->u.xTCP.xTCPWindow.u.bits.bSendFullSize == pdFALSE_UNSIGNED ) &&\r
-                                               ( pxSocket->u.xTCP.ucTCPState >= eESTABLISHED ) &&\r
-                                               ( FreeRTOS_outstanding( pxSocket ) != 0 ) )\r
-                                       {\r
-                                               pxSocket->u.xTCP.usTimeout = 1u; /* to set/clear bSendFullSize */\r
-                                               xSendEventToIPTask( eTCPTimerEvent );\r
-                                       }\r
-                               }\r
-                               xReturn = 0;\r
-                               break;\r
-\r
-                       case FREERTOS_SO_STOP_RX:               /* Refuse to receive more packts */\r
-                               {\r
-                                       if( pxSocket->ucProtocol != ( uint8_t ) FREERTOS_IPPROTO_TCP )\r
-                                       {\r
-                                               break;  /* will return -pdFREERTOS_ERRNO_EINVAL */\r
-                                       }\r
-\r
-                                       if( *( ( BaseType_t * ) pvOptionValue ) != 0 )\r
-                                       {\r
-                                               pxSocket->u.xTCP.bits.bRxStopped = pdTRUE_UNSIGNED;\r
-                                       }\r
-                                       else\r
-                                       {\r
-                                               pxSocket->u.xTCP.bits.bRxStopped = pdFALSE_UNSIGNED;\r
-                                       }\r
-\r
-                                       pxSocket->u.xTCP.bits.bWinChange = pdTRUE_UNSIGNED;\r
-                                       pxSocket->u.xTCP.usTimeout = 1u; /* to set/clear bRxStopped */\r
-                                       xSendEventToIPTask( eTCPTimerEvent );\r
-                               }\r
-                               xReturn = 0;\r
-                               break;\r
-\r
-               #endif  /* ipconfigUSE_TCP == 1 */\r
-\r
-               default :\r
-                       /* No other options are handled. */\r
-                       xReturn = -pdFREERTOS_ERRNO_ENOPROTOOPT;\r
-                       break;\r
-       }\r
-\r
-       return xReturn;\r
-} /* Tested */\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-/* Find an available port number per https://tools.ietf.org/html/rfc6056. */\r
-static uint16_t prvGetPrivatePortNumber( BaseType_t xProtocol )\r
-{\r
-const uint16_t usEphemeralPortCount =\r
-       socketAUTO_PORT_ALLOCATION_MAX_NUMBER - socketAUTO_PORT_ALLOCATION_START_NUMBER + 1;\r
-uint16_t usIterations = usEphemeralPortCount;\r
-uint32_t ulRandomSeed = 0;\r
-uint16_t usResult = 0;\r
-const List_t *pxList;\r
-\r
-#if ipconfigUSE_TCP == 1\r
-       if( xProtocol == ( BaseType_t ) FREERTOS_IPPROTO_TCP )\r
-       {\r
-               pxList = &xBoundTCPSocketsList;\r
-       }\r
-       else\r
-#endif\r
-       {\r
-               pxList = &xBoundUDPSocketsList;\r
-       }\r
-\r
-       /* Avoid compiler warnings if ipconfigUSE_TCP is not defined. */\r
-       ( void ) xProtocol;\r
-\r
-       /* Find the next available port using the random seed as a starting\r
-       point. */\r
-       do\r
-       {\r
-               /* Only proceed if the random number generator succeeded. */\r
-               if( xApplicationGetRandomNumber( &( ulRandomSeed ) ) == pdFALSE )\r
-               {\r
-                       break;\r
-               }\r
-\r
-               /* Map the random to a candidate port. */\r
-               usResult =\r
-                       socketAUTO_PORT_ALLOCATION_START_NUMBER +\r
-                       ( ( ( uint16_t )ulRandomSeed ) % usEphemeralPortCount );\r
-\r
-               /* Check if there's already an open socket with the same protocol\r
-               and port. */\r
-               if( NULL == pxListFindListItemWithValue(\r
-                       pxList,\r
-                       ( TickType_t )FreeRTOS_htons( usResult ) ) )\r
-               {\r
-                       usResult = FreeRTOS_htons( usResult );\r
-                       break;\r
-               }\r
-               else\r
-               {\r
-                       usResult = 0;\r
-               }\r
-\r
-               usIterations--;\r
-       }\r
-       while( usIterations > 0 );\r
-\r
-       return usResult;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-/* pxListFindListItemWithValue: find a list item in a bound socket list\r
-'xWantedItemValue' refers to a port number */\r
-static const ListItem_t * pxListFindListItemWithValue( const List_t *pxList, TickType_t xWantedItemValue )\r
-{\r
-const ListItem_t * pxResult = NULL;\r
-\r
-       if( ( xIPIsNetworkTaskReady() != pdFALSE ) && ( pxList != NULL ) )\r
-       {\r
-               const ListItem_t *pxIterator;\r
-               const MiniListItem_t *pxEnd = ( const MiniListItem_t* )listGET_END_MARKER( pxList );\r
-               for( pxIterator  = ( const ListItem_t * ) listGET_NEXT( pxEnd );\r
-                        pxIterator != ( const ListItem_t * ) pxEnd;\r
-                        pxIterator  = ( const ListItem_t * ) listGET_NEXT( pxIterator ) )\r
-               {\r
-                       if( listGET_LIST_ITEM_VALUE( pxIterator ) == xWantedItemValue )\r
-                       {\r
-                               pxResult = pxIterator;\r
-                               break;\r
-                       }\r
-               }\r
-       }\r
-\r
-       return pxResult;\r
-} /* Tested */\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-FreeRTOS_Socket_t *pxUDPSocketLookup( UBaseType_t uxLocalPort )\r
-{\r
-const ListItem_t *pxListItem;\r
-FreeRTOS_Socket_t *pxSocket = NULL;\r
-\r
-       /* Looking up a socket is quite simple, find a match with the local port.\r
-\r
-       See if there is a list item associated with the port number on the\r
-       list of bound sockets. */\r
-       pxListItem = pxListFindListItemWithValue( &xBoundUDPSocketsList, ( TickType_t ) uxLocalPort );\r
-\r
-       if( pxListItem != NULL )\r
-       {\r
-               /* The owner of the list item is the socket itself. */\r
-               pxSocket = ( FreeRTOS_Socket_t * ) listGET_LIST_ITEM_OWNER( pxListItem );\r
-               configASSERT( pxSocket != NULL );\r
-       }\r
-       return pxSocket;\r
-}\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-#if ipconfigINCLUDE_FULL_INET_ADDR == 1\r
-\r
-       uint32_t FreeRTOS_inet_addr( const char * pcIPAddress )\r
-       {\r
-       const uint32_t ulDecimalBase = 10u;\r
-       uint8_t ucOctet[ socketMAX_IP_ADDRESS_OCTETS ];\r
-       const char *pcPointerOnEntering;\r
-       uint32_t ulReturn = 0UL, ulValue;\r
-       UBaseType_t uxOctetNumber;\r
-       BaseType_t xResult = pdPASS;\r
-\r
-               for( uxOctetNumber = 0u; uxOctetNumber < socketMAX_IP_ADDRESS_OCTETS; uxOctetNumber++ )\r
-               {\r
-                       ulValue = 0ul;\r
-                       pcPointerOnEntering = pcIPAddress;\r
-\r
-                       while( ( *pcIPAddress >= '0' ) && ( *pcIPAddress <= '9' ) )\r
-                       {\r
-                               /* Move previous read characters into the next decimal\r
-                               position. */\r
-                               ulValue *= ulDecimalBase;\r
-\r
-                               /* Add the binary value of the ascii character. */\r
-                               ulValue += ( ( uint32_t ) ( *pcIPAddress ) - ( uint32_t ) '0' );\r
-\r
-                               /* Move to next character in the string. */\r
-                               pcIPAddress++;\r
-                       }\r
-\r
-                       /* Check characters were read. */\r
-                       if( pcIPAddress == pcPointerOnEntering )\r
-                       {\r
-                               xResult = pdFAIL;\r
-                       }\r
-\r
-                       /* Check the value fits in an 8-bit number. */\r
-                       if( ulValue > 0xffUL )\r
-                       {\r
-                               xResult = pdFAIL;\r
-                       }\r
-                       else\r
-                       {\r
-                               ucOctet[ uxOctetNumber ] = ( uint8_t ) ulValue;\r
-\r
-                               /* Check the next character is as expected. */\r
-                               if( uxOctetNumber < ( socketMAX_IP_ADDRESS_OCTETS - 1u ) )\r
-                               {\r
-                                       if( *pcIPAddress != '.' )\r
-                                       {\r
-                                               xResult = pdFAIL;\r
-                                       }\r
-                                       else\r
-                                       {\r
-                                               /* Move past the dot. */\r
-                                               pcIPAddress++;\r
-                                       }\r
-                               }\r
-                       }\r
-\r
-                       if( xResult == pdFAIL )\r
-                       {\r
-                               /* No point going on. */\r
-                               break;\r
-                       }\r
-               }\r
-\r
-               if( *pcIPAddress != ( char ) 0 )\r
-               {\r
-                       /* Expected the end of the string. */\r
-                       xResult = pdFAIL;\r
-               }\r
-\r
-               if( uxOctetNumber != socketMAX_IP_ADDRESS_OCTETS )\r
-               {\r
-                       /* Didn't read enough octets. */\r
-                       xResult = pdFAIL;\r
-               }\r
-\r
-               if( xResult == pdPASS )\r
-               {\r
-                       ulReturn = FreeRTOS_inet_addr_quick( ucOctet[ 0 ], ucOctet[ 1 ], ucOctet[ 2 ], ucOctet[ 3 ] );\r
-               }\r
-\r
-               return ulReturn;\r
-       }\r
-\r
-#endif /* ipconfigINCLUDE_FULL_INET_ADDR */\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-/* Function to get the local address and IP port */\r
-size_t FreeRTOS_GetLocalAddress( Socket_t xSocket, struct freertos_sockaddr *pxAddress )\r
-{\r
-FreeRTOS_Socket_t *pxSocket = ( FreeRTOS_Socket_t * ) xSocket;\r
-\r
-       /* IP address of local machine. */\r
-       pxAddress->sin_addr = *ipLOCAL_IP_ADDRESS_POINTER;\r
-\r
-       /* Local port on this machine. */\r
-       pxAddress->sin_port = FreeRTOS_htons( pxSocket->usLocalPort );\r
-\r
-       return sizeof( *pxAddress );\r
-}\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-void vSocketWakeUpUser( FreeRTOS_Socket_t *pxSocket )\r
-{\r
-/* _HT_ must work this out, now vSocketWakeUpUser will be called for any important\r
- * event or transition */\r
-       #if( ipconfigSOCKET_HAS_USER_SEMAPHORE == 1 )\r
-       {\r
-               if( pxSocket->pxUserSemaphore != NULL )\r
-               {\r
-                       xSemaphoreGive( pxSocket->pxUserSemaphore );\r
-               }\r
-       }\r
-       #endif /* ipconfigSOCKET_HAS_USER_SEMAPHORE */\r
-\r
-       #if( ipconfigSOCKET_HAS_USER_WAKE_CALLBACK == 1 )\r
-       {\r
-               if( pxSocket->pxUserWakeCallback != NULL )\r
-               {\r
-                       pxSocket->pxUserWakeCallback( pxSocket );\r
-               }\r
-       }\r
-       #endif /* ipconfigSOCKET_HAS_USER_SEMAPHORE */\r
-\r
-       #if( ipconfigSUPPORT_SELECT_FUNCTION == 1 )\r
-       {\r
-               if( pxSocket->pxSocketSet != NULL )\r
-               {\r
-                       EventBits_t xSelectBits = ( pxSocket->xEventBits >> SOCKET_EVENT_BIT_COUNT ) & eSELECT_ALL;\r
-                       if( xSelectBits != 0ul )\r
-                       {\r
-                               pxSocket->xSocketBits |= xSelectBits;\r
-                               xEventGroupSetBits( pxSocket->pxSocketSet->xSelectGroup, xSelectBits );\r
-                       }\r
-               }\r
-\r
-               pxSocket->xEventBits &= eSOCKET_ALL;\r
-       }\r
-       #endif /* ipconfigSUPPORT_SELECT_FUNCTION */\r
-\r
-       if( ( pxSocket->xEventGroup != NULL ) && ( pxSocket->xEventBits != 0u ) )\r
-       {\r
-               xEventGroupSetBits( pxSocket->xEventGroup, pxSocket->xEventBits );\r
-       }\r
-\r
-       pxSocket->xEventBits = 0ul;\r
-}\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigETHERNET_DRIVER_FILTERS_PACKETS == 1 )\r
-\r
-       /* This define makes it possible for network-card drivers to inspect\r
-        * UDP message and see if there is any UDP socket bound to a given port\r
-        * number.\r
-        * This is probably only usefull in systems with a minimum of RAM and\r
-        * when lots of anonymous broadcast messages come in\r
-        */\r
-       BaseType_t xPortHasUDPSocket( uint16_t usPortNr )\r
-       {\r
-       BaseType_t xFound = pdFALSE;\r
-\r
-               vTaskSuspendAll();\r
-               {\r
-                       if( ( pxListFindListItemWithValue( &xBoundUDPSocketsList, ( TickType_t ) usPortNr ) != NULL ) )\r
-                       {\r
-                               xFound = pdTRUE;\r
-                       }\r
-               }\r
-               xTaskResumeAll();\r
-\r
-               return xFound;\r
-       }\r
-\r
-#endif /* ipconfigETHERNET_DRIVER_FILTERS_PACKETS */\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_TCP == 1 )\r
-\r
-       static BaseType_t bMayConnect( FreeRTOS_Socket_t *pxSocket );\r
-       static BaseType_t bMayConnect( FreeRTOS_Socket_t *pxSocket )\r
-       {\r
-               switch( pxSocket->u.xTCP.ucTCPState )\r
-               {\r
-                       case eCLOSED:\r
-                       case eCLOSE_WAIT:       return 0;\r
-                       case eCONNECT_SYN:      return -pdFREERTOS_ERRNO_EINPROGRESS;\r
-                       default:                        return -pdFREERTOS_ERRNO_EAGAIN;\r
-               }\r
-       }\r
-\r
-#endif /* ipconfigUSE_TCP */\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_TCP == 1 )\r
-\r
-       static BaseType_t prvTCPConnectStart( FreeRTOS_Socket_t *pxSocket, struct freertos_sockaddr *pxAddress )\r
-       {\r
-       BaseType_t xResult = 0;\r
-\r
-               if( prvValidSocket( pxSocket, FREERTOS_IPPROTO_TCP, pdFALSE ) == pdFALSE )\r
-               {\r
-                       /* Not a valid socket or wrong type */\r
-                       xResult = -pdFREERTOS_ERRNO_EBADF;\r
-               }\r
-               else if( FreeRTOS_issocketconnected( pxSocket ) > 0 )\r
-               {\r
-                       /* The socket is already connected. */\r
-                       xResult = -pdFREERTOS_ERRNO_EISCONN;\r
-               }\r
-               else if( socketSOCKET_IS_BOUND( pxSocket ) == pdFALSE )\r
-               {\r
-                       /* Bind the socket to the port that the client task will send from.\r
-                       Non-standard, so the error returned is that returned by bind(). */\r
-                       xResult = FreeRTOS_bind( ( Socket_t ) pxSocket, NULL, 0u );\r
-               }\r
-\r
-               if( xResult == 0 )\r
-               {\r
-                       /* Check if it makes any sense to wait for a connect event, this condition\r
-                       might change while sleeping, so it must be checked within each loop */\r
-                       xResult = bMayConnect( pxSocket ); /* -EINPROGRESS, -EAGAIN, or 0 for OK */\r
-\r
-                       /* Start the connect procedure, kernel will start working on it */\r
-                       if( xResult == 0 )\r
-                       {\r
-                               pxSocket->u.xTCP.bits.bConnPrepared = pdFALSE_UNSIGNED;\r
-                               pxSocket->u.xTCP.ucRepCount = 0u;\r
-\r
-                               FreeRTOS_debug_printf( ( "FreeRTOS_connect: %u to %lxip:%u\n",\r
-                                       pxSocket->usLocalPort, FreeRTOS_ntohl( pxAddress->sin_addr ), FreeRTOS_ntohs( pxAddress->sin_port ) ) );\r
-\r
-                               /* Port on remote machine. */\r
-                               pxSocket->u.xTCP.usRemotePort = FreeRTOS_ntohs( pxAddress->sin_port );\r
-\r
-                               /* IP address of remote machine. */\r
-                               pxSocket->u.xTCP.ulRemoteIP = FreeRTOS_ntohl( pxAddress->sin_addr );\r
-\r
-                               /* (client) internal state: socket wants to send a connect. */\r
-                               vTCPStateChange( pxSocket, eCONNECT_SYN );\r
-\r
-                               /* To start an active connect. */\r
-                               pxSocket->u.xTCP.usTimeout = 1u;\r
-\r
-                               if( xSendEventToIPTask( eTCPTimerEvent ) != pdPASS )\r
-                               {\r
-                                       xResult = -pdFREERTOS_ERRNO_ECANCELED;\r
-                               }\r
-                       }\r
-               }\r
-\r
-               return xResult;\r
-       }\r
-\r
-#endif /* ipconfigUSE_TCP */\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_TCP == 1 )\r
-\r
-       /*\r
-        * FreeRTOS_connect: socket wants to connect to a remote port\r
-        */\r
-       BaseType_t FreeRTOS_connect( Socket_t xClientSocket, struct freertos_sockaddr *pxAddress, socklen_t xAddressLength )\r
-       {\r
-       FreeRTOS_Socket_t *pxSocket = ( FreeRTOS_Socket_t* ) xClientSocket;\r
-       TickType_t xRemainingTime;\r
-       BaseType_t xTimed = pdFALSE;\r
-       BaseType_t xResult;\r
-       TimeOut_t xTimeOut;\r
-\r
-               ( void ) xAddressLength;\r
-\r
-               xResult = prvTCPConnectStart( pxSocket, pxAddress );\r
-\r
-               if( xResult == 0 )\r
-               {\r
-                       /* And wait for the result */\r
-                       for( ;; )\r
-                       {\r
-                               if( xTimed == pdFALSE )\r
-                               {\r
-                                       /* Only in the first round, check for non-blocking */\r
-                                       xRemainingTime = pxSocket->xReceiveBlockTime;\r
-                                       if( xRemainingTime == ( TickType_t )0 )\r
-                                       {\r
-                                               /* Not yet connected, correct state, non-blocking. */\r
-                                               xResult = -pdFREERTOS_ERRNO_EWOULDBLOCK;\r
-                                               break;\r
-                                       }\r
-\r
-                                       /* Don't get here a second time. */\r
-                                       xTimed = pdTRUE;\r
-\r
-                                       /* Fetch the current time */\r
-                                       vTaskSetTimeOutState( &xTimeOut );\r
-                               }\r
-\r
-                               /* Did it get connected while sleeping ? */\r
-                               xResult = FreeRTOS_issocketconnected( pxSocket );\r
-\r
-                               /* Returns positive when connected, negative means an error */\r
-                               if( xResult < 0 )\r
-                               {\r
-                                       /* Return the error */\r
-                                       break;\r
-                               }\r
-\r
-                               if( xResult > 0 )\r
-                               {\r
-                                       /* Socket now connected, return a zero */\r
-                                       xResult = 0;\r
-                                       break;\r
-                               }\r
-\r
-                               /* Is it allowed to sleep more? */\r
-                               if( xTaskCheckForTimeOut( &xTimeOut, &xRemainingTime ) )\r
-                               {\r
-                                       xResult = -pdFREERTOS_ERRNO_ETIMEDOUT;\r
-                                       break;\r
-                               }\r
-\r
-                               /* Go sleeping until we get any down-stream event */\r
-                               xEventGroupWaitBits( pxSocket->xEventGroup, eSOCKET_CONNECT, pdTRUE /*xClearOnExit*/, pdFALSE /*xWaitAllBits*/, xRemainingTime );\r
-                       }\r
-               }\r
-\r
-               return xResult;\r
-       }\r
-#endif /* ipconfigUSE_TCP */\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_TCP == 1 )\r
-\r
-       /*\r
-        * FreeRTOS_accept: can return a new connected socket\r
-        * if the server socket is in listen mode and receives a connection request\r
-        * The new socket will be bound already to the same port number as the listing\r
-        * socket.\r
-        */\r
-       Socket_t FreeRTOS_accept( Socket_t xServerSocket, struct freertos_sockaddr *pxAddress, socklen_t *pxAddressLength )\r
-       {\r
-       FreeRTOS_Socket_t *pxSocket = ( FreeRTOS_Socket_t * ) xServerSocket;\r
-       FreeRTOS_Socket_t *pxClientSocket = NULL;\r
-       TickType_t xRemainingTime;\r
-       BaseType_t xTimed = pdFALSE, xAsk = pdFALSE;\r
-       TimeOut_t xTimeOut;\r
-       IPStackEvent_t xAskEvent;\r
-\r
-               if( prvValidSocket( pxSocket, FREERTOS_IPPROTO_TCP, pdTRUE ) == pdFALSE )\r
-               {\r
-                       /* Not a valid socket or wrong type */\r
-                       pxClientSocket = ( FreeRTOS_Socket_t * ) FREERTOS_INVALID_SOCKET;\r
-               }\r
-               else if( ( pxSocket->u.xTCP.bits.bReuseSocket == pdFALSE_UNSIGNED ) &&\r
-                                ( pxSocket->u.xTCP.ucTCPState != eTCP_LISTEN ) )\r
-               {\r
-                       /* Parent socket is not in listening mode */\r
-                       pxClientSocket = ( FreeRTOS_Socket_t * ) FREERTOS_INVALID_SOCKET;\r
-               }\r
-               else\r
-               {\r
-                       /* Loop will stop with breaks. */\r
-                       for( ; ; )\r
-                       {\r
-                               /* Is there a new client? */\r
-                               vTaskSuspendAll();\r
-                               {\r
-                                       if( pxSocket->u.xTCP.bits.bReuseSocket == pdFALSE_UNSIGNED )\r
-                                       {\r
-                                               pxClientSocket = pxSocket->u.xTCP.pxPeerSocket;\r
-                                       }\r
-                                       else\r
-                                       {\r
-                                               pxClientSocket = pxSocket;\r
-                                       }\r
-                                       if( pxClientSocket != NULL )\r
-                                       {\r
-                                               pxSocket->u.xTCP.pxPeerSocket = NULL;\r
-\r
-                                               /* Is it still not taken ? */\r
-                                               if( pxClientSocket->u.xTCP.bits.bPassAccept != pdFALSE_UNSIGNED )\r
-                                               {\r
-                                                       pxClientSocket->u.xTCP.bits.bPassAccept = pdFALSE_UNSIGNED;\r
-                                               }\r
-                                               else\r
-                                               {\r
-                                                       pxClientSocket = NULL;\r
-                                               }\r
-                                       }\r
-                               }\r
-                               xTaskResumeAll();\r
-\r
-                               if( pxClientSocket != NULL )\r
-                               {\r
-                                       if( pxAddress != NULL )\r
-                                       {\r
-                                               /* IP address of remote machine. */\r
-                                               pxAddress->sin_addr = FreeRTOS_ntohl( pxClientSocket->u.xTCP.ulRemoteIP );\r
-\r
-                                               /* Port on remote machine. */\r
-                                               pxAddress->sin_port = FreeRTOS_ntohs( pxClientSocket->u.xTCP.usRemotePort );\r
-                                       }\r
-                                       if( pxAddressLength != NULL )\r
-                                       {\r
-                                               *pxAddressLength = sizeof( *pxAddress );\r
-                                       }\r
-\r
-                                       if( pxSocket->u.xTCP.bits.bReuseSocket == pdFALSE_UNSIGNED )\r
-                                       {\r
-                                               xAsk = pdTRUE;\r
-                                       }\r
-                               }\r
-\r
-                               if( xAsk != pdFALSE )\r
-                               {\r
-                                       /* Ask to set an event in 'xEventGroup' as soon as a new\r
-                                       client gets connected for this listening socket. */\r
-                                       xAskEvent.eEventType = eTCPAcceptEvent;\r
-                                       xAskEvent.pvData = ( void * ) pxSocket;\r
-                                       xSendEventStructToIPTask( &xAskEvent, portMAX_DELAY );\r
-                               }\r
-\r
-                               if( pxClientSocket != NULL )\r
-                               {\r
-                                       break;\r
-                               }\r
-\r
-                               if( xTimed == pdFALSE )\r
-                               {\r
-                                       /* Only in the first round, check for non-blocking */\r
-                                       xRemainingTime = pxSocket->xReceiveBlockTime;\r
-                                       if( xRemainingTime == ( TickType_t ) 0 )\r
-                                       {\r
-                                               break;\r
-                                       }\r
-\r
-                                       /* Don't get here a second time */\r
-                                       xTimed = pdTRUE;\r
-\r
-                                       /* Fetch the current time */\r
-                                       vTaskSetTimeOutState( &xTimeOut );\r
-                               }\r
-\r
-                               /* Has the timeout been reached? */\r
-                               if( xTaskCheckForTimeOut( &xTimeOut, &xRemainingTime ) != pdFALSE )\r
-                               {\r
-                                       break;\r
-                               }\r
-\r
-                               /* Go sleeping until we get any down-stream event */\r
-                               xEventGroupWaitBits( pxSocket->xEventGroup, eSOCKET_ACCEPT, pdTRUE /*xClearOnExit*/, pdFALSE /*xWaitAllBits*/, xRemainingTime );\r
-                       }\r
-               }\r
-\r
-               return ( Socket_t ) pxClientSocket;\r
-       }\r
-#endif /* ipconfigUSE_TCP */\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_TCP == 1 )\r
-\r
-       /*\r
-        * Read incoming data from a TCP socket\r
-        * Only after the last byte has been read, a close error might be returned\r
-        */\r
-       BaseType_t FreeRTOS_recv( Socket_t xSocket, void *pvBuffer, size_t xBufferLength, BaseType_t xFlags )\r
-       {\r
-       BaseType_t xByteCount;\r
-       FreeRTOS_Socket_t *pxSocket = ( FreeRTOS_Socket_t * ) xSocket;\r
-       TickType_t xRemainingTime;\r
-       BaseType_t xTimed = pdFALSE;\r
-       TimeOut_t xTimeOut;\r
-       EventBits_t xEventBits = ( EventBits_t ) 0;\r
-\r
-               /* Check if the socket is valid, has type TCP and if it is bound to a\r
-               port. */\r
-               if( prvValidSocket( pxSocket, FREERTOS_IPPROTO_TCP, pdTRUE ) == pdFALSE )\r
-               {\r
-                       xByteCount = -pdFREERTOS_ERRNO_EINVAL;\r
-               }\r
-               else\r
-               {\r
-                       if( pxSocket->u.xTCP.rxStream != NULL )\r
-                       {\r
-                               xByteCount = ( BaseType_t )uxStreamBufferGetSize ( pxSocket->u.xTCP.rxStream );\r
-                       }\r
-                       else\r
-                       {\r
-                               xByteCount = 0;\r
-                       }\r
-\r
-                       while( xByteCount == 0 )\r
-                       {\r
-                               switch( pxSocket->u.xTCP.ucTCPState )\r
-                               {\r
-                               case eCLOSED:\r
-                               case eCLOSE_WAIT:       /* (server + client) waiting for a connection termination request from the local user. */\r
-                               case eCLOSING:          /* (server + client) waiting for a connection termination request acknowledgement from the remote TCP. */\r
-                                       if( pxSocket->u.xTCP.bits.bMallocError != pdFALSE_UNSIGNED )\r
-                                       {\r
-                                               /* The no-memory error has priority above the non-connected error.\r
-                                               Both are fatal and will elad to closing the socket. */\r
-                                               xByteCount = -pdFREERTOS_ERRNO_ENOMEM;\r
-                                       }\r
-                                       else\r
-                                       {\r
-                                               xByteCount = -pdFREERTOS_ERRNO_ENOTCONN;\r
-                                       }\r
-                                       /* Call continue to break out of the switch and also the while\r
-                                       loop. */\r
-                                       continue;\r
-                               default:\r
-                                       break;\r
-                               }\r
-\r
-                               if( xTimed == pdFALSE )\r
-                               {\r
-                                       /* Only in the first round, check for non-blocking. */\r
-                                       xRemainingTime = pxSocket->xReceiveBlockTime;\r
-\r
-                                       if( xRemainingTime == ( TickType_t ) 0 )\r
-                                       {\r
-                                               #if( ipconfigSUPPORT_SIGNALS != 0 )\r
-                                               {\r
-                                                       /* Just check for the interrupt flag. */\r
-                                                       xEventBits = xEventGroupWaitBits( pxSocket->xEventGroup, eSOCKET_INTR,\r
-                                                               pdTRUE /*xClearOnExit*/, pdFALSE /*xWaitAllBits*/, socketDONT_BLOCK );\r
-                                               }\r
-                                               #endif /* ipconfigSUPPORT_SIGNALS */\r
-                                               break;\r
-                                       }\r
-\r
-                                       if( ( xFlags & FREERTOS_MSG_DONTWAIT ) != 0 )\r
-                                       {\r
-                                               break;\r
-                                       }\r
-\r
-                                       /* Don't get here a second time. */\r
-                                       xTimed = pdTRUE;\r
-\r
-                                       /* Fetch the current time. */\r
-                                       vTaskSetTimeOutState( &xTimeOut );\r
-                               }\r
-\r
-                               /* Has the timeout been reached? */\r
-                               if( xTaskCheckForTimeOut( &xTimeOut, &xRemainingTime ) != pdFALSE )\r
-                               {\r
-                                       break;\r
-                               }\r
-\r
-                               /* Block until there is a down-stream event. */\r
-                               xEventBits = xEventGroupWaitBits( pxSocket->xEventGroup,\r
-                                       eSOCKET_RECEIVE | eSOCKET_CLOSED | eSOCKET_INTR,\r
-                                       pdTRUE /*xClearOnExit*/, pdFALSE /*xWaitAllBits*/, xRemainingTime );\r
-                               #if( ipconfigSUPPORT_SIGNALS != 0 )\r
-                               {\r
-                                       if( ( xEventBits & eSOCKET_INTR ) != 0u )\r
-                                       {\r
-                                               break;\r
-                                       }\r
-                               }\r
-                               #else\r
-                               {\r
-                                       ( void ) xEventBits;\r
-                               }\r
-                               #endif /* ipconfigSUPPORT_SIGNALS */\r
-\r
-                               if( pxSocket->u.xTCP.rxStream != NULL )\r
-                               {\r
-                                       xByteCount = ( BaseType_t ) uxStreamBufferGetSize ( pxSocket->u.xTCP.rxStream );\r
-                               }\r
-                               else\r
-                               {\r
-                                       xByteCount = 0;\r
-                               }\r
-                       }\r
-\r
-               #if( ipconfigSUPPORT_SIGNALS != 0 )\r
-                       if( ( xEventBits & eSOCKET_INTR ) != 0 )\r
-                       {\r
-                               if( ( xEventBits & ( eSOCKET_RECEIVE | eSOCKET_CLOSED ) ) != 0 )\r
-                               {\r
-                                       /* Shouldn't have cleared other flags. */\r
-                                       xEventBits &= ~eSOCKET_INTR;\r
-                                       xEventGroupSetBits( pxSocket->xEventGroup, xEventBits );\r
-                               }\r
-                               xByteCount = -pdFREERTOS_ERRNO_EINTR;\r
-                       }\r
-                       else\r
-               #endif /* ipconfigSUPPORT_SIGNALS */\r
-                       if( xByteCount > 0 )\r
-                       {\r
-                               if( ( xFlags & FREERTOS_ZERO_COPY ) == 0 )\r
-                               {\r
-                                       xByteCount = ( BaseType_t ) uxStreamBufferGet( pxSocket->u.xTCP.rxStream, 0ul, ( uint8_t * ) pvBuffer, ( size_t ) xBufferLength, ( xFlags & FREERTOS_MSG_PEEK ) != 0 );\r
-                                       if( pxSocket->u.xTCP.bits.bLowWater != pdFALSE_UNSIGNED )\r
-                                       {\r
-                                               /* We had reached the low-water mark, now see if the flag\r
-                                               can be cleared */\r
-                                               size_t uxFrontSpace = uxStreamBufferFrontSpace( pxSocket->u.xTCP.rxStream );\r
-\r
-                                               if( uxFrontSpace >= pxSocket->u.xTCP.uxEnoughSpace )\r
-                                               {\r
-                                                       pxSocket->u.xTCP.bits.bLowWater = pdFALSE_UNSIGNED;\r
-                                                       pxSocket->u.xTCP.bits.bWinChange = pdTRUE_UNSIGNED;\r
-                                                       pxSocket->u.xTCP.usTimeout = 1u; /* because bLowWater is cleared. */\r
-                                                       xSendEventToIPTask( eTCPTimerEvent );\r
-                                               }\r
-                                       }\r
-                               }\r
-                               else\r
-                               {\r
-                                       /* Zero-copy reception of data: pvBuffer is a pointer to a pointer. */\r
-                                       xByteCount = ( BaseType_t ) uxStreamBufferGetPtr( pxSocket->u.xTCP.rxStream, (uint8_t **)pvBuffer );\r
-                               }\r
-                       }\r
-               } /* prvValidSocket() */\r
-\r
-               return xByteCount;\r
-       }\r
-\r
-#endif /* ipconfigUSE_TCP */\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_TCP == 1 )\r
-\r
-       static int32_t prvTCPSendCheck( FreeRTOS_Socket_t *pxSocket, size_t xDataLength )\r
-       {\r
-       int32_t xResult = 1;\r
-\r
-               /* Is this a socket of type TCP and is it already bound to a port number ? */\r
-               if( prvValidSocket( pxSocket, FREERTOS_IPPROTO_TCP, pdTRUE ) == pdFALSE )\r
-               {\r
-                       xResult = -pdFREERTOS_ERRNO_EINVAL;\r
-               }\r
-               else if( pxSocket->u.xTCP.bits.bMallocError != pdFALSE_UNSIGNED )\r
-               {\r
-                       xResult = -pdFREERTOS_ERRNO_ENOMEM;\r
-               }\r
-               else if( pxSocket->u.xTCP.ucTCPState == eCLOSED ||\r
-                 pxSocket->u.xTCP.ucTCPState == eCLOSE_WAIT ||\r
-                 pxSocket->u.xTCP.ucTCPState == eCLOSING )\r
-               {\r
-                       xResult = -pdFREERTOS_ERRNO_ENOTCONN;\r
-               }\r
-               else if( pxSocket->u.xTCP.bits.bFinSent != pdFALSE_UNSIGNED )\r
-               {\r
-                       /* This TCP connection is closing already, the FIN flag has been sent.\r
-                       Maybe it is still delivering or receiving data.\r
-                       Return OK in order not to get closed/deleted too quickly */\r
-                       xResult = 0;\r
-               }\r
-               else if( xDataLength == 0ul )\r
-               {\r
-                       /* send() is being called to send zero bytes */\r
-                       xResult = 0;\r
-               }\r
-               else if( pxSocket->u.xTCP.txStream == NULL )\r
-               {\r
-                       /* Create the outgoing stream only when it is needed */\r
-                       prvTCPCreateStream( pxSocket, pdFALSE );\r
-\r
-                       if( pxSocket->u.xTCP.txStream == NULL )\r
-                       {\r
-                               xResult = -pdFREERTOS_ERRNO_ENOMEM;\r
-                       }\r
-               }\r
-\r
-               return xResult;\r
-       }\r
-\r
-#endif /* ipconfigUSE_TCP */\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_TCP == 1 )\r
-\r
-       /* Get a direct pointer to the circular transmit buffer.\r
-       '*pxLength' will contain the number of bytes that may be written. */\r
-       uint8_t *FreeRTOS_get_tx_head( Socket_t xSocket, BaseType_t *pxLength )\r
-       {\r
-    uint8_t *pucReturn = NULL;\r
-       FreeRTOS_Socket_t *pxSocket = ( FreeRTOS_Socket_t * ) xSocket;\r
-       StreamBuffer_t *pxBuffer = NULL;\r
-\r
-        *pxLength = 0;\r
-\r
-        /* Confirm that this is a TCP socket before dereferencing structure\r
-        member pointers. */\r
-        if( prvValidSocket( pxSocket, FREERTOS_IPPROTO_TCP, pdFALSE ) == pdTRUE )\r
-        {\r
-            pxBuffer = pxSocket->u.xTCP.txStream;\r
-            if( pxBuffer != NULL )\r
-            {\r
-            BaseType_t xSpace = ( BaseType_t )uxStreamBufferGetSpace( pxBuffer );\r
-            BaseType_t xRemain = ( BaseType_t )( pxBuffer->LENGTH - pxBuffer->uxHead );\r
-\r
-                *pxLength = FreeRTOS_min_BaseType( xSpace, xRemain );\r
-                pucReturn = pxBuffer->ucArray + pxBuffer->uxHead;\r
-            }\r
-               }\r
-\r
-               return pucReturn;\r
-       }\r
-#endif /* ipconfigUSE_TCP */\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_TCP == 1 )\r
-       /*\r
-        * Send data using a TCP socket.  It is not necessary to have the socket\r
-        * connected already.  Outgoing data will be stored and delivered as soon as\r
-        * the socket gets connected.\r
-        */\r
-       BaseType_t FreeRTOS_send( Socket_t xSocket, const void *pvBuffer, size_t uxDataLength, BaseType_t xFlags )\r
-       {\r
-       BaseType_t xByteCount;\r
-       BaseType_t xBytesLeft;\r
-       FreeRTOS_Socket_t *pxSocket = ( FreeRTOS_Socket_t * ) xSocket;\r
-       TickType_t xRemainingTime;\r
-       BaseType_t xTimed = pdFALSE;\r
-       TimeOut_t xTimeOut;\r
-       BaseType_t xCloseAfterSend;\r
-\r
-               /* Prevent compiler warnings about unused parameters.  The parameter\r
-               may be used in future versions. */\r
-               ( void ) xFlags;\r
-\r
-               xByteCount = ( BaseType_t ) prvTCPSendCheck( pxSocket, uxDataLength );\r
-\r
-               if( xByteCount > 0 )\r
-               {\r
-                       /* xBytesLeft is number of bytes to send, will count to zero. */\r
-                       xBytesLeft = ( BaseType_t ) uxDataLength;\r
-\r
-                       /* xByteCount is number of bytes that can be sent now. */\r
-                       xByteCount = ( BaseType_t ) uxStreamBufferGetSpace( pxSocket->u.xTCP.txStream );\r
-\r
-                       /* While there are still bytes to be sent. */\r
-                       while( xBytesLeft > 0 )\r
-                       {\r
-                               /* If txStream has space. */\r
-                               if( xByteCount > 0 )\r
-                               {\r
-                                       /* Don't send more than necessary. */\r
-                                       if( xByteCount > xBytesLeft )\r
-                                       {\r
-                                               xByteCount = xBytesLeft;\r
-                                       }\r
-\r
-                                       /* Is the close-after-send flag set and is this really the\r
-                                       last transmission? */\r
-                                       if( ( pxSocket->u.xTCP.bits.bCloseAfterSend != pdFALSE_UNSIGNED ) && ( xByteCount == xBytesLeft ) )\r
-                                       {\r
-                                               xCloseAfterSend = pdTRUE;\r
-                                       }\r
-                                       else\r
-                                       {\r
-                                               xCloseAfterSend = pdFALSE;\r
-                                       }\r
-\r
-                                       /* The flag 'bCloseAfterSend' can be set before sending data\r
-                                       using setsockopt()\r
-\r
-                                       When the last data packet is being sent out, a FIN flag will\r
-                                       be included to let the peer know that no more data is to be\r
-                                       expected.  The use of 'bCloseAfterSend' is not mandatory, it\r
-                                       is just a faster way of transferring files (e.g. when using\r
-                                       FTP). */\r
-                                       if( xCloseAfterSend != pdFALSE )\r
-                                       {\r
-                                               /* Now suspend the scheduler: sending the last data     and\r
-                                               setting bCloseRequested must be done together */\r
-                                               vTaskSuspendAll();\r
-                                               pxSocket->u.xTCP.bits.bCloseRequested = pdTRUE_UNSIGNED;\r
-                                       }\r
-\r
-                                       xByteCount = ( BaseType_t ) uxStreamBufferAdd( pxSocket->u.xTCP.txStream, 0ul, ( const uint8_t * ) pvBuffer, ( size_t ) xByteCount );\r
-\r
-                                       if( xCloseAfterSend != pdFALSE )\r
-                                       {\r
-                                               /* Now when the IP-task transmits the data, it will also\r
-                                               see     that bCloseRequested is true and include the FIN\r
-                                               flag to start closure of the connection. */\r
-                                               xTaskResumeAll();\r
-                                       }\r
-\r
-                                       /* Send a message to the IP-task so it can work on this\r
-                                       socket.  Data is sent, let the IP-task work on it. */\r
-                                       pxSocket->u.xTCP.usTimeout = 1u;\r
-\r
-                                       if( xIsCallingFromIPTask() == pdFALSE )\r
-                                       {\r
-                                               /* Only send a TCP timer event when not called from the\r
-                                               IP-task. */\r
-                                               xSendEventToIPTask( eTCPTimerEvent );\r
-                                       }\r
-\r
-                                       xBytesLeft -= xByteCount;\r
-\r
-                                       if( xBytesLeft == 0 )\r
-                                       {\r
-                                               break;\r
-                                       }\r
-\r
-                                       /* As there are still bytes left to be sent, increase the\r
-                                       data pointer. */\r
-                                       pvBuffer = ( void * ) ( ( ( const uint8_t * ) pvBuffer) + xByteCount );\r
-                               }\r
-\r
-                               /* Not all bytes have been sent. In case the socket is marked as\r
-                               blocking sleep for a while. */\r
-                               if( xTimed == pdFALSE )\r
-                               {\r
-                                       /* Only in the first round, check for non-blocking. */\r
-                                       xRemainingTime = pxSocket->xSendBlockTime;\r
-\r
-                                       #if( ipconfigUSE_CALLBACKS != 0 )\r
-                                       {\r
-                                               if( xIsCallingFromIPTask() != pdFALSE )\r
-                                               {\r
-                                                       /* If this send function is called from within a\r
-                                                       call-back handler it may not block, otherwise\r
-                                                       chances would be big to get a deadlock: the IP-task\r
-                                                       waiting for     itself. */\r
-                                                       xRemainingTime = ( TickType_t ) 0;\r
-                                               }\r
-                                       }\r
-                                       #endif /* ipconfigUSE_CALLBACKS */\r
-\r
-                                       if( xRemainingTime == ( TickType_t ) 0 )\r
-                                       {\r
-                                               break;\r
-                                       }\r
-\r
-                                       if( ( xFlags & FREERTOS_MSG_DONTWAIT ) != 0 )\r
-                                       {\r
-                                               break;\r
-                                       }\r
-\r
-                                       /* Don't get here a second time. */\r
-                                       xTimed = pdTRUE;\r
-\r
-                                       /* Fetch the current time. */\r
-                                       vTaskSetTimeOutState( &xTimeOut );\r
-                               }\r
-                               else\r
-                               {\r
-                                       /* Has the timeout been reached? */\r
-                                       if( xTaskCheckForTimeOut( &xTimeOut, &xRemainingTime ) != pdFALSE )\r
-                                       {\r
-                                               break;\r
-                                       }\r
-                               }\r
-\r
-                               /* Go sleeping until down-stream events are received. */\r
-                               xEventGroupWaitBits( pxSocket->xEventGroup, eSOCKET_SEND | eSOCKET_CLOSED,\r
-                                       pdTRUE /*xClearOnExit*/, pdFALSE /*xWaitAllBits*/, xRemainingTime );\r
-\r
-                               xByteCount = ( BaseType_t ) uxStreamBufferGetSpace( pxSocket->u.xTCP.txStream );\r
-                       }\r
-\r
-                       /* How much was actually sent? */\r
-                       xByteCount = ( ( BaseType_t ) uxDataLength ) - xBytesLeft;\r
-\r
-                       if( xByteCount == 0 )\r
-                       {\r
-                               if( pxSocket->u.xTCP.ucTCPState > eESTABLISHED )\r
-                               {\r
-                                       xByteCount = ( BaseType_t ) -pdFREERTOS_ERRNO_ENOTCONN;\r
-                               }\r
-                               else\r
-                               {\r
-                                       if( ipconfigTCP_MAY_LOG_PORT( pxSocket->usLocalPort ) != pdFALSE )\r
-                                       {\r
-                                               FreeRTOS_debug_printf( ( "FreeRTOS_send: %u -> %lxip:%d: no space\n",\r
-                                                       pxSocket->usLocalPort,\r
-                                                       pxSocket->u.xTCP.ulRemoteIP,\r
-                                                       pxSocket->u.xTCP.usRemotePort ) );\r
-                                       }\r
-\r
-                                       xByteCount = ( BaseType_t ) -pdFREERTOS_ERRNO_ENOSPC;\r
-                               }\r
-                       }\r
-               }\r
-\r
-               return xByteCount;\r
-       }\r
-\r
-#endif /* ipconfigUSE_TCP */\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_TCP == 1 )\r
-\r
-       /*\r
-        * Request to put a socket in listen mode\r
-        */\r
-       BaseType_t FreeRTOS_listen( Socket_t xSocket, BaseType_t xBacklog )\r
-       {\r
-       FreeRTOS_Socket_t *pxSocket;\r
-       BaseType_t xResult = 0;\r
-\r
-               pxSocket = ( FreeRTOS_Socket_t * ) xSocket;\r
-\r
-               /* listen() is allowed for a valid TCP socket in Closed state and already\r
-               bound. */\r
-               if( prvValidSocket( pxSocket, FREERTOS_IPPROTO_TCP, pdTRUE ) == pdFALSE )\r
-               {\r
-                       xResult = -pdFREERTOS_ERRNO_EOPNOTSUPP;\r
-               }\r
-               else if( ( pxSocket->u.xTCP.ucTCPState != eCLOSED ) && ( pxSocket->u.xTCP.ucTCPState != eCLOSE_WAIT ) )\r
-               {\r
-                       /* Socket is in a wrong state. */\r
-                       xResult = -pdFREERTOS_ERRNO_EOPNOTSUPP;\r
-               }\r
-               else\r
-               {\r
-                       /* Backlog is interpreted here as "the maximum number of child\r
-                       sockets. */\r
-                       pxSocket->u.xTCP.usBacklog = ( uint16_t )FreeRTOS_min_int32( ( int32_t ) 0xffff, ( int32_t ) xBacklog );\r
-\r
-                       /* This cleaning is necessary only if a listening socket is being\r
-                       reused as it might have had a previous connection. */\r
-                       if( pxSocket->u.xTCP.bits.bReuseSocket )\r
-                       {\r
-                               if( pxSocket->u.xTCP.rxStream != NULL )\r
-                               {\r
-                                       vStreamBufferClear( pxSocket->u.xTCP.rxStream );\r
-                               }\r
-\r
-                               if( pxSocket->u.xTCP.txStream != NULL )\r
-                               {\r
-                                       vStreamBufferClear( pxSocket->u.xTCP.txStream );\r
-                               }\r
-\r
-                               memset( pxSocket->u.xTCP.xPacket.u.ucLastPacket, '\0', sizeof( pxSocket->u.xTCP.xPacket.u.ucLastPacket ) );\r
-                               memset( &pxSocket->u.xTCP.xTCPWindow, '\0', sizeof( pxSocket->u.xTCP.xTCPWindow ) );\r
-                               memset( &pxSocket->u.xTCP.bits, '\0', sizeof( pxSocket->u.xTCP.bits ) );\r
-\r
-                               /* Now set the bReuseSocket flag again, because the bits have\r
-                               just been cleared. */\r
-                               pxSocket->u.xTCP.bits.bReuseSocket = pdTRUE_UNSIGNED;\r
-                       }\r
-\r
-                       vTCPStateChange( pxSocket, eTCP_LISTEN );\r
-               }\r
-\r
-               return xResult;\r
-       }\r
-\r
-#endif /* ipconfigUSE_TCP */\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_TCP == 1 )\r
-\r
-       /* shutdown - shut down part of a full-duplex connection */\r
-       BaseType_t FreeRTOS_shutdown( Socket_t xSocket, BaseType_t xHow )\r
-       {\r
-       FreeRTOS_Socket_t *pxSocket = ( FreeRTOS_Socket_t * ) xSocket;\r
-       BaseType_t xResult;\r
-\r
-               if( prvValidSocket( pxSocket, FREERTOS_IPPROTO_TCP, pdTRUE ) == pdFALSE )\r
-               {\r
-                       /*_RB_ Is this comment correct?  The socket is not of a type that\r
-                       supports the listen() operation. */\r
-                       xResult = -pdFREERTOS_ERRNO_EOPNOTSUPP;\r
-               }\r
-               else if ( pxSocket->u.xTCP.ucTCPState != eESTABLISHED )\r
-               {\r
-                       /*_RB_ Is this comment correct?  The socket is not of a type that\r
-                       supports the listen() operation. */\r
-                       xResult = -pdFREERTOS_ERRNO_EOPNOTSUPP;\r
-               }\r
-               else\r
-               {\r
-                       pxSocket->u.xTCP.bits.bUserShutdown = pdTRUE_UNSIGNED;\r
-\r
-                       /* Let the IP-task perform the shutdown of the connection. */\r
-                       pxSocket->u.xTCP.usTimeout = 1u;\r
-                       xSendEventToIPTask( eTCPTimerEvent );\r
-                       xResult = 0;\r
-               }\r
-               (void) xHow;\r
-\r
-               return xResult;\r
-       }\r
-\r
-#endif /* ipconfigUSE_TCP */\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_TCP == 1 )\r
-\r
-       /*\r
-        * A TCP timer has expired, now check all TCP sockets for:\r
-        * - Active connect\r
-        * - Send a delayed ACK\r
-        * - Send new data\r
-        * - Send a keep-alive packet\r
-        * - Check for timeout (in non-connected states only)\r
-        */\r
-       TickType_t xTCPTimerCheck( BaseType_t xWillSleep )\r
-       {\r
-       FreeRTOS_Socket_t *pxSocket;\r
-       TickType_t xShortest = pdMS_TO_TICKS( ( TickType_t ) ipTCP_TIMER_PERIOD_MS );\r
-       TickType_t xNow = xTaskGetTickCount();\r
-       static TickType_t xLastTime = 0u;\r
-       TickType_t xDelta = xNow - xLastTime;\r
-       ListItem_t* pxEnd = ( ListItem_t * ) listGET_END_MARKER( &xBoundTCPSocketsList );\r
-       ListItem_t *pxIterator = ( ListItem_t * ) listGET_HEAD_ENTRY( &xBoundTCPSocketsList );\r
-\r
-               xLastTime = xNow;\r
-\r
-               if( xDelta == 0u )\r
-               {\r
-                       xDelta = 1u;\r
-               }\r
-\r
-               while( pxIterator != pxEnd )\r
-               {\r
-                       pxSocket = ( FreeRTOS_Socket_t * )listGET_LIST_ITEM_OWNER( pxIterator );\r
-                       pxIterator = ( ListItem_t * ) listGET_NEXT( pxIterator );\r
-\r
-                       /* Sockets with 'tmout == 0' do not need any regular attention. */\r
-                       if( pxSocket->u.xTCP.usTimeout == 0u )\r
-                       {\r
-                               continue;\r
-                       }\r
-\r
-                       if( xDelta < ( TickType_t ) pxSocket->u.xTCP.usTimeout )\r
-                       {\r
-                               pxSocket->u.xTCP.usTimeout = ( uint16_t ) ( ( ( TickType_t ) pxSocket->u.xTCP.usTimeout ) - xDelta );\r
-                       }\r
-                       else\r
-                       {\r
-                       int rc ;\r
-                               pxSocket->u.xTCP.usTimeout = 0u;\r
-                               rc = xTCPSocketCheck( pxSocket );\r
-\r
-                               /* Within this function, the socket might want to send a delayed\r
-                               ack or send out data or whatever it needs to do. */\r
-                               if( rc < 0 )\r
-                               {\r
-                                       /* Continue because the socket was deleted. */\r
-                                       continue;\r
-                               }\r
-                       }\r
-\r
-                       /* In xEventBits the driver may indicate that the socket has\r
-                       important events for the user.  These are only done just before the\r
-                       IP-task goes to sleep. */\r
-                       if( pxSocket->xEventBits != 0u )\r
-                       {\r
-                               if( xWillSleep != pdFALSE )\r
-                               {\r
-                                       /* The IP-task is about to go to sleep, so messages can be\r
-                                       sent to the socket owners. */\r
-                                       vSocketWakeUpUser( pxSocket );\r
-                               }\r
-                               else\r
-                               {\r
-                                       /* Or else make sure this will be called again to wake-up\r
-                                       the sockets' owner. */\r
-                                       xShortest = ( TickType_t ) 0;\r
-                               }\r
-                       }\r
-\r
-                       if( ( pxSocket->u.xTCP.usTimeout != 0u ) && ( xShortest > ( TickType_t ) pxSocket->u.xTCP.usTimeout ) )\r
-                       {\r
-                               xShortest = ( TickType_t ) pxSocket->u.xTCP.usTimeout;\r
-                       }\r
-               }\r
-\r
-               return xShortest;\r
-       }\r
-\r
-#endif /* ipconfigUSE_TCP */\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_TCP == 1 )\r
-\r
-       /*\r
-        * TCP: as multiple sockets may be bound to the same local port number\r
-        * looking up a socket is a little more complex:\r
-        * Both a local port, and a remote port and IP address are being used\r
-        * For a socket in listening mode, the remote port and IP address are both 0\r
-        */\r
-       FreeRTOS_Socket_t *pxTCPSocketLookup( uint32_t ulLocalIP, UBaseType_t uxLocalPort, uint32_t ulRemoteIP, UBaseType_t uxRemotePort )\r
-       {\r
-       ListItem_t *pxIterator;\r
-       FreeRTOS_Socket_t *pxResult = NULL, *pxListenSocket = NULL;\r
-       MiniListItem_t *pxEnd = ( MiniListItem_t* )listGET_END_MARKER( &xBoundTCPSocketsList );\r
-\r
-               /* Parameter not yet supported. */\r
-               ( void ) ulLocalIP;\r
-\r
-               for( pxIterator  = ( ListItem_t * ) listGET_NEXT( pxEnd );\r
-                        pxIterator != ( ListItem_t * ) pxEnd;\r
-                        pxIterator  = ( ListItem_t * ) listGET_NEXT( pxIterator ) )\r
-               {\r
-                       FreeRTOS_Socket_t *pxSocket = ( FreeRTOS_Socket_t * ) listGET_LIST_ITEM_OWNER( pxIterator );\r
-\r
-                       if( pxSocket->usLocalPort == ( uint16_t ) uxLocalPort )\r
-                       {\r
-                               if( pxSocket->u.xTCP.ucTCPState == eTCP_LISTEN )\r
-                               {\r
-                                       /* If this is a socket listening to uxLocalPort, remember it\r
-                                       in case there is no perfect match. */\r
-                                       pxListenSocket = pxSocket;\r
-                               }\r
-                               else if( ( pxSocket->u.xTCP.usRemotePort == ( uint16_t ) uxRemotePort ) && ( pxSocket->u.xTCP.ulRemoteIP == ulRemoteIP ) )\r
-                               {\r
-                                       /* For sockets not in listening mode, find a match with\r
-                                       xLocalPort, ulRemoteIP AND xRemotePort. */\r
-                                       pxResult = pxSocket;\r
-                                       break;\r
-                               }\r
-                       }\r
-               }\r
-               if( pxResult == NULL )\r
-               {\r
-                       /* An exact match was not found, maybe a listening socket was\r
-                       found. */\r
-                       pxResult = pxListenSocket;\r
-               }\r
-\r
-               return pxResult;\r
-       }\r
-\r
-#endif /* ipconfigUSE_TCP */\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_TCP == 1 )\r
-\r
-    const struct xSTREAM_BUFFER *FreeRTOS_get_rx_buf( Socket_t xSocket )\r
-    {\r
-    FreeRTOS_Socket_t *pxSocket = ( FreeRTOS_Socket_t * )xSocket;\r
-    struct xSTREAM_BUFFER *pxReturn = NULL;\r
-\r
-        /* Confirm that this is a TCP socket before dereferencing structure\r
-        member pointers. */\r
-        if( prvValidSocket( pxSocket, FREERTOS_IPPROTO_TCP, pdFALSE ) == pdTRUE )\r
-        {\r
-            pxReturn = pxSocket->u.xTCP.rxStream;\r
-        }\r
-\r
-        return pxReturn;\r
-    }\r
-\r
-#endif /* ipconfigUSE_TCP */\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_TCP == 1 )\r
-\r
-       static StreamBuffer_t *prvTCPCreateStream ( FreeRTOS_Socket_t *pxSocket, BaseType_t xIsInputStream )\r
-       {\r
-       StreamBuffer_t *pxBuffer;\r
-       size_t uxLength;\r
-       size_t uxSize;\r
-\r
-               /* Now that a stream is created, the maximum size is fixed before\r
-               creation, it could still be changed with setsockopt(). */\r
-               if( xIsInputStream != pdFALSE )\r
-               {\r
-                       uxLength = pxSocket->u.xTCP.uxRxStreamSize;\r
-\r
-                       if( pxSocket->u.xTCP.uxLittleSpace == 0ul )\r
-                       {\r
-                               pxSocket->u.xTCP.uxLittleSpace  = ( sock20_PERCENT * pxSocket->u.xTCP.uxRxStreamSize ) / sock100_PERCENT;\r
-                       }\r
-\r
-                       if( pxSocket->u.xTCP.uxEnoughSpace == 0ul )\r
-                       {\r
-                               pxSocket->u.xTCP.uxEnoughSpace = ( sock80_PERCENT * pxSocket->u.xTCP.uxRxStreamSize ) / sock100_PERCENT;\r
-                       }\r
-               }\r
-               else\r
-               {\r
-                       uxLength = pxSocket->u.xTCP.uxTxStreamSize;\r
-               }\r
-\r
-               /* Add an extra 4 (or 8) bytes. */\r
-               uxLength += sizeof( size_t );\r
-\r
-               /* And make the length a multiple of sizeof( size_t ). */\r
-               uxLength &= ~( sizeof( size_t ) - 1u );\r
-\r
-               uxSize = sizeof( *pxBuffer ) - sizeof( pxBuffer->ucArray ) + uxLength;\r
-\r
-               pxBuffer = ( StreamBuffer_t * )pvPortMallocLarge( uxSize );\r
-\r
-               if( pxBuffer == NULL )\r
-               {\r
-                       FreeRTOS_debug_printf( ( "prvTCPCreateStream: malloc failed\n" ) );\r
-                       pxSocket->u.xTCP.bits.bMallocError = pdTRUE_UNSIGNED;\r
-                       vTCPStateChange( pxSocket, eCLOSE_WAIT );\r
-               }\r
-               else\r
-               {\r
-                       /* Clear the markers of the stream */\r
-                       memset( pxBuffer, '\0', sizeof( *pxBuffer ) - sizeof( pxBuffer->ucArray ) );\r
-                       pxBuffer->LENGTH = ( size_t ) uxLength ;\r
-\r
-                       if( xTCPWindowLoggingLevel != 0 )\r
-                       {\r
-                               FreeRTOS_debug_printf( ( "prvTCPCreateStream: %cxStream created %lu bytes (total %lu)\n", xIsInputStream ? 'R' : 'T', uxLength, uxSize ) );\r
-                       }\r
-\r
-                       if( xIsInputStream != 0 )\r
-                       {\r
-                               pxSocket->u.xTCP.rxStream = pxBuffer;\r
-                       }\r
-                       else\r
-                       {\r
-                               pxSocket->u.xTCP.txStream = pxBuffer;\r
-                       }\r
-               }\r
-\r
-               return pxBuffer;\r
-       }\r
-\r
-#endif /* ipconfigUSE_TCP */\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_TCP == 1 )\r
-\r
-       /*\r
-        * Add data to the RxStream.  When uxOffset > 0, data has come in out-of-order\r
-        * and will be put in front of the head so it can not be popped by the user.\r
-        */\r
-       int32_t lTCPAddRxdata( FreeRTOS_Socket_t *pxSocket, size_t uxOffset, const uint8_t *pcData, uint32_t ulByteCount )\r
-       {\r
-       StreamBuffer_t *pxStream = pxSocket->u.xTCP.rxStream;\r
-       int32_t xResult;\r
-       #if( ipconfigUSE_CALLBACKS == 1 )\r
-               BaseType_t bHasHandler = ipconfigIS_VALID_PROG_ADDRESS( pxSocket->u.xTCP.pxHandleReceive );\r
-               const uint8_t *pucBuffer = NULL;\r
-       #endif /* ipconfigUSE_CALLBACKS */\r
-\r
-               /* int32_t uxStreamBufferAdd( pxBuffer, uxOffset, pucData, aCount )\r
-               if( pucData != NULL ) copy data the the buffer\r
-               if( pucData == NULL ) no copying, just advance rxHead\r
-               if( uxOffset != 0 ) Just store data which has come out-of-order\r
-               if( uxOffset == 0 ) Also advance rxHead */\r
-               if( pxStream == NULL )\r
-               {\r
-                       pxStream = prvTCPCreateStream( pxSocket, pdTRUE );\r
-                       if( pxStream == NULL )\r
-                       {\r
-                               return -1;\r
-                       }\r
-               }\r
-\r
-               #if( ipconfigUSE_CALLBACKS == 1 )\r
-               {\r
-                       if( ( bHasHandler != pdFALSE ) && ( uxStreamBufferGetSize( pxStream ) == 0u ) && ( uxOffset == 0ul ) && ( pcData != NULL ) )\r
-                       {\r
-                               /* Data can be passed directly to the user */\r
-                               pucBuffer = pcData;\r
-\r
-                               /* Zero-copy for call-back: no need to add the bytes to the\r
-                               stream, only the pointer will be advanced by uxStreamBufferAdd(). */\r
-                               pcData = NULL;\r
-                       }\r
-               }\r
-               #endif /* ipconfigUSE_CALLBACKS */\r
-\r
-               xResult = ( int32_t ) uxStreamBufferAdd( pxStream, uxOffset, pcData, ( size_t ) ulByteCount );\r
-\r
-               #if( ipconfigHAS_DEBUG_PRINTF != 0 )\r
-               {\r
-                       if( xResult != ( int32_t ) ulByteCount )\r
-                       {\r
-                               FreeRTOS_debug_printf( ( "lTCPAddRxdata: at %ld: %ld/%lu bytes (tail %lu head %lu space %lu front %lu)\n",\r
-                                       uxOffset, xResult, ulByteCount,\r
-                                       pxStream->uxTail,\r
-                                       pxStream->uxHead,\r
-                                       uxStreamBufferFrontSpace( pxStream ),\r
-                                       pxStream->uxFront ) );\r
-                       }\r
-               }\r
-               #endif /* ipconfigHAS_DEBUG_PRINTF */\r
-\r
-               if( uxOffset == 0u )\r
-               {\r
-                       /* Data is being added to rxStream at the head (offs = 0) */\r
-                       #if( ipconfigUSE_CALLBACKS == 1 )\r
-                               if( bHasHandler != pdFALSE )\r
-                               {\r
-                                       /* The socket owner has installed an OnReceive handler. Pass the\r
-                                       Rx data, without copying from the rxStream, to the user. */\r
-                                       for (;;)\r
-                                       {\r
-                                               uint8_t *ucReadPtr = NULL;\r
-                                               uint32_t ulCount;\r
-                                               if( pucBuffer != NULL )\r
-                                               {\r
-                                                       ucReadPtr = ( uint8_t * )pucBuffer;\r
-                                                       ulCount = ulByteCount;\r
-                                                       pucBuffer = NULL;\r
-                                               }\r
-                                               else\r
-                                               {\r
-                                                       ulCount = ( uint32_t ) uxStreamBufferGetPtr( pxStream, &( ucReadPtr ) );\r
-                                               }\r
-\r
-                                               if( ulCount == 0ul )\r
-                                               {\r
-                                                       break;\r
-                                               }\r
-\r
-                                               pxSocket->u.xTCP.pxHandleReceive( ( Socket_t )pxSocket, ( void* )ucReadPtr, ( size_t ) ulCount );\r
-                                               uxStreamBufferGet( pxStream, 0ul, NULL, ( size_t ) ulCount, pdFALSE );\r
-                                       }\r
-                               } else\r
-                       #endif /* ipconfigUSE_CALLBACKS */\r
-                       {\r
-                               /* See if running out of space. */\r
-                               if( pxSocket->u.xTCP.bits.bLowWater == pdFALSE_UNSIGNED )\r
-                               {\r
-                                       size_t uxFrontSpace = uxStreamBufferFrontSpace( pxSocket->u.xTCP.rxStream );\r
-                                       if( uxFrontSpace <= pxSocket->u.xTCP.uxLittleSpace  )\r
-                                       {\r
-                                               pxSocket->u.xTCP.bits.bLowWater = pdTRUE_UNSIGNED;\r
-                                               pxSocket->u.xTCP.bits.bWinChange = pdTRUE_UNSIGNED;\r
-\r
-                                               /* bLowWater was reached, send the changed window size. */\r
-                                               pxSocket->u.xTCP.usTimeout = 1u;\r
-                                               xSendEventToIPTask( eTCPTimerEvent );\r
-                                       }\r
-                               }\r
-\r
-                               /* New incoming data is available, wake up the user.   User's\r
-                               semaphores will be set just before the IP-task goes asleep. */\r
-                               pxSocket->xEventBits |= eSOCKET_RECEIVE;\r
-\r
-                               #if ipconfigSUPPORT_SELECT_FUNCTION == 1\r
-                               {\r
-                                       if( ( pxSocket->xSelectBits & eSELECT_READ ) != 0 )\r
-                                       {\r
-                                               pxSocket->xEventBits |= ( eSELECT_READ << SOCKET_EVENT_BIT_COUNT );\r
-                                       }\r
-                               }\r
-                               #endif\r
-                       }\r
-               }\r
-\r
-               return xResult;\r
-       }\r
-\r
-#endif /* ipconfigUSE_TCP */\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_TCP == 1 )\r
-\r
-       /* Function to get the remote address and IP port */\r
-       BaseType_t FreeRTOS_GetRemoteAddress( Socket_t xSocket, struct freertos_sockaddr *pxAddress )\r
-       {\r
-       FreeRTOS_Socket_t *pxSocket = ( FreeRTOS_Socket_t * ) xSocket;\r
-       BaseType_t xResult;\r
-\r
-               if( pxSocket->ucProtocol != ( uint8_t ) FREERTOS_IPPROTO_TCP )\r
-               {\r
-                       xResult = -pdFREERTOS_ERRNO_EINVAL;\r
-               }\r
-               else\r
-               {\r
-                       /* BSD style sockets communicate IP and port addresses in network\r
-                       byte order.\r
-\r
-                       IP address of remote machine. */\r
-                       pxAddress->sin_addr = FreeRTOS_htonl ( pxSocket->u.xTCP.ulRemoteIP );\r
-\r
-                       /* Port on remote machine. */\r
-                       pxAddress->sin_port = FreeRTOS_htons ( pxSocket->u.xTCP.usRemotePort );\r
-\r
-                       xResult = ( BaseType_t ) sizeof( ( *pxAddress ) );\r
-               }\r
-\r
-               return xResult;\r
-       }\r
-\r
-#endif /* ipconfigUSE_TCP */\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_TCP == 1 )\r
-\r
-       /* Returns the number of bytes that may be added to txStream */\r
-       BaseType_t FreeRTOS_maywrite( Socket_t xSocket )\r
-       {\r
-       FreeRTOS_Socket_t *pxSocket = ( FreeRTOS_Socket_t * ) xSocket;\r
-       BaseType_t xResult;\r
-\r
-               if( pxSocket->ucProtocol != ( uint8_t ) FREERTOS_IPPROTO_TCP )\r
-               {\r
-                       xResult = -pdFREERTOS_ERRNO_EINVAL;\r
-               }\r
-               else if( pxSocket->u.xTCP.ucTCPState != eESTABLISHED )\r
-               {\r
-                       if( ( pxSocket->u.xTCP.ucTCPState < eCONNECT_SYN ) || ( pxSocket->u.xTCP.ucTCPState > eESTABLISHED ) )\r
-                       {\r
-                               xResult = -1;\r
-                       }\r
-                       else\r
-                       {\r
-                               xResult = 0;\r
-                       }\r
-               }\r
-               else if( pxSocket->u.xTCP.txStream == NULL )\r
-               {\r
-                       xResult = ( BaseType_t ) pxSocket->u.xTCP.uxTxStreamSize;\r
-               }\r
-               else\r
-               {\r
-                       xResult = ( BaseType_t ) uxStreamBufferGetSpace( pxSocket->u.xTCP.txStream );\r
-               }\r
-\r
-               return xResult;\r
-       }\r
-\r
-#endif /* ipconfigUSE_TCP */\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_TCP ==1 )\r
-\r
-       BaseType_t FreeRTOS_tx_space( Socket_t xSocket )\r
-       {\r
-       FreeRTOS_Socket_t *pxSocket = ( FreeRTOS_Socket_t * ) xSocket;\r
-       BaseType_t xReturn;\r
-\r
-               if( pxSocket->ucProtocol != ( uint8_t ) FREERTOS_IPPROTO_TCP )\r
-               {\r
-                       xReturn = -pdFREERTOS_ERRNO_EINVAL;\r
-               }\r
-               else\r
-               {\r
-                       if( pxSocket->u.xTCP.txStream != NULL )\r
-                       {\r
-                               xReturn = ( BaseType_t ) uxStreamBufferGetSpace ( pxSocket->u.xTCP.txStream );\r
-                       }\r
-                       else\r
-                       {\r
-                               xReturn = ( BaseType_t ) pxSocket->u.xTCP.uxTxStreamSize;\r
-                       }\r
-               }\r
-\r
-               return xReturn;\r
-       }\r
-\r
-#endif /* ipconfigUSE_TCP */\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_TCP == 1 )\r
-\r
-       BaseType_t FreeRTOS_tx_size( Socket_t xSocket )\r
-       {\r
-       FreeRTOS_Socket_t *pxSocket = ( FreeRTOS_Socket_t * ) xSocket;\r
-       BaseType_t xReturn;\r
-\r
-               if( pxSocket->ucProtocol != ( uint8_t ) FREERTOS_IPPROTO_TCP )\r
-               {\r
-                       xReturn = -pdFREERTOS_ERRNO_EINVAL;\r
-               }\r
-               else\r
-               {\r
-                       if( pxSocket->u.xTCP.txStream != NULL )\r
-                       {\r
-                               xReturn = ( BaseType_t ) uxStreamBufferGetSize ( pxSocket->u.xTCP.txStream );\r
-                       }\r
-                       else\r
-                       {\r
-                               xReturn = 0;\r
-                       }\r
-               }\r
-\r
-               return xReturn;\r
-       }\r
-\r
-#endif /* ipconfigUSE_TCP */\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_TCP == 1 )\r
-\r
-       /* Returns pdTRUE if TCP socket is connected. */\r
-       BaseType_t FreeRTOS_issocketconnected( Socket_t xSocket )\r
-       {\r
-       FreeRTOS_Socket_t *pxSocket = ( FreeRTOS_Socket_t * ) xSocket;\r
-       BaseType_t xReturn = pdFALSE;\r
-\r
-               if( pxSocket->ucProtocol != ( uint8_t ) FREERTOS_IPPROTO_TCP )\r
-               {\r
-                       xReturn = -pdFREERTOS_ERRNO_EINVAL;\r
-               }\r
-               else\r
-               {\r
-                       if( pxSocket->u.xTCP.ucTCPState >= eESTABLISHED )\r
-                       {\r
-                               if( pxSocket->u.xTCP.ucTCPState < eCLOSE_WAIT )\r
-                               {\r
-                                       xReturn = pdTRUE;\r
-                               }\r
-                       }\r
-               }\r
-\r
-               return xReturn;\r
-       }\r
-\r
-#endif /* ipconfigUSE_TCP */\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_TCP == 1 )\r
-\r
-       /* returns the actual size of MSS being used */\r
-       BaseType_t FreeRTOS_mss( Socket_t xSocket )\r
-       {\r
-       FreeRTOS_Socket_t *pxSocket = ( FreeRTOS_Socket_t * ) xSocket;\r
-       BaseType_t xReturn;\r
-\r
-               if( pxSocket->ucProtocol != ( uint8_t ) FREERTOS_IPPROTO_TCP )\r
-               {\r
-                       xReturn = -pdFREERTOS_ERRNO_EINVAL;\r
-               }\r
-               else\r
-               {\r
-                       /* usCurMSS is declared as uint16_t to save space.  FreeRTOS_mss()\r
-                       will often be used in signed native-size expressions cast it to\r
-                       BaseType_t. */\r
-                       xReturn = ( BaseType_t ) ( pxSocket->u.xTCP.usCurMSS );\r
-               }\r
-\r
-               return xReturn;\r
-       }\r
-\r
-#endif /* ipconfigUSE_TCP */\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_TCP == 1 )\r
-\r
-       /* HT: for internal use only: return the connection status */\r
-       BaseType_t FreeRTOS_connstatus( Socket_t xSocket )\r
-       {\r
-       FreeRTOS_Socket_t *pxSocket = ( FreeRTOS_Socket_t * ) xSocket;\r
-       BaseType_t xReturn;\r
-\r
-               if( pxSocket->ucProtocol != ( uint8_t ) FREERTOS_IPPROTO_TCP )\r
-               {\r
-                       xReturn = -pdFREERTOS_ERRNO_EINVAL;\r
-               }\r
-               else\r
-               {\r
-                       /* Cast it to BaseType_t */\r
-                       xReturn = ( BaseType_t ) ( pxSocket->u.xTCP.ucTCPState );\r
-               }\r
-\r
-               return xReturn;\r
-       }\r
-\r
-#endif /* ipconfigUSE_TCP */\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_TCP == 1 )\r
-\r
-       /*\r
-        * Returns the number of bytes which can be read.\r
-        */\r
-       BaseType_t FreeRTOS_rx_size( Socket_t xSocket )\r
-       {\r
-       FreeRTOS_Socket_t *pxSocket = ( FreeRTOS_Socket_t * ) xSocket;\r
-       BaseType_t xReturn;\r
-\r
-               if( pxSocket->ucProtocol != ( uint8_t ) FREERTOS_IPPROTO_TCP )\r
-               {\r
-                       xReturn = -pdFREERTOS_ERRNO_EINVAL;\r
-               }\r
-               else if( pxSocket->u.xTCP.rxStream != NULL )\r
-               {\r
-                       xReturn = ( BaseType_t ) uxStreamBufferGetSize( pxSocket->u.xTCP.rxStream );\r
-               }\r
-               else\r
-               {\r
-                       xReturn = 0;\r
-               }\r
-\r
-               return xReturn;\r
-       }\r
-\r
-#endif /* ipconfigUSE_TCP */\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_TCP == 1 )\r
-\r
-       void FreeRTOS_netstat( void )\r
-       {\r
-       IPStackEvent_t xAskEvent;\r
-\r
-               /* Ask the IP-task to call vTCPNetStat()\r
-                * to avoid accessing xBoundTCPSocketsList\r
-                */\r
-               xAskEvent.eEventType = eTCPNetStat;\r
-               xAskEvent.pvData = ( void * ) NULL;\r
-               xSendEventStructToIPTask( &xAskEvent, 1000u );\r
-       }\r
-\r
-#endif /* ipconfigUSE_TCP */\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ( ipconfigHAS_PRINTF != 0 ) && ( ipconfigUSE_TCP == 1 ) )\r
-\r
-       void vTCPNetStat( void )\r
-       {\r
-       /* Show a simple listing of all created sockets and their connections */\r
-       ListItem_t *pxIterator;\r
-       BaseType_t count = 0;\r
-\r
-               if( listLIST_IS_INITIALISED( &xBoundTCPSocketsList ) == pdFALSE )\r
-               {\r
-                       FreeRTOS_printf( ( "PLUS-TCP not initialized\n" ) );\r
-               }\r
-               else\r
-               {\r
-                       FreeRTOS_printf( ( "Prot Port IP-Remote    : Port  R/T Status      Alive  tmout Child\n" ) );\r
-                       for( pxIterator  = ( ListItem_t * ) listGET_HEAD_ENTRY( &xBoundTCPSocketsList );\r
-                                pxIterator != ( ListItem_t * ) listGET_END_MARKER( &xBoundTCPSocketsList );\r
-                                pxIterator  = ( ListItem_t * ) listGET_NEXT( pxIterator ) )\r
-                       {\r
-                               FreeRTOS_Socket_t *pxSocket = ( FreeRTOS_Socket_t * ) listGET_LIST_ITEM_OWNER( pxIterator );\r
-                               #if( ipconfigTCP_KEEP_ALIVE == 1 )\r
-                                       TickType_t age = xTaskGetTickCount() - pxSocket->u.xTCP.xLastAliveTime;\r
-                               #else\r
-                                       TickType_t age = 0u;\r
-                               #endif\r
-                               #if( ipconfigUSE_CALLBACKS == 1 )\r
-                                       void *pxHandleReceive = (void*)pxSocket->u.xTCP.pxHandleReceive;\r
-                               #else\r
-                                       void *pxHandleReceive = (void*)NULL;\r
-                               #endif\r
-                               char ucChildText[16] = "";\r
-                               if (pxSocket->u.xTCP.ucTCPState == eTCP_LISTEN)\r
-                               {\r
-                                       const int32_t copied_len = snprintf( ucChildText, sizeof( ucChildText ), " %d/%d",\r
-                                               ( int ) pxSocket->u.xTCP.usChildCount,\r
-                                               ( int ) pxSocket->u.xTCP.usBacklog);\r
-                                       /* These should never evaluate to false since the buffers are both shorter than 5-6 characters (<=65535) */\r
-                                       configASSERT( copied_len >= 0 );\r
-                                       configASSERT( copied_len < sizeof( ucChildText ) );\r
-                               }\r
-                               FreeRTOS_printf( ( "TCP %5d %-16lxip:%5d %d/%d %-13.13s %6lu %6u%s\n",\r
-                                       pxSocket->usLocalPort,          /* Local port on this machine */\r
-                                       pxSocket->u.xTCP.ulRemoteIP,    /* IP address of remote machine */\r
-                                       pxSocket->u.xTCP.usRemotePort,  /* Port on remote machine */\r
-                                       pxSocket->u.xTCP.rxStream != NULL,\r
-                                       pxSocket->u.xTCP.txStream != NULL,\r
-                                       FreeRTOS_GetTCPStateName( pxSocket->u.xTCP.ucTCPState ),\r
-                                       (age > 999999 ? 999999 : age), /* Format 'age' for printing */\r
-                                       pxSocket->u.xTCP.usTimeout,\r
-                                       ucChildText ) );\r
-                                       /* Remove compiler warnings if FreeRTOS_debug_printf() is not defined. */\r
-                                       ( void ) pxHandleReceive;\r
-                               count++;\r
-                       }\r
-\r
-                       for( pxIterator  = ( ListItem_t * ) listGET_HEAD_ENTRY( &xBoundUDPSocketsList );\r
-                                pxIterator != ( ListItem_t * ) listGET_END_MARKER( &xBoundUDPSocketsList );\r
-                                pxIterator  = ( ListItem_t * ) listGET_NEXT( pxIterator ) )\r
-                       {\r
-                               /* Local port on this machine */\r
-                               FreeRTOS_printf( ( "UDP Port %5u\n",\r
-                                       FreeRTOS_ntohs( listGET_LIST_ITEM_VALUE( pxIterator ) ) ) );\r
-                               count++;\r
-                       }\r
-\r
-                       FreeRTOS_printf( ( "FreeRTOS_netstat: %lu sockets %lu < %lu < %d buffers free\n",\r
-                               count,\r
-                               uxGetMinimumFreeNetworkBuffers( ),\r
-                               uxGetNumberOfFreeNetworkBuffers( ),\r
-                               ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ) );\r
-               }\r
-       }\r
-\r
-#endif /* ( ( ipconfigHAS_PRINTF != 0 ) && ( ipconfigUSE_TCP == 1 ) ) */\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigSUPPORT_SELECT_FUNCTION == 1 )\r
-\r
-       void vSocketSelect( SocketSelect_t *pxSocketSet )\r
-       {\r
-       BaseType_t xRound;\r
-       EventBits_t xSocketBits, xBitsToClear;\r
-       #if ipconfigUSE_TCP == 1\r
-               BaseType_t xLastRound = 1;\r
-       #else\r
-               BaseType_t xLastRound = 0;\r
-       #endif\r
-\r
-               /* These flags will be switched on after checking the socket status. */\r
-               EventBits_t xGroupBits = 0;\r
-               pxSocketSet->pxSocket = NULL;\r
-\r
-               for( xRound = 0; xRound <= xLastRound; xRound++ )\r
-               {\r
-                       const ListItem_t *pxIterator;\r
-                       const MiniListItem_t *pxEnd;\r
-                       if( xRound == 0 )\r
-                       {\r
-                               pxEnd = ( const MiniListItem_t* )listGET_END_MARKER( &xBoundUDPSocketsList );\r
-                       }\r
-               #if ipconfigUSE_TCP == 1\r
-                       else\r
-                       {\r
-                               pxEnd = ( const MiniListItem_t* )listGET_END_MARKER( &xBoundTCPSocketsList );\r
-                       }\r
-               #endif /* ipconfigUSE_TCP == 1 */\r
-                       for( pxIterator = ( const ListItem_t * ) ( listGET_NEXT( pxEnd ) );\r
-                                pxIterator != ( const ListItem_t * ) pxEnd;\r
-                                pxIterator = ( const ListItem_t * ) listGET_NEXT( pxIterator ) )\r
-                       {\r
-                               FreeRTOS_Socket_t *pxSocket = ( FreeRTOS_Socket_t * ) listGET_LIST_ITEM_OWNER( pxIterator );\r
-                               if( pxSocket->pxSocketSet != pxSocketSet )\r
-                               {\r
-                                       /* Socket does not belong to this select group. */\r
-                                       continue;\r
-                               }\r
-                               xSocketBits = 0;\r
-\r
-                               #if( ipconfigUSE_TCP == 1 )\r
-                                       if( pxSocket->ucProtocol == FREERTOS_IPPROTO_TCP )\r
-                                       {\r
-                                               /* Check if the socket has already been accepted by the\r
-                                               owner.  If not, it is useless to return it from a\r
-                                               select(). */\r
-                                               BaseType_t bAccepted = pdFALSE;\r
-\r
-                                               if( pxSocket->u.xTCP.bits.bPassQueued == pdFALSE_UNSIGNED )\r
-                                               {\r
-                                                       if( pxSocket->u.xTCP.bits.bPassAccept == pdFALSE_UNSIGNED )\r
-                                                       {\r
-                                                               bAccepted = pdTRUE;\r
-                                                       }\r
-                                               }\r
-\r
-                                               /* Is the set owner interested in READ events? */\r
-                                               if( ( pxSocket->xSelectBits & eSELECT_READ ) != 0 )\r
-                                               {\r
-                                                       if( pxSocket->u.xTCP.ucTCPState == eTCP_LISTEN )\r
-                                                       {\r
-                                                               if( ( pxSocket->u.xTCP.pxPeerSocket != NULL ) && ( pxSocket->u.xTCP.pxPeerSocket->u.xTCP.bits.bPassAccept != 0 ) )\r
-                                                               {\r
-                                                                       xSocketBits |= eSELECT_READ;\r
-                                                               }\r
-                                                       }\r
-                                                       else if( ( pxSocket->u.xTCP.bits.bReuseSocket != pdFALSE_UNSIGNED ) && ( pxSocket->u.xTCP.bits.bPassAccept != pdFALSE_UNSIGNED ) )\r
-                                                       {\r
-                                                               /* This socket has the re-use flag. After connecting it turns into\r
-                                                               aconnected socket. Set the READ event, so that accept() will be called. */\r
-                                                               xSocketBits |= eSELECT_READ;\r
-                                                       }\r
-                                                       else if( ( bAccepted != 0 ) && ( FreeRTOS_recvcount( pxSocket ) > 0 ) )\r
-                                                       {\r
-                                                               xSocketBits |= eSELECT_READ;\r
-                                                       }\r
-                                               }\r
-                                               /* Is the set owner interested in EXCEPTION events? */\r
-                                               if( ( pxSocket->xSelectBits & eSELECT_EXCEPT ) != 0 )\r
-                                               {\r
-                                                       if( ( pxSocket->u.xTCP.ucTCPState == eCLOSE_WAIT ) || ( pxSocket->u.xTCP.ucTCPState == eCLOSED ) )\r
-                                                       {\r
-                                                               xSocketBits |= eSELECT_EXCEPT;\r
-                                                       }\r
-                                               }\r
-\r
-                                               /* Is the set owner interested in WRITE events? */\r
-                                               if( ( pxSocket->xSelectBits & eSELECT_WRITE ) != 0 )\r
-                                               {\r
-                                                       BaseType_t bMatch = pdFALSE;\r
-\r
-                                                       if( bAccepted != 0 )\r
-                                                       {\r
-                                                               if( FreeRTOS_tx_space( pxSocket ) > 0 )\r
-                                                               {\r
-                                                                       bMatch = pdTRUE;\r
-                                                               }\r
-                                                       }\r
-\r
-                                                       if( bMatch == pdFALSE )\r
-                                                       {\r
-                                                               if( ( pxSocket->u.xTCP.bits.bConnPrepared != pdFALSE_UNSIGNED ) &&\r
-                                                                       ( pxSocket->u.xTCP.ucTCPState >= eESTABLISHED ) &&\r
-                                                                       ( pxSocket->u.xTCP.bits.bConnPassed == pdFALSE_UNSIGNED ) )\r
-                                                               {\r
-                                                                       pxSocket->u.xTCP.bits.bConnPassed = pdTRUE_UNSIGNED;\r
-                                                                       bMatch = pdTRUE;\r
-                                                               }\r
-                                                       }\r
-\r
-                                                       if( bMatch != pdFALSE )\r
-                                                       {\r
-                                                               xSocketBits |= eSELECT_WRITE;\r
-                                                       }\r
-                                               }\r
-                                       }\r
-                                       else\r
-                               #endif /* ipconfigUSE_TCP == 1 */\r
-                               {\r
-                                       /* Select events for UDP are simpler. */\r
-                                       if( ( ( pxSocket->xSelectBits & eSELECT_READ ) != 0 ) &&\r
-                                               ( listCURRENT_LIST_LENGTH( &( pxSocket->u.xUDP.xWaitingPacketsList ) ) > 0U ) )\r
-                                       {\r
-                                               xSocketBits |= eSELECT_READ;\r
-                                       }\r
-                                       /* The WRITE and EXCEPT bits are not used for UDP */\r
-                               }       /* if( pxSocket->ucProtocol == FREERTOS_IPPROTO_TCP ) */\r
-\r
-                               /* Each socket keeps its own event flags, which are looked-up\r
-                               by FreeRTOS_FD_ISSSET() */\r
-                               pxSocket->xSocketBits = xSocketBits;\r
-\r
-                               /* The ORed value will be used to set the bits in the event\r
-                               group. */\r
-                               xGroupBits |= xSocketBits;\r
-\r
-                       }       /* for( pxIterator ... ) */\r
-               }       /* for( xRound = 0; xRound <= xLastRound; xRound++ ) */\r
-\r
-               xBitsToClear = xEventGroupGetBits( pxSocketSet->xSelectGroup );\r
-\r
-               /* Now set the necessary bits. */\r
-               xBitsToClear = ( xBitsToClear & ~xGroupBits ) & eSELECT_ALL;\r
-\r
-               #if( ipconfigSUPPORT_SIGNALS != 0 )\r
-               {\r
-                       /* Maybe the socketset was signalled, but don't\r
-                       clear the 'eSELECT_INTR' bit here, as it will be used\r
-                       and cleared in FreeRTOS_select(). */\r
-                       xBitsToClear &= ( EventBits_t ) ~eSELECT_INTR;\r
-               }\r
-               #endif /* ipconfigSUPPORT_SIGNALS */\r
-\r
-               if( xBitsToClear != 0 )\r
-               {\r
-                       xEventGroupClearBits( pxSocketSet->xSelectGroup, xBitsToClear );\r
-               }\r
-\r
-               /* Now include eSELECT_CALL_IP to wakeup the caller. */\r
-               xEventGroupSetBits( pxSocketSet->xSelectGroup, xGroupBits | eSELECT_CALL_IP );\r
-       }\r
-\r
-#endif /* ipconfigSUPPORT_SELECT_FUNCTION == 1 */\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigSUPPORT_SIGNALS != 0 )\r
-\r
-       /* Send a signal to the task which reads from this socket. */\r
-       BaseType_t FreeRTOS_SignalSocket( Socket_t xSocket )\r
-       {\r
-       FreeRTOS_Socket_t *pxSocket = ( FreeRTOS_Socket_t * ) xSocket;\r
-       BaseType_t xReturn;\r
-\r
-               if( pxSocket == NULL )\r
-               {\r
-                       xReturn = -pdFREERTOS_ERRNO_EINVAL;\r
-               }\r
-               else\r
-       #if( ipconfigSUPPORT_SELECT_FUNCTION == 1 )\r
-               if( ( pxSocket->pxSocketSet != NULL ) && ( pxSocket->pxSocketSet->xSelectGroup != NULL ) )\r
-               {\r
-                       xEventGroupSetBits( pxSocket->pxSocketSet->xSelectGroup, eSELECT_INTR );\r
-                       xReturn = 0;\r
-               }\r
-               else\r
-       #endif /* ipconfigSUPPORT_SELECT_FUNCTION */\r
-               if( pxSocket->xEventGroup != NULL )\r
-               {\r
-                       xEventGroupSetBits( pxSocket->xEventGroup, eSOCKET_INTR );\r
-                       xReturn = 0;\r
-               }\r
-               else\r
-               {\r
-                       xReturn = -pdFREERTOS_ERRNO_EINVAL;\r
-               }\r
-\r
-               return xReturn;\r
-       }\r
-\r
-#endif /* ipconfigSUPPORT_SIGNALS */\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigSUPPORT_SIGNALS != 0 )\r
-\r
-       /* Send a signal to the task which reads from this socket (FromISR version). */\r
-       BaseType_t FreeRTOS_SignalSocketFromISR( Socket_t xSocket, BaseType_t *pxHigherPriorityTaskWoken )\r
-       {\r
-       FreeRTOS_Socket_t *pxSocket = ( FreeRTOS_Socket_t * ) xSocket;\r
-       BaseType_t xReturn;\r
-       IPStackEvent_t xEvent;\r
-       extern QueueHandle_t xNetworkEventQueue;\r
-\r
-               configASSERT( pxSocket != NULL );\r
-               configASSERT( pxSocket->ucProtocol == FREERTOS_IPPROTO_TCP );\r
-               configASSERT( pxSocket->xEventGroup );\r
-\r
-               xEvent.eEventType = eSocketSignalEvent;\r
-               xEvent.pvData = ( void * )pxSocket;\r
-\r
-               /* The IP-task will call FreeRTOS_SignalSocket for this socket. */\r
-               xReturn = xQueueSendToBackFromISR( xNetworkEventQueue, &xEvent, pxHigherPriorityTaskWoken );\r
-\r
-               return xReturn;\r
-       }\r
-\r
-#endif /* ipconfigSUPPORT_SIGNALS */\r
-/*-----------------------------------------------------------*/\r
+/*
+ * FreeRTOS+TCP V2.2.0
+ * 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
+ */
+
+/* Standard includes. */
+#include <stdint.h>
+#include <stdio.h>
+
+/* FreeRTOS includes. */
+#include "FreeRTOS.h"
+#include "task.h"
+#include "queue.h"
+#include "semphr.h"
+
+/* FreeRTOS+TCP includes. */
+#include "FreeRTOS_UDP_IP.h"
+#include "FreeRTOS_IP.h"
+#include "FreeRTOS_Sockets.h"
+#include "FreeRTOS_IP_Private.h"
+#include "FreeRTOS_DNS.h"
+#include "NetworkBufferManagement.h"
+
+/* The ItemValue of the sockets xBoundSocketListItem member holds the socket's
+port number. */
+#define socketSET_SOCKET_PORT( pxSocket, usPort ) listSET_LIST_ITEM_VALUE( ( &( ( pxSocket )->xBoundSocketListItem ) ), ( usPort ) )
+#define socketGET_SOCKET_PORT( pxSocket ) listGET_LIST_ITEM_VALUE( ( &( ( pxSocket )->xBoundSocketListItem ) ) )
+
+/* Test if a socket it bound which means it is either included in
+xBoundUDPSocketsList or xBoundTCPSocketsList */
+#define socketSOCKET_IS_BOUND( pxSocket )        ( listLIST_ITEM_CONTAINER( & ( pxSocket )->xBoundSocketListItem ) != NULL )
+
+/* If FreeRTOS_sendto() is called on a socket that is not bound to a port
+number then, depending on the FreeRTOSIPConfig.h settings, it might be that a
+port number is automatically generated for the socket.  Automatically generated
+port numbers will be between socketAUTO_PORT_ALLOCATION_START_NUMBER and
+0xffff.
+
+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 )
+       #define socketAUTO_PORT_ALLOCATION_START_NUMBER ( ( uint16_t ) 0x0400 )
+#endif
+
+#define socketAUTO_PORT_ALLOCATION_MAX_NUMBER   ( ( uint16_t ) 0xffff )
+
+/* The number of octets that make up an IP address. */
+#define socketMAX_IP_ADDRESS_OCTETS            4u
+
+/* A block time of 0 simply means "don't block". */
+#define socketDONT_BLOCK                               ( ( TickType_t ) 0 )
+
+#if( ( ipconfigUSE_TCP == 1 ) && !defined( ipTCP_TIMER_PERIOD_MS ) )
+       #define ipTCP_TIMER_PERIOD_MS   ( 1000 )
+#endif
+
+/* The next private port number to use when binding a client socket is stored in
+the usNextPortToUse[] array - which has either 1 or two indexes depending on
+whether TCP is being supported. */
+#if( ipconfigUSE_TCP == 1 )
+       #define socketPROTOCOL_COUNT            2
+#else
+       #define socketPROTOCOL_COUNT            1
+#endif
+
+/* Indexes into the usNextPortToUse[] array for UDP and TCP sockets
+respectively. */
+#define socketNEXT_UDP_PORT_NUMBER_INDEX       0
+#define socketNEXT_TCP_PORT_NUMBER_INDEX       1
+
+/* Some helper macro's for defining the 20/80 % limits of uxLittleSpace / uxEnoughSpace. */
+#define sock20_PERCENT                                         20
+#define sock80_PERCENT                                         80
+#define sock100_PERCENT                                                100
+
+
+/*-----------------------------------------------------------*/
+
+/*
+ * Allocate the next port number from the private allocation range.
+ * TCP and UDP each have their own series of port numbers
+ * ulProtocol is either ipPROTOCOL_UDP or ipPROTOCOL_TCP
+ */
+static uint16_t prvGetPrivatePortNumber( BaseType_t xProtocol );
+
+/*
+ * Return the list item from within pxList that has an item value of
+ * xWantedItemValue.  If there is no such list item return NULL.
+ */
+static const ListItem_t * pxListFindListItemWithValue( const List_t *pxList, TickType_t xWantedItemValue );
+
+/*
+ * Return pdTRUE only if pxSocket is valid and bound, as far as can be
+ * determined.
+ */
+static BaseType_t prvValidSocket( FreeRTOS_Socket_t *pxSocket, BaseType_t xProtocol, BaseType_t xIsBound );
+
+/*
+ * Before creating a socket, check the validity of the parameters used
+ * and find the size of the socket space, which is different for UDP and TCP
+ */
+static BaseType_t prvDetermineSocketSize( BaseType_t xDomain, BaseType_t xType, BaseType_t xProtocol, size_t *pxSocketSize );
+
+#if( ipconfigUSE_TCP == 1 )
+       /*
+        * Create a txStream or a rxStream, depending on the parameter 'xIsInputStream'
+        */
+       static StreamBuffer_t *prvTCPCreateStream (FreeRTOS_Socket_t *pxSocket, BaseType_t xIsInputStream );
+#endif /* ipconfigUSE_TCP == 1 */
+
+#if( ipconfigUSE_TCP == 1 )
+       /*
+        * Called from FreeRTOS_send(): some checks which will be done before
+        * sending a TCP packed.
+        */
+       static int32_t prvTCPSendCheck( FreeRTOS_Socket_t *pxSocket, size_t xDataLength );
+#endif /* ipconfigUSE_TCP */
+
+#if( ipconfigUSE_TCP == 1 )
+       /*
+        * When a child socket gets closed, make sure to update the child-count of the parent
+        */
+       static void prvTCPSetSocketCount( FreeRTOS_Socket_t *pxSocketToDelete );
+#endif  /* ipconfigUSE_TCP == 1 */
+
+#if( ipconfigUSE_TCP == 1 )
+       /*
+        * Called from FreeRTOS_connect(): make some checks and if allowed, send a
+        * message to the IP-task to start connecting to a remote socket
+        */
+       static BaseType_t prvTCPConnectStart( FreeRTOS_Socket_t *pxSocket, struct freertos_sockaddr *pxAddress );
+#endif /* ipconfigUSE_TCP */
+
+#if( ipconfigSUPPORT_SELECT_FUNCTION == 1 )
+
+       /* Executed by the IP-task, it will check all sockets belonging to a set */
+       static FreeRTOS_Socket_t *prvFindSelectedSocket( SocketSelect_t *pxSocketSet );
+
+#endif /* ipconfigSUPPORT_SELECT_FUNCTION == 1 */
+/*-----------------------------------------------------------*/
+
+/* The list that contains mappings between sockets and port numbers.  Accesses
+to this list must be protected by critical sections of one kind or another. */
+List_t xBoundUDPSocketsList;
+
+#if ipconfigUSE_TCP == 1
+       List_t xBoundTCPSocketsList;
+#endif /* ipconfigUSE_TCP == 1 */
+
+/*-----------------------------------------------------------*/
+
+static BaseType_t prvValidSocket( FreeRTOS_Socket_t *pxSocket, BaseType_t xProtocol, BaseType_t xIsBound )
+{
+BaseType_t xReturn = pdTRUE;
+
+       if( ( pxSocket == NULL ) || ( pxSocket == FREERTOS_INVALID_SOCKET ) )
+       {
+               xReturn = pdFALSE;
+       }
+       else if( ( xIsBound != pdFALSE ) && ( socketSOCKET_IS_BOUND( pxSocket ) == pdFALSE ) )
+       {
+               /* The caller expects the socket to be bound, but it isn't. */
+               xReturn = pdFALSE;
+       }
+       else if( pxSocket->ucProtocol != ( uint8_t ) xProtocol )
+       {
+               /* Socket has a wrong type (UDP != TCP). */
+               xReturn = pdFALSE;
+       }
+
+       return xReturn;
+}
+/*-----------------------------------------------------------*/
+
+BaseType_t vNetworkSocketsInit( void )
+{
+       vListInitialise( &xBoundUDPSocketsList );
+
+       #if( ipconfigUSE_TCP == 1 )
+       {
+               vListInitialise( &xBoundTCPSocketsList );
+       }
+       #endif  /* ipconfigUSE_TCP == 1 */
+
+       return pdTRUE;
+}
+/*-----------------------------------------------------------*/
+
+static BaseType_t prvDetermineSocketSize( BaseType_t xDomain, BaseType_t xType, BaseType_t xProtocol, size_t *pxSocketSize )
+{
+BaseType_t xReturn = pdPASS;
+FreeRTOS_Socket_t *pxSocket;
+
+       /* Asserts must not appear before it has been determined that the network
+       task is ready - otherwise the asserts will fail. */
+       if( xIPIsNetworkTaskReady() == pdFALSE )
+       {
+               xReturn = pdFAIL;
+       }
+       else
+       {
+               /* Only Ethernet is currently supported. */
+               configASSERT( xDomain == FREERTOS_AF_INET );
+
+               /* Check if the UDP socket-list has been initialised. */
+               configASSERT( listLIST_IS_INITIALISED( &xBoundUDPSocketsList ) );
+               #if( ipconfigUSE_TCP == 1 )
+               {
+                       /* Check if the TCP socket-list has been initialised. */
+                       configASSERT( listLIST_IS_INITIALISED( &xBoundTCPSocketsList ) );
+               }
+               #endif  /* ipconfigUSE_TCP == 1 */
+
+               if( xProtocol == FREERTOS_IPPROTO_UDP )
+               {
+                       if( xType != FREERTOS_SOCK_DGRAM )
+                       {
+                               xReturn = pdFAIL;
+                               configASSERT( xReturn );
+                       }
+                       /* In case a UDP socket is created, do not allocate space for TCP data. */
+                       *pxSocketSize = ( sizeof( *pxSocket ) - sizeof( pxSocket->u ) ) + sizeof( pxSocket->u.xUDP );
+               }
+#if( ipconfigUSE_TCP == 1 )
+               else if( xProtocol == FREERTOS_IPPROTO_TCP )
+               {
+                       if( xType != FREERTOS_SOCK_STREAM )
+                       {
+                               xReturn = pdFAIL;
+                               configASSERT( xReturn );
+                       }
+
+                       *pxSocketSize = ( sizeof( *pxSocket ) - sizeof( pxSocket->u ) ) + sizeof( pxSocket->u.xTCP );
+               }
+#endif  /* ipconfigUSE_TCP == 1 */
+               else
+               {
+                       xReturn = pdFAIL;
+                       configASSERT( xReturn );
+               }
+       }
+       /* In case configASSERT() is not used */
+       ( void )xDomain;
+       return xReturn;
+}
+/*-----------------------------------------------------------*/
+
+/* FreeRTOS_socket() allocates and initiates a socket */
+Socket_t FreeRTOS_socket( BaseType_t xDomain, BaseType_t xType, BaseType_t xProtocol )
+{
+FreeRTOS_Socket_t *pxSocket;
+size_t uxSocketSize;
+EventGroupHandle_t xEventGroup;
+Socket_t xReturn;
+
+       if( prvDetermineSocketSize( xDomain, xType, xProtocol, &uxSocketSize ) == pdFAIL )
+       {
+               xReturn = FREERTOS_INVALID_SOCKET;
+       }
+       else
+       {
+               /* Allocate the structure that will hold the socket information.  The
+               size depends on the type of socket: UDP sockets need less space.  A
+               define 'pvPortMallocSocket' will used to allocate the necessary space.
+               By default it points to the FreeRTOS function 'pvPortMalloc()'. */
+               pxSocket = ( FreeRTOS_Socket_t * ) pvPortMallocSocket( uxSocketSize );
+
+               if( pxSocket == NULL )
+               {
+                       pxSocket = ( FreeRTOS_Socket_t * ) FREERTOS_INVALID_SOCKET;
+                       iptraceFAILED_TO_CREATE_SOCKET();
+               }
+               else if( ( xEventGroup = xEventGroupCreate() ) == NULL )
+               {
+                       vPortFreeSocket( pxSocket );
+                       pxSocket = ( FreeRTOS_Socket_t * ) FREERTOS_INVALID_SOCKET;
+                       iptraceFAILED_TO_CREATE_EVENT_GROUP();
+               }
+               else
+               {
+                       /* Clear the entire space to avoid nulling individual entries */
+                       memset( pxSocket, '\0', uxSocketSize );
+
+                       pxSocket->xEventGroup = xEventGroup;
+
+                       /* Initialise the socket's members.  The semaphore will be created
+                       if the socket is bound to an address, for now the pointer to the
+                       semaphore is just set to NULL to show it has not been created. */
+                       if( xProtocol == FREERTOS_IPPROTO_UDP )
+                       {
+                               vListInitialise( &( pxSocket->u.xUDP.xWaitingPacketsList ) );
+
+                               #if( ipconfigUDP_MAX_RX_PACKETS > 0 )
+                               {
+                                       pxSocket->u.xUDP.uxMaxPackets = ( UBaseType_t ) ipconfigUDP_MAX_RX_PACKETS;
+                               }
+                               #endif /* ipconfigUDP_MAX_RX_PACKETS > 0 */
+                       }
+
+                       vListInitialiseItem( &( pxSocket->xBoundSocketListItem ) );
+                       listSET_LIST_ITEM_OWNER( &( pxSocket->xBoundSocketListItem ), ( void * ) pxSocket );
+
+                       pxSocket->xReceiveBlockTime = ipconfigSOCK_DEFAULT_RECEIVE_BLOCK_TIME;
+                       pxSocket->xSendBlockTime        = ipconfigSOCK_DEFAULT_SEND_BLOCK_TIME;
+                       pxSocket->ucSocketOptions   = ( uint8_t ) FREERTOS_SO_UDPCKSUM_OUT;
+                       pxSocket->ucProtocol            = ( uint8_t ) xProtocol; /* protocol: UDP or TCP */
+
+                       #if( ipconfigUSE_TCP == 1 )
+                       {
+                               if( xProtocol == FREERTOS_IPPROTO_TCP )
+                               {
+                                       /* StreamSize is expressed in number of bytes */
+                                       /* Round up buffer sizes to nearest multiple of MSS */
+                                       pxSocket->u.xTCP.usInitMSS      = pxSocket->u.xTCP.usCurMSS = ipconfigTCP_MSS;
+                                       pxSocket->u.xTCP.uxRxStreamSize = ( size_t ) ipconfigTCP_RX_BUFFER_LENGTH;
+                                       pxSocket->u.xTCP.uxTxStreamSize = ( size_t ) FreeRTOS_round_up( ipconfigTCP_TX_BUFFER_LENGTH, ipconfigTCP_MSS );
+                                       /* Use half of the buffer size of the TCP windows */
+                                       #if ( ipconfigUSE_TCP_WIN == 1 )
+                                       {
+                                               pxSocket->u.xTCP.uxRxWinSize  = FreeRTOS_max_uint32( 1UL, ( uint32_t ) ( pxSocket->u.xTCP.uxRxStreamSize / 2 ) / ipconfigTCP_MSS );
+                                               pxSocket->u.xTCP.uxTxWinSize  = FreeRTOS_max_uint32( 1UL, ( uint32_t ) ( pxSocket->u.xTCP.uxTxStreamSize / 2 ) / ipconfigTCP_MSS );
+                                       }
+                                       #else
+                                       {
+                                               pxSocket->u.xTCP.uxRxWinSize  = 1u;
+                                               pxSocket->u.xTCP.uxTxWinSize  = 1u;
+                                       }
+                                       #endif
+                                       /* The above values are just defaults, and can be overridden by
+                                       calling FreeRTOS_setsockopt().  No buffers will be allocated until a
+                                       socket is connected and data is exchanged. */
+                               }
+                       }
+                       #endif  /* ipconfigUSE_TCP == 1 */
+               }
+
+               xReturn = ( Socket_t ) pxSocket;
+       }
+
+       /* Remove compiler warnings in the case the configASSERT() is not defined. */
+       ( void ) xDomain;
+
+       return xReturn;
+}
+/*-----------------------------------------------------------*/
+
+#if( ipconfigSUPPORT_SELECT_FUNCTION == 1 )
+
+       SocketSet_t FreeRTOS_CreateSocketSet( void )
+       {
+       SocketSelect_t *pxSocketSet;
+
+               pxSocketSet = ( SocketSelect_t * ) pvPortMalloc( sizeof( *pxSocketSet ) );
+
+               if( pxSocketSet != NULL )
+               {
+                       memset( pxSocketSet, '\0', sizeof( *pxSocketSet ) );
+                       pxSocketSet->xSelectGroup = xEventGroupCreate();
+
+                       if( pxSocketSet->xSelectGroup == NULL )
+                       {
+                               vPortFree( ( void* ) pxSocketSet );
+                               pxSocketSet = NULL;
+                       }
+               }
+
+               return ( SocketSet_t ) pxSocketSet;
+       }
+
+#endif /* ipconfigSUPPORT_SELECT_FUNCTION == 1 */
+/*-----------------------------------------------------------*/
+
+#if( ipconfigSUPPORT_SELECT_FUNCTION == 1 )
+
+       void FreeRTOS_DeleteSocketSet( SocketSet_t xSocketSet )
+       {
+               SocketSelect_t *pxSocketSet = ( SocketSelect_t*) xSocketSet;
+
+               vEventGroupDelete( pxSocketSet->xSelectGroup );
+               vPortFree( ( void* ) pxSocketSet );
+       }
+
+#endif /* ipconfigSUPPORT_SELECT_FUNCTION == 1 */
+/*-----------------------------------------------------------*/
+
+#if( ipconfigSUPPORT_SELECT_FUNCTION == 1 )
+
+       /* Add a socket to a set */
+       void FreeRTOS_FD_SET( Socket_t xSocket, SocketSet_t xSocketSet, EventBits_t xSelectBits )
+       {
+       FreeRTOS_Socket_t *pxSocket = ( FreeRTOS_Socket_t * ) xSocket;
+       SocketSelect_t *pxSocketSet = ( SocketSelect_t * ) xSocketSet;
+
+               configASSERT( pxSocket != NULL );
+               configASSERT( xSocketSet != NULL );
+
+               /* Make sure we're not adding bits which are reserved for internal use,
+               such as eSELECT_CALL_IP */
+               pxSocket->xSelectBits |= ( xSelectBits & eSELECT_ALL );
+
+               if( ( pxSocket->xSelectBits & eSELECT_ALL ) != 0 )
+               {
+                       /* Adding a socket to a socket set. */
+                       pxSocket->pxSocketSet = ( SocketSelect_t * ) xSocketSet;
+
+                       /* Now have the IP-task call vSocketSelect() to see if the set contains
+                       any sockets which are 'ready' and set the proper bits.
+                       By setting 'bApiCalled = false', vSocketSelect() knows that it was
+                       not called from a user API */
+                       pxSocketSet->bApiCalled = pdFALSE;
+                       prvFindSelectedSocket( pxSocketSet );
+               }
+       }
+
+#endif /* ipconfigSUPPORT_SELECT_FUNCTION == 1 */
+/*-----------------------------------------------------------*/
+
+#if( ipconfigSUPPORT_SELECT_FUNCTION == 1 )
+       /* Clear select bits for a socket
+       If the mask becomes 0, remove the socket from the set */
+       void FreeRTOS_FD_CLR( Socket_t xSocket, SocketSet_t xSocketSet, EventBits_t xSelectBits )
+       {
+       FreeRTOS_Socket_t *pxSocket = ( FreeRTOS_Socket_t * ) xSocket;
+
+               configASSERT( pxSocket != NULL );
+               configASSERT( xSocketSet != NULL );
+
+               pxSocket->xSelectBits &= ~( xSelectBits & eSELECT_ALL );
+               if( ( pxSocket->xSelectBits & eSELECT_ALL ) != 0 )
+               {
+                       pxSocket->pxSocketSet = ( SocketSelect_t *)xSocketSet;
+               }
+               else
+               {
+                       /* disconnect it from the socket set */
+                       pxSocket->pxSocketSet = ( SocketSelect_t *)NULL;
+               }
+       }
+
+#endif /* ipconfigSUPPORT_SELECT_FUNCTION == 1 */
+/*-----------------------------------------------------------*/
+
+
+#if( ipconfigSUPPORT_SELECT_FUNCTION == 1 )
+
+       /* Test if a socket belongs to a socket-set */
+       EventBits_t FreeRTOS_FD_ISSET( Socket_t xSocket, SocketSet_t xSocketSet )
+       {
+       EventBits_t xReturn;
+       FreeRTOS_Socket_t *pxSocket = ( FreeRTOS_Socket_t * ) xSocket;
+
+               configASSERT( pxSocket != NULL );
+               configASSERT( xSocketSet != NULL );
+
+               if( xSocketSet == ( SocketSet_t ) pxSocket->pxSocketSet )
+               {
+                       /* Make sure we're not adding bits which are reserved for internal
+                       use. */
+                       xReturn = pxSocket->xSocketBits & eSELECT_ALL;
+               }
+               else
+               {
+                       xReturn = 0;
+               }
+
+               return xReturn;
+       }
+
+#endif /* ipconfigSUPPORT_SELECT_FUNCTION == 1 */
+/*-----------------------------------------------------------*/
+
+#if( ipconfigSUPPORT_SELECT_FUNCTION == 1 )
+
+       /* The select() statement: wait for an event to occur on any of the sockets
+       included in a socket set */
+       BaseType_t FreeRTOS_select( SocketSet_t xSocketSet, TickType_t xBlockTimeTicks )
+       {
+       TimeOut_t xTimeOut;
+       TickType_t xRemainingTime;
+       SocketSelect_t *pxSocketSet = ( SocketSelect_t*) xSocketSet;
+       BaseType_t xResult;
+
+               configASSERT( xSocketSet != NULL );
+
+               /* Only in the first round, check for non-blocking */
+               xRemainingTime = xBlockTimeTicks;
+
+               /* Fetch the current time */
+               vTaskSetTimeOutState( &xTimeOut );
+
+               for( ;; )
+               {
+                       /* Find a socket which might have triggered the bit
+                       This function might return immediately or block for a limited time */
+                       xResult = ( BaseType_t ) xEventGroupWaitBits( pxSocketSet->xSelectGroup, eSELECT_ALL, pdFALSE, pdFALSE, xRemainingTime );
+
+                       #if( ipconfigSUPPORT_SIGNALS != 0 )
+                       {
+                               if( ( xResult & eSELECT_INTR ) != 0u )
+                               {
+                                       xEventGroupClearBits( pxSocketSet->xSelectGroup, eSELECT_INTR );
+                                       FreeRTOS_debug_printf( ( "FreeRTOS_select: interrupted\n" ) );
+                                       break;
+                               }
+                       }
+                       #endif /* ipconfigSUPPORT_SIGNALS */
+
+                       /* Have the IP-task find the socket which had an event */
+                       pxSocketSet->bApiCalled = pdTRUE;
+                       prvFindSelectedSocket( pxSocketSet );
+
+                       xResult = ( BaseType_t ) xEventGroupGetBits( pxSocketSet->xSelectGroup );
+
+                       if( xResult != 0 )
+                       {
+                               break;
+                       }
+
+                       /* Has the timeout been reached? */
+                       if( xTaskCheckForTimeOut( &xTimeOut, &xRemainingTime ) != pdFALSE )
+                       {
+                               break;
+                       }
+               }
+
+               return xResult;
+       }
+
+#endif /* ipconfigSUPPORT_SELECT_FUNCTION */
+/*-----------------------------------------------------------*/
+
+#if( ipconfigSUPPORT_SELECT_FUNCTION == 1 )
+
+       /* Send a message to the IP-task to have it check all sockets belonging to
+       'pxSocketSet' */
+       static FreeRTOS_Socket_t *prvFindSelectedSocket( SocketSelect_t *pxSocketSet )
+       {
+       IPStackEvent_t xSelectEvent;
+       FreeRTOS_Socket_t *xReturn;
+
+               xSelectEvent.eEventType = eSocketSelectEvent;
+               xSelectEvent.pvData = ( void * ) pxSocketSet;
+
+               /* while the IP-task works on the request, the API will block on
+               'eSELECT_CALL_IP'.  So clear it first. */
+               xEventGroupClearBits( pxSocketSet->xSelectGroup, eSELECT_CALL_IP );
+
+               /* Now send the socket select event */
+               if( xSendEventStructToIPTask( &xSelectEvent, ( TickType_t ) portMAX_DELAY ) == pdFAIL )
+               {
+                       /* Oops, we failed to wake-up the IP task. No use to wait for it. */
+                       FreeRTOS_debug_printf( ( "prvFindSelectedSocket: failed\n" ) );
+                       xReturn = NULL;
+               }
+               else
+               {
+                       /* As soon as the IP-task is ready, it will set 'eSELECT_CALL_IP' to
+                       wakeup the calling API */
+                       xEventGroupWaitBits( pxSocketSet->xSelectGroup, eSELECT_CALL_IP, pdTRUE, pdFALSE, portMAX_DELAY );
+
+                       /* Return 'pxSocket' which is set by the IP-task */
+                       xReturn = pxSocketSet->pxSocket;
+               }
+
+               return xReturn;
+       }
+
+#endif /* ipconfigSUPPORT_SELECT_FUNCTION == 1 */
+/*-----------------------------------------------------------*/
+
+/*
+ * FreeRTOS_recvfrom: receive data from a bound socket
+ * In this library, the function can only be used with connectionsless sockets
+ * (UDP)
+ */
+int32_t FreeRTOS_recvfrom( Socket_t xSocket, void *pvBuffer, size_t xBufferLength, BaseType_t xFlags, struct freertos_sockaddr *pxSourceAddress, socklen_t *pxSourceAddressLength )
+{
+BaseType_t lPacketCount = 0;
+NetworkBufferDescriptor_t *pxNetworkBuffer;
+FreeRTOS_Socket_t *pxSocket = ( FreeRTOS_Socket_t * ) xSocket;
+TickType_t xRemainingTime = ( TickType_t ) 0; /* Obsolete assignment, but some compilers output a warning if its not done. */
+BaseType_t xTimed = pdFALSE;
+TimeOut_t xTimeOut;
+int32_t lReturn;
+EventBits_t xEventBits = ( EventBits_t ) 0;
+
+       if( prvValidSocket( pxSocket, FREERTOS_IPPROTO_UDP, pdTRUE ) == pdFALSE )
+       {
+               return -pdFREERTOS_ERRNO_EINVAL;
+       }
+
+       lPacketCount = ( BaseType_t ) listCURRENT_LIST_LENGTH( &( pxSocket->u.xUDP.xWaitingPacketsList ) );
+
+       /* The function prototype is designed to maintain the expected Berkeley
+       sockets standard, but this implementation does not use all the parameters. */
+       ( void ) pxSourceAddressLength;
+
+       while( lPacketCount == 0 )
+       {
+               if( xTimed == pdFALSE )
+               {
+                       /* Check to see if the socket is non blocking on the first
+                       iteration.  */
+                       xRemainingTime = pxSocket->xReceiveBlockTime;
+
+                       if( xRemainingTime == ( TickType_t ) 0 )
+                       {
+                               #if( ipconfigSUPPORT_SIGNALS != 0 )
+                               {
+                                       /* Just check for the interrupt flag. */
+                                       xEventBits = xEventGroupWaitBits( pxSocket->xEventGroup, eSOCKET_INTR,
+                                               pdTRUE /*xClearOnExit*/, pdFALSE /*xWaitAllBits*/, socketDONT_BLOCK );
+                               }
+                               #endif /* ipconfigSUPPORT_SIGNALS */
+                               break;
+                       }
+
+                       if( ( xFlags & FREERTOS_MSG_DONTWAIT ) != 0 )
+                       {
+                               break;
+                       }
+
+                       /* To ensure this part only executes once. */
+                       xTimed = pdTRUE;
+
+                       /* Fetch the current time. */
+                       vTaskSetTimeOutState( &xTimeOut );
+               }
+
+               /* Wait for arrival of data.  While waiting, the IP-task may set the
+               'eSOCKET_RECEIVE' bit in 'xEventGroup', if it receives data for this
+               socket, thus unblocking this API call. */
+               xEventBits = xEventGroupWaitBits( pxSocket->xEventGroup, eSOCKET_RECEIVE | eSOCKET_INTR,
+                       pdTRUE /*xClearOnExit*/, pdFALSE /*xWaitAllBits*/, xRemainingTime );
+
+               #if( ipconfigSUPPORT_SIGNALS != 0 )
+               {
+                       if( ( xEventBits & eSOCKET_INTR ) != 0 )
+                       {
+                               if( ( xEventBits & eSOCKET_RECEIVE ) != 0 )
+                               {
+                                       /* Shouldn't have cleared the eSOCKET_RECEIVE flag. */
+                                       xEventGroupSetBits( pxSocket->xEventGroup, eSOCKET_RECEIVE );
+                               }
+                               break;
+                       }
+               }
+               #else
+               {
+                       ( void ) xEventBits;
+               }
+               #endif /* ipconfigSUPPORT_SIGNALS */
+
+               lPacketCount = ( BaseType_t ) listCURRENT_LIST_LENGTH( &( pxSocket->u.xUDP.xWaitingPacketsList ) );
+
+               if( lPacketCount != 0 )
+               {
+                       break;
+               }
+
+               /* Has the timeout been reached ? */
+               if( xTaskCheckForTimeOut( &xTimeOut, &xRemainingTime ) )
+               {
+                       break;
+               }
+       } /* while( lPacketCount == 0 ) */
+
+       if( lPacketCount != 0 )
+       {
+               taskENTER_CRITICAL();
+               {
+                       /* The owner of the list item is the network buffer. */
+                       pxNetworkBuffer = ( NetworkBufferDescriptor_t * ) listGET_OWNER_OF_HEAD_ENTRY( &( pxSocket->u.xUDP.xWaitingPacketsList ) );
+
+                       if( ( xFlags & FREERTOS_MSG_PEEK ) == 0 )
+                       {
+                               /* Remove the network buffer from the list of buffers waiting to
+                               be processed by the socket. */
+                               uxListRemove( &( pxNetworkBuffer->xBufferListItem ) );
+                       }
+               }
+               taskEXIT_CRITICAL();
+
+               /* The returned value is the length of the payload data, which is
+               calculated at the total packet size minus the headers.
+               The validity of `xDataLength` prvProcessIPPacket has been confirmed
+               in 'prvProcessIPPacket()'. */
+               lReturn = ( int32_t ) ( pxNetworkBuffer->xDataLength - sizeof( UDPPacket_t ) );
+
+               if( pxSourceAddress != NULL )
+               {
+                       pxSourceAddress->sin_port = pxNetworkBuffer->usPort;
+                       pxSourceAddress->sin_addr = pxNetworkBuffer->ulIPAddress;
+               }
+
+               if( ( xFlags & FREERTOS_ZERO_COPY ) == 0 )
+               {
+                       /* The zero copy flag is not set.  Truncate the length if it won't
+                       fit in the provided buffer. */
+                       if( lReturn > ( int32_t ) xBufferLength )
+                       {
+                               iptraceRECVFROM_DISCARDING_BYTES( ( xBufferLength - lReturn ) );
+                               lReturn = ( int32_t )xBufferLength;
+                       }
+
+                       /* Copy the received data into the provided buffer, then release the
+                       network buffer. */
+                       memcpy( pvBuffer, ( void * ) &( pxNetworkBuffer->pucEthernetBuffer[ ipUDP_PAYLOAD_OFFSET_IPv4 ] ), ( size_t )lReturn );
+
+                       if( ( xFlags & FREERTOS_MSG_PEEK ) == 0 )
+                       {
+                               vReleaseNetworkBufferAndDescriptor( pxNetworkBuffer );
+                       }
+               }
+               else
+               {
+                       /* The zero copy flag was set.  pvBuffer is not a buffer into which
+                       the received data can be copied, but a pointer that must be set to
+                       point to the buffer in which the received data has already been
+                       placed. */
+                       *( ( void** ) pvBuffer ) = ( void * ) ( &( pxNetworkBuffer->pucEthernetBuffer[ ipUDP_PAYLOAD_OFFSET_IPv4 ] ) );
+               }
+
+       }
+#if( ipconfigSUPPORT_SIGNALS != 0 )
+       else if( ( xEventBits & eSOCKET_INTR ) != 0 )
+       {
+               lReturn = -pdFREERTOS_ERRNO_EINTR;
+               iptraceRECVFROM_INTERRUPTED();
+       }
+#endif /* ipconfigSUPPORT_SIGNALS */
+       else
+       {
+               lReturn = -pdFREERTOS_ERRNO_EWOULDBLOCK;
+               iptraceRECVFROM_TIMEOUT();
+       }
+
+       return lReturn;
+}
+/*-----------------------------------------------------------*/
+
+int32_t FreeRTOS_sendto( Socket_t xSocket, const void *pvBuffer, size_t xTotalDataLength, BaseType_t xFlags, const struct freertos_sockaddr *pxDestinationAddress, socklen_t xDestinationAddressLength )
+{
+NetworkBufferDescriptor_t *pxNetworkBuffer;
+IPStackEvent_t xStackTxEvent = { eStackTxEvent, NULL };
+TimeOut_t xTimeOut;
+TickType_t xTicksToWait;
+int32_t lReturn = 0;
+FreeRTOS_Socket_t *pxSocket;
+
+       pxSocket = ( FreeRTOS_Socket_t * ) xSocket;
+
+       /* The function prototype is designed to maintain the expected Berkeley
+       sockets standard, but this implementation does not use all the
+       parameters. */
+       ( void ) xDestinationAddressLength;
+       configASSERT( pvBuffer );
+
+       if( xTotalDataLength <= ( size_t ) ipMAX_UDP_PAYLOAD_LENGTH )
+       {
+               /* If the socket is not already bound to an address, bind it now.
+               Passing NULL as the address parameter tells FreeRTOS_bind() to select
+               the address to bind to. */
+               if( ( socketSOCKET_IS_BOUND( pxSocket ) != pdFALSE ) ||
+                       ( FreeRTOS_bind( xSocket, NULL, 0u ) == 0 ) )
+               {
+                       xTicksToWait = pxSocket->xSendBlockTime;
+
+                       #if( ipconfigUSE_CALLBACKS != 0 )
+                       {
+                               if( xIsCallingFromIPTask() != pdFALSE )
+                               {
+                                       /* If this send function is called from within a call-back
+                                       handler it may not block, otherwise chances would be big to
+                                       get a deadlock: the IP-task waiting for itself. */
+                                       xTicksToWait = ( TickType_t )0;
+                               }
+                       }
+                       #endif /* ipconfigUSE_CALLBACKS */
+
+                       if( ( xFlags & FREERTOS_MSG_DONTWAIT ) != 0 )
+                       {
+                               xTicksToWait = ( TickType_t ) 0;
+                       }
+
+                       if( ( xFlags & FREERTOS_ZERO_COPY ) == 0 )
+                       {
+                               /* Zero copy is not set, so obtain a network buffer into
+                               which the payload will be copied. */
+                               vTaskSetTimeOutState( &xTimeOut );
+
+                               /* Block until a buffer becomes available, or until a
+                               timeout has been reached */
+                               pxNetworkBuffer = pxGetNetworkBufferWithDescriptor( xTotalDataLength + sizeof( UDPPacket_t ), xTicksToWait );
+
+                               if( pxNetworkBuffer != NULL )
+                               {
+                                       memcpy( ( void * ) &( pxNetworkBuffer->pucEthernetBuffer[ ipUDP_PAYLOAD_OFFSET_IPv4 ] ), ( void * ) pvBuffer, xTotalDataLength );
+
+                                       if( xTaskCheckForTimeOut( &xTimeOut, &xTicksToWait ) == pdTRUE )
+                                       {
+                                               /* The entire block time has been used up. */
+                                               xTicksToWait = ( TickType_t ) 0;
+                                       }
+                               }
+                       }
+                       else
+                       {
+                               /* When zero copy is used, pvBuffer is a pointer to the
+                               payload of a buffer that has already been obtained from the
+                               stack.  Obtain the network buffer pointer from the buffer. */
+                               pxNetworkBuffer = pxUDPPayloadBuffer_to_NetworkBuffer( (void*)pvBuffer );
+                       }
+
+                       if( pxNetworkBuffer != NULL )
+                       {
+                               /* xDataLength is the size of the total packet, including the Ethernet header. */
+                               pxNetworkBuffer->xDataLength = xTotalDataLength + sizeof( UDPPacket_t );
+                               pxNetworkBuffer->usPort = pxDestinationAddress->sin_port;
+                               pxNetworkBuffer->usBoundPort = ( uint16_t ) socketGET_SOCKET_PORT( pxSocket );
+                               pxNetworkBuffer->ulIPAddress = pxDestinationAddress->sin_addr;
+
+                               /* The socket options are passed to the IP layer in the
+                               space that will eventually get used by the Ethernet header. */
+                               pxNetworkBuffer->pucEthernetBuffer[ ipSOCKET_OPTIONS_OFFSET ] = pxSocket->ucSocketOptions;
+
+                               /* Tell the networking task that the packet needs sending. */
+                               xStackTxEvent.pvData = pxNetworkBuffer;
+
+                               /* Ask the IP-task to send this packet */
+                               if( xSendEventStructToIPTask( &xStackTxEvent, xTicksToWait ) == pdPASS )
+                               {
+                                       /* The packet was successfully sent to the IP task. */
+                                       lReturn = ( int32_t ) xTotalDataLength;
+                                       #if( ipconfigUSE_CALLBACKS == 1 )
+                                       {
+                                               if( ipconfigIS_VALID_PROG_ADDRESS( pxSocket->u.xUDP.pxHandleSent ) )
+                                               {
+                                                       pxSocket->u.xUDP.pxHandleSent( ( Socket_t )pxSocket, xTotalDataLength );
+                                               }
+                                       }
+                                       #endif /* ipconfigUSE_CALLBACKS */
+                               }
+                               else
+                               {
+                                       /* If the buffer was allocated in this function, release
+                                       it. */
+                                       if( ( xFlags & FREERTOS_ZERO_COPY ) == 0 )
+                                       {
+                                               vReleaseNetworkBufferAndDescriptor( pxNetworkBuffer );
+                                       }
+                                       iptraceSTACK_TX_EVENT_LOST( ipSTACK_TX_EVENT );
+                               }
+                       }
+                       else
+                       {
+                               /* If errno was available, errno would be set to
+                               FREERTOS_ENOPKTS.  As it is, the function must return the
+                               number of transmitted bytes, so the calling function knows
+                               how     much data was actually sent. */
+                               iptraceNO_BUFFER_FOR_SENDTO();
+                       }
+               }
+               else
+               {
+                       iptraceSENDTO_SOCKET_NOT_BOUND();
+               }
+       }
+       else
+       {
+               /* The data is longer than the available buffer space. */
+               iptraceSENDTO_DATA_TOO_LONG();
+       }
+
+       return lReturn;
+} /* Tested */
+/*-----------------------------------------------------------*/
+
+/*
+ * FreeRTOS_bind() : binds a sockt to a local port number.  If port 0 is
+ * provided, a system provided port number will be assigned.  This function can
+ * be used for both UDP and TCP sockets.  The actual binding will be performed
+ * by the IP-task to avoid mutual access to the bound-socket-lists
+ * (xBoundUDPSocketsList or xBoundTCPSocketsList).
+ */
+BaseType_t FreeRTOS_bind( Socket_t xSocket, struct freertos_sockaddr * pxAddress, socklen_t xAddressLength )
+{
+IPStackEvent_t xBindEvent;
+FreeRTOS_Socket_t *pxSocket = ( FreeRTOS_Socket_t * ) xSocket;
+BaseType_t xReturn = 0;
+
+       ( void ) xAddressLength;
+
+       if( ( pxSocket == NULL ) || ( pxSocket == FREERTOS_INVALID_SOCKET ) )
+       {
+               xReturn = -pdFREERTOS_ERRNO_EINVAL;
+       }
+       /* Once a socket is bound to a port, it can not be bound to a different
+       port number */
+       else if( socketSOCKET_IS_BOUND( pxSocket) != pdFALSE )
+       {
+               /* The socket is already bound. */
+               FreeRTOS_debug_printf( ( "vSocketBind: Socket already bound to %d\n", pxSocket->usLocalPort ) );
+               xReturn = -pdFREERTOS_ERRNO_EINVAL;
+       }
+       else
+       {
+               /* Prepare a messages to the IP-task in order to perform the binding.
+               The desired port number will be passed in usLocalPort. */
+               xBindEvent.eEventType = eSocketBindEvent;
+               xBindEvent.pvData = ( void * ) xSocket;
+               if( pxAddress != NULL )
+               {
+                       pxSocket->usLocalPort = FreeRTOS_ntohs( pxAddress->sin_port );
+               }
+               else
+               {
+                       /* Caller wants to bind to a random port number. */
+                       pxSocket->usLocalPort = 0u;
+               }
+
+               /* portMAX_DELAY is used as a the time-out parameter, as binding *must*
+               succeed before the socket can be used.  _RB_ The use of an infinite
+               block time needs be changed as it could result in the task hanging. */
+               if( xSendEventStructToIPTask( &xBindEvent, ( TickType_t ) portMAX_DELAY ) == pdFAIL )
+               {
+                       /* Failed to wake-up the IP-task, no use to wait for it */
+                       FreeRTOS_debug_printf( ( "FreeRTOS_bind: send event failed\n" ) );
+                       xReturn = -pdFREERTOS_ERRNO_ECANCELED;
+               }
+               else
+               {
+                       /* The IP-task will set the 'eSOCKET_BOUND' bit when it has done its
+                       job. */
+                       xEventGroupWaitBits( pxSocket->xEventGroup, eSOCKET_BOUND, pdTRUE /*xClearOnExit*/, pdFALSE /*xWaitAllBits*/, portMAX_DELAY );
+                       if( socketSOCKET_IS_BOUND( pxSocket ) == pdFALSE )
+                       {
+                               xReturn = -pdFREERTOS_ERRNO_EINVAL;
+                       }
+               }
+       }
+
+       return xReturn;
+}
+
+/*
+ * vSocketBind(): internal version of bind() that should not be called directly.
+ * 'xInternal' is used for TCP sockets only: it allows to have several
+ * (connected) child sockets bound to the same server port.
+ */
+BaseType_t vSocketBind( FreeRTOS_Socket_t *pxSocket, struct freertos_sockaddr * pxAddress, size_t uxAddressLength, BaseType_t xInternal )
+{
+BaseType_t xReturn = 0; /* In Berkeley sockets, 0 means pass for bind(). */
+List_t *pxSocketList;
+#if( ipconfigALLOW_SOCKET_SEND_WITHOUT_BIND == 1 )
+       struct freertos_sockaddr xAddress;
+#endif /* ipconfigALLOW_SOCKET_SEND_WITHOUT_BIND */
+
+#if( ipconfigUSE_TCP == 1 )
+       if( pxSocket->ucProtocol == ( uint8_t ) FREERTOS_IPPROTO_TCP )
+       {
+               pxSocketList = &xBoundTCPSocketsList;
+       }
+       else
+#endif  /* ipconfigUSE_TCP == 1 */
+       {
+               pxSocketList = &xBoundUDPSocketsList;
+       }
+
+       /* The function prototype is designed to maintain the expected Berkeley
+       sockets standard, but this implementation does not use all the parameters. */
+       ( void ) uxAddressLength;
+
+       configASSERT( pxSocket );
+       configASSERT( pxSocket != FREERTOS_INVALID_SOCKET );
+
+       #if( ipconfigALLOW_SOCKET_SEND_WITHOUT_BIND == 1 )
+       {
+               /* pxAddress will be NULL if sendto() was called on a socket without the
+               socket being bound to an address. In this case, automatically allocate
+               an address and port to the socket. */
+               if( pxAddress == NULL )
+               {
+                       pxAddress = &xAddress;
+                       /* Put the port to zero to be assigned later. */
+                       pxAddress->sin_port = 0u;
+               }
+       }
+       #endif /* ipconfigALLOW_SOCKET_SEND_WITHOUT_BIND == 1 */
+
+       /* Sockets must be bound before calling FreeRTOS_sendto() if
+       ipconfigALLOW_SOCKET_SEND_WITHOUT_BIND is not set to 1. */
+       configASSERT( pxAddress );
+
+       if( pxAddress != NULL )
+       {
+               if( pxAddress->sin_port == 0u )
+               {
+                       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
+               confirmed that the socket was not yet bound to a port.  If it is called
+               from the IP-task, no such check is necessary. */
+
+               /* Check to ensure the port is not already in use.  If the bind is
+               called internally, a port MAY be used by more than one socket. */
+               if( ( ( xInternal == pdFALSE ) || ( pxSocket->ucProtocol != ( uint8_t ) FREERTOS_IPPROTO_TCP ) ) &&
+                       ( pxListFindListItemWithValue( pxSocketList, ( TickType_t ) pxAddress->sin_port ) != NULL ) )
+               {
+                       FreeRTOS_debug_printf( ( "vSocketBind: %sP port %d in use\n",
+                               pxSocket->ucProtocol == ( uint8_t ) FREERTOS_IPPROTO_TCP ? "TC" : "UD",
+                               FreeRTOS_ntohs( pxAddress->sin_port ) ) );
+                       xReturn = -pdFREERTOS_ERRNO_EADDRINUSE;
+               }
+               else
+               {
+                       /* Allocate the port number to the socket.
+                       This macro will set 'xBoundSocketListItem->xItemValue' */
+                       socketSET_SOCKET_PORT( pxSocket, pxAddress->sin_port );
+
+                       /* And also store it in a socket field 'usLocalPort' in host-byte-order,
+                       mostly used for logging and debugging purposes */
+                       pxSocket->usLocalPort = FreeRTOS_ntohs( pxAddress->sin_port );
+
+                       /* Add the socket to the list of bound ports. */
+                       {
+                               /* If the network driver can iterate through 'xBoundUDPSocketsList',
+                               by calling xPortHasUDPSocket() then the IP-task must temporarily
+                               suspend the scheduler to keep the list in a consistent state. */
+                               #if( ipconfigETHERNET_DRIVER_FILTERS_PACKETS == 1 )
+                               {
+                                       vTaskSuspendAll();
+                               }
+                               #endif /* ipconfigETHERNET_DRIVER_FILTERS_PACKETS */
+
+                               /* Add the socket to 'xBoundUDPSocketsList' or 'xBoundTCPSocketsList' */
+                               vListInsertEnd( pxSocketList, &( pxSocket->xBoundSocketListItem ) );
+
+                               #if( ipconfigETHERNET_DRIVER_FILTERS_PACKETS == 1 )
+                               {
+                                       xTaskResumeAll();
+                               }
+                               #endif /* ipconfigETHERNET_DRIVER_FILTERS_PACKETS */
+                       }
+               }
+       }
+       else
+       {
+               xReturn = -pdFREERTOS_ERRNO_EADDRNOTAVAIL;
+               FreeRTOS_debug_printf( ( "vSocketBind: Socket no addr\n" ) );
+       }
+
+       if( xReturn != 0 )
+       {
+               iptraceBIND_FAILED( xSocket, ( FreeRTOS_ntohs( pxAddress->sin_port ) ) );
+       }
+
+       return xReturn;
+} /* Tested */
+/*-----------------------------------------------------------*/
+
+/*
+ * Close a socket and free the allocated space
+ * In case of a TCP socket: the connection will not be closed automatically
+ * Subsequent messages for the closed socket will be responded to with a RST
+ * The IP-task will actually close the socket, after receiving a 'eSocketCloseEvent' message
+ */
+BaseType_t FreeRTOS_closesocket( Socket_t xSocket )
+{
+BaseType_t xResult;
+#if( ipconfigUSE_TCP == 1 ) && ( ipconfigUSE_CALLBACKS == 1 )
+       FreeRTOS_Socket_t *pxSocket = ( FreeRTOS_Socket_t * )xSocket;
+#endif
+IPStackEvent_t xCloseEvent;
+xCloseEvent.eEventType = eSocketCloseEvent;
+xCloseEvent.pvData = ( void * ) xSocket;
+
+       if( ( xSocket == NULL ) || ( xSocket == FREERTOS_INVALID_SOCKET ) )
+       {
+               xResult = 0;
+       }
+       else
+       {
+               #if( ( ipconfigUSE_TCP == 1 ) && ( ipconfigUSE_CALLBACKS == 1 ) )
+               {
+                       if( pxSocket->ucProtocol == ( uint8_t ) FREERTOS_IPPROTO_TCP )
+                       {
+                               /* Make sure that IP-task won't call the user callback's anymore */
+                               pxSocket->u.xTCP.pxHandleConnected = NULL;
+                               pxSocket->u.xTCP.pxHandleReceive = NULL;
+                               pxSocket->u.xTCP.pxHandleSent = NULL;
+                       }
+               }
+               #endif  /* ( ( ipconfigUSE_TCP == 1 ) && ( ipconfigUSE_CALLBACKS == 1 ) ) */
+
+               /* Let the IP task close the socket to keep it synchronised     with the
+               packet handling. */
+
+               /* Note when changing the time-out value below, it must be checked who is calling
+               this function. If it is called by the IP-task, a deadlock could occur.
+               The IP-task would only call it in case of a user call-back */
+               if( xSendEventStructToIPTask( &xCloseEvent, ( TickType_t ) 0 ) == pdFAIL )
+               {
+                       FreeRTOS_debug_printf( ( "FreeRTOS_closesocket: failed\n" ) );
+                       xResult = -1;
+               }
+               else
+               {
+                       xResult = 1;
+               }
+       }
+
+       return xResult;
+}
+
+/* This is the internal version of FreeRTOS_closesocket()
+ * It will be called by the IPtask only to avoid problems with synchronicity
+ */
+void *vSocketClose( FreeRTOS_Socket_t *pxSocket )
+{
+NetworkBufferDescriptor_t *pxNetworkBuffer;
+
+       #if( ipconfigUSE_TCP == 1 )
+       {
+               /* For TCP: clean up a little more. */
+               if( pxSocket->ucProtocol == ( uint8_t ) FREERTOS_IPPROTO_TCP )
+               {
+                       #if( ipconfigUSE_TCP_WIN == 1 )
+                       {
+                               if( pxSocket->u.xTCP.pxAckMessage != NULL )
+                               {
+                                       vReleaseNetworkBufferAndDescriptor( pxSocket->u.xTCP.pxAckMessage );
+                               }
+                               /* Free the resources which were claimed by the tcpWin member */
+                               vTCPWindowDestroy( &pxSocket->u.xTCP.xTCPWindow );
+                       }
+                       #endif /* ipconfigUSE_TCP_WIN */
+
+                       /* Free the input and output streams */
+                       if( pxSocket->u.xTCP.rxStream != NULL )
+                       {
+                               vPortFreeLarge( pxSocket->u.xTCP.rxStream );
+                       }
+
+                       if( pxSocket->u.xTCP.txStream != NULL )
+                       {
+                               vPortFreeLarge( pxSocket->u.xTCP.txStream );
+                       }
+
+                       /* In case this is a child socket, make sure the child-count of the
+                       parent socket is decreased. */
+                       prvTCPSetSocketCount( pxSocket );
+               }
+       }
+       #endif  /* ipconfigUSE_TCP == 1 */
+
+       /* Socket must be unbound first, to ensure no more packets are queued on
+       it. */
+       if( socketSOCKET_IS_BOUND( pxSocket ) != pdFALSE )
+       {
+               /* If the network driver can iterate through 'xBoundUDPSocketsList',
+               by calling xPortHasUDPSocket(), then the IP-task must temporarily
+               suspend the scheduler to keep the list in a consistent state. */
+               #if( ipconfigETHERNET_DRIVER_FILTERS_PACKETS == 1 )
+               {
+                       vTaskSuspendAll();
+               }
+               #endif /* ipconfigETHERNET_DRIVER_FILTERS_PACKETS */
+
+               uxListRemove( &( pxSocket->xBoundSocketListItem ) );
+
+               #if( ipconfigETHERNET_DRIVER_FILTERS_PACKETS == 1 )
+               {
+                       xTaskResumeAll();
+               }
+               #endif /* ipconfigETHERNET_DRIVER_FILTERS_PACKETS */
+       }
+
+       /* Now the socket is not bound the list of waiting packets can be
+       drained. */
+       if( pxSocket->ucProtocol == ( uint8_t ) FREERTOS_IPPROTO_UDP )
+       {
+               while( listCURRENT_LIST_LENGTH( &( pxSocket->u.xUDP.xWaitingPacketsList ) ) > 0U )
+               {
+                       pxNetworkBuffer = ( NetworkBufferDescriptor_t * ) listGET_OWNER_OF_HEAD_ENTRY( &( pxSocket->u.xUDP.xWaitingPacketsList ) );
+                       uxListRemove( &( pxNetworkBuffer->xBufferListItem ) );
+                       vReleaseNetworkBufferAndDescriptor( pxNetworkBuffer );
+               }
+       }
+
+       if( pxSocket->xEventGroup )
+       {
+               vEventGroupDelete( pxSocket->xEventGroup );
+       }
+
+       #if( ipconfigUSE_TCP == 1 ) && ( ipconfigHAS_DEBUG_PRINTF != 0 )
+       {
+               if( pxSocket->ucProtocol == ( uint8_t ) FREERTOS_IPPROTO_TCP )
+               {
+                       FreeRTOS_debug_printf( ( "FreeRTOS_closesocket[%u to %lxip:%u]: buffers %lu socks %lu\n",
+                               pxSocket->usLocalPort,
+                               pxSocket->u.xTCP.ulRemoteIP,
+                               pxSocket->u.xTCP.usRemotePort,
+                               uxGetNumberOfFreeNetworkBuffers(),
+                               listCURRENT_LIST_LENGTH( &xBoundTCPSocketsList ) ) );
+               }
+       }
+       #endif /* ( ipconfigUSE_TCP == 1 ) && ( ipconfigHAS_DEBUG_PRINTF != 0 ) */
+
+       /* Anf finally, after all resources have been freed, free the socket space */
+       vPortFreeSocket( pxSocket );
+
+       return 0;
+} /* Tested */
+
+/*-----------------------------------------------------------*/
+
+#if ipconfigUSE_TCP == 1
+
+       /*
+        * When a child socket gets closed, make sure to update the child-count of the
+        * parent.  When a listening parent socket is closed, make sure no child-sockets
+        * keep a pointer to it.
+        */
+       static void prvTCPSetSocketCount( FreeRTOS_Socket_t *pxSocketToDelete )
+       {
+       const ListItem_t *pxIterator;
+       const MiniListItem_t *pxEnd = ( const MiniListItem_t* )listGET_END_MARKER( &xBoundTCPSocketsList );
+       FreeRTOS_Socket_t *pxOtherSocket;
+       uint16_t usLocalPort = pxSocketToDelete->usLocalPort;
+
+               for( pxIterator  = ( const ListItem_t * ) listGET_NEXT( pxEnd );
+                        pxIterator != ( const ListItem_t * ) pxEnd;
+                        pxIterator  = ( const ListItem_t * ) listGET_NEXT( pxIterator ) )
+               {
+                       pxOtherSocket = ( FreeRTOS_Socket_t * ) listGET_LIST_ITEM_OWNER( pxIterator );
+                       if( ( pxOtherSocket->u.xTCP.ucTCPState == eTCP_LISTEN ) &&
+                               ( pxOtherSocket->usLocalPort == usLocalPort ) &&
+                               ( pxOtherSocket->u.xTCP.usChildCount ) )
+                       {
+                               pxOtherSocket->u.xTCP.usChildCount--;
+                               FreeRTOS_debug_printf( ( "Lost: Socket %u now has %u / %u child%s\n",
+                                       pxOtherSocket->usLocalPort,
+                                       pxOtherSocket->u.xTCP.usChildCount,
+                                       pxOtherSocket->u.xTCP.usBacklog,
+                                       pxOtherSocket->u.xTCP.usChildCount == 1u ? "" : "ren" ) );
+                               break;
+                       }
+               }
+       }
+
+#endif /* ipconfigUSE_TCP == 1 */
+
+/*-----------------------------------------------------------*/
+
+BaseType_t FreeRTOS_setsockopt( Socket_t xSocket, int32_t lLevel, int32_t lOptionName, const void *pvOptionValue, size_t xOptionLength )
+{
+/* The standard Berkeley function returns 0 for success. */
+BaseType_t xReturn = -pdFREERTOS_ERRNO_EINVAL;
+BaseType_t lOptionValue;
+FreeRTOS_Socket_t *pxSocket;
+
+       pxSocket = ( FreeRTOS_Socket_t * ) xSocket;
+
+       /* The function prototype is designed to maintain the expected Berkeley
+       sockets standard, but this implementation does not use all the parameters. */
+       ( void ) lLevel;
+       ( void ) xOptionLength;
+
+       configASSERT( xSocket );
+
+       switch( lOptionName )
+       {
+               case FREERTOS_SO_RCVTIMEO       :
+                       /* Receive time out. */
+                       pxSocket->xReceiveBlockTime = *( ( TickType_t * ) pvOptionValue );
+                       xReturn = 0;
+                       break;
+
+               case FREERTOS_SO_SNDTIMEO       :
+                       pxSocket->xSendBlockTime = *( ( TickType_t * ) pvOptionValue );
+                       if( pxSocket->ucProtocol == ( uint8_t ) FREERTOS_IPPROTO_UDP )
+                       {
+                               /* The send time out is capped for the reason stated in the
+                               comments where ipconfigUDP_MAX_SEND_BLOCK_TIME_TICKS is defined
+                               in FreeRTOSIPConfig.h (assuming an official configuration file
+                               is being used. */
+                               if( pxSocket->xSendBlockTime > ipconfigUDP_MAX_SEND_BLOCK_TIME_TICKS )
+                               {
+                                       pxSocket->xSendBlockTime = ipconfigUDP_MAX_SEND_BLOCK_TIME_TICKS;
+                               }
+                       }
+                       else
+                       {
+                               /* For TCP socket, it isn't necessary to limit the blocking time
+                               because the FreeRTOS_send() function does not wait for a network
+                               buffer to become available. */
+                       }
+                       xReturn = 0;
+                       break;
+               #if( ipconfigUDP_MAX_RX_PACKETS > 0 )
+                       case FREERTOS_SO_UDP_MAX_RX_PACKETS:
+                               if( pxSocket->ucProtocol != ( uint8_t ) FREERTOS_IPPROTO_UDP )
+                               {
+                                       break;  /* will return -pdFREERTOS_ERRNO_EINVAL */
+                               }
+                               pxSocket->u.xUDP.uxMaxPackets = *( ( UBaseType_t * ) pvOptionValue );
+                               xReturn = 0;
+                               break;
+               #endif /* ipconfigUDP_MAX_RX_PACKETS */
+
+               case FREERTOS_SO_UDPCKSUM_OUT :
+                       /* Turn calculating of the UDP checksum on/off for this socket. */
+                       lOptionValue = ( BaseType_t ) pvOptionValue;
+
+                       if( lOptionValue == 0 )
+                       {
+                               pxSocket->ucSocketOptions &= ( uint8_t ) ~FREERTOS_SO_UDPCKSUM_OUT;
+                       }
+                       else
+                       {
+                               pxSocket->ucSocketOptions |= ( uint8_t ) FREERTOS_SO_UDPCKSUM_OUT;
+                       }
+                       xReturn = 0;
+                       break;
+
+               #if( ipconfigUSE_CALLBACKS == 1 )
+                       #if( ipconfigUSE_TCP == 1 )
+                               case FREERTOS_SO_TCP_CONN_HANDLER:      /* Set a callback for (dis)connection events */
+                               case FREERTOS_SO_TCP_RECV_HANDLER:      /* Install a callback for receiving TCP data. Supply pointer to 'F_TCP_UDP_Handler_t' (see below) */
+                               case FREERTOS_SO_TCP_SENT_HANDLER:      /* Install a callback for sending TCP data. Supply pointer to 'F_TCP_UDP_Handler_t' (see below) */
+                       #endif /* ipconfigUSE_TCP */
+                               case FREERTOS_SO_UDP_RECV_HANDLER:      /* Install a callback for receiving UDP data. Supply pointer to 'F_TCP_UDP_Handler_t' (see below) */
+                               case FREERTOS_SO_UDP_SENT_HANDLER:      /* Install a callback for sending UDP data. Supply pointer to 'F_TCP_UDP_Handler_t' (see below) */
+                                       {
+                                               #if( ipconfigUSE_TCP == 1 )
+                                               {
+                                                       UBaseType_t uxProtocol;
+                                                       if( ( lOptionName == FREERTOS_SO_UDP_RECV_HANDLER ) ||
+                                                               ( lOptionName == FREERTOS_SO_UDP_SENT_HANDLER ) )
+                                                       {
+                                                               uxProtocol = ( UBaseType_t ) FREERTOS_IPPROTO_UDP;
+                                                       }
+                                                       else
+                                                       {
+                                                               uxProtocol = ( UBaseType_t ) FREERTOS_IPPROTO_TCP;
+                                                       }
+
+                                                       if( pxSocket->ucProtocol != ( uint8_t ) uxProtocol )
+                                                       {
+                                                               break;  /* will return -pdFREERTOS_ERRNO_EINVAL */
+                                                       }
+                                               }
+                                               #else
+                                               {
+                                                       /* No need to check if the socket has the right
+                                                       protocol, because only UDP socket can be created. */
+                                               }
+                                               #endif /* ipconfigUSE_TCP */
+
+                                               switch( lOptionName )
+                                               {
+                                               #if ipconfigUSE_TCP == 1
+                                                       case FREERTOS_SO_TCP_CONN_HANDLER:
+                                                               pxSocket->u.xTCP.pxHandleConnected = ((F_TCP_UDP_Handler_t *)pvOptionValue)->pxOnTCPConnected;
+                                                               break;
+                                                       case FREERTOS_SO_TCP_RECV_HANDLER:
+                                                               pxSocket->u.xTCP.pxHandleReceive = ((F_TCP_UDP_Handler_t *)pvOptionValue)->pxOnTCPReceive;
+                                                               break;
+                                                       case FREERTOS_SO_TCP_SENT_HANDLER:
+                                                               pxSocket->u.xTCP.pxHandleSent = ((F_TCP_UDP_Handler_t *)pvOptionValue)->pxOnTCPSent;
+                                                               break;
+                                               #endif /* ipconfigUSE_TCP */
+                                               case FREERTOS_SO_UDP_RECV_HANDLER:
+                                                       pxSocket->u.xUDP.pxHandleReceive = ((F_TCP_UDP_Handler_t *)pvOptionValue)->pxOnUDPReceive;
+                                                       break;
+                                               case FREERTOS_SO_UDP_SENT_HANDLER:
+                                                       pxSocket->u.xUDP.pxHandleSent = ((F_TCP_UDP_Handler_t *)pvOptionValue)->pxOnUDPSent;
+                                                       break;
+                                               default:
+                                                       break;
+                                               }
+                                       }
+
+                                       xReturn = 0;
+                                       break;
+               #endif /* ipconfigUSE_CALLBACKS */
+
+               #if( ipconfigUSE_TCP != 0 )
+                       #if( ipconfigSOCKET_HAS_USER_SEMAPHORE != 0 )
+                               /* Each socket has a semaphore on which the using task normally
+                               sleeps. */
+                               case FREERTOS_SO_SET_SEMAPHORE:
+                                       {
+                                               pxSocket->pxUserSemaphore = *( ( SemaphoreHandle_t * ) pvOptionValue );
+                                               xReturn = 0;
+                                       }
+                                       break;
+                       #endif /* ipconfigSOCKET_HAS_USER_SEMAPHORE */
+
+                       #if( ipconfigSOCKET_HAS_USER_WAKE_CALLBACK != 0 )
+                               case FREERTOS_SO_WAKEUP_CALLBACK:
+                               {
+                                       /* Each socket can have a callback function that is executed
+                                       when there is an event the socket's owner might want to
+                                       process. */
+                                       pxSocket->pxUserWakeCallback = ( SocketWakeupCallback_t ) pvOptionValue;
+                                       xReturn = 0;
+                               }
+                               break;
+                       #endif /* ipconfigSOCKET_HAS_USER_WAKE_CALLBACK */
+
+                       case FREERTOS_SO_SET_LOW_HIGH_WATER:
+                               {
+                               LowHighWater_t *pxLowHighWater = ( LowHighWater_t * ) pvOptionValue;
+
+                                       if( pxSocket->ucProtocol != ( uint8_t ) FREERTOS_IPPROTO_TCP )
+                                       {
+                                               /* It is not allowed to access 'pxSocket->u.xTCP'. */
+                                               FreeRTOS_debug_printf( ( "FREERTOS_SO_SET_LOW_HIGH_WATER: wrong socket type\n" ) );
+                                               break;  /* will return -pdFREERTOS_ERRNO_EINVAL */
+                                       }
+                                       if( ( pxLowHighWater->uxLittleSpace >= pxLowHighWater->uxEnoughSpace ) ||
+                                               ( pxLowHighWater->uxEnoughSpace > pxSocket->u.xTCP.uxRxStreamSize ) )
+                                       {
+                                               /* Impossible values. */
+                                               FreeRTOS_debug_printf( ( "FREERTOS_SO_SET_LOW_HIGH_WATER: bad values\n" ) );
+                                               break;  /* will return -pdFREERTOS_ERRNO_EINVAL */
+                                       }
+                                       /* Send a STOP when buffer space drops below 'uxLittleSpace' bytes. */
+                                       pxSocket->u.xTCP.uxLittleSpace = pxLowHighWater->uxLittleSpace;
+                                       /* Send a GO when buffer space grows above 'uxEnoughSpace' bytes. */
+                                       pxSocket->u.xTCP.uxEnoughSpace = pxLowHighWater->uxEnoughSpace;
+                                       xReturn = 0;
+                               }
+                               break;
+
+                       case FREERTOS_SO_SNDBUF:        /* Set the size of the send buffer, in units of MSS (TCP only) */
+                       case FREERTOS_SO_RCVBUF:        /* Set the size of the receive buffer, in units of MSS (TCP only) */
+                               {
+                                       uint32_t ulNewValue;
+
+                                       if( pxSocket->ucProtocol != ( uint8_t ) FREERTOS_IPPROTO_TCP )
+                                       {
+                                               FreeRTOS_debug_printf( ( "Set SO_%sBUF: wrong socket type\n",
+                                                       ( lOptionName == FREERTOS_SO_SNDBUF ) ? "SND" : "RCV" ) );
+                                               break;  /* will return -pdFREERTOS_ERRNO_EINVAL */
+                                       }
+
+                                       if( ( ( lOptionName == FREERTOS_SO_SNDBUF ) && ( pxSocket->u.xTCP.txStream != NULL ) ) ||
+                                               ( ( lOptionName == FREERTOS_SO_RCVBUF ) && ( pxSocket->u.xTCP.rxStream != NULL ) ) )
+                                       {
+                                               FreeRTOS_debug_printf( ( "Set SO_%sBUF: buffer already created\n",
+                                                       ( lOptionName == FREERTOS_SO_SNDBUF ) ? "SND" : "RCV" ) );
+                                               break;  /* will return -pdFREERTOS_ERRNO_EINVAL */
+                                       }
+
+                                       ulNewValue = *( ( uint32_t * ) pvOptionValue );
+
+                                       if( lOptionName == FREERTOS_SO_SNDBUF )
+                                       {
+                                               /* Round up to nearest MSS size */
+                                               ulNewValue = FreeRTOS_round_up( ulNewValue, ( uint32_t ) pxSocket->u.xTCP.usInitMSS );
+                                               pxSocket->u.xTCP.uxTxStreamSize = ulNewValue;
+                                       }
+                                       else
+                                       {
+                                               pxSocket->u.xTCP.uxRxStreamSize = ulNewValue;
+                                       }
+                               }
+                               xReturn = 0;
+                               break;
+
+                       case FREERTOS_SO_WIN_PROPERTIES:        /* Set all buffer and window properties in one call, parameter is pointer to WinProperties_t */
+                               {
+                                       WinProperties_t* pxProps;
+
+                                       if( pxSocket->ucProtocol != ( uint8_t ) FREERTOS_IPPROTO_TCP )
+                                       {
+                                               FreeRTOS_debug_printf( ( "Set SO_WIN_PROP: wrong socket type\n" ) );
+                                               break;  /* will return -pdFREERTOS_ERRNO_EINVAL */
+                                       }
+
+                                       if( ( pxSocket->u.xTCP.txStream != NULL ) || ( pxSocket->u.xTCP.rxStream != NULL ) )
+                                       {
+                                               FreeRTOS_debug_printf( ( "Set SO_WIN_PROP: buffer already created\n" ) );
+                                               break;  /* will return -pdFREERTOS_ERRNO_EINVAL */
+                                       }
+
+                                       pxProps = ( ( WinProperties_t * ) pvOptionValue );
+
+                                       if ( FreeRTOS_setsockopt( xSocket, 0, FREERTOS_SO_SNDBUF, &( pxProps->lTxBufSize ), sizeof( pxProps->lTxBufSize ) ) != 0 )
+                                       {
+                                               break;  /* will return -pdFREERTOS_ERRNO_EINVAL */
+                                       }
+
+                                       if ( FreeRTOS_setsockopt( xSocket, 0, FREERTOS_SO_RCVBUF, &( pxProps->lRxBufSize ), sizeof( pxProps->lRxBufSize ) ) != 0 )
+                                       {
+                                               break;  /* will return -pdFREERTOS_ERRNO_EINVAL */
+                                       }
+
+                                       #if( ipconfigUSE_TCP_WIN == 1 )
+                                       {
+                                               pxSocket->u.xTCP.uxRxWinSize = ( uint32_t )pxProps->lRxWinSize; /* Fixed value: size of the TCP reception window */
+                                               pxSocket->u.xTCP.uxTxWinSize = ( uint32_t )pxProps->lTxWinSize; /* Fixed value: size of the TCP transmit window */
+                                       }
+                                       #else
+                                       {
+                                               pxSocket->u.xTCP.uxRxWinSize = 1u;
+                                               pxSocket->u.xTCP.uxTxWinSize = 1u;
+                                       }
+                                       #endif
+
+                                       /* In case the socket has already initialised its tcpWin,
+                                       adapt the window size parameters */
+                                       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.ulTxWindowLength = pxSocket->u.xTCP.uxTxWinSize * pxSocket->u.xTCP.usInitMSS;
+                                       }
+                               }
+
+                               xReturn = 0;
+                               break;
+
+                       case FREERTOS_SO_REUSE_LISTEN_SOCKET:   /* If true, the server-socket will turn into a connected socket */
+                               {
+                                       if( pxSocket->ucProtocol != ( uint8_t ) FREERTOS_IPPROTO_TCP )
+                                       {
+                                               break;  /* will return -pdFREERTOS_ERRNO_EINVAL */
+                                       }
+                                       if( *( ( BaseType_t * ) pvOptionValue ) != 0 )
+                                       {
+                                               pxSocket->u.xTCP.bits.bReuseSocket = pdTRUE_UNSIGNED;
+                                       }
+                                       else
+                                       {
+                                               pxSocket->u.xTCP.bits.bReuseSocket = pdFALSE_UNSIGNED;
+                                       }
+                               }
+                               xReturn = 0;
+                               break;
+
+                       case FREERTOS_SO_CLOSE_AFTER_SEND:              /* As soon as the last byte has been transmitted, finalise the connection */
+                               {
+                                       if( pxSocket->ucProtocol != ( uint8_t ) FREERTOS_IPPROTO_TCP )
+                                       {
+                                               break;  /* will return -pdFREERTOS_ERRNO_EINVAL */
+                                       }
+
+                                       if( *( ( BaseType_t * ) pvOptionValue ) != 0 )
+                                       {
+                                               pxSocket->u.xTCP.bits.bCloseAfterSend = pdTRUE_UNSIGNED;
+                                       }
+                                       else
+                                       {
+                                               pxSocket->u.xTCP.bits.bCloseAfterSend = pdFALSE_UNSIGNED;
+                                       }
+                               }
+                               xReturn = 0;
+                               break;
+
+                       case FREERTOS_SO_SET_FULL_SIZE:         /* Refuse to send packets smaller than MSS  */
+                               {
+                                       if( pxSocket->ucProtocol != ( uint8_t ) FREERTOS_IPPROTO_TCP )
+                                       {
+                                               break;  /* will return -pdFREERTOS_ERRNO_EINVAL */
+                                       }
+
+                                       if( *( ( BaseType_t * ) pvOptionValue ) != 0 )
+                                       {
+                                               pxSocket->u.xTCP.xTCPWindow.u.bits.bSendFullSize = pdTRUE_UNSIGNED;
+                                       }
+                                       else
+                                       {
+                                               pxSocket->u.xTCP.xTCPWindow.u.bits.bSendFullSize = pdFALSE_UNSIGNED;
+                                       }
+
+                                       if( ( pxSocket->u.xTCP.xTCPWindow.u.bits.bSendFullSize == pdFALSE_UNSIGNED ) &&
+                                               ( pxSocket->u.xTCP.ucTCPState >= eESTABLISHED ) &&
+                                               ( FreeRTOS_outstanding( pxSocket ) != 0 ) )
+                                       {
+                                               pxSocket->u.xTCP.usTimeout = 1u; /* to set/clear bSendFullSize */
+                                               xSendEventToIPTask( eTCPTimerEvent );
+                                       }
+                               }
+                               xReturn = 0;
+                               break;
+
+                       case FREERTOS_SO_STOP_RX:               /* Refuse to receive more packts */
+                               {
+                                       if( pxSocket->ucProtocol != ( uint8_t ) FREERTOS_IPPROTO_TCP )
+                                       {
+                                               break;  /* will return -pdFREERTOS_ERRNO_EINVAL */
+                                       }
+
+                                       if( *( ( BaseType_t * ) pvOptionValue ) != 0 )
+                                       {
+                                               pxSocket->u.xTCP.bits.bRxStopped = pdTRUE_UNSIGNED;
+                                       }
+                                       else
+                                       {
+                                               pxSocket->u.xTCP.bits.bRxStopped = pdFALSE_UNSIGNED;
+                                       }
+
+                                       pxSocket->u.xTCP.bits.bWinChange = pdTRUE_UNSIGNED;
+                                       pxSocket->u.xTCP.usTimeout = 1u; /* to set/clear bRxStopped */
+                                       xSendEventToIPTask( eTCPTimerEvent );
+                               }
+                               xReturn = 0;
+                               break;
+
+               #endif  /* ipconfigUSE_TCP == 1 */
+
+               default :
+                       /* No other options are handled. */
+                       xReturn = -pdFREERTOS_ERRNO_ENOPROTOOPT;
+                       break;
+       }
+
+       return xReturn;
+} /* Tested */
+
+/*-----------------------------------------------------------*/
+
+/* Find an available port number per https://tools.ietf.org/html/rfc6056. */
+static uint16_t prvGetPrivatePortNumber( BaseType_t xProtocol )
+{
+const uint16_t usEphemeralPortCount =
+       socketAUTO_PORT_ALLOCATION_MAX_NUMBER - socketAUTO_PORT_ALLOCATION_START_NUMBER + 1;
+uint16_t usIterations = usEphemeralPortCount;
+uint32_t ulRandomSeed = 0;
+uint16_t usResult = 0;
+const List_t *pxList;
+
+#if ipconfigUSE_TCP == 1
+       if( xProtocol == ( BaseType_t ) FREERTOS_IPPROTO_TCP )
+       {
+               pxList = &xBoundTCPSocketsList;
+       }
+       else
+#endif
+       {
+               pxList = &xBoundUDPSocketsList;
+       }
+
+       /* Avoid compiler warnings if ipconfigUSE_TCP is not defined. */
+       ( void ) xProtocol;
+
+       /* Find the next available port using the random seed as a starting
+       point. */
+       do
+       {
+               /* Only proceed if the random number generator succeeded. */
+               if( xApplicationGetRandomNumber( &( ulRandomSeed ) ) == pdFALSE )
+               {
+                       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;
+}
+/*-----------------------------------------------------------*/
+
+/* pxListFindListItemWithValue: find a list item in a bound socket list
+'xWantedItemValue' refers to a port number */
+static const ListItem_t * pxListFindListItemWithValue( const List_t *pxList, TickType_t xWantedItemValue )
+{
+const ListItem_t * pxResult = NULL;
+
+       if( ( xIPIsNetworkTaskReady() != pdFALSE ) && ( pxList != NULL ) )
+       {
+               const ListItem_t *pxIterator;
+               const MiniListItem_t *pxEnd = ( const MiniListItem_t* )listGET_END_MARKER( pxList );
+               for( pxIterator  = ( const ListItem_t * ) listGET_NEXT( pxEnd );
+                        pxIterator != ( const ListItem_t * ) pxEnd;
+                        pxIterator  = ( const ListItem_t * ) listGET_NEXT( pxIterator ) )
+               {
+                       if( listGET_LIST_ITEM_VALUE( pxIterator ) == xWantedItemValue )
+                       {
+                               pxResult = pxIterator;
+                               break;
+                       }
+               }
+       }
+
+       return pxResult;
+} /* Tested */
+
+/*-----------------------------------------------------------*/
+
+FreeRTOS_Socket_t *pxUDPSocketLookup( UBaseType_t uxLocalPort )
+{
+const ListItem_t *pxListItem;
+FreeRTOS_Socket_t *pxSocket = NULL;
+
+       /* Looking up a socket is quite simple, find a match with the local port.
+
+       See if there is a list item associated with the port number on the
+       list of bound sockets. */
+       pxListItem = pxListFindListItemWithValue( &xBoundUDPSocketsList, ( TickType_t ) uxLocalPort );
+
+       if( pxListItem != NULL )
+       {
+               /* The owner of the list item is the socket itself. */
+               pxSocket = ( FreeRTOS_Socket_t * ) listGET_LIST_ITEM_OWNER( pxListItem );
+               configASSERT( pxSocket != NULL );
+       }
+       return pxSocket;
+}
+
+/*-----------------------------------------------------------*/
+
+#if ipconfigINCLUDE_FULL_INET_ADDR == 1
+
+       uint32_t FreeRTOS_inet_addr( const char * pcIPAddress )
+       {
+       const uint32_t ulDecimalBase = 10u;
+       uint8_t ucOctet[ socketMAX_IP_ADDRESS_OCTETS ];
+       const char *pcPointerOnEntering;
+       uint32_t ulReturn = 0UL, ulValue;
+       UBaseType_t uxOctetNumber;
+       BaseType_t xResult = pdPASS;
+
+               for( uxOctetNumber = 0u; uxOctetNumber < socketMAX_IP_ADDRESS_OCTETS; uxOctetNumber++ )
+               {
+                       ulValue = 0ul;
+                       pcPointerOnEntering = pcIPAddress;
+
+                       while( ( *pcIPAddress >= '0' ) && ( *pcIPAddress <= '9' ) )
+                       {
+                               /* Move previous read characters into the next decimal
+                               position. */
+                               ulValue *= ulDecimalBase;
+
+                               /* Add the binary value of the ascii character. */
+                               ulValue += ( ( uint32_t ) ( *pcIPAddress ) - ( uint32_t ) '0' );
+
+                               /* Move to next character in the string. */
+                               pcIPAddress++;
+                       }
+
+                       /* Check characters were read. */
+                       if( pcIPAddress == pcPointerOnEntering )
+                       {
+                               xResult = pdFAIL;
+                       }
+
+                       /* Check the value fits in an 8-bit number. */
+                       if( ulValue > 0xffUL )
+                       {
+                               xResult = pdFAIL;
+                       }
+                       else
+                       {
+                               ucOctet[ uxOctetNumber ] = ( uint8_t ) ulValue;
+
+                               /* Check the next character is as expected. */
+                               if( uxOctetNumber < ( socketMAX_IP_ADDRESS_OCTETS - 1u ) )
+                               {
+                                       if( *pcIPAddress != '.' )
+                                       {
+                                               xResult = pdFAIL;
+                                       }
+                                       else
+                                       {
+                                               /* Move past the dot. */
+                                               pcIPAddress++;
+                                       }
+                               }
+                       }
+
+                       if( xResult == pdFAIL )
+                       {
+                               /* No point going on. */
+                               break;
+                       }
+               }
+
+               if( *pcIPAddress != ( char ) 0 )
+               {
+                       /* Expected the end of the string. */
+                       xResult = pdFAIL;
+               }
+
+               if( uxOctetNumber != socketMAX_IP_ADDRESS_OCTETS )
+               {
+                       /* Didn't read enough octets. */
+                       xResult = pdFAIL;
+               }
+
+               if( xResult == pdPASS )
+               {
+                       ulReturn = FreeRTOS_inet_addr_quick( ucOctet[ 0 ], ucOctet[ 1 ], ucOctet[ 2 ], ucOctet[ 3 ] );
+               }
+
+               return ulReturn;
+       }
+
+#endif /* ipconfigINCLUDE_FULL_INET_ADDR */
+
+/*-----------------------------------------------------------*/
+
+/* Function to get the local address and IP port */
+size_t FreeRTOS_GetLocalAddress( Socket_t xSocket, struct freertos_sockaddr *pxAddress )
+{
+FreeRTOS_Socket_t *pxSocket = ( FreeRTOS_Socket_t * ) xSocket;
+
+       /* IP address of local machine. */
+       pxAddress->sin_addr = *ipLOCAL_IP_ADDRESS_POINTER;
+
+       /* Local port on this machine. */
+       pxAddress->sin_port = FreeRTOS_htons( pxSocket->usLocalPort );
+
+       return sizeof( *pxAddress );
+}
+
+/*-----------------------------------------------------------*/
+
+void vSocketWakeUpUser( FreeRTOS_Socket_t *pxSocket )
+{
+/* _HT_ must work this out, now vSocketWakeUpUser will be called for any important
+ * event or transition */
+       #if( ipconfigSOCKET_HAS_USER_SEMAPHORE == 1 )
+       {
+               if( pxSocket->pxUserSemaphore != NULL )
+               {
+                       xSemaphoreGive( pxSocket->pxUserSemaphore );
+               }
+       }
+       #endif /* ipconfigSOCKET_HAS_USER_SEMAPHORE */
+
+       #if( ipconfigSOCKET_HAS_USER_WAKE_CALLBACK == 1 )
+       {
+               if( pxSocket->pxUserWakeCallback != NULL )
+               {
+                       pxSocket->pxUserWakeCallback( pxSocket );
+               }
+       }
+       #endif /* ipconfigSOCKET_HAS_USER_SEMAPHORE */
+
+       #if( ipconfigSUPPORT_SELECT_FUNCTION == 1 )
+       {
+               if( pxSocket->pxSocketSet != NULL )
+               {
+                       EventBits_t xSelectBits = ( pxSocket->xEventBits >> SOCKET_EVENT_BIT_COUNT ) & eSELECT_ALL;
+                       if( xSelectBits != 0ul )
+                       {
+                               pxSocket->xSocketBits |= xSelectBits;
+                               xEventGroupSetBits( pxSocket->pxSocketSet->xSelectGroup, xSelectBits );
+                       }
+               }
+
+               pxSocket->xEventBits &= eSOCKET_ALL;
+       }
+       #endif /* ipconfigSUPPORT_SELECT_FUNCTION */
+
+       if( ( pxSocket->xEventGroup != NULL ) && ( pxSocket->xEventBits != 0u ) )
+       {
+               xEventGroupSetBits( pxSocket->xEventGroup, pxSocket->xEventBits );
+       }
+
+       pxSocket->xEventBits = 0ul;
+}
+
+/*-----------------------------------------------------------*/
+
+#if( ipconfigETHERNET_DRIVER_FILTERS_PACKETS == 1 )
+
+       /* 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
+        * number.
+        * This is probably only usefull in systems with a minimum of RAM and
+        * when lots of anonymous broadcast messages come in
+        */
+       BaseType_t xPortHasUDPSocket( uint16_t usPortNr )
+       {
+       BaseType_t xFound = pdFALSE;
+
+               vTaskSuspendAll();
+               {
+                       if( ( pxListFindListItemWithValue( &xBoundUDPSocketsList, ( TickType_t ) usPortNr ) != NULL ) )
+                       {
+                               xFound = pdTRUE;
+                       }
+               }
+               xTaskResumeAll();
+
+               return xFound;
+       }
+
+#endif /* ipconfigETHERNET_DRIVER_FILTERS_PACKETS */
+
+/*-----------------------------------------------------------*/
+
+#if( ipconfigUSE_TCP == 1 )
+
+       static BaseType_t bMayConnect( FreeRTOS_Socket_t *pxSocket );
+       static BaseType_t bMayConnect( FreeRTOS_Socket_t *pxSocket )
+       {
+               switch( pxSocket->u.xTCP.ucTCPState )
+               {
+                       case eCLOSED:
+                       case eCLOSE_WAIT:       return 0;
+                       case eCONNECT_SYN:      return -pdFREERTOS_ERRNO_EINPROGRESS;
+                       default:                        return -pdFREERTOS_ERRNO_EAGAIN;
+               }
+       }
+
+#endif /* ipconfigUSE_TCP */
+/*-----------------------------------------------------------*/
+
+#if( ipconfigUSE_TCP == 1 )
+
+       static BaseType_t prvTCPConnectStart( FreeRTOS_Socket_t *pxSocket, struct freertos_sockaddr *pxAddress )
+       {
+       BaseType_t xResult = 0;
+
+               if( prvValidSocket( pxSocket, FREERTOS_IPPROTO_TCP, pdFALSE ) == pdFALSE )
+               {
+                       /* Not a valid socket or wrong type */
+                       xResult = -pdFREERTOS_ERRNO_EBADF;
+               }
+               else if( FreeRTOS_issocketconnected( pxSocket ) > 0 )
+               {
+                       /* The socket is already connected. */
+                       xResult = -pdFREERTOS_ERRNO_EISCONN;
+               }
+               else if( socketSOCKET_IS_BOUND( pxSocket ) == pdFALSE )
+               {
+                       /* Bind the socket to the port that the client task will send from.
+                       Non-standard, so the error returned is that returned by bind(). */
+                       xResult = FreeRTOS_bind( ( Socket_t ) pxSocket, NULL, 0u );
+               }
+
+               if( xResult == 0 )
+               {
+                       /* Check if it makes any sense to wait for a connect event, this condition
+                       might change while sleeping, so it must be checked within each loop */
+                       xResult = bMayConnect( pxSocket ); /* -EINPROGRESS, -EAGAIN, or 0 for OK */
+
+                       /* Start the connect procedure, kernel will start working on it */
+                       if( xResult == 0 )
+                       {
+                               pxSocket->u.xTCP.bits.bConnPrepared = pdFALSE_UNSIGNED;
+                               pxSocket->u.xTCP.ucRepCount = 0u;
+
+                               FreeRTOS_debug_printf( ( "FreeRTOS_connect: %u to %lxip:%u\n",
+                                       pxSocket->usLocalPort, FreeRTOS_ntohl( pxAddress->sin_addr ), FreeRTOS_ntohs( pxAddress->sin_port ) ) );
+
+                               /* Port on remote machine. */
+                               pxSocket->u.xTCP.usRemotePort = FreeRTOS_ntohs( pxAddress->sin_port );
+
+                               /* IP address of remote machine. */
+                               pxSocket->u.xTCP.ulRemoteIP = FreeRTOS_ntohl( pxAddress->sin_addr );
+
+                               /* (client) internal state: socket wants to send a connect. */
+                               vTCPStateChange( pxSocket, eCONNECT_SYN );
+
+                               /* To start an active connect. */
+                               pxSocket->u.xTCP.usTimeout = 1u;
+
+                               if( xSendEventToIPTask( eTCPTimerEvent ) != pdPASS )
+                               {
+                                       xResult = -pdFREERTOS_ERRNO_ECANCELED;
+                               }
+                       }
+               }
+
+               return xResult;
+       }
+
+#endif /* ipconfigUSE_TCP */
+/*-----------------------------------------------------------*/
+
+#if( ipconfigUSE_TCP == 1 )
+
+       /*
+        * FreeRTOS_connect: socket wants to connect to a remote port
+        */
+       BaseType_t FreeRTOS_connect( Socket_t xClientSocket, struct freertos_sockaddr *pxAddress, socklen_t xAddressLength )
+       {
+       FreeRTOS_Socket_t *pxSocket = ( FreeRTOS_Socket_t* ) xClientSocket;
+       TickType_t xRemainingTime;
+       BaseType_t xTimed = pdFALSE;
+       BaseType_t xResult;
+       TimeOut_t xTimeOut;
+
+               ( void ) xAddressLength;
+
+               xResult = prvTCPConnectStart( pxSocket, pxAddress );
+
+               if( xResult == 0 )
+               {
+                       /* And wait for the result */
+                       for( ;; )
+                       {
+                               if( xTimed == pdFALSE )
+                               {
+                                       /* Only in the first round, check for non-blocking */
+                                       xRemainingTime = pxSocket->xReceiveBlockTime;
+                                       if( xRemainingTime == ( TickType_t )0 )
+                                       {
+                                               /* Not yet connected, correct state, non-blocking. */
+                                               xResult = -pdFREERTOS_ERRNO_EWOULDBLOCK;
+                                               break;
+                                       }
+
+                                       /* Don't get here a second time. */
+                                       xTimed = pdTRUE;
+
+                                       /* Fetch the current time */
+                                       vTaskSetTimeOutState( &xTimeOut );
+                               }
+
+                               /* Did it get connected while sleeping ? */
+                               xResult = FreeRTOS_issocketconnected( pxSocket );
+
+                               /* Returns positive when connected, negative means an error */
+                               if( xResult < 0 )
+                               {
+                                       /* Return the error */
+                                       break;
+                               }
+
+                               if( xResult > 0 )
+                               {
+                                       /* Socket now connected, return a zero */
+                                       xResult = 0;
+                                       break;
+                               }
+
+                               /* Is it allowed to sleep more? */
+                               if( xTaskCheckForTimeOut( &xTimeOut, &xRemainingTime ) )
+                               {
+                                       xResult = -pdFREERTOS_ERRNO_ETIMEDOUT;
+                                       break;
+                               }
+
+                               /* Go sleeping until we get any down-stream event */
+                               xEventGroupWaitBits( pxSocket->xEventGroup, eSOCKET_CONNECT, pdTRUE /*xClearOnExit*/, pdFALSE /*xWaitAllBits*/, xRemainingTime );
+                       }
+               }
+
+               return xResult;
+       }
+#endif /* ipconfigUSE_TCP */
+/*-----------------------------------------------------------*/
+
+#if( ipconfigUSE_TCP == 1 )
+
+       /*
+        * FreeRTOS_accept: can return a new connected socket
+        * if the server socket is in listen mode and receives a connection request
+        * The new socket will be bound already to the same port number as the listing
+        * socket.
+        */
+       Socket_t FreeRTOS_accept( Socket_t xServerSocket, struct freertos_sockaddr *pxAddress, socklen_t *pxAddressLength )
+       {
+       FreeRTOS_Socket_t *pxSocket = ( FreeRTOS_Socket_t * ) xServerSocket;
+       FreeRTOS_Socket_t *pxClientSocket = NULL;
+       TickType_t xRemainingTime;
+       BaseType_t xTimed = pdFALSE, xAsk = pdFALSE;
+       TimeOut_t xTimeOut;
+       IPStackEvent_t xAskEvent;
+
+               if( prvValidSocket( pxSocket, FREERTOS_IPPROTO_TCP, pdTRUE ) == pdFALSE )
+               {
+                       /* Not a valid socket or wrong type */
+                       pxClientSocket = ( FreeRTOS_Socket_t * ) FREERTOS_INVALID_SOCKET;
+               }
+               else if( ( pxSocket->u.xTCP.bits.bReuseSocket == pdFALSE_UNSIGNED ) &&
+                                ( pxSocket->u.xTCP.ucTCPState != eTCP_LISTEN ) )
+               {
+                       /* Parent socket is not in listening mode */
+                       pxClientSocket = ( FreeRTOS_Socket_t * ) FREERTOS_INVALID_SOCKET;
+               }
+               else
+               {
+                       /* Loop will stop with breaks. */
+                       for( ; ; )
+                       {
+                               /* Is there a new client? */
+                               vTaskSuspendAll();
+                               {
+                                       if( pxSocket->u.xTCP.bits.bReuseSocket == pdFALSE_UNSIGNED )
+                                       {
+                                               pxClientSocket = pxSocket->u.xTCP.pxPeerSocket;
+                                       }
+                                       else
+                                       {
+                                               pxClientSocket = pxSocket;
+                                       }
+                                       if( pxClientSocket != NULL )
+                                       {
+                                               pxSocket->u.xTCP.pxPeerSocket = NULL;
+
+                                               /* Is it still not taken ? */
+                                               if( pxClientSocket->u.xTCP.bits.bPassAccept != pdFALSE_UNSIGNED )
+                                               {
+                                                       pxClientSocket->u.xTCP.bits.bPassAccept = pdFALSE_UNSIGNED;
+                                               }
+                                               else
+                                               {
+                                                       pxClientSocket = NULL;
+                                               }
+                                       }
+                               }
+                               xTaskResumeAll();
+
+                               if( pxClientSocket != NULL )
+                               {
+                                       if( pxAddress != NULL )
+                                       {
+                                               /* IP address of remote machine. */
+                                               pxAddress->sin_addr = FreeRTOS_ntohl( pxClientSocket->u.xTCP.ulRemoteIP );
+
+                                               /* Port on remote machine. */
+                                               pxAddress->sin_port = FreeRTOS_ntohs( pxClientSocket->u.xTCP.usRemotePort );
+                                       }
+                                       if( pxAddressLength != NULL )
+                                       {
+                                               *pxAddressLength = sizeof( *pxAddress );
+                                       }
+
+                                       if( pxSocket->u.xTCP.bits.bReuseSocket == pdFALSE_UNSIGNED )
+                                       {
+                                               xAsk = pdTRUE;
+                                       }
+                               }
+
+                               if( xAsk != pdFALSE )
+                               {
+                                       /* Ask to set an event in 'xEventGroup' as soon as a new
+                                       client gets connected for this listening socket. */
+                                       xAskEvent.eEventType = eTCPAcceptEvent;
+                                       xAskEvent.pvData = ( void * ) pxSocket;
+                                       xSendEventStructToIPTask( &xAskEvent, portMAX_DELAY );
+                               }
+
+                               if( pxClientSocket != NULL )
+                               {
+                                       break;
+                               }
+
+                               if( xTimed == pdFALSE )
+                               {
+                                       /* Only in the first round, check for non-blocking */
+                                       xRemainingTime = pxSocket->xReceiveBlockTime;
+                                       if( xRemainingTime == ( TickType_t ) 0 )
+                                       {
+                                               break;
+                                       }
+
+                                       /* Don't get here a second time */
+                                       xTimed = pdTRUE;
+
+                                       /* Fetch the current time */
+                                       vTaskSetTimeOutState( &xTimeOut );
+                               }
+
+                               /* Has the timeout been reached? */
+                               if( xTaskCheckForTimeOut( &xTimeOut, &xRemainingTime ) != pdFALSE )
+                               {
+                                       break;
+                               }
+
+                               /* Go sleeping until we get any down-stream event */
+                               xEventGroupWaitBits( pxSocket->xEventGroup, eSOCKET_ACCEPT, pdTRUE /*xClearOnExit*/, pdFALSE /*xWaitAllBits*/, xRemainingTime );
+                       }
+               }
+
+               return ( Socket_t ) pxClientSocket;
+       }
+#endif /* ipconfigUSE_TCP */
+/*-----------------------------------------------------------*/
+
+#if( ipconfigUSE_TCP == 1 )
+
+       /*
+        * Read incoming data from a TCP socket
+        * Only after the last byte has been read, a close error might be returned
+        */
+       BaseType_t FreeRTOS_recv( Socket_t xSocket, void *pvBuffer, size_t xBufferLength, BaseType_t xFlags )
+       {
+       BaseType_t xByteCount;
+       FreeRTOS_Socket_t *pxSocket = ( FreeRTOS_Socket_t * ) xSocket;
+       TickType_t xRemainingTime;
+       BaseType_t xTimed = pdFALSE;
+       TimeOut_t xTimeOut;
+       EventBits_t xEventBits = ( EventBits_t ) 0;
+
+               /* Check if the socket is valid, has type TCP and if it is bound to a
+               port. */
+               if( prvValidSocket( pxSocket, FREERTOS_IPPROTO_TCP, pdTRUE ) == pdFALSE )
+               {
+                       xByteCount = -pdFREERTOS_ERRNO_EINVAL;
+               }
+               else
+               {
+                       if( pxSocket->u.xTCP.rxStream != NULL )
+                       {
+                               xByteCount = ( BaseType_t )uxStreamBufferGetSize ( pxSocket->u.xTCP.rxStream );
+                       }
+                       else
+                       {
+                               xByteCount = 0;
+                       }
+
+                       while( xByteCount == 0 )
+                       {
+                               switch( pxSocket->u.xTCP.ucTCPState )
+                               {
+                               case eCLOSED:
+                               case eCLOSE_WAIT:       /* (server + client) waiting for a connection termination request from the local user. */
+                               case eCLOSING:          /* (server + client) waiting for a connection termination request acknowledgement from the remote TCP. */
+                                       if( pxSocket->u.xTCP.bits.bMallocError != pdFALSE_UNSIGNED )
+                                       {
+                                               /* The no-memory error has priority above the non-connected error.
+                                               Both are fatal and will elad to closing the socket. */
+                                               xByteCount = -pdFREERTOS_ERRNO_ENOMEM;
+                                       }
+                                       else
+                                       {
+                                               xByteCount = -pdFREERTOS_ERRNO_ENOTCONN;
+                                       }
+                                       /* Call continue to break out of the switch and also the while
+                                       loop. */
+                                       continue;
+                               default:
+                                       break;
+                               }
+
+                               if( xTimed == pdFALSE )
+                               {
+                                       /* Only in the first round, check for non-blocking. */
+                                       xRemainingTime = pxSocket->xReceiveBlockTime;
+
+                                       if( xRemainingTime == ( TickType_t ) 0 )
+                                       {
+                                               #if( ipconfigSUPPORT_SIGNALS != 0 )
+                                               {
+                                                       /* Just check for the interrupt flag. */
+                                                       xEventBits = xEventGroupWaitBits( pxSocket->xEventGroup, eSOCKET_INTR,
+                                                               pdTRUE /*xClearOnExit*/, pdFALSE /*xWaitAllBits*/, socketDONT_BLOCK );
+                                               }
+                                               #endif /* ipconfigSUPPORT_SIGNALS */
+                                               break;
+                                       }
+
+                                       if( ( xFlags & FREERTOS_MSG_DONTWAIT ) != 0 )
+                                       {
+                                               break;
+                                       }
+
+                                       /* Don't get here a second time. */
+                                       xTimed = pdTRUE;
+
+                                       /* Fetch the current time. */
+                                       vTaskSetTimeOutState( &xTimeOut );
+                               }
+
+                               /* Has the timeout been reached? */
+                               if( xTaskCheckForTimeOut( &xTimeOut, &xRemainingTime ) != pdFALSE )
+                               {
+                                       break;
+                               }
+
+                               /* Block until there is a down-stream event. */
+                               xEventBits = xEventGroupWaitBits( pxSocket->xEventGroup,
+                                       eSOCKET_RECEIVE | eSOCKET_CLOSED | eSOCKET_INTR,
+                                       pdTRUE /*xClearOnExit*/, pdFALSE /*xWaitAllBits*/, xRemainingTime );
+                               #if( ipconfigSUPPORT_SIGNALS != 0 )
+                               {
+                                       if( ( xEventBits & eSOCKET_INTR ) != 0u )
+                                       {
+                                               break;
+                                       }
+                               }
+                               #else
+                               {
+                                       ( void ) xEventBits;
+                               }
+                               #endif /* ipconfigSUPPORT_SIGNALS */
+
+                               if( pxSocket->u.xTCP.rxStream != NULL )
+                               {
+                                       xByteCount = ( BaseType_t ) uxStreamBufferGetSize ( pxSocket->u.xTCP.rxStream );
+                               }
+                               else
+                               {
+                                       xByteCount = 0;
+                               }
+                       }
+
+               #if( ipconfigSUPPORT_SIGNALS != 0 )
+                       if( ( xEventBits & eSOCKET_INTR ) != 0 )
+                       {
+                               if( ( xEventBits & ( eSOCKET_RECEIVE | eSOCKET_CLOSED ) ) != 0 )
+                               {
+                                       /* Shouldn't have cleared other flags. */
+                                       xEventBits &= ~eSOCKET_INTR;
+                                       xEventGroupSetBits( pxSocket->xEventGroup, xEventBits );
+                               }
+                               xByteCount = -pdFREERTOS_ERRNO_EINTR;
+                       }
+                       else
+               #endif /* ipconfigSUPPORT_SIGNALS */
+                       if( xByteCount > 0 )
+                       {
+                               if( ( xFlags & FREERTOS_ZERO_COPY ) == 0 )
+                               {
+                                       xByteCount = ( BaseType_t ) uxStreamBufferGet( pxSocket->u.xTCP.rxStream, 0ul, ( uint8_t * ) pvBuffer, ( size_t ) xBufferLength, ( xFlags & FREERTOS_MSG_PEEK ) != 0 );
+                                       if( pxSocket->u.xTCP.bits.bLowWater != pdFALSE_UNSIGNED )
+                                       {
+                                               /* We had reached the low-water mark, now see if the flag
+                                               can be cleared */
+                                               size_t uxFrontSpace = uxStreamBufferFrontSpace( pxSocket->u.xTCP.rxStream );
+
+                                               if( uxFrontSpace >= pxSocket->u.xTCP.uxEnoughSpace )
+                                               {
+                                                       pxSocket->u.xTCP.bits.bLowWater = pdFALSE_UNSIGNED;
+                                                       pxSocket->u.xTCP.bits.bWinChange = pdTRUE_UNSIGNED;
+                                                       pxSocket->u.xTCP.usTimeout = 1u; /* because bLowWater is cleared. */
+                                                       xSendEventToIPTask( eTCPTimerEvent );
+                                               }
+                                       }
+                               }
+                               else
+                               {
+                                       /* Zero-copy reception of data: pvBuffer is a pointer to a pointer. */
+                                       xByteCount = ( BaseType_t ) uxStreamBufferGetPtr( pxSocket->u.xTCP.rxStream, (uint8_t **)pvBuffer );
+                               }
+                       }
+               } /* prvValidSocket() */
+
+               return xByteCount;
+       }
+
+#endif /* ipconfigUSE_TCP */
+/*-----------------------------------------------------------*/
+
+#if( ipconfigUSE_TCP == 1 )
+
+       static int32_t prvTCPSendCheck( FreeRTOS_Socket_t *pxSocket, size_t xDataLength )
+       {
+       int32_t xResult = 1;
+
+               /* Is this a socket of type TCP and is it already bound to a port number ? */
+               if( prvValidSocket( pxSocket, FREERTOS_IPPROTO_TCP, pdTRUE ) == pdFALSE )
+               {
+                       xResult = -pdFREERTOS_ERRNO_EINVAL;
+               }
+               else if( pxSocket->u.xTCP.bits.bMallocError != pdFALSE_UNSIGNED )
+               {
+                       xResult = -pdFREERTOS_ERRNO_ENOMEM;
+               }
+               else if( pxSocket->u.xTCP.ucTCPState == eCLOSED ||
+                 pxSocket->u.xTCP.ucTCPState == eCLOSE_WAIT ||
+                 pxSocket->u.xTCP.ucTCPState == eCLOSING )
+               {
+                       xResult = -pdFREERTOS_ERRNO_ENOTCONN;
+               }
+               else if( pxSocket->u.xTCP.bits.bFinSent != pdFALSE_UNSIGNED )
+               {
+                       /* This TCP connection is closing already, the FIN flag has been sent.
+                       Maybe it is still delivering or receiving data.
+                       Return OK in order not to get closed/deleted too quickly */
+                       xResult = 0;
+               }
+               else if( xDataLength == 0ul )
+               {
+                       /* send() is being called to send zero bytes */
+                       xResult = 0;
+               }
+               else if( pxSocket->u.xTCP.txStream == NULL )
+               {
+                       /* Create the outgoing stream only when it is needed */
+                       prvTCPCreateStream( pxSocket, pdFALSE );
+
+                       if( pxSocket->u.xTCP.txStream == NULL )
+                       {
+                               xResult = -pdFREERTOS_ERRNO_ENOMEM;
+                       }
+               }
+
+               return xResult;
+       }
+
+#endif /* ipconfigUSE_TCP */
+/*-----------------------------------------------------------*/
+
+#if( ipconfigUSE_TCP == 1 )
+
+       /* Get a direct pointer to the circular transmit buffer.
+       '*pxLength' will contain the number of bytes that may be written. */
+       uint8_t *FreeRTOS_get_tx_head( Socket_t xSocket, BaseType_t *pxLength )
+       {
+    uint8_t *pucReturn = NULL;
+       FreeRTOS_Socket_t *pxSocket = ( FreeRTOS_Socket_t * ) xSocket;
+       StreamBuffer_t *pxBuffer = NULL;
+
+        *pxLength = 0;
+
+        /* Confirm that this is a TCP socket before dereferencing structure
+        member pointers. */
+        if( prvValidSocket( pxSocket, FREERTOS_IPPROTO_TCP, pdFALSE ) == pdTRUE )
+        {
+            pxBuffer = pxSocket->u.xTCP.txStream;
+            if( pxBuffer != NULL )
+            {
+            BaseType_t xSpace = ( BaseType_t )uxStreamBufferGetSpace( pxBuffer );
+            BaseType_t xRemain = ( BaseType_t )( pxBuffer->LENGTH - pxBuffer->uxHead );
+
+                *pxLength = FreeRTOS_min_BaseType( xSpace, xRemain );
+                pucReturn = pxBuffer->ucArray + pxBuffer->uxHead;
+            }
+               }
+
+               return pucReturn;
+       }
+#endif /* ipconfigUSE_TCP */
+/*-----------------------------------------------------------*/
+
+#if( ipconfigUSE_TCP == 1 )
+       /*
+        * Send data using a TCP socket.  It is not necessary to have the socket
+        * connected already.  Outgoing data will be stored and delivered as soon as
+        * the socket gets connected.
+        */
+       BaseType_t FreeRTOS_send( Socket_t xSocket, const void *pvBuffer, size_t uxDataLength, BaseType_t xFlags )
+       {
+       BaseType_t xByteCount;
+       BaseType_t xBytesLeft;
+       FreeRTOS_Socket_t *pxSocket = ( FreeRTOS_Socket_t * ) xSocket;
+       TickType_t xRemainingTime;
+       BaseType_t xTimed = pdFALSE;
+       TimeOut_t xTimeOut;
+       BaseType_t xCloseAfterSend;
+
+               /* Prevent compiler warnings about unused parameters.  The parameter
+               may be used in future versions. */
+               ( void ) xFlags;
+
+               xByteCount = ( BaseType_t ) prvTCPSendCheck( pxSocket, uxDataLength );
+
+               if( xByteCount > 0 )
+               {
+                       /* xBytesLeft is number of bytes to send, will count to zero. */
+                       xBytesLeft = ( BaseType_t ) uxDataLength;
+
+                       /* xByteCount is number of bytes that can be sent now. */
+                       xByteCount = ( BaseType_t ) uxStreamBufferGetSpace( pxSocket->u.xTCP.txStream );
+
+                       /* While there are still bytes to be sent. */
+                       while( xBytesLeft > 0 )
+                       {
+                               /* If txStream has space. */
+                               if( xByteCount > 0 )
+                               {
+                                       /* Don't send more than necessary. */
+                                       if( xByteCount > xBytesLeft )
+                                       {
+                                               xByteCount = xBytesLeft;
+                                       }
+
+                                       /* Is the close-after-send flag set and is this really the
+                                       last transmission? */
+                                       if( ( pxSocket->u.xTCP.bits.bCloseAfterSend != pdFALSE_UNSIGNED ) && ( xByteCount == xBytesLeft ) )
+                                       {
+                                               xCloseAfterSend = pdTRUE;
+                                       }
+                                       else
+                                       {
+                                               xCloseAfterSend = pdFALSE;
+                                       }
+
+                                       /* The flag 'bCloseAfterSend' can be set before sending data
+                                       using setsockopt()
+
+                                       When the last data packet is being sent out, a FIN flag will
+                                       be included to let the peer know that no more data is to be
+                                       expected.  The use of 'bCloseAfterSend' is not mandatory, it
+                                       is just a faster way of transferring files (e.g. when using
+                                       FTP). */
+                                       if( xCloseAfterSend != pdFALSE )
+                                       {
+                                               /* Now suspend the scheduler: sending the last data     and
+                                               setting bCloseRequested must be done together */
+                                               vTaskSuspendAll();
+                                               pxSocket->u.xTCP.bits.bCloseRequested = pdTRUE_UNSIGNED;
+                                       }
+
+                                       xByteCount = ( BaseType_t ) uxStreamBufferAdd( pxSocket->u.xTCP.txStream, 0ul, ( const uint8_t * ) pvBuffer, ( size_t ) xByteCount );
+
+                                       if( xCloseAfterSend != pdFALSE )
+                                       {
+                                               /* Now when the IP-task transmits the data, it will also
+                                               see     that bCloseRequested is true and include the FIN
+                                               flag to start closure of the connection. */
+                                               xTaskResumeAll();
+                                       }
+
+                                       /* Send a message to the IP-task so it can work on this
+                                       socket.  Data is sent, let the IP-task work on it. */
+                                       pxSocket->u.xTCP.usTimeout = 1u;
+
+                                       if( xIsCallingFromIPTask() == pdFALSE )
+                                       {
+                                               /* Only send a TCP timer event when not called from the
+                                               IP-task. */
+                                               xSendEventToIPTask( eTCPTimerEvent );
+                                       }
+
+                                       xBytesLeft -= xByteCount;
+
+                                       if( xBytesLeft == 0 )
+                                       {
+                                               break;
+                                       }
+
+                                       /* As there are still bytes left to be sent, increase the
+                                       data pointer. */
+                                       pvBuffer = ( void * ) ( ( ( const uint8_t * ) pvBuffer) + xByteCount );
+                               }
+
+                               /* Not all bytes have been sent. In case the socket is marked as
+                               blocking sleep for a while. */
+                               if( xTimed == pdFALSE )
+                               {
+                                       /* Only in the first round, check for non-blocking. */
+                                       xRemainingTime = pxSocket->xSendBlockTime;
+
+                                       #if( ipconfigUSE_CALLBACKS != 0 )
+                                       {
+                                               if( xIsCallingFromIPTask() != pdFALSE )
+                                               {
+                                                       /* If this send function is called from within a
+                                                       call-back handler it may not block, otherwise
+                                                       chances would be big to get a deadlock: the IP-task
+                                                       waiting for     itself. */
+                                                       xRemainingTime = ( TickType_t ) 0;
+                                               }
+                                       }
+                                       #endif /* ipconfigUSE_CALLBACKS */
+
+                                       if( xRemainingTime == ( TickType_t ) 0 )
+                                       {
+                                               break;
+                                       }
+
+                                       if( ( xFlags & FREERTOS_MSG_DONTWAIT ) != 0 )
+                                       {
+                                               break;
+                                       }
+
+                                       /* Don't get here a second time. */
+                                       xTimed = pdTRUE;
+
+                                       /* Fetch the current time. */
+                                       vTaskSetTimeOutState( &xTimeOut );
+                               }
+                               else
+                               {
+                                       /* Has the timeout been reached? */
+                                       if( xTaskCheckForTimeOut( &xTimeOut, &xRemainingTime ) != pdFALSE )
+                                       {
+                                               break;
+                                       }
+                               }
+
+                               /* Go sleeping until down-stream events are received. */
+                               xEventGroupWaitBits( pxSocket->xEventGroup, eSOCKET_SEND | eSOCKET_CLOSED,
+                                       pdTRUE /*xClearOnExit*/, pdFALSE /*xWaitAllBits*/, xRemainingTime );
+
+                               xByteCount = ( BaseType_t ) uxStreamBufferGetSpace( pxSocket->u.xTCP.txStream );
+                       }
+
+                       /* How much was actually sent? */
+                       xByteCount = ( ( BaseType_t ) uxDataLength ) - xBytesLeft;
+
+                       if( xByteCount == 0 )
+                       {
+                               if( pxSocket->u.xTCP.ucTCPState > eESTABLISHED )
+                               {
+                                       xByteCount = ( BaseType_t ) -pdFREERTOS_ERRNO_ENOTCONN;
+                               }
+                               else
+                               {
+                                       if( ipconfigTCP_MAY_LOG_PORT( pxSocket->usLocalPort ) != pdFALSE )
+                                       {
+                                               FreeRTOS_debug_printf( ( "FreeRTOS_send: %u -> %lxip:%d: no space\n",
+                                                       pxSocket->usLocalPort,
+                                                       pxSocket->u.xTCP.ulRemoteIP,
+                                                       pxSocket->u.xTCP.usRemotePort ) );
+                                       }
+
+                                       xByteCount = ( BaseType_t ) -pdFREERTOS_ERRNO_ENOSPC;
+                               }
+                       }
+               }
+
+               return xByteCount;
+       }
+
+#endif /* ipconfigUSE_TCP */
+/*-----------------------------------------------------------*/
+
+#if( ipconfigUSE_TCP == 1 )
+
+       /*
+        * Request to put a socket in listen mode
+        */
+       BaseType_t FreeRTOS_listen( Socket_t xSocket, BaseType_t xBacklog )
+       {
+       FreeRTOS_Socket_t *pxSocket;
+       BaseType_t xResult = 0;
+
+               pxSocket = ( FreeRTOS_Socket_t * ) xSocket;
+
+               /* listen() is allowed for a valid TCP socket in Closed state and already
+               bound. */
+               if( prvValidSocket( pxSocket, FREERTOS_IPPROTO_TCP, pdTRUE ) == pdFALSE )
+               {
+                       xResult = -pdFREERTOS_ERRNO_EOPNOTSUPP;
+               }
+               else if( ( pxSocket->u.xTCP.ucTCPState != eCLOSED ) && ( pxSocket->u.xTCP.ucTCPState != eCLOSE_WAIT ) )
+               {
+                       /* Socket is in a wrong state. */
+                       xResult = -pdFREERTOS_ERRNO_EOPNOTSUPP;
+               }
+               else
+               {
+                       /* Backlog is interpreted here as "the maximum number of child
+                       sockets. */
+                       pxSocket->u.xTCP.usBacklog = ( uint16_t )FreeRTOS_min_int32( ( int32_t ) 0xffff, ( int32_t ) xBacklog );
+
+                       /* This cleaning is necessary only if a listening socket is being
+                       reused as it might have had a previous connection. */
+                       if( pxSocket->u.xTCP.bits.bReuseSocket )
+                       {
+                               if( pxSocket->u.xTCP.rxStream != NULL )
+                               {
+                                       vStreamBufferClear( pxSocket->u.xTCP.rxStream );
+                               }
+
+                               if( pxSocket->u.xTCP.txStream != NULL )
+                               {
+                                       vStreamBufferClear( pxSocket->u.xTCP.txStream );
+                               }
+
+                               memset( pxSocket->u.xTCP.xPacket.u.ucLastPacket, '\0', sizeof( pxSocket->u.xTCP.xPacket.u.ucLastPacket ) );
+                               memset( &pxSocket->u.xTCP.xTCPWindow, '\0', sizeof( pxSocket->u.xTCP.xTCPWindow ) );
+                               memset( &pxSocket->u.xTCP.bits, '\0', sizeof( pxSocket->u.xTCP.bits ) );
+
+                               /* Now set the bReuseSocket flag again, because the bits have
+                               just been cleared. */
+                               pxSocket->u.xTCP.bits.bReuseSocket = pdTRUE_UNSIGNED;
+                       }
+
+                       vTCPStateChange( pxSocket, eTCP_LISTEN );
+               }
+
+               return xResult;
+       }
+
+#endif /* ipconfigUSE_TCP */
+/*-----------------------------------------------------------*/
+
+#if( ipconfigUSE_TCP == 1 )
+
+       /* shutdown - shut down part of a full-duplex connection */
+       BaseType_t FreeRTOS_shutdown( Socket_t xSocket, BaseType_t xHow )
+       {
+       FreeRTOS_Socket_t *pxSocket = ( FreeRTOS_Socket_t * ) xSocket;
+       BaseType_t xResult;
+
+               if( prvValidSocket( pxSocket, FREERTOS_IPPROTO_TCP, pdTRUE ) == pdFALSE )
+               {
+                       /*_RB_ Is this comment correct?  The socket is not of a type that
+                       supports the listen() operation. */
+                       xResult = -pdFREERTOS_ERRNO_EOPNOTSUPP;
+               }
+               else if ( pxSocket->u.xTCP.ucTCPState != eESTABLISHED )
+               {
+                       /*_RB_ Is this comment correct?  The socket is not of a type that
+                       supports the listen() operation. */
+                       xResult = -pdFREERTOS_ERRNO_EOPNOTSUPP;
+               }
+               else
+               {
+                       pxSocket->u.xTCP.bits.bUserShutdown = pdTRUE_UNSIGNED;
+
+                       /* Let the IP-task perform the shutdown of the connection. */
+                       pxSocket->u.xTCP.usTimeout = 1u;
+                       xSendEventToIPTask( eTCPTimerEvent );
+                       xResult = 0;
+               }
+               (void) xHow;
+
+               return xResult;
+       }
+
+#endif /* ipconfigUSE_TCP */
+/*-----------------------------------------------------------*/
+
+#if( ipconfigUSE_TCP == 1 )
+
+       /*
+        * A TCP timer has expired, now check all TCP sockets for:
+        * - Active connect
+        * - Send a delayed ACK
+        * - Send new data
+        * - Send a keep-alive packet
+        * - Check for timeout (in non-connected states only)
+        */
+       TickType_t xTCPTimerCheck( BaseType_t xWillSleep )
+       {
+       FreeRTOS_Socket_t *pxSocket;
+       TickType_t xShortest = pdMS_TO_TICKS( ( TickType_t ) ipTCP_TIMER_PERIOD_MS );
+       TickType_t xNow = xTaskGetTickCount();
+       static TickType_t xLastTime = 0u;
+       TickType_t xDelta = xNow - xLastTime;
+       ListItem_t* pxEnd = ( ListItem_t * ) listGET_END_MARKER( &xBoundTCPSocketsList );
+       ListItem_t *pxIterator = ( ListItem_t * ) listGET_HEAD_ENTRY( &xBoundTCPSocketsList );
+
+               xLastTime = xNow;
+
+               if( xDelta == 0u )
+               {
+                       xDelta = 1u;
+               }
+
+               while( pxIterator != pxEnd )
+               {
+                       pxSocket = ( FreeRTOS_Socket_t * )listGET_LIST_ITEM_OWNER( pxIterator );
+                       pxIterator = ( ListItem_t * ) listGET_NEXT( pxIterator );
+
+                       /* Sockets with 'tmout == 0' do not need any regular attention. */
+                       if( pxSocket->u.xTCP.usTimeout == 0u )
+                       {
+                               continue;
+                       }
+
+                       if( xDelta < ( TickType_t ) pxSocket->u.xTCP.usTimeout )
+                       {
+                               pxSocket->u.xTCP.usTimeout = ( uint16_t ) ( ( ( TickType_t ) pxSocket->u.xTCP.usTimeout ) - xDelta );
+                       }
+                       else
+                       {
+                       int rc ;
+                               pxSocket->u.xTCP.usTimeout = 0u;
+                               rc = xTCPSocketCheck( pxSocket );
+
+                               /* Within this function, the socket might want to send a delayed
+                               ack or send out data or whatever it needs to do. */
+                               if( rc < 0 )
+                               {
+                                       /* Continue because the socket was deleted. */
+                                       continue;
+                               }
+                       }
+
+                       /* In xEventBits the driver may indicate that the socket has
+                       important events for the user.  These are only done just before the
+                       IP-task goes to sleep. */
+                       if( pxSocket->xEventBits != 0u )
+                       {
+                               if( xWillSleep != pdFALSE )
+                               {
+                                       /* The IP-task is about to go to sleep, so messages can be
+                                       sent to the socket owners. */
+                                       vSocketWakeUpUser( pxSocket );
+                               }
+                               else
+                               {
+                                       /* Or else make sure this will be called again to wake-up
+                                       the sockets' owner. */
+                                       xShortest = ( TickType_t ) 0;
+                               }
+                       }
+
+                       if( ( pxSocket->u.xTCP.usTimeout != 0u ) && ( xShortest > ( TickType_t ) pxSocket->u.xTCP.usTimeout ) )
+                       {
+                               xShortest = ( TickType_t ) pxSocket->u.xTCP.usTimeout;
+                       }
+               }
+
+               return xShortest;
+       }
+
+#endif /* ipconfigUSE_TCP */
+/*-----------------------------------------------------------*/
+
+#if( ipconfigUSE_TCP == 1 )
+
+       /*
+        * TCP: as multiple sockets may be bound to the same local port number
+        * looking up a socket is a little more complex:
+        * Both a local port, and a remote port and IP address are being used
+        * For a socket in listening mode, the remote port and IP address are both 0
+        */
+       FreeRTOS_Socket_t *pxTCPSocketLookup( uint32_t ulLocalIP, UBaseType_t uxLocalPort, uint32_t ulRemoteIP, UBaseType_t uxRemotePort )
+       {
+       ListItem_t *pxIterator;
+       FreeRTOS_Socket_t *pxResult = NULL, *pxListenSocket = NULL;
+       MiniListItem_t *pxEnd = ( MiniListItem_t* )listGET_END_MARKER( &xBoundTCPSocketsList );
+
+               /* Parameter not yet supported. */
+               ( void ) ulLocalIP;
+
+               for( pxIterator  = ( ListItem_t * ) listGET_NEXT( pxEnd );
+                        pxIterator != ( ListItem_t * ) pxEnd;
+                        pxIterator  = ( ListItem_t * ) listGET_NEXT( pxIterator ) )
+               {
+                       FreeRTOS_Socket_t *pxSocket = ( FreeRTOS_Socket_t * ) listGET_LIST_ITEM_OWNER( pxIterator );
+
+                       if( pxSocket->usLocalPort == ( uint16_t ) uxLocalPort )
+                       {
+                               if( pxSocket->u.xTCP.ucTCPState == eTCP_LISTEN )
+                               {
+                                       /* If this is a socket listening to uxLocalPort, remember it
+                                       in case there is no perfect match. */
+                                       pxListenSocket = pxSocket;
+                               }
+                               else if( ( pxSocket->u.xTCP.usRemotePort == ( uint16_t ) uxRemotePort ) && ( pxSocket->u.xTCP.ulRemoteIP == ulRemoteIP ) )
+                               {
+                                       /* For sockets not in listening mode, find a match with
+                                       xLocalPort, ulRemoteIP AND xRemotePort. */
+                                       pxResult = pxSocket;
+                                       break;
+                               }
+                       }
+               }
+               if( pxResult == NULL )
+               {
+                       /* An exact match was not found, maybe a listening socket was
+                       found. */
+                       pxResult = pxListenSocket;
+               }
+
+               return pxResult;
+       }
+
+#endif /* ipconfigUSE_TCP */
+/*-----------------------------------------------------------*/
+
+#if( ipconfigUSE_TCP == 1 )
+
+    const struct xSTREAM_BUFFER *FreeRTOS_get_rx_buf( Socket_t xSocket )
+    {
+    FreeRTOS_Socket_t *pxSocket = ( FreeRTOS_Socket_t * )xSocket;
+    struct xSTREAM_BUFFER *pxReturn = NULL;
+
+        /* Confirm that this is a TCP socket before dereferencing structure
+        member pointers. */
+        if( prvValidSocket( pxSocket, FREERTOS_IPPROTO_TCP, pdFALSE ) == pdTRUE )
+        {
+            pxReturn = pxSocket->u.xTCP.rxStream;
+        }
+
+        return pxReturn;
+    }
+
+#endif /* ipconfigUSE_TCP */
+/*-----------------------------------------------------------*/
+
+#if( ipconfigUSE_TCP == 1 )
+
+       static StreamBuffer_t *prvTCPCreateStream ( FreeRTOS_Socket_t *pxSocket, BaseType_t xIsInputStream )
+       {
+       StreamBuffer_t *pxBuffer;
+       size_t uxLength;
+       size_t uxSize;
+
+               /* Now that a stream is created, the maximum size is fixed before
+               creation, it could still be changed with setsockopt(). */
+               if( xIsInputStream != pdFALSE )
+               {
+                       uxLength = pxSocket->u.xTCP.uxRxStreamSize;
+
+                       if( pxSocket->u.xTCP.uxLittleSpace == 0ul )
+                       {
+                               pxSocket->u.xTCP.uxLittleSpace  = ( sock20_PERCENT * pxSocket->u.xTCP.uxRxStreamSize ) / sock100_PERCENT;
+                       }
+
+                       if( pxSocket->u.xTCP.uxEnoughSpace == 0ul )
+                       {
+                               pxSocket->u.xTCP.uxEnoughSpace = ( sock80_PERCENT * pxSocket->u.xTCP.uxRxStreamSize ) / sock100_PERCENT;
+                       }
+               }
+               else
+               {
+                       uxLength = pxSocket->u.xTCP.uxTxStreamSize;
+               }
+
+               /* Add an extra 4 (or 8) bytes. */
+               uxLength += sizeof( size_t );
+
+               /* And make the length a multiple of sizeof( size_t ). */
+               uxLength &= ~( sizeof( size_t ) - 1u );
+
+               uxSize = sizeof( *pxBuffer ) - sizeof( pxBuffer->ucArray ) + uxLength;
+
+               pxBuffer = ( StreamBuffer_t * )pvPortMallocLarge( uxSize );
+
+               if( pxBuffer == NULL )
+               {
+                       FreeRTOS_debug_printf( ( "prvTCPCreateStream: malloc failed\n" ) );
+                       pxSocket->u.xTCP.bits.bMallocError = pdTRUE_UNSIGNED;
+                       vTCPStateChange( pxSocket, eCLOSE_WAIT );
+               }
+               else
+               {
+                       /* Clear the markers of the stream */
+                       memset( pxBuffer, '\0', sizeof( *pxBuffer ) - sizeof( pxBuffer->ucArray ) );
+                       pxBuffer->LENGTH = ( size_t ) uxLength ;
+
+                       if( xTCPWindowLoggingLevel != 0 )
+                       {
+                               FreeRTOS_debug_printf( ( "prvTCPCreateStream: %cxStream created %lu bytes (total %lu)\n", xIsInputStream ? 'R' : 'T', uxLength, uxSize ) );
+                       }
+
+                       if( xIsInputStream != 0 )
+                       {
+                               pxSocket->u.xTCP.rxStream = pxBuffer;
+                       }
+                       else
+                       {
+                               pxSocket->u.xTCP.txStream = pxBuffer;
+                       }
+               }
+
+               return pxBuffer;
+       }
+
+#endif /* ipconfigUSE_TCP */
+/*-----------------------------------------------------------*/
+
+#if( ipconfigUSE_TCP == 1 )
+
+       /*
+        * Add data to the RxStream.  When uxOffset > 0, data has come in out-of-order
+        * and will be put in front of the head so it can not be popped by the user.
+        */
+       int32_t lTCPAddRxdata( FreeRTOS_Socket_t *pxSocket, size_t uxOffset, const uint8_t *pcData, uint32_t ulByteCount )
+       {
+       StreamBuffer_t *pxStream = pxSocket->u.xTCP.rxStream;
+       int32_t xResult;
+       #if( ipconfigUSE_CALLBACKS == 1 )
+               BaseType_t bHasHandler = ipconfigIS_VALID_PROG_ADDRESS( pxSocket->u.xTCP.pxHandleReceive );
+               const uint8_t *pucBuffer = NULL;
+       #endif /* ipconfigUSE_CALLBACKS */
+
+               /* int32_t uxStreamBufferAdd( pxBuffer, uxOffset, pucData, aCount )
+               if( pucData != NULL ) copy data the the buffer
+               if( pucData == NULL ) no copying, just advance rxHead
+               if( uxOffset != 0 ) Just store data which has come out-of-order
+               if( uxOffset == 0 ) Also advance rxHead */
+               if( pxStream == NULL )
+               {
+                       pxStream = prvTCPCreateStream( pxSocket, pdTRUE );
+                       if( pxStream == NULL )
+                       {
+                               return -1;
+                       }
+               }
+
+               #if( ipconfigUSE_CALLBACKS == 1 )
+               {
+                       if( ( bHasHandler != pdFALSE ) && ( uxStreamBufferGetSize( pxStream ) == 0u ) && ( uxOffset == 0ul ) && ( pcData != NULL ) )
+                       {
+                               /* Data can be passed directly to the user */
+                               pucBuffer = pcData;
+
+                               /* Zero-copy for call-back: no need to add the bytes to the
+                               stream, only the pointer will be advanced by uxStreamBufferAdd(). */
+                               pcData = NULL;
+                       }
+               }
+               #endif /* ipconfigUSE_CALLBACKS */
+
+               xResult = ( int32_t ) uxStreamBufferAdd( pxStream, uxOffset, pcData, ( size_t ) ulByteCount );
+
+               #if( ipconfigHAS_DEBUG_PRINTF != 0 )
+               {
+                       if( xResult != ( int32_t ) ulByteCount )
+                       {
+                               FreeRTOS_debug_printf( ( "lTCPAddRxdata: at %ld: %ld/%lu bytes (tail %lu head %lu space %lu front %lu)\n",
+                                       uxOffset, xResult, ulByteCount,
+                                       pxStream->uxTail,
+                                       pxStream->uxHead,
+                                       uxStreamBufferFrontSpace( pxStream ),
+                                       pxStream->uxFront ) );
+                       }
+               }
+               #endif /* ipconfigHAS_DEBUG_PRINTF */
+
+               if( uxOffset == 0u )
+               {
+                       /* Data is being added to rxStream at the head (offs = 0) */
+                       #if( ipconfigUSE_CALLBACKS == 1 )
+                               if( bHasHandler != pdFALSE )
+                               {
+                                       /* The socket owner has installed an OnReceive handler. Pass the
+                                       Rx data, without copying from the rxStream, to the user. */
+                                       for (;;)
+                                       {
+                                               uint8_t *ucReadPtr = NULL;
+                                               uint32_t ulCount;
+                                               if( pucBuffer != NULL )
+                                               {
+                                                       ucReadPtr = ( uint8_t * )pucBuffer;
+                                                       ulCount = ulByteCount;
+                                                       pucBuffer = NULL;
+                                               }
+                                               else
+                                               {
+                                                       ulCount = ( uint32_t ) uxStreamBufferGetPtr( pxStream, &( ucReadPtr ) );
+                                               }
+
+                                               if( ulCount == 0ul )
+                                               {
+                                                       break;
+                                               }
+
+                                               pxSocket->u.xTCP.pxHandleReceive( ( Socket_t )pxSocket, ( void* )ucReadPtr, ( size_t ) ulCount );
+                                               uxStreamBufferGet( pxStream, 0ul, NULL, ( size_t ) ulCount, pdFALSE );
+                                       }
+                               } else
+                       #endif /* ipconfigUSE_CALLBACKS */
+                       {
+                               /* See if running out of space. */
+                               if( pxSocket->u.xTCP.bits.bLowWater == pdFALSE_UNSIGNED )
+                               {
+                                       size_t uxFrontSpace = uxStreamBufferFrontSpace( pxSocket->u.xTCP.rxStream );
+                                       if( uxFrontSpace <= pxSocket->u.xTCP.uxLittleSpace  )
+                                       {
+                                               pxSocket->u.xTCP.bits.bLowWater = pdTRUE_UNSIGNED;
+                                               pxSocket->u.xTCP.bits.bWinChange = pdTRUE_UNSIGNED;
+
+                                               /* bLowWater was reached, send the changed window size. */
+                                               pxSocket->u.xTCP.usTimeout = 1u;
+                                               xSendEventToIPTask( eTCPTimerEvent );
+                                       }
+                               }
+
+                               /* New incoming data is available, wake up the user.   User's
+                               semaphores will be set just before the IP-task goes asleep. */
+                               pxSocket->xEventBits |= eSOCKET_RECEIVE;
+
+                               #if ipconfigSUPPORT_SELECT_FUNCTION == 1
+                               {
+                                       if( ( pxSocket->xSelectBits & eSELECT_READ ) != 0 )
+                                       {
+                                               pxSocket->xEventBits |= ( eSELECT_READ << SOCKET_EVENT_BIT_COUNT );
+                                       }
+                               }
+                               #endif
+                       }
+               }
+
+               return xResult;
+       }
+
+#endif /* ipconfigUSE_TCP */
+/*-----------------------------------------------------------*/
+
+#if( ipconfigUSE_TCP == 1 )
+
+       /* Function to get the remote address and IP port */
+       BaseType_t FreeRTOS_GetRemoteAddress( Socket_t xSocket, struct freertos_sockaddr *pxAddress )
+       {
+       FreeRTOS_Socket_t *pxSocket = ( FreeRTOS_Socket_t * ) xSocket;
+       BaseType_t xResult;
+
+               if( pxSocket->ucProtocol != ( uint8_t ) FREERTOS_IPPROTO_TCP )
+               {
+                       xResult = -pdFREERTOS_ERRNO_EINVAL;
+               }
+               else
+               {
+                       /* BSD style sockets communicate IP and port addresses in network
+                       byte order.
+
+                       IP address of remote machine. */
+                       pxAddress->sin_addr = FreeRTOS_htonl ( pxSocket->u.xTCP.ulRemoteIP );
+
+                       /* Port on remote machine. */
+                       pxAddress->sin_port = FreeRTOS_htons ( pxSocket->u.xTCP.usRemotePort );
+
+                       xResult = ( BaseType_t ) sizeof( ( *pxAddress ) );
+               }
+
+               return xResult;
+       }
+
+#endif /* ipconfigUSE_TCP */
+
+/*-----------------------------------------------------------*/
+
+#if( ipconfigUSE_TCP == 1 )
+
+       /* Returns the number of bytes that may be added to txStream */
+       BaseType_t FreeRTOS_maywrite( Socket_t xSocket )
+       {
+       FreeRTOS_Socket_t *pxSocket = ( FreeRTOS_Socket_t * ) xSocket;
+       BaseType_t xResult;
+
+               if( pxSocket->ucProtocol != ( uint8_t ) FREERTOS_IPPROTO_TCP )
+               {
+                       xResult = -pdFREERTOS_ERRNO_EINVAL;
+               }
+               else if( pxSocket->u.xTCP.ucTCPState != eESTABLISHED )
+               {
+                       if( ( pxSocket->u.xTCP.ucTCPState < eCONNECT_SYN ) || ( pxSocket->u.xTCP.ucTCPState > eESTABLISHED ) )
+                       {
+                               xResult = -1;
+                       }
+                       else
+                       {
+                               xResult = 0;
+                       }
+               }
+               else if( pxSocket->u.xTCP.txStream == NULL )
+               {
+                       xResult = ( BaseType_t ) pxSocket->u.xTCP.uxTxStreamSize;
+               }
+               else
+               {
+                       xResult = ( BaseType_t ) uxStreamBufferGetSpace( pxSocket->u.xTCP.txStream );
+               }
+
+               return xResult;
+       }
+
+#endif /* ipconfigUSE_TCP */
+/*-----------------------------------------------------------*/
+
+#if( ipconfigUSE_TCP ==1 )
+
+       BaseType_t FreeRTOS_tx_space( Socket_t xSocket )
+       {
+       FreeRTOS_Socket_t *pxSocket = ( FreeRTOS_Socket_t * ) xSocket;
+       BaseType_t xReturn;
+
+               if( pxSocket->ucProtocol != ( uint8_t ) FREERTOS_IPPROTO_TCP )
+               {
+                       xReturn = -pdFREERTOS_ERRNO_EINVAL;
+               }
+               else
+               {
+                       if( pxSocket->u.xTCP.txStream != NULL )
+                       {
+                               xReturn = ( BaseType_t ) uxStreamBufferGetSpace ( pxSocket->u.xTCP.txStream );
+                       }
+                       else
+                       {
+                               xReturn = ( BaseType_t ) pxSocket->u.xTCP.uxTxStreamSize;
+                       }
+               }
+
+               return xReturn;
+       }
+
+#endif /* ipconfigUSE_TCP */
+/*-----------------------------------------------------------*/
+
+#if( ipconfigUSE_TCP == 1 )
+
+       BaseType_t FreeRTOS_tx_size( Socket_t xSocket )
+       {
+       FreeRTOS_Socket_t *pxSocket = ( FreeRTOS_Socket_t * ) xSocket;
+       BaseType_t xReturn;
+
+               if( pxSocket->ucProtocol != ( uint8_t ) FREERTOS_IPPROTO_TCP )
+               {
+                       xReturn = -pdFREERTOS_ERRNO_EINVAL;
+               }
+               else
+               {
+                       if( pxSocket->u.xTCP.txStream != NULL )
+                       {
+                               xReturn = ( BaseType_t ) uxStreamBufferGetSize ( pxSocket->u.xTCP.txStream );
+                       }
+                       else
+                       {
+                               xReturn = 0;
+                       }
+               }
+
+               return xReturn;
+       }
+
+#endif /* ipconfigUSE_TCP */
+/*-----------------------------------------------------------*/
+
+#if( ipconfigUSE_TCP == 1 )
+
+       /* Returns pdTRUE if TCP socket is connected. */
+       BaseType_t FreeRTOS_issocketconnected( Socket_t xSocket )
+       {
+       FreeRTOS_Socket_t *pxSocket = ( FreeRTOS_Socket_t * ) xSocket;
+       BaseType_t xReturn = pdFALSE;
+
+               if( pxSocket->ucProtocol != ( uint8_t ) FREERTOS_IPPROTO_TCP )
+               {
+                       xReturn = -pdFREERTOS_ERRNO_EINVAL;
+               }
+               else
+               {
+                       if( pxSocket->u.xTCP.ucTCPState >= eESTABLISHED )
+                       {
+                               if( pxSocket->u.xTCP.ucTCPState < eCLOSE_WAIT )
+                               {
+                                       xReturn = pdTRUE;
+                               }
+                       }
+               }
+
+               return xReturn;
+       }
+
+#endif /* ipconfigUSE_TCP */
+/*-----------------------------------------------------------*/
+
+#if( ipconfigUSE_TCP == 1 )
+
+       /* returns the actual size of MSS being used */
+       BaseType_t FreeRTOS_mss( Socket_t xSocket )
+       {
+       FreeRTOS_Socket_t *pxSocket = ( FreeRTOS_Socket_t * ) xSocket;
+       BaseType_t xReturn;
+
+               if( pxSocket->ucProtocol != ( uint8_t ) FREERTOS_IPPROTO_TCP )
+               {
+                       xReturn = -pdFREERTOS_ERRNO_EINVAL;
+               }
+               else
+               {
+                       /* usCurMSS is declared as uint16_t to save space.  FreeRTOS_mss()
+                       will often be used in signed native-size expressions cast it to
+                       BaseType_t. */
+                       xReturn = ( BaseType_t ) ( pxSocket->u.xTCP.usCurMSS );
+               }
+
+               return xReturn;
+       }
+
+#endif /* ipconfigUSE_TCP */
+/*-----------------------------------------------------------*/
+
+#if( ipconfigUSE_TCP == 1 )
+
+       /* HT: for internal use only: return the connection status */
+       BaseType_t FreeRTOS_connstatus( Socket_t xSocket )
+       {
+       FreeRTOS_Socket_t *pxSocket = ( FreeRTOS_Socket_t * ) xSocket;
+       BaseType_t xReturn;
+
+               if( pxSocket->ucProtocol != ( uint8_t ) FREERTOS_IPPROTO_TCP )
+               {
+                       xReturn = -pdFREERTOS_ERRNO_EINVAL;
+               }
+               else
+               {
+                       /* Cast it to BaseType_t */
+                       xReturn = ( BaseType_t ) ( pxSocket->u.xTCP.ucTCPState );
+               }
+
+               return xReturn;
+       }
+
+#endif /* ipconfigUSE_TCP */
+/*-----------------------------------------------------------*/
+
+#if( ipconfigUSE_TCP == 1 )
+
+       /*
+        * Returns the number of bytes which can be read.
+        */
+       BaseType_t FreeRTOS_rx_size( Socket_t xSocket )
+       {
+       FreeRTOS_Socket_t *pxSocket = ( FreeRTOS_Socket_t * ) xSocket;
+       BaseType_t xReturn;
+
+               if( pxSocket->ucProtocol != ( uint8_t ) FREERTOS_IPPROTO_TCP )
+               {
+                       xReturn = -pdFREERTOS_ERRNO_EINVAL;
+               }
+               else if( pxSocket->u.xTCP.rxStream != NULL )
+               {
+                       xReturn = ( BaseType_t ) uxStreamBufferGetSize( pxSocket->u.xTCP.rxStream );
+               }
+               else
+               {
+                       xReturn = 0;
+               }
+
+               return xReturn;
+       }
+
+#endif /* ipconfigUSE_TCP */
+/*-----------------------------------------------------------*/
+
+#if( ipconfigUSE_TCP == 1 )
+
+       void FreeRTOS_netstat( void )
+       {
+       IPStackEvent_t xAskEvent;
+
+               /* Ask the IP-task to call vTCPNetStat()
+                * to avoid accessing xBoundTCPSocketsList
+                */
+               xAskEvent.eEventType = eTCPNetStat;
+               xAskEvent.pvData = ( void * ) NULL;
+               xSendEventStructToIPTask( &xAskEvent, 1000u );
+       }
+
+#endif /* ipconfigUSE_TCP */
+/*-----------------------------------------------------------*/
+
+#if( ( ipconfigHAS_PRINTF != 0 ) && ( ipconfigUSE_TCP == 1 ) )
+
+       void vTCPNetStat( void )
+       {
+       /* Show a simple listing of all created sockets and their connections */
+       ListItem_t *pxIterator;
+       BaseType_t count = 0;
+
+               if( listLIST_IS_INITIALISED( &xBoundTCPSocketsList ) == pdFALSE )
+               {
+                       FreeRTOS_printf( ( "PLUS-TCP not initialized\n" ) );
+               }
+               else
+               {
+                       FreeRTOS_printf( ( "Prot Port IP-Remote    : Port  R/T Status      Alive  tmout Child\n" ) );
+                       for( pxIterator  = ( ListItem_t * ) listGET_HEAD_ENTRY( &xBoundTCPSocketsList );
+                                pxIterator != ( ListItem_t * ) listGET_END_MARKER( &xBoundTCPSocketsList );
+                                pxIterator  = ( ListItem_t * ) listGET_NEXT( pxIterator ) )
+                       {
+                               FreeRTOS_Socket_t *pxSocket = ( FreeRTOS_Socket_t * ) listGET_LIST_ITEM_OWNER( pxIterator );
+                               #if( ipconfigTCP_KEEP_ALIVE == 1 )
+                                       TickType_t age = xTaskGetTickCount() - pxSocket->u.xTCP.xLastAliveTime;
+                               #else
+                                       TickType_t age = 0u;
+                               #endif
+                               #if( ipconfigUSE_CALLBACKS == 1 )
+                                       void *pxHandleReceive = (void*)pxSocket->u.xTCP.pxHandleReceive;
+                               #else
+                                       void *pxHandleReceive = (void*)NULL;
+                               #endif
+                               char ucChildText[16] = "";
+                               if (pxSocket->u.xTCP.ucTCPState == eTCP_LISTEN)
+                               {
+                                       const int32_t copied_len = snprintf( ucChildText, sizeof( ucChildText ), " %d/%d",
+                                               ( int ) pxSocket->u.xTCP.usChildCount,
+                                               ( 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 ) );
+                               }
+                               FreeRTOS_printf( ( "TCP %5d %-16lxip:%5d %d/%d %-13.13s %6lu %6u%s\n",
+                                       pxSocket->usLocalPort,          /* Local port on this machine */
+                                       pxSocket->u.xTCP.ulRemoteIP,    /* IP address of remote machine */
+                                       pxSocket->u.xTCP.usRemotePort,  /* Port on remote machine */
+                                       pxSocket->u.xTCP.rxStream != NULL,
+                                       pxSocket->u.xTCP.txStream != NULL,
+                                       FreeRTOS_GetTCPStateName( pxSocket->u.xTCP.ucTCPState ),
+                                       (age > 999999 ? 999999 : age), /* Format 'age' for printing */
+                                       pxSocket->u.xTCP.usTimeout,
+                                       ucChildText ) );
+                                       /* Remove compiler warnings if FreeRTOS_debug_printf() is not defined. */
+                                       ( void ) pxHandleReceive;
+                               count++;
+                       }
+
+                       for( pxIterator  = ( ListItem_t * ) listGET_HEAD_ENTRY( &xBoundUDPSocketsList );
+                                pxIterator != ( ListItem_t * ) listGET_END_MARKER( &xBoundUDPSocketsList );
+                                pxIterator  = ( ListItem_t * ) listGET_NEXT( pxIterator ) )
+                       {
+                               /* Local port on this machine */
+                               FreeRTOS_printf( ( "UDP Port %5u\n",
+                                       FreeRTOS_ntohs( listGET_LIST_ITEM_VALUE( pxIterator ) ) ) );
+                               count++;
+                       }
+
+                       FreeRTOS_printf( ( "FreeRTOS_netstat: %lu sockets %lu < %lu < %d buffers free\n",
+                               count,
+                               uxGetMinimumFreeNetworkBuffers( ),
+                               uxGetNumberOfFreeNetworkBuffers( ),
+                               ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ) );
+               }
+       }
+
+#endif /* ( ( ipconfigHAS_PRINTF != 0 ) && ( ipconfigUSE_TCP == 1 ) ) */
+/*-----------------------------------------------------------*/
+
+#if( ipconfigSUPPORT_SELECT_FUNCTION == 1 )
+
+       void vSocketSelect( SocketSelect_t *pxSocketSet )
+       {
+       BaseType_t xRound;
+       EventBits_t xSocketBits, xBitsToClear;
+       #if ipconfigUSE_TCP == 1
+               BaseType_t xLastRound = 1;
+       #else
+               BaseType_t xLastRound = 0;
+       #endif
+
+               /* These flags will be switched on after checking the socket status. */
+               EventBits_t xGroupBits = 0;
+               pxSocketSet->pxSocket = NULL;
+
+               for( xRound = 0; xRound <= xLastRound; xRound++ )
+               {
+                       const ListItem_t *pxIterator;
+                       const MiniListItem_t *pxEnd;
+                       if( xRound == 0 )
+                       {
+                               pxEnd = ( const MiniListItem_t* )listGET_END_MARKER( &xBoundUDPSocketsList );
+                       }
+               #if ipconfigUSE_TCP == 1
+                       else
+                       {
+                               pxEnd = ( const MiniListItem_t* )listGET_END_MARKER( &xBoundTCPSocketsList );
+                       }
+               #endif /* ipconfigUSE_TCP == 1 */
+                       for( pxIterator = ( const ListItem_t * ) ( listGET_NEXT( pxEnd ) );
+                                pxIterator != ( const ListItem_t * ) pxEnd;
+                                pxIterator = ( const ListItem_t * ) listGET_NEXT( pxIterator ) )
+                       {
+                               FreeRTOS_Socket_t *pxSocket = ( FreeRTOS_Socket_t * ) listGET_LIST_ITEM_OWNER( pxIterator );
+                               if( pxSocket->pxSocketSet != pxSocketSet )
+                               {
+                                       /* Socket does not belong to this select group. */
+                                       continue;
+                               }
+                               xSocketBits = 0;
+
+                               #if( ipconfigUSE_TCP == 1 )
+                                       if( pxSocket->ucProtocol == FREERTOS_IPPROTO_TCP )
+                                       {
+                                               /* Check if the socket has already been accepted by the
+                                               owner.  If not, it is useless to return it from a
+                                               select(). */
+                                               BaseType_t bAccepted = pdFALSE;
+
+                                               if( pxSocket->u.xTCP.bits.bPassQueued == pdFALSE_UNSIGNED )
+                                               {
+                                                       if( pxSocket->u.xTCP.bits.bPassAccept == pdFALSE_UNSIGNED )
+                                                       {
+                                                               bAccepted = pdTRUE;
+                                                       }
+                                               }
+
+                                               /* Is the set owner interested in READ events? */
+                                               if( ( pxSocket->xSelectBits & eSELECT_READ ) != 0 )
+                                               {
+                                                       if( pxSocket->u.xTCP.ucTCPState == eTCP_LISTEN )
+                                                       {
+                                                               if( ( pxSocket->u.xTCP.pxPeerSocket != NULL ) && ( pxSocket->u.xTCP.pxPeerSocket->u.xTCP.bits.bPassAccept != 0 ) )
+                                                               {
+                                                                       xSocketBits |= eSELECT_READ;
+                                                               }
+                                                       }
+                                                       else if( ( pxSocket->u.xTCP.bits.bReuseSocket != pdFALSE_UNSIGNED ) && ( pxSocket->u.xTCP.bits.bPassAccept != pdFALSE_UNSIGNED ) )
+                                                       {
+                                                               /* This socket has the re-use flag. After connecting it turns into
+                                                               aconnected socket. Set the READ event, so that accept() will be called. */
+                                                               xSocketBits |= eSELECT_READ;
+                                                       }
+                                                       else if( ( bAccepted != 0 ) && ( FreeRTOS_recvcount( pxSocket ) > 0 ) )
+                                                       {
+                                                               xSocketBits |= eSELECT_READ;
+                                                       }
+                                               }
+                                               /* Is the set owner interested in EXCEPTION events? */
+                                               if( ( pxSocket->xSelectBits & eSELECT_EXCEPT ) != 0 )
+                                               {
+                                                       if( ( pxSocket->u.xTCP.ucTCPState == eCLOSE_WAIT ) || ( pxSocket->u.xTCP.ucTCPState == eCLOSED ) )
+                                                       {
+                                                               xSocketBits |= eSELECT_EXCEPT;
+                                                       }
+                                               }
+
+                                               /* Is the set owner interested in WRITE events? */
+                                               if( ( pxSocket->xSelectBits & eSELECT_WRITE ) != 0 )
+                                               {
+                                                       BaseType_t bMatch = pdFALSE;
+
+                                                       if( bAccepted != 0 )
+                                                       {
+                                                               if( FreeRTOS_tx_space( pxSocket ) > 0 )
+                                                               {
+                                                                       bMatch = pdTRUE;
+                                                               }
+                                                       }
+
+                                                       if( bMatch == pdFALSE )
+                                                       {
+                                                               if( ( pxSocket->u.xTCP.bits.bConnPrepared != pdFALSE_UNSIGNED ) &&
+                                                                       ( pxSocket->u.xTCP.ucTCPState >= eESTABLISHED ) &&
+                                                                       ( pxSocket->u.xTCP.bits.bConnPassed == pdFALSE_UNSIGNED ) )
+                                                               {
+                                                                       pxSocket->u.xTCP.bits.bConnPassed = pdTRUE_UNSIGNED;
+                                                                       bMatch = pdTRUE;
+                                                               }
+                                                       }
+
+                                                       if( bMatch != pdFALSE )
+                                                       {
+                                                               xSocketBits |= eSELECT_WRITE;
+                                                       }
+                                               }
+                                       }
+                                       else
+                               #endif /* ipconfigUSE_TCP == 1 */
+                               {
+                                       /* Select events for UDP are simpler. */
+                                       if( ( ( pxSocket->xSelectBits & eSELECT_READ ) != 0 ) &&
+                                               ( listCURRENT_LIST_LENGTH( &( pxSocket->u.xUDP.xWaitingPacketsList ) ) > 0U ) )
+                                       {
+                                               xSocketBits |= eSELECT_READ;
+                                       }
+                                       /* The WRITE and EXCEPT bits are not used for UDP */
+                               }       /* if( pxSocket->ucProtocol == FREERTOS_IPPROTO_TCP ) */
+
+                               /* Each socket keeps its own event flags, which are looked-up
+                               by FreeRTOS_FD_ISSSET() */
+                               pxSocket->xSocketBits = xSocketBits;
+
+                               /* The ORed value will be used to set the bits in the event
+                               group. */
+                               xGroupBits |= xSocketBits;
+
+                       }       /* for( pxIterator ... ) */
+               }       /* for( xRound = 0; xRound <= xLastRound; xRound++ ) */
+
+               xBitsToClear = xEventGroupGetBits( pxSocketSet->xSelectGroup );
+
+               /* Now set the necessary bits. */
+               xBitsToClear = ( xBitsToClear & ~xGroupBits ) & eSELECT_ALL;
+
+               #if( ipconfigSUPPORT_SIGNALS != 0 )
+               {
+                       /* Maybe the socketset was signalled, but don't
+                       clear the 'eSELECT_INTR' bit here, as it will be used
+                       and cleared in FreeRTOS_select(). */
+                       xBitsToClear &= ( EventBits_t ) ~eSELECT_INTR;
+               }
+               #endif /* ipconfigSUPPORT_SIGNALS */
+
+               if( xBitsToClear != 0 )
+               {
+                       xEventGroupClearBits( pxSocketSet->xSelectGroup, xBitsToClear );
+               }
+
+               /* Now include eSELECT_CALL_IP to wakeup the caller. */
+               xEventGroupSetBits( pxSocketSet->xSelectGroup, xGroupBits | eSELECT_CALL_IP );
+       }
+
+#endif /* ipconfigSUPPORT_SELECT_FUNCTION == 1 */
+/*-----------------------------------------------------------*/
+
+#if( ipconfigSUPPORT_SIGNALS != 0 )
+
+       /* Send a signal to the task which reads from this socket. */
+       BaseType_t FreeRTOS_SignalSocket( Socket_t xSocket )
+       {
+       FreeRTOS_Socket_t *pxSocket = ( FreeRTOS_Socket_t * ) xSocket;
+       BaseType_t xReturn;
+
+               if( pxSocket == NULL )
+               {
+                       xReturn = -pdFREERTOS_ERRNO_EINVAL;
+               }
+               else
+       #if( ipconfigSUPPORT_SELECT_FUNCTION == 1 )
+               if( ( pxSocket->pxSocketSet != NULL ) && ( pxSocket->pxSocketSet->xSelectGroup != NULL ) )
+               {
+                       xEventGroupSetBits( pxSocket->pxSocketSet->xSelectGroup, eSELECT_INTR );
+                       xReturn = 0;
+               }
+               else
+       #endif /* ipconfigSUPPORT_SELECT_FUNCTION */
+               if( pxSocket->xEventGroup != NULL )
+               {
+                       xEventGroupSetBits( pxSocket->xEventGroup, eSOCKET_INTR );
+                       xReturn = 0;
+               }
+               else
+               {
+                       xReturn = -pdFREERTOS_ERRNO_EINVAL;
+               }
+
+               return xReturn;
+       }
+
+#endif /* ipconfigSUPPORT_SIGNALS */
+/*-----------------------------------------------------------*/
+
+#if( ipconfigSUPPORT_SIGNALS != 0 )
+
+       /* Send a signal to the task which reads from this socket (FromISR version). */
+       BaseType_t FreeRTOS_SignalSocketFromISR( Socket_t xSocket, BaseType_t *pxHigherPriorityTaskWoken )
+       {
+       FreeRTOS_Socket_t *pxSocket = ( FreeRTOS_Socket_t * ) xSocket;
+       BaseType_t xReturn;
+       IPStackEvent_t xEvent;
+       extern QueueHandle_t xNetworkEventQueue;
+
+               configASSERT( pxSocket != NULL );
+               configASSERT( pxSocket->ucProtocol == FREERTOS_IPPROTO_TCP );
+               configASSERT( pxSocket->xEventGroup );
+
+               xEvent.eEventType = eSocketSignalEvent;
+               xEvent.pvData = ( void * )pxSocket;
+
+               /* The IP-task will call FreeRTOS_SignalSocket for this socket. */
+               xReturn = xQueueSendToBackFromISR( xNetworkEventQueue, &xEvent, pxHigherPriorityTaskWoken );
+
+               return xReturn;
+       }
+
+#endif /* ipconfigSUPPORT_SIGNALS */
+/*-----------------------------------------------------------*/
index 53a5c69c689584e7226fb53794f539522067d817..0bda99317f12974e4584c36892a2449f1cf94fd1 100644 (file)
-/*\r
- * FreeRTOS+TCP V2.2.0\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://aws.amazon.com/freertos\r
- * http://www.FreeRTOS.org\r
- */\r
-\r
-/* Standard includes. */\r
-#include <stdint.h>\r
-\r
-/* FreeRTOS includes. */\r
-#include "FreeRTOS.h"\r
-#include "task.h"\r
-#include "semphr.h"\r
-\r
-/* FreeRTOS+TCP includes. */\r
-#include "FreeRTOS_UDP_IP.h"\r
-#include "FreeRTOS_IP.h"\r
-#include "FreeRTOS_Sockets.h"\r
-#include "FreeRTOS_IP_Private.h"\r
-\r
-/*\r
- * uxStreamBufferAdd( )\r
- * Adds data to a stream buffer.  If uxOffset > 0, data will be written at\r
- * an offset from uxHead while uxHead will not be moved yet.  This possibility\r
- * will be used when TCP data is received while earlier data is still missing.\r
- * If 'pucData' equals NULL, the function is called to advance 'uxHead' only.\r
- */\r
-size_t uxStreamBufferAdd( StreamBuffer_t *pxBuffer, size_t uxOffset, const uint8_t *pucData, size_t uxCount )\r
-{\r
-size_t uxSpace, uxNextHead, uxFirst;\r
-\r
-       uxSpace = uxStreamBufferGetSpace( pxBuffer );\r
-\r
-       /* If uxOffset > 0, items can be placed in front of uxHead */\r
-       if( uxSpace > uxOffset )\r
-       {\r
-               uxSpace -= uxOffset;\r
-       }\r
-       else\r
-       {\r
-               uxSpace = 0u;\r
-       }\r
-\r
-       /* The number of bytes that can be written is the minimum of the number of\r
-       bytes requested and the number available. */\r
-       uxCount = FreeRTOS_min_uint32( uxSpace, uxCount );\r
-\r
-       if( uxCount != 0u )\r
-       {\r
-               uxNextHead = pxBuffer->uxHead;\r
-\r
-               if( uxOffset != 0u )\r
-               {\r
-                       /* ( uxOffset > 0 ) means: write in front if the uxHead marker */\r
-                       uxNextHead += uxOffset;\r
-                       if( uxNextHead >= pxBuffer->LENGTH )\r
-                       {\r
-                               uxNextHead -= pxBuffer->LENGTH;\r
-                       }\r
-               }\r
-\r
-               if( pucData != NULL )\r
-               {\r
-                       /* Calculate the number of bytes that can be added in the first\r
-                       write - which may be less than the total number of bytes that need\r
-                       to be added if the buffer will wrap back to the beginning. */\r
-                       uxFirst = FreeRTOS_min_uint32( pxBuffer->LENGTH - uxNextHead, uxCount );\r
-\r
-                       /* Write as many bytes as can be written in the first write. */\r
-                       memcpy( ( void* ) ( pxBuffer->ucArray + uxNextHead ), pucData, uxFirst );\r
-\r
-                       /* If the number of bytes written was less than the number that\r
-                       could be written in the first write... */\r
-                       if( uxCount > uxFirst )\r
-                       {\r
-                               /* ...then write the remaining bytes to the start of the\r
-                               buffer. */\r
-                               memcpy( ( void * )pxBuffer->ucArray, pucData + uxFirst, uxCount - uxFirst );\r
-                       }\r
-               }\r
-\r
-               if( uxOffset == 0u )\r
-               {\r
-                       /* ( uxOffset == 0 ) means: write at uxHead position */\r
-                       uxNextHead += uxCount;\r
-                       if( uxNextHead >= pxBuffer->LENGTH )\r
-                       {\r
-                               uxNextHead -= pxBuffer->LENGTH;\r
-                       }\r
-                       pxBuffer->uxHead = uxNextHead;\r
-               }\r
-\r
-               if( xStreamBufferLessThenEqual( pxBuffer, pxBuffer->uxFront, uxNextHead ) != pdFALSE )\r
-               {\r
-                       /* Advance the front pointer */\r
-                       pxBuffer->uxFront = uxNextHead;\r
-               }\r
-       }\r
-\r
-       return uxCount;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-/*\r
- * uxStreamBufferGet( )\r
- * 'uxOffset' can be used to read data located at a certain offset from 'lTail'.\r
- * If 'pucData' equals NULL, the function is called to advance 'lTail' only.\r
- * if 'xPeek' is pdTRUE, or if 'uxOffset' is non-zero, the 'lTail' pointer will\r
- * not be advanced.\r
- */\r
-size_t uxStreamBufferGet( StreamBuffer_t *pxBuffer, size_t uxOffset, uint8_t *pucData, size_t uxMaxCount, BaseType_t xPeek )\r
-{\r
-size_t uxSize, uxCount, uxFirst, uxNextTail;\r
-\r
-       /* How much data is available? */\r
-       uxSize = uxStreamBufferGetSize( pxBuffer );\r
-\r
-       if( uxSize > uxOffset )\r
-       {\r
-               uxSize -= uxOffset;\r
-       }\r
-       else\r
-       {\r
-               uxSize = 0u;\r
-       }\r
-\r
-       /* Use the minimum of the wanted bytes and the available bytes. */\r
-       uxCount = FreeRTOS_min_uint32( uxSize, uxMaxCount );\r
-\r
-       if( uxCount > 0u )\r
-       {\r
-               uxNextTail = pxBuffer->uxTail;\r
-\r
-               if( uxOffset != 0u )\r
-               {\r
-                       uxNextTail += uxOffset;\r
-                       if( uxNextTail >= pxBuffer->LENGTH )\r
-                       {\r
-                               uxNextTail -= pxBuffer->LENGTH;\r
-                       }\r
-               }\r
-\r
-               if( pucData != NULL )\r
-               {\r
-                       /* Calculate the number of bytes that can be read - which may be\r
-                       less than the number wanted if the data wraps around to the start of\r
-                       the buffer. */\r
-                       uxFirst = FreeRTOS_min_uint32( pxBuffer->LENGTH - uxNextTail, uxCount );\r
-\r
-                       /* Obtain the number of bytes it is possible to obtain in the first\r
-                       read. */\r
-                       memcpy( pucData, pxBuffer->ucArray + uxNextTail, uxFirst );\r
-\r
-                       /* If the total number of wanted bytes is greater than the number\r
-                       that could be read in the first read... */\r
-                       if( uxCount > uxFirst )\r
-                       {\r
-                               /*...then read the remaining bytes from the start of the buffer. */\r
-                               memcpy( pucData + uxFirst, pxBuffer->ucArray, uxCount - uxFirst );\r
-                       }\r
-               }\r
-\r
-               if( ( xPeek == pdFALSE ) && ( uxOffset == 0UL ) )\r
-               {\r
-                       /* Move the tail pointer to effecively remove the data read from\r
-                       the buffer. */\r
-                       uxNextTail += uxCount;\r
-\r
-                       if( uxNextTail >= pxBuffer->LENGTH )\r
-                       {\r
-                               uxNextTail -= pxBuffer->LENGTH;\r
-                       }\r
-\r
-                       pxBuffer->uxTail = uxNextTail;\r
-               }\r
-       }\r
-\r
-       return uxCount;\r
-}\r
-\r
+/*
+ * FreeRTOS+TCP V2.2.0
+ * 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
+ */
+
+/* Standard includes. */
+#include <stdint.h>
+
+/* FreeRTOS includes. */
+#include "FreeRTOS.h"
+#include "task.h"
+#include "semphr.h"
+
+/* FreeRTOS+TCP includes. */
+#include "FreeRTOS_UDP_IP.h"
+#include "FreeRTOS_IP.h"
+#include "FreeRTOS_Sockets.h"
+#include "FreeRTOS_IP_Private.h"
+
+/*
+ * uxStreamBufferAdd( )
+ * Adds data to a stream buffer.  If uxOffset > 0, data will be written at
+ * an offset from uxHead while uxHead will not be moved yet.  This possibility
+ * will be used when TCP data is received while earlier data is still missing.
+ * If 'pucData' equals NULL, the function is called to advance 'uxHead' only.
+ */
+size_t uxStreamBufferAdd( StreamBuffer_t *pxBuffer, size_t uxOffset, const uint8_t *pucData, size_t uxCount )
+{
+size_t uxSpace, uxNextHead, uxFirst;
+
+       uxSpace = uxStreamBufferGetSpace( pxBuffer );
+
+       /* If uxOffset > 0, items can be placed in front of uxHead */
+       if( uxSpace > uxOffset )
+       {
+               uxSpace -= uxOffset;
+       }
+       else
+       {
+               uxSpace = 0u;
+       }
+
+       /* The number of bytes that can be written is the minimum of the number of
+       bytes requested and the number available. */
+       uxCount = FreeRTOS_min_uint32( uxSpace, uxCount );
+
+       if( uxCount != 0u )
+       {
+               uxNextHead = pxBuffer->uxHead;
+
+               if( uxOffset != 0u )
+               {
+                       /* ( uxOffset > 0 ) means: write in front if the uxHead marker */
+                       uxNextHead += uxOffset;
+                       if( uxNextHead >= pxBuffer->LENGTH )
+                       {
+                               uxNextHead -= pxBuffer->LENGTH;
+                       }
+               }
+
+               if( pucData != NULL )
+               {
+                       /* Calculate the number of bytes that can be added in the first
+                       write - which may be less than the total number of bytes that need
+                       to be added if the buffer will wrap back to the beginning. */
+                       uxFirst = FreeRTOS_min_uint32( pxBuffer->LENGTH - uxNextHead, uxCount );
+
+                       /* Write as many bytes as can be written in the first write. */
+                       memcpy( ( void* ) ( pxBuffer->ucArray + uxNextHead ), pucData, uxFirst );
+
+                       /* If the number of bytes written was less than the number that
+                       could be written in the first write... */
+                       if( uxCount > uxFirst )
+                       {
+                               /* ...then write the remaining bytes to the start of the
+                               buffer. */
+                               memcpy( ( void * )pxBuffer->ucArray, pucData + uxFirst, uxCount - uxFirst );
+                       }
+               }
+
+               if( uxOffset == 0u )
+               {
+                       /* ( uxOffset == 0 ) means: write at uxHead position */
+                       uxNextHead += uxCount;
+                       if( uxNextHead >= pxBuffer->LENGTH )
+                       {
+                               uxNextHead -= pxBuffer->LENGTH;
+                       }
+                       pxBuffer->uxHead = uxNextHead;
+               }
+
+               if( xStreamBufferLessThenEqual( pxBuffer, pxBuffer->uxFront, uxNextHead ) != pdFALSE )
+               {
+                       /* Advance the front pointer */
+                       pxBuffer->uxFront = uxNextHead;
+               }
+       }
+
+       return uxCount;
+}
+/*-----------------------------------------------------------*/
+
+/*
+ * uxStreamBufferGet( )
+ * 'uxOffset' can be used to read data located at a certain offset from 'lTail'.
+ * If 'pucData' equals NULL, the function is called to advance 'lTail' only.
+ * if 'xPeek' is pdTRUE, or if 'uxOffset' is non-zero, the 'lTail' pointer will
+ * not be advanced.
+ */
+size_t uxStreamBufferGet( StreamBuffer_t *pxBuffer, size_t uxOffset, uint8_t *pucData, size_t uxMaxCount, BaseType_t xPeek )
+{
+size_t uxSize, uxCount, uxFirst, uxNextTail;
+
+       /* How much data is available? */
+       uxSize = uxStreamBufferGetSize( pxBuffer );
+
+       if( uxSize > uxOffset )
+       {
+               uxSize -= uxOffset;
+       }
+       else
+       {
+               uxSize = 0u;
+       }
+
+       /* Use the minimum of the wanted bytes and the available bytes. */
+       uxCount = FreeRTOS_min_uint32( uxSize, uxMaxCount );
+
+       if( uxCount > 0u )
+       {
+               uxNextTail = pxBuffer->uxTail;
+
+               if( uxOffset != 0u )
+               {
+                       uxNextTail += uxOffset;
+                       if( uxNextTail >= pxBuffer->LENGTH )
+                       {
+                               uxNextTail -= pxBuffer->LENGTH;
+                       }
+               }
+
+               if( pucData != NULL )
+               {
+                       /* Calculate the number of bytes that can be read - which may be
+                       less than the number wanted if the data wraps around to the start of
+                       the buffer. */
+                       uxFirst = FreeRTOS_min_uint32( pxBuffer->LENGTH - uxNextTail, uxCount );
+
+                       /* Obtain the number of bytes it is possible to obtain in the first
+                       read. */
+                       memcpy( pucData, pxBuffer->ucArray + uxNextTail, uxFirst );
+
+                       /* If the total number of wanted bytes is greater than the number
+                       that could be read in the first read... */
+                       if( uxCount > uxFirst )
+                       {
+                               /*...then read the remaining bytes from the start of the buffer. */
+                               memcpy( pucData + uxFirst, pxBuffer->ucArray, uxCount - uxFirst );
+                       }
+               }
+
+               if( ( xPeek == pdFALSE ) && ( uxOffset == 0UL ) )
+               {
+                       /* Move the tail pointer to effecively remove the data read from
+                       the buffer. */
+                       uxNextTail += uxCount;
+
+                       if( uxNextTail >= pxBuffer->LENGTH )
+                       {
+                               uxNextTail -= pxBuffer->LENGTH;
+                       }
+
+                       pxBuffer->uxTail = uxNextTail;
+               }
+       }
+
+       return uxCount;
+}
+
index d26756589d64b65f6c459e028417063d6e02094a..849796508a8e37ad34236c8d20ad6de8ea726441 100644 (file)
-/*\r
- * FreeRTOS+TCP V2.2.0\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://aws.amazon.com/freertos\r
- * http://www.FreeRTOS.org\r
- */\r
-\r
-/*\r
- * FreeRTOS_TCP_IP.c\r
- * Module which handles the TCP connections for FreeRTOS+TCP.\r
- * It depends on  FreeRTOS_TCP_WIN.c, which handles the TCP windowing\r
- * schemes.\r
- *\r
- * Endianness: in this module all ports and IP addresses are stored in\r
- * host byte-order, except fields in the IP-packets\r
- */\r
-\r
-/* Standard includes. */\r
-#include <stdint.h>\r
-#include <stdio.h>\r
-\r
-/* FreeRTOS includes. */\r
-#include "FreeRTOS.h"\r
-#include "task.h"\r
-#include "queue.h"\r
-#include "semphr.h"\r
-\r
-/* FreeRTOS+TCP includes. */\r
-#include "FreeRTOS_IP.h"\r
-#include "FreeRTOS_Sockets.h"\r
-#include "FreeRTOS_IP_Private.h"\r
-#include "FreeRTOS_UDP_IP.h"\r
-#include "FreeRTOS_TCP_IP.h"\r
-#include "FreeRTOS_DHCP.h"\r
-#include "NetworkInterface.h"\r
-#include "NetworkBufferManagement.h"\r
-#include "FreeRTOS_ARP.h"\r
-#include "FreeRTOS_TCP_WIN.h"\r
-\r
-\r
-/* Just make sure the contents doesn't get compiled if TCP is not enabled. */\r
-#if ipconfigUSE_TCP == 1\r
-\r
-/* This compile-time test was moved to here because some macro's\r
-were unknown within 'FreeRTOSIPConfigDefaults.h'.  It tests whether\r
-the defined MTU size can contain at least a complete TCP packet. */\r
-\r
-#if ( ( ipconfigTCP_MSS + ipSIZE_OF_IPv4_HEADER + ipSIZE_OF_TCP_HEADER ) > ipconfigNETWORK_MTU )\r
-       #error The ipconfigTCP_MSS setting in FreeRTOSIPConfig.h is too large.\r
-#endif\r
-\r
-/*\r
- * The meaning of the TCP flags:\r
- */\r
-#define ipTCP_FLAG_FIN                 0x0001u /* No more data from sender */\r
-#define ipTCP_FLAG_SYN                 0x0002u /* Synchronize sequence numbers */\r
-#define ipTCP_FLAG_RST                 0x0004u /* Reset the connection */\r
-#define ipTCP_FLAG_PSH                 0x0008u /* Push function: please push buffered data to the recv application */\r
-#define ipTCP_FLAG_ACK                 0x0010u /* Acknowledgment field is significant */\r
-#define ipTCP_FLAG_URG                 0x0020u /* Urgent pointer field is significant */\r
-#define ipTCP_FLAG_ECN                 0x0040u /* ECN-Echo */\r
-#define ipTCP_FLAG_CWR                 0x0080u /* Congestion Window Reduced */\r
-#define ipTCP_FLAG_NS                  0x0100u /* ECN-nonce concealment protection */\r
-#define ipTCP_FLAG_RSV                 0x0E00u /* Reserved, keep 0 */\r
-\r
-/* A mask to filter all protocol flags. */\r
-#define ipTCP_FLAG_CTRL                        0x001Fu\r
-\r
-/*\r
- * A few values of the TCP options:\r
- */\r
-#define TCP_OPT_END                            0u   /* End of TCP options list */\r
-#define TCP_OPT_NOOP                   1u   /* "No-operation" TCP option */\r
-#define TCP_OPT_MSS                            2u   /* Maximum segment size TCP option */\r
-#define TCP_OPT_WSOPT                  3u   /* TCP Window Scale Option (3-byte long) */\r
-#define TCP_OPT_SACK_P                 4u   /* Advertize that SACK is permitted */\r
-#define TCP_OPT_SACK_A                 5u   /* SACK option with first/last */\r
-#define TCP_OPT_TIMESTAMP              8u   /* Time-stamp option */\r
-\r
-#define TCP_OPT_MSS_LEN                        4u   /* Length of TCP MSS option. */\r
-#define TCP_OPT_WSOPT_LEN              3u   /* Length of TCP WSOPT option. */\r
-\r
-#define TCP_OPT_TIMESTAMP_LEN  10      /* fixed length of the time-stamp option */\r
-\r
-#ifndef ipconfigTCP_ACK_EARLIER_PACKET\r
-       #define ipconfigTCP_ACK_EARLIER_PACKET          1\r
-#endif\r
-\r
-/*\r
- * The macro NOW_CONNECTED() is use to determine if the connection makes a\r
- * transition from connected to non-connected and vice versa.\r
- * NOW_CONNECTED() returns true when the status has one of these values:\r
- * eESTABLISHED, eFIN_WAIT_1, eFIN_WAIT_2, eCLOSING, eLAST_ACK, eTIME_WAIT\r
- * Technically the connection status is closed earlier, but the library wants\r
- * to prevent that the socket will be deleted before the last ACK has been\r
- * and thus causing a 'RST' packet on either side.\r
- */\r
-#define NOW_CONNECTED( status )\\r
-       ( ( status >= eESTABLISHED ) && ( status != eCLOSE_WAIT ) )\r
-\r
-/*\r
- * The highest 4 bits in the TCP offset byte indicate the total length of the\r
- * TCP header, divided by 4.\r
- */\r
-#define VALID_BITS_IN_TCP_OFFSET_BYTE          ( 0xF0u )\r
-\r
-/*\r
- * Acknowledgements to TCP data packets may be delayed as long as more is being expected.\r
- * A normal delay would be 200ms.  Here a much shorter delay of 20 ms is being used to\r
- * gain performance.\r
- */\r
-#define DELAYED_ACK_SHORT_DELAY_MS                     ( 2 )\r
-#define DELAYED_ACK_LONGER_DELAY_MS                    ( 20 )\r
-\r
-/*\r
- * The MSS (Maximum Segment Size) will be taken as large as possible. However, packets with\r
- * an MSS of 1460 bytes won't be transported through the internet.  The MSS will be reduced\r
- * to 1400 bytes.\r
- */\r
-#define REDUCED_MSS_THROUGH_INTERNET           ( 1400 )\r
-\r
-/*\r
- * When there are no TCP options, the TCP offset equals 20 bytes, which is stored as\r
- * the number 5 (words) in the higher niblle of the TCP-offset byte.\r
- */\r
-#define TCP_OFFSET_LENGTH_BITS                 ( 0xf0u )\r
-#define TCP_OFFSET_STANDARD_LENGTH             ( 0x50u )\r
-\r
-/*\r
- * Each TCP socket is checked regularly to see if it can send data packets.\r
- * By default, the maximum number of packets sent during one check is limited to 8.\r
- * This amount may be further limited by setting the socket's TX window size.\r
- */\r
-#if( !defined( SEND_REPEATED_COUNT ) )\r
-       #define SEND_REPEATED_COUNT             ( 8 )\r
-#endif /* !defined( SEND_REPEATED_COUNT ) */\r
-\r
-/*\r
- * Define a maximum perdiod of time (ms) to leave a TCP-socket unattended.\r
- * When a TCP timer expires, retries and keep-alive messages will be checked.\r
- */\r
-#ifndef        tcpMAXIMUM_TCP_WAKEUP_TIME_MS\r
-       #define tcpMAXIMUM_TCP_WAKEUP_TIME_MS           20000u\r
-#endif\r
-\r
-/*\r
- * The names of the different TCP states may be useful in logging.\r
- */\r
-#if( ( ipconfigHAS_DEBUG_PRINTF != 0 ) || ( ipconfigHAS_PRINTF != 0 ) )\r
-       static const char *pcStateNames[] = {\r
-               "eCLOSED",\r
-               "eTCP_LISTEN",\r
-               "eCONNECT_SYN",\r
-               "eSYN_FIRST",\r
-               "eSYN_RECEIVED",\r
-               "eESTABLISHED",\r
-               "eFIN_WAIT_1",\r
-               "eFIN_WAIT_2",\r
-               "eCLOSE_WAIT",\r
-               "eCLOSING",\r
-               "eLAST_ACK",\r
-               "eTIME_WAIT",\r
-               "eUNKNOWN",\r
-};\r
-#endif /* ( ipconfigHAS_DEBUG_PRINTF != 0 ) || ( ipconfigHAS_PRINTF != 0 ) */\r
-\r
-/*\r
- * Returns true if the socket must be checked.  Non-active sockets are waiting\r
- * for user action, either connect() or close().\r
- */\r
-static BaseType_t prvTCPSocketIsActive( UBaseType_t uxStatus );\r
-\r
-/*\r
- * Either sends a SYN or calls prvTCPSendRepeated (for regular messages).\r
- */\r
-static int32_t prvTCPSendPacket( FreeRTOS_Socket_t *pxSocket );\r
-\r
-/*\r
- * Try to send a series of messages.\r
- */\r
-static int32_t prvTCPSendRepeated( FreeRTOS_Socket_t *pxSocket, NetworkBufferDescriptor_t **ppxNetworkBuffer );\r
-\r
-/*\r
- * Return or send a packet to the other party.\r
- */\r
-static void prvTCPReturnPacket( FreeRTOS_Socket_t *pxSocket, NetworkBufferDescriptor_t *pxNetworkBuffer,\r
-       uint32_t ulLen, BaseType_t xReleaseAfterSend );\r
-\r
-/*\r
- * Initialise the data structures which keep track of the TCP windowing system.\r
- */\r
-static void prvTCPCreateWindow( FreeRTOS_Socket_t *pxSocket );\r
-\r
-/*\r
- * Let ARP look-up the MAC-address of the peer and initialise the first SYN\r
- * packet.\r
- */\r
-static BaseType_t prvTCPPrepareConnect( FreeRTOS_Socket_t *pxSocket );\r
-\r
-#if( ipconfigHAS_DEBUG_PRINTF != 0 )\r
-       /*\r
-        * For logging and debugging: make a string showing the TCP flags.\r
-        */\r
-       static const char *prvTCPFlagMeaning( UBaseType_t xFlags);\r
-#endif /* ipconfigHAS_DEBUG_PRINTF != 0 */\r
-\r
-/*\r
- * Parse the TCP option(s) received, if present.\r
- */\r
-static void prvCheckOptions( FreeRTOS_Socket_t *pxSocket, NetworkBufferDescriptor_t *pxNetworkBuffer );\r
-\r
-/*\r
- * Identify and deal with a single TCP header option, advancing the pointer to\r
- * the header. This function returns pdTRUE or pdFALSE depending on whether the\r
- * caller should continue to parse more header options or break the loop.\r
- */\r
-static BaseType_t prvSingleStepTCPHeaderOptions( const unsigned char ** const ppucPtr, const unsigned char ** const ppucLast, FreeRTOS_Socket_t ** const ppxSocket, TCPWindow_t ** const ppxTCPWindow);\r
-\r
-/*\r
- * Skip past TCP header options when doing Selective ACK, until there are no\r
- * more options left.\r
- */\r
-static void prvSkipPastRemainingOptions( const unsigned char ** const ppucPtr, FreeRTOS_Socket_t ** const ppxSocket, unsigned char * const ppucLen );\r
-\r
-/*\r
- * Set the initial properties in the options fields, like the preferred\r
- * value of MSS and whether SACK allowed.  Will be transmitted in the state\r
- * 'eCONNECT_SYN'.\r
- */\r
-static UBaseType_t prvSetSynAckOptions( FreeRTOS_Socket_t *pxSocket, TCPPacket_t * pxTCPPacket );\r
-\r
-/*\r
- * For anti-hang protection and TCP keep-alive messages.  Called in two places:\r
- * after receiving a packet and after a state change.  The socket's alive timer\r
- * may be reset.\r
- */\r
-static void prvTCPTouchSocket( FreeRTOS_Socket_t *pxSocket );\r
-\r
-/*\r
- * Prepare an outgoing message, if anything has to be sent.\r
- */\r
-static int32_t prvTCPPrepareSend( FreeRTOS_Socket_t *pxSocket, NetworkBufferDescriptor_t **ppxNetworkBuffer, UBaseType_t uxOptionsLength );\r
-\r
-/*\r
- * Calculate when this socket needs to be checked to do (re-)transmissions.\r
- */\r
-static TickType_t prvTCPNextTimeout( FreeRTOS_Socket_t *pxSocket );\r
-\r
-/*\r
- * The API FreeRTOS_send() adds data to the TX stream.  Add\r
- * this data to the windowing system to it can be transmitted.\r
- */\r
-static void prvTCPAddTxData( FreeRTOS_Socket_t *pxSocket );\r
-\r
-/*\r
- *  Called to handle the closure of a TCP connection.\r
- */\r
-static BaseType_t prvTCPHandleFin( FreeRTOS_Socket_t *pxSocket, NetworkBufferDescriptor_t *pxNetworkBuffer );\r
-\r
-/*\r
- * Called from prvTCPHandleState().  Find the TCP payload data and check and\r
- * return its length.\r
- */\r
-static BaseType_t prvCheckRxData( NetworkBufferDescriptor_t *pxNetworkBuffer, uint8_t **ppucRecvData );\r
-\r
-/*\r
- * Called from prvTCPHandleState().  Check if the payload data may be accepted.\r
- * If so, it will be added to the socket's reception queue.\r
- */\r
-static BaseType_t prvStoreRxData( FreeRTOS_Socket_t *pxSocket, uint8_t *pucRecvData,\r
-       NetworkBufferDescriptor_t *pxNetworkBuffer, uint32_t ulReceiveLength );\r
-\r
-/*\r
- * Set the TCP options (if any) for the outgoing packet.\r
- */\r
-static UBaseType_t prvSetOptions( FreeRTOS_Socket_t *pxSocket, NetworkBufferDescriptor_t *pxNetworkBuffer );\r
-\r
-/*\r
- * Called from prvTCPHandleState() as long as the TCP status is eSYN_RECEIVED to\r
- * eCONNECT_SYN.\r
- */\r
-static BaseType_t prvHandleSynReceived( FreeRTOS_Socket_t *pxSocket, NetworkBufferDescriptor_t **ppxNetworkBuffer,\r
-       uint32_t ulReceiveLength, UBaseType_t uxOptionsLength );\r
-\r
-/*\r
- * Called from prvTCPHandleState() as long as the TCP status is eESTABLISHED.\r
- */\r
-static BaseType_t prvHandleEstablished( FreeRTOS_Socket_t *pxSocket, NetworkBufferDescriptor_t **ppxNetworkBuffer,\r
-       uint32_t ulReceiveLength, UBaseType_t uxOptionsLength );\r
-\r
-/*\r
- * Called from prvTCPHandleState().  There is data to be sent.\r
- * If ipconfigUSE_TCP_WIN is defined, and if only an ACK must be sent, it will\r
- * be checked if it would better be postponed for efficiency.\r
- */\r
-static BaseType_t prvSendData( FreeRTOS_Socket_t *pxSocket, NetworkBufferDescriptor_t **ppxNetworkBuffer,\r
-       uint32_t ulReceiveLength, BaseType_t xSendLength );\r
-\r
-/*\r
- * The heart of all: check incoming packet for valid data and acks and do what\r
- * is necessary in each state.\r
- */\r
-static BaseType_t prvTCPHandleState( FreeRTOS_Socket_t *pxSocket, NetworkBufferDescriptor_t **ppxNetworkBuffer );\r
-\r
-/*\r
- * Common code for sending a TCP protocol control packet (i.e. no options, no\r
- * payload, just flags).\r
- */\r
-static BaseType_t prvTCPSendSpecialPacketHelper( NetworkBufferDescriptor_t *pxNetworkBuffer,\r
-                                                 uint8_t ucTCPFlags );\r
-\r
-/*\r
- * A "challenge ACK" is as per https://tools.ietf.org/html/rfc5961#section-3.2,\r
- * case #3. In summary, an RST was received with a sequence number that is\r
- * unexpected but still within the window.\r
- */\r
-static BaseType_t prvTCPSendChallengeAck( NetworkBufferDescriptor_t *pxNetworkBuffer );\r
-\r
-/*\r
- * Reply to a peer with the RST flag on, in case a packet can not be handled.\r
- */\r
-static BaseType_t prvTCPSendReset( NetworkBufferDescriptor_t *pxNetworkBuffer );\r
-\r
-/*\r
- * Set the initial value for MSS (Maximum Segment Size) to be used.\r
- */\r
-static void prvSocketSetMSS( FreeRTOS_Socket_t *pxSocket );\r
-\r
-/*\r
- * Return either a newly created socket, or the current socket in a connected\r
- * state (depends on the 'bReuseSocket' flag).\r
- */\r
-static FreeRTOS_Socket_t *prvHandleListen( FreeRTOS_Socket_t *pxSocket, NetworkBufferDescriptor_t *pxNetworkBuffer );\r
-\r
-/*\r
- * After a listening socket receives a new connection, it may duplicate itself.\r
- * The copying takes place in prvTCPSocketCopy.\r
- */\r
-static BaseType_t prvTCPSocketCopy( FreeRTOS_Socket_t *pxNewSocket, FreeRTOS_Socket_t *pxSocket );\r
-\r
-/*\r
- * prvTCPStatusAgeCheck() will see if the socket has been in a non-connected\r
- * state for too long.  If so, the socket will be closed, and -1 will be\r
- * returned.\r
- */\r
-#if( ipconfigTCP_HANG_PROTECTION == 1 )\r
-       static BaseType_t prvTCPStatusAgeCheck( FreeRTOS_Socket_t *pxSocket );\r
-#endif\r
-\r
-static NetworkBufferDescriptor_t *prvTCPBufferResize( FreeRTOS_Socket_t *pxSocket, NetworkBufferDescriptor_t *pxNetworkBuffer,\r
-       int32_t lDataLen, UBaseType_t uxOptionsLength );\r
-\r
-#if( ( ipconfigHAS_DEBUG_PRINTF != 0 ) || ( ipconfigHAS_PRINTF != 0 ) )\r
-       const char *FreeRTOS_GetTCPStateName( UBaseType_t ulState );\r
-#endif\r
-\r
-#if( ipconfigUSE_TCP_WIN != 0 )\r
-       static uint8_t prvWinScaleFactor( FreeRTOS_Socket_t *pxSocket );\r
-#endif\r
-\r
-/*\r
- * Generate a randomized TCP Initial Sequence Number per RFC.\r
- */\r
-extern uint32_t ulApplicationGetNextSequenceNumber( uint32_t ulSourceAddress,\r
-                                                                                                       uint16_t usSourcePort,\r
-                                                                                                       uint32_t ulDestinationAddress,\r
-                                                                                                       uint16_t usDestinationPort );\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-/* prvTCPSocketIsActive() returns true if the socket must be checked.\r
- * Non-active sockets are waiting for user action, either connect()\r
- * or close(). */\r
-static BaseType_t prvTCPSocketIsActive( UBaseType_t uxStatus )\r
-{\r
-       switch( uxStatus )\r
-       {\r
-       case eCLOSED:\r
-       case eCLOSE_WAIT:\r
-       case eFIN_WAIT_2:\r
-       case eCLOSING:\r
-       case eTIME_WAIT:\r
-               return pdFALSE;\r
-       default:\r
-               return pdTRUE;\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigTCP_HANG_PROTECTION == 1 )\r
-\r
-       static BaseType_t prvTCPStatusAgeCheck( FreeRTOS_Socket_t *pxSocket )\r
-       {\r
-       BaseType_t xResult;\r
-               switch( pxSocket->u.xTCP.ucTCPState )\r
-               {\r
-               case eESTABLISHED:\r
-                       /* If the 'ipconfigTCP_KEEP_ALIVE' option is enabled, sockets in\r
-                       state ESTABLISHED can be protected using keep-alive messages. */\r
-                       xResult = pdFALSE;\r
-                       break;\r
-               case eCLOSED:\r
-               case eTCP_LISTEN:\r
-               case eCLOSE_WAIT:\r
-                       /* These 3 states may last for ever, up to the owner. */\r
-                       xResult = pdFALSE;\r
-                       break;\r
-               default:\r
-                       /* All other (non-connected) states will get anti-hanging\r
-                       protection. */\r
-                       xResult = pdTRUE;\r
-                       break;\r
-               }\r
-               if( xResult != pdFALSE )\r
-               {\r
-                       /* How much time has past since the last active moment which is\r
-                       defined as A) a state change or B) a packet has arrived. */\r
-                       TickType_t xAge = xTaskGetTickCount( ) - pxSocket->u.xTCP.xLastActTime;\r
-\r
-                       /* ipconfigTCP_HANG_PROTECTION_TIME is in units of seconds. */\r
-                       if( xAge > ( ipconfigTCP_HANG_PROTECTION_TIME * configTICK_RATE_HZ ) )\r
-                       {\r
-                               #if( ipconfigHAS_DEBUG_PRINTF == 1 )\r
-                               {\r
-                                       FreeRTOS_debug_printf( ( "Inactive socket closed: port %u rem %lxip:%u status %s\n",\r
-                                               pxSocket->usLocalPort,\r
-                                               pxSocket->u.xTCP.ulRemoteIP,\r
-                                               pxSocket->u.xTCP.usRemotePort,\r
-                                               FreeRTOS_GetTCPStateName( ( UBaseType_t ) pxSocket->u.xTCP.ucTCPState ) ) );\r
-                               }\r
-                               #endif /* ipconfigHAS_DEBUG_PRINTF */\r
-\r
-                               /* Move to eCLOSE_WAIT, user may close the socket. */\r
-                               vTCPStateChange( pxSocket, eCLOSE_WAIT );\r
-\r
-                               /* When 'bPassQueued' true, this socket is an orphan until it\r
-                               gets connected. */\r
-                               if( pxSocket->u.xTCP.bits.bPassQueued != pdFALSE_UNSIGNED )\r
-                               {\r
-                                       if( pxSocket->u.xTCP.bits.bReuseSocket == pdFALSE_UNSIGNED )\r
-                                       {\r
-                                               /* As it did not get connected, and the user can never\r
-                                               accept() it anymore, it will be deleted now.  Called from\r
-                                               the IP-task, so it's safe to call the internal Close\r
-                                               function: vSocketClose(). */\r
-                                               vSocketClose( pxSocket );\r
-                                       }\r
-                                       /* Return a negative value to tell to inform the caller\r
-                                       xTCPTimerCheck()\r
-                                       that the socket got closed and may not be accessed anymore. */\r
-                                       xResult = -1;\r
-                               }\r
-                       }\r
-               }\r
-               return xResult;\r
-       }\r
-       /*-----------------------------------------------------------*/\r
-\r
-#endif\r
-\r
-/*\r
- * As soon as a TCP socket timer expires, this function xTCPSocketCheck\r
- * will be called (from xTCPTimerCheck)\r
- * It can send a delayed ACK or new data\r
- * Sequence of calling (normally) :\r
- * IP-Task:\r
- *             xTCPTimerCheck()                                // Check all sockets ( declared in FreeRTOS_Sockets.c )\r
- *             xTCPSocketCheck()                               // Either send a delayed ACK or call prvTCPSendPacket()\r
- *             prvTCPSendPacket()                              // Either send a SYN or call prvTCPSendRepeated ( regular messages )\r
- *             prvTCPSendRepeated()                    // Send at most 8 messages on a row\r
- *                     prvTCPReturnPacket()            // Prepare for returning\r
- *                     xNetworkInterfaceOutput()       // Sends data to the NIC ( declared in portable/NetworkInterface/xxx )\r
- */\r
-BaseType_t xTCPSocketCheck( FreeRTOS_Socket_t *pxSocket )\r
-{\r
-BaseType_t xResult = 0;\r
-BaseType_t xReady = pdFALSE;\r
-\r
-       if( ( pxSocket->u.xTCP.ucTCPState >= eESTABLISHED ) && ( pxSocket->u.xTCP.txStream != NULL ) )\r
-       {\r
-               /* The API FreeRTOS_send() might have added data to the TX stream.  Add\r
-               this data to the windowing system to it can be transmitted. */\r
-               prvTCPAddTxData( pxSocket );\r
-       }\r
-\r
-       #if ipconfigUSE_TCP_WIN == 1\r
-       {\r
-               if( pxSocket->u.xTCP.pxAckMessage != NULL )\r
-               {\r
-                       /* The first task of this regular socket check is to send-out delayed\r
-                       ACK's. */\r
-                       if( pxSocket->u.xTCP.bits.bUserShutdown == pdFALSE_UNSIGNED )\r
-                       {\r
-                               /* Earlier data was received but not yet acknowledged.  This\r
-                               function is called when the TCP timer for the socket expires, the\r
-                               ACK may be sent now. */\r
-                               if( pxSocket->u.xTCP.ucTCPState != eCLOSED )\r
-                               {\r
-                                       if( xTCPWindowLoggingLevel > 1 && ipconfigTCP_MAY_LOG_PORT( pxSocket->usLocalPort ) )\r
-                                       {\r
-                                               FreeRTOS_debug_printf( ( "Send[%u->%u] del ACK %lu SEQ %lu (len %u)\n",\r
-                                                       pxSocket->usLocalPort,\r
-                                                       pxSocket->u.xTCP.usRemotePort,\r
-                                                       pxSocket->u.xTCP.xTCPWindow.rx.ulCurrentSequenceNumber - pxSocket->u.xTCP.xTCPWindow.rx.ulFirstSequenceNumber,\r
-                                                       pxSocket->u.xTCP.xTCPWindow.ulOurSequenceNumber   - pxSocket->u.xTCP.xTCPWindow.tx.ulFirstSequenceNumber,\r
-                                                       ipSIZE_OF_IPv4_HEADER + ipSIZE_OF_TCP_HEADER ) );\r
-                                       }\r
-\r
-                                       prvTCPReturnPacket( pxSocket, pxSocket->u.xTCP.pxAckMessage, ipSIZE_OF_IPv4_HEADER + ipSIZE_OF_TCP_HEADER, ipconfigZERO_COPY_TX_DRIVER );\r
-\r
-                                       #if( ipconfigZERO_COPY_TX_DRIVER != 0 )\r
-                                       {\r
-                                               /* The ownership has been passed to the SEND routine,\r
-                                               clear the pointer to it. */\r
-                                               pxSocket->u.xTCP.pxAckMessage = NULL;\r
-                                       }\r
-                                       #endif /* ipconfigZERO_COPY_TX_DRIVER */\r
-                               }\r
-                               if( prvTCPNextTimeout( pxSocket ) > 1 )\r
-                               {\r
-                                       /* Tell the code below that this function is ready. */\r
-                                       xReady = pdTRUE;\r
-                               }\r
-                       }\r
-                       else\r
-                       {\r
-                               /* The user wants to perform an active shutdown(), skip sending\r
-                               the     delayed ACK.  The function prvTCPSendPacket() will send the\r
-                               FIN     along with the ACK's. */\r
-                       }\r
-\r
-                       if( pxSocket->u.xTCP.pxAckMessage != NULL )\r
-                       {\r
-                               vReleaseNetworkBufferAndDescriptor( pxSocket->u.xTCP.pxAckMessage );\r
-                               pxSocket->u.xTCP.pxAckMessage = NULL;\r
-                       }\r
-               }\r
-       }\r
-       #endif /* ipconfigUSE_TCP_WIN */\r
-\r
-       if( xReady == pdFALSE )\r
-       {\r
-               /* The second task of this regular socket check is sending out data. */\r
-               if( ( pxSocket->u.xTCP.ucTCPState >= eESTABLISHED ) ||\r
-                       ( pxSocket->u.xTCP.ucTCPState == eCONNECT_SYN ) )\r
-               {\r
-                       prvTCPSendPacket( pxSocket );\r
-               }\r
-\r
-               /* Set the time-out for the next wakeup for this socket. */\r
-               prvTCPNextTimeout( pxSocket );\r
-\r
-               #if( ipconfigTCP_HANG_PROTECTION == 1 )\r
-               {\r
-                       /* In all (non-connected) states in which keep-alive messages can not be sent\r
-                       the anti-hang protocol will close sockets that are 'hanging'. */\r
-                       xResult = prvTCPStatusAgeCheck( pxSocket );\r
-               }\r
-               #endif\r
-       }\r
-\r
-       return xResult;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-/*\r
- * prvTCPSendPacket() will be called when the socket time-out has been reached.\r
- * It is only called by xTCPSocketCheck().\r
- */\r
-static int32_t prvTCPSendPacket( FreeRTOS_Socket_t *pxSocket )\r
-{\r
-int32_t lResult = 0;\r
-UBaseType_t uxOptionsLength;\r
-TCPPacket_t *pxTCPPacket;\r
-NetworkBufferDescriptor_t *pxNetworkBuffer;\r
-\r
-       if( pxSocket->u.xTCP.ucTCPState != eCONNECT_SYN )\r
-       {\r
-               /* The connection is in s state other than SYN. */\r
-               pxNetworkBuffer = NULL;\r
-\r
-               /* prvTCPSendRepeated() will only create a network buffer if necessary,\r
-               i.e. when data must be sent to the peer. */\r
-               lResult = prvTCPSendRepeated( pxSocket, &pxNetworkBuffer );\r
-\r
-               if( pxNetworkBuffer != NULL )\r
-               {\r
-                       vReleaseNetworkBufferAndDescriptor( pxNetworkBuffer );\r
-               }\r
-       }\r
-       else\r
-       {\r
-               if( pxSocket->u.xTCP.ucRepCount >= 3u )\r
-               {\r
-                       /* The connection is in the SYN status. The packet will be repeated\r
-                       to most 3 times.  When there is no response, the socket get the\r
-                       status 'eCLOSE_WAIT'. */\r
-                       FreeRTOS_debug_printf( ( "Connect: giving up %lxip:%u\n",\r
-                               pxSocket->u.xTCP.ulRemoteIP,            /* IP address of remote machine. */\r
-                               pxSocket->u.xTCP.usRemotePort ) );      /* Port on remote machine. */\r
-                       vTCPStateChange( pxSocket, eCLOSE_WAIT );\r
-               }\r
-               else if( ( pxSocket->u.xTCP.bits.bConnPrepared != pdFALSE_UNSIGNED ) || ( prvTCPPrepareConnect( pxSocket ) == pdTRUE ) )\r
-               {\r
-                       /* Or else, if the connection has been prepared, or can be prepared\r
-                       now, proceed to send the packet with the SYN flag.\r
-                       prvTCPPrepareConnect() prepares 'xPacket' and returns pdTRUE if\r
-                       the Ethernet address of the peer or the gateway is found. */\r
-                       pxTCPPacket = ( TCPPacket_t * )pxSocket->u.xTCP.xPacket.u.ucLastPacket;\r
-\r
-                       /* About to send a SYN packet.  Call prvSetSynAckOptions() to set\r
-                       the proper options: The size of MSS and whether SACK's are\r
-                       allowed. */\r
-                       uxOptionsLength = prvSetSynAckOptions( pxSocket, pxTCPPacket );\r
-\r
-                       /* Return the number of bytes to be sent. */\r
-                       lResult = ( BaseType_t ) ( ipSIZE_OF_IPv4_HEADER + ipSIZE_OF_TCP_HEADER + uxOptionsLength );\r
-\r
-                       /* Set the TCP offset field:  ipSIZE_OF_TCP_HEADER equals 20 and\r
-                       uxOptionsLength is always a multiple of 4.  The complete expression\r
-                       would be:\r
-                       ucTCPOffset = ( ( ipSIZE_OF_TCP_HEADER + uxOptionsLength ) / 4 ) << 4 */\r
-                       pxTCPPacket->xTCPHeader.ucTCPOffset = ( uint8_t )( ( ipSIZE_OF_TCP_HEADER + uxOptionsLength ) << 2 );\r
-\r
-                       /* Repeat Count is used for a connecting socket, to limit the number\r
-                       of tries. */\r
-                       pxSocket->u.xTCP.ucRepCount++;\r
-\r
-                       /* Send the SYN message to make a connection.  The messages is\r
-                       stored in the socket field 'xPacket'.  It will be wrapped in a\r
-                       pseudo network buffer descriptor before it will be sent. */\r
-                       prvTCPReturnPacket( pxSocket, NULL, ( uint32_t ) lResult, pdFALSE );\r
-               }\r
-       }\r
-\r
-       /* Return the total number of bytes sent. */\r
-       return lResult;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-/*\r
- * prvTCPSendRepeated will try to send a series of messages, as long as there is\r
- * data to be sent and as long as the transmit window isn't full.\r
- */\r
-static int32_t prvTCPSendRepeated( FreeRTOS_Socket_t *pxSocket, NetworkBufferDescriptor_t **ppxNetworkBuffer )\r
-{\r
-UBaseType_t uxIndex;\r
-int32_t lResult = 0;\r
-UBaseType_t uxOptionsLength = 0u;\r
-int32_t xSendLength;\r
-\r
-       for( uxIndex = 0u; uxIndex < ( UBaseType_t ) SEND_REPEATED_COUNT; uxIndex++ )\r
-       {\r
-               /* prvTCPPrepareSend() might allocate a network buffer if there is data\r
-               to be sent. */\r
-               xSendLength = prvTCPPrepareSend( pxSocket, ppxNetworkBuffer, uxOptionsLength );\r
-               if( xSendLength <= 0 )\r
-               {\r
-                       break;\r
-               }\r
-\r
-               /* And return the packet to the peer. */\r
-               prvTCPReturnPacket( pxSocket, *ppxNetworkBuffer, ( uint32_t ) xSendLength, ipconfigZERO_COPY_TX_DRIVER );\r
-\r
-               #if( ipconfigZERO_COPY_TX_DRIVER != 0 )\r
-               {\r
-                       *ppxNetworkBuffer = NULL;\r
-               }\r
-               #endif /* ipconfigZERO_COPY_TX_DRIVER */\r
-\r
-               lResult += xSendLength;\r
-       }\r
-\r
-       /* Return the total number of bytes sent. */\r
-       return lResult;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-/*\r
- * Return (or send) a packet the the peer.  The data is stored in pxBuffer,\r
- * which may either point to a real network buffer or to a TCP socket field\r
- * called 'xTCP.xPacket'.   A temporary xNetworkBuffer will be used to pass\r
- * the data to the NIC.\r
- */\r
-static void prvTCPReturnPacket( FreeRTOS_Socket_t *pxSocket, NetworkBufferDescriptor_t *pxNetworkBuffer, uint32_t ulLen, BaseType_t xReleaseAfterSend )\r
-{\r
-TCPPacket_t * pxTCPPacket;\r
-IPHeader_t *pxIPHeader;\r
-EthernetHeader_t *pxEthernetHeader;\r
-uint32_t ulFrontSpace, ulSpace, ulSourceAddress, ulWinSize;\r
-TCPWindow_t *pxTCPWindow;\r
-NetworkBufferDescriptor_t xTempBuffer;\r
-/* For sending, a pseudo network buffer will be used, as explained above. */\r
-\r
-       if( pxNetworkBuffer == NULL )\r
-       {\r
-               pxNetworkBuffer = &xTempBuffer;\r
-\r
-               #if( ipconfigUSE_LINKED_RX_MESSAGES != 0 )\r
-               {\r
-                       xTempBuffer.pxNextBuffer = NULL;\r
-               }\r
-               #endif\r
-               xTempBuffer.pucEthernetBuffer = pxSocket->u.xTCP.xPacket.u.ucLastPacket;\r
-               xTempBuffer.xDataLength = sizeof( pxSocket->u.xTCP.xPacket.u.ucLastPacket );\r
-               xReleaseAfterSend = pdFALSE;\r
-       }\r
-\r
-       #if( ipconfigZERO_COPY_TX_DRIVER != 0 )\r
-       {\r
-               if( xReleaseAfterSend == pdFALSE )\r
-               {\r
-                       pxNetworkBuffer = pxDuplicateNetworkBufferWithDescriptor( pxNetworkBuffer, ( BaseType_t ) pxNetworkBuffer->xDataLength );\r
-                       if( pxNetworkBuffer == NULL )\r
-                       {\r
-                               FreeRTOS_debug_printf( ( "prvTCPReturnPacket: duplicate failed\n" ) );\r
-                       }\r
-                       xReleaseAfterSend = pdTRUE;\r
-               }\r
-       }\r
-       #endif /* ipconfigZERO_COPY_TX_DRIVER */\r
-\r
-       if( pxNetworkBuffer != NULL )\r
-       {\r
-               pxTCPPacket = ( TCPPacket_t * ) ( pxNetworkBuffer->pucEthernetBuffer );\r
-               pxIPHeader = &pxTCPPacket->xIPHeader;\r
-               pxEthernetHeader = &pxTCPPacket->xEthernetHeader;\r
-\r
-               /* Fill the packet, using hton translations. */\r
-               if( pxSocket != NULL )\r
-               {\r
-                       /* Calculate the space in the RX buffer in order to advertise the\r
-                       size of this socket's reception window. */\r
-                       pxTCPWindow = &( pxSocket->u.xTCP.xTCPWindow );\r
-\r
-                       if( pxSocket->u.xTCP.rxStream != NULL )\r
-                       {\r
-                               /* An RX stream was created already, see how much space is\r
-                               available. */\r
-                               ulFrontSpace = ( uint32_t ) uxStreamBufferFrontSpace( pxSocket->u.xTCP.rxStream );\r
-                       }\r
-                       else\r
-                       {\r
-                               /* No RX stream has been created, the full stream size is\r
-                               available. */\r
-                               ulFrontSpace = ( uint32_t ) pxSocket->u.xTCP.uxRxStreamSize;\r
-                       }\r
-\r
-                       /* Take the minimum of the RX buffer space and the RX window size. */\r
-                       ulSpace = FreeRTOS_min_uint32( pxTCPWindow->xSize.ulRxWindowLength, ulFrontSpace );\r
-\r
-                       if( ( pxSocket->u.xTCP.bits.bLowWater != pdFALSE_UNSIGNED ) || ( pxSocket->u.xTCP.bits.bRxStopped != pdFALSE_UNSIGNED ) )\r
-                       {\r
-                               /* The low-water mark was reached, meaning there was little\r
-                               space left.  The socket will wait until the application has read\r
-                               or flushed the incoming data, and 'zero-window' will be\r
-                               advertised. */\r
-                               ulSpace = 0u;\r
-                       }\r
-\r
-                       /* If possible, advertise an RX window size of at least 1 MSS, otherwise\r
-                       the peer might start 'zero window probing', i.e. sending small packets\r
-                       (1, 2, 4, 8... bytes). */\r
-                       if( ( ulSpace < pxSocket->u.xTCP.usCurMSS ) && ( ulFrontSpace >= pxSocket->u.xTCP.usCurMSS ) )\r
-                       {\r
-                               ulSpace = pxSocket->u.xTCP.usCurMSS;\r
-                       }\r
-\r
-                       /* Avoid overflow of the 16-bit win field. */\r
-                       #if( ipconfigUSE_TCP_WIN != 0 )\r
-                       {\r
-                               ulWinSize = ( ulSpace >> pxSocket->u.xTCP.ucMyWinScaleFactor );\r
-                       }\r
-                       #else\r
-                       {\r
-                               ulWinSize = ulSpace;\r
-                       }\r
-                       #endif\r
-                       if( ulWinSize > 0xfffcUL )\r
-                       {\r
-                               ulWinSize = 0xfffcUL;\r
-                       }\r
-\r
-                       pxTCPPacket->xTCPHeader.usWindow = FreeRTOS_htons( ( uint16_t ) ulWinSize );\r
-\r
-                       #if( ipconfigHAS_DEBUG_PRINTF != 0 )\r
-                       {\r
-                               if( ipconfigTCP_MAY_LOG_PORT( pxSocket->usLocalPort ) != pdFALSE )\r
-                               {\r
-                                       if( ( xTCPWindowLoggingLevel != 0 ) && ( pxSocket->u.xTCP.bits.bWinChange != pdFALSE_UNSIGNED ) )\r
-                                       {\r
-                                       size_t uxFrontSpace;\r
-\r
-                                               if(pxSocket->u.xTCP.rxStream != NULL)\r
-                                               {\r
-                                                       uxFrontSpace =  uxStreamBufferFrontSpace( pxSocket->u.xTCP.rxStream ) ;\r
-                                               }\r
-                                               else\r
-                                               {\r
-                                                       uxFrontSpace = 0u;\r
-                                               }\r
-\r
-                                               FreeRTOS_debug_printf( ( "%s: %lxip:%u: [%lu < %lu] winSize %ld\n",\r
-                                               pxSocket->u.xTCP.bits.bLowWater ? "STOP" : "GO ",\r
-                                                       pxSocket->u.xTCP.ulRemoteIP,\r
-                                                       pxSocket->u.xTCP.usRemotePort,\r
-                                                       pxSocket->u.xTCP.bits.bLowWater ? pxSocket->u.xTCP.uxLittleSpace : uxFrontSpace, pxSocket->u.xTCP.uxEnoughSpace,\r
-                                                       (int32_t) ( pxTCPWindow->rx.ulHighestSequenceNumber - pxTCPWindow->rx.ulCurrentSequenceNumber ) ) );\r
-                                       }\r
-                               }\r
-                       }\r
-                       #endif /* ipconfigHAS_DEBUG_PRINTF != 0 */\r
-\r
-                       /* The new window size has been advertised, switch off the flag. */\r
-                       pxSocket->u.xTCP.bits.bWinChange = pdFALSE_UNSIGNED;\r
-\r
-                       /* Later on, when deciding to delay an ACK, a precise estimate is needed\r
-                       of the free RX space.  At this moment, 'ulHighestRxAllowed' would be the\r
-                       highest sequence number minus 1 that the socket will accept. */\r
-                       pxSocket->u.xTCP.ulHighestRxAllowed = pxTCPWindow->rx.ulCurrentSequenceNumber + ulSpace;\r
-\r
-                       #if( ipconfigTCP_KEEP_ALIVE == 1 )\r
-                               if( pxSocket->u.xTCP.bits.bSendKeepAlive != pdFALSE_UNSIGNED )\r
-                               {\r
-                                       /* Sending a keep-alive packet, send the current sequence number\r
-                                       minus 1, which will     be recognised as a keep-alive packet an\r
-                                       responded to by acknowledging the last byte. */\r
-                                       pxSocket->u.xTCP.bits.bSendKeepAlive = pdFALSE_UNSIGNED;\r
-                                       pxSocket->u.xTCP.bits.bWaitKeepAlive = pdTRUE_UNSIGNED;\r
-\r
-                                       pxTCPPacket->xTCPHeader.ulSequenceNumber = pxSocket->u.xTCP.xTCPWindow.ulOurSequenceNumber - 1UL;\r
-                                       pxTCPPacket->xTCPHeader.ulSequenceNumber = FreeRTOS_htonl( pxTCPPacket->xTCPHeader.ulSequenceNumber );\r
-                               }\r
-                               else\r
-                       #endif\r
-                       {\r
-                               pxTCPPacket->xTCPHeader.ulSequenceNumber = FreeRTOS_htonl( pxSocket->u.xTCP.xTCPWindow.ulOurSequenceNumber );\r
-\r
-                               if( ( pxTCPPacket->xTCPHeader.ucTCPFlags & ( uint8_t ) ipTCP_FLAG_FIN ) != 0u )\r
-                               {\r
-                                       /* Suppress FIN in case this packet carries earlier data to be\r
-                                       retransmitted. */\r
-                                       uint32_t ulDataLen = ( uint32_t ) ( ulLen - ( ipSIZE_OF_TCP_HEADER + ipSIZE_OF_IPv4_HEADER ) );\r
-                                       if( ( pxTCPWindow->ulOurSequenceNumber + ulDataLen ) != pxTCPWindow->tx.ulFINSequenceNumber )\r
-                                       {\r
-                                               pxTCPPacket->xTCPHeader.ucTCPFlags &= ( ( uint8_t ) ~ipTCP_FLAG_FIN );\r
-                                               FreeRTOS_debug_printf( ( "Suppress FIN for %lu + %lu < %lu\n",\r
-                                                       pxTCPWindow->ulOurSequenceNumber - pxTCPWindow->tx.ulFirstSequenceNumber,\r
-                                                       ulDataLen,\r
-                                                       pxTCPWindow->tx.ulFINSequenceNumber - pxTCPWindow->tx.ulFirstSequenceNumber ) );\r
-                                       }\r
-                               }\r
-                       }\r
-\r
-                       /* Tell which sequence number is expected next time */\r
-                       pxTCPPacket->xTCPHeader.ulAckNr = FreeRTOS_htonl( pxTCPWindow->rx.ulCurrentSequenceNumber );\r
-               }\r
-               else\r
-               {\r
-                       /* Sending data without a socket, probably replying with a RST flag\r
-                       Just swap the two sequence numbers. */\r
-                       vFlip_32( pxTCPPacket->xTCPHeader.ulSequenceNumber, pxTCPPacket->xTCPHeader.ulAckNr );\r
-               }\r
-\r
-               pxIPHeader->ucTimeToLive                   = ( uint8_t ) ipconfigTCP_TIME_TO_LIVE;\r
-               pxIPHeader->usLength                       = FreeRTOS_htons( ulLen );\r
-               if( ( pxSocket == NULL ) || ( *ipLOCAL_IP_ADDRESS_POINTER == 0ul ) )\r
-               {\r
-                       /* When pxSocket is NULL, this function is called by prvTCPSendReset()\r
-                       and the IP-addresses must be swapped.\r
-                       Also swap the IP-addresses in case the IP-tack doesn't have an\r
-                       IP-address yet, i.e. when ( *ipLOCAL_IP_ADDRESS_POINTER == 0ul ). */\r
-                       ulSourceAddress = pxIPHeader->ulDestinationIPAddress;\r
-               }\r
-               else\r
-               {\r
-                       ulSourceAddress = *ipLOCAL_IP_ADDRESS_POINTER;\r
-               }\r
-               pxIPHeader->ulDestinationIPAddress = pxIPHeader->ulSourceIPAddress;\r
-               pxIPHeader->ulSourceIPAddress = ulSourceAddress;\r
-               vFlip_16( pxTCPPacket->xTCPHeader.usSourcePort, pxTCPPacket->xTCPHeader.usDestinationPort );\r
-\r
-               /* Just an increasing number. */\r
-               pxIPHeader->usIdentification = FreeRTOS_htons( usPacketIdentifier );\r
-               usPacketIdentifier++;\r
-               pxIPHeader->usFragmentOffset = 0u;\r
-\r
-               #if( ipconfigDRIVER_INCLUDED_TX_IP_CHECKSUM == 0 )\r
-               {\r
-                       /* calculate the IP header checksum, in case the driver won't do that. */\r
-                       pxIPHeader->usHeaderChecksum = 0x00u;\r
-                       pxIPHeader->usHeaderChecksum = usGenerateChecksum( 0UL, ( uint8_t * ) &( pxIPHeader->ucVersionHeaderLength ), ipSIZE_OF_IPv4_HEADER );\r
-                       pxIPHeader->usHeaderChecksum = ~FreeRTOS_htons( pxIPHeader->usHeaderChecksum );\r
-\r
-                       /* calculate the TCP checksum for an outgoing packet. */\r
-                       usGenerateProtocolChecksum( (uint8_t*)pxTCPPacket, pxNetworkBuffer->xDataLength, pdTRUE );\r
-\r
-                       /* A calculated checksum of 0 must be inverted as 0 means the checksum\r
-                       is disabled. */\r
-                       if( pxTCPPacket->xTCPHeader.usChecksum == 0x00u )\r
-                       {\r
-                               pxTCPPacket->xTCPHeader.usChecksum = 0xffffU;\r
-                       }\r
-               }\r
-               #endif\r
-\r
-       #if( ipconfigUSE_LINKED_RX_MESSAGES != 0 )\r
-               pxNetworkBuffer->pxNextBuffer = NULL;\r
-       #endif\r
-\r
-               /* Important: tell NIC driver how many bytes must be sent. */\r
-               pxNetworkBuffer->xDataLength = ulLen + ipSIZE_OF_ETH_HEADER;\r
-\r
-               /* Fill in the destination MAC addresses. */\r
-               memcpy( ( void * ) &( pxEthernetHeader->xDestinationAddress ), ( void * ) &( pxEthernetHeader->xSourceAddress ),\r
-                       sizeof( pxEthernetHeader->xDestinationAddress ) );\r
-\r
-               /* The source MAC addresses is fixed to 'ipLOCAL_MAC_ADDRESS'. */\r
-               memcpy( ( void * ) &( pxEthernetHeader->xSourceAddress) , ( void * ) ipLOCAL_MAC_ADDRESS, ( size_t ) ipMAC_ADDRESS_LENGTH_BYTES );\r
-\r
-               #if defined( ipconfigETHERNET_MINIMUM_PACKET_BYTES )\r
-               {\r
-                       if( pxNetworkBuffer->xDataLength < ( size_t ) ipconfigETHERNET_MINIMUM_PACKET_BYTES )\r
-                       {\r
-                       BaseType_t xIndex;\r
-\r
-                               for( xIndex = ( BaseType_t ) pxNetworkBuffer->xDataLength; xIndex < ( BaseType_t ) ipconfigETHERNET_MINIMUM_PACKET_BYTES; xIndex++ )\r
-                               {\r
-                                       pxNetworkBuffer->pucEthernetBuffer[ xIndex ] = 0u;\r
-                               }\r
-                               pxNetworkBuffer->xDataLength = ( size_t ) ipconfigETHERNET_MINIMUM_PACKET_BYTES;\r
-                       }\r
-               }\r
-               #endif\r
-\r
-               /* Send! */\r
-               xNetworkInterfaceOutput( pxNetworkBuffer, xReleaseAfterSend );\r
-\r
-               if( xReleaseAfterSend == pdFALSE )\r
-               {\r
-                       /* Swap-back some fields, as pxBuffer probably points to a socket field\r
-                       containing the packet header. */\r
-                       vFlip_16( pxTCPPacket->xTCPHeader.usSourcePort, pxTCPPacket->xTCPHeader.usDestinationPort);\r
-                       pxTCPPacket->xIPHeader.ulSourceIPAddress = pxTCPPacket->xIPHeader.ulDestinationIPAddress;\r
-                       memcpy( pxEthernetHeader->xSourceAddress.ucBytes, pxEthernetHeader->xDestinationAddress.ucBytes, ( size_t ) ipMAC_ADDRESS_LENGTH_BYTES );\r
-               }\r
-               else\r
-               {\r
-                       /* Nothing to do: the buffer has been passed to DMA and will be released after use */\r
-               }\r
-       } /* if( pxNetworkBuffer != NULL ) */\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-/*\r
- * The SYN event is very important: the sequence numbers, which have a kind of\r
- * random starting value, are being synchronised.  The sliding window manager\r
- * (in FreeRTOS_TCP_WIN.c) needs to know them, along with the Maximum Segment\r
- * Size (MSS) in use.\r
- */\r
-static void prvTCPCreateWindow( FreeRTOS_Socket_t *pxSocket )\r
-{\r
-       if( xTCPWindowLoggingLevel )\r
-               FreeRTOS_debug_printf( ( "Limits (using): TCP Win size %lu Water %lu <= %lu <= %lu\n",\r
-                       pxSocket->u.xTCP.uxRxWinSize * ipconfigTCP_MSS,\r
-                       pxSocket->u.xTCP.uxLittleSpace ,\r
-                       pxSocket->u.xTCP.uxEnoughSpace,\r
-                       pxSocket->u.xTCP.uxRxStreamSize ) );\r
-       vTCPWindowCreate(\r
-               &pxSocket->u.xTCP.xTCPWindow,\r
-               ipconfigTCP_MSS * pxSocket->u.xTCP.uxRxWinSize,\r
-               ipconfigTCP_MSS * pxSocket->u.xTCP.uxTxWinSize,\r
-               pxSocket->u.xTCP.xTCPWindow.rx.ulCurrentSequenceNumber,\r
-               pxSocket->u.xTCP.xTCPWindow.ulOurSequenceNumber,\r
-               ( uint32_t ) pxSocket->u.xTCP.usInitMSS );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-/*\r
- * Connecting sockets have a special state: eCONNECT_SYN.  In this phase,\r
- * the Ethernet address of the target will be found using ARP.  In case the\r
- * target IP address is not within the netmask, the hardware address of the\r
- * gateway will be used.\r
- */\r
-static BaseType_t prvTCPPrepareConnect( FreeRTOS_Socket_t *pxSocket )\r
-{\r
-TCPPacket_t *pxTCPPacket;\r
-IPHeader_t *pxIPHeader;\r
-eARPLookupResult_t eReturned;\r
-uint32_t ulRemoteIP;\r
-MACAddress_t xEthAddress;\r
-BaseType_t xReturn = pdTRUE;\r
-uint32_t ulInitialSequenceNumber = 0;\r
-\r
-       #if( ipconfigHAS_PRINTF != 0 )\r
-       {\r
-               /* Only necessary for nicer logging. */\r
-               memset( xEthAddress.ucBytes, '\0', sizeof( xEthAddress.ucBytes ) );\r
-       }\r
-       #endif /* ipconfigHAS_PRINTF != 0 */\r
-\r
-       ulRemoteIP = FreeRTOS_htonl( pxSocket->u.xTCP.ulRemoteIP );\r
-\r
-       /* Determine the ARP cache status for the requested IP address. */\r
-       eReturned = eARPGetCacheEntry( &( ulRemoteIP ), &( xEthAddress ) );\r
-\r
-       switch( eReturned )\r
-       {\r
-       case eARPCacheHit:              /* An ARP table lookup found a valid entry. */\r
-               break;                          /* We can now prepare the SYN packet. */\r
-       case eARPCacheMiss:             /* An ARP table lookup did not find a valid entry. */\r
-       case eCantSendPacket:   /* There is no IP address, or an ARP is still in progress. */\r
-       default:\r
-               /* Count the number of times it couldn't find the ARP address. */\r
-               pxSocket->u.xTCP.ucRepCount++;\r
-\r
-               FreeRTOS_debug_printf( ( "ARP for %lxip (using %lxip): rc=%d %02X:%02X:%02X %02X:%02X:%02X\n",\r
-                       pxSocket->u.xTCP.ulRemoteIP,\r
-                       FreeRTOS_htonl( ulRemoteIP ),\r
-                       eReturned,\r
-                       xEthAddress.ucBytes[ 0 ],\r
-                       xEthAddress.ucBytes[ 1 ],\r
-                       xEthAddress.ucBytes[ 2 ],\r
-                       xEthAddress.ucBytes[ 3 ],\r
-                       xEthAddress.ucBytes[ 4 ],\r
-                       xEthAddress.ucBytes[ 5 ] ) );\r
-\r
-               /* And issue a (new) ARP request */\r
-               FreeRTOS_OutputARPRequest( ulRemoteIP );\r
-\r
-               xReturn = pdFALSE;\r
-       }\r
-\r
-       if( xReturn != pdFALSE )\r
-       {\r
-               /* Get a difficult-to-predict initial sequence number for this 4-tuple. */\r
-               ulInitialSequenceNumber = ulApplicationGetNextSequenceNumber( *ipLOCAL_IP_ADDRESS_POINTER,\r
-                                                                                                                                         pxSocket->usLocalPort,\r
-                                                                                                                                         pxSocket->u.xTCP.ulRemoteIP,\r
-                                                                                                                                         pxSocket->u.xTCP.usRemotePort );\r
-\r
-               /* Check for a random number generation error. */\r
-               if( 0 == ulInitialSequenceNumber )\r
-               {\r
-                       xReturn = pdFALSE;\r
-               }\r
-       }\r
-\r
-       if( xReturn != pdFALSE )\r
-       {\r
-               /* The MAC-address of the peer (or gateway) has been found,\r
-               now prepare the initial TCP packet and some fields in the socket. */\r
-               pxTCPPacket = ( TCPPacket_t * )pxSocket->u.xTCP.xPacket.u.ucLastPacket;\r
-               pxIPHeader = &pxTCPPacket->xIPHeader;\r
-\r
-               /* reset the retry counter to zero. */\r
-               pxSocket->u.xTCP.ucRepCount = 0u;\r
-\r
-               /* And remember that the connect/SYN data are prepared. */\r
-               pxSocket->u.xTCP.bits.bConnPrepared = pdTRUE_UNSIGNED;\r
-\r
-               /* Now that the Ethernet address is known, the initial packet can be\r
-               prepared. */\r
-               memset( pxSocket->u.xTCP.xPacket.u.ucLastPacket, '\0', sizeof( pxSocket->u.xTCP.xPacket.u.ucLastPacket ) );\r
-\r
-               /* Write the Ethernet address in Source, because it will be swapped by\r
-               prvTCPReturnPacket(). */\r
-               memcpy( &pxTCPPacket->xEthernetHeader.xSourceAddress, &xEthAddress, sizeof( xEthAddress ) );\r
-\r
-               /* 'ipIPv4_FRAME_TYPE' is already in network-byte-order. */\r
-               pxTCPPacket->xEthernetHeader.usFrameType = ipIPv4_FRAME_TYPE;\r
-\r
-               pxIPHeader->ucVersionHeaderLength = 0x45u;\r
-               pxIPHeader->usLength = FreeRTOS_htons( sizeof( TCPPacket_t ) - sizeof( pxTCPPacket->xEthernetHeader ) );\r
-               pxIPHeader->ucTimeToLive = ( uint8_t ) ipconfigTCP_TIME_TO_LIVE;\r
-\r
-               pxIPHeader->ucProtocol = ( uint8_t ) ipPROTOCOL_TCP;\r
-\r
-               /* Addresses and ports will be stored swapped because prvTCPReturnPacket\r
-               will swap them back while replying. */\r
-               pxIPHeader->ulDestinationIPAddress = *ipLOCAL_IP_ADDRESS_POINTER;\r
-               pxIPHeader->ulSourceIPAddress = FreeRTOS_htonl( pxSocket->u.xTCP.ulRemoteIP );\r
-\r
-               pxTCPPacket->xTCPHeader.usSourcePort = FreeRTOS_htons( pxSocket->u.xTCP.usRemotePort );\r
-               pxTCPPacket->xTCPHeader.usDestinationPort = FreeRTOS_htons( pxSocket->usLocalPort );\r
-\r
-               /* We are actively connecting, so the peer's Initial Sequence Number (ISN)\r
-               isn't known yet. */\r
-               pxSocket->u.xTCP.xTCPWindow.rx.ulCurrentSequenceNumber = 0ul;\r
-\r
-               /* Start with ISN (Initial Sequence Number). */\r
-               pxSocket->u.xTCP.xTCPWindow.ulOurSequenceNumber = ulInitialSequenceNumber;\r
-\r
-               /* The TCP header size is 20 bytes, divided by 4 equals 5, which is put in\r
-               the high nibble of the TCP offset field. */\r
-               pxTCPPacket->xTCPHeader.ucTCPOffset = 0x50u;\r
-\r
-               /* Only set the SYN flag. */\r
-               pxTCPPacket->xTCPHeader.ucTCPFlags = ipTCP_FLAG_SYN;\r
-\r
-               /* Set the values of usInitMSS / usCurMSS for this socket. */\r
-               prvSocketSetMSS( pxSocket );\r
-\r
-               /* The initial sequence numbers at our side are known.  Later\r
-               vTCPWindowInit() will be called to fill in the peer's sequence numbers, but\r
-               first wait for a SYN+ACK reply. */\r
-               prvTCPCreateWindow( pxSocket );\r
-       }\r
-\r
-       return xReturn;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-/* For logging and debugging: make a string showing the TCP flags\r
-*/\r
-#if( ipconfigHAS_DEBUG_PRINTF != 0 )\r
-\r
-       static const char *prvTCPFlagMeaning( UBaseType_t xFlags)\r
-       {\r
-               static char retString[10];\r
-               snprintf(retString, sizeof( retString ), "%c%c%c%c%c%c%c%c%c",\r
-                       ( xFlags & ipTCP_FLAG_FIN )  ? 'F' : '.',       /* 0x0001: No more data from sender */\r
-                       ( xFlags & ipTCP_FLAG_SYN )  ? 'S' : '.',       /* 0x0002: Synchronize sequence numbers */\r
-                       ( xFlags & ipTCP_FLAG_RST )  ? 'R' : '.',       /* 0x0004: Reset the connection */\r
-                       ( xFlags & ipTCP_FLAG_PSH )  ? 'P' : '.',       /* 0x0008: Push function: please push buffered data to the recv application */\r
-                       ( xFlags & ipTCP_FLAG_ACK )  ? 'A' : '.',       /* 0x0010: Acknowledgment field is significant */\r
-                       ( xFlags & ipTCP_FLAG_URG )  ? 'U' : '.',       /* 0x0020: Urgent pointer field is significant */\r
-                       ( xFlags & ipTCP_FLAG_ECN )  ? 'E' : '.',       /* 0x0040: ECN-Echo */\r
-                       ( xFlags & ipTCP_FLAG_CWR )  ? 'C' : '.',       /* 0x0080: Congestion Window Reduced */\r
-                       ( xFlags & ipTCP_FLAG_NS )   ? 'N' : '.');      /* 0x0100: ECN-nonce concealment protection */\r
-               return retString;\r
-       }\r
-       /*-----------------------------------------------------------*/\r
-\r
-#endif /* ipconfigHAS_DEBUG_PRINTF */\r
-\r
-/*\r
- * Parse the TCP option(s) received, if present.  It has already been verified\r
- * that: ((pxTCPHeader->ucTCPOffset & 0xf0) > 0x50), meaning that the TP header\r
- * is longer than the usual 20 (5 x 4) bytes.\r
- */\r
-static void prvCheckOptions( FreeRTOS_Socket_t *pxSocket, NetworkBufferDescriptor_t *pxNetworkBuffer )\r
-{\r
-TCPPacket_t * pxTCPPacket;\r
-TCPHeader_t * pxTCPHeader;\r
-const unsigned char *pucPtr;\r
-const unsigned char *pucLast;\r
-TCPWindow_t *pxTCPWindow;\r
-BaseType_t xShouldContinueLoop;\r
-\r
-       pxTCPPacket = ( TCPPacket_t * ) ( pxNetworkBuffer->pucEthernetBuffer );\r
-       pxTCPHeader = &pxTCPPacket->xTCPHeader;\r
-\r
-       /* A character pointer to iterate through the option data */\r
-       pucPtr = pxTCPHeader->ucOptdata;\r
-       pucLast = pucPtr + (((pxTCPHeader->ucTCPOffset >> 4) - 5) << 2);\r
-       pxTCPWindow = &pxSocket->u.xTCP.xTCPWindow;\r
-\r
-       /* Validate options size calculation. */\r
-       if( pucLast > ( pxNetworkBuffer->pucEthernetBuffer + pxNetworkBuffer->xDataLength ) )\r
-       {\r
-               return;\r
-       }\r
-\r
-       /* The comparison with pucLast is only necessary in case the option data are\r
-       corrupted, we don't like to run into invalid memory and crash. */\r
-       xShouldContinueLoop = pdTRUE;\r
-       while( ( pucPtr < pucLast ) && ( xShouldContinueLoop == pdTRUE ) )\r
-       {\r
-               xShouldContinueLoop = prvSingleStepTCPHeaderOptions( &pucPtr, &pucLast, &pxSocket, &pxTCPWindow );\r
-       }\r
-}\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-static BaseType_t prvSingleStepTCPHeaderOptions( const unsigned char ** const ppucPtr, const unsigned char ** const ppucLast, FreeRTOS_Socket_t ** const ppxSocket, TCPWindow_t ** const ppxTCPWindow)\r
-{\r
-       UBaseType_t uxNewMSS;\r
-       UBaseType_t xRemainingOptionsBytes = ( *ppucLast ) - ( *ppucPtr );\r
-       unsigned char ucLen;\r
-\r
-       if( ( *ppucPtr )[ 0 ] == TCP_OPT_END )\r
-       {\r
-               /* End of options. */\r
-               return pdFALSE;\r
-       }\r
-       if( ( *ppucPtr )[ 0 ] == TCP_OPT_NOOP)\r
-       {\r
-               /* NOP option, inserted to make the length a multiple of 4. */\r
-               ( *ppucPtr )++;\r
-               return pdTRUE;\r
-       }\r
-\r
-       /* Any other well-formed option must be at least two bytes: the option\r
-       type byte followed by a length byte. */\r
-       if( xRemainingOptionsBytes < 2 )\r
-       {\r
-               return pdFALSE;\r
-       }\r
-#if( ipconfigUSE_TCP_WIN != 0 )\r
-       else if( ( *ppucPtr )[ 0 ] == TCP_OPT_WSOPT )\r
-       {\r
-               /* Confirm that the option fits in the remaining buffer space. */\r
-               if( ( xRemainingOptionsBytes < TCP_OPT_WSOPT_LEN ) || ( ( *ppucPtr )[ 1 ] != TCP_OPT_WSOPT_LEN ) )\r
-               {\r
-                       return pdFALSE;\r
-               }\r
-\r
-               ( *ppxSocket )->u.xTCP.ucPeerWinScaleFactor = ( *ppucPtr )[ 2 ];\r
-               ( *ppxSocket )->u.xTCP.bits.bWinScaling = pdTRUE_UNSIGNED;\r
-               ( *ppucPtr ) += TCP_OPT_WSOPT_LEN;\r
-       }\r
-#endif /* ipconfigUSE_TCP_WIN */\r
-       else if( ( *ppucPtr )[ 0 ] == TCP_OPT_MSS )\r
-       {\r
-               /* Confirm that the option fits in the remaining buffer space. */\r
-               if( ( xRemainingOptionsBytes < TCP_OPT_MSS_LEN )|| ( ( *ppucPtr )[ 1 ] != TCP_OPT_MSS_LEN ) )\r
-               {\r
-                       return pdFALSE;\r
-               }\r
-\r
-               /* An MSS option with the correct option length.  FreeRTOS_htons()\r
-               is not needed here because usChar2u16() already returns a host\r
-               endian number. */\r
-               uxNewMSS = usChar2u16( ( *ppucPtr ) + 2 );\r
-\r
-               if( ( *ppxSocket )->u.xTCP.usInitMSS != uxNewMSS )\r
-               {\r
-                       /* Perform a basic check on the the new MSS. */\r
-                       if( uxNewMSS == 0 )\r
-                       {\r
-                               return pdFALSE;\r
-                       }\r
-\r
-                       FreeRTOS_debug_printf( ( "MSS change %u -> %lu\n", ( *ppxSocket )->u.xTCP.usInitMSS, uxNewMSS ) );\r
-               }\r
-\r
-               if( ( *ppxSocket )->u.xTCP.usInitMSS > uxNewMSS )\r
-               {\r
-                       /* our MSS was bigger than the MSS of the other party: adapt it. */\r
-                       ( *ppxSocket )->u.xTCP.bits.bMssChange = pdTRUE_UNSIGNED;\r
-                       if( ( ( *ppxTCPWindow ) != NULL ) && ( ( *ppxSocket )->u.xTCP.usCurMSS > uxNewMSS ) )\r
-                       {\r
-                               /* The peer advertises a smaller MSS than this socket was\r
-                               using.  Use that as well. */\r
-                               FreeRTOS_debug_printf( ( "Change mss %d => %lu\n", ( *ppxSocket )->u.xTCP.usCurMSS, uxNewMSS ) );\r
-                               ( *ppxSocket )->u.xTCP.usCurMSS = ( uint16_t ) uxNewMSS;\r
-                       }\r
-                       ( *ppxTCPWindow )->xSize.ulRxWindowLength = ( ( uint32_t ) uxNewMSS ) * ( ( *ppxTCPWindow )->xSize.ulRxWindowLength / ( ( uint32_t ) uxNewMSS ) );\r
-                       ( *ppxTCPWindow )->usMSSInit = ( uint16_t ) uxNewMSS;\r
-                       ( *ppxTCPWindow )->usMSS = ( uint16_t ) uxNewMSS;\r
-                       ( *ppxSocket )->u.xTCP.usInitMSS = ( uint16_t ) uxNewMSS;\r
-                       ( *ppxSocket )->u.xTCP.usCurMSS = ( uint16_t ) uxNewMSS;\r
-               }\r
-\r
-               #if( ipconfigUSE_TCP_WIN != 1 )\r
-                       /* Without scaled windows, MSS is the only interesting option. */\r
-                       return pdFALSE;\r
-               #else\r
-                       /* Or else we continue to check another option: selective ACK. */\r
-                       ( *ppucPtr ) += TCP_OPT_MSS_LEN;\r
-               #endif  /* ipconfigUSE_TCP_WIN != 1 */\r
-       }\r
-       else\r
-       {\r
-               /* All other options have a length field, so that we easily\r
-               can skip past them. */\r
-               ucLen = ( *ppucPtr )[ 1 ];\r
-               if( ( ucLen < 2 ) || ( ucLen > xRemainingOptionsBytes ) )\r
-               {\r
-                       /* If the length field is too small or too big, the options are\r
-                        * malformed, don't process them further.\r
-                        */\r
-                       return pdFALSE;\r
-               }\r
-\r
-               #if( ipconfigUSE_TCP_WIN == 1 )\r
-               {\r
-                       /* Selective ACK: the peer has received a packet but it is missing\r
-                        * earlier packets. At least this packet does not need retransmission\r
-                        * anymore. ulTCPWindowTxSack( ) takes care of this administration.\r
-                        */\r
-                       if( ( *ppucPtr )[0] == TCP_OPT_SACK_A )\r
-                       {\r
-                               ucLen -= 2;\r
-                               ( *ppucPtr ) += 2;\r
-\r
-                               while( ucLen >= 8 )\r
-                               {\r
-                                       prvSkipPastRemainingOptions( ppucPtr, ppxSocket, &ucLen );\r
-                               }\r
-                               /* ucLen should be 0 by now. */\r
-                       }\r
-               }\r
-               #endif  /* ipconfigUSE_TCP_WIN == 1 */\r
-\r
-               ( *ppucPtr ) += ucLen;\r
-       }\r
-       return pdTRUE;\r
-}\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvSkipPastRemainingOptions( const unsigned char ** const ppucPtr, FreeRTOS_Socket_t ** const ppxSocket, unsigned char * const pucLen )\r
-{\r
-uint32_t ulFirst = ulChar2u32( ( *ppucPtr ) );\r
-uint32_t ulLast  = ulChar2u32( ( *ppucPtr ) + 4 );\r
-uint32_t ulCount = ulTCPWindowTxSack( &( *ppxSocket )->u.xTCP.xTCPWindow, ulFirst, ulLast );\r
-       /* ulTCPWindowTxSack( ) returns the number of bytes which have been acked\r
-        * starting from the head position.  Advance the tail pointer in txStream.\r
-        */\r
-       if( ( ( *ppxSocket )->u.xTCP.txStream  != NULL ) && ( ulCount > 0 ) )\r
-       {\r
-               /* Just advancing the tail index, 'ulCount' bytes have been confirmed. */\r
-               uxStreamBufferGet( ( *ppxSocket )->u.xTCP.txStream, 0, NULL, ( size_t ) ulCount, pdFALSE );\r
-               ( *ppxSocket )->xEventBits |= eSOCKET_SEND;\r
-\r
-               #if ipconfigSUPPORT_SELECT_FUNCTION == 1\r
-               {\r
-                       if( ( *ppxSocket )->xSelectBits & eSELECT_WRITE )\r
-                       {\r
-                               /* The field 'xEventBits' is used to store regular socket events\r
-                                * (at most 8), as well as 'select events', which will be left-shifted.\r
-                                */\r
-                               ( *ppxSocket )->xEventBits |= ( eSELECT_WRITE << SOCKET_EVENT_BIT_COUNT );\r
-                       }\r
-               }\r
-               #endif\r
-\r
-               /* In case the socket owner has installed an OnSent handler, call it now.\r
-                */\r
-               #if( ipconfigUSE_CALLBACKS == 1 )\r
-               {\r
-                       if( ipconfigIS_VALID_PROG_ADDRESS( ( *ppxSocket )->u.xTCP.pxHandleSent ) )\r
-                       {\r
-                               ( *ppxSocket )->u.xTCP.pxHandleSent( (Socket_t )( *ppxSocket ), ulCount );\r
-                       }\r
-               }\r
-               #endif /* ipconfigUSE_CALLBACKS == 1  */\r
-       }\r
-       ( *ppucPtr ) += 8;\r
-       ( *pucLen ) -= 8;\r
-}\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_TCP_WIN != 0 )\r
-\r
-       static uint8_t prvWinScaleFactor( FreeRTOS_Socket_t *pxSocket )\r
-       {\r
-       size_t uxWinSize;\r
-       uint8_t ucFactor;\r
-\r
-               /* 'xTCP.uxRxWinSize' is the size of the reception window in units of MSS. */\r
-               uxWinSize = pxSocket->u.xTCP.uxRxWinSize * ( size_t ) pxSocket->u.xTCP.usInitMSS;\r
-               ucFactor = 0u;\r
-               while( uxWinSize > 0xfffful )\r
-               {\r
-                       /* Divide by two and increase the binary factor by 1. */\r
-                       uxWinSize >>= 1;\r
-                       ucFactor++;\r
-               }\r
-\r
-               FreeRTOS_debug_printf( ( "prvWinScaleFactor: uxRxWinSize %lu MSS %lu Factor %u\n",\r
-                       pxSocket->u.xTCP.uxRxWinSize,\r
-                       pxSocket->u.xTCP.usInitMSS,\r
-                       ucFactor ) );\r
-\r
-               return ucFactor;\r
-       }\r
-\r
-#endif\r
-/*-----------------------------------------------------------*/\r
-\r
-/*\r
- * When opening a TCP connection, while SYN's are being sent, the  parties may\r
- * communicate what MSS (Maximum Segment Size) they intend to use.   MSS is the\r
- * nett size of the payload, always smaller than MTU.\r
-*/\r
-static UBaseType_t prvSetSynAckOptions( FreeRTOS_Socket_t *pxSocket, TCPPacket_t * pxTCPPacket )\r
-{\r
-TCPHeader_t *pxTCPHeader = &pxTCPPacket->xTCPHeader;\r
-uint16_t usMSS = pxSocket->u.xTCP.usInitMSS;\r
-UBaseType_t uxOptionsLength;\r
-\r
-       /* We send out the TCP Maximum Segment Size option with our SYN[+ACK]. */\r
-\r
-       pxTCPHeader->ucOptdata[ 0 ] = ( uint8_t ) TCP_OPT_MSS;\r
-       pxTCPHeader->ucOptdata[ 1 ] = ( uint8_t ) TCP_OPT_MSS_LEN;\r
-       pxTCPHeader->ucOptdata[ 2 ] = ( uint8_t ) ( usMSS >> 8 );\r
-       pxTCPHeader->ucOptdata[ 3 ] = ( uint8_t ) ( usMSS & 0xffu );\r
-\r
-       #if( ipconfigUSE_TCP_WIN != 0 )\r
-       {\r
-               pxSocket->u.xTCP.ucMyWinScaleFactor = prvWinScaleFactor( pxSocket );\r
-\r
-               pxTCPHeader->ucOptdata[ 4 ] = TCP_OPT_NOOP;\r
-               pxTCPHeader->ucOptdata[ 5 ] = ( uint8_t ) ( TCP_OPT_WSOPT );\r
-               pxTCPHeader->ucOptdata[ 6 ] = ( uint8_t ) ( TCP_OPT_WSOPT_LEN );\r
-               pxTCPHeader->ucOptdata[ 7 ] = ( uint8_t ) pxSocket->u.xTCP.ucMyWinScaleFactor;\r
-               uxOptionsLength = 8u;\r
-       }\r
-       #else\r
-       {\r
-               uxOptionsLength = 4u;\r
-       }\r
-       #endif\r
-\r
-       #if( ipconfigUSE_TCP_WIN == 0 )\r
-       {\r
-               return uxOptionsLength;\r
-       }\r
-       #else\r
-       {\r
-               pxTCPHeader->ucOptdata[ uxOptionsLength + 0 ] = TCP_OPT_NOOP;\r
-               pxTCPHeader->ucOptdata[ uxOptionsLength + 1 ] = TCP_OPT_NOOP;\r
-               pxTCPHeader->ucOptdata[ uxOptionsLength + 2 ] = TCP_OPT_SACK_P; /* 4: Sack-Permitted Option. */\r
-               pxTCPHeader->ucOptdata[ uxOptionsLength + 3 ] = 2;      /* 2: length of this option. */\r
-               uxOptionsLength += 4u;\r
-\r
-               return uxOptionsLength; /* bytes, not words. */\r
-       }\r
-       #endif  /* ipconfigUSE_TCP_WIN == 0 */\r
-}\r
-\r
-/*\r
- * For anti-hanging protection and TCP keep-alive messages.  Called in two\r
- * places: after receiving a packet and after a state change.  The socket's\r
- * alive timer may be reset.\r
- */\r
-static void prvTCPTouchSocket( FreeRTOS_Socket_t *pxSocket )\r
-{\r
-       #if( ipconfigTCP_HANG_PROTECTION == 1 )\r
-       {\r
-               pxSocket->u.xTCP.xLastActTime = xTaskGetTickCount( );\r
-       }\r
-       #endif\r
-\r
-       #if( ipconfigTCP_KEEP_ALIVE == 1 )\r
-       {\r
-               pxSocket->u.xTCP.bits.bWaitKeepAlive = pdFALSE_UNSIGNED;\r
-               pxSocket->u.xTCP.bits.bSendKeepAlive = pdFALSE_UNSIGNED;\r
-               pxSocket->u.xTCP.ucKeepRepCount = 0u;\r
-               pxSocket->u.xTCP.xLastAliveTime = xTaskGetTickCount();\r
-       }\r
-       #endif\r
-\r
-       ( void ) pxSocket;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-/*\r
- * Changing to a new state. Centralised here to do specific actions such as\r
- * resetting the alive timer, calling the user's OnConnect handler to notify\r
- * that a socket has got (dis)connected, and setting bit to unblock a call to\r
- * FreeRTOS_select()\r
- */\r
-void vTCPStateChange( FreeRTOS_Socket_t *pxSocket, enum eTCP_STATE eTCPState )\r
-{\r
-FreeRTOS_Socket_t *xParent = NULL;\r
-BaseType_t bBefore = ( BaseType_t ) NOW_CONNECTED( pxSocket->u.xTCP.ucTCPState );      /* Was it connected ? */\r
-BaseType_t bAfter  = ( BaseType_t ) NOW_CONNECTED( eTCPState );                                                /* Is it connected now ? */\r
-#if( ipconfigHAS_DEBUG_PRINTF != 0 )\r
-       BaseType_t xPreviousState = ( BaseType_t ) pxSocket->u.xTCP.ucTCPState;\r
-#endif\r
-#if( ipconfigUSE_CALLBACKS == 1 )\r
-       FreeRTOS_Socket_t *xConnected = NULL;\r
-#endif\r
-\r
-       /* Has the connected status changed? */\r
-       if( bBefore != bAfter )\r
-       {\r
-               /* Is the socket connected now ? */\r
-               if( bAfter != pdFALSE )\r
-               {\r
-                       /* if bPassQueued is true, this socket is an orphan until it gets connected. */\r
-                       if( pxSocket->u.xTCP.bits.bPassQueued != pdFALSE_UNSIGNED )\r
-                       {\r
-                               /* Now that it is connected, find it's parent. */\r
-                               if( pxSocket->u.xTCP.bits.bReuseSocket != pdFALSE_UNSIGNED )\r
-                               {\r
-                                       xParent = pxSocket;\r
-                               }\r
-                               else\r
-                               {\r
-                                       xParent = pxSocket->u.xTCP.pxPeerSocket;\r
-                                       configASSERT( xParent != NULL );\r
-                               }\r
-                               if( xParent != NULL )\r
-                               {\r
-                                       if( xParent->u.xTCP.pxPeerSocket == NULL )\r
-                                       {\r
-                                               xParent->u.xTCP.pxPeerSocket = pxSocket;\r
-                                       }\r
-\r
-                                       xParent->xEventBits |= eSOCKET_ACCEPT;\r
-\r
-                                       #if( ipconfigSUPPORT_SELECT_FUNCTION == 1 )\r
-                                       {\r
-                                               /* Library support FreeRTOS_select().  Receiving a new\r
-                                               connection is being translated as a READ event. */\r
-                                               if( ( xParent->xSelectBits & eSELECT_READ ) != 0 )\r
-                                               {\r
-                                                       xParent->xEventBits |= ( eSELECT_READ << SOCKET_EVENT_BIT_COUNT );\r
-                                               }\r
-                                       }\r
-                                       #endif\r
-\r
-                                       #if( ipconfigUSE_CALLBACKS == 1 )\r
-                                       {\r
-                                               if( ( ipconfigIS_VALID_PROG_ADDRESS( xParent->u.xTCP.pxHandleConnected ) != pdFALSE ) &&\r
-                                                       ( xParent->u.xTCP.bits.bReuseSocket == pdFALSE_UNSIGNED ) )\r
-                                               {\r
-                                                       /* The listening socket does not become connected itself, in stead\r
-                                                       a child socket is created.\r
-                                                       Postpone a call the OnConnect event until the end of this function. */\r
-                                                       xConnected = xParent;\r
-                                               }\r
-                                       }\r
-                                       #endif\r
-                               }\r
-\r
-                               /* Don't need to access the parent socket anymore, so the\r
-                               reference 'pxPeerSocket' may be cleared. */\r
-                               pxSocket->u.xTCP.pxPeerSocket = NULL;\r
-                               pxSocket->u.xTCP.bits.bPassQueued = pdFALSE_UNSIGNED;\r
-\r
-                               /* When true, this socket may be returned in a call to accept(). */\r
-                               pxSocket->u.xTCP.bits.bPassAccept = pdTRUE_UNSIGNED;\r
-                       }\r
-                       else\r
-                       {\r
-                               pxSocket->xEventBits |= eSOCKET_CONNECT;\r
-\r
-                               #if( ipconfigSUPPORT_SELECT_FUNCTION == 1 )\r
-                               {\r
-                                       if( pxSocket->xSelectBits & eSELECT_WRITE )\r
-                                       {\r
-                                               pxSocket->xEventBits |= ( eSELECT_WRITE << SOCKET_EVENT_BIT_COUNT );\r
-                                       }\r
-                               }\r
-                               #endif\r
-                       }\r
-               }\r
-               else  /* bAfter == pdFALSE, connection is closed. */\r
-               {\r
-                       /* Notify/wake-up the socket-owner by setting a semaphore. */\r
-                       pxSocket->xEventBits |= eSOCKET_CLOSED;\r
-\r
-                       #if( ipconfigSUPPORT_SELECT_FUNCTION == 1 )\r
-                       {\r
-                               if( ( pxSocket->xSelectBits & eSELECT_EXCEPT ) != 0 )\r
-                               {\r
-                                       pxSocket->xEventBits |= ( eSELECT_EXCEPT << SOCKET_EVENT_BIT_COUNT );\r
-                               }\r
-                       }\r
-                       #endif\r
-               }\r
-               #if( ipconfigUSE_CALLBACKS == 1 )\r
-               {\r
-                       if( ( ipconfigIS_VALID_PROG_ADDRESS( pxSocket->u.xTCP.pxHandleConnected ) != pdFALSE ) && ( xConnected == NULL ) )\r
-                       {\r
-                               /* The 'connected' state has changed, call the user handler. */\r
-                               xConnected = pxSocket;\r
-                       }\r
-               }\r
-               #endif /* ipconfigUSE_CALLBACKS */\r
-\r
-               if( prvTCPSocketIsActive( ( UBaseType_t ) pxSocket->u.xTCP.ucTCPState ) == pdFALSE )\r
-               {\r
-                       /* Now the socket isn't in an active state anymore so it\r
-                       won't need further attention of the IP-task.\r
-                       Setting time-out to zero means that the socket won't get checked during\r
-                       timer events. */\r
-                       pxSocket->u.xTCP.usTimeout = 0u;\r
-               }\r
-       }\r
-       else\r
-       {\r
-               if( eTCPState == eCLOSED )\r
-               {\r
-                       /* Socket goes to status eCLOSED because of a RST.\r
-                       When nobody owns the socket yet, delete it. */\r
-                       if( ( pxSocket->u.xTCP.bits.bPassQueued != pdFALSE_UNSIGNED ) ||\r
-                               ( pxSocket->u.xTCP.bits.bPassAccept != pdFALSE_UNSIGNED ) )\r
-                       {\r
-                               FreeRTOS_debug_printf( ( "vTCPStateChange: Closing socket\n" ) );\r
-                               if( pxSocket->u.xTCP.bits.bReuseSocket == pdFALSE_UNSIGNED )\r
-                               {\r
-                                       FreeRTOS_closesocket( pxSocket );\r
-                               }\r
-                       }\r
-               }\r
-       }\r
-\r
-       /* Fill in the new state. */\r
-       pxSocket->u.xTCP.ucTCPState = ( uint8_t ) eTCPState;\r
-\r
-       /* touch the alive timers because moving to another state. */\r
-       prvTCPTouchSocket( pxSocket );\r
-\r
-       #if( ipconfigHAS_DEBUG_PRINTF == 1 )\r
-       {\r
-       if( ( xTCPWindowLoggingLevel >= 0 ) && ( ipconfigTCP_MAY_LOG_PORT( pxSocket->usLocalPort ) != pdFALSE ) )\r
-               FreeRTOS_debug_printf( ( "Socket %d -> %lxip:%u State %s->%s\n",\r
-                       pxSocket->usLocalPort,\r
-                       pxSocket->u.xTCP.ulRemoteIP,\r
-                       pxSocket->u.xTCP.usRemotePort,\r
-                       FreeRTOS_GetTCPStateName( ( UBaseType_t ) xPreviousState ),\r
-                       FreeRTOS_GetTCPStateName( ( UBaseType_t ) eTCPState ) ) );\r
-       }\r
-       #endif /* ipconfigHAS_DEBUG_PRINTF */\r
-\r
-       #if( ipconfigUSE_CALLBACKS == 1 )\r
-       {\r
-               if( xConnected != NULL )\r
-               {\r
-                       /* The 'connected' state has changed, call the OnConnect handler of the parent. */\r
-                       xConnected->u.xTCP.pxHandleConnected( ( Socket_t ) xConnected, bAfter );\r
-               }\r
-       }\r
-       #endif\r
-       if( xParent != NULL )\r
-       {\r
-               vSocketWakeUpUser( xParent );\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static NetworkBufferDescriptor_t *prvTCPBufferResize( FreeRTOS_Socket_t *pxSocket, NetworkBufferDescriptor_t *pxNetworkBuffer,\r
-       int32_t lDataLen, UBaseType_t uxOptionsLength )\r
-{\r
-NetworkBufferDescriptor_t *pxReturn;\r
-int32_t lNeeded;\r
-BaseType_t xResize;\r
-\r
-       if( xBufferAllocFixedSize != pdFALSE )\r
-       {\r
-               /* Network buffers are created with a fixed size and can hold the largest\r
-               MTU. */\r
-               lNeeded = ( int32_t ) ipTOTAL_ETHERNET_FRAME_SIZE;\r
-               /* and therefore, the buffer won't be too small.\r
-               Only ask for a new network buffer in case none was supplied. */\r
-               xResize = ( pxNetworkBuffer == NULL );\r
-       }\r
-       else\r
-       {\r
-               /* Network buffers are created with a variable size. See if it must\r
-               grow. */\r
-               lNeeded = FreeRTOS_max_int32( ( int32_t ) sizeof( pxSocket->u.xTCP.xPacket.u.ucLastPacket ),\r
-                       ( int32_t ) ( ipSIZE_OF_ETH_HEADER + ipSIZE_OF_IPv4_HEADER + ipSIZE_OF_TCP_HEADER + uxOptionsLength ) + lDataLen );\r
-               /* In case we were called from a TCP timer event, a buffer must be\r
-               created.  Otherwise, test 'xDataLength' of the provided buffer. */\r
-               xResize = ( pxNetworkBuffer == NULL ) || ( pxNetworkBuffer->xDataLength < (size_t)lNeeded );\r
-       }\r
-\r
-       if( xResize != pdFALSE )\r
-       {\r
-               /* The caller didn't provide a network buffer or the provided buffer is\r
-               too small.  As we must send-out a data packet, a buffer will be created\r
-               here. */\r
-               pxReturn = pxGetNetworkBufferWithDescriptor( ( uint32_t ) lNeeded, 0u );\r
-\r
-               if( pxReturn != NULL )\r
-               {\r
-                       /* Set the actual packet size, in case the returned buffer is larger. */\r
-                       pxReturn->xDataLength = lNeeded;\r
-\r
-                       /* Copy the existing data to the new created buffer. */\r
-                       if( pxNetworkBuffer )\r
-                       {\r
-                               /* Either from the previous buffer... */\r
-                               memcpy( pxReturn->pucEthernetBuffer, pxNetworkBuffer->pucEthernetBuffer, pxNetworkBuffer->xDataLength );\r
-\r
-                               /* ...and release it. */\r
-                               vReleaseNetworkBufferAndDescriptor( pxNetworkBuffer );\r
-                       }\r
-                       else\r
-                       {\r
-                               /* Or from the socket field 'xTCP.xPacket'. */\r
-                               memcpy( pxReturn->pucEthernetBuffer, pxSocket->u.xTCP.xPacket.u.ucLastPacket, sizeof( pxSocket->u.xTCP.xPacket.u.ucLastPacket ) );\r
-                       }\r
-               }\r
-       }\r
-       else\r
-       {\r
-               /* xResize is false, the network buffer provided was big enough. */\r
-               pxReturn = pxNetworkBuffer;\r
-\r
-               /* Thanks to Andrey Ivanov from swissEmbedded for reporting that the\r
-               xDataLength member must get the correct length too! */\r
-               pxNetworkBuffer->xDataLength = ( size_t ) ( ipSIZE_OF_ETH_HEADER + ipSIZE_OF_IPv4_HEADER + ipSIZE_OF_TCP_HEADER + uxOptionsLength ) + ( size_t ) lDataLen;\r
-       }\r
-\r
-       return pxReturn;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-/*\r
- * Prepare an outgoing message, in case anything has to be sent.\r
- */\r
-static int32_t prvTCPPrepareSend( FreeRTOS_Socket_t *pxSocket, NetworkBufferDescriptor_t **ppxNetworkBuffer, UBaseType_t uxOptionsLength )\r
-{\r
-int32_t lDataLen;\r
-uint8_t *pucEthernetBuffer, *pucSendData;\r
-TCPPacket_t *pxTCPPacket;\r
-size_t uxOffset;\r
-uint32_t ulDataGot, ulDistance;\r
-TCPWindow_t *pxTCPWindow;\r
-NetworkBufferDescriptor_t *pxNewBuffer;\r
-int32_t lStreamPos;\r
-\r
-       if( ( *ppxNetworkBuffer ) != NULL )\r
-       {\r
-               /* A network buffer descriptor was already supplied */\r
-               pucEthernetBuffer = ( *ppxNetworkBuffer )->pucEthernetBuffer;\r
-       }\r
-       else\r
-       {\r
-               /* For now let it point to the last packet header */\r
-               pucEthernetBuffer = pxSocket->u.xTCP.xPacket.u.ucLastPacket;\r
-       }\r
-\r
-       pxTCPPacket = ( TCPPacket_t * ) ( pucEthernetBuffer );\r
-       pxTCPWindow = &pxSocket->u.xTCP.xTCPWindow;\r
-       lDataLen = 0;\r
-       lStreamPos = 0;\r
-       pxTCPPacket->xTCPHeader.ucTCPFlags |= ipTCP_FLAG_ACK;\r
-\r
-       if( pxSocket->u.xTCP.txStream != NULL )\r
-       {\r
-               /* ulTCPWindowTxGet will return the amount of data which may be sent\r
-               along with the position in the txStream.\r
-               Why check for MSS > 1 ?\r
-               Because some TCP-stacks (like uIP) use it for flow-control. */\r
-               if( pxSocket->u.xTCP.usCurMSS > 1u )\r
-               {\r
-                       lDataLen = ( int32_t ) ulTCPWindowTxGet( pxTCPWindow, pxSocket->u.xTCP.ulWindowSize, &lStreamPos );\r
-               }\r
-\r
-               if( lDataLen > 0 )\r
-               {\r
-                       /* Check if the current network buffer is big enough, if not,\r
-                       resize it. */\r
-                       pxNewBuffer = prvTCPBufferResize( pxSocket, *ppxNetworkBuffer, lDataLen, uxOptionsLength );\r
-\r
-                       if( pxNewBuffer != NULL )\r
-                       {\r
-                               *ppxNetworkBuffer = pxNewBuffer;\r
-                               pucEthernetBuffer = pxNewBuffer->pucEthernetBuffer;\r
-                               pxTCPPacket = ( TCPPacket_t * ) ( pucEthernetBuffer );\r
-\r
-                               pucSendData = pucEthernetBuffer + ipSIZE_OF_ETH_HEADER + ipSIZE_OF_IPv4_HEADER + ipSIZE_OF_TCP_HEADER + uxOptionsLength;\r
-\r
-                               /* Translate the position in txStream to an offset from the tail\r
-                               marker. */\r
-                               uxOffset = uxStreamBufferDistance( pxSocket->u.xTCP.txStream, pxSocket->u.xTCP.txStream->uxTail, ( size_t ) lStreamPos );\r
-\r
-                               /* Here data is copied from the txStream in 'peek' mode.  Only\r
-                               when the packets are acked, the tail marker will be updated. */\r
-                               ulDataGot = ( uint32_t ) uxStreamBufferGet( pxSocket->u.xTCP.txStream, uxOffset, pucSendData, ( size_t ) lDataLen, pdTRUE );\r
-\r
-                               #if( ipconfigHAS_DEBUG_PRINTF != 0 )\r
-                               {\r
-                                       if( ulDataGot != ( uint32_t ) lDataLen )\r
-                                       {\r
-                                               FreeRTOS_debug_printf( ( "uxStreamBufferGet: pos %lu offs %lu only %lu != %lu\n",\r
-                                                       lStreamPos, uxOffset, ulDataGot, lDataLen ) );\r
-                                       }\r
-                               }\r
-                               #endif\r
-\r
-                               /* If the owner of the socket requests a closure, add the FIN\r
-                               flag to the last packet. */\r
-                               if( ( pxSocket->u.xTCP.bits.bCloseRequested != pdFALSE_UNSIGNED ) && ( pxSocket->u.xTCP.bits.bFinSent == pdFALSE_UNSIGNED ) )\r
-                               {\r
-                                       ulDistance = ( uint32_t ) uxStreamBufferDistance( pxSocket->u.xTCP.txStream, ( size_t ) lStreamPos, pxSocket->u.xTCP.txStream->uxHead );\r
-\r
-                                       if( ulDistance == ulDataGot )\r
-                                       {\r
-                                               #if (ipconfigHAS_DEBUG_PRINTF == 1)\r
-                                               {\r
-                                               /* the order of volatile accesses is undefined\r
-                                                       so such workaround */\r
-                                                       size_t uxHead = pxSocket->u.xTCP.txStream->uxHead;\r
-                                                       size_t uxMid = pxSocket->u.xTCP.txStream->uxMid;\r
-                                                       size_t uxTail = pxSocket->u.xTCP.txStream->uxTail;\r
-\r
-                                                       FreeRTOS_debug_printf( ( "CheckClose %lu <= %lu (%lu <= %lu <= %lu)\n", ulDataGot, ulDistance,\r
-                                                               uxTail, uxMid, uxHead ) );\r
-                                               }\r
-                                               #endif\r
-                                               /* Although the socket sends a FIN, it will stay in\r
-                                               ESTABLISHED until all current data has been received or\r
-                                               delivered. */\r
-                                               pxTCPPacket->xTCPHeader.ucTCPFlags |= ipTCP_FLAG_FIN;\r
-                                               pxTCPWindow->tx.ulFINSequenceNumber = pxTCPWindow->ulOurSequenceNumber + ( uint32_t ) lDataLen;\r
-                                               pxSocket->u.xTCP.bits.bFinSent = pdTRUE_UNSIGNED;\r
-                                       }\r
-                               }\r
-                       }\r
-                       else\r
-                       {\r
-                               lDataLen = -1;\r
-                       }\r
-               }\r
-       }\r
-\r
-       if( ( lDataLen >= 0 ) && ( pxSocket->u.xTCP.ucTCPState == eESTABLISHED ) )\r
-       {\r
-               /* See if the socket owner wants to shutdown this connection. */\r
-               if( ( pxSocket->u.xTCP.bits.bUserShutdown != pdFALSE_UNSIGNED ) &&\r
-                       ( xTCPWindowTxDone( pxTCPWindow ) != pdFALSE ) )\r
-               {\r
-                       pxSocket->u.xTCP.bits.bUserShutdown = pdFALSE_UNSIGNED;\r
-                       pxTCPPacket->xTCPHeader.ucTCPFlags |= ipTCP_FLAG_FIN;\r
-                       pxSocket->u.xTCP.bits.bFinSent = pdTRUE_UNSIGNED;\r
-                       pxSocket->u.xTCP.bits.bWinChange = pdTRUE_UNSIGNED;\r
-                       pxTCPWindow->tx.ulFINSequenceNumber = pxTCPWindow->tx.ulCurrentSequenceNumber;\r
-                       vTCPStateChange( pxSocket, eFIN_WAIT_1 );\r
-               }\r
-\r
-               #if( ipconfigTCP_KEEP_ALIVE != 0 )\r
-               {\r
-                       if( pxSocket->u.xTCP.ucKeepRepCount > 3u )\r
-                       {\r
-                               FreeRTOS_debug_printf( ( "keep-alive: giving up %lxip:%u\n",\r
-                                       pxSocket->u.xTCP.ulRemoteIP,                    /* IP address of remote machine. */\r
-                                       pxSocket->u.xTCP.usRemotePort ) );      /* Port on remote machine. */\r
-                               vTCPStateChange( pxSocket, eCLOSE_WAIT );\r
-                               lDataLen = -1;\r
-                       }\r
-                       if( ( lDataLen == 0 ) && ( pxSocket->u.xTCP.bits.bWinChange == pdFALSE_UNSIGNED ) )\r
-                       {\r
-                               /* If there is no data to be sent, and no window-update message,\r
-                               we might want to send a keep-alive message. */\r
-                               TickType_t xAge = xTaskGetTickCount( ) - pxSocket->u.xTCP.xLastAliveTime;\r
-                               TickType_t xMax;\r
-                               xMax = ( ( TickType_t ) ipconfigTCP_KEEP_ALIVE_INTERVAL * configTICK_RATE_HZ );\r
-                               if( pxSocket->u.xTCP.ucKeepRepCount )\r
-                               {\r
-                                       xMax = ( 3u * configTICK_RATE_HZ );\r
-                               }\r
-                               if( xAge > xMax )\r
-                               {\r
-                                       pxSocket->u.xTCP.xLastAliveTime = xTaskGetTickCount( );\r
-                                       if( xTCPWindowLoggingLevel )\r
-                                               FreeRTOS_debug_printf( ( "keep-alive: %lxip:%u count %u\n",\r
-                                                       pxSocket->u.xTCP.ulRemoteIP,\r
-                                                       pxSocket->u.xTCP.usRemotePort,\r
-                                                       pxSocket->u.xTCP.ucKeepRepCount ) );\r
-                                       pxSocket->u.xTCP.bits.bSendKeepAlive = pdTRUE_UNSIGNED;\r
-                                       pxSocket->u.xTCP.usTimeout = ( ( uint16_t ) pdMS_TO_TICKS( 2500 ) );\r
-                                       pxSocket->u.xTCP.ucKeepRepCount++;\r
-                               }\r
-                       }\r
-               }\r
-               #endif /* ipconfigTCP_KEEP_ALIVE */\r
-       }\r
-\r
-       /* Anything to send, a change of the advertised window size, or maybe send a\r
-       keep-alive message? */\r
-       if( ( lDataLen > 0 ) ||\r
-               ( pxSocket->u.xTCP.bits.bWinChange != pdFALSE_UNSIGNED ) ||\r
-               ( pxSocket->u.xTCP.bits.bSendKeepAlive != pdFALSE_UNSIGNED ) )\r
-       {\r
-               pxTCPPacket->xTCPHeader.ucTCPFlags &= ( ( uint8_t ) ~ipTCP_FLAG_PSH );\r
-               pxTCPPacket->xTCPHeader.ucTCPOffset = ( uint8_t )( ( ipSIZE_OF_TCP_HEADER + uxOptionsLength ) << 2 );\r
-\r
-               pxTCPPacket->xTCPHeader.ucTCPFlags |= ( uint8_t ) ipTCP_FLAG_ACK;\r
-\r
-               if( lDataLen != 0l )\r
-               {\r
-                       pxTCPPacket->xTCPHeader.ucTCPFlags |= ( uint8_t ) ipTCP_FLAG_PSH;\r
-               }\r
-\r
-               lDataLen += ( int32_t ) ( ipSIZE_OF_IPv4_HEADER + ipSIZE_OF_TCP_HEADER + uxOptionsLength );\r
-       }\r
-\r
-       return lDataLen;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-/*\r
- * Calculate after how much time this socket needs to be checked again.\r
- */\r
-static TickType_t prvTCPNextTimeout ( FreeRTOS_Socket_t *pxSocket )\r
-{\r
-TickType_t ulDelayMs = ( TickType_t ) tcpMAXIMUM_TCP_WAKEUP_TIME_MS;\r
-\r
-       if( pxSocket->u.xTCP.ucTCPState == eCONNECT_SYN )\r
-       {\r
-               /* The socket is actively connecting to a peer. */\r
-               if( pxSocket->u.xTCP.bits.bConnPrepared )\r
-               {\r
-                       /* Ethernet address has been found, use progressive timeout for\r
-                       active connect(). */\r
-                       if( pxSocket->u.xTCP.ucRepCount < 3u )\r
-                       {\r
-                               ulDelayMs = ( 3000UL << ( pxSocket->u.xTCP.ucRepCount - 1u ) );\r
-                       }\r
-                       else\r
-                       {\r
-                               ulDelayMs = 11000UL;\r
-                       }\r
-               }\r
-               else\r
-               {\r
-                       /* Still in the ARP phase: check every half second. */\r
-                       ulDelayMs = 500UL;\r
-               }\r
-\r
-               FreeRTOS_debug_printf( ( "Connect[%lxip:%u]: next timeout %u: %lu ms\n",\r
-                       pxSocket->u.xTCP.ulRemoteIP, pxSocket->u.xTCP.usRemotePort,\r
-                       pxSocket->u.xTCP.ucRepCount, ulDelayMs ) );\r
-               pxSocket->u.xTCP.usTimeout = ( uint16_t )pdMS_TO_MIN_TICKS( ulDelayMs );\r
-       }\r
-       else if( pxSocket->u.xTCP.usTimeout == 0u )\r
-       {\r
-               /* Let the sliding window mechanism decide what time-out is appropriate. */\r
-               BaseType_t xResult = xTCPWindowTxHasData( &pxSocket->u.xTCP.xTCPWindow, pxSocket->u.xTCP.ulWindowSize, &ulDelayMs );\r
-               if( ulDelayMs == 0u )\r
-               {\r
-                       if( xResult != ( BaseType_t )0 )\r
-                       {\r
-                               ulDelayMs = 1UL;\r
-                       }\r
-                       else\r
-                       {\r
-                               ulDelayMs = tcpMAXIMUM_TCP_WAKEUP_TIME_MS;\r
-                       }\r
-               }\r
-               else\r
-               {\r
-                       /* ulDelayMs contains the time to wait before a re-transmission. */\r
-               }\r
-               pxSocket->u.xTCP.usTimeout = ( uint16_t )pdMS_TO_MIN_TICKS( ulDelayMs );\r
-       }\r
-       else\r
-       {\r
-               /* field '.usTimeout' has already been set (by the\r
-               keep-alive/delayed-ACK mechanism). */\r
-       }\r
-\r
-       /* Return the number of clock ticks before the timer expires. */\r
-       return ( TickType_t ) pxSocket->u.xTCP.usTimeout;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvTCPAddTxData( FreeRTOS_Socket_t *pxSocket )\r
-{\r
-int32_t lCount, lLength;\r
-\r
-       /* A txStream has been created already, see if the socket has new data for\r
-       the sliding window.\r
-\r
-       uxStreamBufferMidSpace() returns the distance between rxHead and rxMid.  It contains new\r
-       Tx data which has not been passed to the sliding window yet.  The oldest\r
-       data not-yet-confirmed can be found at rxTail. */\r
-       lLength = ( int32_t ) uxStreamBufferMidSpace( pxSocket->u.xTCP.txStream );\r
-\r
-       if( lLength > 0 )\r
-       {\r
-               /* All data between txMid and rxHead will now be passed to the sliding\r
-               window manager, so it can start transmitting them.\r
-\r
-               Hand over the new data to the sliding window handler.  It will be\r
-               split-up in chunks of 1460 bytes each (or less, depending on\r
-               ipconfigTCP_MSS). */\r
-               lCount = lTCPWindowTxAdd(       &pxSocket->u.xTCP.xTCPWindow,\r
-                                                               ( uint32_t ) lLength,\r
-                                                               ( int32_t ) pxSocket->u.xTCP.txStream->uxMid,\r
-                                                               ( int32_t ) pxSocket->u.xTCP.txStream->LENGTH );\r
-\r
-               /* Move the rxMid pointer forward up to rxHead. */\r
-               if( lCount > 0 )\r
-               {\r
-                       vStreamBufferMoveMid( pxSocket->u.xTCP.txStream, ( size_t ) lCount );\r
-               }\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-/*\r
- * prvTCPHandleFin() will be called to handle socket closure\r
- * The Closure starts when either a FIN has been received and accepted,\r
- * Or when the socket has sent a FIN flag to the peer\r
- * Before being called, it has been checked that both reception and transmission\r
- * are complete.\r
- */\r
-static BaseType_t prvTCPHandleFin( FreeRTOS_Socket_t *pxSocket, NetworkBufferDescriptor_t *pxNetworkBuffer )\r
-{\r
-TCPPacket_t *pxTCPPacket = ( TCPPacket_t * ) ( pxNetworkBuffer->pucEthernetBuffer );\r
-TCPHeader_t *pxTCPHeader = &pxTCPPacket->xTCPHeader;\r
-uint8_t ucTCPFlags = pxTCPHeader->ucTCPFlags;\r
-TCPWindow_t *pxTCPWindow = &pxSocket->u.xTCP.xTCPWindow;\r
-BaseType_t xSendLength = 0;\r
-uint32_t ulAckNr = FreeRTOS_ntohl( pxTCPHeader->ulAckNr );\r
-\r
-       if( ( ucTCPFlags & ipTCP_FLAG_FIN ) != 0u )\r
-       {\r
-               pxTCPWindow->rx.ulCurrentSequenceNumber = pxTCPWindow->rx.ulFINSequenceNumber + 1u;\r
-       }\r
-       if( pxSocket->u.xTCP.bits.bFinSent == pdFALSE_UNSIGNED )\r
-       {\r
-               /* We haven't yet replied with a FIN, do so now. */\r
-               pxTCPWindow->tx.ulFINSequenceNumber = pxTCPWindow->tx.ulCurrentSequenceNumber;\r
-               pxSocket->u.xTCP.bits.bFinSent = pdTRUE_UNSIGNED;\r
-       }\r
-       else\r
-       {\r
-               /* We did send a FIN already, see if it's ACK'd. */\r
-               if( ulAckNr == pxTCPWindow->tx.ulFINSequenceNumber + 1u )\r
-               {\r
-                       pxSocket->u.xTCP.bits.bFinAcked = pdTRUE_UNSIGNED;\r
-               }\r
-       }\r
-\r
-       if( pxSocket->u.xTCP.bits.bFinAcked == pdFALSE_UNSIGNED )\r
-       {\r
-               pxTCPWindow->tx.ulCurrentSequenceNumber = pxTCPWindow->tx.ulFINSequenceNumber;\r
-               pxTCPHeader->ucTCPFlags = ipTCP_FLAG_ACK | ipTCP_FLAG_FIN;\r
-\r
-               /* And wait for the final ACK. */\r
-               vTCPStateChange( pxSocket, eLAST_ACK );\r
-       }\r
-       else\r
-       {\r
-               /* Our FIN has been ACK'd, the outgoing sequence number is now fixed. */\r
-               pxTCPWindow->tx.ulCurrentSequenceNumber = pxTCPWindow->tx.ulFINSequenceNumber + 1u;\r
-               if( pxSocket->u.xTCP.bits.bFinRecv == pdFALSE_UNSIGNED )\r
-               {\r
-                       /* We have sent out a FIN but the peer hasn't replied with a FIN\r
-                       yet. Do nothing for the moment. */\r
-                       pxTCPHeader->ucTCPFlags = 0u;\r
-               }\r
-               else\r
-               {\r
-                       if( pxSocket->u.xTCP.bits.bFinLast == pdFALSE_UNSIGNED )\r
-                       {\r
-                               /* This is the third of the three-way hand shake: the last\r
-                               ACK. */\r
-                               pxTCPHeader->ucTCPFlags = ipTCP_FLAG_ACK;\r
-                       }\r
-                       else\r
-                       {\r
-                               /* The other party started the closure, so we just wait for the\r
-                               last ACK. */\r
-                               pxTCPHeader->ucTCPFlags = 0u;\r
-                       }\r
-\r
-                       /* And wait for the user to close this socket. */\r
-                       vTCPStateChange( pxSocket, eCLOSE_WAIT );\r
-               }\r
-       }\r
-\r
-       pxTCPWindow->ulOurSequenceNumber = pxTCPWindow->tx.ulCurrentSequenceNumber;\r
-\r
-       if( pxTCPHeader->ucTCPFlags != 0u )\r
-       {\r
-               xSendLength = ( BaseType_t ) ( ipSIZE_OF_IPv4_HEADER + ipSIZE_OF_TCP_HEADER + pxTCPWindow->ucOptionLength );\r
-       }\r
-\r
-       pxTCPHeader->ucTCPOffset = ( uint8_t ) ( ( ipSIZE_OF_TCP_HEADER + pxTCPWindow->ucOptionLength ) << 2 );\r
-\r
-       if( xTCPWindowLoggingLevel != 0 )\r
-       {\r
-               FreeRTOS_debug_printf( ( "TCP: send FIN+ACK (ack %lu, cur/nxt %lu/%lu) ourSeqNr %lu | Rx %lu\n",\r
-                       ulAckNr - pxTCPWindow->tx.ulFirstSequenceNumber,\r
-                       pxTCPWindow->tx.ulCurrentSequenceNumber - pxTCPWindow->tx.ulFirstSequenceNumber,\r
-                       pxTCPWindow->ulNextTxSequenceNumber - pxTCPWindow->tx.ulFirstSequenceNumber,\r
-                       pxTCPWindow->ulOurSequenceNumber - pxTCPWindow->tx.ulFirstSequenceNumber,\r
-                       pxTCPWindow->rx.ulCurrentSequenceNumber - pxTCPWindow->rx.ulFirstSequenceNumber ) );\r
-       }\r
-\r
-       return xSendLength;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-/*\r
- * prvCheckRxData(): called from prvTCPHandleState()\r
- *\r
- * The first thing that will be done is find the TCP payload data\r
- * and check the length of this data.\r
- */\r
-static BaseType_t prvCheckRxData( NetworkBufferDescriptor_t *pxNetworkBuffer, uint8_t **ppucRecvData )\r
-{\r
-TCPPacket_t *pxTCPPacket = ( TCPPacket_t * ) ( pxNetworkBuffer->pucEthernetBuffer );\r
-TCPHeader_t *pxTCPHeader = &( pxTCPPacket->xTCPHeader );\r
-int32_t lLength, lTCPHeaderLength, lReceiveLength, lUrgentLength;\r
-\r
-       /* Determine the length and the offset of the user-data sent to this\r
-       node.\r
-\r
-       The size of the TCP header is given in a multiple of 4-byte words (single\r
-       byte, needs no ntoh() translation).  A shift-right 2: is the same as\r
-       (offset >> 4) * 4. */\r
-       lTCPHeaderLength = ( BaseType_t ) ( ( pxTCPHeader->ucTCPOffset & VALID_BITS_IN_TCP_OFFSET_BYTE ) >> 2 );\r
-\r
-       /* Let pucRecvData point to the first byte received. */\r
-       *ppucRecvData = pxNetworkBuffer->pucEthernetBuffer + ipSIZE_OF_ETH_HEADER + ipSIZE_OF_IPv4_HEADER + lTCPHeaderLength;\r
-\r
-       /* Calculate lReceiveLength - the length of the TCP data received.  This is\r
-       equal to the total packet length minus:\r
-       ( LinkLayer length (14) + IP header length (20) + size of TCP header(20 +) ).*/\r
-       lReceiveLength = ( ( int32_t ) pxNetworkBuffer->xDataLength ) - ( int32_t ) ipSIZE_OF_ETH_HEADER;\r
-       lLength =  ( int32_t )FreeRTOS_htons( pxTCPPacket->xIPHeader.usLength );\r
-\r
-       if( lReceiveLength > lLength )\r
-       {\r
-               /* More bytes were received than the reported length, often because of\r
-               padding bytes at the end. */\r
-               lReceiveLength = lLength;\r
-       }\r
-\r
-       /* Subtract the size of the TCP and IP headers and the actual data size is\r
-       known. */\r
-       if( lReceiveLength > ( lTCPHeaderLength + ( int32_t ) ipSIZE_OF_IPv4_HEADER ) )\r
-       {\r
-               lReceiveLength -= ( lTCPHeaderLength + ( int32_t ) ipSIZE_OF_IPv4_HEADER );\r
-       }\r
-       else\r
-       {\r
-               lReceiveLength = 0;\r
-       }\r
-\r
-       /* Urgent Pointer:\r
-       This field communicates the current value of the urgent pointer as a\r
-       positive offset from the sequence number in this segment.  The urgent\r
-       pointer points to the sequence number of the octet following the urgent\r
-       data.  This field is only be interpreted in segments with the URG control\r
-       bit set. */\r
-       if( ( pxTCPHeader->ucTCPFlags & ipTCP_FLAG_URG ) != 0u )\r
-       {\r
-               /* Although we ignore the urgent data, we have to skip it. */\r
-               lUrgentLength = ( int32_t ) FreeRTOS_htons( pxTCPHeader->usUrgent );\r
-               *ppucRecvData += lUrgentLength;\r
-               lReceiveLength -= FreeRTOS_min_int32( lReceiveLength, lUrgentLength );\r
-       }\r
-\r
-       return ( BaseType_t ) lReceiveLength;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-/*\r
- * prvStoreRxData(): called from prvTCPHandleState()\r
- *\r
- * The second thing is to do is check if the payload data may be accepted\r
- * If so, they will be added to the reception queue.\r
- */\r
-static BaseType_t prvStoreRxData( FreeRTOS_Socket_t *pxSocket, uint8_t *pucRecvData,\r
-       NetworkBufferDescriptor_t *pxNetworkBuffer, uint32_t ulReceiveLength )\r
-{\r
-TCPPacket_t *pxTCPPacket = ( TCPPacket_t * ) ( pxNetworkBuffer->pucEthernetBuffer );\r
-TCPHeader_t *pxTCPHeader = &pxTCPPacket->xTCPHeader;\r
-TCPWindow_t *pxTCPWindow = &pxSocket->u.xTCP.xTCPWindow;\r
-uint32_t ulSequenceNumber, ulSpace;\r
-int32_t lOffset, lStored;\r
-BaseType_t xResult = 0;\r
-\r
-       ulSequenceNumber = FreeRTOS_ntohl( pxTCPHeader->ulSequenceNumber );\r
-\r
-       if( ( ulReceiveLength > 0u ) && ( pxSocket->u.xTCP.ucTCPState >= eSYN_RECEIVED ) )\r
-       {\r
-               /* See if way may accept the data contents and forward it to the socket\r
-               owner.\r
-\r
-               If it can't be "accept"ed it may have to be stored and send a selective\r
-               ack (SACK) option to confirm it.  In that case, xTCPWindowRxStore() will be\r
-               called later to store an out-of-order packet (in case lOffset is\r
-               negative). */\r
-               if ( pxSocket->u.xTCP.rxStream )\r
-               {\r
-                       ulSpace = ( uint32_t )uxStreamBufferGetSpace ( pxSocket->u.xTCP.rxStream );\r
-               }\r
-               else\r
-               {\r
-                       ulSpace = ( uint32_t )pxSocket->u.xTCP.uxRxStreamSize;\r
-               }\r
-\r
-               lOffset = lTCPWindowRxCheck( pxTCPWindow, ulSequenceNumber, ulReceiveLength, ulSpace );\r
-\r
-               if( lOffset >= 0 )\r
-               {\r
-                       /* New data has arrived and may be made available to the user.  See\r
-                       if the head marker in rxStream may be advanced, only if lOffset == 0.\r
-                       In case the low-water mark is reached, bLowWater will be set\r
-                       "low-water" here stands for "little space". */\r
-                       lStored = lTCPAddRxdata( pxSocket, ( uint32_t ) lOffset, pucRecvData, ulReceiveLength );\r
-\r
-                       if( lStored != ( int32_t ) ulReceiveLength )\r
-                       {\r
-                               FreeRTOS_debug_printf( ( "lTCPAddRxdata: stored %ld / %lu bytes??\n", lStored, ulReceiveLength ) );\r
-\r
-                               /* Received data could not be stored.  The socket's flag\r
-                               bMallocError has been set.  The socket now has the status\r
-                               eCLOSE_WAIT and a RST packet will be sent back. */\r
-                               prvTCPSendReset( pxNetworkBuffer );\r
-                               xResult = -1;\r
-                       }\r
-               }\r
-\r
-               /* After a missing packet has come in, higher packets may be passed to\r
-               the user. */\r
-               #if( ipconfigUSE_TCP_WIN == 1 )\r
-               {\r
-                       /* Now lTCPAddRxdata() will move the rxHead pointer forward\r
-                       so data becomes available to the user immediately\r
-                       In case the low-water mark is reached, bLowWater will be set. */\r
-                       if( ( xResult == 0 ) && ( pxTCPWindow->ulUserDataLength > 0 ) )\r
-                       {\r
-                               lTCPAddRxdata( pxSocket, 0ul, NULL, pxTCPWindow->ulUserDataLength );\r
-                               pxTCPWindow->ulUserDataLength = 0;\r
-                       }\r
-               }\r
-               #endif /* ipconfigUSE_TCP_WIN */\r
-       }\r
-       else\r
-       {\r
-               pxTCPWindow->ucOptionLength = 0u;\r
-       }\r
-\r
-       return xResult;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-/* Set the TCP options (if any) for the outgoing packet. */\r
-static UBaseType_t prvSetOptions( FreeRTOS_Socket_t *pxSocket, NetworkBufferDescriptor_t *pxNetworkBuffer )\r
-{\r
-TCPPacket_t *pxTCPPacket = ( TCPPacket_t * ) ( pxNetworkBuffer->pucEthernetBuffer );\r
-TCPHeader_t *pxTCPHeader = &pxTCPPacket->xTCPHeader;\r
-TCPWindow_t *pxTCPWindow = &pxSocket->u.xTCP.xTCPWindow;\r
-UBaseType_t uxOptionsLength = pxTCPWindow->ucOptionLength;\r
-\r
-       #if(    ipconfigUSE_TCP_WIN == 1 )\r
-               if( uxOptionsLength != 0u )\r
-               {\r
-                       /* TCP options must be sent because a packet which is out-of-order\r
-                       was received. */\r
-                       if( xTCPWindowLoggingLevel >= 0 )\r
-                               FreeRTOS_debug_printf( ( "SACK[%d,%d]: optlen %lu sending %lu - %lu\n",\r
-                                       pxSocket->usLocalPort,\r
-                                       pxSocket->u.xTCP.usRemotePort,\r
-                                       uxOptionsLength,\r
-                                       FreeRTOS_ntohl( pxTCPWindow->ulOptionsData[ 1 ] ) - pxSocket->u.xTCP.xTCPWindow.rx.ulFirstSequenceNumber,\r
-                                       FreeRTOS_ntohl( pxTCPWindow->ulOptionsData[ 2 ] ) - pxSocket->u.xTCP.xTCPWindow.rx.ulFirstSequenceNumber ) );\r
-                       memcpy( pxTCPHeader->ucOptdata, pxTCPWindow->ulOptionsData, ( size_t ) uxOptionsLength );\r
-\r
-                       /* The header length divided by 4, goes into the higher nibble,\r
-                       effectively a shift-left 2. */\r
-                       pxTCPHeader->ucTCPOffset = ( uint8_t )( ( ipSIZE_OF_TCP_HEADER + uxOptionsLength ) << 2 );\r
-               }\r
-               else\r
-       #endif  /* ipconfigUSE_TCP_WIN */\r
-       if( ( pxSocket->u.xTCP.ucTCPState >= eESTABLISHED ) && ( pxSocket->u.xTCP.bits.bMssChange != pdFALSE_UNSIGNED ) )\r
-       {\r
-               /* TCP options must be sent because the MSS has changed. */\r
-               pxSocket->u.xTCP.bits.bMssChange = pdFALSE_UNSIGNED;\r
-               if( xTCPWindowLoggingLevel >= 0 )\r
-               {\r
-                       FreeRTOS_debug_printf( ( "MSS: sending %d\n", pxSocket->u.xTCP.usCurMSS ) );\r
-               }\r
-\r
-               pxTCPHeader->ucOptdata[ 0 ] = TCP_OPT_MSS;\r
-               pxTCPHeader->ucOptdata[ 1 ] = TCP_OPT_MSS_LEN;\r
-               pxTCPHeader->ucOptdata[ 2 ] = ( uint8_t ) ( ( pxSocket->u.xTCP.usCurMSS ) >> 8 );\r
-               pxTCPHeader->ucOptdata[ 3 ] = ( uint8_t ) ( ( pxSocket->u.xTCP.usCurMSS ) & 0xffu );\r
-               uxOptionsLength = 4u;\r
-               pxTCPHeader->ucTCPOffset = ( uint8_t )( ( ipSIZE_OF_TCP_HEADER + uxOptionsLength ) << 2 );\r
-       }\r
-\r
-       return uxOptionsLength;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-/*\r
- * prvHandleSynReceived(): called from prvTCPHandleState()\r
- *\r
- * Called from the states: eSYN_RECEIVED and eCONNECT_SYN\r
- * If the flags received are correct, the socket will move to eESTABLISHED.\r
- */\r
-static BaseType_t prvHandleSynReceived( FreeRTOS_Socket_t *pxSocket, NetworkBufferDescriptor_t **ppxNetworkBuffer,\r
-       uint32_t ulReceiveLength, UBaseType_t uxOptionsLength )\r
-{\r
-TCPPacket_t *pxTCPPacket = ( TCPPacket_t * ) ( (*ppxNetworkBuffer)->pucEthernetBuffer );\r
-TCPHeader_t *pxTCPHeader = &pxTCPPacket->xTCPHeader;\r
-TCPWindow_t *pxTCPWindow = &pxSocket->u.xTCP.xTCPWindow;\r
-uint8_t ucTCPFlags = pxTCPHeader->ucTCPFlags;\r
-uint32_t ulSequenceNumber = FreeRTOS_ntohl( pxTCPHeader->ulSequenceNumber );\r
-BaseType_t xSendLength = 0;\r
-\r
-       /* Either expect a ACK or a SYN+ACK. */\r
-       uint16_t usExpect = ( uint16_t ) ipTCP_FLAG_ACK;\r
-       if( pxSocket->u.xTCP.ucTCPState == eCONNECT_SYN )\r
-       {\r
-               usExpect |= ( uint16_t ) ipTCP_FLAG_SYN;\r
-       }\r
-\r
-       if( ( ucTCPFlags & 0x17u ) != usExpect )\r
-       {\r
-               /* eSYN_RECEIVED: flags 0010 expected, not 0002. */\r
-               /* eSYN_RECEIVED: flags ACK  expected, not SYN. */\r
-               FreeRTOS_debug_printf( ( "%s: flags %04X expected, not %04X\n",\r
-                       pxSocket->u.xTCP.ucTCPState == eSYN_RECEIVED ? "eSYN_RECEIVED" : "eCONNECT_SYN",\r
-                       usExpect, ucTCPFlags ) );\r
-               vTCPStateChange( pxSocket, eCLOSE_WAIT );\r
-               pxTCPHeader->ucTCPFlags |= ipTCP_FLAG_RST;\r
-               xSendLength = ( BaseType_t ) ( ipSIZE_OF_IPv4_HEADER + ipSIZE_OF_TCP_HEADER + uxOptionsLength );\r
-               pxTCPHeader->ucTCPOffset = ( uint8_t )( ( ipSIZE_OF_TCP_HEADER + uxOptionsLength ) << 2 );\r
-       }\r
-       else\r
-       {\r
-               pxTCPWindow->usPeerPortNumber = pxSocket->u.xTCP.usRemotePort;\r
-               pxTCPWindow->usOurPortNumber = pxSocket->usLocalPort;\r
-\r
-               if( pxSocket->u.xTCP.ucTCPState == eCONNECT_SYN )\r
-               {\r
-                       TCPPacket_t *pxLastTCPPacket = ( TCPPacket_t * ) ( pxSocket->u.xTCP.xPacket.u.ucLastPacket );\r
-\r
-                       /* Clear the SYN flag in lastPacket. */\r
-                       pxLastTCPPacket->xTCPHeader.ucTCPFlags = ipTCP_FLAG_ACK;\r
-\r
-                       /* This socket was the one connecting actively so now perofmr the\r
-                       synchronisation. */\r
-                       vTCPWindowInit( &pxSocket->u.xTCP.xTCPWindow,\r
-                               ulSequenceNumber, pxSocket->u.xTCP.xTCPWindow.ulOurSequenceNumber, ( uint32_t ) pxSocket->u.xTCP.usCurMSS );\r
-                       pxTCPWindow->rx.ulCurrentSequenceNumber = pxTCPWindow->rx.ulHighestSequenceNumber = ulSequenceNumber + 1u;\r
-                       pxTCPWindow->tx.ulCurrentSequenceNumber++; /* because we send a TCP_SYN [ | TCP_ACK ]; */\r
-                       pxTCPWindow->ulNextTxSequenceNumber++;\r
-               }\r
-               else if( ulReceiveLength == 0u )\r
-               {\r
-                       pxTCPWindow->rx.ulCurrentSequenceNumber = ulSequenceNumber;\r
-               }\r
-\r
-               /* The SYN+ACK has been confirmed, increase the next sequence number by\r
-               1. */\r
-               pxTCPWindow->ulOurSequenceNumber = pxTCPWindow->tx.ulFirstSequenceNumber + 1u;\r
-\r
-               #if( ipconfigUSE_TCP_WIN == 1 )\r
-               {\r
-                       FreeRTOS_debug_printf( ( "TCP: %s %d => %lxip:%d set ESTAB (scaling %u)\n",\r
-                               pxSocket->u.xTCP.ucTCPState == eCONNECT_SYN ? "active" : "passive",\r
-                               pxSocket->usLocalPort,\r
-                               pxSocket->u.xTCP.ulRemoteIP,\r
-                               pxSocket->u.xTCP.usRemotePort,\r
-                               ( unsigned ) pxSocket->u.xTCP.bits.bWinScaling ) );\r
-               }\r
-               #endif /* ipconfigUSE_TCP_WIN */\r
-\r
-               if( ( pxSocket->u.xTCP.ucTCPState == eCONNECT_SYN ) || ( ulReceiveLength != 0u ) )\r
-               {\r
-                       pxTCPHeader->ucTCPFlags = ipTCP_FLAG_ACK;\r
-                       xSendLength = ( BaseType_t ) ( ipSIZE_OF_IPv4_HEADER + ipSIZE_OF_TCP_HEADER + uxOptionsLength );\r
-                       pxTCPHeader->ucTCPOffset = ( uint8_t ) ( ( ipSIZE_OF_TCP_HEADER + uxOptionsLength ) << 2 );\r
-               }\r
-               #if( ipconfigUSE_TCP_WIN != 0 )\r
-               {\r
-                       if( pxSocket->u.xTCP.bits.bWinScaling == pdFALSE_UNSIGNED )\r
-                       {\r
-                               /* The other party did not send a scaling factor.\r
-                               A shifting factor in this side must be canceled. */\r
-                               pxSocket->u.xTCP.ucMyWinScaleFactor = 0;\r
-                               pxSocket->u.xTCP.ucPeerWinScaleFactor = 0;\r
-                       }\r
-               }\r
-               #endif /* ipconfigUSE_TCP_WIN */\r
-               /* This was the third step of connecting: SYN, SYN+ACK, ACK     so now the\r
-               connection is established. */\r
-               vTCPStateChange( pxSocket, eESTABLISHED );\r
-       }\r
-\r
-       return xSendLength;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-/*\r
- * prvHandleEstablished(): called from prvTCPHandleState()\r
- *\r
- * Called if the status is eESTABLISHED.  Data reception has been handled\r
- * earlier.  Here the ACK's from peer will be checked, and if a FIN is received,\r
- * the code will check if it may be accepted, i.e. if all expected data has been\r
- * completely received.\r
- */\r
-static BaseType_t prvHandleEstablished( FreeRTOS_Socket_t *pxSocket, NetworkBufferDescriptor_t **ppxNetworkBuffer,\r
-       uint32_t ulReceiveLength, UBaseType_t uxOptionsLength )\r
-{\r
-TCPPacket_t *pxTCPPacket = ( TCPPacket_t * ) ( (*ppxNetworkBuffer)->pucEthernetBuffer );\r
-TCPHeader_t *pxTCPHeader = &pxTCPPacket->xTCPHeader;\r
-TCPWindow_t *pxTCPWindow = &pxSocket->u.xTCP.xTCPWindow;\r
-uint8_t ucTCPFlags = pxTCPHeader->ucTCPFlags;\r
-uint32_t ulSequenceNumber = FreeRTOS_ntohl( pxTCPHeader->ulSequenceNumber ), ulCount;\r
-BaseType_t xSendLength = 0, xMayClose = pdFALSE, bRxComplete, bTxDone;\r
-int32_t lDistance, lSendResult;\r
-\r
-       /* Remember the window size the peer is advertising. */\r
-       pxSocket->u.xTCP.ulWindowSize = FreeRTOS_ntohs( pxTCPHeader->usWindow );\r
-       #if( ipconfigUSE_TCP_WIN != 0 )\r
-       {\r
-               pxSocket->u.xTCP.ulWindowSize =\r
-                       ( pxSocket->u.xTCP.ulWindowSize << pxSocket->u.xTCP.ucPeerWinScaleFactor );\r
-       }\r
-       #endif\r
-\r
-       if( ( ucTCPFlags & ( uint8_t ) ipTCP_FLAG_ACK ) != 0u )\r
-       {\r
-               ulCount = ulTCPWindowTxAck( pxTCPWindow, FreeRTOS_ntohl( pxTCPPacket->xTCPHeader.ulAckNr ) );\r
-\r
-               /* ulTCPWindowTxAck() returns the number of bytes which have been acked,\r
-               starting at 'tx.ulCurrentSequenceNumber'.  Advance the tail pointer in\r
-               txStream. */\r
-               if( ( pxSocket->u.xTCP.txStream != NULL ) && ( ulCount > 0u ) )\r
-               {\r
-                       /* Just advancing the tail index, 'ulCount' bytes have been\r
-                       confirmed, and because there is new space in the txStream, the\r
-                       user/owner should be woken up. */\r
-                       /* _HT_ : only in case the socket's waiting? */\r
-                       if( uxStreamBufferGet( pxSocket->u.xTCP.txStream, 0u, NULL, ( size_t ) ulCount, pdFALSE ) != 0u )\r
-                       {\r
-                               pxSocket->xEventBits |= eSOCKET_SEND;\r
-\r
-                               #if ipconfigSUPPORT_SELECT_FUNCTION == 1\r
-                               {\r
-                                       if( ( pxSocket->xSelectBits & eSELECT_WRITE ) != 0 )\r
-                                       {\r
-                                               pxSocket->xEventBits |= ( eSELECT_WRITE << SOCKET_EVENT_BIT_COUNT );\r
-                                       }\r
-                               }\r
-                               #endif\r
-                               /* In case the socket owner has installed an OnSent handler,\r
-                               call it now. */\r
-                               #if( ipconfigUSE_CALLBACKS == 1 )\r
-                               {\r
-                                       if( ipconfigIS_VALID_PROG_ADDRESS( pxSocket->u.xTCP.pxHandleSent ) )\r
-                                       {\r
-                                               pxSocket->u.xTCP.pxHandleSent( ( Socket_t )pxSocket, ulCount );\r
-                                       }\r
-                               }\r
-                               #endif /* ipconfigUSE_CALLBACKS == 1  */\r
-                       }\r
-               }\r
-       }\r
-\r
-       /* If this socket has a stream for transmission, add the data to the\r
-       outgoing segment(s). */\r
-       if( pxSocket->u.xTCP.txStream != NULL )\r
-       {\r
-               prvTCPAddTxData( pxSocket );\r
-       }\r
-\r
-       pxSocket->u.xTCP.xTCPWindow.ulOurSequenceNumber = pxTCPWindow->tx.ulCurrentSequenceNumber;\r
-\r
-       if( ( pxSocket->u.xTCP.bits.bFinAccepted != pdFALSE_UNSIGNED ) || ( ( ucTCPFlags & ( uint8_t ) ipTCP_FLAG_FIN ) != 0u ) )\r
-       {\r
-               /* Peer is requesting to stop, see if we're really finished. */\r
-               xMayClose = pdTRUE;\r
-\r
-               /* Checks are only necessary if we haven't sent a FIN yet. */\r
-               if( pxSocket->u.xTCP.bits.bFinSent == pdFALSE_UNSIGNED )\r
-               {\r
-                       /* xTCPWindowTxDone returns true when all Tx queues are empty. */\r
-                       bRxComplete = xTCPWindowRxEmpty( pxTCPWindow );\r
-                       bTxDone  = xTCPWindowTxDone( pxTCPWindow );\r
-\r
-                       if( ( bRxComplete == 0 ) || ( bTxDone == 0 ) )\r
-                       {\r
-                               /* Refusing FIN: Rx incomp 1 optlen 4 tx done 1. */\r
-                               FreeRTOS_debug_printf( ( "Refusing FIN[%u,%u]: RxCompl %lu tx done %ld\n",\r
-                                       pxSocket->usLocalPort,\r
-                                       pxSocket->u.xTCP.usRemotePort,\r
-                                       bRxComplete, bTxDone ) );\r
-                               xMayClose = pdFALSE;\r
-                       }\r
-                       else\r
-                       {\r
-                               lDistance = ( int32_t ) ( ulSequenceNumber + ulReceiveLength - pxTCPWindow->rx.ulCurrentSequenceNumber );\r
-\r
-                               if( lDistance > 1 )\r
-                               {\r
-                                       FreeRTOS_debug_printf( ( "Refusing FIN: Rx not complete %ld (cur %lu high %lu)\n",\r
-                                               lDistance, pxTCPWindow->rx.ulCurrentSequenceNumber - pxTCPWindow->rx.ulFirstSequenceNumber,\r
-                                               pxTCPWindow->rx.ulHighestSequenceNumber - pxTCPWindow->rx.ulFirstSequenceNumber ) );\r
-\r
-                                       xMayClose = pdFALSE;\r
-                               }\r
-                       }\r
-               }\r
-\r
-               if( xTCPWindowLoggingLevel > 0 )\r
-               {\r
-                       FreeRTOS_debug_printf( ( "TCP: FIN received, mayClose = %ld (Rx %lu Len %ld, Tx %lu)\n",\r
-                               xMayClose, ulSequenceNumber - pxSocket->u.xTCP.xTCPWindow.rx.ulFirstSequenceNumber, ulReceiveLength,\r
-                               pxTCPWindow->tx.ulCurrentSequenceNumber - pxSocket->u.xTCP.xTCPWindow.tx.ulFirstSequenceNumber ) );\r
-               }\r
-\r
-               if( xMayClose != pdFALSE )\r
-               {\r
-                       pxSocket->u.xTCP.bits.bFinAccepted = pdTRUE_UNSIGNED;\r
-                       xSendLength = prvTCPHandleFin( pxSocket, *ppxNetworkBuffer );\r
-               }\r
-       }\r
-\r
-       if( xMayClose == pdFALSE )\r
-       {\r
-               pxTCPHeader->ucTCPFlags = ipTCP_FLAG_ACK;\r
-\r
-               if( ulReceiveLength != 0u )\r
-               {\r
-                       xSendLength = ( BaseType_t ) ( ipSIZE_OF_IPv4_HEADER + ipSIZE_OF_TCP_HEADER + uxOptionsLength );\r
-                       /* TCP-offsett equals '( ( length / 4 ) << 4 )', resulting in a shift-left 2 */\r
-                       pxTCPHeader->ucTCPOffset = ( uint8_t )( ( ipSIZE_OF_TCP_HEADER + uxOptionsLength ) << 2 );\r
-\r
-                       if( pxSocket->u.xTCP.bits.bFinSent != pdFALSE_UNSIGNED )\r
-                       {\r
-                               pxTCPWindow->tx.ulCurrentSequenceNumber = pxTCPWindow->tx.ulFINSequenceNumber;\r
-                       }\r
-               }\r
-\r
-               /* Now get data to be transmitted. */\r
-               /* _HT_ patch: since the MTU has be fixed at 1500 in stead of 1526, TCP\r
-               can not send-out both TCP options and also a full packet. Sending\r
-               options (SACK) is always more urgent than sending data, which can be\r
-               sent later. */\r
-               if( uxOptionsLength == 0u )\r
-               {\r
-                       /* prvTCPPrepareSend might allocate a bigger network buffer, if\r
-                       necessary. */\r
-                       lSendResult = prvTCPPrepareSend( pxSocket, ppxNetworkBuffer, uxOptionsLength );\r
-                       if( lSendResult > 0 )\r
-                       {\r
-                               xSendLength = ( BaseType_t ) lSendResult;\r
-                       }\r
-               }\r
-       }\r
-\r
-       return xSendLength;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-/*\r
- * Called from prvTCPHandleState().  There is data to be sent.  If\r
- * ipconfigUSE_TCP_WIN is defined, and if only an ACK must be sent, it will be\r
- * checked if it would better be postponed for efficiency.\r
- */\r
-static BaseType_t prvSendData( FreeRTOS_Socket_t *pxSocket, NetworkBufferDescriptor_t **ppxNetworkBuffer,\r
-       uint32_t ulReceiveLength, BaseType_t xSendLength )\r
-{\r
-TCPPacket_t *pxTCPPacket = ( TCPPacket_t * ) ( (*ppxNetworkBuffer)->pucEthernetBuffer );\r
-TCPHeader_t *pxTCPHeader = &pxTCPPacket->xTCPHeader;\r
-TCPWindow_t *pxTCPWindow = &pxSocket->u.xTCP.xTCPWindow;\r
-/* Find out what window size we may advertised. */\r
-int32_t lRxSpace;\r
-#if( ipconfigUSE_TCP_WIN == 1 )\r
-       #if( ipconfigTCP_ACK_EARLIER_PACKET == 0 )\r
-               const int32_t lMinLength = 0;\r
-       #else\r
-               int32_t lMinLength;\r
-       #endif\r
-#endif\r
-\r
-       /* Set the time-out field, so that we'll be called by the IP-task in case no\r
-       next message will be received. */\r
-       lRxSpace = (int32_t)( pxSocket->u.xTCP.ulHighestRxAllowed - pxTCPWindow->rx.ulCurrentSequenceNumber );\r
-       #if ipconfigUSE_TCP_WIN == 1\r
-       {\r
-\r
-               #if( ipconfigTCP_ACK_EARLIER_PACKET != 0 )\r
-               {\r
-                       lMinLength = ( ( int32_t ) 2 ) * ( ( int32_t ) pxSocket->u.xTCP.usCurMSS );\r
-               }\r
-               #endif /* ipconfigTCP_ACK_EARLIER_PACKET */\r
-\r
-               /* In case we're receiving data continuously, we might postpone sending\r
-               an ACK to gain performance. */\r
-               if( ( ulReceiveLength > 0 ) &&                                                  /* Data was sent to this socket. */\r
-                       ( lRxSpace >= lMinLength ) &&                                           /* There is Rx space for more data. */\r
-                       ( pxSocket->u.xTCP.bits.bFinSent == pdFALSE_UNSIGNED ) &&       /* Not in a closure phase. */\r
-                       ( xSendLength == ( ipSIZE_OF_IPv4_HEADER + ipSIZE_OF_TCP_HEADER ) ) && /* No Tx data or options to be sent. */\r
-                       ( pxSocket->u.xTCP.ucTCPState == eESTABLISHED ) &&      /* Connection established. */\r
-                       ( pxTCPHeader->ucTCPFlags == ipTCP_FLAG_ACK ) )         /* There are no other flags than an ACK. */\r
-               {\r
-                       if( pxSocket->u.xTCP.pxAckMessage != *ppxNetworkBuffer )\r
-                       {\r
-                               /* There was still a delayed in queue, delete it. */\r
-                               if( pxSocket->u.xTCP.pxAckMessage != 0 )\r
-                               {\r
-                                       vReleaseNetworkBufferAndDescriptor( pxSocket->u.xTCP.pxAckMessage );\r
-                               }\r
-\r
-                               pxSocket->u.xTCP.pxAckMessage = *ppxNetworkBuffer;\r
-                       }\r
-                       if( ( ulReceiveLength < ( uint32_t ) pxSocket->u.xTCP.usCurMSS ) ||     /* Received a small message. */\r
-                               ( lRxSpace < ( int32_t ) ( 2U * pxSocket->u.xTCP.usCurMSS ) ) ) /* There are less than 2 x MSS space in the Rx buffer. */\r
-                       {\r
-                               pxSocket->u.xTCP.usTimeout = ( uint16_t ) pdMS_TO_MIN_TICKS( DELAYED_ACK_SHORT_DELAY_MS );\r
-                       }\r
-                       else\r
-                       {\r
-                               /* Normally a delayed ACK should wait 200 ms for a next incoming\r
-                               packet.  Only wait 20 ms here to gain performance.  A slow ACK\r
-                               for full-size message. */\r
-                               pxSocket->u.xTCP.usTimeout = ( uint16_t ) pdMS_TO_MIN_TICKS( DELAYED_ACK_LONGER_DELAY_MS );\r
-                       }\r
-\r
-                       if( ( xTCPWindowLoggingLevel > 1 ) && ( ipconfigTCP_MAY_LOG_PORT( pxSocket->usLocalPort ) != pdFALSE ) )\r
-                       {\r
-                               FreeRTOS_debug_printf( ( "Send[%u->%u] del ACK %lu SEQ %lu (len %lu) tmout %u d %lu\n",\r
-                                       pxSocket->usLocalPort,\r
-                                       pxSocket->u.xTCP.usRemotePort,\r
-                                       pxTCPWindow->rx.ulCurrentSequenceNumber - pxTCPWindow->rx.ulFirstSequenceNumber,\r
-                                       pxSocket->u.xTCP.xTCPWindow.ulOurSequenceNumber - pxTCPWindow->tx.ulFirstSequenceNumber,\r
-                                       xSendLength,\r
-                                       pxSocket->u.xTCP.usTimeout, lRxSpace ) );\r
-                       }\r
-\r
-                       *ppxNetworkBuffer = NULL;\r
-                       xSendLength = 0;\r
-               }\r
-               else if( pxSocket->u.xTCP.pxAckMessage != NULL )\r
-               {\r
-                       /* As an ACK is not being delayed, remove any earlier delayed ACK\r
-                       message. */\r
-                       if( pxSocket->u.xTCP.pxAckMessage != *ppxNetworkBuffer )\r
-                       {\r
-                               vReleaseNetworkBufferAndDescriptor( pxSocket->u.xTCP.pxAckMessage );\r
-                       }\r
-\r
-                       pxSocket->u.xTCP.pxAckMessage = NULL;\r
-               }\r
-       }\r
-       #else\r
-       {\r
-               /* Remove compiler warnings. */\r
-               ( void ) ulReceiveLength;\r
-               ( void ) pxTCPHeader;\r
-               ( void ) lRxSpace;\r
-       }\r
-       #endif /* ipconfigUSE_TCP_WIN */\r
-\r
-       if( xSendLength != 0 )\r
-       {\r
-               if( ( xTCPWindowLoggingLevel > 1 ) && ( ipconfigTCP_MAY_LOG_PORT( pxSocket->usLocalPort ) != pdFALSE ) )\r
-               {\r
-                       FreeRTOS_debug_printf( ( "Send[%u->%u] imm ACK %lu SEQ %lu (len %lu)\n",\r
-                               pxSocket->usLocalPort,\r
-                               pxSocket->u.xTCP.usRemotePort,\r
-                               pxTCPWindow->rx.ulCurrentSequenceNumber - pxTCPWindow->rx.ulFirstSequenceNumber,\r
-                               pxTCPWindow->ulOurSequenceNumber - pxTCPWindow->tx.ulFirstSequenceNumber,\r
-                               xSendLength ) );\r
-               }\r
-\r
-               /* Set the parameter 'xReleaseAfterSend' to the value of\r
-               ipconfigZERO_COPY_TX_DRIVER. */\r
-               prvTCPReturnPacket( pxSocket, *ppxNetworkBuffer, ( uint32_t ) xSendLength, ipconfigZERO_COPY_TX_DRIVER );\r
-               #if( ipconfigZERO_COPY_TX_DRIVER != 0 )\r
-               {\r
-                       /* The driver has taken ownership of the Network Buffer. */\r
-                       *ppxNetworkBuffer = NULL;\r
-               }\r
-               #endif\r
-       }\r
-\r
-       return xSendLength;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-/*\r
- * prvTCPHandleState()\r
- * is the most important function of this TCP stack\r
- * We've tried to keep it (relatively short) by putting a lot of code in\r
- * the static functions above:\r
- *\r
- *             prvCheckRxData()\r
- *             prvStoreRxData()\r
- *             prvSetOptions()\r
- *             prvHandleSynReceived()\r
- *             prvHandleEstablished()\r
- *             prvSendData()\r
- *\r
- * As these functions are declared static, and they're called from one location\r
- * only, most compilers will inline them, thus avoiding a call and return.\r
- */\r
-static BaseType_t prvTCPHandleState( FreeRTOS_Socket_t *pxSocket, NetworkBufferDescriptor_t **ppxNetworkBuffer )\r
-{\r
-TCPPacket_t *pxTCPPacket = ( TCPPacket_t * ) ( (*ppxNetworkBuffer)->pucEthernetBuffer );\r
-TCPHeader_t *pxTCPHeader = &( pxTCPPacket->xTCPHeader );\r
-BaseType_t xSendLength = 0;\r
-uint32_t ulReceiveLength;      /* Number of bytes contained in the TCP message. */\r
-uint8_t *pucRecvData;\r
-uint32_t ulSequenceNumber = FreeRTOS_ntohl (pxTCPHeader->ulSequenceNumber);\r
-\r
-       /* uxOptionsLength: the size of the options to be sent (always a multiple of\r
-       4 bytes)\r
-       1. in the SYN phase, we shall communicate the MSS\r
-       2. in case of a SACK, Selective ACK, ack a segment which comes in\r
-       out-of-order. */\r
-UBaseType_t uxOptionsLength = 0u;\r
-uint8_t ucTCPFlags = pxTCPHeader->ucTCPFlags;\r
-TCPWindow_t *pxTCPWindow = &( pxSocket->u.xTCP.xTCPWindow );\r
-\r
-       /* First get the length and the position of the received data, if any.\r
-       pucRecvData will point to the first byte of the TCP payload. */\r
-       ulReceiveLength = ( uint32_t ) prvCheckRxData( *ppxNetworkBuffer, &pucRecvData );\r
-\r
-       if( pxSocket->u.xTCP.ucTCPState >= eESTABLISHED )\r
-       {\r
-               if ( pxTCPWindow->rx.ulCurrentSequenceNumber == ulSequenceNumber + 1u )\r
-               {\r
-                       /* This is most probably a keep-alive message from peer.  Setting\r
-                       'bWinChange' doesn't cause a window-size-change, the flag is used\r
-                       here to force sending an immediate ACK. */\r
-                       pxSocket->u.xTCP.bits.bWinChange = pdTRUE_UNSIGNED;\r
-               }\r
-       }\r
-\r
-       /* Keep track of the highest sequence number that might be expected within\r
-       this connection. */\r
-       if( ( ( int32_t ) ( ulSequenceNumber + ulReceiveLength - pxTCPWindow->rx.ulHighestSequenceNumber ) ) > 0 )\r
-       {\r
-               pxTCPWindow->rx.ulHighestSequenceNumber = ulSequenceNumber + ulReceiveLength;\r
-       }\r
-\r
-       /* Storing data may result in a fatal error if malloc() fails. */\r
-       if( prvStoreRxData( pxSocket, pucRecvData, *ppxNetworkBuffer, ulReceiveLength ) < 0 )\r
-       {\r
-               xSendLength = -1;\r
-       }\r
-       else\r
-       {\r
-               uxOptionsLength = prvSetOptions( pxSocket, *ppxNetworkBuffer );\r
-\r
-               if( ( pxSocket->u.xTCP.ucTCPState == eSYN_RECEIVED ) && ( ( ucTCPFlags & ipTCP_FLAG_CTRL ) == ipTCP_FLAG_SYN ) )\r
-               {\r
-                       FreeRTOS_debug_printf( ( "eSYN_RECEIVED: ACK expected, not SYN: peer missed our SYN+ACK\n" ) );\r
-\r
-                       /* In eSYN_RECEIVED a simple ACK is expected, but apparently the\r
-                       'SYN+ACK' didn't arrive.  Step back to the previous state in which\r
-                       a first incoming SYN is handled.  The SYN was counted already so\r
-                       decrease it first. */\r
-                       vTCPStateChange( pxSocket, eSYN_FIRST );\r
-               }\r
-\r
-               if( ( ( ucTCPFlags & ipTCP_FLAG_FIN ) != 0u ) && ( pxSocket->u.xTCP.bits.bFinRecv == pdFALSE_UNSIGNED ) )\r
-               {\r
-                       /* It's the first time a FIN has been received, remember its\r
-                       sequence number. */\r
-                       pxTCPWindow->rx.ulFINSequenceNumber = ulSequenceNumber + ulReceiveLength;\r
-                       pxSocket->u.xTCP.bits.bFinRecv = pdTRUE_UNSIGNED;\r
-\r
-                       /* Was peer the first one to send a FIN? */\r
-                       if( pxSocket->u.xTCP.bits.bFinSent == pdFALSE_UNSIGNED )\r
-                       {\r
-                               /* If so, don't send the-last-ACK. */\r
-                               pxSocket->u.xTCP.bits.bFinLast = pdTRUE_UNSIGNED;\r
-                       }\r
-               }\r
-\r
-               switch (pxSocket->u.xTCP.ucTCPState)\r
-               {\r
-               case eCLOSED:           /* (server + client) no connection state at all. */\r
-                       /* Nothing to do for a closed socket, except waiting for the\r
-                       owner. */\r
-                       break;\r
-\r
-               case eTCP_LISTEN:       /* (server) waiting for a connection request from\r
-                                                       any remote TCP and port. */\r
-                       /* The listen state was handled in xProcessReceivedTCPPacket().\r
-                       Should not come here. */\r
-                       break;\r
-\r
-               case eSYN_FIRST:        /* (server) Just received a SYN request for a server\r
-                                                       socket. */\r
-                       {\r
-                               /* A new socket has been created, reply with a SYN+ACK.\r
-                               Acknowledge with seq+1 because the SYN is seen as pseudo data\r
-                               with len = 1. */\r
-                               uxOptionsLength = prvSetSynAckOptions( pxSocket, pxTCPPacket );\r
-                               pxTCPHeader->ucTCPFlags = ipTCP_FLAG_SYN | ipTCP_FLAG_ACK;\r
-\r
-                               xSendLength = ( BaseType_t ) ( ipSIZE_OF_IPv4_HEADER + ipSIZE_OF_TCP_HEADER + uxOptionsLength );\r
-\r
-                               /* Set the TCP offset field:  ipSIZE_OF_TCP_HEADER equals 20 and\r
-                               uxOptionsLength is a multiple of 4.  The complete expression is:\r
-                               ucTCPOffset = ( ( ipSIZE_OF_TCP_HEADER + uxOptionsLength ) / 4 ) << 4 */\r
-                               pxTCPHeader->ucTCPOffset = ( uint8_t )( ( ipSIZE_OF_TCP_HEADER + uxOptionsLength ) << 2 );\r
-                               vTCPStateChange( pxSocket, eSYN_RECEIVED );\r
-\r
-                               pxTCPWindow->rx.ulCurrentSequenceNumber = pxTCPWindow->rx.ulHighestSequenceNumber = ulSequenceNumber + 1u;\r
-                               pxTCPWindow->tx.ulCurrentSequenceNumber = pxTCPWindow->ulNextTxSequenceNumber = pxTCPWindow->tx.ulFirstSequenceNumber + 1u; /* because we send a TCP_SYN. */\r
-                       }\r
-                       break;\r
-\r
-               case eCONNECT_SYN:      /* (client) also called SYN_SENT: we've just send a\r
-                                                       SYN, expect     a SYN+ACK and send a ACK now. */\r
-                       /* Fall through */\r
-               case eSYN_RECEIVED:     /* (server) we've had a SYN, replied with SYN+SCK\r
-                                                       expect a ACK and do nothing. */\r
-                       xSendLength = prvHandleSynReceived( pxSocket, ppxNetworkBuffer, ulReceiveLength, uxOptionsLength );\r
-                       break;\r
-\r
-               case eESTABLISHED:      /* (server + client) an open connection, data\r
-                                                       received can be delivered to the user. The normal\r
-                                                       state for the data transfer phase of the connection\r
-                                                       The closing states are also handled here with the\r
-                                                       use of some flags. */\r
-                       xSendLength = prvHandleEstablished( pxSocket, ppxNetworkBuffer, ulReceiveLength, uxOptionsLength );\r
-                       break;\r
-\r
-               case eLAST_ACK:         /* (server + client) waiting for an acknowledgement\r
-                                                       of the connection termination request previously\r
-                                                       sent to the remote TCP (which includes an\r
-                                                       acknowledgement of its connection termination\r
-                                                       request). */\r
-                       /* Fall through */\r
-               case eFIN_WAIT_1:       /* (server + client) waiting for a connection termination request from the remote TCP,\r
-                                                        * or an acknowledgement of the connection termination request previously sent. */\r
-                       /* Fall through */\r
-               case eFIN_WAIT_2:       /* (server + client) waiting for a connection termination request from the remote TCP. */\r
-                       xSendLength = prvTCPHandleFin( pxSocket, *ppxNetworkBuffer );\r
-                       break;\r
-\r
-               case eCLOSE_WAIT:       /* (server + client) waiting for a connection\r
-                                                       termination request from the local user.  Nothing to\r
-                                                       do, connection is closed, wait for owner to close\r
-                                                       this socket. */\r
-                       break;\r
-\r
-               case eCLOSING:          /* (server + client) waiting for a connection\r
-                                                       termination request acknowledgement from the remote\r
-                                                       TCP. */\r
-                       break;\r
-\r
-               case eTIME_WAIT:        /* (either server or client) waiting for enough time\r
-                                                       to pass to be sure the remote TCP received the\r
-                                                       acknowledgement of its connection termination\r
-                                                       request. [According to RFC 793 a connection can stay\r
-                                                       in TIME-WAIT for a maximum of four minutes known as\r
-                                                       a MSL (maximum segment lifetime).]  These states are\r
-                                                       implemented implicitly by settings flags like\r
-                                                       'bFinSent', 'bFinRecv', and 'bFinAcked'. */\r
-                       break;\r
-               default:\r
-                       break;\r
-               }\r
-       }\r
-\r
-       if( xSendLength > 0 )\r
-       {\r
-               xSendLength = prvSendData( pxSocket, ppxNetworkBuffer, ulReceiveLength, xSendLength );\r
-       }\r
-\r
-       return xSendLength;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static BaseType_t prvTCPSendSpecialPacketHelper( NetworkBufferDescriptor_t *pxNetworkBuffer,\r
-                                                 uint8_t ucTCPFlags )\r
-{\r
-#if( ipconfigIGNORE_UNKNOWN_PACKETS == 0 )\r
-    {\r
-        TCPPacket_t *pxTCPPacket = ( TCPPacket_t * )( pxNetworkBuffer->pucEthernetBuffer );\r
-        const BaseType_t xSendLength = ( BaseType_t )\r
-            ( ipSIZE_OF_IPv4_HEADER + ipSIZE_OF_TCP_HEADER + 0u ); /* Plus 0 options. */\r
-\r
-        pxTCPPacket->xTCPHeader.ucTCPFlags = ucTCPFlags;\r
-        pxTCPPacket->xTCPHeader.ucTCPOffset = ( ipSIZE_OF_TCP_HEADER + 0u ) << 2;\r
-\r
-        prvTCPReturnPacket( NULL, pxNetworkBuffer, ( uint32_t )xSendLength, pdFALSE );\r
-    }\r
-#endif /* !ipconfigIGNORE_UNKNOWN_PACKETS */\r
-\r
-    /* Remove compiler warnings if ipconfigIGNORE_UNKNOWN_PACKETS == 1. */\r
-    ( void )pxNetworkBuffer;\r
-    ( void )ucTCPFlags;\r
-\r
-    /* The packet was not consumed. */\r
-    return pdFAIL;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static BaseType_t prvTCPSendChallengeAck( NetworkBufferDescriptor_t *pxNetworkBuffer )\r
-{\r
-    return prvTCPSendSpecialPacketHelper( pxNetworkBuffer, ipTCP_FLAG_ACK );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static BaseType_t prvTCPSendReset( NetworkBufferDescriptor_t *pxNetworkBuffer )\r
-{\r
-    return prvTCPSendSpecialPacketHelper( pxNetworkBuffer,\r
-                                          ipTCP_FLAG_ACK | ipTCP_FLAG_RST );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvSocketSetMSS( FreeRTOS_Socket_t *pxSocket )\r
-{\r
-uint32_t ulMSS = ipconfigTCP_MSS;\r
-\r
-       if( ( ( FreeRTOS_ntohl( pxSocket->u.xTCP.ulRemoteIP ) ^ *ipLOCAL_IP_ADDRESS_POINTER ) & xNetworkAddressing.ulNetMask ) != 0ul )\r
-       {\r
-               /* Data for this peer will pass through a router, and maybe through\r
-               the internet.  Limit the MSS to 1400 bytes or less. */\r
-               ulMSS = FreeRTOS_min_uint32( ( uint32_t ) REDUCED_MSS_THROUGH_INTERNET, ulMSS );\r
-       }\r
-\r
-       FreeRTOS_debug_printf( ( "prvSocketSetMSS: %lu bytes for %lxip:%u\n", ulMSS, pxSocket->u.xTCP.ulRemoteIP, pxSocket->u.xTCP.usRemotePort ) );\r
-\r
-       pxSocket->u.xTCP.usInitMSS = pxSocket->u.xTCP.usCurMSS = ( uint16_t ) ulMSS;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-/*\r
- *     FreeRTOS_TCP_IP has only 2 public functions, this is the second one:\r
- *     xProcessReceivedTCPPacket()\r
- *             prvTCPHandleState()\r
- *                     prvTCPPrepareSend()\r
- *                             prvTCPReturnPacket()\r
- *                             xNetworkInterfaceOutput()       // Sends data to the NIC\r
- *             prvTCPSendRepeated()\r
- *                     prvTCPReturnPacket()            // Prepare for returning\r
- *                     xNetworkInterfaceOutput()       // Sends data to the NIC\r
-*/\r
-BaseType_t xProcessReceivedTCPPacket( NetworkBufferDescriptor_t *pxNetworkBuffer )\r
-{\r
-FreeRTOS_Socket_t *pxSocket;\r
-TCPPacket_t * pxTCPPacket = ( TCPPacket_t * ) ( pxNetworkBuffer->pucEthernetBuffer );\r
-uint16_t ucTCPFlags;\r
-uint32_t ulLocalIP;\r
-uint16_t xLocalPort;\r
-uint32_t ulRemoteIP;\r
-uint16_t xRemotePort;\r
-uint32_t ulSequenceNumber;\r
-uint32_t ulAckNumber;\r
-BaseType_t xResult = pdPASS;\r
-configASSERT(pxNetworkBuffer);\r
-configASSERT(pxNetworkBuffer->pucEthernetBuffer);\r
-\r
-       /* Check for a minimum packet size. */\r
-       if( pxNetworkBuffer->xDataLength >= ( ipSIZE_OF_ETH_HEADER + ipSIZE_OF_IPv4_HEADER + ipSIZE_OF_TCP_HEADER ) )\r
-       {\r
-               ucTCPFlags = pxTCPPacket->xTCPHeader.ucTCPFlags;\r
-               ulLocalIP = FreeRTOS_htonl( pxTCPPacket->xIPHeader.ulDestinationIPAddress );\r
-               xLocalPort = FreeRTOS_htons( pxTCPPacket->xTCPHeader.usDestinationPort );\r
-               ulRemoteIP = FreeRTOS_htonl( pxTCPPacket->xIPHeader.ulSourceIPAddress );\r
-               xRemotePort = FreeRTOS_htons( pxTCPPacket->xTCPHeader.usSourcePort );\r
-        ulSequenceNumber = FreeRTOS_ntohl( pxTCPPacket->xTCPHeader.ulSequenceNumber );\r
-        ulAckNumber = FreeRTOS_ntohl( pxTCPPacket->xTCPHeader.ulAckNr );\r
-\r
-               /* Find the destination socket, and if not found: return a socket listing to\r
-               the destination PORT. */\r
-               pxSocket = ( FreeRTOS_Socket_t * )pxTCPSocketLookup( ulLocalIP, xLocalPort, ulRemoteIP, xRemotePort );\r
-       }\r
-       else\r
-       {\r
-               return pdFAIL;\r
-       }\r
-\r
-       if( ( pxSocket == NULL ) || ( prvTCPSocketIsActive( ( UBaseType_t ) pxSocket->u.xTCP.ucTCPState ) == pdFALSE ) )\r
-       {\r
-               /* A TCP messages is received but either there is no socket with the\r
-               given port number or the there is a socket, but it is in one of these\r
-               non-active states:  eCLOSED, eCLOSE_WAIT, eFIN_WAIT_2, eCLOSING, or\r
-               eTIME_WAIT. */\r
-\r
-               FreeRTOS_debug_printf( ( "TCP: No active socket on port %d (%lxip:%d)\n", xLocalPort, ulRemoteIP, xRemotePort ) );\r
-\r
-               /* Send a RST to all packets that can not be handled.  As a result\r
-               the other party will get a ECONN error.  There are two exceptions:\r
-               1) A packet that already has the RST flag set.\r
-               2) A packet that only has the ACK flag set.\r
-               A packet with only the ACK flag set might be the last ACK in\r
-               a three-way hand-shake that closes a connection. */\r
-               if( ( ( ucTCPFlags & ipTCP_FLAG_CTRL ) != ipTCP_FLAG_ACK ) &&\r
-                       ( ( ucTCPFlags & ipTCP_FLAG_RST ) == 0u ) )\r
-               {\r
-                       prvTCPSendReset( pxNetworkBuffer );\r
-               }\r
-\r
-               /* The packet can't be handled. */\r
-               xResult = pdFAIL;\r
-       }\r
-       else\r
-       {\r
-               pxSocket->u.xTCP.ucRepCount = 0u;\r
-\r
-               if( pxSocket->u.xTCP.ucTCPState == eTCP_LISTEN )\r
-               {\r
-                       /* The matching socket is in a listening state.  Test if the peer\r
-                       has set the SYN flag. */\r
-                       if( ( ucTCPFlags & ipTCP_FLAG_CTRL ) != ipTCP_FLAG_SYN )\r
-                       {\r
-                               /* What happens: maybe after a reboot, a client doesn't know the\r
-                               connection had gone.  Send a RST in order to get a new connect\r
-                               request. */\r
-                               #if( ipconfigHAS_DEBUG_PRINTF == 1 )\r
-                               {\r
-                               FreeRTOS_debug_printf( ( "TCP: Server can't handle flags: %s from %lxip:%u to port %u\n",\r
-                                       prvTCPFlagMeaning( ( UBaseType_t ) ucTCPFlags ), ulRemoteIP, xRemotePort, xLocalPort ) );\r
-                               }\r
-                               #endif /* ipconfigHAS_DEBUG_PRINTF */\r
-\r
-                               if( ( ucTCPFlags & ipTCP_FLAG_RST ) == 0u )\r
-                               {\r
-                                       prvTCPSendReset( pxNetworkBuffer );\r
-                               }\r
-                               xResult = pdFAIL;\r
-                       }\r
-                       else\r
-                       {\r
-                               /* prvHandleListen() will either return a newly created socket\r
-                               (if bReuseSocket is false), otherwise it returns the current\r
-                               socket which will later get connected. */\r
-                               pxSocket = prvHandleListen( pxSocket, pxNetworkBuffer );\r
-\r
-                               if( pxSocket == NULL )\r
-                               {\r
-                                       xResult = pdFAIL;\r
-                               }\r
-                       }\r
-               }       /* if( pxSocket->u.xTCP.ucTCPState == eTCP_LISTEN ). */\r
-               else\r
-               {\r
-                       /* This is not a socket in listening mode. Check for the RST\r
-                       flag. */\r
-                       if( ( ucTCPFlags & ipTCP_FLAG_RST ) != 0u )\r
-                       {\r
-                FreeRTOS_debug_printf( ( "TCP: RST received from %lxip:%u for %u\n", ulRemoteIP, xRemotePort, xLocalPort ) );\r
-\r
-                /* Implement https://tools.ietf.org/html/rfc5961#section-3.2. */\r
-                if( pxSocket->u.xTCP.ucTCPState == eCONNECT_SYN )\r
-                {\r
-                    /* Per the above RFC, "In the SYN-SENT state ... the RST is\r
-                    acceptable if the ACK field acknowledges the SYN." */\r
-                    if( ulAckNumber == pxSocket->u.xTCP.xTCPWindow.ulOurSequenceNumber + 1 )\r
-                    {\r
-                        vTCPStateChange( pxSocket, eCLOSED );\r
-                    }\r
-                }\r
-                else\r
-                {\r
-                    /* Check whether the packet matches the next expected sequence number. */\r
-                    if( ulSequenceNumber == pxSocket->u.xTCP.xTCPWindow.rx.ulCurrentSequenceNumber )\r
-                    {\r
-                        vTCPStateChange( pxSocket, eCLOSED );\r
-                    }\r
-                    /* Otherwise, check whether the packet is within the receive window. */\r
-                    else if( ulSequenceNumber > pxSocket->u.xTCP.xTCPWindow.rx.ulCurrentSequenceNumber &&\r
-                             ulSequenceNumber < ( pxSocket->u.xTCP.xTCPWindow.rx.ulCurrentSequenceNumber +\r
-                                                  pxSocket->u.xTCP.xTCPWindow.xSize.ulRxWindowLength ) )\r
-                    {\r
-                        /* Send a challenge ACK. */\r
-                        prvTCPSendChallengeAck( pxNetworkBuffer );\r
-                    }\r
-                }\r
-\r
-                /* Otherwise, do nothing. In any case, the packet cannot be handled. */\r
-                               xResult = pdFAIL;\r
-                       }\r
-                       else if( ( ( ucTCPFlags & ipTCP_FLAG_CTRL ) == ipTCP_FLAG_SYN ) && ( pxSocket->u.xTCP.ucTCPState >= eESTABLISHED ) )\r
-                       {\r
-                               /* SYN flag while this socket is already connected. */\r
-                               FreeRTOS_debug_printf( ( "TCP: SYN unexpected from %lxip:%u\n", ulRemoteIP, xRemotePort ) );\r
-\r
-                               /* The packet cannot be handled. */\r
-                               xResult = pdFAIL;\r
-                       }\r
-                       else\r
-                       {\r
-                               /* Update the copy of the TCP header only (skipping eth and IP\r
-                               headers).  It might be used later on, whenever data must be sent\r
-                               to the peer. */\r
-                               const BaseType_t lOffset = ( BaseType_t ) ( ipSIZE_OF_ETH_HEADER + ipSIZE_OF_IPv4_HEADER );\r
-                               memcpy( pxSocket->u.xTCP.xPacket.u.ucLastPacket + lOffset, pxNetworkBuffer->pucEthernetBuffer + lOffset, ipSIZE_OF_TCP_HEADER );\r
-                       }\r
-               }\r
-       }\r
-\r
-       if( xResult != pdFAIL )\r
-       {\r
-               /* Touch the alive timers because we received a message for this\r
-               socket. */\r
-               prvTCPTouchSocket( pxSocket );\r
-\r
-               /* Parse the TCP option(s), if present. */\r
-               /* _HT_ : if we're in the SYN phase, and peer does not send a MSS option,\r
-               then we MUST assume an MSS size of 536 bytes for backward compatibility. */\r
-\r
-               /* When there are no TCP options, the TCP offset equals 20 bytes, which is stored as\r
-               the number 5 (words) in the higher niblle of the TCP-offset byte. */\r
-               if( ( pxTCPPacket->xTCPHeader.ucTCPOffset & TCP_OFFSET_LENGTH_BITS ) > TCP_OFFSET_STANDARD_LENGTH )\r
-               {\r
-                       prvCheckOptions( pxSocket, pxNetworkBuffer );\r
-               }\r
-\r
-\r
-               #if( ipconfigUSE_TCP_WIN == 1 )\r
-               {\r
-                       pxSocket->u.xTCP.ulWindowSize = FreeRTOS_ntohs( pxTCPPacket->xTCPHeader.usWindow );\r
-                       pxSocket->u.xTCP.ulWindowSize =\r
-                               ( pxSocket->u.xTCP.ulWindowSize << pxSocket->u.xTCP.ucPeerWinScaleFactor );\r
-               }\r
-               #endif\r
-\r
-               /* In prvTCPHandleState() the incoming messages will be handled\r
-               depending on the current state of the connection. */\r
-               if( prvTCPHandleState( pxSocket, &pxNetworkBuffer ) > 0 )\r
-               {\r
-                       /* prvTCPHandleState() has sent a message, see if there are more to\r
-                       be transmitted. */\r
-                       #if( ipconfigUSE_TCP_WIN == 1 )\r
-                       {\r
-                               prvTCPSendRepeated( pxSocket, &pxNetworkBuffer );\r
-                       }\r
-                       #endif /* ipconfigUSE_TCP_WIN */\r
-               }\r
-\r
-               if( pxNetworkBuffer != NULL )\r
-               {\r
-                       /* We must check if the buffer is unequal to NULL, because the\r
-                       socket might keep a reference to it in case a delayed ACK must be\r
-                       sent. */\r
-                       vReleaseNetworkBufferAndDescriptor( pxNetworkBuffer );\r
-                       pxNetworkBuffer = NULL;\r
-               }\r
-\r
-               /* And finally, calculate when this socket wants to be woken up. */\r
-               prvTCPNextTimeout ( pxSocket );\r
-               /* Return pdPASS to tell that the network buffer is 'consumed'. */\r
-               xResult = pdPASS;\r
-       }\r
-\r
-       /* pdPASS being returned means the buffer has been consumed. */\r
-       return xResult;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static FreeRTOS_Socket_t *prvHandleListen( FreeRTOS_Socket_t *pxSocket, NetworkBufferDescriptor_t *pxNetworkBuffer )\r
-{\r
-TCPPacket_t * pxTCPPacket = ( TCPPacket_t * ) ( pxNetworkBuffer->pucEthernetBuffer );\r
-FreeRTOS_Socket_t *pxReturn = NULL;\r
-uint32_t ulInitialSequenceNumber;\r
-\r
-       /* Assume that a new Initial Sequence Number will be required. Request\r
-       it now in order to fail out if necessary. */\r
-       ulInitialSequenceNumber = ulApplicationGetNextSequenceNumber( *ipLOCAL_IP_ADDRESS_POINTER,\r
-                                                                                                                                 pxSocket->usLocalPort,\r
-                                                                                                                                 pxTCPPacket->xIPHeader.ulSourceIPAddress,\r
-                                                                                                                                 pxTCPPacket->xTCPHeader.usSourcePort );\r
-\r
-       /* A pure SYN (without ACK) has come in, create a new socket to answer\r
-       it. */\r
-       if( 0 != ulInitialSequenceNumber )\r
-       {\r
-               if( pxSocket->u.xTCP.bits.bReuseSocket != pdFALSE_UNSIGNED )\r
-               {\r
-                       /* The flag bReuseSocket indicates that the same instance of the\r
-                       listening socket should be used for the connection. */\r
-                       pxReturn = pxSocket;\r
-                       pxSocket->u.xTCP.bits.bPassQueued = pdTRUE_UNSIGNED;\r
-                       pxSocket->u.xTCP.pxPeerSocket = pxSocket;\r
-               }\r
-               else\r
-               {\r
-                       /* The socket does not have the bReuseSocket flag set meaning create a\r
-                       new socket when a connection comes in. */\r
-                       pxReturn = NULL;\r
-\r
-                       if( pxSocket->u.xTCP.usChildCount >= pxSocket->u.xTCP.usBacklog )\r
-                       {\r
-                               FreeRTOS_printf( ( "Check: Socket %u already has %u / %u child%s\n",\r
-                                       pxSocket->usLocalPort,\r
-                                       pxSocket->u.xTCP.usChildCount,\r
-                                       pxSocket->u.xTCP.usBacklog,\r
-                                       pxSocket->u.xTCP.usChildCount == 1 ? "" : "ren" ) );\r
-                               prvTCPSendReset( pxNetworkBuffer );\r
-                       }\r
-                       else\r
-                       {\r
-                               FreeRTOS_Socket_t *pxNewSocket = ( FreeRTOS_Socket_t * )\r
-                                       FreeRTOS_socket( FREERTOS_AF_INET, FREERTOS_SOCK_STREAM, FREERTOS_IPPROTO_TCP );\r
-\r
-                               if( ( pxNewSocket == NULL ) || ( pxNewSocket == FREERTOS_INVALID_SOCKET ) )\r
-                               {\r
-                                       FreeRTOS_debug_printf( ( "TCP: Listen: new socket failed\n" ) );\r
-                                       prvTCPSendReset( pxNetworkBuffer );\r
-                               }\r
-                               else if( prvTCPSocketCopy( pxNewSocket, pxSocket ) != pdFALSE )\r
-                               {\r
-                                       /* The socket will be connected immediately, no time for the\r
-                                       owner to setsockopt's, therefore copy properties of the server\r
-                                       socket to the new socket.  Only the binding might fail (due to\r
-                                       lack of resources). */\r
-                                       pxReturn = pxNewSocket;\r
-                               }\r
-                       }\r
-               }\r
-       }\r
-\r
-       if( ( 0 != ulInitialSequenceNumber ) && ( pxReturn != NULL ) )\r
-       {\r
-               pxReturn->u.xTCP.usRemotePort = FreeRTOS_htons( pxTCPPacket->xTCPHeader.usSourcePort );\r
-               pxReturn->u.xTCP.ulRemoteIP = FreeRTOS_htonl( pxTCPPacket->xIPHeader.ulSourceIPAddress );\r
-               pxReturn->u.xTCP.xTCPWindow.ulOurSequenceNumber = ulInitialSequenceNumber;\r
-\r
-               /* Here is the SYN action. */\r
-               pxReturn->u.xTCP.xTCPWindow.rx.ulCurrentSequenceNumber = FreeRTOS_ntohl( pxTCPPacket->xTCPHeader.ulSequenceNumber );\r
-               prvSocketSetMSS( pxReturn );\r
-\r
-               prvTCPCreateWindow( pxReturn );\r
-\r
-               vTCPStateChange( pxReturn, eSYN_FIRST );\r
-\r
-               /* Make a copy of the header up to the TCP header.  It is needed later\r
-               on, whenever data must be sent to the peer. */\r
-               memcpy( pxReturn->u.xTCP.xPacket.u.ucLastPacket, pxNetworkBuffer->pucEthernetBuffer, sizeof( pxReturn->u.xTCP.xPacket.u.ucLastPacket ) );\r
-       }\r
-       return pxReturn;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-/*\r
- * Duplicates a socket after a listening socket receives a connection.\r
- */\r
-static BaseType_t prvTCPSocketCopy( FreeRTOS_Socket_t *pxNewSocket, FreeRTOS_Socket_t *pxSocket )\r
-{\r
-struct freertos_sockaddr xAddress;\r
-\r
-       pxNewSocket->xReceiveBlockTime = pxSocket->xReceiveBlockTime;\r
-       pxNewSocket->xSendBlockTime = pxSocket->xSendBlockTime;\r
-       pxNewSocket->ucSocketOptions = pxSocket->ucSocketOptions;\r
-       pxNewSocket->u.xTCP.uxRxStreamSize = pxSocket->u.xTCP.uxRxStreamSize;\r
-       pxNewSocket->u.xTCP.uxTxStreamSize = pxSocket->u.xTCP.uxTxStreamSize;\r
-       pxNewSocket->u.xTCP.uxLittleSpace = pxSocket->u.xTCP.uxLittleSpace;\r
-       pxNewSocket->u.xTCP.uxEnoughSpace = pxSocket->u.xTCP.uxEnoughSpace;\r
-       pxNewSocket->u.xTCP.uxRxWinSize  = pxSocket->u.xTCP.uxRxWinSize;\r
-       pxNewSocket->u.xTCP.uxTxWinSize  = pxSocket->u.xTCP.uxTxWinSize;\r
-\r
-       #if( ipconfigSOCKET_HAS_USER_SEMAPHORE == 1 )\r
-       {\r
-               pxNewSocket->pxUserSemaphore = pxSocket->pxUserSemaphore;\r
-       }\r
-       #endif /* ipconfigSOCKET_HAS_USER_SEMAPHORE */\r
-\r
-       #if( ipconfigUSE_CALLBACKS == 1 )\r
-       {\r
-               /* In case call-backs are used, copy them from parent to child. */\r
-               pxNewSocket->u.xTCP.pxHandleConnected = pxSocket->u.xTCP.pxHandleConnected;\r
-               pxNewSocket->u.xTCP.pxHandleReceive = pxSocket->u.xTCP.pxHandleReceive;\r
-               pxNewSocket->u.xTCP.pxHandleSent = pxSocket->u.xTCP.pxHandleSent;\r
-       }\r
-       #endif /* ipconfigUSE_CALLBACKS */\r
-\r
-       #if( ipconfigSUPPORT_SELECT_FUNCTION == 1 )\r
-       {\r
-               /* Child socket of listening sockets will inherit the Socket Set\r
-               Otherwise the owner has no chance of including it into the set. */\r
-               if( pxSocket->pxSocketSet )\r
-               {\r
-                       pxNewSocket->pxSocketSet = pxSocket->pxSocketSet;\r
-                       pxNewSocket->xSelectBits = pxSocket->xSelectBits | eSELECT_READ | eSELECT_EXCEPT;\r
-               }\r
-       }\r
-       #endif /* ipconfigSUPPORT_SELECT_FUNCTION */\r
-\r
-       /* And bind it to the same local port as its parent. */\r
-       xAddress.sin_addr = *ipLOCAL_IP_ADDRESS_POINTER;\r
-       xAddress.sin_port = FreeRTOS_htons( pxSocket->usLocalPort );\r
-\r
-       #if( ipconfigTCP_HANG_PROTECTION == 1 )\r
-       {\r
-               /* Only when there is anti-hanging protection, a socket may become an\r
-               orphan temporarily.  Once this socket is really connected, the owner of\r
-               the server socket will be notified. */\r
-\r
-               /* When bPassQueued is true, the socket is an orphan until it gets\r
-               connected. */\r
-               pxNewSocket->u.xTCP.bits.bPassQueued = pdTRUE_UNSIGNED;\r
-               pxNewSocket->u.xTCP.pxPeerSocket = pxSocket;\r
-       }\r
-       #else\r
-       {\r
-               /* A reference to the new socket may be stored and the socket is marked\r
-               as 'passable'. */\r
-\r
-               /* When bPassAccept is pdTRUE_UNSIGNED this socket may be returned in a call to\r
-               accept(). */\r
-               pxNewSocket->u.xTCP.bits.bPassAccept = pdTRUE_UNSIGNED;\r
-               if(pxSocket->u.xTCP.pxPeerSocket == NULL )\r
-               {\r
-                       pxSocket->u.xTCP.pxPeerSocket = pxNewSocket;\r
-               }\r
-       }\r
-       #endif\r
-\r
-       pxSocket->u.xTCP.usChildCount++;\r
-\r
-       FreeRTOS_debug_printf( ( "Gain: Socket %u now has %u / %u child%s\n",\r
-               pxSocket->usLocalPort,\r
-               pxSocket->u.xTCP.usChildCount,\r
-               pxSocket->u.xTCP.usBacklog,\r
-               pxSocket->u.xTCP.usChildCount == 1u ? "" : "ren" ) );\r
-\r
-       /* Now bind the child socket to the same port as the listening socket. */\r
-       if( vSocketBind ( pxNewSocket, &xAddress, sizeof( xAddress ), pdTRUE ) != 0 )\r
-       {\r
-               FreeRTOS_debug_printf( ( "TCP: Listen: new socket bind error\n" ) );\r
-               vSocketClose( pxNewSocket );\r
-               return pdFALSE;\r
-       }\r
-\r
-       return pdTRUE;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ( ipconfigHAS_DEBUG_PRINTF != 0 ) || ( ipconfigHAS_PRINTF != 0 ) )\r
-\r
-       const char *FreeRTOS_GetTCPStateName( UBaseType_t ulState )\r
-       {\r
-               if( ulState >= ( UBaseType_t ) ARRAY_SIZE( pcStateNames ) )\r
-               {\r
-                       ulState = ( UBaseType_t ) ARRAY_SIZE( pcStateNames ) - 1u;\r
-               }\r
-               return pcStateNames[ ulState ];\r
-       }\r
-\r
-#endif /* ( ( ipconfigHAS_DEBUG_PRINTF != 0 ) || ( ipconfigHAS_PRINTF != 0 ) ) */\r
-/*-----------------------------------------------------------*/\r
-\r
-/*\r
- * In the API accept(), the user asks is there is a new client?  As API's can\r
- * not walk through the xBoundTCPSocketsList the IP-task will do this.\r
- */\r
-BaseType_t xTCPCheckNewClient( FreeRTOS_Socket_t *pxSocket )\r
-{\r
-TickType_t xLocalPort = FreeRTOS_htons( pxSocket->usLocalPort );\r
-ListItem_t *pxIterator;\r
-FreeRTOS_Socket_t *pxFound;\r
-BaseType_t xResult = pdFALSE;\r
-\r
-       /* Here xBoundTCPSocketsList can be accessed safely IP-task is the only one\r
-       who has access. */\r
-       for( pxIterator = ( ListItem_t * ) listGET_HEAD_ENTRY( &xBoundTCPSocketsList );\r
-               pxIterator != ( ListItem_t * ) listGET_END_MARKER( &xBoundTCPSocketsList );\r
-               pxIterator = ( ListItem_t * ) listGET_NEXT( pxIterator ) )\r
-       {\r
-               if( listGET_LIST_ITEM_VALUE( pxIterator ) == xLocalPort )\r
-               {\r
-                       pxFound = ( FreeRTOS_Socket_t * ) listGET_LIST_ITEM_OWNER( pxIterator );\r
-                       if( ( pxFound->ucProtocol == FREERTOS_IPPROTO_TCP ) && ( pxFound->u.xTCP.bits.bPassAccept != pdFALSE_UNSIGNED ) )\r
-                       {\r
-                               pxSocket->u.xTCP.pxPeerSocket = pxFound;\r
-                               FreeRTOS_debug_printf( ( "xTCPCheckNewClient[0]: client on port %u\n", pxSocket->usLocalPort ) );\r
-                               xResult = pdTRUE;\r
-                               break;\r
-                       }\r
-               }\r
-       }\r
-       return xResult;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-#endif /* ipconfigUSE_TCP == 1 */\r
-\r
-/* Provide access to private members for testing. */\r
-#ifdef AMAZON_FREERTOS_ENABLE_UNIT_TESTS\r
-       #include "iot_freertos_tcp_test_access_tcp_define.h"\r
-#endif\r
-\r
-/* Provide access to private members for verification. */\r
-#ifdef FREERTOS_TCP_ENABLE_VERIFICATION\r
-       #include "aws_freertos_tcp_verification_access_tcp_define.h"\r
-#endif\r
-\r
+/*
+ * FreeRTOS+TCP V2.2.0
+ * 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
+ */
+
+/*
+ * FreeRTOS_TCP_IP.c
+ * Module which handles the TCP connections for FreeRTOS+TCP.
+ * It depends on  FreeRTOS_TCP_WIN.c, which handles the TCP windowing
+ * schemes.
+ *
+ * Endianness: in this module all ports and IP addresses are stored in
+ * host byte-order, except fields in the IP-packets
+ */
+
+/* Standard includes. */
+#include <stdint.h>
+#include <stdio.h>
+
+/* FreeRTOS includes. */
+#include "FreeRTOS.h"
+#include "task.h"
+#include "queue.h"
+#include "semphr.h"
+
+/* FreeRTOS+TCP includes. */
+#include "FreeRTOS_IP.h"
+#include "FreeRTOS_Sockets.h"
+#include "FreeRTOS_IP_Private.h"
+#include "FreeRTOS_UDP_IP.h"
+#include "FreeRTOS_TCP_IP.h"
+#include "FreeRTOS_DHCP.h"
+#include "NetworkInterface.h"
+#include "NetworkBufferManagement.h"
+#include "FreeRTOS_ARP.h"
+#include "FreeRTOS_TCP_WIN.h"
+
+
+/* Just make sure the contents doesn't get compiled if TCP is not enabled. */
+#if ipconfigUSE_TCP == 1
+
+/* This compile-time test was moved to here because some macro's
+were unknown within 'FreeRTOSIPConfigDefaults.h'.  It tests whether
+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 )
+       #error The ipconfigTCP_MSS setting in FreeRTOSIPConfig.h is too large.
+#endif
+
+/*
+ * The meaning of the TCP flags:
+ */
+#define ipTCP_FLAG_FIN                 0x0001u /* No more data from sender */
+#define ipTCP_FLAG_SYN                 0x0002u /* Synchronize sequence numbers */
+#define ipTCP_FLAG_RST                 0x0004u /* Reset the connection */
+#define ipTCP_FLAG_PSH                 0x0008u /* Push function: please push buffered data to the recv application */
+#define ipTCP_FLAG_ACK                 0x0010u /* Acknowledgment field is significant */
+#define ipTCP_FLAG_URG                 0x0020u /* Urgent pointer field is significant */
+#define ipTCP_FLAG_ECN                 0x0040u /* ECN-Echo */
+#define ipTCP_FLAG_CWR                 0x0080u /* Congestion Window Reduced */
+#define ipTCP_FLAG_NS                  0x0100u /* ECN-nonce concealment protection */
+#define ipTCP_FLAG_RSV                 0x0E00u /* Reserved, keep 0 */
+
+/* A mask to filter all protocol flags. */
+#define ipTCP_FLAG_CTRL                        0x001Fu
+
+/*
+ * A few values of the TCP options:
+ */
+#define TCP_OPT_END                            0u   /* End of TCP options list */
+#define TCP_OPT_NOOP                   1u   /* "No-operation" TCP option */
+#define TCP_OPT_MSS                            2u   /* Maximum segment size TCP option */
+#define TCP_OPT_WSOPT                  3u   /* TCP Window Scale Option (3-byte long) */
+#define TCP_OPT_SACK_P                 4u   /* Advertize that SACK is permitted */
+#define TCP_OPT_SACK_A                 5u   /* SACK option with first/last */
+#define TCP_OPT_TIMESTAMP              8u   /* Time-stamp option */
+
+#define TCP_OPT_MSS_LEN                        4u   /* Length of TCP MSS option. */
+#define TCP_OPT_WSOPT_LEN              3u   /* Length of TCP WSOPT option. */
+
+#define TCP_OPT_TIMESTAMP_LEN  10      /* fixed length of the time-stamp option */
+
+#ifndef ipconfigTCP_ACK_EARLIER_PACKET
+       #define ipconfigTCP_ACK_EARLIER_PACKET          1
+#endif
+
+/*
+ * The macro NOW_CONNECTED() is use to determine if the connection makes a
+ * transition from connected to non-connected and vice versa.
+ * NOW_CONNECTED() returns true when the status has one of these values:
+ * eESTABLISHED, eFIN_WAIT_1, eFIN_WAIT_2, eCLOSING, eLAST_ACK, eTIME_WAIT
+ * Technically the connection status is closed earlier, but the library wants
+ * to prevent that the socket will be deleted before the last ACK has been
+ * and thus causing a 'RST' packet on either side.
+ */
+#define NOW_CONNECTED( status )\
+       ( ( status >= eESTABLISHED ) && ( status != eCLOSE_WAIT ) )
+
+/*
+ * The highest 4 bits in the TCP offset byte indicate the total length of the
+ * TCP header, divided by 4.
+ */
+#define VALID_BITS_IN_TCP_OFFSET_BYTE          ( 0xF0u )
+
+/*
+ * Acknowledgements to TCP data packets may be delayed as long as more is being expected.
+ * A normal delay would be 200ms.  Here a much shorter delay of 20 ms is being used to
+ * gain performance.
+ */
+#define DELAYED_ACK_SHORT_DELAY_MS                     ( 2 )
+#define DELAYED_ACK_LONGER_DELAY_MS                    ( 20 )
+
+/*
+ * The MSS (Maximum Segment Size) will be taken as large as possible. However, packets with
+ * an MSS of 1460 bytes won't be transported through the internet.  The MSS will be reduced
+ * to 1400 bytes.
+ */
+#define REDUCED_MSS_THROUGH_INTERNET           ( 1400 )
+
+/*
+ * 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.
+ */
+#define TCP_OFFSET_LENGTH_BITS                 ( 0xf0u )
+#define TCP_OFFSET_STANDARD_LENGTH             ( 0x50u )
+
+/*
+ * Each TCP socket is checked regularly to see if it can send data packets.
+ * By default, the maximum number of packets sent during one check is limited to 8.
+ * This amount may be further limited by setting the socket's TX window size.
+ */
+#if( !defined( SEND_REPEATED_COUNT ) )
+       #define SEND_REPEATED_COUNT             ( 8 )
+#endif /* !defined( SEND_REPEATED_COUNT ) */
+
+/*
+ * Define a maximum perdiod of time (ms) to leave a TCP-socket unattended.
+ * When a TCP timer expires, retries and keep-alive messages will be checked.
+ */
+#ifndef        tcpMAXIMUM_TCP_WAKEUP_TIME_MS
+       #define tcpMAXIMUM_TCP_WAKEUP_TIME_MS           20000u
+#endif
+
+/*
+ * The names of the different TCP states may be useful in logging.
+ */
+#if( ( ipconfigHAS_DEBUG_PRINTF != 0 ) || ( ipconfigHAS_PRINTF != 0 ) )
+       static const char *pcStateNames[] = {
+               "eCLOSED",
+               "eTCP_LISTEN",
+               "eCONNECT_SYN",
+               "eSYN_FIRST",
+               "eSYN_RECEIVED",
+               "eESTABLISHED",
+               "eFIN_WAIT_1",
+               "eFIN_WAIT_2",
+               "eCLOSE_WAIT",
+               "eCLOSING",
+               "eLAST_ACK",
+               "eTIME_WAIT",
+               "eUNKNOWN",
+};
+#endif /* ( ipconfigHAS_DEBUG_PRINTF != 0 ) || ( ipconfigHAS_PRINTF != 0 ) */
+
+/*
+ * Returns true if the socket must be checked.  Non-active sockets are waiting
+ * for user action, either connect() or close().
+ */
+static BaseType_t prvTCPSocketIsActive( UBaseType_t uxStatus );
+
+/*
+ * Either sends a SYN or calls prvTCPSendRepeated (for regular messages).
+ */
+static int32_t prvTCPSendPacket( FreeRTOS_Socket_t *pxSocket );
+
+/*
+ * Try to send a series of messages.
+ */
+static int32_t prvTCPSendRepeated( FreeRTOS_Socket_t *pxSocket, NetworkBufferDescriptor_t **ppxNetworkBuffer );
+
+/*
+ * Return or send a packet to the other party.
+ */
+static void prvTCPReturnPacket( FreeRTOS_Socket_t *pxSocket, NetworkBufferDescriptor_t *pxNetworkBuffer,
+       uint32_t ulLen, BaseType_t xReleaseAfterSend );
+
+/*
+ * Initialise the data structures which keep track of the TCP windowing system.
+ */
+static void prvTCPCreateWindow( FreeRTOS_Socket_t *pxSocket );
+
+/*
+ * Let ARP look-up the MAC-address of the peer and initialise the first SYN
+ * packet.
+ */
+static BaseType_t prvTCPPrepareConnect( FreeRTOS_Socket_t *pxSocket );
+
+#if( ipconfigHAS_DEBUG_PRINTF != 0 )
+       /*
+        * For logging and debugging: make a string showing the TCP flags.
+        */
+       static const char *prvTCPFlagMeaning( UBaseType_t xFlags);
+#endif /* ipconfigHAS_DEBUG_PRINTF != 0 */
+
+/*
+ * Parse the TCP option(s) received, if present.
+ */
+static void prvCheckOptions( FreeRTOS_Socket_t *pxSocket, NetworkBufferDescriptor_t *pxNetworkBuffer );
+
+/*
+ * Identify and deal with a single TCP header option, advancing the pointer to
+ * the header. This function returns pdTRUE or pdFALSE depending on whether the
+ * caller should continue to parse more header options or break the loop.
+ */
+static BaseType_t prvSingleStepTCPHeaderOptions( const unsigned char ** const ppucPtr, const unsigned char ** const ppucLast, FreeRTOS_Socket_t ** const ppxSocket, TCPWindow_t ** const ppxTCPWindow);
+
+/*
+ * Skip past TCP header options when doing Selective ACK, until there are no
+ * more options left.
+ */
+static void prvSkipPastRemainingOptions( const unsigned char ** const ppucPtr, FreeRTOS_Socket_t ** const ppxSocket, unsigned char * const ppucLen );
+
+/*
+ * Set the initial properties in the options fields, like the preferred
+ * value of MSS and whether SACK allowed.  Will be transmitted in the state
+ * 'eCONNECT_SYN'.
+ */
+static UBaseType_t prvSetSynAckOptions( FreeRTOS_Socket_t *pxSocket, TCPPacket_t * pxTCPPacket );
+
+/*
+ * For anti-hang protection and TCP keep-alive messages.  Called in two places:
+ * after receiving a packet and after a state change.  The socket's alive timer
+ * may be reset.
+ */
+static void prvTCPTouchSocket( FreeRTOS_Socket_t *pxSocket );
+
+/*
+ * Prepare an outgoing message, if anything has to be sent.
+ */
+static int32_t prvTCPPrepareSend( FreeRTOS_Socket_t *pxSocket, NetworkBufferDescriptor_t **ppxNetworkBuffer, UBaseType_t uxOptionsLength );
+
+/*
+ * Calculate when this socket needs to be checked to do (re-)transmissions.
+ */
+static TickType_t prvTCPNextTimeout( FreeRTOS_Socket_t *pxSocket );
+
+/*
+ * The API FreeRTOS_send() adds data to the TX stream.  Add
+ * this data to the windowing system to it can be transmitted.
+ */
+static void prvTCPAddTxData( FreeRTOS_Socket_t *pxSocket );
+
+/*
+ *  Called to handle the closure of a TCP connection.
+ */
+static BaseType_t prvTCPHandleFin( FreeRTOS_Socket_t *pxSocket, NetworkBufferDescriptor_t *pxNetworkBuffer );
+
+/*
+ * Called from prvTCPHandleState().  Find the TCP payload data and check and
+ * return its length.
+ */
+static BaseType_t prvCheckRxData( NetworkBufferDescriptor_t *pxNetworkBuffer, uint8_t **ppucRecvData );
+
+/*
+ * Called from prvTCPHandleState().  Check if the payload data may be accepted.
+ * If so, it will be added to the socket's reception queue.
+ */
+static BaseType_t prvStoreRxData( FreeRTOS_Socket_t *pxSocket, uint8_t *pucRecvData,
+       NetworkBufferDescriptor_t *pxNetworkBuffer, uint32_t ulReceiveLength );
+
+/*
+ * Set the TCP options (if any) for the outgoing packet.
+ */
+static UBaseType_t prvSetOptions( FreeRTOS_Socket_t *pxSocket, NetworkBufferDescriptor_t *pxNetworkBuffer );
+
+/*
+ * Called from prvTCPHandleState() as long as the TCP status is eSYN_RECEIVED to
+ * eCONNECT_SYN.
+ */
+static BaseType_t prvHandleSynReceived( FreeRTOS_Socket_t *pxSocket, NetworkBufferDescriptor_t **ppxNetworkBuffer,
+       uint32_t ulReceiveLength, UBaseType_t uxOptionsLength );
+
+/*
+ * Called from prvTCPHandleState() as long as the TCP status is eESTABLISHED.
+ */
+static BaseType_t prvHandleEstablished( FreeRTOS_Socket_t *pxSocket, NetworkBufferDescriptor_t **ppxNetworkBuffer,
+       uint32_t ulReceiveLength, UBaseType_t uxOptionsLength );
+
+/*
+ * Called from prvTCPHandleState().  There is data to be sent.
+ * If ipconfigUSE_TCP_WIN is defined, and if only an ACK must be sent, it will
+ * be checked if it would better be postponed for efficiency.
+ */
+static BaseType_t prvSendData( FreeRTOS_Socket_t *pxSocket, NetworkBufferDescriptor_t **ppxNetworkBuffer,
+       uint32_t ulReceiveLength, BaseType_t xSendLength );
+
+/*
+ * The heart of all: check incoming packet for valid data and acks and do what
+ * is necessary in each state.
+ */
+static BaseType_t prvTCPHandleState( FreeRTOS_Socket_t *pxSocket, NetworkBufferDescriptor_t **ppxNetworkBuffer );
+
+/*
+ * Common code for sending a TCP protocol control packet (i.e. no options, no
+ * payload, just flags).
+ */
+static BaseType_t prvTCPSendSpecialPacketHelper( NetworkBufferDescriptor_t *pxNetworkBuffer,
+                                                 uint8_t ucTCPFlags );
+
+/*
+ * A "challenge ACK" is as per https://tools.ietf.org/html/rfc5961#section-3.2,
+ * case #3. In summary, an RST was received with a sequence number that is
+ * unexpected but still within the window.
+ */
+static BaseType_t prvTCPSendChallengeAck( NetworkBufferDescriptor_t *pxNetworkBuffer );
+
+/*
+ * Reply to a peer with the RST flag on, in case a packet can not be handled.
+ */
+static BaseType_t prvTCPSendReset( NetworkBufferDescriptor_t *pxNetworkBuffer );
+
+/*
+ * Set the initial value for MSS (Maximum Segment Size) to be used.
+ */
+static void prvSocketSetMSS( FreeRTOS_Socket_t *pxSocket );
+
+/*
+ * Return either a newly created socket, or the current socket in a connected
+ * state (depends on the 'bReuseSocket' flag).
+ */
+static FreeRTOS_Socket_t *prvHandleListen( FreeRTOS_Socket_t *pxSocket, NetworkBufferDescriptor_t *pxNetworkBuffer );
+
+/*
+ * After a listening socket receives a new connection, it may duplicate itself.
+ * The copying takes place in prvTCPSocketCopy.
+ */
+static BaseType_t prvTCPSocketCopy( FreeRTOS_Socket_t *pxNewSocket, FreeRTOS_Socket_t *pxSocket );
+
+/*
+ * prvTCPStatusAgeCheck() will see if the socket has been in a non-connected
+ * state for too long.  If so, the socket will be closed, and -1 will be
+ * returned.
+ */
+#if( ipconfigTCP_HANG_PROTECTION == 1 )
+       static BaseType_t prvTCPStatusAgeCheck( FreeRTOS_Socket_t *pxSocket );
+#endif
+
+static NetworkBufferDescriptor_t *prvTCPBufferResize( FreeRTOS_Socket_t *pxSocket, NetworkBufferDescriptor_t *pxNetworkBuffer,
+       int32_t lDataLen, UBaseType_t uxOptionsLength );
+
+#if( ( ipconfigHAS_DEBUG_PRINTF != 0 ) || ( ipconfigHAS_PRINTF != 0 ) )
+       const char *FreeRTOS_GetTCPStateName( UBaseType_t ulState );
+#endif
+
+#if( ipconfigUSE_TCP_WIN != 0 )
+       static uint8_t prvWinScaleFactor( FreeRTOS_Socket_t *pxSocket );
+#endif
+
+/*
+ * Generate a randomized TCP Initial Sequence Number per RFC.
+ */
+extern uint32_t ulApplicationGetNextSequenceNumber( uint32_t ulSourceAddress,
+                                                                                                       uint16_t usSourcePort,
+                                                                                                       uint32_t ulDestinationAddress,
+                                                                                                       uint16_t usDestinationPort );
+
+/*-----------------------------------------------------------*/
+
+/* prvTCPSocketIsActive() returns true if the socket must be checked.
+ * Non-active sockets are waiting for user action, either connect()
+ * or close(). */
+static BaseType_t prvTCPSocketIsActive( UBaseType_t uxStatus )
+{
+       switch( uxStatus )
+       {
+       case eCLOSED:
+       case eCLOSE_WAIT:
+       case eFIN_WAIT_2:
+       case eCLOSING:
+       case eTIME_WAIT:
+               return pdFALSE;
+       default:
+               return pdTRUE;
+       }
+}
+/*-----------------------------------------------------------*/
+
+#if( ipconfigTCP_HANG_PROTECTION == 1 )
+
+       static BaseType_t prvTCPStatusAgeCheck( FreeRTOS_Socket_t *pxSocket )
+       {
+       BaseType_t xResult;
+               switch( pxSocket->u.xTCP.ucTCPState )
+               {
+               case eESTABLISHED:
+                       /* If the 'ipconfigTCP_KEEP_ALIVE' option is enabled, sockets in
+                       state ESTABLISHED can be protected using keep-alive messages. */
+                       xResult = pdFALSE;
+                       break;
+               case eCLOSED:
+               case eTCP_LISTEN:
+               case eCLOSE_WAIT:
+                       /* These 3 states may last for ever, up to the owner. */
+                       xResult = pdFALSE;
+                       break;
+               default:
+                       /* All other (non-connected) states will get anti-hanging
+                       protection. */
+                       xResult = pdTRUE;
+                       break;
+               }
+               if( xResult != pdFALSE )
+               {
+                       /* How much time has past since the last active moment which is
+                       defined as A) a state change or B) a packet has arrived. */
+                       TickType_t xAge = xTaskGetTickCount( ) - pxSocket->u.xTCP.xLastActTime;
+
+                       /* ipconfigTCP_HANG_PROTECTION_TIME is in units of seconds. */
+                       if( xAge > ( ipconfigTCP_HANG_PROTECTION_TIME * configTICK_RATE_HZ ) )
+                       {
+                               #if( ipconfigHAS_DEBUG_PRINTF == 1 )
+                               {
+                                       FreeRTOS_debug_printf( ( "Inactive socket closed: port %u rem %lxip:%u status %s\n",
+                                               pxSocket->usLocalPort,
+                                               pxSocket->u.xTCP.ulRemoteIP,
+                                               pxSocket->u.xTCP.usRemotePort,
+                                               FreeRTOS_GetTCPStateName( ( UBaseType_t ) pxSocket->u.xTCP.ucTCPState ) ) );
+                               }
+                               #endif /* ipconfigHAS_DEBUG_PRINTF */
+
+                               /* Move to eCLOSE_WAIT, user may close the socket. */
+                               vTCPStateChange( pxSocket, eCLOSE_WAIT );
+
+                               /* When 'bPassQueued' true, this socket is an orphan until it
+                               gets connected. */
+                               if( pxSocket->u.xTCP.bits.bPassQueued != pdFALSE_UNSIGNED )
+                               {
+                                       if( pxSocket->u.xTCP.bits.bReuseSocket == pdFALSE_UNSIGNED )
+                                       {
+                                               /* As it did not get connected, and the user can never
+                                               accept() it anymore, it will be deleted now.  Called from
+                                               the IP-task, so it's safe to call the internal Close
+                                               function: vSocketClose(). */
+                                               vSocketClose( pxSocket );
+                                       }
+                                       /* Return a negative value to tell to inform the caller
+                                       xTCPTimerCheck()
+                                       that the socket got closed and may not be accessed anymore. */
+                                       xResult = -1;
+                               }
+                       }
+               }
+               return xResult;
+       }
+       /*-----------------------------------------------------------*/
+
+#endif
+
+/*
+ * As soon as a TCP socket timer expires, this function xTCPSocketCheck
+ * will be called (from xTCPTimerCheck)
+ * It can send a delayed ACK or new data
+ * Sequence of calling (normally) :
+ * IP-Task:
+ *             xTCPTimerCheck()                                // Check all sockets ( declared in FreeRTOS_Sockets.c )
+ *             xTCPSocketCheck()                               // Either send a delayed ACK or call prvTCPSendPacket()
+ *             prvTCPSendPacket()                              // Either send a SYN or call prvTCPSendRepeated ( regular messages )
+ *             prvTCPSendRepeated()                    // Send at most 8 messages on a row
+ *                     prvTCPReturnPacket()            // Prepare for returning
+ *                     xNetworkInterfaceOutput()       // Sends data to the NIC ( declared in portable/NetworkInterface/xxx )
+ */
+BaseType_t xTCPSocketCheck( FreeRTOS_Socket_t *pxSocket )
+{
+BaseType_t xResult = 0;
+BaseType_t xReady = pdFALSE;
+
+       if( ( pxSocket->u.xTCP.ucTCPState >= eESTABLISHED ) && ( pxSocket->u.xTCP.txStream != NULL ) )
+       {
+               /* The API FreeRTOS_send() might have added data to the TX stream.  Add
+               this data to the windowing system to it can be transmitted. */
+               prvTCPAddTxData( pxSocket );
+       }
+
+       #if ipconfigUSE_TCP_WIN == 1
+       {
+               if( pxSocket->u.xTCP.pxAckMessage != NULL )
+               {
+                       /* The first task of this regular socket check is to send-out delayed
+                       ACK's. */
+                       if( pxSocket->u.xTCP.bits.bUserShutdown == pdFALSE_UNSIGNED )
+                       {
+                               /* Earlier data was received but not yet acknowledged.  This
+                               function is called when the TCP timer for the socket expires, the
+                               ACK may be sent now. */
+                               if( pxSocket->u.xTCP.ucTCPState != eCLOSED )
+                               {
+                                       if( xTCPWindowLoggingLevel > 1 && ipconfigTCP_MAY_LOG_PORT( pxSocket->usLocalPort ) )
+                                       {
+                                               FreeRTOS_debug_printf( ( "Send[%u->%u] del ACK %lu SEQ %lu (len %u)\n",
+                                                       pxSocket->usLocalPort,
+                                                       pxSocket->u.xTCP.usRemotePort,
+                                                       pxSocket->u.xTCP.xTCPWindow.rx.ulCurrentSequenceNumber - pxSocket->u.xTCP.xTCPWindow.rx.ulFirstSequenceNumber,
+                                                       pxSocket->u.xTCP.xTCPWindow.ulOurSequenceNumber   - pxSocket->u.xTCP.xTCPWindow.tx.ulFirstSequenceNumber,
+                                                       ipSIZE_OF_IPv4_HEADER + ipSIZE_OF_TCP_HEADER ) );
+                                       }
+
+                                       prvTCPReturnPacket( pxSocket, pxSocket->u.xTCP.pxAckMessage, ipSIZE_OF_IPv4_HEADER + ipSIZE_OF_TCP_HEADER, ipconfigZERO_COPY_TX_DRIVER );
+
+                                       #if( ipconfigZERO_COPY_TX_DRIVER != 0 )
+                                       {
+                                               /* The ownership has been passed to the SEND routine,
+                                               clear the pointer to it. */
+                                               pxSocket->u.xTCP.pxAckMessage = NULL;
+                                       }
+                                       #endif /* ipconfigZERO_COPY_TX_DRIVER */
+                               }
+                               if( prvTCPNextTimeout( pxSocket ) > 1 )
+                               {
+                                       /* Tell the code below that this function is ready. */
+                                       xReady = pdTRUE;
+                               }
+                       }
+                       else
+                       {
+                               /* The user wants to perform an active shutdown(), skip sending
+                               the     delayed ACK.  The function prvTCPSendPacket() will send the
+                               FIN     along with the ACK's. */
+                       }
+
+                       if( pxSocket->u.xTCP.pxAckMessage != NULL )
+                       {
+                               vReleaseNetworkBufferAndDescriptor( pxSocket->u.xTCP.pxAckMessage );
+                               pxSocket->u.xTCP.pxAckMessage = NULL;
+                       }
+               }
+       }
+       #endif /* ipconfigUSE_TCP_WIN */
+
+       if( xReady == pdFALSE )
+       {
+               /* The second task of this regular socket check is sending out data. */
+               if( ( pxSocket->u.xTCP.ucTCPState >= eESTABLISHED ) ||
+                       ( pxSocket->u.xTCP.ucTCPState == eCONNECT_SYN ) )
+               {
+                       prvTCPSendPacket( pxSocket );
+               }
+
+               /* Set the time-out for the next wakeup for this socket. */
+               prvTCPNextTimeout( pxSocket );
+
+               #if( ipconfigTCP_HANG_PROTECTION == 1 )
+               {
+                       /* In all (non-connected) states in which keep-alive messages can not be sent
+                       the anti-hang protocol will close sockets that are 'hanging'. */
+                       xResult = prvTCPStatusAgeCheck( pxSocket );
+               }
+               #endif
+       }
+
+       return xResult;
+}
+/*-----------------------------------------------------------*/
+
+/*
+ * prvTCPSendPacket() will be called when the socket time-out has been reached.
+ * It is only called by xTCPSocketCheck().
+ */
+static int32_t prvTCPSendPacket( FreeRTOS_Socket_t *pxSocket )
+{
+int32_t lResult = 0;
+UBaseType_t uxOptionsLength;
+TCPPacket_t *pxTCPPacket;
+NetworkBufferDescriptor_t *pxNetworkBuffer;
+
+       if( pxSocket->u.xTCP.ucTCPState != eCONNECT_SYN )
+       {
+               /* The connection is in s state other than SYN. */
+               pxNetworkBuffer = NULL;
+
+               /* prvTCPSendRepeated() will only create a network buffer if necessary,
+               i.e. when data must be sent to the peer. */
+               lResult = prvTCPSendRepeated( pxSocket, &pxNetworkBuffer );
+
+               if( pxNetworkBuffer != NULL )
+               {
+                       vReleaseNetworkBufferAndDescriptor( pxNetworkBuffer );
+               }
+       }
+       else
+       {
+               if( pxSocket->u.xTCP.ucRepCount >= 3u )
+               {
+                       /* The connection is in the SYN status. The packet will be repeated
+                       to most 3 times.  When there is no response, the socket get the
+                       status 'eCLOSE_WAIT'. */
+                       FreeRTOS_debug_printf( ( "Connect: giving up %lxip:%u\n",
+                               pxSocket->u.xTCP.ulRemoteIP,            /* IP address of remote machine. */
+                               pxSocket->u.xTCP.usRemotePort ) );      /* Port on remote machine. */
+                       vTCPStateChange( pxSocket, eCLOSE_WAIT );
+               }
+               else if( ( pxSocket->u.xTCP.bits.bConnPrepared != pdFALSE_UNSIGNED ) || ( prvTCPPrepareConnect( pxSocket ) == pdTRUE ) )
+               {
+                       /* Or else, if the connection has been prepared, or can be prepared
+                       now, proceed to send the packet with the SYN flag.
+                       prvTCPPrepareConnect() prepares 'xPacket' and returns pdTRUE if
+                       the Ethernet address of the peer or the gateway is found. */
+                       pxTCPPacket = ( TCPPacket_t * )pxSocket->u.xTCP.xPacket.u.ucLastPacket;
+
+                       /* About to send a SYN packet.  Call prvSetSynAckOptions() to set
+                       the proper options: The size of MSS and whether SACK's are
+                       allowed. */
+                       uxOptionsLength = prvSetSynAckOptions( pxSocket, pxTCPPacket );
+
+                       /* Return the number of bytes to be sent. */
+                       lResult = ( BaseType_t ) ( ipSIZE_OF_IPv4_HEADER + ipSIZE_OF_TCP_HEADER + uxOptionsLength );
+
+                       /* Set the TCP offset field:  ipSIZE_OF_TCP_HEADER equals 20 and
+                       uxOptionsLength is always a multiple of 4.  The complete expression
+                       would be:
+                       ucTCPOffset = ( ( ipSIZE_OF_TCP_HEADER + uxOptionsLength ) / 4 ) << 4 */
+                       pxTCPPacket->xTCPHeader.ucTCPOffset = ( uint8_t )( ( ipSIZE_OF_TCP_HEADER + uxOptionsLength ) << 2 );
+
+                       /* Repeat Count is used for a connecting socket, to limit the number
+                       of tries. */
+                       pxSocket->u.xTCP.ucRepCount++;
+
+                       /* Send the SYN message to make a connection.  The messages is
+                       stored in the socket field 'xPacket'.  It will be wrapped in a
+                       pseudo network buffer descriptor before it will be sent. */
+                       prvTCPReturnPacket( pxSocket, NULL, ( uint32_t ) lResult, pdFALSE );
+               }
+       }
+
+       /* Return the total number of bytes sent. */
+       return lResult;
+}
+/*-----------------------------------------------------------*/
+
+/*
+ * prvTCPSendRepeated will try to send a series of messages, as long as there is
+ * data to be sent and as long as the transmit window isn't full.
+ */
+static int32_t prvTCPSendRepeated( FreeRTOS_Socket_t *pxSocket, NetworkBufferDescriptor_t **ppxNetworkBuffer )
+{
+UBaseType_t uxIndex;
+int32_t lResult = 0;
+UBaseType_t uxOptionsLength = 0u;
+int32_t xSendLength;
+
+       for( uxIndex = 0u; uxIndex < ( UBaseType_t ) SEND_REPEATED_COUNT; uxIndex++ )
+       {
+               /* prvTCPPrepareSend() might allocate a network buffer if there is data
+               to be sent. */
+               xSendLength = prvTCPPrepareSend( pxSocket, ppxNetworkBuffer, uxOptionsLength );
+               if( xSendLength <= 0 )
+               {
+                       break;
+               }
+
+               /* And return the packet to the peer. */
+               prvTCPReturnPacket( pxSocket, *ppxNetworkBuffer, ( uint32_t ) xSendLength, ipconfigZERO_COPY_TX_DRIVER );
+
+               #if( ipconfigZERO_COPY_TX_DRIVER != 0 )
+               {
+                       *ppxNetworkBuffer = NULL;
+               }
+               #endif /* ipconfigZERO_COPY_TX_DRIVER */
+
+               lResult += xSendLength;
+       }
+
+       /* Return the total number of bytes sent. */
+       return lResult;
+}
+/*-----------------------------------------------------------*/
+
+/*
+ * Return (or send) a packet the the peer.  The data is stored in pxBuffer,
+ * which may either point to a real network buffer or to a TCP socket field
+ * called 'xTCP.xPacket'.   A temporary xNetworkBuffer will be used to pass
+ * the data to the NIC.
+ */
+static void prvTCPReturnPacket( FreeRTOS_Socket_t *pxSocket, NetworkBufferDescriptor_t *pxNetworkBuffer, uint32_t ulLen, BaseType_t xReleaseAfterSend )
+{
+TCPPacket_t * pxTCPPacket;
+IPHeader_t *pxIPHeader;
+EthernetHeader_t *pxEthernetHeader;
+uint32_t ulFrontSpace, ulSpace, ulSourceAddress, ulWinSize;
+TCPWindow_t *pxTCPWindow;
+NetworkBufferDescriptor_t xTempBuffer;
+/* For sending, a pseudo network buffer will be used, as explained above. */
+
+       if( pxNetworkBuffer == NULL )
+       {
+               pxNetworkBuffer = &xTempBuffer;
+
+               #if( ipconfigUSE_LINKED_RX_MESSAGES != 0 )
+               {
+                       xTempBuffer.pxNextBuffer = NULL;
+               }
+               #endif
+               xTempBuffer.pucEthernetBuffer = pxSocket->u.xTCP.xPacket.u.ucLastPacket;
+               xTempBuffer.xDataLength = sizeof( pxSocket->u.xTCP.xPacket.u.ucLastPacket );
+               xReleaseAfterSend = pdFALSE;
+       }
+
+       #if( ipconfigZERO_COPY_TX_DRIVER != 0 )
+       {
+               if( xReleaseAfterSend == pdFALSE )
+               {
+                       pxNetworkBuffer = pxDuplicateNetworkBufferWithDescriptor( pxNetworkBuffer, ( BaseType_t ) pxNetworkBuffer->xDataLength );
+                       if( pxNetworkBuffer == NULL )
+                       {
+                               FreeRTOS_debug_printf( ( "prvTCPReturnPacket: duplicate failed\n" ) );
+                       }
+                       xReleaseAfterSend = pdTRUE;
+               }
+       }
+       #endif /* ipconfigZERO_COPY_TX_DRIVER */
+
+       if( pxNetworkBuffer != NULL )
+       {
+               pxTCPPacket = ( TCPPacket_t * ) ( pxNetworkBuffer->pucEthernetBuffer );
+               pxIPHeader = &pxTCPPacket->xIPHeader;
+               pxEthernetHeader = &pxTCPPacket->xEthernetHeader;
+
+               /* Fill the packet, using hton translations. */
+               if( pxSocket != NULL )
+               {
+                       /* Calculate the space in the RX buffer in order to advertise the
+                       size of this socket's reception window. */
+                       pxTCPWindow = &( pxSocket->u.xTCP.xTCPWindow );
+
+                       if( pxSocket->u.xTCP.rxStream != NULL )
+                       {
+                               /* An RX stream was created already, see how much space is
+                               available. */
+                               ulFrontSpace = ( uint32_t ) uxStreamBufferFrontSpace( pxSocket->u.xTCP.rxStream );
+                       }
+                       else
+                       {
+                               /* No RX stream has been created, the full stream size is
+                               available. */
+                               ulFrontSpace = ( uint32_t ) pxSocket->u.xTCP.uxRxStreamSize;
+                       }
+
+                       /* Take the minimum of the RX buffer space and the RX window size. */
+                       ulSpace = FreeRTOS_min_uint32( pxTCPWindow->xSize.ulRxWindowLength, ulFrontSpace );
+
+                       if( ( pxSocket->u.xTCP.bits.bLowWater != pdFALSE_UNSIGNED ) || ( pxSocket->u.xTCP.bits.bRxStopped != pdFALSE_UNSIGNED ) )
+                       {
+                               /* The low-water mark was reached, meaning there was little
+                               space left.  The socket will wait until the application has read
+                               or flushed the incoming data, and 'zero-window' will be
+                               advertised. */
+                               ulSpace = 0u;
+                       }
+
+                       /* If possible, advertise an RX window size of at least 1 MSS, otherwise
+                       the peer might start 'zero window probing', i.e. sending small packets
+                       (1, 2, 4, 8... bytes). */
+                       if( ( ulSpace < pxSocket->u.xTCP.usCurMSS ) && ( ulFrontSpace >= pxSocket->u.xTCP.usCurMSS ) )
+                       {
+                               ulSpace = pxSocket->u.xTCP.usCurMSS;
+                       }
+
+                       /* Avoid overflow of the 16-bit win field. */
+                       #if( ipconfigUSE_TCP_WIN != 0 )
+                       {
+                               ulWinSize = ( ulSpace >> pxSocket->u.xTCP.ucMyWinScaleFactor );
+                       }
+                       #else
+                       {
+                               ulWinSize = ulSpace;
+                       }
+                       #endif
+                       if( ulWinSize > 0xfffcUL )
+                       {
+                               ulWinSize = 0xfffcUL;
+                       }
+
+                       pxTCPPacket->xTCPHeader.usWindow = FreeRTOS_htons( ( uint16_t ) ulWinSize );
+
+                       #if( ipconfigHAS_DEBUG_PRINTF != 0 )
+                       {
+                               if( ipconfigTCP_MAY_LOG_PORT( pxSocket->usLocalPort ) != pdFALSE )
+                               {
+                                       if( ( xTCPWindowLoggingLevel != 0 ) && ( pxSocket->u.xTCP.bits.bWinChange != pdFALSE_UNSIGNED ) )
+                                       {
+                                       size_t uxFrontSpace;
+
+                                               if(pxSocket->u.xTCP.rxStream != NULL)
+                                               {
+                                                       uxFrontSpace =  uxStreamBufferFrontSpace( pxSocket->u.xTCP.rxStream ) ;
+                                               }
+                                               else
+                                               {
+                                                       uxFrontSpace = 0u;
+                                               }
+
+                                               FreeRTOS_debug_printf( ( "%s: %lxip:%u: [%lu < %lu] winSize %ld\n",
+                                               pxSocket->u.xTCP.bits.bLowWater ? "STOP" : "GO ",
+                                                       pxSocket->u.xTCP.ulRemoteIP,
+                                                       pxSocket->u.xTCP.usRemotePort,
+                                                       pxSocket->u.xTCP.bits.bLowWater ? pxSocket->u.xTCP.uxLittleSpace : uxFrontSpace, pxSocket->u.xTCP.uxEnoughSpace,
+                                                       (int32_t) ( pxTCPWindow->rx.ulHighestSequenceNumber - pxTCPWindow->rx.ulCurrentSequenceNumber ) ) );
+                                       }
+                               }
+                       }
+                       #endif /* ipconfigHAS_DEBUG_PRINTF != 0 */
+
+                       /* The new window size has been advertised, switch off the flag. */
+                       pxSocket->u.xTCP.bits.bWinChange = pdFALSE_UNSIGNED;
+
+                       /* Later on, when deciding to delay an ACK, a precise estimate is needed
+                       of the free RX space.  At this moment, 'ulHighestRxAllowed' would be the
+                       highest sequence number minus 1 that the socket will accept. */
+                       pxSocket->u.xTCP.ulHighestRxAllowed = pxTCPWindow->rx.ulCurrentSequenceNumber + ulSpace;
+
+                       #if( ipconfigTCP_KEEP_ALIVE == 1 )
+                               if( pxSocket->u.xTCP.bits.bSendKeepAlive != pdFALSE_UNSIGNED )
+                               {
+                                       /* Sending a keep-alive packet, send the current sequence number
+                                       minus 1, which will     be recognised as a keep-alive packet an
+                                       responded to by acknowledging the last byte. */
+                                       pxSocket->u.xTCP.bits.bSendKeepAlive = pdFALSE_UNSIGNED;
+                                       pxSocket->u.xTCP.bits.bWaitKeepAlive = pdTRUE_UNSIGNED;
+
+                                       pxTCPPacket->xTCPHeader.ulSequenceNumber = pxSocket->u.xTCP.xTCPWindow.ulOurSequenceNumber - 1UL;
+                                       pxTCPPacket->xTCPHeader.ulSequenceNumber = FreeRTOS_htonl( pxTCPPacket->xTCPHeader.ulSequenceNumber );
+                               }
+                               else
+                       #endif
+                       {
+                               pxTCPPacket->xTCPHeader.ulSequenceNumber = FreeRTOS_htonl( pxSocket->u.xTCP.xTCPWindow.ulOurSequenceNumber );
+
+                               if( ( pxTCPPacket->xTCPHeader.ucTCPFlags & ( uint8_t ) ipTCP_FLAG_FIN ) != 0u )
+                               {
+                                       /* Suppress FIN in case this packet carries earlier data to be
+                                       retransmitted. */
+                                       uint32_t ulDataLen = ( uint32_t ) ( ulLen - ( ipSIZE_OF_TCP_HEADER + ipSIZE_OF_IPv4_HEADER ) );
+                                       if( ( pxTCPWindow->ulOurSequenceNumber + ulDataLen ) != pxTCPWindow->tx.ulFINSequenceNumber )
+                                       {
+                                               pxTCPPacket->xTCPHeader.ucTCPFlags &= ( ( uint8_t ) ~ipTCP_FLAG_FIN );
+                                               FreeRTOS_debug_printf( ( "Suppress FIN for %lu + %lu < %lu\n",
+                                                       pxTCPWindow->ulOurSequenceNumber - pxTCPWindow->tx.ulFirstSequenceNumber,
+                                                       ulDataLen,
+                                                       pxTCPWindow->tx.ulFINSequenceNumber - pxTCPWindow->tx.ulFirstSequenceNumber ) );
+                                       }
+                               }
+                       }
+
+                       /* Tell which sequence number is expected next time */
+                       pxTCPPacket->xTCPHeader.ulAckNr = FreeRTOS_htonl( pxTCPWindow->rx.ulCurrentSequenceNumber );
+               }
+               else
+               {
+                       /* Sending data without a socket, probably replying with a RST flag
+                       Just swap the two sequence numbers. */
+                       vFlip_32( pxTCPPacket->xTCPHeader.ulSequenceNumber, pxTCPPacket->xTCPHeader.ulAckNr );
+               }
+
+               pxIPHeader->ucTimeToLive                   = ( uint8_t ) ipconfigTCP_TIME_TO_LIVE;
+               pxIPHeader->usLength                       = FreeRTOS_htons( ulLen );
+               if( ( pxSocket == NULL ) || ( *ipLOCAL_IP_ADDRESS_POINTER == 0ul ) )
+               {
+                       /* When pxSocket is NULL, this function is called by prvTCPSendReset()
+                       and the IP-addresses must be swapped.
+                       Also swap the IP-addresses in case the IP-tack doesn't have an
+                       IP-address yet, i.e. when ( *ipLOCAL_IP_ADDRESS_POINTER == 0ul ). */
+                       ulSourceAddress = pxIPHeader->ulDestinationIPAddress;
+               }
+               else
+               {
+                       ulSourceAddress = *ipLOCAL_IP_ADDRESS_POINTER;
+               }
+               pxIPHeader->ulDestinationIPAddress = pxIPHeader->ulSourceIPAddress;
+               pxIPHeader->ulSourceIPAddress = ulSourceAddress;
+               vFlip_16( pxTCPPacket->xTCPHeader.usSourcePort, pxTCPPacket->xTCPHeader.usDestinationPort );
+
+               /* Just an increasing number. */
+               pxIPHeader->usIdentification = FreeRTOS_htons( usPacketIdentifier );
+               usPacketIdentifier++;
+               pxIPHeader->usFragmentOffset = 0u;
+
+               #if( ipconfigDRIVER_INCLUDED_TX_IP_CHECKSUM == 0 )
+               {
+                       /* calculate the IP header checksum, in case the driver won't do that. */
+                       pxIPHeader->usHeaderChecksum = 0x00u;
+                       pxIPHeader->usHeaderChecksum = usGenerateChecksum( 0UL, ( uint8_t * ) &( pxIPHeader->ucVersionHeaderLength ), ipSIZE_OF_IPv4_HEADER );
+                       pxIPHeader->usHeaderChecksum = ~FreeRTOS_htons( pxIPHeader->usHeaderChecksum );
+
+                       /* calculate the TCP checksum for an outgoing packet. */
+                       usGenerateProtocolChecksum( (uint8_t*)pxTCPPacket, pxNetworkBuffer->xDataLength, pdTRUE );
+
+                       /* A calculated checksum of 0 must be inverted as 0 means the checksum
+                       is disabled. */
+                       if( pxTCPPacket->xTCPHeader.usChecksum == 0x00u )
+                       {
+                               pxTCPPacket->xTCPHeader.usChecksum = 0xffffU;
+                       }
+               }
+               #endif
+
+       #if( ipconfigUSE_LINKED_RX_MESSAGES != 0 )
+               pxNetworkBuffer->pxNextBuffer = NULL;
+       #endif
+
+               /* Important: tell NIC driver how many bytes must be sent. */
+               pxNetworkBuffer->xDataLength = ulLen + ipSIZE_OF_ETH_HEADER;
+
+               /* Fill in the destination MAC addresses. */
+               memcpy( ( void * ) &( pxEthernetHeader->xDestinationAddress ), ( void * ) &( pxEthernetHeader->xSourceAddress ),
+                       sizeof( pxEthernetHeader->xDestinationAddress ) );
+
+               /* The source MAC addresses is fixed to 'ipLOCAL_MAC_ADDRESS'. */
+               memcpy( ( void * ) &( pxEthernetHeader->xSourceAddress) , ( void * ) ipLOCAL_MAC_ADDRESS, ( size_t ) ipMAC_ADDRESS_LENGTH_BYTES );
+
+               #if defined( ipconfigETHERNET_MINIMUM_PACKET_BYTES )
+               {
+                       if( pxNetworkBuffer->xDataLength < ( size_t ) ipconfigETHERNET_MINIMUM_PACKET_BYTES )
+                       {
+                       BaseType_t xIndex;
+
+                               for( xIndex = ( BaseType_t ) pxNetworkBuffer->xDataLength; xIndex < ( BaseType_t ) ipconfigETHERNET_MINIMUM_PACKET_BYTES; xIndex++ )
+                               {
+                                       pxNetworkBuffer->pucEthernetBuffer[ xIndex ] = 0u;
+                               }
+                               pxNetworkBuffer->xDataLength = ( size_t ) ipconfigETHERNET_MINIMUM_PACKET_BYTES;
+                       }
+               }
+               #endif
+
+               /* Send! */
+               xNetworkInterfaceOutput( pxNetworkBuffer, xReleaseAfterSend );
+
+               if( xReleaseAfterSend == pdFALSE )
+               {
+                       /* Swap-back some fields, as pxBuffer probably points to a socket field
+                       containing the packet header. */
+                       vFlip_16( pxTCPPacket->xTCPHeader.usSourcePort, pxTCPPacket->xTCPHeader.usDestinationPort);
+                       pxTCPPacket->xIPHeader.ulSourceIPAddress = pxTCPPacket->xIPHeader.ulDestinationIPAddress;
+                       memcpy( pxEthernetHeader->xSourceAddress.ucBytes, pxEthernetHeader->xDestinationAddress.ucBytes, ( size_t ) ipMAC_ADDRESS_LENGTH_BYTES );
+               }
+               else
+               {
+                       /* Nothing to do: the buffer has been passed to DMA and will be released after use */
+               }
+       } /* if( pxNetworkBuffer != NULL ) */
+}
+/*-----------------------------------------------------------*/
+
+/*
+ * The SYN event is very important: the sequence numbers, which have a kind of
+ * random starting value, are being synchronised.  The sliding window manager
+ * (in FreeRTOS_TCP_WIN.c) needs to know them, along with the Maximum Segment
+ * Size (MSS) in use.
+ */
+static void prvTCPCreateWindow( FreeRTOS_Socket_t *pxSocket )
+{
+       if( xTCPWindowLoggingLevel )
+               FreeRTOS_debug_printf( ( "Limits (using): TCP Win size %lu Water %lu <= %lu <= %lu\n",
+                       pxSocket->u.xTCP.uxRxWinSize * ipconfigTCP_MSS,
+                       pxSocket->u.xTCP.uxLittleSpace ,
+                       pxSocket->u.xTCP.uxEnoughSpace,
+                       pxSocket->u.xTCP.uxRxStreamSize ) );
+       vTCPWindowCreate(
+               &pxSocket->u.xTCP.xTCPWindow,
+               ipconfigTCP_MSS * pxSocket->u.xTCP.uxRxWinSize,
+               ipconfigTCP_MSS * pxSocket->u.xTCP.uxTxWinSize,
+               pxSocket->u.xTCP.xTCPWindow.rx.ulCurrentSequenceNumber,
+               pxSocket->u.xTCP.xTCPWindow.ulOurSequenceNumber,
+               ( uint32_t ) pxSocket->u.xTCP.usInitMSS );
+}
+/*-----------------------------------------------------------*/
+
+/*
+ * Connecting sockets have a special state: eCONNECT_SYN.  In this phase,
+ * the Ethernet address of the target will be found using ARP.  In case the
+ * target IP address is not within the netmask, the hardware address of the
+ * gateway will be used.
+ */
+static BaseType_t prvTCPPrepareConnect( FreeRTOS_Socket_t *pxSocket )
+{
+TCPPacket_t *pxTCPPacket;
+IPHeader_t *pxIPHeader;
+eARPLookupResult_t eReturned;
+uint32_t ulRemoteIP;
+MACAddress_t xEthAddress;
+BaseType_t xReturn = pdTRUE;
+uint32_t ulInitialSequenceNumber = 0;
+
+       #if( ipconfigHAS_PRINTF != 0 )
+       {
+               /* Only necessary for nicer logging. */
+               memset( xEthAddress.ucBytes, '\0', sizeof( xEthAddress.ucBytes ) );
+       }
+       #endif /* ipconfigHAS_PRINTF != 0 */
+
+       ulRemoteIP = FreeRTOS_htonl( pxSocket->u.xTCP.ulRemoteIP );
+
+       /* Determine the ARP cache status for the requested IP address. */
+       eReturned = eARPGetCacheEntry( &( ulRemoteIP ), &( xEthAddress ) );
+
+       switch( eReturned )
+       {
+       case eARPCacheHit:              /* An ARP table lookup found a valid entry. */
+               break;                          /* We can now prepare the SYN packet. */
+       case eARPCacheMiss:             /* An ARP table lookup did not find a valid entry. */
+       case eCantSendPacket:   /* There is no IP address, or an ARP is still in progress. */
+       default:
+               /* Count the number of times it couldn't find the ARP address. */
+               pxSocket->u.xTCP.ucRepCount++;
+
+               FreeRTOS_debug_printf( ( "ARP for %lxip (using %lxip): rc=%d %02X:%02X:%02X %02X:%02X:%02X\n",
+                       pxSocket->u.xTCP.ulRemoteIP,
+                       FreeRTOS_htonl( ulRemoteIP ),
+                       eReturned,
+                       xEthAddress.ucBytes[ 0 ],
+                       xEthAddress.ucBytes[ 1 ],
+                       xEthAddress.ucBytes[ 2 ],
+                       xEthAddress.ucBytes[ 3 ],
+                       xEthAddress.ucBytes[ 4 ],
+                       xEthAddress.ucBytes[ 5 ] ) );
+
+               /* And issue a (new) ARP request */
+               FreeRTOS_OutputARPRequest( ulRemoteIP );
+
+               xReturn = pdFALSE;
+       }
+
+       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 )
+       {
+               /* The MAC-address of the peer (or gateway) has been found,
+               now prepare the initial TCP packet and some fields in the socket. */
+               pxTCPPacket = ( TCPPacket_t * )pxSocket->u.xTCP.xPacket.u.ucLastPacket;
+               pxIPHeader = &pxTCPPacket->xIPHeader;
+
+               /* reset the retry counter to zero. */
+               pxSocket->u.xTCP.ucRepCount = 0u;
+
+               /* And remember that the connect/SYN data are prepared. */
+               pxSocket->u.xTCP.bits.bConnPrepared = pdTRUE_UNSIGNED;
+
+               /* Now that the Ethernet address is known, the initial packet can be
+               prepared. */
+               memset( pxSocket->u.xTCP.xPacket.u.ucLastPacket, '\0', sizeof( pxSocket->u.xTCP.xPacket.u.ucLastPacket ) );
+
+               /* Write the Ethernet address in Source, because it will be swapped by
+               prvTCPReturnPacket(). */
+               memcpy( &pxTCPPacket->xEthernetHeader.xSourceAddress, &xEthAddress, sizeof( xEthAddress ) );
+
+               /* 'ipIPv4_FRAME_TYPE' is already in network-byte-order. */
+               pxTCPPacket->xEthernetHeader.usFrameType = ipIPv4_FRAME_TYPE;
+
+               pxIPHeader->ucVersionHeaderLength = 0x45u;
+               pxIPHeader->usLength = FreeRTOS_htons( sizeof( TCPPacket_t ) - sizeof( pxTCPPacket->xEthernetHeader ) );
+               pxIPHeader->ucTimeToLive = ( uint8_t ) ipconfigTCP_TIME_TO_LIVE;
+
+               pxIPHeader->ucProtocol = ( uint8_t ) ipPROTOCOL_TCP;
+
+               /* Addresses and ports will be stored swapped because prvTCPReturnPacket
+               will swap them back while replying. */
+               pxIPHeader->ulDestinationIPAddress = *ipLOCAL_IP_ADDRESS_POINTER;
+               pxIPHeader->ulSourceIPAddress = FreeRTOS_htonl( pxSocket->u.xTCP.ulRemoteIP );
+
+               pxTCPPacket->xTCPHeader.usSourcePort = FreeRTOS_htons( pxSocket->u.xTCP.usRemotePort );
+               pxTCPPacket->xTCPHeader.usDestinationPort = FreeRTOS_htons( pxSocket->usLocalPort );
+
+               /* We are actively connecting, so the peer's Initial Sequence Number (ISN)
+               isn't known yet. */
+               pxSocket->u.xTCP.xTCPWindow.rx.ulCurrentSequenceNumber = 0ul;
+
+               /* Start with ISN (Initial Sequence Number). */
+               pxSocket->u.xTCP.xTCPWindow.ulOurSequenceNumber = ulInitialSequenceNumber;
+
+               /* The TCP header size is 20 bytes, divided by 4 equals 5, which is put in
+               the high nibble of the TCP offset field. */
+               pxTCPPacket->xTCPHeader.ucTCPOffset = 0x50u;
+
+               /* Only set the SYN flag. */
+               pxTCPPacket->xTCPHeader.ucTCPFlags = ipTCP_FLAG_SYN;
+
+               /* Set the values of usInitMSS / usCurMSS for this socket. */
+               prvSocketSetMSS( pxSocket );
+
+               /* The initial sequence numbers at our side are known.  Later
+               vTCPWindowInit() will be called to fill in the peer's sequence numbers, but
+               first wait for a SYN+ACK reply. */
+               prvTCPCreateWindow( pxSocket );
+       }
+
+       return xReturn;
+}
+/*-----------------------------------------------------------*/
+
+/* For logging and debugging: make a string showing the TCP flags
+*/
+#if( ipconfigHAS_DEBUG_PRINTF != 0 )
+
+       static const char *prvTCPFlagMeaning( UBaseType_t xFlags)
+       {
+               static char retString[10];
+               snprintf(retString, sizeof( retString ), "%c%c%c%c%c%c%c%c%c",
+                       ( xFlags & ipTCP_FLAG_FIN )  ? 'F' : '.',       /* 0x0001: No more data from sender */
+                       ( xFlags & ipTCP_FLAG_SYN )  ? 'S' : '.',       /* 0x0002: Synchronize sequence numbers */
+                       ( xFlags & ipTCP_FLAG_RST )  ? 'R' : '.',       /* 0x0004: Reset the connection */
+                       ( xFlags & ipTCP_FLAG_PSH )  ? 'P' : '.',       /* 0x0008: Push function: please push buffered data to the recv application */
+                       ( xFlags & ipTCP_FLAG_ACK )  ? 'A' : '.',       /* 0x0010: Acknowledgment field is significant */
+                       ( xFlags & ipTCP_FLAG_URG )  ? 'U' : '.',       /* 0x0020: Urgent pointer field is significant */
+                       ( xFlags & ipTCP_FLAG_ECN )  ? 'E' : '.',       /* 0x0040: ECN-Echo */
+                       ( xFlags & ipTCP_FLAG_CWR )  ? 'C' : '.',       /* 0x0080: Congestion Window Reduced */
+                       ( xFlags & ipTCP_FLAG_NS )   ? 'N' : '.');      /* 0x0100: ECN-nonce concealment protection */
+               return retString;
+       }
+       /*-----------------------------------------------------------*/
+
+#endif /* ipconfigHAS_DEBUG_PRINTF */
+
+/*
+ * Parse the TCP option(s) received, if present.  It has already been verified
+ * that: ((pxTCPHeader->ucTCPOffset & 0xf0) > 0x50), meaning that the TP header
+ * is longer than the usual 20 (5 x 4) bytes.
+ */
+static void prvCheckOptions( FreeRTOS_Socket_t *pxSocket, NetworkBufferDescriptor_t *pxNetworkBuffer )
+{
+TCPPacket_t * pxTCPPacket;
+TCPHeader_t * pxTCPHeader;
+const unsigned char *pucPtr;
+const unsigned char *pucLast;
+TCPWindow_t *pxTCPWindow;
+BaseType_t xShouldContinueLoop;
+
+       pxTCPPacket = ( TCPPacket_t * ) ( pxNetworkBuffer->pucEthernetBuffer );
+       pxTCPHeader = &pxTCPPacket->xTCPHeader;
+
+       /* A character pointer to iterate through the option data */
+       pucPtr = pxTCPHeader->ucOptdata;
+       pucLast = pucPtr + (((pxTCPHeader->ucTCPOffset >> 4) - 5) << 2);
+       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
+       corrupted, we don't like to run into invalid memory and crash. */
+       xShouldContinueLoop = pdTRUE;
+       while( ( pucPtr < pucLast ) && ( xShouldContinueLoop == pdTRUE ) )
+       {
+               xShouldContinueLoop = prvSingleStepTCPHeaderOptions( &pucPtr, &pucLast, &pxSocket, &pxTCPWindow );
+       }
+}
+
+/*-----------------------------------------------------------*/
+
+static BaseType_t prvSingleStepTCPHeaderOptions( const unsigned char ** const ppucPtr, const unsigned char ** const ppucLast, FreeRTOS_Socket_t ** const ppxSocket, TCPWindow_t ** const ppxTCPWindow)
+{
+       UBaseType_t uxNewMSS;
+       UBaseType_t xRemainingOptionsBytes = ( *ppucLast ) - ( *ppucPtr );
+       unsigned char ucLen;
+
+       if( ( *ppucPtr )[ 0 ] == TCP_OPT_END )
+       {
+               /* End of options. */
+               return pdFALSE;
+       }
+       if( ( *ppucPtr )[ 0 ] == TCP_OPT_NOOP)
+       {
+               /* NOP option, inserted to make the length a multiple of 4. */
+               ( *ppucPtr )++;
+               return pdTRUE;
+       }
+
+       /* Any other well-formed option must be at least two bytes: the option
+       type byte followed by a length byte. */
+       if( xRemainingOptionsBytes < 2 )
+       {
+               return pdFALSE;
+       }
+#if( ipconfigUSE_TCP_WIN != 0 )
+       else if( ( *ppucPtr )[ 0 ] == TCP_OPT_WSOPT )
+       {
+               /* Confirm that the option fits in the remaining buffer space. */
+               if( ( xRemainingOptionsBytes < TCP_OPT_WSOPT_LEN ) || ( ( *ppucPtr )[ 1 ] != TCP_OPT_WSOPT_LEN ) )
+               {
+                       return pdFALSE;
+               }
+
+               ( *ppxSocket )->u.xTCP.ucPeerWinScaleFactor = ( *ppucPtr )[ 2 ];
+               ( *ppxSocket )->u.xTCP.bits.bWinScaling = pdTRUE_UNSIGNED;
+               ( *ppucPtr ) += TCP_OPT_WSOPT_LEN;
+       }
+#endif /* ipconfigUSE_TCP_WIN */
+       else if( ( *ppucPtr )[ 0 ] == TCP_OPT_MSS )
+       {
+               /* Confirm that the option fits in the remaining buffer space. */
+               if( ( xRemainingOptionsBytes < TCP_OPT_MSS_LEN )|| ( ( *ppucPtr )[ 1 ] != TCP_OPT_MSS_LEN ) )
+               {
+                       return pdFALSE;
+               }
+
+               /* An MSS option with the correct option length.  FreeRTOS_htons()
+               is not needed here because usChar2u16() already returns a host
+               endian number. */
+               uxNewMSS = usChar2u16( ( *ppucPtr ) + 2 );
+
+               if( ( *ppxSocket )->u.xTCP.usInitMSS != uxNewMSS )
+               {
+                       /* Perform a basic check on the the new MSS. */
+                       if( uxNewMSS == 0 )
+                       {
+                               return pdFALSE;
+                       }
+
+                       FreeRTOS_debug_printf( ( "MSS change %u -> %lu\n", ( *ppxSocket )->u.xTCP.usInitMSS, uxNewMSS ) );
+               }
+
+               if( ( *ppxSocket )->u.xTCP.usInitMSS > uxNewMSS )
+               {
+                       /* our MSS was bigger than the MSS of the other party: adapt it. */
+                       ( *ppxSocket )->u.xTCP.bits.bMssChange = pdTRUE_UNSIGNED;
+                       if( ( ( *ppxTCPWindow ) != NULL ) && ( ( *ppxSocket )->u.xTCP.usCurMSS > uxNewMSS ) )
+                       {
+                               /* The peer advertises a smaller MSS than this socket was
+                               using.  Use that as well. */
+                               FreeRTOS_debug_printf( ( "Change mss %d => %lu\n", ( *ppxSocket )->u.xTCP.usCurMSS, uxNewMSS ) );
+                               ( *ppxSocket )->u.xTCP.usCurMSS = ( uint16_t ) uxNewMSS;
+                       }
+                       ( *ppxTCPWindow )->xSize.ulRxWindowLength = ( ( uint32_t ) uxNewMSS ) * ( ( *ppxTCPWindow )->xSize.ulRxWindowLength / ( ( uint32_t ) uxNewMSS ) );
+                       ( *ppxTCPWindow )->usMSSInit = ( uint16_t ) uxNewMSS;
+                       ( *ppxTCPWindow )->usMSS = ( uint16_t ) uxNewMSS;
+                       ( *ppxSocket )->u.xTCP.usInitMSS = ( uint16_t ) uxNewMSS;
+                       ( *ppxSocket )->u.xTCP.usCurMSS = ( uint16_t ) uxNewMSS;
+               }
+
+               #if( ipconfigUSE_TCP_WIN != 1 )
+                       /* Without scaled windows, MSS is the only interesting option. */
+                       return pdFALSE;
+               #else
+                       /* Or else we continue to check another option: selective ACK. */
+                       ( *ppucPtr ) += TCP_OPT_MSS_LEN;
+               #endif  /* ipconfigUSE_TCP_WIN != 1 */
+       }
+       else
+       {
+               /* All other options have a length field, so that we easily
+               can skip past them. */
+               ucLen = ( *ppucPtr )[ 1 ];
+               if( ( ucLen < 2 ) || ( ucLen > xRemainingOptionsBytes ) )
+               {
+                       /* If the length field is too small or too big, the options are
+                        * malformed, don't process them further.
+                        */
+                       return pdFALSE;
+               }
+
+               #if( ipconfigUSE_TCP_WIN == 1 )
+               {
+                       /* Selective ACK: the peer has received a packet but it is missing
+                        * earlier packets. At least this packet does not need retransmission
+                        * anymore. ulTCPWindowTxSack( ) takes care of this administration.
+                        */
+                       if( ( *ppucPtr )[0] == TCP_OPT_SACK_A )
+                       {
+                               ucLen -= 2;
+                               ( *ppucPtr ) += 2;
+
+                               while( ucLen >= 8 )
+                               {
+                                       prvSkipPastRemainingOptions( ppucPtr, ppxSocket, &ucLen );
+                               }
+                               /* ucLen should be 0 by now. */
+                       }
+               }
+               #endif  /* ipconfigUSE_TCP_WIN == 1 */
+
+               ( *ppucPtr ) += ucLen;
+       }
+       return pdTRUE;
+}
+
+/*-----------------------------------------------------------*/
+
+static void prvSkipPastRemainingOptions( const unsigned char ** const ppucPtr, FreeRTOS_Socket_t ** const ppxSocket, unsigned char * const pucLen )
+{
+uint32_t ulFirst = ulChar2u32( ( *ppucPtr ) );
+uint32_t ulLast  = ulChar2u32( ( *ppucPtr ) + 4 );
+uint32_t ulCount = ulTCPWindowTxSack( &( *ppxSocket )->u.xTCP.xTCPWindow, ulFirst, ulLast );
+       /* ulTCPWindowTxSack( ) returns the number of bytes which have been acked
+        * starting from the head position.  Advance the tail pointer in txStream.
+        */
+       if( ( ( *ppxSocket )->u.xTCP.txStream  != NULL ) && ( ulCount > 0 ) )
+       {
+               /* Just advancing the tail index, 'ulCount' bytes have been confirmed. */
+               uxStreamBufferGet( ( *ppxSocket )->u.xTCP.txStream, 0, NULL, ( size_t ) ulCount, pdFALSE );
+               ( *ppxSocket )->xEventBits |= eSOCKET_SEND;
+
+               #if ipconfigSUPPORT_SELECT_FUNCTION == 1
+               {
+                       if( ( *ppxSocket )->xSelectBits & eSELECT_WRITE )
+                       {
+                               /* The field 'xEventBits' is used to store regular socket events
+                                * (at most 8), as well as 'select events', which will be left-shifted.
+                                */
+                               ( *ppxSocket )->xEventBits |= ( eSELECT_WRITE << SOCKET_EVENT_BIT_COUNT );
+                       }
+               }
+               #endif
+
+               /* In case the socket owner has installed an OnSent handler, call it now.
+                */
+               #if( ipconfigUSE_CALLBACKS == 1 )
+               {
+                       if( ipconfigIS_VALID_PROG_ADDRESS( ( *ppxSocket )->u.xTCP.pxHandleSent ) )
+                       {
+                               ( *ppxSocket )->u.xTCP.pxHandleSent( (Socket_t )( *ppxSocket ), ulCount );
+                       }
+               }
+               #endif /* ipconfigUSE_CALLBACKS == 1  */
+       }
+       ( *ppucPtr ) += 8;
+       ( *pucLen ) -= 8;
+}
+
+/*-----------------------------------------------------------*/
+
+#if( ipconfigUSE_TCP_WIN != 0 )
+
+       static uint8_t prvWinScaleFactor( FreeRTOS_Socket_t *pxSocket )
+       {
+       size_t uxWinSize;
+       uint8_t ucFactor;
+
+               /* 'xTCP.uxRxWinSize' is the size of the reception window in units of MSS. */
+               uxWinSize = pxSocket->u.xTCP.uxRxWinSize * ( size_t ) pxSocket->u.xTCP.usInitMSS;
+               ucFactor = 0u;
+               while( uxWinSize > 0xfffful )
+               {
+                       /* Divide by two and increase the binary factor by 1. */
+                       uxWinSize >>= 1;
+                       ucFactor++;
+               }
+
+               FreeRTOS_debug_printf( ( "prvWinScaleFactor: uxRxWinSize %lu MSS %lu Factor %u\n",
+                       pxSocket->u.xTCP.uxRxWinSize,
+                       pxSocket->u.xTCP.usInitMSS,
+                       ucFactor ) );
+
+               return ucFactor;
+       }
+
+#endif
+/*-----------------------------------------------------------*/
+
+/*
+ * When opening a TCP connection, while SYN's are being sent, the  parties may
+ * communicate what MSS (Maximum Segment Size) they intend to use.   MSS is the
+ * nett size of the payload, always smaller than MTU.
+*/
+static UBaseType_t prvSetSynAckOptions( FreeRTOS_Socket_t *pxSocket, TCPPacket_t * pxTCPPacket )
+{
+TCPHeader_t *pxTCPHeader = &pxTCPPacket->xTCPHeader;
+uint16_t usMSS = pxSocket->u.xTCP.usInitMSS;
+UBaseType_t uxOptionsLength;
+
+       /* We send out the TCP Maximum Segment Size option with our SYN[+ACK]. */
+
+       pxTCPHeader->ucOptdata[ 0 ] = ( uint8_t ) TCP_OPT_MSS;
+       pxTCPHeader->ucOptdata[ 1 ] = ( uint8_t ) TCP_OPT_MSS_LEN;
+       pxTCPHeader->ucOptdata[ 2 ] = ( uint8_t ) ( usMSS >> 8 );
+       pxTCPHeader->ucOptdata[ 3 ] = ( uint8_t ) ( usMSS & 0xffu );
+
+       #if( ipconfigUSE_TCP_WIN != 0 )
+       {
+               pxSocket->u.xTCP.ucMyWinScaleFactor = prvWinScaleFactor( pxSocket );
+
+               pxTCPHeader->ucOptdata[ 4 ] = TCP_OPT_NOOP;
+               pxTCPHeader->ucOptdata[ 5 ] = ( uint8_t ) ( TCP_OPT_WSOPT );
+               pxTCPHeader->ucOptdata[ 6 ] = ( uint8_t ) ( TCP_OPT_WSOPT_LEN );
+               pxTCPHeader->ucOptdata[ 7 ] = ( uint8_t ) pxSocket->u.xTCP.ucMyWinScaleFactor;
+               uxOptionsLength = 8u;
+       }
+       #else
+       {
+               uxOptionsLength = 4u;
+       }
+       #endif
+
+       #if( ipconfigUSE_TCP_WIN == 0 )
+       {
+               return uxOptionsLength;
+       }
+       #else
+       {
+               pxTCPHeader->ucOptdata[ uxOptionsLength + 0 ] = 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 + 3 ] = 2;      /* 2: length of this option. */
+               uxOptionsLength += 4u;
+
+               return uxOptionsLength; /* bytes, not words. */
+       }
+       #endif  /* ipconfigUSE_TCP_WIN == 0 */
+}
+
+/*
+ * For anti-hanging protection and TCP keep-alive messages.  Called in two
+ * places: after receiving a packet and after a state change.  The socket's
+ * alive timer may be reset.
+ */
+static void prvTCPTouchSocket( FreeRTOS_Socket_t *pxSocket )
+{
+       #if( ipconfigTCP_HANG_PROTECTION == 1 )
+       {
+               pxSocket->u.xTCP.xLastActTime = xTaskGetTickCount( );
+       }
+       #endif
+
+       #if( ipconfigTCP_KEEP_ALIVE == 1 )
+       {
+               pxSocket->u.xTCP.bits.bWaitKeepAlive = pdFALSE_UNSIGNED;
+               pxSocket->u.xTCP.bits.bSendKeepAlive = pdFALSE_UNSIGNED;
+               pxSocket->u.xTCP.ucKeepRepCount = 0u;
+               pxSocket->u.xTCP.xLastAliveTime = xTaskGetTickCount();
+       }
+       #endif
+
+       ( void ) pxSocket;
+}
+/*-----------------------------------------------------------*/
+
+/*
+ * Changing to a new state. Centralised here to do specific actions such as
+ * resetting the alive timer, calling the user's OnConnect handler to notify
+ * that a socket has got (dis)connected, and setting bit to unblock a call to
+ * FreeRTOS_select()
+ */
+void vTCPStateChange( FreeRTOS_Socket_t *pxSocket, enum eTCP_STATE eTCPState )
+{
+FreeRTOS_Socket_t *xParent = NULL;
+BaseType_t bBefore = ( BaseType_t ) NOW_CONNECTED( pxSocket->u.xTCP.ucTCPState );      /* Was it connected ? */
+BaseType_t bAfter  = ( BaseType_t ) NOW_CONNECTED( eTCPState );                                                /* Is it connected now ? */
+#if( ipconfigHAS_DEBUG_PRINTF != 0 )
+       BaseType_t xPreviousState = ( BaseType_t ) pxSocket->u.xTCP.ucTCPState;
+#endif
+#if( ipconfigUSE_CALLBACKS == 1 )
+       FreeRTOS_Socket_t *xConnected = NULL;
+#endif
+
+       /* Has the connected status changed? */
+       if( bBefore != bAfter )
+       {
+               /* Is the socket connected now ? */
+               if( bAfter != pdFALSE )
+               {
+                       /* if bPassQueued is true, this socket is an orphan until it gets connected. */
+                       if( pxSocket->u.xTCP.bits.bPassQueued != pdFALSE_UNSIGNED )
+                       {
+                               /* Now that it is connected, find it's parent. */
+                               if( pxSocket->u.xTCP.bits.bReuseSocket != pdFALSE_UNSIGNED )
+                               {
+                                       xParent = pxSocket;
+                               }
+                               else
+                               {
+                                       xParent = pxSocket->u.xTCP.pxPeerSocket;
+                                       configASSERT( xParent != NULL );
+                               }
+                               if( xParent != NULL )
+                               {
+                                       if( xParent->u.xTCP.pxPeerSocket == NULL )
+                                       {
+                                               xParent->u.xTCP.pxPeerSocket = pxSocket;
+                                       }
+
+                                       xParent->xEventBits |= eSOCKET_ACCEPT;
+
+                                       #if( ipconfigSUPPORT_SELECT_FUNCTION == 1 )
+                                       {
+                                               /* Library support FreeRTOS_select().  Receiving a new
+                                               connection is being translated as a READ event. */
+                                               if( ( xParent->xSelectBits & eSELECT_READ ) != 0 )
+                                               {
+                                                       xParent->xEventBits |= ( eSELECT_READ << SOCKET_EVENT_BIT_COUNT );
+                                               }
+                                       }
+                                       #endif
+
+                                       #if( ipconfigUSE_CALLBACKS == 1 )
+                                       {
+                                               if( ( ipconfigIS_VALID_PROG_ADDRESS( xParent->u.xTCP.pxHandleConnected ) != pdFALSE ) &&
+                                                       ( xParent->u.xTCP.bits.bReuseSocket == pdFALSE_UNSIGNED ) )
+                                               {
+                                                       /* The listening socket does not become connected itself, in stead
+                                                       a child socket is created.
+                                                       Postpone a call the OnConnect event until the end of this function. */
+                                                       xConnected = xParent;
+                                               }
+                                       }
+                                       #endif
+                               }
+
+                               /* Don't need to access the parent socket anymore, so the
+                               reference 'pxPeerSocket' may be cleared. */
+                               pxSocket->u.xTCP.pxPeerSocket = NULL;
+                               pxSocket->u.xTCP.bits.bPassQueued = pdFALSE_UNSIGNED;
+
+                               /* When true, this socket may be returned in a call to accept(). */
+                               pxSocket->u.xTCP.bits.bPassAccept = pdTRUE_UNSIGNED;
+                       }
+                       else
+                       {
+                               pxSocket->xEventBits |= eSOCKET_CONNECT;
+
+                               #if( ipconfigSUPPORT_SELECT_FUNCTION == 1 )
+                               {
+                                       if( pxSocket->xSelectBits & eSELECT_WRITE )
+                                       {
+                                               pxSocket->xEventBits |= ( eSELECT_WRITE << SOCKET_EVENT_BIT_COUNT );
+                                       }
+                               }
+                               #endif
+                       }
+               }
+               else  /* bAfter == pdFALSE, connection is closed. */
+               {
+                       /* Notify/wake-up the socket-owner by setting a semaphore. */
+                       pxSocket->xEventBits |= eSOCKET_CLOSED;
+
+                       #if( ipconfigSUPPORT_SELECT_FUNCTION == 1 )
+                       {
+                               if( ( pxSocket->xSelectBits & eSELECT_EXCEPT ) != 0 )
+                               {
+                                       pxSocket->xEventBits |= ( eSELECT_EXCEPT << SOCKET_EVENT_BIT_COUNT );
+                               }
+                       }
+                       #endif
+               }
+               #if( ipconfigUSE_CALLBACKS == 1 )
+               {
+                       if( ( ipconfigIS_VALID_PROG_ADDRESS( pxSocket->u.xTCP.pxHandleConnected ) != pdFALSE ) && ( xConnected == NULL ) )
+                       {
+                               /* The 'connected' state has changed, call the user handler. */
+                               xConnected = pxSocket;
+                       }
+               }
+               #endif /* ipconfigUSE_CALLBACKS */
+
+               if( prvTCPSocketIsActive( ( UBaseType_t ) pxSocket->u.xTCP.ucTCPState ) == pdFALSE )
+               {
+                       /* Now the socket isn't in an active state anymore so it
+                       won't need further attention of the IP-task.
+                       Setting time-out to zero means that the socket won't get checked during
+                       timer events. */
+                       pxSocket->u.xTCP.usTimeout = 0u;
+               }
+       }
+       else
+       {
+               if( eTCPState == eCLOSED )
+               {
+                       /* Socket goes to status eCLOSED because of a RST.
+                       When nobody owns the socket yet, delete it. */
+                       if( ( pxSocket->u.xTCP.bits.bPassQueued != pdFALSE_UNSIGNED ) ||
+                               ( pxSocket->u.xTCP.bits.bPassAccept != pdFALSE_UNSIGNED ) )
+                       {
+                               FreeRTOS_debug_printf( ( "vTCPStateChange: Closing socket\n" ) );
+                               if( pxSocket->u.xTCP.bits.bReuseSocket == pdFALSE_UNSIGNED )
+                               {
+                                       FreeRTOS_closesocket( pxSocket );
+                               }
+                       }
+               }
+       }
+
+       /* Fill in the new state. */
+       pxSocket->u.xTCP.ucTCPState = ( uint8_t ) eTCPState;
+
+       /* touch the alive timers because moving to another state. */
+       prvTCPTouchSocket( pxSocket );
+
+       #if( ipconfigHAS_DEBUG_PRINTF == 1 )
+       {
+       if( ( xTCPWindowLoggingLevel >= 0 ) && ( ipconfigTCP_MAY_LOG_PORT( pxSocket->usLocalPort ) != pdFALSE ) )
+               FreeRTOS_debug_printf( ( "Socket %d -> %lxip:%u State %s->%s\n",
+                       pxSocket->usLocalPort,
+                       pxSocket->u.xTCP.ulRemoteIP,
+                       pxSocket->u.xTCP.usRemotePort,
+                       FreeRTOS_GetTCPStateName( ( UBaseType_t ) xPreviousState ),
+                       FreeRTOS_GetTCPStateName( ( UBaseType_t ) eTCPState ) ) );
+       }
+       #endif /* ipconfigHAS_DEBUG_PRINTF */
+
+       #if( ipconfigUSE_CALLBACKS == 1 )
+       {
+               if( xConnected != NULL )
+               {
+                       /* The 'connected' state has changed, call the OnConnect handler of the parent. */
+                       xConnected->u.xTCP.pxHandleConnected( ( Socket_t ) xConnected, bAfter );
+               }
+       }
+       #endif
+       if( xParent != NULL )
+       {
+               vSocketWakeUpUser( xParent );
+       }
+}
+/*-----------------------------------------------------------*/
+
+static NetworkBufferDescriptor_t *prvTCPBufferResize( FreeRTOS_Socket_t *pxSocket, NetworkBufferDescriptor_t *pxNetworkBuffer,
+       int32_t lDataLen, UBaseType_t uxOptionsLength )
+{
+NetworkBufferDescriptor_t *pxReturn;
+int32_t lNeeded;
+BaseType_t xResize;
+
+       if( xBufferAllocFixedSize != pdFALSE )
+       {
+               /* Network buffers are created with a fixed size and can hold the largest
+               MTU. */
+               lNeeded = ( int32_t ) ipTOTAL_ETHERNET_FRAME_SIZE;
+               /* and therefore, the buffer won't be too small.
+               Only ask for a new network buffer in case none was supplied. */
+               xResize = ( pxNetworkBuffer == NULL );
+       }
+       else
+       {
+               /* Network buffers are created with a variable size. See if it must
+               grow. */
+               lNeeded = FreeRTOS_max_int32( ( int32_t ) sizeof( pxSocket->u.xTCP.xPacket.u.ucLastPacket ),
+                       ( 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
+               created.  Otherwise, test 'xDataLength' of the provided buffer. */
+               xResize = ( pxNetworkBuffer == NULL ) || ( pxNetworkBuffer->xDataLength < (size_t)lNeeded );
+       }
+
+       if( xResize != pdFALSE )
+       {
+               /* The caller didn't provide a network buffer or the provided buffer is
+               too small.  As we must send-out a data packet, a buffer will be created
+               here. */
+               pxReturn = pxGetNetworkBufferWithDescriptor( ( uint32_t ) lNeeded, 0u );
+
+               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. */
+                       if( pxNetworkBuffer )
+                       {
+                               /* Either from the previous buffer... */
+                               memcpy( pxReturn->pucEthernetBuffer, pxNetworkBuffer->pucEthernetBuffer, pxNetworkBuffer->xDataLength );
+
+                               /* ...and release it. */
+                               vReleaseNetworkBufferAndDescriptor( pxNetworkBuffer );
+                       }
+                       else
+                       {
+                               /* Or from the socket field 'xTCP.xPacket'. */
+                               memcpy( pxReturn->pucEthernetBuffer, pxSocket->u.xTCP.xPacket.u.ucLastPacket, sizeof( pxSocket->u.xTCP.xPacket.u.ucLastPacket ) );
+                       }
+               }
+       }
+       else
+       {
+               /* xResize is false, the network buffer provided was big enough. */
+               pxReturn = pxNetworkBuffer;
+
+               /* Thanks to Andrey Ivanov from swissEmbedded for reporting that the
+               xDataLength member must get the correct length too! */
+               pxNetworkBuffer->xDataLength = ( size_t ) ( ipSIZE_OF_ETH_HEADER + ipSIZE_OF_IPv4_HEADER + ipSIZE_OF_TCP_HEADER + uxOptionsLength ) + ( size_t ) lDataLen;
+       }
+
+       return pxReturn;
+}
+/*-----------------------------------------------------------*/
+
+/*
+ * Prepare an outgoing message, in case anything has to be sent.
+ */
+static int32_t prvTCPPrepareSend( FreeRTOS_Socket_t *pxSocket, NetworkBufferDescriptor_t **ppxNetworkBuffer, UBaseType_t uxOptionsLength )
+{
+int32_t lDataLen;
+uint8_t *pucEthernetBuffer, *pucSendData;
+TCPPacket_t *pxTCPPacket;
+size_t uxOffset;
+uint32_t ulDataGot, ulDistance;
+TCPWindow_t *pxTCPWindow;
+NetworkBufferDescriptor_t *pxNewBuffer;
+int32_t lStreamPos;
+
+       if( ( *ppxNetworkBuffer ) != NULL )
+       {
+               /* A network buffer descriptor was already supplied */
+               pucEthernetBuffer = ( *ppxNetworkBuffer )->pucEthernetBuffer;
+       }
+       else
+       {
+               /* For now let it point to the last packet header */
+               pucEthernetBuffer = pxSocket->u.xTCP.xPacket.u.ucLastPacket;
+       }
+
+       pxTCPPacket = ( TCPPacket_t * ) ( pucEthernetBuffer );
+       pxTCPWindow = &pxSocket->u.xTCP.xTCPWindow;
+       lDataLen = 0;
+       lStreamPos = 0;
+       pxTCPPacket->xTCPHeader.ucTCPFlags |= ipTCP_FLAG_ACK;
+
+       if( pxSocket->u.xTCP.txStream != NULL )
+       {
+               /* ulTCPWindowTxGet will return the amount of data which may be sent
+               along with the position in the txStream.
+               Why check for MSS > 1 ?
+               Because some TCP-stacks (like uIP) use it for flow-control. */
+               if( pxSocket->u.xTCP.usCurMSS > 1u )
+               {
+                       lDataLen = ( int32_t ) ulTCPWindowTxGet( pxTCPWindow, pxSocket->u.xTCP.ulWindowSize, &lStreamPos );
+               }
+
+               if( lDataLen > 0 )
+               {
+                       /* Check if the current network buffer is big enough, if not,
+                       resize it. */
+                       pxNewBuffer = prvTCPBufferResize( pxSocket, *ppxNetworkBuffer, lDataLen, uxOptionsLength );
+
+                       if( pxNewBuffer != NULL )
+                       {
+                               *ppxNetworkBuffer = pxNewBuffer;
+                               pucEthernetBuffer = pxNewBuffer->pucEthernetBuffer;
+                               pxTCPPacket = ( TCPPacket_t * ) ( pucEthernetBuffer );
+
+                               pucSendData = pucEthernetBuffer + ipSIZE_OF_ETH_HEADER + ipSIZE_OF_IPv4_HEADER + ipSIZE_OF_TCP_HEADER + uxOptionsLength;
+
+                               /* Translate the position in txStream to an offset from the tail
+                               marker. */
+                               uxOffset = uxStreamBufferDistance( pxSocket->u.xTCP.txStream, pxSocket->u.xTCP.txStream->uxTail, ( size_t ) lStreamPos );
+
+                               /* Here data is copied from the txStream in 'peek' mode.  Only
+                               when the packets are acked, the tail marker will be updated. */
+                               ulDataGot = ( uint32_t ) uxStreamBufferGet( pxSocket->u.xTCP.txStream, uxOffset, pucSendData, ( size_t ) lDataLen, pdTRUE );
+
+                               #if( ipconfigHAS_DEBUG_PRINTF != 0 )
+                               {
+                                       if( ulDataGot != ( uint32_t ) lDataLen )
+                                       {
+                                               FreeRTOS_debug_printf( ( "uxStreamBufferGet: pos %lu offs %lu only %lu != %lu\n",
+                                                       lStreamPos, uxOffset, ulDataGot, lDataLen ) );
+                                       }
+                               }
+                               #endif
+
+                               /* If the owner of the socket requests a closure, add the FIN
+                               flag to the last packet. */
+                               if( ( pxSocket->u.xTCP.bits.bCloseRequested != pdFALSE_UNSIGNED ) && ( pxSocket->u.xTCP.bits.bFinSent == pdFALSE_UNSIGNED ) )
+                               {
+                                       ulDistance = ( uint32_t ) uxStreamBufferDistance( pxSocket->u.xTCP.txStream, ( size_t ) lStreamPos, pxSocket->u.xTCP.txStream->uxHead );
+
+                                       if( ulDistance == ulDataGot )
+                                       {
+                                               #if (ipconfigHAS_DEBUG_PRINTF == 1)
+                                               {
+                                               /* the order of volatile accesses is undefined
+                                                       so such workaround */
+                                                       size_t uxHead = pxSocket->u.xTCP.txStream->uxHead;
+                                                       size_t uxMid = pxSocket->u.xTCP.txStream->uxMid;
+                                                       size_t uxTail = pxSocket->u.xTCP.txStream->uxTail;
+
+                                                       FreeRTOS_debug_printf( ( "CheckClose %lu <= %lu (%lu <= %lu <= %lu)\n", ulDataGot, ulDistance,
+                                                               uxTail, uxMid, uxHead ) );
+                                               }
+                                               #endif
+                                               /* Although the socket sends a FIN, it will stay in
+                                               ESTABLISHED until all current data has been received or
+                                               delivered. */
+                                               pxTCPPacket->xTCPHeader.ucTCPFlags |= ipTCP_FLAG_FIN;
+                                               pxTCPWindow->tx.ulFINSequenceNumber = pxTCPWindow->ulOurSequenceNumber + ( uint32_t ) lDataLen;
+                                               pxSocket->u.xTCP.bits.bFinSent = pdTRUE_UNSIGNED;
+                                       }
+                               }
+                       }
+                       else
+                       {
+                               lDataLen = -1;
+                       }
+               }
+       }
+
+       if( ( lDataLen >= 0 ) && ( pxSocket->u.xTCP.ucTCPState == eESTABLISHED ) )
+       {
+               /* See if the socket owner wants to shutdown this connection. */
+               if( ( pxSocket->u.xTCP.bits.bUserShutdown != pdFALSE_UNSIGNED ) &&
+                       ( xTCPWindowTxDone( pxTCPWindow ) != pdFALSE ) )
+               {
+                       pxSocket->u.xTCP.bits.bUserShutdown = pdFALSE_UNSIGNED;
+                       pxTCPPacket->xTCPHeader.ucTCPFlags |= ipTCP_FLAG_FIN;
+                       pxSocket->u.xTCP.bits.bFinSent = pdTRUE_UNSIGNED;
+                       pxSocket->u.xTCP.bits.bWinChange = pdTRUE_UNSIGNED;
+                       pxTCPWindow->tx.ulFINSequenceNumber = pxTCPWindow->tx.ulCurrentSequenceNumber;
+                       vTCPStateChange( pxSocket, eFIN_WAIT_1 );
+               }
+
+               #if( ipconfigTCP_KEEP_ALIVE != 0 )
+               {
+                       if( pxSocket->u.xTCP.ucKeepRepCount > 3u )
+                       {
+                               FreeRTOS_debug_printf( ( "keep-alive: giving up %lxip:%u\n",
+                                       pxSocket->u.xTCP.ulRemoteIP,                    /* IP address of remote machine. */
+                                       pxSocket->u.xTCP.usRemotePort ) );      /* Port on remote machine. */
+                               vTCPStateChange( pxSocket, eCLOSE_WAIT );
+                               lDataLen = -1;
+                       }
+                       if( ( lDataLen == 0 ) && ( pxSocket->u.xTCP.bits.bWinChange == pdFALSE_UNSIGNED ) )
+                       {
+                               /* If there is no data to be sent, and no window-update message,
+                               we might want to send a keep-alive message. */
+                               TickType_t xAge = xTaskGetTickCount( ) - pxSocket->u.xTCP.xLastAliveTime;
+                               TickType_t xMax;
+                               xMax = ( ( TickType_t ) ipconfigTCP_KEEP_ALIVE_INTERVAL * configTICK_RATE_HZ );
+                               if( pxSocket->u.xTCP.ucKeepRepCount )
+                               {
+                                       xMax = ( 3u * configTICK_RATE_HZ );
+                               }
+                               if( xAge > xMax )
+                               {
+                                       pxSocket->u.xTCP.xLastAliveTime = xTaskGetTickCount( );
+                                       if( xTCPWindowLoggingLevel )
+                                               FreeRTOS_debug_printf( ( "keep-alive: %lxip:%u count %u\n",
+                                                       pxSocket->u.xTCP.ulRemoteIP,
+                                                       pxSocket->u.xTCP.usRemotePort,
+                                                       pxSocket->u.xTCP.ucKeepRepCount ) );
+                                       pxSocket->u.xTCP.bits.bSendKeepAlive = pdTRUE_UNSIGNED;
+                                       pxSocket->u.xTCP.usTimeout = ( ( uint16_t ) pdMS_TO_TICKS( 2500 ) );
+                                       pxSocket->u.xTCP.ucKeepRepCount++;
+                               }
+                       }
+               }
+               #endif /* ipconfigTCP_KEEP_ALIVE */
+       }
+
+       /* Anything to send, a change of the advertised window size, or maybe send a
+       keep-alive message? */
+       if( ( lDataLen > 0 ) ||
+               ( pxSocket->u.xTCP.bits.bWinChange != pdFALSE_UNSIGNED ) ||
+               ( pxSocket->u.xTCP.bits.bSendKeepAlive != pdFALSE_UNSIGNED ) )
+       {
+               pxTCPPacket->xTCPHeader.ucTCPFlags &= ( ( uint8_t ) ~ipTCP_FLAG_PSH );
+               pxTCPPacket->xTCPHeader.ucTCPOffset = ( uint8_t )( ( ipSIZE_OF_TCP_HEADER + uxOptionsLength ) << 2 );
+
+               pxTCPPacket->xTCPHeader.ucTCPFlags |= ( uint8_t ) ipTCP_FLAG_ACK;
+
+               if( lDataLen != 0l )
+               {
+                       pxTCPPacket->xTCPHeader.ucTCPFlags |= ( uint8_t ) ipTCP_FLAG_PSH;
+               }
+
+               lDataLen += ( int32_t ) ( ipSIZE_OF_IPv4_HEADER + ipSIZE_OF_TCP_HEADER + uxOptionsLength );
+       }
+
+       return lDataLen;
+}
+/*-----------------------------------------------------------*/
+
+/*
+ * Calculate after how much time this socket needs to be checked again.
+ */
+static TickType_t prvTCPNextTimeout ( FreeRTOS_Socket_t *pxSocket )
+{
+TickType_t ulDelayMs = ( TickType_t ) tcpMAXIMUM_TCP_WAKEUP_TIME_MS;
+
+       if( pxSocket->u.xTCP.ucTCPState == eCONNECT_SYN )
+       {
+               /* The socket is actively connecting to a peer. */
+               if( pxSocket->u.xTCP.bits.bConnPrepared )
+               {
+                       /* Ethernet address has been found, use progressive timeout for
+                       active connect(). */
+                       if( pxSocket->u.xTCP.ucRepCount < 3u )
+                       {
+                               ulDelayMs = ( 3000UL << ( pxSocket->u.xTCP.ucRepCount - 1u ) );
+                       }
+                       else
+                       {
+                               ulDelayMs = 11000UL;
+                       }
+               }
+               else
+               {
+                       /* Still in the ARP phase: check every half second. */
+                       ulDelayMs = 500UL;
+               }
+
+               FreeRTOS_debug_printf( ( "Connect[%lxip:%u]: next timeout %u: %lu ms\n",
+                       pxSocket->u.xTCP.ulRemoteIP, pxSocket->u.xTCP.usRemotePort,
+                       pxSocket->u.xTCP.ucRepCount, ulDelayMs ) );
+               pxSocket->u.xTCP.usTimeout = ( uint16_t )pdMS_TO_MIN_TICKS( ulDelayMs );
+       }
+       else if( pxSocket->u.xTCP.usTimeout == 0u )
+       {
+               /* Let the sliding window mechanism decide what time-out is appropriate. */
+               BaseType_t xResult = xTCPWindowTxHasData( &pxSocket->u.xTCP.xTCPWindow, pxSocket->u.xTCP.ulWindowSize, &ulDelayMs );
+               if( ulDelayMs == 0u )
+               {
+                       if( xResult != ( BaseType_t )0 )
+                       {
+                               ulDelayMs = 1UL;
+                       }
+                       else
+                       {
+                               ulDelayMs = tcpMAXIMUM_TCP_WAKEUP_TIME_MS;
+                       }
+               }
+               else
+               {
+                       /* ulDelayMs contains the time to wait before a re-transmission. */
+               }
+               pxSocket->u.xTCP.usTimeout = ( uint16_t )pdMS_TO_MIN_TICKS( ulDelayMs );
+       }
+       else
+       {
+               /* field '.usTimeout' has already been set (by the
+               keep-alive/delayed-ACK mechanism). */
+       }
+
+       /* Return the number of clock ticks before the timer expires. */
+       return ( TickType_t ) pxSocket->u.xTCP.usTimeout;
+}
+/*-----------------------------------------------------------*/
+
+static void prvTCPAddTxData( FreeRTOS_Socket_t *pxSocket )
+{
+int32_t lCount, lLength;
+
+       /* A txStream has been created already, see if the socket has new data for
+       the sliding window.
+
+       uxStreamBufferMidSpace() returns the distance between rxHead and rxMid.  It contains new
+       Tx data which has not been passed to the sliding window yet.  The oldest
+       data not-yet-confirmed can be found at rxTail. */
+       lLength = ( int32_t ) uxStreamBufferMidSpace( pxSocket->u.xTCP.txStream );
+
+       if( lLength > 0 )
+       {
+               /* All data between txMid and rxHead will now be passed to the sliding
+               window manager, so it can start transmitting them.
+
+               Hand over the new data to the sliding window handler.  It will be
+               split-up in chunks of 1460 bytes each (or less, depending on
+               ipconfigTCP_MSS). */
+               lCount = lTCPWindowTxAdd(       &pxSocket->u.xTCP.xTCPWindow,
+                                                               ( uint32_t ) lLength,
+                                                               ( int32_t ) pxSocket->u.xTCP.txStream->uxMid,
+                                                               ( int32_t ) pxSocket->u.xTCP.txStream->LENGTH );
+
+               /* Move the rxMid pointer forward up to rxHead. */
+               if( lCount > 0 )
+               {
+                       vStreamBufferMoveMid( pxSocket->u.xTCP.txStream, ( size_t ) lCount );
+               }
+       }
+}
+/*-----------------------------------------------------------*/
+
+/*
+ * prvTCPHandleFin() will be called to handle socket closure
+ * The Closure starts when either a FIN has been received and accepted,
+ * Or when the socket has sent a FIN flag to the peer
+ * Before being called, it has been checked that both reception and transmission
+ * are complete.
+ */
+static BaseType_t prvTCPHandleFin( FreeRTOS_Socket_t *pxSocket, NetworkBufferDescriptor_t *pxNetworkBuffer )
+{
+TCPPacket_t *pxTCPPacket = ( TCPPacket_t * ) ( pxNetworkBuffer->pucEthernetBuffer );
+TCPHeader_t *pxTCPHeader = &pxTCPPacket->xTCPHeader;
+uint8_t ucTCPFlags = pxTCPHeader->ucTCPFlags;
+TCPWindow_t *pxTCPWindow = &pxSocket->u.xTCP.xTCPWindow;
+BaseType_t xSendLength = 0;
+uint32_t ulAckNr = FreeRTOS_ntohl( pxTCPHeader->ulAckNr );
+
+       if( ( ucTCPFlags & ipTCP_FLAG_FIN ) != 0u )
+       {
+               pxTCPWindow->rx.ulCurrentSequenceNumber = pxTCPWindow->rx.ulFINSequenceNumber + 1u;
+       }
+       if( pxSocket->u.xTCP.bits.bFinSent == pdFALSE_UNSIGNED )
+       {
+               /* We haven't yet replied with a FIN, do so now. */
+               pxTCPWindow->tx.ulFINSequenceNumber = pxTCPWindow->tx.ulCurrentSequenceNumber;
+               pxSocket->u.xTCP.bits.bFinSent = pdTRUE_UNSIGNED;
+       }
+       else
+       {
+               /* We did send a FIN already, see if it's ACK'd. */
+               if( ulAckNr == pxTCPWindow->tx.ulFINSequenceNumber + 1u )
+               {
+                       pxSocket->u.xTCP.bits.bFinAcked = pdTRUE_UNSIGNED;
+               }
+       }
+
+       if( pxSocket->u.xTCP.bits.bFinAcked == pdFALSE_UNSIGNED )
+       {
+               pxTCPWindow->tx.ulCurrentSequenceNumber = pxTCPWindow->tx.ulFINSequenceNumber;
+               pxTCPHeader->ucTCPFlags = ipTCP_FLAG_ACK | ipTCP_FLAG_FIN;
+
+               /* And wait for the final ACK. */
+               vTCPStateChange( pxSocket, eLAST_ACK );
+       }
+       else
+       {
+               /* Our FIN has been ACK'd, the outgoing sequence number is now fixed. */
+               pxTCPWindow->tx.ulCurrentSequenceNumber = pxTCPWindow->tx.ulFINSequenceNumber + 1u;
+               if( pxSocket->u.xTCP.bits.bFinRecv == pdFALSE_UNSIGNED )
+               {
+                       /* We have sent out a FIN but the peer hasn't replied with a FIN
+                       yet. Do nothing for the moment. */
+                       pxTCPHeader->ucTCPFlags = 0u;
+               }
+               else
+               {
+                       if( pxSocket->u.xTCP.bits.bFinLast == pdFALSE_UNSIGNED )
+                       {
+                               /* This is the third of the three-way hand shake: the last
+                               ACK. */
+                               pxTCPHeader->ucTCPFlags = ipTCP_FLAG_ACK;
+                       }
+                       else
+                       {
+                               /* The other party started the closure, so we just wait for the
+                               last ACK. */
+                               pxTCPHeader->ucTCPFlags = 0u;
+                       }
+
+                       /* And wait for the user to close this socket. */
+                       vTCPStateChange( pxSocket, eCLOSE_WAIT );
+               }
+       }
+
+       pxTCPWindow->ulOurSequenceNumber = pxTCPWindow->tx.ulCurrentSequenceNumber;
+
+       if( pxTCPHeader->ucTCPFlags != 0u )
+       {
+               xSendLength = ( BaseType_t ) ( ipSIZE_OF_IPv4_HEADER + ipSIZE_OF_TCP_HEADER + pxTCPWindow->ucOptionLength );
+       }
+
+       pxTCPHeader->ucTCPOffset = ( uint8_t ) ( ( ipSIZE_OF_TCP_HEADER + pxTCPWindow->ucOptionLength ) << 2 );
+
+       if( xTCPWindowLoggingLevel != 0 )
+       {
+               FreeRTOS_debug_printf( ( "TCP: send FIN+ACK (ack %lu, cur/nxt %lu/%lu) ourSeqNr %lu | Rx %lu\n",
+                       ulAckNr - pxTCPWindow->tx.ulFirstSequenceNumber,
+                       pxTCPWindow->tx.ulCurrentSequenceNumber - pxTCPWindow->tx.ulFirstSequenceNumber,
+                       pxTCPWindow->ulNextTxSequenceNumber - pxTCPWindow->tx.ulFirstSequenceNumber,
+                       pxTCPWindow->ulOurSequenceNumber - pxTCPWindow->tx.ulFirstSequenceNumber,
+                       pxTCPWindow->rx.ulCurrentSequenceNumber - pxTCPWindow->rx.ulFirstSequenceNumber ) );
+       }
+
+       return xSendLength;
+}
+/*-----------------------------------------------------------*/
+
+/*
+ * prvCheckRxData(): called from prvTCPHandleState()
+ *
+ * The first thing that will be done is find the TCP payload data
+ * and check the length of this data.
+ */
+static BaseType_t prvCheckRxData( NetworkBufferDescriptor_t *pxNetworkBuffer, uint8_t **ppucRecvData )
+{
+TCPPacket_t *pxTCPPacket = ( TCPPacket_t * ) ( pxNetworkBuffer->pucEthernetBuffer );
+TCPHeader_t *pxTCPHeader = &( pxTCPPacket->xTCPHeader );
+int32_t lLength, lTCPHeaderLength, lReceiveLength, lUrgentLength;
+
+       /* Determine the length and the offset of the user-data sent to this
+       node.
+
+       The size of the TCP header is given in a multiple of 4-byte words (single
+       byte, needs no ntoh() translation).  A shift-right 2: is the same as
+       (offset >> 4) * 4. */
+       lTCPHeaderLength = ( BaseType_t ) ( ( pxTCPHeader->ucTCPOffset & VALID_BITS_IN_TCP_OFFSET_BYTE ) >> 2 );
+
+       /* Let pucRecvData point to the first byte received. */
+       *ppucRecvData = pxNetworkBuffer->pucEthernetBuffer + ipSIZE_OF_ETH_HEADER + ipSIZE_OF_IPv4_HEADER + lTCPHeaderLength;
+
+       /* Calculate lReceiveLength - the length of the TCP data received.  This is
+       equal to the total packet length minus:
+       ( LinkLayer length (14) + IP header length (20) + size of TCP header(20 +) ).*/
+       lReceiveLength = ( ( int32_t ) pxNetworkBuffer->xDataLength ) - ( int32_t ) ipSIZE_OF_ETH_HEADER;
+       lLength =  ( int32_t )FreeRTOS_htons( pxTCPPacket->xIPHeader.usLength );
+
+       if( lReceiveLength > lLength )
+       {
+               /* More bytes were received than the reported length, often because of
+               padding bytes at the end. */
+               lReceiveLength = lLength;
+       }
+
+       /* Subtract the size of the TCP and IP headers and the actual data size is
+       known. */
+       if( lReceiveLength > ( lTCPHeaderLength + ( int32_t ) ipSIZE_OF_IPv4_HEADER ) )
+       {
+               lReceiveLength -= ( lTCPHeaderLength + ( int32_t ) ipSIZE_OF_IPv4_HEADER );
+       }
+       else
+       {
+               lReceiveLength = 0;
+       }
+
+       /* Urgent Pointer:
+       This field communicates the current value of the urgent pointer as a
+       positive offset from the sequence number in this segment.  The urgent
+       pointer points to the sequence number of the octet following the urgent
+       data.  This field is only be interpreted in segments with the URG control
+       bit set. */
+       if( ( pxTCPHeader->ucTCPFlags & ipTCP_FLAG_URG ) != 0u )
+       {
+               /* Although we ignore the urgent data, we have to skip it. */
+               lUrgentLength = ( int32_t ) FreeRTOS_htons( pxTCPHeader->usUrgent );
+               *ppucRecvData += lUrgentLength;
+               lReceiveLength -= FreeRTOS_min_int32( lReceiveLength, lUrgentLength );
+       }
+
+       return ( BaseType_t ) lReceiveLength;
+}
+/*-----------------------------------------------------------*/
+
+/*
+ * prvStoreRxData(): called from prvTCPHandleState()
+ *
+ * The second thing is to do is check if the payload data may be accepted
+ * If so, they will be added to the reception queue.
+ */
+static BaseType_t prvStoreRxData( FreeRTOS_Socket_t *pxSocket, uint8_t *pucRecvData,
+       NetworkBufferDescriptor_t *pxNetworkBuffer, uint32_t ulReceiveLength )
+{
+TCPPacket_t *pxTCPPacket = ( TCPPacket_t * ) ( pxNetworkBuffer->pucEthernetBuffer );
+TCPHeader_t *pxTCPHeader = &pxTCPPacket->xTCPHeader;
+TCPWindow_t *pxTCPWindow = &pxSocket->u.xTCP.xTCPWindow;
+uint32_t ulSequenceNumber, ulSpace;
+int32_t lOffset, lStored;
+BaseType_t xResult = 0;
+
+       ulSequenceNumber = FreeRTOS_ntohl( pxTCPHeader->ulSequenceNumber );
+
+       if( ( ulReceiveLength > 0u ) && ( pxSocket->u.xTCP.ucTCPState >= eSYN_RECEIVED ) )
+       {
+               /* See if way may accept the data contents and forward it to the socket
+               owner.
+
+               If it can't be "accept"ed it may have to be stored and send a selective
+               ack (SACK) option to confirm it.  In that case, xTCPWindowRxStore() will be
+               called later to store an out-of-order packet (in case lOffset is
+               negative). */
+               if ( pxSocket->u.xTCP.rxStream )
+               {
+                       ulSpace = ( uint32_t )uxStreamBufferGetSpace ( pxSocket->u.xTCP.rxStream );
+               }
+               else
+               {
+                       ulSpace = ( uint32_t )pxSocket->u.xTCP.uxRxStreamSize;
+               }
+
+               lOffset = lTCPWindowRxCheck( pxTCPWindow, ulSequenceNumber, ulReceiveLength, ulSpace );
+
+               if( lOffset >= 0 )
+               {
+                       /* New data has arrived and may be made available to the user.  See
+                       if the head marker in rxStream may be advanced, only if lOffset == 0.
+                       In case the low-water mark is reached, bLowWater will be set
+                       "low-water" here stands for "little space". */
+                       lStored = lTCPAddRxdata( pxSocket, ( uint32_t ) lOffset, pucRecvData, ulReceiveLength );
+
+                       if( lStored != ( int32_t ) ulReceiveLength )
+                       {
+                               FreeRTOS_debug_printf( ( "lTCPAddRxdata: stored %ld / %lu bytes??\n", lStored, ulReceiveLength ) );
+
+                               /* Received data could not be stored.  The socket's flag
+                               bMallocError has been set.  The socket now has the status
+                               eCLOSE_WAIT and a RST packet will be sent back. */
+                               prvTCPSendReset( pxNetworkBuffer );
+                               xResult = -1;
+                       }
+               }
+
+               /* After a missing packet has come in, higher packets may be passed to
+               the user. */
+               #if( ipconfigUSE_TCP_WIN == 1 )
+               {
+                       /* Now lTCPAddRxdata() will move the rxHead pointer forward
+                       so data becomes available to the user immediately
+                       In case the low-water mark is reached, bLowWater will be set. */
+                       if( ( xResult == 0 ) && ( pxTCPWindow->ulUserDataLength > 0 ) )
+                       {
+                               lTCPAddRxdata( pxSocket, 0ul, NULL, pxTCPWindow->ulUserDataLength );
+                               pxTCPWindow->ulUserDataLength = 0;
+                       }
+               }
+               #endif /* ipconfigUSE_TCP_WIN */
+       }
+       else
+       {
+               pxTCPWindow->ucOptionLength = 0u;
+       }
+
+       return xResult;
+}
+/*-----------------------------------------------------------*/
+
+/* Set the TCP options (if any) for the outgoing packet. */
+static UBaseType_t prvSetOptions( FreeRTOS_Socket_t *pxSocket, NetworkBufferDescriptor_t *pxNetworkBuffer )
+{
+TCPPacket_t *pxTCPPacket = ( TCPPacket_t * ) ( pxNetworkBuffer->pucEthernetBuffer );
+TCPHeader_t *pxTCPHeader = &pxTCPPacket->xTCPHeader;
+TCPWindow_t *pxTCPWindow = &pxSocket->u.xTCP.xTCPWindow;
+UBaseType_t uxOptionsLength = pxTCPWindow->ucOptionLength;
+
+       #if(    ipconfigUSE_TCP_WIN == 1 )
+               if( uxOptionsLength != 0u )
+               {
+                       /* TCP options must be sent because a packet which is out-of-order
+                       was received. */
+                       if( xTCPWindowLoggingLevel >= 0 )
+                               FreeRTOS_debug_printf( ( "SACK[%d,%d]: optlen %lu sending %lu - %lu\n",
+                                       pxSocket->usLocalPort,
+                                       pxSocket->u.xTCP.usRemotePort,
+                                       uxOptionsLength,
+                                       FreeRTOS_ntohl( pxTCPWindow->ulOptionsData[ 1 ] ) - pxSocket->u.xTCP.xTCPWindow.rx.ulFirstSequenceNumber,
+                                       FreeRTOS_ntohl( pxTCPWindow->ulOptionsData[ 2 ] ) - pxSocket->u.xTCP.xTCPWindow.rx.ulFirstSequenceNumber ) );
+                       memcpy( pxTCPHeader->ucOptdata, pxTCPWindow->ulOptionsData, ( size_t ) uxOptionsLength );
+
+                       /* The header length divided by 4, goes into the higher nibble,
+                       effectively a shift-left 2. */
+                       pxTCPHeader->ucTCPOffset = ( uint8_t )( ( ipSIZE_OF_TCP_HEADER + uxOptionsLength ) << 2 );
+               }
+               else
+       #endif  /* ipconfigUSE_TCP_WIN */
+       if( ( pxSocket->u.xTCP.ucTCPState >= eESTABLISHED ) && ( pxSocket->u.xTCP.bits.bMssChange != pdFALSE_UNSIGNED ) )
+       {
+               /* TCP options must be sent because the MSS has changed. */
+               pxSocket->u.xTCP.bits.bMssChange = pdFALSE_UNSIGNED;
+               if( xTCPWindowLoggingLevel >= 0 )
+               {
+                       FreeRTOS_debug_printf( ( "MSS: sending %d\n", pxSocket->u.xTCP.usCurMSS ) );
+               }
+
+               pxTCPHeader->ucOptdata[ 0 ] = TCP_OPT_MSS;
+               pxTCPHeader->ucOptdata[ 1 ] = TCP_OPT_MSS_LEN;
+               pxTCPHeader->ucOptdata[ 2 ] = ( uint8_t ) ( ( pxSocket->u.xTCP.usCurMSS ) >> 8 );
+               pxTCPHeader->ucOptdata[ 3 ] = ( uint8_t ) ( ( pxSocket->u.xTCP.usCurMSS ) & 0xffu );
+               uxOptionsLength = 4u;
+               pxTCPHeader->ucTCPOffset = ( uint8_t )( ( ipSIZE_OF_TCP_HEADER + uxOptionsLength ) << 2 );
+       }
+
+       return uxOptionsLength;
+}
+/*-----------------------------------------------------------*/
+
+/*
+ * prvHandleSynReceived(): called from prvTCPHandleState()
+ *
+ * Called from the states: eSYN_RECEIVED and eCONNECT_SYN
+ * If the flags received are correct, the socket will move to eESTABLISHED.
+ */
+static BaseType_t prvHandleSynReceived( FreeRTOS_Socket_t *pxSocket, NetworkBufferDescriptor_t **ppxNetworkBuffer,
+       uint32_t ulReceiveLength, UBaseType_t uxOptionsLength )
+{
+TCPPacket_t *pxTCPPacket = ( TCPPacket_t * ) ( (*ppxNetworkBuffer)->pucEthernetBuffer );
+TCPHeader_t *pxTCPHeader = &pxTCPPacket->xTCPHeader;
+TCPWindow_t *pxTCPWindow = &pxSocket->u.xTCP.xTCPWindow;
+uint8_t ucTCPFlags = pxTCPHeader->ucTCPFlags;
+uint32_t ulSequenceNumber = FreeRTOS_ntohl( pxTCPHeader->ulSequenceNumber );
+BaseType_t xSendLength = 0;
+
+       /* Either expect a ACK or a SYN+ACK. */
+       uint16_t usExpect = ( uint16_t ) ipTCP_FLAG_ACK;
+       if( pxSocket->u.xTCP.ucTCPState == eCONNECT_SYN )
+       {
+               usExpect |= ( uint16_t ) ipTCP_FLAG_SYN;
+       }
+
+       if( ( ucTCPFlags & 0x17u ) != usExpect )
+       {
+               /* eSYN_RECEIVED: flags 0010 expected, not 0002. */
+               /* eSYN_RECEIVED: flags ACK  expected, not SYN. */
+               FreeRTOS_debug_printf( ( "%s: flags %04X expected, not %04X\n",
+                       pxSocket->u.xTCP.ucTCPState == eSYN_RECEIVED ? "eSYN_RECEIVED" : "eCONNECT_SYN",
+                       usExpect, ucTCPFlags ) );
+               vTCPStateChange( pxSocket, eCLOSE_WAIT );
+               pxTCPHeader->ucTCPFlags |= ipTCP_FLAG_RST;
+               xSendLength = ( BaseType_t ) ( ipSIZE_OF_IPv4_HEADER + ipSIZE_OF_TCP_HEADER + uxOptionsLength );
+               pxTCPHeader->ucTCPOffset = ( uint8_t )( ( ipSIZE_OF_TCP_HEADER + uxOptionsLength ) << 2 );
+       }
+       else
+       {
+               pxTCPWindow->usPeerPortNumber = pxSocket->u.xTCP.usRemotePort;
+               pxTCPWindow->usOurPortNumber = pxSocket->usLocalPort;
+
+               if( pxSocket->u.xTCP.ucTCPState == eCONNECT_SYN )
+               {
+                       TCPPacket_t *pxLastTCPPacket = ( TCPPacket_t * ) ( pxSocket->u.xTCP.xPacket.u.ucLastPacket );
+
+                       /* Clear the SYN flag in lastPacket. */
+                       pxLastTCPPacket->xTCPHeader.ucTCPFlags = ipTCP_FLAG_ACK;
+
+                       /* This socket was the one connecting actively so now perofmr the
+                       synchronisation. */
+                       vTCPWindowInit( &pxSocket->u.xTCP.xTCPWindow,
+                               ulSequenceNumber, pxSocket->u.xTCP.xTCPWindow.ulOurSequenceNumber, ( uint32_t ) pxSocket->u.xTCP.usCurMSS );
+                       pxTCPWindow->rx.ulCurrentSequenceNumber = pxTCPWindow->rx.ulHighestSequenceNumber = ulSequenceNumber + 1u;
+                       pxTCPWindow->tx.ulCurrentSequenceNumber++; /* because we send a TCP_SYN [ | TCP_ACK ]; */
+                       pxTCPWindow->ulNextTxSequenceNumber++;
+               }
+               else if( ulReceiveLength == 0u )
+               {
+                       pxTCPWindow->rx.ulCurrentSequenceNumber = ulSequenceNumber;
+               }
+
+               /* The SYN+ACK has been confirmed, increase the next sequence number by
+               1. */
+               pxTCPWindow->ulOurSequenceNumber = pxTCPWindow->tx.ulFirstSequenceNumber + 1u;
+
+               #if( ipconfigUSE_TCP_WIN == 1 )
+               {
+                       FreeRTOS_debug_printf( ( "TCP: %s %d => %lxip:%d set ESTAB (scaling %u)\n",
+                               pxSocket->u.xTCP.ucTCPState == eCONNECT_SYN ? "active" : "passive",
+                               pxSocket->usLocalPort,
+                               pxSocket->u.xTCP.ulRemoteIP,
+                               pxSocket->u.xTCP.usRemotePort,
+                               ( unsigned ) pxSocket->u.xTCP.bits.bWinScaling ) );
+               }
+               #endif /* ipconfigUSE_TCP_WIN */
+
+               if( ( pxSocket->u.xTCP.ucTCPState == eCONNECT_SYN ) || ( ulReceiveLength != 0u ) )
+               {
+                       pxTCPHeader->ucTCPFlags = ipTCP_FLAG_ACK;
+                       xSendLength = ( BaseType_t ) ( ipSIZE_OF_IPv4_HEADER + ipSIZE_OF_TCP_HEADER + uxOptionsLength );
+                       pxTCPHeader->ucTCPOffset = ( uint8_t ) ( ( ipSIZE_OF_TCP_HEADER + uxOptionsLength ) << 2 );
+               }
+               #if( ipconfigUSE_TCP_WIN != 0 )
+               {
+                       if( pxSocket->u.xTCP.bits.bWinScaling == pdFALSE_UNSIGNED )
+                       {
+                               /* The other party did not send a scaling factor.
+                               A shifting factor in this side must be canceled. */
+                               pxSocket->u.xTCP.ucMyWinScaleFactor = 0;
+                               pxSocket->u.xTCP.ucPeerWinScaleFactor = 0;
+                       }
+               }
+               #endif /* ipconfigUSE_TCP_WIN */
+               /* This was the third step of connecting: SYN, SYN+ACK, ACK     so now the
+               connection is established. */
+               vTCPStateChange( pxSocket, eESTABLISHED );
+       }
+
+       return xSendLength;
+}
+/*-----------------------------------------------------------*/
+
+/*
+ * prvHandleEstablished(): called from prvTCPHandleState()
+ *
+ * Called if the status is eESTABLISHED.  Data reception has been handled
+ * earlier.  Here the ACK's from peer will be checked, and if a FIN is received,
+ * the code will check if it may be accepted, i.e. if all expected data has been
+ * completely received.
+ */
+static BaseType_t prvHandleEstablished( FreeRTOS_Socket_t *pxSocket, NetworkBufferDescriptor_t **ppxNetworkBuffer,
+       uint32_t ulReceiveLength, UBaseType_t uxOptionsLength )
+{
+TCPPacket_t *pxTCPPacket = ( TCPPacket_t * ) ( (*ppxNetworkBuffer)->pucEthernetBuffer );
+TCPHeader_t *pxTCPHeader = &pxTCPPacket->xTCPHeader;
+TCPWindow_t *pxTCPWindow = &pxSocket->u.xTCP.xTCPWindow;
+uint8_t ucTCPFlags = pxTCPHeader->ucTCPFlags;
+uint32_t ulSequenceNumber = FreeRTOS_ntohl( pxTCPHeader->ulSequenceNumber ), ulCount;
+BaseType_t xSendLength = 0, xMayClose = pdFALSE, bRxComplete, bTxDone;
+int32_t lDistance, lSendResult;
+
+       /* Remember the window size the peer is advertising. */
+       pxSocket->u.xTCP.ulWindowSize = FreeRTOS_ntohs( pxTCPHeader->usWindow );
+       #if( ipconfigUSE_TCP_WIN != 0 )
+       {
+               pxSocket->u.xTCP.ulWindowSize =
+                       ( pxSocket->u.xTCP.ulWindowSize << pxSocket->u.xTCP.ucPeerWinScaleFactor );
+       }
+       #endif
+
+       if( ( ucTCPFlags & ( uint8_t ) ipTCP_FLAG_ACK ) != 0u )
+       {
+               ulCount = ulTCPWindowTxAck( pxTCPWindow, FreeRTOS_ntohl( pxTCPPacket->xTCPHeader.ulAckNr ) );
+
+               /* ulTCPWindowTxAck() returns the number of bytes which have been acked,
+               starting at 'tx.ulCurrentSequenceNumber'.  Advance the tail pointer in
+               txStream. */
+               if( ( pxSocket->u.xTCP.txStream != NULL ) && ( ulCount > 0u ) )
+               {
+                       /* Just advancing the tail index, 'ulCount' bytes have been
+                       confirmed, and because there is new space in the txStream, the
+                       user/owner should be woken up. */
+                       /* _HT_ : only in case the socket's waiting? */
+                       if( uxStreamBufferGet( pxSocket->u.xTCP.txStream, 0u, NULL, ( size_t ) ulCount, pdFALSE ) != 0u )
+                       {
+                               pxSocket->xEventBits |= eSOCKET_SEND;
+
+                               #if ipconfigSUPPORT_SELECT_FUNCTION == 1
+                               {
+                                       if( ( pxSocket->xSelectBits & eSELECT_WRITE ) != 0 )
+                                       {
+                                               pxSocket->xEventBits |= ( eSELECT_WRITE << SOCKET_EVENT_BIT_COUNT );
+                                       }
+                               }
+                               #endif
+                               /* In case the socket owner has installed an OnSent handler,
+                               call it now. */
+                               #if( ipconfigUSE_CALLBACKS == 1 )
+                               {
+                                       if( ipconfigIS_VALID_PROG_ADDRESS( pxSocket->u.xTCP.pxHandleSent ) )
+                                       {
+                                               pxSocket->u.xTCP.pxHandleSent( ( Socket_t )pxSocket, ulCount );
+                                       }
+                               }
+                               #endif /* ipconfigUSE_CALLBACKS == 1  */
+                       }
+               }
+       }
+
+       /* If this socket has a stream for transmission, add the data to the
+       outgoing segment(s). */
+       if( pxSocket->u.xTCP.txStream != NULL )
+       {
+               prvTCPAddTxData( pxSocket );
+       }
+
+       pxSocket->u.xTCP.xTCPWindow.ulOurSequenceNumber = pxTCPWindow->tx.ulCurrentSequenceNumber;
+
+       if( ( pxSocket->u.xTCP.bits.bFinAccepted != pdFALSE_UNSIGNED ) || ( ( ucTCPFlags & ( uint8_t ) ipTCP_FLAG_FIN ) != 0u ) )
+       {
+               /* Peer is requesting to stop, see if we're really finished. */
+               xMayClose = pdTRUE;
+
+               /* Checks are only necessary if we haven't sent a FIN yet. */
+               if( pxSocket->u.xTCP.bits.bFinSent == pdFALSE_UNSIGNED )
+               {
+                       /* xTCPWindowTxDone returns true when all Tx queues are empty. */
+                       bRxComplete = xTCPWindowRxEmpty( pxTCPWindow );
+                       bTxDone  = xTCPWindowTxDone( pxTCPWindow );
+
+                       if( ( bRxComplete == 0 ) || ( bTxDone == 0 ) )
+                       {
+                               /* Refusing FIN: Rx incomp 1 optlen 4 tx done 1. */
+                               FreeRTOS_debug_printf( ( "Refusing FIN[%u,%u]: RxCompl %lu tx done %ld\n",
+                                       pxSocket->usLocalPort,
+                                       pxSocket->u.xTCP.usRemotePort,
+                                       bRxComplete, bTxDone ) );
+                               xMayClose = pdFALSE;
+                       }
+                       else
+                       {
+                               lDistance = ( int32_t ) ( ulSequenceNumber + ulReceiveLength - pxTCPWindow->rx.ulCurrentSequenceNumber );
+
+                               if( lDistance > 1 )
+                               {
+                                       FreeRTOS_debug_printf( ( "Refusing FIN: Rx not complete %ld (cur %lu high %lu)\n",
+                                               lDistance, pxTCPWindow->rx.ulCurrentSequenceNumber - pxTCPWindow->rx.ulFirstSequenceNumber,
+                                               pxTCPWindow->rx.ulHighestSequenceNumber - pxTCPWindow->rx.ulFirstSequenceNumber ) );
+
+                                       xMayClose = pdFALSE;
+                               }
+                       }
+               }
+
+               if( xTCPWindowLoggingLevel > 0 )
+               {
+                       FreeRTOS_debug_printf( ( "TCP: FIN received, mayClose = %ld (Rx %lu Len %ld, Tx %lu)\n",
+                               xMayClose, ulSequenceNumber - pxSocket->u.xTCP.xTCPWindow.rx.ulFirstSequenceNumber, ulReceiveLength,
+                               pxTCPWindow->tx.ulCurrentSequenceNumber - pxSocket->u.xTCP.xTCPWindow.tx.ulFirstSequenceNumber ) );
+               }
+
+               if( xMayClose != pdFALSE )
+               {
+                       pxSocket->u.xTCP.bits.bFinAccepted = pdTRUE_UNSIGNED;
+                       xSendLength = prvTCPHandleFin( pxSocket, *ppxNetworkBuffer );
+               }
+       }
+
+       if( xMayClose == pdFALSE )
+       {
+               pxTCPHeader->ucTCPFlags = ipTCP_FLAG_ACK;
+
+               if( ulReceiveLength != 0u )
+               {
+                       xSendLength = ( BaseType_t ) ( ipSIZE_OF_IPv4_HEADER + ipSIZE_OF_TCP_HEADER + uxOptionsLength );
+                       /* TCP-offsett equals '( ( length / 4 ) << 4 )', resulting in a shift-left 2 */
+                       pxTCPHeader->ucTCPOffset = ( uint8_t )( ( ipSIZE_OF_TCP_HEADER + uxOptionsLength ) << 2 );
+
+                       if( pxSocket->u.xTCP.bits.bFinSent != pdFALSE_UNSIGNED )
+                       {
+                               pxTCPWindow->tx.ulCurrentSequenceNumber = pxTCPWindow->tx.ulFINSequenceNumber;
+                       }
+               }
+
+               /* Now get data to be transmitted. */
+               /* _HT_ patch: since the MTU has be fixed at 1500 in stead of 1526, TCP
+               can not send-out both TCP options and also a full packet. Sending
+               options (SACK) is always more urgent than sending data, which can be
+               sent later. */
+               if( uxOptionsLength == 0u )
+               {
+                       /* prvTCPPrepareSend might allocate a bigger network buffer, if
+                       necessary. */
+                       lSendResult = prvTCPPrepareSend( pxSocket, ppxNetworkBuffer, uxOptionsLength );
+                       if( lSendResult > 0 )
+                       {
+                               xSendLength = ( BaseType_t ) lSendResult;
+                       }
+               }
+       }
+
+       return xSendLength;
+}
+/*-----------------------------------------------------------*/
+
+/*
+ * Called from prvTCPHandleState().  There is data to be sent.  If
+ * ipconfigUSE_TCP_WIN is defined, and if only an ACK must be sent, it will be
+ * checked if it would better be postponed for efficiency.
+ */
+static BaseType_t prvSendData( FreeRTOS_Socket_t *pxSocket, NetworkBufferDescriptor_t **ppxNetworkBuffer,
+       uint32_t ulReceiveLength, BaseType_t xSendLength )
+{
+TCPPacket_t *pxTCPPacket = ( TCPPacket_t * ) ( (*ppxNetworkBuffer)->pucEthernetBuffer );
+TCPHeader_t *pxTCPHeader = &pxTCPPacket->xTCPHeader;
+TCPWindow_t *pxTCPWindow = &pxSocket->u.xTCP.xTCPWindow;
+/* Find out what window size we may advertised. */
+int32_t lRxSpace;
+#if( ipconfigUSE_TCP_WIN == 1 )
+       #if( ipconfigTCP_ACK_EARLIER_PACKET == 0 )
+               const int32_t lMinLength = 0;
+       #else
+               int32_t lMinLength;
+       #endif
+#endif
+
+       /* Set the time-out field, so that we'll be called by the IP-task in case no
+       next message will be received. */
+       lRxSpace = (int32_t)( pxSocket->u.xTCP.ulHighestRxAllowed - pxTCPWindow->rx.ulCurrentSequenceNumber );
+       #if ipconfigUSE_TCP_WIN == 1
+       {
+
+               #if( ipconfigTCP_ACK_EARLIER_PACKET != 0 )
+               {
+                       lMinLength = ( ( int32_t ) 2 ) * ( ( int32_t ) pxSocket->u.xTCP.usCurMSS );
+               }
+               #endif /* ipconfigTCP_ACK_EARLIER_PACKET */
+
+               /* In case we're receiving data continuously, we might postpone sending
+               an ACK to gain performance. */
+               if( ( ulReceiveLength > 0 ) &&                                                  /* Data was sent to this socket. */
+                       ( lRxSpace >= lMinLength ) &&                                           /* There is Rx space for more data. */
+                       ( pxSocket->u.xTCP.bits.bFinSent == pdFALSE_UNSIGNED ) &&       /* Not in a closure phase. */
+                       ( xSendLength == ( ipSIZE_OF_IPv4_HEADER + ipSIZE_OF_TCP_HEADER ) ) && /* No Tx data or options to be sent. */
+                       ( pxSocket->u.xTCP.ucTCPState == eESTABLISHED ) &&      /* Connection established. */
+                       ( pxTCPHeader->ucTCPFlags == ipTCP_FLAG_ACK ) )         /* There are no other flags than an ACK. */
+               {
+                       if( pxSocket->u.xTCP.pxAckMessage != *ppxNetworkBuffer )
+                       {
+                               /* There was still a delayed in queue, delete it. */
+                               if( pxSocket->u.xTCP.pxAckMessage != 0 )
+                               {
+                                       vReleaseNetworkBufferAndDescriptor( pxSocket->u.xTCP.pxAckMessage );
+                               }
+
+                               pxSocket->u.xTCP.pxAckMessage = *ppxNetworkBuffer;
+                       }
+                       if( ( ulReceiveLength < ( uint32_t ) pxSocket->u.xTCP.usCurMSS ) ||     /* Received a small message. */
+                               ( lRxSpace < ( int32_t ) ( 2U * pxSocket->u.xTCP.usCurMSS ) ) ) /* There are less than 2 x MSS space in the Rx buffer. */
+                       {
+                               pxSocket->u.xTCP.usTimeout = ( uint16_t ) pdMS_TO_MIN_TICKS( DELAYED_ACK_SHORT_DELAY_MS );
+                       }
+                       else
+                       {
+                               /* Normally a delayed ACK should wait 200 ms for a next incoming
+                               packet.  Only wait 20 ms here to gain performance.  A slow ACK
+                               for full-size message. */
+                               pxSocket->u.xTCP.usTimeout = ( uint16_t ) pdMS_TO_MIN_TICKS( DELAYED_ACK_LONGER_DELAY_MS );
+                       }
+
+                       if( ( xTCPWindowLoggingLevel > 1 ) && ( ipconfigTCP_MAY_LOG_PORT( pxSocket->usLocalPort ) != pdFALSE ) )
+                       {
+                               FreeRTOS_debug_printf( ( "Send[%u->%u] del ACK %lu SEQ %lu (len %lu) tmout %u d %lu\n",
+                                       pxSocket->usLocalPort,
+                                       pxSocket->u.xTCP.usRemotePort,
+                                       pxTCPWindow->rx.ulCurrentSequenceNumber - pxTCPWindow->rx.ulFirstSequenceNumber,
+                                       pxSocket->u.xTCP.xTCPWindow.ulOurSequenceNumber - pxTCPWindow->tx.ulFirstSequenceNumber,
+                                       xSendLength,
+                                       pxSocket->u.xTCP.usTimeout, lRxSpace ) );
+                       }
+
+                       *ppxNetworkBuffer = NULL;
+                       xSendLength = 0;
+               }
+               else if( pxSocket->u.xTCP.pxAckMessage != NULL )
+               {
+                       /* As an ACK is not being delayed, remove any earlier delayed ACK
+                       message. */
+                       if( pxSocket->u.xTCP.pxAckMessage != *ppxNetworkBuffer )
+                       {
+                               vReleaseNetworkBufferAndDescriptor( pxSocket->u.xTCP.pxAckMessage );
+                       }
+
+                       pxSocket->u.xTCP.pxAckMessage = NULL;
+               }
+       }
+       #else
+       {
+               /* Remove compiler warnings. */
+               ( void ) ulReceiveLength;
+               ( void ) pxTCPHeader;
+               ( void ) lRxSpace;
+       }
+       #endif /* ipconfigUSE_TCP_WIN */
+
+       if( xSendLength != 0 )
+       {
+               if( ( xTCPWindowLoggingLevel > 1 ) && ( ipconfigTCP_MAY_LOG_PORT( pxSocket->usLocalPort ) != pdFALSE ) )
+               {
+                       FreeRTOS_debug_printf( ( "Send[%u->%u] imm ACK %lu SEQ %lu (len %lu)\n",
+                               pxSocket->usLocalPort,
+                               pxSocket->u.xTCP.usRemotePort,
+                               pxTCPWindow->rx.ulCurrentSequenceNumber - pxTCPWindow->rx.ulFirstSequenceNumber,
+                               pxTCPWindow->ulOurSequenceNumber - pxTCPWindow->tx.ulFirstSequenceNumber,
+                               xSendLength ) );
+               }
+
+               /* Set the parameter 'xReleaseAfterSend' to the value of
+               ipconfigZERO_COPY_TX_DRIVER. */
+               prvTCPReturnPacket( pxSocket, *ppxNetworkBuffer, ( uint32_t ) xSendLength, ipconfigZERO_COPY_TX_DRIVER );
+               #if( ipconfigZERO_COPY_TX_DRIVER != 0 )
+               {
+                       /* The driver has taken ownership of the Network Buffer. */
+                       *ppxNetworkBuffer = NULL;
+               }
+               #endif
+       }
+
+       return xSendLength;
+}
+/*-----------------------------------------------------------*/
+
+/*
+ * prvTCPHandleState()
+ * is the most important function of this TCP stack
+ * We've tried to keep it (relatively short) by putting a lot of code in
+ * the static functions above:
+ *
+ *             prvCheckRxData()
+ *             prvStoreRxData()
+ *             prvSetOptions()
+ *             prvHandleSynReceived()
+ *             prvHandleEstablished()
+ *             prvSendData()
+ *
+ * As these functions are declared static, and they're called from one location
+ * only, most compilers will inline them, thus avoiding a call and return.
+ */
+static BaseType_t prvTCPHandleState( FreeRTOS_Socket_t *pxSocket, NetworkBufferDescriptor_t **ppxNetworkBuffer )
+{
+TCPPacket_t *pxTCPPacket = ( TCPPacket_t * ) ( (*ppxNetworkBuffer)->pucEthernetBuffer );
+TCPHeader_t *pxTCPHeader = &( pxTCPPacket->xTCPHeader );
+BaseType_t xSendLength = 0;
+uint32_t ulReceiveLength;      /* Number of bytes contained in the TCP message. */
+uint8_t *pucRecvData;
+uint32_t ulSequenceNumber = FreeRTOS_ntohl (pxTCPHeader->ulSequenceNumber);
+
+       /* uxOptionsLength: the size of the options to be sent (always a multiple of
+       4 bytes)
+       1. in the SYN phase, we shall communicate the MSS
+       2. in case of a SACK, Selective ACK, ack a segment which comes in
+       out-of-order. */
+UBaseType_t uxOptionsLength = 0u;
+uint8_t ucTCPFlags = pxTCPHeader->ucTCPFlags;
+TCPWindow_t *pxTCPWindow = &( pxSocket->u.xTCP.xTCPWindow );
+
+       /* First get the length and the position of the received data, if any.
+       pucRecvData will point to the first byte of the TCP payload. */
+       ulReceiveLength = ( uint32_t ) prvCheckRxData( *ppxNetworkBuffer, &pucRecvData );
+
+       if( pxSocket->u.xTCP.ucTCPState >= eESTABLISHED )
+       {
+               if ( pxTCPWindow->rx.ulCurrentSequenceNumber == ulSequenceNumber + 1u )
+               {
+                       /* This is most probably a keep-alive message from peer.  Setting
+                       'bWinChange' doesn't cause a window-size-change, the flag is used
+                       here to force sending an immediate ACK. */
+                       pxSocket->u.xTCP.bits.bWinChange = pdTRUE_UNSIGNED;
+               }
+       }
+
+       /* Keep track of the highest sequence number that might be expected within
+       this connection. */
+       if( ( ( int32_t ) ( ulSequenceNumber + ulReceiveLength - pxTCPWindow->rx.ulHighestSequenceNumber ) ) > 0 )
+       {
+               pxTCPWindow->rx.ulHighestSequenceNumber = ulSequenceNumber + ulReceiveLength;
+       }
+
+       /* Storing data may result in a fatal error if malloc() fails. */
+       if( prvStoreRxData( pxSocket, pucRecvData, *ppxNetworkBuffer, ulReceiveLength ) < 0 )
+       {
+               xSendLength = -1;
+       }
+       else
+       {
+               uxOptionsLength = prvSetOptions( pxSocket, *ppxNetworkBuffer );
+
+               if( ( pxSocket->u.xTCP.ucTCPState == eSYN_RECEIVED ) && ( ( ucTCPFlags & ipTCP_FLAG_CTRL ) == ipTCP_FLAG_SYN ) )
+               {
+                       FreeRTOS_debug_printf( ( "eSYN_RECEIVED: ACK expected, not SYN: peer missed our SYN+ACK\n" ) );
+
+                       /* In eSYN_RECEIVED a simple ACK is expected, but apparently the
+                       'SYN+ACK' didn't arrive.  Step back to the previous state in which
+                       a first incoming SYN is handled.  The SYN was counted already so
+                       decrease it first. */
+                       vTCPStateChange( pxSocket, eSYN_FIRST );
+               }
+
+               if( ( ( ucTCPFlags & ipTCP_FLAG_FIN ) != 0u ) && ( pxSocket->u.xTCP.bits.bFinRecv == pdFALSE_UNSIGNED ) )
+               {
+                       /* It's the first time a FIN has been received, remember its
+                       sequence number. */
+                       pxTCPWindow->rx.ulFINSequenceNumber = ulSequenceNumber + ulReceiveLength;
+                       pxSocket->u.xTCP.bits.bFinRecv = pdTRUE_UNSIGNED;
+
+                       /* Was peer the first one to send a FIN? */
+                       if( pxSocket->u.xTCP.bits.bFinSent == pdFALSE_UNSIGNED )
+                       {
+                               /* If so, don't send the-last-ACK. */
+                               pxSocket->u.xTCP.bits.bFinLast = pdTRUE_UNSIGNED;
+                       }
+               }
+
+               switch (pxSocket->u.xTCP.ucTCPState)
+               {
+               case eCLOSED:           /* (server + client) no connection state at all. */
+                       /* Nothing to do for a closed socket, except waiting for the
+                       owner. */
+                       break;
+
+               case eTCP_LISTEN:       /* (server) waiting for a connection request from
+                                                       any remote TCP and port. */
+                       /* The listen state was handled in xProcessReceivedTCPPacket().
+                       Should not come here. */
+                       break;
+
+               case eSYN_FIRST:        /* (server) Just received a SYN request for a server
+                                                       socket. */
+                       {
+                               /* A new socket has been created, reply with a SYN+ACK.
+                               Acknowledge with seq+1 because the SYN is seen as pseudo data
+                               with len = 1. */
+                               uxOptionsLength = prvSetSynAckOptions( pxSocket, pxTCPPacket );
+                               pxTCPHeader->ucTCPFlags = ipTCP_FLAG_SYN | ipTCP_FLAG_ACK;
+
+                               xSendLength = ( BaseType_t ) ( ipSIZE_OF_IPv4_HEADER + ipSIZE_OF_TCP_HEADER + uxOptionsLength );
+
+                               /* Set the TCP offset field:  ipSIZE_OF_TCP_HEADER equals 20 and
+                               uxOptionsLength is a multiple of 4.  The complete expression is:
+                               ucTCPOffset = ( ( ipSIZE_OF_TCP_HEADER + uxOptionsLength ) / 4 ) << 4 */
+                               pxTCPHeader->ucTCPOffset = ( uint8_t )( ( ipSIZE_OF_TCP_HEADER + uxOptionsLength ) << 2 );
+                               vTCPStateChange( pxSocket, eSYN_RECEIVED );
+
+                               pxTCPWindow->rx.ulCurrentSequenceNumber = pxTCPWindow->rx.ulHighestSequenceNumber = ulSequenceNumber + 1u;
+                               pxTCPWindow->tx.ulCurrentSequenceNumber = pxTCPWindow->ulNextTxSequenceNumber = pxTCPWindow->tx.ulFirstSequenceNumber + 1u; /* because we send a TCP_SYN. */
+                       }
+                       break;
+
+               case eCONNECT_SYN:      /* (client) also called SYN_SENT: we've just send a
+                                                       SYN, expect     a SYN+ACK and send a ACK now. */
+                       /* Fall through */
+               case eSYN_RECEIVED:     /* (server) we've had a SYN, replied with SYN+SCK
+                                                       expect a ACK and do nothing. */
+                       xSendLength = prvHandleSynReceived( pxSocket, ppxNetworkBuffer, ulReceiveLength, uxOptionsLength );
+                       break;
+
+               case eESTABLISHED:      /* (server + client) an open connection, data
+                                                       received can be delivered to the user. The normal
+                                                       state for the data transfer phase of the connection
+                                                       The closing states are also handled here with the
+                                                       use of some flags. */
+                       xSendLength = prvHandleEstablished( pxSocket, ppxNetworkBuffer, ulReceiveLength, uxOptionsLength );
+                       break;
+
+               case eLAST_ACK:         /* (server + client) waiting for an acknowledgement
+                                                       of the connection termination request previously
+                                                       sent to the remote TCP (which includes an
+                                                       acknowledgement of its connection termination
+                                                       request). */
+                       /* Fall through */
+               case eFIN_WAIT_1:       /* (server + client) waiting for a connection termination request from the remote TCP,
+                                                        * or an acknowledgement of the connection termination request previously sent. */
+                       /* Fall through */
+               case eFIN_WAIT_2:       /* (server + client) waiting for a connection termination request from the remote TCP. */
+                       xSendLength = prvTCPHandleFin( pxSocket, *ppxNetworkBuffer );
+                       break;
+
+               case eCLOSE_WAIT:       /* (server + client) waiting for a connection
+                                                       termination request from the local user.  Nothing to
+                                                       do, connection is closed, wait for owner to close
+                                                       this socket. */
+                       break;
+
+               case eCLOSING:          /* (server + client) waiting for a connection
+                                                       termination request acknowledgement from the remote
+                                                       TCP. */
+                       break;
+
+               case eTIME_WAIT:        /* (either server or client) waiting for enough time
+                                                       to pass to be sure the remote TCP received the
+                                                       acknowledgement of its connection termination
+                                                       request. [According to RFC 793 a connection can stay
+                                                       in TIME-WAIT for a maximum of four minutes known as
+                                                       a MSL (maximum segment lifetime).]  These states are
+                                                       implemented implicitly by settings flags like
+                                                       'bFinSent', 'bFinRecv', and 'bFinAcked'. */
+                       break;
+               default:
+                       break;
+               }
+       }
+
+       if( xSendLength > 0 )
+       {
+               xSendLength = prvSendData( pxSocket, ppxNetworkBuffer, ulReceiveLength, xSendLength );
+       }
+
+       return xSendLength;
+}
+/*-----------------------------------------------------------*/
+
+static BaseType_t prvTCPSendSpecialPacketHelper( NetworkBufferDescriptor_t *pxNetworkBuffer,
+                                                 uint8_t ucTCPFlags )
+{
+#if( ipconfigIGNORE_UNKNOWN_PACKETS == 0 )
+    {
+        TCPPacket_t *pxTCPPacket = ( TCPPacket_t * )( pxNetworkBuffer->pucEthernetBuffer );
+        const BaseType_t xSendLength = ( BaseType_t )
+            ( ipSIZE_OF_IPv4_HEADER + ipSIZE_OF_TCP_HEADER + 0u ); /* Plus 0 options. */
+
+        pxTCPPacket->xTCPHeader.ucTCPFlags = ucTCPFlags;
+        pxTCPPacket->xTCPHeader.ucTCPOffset = ( ipSIZE_OF_TCP_HEADER + 0u ) << 2;
+
+        prvTCPReturnPacket( NULL, pxNetworkBuffer, ( uint32_t )xSendLength, pdFALSE );
+    }
+#endif /* !ipconfigIGNORE_UNKNOWN_PACKETS */
+
+    /* Remove compiler warnings if ipconfigIGNORE_UNKNOWN_PACKETS == 1. */
+    ( void )pxNetworkBuffer;
+    ( void )ucTCPFlags;
+
+    /* The packet was not consumed. */
+    return pdFAIL;
+}
+/*-----------------------------------------------------------*/
+
+static BaseType_t prvTCPSendChallengeAck( NetworkBufferDescriptor_t *pxNetworkBuffer )
+{
+    return prvTCPSendSpecialPacketHelper( pxNetworkBuffer, ipTCP_FLAG_ACK );
+}
+/*-----------------------------------------------------------*/
+
+static BaseType_t prvTCPSendReset( NetworkBufferDescriptor_t *pxNetworkBuffer )
+{
+    return prvTCPSendSpecialPacketHelper( pxNetworkBuffer,
+                                          ipTCP_FLAG_ACK | ipTCP_FLAG_RST );
+}
+/*-----------------------------------------------------------*/
+
+static void prvSocketSetMSS( FreeRTOS_Socket_t *pxSocket )
+{
+uint32_t ulMSS = ipconfigTCP_MSS;
+
+       if( ( ( FreeRTOS_ntohl( pxSocket->u.xTCP.ulRemoteIP ) ^ *ipLOCAL_IP_ADDRESS_POINTER ) & xNetworkAddressing.ulNetMask ) != 0ul )
+       {
+               /* Data for this peer will pass through a router, and maybe through
+               the internet.  Limit the MSS to 1400 bytes or less. */
+               ulMSS = FreeRTOS_min_uint32( ( uint32_t ) REDUCED_MSS_THROUGH_INTERNET, ulMSS );
+       }
+
+       FreeRTOS_debug_printf( ( "prvSocketSetMSS: %lu bytes for %lxip:%u\n", ulMSS, pxSocket->u.xTCP.ulRemoteIP, pxSocket->u.xTCP.usRemotePort ) );
+
+       pxSocket->u.xTCP.usInitMSS = pxSocket->u.xTCP.usCurMSS = ( uint16_t ) ulMSS;
+}
+/*-----------------------------------------------------------*/
+
+/*
+ *     FreeRTOS_TCP_IP has only 2 public functions, this is the second one:
+ *     xProcessReceivedTCPPacket()
+ *             prvTCPHandleState()
+ *                     prvTCPPrepareSend()
+ *                             prvTCPReturnPacket()
+ *                             xNetworkInterfaceOutput()       // Sends data to the NIC
+ *             prvTCPSendRepeated()
+ *                     prvTCPReturnPacket()            // Prepare for returning
+ *                     xNetworkInterfaceOutput()       // Sends data to the NIC
+*/
+BaseType_t xProcessReceivedTCPPacket( NetworkBufferDescriptor_t *pxNetworkBuffer )
+{
+FreeRTOS_Socket_t *pxSocket;
+TCPPacket_t * pxTCPPacket = ( TCPPacket_t * ) ( pxNetworkBuffer->pucEthernetBuffer );
+uint16_t ucTCPFlags;
+uint32_t ulLocalIP;
+uint16_t xLocalPort;
+uint32_t ulRemoteIP;
+uint16_t xRemotePort;
+uint32_t ulSequenceNumber;
+uint32_t ulAckNumber;
+BaseType_t xResult = pdPASS;
+configASSERT(pxNetworkBuffer);
+configASSERT(pxNetworkBuffer->pucEthernetBuffer);
+
+       /* 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 );
+        ulSequenceNumber = FreeRTOS_ntohl( pxTCPPacket->xTCPHeader.ulSequenceNumber );
+        ulAckNumber = FreeRTOS_ntohl( pxTCPPacket->xTCPHeader.ulAckNr );
+
+               /* Find the destination socket, and if not found: return a socket listing to
+               the destination PORT. */
+               pxSocket = ( FreeRTOS_Socket_t * )pxTCPSocketLookup( ulLocalIP, xLocalPort, ulRemoteIP, xRemotePort );
+       }
+       else
+       {
+               return pdFAIL;
+       }
+
+       if( ( pxSocket == NULL ) || ( prvTCPSocketIsActive( ( UBaseType_t ) pxSocket->u.xTCP.ucTCPState ) == pdFALSE ) )
+       {
+               /* A TCP messages is received but either there is no socket with the
+               given port number or the there is a socket, but it is in one of these
+               non-active states:  eCLOSED, eCLOSE_WAIT, eFIN_WAIT_2, eCLOSING, or
+               eTIME_WAIT. */
+
+               FreeRTOS_debug_printf( ( "TCP: No active socket on port %d (%lxip:%d)\n", xLocalPort, ulRemoteIP, xRemotePort ) );
+
+               /* Send a RST to all packets that can not be handled.  As a result
+               the other party will get a ECONN error.  There are two exceptions:
+               1) A packet that already has the RST flag set.
+               2) A packet that only has the ACK flag set.
+               A packet with only the ACK flag set might be the last ACK in
+               a three-way hand-shake that closes a connection. */
+               if( ( ( ucTCPFlags & ipTCP_FLAG_CTRL ) != ipTCP_FLAG_ACK ) &&
+                       ( ( ucTCPFlags & ipTCP_FLAG_RST ) == 0u ) )
+               {
+                       prvTCPSendReset( pxNetworkBuffer );
+               }
+
+               /* The packet can't be handled. */
+               xResult = pdFAIL;
+       }
+       else
+       {
+               pxSocket->u.xTCP.ucRepCount = 0u;
+
+               if( pxSocket->u.xTCP.ucTCPState == eTCP_LISTEN )
+               {
+                       /* The matching socket is in a listening state.  Test if the peer
+                       has set the SYN flag. */
+                       if( ( ucTCPFlags & ipTCP_FLAG_CTRL ) != ipTCP_FLAG_SYN )
+                       {
+                               /* What happens: maybe after a reboot, a client doesn't know the
+                               connection had gone.  Send a RST in order to get a new connect
+                               request. */
+                               #if( ipconfigHAS_DEBUG_PRINTF == 1 )
+                               {
+                               FreeRTOS_debug_printf( ( "TCP: Server can't handle flags: %s from %lxip:%u to port %u\n",
+                                       prvTCPFlagMeaning( ( UBaseType_t ) ucTCPFlags ), ulRemoteIP, xRemotePort, xLocalPort ) );
+                               }
+                               #endif /* ipconfigHAS_DEBUG_PRINTF */
+
+                               if( ( ucTCPFlags & ipTCP_FLAG_RST ) == 0u )
+                               {
+                                       prvTCPSendReset( pxNetworkBuffer );
+                               }
+                               xResult = pdFAIL;
+                       }
+                       else
+                       {
+                               /* prvHandleListen() will either return a newly created socket
+                               (if bReuseSocket is false), otherwise it returns the current
+                               socket which will later get connected. */
+                               pxSocket = prvHandleListen( pxSocket, pxNetworkBuffer );
+
+                               if( pxSocket == NULL )
+                               {
+                                       xResult = pdFAIL;
+                               }
+                       }
+               }       /* if( pxSocket->u.xTCP.ucTCPState == eTCP_LISTEN ). */
+               else
+               {
+                       /* This is not a socket in listening mode. Check for the RST
+                       flag. */
+                       if( ( ucTCPFlags & ipTCP_FLAG_RST ) != 0u )
+                       {
+                FreeRTOS_debug_printf( ( "TCP: RST received from %lxip:%u for %u\n", ulRemoteIP, xRemotePort, xLocalPort ) );
+
+                /* Implement https://tools.ietf.org/html/rfc5961#section-3.2. */
+                if( pxSocket->u.xTCP.ucTCPState == eCONNECT_SYN )
+                {
+                    /* Per the above RFC, "In the SYN-SENT state ... the RST is
+                    acceptable if the ACK field acknowledges the SYN." */
+                    if( ulAckNumber == pxSocket->u.xTCP.xTCPWindow.ulOurSequenceNumber + 1 )
+                    {
+                        vTCPStateChange( pxSocket, eCLOSED );
+                    }
+                }
+                else
+                {
+                    /* Check whether the packet matches the next expected sequence number. */
+                    if( ulSequenceNumber == pxSocket->u.xTCP.xTCPWindow.rx.ulCurrentSequenceNumber )
+                    {
+                        vTCPStateChange( pxSocket, eCLOSED );
+                    }
+                    /* Otherwise, check whether the packet is within the receive window. */
+                    else if( ulSequenceNumber > pxSocket->u.xTCP.xTCPWindow.rx.ulCurrentSequenceNumber &&
+                             ulSequenceNumber < ( pxSocket->u.xTCP.xTCPWindow.rx.ulCurrentSequenceNumber +
+                                                  pxSocket->u.xTCP.xTCPWindow.xSize.ulRxWindowLength ) )
+                    {
+                        /* Send a challenge ACK. */
+                        prvTCPSendChallengeAck( pxNetworkBuffer );
+                    }
+                }
+
+                /* Otherwise, do nothing. In any case, the packet cannot be handled. */
+                               xResult = pdFAIL;
+                       }
+                       else if( ( ( ucTCPFlags & ipTCP_FLAG_CTRL ) == ipTCP_FLAG_SYN ) && ( pxSocket->u.xTCP.ucTCPState >= eESTABLISHED ) )
+                       {
+                               /* SYN flag while this socket is already connected. */
+                               FreeRTOS_debug_printf( ( "TCP: SYN unexpected from %lxip:%u\n", ulRemoteIP, xRemotePort ) );
+
+                               /* The packet cannot be handled. */
+                               xResult = pdFAIL;
+                       }
+                       else
+                       {
+                               /* Update the copy of the TCP header only (skipping eth and IP
+                               headers).  It might be used later on, whenever data must be sent
+                               to the peer. */
+                               const BaseType_t lOffset = ( BaseType_t ) ( ipSIZE_OF_ETH_HEADER + ipSIZE_OF_IPv4_HEADER );
+                               memcpy( pxSocket->u.xTCP.xPacket.u.ucLastPacket + lOffset, pxNetworkBuffer->pucEthernetBuffer + lOffset, ipSIZE_OF_TCP_HEADER );
+                       }
+               }
+       }
+
+       if( xResult != pdFAIL )
+       {
+               /* Touch the alive timers because we received a message for this
+               socket. */
+               prvTCPTouchSocket( pxSocket );
+
+               /* Parse the TCP option(s), if present. */
+               /* _HT_ : if we're in the SYN phase, and peer does not send a MSS option,
+               then we MUST assume an MSS size of 536 bytes for backward compatibility. */
+
+               /* 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. */
+               if( ( pxTCPPacket->xTCPHeader.ucTCPOffset & TCP_OFFSET_LENGTH_BITS ) > TCP_OFFSET_STANDARD_LENGTH )
+               {
+                       prvCheckOptions( pxSocket, pxNetworkBuffer );
+               }
+
+
+               #if( ipconfigUSE_TCP_WIN == 1 )
+               {
+                       pxSocket->u.xTCP.ulWindowSize = FreeRTOS_ntohs( pxTCPPacket->xTCPHeader.usWindow );
+                       pxSocket->u.xTCP.ulWindowSize =
+                               ( pxSocket->u.xTCP.ulWindowSize << pxSocket->u.xTCP.ucPeerWinScaleFactor );
+               }
+               #endif
+
+               /* In prvTCPHandleState() the incoming messages will be handled
+               depending on the current state of the connection. */
+               if( prvTCPHandleState( pxSocket, &pxNetworkBuffer ) > 0 )
+               {
+                       /* prvTCPHandleState() has sent a message, see if there are more to
+                       be transmitted. */
+                       #if( ipconfigUSE_TCP_WIN == 1 )
+                       {
+                               prvTCPSendRepeated( pxSocket, &pxNetworkBuffer );
+                       }
+                       #endif /* ipconfigUSE_TCP_WIN */
+               }
+
+               if( pxNetworkBuffer != NULL )
+               {
+                       /* We must check if the buffer is unequal to NULL, because the
+                       socket might keep a reference to it in case a delayed ACK must be
+                       sent. */
+                       vReleaseNetworkBufferAndDescriptor( pxNetworkBuffer );
+                       pxNetworkBuffer = NULL;
+               }
+
+               /* And finally, calculate when this socket wants to be woken up. */
+               prvTCPNextTimeout ( pxSocket );
+               /* Return pdPASS to tell that the network buffer is 'consumed'. */
+               xResult = pdPASS;
+       }
+
+       /* pdPASS being returned means the buffer has been consumed. */
+       return xResult;
+}
+/*-----------------------------------------------------------*/
+
+static FreeRTOS_Socket_t *prvHandleListen( FreeRTOS_Socket_t *pxSocket, NetworkBufferDescriptor_t *pxNetworkBuffer )
+{
+TCPPacket_t * pxTCPPacket = ( TCPPacket_t * ) ( pxNetworkBuffer->pucEthernetBuffer );
+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
+       it. */
+       if( 0 != ulInitialSequenceNumber )
+       {
+               if( pxSocket->u.xTCP.bits.bReuseSocket != pdFALSE_UNSIGNED )
+               {
+                       /* The flag bReuseSocket indicates that the same instance of the
+                       listening socket should be used for the connection. */
+                       pxReturn = pxSocket;
+                       pxSocket->u.xTCP.bits.bPassQueued = pdTRUE_UNSIGNED;
+                       pxSocket->u.xTCP.pxPeerSocket = pxSocket;
+               }
+               else
+               {
+                       /* The socket does not have the bReuseSocket flag set meaning create a
+                       new socket when a connection comes in. */
+                       pxReturn = NULL;
+
+                       if( pxSocket->u.xTCP.usChildCount >= pxSocket->u.xTCP.usBacklog )
+                       {
+                               FreeRTOS_printf( ( "Check: Socket %u already has %u / %u child%s\n",
+                                       pxSocket->usLocalPort,
+                                       pxSocket->u.xTCP.usChildCount,
+                                       pxSocket->u.xTCP.usBacklog,
+                                       pxSocket->u.xTCP.usChildCount == 1 ? "" : "ren" ) );
+                               prvTCPSendReset( pxNetworkBuffer );
+                       }
+                       else
+                       {
+                               FreeRTOS_Socket_t *pxNewSocket = ( FreeRTOS_Socket_t * )
+                                       FreeRTOS_socket( FREERTOS_AF_INET, FREERTOS_SOCK_STREAM, FREERTOS_IPPROTO_TCP );
+
+                               if( ( pxNewSocket == NULL ) || ( pxNewSocket == FREERTOS_INVALID_SOCKET ) )
+                               {
+                                       FreeRTOS_debug_printf( ( "TCP: Listen: new socket failed\n" ) );
+                                       prvTCPSendReset( pxNetworkBuffer );
+                               }
+                               else if( prvTCPSocketCopy( pxNewSocket, pxSocket ) != pdFALSE )
+                               {
+                                       /* The socket will be connected immediately, no time for the
+                                       owner to setsockopt's, therefore copy properties of the server
+                                       socket to the new socket.  Only the binding might fail (due to
+                                       lack of resources). */
+                                       pxReturn = pxNewSocket;
+                               }
+                       }
+               }
+       }
+
+       if( ( 0 != ulInitialSequenceNumber ) && ( pxReturn != NULL ) )
+       {
+               pxReturn->u.xTCP.usRemotePort = FreeRTOS_htons( pxTCPPacket->xTCPHeader.usSourcePort );
+               pxReturn->u.xTCP.ulRemoteIP = FreeRTOS_htonl( pxTCPPacket->xIPHeader.ulSourceIPAddress );
+               pxReturn->u.xTCP.xTCPWindow.ulOurSequenceNumber = ulInitialSequenceNumber;
+
+               /* Here is the SYN action. */
+               pxReturn->u.xTCP.xTCPWindow.rx.ulCurrentSequenceNumber = FreeRTOS_ntohl( pxTCPPacket->xTCPHeader.ulSequenceNumber );
+               prvSocketSetMSS( pxReturn );
+
+               prvTCPCreateWindow( pxReturn );
+
+               vTCPStateChange( pxReturn, eSYN_FIRST );
+
+               /* Make a copy of the header up to the TCP header.  It is needed later
+               on, whenever data must be sent to the peer. */
+               memcpy( pxReturn->u.xTCP.xPacket.u.ucLastPacket, pxNetworkBuffer->pucEthernetBuffer, sizeof( pxReturn->u.xTCP.xPacket.u.ucLastPacket ) );
+       }
+       return pxReturn;
+}
+/*-----------------------------------------------------------*/
+
+/*
+ * Duplicates a socket after a listening socket receives a connection.
+ */
+static BaseType_t prvTCPSocketCopy( FreeRTOS_Socket_t *pxNewSocket, FreeRTOS_Socket_t *pxSocket )
+{
+struct freertos_sockaddr xAddress;
+
+       pxNewSocket->xReceiveBlockTime = pxSocket->xReceiveBlockTime;
+       pxNewSocket->xSendBlockTime = pxSocket->xSendBlockTime;
+       pxNewSocket->ucSocketOptions = pxSocket->ucSocketOptions;
+       pxNewSocket->u.xTCP.uxRxStreamSize = pxSocket->u.xTCP.uxRxStreamSize;
+       pxNewSocket->u.xTCP.uxTxStreamSize = pxSocket->u.xTCP.uxTxStreamSize;
+       pxNewSocket->u.xTCP.uxLittleSpace = pxSocket->u.xTCP.uxLittleSpace;
+       pxNewSocket->u.xTCP.uxEnoughSpace = pxSocket->u.xTCP.uxEnoughSpace;
+       pxNewSocket->u.xTCP.uxRxWinSize  = pxSocket->u.xTCP.uxRxWinSize;
+       pxNewSocket->u.xTCP.uxTxWinSize  = pxSocket->u.xTCP.uxTxWinSize;
+
+       #if( ipconfigSOCKET_HAS_USER_SEMAPHORE == 1 )
+       {
+               pxNewSocket->pxUserSemaphore = pxSocket->pxUserSemaphore;
+       }
+       #endif /* ipconfigSOCKET_HAS_USER_SEMAPHORE */
+
+       #if( ipconfigUSE_CALLBACKS == 1 )
+       {
+               /* In case call-backs are used, copy them from parent to child. */
+               pxNewSocket->u.xTCP.pxHandleConnected = pxSocket->u.xTCP.pxHandleConnected;
+               pxNewSocket->u.xTCP.pxHandleReceive = pxSocket->u.xTCP.pxHandleReceive;
+               pxNewSocket->u.xTCP.pxHandleSent = pxSocket->u.xTCP.pxHandleSent;
+       }
+       #endif /* ipconfigUSE_CALLBACKS */
+
+       #if( ipconfigSUPPORT_SELECT_FUNCTION == 1 )
+       {
+               /* Child socket of listening sockets will inherit the Socket Set
+               Otherwise the owner has no chance of including it into the set. */
+               if( pxSocket->pxSocketSet )
+               {
+                       pxNewSocket->pxSocketSet = pxSocket->pxSocketSet;
+                       pxNewSocket->xSelectBits = pxSocket->xSelectBits | eSELECT_READ | eSELECT_EXCEPT;
+               }
+       }
+       #endif /* ipconfigSUPPORT_SELECT_FUNCTION */
+
+       /* And bind it to the same local port as its parent. */
+       xAddress.sin_addr = *ipLOCAL_IP_ADDRESS_POINTER;
+       xAddress.sin_port = FreeRTOS_htons( pxSocket->usLocalPort );
+
+       #if( ipconfigTCP_HANG_PROTECTION == 1 )
+       {
+               /* Only when there is anti-hanging protection, a socket may become an
+               orphan temporarily.  Once this socket is really connected, the owner of
+               the server socket will be notified. */
+
+               /* When bPassQueued is true, the socket is an orphan until it gets
+               connected. */
+               pxNewSocket->u.xTCP.bits.bPassQueued = pdTRUE_UNSIGNED;
+               pxNewSocket->u.xTCP.pxPeerSocket = pxSocket;
+       }
+       #else
+       {
+               /* A reference to the new socket may be stored and the socket is marked
+               as 'passable'. */
+
+               /* When bPassAccept is pdTRUE_UNSIGNED this socket may be returned in a call to
+               accept(). */
+               pxNewSocket->u.xTCP.bits.bPassAccept = pdTRUE_UNSIGNED;
+               if(pxSocket->u.xTCP.pxPeerSocket == NULL )
+               {
+                       pxSocket->u.xTCP.pxPeerSocket = pxNewSocket;
+               }
+       }
+       #endif
+
+       pxSocket->u.xTCP.usChildCount++;
+
+       FreeRTOS_debug_printf( ( "Gain: Socket %u now has %u / %u child%s\n",
+               pxSocket->usLocalPort,
+               pxSocket->u.xTCP.usChildCount,
+               pxSocket->u.xTCP.usBacklog,
+               pxSocket->u.xTCP.usChildCount == 1u ? "" : "ren" ) );
+
+       /* Now bind the child socket to the same port as the listening socket. */
+       if( vSocketBind ( pxNewSocket, &xAddress, sizeof( xAddress ), pdTRUE ) != 0 )
+       {
+               FreeRTOS_debug_printf( ( "TCP: Listen: new socket bind error\n" ) );
+               vSocketClose( pxNewSocket );
+               return pdFALSE;
+       }
+
+       return pdTRUE;
+}
+/*-----------------------------------------------------------*/
+
+#if( ( ipconfigHAS_DEBUG_PRINTF != 0 ) || ( ipconfigHAS_PRINTF != 0 ) )
+
+       const char *FreeRTOS_GetTCPStateName( UBaseType_t ulState )
+       {
+               if( ulState >= ( UBaseType_t ) ARRAY_SIZE( pcStateNames ) )
+               {
+                       ulState = ( UBaseType_t ) ARRAY_SIZE( pcStateNames ) - 1u;
+               }
+               return pcStateNames[ ulState ];
+       }
+
+#endif /* ( ( ipconfigHAS_DEBUG_PRINTF != 0 ) || ( ipconfigHAS_PRINTF != 0 ) ) */
+/*-----------------------------------------------------------*/
+
+/*
+ * In the API accept(), the user asks is there is a new client?  As API's can
+ * not walk through the xBoundTCPSocketsList the IP-task will do this.
+ */
+BaseType_t xTCPCheckNewClient( FreeRTOS_Socket_t *pxSocket )
+{
+TickType_t xLocalPort = FreeRTOS_htons( pxSocket->usLocalPort );
+ListItem_t *pxIterator;
+FreeRTOS_Socket_t *pxFound;
+BaseType_t xResult = pdFALSE;
+
+       /* Here xBoundTCPSocketsList can be accessed safely IP-task is the only one
+       who has access. */
+       for( pxIterator = ( ListItem_t * ) listGET_HEAD_ENTRY( &xBoundTCPSocketsList );
+               pxIterator != ( ListItem_t * ) listGET_END_MARKER( &xBoundTCPSocketsList );
+               pxIterator = ( ListItem_t * ) listGET_NEXT( pxIterator ) )
+       {
+               if( listGET_LIST_ITEM_VALUE( pxIterator ) == xLocalPort )
+               {
+                       pxFound = ( FreeRTOS_Socket_t * ) listGET_LIST_ITEM_OWNER( pxIterator );
+                       if( ( pxFound->ucProtocol == FREERTOS_IPPROTO_TCP ) && ( pxFound->u.xTCP.bits.bPassAccept != pdFALSE_UNSIGNED ) )
+                       {
+                               pxSocket->u.xTCP.pxPeerSocket = pxFound;
+                               FreeRTOS_debug_printf( ( "xTCPCheckNewClient[0]: client on port %u\n", pxSocket->usLocalPort ) );
+                               xResult = pdTRUE;
+                               break;
+                       }
+               }
+       }
+       return xResult;
+}
+/*-----------------------------------------------------------*/
+
+#endif /* ipconfigUSE_TCP == 1 */
+
+/* Provide access to private members for testing. */
+#ifdef AMAZON_FREERTOS_ENABLE_UNIT_TESTS
+       #include "iot_freertos_tcp_test_access_tcp_define.h"
+#endif
+
+/* Provide access to private members for verification. */
+#ifdef FREERTOS_TCP_ENABLE_VERIFICATION
+       #include "aws_freertos_tcp_verification_access_tcp_define.h"
+#endif
+
index cda8acd1cea63bc755ede7e0ee4e223ab5a901d7..8040880092d4a3cfbccb8a132a65ffbf0d5223d1 100644 (file)
-/*\r
- * FreeRTOS+TCP V2.2.0\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://aws.amazon.com/freertos\r
- * http://www.FreeRTOS.org\r
- */\r
-\r
-/*\r
- * FreeRTOS_TCP_WIN.c\r
- * Module which handles the TCP windowing schemes for FreeRTOS+TCP.  Many\r
- * functions have two versions - one for FreeRTOS+TCP (full) and one for\r
- * FreeRTOS+TCP (lite).\r
- *\r
- * In this module all ports and IP addresses and sequence numbers are\r
- * being stored in host byte-order.\r
- */\r
-\r
-/* Standard includes. */\r
-#include <stdint.h>\r
-\r
-/* FreeRTOS includes. */\r
-#include "FreeRTOS.h"\r
-#include "task.h"\r
-#include "queue.h"\r
-#include "semphr.h"\r
-\r
-/* FreeRTOS+TCP includes. */\r
-#include "FreeRTOS_UDP_IP.h"\r
-#include "FreeRTOS_IP.h"\r
-#include "FreeRTOS_Sockets.h"\r
-#include "FreeRTOS_IP_Private.h"\r
-#include "NetworkBufferManagement.h"\r
-#include "FreeRTOS_TCP_WIN.h"\r
-\r
-/* Constants used for Smoothed Round Trip Time (SRTT). */\r
-#define        winSRTT_INCREMENT_NEW           2\r
-#define winSRTT_INCREMENT_CURRENT      6\r
-#define        winSRTT_DECREMENT_NEW           1\r
-#define winSRTT_DECREMENT_CURRENT      7\r
-#define winSRTT_CAP_mS                         50\r
-\r
-#if( ipconfigUSE_TCP_WIN == 1 )\r
-\r
-       #define xTCPWindowRxNew( pxWindow, ulSequenceNumber, lCount ) xTCPWindowNew( pxWindow, ulSequenceNumber, lCount, pdTRUE )\r
-\r
-       #define xTCPWindowTxNew( pxWindow, ulSequenceNumber, lCount ) xTCPWindowNew( pxWindow, ulSequenceNumber, lCount, pdFALSE )\r
-\r
-       /* The code to send a single Selective ACK (SACK):\r
-        * NOP (0x01), NOP (0x01), SACK (0x05), LEN (0x0a),\r
-        * followed by a lower and a higher sequence number,\r
-        * where LEN is 2 + 2*4 = 10 bytes. */\r
-       #if( ipconfigBYTE_ORDER == pdFREERTOS_BIG_ENDIAN )\r
-               #define OPTION_CODE_SINGLE_SACK         ( 0x0101050aUL )\r
-       #else\r
-               #define OPTION_CODE_SINGLE_SACK         ( 0x0a050101UL )\r
-       #endif\r
-\r
-       /* Normal retransmission:\r
-        * A packet will be retransmitted after a Retransmit Time-Out (RTO).\r
-        * Fast retransmission:\r
-        * When 3 packets with a higher sequence number have been acknowledged\r
-        * by the peer, it is very unlikely a current packet will ever arrive.\r
-        * It will be retransmitted far before the RTO.\r
-        */\r
-       #define DUPLICATE_ACKS_BEFORE_FAST_RETRANSMIT           ( 3u )\r
-\r
-       /* If there have been several retransmissions (4), decrease the\r
-        * size of the transmission window to at most 2 times MSS.\r
-        */\r
-       #define MAX_TRANSMIT_COUNT_USING_LARGE_WINDOW           ( 4u )\r
-\r
-#endif /* configUSE_TCP_WIN */\r
-/*-----------------------------------------------------------*/\r
-\r
-extern void vListInsertGeneric( List_t * const pxList, ListItem_t * const pxNewListItem, MiniListItem_t * const pxWhere );\r
-\r
-/*\r
- * All TCP sockets share a pool of segment descriptors (TCPSegment_t)\r
- * Available descriptors are stored in the 'xSegmentList'\r
- * When a socket owns a descriptor, it will either be stored in\r
- * 'xTxSegments' or 'xRxSegments'\r
- * As soon as a package has been confirmed, the descriptor will be returned\r
- * to the segment pool\r
- */\r
-#if( ipconfigUSE_TCP_WIN == 1 )\r
-       static BaseType_t prvCreateSectors( void );\r
-#endif /* ipconfigUSE_TCP_WIN == 1 */\r
-\r
-/*\r
- * Find a segment with a given sequence number in the list of received\r
- * segments: 'pxWindow->xRxSegments'.\r
- */\r
-#if( ipconfigUSE_TCP_WIN == 1 )\r
-       static TCPSegment_t *xTCPWindowRxFind( TCPWindow_t *pxWindow, uint32_t ulSequenceNumber );\r
-#endif /* ipconfigUSE_TCP_WIN == 1 */\r
-\r
-/*\r
- * Allocate a new segment\r
- * The socket will borrow all segments from a common pool: 'xSegmentList',\r
- * which is a list of 'TCPSegment_t'\r
- */\r
-#if( ipconfigUSE_TCP_WIN == 1 )\r
-       static TCPSegment_t *xTCPWindowNew( TCPWindow_t *pxWindow, uint32_t ulSequenceNumber, int32_t lCount, BaseType_t xIsForRx );\r
-#endif /* ipconfigUSE_TCP_WIN == 1 */\r
-\r
-/* When the peer has a close request (FIN flag), the driver will check if\r
- * there are missing packets in the Rx-queue\r
- * It will accept the closure of the connection if both conditions are true:\r
- * - the Rx-queue is empty\r
- * - we've ACK'd the highest Rx sequence number seen\r
- */\r
-#if( ipconfigUSE_TCP_WIN == 1 )\r
-       BaseType_t xTCPWindowRxEmpty( TCPWindow_t *pxWindow );\r
-#endif /* ipconfigUSE_TCP_WIN == 1 */\r
-\r
-/*\r
- * Detaches and returns the head of a queue\r
- */\r
-#if( ipconfigUSE_TCP_WIN == 1 )\r
-       static TCPSegment_t *xTCPWindowGetHead( List_t *pxList );\r
-#endif /* ipconfigUSE_TCP_WIN == 1 */\r
-\r
-/*\r
- * Returns the head of a queue but it won't be detached\r
- */\r
-#if( ipconfigUSE_TCP_WIN == 1 )\r
-       static TCPSegment_t *xTCPWindowPeekHead( List_t *pxList );\r
-#endif /* ipconfigUSE_TCP_WIN == 1 */\r
-\r
-/*\r
- *  Free entry pxSegment because it's not used anymore\r
- *     The ownership will be passed back to the segment pool\r
- */\r
-#if( ipconfigUSE_TCP_WIN == 1 )\r
-       static void vTCPWindowFree( TCPSegment_t *pxSegment );\r
-#endif /* ipconfigUSE_TCP_WIN == 1 */\r
-\r
-/*\r
- * A segment has been received with sequence number 'ulSequenceNumber', where\r
- * 'ulCurrentSequenceNumber == ulSequenceNumber', which means that exactly this\r
- * segment was expected.  xTCPWindowRxConfirm() will check if there is already\r
- * another segment with a sequence number between (ulSequenceNumber) and\r
- * (ulSequenceNumber+xLength).  Normally none will be found, because the next Rx\r
- * segment should have a sequence number equal to '(ulSequenceNumber+xLength)'.\r
- */\r
-#if( ipconfigUSE_TCP_WIN == 1 )\r
-       static TCPSegment_t *xTCPWindowRxConfirm( TCPWindow_t *pxWindow, uint32_t ulSequenceNumber, uint32_t ulLength );\r
-#endif /* ipconfigUSE_TCP_WIN == 1 */\r
-\r
-/*\r
- * FreeRTOS+TCP stores data in circular buffers.  Calculate the next position to\r
- * store.\r
- */\r
-#if( ipconfigUSE_TCP_WIN == 1 )\r
-       static int32_t lTCPIncrementTxPosition( int32_t lPosition, int32_t lMax, int32_t lCount );\r
-#endif /* ipconfigUSE_TCP_WIN == 1 */\r
-\r
-/*\r
- * This function will look if there is new transmission data.  It will return\r
- * true if there is data to be sent.\r
- */\r
-#if( ipconfigUSE_TCP_WIN == 1 )\r
-       static BaseType_t prvTCPWindowTxHasSpace( TCPWindow_t *pxWindow, uint32_t ulWindowSize );\r
-#endif /* ipconfigUSE_TCP_WIN == 1 */\r
-\r
-/*\r
- * An acknowledge was received.  See if some outstanding data may be removed\r
- * from the transmission queue(s).\r
- */\r
-#if( ipconfigUSE_TCP_WIN == 1 )\r
-       static uint32_t prvTCPWindowTxCheckAck( TCPWindow_t *pxWindow, uint32_t ulFirst, uint32_t ulLast );\r
-#endif /* ipconfigUSE_TCP_WIN == 1 */\r
-\r
-/*\r
- * A higher Tx block has been acknowledged.  Now iterate through the xWaitQueue\r
- * to find a possible condition for a FAST retransmission.\r
- */\r
-#if( ipconfigUSE_TCP_WIN == 1 )\r
-       static uint32_t prvTCPWindowFastRetransmit( TCPWindow_t *pxWindow, uint32_t ulFirst );\r
-#endif /* ipconfigUSE_TCP_WIN == 1 */\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-/* TCP segment pool. */\r
-#if( ipconfigUSE_TCP_WIN == 1 )\r
-       static TCPSegment_t *xTCPSegments = NULL;\r
-#endif /* ipconfigUSE_TCP_WIN == 1 */\r
-\r
-/* List of free TCP segments. */\r
-#if( ipconfigUSE_TCP_WIN == 1 )\r
-       static List_t xSegmentList;\r
-#endif\r
-\r
-/* Logging verbosity level. */\r
-BaseType_t xTCPWindowLoggingLevel = 0;\r
-\r
-#if( ipconfigUSE_TCP_WIN == 1 )\r
-       /* Some 32-bit arithmetic: comparing sequence numbers */\r
-       static portINLINE BaseType_t xSequenceLessThanOrEqual( uint32_t a, uint32_t b );\r
-       static portINLINE BaseType_t xSequenceLessThanOrEqual( uint32_t a, uint32_t b )\r
-       {\r
-               /* Test if a <= b\r
-               Return true if the unsigned subtraction of (b-a) doesn't generate an\r
-               arithmetic overflow. */\r
-               return ( ( b - a ) & 0x80000000UL ) == 0UL;\r
-       }\r
-#endif /* ipconfigUSE_TCP_WIN */\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_TCP_WIN == 1 )\r
-       static portINLINE BaseType_t xSequenceLessThan( uint32_t a, uint32_t b );\r
-       static portINLINE BaseType_t xSequenceLessThan( uint32_t a, uint32_t b )\r
-       {\r
-               /* Test if a < b */\r
-               return ( ( b - a - 1UL ) & 0x80000000UL ) == 0UL;\r
-       }\r
-#endif /* ipconfigUSE_TCP_WIN */\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_TCP_WIN == 1 )\r
-       static portINLINE BaseType_t xSequenceGreaterThan( uint32_t a, uint32_t b );\r
-       static portINLINE BaseType_t xSequenceGreaterThan( uint32_t a, uint32_t b )\r
-       {\r
-               /* Test if a > b */\r
-               return ( ( a - b - 1UL ) & 0x80000000UL ) == 0UL;\r
-       }\r
-#endif /* ipconfigUSE_TCP_WIN */\r
-\r
-/*-----------------------------------------------------------*/\r
-static portINLINE BaseType_t xSequenceGreaterThanOrEqual( uint32_t a, uint32_t b );\r
-static portINLINE BaseType_t xSequenceGreaterThanOrEqual( uint32_t a, uint32_t b )\r
-{\r
-       /* Test if a >= b */\r
-       return ( ( a - b ) & 0x80000000UL ) == 0UL;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_TCP_WIN == 1 )\r
-       static portINLINE void vListInsertFifo( List_t * const pxList, ListItem_t * const pxNewListItem );\r
-       static portINLINE void vListInsertFifo( List_t * const pxList, ListItem_t * const pxNewListItem )\r
-       {\r
-               vListInsertGeneric( pxList, pxNewListItem, &pxList->xListEnd );\r
-       }\r
-#endif\r
-/*-----------------------------------------------------------*/\r
-\r
-static portINLINE void vTCPTimerSet( TCPTimer_t *pxTimer );\r
-static portINLINE void vTCPTimerSet( TCPTimer_t *pxTimer )\r
-{\r
-       pxTimer->ulBorn = xTaskGetTickCount ( );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static portINLINE uint32_t ulTimerGetAge( TCPTimer_t *pxTimer );\r
-static portINLINE uint32_t ulTimerGetAge( TCPTimer_t *pxTimer )\r
-{\r
-       return ( ( xTaskGetTickCount() - pxTimer->ulBorn ) * portTICK_PERIOD_MS );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-/* _HT_ GCC (using the settings that I'm using) checks for every public function if it is\r
-preceded by a prototype. Later this prototype will be located in list.h? */\r
-\r
-extern void vListInsertGeneric( List_t * const pxList, ListItem_t * const pxNewListItem, MiniListItem_t * const pxWhere );\r
-\r
-void vListInsertGeneric( List_t * const pxList, ListItem_t * const pxNewListItem, MiniListItem_t * const pxWhere )\r
-{\r
-       /* Insert a new list item into pxList, it does not sort the list,\r
-       but it puts the item just before xListEnd, so it will be the last item\r
-       returned by listGET_HEAD_ENTRY() */\r
-       pxNewListItem->pxNext = (struct xLIST_ITEM * configLIST_VOLATILE)pxWhere;\r
-       pxNewListItem->pxPrevious = pxWhere->pxPrevious;\r
-       pxWhere->pxPrevious->pxNext = pxNewListItem;\r
-       pxWhere->pxPrevious = pxNewListItem;\r
-\r
-       /* Remember which list the item is in. */\r
-       listLIST_ITEM_CONTAINER( pxNewListItem ) = ( void * ) pxList;\r
-\r
-       ( pxList->uxNumberOfItems )++;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_TCP_WIN == 1 )\r
-\r
-       static BaseType_t prvCreateSectors( void )\r
-       {\r
-       BaseType_t xIndex, xReturn;\r
-\r
-               /* Allocate space for 'xTCPSegments' and store them in 'xSegmentList'. */\r
-\r
-               vListInitialise( &xSegmentList );\r
-               xTCPSegments = ( TCPSegment_t * ) pvPortMallocLarge( ipconfigTCP_WIN_SEG_COUNT * sizeof( xTCPSegments[ 0 ] ) );\r
-\r
-               if( xTCPSegments == NULL )\r
-               {\r
-                       FreeRTOS_debug_printf( ( "prvCreateSectors: malloc %lu failed\n",\r
-                               ipconfigTCP_WIN_SEG_COUNT * sizeof( xTCPSegments[ 0 ] ) ) );\r
-\r
-                       xReturn = pdFAIL;\r
-               }\r
-               else\r
-               {\r
-                       /* Clear the allocated space. */\r
-                       memset( xTCPSegments, '\0', ipconfigTCP_WIN_SEG_COUNT * sizeof( xTCPSegments[ 0 ] ) );\r
-\r
-                       for( xIndex = 0; xIndex < ipconfigTCP_WIN_SEG_COUNT; xIndex++ )\r
-                       {\r
-                               /* Could call vListInitialiseItem here but all data has been\r
-                               nulled already.  Set the owner to a segment descriptor. */\r
-                               listSET_LIST_ITEM_OWNER( &( xTCPSegments[ xIndex ].xListItem ), ( void* ) &( xTCPSegments[ xIndex ] ) );\r
-                               listSET_LIST_ITEM_OWNER( &( xTCPSegments[ xIndex ].xQueueItem ), ( void* ) &( xTCPSegments[ xIndex ] ) );\r
-\r
-                               /* And add it to the pool of available segments */\r
-                               vListInsertFifo( &xSegmentList, &( xTCPSegments[xIndex].xListItem ) );\r
-                       }\r
-\r
-                       xReturn = pdPASS;\r
-               }\r
-\r
-               return xReturn;\r
-       }\r
-\r
-#endif /* ipconfigUSE_TCP_WIN == 1 */\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_TCP_WIN == 1 )\r
-\r
-       static TCPSegment_t *xTCPWindowRxFind( TCPWindow_t *pxWindow, uint32_t ulSequenceNumber )\r
-       {\r
-       const ListItem_t *pxIterator;\r
-       const MiniListItem_t* pxEnd;\r
-       TCPSegment_t *pxSegment, *pxReturn = NULL;\r
-\r
-               /* Find a segment with a given sequence number in the list of received\r
-               segments. */\r
-\r
-               pxEnd = ( const MiniListItem_t* )listGET_END_MARKER( &pxWindow->xRxSegments );\r
-\r
-               for( pxIterator  = ( const ListItem_t * ) listGET_NEXT( pxEnd );\r
-                        pxIterator != ( const ListItem_t * ) pxEnd;\r
-                        pxIterator  = ( const ListItem_t * ) listGET_NEXT( pxIterator ) )\r
-               {\r
-                       pxSegment = ( TCPSegment_t * ) listGET_LIST_ITEM_OWNER( pxIterator );\r
-\r
-                       if( pxSegment->ulSequenceNumber == ulSequenceNumber )\r
-                       {\r
-                               pxReturn = pxSegment;\r
-                               break;\r
-                       }\r
-               }\r
-\r
-               return pxReturn;\r
-       }\r
-\r
-#endif /* ipconfigUSE_TCP_WIN == 1 */\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_TCP_WIN == 1 )\r
-\r
-       static TCPSegment_t *xTCPWindowNew( TCPWindow_t *pxWindow, uint32_t ulSequenceNumber, int32_t lCount, BaseType_t xIsForRx )\r
-       {\r
-       TCPSegment_t *pxSegment;\r
-       ListItem_t * pxItem;\r
-\r
-               /* Allocate a new segment.  The socket will borrow all segments from a\r
-               common pool: 'xSegmentList', which is a list of 'TCPSegment_t' */\r
-               if( listLIST_IS_EMPTY( &xSegmentList ) != pdFALSE )\r
-               {\r
-                       /* If the TCP-stack runs out of segments, you might consider\r
-                       increasing 'ipconfigTCP_WIN_SEG_COUNT'. */\r
-                       FreeRTOS_debug_printf( ( "xTCPWindow%cxNew: Error: all segments occupied\n", xIsForRx ? 'R' : 'T' ) );\r
-                       pxSegment = NULL;\r
-               }\r
-               else\r
-               {\r
-                       /* Pop the item at the head of the list.  Semaphore protection is\r
-                       not required as only the IP task will call these functions.  */\r
-                       pxItem = ( ListItem_t * ) listGET_HEAD_ENTRY( &xSegmentList );\r
-                       pxSegment = ( TCPSegment_t * ) listGET_LIST_ITEM_OWNER( pxItem );\r
-\r
-                       configASSERT( pxItem != NULL );\r
-                       configASSERT( pxSegment != NULL );\r
-\r
-                       /* Remove the item from xSegmentList. */\r
-                       uxListRemove( pxItem );\r
-\r
-                       /* Add it to either the connections' Rx or Tx queue. */\r
-                       vListInsertFifo( xIsForRx ? &pxWindow->xRxSegments : &pxWindow->xTxSegments, pxItem );\r
-\r
-                       /* And set the segment's timer to zero */\r
-                       vTCPTimerSet( &pxSegment->xTransmitTimer );\r
-\r
-                       pxSegment->u.ulFlags = 0;\r
-                       pxSegment->u.bits.bIsForRx = ( xIsForRx != 0 );\r
-                       pxSegment->lMaxLength = lCount;\r
-                       pxSegment->lDataLength = lCount;\r
-                       pxSegment->ulSequenceNumber = ulSequenceNumber;\r
-                       #if( ipconfigHAS_DEBUG_PRINTF != 0 )\r
-                       {\r
-                       static UBaseType_t xLowestLength = ipconfigTCP_WIN_SEG_COUNT;\r
-                       UBaseType_t xLength = listCURRENT_LIST_LENGTH( &xSegmentList );\r
-\r
-                               if( xLowestLength > xLength )\r
-                               {\r
-                                       xLowestLength = xLength;\r
-                               }\r
-                       }\r
-                       #endif /* ipconfigHAS_DEBUG_PRINTF */\r
-               }\r
-\r
-               return pxSegment;\r
-       }\r
-\r
-#endif /* ipconfigUSE_TCP_WIN == 1 */\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_TCP_WIN == 1 )\r
-\r
-       BaseType_t xTCPWindowRxEmpty( TCPWindow_t *pxWindow )\r
-       {\r
-       BaseType_t xReturn;\r
-\r
-               /* When the peer has a close request (FIN flag), the driver will check\r
-               if there are missing packets in the Rx-queue.  It will accept the\r
-               closure of the connection if both conditions are true:\r
-                 - the Rx-queue is empty\r
-                 - the highest Rx sequence number has been ACK'ed */\r
-               if( listLIST_IS_EMPTY( ( &pxWindow->xRxSegments ) ) == pdFALSE )\r
-               {\r
-                       /* Rx data has been stored while earlier packets were missing. */\r
-                       xReturn = pdFALSE;\r
-               }\r
-               else if( xSequenceGreaterThanOrEqual( pxWindow->rx.ulCurrentSequenceNumber, pxWindow->rx.ulHighestSequenceNumber ) != pdFALSE )\r
-               {\r
-                       /* No Rx packets are being stored and the highest sequence number\r
-                       that has been received has been ACKed. */\r
-                       xReturn = pdTRUE;\r
-               }\r
-               else\r
-               {\r
-                       FreeRTOS_debug_printf( ( "xTCPWindowRxEmpty: cur %lu highest %lu (empty)\n",\r
-                               ( pxWindow->rx.ulCurrentSequenceNumber - pxWindow->rx.ulFirstSequenceNumber ),\r
-                               ( pxWindow->rx.ulHighestSequenceNumber - pxWindow->rx.ulFirstSequenceNumber ) ) );\r
-                       xReturn = pdFALSE;\r
-               }\r
-\r
-               return xReturn;\r
-       }\r
-\r
-#endif /* ipconfigUSE_TCP_WIN == 1 */\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_TCP_WIN == 1 )\r
-\r
-       static TCPSegment_t *xTCPWindowGetHead( List_t *pxList )\r
-       {\r
-       TCPSegment_t *pxSegment;\r
-       ListItem_t * pxItem;\r
-\r
-               /* Detaches and returns the head of a queue. */\r
-               if( listLIST_IS_EMPTY( pxList ) != pdFALSE )\r
-               {\r
-                       pxSegment = NULL;\r
-               }\r
-               else\r
-               {\r
-                       pxItem = ( ListItem_t * ) listGET_HEAD_ENTRY( pxList );\r
-                       pxSegment = ( TCPSegment_t * ) listGET_LIST_ITEM_OWNER( pxItem );\r
-\r
-                       uxListRemove( pxItem );\r
-               }\r
-\r
-               return pxSegment;\r
-       }\r
-\r
-#endif /* ipconfigUSE_TCP_WIN == 1 */\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_TCP_WIN == 1 )\r
-\r
-       static TCPSegment_t *xTCPWindowPeekHead( List_t *pxList )\r
-       {\r
-       ListItem_t *pxItem;\r
-       TCPSegment_t *pxReturn;\r
-\r
-               /* Returns the head of a queue but it won't be detached. */\r
-               if( listLIST_IS_EMPTY( pxList ) != pdFALSE )\r
-               {\r
-                       pxReturn = NULL;\r
-               }\r
-               else\r
-               {\r
-                       pxItem = ( ListItem_t * ) listGET_HEAD_ENTRY( pxList );\r
-                       pxReturn = ( TCPSegment_t * ) listGET_LIST_ITEM_OWNER( pxItem );\r
-               }\r
-\r
-               return pxReturn;\r
-       }\r
-\r
-#endif /* ipconfigUSE_TCP_WIN == 1 */\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_TCP_WIN == 1 )\r
-\r
-       static void vTCPWindowFree( TCPSegment_t *pxSegment )\r
-       {\r
-               /*  Free entry pxSegment because it's not used any more.  The ownership\r
-               will be passed back to the segment pool.\r
-\r
-               Unlink it from one of the queues, if any. */\r
-               if( listLIST_ITEM_CONTAINER( &( pxSegment->xQueueItem ) ) != NULL )\r
-               {\r
-                       uxListRemove( &( pxSegment->xQueueItem ) );\r
-               }\r
-\r
-               pxSegment->ulSequenceNumber = 0u;\r
-               pxSegment->lDataLength = 0l;\r
-               pxSegment->u.ulFlags = 0u;\r
-\r
-               /* Take it out of xRxSegments/xTxSegments */\r
-               if( listLIST_ITEM_CONTAINER( &( pxSegment->xListItem ) ) != NULL )\r
-               {\r
-                       uxListRemove( &( pxSegment->xListItem ) );\r
-               }\r
-\r
-               /* Return it to xSegmentList */\r
-               vListInsertFifo( &xSegmentList, &( pxSegment->xListItem ) );\r
-       }\r
-\r
-#endif /* ipconfigUSE_TCP_WIN == 1 */\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_TCP_WIN == 1 )\r
-\r
-       void vTCPWindowDestroy( TCPWindow_t *pxWindow )\r
-       {\r
-       List_t * pxSegments;\r
-       BaseType_t xRound;\r
-       TCPSegment_t *pxSegment;\r
-\r
-               /*  Destroy a window.  A TCP window doesn't serve any more.  Return all\r
-               owned segments to the pool.  In order to save code, it will make 2 rounds,\r
-               one to remove the segments from xRxSegments, and a second round to clear\r
-               xTxSegments*/\r
-               for( xRound = 0; xRound < 2; xRound++ )\r
-               {\r
-                       if( xRound != 0 )\r
-                       {\r
-                               pxSegments = &( pxWindow->xRxSegments );\r
-                       }\r
-                       else\r
-                       {\r
-                               pxSegments = &( pxWindow->xTxSegments );\r
-                       }\r
-\r
-                       if( listLIST_IS_INITIALISED( pxSegments ) != pdFALSE )\r
-                       {\r
-                               while( listCURRENT_LIST_LENGTH( pxSegments ) > 0U )\r
-                               {\r
-                                       pxSegment = ( TCPSegment_t * ) listGET_OWNER_OF_HEAD_ENTRY( pxSegments );\r
-                                       vTCPWindowFree( pxSegment );\r
-                               }\r
-                       }\r
-               }\r
-       }\r
-\r
-#endif /* ipconfigUSE_TCP_WIN == 1 */\r
-/*-----------------------------------------------------------*/\r
-\r
-void vTCPWindowCreate( TCPWindow_t *pxWindow, uint32_t ulRxWindowLength,\r
-       uint32_t ulTxWindowLength, uint32_t ulAckNumber, uint32_t ulSequenceNumber, uint32_t ulMSS )\r
-{\r
-       /* Create and initialize a window. */\r
-\r
-       #if( ipconfigUSE_TCP_WIN == 1 )\r
-       {\r
-               if( xTCPSegments == NULL )\r
-               {\r
-                       prvCreateSectors();\r
-               }\r
-\r
-               vListInitialise( &pxWindow->xTxSegments );\r
-               vListInitialise( &pxWindow->xRxSegments );\r
-\r
-               vListInitialise( &pxWindow->xPriorityQueue );                   /* Priority queue: segments which must be sent immediately */\r
-               vListInitialise( &pxWindow->xTxQueue   );                       /* Transmit queue: segments queued for transmission */\r
-               vListInitialise( &pxWindow->xWaitQueue );                       /* Waiting queue:  outstanding segments */\r
-       }\r
-       #endif /* ipconfigUSE_TCP_WIN == 1 */\r
-\r
-       if( xTCPWindowLoggingLevel != 0 )\r
-       {\r
-               FreeRTOS_debug_printf( ( "vTCPWindowCreate: for WinLen = Rx/Tx: %lu/%lu\n",\r
-                       ulRxWindowLength, ulTxWindowLength ) );\r
-       }\r
-\r
-       pxWindow->xSize.ulRxWindowLength = ulRxWindowLength;\r
-       pxWindow->xSize.ulTxWindowLength = ulTxWindowLength;\r
-\r
-       vTCPWindowInit( pxWindow, ulAckNumber, ulSequenceNumber, ulMSS );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-void vTCPWindowInit( TCPWindow_t *pxWindow, uint32_t ulAckNumber, uint32_t ulSequenceNumber, uint32_t ulMSS )\r
-{\r
-const int32_t l500ms = 500;\r
-\r
-       pxWindow->u.ulFlags = 0ul;\r
-       pxWindow->u.bits.bHasInit = pdTRUE_UNSIGNED;\r
-\r
-       if( ulMSS != 0ul )\r
-       {\r
-               if( pxWindow->usMSSInit != 0u )\r
-               {\r
-                       pxWindow->usMSSInit = ( uint16_t ) ulMSS;\r
-               }\r
-\r
-               if( ( ulMSS < ( uint32_t ) pxWindow->usMSS ) || ( pxWindow->usMSS == 0u ) )\r
-               {\r
-                       pxWindow->xSize.ulRxWindowLength = ( pxWindow->xSize.ulRxWindowLength / ulMSS ) * ulMSS;\r
-                       pxWindow->usMSS = ( uint16_t ) ulMSS;\r
-               }\r
-       }\r
-\r
-       #if( ipconfigUSE_TCP_WIN == 0 )\r
-       {\r
-               pxWindow->xTxSegment.lMaxLength = ( int32_t ) pxWindow->usMSS;\r
-       }\r
-       #endif /* ipconfigUSE_TCP_WIN == 1 */\r
-\r
-       /*Start with a timeout of 2 * 500 ms (1 sec). */\r
-       pxWindow->lSRTT = l500ms;\r
-\r
-       /* Just for logging, to print relative sequence numbers. */\r
-       pxWindow->rx.ulFirstSequenceNumber = ulAckNumber;\r
-\r
-       /* The segment asked for in the next transmission. */\r
-       pxWindow->rx.ulCurrentSequenceNumber = ulAckNumber;\r
-\r
-       /* The right-hand side of the receive window. */\r
-       pxWindow->rx.ulHighestSequenceNumber = ulAckNumber;\r
-\r
-       pxWindow->tx.ulFirstSequenceNumber = ulSequenceNumber;\r
-\r
-       /* The segment asked for in next transmission. */\r
-       pxWindow->tx.ulCurrentSequenceNumber = ulSequenceNumber;\r
-\r
-       /* The sequence number given to the next outgoing byte to be added is\r
-       maintained by lTCPWindowTxAdd(). */\r
-       pxWindow->ulNextTxSequenceNumber = ulSequenceNumber;\r
-\r
-       /* The right-hand side of the transmit window. */\r
-       pxWindow->tx.ulHighestSequenceNumber = ulSequenceNumber;\r
-       pxWindow->ulOurSequenceNumber = ulSequenceNumber;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_TCP_WIN == 1 )\r
-\r
-    void vTCPSegmentCleanup( void )\r
-    {\r
-        /* Free and clear the TCP segments pointer. This function should only be called\r
-         * once FreeRTOS+TCP will no longer be used. No thread-safety is provided for this\r
-         * function. */\r
-        if( xTCPSegments != NULL )\r
-        {\r
-            vPortFreeLarge( xTCPSegments );\r
-            xTCPSegments = NULL;\r
-        }\r
-    }\r
-\r
-#endif /* ipconfgiUSE_TCP_WIN == 1 */\r
-/*-----------------------------------------------------------*/\r
-\r
-/*=============================================================================\r
- *\r
- *                ######        #    #\r
- *                 #    #       #    #\r
- *                 #    #       #    #\r
- *                 #    #        ####\r
- *                 ######         ##\r
- *                 #  ##         ####\r
- *                 #   #        #    #\r
- *                 #    #       #    #\r
- *                ###  ##       #    #\r
- * Rx functions\r
- *\r
- *=============================================================================*/\r
-\r
-#if( ipconfigUSE_TCP_WIN == 1 )\r
-\r
-       static TCPSegment_t *xTCPWindowRxConfirm( TCPWindow_t *pxWindow, uint32_t ulSequenceNumber, uint32_t ulLength )\r
-       {\r
-       TCPSegment_t *pxBest = NULL;\r
-       const ListItem_t *pxIterator;\r
-       uint32_t ulNextSequenceNumber = ulSequenceNumber + ulLength;\r
-       const MiniListItem_t* pxEnd = ( const MiniListItem_t* ) listGET_END_MARKER( &pxWindow->xRxSegments );\r
-       TCPSegment_t *pxSegment;\r
-\r
-               /* A segment has been received with sequence number 'ulSequenceNumber',\r
-               where 'ulCurrentSequenceNumber == ulSequenceNumber', which means that\r
-               exactly this segment was expected.  xTCPWindowRxConfirm() will check if\r
-               there is already another segment with a sequence number between (ulSequenceNumber)\r
-               and (ulSequenceNumber+ulLength).  Normally none will be found, because\r
-               the next RX segment should have a sequence number equal to\r
-               '(ulSequenceNumber+ulLength)'. */\r
-\r
-               /* Iterate through all RX segments that are stored: */\r
-               for( pxIterator  = ( const ListItem_t * ) listGET_NEXT( pxEnd );\r
-                        pxIterator != ( const ListItem_t * ) pxEnd;\r
-                        pxIterator  = ( const ListItem_t * ) listGET_NEXT( pxIterator ) )\r
-               {\r
-                       pxSegment = ( TCPSegment_t * ) listGET_LIST_ITEM_OWNER( pxIterator );\r
-                       /* And see if there is a segment for which:\r
-                       'ulSequenceNumber' <= 'pxSegment->ulSequenceNumber' < 'ulNextSequenceNumber'\r
-                       If there are more matching segments, the one with the lowest sequence number\r
-                       shall be taken */\r
-                       if( ( xSequenceGreaterThanOrEqual( pxSegment->ulSequenceNumber, ulSequenceNumber ) != 0 ) &&\r
-                               ( xSequenceLessThan( pxSegment->ulSequenceNumber, ulNextSequenceNumber ) != 0 ) )\r
-                       {\r
-                               if( ( pxBest == NULL ) || ( xSequenceLessThan( pxSegment->ulSequenceNumber, pxBest->ulSequenceNumber ) != 0 ) )\r
-                               {\r
-                                       pxBest = pxSegment;\r
-                               }\r
-                       }\r
-               }\r
-\r
-               if( ( pxBest != NULL ) &&\r
-                       ( ( pxBest->ulSequenceNumber != ulSequenceNumber ) || ( pxBest->lDataLength != ( int32_t ) ulLength ) ) )\r
-               {\r
-                       FreeRTOS_flush_logging();\r
-                       FreeRTOS_debug_printf( ( "xTCPWindowRxConfirm[%u]: search %lu (+%ld=%lu) found %lu (+%ld=%lu)\n",\r
-                               pxWindow->usPeerPortNumber,\r
-                               ulSequenceNumber - pxWindow->rx.ulFirstSequenceNumber,\r
-                               ulLength,\r
-                               ulSequenceNumber + ulLength - pxWindow->rx.ulFirstSequenceNumber,\r
-                               pxBest->ulSequenceNumber - pxWindow->rx.ulFirstSequenceNumber,\r
-                               pxBest->lDataLength,\r
-                               pxBest->ulSequenceNumber + ( ( uint32_t ) pxBest->lDataLength ) - pxWindow->rx.ulFirstSequenceNumber ) );\r
-               }\r
-\r
-               return pxBest;\r
-       }\r
-\r
-#endif /* ipconfgiUSE_TCP_WIN == 1 */\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_TCP_WIN == 1 )\r
-\r
-       int32_t lTCPWindowRxCheck( TCPWindow_t *pxWindow, uint32_t ulSequenceNumber, uint32_t ulLength, uint32_t ulSpace )\r
-       {\r
-       uint32_t ulCurrentSequenceNumber, ulLast, ulSavedSequenceNumber;\r
-       int32_t lReturn, lDistance;\r
-       TCPSegment_t *pxFound;\r
-\r
-               /* If lTCPWindowRxCheck( ) returns == 0, the packet will be passed\r
-               directly to user (segment is expected).  If it returns a positive\r
-               number, an earlier packet is missing, but this packet may be stored.\r
-               If negative, the packet has already been stored, or it is out-of-order,\r
-               or there is not enough space.\r
-\r
-               As a side-effect, pxWindow->ulUserDataLength will get set to non-zero,\r
-               if more Rx data may be passed to the user after this packet. */\r
-\r
-               ulCurrentSequenceNumber = pxWindow->rx.ulCurrentSequenceNumber;\r
-\r
-               /* For Selective Ack (SACK), used when out-of-sequence data come in. */\r
-               pxWindow->ucOptionLength = 0u;\r
-\r
-               /* Non-zero if TCP-windows contains data which must be popped. */\r
-               pxWindow->ulUserDataLength = 0ul;\r
-\r
-               if( ulCurrentSequenceNumber == ulSequenceNumber )\r
-               {\r
-                       /* This is the packet with the lowest sequence number we're waiting\r
-                       for.  It can be passed directly to the rx stream. */\r
-                       if( ulLength > ulSpace )\r
-                       {\r
-                               FreeRTOS_debug_printf( ( "lTCPWindowRxCheck: Refuse %lu bytes, due to lack of space (%lu)\n", ulLength, ulSpace ) );\r
-                               lReturn = -1;\r
-                       }\r
-                       else\r
-                       {\r
-                               ulCurrentSequenceNumber += ulLength;\r
-\r
-                               if( listCURRENT_LIST_LENGTH( &( pxWindow->xRxSegments ) ) != 0 )\r
-                               {\r
-                                       ulSavedSequenceNumber = ulCurrentSequenceNumber;\r
-\r
-                    /* Clean up all sequence received between ulSequenceNumber and ulSequenceNumber + ulLength since they are duplicated.\r
-                    If the server is forced to retransmit packets several time in a row it might send a batch of concatenated packet for speed.\r
-                    So we cannot rely on the packets between ulSequenceNumber and ulSequenceNumber + ulLength to be sequential and it is better to just\r
-                    clean them out. */\r
-                    do\r
-                    {\r
-                        pxFound = xTCPWindowRxConfirm( pxWindow, ulSequenceNumber, ulLength );\r
-\r
-                        if ( pxFound != NULL )\r
-                        {\r
-                            /* Remove it because it will be passed to user directly. */\r
-                            vTCPWindowFree( pxFound );\r
-                        }\r
-                    } while ( pxFound );\r
-\r
-                                       /*  Check for following segments that are already in the\r
-                                       queue and increment ulCurrentSequenceNumber. */\r
-                                       while( ( pxFound = xTCPWindowRxFind( pxWindow, ulCurrentSequenceNumber ) ) != NULL )\r
-                                       {\r
-                                               ulCurrentSequenceNumber += ( uint32_t ) pxFound->lDataLength;\r
-\r
-                                               /* As all packet below this one have been passed to the\r
-                                               user it can be discarded. */\r
-                                               vTCPWindowFree( pxFound );\r
-                                       }\r
-\r
-                                       if( ulSavedSequenceNumber != ulCurrentSequenceNumber )\r
-                                       {\r
-                                               /*  After the current data-package, there is more data\r
-                                               to be popped. */\r
-                                               pxWindow->ulUserDataLength = ulCurrentSequenceNumber - ulSavedSequenceNumber;\r
-\r
-                                               if( xTCPWindowLoggingLevel >= 1 )\r
-                                               {\r
-                                                       FreeRTOS_debug_printf( ( "lTCPWindowRxCheck[%d,%d]: retran %lu (Found %lu bytes at %lu cnt %ld)\n",\r
-                                                               pxWindow->usPeerPortNumber, pxWindow->usOurPortNumber,\r
-                                                               ulSequenceNumber - pxWindow->rx.ulFirstSequenceNumber,\r
-                                                               pxWindow->ulUserDataLength,\r
-                                                               ulSavedSequenceNumber - pxWindow->rx.ulFirstSequenceNumber,\r
-                                                               listCURRENT_LIST_LENGTH( &pxWindow->xRxSegments ) ) );\r
-                                               }\r
-                                       }\r
-                               }\r
-\r
-                               pxWindow->rx.ulCurrentSequenceNumber = ulCurrentSequenceNumber;\r
-\r
-                               /* Packet was expected, may be passed directly to the socket\r
-                               buffer or application.  Store the packet at offset 0. */\r
-                               lReturn = 0;\r
-                       }\r
-               }\r
-               else if( ulCurrentSequenceNumber == ( ulSequenceNumber + 1UL ) )\r
-               {\r
-                       /* Looks like a TCP keep-alive message.  Do not accept/store Rx data\r
-                       ulUserDataLength = 0. Not packet out-of-sync.  Just reply to it. */\r
-                       lReturn = -1;\r
-               }\r
-               else\r
-               {\r
-                       /* The packet is not the one expected.  See if it falls within the Rx\r
-                       window so it can be stored. */\r
-\r
-                       /*  An "out-of-sequence" segment was received, must have missed one.\r
-                       Prepare a SACK (Selective ACK). */\r
-                       ulLast = ulSequenceNumber + ulLength;\r
-                       lDistance = ( int32_t ) ( ulLast - ulCurrentSequenceNumber );\r
-\r
-                       if( lDistance <= 0 )\r
-                       {\r
-                               /* An earlier has been received, must be a retransmission of a\r
-                               packet that has been accepted already.  No need to send out a\r
-                               Selective ACK (SACK). */\r
-                               lReturn = -1;\r
-                       }\r
-                       else if( lDistance > ( int32_t ) ulSpace )\r
-                       {\r
-                               /* The new segment is ahead of rx.ulCurrentSequenceNumber.  The\r
-                               sequence number of this packet is too far ahead, ignore it. */\r
-                               FreeRTOS_debug_printf( ( "lTCPWindowRxCheck: Refuse %lu+%lu bytes, due to lack of space (%lu)\n", lDistance, ulLength, ulSpace ) );\r
-                               lReturn = -1;\r
-                       }\r
-                       else\r
-                       {\r
-                               /* See if there is more data in a contiguous block to make the\r
-                               SACK describe a longer range of data. */\r
-\r
-                               /* TODO: SACK's may also be delayed for a short period\r
-                                * This is useful because subsequent packets will be SACK'd with\r
-                                * single one message\r
-                                */\r
-                               while( ( pxFound = xTCPWindowRxFind( pxWindow, ulLast ) ) != NULL )\r
-                               {\r
-                                       ulLast += ( uint32_t ) pxFound->lDataLength;\r
-                               }\r
-\r
-                               if( xTCPWindowLoggingLevel >= 1 )\r
-                               {\r
-                                       FreeRTOS_debug_printf( ( "lTCPWindowRxCheck[%d,%d]: seqnr %lu exp %lu (dist %ld) SACK to %lu\n",\r
-                                               pxWindow->usPeerPortNumber, pxWindow->usOurPortNumber,\r
-                                               ulSequenceNumber - pxWindow->rx.ulFirstSequenceNumber,\r
-                                               ulCurrentSequenceNumber - pxWindow->rx.ulFirstSequenceNumber,\r
-                                               ( BaseType_t ) ( ulSequenceNumber - ulCurrentSequenceNumber ),  /* want this signed */\r
-                                               ulLast - pxWindow->rx.ulFirstSequenceNumber ) );\r
-                               }\r
-\r
-                               /* Now prepare the SACK message.\r
-                               Code OPTION_CODE_SINGLE_SACK already in network byte order. */\r
-                               pxWindow->ulOptionsData[0] = OPTION_CODE_SINGLE_SACK;\r
-\r
-                               /* First sequence number that we received. */\r
-                               pxWindow->ulOptionsData[1] = FreeRTOS_htonl( ulSequenceNumber );\r
-\r
-                               /* Last + 1 */\r
-                               pxWindow->ulOptionsData[2] = FreeRTOS_htonl( ulLast );\r
-\r
-                               /* Which make 12 (3*4) option bytes. */\r
-                               pxWindow->ucOptionLength = 3 * sizeof( pxWindow->ulOptionsData[ 0 ] );\r
-\r
-                               pxFound = xTCPWindowRxFind( pxWindow, ulSequenceNumber );\r
-\r
-                               if( pxFound != NULL )\r
-                               {\r
-                                       /* This out-of-sequence packet has been received for a\r
-                                       second time.  It is already stored but do send a SACK\r
-                                       again. */\r
-                                       lReturn = -1;\r
-                               }\r
-                               else\r
-                               {\r
-                                       pxFound = xTCPWindowRxNew( pxWindow, ulSequenceNumber, ( int32_t ) ulLength );\r
-\r
-                                       if( pxFound == NULL )\r
-                                       {\r
-                                               /* Can not send a SACK, because the segment cannot be\r
-                                               stored. */\r
-                                               pxWindow->ucOptionLength = 0u;\r
-\r
-                                               /* Needs to be stored but there is no segment\r
-                                               available. */\r
-                                               lReturn = -1;\r
-                                       }\r
-                                       else\r
-                                       {\r
-                                               if( xTCPWindowLoggingLevel != 0 )\r
-                                               {\r
-                                                       FreeRTOS_debug_printf( ( "lTCPWindowRxCheck[%u,%u]: seqnr %lu (cnt %lu)\n",\r
-                                                               pxWindow->usPeerPortNumber, pxWindow->usOurPortNumber, ulSequenceNumber - pxWindow->rx.ulFirstSequenceNumber,\r
-                                                               listCURRENT_LIST_LENGTH( &pxWindow->xRxSegments ) ) );\r
-                                                       FreeRTOS_flush_logging( );\r
-                                               }\r
-\r
-                                               /* Return a positive value.  The packet may be accepted\r
-                                               and stored but an earlier packet is still missing. */\r
-                                               lReturn = ( int32_t ) ( ulSequenceNumber - ulCurrentSequenceNumber );\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-\r
-               return lReturn;\r
-       }\r
-\r
-#endif /* ipconfgiUSE_TCP_WIN == 1 */\r
-/*-----------------------------------------------------------*/\r
-\r
-/*=============================================================================\r
- *\r
- *                    #########   #    #\r
- *                    #   #   #   #    #\r
- *                        #       #    #\r
- *                        #        ####\r
- *                        #         ##\r
- *                        #        ####\r
- *                        #       #    #\r
- *                        #       #    #\r
- *                      #####     #    #\r
- *\r
- * Tx functions\r
- *\r
- *=============================================================================*/\r
-\r
-#if( ipconfigUSE_TCP_WIN == 1 )\r
-\r
-       static int32_t lTCPIncrementTxPosition( int32_t lPosition, int32_t lMax, int32_t lCount )\r
-       {\r
-               /* +TCP stores data in circular buffers.  Calculate the next position to\r
-               store. */\r
-               lPosition += lCount;\r
-               if( lPosition >= lMax )\r
-               {\r
-                       lPosition -= lMax;\r
-               }\r
-\r
-               return lPosition;\r
-       }\r
-\r
-#endif /* ipconfigUSE_TCP_WIN == 1 */\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_TCP_WIN == 1 )\r
-\r
-       int32_t lTCPWindowTxAdd( TCPWindow_t *pxWindow, uint32_t ulLength, int32_t lPosition, int32_t lMax )\r
-       {\r
-       int32_t lBytesLeft = ( int32_t ) ulLength, lToWrite;\r
-       int32_t lDone = 0;\r
-       TCPSegment_t *pxSegment = pxWindow->pxHeadSegment;\r
-\r
-               /* Puts a message in the Tx-window (after buffer size has been\r
-               verified). */\r
-               if( pxSegment != NULL )\r
-               {\r
-                       if( pxSegment->lDataLength < pxSegment->lMaxLength )\r
-                       {\r
-                               if( ( pxSegment->u.bits.bOutstanding == pdFALSE_UNSIGNED ) && ( pxSegment->lDataLength != 0 ) )\r
-                               {\r
-                                       /* Adding data to a segment that was already in the TX queue.  It\r
-                                       will be filled-up to a maximum of MSS (maximum segment size). */\r
-                                       lToWrite = FreeRTOS_min_int32( lBytesLeft, pxSegment->lMaxLength - pxSegment->lDataLength );\r
-\r
-                                       pxSegment->lDataLength += lToWrite;\r
-\r
-                                       if( pxSegment->lDataLength >= pxSegment->lMaxLength )\r
-                                       {\r
-                                               /* This segment is full, don't add more bytes. */\r
-                                               pxWindow->pxHeadSegment = NULL;\r
-                                       }\r
-\r
-                                       lBytesLeft -= lToWrite;\r
-\r
-                                       /* ulNextTxSequenceNumber is the sequence number of the next byte to\r
-                                       be stored for transmission. */\r
-                                       pxWindow->ulNextTxSequenceNumber += ( uint32_t ) lToWrite;\r
-\r
-                                       /* Increased the return value. */\r
-                                       lDone += lToWrite;\r
-\r
-                                       /* Some detailed logging, for those who're interested. */\r
-                                       if( ( xTCPWindowLoggingLevel >= 2 ) && ( ipconfigTCP_MAY_LOG_PORT( pxWindow->usOurPortNumber ) != 0 ) )\r
-                                       {\r
-                                               FreeRTOS_debug_printf( ( "lTCPWindowTxAdd: Add %4lu bytes for seqNr %lu len %4lu (nxt %lu) pos %lu\n",\r
-                                                       ulLength,\r
-                                                       pxSegment->ulSequenceNumber - pxWindow->tx.ulFirstSequenceNumber,\r
-                                                       pxSegment->lDataLength,\r
-                                                       pxWindow->ulNextTxSequenceNumber - pxWindow->tx.ulFirstSequenceNumber,\r
-                                                       pxSegment->lStreamPos ) );\r
-                                               FreeRTOS_flush_logging( );\r
-                                       }\r
-\r
-                                       /* Calculate the next position in the circular data buffer, knowing\r
-                                       its maximum length 'lMax'. */\r
-                                       lPosition = lTCPIncrementTxPosition( lPosition, lMax, lToWrite );\r
-                               }\r
-                       }\r
-               }\r
-\r
-               while( lBytesLeft > 0 )\r
-               {\r
-                       /* The current transmission segment is full, create new segments as\r
-                       needed. */\r
-                       pxSegment = xTCPWindowTxNew( pxWindow, pxWindow->ulNextTxSequenceNumber, pxWindow->usMSS );\r
-\r
-                       if( pxSegment != NULL )\r
-                       {\r
-                               /* Store as many as needed, but no more than the maximum\r
-                               (MSS). */\r
-                               lToWrite = FreeRTOS_min_int32( lBytesLeft, pxSegment->lMaxLength );\r
-\r
-                               pxSegment->lDataLength = lToWrite;\r
-                               pxSegment->lStreamPos = lPosition;\r
-                               lBytesLeft -= lToWrite;\r
-                               lPosition = lTCPIncrementTxPosition( lPosition, lMax, lToWrite );\r
-                               pxWindow->ulNextTxSequenceNumber += ( uint32_t ) lToWrite;\r
-                               lDone += lToWrite;\r
-\r
-                               /* Link this segment in the Tx-Queue. */\r
-                               vListInsertFifo( &( pxWindow->xTxQueue ), &( pxSegment->xQueueItem ) );\r
-\r
-                               /* Let 'pxHeadSegment' point to this segment if there is still\r
-                               space. */\r
-                               if( pxSegment->lDataLength < pxSegment->lMaxLength )\r
-                               {\r
-                                       pxWindow->pxHeadSegment = pxSegment;\r
-                               }\r
-                               else\r
-                               {\r
-                                       pxWindow->pxHeadSegment = NULL;\r
-                               }\r
-\r
-                               if( ipconfigTCP_MAY_LOG_PORT( pxWindow->usOurPortNumber ) != 0 )\r
-                               {\r
-                                       if( ( xTCPWindowLoggingLevel >= 3 ) ||\r
-                                               ( ( xTCPWindowLoggingLevel >= 2 ) && ( pxWindow->pxHeadSegment != NULL ) ) )\r
-                                       {\r
-                                               FreeRTOS_debug_printf( ( "lTCPWindowTxAdd: New %4ld bytes for seqNr %lu len %4lu (nxt %lu) pos %lu\n",\r
-                                                       ulLength,\r
-                                                       pxSegment->ulSequenceNumber - pxWindow->tx.ulFirstSequenceNumber,\r
-                                                       pxSegment->lDataLength,\r
-                                                       pxWindow->ulNextTxSequenceNumber - pxWindow->tx.ulFirstSequenceNumber,\r
-                                                       pxSegment->lStreamPos ) );\r
-                                               FreeRTOS_flush_logging( );\r
-                                       }\r
-                               }\r
-                       }\r
-                       else\r
-                       {\r
-                               /* A sever situation: running out of segments for transmission.\r
-                               No more data can be sent at the moment. */\r
-                               if( lDone != 0 )\r
-                               {\r
-                                       FreeRTOS_debug_printf( ( "lTCPWindowTxAdd: Sorry all buffers full (cancel %ld bytes)\n", lBytesLeft ) );\r
-                               }\r
-                               break;\r
-                       }\r
-               }\r
-\r
-               return lDone;\r
-       }\r
-\r
-#endif /* ipconfigUSE_TCP_WIN == 1 */\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_TCP_WIN == 1 )\r
-\r
-       BaseType_t xTCPWindowTxDone( TCPWindow_t *pxWindow )\r
-       {\r
-               return listLIST_IS_EMPTY( ( &pxWindow->xTxSegments) );\r
-       }\r
-\r
-#endif /* ipconfigUSE_TCP_WIN == 1 */\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_TCP_WIN == 1 )\r
-\r
-       static BaseType_t prvTCPWindowTxHasSpace( TCPWindow_t *pxWindow, uint32_t ulWindowSize )\r
-       {\r
-       uint32_t ulTxOutstanding;\r
-       BaseType_t xHasSpace;\r
-       TCPSegment_t *pxSegment;\r
-\r
-               /* This function will look if there is new transmission data.  It will\r
-               return true if there is data to be sent. */\r
-\r
-               pxSegment = xTCPWindowPeekHead( &( pxWindow->xTxQueue ) );\r
-\r
-               if( pxSegment == NULL )\r
-               {\r
-                       xHasSpace = pdFALSE;\r
-               }\r
-               else\r
-               {\r
-                       /* How much data is outstanding, i.e. how much data has been sent\r
-                       but not yet acknowledged ? */\r
-                       if( pxWindow->tx.ulHighestSequenceNumber >= pxWindow->tx.ulCurrentSequenceNumber )\r
-                       {\r
-                               ulTxOutstanding = pxWindow->tx.ulHighestSequenceNumber - pxWindow->tx.ulCurrentSequenceNumber;\r
-                       }\r
-                       else\r
-                       {\r
-                               ulTxOutstanding = 0UL;\r
-                       }\r
-\r
-                       /* Subtract this from the peer's space. */\r
-                       ulWindowSize -= FreeRTOS_min_uint32( ulWindowSize, ulTxOutstanding );\r
-\r
-                       /* See if the next segment may be sent. */\r
-                       if( ulWindowSize >= ( uint32_t ) pxSegment->lDataLength )\r
-                       {\r
-                               xHasSpace = pdTRUE;\r
-                       }\r
-                       else\r
-                       {\r
-                               xHasSpace = pdFALSE;\r
-                       }\r
-\r
-                       /* If 'xHasSpace', it looks like the peer has at least space for 1\r
-                       more new segment of size MSS.  xSize.ulTxWindowLength is the self-imposed\r
-                       limitation of the transmission window (in case of many resends it\r
-                       may be decreased). */\r
-                       if( ( ulTxOutstanding != 0UL ) && ( pxWindow->xSize.ulTxWindowLength < ulTxOutstanding + ( ( uint32_t ) pxSegment->lDataLength ) ) )\r
-                       {\r
-                               xHasSpace = pdFALSE;\r
-                       }\r
-               }\r
-\r
-               return xHasSpace;\r
-       }\r
-\r
-#endif /* ipconfigUSE_TCP_WIN == 1 */\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_TCP_WIN == 1 )\r
-\r
-       BaseType_t xTCPWindowTxHasData( TCPWindow_t *pxWindow, uint32_t ulWindowSize, TickType_t *pulDelay )\r
-       {\r
-       TCPSegment_t *pxSegment;\r
-       BaseType_t xReturn;\r
-       TickType_t ulAge, ulMaxAge;\r
-\r
-               *pulDelay = 0u;\r
-\r
-               if( listLIST_IS_EMPTY( &pxWindow->xPriorityQueue ) == pdFALSE )\r
-               {\r
-                       /* No need to look at retransmissions or new transmission as long as\r
-                       there are priority segments.  *pulDelay equals zero, meaning it must\r
-                       be sent out immediately. */\r
-                       xReturn = pdTRUE;\r
-               }\r
-               else\r
-               {\r
-                       pxSegment = xTCPWindowPeekHead( &( pxWindow->xWaitQueue ) );\r
-\r
-                       if( pxSegment != NULL )\r
-                       {\r
-                               /* There is an outstanding segment, see if it is time to resend\r
-                               it. */\r
-                               ulAge = ulTimerGetAge( &pxSegment->xTransmitTimer );\r
-\r
-                               /* After a packet has been sent for the first time, it will wait\r
-                               '1 * lSRTT' ms for an ACK. A second time it will wait '2 * lSRTT' ms,\r
-                               each time doubling the time-out */\r
-                               ulMaxAge = ( 1u << pxSegment->u.bits.ucTransmitCount ) * ( ( uint32_t ) pxWindow->lSRTT );\r
-\r
-                               if( ulMaxAge > ulAge )\r
-                               {\r
-                                       /* A segment must be sent after this amount of msecs */\r
-                                       *pulDelay = ulMaxAge - ulAge;\r
-                               }\r
-\r
-                               xReturn = pdTRUE;\r
-                       }\r
-                       else\r
-                       {\r
-                               /* No priority segment, no outstanding data, see if there is new\r
-                               transmission data. */\r
-                               pxSegment = xTCPWindowPeekHead( &pxWindow->xTxQueue );\r
-\r
-                               /* See if it fits in the peer's reception window. */\r
-                               if( pxSegment == NULL )\r
-                               {\r
-                                       xReturn = pdFALSE;\r
-                               }\r
-                               else if( prvTCPWindowTxHasSpace( pxWindow, ulWindowSize ) == pdFALSE )\r
-                               {\r
-                                       /* Too many outstanding messages. */\r
-                                       xReturn = pdFALSE;\r
-                               }\r
-                               else if( ( pxWindow->u.bits.bSendFullSize != pdFALSE_UNSIGNED ) && ( pxSegment->lDataLength < pxSegment->lMaxLength ) )\r
-                               {\r
-                                       /* 'bSendFullSize' is a special optimisation.  If true, the\r
-                                       driver will only sent completely filled packets (of MSS\r
-                                       bytes). */\r
-                                       xReturn = pdFALSE;\r
-                               }\r
-                               else\r
-                               {\r
-                                       xReturn = pdTRUE;\r
-                               }\r
-                       }\r
-               }\r
-\r
-               return xReturn;\r
-       }\r
-\r
-#endif /* ipconfigUSE_TCP_WIN == 1 */\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_TCP_WIN == 1 )\r
-\r
-       uint32_t ulTCPWindowTxGet( TCPWindow_t *pxWindow, uint32_t ulWindowSize, int32_t *plPosition )\r
-       {\r
-       TCPSegment_t *pxSegment;\r
-       uint32_t ulMaxTime;\r
-       uint32_t ulReturn  = ~0UL;\r
-\r
-\r
-               /* Fetches data to be sent-out now.\r
-\r
-               Priority messages: segments with a resend need no check current sliding\r
-               window size. */\r
-               pxSegment = xTCPWindowGetHead( &( pxWindow->xPriorityQueue ) );\r
-               pxWindow->ulOurSequenceNumber = pxWindow->tx.ulHighestSequenceNumber;\r
-\r
-               if( pxSegment == NULL )\r
-               {\r
-                       /* Waiting messages: outstanding messages with a running timer\r
-                       neither check peer's reception window size because these packets\r
-                       have been sent earlier. */\r
-                       pxSegment = xTCPWindowPeekHead( &( pxWindow->xWaitQueue ) );\r
-\r
-                       if( pxSegment != NULL )\r
-                       {\r
-                               /* Do check the timing. */\r
-                               ulMaxTime = ( 1u << pxSegment->u.bits.ucTransmitCount ) * ( ( uint32_t ) pxWindow->lSRTT );\r
-\r
-                               if( ulTimerGetAge( &pxSegment->xTransmitTimer ) > ulMaxTime )\r
-                               {\r
-                                       /* A normal (non-fast) retransmission.  Move it from the\r
-                                       head of the waiting queue. */\r
-                                       pxSegment = xTCPWindowGetHead( &( pxWindow->xWaitQueue ) );\r
-                                       pxSegment->u.bits.ucDupAckCount = pdFALSE_UNSIGNED;\r
-\r
-                                       /* Some detailed logging. */\r
-                                       if( ( xTCPWindowLoggingLevel != 0 ) && ( ipconfigTCP_MAY_LOG_PORT( pxWindow->usOurPortNumber ) != 0 ) )\r
-                                       {\r
-                                               FreeRTOS_debug_printf( ( "ulTCPWindowTxGet[%u,%u]: WaitQueue %ld bytes for sequence number %lu (%lX)\n",\r
-                                                       pxWindow->usPeerPortNumber,\r
-                                                       pxWindow->usOurPortNumber,\r
-                                                       pxSegment->lDataLength,\r
-                                                       pxSegment->ulSequenceNumber - pxWindow->tx.ulFirstSequenceNumber,\r
-                                                       pxSegment->ulSequenceNumber ) );\r
-                                               FreeRTOS_flush_logging( );\r
-                                       }\r
-                               }\r
-                               else\r
-                               {\r
-                                       pxSegment = NULL;\r
-                               }\r
-                       }\r
-\r
-                       if( pxSegment == NULL )\r
-                       {\r
-                               /* New messages: sent-out for the first time.  Check current\r
-                               sliding window size of peer. */\r
-                               pxSegment = xTCPWindowPeekHead( &( pxWindow->xTxQueue ) );\r
-\r
-                               if( pxSegment == NULL )\r
-                               {\r
-                                       /* No segments queued. */\r
-                                       ulReturn = 0UL;\r
-                               }\r
-                               else if( ( pxWindow->u.bits.bSendFullSize != pdFALSE_UNSIGNED ) && ( pxSegment->lDataLength < pxSegment->lMaxLength ) )\r
-                               {\r
-                                       /* A segment has been queued but the driver waits until it\r
-                                       has a full size of MSS. */\r
-                                       ulReturn = 0;\r
-                               }\r
-                               else if( prvTCPWindowTxHasSpace( pxWindow, ulWindowSize ) == pdFALSE )\r
-                               {\r
-                                       /* Peer has no more space at this moment. */\r
-                                       ulReturn = 0;\r
-                               }\r
-                               else\r
-                               {\r
-                                       /* Move it out of the Tx queue. */\r
-                                       pxSegment = xTCPWindowGetHead( &( pxWindow->xTxQueue ) );\r
-\r
-                                       /* Don't let pxHeadSegment point to this segment any more,\r
-                                       so no more data will be added. */\r
-                                       if( pxWindow->pxHeadSegment == pxSegment )\r
-                                       {\r
-                                               pxWindow->pxHeadSegment = NULL;\r
-                                       }\r
-\r
-                                       /* pxWindow->tx.highest registers the highest sequence\r
-                                       number in our transmission window. */\r
-                                       pxWindow->tx.ulHighestSequenceNumber = pxSegment->ulSequenceNumber + ( ( uint32_t ) pxSegment->lDataLength );\r
-\r
-                                       /* ...and more detailed logging */\r
-                                       if( ( xTCPWindowLoggingLevel >= 2 ) && ( ipconfigTCP_MAY_LOG_PORT( pxWindow->usOurPortNumber ) != pdFALSE ) )\r
-                                       {\r
-                                               FreeRTOS_debug_printf( ( "ulTCPWindowTxGet[%u,%u]: XmitQueue %ld bytes for sequence number %lu (ws %lu)\n",\r
-                                                       pxWindow->usPeerPortNumber,\r
-                                                       pxWindow->usOurPortNumber,\r
-                                                       pxSegment->lDataLength,\r
-                                                       pxSegment->ulSequenceNumber - pxWindow->tx.ulFirstSequenceNumber,\r
-                                                       ulWindowSize ) );\r
-                                               FreeRTOS_flush_logging( );\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-               else\r
-               {\r
-                       /* There is a priority segment. It doesn't need any checking for\r
-                       space or timeouts. */\r
-                       if( xTCPWindowLoggingLevel != 0 )\r
-                       {\r
-                               FreeRTOS_debug_printf( ( "ulTCPWindowTxGet[%u,%u]: PrioQueue %ld bytes for sequence number %lu (ws %lu)\n",\r
-                                       pxWindow->usPeerPortNumber,\r
-                                       pxWindow->usOurPortNumber,\r
-                                       pxSegment->lDataLength,\r
-                                       pxSegment->ulSequenceNumber - pxWindow->tx.ulFirstSequenceNumber,\r
-                                       ulWindowSize ) );\r
-                               FreeRTOS_flush_logging( );\r
-                       }\r
-               }\r
-\r
-               /* See if it has already been determined to return 0. */\r
-               if( ulReturn != 0UL )\r
-               {\r
-                       configASSERT( listLIST_ITEM_CONTAINER( &(pxSegment->xQueueItem ) ) == NULL );\r
-\r
-                       /* Now that the segment will be transmitted, add it to the tail of\r
-                       the waiting queue. */\r
-                       vListInsertFifo( &pxWindow->xWaitQueue, &pxSegment->xQueueItem );\r
-\r
-                       /* And mark it as outstanding. */\r
-                       pxSegment->u.bits.bOutstanding = pdTRUE_UNSIGNED;\r
-\r
-                       /* Administer the transmit count, needed for fast\r
-                       retransmissions. */\r
-                       ( pxSegment->u.bits.ucTransmitCount )++;\r
-\r
-                       /* If there have been several retransmissions (4), decrease the\r
-                       size of the transmission window to at most 2 times MSS. */\r
-                       if( pxSegment->u.bits.ucTransmitCount == MAX_TRANSMIT_COUNT_USING_LARGE_WINDOW )\r
-                       {\r
-                               if( pxWindow->xSize.ulTxWindowLength > ( 2U * pxWindow->usMSS ) )\r
-                               {\r
-                                       FreeRTOS_debug_printf( ( "ulTCPWindowTxGet[%u - %d]: Change Tx window: %lu -> %u\n",\r
-                                               pxWindow->usPeerPortNumber, pxWindow->usOurPortNumber,\r
-                                               pxWindow->xSize.ulTxWindowLength, 2 * pxWindow->usMSS ) );\r
-                                       pxWindow->xSize.ulTxWindowLength = ( 2UL * pxWindow->usMSS );\r
-                               }\r
-                       }\r
-\r
-                       /* Clear the transmit timer. */\r
-                       vTCPTimerSet( &( pxSegment->xTransmitTimer ) );\r
-\r
-                       pxWindow->ulOurSequenceNumber = pxSegment->ulSequenceNumber;\r
-\r
-                       /* Inform the caller where to find the data within the queue. */\r
-                       *plPosition = pxSegment->lStreamPos;\r
-\r
-                       /* And return the length of the data segment */\r
-                       ulReturn = ( uint32_t ) pxSegment->lDataLength;\r
-               }\r
-\r
-               return ulReturn;\r
-       }\r
-\r
-#endif /* ipconfigUSE_TCP_WIN == 1 */\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_TCP_WIN == 1 )\r
-\r
-       static uint32_t prvTCPWindowTxCheckAck( TCPWindow_t *pxWindow, uint32_t ulFirst, uint32_t ulLast )\r
-       {\r
-       uint32_t ulBytesConfirmed = 0u;\r
-       uint32_t ulSequenceNumber = ulFirst, ulDataLength;\r
-       const ListItem_t *pxIterator;\r
-       const MiniListItem_t *pxEnd = ( const MiniListItem_t* )listGET_END_MARKER( &pxWindow->xTxSegments );\r
-       BaseType_t xDoUnlink;\r
-       TCPSegment_t *pxSegment;\r
-               /* An acknowledgement or a selective ACK (SACK) was received.  See if some outstanding data\r
-               may be removed from the transmission queue(s).\r
-               All TX segments for which\r
-               ( ( ulSequenceNumber >= ulFirst ) && ( ulSequenceNumber < ulLast ) in a\r
-               contiguous block.  Note that the segments are stored in xTxSegments in a\r
-               strict sequential order. */\r
-\r
-               /* SRTT[i] = (1-a) * SRTT[i-1] + a * RTT\r
-\r
-               0 < a < 1; usually a = 1/8\r
-\r
-               RTO = 2 * SRTT\r
-\r
-               where:\r
-                 RTT is Round Trip Time\r
-                 SRTT is Smoothed RTT\r
-                 RTO is Retransmit timeout\r
-\r
-                A Smoothed RTT will increase quickly, but it is conservative when\r
-                becoming smaller. */\r
-\r
-               for(\r
-                               pxIterator  = ( const ListItem_t * ) listGET_NEXT( pxEnd );\r
-                               ( pxIterator != ( const ListItem_t * ) pxEnd ) && ( xSequenceLessThan( ulSequenceNumber, ulLast ) != 0 );\r
-                       )\r
-               {\r
-                       xDoUnlink = pdFALSE;\r
-                       pxSegment = ( TCPSegment_t * ) listGET_LIST_ITEM_OWNER( pxIterator );\r
-\r
-                       /* Move to the next item because the current item might get\r
-                       removed. */\r
-                       pxIterator = ( const ListItem_t * ) listGET_NEXT( pxIterator );\r
-\r
-                       /* Continue if this segment does not fall within the ACK'd range. */\r
-                       if( xSequenceGreaterThan( ulSequenceNumber, pxSegment->ulSequenceNumber ) != pdFALSE )\r
-                       {\r
-                               continue;\r
-                       }\r
-\r
-                       /* Is it ready? */\r
-                       if( ulSequenceNumber != pxSegment->ulSequenceNumber )\r
-                       {\r
-                               break;\r
-                       }\r
-\r
-                       ulDataLength = ( uint32_t ) pxSegment->lDataLength;\r
-\r
-                       if( pxSegment->u.bits.bAcked == pdFALSE_UNSIGNED )\r
-                       {\r
-                               if( xSequenceGreaterThan( pxSegment->ulSequenceNumber + ( uint32_t )ulDataLength, ulLast ) != pdFALSE )\r
-                               {\r
-                                       /* What happens?  Only part of this segment was accepted,\r
-                                       probably due to WND limits\r
-\r
-                                         AAAAAAA BBBBBBB << acked\r
-                                         aaaaaaa aaaa    << sent */\r
-                                       #if( ipconfigHAS_DEBUG_PRINTF != 0 )\r
-                                       {\r
-                                               uint32_t ulFirstSeq = pxSegment->ulSequenceNumber - pxWindow->tx.ulFirstSequenceNumber;\r
-                                               FreeRTOS_debug_printf( ( "prvTCPWindowTxCheckAck[%u.%u]: %lu - %lu Partial sequence number %lu - %lu\n",\r
-                                                       pxWindow->usPeerPortNumber,\r
-                                                       pxWindow->usOurPortNumber,\r
-                                                       ulFirstSeq - pxWindow->tx.ulFirstSequenceNumber,\r
-                                                       ulLast - pxWindow->tx.ulFirstSequenceNumber,\r
-                                                       ulFirstSeq, ulFirstSeq + ulDataLength ) );\r
-                                       }\r
-                                       #endif /* ipconfigHAS_DEBUG_PRINTF */\r
-                                       break;\r
-                               }\r
-\r
-                               /* This segment is fully ACK'd, set the flag. */\r
-                               pxSegment->u.bits.bAcked = pdTRUE_UNSIGNED;\r
-\r
-                               /* Calculate the RTT only if the segment was sent-out for the\r
-                               first time and if this is the last ACK'd segment in a range. */\r
-                               if( ( pxSegment->u.bits.ucTransmitCount == 1 ) && ( ( pxSegment->ulSequenceNumber + ulDataLength ) == ulLast ) )\r
-                               {\r
-                                       int32_t mS = ( int32_t ) ulTimerGetAge( &( pxSegment->xTransmitTimer ) );\r
-\r
-                                       if( pxWindow->lSRTT >= mS )\r
-                                       {\r
-                                               /* RTT becomes smaller: adapt slowly. */\r
-                                               pxWindow->lSRTT = ( ( winSRTT_DECREMENT_NEW * mS ) + ( winSRTT_DECREMENT_CURRENT * pxWindow->lSRTT ) ) / ( winSRTT_DECREMENT_NEW + winSRTT_DECREMENT_CURRENT );\r
-                                       }\r
-                                       else\r
-                                       {\r
-                                               /* RTT becomes larger: adapt quicker */\r
-                                               pxWindow->lSRTT = ( ( winSRTT_INCREMENT_NEW * mS ) + ( winSRTT_INCREMENT_CURRENT * pxWindow->lSRTT ) ) / ( winSRTT_INCREMENT_NEW + winSRTT_INCREMENT_CURRENT );\r
-                                       }\r
-\r
-                                       /* Cap to the minimum of 50ms. */\r
-                                       if( pxWindow->lSRTT < winSRTT_CAP_mS )\r
-                                       {\r
-                                               pxWindow->lSRTT = winSRTT_CAP_mS;\r
-                                       }\r
-                               }\r
-\r
-                               /* Unlink it from the 3 queues, but do not destroy it (yet). */\r
-                               xDoUnlink = pdTRUE;\r
-                       }\r
-\r
-                       /* pxSegment->u.bits.bAcked is now true.  Is it located at the left\r
-                       side of the transmission queue?  If so, it may be freed. */\r
-                       if( ulSequenceNumber == pxWindow->tx.ulCurrentSequenceNumber )\r
-                       {\r
-                               if( ( xTCPWindowLoggingLevel >= 2 ) && ( ipconfigTCP_MAY_LOG_PORT( pxWindow->usOurPortNumber ) != pdFALSE ) )\r
-                               {\r
-                                       FreeRTOS_debug_printf( ( "prvTCPWindowTxCheckAck: %lu - %lu Ready sequence number %lu\n",\r
-                                               ulFirst - pxWindow->tx.ulFirstSequenceNumber,\r
-                                               ulLast - pxWindow->tx.ulFirstSequenceNumber,\r
-                                               pxSegment->ulSequenceNumber - pxWindow->tx.ulFirstSequenceNumber ) );\r
-                               }\r
-\r
-                               /* Increase the left-hand value of the transmission window. */\r
-                               pxWindow->tx.ulCurrentSequenceNumber += ulDataLength;\r
-\r
-                               /* This function will return the number of bytes that the tail\r
-                               of txStream may be advanced. */\r
-                               ulBytesConfirmed += ulDataLength;\r
-\r
-                               /* All segments below tx.ulCurrentSequenceNumber may be freed. */\r
-                               vTCPWindowFree( pxSegment );\r
-\r
-                               /* No need to unlink it any more. */\r
-                               xDoUnlink = pdFALSE;\r
-                       }\r
-\r
-                       if( ( xDoUnlink != pdFALSE ) && ( listLIST_ITEM_CONTAINER( &( pxSegment->xQueueItem ) ) != NULL ) )\r
-                       {\r
-                               /* Remove item from its queues. */\r
-                               uxListRemove( &pxSegment->xQueueItem );\r
-                       }\r
-\r
-                       ulSequenceNumber += ulDataLength;\r
-               }\r
-\r
-               return ulBytesConfirmed;\r
-       }\r
-#endif /* ipconfigUSE_TCP_WIN == 1 */\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_TCP_WIN == 1 )\r
-\r
-       static uint32_t prvTCPWindowFastRetransmit( TCPWindow_t *pxWindow, uint32_t ulFirst )\r
-       {\r
-       const ListItem_t *pxIterator;\r
-       const MiniListItem_t* pxEnd;\r
-       TCPSegment_t *pxSegment;\r
-       uint32_t ulCount = 0UL;\r
-\r
-               /* A higher Tx block has been acknowledged.  Now iterate through the\r
-                xWaitQueue to find a possible condition for a FAST retransmission. */\r
-\r
-               pxEnd = ( const MiniListItem_t* ) listGET_END_MARKER( &( pxWindow->xWaitQueue ) );\r
-\r
-               for( pxIterator  = ( const ListItem_t * ) listGET_NEXT( pxEnd );\r
-                        pxIterator != ( const ListItem_t * ) pxEnd; )\r
-               {\r
-                       /* Get the owner, which is a TCP segment. */\r
-                       pxSegment = ( TCPSegment_t * ) listGET_LIST_ITEM_OWNER( pxIterator );\r
-\r
-                       /* Hop to the next item before the current gets unlinked. */\r
-                       pxIterator  = ( const ListItem_t * ) listGET_NEXT( pxIterator );\r
-\r
-                       /* Fast retransmission:\r
-                       When 3 packets with a higher sequence number have been acknowledged\r
-                       by the peer, it is very unlikely a current packet will ever arrive.\r
-                       It will be retransmitted far before the RTO. */\r
-                       if( ( pxSegment->u.bits.bAcked == pdFALSE_UNSIGNED ) &&\r
-                               ( xSequenceLessThan( pxSegment->ulSequenceNumber, ulFirst ) != pdFALSE ) &&\r
-                               ( ++( pxSegment->u.bits.ucDupAckCount ) == DUPLICATE_ACKS_BEFORE_FAST_RETRANSMIT ) )\r
-                       {\r
-                               pxSegment->u.bits.ucTransmitCount = pdFALSE_UNSIGNED;\r
-\r
-                               /* Not clearing 'ucDupAckCount' yet as more SACK's might come in\r
-                               which might lead to a second fast rexmit. */\r
-                               if( ( xTCPWindowLoggingLevel >= 0 ) && ( ipconfigTCP_MAY_LOG_PORT( pxWindow->usOurPortNumber ) != pdFALSE ) )\r
-                               {\r
-                                       FreeRTOS_debug_printf( ( "prvTCPWindowFastRetransmit: Requeue sequence number %lu < %lu\n",\r
-                                               pxSegment->ulSequenceNumber - pxWindow->tx.ulFirstSequenceNumber,\r
-                                               ulFirst - pxWindow->tx.ulFirstSequenceNumber ) );\r
-                                       FreeRTOS_flush_logging( );\r
-                               }\r
-\r
-                               /* Remove it from xWaitQueue. */\r
-                               uxListRemove( &pxSegment->xQueueItem );\r
-\r
-                               /* Add this segment to the priority queue so it gets\r
-                               retransmitted immediately. */\r
-                               vListInsertFifo( &( pxWindow->xPriorityQueue ), &( pxSegment->xQueueItem ) );\r
-                               ulCount++;\r
-                       }\r
-               }\r
-\r
-               return ulCount;\r
-       }\r
-#endif /* ipconfigUSE_TCP_WIN == 1 */\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_TCP_WIN == 1 )\r
-\r
-       uint32_t ulTCPWindowTxAck( TCPWindow_t *pxWindow, uint32_t ulSequenceNumber )\r
-       {\r
-       uint32_t ulFirstSequence, ulReturn;\r
-\r
-               /* Receive a normal ACK. */\r
-\r
-               ulFirstSequence = pxWindow->tx.ulCurrentSequenceNumber;\r
-\r
-               if( xSequenceLessThanOrEqual( ulSequenceNumber, ulFirstSequence ) != pdFALSE )\r
-               {\r
-                       ulReturn = 0UL;\r
-               }\r
-               else\r
-               {\r
-                       ulReturn = prvTCPWindowTxCheckAck( pxWindow, ulFirstSequence, ulSequenceNumber );\r
-               }\r
-\r
-               return ulReturn;\r
-       }\r
-\r
-#endif /* ipconfigUSE_TCP_WIN == 1 */\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_TCP_WIN == 1 )\r
-\r
-       uint32_t ulTCPWindowTxSack( TCPWindow_t *pxWindow, uint32_t ulFirst, uint32_t ulLast )\r
-       {\r
-       uint32_t ulAckCount = 0UL;\r
-       uint32_t ulCurrentSequenceNumber = pxWindow->tx.ulCurrentSequenceNumber;\r
-\r
-               /* Receive a SACK option. */\r
-               ulAckCount = prvTCPWindowTxCheckAck( pxWindow, ulFirst, ulLast );\r
-               prvTCPWindowFastRetransmit( pxWindow, ulFirst );\r
-\r
-               if( ( xTCPWindowLoggingLevel >= 1 ) && ( xSequenceGreaterThan( ulFirst, ulCurrentSequenceNumber ) != pdFALSE ) )\r
-               {\r
-                       FreeRTOS_debug_printf( ( "ulTCPWindowTxSack[%u,%u]: from %lu to %lu (ack = %lu)\n",\r
-                               pxWindow->usPeerPortNumber,\r
-                               pxWindow->usOurPortNumber,\r
-                               ulFirst - pxWindow->tx.ulFirstSequenceNumber,\r
-                               ulLast - pxWindow->tx.ulFirstSequenceNumber,\r
-                               pxWindow->tx.ulCurrentSequenceNumber - pxWindow->tx.ulFirstSequenceNumber ) );\r
-                       FreeRTOS_flush_logging( );\r
-               }\r
-\r
-               return ulAckCount;\r
-       }\r
-\r
-#endif /* ipconfigUSE_TCP_WIN == 1 */\r
-/*-----------------------------------------------------------*/\r
-\r
-/*\r
-#####   #                      #####   ####  ######\r
-# # #   #                      # # #  #    #  #    #\r
-  #                              #   #     #  #    #\r
-  #   ###   #####  #    #        #   #        #    #\r
-  #     #   #    # #    #        #   #        #####\r
-  #     #   #    # #    # ####   #   #        #\r
-  #     #   #    # #    #        #   #     #  #\r
-  #     #   #    #  ####         #    #    #  #\r
- #### ##### #    #     #        ####   ####  ####\r
-                      #\r
-                   ###\r
-*/\r
-#if( ipconfigUSE_TCP_WIN == 0 )\r
-\r
-       int32_t lTCPWindowRxCheck( TCPWindow_t *pxWindow, uint32_t ulSequenceNumber, uint32_t ulLength, uint32_t ulSpace )\r
-       {\r
-       int32_t iReturn;\r
-\r
-               /* Data was received at 'ulSequenceNumber'.  See if it was expected\r
-               and if there is enough space to store the new data. */\r
-               if( ( pxWindow->rx.ulCurrentSequenceNumber != ulSequenceNumber ) || ( ulSpace < ulLength ) )\r
-               {\r
-                       iReturn = -1;\r
-               }\r
-               else\r
-               {\r
-                       pxWindow->rx.ulCurrentSequenceNumber += ( uint32_t ) ulLength;\r
-                       iReturn = 0;\r
-               }\r
-\r
-               return iReturn;\r
-       }\r
-\r
-#endif /* ipconfigUSE_TCP_WIN == 0 */\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_TCP_WIN == 0 )\r
-\r
-       int32_t lTCPWindowTxAdd( TCPWindow_t *pxWindow, uint32_t ulLength, int32_t lPosition, int32_t lMax )\r
-       {\r
-       TCPSegment_t *pxSegment = &( pxWindow->xTxSegment );\r
-       int32_t lResult;\r
-\r
-               /* Data is being scheduled for transmission. */\r
-\r
-               /* lMax would indicate the size of the txStream. */\r
-               ( void ) lMax;\r
-               /* This is tiny TCP: there is only 1 segment for outgoing data.\r
-               As long as 'lDataLength' is unequal to zero, the segment is still occupied. */\r
-               if( pxSegment->lDataLength > 0 )\r
-               {\r
-                       lResult = 0L;\r
-               }\r
-               else\r
-               {\r
-                       if( ulLength > ( uint32_t ) pxSegment->lMaxLength )\r
-                       {\r
-                               if( ( xTCPWindowLoggingLevel != 0 ) && ( ipconfigTCP_MAY_LOG_PORT( pxWindow->usOurPortNumber ) != pdFALSE ) )\r
-                               {\r
-                                       FreeRTOS_debug_printf( ( "lTCPWindowTxAdd: can only store %ld / %ld bytes\n", ulLength, pxSegment->lMaxLength ) );\r
-                               }\r
-\r
-                               ulLength = ( uint32_t ) pxSegment->lMaxLength;\r
-                       }\r
-\r
-                       if( ( xTCPWindowLoggingLevel != 0 ) && ( ipconfigTCP_MAY_LOG_PORT( pxWindow->usOurPortNumber ) != pdFALSE ) )\r
-                       {\r
-                               FreeRTOS_debug_printf( ( "lTCPWindowTxAdd: SeqNr %ld (%ld) Len %ld\n",\r
-                                       pxWindow->ulNextTxSequenceNumber - pxWindow->tx.ulFirstSequenceNumber,\r
-                                       pxWindow->tx.ulCurrentSequenceNumber - pxWindow->tx.ulFirstSequenceNumber,\r
-                                       ulLength ) );\r
-                       }\r
-\r
-                       /* The sequence number of the first byte in this packet. */\r
-                       pxSegment->ulSequenceNumber = pxWindow->ulNextTxSequenceNumber;\r
-                       pxSegment->lDataLength = ( int32_t ) ulLength;\r
-                       pxSegment->lStreamPos = lPosition;\r
-                       pxSegment->u.ulFlags = 0UL;\r
-                       vTCPTimerSet( &( pxSegment->xTransmitTimer ) );\r
-\r
-                       /* Increase the sequence number of the next data to be stored for\r
-                       transmission. */\r
-                       pxWindow->ulNextTxSequenceNumber += ulLength;\r
-                       lResult = ( int32_t )ulLength;\r
-               }\r
-\r
-               return lResult;\r
-       }\r
-\r
-#endif /* ipconfigUSE_TCP_WIN == 0 */\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_TCP_WIN == 0 )\r
-\r
-       uint32_t ulTCPWindowTxGet( TCPWindow_t *pxWindow, uint32_t ulWindowSize, int32_t *plPosition )\r
-       {\r
-       TCPSegment_t *pxSegment = &( pxWindow->xTxSegment );\r
-       uint32_t ulLength = ( uint32_t ) pxSegment->lDataLength;\r
-       uint32_t ulMaxTime;\r
-\r
-               if( ulLength != 0UL )\r
-               {\r
-                       /* _HT_ Still under investigation */\r
-                       ( void ) ulWindowSize;\r
-\r
-                       if( pxSegment->u.bits.bOutstanding != pdFALSE_UNSIGNED )\r
-                       {\r
-                               /* As 'ucTransmitCount' has a minimum of 1, take 2 * RTT */\r
-                               ulMaxTime = ( ( uint32_t ) 1u << pxSegment->u.bits.ucTransmitCount ) * ( ( uint32_t ) pxWindow->lSRTT );\r
-\r
-                               if( ulTimerGetAge( &( pxSegment->xTransmitTimer ) ) < ulMaxTime )\r
-                               {\r
-                                       ulLength = 0ul;\r
-                               }\r
-                       }\r
-\r
-                       if( ulLength != 0ul )\r
-                       {\r
-                               pxSegment->u.bits.bOutstanding = pdTRUE_UNSIGNED;\r
-                               pxSegment->u.bits.ucTransmitCount++;\r
-                               vTCPTimerSet (&pxSegment->xTransmitTimer);\r
-                               pxWindow->ulOurSequenceNumber = pxSegment->ulSequenceNumber;\r
-                               *plPosition = pxSegment->lStreamPos;\r
-                       }\r
-               }\r
-\r
-               return ulLength;\r
-       }\r
-\r
-#endif /* ipconfigUSE_TCP_WIN == 0 */\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_TCP_WIN == 0 )\r
-\r
-       BaseType_t xTCPWindowTxDone( TCPWindow_t *pxWindow )\r
-       {\r
-       BaseType_t xReturn;\r
-\r
-               /* Has the outstanding data been sent because user wants to shutdown? */\r
-               if( pxWindow->xTxSegment.lDataLength == 0 )\r
-               {\r
-                       xReturn = pdTRUE;\r
-               }\r
-               else\r
-               {\r
-                       xReturn = pdFALSE;\r
-               }\r
-\r
-               return xReturn;\r
-       }\r
-\r
-#endif /* ipconfigUSE_TCP_WIN == 0 */\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_TCP_WIN == 0 )\r
-\r
-       static BaseType_t prvTCPWindowTxHasSpace( TCPWindow_t *pxWindow, uint32_t ulWindowSize );\r
-       static BaseType_t prvTCPWindowTxHasSpace( TCPWindow_t *pxWindow, uint32_t ulWindowSize )\r
-       {\r
-       BaseType_t xReturn;\r
-\r
-               if( ulWindowSize >= pxWindow->usMSSInit )\r
-               {\r
-                       xReturn = pdTRUE;\r
-               }\r
-               else\r
-               {\r
-                       xReturn = pdFALSE;\r
-               }\r
-\r
-               return xReturn;\r
-       }\r
-\r
-#endif /* ipconfigUSE_TCP_WIN == 0 */\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_TCP_WIN == 0 )\r
-\r
-       BaseType_t xTCPWindowTxHasData( TCPWindow_t *pxWindow, uint32_t ulWindowSize, TickType_t *pulDelay )\r
-       {\r
-       TCPSegment_t *pxSegment = &( pxWindow->xTxSegment );\r
-       BaseType_t xReturn;\r
-       TickType_t ulAge, ulMaxAge;\r
-\r
-               /* Check data to be sent. */\r
-               *pulDelay = ( TickType_t ) 0;\r
-               if( pxSegment->lDataLength == 0 )\r
-               {\r
-                       /* Got nothing to send right now. */\r
-                       xReturn = pdFALSE;\r
-               }\r
-               else\r
-               {\r
-                       if( pxSegment->u.bits.bOutstanding != pdFALSE_UNSIGNED )\r
-                       {\r
-                               ulAge = ulTimerGetAge ( &pxSegment->xTransmitTimer );\r
-                               ulMaxAge = ( ( TickType_t ) 1u << pxSegment->u.bits.ucTransmitCount ) * ( ( uint32_t ) pxWindow->lSRTT );\r
-\r
-                               if( ulMaxAge > ulAge )\r
-                               {\r
-                                       *pulDelay = ulMaxAge - ulAge;\r
-                               }\r
-\r
-                               xReturn = pdTRUE;\r
-                       }\r
-                       else if( prvTCPWindowTxHasSpace( pxWindow, ulWindowSize ) == pdFALSE )\r
-                       {\r
-                               /* Too many outstanding messages. */\r
-                               xReturn = pdFALSE;\r
-                       }\r
-                       else\r
-                       {\r
-                               xReturn = pdTRUE;\r
-                       }\r
-               }\r
-\r
-               return xReturn;\r
-       }\r
-\r
-#endif /* ipconfigUSE_TCP_WIN == 0 */\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_TCP_WIN == 0 )\r
-\r
-       uint32_t ulTCPWindowTxAck( TCPWindow_t *pxWindow, uint32_t ulSequenceNumber )\r
-       {\r
-       TCPSegment_t *pxSegment = &( pxWindow->xTxSegment );\r
-       uint32_t ulDataLength = ( uint32_t ) pxSegment->lDataLength;\r
-\r
-               /* Receive a normal ACK */\r
-\r
-               if( ulDataLength != 0ul )\r
-               {\r
-                       if( ulSequenceNumber < ( pxWindow->tx.ulCurrentSequenceNumber + ulDataLength ) )\r
-                       {\r
-                               if( ipconfigTCP_MAY_LOG_PORT( pxWindow->usOurPortNumber ) != pdFALSE )\r
-                               {\r
-                                       FreeRTOS_debug_printf( ( "win_tx_ack: acked %ld expc %ld len %ld\n",\r
-                                               ulSequenceNumber - pxWindow->tx.ulFirstSequenceNumber,\r
-                                               pxWindow->tx.ulCurrentSequenceNumber - pxWindow->tx.ulFirstSequenceNumber,\r
-                                               ulDataLength ) );\r
-                               }\r
-\r
-                               /* Nothing to send right now. */\r
-                               ulDataLength = 0ul;\r
-                       }\r
-                       else\r
-                       {\r
-                               pxWindow->tx.ulCurrentSequenceNumber += ulDataLength;\r
-\r
-                               if( ( xTCPWindowLoggingLevel != 0 ) && ( ipconfigTCP_MAY_LOG_PORT( pxWindow->usOurPortNumber ) != pdFALSE ) )\r
-                               {\r
-                                       FreeRTOS_debug_printf( ( "win_tx_ack: acked seqnr %ld len %ld\n",\r
-                                               ulSequenceNumber - pxWindow->tx.ulFirstSequenceNumber,\r
-                                               ulDataLength ) );\r
-                               }\r
-\r
-                               pxSegment->lDataLength = 0;\r
-                       }\r
-               }\r
-\r
-               return ulDataLength;\r
-       }\r
-\r
-#endif /* ipconfigUSE_TCP_WIN == 0 */\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_TCP_WIN == 0 )\r
-\r
-       BaseType_t xTCPWindowRxEmpty( TCPWindow_t *pxWindow )\r
-       {\r
-               /* Return true if 'ulCurrentSequenceNumber >= ulHighestSequenceNumber'\r
-               'ulCurrentSequenceNumber' is the highest sequence number stored,\r
-               'ulHighestSequenceNumber' is the highest sequence number seen. */\r
-               return xSequenceGreaterThanOrEqual( pxWindow->rx.ulCurrentSequenceNumber, pxWindow->rx.ulHighestSequenceNumber );\r
-       }\r
-\r
-#endif /* ipconfigUSE_TCP_WIN == 0 */\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_TCP_WIN == 0 )\r
-\r
-       /* Destroy a window (always returns NULL) */\r
-       void vTCPWindowDestroy( TCPWindow_t *pxWindow )\r
-       {\r
-               /* As in tiny TCP there are no shared segments descriptors, there is\r
-               nothing to release. */\r
-               ( void ) pxWindow;\r
-       }\r
-\r
-#endif /* ipconfigUSE_TCP_WIN == 0 */\r
-/*-----------------------------------------------------------*/\r
-\r
-\r
+/*
+ * FreeRTOS+TCP V2.2.0
+ * 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
+ */
+
+/*
+ * FreeRTOS_TCP_WIN.c
+ * Module which handles the TCP windowing schemes for FreeRTOS+TCP.  Many
+ * functions have two versions - one for FreeRTOS+TCP (full) and one for
+ * FreeRTOS+TCP (lite).
+ *
+ * In this module all ports and IP addresses and sequence numbers are
+ * being stored in host byte-order.
+ */
+
+/* Standard includes. */
+#include <stdint.h>
+
+/* FreeRTOS includes. */
+#include "FreeRTOS.h"
+#include "task.h"
+#include "queue.h"
+#include "semphr.h"
+
+/* FreeRTOS+TCP includes. */
+#include "FreeRTOS_UDP_IP.h"
+#include "FreeRTOS_IP.h"
+#include "FreeRTOS_Sockets.h"
+#include "FreeRTOS_IP_Private.h"
+#include "NetworkBufferManagement.h"
+#include "FreeRTOS_TCP_WIN.h"
+
+/* Constants used for Smoothed Round Trip Time (SRTT). */
+#define        winSRTT_INCREMENT_NEW           2
+#define winSRTT_INCREMENT_CURRENT      6
+#define        winSRTT_DECREMENT_NEW           1
+#define winSRTT_DECREMENT_CURRENT      7
+#define winSRTT_CAP_mS                         50
+
+#if( ipconfigUSE_TCP_WIN == 1 )
+
+       #define xTCPWindowRxNew( pxWindow, ulSequenceNumber, lCount ) xTCPWindowNew( pxWindow, ulSequenceNumber, lCount, pdTRUE )
+
+       #define xTCPWindowTxNew( pxWindow, ulSequenceNumber, lCount ) xTCPWindowNew( pxWindow, ulSequenceNumber, lCount, pdFALSE )
+
+       /* The code to send a single Selective ACK (SACK):
+        * NOP (0x01), NOP (0x01), SACK (0x05), LEN (0x0a),
+        * followed by a lower and a higher sequence number,
+        * where LEN is 2 + 2*4 = 10 bytes. */
+       #if( ipconfigBYTE_ORDER == pdFREERTOS_BIG_ENDIAN )
+               #define OPTION_CODE_SINGLE_SACK         ( 0x0101050aUL )
+       #else
+               #define OPTION_CODE_SINGLE_SACK         ( 0x0a050101UL )
+       #endif
+
+       /* Normal retransmission:
+        * A packet will be retransmitted after a Retransmit Time-Out (RTO).
+        * Fast retransmission:
+        * When 3 packets with a higher sequence number have been acknowledged
+        * by the peer, it is very unlikely a current packet will ever arrive.
+        * It will be retransmitted far before the RTO.
+        */
+       #define DUPLICATE_ACKS_BEFORE_FAST_RETRANSMIT           ( 3u )
+
+       /* If there have been several retransmissions (4), decrease the
+        * size of the transmission window to at most 2 times MSS.
+        */
+       #define MAX_TRANSMIT_COUNT_USING_LARGE_WINDOW           ( 4u )
+
+#endif /* configUSE_TCP_WIN */
+/*-----------------------------------------------------------*/
+
+extern void vListInsertGeneric( List_t * const pxList, ListItem_t * const pxNewListItem, MiniListItem_t * const pxWhere );
+
+/*
+ * All TCP sockets share a pool of segment descriptors (TCPSegment_t)
+ * Available descriptors are stored in the 'xSegmentList'
+ * When a socket owns a descriptor, it will either be stored in
+ * 'xTxSegments' or 'xRxSegments'
+ * As soon as a package has been confirmed, the descriptor will be returned
+ * to the segment pool
+ */
+#if( ipconfigUSE_TCP_WIN == 1 )
+       static BaseType_t prvCreateSectors( void );
+#endif /* ipconfigUSE_TCP_WIN == 1 */
+
+/*
+ * Find a segment with a given sequence number in the list of received
+ * segments: 'pxWindow->xRxSegments'.
+ */
+#if( ipconfigUSE_TCP_WIN == 1 )
+       static TCPSegment_t *xTCPWindowRxFind( TCPWindow_t *pxWindow, uint32_t ulSequenceNumber );
+#endif /* ipconfigUSE_TCP_WIN == 1 */
+
+/*
+ * Allocate a new segment
+ * The socket will borrow all segments from a common pool: 'xSegmentList',
+ * which is a list of 'TCPSegment_t'
+ */
+#if( ipconfigUSE_TCP_WIN == 1 )
+       static TCPSegment_t *xTCPWindowNew( TCPWindow_t *pxWindow, uint32_t ulSequenceNumber, int32_t lCount, BaseType_t xIsForRx );
+#endif /* ipconfigUSE_TCP_WIN == 1 */
+
+/* When the peer has a close request (FIN flag), the driver will check if
+ * there are missing packets in the Rx-queue
+ * It will accept the closure of the connection if both conditions are true:
+ * - the Rx-queue is empty
+ * - we've ACK'd the highest Rx sequence number seen
+ */
+#if( ipconfigUSE_TCP_WIN == 1 )
+       BaseType_t xTCPWindowRxEmpty( TCPWindow_t *pxWindow );
+#endif /* ipconfigUSE_TCP_WIN == 1 */
+
+/*
+ * Detaches and returns the head of a queue
+ */
+#if( ipconfigUSE_TCP_WIN == 1 )
+       static TCPSegment_t *xTCPWindowGetHead( List_t *pxList );
+#endif /* ipconfigUSE_TCP_WIN == 1 */
+
+/*
+ * Returns the head of a queue but it won't be detached
+ */
+#if( ipconfigUSE_TCP_WIN == 1 )
+       static TCPSegment_t *xTCPWindowPeekHead( List_t *pxList );
+#endif /* ipconfigUSE_TCP_WIN == 1 */
+
+/*
+ *  Free entry pxSegment because it's not used anymore
+ *     The ownership will be passed back to the segment pool
+ */
+#if( ipconfigUSE_TCP_WIN == 1 )
+       static void vTCPWindowFree( TCPSegment_t *pxSegment );
+#endif /* ipconfigUSE_TCP_WIN == 1 */
+
+/*
+ * A segment has been received with sequence number 'ulSequenceNumber', where
+ * 'ulCurrentSequenceNumber == ulSequenceNumber', which means that exactly this
+ * segment was expected.  xTCPWindowRxConfirm() will check if there is already
+ * another segment with a sequence number between (ulSequenceNumber) and
+ * (ulSequenceNumber+xLength).  Normally none will be found, because the next Rx
+ * segment should have a sequence number equal to '(ulSequenceNumber+xLength)'.
+ */
+#if( ipconfigUSE_TCP_WIN == 1 )
+       static TCPSegment_t *xTCPWindowRxConfirm( TCPWindow_t *pxWindow, uint32_t ulSequenceNumber, uint32_t ulLength );
+#endif /* ipconfigUSE_TCP_WIN == 1 */
+
+/*
+ * FreeRTOS+TCP stores data in circular buffers.  Calculate the next position to
+ * store.
+ */
+#if( ipconfigUSE_TCP_WIN == 1 )
+       static int32_t lTCPIncrementTxPosition( int32_t lPosition, int32_t lMax, int32_t lCount );
+#endif /* ipconfigUSE_TCP_WIN == 1 */
+
+/*
+ * This function will look if there is new transmission data.  It will return
+ * true if there is data to be sent.
+ */
+#if( ipconfigUSE_TCP_WIN == 1 )
+       static BaseType_t prvTCPWindowTxHasSpace( TCPWindow_t *pxWindow, uint32_t ulWindowSize );
+#endif /* ipconfigUSE_TCP_WIN == 1 */
+
+/*
+ * An acknowledge was received.  See if some outstanding data may be removed
+ * from the transmission queue(s).
+ */
+#if( ipconfigUSE_TCP_WIN == 1 )
+       static uint32_t prvTCPWindowTxCheckAck( TCPWindow_t *pxWindow, uint32_t ulFirst, uint32_t ulLast );
+#endif /* ipconfigUSE_TCP_WIN == 1 */
+
+/*
+ * A higher Tx block has been acknowledged.  Now iterate through the xWaitQueue
+ * to find a possible condition for a FAST retransmission.
+ */
+#if( ipconfigUSE_TCP_WIN == 1 )
+       static uint32_t prvTCPWindowFastRetransmit( TCPWindow_t *pxWindow, uint32_t ulFirst );
+#endif /* ipconfigUSE_TCP_WIN == 1 */
+
+/*-----------------------------------------------------------*/
+
+/* TCP segment pool. */
+#if( ipconfigUSE_TCP_WIN == 1 )
+       static TCPSegment_t *xTCPSegments = NULL;
+#endif /* ipconfigUSE_TCP_WIN == 1 */
+
+/* List of free TCP segments. */
+#if( ipconfigUSE_TCP_WIN == 1 )
+       static List_t xSegmentList;
+#endif
+
+/* Logging verbosity level. */
+BaseType_t xTCPWindowLoggingLevel = 0;
+
+#if( ipconfigUSE_TCP_WIN == 1 )
+       /* Some 32-bit arithmetic: comparing sequence numbers */
+       static portINLINE BaseType_t xSequenceLessThanOrEqual( uint32_t a, uint32_t b );
+       static portINLINE BaseType_t xSequenceLessThanOrEqual( uint32_t a, uint32_t b )
+       {
+               /* Test if a <= b
+               Return true if the unsigned subtraction of (b-a) doesn't generate an
+               arithmetic overflow. */
+               return ( ( b - a ) & 0x80000000UL ) == 0UL;
+       }
+#endif /* ipconfigUSE_TCP_WIN */
+/*-----------------------------------------------------------*/
+
+#if( ipconfigUSE_TCP_WIN == 1 )
+       static portINLINE BaseType_t xSequenceLessThan( uint32_t a, uint32_t b );
+       static portINLINE BaseType_t xSequenceLessThan( uint32_t a, uint32_t b )
+       {
+               /* Test if a < b */
+               return ( ( b - a - 1UL ) & 0x80000000UL ) == 0UL;
+       }
+#endif /* ipconfigUSE_TCP_WIN */
+/*-----------------------------------------------------------*/
+
+#if( ipconfigUSE_TCP_WIN == 1 )
+       static portINLINE BaseType_t xSequenceGreaterThan( uint32_t a, uint32_t b );
+       static portINLINE BaseType_t xSequenceGreaterThan( uint32_t a, uint32_t b )
+       {
+               /* Test if a > b */
+               return ( ( a - b - 1UL ) & 0x80000000UL ) == 0UL;
+       }
+#endif /* ipconfigUSE_TCP_WIN */
+
+/*-----------------------------------------------------------*/
+static portINLINE BaseType_t xSequenceGreaterThanOrEqual( uint32_t a, uint32_t b );
+static portINLINE BaseType_t xSequenceGreaterThanOrEqual( uint32_t a, uint32_t b )
+{
+       /* Test if a >= b */
+       return ( ( a - b ) & 0x80000000UL ) == 0UL;
+}
+/*-----------------------------------------------------------*/
+
+#if( ipconfigUSE_TCP_WIN == 1 )
+       static portINLINE void vListInsertFifo( List_t * const pxList, ListItem_t * const pxNewListItem );
+       static portINLINE void vListInsertFifo( List_t * const pxList, ListItem_t * const pxNewListItem )
+       {
+               vListInsertGeneric( pxList, pxNewListItem, &pxList->xListEnd );
+       }
+#endif
+/*-----------------------------------------------------------*/
+
+static portINLINE void vTCPTimerSet( TCPTimer_t *pxTimer );
+static portINLINE void vTCPTimerSet( TCPTimer_t *pxTimer )
+{
+       pxTimer->ulBorn = xTaskGetTickCount ( );
+}
+/*-----------------------------------------------------------*/
+
+static portINLINE uint32_t ulTimerGetAge( TCPTimer_t *pxTimer );
+static portINLINE uint32_t ulTimerGetAge( TCPTimer_t *pxTimer )
+{
+       return ( ( xTaskGetTickCount() - pxTimer->ulBorn ) * portTICK_PERIOD_MS );
+}
+/*-----------------------------------------------------------*/
+
+/* _HT_ GCC (using the settings that I'm using) checks for every public function if it is
+preceded by a prototype. Later this prototype will be located in list.h? */
+
+extern void vListInsertGeneric( List_t * const pxList, ListItem_t * const pxNewListItem, MiniListItem_t * const pxWhere );
+
+void vListInsertGeneric( List_t * const pxList, ListItem_t * const pxNewListItem, MiniListItem_t * const pxWhere )
+{
+       /* Insert a new list item into pxList, it does not sort the list,
+       but it puts the item just before xListEnd, so it will be the last item
+       returned by listGET_HEAD_ENTRY() */
+       pxNewListItem->pxNext = (struct xLIST_ITEM * configLIST_VOLATILE)pxWhere;
+       pxNewListItem->pxPrevious = pxWhere->pxPrevious;
+       pxWhere->pxPrevious->pxNext = pxNewListItem;
+       pxWhere->pxPrevious = pxNewListItem;
+
+       /* Remember which list the item is in. */
+       listLIST_ITEM_CONTAINER( pxNewListItem ) = ( void * ) pxList;
+
+       ( pxList->uxNumberOfItems )++;
+}
+/*-----------------------------------------------------------*/
+
+#if( ipconfigUSE_TCP_WIN == 1 )
+
+       static BaseType_t prvCreateSectors( void )
+       {
+       BaseType_t xIndex, xReturn;
+
+               /* Allocate space for 'xTCPSegments' and store them in 'xSegmentList'. */
+
+               vListInitialise( &xSegmentList );
+               xTCPSegments = ( TCPSegment_t * ) pvPortMallocLarge( ipconfigTCP_WIN_SEG_COUNT * sizeof( xTCPSegments[ 0 ] ) );
+
+               if( xTCPSegments == NULL )
+               {
+                       FreeRTOS_debug_printf( ( "prvCreateSectors: malloc %lu failed\n",
+                               ipconfigTCP_WIN_SEG_COUNT * sizeof( xTCPSegments[ 0 ] ) ) );
+
+                       xReturn = pdFAIL;
+               }
+               else
+               {
+                       /* Clear the allocated space. */
+                       memset( xTCPSegments, '\0', ipconfigTCP_WIN_SEG_COUNT * sizeof( xTCPSegments[ 0 ] ) );
+
+                       for( xIndex = 0; xIndex < ipconfigTCP_WIN_SEG_COUNT; xIndex++ )
+                       {
+                               /* Could call vListInitialiseItem here but all data has been
+                               nulled already.  Set the owner to a segment descriptor. */
+                               listSET_LIST_ITEM_OWNER( &( xTCPSegments[ xIndex ].xListItem ), ( void* ) &( xTCPSegments[ xIndex ] ) );
+                               listSET_LIST_ITEM_OWNER( &( xTCPSegments[ xIndex ].xQueueItem ), ( void* ) &( xTCPSegments[ xIndex ] ) );
+
+                               /* And add it to the pool of available segments */
+                               vListInsertFifo( &xSegmentList, &( xTCPSegments[xIndex].xListItem ) );
+                       }
+
+                       xReturn = pdPASS;
+               }
+
+               return xReturn;
+       }
+
+#endif /* ipconfigUSE_TCP_WIN == 1 */
+/*-----------------------------------------------------------*/
+
+#if( ipconfigUSE_TCP_WIN == 1 )
+
+       static TCPSegment_t *xTCPWindowRxFind( TCPWindow_t *pxWindow, uint32_t ulSequenceNumber )
+       {
+       const ListItem_t *pxIterator;
+       const MiniListItem_t* pxEnd;
+       TCPSegment_t *pxSegment, *pxReturn = NULL;
+
+               /* Find a segment with a given sequence number in the list of received
+               segments. */
+
+               pxEnd = ( const MiniListItem_t* )listGET_END_MARKER( &pxWindow->xRxSegments );
+
+               for( pxIterator  = ( const ListItem_t * ) listGET_NEXT( pxEnd );
+                        pxIterator != ( const ListItem_t * ) pxEnd;
+                        pxIterator  = ( const ListItem_t * ) listGET_NEXT( pxIterator ) )
+               {
+                       pxSegment = ( TCPSegment_t * ) listGET_LIST_ITEM_OWNER( pxIterator );
+
+                       if( pxSegment->ulSequenceNumber == ulSequenceNumber )
+                       {
+                               pxReturn = pxSegment;
+                               break;
+                       }
+               }
+
+               return pxReturn;
+       }
+
+#endif /* ipconfigUSE_TCP_WIN == 1 */
+/*-----------------------------------------------------------*/
+
+#if( ipconfigUSE_TCP_WIN == 1 )
+
+       static TCPSegment_t *xTCPWindowNew( TCPWindow_t *pxWindow, uint32_t ulSequenceNumber, int32_t lCount, BaseType_t xIsForRx )
+       {
+       TCPSegment_t *pxSegment;
+       ListItem_t * pxItem;
+
+               /* Allocate a new segment.  The socket will borrow all segments from a
+               common pool: 'xSegmentList', which is a list of 'TCPSegment_t' */
+               if( listLIST_IS_EMPTY( &xSegmentList ) != pdFALSE )
+               {
+                       /* If the TCP-stack runs out of segments, you might consider
+                       increasing 'ipconfigTCP_WIN_SEG_COUNT'. */
+                       FreeRTOS_debug_printf( ( "xTCPWindow%cxNew: Error: all segments occupied\n", xIsForRx ? 'R' : 'T' ) );
+                       pxSegment = NULL;
+               }
+               else
+               {
+                       /* Pop the item at the head of the list.  Semaphore protection is
+                       not required as only the IP task will call these functions.  */
+                       pxItem = ( ListItem_t * ) listGET_HEAD_ENTRY( &xSegmentList );
+                       pxSegment = ( TCPSegment_t * ) listGET_LIST_ITEM_OWNER( pxItem );
+
+                       configASSERT( pxItem != NULL );
+                       configASSERT( pxSegment != NULL );
+
+                       /* Remove the item from xSegmentList. */
+                       uxListRemove( pxItem );
+
+                       /* Add it to either the connections' Rx or Tx queue. */
+                       vListInsertFifo( xIsForRx ? &pxWindow->xRxSegments : &pxWindow->xTxSegments, pxItem );
+
+                       /* And set the segment's timer to zero */
+                       vTCPTimerSet( &pxSegment->xTransmitTimer );
+
+                       pxSegment->u.ulFlags = 0;
+                       pxSegment->u.bits.bIsForRx = ( xIsForRx != 0 );
+                       pxSegment->lMaxLength = lCount;
+                       pxSegment->lDataLength = lCount;
+                       pxSegment->ulSequenceNumber = ulSequenceNumber;
+                       #if( ipconfigHAS_DEBUG_PRINTF != 0 )
+                       {
+                       static UBaseType_t xLowestLength = ipconfigTCP_WIN_SEG_COUNT;
+                       UBaseType_t xLength = listCURRENT_LIST_LENGTH( &xSegmentList );
+
+                               if( xLowestLength > xLength )
+                               {
+                                       xLowestLength = xLength;
+                               }
+                       }
+                       #endif /* ipconfigHAS_DEBUG_PRINTF */
+               }
+
+               return pxSegment;
+       }
+
+#endif /* ipconfigUSE_TCP_WIN == 1 */
+/*-----------------------------------------------------------*/
+
+#if( ipconfigUSE_TCP_WIN == 1 )
+
+       BaseType_t xTCPWindowRxEmpty( TCPWindow_t *pxWindow )
+       {
+       BaseType_t xReturn;
+
+               /* When the peer has a close request (FIN flag), the driver will check
+               if there are missing packets in the Rx-queue.  It will accept the
+               closure of the connection if both conditions are true:
+                 - the Rx-queue is empty
+                 - the highest Rx sequence number has been ACK'ed */
+               if( listLIST_IS_EMPTY( ( &pxWindow->xRxSegments ) ) == pdFALSE )
+               {
+                       /* Rx data has been stored while earlier packets were missing. */
+                       xReturn = pdFALSE;
+               }
+               else if( xSequenceGreaterThanOrEqual( pxWindow->rx.ulCurrentSequenceNumber, pxWindow->rx.ulHighestSequenceNumber ) != pdFALSE )
+               {
+                       /* No Rx packets are being stored and the highest sequence number
+                       that has been received has been ACKed. */
+                       xReturn = pdTRUE;
+               }
+               else
+               {
+                       FreeRTOS_debug_printf( ( "xTCPWindowRxEmpty: cur %lu highest %lu (empty)\n",
+                               ( pxWindow->rx.ulCurrentSequenceNumber - pxWindow->rx.ulFirstSequenceNumber ),
+                               ( pxWindow->rx.ulHighestSequenceNumber - pxWindow->rx.ulFirstSequenceNumber ) ) );
+                       xReturn = pdFALSE;
+               }
+
+               return xReturn;
+       }
+
+#endif /* ipconfigUSE_TCP_WIN == 1 */
+/*-----------------------------------------------------------*/
+
+#if( ipconfigUSE_TCP_WIN == 1 )
+
+       static TCPSegment_t *xTCPWindowGetHead( List_t *pxList )
+       {
+       TCPSegment_t *pxSegment;
+       ListItem_t * pxItem;
+
+               /* Detaches and returns the head of a queue. */
+               if( listLIST_IS_EMPTY( pxList ) != pdFALSE )
+               {
+                       pxSegment = NULL;
+               }
+               else
+               {
+                       pxItem = ( ListItem_t * ) listGET_HEAD_ENTRY( pxList );
+                       pxSegment = ( TCPSegment_t * ) listGET_LIST_ITEM_OWNER( pxItem );
+
+                       uxListRemove( pxItem );
+               }
+
+               return pxSegment;
+       }
+
+#endif /* ipconfigUSE_TCP_WIN == 1 */
+/*-----------------------------------------------------------*/
+
+#if( ipconfigUSE_TCP_WIN == 1 )
+
+       static TCPSegment_t *xTCPWindowPeekHead( List_t *pxList )
+       {
+       ListItem_t *pxItem;
+       TCPSegment_t *pxReturn;
+
+               /* Returns the head of a queue but it won't be detached. */
+               if( listLIST_IS_EMPTY( pxList ) != pdFALSE )
+               {
+                       pxReturn = NULL;
+               }
+               else
+               {
+                       pxItem = ( ListItem_t * ) listGET_HEAD_ENTRY( pxList );
+                       pxReturn = ( TCPSegment_t * ) listGET_LIST_ITEM_OWNER( pxItem );
+               }
+
+               return pxReturn;
+       }
+
+#endif /* ipconfigUSE_TCP_WIN == 1 */
+/*-----------------------------------------------------------*/
+
+#if( ipconfigUSE_TCP_WIN == 1 )
+
+       static void vTCPWindowFree( TCPSegment_t *pxSegment )
+       {
+               /*  Free entry pxSegment because it's not used any more.  The ownership
+               will be passed back to the segment pool.
+
+               Unlink it from one of the queues, if any. */
+               if( listLIST_ITEM_CONTAINER( &( pxSegment->xQueueItem ) ) != NULL )
+               {
+                       uxListRemove( &( pxSegment->xQueueItem ) );
+               }
+
+               pxSegment->ulSequenceNumber = 0u;
+               pxSegment->lDataLength = 0l;
+               pxSegment->u.ulFlags = 0u;
+
+               /* Take it out of xRxSegments/xTxSegments */
+               if( listLIST_ITEM_CONTAINER( &( pxSegment->xListItem ) ) != NULL )
+               {
+                       uxListRemove( &( pxSegment->xListItem ) );
+               }
+
+               /* Return it to xSegmentList */
+               vListInsertFifo( &xSegmentList, &( pxSegment->xListItem ) );
+       }
+
+#endif /* ipconfigUSE_TCP_WIN == 1 */
+/*-----------------------------------------------------------*/
+
+#if( ipconfigUSE_TCP_WIN == 1 )
+
+       void vTCPWindowDestroy( TCPWindow_t *pxWindow )
+       {
+       List_t * pxSegments;
+       BaseType_t xRound;
+       TCPSegment_t *pxSegment;
+
+               /*  Destroy a window.  A TCP window doesn't serve any more.  Return all
+               owned segments to the pool.  In order to save code, it will make 2 rounds,
+               one to remove the segments from xRxSegments, and a second round to clear
+               xTxSegments*/
+               for( xRound = 0; xRound < 2; xRound++ )
+               {
+                       if( xRound != 0 )
+                       {
+                               pxSegments = &( pxWindow->xRxSegments );
+                       }
+                       else
+                       {
+                               pxSegments = &( pxWindow->xTxSegments );
+                       }
+
+                       if( listLIST_IS_INITIALISED( pxSegments ) != pdFALSE )
+                       {
+                               while( listCURRENT_LIST_LENGTH( pxSegments ) > 0U )
+                               {
+                                       pxSegment = ( TCPSegment_t * ) listGET_OWNER_OF_HEAD_ENTRY( pxSegments );
+                                       vTCPWindowFree( pxSegment );
+                               }
+                       }
+               }
+       }
+
+#endif /* ipconfigUSE_TCP_WIN == 1 */
+/*-----------------------------------------------------------*/
+
+void vTCPWindowCreate( TCPWindow_t *pxWindow, uint32_t ulRxWindowLength,
+       uint32_t ulTxWindowLength, uint32_t ulAckNumber, uint32_t ulSequenceNumber, uint32_t ulMSS )
+{
+       /* Create and initialize a window. */
+
+       #if( ipconfigUSE_TCP_WIN == 1 )
+       {
+               if( xTCPSegments == NULL )
+               {
+                       prvCreateSectors();
+               }
+
+               vListInitialise( &pxWindow->xTxSegments );
+               vListInitialise( &pxWindow->xRxSegments );
+
+               vListInitialise( &pxWindow->xPriorityQueue );                   /* Priority queue: segments which must be sent immediately */
+               vListInitialise( &pxWindow->xTxQueue   );                       /* Transmit queue: segments queued for transmission */
+               vListInitialise( &pxWindow->xWaitQueue );                       /* Waiting queue:  outstanding segments */
+       }
+       #endif /* ipconfigUSE_TCP_WIN == 1 */
+
+       if( xTCPWindowLoggingLevel != 0 )
+       {
+               FreeRTOS_debug_printf( ( "vTCPWindowCreate: for WinLen = Rx/Tx: %lu/%lu\n",
+                       ulRxWindowLength, ulTxWindowLength ) );
+       }
+
+       pxWindow->xSize.ulRxWindowLength = ulRxWindowLength;
+       pxWindow->xSize.ulTxWindowLength = ulTxWindowLength;
+
+       vTCPWindowInit( pxWindow, ulAckNumber, ulSequenceNumber, ulMSS );
+}
+/*-----------------------------------------------------------*/
+
+void vTCPWindowInit( TCPWindow_t *pxWindow, uint32_t ulAckNumber, uint32_t ulSequenceNumber, uint32_t ulMSS )
+{
+const int32_t l500ms = 500;
+
+       pxWindow->u.ulFlags = 0ul;
+       pxWindow->u.bits.bHasInit = pdTRUE_UNSIGNED;
+
+       if( ulMSS != 0ul )
+       {
+               if( pxWindow->usMSSInit != 0u )
+               {
+                       pxWindow->usMSSInit = ( uint16_t ) ulMSS;
+               }
+
+               if( ( ulMSS < ( uint32_t ) pxWindow->usMSS ) || ( pxWindow->usMSS == 0u ) )
+               {
+                       pxWindow->xSize.ulRxWindowLength = ( pxWindow->xSize.ulRxWindowLength / ulMSS ) * ulMSS;
+                       pxWindow->usMSS = ( uint16_t ) ulMSS;
+               }
+       }
+
+       #if( ipconfigUSE_TCP_WIN == 0 )
+       {
+               pxWindow->xTxSegment.lMaxLength = ( int32_t ) pxWindow->usMSS;
+       }
+       #endif /* ipconfigUSE_TCP_WIN == 1 */
+
+       /*Start with a timeout of 2 * 500 ms (1 sec). */
+       pxWindow->lSRTT = l500ms;
+
+       /* Just for logging, to print relative sequence numbers. */
+       pxWindow->rx.ulFirstSequenceNumber = ulAckNumber;
+
+       /* The segment asked for in the next transmission. */
+       pxWindow->rx.ulCurrentSequenceNumber = ulAckNumber;
+
+       /* The right-hand side of the receive window. */
+       pxWindow->rx.ulHighestSequenceNumber = ulAckNumber;
+
+       pxWindow->tx.ulFirstSequenceNumber = ulSequenceNumber;
+
+       /* The segment asked for in next transmission. */
+       pxWindow->tx.ulCurrentSequenceNumber = ulSequenceNumber;
+
+       /* The sequence number given to the next outgoing byte to be added is
+       maintained by lTCPWindowTxAdd(). */
+       pxWindow->ulNextTxSequenceNumber = ulSequenceNumber;
+
+       /* The right-hand side of the transmit window. */
+       pxWindow->tx.ulHighestSequenceNumber = ulSequenceNumber;
+       pxWindow->ulOurSequenceNumber = ulSequenceNumber;
+}
+/*-----------------------------------------------------------*/
+
+#if( ipconfigUSE_TCP_WIN == 1 )
+
+    void vTCPSegmentCleanup( void )
+    {
+        /* Free and clear the TCP segments pointer. This function should only be called
+         * once FreeRTOS+TCP will no longer be used. No thread-safety is provided for this
+         * function. */
+        if( xTCPSegments != NULL )
+        {
+            vPortFreeLarge( xTCPSegments );
+            xTCPSegments = NULL;
+        }
+    }
+
+#endif /* ipconfgiUSE_TCP_WIN == 1 */
+/*-----------------------------------------------------------*/
+
+/*=============================================================================
+ *
+ *                ######        #    #
+ *                 #    #       #    #
+ *                 #    #       #    #
+ *                 #    #        ####
+ *                 ######         ##
+ *                 #  ##         ####
+ *                 #   #        #    #
+ *                 #    #       #    #
+ *                ###  ##       #    #
+ * Rx functions
+ *
+ *=============================================================================*/
+
+#if( ipconfigUSE_TCP_WIN == 1 )
+
+       static TCPSegment_t *xTCPWindowRxConfirm( TCPWindow_t *pxWindow, uint32_t ulSequenceNumber, uint32_t ulLength )
+       {
+       TCPSegment_t *pxBest = NULL;
+       const ListItem_t *pxIterator;
+       uint32_t ulNextSequenceNumber = ulSequenceNumber + ulLength;
+       const MiniListItem_t* pxEnd = ( const MiniListItem_t* ) listGET_END_MARKER( &pxWindow->xRxSegments );
+       TCPSegment_t *pxSegment;
+
+               /* A segment has been received with sequence number 'ulSequenceNumber',
+               where 'ulCurrentSequenceNumber == ulSequenceNumber', which means that
+               exactly this segment was expected.  xTCPWindowRxConfirm() will check if
+               there is already another segment with a sequence number between (ulSequenceNumber)
+               and (ulSequenceNumber+ulLength).  Normally none will be found, because
+               the next RX segment should have a sequence number equal to
+               '(ulSequenceNumber+ulLength)'. */
+
+               /* Iterate through all RX segments that are stored: */
+               for( pxIterator  = ( const ListItem_t * ) listGET_NEXT( pxEnd );
+                        pxIterator != ( const ListItem_t * ) pxEnd;
+                        pxIterator  = ( const ListItem_t * ) listGET_NEXT( pxIterator ) )
+               {
+                       pxSegment = ( TCPSegment_t * ) listGET_LIST_ITEM_OWNER( pxIterator );
+                       /* And see if there is a segment for which:
+                       'ulSequenceNumber' <= 'pxSegment->ulSequenceNumber' < 'ulNextSequenceNumber'
+                       If there are more matching segments, the one with the lowest sequence number
+                       shall be taken */
+                       if( ( xSequenceGreaterThanOrEqual( pxSegment->ulSequenceNumber, ulSequenceNumber ) != 0 ) &&
+                               ( xSequenceLessThan( pxSegment->ulSequenceNumber, ulNextSequenceNumber ) != 0 ) )
+                       {
+                               if( ( pxBest == NULL ) || ( xSequenceLessThan( pxSegment->ulSequenceNumber, pxBest->ulSequenceNumber ) != 0 ) )
+                               {
+                                       pxBest = pxSegment;
+                               }
+                       }
+               }
+
+               if( ( pxBest != NULL ) &&
+                       ( ( pxBest->ulSequenceNumber != ulSequenceNumber ) || ( pxBest->lDataLength != ( int32_t ) ulLength ) ) )
+               {
+                       FreeRTOS_flush_logging();
+                       FreeRTOS_debug_printf( ( "xTCPWindowRxConfirm[%u]: search %lu (+%ld=%lu) found %lu (+%ld=%lu)\n",
+                               pxWindow->usPeerPortNumber,
+                               ulSequenceNumber - pxWindow->rx.ulFirstSequenceNumber,
+                               ulLength,
+                               ulSequenceNumber + ulLength - pxWindow->rx.ulFirstSequenceNumber,
+                               pxBest->ulSequenceNumber - pxWindow->rx.ulFirstSequenceNumber,
+                               pxBest->lDataLength,
+                               pxBest->ulSequenceNumber + ( ( uint32_t ) pxBest->lDataLength ) - pxWindow->rx.ulFirstSequenceNumber ) );
+               }
+
+               return pxBest;
+       }
+
+#endif /* ipconfgiUSE_TCP_WIN == 1 */
+/*-----------------------------------------------------------*/
+
+#if( ipconfigUSE_TCP_WIN == 1 )
+
+       int32_t lTCPWindowRxCheck( TCPWindow_t *pxWindow, uint32_t ulSequenceNumber, uint32_t ulLength, uint32_t ulSpace )
+       {
+       uint32_t ulCurrentSequenceNumber, ulLast, ulSavedSequenceNumber;
+       int32_t lReturn, lDistance;
+       TCPSegment_t *pxFound;
+
+               /* If lTCPWindowRxCheck( ) returns == 0, the packet will be passed
+               directly to user (segment is expected).  If it returns a positive
+               number, an earlier packet is missing, but this packet may be stored.
+               If negative, the packet has already been stored, or it is out-of-order,
+               or there is not enough space.
+
+               As a side-effect, pxWindow->ulUserDataLength will get set to non-zero,
+               if more Rx data may be passed to the user after this packet. */
+
+               ulCurrentSequenceNumber = pxWindow->rx.ulCurrentSequenceNumber;
+
+               /* For Selective Ack (SACK), used when out-of-sequence data come in. */
+               pxWindow->ucOptionLength = 0u;
+
+               /* Non-zero if TCP-windows contains data which must be popped. */
+               pxWindow->ulUserDataLength = 0ul;
+
+               if( ulCurrentSequenceNumber == ulSequenceNumber )
+               {
+                       /* This is the packet with the lowest sequence number we're waiting
+                       for.  It can be passed directly to the rx stream. */
+                       if( ulLength > ulSpace )
+                       {
+                               FreeRTOS_debug_printf( ( "lTCPWindowRxCheck: Refuse %lu bytes, due to lack of space (%lu)\n", ulLength, ulSpace ) );
+                               lReturn = -1;
+                       }
+                       else
+                       {
+                               ulCurrentSequenceNumber += ulLength;
+
+                               if( listCURRENT_LIST_LENGTH( &( pxWindow->xRxSegments ) ) != 0 )
+                               {
+                                       ulSavedSequenceNumber = ulCurrentSequenceNumber;
+
+                    /* Clean up all sequence received between ulSequenceNumber 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.
+                    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
+                    {
+                        pxFound = xTCPWindowRxConfirm( pxWindow, ulSequenceNumber, ulLength );
+
+                        if ( pxFound != NULL )
+                        {
+                            /* Remove it because it will be passed to user directly. */
+                            vTCPWindowFree( pxFound );
+                        }
+                    } while ( pxFound );
+
+                                       /*  Check for following segments that are already in the
+                                       queue and increment ulCurrentSequenceNumber. */
+                                       while( ( pxFound = xTCPWindowRxFind( pxWindow, ulCurrentSequenceNumber ) ) != NULL )
+                                       {
+                                               ulCurrentSequenceNumber += ( uint32_t ) pxFound->lDataLength;
+
+                                               /* As all packet below this one have been passed to the
+                                               user it can be discarded. */
+                                               vTCPWindowFree( pxFound );
+                                       }
+
+                                       if( ulSavedSequenceNumber != ulCurrentSequenceNumber )
+                                       {
+                                               /*  After the current data-package, there is more data
+                                               to be popped. */
+                                               pxWindow->ulUserDataLength = ulCurrentSequenceNumber - ulSavedSequenceNumber;
+
+                                               if( xTCPWindowLoggingLevel >= 1 )
+                                               {
+                                                       FreeRTOS_debug_printf( ( "lTCPWindowRxCheck[%d,%d]: retran %lu (Found %lu bytes at %lu cnt %ld)\n",
+                                                               pxWindow->usPeerPortNumber, pxWindow->usOurPortNumber,
+                                                               ulSequenceNumber - pxWindow->rx.ulFirstSequenceNumber,
+                                                               pxWindow->ulUserDataLength,
+                                                               ulSavedSequenceNumber - pxWindow->rx.ulFirstSequenceNumber,
+                                                               listCURRENT_LIST_LENGTH( &pxWindow->xRxSegments ) ) );
+                                               }
+                                       }
+                               }
+
+                               pxWindow->rx.ulCurrentSequenceNumber = ulCurrentSequenceNumber;
+
+                               /* Packet was expected, may be passed directly to the socket
+                               buffer or application.  Store the packet at offset 0. */
+                               lReturn = 0;
+                       }
+               }
+               else if( ulCurrentSequenceNumber == ( ulSequenceNumber + 1UL ) )
+               {
+                       /* Looks like a TCP keep-alive message.  Do not accept/store Rx data
+                       ulUserDataLength = 0. Not packet out-of-sync.  Just reply to it. */
+                       lReturn = -1;
+               }
+               else
+               {
+                       /* The packet is not the one expected.  See if it falls within the Rx
+                       window so it can be stored. */
+
+                       /*  An "out-of-sequence" segment was received, must have missed one.
+                       Prepare a SACK (Selective ACK). */
+                       ulLast = ulSequenceNumber + ulLength;
+                       lDistance = ( int32_t ) ( ulLast - ulCurrentSequenceNumber );
+
+                       if( lDistance <= 0 )
+                       {
+                               /* An earlier has been received, must be a retransmission of a
+                               packet that has been accepted already.  No need to send out a
+                               Selective ACK (SACK). */
+                               lReturn = -1;
+                       }
+                       else if( lDistance > ( int32_t ) ulSpace )
+                       {
+                               /* The new segment is ahead of rx.ulCurrentSequenceNumber.  The
+                               sequence number of this packet is too far ahead, ignore it. */
+                               FreeRTOS_debug_printf( ( "lTCPWindowRxCheck: Refuse %lu+%lu bytes, due to lack of space (%lu)\n", lDistance, ulLength, ulSpace ) );
+                               lReturn = -1;
+                       }
+                       else
+                       {
+                               /* See if there is more data in a contiguous block to make the
+                               SACK describe a longer range of data. */
+
+                               /* TODO: SACK's may also be delayed for a short period
+                                * This is useful because subsequent packets will be SACK'd with
+                                * single one message
+                                */
+                               while( ( pxFound = xTCPWindowRxFind( pxWindow, ulLast ) ) != NULL )
+                               {
+                                       ulLast += ( uint32_t ) pxFound->lDataLength;
+                               }
+
+                               if( xTCPWindowLoggingLevel >= 1 )
+                               {
+                                       FreeRTOS_debug_printf( ( "lTCPWindowRxCheck[%d,%d]: seqnr %lu exp %lu (dist %ld) SACK to %lu\n",
+                                               pxWindow->usPeerPortNumber, pxWindow->usOurPortNumber,
+                                               ulSequenceNumber - pxWindow->rx.ulFirstSequenceNumber,
+                                               ulCurrentSequenceNumber - pxWindow->rx.ulFirstSequenceNumber,
+                                               ( BaseType_t ) ( ulSequenceNumber - ulCurrentSequenceNumber ),  /* want this signed */
+                                               ulLast - pxWindow->rx.ulFirstSequenceNumber ) );
+                               }
+
+                               /* Now prepare the SACK message.
+                               Code OPTION_CODE_SINGLE_SACK already in network byte order. */
+                               pxWindow->ulOptionsData[0] = OPTION_CODE_SINGLE_SACK;
+
+                               /* First sequence number that we received. */
+                               pxWindow->ulOptionsData[1] = FreeRTOS_htonl( ulSequenceNumber );
+
+                               /* Last + 1 */
+                               pxWindow->ulOptionsData[2] = FreeRTOS_htonl( ulLast );
+
+                               /* Which make 12 (3*4) option bytes. */
+                               pxWindow->ucOptionLength = 3 * sizeof( pxWindow->ulOptionsData[ 0 ] );
+
+                               pxFound = xTCPWindowRxFind( pxWindow, ulSequenceNumber );
+
+                               if( pxFound != NULL )
+                               {
+                                       /* This out-of-sequence packet has been received for a
+                                       second time.  It is already stored but do send a SACK
+                                       again. */
+                                       lReturn = -1;
+                               }
+                               else
+                               {
+                                       pxFound = xTCPWindowRxNew( pxWindow, ulSequenceNumber, ( int32_t ) ulLength );
+
+                                       if( pxFound == NULL )
+                                       {
+                                               /* Can not send a SACK, because the segment cannot be
+                                               stored. */
+                                               pxWindow->ucOptionLength = 0u;
+
+                                               /* Needs to be stored but there is no segment
+                                               available. */
+                                               lReturn = -1;
+                                       }
+                                       else
+                                       {
+                                               if( xTCPWindowLoggingLevel != 0 )
+                                               {
+                                                       FreeRTOS_debug_printf( ( "lTCPWindowRxCheck[%u,%u]: seqnr %lu (cnt %lu)\n",
+                                                               pxWindow->usPeerPortNumber, pxWindow->usOurPortNumber, ulSequenceNumber - pxWindow->rx.ulFirstSequenceNumber,
+                                                               listCURRENT_LIST_LENGTH( &pxWindow->xRxSegments ) ) );
+                                                       FreeRTOS_flush_logging( );
+                                               }
+
+                                               /* Return a positive value.  The packet may be accepted
+                                               and stored but an earlier packet is still missing. */
+                                               lReturn = ( int32_t ) ( ulSequenceNumber - ulCurrentSequenceNumber );
+                                       }
+                               }
+                       }
+               }
+
+               return lReturn;
+       }
+
+#endif /* ipconfgiUSE_TCP_WIN == 1 */
+/*-----------------------------------------------------------*/
+
+/*=============================================================================
+ *
+ *                    #########   #    #
+ *                    #   #   #   #    #
+ *                        #       #    #
+ *                        #        ####
+ *                        #         ##
+ *                        #        ####
+ *                        #       #    #
+ *                        #       #    #
+ *                      #####     #    #
+ *
+ * Tx functions
+ *
+ *=============================================================================*/
+
+#if( ipconfigUSE_TCP_WIN == 1 )
+
+       static int32_t lTCPIncrementTxPosition( int32_t lPosition, int32_t lMax, int32_t lCount )
+       {
+               /* +TCP stores data in circular buffers.  Calculate the next position to
+               store. */
+               lPosition += lCount;
+               if( lPosition >= lMax )
+               {
+                       lPosition -= lMax;
+               }
+
+               return lPosition;
+       }
+
+#endif /* ipconfigUSE_TCP_WIN == 1 */
+/*-----------------------------------------------------------*/
+
+#if( ipconfigUSE_TCP_WIN == 1 )
+
+       int32_t lTCPWindowTxAdd( TCPWindow_t *pxWindow, uint32_t ulLength, int32_t lPosition, int32_t lMax )
+       {
+       int32_t lBytesLeft = ( int32_t ) ulLength, lToWrite;
+       int32_t lDone = 0;
+       TCPSegment_t *pxSegment = pxWindow->pxHeadSegment;
+
+               /* Puts a message in the Tx-window (after buffer size has been
+               verified). */
+               if( pxSegment != NULL )
+               {
+                       if( pxSegment->lDataLength < pxSegment->lMaxLength )
+                       {
+                               if( ( pxSegment->u.bits.bOutstanding == pdFALSE_UNSIGNED ) && ( pxSegment->lDataLength != 0 ) )
+                               {
+                                       /* Adding data to a segment that was already in the TX queue.  It
+                                       will be filled-up to a maximum of MSS (maximum segment size). */
+                                       lToWrite = FreeRTOS_min_int32( lBytesLeft, pxSegment->lMaxLength - pxSegment->lDataLength );
+
+                                       pxSegment->lDataLength += lToWrite;
+
+                                       if( pxSegment->lDataLength >= pxSegment->lMaxLength )
+                                       {
+                                               /* This segment is full, don't add more bytes. */
+                                               pxWindow->pxHeadSegment = NULL;
+                                       }
+
+                                       lBytesLeft -= lToWrite;
+
+                                       /* ulNextTxSequenceNumber is the sequence number of the next byte to
+                                       be stored for transmission. */
+                                       pxWindow->ulNextTxSequenceNumber += ( uint32_t ) lToWrite;
+
+                                       /* Increased the return value. */
+                                       lDone += lToWrite;
+
+                                       /* Some detailed logging, for those who're interested. */
+                                       if( ( xTCPWindowLoggingLevel >= 2 ) && ( ipconfigTCP_MAY_LOG_PORT( pxWindow->usOurPortNumber ) != 0 ) )
+                                       {
+                                               FreeRTOS_debug_printf( ( "lTCPWindowTxAdd: Add %4lu bytes for seqNr %lu len %4lu (nxt %lu) pos %lu\n",
+                                                       ulLength,
+                                                       pxSegment->ulSequenceNumber - pxWindow->tx.ulFirstSequenceNumber,
+                                                       pxSegment->lDataLength,
+                                                       pxWindow->ulNextTxSequenceNumber - pxWindow->tx.ulFirstSequenceNumber,
+                                                       pxSegment->lStreamPos ) );
+                                               FreeRTOS_flush_logging( );
+                                       }
+
+                                       /* Calculate the next position in the circular data buffer, knowing
+                                       its maximum length 'lMax'. */
+                                       lPosition = lTCPIncrementTxPosition( lPosition, lMax, lToWrite );
+                               }
+                       }
+               }
+
+               while( lBytesLeft > 0 )
+               {
+                       /* The current transmission segment is full, create new segments as
+                       needed. */
+                       pxSegment = xTCPWindowTxNew( pxWindow, pxWindow->ulNextTxSequenceNumber, pxWindow->usMSS );
+
+                       if( pxSegment != NULL )
+                       {
+                               /* Store as many as needed, but no more than the maximum
+                               (MSS). */
+                               lToWrite = FreeRTOS_min_int32( lBytesLeft, pxSegment->lMaxLength );
+
+                               pxSegment->lDataLength = lToWrite;
+                               pxSegment->lStreamPos = lPosition;
+                               lBytesLeft -= lToWrite;
+                               lPosition = lTCPIncrementTxPosition( lPosition, lMax, lToWrite );
+                               pxWindow->ulNextTxSequenceNumber += ( uint32_t ) lToWrite;
+                               lDone += lToWrite;
+
+                               /* Link this segment in the Tx-Queue. */
+                               vListInsertFifo( &( pxWindow->xTxQueue ), &( pxSegment->xQueueItem ) );
+
+                               /* Let 'pxHeadSegment' point to this segment if there is still
+                               space. */
+                               if( pxSegment->lDataLength < pxSegment->lMaxLength )
+                               {
+                                       pxWindow->pxHeadSegment = pxSegment;
+                               }
+                               else
+                               {
+                                       pxWindow->pxHeadSegment = NULL;
+                               }
+
+                               if( ipconfigTCP_MAY_LOG_PORT( pxWindow->usOurPortNumber ) != 0 )
+                               {
+                                       if( ( xTCPWindowLoggingLevel >= 3 ) ||
+                                               ( ( xTCPWindowLoggingLevel >= 2 ) && ( pxWindow->pxHeadSegment != NULL ) ) )
+                                       {
+                                               FreeRTOS_debug_printf( ( "lTCPWindowTxAdd: New %4ld bytes for seqNr %lu len %4lu (nxt %lu) pos %lu\n",
+                                                       ulLength,
+                                                       pxSegment->ulSequenceNumber - pxWindow->tx.ulFirstSequenceNumber,
+                                                       pxSegment->lDataLength,
+                                                       pxWindow->ulNextTxSequenceNumber - pxWindow->tx.ulFirstSequenceNumber,
+                                                       pxSegment->lStreamPos ) );
+                                               FreeRTOS_flush_logging( );
+                                       }
+                               }
+                       }
+                       else
+                       {
+                               /* A sever situation: running out of segments for transmission.
+                               No more data can be sent at the moment. */
+                               if( lDone != 0 )
+                               {
+                                       FreeRTOS_debug_printf( ( "lTCPWindowTxAdd: Sorry all buffers full (cancel %ld bytes)\n", lBytesLeft ) );
+                               }
+                               break;
+                       }
+               }
+
+               return lDone;
+       }
+
+#endif /* ipconfigUSE_TCP_WIN == 1 */
+/*-----------------------------------------------------------*/
+
+#if( ipconfigUSE_TCP_WIN == 1 )
+
+       BaseType_t xTCPWindowTxDone( TCPWindow_t *pxWindow )
+       {
+               return listLIST_IS_EMPTY( ( &pxWindow->xTxSegments) );
+       }
+
+#endif /* ipconfigUSE_TCP_WIN == 1 */
+/*-----------------------------------------------------------*/
+
+#if( ipconfigUSE_TCP_WIN == 1 )
+
+       static BaseType_t prvTCPWindowTxHasSpace( TCPWindow_t *pxWindow, uint32_t ulWindowSize )
+       {
+       uint32_t ulTxOutstanding;
+       BaseType_t xHasSpace;
+       TCPSegment_t *pxSegment;
+
+               /* This function will look if there is new transmission data.  It will
+               return true if there is data to be sent. */
+
+               pxSegment = xTCPWindowPeekHead( &( pxWindow->xTxQueue ) );
+
+               if( pxSegment == NULL )
+               {
+                       xHasSpace = pdFALSE;
+               }
+               else
+               {
+                       /* How much data is outstanding, i.e. how much data has been sent
+                       but not yet acknowledged ? */
+                       if( pxWindow->tx.ulHighestSequenceNumber >= pxWindow->tx.ulCurrentSequenceNumber )
+                       {
+                               ulTxOutstanding = pxWindow->tx.ulHighestSequenceNumber - pxWindow->tx.ulCurrentSequenceNumber;
+                       }
+                       else
+                       {
+                               ulTxOutstanding = 0UL;
+                       }
+
+                       /* Subtract this from the peer's space. */
+                       ulWindowSize -= FreeRTOS_min_uint32( ulWindowSize, ulTxOutstanding );
+
+                       /* See if the next segment may be sent. */
+                       if( ulWindowSize >= ( uint32_t ) pxSegment->lDataLength )
+                       {
+                               xHasSpace = pdTRUE;
+                       }
+                       else
+                       {
+                               xHasSpace = pdFALSE;
+                       }
+
+                       /* If 'xHasSpace', it looks like the peer has at least space for 1
+                       more new segment of size MSS.  xSize.ulTxWindowLength is the self-imposed
+                       limitation of the transmission window (in case of many resends it
+                       may be decreased). */
+                       if( ( ulTxOutstanding != 0UL ) && ( pxWindow->xSize.ulTxWindowLength < ulTxOutstanding + ( ( uint32_t ) pxSegment->lDataLength ) ) )
+                       {
+                               xHasSpace = pdFALSE;
+                       }
+               }
+
+               return xHasSpace;
+       }
+
+#endif /* ipconfigUSE_TCP_WIN == 1 */
+/*-----------------------------------------------------------*/
+
+#if( ipconfigUSE_TCP_WIN == 1 )
+
+       BaseType_t xTCPWindowTxHasData( TCPWindow_t *pxWindow, uint32_t ulWindowSize, TickType_t *pulDelay )
+       {
+       TCPSegment_t *pxSegment;
+       BaseType_t xReturn;
+       TickType_t ulAge, ulMaxAge;
+
+               *pulDelay = 0u;
+
+               if( listLIST_IS_EMPTY( &pxWindow->xPriorityQueue ) == pdFALSE )
+               {
+                       /* No need to look at retransmissions or new transmission as long as
+                       there are priority segments.  *pulDelay equals zero, meaning it must
+                       be sent out immediately. */
+                       xReturn = pdTRUE;
+               }
+               else
+               {
+                       pxSegment = xTCPWindowPeekHead( &( pxWindow->xWaitQueue ) );
+
+                       if( pxSegment != NULL )
+                       {
+                               /* There is an outstanding segment, see if it is time to resend
+                               it. */
+                               ulAge = ulTimerGetAge( &pxSegment->xTransmitTimer );
+
+                               /* After a packet has been sent for the first time, it will wait
+                               '1 * lSRTT' ms for an ACK. A second time it will wait '2 * lSRTT' ms,
+                               each time doubling the time-out */
+                               ulMaxAge = ( 1u << pxSegment->u.bits.ucTransmitCount ) * ( ( uint32_t ) pxWindow->lSRTT );
+
+                               if( ulMaxAge > ulAge )
+                               {
+                                       /* A segment must be sent after this amount of msecs */
+                                       *pulDelay = ulMaxAge - ulAge;
+                               }
+
+                               xReturn = pdTRUE;
+                       }
+                       else
+                       {
+                               /* No priority segment, no outstanding data, see if there is new
+                               transmission data. */
+                               pxSegment = xTCPWindowPeekHead( &pxWindow->xTxQueue );
+
+                               /* See if it fits in the peer's reception window. */
+                               if( pxSegment == NULL )
+                               {
+                                       xReturn = pdFALSE;
+                               }
+                               else if( prvTCPWindowTxHasSpace( pxWindow, ulWindowSize ) == pdFALSE )
+                               {
+                                       /* Too many outstanding messages. */
+                                       xReturn = pdFALSE;
+                               }
+                               else if( ( pxWindow->u.bits.bSendFullSize != pdFALSE_UNSIGNED ) && ( pxSegment->lDataLength < pxSegment->lMaxLength ) )
+                               {
+                                       /* 'bSendFullSize' is a special optimisation.  If true, the
+                                       driver will only sent completely filled packets (of MSS
+                                       bytes). */
+                                       xReturn = pdFALSE;
+                               }
+                               else
+                               {
+                                       xReturn = pdTRUE;
+                               }
+                       }
+               }
+
+               return xReturn;
+       }
+
+#endif /* ipconfigUSE_TCP_WIN == 1 */
+/*-----------------------------------------------------------*/
+
+#if( ipconfigUSE_TCP_WIN == 1 )
+
+       uint32_t ulTCPWindowTxGet( TCPWindow_t *pxWindow, uint32_t ulWindowSize, int32_t *plPosition )
+       {
+       TCPSegment_t *pxSegment;
+       uint32_t ulMaxTime;
+       uint32_t ulReturn  = ~0UL;
+
+
+               /* Fetches data to be sent-out now.
+
+               Priority messages: segments with a resend need no check current sliding
+               window size. */
+               pxSegment = xTCPWindowGetHead( &( pxWindow->xPriorityQueue ) );
+               pxWindow->ulOurSequenceNumber = pxWindow->tx.ulHighestSequenceNumber;
+
+               if( pxSegment == NULL )
+               {
+                       /* Waiting messages: outstanding messages with a running timer
+                       neither check peer's reception window size because these packets
+                       have been sent earlier. */
+                       pxSegment = xTCPWindowPeekHead( &( pxWindow->xWaitQueue ) );
+
+                       if( pxSegment != NULL )
+                       {
+                               /* Do check the timing. */
+                               ulMaxTime = ( 1u << pxSegment->u.bits.ucTransmitCount ) * ( ( uint32_t ) pxWindow->lSRTT );
+
+                               if( ulTimerGetAge( &pxSegment->xTransmitTimer ) > ulMaxTime )
+                               {
+                                       /* A normal (non-fast) retransmission.  Move it from the
+                                       head of the waiting queue. */
+                                       pxSegment = xTCPWindowGetHead( &( pxWindow->xWaitQueue ) );
+                                       pxSegment->u.bits.ucDupAckCount = pdFALSE_UNSIGNED;
+
+                                       /* Some detailed logging. */
+                                       if( ( xTCPWindowLoggingLevel != 0 ) && ( ipconfigTCP_MAY_LOG_PORT( pxWindow->usOurPortNumber ) != 0 ) )
+                                       {
+                                               FreeRTOS_debug_printf( ( "ulTCPWindowTxGet[%u,%u]: WaitQueue %ld bytes for sequence number %lu (%lX)\n",
+                                                       pxWindow->usPeerPortNumber,
+                                                       pxWindow->usOurPortNumber,
+                                                       pxSegment->lDataLength,
+                                                       pxSegment->ulSequenceNumber - pxWindow->tx.ulFirstSequenceNumber,
+                                                       pxSegment->ulSequenceNumber ) );
+                                               FreeRTOS_flush_logging( );
+                                       }
+                               }
+                               else
+                               {
+                                       pxSegment = NULL;
+                               }
+                       }
+
+                       if( pxSegment == NULL )
+                       {
+                               /* New messages: sent-out for the first time.  Check current
+                               sliding window size of peer. */
+                               pxSegment = xTCPWindowPeekHead( &( pxWindow->xTxQueue ) );
+
+                               if( pxSegment == NULL )
+                               {
+                                       /* No segments queued. */
+                                       ulReturn = 0UL;
+                               }
+                               else if( ( pxWindow->u.bits.bSendFullSize != pdFALSE_UNSIGNED ) && ( pxSegment->lDataLength < pxSegment->lMaxLength ) )
+                               {
+                                       /* A segment has been queued but the driver waits until it
+                                       has a full size of MSS. */
+                                       ulReturn = 0;
+                               }
+                               else if( prvTCPWindowTxHasSpace( pxWindow, ulWindowSize ) == pdFALSE )
+                               {
+                                       /* Peer has no more space at this moment. */
+                                       ulReturn = 0;
+                               }
+                               else
+                               {
+                                       /* Move it out of the Tx queue. */
+                                       pxSegment = xTCPWindowGetHead( &( pxWindow->xTxQueue ) );
+
+                                       /* Don't let pxHeadSegment point to this segment any more,
+                                       so no more data will be added. */
+                                       if( pxWindow->pxHeadSegment == pxSegment )
+                                       {
+                                               pxWindow->pxHeadSegment = NULL;
+                                       }
+
+                                       /* pxWindow->tx.highest registers the highest sequence
+                                       number in our transmission window. */
+                                       pxWindow->tx.ulHighestSequenceNumber = pxSegment->ulSequenceNumber + ( ( uint32_t ) pxSegment->lDataLength );
+
+                                       /* ...and more detailed logging */
+                                       if( ( xTCPWindowLoggingLevel >= 2 ) && ( ipconfigTCP_MAY_LOG_PORT( pxWindow->usOurPortNumber ) != pdFALSE ) )
+                                       {
+                                               FreeRTOS_debug_printf( ( "ulTCPWindowTxGet[%u,%u]: XmitQueue %ld bytes for sequence number %lu (ws %lu)\n",
+                                                       pxWindow->usPeerPortNumber,
+                                                       pxWindow->usOurPortNumber,
+                                                       pxSegment->lDataLength,
+                                                       pxSegment->ulSequenceNumber - pxWindow->tx.ulFirstSequenceNumber,
+                                                       ulWindowSize ) );
+                                               FreeRTOS_flush_logging( );
+                                       }
+                               }
+                       }
+               }
+               else
+               {
+                       /* There is a priority segment. It doesn't need any checking for
+                       space or timeouts. */
+                       if( xTCPWindowLoggingLevel != 0 )
+                       {
+                               FreeRTOS_debug_printf( ( "ulTCPWindowTxGet[%u,%u]: PrioQueue %ld bytes for sequence number %lu (ws %lu)\n",
+                                       pxWindow->usPeerPortNumber,
+                                       pxWindow->usOurPortNumber,
+                                       pxSegment->lDataLength,
+                                       pxSegment->ulSequenceNumber - pxWindow->tx.ulFirstSequenceNumber,
+                                       ulWindowSize ) );
+                               FreeRTOS_flush_logging( );
+                       }
+               }
+
+               /* See if it has already been determined to return 0. */
+               if( ulReturn != 0UL )
+               {
+                       configASSERT( listLIST_ITEM_CONTAINER( &(pxSegment->xQueueItem ) ) == NULL );
+
+                       /* Now that the segment will be transmitted, add it to the tail of
+                       the waiting queue. */
+                       vListInsertFifo( &pxWindow->xWaitQueue, &pxSegment->xQueueItem );
+
+                       /* And mark it as outstanding. */
+                       pxSegment->u.bits.bOutstanding = pdTRUE_UNSIGNED;
+
+                       /* Administer the transmit count, needed for fast
+                       retransmissions. */
+                       ( pxSegment->u.bits.ucTransmitCount )++;
+
+                       /* If there have been several retransmissions (4), decrease the
+                       size of the transmission window to at most 2 times MSS. */
+                       if( pxSegment->u.bits.ucTransmitCount == MAX_TRANSMIT_COUNT_USING_LARGE_WINDOW )
+                       {
+                               if( pxWindow->xSize.ulTxWindowLength > ( 2U * pxWindow->usMSS ) )
+                               {
+                                       FreeRTOS_debug_printf( ( "ulTCPWindowTxGet[%u - %d]: Change Tx window: %lu -> %u\n",
+                                               pxWindow->usPeerPortNumber, pxWindow->usOurPortNumber,
+                                               pxWindow->xSize.ulTxWindowLength, 2 * pxWindow->usMSS ) );
+                                       pxWindow->xSize.ulTxWindowLength = ( 2UL * pxWindow->usMSS );
+                               }
+                       }
+
+                       /* Clear the transmit timer. */
+                       vTCPTimerSet( &( pxSegment->xTransmitTimer ) );
+
+                       pxWindow->ulOurSequenceNumber = pxSegment->ulSequenceNumber;
+
+                       /* Inform the caller where to find the data within the queue. */
+                       *plPosition = pxSegment->lStreamPos;
+
+                       /* And return the length of the data segment */
+                       ulReturn = ( uint32_t ) pxSegment->lDataLength;
+               }
+
+               return ulReturn;
+       }
+
+#endif /* ipconfigUSE_TCP_WIN == 1 */
+/*-----------------------------------------------------------*/
+
+#if( ipconfigUSE_TCP_WIN == 1 )
+
+       static uint32_t prvTCPWindowTxCheckAck( TCPWindow_t *pxWindow, uint32_t ulFirst, uint32_t ulLast )
+       {
+       uint32_t ulBytesConfirmed = 0u;
+       uint32_t ulSequenceNumber = ulFirst, ulDataLength;
+       const ListItem_t *pxIterator;
+       const MiniListItem_t *pxEnd = ( const MiniListItem_t* )listGET_END_MARKER( &pxWindow->xTxSegments );
+       BaseType_t xDoUnlink;
+       TCPSegment_t *pxSegment;
+               /* An acknowledgement or a selective ACK (SACK) was received.  See if some outstanding data
+               may be removed from the transmission queue(s).
+               All TX segments for which
+               ( ( ulSequenceNumber >= ulFirst ) && ( ulSequenceNumber < ulLast ) in a
+               contiguous block.  Note that the segments are stored in xTxSegments in a
+               strict sequential order. */
+
+               /* SRTT[i] = (1-a) * SRTT[i-1] + a * RTT
+
+               0 < a < 1; usually a = 1/8
+
+               RTO = 2 * SRTT
+
+               where:
+                 RTT is Round Trip Time
+                 SRTT is Smoothed RTT
+                 RTO is Retransmit timeout
+
+                A Smoothed RTT will increase quickly, but it is conservative when
+                becoming smaller. */
+
+               for(
+                               pxIterator  = ( const ListItem_t * ) listGET_NEXT( pxEnd );
+                               ( pxIterator != ( const ListItem_t * ) pxEnd ) && ( xSequenceLessThan( ulSequenceNumber, ulLast ) != 0 );
+                       )
+               {
+                       xDoUnlink = pdFALSE;
+                       pxSegment = ( TCPSegment_t * ) listGET_LIST_ITEM_OWNER( pxIterator );
+
+                       /* Move to the next item because the current item might get
+                       removed. */
+                       pxIterator = ( const ListItem_t * ) listGET_NEXT( pxIterator );
+
+                       /* Continue if this segment does not fall within the ACK'd range. */
+                       if( xSequenceGreaterThan( ulSequenceNumber, pxSegment->ulSequenceNumber ) != pdFALSE )
+                       {
+                               continue;
+                       }
+
+                       /* Is it ready? */
+                       if( ulSequenceNumber != pxSegment->ulSequenceNumber )
+                       {
+                               break;
+                       }
+
+                       ulDataLength = ( uint32_t ) pxSegment->lDataLength;
+
+                       if( pxSegment->u.bits.bAcked == pdFALSE_UNSIGNED )
+                       {
+                               if( xSequenceGreaterThan( pxSegment->ulSequenceNumber + ( uint32_t )ulDataLength, ulLast ) != pdFALSE )
+                               {
+                                       /* What happens?  Only part of this segment was accepted,
+                                       probably due to WND limits
+
+                                         AAAAAAA BBBBBBB << acked
+                                         aaaaaaa aaaa    << sent */
+                                       #if( ipconfigHAS_DEBUG_PRINTF != 0 )
+                                       {
+                                               uint32_t ulFirstSeq = pxSegment->ulSequenceNumber - pxWindow->tx.ulFirstSequenceNumber;
+                                               FreeRTOS_debug_printf( ( "prvTCPWindowTxCheckAck[%u.%u]: %lu - %lu Partial sequence number %lu - %lu\n",
+                                                       pxWindow->usPeerPortNumber,
+                                                       pxWindow->usOurPortNumber,
+                                                       ulFirstSeq - pxWindow->tx.ulFirstSequenceNumber,
+                                                       ulLast - pxWindow->tx.ulFirstSequenceNumber,
+                                                       ulFirstSeq, ulFirstSeq + ulDataLength ) );
+                                       }
+                                       #endif /* ipconfigHAS_DEBUG_PRINTF */
+                                       break;
+                               }
+
+                               /* This segment is fully ACK'd, set the flag. */
+                               pxSegment->u.bits.bAcked = pdTRUE_UNSIGNED;
+
+                               /* Calculate the RTT only if the segment was sent-out for the
+                               first time and if this is the last ACK'd segment in a range. */
+                               if( ( pxSegment->u.bits.ucTransmitCount == 1 ) && ( ( pxSegment->ulSequenceNumber + ulDataLength ) == ulLast ) )
+                               {
+                                       int32_t mS = ( int32_t ) ulTimerGetAge( &( pxSegment->xTransmitTimer ) );
+
+                                       if( pxWindow->lSRTT >= mS )
+                                       {
+                                               /* RTT becomes smaller: adapt slowly. */
+                                               pxWindow->lSRTT = ( ( winSRTT_DECREMENT_NEW * mS ) + ( winSRTT_DECREMENT_CURRENT * pxWindow->lSRTT ) ) / ( winSRTT_DECREMENT_NEW + winSRTT_DECREMENT_CURRENT );
+                                       }
+                                       else
+                                       {
+                                               /* RTT becomes larger: adapt quicker */
+                                               pxWindow->lSRTT = ( ( winSRTT_INCREMENT_NEW * mS ) + ( winSRTT_INCREMENT_CURRENT * pxWindow->lSRTT ) ) / ( winSRTT_INCREMENT_NEW + winSRTT_INCREMENT_CURRENT );
+                                       }
+
+                                       /* Cap to the minimum of 50ms. */
+                                       if( pxWindow->lSRTT < winSRTT_CAP_mS )
+                                       {
+                                               pxWindow->lSRTT = winSRTT_CAP_mS;
+                                       }
+                               }
+
+                               /* Unlink it from the 3 queues, but do not destroy it (yet). */
+                               xDoUnlink = pdTRUE;
+                       }
+
+                       /* pxSegment->u.bits.bAcked is now true.  Is it located at the left
+                       side of the transmission queue?  If so, it may be freed. */
+                       if( ulSequenceNumber == pxWindow->tx.ulCurrentSequenceNumber )
+                       {
+                               if( ( xTCPWindowLoggingLevel >= 2 ) && ( ipconfigTCP_MAY_LOG_PORT( pxWindow->usOurPortNumber ) != pdFALSE ) )
+                               {
+                                       FreeRTOS_debug_printf( ( "prvTCPWindowTxCheckAck: %lu - %lu Ready sequence number %lu\n",
+                                               ulFirst - pxWindow->tx.ulFirstSequenceNumber,
+                                               ulLast - pxWindow->tx.ulFirstSequenceNumber,
+                                               pxSegment->ulSequenceNumber - pxWindow->tx.ulFirstSequenceNumber ) );
+                               }
+
+                               /* Increase the left-hand value of the transmission window. */
+                               pxWindow->tx.ulCurrentSequenceNumber += ulDataLength;
+
+                               /* This function will return the number of bytes that the tail
+                               of txStream may be advanced. */
+                               ulBytesConfirmed += ulDataLength;
+
+                               /* All segments below tx.ulCurrentSequenceNumber may be freed. */
+                               vTCPWindowFree( pxSegment );
+
+                               /* No need to unlink it any more. */
+                               xDoUnlink = pdFALSE;
+                       }
+
+                       if( ( xDoUnlink != pdFALSE ) && ( listLIST_ITEM_CONTAINER( &( pxSegment->xQueueItem ) ) != NULL ) )
+                       {
+                               /* Remove item from its queues. */
+                               uxListRemove( &pxSegment->xQueueItem );
+                       }
+
+                       ulSequenceNumber += ulDataLength;
+               }
+
+               return ulBytesConfirmed;
+       }
+#endif /* ipconfigUSE_TCP_WIN == 1 */
+/*-----------------------------------------------------------*/
+
+#if( ipconfigUSE_TCP_WIN == 1 )
+
+       static uint32_t prvTCPWindowFastRetransmit( TCPWindow_t *pxWindow, uint32_t ulFirst )
+       {
+       const ListItem_t *pxIterator;
+       const MiniListItem_t* pxEnd;
+       TCPSegment_t *pxSegment;
+       uint32_t ulCount = 0UL;
+
+               /* A higher Tx block has been acknowledged.  Now iterate through the
+                xWaitQueue to find a possible condition for a FAST retransmission. */
+
+               pxEnd = ( const MiniListItem_t* ) listGET_END_MARKER( &( pxWindow->xWaitQueue ) );
+
+               for( pxIterator  = ( const ListItem_t * ) listGET_NEXT( pxEnd );
+                        pxIterator != ( const ListItem_t * ) pxEnd; )
+               {
+                       /* Get the owner, which is a TCP segment. */
+                       pxSegment = ( TCPSegment_t * ) listGET_LIST_ITEM_OWNER( pxIterator );
+
+                       /* Hop to the next item before the current gets unlinked. */
+                       pxIterator  = ( const ListItem_t * ) listGET_NEXT( pxIterator );
+
+                       /* Fast retransmission:
+                       When 3 packets with a higher sequence number have been acknowledged
+                       by the peer, it is very unlikely a current packet will ever arrive.
+                       It will be retransmitted far before the RTO. */
+                       if( ( pxSegment->u.bits.bAcked == pdFALSE_UNSIGNED ) &&
+                               ( xSequenceLessThan( pxSegment->ulSequenceNumber, ulFirst ) != pdFALSE ) &&
+                               ( ++( pxSegment->u.bits.ucDupAckCount ) == DUPLICATE_ACKS_BEFORE_FAST_RETRANSMIT ) )
+                       {
+                               pxSegment->u.bits.ucTransmitCount = pdFALSE_UNSIGNED;
+
+                               /* Not clearing 'ucDupAckCount' yet as more SACK's might come in
+                               which might lead to a second fast rexmit. */
+                               if( ( xTCPWindowLoggingLevel >= 0 ) && ( ipconfigTCP_MAY_LOG_PORT( pxWindow->usOurPortNumber ) != pdFALSE ) )
+                               {
+                                       FreeRTOS_debug_printf( ( "prvTCPWindowFastRetransmit: Requeue sequence number %lu < %lu\n",
+                                               pxSegment->ulSequenceNumber - pxWindow->tx.ulFirstSequenceNumber,
+                                               ulFirst - pxWindow->tx.ulFirstSequenceNumber ) );
+                                       FreeRTOS_flush_logging( );
+                               }
+
+                               /* Remove it from xWaitQueue. */
+                               uxListRemove( &pxSegment->xQueueItem );
+
+                               /* Add this segment to the priority queue so it gets
+                               retransmitted immediately. */
+                               vListInsertFifo( &( pxWindow->xPriorityQueue ), &( pxSegment->xQueueItem ) );
+                               ulCount++;
+                       }
+               }
+
+               return ulCount;
+       }
+#endif /* ipconfigUSE_TCP_WIN == 1 */
+/*-----------------------------------------------------------*/
+
+#if( ipconfigUSE_TCP_WIN == 1 )
+
+       uint32_t ulTCPWindowTxAck( TCPWindow_t *pxWindow, uint32_t ulSequenceNumber )
+       {
+       uint32_t ulFirstSequence, ulReturn;
+
+               /* Receive a normal ACK. */
+
+               ulFirstSequence = pxWindow->tx.ulCurrentSequenceNumber;
+
+               if( xSequenceLessThanOrEqual( ulSequenceNumber, ulFirstSequence ) != pdFALSE )
+               {
+                       ulReturn = 0UL;
+               }
+               else
+               {
+                       ulReturn = prvTCPWindowTxCheckAck( pxWindow, ulFirstSequence, ulSequenceNumber );
+               }
+
+               return ulReturn;
+       }
+
+#endif /* ipconfigUSE_TCP_WIN == 1 */
+/*-----------------------------------------------------------*/
+
+#if( ipconfigUSE_TCP_WIN == 1 )
+
+       uint32_t ulTCPWindowTxSack( TCPWindow_t *pxWindow, uint32_t ulFirst, uint32_t ulLast )
+       {
+       uint32_t ulAckCount = 0UL;
+       uint32_t ulCurrentSequenceNumber = pxWindow->tx.ulCurrentSequenceNumber;
+
+               /* Receive a SACK option. */
+               ulAckCount = prvTCPWindowTxCheckAck( pxWindow, ulFirst, ulLast );
+               prvTCPWindowFastRetransmit( pxWindow, ulFirst );
+
+               if( ( xTCPWindowLoggingLevel >= 1 ) && ( xSequenceGreaterThan( ulFirst, ulCurrentSequenceNumber ) != pdFALSE ) )
+               {
+                       FreeRTOS_debug_printf( ( "ulTCPWindowTxSack[%u,%u]: from %lu to %lu (ack = %lu)\n",
+                               pxWindow->usPeerPortNumber,
+                               pxWindow->usOurPortNumber,
+                               ulFirst - pxWindow->tx.ulFirstSequenceNumber,
+                               ulLast - pxWindow->tx.ulFirstSequenceNumber,
+                               pxWindow->tx.ulCurrentSequenceNumber - pxWindow->tx.ulFirstSequenceNumber ) );
+                       FreeRTOS_flush_logging( );
+               }
+
+               return ulAckCount;
+       }
+
+#endif /* ipconfigUSE_TCP_WIN == 1 */
+/*-----------------------------------------------------------*/
+
+/*
+#####   #                      #####   ####  ######
+# # #   #                      # # #  #    #  #    #
+  #                              #   #     #  #    #
+  #   ###   #####  #    #        #   #        #    #
+  #     #   #    # #    #        #   #        #####
+  #     #   #    # #    # ####   #   #        #
+  #     #   #    # #    #        #   #     #  #
+  #     #   #    #  ####         #    #    #  #
+ #### ##### #    #     #        ####   ####  ####
+                      #
+                   ###
+*/
+#if( ipconfigUSE_TCP_WIN == 0 )
+
+       int32_t lTCPWindowRxCheck( TCPWindow_t *pxWindow, uint32_t ulSequenceNumber, uint32_t ulLength, uint32_t ulSpace )
+       {
+       int32_t iReturn;
+
+               /* Data was received at 'ulSequenceNumber'.  See if it was expected
+               and if there is enough space to store the new data. */
+               if( ( pxWindow->rx.ulCurrentSequenceNumber != ulSequenceNumber ) || ( ulSpace < ulLength ) )
+               {
+                       iReturn = -1;
+               }
+               else
+               {
+                       pxWindow->rx.ulCurrentSequenceNumber += ( uint32_t ) ulLength;
+                       iReturn = 0;
+               }
+
+               return iReturn;
+       }
+
+#endif /* ipconfigUSE_TCP_WIN == 0 */
+/*-----------------------------------------------------------*/
+
+#if( ipconfigUSE_TCP_WIN == 0 )
+
+       int32_t lTCPWindowTxAdd( TCPWindow_t *pxWindow, uint32_t ulLength, int32_t lPosition, int32_t lMax )
+       {
+       TCPSegment_t *pxSegment = &( pxWindow->xTxSegment );
+       int32_t lResult;
+
+               /* Data is being scheduled for transmission. */
+
+               /* lMax would indicate the size of the txStream. */
+               ( void ) lMax;
+               /* This is tiny TCP: there is only 1 segment for outgoing data.
+               As long as 'lDataLength' is unequal to zero, the segment is still occupied. */
+               if( pxSegment->lDataLength > 0 )
+               {
+                       lResult = 0L;
+               }
+               else
+               {
+                       if( ulLength > ( uint32_t ) pxSegment->lMaxLength )
+                       {
+                               if( ( xTCPWindowLoggingLevel != 0 ) && ( ipconfigTCP_MAY_LOG_PORT( pxWindow->usOurPortNumber ) != pdFALSE ) )
+                               {
+                                       FreeRTOS_debug_printf( ( "lTCPWindowTxAdd: can only store %ld / %ld bytes\n", ulLength, pxSegment->lMaxLength ) );
+                               }
+
+                               ulLength = ( uint32_t ) pxSegment->lMaxLength;
+                       }
+
+                       if( ( xTCPWindowLoggingLevel != 0 ) && ( ipconfigTCP_MAY_LOG_PORT( pxWindow->usOurPortNumber ) != pdFALSE ) )
+                       {
+                               FreeRTOS_debug_printf( ( "lTCPWindowTxAdd: SeqNr %ld (%ld) Len %ld\n",
+                                       pxWindow->ulNextTxSequenceNumber - pxWindow->tx.ulFirstSequenceNumber,
+                                       pxWindow->tx.ulCurrentSequenceNumber - pxWindow->tx.ulFirstSequenceNumber,
+                                       ulLength ) );
+                       }
+
+                       /* The sequence number of the first byte in this packet. */
+                       pxSegment->ulSequenceNumber = pxWindow->ulNextTxSequenceNumber;
+                       pxSegment->lDataLength = ( int32_t ) ulLength;
+                       pxSegment->lStreamPos = lPosition;
+                       pxSegment->u.ulFlags = 0UL;
+                       vTCPTimerSet( &( pxSegment->xTransmitTimer ) );
+
+                       /* Increase the sequence number of the next data to be stored for
+                       transmission. */
+                       pxWindow->ulNextTxSequenceNumber += ulLength;
+                       lResult = ( int32_t )ulLength;
+               }
+
+               return lResult;
+       }
+
+#endif /* ipconfigUSE_TCP_WIN == 0 */
+/*-----------------------------------------------------------*/
+
+#if( ipconfigUSE_TCP_WIN == 0 )
+
+       uint32_t ulTCPWindowTxGet( TCPWindow_t *pxWindow, uint32_t ulWindowSize, int32_t *plPosition )
+       {
+       TCPSegment_t *pxSegment = &( pxWindow->xTxSegment );
+       uint32_t ulLength = ( uint32_t ) pxSegment->lDataLength;
+       uint32_t ulMaxTime;
+
+               if( ulLength != 0UL )
+               {
+                       /* _HT_ Still under investigation */
+                       ( void ) ulWindowSize;
+
+                       if( pxSegment->u.bits.bOutstanding != pdFALSE_UNSIGNED )
+                       {
+                               /* As 'ucTransmitCount' has a minimum of 1, take 2 * RTT */
+                               ulMaxTime = ( ( uint32_t ) 1u << pxSegment->u.bits.ucTransmitCount ) * ( ( uint32_t ) pxWindow->lSRTT );
+
+                               if( ulTimerGetAge( &( pxSegment->xTransmitTimer ) ) < ulMaxTime )
+                               {
+                                       ulLength = 0ul;
+                               }
+                       }
+
+                       if( ulLength != 0ul )
+                       {
+                               pxSegment->u.bits.bOutstanding = pdTRUE_UNSIGNED;
+                               pxSegment->u.bits.ucTransmitCount++;
+                               vTCPTimerSet (&pxSegment->xTransmitTimer);
+                               pxWindow->ulOurSequenceNumber = pxSegment->ulSequenceNumber;
+                               *plPosition = pxSegment->lStreamPos;
+                       }
+               }
+
+               return ulLength;
+       }
+
+#endif /* ipconfigUSE_TCP_WIN == 0 */
+/*-----------------------------------------------------------*/
+
+#if( ipconfigUSE_TCP_WIN == 0 )
+
+       BaseType_t xTCPWindowTxDone( TCPWindow_t *pxWindow )
+       {
+       BaseType_t xReturn;
+
+               /* Has the outstanding data been sent because user wants to shutdown? */
+               if( pxWindow->xTxSegment.lDataLength == 0 )
+               {
+                       xReturn = pdTRUE;
+               }
+               else
+               {
+                       xReturn = pdFALSE;
+               }
+
+               return xReturn;
+       }
+
+#endif /* ipconfigUSE_TCP_WIN == 0 */
+/*-----------------------------------------------------------*/
+
+#if( ipconfigUSE_TCP_WIN == 0 )
+
+       static BaseType_t prvTCPWindowTxHasSpace( TCPWindow_t *pxWindow, uint32_t ulWindowSize );
+       static BaseType_t prvTCPWindowTxHasSpace( TCPWindow_t *pxWindow, uint32_t ulWindowSize )
+       {
+       BaseType_t xReturn;
+
+               if( ulWindowSize >= pxWindow->usMSSInit )
+               {
+                       xReturn = pdTRUE;
+               }
+               else
+               {
+                       xReturn = pdFALSE;
+               }
+
+               return xReturn;
+       }
+
+#endif /* ipconfigUSE_TCP_WIN == 0 */
+/*-----------------------------------------------------------*/
+
+#if( ipconfigUSE_TCP_WIN == 0 )
+
+       BaseType_t xTCPWindowTxHasData( TCPWindow_t *pxWindow, uint32_t ulWindowSize, TickType_t *pulDelay )
+       {
+       TCPSegment_t *pxSegment = &( pxWindow->xTxSegment );
+       BaseType_t xReturn;
+       TickType_t ulAge, ulMaxAge;
+
+               /* Check data to be sent. */
+               *pulDelay = ( TickType_t ) 0;
+               if( pxSegment->lDataLength == 0 )
+               {
+                       /* Got nothing to send right now. */
+                       xReturn = pdFALSE;
+               }
+               else
+               {
+                       if( pxSegment->u.bits.bOutstanding != pdFALSE_UNSIGNED )
+                       {
+                               ulAge = ulTimerGetAge ( &pxSegment->xTransmitTimer );
+                               ulMaxAge = ( ( TickType_t ) 1u << pxSegment->u.bits.ucTransmitCount ) * ( ( uint32_t ) pxWindow->lSRTT );
+
+                               if( ulMaxAge > ulAge )
+                               {
+                                       *pulDelay = ulMaxAge - ulAge;
+                               }
+
+                               xReturn = pdTRUE;
+                       }
+                       else if( prvTCPWindowTxHasSpace( pxWindow, ulWindowSize ) == pdFALSE )
+                       {
+                               /* Too many outstanding messages. */
+                               xReturn = pdFALSE;
+                       }
+                       else
+                       {
+                               xReturn = pdTRUE;
+                       }
+               }
+
+               return xReturn;
+       }
+
+#endif /* ipconfigUSE_TCP_WIN == 0 */
+/*-----------------------------------------------------------*/
+
+#if( ipconfigUSE_TCP_WIN == 0 )
+
+       uint32_t ulTCPWindowTxAck( TCPWindow_t *pxWindow, uint32_t ulSequenceNumber )
+       {
+       TCPSegment_t *pxSegment = &( pxWindow->xTxSegment );
+       uint32_t ulDataLength = ( uint32_t ) pxSegment->lDataLength;
+
+               /* Receive a normal ACK */
+
+               if( ulDataLength != 0ul )
+               {
+                       if( ulSequenceNumber < ( pxWindow->tx.ulCurrentSequenceNumber + ulDataLength ) )
+                       {
+                               if( ipconfigTCP_MAY_LOG_PORT( pxWindow->usOurPortNumber ) != pdFALSE )
+                               {
+                                       FreeRTOS_debug_printf( ( "win_tx_ack: acked %ld expc %ld len %ld\n",
+                                               ulSequenceNumber - pxWindow->tx.ulFirstSequenceNumber,
+                                               pxWindow->tx.ulCurrentSequenceNumber - pxWindow->tx.ulFirstSequenceNumber,
+                                               ulDataLength ) );
+                               }
+
+                               /* Nothing to send right now. */
+                               ulDataLength = 0ul;
+                       }
+                       else
+                       {
+                               pxWindow->tx.ulCurrentSequenceNumber += ulDataLength;
+
+                               if( ( xTCPWindowLoggingLevel != 0 ) && ( ipconfigTCP_MAY_LOG_PORT( pxWindow->usOurPortNumber ) != pdFALSE ) )
+                               {
+                                       FreeRTOS_debug_printf( ( "win_tx_ack: acked seqnr %ld len %ld\n",
+                                               ulSequenceNumber - pxWindow->tx.ulFirstSequenceNumber,
+                                               ulDataLength ) );
+                               }
+
+                               pxSegment->lDataLength = 0;
+                       }
+               }
+
+               return ulDataLength;
+       }
+
+#endif /* ipconfigUSE_TCP_WIN == 0 */
+/*-----------------------------------------------------------*/
+
+#if( ipconfigUSE_TCP_WIN == 0 )
+
+       BaseType_t xTCPWindowRxEmpty( TCPWindow_t *pxWindow )
+       {
+               /* Return true if 'ulCurrentSequenceNumber >= ulHighestSequenceNumber'
+               'ulCurrentSequenceNumber' is the highest sequence number stored,
+               'ulHighestSequenceNumber' is the highest sequence number seen. */
+               return xSequenceGreaterThanOrEqual( pxWindow->rx.ulCurrentSequenceNumber, pxWindow->rx.ulHighestSequenceNumber );
+       }
+
+#endif /* ipconfigUSE_TCP_WIN == 0 */
+/*-----------------------------------------------------------*/
+
+#if( ipconfigUSE_TCP_WIN == 0 )
+
+       /* Destroy a window (always returns NULL) */
+       void vTCPWindowDestroy( TCPWindow_t *pxWindow )
+       {
+               /* As in tiny TCP there are no shared segments descriptors, there is
+               nothing to release. */
+               ( void ) pxWindow;
+       }
+
+#endif /* ipconfigUSE_TCP_WIN == 0 */
+/*-----------------------------------------------------------*/
+
+
index e7d2a6c50a5035537df8d89b23b5f721da93fda3..14ae96e6480b14e8f9a0faf1c6294aa751b62241 100644 (file)
-/*\r
- * FreeRTOS+TCP V2.2.0\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://aws.amazon.com/freertos\r
- * http://www.FreeRTOS.org\r
- */\r
-\r
-/* Standard includes. */\r
-#include <stdint.h>\r
-#include <stdio.h>\r
-\r
-/* FreeRTOS includes. */\r
-#include "FreeRTOS.h"\r
-#include "task.h"\r
-#include "queue.h"\r
-#include "semphr.h"\r
-\r
-/* FreeRTOS+TCP includes. */\r
-#include "FreeRTOS_IP.h"\r
-#include "FreeRTOS_Sockets.h"\r
-#include "FreeRTOS_IP_Private.h"\r
-#include "FreeRTOS_UDP_IP.h"\r
-#include "FreeRTOS_ARP.h"\r
-#include "FreeRTOS_DHCP.h"\r
-#include "NetworkInterface.h"\r
-#include "NetworkBufferManagement.h"\r
-\r
-#if( ipconfigUSE_DNS == 1 )\r
-       #include "FreeRTOS_DNS.h"\r
-#endif\r
-\r
-/* The expected IP version and header length coded into the IP header itself. */\r
-#define ipIP_VERSION_AND_HEADER_LENGTH_BYTE ( ( uint8_t ) 0x45 )\r
-\r
-/* Part of the Ethernet and IP headers are always constant when sending an IPv4\r
-UDP packet.  This array defines the constant parts, allowing this part of the\r
-packet to be filled in using a simple memcpy() instead of individual writes. */\r
-UDPPacketHeader_t xDefaultPartUDPPacketHeader =\r
-{\r
-       /* .ucBytes : */\r
-       {\r
-               0x00, 0x00, 0x00, 0x00, 0x00, 0x00,     /* Ethernet source MAC address. */\r
-               0x08, 0x00,                                                     /* Ethernet frame type. */\r
-               ipIP_VERSION_AND_HEADER_LENGTH_BYTE,    /* ucVersionHeaderLength. */\r
-               0x00,                                                                   /* ucDifferentiatedServicesCode. */\r
-               0x00, 0x00,                                                     /* usLength. */\r
-               0x00, 0x00,                                                     /* usIdentification. */\r
-               0x00, 0x00,                                                     /* usFragmentOffset. */\r
-               ipconfigUDP_TIME_TO_LIVE,                               /* ucTimeToLive */\r
-               ipPROTOCOL_UDP,                                                 /* ucProtocol. */\r
-               0x00, 0x00,                                                     /* usHeaderChecksum. */\r
-               0x00, 0x00, 0x00, 0x00                                  /* Source IP address. */\r
-       }\r
-};\r
-/*-----------------------------------------------------------*/\r
-\r
-void vProcessGeneratedUDPPacket( NetworkBufferDescriptor_t * const pxNetworkBuffer )\r
-{\r
-UDPPacket_t *pxUDPPacket;\r
-IPHeader_t *pxIPHeader;\r
-eARPLookupResult_t eReturned;\r
-uint32_t ulIPAddress = pxNetworkBuffer->ulIPAddress;\r
-size_t uxPayloadSize;\r
-\r
-       /* Map the UDP packet onto the start of the frame. */\r
-       pxUDPPacket = ( UDPPacket_t * ) pxNetworkBuffer->pucEthernetBuffer;\r
-\r
-#if ipconfigSUPPORT_OUTGOING_PINGS == 1\r
-       if( pxNetworkBuffer->usPort == ipPACKET_CONTAINS_ICMP_DATA )\r
-       {\r
-               uxPayloadSize = pxNetworkBuffer->xDataLength - sizeof( ICMPPacket_t );\r
-       }\r
-       else\r
-#endif\r
-       {\r
-               uxPayloadSize = pxNetworkBuffer->xDataLength - sizeof( UDPPacket_t );\r
-       }\r
-\r
-       /* Determine the ARP cache status for the requested IP address. */\r
-       eReturned = eARPGetCacheEntry( &( ulIPAddress ), &( pxUDPPacket->xEthernetHeader.xDestinationAddress ) );\r
-\r
-       if( eReturned != eCantSendPacket )\r
-       {\r
-               if( eReturned == eARPCacheHit )\r
-               {\r
-                       #if( ipconfigDRIVER_INCLUDED_TX_IP_CHECKSUM == 0 )\r
-                               uint8_t ucSocketOptions;\r
-                       #endif\r
-                       iptraceSENDING_UDP_PACKET( pxNetworkBuffer->ulIPAddress );\r
-\r
-                       /* Create short cuts to the data within the packet. */\r
-                       pxIPHeader = &( pxUDPPacket->xIPHeader );\r
-\r
-               #if ( ipconfigSUPPORT_OUTGOING_PINGS == 1 )\r
-                       /* Is it possible that the packet is not actually a UDP packet\r
-                       after all, but an ICMP packet. */\r
-                       if( pxNetworkBuffer->usPort != ipPACKET_CONTAINS_ICMP_DATA )\r
-               #endif /* ipconfigSUPPORT_OUTGOING_PINGS */\r
-                       {\r
-                       UDPHeader_t *pxUDPHeader;\r
-\r
-                               pxUDPHeader = &( pxUDPPacket->xUDPHeader );\r
-\r
-                               pxUDPHeader->usDestinationPort = pxNetworkBuffer->usPort;\r
-                               pxUDPHeader->usSourcePort = pxNetworkBuffer->usBoundPort;\r
-                               pxUDPHeader->usLength = ( uint16_t ) ( uxPayloadSize + sizeof( UDPHeader_t ) );\r
-                               pxUDPHeader->usLength = FreeRTOS_htons( pxUDPHeader->usLength );\r
-                               pxUDPHeader->usChecksum = 0u;\r
-                       }\r
-\r
-                       /* memcpy() the constant parts of the header information into\r
-                       the     correct location within the packet.  This fills in:\r
-                               xEthernetHeader.xSourceAddress\r
-                               xEthernetHeader.usFrameType\r
-                               xIPHeader.ucVersionHeaderLength\r
-                               xIPHeader.ucDifferentiatedServicesCode\r
-                               xIPHeader.usLength\r
-                               xIPHeader.usIdentification\r
-                               xIPHeader.usFragmentOffset\r
-                               xIPHeader.ucTimeToLive\r
-                               xIPHeader.ucProtocol\r
-                       and\r
-                               xIPHeader.usHeaderChecksum\r
-                       */\r
-                       /* Save options now, as they will be overwritten by memcpy */\r
-                       #if( ipconfigDRIVER_INCLUDED_TX_IP_CHECKSUM == 0 )\r
-                               ucSocketOptions = pxNetworkBuffer->pucEthernetBuffer[ ipSOCKET_OPTIONS_OFFSET ];\r
-                       #endif\r
-                       /*\r
-                        * Offset the memcpy by the size of a MAC address to start at the packet's\r
-                        * Ethernet header 'source' MAC address; the preceding 'destination' should not be altered.\r
-                        */\r
-                       char *pxUdpSrcAddrOffset = ( char *) pxUDPPacket + sizeof( MACAddress_t );\r
-                       memcpy( pxUdpSrcAddrOffset, xDefaultPartUDPPacketHeader.ucBytes, sizeof( xDefaultPartUDPPacketHeader ) );\r
-\r
-               #if ipconfigSUPPORT_OUTGOING_PINGS == 1\r
-                       if( pxNetworkBuffer->usPort == ipPACKET_CONTAINS_ICMP_DATA )\r
-                       {\r
-                               pxIPHeader->ucProtocol = ipPROTOCOL_ICMP;\r
-                               pxIPHeader->usLength = ( uint16_t ) ( uxPayloadSize + sizeof( IPHeader_t ) + sizeof( ICMPHeader_t ) );\r
-                       }\r
-                       else\r
-               #endif /* ipconfigSUPPORT_OUTGOING_PINGS */\r
-                       {\r
-                               pxIPHeader->usLength = ( uint16_t ) ( uxPayloadSize + sizeof( IPHeader_t ) + sizeof( UDPHeader_t ) );\r
-                       }\r
-\r
-                       pxIPHeader->usLength = FreeRTOS_htons( pxIPHeader->usLength );\r
-                       /* HT:endian: changed back to network endian */\r
-                       pxIPHeader->ulDestinationIPAddress = pxNetworkBuffer->ulIPAddress;\r
-\r
-                       #if( ipconfigUSE_LLMNR == 1 )\r
-                       {\r
-                               /* LLMNR messages are typically used on a LAN and they're\r
-                                * not supposed to cross routers */\r
-                               if( pxNetworkBuffer->ulIPAddress == ipLLMNR_IP_ADDR )\r
-                               {\r
-                                       pxIPHeader->ucTimeToLive = 0x01;\r
-                               }\r
-                       }\r
-                       #endif\r
-\r
-                       #if( ipconfigDRIVER_INCLUDED_TX_IP_CHECKSUM == 0 )\r
-                       {\r
-                               pxIPHeader->usHeaderChecksum = 0u;\r
-                               pxIPHeader->usHeaderChecksum = usGenerateChecksum( 0UL, ( uint8_t * ) &( pxIPHeader->ucVersionHeaderLength ), ipSIZE_OF_IPv4_HEADER );\r
-                               pxIPHeader->usHeaderChecksum = ~FreeRTOS_htons( pxIPHeader->usHeaderChecksum );\r
-\r
-                               if( ( ucSocketOptions & ( uint8_t ) FREERTOS_SO_UDPCKSUM_OUT ) != 0u )\r
-                               {\r
-                                       usGenerateProtocolChecksum( (uint8_t*)pxUDPPacket, pxNetworkBuffer->xDataLength, pdTRUE );\r
-                               }\r
-                               else\r
-                               {\r
-                                       pxUDPPacket->xUDPHeader.usChecksum = 0u;\r
-                               }\r
-                       }\r
-                       #endif\r
-               }\r
-               else if( eReturned == eARPCacheMiss )\r
-               {\r
-                       /* Add an entry to the ARP table with a null hardware address.\r
-                       This allows the ARP timer to know that an ARP reply is\r
-                       outstanding, and perform retransmissions if necessary. */\r
-                       vARPRefreshCacheEntry( NULL, ulIPAddress );\r
-\r
-                       /* Generate an ARP for the required IP address. */\r
-                       iptracePACKET_DROPPED_TO_GENERATE_ARP( pxNetworkBuffer->ulIPAddress );\r
-                       pxNetworkBuffer->ulIPAddress = ulIPAddress;\r
-                       vARPGenerateRequestPacket( pxNetworkBuffer );\r
-               }\r
-               else\r
-               {\r
-                       /* The lookup indicated that an ARP request has already been\r
-                       sent out for the queried IP address. */\r
-                       eReturned = eCantSendPacket;\r
-               }\r
-       }\r
-\r
-       if( eReturned != eCantSendPacket )\r
-       {\r
-               /* The network driver is responsible for freeing the network buffer\r
-               after the packet has been sent. */\r
-\r
-               #if defined( ipconfigETHERNET_MINIMUM_PACKET_BYTES )\r
-               {\r
-                       if( pxNetworkBuffer->xDataLength < ( size_t ) ipconfigETHERNET_MINIMUM_PACKET_BYTES )\r
-                       {\r
-                       BaseType_t xIndex;\r
-\r
-                               for( xIndex = ( BaseType_t ) pxNetworkBuffer->xDataLength; xIndex < ( BaseType_t ) ipconfigETHERNET_MINIMUM_PACKET_BYTES; xIndex++ )\r
-                               {\r
-                                       pxNetworkBuffer->pucEthernetBuffer[ xIndex ] = 0u;\r
-                               }\r
-                               pxNetworkBuffer->xDataLength = ( size_t ) ipconfigETHERNET_MINIMUM_PACKET_BYTES;\r
-                       }\r
-               }\r
-               #endif\r
-\r
-               xNetworkInterfaceOutput( pxNetworkBuffer, pdTRUE );\r
-       }\r
-       else\r
-       {\r
-               /* The packet can't be sent (DHCP not completed?).  Just drop the\r
-               packet. */\r
-               vReleaseNetworkBufferAndDescriptor( pxNetworkBuffer );\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-BaseType_t xProcessReceivedUDPPacket( NetworkBufferDescriptor_t *pxNetworkBuffer, uint16_t usPort )\r
-{\r
-BaseType_t xReturn = pdPASS;\r
-FreeRTOS_Socket_t *pxSocket;\r
-configASSERT(pxNetworkBuffer);\r
-configASSERT(pxNetworkBuffer->pucEthernetBuffer);\r
-\r
-\r
-UDPPacket_t *pxUDPPacket = (UDPPacket_t *) pxNetworkBuffer->pucEthernetBuffer;\r
-\r
-       /* Caller must check for minimum packet size. */\r
-       pxSocket = pxUDPSocketLookup( usPort );\r
-\r
-       if( pxSocket )\r
-       {\r
-\r
-               /* When refreshing the ARP cache with received UDP packets we must be\r
-               careful;  hundreds of broadcast messages may pass and if we're not\r
-               handling them, no use to fill the ARP cache with those IP addresses. */\r
-               vARPRefreshCacheEntry( &( pxUDPPacket->xEthernetHeader.xSourceAddress ), pxUDPPacket->xIPHeader.ulSourceIPAddress );\r
-\r
-               #if( ipconfigUSE_CALLBACKS == 1 )\r
-               {\r
-                       /* Did the owner of this socket register a reception handler ? */\r
-                       if( ipconfigIS_VALID_PROG_ADDRESS( pxSocket->u.xUDP.pxHandleReceive ) )\r
-                       {\r
-                               struct freertos_sockaddr xSourceAddress, destinationAddress;\r
-                               void *pcData = ( void * ) &( pxNetworkBuffer->pucEthernetBuffer[ ipUDP_PAYLOAD_OFFSET_IPv4 ] );\r
-                               FOnUDPReceive_t xHandler = ( FOnUDPReceive_t ) pxSocket->u.xUDP.pxHandleReceive;\r
-                               xSourceAddress.sin_port = pxNetworkBuffer->usPort;\r
-                               xSourceAddress.sin_addr = pxNetworkBuffer->ulIPAddress;\r
-                               destinationAddress.sin_port = usPort;\r
-                               destinationAddress.sin_addr = pxUDPPacket->xIPHeader.ulDestinationIPAddress;\r
-\r
-                               if( xHandler( ( Socket_t ) pxSocket, ( void* ) pcData, ( size_t ) pxNetworkBuffer->xDataLength,\r
-                                       &xSourceAddress, &destinationAddress ) )\r
-                               {\r
-                                       xReturn = pdFAIL; /* FAIL means that we did not consume or release the buffer */\r
-                               }\r
-                       }\r
-               }\r
-               #endif /* ipconfigUSE_CALLBACKS */\r
-\r
-               #if( ipconfigUDP_MAX_RX_PACKETS > 0 )\r
-               {\r
-                       if( xReturn == pdPASS )\r
-                       {\r
-                               if ( listCURRENT_LIST_LENGTH( &( pxSocket->u.xUDP.xWaitingPacketsList ) ) >= pxSocket->u.xUDP.uxMaxPackets )\r
-                               {\r
-                                       FreeRTOS_debug_printf( ( "xProcessReceivedUDPPacket: buffer full %ld >= %ld port %u\n",\r
-                                               listCURRENT_LIST_LENGTH( &( pxSocket->u.xUDP.xWaitingPacketsList ) ),\r
-                                               pxSocket->u.xUDP.uxMaxPackets, pxSocket->usLocalPort ) );\r
-                                       xReturn = pdFAIL; /* we did not consume or release the buffer */\r
-                               }\r
-                       }\r
-               }\r
-               #endif\r
-\r
-               if( xReturn == pdPASS )\r
-               {\r
-                       vTaskSuspendAll();\r
-                       {\r
-                               if( xReturn == pdPASS )\r
-                               {\r
-                                       taskENTER_CRITICAL();\r
-                                       {\r
-                                               /* Add the network packet to the list of packets to be\r
-                                               processed by the socket. */\r
-                                               vListInsertEnd( &( pxSocket->u.xUDP.xWaitingPacketsList ), &( pxNetworkBuffer->xBufferListItem ) );\r
-                                       }\r
-                                       taskEXIT_CRITICAL();\r
-                               }\r
-                       }\r
-                       xTaskResumeAll();\r
-\r
-                       /* Set the socket's receive event */\r
-                       if( pxSocket->xEventGroup != NULL )\r
-                       {\r
-                               xEventGroupSetBits( pxSocket->xEventGroup, eSOCKET_RECEIVE );\r
-                       }\r
-\r
-                       #if( ipconfigSUPPORT_SELECT_FUNCTION == 1 )\r
-                       {\r
-                               if( ( pxSocket->pxSocketSet != NULL ) && ( ( pxSocket->xSelectBits & eSELECT_READ ) != 0 ) )\r
-                               {\r
-                                       xEventGroupSetBits( pxSocket->pxSocketSet->xSelectGroup, eSELECT_READ );\r
-                               }\r
-                       }\r
-                       #endif\r
-\r
-                       #if( ipconfigSOCKET_HAS_USER_SEMAPHORE == 1 )\r
-                       {\r
-                               if( pxSocket->pxUserSemaphore != NULL )\r
-                               {\r
-                                       xSemaphoreGive( pxSocket->pxUserSemaphore );\r
-                               }\r
-                       }\r
-                       #endif\r
-\r
-                       #if( ipconfigUSE_DHCP == 1 )\r
-                       {\r
-                               if( xIsDHCPSocket( pxSocket ) )\r
-                               {\r
-                                       xSendEventToIPTask( eDHCPEvent );\r
-                               }\r
-                       }\r
-                       #endif\r
-               }\r
-       }\r
-       else\r
-       {\r
-               /* There is no socket listening to the target port, but still it might\r
-               be for this node. */\r
-\r
-               #if( ipconfigUSE_DNS == 1 ) && ( ipconfigDNS_USE_CALLBACKS == 1 )\r
-                       /* A DNS reply, check for the source port.  Although the DNS client\r
-                       does open a UDP socket to send a messages, this socket will be\r
-                       closed after a short timeout.  Messages that come late (after the\r
-                       socket is closed) will be treated here. */\r
-                       if( FreeRTOS_ntohs( pxUDPPacket->xUDPHeader.usSourcePort ) == ipDNS_PORT )\r
-                       {\r
-                               vARPRefreshCacheEntry( &( pxUDPPacket->xEthernetHeader.xSourceAddress ), pxUDPPacket->xIPHeader.ulSourceIPAddress );\r
-                               xReturn = ( BaseType_t )ulDNSHandlePacket( pxNetworkBuffer );\r
-                       }\r
-                       else\r
-               #endif\r
-\r
-               #if( ipconfigUSE_LLMNR == 1 )\r
-                       /* a LLMNR request, check for the destination port. */\r
-                       if( ( usPort == FreeRTOS_ntohs( ipLLMNR_PORT ) ) ||\r
-                               ( pxUDPPacket->xUDPHeader.usSourcePort == FreeRTOS_ntohs( ipLLMNR_PORT ) ) )\r
-                       {\r
-                               vARPRefreshCacheEntry( &( pxUDPPacket->xEthernetHeader.xSourceAddress ), pxUDPPacket->xIPHeader.ulSourceIPAddress );\r
-                               xReturn = ( BaseType_t )ulDNSHandlePacket( pxNetworkBuffer );\r
-                       }\r
-                       else\r
-               #endif /* ipconfigUSE_LLMNR */\r
-\r
-               #if( ipconfigUSE_NBNS == 1 )\r
-                       /* a NetBIOS request, check for the destination port */\r
-                       if( ( usPort == FreeRTOS_ntohs( ipNBNS_PORT ) ) ||\r
-                               ( pxUDPPacket->xUDPHeader.usSourcePort == FreeRTOS_ntohs( ipNBNS_PORT ) ) )\r
-                       {\r
-                               vARPRefreshCacheEntry( &( pxUDPPacket->xEthernetHeader.xSourceAddress ), pxUDPPacket->xIPHeader.ulSourceIPAddress );\r
-                               xReturn = ( BaseType_t )ulNBNSHandlePacket( pxNetworkBuffer );\r
-                       }\r
-                       else\r
-               #endif /* ipconfigUSE_NBNS */\r
-               {\r
-                       xReturn = pdFAIL;\r
-               }\r
-       }\r
-\r
-       return xReturn;\r
-}\r
-/*-----------------------------------------------------------*/\r
+/*
+ * FreeRTOS+TCP V2.2.0
+ * 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
+ */
+
+/* Standard includes. */
+#include <stdint.h>
+#include <stdio.h>
+
+/* FreeRTOS includes. */
+#include "FreeRTOS.h"
+#include "task.h"
+#include "queue.h"
+#include "semphr.h"
+
+/* FreeRTOS+TCP includes. */
+#include "FreeRTOS_IP.h"
+#include "FreeRTOS_Sockets.h"
+#include "FreeRTOS_IP_Private.h"
+#include "FreeRTOS_UDP_IP.h"
+#include "FreeRTOS_ARP.h"
+#include "FreeRTOS_DHCP.h"
+#include "NetworkInterface.h"
+#include "NetworkBufferManagement.h"
+
+#if( ipconfigUSE_DNS == 1 )
+       #include "FreeRTOS_DNS.h"
+#endif
+
+/* The expected IP version and header length coded into the IP header itself. */
+#define ipIP_VERSION_AND_HEADER_LENGTH_BYTE ( ( uint8_t ) 0x45 )
+
+/* Part of the Ethernet and IP headers are always constant when sending an IPv4
+UDP packet.  This array defines the constant parts, allowing this part of the
+packet to be filled in using a simple memcpy() instead of individual writes. */
+UDPPacketHeader_t xDefaultPartUDPPacketHeader =
+{
+       /* .ucBytes : */
+       {
+               0x00, 0x00, 0x00, 0x00, 0x00, 0x00,     /* Ethernet source MAC address. */
+               0x08, 0x00,                                                     /* Ethernet frame type. */
+               ipIP_VERSION_AND_HEADER_LENGTH_BYTE,    /* ucVersionHeaderLength. */
+               0x00,                                                                   /* ucDifferentiatedServicesCode. */
+               0x00, 0x00,                                                     /* usLength. */
+               0x00, 0x00,                                                     /* usIdentification. */
+               0x00, 0x00,                                                     /* usFragmentOffset. */
+               ipconfigUDP_TIME_TO_LIVE,                               /* ucTimeToLive */
+               ipPROTOCOL_UDP,                                                 /* ucProtocol. */
+               0x00, 0x00,                                                     /* usHeaderChecksum. */
+               0x00, 0x00, 0x00, 0x00                                  /* Source IP address. */
+       }
+};
+/*-----------------------------------------------------------*/
+
+void vProcessGeneratedUDPPacket( NetworkBufferDescriptor_t * const pxNetworkBuffer )
+{
+UDPPacket_t *pxUDPPacket;
+IPHeader_t *pxIPHeader;
+eARPLookupResult_t eReturned;
+uint32_t ulIPAddress = pxNetworkBuffer->ulIPAddress;
+size_t uxPayloadSize;
+
+       /* Map the UDP packet onto the start of the frame. */
+       pxUDPPacket = ( UDPPacket_t * ) pxNetworkBuffer->pucEthernetBuffer;
+
+#if ipconfigSUPPORT_OUTGOING_PINGS == 1
+       if( pxNetworkBuffer->usPort == ipPACKET_CONTAINS_ICMP_DATA )
+       {
+               uxPayloadSize = pxNetworkBuffer->xDataLength - sizeof( ICMPPacket_t );
+       }
+       else
+#endif
+       {
+               uxPayloadSize = pxNetworkBuffer->xDataLength - sizeof( UDPPacket_t );
+       }
+
+       /* Determine the ARP cache status for the requested IP address. */
+       eReturned = eARPGetCacheEntry( &( ulIPAddress ), &( pxUDPPacket->xEthernetHeader.xDestinationAddress ) );
+
+       if( eReturned != eCantSendPacket )
+       {
+               if( eReturned == eARPCacheHit )
+               {
+                       #if( ipconfigDRIVER_INCLUDED_TX_IP_CHECKSUM == 0 )
+                               uint8_t ucSocketOptions;
+                       #endif
+                       iptraceSENDING_UDP_PACKET( pxNetworkBuffer->ulIPAddress );
+
+                       /* Create short cuts to the data within the packet. */
+                       pxIPHeader = &( pxUDPPacket->xIPHeader );
+
+               #if ( ipconfigSUPPORT_OUTGOING_PINGS == 1 )
+                       /* Is it possible that the packet is not actually a UDP packet
+                       after all, but an ICMP packet. */
+                       if( pxNetworkBuffer->usPort != ipPACKET_CONTAINS_ICMP_DATA )
+               #endif /* ipconfigSUPPORT_OUTGOING_PINGS */
+                       {
+                       UDPHeader_t *pxUDPHeader;
+
+                               pxUDPHeader = &( pxUDPPacket->xUDPHeader );
+
+                               pxUDPHeader->usDestinationPort = pxNetworkBuffer->usPort;
+                               pxUDPHeader->usSourcePort = pxNetworkBuffer->usBoundPort;
+                               pxUDPHeader->usLength = ( uint16_t ) ( uxPayloadSize + sizeof( UDPHeader_t ) );
+                               pxUDPHeader->usLength = FreeRTOS_htons( pxUDPHeader->usLength );
+                               pxUDPHeader->usChecksum = 0u;
+                       }
+
+                       /* memcpy() the constant parts of the header information into
+                       the     correct location within the packet.  This fills in:
+                               xEthernetHeader.xSourceAddress
+                               xEthernetHeader.usFrameType
+                               xIPHeader.ucVersionHeaderLength
+                               xIPHeader.ucDifferentiatedServicesCode
+                               xIPHeader.usLength
+                               xIPHeader.usIdentification
+                               xIPHeader.usFragmentOffset
+                               xIPHeader.ucTimeToLive
+                               xIPHeader.ucProtocol
+                       and
+                               xIPHeader.usHeaderChecksum
+                       */
+                       /* Save options now, as they will be overwritten by memcpy */
+                       #if( ipconfigDRIVER_INCLUDED_TX_IP_CHECKSUM == 0 )
+                               ucSocketOptions = pxNetworkBuffer->pucEthernetBuffer[ ipSOCKET_OPTIONS_OFFSET ];
+                       #endif
+                       /*
+                        * 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( pxNetworkBuffer->usPort == ipPACKET_CONTAINS_ICMP_DATA )
+                       {
+                               pxIPHeader->ucProtocol = ipPROTOCOL_ICMP;
+                               pxIPHeader->usLength = ( uint16_t ) ( uxPayloadSize + sizeof( IPHeader_t ) + sizeof( ICMPHeader_t ) );
+                       }
+                       else
+               #endif /* ipconfigSUPPORT_OUTGOING_PINGS */
+                       {
+                               pxIPHeader->usLength = ( uint16_t ) ( uxPayloadSize + sizeof( IPHeader_t ) + sizeof( UDPHeader_t ) );
+                       }
+
+                       pxIPHeader->usLength = FreeRTOS_htons( pxIPHeader->usLength );
+                       /* HT:endian: changed back to network endian */
+                       pxIPHeader->ulDestinationIPAddress = pxNetworkBuffer->ulIPAddress;
+
+                       #if( ipconfigUSE_LLMNR == 1 )
+                       {
+                               /* LLMNR messages are typically used on a LAN and they're
+                                * not supposed to cross routers */
+                               if( pxNetworkBuffer->ulIPAddress == ipLLMNR_IP_ADDR )
+                               {
+                                       pxIPHeader->ucTimeToLive = 0x01;
+                               }
+                       }
+                       #endif
+
+                       #if( ipconfigDRIVER_INCLUDED_TX_IP_CHECKSUM == 0 )
+                       {
+                               pxIPHeader->usHeaderChecksum = 0u;
+                               pxIPHeader->usHeaderChecksum = usGenerateChecksum( 0UL, ( uint8_t * ) &( pxIPHeader->ucVersionHeaderLength ), ipSIZE_OF_IPv4_HEADER );
+                               pxIPHeader->usHeaderChecksum = ~FreeRTOS_htons( pxIPHeader->usHeaderChecksum );
+
+                               if( ( ucSocketOptions & ( uint8_t ) FREERTOS_SO_UDPCKSUM_OUT ) != 0u )
+                               {
+                                       usGenerateProtocolChecksum( (uint8_t*)pxUDPPacket, pxNetworkBuffer->xDataLength, pdTRUE );
+                               }
+                               else
+                               {
+                                       pxUDPPacket->xUDPHeader.usChecksum = 0u;
+                               }
+                       }
+                       #endif
+               }
+               else if( eReturned == eARPCacheMiss )
+               {
+                       /* Add an entry to the ARP table with a null hardware address.
+                       This allows the ARP timer to know that an ARP reply is
+                       outstanding, and perform retransmissions if necessary. */
+                       vARPRefreshCacheEntry( NULL, ulIPAddress );
+
+                       /* Generate an ARP for the required IP address. */
+                       iptracePACKET_DROPPED_TO_GENERATE_ARP( pxNetworkBuffer->ulIPAddress );
+                       pxNetworkBuffer->ulIPAddress = ulIPAddress;
+                       vARPGenerateRequestPacket( pxNetworkBuffer );
+               }
+               else
+               {
+                       /* The lookup indicated that an ARP request has already been
+                       sent out for the queried IP address. */
+                       eReturned = eCantSendPacket;
+               }
+       }
+
+       if( eReturned != eCantSendPacket )
+       {
+               /* The network driver is responsible for freeing the network buffer
+               after the packet has been sent. */
+
+               #if defined( ipconfigETHERNET_MINIMUM_PACKET_BYTES )
+               {
+                       if( pxNetworkBuffer->xDataLength < ( size_t ) ipconfigETHERNET_MINIMUM_PACKET_BYTES )
+                       {
+                       BaseType_t xIndex;
+
+                               for( xIndex = ( BaseType_t ) pxNetworkBuffer->xDataLength; xIndex < ( BaseType_t ) ipconfigETHERNET_MINIMUM_PACKET_BYTES; xIndex++ )
+                               {
+                                       pxNetworkBuffer->pucEthernetBuffer[ xIndex ] = 0u;
+                               }
+                               pxNetworkBuffer->xDataLength = ( size_t ) ipconfigETHERNET_MINIMUM_PACKET_BYTES;
+                       }
+               }
+               #endif
+
+               xNetworkInterfaceOutput( pxNetworkBuffer, pdTRUE );
+       }
+       else
+       {
+               /* The packet can't be sent (DHCP not completed?).  Just drop the
+               packet. */
+               vReleaseNetworkBufferAndDescriptor( pxNetworkBuffer );
+       }
+}
+/*-----------------------------------------------------------*/
+
+BaseType_t xProcessReceivedUDPPacket( NetworkBufferDescriptor_t *pxNetworkBuffer, uint16_t usPort )
+{
+BaseType_t xReturn = pdPASS;
+FreeRTOS_Socket_t *pxSocket;
+configASSERT(pxNetworkBuffer);
+configASSERT(pxNetworkBuffer->pucEthernetBuffer);
+
+
+UDPPacket_t *pxUDPPacket = (UDPPacket_t *) pxNetworkBuffer->pucEthernetBuffer;
+
+       /* Caller must check for minimum packet size. */
+       pxSocket = pxUDPSocketLookup( usPort );
+
+       if( pxSocket )
+       {
+
+               /* When refreshing the ARP cache with received UDP packets we must be
+               careful;  hundreds of broadcast messages may pass and if we're not
+               handling them, no use to fill the ARP cache with those IP addresses. */
+               vARPRefreshCacheEntry( &( pxUDPPacket->xEthernetHeader.xSourceAddress ), pxUDPPacket->xIPHeader.ulSourceIPAddress );
+
+               #if( ipconfigUSE_CALLBACKS == 1 )
+               {
+                       /* Did the owner of this socket register a reception handler ? */
+                       if( ipconfigIS_VALID_PROG_ADDRESS( pxSocket->u.xUDP.pxHandleReceive ) )
+                       {
+                               struct freertos_sockaddr xSourceAddress, destinationAddress;
+                               void *pcData = ( void * ) &( pxNetworkBuffer->pucEthernetBuffer[ ipUDP_PAYLOAD_OFFSET_IPv4 ] );
+                               FOnUDPReceive_t xHandler = ( FOnUDPReceive_t ) pxSocket->u.xUDP.pxHandleReceive;
+                               xSourceAddress.sin_port = pxNetworkBuffer->usPort;
+                               xSourceAddress.sin_addr = pxNetworkBuffer->ulIPAddress;
+                               destinationAddress.sin_port = usPort;
+                               destinationAddress.sin_addr = pxUDPPacket->xIPHeader.ulDestinationIPAddress;
+
+                               if( xHandler( ( Socket_t ) pxSocket, ( void* ) pcData, ( size_t ) pxNetworkBuffer->xDataLength,
+                                       &xSourceAddress, &destinationAddress ) )
+                               {
+                                       xReturn = pdFAIL; /* FAIL means that we did not consume or release the buffer */
+                               }
+                       }
+               }
+               #endif /* ipconfigUSE_CALLBACKS */
+
+               #if( ipconfigUDP_MAX_RX_PACKETS > 0 )
+               {
+                       if( xReturn == pdPASS )
+                       {
+                               if ( listCURRENT_LIST_LENGTH( &( pxSocket->u.xUDP.xWaitingPacketsList ) ) >= pxSocket->u.xUDP.uxMaxPackets )
+                               {
+                                       FreeRTOS_debug_printf( ( "xProcessReceivedUDPPacket: buffer full %ld >= %ld port %u\n",
+                                               listCURRENT_LIST_LENGTH( &( pxSocket->u.xUDP.xWaitingPacketsList ) ),
+                                               pxSocket->u.xUDP.uxMaxPackets, pxSocket->usLocalPort ) );
+                                       xReturn = pdFAIL; /* we did not consume or release the buffer */
+                               }
+                       }
+               }
+               #endif
+
+               if( xReturn == pdPASS )
+               {
+                       vTaskSuspendAll();
+                       {
+                               if( xReturn == pdPASS )
+                               {
+                                       taskENTER_CRITICAL();
+                                       {
+                                               /* Add the network packet to the list of packets to be
+                                               processed by the socket. */
+                                               vListInsertEnd( &( pxSocket->u.xUDP.xWaitingPacketsList ), &( pxNetworkBuffer->xBufferListItem ) );
+                                       }
+                                       taskEXIT_CRITICAL();
+                               }
+                       }
+                       xTaskResumeAll();
+
+                       /* Set the socket's receive event */
+                       if( pxSocket->xEventGroup != NULL )
+                       {
+                               xEventGroupSetBits( pxSocket->xEventGroup, eSOCKET_RECEIVE );
+                       }
+
+                       #if( ipconfigSUPPORT_SELECT_FUNCTION == 1 )
+                       {
+                               if( ( pxSocket->pxSocketSet != NULL ) && ( ( pxSocket->xSelectBits & eSELECT_READ ) != 0 ) )
+                               {
+                                       xEventGroupSetBits( pxSocket->pxSocketSet->xSelectGroup, eSELECT_READ );
+                               }
+                       }
+                       #endif
+
+                       #if( ipconfigSOCKET_HAS_USER_SEMAPHORE == 1 )
+                       {
+                               if( pxSocket->pxUserSemaphore != NULL )
+                               {
+                                       xSemaphoreGive( pxSocket->pxUserSemaphore );
+                               }
+                       }
+                       #endif
+
+                       #if( ipconfigUSE_DHCP == 1 )
+                       {
+                               if( xIsDHCPSocket( pxSocket ) )
+                               {
+                                       xSendEventToIPTask( eDHCPEvent );
+                               }
+                       }
+                       #endif
+               }
+       }
+       else
+       {
+               /* There is no socket listening to the target port, but still it might
+               be for this node. */
+
+               #if( ipconfigUSE_DNS == 1 ) && ( ipconfigDNS_USE_CALLBACKS == 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 )
+                       /* a LLMNR request, check for the destination port. */
+                       if( ( usPort == FreeRTOS_ntohs( ipLLMNR_PORT ) ) ||
+                               ( pxUDPPacket->xUDPHeader.usSourcePort == FreeRTOS_ntohs( ipLLMNR_PORT ) ) )
+                       {
+                               vARPRefreshCacheEntry( &( pxUDPPacket->xEthernetHeader.xSourceAddress ), pxUDPPacket->xIPHeader.ulSourceIPAddress );
+                               xReturn = ( BaseType_t )ulDNSHandlePacket( pxNetworkBuffer );
+                       }
+                       else
+               #endif /* ipconfigUSE_LLMNR */
+
+               #if( ipconfigUSE_NBNS == 1 )
+                       /* a NetBIOS request, check for the destination port */
+                       if( ( usPort == FreeRTOS_ntohs( ipNBNS_PORT ) ) ||
+                               ( pxUDPPacket->xUDPHeader.usSourcePort == FreeRTOS_ntohs( ipNBNS_PORT ) ) )
+                       {
+                               vARPRefreshCacheEntry( &( pxUDPPacket->xEthernetHeader.xSourceAddress ), pxUDPPacket->xIPHeader.ulSourceIPAddress );
+                               xReturn = ( BaseType_t )ulNBNSHandlePacket( pxNetworkBuffer );
+                       }
+                       else
+               #endif /* ipconfigUSE_NBNS */
+               {
+                       xReturn = pdFAIL;
+               }
+       }
+
+       return xReturn;
+}
+/*-----------------------------------------------------------*/
index 52565cc86b814329943427fbd6882b79f0e85d90..0bbfaa505fd7bbea87c5264e78b5b4168a21cc77 100644 (file)
-Changes between 160919 and 180821 releases:\r
-\r
-       + Multiple security improvements and fixes in packet parsing routines, DNS\r
-         caching, and TCP sequence number and ID generation.\r
-       + Disable NBNS and LLMNR by default.\r
-       + Add TCP hang protection by default.\r
-\r
-We thank Ori Karliner of Zimperium zLabs Team for reporting these issues.\r
-\r
-Changes between 160908 and 160919 releases:\r
-\r
-       + Add a NULL check before attempting to close the DHCP socket.  [Prior to\r
-         160823 the IP task closed the DHCP socket by calling a public API function\r
-         - which checked for the socket being NULL.  This was changed to call a\r
-         local private function, which did not have a NULL check, in place of the\r
-         public API function.]\r
-       + Various [internal only] naming changes to better comply with the FreeRTOS\r
-         naming conventions.\r
-       + Improvements to the Zynq network driver.  DMA transmission buffers now use\r
-         a counting semaphore. When all TX-buffers are in-use, the IP-task will\r
-         block momentarily until a TX-buffer becomes available.\r
-       + Experimental implementation of the TCP window scaling protocol.  The\r
-         scaling option will always be offered, at least with a factor 1. If the\r
-         TCP sliding window size becomes more than 64KB, the factor will increase\r
-         automatically.\r
-       + ipconfigETHERNET_MINIMUM_PACKET_BYTES is now applied for every protocol:\r
-         TCP, UDP, and ARP.\r
-       + Updated the Zynq project to use BufferAllocation_1.c rather than\r
-         BufferAllocation_2.c - which is a requirement with its current\r
-         configuration (due to the alignment requirements on the combined cache and\r
-         DMA configuration).\r
-\r
-Changes between 160823 and 160908 releases:\r
-\r
-       + Use ipconfigZERO_COPY_TX_DRIVER as the xReleaseAfterSend() parameter where\r
-         prvTCPReturnPacket() is called in prvSendData() to prevent unnecessary\r
-         copying of data.\r
-       + Remove the use of the uxGetRxEventCount variable, which was used to give\r
-         priority to incoming messages, but could result in the IP task starving\r
-         application tasks of processing time.\r
-\r
-Changes between 160112 and 160823 releases\r
-\r
-       NOTE:  The 160908 release is a maintenance release for the 160112 single\r
-       interface labs release - not a release of the current development branch.\r
-\r
-       + Various minor stability enhancements, including the ability to work with\r
-         configTICK_RATE_HZ set to less than 1KHz, closing DHCP sockets directly\r
-         rather than via FreeRTOS_closesocket(), and better handling of unknown\r
-         TCP packets before an IP address has been assigned.\r
-       + ipBUFFER_PADDING is now configurable through the ipconfigBUFFER_PADDING\r
-         constant to improve network buffer alignment handling capabilities (expert\r
-         users/driver writers only).\r
-       + Multiple improvements to the FTP server, including to how read only and\r
-         zero length files are handled.\r
-       + ipconfigFTP_HAS_USER_PROPERTIES_HOOK (to allow each user to have a\r
-         different root directory and access rights) and\r
-         ipconfigHTTP_HAS_HANDLE_REQUEST_HOOK (to handle AJAX style data)\r
-         introduced, although these are not yet fully tested and the constant names\r
-         are likely to change.\r
-       + Introduce ipconfigHAS_TX_CRC_OFFLOADING.\r
-       + ipconfigUSE_DHCP_HOOK is now called ipconfigUSE_DHCP_HOOK, and the name\r
-         of the callback function has also changed.  See the web documentation for\r
-         details.\r
-       + ipconfigTCP_RX_BUF_LEN is now ipconfigTCP_RX_BUFFER_LENGTH, and\r
-         ipconfigTCP_TX_BUF_LEN is now ipconfigTCP_TX_BUFFER_LENGTH, which is\r
-         actually how they have always been documented.\r
-       + Added example TFTP server capable of receiving (not sending) files.\r
-         Intended for bootloader type functionality.\r
-       + Various variable name changes for consistency (mainly ensuring UDP, TCP,\r
-         DNS, etc. always use the same case letters, and type prefixes are correct).\r
-       + Various minor edits to improve types used by internal variables.\r
-       + Simplified mapping of standard library functions to their Visual Studio\r
-         equivalents.\r
-       + Improve robustness of network drivers.\r
-       + Introduce pxResizeNetworkBufferWithDescriptor().\r
-       + Removed obsolete FreeRTOSIPConfig.h constants from\r
-         FreeRTOSIPConfigDefaults.h.\r
-       + Added additional asserts() - predominantly to catch incorrect structure\r
-         packing.\r
-\r
-Changes between 160112 and 160111 releases\r
-\r
-       + Updated the STM32 network driver so checksums are calculated by the\r
-         hardware.\r
-       + Implemented a simple "quit" command in the TCP command console.\r
-\r
-Changes between 150825 and 160111 releases\r
-\r
-       + New device support:  Demo applications and example drivers are provided\r
-         for Atmel SAM4E and ST STM32F4 microcontrollers.\r
-       + Various updates to improve compliance with the FreeRTOS coding standard.\r
-       + Added a command console example that uses TCP/IP for input and output (the\r
-         pre-existing command console example uses UDP/IP).\r
-       + Updated the UDP logging example so it will send log messages to the local\r
-         UDP broadcast address if a specific IP address is not provided.  This\r
-         simplifies configuration, but note not all switches and routers will pass\r
-         broadcast messages.\r
-       + Add TCP echo client and TCP echo server examples to the Zynq demo.\r
-       + Minor updates to the Zynq network driver.\r
-       + Update the Zynq project to use version 2015.4 of the Xilinx SDK.\r
-       + Introduce FreeRTOS_SignalSocket(), which can be used to interrupt a task\r
-         that is blocked while reading from a socket ( FreeRTOS_recv[from] ).\r
-       + Make use of FreeRTOS_SignalSocket() in the FTP and HTTP servers.\r
-       + Major updates to the NTP client, although this is not included in any of\r
-         the pre-configured demo applications yet.\r
-       + Added support for DHCP zero pad option.\r
-       + Added uxGetMinimumIPQueueSpace(), a function to monitor the minimum amount\r
-         of space on the message queue.\r
-       + Better handling of zero length files in the FTP server.\r
-       + Fixed a bug reported by Andrey Ivanov from swissEmbedded that affects\r
-         users of 'ipconfigZERO_COPY_TX_DRIVER'.\r
-\r
-\r
-Changes between 150825 150825 (?)\r
-\r
-       + Added xApplicationDHCPUserHook() so a user defined hook will be\r
-         called at certain points in the DHCP process if\r
-         ipconfigDHCP_USES_USER_HOOK is set to 1.\r
-       + Added FreeRTOS_get_tx_head() to improve TCP zero copy behaviour - for\r
-         expert use only.\r
-       + RST is no longer sent if only the ACK flag is set.\r
-       + Previously, an immediate ACK was only sent when buffer space was\r
-         exhausted.  Now, to improve performance, it is possible to send an\r
-         immediate ACK earlier - dependent on the ipconfigTCP_ACK_EARLIER_PACKET\r
-         setting.\r
-       + LLMNR and NBNS requests can now be sent to locate other devices -\r
-         previously these protocols would only be replied to, not generated.\r
-       + Added Auto-IP functionality (still in test) in case DHCP fails.  Dependent\r
-         on the ipconfigDHCP_FALL_BACK_LINK_LAYER_ADDRESS and\r
-         ipconfigARP_USE_CLASH_DETECTION settings.\r
-       + Added NTP code and demo.\r
-       + FTP can now STOR and RETR zero-length files.\r
-       + Added LLMNR demo to Win32 demo - so now the Win32 responds to\r
-         "ping RTOSDemo".\r
-\r
-Changes between 141019 and 150825\r
-\r
-       + Added FTP server, which uses the new FreeRTOS+FAT component.\r
-       + Added basic HTTP server, which uses the new FreeRTOS+FAT component.\r
-       + Multiple definitions that are now common with FreeRTOS+FAT have been moved\r
-         into FreeRTOS's ProjDefs.h header file, and so prefixed with 'pd'.\r
-       + Introduced ipconfigZERO_COPY_TX_DRIVER, which defines who is responsible\r
-         for freeing a buffer sent to to the MAC driver for transmission, and\r
-         facilitates the development of zero copy drivers.\r
-       + Introduced the FREERTOS_MSG_DONTWAIT flag.  The flag can be used as a\r
-         simpler and faster alternative to using FreeRTOS_setsockopt() to set the\r
-         send or receive timeout to 0.\r
-       + A few functions that were previously all lower case are now mixed case, as\r
-         lower case function names are only used when they are equivalent to a\r
-         a Berkeley sockets API function of the same name.\r
-       + Introduced uxGetMinimumFreeNetworkBuffers() to return the minimum number\r
-         of network buffers that have ever existed since the application started\r
-         executing.\r
-       + Introduce ipconfigETHERNET_MINIMUM_PACKET_BYTES to allow the application\r
-         writer to set their own minimum buffer size should the hardware not be\r
-         capable of padding under-sized Ethernet frames.\r
-       + vNetworkBufferRelease() renamed vReleaseNetworkBuffer() - just for\r
-         consistency with the names of other functions in the same file.\r
-       + Grouped DHCP status data into a structure.\r
-       + DHCP is now tried both with and without the broadcast flag.\r
-       + Replaced occurrences of configASSERT_VOID() with configASSERT().\r
-       + ipconfigDNS_USE_CALLBACKS introduced to allow FreeRTOS_gethostbyname() to\r
-         be used without blocking.\r
-       + Fix: LLMNR and NBNS behaviour when the reply is in a larger buffer than the\r
-         request, and BufferAllocation_2 was used.\r
-       + Introduced ipMAX_IP_TASK_SLEEP_TIME to allow the application writer to\r
-         override the default value of 10 seconds.\r
-       + Fix:  Correct error in *pxUDPPayloadBuffer_to_NetworkBuffer().\r
-       + FreeRTOS_recv() now recognises the FREERTOS_ZERO_COPY flag, which, when\r
-         set, the void *pvBuffer parameter is interpreted as void **pvBuffer.\r
-       + FreeRTOS_listen() now returns an error code.  Previously it always\r
-         returned 0.\r
-       + Fix:  Previously if a listening socket was reused, and a connection\r
-         failed, the TCP/IP stack closed the socket, now the socket is correctly\r
-         left unclosed as it is owned by the application.\r
-       + Various other formatting and minor fix alterations.\r
+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.
+
+Changes between 160908 and 160919 releases:
+
+       + Add a NULL check before attempting to close the DHCP socket.  [Prior to
+         160823 the IP task closed the DHCP socket by calling a public API function
+         - which checked for the socket being NULL.  This was changed to call a
+         local private function, which did not have a NULL check, in place of the
+         public API function.]
+       + Various [internal only] naming changes to better comply with the FreeRTOS
+         naming conventions.
+       + Improvements to the Zynq network driver.  DMA transmission buffers now use
+         a counting semaphore. When all TX-buffers are in-use, the IP-task will
+         block momentarily until a TX-buffer becomes available.
+       + Experimental implementation of the TCP window scaling protocol.  The
+         scaling option will always be offered, at least with a factor 1. If the
+         TCP sliding window size becomes more than 64KB, the factor will increase
+         automatically.
+       + ipconfigETHERNET_MINIMUM_PACKET_BYTES is now applied for every protocol:
+         TCP, UDP, and ARP.
+       + Updated the Zynq project to use BufferAllocation_1.c rather than
+         BufferAllocation_2.c - which is a requirement with its current
+         configuration (due to the alignment requirements on the combined cache and
+         DMA configuration).
+
+Changes between 160823 and 160908 releases:
+
+       + Use ipconfigZERO_COPY_TX_DRIVER as the xReleaseAfterSend() parameter where
+         prvTCPReturnPacket() is called in prvSendData() to prevent unnecessary
+         copying of data.
+       + Remove the use of the uxGetRxEventCount variable, which was used to give
+         priority to incoming messages, but could result in the IP task starving
+         application tasks of processing time.
+
+Changes between 160112 and 160823 releases
+
+       NOTE:  The 160908 release is a maintenance release for the 160112 single
+       interface labs release - not a release of the current development branch.
+
+       + Various minor stability enhancements, including the ability to work with
+         configTICK_RATE_HZ set to less than 1KHz, closing DHCP sockets directly
+         rather than via FreeRTOS_closesocket(), and better handling of unknown
+         TCP packets before an IP address has been assigned.
+       + ipBUFFER_PADDING is now configurable through the ipconfigBUFFER_PADDING
+         constant to improve network buffer alignment handling capabilities (expert
+         users/driver writers only).
+       + Multiple improvements to the FTP server, including to how read only and
+         zero length files are handled.
+       + ipconfigFTP_HAS_USER_PROPERTIES_HOOK (to allow each user to have a
+         different root directory and access rights) and
+         ipconfigHTTP_HAS_HANDLE_REQUEST_HOOK (to handle AJAX style data)
+         introduced, although these are not yet fully tested and the constant names
+         are likely to change.
+       + Introduce ipconfigHAS_TX_CRC_OFFLOADING.
+       + ipconfigUSE_DHCP_HOOK is now called ipconfigUSE_DHCP_HOOK, and the name
+         of the callback function has also changed.  See the web documentation for
+         details.
+       + ipconfigTCP_RX_BUF_LEN is now ipconfigTCP_RX_BUFFER_LENGTH, and
+         ipconfigTCP_TX_BUF_LEN is now ipconfigTCP_TX_BUFFER_LENGTH, which is
+         actually how they have always been documented.
+       + Added example TFTP server capable of receiving (not sending) files.
+         Intended for bootloader type functionality.
+       + Various variable name changes for consistency (mainly ensuring UDP, TCP,
+         DNS, etc. always use the same case letters, and type prefixes are correct).
+       + Various minor edits to improve types used by internal variables.
+       + Simplified mapping of standard library functions to their Visual Studio
+         equivalents.
+       + Improve robustness of network drivers.
+       + Introduce pxResizeNetworkBufferWithDescriptor().
+       + Removed obsolete FreeRTOSIPConfig.h constants from
+         FreeRTOSIPConfigDefaults.h.
+       + Added additional asserts() - predominantly to catch incorrect structure
+         packing.
+
+Changes between 160112 and 160111 releases
+
+       + Updated the STM32 network driver so checksums are calculated by the
+         hardware.
+       + Implemented a simple "quit" command in the TCP command console.
+
+Changes between 150825 and 160111 releases
+
+       + New device support:  Demo applications and example drivers are provided
+         for Atmel SAM4E and ST STM32F4 microcontrollers.
+       + Various updates to improve compliance with the FreeRTOS coding standard.
+       + Added a command console example that uses TCP/IP for input and output (the
+         pre-existing command console example uses UDP/IP).
+       + Updated the UDP logging example so it will send log messages to the local
+         UDP broadcast address if a specific IP address is not provided.  This
+         simplifies configuration, but note not all switches and routers will pass
+         broadcast messages.
+       + Add TCP echo client and TCP echo server examples to the Zynq demo.
+       + Minor updates to the Zynq network driver.
+       + Update the Zynq project to use version 2015.4 of the Xilinx SDK.
+       + Introduce FreeRTOS_SignalSocket(), which can be used to interrupt a task
+         that is blocked while reading from a socket ( FreeRTOS_recv[from] ).
+       + Make use of FreeRTOS_SignalSocket() in the FTP and HTTP servers.
+       + Major updates to the NTP client, although this is not included in any of
+         the pre-configured demo applications yet.
+       + Added support for DHCP zero pad option.
+       + Added uxGetMinimumIPQueueSpace(), a function to monitor the minimum amount
+         of space on the message queue.
+       + Better handling of zero length files in the FTP server.
+       + Fixed a bug reported by Andrey Ivanov from swissEmbedded that affects
+         users of 'ipconfigZERO_COPY_TX_DRIVER'.
+
+
+Changes between 150825 150825 (?)
+
+       + Added xApplicationDHCPUserHook() so a user defined hook will be
+         called at certain points in the DHCP process if
+         ipconfigDHCP_USES_USER_HOOK is set to 1.
+       + Added FreeRTOS_get_tx_head() to improve TCP zero copy behaviour - for
+         expert use only.
+       + RST is no longer sent if only the ACK flag is set.
+       + Previously, an immediate ACK was only sent when buffer space was
+         exhausted.  Now, to improve performance, it is possible to send an
+         immediate ACK earlier - dependent on the ipconfigTCP_ACK_EARLIER_PACKET
+         setting.
+       + LLMNR and NBNS requests can now be sent to locate other devices -
+         previously these protocols would only be replied to, not generated.
+       + Added Auto-IP functionality (still in test) in case DHCP fails.  Dependent
+         on the ipconfigDHCP_FALL_BACK_LINK_LAYER_ADDRESS and
+         ipconfigARP_USE_CLASH_DETECTION settings.
+       + Added NTP code and demo.
+       + FTP can now STOR and RETR zero-length files.
+       + Added LLMNR demo to Win32 demo - so now the Win32 responds to
+         "ping RTOSDemo".
+
+Changes between 141019 and 150825
+
+       + Added FTP server, which uses the new FreeRTOS+FAT component.
+       + Added basic HTTP server, which uses the new FreeRTOS+FAT component.
+       + Multiple definitions that are now common with FreeRTOS+FAT have been moved
+         into FreeRTOS's ProjDefs.h header file, and so prefixed with 'pd'.
+       + Introduced ipconfigZERO_COPY_TX_DRIVER, which defines who is responsible
+         for freeing a buffer sent to to the MAC driver for transmission, and
+         facilitates the development of zero copy drivers.
+       + Introduced the FREERTOS_MSG_DONTWAIT flag.  The flag can be used as a
+         simpler and faster alternative to using FreeRTOS_setsockopt() to set the
+         send or receive timeout to 0.
+       + A few functions that were previously all lower case are now mixed case, as
+         lower case function names are only used when they are equivalent to a
+         a Berkeley sockets API function of the same name.
+       + Introduced uxGetMinimumFreeNetworkBuffers() to return the minimum number
+         of network buffers that have ever existed since the application started
+         executing.
+       + Introduce ipconfigETHERNET_MINIMUM_PACKET_BYTES to allow the application
+         writer to set their own minimum buffer size should the hardware not be
+         capable of padding under-sized Ethernet frames.
+       + vNetworkBufferRelease() renamed vReleaseNetworkBuffer() - just for
+         consistency with the names of other functions in the same file.
+       + Grouped DHCP status data into a structure.
+       + DHCP is now tried both with and without the broadcast flag.
+       + Replaced occurrences of configASSERT_VOID() with configASSERT().
+       + ipconfigDNS_USE_CALLBACKS introduced to allow FreeRTOS_gethostbyname() to
+         be used without blocking.
+       + Fix: LLMNR and NBNS behaviour when the reply is in a larger buffer than the
+         request, and BufferAllocation_2 was used.
+       + Introduced ipMAX_IP_TASK_SLEEP_TIME to allow the application writer to
+         override the default value of 10 seconds.
+       + Fix:  Correct error in *pxUDPPayloadBuffer_to_NetworkBuffer().
+       + FreeRTOS_recv() now recognises the FREERTOS_ZERO_COPY flag, which, when
+         set, the void *pvBuffer parameter is interpreted as void **pvBuffer.
+       + FreeRTOS_listen() now returns an error code.  Previously it always
+         returned 0.
+       + Fix:  Previously if a listening socket was reused, and a connection
+         failed, the TCP/IP stack closed the socket, now the socket is correctly
+         left unclosed as it is owned by the application.
+       + Various other formatting and minor fix alterations.
index 8a8017f6be4ebf3b8bdf26e4994ce931b40be6cd..41740767735b7a3c657d7f29cee7f4952bdf5ebf 100644 (file)
@@ -1,5 +1,5 @@
-[{000214A0-0000-0000-C000-000000000046}]\r
-Prop3=19,2\r
-[InternetShortcut]\r
-URL=http://www.freertos.org/tcp\r
-IDList=\r
+[{000214A0-0000-0000-C000-000000000046}]
+Prop3=19,2
+[InternetShortcut]
+URL=http://www.freertos.org/tcp
+IDList=
index 20cdf739fb3cde50e33e55adea988aa781fb9f7e..d23410f5f97bbf01ce6c53a5900b1646d41565ff 100644 (file)
-/*\r
- * FreeRTOS+TCP V2.2.0\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
-#ifndef FREERTOS_DEFAULT_IP_CONFIG_H\r
-#define FREERTOS_DEFAULT_IP_CONFIG_H\r
-\r
-/* The error numbers defined in this file will be moved to the core FreeRTOS\r
-code in future versions of FreeRTOS - at which time the following header file\r
-will be removed. */\r
-#include "FreeRTOS_errno_TCP.h"\r
-\r
-/* This file provides default values for configuration options that are missing\r
-from the FreeRTOSIPConfig.h configuration header file. */\r
-\r
-\r
-/* Ensure defined configuration constants are using the most up to date naming. */\r
-#ifdef tcpconfigIP_TIME_TO_LIVE\r
-       #error now called: ipconfigTCP_TIME_TO_LIVE\r
-#endif\r
-\r
-#ifdef updconfigIP_TIME_TO_LIVE\r
-       #error now called: ipconfigUDP_TIME_TO_LIVE\r
-#endif\r
-\r
-#ifdef ipFILLER_SIZE\r
-       #error now called: ipconfigPACKET_FILLER_SIZE\r
-#endif\r
-\r
-#ifdef dnsMAX_REQUEST_ATTEMPTS\r
-       #error now called: ipconfigDNS_REQUEST_ATTEMPTS\r
-#endif\r
-\r
-#ifdef ipconfigUDP_TASK_PRIORITY\r
-       #error now called: ipconfigIP_TASK_PRIORITY\r
-#endif\r
-\r
-#ifdef ipconfigUDP_TASK_STACK_SIZE_WORDS\r
-       #error now called: ipconfigIP_TASK_STACK_SIZE_WORDS\r
-#endif\r
-\r
-#ifdef ipconfigDRIVER_INCLUDED_RX_IP_FILTERING\r
-       #error now called: ipconfigETHERNET_DRIVER_FILTERS_PACKETS\r
-#endif\r
-\r
-#ifdef ipconfigMAX_SEND_BLOCK_TIME_TICKS\r
-       #error now called: ipconfigUDP_MAX_SEND_BLOCK_TIME_TICKS\r
-#endif\r
-\r
-#ifdef ipconfigUSE_RECEIVE_CONNECT_CALLBACKS\r
-       #error now called: ipconfigUSE_CALLBACKS\r
-#endif\r
-\r
-#ifdef ipconfigNUM_NETWORK_BUFFERS\r
-       #error now called: ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS\r
-#endif\r
-\r
-#ifdef ipconfigTCP_HANG_PROT\r
-       #error now called: ipconfigTCP_HANG_PROTECTION\r
-#endif\r
-\r
-#ifdef ipconfigTCP_HANG_PROT_TIME\r
-       #error now called: ipconfigTCP_HANG_PROTECTION_TIME\r
-#endif\r
-\r
-#ifdef FreeRTOS_lprintf\r
-       #error now called: FreeRTOS_debug_printf\r
-#endif\r
-\r
-#if ( ipconfigEVENT_QUEUE_LENGTH < ( ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS + 5 ) )\r
-       #error The ipconfigEVENT_QUEUE_LENGTH parameter must be at least ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS + 5\r
-#endif\r
-\r
-#if ( ipconfigNETWORK_MTU < 46 )\r
-       #error ipconfigNETWORK_MTU must be at least 46.\r
-#endif\r
-\r
-#ifdef ipconfigBUFFER_ALLOC_FIXED_SIZE\r
-       #error ipconfigBUFFER_ALLOC_FIXED_SIZE was dropped and replaced by a const value, declared in BufferAllocation[12].c\r
-#endif\r
-\r
-#ifdef ipconfigNIC_SEND_PASSES_DMA\r
-       #error now called: ipconfigZERO_COPY_TX_DRIVER\r
-#endif\r
-\r
-#ifdef HAS_TX_CRC_OFFLOADING\r
-       /* _HT_ As these macro names have changed, throw an error\r
-       if they're still defined. */\r
-       #error now called: ipconfigHAS_TX_CRC_OFFLOADING\r
-#endif\r
-\r
-#ifdef HAS_RX_CRC_OFFLOADING\r
-       #error now called: ipconfigHAS_RX_CRC_OFFLOADING\r
-#endif\r
-\r
-#ifdef ipconfigTCP_RX_BUF_LEN\r
-       #error ipconfigTCP_RX_BUF_LEN is now called ipconfigTCP_RX_BUFFER_LENGTH\r
-#endif\r
-\r
-#ifdef ipconfigTCP_TX_BUF_LEN\r
-       #error ipconfigTCP_TX_BUF_LEN is now called ipconfigTCP_TX_BUFFER_LENGTH\r
-#endif\r
-\r
-#ifdef ipconfigDHCP_USES_USER_HOOK\r
-       #error ipconfigDHCP_USES_USER_HOOK and its associated callback have been superceeded - see http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/TCP_IP_Configuration.html#ipconfigUSE_DHCP_HOOK\r
-#endif\r
-\r
-#ifndef ipconfigUSE_TCP\r
-       #define ipconfigUSE_TCP                                         ( 1 )\r
-#endif\r
-\r
-#if    ipconfigUSE_TCP\r
-\r
-       /* Include support for TCP scaling windows */\r
-       #ifndef ipconfigUSE_TCP_WIN\r
-               #define ipconfigUSE_TCP_WIN                             ( 1 )\r
-       #endif\r
-\r
-       #ifndef ipconfigTCP_WIN_SEG_COUNT\r
-               #define ipconfigTCP_WIN_SEG_COUNT               ( 256 )\r
-       #endif\r
-\r
-       #ifndef ipconfigIGNORE_UNKNOWN_PACKETS\r
-               /* When non-zero, TCP will not send RST packets in reply to\r
-               TCP packets which are unknown, or out-of-order. */\r
-               #define ipconfigIGNORE_UNKNOWN_PACKETS  ( 0 )\r
-       #endif\r
-#endif\r
-\r
-/*\r
- * For debuging/logging: check if the port number is used for telnet\r
- * Some events will not be logged for telnet connections\r
- * because it would produce logging about the transmission of the logging...\r
- * This macro will only be used if FreeRTOS_debug_printf() is defined for logging\r
- */\r
-#ifndef ipconfigTCP_MAY_LOG_PORT\r
-       #define ipconfigTCP_MAY_LOG_PORT(xPort)                 ( ( xPort ) != 23u )\r
-#endif\r
-\r
-\r
-#ifndef        ipconfigSOCK_DEFAULT_RECEIVE_BLOCK_TIME\r
-       #define ipconfigSOCK_DEFAULT_RECEIVE_BLOCK_TIME portMAX_DELAY\r
-#endif\r
-\r
-#ifndef        ipconfigSOCK_DEFAULT_SEND_BLOCK_TIME\r
-       #define ipconfigSOCK_DEFAULT_SEND_BLOCK_TIME    portMAX_DELAY\r
-#endif\r
-\r
-\r
-#ifndef        ipconfigDNS_RECEIVE_BLOCK_TIME_TICKS\r
-       #define ipconfigDNS_RECEIVE_BLOCK_TIME_TICKS    pdMS_TO_TICKS( 500u )\r
-#endif\r
-\r
-#ifndef        ipconfigDNS_SEND_BLOCK_TIME_TICKS\r
-       #define ipconfigDNS_SEND_BLOCK_TIME_TICKS               pdMS_TO_TICKS( 500u )\r
-#endif\r
-/*\r
- * FreeRTOS debug logging routine (proposal)\r
- * The macro will be called in the printf() style. Users can define\r
- * their own logging routine as:\r
- *\r
- *     #define FreeRTOS_debug_printf( MSG )                    my_printf MSG\r
- *\r
- * The FreeRTOS_debug_printf() must be thread-safe but does not have to be\r
- * interrupt-safe.\r
- */\r
-#ifdef ipconfigHAS_DEBUG_PRINTF\r
-       #if( ipconfigHAS_DEBUG_PRINTF == 0 )\r
-               #ifdef FreeRTOS_debug_printf\r
-                       #error Do not define FreeRTOS_debug_print if ipconfigHAS_DEBUG_PRINTF is set to 0\r
-               #endif /* ifdef FreeRTOS_debug_printf */\r
-       #endif /* ( ipconfigHAS_DEBUG_PRINTF == 0 ) */\r
-#endif /* ifdef ipconfigHAS_DEBUG_PRINTF */\r
-\r
-#ifndef FreeRTOS_debug_printf\r
-    #define FreeRTOS_debug_printf( MSG )               do{} while(0)\r
-       #define ipconfigHAS_DEBUG_PRINTF                        0\r
-#endif\r
-\r
-/*\r
- * FreeRTOS general logging routine (proposal)\r
- * Used in some utility functions such as FreeRTOS_netstat() and FreeRTOS_PrintARPCache()\r
- *\r
- *     #define FreeRTOS_printf( MSG )                  my_printf MSG\r
- *\r
- * The FreeRTOS_printf() must be thread-safe but does not have to be interrupt-safe\r
- */\r
-#ifdef ipconfigHAS_PRINTF\r
-       #if( ipconfigHAS_PRINTF == 0 )\r
-               #ifdef FreeRTOS_printf\r
-                       #error Do not define FreeRTOS_print if ipconfigHAS_PRINTF is set to 0\r
-               #endif /* ifdef FreeRTOS_debug_printf */\r
-       #endif /* ( ipconfigHAS_PRINTF == 0 ) */\r
-#endif /* ifdef ipconfigHAS_PRINTF */\r
-\r
-#ifndef FreeRTOS_printf\r
-    #define FreeRTOS_printf( MSG )                             do{} while(0)\r
-       #define ipconfigHAS_PRINTF                                      0\r
-#endif\r
-\r
-/*\r
- * In cases where a lot of logging is produced, FreeRTOS_flush_logging( )\r
- * will be called to give the logging module a chance to flush the data\r
- * An example of this is the netstat command, which produces many lines of logging\r
- */\r
-#ifndef FreeRTOS_flush_logging\r
-    #define FreeRTOS_flush_logging( )                  do{} while(0)\r
-#endif\r
-\r
-/* Malloc functions. Within most applications of FreeRTOS, the couple\r
- * pvPortMalloc()/vPortFree() will be used.\r
- * If there is also SDRAM, the user may decide to use a different memory\r
- * allocator:\r
- * MallocLarge is used to allocate large TCP buffers (for Rx/Tx)\r
- * MallocSocket is used to allocate the space for the sockets\r
- */\r
-#ifndef pvPortMallocLarge\r
-       #define pvPortMallocLarge( x )                          pvPortMalloc( x )\r
-#endif\r
-\r
-#ifndef vPortFreeLarge\r
-       #define vPortFreeLarge(ptr)                                     vPortFree(ptr)\r
-#endif\r
-\r
-#ifndef pvPortMallocSocket\r
-       #define pvPortMallocSocket( x )                         pvPortMalloc( x )\r
-#endif\r
-\r
-#ifndef vPortFreeSocket\r
-       #define vPortFreeSocket(ptr)                            vPortFree(ptr)\r
-#endif\r
-\r
-/*\r
- * At several places within the library, random numbers are needed:\r
- * - DHCP:    For creating a DHCP transaction number\r
- * - TCP:     Set the Initial Sequence Number: this is the value of the first outgoing\r
- *            sequence number being used when connecting to a peer.\r
- *            Having a well randomised ISN is important to avoid spoofing\r
- * - UDP/TCP: for setting the first port number to be used, in case a socket\r
- *            uses a 'random' or anonymous port number\r
- */\r
-#ifndef ipconfigRAND32\r
-       #define ipconfigRAND32() rand()\r
-#endif\r
-/* --------------------------------------------------------\r
- * End of: HT Added some macro defaults for the PLUS-UDP project\r
- * -------------------------------------------------------- */\r
-\r
-#ifndef ipconfigUSE_NETWORK_EVENT_HOOK\r
-       #define ipconfigUSE_NETWORK_EVENT_HOOK 0\r
-#endif\r
-\r
-#ifndef ipconfigUDP_MAX_SEND_BLOCK_TIME_TICKS\r
-       #define ipconfigUDP_MAX_SEND_BLOCK_TIME_TICKS ( pdMS_TO_TICKS( 20 ) )\r
-#endif\r
-\r
-#ifndef ipconfigARP_CACHE_ENTRIES\r
-       #define ipconfigARP_CACHE_ENTRIES               10\r
-#endif\r
-\r
-#ifndef ipconfigMAX_ARP_RETRANSMISSIONS\r
-       #define ipconfigMAX_ARP_RETRANSMISSIONS ( 5u )\r
-#endif\r
-\r
-#ifndef ipconfigMAX_ARP_AGE\r
-       #define ipconfigMAX_ARP_AGE                     150u\r
-#endif\r
-\r
-#ifndef ipconfigUSE_ARP_REVERSED_LOOKUP\r
-       #define ipconfigUSE_ARP_REVERSED_LOOKUP         0\r
-#endif\r
-\r
-#ifndef ipconfigUSE_ARP_REMOVE_ENTRY\r
-       #define ipconfigUSE_ARP_REMOVE_ENTRY            0\r
-#endif\r
-\r
-#ifndef ipconfigINCLUDE_FULL_INET_ADDR\r
-       #define ipconfigINCLUDE_FULL_INET_ADDR  1\r
-#endif\r
-\r
-#ifndef ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS\r
-       #define ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS          45\r
-#endif\r
-\r
-#ifndef ipconfigEVENT_QUEUE_LENGTH\r
-       #define ipconfigEVENT_QUEUE_LENGTH              ( ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS + 5 )\r
-#endif\r
-\r
-#ifndef ipconfigALLOW_SOCKET_SEND_WITHOUT_BIND\r
-       #define ipconfigALLOW_SOCKET_SEND_WITHOUT_BIND 1\r
-#endif\r
-\r
-#ifndef ipconfigUDP_TIME_TO_LIVE\r
-       #define ipconfigUDP_TIME_TO_LIVE                128\r
-#endif\r
-\r
-#ifndef ipconfigTCP_TIME_TO_LIVE\r
-       #define ipconfigTCP_TIME_TO_LIVE                128\r
-#endif\r
-\r
-#ifndef ipconfigUDP_MAX_RX_PACKETS\r
-       /* Make postive to define the maximum number of packets which will be buffered\r
-        * for each UDP socket.\r
-        * Can be overridden with the socket option FREERTOS_SO_UDP_MAX_RX_PACKETS\r
-        */\r
-       #define ipconfigUDP_MAX_RX_PACKETS              0u\r
-#endif\r
-\r
-#ifndef ipconfigUSE_DHCP\r
-       #define ipconfigUSE_DHCP                                1\r
-#endif\r
-\r
-#ifndef ipconfigUSE_DHCP_HOOK\r
-       #define ipconfigUSE_DHCP_HOOK           0\r
-#endif\r
-\r
-#ifndef ipconfigDHCP_FALL_BACK_AUTO_IP\r
-       /*\r
-        * Only applicable when DHCP is in use:\r
-        * If no DHCP server responds, use "Auto-IP" : the\r
-        * device will allocate a random LinkLayer IP address.\r
-        */\r
-       #define ipconfigDHCP_FALL_BACK_AUTO_IP          ( 0 )\r
-#endif\r
-\r
-#if( ipconfigDHCP_FALL_BACK_AUTO_IP != 0 )\r
-       #define ipconfigARP_USE_CLASH_DETECTION         1\r
-#endif\r
-\r
-#ifndef ipconfigARP_USE_CLASH_DETECTION\r
-       #define ipconfigARP_USE_CLASH_DETECTION         0\r
-#endif\r
-\r
-#ifndef ipconfigNETWORK_MTU\r
-       #define ipconfigNETWORK_MTU             1500\r
-#endif\r
-\r
-#ifndef ipconfigTCP_MSS\r
-       #define ipconfigTCP_MSS         ( ipconfigNETWORK_MTU - ipSIZE_OF_IPv4_HEADER - ipSIZE_OF_TCP_HEADER )\r
-#endif\r
-\r
-/* Each TCP socket has circular stream buffers for Rx and Tx, which\r
- * have a fixed maximum size.\r
- * The defaults for these size are defined here, although\r
- * they can be overridden at runtime by using the setsockopt() call */\r
-#ifndef ipconfigTCP_RX_BUFFER_LENGTH\r
-       #define ipconfigTCP_RX_BUFFER_LENGTH                    ( 4u * ipconfigTCP_MSS )        /* defaults to 5840 bytes */\r
-#endif\r
-\r
-/* Define the size of Tx stream buffer for TCP sockets */\r
-#ifndef ipconfigTCP_TX_BUFFER_LENGTH\r
-#      define ipconfigTCP_TX_BUFFER_LENGTH                     ( 4u * ipconfigTCP_MSS )        /* defaults to 5840 bytes */\r
-#endif\r
-\r
-#ifndef ipconfigMAXIMUM_DISCOVER_TX_PERIOD\r
-       #ifdef _WINDOWS_\r
-               #define ipconfigMAXIMUM_DISCOVER_TX_PERIOD              ( pdMS_TO_TICKS( 999 ) )\r
-       #else\r
-               #define ipconfigMAXIMUM_DISCOVER_TX_PERIOD              ( pdMS_TO_TICKS( 30000 ) )\r
-       #endif /* _WINDOWS_ */\r
-#endif /* ipconfigMAXIMUM_DISCOVER_TX_PERIOD */\r
-\r
-#if( ipconfigUSE_DNS == 0 )\r
-       /* The DNS module will not be included. */\r
-       #if( ( ipconfigUSE_LLMNR != 0 ) || ( ipconfigUSE_NBNS != 0 ) )\r
-               /* LLMNR and NBNS depend on DNS because those protocols share a lot of code. */\r
-               #error When either LLMNR or NBNS is used, ipconfigUSE_DNS must be defined\r
-       #endif\r
-#endif\r
-\r
-#ifndef ipconfigUSE_DNS\r
-       #define ipconfigUSE_DNS                                         1\r
-#endif\r
-\r
-#ifndef ipconfigDNS_REQUEST_ATTEMPTS\r
-       #define ipconfigDNS_REQUEST_ATTEMPTS            5\r
-#endif\r
-\r
-#ifndef ipconfigUSE_DNS_CACHE\r
-       #define ipconfigUSE_DNS_CACHE                           0\r
-#endif\r
-\r
-#if( ipconfigUSE_DNS_CACHE != 0 )\r
-       #ifndef ipconfigDNS_CACHE_NAME_LENGTH\r
-               /* Per https://tools.ietf.org/html/rfc1035, 253 is the maximum string length\r
-               of a DNS name. The following default accounts for a null terminator. */\r
-               #define ipconfigDNS_CACHE_NAME_LENGTH   254\r
-       #endif\r
-\r
-       #ifndef ipconfigDNS_CACHE_ENTRIES\r
-               #define ipconfigDNS_CACHE_ENTRIES                       1\r
-       #endif\r
-#endif /* ipconfigUSE_DNS_CACHE != 0 */\r
-\r
-#ifndef ipconfigCHECK_IP_QUEUE_SPACE\r
-       #define ipconfigCHECK_IP_QUEUE_SPACE                    0\r
-#endif\r
-\r
-#ifndef ipconfigUSE_LLMNR\r
-       /* Include support for LLMNR: Link-local Multicast Name Resolution (non-Microsoft) */\r
-       #define ipconfigUSE_LLMNR                                       ( 0 )\r
-#endif\r
-\r
-#ifndef ipconfigREPLY_TO_INCOMING_PINGS\r
-       #define ipconfigREPLY_TO_INCOMING_PINGS         1\r
-#endif\r
-\r
-#ifndef ipconfigSUPPORT_OUTGOING_PINGS\r
-       #define ipconfigSUPPORT_OUTGOING_PINGS          0\r
-#endif\r
-\r
-#ifndef ipconfigFILTER_OUT_NON_ETHERNET_II_FRAMES\r
-       #define ipconfigFILTER_OUT_NON_ETHERNET_II_FRAMES 1\r
-#endif\r
-\r
-#ifndef ipconfigETHERNET_DRIVER_FILTERS_FRAME_TYPES\r
-       #define ipconfigETHERNET_DRIVER_FILTERS_FRAME_TYPES     1\r
-#endif\r
-\r
-#ifndef configINCLUDE_TRACE_RELATED_CLI_COMMANDS\r
-       #define ipconfigINCLUDE_EXAMPLE_FREERTOS_PLUS_TRACE_CALLS 0\r
-#else\r
-       #define ipconfigINCLUDE_EXAMPLE_FREERTOS_PLUS_TRACE_CALLS configINCLUDE_TRACE_RELATED_CLI_COMMANDS\r
-#endif\r
-\r
-#ifndef ipconfigDRIVER_INCLUDED_RX_IP_CHECKSUM\r
-       #define ipconfigDRIVER_INCLUDED_RX_IP_CHECKSUM  ( 0 )\r
-#endif\r
-\r
-#ifndef ipconfigETHERNET_DRIVER_FILTERS_PACKETS\r
-       #define ipconfigETHERNET_DRIVER_FILTERS_PACKETS ( 0 )\r
-#endif\r
-\r
-#ifndef ipconfigWATCHDOG_TIMER\r
-       /* This macro will be called in every loop the IP-task makes.  It may be\r
-       replaced by user-code that triggers a watchdog */\r
-       #define ipconfigWATCHDOG_TIMER()\r
-#endif\r
-\r
-#ifndef ipconfigUSE_CALLBACKS\r
-       #define ipconfigUSE_CALLBACKS                   ( 0 )\r
-#endif\r
-\r
-#if( ipconfigUSE_CALLBACKS != 0 )\r
-       #ifndef ipconfigIS_VALID_PROG_ADDRESS\r
-               /* Replace this macro with a test returning non-zero if the memory pointer to by x\r
-                * is valid memory which can contain executable code\r
-                * In fact this is an extra safety measure: if a handler points to invalid memory,\r
-                * it will not be called\r
-                */\r
-               #define ipconfigIS_VALID_PROG_ADDRESS(x)                ( ( x ) != NULL )\r
-       #endif\r
-#endif\r
-\r
-#ifndef ipconfigHAS_INLINE_FUNCTIONS\r
-       #define ipconfigHAS_INLINE_FUNCTIONS    ( 1 )\r
-#endif\r
-\r
-#ifndef portINLINE\r
-       #define portINLINE inline\r
-#endif\r
-\r
-#ifndef ipconfigZERO_COPY_TX_DRIVER\r
-       /* When non-zero, the buffers passed to the SEND routine may be passed\r
-       to DMA. As soon as sending is ready, the buffers must be released by\r
-       calling vReleaseNetworkBufferAndDescriptor(), */\r
-       #define ipconfigZERO_COPY_TX_DRIVER             ( 0 )\r
-#endif\r
-\r
-#ifndef ipconfigZERO_COPY_RX_DRIVER\r
-       /* This define doesn't mean much to the driver, except that it makes\r
-       sure that pxPacketBuffer_to_NetworkBuffer() will be included. */\r
-       #define ipconfigZERO_COPY_RX_DRIVER             ( 0 )\r
-#endif\r
-\r
-#ifndef ipconfigDRIVER_INCLUDED_TX_IP_CHECKSUM\r
-       #define ipconfigDRIVER_INCLUDED_TX_IP_CHECKSUM 0\r
-#endif\r
-\r
-#ifndef ipconfigDRIVER_INCLUDED_RX_IP_CHECKSUM\r
-       #define ipconfigDRIVER_INCLUDED_RX_IP_CHECKSUM 0\r
-#endif\r
-\r
-#ifndef ipconfigDHCP_REGISTER_HOSTNAME\r
-       #define ipconfigDHCP_REGISTER_HOSTNAME 0\r
-#endif\r
-\r
-#ifndef ipconfigSOCKET_HAS_USER_SEMAPHORE\r
-       #define ipconfigSOCKET_HAS_USER_SEMAPHORE 0\r
-#endif\r
-\r
-#ifndef ipconfigSOCKET_HAS_USER_WAKE_CALLBACK\r
-       #define ipconfigSOCKET_HAS_USER_WAKE_CALLBACK 0\r
-#endif\r
-\r
-#ifndef ipconfigSUPPORT_SELECT_FUNCTION\r
-       #define ipconfigSUPPORT_SELECT_FUNCTION 0\r
-#endif\r
-\r
-#ifndef ipconfigTCP_KEEP_ALIVE\r
-       #define ipconfigTCP_KEEP_ALIVE 0\r
-#endif\r
-\r
-#ifndef ipconfigDNS_USE_CALLBACKS\r
-       #define ipconfigDNS_USE_CALLBACKS 0\r
-#endif\r
-\r
-#ifndef ipconfigSUPPORT_SIGNALS\r
-       #define ipconfigSUPPORT_SIGNALS                         0\r
-#endif\r
-\r
-#ifndef ipconfigUSE_NBNS\r
-       #define ipconfigUSE_NBNS 0\r
-#endif\r
-\r
-/* As an attack surface reduction for ports that listen for inbound \r
-connections, hang protection can help reduce the impact of SYN floods. */\r
-#ifndef ipconfigTCP_HANG_PROTECTION\r
-       #define ipconfigTCP_HANG_PROTECTION  1\r
-#endif\r
-\r
-/* Non-activity timeout is expressed in seconds. */\r
-#ifndef ipconfigTCP_HANG_PROTECTION_TIME\r
-       #define ipconfigTCP_HANG_PROTECTION_TIME 30\r
-#endif\r
-\r
-#ifndef ipconfigTCP_IP_SANITY\r
-       #define ipconfigTCP_IP_SANITY 0\r
-#endif\r
-\r
-#ifndef ipconfigARP_STORES_REMOTE_ADDRESSES\r
-       #define ipconfigARP_STORES_REMOTE_ADDRESSES 0\r
-#endif\r
-\r
-#ifndef ipconfigBUFFER_PADDING\r
-       /* Expert option: define a value for 'ipBUFFER_PADDING'.\r
-       When 'ipconfigBUFFER_PADDING' equals 0,\r
-       'ipBUFFER_PADDING' will get a default value of 8 + 2 bytes. */\r
-       #define ipconfigBUFFER_PADDING 0\r
-#endif\r
-\r
-#ifndef ipconfigPACKET_FILLER_SIZE\r
-       #define ipconfigPACKET_FILLER_SIZE 2\r
-#endif\r
-\r
-#endif /* FREERTOS_DEFAULT_IP_CONFIG_H */\r
+/*
+ * FreeRTOS+TCP V2.2.0
+ * 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://www.FreeRTOS.org
+ * http://aws.amazon.com/freertos
+ *
+ * 1 tab == 4 spaces!
+ */
+
+#ifndef FREERTOS_DEFAULT_IP_CONFIG_H
+#define FREERTOS_DEFAULT_IP_CONFIG_H
+
+/* The error numbers defined in this file will be moved to the core FreeRTOS
+code in future versions of FreeRTOS - at which time the following header file
+will be removed. */
+#include "FreeRTOS_errno_TCP.h"
+
+/* This file provides default values for configuration options that are missing
+from the FreeRTOSIPConfig.h configuration header file. */
+
+
+/* Ensure defined configuration constants are using the most up to date naming. */
+#ifdef tcpconfigIP_TIME_TO_LIVE
+       #error now called: ipconfigTCP_TIME_TO_LIVE
+#endif
+
+#ifdef updconfigIP_TIME_TO_LIVE
+       #error now called: ipconfigUDP_TIME_TO_LIVE
+#endif
+
+#ifdef ipFILLER_SIZE
+       #error now called: ipconfigPACKET_FILLER_SIZE
+#endif
+
+#ifdef dnsMAX_REQUEST_ATTEMPTS
+       #error now called: ipconfigDNS_REQUEST_ATTEMPTS
+#endif
+
+#ifdef ipconfigUDP_TASK_PRIORITY
+       #error now called: ipconfigIP_TASK_PRIORITY
+#endif
+
+#ifdef ipconfigUDP_TASK_STACK_SIZE_WORDS
+       #error now called: ipconfigIP_TASK_STACK_SIZE_WORDS
+#endif
+
+#ifdef ipconfigDRIVER_INCLUDED_RX_IP_FILTERING
+       #error now called: ipconfigETHERNET_DRIVER_FILTERS_PACKETS
+#endif
+
+#ifdef ipconfigMAX_SEND_BLOCK_TIME_TICKS
+       #error now called: ipconfigUDP_MAX_SEND_BLOCK_TIME_TICKS
+#endif
+
+#ifdef ipconfigUSE_RECEIVE_CONNECT_CALLBACKS
+       #error now called: ipconfigUSE_CALLBACKS
+#endif
+
+#ifdef ipconfigNUM_NETWORK_BUFFERS
+       #error now called: ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS
+#endif
+
+#ifdef ipconfigTCP_HANG_PROT
+       #error now called: ipconfigTCP_HANG_PROTECTION
+#endif
+
+#ifdef ipconfigTCP_HANG_PROT_TIME
+       #error now called: ipconfigTCP_HANG_PROTECTION_TIME
+#endif
+
+#ifdef FreeRTOS_lprintf
+       #error now called: FreeRTOS_debug_printf
+#endif
+
+#if ( ipconfigEVENT_QUEUE_LENGTH < ( ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS + 5 ) )
+       #error The ipconfigEVENT_QUEUE_LENGTH parameter must be at least ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS + 5
+#endif
+
+#if ( ipconfigNETWORK_MTU < 46 )
+       #error ipconfigNETWORK_MTU must be at least 46.
+#endif
+
+#ifdef ipconfigBUFFER_ALLOC_FIXED_SIZE
+       #error ipconfigBUFFER_ALLOC_FIXED_SIZE was dropped and replaced by a const value, declared in BufferAllocation[12].c
+#endif
+
+#ifdef ipconfigNIC_SEND_PASSES_DMA
+       #error now called: ipconfigZERO_COPY_TX_DRIVER
+#endif
+
+#ifdef HAS_TX_CRC_OFFLOADING
+       /* _HT_ As these macro names have changed, throw an error
+       if they're still defined. */
+       #error now called: ipconfigHAS_TX_CRC_OFFLOADING
+#endif
+
+#ifdef HAS_RX_CRC_OFFLOADING
+       #error now called: ipconfigHAS_RX_CRC_OFFLOADING
+#endif
+
+#ifdef ipconfigTCP_RX_BUF_LEN
+       #error ipconfigTCP_RX_BUF_LEN is now called ipconfigTCP_RX_BUFFER_LENGTH
+#endif
+
+#ifdef ipconfigTCP_TX_BUF_LEN
+       #error ipconfigTCP_TX_BUF_LEN is now called ipconfigTCP_TX_BUFFER_LENGTH
+#endif
+
+#ifdef ipconfigDHCP_USES_USER_HOOK
+       #error ipconfigDHCP_USES_USER_HOOK and its associated callback have been superceeded - see http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/TCP_IP_Configuration.html#ipconfigUSE_DHCP_HOOK
+#endif
+
+#ifndef ipconfigUSE_TCP
+       #define ipconfigUSE_TCP                                         ( 1 )
+#endif
+
+#if    ipconfigUSE_TCP
+
+       /* Include support for TCP scaling windows */
+       #ifndef ipconfigUSE_TCP_WIN
+               #define ipconfigUSE_TCP_WIN                             ( 1 )
+       #endif
+
+       #ifndef ipconfigTCP_WIN_SEG_COUNT
+               #define ipconfigTCP_WIN_SEG_COUNT               ( 256 )
+       #endif
+
+       #ifndef ipconfigIGNORE_UNKNOWN_PACKETS
+               /* When non-zero, TCP will not send RST packets in reply to
+               TCP packets which are unknown, or out-of-order. */
+               #define ipconfigIGNORE_UNKNOWN_PACKETS  ( 0 )
+       #endif
+#endif
+
+/*
+ * For debuging/logging: check if the port number is used for telnet
+ * Some events will not be logged for telnet connections
+ * because it would produce logging about the transmission of the logging...
+ * This macro will only be used if FreeRTOS_debug_printf() is defined for logging
+ */
+#ifndef ipconfigTCP_MAY_LOG_PORT
+       #define ipconfigTCP_MAY_LOG_PORT(xPort)                 ( ( xPort ) != 23u )
+#endif
+
+
+#ifndef        ipconfigSOCK_DEFAULT_RECEIVE_BLOCK_TIME
+       #define ipconfigSOCK_DEFAULT_RECEIVE_BLOCK_TIME portMAX_DELAY
+#endif
+
+#ifndef        ipconfigSOCK_DEFAULT_SEND_BLOCK_TIME
+       #define ipconfigSOCK_DEFAULT_SEND_BLOCK_TIME    portMAX_DELAY
+#endif
+
+
+#ifndef        ipconfigDNS_RECEIVE_BLOCK_TIME_TICKS
+       #define ipconfigDNS_RECEIVE_BLOCK_TIME_TICKS    pdMS_TO_TICKS( 500u )
+#endif
+
+#ifndef        ipconfigDNS_SEND_BLOCK_TIME_TICKS
+       #define ipconfigDNS_SEND_BLOCK_TIME_TICKS               pdMS_TO_TICKS( 500u )
+#endif
+/*
+ * FreeRTOS debug logging routine (proposal)
+ * The macro will be called in the printf() style. Users can define
+ * their own logging routine as:
+ *
+ *     #define FreeRTOS_debug_printf( MSG )                    my_printf MSG
+ *
+ * The FreeRTOS_debug_printf() must be thread-safe but does not have to be
+ * interrupt-safe.
+ */
+#ifdef ipconfigHAS_DEBUG_PRINTF
+       #if( ipconfigHAS_DEBUG_PRINTF == 0 )
+               #ifdef FreeRTOS_debug_printf
+                       #error Do not define FreeRTOS_debug_print if ipconfigHAS_DEBUG_PRINTF is set to 0
+               #endif /* ifdef FreeRTOS_debug_printf */
+       #endif /* ( ipconfigHAS_DEBUG_PRINTF == 0 ) */
+#endif /* ifdef ipconfigHAS_DEBUG_PRINTF */
+
+#ifndef FreeRTOS_debug_printf
+    #define FreeRTOS_debug_printf( MSG )               do{} while(0)
+       #define ipconfigHAS_DEBUG_PRINTF                        0
+#endif
+
+/*
+ * FreeRTOS general logging routine (proposal)
+ * Used in some utility functions such as FreeRTOS_netstat() and FreeRTOS_PrintARPCache()
+ *
+ *     #define FreeRTOS_printf( MSG )                  my_printf MSG
+ *
+ * The FreeRTOS_printf() must be thread-safe but does not have to be interrupt-safe
+ */
+#ifdef ipconfigHAS_PRINTF
+       #if( ipconfigHAS_PRINTF == 0 )
+               #ifdef FreeRTOS_printf
+                       #error Do not define FreeRTOS_print if ipconfigHAS_PRINTF is set to 0
+               #endif /* ifdef FreeRTOS_debug_printf */
+       #endif /* ( ipconfigHAS_PRINTF == 0 ) */
+#endif /* ifdef ipconfigHAS_PRINTF */
+
+#ifndef FreeRTOS_printf
+    #define FreeRTOS_printf( MSG )                             do{} while(0)
+       #define ipconfigHAS_PRINTF                                      0
+#endif
+
+/*
+ * In cases where a lot of logging is produced, FreeRTOS_flush_logging( )
+ * will be called to give the logging module a chance to flush the data
+ * An example of this is the netstat command, which produces many lines of logging
+ */
+#ifndef FreeRTOS_flush_logging
+    #define FreeRTOS_flush_logging( )                  do{} while(0)
+#endif
+
+/* Malloc functions. Within most applications of FreeRTOS, the couple
+ * pvPortMalloc()/vPortFree() will be used.
+ * If there is also SDRAM, the user may decide to use a different memory
+ * allocator:
+ * MallocLarge is used to allocate large TCP buffers (for Rx/Tx)
+ * MallocSocket is used to allocate the space for the sockets
+ */
+#ifndef pvPortMallocLarge
+       #define pvPortMallocLarge( x )                          pvPortMalloc( x )
+#endif
+
+#ifndef vPortFreeLarge
+       #define vPortFreeLarge(ptr)                                     vPortFree(ptr)
+#endif
+
+#ifndef pvPortMallocSocket
+       #define pvPortMallocSocket( x )                         pvPortMalloc( x )
+#endif
+
+#ifndef vPortFreeSocket
+       #define vPortFreeSocket(ptr)                            vPortFree(ptr)
+#endif
+
+/*
+ * At several places within the library, random numbers are needed:
+ * - DHCP:    For creating a DHCP transaction number
+ * - TCP:     Set the Initial Sequence Number: this is the value of the first outgoing
+ *            sequence number being used when connecting to a peer.
+ *            Having a well randomised ISN is important to avoid spoofing
+ * - UDP/TCP: for setting the first port number to be used, in case a socket
+ *            uses a 'random' or anonymous port number
+ */
+#ifndef ipconfigRAND32
+       #define ipconfigRAND32() rand()
+#endif
+/* --------------------------------------------------------
+ * End of: HT Added some macro defaults for the PLUS-UDP project
+ * -------------------------------------------------------- */
+
+#ifndef ipconfigUSE_NETWORK_EVENT_HOOK
+       #define ipconfigUSE_NETWORK_EVENT_HOOK 0
+#endif
+
+#ifndef ipconfigUDP_MAX_SEND_BLOCK_TIME_TICKS
+       #define ipconfigUDP_MAX_SEND_BLOCK_TIME_TICKS ( pdMS_TO_TICKS( 20 ) )
+#endif
+
+#ifndef ipconfigARP_CACHE_ENTRIES
+       #define ipconfigARP_CACHE_ENTRIES               10
+#endif
+
+#ifndef ipconfigMAX_ARP_RETRANSMISSIONS
+       #define ipconfigMAX_ARP_RETRANSMISSIONS ( 5u )
+#endif
+
+#ifndef ipconfigMAX_ARP_AGE
+       #define ipconfigMAX_ARP_AGE                     150u
+#endif
+
+#ifndef ipconfigUSE_ARP_REVERSED_LOOKUP
+       #define ipconfigUSE_ARP_REVERSED_LOOKUP         0
+#endif
+
+#ifndef ipconfigUSE_ARP_REMOVE_ENTRY
+       #define ipconfigUSE_ARP_REMOVE_ENTRY            0
+#endif
+
+#ifndef ipconfigINCLUDE_FULL_INET_ADDR
+       #define ipconfigINCLUDE_FULL_INET_ADDR  1
+#endif
+
+#ifndef ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS
+       #define ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS          45
+#endif
+
+#ifndef ipconfigEVENT_QUEUE_LENGTH
+       #define ipconfigEVENT_QUEUE_LENGTH              ( ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS + 5 )
+#endif
+
+#ifndef ipconfigALLOW_SOCKET_SEND_WITHOUT_BIND
+       #define ipconfigALLOW_SOCKET_SEND_WITHOUT_BIND 1
+#endif
+
+#ifndef ipconfigUDP_TIME_TO_LIVE
+       #define ipconfigUDP_TIME_TO_LIVE                128
+#endif
+
+#ifndef ipconfigTCP_TIME_TO_LIVE
+       #define ipconfigTCP_TIME_TO_LIVE                128
+#endif
+
+#ifndef ipconfigUDP_MAX_RX_PACKETS
+       /* Make postive to define the maximum number of packets which will be buffered
+        * for each UDP socket.
+        * Can be overridden with the socket option FREERTOS_SO_UDP_MAX_RX_PACKETS
+        */
+       #define ipconfigUDP_MAX_RX_PACKETS              0u
+#endif
+
+#ifndef ipconfigUSE_DHCP
+       #define ipconfigUSE_DHCP                                1
+#endif
+
+#ifndef ipconfigUSE_DHCP_HOOK
+       #define ipconfigUSE_DHCP_HOOK           0
+#endif
+
+#ifndef ipconfigDHCP_FALL_BACK_AUTO_IP
+       /*
+        * Only applicable when DHCP is in use:
+        * If no DHCP server responds, use "Auto-IP" : the
+        * device will allocate a random LinkLayer IP address.
+        */
+       #define ipconfigDHCP_FALL_BACK_AUTO_IP          ( 0 )
+#endif
+
+#if( ipconfigDHCP_FALL_BACK_AUTO_IP != 0 )
+       #define ipconfigARP_USE_CLASH_DETECTION         1
+#endif
+
+#ifndef ipconfigARP_USE_CLASH_DETECTION
+       #define ipconfigARP_USE_CLASH_DETECTION         0
+#endif
+
+#ifndef ipconfigNETWORK_MTU
+       #define ipconfigNETWORK_MTU             1500
+#endif
+
+#ifndef ipconfigTCP_MSS
+       #define ipconfigTCP_MSS         ( ipconfigNETWORK_MTU - ipSIZE_OF_IPv4_HEADER - ipSIZE_OF_TCP_HEADER )
+#endif
+
+/* Each TCP socket has circular stream buffers for Rx and Tx, which
+ * have a fixed maximum size.
+ * The defaults for these size are defined here, although
+ * they can be overridden at runtime by using the setsockopt() call */
+#ifndef ipconfigTCP_RX_BUFFER_LENGTH
+       #define ipconfigTCP_RX_BUFFER_LENGTH                    ( 4u * ipconfigTCP_MSS )        /* defaults to 5840 bytes */
+#endif
+
+/* Define the size of Tx stream buffer for TCP sockets */
+#ifndef ipconfigTCP_TX_BUFFER_LENGTH
+#      define ipconfigTCP_TX_BUFFER_LENGTH                     ( 4u * ipconfigTCP_MSS )        /* defaults to 5840 bytes */
+#endif
+
+#ifndef ipconfigMAXIMUM_DISCOVER_TX_PERIOD
+       #ifdef _WINDOWS_
+               #define ipconfigMAXIMUM_DISCOVER_TX_PERIOD              ( pdMS_TO_TICKS( 999 ) )
+       #else
+               #define ipconfigMAXIMUM_DISCOVER_TX_PERIOD              ( pdMS_TO_TICKS( 30000 ) )
+       #endif /* _WINDOWS_ */
+#endif /* ipconfigMAXIMUM_DISCOVER_TX_PERIOD */
+
+#if( ipconfigUSE_DNS == 0 )
+       /* The DNS module will not be included. */
+       #if( ( ipconfigUSE_LLMNR != 0 ) || ( ipconfigUSE_NBNS != 0 ) )
+               /* LLMNR and NBNS depend on DNS because those protocols share a lot of code. */
+               #error When either LLMNR or NBNS is used, ipconfigUSE_DNS must be defined
+       #endif
+#endif
+
+#ifndef ipconfigUSE_DNS
+       #define ipconfigUSE_DNS                                         1
+#endif
+
+#ifndef ipconfigDNS_REQUEST_ATTEMPTS
+       #define ipconfigDNS_REQUEST_ATTEMPTS            5
+#endif
+
+#ifndef ipconfigUSE_DNS_CACHE
+       #define ipconfigUSE_DNS_CACHE                           0
+#endif
+
+#if( ipconfigUSE_DNS_CACHE != 0 )
+       #ifndef ipconfigDNS_CACHE_NAME_LENGTH
+               /* 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
+
+       #ifndef ipconfigDNS_CACHE_ENTRIES
+               #define ipconfigDNS_CACHE_ENTRIES                       1
+       #endif
+#endif /* ipconfigUSE_DNS_CACHE != 0 */
+
+#ifndef ipconfigCHECK_IP_QUEUE_SPACE
+       #define ipconfigCHECK_IP_QUEUE_SPACE                    0
+#endif
+
+#ifndef ipconfigUSE_LLMNR
+       /* Include support for LLMNR: Link-local Multicast Name Resolution (non-Microsoft) */
+       #define ipconfigUSE_LLMNR                                       ( 0 )
+#endif
+
+#ifndef ipconfigREPLY_TO_INCOMING_PINGS
+       #define ipconfigREPLY_TO_INCOMING_PINGS         1
+#endif
+
+#ifndef ipconfigSUPPORT_OUTGOING_PINGS
+       #define ipconfigSUPPORT_OUTGOING_PINGS          0
+#endif
+
+#ifndef ipconfigFILTER_OUT_NON_ETHERNET_II_FRAMES
+       #define ipconfigFILTER_OUT_NON_ETHERNET_II_FRAMES 1
+#endif
+
+#ifndef ipconfigETHERNET_DRIVER_FILTERS_FRAME_TYPES
+       #define ipconfigETHERNET_DRIVER_FILTERS_FRAME_TYPES     1
+#endif
+
+#ifndef configINCLUDE_TRACE_RELATED_CLI_COMMANDS
+       #define ipconfigINCLUDE_EXAMPLE_FREERTOS_PLUS_TRACE_CALLS 0
+#else
+       #define ipconfigINCLUDE_EXAMPLE_FREERTOS_PLUS_TRACE_CALLS configINCLUDE_TRACE_RELATED_CLI_COMMANDS
+#endif
+
+#ifndef ipconfigDRIVER_INCLUDED_RX_IP_CHECKSUM
+       #define ipconfigDRIVER_INCLUDED_RX_IP_CHECKSUM  ( 0 )
+#endif
+
+#ifndef ipconfigETHERNET_DRIVER_FILTERS_PACKETS
+       #define ipconfigETHERNET_DRIVER_FILTERS_PACKETS ( 0 )
+#endif
+
+#ifndef ipconfigWATCHDOG_TIMER
+       /* This macro will be called in every loop the IP-task makes.  It may be
+       replaced by user-code that triggers a watchdog */
+       #define ipconfigWATCHDOG_TIMER()
+#endif
+
+#ifndef ipconfigUSE_CALLBACKS
+       #define ipconfigUSE_CALLBACKS                   ( 0 )
+#endif
+
+#if( ipconfigUSE_CALLBACKS != 0 )
+       #ifndef ipconfigIS_VALID_PROG_ADDRESS
+               /* Replace this macro with a test returning non-zero if the memory pointer to by x
+                * is valid memory which can contain executable code
+                * In fact this is an extra safety measure: if a handler points to invalid memory,
+                * it will not be called
+                */
+               #define ipconfigIS_VALID_PROG_ADDRESS(x)                ( ( x ) != NULL )
+       #endif
+#endif
+
+#ifndef ipconfigHAS_INLINE_FUNCTIONS
+       #define ipconfigHAS_INLINE_FUNCTIONS    ( 1 )
+#endif
+
+#ifndef portINLINE
+       #define portINLINE inline
+#endif
+
+#ifndef ipconfigZERO_COPY_TX_DRIVER
+       /* When non-zero, the buffers passed to the SEND routine may be passed
+       to DMA. As soon as sending is ready, the buffers must be released by
+       calling vReleaseNetworkBufferAndDescriptor(), */
+       #define ipconfigZERO_COPY_TX_DRIVER             ( 0 )
+#endif
+
+#ifndef ipconfigZERO_COPY_RX_DRIVER
+       /* This define doesn't mean much to the driver, except that it makes
+       sure that pxPacketBuffer_to_NetworkBuffer() will be included. */
+       #define ipconfigZERO_COPY_RX_DRIVER             ( 0 )
+#endif
+
+#ifndef ipconfigDRIVER_INCLUDED_TX_IP_CHECKSUM
+       #define ipconfigDRIVER_INCLUDED_TX_IP_CHECKSUM 0
+#endif
+
+#ifndef ipconfigDRIVER_INCLUDED_RX_IP_CHECKSUM
+       #define ipconfigDRIVER_INCLUDED_RX_IP_CHECKSUM 0
+#endif
+
+#ifndef ipconfigDHCP_REGISTER_HOSTNAME
+       #define ipconfigDHCP_REGISTER_HOSTNAME 0
+#endif
+
+#ifndef ipconfigSOCKET_HAS_USER_SEMAPHORE
+       #define ipconfigSOCKET_HAS_USER_SEMAPHORE 0
+#endif
+
+#ifndef ipconfigSOCKET_HAS_USER_WAKE_CALLBACK
+       #define ipconfigSOCKET_HAS_USER_WAKE_CALLBACK 0
+#endif
+
+#ifndef ipconfigSUPPORT_SELECT_FUNCTION
+       #define ipconfigSUPPORT_SELECT_FUNCTION 0
+#endif
+
+#ifndef ipconfigTCP_KEEP_ALIVE
+       #define ipconfigTCP_KEEP_ALIVE 0
+#endif
+
+#ifndef ipconfigDNS_USE_CALLBACKS
+       #define ipconfigDNS_USE_CALLBACKS 0
+#endif
+
+#ifndef ipconfigSUPPORT_SIGNALS
+       #define ipconfigSUPPORT_SIGNALS                         0
+#endif
+
+#ifndef ipconfigUSE_NBNS
+       #define ipconfigUSE_NBNS 0
+#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
+       #define ipconfigTCP_HANG_PROTECTION  1
+#endif
+
+/* Non-activity timeout is expressed in seconds. */
+#ifndef ipconfigTCP_HANG_PROTECTION_TIME
+       #define ipconfigTCP_HANG_PROTECTION_TIME 30
+#endif
+
+#ifndef ipconfigTCP_IP_SANITY
+       #define ipconfigTCP_IP_SANITY 0
+#endif
+
+#ifndef ipconfigARP_STORES_REMOTE_ADDRESSES
+       #define ipconfigARP_STORES_REMOTE_ADDRESSES 0
+#endif
+
+#ifndef ipconfigBUFFER_PADDING
+       /* Expert option: define a value for 'ipBUFFER_PADDING'.
+       When 'ipconfigBUFFER_PADDING' equals 0,
+       'ipBUFFER_PADDING' will get a default value of 8 + 2 bytes. */
+       #define ipconfigBUFFER_PADDING 0
+#endif
+
+#ifndef ipconfigPACKET_FILLER_SIZE
+       #define ipconfigPACKET_FILLER_SIZE 2
+#endif
+
+#endif /* FREERTOS_DEFAULT_IP_CONFIG_H */
index 166bf3a97b654250ae3bda152534f1648dde0123..363fca425e610d79b3f8a7e484b38ea628d7c391 100644 (file)
-/*\r
- * FreeRTOS+TCP V2.2.0\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://aws.amazon.com/freertos\r
- * http://www.FreeRTOS.org\r
- */\r
-\r
-#ifndef FREERTOS_ARP_H\r
-#define FREERTOS_ARP_H\r
-\r
-#ifdef __cplusplus\r
-extern "C" {\r
-#endif\r
-\r
-/* Application level configuration options. */\r
-#include "FreeRTOSIPConfig.h"\r
-#include "FreeRTOSIPConfigDefaults.h"\r
-#include "IPTraceMacroDefaults.h"\r
-\r
-/*-----------------------------------------------------------*/\r
-/* Miscellaneous structure and definitions. */\r
-/*-----------------------------------------------------------*/\r
-\r
-typedef struct xARP_CACHE_TABLE_ROW\r
-{\r
-       uint32_t ulIPAddress;           /* The IP address of an ARP cache entry. */\r
-       MACAddress_t xMACAddress;  /* The MAC address of an ARP cache entry. */\r
-       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. */\r
-    uint8_t ucValid;                   /* pdTRUE: xMACAddress is valid, pdFALSE: waiting for ARP reply */\r
-} ARPCacheRow_t;\r
-\r
-typedef enum\r
-{\r
-       eARPCacheMiss = 0,                      /* 0 An ARP table lookup did not find a valid entry. */\r
-       eARPCacheHit,                           /* 1 An ARP table lookup found a valid entry. */\r
-       eCantSendPacket                         /* 2 There is no IP address, or an ARP is still in progress, so the packet cannot be sent. */\r
-} eARPLookupResult_t;\r
-\r
-typedef enum\r
-{\r
-       eNotFragment = 0,                       /* The IP packet being sent is not part of a fragment. */\r
-       eFirstFragment,                         /* The IP packet being sent is the first in a set of fragmented packets. */\r
-       eFollowingFragment                      /* The IP packet being sent is part of a set of fragmented packets. */\r
-} eIPFragmentStatus_t;\r
-\r
-/*\r
- * If ulIPAddress is already in the ARP cache table then reset the age of the\r
- * entry back to its maximum value.  If ulIPAddress is not already in the ARP\r
- * cache table then add it - replacing the oldest current entry if there is not\r
- * a free space available.\r
- */\r
-void vARPRefreshCacheEntry( const MACAddress_t * pxMACAddress, const uint32_t ulIPAddress );\r
-\r
-#if( ipconfigARP_USE_CLASH_DETECTION != 0 )\r
-       /* Becomes non-zero if another device responded to a gratuitos ARP message. */\r
-       extern BaseType_t xARPHadIPClash;\r
-       /* MAC-address of the other device containing the same IP-address. */\r
-       extern MACAddress_t xARPClashMacAddress;\r
-#endif /* ipconfigARP_USE_CLASH_DETECTION */\r
-\r
-#if( ipconfigUSE_ARP_REMOVE_ENTRY != 0 )\r
-\r
-       /*\r
-        * In some rare cases, it might be useful to remove a ARP cache entry of a\r
-        * known MAC address to make sure it gets refreshed.\r
-        */\r
-       uint32_t ulARPRemoveCacheEntryByMac( const MACAddress_t * pxMACAddress );\r
-\r
-#endif /* ipconfigUSE_ARP_REMOVE_ENTRY != 0 */\r
-\r
-/*\r
- * Look for ulIPAddress in the ARP cache.  If the IP address exists, copy the\r
- * associated MAC address into pxMACAddress, refresh the ARP cache entry's\r
- * age, and return eARPCacheHit.  If the IP address does not exist in the ARP\r
- * cache return eARPCacheMiss.  If the packet cannot be sent for any reason\r
- * (maybe DHCP is still in process, or the addressing needs a gateway but there\r
- * isn't a gateway defined) then return eCantSendPacket.\r
- */\r
-eARPLookupResult_t eARPGetCacheEntry( uint32_t *pulIPAddress, MACAddress_t * const pxMACAddress );\r
-\r
-#if( ipconfigUSE_ARP_REVERSED_LOOKUP != 0 )\r
-\r
-       /* Lookup an IP-address if only the MAC-address is known */\r
-       eARPLookupResult_t eARPGetCacheEntryByMac( MACAddress_t * const pxMACAddress, uint32_t *pulIPAddress );\r
-\r
-#endif\r
-/*\r
- * Reduce the age count in each entry within the ARP cache.  An entry is no\r
- * longer considered valid and is deleted if its age reaches zero.\r
- */\r
-void vARPAgeCache( void );\r
-\r
-/*\r
- * Send out an ARP request for the IP address contained in pxNetworkBuffer, and\r
- * add an entry into the ARP table that indicates that an ARP reply is\r
- * outstanding so re-transmissions can be generated.\r
- */\r
-void vARPGenerateRequestPacket( NetworkBufferDescriptor_t * const pxNetworkBuffer );\r
-\r
-/*\r
- * After DHCP is ready and when changing IP address, force a quick send of our new IP\r
- * address\r
- */\r
-void vARPSendGratuitous( void );\r
-\r
-#ifdef __cplusplus\r
-} // extern "C"\r
-#endif\r
-\r
-#endif /* FREERTOS_ARP_H */\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
+/*
+ * FreeRTOS+TCP V2.2.0
+ * 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
+ */
+
+#ifndef FREERTOS_ARP_H
+#define FREERTOS_ARP_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Application level configuration options. */
+#include "FreeRTOSIPConfig.h"
+#include "FreeRTOSIPConfigDefaults.h"
+#include "IPTraceMacroDefaults.h"
+
+/*-----------------------------------------------------------*/
+/* Miscellaneous structure and definitions. */
+/*-----------------------------------------------------------*/
+
+typedef struct xARP_CACHE_TABLE_ROW
+{
+       uint32_t ulIPAddress;           /* The IP address of an ARP cache entry. */
+       MACAddress_t xMACAddress;  /* The MAC address of an ARP cache entry. */
+       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. */
+    uint8_t ucValid;                   /* pdTRUE: xMACAddress is valid, pdFALSE: waiting for ARP reply */
+} ARPCacheRow_t;
+
+typedef enum
+{
+       eARPCacheMiss = 0,                      /* 0 An ARP table lookup did not find a valid entry. */
+       eARPCacheHit,                           /* 1 An ARP table lookup found a valid entry. */
+       eCantSendPacket                         /* 2 There is no IP address, or an ARP is still in progress, so the packet cannot be sent. */
+} eARPLookupResult_t;
+
+typedef enum
+{
+       eNotFragment = 0,                       /* The IP packet being sent is not part of a fragment. */
+       eFirstFragment,                         /* The IP packet being sent is the first in a set of fragmented packets. */
+       eFollowingFragment                      /* The IP packet being sent is part of a set of fragmented packets. */
+} eIPFragmentStatus_t;
+
+/*
+ * If ulIPAddress is already in the ARP cache table then reset the age of the
+ * entry back to its maximum value.  If ulIPAddress is not already in the ARP
+ * cache table then add it - replacing the oldest current entry if there is not
+ * a free space available.
+ */
+void vARPRefreshCacheEntry( const MACAddress_t * pxMACAddress, const uint32_t ulIPAddress );
+
+#if( ipconfigARP_USE_CLASH_DETECTION != 0 )
+       /* Becomes non-zero if another device responded to a gratuitos ARP message. */
+       extern BaseType_t xARPHadIPClash;
+       /* MAC-address of the other device containing the same IP-address. */
+       extern MACAddress_t xARPClashMacAddress;
+#endif /* ipconfigARP_USE_CLASH_DETECTION */
+
+#if( ipconfigUSE_ARP_REMOVE_ENTRY != 0 )
+
+       /*
+        * In some rare cases, it might be useful to remove a ARP cache entry of a
+        * known MAC address to make sure it gets refreshed.
+        */
+       uint32_t ulARPRemoveCacheEntryByMac( const MACAddress_t * pxMACAddress );
+
+#endif /* ipconfigUSE_ARP_REMOVE_ENTRY != 0 */
+
+/*
+ * Look for ulIPAddress in the ARP cache.  If the IP address exists, copy the
+ * associated MAC address into pxMACAddress, refresh the ARP cache entry's
+ * age, and return eARPCacheHit.  If the IP address does not exist in the ARP
+ * cache return eARPCacheMiss.  If the packet cannot be sent for any reason
+ * (maybe DHCP is still in process, or the addressing needs a gateway but there
+ * isn't a gateway defined) then return eCantSendPacket.
+ */
+eARPLookupResult_t eARPGetCacheEntry( uint32_t *pulIPAddress, MACAddress_t * const pxMACAddress );
+
+#if( ipconfigUSE_ARP_REVERSED_LOOKUP != 0 )
+
+       /* Lookup an IP-address if only the MAC-address is known */
+       eARPLookupResult_t eARPGetCacheEntryByMac( MACAddress_t * const pxMACAddress, uint32_t *pulIPAddress );
+
+#endif
+/*
+ * Reduce the age count in each entry within the ARP cache.  An entry is no
+ * longer considered valid and is deleted if its age reaches zero.
+ */
+void vARPAgeCache( void );
+
+/*
+ * Send out an ARP request for the IP address contained in pxNetworkBuffer, and
+ * add an entry into the ARP table that indicates that an ARP reply is
+ * outstanding so re-transmissions can be generated.
+ */
+void vARPGenerateRequestPacket( NetworkBufferDescriptor_t * const pxNetworkBuffer );
+
+/*
+ * After DHCP is ready and when changing IP address, force a quick send of our new IP
+ * address
+ */
+void vARPSendGratuitous( void );
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
+
+#endif /* FREERTOS_ARP_H */
+
+
+
+
+
+
+
+
+
+
+
+
+
index 6a6d372b6923f72417e41abef1878724317565a4..a49909eb2e42184a3202a1a542c8022895ff0704 100644 (file)
@@ -1,87 +1,87 @@
-/*\r
- * FreeRTOS+TCP V2.2.0\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://aws.amazon.com/freertos\r
- * http://www.FreeRTOS.org\r
- */\r
-\r
-#ifndef FREERTOS_DHCP_H\r
-#define FREERTOS_DHCP_H\r
-\r
-#ifdef __cplusplus\r
-extern "C" {\r
-#endif\r
-\r
-/* Application level configuration options. */\r
-#include "FreeRTOSIPConfig.h"\r
-#include "IPTraceMacroDefaults.h"\r
-\r
-/* Used in the DHCP callback if ipconfigUSE_DHCP_HOOK is set to 1. */\r
-typedef enum eDHCP_PHASE\r
-{\r
-       eDHCPPhasePreDiscover,  /* Driver is about to send a DHCP discovery. */\r
-       eDHCPPhasePreRequest,   /* Driver is about to request DHCP an IP address. */\r
-#if( ipconfigDHCP_SEND_DISCOVER_AFTER_AUTO_IP != 0 )\r
-       eDHCPPhasePreLLA,               /* Driver is about to try get an LLA address */\r
-#endif /* ipconfigDHCP_SEND_DISCOVER_AFTER_AUTO_IP */\r
-} eDHCPCallbackPhase_t;\r
-\r
-/* Used in the DHCP callback if ipconfigUSE_DHCP_HOOK is set to 1. */\r
-typedef enum eDHCP_ANSWERS\r
-{\r
-       eDHCPContinue,                  /* Continue the DHCP process */\r
-       eDHCPUseDefaults,               /* Stop DHCP and use the static defaults. */\r
-       eDHCPStopNoChanges,             /* Stop DHCP and continue with current settings. */\r
-} eDHCPCallbackAnswer_t;\r
-\r
-/*\r
- * NOT A PUBLIC API FUNCTION.\r
- */\r
-void vDHCPProcess( BaseType_t xReset );\r
-\r
-/* Internal call: returns true if socket is the current DHCP socket */\r
-BaseType_t xIsDHCPSocket( Socket_t xSocket );\r
-\r
-/* Prototype of the hook (or callback) function that must be provided by the\r
-application if ipconfigUSE_DHCP_HOOK is set to 1.  See the following URL for\r
-usage information:\r
-http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/TCP_IP_Configuration.html#ipconfigUSE_DHCP_HOOK\r
-*/\r
-eDHCPCallbackAnswer_t xApplicationDHCPHook( eDHCPCallbackPhase_t eDHCPPhase, uint32_t ulIPAddress );\r
-\r
-#ifdef __cplusplus\r
-}      /* extern "C" */\r
-#endif\r
-\r
-#endif /* FREERTOS_DHCP_H */\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
+/*
+ * FreeRTOS+TCP V2.2.0
+ * 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
+ */
+
+#ifndef FREERTOS_DHCP_H
+#define FREERTOS_DHCP_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Application level configuration options. */
+#include "FreeRTOSIPConfig.h"
+#include "IPTraceMacroDefaults.h"
+
+/* Used in the DHCP callback if ipconfigUSE_DHCP_HOOK is set to 1. */
+typedef enum eDHCP_PHASE
+{
+       eDHCPPhasePreDiscover,  /* Driver is about to send a DHCP discovery. */
+       eDHCPPhasePreRequest,   /* Driver is about to request DHCP an IP address. */
+#if( ipconfigDHCP_SEND_DISCOVER_AFTER_AUTO_IP != 0 )
+       eDHCPPhasePreLLA,               /* Driver is about to try get an LLA address */
+#endif /* ipconfigDHCP_SEND_DISCOVER_AFTER_AUTO_IP */
+} eDHCPCallbackPhase_t;
+
+/* Used in the DHCP callback if ipconfigUSE_DHCP_HOOK is set to 1. */
+typedef enum eDHCP_ANSWERS
+{
+       eDHCPContinue,                  /* Continue the DHCP process */
+       eDHCPUseDefaults,               /* Stop DHCP and use the static defaults. */
+       eDHCPStopNoChanges,             /* Stop DHCP and continue with current settings. */
+} eDHCPCallbackAnswer_t;
+
+/*
+ * NOT A PUBLIC API FUNCTION.
+ */
+void vDHCPProcess( BaseType_t xReset );
+
+/* Internal call: returns true if socket is the current DHCP socket */
+BaseType_t xIsDHCPSocket( Socket_t xSocket );
+
+/* Prototype of the hook (or callback) function that must be provided by the
+application if ipconfigUSE_DHCP_HOOK is set to 1.  See the following URL for
+usage information:
+http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/TCP_IP_Configuration.html#ipconfigUSE_DHCP_HOOK
+*/
+eDHCPCallbackAnswer_t xApplicationDHCPHook( eDHCPCallbackPhase_t eDHCPPhase, uint32_t ulIPAddress );
+
+#ifdef __cplusplus
+}      /* extern "C" */
+#endif
+
+#endif /* FREERTOS_DHCP_H */
+
+
+
+
+
+
+
+
+
+
+
+
+
index 449fa514fd3d5a2229d5eb562423979cefdb4742..0458d762135d0c78306be02d0ade8dd5a8d1cb71 100644 (file)
-/*\r
- * FreeRTOS+TCP V2.2.0\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://aws.amazon.com/freertos\r
- * http://www.FreeRTOS.org\r
- */\r
-\r
-#ifndef FREERTOS_DNS_H\r
-#define FREERTOS_DNS_H\r
-\r
-#ifdef __cplusplus\r
-extern "C" {\r
-#endif\r
-\r
-/* Application level configuration options. */\r
-#include "FreeRTOSIPConfig.h"\r
-#include "IPTraceMacroDefaults.h"\r
-\r
-\r
-/* The Link-local Multicast Name Resolution (LLMNR)\r
- * is included.\r
- * Note that a special MAC address is required in addition to the NIC's actual\r
- * MAC address: 01:00:5E:00:00:FC\r
- *\r
- * The target IP address will be 224.0.0.252\r
- */\r
-#if( ipconfigBYTE_ORDER == pdFREERTOS_BIG_ENDIAN )\r
-       #define ipLLMNR_IP_ADDR                 0xE00000FC\r
-#else\r
-       #define ipLLMNR_IP_ADDR                 0xFC0000E0\r
-#endif /* ipconfigBYTE_ORDER == pdFREERTOS_BIG_ENDIAN */\r
-\r
-#define        ipLLMNR_PORT    5355 /* Standard LLMNR port. */\r
-#define        ipDNS_PORT              53      /* Standard DNS port. */\r
-#define        ipDHCP_CLIENT   67\r
-#define        ipDHCP_SERVER   68\r
-#define        ipNBNS_PORT             137     /* NetBIOS Name Service. */\r
-#define        ipNBDGM_PORT    138 /* Datagram Service, not included. */\r
-\r
-/*\r
- * The following function should be provided by the user and return true if it\r
- * matches the domain name.\r
- */\r
-extern BaseType_t xApplicationDNSQueryHook( const char *pcName );\r
-\r
-/*\r
- * LLMNR is very similar to DNS, so is handled by the DNS routines.\r
- */\r
-uint32_t ulDNSHandlePacket( NetworkBufferDescriptor_t *pxNetworkBuffer );\r
-\r
-#if( ipconfigUSE_LLMNR == 1 )\r
-       extern const MACAddress_t xLLMNR_MacAdress;\r
-#endif /* ipconfigUSE_LLMNR */\r
-\r
-#if( ipconfigUSE_NBNS != 0 )\r
-\r
-       /*\r
-        * Inspect a NetBIOS Names-Service message.  If the name matches with ours\r
-        * (xApplicationDNSQueryHook returns true) an answer will be sent back.\r
-        * Note that LLMNR is a better protocol for name services on a LAN as it is\r
-        * less polluted\r
-        */\r
-       uint32_t ulNBNSHandlePacket (NetworkBufferDescriptor_t *pxNetworkBuffer );\r
-\r
-#endif /* ipconfigUSE_NBNS */\r
-\r
-#if( ipconfigUSE_DNS_CACHE != 0 )\r
-\r
-    /* Look for the indicated host name in the DNS cache. Returns the IPv4 \r
-    address if present, or 0x0 otherwise. */\r
-       uint32_t FreeRTOS_dnslookup( const char *pcHostName );\r
-\r
-    /* Remove all entries from the DNS cache. */\r
-    void FreeRTOS_dnsclear();\r
-#endif /* ipconfigUSE_DNS_CACHE != 0 */\r
-\r
-#if( ipconfigDNS_USE_CALLBACKS != 0 )\r
-\r
-       /*\r
-        * Users may define this type of function as a callback.\r
-        * It will be called when a DNS reply is received or when a timeout has been reached.\r
-        */\r
-       typedef void (* FOnDNSEvent ) ( const char * /* pcName */, void * /* pvSearchID */, uint32_t /* ulIPAddress */ );\r
-\r
-       /*\r
-        * Asynchronous version of gethostbyname()\r
-        * xTimeout is in units of ms.\r
-        */\r
-       uint32_t FreeRTOS_gethostbyname_a( const char *pcHostName, FOnDNSEvent pCallback, void *pvSearchID, TickType_t xTimeout );\r
-       void FreeRTOS_gethostbyname_cancel( void *pvSearchID );\r
-\r
-#endif\r
-\r
-/*\r
- * FULL, UP-TO-DATE AND MAINTAINED REFERENCE DOCUMENTATION FOR ALL THESE\r
- * FUNCTIONS IS AVAILABLE ON THE FOLLOWING URL:\r
- * _TBD_ Add URL\r
- */\r
-uint32_t FreeRTOS_gethostbyname( const char *pcHostName );\r
-\r
-\r
-#ifdef __cplusplus\r
-}      /* extern "C" */\r
-#endif\r
-\r
-#endif /* FREERTOS_DNS_H */\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
+/*
+ * FreeRTOS+TCP V2.2.0
+ * 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
+ */
+
+#ifndef FREERTOS_DNS_H
+#define FREERTOS_DNS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Application level configuration options. */
+#include "FreeRTOSIPConfig.h"
+#include "IPTraceMacroDefaults.h"
+
+
+/* The Link-local Multicast Name Resolution (LLMNR)
+ * is included.
+ * Note that a special MAC address is required in addition to the NIC's actual
+ * MAC address: 01:00:5E:00:00:FC
+ *
+ * The target IP address will be 224.0.0.252
+ */
+#if( ipconfigBYTE_ORDER == pdFREERTOS_BIG_ENDIAN )
+       #define ipLLMNR_IP_ADDR                 0xE00000FC
+#else
+       #define ipLLMNR_IP_ADDR                 0xFC0000E0
+#endif /* ipconfigBYTE_ORDER == pdFREERTOS_BIG_ENDIAN */
+
+#define        ipLLMNR_PORT    5355 /* Standard LLMNR port. */
+#define        ipDNS_PORT              53      /* Standard DNS port. */
+#define        ipDHCP_CLIENT   67
+#define        ipDHCP_SERVER   68
+#define        ipNBNS_PORT             137     /* NetBIOS Name Service. */
+#define        ipNBDGM_PORT    138 /* Datagram Service, not included. */
+
+/*
+ * The following function should be provided by the user and return true if it
+ * matches the domain name.
+ */
+extern BaseType_t xApplicationDNSQueryHook( const char *pcName );
+
+/*
+ * LLMNR is very similar to DNS, so is handled by the DNS routines.
+ */
+uint32_t ulDNSHandlePacket( NetworkBufferDescriptor_t *pxNetworkBuffer );
+
+#if( ipconfigUSE_LLMNR == 1 )
+       extern const MACAddress_t xLLMNR_MacAdress;
+#endif /* ipconfigUSE_LLMNR */
+
+#if( ipconfigUSE_NBNS != 0 )
+
+       /*
+        * Inspect a NetBIOS Names-Service message.  If the name matches with ours
+        * (xApplicationDNSQueryHook returns true) an answer will be sent back.
+        * Note that LLMNR is a better protocol for name services on a LAN as it is
+        * less polluted
+        */
+       uint32_t ulNBNSHandlePacket (NetworkBufferDescriptor_t *pxNetworkBuffer );
+
+#endif /* ipconfigUSE_NBNS */
+
+#if( ipconfigUSE_DNS_CACHE != 0 )
+
+    /* Look for the indicated host name in the DNS cache. Returns the IPv4 
+    address if present, or 0x0 otherwise. */
+       uint32_t FreeRTOS_dnslookup( const char *pcHostName );
+
+    /* Remove all entries from the DNS cache. */
+    void FreeRTOS_dnsclear();
+#endif /* ipconfigUSE_DNS_CACHE != 0 */
+
+#if( ipconfigDNS_USE_CALLBACKS != 0 )
+
+       /*
+        * Users may define this type of function as a callback.
+        * It will be called when a DNS reply is received or when a timeout has been reached.
+        */
+       typedef void (* FOnDNSEvent ) ( const char * /* pcName */, void * /* pvSearchID */, uint32_t /* ulIPAddress */ );
+
+       /*
+        * Asynchronous version of gethostbyname()
+        * xTimeout is in units of ms.
+        */
+       uint32_t FreeRTOS_gethostbyname_a( const char *pcHostName, FOnDNSEvent pCallback, void *pvSearchID, TickType_t xTimeout );
+       void FreeRTOS_gethostbyname_cancel( void *pvSearchID );
+
+#endif
+
+/*
+ * FULL, UP-TO-DATE AND MAINTAINED REFERENCE DOCUMENTATION FOR ALL THESE
+ * FUNCTIONS IS AVAILABLE ON THE FOLLOWING URL:
+ * _TBD_ Add URL
+ */
+uint32_t FreeRTOS_gethostbyname( const char *pcHostName );
+
+
+#ifdef __cplusplus
+}      /* extern "C" */
+#endif
+
+#endif /* FREERTOS_DNS_H */
+
+
+
+
+
+
+
+
+
+
+
+
+
index 6bfb4ad423fab695f959f3a4bfa30251310a9a6d..46a215777ecfac278b478ec235f0f58bafee3adf 100644 (file)
-/*\r
- * FreeRTOS+TCP V2.2.0\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://aws.amazon.com/freertos\r
- * http://www.FreeRTOS.org\r
- */\r
-\r
-#ifndef FREERTOS_IP_H\r
-#define FREERTOS_IP_H\r
-\r
-#ifdef __cplusplus\r
-extern "C" {\r
-#endif\r
-\r
-/* Application level configuration options. */\r
-#include "FreeRTOSIPConfig.h"\r
-#include "FreeRTOSIPConfigDefaults.h"\r
-#include "IPTraceMacroDefaults.h"\r
-\r
-/* Some constants defining the sizes of several parts of a packet */\r
-#define ipSIZE_OF_ETH_HEADER                   14u\r
-#define ipSIZE_OF_IPv4_HEADER                  20u\r
-#define ipSIZE_OF_IGMP_HEADER                  8u\r
-#define ipSIZE_OF_ICMP_HEADER                  8u\r
-#define ipSIZE_OF_UDP_HEADER                   8u\r
-#define ipSIZE_OF_TCP_HEADER                   20u\r
-\r
-\r
-/* The number of octets in the MAC and IP addresses respectively. */\r
-#define ipMAC_ADDRESS_LENGTH_BYTES ( 6 )\r
-#define ipIP_ADDRESS_LENGTH_BYTES ( 4 )\r
-\r
-/* IP protocol definitions. */\r
-#define ipPROTOCOL_ICMP                        ( 1 )\r
-#define ipPROTOCOL_IGMP         ( 2 )\r
-#define ipPROTOCOL_TCP                 ( 6 )\r
-#define ipPROTOCOL_UDP                 ( 17 )\r
-\r
-/* Dimensions the buffers that are filled by received Ethernet frames. */\r
-#define ipSIZE_OF_ETH_CRC_BYTES                                        ( 4UL )\r
-#define ipSIZE_OF_ETH_OPTIONAL_802_1Q_TAG_BYTES        ( 4UL )\r
-#define ipTOTAL_ETHERNET_FRAME_SIZE                            ( ( ( uint32_t ) ipconfigNETWORK_MTU ) + ( ( uint32_t ) ipSIZE_OF_ETH_HEADER ) + ipSIZE_OF_ETH_CRC_BYTES + ipSIZE_OF_ETH_OPTIONAL_802_1Q_TAG_BYTES )\r
-\r
-/*_RB_ Comment may need updating. */\r
-/* Space left at the beginning of a network buffer storage area to store a\r
-pointer back to the network buffer.  Should be a multiple of 8 to ensure 8 byte\r
-alignment is maintained on architectures that require it.\r
-\r
-In order to get a 32-bit alignment of network packets, an offset of 2 bytes\r
-would be desirable, as defined by ipconfigPACKET_FILLER_SIZE.  So the malloc'd\r
-buffer will have the following contents:\r
-       uint32_t pointer;       // word-aligned\r
-       uchar_8 filler[6];\r
-       << ETH-header >>        // half-word-aligned\r
-       uchar_8 dest[6];    // start of pucEthernetBuffer\r
-       uchar_8 dest[6];\r
-       uchar16_t type;\r
-       << IP-header >>         // word-aligned\r
-       uint8_t ucVersionHeaderLength;\r
-       etc\r
- */\r
-#if( ipconfigBUFFER_PADDING != 0 )\r
-    #define ipBUFFER_PADDING    ipconfigBUFFER_PADDING\r
-#else\r
-    #define ipBUFFER_PADDING    ( 8u + ipconfigPACKET_FILLER_SIZE )\r
-#endif\r
-\r
-/* The structure used to store buffers and pass them around the network stack.\r
-Buffers can be in use by the stack, in use by the network interface hardware\r
-driver, or free (not in use). */\r
-typedef struct xNETWORK_BUFFER\r
-{\r
-       ListItem_t xBufferListItem;     /* Used to reference the buffer form the free buffer list or a socket. */\r
-       uint32_t ulIPAddress;                   /* Source or destination IP address, depending on usage scenario. */\r
-       uint8_t *pucEthernetBuffer;     /* Pointer to the start of the Ethernet frame. */\r
-       size_t xDataLength;                     /* Starts by holding the total Ethernet frame length, then the UDP/TCP payload length. */\r
-       uint16_t usPort;                                /* Source or destination port, depending on usage scenario. */\r
-       uint16_t usBoundPort;                   /* The port to which a transmitting socket is bound. */\r
-       #if( ipconfigUSE_LINKED_RX_MESSAGES != 0 )\r
-               struct xNETWORK_BUFFER *pxNextBuffer; /* Possible optimisation for expert users - requires network driver support. */\r
-       #endif\r
-} NetworkBufferDescriptor_t;\r
-\r
-#include "pack_struct_start.h"\r
-struct xMAC_ADDRESS\r
-{\r
-       uint8_t ucBytes[ ipMAC_ADDRESS_LENGTH_BYTES ];\r
-}\r
-#include "pack_struct_end.h"\r
-\r
-typedef struct xMAC_ADDRESS MACAddress_t;\r
-\r
-typedef enum eNETWORK_EVENTS\r
-{\r
-       eNetworkUp,             /* The network is configured. */\r
-       eNetworkDown    /* The network connection has been lost. */\r
-} eIPCallbackEvent_t;\r
-\r
-typedef enum ePING_REPLY_STATUS\r
-{\r
-       eSuccess = 0,           /* A correct reply has been received for an outgoing ping. */\r
-       eInvalidChecksum,       /* A reply was received for an outgoing ping but the checksum of the reply was incorrect. */\r
-       eInvalidData            /* A reply was received to an outgoing ping but the payload of the reply was not correct. */\r
-} ePingReplyStatus_t;\r
-\r
-typedef enum eNETWORK_ADDRESS_TYPE \r
-{\r
-       eNetWorkAddressTypeIPV4,\r
-       eNetWorkAddressTypeIPV6,\r
-       eNetWorkAddressTypeHostName\r
-} eNetWorkAddressType_t;\r
-\r
-/* Endian related definitions. */\r
-#if( ipconfigBYTE_ORDER == pdFREERTOS_LITTLE_ENDIAN )\r
-\r
-       /* FreeRTOS_htons / FreeRTOS_htonl: some platforms might have built-in versions\r
-       using a single instruction so allow these versions to be overridden. */\r
-       #ifndef FreeRTOS_htons\r
-               #define FreeRTOS_htons( usIn ) ( (uint16_t) ( ( ( usIn ) << 8U ) | ( ( usIn ) >> 8U ) ) )\r
-       #endif\r
-\r
-       #ifndef FreeRTOS_htonl\r
-               #define FreeRTOS_htonl( ulIn )                                                                                  \\r
-                       (                                                                                                                                       \\r
-                               ( uint32_t )                                                                                                    \\r
-                               (                                                                                                                               \\r
-                                       ( ( ( ( uint32_t ) ( ulIn ) )                ) << 24  ) |       \\r
-                                       ( ( ( ( uint32_t ) ( ulIn ) ) & 0x0000ff00UL ) <<  8  ) |       \\r
-                                       ( ( ( ( uint32_t ) ( ulIn ) ) & 0x00ff0000UL ) >>  8  ) |       \\r
-                                       ( ( ( ( uint32_t ) ( ulIn ) )                ) >> 24  )         \\r
-                               )                                                                                                                               \\r
-                       )\r
-       #endif\r
-\r
-#else /* ipconfigBYTE_ORDER */\r
-\r
-       #define FreeRTOS_htons( x ) ( ( uint16_t ) ( x ) )\r
-       #define FreeRTOS_htonl( x ) ( ( uint32_t ) ( x ) )\r
-\r
-#endif /* ipconfigBYTE_ORDER == pdFREERTOS_LITTLE_ENDIAN */\r
-\r
-#define FreeRTOS_ntohs( x ) FreeRTOS_htons( x )\r
-#define FreeRTOS_ntohl( x ) FreeRTOS_htonl( x )\r
-\r
-#if( ipconfigHAS_INLINE_FUNCTIONS == 1 )\r
-\r
-       static portINLINE int32_t  FreeRTOS_max_int32  (int32_t  a, int32_t  b);\r
-       static portINLINE uint32_t FreeRTOS_max_uint32 (uint32_t a, uint32_t b);\r
-       static portINLINE int32_t  FreeRTOS_min_int32  (int32_t  a, int32_t  b);\r
-       static portINLINE uint32_t FreeRTOS_min_uint32 (uint32_t a, uint32_t b);\r
-       static portINLINE uint32_t FreeRTOS_round_up   (uint32_t a, uint32_t d);\r
-       static portINLINE uint32_t FreeRTOS_round_down (uint32_t a, uint32_t d);\r
-       static portINLINE BaseType_t  FreeRTOS_min_BaseType  (BaseType_t  a, BaseType_t  b);\r
-       static portINLINE BaseType_t  FreeRTOS_max_BaseType  (BaseType_t  a, BaseType_t  b);\r
-       static portINLINE UBaseType_t FreeRTOS_max_UBaseType (UBaseType_t a, UBaseType_t b);\r
-       static portINLINE UBaseType_t   FreeRTOS_min_UBaseType (UBaseType_t  a, UBaseType_t  b);\r
-\r
-\r
-       static portINLINE int32_t  FreeRTOS_max_int32  (int32_t  a, int32_t  b) { return a >= b ? a : b; }\r
-       static portINLINE uint32_t FreeRTOS_max_uint32 (uint32_t a, uint32_t b) { return a >= b ? a : b; }\r
-       static portINLINE int32_t  FreeRTOS_min_int32  (int32_t  a, int32_t  b) { return a <= b ? a : b; }\r
-       static portINLINE uint32_t FreeRTOS_min_uint32 (uint32_t a, uint32_t b) { return a <= b ? a : b; }\r
-       static portINLINE uint32_t FreeRTOS_round_up   (uint32_t a, uint32_t d) { return d * ( ( a + d - 1u ) / d ); }\r
-       static portINLINE uint32_t FreeRTOS_round_down (uint32_t a, uint32_t d) { return d * ( a / d ); }\r
-\r
-       static portINLINE BaseType_t  FreeRTOS_max_BaseType  (BaseType_t  a, BaseType_t  b) { return a >= b ? a : b; }\r
-       static portINLINE UBaseType_t FreeRTOS_max_UBaseType (UBaseType_t a, UBaseType_t b) { return a >= b ? a : b; }\r
-       static portINLINE BaseType_t  FreeRTOS_min_BaseType  (BaseType_t  a, BaseType_t  b) { return a <= b ? a : b; }\r
-       static portINLINE UBaseType_t FreeRTOS_min_UBaseType (UBaseType_t  a, UBaseType_t  b) { return a <= b ? a : b; }\r
-\r
-#else\r
-\r
-       #define FreeRTOS_max_int32(a,b)  ( ( ( int32_t  ) ( a ) ) >= ( ( int32_t  ) ( b ) ) ? ( ( int32_t  ) ( a ) ) : ( ( int32_t  ) ( b ) ) )\r
-       #define FreeRTOS_max_uint32(a,b) ( ( ( uint32_t ) ( a ) ) >= ( ( uint32_t ) ( b ) ) ? ( ( uint32_t ) ( a ) ) : ( ( uint32_t ) ( b ) ) )\r
-\r
-       #define FreeRTOS_min_int32(a,b)  ( ( ( int32_t  ) a ) <= ( ( int32_t  ) b ) ? ( ( int32_t  ) a ) : ( ( int32_t  ) b ) )\r
-       #define FreeRTOS_min_uint32(a,b) ( ( ( uint32_t ) a ) <= ( ( uint32_t ) b ) ? ( ( uint32_t ) a ) : ( ( uint32_t ) b ) )\r
-\r
-       /*  Round-up: a = d * ( ( a + d - 1 ) / d ) */\r
-       #define FreeRTOS_round_up(a,d)   ( ( ( uint32_t ) ( d ) ) * ( ( ( ( uint32_t ) ( a ) ) + ( ( uint32_t ) ( d ) ) - 1UL ) / ( ( uint32_t ) ( d ) ) ) )\r
-       #define FreeRTOS_round_down(a,d) ( ( ( uint32_t ) ( d ) ) * ( ( ( uint32_t ) ( a ) ) / ( ( uint32_t ) ( d ) ) ) )\r
-\r
-       #define FreeRTOS_ms_to_tick(ms)  ( ( ms * configTICK_RATE_HZ + 500 ) / 1000 )\r
-\r
-       #define FreeRTOS_max_BaseType(a, b)  ( ( ( BaseType_t  ) ( a ) ) >= ( ( BaseType_t  ) ( b ) ) ? ( ( BaseType_t  ) ( a ) ) : ( ( BaseType_t  ) ( b ) ) )\r
-       #define FreeRTOS_max_UBaseType(a, b) ( ( ( UBaseType_t ) ( a ) ) >= ( ( UBaseType_t ) ( b ) ) ? ( ( UBaseType_t ) ( a ) ) : ( ( UBaseType_t ) ( b ) ) )\r
-       #define FreeRTOS_min_BaseType(a, b)  ( ( ( BaseType_t  ) ( a ) ) <= ( ( BaseType_t  ) ( b ) ) ? ( ( BaseType_t  ) ( a ) ) : ( ( BaseType_t  ) ( b ) ) )\r
-       #define FreeRTOS_min_UBaseType(a, b) ( ( ( UBaseType_t ) ( a ) ) <= ( ( UBaseType_t ) ( b ) ) ? ( ( UBaseType_t ) ( a ) ) : ( ( UBaseType_t ) ( b ) ) )\r
-\r
-#endif /* ipconfigHAS_INLINE_FUNCTIONS */\r
-\r
-#define pdMS_TO_MIN_TICKS( xTimeInMs ) ( pdMS_TO_TICKS( ( xTimeInMs ) ) < ( ( TickType_t ) 1 ) ? ( ( TickType_t ) 1 ) : pdMS_TO_TICKS( ( xTimeInMs ) ) )\r
-\r
-#ifndef pdTRUE_SIGNED\r
-       /* Temporary solution: eventually the defines below will appear in 'Source\include\projdefs.h' */\r
-       #define pdTRUE_SIGNED           pdTRUE\r
-       #define pdFALSE_SIGNED          pdFALSE\r
-       #define pdTRUE_UNSIGNED         ( ( UBaseType_t ) 1u )\r
-       #define pdFALSE_UNSIGNED        ( ( UBaseType_t ) 0u )\r
-#endif\r
-\r
-/*\r
- * FULL, UP-TO-DATE AND MAINTAINED REFERENCE DOCUMENTATION FOR ALL THESE\r
- * FUNCTIONS IS AVAILABLE ON THE FOLLOWING URL:\r
- * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/FreeRTOS_TCP_API_Functions.html\r
- */\r
-BaseType_t FreeRTOS_IPInit( const uint8_t ucIPAddress[ ipIP_ADDRESS_LENGTH_BYTES ],\r
-       const uint8_t ucNetMask[ ipIP_ADDRESS_LENGTH_BYTES ],\r
-       const uint8_t ucGatewayAddress[ ipIP_ADDRESS_LENGTH_BYTES ],\r
-       const uint8_t ucDNSServerAddress[ ipIP_ADDRESS_LENGTH_BYTES ],\r
-       const uint8_t ucMACAddress[ ipMAC_ADDRESS_LENGTH_BYTES ] );\r
-\r
-void * FreeRTOS_GetUDPPayloadBuffer( size_t xRequestedSizeBytes, TickType_t xBlockTimeTicks );\r
-void FreeRTOS_GetAddressConfiguration( uint32_t *pulIPAddress, uint32_t *pulNetMask, uint32_t *pulGatewayAddress, uint32_t *pulDNSServerAddress );\r
-void FreeRTOS_SetAddressConfiguration( const uint32_t *pulIPAddress, const uint32_t *pulNetMask, const uint32_t *pulGatewayAddress, const uint32_t *pulDNSServerAddress );\r
-BaseType_t FreeRTOS_SendPingRequest( uint32_t ulIPAddress, size_t xNumberOfBytesToSend, TickType_t xBlockTimeTicks );\r
-void FreeRTOS_ReleaseUDPPayloadBuffer( void *pvBuffer );\r
-const uint8_t * FreeRTOS_GetMACAddress( void );\r
-void FreeRTOS_UpdateMACAddress( const uint8_t ucMACAddress[ipMAC_ADDRESS_LENGTH_BYTES] );\r
-void vApplicationIPNetworkEventHook( eIPCallbackEvent_t eNetworkEvent );\r
-void vApplicationPingReplyHook( ePingReplyStatus_t eStatus, uint16_t usIdentifier );\r
-uint32_t FreeRTOS_GetIPAddress( void );\r
-void FreeRTOS_SetIPAddress( uint32_t ulIPAddress );\r
-void FreeRTOS_SetNetmask( uint32_t ulNetmask );\r
-void FreeRTOS_SetGatewayAddress( uint32_t ulGatewayAddress );\r
-uint32_t FreeRTOS_GetGatewayAddress( void );\r
-uint32_t FreeRTOS_GetDNSServerAddress( void );\r
-uint32_t FreeRTOS_GetNetmask( void );\r
-void FreeRTOS_OutputARPRequest( uint32_t ulIPAddress );\r
-BaseType_t FreeRTOS_IsNetworkUp( void );\r
-\r
-#if( ipconfigCHECK_IP_QUEUE_SPACE != 0 )\r
-       UBaseType_t uxGetMinimumIPQueueSpace( void );\r
-#endif\r
-\r
-/*\r
- * Defined in FreeRTOS_Sockets.c\r
- * //_RB_ Don't think this comment is correct.  If this is for internal use only it should appear after all the public API functions and not start with FreeRTOS_.\r
- * Socket has had activity, reset the timer so it will not be closed\r
- * because of inactivity\r
- */\r
-const char *FreeRTOS_GetTCPStateName( UBaseType_t ulState);\r
-\r
-/* _HT_ Temporary: show all valid ARP entries\r
- */\r
-void FreeRTOS_PrintARPCache( void );\r
-void FreeRTOS_ClearARP( void );\r
-\r
-#if( ipconfigDHCP_REGISTER_HOSTNAME == 1 )\r
-\r
-       /* DHCP has an option for clients to register their hostname.  It doesn't\r
-       have much use, except that a device can be found in a router along with its\r
-       name. If this option is used the callback below must be provided by the\r
-       application     writer to return a const string, denoting the device's name. */\r
-       const char *pcApplicationHostnameHook( void );\r
-\r
-#endif /* ipconfigDHCP_REGISTER_HOSTNAME */\r
-\r
-\r
-/* This xApplicationGetRandomNumber() will set *pulNumber to a random number,\r
-and return pdTRUE. When the random number generator is broken, it shall return\r
-pdFALSE.\r
-The function is defined in 'iot_secure_sockets.c'.\r
-If that module is not included in the project, the application must provide an\r
-implementation of it.\r
-The macro's ipconfigRAND32() and configRAND32() are not in use anymore. */\r
-BaseType_t xApplicationGetRandomNumber( uint32_t *pulNumber );\r
-\r
-/* For backward compatibility define old structure names to the newer equivalent\r
-structure name. */\r
-#ifndef ipconfigENABLE_BACKWARD_COMPATIBILITY\r
-       #define ipconfigENABLE_BACKWARD_COMPATIBILITY   1\r
-#endif\r
-\r
-#if( ipconfigENABLE_BACKWARD_COMPATIBILITY == 1 )\r
-       #define xIPStackEvent_t                         IPStackEvent_t\r
-       #define xNetworkBufferDescriptor_t      NetworkBufferDescriptor_t\r
-       #define xMACAddress_t                           MACAddress_t\r
-       #define xWinProperties_t                        WinProperties_t\r
-       #define xSocket_t                                       Socket_t\r
-       #define xSocketSet_t                            SocketSet_t\r
-       #define ipSIZE_OF_IP_HEADER                     ipSIZE_OF_IPv4_HEADER\r
-\r
-       /* Since August 2016, the public types and fields below have changed name:\r
-       abbreviations TCP/UDP are now written in capitals, and type names now end with "_t". */\r
-       #define FOnConnected                            FOnConnected_t\r
-       #define FOnTcpReceive                           FOnTCPReceive_t\r
-       #define FOnTcpSent                                      FOnTCPSent_t\r
-       #define FOnUdpReceive                           FOnUDPReceive_t\r
-       #define FOnUdpSent                                      FOnUDPSent_t\r
-\r
-       #define pOnTcpConnected                         pxOnTCPConnected\r
-       #define pOnTcpReceive                           pxOnTCPReceive\r
-       #define pOnTcpSent                                      pxOnTCPSent\r
-       #define pOnUdpReceive                           pxOnUDPReceive\r
-       #define pOnUdpSent                                      pxOnUDPSent\r
-\r
-       #define FOnUdpSent                                      FOnUDPSent_t\r
-       #define FOnTcpSent                                      FOnTCPSent_t\r
-#endif /* ipconfigENABLE_BACKWARD_COMPATIBILITY */\r
-\r
-#ifdef __cplusplus\r
-} /* extern "C" */\r
-#endif\r
-\r
-#endif /* FREERTOS_IP_H */\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
+/*
+ * FreeRTOS+TCP V2.2.0
+ * 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
+ */
+
+#ifndef FREERTOS_IP_H
+#define FREERTOS_IP_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Application level configuration options. */
+#include "FreeRTOSIPConfig.h"
+#include "FreeRTOSIPConfigDefaults.h"
+#include "IPTraceMacroDefaults.h"
+
+/* Some constants defining the sizes of several parts of a packet */
+#define ipSIZE_OF_ETH_HEADER                   14u
+#define ipSIZE_OF_IPv4_HEADER                  20u
+#define ipSIZE_OF_IGMP_HEADER                  8u
+#define ipSIZE_OF_ICMP_HEADER                  8u
+#define ipSIZE_OF_UDP_HEADER                   8u
+#define ipSIZE_OF_TCP_HEADER                   20u
+
+
+/* The number of octets in the MAC and IP addresses respectively. */
+#define ipMAC_ADDRESS_LENGTH_BYTES ( 6 )
+#define ipIP_ADDRESS_LENGTH_BYTES ( 4 )
+
+/* IP protocol definitions. */
+#define ipPROTOCOL_ICMP                        ( 1 )
+#define ipPROTOCOL_IGMP         ( 2 )
+#define ipPROTOCOL_TCP                 ( 6 )
+#define ipPROTOCOL_UDP                 ( 17 )
+
+/* Dimensions the buffers that are filled by received Ethernet frames. */
+#define ipSIZE_OF_ETH_CRC_BYTES                                        ( 4UL )
+#define ipSIZE_OF_ETH_OPTIONAL_802_1Q_TAG_BYTES        ( 4UL )
+#define ipTOTAL_ETHERNET_FRAME_SIZE                            ( ( ( uint32_t ) ipconfigNETWORK_MTU ) + ( ( uint32_t ) ipSIZE_OF_ETH_HEADER ) + ipSIZE_OF_ETH_CRC_BYTES + ipSIZE_OF_ETH_OPTIONAL_802_1Q_TAG_BYTES )
+
+/*_RB_ Comment may need updating. */
+/* Space left at the beginning of a network buffer storage area to store a
+pointer back to the network buffer.  Should be a multiple of 8 to ensure 8 byte
+alignment is maintained on architectures that require it.
+
+In order to get a 32-bit alignment of network packets, an offset of 2 bytes
+would be desirable, as defined by ipconfigPACKET_FILLER_SIZE.  So the malloc'd
+buffer will have the following contents:
+       uint32_t pointer;       // word-aligned
+       uchar_8 filler[6];
+       << ETH-header >>        // half-word-aligned
+       uchar_8 dest[6];    // start of pucEthernetBuffer
+       uchar_8 dest[6];
+       uchar16_t type;
+       << IP-header >>         // word-aligned
+       uint8_t ucVersionHeaderLength;
+       etc
+ */
+#if( ipconfigBUFFER_PADDING != 0 )
+    #define ipBUFFER_PADDING    ipconfigBUFFER_PADDING
+#else
+    #define ipBUFFER_PADDING    ( 8u + ipconfigPACKET_FILLER_SIZE )
+#endif
+
+/* The structure used to store buffers and pass them around the network stack.
+Buffers can be in use by the stack, in use by the network interface hardware
+driver, or free (not in use). */
+typedef struct xNETWORK_BUFFER
+{
+       ListItem_t xBufferListItem;     /* Used to reference the buffer form the free buffer list or a socket. */
+       uint32_t ulIPAddress;                   /* Source or destination IP address, depending on usage scenario. */
+       uint8_t *pucEthernetBuffer;     /* Pointer to the start of the Ethernet frame. */
+       size_t xDataLength;                     /* Starts by holding the total Ethernet frame length, then the UDP/TCP payload length. */
+       uint16_t usPort;                                /* Source or destination port, depending on usage scenario. */
+       uint16_t usBoundPort;                   /* The port to which a transmitting socket is bound. */
+       #if( ipconfigUSE_LINKED_RX_MESSAGES != 0 )
+               struct xNETWORK_BUFFER *pxNextBuffer; /* Possible optimisation for expert users - requires network driver support. */
+       #endif
+} NetworkBufferDescriptor_t;
+
+#include "pack_struct_start.h"
+struct xMAC_ADDRESS
+{
+       uint8_t ucBytes[ ipMAC_ADDRESS_LENGTH_BYTES ];
+}
+#include "pack_struct_end.h"
+
+typedef struct xMAC_ADDRESS MACAddress_t;
+
+typedef enum eNETWORK_EVENTS
+{
+       eNetworkUp,             /* The network is configured. */
+       eNetworkDown    /* The network connection has been lost. */
+} eIPCallbackEvent_t;
+
+typedef enum ePING_REPLY_STATUS
+{
+       eSuccess = 0,           /* A correct reply has been received for an outgoing ping. */
+       eInvalidChecksum,       /* A reply was received for an outgoing ping but the checksum of the reply was incorrect. */
+       eInvalidData            /* A reply was received to an outgoing ping but the payload of the reply was not correct. */
+} ePingReplyStatus_t;
+
+typedef enum eNETWORK_ADDRESS_TYPE 
+{
+       eNetWorkAddressTypeIPV4,
+       eNetWorkAddressTypeIPV6,
+       eNetWorkAddressTypeHostName
+} eNetWorkAddressType_t;
+
+/* Endian related definitions. */
+#if( ipconfigBYTE_ORDER == pdFREERTOS_LITTLE_ENDIAN )
+
+       /* FreeRTOS_htons / FreeRTOS_htonl: some platforms might have built-in versions
+       using a single instruction so allow these versions to be overridden. */
+       #ifndef FreeRTOS_htons
+               #define FreeRTOS_htons( usIn ) ( (uint16_t) ( ( ( usIn ) << 8U ) | ( ( usIn ) >> 8U ) ) )
+       #endif
+
+       #ifndef FreeRTOS_htonl
+               #define FreeRTOS_htonl( ulIn )                                                                                  \
+                       (                                                                                                                                       \
+                               ( uint32_t )                                                                                                    \
+                               (                                                                                                                               \
+                                       ( ( ( ( uint32_t ) ( ulIn ) )                ) << 24  ) |       \
+                                       ( ( ( ( uint32_t ) ( ulIn ) ) & 0x0000ff00UL ) <<  8  ) |       \
+                                       ( ( ( ( uint32_t ) ( ulIn ) ) & 0x00ff0000UL ) >>  8  ) |       \
+                                       ( ( ( ( uint32_t ) ( ulIn ) )                ) >> 24  )         \
+                               )                                                                                                                               \
+                       )
+       #endif
+
+#else /* ipconfigBYTE_ORDER */
+
+       #define FreeRTOS_htons( x ) ( ( uint16_t ) ( x ) )
+       #define FreeRTOS_htonl( x ) ( ( uint32_t ) ( x ) )
+
+#endif /* ipconfigBYTE_ORDER == pdFREERTOS_LITTLE_ENDIAN */
+
+#define FreeRTOS_ntohs( x ) FreeRTOS_htons( x )
+#define FreeRTOS_ntohl( x ) FreeRTOS_htonl( x )
+
+#if( ipconfigHAS_INLINE_FUNCTIONS == 1 )
+
+       static portINLINE int32_t  FreeRTOS_max_int32  (int32_t  a, int32_t  b);
+       static portINLINE uint32_t FreeRTOS_max_uint32 (uint32_t a, uint32_t b);
+       static portINLINE int32_t  FreeRTOS_min_int32  (int32_t  a, int32_t  b);
+       static portINLINE uint32_t FreeRTOS_min_uint32 (uint32_t a, uint32_t b);
+       static portINLINE uint32_t FreeRTOS_round_up   (uint32_t a, uint32_t d);
+       static portINLINE uint32_t FreeRTOS_round_down (uint32_t a, uint32_t d);
+       static portINLINE BaseType_t  FreeRTOS_min_BaseType  (BaseType_t  a, BaseType_t  b);
+       static portINLINE BaseType_t  FreeRTOS_max_BaseType  (BaseType_t  a, BaseType_t  b);
+       static portINLINE UBaseType_t FreeRTOS_max_UBaseType (UBaseType_t a, UBaseType_t b);
+       static portINLINE UBaseType_t   FreeRTOS_min_UBaseType (UBaseType_t  a, UBaseType_t  b);
+
+
+       static portINLINE int32_t  FreeRTOS_max_int32  (int32_t  a, int32_t  b) { return a >= b ? a : b; }
+       static portINLINE uint32_t FreeRTOS_max_uint32 (uint32_t a, uint32_t b) { return a >= b ? a : b; }
+       static portINLINE int32_t  FreeRTOS_min_int32  (int32_t  a, int32_t  b) { return a <= b ? a : b; }
+       static portINLINE uint32_t FreeRTOS_min_uint32 (uint32_t a, uint32_t b) { return a <= b ? a : b; }
+       static portINLINE uint32_t FreeRTOS_round_up   (uint32_t a, uint32_t d) { return d * ( ( a + d - 1u ) / d ); }
+       static portINLINE uint32_t FreeRTOS_round_down (uint32_t a, uint32_t d) { return d * ( a / d ); }
+
+       static portINLINE BaseType_t  FreeRTOS_max_BaseType  (BaseType_t  a, BaseType_t  b) { return a >= b ? a : b; }
+       static portINLINE UBaseType_t FreeRTOS_max_UBaseType (UBaseType_t a, UBaseType_t b) { return a >= b ? a : b; }
+       static portINLINE BaseType_t  FreeRTOS_min_BaseType  (BaseType_t  a, BaseType_t  b) { return a <= b ? a : b; }
+       static portINLINE UBaseType_t FreeRTOS_min_UBaseType (UBaseType_t  a, UBaseType_t  b) { return a <= b ? a : b; }
+
+#else
+
+       #define FreeRTOS_max_int32(a,b)  ( ( ( int32_t  ) ( a ) ) >= ( ( int32_t  ) ( b ) ) ? ( ( int32_t  ) ( a ) ) : ( ( int32_t  ) ( b ) ) )
+       #define FreeRTOS_max_uint32(a,b) ( ( ( uint32_t ) ( a ) ) >= ( ( uint32_t ) ( b ) ) ? ( ( uint32_t ) ( a ) ) : ( ( uint32_t ) ( b ) ) )
+
+       #define FreeRTOS_min_int32(a,b)  ( ( ( int32_t  ) a ) <= ( ( int32_t  ) b ) ? ( ( int32_t  ) a ) : ( ( int32_t  ) b ) )
+       #define FreeRTOS_min_uint32(a,b) ( ( ( uint32_t ) a ) <= ( ( uint32_t ) b ) ? ( ( uint32_t ) a ) : ( ( uint32_t ) b ) )
+
+       /*  Round-up: a = d * ( ( a + d - 1 ) / d ) */
+       #define FreeRTOS_round_up(a,d)   ( ( ( uint32_t ) ( d ) ) * ( ( ( ( uint32_t ) ( a ) ) + ( ( uint32_t ) ( d ) ) - 1UL ) / ( ( uint32_t ) ( d ) ) ) )
+       #define FreeRTOS_round_down(a,d) ( ( ( uint32_t ) ( d ) ) * ( ( ( uint32_t ) ( a ) ) / ( ( uint32_t ) ( d ) ) ) )
+
+       #define FreeRTOS_ms_to_tick(ms)  ( ( ms * configTICK_RATE_HZ + 500 ) / 1000 )
+
+       #define FreeRTOS_max_BaseType(a, b)  ( ( ( BaseType_t  ) ( a ) ) >= ( ( BaseType_t  ) ( b ) ) ? ( ( BaseType_t  ) ( a ) ) : ( ( BaseType_t  ) ( b ) ) )
+       #define FreeRTOS_max_UBaseType(a, b) ( ( ( UBaseType_t ) ( a ) ) >= ( ( UBaseType_t ) ( b ) ) ? ( ( UBaseType_t ) ( a ) ) : ( ( UBaseType_t ) ( b ) ) )
+       #define FreeRTOS_min_BaseType(a, b)  ( ( ( BaseType_t  ) ( a ) ) <= ( ( BaseType_t  ) ( b ) ) ? ( ( BaseType_t  ) ( a ) ) : ( ( BaseType_t  ) ( b ) ) )
+       #define FreeRTOS_min_UBaseType(a, b) ( ( ( UBaseType_t ) ( a ) ) <= ( ( UBaseType_t ) ( b ) ) ? ( ( UBaseType_t ) ( a ) ) : ( ( UBaseType_t ) ( b ) ) )
+
+#endif /* ipconfigHAS_INLINE_FUNCTIONS */
+
+#define pdMS_TO_MIN_TICKS( xTimeInMs ) ( pdMS_TO_TICKS( ( xTimeInMs ) ) < ( ( TickType_t ) 1 ) ? ( ( TickType_t ) 1 ) : pdMS_TO_TICKS( ( xTimeInMs ) ) )
+
+#ifndef pdTRUE_SIGNED
+       /* Temporary solution: eventually the defines below will appear in 'Source\include\projdefs.h' */
+       #define pdTRUE_SIGNED           pdTRUE
+       #define pdFALSE_SIGNED          pdFALSE
+       #define pdTRUE_UNSIGNED         ( ( UBaseType_t ) 1u )
+       #define pdFALSE_UNSIGNED        ( ( UBaseType_t ) 0u )
+#endif
+
+/*
+ * FULL, UP-TO-DATE AND MAINTAINED REFERENCE DOCUMENTATION FOR ALL THESE
+ * FUNCTIONS IS AVAILABLE ON THE FOLLOWING URL:
+ * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/FreeRTOS_TCP_API_Functions.html
+ */
+BaseType_t FreeRTOS_IPInit( const uint8_t ucIPAddress[ ipIP_ADDRESS_LENGTH_BYTES ],
+       const uint8_t ucNetMask[ ipIP_ADDRESS_LENGTH_BYTES ],
+       const uint8_t ucGatewayAddress[ ipIP_ADDRESS_LENGTH_BYTES ],
+       const uint8_t ucDNSServerAddress[ ipIP_ADDRESS_LENGTH_BYTES ],
+       const uint8_t ucMACAddress[ ipMAC_ADDRESS_LENGTH_BYTES ] );
+
+void * FreeRTOS_GetUDPPayloadBuffer( size_t xRequestedSizeBytes, TickType_t xBlockTimeTicks );
+void FreeRTOS_GetAddressConfiguration( uint32_t *pulIPAddress, uint32_t *pulNetMask, uint32_t *pulGatewayAddress, uint32_t *pulDNSServerAddress );
+void FreeRTOS_SetAddressConfiguration( const uint32_t *pulIPAddress, const uint32_t *pulNetMask, const uint32_t *pulGatewayAddress, const uint32_t *pulDNSServerAddress );
+BaseType_t FreeRTOS_SendPingRequest( uint32_t ulIPAddress, size_t xNumberOfBytesToSend, TickType_t xBlockTimeTicks );
+void FreeRTOS_ReleaseUDPPayloadBuffer( void *pvBuffer );
+const uint8_t * FreeRTOS_GetMACAddress( void );
+void FreeRTOS_UpdateMACAddress( const uint8_t ucMACAddress[ipMAC_ADDRESS_LENGTH_BYTES] );
+void vApplicationIPNetworkEventHook( eIPCallbackEvent_t eNetworkEvent );
+void vApplicationPingReplyHook( ePingReplyStatus_t eStatus, uint16_t usIdentifier );
+uint32_t FreeRTOS_GetIPAddress( void );
+void FreeRTOS_SetIPAddress( uint32_t ulIPAddress );
+void FreeRTOS_SetNetmask( uint32_t ulNetmask );
+void FreeRTOS_SetGatewayAddress( uint32_t ulGatewayAddress );
+uint32_t FreeRTOS_GetGatewayAddress( void );
+uint32_t FreeRTOS_GetDNSServerAddress( void );
+uint32_t FreeRTOS_GetNetmask( void );
+void FreeRTOS_OutputARPRequest( uint32_t ulIPAddress );
+BaseType_t FreeRTOS_IsNetworkUp( void );
+
+#if( ipconfigCHECK_IP_QUEUE_SPACE != 0 )
+       UBaseType_t uxGetMinimumIPQueueSpace( void );
+#endif
+
+/*
+ * Defined in FreeRTOS_Sockets.c
+ * //_RB_ Don't think this comment is correct.  If this is for internal use only it should appear after all the public API functions and not start with FreeRTOS_.
+ * Socket has had activity, reset the timer so it will not be closed
+ * because of inactivity
+ */
+const char *FreeRTOS_GetTCPStateName( UBaseType_t ulState);
+
+/* _HT_ Temporary: show all valid ARP entries
+ */
+void FreeRTOS_PrintARPCache( void );
+void FreeRTOS_ClearARP( void );
+
+#if( ipconfigDHCP_REGISTER_HOSTNAME == 1 )
+
+       /* DHCP has an option for clients to register their hostname.  It doesn't
+       have much use, except that a device can be found in a router along with its
+       name. If this option is used the callback below must be provided by the
+       application     writer to return a const string, denoting the device's name. */
+       const char *pcApplicationHostnameHook( void );
+
+#endif /* ipconfigDHCP_REGISTER_HOSTNAME */
+
+
+/* This xApplicationGetRandomNumber() will set *pulNumber to a random number,
+and return pdTRUE. When the random number generator is broken, it shall return
+pdFALSE.
+The function is defined in 'iot_secure_sockets.c'.
+If that module is not included in the project, the application must provide an
+implementation of it.
+The macro's ipconfigRAND32() and configRAND32() are not in use anymore. */
+BaseType_t xApplicationGetRandomNumber( uint32_t *pulNumber );
+
+/* For backward compatibility define old structure names to the newer equivalent
+structure name. */
+#ifndef ipconfigENABLE_BACKWARD_COMPATIBILITY
+       #define ipconfigENABLE_BACKWARD_COMPATIBILITY   1
+#endif
+
+#if( ipconfigENABLE_BACKWARD_COMPATIBILITY == 1 )
+       #define xIPStackEvent_t                         IPStackEvent_t
+       #define xNetworkBufferDescriptor_t      NetworkBufferDescriptor_t
+       #define xMACAddress_t                           MACAddress_t
+       #define xWinProperties_t                        WinProperties_t
+       #define xSocket_t                                       Socket_t
+       #define xSocketSet_t                            SocketSet_t
+       #define ipSIZE_OF_IP_HEADER                     ipSIZE_OF_IPv4_HEADER
+
+       /* Since August 2016, the public types and fields below have changed name:
+       abbreviations TCP/UDP are now written in capitals, and type names now end with "_t". */
+       #define FOnConnected                            FOnConnected_t
+       #define FOnTcpReceive                           FOnTCPReceive_t
+       #define FOnTcpSent                                      FOnTCPSent_t
+       #define FOnUdpReceive                           FOnUDPReceive_t
+       #define FOnUdpSent                                      FOnUDPSent_t
+
+       #define pOnTcpConnected                         pxOnTCPConnected
+       #define pOnTcpReceive                           pxOnTCPReceive
+       #define pOnTcpSent                                      pxOnTCPSent
+       #define pOnUdpReceive                           pxOnUDPReceive
+       #define pOnUdpSent                                      pxOnUDPSent
+
+       #define FOnUdpSent                                      FOnUDPSent_t
+       #define FOnTcpSent                                      FOnTCPSent_t
+#endif /* ipconfigENABLE_BACKWARD_COMPATIBILITY */
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* FREERTOS_IP_H */
+
+
+
+
+
+
+
+
+
+
+
+
+
index 8604abed05a7030da1f59af9c5f9d8b9444337f1..0d8c0387210aab5920e844f08aae3d365de89bdd 100644 (file)
-/*\r
- * FreeRTOS+TCP V2.2.0\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://aws.amazon.com/freertos\r
- * http://www.FreeRTOS.org\r
- */\r
-\r
-#ifndef FREERTOS_IP_PRIVATE_H\r
-#define FREERTOS_IP_PRIVATE_H\r
-\r
-#ifdef __cplusplus\r
-extern "C" {\r
-#endif\r
-\r
-/* Application level configuration options. */\r
-#include "FreeRTOSIPConfig.h"\r
-#include "FreeRTOSIPConfigDefaults.h"\r
-#include "FreeRTOS_Sockets.h"\r
-#include "IPTraceMacroDefaults.h"\r
-#include "FreeRTOS_Stream_Buffer.h"\r
-#if( ipconfigUSE_TCP == 1 )\r
-       #include "FreeRTOS_TCP_WIN.h"\r
-       #include "FreeRTOS_TCP_IP.h"\r
-#endif\r
-\r
-#include "event_groups.h"\r
-\r
-typedef struct xNetworkAddressingParameters\r
-{\r
-       uint32_t ulDefaultIPAddress;\r
-       uint32_t ulNetMask;\r
-       uint32_t ulGatewayAddress;\r
-       uint32_t ulDNSServerAddress;\r
-       uint32_t ulBroadcastAddress;\r
-} NetworkAddressingParameters_t;\r
-\r
-extern BaseType_t xTCPWindowLoggingLevel;\r
-\r
-/*-----------------------------------------------------------*/\r
-/* Protocol headers.                                         */\r
-/*-----------------------------------------------------------*/\r
-\r
-#include "pack_struct_start.h"\r
-struct xETH_HEADER\r
-{\r
-       MACAddress_t xDestinationAddress; /*  0 + 6 = 6  */\r
-       MACAddress_t xSourceAddress;      /*  6 + 6 = 12 */\r
-       uint16_t usFrameType;              /* 12 + 2 = 14 */\r
-}\r
-#include "pack_struct_end.h"\r
-typedef struct xETH_HEADER EthernetHeader_t;\r
-\r
-#include "pack_struct_start.h"\r
-struct xARP_HEADER\r
-{\r
-       uint16_t usHardwareType;                                /*  0 +  2 =  2 */\r
-       uint16_t usProtocolType;                                /*  2 +  2 =  4 */\r
-       uint8_t ucHardwareAddressLength;                /*  4 +  1 =  5 */\r
-       uint8_t ucProtocolAddressLength;                /*  5 +  1 =  6 */\r
-       uint16_t usOperation;                                   /*  6 +  2 =  8 */\r
-       MACAddress_t xSenderHardwareAddress;    /*  8 +  6 = 14 */\r
-       uint8_t ucSenderProtocolAddress[ 4 ];   /* 14 +  4 = 18  */\r
-       MACAddress_t xTargetHardwareAddress;    /* 18 +  6 = 24  */\r
-       uint32_t ulTargetProtocolAddress;               /* 24 +  4 = 28  */\r
-}\r
-#include "pack_struct_end.h"\r
-typedef struct xARP_HEADER ARPHeader_t;\r
-\r
-#include "pack_struct_start.h"\r
-struct xIP_HEADER\r
-{\r
-       uint8_t ucVersionHeaderLength;        /*  0 + 1 =  1 */\r
-       uint8_t ucDifferentiatedServicesCode; /*  1 + 1 =  2 */\r
-       uint16_t usLength;                    /*  2 + 2 =  4 */\r
-       uint16_t usIdentification;            /*  4 + 2 =  6 */\r
-       uint16_t usFragmentOffset;            /*  6 + 2 =  8 */\r
-       uint8_t ucTimeToLive;                 /*  8 + 1 =  9 */\r
-       uint8_t ucProtocol;                   /*  9 + 1 = 10 */\r
-       uint16_t usHeaderChecksum;            /* 10 + 2 = 12 */\r
-       uint32_t ulSourceIPAddress;           /* 12 + 4 = 16 */\r
-       uint32_t ulDestinationIPAddress;      /* 16 + 4 = 20 */\r
-}\r
-#include "pack_struct_end.h"\r
-typedef struct xIP_HEADER IPHeader_t;\r
-\r
-#include "pack_struct_start.h"\r
-struct xIGMP_HEADER\r
-{\r
-       uint8_t ucVersionType;     /* 0 + 1 = 1 */\r
-       uint8_t ucMaxResponseTime; /* 1 + 1 = 2 */\r
-       uint16_t usChecksum;       /* 2 + 2 = 4 */\r
-       uint32_t usGroupAddress;   /* 4 + 4 = 8 */\r
-}\r
-#include "pack_struct_end.h"\r
-typedef struct xIGMP_HEADER IGMPHeader_t;\r
-\r
-#include "pack_struct_start.h"\r
-struct xICMP_HEADER\r
-{\r
-       uint8_t ucTypeOfMessage;   /* 0 + 1 = 1 */\r
-       uint8_t ucTypeOfService;   /* 1 + 1 = 2 */\r
-       uint16_t usChecksum;       /* 2 + 2 = 4 */\r
-       uint16_t usIdentifier;     /* 4 + 2 = 6 */\r
-       uint16_t usSequenceNumber; /* 6 + 2 = 8 */\r
-}\r
-#include "pack_struct_end.h"\r
-typedef struct xICMP_HEADER ICMPHeader_t;\r
-\r
-#include "pack_struct_start.h"\r
-struct xUDP_HEADER\r
-{\r
-       uint16_t usSourcePort;      /* 0 + 2 = 2 */\r
-       uint16_t usDestinationPort; /* 2 + 2 = 4 */\r
-       uint16_t usLength;          /* 4 + 2 = 6 */\r
-       uint16_t usChecksum;        /* 6 + 2 = 8 */\r
-}\r
-#include "pack_struct_end.h"\r
-typedef struct xUDP_HEADER UDPHeader_t;\r
-\r
-#include "pack_struct_start.h"\r
-struct xTCP_HEADER\r
-{\r
-       uint16_t usSourcePort;          /* +  2 =  2 */\r
-       uint16_t usDestinationPort;     /* +  2 =  4 */\r
-       uint32_t ulSequenceNumber;      /* +  4 =  8 */\r
-       uint32_t ulAckNr;               /* +  4 = 12 */\r
-       uint8_t  ucTCPOffset;           /* +  1 = 13 */\r
-       uint8_t  ucTCPFlags;            /* +  1 = 14 */\r
-       uint16_t usWindow;                      /* +  2 = 15 */\r
-       uint16_t usChecksum;            /* +  2 = 18 */\r
-       uint16_t usUrgent;                      /* +  2 = 20 */\r
-#if ipconfigUSE_TCP == 1\r
-       /* the option data is not a part of the TCP header */\r
-       uint8_t  ucOptdata[ipSIZE_TCP_OPTIONS];         /* + 12 = 32 */\r
-#endif\r
-}\r
-#include "pack_struct_end.h"\r
-typedef struct xTCP_HEADER TCPHeader_t;\r
-\r
-#include "pack_struct_start.h"\r
-struct xPSEUDO_HEADER\r
-{\r
-       uint32_t ulSourceAddress;\r
-       uint32_t ulDestinationAddress;\r
-       uint8_t ucZeros;\r
-       uint8_t ucProtocol;\r
-       uint16_t usUDPLength;\r
-}\r
-#include "pack_struct_end.h"\r
-typedef struct xPSEUDO_HEADER PseudoHeader_t;\r
-\r
-/*-----------------------------------------------------------*/\r
-/* Nested protocol packets.                                  */\r
-/*-----------------------------------------------------------*/\r
-\r
-#include "pack_struct_start.h"\r
-struct xARP_PACKET\r
-{\r
-       EthernetHeader_t xEthernetHeader;       /*  0 + 14 = 14 */\r
-       ARPHeader_t xARPHeader;                 /* 14 + 28 = 42 */\r
-}\r
-#include "pack_struct_end.h"\r
-typedef struct xARP_PACKET ARPPacket_t;\r
-\r
-#include "pack_struct_start.h"\r
-struct xIP_PACKET\r
-{\r
-       EthernetHeader_t xEthernetHeader;\r
-       IPHeader_t xIPHeader;\r
-}\r
-#include "pack_struct_end.h"\r
-typedef struct xIP_PACKET IPPacket_t;\r
-\r
-#include "pack_struct_start.h"\r
-struct xICMP_PACKET\r
-{\r
-       EthernetHeader_t xEthernetHeader;\r
-       IPHeader_t xIPHeader;\r
-       ICMPHeader_t xICMPHeader;\r
-}\r
-#include "pack_struct_end.h"\r
-typedef struct xICMP_PACKET ICMPPacket_t;\r
-\r
-#include "pack_struct_start.h"\r
-struct xUDP_PACKET\r
-{\r
-       EthernetHeader_t xEthernetHeader; /*  0 + 14 = 14 */\r
-       IPHeader_t xIPHeader;             /* 14 + 20 = 34 */\r
-       UDPHeader_t xUDPHeader;           /* 34 +  8 = 42 */\r
-}\r
-#include "pack_struct_end.h"\r
-typedef struct xUDP_PACKET UDPPacket_t;\r
-\r
-#include "pack_struct_start.h"\r
-struct xTCP_PACKET\r
-{\r
-       EthernetHeader_t xEthernetHeader; /*  0 + 14 = 14 */\r
-       IPHeader_t xIPHeader;             /* 14 + 20 = 34 */\r
-       TCPHeader_t xTCPHeader;           /* 34 + 32 = 66 */\r
-}\r
-#include "pack_struct_end.h"\r
-typedef struct xTCP_PACKET TCPPacket_t;\r
-\r
-typedef union XPROT_PACKET\r
-{\r
-       ARPPacket_t xARPPacket;\r
-       TCPPacket_t xTCPPacket;\r
-       UDPPacket_t xUDPPacket;\r
-       ICMPPacket_t xICMPPacket;\r
-} ProtocolPacket_t;\r
-\r
-\r
-/* The maximum UDP payload length. */\r
-#define ipMAX_UDP_PAYLOAD_LENGTH ( ( ipconfigNETWORK_MTU - ipSIZE_OF_IPv4_HEADER ) - ipSIZE_OF_UDP_HEADER )\r
-\r
-typedef enum\r
-{\r
-       eReleaseBuffer = 0,             /* Processing the frame did not find anything to do - just release the buffer. */\r
-       eProcessBuffer,                 /* An Ethernet frame has a valid address - continue process its contents. */\r
-       eReturnEthernetFrame,   /* The Ethernet frame contains an ARP or ICMP packet that can be returned to its source. */\r
-       eFrameConsumed                  /* Processing the Ethernet packet contents resulted in the payload being sent to the stack. */\r
-} eFrameProcessingResult_t;\r
-\r
-typedef enum\r
-{\r
-       eNoEvent = -1,\r
-       eNetworkDownEvent,              /* 0: The network interface has been lost and/or needs [re]connecting. */\r
-       eNetworkRxEvent,                /* 1: The network interface has queued a received Ethernet frame. */\r
-       eNetworkTxEvent,                /* 2: Let the IP-task send a network packet. */\r
-       eARPTimerEvent,                 /* 3: The ARP timer expired. */\r
-       eStackTxEvent,                  /* 4: The software stack has queued a packet to transmit. */\r
-       eDHCPEvent,                             /* 5: Process the DHCP state machine. */\r
-       eTCPTimerEvent,                 /* 6: See if any TCP socket needs attention. */\r
-       eTCPAcceptEvent,                /* 7: Client API FreeRTOS_accept() waiting for client connections. */\r
-       eTCPNetStat,                    /* 8: IP-task is asked to produce a netstat listing. */\r
-       eSocketBindEvent,               /* 9: Send a message to the IP-task to bind a socket to a port. */\r
-       eSocketCloseEvent,              /*10: Send a message to the IP-task to close a socket. */\r
-       eSocketSelectEvent,             /*11: Send a message to the IP-task for select(). */\r
-       eSocketSignalEvent,             /*12: A socket must be signalled. */\r
-} eIPEvent_t;\r
-\r
-typedef struct IP_TASK_COMMANDS\r
-{\r
-       eIPEvent_t eEventType;\r
-       void *pvData;\r
-} IPStackEvent_t;\r
-\r
-#define ipBROADCAST_IP_ADDRESS 0xffffffffUL\r
-\r
-/* Offset into the Ethernet frame that is used to temporarily store information\r
-on the fragmentation status of the packet being sent.  The value is important,\r
-as it is past the location into which the destination address will get placed. */\r
-#define ipFRAGMENTATION_PARAMETERS_OFFSET              ( 6 )\r
-#define ipSOCKET_OPTIONS_OFFSET                                        ( 6 )\r
-\r
-/* Only used when outgoing fragmentation is being used (FreeRTOSIPConfig.h\r
-setting. */\r
-#define ipGET_UDP_PAYLOAD_OFFSET_FOR_FRAGMENT( usFragmentOffset ) ( ( ( usFragmentOffset ) == 0 ) ? ipUDP_PAYLOAD_OFFSET_IPv4 : ipIP_PAYLOAD_OFFSET )\r
-\r
-/* The offset into a UDP packet at which the UDP data (payload) starts. */\r
-#define ipUDP_PAYLOAD_OFFSET_IPv4      ( sizeof( UDPPacket_t ) )\r
-\r
-/* The offset into an IP packet into which the IP data (payload) starts. */\r
-#define ipIP_PAYLOAD_OFFSET            ( sizeof( IPPacket_t ) )\r
-\r
-#include "pack_struct_start.h"\r
-struct xUDP_IP_FRAGMENT_PARAMETERS\r
-{\r
-       uint8_t ucSocketOptions;\r
-       uint8_t ucPadFor16BitAlignment;\r
-       uint16_t usFragmentedPacketOffset;\r
-       uint16_t usFragmentLength;\r
-       uint16_t usPayloadChecksum;\r
-}\r
-#include "pack_struct_end.h"\r
-typedef struct xUDP_IP_FRAGMENT_PARAMETERS IPFragmentParameters_t;\r
-\r
-#if( ipconfigBYTE_ORDER == pdFREERTOS_LITTLE_ENDIAN )\r
-\r
-       /* Ethernet frame types. */\r
-       #define ipARP_FRAME_TYPE        ( 0x0608U )\r
-       #define ipIPv4_FRAME_TYPE       ( 0x0008U )\r
-\r
-       /* ARP related definitions. */\r
-       #define ipARP_PROTOCOL_TYPE                             ( 0x0008U )\r
-       #define ipARP_HARDWARE_TYPE_ETHERNET    ( 0x0100U )\r
-       #define ipARP_REQUEST                                   ( 0x0100U )\r
-       #define ipARP_REPLY                                             ( 0x0200U )\r
-\r
-#else\r
-\r
-       /* Ethernet frame types. */\r
-       #define ipARP_FRAME_TYPE        ( 0x0806U )\r
-       #define ipIPv4_FRAME_TYPE       ( 0x0800U )\r
-\r
-       /* ARP related definitions. */\r
-       #define ipARP_PROTOCOL_TYPE ( 0x0800U )\r
-       #define ipARP_HARDWARE_TYPE_ETHERNET ( 0x0001U )\r
-       #define ipARP_REQUEST ( 0x0001 )\r
-       #define ipARP_REPLY ( 0x0002 )\r
-\r
-#endif /* ipconfigBYTE_ORDER == pdFREERTOS_LITTLE_ENDIAN */\r
-\r
-\r
-/* For convenience, a MAC address of all zeros and another of all 0xffs are\r
-defined const for quick reference. */\r
-extern const MACAddress_t xBroadcastMACAddress; /* all 0xff's */\r
-extern uint16_t usPacketIdentifier;\r
-\r
-/* Define a default UDP packet header (declared in FreeRTOS_UDP_IP.c) */\r
-typedef union xUDPPacketHeader\r
-{\r
-       uint8_t ucBytes[24];\r
-       uint32_t ulWords[6];\r
-} UDPPacketHeader_t;\r
-extern UDPPacketHeader_t xDefaultPartUDPPacketHeader;\r
-\r
-/* Structure that stores the netmask, gateway address and DNS server addresses. */\r
-extern NetworkAddressingParameters_t xNetworkAddressing;\r
-\r
-/* Structure that stores the defaults for netmask, gateway address and DNS.\r
-These values will be copied to 'xNetworkAddressing' in case DHCP is not used,\r
-and also in case DHCP does not lead to a confirmed request. */\r
-extern NetworkAddressingParameters_t xDefaultAddressing;\r
-\r
-/* True when BufferAllocation_1.c was included, false for BufferAllocation_2.c */\r
-extern const BaseType_t xBufferAllocFixedSize;\r
-\r
-/* Defined in FreeRTOS_Sockets.c */\r
-#if ( ipconfigUSE_TCP == 1 )\r
-       extern List_t xBoundTCPSocketsList;\r
-#endif\r
-\r
-/* The local IP address is accessed from within xDefaultPartUDPPacketHeader,\r
-rather than duplicated in its own variable. */\r
-#define ipLOCAL_IP_ADDRESS_POINTER ( ( uint32_t * ) &( xDefaultPartUDPPacketHeader.ulWords[ 20u / sizeof(uint32_t) ] ) )\r
-\r
-/* The local MAC address is accessed from within xDefaultPartUDPPacketHeader,\r
-rather than duplicated in its own variable. */\r
-#define ipLOCAL_MAC_ADDRESS ( &xDefaultPartUDPPacketHeader.ucBytes[0] )\r
-\r
-/* ICMP packets are sent using the same function as UDP packets.  The port\r
-number is used to distinguish between the two, as 0 is an invalid UDP port. */\r
-#define ipPACKET_CONTAINS_ICMP_DATA                                    ( 0 )\r
-\r
-/* For now, the lower 8 bits in 'xEventBits' will be reserved for the above\r
-socket events. */\r
-#define SOCKET_EVENT_BIT_COUNT   8\r
-\r
-#define vSetField16( pxBase, xType, xField, usValue ) \\r
-{ \\r
-       ( ( uint8_t* )( pxBase ) ) [ offsetof( xType, xField ) + 0 ] = ( uint8_t ) ( ( usValue ) >> 8 ); \\r
-       ( ( uint8_t* )( pxBase ) ) [ offsetof( xType, xField ) + 1 ] = ( uint8_t ) ( ( usValue ) & 0xff ); \\r
-}\r
-\r
-#define vSetField32( pxBase, xType, xField, ulValue ) \\r
-{ \\r
-       ( (uint8_t*)( pxBase ) ) [ offsetof( xType, xField ) + 0 ] = ( uint8_t )   ( ( ulValue ) >> 24 ); \\r
-       ( (uint8_t*)( pxBase ) ) [ offsetof( xType, xField ) + 1 ] = ( uint8_t ) ( ( ( ulValue ) >> 16 ) & 0xff ); \\r
-       ( (uint8_t*)( pxBase ) ) [ offsetof( xType, xField ) + 2 ] = ( uint8_t ) ( ( ( ulValue ) >> 8 ) & 0xff ); \\r
-       ( (uint8_t*)( pxBase ) ) [ offsetof( xType, xField ) + 3 ] = ( uint8_t )   ( ( ulValue ) & 0xff ); \\r
-}\r
-\r
-#define vFlip_16( left, right ) \\r
-       do { \\r
-               uint16_t tmp = (left); \\r
-               (left) = (right); \\r
-               (right) = tmp; \\r
-       } while (0)\r
-\r
-#define vFlip_32( left, right ) \\r
-       do { \\r
-               uint32_t tmp = (left); \\r
-               (left) = (right); \\r
-               (right) = tmp; \\r
-       } while (0)\r
-\r
-#ifndef ARRAY_SIZE\r
-       #define ARRAY_SIZE(x)   (BaseType_t)(sizeof(x)/sizeof(x)[0])\r
-#endif\r
-\r
-/*\r
- * A version of FreeRTOS_GetReleaseNetworkBuffer() that can be called from an\r
- * interrupt.  If a non zero value is returned, then the calling ISR should\r
- * perform a context switch before exiting the ISR.\r
- */\r
-BaseType_t FreeRTOS_ReleaseFreeNetworkBufferFromISR( void );\r
-\r
-/*\r
- * Create a message that contains a command to initialise the network interface.\r
- * This is used during initialisation, and at any time the network interface\r
- * goes down thereafter.  The network interface hardware driver is responsible\r
- * for sending the message that contains the network interface down command/\r
- * event.\r
- *\r
- * Only use the FreeRTOS_NetworkDownFromISR() version if the function is to be\r
- * called from an interrupt service routine.  If FreeRTOS_NetworkDownFromISR()\r
- * returns a non-zero value then a context switch should be performed ebfore\r
- * the interrupt is exited.\r
- */\r
-void FreeRTOS_NetworkDown( void );\r
-BaseType_t FreeRTOS_NetworkDownFromISR( void );\r
-\r
-/*\r
- * Processes incoming ARP packets.\r
- */\r
-eFrameProcessingResult_t eARPProcessPacket( ARPPacket_t * const pxARPFrame );\r
-\r
-/*\r
- * Inspect an Ethernet frame to see if it contains data that the stack needs to\r
- * process.  eProcessBuffer is returned if the frame should be processed by the\r
- * stack.  eReleaseBuffer is returned if the frame should be discarded.\r
- */\r
-eFrameProcessingResult_t eConsiderFrameForProcessing( const uint8_t * const pucEthernetBuffer );\r
-\r
-/*\r
- * Return the checksum generated over xDataLengthBytes from pucNextData.\r
- */\r
-uint16_t usGenerateChecksum( uint32_t ulSum, const uint8_t * pucNextData, size_t uxDataLengthBytes );\r
-\r
-/* Socket related private functions. */\r
-\r
-/* \r
- * The caller must ensure that pxNetworkBuffer->xDataLength is the UDP packet \r
- * payload size (excluding packet headers) and that the packet in pucEthernetBuffer \r
- * is at least the size of UDPPacket_t. \r
- */\r
-BaseType_t xProcessReceivedUDPPacket( NetworkBufferDescriptor_t *pxNetworkBuffer, uint16_t usPort );\r
-\r
-/*\r
- * Initialize the socket list data structures for TCP and UDP. \r
- */\r
-BaseType_t vNetworkSocketsInit( void );\r
-\r
-/*\r
- * Returns pdTRUE if the IP task has been created and is initialised.  Otherwise\r
- * returns pdFALSE.\r
- */\r
-BaseType_t xIPIsNetworkTaskReady( void );\r
-\r
-#if( ipconfigSOCKET_HAS_USER_WAKE_CALLBACK == 1 )\r
-       struct xSOCKET;\r
-       typedef void (*SocketWakeupCallback_t)( struct xSOCKET * pxSocket );\r
-#endif\r
-\r
-#if( ipconfigUSE_TCP == 1 )\r
-\r
-       /*\r
-        * Actually a user thing, but because xBoundTCPSocketsList, let it do by the\r
-        * IP-task\r
-        */\r
-       void vTCPNetStat( void );\r
-\r
-       /*\r
-        * At least one socket needs to check for timeouts\r
-        */\r
-       TickType_t xTCPTimerCheck( BaseType_t xWillSleep );\r
-\r
-       /* Every TCP socket has a buffer space just big enough to store\r
-       the last TCP header received.\r
-       As a reference of this field may be passed to DMA, force the\r
-       alignment to 8 bytes. */\r
-       typedef union\r
-       {\r
-               struct\r
-               {\r
-                       /* Increase the alignment of this union by adding a 64-bit variable. */\r
-                       uint64_t ullAlignmentWord;\r
-               } a;\r
-               struct\r
-               {\r
-                       /* The next field only serves to give 'ucLastPacket' a correct\r
-                       alignment of 8 + 2.  See comments in FreeRTOS_IP.h */\r
-                       uint8_t ucFillPacket[ ipconfigPACKET_FILLER_SIZE ];\r
-                       uint8_t ucLastPacket[ sizeof( TCPPacket_t ) ];\r
-               } u;\r
-       } LastTCPPacket_t;\r
-\r
-       /*\r
-        * Note that the values of all short and long integers in these structs\r
-        * are being stored in the native-endian way\r
-        * Translation should take place when accessing any structure which defines\r
-        * network packets, such as IPHeader_t and TCPHeader_t\r
-        */\r
-       typedef struct TCPSOCKET\r
-       {\r
-               uint32_t ulRemoteIP;            /* IP address of remote machine */\r
-               uint16_t usRemotePort;          /* Port on remote machine */\r
-               struct {\r
-                       /* Most compilers do like bit-flags */\r
-                       uint32_t\r
-                               bMssChange : 1,         /* This socket has seen a change in MSS */\r
-                               bPassAccept : 1,        /* when true, this socket may be returned in a call to accept() */\r
-                               bPassQueued : 1,        /* when true, this socket is an orphan until it gets connected\r
-                                                                        * Why an orphan? Because it may not be returned in a accept() call until it\r
-                                                                        * gets the state eESTABLISHED */\r
-                               bReuseSocket : 1,       /* When a listening socket gets a connection, do not create a new instance but keep on using it */\r
-                               bCloseAfterSend : 1,/* As soon as the last byte has been transmitted, finalise the connection\r
-                                                                        * Useful in e.g. FTP connections, where the last data bytes are sent along with the FIN flag */\r
-                               bUserShutdown : 1,      /* User requesting a graceful shutdown */\r
-                               bCloseRequested : 1,/* Request to finalise the connection */\r
-                               bLowWater : 1,          /* high-water level has been reached. Cleared as soon as 'rx-count < lo-water' */\r
-                               bWinChange : 1,         /* The value of bLowWater has changed, must send a window update */\r
-                               bSendKeepAlive : 1,     /* When this flag is true, a TCP keep-alive message must be send */\r
-                               bWaitKeepAlive : 1,     /* When this flag is true, a TCP keep-alive reply is expected */\r
-                               bConnPrepared : 1,      /* Connecting socket: Message has been prepared */\r
-                               #if( ipconfigSUPPORT_SELECT_FUNCTION == 1 )\r
-                                       bConnPassed : 1,        /* Connecting socket: Socket has been passed in a successful select()  */\r
-                               #endif /* ipconfigSUPPORT_SELECT_FUNCTION */\r
-                               bFinAccepted : 1,       /* This socket has received (or sent) a FIN and accepted it */\r
-                               bFinSent : 1,           /* We've sent out a FIN */\r
-                               bFinRecv : 1,           /* We've received a FIN from our peer */\r
-                               bFinAcked : 1,          /* Our FIN packet has been acked */\r
-                               bFinLast : 1,           /* The last ACK (after FIN and FIN+ACK) has been sent or will be sent by the peer */\r
-                               bRxStopped : 1,         /* Application asked to temporarily stop reception */\r
-                               bMallocError : 1,       /* There was an error allocating a stream */\r
-                               bWinScaling : 1;        /* A TCP-Window Scaling option was offered and accepted in the SYN phase. */\r
-               } bits;\r
-               uint32_t ulHighestRxAllowed;\r
-                                                               /* The highest sequence number that we can receive at any moment */\r
-               uint16_t usTimeout;             /* Time (in ticks) after which this socket needs attention */\r
-               uint16_t usCurMSS;              /* Current Maximum Segment Size */\r
-               uint16_t usInitMSS;             /* Initial maximum segment Size */\r
-               uint16_t usChildCount;  /* In case of a listening socket: number of connections on this port number */\r
-               uint16_t usBacklog;             /* In case of a listening socket: maximum number of concurrent connections on this port number */\r
-               uint8_t ucRepCount;             /* Send repeat count, for retransmissions\r
-                                                                * This counter is separate from the xmitCount in the\r
-                                                                * TCP win segments */\r
-               uint8_t ucTCPState;             /* TCP state: see eTCP_STATE */\r
-               struct xSOCKET *pxPeerSocket;   /* for server socket: child, for child socket: parent */\r
-               #if( ipconfigTCP_KEEP_ALIVE == 1 )\r
-                       uint8_t ucKeepRepCount;\r
-                       TickType_t xLastAliveTime;\r
-               #endif /* ipconfigTCP_KEEP_ALIVE */\r
-               #if( ipconfigTCP_HANG_PROTECTION == 1 )\r
-                       TickType_t xLastActTime;\r
-               #endif /* ipconfigTCP_HANG_PROTECTION */\r
-               size_t uxLittleSpace;\r
-               size_t uxEnoughSpace;\r
-               size_t uxRxStreamSize;\r
-               size_t uxTxStreamSize;\r
-               StreamBuffer_t *rxStream;\r
-               StreamBuffer_t *txStream;\r
-               #if( ipconfigUSE_TCP_WIN == 1 )\r
-                       NetworkBufferDescriptor_t *pxAckMessage;\r
-               #endif /* ipconfigUSE_TCP_WIN */\r
-               /* Buffer space to store the last TCP header received. */\r
-               LastTCPPacket_t xPacket;\r
-               uint8_t tcpflags;               /* TCP flags */\r
-               #if( ipconfigUSE_TCP_WIN != 0 )\r
-                       uint8_t ucMyWinScaleFactor;\r
-                       uint8_t ucPeerWinScaleFactor;\r
-               #endif\r
-               #if( ipconfigUSE_CALLBACKS == 1 )\r
-                       FOnTCPReceive_t pxHandleReceive;        /*\r
-                                                                                                * In case of a TCP socket:\r
-                                                                                                * typedef void (* FOnTCPReceive_t) (Socket_t xSocket, void *pData, size_t xLength );\r
-                                                                                                */\r
-                       FOnTCPSent_t pxHandleSent;\r
-                       FOnConnected_t pxHandleConnected;       /* Actually type: typedef void (* FOnConnected_t) (Socket_t xSocket, BaseType_t ulConnected ); */\r
-               #endif /* ipconfigUSE_CALLBACKS */\r
-               uint32_t ulWindowSize;          /* Current Window size advertised by peer */\r
-               size_t uxRxWinSize;     /* Fixed value: size of the TCP reception window */\r
-               size_t uxTxWinSize;     /* Fixed value: size of the TCP transmit window */\r
-\r
-               TCPWindow_t xTCPWindow;\r
-       } IPTCPSocket_t;\r
-\r
-#endif /* ipconfigUSE_TCP */\r
-\r
-typedef struct UDPSOCKET\r
-{\r
-       List_t xWaitingPacketsList;     /* Incoming packets */\r
-       #if( ipconfigUDP_MAX_RX_PACKETS > 0 )\r
-               UBaseType_t uxMaxPackets; /* Protection: limits the number of packets buffered per socket */\r
-       #endif /* ipconfigUDP_MAX_RX_PACKETS */\r
-       #if( ipconfigUSE_CALLBACKS == 1 )\r
-               FOnUDPReceive_t pxHandleReceive;        /*\r
-                                                                                        * In case of a UDP socket:\r
-                                                                                        * typedef void (* FOnUDPReceive_t) (Socket_t xSocket, void *pData, size_t xLength, struct freertos_sockaddr *pxAddr );\r
-                                                                                        */\r
-               FOnUDPSent_t pxHandleSent;\r
-       #endif /* ipconfigUSE_CALLBACKS */\r
-} IPUDPSocket_t;\r
-\r
-typedef enum eSOCKET_EVENT {\r
-       eSOCKET_RECEIVE = 0x0001,\r
-       eSOCKET_SEND    = 0x0002,\r
-       eSOCKET_ACCEPT  = 0x0004,\r
-       eSOCKET_CONNECT = 0x0008,\r
-       eSOCKET_BOUND   = 0x0010,\r
-       eSOCKET_CLOSED  = 0x0020,\r
-       eSOCKET_INTR    = 0x0040,\r
-       eSOCKET_ALL             = 0x007F,\r
-} eSocketEvent_t;\r
-\r
-typedef struct xSOCKET\r
-{\r
-       EventBits_t xEventBits;\r
-       EventGroupHandle_t xEventGroup;\r
-\r
-       ListItem_t xBoundSocketListItem; /* Used to reference the socket from a bound sockets list. */\r
-       TickType_t xReceiveBlockTime; /* if recv[to] is called while no data is available, wait this amount of time. Unit in clock-ticks */\r
-       TickType_t xSendBlockTime; /* if send[to] is called while there is not enough space to send, wait this amount of time. Unit in clock-ticks */\r
-\r
-       uint16_t usLocalPort;           /* Local port on this machine */\r
-       uint8_t ucSocketOptions;\r
-       uint8_t ucProtocol; /* choice of FREERTOS_IPPROTO_UDP/TCP */\r
-       #if( ipconfigSOCKET_HAS_USER_SEMAPHORE == 1 )\r
-               SemaphoreHandle_t pxUserSemaphore;\r
-       #endif /* ipconfigSOCKET_HAS_USER_SEMAPHORE */\r
-       #if( ipconfigSOCKET_HAS_USER_WAKE_CALLBACK == 1 )\r
-               SocketWakeupCallback_t pxUserWakeCallback;\r
-       #endif /* ipconfigSOCKET_HAS_USER_WAKE_CALLBACK */\r
-\r
-       #if( ipconfigSUPPORT_SELECT_FUNCTION == 1 )\r
-               struct xSOCKET_SET *pxSocketSet;\r
-               /* User may indicate which bits are interesting for this socket. */\r
-               EventBits_t xSelectBits;\r
-               /* These bits indicate the events which have actually occurred.\r
-               They are maintained by the IP-task */\r
-               EventBits_t xSocketBits;\r
-       #endif /* ipconfigSUPPORT_SELECT_FUNCTION */\r
-       /* TCP/UDP specific fields: */\r
-       /* Before accessing any member of this structure, it should be confirmed */\r
-       /* that the protocol corresponds with the type of structure */\r
-\r
-       union\r
-       {\r
-               IPUDPSocket_t xUDP;\r
-               #if( ipconfigUSE_TCP == 1 )\r
-                       IPTCPSocket_t xTCP;\r
-                       /* Make sure that xTCP is 8-bytes aligned by\r
-                       declaring a 64-bit variable in the same union */\r
-                       uint64_t ullTCPAlignment;\r
-               #endif /* ipconfigUSE_TCP */\r
-       } u;\r
-} FreeRTOS_Socket_t;\r
-\r
-#if( ipconfigUSE_TCP == 1 )\r
-       /*\r
-        * Lookup a TCP socket, using a multiple matching: both port numbers and\r
-        * return IP address.\r
-        */\r
-       FreeRTOS_Socket_t *pxTCPSocketLookup( uint32_t ulLocalIP, UBaseType_t uxLocalPort, uint32_t ulRemoteIP, UBaseType_t uxRemotePort );\r
-\r
-#endif /* ipconfigUSE_TCP */\r
-\r
-/*\r
- * Look up a local socket by finding a match with the local port.\r
- */\r
-FreeRTOS_Socket_t *pxUDPSocketLookup( UBaseType_t uxLocalPort );\r
-\r
-/*\r
- * Called when the application has generated a UDP packet to send.\r
- */\r
-void vProcessGeneratedUDPPacket( NetworkBufferDescriptor_t * const pxNetworkBuffer );\r
-\r
-/*\r
- * Calculate the upper-layer checksum\r
- * Works both for UDP, ICMP and TCP packages\r
- * bOut = true: checksum will be set in outgoing packets\r
- * bOut = false: checksum will be calculated for incoming packets\r
- *     returning 0xffff means: checksum was correct\r
- */\r
-uint16_t usGenerateProtocolChecksum( const uint8_t * const pucEthernetBuffer, size_t uxBufferLength, BaseType_t xOutgoingPacket );\r
-\r
-/*\r
- * An Ethernet frame has been updated (maybe it was an ARP request or a PING\r
- * request?) and is to be sent back to its source.\r
- */\r
-void vReturnEthernetFrame( NetworkBufferDescriptor_t * pxNetworkBuffer, BaseType_t xReleaseAfterSend );\r
-\r
-/*\r
- * The internal version of bind()\r
- * If 'ulInternal' is true, it is called by the driver\r
- * The TCP driver needs to bind a socket at the moment a listening socket\r
- * creates a new connected socket\r
- */\r
-BaseType_t vSocketBind( FreeRTOS_Socket_t *pxSocket, struct freertos_sockaddr * pxAddress, size_t uxAddressLength, BaseType_t xInternal );\r
-\r
-/*\r
- * Internal function to add streaming data to a TCP socket. If ulIn == true,\r
- * data will be added to the rxStream, otherwise to the tXStream.  Normally data\r
- * will be written with ulOffset == 0, meaning: at the end of the FIFO.  When\r
- * packet come in out-of-order, an offset will be used to put it in front and\r
- * the head will not change yet.\r
- */\r
-int32_t lTCPAddRxdata(FreeRTOS_Socket_t *pxSocket, size_t uxOffset, const uint8_t *pcData, uint32_t ulByteCount);\r
-\r
-/*\r
- * Currently called for any important event.\r
- */\r
-void vSocketWakeUpUser( FreeRTOS_Socket_t *pxSocket );\r
-\r
-/*\r
- * Some helping function, their meaning should be clear\r
- */\r
-static portINLINE uint32_t ulChar2u32 (const uint8_t *apChr);\r
-static portINLINE uint32_t ulChar2u32 (const uint8_t *apChr)\r
-{\r
-       return  ( ( ( uint32_t )apChr[0] ) << 24) |\r
-                       ( ( ( uint32_t )apChr[1] ) << 16) |\r
-                       ( ( ( uint32_t )apChr[2] ) << 8) |\r
-                       ( ( ( uint32_t )apChr[3] ) );\r
-}\r
-\r
-static portINLINE uint16_t usChar2u16 (const uint8_t *apChr);\r
-static portINLINE uint16_t usChar2u16 (const uint8_t *apChr)\r
-{\r
-       return ( uint16_t )\r
-                       ( ( ( ( uint32_t )apChr[0] ) << 8) |\r
-                         ( ( ( uint32_t )apChr[1] ) ) );\r
-}\r
-\r
-/* Check a single socket for retransmissions and timeouts */\r
-BaseType_t xTCPSocketCheck( FreeRTOS_Socket_t *pxSocket );\r
-\r
-BaseType_t xTCPCheckNewClient( FreeRTOS_Socket_t *pxSocket );\r
-\r
-/* Defined in FreeRTOS_Sockets.c\r
- * Close a socket\r
- */\r
-void *vSocketClose( FreeRTOS_Socket_t *pxSocket );\r
-\r
-/*\r
- * Send the event eEvent to the IP task event queue, using a block time of\r
- * zero.  Return pdPASS if the message was sent successfully, otherwise return\r
- * pdFALSE.\r
-*/\r
-BaseType_t xSendEventToIPTask( eIPEvent_t eEvent );\r
-\r
-/*\r
- * The same as above, but a struct as a parameter, containing:\r
- *             eIPEvent_t eEventType;\r
- *             void *pvData;\r
- */\r
-BaseType_t xSendEventStructToIPTask( const IPStackEvent_t *pxEvent, TickType_t xTimeout );\r
-\r
-/*\r
- * Returns a pointer to the original NetworkBuffer from a pointer to a UDP\r
- * payload buffer.\r
- */\r
-NetworkBufferDescriptor_t *pxUDPPayloadBuffer_to_NetworkBuffer( void *pvBuffer );\r
-\r
-#if( ipconfigZERO_COPY_TX_DRIVER != 0 )\r
-       /*\r
-        * For the case where the network driver passes a buffer directly to a DMA\r
-        * descriptor, this function can be used to translate a 'network buffer' to\r
-        * a 'network buffer descriptor'.\r
-        */\r
-       NetworkBufferDescriptor_t *pxPacketBuffer_to_NetworkBuffer( const void *pvBuffer );\r
-#endif\r
-\r
-/*\r
- * Internal: Sets a new state for a TCP socket and performs the necessary\r
- * actions like calling a OnConnected handler to notify the socket owner.\r
- */\r
-#if( ipconfigUSE_TCP == 1 )\r
-       void vTCPStateChange( FreeRTOS_Socket_t *pxSocket, enum eTCP_STATE eTCPState );\r
-#endif /* ipconfigUSE_TCP */\r
-\r
-/*_RB_ Should this be part of the public API? */\r
-void FreeRTOS_netstat( void );\r
-\r
-/* Returns pdTRUE is this function is called from the IP-task */\r
-BaseType_t xIsCallingFromIPTask( void );\r
-\r
-#if( ipconfigSUPPORT_SELECT_FUNCTION == 1 )\r
-\r
-typedef struct xSOCKET_SET\r
-{\r
-       EventGroupHandle_t xSelectGroup;\r
-       BaseType_t bApiCalled;  /* True if the API was calling  the private vSocketSelect */\r
-       FreeRTOS_Socket_t *pxSocket;\r
-} SocketSelect_t;\r
-\r
-extern void vSocketSelect( SocketSelect_t *pxSocketSelect );\r
-\r
-#endif /* ipconfigSUPPORT_SELECT_FUNCTION */\r
-\r
-void vIPSetDHCPTimerEnableState( BaseType_t xEnableState );\r
-void vIPReloadDHCPTimer( uint32_t ulLeaseTime );\r
-#if( ipconfigDNS_USE_CALLBACKS != 0 )\r
-       void vIPReloadDNSTimer( uint32_t ulCheckTime );\r
-       void vIPSetDnsTimerEnableState( BaseType_t xEnableState );\r
-#endif\r
-\r
-/* Send the network-up event and start the ARP timer. */\r
-void vIPNetworkUpCalls( void );\r
-\r
-#ifdef __cplusplus\r
-} /* extern "C" */\r
-#endif\r
-\r
-#endif /* FREERTOS_IP_PRIVATE_H */\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
+/*
+ * FreeRTOS+TCP V2.2.0
+ * 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
+ */
+
+#ifndef FREERTOS_IP_PRIVATE_H
+#define FREERTOS_IP_PRIVATE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Application level configuration options. */
+#include "FreeRTOSIPConfig.h"
+#include "FreeRTOSIPConfigDefaults.h"
+#include "FreeRTOS_Sockets.h"
+#include "IPTraceMacroDefaults.h"
+#include "FreeRTOS_Stream_Buffer.h"
+#if( ipconfigUSE_TCP == 1 )
+       #include "FreeRTOS_TCP_WIN.h"
+       #include "FreeRTOS_TCP_IP.h"
+#endif
+
+#include "event_groups.h"
+
+typedef struct xNetworkAddressingParameters
+{
+       uint32_t ulDefaultIPAddress;
+       uint32_t ulNetMask;
+       uint32_t ulGatewayAddress;
+       uint32_t ulDNSServerAddress;
+       uint32_t ulBroadcastAddress;
+} NetworkAddressingParameters_t;
+
+extern BaseType_t xTCPWindowLoggingLevel;
+
+/*-----------------------------------------------------------*/
+/* Protocol headers.                                         */
+/*-----------------------------------------------------------*/
+
+#include "pack_struct_start.h"
+struct xETH_HEADER
+{
+       MACAddress_t xDestinationAddress; /*  0 + 6 = 6  */
+       MACAddress_t xSourceAddress;      /*  6 + 6 = 12 */
+       uint16_t usFrameType;              /* 12 + 2 = 14 */
+}
+#include "pack_struct_end.h"
+typedef struct xETH_HEADER EthernetHeader_t;
+
+#include "pack_struct_start.h"
+struct xARP_HEADER
+{
+       uint16_t usHardwareType;                                /*  0 +  2 =  2 */
+       uint16_t usProtocolType;                                /*  2 +  2 =  4 */
+       uint8_t ucHardwareAddressLength;                /*  4 +  1 =  5 */
+       uint8_t ucProtocolAddressLength;                /*  5 +  1 =  6 */
+       uint16_t usOperation;                                   /*  6 +  2 =  8 */
+       MACAddress_t xSenderHardwareAddress;    /*  8 +  6 = 14 */
+       uint8_t ucSenderProtocolAddress[ 4 ];   /* 14 +  4 = 18  */
+       MACAddress_t xTargetHardwareAddress;    /* 18 +  6 = 24  */
+       uint32_t ulTargetProtocolAddress;               /* 24 +  4 = 28  */
+}
+#include "pack_struct_end.h"
+typedef struct xARP_HEADER ARPHeader_t;
+
+#include "pack_struct_start.h"
+struct xIP_HEADER
+{
+       uint8_t ucVersionHeaderLength;        /*  0 + 1 =  1 */
+       uint8_t ucDifferentiatedServicesCode; /*  1 + 1 =  2 */
+       uint16_t usLength;                    /*  2 + 2 =  4 */
+       uint16_t usIdentification;            /*  4 + 2 =  6 */
+       uint16_t usFragmentOffset;            /*  6 + 2 =  8 */
+       uint8_t ucTimeToLive;                 /*  8 + 1 =  9 */
+       uint8_t ucProtocol;                   /*  9 + 1 = 10 */
+       uint16_t usHeaderChecksum;            /* 10 + 2 = 12 */
+       uint32_t ulSourceIPAddress;           /* 12 + 4 = 16 */
+       uint32_t ulDestinationIPAddress;      /* 16 + 4 = 20 */
+}
+#include "pack_struct_end.h"
+typedef struct xIP_HEADER IPHeader_t;
+
+#include "pack_struct_start.h"
+struct xIGMP_HEADER
+{
+       uint8_t ucVersionType;     /* 0 + 1 = 1 */
+       uint8_t ucMaxResponseTime; /* 1 + 1 = 2 */
+       uint16_t usChecksum;       /* 2 + 2 = 4 */
+       uint32_t usGroupAddress;   /* 4 + 4 = 8 */
+}
+#include "pack_struct_end.h"
+typedef struct xIGMP_HEADER IGMPHeader_t;
+
+#include "pack_struct_start.h"
+struct xICMP_HEADER
+{
+       uint8_t ucTypeOfMessage;   /* 0 + 1 = 1 */
+       uint8_t ucTypeOfService;   /* 1 + 1 = 2 */
+       uint16_t usChecksum;       /* 2 + 2 = 4 */
+       uint16_t usIdentifier;     /* 4 + 2 = 6 */
+       uint16_t usSequenceNumber; /* 6 + 2 = 8 */
+}
+#include "pack_struct_end.h"
+typedef struct xICMP_HEADER ICMPHeader_t;
+
+#include "pack_struct_start.h"
+struct xUDP_HEADER
+{
+       uint16_t usSourcePort;      /* 0 + 2 = 2 */
+       uint16_t usDestinationPort; /* 2 + 2 = 4 */
+       uint16_t usLength;          /* 4 + 2 = 6 */
+       uint16_t usChecksum;        /* 6 + 2 = 8 */
+}
+#include "pack_struct_end.h"
+typedef struct xUDP_HEADER UDPHeader_t;
+
+#include "pack_struct_start.h"
+struct xTCP_HEADER
+{
+       uint16_t usSourcePort;          /* +  2 =  2 */
+       uint16_t usDestinationPort;     /* +  2 =  4 */
+       uint32_t ulSequenceNumber;      /* +  4 =  8 */
+       uint32_t ulAckNr;               /* +  4 = 12 */
+       uint8_t  ucTCPOffset;           /* +  1 = 13 */
+       uint8_t  ucTCPFlags;            /* +  1 = 14 */
+       uint16_t usWindow;                      /* +  2 = 15 */
+       uint16_t usChecksum;            /* +  2 = 18 */
+       uint16_t usUrgent;                      /* +  2 = 20 */
+#if ipconfigUSE_TCP == 1
+       /* the option data is not a part of the TCP header */
+       uint8_t  ucOptdata[ipSIZE_TCP_OPTIONS];         /* + 12 = 32 */
+#endif
+}
+#include "pack_struct_end.h"
+typedef struct xTCP_HEADER TCPHeader_t;
+
+#include "pack_struct_start.h"
+struct xPSEUDO_HEADER
+{
+       uint32_t ulSourceAddress;
+       uint32_t ulDestinationAddress;
+       uint8_t ucZeros;
+       uint8_t ucProtocol;
+       uint16_t usUDPLength;
+}
+#include "pack_struct_end.h"
+typedef struct xPSEUDO_HEADER PseudoHeader_t;
+
+/*-----------------------------------------------------------*/
+/* Nested protocol packets.                                  */
+/*-----------------------------------------------------------*/
+
+#include "pack_struct_start.h"
+struct xARP_PACKET
+{
+       EthernetHeader_t xEthernetHeader;       /*  0 + 14 = 14 */
+       ARPHeader_t xARPHeader;                 /* 14 + 28 = 42 */
+}
+#include "pack_struct_end.h"
+typedef struct xARP_PACKET ARPPacket_t;
+
+#include "pack_struct_start.h"
+struct xIP_PACKET
+{
+       EthernetHeader_t xEthernetHeader;
+       IPHeader_t xIPHeader;
+}
+#include "pack_struct_end.h"
+typedef struct xIP_PACKET IPPacket_t;
+
+#include "pack_struct_start.h"
+struct xICMP_PACKET
+{
+       EthernetHeader_t xEthernetHeader;
+       IPHeader_t xIPHeader;
+       ICMPHeader_t xICMPHeader;
+}
+#include "pack_struct_end.h"
+typedef struct xICMP_PACKET ICMPPacket_t;
+
+#include "pack_struct_start.h"
+struct xUDP_PACKET
+{
+       EthernetHeader_t xEthernetHeader; /*  0 + 14 = 14 */
+       IPHeader_t xIPHeader;             /* 14 + 20 = 34 */
+       UDPHeader_t xUDPHeader;           /* 34 +  8 = 42 */
+}
+#include "pack_struct_end.h"
+typedef struct xUDP_PACKET UDPPacket_t;
+
+#include "pack_struct_start.h"
+struct xTCP_PACKET
+{
+       EthernetHeader_t xEthernetHeader; /*  0 + 14 = 14 */
+       IPHeader_t xIPHeader;             /* 14 + 20 = 34 */
+       TCPHeader_t xTCPHeader;           /* 34 + 32 = 66 */
+}
+#include "pack_struct_end.h"
+typedef struct xTCP_PACKET TCPPacket_t;
+
+typedef union XPROT_PACKET
+{
+       ARPPacket_t xARPPacket;
+       TCPPacket_t xTCPPacket;
+       UDPPacket_t xUDPPacket;
+       ICMPPacket_t xICMPPacket;
+} ProtocolPacket_t;
+
+
+/* The maximum UDP payload length. */
+#define ipMAX_UDP_PAYLOAD_LENGTH ( ( ipconfigNETWORK_MTU - ipSIZE_OF_IPv4_HEADER ) - ipSIZE_OF_UDP_HEADER )
+
+typedef enum
+{
+       eReleaseBuffer = 0,             /* Processing the frame did not find anything to do - just release the buffer. */
+       eProcessBuffer,                 /* An Ethernet frame has a valid address - continue process its contents. */
+       eReturnEthernetFrame,   /* The Ethernet frame contains an ARP or ICMP packet that can be returned to its source. */
+       eFrameConsumed                  /* Processing the Ethernet packet contents resulted in the payload being sent to the stack. */
+} eFrameProcessingResult_t;
+
+typedef enum
+{
+       eNoEvent = -1,
+       eNetworkDownEvent,              /* 0: The network interface has been lost and/or needs [re]connecting. */
+       eNetworkRxEvent,                /* 1: The network interface has queued a received Ethernet frame. */
+       eNetworkTxEvent,                /* 2: Let the IP-task send a network packet. */
+       eARPTimerEvent,                 /* 3: The ARP timer expired. */
+       eStackTxEvent,                  /* 4: The software stack has queued a packet to transmit. */
+       eDHCPEvent,                             /* 5: Process the DHCP state machine. */
+       eTCPTimerEvent,                 /* 6: See if any TCP socket needs attention. */
+       eTCPAcceptEvent,                /* 7: Client API FreeRTOS_accept() waiting for client connections. */
+       eTCPNetStat,                    /* 8: IP-task is asked to produce a netstat listing. */
+       eSocketBindEvent,               /* 9: Send a message to the IP-task to bind a socket to a port. */
+       eSocketCloseEvent,              /*10: Send a message to the IP-task to close a socket. */
+       eSocketSelectEvent,             /*11: Send a message to the IP-task for select(). */
+       eSocketSignalEvent,             /*12: A socket must be signalled. */
+} eIPEvent_t;
+
+typedef struct IP_TASK_COMMANDS
+{
+       eIPEvent_t eEventType;
+       void *pvData;
+} IPStackEvent_t;
+
+#define ipBROADCAST_IP_ADDRESS 0xffffffffUL
+
+/* Offset into the Ethernet frame that is used to temporarily store information
+on the fragmentation status of the packet being sent.  The value is important,
+as it is past the location into which the destination address will get placed. */
+#define ipFRAGMENTATION_PARAMETERS_OFFSET              ( 6 )
+#define ipSOCKET_OPTIONS_OFFSET                                        ( 6 )
+
+/* Only used when outgoing fragmentation is being used (FreeRTOSIPConfig.h
+setting. */
+#define ipGET_UDP_PAYLOAD_OFFSET_FOR_FRAGMENT( usFragmentOffset ) ( ( ( usFragmentOffset ) == 0 ) ? ipUDP_PAYLOAD_OFFSET_IPv4 : ipIP_PAYLOAD_OFFSET )
+
+/* The offset into a UDP packet at which the UDP data (payload) starts. */
+#define ipUDP_PAYLOAD_OFFSET_IPv4      ( sizeof( UDPPacket_t ) )
+
+/* The offset into an IP packet into which the IP data (payload) starts. */
+#define ipIP_PAYLOAD_OFFSET            ( sizeof( IPPacket_t ) )
+
+#include "pack_struct_start.h"
+struct xUDP_IP_FRAGMENT_PARAMETERS
+{
+       uint8_t ucSocketOptions;
+       uint8_t ucPadFor16BitAlignment;
+       uint16_t usFragmentedPacketOffset;
+       uint16_t usFragmentLength;
+       uint16_t usPayloadChecksum;
+}
+#include "pack_struct_end.h"
+typedef struct xUDP_IP_FRAGMENT_PARAMETERS IPFragmentParameters_t;
+
+#if( ipconfigBYTE_ORDER == pdFREERTOS_LITTLE_ENDIAN )
+
+       /* Ethernet frame types. */
+       #define ipARP_FRAME_TYPE        ( 0x0608U )
+       #define ipIPv4_FRAME_TYPE       ( 0x0008U )
+
+       /* ARP related definitions. */
+       #define ipARP_PROTOCOL_TYPE                             ( 0x0008U )
+       #define ipARP_HARDWARE_TYPE_ETHERNET    ( 0x0100U )
+       #define ipARP_REQUEST                                   ( 0x0100U )
+       #define ipARP_REPLY                                             ( 0x0200U )
+
+#else
+
+       /* Ethernet frame types. */
+       #define ipARP_FRAME_TYPE        ( 0x0806U )
+       #define ipIPv4_FRAME_TYPE       ( 0x0800U )
+
+       /* ARP related definitions. */
+       #define ipARP_PROTOCOL_TYPE ( 0x0800U )
+       #define ipARP_HARDWARE_TYPE_ETHERNET ( 0x0001U )
+       #define ipARP_REQUEST ( 0x0001 )
+       #define ipARP_REPLY ( 0x0002 )
+
+#endif /* ipconfigBYTE_ORDER == pdFREERTOS_LITTLE_ENDIAN */
+
+
+/* For convenience, a MAC address of all zeros and another of all 0xffs are
+defined const for quick reference. */
+extern const MACAddress_t xBroadcastMACAddress; /* all 0xff's */
+extern uint16_t usPacketIdentifier;
+
+/* Define a default UDP packet header (declared in FreeRTOS_UDP_IP.c) */
+typedef union xUDPPacketHeader
+{
+       uint8_t ucBytes[24];
+       uint32_t ulWords[6];
+} UDPPacketHeader_t;
+extern UDPPacketHeader_t xDefaultPartUDPPacketHeader;
+
+/* Structure that stores the netmask, gateway address and DNS server addresses. */
+extern NetworkAddressingParameters_t xNetworkAddressing;
+
+/* Structure that stores the defaults for netmask, gateway address and DNS.
+These values will be copied to 'xNetworkAddressing' in case DHCP is not used,
+and also in case DHCP does not lead to a confirmed request. */
+extern NetworkAddressingParameters_t xDefaultAddressing;
+
+/* True when BufferAllocation_1.c was included, false for BufferAllocation_2.c */
+extern const BaseType_t xBufferAllocFixedSize;
+
+/* Defined in FreeRTOS_Sockets.c */
+#if ( ipconfigUSE_TCP == 1 )
+       extern List_t xBoundTCPSocketsList;
+#endif
+
+/* The local IP address is accessed from within xDefaultPartUDPPacketHeader,
+rather than duplicated in its own variable. */
+#define ipLOCAL_IP_ADDRESS_POINTER ( ( uint32_t * ) &( xDefaultPartUDPPacketHeader.ulWords[ 20u / sizeof(uint32_t) ] ) )
+
+/* The local MAC address is accessed from within xDefaultPartUDPPacketHeader,
+rather than duplicated in its own variable. */
+#define ipLOCAL_MAC_ADDRESS ( &xDefaultPartUDPPacketHeader.ucBytes[0] )
+
+/* ICMP packets are sent using the same function as UDP packets.  The port
+number is used to distinguish between the two, as 0 is an invalid UDP port. */
+#define ipPACKET_CONTAINS_ICMP_DATA                                    ( 0 )
+
+/* For now, the lower 8 bits in 'xEventBits' will be reserved for the above
+socket events. */
+#define SOCKET_EVENT_BIT_COUNT   8
+
+#define vSetField16( pxBase, xType, xField, usValue ) \
+{ \
+       ( ( uint8_t* )( pxBase ) ) [ offsetof( xType, xField ) + 0 ] = ( uint8_t ) ( ( usValue ) >> 8 ); \
+       ( ( uint8_t* )( pxBase ) ) [ offsetof( xType, xField ) + 1 ] = ( uint8_t ) ( ( usValue ) & 0xff ); \
+}
+
+#define vSetField32( pxBase, xType, xField, ulValue ) \
+{ \
+       ( (uint8_t*)( pxBase ) ) [ offsetof( xType, xField ) + 0 ] = ( uint8_t )   ( ( ulValue ) >> 24 ); \
+       ( (uint8_t*)( pxBase ) ) [ offsetof( xType, xField ) + 1 ] = ( uint8_t ) ( ( ( ulValue ) >> 16 ) & 0xff ); \
+       ( (uint8_t*)( pxBase ) ) [ offsetof( xType, xField ) + 2 ] = ( uint8_t ) ( ( ( ulValue ) >> 8 ) & 0xff ); \
+       ( (uint8_t*)( pxBase ) ) [ offsetof( xType, xField ) + 3 ] = ( uint8_t )   ( ( ulValue ) & 0xff ); \
+}
+
+#define vFlip_16( left, right ) \
+       do { \
+               uint16_t tmp = (left); \
+               (left) = (right); \
+               (right) = tmp; \
+       } while (0)
+
+#define vFlip_32( left, right ) \
+       do { \
+               uint32_t tmp = (left); \
+               (left) = (right); \
+               (right) = tmp; \
+       } while (0)
+
+#ifndef ARRAY_SIZE
+       #define ARRAY_SIZE(x)   (BaseType_t)(sizeof(x)/sizeof(x)[0])
+#endif
+
+/*
+ * A version of FreeRTOS_GetReleaseNetworkBuffer() that can be called from an
+ * interrupt.  If a non zero value is returned, then the calling ISR should
+ * perform a context switch before exiting the ISR.
+ */
+BaseType_t FreeRTOS_ReleaseFreeNetworkBufferFromISR( void );
+
+/*
+ * Create a message that contains a command to initialise the network interface.
+ * This is used during initialisation, and at any time the network interface
+ * goes down thereafter.  The network interface hardware driver is responsible
+ * for sending the message that contains the network interface down command/
+ * event.
+ *
+ * Only use the FreeRTOS_NetworkDownFromISR() version if the function is to be
+ * called from an interrupt service routine.  If FreeRTOS_NetworkDownFromISR()
+ * returns a non-zero value then a context switch should be performed ebfore
+ * the interrupt is exited.
+ */
+void FreeRTOS_NetworkDown( void );
+BaseType_t FreeRTOS_NetworkDownFromISR( void );
+
+/*
+ * Processes incoming ARP packets.
+ */
+eFrameProcessingResult_t eARPProcessPacket( ARPPacket_t * const pxARPFrame );
+
+/*
+ * Inspect an Ethernet frame to see if it contains data that the stack needs to
+ * process.  eProcessBuffer is returned if the frame should be processed by the
+ * stack.  eReleaseBuffer is returned if the frame should be discarded.
+ */
+eFrameProcessingResult_t eConsiderFrameForProcessing( const uint8_t * const pucEthernetBuffer );
+
+/*
+ * Return the checksum generated over xDataLengthBytes from pucNextData.
+ */
+uint16_t usGenerateChecksum( uint32_t ulSum, const uint8_t * pucNextData, size_t uxDataLengthBytes );
+
+/* 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 );
+
+/*
+ * 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 pdFALSE.
+ */
+BaseType_t xIPIsNetworkTaskReady( void );
+
+#if( ipconfigSOCKET_HAS_USER_WAKE_CALLBACK == 1 )
+       struct xSOCKET;
+       typedef void (*SocketWakeupCallback_t)( struct xSOCKET * pxSocket );
+#endif
+
+#if( ipconfigUSE_TCP == 1 )
+
+       /*
+        * Actually a user thing, but because xBoundTCPSocketsList, let it do by the
+        * IP-task
+        */
+       void vTCPNetStat( void );
+
+       /*
+        * At least one socket needs to check for timeouts
+        */
+       TickType_t xTCPTimerCheck( BaseType_t xWillSleep );
+
+       /* Every TCP socket has a buffer space just big enough to store
+       the last TCP header received.
+       As a reference of this field may be passed to DMA, force the
+       alignment to 8 bytes. */
+       typedef union
+       {
+               struct
+               {
+                       /* Increase the alignment of this union by adding a 64-bit variable. */
+                       uint64_t ullAlignmentWord;
+               } a;
+               struct
+               {
+                       /* The next field only serves to give 'ucLastPacket' a correct
+                       alignment of 8 + 2.  See comments in FreeRTOS_IP.h */
+                       uint8_t ucFillPacket[ ipconfigPACKET_FILLER_SIZE ];
+                       uint8_t ucLastPacket[ sizeof( TCPPacket_t ) ];
+               } u;
+       } LastTCPPacket_t;
+
+       /*
+        * Note that the values of all short and long integers in these structs
+        * are being stored in the native-endian way
+        * Translation should take place when accessing any structure which defines
+        * network packets, such as IPHeader_t and TCPHeader_t
+        */
+       typedef struct TCPSOCKET
+       {
+               uint32_t ulRemoteIP;            /* IP address of remote machine */
+               uint16_t usRemotePort;          /* Port on remote machine */
+               struct {
+                       /* Most compilers do like bit-flags */
+                       uint32_t
+                               bMssChange : 1,         /* This socket has seen a change in MSS */
+                               bPassAccept : 1,        /* when true, this socket may be returned in a call to accept() */
+                               bPassQueued : 1,        /* when true, this socket is an orphan until it gets connected
+                                                                        * Why an orphan? Because it may not be returned in a accept() call until it
+                                                                        * gets the state eESTABLISHED */
+                               bReuseSocket : 1,       /* When a listening socket gets a connection, do not create a new instance but keep on using it */
+                               bCloseAfterSend : 1,/* As soon as the last byte has been transmitted, finalise the connection
+                                                                        * Useful in e.g. FTP connections, where the last data bytes are sent along with the FIN flag */
+                               bUserShutdown : 1,      /* User requesting a graceful shutdown */
+                               bCloseRequested : 1,/* Request to finalise the connection */
+                               bLowWater : 1,          /* high-water level has been reached. Cleared as soon as 'rx-count < lo-water' */
+                               bWinChange : 1,         /* The value of bLowWater has changed, must send a window update */
+                               bSendKeepAlive : 1,     /* When this flag is true, a TCP keep-alive message must be send */
+                               bWaitKeepAlive : 1,     /* When this flag is true, a TCP keep-alive reply is expected */
+                               bConnPrepared : 1,      /* Connecting socket: Message has been prepared */
+                               #if( ipconfigSUPPORT_SELECT_FUNCTION == 1 )
+                                       bConnPassed : 1,        /* Connecting socket: Socket has been passed in a successful select()  */
+                               #endif /* ipconfigSUPPORT_SELECT_FUNCTION */
+                               bFinAccepted : 1,       /* This socket has received (or sent) a FIN and accepted it */
+                               bFinSent : 1,           /* We've sent out a FIN */
+                               bFinRecv : 1,           /* We've received a FIN from our peer */
+                               bFinAcked : 1,          /* Our FIN packet has been acked */
+                               bFinLast : 1,           /* The last ACK (after FIN and FIN+ACK) has been sent or will be sent by the peer */
+                               bRxStopped : 1,         /* Application asked to temporarily stop reception */
+                               bMallocError : 1,       /* There was an error allocating a stream */
+                               bWinScaling : 1;        /* A TCP-Window Scaling option was offered and accepted in the SYN phase. */
+               } bits;
+               uint32_t ulHighestRxAllowed;
+                                                               /* The highest sequence number that we can receive at any moment */
+               uint16_t usTimeout;             /* Time (in ticks) after which this socket needs attention */
+               uint16_t usCurMSS;              /* Current Maximum Segment Size */
+               uint16_t usInitMSS;             /* Initial maximum segment Size */
+               uint16_t usChildCount;  /* In case of a listening socket: number of connections on this port number */
+               uint16_t usBacklog;             /* In case of a listening socket: maximum number of concurrent connections on this port number */
+               uint8_t ucRepCount;             /* Send repeat count, for retransmissions
+                                                                * This counter is separate from the xmitCount in the
+                                                                * TCP win segments */
+               uint8_t ucTCPState;             /* TCP state: see eTCP_STATE */
+               struct xSOCKET *pxPeerSocket;   /* for server socket: child, for child socket: parent */
+               #if( ipconfigTCP_KEEP_ALIVE == 1 )
+                       uint8_t ucKeepRepCount;
+                       TickType_t xLastAliveTime;
+               #endif /* ipconfigTCP_KEEP_ALIVE */
+               #if( ipconfigTCP_HANG_PROTECTION == 1 )
+                       TickType_t xLastActTime;
+               #endif /* ipconfigTCP_HANG_PROTECTION */
+               size_t uxLittleSpace;
+               size_t uxEnoughSpace;
+               size_t uxRxStreamSize;
+               size_t uxTxStreamSize;
+               StreamBuffer_t *rxStream;
+               StreamBuffer_t *txStream;
+               #if( ipconfigUSE_TCP_WIN == 1 )
+                       NetworkBufferDescriptor_t *pxAckMessage;
+               #endif /* ipconfigUSE_TCP_WIN */
+               /* Buffer space to store the last TCP header received. */
+               LastTCPPacket_t xPacket;
+               uint8_t tcpflags;               /* TCP flags */
+               #if( ipconfigUSE_TCP_WIN != 0 )
+                       uint8_t ucMyWinScaleFactor;
+                       uint8_t ucPeerWinScaleFactor;
+               #endif
+               #if( ipconfigUSE_CALLBACKS == 1 )
+                       FOnTCPReceive_t pxHandleReceive;        /*
+                                                                                                * In case of a TCP socket:
+                                                                                                * typedef void (* FOnTCPReceive_t) (Socket_t xSocket, void *pData, size_t xLength );
+                                                                                                */
+                       FOnTCPSent_t pxHandleSent;
+                       FOnConnected_t pxHandleConnected;       /* Actually type: typedef void (* FOnConnected_t) (Socket_t xSocket, BaseType_t ulConnected ); */
+               #endif /* ipconfigUSE_CALLBACKS */
+               uint32_t ulWindowSize;          /* Current Window size advertised by peer */
+               size_t uxRxWinSize;     /* Fixed value: size of the TCP reception window */
+               size_t uxTxWinSize;     /* Fixed value: size of the TCP transmit window */
+
+               TCPWindow_t xTCPWindow;
+       } IPTCPSocket_t;
+
+#endif /* ipconfigUSE_TCP */
+
+typedef struct UDPSOCKET
+{
+       List_t xWaitingPacketsList;     /* Incoming packets */
+       #if( ipconfigUDP_MAX_RX_PACKETS > 0 )
+               UBaseType_t uxMaxPackets; /* Protection: limits the number of packets buffered per socket */
+       #endif /* ipconfigUDP_MAX_RX_PACKETS */
+       #if( ipconfigUSE_CALLBACKS == 1 )
+               FOnUDPReceive_t pxHandleReceive;        /*
+                                                                                        * In case of a UDP socket:
+                                                                                        * typedef void (* FOnUDPReceive_t) (Socket_t xSocket, void *pData, size_t xLength, struct freertos_sockaddr *pxAddr );
+                                                                                        */
+               FOnUDPSent_t pxHandleSent;
+       #endif /* ipconfigUSE_CALLBACKS */
+} IPUDPSocket_t;
+
+typedef enum eSOCKET_EVENT {
+       eSOCKET_RECEIVE = 0x0001,
+       eSOCKET_SEND    = 0x0002,
+       eSOCKET_ACCEPT  = 0x0004,
+       eSOCKET_CONNECT = 0x0008,
+       eSOCKET_BOUND   = 0x0010,
+       eSOCKET_CLOSED  = 0x0020,
+       eSOCKET_INTR    = 0x0040,
+       eSOCKET_ALL             = 0x007F,
+} eSocketEvent_t;
+
+typedef struct xSOCKET
+{
+       EventBits_t xEventBits;
+       EventGroupHandle_t xEventGroup;
+
+       ListItem_t xBoundSocketListItem; /* Used to reference the socket from a bound sockets list. */
+       TickType_t xReceiveBlockTime; /* if recv[to] is called while no data is available, wait this amount of time. Unit in clock-ticks */
+       TickType_t xSendBlockTime; /* if send[to] is called while there is not enough space to send, wait this amount of time. Unit in clock-ticks */
+
+       uint16_t usLocalPort;           /* Local port on this machine */
+       uint8_t ucSocketOptions;
+       uint8_t ucProtocol; /* choice of FREERTOS_IPPROTO_UDP/TCP */
+       #if( ipconfigSOCKET_HAS_USER_SEMAPHORE == 1 )
+               SemaphoreHandle_t pxUserSemaphore;
+       #endif /* ipconfigSOCKET_HAS_USER_SEMAPHORE */
+       #if( ipconfigSOCKET_HAS_USER_WAKE_CALLBACK == 1 )
+               SocketWakeupCallback_t pxUserWakeCallback;
+       #endif /* ipconfigSOCKET_HAS_USER_WAKE_CALLBACK */
+
+       #if( ipconfigSUPPORT_SELECT_FUNCTION == 1 )
+               struct xSOCKET_SET *pxSocketSet;
+               /* User may indicate which bits are interesting for this socket. */
+               EventBits_t xSelectBits;
+               /* These bits indicate the events which have actually occurred.
+               They are maintained by the IP-task */
+               EventBits_t xSocketBits;
+       #endif /* ipconfigSUPPORT_SELECT_FUNCTION */
+       /* TCP/UDP specific fields: */
+       /* Before accessing any member of this structure, it should be confirmed */
+       /* that the protocol corresponds with the type of structure */
+
+       union
+       {
+               IPUDPSocket_t xUDP;
+               #if( ipconfigUSE_TCP == 1 )
+                       IPTCPSocket_t xTCP;
+                       /* Make sure that xTCP is 8-bytes aligned by
+                       declaring a 64-bit variable in the same union */
+                       uint64_t ullTCPAlignment;
+               #endif /* ipconfigUSE_TCP */
+       } u;
+} FreeRTOS_Socket_t;
+
+#if( ipconfigUSE_TCP == 1 )
+       /*
+        * Lookup a TCP socket, using a multiple matching: both port numbers and
+        * return IP address.
+        */
+       FreeRTOS_Socket_t *pxTCPSocketLookup( uint32_t ulLocalIP, UBaseType_t uxLocalPort, uint32_t ulRemoteIP, UBaseType_t uxRemotePort );
+
+#endif /* ipconfigUSE_TCP */
+
+/*
+ * Look up a local socket by finding a match with the local port.
+ */
+FreeRTOS_Socket_t *pxUDPSocketLookup( UBaseType_t uxLocalPort );
+
+/*
+ * Called when the application has generated a UDP packet to send.
+ */
+void vProcessGeneratedUDPPacket( NetworkBufferDescriptor_t * const pxNetworkBuffer );
+
+/*
+ * Calculate the upper-layer checksum
+ * Works both for UDP, ICMP and TCP packages
+ * bOut = true: checksum will be set in outgoing packets
+ * bOut = false: checksum will be calculated for incoming packets
+ *     returning 0xffff means: checksum was correct
+ */
+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
+ * request?) and is to be sent back to its source.
+ */
+void vReturnEthernetFrame( NetworkBufferDescriptor_t * pxNetworkBuffer, BaseType_t xReleaseAfterSend );
+
+/*
+ * The internal version of bind()
+ * If 'ulInternal' is true, it is called by the driver
+ * The TCP driver needs to bind a socket at the moment a listening socket
+ * creates a new connected socket
+ */
+BaseType_t vSocketBind( FreeRTOS_Socket_t *pxSocket, struct freertos_sockaddr * pxAddress, size_t uxAddressLength, BaseType_t xInternal );
+
+/*
+ * Internal function to add streaming data to a TCP socket. If ulIn == true,
+ * data will be added to the rxStream, otherwise to the tXStream.  Normally data
+ * will be written with ulOffset == 0, meaning: at the end of the FIFO.  When
+ * packet come in out-of-order, an offset will be used to put it in front and
+ * the head will not change yet.
+ */
+int32_t lTCPAddRxdata(FreeRTOS_Socket_t *pxSocket, size_t uxOffset, const uint8_t *pcData, uint32_t ulByteCount);
+
+/*
+ * Currently called for any important event.
+ */
+void vSocketWakeUpUser( FreeRTOS_Socket_t *pxSocket );
+
+/*
+ * Some helping function, their meaning should be clear
+ */
+static portINLINE uint32_t ulChar2u32 (const uint8_t *apChr);
+static portINLINE uint32_t ulChar2u32 (const uint8_t *apChr)
+{
+       return  ( ( ( uint32_t )apChr[0] ) << 24) |
+                       ( ( ( uint32_t )apChr[1] ) << 16) |
+                       ( ( ( uint32_t )apChr[2] ) << 8) |
+                       ( ( ( uint32_t )apChr[3] ) );
+}
+
+static portINLINE uint16_t usChar2u16 (const uint8_t *apChr);
+static portINLINE uint16_t usChar2u16 (const uint8_t *apChr)
+{
+       return ( uint16_t )
+                       ( ( ( ( uint32_t )apChr[0] ) << 8) |
+                         ( ( ( uint32_t )apChr[1] ) ) );
+}
+
+/* Check a single socket for retransmissions and timeouts */
+BaseType_t xTCPSocketCheck( FreeRTOS_Socket_t *pxSocket );
+
+BaseType_t xTCPCheckNewClient( FreeRTOS_Socket_t *pxSocket );
+
+/* Defined in FreeRTOS_Sockets.c
+ * Close a socket
+ */
+void *vSocketClose( FreeRTOS_Socket_t *pxSocket );
+
+/*
+ * Send the event eEvent to the IP task event queue, using a block time of
+ * zero.  Return pdPASS if the message was sent successfully, otherwise return
+ * pdFALSE.
+*/
+BaseType_t xSendEventToIPTask( eIPEvent_t eEvent );
+
+/*
+ * The same as above, but a struct as a parameter, containing:
+ *             eIPEvent_t eEventType;
+ *             void *pvData;
+ */
+BaseType_t xSendEventStructToIPTask( const IPStackEvent_t *pxEvent, TickType_t xTimeout );
+
+/*
+ * Returns a pointer to the original NetworkBuffer from a pointer to a UDP
+ * payload buffer.
+ */
+NetworkBufferDescriptor_t *pxUDPPayloadBuffer_to_NetworkBuffer( void *pvBuffer );
+
+#if( ipconfigZERO_COPY_TX_DRIVER != 0 )
+       /*
+        * For the case where the network driver passes a buffer directly to a DMA
+        * descriptor, this function can be used to translate a 'network buffer' to
+        * a 'network buffer descriptor'.
+        */
+       NetworkBufferDescriptor_t *pxPacketBuffer_to_NetworkBuffer( const void *pvBuffer );
+#endif
+
+/*
+ * Internal: Sets a new state for a TCP socket and performs the necessary
+ * actions like calling a OnConnected handler to notify the socket owner.
+ */
+#if( ipconfigUSE_TCP == 1 )
+       void vTCPStateChange( FreeRTOS_Socket_t *pxSocket, enum eTCP_STATE eTCPState );
+#endif /* ipconfigUSE_TCP */
+
+/*_RB_ Should this be part of the public API? */
+void FreeRTOS_netstat( void );
+
+/* Returns pdTRUE is this function is called from the IP-task */
+BaseType_t xIsCallingFromIPTask( void );
+
+#if( ipconfigSUPPORT_SELECT_FUNCTION == 1 )
+
+typedef struct xSOCKET_SET
+{
+       EventGroupHandle_t xSelectGroup;
+       BaseType_t bApiCalled;  /* True if the API was calling  the private vSocketSelect */
+       FreeRTOS_Socket_t *pxSocket;
+} SocketSelect_t;
+
+extern void vSocketSelect( SocketSelect_t *pxSocketSelect );
+
+#endif /* ipconfigSUPPORT_SELECT_FUNCTION */
+
+void vIPSetDHCPTimerEnableState( BaseType_t xEnableState );
+void vIPReloadDHCPTimer( uint32_t ulLeaseTime );
+#if( ipconfigDNS_USE_CALLBACKS != 0 )
+       void vIPReloadDNSTimer( uint32_t ulCheckTime );
+       void vIPSetDnsTimerEnableState( BaseType_t xEnableState );
+#endif
+
+/* Send the network-up event and start the ARP timer. */
+void vIPNetworkUpCalls( void );
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* FREERTOS_IP_PRIVATE_H */
+
+
+
+
+
+
+
+
+
+
+
+
+
index 88d3bba651225c932624199d3d4b09215386d82d..926ccebbdb4265c8fe4fe7da024d70ff26bcbc58 100644 (file)
-/*\r
- * FreeRTOS+TCP V2.2.0\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://aws.amazon.com/freertos\r
- * http://www.FreeRTOS.org\r
- */\r
-\r
-#ifndef FREERTOS_SOCKETS_H\r
-#define FREERTOS_SOCKETS_H\r
-\r
-#ifdef __cplusplus\r
-extern "C" {\r
-#endif\r
-\r
-/* Standard includes. */\r
-#include <string.h>\r
-\r
-/* Application level configuration options. */\r
-#include "FreeRTOSIPConfig.h"\r
-\r
-#ifndef FREERTOS_IP_CONFIG_H\r
-       #error FreeRTOSIPConfig.h has not been included yet\r
-#endif\r
-\r
-/* Event bit definitions are required by the select functions. */\r
-#include "event_groups.h"\r
-\r
-#ifndef INC_FREERTOS_H\r
-       #error FreeRTOS.h must be included before FreeRTOS_Sockets.h.\r
-#endif\r
-\r
-#ifndef INC_TASK_H\r
-       #ifndef TASK_H /* For compatibility with older FreeRTOS versions. */\r
-               #error The FreeRTOS header file task.h must be included before FreeRTOS_Sockets.h.\r
-       #endif\r
-#endif\r
-\r
-/* Assigned to an Socket_t variable when the socket is not valid, probably\r
-because it could not be created. */\r
-#define FREERTOS_INVALID_SOCKET        ( ( Socket_t ) ~0U )\r
-\r
-/* API function error values.  As errno is supported, the FreeRTOS sockets\r
-functions return error codes rather than just a pass or fail indication. */\r
-/* HT: Extended the number of error codes, gave them positive values and if possible\r
-the corresponding found in errno.h\r
-In case of an error, API's will still return negative numbers, e.g.\r
-  return -pdFREERTOS_ERRNO_EWOULDBLOCK;\r
-in case an operation would block */\r
-\r
-/* The following defines are obsolete, please use -pdFREERTOS_ERRNO_Exxx */\r
-\r
-#define FREERTOS_SOCKET_ERROR  ( -1 )\r
-#define FREERTOS_EWOULDBLOCK   ( - pdFREERTOS_ERRNO_EWOULDBLOCK )\r
-#define FREERTOS_EINVAL                        ( - pdFREERTOS_ERRNO_EINVAL )\r
-#define FREERTOS_EADDRNOTAVAIL ( - pdFREERTOS_ERRNO_EADDRNOTAVAIL )\r
-#define FREERTOS_EADDRINUSE            ( - pdFREERTOS_ERRNO_EADDRINUSE )\r
-#define FREERTOS_ENOBUFS               ( - pdFREERTOS_ERRNO_ENOBUFS )\r
-#define FREERTOS_ENOPROTOOPT   ( - pdFREERTOS_ERRNO_ENOPROTOOPT )\r
-#define FREERTOS_ECLOSED               ( - pdFREERTOS_ERRNO_ENOTCONN )\r
-\r
-/* Values for the parameters to FreeRTOS_socket(), inline with the Berkeley\r
-standard.  See the documentation of FreeRTOS_socket() for more information. */\r
-#define FREERTOS_AF_INET               ( 2 )\r
-#define FREERTOS_AF_INET6              ( 10 )\r
-#define FREERTOS_SOCK_DGRAM            ( 2 )\r
-#define FREERTOS_IPPROTO_UDP   ( 17 )\r
-\r
-#define FREERTOS_SOCK_STREAM   ( 1 )\r
-#define FREERTOS_IPPROTO_TCP   ( 6 )\r
-/* IP packet of type "Any local network"\r
- * can be used in stead of TCP for testing with sockets in raw mode\r
- */\r
-#define FREERTOS_IPPROTO_USR_LAN  ( 63 )\r
-\r
-/* A bit value that can be passed into the FreeRTOS_sendto() function as part of\r
-the flags parameter.  Setting the FREERTOS_ZERO_COPY in the flags parameter\r
-indicates that the zero copy interface is being used.  See the documentation for\r
-FreeRTOS_sockets() for more information. */\r
-#define FREERTOS_ZERO_COPY             ( 1 )\r
-\r
-/* Values that can be passed in the option name parameter of calls to\r
-FreeRTOS_setsockopt(). */\r
-#define FREERTOS_SO_RCVTIMEO                   ( 0 )           /* Used to set the receive time out. */\r
-#define FREERTOS_SO_SNDTIMEO                   ( 1 )           /* Used to set the send time out. */\r
-#define FREERTOS_SO_UDPCKSUM_OUT               ( 2 )           /* Used to turn the use of the UDP checksum by a socket on or off.  This also doubles as part of an 8-bit bitwise socket option. */\r
-#if( ipconfigSOCKET_HAS_USER_SEMAPHORE == 1 )\r
-       #define FREERTOS_SO_SET_SEMAPHORE       ( 3 )           /* Used to set a user's semaphore */\r
-#endif\r
-#define FREERTOS_SO_SNDBUF                             ( 4 )           /* Set the size of the send buffer (TCP only) */\r
-#define FREERTOS_SO_RCVBUF                             ( 5 )           /* Set the size of the receive buffer (TCP only) */\r
-\r
-#if ipconfigUSE_CALLBACKS == 1\r
-       #define FREERTOS_SO_TCP_CONN_HANDLER    ( 6 )           /* Install a callback for (dis) connection events. Supply pointer to 'F_TCP_UDP_Handler_t' (see below) */\r
-       #define FREERTOS_SO_TCP_RECV_HANDLER    ( 7 )           /* Install a callback for receiving TCP data. Supply pointer to 'F_TCP_UDP_Handler_t' (see below) */\r
-       #define FREERTOS_SO_TCP_SENT_HANDLER    ( 8 )           /* Install a callback for sending TCP data. Supply pointer to 'F_TCP_UDP_Handler_t' (see below) */\r
-       #define FREERTOS_SO_UDP_RECV_HANDLER    ( 9 )           /* Install a callback for receiving UDP data. Supply pointer to 'F_TCP_UDP_Handler_t' (see below) */\r
-       #define FREERTOS_SO_UDP_SENT_HANDLER    ( 10 )          /* Install a callback for sending UDP data. Supply pointer to 'F_TCP_UDP_Handler_t' (see below) */\r
-#endif /* ipconfigUSE_CALLBACKS */\r
-\r
-#define FREERTOS_SO_REUSE_LISTEN_SOCKET        ( 11 )          /* When a listening socket gets connected, do not create a new one but re-use it */\r
-#define FREERTOS_SO_CLOSE_AFTER_SEND   ( 12 )          /* As soon as the last byte has been transmitted, finalise the connection */\r
-#define FREERTOS_SO_WIN_PROPERTIES             ( 13 )          /* Set all buffer and window properties in one call, parameter is pointer to WinProperties_t */\r
-#define FREERTOS_SO_SET_FULL_SIZE              ( 14 )          /* Refuse to send packets smaller than MSS  */\r
-\r
-#define FREERTOS_SO_STOP_RX                            ( 15 )          /* Temporarily hold up reception, used by streaming client */\r
-\r
-#if( ipconfigUDP_MAX_RX_PACKETS > 0 )\r
-       #define FREERTOS_SO_UDP_MAX_RX_PACKETS  ( 16 )          /* This option helps to limit the maximum number of packets a UDP socket will buffer */\r
-#endif\r
-\r
-#if( ipconfigSOCKET_HAS_USER_WAKE_CALLBACK == 1 )\r
-       #define FREERTOS_SO_WAKEUP_CALLBACK     ( 17 )\r
-#endif\r
-\r
-#define FREERTOS_SO_SET_LOW_HIGH_WATER ( 18 )\r
-\r
-#define FREERTOS_NOT_LAST_IN_FRAGMENTED_PACKET         ( 0x80 )  /* For internal use only, but also part of an 8-bit bitwise value. */\r
-#define FREERTOS_FRAGMENTED_PACKET                             ( 0x40 )  /* For internal use only, but also part of an 8-bit bitwise value. */\r
-\r
-/* Values for flag for FreeRTOS_shutdown(). */\r
-#define FREERTOS_SHUT_RD                               ( 0 )           /* Not really at this moment, just for compatibility of the interface */\r
-#define FREERTOS_SHUT_WR                               ( 1 )\r
-#define FREERTOS_SHUT_RDWR                             ( 2 )\r
-\r
-/* Values for flag for FreeRTOS_recv(). */\r
-#define FREERTOS_MSG_OOB                               ( 2 )           /* process out-of-band data */\r
-#define FREERTOS_MSG_PEEK                              ( 4 )           /* peek at incoming message */\r
-#define FREERTOS_MSG_DONTROUTE                 ( 8 )           /* send without using routing tables */\r
-#define FREERTOS_MSG_DONTWAIT                  ( 16 )          /* Can be used with recvfrom(), sendto(), recv(), and send(). */\r
-\r
-typedef struct xWIN_PROPS {\r
-       /* Properties of the Tx buffer and Tx window */\r
-       int32_t lTxBufSize;     /* Unit: bytes */\r
-       int32_t lTxWinSize;     /* Unit: MSS */\r
-\r
-       /* Properties of the Rx buffer and Rx window */\r
-       int32_t lRxBufSize;     /* Unit: bytes */\r
-       int32_t lRxWinSize;     /* Unit: MSS */\r
-} WinProperties_t;\r
-\r
-typedef struct xLOW_HIGH_WATER {\r
-       /* Structure to pass for the 'FREERTOS_SO_SET_LOW_HIGH_WATER' option */\r
-       size_t uxLittleSpace;   /* Send a STOP when buffer space drops below X bytes */\r
-       size_t uxEnoughSpace;   /* Send a GO when buffer space grows above X bytes */\r
-} LowHighWater_t;\r
-\r
-/* For compatibility with the expected Berkeley sockets naming. */\r
-#define socklen_t uint32_t\r
-\r
-/* For this limited implementation, only two members are required in the\r
-Berkeley style sockaddr structure. */\r
-struct freertos_sockaddr\r
-{\r
-       /* _HT_ On 32- and 64-bit architectures, the addition of the two uint8_t\r
-       fields doesn't make the structure bigger, due to alignment.\r
-       The fields are inserted as a preparation for IPv6. */\r
-\r
-       /* sin_len and sin_family not used in the IPv4-only release. */\r
-       uint8_t sin_len;                /* length of this structure. */\r
-       uint8_t sin_family;             /* FREERTOS_AF_INET. */\r
-       uint16_t sin_port;\r
-       uint32_t sin_addr;\r
-};\r
-\r
-#if ipconfigBYTE_ORDER == pdFREERTOS_LITTLE_ENDIAN\r
-\r
-       #define FreeRTOS_inet_addr_quick( ucOctet0, ucOctet1, ucOctet2, ucOctet3 )                              \\r
-                                                                               ( ( ( ( uint32_t ) ( ucOctet3 ) ) << 24UL ) |           \\r
-                                                                               ( ( ( uint32_t ) ( ucOctet2 ) ) << 16UL ) |                     \\r
-                                                                               ( ( ( uint32_t ) ( ucOctet1 ) ) <<  8UL ) |                     \\r
-                                                                               ( ( uint32_t ) ( ucOctet0 ) ) )\r
-\r
-       #define FreeRTOS_inet_ntoa( ulIPAddress, pucBuffer )                                                                    \\r
-                                                               sprintf( ( char * ) ( pucBuffer ), "%u.%u.%u.%u",                       \\r
-                                                                       ( ( unsigned ) ( ( ulIPAddress ) & 0xffUL ) ),                  \\r
-                                                                       ( ( unsigned ) ( ( ( ulIPAddress ) >> 8 ) & 0xffUL ) ), \\r
-                                                                       ( ( unsigned ) ( ( ( ulIPAddress ) >> 16 ) & 0xffUL ) ),\\r
-                                                                       ( ( unsigned ) ( ( ulIPAddress ) >> 24 ) ) )\r
-\r
-#else /* ipconfigBYTE_ORDER */\r
-\r
-       #define FreeRTOS_inet_addr_quick( ucOctet0, ucOctet1, ucOctet2, ucOctet3 )                              \\r
-                                                                               ( ( ( ( uint32_t ) ( ucOctet0 ) ) << 24UL ) |           \\r
-                                                                               ( ( ( uint32_t ) ( ucOctet1 ) ) << 16UL ) |                     \\r
-                                                                               ( ( ( uint32_t ) ( ucOctet2 ) ) <<  8UL ) |                     \\r
-                                                                               ( ( uint32_t ) ( ucOctet3 ) ) )\r
-\r
-       #define FreeRTOS_inet_ntoa( ulIPAddress, pucBuffer )                                                                    \\r
-                                                               sprintf( ( char * ) ( pucBuffer ), "%u.%u.%u.%u",                       \\r
-                                                                       ( ( unsigned ) ( ( ulIPAddress ) >> 24 ) ),                             \\r
-                                                                       ( ( unsigned ) ( ( ( ulIPAddress ) >> 16 ) & 0xffUL ) ),\\r
-                                                                       ( ( unsigned ) ( ( ( ulIPAddress ) >> 8 ) & 0xffUL ) ), \\r
-                                                                       ( ( unsigned ) ( ( ulIPAddress ) & 0xffUL ) ) )\r
-\r
-#endif /* ipconfigBYTE_ORDER */\r
-\r
-/* The socket type itself. */\r
-struct xSOCKET;\r
-typedef struct xSOCKET *Socket_t;\r
-\r
-/* The SocketSet_t type is the equivalent to the fd_set type used by the\r
-Berkeley API. */\r
-struct xSOCKET_SET;\r
-typedef struct xSOCKET_SET *SocketSet_t;\r
-\r
-/**\r
- * FULL, UP-TO-DATE AND MAINTAINED REFERENCE DOCUMENTATION FOR ALL THESE\r
- * FUNCTIONS IS AVAILABLE ON THE FOLLOWING URL:\r
- * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/FreeRTOS_TCP_API_Functions.html\r
- */\r
-Socket_t FreeRTOS_socket( BaseType_t xDomain, BaseType_t xType, BaseType_t xProtocol );\r
-int32_t FreeRTOS_recvfrom( Socket_t xSocket, void *pvBuffer, size_t xBufferLength, BaseType_t xFlags, struct freertos_sockaddr *pxSourceAddress, socklen_t *pxSourceAddressLength );\r
-int32_t FreeRTOS_sendto( Socket_t xSocket, const void *pvBuffer, size_t xTotalDataLength, BaseType_t xFlags, const struct freertos_sockaddr *pxDestinationAddress, socklen_t xDestinationAddressLength );\r
-BaseType_t FreeRTOS_bind( Socket_t xSocket, struct freertos_sockaddr *pxAddress, socklen_t xAddressLength );\r
-\r
-/* function to get the local address and IP port */\r
-size_t FreeRTOS_GetLocalAddress( Socket_t xSocket, struct freertos_sockaddr *pxAddress );\r
-\r
-/* Made available when ipconfigETHERNET_DRIVER_FILTERS_PACKETS is set to 1. */\r
-BaseType_t xPortHasUDPSocket( uint16_t usPortNr );\r
-\r
-#if ipconfigUSE_TCP == 1\r
-\r
-BaseType_t FreeRTOS_connect( Socket_t xClientSocket, struct freertos_sockaddr *pxAddress, socklen_t xAddressLength );\r
-BaseType_t FreeRTOS_listen( Socket_t xSocket, BaseType_t xBacklog );\r
-BaseType_t FreeRTOS_recv( Socket_t xSocket, void *pvBuffer, size_t xBufferLength, BaseType_t xFlags );\r
-BaseType_t FreeRTOS_send( Socket_t xSocket, const void *pvBuffer, size_t uxDataLength, BaseType_t xFlags );\r
-Socket_t FreeRTOS_accept( Socket_t xServerSocket, struct freertos_sockaddr *pxAddress, socklen_t *pxAddressLength );\r
-BaseType_t FreeRTOS_shutdown (Socket_t xSocket, BaseType_t xHow);\r
-\r
-#if( ipconfigSUPPORT_SIGNALS != 0 )\r
-       /* Send a signal to the task which is waiting for a given socket. */\r
-       BaseType_t FreeRTOS_SignalSocket( Socket_t xSocket );\r
-\r
-       /* Send a signal to the task which reads from this socket (FromISR\r
-       version). */\r
-       BaseType_t FreeRTOS_SignalSocketFromISR( Socket_t xSocket, BaseType_t *pxHigherPriorityTaskWoken );\r
-#endif /* ipconfigSUPPORT_SIGNALS */\r
-\r
-/* Return the remote address and IP port. */\r
-BaseType_t FreeRTOS_GetRemoteAddress( Socket_t xSocket, struct freertos_sockaddr *pxAddress );\r
-\r
-/* returns pdTRUE if TCP socket is connected */\r
-BaseType_t FreeRTOS_issocketconnected( Socket_t xSocket );\r
-\r
-/* returns the actual size of MSS being used */\r
-BaseType_t FreeRTOS_mss( Socket_t xSocket );\r
-\r
-/* for internal use only: return the connection status */\r
-BaseType_t FreeRTOS_connstatus( Socket_t xSocket );\r
-\r
-/* Returns the number of bytes that may be added to txStream */\r
-BaseType_t FreeRTOS_maywrite( Socket_t xSocket );\r
-\r
-/*\r
- * Two helper functions, mostly for testing\r
- * rx_size returns the number of bytes available in the Rx buffer\r
- * tx_space returns the free space in the Tx buffer\r
- */\r
-BaseType_t FreeRTOS_rx_size( Socket_t xSocket );\r
-BaseType_t FreeRTOS_tx_space( Socket_t xSocket );\r
-BaseType_t FreeRTOS_tx_size( Socket_t xSocket );\r
-\r
-/* Returns the number of outstanding bytes in txStream. */\r
-/* The function FreeRTOS_outstanding() was already implemented\r
-FreeRTOS_tx_size(). */\r
-#define FreeRTOS_outstanding( xSocket )        FreeRTOS_tx_size( xSocket )\r
-\r
-/* Returns the number of bytes in the socket's rxStream. */\r
-/* The function FreeRTOS_recvcount() was already implemented\r
-FreeRTOS_rx_size(). */\r
-#define FreeRTOS_recvcount( xSocket )  FreeRTOS_rx_size( xSocket )\r
-\r
-/*\r
- * For advanced applications only:\r
- * Get a direct pointer to the circular transmit buffer.\r
- * '*pxLength' will contain the number of bytes that may be written.\r
- */\r
-uint8_t *FreeRTOS_get_tx_head( Socket_t xSocket, BaseType_t *pxLength );\r
-\r
-#endif /* ipconfigUSE_TCP */\r
-\r
-/*\r
- * Connect / disconnect handler for a TCP socket\r
- * For example:\r
- *             static void vMyConnectHandler (Socket_t xSocket, BaseType_t ulConnected)\r
- *             {\r
- *             }\r
- *             F_TCP_UDP_Handler_t xHnd = { vMyConnectHandler };\r
- *             FreeRTOS_setsockopt( sock, 0, FREERTOS_SO_TCP_CONN_HANDLER, ( void * ) &xHnd, sizeof( xHnd ) );\r
- */\r
-\r
-typedef void (* FOnConnected_t )( Socket_t /* xSocket */, BaseType_t /* ulConnected */ );\r
-\r
-/*\r
- * Reception handler for a TCP socket\r
- * A user-proved function will be called on reception of a message\r
- * If the handler returns a positive number, the messages will not be stored\r
- * For example:\r
- *             static BaseType_t xOnTCPReceive( Socket_t xSocket, void * pData, size_t xLength )\r
- *             {\r
- *                     // handle the message\r
- *                     return 1;\r
- *             }\r
- *             F_TCP_UDP_Handler_t xHand = { xOnTCPReceive };\r
- *             FreeRTOS_setsockopt( sock, 0, FREERTOS_SO_TCP_RECV_HANDLER, ( void * ) &xHand, sizeof( xHand ) );\r
- */\r
-typedef BaseType_t (* FOnTCPReceive_t )( Socket_t /* xSocket */, void * /* pData */, size_t /* xLength */ );\r
-typedef void (* FOnTCPSent_t )( Socket_t /* xSocket */, size_t /* xLength */ );\r
-\r
-/*\r
- * Reception handler for a UDP socket\r
- * A user-proved function will be called on reception of a message\r
- * If the handler returns a positive number, the messages will not be stored\r
- */\r
-typedef BaseType_t (* FOnUDPReceive_t ) (Socket_t /* xSocket */, void * /* pData */, size_t /* xLength */,\r
-       const struct freertos_sockaddr * /* pxFrom */, const struct freertos_sockaddr * /* pxDest */ );\r
-typedef void (* FOnUDPSent_t )( Socket_t /* xSocket */, size_t /* xLength */ );\r
-\r
-\r
-typedef union xTCP_UDP_HANDLER\r
-{\r
-       FOnConnected_t  pxOnTCPConnected;       /* FREERTOS_SO_TCP_CONN_HANDLER */\r
-       FOnTCPReceive_t pxOnTCPReceive;         /* FREERTOS_SO_TCP_RECV_HANDLER */\r
-       FOnTCPSent_t    pxOnTCPSent;            /* FREERTOS_SO_TCP_SENT_HANDLER */\r
-       FOnUDPReceive_t pxOnUDPReceive;         /* FREERTOS_SO_UDP_RECV_HANDLER */\r
-       FOnUDPSent_t    pxOnUDPSent;            /* FREERTOS_SO_UDP_SENT_HANDLER */\r
-} F_TCP_UDP_Handler_t;\r
-\r
-BaseType_t FreeRTOS_setsockopt( Socket_t xSocket, int32_t lLevel, int32_t lOptionName, const void *pvOptionValue, size_t xOptionLength );\r
-BaseType_t FreeRTOS_closesocket( Socket_t xSocket );\r
-uint32_t FreeRTOS_gethostbyname( const char *pcHostName );\r
-uint32_t FreeRTOS_inet_addr( const char * pcIPAddress );\r
-\r
-/*\r
- * For the web server: borrow the circular Rx buffer for inspection\r
- * HTML driver wants to see if a sequence of 13/10/13/10 is available\r
- */\r
-const struct xSTREAM_BUFFER *FreeRTOS_get_rx_buf( Socket_t xSocket );\r
-\r
-void FreeRTOS_netstat( void );\r
-\r
-#if ipconfigSUPPORT_SELECT_FUNCTION == 1\r
-\r
-       /* For FD_SET and FD_CLR, a combination of the following bits can be used: */\r
-\r
-       typedef enum eSELECT_EVENT {\r
-               eSELECT_READ    = 0x0001,\r
-               eSELECT_WRITE   = 0x0002,\r
-               eSELECT_EXCEPT  = 0x0004,\r
-               eSELECT_INTR    = 0x0008,\r
-               eSELECT_ALL             = 0x000F,\r
-               /* Reserved for internal use: */\r
-               eSELECT_CALL_IP = 0x0010,\r
-               /* end */\r
-       } eSelectEvent_t;\r
-\r
-       SocketSet_t FreeRTOS_CreateSocketSet( void );\r
-       void FreeRTOS_DeleteSocketSet( SocketSet_t xSocketSet );\r
-       void FreeRTOS_FD_SET( Socket_t xSocket, SocketSet_t xSocketSet, EventBits_t xBitsToSet );\r
-       void FreeRTOS_FD_CLR( Socket_t xSocket, SocketSet_t xSocketSet, EventBits_t xBitsToClear );\r
-       EventBits_t FreeRTOS_FD_ISSET( Socket_t xSocket, SocketSet_t xSocketSet );\r
-       BaseType_t FreeRTOS_select( SocketSet_t xSocketSet, TickType_t xBlockTimeTicks );\r
-\r
-#endif /* ipconfigSUPPORT_SELECT_FUNCTION */\r
-\r
-#ifdef __cplusplus\r
-} // extern "C"\r
-#endif\r
-\r
-#endif /* FREERTOS_SOCKETS_H */\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
+/*
+ * FreeRTOS+TCP V2.2.0
+ * 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
+ */
+
+#ifndef FREERTOS_SOCKETS_H
+#define FREERTOS_SOCKETS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Standard includes. */
+#include <string.h>
+
+/* Application level configuration options. */
+#include "FreeRTOSIPConfig.h"
+
+#ifndef FREERTOS_IP_CONFIG_H
+       #error FreeRTOSIPConfig.h has not been included yet
+#endif
+
+/* Event bit definitions are required by the select functions. */
+#include "event_groups.h"
+
+#ifndef INC_FREERTOS_H
+       #error FreeRTOS.h must be included before FreeRTOS_Sockets.h.
+#endif
+
+#ifndef INC_TASK_H
+       #ifndef TASK_H /* For compatibility with older FreeRTOS versions. */
+               #error The FreeRTOS header file task.h must be included before FreeRTOS_Sockets.h.
+       #endif
+#endif
+
+/* Assigned to an Socket_t variable when the socket is not valid, probably
+because it could not be created. */
+#define FREERTOS_INVALID_SOCKET        ( ( Socket_t ) ~0U )
+
+/* API function error values.  As errno is supported, the FreeRTOS sockets
+functions return error codes rather than just a pass or fail indication. */
+/* HT: Extended the number of error codes, gave them positive values and if possible
+the corresponding found in errno.h
+In case of an error, API's will still return negative numbers, e.g.
+  return -pdFREERTOS_ERRNO_EWOULDBLOCK;
+in case an operation would block */
+
+/* The following defines are obsolete, please use -pdFREERTOS_ERRNO_Exxx */
+
+#define FREERTOS_SOCKET_ERROR  ( -1 )
+#define FREERTOS_EWOULDBLOCK   ( - pdFREERTOS_ERRNO_EWOULDBLOCK )
+#define FREERTOS_EINVAL                        ( - pdFREERTOS_ERRNO_EINVAL )
+#define FREERTOS_EADDRNOTAVAIL ( - pdFREERTOS_ERRNO_EADDRNOTAVAIL )
+#define FREERTOS_EADDRINUSE            ( - pdFREERTOS_ERRNO_EADDRINUSE )
+#define FREERTOS_ENOBUFS               ( - pdFREERTOS_ERRNO_ENOBUFS )
+#define FREERTOS_ENOPROTOOPT   ( - pdFREERTOS_ERRNO_ENOPROTOOPT )
+#define FREERTOS_ECLOSED               ( - pdFREERTOS_ERRNO_ENOTCONN )
+
+/* Values for the parameters to FreeRTOS_socket(), inline with the Berkeley
+standard.  See the documentation of FreeRTOS_socket() for more information. */
+#define FREERTOS_AF_INET               ( 2 )
+#define FREERTOS_AF_INET6              ( 10 )
+#define FREERTOS_SOCK_DGRAM            ( 2 )
+#define FREERTOS_IPPROTO_UDP   ( 17 )
+
+#define FREERTOS_SOCK_STREAM   ( 1 )
+#define FREERTOS_IPPROTO_TCP   ( 6 )
+/* IP packet of type "Any local network"
+ * can be used in stead of TCP for testing with sockets in raw mode
+ */
+#define FREERTOS_IPPROTO_USR_LAN  ( 63 )
+
+/* A bit value that can be passed into the FreeRTOS_sendto() function as part of
+the flags parameter.  Setting the FREERTOS_ZERO_COPY in the flags parameter
+indicates that the zero copy interface is being used.  See the documentation for
+FreeRTOS_sockets() for more information. */
+#define FREERTOS_ZERO_COPY             ( 1 )
+
+/* Values that can be passed in the option name parameter of calls to
+FreeRTOS_setsockopt(). */
+#define FREERTOS_SO_RCVTIMEO                   ( 0 )           /* Used to set the receive time out. */
+#define FREERTOS_SO_SNDTIMEO                   ( 1 )           /* Used to set the send time out. */
+#define FREERTOS_SO_UDPCKSUM_OUT               ( 2 )           /* Used to turn the use of the UDP checksum by a socket on or off.  This also doubles as part of an 8-bit bitwise socket option. */
+#if( ipconfigSOCKET_HAS_USER_SEMAPHORE == 1 )
+       #define FREERTOS_SO_SET_SEMAPHORE       ( 3 )           /* Used to set a user's semaphore */
+#endif
+#define FREERTOS_SO_SNDBUF                             ( 4 )           /* Set the size of the send buffer (TCP only) */
+#define FREERTOS_SO_RCVBUF                             ( 5 )           /* Set the size of the receive buffer (TCP only) */
+
+#if ipconfigUSE_CALLBACKS == 1
+       #define FREERTOS_SO_TCP_CONN_HANDLER    ( 6 )           /* Install a callback for (dis) connection events. Supply pointer to 'F_TCP_UDP_Handler_t' (see below) */
+       #define FREERTOS_SO_TCP_RECV_HANDLER    ( 7 )           /* Install a callback for receiving TCP data. Supply pointer to 'F_TCP_UDP_Handler_t' (see below) */
+       #define FREERTOS_SO_TCP_SENT_HANDLER    ( 8 )           /* Install a callback for sending TCP data. Supply pointer to 'F_TCP_UDP_Handler_t' (see below) */
+       #define FREERTOS_SO_UDP_RECV_HANDLER    ( 9 )           /* Install a callback for receiving UDP data. Supply pointer to 'F_TCP_UDP_Handler_t' (see below) */
+       #define FREERTOS_SO_UDP_SENT_HANDLER    ( 10 )          /* Install a callback for sending UDP data. Supply pointer to 'F_TCP_UDP_Handler_t' (see below) */
+#endif /* ipconfigUSE_CALLBACKS */
+
+#define FREERTOS_SO_REUSE_LISTEN_SOCKET        ( 11 )          /* When a listening socket gets connected, do not create a new one but re-use it */
+#define FREERTOS_SO_CLOSE_AFTER_SEND   ( 12 )          /* As soon as the last byte has been transmitted, finalise the connection */
+#define FREERTOS_SO_WIN_PROPERTIES             ( 13 )          /* Set all buffer and window properties in one call, parameter is pointer to WinProperties_t */
+#define FREERTOS_SO_SET_FULL_SIZE              ( 14 )          /* Refuse to send packets smaller than MSS  */
+
+#define FREERTOS_SO_STOP_RX                            ( 15 )          /* Temporarily hold up reception, used by streaming client */
+
+#if( ipconfigUDP_MAX_RX_PACKETS > 0 )
+       #define FREERTOS_SO_UDP_MAX_RX_PACKETS  ( 16 )          /* This option helps to limit the maximum number of packets a UDP socket will buffer */
+#endif
+
+#if( ipconfigSOCKET_HAS_USER_WAKE_CALLBACK == 1 )
+       #define FREERTOS_SO_WAKEUP_CALLBACK     ( 17 )
+#endif
+
+#define FREERTOS_SO_SET_LOW_HIGH_WATER ( 18 )
+
+#define FREERTOS_NOT_LAST_IN_FRAGMENTED_PACKET         ( 0x80 )  /* For internal use only, but also part of an 8-bit bitwise value. */
+#define FREERTOS_FRAGMENTED_PACKET                             ( 0x40 )  /* For internal use only, but also part of an 8-bit bitwise value. */
+
+/* Values for flag for FreeRTOS_shutdown(). */
+#define FREERTOS_SHUT_RD                               ( 0 )           /* Not really at this moment, just for compatibility of the interface */
+#define FREERTOS_SHUT_WR                               ( 1 )
+#define FREERTOS_SHUT_RDWR                             ( 2 )
+
+/* Values for flag for FreeRTOS_recv(). */
+#define FREERTOS_MSG_OOB                               ( 2 )           /* process out-of-band data */
+#define FREERTOS_MSG_PEEK                              ( 4 )           /* peek at incoming message */
+#define FREERTOS_MSG_DONTROUTE                 ( 8 )           /* send without using routing tables */
+#define FREERTOS_MSG_DONTWAIT                  ( 16 )          /* Can be used with recvfrom(), sendto(), recv(), and send(). */
+
+typedef struct xWIN_PROPS {
+       /* Properties of the Tx buffer and Tx window */
+       int32_t lTxBufSize;     /* Unit: bytes */
+       int32_t lTxWinSize;     /* Unit: MSS */
+
+       /* Properties of the Rx buffer and Rx window */
+       int32_t lRxBufSize;     /* Unit: bytes */
+       int32_t lRxWinSize;     /* Unit: MSS */
+} WinProperties_t;
+
+typedef struct xLOW_HIGH_WATER {
+       /* Structure to pass for the 'FREERTOS_SO_SET_LOW_HIGH_WATER' option */
+       size_t uxLittleSpace;   /* Send a STOP when buffer space drops below X bytes */
+       size_t uxEnoughSpace;   /* Send a GO when buffer space grows above X bytes */
+} LowHighWater_t;
+
+/* For compatibility with the expected Berkeley sockets naming. */
+#define socklen_t uint32_t
+
+/* For this limited implementation, only two members are required in the
+Berkeley style sockaddr structure. */
+struct freertos_sockaddr
+{
+       /* _HT_ On 32- and 64-bit architectures, the addition of the two uint8_t
+       fields doesn't make the structure bigger, due to alignment.
+       The fields are inserted as a preparation for IPv6. */
+
+       /* sin_len and sin_family not used in the IPv4-only release. */
+       uint8_t sin_len;                /* length of this structure. */
+       uint8_t sin_family;             /* FREERTOS_AF_INET. */
+       uint16_t sin_port;
+       uint32_t sin_addr;
+};
+
+#if ipconfigBYTE_ORDER == pdFREERTOS_LITTLE_ENDIAN
+
+       #define FreeRTOS_inet_addr_quick( ucOctet0, ucOctet1, ucOctet2, ucOctet3 )                              \
+                                                                               ( ( ( ( uint32_t ) ( ucOctet3 ) ) << 24UL ) |           \
+                                                                               ( ( ( uint32_t ) ( ucOctet2 ) ) << 16UL ) |                     \
+                                                                               ( ( ( uint32_t ) ( ucOctet1 ) ) <<  8UL ) |                     \
+                                                                               ( ( uint32_t ) ( ucOctet0 ) ) )
+
+       #define FreeRTOS_inet_ntoa( ulIPAddress, pucBuffer )                                                                    \
+                                                               sprintf( ( char * ) ( pucBuffer ), "%u.%u.%u.%u",                       \
+                                                                       ( ( unsigned ) ( ( ulIPAddress ) & 0xffUL ) ),                  \
+                                                                       ( ( unsigned ) ( ( ( ulIPAddress ) >> 8 ) & 0xffUL ) ), \
+                                                                       ( ( unsigned ) ( ( ( ulIPAddress ) >> 16 ) & 0xffUL ) ),\
+                                                                       ( ( unsigned ) ( ( ulIPAddress ) >> 24 ) ) )
+
+#else /* ipconfigBYTE_ORDER */
+
+       #define FreeRTOS_inet_addr_quick( ucOctet0, ucOctet1, ucOctet2, ucOctet3 )                              \
+                                                                               ( ( ( ( uint32_t ) ( ucOctet0 ) ) << 24UL ) |           \
+                                                                               ( ( ( uint32_t ) ( ucOctet1 ) ) << 16UL ) |                     \
+                                                                               ( ( ( uint32_t ) ( ucOctet2 ) ) <<  8UL ) |                     \
+                                                                               ( ( uint32_t ) ( ucOctet3 ) ) )
+
+       #define FreeRTOS_inet_ntoa( ulIPAddress, pucBuffer )                                                                    \
+                                                               sprintf( ( char * ) ( pucBuffer ), "%u.%u.%u.%u",                       \
+                                                                       ( ( unsigned ) ( ( ulIPAddress ) >> 24 ) ),                             \
+                                                                       ( ( unsigned ) ( ( ( ulIPAddress ) >> 16 ) & 0xffUL ) ),\
+                                                                       ( ( unsigned ) ( ( ( ulIPAddress ) >> 8 ) & 0xffUL ) ), \
+                                                                       ( ( unsigned ) ( ( ulIPAddress ) & 0xffUL ) ) )
+
+#endif /* ipconfigBYTE_ORDER */
+
+/* The socket type itself. */
+struct xSOCKET;
+typedef struct xSOCKET *Socket_t;
+
+/* The SocketSet_t type is the equivalent to the fd_set type used by the
+Berkeley API. */
+struct xSOCKET_SET;
+typedef struct xSOCKET_SET *SocketSet_t;
+
+/**
+ * FULL, UP-TO-DATE AND MAINTAINED REFERENCE DOCUMENTATION FOR ALL THESE
+ * FUNCTIONS IS AVAILABLE ON THE FOLLOWING URL:
+ * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/FreeRTOS_TCP_API_Functions.html
+ */
+Socket_t FreeRTOS_socket( BaseType_t xDomain, BaseType_t xType, BaseType_t xProtocol );
+int32_t FreeRTOS_recvfrom( Socket_t xSocket, void *pvBuffer, size_t xBufferLength, BaseType_t xFlags, struct freertos_sockaddr *pxSourceAddress, socklen_t *pxSourceAddressLength );
+int32_t FreeRTOS_sendto( Socket_t xSocket, const void *pvBuffer, size_t xTotalDataLength, BaseType_t xFlags, const struct freertos_sockaddr *pxDestinationAddress, socklen_t xDestinationAddressLength );
+BaseType_t FreeRTOS_bind( Socket_t xSocket, struct freertos_sockaddr *pxAddress, socklen_t xAddressLength );
+
+/* function to get the local address and IP port */
+size_t FreeRTOS_GetLocalAddress( Socket_t xSocket, struct freertos_sockaddr *pxAddress );
+
+/* Made available when ipconfigETHERNET_DRIVER_FILTERS_PACKETS is set to 1. */
+BaseType_t xPortHasUDPSocket( uint16_t usPortNr );
+
+#if ipconfigUSE_TCP == 1
+
+BaseType_t FreeRTOS_connect( Socket_t xClientSocket, struct freertos_sockaddr *pxAddress, socklen_t xAddressLength );
+BaseType_t FreeRTOS_listen( Socket_t xSocket, BaseType_t xBacklog );
+BaseType_t FreeRTOS_recv( Socket_t xSocket, void *pvBuffer, size_t xBufferLength, BaseType_t xFlags );
+BaseType_t FreeRTOS_send( Socket_t xSocket, const void *pvBuffer, size_t uxDataLength, BaseType_t xFlags );
+Socket_t FreeRTOS_accept( Socket_t xServerSocket, struct freertos_sockaddr *pxAddress, socklen_t *pxAddressLength );
+BaseType_t FreeRTOS_shutdown (Socket_t xSocket, BaseType_t xHow);
+
+#if( ipconfigSUPPORT_SIGNALS != 0 )
+       /* Send a signal to the task which is waiting for a given socket. */
+       BaseType_t FreeRTOS_SignalSocket( Socket_t xSocket );
+
+       /* Send a signal to the task which reads from this socket (FromISR
+       version). */
+       BaseType_t FreeRTOS_SignalSocketFromISR( Socket_t xSocket, BaseType_t *pxHigherPriorityTaskWoken );
+#endif /* ipconfigSUPPORT_SIGNALS */
+
+/* Return the remote address and IP port. */
+BaseType_t FreeRTOS_GetRemoteAddress( Socket_t xSocket, struct freertos_sockaddr *pxAddress );
+
+/* returns pdTRUE if TCP socket is connected */
+BaseType_t FreeRTOS_issocketconnected( Socket_t xSocket );
+
+/* returns the actual size of MSS being used */
+BaseType_t FreeRTOS_mss( Socket_t xSocket );
+
+/* for internal use only: return the connection status */
+BaseType_t FreeRTOS_connstatus( Socket_t xSocket );
+
+/* Returns the number of bytes that may be added to txStream */
+BaseType_t FreeRTOS_maywrite( Socket_t xSocket );
+
+/*
+ * Two helper functions, mostly for testing
+ * rx_size returns the number of bytes available in the Rx buffer
+ * tx_space returns the free space in the Tx buffer
+ */
+BaseType_t FreeRTOS_rx_size( Socket_t xSocket );
+BaseType_t FreeRTOS_tx_space( Socket_t xSocket );
+BaseType_t FreeRTOS_tx_size( Socket_t xSocket );
+
+/* Returns the number of outstanding bytes in txStream. */
+/* The function FreeRTOS_outstanding() was already implemented
+FreeRTOS_tx_size(). */
+#define FreeRTOS_outstanding( xSocket )        FreeRTOS_tx_size( xSocket )
+
+/* Returns the number of bytes in the socket's rxStream. */
+/* The function FreeRTOS_recvcount() was already implemented
+FreeRTOS_rx_size(). */
+#define FreeRTOS_recvcount( xSocket )  FreeRTOS_rx_size( xSocket )
+
+/*
+ * For advanced applications only:
+ * Get a direct pointer to the circular transmit buffer.
+ * '*pxLength' will contain the number of bytes that may be written.
+ */
+uint8_t *FreeRTOS_get_tx_head( Socket_t xSocket, BaseType_t *pxLength );
+
+#endif /* ipconfigUSE_TCP */
+
+/*
+ * Connect / disconnect handler for a TCP socket
+ * For example:
+ *             static void vMyConnectHandler (Socket_t xSocket, BaseType_t ulConnected)
+ *             {
+ *             }
+ *             F_TCP_UDP_Handler_t xHnd = { vMyConnectHandler };
+ *             FreeRTOS_setsockopt( sock, 0, FREERTOS_SO_TCP_CONN_HANDLER, ( void * ) &xHnd, sizeof( xHnd ) );
+ */
+
+typedef void (* FOnConnected_t )( Socket_t /* xSocket */, BaseType_t /* ulConnected */ );
+
+/*
+ * Reception handler for a TCP socket
+ * A user-proved function will be called on reception of a message
+ * If the handler returns a positive number, the messages will not be stored
+ * For example:
+ *             static BaseType_t xOnTCPReceive( Socket_t xSocket, void * pData, size_t xLength )
+ *             {
+ *                     // handle the message
+ *                     return 1;
+ *             }
+ *             F_TCP_UDP_Handler_t xHand = { xOnTCPReceive };
+ *             FreeRTOS_setsockopt( sock, 0, FREERTOS_SO_TCP_RECV_HANDLER, ( void * ) &xHand, sizeof( xHand ) );
+ */
+typedef BaseType_t (* FOnTCPReceive_t )( Socket_t /* xSocket */, void * /* pData */, size_t /* xLength */ );
+typedef void (* FOnTCPSent_t )( Socket_t /* xSocket */, size_t /* xLength */ );
+
+/*
+ * Reception handler for a UDP socket
+ * A user-proved function will be called on reception of a message
+ * If the handler returns a positive number, the messages will not be stored
+ */
+typedef BaseType_t (* FOnUDPReceive_t ) (Socket_t /* xSocket */, void * /* pData */, size_t /* xLength */,
+       const struct freertos_sockaddr * /* pxFrom */, const struct freertos_sockaddr * /* pxDest */ );
+typedef void (* FOnUDPSent_t )( Socket_t /* xSocket */, size_t /* xLength */ );
+
+
+typedef union xTCP_UDP_HANDLER
+{
+       FOnConnected_t  pxOnTCPConnected;       /* FREERTOS_SO_TCP_CONN_HANDLER */
+       FOnTCPReceive_t pxOnTCPReceive;         /* FREERTOS_SO_TCP_RECV_HANDLER */
+       FOnTCPSent_t    pxOnTCPSent;            /* FREERTOS_SO_TCP_SENT_HANDLER */
+       FOnUDPReceive_t pxOnUDPReceive;         /* FREERTOS_SO_UDP_RECV_HANDLER */
+       FOnUDPSent_t    pxOnUDPSent;            /* FREERTOS_SO_UDP_SENT_HANDLER */
+} F_TCP_UDP_Handler_t;
+
+BaseType_t FreeRTOS_setsockopt( Socket_t xSocket, int32_t lLevel, int32_t lOptionName, const void *pvOptionValue, size_t xOptionLength );
+BaseType_t FreeRTOS_closesocket( Socket_t xSocket );
+uint32_t FreeRTOS_gethostbyname( const char *pcHostName );
+uint32_t FreeRTOS_inet_addr( const char * pcIPAddress );
+
+/*
+ * For the web server: borrow the circular Rx buffer for inspection
+ * HTML driver wants to see if a sequence of 13/10/13/10 is available
+ */
+const struct xSTREAM_BUFFER *FreeRTOS_get_rx_buf( Socket_t xSocket );
+
+void FreeRTOS_netstat( void );
+
+#if ipconfigSUPPORT_SELECT_FUNCTION == 1
+
+       /* For FD_SET and FD_CLR, a combination of the following bits can be used: */
+
+       typedef enum eSELECT_EVENT {
+               eSELECT_READ    = 0x0001,
+               eSELECT_WRITE   = 0x0002,
+               eSELECT_EXCEPT  = 0x0004,
+               eSELECT_INTR    = 0x0008,
+               eSELECT_ALL             = 0x000F,
+               /* Reserved for internal use: */
+               eSELECT_CALL_IP = 0x0010,
+               /* end */
+       } eSelectEvent_t;
+
+       SocketSet_t FreeRTOS_CreateSocketSet( void );
+       void FreeRTOS_DeleteSocketSet( SocketSet_t xSocketSet );
+       void FreeRTOS_FD_SET( Socket_t xSocket, SocketSet_t xSocketSet, EventBits_t xBitsToSet );
+       void FreeRTOS_FD_CLR( Socket_t xSocket, SocketSet_t xSocketSet, EventBits_t xBitsToClear );
+       EventBits_t FreeRTOS_FD_ISSET( Socket_t xSocket, SocketSet_t xSocketSet );
+       BaseType_t FreeRTOS_select( SocketSet_t xSocketSet, TickType_t xBlockTimeTicks );
+
+#endif /* ipconfigSUPPORT_SELECT_FUNCTION */
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
+
+#endif /* FREERTOS_SOCKETS_H */
+
+
+
+
+
+
+
+
+
+
+
+
+
index 95bbbdf0a80198e8c05045108036ae2f775c2810..9698227c611d99e3cfa2504a4bb4fb43e4722cc9 100644 (file)
-/*\r
- * FreeRTOS+TCP V2.2.0\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://aws.amazon.com/freertos\r
- * http://www.FreeRTOS.org\r
- */\r
-\r
-/*\r
- *     FreeRTOS_Stream_Buffer.h\r
- *\r
- *     A cicular character buffer\r
- *     An implementation of a circular buffer without a length field\r
- *     If LENGTH defines the size of the buffer, a maximum of (LENGT-1) bytes can be stored\r
- *     In order to add or read data from the buffer, memcpy() will be called at most 2 times\r
- */\r
-\r
-#ifndef FREERTOS_STREAM_BUFFER_H\r
-#define        FREERTOS_STREAM_BUFFER_H\r
-\r
-#ifdef __cplusplus\r
-extern "C" {\r
-#endif\r
-\r
-typedef struct xSTREAM_BUFFER {\r
-       volatile size_t uxTail;         /* next item to read */\r
-       volatile size_t uxMid;          /* iterator within the valid items */\r
-       volatile size_t uxHead;         /* next position store a new item */\r
-       volatile size_t uxFront;        /* iterator within the free space */\r
-       size_t LENGTH;                          /* const value: number of reserved elements */\r
-       uint8_t ucArray[ sizeof( size_t ) ];\r
-} StreamBuffer_t;\r
-\r
-static portINLINE void vStreamBufferClear( StreamBuffer_t *pxBuffer );\r
-static portINLINE void vStreamBufferClear( StreamBuffer_t *pxBuffer )\r
-{\r
-       /* Make the circular buffer empty */\r
-       pxBuffer->uxHead = 0u;\r
-       pxBuffer->uxTail = 0u;\r
-       pxBuffer->uxFront = 0u;\r
-       pxBuffer->uxMid = 0u;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static portINLINE size_t uxStreamBufferSpace( const StreamBuffer_t *pxBuffer, const size_t uxLower, const size_t uxUpper );\r
-static portINLINE size_t uxStreamBufferSpace( const StreamBuffer_t *pxBuffer, const size_t uxLower, const size_t uxUpper )\r
-{\r
-/* Returns the space between uxLower and uxUpper, which equals to the distance minus 1 */\r
-size_t uxCount;\r
-\r
-       uxCount = pxBuffer->LENGTH + uxUpper - uxLower - 1u;\r
-       if( uxCount >= pxBuffer->LENGTH )\r
-       {\r
-               uxCount -= pxBuffer->LENGTH;\r
-       }\r
-\r
-       return uxCount;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static portINLINE size_t uxStreamBufferDistance( const StreamBuffer_t *pxBuffer, const size_t uxLower, const size_t uxUpper );\r
-static portINLINE size_t uxStreamBufferDistance( const StreamBuffer_t *pxBuffer, const size_t uxLower, const size_t uxUpper )\r
-{\r
-/* Returns the distance between uxLower and uxUpper */\r
-size_t uxCount;\r
-\r
-       uxCount = pxBuffer->LENGTH + uxUpper - uxLower;\r
-       if ( uxCount >= pxBuffer->LENGTH )\r
-       {\r
-               uxCount -= pxBuffer->LENGTH;\r
-       }\r
-\r
-       return uxCount;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static portINLINE size_t uxStreamBufferGetSpace( const StreamBuffer_t *pxBuffer );\r
-static portINLINE size_t uxStreamBufferGetSpace( const StreamBuffer_t *pxBuffer )\r
-{\r
-/* Returns the number of items which can still be added to uxHead\r
-before hitting on uxTail */\r
-size_t uxHead = pxBuffer->uxHead;\r
-size_t uxTail = pxBuffer->uxTail;\r
-\r
-       return uxStreamBufferSpace( pxBuffer, uxHead, uxTail );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static portINLINE size_t uxStreamBufferFrontSpace( const StreamBuffer_t *pxBuffer );\r
-static portINLINE size_t uxStreamBufferFrontSpace( const StreamBuffer_t *pxBuffer )\r
-{\r
-/* Distance between uxFront and uxTail\r
-or the number of items which can still be added to uxFront,\r
-before hitting on uxTail */\r
-\r
-size_t uxFront = pxBuffer->uxFront;\r
-size_t uxTail = pxBuffer->uxTail;\r
-\r
-       return uxStreamBufferSpace( pxBuffer, uxFront, uxTail );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static portINLINE size_t uxStreamBufferGetSize( const StreamBuffer_t *pxBuffer );\r
-static portINLINE size_t uxStreamBufferGetSize( const StreamBuffer_t *pxBuffer )\r
-{\r
-/* Returns the number of items which can be read from uxTail\r
-before reaching uxHead */\r
-size_t uxHead = pxBuffer->uxHead;\r
-size_t uxTail = pxBuffer->uxTail;\r
-\r
-       return uxStreamBufferDistance( pxBuffer, uxTail, uxHead );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static portINLINE size_t uxStreamBufferMidSpace( const StreamBuffer_t *pxBuffer );\r
-static portINLINE size_t uxStreamBufferMidSpace( const StreamBuffer_t *pxBuffer )\r
-{\r
-/* Returns the distance between uxHead and uxMid */\r
-size_t uxHead = pxBuffer->uxHead;\r
-size_t uxMid = pxBuffer->uxMid;\r
-\r
-       return uxStreamBufferDistance( pxBuffer, uxMid, uxHead );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static portINLINE void vStreamBufferMoveMid( StreamBuffer_t *pxBuffer, size_t uxCount );\r
-static portINLINE void vStreamBufferMoveMid( StreamBuffer_t *pxBuffer, size_t uxCount )\r
-{\r
-/* Increment uxMid, but no further than uxHead */\r
-size_t uxSize = uxStreamBufferMidSpace( pxBuffer );\r
-\r
-       if( uxCount > uxSize )\r
-       {\r
-               uxCount = uxSize;\r
-       }\r
-       pxBuffer->uxMid += uxCount;\r
-       if( pxBuffer->uxMid >= pxBuffer->LENGTH )\r
-       {\r
-               pxBuffer->uxMid -= pxBuffer->LENGTH;\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static portINLINE BaseType_t xStreamBufferLessThenEqual( const StreamBuffer_t *pxBuffer, const size_t uxLeft, const size_t uxRight );\r
-static portINLINE BaseType_t xStreamBufferLessThenEqual( const StreamBuffer_t *pxBuffer, const size_t uxLeft, const size_t uxRight )\r
-{\r
-BaseType_t xReturn;\r
-size_t uxTail = pxBuffer->uxTail;\r
-\r
-       /* Returns true if ( uxLeft < uxRight ) */\r
-       if( ( uxLeft < uxTail ) ^ ( uxRight < uxTail ) )\r
-       {\r
-               if( uxRight < uxTail )\r
-               {\r
-                       xReturn = pdTRUE;\r
-               }\r
-               else\r
-               {\r
-                       xReturn = pdFALSE;\r
-               }\r
-       }\r
-       else\r
-       {\r
-               if( uxLeft <= uxRight )\r
-               {\r
-                       xReturn = pdTRUE;\r
-               }\r
-               else\r
-               {\r
-                       xReturn = pdFALSE;\r
-               }\r
-       }\r
-       return xReturn;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static portINLINE size_t uxStreamBufferGetPtr( StreamBuffer_t *pxBuffer, uint8_t **ppucData );\r
-static portINLINE size_t uxStreamBufferGetPtr( StreamBuffer_t *pxBuffer, uint8_t **ppucData )\r
-{\r
-size_t uxNextTail = pxBuffer->uxTail;\r
-size_t uxSize = uxStreamBufferGetSize( pxBuffer );\r
-\r
-       *ppucData = pxBuffer->ucArray + uxNextTail;\r
-\r
-       return FreeRTOS_min_uint32( uxSize, pxBuffer->LENGTH - uxNextTail );\r
-}\r
-\r
-/*\r
- * Add bytes to a stream buffer.\r
- *\r
- * pxBuffer -  The buffer to which the bytes will be added.\r
- * uxOffset -  If uxOffset > 0, data will be written at an offset from uxHead\r
- *                             while uxHead will not be moved yet.\r
- * pucData -   A pointer to the data to be added.\r
- * uxCount -   The number of bytes to add.\r
- */\r
-size_t uxStreamBufferAdd( StreamBuffer_t *pxBuffer, size_t uxOffset, const uint8_t *pucData, size_t uxCount );\r
-\r
-/*\r
- * Read bytes from a stream buffer.\r
- *\r
- * pxBuffer -  The buffer from which the bytes will be read.\r
- * uxOffset -  Can be used to read data located at a certain offset from 'uxTail'.\r
- * pucData -   A pointer to the buffer into which data will be read.\r
- * uxMaxCount -        The number of bytes to read.\r
- * xPeek -             If set to pdTRUE the data will remain in the buffer.\r
- */\r
-size_t uxStreamBufferGet( StreamBuffer_t *pxBuffer, size_t uxOffset, uint8_t *pucData, size_t uxMaxCount, BaseType_t xPeek );\r
-\r
-#ifdef __cplusplus\r
-} /* extern "C" */\r
-#endif\r
-\r
-#endif /* !defined( FREERTOS_STREAM_BUFFER_H ) */\r
+/*
+ * FreeRTOS+TCP V2.2.0
+ * 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
+ */
+
+/*
+ *     FreeRTOS_Stream_Buffer.h
+ *
+ *     A cicular character buffer
+ *     An implementation of a circular buffer without a length field
+ *     If LENGTH defines the size of the buffer, a maximum of (LENGT-1) bytes can be stored
+ *     In order to add or read data from the buffer, memcpy() will be called at most 2 times
+ */
+
+#ifndef FREERTOS_STREAM_BUFFER_H
+#define        FREERTOS_STREAM_BUFFER_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct xSTREAM_BUFFER {
+       volatile size_t uxTail;         /* next item to read */
+       volatile size_t uxMid;          /* iterator within the valid items */
+       volatile size_t uxHead;         /* next position store a new item */
+       volatile size_t uxFront;        /* iterator within the free space */
+       size_t LENGTH;                          /* const value: number of reserved elements */
+       uint8_t ucArray[ sizeof( size_t ) ];
+} StreamBuffer_t;
+
+static portINLINE void vStreamBufferClear( StreamBuffer_t *pxBuffer );
+static portINLINE void vStreamBufferClear( StreamBuffer_t *pxBuffer )
+{
+       /* Make the circular buffer empty */
+       pxBuffer->uxHead = 0u;
+       pxBuffer->uxTail = 0u;
+       pxBuffer->uxFront = 0u;
+       pxBuffer->uxMid = 0u;
+}
+/*-----------------------------------------------------------*/
+
+static portINLINE size_t uxStreamBufferSpace( const StreamBuffer_t *pxBuffer, const size_t uxLower, const size_t uxUpper );
+static portINLINE size_t uxStreamBufferSpace( const StreamBuffer_t *pxBuffer, const size_t uxLower, const size_t uxUpper )
+{
+/* Returns the space between uxLower and uxUpper, which equals to the distance minus 1 */
+size_t uxCount;
+
+       uxCount = pxBuffer->LENGTH + uxUpper - uxLower - 1u;
+       if( uxCount >= pxBuffer->LENGTH )
+       {
+               uxCount -= pxBuffer->LENGTH;
+       }
+
+       return uxCount;
+}
+/*-----------------------------------------------------------*/
+
+static portINLINE size_t uxStreamBufferDistance( const StreamBuffer_t *pxBuffer, const size_t uxLower, const size_t uxUpper );
+static portINLINE size_t uxStreamBufferDistance( const StreamBuffer_t *pxBuffer, const size_t uxLower, const size_t uxUpper )
+{
+/* Returns the distance between uxLower and uxUpper */
+size_t uxCount;
+
+       uxCount = pxBuffer->LENGTH + uxUpper - uxLower;
+       if ( uxCount >= pxBuffer->LENGTH )
+       {
+               uxCount -= pxBuffer->LENGTH;
+       }
+
+       return uxCount;
+}
+/*-----------------------------------------------------------*/
+
+static portINLINE size_t uxStreamBufferGetSpace( const StreamBuffer_t *pxBuffer );
+static portINLINE size_t uxStreamBufferGetSpace( const StreamBuffer_t *pxBuffer )
+{
+/* Returns the number of items which can still be added to uxHead
+before hitting on uxTail */
+size_t uxHead = pxBuffer->uxHead;
+size_t uxTail = pxBuffer->uxTail;
+
+       return uxStreamBufferSpace( pxBuffer, uxHead, uxTail );
+}
+/*-----------------------------------------------------------*/
+
+static portINLINE size_t uxStreamBufferFrontSpace( const StreamBuffer_t *pxBuffer );
+static portINLINE size_t uxStreamBufferFrontSpace( const StreamBuffer_t *pxBuffer )
+{
+/* Distance between uxFront and uxTail
+or the number of items which can still be added to uxFront,
+before hitting on uxTail */
+
+size_t uxFront = pxBuffer->uxFront;
+size_t uxTail = pxBuffer->uxTail;
+
+       return uxStreamBufferSpace( pxBuffer, uxFront, uxTail );
+}
+/*-----------------------------------------------------------*/
+
+static portINLINE size_t uxStreamBufferGetSize( const StreamBuffer_t *pxBuffer );
+static portINLINE size_t uxStreamBufferGetSize( const StreamBuffer_t *pxBuffer )
+{
+/* Returns the number of items which can be read from uxTail
+before reaching uxHead */
+size_t uxHead = pxBuffer->uxHead;
+size_t uxTail = pxBuffer->uxTail;
+
+       return uxStreamBufferDistance( pxBuffer, uxTail, uxHead );
+}
+/*-----------------------------------------------------------*/
+
+static portINLINE size_t uxStreamBufferMidSpace( const StreamBuffer_t *pxBuffer );
+static portINLINE size_t uxStreamBufferMidSpace( const StreamBuffer_t *pxBuffer )
+{
+/* Returns the distance between uxHead and uxMid */
+size_t uxHead = pxBuffer->uxHead;
+size_t uxMid = pxBuffer->uxMid;
+
+       return uxStreamBufferDistance( pxBuffer, uxMid, uxHead );
+}
+/*-----------------------------------------------------------*/
+
+static portINLINE void vStreamBufferMoveMid( StreamBuffer_t *pxBuffer, size_t uxCount );
+static portINLINE void vStreamBufferMoveMid( StreamBuffer_t *pxBuffer, size_t uxCount )
+{
+/* Increment uxMid, but no further than uxHead */
+size_t uxSize = uxStreamBufferMidSpace( pxBuffer );
+
+       if( uxCount > uxSize )
+       {
+               uxCount = uxSize;
+       }
+       pxBuffer->uxMid += uxCount;
+       if( pxBuffer->uxMid >= pxBuffer->LENGTH )
+       {
+               pxBuffer->uxMid -= pxBuffer->LENGTH;
+       }
+}
+/*-----------------------------------------------------------*/
+
+static portINLINE BaseType_t xStreamBufferLessThenEqual( const StreamBuffer_t *pxBuffer, const size_t uxLeft, const size_t uxRight );
+static portINLINE BaseType_t xStreamBufferLessThenEqual( const StreamBuffer_t *pxBuffer, const size_t uxLeft, const size_t uxRight )
+{
+BaseType_t xReturn;
+size_t uxTail = pxBuffer->uxTail;
+
+       /* Returns true if ( uxLeft < uxRight ) */
+       if( ( uxLeft < uxTail ) ^ ( uxRight < uxTail ) )
+       {
+               if( uxRight < uxTail )
+               {
+                       xReturn = pdTRUE;
+               }
+               else
+               {
+                       xReturn = pdFALSE;
+               }
+       }
+       else
+       {
+               if( uxLeft <= uxRight )
+               {
+                       xReturn = pdTRUE;
+               }
+               else
+               {
+                       xReturn = pdFALSE;
+               }
+       }
+       return xReturn;
+}
+/*-----------------------------------------------------------*/
+
+static portINLINE size_t uxStreamBufferGetPtr( StreamBuffer_t *pxBuffer, uint8_t **ppucData );
+static portINLINE size_t uxStreamBufferGetPtr( StreamBuffer_t *pxBuffer, uint8_t **ppucData )
+{
+size_t uxNextTail = pxBuffer->uxTail;
+size_t uxSize = uxStreamBufferGetSize( pxBuffer );
+
+       *ppucData = pxBuffer->ucArray + uxNextTail;
+
+       return FreeRTOS_min_uint32( uxSize, pxBuffer->LENGTH - uxNextTail );
+}
+
+/*
+ * Add bytes to a stream buffer.
+ *
+ * pxBuffer -  The buffer to which the bytes will be added.
+ * uxOffset -  If uxOffset > 0, data will be written at an offset from uxHead
+ *                             while uxHead will not be moved yet.
+ * pucData -   A pointer to the data to be added.
+ * uxCount -   The number of bytes to add.
+ */
+size_t uxStreamBufferAdd( StreamBuffer_t *pxBuffer, size_t uxOffset, const uint8_t *pucData, size_t uxCount );
+
+/*
+ * Read bytes from a stream buffer.
+ *
+ * pxBuffer -  The buffer from which the bytes will be read.
+ * uxOffset -  Can be used to read data located at a certain offset from 'uxTail'.
+ * pucData -   A pointer to the buffer into which data will be read.
+ * uxMaxCount -        The number of bytes to read.
+ * xPeek -             If set to pdTRUE the data will remain in the buffer.
+ */
+size_t uxStreamBufferGet( StreamBuffer_t *pxBuffer, size_t uxOffset, uint8_t *pucData, size_t uxMaxCount, BaseType_t xPeek );
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* !defined( FREERTOS_STREAM_BUFFER_H ) */
index 76738c4600d51d9b7650ffd7f2b3710b05db6b99..e26edf653789ae72b529f25b26e37dff2591ac97 100644 (file)
@@ -1,80 +1,80 @@
-/*\r
- * FreeRTOS+TCP V2.2.0\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://aws.amazon.com/freertos\r
- * http://www.FreeRTOS.org\r
- */\r
-\r
-#ifndef FREERTOS_TCP_IP_H\r
-#define FREERTOS_TCP_IP_H\r
-\r
-#ifdef __cplusplus\r
-extern "C" {\r
-#endif\r
-\r
-BaseType_t xProcessReceivedTCPPacket( NetworkBufferDescriptor_t *pxNetworkBuffer );\r
-\r
-typedef enum eTCP_STATE {\r
-       /* Comments about the TCP states are borrowed from the very useful\r
-        * Wiki page:\r
-        * http://en.wikipedia.org/wiki/Transmission_Control_Protocol */\r
-       eCLOSED = 0u,   /* 0 (server + client) no connection state at all. */\r
-       eTCP_LISTEN,    /* 1 (server) waiting for a connection request\r
-                                                from any remote TCP and port. */\r
-       eCONNECT_SYN,   /* 2 (client) internal state: socket wants to send\r
-                                                a connect */\r
-       eSYN_FIRST,             /* 3 (server) Just created, must ACK the SYN request. */\r
-       eSYN_RECEIVED,  /* 4 (server) waiting for a confirming connection request\r
-                                                acknowledgement after having both received and sent a connection request. */\r
-       eESTABLISHED,   /* 5 (server + client) an open connection, data received can be\r
-                                                delivered to the user. The normal state for the data transfer phase of the connection. */\r
-       eFIN_WAIT_1,    /* 6 (server + client) waiting for a connection termination request from the remote TCP,\r
-                                                or an acknowledgement of the connection termination request previously sent. */\r
-       eFIN_WAIT_2,    /* 7 (server + client) waiting for a connection termination request from the remote TCP. */\r
-       eCLOSE_WAIT,    /* 8 (server + client) waiting for a connection termination request from the local user. */\r
-       eCLOSING,               /*   (server + client) waiting for a connection termination request acknowledgement from the remote TCP. */\r
-       eLAST_ACK,              /* 9 (server + client) waiting for an acknowledgement of the connection termination request\r
-                                                previously sent to the remote TCP\r
-                                                (which includes an acknowledgement of its connection termination request). */\r
-       eTIME_WAIT,             /* 10 (either server or client) waiting for enough time to pass to be sure the remote TCP received the\r
-                                                acknowledgement of its connection termination request. [According to RFC 793 a connection can\r
-                                                stay in TIME-WAIT for a maximum of four minutes known as a MSL (maximum segment lifetime).] */\r
-} eIPTCPState_t;\r
-\r
-\r
-#ifdef __cplusplus\r
-} // extern "C"\r
-#endif\r
-\r
-#endif /* FREERTOS_TCP_IP_H */\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
+/*
+ * FreeRTOS+TCP V2.2.0
+ * 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
+ */
+
+#ifndef FREERTOS_TCP_IP_H
+#define FREERTOS_TCP_IP_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+BaseType_t xProcessReceivedTCPPacket( NetworkBufferDescriptor_t *pxNetworkBuffer );
+
+typedef enum eTCP_STATE {
+       /* Comments about the TCP states are borrowed from the very useful
+        * Wiki page:
+        * http://en.wikipedia.org/wiki/Transmission_Control_Protocol */
+       eCLOSED = 0u,   /* 0 (server + client) no connection state at all. */
+       eTCP_LISTEN,    /* 1 (server) waiting for a connection request
+                                                from any remote TCP and port. */
+       eCONNECT_SYN,   /* 2 (client) internal state: socket wants to send
+                                                a connect */
+       eSYN_FIRST,             /* 3 (server) Just created, must ACK the SYN request. */
+       eSYN_RECEIVED,  /* 4 (server) waiting for a confirming connection request
+                                                acknowledgement after having both received and sent a connection request. */
+       eESTABLISHED,   /* 5 (server + client) an open connection, data received can be
+                                                delivered to the user. The normal state for the data transfer phase of the connection. */
+       eFIN_WAIT_1,    /* 6 (server + client) waiting for a connection termination request from the remote TCP,
+                                                or an acknowledgement of the connection termination request previously sent. */
+       eFIN_WAIT_2,    /* 7 (server + client) waiting for a connection termination request from the remote TCP. */
+       eCLOSE_WAIT,    /* 8 (server + client) waiting for a connection termination request from the local user. */
+       eCLOSING,               /*   (server + client) waiting for a connection termination request acknowledgement from the remote TCP. */
+       eLAST_ACK,              /* 9 (server + client) waiting for an acknowledgement of the connection termination request
+                                                previously sent to the remote TCP
+                                                (which includes an acknowledgement of its connection termination request). */
+       eTIME_WAIT,             /* 10 (either server or client) waiting for enough time to pass to be sure the remote TCP received the
+                                                acknowledgement of its connection termination request. [According to RFC 793 a connection can
+                                                stay in TIME-WAIT for a maximum of four minutes known as a MSL (maximum segment lifetime).] */
+} eIPTCPState_t;
+
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
+
+#endif /* FREERTOS_TCP_IP_H */
+
+
+
+
+
+
+
+
+
+
+
+
+
index 9532fd159887cac0d220dff23203398f516202f9..1cb7eebc03a7b0d51200cd508dddf58301a2e1ab 100644 (file)
-/*\r
- * FreeRTOS+TCP V2.2.0\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://aws.amazon.com/freertos\r
- * http://www.FreeRTOS.org\r
- */\r
-\r
-/*\r
- *     FreeRTOS_TCP_WIN.c\r
- *  Module which handles the TCP windowing schemes for FreeRTOS-PLUS-TCP\r
- */\r
-\r
-#ifndef        FREERTOS_TCP_WIN_H\r
-#define        FREERTOS_TCP_WIN_H\r
-\r
-#ifdef __cplusplus\r
-extern "C" {\r
-#endif\r
-\r
-extern BaseType_t xTCPWindowLoggingLevel;\r
-\r
-typedef struct xTCPTimer\r
-{\r
-       uint32_t ulBorn;\r
-} TCPTimer_t;\r
-\r
-typedef struct xTCP_SEGMENT\r
-{\r
-       uint32_t ulSequenceNumber;              /* The sequence number of the first byte in this packet */\r
-       int32_t lMaxLength;                             /* Maximum space, number of bytes which can be stored in this segment */\r
-       int32_t lDataLength;                    /* Actual number of bytes */\r
-       int32_t lStreamPos;                             /* reference to the [t|r]xStream of the socket */\r
-       TCPTimer_t xTransmitTimer;              /* saves a timestamp at the moment this segment gets transmitted (TX only) */\r
-       union\r
-       {\r
-               struct\r
-               {\r
-                       uint32_t\r
-                               ucTransmitCount : 8,/* Number of times the segment has been transmitted, used to calculate the RTT */\r
-                               ucDupAckCount : 8,      /* Counts the number of times that a higher segment was ACK'd. After 3 times a Fast Retransmission takes place */\r
-                               bOutstanding : 1,       /* It the peer's turn, we're just waiting for an ACK */\r
-                               bAcked : 1,                     /* This segment has been acknowledged */\r
-                               bIsForRx : 1;           /* pdTRUE if segment is used for reception */\r
-               } bits;\r
-               uint32_t ulFlags;\r
-       } u;\r
-#if( ipconfigUSE_TCP_WIN != 0 )\r
-       struct xLIST_ITEM xQueueItem;   /* TX only: segments can be linked in one of three queues: xPriorityQueue, xTxQueue, and xWaitQueue */\r
-       struct xLIST_ITEM xListItem;    /* With this item the segment can be connected to a list, depending on who is owning it */\r
-#endif\r
-} TCPSegment_t;\r
-\r
-typedef struct xTCP_WINSIZE\r
-{\r
-       uint32_t ulRxWindowLength;\r
-       uint32_t ulTxWindowLength;\r
-} TCPWinSize_t;\r
-\r
-/*\r
- * If TCP time-stamps are being used, they will occupy 12 bytes in\r
- * each packet, and thus the message space will become smaller\r
- */\r
-/* Keep this as a multiple of 4 */\r
-#if( ipconfigUSE_TCP_WIN == 1 )\r
-       #define ipSIZE_TCP_OPTIONS      16u\r
-#else\r
-       #define ipSIZE_TCP_OPTIONS   12u\r
-#endif\r
-\r
-/*\r
- *     Every TCP connection owns a TCP window for the administration of all packets\r
- *     It owns two sets of segment descriptors, incoming and outgoing\r
- */\r
-typedef struct xTCP_WINDOW\r
-{\r
-       union\r
-       {\r
-               struct\r
-               {\r
-                       uint32_t\r
-                               bHasInit : 1,           /* The window structure has been initialised */\r
-                               bSendFullSize : 1,      /* May only send packets with a size equal to MSS (for optimisation) */\r
-                               bTimeStamps : 1;        /* Socket is supposed to use TCP time-stamps. This depends on the */\r
-               } bits;                                         /* party which opens the connection */\r
-               uint32_t ulFlags;\r
-       } u;\r
-       TCPWinSize_t xSize;\r
-       struct\r
-       {\r
-               uint32_t ulFirstSequenceNumber;  /* Logging & debug: the first segment received/sent in this connection\r
-                                                                                 * for Tx: initial send sequence number (ISS)\r
-                                                                                 * for Rx: initial receive sequence number (IRS) */\r
-               uint32_t ulCurrentSequenceNumber;/* Tx/Rx: the oldest sequence number not yet confirmed, also SND.UNA / RCV.NXT\r
-                                                                                 * In other words: the sequence number of the left side of the sliding window */\r
-               uint32_t ulFINSequenceNumber;    /* The sequence number which carried the FIN flag */\r
-               uint32_t ulHighestSequenceNumber;/* Sequence number of the right-most byte + 1 */\r
-       } rx, tx;\r
-       uint32_t ulOurSequenceNumber;           /* The SEQ number we're sending out */\r
-       uint32_t ulUserDataLength;                      /* Number of bytes in Rx buffer which may be passed to the user, after having received a 'missing packet' */\r
-       uint32_t ulNextTxSequenceNumber;        /* The sequence number given to the next byte to be added for transmission */\r
-       int32_t lSRTT;                                          /* Smoothed Round Trip Time, it may increment quickly and it decrements slower */\r
-       uint8_t ucOptionLength;                         /* Number of valid bytes in ulOptionsData[] */\r
-#if( ipconfigUSE_TCP_WIN == 1 )\r
-       List_t xPriorityQueue;                          /* Priority queue: segments which must be sent immediately */\r
-       List_t xTxQueue;                                        /* Transmit queue: segments queued for transmission */\r
-       List_t xWaitQueue;                                      /* Waiting queue:  outstanding segments */\r
-       TCPSegment_t *pxHeadSegment;            /* points to a segment which has not been transmitted and it's size is still growing (user data being added) */\r
-       uint32_t ulOptionsData[ipSIZE_TCP_OPTIONS/sizeof(uint32_t)];    /* Contains the options we send out */\r
-       List_t xTxSegments;                                     /* A linked list of all transmission segments, sorted on sequence number */\r
-       List_t xRxSegments;                                     /* A linked list of reception segments, order depends on sequence of arrival */\r
-#else\r
-       /* For tiny TCP, there is only 1 outstanding TX segment */\r
-       TCPSegment_t xTxSegment;                        /* Priority queue */\r
-#endif\r
-       uint16_t usOurPortNumber;                       /* Mostly for debugging/logging: our TCP port number */\r
-       uint16_t usPeerPortNumber;                      /* debugging/logging: the peer's TCP port number */\r
-       uint16_t usMSS;                                         /* Current accepted MSS */\r
-       uint16_t usMSSInit;                                     /* MSS as configured by the socket owner */\r
-} TCPWindow_t;\r
-\r
-\r
-/*=============================================================================\r
- *\r
- * Creation and destruction\r
- *\r
- *=============================================================================*/\r
-\r
-/* Create and initialize a window */\r
-void vTCPWindowCreate( TCPWindow_t *pxWindow, uint32_t ulRxWindowLength,\r
-       uint32_t ulTxWindowLength, uint32_t ulAckNumber, uint32_t ulSequenceNumber, uint32_t ulMSS );\r
-\r
-/* Destroy a window (always returns NULL)\r
- * It will free some resources: a collection of segments */\r
-void vTCPWindowDestroy( TCPWindow_t *pxWindow );\r
-\r
-/* Initialize a window */\r
-void vTCPWindowInit( TCPWindow_t *pxWindow, uint32_t ulAckNumber, uint32_t ulSequenceNumber, uint32_t ulMSS );\r
-\r
-/* Clean up allocated segments. Should only be called when FreeRTOS+TCP will no longer be used. */\r
-void vTCPSegmentCleanup( void );\r
-\r
-/*=============================================================================\r
- *\r
- * Rx functions\r
- *\r
- *=============================================================================*/\r
-\r
-/* if true may be passed directly to user (segment expected and window is empty)\r
- * But pxWindow->ackno should always be used to set "BUF->ackno" */\r
-int32_t lTCPWindowRxCheck( TCPWindow_t *pxWindow, uint32_t ulSequenceNumber, uint32_t ulLength, uint32_t ulSpace );\r
-\r
-/* When lTCPWindowRxCheck returned false, please call store for this unexpected data */\r
-BaseType_t xTCPWindowRxStore( TCPWindow_t *pxWindow, uint32_t ulSequenceNumber, uint32_t ulLength );\r
-\r
-/* This function will be called as soon as a FIN is received. It will return true\r
- * if there are no 'open' reception segments */\r
-BaseType_t xTCPWindowRxEmpty( TCPWindow_t *pxWindow );\r
-\r
-/* _HT_ Temporary function for testing/debugging\r
- * Not used at this moment */\r
-void vTCPWinShowSegments( TCPWindow_t *pxWindow, BaseType_t bForRx );\r
-\r
-/*=============================================================================\r
- *\r
- * Tx functions\r
- *\r
- *=============================================================================*/\r
-\r
-/* Adds data to the Tx-window */\r
-int32_t lTCPWindowTxAdd( TCPWindow_t *pxWindow, uint32_t ulLength, int32_t lPosition, int32_t lMax );\r
-\r
-/* Check data to be sent and calculate the time period we may sleep */\r
-BaseType_t xTCPWindowTxHasData( TCPWindow_t *pxWindow, uint32_t ulWindowSize, TickType_t *pulDelay );\r
-\r
-/* See if anything is left to be sent\r
- * Function will be called when a FIN has been received. Only when the TX window is clean,\r
- * it will return pdTRUE */\r
-BaseType_t xTCPWindowTxDone( TCPWindow_t *pxWindow );\r
-\r
-/* Fetches data to be sent.\r
- * apPos will point to a location with the circular data buffer: txStream */\r
-uint32_t ulTCPWindowTxGet( TCPWindow_t *pxWindow, uint32_t ulWindowSize, int32_t *plPosition );\r
-\r
-/* Receive a normal ACK */\r
-uint32_t ulTCPWindowTxAck( TCPWindow_t *pxWindow, uint32_t ulSequenceNumber );\r
-\r
-/* Receive a SACK option */\r
-uint32_t ulTCPWindowTxSack( TCPWindow_t *pxWindow, uint32_t ulFirst, uint32_t ulLast );\r
-\r
-\r
-#ifdef __cplusplus\r
-}      /* extern "C" */\r
-#endif\r
-\r
-#endif /* FREERTOS_TCP_WIN_H */\r
+/*
+ * FreeRTOS+TCP V2.2.0
+ * 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
+ */
+
+/*
+ *     FreeRTOS_TCP_WIN.c
+ *  Module which handles the TCP windowing schemes for FreeRTOS-PLUS-TCP
+ */
+
+#ifndef        FREERTOS_TCP_WIN_H
+#define        FREERTOS_TCP_WIN_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern BaseType_t xTCPWindowLoggingLevel;
+
+typedef struct xTCPTimer
+{
+       uint32_t ulBorn;
+} TCPTimer_t;
+
+typedef struct xTCP_SEGMENT
+{
+       uint32_t ulSequenceNumber;              /* The sequence number of the first byte in this packet */
+       int32_t lMaxLength;                             /* Maximum space, number of bytes which can be stored in this segment */
+       int32_t lDataLength;                    /* Actual number of bytes */
+       int32_t lStreamPos;                             /* reference to the [t|r]xStream of the socket */
+       TCPTimer_t xTransmitTimer;              /* saves a timestamp at the moment this segment gets transmitted (TX only) */
+       union
+       {
+               struct
+               {
+                       uint32_t
+                               ucTransmitCount : 8,/* Number of times the segment has been transmitted, used to calculate the RTT */
+                               ucDupAckCount : 8,      /* Counts the number of times that a higher segment was ACK'd. After 3 times a Fast Retransmission takes place */
+                               bOutstanding : 1,       /* It the peer's turn, we're just waiting for an ACK */
+                               bAcked : 1,                     /* This segment has been acknowledged */
+                               bIsForRx : 1;           /* pdTRUE if segment is used for reception */
+               } bits;
+               uint32_t ulFlags;
+       } u;
+#if( ipconfigUSE_TCP_WIN != 0 )
+       struct xLIST_ITEM xQueueItem;   /* TX only: segments can be linked in one of three queues: xPriorityQueue, xTxQueue, and xWaitQueue */
+       struct xLIST_ITEM xListItem;    /* With this item the segment can be connected to a list, depending on who is owning it */
+#endif
+} TCPSegment_t;
+
+typedef struct xTCP_WINSIZE
+{
+       uint32_t ulRxWindowLength;
+       uint32_t ulTxWindowLength;
+} TCPWinSize_t;
+
+/*
+ * If TCP time-stamps are being used, they will occupy 12 bytes in
+ * each packet, and thus the message space will become smaller
+ */
+/* Keep this as a multiple of 4 */
+#if( ipconfigUSE_TCP_WIN == 1 )
+       #define ipSIZE_TCP_OPTIONS      16u
+#else
+       #define ipSIZE_TCP_OPTIONS   12u
+#endif
+
+/*
+ *     Every TCP connection owns a TCP window for the administration of all packets
+ *     It owns two sets of segment descriptors, incoming and outgoing
+ */
+typedef struct xTCP_WINDOW
+{
+       union
+       {
+               struct
+               {
+                       uint32_t
+                               bHasInit : 1,           /* The window structure has been initialised */
+                               bSendFullSize : 1,      /* May only send packets with a size equal to MSS (for optimisation) */
+                               bTimeStamps : 1;        /* Socket is supposed to use TCP time-stamps. This depends on the */
+               } bits;                                         /* party which opens the connection */
+               uint32_t ulFlags;
+       } u;
+       TCPWinSize_t xSize;
+       struct
+       {
+               uint32_t ulFirstSequenceNumber;  /* Logging & debug: the first segment received/sent in this connection
+                                                                                 * for Tx: initial send sequence number (ISS)
+                                                                                 * for Rx: initial receive sequence number (IRS) */
+               uint32_t ulCurrentSequenceNumber;/* Tx/Rx: the oldest sequence number not yet confirmed, also SND.UNA / RCV.NXT
+                                                                                 * 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 ulHighestSequenceNumber;/* Sequence number of the right-most byte + 1 */
+       } rx, tx;
+       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 ulNextTxSequenceNumber;        /* The sequence number given to the next byte to be added for transmission */
+       int32_t lSRTT;                                          /* Smoothed Round Trip Time, it may increment quickly and it decrements slower */
+       uint8_t ucOptionLength;                         /* Number of valid bytes in ulOptionsData[] */
+#if( ipconfigUSE_TCP_WIN == 1 )
+       List_t xPriorityQueue;                          /* Priority queue: segments which must be sent immediately */
+       List_t xTxQueue;                                        /* Transmit queue: segments queued for transmission */
+       List_t xWaitQueue;                                      /* Waiting queue:  outstanding segments */
+       TCPSegment_t *pxHeadSegment;            /* points to a segment which has not been transmitted and it's size is still growing (user data being added) */
+       uint32_t ulOptionsData[ipSIZE_TCP_OPTIONS/sizeof(uint32_t)];    /* Contains the options we send out */
+       List_t xTxSegments;                                     /* A linked list of all transmission segments, sorted on sequence number */
+       List_t xRxSegments;                                     /* A linked list of reception segments, order depends on sequence of arrival */
+#else
+       /* For tiny TCP, there is only 1 outstanding TX segment */
+       TCPSegment_t xTxSegment;                        /* Priority queue */
+#endif
+       uint16_t usOurPortNumber;                       /* Mostly for debugging/logging: our TCP port number */
+       uint16_t usPeerPortNumber;                      /* debugging/logging: the peer's TCP port number */
+       uint16_t usMSS;                                         /* Current accepted MSS */
+       uint16_t usMSSInit;                                     /* MSS as configured by the socket owner */
+} TCPWindow_t;
+
+
+/*=============================================================================
+ *
+ * Creation and destruction
+ *
+ *=============================================================================*/
+
+/* Create and initialize a window */
+void vTCPWindowCreate( TCPWindow_t *pxWindow, uint32_t ulRxWindowLength,
+       uint32_t ulTxWindowLength, uint32_t ulAckNumber, uint32_t ulSequenceNumber, uint32_t ulMSS );
+
+/* Destroy a window (always returns NULL)
+ * It will free some resources: a collection of segments */
+void vTCPWindowDestroy( TCPWindow_t *pxWindow );
+
+/* Initialize a window */
+void vTCPWindowInit( TCPWindow_t *pxWindow, uint32_t ulAckNumber, uint32_t ulSequenceNumber, uint32_t ulMSS );
+
+/* Clean up allocated segments. Should only be called when FreeRTOS+TCP will no longer be used. */
+void vTCPSegmentCleanup( void );
+
+/*=============================================================================
+ *
+ * Rx functions
+ *
+ *=============================================================================*/
+
+/* if true may be passed directly to user (segment expected and window is empty)
+ * But pxWindow->ackno should always be used to set "BUF->ackno" */
+int32_t lTCPWindowRxCheck( TCPWindow_t *pxWindow, uint32_t ulSequenceNumber, uint32_t ulLength, uint32_t ulSpace );
+
+/* When lTCPWindowRxCheck returned false, please call store for this unexpected data */
+BaseType_t xTCPWindowRxStore( TCPWindow_t *pxWindow, uint32_t ulSequenceNumber, uint32_t ulLength );
+
+/* This function will be called as soon as a FIN is received. It will return true
+ * if there are no 'open' reception segments */
+BaseType_t xTCPWindowRxEmpty( TCPWindow_t *pxWindow );
+
+/* _HT_ Temporary function for testing/debugging
+ * Not used at this moment */
+void vTCPWinShowSegments( TCPWindow_t *pxWindow, BaseType_t bForRx );
+
+/*=============================================================================
+ *
+ * Tx functions
+ *
+ *=============================================================================*/
+
+/* Adds data to the Tx-window */
+int32_t lTCPWindowTxAdd( TCPWindow_t *pxWindow, uint32_t ulLength, int32_t lPosition, int32_t lMax );
+
+/* Check data to be sent and calculate the time period we may sleep */
+BaseType_t xTCPWindowTxHasData( TCPWindow_t *pxWindow, uint32_t ulWindowSize, TickType_t *pulDelay );
+
+/* See if anything is left to be sent
+ * Function will be called when a FIN has been received. Only when the TX window is clean,
+ * it will return pdTRUE */
+BaseType_t xTCPWindowTxDone( TCPWindow_t *pxWindow );
+
+/* Fetches data to be sent.
+ * apPos will point to a location with the circular data buffer: txStream */
+uint32_t ulTCPWindowTxGet( TCPWindow_t *pxWindow, uint32_t ulWindowSize, int32_t *plPosition );
+
+/* Receive a normal ACK */
+uint32_t ulTCPWindowTxAck( TCPWindow_t *pxWindow, uint32_t ulSequenceNumber );
+
+/* Receive a SACK option */
+uint32_t ulTCPWindowTxSack( TCPWindow_t *pxWindow, uint32_t ulFirst, uint32_t ulLast );
+
+
+#ifdef __cplusplus
+}      /* extern "C" */
+#endif
+
+#endif /* FREERTOS_TCP_WIN_H */
index a7463fceefb229e53a6e80018c89d984e9c765aa..cb3dd355670e51d5bbe137de14330afb2b7c045a 100644 (file)
@@ -1,56 +1,56 @@
-/*\r
- * FreeRTOS+TCP V2.2.0\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://aws.amazon.com/freertos\r
- * http://www.FreeRTOS.org\r
- */\r
-\r
-#ifndef FREERTOS_UDP_IP_H\r
-#define FREERTOS_UDP_IP_H\r
-\r
-#ifdef __cplusplus\r
-extern "C" {\r
-#endif\r
-\r
-/* Application level configuration options. */\r
-#include "FreeRTOSIPConfig.h"\r
-#include "FreeRTOSIPConfigDefaults.h"\r
-#include "IPTraceMacroDefaults.h"\r
-\r
-\r
-#ifdef __cplusplus\r
-} // extern "C"\r
-#endif\r
-\r
-#endif /* FREERTOS_UDP_IP_H */\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
+/*
+ * FreeRTOS+TCP V2.2.0
+ * 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
+ */
+
+#ifndef FREERTOS_UDP_IP_H
+#define FREERTOS_UDP_IP_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Application level configuration options. */
+#include "FreeRTOSIPConfig.h"
+#include "FreeRTOSIPConfigDefaults.h"
+#include "IPTraceMacroDefaults.h"
+
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
+
+#endif /* FREERTOS_UDP_IP_H */
+
+
+
+
+
+
+
+
+
+
+
+
+
index 534f5261d3dfa089e28cbf0c6531288012a85d92..0253a200da92b6d0e0987126d3c26aa09e5b4529 100644 (file)
@@ -1,90 +1,90 @@
-/*\r
- * FreeRTOS+TCP V2.2.0\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://aws.amazon.com/freertos\r
- * http://www.FreeRTOS.org\r
- */\r
-\r
-#ifndef FREERTOS_ERRNO_TCP\r
-#define FREERTOS_ERRNO_TCP\r
-\r
-/* The following definitions will be included in the core FreeRTOS code in\r
-future versions of FreeRTOS - hence the 'pd' (ProjDefs) prefix - at which time\r
-this file will be removed. */\r
-\r
-/* The following errno values are used by FreeRTOS+ components, not FreeRTOS\r
-itself. */\r
-\r
-/* For future compatibility (see comment above), check the definitions have not\r
-already been made. */\r
-#ifndef pdFREERTOS_ERRNO_NONE\r
-       #define pdFREERTOS_ERRNO_NONE                   0       /* No errors */\r
-       #define pdFREERTOS_ERRNO_ENOENT                 2       /* No such file or directory */\r
-       #define pdFREERTOS_ERRNO_EINTR                  4       /* Interrupted system call */\r
-       #define pdFREERTOS_ERRNO_EIO                    5       /* I/O error */\r
-       #define pdFREERTOS_ERRNO_ENXIO                  6       /* No such device or address */\r
-       #define pdFREERTOS_ERRNO_EBADF                  9       /* Bad file number */\r
-       #define pdFREERTOS_ERRNO_EAGAIN                 11      /* No more processes */\r
-       #define pdFREERTOS_ERRNO_EWOULDBLOCK    11      /* Operation would block */\r
-       #define pdFREERTOS_ERRNO_ENOMEM                 12      /* Not enough memory */\r
-       #define pdFREERTOS_ERRNO_EACCES                 13      /* Permission denied */\r
-       #define pdFREERTOS_ERRNO_EFAULT                 14      /* Bad address */\r
-       #define pdFREERTOS_ERRNO_EBUSY                  16      /* Mount device busy */\r
-       #define pdFREERTOS_ERRNO_EEXIST                 17      /* File exists */\r
-       #define pdFREERTOS_ERRNO_EXDEV                  18      /* Cross-device link */\r
-       #define pdFREERTOS_ERRNO_ENODEV                 19      /* No such device */\r
-       #define pdFREERTOS_ERRNO_ENOTDIR                20      /* Not a directory */\r
-       #define pdFREERTOS_ERRNO_EISDIR                 21      /* Is a directory */\r
-       #define pdFREERTOS_ERRNO_EINVAL                 22      /* Invalid argument */\r
-       #define pdFREERTOS_ERRNO_ENOSPC                 28      /* No space left on device */\r
-       #define pdFREERTOS_ERRNO_ESPIPE                 29      /* Illegal seek */\r
-       #define pdFREERTOS_ERRNO_EROFS                  30      /* Read only file system */\r
-       #define pdFREERTOS_ERRNO_EUNATCH                42      /* Protocol driver not attached */\r
-       #define pdFREERTOS_ERRNO_EBADE                  50      /* Invalid exchange */\r
-       #define pdFREERTOS_ERRNO_EFTYPE                 79      /* Inappropriate file type or format */\r
-       #define pdFREERTOS_ERRNO_ENMFILE                89      /* No more files */\r
-       #define pdFREERTOS_ERRNO_ENOTEMPTY              90      /* Directory not empty */\r
-       #define pdFREERTOS_ERRNO_ENAMETOOLONG   91      /* File or path name too long */\r
-       #define pdFREERTOS_ERRNO_EOPNOTSUPP             95      /* Operation not supported on transport endpoint */\r
-       #define pdFREERTOS_ERRNO_ENOBUFS                105     /* No buffer space available */\r
-       #define pdFREERTOS_ERRNO_ENOPROTOOPT    109     /* Protocol not available */\r
-       #define pdFREERTOS_ERRNO_EADDRINUSE             112     /* Address already in use */\r
-       #define pdFREERTOS_ERRNO_ETIMEDOUT              116     /* Connection timed out */\r
-       #define pdFREERTOS_ERRNO_EINPROGRESS    119     /* Connection already in progress */\r
-       #define pdFREERTOS_ERRNO_EALREADY               120     /* Socket already connected */\r
-       #define pdFREERTOS_ERRNO_EADDRNOTAVAIL  125     /* Address not available */\r
-       #define pdFREERTOS_ERRNO_EISCONN                127     /* Socket is already connected */\r
-       #define pdFREERTOS_ERRNO_ENOTCONN               128     /* Socket is not connected */\r
-       #define pdFREERTOS_ERRNO_ENOMEDIUM              135     /* No medium inserted */\r
-       #define pdFREERTOS_ERRNO_EILSEQ                 138     /* An invalid UTF-16 sequence was encountered. */\r
-       #define pdFREERTOS_ERRNO_ECANCELED              140     /* Operation canceled. */\r
-\r
-       /* The following endian values are used by FreeRTOS+ components, not FreeRTOS\r
-       itself. */\r
-       #define pdFREERTOS_LITTLE_ENDIAN        0\r
-       #define pdFREERTOS_BIG_ENDIAN           1\r
-\r
-#endif /* pdFREERTOS_ERRNO_NONE */\r
-\r
-#endif /* FREERTOS_ERRNO_TCP */\r
-\r
-\r
-\r
+/*
+ * FreeRTOS+TCP V2.2.0
+ * 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
+ */
+
+#ifndef FREERTOS_ERRNO_TCP
+#define FREERTOS_ERRNO_TCP
+
+/* The following definitions will be included in the core FreeRTOS code in
+future versions of FreeRTOS - hence the 'pd' (ProjDefs) prefix - at which time
+this file will be removed. */
+
+/* The following errno values are used by FreeRTOS+ components, not FreeRTOS
+itself. */
+
+/* For future compatibility (see comment above), check the definitions have not
+already been made. */
+#ifndef pdFREERTOS_ERRNO_NONE
+       #define pdFREERTOS_ERRNO_NONE                   0       /* No errors */
+       #define pdFREERTOS_ERRNO_ENOENT                 2       /* No such file or directory */
+       #define pdFREERTOS_ERRNO_EINTR                  4       /* Interrupted system call */
+       #define pdFREERTOS_ERRNO_EIO                    5       /* I/O error */
+       #define pdFREERTOS_ERRNO_ENXIO                  6       /* No such device or address */
+       #define pdFREERTOS_ERRNO_EBADF                  9       /* Bad file number */
+       #define pdFREERTOS_ERRNO_EAGAIN                 11      /* No more processes */
+       #define pdFREERTOS_ERRNO_EWOULDBLOCK    11      /* Operation would block */
+       #define pdFREERTOS_ERRNO_ENOMEM                 12      /* Not enough memory */
+       #define pdFREERTOS_ERRNO_EACCES                 13      /* Permission denied */
+       #define pdFREERTOS_ERRNO_EFAULT                 14      /* Bad address */
+       #define pdFREERTOS_ERRNO_EBUSY                  16      /* Mount device busy */
+       #define pdFREERTOS_ERRNO_EEXIST                 17      /* File exists */
+       #define pdFREERTOS_ERRNO_EXDEV                  18      /* Cross-device link */
+       #define pdFREERTOS_ERRNO_ENODEV                 19      /* No such device */
+       #define pdFREERTOS_ERRNO_ENOTDIR                20      /* Not a directory */
+       #define pdFREERTOS_ERRNO_EISDIR                 21      /* Is a directory */
+       #define pdFREERTOS_ERRNO_EINVAL                 22      /* Invalid argument */
+       #define pdFREERTOS_ERRNO_ENOSPC                 28      /* No space left on device */
+       #define pdFREERTOS_ERRNO_ESPIPE                 29      /* Illegal seek */
+       #define pdFREERTOS_ERRNO_EROFS                  30      /* Read only file system */
+       #define pdFREERTOS_ERRNO_EUNATCH                42      /* Protocol driver not attached */
+       #define pdFREERTOS_ERRNO_EBADE                  50      /* Invalid exchange */
+       #define pdFREERTOS_ERRNO_EFTYPE                 79      /* Inappropriate file type or format */
+       #define pdFREERTOS_ERRNO_ENMFILE                89      /* No more files */
+       #define pdFREERTOS_ERRNO_ENOTEMPTY              90      /* Directory not empty */
+       #define pdFREERTOS_ERRNO_ENAMETOOLONG   91      /* File or path name too long */
+       #define pdFREERTOS_ERRNO_EOPNOTSUPP             95      /* Operation not supported on transport endpoint */
+       #define pdFREERTOS_ERRNO_ENOBUFS                105     /* No buffer space available */
+       #define pdFREERTOS_ERRNO_ENOPROTOOPT    109     /* Protocol not available */
+       #define pdFREERTOS_ERRNO_EADDRINUSE             112     /* Address already in use */
+       #define pdFREERTOS_ERRNO_ETIMEDOUT              116     /* Connection timed out */
+       #define pdFREERTOS_ERRNO_EINPROGRESS    119     /* Connection already in progress */
+       #define pdFREERTOS_ERRNO_EALREADY               120     /* Socket already connected */
+       #define pdFREERTOS_ERRNO_EADDRNOTAVAIL  125     /* Address not available */
+       #define pdFREERTOS_ERRNO_EISCONN                127     /* Socket is already connected */
+       #define pdFREERTOS_ERRNO_ENOTCONN               128     /* Socket is not connected */
+       #define pdFREERTOS_ERRNO_ENOMEDIUM              135     /* No medium inserted */
+       #define pdFREERTOS_ERRNO_EILSEQ                 138     /* An invalid UTF-16 sequence was encountered. */
+       #define pdFREERTOS_ERRNO_ECANCELED              140     /* Operation canceled. */
+
+       /* The following endian values are used by FreeRTOS+ components, not FreeRTOS
+       itself. */
+       #define pdFREERTOS_LITTLE_ENDIAN        0
+       #define pdFREERTOS_BIG_ENDIAN           1
+
+#endif /* pdFREERTOS_ERRNO_NONE */
+
+#endif /* FREERTOS_ERRNO_TCP */
+
+
+
index 316e18f5631fe0860095ecfb5fc19fb1f62fe0c9..0af7189dde5963b46a875e88199eb4eeb0a17541 100644 (file)
-/*\r
- * FreeRTOS+TCP V2.2.0\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://aws.amazon.com/freertos\r
- * http://www.FreeRTOS.org\r
- */\r
-\r
-/* This file provides default (empty) implementations for any IP trace macros\r
-that are not defined by the user.  See\r
-http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/TCP_IP_Trace.html */\r
-\r
-#ifndef UDP_TRACE_MACRO_DEFAULTS_H\r
-#define UDP_TRACE_MACRO_DEFAULTS_H\r
-\r
-#ifndef iptraceNETWORK_DOWN\r
-       #define iptraceNETWORK_DOWN()\r
-#endif\r
-\r
-#ifndef iptraceNETWORK_BUFFER_RELEASED\r
-       #define iptraceNETWORK_BUFFER_RELEASED( pxBufferAddress )\r
-#endif\r
-\r
-#ifndef iptraceNETWORK_BUFFER_OBTAINED\r
-       #define iptraceNETWORK_BUFFER_OBTAINED( pxBufferAddress )\r
-#endif\r
-\r
-#ifndef iptraceNETWORK_BUFFER_OBTAINED_FROM_ISR\r
-       #define iptraceNETWORK_BUFFER_OBTAINED_FROM_ISR( pxBufferAddress )\r
-#endif\r
-\r
-#ifndef iptraceFAILED_TO_OBTAIN_NETWORK_BUFFER\r
-       #define iptraceFAILED_TO_OBTAIN_NETWORK_BUFFER()\r
-#endif\r
-\r
-#ifndef iptraceFAILED_TO_OBTAIN_NETWORK_BUFFER_FROM_ISR\r
-       #define iptraceFAILED_TO_OBTAIN_NETWORK_BUFFER_FROM_ISR()\r
-#endif\r
-\r
-#ifndef iptraceCREATING_ARP_REQUEST\r
-       #define iptraceCREATING_ARP_REQUEST( ulIPAddress )\r
-#endif\r
-\r
-#ifndef iptraceARP_TABLE_ENTRY_WILL_EXPIRE\r
-       #define iptraceARP_TABLE_ENTRY_WILL_EXPIRE( ulIPAddress )\r
-#endif\r
-\r
-#ifndef iptraceARP_TABLE_ENTRY_EXPIRED\r
-       #define iptraceARP_TABLE_ENTRY_EXPIRED( ulIPAddress )\r
-#endif\r
-\r
-#ifndef iptraceARP_TABLE_ENTRY_CREATED\r
-       #define iptraceARP_TABLE_ENTRY_CREATED( ulIPAddress, ucMACAddress )\r
-#endif\r
-\r
-#ifndef iptraceSENDING_UDP_PACKET\r
-       #define iptraceSENDING_UDP_PACKET( ulIPAddress )\r
-#endif\r
-\r
-#ifndef iptracePACKET_DROPPED_TO_GENERATE_ARP\r
-       #define iptracePACKET_DROPPED_TO_GENERATE_ARP( ulIPAddress )\r
-#endif\r
-\r
-#ifndef iptraceICMP_PACKET_RECEIVED\r
-       #define iptraceICMP_PACKET_RECEIVED()\r
-#endif\r
-\r
-#ifndef iptraceSENDING_PING_REPLY\r
-       #define iptraceSENDING_PING_REPLY( ulIPAddress )\r
-#endif\r
-\r
-#ifndef traceARP_PACKET_RECEIVED\r
-       #define traceARP_PACKET_RECEIVED()\r
-#endif\r
-\r
-#ifndef iptracePROCESSING_RECEIVED_ARP_REPLY\r
-       #define iptracePROCESSING_RECEIVED_ARP_REPLY( ulIPAddress )\r
-#endif\r
-\r
-#ifndef iptraceSENDING_ARP_REPLY\r
-       #define iptraceSENDING_ARP_REPLY( ulIPAddress )\r
-#endif\r
-\r
-#ifndef iptraceFAILED_TO_CREATE_SOCKET\r
-       #define iptraceFAILED_TO_CREATE_SOCKET()\r
-#endif\r
-\r
-#ifndef iptraceFAILED_TO_CREATE_EVENT_GROUP\r
-       #define iptraceFAILED_TO_CREATE_EVENT_GROUP()\r
-#endif\r
-\r
-#ifndef iptraceRECVFROM_DISCARDING_BYTES\r
-       #define iptraceRECVFROM_DISCARDING_BYTES( xNumberOfBytesDiscarded )\r
-#endif\r
-\r
-#ifndef iptraceETHERNET_RX_EVENT_LOST\r
-       #define iptraceETHERNET_RX_EVENT_LOST()\r
-#endif\r
-\r
-#ifndef iptraceSTACK_TX_EVENT_LOST\r
-       #define iptraceSTACK_TX_EVENT_LOST( xEvent )\r
-#endif\r
-\r
-#ifndef iptraceNETWORK_EVENT_RECEIVED\r
-       #define iptraceNETWORK_EVENT_RECEIVED( eEvent )\r
-#endif\r
-\r
-#ifndef iptraceBIND_FAILED\r
-       #define iptraceBIND_FAILED( xSocket, usPort )\r
-#endif\r
-\r
-#ifndef iptraceDHCP_REQUESTS_FAILED_USING_DEFAULT_IP_ADDRESS\r
-       #define iptraceDHCP_REQUESTS_FAILED_USING_DEFAULT_IP_ADDRESS( ulIPAddress )\r
-#endif\r
-\r
-#ifndef iptraceSENDING_DHCP_DISCOVER\r
-       #define iptraceSENDING_DHCP_DISCOVER()\r
-#endif\r
-\r
-#ifndef iptraceSENDING_DHCP_REQUEST\r
-       #define iptraceSENDING_DHCP_REQUEST()\r
-#endif\r
-\r
-#ifndef iptraceDHCP_SUCCEDEED\r
-       #define iptraceDHCP_SUCCEDEED( address )\r
-#endif\r
-\r
-#ifndef iptraceNETWORK_INTERFACE_TRANSMIT\r
-       #define iptraceNETWORK_INTERFACE_TRANSMIT()\r
-#endif\r
-\r
-#ifndef iptraceNETWORK_INTERFACE_RECEIVE\r
-       #define iptraceNETWORK_INTERFACE_RECEIVE()\r
-#endif\r
-\r
-#ifndef iptraceSENDING_DNS_REQUEST\r
-       #define iptraceSENDING_DNS_REQUEST()\r
-#endif\r
-\r
-#ifndef        iptraceWAITING_FOR_TX_DMA_DESCRIPTOR\r
-       #define iptraceWAITING_FOR_TX_DMA_DESCRIPTOR()\r
-#endif\r
-\r
-#ifndef ipconfigINCLUDE_EXAMPLE_FREERTOS_PLUS_TRACE_CALLS\r
-       #define ipconfigINCLUDE_EXAMPLE_FREERTOS_PLUS_TRACE_CALLS 0\r
-#endif\r
-\r
-#ifndef iptraceFAILED_TO_NOTIFY_SELECT_GROUP\r
-       #define iptraceFAILED_TO_NOTIFY_SELECT_GROUP( xSocket )\r
-#endif\r
-\r
-#ifndef pvPortMallocSocket\r
-       #define pvPortMallocSocket(xSize) pvPortMalloc( ( xSize ) )\r
-#endif\r
-\r
-#ifndef iptraceRECVFROM_TIMEOUT\r
-       #define iptraceRECVFROM_TIMEOUT()\r
-#endif\r
-\r
-#ifndef iptraceRECVFROM_INTERRUPTED\r
-       #define iptraceRECVFROM_INTERRUPTED()\r
-#endif\r
-\r
-#ifndef iptraceNO_BUFFER_FOR_SENDTO\r
-       #define iptraceNO_BUFFER_FOR_SENDTO()\r
-#endif\r
-\r
-#ifndef iptraceSENDTO_SOCKET_NOT_BOUND\r
-       #define iptraceSENDTO_SOCKET_NOT_BOUND()\r
-#endif\r
-\r
-#ifndef iptraceSENDTO_DATA_TOO_LONG\r
-       #define iptraceSENDTO_DATA_TOO_LONG()\r
-#endif\r
-\r
-#endif /* UDP_TRACE_MACRO_DEFAULTS_H */\r
+/*
+ * FreeRTOS+TCP V2.2.0
+ * 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
+ */
+
+/* This file provides default (empty) implementations for any IP trace macros
+that are not defined by the user.  See
+http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/TCP_IP_Trace.html */
+
+#ifndef UDP_TRACE_MACRO_DEFAULTS_H
+#define UDP_TRACE_MACRO_DEFAULTS_H
+
+#ifndef iptraceNETWORK_DOWN
+       #define iptraceNETWORK_DOWN()
+#endif
+
+#ifndef iptraceNETWORK_BUFFER_RELEASED
+       #define iptraceNETWORK_BUFFER_RELEASED( pxBufferAddress )
+#endif
+
+#ifndef iptraceNETWORK_BUFFER_OBTAINED
+       #define iptraceNETWORK_BUFFER_OBTAINED( pxBufferAddress )
+#endif
+
+#ifndef iptraceNETWORK_BUFFER_OBTAINED_FROM_ISR
+       #define iptraceNETWORK_BUFFER_OBTAINED_FROM_ISR( pxBufferAddress )
+#endif
+
+#ifndef iptraceFAILED_TO_OBTAIN_NETWORK_BUFFER
+       #define iptraceFAILED_TO_OBTAIN_NETWORK_BUFFER()
+#endif
+
+#ifndef iptraceFAILED_TO_OBTAIN_NETWORK_BUFFER_FROM_ISR
+       #define iptraceFAILED_TO_OBTAIN_NETWORK_BUFFER_FROM_ISR()
+#endif
+
+#ifndef iptraceCREATING_ARP_REQUEST
+       #define iptraceCREATING_ARP_REQUEST( ulIPAddress )
+#endif
+
+#ifndef iptraceARP_TABLE_ENTRY_WILL_EXPIRE
+       #define iptraceARP_TABLE_ENTRY_WILL_EXPIRE( ulIPAddress )
+#endif
+
+#ifndef iptraceARP_TABLE_ENTRY_EXPIRED
+       #define iptraceARP_TABLE_ENTRY_EXPIRED( ulIPAddress )
+#endif
+
+#ifndef iptraceARP_TABLE_ENTRY_CREATED
+       #define iptraceARP_TABLE_ENTRY_CREATED( ulIPAddress, ucMACAddress )
+#endif
+
+#ifndef iptraceSENDING_UDP_PACKET
+       #define iptraceSENDING_UDP_PACKET( ulIPAddress )
+#endif
+
+#ifndef iptracePACKET_DROPPED_TO_GENERATE_ARP
+       #define iptracePACKET_DROPPED_TO_GENERATE_ARP( ulIPAddress )
+#endif
+
+#ifndef iptraceICMP_PACKET_RECEIVED
+       #define iptraceICMP_PACKET_RECEIVED()
+#endif
+
+#ifndef iptraceSENDING_PING_REPLY
+       #define iptraceSENDING_PING_REPLY( ulIPAddress )
+#endif
+
+#ifndef traceARP_PACKET_RECEIVED
+       #define traceARP_PACKET_RECEIVED()
+#endif
+
+#ifndef iptracePROCESSING_RECEIVED_ARP_REPLY
+       #define iptracePROCESSING_RECEIVED_ARP_REPLY( ulIPAddress )
+#endif
+
+#ifndef iptraceSENDING_ARP_REPLY
+       #define iptraceSENDING_ARP_REPLY( ulIPAddress )
+#endif
+
+#ifndef iptraceFAILED_TO_CREATE_SOCKET
+       #define iptraceFAILED_TO_CREATE_SOCKET()
+#endif
+
+#ifndef iptraceFAILED_TO_CREATE_EVENT_GROUP
+       #define iptraceFAILED_TO_CREATE_EVENT_GROUP()
+#endif
+
+#ifndef iptraceRECVFROM_DISCARDING_BYTES
+       #define iptraceRECVFROM_DISCARDING_BYTES( xNumberOfBytesDiscarded )
+#endif
+
+#ifndef iptraceETHERNET_RX_EVENT_LOST
+       #define iptraceETHERNET_RX_EVENT_LOST()
+#endif
+
+#ifndef iptraceSTACK_TX_EVENT_LOST
+       #define iptraceSTACK_TX_EVENT_LOST( xEvent )
+#endif
+
+#ifndef iptraceNETWORK_EVENT_RECEIVED
+       #define iptraceNETWORK_EVENT_RECEIVED( eEvent )
+#endif
+
+#ifndef iptraceBIND_FAILED
+       #define iptraceBIND_FAILED( xSocket, usPort )
+#endif
+
+#ifndef iptraceDHCP_REQUESTS_FAILED_USING_DEFAULT_IP_ADDRESS
+       #define iptraceDHCP_REQUESTS_FAILED_USING_DEFAULT_IP_ADDRESS( ulIPAddress )
+#endif
+
+#ifndef iptraceSENDING_DHCP_DISCOVER
+       #define iptraceSENDING_DHCP_DISCOVER()
+#endif
+
+#ifndef iptraceSENDING_DHCP_REQUEST
+       #define iptraceSENDING_DHCP_REQUEST()
+#endif
+
+#ifndef iptraceDHCP_SUCCEDEED
+       #define iptraceDHCP_SUCCEDEED( address )
+#endif
+
+#ifndef iptraceNETWORK_INTERFACE_TRANSMIT
+       #define iptraceNETWORK_INTERFACE_TRANSMIT()
+#endif
+
+#ifndef iptraceNETWORK_INTERFACE_RECEIVE
+       #define iptraceNETWORK_INTERFACE_RECEIVE()
+#endif
+
+#ifndef iptraceSENDING_DNS_REQUEST
+       #define iptraceSENDING_DNS_REQUEST()
+#endif
+
+#ifndef        iptraceWAITING_FOR_TX_DMA_DESCRIPTOR
+       #define iptraceWAITING_FOR_TX_DMA_DESCRIPTOR()
+#endif
+
+#ifndef ipconfigINCLUDE_EXAMPLE_FREERTOS_PLUS_TRACE_CALLS
+       #define ipconfigINCLUDE_EXAMPLE_FREERTOS_PLUS_TRACE_CALLS 0
+#endif
+
+#ifndef iptraceFAILED_TO_NOTIFY_SELECT_GROUP
+       #define iptraceFAILED_TO_NOTIFY_SELECT_GROUP( xSocket )
+#endif
+
+#ifndef pvPortMallocSocket
+       #define pvPortMallocSocket(xSize) pvPortMalloc( ( xSize ) )
+#endif
+
+#ifndef iptraceRECVFROM_TIMEOUT
+       #define iptraceRECVFROM_TIMEOUT()
+#endif
+
+#ifndef iptraceRECVFROM_INTERRUPTED
+       #define iptraceRECVFROM_INTERRUPTED()
+#endif
+
+#ifndef iptraceNO_BUFFER_FOR_SENDTO
+       #define iptraceNO_BUFFER_FOR_SENDTO()
+#endif
+
+#ifndef iptraceSENDTO_SOCKET_NOT_BOUND
+       #define iptraceSENDTO_SOCKET_NOT_BOUND()
+#endif
+
+#ifndef iptraceSENDTO_DATA_TOO_LONG
+       #define iptraceSENDTO_DATA_TOO_LONG()
+#endif
+
+#endif /* UDP_TRACE_MACRO_DEFAULTS_H */
index 0fcde3439ed0fd7ebb2846a7966b2982790217ed..d57e607ac67e079d883f948d6f9183761aee7260 100644 (file)
@@ -1,70 +1,70 @@
-/*\r
- * FreeRTOS+TCP V2.2.0\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://aws.amazon.com/freertos\r
- * http://www.FreeRTOS.org\r
- */\r
-\r
-#ifndef NETWORK_BUFFER_MANAGEMENT_H\r
-#define NETWORK_BUFFER_MANAGEMENT_H\r
-\r
-#ifdef __cplusplus\r
-extern "C" {\r
-#endif\r
-\r
-/* NOTE PUBLIC API FUNCTIONS. */\r
-BaseType_t xNetworkBuffersInitialise( void );\r
-NetworkBufferDescriptor_t *pxGetNetworkBufferWithDescriptor( size_t xRequestedSizeBytes, TickType_t xBlockTimeTicks );\r
-NetworkBufferDescriptor_t *pxNetworkBufferGetFromISR( size_t xRequestedSizeBytes );\r
-void vReleaseNetworkBufferAndDescriptor( NetworkBufferDescriptor_t * const pxNetworkBuffer );\r
-BaseType_t vNetworkBufferReleaseFromISR( NetworkBufferDescriptor_t * const pxNetworkBuffer );\r
-uint8_t *pucGetNetworkBuffer( size_t *pxRequestedSizeBytes );\r
-void vReleaseNetworkBuffer( uint8_t *pucEthernetBuffer );\r
-\r
-/* Get the current number of free network buffers. */\r
-UBaseType_t uxGetNumberOfFreeNetworkBuffers( void );\r
-\r
-/* Get the lowest number of free network buffers. */\r
-UBaseType_t uxGetMinimumFreeNetworkBuffers( void );\r
-\r
-/* Copy a network buffer into a bigger buffer. */\r
-NetworkBufferDescriptor_t *pxDuplicateNetworkBufferWithDescriptor( NetworkBufferDescriptor_t * const pxNetworkBuffer,\r
-       size_t uxNewLength);\r
-\r
-/* Increase the size of a Network Buffer.\r
-In case BufferAllocation_2.c is used, the new space must be allocated. */\r
-NetworkBufferDescriptor_t *pxResizeNetworkBufferWithDescriptor( NetworkBufferDescriptor_t * pxNetworkBuffer,\r
-       size_t xNewSizeBytes );\r
-\r
-#if ipconfigTCP_IP_SANITY\r
-       /*\r
-        * Check if an address is a valid pointer to a network descriptor\r
-        * by looking it up in the array of network descriptors\r
-        */\r
-       UBaseType_t bIsValidNetworkDescriptor (const NetworkBufferDescriptor_t * pxDesc);\r
-       BaseType_t prvIsFreeBuffer( const NetworkBufferDescriptor_t *pxDescr );\r
-#endif\r
-\r
-#ifdef __cplusplus\r
-} // extern "C"\r
-#endif\r
-\r
-#endif /* NETWORK_BUFFER_MANAGEMENT_H */\r
+/*
+ * FreeRTOS+TCP V2.2.0
+ * 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
+ */
+
+#ifndef NETWORK_BUFFER_MANAGEMENT_H
+#define NETWORK_BUFFER_MANAGEMENT_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* NOTE PUBLIC API FUNCTIONS. */
+BaseType_t xNetworkBuffersInitialise( void );
+NetworkBufferDescriptor_t *pxGetNetworkBufferWithDescriptor( size_t xRequestedSizeBytes, TickType_t xBlockTimeTicks );
+NetworkBufferDescriptor_t *pxNetworkBufferGetFromISR( size_t xRequestedSizeBytes );
+void vReleaseNetworkBufferAndDescriptor( NetworkBufferDescriptor_t * const pxNetworkBuffer );
+BaseType_t vNetworkBufferReleaseFromISR( NetworkBufferDescriptor_t * const pxNetworkBuffer );
+uint8_t *pucGetNetworkBuffer( size_t *pxRequestedSizeBytes );
+void vReleaseNetworkBuffer( uint8_t *pucEthernetBuffer );
+
+/* Get the current number of free network buffers. */
+UBaseType_t uxGetNumberOfFreeNetworkBuffers( void );
+
+/* Get the lowest number of free network buffers. */
+UBaseType_t uxGetMinimumFreeNetworkBuffers( void );
+
+/* Copy a network buffer into a bigger buffer. */
+NetworkBufferDescriptor_t *pxDuplicateNetworkBufferWithDescriptor( NetworkBufferDescriptor_t * const pxNetworkBuffer,
+       size_t uxNewLength);
+
+/* Increase the size of a Network Buffer.
+In case BufferAllocation_2.c is used, the new space must be allocated. */
+NetworkBufferDescriptor_t *pxResizeNetworkBufferWithDescriptor( NetworkBufferDescriptor_t * pxNetworkBuffer,
+       size_t xNewSizeBytes );
+
+#if ipconfigTCP_IP_SANITY
+       /*
+        * Check if an address is a valid pointer to a network descriptor
+        * by looking it up in the array of network descriptors
+        */
+       UBaseType_t bIsValidNetworkDescriptor (const NetworkBufferDescriptor_t * pxDesc);
+       BaseType_t prvIsFreeBuffer( const NetworkBufferDescriptor_t *pxDescr );
+#endif
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
+
+#endif /* NETWORK_BUFFER_MANAGEMENT_H */
index c3d3fb4bcb06f2995434d94779a84fb11ba9bf5a..8f1fb3219b07b7d2975c57ce9e58375c4f5ddca4 100644 (file)
@@ -1,44 +1,44 @@
-/*\r
- * FreeRTOS+TCP V2.2.0\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://aws.amazon.com/freertos\r
- * http://www.FreeRTOS.org\r
- */\r
-\r
-#ifndef NETWORK_INTERFACE_H\r
-#define NETWORK_INTERFACE_H\r
-\r
-#ifdef __cplusplus\r
-extern "C" {\r
-#endif\r
-\r
-/* NOTE PUBLIC API FUNCTIONS. */\r
-BaseType_t xNetworkInterfaceInitialise( void );\r
-BaseType_t xNetworkInterfaceOutput( NetworkBufferDescriptor_t * const pxNetworkBuffer, BaseType_t xReleaseAfterSend );\r
-void vNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] );\r
-BaseType_t xGetPhyLinkStatus( void );\r
-\r
-#ifdef __cplusplus\r
-} // extern "C"\r
-#endif\r
-\r
-#endif /* NETWORK_INTERFACE_H */\r
-\r
+/*
+ * FreeRTOS+TCP V2.2.0
+ * 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
+ */
+
+#ifndef NETWORK_INTERFACE_H
+#define NETWORK_INTERFACE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* NOTE PUBLIC API FUNCTIONS. */
+BaseType_t xNetworkInterfaceInitialise( void );
+BaseType_t xNetworkInterfaceOutput( NetworkBufferDescriptor_t * const pxNetworkBuffer, BaseType_t xReleaseAfterSend );
+void vNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] );
+BaseType_t xGetPhyLinkStatus( void );
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
+
+#endif /* NETWORK_INTERFACE_H */
+
index fa3f4333f3270f3fe14eae46cca5c3164bd3df99..e70eb80ebdb9314984236aed66c99e8f3dd13c7d 100644 (file)
-/*\r
-FreeRTOS+TCP V2.0.11\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://aws.amazon.com/freertos\r
- http://www.FreeRTOS.org\r
-*/\r
-\r
-/******************************************************************************\r
- *\r
- * See the following web page for essential buffer allocation scheme usage and\r
- * configuration details:\r
- * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/Embedded_Ethernet_Buffer_Management.html\r
- *\r
- ******************************************************************************/\r
-\r
-/* Standard includes. */\r
-#include <stdint.h>\r
-\r
-/* FreeRTOS includes. */\r
-#include "FreeRTOS.h"\r
-#include "task.h"\r
-#include "queue.h"\r
-#include "semphr.h"\r
-\r
-/* FreeRTOS+TCP includes. */\r
-#include "FreeRTOS_IP.h"\r
-#include "FreeRTOS_IP_Private.h"\r
-#include "NetworkInterface.h"\r
-#include "NetworkBufferManagement.h"\r
-\r
-/* For an Ethernet interrupt to be able to obtain a network buffer there must\r
-be at least this number of buffers available. */\r
-#define baINTERRUPT_BUFFER_GET_THRESHOLD       ( 3 )\r
-\r
-/* A list of free (available) NetworkBufferDescriptor_t structures. */\r
-static List_t xFreeBuffersList;\r
-\r
-/* Some statistics about the use of buffers. */\r
-static UBaseType_t uxMinimumFreeNetworkBuffers = 0u;\r
-\r
-/* Declares the pool of NetworkBufferDescriptor_t structures that are available\r
-to the system.  All the network buffers referenced from xFreeBuffersList exist\r
-in this array.  The array is not accessed directly except during initialisation,\r
-when the xFreeBuffersList is filled (as all the buffers are free when the system\r
-is booted). */\r
-static NetworkBufferDescriptor_t xNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ];\r
-\r
-/* This constant is defined as true to let FreeRTOS_TCP_IP.c know that the\r
-network buffers have constant size, large enough to hold the biggest Ethernet\r
-packet. No resizing will be done. */\r
-const BaseType_t xBufferAllocFixedSize = pdTRUE;\r
-\r
-/* The semaphore used to obtain network buffers. */\r
-static SemaphoreHandle_t xNetworkBufferSemaphore = NULL;\r
-\r
-#if( ipconfigTCP_IP_SANITY != 0 )\r
-       static char cIsLow = pdFALSE;\r
-       UBaseType_t bIsValidNetworkDescriptor( const NetworkBufferDescriptor_t * pxDesc );\r
-#else\r
-       static UBaseType_t bIsValidNetworkDescriptor( const NetworkBufferDescriptor_t * pxDesc );\r
-#endif /* ipconfigTCP_IP_SANITY */\r
-\r
-static void prvShowWarnings( void );\r
-\r
-/* The user can define their own ipconfigBUFFER_ALLOC_LOCK() and\r
-ipconfigBUFFER_ALLOC_UNLOCK() macros, especially for use form an ISR.  If these\r
-are not defined then default them to call the normal enter/exit critical\r
-section macros. */\r
-#if !defined( ipconfigBUFFER_ALLOC_LOCK )\r
-\r
-       #define ipconfigBUFFER_ALLOC_INIT( ) do {} while (0)\r
-       #define ipconfigBUFFER_ALLOC_LOCK_FROM_ISR()            \\r
-               UBaseType_t uxSavedInterruptStatus = ( UBaseType_t ) portSET_INTERRUPT_MASK_FROM_ISR(); \\r
-               {\r
-\r
-       #define ipconfigBUFFER_ALLOC_UNLOCK_FROM_ISR()          \\r
-                       portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus ); \\r
-               }\r
-\r
-       #define ipconfigBUFFER_ALLOC_LOCK()                                     taskENTER_CRITICAL()\r
-       #define ipconfigBUFFER_ALLOC_UNLOCK()                           taskEXIT_CRITICAL()\r
-\r
-#endif /* ipconfigBUFFER_ALLOC_LOCK */\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigTCP_IP_SANITY != 0 )\r
-\r
-       /* HT: SANITY code will be removed as soon as the library is stable\r
-        * and and ready to become public\r
-        * Function below gives information about the use of buffers */\r
-       #define WARN_LOW                ( 2 )\r
-       #define WARN_HIGH               ( ( 5 * ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ) / 10 )\r
-\r
-#endif /* ipconfigTCP_IP_SANITY */\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigTCP_IP_SANITY != 0 )\r
-\r
-       BaseType_t prvIsFreeBuffer( const NetworkBufferDescriptor_t *pxDescr )\r
-       {\r
-               return ( bIsValidNetworkDescriptor( pxDescr ) != 0 ) &&\r
-                       ( listIS_CONTAINED_WITHIN( &xFreeBuffersList, &( pxDescr->xBufferListItem ) ) != 0 );\r
-       }\r
-       /*-----------------------------------------------------------*/\r
-\r
-       static void prvShowWarnings( void )\r
-       {\r
-               UBaseType_t uxCount = uxGetNumberOfFreeNetworkBuffers( );\r
-               if( ( ( cIsLow == 0 ) && ( uxCount <= WARN_LOW ) ) || ( ( cIsLow != 0 ) && ( uxCount >= WARN_HIGH ) ) )\r
-               {\r
-                       cIsLow = !cIsLow;\r
-                       FreeRTOS_debug_printf( ( "*** Warning *** %s %lu buffers left\n", cIsLow ? "only" : "now", uxCount ) );\r
-               }\r
-       }\r
-       /*-----------------------------------------------------------*/\r
-\r
-       UBaseType_t bIsValidNetworkDescriptor( const NetworkBufferDescriptor_t * pxDesc )\r
-       {\r
-               uint32_t offset = ( uint32_t ) ( ((const char *)pxDesc) - ((const char *)xNetworkBuffers) );\r
-               if( ( offset >= sizeof( xNetworkBuffers ) ) ||\r
-                       ( ( offset % sizeof( xNetworkBuffers[0] ) ) != 0 ) )\r
-                       return pdFALSE;\r
-               return (UBaseType_t) (pxDesc - xNetworkBuffers) + 1;\r
-       }\r
-       /*-----------------------------------------------------------*/\r
-\r
-#else\r
-       static UBaseType_t bIsValidNetworkDescriptor (const NetworkBufferDescriptor_t * pxDesc)\r
-       {\r
-               ( void ) pxDesc;\r
-               return ( UBaseType_t ) pdTRUE;\r
-       }\r
-       /*-----------------------------------------------------------*/\r
-\r
-       static void prvShowWarnings( void )\r
-       {\r
-       }\r
-       /*-----------------------------------------------------------*/\r
-\r
-#endif /* ipconfigTCP_IP_SANITY */\r
-\r
-BaseType_t xNetworkBuffersInitialise( void )\r
-{\r
-BaseType_t xReturn, x;\r
-\r
-       /* Only initialise the buffers and their associated kernel objects if they\r
-       have not been initialised before. */\r
-       if( xNetworkBufferSemaphore == NULL )\r
-       {\r
-               /* In case alternative locking is used, the mutexes can be initialised\r
-               here */\r
-               ipconfigBUFFER_ALLOC_INIT();\r
-\r
-               xNetworkBufferSemaphore = xSemaphoreCreateCounting( ( UBaseType_t ) ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS, ( UBaseType_t ) ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS );\r
-               configASSERT( xNetworkBufferSemaphore );\r
-\r
-               if( xNetworkBufferSemaphore != NULL )\r
-               {\r
-                       vListInitialise( &xFreeBuffersList );\r
-\r
-                       /* Initialise all the network buffers.  The buffer storage comes\r
-                       from the network interface, and different hardware has different\r
-                       requirements. */\r
-                       vNetworkInterfaceAllocateRAMToBuffers( xNetworkBuffers );\r
-                       for( x = 0; x < ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS; x++ )\r
-                       {\r
-                               /* Initialise and set the owner of the buffer list items. */\r
-                               vListInitialiseItem( &( xNetworkBuffers[ x ].xBufferListItem ) );\r
-                               listSET_LIST_ITEM_OWNER( &( xNetworkBuffers[ x ].xBufferListItem ), &xNetworkBuffers[ x ] );\r
-\r
-                               /* Currently, all buffers are available for use. */\r
-                               vListInsert( &xFreeBuffersList, &( xNetworkBuffers[ x ].xBufferListItem ) );\r
-                       }\r
-\r
-                       uxMinimumFreeNetworkBuffers = ( UBaseType_t ) ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS;\r
-               }\r
-       }\r
-\r
-       if( xNetworkBufferSemaphore == NULL )\r
-       {\r
-               xReturn = pdFAIL;\r
-       }\r
-       else\r
-       {\r
-               xReturn = pdPASS;\r
-       }\r
-\r
-       return xReturn;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-NetworkBufferDescriptor_t *pxGetNetworkBufferWithDescriptor( size_t xRequestedSizeBytes, TickType_t xBlockTimeTicks )\r
-{\r
-NetworkBufferDescriptor_t *pxReturn = NULL;\r
-BaseType_t xInvalid = pdFALSE;\r
-UBaseType_t uxCount;\r
-\r
-       /* The current implementation only has a single size memory block, so\r
-       the requested size parameter is not used (yet). */\r
-       ( void ) xRequestedSizeBytes;\r
-\r
-       if( xNetworkBufferSemaphore != NULL )\r
-       {\r
-               /* If there is a semaphore available, there is a network buffer\r
-               available. */\r
-               if( xSemaphoreTake( xNetworkBufferSemaphore, xBlockTimeTicks ) == pdPASS )\r
-               {\r
-                       /* Protect the structure as they are accessed from tasks and\r
-                       interrupts. */\r
-                       ipconfigBUFFER_ALLOC_LOCK();\r
-                       {\r
-                               pxReturn = ( NetworkBufferDescriptor_t * ) listGET_OWNER_OF_HEAD_ENTRY( &xFreeBuffersList );\r
-\r
-                               if( ( bIsValidNetworkDescriptor( pxReturn ) != pdFALSE_UNSIGNED ) &&\r
-                                       listIS_CONTAINED_WITHIN( &xFreeBuffersList, &( pxReturn->xBufferListItem ) ) )\r
-                               {\r
-                                       uxListRemove( &( pxReturn->xBufferListItem ) );\r
-                               }\r
-                               else\r
-                               {\r
-                                       xInvalid = pdTRUE;\r
-                               }\r
-                       }\r
-                       ipconfigBUFFER_ALLOC_UNLOCK();\r
-\r
-                       if( xInvalid == pdTRUE )\r
-                       {\r
-                               /* _RB_ Can printf() be called from an interrupt?  (comment\r
-                               above says this can be called from an interrupt too) */\r
-                               /* _HT_ The function shall not be called from an ISR. Comment\r
-                               was indeed misleading. Hopefully clear now?\r
-                               So the printf()is OK here. */\r
-                               FreeRTOS_debug_printf( ( "pxGetNetworkBufferWithDescriptor: INVALID BUFFER: %p (valid %lu)\n",\r
-                                       pxReturn, bIsValidNetworkDescriptor( pxReturn ) ) );\r
-                               pxReturn = NULL;\r
-                       }\r
-                       else\r
-                       {\r
-                               /* Reading UBaseType_t, no critical section needed. */\r
-                               uxCount = listCURRENT_LIST_LENGTH( &xFreeBuffersList );\r
-\r
-                               /* For stats, latch the lowest number of network buffers since\r
-                               booting. */\r
-                               if( uxMinimumFreeNetworkBuffers > uxCount )\r
-                               {\r
-                                       uxMinimumFreeNetworkBuffers = uxCount;\r
-                               }\r
-\r
-                               pxReturn->xDataLength = xRequestedSizeBytes;\r
-\r
-                               #if( ipconfigTCP_IP_SANITY != 0 )\r
-                               {\r
-                                       prvShowWarnings();\r
-                               }\r
-                               #endif /* ipconfigTCP_IP_SANITY */\r
-\r
-                               #if( ipconfigUSE_LINKED_RX_MESSAGES != 0 )\r
-                               {\r
-                                       /* make sure the buffer is not linked */\r
-                                       pxReturn->pxNextBuffer = NULL;\r
-                               }\r
-                               #endif /* ipconfigUSE_LINKED_RX_MESSAGES */\r
-                       }\r
-                       iptraceNETWORK_BUFFER_OBTAINED( pxReturn );\r
-               }\r
-               else\r
-               {\r
-                       iptraceFAILED_TO_OBTAIN_NETWORK_BUFFER();\r
-               }\r
-       }\r
-\r
-       return pxReturn;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-NetworkBufferDescriptor_t *pxNetworkBufferGetFromISR( size_t xRequestedSizeBytes )\r
-{\r
-NetworkBufferDescriptor_t *pxReturn = NULL;\r
-\r
-       /* The current implementation only has a single size memory block, so\r
-       the requested size parameter is not used (yet). */\r
-       ( void ) xRequestedSizeBytes;\r
-\r
-       /* If there is a semaphore available then there is a buffer available, but,\r
-       as this is called from an interrupt, only take a buffer if there are at\r
-       least baINTERRUPT_BUFFER_GET_THRESHOLD buffers remaining.  This prevents,\r
-       to a certain degree at least, a rapidly executing interrupt exhausting\r
-       buffer and in so doing preventing tasks from continuing. */\r
-       if( uxQueueMessagesWaitingFromISR( ( QueueHandle_t ) xNetworkBufferSemaphore ) > ( UBaseType_t ) baINTERRUPT_BUFFER_GET_THRESHOLD )\r
-       {\r
-               if( xSemaphoreTakeFromISR( xNetworkBufferSemaphore, NULL ) == pdPASS )\r
-               {\r
-                       /* Protect the structure as it is accessed from tasks and interrupts. */\r
-                       ipconfigBUFFER_ALLOC_LOCK_FROM_ISR();\r
-                       {\r
-                               pxReturn = ( NetworkBufferDescriptor_t * ) listGET_OWNER_OF_HEAD_ENTRY( &xFreeBuffersList );\r
-                               uxListRemove( &( pxReturn->xBufferListItem ) );\r
-                       }\r
-                       ipconfigBUFFER_ALLOC_UNLOCK_FROM_ISR();\r
-\r
-                       iptraceNETWORK_BUFFER_OBTAINED_FROM_ISR( pxReturn );\r
-               }\r
-       }\r
-\r
-       if( pxReturn == NULL )\r
-       {\r
-               iptraceFAILED_TO_OBTAIN_NETWORK_BUFFER_FROM_ISR();\r
-       }\r
-\r
-       return pxReturn;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-BaseType_t vNetworkBufferReleaseFromISR( NetworkBufferDescriptor_t * const pxNetworkBuffer )\r
-{\r
-BaseType_t xHigherPriorityTaskWoken = pdFALSE;\r
-\r
-       /* Ensure the buffer is returned to the list of free buffers before the\r
-       counting semaphore is 'given' to say a buffer is available. */\r
-       ipconfigBUFFER_ALLOC_LOCK_FROM_ISR();\r
-       {\r
-               vListInsertEnd( &xFreeBuffersList, &( pxNetworkBuffer->xBufferListItem ) );\r
-       }\r
-       ipconfigBUFFER_ALLOC_UNLOCK_FROM_ISR();\r
-\r
-       xSemaphoreGiveFromISR( xNetworkBufferSemaphore, &xHigherPriorityTaskWoken );\r
-       iptraceNETWORK_BUFFER_RELEASED( pxNetworkBuffer );\r
-\r
-       return xHigherPriorityTaskWoken;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-void vReleaseNetworkBufferAndDescriptor( NetworkBufferDescriptor_t * const pxNetworkBuffer )\r
-{\r
-BaseType_t xListItemAlreadyInFreeList;\r
-\r
-       if( bIsValidNetworkDescriptor( pxNetworkBuffer ) == pdFALSE_UNSIGNED )\r
-       {\r
-               FreeRTOS_debug_printf( ( "vReleaseNetworkBufferAndDescriptor: Invalid buffer %p\n", pxNetworkBuffer ) );\r
-               return ;\r
-       }\r
-       /* Ensure the buffer is returned to the list of free buffers before the\r
-       counting semaphore is 'given' to say a buffer is available. */\r
-       ipconfigBUFFER_ALLOC_LOCK();\r
-       {\r
-               {\r
-                       xListItemAlreadyInFreeList = listIS_CONTAINED_WITHIN( &xFreeBuffersList, &( pxNetworkBuffer->xBufferListItem ) );\r
-\r
-                       if( xListItemAlreadyInFreeList == pdFALSE )\r
-                       {\r
-                               vListInsertEnd( &xFreeBuffersList, &( pxNetworkBuffer->xBufferListItem ) );\r
-                       }\r
-               }\r
-       }\r
-       ipconfigBUFFER_ALLOC_UNLOCK();\r
-\r
-       if( xListItemAlreadyInFreeList )\r
-       {\r
-               FreeRTOS_debug_printf( ( "vReleaseNetworkBufferAndDescriptor: %p ALREADY RELEASED (now %lu)\n",\r
-                       pxNetworkBuffer, uxGetNumberOfFreeNetworkBuffers( ) ) );\r
-       }\r
-       if( xListItemAlreadyInFreeList == pdFALSE )\r
-       {\r
-               xSemaphoreGive( xNetworkBufferSemaphore );\r
-               prvShowWarnings();\r
-       }\r
-       iptraceNETWORK_BUFFER_RELEASED( pxNetworkBuffer );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-UBaseType_t uxGetMinimumFreeNetworkBuffers( void )\r
-{\r
-       return uxMinimumFreeNetworkBuffers;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-UBaseType_t uxGetNumberOfFreeNetworkBuffers( void )\r
-{\r
-       return listCURRENT_LIST_LENGTH( &xFreeBuffersList );\r
-}\r
-\r
-NetworkBufferDescriptor_t *pxResizeNetworkBufferWithDescriptor( NetworkBufferDescriptor_t * pxNetworkBuffer, size_t xNewSizeBytes )\r
-{\r
-       /* In BufferAllocation_1.c all network buffer are allocated with a\r
-       maximum size of 'ipTOTAL_ETHERNET_FRAME_SIZE'.No need to resize the\r
-       network buffer. */\r
-       ( void ) xNewSizeBytes;\r
-       return pxNetworkBuffer;\r
-}\r
-\r
-/*#endif */ /* ipconfigINCLUDE_TEST_CODE */\r
+/*
+FreeRTOS+TCP V2.0.11
+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
+*/
+
+/******************************************************************************
+ *
+ * See the following web page for essential buffer allocation scheme usage and
+ * configuration details:
+ * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/Embedded_Ethernet_Buffer_Management.html
+ *
+ ******************************************************************************/
+
+/* Standard includes. */
+#include <stdint.h>
+
+/* FreeRTOS includes. */
+#include "FreeRTOS.h"
+#include "task.h"
+#include "queue.h"
+#include "semphr.h"
+
+/* FreeRTOS+TCP includes. */
+#include "FreeRTOS_IP.h"
+#include "FreeRTOS_IP_Private.h"
+#include "NetworkInterface.h"
+#include "NetworkBufferManagement.h"
+
+/* For an Ethernet interrupt to be able to obtain a network buffer there must
+be at least this number of buffers available. */
+#define baINTERRUPT_BUFFER_GET_THRESHOLD       ( 3 )
+
+/* A list of free (available) NetworkBufferDescriptor_t structures. */
+static List_t xFreeBuffersList;
+
+/* Some statistics about the use of buffers. */
+static UBaseType_t uxMinimumFreeNetworkBuffers = 0u;
+
+/* Declares the pool of NetworkBufferDescriptor_t structures that are available
+to the system.  All the network buffers referenced from xFreeBuffersList exist
+in this array.  The array is not accessed directly except during initialisation,
+when the xFreeBuffersList is filled (as all the buffers are free when the system
+is booted). */
+static NetworkBufferDescriptor_t xNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ];
+
+/* This constant is defined as true to let FreeRTOS_TCP_IP.c know that the
+network buffers have constant size, large enough to hold the biggest Ethernet
+packet. No resizing will be done. */
+const BaseType_t xBufferAllocFixedSize = pdTRUE;
+
+/* The semaphore used to obtain network buffers. */
+static SemaphoreHandle_t xNetworkBufferSemaphore = NULL;
+
+#if( ipconfigTCP_IP_SANITY != 0 )
+       static char cIsLow = pdFALSE;
+       UBaseType_t bIsValidNetworkDescriptor( const NetworkBufferDescriptor_t * pxDesc );
+#else
+       static UBaseType_t bIsValidNetworkDescriptor( const NetworkBufferDescriptor_t * pxDesc );
+#endif /* ipconfigTCP_IP_SANITY */
+
+static void prvShowWarnings( void );
+
+/* The user can define their own ipconfigBUFFER_ALLOC_LOCK() and
+ipconfigBUFFER_ALLOC_UNLOCK() macros, especially for use form an ISR.  If these
+are not defined then default them to call the normal enter/exit critical
+section macros. */
+#if !defined( ipconfigBUFFER_ALLOC_LOCK )
+
+       #define ipconfigBUFFER_ALLOC_INIT( ) do {} while (0)
+       #define ipconfigBUFFER_ALLOC_LOCK_FROM_ISR()            \
+               UBaseType_t uxSavedInterruptStatus = ( UBaseType_t ) portSET_INTERRUPT_MASK_FROM_ISR(); \
+               {
+
+       #define ipconfigBUFFER_ALLOC_UNLOCK_FROM_ISR()          \
+                       portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus ); \
+               }
+
+       #define ipconfigBUFFER_ALLOC_LOCK()                                     taskENTER_CRITICAL()
+       #define ipconfigBUFFER_ALLOC_UNLOCK()                           taskEXIT_CRITICAL()
+
+#endif /* ipconfigBUFFER_ALLOC_LOCK */
+
+/*-----------------------------------------------------------*/
+
+#if( ipconfigTCP_IP_SANITY != 0 )
+
+       /* HT: SANITY code will be removed as soon as the library is stable
+        * and and ready to become public
+        * Function below gives information about the use of buffers */
+       #define WARN_LOW                ( 2 )
+       #define WARN_HIGH               ( ( 5 * ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ) / 10 )
+
+#endif /* ipconfigTCP_IP_SANITY */
+
+/*-----------------------------------------------------------*/
+
+#if( ipconfigTCP_IP_SANITY != 0 )
+
+       BaseType_t prvIsFreeBuffer( const NetworkBufferDescriptor_t *pxDescr )
+       {
+               return ( bIsValidNetworkDescriptor( pxDescr ) != 0 ) &&
+                       ( listIS_CONTAINED_WITHIN( &xFreeBuffersList, &( pxDescr->xBufferListItem ) ) != 0 );
+       }
+       /*-----------------------------------------------------------*/
+
+       static void prvShowWarnings( void )
+       {
+               UBaseType_t uxCount = uxGetNumberOfFreeNetworkBuffers( );
+               if( ( ( cIsLow == 0 ) && ( uxCount <= WARN_LOW ) ) || ( ( cIsLow != 0 ) && ( uxCount >= WARN_HIGH ) ) )
+               {
+                       cIsLow = !cIsLow;
+                       FreeRTOS_debug_printf( ( "*** Warning *** %s %lu buffers left\n", cIsLow ? "only" : "now", uxCount ) );
+               }
+       }
+       /*-----------------------------------------------------------*/
+
+       UBaseType_t bIsValidNetworkDescriptor( const NetworkBufferDescriptor_t * pxDesc )
+       {
+               uint32_t offset = ( uint32_t ) ( ((const char *)pxDesc) - ((const char *)xNetworkBuffers) );
+               if( ( offset >= sizeof( xNetworkBuffers ) ) ||
+                       ( ( offset % sizeof( xNetworkBuffers[0] ) ) != 0 ) )
+                       return pdFALSE;
+               return (UBaseType_t) (pxDesc - xNetworkBuffers) + 1;
+       }
+       /*-----------------------------------------------------------*/
+
+#else
+       static UBaseType_t bIsValidNetworkDescriptor (const NetworkBufferDescriptor_t * pxDesc)
+       {
+               ( void ) pxDesc;
+               return ( UBaseType_t ) pdTRUE;
+       }
+       /*-----------------------------------------------------------*/
+
+       static void prvShowWarnings( void )
+       {
+       }
+       /*-----------------------------------------------------------*/
+
+#endif /* ipconfigTCP_IP_SANITY */
+
+BaseType_t xNetworkBuffersInitialise( void )
+{
+BaseType_t xReturn, x;
+
+       /* Only initialise the buffers and their associated kernel objects if they
+       have not been initialised before. */
+       if( xNetworkBufferSemaphore == NULL )
+       {
+               /* In case alternative locking is used, the mutexes can be initialised
+               here */
+               ipconfigBUFFER_ALLOC_INIT();
+
+               xNetworkBufferSemaphore = xSemaphoreCreateCounting( ( UBaseType_t ) ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS, ( UBaseType_t ) ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS );
+               configASSERT( xNetworkBufferSemaphore );
+
+               if( xNetworkBufferSemaphore != NULL )
+               {
+                       vListInitialise( &xFreeBuffersList );
+
+                       /* Initialise all the network buffers.  The buffer storage comes
+                       from the network interface, and different hardware has different
+                       requirements. */
+                       vNetworkInterfaceAllocateRAMToBuffers( xNetworkBuffers );
+                       for( x = 0; x < ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS; x++ )
+                       {
+                               /* Initialise and set the owner of the buffer list items. */
+                               vListInitialiseItem( &( xNetworkBuffers[ x ].xBufferListItem ) );
+                               listSET_LIST_ITEM_OWNER( &( xNetworkBuffers[ x ].xBufferListItem ), &xNetworkBuffers[ x ] );
+
+                               /* Currently, all buffers are available for use. */
+                               vListInsert( &xFreeBuffersList, &( xNetworkBuffers[ x ].xBufferListItem ) );
+                       }
+
+                       uxMinimumFreeNetworkBuffers = ( UBaseType_t ) ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS;
+               }
+       }
+
+       if( xNetworkBufferSemaphore == NULL )
+       {
+               xReturn = pdFAIL;
+       }
+       else
+       {
+               xReturn = pdPASS;
+       }
+
+       return xReturn;
+}
+/*-----------------------------------------------------------*/
+
+NetworkBufferDescriptor_t *pxGetNetworkBufferWithDescriptor( size_t xRequestedSizeBytes, TickType_t xBlockTimeTicks )
+{
+NetworkBufferDescriptor_t *pxReturn = NULL;
+BaseType_t xInvalid = pdFALSE;
+UBaseType_t uxCount;
+
+       /* The current implementation only has a single size memory block, so
+       the requested size parameter is not used (yet). */
+       ( void ) xRequestedSizeBytes;
+
+       if( xNetworkBufferSemaphore != NULL )
+       {
+               /* If there is a semaphore available, there is a network buffer
+               available. */
+               if( xSemaphoreTake( xNetworkBufferSemaphore, xBlockTimeTicks ) == pdPASS )
+               {
+                       /* Protect the structure as they are accessed from tasks and
+                       interrupts. */
+                       ipconfigBUFFER_ALLOC_LOCK();
+                       {
+                               pxReturn = ( NetworkBufferDescriptor_t * ) listGET_OWNER_OF_HEAD_ENTRY( &xFreeBuffersList );
+
+                               if( ( bIsValidNetworkDescriptor( pxReturn ) != pdFALSE_UNSIGNED ) &&
+                                       listIS_CONTAINED_WITHIN( &xFreeBuffersList, &( pxReturn->xBufferListItem ) ) )
+                               {
+                                       uxListRemove( &( pxReturn->xBufferListItem ) );
+                               }
+                               else
+                               {
+                                       xInvalid = pdTRUE;
+                               }
+                       }
+                       ipconfigBUFFER_ALLOC_UNLOCK();
+
+                       if( xInvalid == pdTRUE )
+                       {
+                               /* _RB_ Can printf() be called from an interrupt?  (comment
+                               above says this can be called from an interrupt too) */
+                               /* _HT_ The function shall not be called from an ISR. Comment
+                               was indeed misleading. Hopefully clear now?
+                               So the printf()is OK here. */
+                               FreeRTOS_debug_printf( ( "pxGetNetworkBufferWithDescriptor: INVALID BUFFER: %p (valid %lu)\n",
+                                       pxReturn, bIsValidNetworkDescriptor( pxReturn ) ) );
+                               pxReturn = NULL;
+                       }
+                       else
+                       {
+                               /* Reading UBaseType_t, no critical section needed. */
+                               uxCount = listCURRENT_LIST_LENGTH( &xFreeBuffersList );
+
+                               /* For stats, latch the lowest number of network buffers since
+                               booting. */
+                               if( uxMinimumFreeNetworkBuffers > uxCount )
+                               {
+                                       uxMinimumFreeNetworkBuffers = uxCount;
+                               }
+
+                               pxReturn->xDataLength = xRequestedSizeBytes;
+
+                               #if( ipconfigTCP_IP_SANITY != 0 )
+                               {
+                                       prvShowWarnings();
+                               }
+                               #endif /* ipconfigTCP_IP_SANITY */
+
+                               #if( ipconfigUSE_LINKED_RX_MESSAGES != 0 )
+                               {
+                                       /* make sure the buffer is not linked */
+                                       pxReturn->pxNextBuffer = NULL;
+                               }
+                               #endif /* ipconfigUSE_LINKED_RX_MESSAGES */
+                       }
+                       iptraceNETWORK_BUFFER_OBTAINED( pxReturn );
+               }
+               else
+               {
+                       iptraceFAILED_TO_OBTAIN_NETWORK_BUFFER();
+               }
+       }
+
+       return pxReturn;
+}
+/*-----------------------------------------------------------*/
+
+NetworkBufferDescriptor_t *pxNetworkBufferGetFromISR( size_t xRequestedSizeBytes )
+{
+NetworkBufferDescriptor_t *pxReturn = NULL;
+
+       /* The current implementation only has a single size memory block, so
+       the requested size parameter is not used (yet). */
+       ( void ) xRequestedSizeBytes;
+
+       /* If there is a semaphore available then there is a buffer available, but,
+       as this is called from an interrupt, only take a buffer if there are at
+       least baINTERRUPT_BUFFER_GET_THRESHOLD buffers remaining.  This prevents,
+       to a certain degree at least, a rapidly executing interrupt exhausting
+       buffer and in so doing preventing tasks from continuing. */
+       if( uxQueueMessagesWaitingFromISR( ( QueueHandle_t ) xNetworkBufferSemaphore ) > ( UBaseType_t ) baINTERRUPT_BUFFER_GET_THRESHOLD )
+       {
+               if( xSemaphoreTakeFromISR( xNetworkBufferSemaphore, NULL ) == pdPASS )
+               {
+                       /* Protect the structure as it is accessed from tasks and interrupts. */
+                       ipconfigBUFFER_ALLOC_LOCK_FROM_ISR();
+                       {
+                               pxReturn = ( NetworkBufferDescriptor_t * ) listGET_OWNER_OF_HEAD_ENTRY( &xFreeBuffersList );
+                               uxListRemove( &( pxReturn->xBufferListItem ) );
+                       }
+                       ipconfigBUFFER_ALLOC_UNLOCK_FROM_ISR();
+
+                       iptraceNETWORK_BUFFER_OBTAINED_FROM_ISR( pxReturn );
+               }
+       }
+
+       if( pxReturn == NULL )
+       {
+               iptraceFAILED_TO_OBTAIN_NETWORK_BUFFER_FROM_ISR();
+       }
+
+       return pxReturn;
+}
+/*-----------------------------------------------------------*/
+
+BaseType_t vNetworkBufferReleaseFromISR( NetworkBufferDescriptor_t * const pxNetworkBuffer )
+{
+BaseType_t xHigherPriorityTaskWoken = pdFALSE;
+
+       /* Ensure the buffer is returned to the list of free buffers before the
+       counting semaphore is 'given' to say a buffer is available. */
+       ipconfigBUFFER_ALLOC_LOCK_FROM_ISR();
+       {
+               vListInsertEnd( &xFreeBuffersList, &( pxNetworkBuffer->xBufferListItem ) );
+       }
+       ipconfigBUFFER_ALLOC_UNLOCK_FROM_ISR();
+
+       xSemaphoreGiveFromISR( xNetworkBufferSemaphore, &xHigherPriorityTaskWoken );
+       iptraceNETWORK_BUFFER_RELEASED( pxNetworkBuffer );
+
+       return xHigherPriorityTaskWoken;
+}
+/*-----------------------------------------------------------*/
+
+void vReleaseNetworkBufferAndDescriptor( NetworkBufferDescriptor_t * const pxNetworkBuffer )
+{
+BaseType_t xListItemAlreadyInFreeList;
+
+       if( bIsValidNetworkDescriptor( pxNetworkBuffer ) == pdFALSE_UNSIGNED )
+       {
+               FreeRTOS_debug_printf( ( "vReleaseNetworkBufferAndDescriptor: Invalid buffer %p\n", pxNetworkBuffer ) );
+               return ;
+       }
+       /* Ensure the buffer is returned to the list of free buffers before the
+       counting semaphore is 'given' to say a buffer is available. */
+       ipconfigBUFFER_ALLOC_LOCK();
+       {
+               {
+                       xListItemAlreadyInFreeList = listIS_CONTAINED_WITHIN( &xFreeBuffersList, &( pxNetworkBuffer->xBufferListItem ) );
+
+                       if( xListItemAlreadyInFreeList == pdFALSE )
+                       {
+                               vListInsertEnd( &xFreeBuffersList, &( pxNetworkBuffer->xBufferListItem ) );
+                       }
+               }
+       }
+       ipconfigBUFFER_ALLOC_UNLOCK();
+
+       if( xListItemAlreadyInFreeList )
+       {
+               FreeRTOS_debug_printf( ( "vReleaseNetworkBufferAndDescriptor: %p ALREADY RELEASED (now %lu)\n",
+                       pxNetworkBuffer, uxGetNumberOfFreeNetworkBuffers( ) ) );
+       }
+       if( xListItemAlreadyInFreeList == pdFALSE )
+       {
+               xSemaphoreGive( xNetworkBufferSemaphore );
+               prvShowWarnings();
+       }
+       iptraceNETWORK_BUFFER_RELEASED( pxNetworkBuffer );
+}
+/*-----------------------------------------------------------*/
+
+UBaseType_t uxGetMinimumFreeNetworkBuffers( void )
+{
+       return uxMinimumFreeNetworkBuffers;
+}
+/*-----------------------------------------------------------*/
+
+UBaseType_t uxGetNumberOfFreeNetworkBuffers( void )
+{
+       return listCURRENT_LIST_LENGTH( &xFreeBuffersList );
+}
+
+NetworkBufferDescriptor_t *pxResizeNetworkBufferWithDescriptor( NetworkBufferDescriptor_t * pxNetworkBuffer, size_t xNewSizeBytes )
+{
+       /* In BufferAllocation_1.c all network buffer are allocated with a
+       maximum size of 'ipTOTAL_ETHERNET_FRAME_SIZE'.No need to resize the
+       network buffer. */
+       ( void ) xNewSizeBytes;
+       return pxNetworkBuffer;
+}
+
+/*#endif */ /* ipconfigINCLUDE_TEST_CODE */
index e008da07a5fc7790073f7d0c245ea4c2e6a048f1..51f5410a40592fb9b093c0c13a03f90b20bea903 100644 (file)
-/*\r
- * FreeRTOS+TCP V2.0.11\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
- *\r
- * See the following web page for essential buffer allocation scheme usage and\r
- * configuration details:\r
- * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/Embedded_Ethernet_Buffer_Management.html\r
- *\r
- ******************************************************************************/\r
-\r
-/* THIS FILE SHOULD NOT BE USED IF THE PROJECT INCLUDES A MEMORY ALLOCATOR\r
-THAT WILL FRAGMENT THE HEAP MEMORY.  For example, heap_2 must not be used,\r
-heap_4 can be used. */\r
-\r
-\r
-/* Standard includes. */\r
-#include <stdint.h>\r
-\r
-/* FreeRTOS includes. */\r
-#include "FreeRTOS.h"\r
-#include "task.h"\r
-#include "semphr.h"\r
-\r
-/* FreeRTOS+TCP includes. */\r
-#include "FreeRTOS_IP.h"\r
-#include "FreeRTOS_UDP_IP.h"\r
-#include "FreeRTOS_IP_Private.h"\r
-#include "NetworkInterface.h"\r
-#include "NetworkBufferManagement.h"\r
-\r
-/* The obtained network buffer must be large enough to hold a packet that might\r
-replace the packet that was requested to be sent. */\r
-#if ipconfigUSE_TCP == 1\r
-       #define baMINIMAL_BUFFER_SIZE           sizeof( TCPPacket_t )\r
-#else\r
-       #define baMINIMAL_BUFFER_SIZE           sizeof( ARPPacket_t )\r
-#endif /* ipconfigUSE_TCP == 1 */\r
-\r
-/*_RB_ This is too complex not to have an explanation. */\r
-#if defined( ipconfigETHERNET_MINIMUM_PACKET_BYTES )\r
-       #define ASSERT_CONCAT_(a, b) a##b\r
-       #define ASSERT_CONCAT(a, b) ASSERT_CONCAT_(a, b)\r
-       #define STATIC_ASSERT(e) \\r
-               ;enum { ASSERT_CONCAT(assert_line_, __LINE__) = 1/(!!(e)) }\r
-\r
-       STATIC_ASSERT( ipconfigETHERNET_MINIMUM_PACKET_BYTES <= baMINIMAL_BUFFER_SIZE );\r
-#endif\r
-\r
-/* A list of free (available) NetworkBufferDescriptor_t structures. */\r
-static List_t xFreeBuffersList;\r
-\r
-/* Some statistics about the use of buffers. */\r
-static size_t uxMinimumFreeNetworkBuffers;\r
-\r
-/* Declares the pool of NetworkBufferDescriptor_t structures that are available\r
-to the system.  All the network buffers referenced from xFreeBuffersList exist\r
-in this array.  The array is not accessed directly except during initialisation,\r
-when the xFreeBuffersList is filled (as all the buffers are free when the system\r
-is booted). */\r
-static NetworkBufferDescriptor_t xNetworkBufferDescriptors[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ];\r
-\r
-/* This constant is defined as false to let FreeRTOS_TCP_IP.c know that the\r
-network buffers have a variable size: resizing may be necessary */\r
-const BaseType_t xBufferAllocFixedSize = pdFALSE;\r
-\r
-/* The semaphore used to obtain network buffers. */\r
-static SemaphoreHandle_t xNetworkBufferSemaphore = NULL;\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-BaseType_t xNetworkBuffersInitialise( void )\r
-{\r
-BaseType_t xReturn, x;\r
-\r
-       /* Only initialise the buffers and their associated kernel objects if they\r
-       have not been initialised before. */\r
-       if( xNetworkBufferSemaphore == NULL )\r
-       {\r
-               xNetworkBufferSemaphore = xSemaphoreCreateCounting( ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS, ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS );\r
-               configASSERT( xNetworkBufferSemaphore );\r
-\r
-               if( xNetworkBufferSemaphore != NULL )\r
-               {\r
-                       #if ( configQUEUE_REGISTRY_SIZE > 0 )\r
-                       {\r
-                               vQueueAddToRegistry( xNetworkBufferSemaphore, "NetBufSem" );\r
-                       }\r
-                       #endif /* configQUEUE_REGISTRY_SIZE */\r
-\r
-                       /* If the trace recorder code is included name the semaphore for viewing\r
-                       in FreeRTOS+Trace.  */\r
-                       #if( ipconfigINCLUDE_EXAMPLE_FREERTOS_PLUS_TRACE_CALLS == 1 )\r
-                       {\r
-                               extern QueueHandle_t xNetworkEventQueue;\r
-                               vTraceSetQueueName( xNetworkEventQueue, "IPStackEvent" );\r
-                               vTraceSetQueueName( xNetworkBufferSemaphore, "NetworkBufferCount" );\r
-                       }\r
-                       #endif /*  ipconfigINCLUDE_EXAMPLE_FREERTOS_PLUS_TRACE_CALLS == 1 */\r
-\r
-                       vListInitialise( &xFreeBuffersList );\r
-\r
-                       /* Initialise all the network buffers.  No storage is allocated to\r
-                       the buffers yet. */\r
-                       for( x = 0; x < ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS; x++ )\r
-                       {\r
-                               /* Initialise and set the owner of the buffer list items. */\r
-                               xNetworkBufferDescriptors[ x ].pucEthernetBuffer = NULL;\r
-                               vListInitialiseItem( &( xNetworkBufferDescriptors[ x ].xBufferListItem ) );\r
-                               listSET_LIST_ITEM_OWNER( &( xNetworkBufferDescriptors[ x ].xBufferListItem ), &xNetworkBufferDescriptors[ x ] );\r
-\r
-                               /* Currently, all buffers are available for use. */\r
-                               vListInsert( &xFreeBuffersList, &( xNetworkBufferDescriptors[ x ].xBufferListItem ) );\r
-                       }\r
-\r
-                       uxMinimumFreeNetworkBuffers = ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS;\r
-               }\r
-       }\r
-\r
-       if( xNetworkBufferSemaphore == NULL )\r
-       {\r
-               xReturn = pdFAIL;\r
-       }\r
-       else\r
-       {\r
-               xReturn = pdPASS;\r
-       }\r
-\r
-       return xReturn;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-uint8_t *pucGetNetworkBuffer( size_t *pxRequestedSizeBytes )\r
-{\r
-uint8_t *pucEthernetBuffer;\r
-size_t xSize = *pxRequestedSizeBytes;\r
-\r
-       if( xSize < baMINIMAL_BUFFER_SIZE )\r
-       {\r
-               /* Buffers must be at least large enough to hold a TCP-packet with\r
-               headers, or an ARP packet, in case TCP is not included. */\r
-               xSize = baMINIMAL_BUFFER_SIZE;\r
-       }\r
-\r
-       /* Round up xSize to the nearest multiple of N bytes,\r
-       where N equals 'sizeof( size_t )'. */\r
-       if( ( xSize & ( sizeof( size_t ) - 1u ) ) != 0u )\r
-       {\r
-               xSize = ( xSize | ( sizeof( size_t ) - 1u ) ) + 1u;\r
-       }\r
-       *pxRequestedSizeBytes = xSize;\r
-\r
-       /* Allocate a buffer large enough to store the requested Ethernet frame size\r
-       and a pointer to a network buffer structure (hence the addition of\r
-       ipBUFFER_PADDING bytes). */\r
-       pucEthernetBuffer = ( uint8_t * ) pvPortMalloc( xSize + ipBUFFER_PADDING );\r
-       configASSERT( pucEthernetBuffer );\r
-\r
-       if( pucEthernetBuffer != NULL )\r
-       {\r
-               /* Enough space is left at the start of the buffer to place a pointer to\r
-               the network buffer structure that references this Ethernet buffer.\r
-               Return a pointer to the start of the Ethernet buffer itself. */\r
-               pucEthernetBuffer += ipBUFFER_PADDING;\r
-       }\r
-\r
-       return pucEthernetBuffer;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-void vReleaseNetworkBuffer( uint8_t *pucEthernetBuffer )\r
-{\r
-       /* There is space before the Ethernet buffer in which a pointer to the\r
-       network buffer that references this Ethernet buffer is stored.  Remove the\r
-       space before freeing the buffer. */\r
-       if( pucEthernetBuffer != NULL )\r
-       {\r
-               pucEthernetBuffer -= ipBUFFER_PADDING;\r
-               vPortFree( ( void * ) pucEthernetBuffer );\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-NetworkBufferDescriptor_t *pxGetNetworkBufferWithDescriptor( size_t xRequestedSizeBytes, TickType_t xBlockTimeTicks )\r
-{\r
-NetworkBufferDescriptor_t *pxReturn = NULL;\r
-size_t uxCount;\r
-\r
-       if( xNetworkBufferSemaphore != NULL )\r
-       {\r
-               if( ( xRequestedSizeBytes != 0u ) && ( xRequestedSizeBytes < ( size_t ) baMINIMAL_BUFFER_SIZE ) )\r
-               {\r
-                       /* ARP packets can replace application packets, so the storage must be\r
-                       at least large enough to hold an ARP. */\r
-                       xRequestedSizeBytes = baMINIMAL_BUFFER_SIZE;\r
-               }\r
-\r
-               /* Add 2 bytes to xRequestedSizeBytes and round up xRequestedSizeBytes\r
-               to the nearest multiple of N bytes, where N equals 'sizeof( size_t )'. */\r
-               xRequestedSizeBytes += 2u;\r
-               if( ( xRequestedSizeBytes & ( sizeof( size_t ) - 1u ) ) != 0u )\r
-               {\r
-                       xRequestedSizeBytes = ( xRequestedSizeBytes | ( sizeof( size_t ) - 1u ) ) + 1u;\r
-               }\r
-\r
-               /* If there is a semaphore available, there is a network buffer available. */\r
-               if( xSemaphoreTake( xNetworkBufferSemaphore, xBlockTimeTicks ) == pdPASS )\r
-               {\r
-                       /* Protect the structure as it is accessed from tasks and interrupts. */\r
-                       taskENTER_CRITICAL();\r
-                       {\r
-                               pxReturn = ( NetworkBufferDescriptor_t * ) listGET_OWNER_OF_HEAD_ENTRY( &xFreeBuffersList );\r
-                               uxListRemove( &( pxReturn->xBufferListItem ) );\r
-                       }\r
-                       taskEXIT_CRITICAL();\r
-\r
-                       /* Reading UBaseType_t, no critical section needed. */\r
-                       uxCount = listCURRENT_LIST_LENGTH( &xFreeBuffersList );\r
-\r
-                       if( uxMinimumFreeNetworkBuffers > uxCount )\r
-                       {\r
-                               uxMinimumFreeNetworkBuffers = uxCount;\r
-                       }\r
-\r
-                       /* Allocate storage of exactly the requested size to the buffer. */\r
-                       configASSERT( pxReturn->pucEthernetBuffer == NULL );\r
-                       if( xRequestedSizeBytes > 0 )\r
-                       {\r
-                               /* Extra space is obtained so a pointer to the network buffer can\r
-                               be stored at the beginning of the buffer. */\r
-                               pxReturn->pucEthernetBuffer = ( uint8_t * ) pvPortMalloc( xRequestedSizeBytes + ipBUFFER_PADDING );\r
-\r
-                               if( pxReturn->pucEthernetBuffer == NULL )\r
-                               {\r
-                                       /* The attempt to allocate storage for the buffer payload failed,\r
-                                       so the network buffer structure cannot be used and must be\r
-                                       released. */\r
-                                       vReleaseNetworkBufferAndDescriptor( pxReturn );\r
-                                       pxReturn = NULL;\r
-                               }\r
-                               else\r
-                               {\r
-                                       /* Store a pointer to the network buffer structure in the\r
-                                       buffer storage area, then move the buffer pointer on past the\r
-                                       stored pointer so the pointer value is not overwritten by the\r
-                                       application when the buffer is used. */\r
-                                       *( ( NetworkBufferDescriptor_t ** ) ( pxReturn->pucEthernetBuffer ) ) = pxReturn;\r
-                                       pxReturn->pucEthernetBuffer += ipBUFFER_PADDING;\r
-\r
-                                       /* Store the actual size of the allocated buffer, which may be\r
-                                       greater than the original requested size. */\r
-                                       pxReturn->xDataLength = xRequestedSizeBytes;\r
-\r
-                                       #if( ipconfigUSE_LINKED_RX_MESSAGES != 0 )\r
-                                       {\r
-                                               /* make sure the buffer is not linked */\r
-                                               pxReturn->pxNextBuffer = NULL;\r
-                                       }\r
-                                       #endif /* ipconfigUSE_LINKED_RX_MESSAGES */\r
-                               }\r
-                       }\r
-                       else\r
-                       {\r
-                               /* A descriptor is being returned without an associated buffer being\r
-                               allocated. */\r
-                       }\r
-               }\r
-       }\r
-\r
-       if( pxReturn == NULL )\r
-       {\r
-               iptraceFAILED_TO_OBTAIN_NETWORK_BUFFER();\r
-       }\r
-       else\r
-       {\r
-               iptraceNETWORK_BUFFER_OBTAINED( pxReturn );\r
-       }\r
-\r
-       return pxReturn;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-void vReleaseNetworkBufferAndDescriptor( NetworkBufferDescriptor_t * const pxNetworkBuffer )\r
-{\r
-BaseType_t xListItemAlreadyInFreeList;\r
-\r
-       /* Ensure the buffer is returned to the list of free buffers before the\r
-       counting semaphore is 'given' to say a buffer is available.  Release the\r
-       storage allocated to the buffer payload.  THIS FILE SHOULD NOT BE USED\r
-       IF THE PROJECT INCLUDES A MEMORY ALLOCATOR THAT WILL FRAGMENT THE HEAP\r
-       MEMORY.  For example, heap_2 must not be used, heap_4 can be used. */\r
-       vReleaseNetworkBuffer( pxNetworkBuffer->pucEthernetBuffer );\r
-       pxNetworkBuffer->pucEthernetBuffer = NULL;\r
-\r
-       taskENTER_CRITICAL();\r
-       {\r
-               xListItemAlreadyInFreeList = listIS_CONTAINED_WITHIN( &xFreeBuffersList, &( pxNetworkBuffer->xBufferListItem ) );\r
-\r
-               if( xListItemAlreadyInFreeList == pdFALSE )\r
-               {\r
-                       vListInsertEnd( &xFreeBuffersList, &( pxNetworkBuffer->xBufferListItem ) );\r
-               }\r
-       }\r
-       taskEXIT_CRITICAL();\r
-\r
-       /*\r
-        * Update the network state machine, unless the program fails to release its 'xNetworkBufferSemaphore'.\r
-        * The program should only try to release its semaphore if 'xListItemAlreadyInFreeList' is false.\r
-        */\r
-       if( xListItemAlreadyInFreeList == pdFALSE )\r
-       {\r
-               if ( xSemaphoreGive( xNetworkBufferSemaphore ) == pdTRUE )\r
-               {\r
-                       iptraceNETWORK_BUFFER_RELEASED( pxNetworkBuffer );\r
-               }\r
-       }\r
-       else\r
-       {\r
-               iptraceNETWORK_BUFFER_RELEASED( pxNetworkBuffer );\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-/*\r
- * Returns the number of free network buffers\r
- */\r
-UBaseType_t uxGetNumberOfFreeNetworkBuffers( void )\r
-{\r
-       return listCURRENT_LIST_LENGTH( &xFreeBuffersList );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-UBaseType_t uxGetMinimumFreeNetworkBuffers( void )\r
-{\r
-       return uxMinimumFreeNetworkBuffers;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-NetworkBufferDescriptor_t *pxResizeNetworkBufferWithDescriptor( NetworkBufferDescriptor_t * pxNetworkBuffer, size_t xNewSizeBytes )\r
-{\r
-size_t xOriginalLength;\r
-uint8_t *pucBuffer;\r
-\r
-       xOriginalLength = pxNetworkBuffer->xDataLength + ipBUFFER_PADDING;\r
-       xNewSizeBytes = xNewSizeBytes + ipBUFFER_PADDING;\r
-\r
-       pucBuffer = pucGetNetworkBuffer( &( xNewSizeBytes ) );\r
-\r
-       if( pucBuffer == NULL )\r
-       {\r
-               /* In case the allocation fails, return NULL. */\r
-               pxNetworkBuffer = NULL;\r
-       }\r
-       else\r
-       {\r
-               pxNetworkBuffer->xDataLength = xNewSizeBytes;\r
-               if( xNewSizeBytes > xOriginalLength )\r
-               {\r
-                       xNewSizeBytes = xOriginalLength;\r
-               }\r
-\r
-               memcpy( pucBuffer - ipBUFFER_PADDING, pxNetworkBuffer->pucEthernetBuffer - ipBUFFER_PADDING, xNewSizeBytes );\r
-               vReleaseNetworkBuffer( pxNetworkBuffer->pucEthernetBuffer );\r
-               pxNetworkBuffer->pucEthernetBuffer = pucBuffer;\r
-       }\r
-\r
-       return pxNetworkBuffer;\r
-}\r
-\r
+/*
+ * FreeRTOS+TCP V2.0.11
+ * 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://www.FreeRTOS.org
+ * http://aws.amazon.com/freertos
+ *
+ * 1 tab == 4 spaces!
+ */
+
+/******************************************************************************
+ *
+ * See the following web page for essential buffer allocation scheme usage and
+ * configuration details:
+ * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/Embedded_Ethernet_Buffer_Management.html
+ *
+ ******************************************************************************/
+
+/* THIS FILE SHOULD NOT BE USED IF THE PROJECT INCLUDES A MEMORY ALLOCATOR
+THAT WILL FRAGMENT THE HEAP MEMORY.  For example, heap_2 must not be used,
+heap_4 can be used. */
+
+
+/* Standard includes. */
+#include <stdint.h>
+
+/* FreeRTOS includes. */
+#include "FreeRTOS.h"
+#include "task.h"
+#include "semphr.h"
+
+/* FreeRTOS+TCP includes. */
+#include "FreeRTOS_IP.h"
+#include "FreeRTOS_UDP_IP.h"
+#include "FreeRTOS_IP_Private.h"
+#include "NetworkInterface.h"
+#include "NetworkBufferManagement.h"
+
+/* The obtained network buffer must be large enough to hold a packet that might
+replace the packet that was requested to be sent. */
+#if ipconfigUSE_TCP == 1
+       #define baMINIMAL_BUFFER_SIZE           sizeof( TCPPacket_t )
+#else
+       #define baMINIMAL_BUFFER_SIZE           sizeof( ARPPacket_t )
+#endif /* ipconfigUSE_TCP == 1 */
+
+/*_RB_ This is too complex not to have an explanation. */
+#if defined( ipconfigETHERNET_MINIMUM_PACKET_BYTES )
+       #define ASSERT_CONCAT_(a, b) a##b
+       #define ASSERT_CONCAT(a, b) ASSERT_CONCAT_(a, b)
+       #define STATIC_ASSERT(e) \
+               ;enum { ASSERT_CONCAT(assert_line_, __LINE__) = 1/(!!(e)) }
+
+       STATIC_ASSERT( ipconfigETHERNET_MINIMUM_PACKET_BYTES <= baMINIMAL_BUFFER_SIZE );
+#endif
+
+/* A list of free (available) NetworkBufferDescriptor_t structures. */
+static List_t xFreeBuffersList;
+
+/* Some statistics about the use of buffers. */
+static size_t uxMinimumFreeNetworkBuffers;
+
+/* Declares the pool of NetworkBufferDescriptor_t structures that are available
+to the system.  All the network buffers referenced from xFreeBuffersList exist
+in this array.  The array is not accessed directly except during initialisation,
+when the xFreeBuffersList is filled (as all the buffers are free when the system
+is booted). */
+static NetworkBufferDescriptor_t xNetworkBufferDescriptors[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ];
+
+/* This constant is defined as false to let FreeRTOS_TCP_IP.c know that the
+network buffers have a variable size: resizing may be necessary */
+const BaseType_t xBufferAllocFixedSize = pdFALSE;
+
+/* The semaphore used to obtain network buffers. */
+static SemaphoreHandle_t xNetworkBufferSemaphore = NULL;
+
+/*-----------------------------------------------------------*/
+
+BaseType_t xNetworkBuffersInitialise( void )
+{
+BaseType_t xReturn, x;
+
+       /* Only initialise the buffers and their associated kernel objects if they
+       have not been initialised before. */
+       if( xNetworkBufferSemaphore == NULL )
+       {
+               xNetworkBufferSemaphore = xSemaphoreCreateCounting( ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS, ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS );
+               configASSERT( xNetworkBufferSemaphore );
+
+               if( xNetworkBufferSemaphore != NULL )
+               {
+                       #if ( configQUEUE_REGISTRY_SIZE > 0 )
+                       {
+                               vQueueAddToRegistry( xNetworkBufferSemaphore, "NetBufSem" );
+                       }
+                       #endif /* configQUEUE_REGISTRY_SIZE */
+
+                       /* If the trace recorder code is included name the semaphore for viewing
+                       in FreeRTOS+Trace.  */
+                       #if( ipconfigINCLUDE_EXAMPLE_FREERTOS_PLUS_TRACE_CALLS == 1 )
+                       {
+                               extern QueueHandle_t xNetworkEventQueue;
+                               vTraceSetQueueName( xNetworkEventQueue, "IPStackEvent" );
+                               vTraceSetQueueName( xNetworkBufferSemaphore, "NetworkBufferCount" );
+                       }
+                       #endif /*  ipconfigINCLUDE_EXAMPLE_FREERTOS_PLUS_TRACE_CALLS == 1 */
+
+                       vListInitialise( &xFreeBuffersList );
+
+                       /* Initialise all the network buffers.  No storage is allocated to
+                       the buffers yet. */
+                       for( x = 0; x < ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS; x++ )
+                       {
+                               /* Initialise and set the owner of the buffer list items. */
+                               xNetworkBufferDescriptors[ x ].pucEthernetBuffer = NULL;
+                               vListInitialiseItem( &( xNetworkBufferDescriptors[ x ].xBufferListItem ) );
+                               listSET_LIST_ITEM_OWNER( &( xNetworkBufferDescriptors[ x ].xBufferListItem ), &xNetworkBufferDescriptors[ x ] );
+
+                               /* Currently, all buffers are available for use. */
+                               vListInsert( &xFreeBuffersList, &( xNetworkBufferDescriptors[ x ].xBufferListItem ) );
+                       }
+
+                       uxMinimumFreeNetworkBuffers = ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS;
+               }
+       }
+
+       if( xNetworkBufferSemaphore == NULL )
+       {
+               xReturn = pdFAIL;
+       }
+       else
+       {
+               xReturn = pdPASS;
+       }
+
+       return xReturn;
+}
+/*-----------------------------------------------------------*/
+
+uint8_t *pucGetNetworkBuffer( size_t *pxRequestedSizeBytes )
+{
+uint8_t *pucEthernetBuffer;
+size_t xSize = *pxRequestedSizeBytes;
+
+       if( xSize < baMINIMAL_BUFFER_SIZE )
+       {
+               /* Buffers must be at least large enough to hold a TCP-packet with
+               headers, or an ARP packet, in case TCP is not included. */
+               xSize = baMINIMAL_BUFFER_SIZE;
+       }
+
+       /* Round up xSize to the nearest multiple of N bytes,
+       where N equals 'sizeof( size_t )'. */
+       if( ( xSize & ( sizeof( size_t ) - 1u ) ) != 0u )
+       {
+               xSize = ( xSize | ( sizeof( size_t ) - 1u ) ) + 1u;
+       }
+       *pxRequestedSizeBytes = xSize;
+
+       /* Allocate a buffer large enough to store the requested Ethernet frame size
+       and a pointer to a network buffer structure (hence the addition of
+       ipBUFFER_PADDING bytes). */
+       pucEthernetBuffer = ( uint8_t * ) pvPortMalloc( xSize + ipBUFFER_PADDING );
+       configASSERT( pucEthernetBuffer );
+
+       if( pucEthernetBuffer != NULL )
+       {
+               /* Enough space is left at the start of the buffer to place a pointer to
+               the network buffer structure that references this Ethernet buffer.
+               Return a pointer to the start of the Ethernet buffer itself. */
+               pucEthernetBuffer += ipBUFFER_PADDING;
+       }
+
+       return pucEthernetBuffer;
+}
+/*-----------------------------------------------------------*/
+
+void vReleaseNetworkBuffer( uint8_t *pucEthernetBuffer )
+{
+       /* There is space before the Ethernet buffer in which a pointer to the
+       network buffer that references this Ethernet buffer is stored.  Remove the
+       space before freeing the buffer. */
+       if( pucEthernetBuffer != NULL )
+       {
+               pucEthernetBuffer -= ipBUFFER_PADDING;
+               vPortFree( ( void * ) pucEthernetBuffer );
+       }
+}
+/*-----------------------------------------------------------*/
+
+NetworkBufferDescriptor_t *pxGetNetworkBufferWithDescriptor( size_t xRequestedSizeBytes, TickType_t xBlockTimeTicks )
+{
+NetworkBufferDescriptor_t *pxReturn = NULL;
+size_t uxCount;
+
+       if( xNetworkBufferSemaphore != NULL )
+       {
+               if( ( xRequestedSizeBytes != 0u ) && ( xRequestedSizeBytes < ( size_t ) baMINIMAL_BUFFER_SIZE ) )
+               {
+                       /* ARP packets can replace application packets, so the storage must be
+                       at least large enough to hold an ARP. */
+                       xRequestedSizeBytes = baMINIMAL_BUFFER_SIZE;
+               }
+
+               /* Add 2 bytes to xRequestedSizeBytes and round up xRequestedSizeBytes
+               to the nearest multiple of N bytes, where N equals 'sizeof( size_t )'. */
+               xRequestedSizeBytes += 2u;
+               if( ( xRequestedSizeBytes & ( sizeof( size_t ) - 1u ) ) != 0u )
+               {
+                       xRequestedSizeBytes = ( xRequestedSizeBytes | ( sizeof( size_t ) - 1u ) ) + 1u;
+               }
+
+               /* If there is a semaphore available, there is a network buffer available. */
+               if( xSemaphoreTake( xNetworkBufferSemaphore, xBlockTimeTicks ) == pdPASS )
+               {
+                       /* Protect the structure as it is accessed from tasks and interrupts. */
+                       taskENTER_CRITICAL();
+                       {
+                               pxReturn = ( NetworkBufferDescriptor_t * ) listGET_OWNER_OF_HEAD_ENTRY( &xFreeBuffersList );
+                               uxListRemove( &( pxReturn->xBufferListItem ) );
+                       }
+                       taskEXIT_CRITICAL();
+
+                       /* Reading UBaseType_t, no critical section needed. */
+                       uxCount = listCURRENT_LIST_LENGTH( &xFreeBuffersList );
+
+                       if( uxMinimumFreeNetworkBuffers > uxCount )
+                       {
+                               uxMinimumFreeNetworkBuffers = uxCount;
+                       }
+
+                       /* Allocate storage of exactly the requested size to the buffer. */
+                       configASSERT( pxReturn->pucEthernetBuffer == NULL );
+                       if( xRequestedSizeBytes > 0 )
+                       {
+                               /* Extra space is obtained so a pointer to the network buffer can
+                               be stored at the beginning of the buffer. */
+                               pxReturn->pucEthernetBuffer = ( uint8_t * ) pvPortMalloc( xRequestedSizeBytes + ipBUFFER_PADDING );
+
+                               if( pxReturn->pucEthernetBuffer == NULL )
+                               {
+                                       /* The attempt to allocate storage for the buffer payload failed,
+                                       so the network buffer structure cannot be used and must be
+                                       released. */
+                                       vReleaseNetworkBufferAndDescriptor( pxReturn );
+                                       pxReturn = NULL;
+                               }
+                               else
+                               {
+                                       /* Store a pointer to the network buffer structure in the
+                                       buffer storage area, then move the buffer pointer on past the
+                                       stored pointer so the pointer value is not overwritten by the
+                                       application when the buffer is used. */
+                                       *( ( NetworkBufferDescriptor_t ** ) ( pxReturn->pucEthernetBuffer ) ) = pxReturn;
+                                       pxReturn->pucEthernetBuffer += ipBUFFER_PADDING;
+
+                                       /* Store the actual size of the allocated buffer, which may be
+                                       greater than the original requested size. */
+                                       pxReturn->xDataLength = xRequestedSizeBytes;
+
+                                       #if( ipconfigUSE_LINKED_RX_MESSAGES != 0 )
+                                       {
+                                               /* make sure the buffer is not linked */
+                                               pxReturn->pxNextBuffer = NULL;
+                                       }
+                                       #endif /* ipconfigUSE_LINKED_RX_MESSAGES */
+                               }
+                       }
+                       else
+                       {
+                               /* A descriptor is being returned without an associated buffer being
+                               allocated. */
+                       }
+               }
+       }
+
+       if( pxReturn == NULL )
+       {
+               iptraceFAILED_TO_OBTAIN_NETWORK_BUFFER();
+       }
+       else
+       {
+               iptraceNETWORK_BUFFER_OBTAINED( pxReturn );
+       }
+
+       return pxReturn;
+}
+/*-----------------------------------------------------------*/
+
+void vReleaseNetworkBufferAndDescriptor( NetworkBufferDescriptor_t * const pxNetworkBuffer )
+{
+BaseType_t xListItemAlreadyInFreeList;
+
+       /* Ensure the buffer is returned to the list of free buffers before the
+       counting semaphore is 'given' to say a buffer is available.  Release the
+       storage allocated to the buffer payload.  THIS FILE SHOULD NOT BE USED
+       IF THE PROJECT INCLUDES A MEMORY ALLOCATOR THAT WILL FRAGMENT THE HEAP
+       MEMORY.  For example, heap_2 must not be used, heap_4 can be used. */
+       vReleaseNetworkBuffer( pxNetworkBuffer->pucEthernetBuffer );
+       pxNetworkBuffer->pucEthernetBuffer = NULL;
+
+       taskENTER_CRITICAL();
+       {
+               xListItemAlreadyInFreeList = listIS_CONTAINED_WITHIN( &xFreeBuffersList, &( pxNetworkBuffer->xBufferListItem ) );
+
+               if( xListItemAlreadyInFreeList == pdFALSE )
+               {
+                       vListInsertEnd( &xFreeBuffersList, &( pxNetworkBuffer->xBufferListItem ) );
+               }
+       }
+       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 ( xSemaphoreGive( xNetworkBufferSemaphore ) == pdTRUE )
+               {
+                       iptraceNETWORK_BUFFER_RELEASED( pxNetworkBuffer );
+               }
+       }
+       else
+       {
+               iptraceNETWORK_BUFFER_RELEASED( pxNetworkBuffer );
+       }
+}
+/*-----------------------------------------------------------*/
+
+/*
+ * Returns the number of free network buffers
+ */
+UBaseType_t uxGetNumberOfFreeNetworkBuffers( void )
+{
+       return listCURRENT_LIST_LENGTH( &xFreeBuffersList );
+}
+/*-----------------------------------------------------------*/
+
+UBaseType_t uxGetMinimumFreeNetworkBuffers( void )
+{
+       return uxMinimumFreeNetworkBuffers;
+}
+/*-----------------------------------------------------------*/
+
+NetworkBufferDescriptor_t *pxResizeNetworkBufferWithDescriptor( NetworkBufferDescriptor_t * pxNetworkBuffer, size_t xNewSizeBytes )
+{
+size_t xOriginalLength;
+uint8_t *pucBuffer;
+
+       xOriginalLength = pxNetworkBuffer->xDataLength + ipBUFFER_PADDING;
+       xNewSizeBytes = xNewSizeBytes + ipBUFFER_PADDING;
+
+       pucBuffer = pucGetNetworkBuffer( &( xNewSizeBytes ) );
+
+       if( pucBuffer == NULL )
+       {
+               /* In case the allocation fails, return NULL. */
+               pxNetworkBuffer = NULL;
+       }
+       else
+       {
+               pxNetworkBuffer->xDataLength = xNewSizeBytes;
+               if( xNewSizeBytes > xOriginalLength )
+               {
+                       xNewSizeBytes = xOriginalLength;
+               }
+
+               memcpy( pucBuffer - ipBUFFER_PADDING, pxNetworkBuffer->pucEthernetBuffer - ipBUFFER_PADDING, xNewSizeBytes );
+               vReleaseNetworkBuffer( pxNetworkBuffer->pucEthernetBuffer );
+               pxNetworkBuffer->pucEthernetBuffer = pucBuffer;
+       }
+
+       return pxNetworkBuffer;
+}
+
diff --git a/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/Compiler/CompilerName/ReadMe.txt b/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/Compiler/CompilerName/ReadMe.txt
new file mode 100644 (file)
index 0000000..17aca57
--- /dev/null
@@ -0,0 +1,3 @@
+Update pack_struct_start.h and pack_struct_end.h for your architecure.
+These files define the specifiers needed by your compiler to properly pack struct data 
+need by FreeRTOS+TCP.
\ No newline at end of file
diff --git a/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/Compiler/CompilerName/pack_struct_end.h b/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/Compiler/CompilerName/pack_struct_end.h
new file mode 100644 (file)
index 0000000..cdbad17
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+FreeRTOS+TCP V2.0.11
+Copyright (C) 2018 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
+*/
+
+/*****************************************************************************
+ *
+ * See the following URL for an explanation of this file:
+ * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/Embedded_Compiler_Porting.html
+ *
+ *****************************************************************************/
+; /* FIX ME. Update for the compiler specifier needed at end of a struct declartion to pack the struct. */
\ No newline at end of file
diff --git a/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/Compiler/CompilerName/pack_struct_start.h b/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/Compiler/CompilerName/pack_struct_start.h
new file mode 100644 (file)
index 0000000..7fe533a
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+FreeRTOS+TCP V2.0.11
+Copyright (C) 2018 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
+*/
+
+/*****************************************************************************
+ *
+ * See the following URL for an explanation of this file:
+ * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/Embedded_Compiler_Porting.html
+ *
+ *****************************************************************************/
+/* FIX ME. Update for the compiler specifier needed at the start of a struct declartion to pack the struct. */
\ No newline at end of file
index d61b8d003426a3589269285da30e1cc7554db52f..73455f910998769c5ac88e9623076245f35639f9 100644 (file)
@@ -1,46 +1,46 @@
-/*\r
-FreeRTOS+TCP V2.0.11\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://aws.amazon.com/freertos\r
- http://www.FreeRTOS.org\r
-*/\r
-\r
-/*****************************************************************************\r
- *\r
- * See the following URL for an explanation of this file:\r
- * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/Embedded_Compiler_Porting.html\r
- *\r
- *****************************************************************************/\r
-__attribute__( (packed) );\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
+/*
+FreeRTOS+TCP V2.0.11
+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
+*/
+
+/*****************************************************************************
+ *
+ * See the following URL for an explanation of this file:
+ * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/Embedded_Compiler_Porting.html
+ *
+ *****************************************************************************/
+__attribute__( (packed) );
+
+
+
+
+
+
+
+
+
+
+
+
+
+
index 5a88f78cfa87675db1748e63a51ad68771776e17..658cc4a5e99ebd0e2a7cf529dc2af47bc65a13d7 100644 (file)
@@ -1,48 +1,48 @@
-/*\r
-FreeRTOS+TCP V2.0.11\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://aws.amazon.com/freertos\r
- http://www.FreeRTOS.org\r
-*/\r
-\r
-/*****************************************************************************\r
- *\r
- * See the following URL for an explanation of this file:\r
- * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/Embedded_Compiler_Porting.html\r
- *\r
- *****************************************************************************/\r
-\r
-/* Nothing to do here. */\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
+/*
+FreeRTOS+TCP V2.0.11
+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
+*/
+
+/*****************************************************************************
+ *
+ * See the following URL for an explanation of this file:
+ * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/Embedded_Compiler_Porting.html
+ *
+ *****************************************************************************/
+
+/* Nothing to do here. */
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
index 85e6708198a6ac1c51c224773c8d0bb25c467abe..f0a73881d6f9e40019d3240d9626ea784f42673c 100644 (file)
@@ -1,47 +1,47 @@
-/*\r
-FreeRTOS+TCP V2.0.11\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://aws.amazon.com/freertos\r
- http://www.FreeRTOS.org\r
-*/\r
-\r
-/*****************************************************************************\r
- *\r
- * See the following URL for an explanation of this file:\r
- * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/Embedded_Compiler_Porting.html\r
- *\r
- *****************************************************************************/\r
-\r
-;\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
+/*
+FreeRTOS+TCP V2.0.11
+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
+*/
+
+/*****************************************************************************
+ *
+ * See the following URL for an explanation of this file:
+ * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/Embedded_Compiler_Porting.html
+ *
+ *****************************************************************************/
+
+;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
index 15e6eb69b3c942eebe68e43782bfc12b345cae73..95cc089b2eb6bbb0cc7a8d5eef9b00b139bb4a1d 100644 (file)
@@ -1,49 +1,49 @@
-/*\r
-FreeRTOS+TCP V2.0.11\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://aws.amazon.com/freertos\r
- http://www.FreeRTOS.org\r
-*/\r
-\r
-/*****************************************************************************\r
- *\r
- * See the following URL for an explanation of this file:\r
- * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/Embedded_Compiler_Porting.html\r
- *\r
- *****************************************************************************/\r
-\r
-__packed\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
+/*
+FreeRTOS+TCP V2.0.11
+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
+*/
+
+/*****************************************************************************
+ *
+ * See the following URL for an explanation of this file:
+ * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/Embedded_Compiler_Porting.html
+ *
+ *****************************************************************************/
+
+__packed
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
index 816b0b3b6c3834930c15ed763025b228faf842a1..48a8ef9638d9bacb649bc69e93a162ec4ad9d34a 100644 (file)
@@ -1,33 +1,33 @@
-/*\r
-FreeRTOS+TCP V2.0.11\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://aws.amazon.com/freertos\r
- http://www.FreeRTOS.org\r
-*/\r
-\r
-/*****************************************************************************\r
- *\r
- * See the following URL for an explanation of this file:\r
- * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/Embedded_Compiler_Porting.html\r
- *\r
- *****************************************************************************/\r
-;\r
-#pragma pack(pop)\r
+/*
+FreeRTOS+TCP V2.0.11
+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
+*/
+
+/*****************************************************************************
+ *
+ * See the following URL for an explanation of this file:
+ * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/Embedded_Compiler_Porting.html
+ *
+ *****************************************************************************/
+;
+#pragma pack(pop)
index 29ea9ae3e811443118142566259b925e1e8ac530..32c98e859e7ac22861b82d3342ad677bf3a7a70f 100644 (file)
@@ -1,48 +1,48 @@
-/*\r
-FreeRTOS+TCP V2.0.11\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://aws.amazon.com/freertos\r
- http://www.FreeRTOS.org\r
-*/\r
-\r
-/*****************************************************************************\r
- *\r
- * See the following URL for an explanation of this file:\r
- * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/Embedded_Compiler_Porting.html\r
- *\r
- *****************************************************************************/\r
-\r
-#pragma pack(push,1)\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
+/*
+FreeRTOS+TCP V2.0.11
+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
+*/
+
+/*****************************************************************************
+ *
+ * See the following URL for an explanation of this file:
+ * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/Embedded_Compiler_Porting.html
+ *
+ *****************************************************************************/
+
+#pragma pack(push,1)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
index 19a0f39ef65117dc1523e85e179c95ae79c6b531..e486c1c3043c6e70c9a099b6220dbde26e8d64d7 100644 (file)
@@ -1,48 +1,48 @@
-/*\r
-FreeRTOS+TCP V2.0.11\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://aws.amazon.com/freertos\r
- http://www.FreeRTOS.org\r
-*/\r
-\r
-/*****************************************************************************\r
- *\r
- * See the following URL for an explanation of this file:\r
- * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/Embedded_Compiler_Porting.html\r
- *\r
- *****************************************************************************/\r
-\r
-;\r
-#pragma pack( pop )\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
+/*
+FreeRTOS+TCP V2.0.11
+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
+*/
+
+/*****************************************************************************
+ *
+ * See the following URL for an explanation of this file:
+ * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/Embedded_Compiler_Porting.html
+ *
+ *****************************************************************************/
+
+;
+#pragma pack( pop )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
index 54a3e68856e4514da7cb5f1eeeaf3d1e64d8b813..52b90803baf496fd934dcdc228995e91f59c7bd7 100644 (file)
@@ -1,47 +1,47 @@
-/*\r
-FreeRTOS+TCP V2.0.11\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://aws.amazon.com/freertos\r
- http://www.FreeRTOS.org\r
-*/\r
-\r
-/*****************************************************************************\r
- *\r
- * See the following URL for an explanation of this file:\r
- * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/Embedded_Compiler_Porting.html\r
- *\r
- *****************************************************************************/\r
-\r
-#pragma pack( push, 1 )\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
+/*
+FreeRTOS+TCP V2.0.11
+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
+*/
+
+/*****************************************************************************
+ *
+ * See the following URL for an explanation of this file:
+ * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/Embedded_Compiler_Porting.html
+ *
+ *****************************************************************************/
+
+#pragma pack( push, 1 )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
index 2e6d2f997c1357d49877266abfd48088cacbd8f8..49e276960e6fd93fcffcf859a23d225d42f6063d 100644 (file)
@@ -1,60 +1,60 @@
-/*\r
-FreeRTOS+TCP V2.0.11\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://aws.amazon.com/freertos\r
- http://www.FreeRTOS.org\r
-*/\r
-\r
-/*****************************************************************************\r
- *\r
- * See the following URL for an explanation of this file:\r
- * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/Embedded_Compiler_Porting.html\r
- *\r
- *****************************************************************************/\r
-\r
-\r
-#ifdef _SH\r
-       #ifdef __RENESAS__\r
-               ;\r
-               #pragma unpack\r
-       #endif\r
-#endif\r
-#ifdef __RX\r
-       #ifdef __CCRX__\r
-               ;\r
-               #pragma packoption\r
-       #endif\r
-#endif\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
+/*
+FreeRTOS+TCP V2.0.11
+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
+*/
+
+/*****************************************************************************
+ *
+ * See the following URL for an explanation of this file:
+ * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/Embedded_Compiler_Porting.html
+ *
+ *****************************************************************************/
+
+
+#ifdef _SH
+       #ifdef __RENESAS__
+               ;
+               #pragma unpack
+       #endif
+#endif
+#ifdef __RX
+       #ifdef __CCRX__
+               ;
+               #pragma packoption
+       #endif
+#endif
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
index 7c8750c6a99efc50bc6b13d42333fb7b7ee808a5..88c4c1f38d9164189776d1dda64f836a5abed787 100644 (file)
@@ -1,58 +1,58 @@
-/*\r
-FreeRTOS+TCP V2.0.11\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://aws.amazon.com/freertos\r
- http://www.FreeRTOS.org\r
-*/\r
-\r
-/*****************************************************************************\r
- *\r
- * See the following URL for an explanation of this file:\r
- * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/Embedded_Compiler_Porting.html\r
- *\r
- *****************************************************************************/\r
-\r
-\r
-#ifdef _SH\r
-       #ifdef __RENESAS__\r
-               #pragma pack 1\r
-       #endif\r
-#endif\r
-#ifdef __RX\r
-       #ifdef __CCRX__\r
-               #pragma pack\r
-       #endif\r
-#endif\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
+/*
+FreeRTOS+TCP V2.0.11
+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
+*/
+
+/*****************************************************************************
+ *
+ * See the following URL for an explanation of this file:
+ * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/Embedded_Compiler_Porting.html
+ *
+ *****************************************************************************/
+
+
+#ifdef _SH
+       #ifdef __RENESAS__
+               #pragma pack 1
+       #endif
+#endif
+#ifdef __RX
+       #ifdef __CCRX__
+               #pragma pack
+       #endif
+#endif
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
index 83c96a07c078c448f34e6d632b0537eeaa342b70..3528269bdb908c29673e1a7e78ce9df880a03342 100644 (file)
-/*\r
-FreeRTOS+TCP V2.0.11\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://aws.amazon.com/freertos\r
- http://www.FreeRTOS.org\r
-*/\r
-\r
-/* Standard includes. */\r
-#include <stdint.h>\r
-#include <stdio.h>\r
-#include <stdlib.h>\r
-\r
-/* FreeRTOS includes. */\r
-#include "FreeRTOS.h"\r
-#include "task.h"\r
-#include "queue.h"\r
-#include "semphr.h"\r
-\r
-/* FreeRTOS+TCP includes. */\r
-#include "FreeRTOS_IP.h"\r
-#include "FreeRTOS_Sockets.h"\r
-#include "FreeRTOS_IP_Private.h"\r
-#include "NetworkBufferManagement.h"\r
-#include "NetworkInterface.h"\r
-\r
-/* Some files from the Atmel Software Framework */\r
-/*_RB_ The SAM4E portable layer has three different header files called gmac.h! */\r
-#include "instance/gmac.h"\r
-#include <sysclk.h>\r
-#include <ethernet_phy.h>\r
-\r
-#ifndef        BMSR_LINK_STATUS\r
-       #define BMSR_LINK_STATUS            0x0004  //!< Link status\r
-#endif\r
-\r
-#ifndef        PHY_LS_HIGH_CHECK_TIME_MS\r
-       /* Check if the LinkSStatus in the PHY is still high after 15 seconds of not\r
-       receiving packets. */\r
-       #define PHY_LS_HIGH_CHECK_TIME_MS       15000\r
-#endif\r
-\r
-#ifndef        PHY_LS_LOW_CHECK_TIME_MS\r
-       /* Check if the LinkSStatus in the PHY is still low every second. */\r
-       #define PHY_LS_LOW_CHECK_TIME_MS        1000\r
-#endif\r
-\r
-/* Interrupt events to process.  Currently only the Rx event is processed\r
-although code for other events is included to allow for possible future\r
-expansion. */\r
-#define EMAC_IF_RX_EVENT        1UL\r
-#define EMAC_IF_TX_EVENT        2UL\r
-#define EMAC_IF_ERR_EVENT       4UL\r
-#define EMAC_IF_ALL_EVENT       ( EMAC_IF_RX_EVENT | EMAC_IF_TX_EVENT | EMAC_IF_ERR_EVENT )\r
-\r
-#define ETHERNET_CONF_PHY_ADDR  BOARD_GMAC_PHY_ADDR\r
-\r
-#define HZ_PER_MHZ                             ( 1000000UL )\r
-\r
-#ifndef        EMAC_MAX_BLOCK_TIME_MS\r
-       #define EMAC_MAX_BLOCK_TIME_MS  100ul\r
-#endif\r
-\r
-#if !defined( GMAC_USES_TX_CALLBACK ) || ( GMAC_USES_TX_CALLBACK != 1 )\r
-       #error Please define GMAC_USES_TX_CALLBACK as 1\r
-#endif\r
-\r
-/* Default the size of the stack used by the EMAC deferred handler task to 4x\r
-the size of the stack used by the idle task - but allow this to be overridden in\r
-FreeRTOSConfig.h as configMINIMAL_STACK_SIZE is a user definable constant. */\r
-#ifndef configEMAC_TASK_STACK_SIZE\r
-       #define configEMAC_TASK_STACK_SIZE ( 4 * configMINIMAL_STACK_SIZE )\r
-#endif\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-/*\r
- * Wait a fixed time for the link status to indicate the network is up.\r
- */\r
-static BaseType_t xGMACWaitLS( TickType_t xMaxTime );\r
-\r
-#if( ipconfigDRIVER_INCLUDED_TX_IP_CHECKSUM == 1 ) && ( ipconfigHAS_TX_CRC_OFFLOADING == 0 )\r
-       void vGMACGenerateChecksum( uint8_t *apBuffer );\r
-#endif\r
-\r
-/*\r
- * Called from the ASF GMAC driver.\r
- */\r
-static void prvRxCallback( uint32_t ulStatus );\r
-static void prvTxCallback( uint32_t ulStatus, uint8_t *puc_buffer );\r
-\r
-/*\r
- * A deferred interrupt handler task that processes GMAC interrupts.\r
- */\r
-static void prvEMACHandlerTask( void *pvParameters );\r
-\r
-/*\r
- * Initialise the ASF GMAC driver.\r
- */\r
-static BaseType_t prvGMACInit( void );\r
-\r
-/*\r
- * Try to obtain an Rx packet from the hardware.\r
- */\r
-static uint32_t prvEMACRxPoll( void );\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-/* Bit map of outstanding ETH interrupt events for processing.  Currently only\r
-the Rx interrupt is handled, although code is included for other events to\r
-enable future expansion. */\r
-static volatile uint32_t ulISREvents;\r
-\r
-/* A copy of PHY register 1: 'PHY_REG_01_BMSR' */\r
-static uint32_t ulPHYLinkStatus = 0;\r
-static volatile BaseType_t xGMACSwitchRequired;\r
-\r
-/* ethernet_phy_addr: the address of the PHY in use.\r
-Atmel was a bit ambiguous about it so the address will be stored\r
-in this variable, see ethernet_phy.c */\r
-extern int ethernet_phy_addr;\r
-\r
-/* LLMNR multicast address. */\r
-static const uint8_t llmnr_mac_address[] = { 0x01, 0x00, 0x5E, 0x00, 0x00, 0xFC };\r
-\r
-/* The GMAC object as defined by the ASF drivers. */\r
-static gmac_device_t gs_gmac_dev;\r
-\r
-/* MAC address to use. */\r
-extern const uint8_t ucMACAddress[ 6 ];\r
-\r
-/* Holds the handle of the task used as a deferred interrupt processor.  The\r
-handle is used so direct notifications can be sent to the task for all EMAC/DMA\r
-related interrupts. */\r
-TaskHandle_t xEMACTaskHandle = NULL;\r
-\r
-static QueueHandle_t xTxBufferQueue;\r
-int tx_release_count[ 4 ];\r
-\r
-/* xTXDescriptorSemaphore is a counting semaphore with\r
-a maximum count of GMAC_TX_BUFFERS, which is the number of\r
-DMA TX descriptors. */\r
-static SemaphoreHandle_t xTXDescriptorSemaphore = NULL;\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-/*\r
- * GMAC interrupt handler.\r
- */\r
-void GMAC_Handler(void)\r
-{\r
-       xGMACSwitchRequired = pdFALSE;\r
-\r
-       /* gmac_handler() may call prvRxCallback() which may change\r
-       the value of xGMACSwitchRequired. */\r
-       gmac_handler( &gs_gmac_dev );\r
-\r
-       if( xGMACSwitchRequired != pdFALSE )\r
-       {\r
-               portEND_SWITCHING_ISR( xGMACSwitchRequired );\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvRxCallback( uint32_t ulStatus )\r
-{\r
-       if( ( ( ulStatus & GMAC_RSR_REC ) != 0 ) && ( xEMACTaskHandle != NULL ) )\r
-       {\r
-               /* let the prvEMACHandlerTask know that there was an RX event. */\r
-               ulISREvents |= EMAC_IF_RX_EVENT;\r
-               /* Only an RX interrupt can wakeup prvEMACHandlerTask. */\r
-               vTaskNotifyGiveFromISR( xEMACTaskHandle, ( BaseType_t * ) &xGMACSwitchRequired );\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvTxCallback( uint32_t ulStatus, uint8_t *puc_buffer )\r
-{\r
-       if( ( xTxBufferQueue != NULL ) && ( xEMACTaskHandle != NULL ) )\r
-       {\r
-               /* let the prvEMACHandlerTask know that there was an RX event. */\r
-               ulISREvents |= EMAC_IF_TX_EVENT;\r
-\r
-               vTaskNotifyGiveFromISR( xEMACTaskHandle, ( BaseType_t * ) &xGMACSwitchRequired );\r
-               xQueueSendFromISR( xTxBufferQueue, &puc_buffer, ( BaseType_t * ) &xGMACSwitchRequired );\r
-               tx_release_count[ 2 ]++;\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-BaseType_t xNetworkInterfaceInitialise( void )\r
-{\r
-const TickType_t x5_Seconds = 5000UL;\r
-\r
-       if( xEMACTaskHandle == NULL )\r
-       {\r
-               prvGMACInit();\r
-\r
-               /* Wait at most 5 seconds for a Link Status in the PHY. */\r
-               xGMACWaitLS( pdMS_TO_TICKS( x5_Seconds ) );\r
-\r
-               /* The handler task is created at the highest possible priority to\r
-               ensure the interrupt handler can return directly to it. */\r
-               xTaskCreate( prvEMACHandlerTask, "EMAC", configEMAC_TASK_STACK_SIZE, NULL, configMAX_PRIORITIES - 1, &xEMACTaskHandle );\r
-               configASSERT( xEMACTaskHandle );\r
-       }\r
-\r
-       if( xTxBufferQueue == NULL )\r
-       {\r
-               xTxBufferQueue = xQueueCreate( GMAC_TX_BUFFERS, sizeof( void * ) );\r
-               configASSERT( xTxBufferQueue );\r
-       }\r
-\r
-       if( xTXDescriptorSemaphore == NULL )\r
-       {\r
-               xTXDescriptorSemaphore = xSemaphoreCreateCounting( ( UBaseType_t ) GMAC_TX_BUFFERS, ( UBaseType_t ) GMAC_TX_BUFFERS );\r
-               configASSERT( xTXDescriptorSemaphore );\r
-       }\r
-       /* When returning non-zero, the stack will become active and\r
-    start DHCP (in configured) */\r
-       return ( ulPHYLinkStatus & BMSR_LINK_STATUS ) != 0;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-BaseType_t xGetPhyLinkStatus( void )\r
-{\r
-BaseType_t xResult;\r
-\r
-       /* This function returns true if the Link Status in the PHY is high. */\r
-       if( ( ulPHYLinkStatus & BMSR_LINK_STATUS ) != 0 )\r
-       {\r
-               xResult = pdTRUE;\r
-       }\r
-       else\r
-       {\r
-               xResult = pdFALSE;\r
-       }\r
-\r
-       return xResult;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-BaseType_t xNetworkInterfaceOutput( NetworkBufferDescriptor_t * const pxDescriptor, BaseType_t bReleaseAfterSend )\r
-{\r
-/* Do not wait too long for a free TX DMA buffer. */\r
-const TickType_t xBlockTimeTicks = pdMS_TO_TICKS( 50u );\r
-\r
-       do {\r
-               if( ( ulPHYLinkStatus & BMSR_LINK_STATUS ) == 0 )\r
-               {\r
-                       /* Do not attempt to send packets as long as the Link Status is low. */\r
-                       break;\r
-               }\r
-               if( xTXDescriptorSemaphore == NULL )\r
-               {\r
-                       /* Semaphore has not been created yet? */\r
-                       break;\r
-               }\r
-               if( xSemaphoreTake( xTXDescriptorSemaphore, xBlockTimeTicks ) != pdPASS )\r
-               {\r
-                       /* Time-out waiting for a free TX descriptor. */\r
-                       tx_release_count[ 3 ]++;\r
-                       break;\r
-               }\r
-               #if( ipconfigZERO_COPY_TX_DRIVER != 0 )\r
-               {\r
-                       /* Confirm that the pxDescriptor may be kept by the driver. */\r
-                       configASSERT( bReleaseAfterSend != pdFALSE );\r
-               }\r
-               #endif /* ipconfigZERO_COPY_TX_DRIVER */\r
-\r
-               gmac_dev_write( &gs_gmac_dev, (void *)pxDescriptor->pucEthernetBuffer, pxDescriptor->xDataLength, prvTxCallback );\r
-\r
-               #if( ipconfigZERO_COPY_TX_DRIVER != 0 )\r
-               {\r
-                       /* Confirm that the pxDescriptor may be kept by the driver. */\r
-                       bReleaseAfterSend = pdFALSE;\r
-               }\r
-               #endif /* ipconfigZERO_COPY_TX_DRIVER */\r
-               /* Not interested in a call-back after TX. */\r
-               iptraceNETWORK_INTERFACE_TRANSMIT();\r
-       } while( 0 );\r
-\r
-       if( bReleaseAfterSend != pdFALSE )\r
-       {\r
-               vReleaseNetworkBufferAndDescriptor( pxDescriptor );\r
-       }\r
-       return pdTRUE;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static BaseType_t prvGMACInit( void )\r
-{\r
-uint32_t ncfgr;\r
-\r
-       gmac_options_t gmac_option;\r
-\r
-       memset( &gmac_option, '\0', sizeof( gmac_option ) );\r
-       gmac_option.uc_copy_all_frame = 0;\r
-       gmac_option.uc_no_boardcast = 0;\r
-       memcpy( gmac_option.uc_mac_addr, ucMACAddress, sizeof( gmac_option.uc_mac_addr ) );\r
-\r
-       gs_gmac_dev.p_hw = GMAC;\r
-       gmac_dev_init( GMAC, &gs_gmac_dev, &gmac_option );\r
-\r
-       NVIC_SetPriority( GMAC_IRQn, configMAC_INTERRUPT_PRIORITY );\r
-       NVIC_EnableIRQ( GMAC_IRQn );\r
-\r
-       /* Contact the Ethernet PHY and store it's address in 'ethernet_phy_addr' */\r
-       ethernet_phy_init( GMAC, ETHERNET_CONF_PHY_ADDR, sysclk_get_cpu_hz() );\r
-\r
-       ethernet_phy_auto_negotiate( GMAC, ethernet_phy_addr );\r
-       ethernet_phy_set_link( GMAC, ethernet_phy_addr, 1 );\r
-\r
-       /* The GMAC driver will call a hook prvRxCallback(), which\r
-       in turn will wake-up the task by calling vTaskNotifyGiveFromISR() */\r
-       gmac_dev_set_rx_callback( &gs_gmac_dev, prvRxCallback );\r
-       gmac_set_address( GMAC, 1, (uint8_t*)llmnr_mac_address );\r
-\r
-       ncfgr = GMAC_NCFGR_SPD | GMAC_NCFGR_FD;\r
-\r
-       GMAC->GMAC_NCFGR = ( GMAC->GMAC_NCFGR & ~( GMAC_NCFGR_SPD | GMAC_NCFGR_FD ) ) | ncfgr;\r
-\r
-       return 1;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static inline unsigned long ulReadMDIO( unsigned /*short*/ usAddress )\r
-{\r
-uint32_t ulValue, ulReturn;\r
-int rc;\r
-\r
-       gmac_enable_management( GMAC, 1 );\r
-       rc = gmac_phy_read( GMAC, ethernet_phy_addr, usAddress, &ulValue );\r
-       gmac_enable_management( GMAC, 0 );\r
-       if( rc == GMAC_OK )\r
-       {\r
-               ulReturn = ulValue;\r
-       }\r
-       else\r
-       {\r
-               ulReturn = 0UL;\r
-       }\r
-\r
-       return ulReturn;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static BaseType_t xGMACWaitLS( TickType_t xMaxTime )\r
-{\r
-TickType_t xStartTime = xTaskGetTickCount();\r
-TickType_t xEndTime;\r
-BaseType_t xReturn;\r
-const TickType_t xShortTime = pdMS_TO_TICKS( 100UL );\r
-\r
-       for( ;; )\r
-       {\r
-               xEndTime = xTaskGetTickCount();\r
-\r
-               if( ( xEndTime - xStartTime ) > xMaxTime )\r
-               {\r
-                       /* Wated more than xMaxTime, return. */\r
-                       xReturn = pdFALSE;\r
-                       break;\r
-               }\r
-\r
-               /* Check the link status again. */\r
-               ulPHYLinkStatus = ulReadMDIO( PHY_REG_01_BMSR );\r
-\r
-               if( ( ulPHYLinkStatus & BMSR_LINK_STATUS ) != 0 )\r
-               {\r
-                       /* Link is up - return. */\r
-                       xReturn = pdTRUE;\r
-                       break;\r
-               }\r
-\r
-               /* Link is down - wait in the Blocked state for a short while (to allow\r
-               other tasks to execute) before checking again. */\r
-               vTaskDelay( xShortTime );\r
-       }\r
-\r
-       FreeRTOS_printf( ( "xGMACWaitLS: %ld (PHY %d) freq %lu Mz\n",\r
-               xReturn,\r
-               ethernet_phy_addr,\r
-               sysclk_get_cpu_hz() / HZ_PER_MHZ ) );\r
-\r
-       return xReturn;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-//#if( ipconfigDRIVER_INCLUDED_TX_IP_CHECKSUM == 1 ) && ( ipconfigHAS_TX_CRC_OFFLOADING == 0 )\r
-\r
-       void vGMACGenerateChecksum( uint8_t *apBuffer )\r
-       {\r
-       ProtocolPacket_t *xProtPacket = (ProtocolPacket_t *)apBuffer;\r
-\r
-               if ( xProtPacket->xTCPPacket.xEthernetHeader.usFrameType == ipIPv4_FRAME_TYPE )\r
-               {\r
-                       IPHeader_t *pxIPHeader = &(xProtPacket->xTCPPacket.xIPHeader);\r
-\r
-                       /* Calculate the IP header checksum. */\r
-                       pxIPHeader->usHeaderChecksum = 0x00;\r
-                       pxIPHeader->usHeaderChecksum = usGenerateChecksum( 0, ( uint8_t * ) &( pxIPHeader->ucVersionHeaderLength ), ipSIZE_OF_IPv4_HEADER );\r
-                       pxIPHeader->usHeaderChecksum = ~FreeRTOS_htons( pxIPHeader->usHeaderChecksum );\r
-\r
-                       /* Calculate the TCP checksum for an outgoing packet. */\r
-                       usGenerateProtocolChecksum( ( uint8_t * ) apBuffer, pdTRUE );\r
-               }\r
-       }\r
-\r
-//#endif\r
-/*-----------------------------------------------------------*/\r
-\r
-static uint32_t prvEMACRxPoll( void )\r
-{\r
-unsigned char *pucUseBuffer;\r
-uint32_t ulReceiveCount, ulResult, ulReturnValue = 0;\r
-static NetworkBufferDescriptor_t *pxNextNetworkBufferDescriptor = NULL;\r
-const UBaseType_t xMinDescriptorsToLeave = 2UL;\r
-const TickType_t xBlockTime = pdMS_TO_TICKS( 100UL );\r
-static IPStackEvent_t xRxEvent = { eNetworkRxEvent, NULL };\r
-\r
-       for( ;; )\r
-       {\r
-               /* If pxNextNetworkBufferDescriptor was not left pointing at a valid\r
-               descriptor then allocate one now. */\r
-               if( ( pxNextNetworkBufferDescriptor == NULL ) && ( uxGetNumberOfFreeNetworkBuffers() > xMinDescriptorsToLeave ) )\r
-               {\r
-                       pxNextNetworkBufferDescriptor = pxGetNetworkBufferWithDescriptor( ipTOTAL_ETHERNET_FRAME_SIZE, xBlockTime );\r
-               }\r
-\r
-               if( pxNextNetworkBufferDescriptor != NULL )\r
-               {\r
-                       /* Point pucUseBuffer to the buffer pointed to by the descriptor. */\r
-                       pucUseBuffer = ( unsigned char* ) ( pxNextNetworkBufferDescriptor->pucEthernetBuffer - ipconfigPACKET_FILLER_SIZE );\r
-               }\r
-               else\r
-               {\r
-                       /* As long as pxNextNetworkBufferDescriptor is NULL, the incoming\r
-                       messages will be flushed and ignored. */\r
-                       pucUseBuffer = NULL;\r
-               }\r
-\r
-               /* Read the next packet from the hardware into pucUseBuffer. */\r
-               ulResult = gmac_dev_read( &gs_gmac_dev, pucUseBuffer, ipTOTAL_ETHERNET_FRAME_SIZE, &ulReceiveCount );\r
-\r
-               if( ( ulResult != GMAC_OK ) || ( ulReceiveCount == 0 ) )\r
-               {\r
-                       /* No data from the hardware. */\r
-                       break;\r
-               }\r
-\r
-               if( pxNextNetworkBufferDescriptor == NULL )\r
-               {\r
-                       /* Data was read from the hardware, but no descriptor was available\r
-                       for it, so it will be dropped. */\r
-                       iptraceETHERNET_RX_EVENT_LOST();\r
-                       continue;\r
-               }\r
-\r
-               iptraceNETWORK_INTERFACE_RECEIVE();\r
-               pxNextNetworkBufferDescriptor->xDataLength = ( size_t ) ulReceiveCount;\r
-               xRxEvent.pvData = ( void * ) pxNextNetworkBufferDescriptor;\r
-\r
-               /* Send the descriptor to the IP task for processing. */\r
-               if( xSendEventStructToIPTask( &xRxEvent, xBlockTime ) != pdTRUE )\r
-               {\r
-                       /* The buffer could not be sent to the stack so must be released\r
-                       again. */\r
-                       vReleaseNetworkBufferAndDescriptor( pxNextNetworkBufferDescriptor );\r
-                       iptraceETHERNET_RX_EVENT_LOST();\r
-                       FreeRTOS_printf( ( "prvEMACRxPoll: Can not queue return packet!\n" ) );\r
-               }\r
-\r
-               /* Now the buffer has either been passed to the IP-task,\r
-               or it has been released in the code above. */\r
-               pxNextNetworkBufferDescriptor = NULL;\r
-               ulReturnValue++;\r
-       }\r
-\r
-       return ulReturnValue;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvEMACHandlerTask( void *pvParameters )\r
-{\r
-TimeOut_t xPhyTime;\r
-TickType_t xPhyRemTime;\r
-UBaseType_t uxLastMinBufferCount = 0, uxCount;\r
-UBaseType_t uxCurrentCount;\r
-#if( ipconfigCHECK_IP_QUEUE_SPACE != 0 )\r
-       UBaseType_t uxLastMinQueueSpace;\r
-#endif\r
-#if( ipconfigZERO_COPY_TX_DRIVER != 0 )\r
-       NetworkBufferDescriptor_t *pxBuffer;\r
-#endif\r
-uint8_t *pucBuffer;\r
-BaseType_t xResult = 0;\r
-uint32_t xStatus;\r
-const TickType_t ulMaxBlockTime = pdMS_TO_TICKS( EMAC_MAX_BLOCK_TIME_MS );\r
-\r
-       /* Remove compiler warnings about unused parameters. */\r
-       ( void ) pvParameters;\r
-\r
-       configASSERT( xEMACTaskHandle );\r
-\r
-       vTaskSetTimeOutState( &xPhyTime );\r
-       xPhyRemTime = pdMS_TO_TICKS( PHY_LS_LOW_CHECK_TIME_MS );\r
-\r
-       for( ;; )\r
-       {\r
-               uxCurrentCount = uxGetMinimumFreeNetworkBuffers();\r
-               if( uxLastMinBufferCount != uxCurrentCount )\r
-               {\r
-                       /* The logging produced below may be helpful\r
-                       while tuning +TCP: see how many buffers are in use. */\r
-                       uxLastMinBufferCount = uxCurrentCount;\r
-                       FreeRTOS_printf( ( "Network buffers: %lu lowest %lu\n",\r
-                               uxGetNumberOfFreeNetworkBuffers(), uxCurrentCount ) );\r
-               }\r
-\r
-               #if( ipconfigCHECK_IP_QUEUE_SPACE != 0 )\r
-               {\r
-                       uxCurrentCount = uxGetMinimumIPQueueSpace();\r
-                       if( uxLastMinQueueSpace != uxCurrentCount )\r
-                       {\r
-                               /* The logging produced below may be helpful\r
-                               while tuning +TCP: see how many buffers are in use. */\r
-                               uxLastMinQueueSpace = uxCurrentCount;\r
-                               FreeRTOS_printf( ( "Queue space: lowest %lu\n", uxCurrentCount ) );\r
-                       }\r
-               }\r
-               #endif /* ipconfigCHECK_IP_QUEUE_SPACE */\r
-\r
-               if( ( ulISREvents & EMAC_IF_ALL_EVENT ) == 0 )\r
-               {\r
-                       /* No events to process now, wait for the next. */\r
-                       ulTaskNotifyTake( pdFALSE, ulMaxBlockTime );\r
-               }\r
-\r
-               if( ( ulISREvents & EMAC_IF_RX_EVENT ) != 0 )\r
-               {\r
-                       ulISREvents &= ~EMAC_IF_RX_EVENT;\r
-\r
-                       /* Wait for the EMAC interrupt to indicate that another packet has been\r
-                       received. */\r
-                       xResult = prvEMACRxPoll();\r
-               }\r
-\r
-               if( ( ulISREvents & EMAC_IF_TX_EVENT ) != 0 )\r
-               {\r
-                       /* Future extension: code to release TX buffers if zero-copy is used. */\r
-                       ulISREvents &= ~EMAC_IF_TX_EVENT;\r
-                       while( xQueueReceive( xTxBufferQueue, &pucBuffer, 0 ) != pdFALSE )\r
-                       {\r
-                               #if( ipconfigZERO_COPY_TX_DRIVER != 0 )\r
-                               {\r
-                                       pxBuffer = pxPacketBuffer_to_NetworkBuffer( pucBuffer );\r
-                                       if( pxBuffer != NULL )\r
-                                       {\r
-                                               vReleaseNetworkBufferAndDescriptor( pxBuffer );\r
-                                               tx_release_count[ 0 ]++;\r
-                                       }\r
-                                       else\r
-                                       {\r
-                                               tx_release_count[ 1 ]++;\r
-                                       }\r
-                               }\r
-                               #else\r
-                               {\r
-                                       tx_release_count[ 0 ]++;\r
-                               }\r
-                               #endif\r
-                               uxCount = uxQueueMessagesWaiting( ( QueueHandle_t ) xTXDescriptorSemaphore );\r
-                               if( uxCount < GMAC_TX_BUFFERS )\r
-                               {\r
-                                       /* Tell the counting semaphore that one more TX descriptor is available. */\r
-                                       xSemaphoreGive( xTXDescriptorSemaphore );\r
-                               }\r
-                       }\r
-               }\r
-\r
-               if( ( ulISREvents & EMAC_IF_ERR_EVENT ) != 0 )\r
-               {\r
-                       /* Future extension: logging about errors that occurred. */\r
-                       ulISREvents &= ~EMAC_IF_ERR_EVENT;\r
-               }\r
-\r
-               if( xResult > 0 )\r
-               {\r
-                       /* A packet was received. No need to check for the PHY status now,\r
-                       but set a timer to check it later on. */\r
-                       vTaskSetTimeOutState( &xPhyTime );\r
-                       xPhyRemTime = pdMS_TO_TICKS( PHY_LS_HIGH_CHECK_TIME_MS );\r
-                       xResult = 0;\r
-               }\r
-               else if( xTaskCheckForTimeOut( &xPhyTime, &xPhyRemTime ) != pdFALSE )\r
-               {\r
-                       /* Check the link status again. */\r
-                       xStatus = ulReadMDIO( PHY_REG_01_BMSR );\r
-\r
-                       if( ( ulPHYLinkStatus & BMSR_LINK_STATUS ) != ( xStatus & BMSR_LINK_STATUS ) )\r
-                       {\r
-                               ulPHYLinkStatus = xStatus;\r
-                               FreeRTOS_printf( ( "prvEMACHandlerTask: PHY LS now %d\n", ( ulPHYLinkStatus & BMSR_LINK_STATUS ) != 0 ) );\r
-                       }\r
-\r
-                       vTaskSetTimeOutState( &xPhyTime );\r
-                       if( ( ulPHYLinkStatus & BMSR_LINK_STATUS ) != 0 )\r
-                       {\r
-                               xPhyRemTime = pdMS_TO_TICKS( PHY_LS_HIGH_CHECK_TIME_MS );\r
-                       }\r
-                       else\r
-                       {\r
-                               xPhyRemTime = pdMS_TO_TICKS( PHY_LS_LOW_CHECK_TIME_MS );\r
-                       }\r
-               }\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
+/*
+FreeRTOS+TCP V2.0.11
+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
+*/
+
+/* Standard includes. */
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+/* FreeRTOS includes. */
+#include "FreeRTOS.h"
+#include "task.h"
+#include "queue.h"
+#include "semphr.h"
+
+/* FreeRTOS+TCP includes. */
+#include "FreeRTOS_IP.h"
+#include "FreeRTOS_Sockets.h"
+#include "FreeRTOS_IP_Private.h"
+#include "NetworkBufferManagement.h"
+#include "NetworkInterface.h"
+
+/* Some files from the Atmel Software Framework */
+/*_RB_ The SAM4E portable layer has three different header files called gmac.h! */
+#include "instance/gmac.h"
+#include <sysclk.h>
+#include <ethernet_phy.h>
+
+#ifndef        BMSR_LINK_STATUS
+       #define BMSR_LINK_STATUS            0x0004  //!< Link status
+#endif
+
+#ifndef        PHY_LS_HIGH_CHECK_TIME_MS
+       /* Check if the LinkSStatus in the PHY is still high after 15 seconds of not
+       receiving packets. */
+       #define PHY_LS_HIGH_CHECK_TIME_MS       15000
+#endif
+
+#ifndef        PHY_LS_LOW_CHECK_TIME_MS
+       /* Check if the LinkSStatus in the PHY is still low every second. */
+       #define PHY_LS_LOW_CHECK_TIME_MS        1000
+#endif
+
+/* Interrupt events to process.  Currently only the Rx event is processed
+although code for other events is included to allow for possible future
+expansion. */
+#define EMAC_IF_RX_EVENT        1UL
+#define EMAC_IF_TX_EVENT        2UL
+#define EMAC_IF_ERR_EVENT       4UL
+#define EMAC_IF_ALL_EVENT       ( EMAC_IF_RX_EVENT | EMAC_IF_TX_EVENT | EMAC_IF_ERR_EVENT )
+
+#define ETHERNET_CONF_PHY_ADDR  BOARD_GMAC_PHY_ADDR
+
+#define HZ_PER_MHZ                             ( 1000000UL )
+
+#ifndef        EMAC_MAX_BLOCK_TIME_MS
+       #define EMAC_MAX_BLOCK_TIME_MS  100ul
+#endif
+
+#if !defined( GMAC_USES_TX_CALLBACK ) || ( GMAC_USES_TX_CALLBACK != 1 )
+       #error Please define GMAC_USES_TX_CALLBACK as 1
+#endif
+
+/* Default the size of the stack used by the EMAC deferred handler task to 4x
+the size of the stack used by the idle task - but allow this to be overridden in
+FreeRTOSConfig.h as configMINIMAL_STACK_SIZE is a user definable constant. */
+#ifndef configEMAC_TASK_STACK_SIZE
+       #define configEMAC_TASK_STACK_SIZE ( 4 * configMINIMAL_STACK_SIZE )
+#endif
+
+/*-----------------------------------------------------------*/
+
+/*
+ * Wait a fixed time for the link status to indicate the network is up.
+ */
+static BaseType_t xGMACWaitLS( TickType_t xMaxTime );
+
+#if( ipconfigDRIVER_INCLUDED_TX_IP_CHECKSUM == 1 ) && ( ipconfigHAS_TX_CRC_OFFLOADING == 0 )
+       void vGMACGenerateChecksum( uint8_t *apBuffer );
+#endif
+
+/*
+ * Called from the ASF GMAC driver.
+ */
+static void prvRxCallback( uint32_t ulStatus );
+static void prvTxCallback( uint32_t ulStatus, uint8_t *puc_buffer );
+
+/*
+ * A deferred interrupt handler task that processes GMAC interrupts.
+ */
+static void prvEMACHandlerTask( void *pvParameters );
+
+/*
+ * Initialise the ASF GMAC driver.
+ */
+static BaseType_t prvGMACInit( void );
+
+/*
+ * Try to obtain an Rx packet from the hardware.
+ */
+static uint32_t prvEMACRxPoll( void );
+
+/*-----------------------------------------------------------*/
+
+/* Bit map of outstanding ETH interrupt events for processing.  Currently only
+the Rx interrupt is handled, although code is included for other events to
+enable future expansion. */
+static volatile uint32_t ulISREvents;
+
+/* A copy of PHY register 1: 'PHY_REG_01_BMSR' */
+static uint32_t ulPHYLinkStatus = 0;
+static volatile BaseType_t xGMACSwitchRequired;
+
+/* ethernet_phy_addr: the address of the PHY in use.
+Atmel was a bit ambiguous about it so the address will be stored
+in this variable, see ethernet_phy.c */
+extern int ethernet_phy_addr;
+
+/* LLMNR multicast address. */
+static const uint8_t llmnr_mac_address[] = { 0x01, 0x00, 0x5E, 0x00, 0x00, 0xFC };
+
+/* The GMAC object as defined by the ASF drivers. */
+static gmac_device_t gs_gmac_dev;
+
+/* MAC address to use. */
+extern const uint8_t ucMACAddress[ 6 ];
+
+/* Holds the handle of the task used as a deferred interrupt processor.  The
+handle is used so direct notifications can be sent to the task for all EMAC/DMA
+related interrupts. */
+TaskHandle_t xEMACTaskHandle = NULL;
+
+static QueueHandle_t xTxBufferQueue;
+int tx_release_count[ 4 ];
+
+/* xTXDescriptorSemaphore is a counting semaphore with
+a maximum count of GMAC_TX_BUFFERS, which is the number of
+DMA TX descriptors. */
+static SemaphoreHandle_t xTXDescriptorSemaphore = NULL;
+
+/*-----------------------------------------------------------*/
+
+/*
+ * GMAC interrupt handler.
+ */
+void GMAC_Handler(void)
+{
+       xGMACSwitchRequired = pdFALSE;
+
+       /* gmac_handler() may call prvRxCallback() which may change
+       the value of xGMACSwitchRequired. */
+       gmac_handler( &gs_gmac_dev );
+
+       if( xGMACSwitchRequired != pdFALSE )
+       {
+               portEND_SWITCHING_ISR( xGMACSwitchRequired );
+       }
+}
+/*-----------------------------------------------------------*/
+
+static void prvRxCallback( uint32_t ulStatus )
+{
+       if( ( ( ulStatus & GMAC_RSR_REC ) != 0 ) && ( xEMACTaskHandle != NULL ) )
+       {
+               /* let the prvEMACHandlerTask know that there was an RX event. */
+               ulISREvents |= EMAC_IF_RX_EVENT;
+               /* Only an RX interrupt can wakeup prvEMACHandlerTask. */
+               vTaskNotifyGiveFromISR( xEMACTaskHandle, ( BaseType_t * ) &xGMACSwitchRequired );
+       }
+}
+/*-----------------------------------------------------------*/
+
+static void prvTxCallback( uint32_t ulStatus, uint8_t *puc_buffer )
+{
+       if( ( xTxBufferQueue != NULL ) && ( xEMACTaskHandle != NULL ) )
+       {
+               /* let the prvEMACHandlerTask know that there was an RX event. */
+               ulISREvents |= EMAC_IF_TX_EVENT;
+
+               vTaskNotifyGiveFromISR( xEMACTaskHandle, ( BaseType_t * ) &xGMACSwitchRequired );
+               xQueueSendFromISR( xTxBufferQueue, &puc_buffer, ( BaseType_t * ) &xGMACSwitchRequired );
+               tx_release_count[ 2 ]++;
+       }
+}
+/*-----------------------------------------------------------*/
+
+BaseType_t xNetworkInterfaceInitialise( void )
+{
+const TickType_t x5_Seconds = 5000UL;
+
+       if( xEMACTaskHandle == NULL )
+       {
+               prvGMACInit();
+
+               /* Wait at most 5 seconds for a Link Status in the PHY. */
+               xGMACWaitLS( pdMS_TO_TICKS( x5_Seconds ) );
+
+               /* The handler task is created at the highest possible priority to
+               ensure the interrupt handler can return directly to it. */
+               xTaskCreate( prvEMACHandlerTask, "EMAC", configEMAC_TASK_STACK_SIZE, NULL, configMAX_PRIORITIES - 1, &xEMACTaskHandle );
+               configASSERT( xEMACTaskHandle );
+       }
+
+       if( xTxBufferQueue == NULL )
+       {
+               xTxBufferQueue = xQueueCreate( GMAC_TX_BUFFERS, sizeof( void * ) );
+               configASSERT( xTxBufferQueue );
+       }
+
+       if( xTXDescriptorSemaphore == NULL )
+       {
+               xTXDescriptorSemaphore = xSemaphoreCreateCounting( ( UBaseType_t ) GMAC_TX_BUFFERS, ( UBaseType_t ) GMAC_TX_BUFFERS );
+               configASSERT( xTXDescriptorSemaphore );
+       }
+       /* When returning non-zero, the stack will become active and
+    start DHCP (in configured) */
+       return ( ulPHYLinkStatus & BMSR_LINK_STATUS ) != 0;
+}
+/*-----------------------------------------------------------*/
+
+BaseType_t xGetPhyLinkStatus( void )
+{
+BaseType_t xResult;
+
+       /* This function returns true if the Link Status in the PHY is high. */
+       if( ( ulPHYLinkStatus & BMSR_LINK_STATUS ) != 0 )
+       {
+               xResult = pdTRUE;
+       }
+       else
+       {
+               xResult = pdFALSE;
+       }
+
+       return xResult;
+}
+/*-----------------------------------------------------------*/
+
+BaseType_t xNetworkInterfaceOutput( NetworkBufferDescriptor_t * const pxDescriptor, BaseType_t bReleaseAfterSend )
+{
+/* Do not wait too long for a free TX DMA buffer. */
+const TickType_t xBlockTimeTicks = pdMS_TO_TICKS( 50u );
+
+       do {
+               if( ( ulPHYLinkStatus & BMSR_LINK_STATUS ) == 0 )
+               {
+                       /* Do not attempt to send packets as long as the Link Status is low. */
+                       break;
+               }
+               if( xTXDescriptorSemaphore == NULL )
+               {
+                       /* Semaphore has not been created yet? */
+                       break;
+               }
+               if( xSemaphoreTake( xTXDescriptorSemaphore, xBlockTimeTicks ) != pdPASS )
+               {
+                       /* Time-out waiting for a free TX descriptor. */
+                       tx_release_count[ 3 ]++;
+                       break;
+               }
+               #if( ipconfigZERO_COPY_TX_DRIVER != 0 )
+               {
+                       /* Confirm that the pxDescriptor may be kept by the driver. */
+                       configASSERT( bReleaseAfterSend != pdFALSE );
+               }
+               #endif /* ipconfigZERO_COPY_TX_DRIVER */
+
+               gmac_dev_write( &gs_gmac_dev, (void *)pxDescriptor->pucEthernetBuffer, pxDescriptor->xDataLength, prvTxCallback );
+
+               #if( ipconfigZERO_COPY_TX_DRIVER != 0 )
+               {
+                       /* Confirm that the pxDescriptor may be kept by the driver. */
+                       bReleaseAfterSend = pdFALSE;
+               }
+               #endif /* ipconfigZERO_COPY_TX_DRIVER */
+               /* Not interested in a call-back after TX. */
+               iptraceNETWORK_INTERFACE_TRANSMIT();
+       } while( 0 );
+
+       if( bReleaseAfterSend != pdFALSE )
+       {
+               vReleaseNetworkBufferAndDescriptor( pxDescriptor );
+       }
+       return pdTRUE;
+}
+/*-----------------------------------------------------------*/
+
+static BaseType_t prvGMACInit( void )
+{
+uint32_t ncfgr;
+
+       gmac_options_t gmac_option;
+
+       memset( &gmac_option, '\0', sizeof( gmac_option ) );
+       gmac_option.uc_copy_all_frame = 0;
+       gmac_option.uc_no_boardcast = 0;
+       memcpy( gmac_option.uc_mac_addr, ucMACAddress, sizeof( gmac_option.uc_mac_addr ) );
+
+       gs_gmac_dev.p_hw = GMAC;
+       gmac_dev_init( GMAC, &gs_gmac_dev, &gmac_option );
+
+       NVIC_SetPriority( GMAC_IRQn, configMAC_INTERRUPT_PRIORITY );
+       NVIC_EnableIRQ( GMAC_IRQn );
+
+       /* Contact the Ethernet PHY and store it's address in 'ethernet_phy_addr' */
+       ethernet_phy_init( GMAC, ETHERNET_CONF_PHY_ADDR, sysclk_get_cpu_hz() );
+
+       ethernet_phy_auto_negotiate( GMAC, ethernet_phy_addr );
+       ethernet_phy_set_link( GMAC, ethernet_phy_addr, 1 );
+
+       /* The GMAC driver will call a hook prvRxCallback(), which
+       in turn will wake-up the task by calling vTaskNotifyGiveFromISR() */
+       gmac_dev_set_rx_callback( &gs_gmac_dev, prvRxCallback );
+       gmac_set_address( GMAC, 1, (uint8_t*)llmnr_mac_address );
+
+       ncfgr = GMAC_NCFGR_SPD | GMAC_NCFGR_FD;
+
+       GMAC->GMAC_NCFGR = ( GMAC->GMAC_NCFGR & ~( GMAC_NCFGR_SPD | GMAC_NCFGR_FD ) ) | ncfgr;
+
+       return 1;
+}
+/*-----------------------------------------------------------*/
+
+static inline unsigned long ulReadMDIO( unsigned /*short*/ usAddress )
+{
+uint32_t ulValue, ulReturn;
+int rc;
+
+       gmac_enable_management( GMAC, 1 );
+       rc = gmac_phy_read( GMAC, ethernet_phy_addr, usAddress, &ulValue );
+       gmac_enable_management( GMAC, 0 );
+       if( rc == GMAC_OK )
+       {
+               ulReturn = ulValue;
+       }
+       else
+       {
+               ulReturn = 0UL;
+       }
+
+       return ulReturn;
+}
+/*-----------------------------------------------------------*/
+
+static BaseType_t xGMACWaitLS( TickType_t xMaxTime )
+{
+TickType_t xStartTime = xTaskGetTickCount();
+TickType_t xEndTime;
+BaseType_t xReturn;
+const TickType_t xShortTime = pdMS_TO_TICKS( 100UL );
+
+       for( ;; )
+       {
+               xEndTime = xTaskGetTickCount();
+
+               if( ( xEndTime - xStartTime ) > xMaxTime )
+               {
+                       /* Wated more than xMaxTime, return. */
+                       xReturn = pdFALSE;
+                       break;
+               }
+
+               /* Check the link status again. */
+               ulPHYLinkStatus = ulReadMDIO( PHY_REG_01_BMSR );
+
+               if( ( ulPHYLinkStatus & BMSR_LINK_STATUS ) != 0 )
+               {
+                       /* Link is up - return. */
+                       xReturn = pdTRUE;
+                       break;
+               }
+
+               /* Link is down - wait in the Blocked state for a short while (to allow
+               other tasks to execute) before checking again. */
+               vTaskDelay( xShortTime );
+       }
+
+       FreeRTOS_printf( ( "xGMACWaitLS: %ld (PHY %d) freq %lu Mz\n",
+               xReturn,
+               ethernet_phy_addr,
+               sysclk_get_cpu_hz() / HZ_PER_MHZ ) );
+
+       return xReturn;
+}
+/*-----------------------------------------------------------*/
+
+//#if( ipconfigDRIVER_INCLUDED_TX_IP_CHECKSUM == 1 ) && ( ipconfigHAS_TX_CRC_OFFLOADING == 0 )
+
+       void vGMACGenerateChecksum( uint8_t *apBuffer )
+       {
+       ProtocolPacket_t *xProtPacket = (ProtocolPacket_t *)apBuffer;
+
+               if ( xProtPacket->xTCPPacket.xEthernetHeader.usFrameType == ipIPv4_FRAME_TYPE )
+               {
+                       IPHeader_t *pxIPHeader = &(xProtPacket->xTCPPacket.xIPHeader);
+
+                       /* Calculate the IP header checksum. */
+                       pxIPHeader->usHeaderChecksum = 0x00;
+                       pxIPHeader->usHeaderChecksum = usGenerateChecksum( 0, ( uint8_t * ) &( pxIPHeader->ucVersionHeaderLength ), ipSIZE_OF_IPv4_HEADER );
+                       pxIPHeader->usHeaderChecksum = ~FreeRTOS_htons( pxIPHeader->usHeaderChecksum );
+
+                       /* Calculate the TCP checksum for an outgoing packet. */
+                       usGenerateProtocolChecksum( ( uint8_t * ) apBuffer, pdTRUE );
+               }
+       }
+
+//#endif
+/*-----------------------------------------------------------*/
+
+static uint32_t prvEMACRxPoll( void )
+{
+unsigned char *pucUseBuffer;
+uint32_t ulReceiveCount, ulResult, ulReturnValue = 0;
+static NetworkBufferDescriptor_t *pxNextNetworkBufferDescriptor = NULL;
+const UBaseType_t xMinDescriptorsToLeave = 2UL;
+const TickType_t xBlockTime = pdMS_TO_TICKS( 100UL );
+static IPStackEvent_t xRxEvent = { eNetworkRxEvent, NULL };
+
+       for( ;; )
+       {
+               /* If pxNextNetworkBufferDescriptor was not left pointing at a valid
+               descriptor then allocate one now. */
+               if( ( pxNextNetworkBufferDescriptor == NULL ) && ( uxGetNumberOfFreeNetworkBuffers() > xMinDescriptorsToLeave ) )
+               {
+                       pxNextNetworkBufferDescriptor = pxGetNetworkBufferWithDescriptor( ipTOTAL_ETHERNET_FRAME_SIZE, xBlockTime );
+               }
+
+               if( pxNextNetworkBufferDescriptor != NULL )
+               {
+                       /* Point pucUseBuffer to the buffer pointed to by the descriptor. */
+                       pucUseBuffer = ( unsigned char* ) ( pxNextNetworkBufferDescriptor->pucEthernetBuffer - ipconfigPACKET_FILLER_SIZE );
+               }
+               else
+               {
+                       /* As long as pxNextNetworkBufferDescriptor is NULL, the incoming
+                       messages will be flushed and ignored. */
+                       pucUseBuffer = NULL;
+               }
+
+               /* Read the next packet from the hardware into pucUseBuffer. */
+               ulResult = gmac_dev_read( &gs_gmac_dev, pucUseBuffer, ipTOTAL_ETHERNET_FRAME_SIZE, &ulReceiveCount );
+
+               if( ( ulResult != GMAC_OK ) || ( ulReceiveCount == 0 ) )
+               {
+                       /* No data from the hardware. */
+                       break;
+               }
+
+               if( pxNextNetworkBufferDescriptor == NULL )
+               {
+                       /* Data was read from the hardware, but no descriptor was available
+                       for it, so it will be dropped. */
+                       iptraceETHERNET_RX_EVENT_LOST();
+                       continue;
+               }
+
+               iptraceNETWORK_INTERFACE_RECEIVE();
+               pxNextNetworkBufferDescriptor->xDataLength = ( size_t ) ulReceiveCount;
+               xRxEvent.pvData = ( void * ) pxNextNetworkBufferDescriptor;
+
+               /* Send the descriptor to the IP task for processing. */
+               if( xSendEventStructToIPTask( &xRxEvent, xBlockTime ) != pdTRUE )
+               {
+                       /* The buffer could not be sent to the stack so must be released
+                       again. */
+                       vReleaseNetworkBufferAndDescriptor( pxNextNetworkBufferDescriptor );
+                       iptraceETHERNET_RX_EVENT_LOST();
+                       FreeRTOS_printf( ( "prvEMACRxPoll: Can not queue return packet!\n" ) );
+               }
+
+               /* Now the buffer has either been passed to the IP-task,
+               or it has been released in the code above. */
+               pxNextNetworkBufferDescriptor = NULL;
+               ulReturnValue++;
+       }
+
+       return ulReturnValue;
+}
+/*-----------------------------------------------------------*/
+
+static void prvEMACHandlerTask( void *pvParameters )
+{
+TimeOut_t xPhyTime;
+TickType_t xPhyRemTime;
+UBaseType_t uxLastMinBufferCount = 0, uxCount;
+UBaseType_t uxCurrentCount;
+#if( ipconfigCHECK_IP_QUEUE_SPACE != 0 )
+       UBaseType_t uxLastMinQueueSpace;
+#endif
+#if( ipconfigZERO_COPY_TX_DRIVER != 0 )
+       NetworkBufferDescriptor_t *pxBuffer;
+#endif
+uint8_t *pucBuffer;
+BaseType_t xResult = 0;
+uint32_t xStatus;
+const TickType_t ulMaxBlockTime = pdMS_TO_TICKS( EMAC_MAX_BLOCK_TIME_MS );
+
+       /* Remove compiler warnings about unused parameters. */
+       ( void ) pvParameters;
+
+       configASSERT( xEMACTaskHandle );
+
+       vTaskSetTimeOutState( &xPhyTime );
+       xPhyRemTime = pdMS_TO_TICKS( PHY_LS_LOW_CHECK_TIME_MS );
+
+       for( ;; )
+       {
+               uxCurrentCount = uxGetMinimumFreeNetworkBuffers();
+               if( uxLastMinBufferCount != uxCurrentCount )
+               {
+                       /* The logging produced below may be helpful
+                       while tuning +TCP: see how many buffers are in use. */
+                       uxLastMinBufferCount = uxCurrentCount;
+                       FreeRTOS_printf( ( "Network buffers: %lu lowest %lu\n",
+                               uxGetNumberOfFreeNetworkBuffers(), uxCurrentCount ) );
+               }
+
+               #if( ipconfigCHECK_IP_QUEUE_SPACE != 0 )
+               {
+                       uxCurrentCount = uxGetMinimumIPQueueSpace();
+                       if( uxLastMinQueueSpace != uxCurrentCount )
+                       {
+                               /* The logging produced below may be helpful
+                               while tuning +TCP: see how many buffers are in use. */
+                               uxLastMinQueueSpace = uxCurrentCount;
+                               FreeRTOS_printf( ( "Queue space: lowest %lu\n", uxCurrentCount ) );
+                       }
+               }
+               #endif /* ipconfigCHECK_IP_QUEUE_SPACE */
+
+               if( ( ulISREvents & EMAC_IF_ALL_EVENT ) == 0 )
+               {
+                       /* No events to process now, wait for the next. */
+                       ulTaskNotifyTake( pdFALSE, ulMaxBlockTime );
+               }
+
+               if( ( ulISREvents & EMAC_IF_RX_EVENT ) != 0 )
+               {
+                       ulISREvents &= ~EMAC_IF_RX_EVENT;
+
+                       /* Wait for the EMAC interrupt to indicate that another packet has been
+                       received. */
+                       xResult = prvEMACRxPoll();
+               }
+
+               if( ( ulISREvents & EMAC_IF_TX_EVENT ) != 0 )
+               {
+                       /* Future extension: code to release TX buffers if zero-copy is used. */
+                       ulISREvents &= ~EMAC_IF_TX_EVENT;
+                       while( xQueueReceive( xTxBufferQueue, &pucBuffer, 0 ) != pdFALSE )
+                       {
+                               #if( ipconfigZERO_COPY_TX_DRIVER != 0 )
+                               {
+                                       pxBuffer = pxPacketBuffer_to_NetworkBuffer( pucBuffer );
+                                       if( pxBuffer != NULL )
+                                       {
+                                               vReleaseNetworkBufferAndDescriptor( pxBuffer );
+                                               tx_release_count[ 0 ]++;
+                                       }
+                                       else
+                                       {
+                                               tx_release_count[ 1 ]++;
+                                       }
+                               }
+                               #else
+                               {
+                                       tx_release_count[ 0 ]++;
+                               }
+                               #endif
+                               uxCount = uxQueueMessagesWaiting( ( QueueHandle_t ) xTXDescriptorSemaphore );
+                               if( uxCount < GMAC_TX_BUFFERS )
+                               {
+                                       /* Tell the counting semaphore that one more TX descriptor is available. */
+                                       xSemaphoreGive( xTXDescriptorSemaphore );
+                               }
+                       }
+               }
+
+               if( ( ulISREvents & EMAC_IF_ERR_EVENT ) != 0 )
+               {
+                       /* Future extension: logging about errors that occurred. */
+                       ulISREvents &= ~EMAC_IF_ERR_EVENT;
+               }
+
+               if( xResult > 0 )
+               {
+                       /* A packet was received. No need to check for the PHY status now,
+                       but set a timer to check it later on. */
+                       vTaskSetTimeOutState( &xPhyTime );
+                       xPhyRemTime = pdMS_TO_TICKS( PHY_LS_HIGH_CHECK_TIME_MS );
+                       xResult = 0;
+               }
+               else if( xTaskCheckForTimeOut( &xPhyTime, &xPhyRemTime ) != pdFALSE )
+               {
+                       /* Check the link status again. */
+                       xStatus = ulReadMDIO( PHY_REG_01_BMSR );
+
+                       if( ( ulPHYLinkStatus & BMSR_LINK_STATUS ) != ( xStatus & BMSR_LINK_STATUS ) )
+                       {
+                               ulPHYLinkStatus = xStatus;
+                               FreeRTOS_printf( ( "prvEMACHandlerTask: PHY LS now %d\n", ( ulPHYLinkStatus & BMSR_LINK_STATUS ) != 0 ) );
+                       }
+
+                       vTaskSetTimeOutState( &xPhyTime );
+                       if( ( ulPHYLinkStatus & BMSR_LINK_STATUS ) != 0 )
+                       {
+                               xPhyRemTime = pdMS_TO_TICKS( PHY_LS_HIGH_CHECK_TIME_MS );
+                       }
+                       else
+                       {
+                               xPhyRemTime = pdMS_TO_TICKS( PHY_LS_LOW_CHECK_TIME_MS );
+                       }
+               }
+       }
+}
+/*-----------------------------------------------------------*/
index 6eb069f55a123cee6f67703371b31f3ec5ffce6f..ae40ac9601b254782c5209f7532cf82b1fe3325a 100644 (file)
-/**\r
- * \file\r
- *\r
- * Copyright (c) 2012 Atmel Corporation. All rights reserved.\r
- *\r
- * \asf_license_start\r
- *\r
- * \page License\r
- *\r
- * Redistribution and use in source and binary forms, with or without\r
- * modification, are permitted provided that the following conditions are met:\r
- *\r
- * 1. Redistributions of source code must retain the above copyright notice,\r
- *    this list of conditions and the following disclaimer.\r
- *\r
- * 2. Redistributions in binary form must reproduce the above copyright notice,\r
- *    this list of conditions and the following disclaimer in the documentation\r
- *    and/or other materials provided with the distribution.\r
- *\r
- * 3. The name of Atmel may not be used to endorse or promote products derived\r
- *    from this software without specific prior written permission.\r
- *\r
- * 4. This software may only be redistributed and used in connection with an\r
- *    Atmel microcontroller product.\r
- *\r
- * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED\r
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
- * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR\r
- * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\r
- * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\r
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
- * POSSIBILITY OF SUCH DAMAGE.\r
- *\r
- * \asf_license_stop\r
- *\r
- */\r
-\r
-#ifndef _SAM4E_GMAC_COMPONENT_\r
-#define _SAM4E_GMAC_COMPONENT_\r
-\r
-/* ============================================================================= */\r
-/**  SOFTWARE API DEFINITION FOR Gigabit Ethernet MAC */\r
-/* ============================================================================= */\r
-/** \addtogroup SAM4E_GMAC Gigabit Ethernet MAC */\r
-/*@{*/\r
-\r
-#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
-/** \brief GmacSa hardware registers */\r
-typedef struct {\r
-  RwReg   GMAC_SAB;        /**< \brief (GmacSa Offset: 0x0) Specific Address 1 Bottom [31:0] Register */\r
-  RwReg   GMAC_SAT;        /**< \brief (GmacSa Offset: 0x4) Specific Address 1 Top [47:32] Register */\r
-} GmacSa;\r
-/** \brief Gmac hardware registers */\r
-#define GMACSA_NUMBER 4\r
-typedef struct {\r
-  RwReg   GMAC_NCR;        /**< \brief (Gmac Offset: 0x000) Network Control Register */\r
-  RwReg   GMAC_NCFGR;      /**< \brief (Gmac Offset: 0x004) Network Configuration Register */\r
-  RoReg   GMAC_NSR;        /**< \brief (Gmac Offset: 0x008) Network Status Register */\r
-  RwReg   GMAC_UR;         /**< \brief (Gmac Offset: 0x00C) User Register */\r
-  RwReg   GMAC_DCFGR;      /**< \brief (Gmac Offset: 0x010) DMA Configuration Register */\r
-  RwReg   GMAC_TSR;        /**< \brief (Gmac Offset: 0x014) Transmit Status Register */\r
-  RwReg   GMAC_RBQB;       /**< \brief (Gmac Offset: 0x018) Receive Buffer Queue Base Address */\r
-  RwReg   GMAC_TBQB;       /**< \brief (Gmac Offset: 0x01C) Transmit Buffer Queue Base Address */\r
-  RwReg   GMAC_RSR;        /**< \brief (Gmac Offset: 0x020) Receive Status Register */\r
-  RoReg   GMAC_ISR;        /**< \brief (Gmac Offset: 0x024) Interrupt Status Register */\r
-  WoReg   GMAC_IER;        /**< \brief (Gmac Offset: 0x028) Interrupt Enable Register */\r
-  WoReg   GMAC_IDR;        /**< \brief (Gmac Offset: 0x02C) Interrupt Disable Register */\r
-  RoReg   GMAC_IMR;        /**< \brief (Gmac Offset: 0x030) Interrupt Mask Register */\r
-  RwReg   GMAC_MAN;        /**< \brief (Gmac Offset: 0x034) PHY Maintenance Register */\r
-  RoReg   GMAC_RPQ;        /**< \brief (Gmac Offset: 0x038) Received Pause Quantum Register */\r
-  RwReg   GMAC_TPQ;        /**< \brief (Gmac Offset: 0x03C) Transmit Pause Quantum Register */\r
-  RwReg   GMAC_TPSF;       /**< \brief (Gmac Offset: 0x040) TX Partial Store and Forward Register */\r
-  RwReg   GMAC_RPSF;       /**< \brief (Gmac Offset: 0x044) RX Partial Store and Forward Register */\r
-  RoReg   Reserved1[14];\r
-  RwReg   GMAC_HRB;        /**< \brief (Gmac Offset: 0x080) Hash Register Bottom [31:0] */\r
-  RwReg   GMAC_HRT;        /**< \brief (Gmac Offset: 0x084) Hash Register Top [63:32] */\r
-  GmacSa  GMAC_SA[GMACSA_NUMBER]; /**< \brief (Gmac Offset: 0x088) 1 .. 4 */\r
-  RwReg   GMAC_TIDM[4];    /**< \brief (Gmac Offset: 0x0A8) Type ID Match 1 Register */\r
-  RwReg   GMAC_WOL;        /**< \brief (Gmac Offset: 0x0B8) Wake on LAN Register */\r
-  RwReg   GMAC_IPGS;       /**< \brief (Gmac Offset: 0x0BC) IPG Stretch Register */\r
-  RwReg   GMAC_SVLAN;      /**< \brief (Gmac Offset: 0x0C0) Stacked VLAN Register */\r
-  RwReg   GMAC_TPFCP;      /**< \brief (Gmac Offset: 0x0C4) Transmit PFC Pause Register */\r
-  RwReg   GMAC_SAMB1;      /**< \brief (Gmac Offset: 0x0C8) Specific Address 1 Mask Bottom [31:0] Register */\r
-  RwReg   GMAC_SAMT1;      /**< \brief (Gmac Offset: 0x0CC) Specific Address 1 Mask Top [47:32] Register */\r
-  RoReg   Reserved2[12];\r
-  RoReg   GMAC_OTLO;       /**< \brief (Gmac Offset: 0x100) Octets Transmitted [31:0] Register */\r
-  RoReg   GMAC_OTHI;       /**< \brief (Gmac Offset: 0x104) Octets Transmitted [47:32] Register */\r
-  RoReg   GMAC_FT;         /**< \brief (Gmac Offset: 0x108) Frames Transmitted Register */\r
-  RoReg   GMAC_BCFT;       /**< \brief (Gmac Offset: 0x10C) Broadcast Frames Transmitted Register */\r
-  RoReg   GMAC_MFT;        /**< \brief (Gmac Offset: 0x110) Multicast Frames Transmitted Register */\r
-  RoReg   GMAC_PFT;        /**< \brief (Gmac Offset: 0x114) Pause Frames Transmitted Register */\r
-  RoReg   GMAC_BFT64;      /**< \brief (Gmac Offset: 0x118) 64 Byte Frames Transmitted Register */\r
-  RoReg   GMAC_TBFT127;    /**< \brief (Gmac Offset: 0x11C) 65 to 127 Byte Frames Transmitted Register */\r
-  RoReg   GMAC_TBFT255;    /**< \brief (Gmac Offset: 0x120) 128 to 255 Byte Frames Transmitted Register */\r
-  RoReg   GMAC_TBFT511;    /**< \brief (Gmac Offset: 0x124) 256 to 511 Byte Frames Transmitted Register */\r
-  RoReg   GMAC_TBFT1023;   /**< \brief (Gmac Offset: 0x128) 512 to 1023 Byte Frames Transmitted Register */\r
-  RoReg   GMAC_TBFT1518;   /**< \brief (Gmac Offset: 0x12C) 1024 to 1518 Byte Frames Transmitted Register */\r
-  RoReg   GMAC_GTBFT1518;  /**< \brief (Gmac Offset: 0x130) Greater Than 1518 Byte Frames Transmitted Register */\r
-  RoReg   GMAC_TUR;        /**< \brief (Gmac Offset: 0x134) Transmit Under Runs Register */\r
-  RoReg   GMAC_SCF;        /**< \brief (Gmac Offset: 0x138) Single Collision Frames Register */\r
-  RoReg   GMAC_MCF;        /**< \brief (Gmac Offset: 0x13C) Multiple Collision Frames Register */\r
-  RoReg   GMAC_EC;         /**< \brief (Gmac Offset: 0x140) Excessive Collisions Register */\r
-  RoReg   GMAC_LC;         /**< \brief (Gmac Offset: 0x144) Late Collisions Register */\r
-  RoReg   GMAC_DTF;        /**< \brief (Gmac Offset: 0x148) Deferred Transmission Frames Register */\r
-  RoReg   GMAC_CSE;        /**< \brief (Gmac Offset: 0x14C) Carrier Sense Errors Register */\r
-  RoReg   GMAC_ORLO;       /**< \brief (Gmac Offset: 0x150) Octets Received [31:0] Received */\r
-  RoReg   GMAC_ORHI;       /**< \brief (Gmac Offset: 0x154) Octets Received [47:32] Received */\r
-  RoReg   GMAC_FR;         /**< \brief (Gmac Offset: 0x158) Frames Received Register */\r
-  RoReg   GMAC_BCFR;       /**< \brief (Gmac Offset: 0x15C) Broadcast Frames Received Register */\r
-  RoReg   GMAC_MFR;        /**< \brief (Gmac Offset: 0x160) Multicast Frames Received Register */\r
-  RoReg   GMAC_PFR;        /**< \brief (Gmac Offset: 0x164) Pause Frames Received Register */\r
-  RoReg   GMAC_BFR64;      /**< \brief (Gmac Offset: 0x168) 64 Byte Frames Received Register */\r
-  RoReg   GMAC_TBFR127;    /**< \brief (Gmac Offset: 0x16C) 65 to 127 Byte Frames Received Register */\r
-  RoReg   GMAC_TBFR255;    /**< \brief (Gmac Offset: 0x170) 128 to 255 Byte Frames Received Register */\r
-  RoReg   GMAC_TBFR511;    /**< \brief (Gmac Offset: 0x174) 256 to 511Byte Frames Received Register */\r
-  RoReg   GMAC_TBFR1023;   /**< \brief (Gmac Offset: 0x178) 512 to 1023 Byte Frames Received Register */\r
-  RoReg   GMAC_TBFR1518;   /**< \brief (Gmac Offset: 0x17C) 1024 to 1518 Byte Frames Received Register */\r
-  RoReg   GMAC_TMXBFR;     /**< \brief (Gmac Offset: 0x180) 1519 to Maximum Byte Frames Received Register */\r
-  RoReg   GMAC_UFR;        /**< \brief (Gmac Offset: 0x184) Undersize Frames Received Register */\r
-  RoReg   GMAC_OFR;        /**< \brief (Gmac Offset: 0x188) Oversize Frames Received Register */\r
-  RoReg   GMAC_JR;         /**< \brief (Gmac Offset: 0x18C) Jabbers Received Register */\r
-  RoReg   GMAC_FCSE;       /**< \brief (Gmac Offset: 0x190) Frame Check Sequence Errors Register */\r
-  RoReg   GMAC_LFFE;       /**< \brief (Gmac Offset: 0x194) Length Field Frame Errors Register */\r
-  RoReg   GMAC_RSE;        /**< \brief (Gmac Offset: 0x198) Receive Symbol Errors Register */\r
-  RoReg   GMAC_AE;         /**< \brief (Gmac Offset: 0x19C) Alignment Errors Register */\r
-  RoReg   GMAC_RRE;        /**< \brief (Gmac Offset: 0x1A0) Receive Resource Errors Register */\r
-  RoReg   GMAC_ROE;        /**< \brief (Gmac Offset: 0x1A4) Receive Overrun Register */\r
-  RoReg   GMAC_IHCE;       /**< \brief (Gmac Offset: 0x1A8) IP Header Checksum Errors Register */\r
-  RoReg   GMAC_TCE;        /**< \brief (Gmac Offset: 0x1AC) TCP Checksum Errors Register */\r
-  RoReg   GMAC_UCE;        /**< \brief (Gmac Offset: 0x1B0) UDP Checksum Errors Register */\r
-  RoReg   Reserved3[5];\r
-  RwReg   GMAC_TSSS;       /**< \brief (Gmac Offset: 0x1C8) 1588 Timer Sync Strobe Seconds Register */\r
-  RwReg   GMAC_TSSN;       /**< \brief (Gmac Offset: 0x1CC) 1588 Timer Sync Strobe Nanoseconds Register */\r
-  RwReg   GMAC_TS;         /**< \brief (Gmac Offset: 0x1D0) 1588 Timer Seconds Register */\r
-  RwReg   GMAC_TN;         /**< \brief (Gmac Offset: 0x1D4) 1588 Timer Nanoseconds Register */\r
-  WoReg   GMAC_TA;         /**< \brief (Gmac Offset: 0x1D8) 1588 Timer Adjust Register */\r
-  RwReg   GMAC_TI;         /**< \brief (Gmac Offset: 0x1DC) 1588 Timer Increment Register */\r
-  RoReg   GMAC_EFTS;       /**< \brief (Gmac Offset: 0x1E0) PTP Event Frame Transmitted Seconds */\r
-  RoReg   GMAC_EFTN;       /**< \brief (Gmac Offset: 0x1E4) PTP Event Frame Transmitted Nanoseconds */\r
-  RoReg   GMAC_EFRS;       /**< \brief (Gmac Offset: 0x1E8) PTP Event Frame Received Seconds */\r
-  RoReg   GMAC_EFRN;       /**< \brief (Gmac Offset: 0x1EC) PTP Event Frame Received Nanoseconds */\r
-  RoReg   GMAC_PEFTS;      /**< \brief (Gmac Offset: 0x1F0) PTP Peer Event Frame Transmitted Seconds */\r
-  RoReg   GMAC_PEFTN;      /**< \brief (Gmac Offset: 0x1F4) PTP Peer Event Frame Transmitted Nanoseconds */\r
-  RoReg   GMAC_PEFRS;      /**< \brief (Gmac Offset: 0x1F8) PTP Peer Event Frame Received Seconds */\r
-  RoReg   GMAC_PEFRN;      /**< \brief (Gmac Offset: 0x1FC) PTP Peer Event Frame Received Nanoseconds */\r
-  RoReg   Reserved4[128];\r
-  RoReg   GMAC_ISRPQ[7];   /**< \brief (Gmac Offset: 0x400) Interrupt Status Register Priority Queue */\r
-  RoReg   Reserved5[9];\r
-  RwReg   GMAC_TBQBAPQ[7]; /**< \brief (Gmac Offset: 0x440) Transmit Buffer Queue Base Address Priority Queue */\r
-  RoReg   Reserved6[9];\r
-  RwReg   GMAC_RBQBAPQ[7]; /**< \brief (Gmac Offset: 0x480) Receive Buffer Queue Base Address Priority Queue */\r
-  RoReg   Reserved7[1];\r
-  RwReg   GMAC_RBSRPQ[7];  /**< \brief (Gmac Offset: 0x4A0) Receive Buffer Size Register Priority Queue */\r
-  RoReg   Reserved8[17];\r
-  RwReg   GMAC_ST1RPQ[16]; /**< \brief (Gmac Offset: 0x500) Screening Type1 Register Priority Queue */\r
-  RwReg   GMAC_ST2RPQ[16]; /**< \brief (Gmac Offset: 0x540) Screening Type2 Register Priority Queue */\r
-  RoReg   Reserved9[32];\r
-  WoReg   GMAC_IERPQ[7];   /**< \brief (Gmac Offset: 0x600) Interrupt Enable Register Priority Queue */\r
-  RoReg   Reserved10[1];\r
-  WoReg   GMAC_IDRPQ[7];   /**< \brief (Gmac Offset: 0x620) Interrupt Disable Register Priority Queue */\r
-  RoReg   Reserved11[1];\r
-  RwReg   GMAC_IMRPQ[7];   /**< \brief (Gmac Offset: 0x640) Interrupt Mask Register Priority Queue */\r
-} Gmac;\r
-#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
-/* -------- GMAC_NCR : (GMAC Offset: 0x000) Network Control Register -------- */\r
-#define GMAC_NCR_LB (0x1u << 0) /**< \brief (GMAC_NCR) Loop Back */\r
-#define GMAC_NCR_LBL (0x1u << 1) /**< \brief (GMAC_NCR) Loop Back Local */\r
-#define GMAC_NCR_RXEN (0x1u << 2) /**< \brief (GMAC_NCR) Receive Enable */\r
-#define GMAC_NCR_TXEN (0x1u << 3) /**< \brief (GMAC_NCR) Transmit Enable */\r
-#define GMAC_NCR_MPE (0x1u << 4) /**< \brief (GMAC_NCR) Management Port Enable */\r
-#define GMAC_NCR_CLRSTAT (0x1u << 5) /**< \brief (GMAC_NCR) Clear Statistics Registers */\r
-#define GMAC_NCR_INCSTAT (0x1u << 6) /**< \brief (GMAC_NCR) Increment Statistics Registers */\r
-#define GMAC_NCR_WESTAT (0x1u << 7) /**< \brief (GMAC_NCR) Write Enable for Statistics Registers */\r
-#define GMAC_NCR_BP (0x1u << 8) /**< \brief (GMAC_NCR) Back pressure */\r
-#define GMAC_NCR_TSTART (0x1u << 9) /**< \brief (GMAC_NCR) Start Transmission */\r
-#define GMAC_NCR_THALT (0x1u << 10) /**< \brief (GMAC_NCR) Transmit Halt */\r
-#define GMAC_NCR_TXPF (0x1u << 11) /**< \brief (GMAC_NCR) Transmit Pause Frame */\r
-#define GMAC_NCR_TXZQPF (0x1u << 12) /**< \brief (GMAC_NCR) Transmit Zero Quantum Pause Frame */\r
-#define GMAC_NCR_RDS (0x1u << 14) /**< \brief (GMAC_NCR) Read Snapshot */\r
-#define GMAC_NCR_SRTSM (0x1u << 15) /**< \brief (GMAC_NCR) Store Receive Time Stamp to Memory */\r
-#define GMAC_NCR_ENPBPR (0x1u << 16) /**< \brief (GMAC_NCR) Enable PFC Priority-based Pause Reception */\r
-#define GMAC_NCR_TXPBPF (0x1u << 17) /**< \brief (GMAC_NCR) Transmit PFC Priority-based Pause Frame */\r
-#define GMAC_NCR_FNP (0x1u << 18) /**< \brief (GMAC_NCR) Flush Next Packet */\r
-/* -------- GMAC_NCFGR : (GMAC Offset: 0x004) Network Configuration Register -------- */\r
-#define GMAC_NCFGR_SPD (0x1u << 0) /**< \brief (GMAC_NCFGR) Speed */\r
-#define GMAC_NCFGR_FD (0x1u << 1) /**< \brief (GMAC_NCFGR) Full Duplex */\r
-#define GMAC_NCFGR_DNVLAN (0x1u << 2) /**< \brief (GMAC_NCFGR) Discard Non-VLAN FRAMES */\r
-#define GMAC_NCFGR_JFRAME (0x1u << 3) /**< \brief (GMAC_NCFGR) Jumbo Frame Size */\r
-#define GMAC_NCFGR_CAF (0x1u << 4) /**< \brief (GMAC_NCFGR) Copy All Frames */\r
-#define GMAC_NCFGR_NBC (0x1u << 5) /**< \brief (GMAC_NCFGR) No Broadcast */\r
-#define GMAC_NCFGR_MTIHEN (0x1u << 6) /**< \brief (GMAC_NCFGR) Multicast Hash Enable */\r
-#define GMAC_NCFGR_UNIHEN (0x1u << 7) /**< \brief (GMAC_NCFGR) Unicast Hash Enable */\r
-#define GMAC_NCFGR_MAXFS (0x1u << 8) /**< \brief (GMAC_NCFGR) 1536 Maximum Frame Size */\r
-#define GMAC_NCFGR_GBE (0x1u << 10) /**< \brief (GMAC_NCFGR) Gigabit Mode Enable */\r
-#define GMAC_NCFGR_PIS (0x1u << 11) /**< \brief (GMAC_NCFGR) Physical Interface Select */\r
-#define GMAC_NCFGR_RTY (0x1u << 12) /**< \brief (GMAC_NCFGR) Retry Test */\r
-#define GMAC_NCFGR_PEN (0x1u << 13) /**< \brief (GMAC_NCFGR) Pause Enable */\r
-#define GMAC_NCFGR_RXBUFO_Pos 14\r
-#define GMAC_NCFGR_RXBUFO_Msk (0x3u << GMAC_NCFGR_RXBUFO_Pos) /**< \brief (GMAC_NCFGR) Receive Buffer Offset */\r
-#define GMAC_NCFGR_RXBUFO(value) ((GMAC_NCFGR_RXBUFO_Msk & ((value) << GMAC_NCFGR_RXBUFO_Pos)))\r
-#define GMAC_NCFGR_LFERD (0x1u << 16) /**< \brief (GMAC_NCFGR) Length Field Error Frame Discard */\r
-#define GMAC_NCFGR_RFCS (0x1u << 17) /**< \brief (GMAC_NCFGR) Remove FCS */\r
-#define GMAC_NCFGR_CLK_Pos 18\r
-#define GMAC_NCFGR_CLK_Msk (0x7u << GMAC_NCFGR_CLK_Pos) /**< \brief (GMAC_NCFGR) MDC CLock Division */\r
-#define   GMAC_NCFGR_CLK_MCK_8 (0x0u << 18) /**< \brief (GMAC_NCFGR) MCK divided by 8 (MCK up to 20 MHz) */\r
-#define   GMAC_NCFGR_CLK_MCK_16 (0x1u << 18) /**< \brief (GMAC_NCFGR) MCK divided by 16 (MCK up to 40 MHz) */\r
-#define   GMAC_NCFGR_CLK_MCK_32 (0x2u << 18) /**< \brief (GMAC_NCFGR) MCK divided by 32 (MCK up to 80 MHz) */\r
-#define   GMAC_NCFGR_CLK_MCK_48 (0x3u << 18) /**< \brief (GMAC_NCFGR) MCK divided by 48 (MCK up to 120MHz) */\r
-#define   GMAC_NCFGR_CLK_MCK_64 (0x4u << 18) /**< \brief (GMAC_NCFGR) MCK divided by 64 (MCK up to 160 MHz) */\r
-#define   GMAC_NCFGR_CLK_MCK_96 (0x5u << 18) /**< \brief (GMAC_NCFGR) MCK divided by 96 (MCK up to 240 MHz) */\r
-#define   GMAC_NCFGR_CLK_MCK_128 (0x6u << 18) /**< \brief (GMAC_NCFGR) MCK divided by 128 (MCK up to 320 MHz) */\r
-#define   GMAC_NCFGR_CLK_MCK_224 (0x7u << 18) /**< \brief (GMAC_NCFGR) MCK divided by 224 (MCK up to 540 MHz) */\r
-#define GMAC_NCFGR_DBW_Pos 21\r
-#define GMAC_NCFGR_DBW_Msk (0x3u << GMAC_NCFGR_DBW_Pos) /**< \brief (GMAC_NCFGR) Data Bus Width */\r
-#define   GMAC_NCFGR_DBW_DBW32 (0x0u << 21) /**< \brief (GMAC_NCFGR) 32-bit data bus width */\r
-#define   GMAC_NCFGR_DBW_DBW64 (0x1u << 21) /**< \brief (GMAC_NCFGR) 64-bit data bus width */\r
-#define GMAC_NCFGR_DCPF (0x1u << 23) /**< \brief (GMAC_NCFGR) Disable Copy of Pause Frames */\r
-#define GMAC_NCFGR_RXCOEN (0x1u << 24) /**< \brief (GMAC_NCFGR) Receive Checksum Offload Enable */\r
-#define GMAC_NCFGR_EFRHD (0x1u << 25) /**< \brief (GMAC_NCFGR) Enable Frames Received in Half Duplex */\r
-#define GMAC_NCFGR_IRXFCS (0x1u << 26) /**< \brief (GMAC_NCFGR) Ignore RX FCS */\r
-#define GMAC_NCFGR_IPGSEN (0x1u << 28) /**< \brief (GMAC_NCFGR) IP Stretch Enable */\r
-#define GMAC_NCFGR_RXBP (0x1u << 29) /**< \brief (GMAC_NCFGR) Receive Bad Preamble */\r
-#define GMAC_NCFGR_IRXER (0x1u << 30) /**< \brief (GMAC_NCFGR) Ignore IPG rx_er */\r
-/* -------- GMAC_NSR : (GMAC Offset: 0x008) Network Status Register -------- */\r
-#define GMAC_NSR_MDIO (0x1u << 1) /**< \brief (GMAC_NSR) MDIO Input Status */\r
-#define GMAC_NSR_IDLE (0x1u << 2) /**< \brief (GMAC_NSR) PHY Management Logic Idle */\r
-/* -------- GMAC_UR : (GMAC Offset: 0x00C) User Register -------- */\r
-#define GMAC_UR_RGMII (0x1u << 0) /**< \brief (GMAC_UR) RGMII Mode */\r
-#define GMAC_UR_HDFC (0x1u << 6) /**< \brief (GMAC_UR) Half Duplex Flow Control */\r
-#define GMAC_UR_BPDG (0x1u << 7) /**< \brief (GMAC_UR) BPDG Bypass Deglitchers */\r
-/* -------- GMAC_DCFGR : (GMAC Offset: 0x010) DMA Configuration Register -------- */\r
-#define GMAC_DCFGR_FBLDO_Pos 0\r
-#define GMAC_DCFGR_FBLDO_Msk (0x1fu << GMAC_DCFGR_FBLDO_Pos) /**< \brief (GMAC_DCFGR) Fixed Burst Length for DMA Data Operations: */\r
-#define   GMAC_DCFGR_FBLDO_SINGLE (0x1u << 0) /**< \brief (GMAC_DCFGR) 00001: Always use SINGLE AHB bursts */\r
-#define   GMAC_DCFGR_FBLDO_INCR4 (0x4u << 0) /**< \brief (GMAC_DCFGR) 001xx: Attempt to use INCR4 AHB bursts (Default) */\r
-#define   GMAC_DCFGR_FBLDO_INCR8 (0x8u << 0) /**< \brief (GMAC_DCFGR) 01xxx: Attempt to use INCR8 AHB bursts */\r
-#define   GMAC_DCFGR_FBLDO_INCR16 (0x10u << 0) /**< \brief (GMAC_DCFGR) 1xxxx: Attempt to use INCR16 AHB bursts */\r
-#define GMAC_DCFGR_ESMA (0x1u << 6) /**< \brief (GMAC_DCFGR) Endian Swap Mode Enable for Management Descriptor Accesses */\r
-#define GMAC_DCFGR_ESPA (0x1u << 7) /**< \brief (GMAC_DCFGR) Endian Swap Mode Enable for Packet Data Accesses */\r
-#define GMAC_DCFGR_RXBMS_Pos 8\r
-#define GMAC_DCFGR_RXBMS_Msk (0x3u << GMAC_DCFGR_RXBMS_Pos) /**< \brief (GMAC_DCFGR) Receiver Packet Buffer Memory Size Select */\r
-#define   GMAC_DCFGR_RXBMS_EIGHTH (0x0u << 8) /**< \brief (GMAC_DCFGR) 1 Kbyte Memory Size */\r
-#define   GMAC_DCFGR_RXBMS_QUARTER (0x1u << 8) /**< \brief (GMAC_DCFGR) 2 Kbytes Memory Size */\r
-#define   GMAC_DCFGR_RXBMS_HALF (0x2u << 8) /**< \brief (GMAC_DCFGR) 4 Kbytes Memory Size */\r
-#define   GMAC_DCFGR_RXBMS_FULL (0x3u << 8) /**< \brief (GMAC_DCFGR) 8 Kbytes Memory Size */\r
-#define GMAC_DCFGR_TXPBMS (0x1u << 10) /**< \brief (GMAC_DCFGR) Transmitter Packet Buffer Memory Size Select */\r
-#define GMAC_DCFGR_TXCOEN (0x1u << 11) /**< \brief (GMAC_DCFGR) Transmitter Checksum Generation Offload Enable */\r
-#define GMAC_DCFGR_DRBS_Pos 16\r
-#define GMAC_DCFGR_DRBS_Msk (0xffu << GMAC_DCFGR_DRBS_Pos) /**< \brief (GMAC_DCFGR) DMA Receive Buffer Size */\r
-#define GMAC_DCFGR_DRBS(value) ((GMAC_DCFGR_DRBS_Msk & ((value) << GMAC_DCFGR_DRBS_Pos)))\r
-#define GMAC_DCFGR_DDRP (0x1u << 24) /**< \brief (GMAC_DCFGR) DMA Discard Receive Packets */\r
-/* -------- GMAC_TSR : (GMAC Offset: 0x014) Transmit Status Register -------- */\r
-#define GMAC_TSR_UBR (0x1u << 0) /**< \brief (GMAC_TSR) Used Bit Read */\r
-#define GMAC_TSR_COL (0x1u << 1) /**< \brief (GMAC_TSR) Collision Occurred */\r
-#define GMAC_TSR_RLE (0x1u << 2) /**< \brief (GMAC_TSR) Retry Limit Exceeded */\r
-#define GMAC_TSR_TXGO (0x1u << 3) /**< \brief (GMAC_TSR) Transmit Go */\r
-#define GMAC_TSR_TFC (0x1u << 4) /**< \brief (GMAC_TSR) Transmit Frame Corruption due to AHB error */\r
-#define GMAC_TSR_TXCOMP (0x1u << 5) /**< \brief (GMAC_TSR) Transmit Complete */\r
-#define GMAC_TSR_UND (0x1u << 6) /**< \brief (GMAC_TSR) Transmit Under Run */\r
-#define GMAC_TSR_LCO (0x1u << 7) /**< \brief (GMAC_TSR) Late Collision Occurred */\r
-#define GMAC_TSR_HRESP (0x1u << 8) /**< \brief (GMAC_TSR) HRESP Not OK */\r
-/* -------- GMAC_RBQB : (GMAC Offset: 0x018) Receive Buffer Queue Base Address -------- */\r
-#define GMAC_RBQB_ADDR_Pos 2\r
-#define GMAC_RBQB_ADDR_Msk (0x3fffffffu << GMAC_RBQB_ADDR_Pos) /**< \brief (GMAC_RBQB) Receive buffer queue base address */\r
-#define GMAC_RBQB_ADDR(value) ((GMAC_RBQB_ADDR_Msk & ((value) << GMAC_RBQB_ADDR_Pos)))\r
-/* -------- GMAC_TBQB : (GMAC Offset: 0x01C) Transmit Buffer Queue Base Address -------- */\r
-#define GMAC_TBQB_ADDR_Pos 2\r
-#define GMAC_TBQB_ADDR_Msk (0x3fffffffu << GMAC_TBQB_ADDR_Pos) /**< \brief (GMAC_TBQB) Transmit Buffer Queue Base Address */\r
-#define GMAC_TBQB_ADDR(value) ((GMAC_TBQB_ADDR_Msk & ((value) << GMAC_TBQB_ADDR_Pos)))\r
-/* -------- GMAC_RSR : (GMAC Offset: 0x020) Receive Status Register -------- */\r
-#define GMAC_RSR_BNA (0x1u << 0) /**< \brief (GMAC_RSR) Buffer Not Available */\r
-#define GMAC_RSR_REC (0x1u << 1) /**< \brief (GMAC_RSR) Frame Received */\r
-#define GMAC_RSR_RXOVR (0x1u << 2) /**< \brief (GMAC_RSR) Receive Overrun */\r
-#define GMAC_RSR_HNO (0x1u << 3) /**< \brief (GMAC_RSR) HRESP Not OK */\r
-/* -------- GMAC_ISR : (GMAC Offset: 0x024) Interrupt Status Register -------- */\r
-#define GMAC_ISR_MFS (0x1u << 0) /**< \brief (GMAC_ISR) Management Frame Sent */\r
-#define GMAC_ISR_RCOMP (0x1u << 1) /**< \brief (GMAC_ISR) Receive Complete */\r
-#define GMAC_ISR_RXUBR (0x1u << 2) /**< \brief (GMAC_ISR) RX Used Bit Read */\r
-#define GMAC_ISR_TXUBR (0x1u << 3) /**< \brief (GMAC_ISR) TX Used Bit Read */\r
-#define GMAC_ISR_TUR (0x1u << 4) /**< \brief (GMAC_ISR) Transmit Under Run */\r
-#define GMAC_ISR_RLEX (0x1u << 5) /**< \brief (GMAC_ISR) Retry Limit Exceeded or Late Collision */\r
-#define GMAC_ISR_TFC (0x1u << 6) /**< \brief (GMAC_ISR) Transmit Frame Corruption due to AHB error */\r
-#define GMAC_ISR_TCOMP (0x1u << 7) /**< \brief (GMAC_ISR) Transmit Complete */\r
-#define GMAC_ISR_ROVR (0x1u << 10) /**< \brief (GMAC_ISR) Receive Overrun */\r
-#define GMAC_ISR_HRESP (0x1u << 11) /**< \brief (GMAC_ISR) HRESP Not OK */\r
-#define GMAC_ISR_PFNZ (0x1u << 12) /**< \brief (GMAC_ISR) Pause Frame with Non-zero Pause Quantum Received */\r
-#define GMAC_ISR_PTZ (0x1u << 13) /**< \brief (GMAC_ISR) Pause Time Zero */\r
-#define GMAC_ISR_PFTR (0x1u << 14) /**< \brief (GMAC_ISR) Pause Frame Transmitted */\r
-#define GMAC_ISR_EXINT (0x1u << 15) /**< \brief (GMAC_ISR) External Interrupt */\r
-#define GMAC_ISR_DRQFR (0x1u << 18) /**< \brief (GMAC_ISR) PTP Delay Request Frame Received */\r
-#define GMAC_ISR_SFR (0x1u << 19) /**< \brief (GMAC_ISR) PTP Sync Frame Received */\r
-#define GMAC_ISR_DRQFT (0x1u << 20) /**< \brief (GMAC_ISR) PTP Delay Request Frame Transmitted */\r
-#define GMAC_ISR_SFT (0x1u << 21) /**< \brief (GMAC_ISR) PTP Sync Frame Transmitted */\r
-#define GMAC_ISR_PDRQFR (0x1u << 22) /**< \brief (GMAC_ISR) PDelay Request Frame Received */\r
-#define GMAC_ISR_PDRSFR (0x1u << 23) /**< \brief (GMAC_ISR) PDelay Response Frame Received */\r
-#define GMAC_ISR_PDRQFT (0x1u << 24) /**< \brief (GMAC_ISR) PDelay Request Frame Transmitted */\r
-#define GMAC_ISR_PDRSFT (0x1u << 25) /**< \brief (GMAC_ISR) PDelay Response Frame Transmitted */\r
-#define GMAC_ISR_SRI (0x1u << 26) /**< \brief (GMAC_ISR) TSU Seconds Register Increment */\r
-#define GMAC_ISR_WOL (0x1u << 28) /**< \brief (GMAC_ISR) Wake On LAN */\r
-/* -------- GMAC_IER : (GMAC Offset: 0x028) Interrupt Enable Register -------- */\r
-#define GMAC_IER_MFS (0x1u << 0) /**< \brief (GMAC_IER) Management Frame Sent */\r
-#define GMAC_IER_RCOMP (0x1u << 1) /**< \brief (GMAC_IER) Receive Complete */\r
-#define GMAC_IER_RXUBR (0x1u << 2) /**< \brief (GMAC_IER) RX Used Bit Read */\r
-#define GMAC_IER_TXUBR (0x1u << 3) /**< \brief (GMAC_IER) TX Used Bit Read */\r
-#define GMAC_IER_TUR (0x1u << 4) /**< \brief (GMAC_IER) Transmit Under Run */\r
-#define GMAC_IER_RLEX (0x1u << 5) /**< \brief (GMAC_IER) Retry Limit Exceeded or Late Collision */\r
-#define GMAC_IER_TFC (0x1u << 6) /**< \brief (GMAC_IER) Transmit Frame Corruption due to AHB error */\r
-#define GMAC_IER_TCOMP (0x1u << 7) /**< \brief (GMAC_IER) Transmit Complete */\r
-#define GMAC_IER_ROVR (0x1u << 10) /**< \brief (GMAC_IER) Receive Overrun */\r
-#define GMAC_IER_HRESP (0x1u << 11) /**< \brief (GMAC_IER) HRESP Not OK */\r
-#define GMAC_IER_PFNZ (0x1u << 12) /**< \brief (GMAC_IER) Pause Frame with Non-zero Pause Quantum Received */\r
-#define GMAC_IER_PTZ (0x1u << 13) /**< \brief (GMAC_IER) Pause Time Zero */\r
-#define GMAC_IER_PFTR (0x1u << 14) /**< \brief (GMAC_IER) Pause Frame Transmitted */\r
-#define GMAC_IER_EXINT (0x1u << 15) /**< \brief (GMAC_IER) External Interrupt */\r
-#define GMAC_IER_DRQFR (0x1u << 18) /**< \brief (GMAC_IER) PTP Delay Request Frame Received */\r
-#define GMAC_IER_SFR (0x1u << 19) /**< \brief (GMAC_IER) PTP Sync Frame Received */\r
-#define GMAC_IER_DRQFT (0x1u << 20) /**< \brief (GMAC_IER) PTP Delay Request Frame Transmitted */\r
-#define GMAC_IER_SFT (0x1u << 21) /**< \brief (GMAC_IER) PTP Sync Frame Transmitted */\r
-#define GMAC_IER_PDRQFR (0x1u << 22) /**< \brief (GMAC_IER) PDelay Request Frame Received */\r
-#define GMAC_IER_PDRSFR (0x1u << 23) /**< \brief (GMAC_IER) PDelay Response Frame Received */\r
-#define GMAC_IER_PDRQFT (0x1u << 24) /**< \brief (GMAC_IER) PDelay Request Frame Transmitted */\r
-#define GMAC_IER_PDRSFT (0x1u << 25) /**< \brief (GMAC_IER) PDelay Response Frame Transmitted */\r
-#define GMAC_IER_SRI (0x1u << 26) /**< \brief (GMAC_IER) TSU Seconds Register Increment */\r
-#define GMAC_IER_WOL (0x1u << 28) /**< \brief (GMAC_IER) Wake On LAN */\r
-/* -------- GMAC_IDR : (GMAC Offset: 0x02C) Interrupt Disable Register -------- */\r
-#define GMAC_IDR_MFS (0x1u << 0) /**< \brief (GMAC_IDR) Management Frame Sent */\r
-#define GMAC_IDR_RCOMP (0x1u << 1) /**< \brief (GMAC_IDR) Receive Complete */\r
-#define GMAC_IDR_RXUBR (0x1u << 2) /**< \brief (GMAC_IDR) RX Used Bit Read */\r
-#define GMAC_IDR_TXUBR (0x1u << 3) /**< \brief (GMAC_IDR) TX Used Bit Read */\r
-#define GMAC_IDR_TUR (0x1u << 4) /**< \brief (GMAC_IDR) Transmit Under Run */\r
-#define GMAC_IDR_RLEX (0x1u << 5) /**< \brief (GMAC_IDR) Retry Limit Exceeded or Late Collision */\r
-#define GMAC_IDR_TFC (0x1u << 6) /**< \brief (GMAC_IDR) Transmit Frame Corruption due to AHB error */\r
-#define GMAC_IDR_TCOMP (0x1u << 7) /**< \brief (GMAC_IDR) Transmit Complete */\r
-#define GMAC_IDR_ROVR (0x1u << 10) /**< \brief (GMAC_IDR) Receive Overrun */\r
-#define GMAC_IDR_HRESP (0x1u << 11) /**< \brief (GMAC_IDR) HRESP Not OK */\r
-#define GMAC_IDR_PFNZ (0x1u << 12) /**< \brief (GMAC_IDR) Pause Frame with Non-zero Pause Quantum Received */\r
-#define GMAC_IDR_PTZ (0x1u << 13) /**< \brief (GMAC_IDR) Pause Time Zero */\r
-#define GMAC_IDR_PFTR (0x1u << 14) /**< \brief (GMAC_IDR) Pause Frame Transmitted */\r
-#define GMAC_IDR_EXINT (0x1u << 15) /**< \brief (GMAC_IDR) External Interrupt */\r
-#define GMAC_IDR_DRQFR (0x1u << 18) /**< \brief (GMAC_IDR) PTP Delay Request Frame Received */\r
-#define GMAC_IDR_SFR (0x1u << 19) /**< \brief (GMAC_IDR) PTP Sync Frame Received */\r
-#define GMAC_IDR_DRQFT (0x1u << 20) /**< \brief (GMAC_IDR) PTP Delay Request Frame Transmitted */\r
-#define GMAC_IDR_SFT (0x1u << 21) /**< \brief (GMAC_IDR) PTP Sync Frame Transmitted */\r
-#define GMAC_IDR_PDRQFR (0x1u << 22) /**< \brief (GMAC_IDR) PDelay Request Frame Received */\r
-#define GMAC_IDR_PDRSFR (0x1u << 23) /**< \brief (GMAC_IDR) PDelay Response Frame Received */\r
-#define GMAC_IDR_PDRQFT (0x1u << 24) /**< \brief (GMAC_IDR) PDelay Request Frame Transmitted */\r
-#define GMAC_IDR_PDRSFT (0x1u << 25) /**< \brief (GMAC_IDR) PDelay Response Frame Transmitted */\r
-#define GMAC_IDR_SRI (0x1u << 26) /**< \brief (GMAC_IDR) TSU Seconds Register Increment */\r
-#define GMAC_IDR_WOL (0x1u << 28) /**< \brief (GMAC_IDR) Wake On LAN */\r
-/* -------- GMAC_IMR : (GMAC Offset: 0x030) Interrupt Mask Register -------- */\r
-#define GMAC_IMR_MFS (0x1u << 0) /**< \brief (GMAC_IMR) Management Frame Sent */\r
-#define GMAC_IMR_RCOMP (0x1u << 1) /**< \brief (GMAC_IMR) Receive Complete */\r
-#define GMAC_IMR_RXUBR (0x1u << 2) /**< \brief (GMAC_IMR) RX Used Bit Read */\r
-#define GMAC_IMR_TXUBR (0x1u << 3) /**< \brief (GMAC_IMR) TX Used Bit Read */\r
-#define GMAC_IMR_TUR (0x1u << 4) /**< \brief (GMAC_IMR) Transmit Under Run */\r
-#define GMAC_IMR_RLEX (0x1u << 5) /**< \brief (GMAC_IMR) Retry Limit Exceeded or Late Collision */\r
-#define GMAC_IMR_TFC (0x1u << 6) /**< \brief (GMAC_IMR) Transmit Frame Corruption due to AHB error */\r
-#define GMAC_IMR_TCOMP (0x1u << 7) /**< \brief (GMAC_IMR) Transmit Complete */\r
-#define GMAC_IMR_ROVR (0x1u << 10) /**< \brief (GMAC_IMR) Receive Overrun */\r
-#define GMAC_IMR_HRESP (0x1u << 11) /**< \brief (GMAC_IMR) HRESP Not OK */\r
-#define GMAC_IMR_PFNZ (0x1u << 12) /**< \brief (GMAC_IMR) Pause Frame with Non-zero Pause Quantum Received */\r
-#define GMAC_IMR_PTZ (0x1u << 13) /**< \brief (GMAC_IMR) Pause Time Zero */\r
-#define GMAC_IMR_PFTR (0x1u << 14) /**< \brief (GMAC_IMR) Pause Frame Transmitted */\r
-#define GMAC_IMR_EXINT (0x1u << 15) /**< \brief (GMAC_IMR) External Interrupt */\r
-#define GMAC_IMR_DRQFR (0x1u << 18) /**< \brief (GMAC_IMR) PTP Delay Request Frame Received */\r
-#define GMAC_IMR_SFR (0x1u << 19) /**< \brief (GMAC_IMR) PTP Sync Frame Received */\r
-#define GMAC_IMR_DRQFT (0x1u << 20) /**< \brief (GMAC_IMR) PTP Delay Request Frame Transmitted */\r
-#define GMAC_IMR_SFT (0x1u << 21) /**< \brief (GMAC_IMR) PTP Sync Frame Transmitted */\r
-#define GMAC_IMR_PDRQFR (0x1u << 22) /**< \brief (GMAC_IMR) PDelay Request Frame Received */\r
-#define GMAC_IMR_PDRSFR (0x1u << 23) /**< \brief (GMAC_IMR) PDelay Response Frame Received */\r
-#define GMAC_IMR_PDRQFT (0x1u << 24) /**< \brief (GMAC_IMR) PDelay Request Frame Transmitted */\r
-#define GMAC_IMR_PDRSFT (0x1u << 25) /**< \brief (GMAC_IMR) PDelay Response Frame Transmitted */\r
-/* -------- GMAC_MAN : (GMAC Offset: 0x034) PHY Maintenance Register -------- */\r
-#define GMAC_MAN_DATA_Pos 0\r
-#define GMAC_MAN_DATA_Msk (0xffffu << GMAC_MAN_DATA_Pos) /**< \brief (GMAC_MAN) PHY Data */\r
-#define GMAC_MAN_DATA(value) ((GMAC_MAN_DATA_Msk & ((value) << GMAC_MAN_DATA_Pos)))\r
-#define GMAC_MAN_WTN_Pos 16\r
-#define GMAC_MAN_WTN_Msk (0x3u << GMAC_MAN_WTN_Pos) /**< \brief (GMAC_MAN) Write Ten */\r
-#define GMAC_MAN_WTN(value) ((GMAC_MAN_WTN_Msk & ((value) << GMAC_MAN_WTN_Pos)))\r
-#define GMAC_MAN_REGA_Pos 18\r
-#define GMAC_MAN_REGA_Msk (0x1fu << GMAC_MAN_REGA_Pos) /**< \brief (GMAC_MAN) Register Address */\r
-#define GMAC_MAN_REGA(value) ((GMAC_MAN_REGA_Msk & ((value) << GMAC_MAN_REGA_Pos)))\r
-#define GMAC_MAN_PHYA_Pos 23\r
-#define GMAC_MAN_PHYA_Msk (0x1fu << GMAC_MAN_PHYA_Pos) /**< \brief (GMAC_MAN) PHY Address */\r
-#define GMAC_MAN_PHYA(value) ((GMAC_MAN_PHYA_Msk & ((value) << GMAC_MAN_PHYA_Pos)))\r
-#define GMAC_MAN_OP_Pos 28\r
-#define GMAC_MAN_OP_Msk (0x3u << GMAC_MAN_OP_Pos) /**< \brief (GMAC_MAN) Operation */\r
-#define GMAC_MAN_OP(value) ((GMAC_MAN_OP_Msk & ((value) << GMAC_MAN_OP_Pos)))\r
-#define GMAC_MAN_CLTTO (0x1u << 30) /**< \brief (GMAC_MAN) Clause 22 Operation */\r
-#define GMAC_MAN_WZO (0x1u << 31) /**< \brief (GMAC_MAN) Write ZERO */\r
-/* -------- GMAC_RPQ : (GMAC Offset: 0x038) Received Pause Quantum Register -------- */\r
-#define GMAC_RPQ_RPQ_Pos 0\r
-#define GMAC_RPQ_RPQ_Msk (0xffffu << GMAC_RPQ_RPQ_Pos) /**< \brief (GMAC_RPQ) Received Pause Quantum */\r
-/* -------- GMAC_TPQ : (GMAC Offset: 0x03C) Transmit Pause Quantum Register -------- */\r
-#define GMAC_TPQ_TPQ_Pos 0\r
-#define GMAC_TPQ_TPQ_Msk (0xffffu << GMAC_TPQ_TPQ_Pos) /**< \brief (GMAC_TPQ) Transmit Pause Quantum */\r
-#define GMAC_TPQ_TPQ(value) ((GMAC_TPQ_TPQ_Msk & ((value) << GMAC_TPQ_TPQ_Pos)))\r
-/* -------- GMAC_TPSF : (GMAC Offset: 0x040) TX Partial Store and Forward Register -------- */\r
-#define GMAC_TPSF_TPB1ADR_Pos 0\r
-#define GMAC_TPSF_TPB1ADR_Msk (0xfffu << GMAC_TPSF_TPB1ADR_Pos) /**< \brief (GMAC_TPSF) tx_pbuf_addr-1:0 */\r
-#define GMAC_TPSF_TPB1ADR(value) ((GMAC_TPSF_TPB1ADR_Msk & ((value) << GMAC_TPSF_TPB1ADR_Pos)))\r
-#define GMAC_TPSF_ENTXP (0x1u << 31) /**< \brief (GMAC_TPSF) Enable TX Partial Store and Forward Operation */\r
-/* -------- GMAC_RPSF : (GMAC Offset: 0x044) RX Partial Store and Forward Register -------- */\r
-#define GMAC_RPSF_RPB1ADR_Pos 0\r
-#define GMAC_RPSF_RPB1ADR_Msk (0xfffu << GMAC_RPSF_RPB1ADR_Pos) /**< \brief (GMAC_RPSF) rx_pbuf_addr-1:0 */\r
-#define GMAC_RPSF_RPB1ADR(value) ((GMAC_RPSF_RPB1ADR_Msk & ((value) << GMAC_RPSF_RPB1ADR_Pos)))\r
-#define GMAC_RPSF_ENRXP (0x1u << 31) /**< \brief (GMAC_RPSF) Enable RX Partial Store and Forward Operation */\r
-/* -------- GMAC_HRB : (GMAC Offset: 0x080) Hash Register Bottom [31:0] -------- */\r
-#define GMAC_HRB_ADDR_Pos 0\r
-#define GMAC_HRB_ADDR_Msk (0xffffffffu << GMAC_HRB_ADDR_Pos) /**< \brief (GMAC_HRB) Hash Address */\r
-#define GMAC_HRB_ADDR(value) ((GMAC_HRB_ADDR_Msk & ((value) << GMAC_HRB_ADDR_Pos)))\r
-/* -------- GMAC_HRT : (GMAC Offset: 0x084) Hash Register Top [63:32] -------- */\r
-#define GMAC_HRT_ADDR_Pos 0\r
-#define GMAC_HRT_ADDR_Msk (0xffffffffu << GMAC_HRT_ADDR_Pos) /**< \brief (GMAC_HRT) Hash Address */\r
-#define GMAC_HRT_ADDR(value) ((GMAC_HRT_ADDR_Msk & ((value) << GMAC_HRT_ADDR_Pos)))\r
-/* -------- GMAC_SAB1 : (GMAC Offset: 0x088) Specific Address 1 Bottom [31:0] Register -------- */\r
-#define GMAC_SAB1_ADDR_Pos 0\r
-#define GMAC_SAB1_ADDR_Msk (0xffffffffu << GMAC_SAB1_ADDR_Pos) /**< \brief (GMAC_SAB1) Specific Address 1 */\r
-#define GMAC_SAB1_ADDR(value) ((GMAC_SAB1_ADDR_Msk & ((value) << GMAC_SAB1_ADDR_Pos)))\r
-/* -------- GMAC_SAT1 : (GMAC Offset: 0x08C) Specific Address 1 Top [47:32] Register -------- */\r
-#define GMAC_SAT1_ADDR_Pos 0\r
-#define GMAC_SAT1_ADDR_Msk (0xffffu << GMAC_SAT1_ADDR_Pos) /**< \brief (GMAC_SAT1) Specific Address 1 */\r
-#define GMAC_SAT1_ADDR(value) ((GMAC_SAT1_ADDR_Msk & ((value) << GMAC_SAT1_ADDR_Pos)))\r
-/* -------- GMAC_SAB2 : (GMAC Offset: 0x090) Specific Address 2 Bottom [31:0] Register -------- */\r
-#define GMAC_SAB2_ADDR_Pos 0\r
-#define GMAC_SAB2_ADDR_Msk (0xffffffffu << GMAC_SAB2_ADDR_Pos) /**< \brief (GMAC_SAB2) Specific Address 2 */\r
-#define GMAC_SAB2_ADDR(value) ((GMAC_SAB2_ADDR_Msk & ((value) << GMAC_SAB2_ADDR_Pos)))\r
-/* -------- GMAC_SAT2 : (GMAC Offset: 0x094) Specific Address 2 Top [47:32] Register -------- */\r
-#define GMAC_SAT2_ADDR_Pos 0\r
-#define GMAC_SAT2_ADDR_Msk (0xffffu << GMAC_SAT2_ADDR_Pos) /**< \brief (GMAC_SAT2) Specific Address 2 */\r
-#define GMAC_SAT2_ADDR(value) ((GMAC_SAT2_ADDR_Msk & ((value) << GMAC_SAT2_ADDR_Pos)))\r
-/* -------- GMAC_SAB3 : (GMAC Offset: 0x098) Specific Address 3 Bottom [31:0] Register -------- */\r
-#define GMAC_SAB3_ADDR_Pos 0\r
-#define GMAC_SAB3_ADDR_Msk (0xffffffffu << GMAC_SAB3_ADDR_Pos) /**< \brief (GMAC_SAB3) Specific Address 3 */\r
-#define GMAC_SAB3_ADDR(value) ((GMAC_SAB3_ADDR_Msk & ((value) << GMAC_SAB3_ADDR_Pos)))\r
-/* -------- GMAC_SAT3 : (GMAC Offset: 0x09C) Specific Address 3 Top [47:32] Register -------- */\r
-#define GMAC_SAT3_ADDR_Pos 0\r
-#define GMAC_SAT3_ADDR_Msk (0xffffu << GMAC_SAT3_ADDR_Pos) /**< \brief (GMAC_SAT3) Specific Address 3 */\r
-#define GMAC_SAT3_ADDR(value) ((GMAC_SAT3_ADDR_Msk & ((value) << GMAC_SAT3_ADDR_Pos)))\r
-/* -------- GMAC_SAB4 : (GMAC Offset: 0x0A0) Specific Address 4 Bottom [31:0] Register -------- */\r
-#define GMAC_SAB4_ADDR_Pos 0\r
-#define GMAC_SAB4_ADDR_Msk (0xffffffffu << GMAC_SAB4_ADDR_Pos) /**< \brief (GMAC_SAB4) Specific Address 4 */\r
-#define GMAC_SAB4_ADDR(value) ((GMAC_SAB4_ADDR_Msk & ((value) << GMAC_SAB4_ADDR_Pos)))\r
-/* -------- GMAC_SAT4 : (GMAC Offset: 0x0A4) Specific Address 4 Top [47:32] Register -------- */\r
-#define GMAC_SAT4_ADDR_Pos 0\r
-#define GMAC_SAT4_ADDR_Msk (0xffffu << GMAC_SAT4_ADDR_Pos) /**< \brief (GMAC_SAT4) Specific Address 4 */\r
-#define GMAC_SAT4_ADDR(value) ((GMAC_SAT4_ADDR_Msk & ((value) << GMAC_SAT4_ADDR_Pos)))\r
-/* -------- GMAC_TIDM[4] : (GMAC Offset: 0x0A8) Type ID Match 1 Register -------- */\r
-#define GMAC_TIDM_TID_Pos 0\r
-#define GMAC_TIDM_TID_Msk (0xffffu << GMAC_TIDM_TID_Pos) /**< \brief (GMAC_TIDM[4]) Type ID Match 1 */\r
-#define GMAC_TIDM_TID(value) ((GMAC_TIDM_TID_Msk & ((value) << GMAC_TIDM_TID_Pos)))\r
-/* -------- GMAC_WOL : (GMAC Offset: 0x0B8) Wake on LAN Register -------- */\r
-#define GMAC_WOL_IP_Pos 0\r
-#define GMAC_WOL_IP_Msk (0xffffu << GMAC_WOL_IP_Pos) /**< \brief (GMAC_WOL) ARP Request IP Address */\r
-#define GMAC_WOL_IP(value) ((GMAC_WOL_IP_Msk & ((value) << GMAC_WOL_IP_Pos)))\r
-#define GMAC_WOL_MAG (0x1u << 16) /**< \brief (GMAC_WOL) Magic Packet Event Enable */\r
-#define GMAC_WOL_ARP (0x1u << 17) /**< \brief (GMAC_WOL) ARP Request IP Address */\r
-#define GMAC_WOL_SA1 (0x1u << 18) /**< \brief (GMAC_WOL) Specific Address Register 1 Event Enable */\r
-#define GMAC_WOL_MTI (0x1u << 19) /**< \brief (GMAC_WOL) Multicast Hash Event Enable */\r
-/* -------- GMAC_IPGS : (GMAC Offset: 0x0BC) IPG Stretch Register -------- */\r
-#define GMAC_IPGS_FL_Pos 0\r
-#define GMAC_IPGS_FL_Msk (0xffffu << GMAC_IPGS_FL_Pos) /**< \brief (GMAC_IPGS) Frame Length */\r
-#define GMAC_IPGS_FL(value) ((GMAC_IPGS_FL_Msk & ((value) << GMAC_IPGS_FL_Pos)))\r
-/* -------- GMAC_SVLAN : (GMAC Offset: 0x0C0) Stacked VLAN Register -------- */\r
-#define GMAC_SVLAN_VLAN_TYPE_Pos 0\r
-#define GMAC_SVLAN_VLAN_TYPE_Msk (0xffffu << GMAC_SVLAN_VLAN_TYPE_Pos) /**< \brief (GMAC_SVLAN) User Defined VLAN_TYPE Field */\r
-#define GMAC_SVLAN_VLAN_TYPE(value) ((GMAC_SVLAN_VLAN_TYPE_Msk & ((value) << GMAC_SVLAN_VLAN_TYPE_Pos)))\r
-#define GMAC_SVLAN_ESVLAN (0x1u << 31) /**< \brief (GMAC_SVLAN) Enable Stacked VLAN Processing Mode */\r
-/* -------- GMAC_TPFCP : (GMAC Offset: 0x0C4) Transmit PFC Pause Register -------- */\r
-#define GMAC_TPFCP_PEV_Pos 0\r
-#define GMAC_TPFCP_PEV_Msk (0xffu << GMAC_TPFCP_PEV_Pos) /**< \brief (GMAC_TPFCP) Priority Enable Vector */\r
-#define GMAC_TPFCP_PEV(value) ((GMAC_TPFCP_PEV_Msk & ((value) << GMAC_TPFCP_PEV_Pos)))\r
-#define GMAC_TPFCP_PQ_Pos 8\r
-#define GMAC_TPFCP_PQ_Msk (0xffu << GMAC_TPFCP_PQ_Pos) /**< \brief (GMAC_TPFCP) Pause Quantum */\r
-#define GMAC_TPFCP_PQ(value) ((GMAC_TPFCP_PQ_Msk & ((value) << GMAC_TPFCP_PQ_Pos)))\r
-/* -------- GMAC_SAMB1 : (GMAC Offset: 0x0C8) Specific Address 1 Mask Bottom [31:0] Register -------- */\r
-#define GMAC_SAMB1_ADDR_Pos 0\r
-#define GMAC_SAMB1_ADDR_Msk (0xffffffffu << GMAC_SAMB1_ADDR_Pos) /**< \brief (GMAC_SAMB1) Specific Address 1 Mask */\r
-#define GMAC_SAMB1_ADDR(value) ((GMAC_SAMB1_ADDR_Msk & ((value) << GMAC_SAMB1_ADDR_Pos)))\r
-/* -------- GMAC_SAMT1 : (GMAC Offset: 0x0CC) Specific Address 1 Mask Top [47:32] Register -------- */\r
-#define GMAC_SAMT1_ADDR_Pos 0\r
-#define GMAC_SAMT1_ADDR_Msk (0xffffu << GMAC_SAMT1_ADDR_Pos) /**< \brief (GMAC_SAMT1) Specific Address 1 Mask */\r
-#define GMAC_SAMT1_ADDR(value) ((GMAC_SAMT1_ADDR_Msk & ((value) << GMAC_SAMT1_ADDR_Pos)))\r
-/* -------- GMAC_OTLO : (GMAC Offset: 0x100) Octets Transmitted [31:0] Register -------- */\r
-#define GMAC_OTLO_TXO_Pos 0\r
-#define GMAC_OTLO_TXO_Msk (0xffffffffu << GMAC_OTLO_TXO_Pos) /**< \brief (GMAC_OTLO) Transmitted Octets */\r
-/* -------- GMAC_OTHI : (GMAC Offset: 0x104) Octets Transmitted [47:32] Register -------- */\r
-#define GMAC_OTHI_TXO_Pos 0\r
-#define GMAC_OTHI_TXO_Msk (0xffffu << GMAC_OTHI_TXO_Pos) /**< \brief (GMAC_OTHI) Transmitted Octets */\r
-/* -------- GMAC_FT : (GMAC Offset: 0x108) Frames Transmitted Register -------- */\r
-#define GMAC_FT_FTX_Pos 0\r
-#define GMAC_FT_FTX_Msk (0xffffffffu << GMAC_FT_FTX_Pos) /**< \brief (GMAC_FT) Frames Transmitted without Error */\r
-/* -------- GMAC_BCFT : (GMAC Offset: 0x10C) Broadcast Frames Transmitted Register -------- */\r
-#define GMAC_BCFT_BFTX_Pos 0\r
-#define GMAC_BCFT_BFTX_Msk (0xffffffffu << GMAC_BCFT_BFTX_Pos) /**< \brief (GMAC_BCFT) Broadcast Frames Transmitted without Error */\r
-/* -------- GMAC_MFT : (GMAC Offset: 0x110) Multicast Frames Transmitted Register -------- */\r
-#define GMAC_MFT_MFTX_Pos 0\r
-#define GMAC_MFT_MFTX_Msk (0xffffffffu << GMAC_MFT_MFTX_Pos) /**< \brief (GMAC_MFT) Multicast Frames Transmitted without Error */\r
-/* -------- GMAC_PFT : (GMAC Offset: 0x114) Pause Frames Transmitted Register -------- */\r
-#define GMAC_PFT_PFTX_Pos 0\r
-#define GMAC_PFT_PFTX_Msk (0xffffu << GMAC_PFT_PFTX_Pos) /**< \brief (GMAC_PFT) Pause Frames Transmitted Register */\r
-/* -------- GMAC_BFT64 : (GMAC Offset: 0x118) 64 Byte Frames Transmitted Register -------- */\r
-#define GMAC_BFT64_NFTX_Pos 0\r
-#define GMAC_BFT64_NFTX_Msk (0xffffffffu << GMAC_BFT64_NFTX_Pos) /**< \brief (GMAC_BFT64) 64 Byte Frames Transmitted without Error */\r
-/* -------- GMAC_TBFT127 : (GMAC Offset: 0x11C) 65 to 127 Byte Frames Transmitted Register -------- */\r
-#define GMAC_TBFT127_NFTX_Pos 0\r
-#define GMAC_TBFT127_NFTX_Msk (0xffffffffu << GMAC_TBFT127_NFTX_Pos) /**< \brief (GMAC_TBFT127) 65 to 127 Byte Frames Transmitted without Error */\r
-/* -------- GMAC_TBFT255 : (GMAC Offset: 0x120) 128 to 255 Byte Frames Transmitted Register -------- */\r
-#define GMAC_TBFT255_NFTX_Pos 0\r
-#define GMAC_TBFT255_NFTX_Msk (0xffffffffu << GMAC_TBFT255_NFTX_Pos) /**< \brief (GMAC_TBFT255) 128 to 255 Byte Frames Transmitted without Error */\r
-/* -------- GMAC_TBFT511 : (GMAC Offset: 0x124) 256 to 511 Byte Frames Transmitted Register -------- */\r
-#define GMAC_TBFT511_NFTX_Pos 0\r
-#define GMAC_TBFT511_NFTX_Msk (0xffffffffu << GMAC_TBFT511_NFTX_Pos) /**< \brief (GMAC_TBFT511) 256 to 511 Byte Frames Transmitted without Error */\r
-/* -------- GMAC_TBFT1023 : (GMAC Offset: 0x128) 512 to 1023 Byte Frames Transmitted Register -------- */\r
-#define GMAC_TBFT1023_NFTX_Pos 0\r
-#define GMAC_TBFT1023_NFTX_Msk (0xffffffffu << GMAC_TBFT1023_NFTX_Pos) /**< \brief (GMAC_TBFT1023) 512 to 1023 Byte Frames Transmitted without Error */\r
-/* -------- GMAC_TBFT1518 : (GMAC Offset: 0x12C) 1024 to 1518 Byte Frames Transmitted Register -------- */\r
-#define GMAC_TBFT1518_NFTX_Pos 0\r
-#define GMAC_TBFT1518_NFTX_Msk (0xffffffffu << GMAC_TBFT1518_NFTX_Pos) /**< \brief (GMAC_TBFT1518) 1024 to 1518 Byte Frames Transmitted without Error */\r
-/* -------- GMAC_GTBFT1518 : (GMAC Offset: 0x130) Greater Than 1518 Byte Frames Transmitted Register -------- */\r
-#define GMAC_GTBFT1518_NFTX_Pos 0\r
-#define GMAC_GTBFT1518_NFTX_Msk (0xffffffffu << GMAC_GTBFT1518_NFTX_Pos) /**< \brief (GMAC_GTBFT1518) Greater than 1518 Byte Frames Transmitted without Error */\r
-/* -------- GMAC_TUR : (GMAC Offset: 0x134) Transmit Under Runs Register -------- */\r
-#define GMAC_TUR_TXUNR_Pos 0\r
-#define GMAC_TUR_TXUNR_Msk (0x3ffu << GMAC_TUR_TXUNR_Pos) /**< \brief (GMAC_TUR) Transmit Under Runs */\r
-/* -------- GMAC_SCF : (GMAC Offset: 0x138) Single Collision Frames Register -------- */\r
-#define GMAC_SCF_SCOL_Pos 0\r
-#define GMAC_SCF_SCOL_Msk (0x3ffffu << GMAC_SCF_SCOL_Pos) /**< \brief (GMAC_SCF) Single Collision */\r
-/* -------- GMAC_MCF : (GMAC Offset: 0x13C) Multiple Collision Frames Register -------- */\r
-#define GMAC_MCF_MCOL_Pos 0\r
-#define GMAC_MCF_MCOL_Msk (0x3ffffu << GMAC_MCF_MCOL_Pos) /**< \brief (GMAC_MCF) Multiple Collision */\r
-/* -------- GMAC_EC : (GMAC Offset: 0x140) Excessive Collisions Register -------- */\r
-#define GMAC_EC_XCOL_Pos 0\r
-#define GMAC_EC_XCOL_Msk (0x3ffu << GMAC_EC_XCOL_Pos) /**< \brief (GMAC_EC) Excessive Collisions */\r
-/* -------- GMAC_LC : (GMAC Offset: 0x144) Late Collisions Register -------- */\r
-#define GMAC_LC_LCOL_Pos 0\r
-#define GMAC_LC_LCOL_Msk (0x3ffu << GMAC_LC_LCOL_Pos) /**< \brief (GMAC_LC) Late Collisions */\r
-/* -------- GMAC_DTF : (GMAC Offset: 0x148) Deferred Transmission Frames Register -------- */\r
-#define GMAC_DTF_DEFT_Pos 0\r
-#define GMAC_DTF_DEFT_Msk (0x3ffffu << GMAC_DTF_DEFT_Pos) /**< \brief (GMAC_DTF) Deferred Transmission */\r
-/* -------- GMAC_CSE : (GMAC Offset: 0x14C) Carrier Sense Errors Register -------- */\r
-#define GMAC_CSE_CSR_Pos 0\r
-#define GMAC_CSE_CSR_Msk (0x3ffu << GMAC_CSE_CSR_Pos) /**< \brief (GMAC_CSE) Carrier Sense Error */\r
-/* -------- GMAC_ORLO : (GMAC Offset: 0x150) Octets Received [31:0] Received -------- */\r
-#define GMAC_ORLO_RXO_Pos 0\r
-#define GMAC_ORLO_RXO_Msk (0xffffffffu << GMAC_ORLO_RXO_Pos) /**< \brief (GMAC_ORLO) Received Octets */\r
-/* -------- GMAC_ORHI : (GMAC Offset: 0x154) Octets Received [47:32] Received -------- */\r
-#define GMAC_ORHI_RXO_Pos 0\r
-#define GMAC_ORHI_RXO_Msk (0xffffu << GMAC_ORHI_RXO_Pos) /**< \brief (GMAC_ORHI) Received Octets */\r
-/* -------- GMAC_FR : (GMAC Offset: 0x158) Frames Received Register -------- */\r
-#define GMAC_FR_FRX_Pos 0\r
-#define GMAC_FR_FRX_Msk (0xffffffffu << GMAC_FR_FRX_Pos) /**< \brief (GMAC_FR) Frames Received without Error */\r
-/* -------- GMAC_BCFR : (GMAC Offset: 0x15C) Broadcast Frames Received Register -------- */\r
-#define GMAC_BCFR_BFRX_Pos 0\r
-#define GMAC_BCFR_BFRX_Msk (0xffffffffu << GMAC_BCFR_BFRX_Pos) /**< \brief (GMAC_BCFR) Broadcast Frames Received without Error */\r
-/* -------- GMAC_MFR : (GMAC Offset: 0x160) Multicast Frames Received Register -------- */\r
-#define GMAC_MFR_MFRX_Pos 0\r
-#define GMAC_MFR_MFRX_Msk (0xffffffffu << GMAC_MFR_MFRX_Pos) /**< \brief (GMAC_MFR) Multicast Frames Received without Error */\r
-/* -------- GMAC_PFR : (GMAC Offset: 0x164) Pause Frames Received Register -------- */\r
-#define GMAC_PFR_PFRX_Pos 0\r
-#define GMAC_PFR_PFRX_Msk (0xffffu << GMAC_PFR_PFRX_Pos) /**< \brief (GMAC_PFR) Pause Frames Received Register */\r
-/* -------- GMAC_BFR64 : (GMAC Offset: 0x168) 64 Byte Frames Received Register -------- */\r
-#define GMAC_BFR64_NFRX_Pos 0\r
-#define GMAC_BFR64_NFRX_Msk (0xffffffffu << GMAC_BFR64_NFRX_Pos) /**< \brief (GMAC_BFR64) 64 Byte Frames Received without Error */\r
-/* -------- GMAC_TBFR127 : (GMAC Offset: 0x16C) 65 to 127 Byte Frames Received Register -------- */\r
-#define GMAC_TBFR127_NFRX_Pos 0\r
-#define GMAC_TBFR127_NFRX_Msk (0xffffffffu << GMAC_TBFR127_NFRX_Pos) /**< \brief (GMAC_TBFR127) 65 to 127 Byte Frames Received without Error */\r
-/* -------- GMAC_TBFR255 : (GMAC Offset: 0x170) 128 to 255 Byte Frames Received Register -------- */\r
-#define GMAC_TBFR255_NFRX_Pos 0\r
-#define GMAC_TBFR255_NFRX_Msk (0xffffffffu << GMAC_TBFR255_NFRX_Pos) /**< \brief (GMAC_TBFR255) 128 to 255 Byte Frames Received without Error */\r
-/* -------- GMAC_TBFR511 : (GMAC Offset: 0x174) 256 to 511Byte Frames Received Register -------- */\r
-#define GMAC_TBFR511_NFRX_Pos 0\r
-#define GMAC_TBFR511_NFRX_Msk (0xffffffffu << GMAC_TBFR511_NFRX_Pos) /**< \brief (GMAC_TBFR511) 256 to 511 Byte Frames Received without Error */\r
-/* -------- GMAC_TBFR1023 : (GMAC Offset: 0x178) 512 to 1023 Byte Frames Received Register -------- */\r
-#define GMAC_TBFR1023_NFRX_Pos 0\r
-#define GMAC_TBFR1023_NFRX_Msk (0xffffffffu << GMAC_TBFR1023_NFRX_Pos) /**< \brief (GMAC_TBFR1023) 512 to 1023 Byte Frames Received without Error */\r
-/* -------- GMAC_TBFR1518 : (GMAC Offset: 0x17C) 1024 to 1518 Byte Frames Received Register -------- */\r
-#define GMAC_TBFR1518_NFRX_Pos 0\r
-#define GMAC_TBFR1518_NFRX_Msk (0xffffffffu << GMAC_TBFR1518_NFRX_Pos) /**< \brief (GMAC_TBFR1518) 1024 to 1518 Byte Frames Received without Error */\r
-/* -------- GMAC_TMXBFR : (GMAC Offset: 0x180) 1519 to Maximum Byte Frames Received Register -------- */\r
-#define GMAC_TMXBFR_NFRX_Pos 0\r
-#define GMAC_TMXBFR_NFRX_Msk (0xffffffffu << GMAC_TMXBFR_NFRX_Pos) /**< \brief (GMAC_TMXBFR) 1519 to Maximum Byte Frames Received without Error */\r
-/* -------- GMAC_UFR : (GMAC Offset: 0x184) Undersize Frames Received Register -------- */\r
-#define GMAC_UFR_UFRX_Pos 0\r
-#define GMAC_UFR_UFRX_Msk (0x3ffu << GMAC_UFR_UFRX_Pos) /**< \brief (GMAC_UFR) Undersize Frames Received */\r
-/* -------- GMAC_OFR : (GMAC Offset: 0x188) Oversize Frames Received Register -------- */\r
-#define GMAC_OFR_OFRX_Pos 0\r
-#define GMAC_OFR_OFRX_Msk (0x3ffu << GMAC_OFR_OFRX_Pos) /**< \brief (GMAC_OFR) Oversized Frames Received */\r
-/* -------- GMAC_JR : (GMAC Offset: 0x18C) Jabbers Received Register -------- */\r
-#define GMAC_JR_JRX_Pos 0\r
-#define GMAC_JR_JRX_Msk (0x3ffu << GMAC_JR_JRX_Pos) /**< \brief (GMAC_JR) Jabbers Received */\r
-/* -------- GMAC_FCSE : (GMAC Offset: 0x190) Frame Check Sequence Errors Register -------- */\r
-#define GMAC_FCSE_FCKR_Pos 0\r
-#define GMAC_FCSE_FCKR_Msk (0x3ffu << GMAC_FCSE_FCKR_Pos) /**< \brief (GMAC_FCSE) Frame Check Sequence Errors */\r
-/* -------- GMAC_LFFE : (GMAC Offset: 0x194) Length Field Frame Errors Register -------- */\r
-#define GMAC_LFFE_LFER_Pos 0\r
-#define GMAC_LFFE_LFER_Msk (0x3ffu << GMAC_LFFE_LFER_Pos) /**< \brief (GMAC_LFFE) Length Field Frame Errors */\r
-/* -------- GMAC_RSE : (GMAC Offset: 0x198) Receive Symbol Errors Register -------- */\r
-#define GMAC_RSE_RXSE_Pos 0\r
-#define GMAC_RSE_RXSE_Msk (0x3ffu << GMAC_RSE_RXSE_Pos) /**< \brief (GMAC_RSE) Receive Symbol Errors */\r
-/* -------- GMAC_AE : (GMAC Offset: 0x19C) Alignment Errors Register -------- */\r
-#define GMAC_AE_AER_Pos 0\r
-#define GMAC_AE_AER_Msk (0x3ffu << GMAC_AE_AER_Pos) /**< \brief (GMAC_AE) Alignment Errors */\r
-/* -------- GMAC_RRE : (GMAC Offset: 0x1A0) Receive Resource Errors Register -------- */\r
-#define GMAC_RRE_RXRER_Pos 0\r
-#define GMAC_RRE_RXRER_Msk (0x3ffffu << GMAC_RRE_RXRER_Pos) /**< \brief (GMAC_RRE) Receive Resource Errors */\r
-/* -------- GMAC_ROE : (GMAC Offset: 0x1A4) Receive Overrun Register -------- */\r
-#define GMAC_ROE_RXOVR_Pos 0\r
-#define GMAC_ROE_RXOVR_Msk (0x3ffu << GMAC_ROE_RXOVR_Pos) /**< \brief (GMAC_ROE) Receive Overruns */\r
-/* -------- GMAC_IHCE : (GMAC Offset: 0x1A8) IP Header Checksum Errors Register -------- */\r
-#define GMAC_IHCE_HCKER_Pos 0\r
-#define GMAC_IHCE_HCKER_Msk (0xffu << GMAC_IHCE_HCKER_Pos) /**< \brief (GMAC_IHCE) IP Header Checksum Errors */\r
-/* -------- GMAC_TCE : (GMAC Offset: 0x1AC) TCP Checksum Errors Register -------- */\r
-#define GMAC_TCE_TCKER_Pos 0\r
-#define GMAC_TCE_TCKER_Msk (0xffu << GMAC_TCE_TCKER_Pos) /**< \brief (GMAC_TCE) TCP Checksum Errors */\r
-/* -------- GMAC_UCE : (GMAC Offset: 0x1B0) UDP Checksum Errors Register -------- */\r
-#define GMAC_UCE_UCKER_Pos 0\r
-#define GMAC_UCE_UCKER_Msk (0xffu << GMAC_UCE_UCKER_Pos) /**< \brief (GMAC_UCE) UDP Checksum Errors */\r
-/* -------- GMAC_TSSS : (GMAC Offset: 0x1C8) 1588 Timer Sync Strobe Seconds Register -------- */\r
-#define GMAC_TSSS_VTS_Pos 0\r
-#define GMAC_TSSS_VTS_Msk (0xffffffffu << GMAC_TSSS_VTS_Pos) /**< \brief (GMAC_TSSS) Value of Timer Seconds Register Capture */\r
-#define GMAC_TSSS_VTS(value) ((GMAC_TSSS_VTS_Msk & ((value) << GMAC_TSSS_VTS_Pos)))\r
-/* -------- GMAC_TSSN : (GMAC Offset: 0x1CC) 1588 Timer Sync Strobe Nanoseconds Register -------- */\r
-#define GMAC_TSSN_VTN_Pos 0\r
-#define GMAC_TSSN_VTN_Msk (0x3fffffffu << GMAC_TSSN_VTN_Pos) /**< \brief (GMAC_TSSN) Value Timer Nanoseconds Register Capture */\r
-#define GMAC_TSSN_VTN(value) ((GMAC_TSSN_VTN_Msk & ((value) << GMAC_TSSN_VTN_Pos)))\r
-/* -------- GMAC_TS : (GMAC Offset: 0x1D0) 1588 Timer Seconds Register -------- */\r
-#define GMAC_TS_TCS_Pos 0\r
-#define GMAC_TS_TCS_Msk (0xffffffffu << GMAC_TS_TCS_Pos) /**< \brief (GMAC_TS) Timer Count in Seconds */\r
-#define GMAC_TS_TCS(value) ((GMAC_TS_TCS_Msk & ((value) << GMAC_TS_TCS_Pos)))\r
-/* -------- GMAC_TN : (GMAC Offset: 0x1D4) 1588 Timer Nanoseconds Register -------- */\r
-#define GMAC_TN_TNS_Pos 0\r
-#define GMAC_TN_TNS_Msk (0x3fffffffu << GMAC_TN_TNS_Pos) /**< \brief (GMAC_TN) Timer Count in Nanoseconds */\r
-#define GMAC_TN_TNS(value) ((GMAC_TN_TNS_Msk & ((value) << GMAC_TN_TNS_Pos)))\r
-/* -------- GMAC_TA : (GMAC Offset: 0x1D8) 1588 Timer Adjust Register -------- */\r
-#define GMAC_TA_ITDT_Pos 0\r
-#define GMAC_TA_ITDT_Msk (0x3fffffffu << GMAC_TA_ITDT_Pos) /**< \brief (GMAC_TA) Increment/Decrement */\r
-#define GMAC_TA_ITDT(value) ((GMAC_TA_ITDT_Msk & ((value) << GMAC_TA_ITDT_Pos)))\r
-#define GMAC_TA_ADJ (0x1u << 31) /**< \brief (GMAC_TA) Adjust 1588 Timer */\r
-/* -------- GMAC_TI : (GMAC Offset: 0x1DC) 1588 Timer Increment Register -------- */\r
-#define GMAC_TI_CNS_Pos 0\r
-#define GMAC_TI_CNS_Msk (0xffu << GMAC_TI_CNS_Pos) /**< \brief (GMAC_TI) Count Nanoseconds */\r
-#define GMAC_TI_CNS(value) ((GMAC_TI_CNS_Msk & ((value) << GMAC_TI_CNS_Pos)))\r
-#define GMAC_TI_ACNS_Pos 8\r
-#define GMAC_TI_ACNS_Msk (0xffu << GMAC_TI_ACNS_Pos) /**< \brief (GMAC_TI) Alternative Count Nanoseconds */\r
-#define GMAC_TI_ACNS(value) ((GMAC_TI_ACNS_Msk & ((value) << GMAC_TI_ACNS_Pos)))\r
-#define GMAC_TI_NIT_Pos 16\r
-#define GMAC_TI_NIT_Msk (0xffu << GMAC_TI_NIT_Pos) /**< \brief (GMAC_TI) Number of Increments */\r
-#define GMAC_TI_NIT(value) ((GMAC_TI_NIT_Msk & ((value) << GMAC_TI_NIT_Pos)))\r
-/* -------- GMAC_EFTS : (GMAC Offset: 0x1E0) PTP Event Frame Transmitted Seconds -------- */\r
-#define GMAC_EFTS_RUD_Pos 0\r
-#define GMAC_EFTS_RUD_Msk (0xffffffffu << GMAC_EFTS_RUD_Pos) /**< \brief (GMAC_EFTS) Register Update */\r
-/* -------- GMAC_EFTN : (GMAC Offset: 0x1E4) PTP Event Frame Transmitted Nanoseconds -------- */\r
-#define GMAC_EFTN_RUD_Pos 0\r
-#define GMAC_EFTN_RUD_Msk (0x3fffffffu << GMAC_EFTN_RUD_Pos) /**< \brief (GMAC_EFTN) Register Update */\r
-/* -------- GMAC_EFRS : (GMAC Offset: 0x1E8) PTP Event Frame Received Seconds -------- */\r
-#define GMAC_EFRS_RUD_Pos 0\r
-#define GMAC_EFRS_RUD_Msk (0xffffffffu << GMAC_EFRS_RUD_Pos) /**< \brief (GMAC_EFRS) Register Update */\r
-/* -------- GMAC_EFRN : (GMAC Offset: 0x1EC) PTP Event Frame Received Nanoseconds -------- */\r
-#define GMAC_EFRN_RUD_Pos 0\r
-#define GMAC_EFRN_RUD_Msk (0x3fffffffu << GMAC_EFRN_RUD_Pos) /**< \brief (GMAC_EFRN) Register Update */\r
-/* -------- GMAC_PEFTS : (GMAC Offset: 0x1F0) PTP Peer Event Frame Transmitted Seconds -------- */\r
-#define GMAC_PEFTS_RUD_Pos 0\r
-#define GMAC_PEFTS_RUD_Msk (0xffffffffu << GMAC_PEFTS_RUD_Pos) /**< \brief (GMAC_PEFTS) Register Update */\r
-/* -------- GMAC_PEFTN : (GMAC Offset: 0x1F4) PTP Peer Event Frame Transmitted Nanoseconds -------- */\r
-#define GMAC_PEFTN_RUD_Pos 0\r
-#define GMAC_PEFTN_RUD_Msk (0x3fffffffu << GMAC_PEFTN_RUD_Pos) /**< \brief (GMAC_PEFTN) Register Update */\r
-/* -------- GMAC_PEFRS : (GMAC Offset: 0x1F8) PTP Peer Event Frame Received Seconds -------- */\r
-#define GMAC_PEFRS_RUD_Pos 0\r
-#define GMAC_PEFRS_RUD_Msk (0xffffffffu << GMAC_PEFRS_RUD_Pos) /**< \brief (GMAC_PEFRS) Register Update */\r
-/* -------- GMAC_PEFRN : (GMAC Offset: 0x1FC) PTP Peer Event Frame Received Nanoseconds -------- */\r
-#define GMAC_PEFRN_RUD_Pos 0\r
-#define GMAC_PEFRN_RUD_Msk (0x3fffffffu << GMAC_PEFRN_RUD_Pos) /**< \brief (GMAC_PEFRN) Register Update */\r
-/* -------- GMAC_ISRPQ[7] : (GMAC Offset: 0x400) Interrupt Status Register Priority Queue -------- */\r
-#define GMAC_ISRPQ_RCOMP (0x1u << 1) /**< \brief (GMAC_ISRPQ[7]) Receive Complete */\r
-#define GMAC_ISRPQ_RXUBR (0x1u << 2) /**< \brief (GMAC_ISRPQ[7]) RX Used Bit Read */\r
-#define GMAC_ISRPQ_RLEX (0x1u << 5) /**< \brief (GMAC_ISRPQ[7]) Retry Limit Exceeded or Late Collision */\r
-#define GMAC_ISRPQ_TFC (0x1u << 6) /**< \brief (GMAC_ISRPQ[7]) Transmit Frame Corruption due to AHB error */\r
-#define GMAC_ISRPQ_TCOMP (0x1u << 7) /**< \brief (GMAC_ISRPQ[7]) Transmit Complete */\r
-#define GMAC_ISRPQ_ROVR (0x1u << 10) /**< \brief (GMAC_ISRPQ[7]) Receive Overrun */\r
-#define GMAC_ISRPQ_HRESP (0x1u << 11) /**< \brief (GMAC_ISRPQ[7]) HRESP Not OK */\r
-/* -------- GMAC_TBQBAPQ[7] : (GMAC Offset: 0x440) Transmit Buffer Queue Base Address Priority Queue -------- */\r
-#define GMAC_TBQBAPQ_TXBQBA_Pos 2\r
-#define GMAC_TBQBAPQ_TXBQBA_Msk (0x3fu << GMAC_TBQBAPQ_TXBQBA_Pos) /**< \brief (GMAC_TBQBAPQ[7]) Transmit Buffer Queue Base Address */\r
-#define GMAC_TBQBAPQ_TXBQBA(value) ((GMAC_TBQBAPQ_TXBQBA_Msk & ((value) << GMAC_TBQBAPQ_TXBQBA_Pos)))\r
-/* -------- GMAC_RBQBAPQ[7] : (GMAC Offset: 0x480) Receive Buffer Queue Base Address Priority Queue -------- */\r
-#define GMAC_RBQBAPQ_RXBQBA_Pos 2\r
-#define GMAC_RBQBAPQ_RXBQBA_Msk (0x3fu << GMAC_RBQBAPQ_RXBQBA_Pos) /**< \brief (GMAC_RBQBAPQ[7]) Receive Buffer Queue Base Address */\r
-#define GMAC_RBQBAPQ_RXBQBA(value) ((GMAC_RBQBAPQ_RXBQBA_Msk & ((value) << GMAC_RBQBAPQ_RXBQBA_Pos)))\r
-/* -------- GMAC_RBSRPQ[7] : (GMAC Offset: 0x4A0) Receive Buffer Size Register Priority Queue -------- */\r
-#define GMAC_RBSRPQ_RBS_Pos 0\r
-#define GMAC_RBSRPQ_RBS_Msk (0xffffu << GMAC_RBSRPQ_RBS_Pos) /**< \brief (GMAC_RBSRPQ[7]) Receive Buffer Size */\r
-#define GMAC_RBSRPQ_RBS(value) ((GMAC_RBSRPQ_RBS_Msk & ((value) << GMAC_RBSRPQ_RBS_Pos)))\r
-/* -------- GMAC_ST1RPQ[16] : (GMAC Offset: 0x500) Screening Type1 Register Priority Queue -------- */\r
-#define GMAC_ST1RPQ_QNB_Pos 0\r
-#define GMAC_ST1RPQ_QNB_Msk (0xfu << GMAC_ST1RPQ_QNB_Pos) /**< \brief (GMAC_ST1RPQ[16]) Que Number (0->7) */\r
-#define GMAC_ST1RPQ_QNB(value) ((GMAC_ST1RPQ_QNB_Msk & ((value) << GMAC_ST1RPQ_QNB_Pos)))\r
-#define GMAC_ST1RPQ_DSTCM_Pos 4\r
-#define GMAC_ST1RPQ_DSTCM_Msk (0xffu << GMAC_ST1RPQ_DSTCM_Pos) /**< \brief (GMAC_ST1RPQ[16]) Differentiated Services or Traffic Class Match */\r
-#define GMAC_ST1RPQ_DSTCM(value) ((GMAC_ST1RPQ_DSTCM_Msk & ((value) << GMAC_ST1RPQ_DSTCM_Pos)))\r
-#define GMAC_ST1RPQ_UDPM_Pos 12\r
-#define GMAC_ST1RPQ_UDPM_Msk (0xffffu << GMAC_ST1RPQ_UDPM_Pos) /**< \brief (GMAC_ST1RPQ[16]) UDP Port Match */\r
-#define GMAC_ST1RPQ_UDPM(value) ((GMAC_ST1RPQ_UDPM_Msk & ((value) << GMAC_ST1RPQ_UDPM_Pos)))\r
-#define GMAC_ST1RPQ_DSTCE (0x1u << 28) /**< \brief (GMAC_ST1RPQ[16]) Differentiated Services or Traffic Class Match Enable */\r
-#define GMAC_ST1RPQ_UDPE (0x1u << 29) /**< \brief (GMAC_ST1RPQ[16]) UDP Port Match Enable */\r
-/* -------- GMAC_ST2RPQ[16] : (GMAC Offset: 0x540) Screening Type2 Register Priority Queue -------- */\r
-#define GMAC_ST2RPQ_QNB_Pos 0\r
-#define GMAC_ST2RPQ_QNB_Msk (0xfu << GMAC_ST2RPQ_QNB_Pos) /**< \brief (GMAC_ST2RPQ[16]) Que Number (0->7) */\r
-#define GMAC_ST2RPQ_QNB(value) ((GMAC_ST2RPQ_QNB_Msk & ((value) << GMAC_ST2RPQ_QNB_Pos)))\r
-#define GMAC_ST2RPQ_VLANP_Pos 4\r
-#define GMAC_ST2RPQ_VLANP_Msk (0xfu << GMAC_ST2RPQ_VLANP_Pos) /**< \brief (GMAC_ST2RPQ[16]) VLAN Priority */\r
-#define GMAC_ST2RPQ_VLANP(value) ((GMAC_ST2RPQ_VLANP_Msk & ((value) << GMAC_ST2RPQ_VLANP_Pos)))\r
-#define GMAC_ST2RPQ_VLANE (0x1u << 8) /**< \brief (GMAC_ST2RPQ[16]) VLAN Enable */\r
-/* -------- GMAC_IERPQ[7] : (GMAC Offset: 0x600) Interrupt Enable Register Priority Queue -------- */\r
-#define GMAC_IERPQ_RCOMP (0x1u << 1) /**< \brief (GMAC_IERPQ[7]) Receive Complete */\r
-#define GMAC_IERPQ_RXUBR (0x1u << 2) /**< \brief (GMAC_IERPQ[7]) RX Used Bit Read */\r
-#define GMAC_IERPQ_RLEX (0x1u << 5) /**< \brief (GMAC_IERPQ[7]) Retry Limit Exceeded or Late Collision */\r
-#define GMAC_IERPQ_TFC (0x1u << 6) /**< \brief (GMAC_IERPQ[7]) Transmit Frame Corruption due to AHB error */\r
-#define GMAC_IERPQ_TCOMP (0x1u << 7) /**< \brief (GMAC_IERPQ[7]) Transmit Complete */\r
-#define GMAC_IERPQ_ROVR (0x1u << 10) /**< \brief (GMAC_IERPQ[7]) Receive Overrun */\r
-#define GMAC_IERPQ_HRESP (0x1u << 11) /**< \brief (GMAC_IERPQ[7]) HRESP Not OK */\r
-/* -------- GMAC_IDRPQ[7] : (GMAC Offset: 0x620) Interrupt Disable Register Priority Queue -------- */\r
-#define GMAC_IDRPQ_RCOMP (0x1u << 1) /**< \brief (GMAC_IDRPQ[7]) Receive Complete */\r
-#define GMAC_IDRPQ_RXUBR (0x1u << 2) /**< \brief (GMAC_IDRPQ[7]) RX Used Bit Read */\r
-#define GMAC_IDRPQ_RLEX (0x1u << 5) /**< \brief (GMAC_IDRPQ[7]) Retry Limit Exceeded or Late Collision */\r
-#define GMAC_IDRPQ_TFC (0x1u << 6) /**< \brief (GMAC_IDRPQ[7]) Transmit Frame Corruption due to AHB error */\r
-#define GMAC_IDRPQ_TCOMP (0x1u << 7) /**< \brief (GMAC_IDRPQ[7]) Transmit Complete */\r
-#define GMAC_IDRPQ_ROVR (0x1u << 10) /**< \brief (GMAC_IDRPQ[7]) Receive Overrun */\r
-#define GMAC_IDRPQ_HRESP (0x1u << 11) /**< \brief (GMAC_IDRPQ[7]) HRESP Not OK */\r
-/* -------- GMAC_IMRPQ[7] : (GMAC Offset: 0x640) Interrupt Mask Register Priority Queue -------- */\r
-#define GMAC_IMRPQ_RCOMP (0x1u << 1) /**< \brief (GMAC_IMRPQ[7]) Receive Complete */\r
-#define GMAC_IMRPQ_RXUBR (0x1u << 2) /**< \brief (GMAC_IMRPQ[7]) RX Used Bit Read */\r
-#define GMAC_IMRPQ_RLEX (0x1u << 5) /**< \brief (GMAC_IMRPQ[7]) Retry Limit Exceeded or Late Collision */\r
-#define GMAC_IMRPQ_AHB (0x1u << 6) /**< \brief (GMAC_IMRPQ[7]) AHB Error */\r
-#define GMAC_IMRPQ_TCOMP (0x1u << 7) /**< \brief (GMAC_IMRPQ[7]) Transmit Complete */\r
-#define GMAC_IMRPQ_ROVR (0x1u << 10) /**< \brief (GMAC_IMRPQ[7]) Receive Overrun */\r
-#define GMAC_IMRPQ_HRESP (0x1u << 11) /**< \brief (GMAC_IMRPQ[7]) HRESP Not OK */\r
-\r
-/*@}*/\r
-\r
-\r
-#endif /* _SAM4E_GMAC_COMPONENT_ */\r
+/**
+ * \file
+ *
+ * Copyright (c) 2012 Atmel Corporation. All rights reserved.
+ *
+ * \asf_license_start
+ *
+ * \page License
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ *
+ * 3. The name of Atmel may not be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * 4. This software may only be redistributed and used in connection with an
+ *    Atmel microcontroller product.
+ *
+ * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
+ * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * \asf_license_stop
+ *
+ */
+
+#ifndef _SAM4E_GMAC_COMPONENT_
+#define _SAM4E_GMAC_COMPONENT_
+
+/* ============================================================================= */
+/**  SOFTWARE API DEFINITION FOR Gigabit Ethernet MAC */
+/* ============================================================================= */
+/** \addtogroup SAM4E_GMAC Gigabit Ethernet MAC */
+/*@{*/
+
+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))
+/** \brief GmacSa hardware registers */
+typedef struct {
+  RwReg   GMAC_SAB;        /**< \brief (GmacSa Offset: 0x0) Specific Address 1 Bottom [31:0] Register */
+  RwReg   GMAC_SAT;        /**< \brief (GmacSa Offset: 0x4) Specific Address 1 Top [47:32] Register */
+} GmacSa;
+/** \brief Gmac hardware registers */
+#define GMACSA_NUMBER 4
+typedef struct {
+  RwReg   GMAC_NCR;        /**< \brief (Gmac Offset: 0x000) Network Control Register */
+  RwReg   GMAC_NCFGR;      /**< \brief (Gmac Offset: 0x004) Network Configuration Register */
+  RoReg   GMAC_NSR;        /**< \brief (Gmac Offset: 0x008) Network Status Register */
+  RwReg   GMAC_UR;         /**< \brief (Gmac Offset: 0x00C) User Register */
+  RwReg   GMAC_DCFGR;      /**< \brief (Gmac Offset: 0x010) DMA Configuration Register */
+  RwReg   GMAC_TSR;        /**< \brief (Gmac Offset: 0x014) Transmit Status Register */
+  RwReg   GMAC_RBQB;       /**< \brief (Gmac Offset: 0x018) Receive Buffer Queue Base Address */
+  RwReg   GMAC_TBQB;       /**< \brief (Gmac Offset: 0x01C) Transmit Buffer Queue Base Address */
+  RwReg   GMAC_RSR;        /**< \brief (Gmac Offset: 0x020) Receive Status Register */
+  RoReg   GMAC_ISR;        /**< \brief (Gmac Offset: 0x024) Interrupt Status Register */
+  WoReg   GMAC_IER;        /**< \brief (Gmac Offset: 0x028) Interrupt Enable Register */
+  WoReg   GMAC_IDR;        /**< \brief (Gmac Offset: 0x02C) Interrupt Disable Register */
+  RoReg   GMAC_IMR;        /**< \brief (Gmac Offset: 0x030) Interrupt Mask Register */
+  RwReg   GMAC_MAN;        /**< \brief (Gmac Offset: 0x034) PHY Maintenance Register */
+  RoReg   GMAC_RPQ;        /**< \brief (Gmac Offset: 0x038) Received Pause Quantum Register */
+  RwReg   GMAC_TPQ;        /**< \brief (Gmac Offset: 0x03C) Transmit Pause Quantum Register */
+  RwReg   GMAC_TPSF;       /**< \brief (Gmac Offset: 0x040) TX Partial Store and Forward Register */
+  RwReg   GMAC_RPSF;       /**< \brief (Gmac Offset: 0x044) RX Partial Store and Forward Register */
+  RoReg   Reserved1[14];
+  RwReg   GMAC_HRB;        /**< \brief (Gmac Offset: 0x080) Hash Register Bottom [31:0] */
+  RwReg   GMAC_HRT;        /**< \brief (Gmac Offset: 0x084) Hash Register Top [63:32] */
+  GmacSa  GMAC_SA[GMACSA_NUMBER]; /**< \brief (Gmac Offset: 0x088) 1 .. 4 */
+  RwReg   GMAC_TIDM[4];    /**< \brief (Gmac Offset: 0x0A8) Type ID Match 1 Register */
+  RwReg   GMAC_WOL;        /**< \brief (Gmac Offset: 0x0B8) Wake on LAN Register */
+  RwReg   GMAC_IPGS;       /**< \brief (Gmac Offset: 0x0BC) IPG Stretch Register */
+  RwReg   GMAC_SVLAN;      /**< \brief (Gmac Offset: 0x0C0) Stacked VLAN Register */
+  RwReg   GMAC_TPFCP;      /**< \brief (Gmac Offset: 0x0C4) Transmit PFC Pause Register */
+  RwReg   GMAC_SAMB1;      /**< \brief (Gmac Offset: 0x0C8) Specific Address 1 Mask Bottom [31:0] Register */
+  RwReg   GMAC_SAMT1;      /**< \brief (Gmac Offset: 0x0CC) Specific Address 1 Mask Top [47:32] Register */
+  RoReg   Reserved2[12];
+  RoReg   GMAC_OTLO;       /**< \brief (Gmac Offset: 0x100) Octets Transmitted [31:0] Register */
+  RoReg   GMAC_OTHI;       /**< \brief (Gmac Offset: 0x104) Octets Transmitted [47:32] Register */
+  RoReg   GMAC_FT;         /**< \brief (Gmac Offset: 0x108) Frames Transmitted Register */
+  RoReg   GMAC_BCFT;       /**< \brief (Gmac Offset: 0x10C) Broadcast Frames Transmitted Register */
+  RoReg   GMAC_MFT;        /**< \brief (Gmac Offset: 0x110) Multicast Frames Transmitted Register */
+  RoReg   GMAC_PFT;        /**< \brief (Gmac Offset: 0x114) Pause Frames Transmitted Register */
+  RoReg   GMAC_BFT64;      /**< \brief (Gmac Offset: 0x118) 64 Byte Frames Transmitted Register */
+  RoReg   GMAC_TBFT127;    /**< \brief (Gmac Offset: 0x11C) 65 to 127 Byte Frames Transmitted Register */
+  RoReg   GMAC_TBFT255;    /**< \brief (Gmac Offset: 0x120) 128 to 255 Byte Frames Transmitted Register */
+  RoReg   GMAC_TBFT511;    /**< \brief (Gmac Offset: 0x124) 256 to 511 Byte Frames Transmitted Register */
+  RoReg   GMAC_TBFT1023;   /**< \brief (Gmac Offset: 0x128) 512 to 1023 Byte Frames Transmitted Register */
+  RoReg   GMAC_TBFT1518;   /**< \brief (Gmac Offset: 0x12C) 1024 to 1518 Byte Frames Transmitted Register */
+  RoReg   GMAC_GTBFT1518;  /**< \brief (Gmac Offset: 0x130) Greater Than 1518 Byte Frames Transmitted Register */
+  RoReg   GMAC_TUR;        /**< \brief (Gmac Offset: 0x134) Transmit Under Runs Register */
+  RoReg   GMAC_SCF;        /**< \brief (Gmac Offset: 0x138) Single Collision Frames Register */
+  RoReg   GMAC_MCF;        /**< \brief (Gmac Offset: 0x13C) Multiple Collision Frames Register */
+  RoReg   GMAC_EC;         /**< \brief (Gmac Offset: 0x140) Excessive Collisions Register */
+  RoReg   GMAC_LC;         /**< \brief (Gmac Offset: 0x144) Late Collisions Register */
+  RoReg   GMAC_DTF;        /**< \brief (Gmac Offset: 0x148) Deferred Transmission Frames Register */
+  RoReg   GMAC_CSE;        /**< \brief (Gmac Offset: 0x14C) Carrier Sense Errors Register */
+  RoReg   GMAC_ORLO;       /**< \brief (Gmac Offset: 0x150) Octets Received [31:0] Received */
+  RoReg   GMAC_ORHI;       /**< \brief (Gmac Offset: 0x154) Octets Received [47:32] Received */
+  RoReg   GMAC_FR;         /**< \brief (Gmac Offset: 0x158) Frames Received Register */
+  RoReg   GMAC_BCFR;       /**< \brief (Gmac Offset: 0x15C) Broadcast Frames Received Register */
+  RoReg   GMAC_MFR;        /**< \brief (Gmac Offset: 0x160) Multicast Frames Received Register */
+  RoReg   GMAC_PFR;        /**< \brief (Gmac Offset: 0x164) Pause Frames Received Register */
+  RoReg   GMAC_BFR64;      /**< \brief (Gmac Offset: 0x168) 64 Byte Frames Received Register */
+  RoReg   GMAC_TBFR127;    /**< \brief (Gmac Offset: 0x16C) 65 to 127 Byte Frames Received Register */
+  RoReg   GMAC_TBFR255;    /**< \brief (Gmac Offset: 0x170) 128 to 255 Byte Frames Received Register */
+  RoReg   GMAC_TBFR511;    /**< \brief (Gmac Offset: 0x174) 256 to 511Byte Frames Received Register */
+  RoReg   GMAC_TBFR1023;   /**< \brief (Gmac Offset: 0x178) 512 to 1023 Byte Frames Received Register */
+  RoReg   GMAC_TBFR1518;   /**< \brief (Gmac Offset: 0x17C) 1024 to 1518 Byte Frames Received Register */
+  RoReg   GMAC_TMXBFR;     /**< \brief (Gmac Offset: 0x180) 1519 to Maximum Byte Frames Received Register */
+  RoReg   GMAC_UFR;        /**< \brief (Gmac Offset: 0x184) Undersize Frames Received Register */
+  RoReg   GMAC_OFR;        /**< \brief (Gmac Offset: 0x188) Oversize Frames Received Register */
+  RoReg   GMAC_JR;         /**< \brief (Gmac Offset: 0x18C) Jabbers Received Register */
+  RoReg   GMAC_FCSE;       /**< \brief (Gmac Offset: 0x190) Frame Check Sequence Errors Register */
+  RoReg   GMAC_LFFE;       /**< \brief (Gmac Offset: 0x194) Length Field Frame Errors Register */
+  RoReg   GMAC_RSE;        /**< \brief (Gmac Offset: 0x198) Receive Symbol Errors Register */
+  RoReg   GMAC_AE;         /**< \brief (Gmac Offset: 0x19C) Alignment Errors Register */
+  RoReg   GMAC_RRE;        /**< \brief (Gmac Offset: 0x1A0) Receive Resource Errors Register */
+  RoReg   GMAC_ROE;        /**< \brief (Gmac Offset: 0x1A4) Receive Overrun Register */
+  RoReg   GMAC_IHCE;       /**< \brief (Gmac Offset: 0x1A8) IP Header Checksum Errors Register */
+  RoReg   GMAC_TCE;        /**< \brief (Gmac Offset: 0x1AC) TCP Checksum Errors Register */
+  RoReg   GMAC_UCE;        /**< \brief (Gmac Offset: 0x1B0) UDP Checksum Errors Register */
+  RoReg   Reserved3[5];
+  RwReg   GMAC_TSSS;       /**< \brief (Gmac Offset: 0x1C8) 1588 Timer Sync Strobe Seconds Register */
+  RwReg   GMAC_TSSN;       /**< \brief (Gmac Offset: 0x1CC) 1588 Timer Sync Strobe Nanoseconds Register */
+  RwReg   GMAC_TS;         /**< \brief (Gmac Offset: 0x1D0) 1588 Timer Seconds Register */
+  RwReg   GMAC_TN;         /**< \brief (Gmac Offset: 0x1D4) 1588 Timer Nanoseconds Register */
+  WoReg   GMAC_TA;         /**< \brief (Gmac Offset: 0x1D8) 1588 Timer Adjust Register */
+  RwReg   GMAC_TI;         /**< \brief (Gmac Offset: 0x1DC) 1588 Timer Increment Register */
+  RoReg   GMAC_EFTS;       /**< \brief (Gmac Offset: 0x1E0) PTP Event Frame Transmitted Seconds */
+  RoReg   GMAC_EFTN;       /**< \brief (Gmac Offset: 0x1E4) PTP Event Frame Transmitted Nanoseconds */
+  RoReg   GMAC_EFRS;       /**< \brief (Gmac Offset: 0x1E8) PTP Event Frame Received Seconds */
+  RoReg   GMAC_EFRN;       /**< \brief (Gmac Offset: 0x1EC) PTP Event Frame Received Nanoseconds */
+  RoReg   GMAC_PEFTS;      /**< \brief (Gmac Offset: 0x1F0) PTP Peer Event Frame Transmitted Seconds */
+  RoReg   GMAC_PEFTN;      /**< \brief (Gmac Offset: 0x1F4) PTP Peer Event Frame Transmitted Nanoseconds */
+  RoReg   GMAC_PEFRS;      /**< \brief (Gmac Offset: 0x1F8) PTP Peer Event Frame Received Seconds */
+  RoReg   GMAC_PEFRN;      /**< \brief (Gmac Offset: 0x1FC) PTP Peer Event Frame Received Nanoseconds */
+  RoReg   Reserved4[128];
+  RoReg   GMAC_ISRPQ[7];   /**< \brief (Gmac Offset: 0x400) Interrupt Status Register Priority Queue */
+  RoReg   Reserved5[9];
+  RwReg   GMAC_TBQBAPQ[7]; /**< \brief (Gmac Offset: 0x440) Transmit Buffer Queue Base Address Priority Queue */
+  RoReg   Reserved6[9];
+  RwReg   GMAC_RBQBAPQ[7]; /**< \brief (Gmac Offset: 0x480) Receive Buffer Queue Base Address Priority Queue */
+  RoReg   Reserved7[1];
+  RwReg   GMAC_RBSRPQ[7];  /**< \brief (Gmac Offset: 0x4A0) Receive Buffer Size Register Priority Queue */
+  RoReg   Reserved8[17];
+  RwReg   GMAC_ST1RPQ[16]; /**< \brief (Gmac Offset: 0x500) Screening Type1 Register Priority Queue */
+  RwReg   GMAC_ST2RPQ[16]; /**< \brief (Gmac Offset: 0x540) Screening Type2 Register Priority Queue */
+  RoReg   Reserved9[32];
+  WoReg   GMAC_IERPQ[7];   /**< \brief (Gmac Offset: 0x600) Interrupt Enable Register Priority Queue */
+  RoReg   Reserved10[1];
+  WoReg   GMAC_IDRPQ[7];   /**< \brief (Gmac Offset: 0x620) Interrupt Disable Register Priority Queue */
+  RoReg   Reserved11[1];
+  RwReg   GMAC_IMRPQ[7];   /**< \brief (Gmac Offset: 0x640) Interrupt Mask Register Priority Queue */
+} Gmac;
+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */
+/* -------- GMAC_NCR : (GMAC Offset: 0x000) Network Control Register -------- */
+#define GMAC_NCR_LB (0x1u << 0) /**< \brief (GMAC_NCR) Loop Back */
+#define GMAC_NCR_LBL (0x1u << 1) /**< \brief (GMAC_NCR) Loop Back Local */
+#define GMAC_NCR_RXEN (0x1u << 2) /**< \brief (GMAC_NCR) Receive Enable */
+#define GMAC_NCR_TXEN (0x1u << 3) /**< \brief (GMAC_NCR) Transmit Enable */
+#define GMAC_NCR_MPE (0x1u << 4) /**< \brief (GMAC_NCR) Management Port Enable */
+#define GMAC_NCR_CLRSTAT (0x1u << 5) /**< \brief (GMAC_NCR) Clear Statistics Registers */
+#define GMAC_NCR_INCSTAT (0x1u << 6) /**< \brief (GMAC_NCR) Increment Statistics Registers */
+#define GMAC_NCR_WESTAT (0x1u << 7) /**< \brief (GMAC_NCR) Write Enable for Statistics Registers */
+#define GMAC_NCR_BP (0x1u << 8) /**< \brief (GMAC_NCR) Back pressure */
+#define GMAC_NCR_TSTART (0x1u << 9) /**< \brief (GMAC_NCR) Start Transmission */
+#define GMAC_NCR_THALT (0x1u << 10) /**< \brief (GMAC_NCR) Transmit Halt */
+#define GMAC_NCR_TXPF (0x1u << 11) /**< \brief (GMAC_NCR) Transmit Pause Frame */
+#define GMAC_NCR_TXZQPF (0x1u << 12) /**< \brief (GMAC_NCR) Transmit Zero Quantum Pause Frame */
+#define GMAC_NCR_RDS (0x1u << 14) /**< \brief (GMAC_NCR) Read Snapshot */
+#define GMAC_NCR_SRTSM (0x1u << 15) /**< \brief (GMAC_NCR) Store Receive Time Stamp to Memory */
+#define GMAC_NCR_ENPBPR (0x1u << 16) /**< \brief (GMAC_NCR) Enable PFC Priority-based Pause Reception */
+#define GMAC_NCR_TXPBPF (0x1u << 17) /**< \brief (GMAC_NCR) Transmit PFC Priority-based Pause Frame */
+#define GMAC_NCR_FNP (0x1u << 18) /**< \brief (GMAC_NCR) Flush Next Packet */
+/* -------- GMAC_NCFGR : (GMAC Offset: 0x004) Network Configuration Register -------- */
+#define GMAC_NCFGR_SPD (0x1u << 0) /**< \brief (GMAC_NCFGR) Speed */
+#define GMAC_NCFGR_FD (0x1u << 1) /**< \brief (GMAC_NCFGR) Full Duplex */
+#define GMAC_NCFGR_DNVLAN (0x1u << 2) /**< \brief (GMAC_NCFGR) Discard Non-VLAN FRAMES */
+#define GMAC_NCFGR_JFRAME (0x1u << 3) /**< \brief (GMAC_NCFGR) Jumbo Frame Size */
+#define GMAC_NCFGR_CAF (0x1u << 4) /**< \brief (GMAC_NCFGR) Copy All Frames */
+#define GMAC_NCFGR_NBC (0x1u << 5) /**< \brief (GMAC_NCFGR) No Broadcast */
+#define GMAC_NCFGR_MTIHEN (0x1u << 6) /**< \brief (GMAC_NCFGR) Multicast Hash Enable */
+#define GMAC_NCFGR_UNIHEN (0x1u << 7) /**< \brief (GMAC_NCFGR) Unicast Hash Enable */
+#define GMAC_NCFGR_MAXFS (0x1u << 8) /**< \brief (GMAC_NCFGR) 1536 Maximum Frame Size */
+#define GMAC_NCFGR_GBE (0x1u << 10) /**< \brief (GMAC_NCFGR) Gigabit Mode Enable */
+#define GMAC_NCFGR_PIS (0x1u << 11) /**< \brief (GMAC_NCFGR) Physical Interface Select */
+#define GMAC_NCFGR_RTY (0x1u << 12) /**< \brief (GMAC_NCFGR) Retry Test */
+#define GMAC_NCFGR_PEN (0x1u << 13) /**< \brief (GMAC_NCFGR) Pause Enable */
+#define GMAC_NCFGR_RXBUFO_Pos 14
+#define GMAC_NCFGR_RXBUFO_Msk (0x3u << GMAC_NCFGR_RXBUFO_Pos) /**< \brief (GMAC_NCFGR) Receive Buffer Offset */
+#define GMAC_NCFGR_RXBUFO(value) ((GMAC_NCFGR_RXBUFO_Msk & ((value) << GMAC_NCFGR_RXBUFO_Pos)))
+#define GMAC_NCFGR_LFERD (0x1u << 16) /**< \brief (GMAC_NCFGR) Length Field Error Frame Discard */
+#define GMAC_NCFGR_RFCS (0x1u << 17) /**< \brief (GMAC_NCFGR) Remove FCS */
+#define GMAC_NCFGR_CLK_Pos 18
+#define GMAC_NCFGR_CLK_Msk (0x7u << GMAC_NCFGR_CLK_Pos) /**< \brief (GMAC_NCFGR) MDC CLock Division */
+#define   GMAC_NCFGR_CLK_MCK_8 (0x0u << 18) /**< \brief (GMAC_NCFGR) MCK divided by 8 (MCK up to 20 MHz) */
+#define   GMAC_NCFGR_CLK_MCK_16 (0x1u << 18) /**< \brief (GMAC_NCFGR) MCK divided by 16 (MCK up to 40 MHz) */
+#define   GMAC_NCFGR_CLK_MCK_32 (0x2u << 18) /**< \brief (GMAC_NCFGR) MCK divided by 32 (MCK up to 80 MHz) */
+#define   GMAC_NCFGR_CLK_MCK_48 (0x3u << 18) /**< \brief (GMAC_NCFGR) MCK divided by 48 (MCK up to 120MHz) */
+#define   GMAC_NCFGR_CLK_MCK_64 (0x4u << 18) /**< \brief (GMAC_NCFGR) MCK divided by 64 (MCK up to 160 MHz) */
+#define   GMAC_NCFGR_CLK_MCK_96 (0x5u << 18) /**< \brief (GMAC_NCFGR) MCK divided by 96 (MCK up to 240 MHz) */
+#define   GMAC_NCFGR_CLK_MCK_128 (0x6u << 18) /**< \brief (GMAC_NCFGR) MCK divided by 128 (MCK up to 320 MHz) */
+#define   GMAC_NCFGR_CLK_MCK_224 (0x7u << 18) /**< \brief (GMAC_NCFGR) MCK divided by 224 (MCK up to 540 MHz) */
+#define GMAC_NCFGR_DBW_Pos 21
+#define GMAC_NCFGR_DBW_Msk (0x3u << GMAC_NCFGR_DBW_Pos) /**< \brief (GMAC_NCFGR) Data Bus Width */
+#define   GMAC_NCFGR_DBW_DBW32 (0x0u << 21) /**< \brief (GMAC_NCFGR) 32-bit data bus width */
+#define   GMAC_NCFGR_DBW_DBW64 (0x1u << 21) /**< \brief (GMAC_NCFGR) 64-bit data bus width */
+#define GMAC_NCFGR_DCPF (0x1u << 23) /**< \brief (GMAC_NCFGR) Disable Copy of Pause Frames */
+#define GMAC_NCFGR_RXCOEN (0x1u << 24) /**< \brief (GMAC_NCFGR) Receive Checksum Offload Enable */
+#define GMAC_NCFGR_EFRHD (0x1u << 25) /**< \brief (GMAC_NCFGR) Enable Frames Received in Half Duplex */
+#define GMAC_NCFGR_IRXFCS (0x1u << 26) /**< \brief (GMAC_NCFGR) Ignore RX FCS */
+#define GMAC_NCFGR_IPGSEN (0x1u << 28) /**< \brief (GMAC_NCFGR) IP Stretch Enable */
+#define GMAC_NCFGR_RXBP (0x1u << 29) /**< \brief (GMAC_NCFGR) Receive Bad Preamble */
+#define GMAC_NCFGR_IRXER (0x1u << 30) /**< \brief (GMAC_NCFGR) Ignore IPG rx_er */
+/* -------- GMAC_NSR : (GMAC Offset: 0x008) Network Status Register -------- */
+#define GMAC_NSR_MDIO (0x1u << 1) /**< \brief (GMAC_NSR) MDIO Input Status */
+#define GMAC_NSR_IDLE (0x1u << 2) /**< \brief (GMAC_NSR) PHY Management Logic Idle */
+/* -------- GMAC_UR : (GMAC Offset: 0x00C) User Register -------- */
+#define GMAC_UR_RGMII (0x1u << 0) /**< \brief (GMAC_UR) RGMII Mode */
+#define GMAC_UR_HDFC (0x1u << 6) /**< \brief (GMAC_UR) Half Duplex Flow Control */
+#define GMAC_UR_BPDG (0x1u << 7) /**< \brief (GMAC_UR) BPDG Bypass Deglitchers */
+/* -------- GMAC_DCFGR : (GMAC Offset: 0x010) DMA Configuration Register -------- */
+#define GMAC_DCFGR_FBLDO_Pos 0
+#define GMAC_DCFGR_FBLDO_Msk (0x1fu << GMAC_DCFGR_FBLDO_Pos) /**< \brief (GMAC_DCFGR) Fixed Burst Length for DMA Data Operations: */
+#define   GMAC_DCFGR_FBLDO_SINGLE (0x1u << 0) /**< \brief (GMAC_DCFGR) 00001: Always use SINGLE AHB bursts */
+#define   GMAC_DCFGR_FBLDO_INCR4 (0x4u << 0) /**< \brief (GMAC_DCFGR) 001xx: Attempt to use INCR4 AHB bursts (Default) */
+#define   GMAC_DCFGR_FBLDO_INCR8 (0x8u << 0) /**< \brief (GMAC_DCFGR) 01xxx: Attempt to use INCR8 AHB bursts */
+#define   GMAC_DCFGR_FBLDO_INCR16 (0x10u << 0) /**< \brief (GMAC_DCFGR) 1xxxx: Attempt to use INCR16 AHB bursts */
+#define GMAC_DCFGR_ESMA (0x1u << 6) /**< \brief (GMAC_DCFGR) Endian Swap Mode Enable for Management Descriptor Accesses */
+#define GMAC_DCFGR_ESPA (0x1u << 7) /**< \brief (GMAC_DCFGR) Endian Swap Mode Enable for Packet Data Accesses */
+#define GMAC_DCFGR_RXBMS_Pos 8
+#define GMAC_DCFGR_RXBMS_Msk (0x3u << GMAC_DCFGR_RXBMS_Pos) /**< \brief (GMAC_DCFGR) Receiver Packet Buffer Memory Size Select */
+#define   GMAC_DCFGR_RXBMS_EIGHTH (0x0u << 8) /**< \brief (GMAC_DCFGR) 1 Kbyte Memory Size */
+#define   GMAC_DCFGR_RXBMS_QUARTER (0x1u << 8) /**< \brief (GMAC_DCFGR) 2 Kbytes Memory Size */
+#define   GMAC_DCFGR_RXBMS_HALF (0x2u << 8) /**< \brief (GMAC_DCFGR) 4 Kbytes Memory Size */
+#define   GMAC_DCFGR_RXBMS_FULL (0x3u << 8) /**< \brief (GMAC_DCFGR) 8 Kbytes Memory Size */
+#define GMAC_DCFGR_TXPBMS (0x1u << 10) /**< \brief (GMAC_DCFGR) Transmitter Packet Buffer Memory Size Select */
+#define GMAC_DCFGR_TXCOEN (0x1u << 11) /**< \brief (GMAC_DCFGR) Transmitter Checksum Generation Offload Enable */
+#define GMAC_DCFGR_DRBS_Pos 16
+#define GMAC_DCFGR_DRBS_Msk (0xffu << GMAC_DCFGR_DRBS_Pos) /**< \brief (GMAC_DCFGR) DMA Receive Buffer Size */
+#define GMAC_DCFGR_DRBS(value) ((GMAC_DCFGR_DRBS_Msk & ((value) << GMAC_DCFGR_DRBS_Pos)))
+#define GMAC_DCFGR_DDRP (0x1u << 24) /**< \brief (GMAC_DCFGR) DMA Discard Receive Packets */
+/* -------- GMAC_TSR : (GMAC Offset: 0x014) Transmit Status Register -------- */
+#define GMAC_TSR_UBR (0x1u << 0) /**< \brief (GMAC_TSR) Used Bit Read */
+#define GMAC_TSR_COL (0x1u << 1) /**< \brief (GMAC_TSR) Collision Occurred */
+#define GMAC_TSR_RLE (0x1u << 2) /**< \brief (GMAC_TSR) Retry Limit Exceeded */
+#define GMAC_TSR_TXGO (0x1u << 3) /**< \brief (GMAC_TSR) Transmit Go */
+#define GMAC_TSR_TFC (0x1u << 4) /**< \brief (GMAC_TSR) Transmit Frame Corruption due to AHB error */
+#define GMAC_TSR_TXCOMP (0x1u << 5) /**< \brief (GMAC_TSR) Transmit Complete */
+#define GMAC_TSR_UND (0x1u << 6) /**< \brief (GMAC_TSR) Transmit Under Run */
+#define GMAC_TSR_LCO (0x1u << 7) /**< \brief (GMAC_TSR) Late Collision Occurred */
+#define GMAC_TSR_HRESP (0x1u << 8) /**< \brief (GMAC_TSR) HRESP Not OK */
+/* -------- GMAC_RBQB : (GMAC Offset: 0x018) Receive Buffer Queue Base Address -------- */
+#define GMAC_RBQB_ADDR_Pos 2
+#define GMAC_RBQB_ADDR_Msk (0x3fffffffu << GMAC_RBQB_ADDR_Pos) /**< \brief (GMAC_RBQB) Receive buffer queue base address */
+#define GMAC_RBQB_ADDR(value) ((GMAC_RBQB_ADDR_Msk & ((value) << GMAC_RBQB_ADDR_Pos)))
+/* -------- GMAC_TBQB : (GMAC Offset: 0x01C) Transmit Buffer Queue Base Address -------- */
+#define GMAC_TBQB_ADDR_Pos 2
+#define GMAC_TBQB_ADDR_Msk (0x3fffffffu << GMAC_TBQB_ADDR_Pos) /**< \brief (GMAC_TBQB) Transmit Buffer Queue Base Address */
+#define GMAC_TBQB_ADDR(value) ((GMAC_TBQB_ADDR_Msk & ((value) << GMAC_TBQB_ADDR_Pos)))
+/* -------- GMAC_RSR : (GMAC Offset: 0x020) Receive Status Register -------- */
+#define GMAC_RSR_BNA (0x1u << 0) /**< \brief (GMAC_RSR) Buffer Not Available */
+#define GMAC_RSR_REC (0x1u << 1) /**< \brief (GMAC_RSR) Frame Received */
+#define GMAC_RSR_RXOVR (0x1u << 2) /**< \brief (GMAC_RSR) Receive Overrun */
+#define GMAC_RSR_HNO (0x1u << 3) /**< \brief (GMAC_RSR) HRESP Not OK */
+/* -------- GMAC_ISR : (GMAC Offset: 0x024) Interrupt Status Register -------- */
+#define GMAC_ISR_MFS (0x1u << 0) /**< \brief (GMAC_ISR) Management Frame Sent */
+#define GMAC_ISR_RCOMP (0x1u << 1) /**< \brief (GMAC_ISR) Receive Complete */
+#define GMAC_ISR_RXUBR (0x1u << 2) /**< \brief (GMAC_ISR) RX Used Bit Read */
+#define GMAC_ISR_TXUBR (0x1u << 3) /**< \brief (GMAC_ISR) TX Used Bit Read */
+#define GMAC_ISR_TUR (0x1u << 4) /**< \brief (GMAC_ISR) Transmit Under Run */
+#define GMAC_ISR_RLEX (0x1u << 5) /**< \brief (GMAC_ISR) Retry Limit Exceeded or Late Collision */
+#define GMAC_ISR_TFC (0x1u << 6) /**< \brief (GMAC_ISR) Transmit Frame Corruption due to AHB error */
+#define GMAC_ISR_TCOMP (0x1u << 7) /**< \brief (GMAC_ISR) Transmit Complete */
+#define GMAC_ISR_ROVR (0x1u << 10) /**< \brief (GMAC_ISR) Receive Overrun */
+#define GMAC_ISR_HRESP (0x1u << 11) /**< \brief (GMAC_ISR) HRESP Not OK */
+#define GMAC_ISR_PFNZ (0x1u << 12) /**< \brief (GMAC_ISR) Pause Frame with Non-zero Pause Quantum Received */
+#define GMAC_ISR_PTZ (0x1u << 13) /**< \brief (GMAC_ISR) Pause Time Zero */
+#define GMAC_ISR_PFTR (0x1u << 14) /**< \brief (GMAC_ISR) Pause Frame Transmitted */
+#define GMAC_ISR_EXINT (0x1u << 15) /**< \brief (GMAC_ISR) External Interrupt */
+#define GMAC_ISR_DRQFR (0x1u << 18) /**< \brief (GMAC_ISR) PTP Delay Request Frame Received */
+#define GMAC_ISR_SFR (0x1u << 19) /**< \brief (GMAC_ISR) PTP Sync Frame Received */
+#define GMAC_ISR_DRQFT (0x1u << 20) /**< \brief (GMAC_ISR) PTP Delay Request Frame Transmitted */
+#define GMAC_ISR_SFT (0x1u << 21) /**< \brief (GMAC_ISR) PTP Sync Frame Transmitted */
+#define GMAC_ISR_PDRQFR (0x1u << 22) /**< \brief (GMAC_ISR) PDelay Request Frame Received */
+#define GMAC_ISR_PDRSFR (0x1u << 23) /**< \brief (GMAC_ISR) PDelay Response Frame Received */
+#define GMAC_ISR_PDRQFT (0x1u << 24) /**< \brief (GMAC_ISR) PDelay Request Frame Transmitted */
+#define GMAC_ISR_PDRSFT (0x1u << 25) /**< \brief (GMAC_ISR) PDelay Response Frame Transmitted */
+#define GMAC_ISR_SRI (0x1u << 26) /**< \brief (GMAC_ISR) TSU Seconds Register Increment */
+#define GMAC_ISR_WOL (0x1u << 28) /**< \brief (GMAC_ISR) Wake On LAN */
+/* -------- GMAC_IER : (GMAC Offset: 0x028) Interrupt Enable Register -------- */
+#define GMAC_IER_MFS (0x1u << 0) /**< \brief (GMAC_IER) Management Frame Sent */
+#define GMAC_IER_RCOMP (0x1u << 1) /**< \brief (GMAC_IER) Receive Complete */
+#define GMAC_IER_RXUBR (0x1u << 2) /**< \brief (GMAC_IER) RX Used Bit Read */
+#define GMAC_IER_TXUBR (0x1u << 3) /**< \brief (GMAC_IER) TX Used Bit Read */
+#define GMAC_IER_TUR (0x1u << 4) /**< \brief (GMAC_IER) Transmit Under Run */
+#define GMAC_IER_RLEX (0x1u << 5) /**< \brief (GMAC_IER) Retry Limit Exceeded or Late Collision */
+#define GMAC_IER_TFC (0x1u << 6) /**< \brief (GMAC_IER) Transmit Frame Corruption due to AHB error */
+#define GMAC_IER_TCOMP (0x1u << 7) /**< \brief (GMAC_IER) Transmit Complete */
+#define GMAC_IER_ROVR (0x1u << 10) /**< \brief (GMAC_IER) Receive Overrun */
+#define GMAC_IER_HRESP (0x1u << 11) /**< \brief (GMAC_IER) HRESP Not OK */
+#define GMAC_IER_PFNZ (0x1u << 12) /**< \brief (GMAC_IER) Pause Frame with Non-zero Pause Quantum Received */
+#define GMAC_IER_PTZ (0x1u << 13) /**< \brief (GMAC_IER) Pause Time Zero */
+#define GMAC_IER_PFTR (0x1u << 14) /**< \brief (GMAC_IER) Pause Frame Transmitted */
+#define GMAC_IER_EXINT (0x1u << 15) /**< \brief (GMAC_IER) External Interrupt */
+#define GMAC_IER_DRQFR (0x1u << 18) /**< \brief (GMAC_IER) PTP Delay Request Frame Received */
+#define GMAC_IER_SFR (0x1u << 19) /**< \brief (GMAC_IER) PTP Sync Frame Received */
+#define GMAC_IER_DRQFT (0x1u << 20) /**< \brief (GMAC_IER) PTP Delay Request Frame Transmitted */
+#define GMAC_IER_SFT (0x1u << 21) /**< \brief (GMAC_IER) PTP Sync Frame Transmitted */
+#define GMAC_IER_PDRQFR (0x1u << 22) /**< \brief (GMAC_IER) PDelay Request Frame Received */
+#define GMAC_IER_PDRSFR (0x1u << 23) /**< \brief (GMAC_IER) PDelay Response Frame Received */
+#define GMAC_IER_PDRQFT (0x1u << 24) /**< \brief (GMAC_IER) PDelay Request Frame Transmitted */
+#define GMAC_IER_PDRSFT (0x1u << 25) /**< \brief (GMAC_IER) PDelay Response Frame Transmitted */
+#define GMAC_IER_SRI (0x1u << 26) /**< \brief (GMAC_IER) TSU Seconds Register Increment */
+#define GMAC_IER_WOL (0x1u << 28) /**< \brief (GMAC_IER) Wake On LAN */
+/* -------- GMAC_IDR : (GMAC Offset: 0x02C) Interrupt Disable Register -------- */
+#define GMAC_IDR_MFS (0x1u << 0) /**< \brief (GMAC_IDR) Management Frame Sent */
+#define GMAC_IDR_RCOMP (0x1u << 1) /**< \brief (GMAC_IDR) Receive Complete */
+#define GMAC_IDR_RXUBR (0x1u << 2) /**< \brief (GMAC_IDR) RX Used Bit Read */
+#define GMAC_IDR_TXUBR (0x1u << 3) /**< \brief (GMAC_IDR) TX Used Bit Read */
+#define GMAC_IDR_TUR (0x1u << 4) /**< \brief (GMAC_IDR) Transmit Under Run */
+#define GMAC_IDR_RLEX (0x1u << 5) /**< \brief (GMAC_IDR) Retry Limit Exceeded or Late Collision */
+#define GMAC_IDR_TFC (0x1u << 6) /**< \brief (GMAC_IDR) Transmit Frame Corruption due to AHB error */
+#define GMAC_IDR_TCOMP (0x1u << 7) /**< \brief (GMAC_IDR) Transmit Complete */
+#define GMAC_IDR_ROVR (0x1u << 10) /**< \brief (GMAC_IDR) Receive Overrun */
+#define GMAC_IDR_HRESP (0x1u << 11) /**< \brief (GMAC_IDR) HRESP Not OK */
+#define GMAC_IDR_PFNZ (0x1u << 12) /**< \brief (GMAC_IDR) Pause Frame with Non-zero Pause Quantum Received */
+#define GMAC_IDR_PTZ (0x1u << 13) /**< \brief (GMAC_IDR) Pause Time Zero */
+#define GMAC_IDR_PFTR (0x1u << 14) /**< \brief (GMAC_IDR) Pause Frame Transmitted */
+#define GMAC_IDR_EXINT (0x1u << 15) /**< \brief (GMAC_IDR) External Interrupt */
+#define GMAC_IDR_DRQFR (0x1u << 18) /**< \brief (GMAC_IDR) PTP Delay Request Frame Received */
+#define GMAC_IDR_SFR (0x1u << 19) /**< \brief (GMAC_IDR) PTP Sync Frame Received */
+#define GMAC_IDR_DRQFT (0x1u << 20) /**< \brief (GMAC_IDR) PTP Delay Request Frame Transmitted */
+#define GMAC_IDR_SFT (0x1u << 21) /**< \brief (GMAC_IDR) PTP Sync Frame Transmitted */
+#define GMAC_IDR_PDRQFR (0x1u << 22) /**< \brief (GMAC_IDR) PDelay Request Frame Received */
+#define GMAC_IDR_PDRSFR (0x1u << 23) /**< \brief (GMAC_IDR) PDelay Response Frame Received */
+#define GMAC_IDR_PDRQFT (0x1u << 24) /**< \brief (GMAC_IDR) PDelay Request Frame Transmitted */
+#define GMAC_IDR_PDRSFT (0x1u << 25) /**< \brief (GMAC_IDR) PDelay Response Frame Transmitted */
+#define GMAC_IDR_SRI (0x1u << 26) /**< \brief (GMAC_IDR) TSU Seconds Register Increment */
+#define GMAC_IDR_WOL (0x1u << 28) /**< \brief (GMAC_IDR) Wake On LAN */
+/* -------- GMAC_IMR : (GMAC Offset: 0x030) Interrupt Mask Register -------- */
+#define GMAC_IMR_MFS (0x1u << 0) /**< \brief (GMAC_IMR) Management Frame Sent */
+#define GMAC_IMR_RCOMP (0x1u << 1) /**< \brief (GMAC_IMR) Receive Complete */
+#define GMAC_IMR_RXUBR (0x1u << 2) /**< \brief (GMAC_IMR) RX Used Bit Read */
+#define GMAC_IMR_TXUBR (0x1u << 3) /**< \brief (GMAC_IMR) TX Used Bit Read */
+#define GMAC_IMR_TUR (0x1u << 4) /**< \brief (GMAC_IMR) Transmit Under Run */
+#define GMAC_IMR_RLEX (0x1u << 5) /**< \brief (GMAC_IMR) Retry Limit Exceeded or Late Collision */
+#define GMAC_IMR_TFC (0x1u << 6) /**< \brief (GMAC_IMR) Transmit Frame Corruption due to AHB error */
+#define GMAC_IMR_TCOMP (0x1u << 7) /**< \brief (GMAC_IMR) Transmit Complete */
+#define GMAC_IMR_ROVR (0x1u << 10) /**< \brief (GMAC_IMR) Receive Overrun */
+#define GMAC_IMR_HRESP (0x1u << 11) /**< \brief (GMAC_IMR) HRESP Not OK */
+#define GMAC_IMR_PFNZ (0x1u << 12) /**< \brief (GMAC_IMR) Pause Frame with Non-zero Pause Quantum Received */
+#define GMAC_IMR_PTZ (0x1u << 13) /**< \brief (GMAC_IMR) Pause Time Zero */
+#define GMAC_IMR_PFTR (0x1u << 14) /**< \brief (GMAC_IMR) Pause Frame Transmitted */
+#define GMAC_IMR_EXINT (0x1u << 15) /**< \brief (GMAC_IMR) External Interrupt */
+#define GMAC_IMR_DRQFR (0x1u << 18) /**< \brief (GMAC_IMR) PTP Delay Request Frame Received */
+#define GMAC_IMR_SFR (0x1u << 19) /**< \brief (GMAC_IMR) PTP Sync Frame Received */
+#define GMAC_IMR_DRQFT (0x1u << 20) /**< \brief (GMAC_IMR) PTP Delay Request Frame Transmitted */
+#define GMAC_IMR_SFT (0x1u << 21) /**< \brief (GMAC_IMR) PTP Sync Frame Transmitted */
+#define GMAC_IMR_PDRQFR (0x1u << 22) /**< \brief (GMAC_IMR) PDelay Request Frame Received */
+#define GMAC_IMR_PDRSFR (0x1u << 23) /**< \brief (GMAC_IMR) PDelay Response Frame Received */
+#define GMAC_IMR_PDRQFT (0x1u << 24) /**< \brief (GMAC_IMR) PDelay Request Frame Transmitted */
+#define GMAC_IMR_PDRSFT (0x1u << 25) /**< \brief (GMAC_IMR) PDelay Response Frame Transmitted */
+/* -------- GMAC_MAN : (GMAC Offset: 0x034) PHY Maintenance Register -------- */
+#define GMAC_MAN_DATA_Pos 0
+#define GMAC_MAN_DATA_Msk (0xffffu << GMAC_MAN_DATA_Pos) /**< \brief (GMAC_MAN) PHY Data */
+#define GMAC_MAN_DATA(value) ((GMAC_MAN_DATA_Msk & ((value) << GMAC_MAN_DATA_Pos)))
+#define GMAC_MAN_WTN_Pos 16
+#define GMAC_MAN_WTN_Msk (0x3u << GMAC_MAN_WTN_Pos) /**< \brief (GMAC_MAN) Write Ten */
+#define GMAC_MAN_WTN(value) ((GMAC_MAN_WTN_Msk & ((value) << GMAC_MAN_WTN_Pos)))
+#define GMAC_MAN_REGA_Pos 18
+#define GMAC_MAN_REGA_Msk (0x1fu << GMAC_MAN_REGA_Pos) /**< \brief (GMAC_MAN) Register Address */
+#define GMAC_MAN_REGA(value) ((GMAC_MAN_REGA_Msk & ((value) << GMAC_MAN_REGA_Pos)))
+#define GMAC_MAN_PHYA_Pos 23
+#define GMAC_MAN_PHYA_Msk (0x1fu << GMAC_MAN_PHYA_Pos) /**< \brief (GMAC_MAN) PHY Address */
+#define GMAC_MAN_PHYA(value) ((GMAC_MAN_PHYA_Msk & ((value) << GMAC_MAN_PHYA_Pos)))
+#define GMAC_MAN_OP_Pos 28
+#define GMAC_MAN_OP_Msk (0x3u << GMAC_MAN_OP_Pos) /**< \brief (GMAC_MAN) Operation */
+#define GMAC_MAN_OP(value) ((GMAC_MAN_OP_Msk & ((value) << GMAC_MAN_OP_Pos)))
+#define GMAC_MAN_CLTTO (0x1u << 30) /**< \brief (GMAC_MAN) Clause 22 Operation */
+#define GMAC_MAN_WZO (0x1u << 31) /**< \brief (GMAC_MAN) Write ZERO */
+/* -------- GMAC_RPQ : (GMAC Offset: 0x038) Received Pause Quantum Register -------- */
+#define GMAC_RPQ_RPQ_Pos 0
+#define GMAC_RPQ_RPQ_Msk (0xffffu << GMAC_RPQ_RPQ_Pos) /**< \brief (GMAC_RPQ) Received Pause Quantum */
+/* -------- GMAC_TPQ : (GMAC Offset: 0x03C) Transmit Pause Quantum Register -------- */
+#define GMAC_TPQ_TPQ_Pos 0
+#define GMAC_TPQ_TPQ_Msk (0xffffu << GMAC_TPQ_TPQ_Pos) /**< \brief (GMAC_TPQ) Transmit Pause Quantum */
+#define GMAC_TPQ_TPQ(value) ((GMAC_TPQ_TPQ_Msk & ((value) << GMAC_TPQ_TPQ_Pos)))
+/* -------- GMAC_TPSF : (GMAC Offset: 0x040) TX Partial Store and Forward Register -------- */
+#define GMAC_TPSF_TPB1ADR_Pos 0
+#define GMAC_TPSF_TPB1ADR_Msk (0xfffu << GMAC_TPSF_TPB1ADR_Pos) /**< \brief (GMAC_TPSF) tx_pbuf_addr-1:0 */
+#define GMAC_TPSF_TPB1ADR(value) ((GMAC_TPSF_TPB1ADR_Msk & ((value) << GMAC_TPSF_TPB1ADR_Pos)))
+#define GMAC_TPSF_ENTXP (0x1u << 31) /**< \brief (GMAC_TPSF) Enable TX Partial Store and Forward Operation */
+/* -------- GMAC_RPSF : (GMAC Offset: 0x044) RX Partial Store and Forward Register -------- */
+#define GMAC_RPSF_RPB1ADR_Pos 0
+#define GMAC_RPSF_RPB1ADR_Msk (0xfffu << GMAC_RPSF_RPB1ADR_Pos) /**< \brief (GMAC_RPSF) rx_pbuf_addr-1:0 */
+#define GMAC_RPSF_RPB1ADR(value) ((GMAC_RPSF_RPB1ADR_Msk & ((value) << GMAC_RPSF_RPB1ADR_Pos)))
+#define GMAC_RPSF_ENRXP (0x1u << 31) /**< \brief (GMAC_RPSF) Enable RX Partial Store and Forward Operation */
+/* -------- GMAC_HRB : (GMAC Offset: 0x080) Hash Register Bottom [31:0] -------- */
+#define GMAC_HRB_ADDR_Pos 0
+#define GMAC_HRB_ADDR_Msk (0xffffffffu << GMAC_HRB_ADDR_Pos) /**< \brief (GMAC_HRB) Hash Address */
+#define GMAC_HRB_ADDR(value) ((GMAC_HRB_ADDR_Msk & ((value) << GMAC_HRB_ADDR_Pos)))
+/* -------- GMAC_HRT : (GMAC Offset: 0x084) Hash Register Top [63:32] -------- */
+#define GMAC_HRT_ADDR_Pos 0
+#define GMAC_HRT_ADDR_Msk (0xffffffffu << GMAC_HRT_ADDR_Pos) /**< \brief (GMAC_HRT) Hash Address */
+#define GMAC_HRT_ADDR(value) ((GMAC_HRT_ADDR_Msk & ((value) << GMAC_HRT_ADDR_Pos)))
+/* -------- GMAC_SAB1 : (GMAC Offset: 0x088) Specific Address 1 Bottom [31:0] Register -------- */
+#define GMAC_SAB1_ADDR_Pos 0
+#define GMAC_SAB1_ADDR_Msk (0xffffffffu << GMAC_SAB1_ADDR_Pos) /**< \brief (GMAC_SAB1) Specific Address 1 */
+#define GMAC_SAB1_ADDR(value) ((GMAC_SAB1_ADDR_Msk & ((value) << GMAC_SAB1_ADDR_Pos)))
+/* -------- GMAC_SAT1 : (GMAC Offset: 0x08C) Specific Address 1 Top [47:32] Register -------- */
+#define GMAC_SAT1_ADDR_Pos 0
+#define GMAC_SAT1_ADDR_Msk (0xffffu << GMAC_SAT1_ADDR_Pos) /**< \brief (GMAC_SAT1) Specific Address 1 */
+#define GMAC_SAT1_ADDR(value) ((GMAC_SAT1_ADDR_Msk & ((value) << GMAC_SAT1_ADDR_Pos)))
+/* -------- GMAC_SAB2 : (GMAC Offset: 0x090) Specific Address 2 Bottom [31:0] Register -------- */
+#define GMAC_SAB2_ADDR_Pos 0
+#define GMAC_SAB2_ADDR_Msk (0xffffffffu << GMAC_SAB2_ADDR_Pos) /**< \brief (GMAC_SAB2) Specific Address 2 */
+#define GMAC_SAB2_ADDR(value) ((GMAC_SAB2_ADDR_Msk & ((value) << GMAC_SAB2_ADDR_Pos)))
+/* -------- GMAC_SAT2 : (GMAC Offset: 0x094) Specific Address 2 Top [47:32] Register -------- */
+#define GMAC_SAT2_ADDR_Pos 0
+#define GMAC_SAT2_ADDR_Msk (0xffffu << GMAC_SAT2_ADDR_Pos) /**< \brief (GMAC_SAT2) Specific Address 2 */
+#define GMAC_SAT2_ADDR(value) ((GMAC_SAT2_ADDR_Msk & ((value) << GMAC_SAT2_ADDR_Pos)))
+/* -------- GMAC_SAB3 : (GMAC Offset: 0x098) Specific Address 3 Bottom [31:0] Register -------- */
+#define GMAC_SAB3_ADDR_Pos 0
+#define GMAC_SAB3_ADDR_Msk (0xffffffffu << GMAC_SAB3_ADDR_Pos) /**< \brief (GMAC_SAB3) Specific Address 3 */
+#define GMAC_SAB3_ADDR(value) ((GMAC_SAB3_ADDR_Msk & ((value) << GMAC_SAB3_ADDR_Pos)))
+/* -------- GMAC_SAT3 : (GMAC Offset: 0x09C) Specific Address 3 Top [47:32] Register -------- */
+#define GMAC_SAT3_ADDR_Pos 0
+#define GMAC_SAT3_ADDR_Msk (0xffffu << GMAC_SAT3_ADDR_Pos) /**< \brief (GMAC_SAT3) Specific Address 3 */
+#define GMAC_SAT3_ADDR(value) ((GMAC_SAT3_ADDR_Msk & ((value) << GMAC_SAT3_ADDR_Pos)))
+/* -------- GMAC_SAB4 : (GMAC Offset: 0x0A0) Specific Address 4 Bottom [31:0] Register -------- */
+#define GMAC_SAB4_ADDR_Pos 0
+#define GMAC_SAB4_ADDR_Msk (0xffffffffu << GMAC_SAB4_ADDR_Pos) /**< \brief (GMAC_SAB4) Specific Address 4 */
+#define GMAC_SAB4_ADDR(value) ((GMAC_SAB4_ADDR_Msk & ((value) << GMAC_SAB4_ADDR_Pos)))
+/* -------- GMAC_SAT4 : (GMAC Offset: 0x0A4) Specific Address 4 Top [47:32] Register -------- */
+#define GMAC_SAT4_ADDR_Pos 0
+#define GMAC_SAT4_ADDR_Msk (0xffffu << GMAC_SAT4_ADDR_Pos) /**< \brief (GMAC_SAT4) Specific Address 4 */
+#define GMAC_SAT4_ADDR(value) ((GMAC_SAT4_ADDR_Msk & ((value) << GMAC_SAT4_ADDR_Pos)))
+/* -------- GMAC_TIDM[4] : (GMAC Offset: 0x0A8) Type ID Match 1 Register -------- */
+#define GMAC_TIDM_TID_Pos 0
+#define GMAC_TIDM_TID_Msk (0xffffu << GMAC_TIDM_TID_Pos) /**< \brief (GMAC_TIDM[4]) Type ID Match 1 */
+#define GMAC_TIDM_TID(value) ((GMAC_TIDM_TID_Msk & ((value) << GMAC_TIDM_TID_Pos)))
+/* -------- GMAC_WOL : (GMAC Offset: 0x0B8) Wake on LAN Register -------- */
+#define GMAC_WOL_IP_Pos 0
+#define GMAC_WOL_IP_Msk (0xffffu << GMAC_WOL_IP_Pos) /**< \brief (GMAC_WOL) ARP Request IP Address */
+#define GMAC_WOL_IP(value) ((GMAC_WOL_IP_Msk & ((value) << GMAC_WOL_IP_Pos)))
+#define GMAC_WOL_MAG (0x1u << 16) /**< \brief (GMAC_WOL) Magic Packet Event Enable */
+#define GMAC_WOL_ARP (0x1u << 17) /**< \brief (GMAC_WOL) ARP Request IP Address */
+#define GMAC_WOL_SA1 (0x1u << 18) /**< \brief (GMAC_WOL) Specific Address Register 1 Event Enable */
+#define GMAC_WOL_MTI (0x1u << 19) /**< \brief (GMAC_WOL) Multicast Hash Event Enable */
+/* -------- GMAC_IPGS : (GMAC Offset: 0x0BC) IPG Stretch Register -------- */
+#define GMAC_IPGS_FL_Pos 0
+#define GMAC_IPGS_FL_Msk (0xffffu << GMAC_IPGS_FL_Pos) /**< \brief (GMAC_IPGS) Frame Length */
+#define GMAC_IPGS_FL(value) ((GMAC_IPGS_FL_Msk & ((value) << GMAC_IPGS_FL_Pos)))
+/* -------- GMAC_SVLAN : (GMAC Offset: 0x0C0) Stacked VLAN Register -------- */
+#define GMAC_SVLAN_VLAN_TYPE_Pos 0
+#define GMAC_SVLAN_VLAN_TYPE_Msk (0xffffu << GMAC_SVLAN_VLAN_TYPE_Pos) /**< \brief (GMAC_SVLAN) User Defined VLAN_TYPE Field */
+#define GMAC_SVLAN_VLAN_TYPE(value) ((GMAC_SVLAN_VLAN_TYPE_Msk & ((value) << GMAC_SVLAN_VLAN_TYPE_Pos)))
+#define GMAC_SVLAN_ESVLAN (0x1u << 31) /**< \brief (GMAC_SVLAN) Enable Stacked VLAN Processing Mode */
+/* -------- GMAC_TPFCP : (GMAC Offset: 0x0C4) Transmit PFC Pause Register -------- */
+#define GMAC_TPFCP_PEV_Pos 0
+#define GMAC_TPFCP_PEV_Msk (0xffu << GMAC_TPFCP_PEV_Pos) /**< \brief (GMAC_TPFCP) Priority Enable Vector */
+#define GMAC_TPFCP_PEV(value) ((GMAC_TPFCP_PEV_Msk & ((value) << GMAC_TPFCP_PEV_Pos)))
+#define GMAC_TPFCP_PQ_Pos 8
+#define GMAC_TPFCP_PQ_Msk (0xffu << GMAC_TPFCP_PQ_Pos) /**< \brief (GMAC_TPFCP) Pause Quantum */
+#define GMAC_TPFCP_PQ(value) ((GMAC_TPFCP_PQ_Msk & ((value) << GMAC_TPFCP_PQ_Pos)))
+/* -------- GMAC_SAMB1 : (GMAC Offset: 0x0C8) Specific Address 1 Mask Bottom [31:0] Register -------- */
+#define GMAC_SAMB1_ADDR_Pos 0
+#define GMAC_SAMB1_ADDR_Msk (0xffffffffu << GMAC_SAMB1_ADDR_Pos) /**< \brief (GMAC_SAMB1) Specific Address 1 Mask */
+#define GMAC_SAMB1_ADDR(value) ((GMAC_SAMB1_ADDR_Msk & ((value) << GMAC_SAMB1_ADDR_Pos)))
+/* -------- GMAC_SAMT1 : (GMAC Offset: 0x0CC) Specific Address 1 Mask Top [47:32] Register -------- */
+#define GMAC_SAMT1_ADDR_Pos 0
+#define GMAC_SAMT1_ADDR_Msk (0xffffu << GMAC_SAMT1_ADDR_Pos) /**< \brief (GMAC_SAMT1) Specific Address 1 Mask */
+#define GMAC_SAMT1_ADDR(value) ((GMAC_SAMT1_ADDR_Msk & ((value) << GMAC_SAMT1_ADDR_Pos)))
+/* -------- GMAC_OTLO : (GMAC Offset: 0x100) Octets Transmitted [31:0] Register -------- */
+#define GMAC_OTLO_TXO_Pos 0
+#define GMAC_OTLO_TXO_Msk (0xffffffffu << GMAC_OTLO_TXO_Pos) /**< \brief (GMAC_OTLO) Transmitted Octets */
+/* -------- GMAC_OTHI : (GMAC Offset: 0x104) Octets Transmitted [47:32] Register -------- */
+#define GMAC_OTHI_TXO_Pos 0
+#define GMAC_OTHI_TXO_Msk (0xffffu << GMAC_OTHI_TXO_Pos) /**< \brief (GMAC_OTHI) Transmitted Octets */
+/* -------- GMAC_FT : (GMAC Offset: 0x108) Frames Transmitted Register -------- */
+#define GMAC_FT_FTX_Pos 0
+#define GMAC_FT_FTX_Msk (0xffffffffu << GMAC_FT_FTX_Pos) /**< \brief (GMAC_FT) Frames Transmitted without Error */
+/* -------- GMAC_BCFT : (GMAC Offset: 0x10C) Broadcast Frames Transmitted Register -------- */
+#define GMAC_BCFT_BFTX_Pos 0
+#define GMAC_BCFT_BFTX_Msk (0xffffffffu << GMAC_BCFT_BFTX_Pos) /**< \brief (GMAC_BCFT) Broadcast Frames Transmitted without Error */
+/* -------- GMAC_MFT : (GMAC Offset: 0x110) Multicast Frames Transmitted Register -------- */
+#define GMAC_MFT_MFTX_Pos 0
+#define GMAC_MFT_MFTX_Msk (0xffffffffu << GMAC_MFT_MFTX_Pos) /**< \brief (GMAC_MFT) Multicast Frames Transmitted without Error */
+/* -------- GMAC_PFT : (GMAC Offset: 0x114) Pause Frames Transmitted Register -------- */
+#define GMAC_PFT_PFTX_Pos 0
+#define GMAC_PFT_PFTX_Msk (0xffffu << GMAC_PFT_PFTX_Pos) /**< \brief (GMAC_PFT) Pause Frames Transmitted Register */
+/* -------- GMAC_BFT64 : (GMAC Offset: 0x118) 64 Byte Frames Transmitted Register -------- */
+#define GMAC_BFT64_NFTX_Pos 0
+#define GMAC_BFT64_NFTX_Msk (0xffffffffu << GMAC_BFT64_NFTX_Pos) /**< \brief (GMAC_BFT64) 64 Byte Frames Transmitted without Error */
+/* -------- GMAC_TBFT127 : (GMAC Offset: 0x11C) 65 to 127 Byte Frames Transmitted Register -------- */
+#define GMAC_TBFT127_NFTX_Pos 0
+#define GMAC_TBFT127_NFTX_Msk (0xffffffffu << GMAC_TBFT127_NFTX_Pos) /**< \brief (GMAC_TBFT127) 65 to 127 Byte Frames Transmitted without Error */
+/* -------- GMAC_TBFT255 : (GMAC Offset: 0x120) 128 to 255 Byte Frames Transmitted Register -------- */
+#define GMAC_TBFT255_NFTX_Pos 0
+#define GMAC_TBFT255_NFTX_Msk (0xffffffffu << GMAC_TBFT255_NFTX_Pos) /**< \brief (GMAC_TBFT255) 128 to 255 Byte Frames Transmitted without Error */
+/* -------- GMAC_TBFT511 : (GMAC Offset: 0x124) 256 to 511 Byte Frames Transmitted Register -------- */
+#define GMAC_TBFT511_NFTX_Pos 0
+#define GMAC_TBFT511_NFTX_Msk (0xffffffffu << GMAC_TBFT511_NFTX_Pos) /**< \brief (GMAC_TBFT511) 256 to 511 Byte Frames Transmitted without Error */
+/* -------- GMAC_TBFT1023 : (GMAC Offset: 0x128) 512 to 1023 Byte Frames Transmitted Register -------- */
+#define GMAC_TBFT1023_NFTX_Pos 0
+#define GMAC_TBFT1023_NFTX_Msk (0xffffffffu << GMAC_TBFT1023_NFTX_Pos) /**< \brief (GMAC_TBFT1023) 512 to 1023 Byte Frames Transmitted without Error */
+/* -------- GMAC_TBFT1518 : (GMAC Offset: 0x12C) 1024 to 1518 Byte Frames Transmitted Register -------- */
+#define GMAC_TBFT1518_NFTX_Pos 0
+#define GMAC_TBFT1518_NFTX_Msk (0xffffffffu << GMAC_TBFT1518_NFTX_Pos) /**< \brief (GMAC_TBFT1518) 1024 to 1518 Byte Frames Transmitted without Error */
+/* -------- GMAC_GTBFT1518 : (GMAC Offset: 0x130) Greater Than 1518 Byte Frames Transmitted Register -------- */
+#define GMAC_GTBFT1518_NFTX_Pos 0
+#define GMAC_GTBFT1518_NFTX_Msk (0xffffffffu << GMAC_GTBFT1518_NFTX_Pos) /**< \brief (GMAC_GTBFT1518) Greater than 1518 Byte Frames Transmitted without Error */
+/* -------- GMAC_TUR : (GMAC Offset: 0x134) Transmit Under Runs Register -------- */
+#define GMAC_TUR_TXUNR_Pos 0
+#define GMAC_TUR_TXUNR_Msk (0x3ffu << GMAC_TUR_TXUNR_Pos) /**< \brief (GMAC_TUR) Transmit Under Runs */
+/* -------- GMAC_SCF : (GMAC Offset: 0x138) Single Collision Frames Register -------- */
+#define GMAC_SCF_SCOL_Pos 0
+#define GMAC_SCF_SCOL_Msk (0x3ffffu << GMAC_SCF_SCOL_Pos) /**< \brief (GMAC_SCF) Single Collision */
+/* -------- GMAC_MCF : (GMAC Offset: 0x13C) Multiple Collision Frames Register -------- */
+#define GMAC_MCF_MCOL_Pos 0
+#define GMAC_MCF_MCOL_Msk (0x3ffffu << GMAC_MCF_MCOL_Pos) /**< \brief (GMAC_MCF) Multiple Collision */
+/* -------- GMAC_EC : (GMAC Offset: 0x140) Excessive Collisions Register -------- */
+#define GMAC_EC_XCOL_Pos 0
+#define GMAC_EC_XCOL_Msk (0x3ffu << GMAC_EC_XCOL_Pos) /**< \brief (GMAC_EC) Excessive Collisions */
+/* -------- GMAC_LC : (GMAC Offset: 0x144) Late Collisions Register -------- */
+#define GMAC_LC_LCOL_Pos 0
+#define GMAC_LC_LCOL_Msk (0x3ffu << GMAC_LC_LCOL_Pos) /**< \brief (GMAC_LC) Late Collisions */
+/* -------- GMAC_DTF : (GMAC Offset: 0x148) Deferred Transmission Frames Register -------- */
+#define GMAC_DTF_DEFT_Pos 0
+#define GMAC_DTF_DEFT_Msk (0x3ffffu << GMAC_DTF_DEFT_Pos) /**< \brief (GMAC_DTF) Deferred Transmission */
+/* -------- GMAC_CSE : (GMAC Offset: 0x14C) Carrier Sense Errors Register -------- */
+#define GMAC_CSE_CSR_Pos 0
+#define GMAC_CSE_CSR_Msk (0x3ffu << GMAC_CSE_CSR_Pos) /**< \brief (GMAC_CSE) Carrier Sense Error */
+/* -------- GMAC_ORLO : (GMAC Offset: 0x150) Octets Received [31:0] Received -------- */
+#define GMAC_ORLO_RXO_Pos 0
+#define GMAC_ORLO_RXO_Msk (0xffffffffu << GMAC_ORLO_RXO_Pos) /**< \brief (GMAC_ORLO) Received Octets */
+/* -------- GMAC_ORHI : (GMAC Offset: 0x154) Octets Received [47:32] Received -------- */
+#define GMAC_ORHI_RXO_Pos 0
+#define GMAC_ORHI_RXO_Msk (0xffffu << GMAC_ORHI_RXO_Pos) /**< \brief (GMAC_ORHI) Received Octets */
+/* -------- GMAC_FR : (GMAC Offset: 0x158) Frames Received Register -------- */
+#define GMAC_FR_FRX_Pos 0
+#define GMAC_FR_FRX_Msk (0xffffffffu << GMAC_FR_FRX_Pos) /**< \brief (GMAC_FR) Frames Received without Error */
+/* -------- GMAC_BCFR : (GMAC Offset: 0x15C) Broadcast Frames Received Register -------- */
+#define GMAC_BCFR_BFRX_Pos 0
+#define GMAC_BCFR_BFRX_Msk (0xffffffffu << GMAC_BCFR_BFRX_Pos) /**< \brief (GMAC_BCFR) Broadcast Frames Received without Error */
+/* -------- GMAC_MFR : (GMAC Offset: 0x160) Multicast Frames Received Register -------- */
+#define GMAC_MFR_MFRX_Pos 0
+#define GMAC_MFR_MFRX_Msk (0xffffffffu << GMAC_MFR_MFRX_Pos) /**< \brief (GMAC_MFR) Multicast Frames Received without Error */
+/* -------- GMAC_PFR : (GMAC Offset: 0x164) Pause Frames Received Register -------- */
+#define GMAC_PFR_PFRX_Pos 0
+#define GMAC_PFR_PFRX_Msk (0xffffu << GMAC_PFR_PFRX_Pos) /**< \brief (GMAC_PFR) Pause Frames Received Register */
+/* -------- GMAC_BFR64 : (GMAC Offset: 0x168) 64 Byte Frames Received Register -------- */
+#define GMAC_BFR64_NFRX_Pos 0
+#define GMAC_BFR64_NFRX_Msk (0xffffffffu << GMAC_BFR64_NFRX_Pos) /**< \brief (GMAC_BFR64) 64 Byte Frames Received without Error */
+/* -------- GMAC_TBFR127 : (GMAC Offset: 0x16C) 65 to 127 Byte Frames Received Register -------- */
+#define GMAC_TBFR127_NFRX_Pos 0
+#define GMAC_TBFR127_NFRX_Msk (0xffffffffu << GMAC_TBFR127_NFRX_Pos) /**< \brief (GMAC_TBFR127) 65 to 127 Byte Frames Received without Error */
+/* -------- GMAC_TBFR255 : (GMAC Offset: 0x170) 128 to 255 Byte Frames Received Register -------- */
+#define GMAC_TBFR255_NFRX_Pos 0
+#define GMAC_TBFR255_NFRX_Msk (0xffffffffu << GMAC_TBFR255_NFRX_Pos) /**< \brief (GMAC_TBFR255) 128 to 255 Byte Frames Received without Error */
+/* -------- GMAC_TBFR511 : (GMAC Offset: 0x174) 256 to 511Byte Frames Received Register -------- */
+#define GMAC_TBFR511_NFRX_Pos 0
+#define GMAC_TBFR511_NFRX_Msk (0xffffffffu << GMAC_TBFR511_NFRX_Pos) /**< \brief (GMAC_TBFR511) 256 to 511 Byte Frames Received without Error */
+/* -------- GMAC_TBFR1023 : (GMAC Offset: 0x178) 512 to 1023 Byte Frames Received Register -------- */
+#define GMAC_TBFR1023_NFRX_Pos 0
+#define GMAC_TBFR1023_NFRX_Msk (0xffffffffu << GMAC_TBFR1023_NFRX_Pos) /**< \brief (GMAC_TBFR1023) 512 to 1023 Byte Frames Received without Error */
+/* -------- GMAC_TBFR1518 : (GMAC Offset: 0x17C) 1024 to 1518 Byte Frames Received Register -------- */
+#define GMAC_TBFR1518_NFRX_Pos 0
+#define GMAC_TBFR1518_NFRX_Msk (0xffffffffu << GMAC_TBFR1518_NFRX_Pos) /**< \brief (GMAC_TBFR1518) 1024 to 1518 Byte Frames Received without Error */
+/* -------- GMAC_TMXBFR : (GMAC Offset: 0x180) 1519 to Maximum Byte Frames Received Register -------- */
+#define GMAC_TMXBFR_NFRX_Pos 0
+#define GMAC_TMXBFR_NFRX_Msk (0xffffffffu << GMAC_TMXBFR_NFRX_Pos) /**< \brief (GMAC_TMXBFR) 1519 to Maximum Byte Frames Received without Error */
+/* -------- GMAC_UFR : (GMAC Offset: 0x184) Undersize Frames Received Register -------- */
+#define GMAC_UFR_UFRX_Pos 0
+#define GMAC_UFR_UFRX_Msk (0x3ffu << GMAC_UFR_UFRX_Pos) /**< \brief (GMAC_UFR) Undersize Frames Received */
+/* -------- GMAC_OFR : (GMAC Offset: 0x188) Oversize Frames Received Register -------- */
+#define GMAC_OFR_OFRX_Pos 0
+#define GMAC_OFR_OFRX_Msk (0x3ffu << GMAC_OFR_OFRX_Pos) /**< \brief (GMAC_OFR) Oversized Frames Received */
+/* -------- GMAC_JR : (GMAC Offset: 0x18C) Jabbers Received Register -------- */
+#define GMAC_JR_JRX_Pos 0
+#define GMAC_JR_JRX_Msk (0x3ffu << GMAC_JR_JRX_Pos) /**< \brief (GMAC_JR) Jabbers Received */
+/* -------- GMAC_FCSE : (GMAC Offset: 0x190) Frame Check Sequence Errors Register -------- */
+#define GMAC_FCSE_FCKR_Pos 0
+#define GMAC_FCSE_FCKR_Msk (0x3ffu << GMAC_FCSE_FCKR_Pos) /**< \brief (GMAC_FCSE) Frame Check Sequence Errors */
+/* -------- GMAC_LFFE : (GMAC Offset: 0x194) Length Field Frame Errors Register -------- */
+#define GMAC_LFFE_LFER_Pos 0
+#define GMAC_LFFE_LFER_Msk (0x3ffu << GMAC_LFFE_LFER_Pos) /**< \brief (GMAC_LFFE) Length Field Frame Errors */
+/* -------- GMAC_RSE : (GMAC Offset: 0x198) Receive Symbol Errors Register -------- */
+#define GMAC_RSE_RXSE_Pos 0
+#define GMAC_RSE_RXSE_Msk (0x3ffu << GMAC_RSE_RXSE_Pos) /**< \brief (GMAC_RSE) Receive Symbol Errors */
+/* -------- GMAC_AE : (GMAC Offset: 0x19C) Alignment Errors Register -------- */
+#define GMAC_AE_AER_Pos 0
+#define GMAC_AE_AER_Msk (0x3ffu << GMAC_AE_AER_Pos) /**< \brief (GMAC_AE) Alignment Errors */
+/* -------- GMAC_RRE : (GMAC Offset: 0x1A0) Receive Resource Errors Register -------- */
+#define GMAC_RRE_RXRER_Pos 0
+#define GMAC_RRE_RXRER_Msk (0x3ffffu << GMAC_RRE_RXRER_Pos) /**< \brief (GMAC_RRE) Receive Resource Errors */
+/* -------- GMAC_ROE : (GMAC Offset: 0x1A4) Receive Overrun Register -------- */
+#define GMAC_ROE_RXOVR_Pos 0
+#define GMAC_ROE_RXOVR_Msk (0x3ffu << GMAC_ROE_RXOVR_Pos) /**< \brief (GMAC_ROE) Receive Overruns */
+/* -------- GMAC_IHCE : (GMAC Offset: 0x1A8) IP Header Checksum Errors Register -------- */
+#define GMAC_IHCE_HCKER_Pos 0
+#define GMAC_IHCE_HCKER_Msk (0xffu << GMAC_IHCE_HCKER_Pos) /**< \brief (GMAC_IHCE) IP Header Checksum Errors */
+/* -------- GMAC_TCE : (GMAC Offset: 0x1AC) TCP Checksum Errors Register -------- */
+#define GMAC_TCE_TCKER_Pos 0
+#define GMAC_TCE_TCKER_Msk (0xffu << GMAC_TCE_TCKER_Pos) /**< \brief (GMAC_TCE) TCP Checksum Errors */
+/* -------- GMAC_UCE : (GMAC Offset: 0x1B0) UDP Checksum Errors Register -------- */
+#define GMAC_UCE_UCKER_Pos 0
+#define GMAC_UCE_UCKER_Msk (0xffu << GMAC_UCE_UCKER_Pos) /**< \brief (GMAC_UCE) UDP Checksum Errors */
+/* -------- GMAC_TSSS : (GMAC Offset: 0x1C8) 1588 Timer Sync Strobe Seconds Register -------- */
+#define GMAC_TSSS_VTS_Pos 0
+#define GMAC_TSSS_VTS_Msk (0xffffffffu << GMAC_TSSS_VTS_Pos) /**< \brief (GMAC_TSSS) Value of Timer Seconds Register Capture */
+#define GMAC_TSSS_VTS(value) ((GMAC_TSSS_VTS_Msk & ((value) << GMAC_TSSS_VTS_Pos)))
+/* -------- GMAC_TSSN : (GMAC Offset: 0x1CC) 1588 Timer Sync Strobe Nanoseconds Register -------- */
+#define GMAC_TSSN_VTN_Pos 0
+#define GMAC_TSSN_VTN_Msk (0x3fffffffu << GMAC_TSSN_VTN_Pos) /**< \brief (GMAC_TSSN) Value Timer Nanoseconds Register Capture */
+#define GMAC_TSSN_VTN(value) ((GMAC_TSSN_VTN_Msk & ((value) << GMAC_TSSN_VTN_Pos)))
+/* -------- GMAC_TS : (GMAC Offset: 0x1D0) 1588 Timer Seconds Register -------- */
+#define GMAC_TS_TCS_Pos 0
+#define GMAC_TS_TCS_Msk (0xffffffffu << GMAC_TS_TCS_Pos) /**< \brief (GMAC_TS) Timer Count in Seconds */
+#define GMAC_TS_TCS(value) ((GMAC_TS_TCS_Msk & ((value) << GMAC_TS_TCS_Pos)))
+/* -------- GMAC_TN : (GMAC Offset: 0x1D4) 1588 Timer Nanoseconds Register -------- */
+#define GMAC_TN_TNS_Pos 0
+#define GMAC_TN_TNS_Msk (0x3fffffffu << GMAC_TN_TNS_Pos) /**< \brief (GMAC_TN) Timer Count in Nanoseconds */
+#define GMAC_TN_TNS(value) ((GMAC_TN_TNS_Msk & ((value) << GMAC_TN_TNS_Pos)))
+/* -------- GMAC_TA : (GMAC Offset: 0x1D8) 1588 Timer Adjust Register -------- */
+#define GMAC_TA_ITDT_Pos 0
+#define GMAC_TA_ITDT_Msk (0x3fffffffu << GMAC_TA_ITDT_Pos) /**< \brief (GMAC_TA) Increment/Decrement */
+#define GMAC_TA_ITDT(value) ((GMAC_TA_ITDT_Msk & ((value) << GMAC_TA_ITDT_Pos)))
+#define GMAC_TA_ADJ (0x1u << 31) /**< \brief (GMAC_TA) Adjust 1588 Timer */
+/* -------- GMAC_TI : (GMAC Offset: 0x1DC) 1588 Timer Increment Register -------- */
+#define GMAC_TI_CNS_Pos 0
+#define GMAC_TI_CNS_Msk (0xffu << GMAC_TI_CNS_Pos) /**< \brief (GMAC_TI) Count Nanoseconds */
+#define GMAC_TI_CNS(value) ((GMAC_TI_CNS_Msk & ((value) << GMAC_TI_CNS_Pos)))
+#define GMAC_TI_ACNS_Pos 8
+#define GMAC_TI_ACNS_Msk (0xffu << GMAC_TI_ACNS_Pos) /**< \brief (GMAC_TI) Alternative Count Nanoseconds */
+#define GMAC_TI_ACNS(value) ((GMAC_TI_ACNS_Msk & ((value) << GMAC_TI_ACNS_Pos)))
+#define GMAC_TI_NIT_Pos 16
+#define GMAC_TI_NIT_Msk (0xffu << GMAC_TI_NIT_Pos) /**< \brief (GMAC_TI) Number of Increments */
+#define GMAC_TI_NIT(value) ((GMAC_TI_NIT_Msk & ((value) << GMAC_TI_NIT_Pos)))
+/* -------- GMAC_EFTS : (GMAC Offset: 0x1E0) PTP Event Frame Transmitted Seconds -------- */
+#define GMAC_EFTS_RUD_Pos 0
+#define GMAC_EFTS_RUD_Msk (0xffffffffu << GMAC_EFTS_RUD_Pos) /**< \brief (GMAC_EFTS) Register Update */
+/* -------- GMAC_EFTN : (GMAC Offset: 0x1E4) PTP Event Frame Transmitted Nanoseconds -------- */
+#define GMAC_EFTN_RUD_Pos 0
+#define GMAC_EFTN_RUD_Msk (0x3fffffffu << GMAC_EFTN_RUD_Pos) /**< \brief (GMAC_EFTN) Register Update */
+/* -------- GMAC_EFRS : (GMAC Offset: 0x1E8) PTP Event Frame Received Seconds -------- */
+#define GMAC_EFRS_RUD_Pos 0
+#define GMAC_EFRS_RUD_Msk (0xffffffffu << GMAC_EFRS_RUD_Pos) /**< \brief (GMAC_EFRS) Register Update */
+/* -------- GMAC_EFRN : (GMAC Offset: 0x1EC) PTP Event Frame Received Nanoseconds -------- */
+#define GMAC_EFRN_RUD_Pos 0
+#define GMAC_EFRN_RUD_Msk (0x3fffffffu << GMAC_EFRN_RUD_Pos) /**< \brief (GMAC_EFRN) Register Update */
+/* -------- GMAC_PEFTS : (GMAC Offset: 0x1F0) PTP Peer Event Frame Transmitted Seconds -------- */
+#define GMAC_PEFTS_RUD_Pos 0
+#define GMAC_PEFTS_RUD_Msk (0xffffffffu << GMAC_PEFTS_RUD_Pos) /**< \brief (GMAC_PEFTS) Register Update */
+/* -------- GMAC_PEFTN : (GMAC Offset: 0x1F4) PTP Peer Event Frame Transmitted Nanoseconds -------- */
+#define GMAC_PEFTN_RUD_Pos 0
+#define GMAC_PEFTN_RUD_Msk (0x3fffffffu << GMAC_PEFTN_RUD_Pos) /**< \brief (GMAC_PEFTN) Register Update */
+/* -------- GMAC_PEFRS : (GMAC Offset: 0x1F8) PTP Peer Event Frame Received Seconds -------- */
+#define GMAC_PEFRS_RUD_Pos 0
+#define GMAC_PEFRS_RUD_Msk (0xffffffffu << GMAC_PEFRS_RUD_Pos) /**< \brief (GMAC_PEFRS) Register Update */
+/* -------- GMAC_PEFRN : (GMAC Offset: 0x1FC) PTP Peer Event Frame Received Nanoseconds -------- */
+#define GMAC_PEFRN_RUD_Pos 0
+#define GMAC_PEFRN_RUD_Msk (0x3fffffffu << GMAC_PEFRN_RUD_Pos) /**< \brief (GMAC_PEFRN) Register Update */
+/* -------- GMAC_ISRPQ[7] : (GMAC Offset: 0x400) Interrupt Status Register Priority Queue -------- */
+#define GMAC_ISRPQ_RCOMP (0x1u << 1) /**< \brief (GMAC_ISRPQ[7]) Receive Complete */
+#define GMAC_ISRPQ_RXUBR (0x1u << 2) /**< \brief (GMAC_ISRPQ[7]) RX Used Bit Read */
+#define GMAC_ISRPQ_RLEX (0x1u << 5) /**< \brief (GMAC_ISRPQ[7]) Retry Limit Exceeded or Late Collision */
+#define GMAC_ISRPQ_TFC (0x1u << 6) /**< \brief (GMAC_ISRPQ[7]) Transmit Frame Corruption due to AHB error */
+#define GMAC_ISRPQ_TCOMP (0x1u << 7) /**< \brief (GMAC_ISRPQ[7]) Transmit Complete */
+#define GMAC_ISRPQ_ROVR (0x1u << 10) /**< \brief (GMAC_ISRPQ[7]) Receive Overrun */
+#define GMAC_ISRPQ_HRESP (0x1u << 11) /**< \brief (GMAC_ISRPQ[7]) HRESP Not OK */
+/* -------- GMAC_TBQBAPQ[7] : (GMAC Offset: 0x440) Transmit Buffer Queue Base Address Priority Queue -------- */
+#define GMAC_TBQBAPQ_TXBQBA_Pos 2
+#define GMAC_TBQBAPQ_TXBQBA_Msk (0x3fu << GMAC_TBQBAPQ_TXBQBA_Pos) /**< \brief (GMAC_TBQBAPQ[7]) Transmit Buffer Queue Base Address */
+#define GMAC_TBQBAPQ_TXBQBA(value) ((GMAC_TBQBAPQ_TXBQBA_Msk & ((value) << GMAC_TBQBAPQ_TXBQBA_Pos)))
+/* -------- GMAC_RBQBAPQ[7] : (GMAC Offset: 0x480) Receive Buffer Queue Base Address Priority Queue -------- */
+#define GMAC_RBQBAPQ_RXBQBA_Pos 2
+#define GMAC_RBQBAPQ_RXBQBA_Msk (0x3fu << GMAC_RBQBAPQ_RXBQBA_Pos) /**< \brief (GMAC_RBQBAPQ[7]) Receive Buffer Queue Base Address */
+#define GMAC_RBQBAPQ_RXBQBA(value) ((GMAC_RBQBAPQ_RXBQBA_Msk & ((value) << GMAC_RBQBAPQ_RXBQBA_Pos)))
+/* -------- GMAC_RBSRPQ[7] : (GMAC Offset: 0x4A0) Receive Buffer Size Register Priority Queue -------- */
+#define GMAC_RBSRPQ_RBS_Pos 0
+#define GMAC_RBSRPQ_RBS_Msk (0xffffu << GMAC_RBSRPQ_RBS_Pos) /**< \brief (GMAC_RBSRPQ[7]) Receive Buffer Size */
+#define GMAC_RBSRPQ_RBS(value) ((GMAC_RBSRPQ_RBS_Msk & ((value) << GMAC_RBSRPQ_RBS_Pos)))
+/* -------- GMAC_ST1RPQ[16] : (GMAC Offset: 0x500) Screening Type1 Register Priority Queue -------- */
+#define GMAC_ST1RPQ_QNB_Pos 0
+#define GMAC_ST1RPQ_QNB_Msk (0xfu << GMAC_ST1RPQ_QNB_Pos) /**< \brief (GMAC_ST1RPQ[16]) Que Number (0->7) */
+#define GMAC_ST1RPQ_QNB(value) ((GMAC_ST1RPQ_QNB_Msk & ((value) << GMAC_ST1RPQ_QNB_Pos)))
+#define GMAC_ST1RPQ_DSTCM_Pos 4
+#define GMAC_ST1RPQ_DSTCM_Msk (0xffu << GMAC_ST1RPQ_DSTCM_Pos) /**< \brief (GMAC_ST1RPQ[16]) Differentiated Services or Traffic Class Match */
+#define GMAC_ST1RPQ_DSTCM(value) ((GMAC_ST1RPQ_DSTCM_Msk & ((value) << GMAC_ST1RPQ_DSTCM_Pos)))
+#define GMAC_ST1RPQ_UDPM_Pos 12
+#define GMAC_ST1RPQ_UDPM_Msk (0xffffu << GMAC_ST1RPQ_UDPM_Pos) /**< \brief (GMAC_ST1RPQ[16]) UDP Port Match */
+#define GMAC_ST1RPQ_UDPM(value) ((GMAC_ST1RPQ_UDPM_Msk & ((value) << GMAC_ST1RPQ_UDPM_Pos)))
+#define GMAC_ST1RPQ_DSTCE (0x1u << 28) /**< \brief (GMAC_ST1RPQ[16]) Differentiated Services or Traffic Class Match Enable */
+#define GMAC_ST1RPQ_UDPE (0x1u << 29) /**< \brief (GMAC_ST1RPQ[16]) UDP Port Match Enable */
+/* -------- GMAC_ST2RPQ[16] : (GMAC Offset: 0x540) Screening Type2 Register Priority Queue -------- */
+#define GMAC_ST2RPQ_QNB_Pos 0
+#define GMAC_ST2RPQ_QNB_Msk (0xfu << GMAC_ST2RPQ_QNB_Pos) /**< \brief (GMAC_ST2RPQ[16]) Que Number (0->7) */
+#define GMAC_ST2RPQ_QNB(value) ((GMAC_ST2RPQ_QNB_Msk & ((value) << GMAC_ST2RPQ_QNB_Pos)))
+#define GMAC_ST2RPQ_VLANP_Pos 4
+#define GMAC_ST2RPQ_VLANP_Msk (0xfu << GMAC_ST2RPQ_VLANP_Pos) /**< \brief (GMAC_ST2RPQ[16]) VLAN Priority */
+#define GMAC_ST2RPQ_VLANP(value) ((GMAC_ST2RPQ_VLANP_Msk & ((value) << GMAC_ST2RPQ_VLANP_Pos)))
+#define GMAC_ST2RPQ_VLANE (0x1u << 8) /**< \brief (GMAC_ST2RPQ[16]) VLAN Enable */
+/* -------- GMAC_IERPQ[7] : (GMAC Offset: 0x600) Interrupt Enable Register Priority Queue -------- */
+#define GMAC_IERPQ_RCOMP (0x1u << 1) /**< \brief (GMAC_IERPQ[7]) Receive Complete */
+#define GMAC_IERPQ_RXUBR (0x1u << 2) /**< \brief (GMAC_IERPQ[7]) RX Used Bit Read */
+#define GMAC_IERPQ_RLEX (0x1u << 5) /**< \brief (GMAC_IERPQ[7]) Retry Limit Exceeded or Late Collision */
+#define GMAC_IERPQ_TFC (0x1u << 6) /**< \brief (GMAC_IERPQ[7]) Transmit Frame Corruption due to AHB error */
+#define GMAC_IERPQ_TCOMP (0x1u << 7) /**< \brief (GMAC_IERPQ[7]) Transmit Complete */
+#define GMAC_IERPQ_ROVR (0x1u << 10) /**< \brief (GMAC_IERPQ[7]) Receive Overrun */
+#define GMAC_IERPQ_HRESP (0x1u << 11) /**< \brief (GMAC_IERPQ[7]) HRESP Not OK */
+/* -------- GMAC_IDRPQ[7] : (GMAC Offset: 0x620) Interrupt Disable Register Priority Queue -------- */
+#define GMAC_IDRPQ_RCOMP (0x1u << 1) /**< \brief (GMAC_IDRPQ[7]) Receive Complete */
+#define GMAC_IDRPQ_RXUBR (0x1u << 2) /**< \brief (GMAC_IDRPQ[7]) RX Used Bit Read */
+#define GMAC_IDRPQ_RLEX (0x1u << 5) /**< \brief (GMAC_IDRPQ[7]) Retry Limit Exceeded or Late Collision */
+#define GMAC_IDRPQ_TFC (0x1u << 6) /**< \brief (GMAC_IDRPQ[7]) Transmit Frame Corruption due to AHB error */
+#define GMAC_IDRPQ_TCOMP (0x1u << 7) /**< \brief (GMAC_IDRPQ[7]) Transmit Complete */
+#define GMAC_IDRPQ_ROVR (0x1u << 10) /**< \brief (GMAC_IDRPQ[7]) Receive Overrun */
+#define GMAC_IDRPQ_HRESP (0x1u << 11) /**< \brief (GMAC_IDRPQ[7]) HRESP Not OK */
+/* -------- GMAC_IMRPQ[7] : (GMAC Offset: 0x640) Interrupt Mask Register Priority Queue -------- */
+#define GMAC_IMRPQ_RCOMP (0x1u << 1) /**< \brief (GMAC_IMRPQ[7]) Receive Complete */
+#define GMAC_IMRPQ_RXUBR (0x1u << 2) /**< \brief (GMAC_IMRPQ[7]) RX Used Bit Read */
+#define GMAC_IMRPQ_RLEX (0x1u << 5) /**< \brief (GMAC_IMRPQ[7]) Retry Limit Exceeded or Late Collision */
+#define GMAC_IMRPQ_AHB (0x1u << 6) /**< \brief (GMAC_IMRPQ[7]) AHB Error */
+#define GMAC_IMRPQ_TCOMP (0x1u << 7) /**< \brief (GMAC_IMRPQ[7]) Transmit Complete */
+#define GMAC_IMRPQ_ROVR (0x1u << 10) /**< \brief (GMAC_IMRPQ[7]) Receive Overrun */
+#define GMAC_IMRPQ_HRESP (0x1u << 11) /**< \brief (GMAC_IMRPQ[7]) HRESP Not OK */
+
+/*@}*/
+
+
+#endif /* _SAM4E_GMAC_COMPONENT_ */
index fe9e2960ff80b754834c4c51ae7b1a3ac322b158..fc72c6ad9a87fe2649a33f9c346e3c65302ca6a2 100644 (file)
- /**\r
- * \file\r
- *\r
- * \brief API driver for KSZ8051MNL PHY component.\r
- *\r
- * Copyright (c) 2013 Atmel Corporation. All rights reserved.\r
- *\r
- * \asf_license_start\r
- *\r
- * \page License\r
- *\r
- * Redistribution and use in source and binary forms, with or without\r
- * modification, are permitted provided that the following conditions are met:\r
- *\r
- * 1. Redistributions of source code must retain the above copyright notice,\r
- *    this list of conditions and the following disclaimer.\r
- *\r
- * 2. Redistributions in binary form must reproduce the above copyright notice,\r
- *    this list of conditions and the following disclaimer in the documentation\r
- *    and/or other materials provided with the distribution.\r
- *\r
- * 3. The name of Atmel may not be used to endorse or promote products derived\r
- *    from this software without specific prior written permission.\r
- *\r
- * 4. This software may only be redistributed and used in connection with an\r
- *    Atmel microcontroller product.\r
- *\r
- * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED\r
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
- * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR\r
- * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\r
- * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\r
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
- * POSSIBILITY OF SUCH DAMAGE.\r
- *\r
- * \asf_license_stop\r
- *\r
- */\r
-\r
-/* Standard includes. */\r
-#include <stdint.h>\r
-#include <stdio.h>\r
-#include <stdlib.h>\r
-\r
-/* FreeRTOS includes. */\r
-#include "FreeRTOS.h"\r
-#include "FreeRTOSIPConfig.h"\r
-\r
-#include "ethernet_phy.h"\r
-#include "instance/gmac.h"\r
-\r
-/// @cond 0\r
-/**INDENT-OFF**/\r
-#ifdef __cplusplus\r
-extern "C" {\r
-#endif\r
-/**INDENT-ON**/\r
-/// @endcond\r
-\r
-/**\r
- * \defgroup ksz8051mnl_ethernet_phy_group PHY component (KSZ8051MNL)\r
- *\r
- * Driver for the ksz8051mnl component. This driver provides access to the main\r
- * features of the PHY.\r
- *\r
- * \section dependencies Dependencies\r
- * This driver depends on the following modules:\r
- * - \ref gmac_group Ethernet Media Access Controller (GMAC) module.\r
- *\r
- * @{\r
- */\r
-\r
-SPhyProps phyProps;\r
-\r
-/* Max PHY number */\r
-#define ETH_PHY_MAX_ADDR   31\r
-\r
-/* Ethernet PHY operation max retry count */\r
-#define ETH_PHY_RETRY_MAX 1000000\r
-\r
-/* Ethernet PHY operation timeout */\r
-#define ETH_PHY_TIMEOUT 10\r
-\r
-/**\r
- * \brief Find a valid PHY Address ( from addrStart to 31 ).\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param uc_phy_addr PHY address.\r
- * \param uc_start_addr Start address of the PHY to be searched.\r
- *\r
- * \return 0xFF when no valid PHY address is found.\r
- */\r
-int ethernet_phy_addr = 0;\r
-static uint8_t ethernet_phy_find_valid(Gmac *p_gmac, uint8_t uc_phy_addr,\r
-               uint8_t uc_start_addr)\r
-{\r
-       uint32_t ul_value = 0;\r
-       uint8_t uc_cnt;\r
-       uint8_t uc_phy_address = uc_phy_addr;\r
-\r
-       gmac_enable_management(p_gmac, true);\r
-/*\r
-#define GMII_OUI_MSB            0x0022\r
-#define GMII_OUI_LSB            0x05\r
-\r
-PHYID1 = 0x0022\r
-PHYID2 = 0x1550\r
-0001_0101_0101_0000 = 0x1550 <= mask should be 0xFFF0\r
-*/\r
-       /* Check the current PHY address */\r
-       gmac_phy_read(p_gmac, uc_phy_addr, GMII_PHYID1, &ul_value);\r
-\r
-       /* Find another one */\r
-       if (ul_value != GMII_OUI_MSB) {\r
-               ethernet_phy_addr = 0xFF;\r
-               for (uc_cnt = uc_start_addr; uc_cnt <= ETH_PHY_MAX_ADDR; uc_cnt++) {\r
-                       uc_phy_address = (uc_phy_address + 1) & 0x1F;\r
-                       ul_value = 0;\r
-                       gmac_phy_read(p_gmac, uc_phy_address, GMII_PHYID1, &ul_value);\r
-                       if (ul_value == GMII_OUI_MSB) {\r
-                               ethernet_phy_addr = uc_phy_address;\r
-                               break;\r
-                       }\r
-               }\r
-       }\r
-\r
-       gmac_enable_management(p_gmac, false);\r
-\r
-       if (ethernet_phy_addr != 0xFF) {\r
-               gmac_phy_read(p_gmac, uc_phy_address, GMII_BMSR, &ul_value);\r
-       }\r
-       return ethernet_phy_addr;\r
-}\r
-\r
-\r
-/**\r
- * \brief Perform a HW initialization to the PHY and set up clocks.\r
- *\r
- * This should be called only once to initialize the PHY pre-settings.\r
- * The PHY address is the reset status of CRS, RXD[3:0] (the emacPins' pullups).\r
- * The COL pin is used to select MII mode on reset (pulled up for Reduced MII).\r
- * The RXDV pin is used to select test mode on reset (pulled up for test mode).\r
- * The above pins should be predefined for corresponding settings in resetPins.\r
- * The GMAC peripheral pins are configured after the reset is done.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param uc_phy_addr PHY address.\r
- * \param ul_mck GMAC MCK.\r
- *\r
- * Return GMAC_OK if successfully, GMAC_TIMEOUT if timeout.\r
- */\r
-uint8_t ethernet_phy_init(Gmac *p_gmac, uint8_t uc_phy_addr, uint32_t mck)\r
-{\r
-       uint8_t uc_rc = GMAC_TIMEOUT;\r
-       uint8_t uc_phy;\r
-\r
-       ethernet_phy_reset(GMAC,uc_phy_addr);\r
-\r
-       /* Configure GMAC runtime clock */\r
-       uc_rc = gmac_set_mdc_clock(p_gmac, mck);\r
-       if (uc_rc != GMAC_OK) {\r
-               return 0;\r
-       }\r
-\r
-       /* Check PHY Address */\r
-       uc_phy = ethernet_phy_find_valid(p_gmac, uc_phy_addr, 0);\r
-       if (uc_phy == 0xFF) {\r
-               return 0;\r
-       }\r
-       if (uc_phy != uc_phy_addr) {\r
-               ethernet_phy_reset(p_gmac, uc_phy_addr);\r
-       }\r
-       phy_props.phy_chn = uc_phy;\r
-       return uc_phy;\r
-}\r
-\r
-\r
-/**\r
- * \brief Get the Link & speed settings, and automatically set up the GMAC with the\r
- * settings.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param uc_phy_addr PHY address.\r
- * \param uc_apply_setting_flag Set to 0 to not apply the PHY configurations, else to apply.\r
- *\r
- * Return GMAC_OK if successfully, GMAC_TIMEOUT if timeout.\r
- */\r
-uint8_t ethernet_phy_set_link(Gmac *p_gmac, uint8_t uc_phy_addr,\r
-               uint8_t uc_apply_setting_flag)\r
-{\r
-       uint32_t ul_stat1;\r
-       uint32_t ul_stat2;\r
-       uint8_t uc_phy_address, uc_speed = true, uc_fd = true;\r
-       uint8_t uc_rc = GMAC_TIMEOUT;\r
-\r
-       gmac_enable_management(p_gmac, true);\r
-\r
-       uc_phy_address = uc_phy_addr;\r
-\r
-       uc_rc = gmac_phy_read(p_gmac, uc_phy_address, GMII_BMSR, &ul_stat1);\r
-       if (uc_rc != GMAC_OK) {\r
-               /* Disable PHY management and start the GMAC transfer */\r
-               gmac_enable_management(p_gmac, false);\r
-\r
-               return uc_rc;\r
-       }\r
-       if ((ul_stat1 & GMII_LINK_STATUS) == 0) {\r
-               /* Disable PHY management and start the GMAC transfer */\r
-               gmac_enable_management(p_gmac, false);\r
-\r
-               return GMAC_INVALID;\r
-       }\r
-\r
-       if (uc_apply_setting_flag == 0) {\r
-               /* Disable PHY management and start the GMAC transfer */\r
-               gmac_enable_management(p_gmac, false);\r
-\r
-               return uc_rc;\r
-       }\r
-\r
-       /* Read advertisement */\r
-       uc_rc = gmac_phy_read(p_gmac, uc_phy_address, GMII_ANAR, &ul_stat2);\r
-phy_props.phy_stat1 = ul_stat1;\r
-phy_props.phy_stat2 = ul_stat2;\r
-       if (uc_rc != GMAC_OK) {\r
-               /* Disable PHY management and start the GMAC transfer */\r
-               gmac_enable_management(p_gmac, false);\r
-\r
-               return uc_rc;\r
-       }\r
-\r
-       if ((ul_stat1 & GMII_100BASE_TX_FD) && (ul_stat2 & GMII_100TX_FDX)) {\r
-               /* Set GMAC for 100BaseTX and Full Duplex */\r
-               uc_speed = true;\r
-               uc_fd = true;\r
-       } else\r
-       if ((ul_stat1 & GMII_100BASE_T4_HD) && (ul_stat2 & GMII_100TX_HDX)) {\r
-               /* Set MII for 100BaseTX and Half Duplex */\r
-               uc_speed = true;\r
-               uc_fd = false;\r
-       } else\r
-       if ((ul_stat1 & GMII_10BASE_T_FD) && (ul_stat2 & GMII_10_FDX)) {\r
-               /* Set MII for 10BaseT and Full Duplex */\r
-               uc_speed = false;\r
-               uc_fd = true;\r
-       } else\r
-       if ((ul_stat1 & GMII_10BASE_T_HD) && (ul_stat2 & GMII_10_HDX)) {\r
-               /* Set MII for 10BaseT and Half Duplex */\r
-               uc_speed = false;\r
-               uc_fd = false;\r
-       }\r
-\r
-       gmac_set_speed(p_gmac, uc_speed);\r
-       gmac_enable_full_duplex(p_gmac, uc_fd);\r
-\r
-       /* Start the GMAC transfers */\r
-       gmac_enable_management(p_gmac, false);\r
-       return uc_rc;\r
-}\r
-\r
-PhyProps_t phy_props;\r
-\r
-/**\r
- * \brief Issue an auto negotiation of the PHY.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param uc_phy_addr PHY address.\r
- *\r
- * Return GMAC_OK if successfully, GMAC_TIMEOUT if timeout.\r
- */\r
-uint8_t ethernet_phy_auto_negotiate(Gmac *p_gmac, uint8_t uc_phy_addr)\r
-{\r
-       uint32_t ul_retry_max = ETH_PHY_RETRY_MAX;\r
-       uint32_t ul_value;\r
-       uint32_t ul_phy_anar;\r
-       uint32_t ul_retry_count = 0;\r
-       uint8_t uc_speed = 0;\r
-       uint8_t uc_fd=0;\r
-       uint8_t uc_rc = GMAC_TIMEOUT;\r
-\r
-       gmac_enable_management(p_gmac, true);\r
-\r
-       /* Set up control register */\r
-       uc_rc = gmac_phy_read(p_gmac, uc_phy_addr, GMII_BMCR, &ul_value);\r
-       if (uc_rc != GMAC_OK) {\r
-               gmac_enable_management(p_gmac, false);\r
-phy_props.phy_result = -1;\r
-               return uc_rc;\r
-       }\r
-\r
-       ul_value &= ~(uint32_t)GMII_AUTONEG; /* Remove auto-negotiation enable */\r
-       ul_value &= ~(uint32_t)(GMII_LOOPBACK | GMII_POWER_DOWN);\r
-       ul_value |= (uint32_t)GMII_ISOLATE; /* Electrically isolate PHY */\r
-       uc_rc = gmac_phy_write(p_gmac, uc_phy_addr, GMII_BMCR, ul_value);\r
-       if (uc_rc != GMAC_OK) {\r
-               gmac_enable_management(p_gmac, false);\r
-phy_props.phy_result = -2;\r
-               return uc_rc;\r
-       }\r
-\r
-       /*\r
-        * Set the Auto_negotiation Advertisement Register.\r
-        * MII advertising for Next page.\r
-        * 100BaseTxFD and HD, 10BaseTFD and HD, IEEE 802.3.\r
-        */\r
-       ul_phy_anar = GMII_100TX_FDX | GMII_100TX_HDX | GMII_10_FDX | GMII_10_HDX |\r
-                       GMII_AN_IEEE_802_3;\r
-       uc_rc = gmac_phy_write(p_gmac, uc_phy_addr, GMII_ANAR, ul_phy_anar);\r
-       if (uc_rc != GMAC_OK) {\r
-               gmac_enable_management(p_gmac, false);\r
-phy_props.phy_result = -3;\r
-               return uc_rc;\r
-       }\r
-\r
-       /* Read & modify control register */\r
-       uc_rc = gmac_phy_read(p_gmac, uc_phy_addr, GMII_BMCR, &ul_value);\r
-       if (uc_rc != GMAC_OK) {\r
-               gmac_enable_management(p_gmac, false);\r
-phy_props.phy_result = -4;\r
-               return uc_rc;\r
-       }\r
-\r
-       ul_value |= GMII_SPEED_SELECT | GMII_AUTONEG | GMII_DUPLEX_MODE;\r
-       uc_rc = gmac_phy_write(p_gmac, uc_phy_addr, GMII_BMCR, ul_value);\r
-       if (uc_rc != GMAC_OK) {\r
-               gmac_enable_management(p_gmac, false);\r
-phy_props.phy_result = -5;\r
-               return uc_rc;\r
-       }\r
-\r
-       /* Restart auto negotiation */\r
-       ul_value |= (uint32_t)GMII_RESTART_AUTONEG;\r
-       ul_value &= ~(uint32_t)GMII_ISOLATE;\r
-       uc_rc = gmac_phy_write(p_gmac, uc_phy_addr, GMII_BMCR, ul_value);\r
-       if (uc_rc != GMAC_OK) {\r
-               gmac_enable_management(p_gmac, false);\r
-phy_props.phy_result = -6;\r
-               return uc_rc;\r
-       }\r
-\r
-       /* Check if auto negotiation is completed */\r
-       while (1) {\r
-               uc_rc = gmac_phy_read(p_gmac, uc_phy_addr, GMII_BMSR, &ul_value);\r
-               if (uc_rc != GMAC_OK) {\r
-                       gmac_enable_management(p_gmac, false);\r
-phy_props.phy_result = -7;\r
-                       return uc_rc;\r
-               }\r
-               /* Done successfully */\r
-               if (ul_value & GMII_AUTONEG_COMP) {\r
-                       break;\r
-               }\r
-\r
-               /* Timeout check */\r
-               if (ul_retry_max) {\r
-                       if (++ul_retry_count >= ul_retry_max) {\r
-                               gmac_enable_management(p_gmac, false);\r
-phy_props.phy_result = -8;\r
-                               return GMAC_TIMEOUT;\r
-                       }\r
-               }\r
-       }\r
-\r
-       /* Get the auto negotiate link partner base page */\r
-       uc_rc = gmac_phy_read(p_gmac, uc_phy_addr, GMII_PCR1, &phy_props.phy_params);\r
-       if (uc_rc != GMAC_OK) {\r
-               gmac_enable_management(p_gmac, false);\r
-phy_props.phy_result = -9;\r
-               return uc_rc;\r
-       }\r
-\r
-\r
-       /* Set up the GMAC link speed */\r
-       if ((ul_phy_anar & phy_props.phy_params) & GMII_100TX_FDX) {\r
-               /* Set MII for 100BaseTX and Full Duplex */\r
-               uc_speed = true;\r
-               uc_fd = true;\r
-       } else if ((ul_phy_anar & phy_props.phy_params) & GMII_10_FDX) {\r
-               /* Set MII for 10BaseT and Full Duplex */\r
-               uc_speed = false;\r
-               uc_fd = true;\r
-       } else if ((ul_phy_anar & phy_props.phy_params) & GMII_100TX_HDX) {\r
-               /* Set MII for 100BaseTX and half Duplex */\r
-               uc_speed = true;\r
-               uc_fd = false;\r
-       } else if ((ul_phy_anar & phy_props.phy_params) & GMII_10_HDX) {\r
-               /* Set MII for 10BaseT and half Duplex */\r
-               uc_speed = false;\r
-               uc_fd = false;\r
-       }\r
-\r
-       gmac_set_speed(p_gmac, uc_speed);\r
-       gmac_enable_full_duplex(p_gmac, uc_fd);\r
-\r
-       /* Select Media Independent Interface type */\r
-       gmac_select_mii_mode(p_gmac, ETH_PHY_MODE);\r
-\r
-       gmac_enable_transmit(GMAC, true);\r
-       gmac_enable_receive(GMAC, true);\r
-\r
-       gmac_enable_management(p_gmac, false);\r
-phy_props.phy_result = 1;\r
-       return uc_rc;\r
-}\r
-\r
-/**\r
- * \brief Issue a SW reset to reset all registers of the PHY.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param uc_phy_addr PHY address.\r
- *\r
- * \Return GMAC_OK if successfully, GMAC_TIMEOUT if timeout.\r
- */\r
-uint8_t ethernet_phy_reset(Gmac *p_gmac, uint8_t uc_phy_addr)\r
-{\r
-       uint32_t ul_bmcr = GMII_RESET;\r
-       uint8_t uc_phy_address = uc_phy_addr;\r
-       uint32_t ul_timeout = ETH_PHY_TIMEOUT;\r
-       uint8_t uc_rc = GMAC_TIMEOUT;\r
-\r
-       gmac_enable_management(p_gmac, true);\r
-\r
-       ul_bmcr = GMII_RESET;\r
-       gmac_phy_write(p_gmac, uc_phy_address, GMII_BMCR, ul_bmcr);\r
-\r
-       do {\r
-               gmac_phy_read(p_gmac, uc_phy_address, GMII_BMCR, &ul_bmcr);\r
-               ul_timeout--;\r
-       } while ((ul_bmcr & GMII_RESET) && ul_timeout);\r
-\r
-       gmac_enable_management(p_gmac, false);\r
-\r
-       if (!ul_timeout) {\r
-               uc_rc = GMAC_OK;\r
-       }\r
-\r
-       return (uc_rc);\r
-}\r
-\r
-/// @cond 0\r
-/**INDENT-OFF**/\r
-#ifdef __cplusplus\r
-}\r
-#endif\r
-/**INDENT-ON**/\r
-/// @endcond\r
-\r
-/**\r
- * \}\r
- */\r
+ /**
+ * \file
+ *
+ * \brief API driver for KSZ8051MNL PHY component.
+ *
+ * Copyright (c) 2013 Atmel Corporation. All rights reserved.
+ *
+ * \asf_license_start
+ *
+ * \page License
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ *
+ * 3. The name of Atmel may not be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * 4. This software may only be redistributed and used in connection with an
+ *    Atmel microcontroller product.
+ *
+ * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
+ * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * \asf_license_stop
+ *
+ */
+
+/* Standard includes. */
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+/* FreeRTOS includes. */
+#include "FreeRTOS.h"
+#include "FreeRTOSIPConfig.h"
+
+#include "ethernet_phy.h"
+#include "instance/gmac.h"
+
+/// @cond 0
+/**INDENT-OFF**/
+#ifdef __cplusplus
+extern "C" {
+#endif
+/**INDENT-ON**/
+/// @endcond
+
+/**
+ * \defgroup ksz8051mnl_ethernet_phy_group PHY component (KSZ8051MNL)
+ *
+ * Driver for the ksz8051mnl component. This driver provides access to the main
+ * features of the PHY.
+ *
+ * \section dependencies Dependencies
+ * This driver depends on the following modules:
+ * - \ref gmac_group Ethernet Media Access Controller (GMAC) module.
+ *
+ * @{
+ */
+
+SPhyProps phyProps;
+
+/* Max PHY number */
+#define ETH_PHY_MAX_ADDR   31
+
+/* Ethernet PHY operation max retry count */
+#define ETH_PHY_RETRY_MAX 1000000
+
+/* Ethernet PHY operation timeout */
+#define ETH_PHY_TIMEOUT 10
+
+/**
+ * \brief Find a valid PHY Address ( from addrStart to 31 ).
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param uc_phy_addr PHY address.
+ * \param uc_start_addr Start address of the PHY to be searched.
+ *
+ * \return 0xFF when no valid PHY address is found.
+ */
+int ethernet_phy_addr = 0;
+static uint8_t ethernet_phy_find_valid(Gmac *p_gmac, uint8_t uc_phy_addr,
+               uint8_t uc_start_addr)
+{
+       uint32_t ul_value = 0;
+       uint8_t uc_cnt;
+       uint8_t uc_phy_address = uc_phy_addr;
+
+       gmac_enable_management(p_gmac, true);
+/*
+#define GMII_OUI_MSB            0x0022
+#define GMII_OUI_LSB            0x05
+
+PHYID1 = 0x0022
+PHYID2 = 0x1550
+0001_0101_0101_0000 = 0x1550 <= mask should be 0xFFF0
+*/
+       /* Check the current PHY address */
+       gmac_phy_read(p_gmac, uc_phy_addr, GMII_PHYID1, &ul_value);
+
+       /* Find another one */
+       if (ul_value != GMII_OUI_MSB) {
+               ethernet_phy_addr = 0xFF;
+               for (uc_cnt = uc_start_addr; uc_cnt <= ETH_PHY_MAX_ADDR; uc_cnt++) {
+                       uc_phy_address = (uc_phy_address + 1) & 0x1F;
+                       ul_value = 0;
+                       gmac_phy_read(p_gmac, uc_phy_address, GMII_PHYID1, &ul_value);
+                       if (ul_value == GMII_OUI_MSB) {
+                               ethernet_phy_addr = uc_phy_address;
+                               break;
+                       }
+               }
+       }
+
+       gmac_enable_management(p_gmac, false);
+
+       if (ethernet_phy_addr != 0xFF) {
+               gmac_phy_read(p_gmac, uc_phy_address, GMII_BMSR, &ul_value);
+       }
+       return ethernet_phy_addr;
+}
+
+
+/**
+ * \brief Perform a HW initialization to the PHY and set up clocks.
+ *
+ * This should be called only once to initialize the PHY pre-settings.
+ * The PHY address is the reset status of CRS, RXD[3:0] (the emacPins' pullups).
+ * The COL pin is used to select MII mode on reset (pulled up for Reduced MII).
+ * The RXDV pin is used to select test mode on reset (pulled up for test mode).
+ * The above pins should be predefined for corresponding settings in resetPins.
+ * The GMAC peripheral pins are configured after the reset is done.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param uc_phy_addr PHY address.
+ * \param ul_mck GMAC MCK.
+ *
+ * Return GMAC_OK if successfully, GMAC_TIMEOUT if timeout.
+ */
+uint8_t ethernet_phy_init(Gmac *p_gmac, uint8_t uc_phy_addr, uint32_t mck)
+{
+       uint8_t uc_rc = GMAC_TIMEOUT;
+       uint8_t uc_phy;
+
+       ethernet_phy_reset(GMAC,uc_phy_addr);
+
+       /* Configure GMAC runtime clock */
+       uc_rc = gmac_set_mdc_clock(p_gmac, mck);
+       if (uc_rc != GMAC_OK) {
+               return 0;
+       }
+
+       /* Check PHY Address */
+       uc_phy = ethernet_phy_find_valid(p_gmac, uc_phy_addr, 0);
+       if (uc_phy == 0xFF) {
+               return 0;
+       }
+       if (uc_phy != uc_phy_addr) {
+               ethernet_phy_reset(p_gmac, uc_phy_addr);
+       }
+       phy_props.phy_chn = uc_phy;
+       return uc_phy;
+}
+
+
+/**
+ * \brief Get the Link & speed settings, and automatically set up the GMAC with the
+ * settings.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param uc_phy_addr PHY address.
+ * \param uc_apply_setting_flag Set to 0 to not apply the PHY configurations, else to apply.
+ *
+ * Return GMAC_OK if successfully, GMAC_TIMEOUT if timeout.
+ */
+uint8_t ethernet_phy_set_link(Gmac *p_gmac, uint8_t uc_phy_addr,
+               uint8_t uc_apply_setting_flag)
+{
+       uint32_t ul_stat1;
+       uint32_t ul_stat2;
+       uint8_t uc_phy_address, uc_speed = true, uc_fd = true;
+       uint8_t uc_rc = GMAC_TIMEOUT;
+
+       gmac_enable_management(p_gmac, true);
+
+       uc_phy_address = uc_phy_addr;
+
+       uc_rc = gmac_phy_read(p_gmac, uc_phy_address, GMII_BMSR, &ul_stat1);
+       if (uc_rc != GMAC_OK) {
+               /* Disable PHY management and start the GMAC transfer */
+               gmac_enable_management(p_gmac, false);
+
+               return uc_rc;
+       }
+       if ((ul_stat1 & GMII_LINK_STATUS) == 0) {
+               /* Disable PHY management and start the GMAC transfer */
+               gmac_enable_management(p_gmac, false);
+
+               return GMAC_INVALID;
+       }
+
+       if (uc_apply_setting_flag == 0) {
+               /* Disable PHY management and start the GMAC transfer */
+               gmac_enable_management(p_gmac, false);
+
+               return uc_rc;
+       }
+
+       /* Read advertisement */
+       uc_rc = gmac_phy_read(p_gmac, uc_phy_address, GMII_ANAR, &ul_stat2);
+phy_props.phy_stat1 = ul_stat1;
+phy_props.phy_stat2 = ul_stat2;
+       if (uc_rc != GMAC_OK) {
+               /* Disable PHY management and start the GMAC transfer */
+               gmac_enable_management(p_gmac, false);
+
+               return uc_rc;
+       }
+
+       if ((ul_stat1 & GMII_100BASE_TX_FD) && (ul_stat2 & GMII_100TX_FDX)) {
+               /* Set GMAC for 100BaseTX and Full Duplex */
+               uc_speed = true;
+               uc_fd = true;
+       } else
+       if ((ul_stat1 & GMII_100BASE_T4_HD) && (ul_stat2 & GMII_100TX_HDX)) {
+               /* Set MII for 100BaseTX and Half Duplex */
+               uc_speed = true;
+               uc_fd = false;
+       } else
+       if ((ul_stat1 & GMII_10BASE_T_FD) && (ul_stat2 & GMII_10_FDX)) {
+               /* Set MII for 10BaseT and Full Duplex */
+               uc_speed = false;
+               uc_fd = true;
+       } else
+       if ((ul_stat1 & GMII_10BASE_T_HD) && (ul_stat2 & GMII_10_HDX)) {
+               /* Set MII for 10BaseT and Half Duplex */
+               uc_speed = false;
+               uc_fd = false;
+       }
+
+       gmac_set_speed(p_gmac, uc_speed);
+       gmac_enable_full_duplex(p_gmac, uc_fd);
+
+       /* Start the GMAC transfers */
+       gmac_enable_management(p_gmac, false);
+       return uc_rc;
+}
+
+PhyProps_t phy_props;
+
+/**
+ * \brief Issue an auto negotiation of the PHY.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param uc_phy_addr PHY address.
+ *
+ * Return GMAC_OK if successfully, GMAC_TIMEOUT if timeout.
+ */
+uint8_t ethernet_phy_auto_negotiate(Gmac *p_gmac, uint8_t uc_phy_addr)
+{
+       uint32_t ul_retry_max = ETH_PHY_RETRY_MAX;
+       uint32_t ul_value;
+       uint32_t ul_phy_anar;
+       uint32_t ul_retry_count = 0;
+       uint8_t uc_speed = 0;
+       uint8_t uc_fd=0;
+       uint8_t uc_rc = GMAC_TIMEOUT;
+
+       gmac_enable_management(p_gmac, true);
+
+       /* Set up control register */
+       uc_rc = gmac_phy_read(p_gmac, uc_phy_addr, GMII_BMCR, &ul_value);
+       if (uc_rc != GMAC_OK) {
+               gmac_enable_management(p_gmac, false);
+phy_props.phy_result = -1;
+               return uc_rc;
+       }
+
+       ul_value &= ~(uint32_t)GMII_AUTONEG; /* Remove auto-negotiation enable */
+       ul_value &= ~(uint32_t)(GMII_LOOPBACK | GMII_POWER_DOWN);
+       ul_value |= (uint32_t)GMII_ISOLATE; /* Electrically isolate PHY */
+       uc_rc = gmac_phy_write(p_gmac, uc_phy_addr, GMII_BMCR, ul_value);
+       if (uc_rc != GMAC_OK) {
+               gmac_enable_management(p_gmac, false);
+phy_props.phy_result = -2;
+               return uc_rc;
+       }
+
+       /*
+        * Set the Auto_negotiation Advertisement Register.
+        * MII advertising for Next page.
+        * 100BaseTxFD and HD, 10BaseTFD and HD, IEEE 802.3.
+        */
+       ul_phy_anar = GMII_100TX_FDX | GMII_100TX_HDX | GMII_10_FDX | GMII_10_HDX |
+                       GMII_AN_IEEE_802_3;
+       uc_rc = gmac_phy_write(p_gmac, uc_phy_addr, GMII_ANAR, ul_phy_anar);
+       if (uc_rc != GMAC_OK) {
+               gmac_enable_management(p_gmac, false);
+phy_props.phy_result = -3;
+               return uc_rc;
+       }
+
+       /* Read & modify control register */
+       uc_rc = gmac_phy_read(p_gmac, uc_phy_addr, GMII_BMCR, &ul_value);
+       if (uc_rc != GMAC_OK) {
+               gmac_enable_management(p_gmac, false);
+phy_props.phy_result = -4;
+               return uc_rc;
+       }
+
+       ul_value |= GMII_SPEED_SELECT | GMII_AUTONEG | GMII_DUPLEX_MODE;
+       uc_rc = gmac_phy_write(p_gmac, uc_phy_addr, GMII_BMCR, ul_value);
+       if (uc_rc != GMAC_OK) {
+               gmac_enable_management(p_gmac, false);
+phy_props.phy_result = -5;
+               return uc_rc;
+       }
+
+       /* Restart auto negotiation */
+       ul_value |= (uint32_t)GMII_RESTART_AUTONEG;
+       ul_value &= ~(uint32_t)GMII_ISOLATE;
+       uc_rc = gmac_phy_write(p_gmac, uc_phy_addr, GMII_BMCR, ul_value);
+       if (uc_rc != GMAC_OK) {
+               gmac_enable_management(p_gmac, false);
+phy_props.phy_result = -6;
+               return uc_rc;
+       }
+
+       /* Check if auto negotiation is completed */
+       while (1) {
+               uc_rc = gmac_phy_read(p_gmac, uc_phy_addr, GMII_BMSR, &ul_value);
+               if (uc_rc != GMAC_OK) {
+                       gmac_enable_management(p_gmac, false);
+phy_props.phy_result = -7;
+                       return uc_rc;
+               }
+               /* Done successfully */
+               if (ul_value & GMII_AUTONEG_COMP) {
+                       break;
+               }
+
+               /* Timeout check */
+               if (ul_retry_max) {
+                       if (++ul_retry_count >= ul_retry_max) {
+                               gmac_enable_management(p_gmac, false);
+phy_props.phy_result = -8;
+                               return GMAC_TIMEOUT;
+                       }
+               }
+       }
+
+       /* Get the auto negotiate link partner base page */
+       uc_rc = gmac_phy_read(p_gmac, uc_phy_addr, GMII_PCR1, &phy_props.phy_params);
+       if (uc_rc != GMAC_OK) {
+               gmac_enable_management(p_gmac, false);
+phy_props.phy_result = -9;
+               return uc_rc;
+       }
+
+
+       /* Set up the GMAC link speed */
+       if ((ul_phy_anar & phy_props.phy_params) & GMII_100TX_FDX) {
+               /* Set MII for 100BaseTX and Full Duplex */
+               uc_speed = true;
+               uc_fd = true;
+       } else if ((ul_phy_anar & phy_props.phy_params) & GMII_10_FDX) {
+               /* Set MII for 10BaseT and Full Duplex */
+               uc_speed = false;
+               uc_fd = true;
+       } else if ((ul_phy_anar & phy_props.phy_params) & GMII_100TX_HDX) {
+               /* Set MII for 100BaseTX and half Duplex */
+               uc_speed = true;
+               uc_fd = false;
+       } else if ((ul_phy_anar & phy_props.phy_params) & GMII_10_HDX) {
+               /* Set MII for 10BaseT and half Duplex */
+               uc_speed = false;
+               uc_fd = false;
+       }
+
+       gmac_set_speed(p_gmac, uc_speed);
+       gmac_enable_full_duplex(p_gmac, uc_fd);
+
+       /* Select Media Independent Interface type */
+       gmac_select_mii_mode(p_gmac, ETH_PHY_MODE);
+
+       gmac_enable_transmit(GMAC, true);
+       gmac_enable_receive(GMAC, true);
+
+       gmac_enable_management(p_gmac, false);
+phy_props.phy_result = 1;
+       return uc_rc;
+}
+
+/**
+ * \brief Issue a SW reset to reset all registers of the PHY.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param uc_phy_addr PHY address.
+ *
+ * \Return GMAC_OK if successfully, GMAC_TIMEOUT if timeout.
+ */
+uint8_t ethernet_phy_reset(Gmac *p_gmac, uint8_t uc_phy_addr)
+{
+       uint32_t ul_bmcr = GMII_RESET;
+       uint8_t uc_phy_address = uc_phy_addr;
+       uint32_t ul_timeout = ETH_PHY_TIMEOUT;
+       uint8_t uc_rc = GMAC_TIMEOUT;
+
+       gmac_enable_management(p_gmac, true);
+
+       ul_bmcr = GMII_RESET;
+       gmac_phy_write(p_gmac, uc_phy_address, GMII_BMCR, ul_bmcr);
+
+       do {
+               gmac_phy_read(p_gmac, uc_phy_address, GMII_BMCR, &ul_bmcr);
+               ul_timeout--;
+       } while ((ul_bmcr & GMII_RESET) && ul_timeout);
+
+       gmac_enable_management(p_gmac, false);
+
+       if (!ul_timeout) {
+               uc_rc = GMAC_OK;
+       }
+
+       return (uc_rc);
+}
+
+/// @cond 0
+/**INDENT-OFF**/
+#ifdef __cplusplus
+}
+#endif
+/**INDENT-ON**/
+/// @endcond
+
+/**
+ * \}
+ */
index 8ea5fa0c720aac048405c24158e80f3e5814cf43..6729df0fe280f7d1c2ff2102c1a825139deab11d 100644 (file)
-/**\r
- * \file\r
- *\r
- * \brief KSZ8051MNL (Ethernet PHY) driver for SAM.\r
- *\r
- * Copyright (c) 2013 Atmel Corporation. All rights reserved.\r
- *\r
- * \asf_license_start\r
- *\r
- * \page License\r
- *\r
- * Redistribution and use in source and binary forms, with or without\r
- * modification, are permitted provided that the following conditions are met:\r
- *\r
- * 1. Redistributions of source code must retain the above copyright notice,\r
- *    this list of conditions and the following disclaimer.\r
- *\r
- * 2. Redistributions in binary form must reproduce the above copyright notice,\r
- *    this list of conditions and the following disclaimer in the documentation\r
- *    and/or other materials provided with the distribution.\r
- *\r
- * 3. The name of Atmel may not be used to endorse or promote products derived\r
- *    from this software without specific prior written permission.\r
- *\r
- * 4. This software may only be redistributed and used in connection with an\r
- *    Atmel microcontroller product.\r
- *\r
- * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED\r
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
- * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR\r
- * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\r
- * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\r
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
- * POSSIBILITY OF SUCH DAMAGE.\r
- *\r
- * \asf_license_stop\r
- *\r
- */\r
-\r
-#ifndef ETHERNET_PHY_H_INCLUDED\r
-#define ETHERNET_PHY_H_INCLUDED\r
-\r
-#include "compiler.h"\r
-\r
-#ifdef __cplusplus\r
-extern "C" {\r
-#endif\r
-\r
-// IEEE defined Registers\r
-#define GMII_BMCR        0x00   // Basic Control\r
-#define GMII_BMSR        0x01   // Basic Status\r
-#define GMII_PHYID1      0x02   // PHY Idendifier 1\r
-#define GMII_PHYID2      0x03   // PHY Idendifier 2\r
-#define GMII_ANAR        0x04   // Auto_Negotiation Advertisement\r
-#define GMII_ANLPAR      0x05   // Auto_negotiation Link Partner Ability\r
-#define GMII_ANER        0x06   // Auto-negotiation Expansion\r
-#define GMII_ANNPR       0x07   // Auto-negotiation Next Page\r
-#define GMII_ANLPNPAR    0x08   // Link Partner Next Page Ability\r
-//#define GMII_1000BTCR    9   // 1000Base-T Control  // Reserved\r
-//#define GMII_1000BTSR   10   // 1000Base-T Status   // Reserved\r
-#define GMII_AFECR1        0x11   // AFE Control 1\r
-//#define GMII_ERDWR      12   // Extend Register - Data Write Register\r
-//#define GMII_ERDRR      13   // Extend Register - Data Read Register\r
-//14    reserved\r
-#define GMII_RXERCR        0x15   // RXER Counter\r
-\r
-       #define PHY_REG_01_BMSR            0x01 // Basic mode status register\r
-       #define PHY_REG_02_PHYSID1         0x02 // PHYS ID 1\r
-       #define PHY_REG_03_PHYSID2         0x03 // PHYS ID 2\r
-       #define PHY_REG_04_ADVERTISE       0x04 // Advertisement control reg\r
-       #define PHY_REG_05_LPA             0x05 // Link partner ability reg\r
-       #define PHY_REG_06_ANER            0x06 //      6       RW              Auto-Negotiation Expansion Register\r
-       #define PHY_REG_07_ANNPTR          0x07 //      7       RW              Auto-Negotiation Next Page TX\r
-       #define PHY_REG_08_RESERVED0       0x08 // 0x08..0x0Fh  8-15    RW              RESERVED\r
-\r
-       #define PHY_REG_10_PHYSTS     0x10      // 16   RO              PHY Status Register\r
-       #define PHY_REG_11_MICR       0x11      // 17   RW              MII Interrupt Control Register\r
-       #define PHY_REG_12_MISR       0x12      // 18   RO              MII Interrupt Status Register\r
-       #define PHY_REG_13_RESERVED1  0x13      // 19   RW              RESERVED\r
-       #define PHY_REG_14_FCSCR      0x14      // 20   RO              False Carrier Sense Counter Register\r
-       #define PHY_REG_15_RECR       0x15      // 21   RO              Receive Error Counter Register\r
-       #define PHY_REG_16_PCSR       0x16      // 22   RW              PCS Sub-Layer Configuration and Status Register\r
-       #define PHY_REG_17_RBR        0x17      // 23   RW              RMII and Bypass Register\r
-       #define PHY_REG_18_LEDCR      0x18      // 24   RW              LED Direct Control Register\r
-       #define PHY_REG_19_PHYCR      0x19      // 25   RW              PHY Control Register\r
-       #define PHY_REG_1A_10BTSCR    0x1A      // 26   RW              10Base-T Status/Control Register\r
-       #define PHY_REG_1B_CDCTRL1    0x1B      // 27   RW              CD Test Control Register and BIST Extensions Register\r
-       #define PHY_REG_1B_INT_CTRL   0x1B      // 27   RW              KSZ8041NL interrupt control\r
-       #define PHY_REG_1C_RESERVED2  0x1C      // 28   RW              RESERVED\r
-       #define PHY_REG_1D_EDCR       0x1D      // 29   RW              Energy Detect Control Register\r
-       #define PHY_REG_1E_RESERVED3  0x1E      //\r
-       #define PHY_REG_1F_RESERVED4  0x1F      // 30-31        RW              RESERVED\r
-\r
-       #define PHY_REG_1E_PHYCR_1    0x1E      //\r
-       #define PHY_REG_1F_PHYCR_2    0x1F      //\r
-\r
-       #define PHY_SPEED_10       1\r
-       #define PHY_SPEED_100      2\r
-       #define PHY_SPEED_AUTO     (PHY_SPEED_10|PHY_SPEED_100)\r
-\r
-       #define PHY_MDIX_DIRECT    1\r
-       #define PHY_MDIX_CROSSED   2\r
-       #define PHY_MDIX_AUTO      (PHY_MDIX_CROSSED|PHY_MDIX_DIRECT)\r
-\r
-       #define PHY_DUPLEX_HALF    1\r
-       #define PHY_DUPLEX_FULL    2\r
-       #define PHY_DUPLEX_AUTO    (PHY_DUPLEX_FULL|PHY_DUPLEX_HALF)\r
-\r
-       typedef struct _SPhyProps {\r
-               unsigned char speed;\r
-               unsigned char mdix;\r
-               unsigned char duplex;\r
-               unsigned char spare;\r
-       } SPhyProps;\r
-\r
-       const char *phyPrintable (const SPhyProps *apProps);\r
-\r
-       extern SPhyProps phyProps;\r
-\r
-#define GMII_OMSOR        0x16   // Operation Mode Strap Override\r
-#define GMII_OMSSR       0x17   // Operation Mode Strap Status\r
-#define GMII_ECR      0x18   // Expanded Control\r
-//#define GMII_DPPSR      19   // Digital PMA/PCS Status\r
-//20    reserved\r
-//#define GMII_RXERCR     21   // RXER Counter Register\r
-//22-26 reserved\r
-#define GMII_ICSR        0x1B   // Interrupt Control/Status\r
-//#define GMII_DDC1R       28   // Digital Debug Control 1 Register\r
-#define GMII_LCSR        0x1D   // LinkMD Control/Status\r
-\r
-//29-30 reserved\r
-#define GMII_PCR1       0x1E   // PHY Control 1\r
-#define GMII_PCR2       0x1F   // PHY Control 2\r
-\r
-/*\r
-//Extend Registers\r
-#define GMII_CCR        256  // Common Control Register\r
-#define GMII_SSR        257  // Strap Status Register\r
-#define GMII_OMSOR      258  // Operation Mode Strap Override Register\r
-#define GMII_OMSSR      259  // Operation Mode Strap Status Register\r
-#define GMII_RCCPSR     260  // RGMII Clock and Control Pad Skew Register\r
-#define GMII_RRDPSR     261  // RGMII RX Data Pad Skew Register\r
-#define GMII_ATR        263  // Analog Test Register\r
-*/\r
-\r
-\r
-// Bit definitions: GMII_BMCR 0x00 Basic Control\r
-#define GMII_RESET             (1 << 15) // 1= Software Reset; 0=Normal Operation\r
-#define GMII_LOOPBACK          (1 << 14) // 1=loopback Enabled; 0=Normal Operation\r
-#define GMII_SPEED_SELECT      (1 << 13) // 1=100Mbps; 0=10Mbps\r
-#define GMII_AUTONEG           (1 << 12) // Auto-negotiation Enable\r
-#define GMII_POWER_DOWN        (1 << 11) // 1=Power down 0=Normal operation\r
-#define GMII_ISOLATE           (1 << 10) // 1 = Isolates 0 = Normal operation\r
-#define GMII_RESTART_AUTONEG   (1 << 9)  // 1 = Restart auto-negotiation 0 = Normal operation\r
-#define GMII_DUPLEX_MODE       (1 << 8)  // 1 = Full duplex operation 0 = Normal operation\r
-#define GMII_COLLISION_TEST    (1 << 7)  // 1 = Enable COL test; 0 = Disable COL test\r
-//#define GMII_SPEED_SELECT_MSB  (1 << 6)  // Reserved\r
-//      Reserved                6 to 0   // Read as 0, ignore on write\r
-\r
-// Bit definitions: GMII_BMSR 0x01 Basic Status\r
-#define GMII_100BASE_T4        (1 << 15) // 100BASE-T4 Capable\r
-#define GMII_100BASE_TX_FD     (1 << 14) // 100BASE-TX Full Duplex Capable\r
-#define GMII_100BASE_T4_HD     (1 << 13) // 100BASE-TX Half Duplex Capable\r
-#define GMII_10BASE_T_FD       (1 << 12) // 10BASE-T Full Duplex Capable\r
-#define GMII_10BASE_T_HD       (1 << 11) // 10BASE-T Half Duplex Capable\r
-//      Reserved                10 to79  // Read as 0, ignore on write\r
-//#define GMII_EXTEND_STATUS     (1 << 8)  // 1 = Extend Status Information In Reg 15\r
-//      Reserved                7\r
-#define GMII_MF_PREAMB_SUPPR   (1 << 6)  // MII Frame Preamble Suppression\r
-#define GMII_AUTONEG_COMP      (1 << 5)  // Auto-negotiation Complete\r
-#define GMII_REMOTE_FAULT      (1 << 4)  // Remote Fault\r
-#define GMII_AUTONEG_ABILITY   (1 << 3)  // Auto Configuration Ability\r
-#define GMII_LINK_STATUS       (1 << 2)  // Link Status\r
-#define GMII_JABBER_DETECT     (1 << 1)  // Jabber Detect\r
-#define GMII_EXTEND_CAPAB      (1 << 0)  // Extended Capability\r
-\r
-\r
-// Bit definitions: GMII_PHYID1 0x02 PHY Idendifier 1\r
-// Bit definitions: GMII_PHYID2 0x03 PHY Idendifier 2\r
-#define GMII_LSB_MASK           0x3F\r
-#define GMII_OUI_MSB            0x0022\r
-#define GMII_OUI_LSB            0x05\r
-\r
-\r
-// Bit definitions: GMII_ANAR   0x04 Auto_Negotiation Advertisement\r
-// Bit definitions: GMII_ANLPAR 0x05 Auto_negotiation Link Partner Ability\r
-#define GMII_NP               (1 << 15) // Next page Indication\r
-//      Reserved               7\r
-#define GMII_RF               (1 << 13) // Remote Fault\r
-//      Reserved               12       // Write as 0, ignore on read\r
-#define GMII_PAUSE_MASK       (3 << 11) // 0,0 = No Pause 1,0 = Asymmetric Pause(link partner)\r
-                                        // 0,1 = Symmetric Pause 1,1 = Symmetric&Asymmetric Pause(local device)\r
-#define GMII_100T4               (1 << 9)  // 100BASE-T4 Support\r
-#define GMII_100TX_FDX           (1 << 8)  // 100BASE-TX Full Duplex Support\r
-#define GMII_100TX_HDX           (1 << 7)  // 100BASE-TX Support\r
-#define GMII_10_FDX           (1 << 6)  // 10BASE-T Full Duplex Support\r
-#define GMII_10_HDX           (1 << 5)  // 10BASE-T Support\r
-//      Selector                 4 to 0   // Protocol Selection Bits\r
-#define GMII_AN_IEEE_802_3      0x0001    // [00001] = IEEE 802.3\r
-\r
-\r
-// Bit definitions: GMII_ANER 0x06 Auto-negotiation Expansion\r
-//      Reserved                15 to 5  // Read as 0, ignore on write\r
-#define GMII_PDF              (1 << 4) // Local Device Parallel Detection Fault\r
-#define GMII_LP_NP_ABLE       (1 << 3) // Link Partner Next Page Able\r
-#define GMII_NP_ABLE          (1 << 2) // Local Device Next Page Able\r
-#define GMII_PAGE_RX          (1 << 1) // New Page Received\r
-#define GMII_LP_AN_ABLE       (1 << 0) // Link Partner Auto-negotiation Able\r
-\r
-/**\r
- * \brief Perform a HW initialization to the PHY and set up clocks.\r
- *\r
- * This should be called only once to initialize the PHY pre-settings.\r
- * The PHY address is the reset status of CRS, RXD[3:0] (the GmacPins' pullups).\r
- * The COL pin is used to select MII mode on reset (pulled up for Reduced MII).\r
- * The RXDV pin is used to select test mode on reset (pulled up for test mode).\r
- * The above pins should be predefined for corresponding settings in resetPins.\r
- * The GMAC peripheral pins are configured after the reset is done.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param uc_phy_addr PHY address.\r
- * \param ul_mck GMAC MCK.\r
- *\r
- * Return GMAC_OK if successfully, GMAC_TIMEOUT if timeout.\r
- */\r
-uint8_t ethernet_phy_init(Gmac *p_gmac, uint8_t uc_phy_addr, uint32_t ul_mck);\r
-\r
-\r
-/**\r
- * \brief Get the Link & speed settings, and automatically set up the GMAC with the\r
- * settings.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param uc_phy_addr PHY address.\r
- * \param uc_apply_setting_flag Set to 0 to not apply the PHY configurations, else to apply.\r
- *\r
- * Return GMAC_OK if successfully, GMAC_TIMEOUT if timeout.\r
- */\r
-uint8_t ethernet_phy_set_link(Gmac *p_gmac, uint8_t uc_phy_addr,\r
-               uint8_t uc_apply_setting_flag);\r
-\r
-\r
-/**\r
- * \brief Issue an auto negotiation of the PHY.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param uc_phy_addr PHY address.\r
- *\r
- * Return GMAC_OK if successfully, GMAC_TIMEOUT if timeout.\r
- */\r
-uint8_t ethernet_phy_auto_negotiate(Gmac *p_gmac, uint8_t uc_phy_addr);\r
-\r
-/**\r
- * \brief Issue a SW reset to reset all registers of the PHY.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param uc_phy_addr PHY address.\r
- *\r
- * \Return GMAC_OK if successfully, GMAC_TIMEOUT if timeout.\r
- */\r
-uint8_t ethernet_phy_reset(Gmac *p_gmac, uint8_t uc_phy_addr);\r
-\r
-typedef struct xPHY_PROPS {\r
-       signed char phy_result;\r
-       uint32_t phy_params;\r
-       uint32_t phy_stat1;\r
-       uint32_t phy_stat2;\r
-       unsigned char phy_chn;\r
-} PhyProps_t;\r
-extern PhyProps_t phy_props;\r
-\r
-#ifdef __cplusplus\r
-} /* extern "C" */\r
-#endif\r
-\r
-#endif /* #ifndef ETHERNET_PHY_H_INCLUDED */\r
-\r
+/**
+ * \file
+ *
+ * \brief KSZ8051MNL (Ethernet PHY) driver for SAM.
+ *
+ * Copyright (c) 2013 Atmel Corporation. All rights reserved.
+ *
+ * \asf_license_start
+ *
+ * \page License
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ *
+ * 3. The name of Atmel may not be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * 4. This software may only be redistributed and used in connection with an
+ *    Atmel microcontroller product.
+ *
+ * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
+ * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * \asf_license_stop
+ *
+ */
+
+#ifndef ETHERNET_PHY_H_INCLUDED
+#define ETHERNET_PHY_H_INCLUDED
+
+#include "compiler.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// IEEE defined Registers
+#define GMII_BMCR        0x00   // Basic Control
+#define GMII_BMSR        0x01   // Basic Status
+#define GMII_PHYID1      0x02   // PHY Idendifier 1
+#define GMII_PHYID2      0x03   // PHY Idendifier 2
+#define GMII_ANAR        0x04   // Auto_Negotiation Advertisement
+#define GMII_ANLPAR      0x05   // Auto_negotiation Link Partner Ability
+#define GMII_ANER        0x06   // Auto-negotiation Expansion
+#define GMII_ANNPR       0x07   // Auto-negotiation Next Page
+#define GMII_ANLPNPAR    0x08   // Link Partner Next Page Ability
+//#define GMII_1000BTCR    9   // 1000Base-T Control  // Reserved
+//#define GMII_1000BTSR   10   // 1000Base-T Status   // Reserved
+#define GMII_AFECR1        0x11   // AFE Control 1
+//#define GMII_ERDWR      12   // Extend Register - Data Write Register
+//#define GMII_ERDRR      13   // Extend Register - Data Read Register
+//14    reserved
+#define GMII_RXERCR        0x15   // RXER Counter
+
+       #define PHY_REG_01_BMSR            0x01 // Basic mode status register
+       #define PHY_REG_02_PHYSID1         0x02 // PHYS ID 1
+       #define PHY_REG_03_PHYSID2         0x03 // PHYS ID 2
+       #define PHY_REG_04_ADVERTISE       0x04 // Advertisement control reg
+       #define PHY_REG_05_LPA             0x05 // Link partner ability reg
+       #define PHY_REG_06_ANER            0x06 //      6       RW              Auto-Negotiation Expansion Register
+       #define PHY_REG_07_ANNPTR          0x07 //      7       RW              Auto-Negotiation Next Page TX
+       #define PHY_REG_08_RESERVED0       0x08 // 0x08..0x0Fh  8-15    RW              RESERVED
+
+       #define PHY_REG_10_PHYSTS     0x10      // 16   RO              PHY Status Register
+       #define PHY_REG_11_MICR       0x11      // 17   RW              MII Interrupt Control Register
+       #define PHY_REG_12_MISR       0x12      // 18   RO              MII Interrupt Status Register
+       #define PHY_REG_13_RESERVED1  0x13      // 19   RW              RESERVED
+       #define PHY_REG_14_FCSCR      0x14      // 20   RO              False Carrier Sense Counter Register
+       #define PHY_REG_15_RECR       0x15      // 21   RO              Receive Error Counter Register
+       #define PHY_REG_16_PCSR       0x16      // 22   RW              PCS Sub-Layer Configuration and Status Register
+       #define PHY_REG_17_RBR        0x17      // 23   RW              RMII and Bypass Register
+       #define PHY_REG_18_LEDCR      0x18      // 24   RW              LED Direct Control Register
+       #define PHY_REG_19_PHYCR      0x19      // 25   RW              PHY Control Register
+       #define PHY_REG_1A_10BTSCR    0x1A      // 26   RW              10Base-T Status/Control Register
+       #define PHY_REG_1B_CDCTRL1    0x1B      // 27   RW              CD Test Control Register and BIST Extensions Register
+       #define PHY_REG_1B_INT_CTRL   0x1B      // 27   RW              KSZ8041NL interrupt control
+       #define PHY_REG_1C_RESERVED2  0x1C      // 28   RW              RESERVED
+       #define PHY_REG_1D_EDCR       0x1D      // 29   RW              Energy Detect Control Register
+       #define PHY_REG_1E_RESERVED3  0x1E      //
+       #define PHY_REG_1F_RESERVED4  0x1F      // 30-31        RW              RESERVED
+
+       #define PHY_REG_1E_PHYCR_1    0x1E      //
+       #define PHY_REG_1F_PHYCR_2    0x1F      //
+
+       #define PHY_SPEED_10       1
+       #define PHY_SPEED_100      2
+       #define PHY_SPEED_AUTO     (PHY_SPEED_10|PHY_SPEED_100)
+
+       #define PHY_MDIX_DIRECT    1
+       #define PHY_MDIX_CROSSED   2
+       #define PHY_MDIX_AUTO      (PHY_MDIX_CROSSED|PHY_MDIX_DIRECT)
+
+       #define PHY_DUPLEX_HALF    1
+       #define PHY_DUPLEX_FULL    2
+       #define PHY_DUPLEX_AUTO    (PHY_DUPLEX_FULL|PHY_DUPLEX_HALF)
+
+       typedef struct _SPhyProps {
+               unsigned char speed;
+               unsigned char mdix;
+               unsigned char duplex;
+               unsigned char spare;
+       } SPhyProps;
+
+       const char *phyPrintable (const SPhyProps *apProps);
+
+       extern SPhyProps phyProps;
+
+#define GMII_OMSOR        0x16   // Operation Mode Strap Override
+#define GMII_OMSSR       0x17   // Operation Mode Strap Status
+#define GMII_ECR      0x18   // Expanded Control
+//#define GMII_DPPSR      19   // Digital PMA/PCS Status
+//20    reserved
+//#define GMII_RXERCR     21   // RXER Counter Register
+//22-26 reserved
+#define GMII_ICSR        0x1B   // Interrupt Control/Status
+//#define GMII_DDC1R       28   // Digital Debug Control 1 Register
+#define GMII_LCSR        0x1D   // LinkMD Control/Status
+
+//29-30 reserved
+#define GMII_PCR1       0x1E   // PHY Control 1
+#define GMII_PCR2       0x1F   // PHY Control 2
+
+/*
+//Extend Registers
+#define GMII_CCR        256  // Common Control Register
+#define GMII_SSR        257  // Strap Status Register
+#define GMII_OMSOR      258  // Operation Mode Strap Override Register
+#define GMII_OMSSR      259  // Operation Mode Strap Status Register
+#define GMII_RCCPSR     260  // RGMII Clock and Control Pad Skew Register
+#define GMII_RRDPSR     261  // RGMII RX Data Pad Skew Register
+#define GMII_ATR        263  // Analog Test Register
+*/
+
+
+// Bit definitions: GMII_BMCR 0x00 Basic Control
+#define GMII_RESET             (1 << 15) // 1= Software Reset; 0=Normal Operation
+#define GMII_LOOPBACK          (1 << 14) // 1=loopback Enabled; 0=Normal Operation
+#define GMII_SPEED_SELECT      (1 << 13) // 1=100Mbps; 0=10Mbps
+#define GMII_AUTONEG           (1 << 12) // Auto-negotiation Enable
+#define GMII_POWER_DOWN        (1 << 11) // 1=Power down 0=Normal operation
+#define GMII_ISOLATE           (1 << 10) // 1 = Isolates 0 = Normal operation
+#define GMII_RESTART_AUTONEG   (1 << 9)  // 1 = Restart auto-negotiation 0 = Normal operation
+#define GMII_DUPLEX_MODE       (1 << 8)  // 1 = Full duplex operation 0 = Normal operation
+#define GMII_COLLISION_TEST    (1 << 7)  // 1 = Enable COL test; 0 = Disable COL test
+//#define GMII_SPEED_SELECT_MSB  (1 << 6)  // Reserved
+//      Reserved                6 to 0   // Read as 0, ignore on write
+
+// Bit definitions: GMII_BMSR 0x01 Basic Status
+#define GMII_100BASE_T4        (1 << 15) // 100BASE-T4 Capable
+#define GMII_100BASE_TX_FD     (1 << 14) // 100BASE-TX Full Duplex Capable
+#define GMII_100BASE_T4_HD     (1 << 13) // 100BASE-TX Half Duplex Capable
+#define GMII_10BASE_T_FD       (1 << 12) // 10BASE-T Full Duplex Capable
+#define GMII_10BASE_T_HD       (1 << 11) // 10BASE-T Half Duplex Capable
+//      Reserved                10 to79  // Read as 0, ignore on write
+//#define GMII_EXTEND_STATUS     (1 << 8)  // 1 = Extend Status Information In Reg 15
+//      Reserved                7
+#define GMII_MF_PREAMB_SUPPR   (1 << 6)  // MII Frame Preamble Suppression
+#define GMII_AUTONEG_COMP      (1 << 5)  // Auto-negotiation Complete
+#define GMII_REMOTE_FAULT      (1 << 4)  // Remote Fault
+#define GMII_AUTONEG_ABILITY   (1 << 3)  // Auto Configuration Ability
+#define GMII_LINK_STATUS       (1 << 2)  // Link Status
+#define GMII_JABBER_DETECT     (1 << 1)  // Jabber Detect
+#define GMII_EXTEND_CAPAB      (1 << 0)  // Extended Capability
+
+
+// Bit definitions: GMII_PHYID1 0x02 PHY Idendifier 1
+// Bit definitions: GMII_PHYID2 0x03 PHY Idendifier 2
+#define GMII_LSB_MASK           0x3F
+#define GMII_OUI_MSB            0x0022
+#define GMII_OUI_LSB            0x05
+
+
+// Bit definitions: GMII_ANAR   0x04 Auto_Negotiation Advertisement
+// Bit definitions: GMII_ANLPAR 0x05 Auto_negotiation Link Partner Ability
+#define GMII_NP               (1 << 15) // Next page Indication
+//      Reserved               7
+#define GMII_RF               (1 << 13) // Remote Fault
+//      Reserved               12       // Write as 0, ignore on read
+#define GMII_PAUSE_MASK       (3 << 11) // 0,0 = No Pause 1,0 = Asymmetric Pause(link partner)
+                                        // 0,1 = Symmetric Pause 1,1 = Symmetric&Asymmetric Pause(local device)
+#define GMII_100T4               (1 << 9)  // 100BASE-T4 Support
+#define GMII_100TX_FDX           (1 << 8)  // 100BASE-TX Full Duplex Support
+#define GMII_100TX_HDX           (1 << 7)  // 100BASE-TX Support
+#define GMII_10_FDX           (1 << 6)  // 10BASE-T Full Duplex Support
+#define GMII_10_HDX           (1 << 5)  // 10BASE-T Support
+//      Selector                 4 to 0   // Protocol Selection Bits
+#define GMII_AN_IEEE_802_3      0x0001    // [00001] = IEEE 802.3
+
+
+// Bit definitions: GMII_ANER 0x06 Auto-negotiation Expansion
+//      Reserved                15 to 5  // Read as 0, ignore on write
+#define GMII_PDF              (1 << 4) // Local Device Parallel Detection Fault
+#define GMII_LP_NP_ABLE       (1 << 3) // Link Partner Next Page Able
+#define GMII_NP_ABLE          (1 << 2) // Local Device Next Page Able
+#define GMII_PAGE_RX          (1 << 1) // New Page Received
+#define GMII_LP_AN_ABLE       (1 << 0) // Link Partner Auto-negotiation Able
+
+/**
+ * \brief Perform a HW initialization to the PHY and set up clocks.
+ *
+ * This should be called only once to initialize the PHY pre-settings.
+ * The PHY address is the reset status of CRS, RXD[3:0] (the GmacPins' pullups).
+ * The COL pin is used to select MII mode on reset (pulled up for Reduced MII).
+ * The RXDV pin is used to select test mode on reset (pulled up for test mode).
+ * The above pins should be predefined for corresponding settings in resetPins.
+ * The GMAC peripheral pins are configured after the reset is done.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param uc_phy_addr PHY address.
+ * \param ul_mck GMAC MCK.
+ *
+ * Return GMAC_OK if successfully, GMAC_TIMEOUT if timeout.
+ */
+uint8_t ethernet_phy_init(Gmac *p_gmac, uint8_t uc_phy_addr, uint32_t ul_mck);
+
+
+/**
+ * \brief Get the Link & speed settings, and automatically set up the GMAC with the
+ * settings.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param uc_phy_addr PHY address.
+ * \param uc_apply_setting_flag Set to 0 to not apply the PHY configurations, else to apply.
+ *
+ * Return GMAC_OK if successfully, GMAC_TIMEOUT if timeout.
+ */
+uint8_t ethernet_phy_set_link(Gmac *p_gmac, uint8_t uc_phy_addr,
+               uint8_t uc_apply_setting_flag);
+
+
+/**
+ * \brief Issue an auto negotiation of the PHY.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param uc_phy_addr PHY address.
+ *
+ * Return GMAC_OK if successfully, GMAC_TIMEOUT if timeout.
+ */
+uint8_t ethernet_phy_auto_negotiate(Gmac *p_gmac, uint8_t uc_phy_addr);
+
+/**
+ * \brief Issue a SW reset to reset all registers of the PHY.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param uc_phy_addr PHY address.
+ *
+ * \Return GMAC_OK if successfully, GMAC_TIMEOUT if timeout.
+ */
+uint8_t ethernet_phy_reset(Gmac *p_gmac, uint8_t uc_phy_addr);
+
+typedef struct xPHY_PROPS {
+       signed char phy_result;
+       uint32_t phy_params;
+       uint32_t phy_stat1;
+       uint32_t phy_stat2;
+       unsigned char phy_chn;
+} PhyProps_t;
+extern PhyProps_t phy_props;
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* #ifndef ETHERNET_PHY_H_INCLUDED */
+
index 948f9a661be10d631f958fb6fff813e81fb12ee4..e4a3ba988a3dc745b6eaf9a01ba7b2ca259f8dd5 100644 (file)
- /**\r
- * \file\r
- *\r
- * \brief GMAC (Ethernet MAC) driver for SAM.\r
- *\r
- * Copyright (c) 2013 Atmel Corporation. All rights reserved.\r
- *\r
- * \asf_license_start\r
- *\r
- * \page License\r
- *\r
- * Redistribution and use in source and binary forms, with or without\r
- * modification, are permitted provided that the following conditions are met:\r
- *\r
- * 1. Redistributions of source code must retain the above copyright notice,\r
- *    this list of conditions and the following disclaimer.\r
- *\r
- * 2. Redistributions in binary form must reproduce the above copyright notice,\r
- *    this list of conditions and the following disclaimer in the documentation\r
- *    and/or other materials provided with the distribution.\r
- *\r
- * 3. The name of Atmel may not be used to endorse or promote products derived\r
- *    from this software without specific prior written permission.\r
- *\r
- * 4. This software may only be redistributed and used in connection with an\r
- *    Atmel microcontroller product.\r
- *\r
- * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED\r
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
- * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR\r
- * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\r
- * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\r
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
- * POSSIBILITY OF SUCH DAMAGE.\r
- *\r
- * \asf_license_stop\r
- *\r
- */\r
-\r
-/* Standard includes. */\r
-#include <stdint.h>\r
-#include <stdio.h>\r
-#include <string.h>\r
-#include <stdlib.h>\r
-\r
-/* FreeRTOS includes. */\r
-#include "FreeRTOS.h"\r
-#include "task.h"\r
-\r
-#include "FreeRTOSIPConfig.h"\r
-\r
-#include "compiler.h"\r
-#include "instance/gmac.h"\r
-#include "ethernet_phy.h"\r
-\r
-/// @cond 0\r
-/**INDENT-OFF**/\r
-#ifdef __cplusplus\r
-extern "C" {\r
-#endif\r
-/**INDENT-ON**/\r
-/// @endcond\r
-\r
-#ifndef ARRAY_SIZE\r
-#define ARRAY_SIZE(x)  (int)( sizeof(x) / sizeof(x)[0] )\r
-#endif\r
-/**\r
- * \defgroup gmac_group Ethernet Media Access Controller\r
- *\r
- * See \ref gmac_quickstart.\r
- *\r
- * Driver for the GMAC (Ethernet Media Access Controller).\r
- * This file contains basic functions for the GMAC, with support for all modes, settings\r
- * and clock speeds.\r
- *\r
- * \section dependencies Dependencies\r
- * This driver does not depend on other modules.\r
- *\r
- * @{\r
- */\r
-\r
-/** TX descriptor lists */\r
-COMPILER_ALIGNED(8)\r
-static gmac_tx_descriptor_t gs_tx_desc[ GMAC_TX_BUFFERS ];\r
-#if( GMAC_USES_TX_CALLBACK != 0 )\r
-/** TX callback lists */\r
-static gmac_dev_tx_cb_t gs_tx_callback[ GMAC_TX_BUFFERS ];\r
-#endif\r
-/** RX descriptors lists */\r
-COMPILER_ALIGNED(8)\r
-static gmac_rx_descriptor_t gs_rx_desc[ GMAC_RX_BUFFERS ];\r
-\r
-#if( ipconfigZERO_COPY_TX_DRIVER == 0 )\r
-       /** Send Buffer. Section 3.6 of AMBA 2.0 spec states that burst should not cross the\r
-        * 1K Boundaries. Receive buffer manager write operations are burst of 2 words => 3 lsb bits\r
-        * of the address shall be set to 0.\r
-        */\r
-       COMPILER_ALIGNED(8)\r
-       static uint8_t gs_uc_tx_buffer[ GMAC_TX_BUFFERS * GMAC_TX_UNITSIZE ];\r
-#endif /* ipconfigZERO_COPY_TX_DRIVER */\r
-\r
-/** Receive Buffer */\r
-COMPILER_ALIGNED(8)\r
-static uint8_t gs_uc_rx_buffer[ GMAC_RX_BUFFERS * GMAC_RX_UNITSIZE ];\r
-\r
-/**\r
- * GMAC device memory management struct.\r
- */\r
-typedef struct gmac_dev_mem {\r
-       /* Pointer to allocated buffer for RX. The address should be 8-byte aligned\r
-       and the size should be GMAC_RX_UNITSIZE * wRxSize. */\r
-       uint8_t *p_rx_buffer;\r
-       /* Pointer to allocated RX descriptor list. */\r
-       gmac_rx_descriptor_t *p_rx_dscr;\r
-       /* RX size, in number of registered units (RX descriptors). */\r
-       /* Increased size from 16- to 32-bits, because it's more efficient */\r
-       uint32_t us_rx_size;\r
-       /* Pointer to allocated buffer for TX. The address should be 8-byte aligned\r
-       and the size should be GMAC_TX_UNITSIZE * wTxSize. */\r
-       uint8_t *p_tx_buffer;\r
-       /* Pointer to allocated TX descriptor list. */\r
-       gmac_tx_descriptor_t *p_tx_dscr;\r
-       /* TX size, in number of registered units (TX descriptors). */\r
-       uint32_t us_tx_size;\r
-} gmac_dev_mem_t;\r
-\r
-/** Return count in buffer */\r
-#define CIRC_CNT( head, tail, size )           ( ( ( head ) - ( tail ) ) % ( size ) )\r
-\r
-/*\r
- * Return space available, from 0 to size-1.\r
- * Always leave one free char as a completely full buffer that has (head == tail),\r
- * which is the same as empty.\r
- */\r
-#define CIRC_SPACE( head, tail, size )         CIRC_CNT( ( tail ), ( ( head ) + 1 ), ( size ) )\r
-\r
-/** Circular buffer is empty ? */\r
-#define CIRC_EMPTY( head, tail )                       ( head == tail )\r
-/** Clear circular buffer */\r
-#define CIRC_CLEAR( head, tail )                       do { ( head ) = 0; ( tail ) = 0; } while( 0 )\r
-\r
-/** Increment head or tail */\r
-static __inline void circ_inc32( int32_t *lHeadOrTail, uint32_t ulSize )\r
-{\r
-       ( *lHeadOrTail ) ++;\r
-    if( ( *lHeadOrTail ) >= ( int32_t )ulSize )\r
-       {\r
-               ( *lHeadOrTail ) = 0;\r
-       }\r
-}\r
-\r
-/**\r
- * \brief Wait PHY operation to be completed.\r
- *\r
- * \param p_gmac HW controller address.\r
- * \param ul_retry The retry times, 0 to wait forever until completeness.\r
- *\r
- * Return GMAC_OK if the operation is completed successfully.\r
- */\r
-static uint8_t gmac_wait_phy(Gmac* p_gmac, const uint32_t ul_retry)\r
-{\r
-       volatile uint32_t ul_retry_count = 0;\r
-       const uint32_t xPHYPollDelay = pdMS_TO_TICKS( 1ul );\r
-\r
-       while (!gmac_is_phy_idle(p_gmac)) {\r
-               if (ul_retry == 0) {\r
-                       continue;\r
-               }\r
-\r
-               ul_retry_count++;\r
-\r
-               if (ul_retry_count >= ul_retry) {\r
-                       return GMAC_TIMEOUT;\r
-               }\r
-\r
-               /* Block the task to allow other tasks to execute while the PHY\r
-               is not connected. */\r
-               vTaskDelay( xPHYPollDelay );\r
-       }\r
-       return GMAC_OK;\r
-}\r
-\r
-/**\r
- * \brief Disable transfer, reset registers and descriptor lists.\r
- *\r
- * \param p_dev Pointer to GMAC driver instance.\r
- *\r
- */\r
-static void gmac_reset_tx_mem(gmac_device_t* p_dev)\r
-{\r
-       Gmac *p_hw = p_dev->p_hw;\r
-       uint8_t *p_tx_buff = p_dev->p_tx_buffer;\r
-       gmac_tx_descriptor_t *p_td = p_dev->p_tx_dscr;\r
-\r
-       uint32_t ul_index;\r
-       uint32_t ul_address;\r
-\r
-       /* Disable TX */\r
-       gmac_enable_transmit(p_hw, 0);\r
-\r
-       /* Set up the TX descriptors */\r
-       CIRC_CLEAR(p_dev->l_tx_head, p_dev->l_tx_tail);\r
-       for( ul_index = 0; ul_index < p_dev->ul_tx_list_size; ul_index++ )\r
-       {\r
-               #if( ipconfigZERO_COPY_TX_DRIVER != 0 )\r
-               {\r
-                       ul_address = (uint32_t) 0u;\r
-               }\r
-               #else\r
-               {\r
-                       ul_address = (uint32_t) (&(p_tx_buff[ul_index * GMAC_TX_UNITSIZE]));\r
-               }\r
-               #endif /* ipconfigZERO_COPY_TX_DRIVER */\r
-               p_td[ul_index].addr = ul_address;\r
-               p_td[ul_index].status.val = GMAC_TXD_USED;\r
-       }\r
-       p_td[p_dev->ul_tx_list_size - 1].status.val =\r
-                       GMAC_TXD_USED | GMAC_TXD_WRAP;\r
-\r
-       /* Set transmit buffer queue */\r
-       gmac_set_tx_queue(p_hw, (uint32_t) p_td);\r
-}\r
-\r
-/**\r
- * \brief Disable receiver, reset registers and descriptor list.\r
- *\r
- * \param p_drv Pointer to GMAC Driver instance.\r
- */\r
-static void gmac_reset_rx_mem(gmac_device_t* p_dev)\r
-{\r
-       Gmac *p_hw = p_dev->p_hw;\r
-       uint8_t *p_rx_buff = p_dev->p_rx_buffer;\r
-       gmac_rx_descriptor_t *pRd = p_dev->p_rx_dscr;\r
-\r
-       uint32_t ul_index;\r
-       uint32_t ul_address;\r
-\r
-       /* Disable RX */\r
-       gmac_enable_receive(p_hw, 0);\r
-\r
-       /* Set up the RX descriptors */\r
-       p_dev->ul_rx_idx = 0;\r
-       for( ul_index = 0; ul_index < p_dev->ul_rx_list_size; ul_index++ )\r
-       {\r
-               ul_address = (uint32_t) (&(p_rx_buff[ul_index * GMAC_RX_UNITSIZE]));\r
-               pRd[ul_index].addr.val = ul_address & GMAC_RXD_ADDR_MASK;\r
-               pRd[ul_index].status.val = 0;\r
-       }\r
-       pRd[p_dev->ul_rx_list_size - 1].addr.val |= GMAC_RXD_WRAP;\r
-\r
-       /* Set receive buffer queue */\r
-       gmac_set_rx_queue(p_hw, (uint32_t) pRd);\r
-}\r
-\r
-\r
-/**\r
- * \brief Initialize the allocated buffer lists for GMAC driver to transfer data.\r
- * Must be invoked after gmac_dev_init() but before RX/TX starts.\r
- *\r
- * \note If input address is not 8-byte aligned, the address is automatically\r
- *       adjusted and the list size is reduced by one.\r
- *\r
- * \param p_gmac Pointer to GMAC instance.\r
- * \param p_gmac_dev Pointer to GMAC device instance.\r
- * \param p_dev_mm Pointer to the GMAC memory management control block.\r
- * \param p_tx_cb Pointer to allocated TX callback list.\r
- *\r
- * \return GMAC_OK or GMAC_PARAM.\r
- */\r
-static uint8_t gmac_init_mem(Gmac* p_gmac, gmac_device_t* p_gmac_dev,\r
-               gmac_dev_mem_t* p_dev_mm\r
-#if( GMAC_USES_TX_CALLBACK != 0 )\r
-               , gmac_dev_tx_cb_t* p_tx_cb\r
-#endif\r
-               )\r
-{\r
-       if (p_dev_mm->us_rx_size <= 1 || p_dev_mm->us_tx_size <= 1\r
-#if( GMAC_USES_TX_CALLBACK != 0 )\r
-               || p_tx_cb == NULL\r
-#endif\r
-               ) {\r
-               return GMAC_PARAM;\r
-       }\r
-\r
-       /* Assign RX buffers */\r
-       if (((uint32_t) p_dev_mm->p_rx_buffer & 0x7)\r
-                       || ((uint32_t) p_dev_mm->p_rx_dscr & 0x7)) {\r
-               p_dev_mm->us_rx_size--;\r
-       }\r
-       p_gmac_dev->p_rx_buffer =\r
-                       (uint8_t *) ((uint32_t) p_dev_mm->p_rx_buffer & 0xFFFFFFF8);\r
-       p_gmac_dev->p_rx_dscr =\r
-                       (gmac_rx_descriptor_t *) ((uint32_t) p_dev_mm->p_rx_dscr\r
-                       & 0xFFFFFFF8);\r
-       p_gmac_dev->ul_rx_list_size = p_dev_mm->us_rx_size;\r
-\r
-       /* Assign TX buffers */\r
-       if (((uint32_t) p_dev_mm->p_tx_buffer & 0x7)\r
-                       || ((uint32_t) p_dev_mm->p_tx_dscr & 0x7)) {\r
-               p_dev_mm->us_tx_size--;\r
-       }\r
-       p_gmac_dev->p_tx_buffer =\r
-                       (uint8_t *) ((uint32_t) p_dev_mm->p_tx_buffer & 0xFFFFFFF8);\r
-       p_gmac_dev->p_tx_dscr =\r
-                       (gmac_tx_descriptor_t *) ((uint32_t) p_dev_mm->p_tx_dscr\r
-                       & 0xFFFFFFF8);\r
-       p_gmac_dev->ul_tx_list_size = p_dev_mm->us_tx_size;\r
-#if( GMAC_USES_TX_CALLBACK != 0 )\r
-       p_gmac_dev->func_tx_cb_list = p_tx_cb;\r
-#endif\r
-       /* Reset TX & RX */\r
-       gmac_reset_rx_mem(p_gmac_dev);\r
-       gmac_reset_tx_mem(p_gmac_dev);\r
-\r
-       /* Enable Rx and Tx, plus the statistics register */\r
-       gmac_enable_transmit(p_gmac, true);\r
-       gmac_enable_receive(p_gmac, true);\r
-       gmac_enable_statistics_write(p_gmac, true);\r
-\r
-       /* Set up the interrupts for transmission and errors */\r
-       gmac_enable_interrupt(p_gmac,\r
-                       GMAC_IER_RXUBR | /* Enable receive used bit read interrupt. */\r
-                       GMAC_IER_TUR   | /* Enable transmit underrun interrupt. */\r
-                       GMAC_IER_RLEX  | /* Enable retry limit  exceeded interrupt. */\r
-                       GMAC_IER_TFC   | /* Enable transmit buffers exhausted in mid-frame interrupt. */\r
-                       GMAC_IER_TCOMP | /* Enable transmit complete interrupt. */\r
-                       GMAC_IER_ROVR  | /* Enable receive overrun interrupt. */\r
-                       GMAC_IER_HRESP | /* Enable Hresp not OK interrupt. */\r
-                       GMAC_IER_PFNZ  | /* Enable pause frame received interrupt. */\r
-                       GMAC_IER_PTZ);   /* Enable pause time zero interrupt. */\r
-\r
-       return GMAC_OK;\r
-}\r
-\r
-/**\r
- * \brief Read the PHY register.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param uc_phy_address PHY address.\r
- * \param uc_address Register address.\r
- * \param p_value Pointer to a 32-bit location to store read data.\r
- *\r
- * \Return GMAC_OK if successfully, GMAC_TIMEOUT if timeout.\r
- */\r
-uint8_t gmac_phy_read(Gmac* p_gmac, uint8_t uc_phy_address, uint8_t uc_address,\r
-               uint32_t* p_value)\r
-{\r
-       gmac_maintain_phy(p_gmac, uc_phy_address, uc_address, 1, 0);\r
-\r
-       if (gmac_wait_phy(p_gmac, MAC_PHY_RETRY_MAX) == GMAC_TIMEOUT) {\r
-               return GMAC_TIMEOUT;\r
-       }\r
-       *p_value = gmac_get_phy_data(p_gmac);\r
-       return GMAC_OK;\r
-}\r
-\r
-/**\r
- * \brief Write the PHY register.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param uc_phy_address PHY Address.\r
- * \param uc_address Register Address.\r
- * \param ul_value Data to write, actually 16-bit data.\r
- *\r
- * \Return GMAC_OK if successfully, GMAC_TIMEOUT if timeout.\r
- */\r
-uint8_t gmac_phy_write(Gmac* p_gmac, uint8_t uc_phy_address,\r
-               uint8_t uc_address, uint32_t ul_value)\r
-{\r
-       gmac_maintain_phy(p_gmac, uc_phy_address, uc_address, 0, ul_value);\r
-\r
-       if (gmac_wait_phy(p_gmac, MAC_PHY_RETRY_MAX) == GMAC_TIMEOUT) {\r
-               return GMAC_TIMEOUT;\r
-       }\r
-       return GMAC_OK;\r
-}\r
-\r
-/**\r
- * \brief Initialize the GMAC driver.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param p_gmac_dev Pointer to the GMAC device instance.\r
- * \param p_opt GMAC configure options.\r
- */\r
-void gmac_dev_init(Gmac* p_gmac, gmac_device_t* p_gmac_dev,\r
-               gmac_options_t* p_opt)\r
-{\r
-       gmac_dev_mem_t gmac_dev_mm;\r
-\r
-       /* Disable TX & RX and more */\r
-       gmac_network_control(p_gmac, 0);\r
-       gmac_disable_interrupt(p_gmac, ~0u);\r
-\r
-\r
-       gmac_clear_statistics(p_gmac);\r
-\r
-       /* Clear all status bits in the receive status register. */\r
-       gmac_clear_rx_status(p_gmac, GMAC_RSR_RXOVR | GMAC_RSR_REC | GMAC_RSR_BNA);\r
-\r
-       /* Clear all status bits in the transmit status register */\r
-       gmac_clear_tx_status(p_gmac, GMAC_TSR_UBR | GMAC_TSR_COL | GMAC_TSR_RLE\r
-                       | GMAC_TSR_TFC | GMAC_TSR_TXCOMP | GMAC_TSR_UND);\r
-\r
-       /* Clear interrupts */\r
-       gmac_get_interrupt_status(p_gmac);\r
-#if !defined(ETHERNET_CONF_DATA_OFFSET)\r
-       /*  Receive Buffer Offset\r
-        * Indicates the number of bytes by which the received data\r
-        * is offset from the start of the receive buffer\r
-        * which can be handy for alignment reasons */\r
-       /* Note: FreeRTOS+TCP wants to have this offset set to 2 bytes */\r
-       #error ETHERNET_CONF_DATA_OFFSET not defined, assuming 0\r
-#endif\r
-       /* Enable the copy of data into the buffers\r
-          ignore broadcasts, and not copy FCS. */\r
-\r
-       gmac_set_configure(p_gmac,\r
-                       ( gmac_get_configure(p_gmac) & ~GMAC_NCFGR_RXBUFO_Msk ) |\r
-                       GMAC_NCFGR_RFCS |   /*  Remove FCS, frame check sequence (last 4 bytes) */\r
-                       GMAC_NCFGR_PEN |    /* Pause Enable */\r
-                       GMAC_NCFGR_RXBUFO( ETHERNET_CONF_DATA_OFFSET ) |\r
-                       GMAC_RXD_RXCOEN );\r
-\r
-       /*\r
-        * GMAC_DCFGR_TXCOEN: (GMAC_DCFGR) Transmitter Checksum Generation Offload Enable.\r
-        * Note: tha SAM4E does have RX checksum offloading\r
-        * but TX checksum offloading has NOT been implemented.\r
-        */\r
-\r
-       gmac_set_dma(p_gmac,\r
-                       gmac_get_dma(p_gmac) | GMAC_DCFGR_TXCOEN );\r
-\r
-       gmac_enable_copy_all(p_gmac, p_opt->uc_copy_all_frame);\r
-       gmac_disable_broadcast(p_gmac, p_opt->uc_no_boardcast);\r
-\r
-       /* Fill in GMAC device memory management */\r
-       gmac_dev_mm.p_rx_buffer = gs_uc_rx_buffer;\r
-       gmac_dev_mm.p_rx_dscr = gs_rx_desc;\r
-       gmac_dev_mm.us_rx_size = GMAC_RX_BUFFERS;\r
-\r
-       #if( ipconfigZERO_COPY_TX_DRIVER != 0 )\r
-       {\r
-               gmac_dev_mm.p_tx_buffer = NULL;\r
-       }\r
-       #else\r
-       {\r
-               gmac_dev_mm.p_tx_buffer = gs_uc_tx_buffer;\r
-       }\r
-       #endif\r
-       gmac_dev_mm.p_tx_dscr = gs_tx_desc;\r
-       gmac_dev_mm.us_tx_size = GMAC_TX_BUFFERS;\r
-\r
-       gmac_init_mem(p_gmac, p_gmac_dev, &gmac_dev_mm\r
-#if( GMAC_USES_TX_CALLBACK != 0 )\r
-               , gs_tx_callback\r
-#endif\r
-               );\r
-\r
-       gmac_set_address(p_gmac, 0, p_opt->uc_mac_addr);\r
-}\r
-\r
-/**\r
- * \brief Frames can be read from the GMAC in multiple sections.\r
- *\r
- * Returns > 0 if a complete frame is available\r
- * It also it cleans up incomplete older frames\r
- */\r
-\r
-static uint32_t gmac_dev_poll(gmac_device_t* p_gmac_dev)\r
-{\r
-       uint32_t ulReturn = 0;\r
-       int32_t ulIndex = p_gmac_dev->ul_rx_idx;\r
-       gmac_rx_descriptor_t *pxHead = &p_gmac_dev->p_rx_dscr[ulIndex];\r
-\r
-       /* Discard any incomplete frames */\r
-       while ((pxHead->addr.val & GMAC_RXD_OWNERSHIP) &&\r
-                       (pxHead->status.val & GMAC_RXD_SOF) == 0) {\r
-               pxHead->addr.val &= ~(GMAC_RXD_OWNERSHIP);\r
-               circ_inc32 (&ulIndex, p_gmac_dev->ul_rx_list_size);\r
-               pxHead = &p_gmac_dev->p_rx_dscr[ulIndex];\r
-               p_gmac_dev->ul_rx_idx = ulIndex;\r
-               #if( GMAC_STATS != 0 )\r
-               {\r
-                       gmacStats.incompCount++;\r
-               }\r
-               #endif\r
-       }\r
-\r
-       while ((pxHead->addr.val & GMAC_RXD_OWNERSHIP) != 0) {\r
-               if ((pxHead->status.val & GMAC_RXD_EOF) != 0) {\r
-                       /* Here a complete frame has been seen with SOF and EOF */\r
-                       ulReturn = pxHead->status.bm.len;\r
-                       break;\r
-               }\r
-               circ_inc32 (&ulIndex, p_gmac_dev->ul_rx_list_size);\r
-               pxHead = &p_gmac_dev->p_rx_dscr[ulIndex];\r
-               if ((pxHead->addr.val & GMAC_RXD_OWNERSHIP) == 0) {\r
-                       /* CPU is not the owner (yet) */\r
-                       break;\r
-               }\r
-               if ((pxHead->status.val & GMAC_RXD_SOF) != 0) {\r
-                       /* Strange, we found a new Start Of Frame\r
-                        * discard previous segments */\r
-                       int32_t ulPrev = p_gmac_dev->ul_rx_idx;\r
-                       pxHead = &p_gmac_dev->p_rx_dscr[ulPrev];\r
-                       do {\r
-                               pxHead->addr.val &= ~(GMAC_RXD_OWNERSHIP);\r
-                               circ_inc32 (&ulPrev, p_gmac_dev->ul_rx_list_size);\r
-                               pxHead = &p_gmac_dev->p_rx_dscr[ulPrev];\r
-                               #if( GMAC_STATS != 0 )\r
-                               {\r
-                                       gmacStats.truncCount++;\r
-                               }\r
-                               #endif\r
-                       } while (ulPrev != ulIndex);\r
-                       p_gmac_dev->ul_rx_idx = ulIndex;\r
-               }\r
-       }\r
-       return ulReturn;\r
-}\r
-\r
-/**\r
- * \brief Frames can be read from the GMAC in multiple sections.\r
- * Read ul_frame_size bytes from the GMAC receive buffers to pcTo.\r
- * p_rcv_size is the size of the entire frame.  Generally gmac_read\r
- * will be repeatedly called until the sum of all the ul_frame_size equals\r
- * the value of p_rcv_size.\r
- *\r
- * \param p_gmac_dev Pointer to the GMAC device instance.\r
- * \param p_frame Address of the frame buffer.\r
- * \param ul_frame_size  Length of the frame.\r
- * \param p_rcv_size   Received frame size.\r
- *\r
- * \return GMAC_OK if receiving frame successfully, otherwise failed.\r
- */\r
-uint32_t gmac_dev_read(gmac_device_t* p_gmac_dev, uint8_t* p_frame,\r
-               uint32_t ul_frame_size, uint32_t* p_rcv_size)\r
-{\r
-       int32_t nextIdx;        /* A copy of the Rx-index 'ul_rx_idx' */\r
-       int32_t bytesLeft = gmac_dev_poll (p_gmac_dev);\r
-       gmac_rx_descriptor_t *pxHead;\r
-\r
-       if (bytesLeft == 0 )\r
-       {\r
-               return GMAC_RX_NULL;\r
-       }\r
-\r
-       /* gmac_dev_poll has confirmed that there is a complete frame at\r
-        * the current position 'ul_rx_idx'\r
-        */\r
-       nextIdx = p_gmac_dev->ul_rx_idx;\r
-\r
-       /* Read +2 bytes because buffers are aligned at -2 bytes */\r
-       bytesLeft = min( bytesLeft + 2, ( int32_t )ul_frame_size );\r
-\r
-       /* The frame will be copied in 1 or 2 memcpy's */\r
-       if( ( p_frame != NULL ) && ( bytesLeft != 0 ) )\r
-       {\r
-       const uint8_t *source;\r
-       int32_t left;\r
-       int32_t toCopy;\r
-\r
-               source = p_gmac_dev->p_rx_buffer + nextIdx * GMAC_RX_UNITSIZE;\r
-               left = bytesLeft;\r
-               toCopy = ( p_gmac_dev->ul_rx_list_size - nextIdx ) * GMAC_RX_UNITSIZE;\r
-               if(toCopy > left )\r
-               {\r
-                       toCopy = left;\r
-               }\r
-               memcpy (p_frame, source, toCopy);\r
-               left -= toCopy;\r
-\r
-               if( left != 0ul )\r
-               {\r
-                       memcpy (p_frame + toCopy, (void*)p_gmac_dev->p_rx_buffer, left);\r
-               }\r
-       }\r
-\r
-       do\r
-       {\r
-               pxHead = &p_gmac_dev->p_rx_dscr[nextIdx];\r
-               pxHead->addr.val &= ~(GMAC_RXD_OWNERSHIP);\r
-               circ_inc32 (&nextIdx, p_gmac_dev->ul_rx_list_size);\r
-       } while ((pxHead->status.val & GMAC_RXD_EOF) == 0);\r
-\r
-       p_gmac_dev->ul_rx_idx = nextIdx;\r
-\r
-       *p_rcv_size = bytesLeft;\r
-\r
-       return GMAC_OK;\r
-}\r
-\r
-\r
-extern void vGMACGenerateChecksum( uint8_t *apBuffer );\r
-\r
-/**\r
- * \brief Send ulLength bytes from pcFrom. This copies the buffer to one of the\r
- * GMAC Tx buffers, and then indicates to the GMAC that the buffer is ready.\r
- * If lEndOfFrame is true then the data being copied is the end of the frame\r
- * and the frame can be transmitted.\r
- *\r
- * \param p_gmac_dev Pointer to the GMAC device instance.\r
- * \param p_buffer       Pointer to the data buffer.\r
- * \param ul_size    Length of the frame.\r
- * \param func_tx_cb  Transmit callback function.\r
- *\r
- * \return Length sent.\r
- */\r
-uint32_t gmac_dev_write(gmac_device_t* p_gmac_dev, void *p_buffer,\r
-               uint32_t ul_size, gmac_dev_tx_cb_t func_tx_cb)\r
-{\r
-\r
-       volatile gmac_tx_descriptor_t *p_tx_td;\r
-#if( GMAC_USES_TX_CALLBACK != 0 )\r
-       volatile gmac_dev_tx_cb_t *p_func_tx_cb;\r
-#endif\r
-\r
-       Gmac *p_hw = p_gmac_dev->p_hw;\r
-\r
-#if( GMAC_USES_TX_CALLBACK == 0 )\r
-       ( void )func_tx_cb;\r
-#endif\r
-\r
-       /* Check parameter */\r
-       if (ul_size > GMAC_TX_UNITSIZE) {\r
-               return GMAC_PARAM;\r
-       }\r
-\r
-       /* Pointers to the current transmit descriptor */\r
-       p_tx_td = &p_gmac_dev->p_tx_dscr[p_gmac_dev->l_tx_head];\r
-\r
-       /* If no free TxTd, buffer can't be sent, schedule the wakeup callback */\r
-//     if (CIRC_SPACE(p_gmac_dev->l_tx_head, p_gmac_dev->l_tx_tail,\r
-//                                     p_gmac_dev->ul_tx_list_size) == 0)\r
-       {\r
-               if ((p_tx_td->status.val & GMAC_TXD_USED) == 0)\r
-                       return GMAC_TX_BUSY;\r
-       }\r
-#if( GMAC_USES_TX_CALLBACK != 0 )\r
-       /* Pointers to the current Tx callback */\r
-       p_func_tx_cb = &p_gmac_dev->func_tx_cb_list[p_gmac_dev->l_tx_head];\r
-#endif\r
-\r
-       /* Set up/copy data to transmission buffer */\r
-       if (p_buffer && ul_size) {\r
-               /* Driver manages the ring buffer */\r
-               /* Calculating the checksum here is faster than calculating it from the GMAC buffer\r
-                * because withing p_buffer, it is well aligned */\r
-               #if( ipconfigZERO_COPY_TX_DRIVER != 0 )\r
-               {\r
-                       /* Zero-copy... */\r
-                       p_tx_td->addr = ( uint32_t ) p_buffer;\r
-               }\r
-               #else\r
-               {\r
-                       /* Or Memcopy... */\r
-                       memcpy((void *)p_tx_td->addr, p_buffer, ul_size);\r
-               }\r
-               #endif /* ipconfigZERO_COPY_TX_DRIVER */\r
-               vGMACGenerateChecksum( ( uint8_t * ) p_tx_td->addr );\r
-       }\r
-\r
-#if( GMAC_USES_TX_CALLBACK != 0 )\r
-       /* Tx callback */\r
-       *p_func_tx_cb = func_tx_cb;\r
-#endif\r
-\r
-       /* Update transmit descriptor status */\r
-\r
-       /* The buffer size defined is the length of ethernet frame,\r
-          so it's always the last buffer of the frame. */\r
-       if( p_gmac_dev->l_tx_head == ( int32_t )( p_gmac_dev->ul_tx_list_size - 1 ) )\r
-       {\r
-               /* No need to 'and' with GMAC_TXD_LEN_MASK because ul_size has been checked */\r
-               p_tx_td->status.val =\r
-                       ul_size | GMAC_TXD_LAST | GMAC_TXD_WRAP;\r
-       } else {\r
-               p_tx_td->status.val =\r
-                       ul_size | GMAC_TXD_LAST;\r
-       }\r
-\r
-       circ_inc32( &p_gmac_dev->l_tx_head, p_gmac_dev->ul_tx_list_size );\r
-\r
-       /* Now start to transmit if it is still not done */\r
-       gmac_start_transmission(p_hw);\r
-\r
-       return GMAC_OK;\r
-}\r
-\r
-/**\r
- * \brief Get current load of transmit.\r
- *\r
- * \param p_gmac_dev Pointer to the GMAC device instance.\r
- *\r
- * \return Current load of transmit.\r
- */\r
-#if( GMAC_USES_TX_CALLBACK != 0 )\r
-/* Without defining GMAC_USES_TX_CALLBACK, l_tx_tail won't be updated */\r
-uint32_t gmac_dev_get_tx_load(gmac_device_t* p_gmac_dev)\r
-{\r
-       uint16_t us_head = p_gmac_dev->l_tx_head;\r
-       uint16_t us_tail = p_gmac_dev->l_tx_tail;\r
-       return CIRC_CNT(us_head, us_tail, p_gmac_dev->ul_tx_list_size);\r
-}\r
-#endif\r
-\r
-/**\r
- * \brief Register/Clear RX callback. Callback will be invoked after the next received\r
- * frame.\r
- *\r
- * When gmac_dev_read() returns GMAC_RX_NULL, the application task calls\r
- * gmac_dev_set_rx_callback() to register func_rx_cb() callback and enters suspend state.\r
- * The callback is in charge to resume the task once a new frame has been\r
- * received. The next time gmac_dev_read() is called, it will be successful.\r
- *\r
- * This function is usually invoked from the RX callback itself with NULL\r
- * callback, to unregister. Once the callback has resumed the application task,\r
- * there is no need to invoke the callback again.\r
- *\r
- * \param p_gmac_dev Pointer to the GMAC device instance.\r
- * \param func_tx_cb  Receive callback function.\r
- */\r
-void gmac_dev_set_rx_callback(gmac_device_t* p_gmac_dev,\r
-               gmac_dev_rx_cb_t func_rx_cb)\r
-{\r
-       Gmac *p_hw = p_gmac_dev->p_hw;\r
-\r
-       if (func_rx_cb == NULL) {\r
-               gmac_disable_interrupt(p_hw, GMAC_IDR_RCOMP);\r
-               p_gmac_dev->func_rx_cb = NULL;\r
-       } else {\r
-               p_gmac_dev->func_rx_cb = func_rx_cb;\r
-               gmac_enable_interrupt(p_hw, GMAC_IER_RCOMP);\r
-       }\r
-}\r
-\r
-/**\r
- *  \brief Register/Clear TX wakeup callback.\r
- *\r
- * When gmac_dev_write() returns GMAC_TX_BUSY (all transmit descriptor busy), the application\r
- * task calls gmac_dev_set_tx_wakeup_callback() to register func_wakeup() callback and\r
- * enters suspend state. The callback is in charge to resume the task once\r
- * several transmit descriptors have been released. The next time gmac_dev_write() will be called,\r
- * it shall be successful.\r
- *\r
- * This function is usually invoked with NULL callback from the TX wakeup\r
- * callback itself, to unregister. Once the callback has resumed the\r
- * application task, there is no need to invoke the callback again.\r
- *\r
- * \param p_gmac_dev   Pointer to GMAC device instance.\r
- * \param func_wakeup    Pointer to wakeup callback function.\r
- * \param uc_threshold Number of free transmit descriptor before wakeup callback invoked.\r
- *\r
- * \return GMAC_OK, GMAC_PARAM on parameter error.\r
- */\r
-#if( GMAC_USES_WAKEUP_CALLBACK )\r
-uint8_t gmac_dev_set_tx_wakeup_callback(gmac_device_t* p_gmac_dev,\r
-               gmac_dev_wakeup_cb_t func_wakeup_cb, uint8_t uc_threshold)\r
-{\r
-       if (func_wakeup_cb == NULL) {\r
-               p_gmac_dev->func_wakeup_cb = NULL;\r
-       } else {\r
-               if (uc_threshold <= p_gmac_dev->ul_tx_list_size) {\r
-                       p_gmac_dev->func_wakeup_cb = func_wakeup_cb;\r
-                       p_gmac_dev->uc_wakeup_threshold = uc_threshold;\r
-               } else {\r
-                       return GMAC_PARAM;\r
-               }\r
-       }\r
-\r
-       return GMAC_OK;\r
-}\r
-#endif /* GMAC_USES_WAKEUP_CALLBACK */\r
-\r
-/**\r
- * \brief Reset TX & RX queue & statistics.\r
- *\r
- * \param p_gmac_dev   Pointer to GMAC device instance.\r
- */\r
-void gmac_dev_reset(gmac_device_t* p_gmac_dev)\r
-{\r
-       Gmac *p_hw = p_gmac_dev->p_hw;\r
-\r
-       gmac_reset_rx_mem(p_gmac_dev);\r
-       gmac_reset_tx_mem(p_gmac_dev);\r
-       gmac_network_control(p_hw, GMAC_NCR_TXEN | GMAC_NCR_RXEN\r
-                       | GMAC_NCR_WESTAT | GMAC_NCR_CLRSTAT);\r
-}\r
-\r
-void gmac_dev_halt(Gmac* p_gmac);\r
-\r
-void gmac_dev_halt(Gmac* p_gmac)\r
-{\r
-       gmac_network_control(p_gmac, GMAC_NCR_WESTAT | GMAC_NCR_CLRSTAT);\r
-       gmac_disable_interrupt(p_gmac, ~0u);\r
-}\r
-\r
-\r
-/**\r
- * \brief GMAC Interrupt handler.\r
- *\r
- * \param p_gmac_dev   Pointer to GMAC device instance.\r
- */\r
-\r
-#if( GMAC_STATS != 0 )\r
-       extern int logPrintf( const char *pcFormat, ... );\r
-\r
-       void gmac_show_irq_counts ()\r
-       {\r
-               int index;\r
-               for (index = 0; index < ARRAY_SIZE(intPairs); index++) {\r
-                       if (gmacStats.intStatus[intPairs[index].index]) {\r
-                               logPrintf("%s : %6u\n", intPairs[index].name, gmacStats.intStatus[intPairs[index].index]);\r
-                       }\r
-               }\r
-       }\r
-#endif\r
-\r
-void gmac_handler(gmac_device_t* p_gmac_dev)\r
-{\r
-       Gmac *p_hw = p_gmac_dev->p_hw;\r
-\r
-#if( GMAC_USES_TX_CALLBACK != 0 )\r
-       gmac_tx_descriptor_t *p_tx_td;\r
-       gmac_dev_tx_cb_t *p_tx_cb = NULL;\r
-       uint32_t ul_tx_status_flag;\r
-#endif\r
-#if( GMAC_STATS != 0 )\r
-       int index;\r
-#endif\r
-\r
-       /* volatile */ uint32_t ul_isr;\r
-       /* volatile */ uint32_t ul_rsr;\r
-       /* volatile */ uint32_t ul_tsr;\r
-\r
-       ul_isr = gmac_get_interrupt_status(p_hw);\r
-       ul_rsr = gmac_get_rx_status(p_hw);\r
-       ul_tsr = gmac_get_tx_status(p_hw);\r
-\r
-/*     Why clear bits that are ignored anyway ? */\r
-/*     ul_isr &= ~(gmac_get_interrupt_mask(p_hw) | 0xF8030300); */\r
-       #if( GMAC_STATS != 0 )\r
-       {\r
-               for (index = 0; index < ARRAY_SIZE(intPairs); index++) {\r
-                       if (ul_isr & intPairs[index].mask)\r
-                               gmacStats.intStatus[intPairs[index].index]++;\r
-               }\r
-       }\r
-       #endif /* GMAC_STATS != 0 */\r
-\r
-       /* RX packet */\r
-       if ((ul_isr & GMAC_ISR_RCOMP) || (ul_rsr & (GMAC_RSR_REC|GMAC_RSR_RXOVR|GMAC_RSR_BNA))) {\r
-               /* Clear status */\r
-               gmac_clear_rx_status(p_hw, ul_rsr);\r
-\r
-               if (ul_isr & GMAC_ISR_RCOMP)\r
-                       ul_rsr |= GMAC_RSR_REC;\r
-               /* Invoke callbacks which can be useful to wake op a task */\r
-               if (p_gmac_dev->func_rx_cb) {\r
-                       p_gmac_dev->func_rx_cb(ul_rsr);\r
-               }\r
-       }\r
-\r
-       /* TX packet */\r
-       if ((ul_isr & GMAC_ISR_TCOMP) || (ul_tsr & (GMAC_TSR_TXCOMP|GMAC_TSR_COL|GMAC_TSR_RLE|GMAC_TSR_UND))) {\r
-\r
-#if( GMAC_USES_TX_CALLBACK != 0 )\r
-               ul_tx_status_flag = GMAC_TSR_TXCOMP;\r
-#endif\r
-               /* A frame transmitted */\r
-\r
-               /* Check RLE */\r
-               if (ul_tsr & GMAC_TSR_RLE) {\r
-                       /* Status RLE & Number of discarded buffers */\r
-#if( GMAC_USES_TX_CALLBACK != 0 )\r
-                       ul_tx_status_flag = GMAC_TSR_RLE | CIRC_CNT(p_gmac_dev->l_tx_head,\r
-                                       p_gmac_dev->l_tx_tail, p_gmac_dev->ul_tx_list_size);\r
-                       p_tx_cb = &p_gmac_dev->func_tx_cb_list[p_gmac_dev->l_tx_tail];\r
-#endif\r
-                       gmac_reset_tx_mem(p_gmac_dev);\r
-                       gmac_enable_transmit(p_hw, 1);\r
-               }\r
-               /* Clear status */\r
-               gmac_clear_tx_status(p_hw, ul_tsr);\r
-\r
-#if( GMAC_USES_TX_CALLBACK != 0 )\r
-               if (!CIRC_EMPTY(p_gmac_dev->l_tx_head, p_gmac_dev->l_tx_tail)) {\r
-                       /* Check the buffers */\r
-                       do {\r
-                               p_tx_td = &p_gmac_dev->p_tx_dscr[p_gmac_dev->l_tx_tail];\r
-                               p_tx_cb = &p_gmac_dev->func_tx_cb_list[p_gmac_dev->l_tx_tail];\r
-                               /* Any error? Exit if buffer has not been sent yet */\r
-                               if ((p_tx_td->status.val & GMAC_TXD_USED) == 0) {\r
-                                       break;\r
-                               }\r
-\r
-                               /* Notify upper layer that a packet has been sent */\r
-                               if (*p_tx_cb) {\r
-                                       (*p_tx_cb) (ul_tx_status_flag, (void*)p_tx_td->addr);\r
-                                       #if( ipconfigZERO_COPY_TX_DRIVER != 0 )\r
-                                       {\r
-                                               p_tx_td->addr = 0ul;\r
-                                       }\r
-                                       #endif /* ipconfigZERO_COPY_TX_DRIVER */\r
-                               }\r
-\r
-                               circ_inc32(&p_gmac_dev->l_tx_tail, p_gmac_dev->ul_tx_list_size);\r
-                       } while (CIRC_CNT(p_gmac_dev->l_tx_head, p_gmac_dev->l_tx_tail,\r
-                                                       p_gmac_dev->ul_tx_list_size));\r
-               }\r
-\r
-               if (ul_tsr & GMAC_TSR_RLE) {\r
-                       /* Notify upper layer RLE */\r
-                       if (*p_tx_cb) {\r
-                               (*p_tx_cb) (ul_tx_status_flag, NULL);\r
-                       }\r
-               }\r
-#endif /* GMAC_USES_TX_CALLBACK */\r
-\r
-#if( GMAC_USES_WAKEUP_CALLBACK )\r
-               /* If a wakeup has been scheduled, notify upper layer that it can\r
-                  send other packets, and the sending will be successful. */\r
-               if ((CIRC_SPACE(p_gmac_dev->l_tx_head, p_gmac_dev->l_tx_tail,\r
-                               p_gmac_dev->ul_tx_list_size) >= p_gmac_dev->uc_wakeup_threshold)\r
-                               && p_gmac_dev->func_wakeup_cb) {\r
-                       p_gmac_dev->func_wakeup_cb();\r
-               }\r
-#endif\r
-       }\r
-}\r
-\r
-//@}\r
-\r
-/// @cond 0\r
-/**INDENT-OFF**/\r
-#ifdef __cplusplus\r
-}\r
-#endif\r
-/**INDENT-ON**/\r
-/// @endcond\r
+ /**
+ * \file
+ *
+ * \brief GMAC (Ethernet MAC) driver for SAM.
+ *
+ * Copyright (c) 2013 Atmel Corporation. All rights reserved.
+ *
+ * \asf_license_start
+ *
+ * \page License
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ *
+ * 3. The name of Atmel may not be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * 4. This software may only be redistributed and used in connection with an
+ *    Atmel microcontroller product.
+ *
+ * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
+ * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * \asf_license_stop
+ *
+ */
+
+/* Standard includes. */
+#include <stdint.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+/* FreeRTOS includes. */
+#include "FreeRTOS.h"
+#include "task.h"
+
+#include "FreeRTOSIPConfig.h"
+
+#include "compiler.h"
+#include "instance/gmac.h"
+#include "ethernet_phy.h"
+
+/// @cond 0
+/**INDENT-OFF**/
+#ifdef __cplusplus
+extern "C" {
+#endif
+/**INDENT-ON**/
+/// @endcond
+
+#ifndef ARRAY_SIZE
+#define ARRAY_SIZE(x)  (int)( sizeof(x) / sizeof(x)[0] )
+#endif
+/**
+ * \defgroup gmac_group Ethernet Media Access Controller
+ *
+ * See \ref gmac_quickstart.
+ *
+ * Driver for the GMAC (Ethernet Media Access Controller).
+ * This file contains basic functions for the GMAC, with support for all modes, settings
+ * and clock speeds.
+ *
+ * \section dependencies Dependencies
+ * This driver does not depend on other modules.
+ *
+ * @{
+ */
+
+/** TX descriptor lists */
+COMPILER_ALIGNED(8)
+static gmac_tx_descriptor_t gs_tx_desc[ GMAC_TX_BUFFERS ];
+#if( GMAC_USES_TX_CALLBACK != 0 )
+/** TX callback lists */
+static gmac_dev_tx_cb_t gs_tx_callback[ GMAC_TX_BUFFERS ];
+#endif
+/** RX descriptors lists */
+COMPILER_ALIGNED(8)
+static gmac_rx_descriptor_t gs_rx_desc[ GMAC_RX_BUFFERS ];
+
+#if( ipconfigZERO_COPY_TX_DRIVER == 0 )
+       /** Send Buffer. Section 3.6 of AMBA 2.0 spec states that burst should not cross the
+        * 1K Boundaries. Receive buffer manager write operations are burst of 2 words => 3 lsb bits
+        * of the address shall be set to 0.
+        */
+       COMPILER_ALIGNED(8)
+       static uint8_t gs_uc_tx_buffer[ GMAC_TX_BUFFERS * GMAC_TX_UNITSIZE ];
+#endif /* ipconfigZERO_COPY_TX_DRIVER */
+
+/** Receive Buffer */
+COMPILER_ALIGNED(8)
+static uint8_t gs_uc_rx_buffer[ GMAC_RX_BUFFERS * GMAC_RX_UNITSIZE ];
+
+/**
+ * GMAC device memory management struct.
+ */
+typedef struct gmac_dev_mem {
+       /* Pointer to allocated buffer for RX. The address should be 8-byte aligned
+       and the size should be GMAC_RX_UNITSIZE * wRxSize. */
+       uint8_t *p_rx_buffer;
+       /* Pointer to allocated RX descriptor list. */
+       gmac_rx_descriptor_t *p_rx_dscr;
+       /* RX size, in number of registered units (RX descriptors). */
+       /* Increased size from 16- to 32-bits, because it's more efficient */
+       uint32_t us_rx_size;
+       /* Pointer to allocated buffer for TX. The address should be 8-byte aligned
+       and the size should be GMAC_TX_UNITSIZE * wTxSize. */
+       uint8_t *p_tx_buffer;
+       /* Pointer to allocated TX descriptor list. */
+       gmac_tx_descriptor_t *p_tx_dscr;
+       /* TX size, in number of registered units (TX descriptors). */
+       uint32_t us_tx_size;
+} gmac_dev_mem_t;
+
+/** Return count in buffer */
+#define CIRC_CNT( head, tail, size )           ( ( ( head ) - ( tail ) ) % ( size ) )
+
+/*
+ * Return space available, from 0 to size-1.
+ * Always leave one free char as a completely full buffer that has (head == tail),
+ * which is the same as empty.
+ */
+#define CIRC_SPACE( head, tail, size )         CIRC_CNT( ( tail ), ( ( head ) + 1 ), ( size ) )
+
+/** Circular buffer is empty ? */
+#define CIRC_EMPTY( head, tail )                       ( head == tail )
+/** Clear circular buffer */
+#define CIRC_CLEAR( head, tail )                       do { ( head ) = 0; ( tail ) = 0; } while( 0 )
+
+/** Increment head or tail */
+static __inline void circ_inc32( int32_t *lHeadOrTail, uint32_t ulSize )
+{
+       ( *lHeadOrTail ) ++;
+    if( ( *lHeadOrTail ) >= ( int32_t )ulSize )
+       {
+               ( *lHeadOrTail ) = 0;
+       }
+}
+
+/**
+ * \brief Wait PHY operation to be completed.
+ *
+ * \param p_gmac HW controller address.
+ * \param ul_retry The retry times, 0 to wait forever until completeness.
+ *
+ * Return GMAC_OK if the operation is completed successfully.
+ */
+static uint8_t gmac_wait_phy(Gmac* p_gmac, const uint32_t ul_retry)
+{
+       volatile uint32_t ul_retry_count = 0;
+       const uint32_t xPHYPollDelay = pdMS_TO_TICKS( 1ul );
+
+       while (!gmac_is_phy_idle(p_gmac)) {
+               if (ul_retry == 0) {
+                       continue;
+               }
+
+               ul_retry_count++;
+
+               if (ul_retry_count >= ul_retry) {
+                       return GMAC_TIMEOUT;
+               }
+
+               /* Block the task to allow other tasks to execute while the PHY
+               is not connected. */
+               vTaskDelay( xPHYPollDelay );
+       }
+       return GMAC_OK;
+}
+
+/**
+ * \brief Disable transfer, reset registers and descriptor lists.
+ *
+ * \param p_dev Pointer to GMAC driver instance.
+ *
+ */
+static void gmac_reset_tx_mem(gmac_device_t* p_dev)
+{
+       Gmac *p_hw = p_dev->p_hw;
+       uint8_t *p_tx_buff = p_dev->p_tx_buffer;
+       gmac_tx_descriptor_t *p_td = p_dev->p_tx_dscr;
+
+       uint32_t ul_index;
+       uint32_t ul_address;
+
+       /* Disable TX */
+       gmac_enable_transmit(p_hw, 0);
+
+       /* Set up the TX descriptors */
+       CIRC_CLEAR(p_dev->l_tx_head, p_dev->l_tx_tail);
+       for( ul_index = 0; ul_index < p_dev->ul_tx_list_size; ul_index++ )
+       {
+               #if( ipconfigZERO_COPY_TX_DRIVER != 0 )
+               {
+                       ul_address = (uint32_t) 0u;
+               }
+               #else
+               {
+                       ul_address = (uint32_t) (&(p_tx_buff[ul_index * GMAC_TX_UNITSIZE]));
+               }
+               #endif /* ipconfigZERO_COPY_TX_DRIVER */
+               p_td[ul_index].addr = ul_address;
+               p_td[ul_index].status.val = GMAC_TXD_USED;
+       }
+       p_td[p_dev->ul_tx_list_size - 1].status.val =
+                       GMAC_TXD_USED | GMAC_TXD_WRAP;
+
+       /* Set transmit buffer queue */
+       gmac_set_tx_queue(p_hw, (uint32_t) p_td);
+}
+
+/**
+ * \brief Disable receiver, reset registers and descriptor list.
+ *
+ * \param p_drv Pointer to GMAC Driver instance.
+ */
+static void gmac_reset_rx_mem(gmac_device_t* p_dev)
+{
+       Gmac *p_hw = p_dev->p_hw;
+       uint8_t *p_rx_buff = p_dev->p_rx_buffer;
+       gmac_rx_descriptor_t *pRd = p_dev->p_rx_dscr;
+
+       uint32_t ul_index;
+       uint32_t ul_address;
+
+       /* Disable RX */
+       gmac_enable_receive(p_hw, 0);
+
+       /* Set up the RX descriptors */
+       p_dev->ul_rx_idx = 0;
+       for( ul_index = 0; ul_index < p_dev->ul_rx_list_size; ul_index++ )
+       {
+               ul_address = (uint32_t) (&(p_rx_buff[ul_index * GMAC_RX_UNITSIZE]));
+               pRd[ul_index].addr.val = ul_address & GMAC_RXD_ADDR_MASK;
+               pRd[ul_index].status.val = 0;
+       }
+       pRd[p_dev->ul_rx_list_size - 1].addr.val |= GMAC_RXD_WRAP;
+
+       /* Set receive buffer queue */
+       gmac_set_rx_queue(p_hw, (uint32_t) pRd);
+}
+
+
+/**
+ * \brief Initialize the allocated buffer lists for GMAC driver to transfer data.
+ * Must be invoked after gmac_dev_init() but before RX/TX starts.
+ *
+ * \note If input address is not 8-byte aligned, the address is automatically
+ *       adjusted and the list size is reduced by one.
+ *
+ * \param p_gmac Pointer to GMAC instance.
+ * \param p_gmac_dev Pointer to GMAC device instance.
+ * \param p_dev_mm Pointer to the GMAC memory management control block.
+ * \param p_tx_cb Pointer to allocated TX callback list.
+ *
+ * \return GMAC_OK or GMAC_PARAM.
+ */
+static uint8_t gmac_init_mem(Gmac* p_gmac, gmac_device_t* p_gmac_dev,
+               gmac_dev_mem_t* p_dev_mm
+#if( GMAC_USES_TX_CALLBACK != 0 )
+               , gmac_dev_tx_cb_t* p_tx_cb
+#endif
+               )
+{
+       if (p_dev_mm->us_rx_size <= 1 || p_dev_mm->us_tx_size <= 1
+#if( GMAC_USES_TX_CALLBACK != 0 )
+               || p_tx_cb == NULL
+#endif
+               ) {
+               return GMAC_PARAM;
+       }
+
+       /* Assign RX buffers */
+       if (((uint32_t) p_dev_mm->p_rx_buffer & 0x7)
+                       || ((uint32_t) p_dev_mm->p_rx_dscr & 0x7)) {
+               p_dev_mm->us_rx_size--;
+       }
+       p_gmac_dev->p_rx_buffer =
+                       (uint8_t *) ((uint32_t) p_dev_mm->p_rx_buffer & 0xFFFFFFF8);
+       p_gmac_dev->p_rx_dscr =
+                       (gmac_rx_descriptor_t *) ((uint32_t) p_dev_mm->p_rx_dscr
+                       & 0xFFFFFFF8);
+       p_gmac_dev->ul_rx_list_size = p_dev_mm->us_rx_size;
+
+       /* Assign TX buffers */
+       if (((uint32_t) p_dev_mm->p_tx_buffer & 0x7)
+                       || ((uint32_t) p_dev_mm->p_tx_dscr & 0x7)) {
+               p_dev_mm->us_tx_size--;
+       }
+       p_gmac_dev->p_tx_buffer =
+                       (uint8_t *) ((uint32_t) p_dev_mm->p_tx_buffer & 0xFFFFFFF8);
+       p_gmac_dev->p_tx_dscr =
+                       (gmac_tx_descriptor_t *) ((uint32_t) p_dev_mm->p_tx_dscr
+                       & 0xFFFFFFF8);
+       p_gmac_dev->ul_tx_list_size = p_dev_mm->us_tx_size;
+#if( GMAC_USES_TX_CALLBACK != 0 )
+       p_gmac_dev->func_tx_cb_list = p_tx_cb;
+#endif
+       /* Reset TX & RX */
+       gmac_reset_rx_mem(p_gmac_dev);
+       gmac_reset_tx_mem(p_gmac_dev);
+
+       /* Enable Rx and Tx, plus the statistics register */
+       gmac_enable_transmit(p_gmac, true);
+       gmac_enable_receive(p_gmac, true);
+       gmac_enable_statistics_write(p_gmac, true);
+
+       /* Set up the interrupts for transmission and errors */
+       gmac_enable_interrupt(p_gmac,
+                       GMAC_IER_RXUBR | /* Enable receive used bit read interrupt. */
+                       GMAC_IER_TUR   | /* Enable transmit underrun interrupt. */
+                       GMAC_IER_RLEX  | /* Enable retry limit  exceeded interrupt. */
+                       GMAC_IER_TFC   | /* Enable transmit buffers exhausted in mid-frame interrupt. */
+                       GMAC_IER_TCOMP | /* Enable transmit complete interrupt. */
+                       GMAC_IER_ROVR  | /* Enable receive overrun interrupt. */
+                       GMAC_IER_HRESP | /* Enable Hresp not OK interrupt. */
+                       GMAC_IER_PFNZ  | /* Enable pause frame received interrupt. */
+                       GMAC_IER_PTZ);   /* Enable pause time zero interrupt. */
+
+       return GMAC_OK;
+}
+
+/**
+ * \brief Read the PHY register.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param uc_phy_address PHY address.
+ * \param uc_address Register address.
+ * \param p_value Pointer to a 32-bit location to store read data.
+ *
+ * \Return GMAC_OK if successfully, GMAC_TIMEOUT if timeout.
+ */
+uint8_t gmac_phy_read(Gmac* p_gmac, uint8_t uc_phy_address, uint8_t uc_address,
+               uint32_t* p_value)
+{
+       gmac_maintain_phy(p_gmac, uc_phy_address, uc_address, 1, 0);
+
+       if (gmac_wait_phy(p_gmac, MAC_PHY_RETRY_MAX) == GMAC_TIMEOUT) {
+               return GMAC_TIMEOUT;
+       }
+       *p_value = gmac_get_phy_data(p_gmac);
+       return GMAC_OK;
+}
+
+/**
+ * \brief Write the PHY register.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param uc_phy_address PHY Address.
+ * \param uc_address Register Address.
+ * \param ul_value Data to write, actually 16-bit data.
+ *
+ * \Return GMAC_OK if successfully, GMAC_TIMEOUT if timeout.
+ */
+uint8_t gmac_phy_write(Gmac* p_gmac, uint8_t uc_phy_address,
+               uint8_t uc_address, uint32_t ul_value)
+{
+       gmac_maintain_phy(p_gmac, uc_phy_address, uc_address, 0, ul_value);
+
+       if (gmac_wait_phy(p_gmac, MAC_PHY_RETRY_MAX) == GMAC_TIMEOUT) {
+               return GMAC_TIMEOUT;
+       }
+       return GMAC_OK;
+}
+
+/**
+ * \brief Initialize the GMAC driver.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param p_gmac_dev Pointer to the GMAC device instance.
+ * \param p_opt GMAC configure options.
+ */
+void gmac_dev_init(Gmac* p_gmac, gmac_device_t* p_gmac_dev,
+               gmac_options_t* p_opt)
+{
+       gmac_dev_mem_t gmac_dev_mm;
+
+       /* Disable TX & RX and more */
+       gmac_network_control(p_gmac, 0);
+       gmac_disable_interrupt(p_gmac, ~0u);
+
+
+       gmac_clear_statistics(p_gmac);
+
+       /* Clear all status bits in the receive status register. */
+       gmac_clear_rx_status(p_gmac, GMAC_RSR_RXOVR | GMAC_RSR_REC | GMAC_RSR_BNA);
+
+       /* Clear all status bits in the transmit status register */
+       gmac_clear_tx_status(p_gmac, GMAC_TSR_UBR | GMAC_TSR_COL | GMAC_TSR_RLE
+                       | GMAC_TSR_TFC | GMAC_TSR_TXCOMP | GMAC_TSR_UND);
+
+       /* Clear interrupts */
+       gmac_get_interrupt_status(p_gmac);
+#if !defined(ETHERNET_CONF_DATA_OFFSET)
+       /*  Receive Buffer Offset
+        * Indicates the number of bytes by which the received data
+        * is offset from the start of the receive buffer
+        * which can be handy for alignment reasons */
+       /* Note: FreeRTOS+TCP wants to have this offset set to 2 bytes */
+       #error ETHERNET_CONF_DATA_OFFSET not defined, assuming 0
+#endif
+       /* Enable the copy of data into the buffers
+          ignore broadcasts, and not copy FCS. */
+
+       gmac_set_configure(p_gmac,
+                       ( gmac_get_configure(p_gmac) & ~GMAC_NCFGR_RXBUFO_Msk ) |
+                       GMAC_NCFGR_RFCS |   /*  Remove FCS, frame check sequence (last 4 bytes) */
+                       GMAC_NCFGR_PEN |    /* Pause Enable */
+                       GMAC_NCFGR_RXBUFO( ETHERNET_CONF_DATA_OFFSET ) |
+                       GMAC_RXD_RXCOEN );
+
+       /*
+        * GMAC_DCFGR_TXCOEN: (GMAC_DCFGR) Transmitter Checksum Generation Offload Enable.
+        * Note: tha SAM4E does have RX checksum offloading
+        * but TX checksum offloading has NOT been implemented.
+        */
+
+       gmac_set_dma(p_gmac,
+                       gmac_get_dma(p_gmac) | GMAC_DCFGR_TXCOEN );
+
+       gmac_enable_copy_all(p_gmac, p_opt->uc_copy_all_frame);
+       gmac_disable_broadcast(p_gmac, p_opt->uc_no_boardcast);
+
+       /* Fill in GMAC device memory management */
+       gmac_dev_mm.p_rx_buffer = gs_uc_rx_buffer;
+       gmac_dev_mm.p_rx_dscr = gs_rx_desc;
+       gmac_dev_mm.us_rx_size = GMAC_RX_BUFFERS;
+
+       #if( ipconfigZERO_COPY_TX_DRIVER != 0 )
+       {
+               gmac_dev_mm.p_tx_buffer = NULL;
+       }
+       #else
+       {
+               gmac_dev_mm.p_tx_buffer = gs_uc_tx_buffer;
+       }
+       #endif
+       gmac_dev_mm.p_tx_dscr = gs_tx_desc;
+       gmac_dev_mm.us_tx_size = GMAC_TX_BUFFERS;
+
+       gmac_init_mem(p_gmac, p_gmac_dev, &gmac_dev_mm
+#if( GMAC_USES_TX_CALLBACK != 0 )
+               , gs_tx_callback
+#endif
+               );
+
+       gmac_set_address(p_gmac, 0, p_opt->uc_mac_addr);
+}
+
+/**
+ * \brief Frames can be read from the GMAC in multiple sections.
+ *
+ * Returns > 0 if a complete frame is available
+ * It also it cleans up incomplete older frames
+ */
+
+static uint32_t gmac_dev_poll(gmac_device_t* p_gmac_dev)
+{
+       uint32_t ulReturn = 0;
+       int32_t ulIndex = p_gmac_dev->ul_rx_idx;
+       gmac_rx_descriptor_t *pxHead = &p_gmac_dev->p_rx_dscr[ulIndex];
+
+       /* Discard any incomplete frames */
+       while ((pxHead->addr.val & GMAC_RXD_OWNERSHIP) &&
+                       (pxHead->status.val & GMAC_RXD_SOF) == 0) {
+               pxHead->addr.val &= ~(GMAC_RXD_OWNERSHIP);
+               circ_inc32 (&ulIndex, p_gmac_dev->ul_rx_list_size);
+               pxHead = &p_gmac_dev->p_rx_dscr[ulIndex];
+               p_gmac_dev->ul_rx_idx = ulIndex;
+               #if( GMAC_STATS != 0 )
+               {
+                       gmacStats.incompCount++;
+               }
+               #endif
+       }
+
+       while ((pxHead->addr.val & GMAC_RXD_OWNERSHIP) != 0) {
+               if ((pxHead->status.val & GMAC_RXD_EOF) != 0) {
+                       /* Here a complete frame has been seen with SOF and EOF */
+                       ulReturn = pxHead->status.bm.len;
+                       break;
+               }
+               circ_inc32 (&ulIndex, p_gmac_dev->ul_rx_list_size);
+               pxHead = &p_gmac_dev->p_rx_dscr[ulIndex];
+               if ((pxHead->addr.val & GMAC_RXD_OWNERSHIP) == 0) {
+                       /* CPU is not the owner (yet) */
+                       break;
+               }
+               if ((pxHead->status.val & GMAC_RXD_SOF) != 0) {
+                       /* Strange, we found a new Start Of Frame
+                        * discard previous segments */
+                       int32_t ulPrev = p_gmac_dev->ul_rx_idx;
+                       pxHead = &p_gmac_dev->p_rx_dscr[ulPrev];
+                       do {
+                               pxHead->addr.val &= ~(GMAC_RXD_OWNERSHIP);
+                               circ_inc32 (&ulPrev, p_gmac_dev->ul_rx_list_size);
+                               pxHead = &p_gmac_dev->p_rx_dscr[ulPrev];
+                               #if( GMAC_STATS != 0 )
+                               {
+                                       gmacStats.truncCount++;
+                               }
+                               #endif
+                       } while (ulPrev != ulIndex);
+                       p_gmac_dev->ul_rx_idx = ulIndex;
+               }
+       }
+       return ulReturn;
+}
+
+/**
+ * \brief Frames can be read from the GMAC in multiple sections.
+ * Read ul_frame_size bytes from the GMAC receive buffers to pcTo.
+ * p_rcv_size is the size of the entire frame.  Generally gmac_read
+ * will be repeatedly called until the sum of all the ul_frame_size equals
+ * the value of p_rcv_size.
+ *
+ * \param p_gmac_dev Pointer to the GMAC device instance.
+ * \param p_frame Address of the frame buffer.
+ * \param ul_frame_size  Length of the frame.
+ * \param p_rcv_size   Received frame size.
+ *
+ * \return GMAC_OK if receiving frame successfully, otherwise failed.
+ */
+uint32_t gmac_dev_read(gmac_device_t* p_gmac_dev, uint8_t* p_frame,
+               uint32_t ul_frame_size, uint32_t* p_rcv_size)
+{
+       int32_t nextIdx;        /* A copy of the Rx-index 'ul_rx_idx' */
+       int32_t bytesLeft = gmac_dev_poll (p_gmac_dev);
+       gmac_rx_descriptor_t *pxHead;
+
+       if (bytesLeft == 0 )
+       {
+               return GMAC_RX_NULL;
+       }
+
+       /* gmac_dev_poll has confirmed that there is a complete frame at
+        * the current position 'ul_rx_idx'
+        */
+       nextIdx = p_gmac_dev->ul_rx_idx;
+
+       /* Read +2 bytes because buffers are aligned at -2 bytes */
+       bytesLeft = min( bytesLeft + 2, ( int32_t )ul_frame_size );
+
+       /* The frame will be copied in 1 or 2 memcpy's */
+       if( ( p_frame != NULL ) && ( bytesLeft != 0 ) )
+       {
+       const uint8_t *source;
+       int32_t left;
+       int32_t toCopy;
+
+               source = p_gmac_dev->p_rx_buffer + nextIdx * GMAC_RX_UNITSIZE;
+               left = bytesLeft;
+               toCopy = ( p_gmac_dev->ul_rx_list_size - nextIdx ) * GMAC_RX_UNITSIZE;
+               if(toCopy > left )
+               {
+                       toCopy = left;
+               }
+               memcpy (p_frame, source, toCopy);
+               left -= toCopy;
+
+               if( left != 0ul )
+               {
+                       memcpy (p_frame + toCopy, (void*)p_gmac_dev->p_rx_buffer, left);
+               }
+       }
+
+       do
+       {
+               pxHead = &p_gmac_dev->p_rx_dscr[nextIdx];
+               pxHead->addr.val &= ~(GMAC_RXD_OWNERSHIP);
+               circ_inc32 (&nextIdx, p_gmac_dev->ul_rx_list_size);
+       } while ((pxHead->status.val & GMAC_RXD_EOF) == 0);
+
+       p_gmac_dev->ul_rx_idx = nextIdx;
+
+       *p_rcv_size = bytesLeft;
+
+       return GMAC_OK;
+}
+
+
+extern void vGMACGenerateChecksum( uint8_t *apBuffer );
+
+/**
+ * \brief Send ulLength bytes from pcFrom. This copies the buffer to one of the
+ * GMAC Tx buffers, and then indicates to the GMAC that the buffer is ready.
+ * If lEndOfFrame is true then the data being copied is the end of the frame
+ * and the frame can be transmitted.
+ *
+ * \param p_gmac_dev Pointer to the GMAC device instance.
+ * \param p_buffer       Pointer to the data buffer.
+ * \param ul_size    Length of the frame.
+ * \param func_tx_cb  Transmit callback function.
+ *
+ * \return Length sent.
+ */
+uint32_t gmac_dev_write(gmac_device_t* p_gmac_dev, void *p_buffer,
+               uint32_t ul_size, gmac_dev_tx_cb_t func_tx_cb)
+{
+
+       volatile gmac_tx_descriptor_t *p_tx_td;
+#if( GMAC_USES_TX_CALLBACK != 0 )
+       volatile gmac_dev_tx_cb_t *p_func_tx_cb;
+#endif
+
+       Gmac *p_hw = p_gmac_dev->p_hw;
+
+#if( GMAC_USES_TX_CALLBACK == 0 )
+       ( void )func_tx_cb;
+#endif
+
+       /* Check parameter */
+       if (ul_size > GMAC_TX_UNITSIZE) {
+               return GMAC_PARAM;
+       }
+
+       /* Pointers to the current transmit descriptor */
+       p_tx_td = &p_gmac_dev->p_tx_dscr[p_gmac_dev->l_tx_head];
+
+       /* If no free TxTd, buffer can't be sent, schedule the wakeup callback */
+//     if (CIRC_SPACE(p_gmac_dev->l_tx_head, p_gmac_dev->l_tx_tail,
+//                                     p_gmac_dev->ul_tx_list_size) == 0)
+       {
+               if ((p_tx_td->status.val & GMAC_TXD_USED) == 0)
+                       return GMAC_TX_BUSY;
+       }
+#if( GMAC_USES_TX_CALLBACK != 0 )
+       /* Pointers to the current Tx callback */
+       p_func_tx_cb = &p_gmac_dev->func_tx_cb_list[p_gmac_dev->l_tx_head];
+#endif
+
+       /* Set up/copy data to transmission buffer */
+       if (p_buffer && ul_size) {
+               /* Driver manages the ring buffer */
+               /* Calculating the checksum here is faster than calculating it from the GMAC buffer
+                * because withing p_buffer, it is well aligned */
+               #if( ipconfigZERO_COPY_TX_DRIVER != 0 )
+               {
+                       /* Zero-copy... */
+                       p_tx_td->addr = ( uint32_t ) p_buffer;
+               }
+               #else
+               {
+                       /* Or Memcopy... */
+                       memcpy((void *)p_tx_td->addr, p_buffer, ul_size);
+               }
+               #endif /* ipconfigZERO_COPY_TX_DRIVER */
+               vGMACGenerateChecksum( ( uint8_t * ) p_tx_td->addr );
+       }
+
+#if( GMAC_USES_TX_CALLBACK != 0 )
+       /* Tx callback */
+       *p_func_tx_cb = func_tx_cb;
+#endif
+
+       /* Update transmit descriptor status */
+
+       /* The buffer size defined is the length of ethernet frame,
+          so it's always the last buffer of the frame. */
+       if( p_gmac_dev->l_tx_head == ( int32_t )( p_gmac_dev->ul_tx_list_size - 1 ) )
+       {
+               /* No need to 'and' with GMAC_TXD_LEN_MASK because ul_size has been checked */
+               p_tx_td->status.val =
+                       ul_size | GMAC_TXD_LAST | GMAC_TXD_WRAP;
+       } else {
+               p_tx_td->status.val =
+                       ul_size | GMAC_TXD_LAST;
+       }
+
+       circ_inc32( &p_gmac_dev->l_tx_head, p_gmac_dev->ul_tx_list_size );
+
+       /* Now start to transmit if it is still not done */
+       gmac_start_transmission(p_hw);
+
+       return GMAC_OK;
+}
+
+/**
+ * \brief Get current load of transmit.
+ *
+ * \param p_gmac_dev Pointer to the GMAC device instance.
+ *
+ * \return Current load of transmit.
+ */
+#if( GMAC_USES_TX_CALLBACK != 0 )
+/* Without defining GMAC_USES_TX_CALLBACK, l_tx_tail won't be updated */
+uint32_t gmac_dev_get_tx_load(gmac_device_t* p_gmac_dev)
+{
+       uint16_t us_head = p_gmac_dev->l_tx_head;
+       uint16_t us_tail = p_gmac_dev->l_tx_tail;
+       return CIRC_CNT(us_head, us_tail, p_gmac_dev->ul_tx_list_size);
+}
+#endif
+
+/**
+ * \brief Register/Clear RX callback. Callback will be invoked after the next received
+ * frame.
+ *
+ * When gmac_dev_read() returns GMAC_RX_NULL, the application task calls
+ * gmac_dev_set_rx_callback() to register func_rx_cb() callback and enters suspend state.
+ * The callback is in charge to resume the task once a new frame has been
+ * received. The next time gmac_dev_read() is called, it will be successful.
+ *
+ * This function is usually invoked from the RX callback itself with NULL
+ * callback, to unregister. Once the callback has resumed the application task,
+ * there is no need to invoke the callback again.
+ *
+ * \param p_gmac_dev Pointer to the GMAC device instance.
+ * \param func_tx_cb  Receive callback function.
+ */
+void gmac_dev_set_rx_callback(gmac_device_t* p_gmac_dev,
+               gmac_dev_rx_cb_t func_rx_cb)
+{
+       Gmac *p_hw = p_gmac_dev->p_hw;
+
+       if (func_rx_cb == NULL) {
+               gmac_disable_interrupt(p_hw, GMAC_IDR_RCOMP);
+               p_gmac_dev->func_rx_cb = NULL;
+       } else {
+               p_gmac_dev->func_rx_cb = func_rx_cb;
+               gmac_enable_interrupt(p_hw, GMAC_IER_RCOMP);
+       }
+}
+
+/**
+ *  \brief Register/Clear TX wakeup callback.
+ *
+ * When gmac_dev_write() returns GMAC_TX_BUSY (all transmit descriptor busy), the application
+ * task calls gmac_dev_set_tx_wakeup_callback() to register func_wakeup() callback and
+ * enters suspend state. The callback is in charge to resume the task once
+ * several transmit descriptors have been released. The next time gmac_dev_write() will be called,
+ * it shall be successful.
+ *
+ * This function is usually invoked with NULL callback from the TX wakeup
+ * callback itself, to unregister. Once the callback has resumed the
+ * application task, there is no need to invoke the callback again.
+ *
+ * \param p_gmac_dev   Pointer to GMAC device instance.
+ * \param func_wakeup    Pointer to wakeup callback function.
+ * \param uc_threshold Number of free transmit descriptor before wakeup callback invoked.
+ *
+ * \return GMAC_OK, GMAC_PARAM on parameter error.
+ */
+#if( GMAC_USES_WAKEUP_CALLBACK )
+uint8_t gmac_dev_set_tx_wakeup_callback(gmac_device_t* p_gmac_dev,
+               gmac_dev_wakeup_cb_t func_wakeup_cb, uint8_t uc_threshold)
+{
+       if (func_wakeup_cb == NULL) {
+               p_gmac_dev->func_wakeup_cb = NULL;
+       } else {
+               if (uc_threshold <= p_gmac_dev->ul_tx_list_size) {
+                       p_gmac_dev->func_wakeup_cb = func_wakeup_cb;
+                       p_gmac_dev->uc_wakeup_threshold = uc_threshold;
+               } else {
+                       return GMAC_PARAM;
+               }
+       }
+
+       return GMAC_OK;
+}
+#endif /* GMAC_USES_WAKEUP_CALLBACK */
+
+/**
+ * \brief Reset TX & RX queue & statistics.
+ *
+ * \param p_gmac_dev   Pointer to GMAC device instance.
+ */
+void gmac_dev_reset(gmac_device_t* p_gmac_dev)
+{
+       Gmac *p_hw = p_gmac_dev->p_hw;
+
+       gmac_reset_rx_mem(p_gmac_dev);
+       gmac_reset_tx_mem(p_gmac_dev);
+       gmac_network_control(p_hw, GMAC_NCR_TXEN | GMAC_NCR_RXEN
+                       | GMAC_NCR_WESTAT | GMAC_NCR_CLRSTAT);
+}
+
+void gmac_dev_halt(Gmac* p_gmac);
+
+void gmac_dev_halt(Gmac* p_gmac)
+{
+       gmac_network_control(p_gmac, GMAC_NCR_WESTAT | GMAC_NCR_CLRSTAT);
+       gmac_disable_interrupt(p_gmac, ~0u);
+}
+
+
+/**
+ * \brief GMAC Interrupt handler.
+ *
+ * \param p_gmac_dev   Pointer to GMAC device instance.
+ */
+
+#if( GMAC_STATS != 0 )
+       extern int logPrintf( const char *pcFormat, ... );
+
+       void gmac_show_irq_counts ()
+       {
+               int index;
+               for (index = 0; index < ARRAY_SIZE(intPairs); index++) {
+                       if (gmacStats.intStatus[intPairs[index].index]) {
+                               logPrintf("%s : %6u\n", intPairs[index].name, gmacStats.intStatus[intPairs[index].index]);
+                       }
+               }
+       }
+#endif
+
+void gmac_handler(gmac_device_t* p_gmac_dev)
+{
+       Gmac *p_hw = p_gmac_dev->p_hw;
+
+#if( GMAC_USES_TX_CALLBACK != 0 )
+       gmac_tx_descriptor_t *p_tx_td;
+       gmac_dev_tx_cb_t *p_tx_cb = NULL;
+       uint32_t ul_tx_status_flag;
+#endif
+#if( GMAC_STATS != 0 )
+       int index;
+#endif
+
+       /* volatile */ uint32_t ul_isr;
+       /* volatile */ uint32_t ul_rsr;
+       /* volatile */ uint32_t ul_tsr;
+
+       ul_isr = gmac_get_interrupt_status(p_hw);
+       ul_rsr = gmac_get_rx_status(p_hw);
+       ul_tsr = gmac_get_tx_status(p_hw);
+
+/*     Why clear bits that are ignored anyway ? */
+/*     ul_isr &= ~(gmac_get_interrupt_mask(p_hw) | 0xF8030300); */
+       #if( GMAC_STATS != 0 )
+       {
+               for (index = 0; index < ARRAY_SIZE(intPairs); index++) {
+                       if (ul_isr & intPairs[index].mask)
+                               gmacStats.intStatus[intPairs[index].index]++;
+               }
+       }
+       #endif /* GMAC_STATS != 0 */
+
+       /* RX packet */
+       if ((ul_isr & GMAC_ISR_RCOMP) || (ul_rsr & (GMAC_RSR_REC|GMAC_RSR_RXOVR|GMAC_RSR_BNA))) {
+               /* Clear status */
+               gmac_clear_rx_status(p_hw, ul_rsr);
+
+               if (ul_isr & GMAC_ISR_RCOMP)
+                       ul_rsr |= GMAC_RSR_REC;
+               /* Invoke callbacks which can be useful to wake op a task */
+               if (p_gmac_dev->func_rx_cb) {
+                       p_gmac_dev->func_rx_cb(ul_rsr);
+               }
+       }
+
+       /* TX packet */
+       if ((ul_isr & GMAC_ISR_TCOMP) || (ul_tsr & (GMAC_TSR_TXCOMP|GMAC_TSR_COL|GMAC_TSR_RLE|GMAC_TSR_UND))) {
+
+#if( GMAC_USES_TX_CALLBACK != 0 )
+               ul_tx_status_flag = GMAC_TSR_TXCOMP;
+#endif
+               /* A frame transmitted */
+
+               /* Check RLE */
+               if (ul_tsr & GMAC_TSR_RLE) {
+                       /* Status RLE & Number of discarded buffers */
+#if( GMAC_USES_TX_CALLBACK != 0 )
+                       ul_tx_status_flag = GMAC_TSR_RLE | CIRC_CNT(p_gmac_dev->l_tx_head,
+                                       p_gmac_dev->l_tx_tail, p_gmac_dev->ul_tx_list_size);
+                       p_tx_cb = &p_gmac_dev->func_tx_cb_list[p_gmac_dev->l_tx_tail];
+#endif
+                       gmac_reset_tx_mem(p_gmac_dev);
+                       gmac_enable_transmit(p_hw, 1);
+               }
+               /* Clear status */
+               gmac_clear_tx_status(p_hw, ul_tsr);
+
+#if( GMAC_USES_TX_CALLBACK != 0 )
+               if (!CIRC_EMPTY(p_gmac_dev->l_tx_head, p_gmac_dev->l_tx_tail)) {
+                       /* Check the buffers */
+                       do {
+                               p_tx_td = &p_gmac_dev->p_tx_dscr[p_gmac_dev->l_tx_tail];
+                               p_tx_cb = &p_gmac_dev->func_tx_cb_list[p_gmac_dev->l_tx_tail];
+                               /* Any error? Exit if buffer has not been sent yet */
+                               if ((p_tx_td->status.val & GMAC_TXD_USED) == 0) {
+                                       break;
+                               }
+
+                               /* Notify upper layer that a packet has been sent */
+                               if (*p_tx_cb) {
+                                       (*p_tx_cb) (ul_tx_status_flag, (void*)p_tx_td->addr);
+                                       #if( ipconfigZERO_COPY_TX_DRIVER != 0 )
+                                       {
+                                               p_tx_td->addr = 0ul;
+                                       }
+                                       #endif /* ipconfigZERO_COPY_TX_DRIVER */
+                               }
+
+                               circ_inc32(&p_gmac_dev->l_tx_tail, p_gmac_dev->ul_tx_list_size);
+                       } while (CIRC_CNT(p_gmac_dev->l_tx_head, p_gmac_dev->l_tx_tail,
+                                                       p_gmac_dev->ul_tx_list_size));
+               }
+
+               if (ul_tsr & GMAC_TSR_RLE) {
+                       /* Notify upper layer RLE */
+                       if (*p_tx_cb) {
+                               (*p_tx_cb) (ul_tx_status_flag, NULL);
+                       }
+               }
+#endif /* GMAC_USES_TX_CALLBACK */
+
+#if( GMAC_USES_WAKEUP_CALLBACK )
+               /* If a wakeup has been scheduled, notify upper layer that it can
+                  send other packets, and the sending will be successful. */
+               if ((CIRC_SPACE(p_gmac_dev->l_tx_head, p_gmac_dev->l_tx_tail,
+                               p_gmac_dev->ul_tx_list_size) >= p_gmac_dev->uc_wakeup_threshold)
+                               && p_gmac_dev->func_wakeup_cb) {
+                       p_gmac_dev->func_wakeup_cb();
+               }
+#endif
+       }
+}
+
+//@}
+
+/// @cond 0
+/**INDENT-OFF**/
+#ifdef __cplusplus
+}
+#endif
+/**INDENT-ON**/
+/// @endcond
index fca3ece332a456b2d3c3b40a8a6bc7c2965b7fb4..d741a2a0a96c038ce58f56578a18868a39b5c8f2 100644 (file)
- /**\r
- * \file\r
- *\r
- * \brief GMAC (Ethernet MAC) driver for SAM.\r
- *\r
- * Copyright (c) 2013 Atmel Corporation. All rights reserved.\r
- *\r
- * \asf_license_start\r
- *\r
- * \page License\r
- *\r
- * Redistribution and use in source and binary forms, with or without\r
- * modification, are permitted provided that the following conditions are met:\r
- *\r
- * 1. Redistributions of source code must retain the above copyright notice,\r
- *    this list of conditions and the following disclaimer.\r
- *\r
- * 2. Redistributions in binary form must reproduce the above copyright notice,\r
- *    this list of conditions and the following disclaimer in the documentation\r
- *    and/or other materials provided with the distribution.\r
- *\r
- * 3. The name of Atmel may not be used to endorse or promote products derived\r
- *    from this software without specific prior written permission.\r
- *\r
- * 4. This software may only be redistributed and used in connection with an\r
- *    Atmel microcontroller product.\r
- *\r
- * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED\r
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
- * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR\r
- * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\r
- * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\r
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
- * POSSIBILITY OF SUCH DAMAGE.\r
- *\r
- * \asf_license_stop\r
- *\r
- */\r
-\r
-#ifndef GMAC_H_INCLUDED\r
-#define GMAC_H_INCLUDED\r
-\r
-#include "compiler.h"\r
-\r
-/// @cond 0\r
-/**INDENT-OFF**/\r
-#ifdef __cplusplus\r
-extern "C" {\r
-#endif\r
-/**INDENT-ON**/\r
-/// @endcond\r
-\r
-/** The buffer addresses written into the descriptors must be aligned, so the\r
-    last few bits are zero.  These bits have special meaning for the GMAC\r
-    peripheral and cannot be used as part of the address. */\r
-#define GMAC_RXD_ADDR_MASK      0xFFFFFFFC\r
-#define GMAC_RXD_WRAP         (1ul << 1)  /**< Wrap bit */\r
-#define GMAC_RXD_OWNERSHIP    (1ul << 0)  /**< Ownership bit */\r
-\r
-#define GMAC_RXD_BROADCAST    (1ul << 31) /**< Broadcast detected */\r
-#define GMAC_RXD_MULTIHASH    (1ul << 30) /**< Multicast hash match */\r
-#define GMAC_RXD_UNIHASH      (1ul << 29) /**< Unicast hash match */\r
-#define GMAC_RXD_ADDR_FOUND      (1ul << 27) /**< Specific address match found */\r
-#define GMAC_RXD_ADDR        (3ul << 25) /**< Address match */\r
-#define GMAC_RXD_RXCOEN        (1ul << 24) /**< RXCOEN related function */\r
-#define GMAC_RXD_TYPE         (3ul << 22) /**< Type ID match */\r
-#define GMAC_RXD_VLAN         (1ul << 21) /**< VLAN tag detected */\r
-#define GMAC_RXD_PRIORITY     (1ul << 20) /**< Priority tag detected */\r
-#define GMAC_RXD_PRIORITY_MASK  (3ul << 17) /**< VLAN priority */\r
-#define GMAC_RXD_CFI          (1ul << 16) /**< Concatenation Format Indicator only if bit 21 is set */\r
-#define GMAC_RXD_EOF          (1ul << 15) /**< End of frame */\r
-#define GMAC_RXD_SOF          (1ul << 14) /**< Start of frame */\r
-#define GMAC_RXD_FCS          (1ul << 13) /**< Frame check sequence */\r
-#define GMAC_RXD_OFFSET_MASK                /**< Receive buffer offset */\r
-#define GMAC_RXD_LEN_MASK       (0xFFF)     /**< Length of frame including FCS (if selected) */\r
-#define GMAC_RXD_LENJUMBO_MASK  (0x3FFF)    /**< Jumbo frame length */\r
-\r
-#define GMAC_TXD_USED         (1ul << 31) /**< Frame is transmitted */\r
-#define GMAC_TXD_WRAP         (1ul << 30) /**< Last descriptor */\r
-#define GMAC_TXD_ERROR        (1ul << 29) /**< Retry limit exceeded, error */\r
-#define GMAC_TXD_UNDERRUN     (1ul << 28) /**< Transmit underrun */\r
-#define GMAC_TXD_EXHAUSTED    (1ul << 27) /**< Buffer exhausted */\r
-#define GMAC_TXD_LATE    (1ul << 26) /**< Late collision,transmit  error  */\r
-#define GMAC_TXD_CHECKSUM_ERROR   (7ul << 20) /**< Checksum error */\r
-#define GMAC_TXD_NOCRC        (1ul << 16) /**< No CRC */\r
-#define GMAC_TXD_LAST         (1ul << 15) /**< Last buffer in frame */\r
-#define GMAC_TXD_LEN_MASK       (0x1FFF)     /**< Length of buffer */\r
-\r
-/** The MAC can support frame lengths up to 1536 bytes */\r
-#define GMAC_FRAME_LENTGH_MAX       1536\r
-\r
-#define GMAC_RX_UNITSIZE            128     /**< Fixed size for RX buffer  */\r
-#define GMAC_TX_UNITSIZE            1518    /**< Size for ETH frame length */\r
-\r
-/** GMAC clock speed */\r
-#define GMAC_MCK_SPEED_240MHZ        (240*1000*1000)\r
-#define GMAC_MCK_SPEED_160MHZ        (160*1000*1000)\r
-#define GMAC_MCK_SPEED_120MHZ        (120*1000*1000)\r
-#define GMAC_MCK_SPEED_80MHZ          (80*1000*1000)\r
-#define GMAC_MCK_SPEED_40MHZ          (40*1000*1000)\r
-#define GMAC_MCK_SPEED_20MHZ          (20*1000*1000)\r
-\r
-/** GMAC maintain code default value*/\r
-#define GMAC_MAN_CODE_VALUE    (10)\r
-\r
-/** GMAC maintain start of frame default value*/\r
-#define GMAC_MAN_SOF_VALUE     (1)\r
-\r
-/** GMAC maintain read/write*/\r
-#define GMAC_MAN_RW_TYPE       (2)\r
-\r
-/** GMAC maintain read only*/\r
-#define GMAC_MAN_READ_ONLY     (1)\r
-\r
-/** GMAC address length */\r
-#define GMAC_ADDR_LENGTH       (6)\r
-\r
-\r
-#define GMAC_DUPLEX_HALF 0\r
-#define GMAC_DUPLEX_FULL 1\r
-\r
-#define GMAC_SPEED_10M      0\r
-#define GMAC_SPEED_100M     1\r
-\r
-/**\r
- * \brief Return codes for GMAC APIs.\r
- */\r
-typedef enum {\r
-       GMAC_OK = 0,         /** 0  Operation OK */\r
-       GMAC_TIMEOUT = 1,    /** 1  GMAC operation timeout */\r
-       GMAC_TX_BUSY,        /** 2  TX in progress */\r
-       GMAC_RX_NULL,        /** 3  No data received */\r
-       GMAC_SIZE_TOO_SMALL, /** 4  Buffer size not enough */\r
-       GMAC_PARAM,          /** 5  Parameter error, TX packet invalid or RX size too small */\r
-       GMAC_INVALID = 0xFF, /* Invalid */\r
-} gmac_status_t;\r
-\r
-/**\r
- * \brief Media Independent Interface (MII) type.\r
- */\r
-typedef enum {\r
-       GMAC_PHY_MII = 0,         /** MII mode */\r
-       GMAC_PHY_RMII = 1,    /** Reduced MII mode */\r
-       GMAC_PHY_INVALID = 0xFF, /* Invalid mode*/\r
-} gmac_mii_mode_t;\r
-\r
-/** Receive buffer descriptor struct */\r
-COMPILER_PACK_SET(8)\r
-typedef struct gmac_rx_descriptor {\r
-       union gmac_rx_addr {\r
-               uint32_t val;\r
-               struct gmac_rx_addr_bm {\r
-                       uint32_t b_ownership:1, /**< User clear, GMAC sets this to 1 once it has successfully written a frame to memory */\r
-                       b_wrap:1,   /**< Marks last descriptor in receive buffer */\r
-                       addr_dw:30; /**< Address in number of DW */\r
-               } bm;\r
-       } addr; /**< Address, Wrap & Ownership */\r
-       union gmac_rx_status {\r
-               uint32_t val;\r
-               struct gmac_rx_status_bm {\r
-                       uint32_t len:13,       /**  0..12  Length of frame including FCS */\r
-                       b_fcs:1,               /**  13     Receive buffer offset,  bits 13:12 of frame length for jumbo frame */\r
-                       b_sof:1,               /**  14     Start of frame */\r
-                       b_eof:1,               /**  15     End of frame */\r
-                       b_cfi:1,               /**  16     Concatenation Format Indicator */\r
-                       vlan_priority:3,       /**  17..19 VLAN priority (if VLAN detected) */\r
-                       b_priority_detected:1, /**  20     Priority tag detected */\r
-                       b_vlan_detected:1,     /**  21     VLAN tag detected */\r
-                       b_type_id_match:2,     /**  22..23 Type ID match */\r
-                       b_checksumoffload:1,   /**  24     Checksum offload specific function */\r
-                       b_addrmatch:2,         /**  25..26 Address register match */\r
-                       b_ext_addr_match:1,    /**  27     External address match found */\r
-                       reserved:1,            /**  28     */\r
-                       b_uni_hash_match:1,    /**  29     Unicast hash match */\r
-                       b_multi_hash_match:1,  /**  30     Multicast hash match */\r
-                       b_boardcast_detect:1;  /**  31     Global broadcast address detected */\r
-               } bm;\r
-       } status;\r
-} gmac_rx_descriptor_t;\r
-\r
-/** Transmit buffer descriptor struct */\r
-COMPILER_PACK_SET(8)\r
-typedef struct gmac_tx_descriptor {\r
-       uint32_t addr;\r
-       union gmac_tx_status {\r
-               uint32_t val;\r
-               struct gmac_tx_status_bm {\r
-                       uint32_t len:14,     /**  0..13 Length of buffer */\r
-                       reserved:1,          /** 14            */\r
-                       b_last_buffer:1,     /** 15     Last buffer (in the current frame) */\r
-                       b_no_crc:1,          /** 16     No CRC */\r
-                       reserved1:3,         /** 17..19        */\r
-                       b_checksumoffload:3, /** 20..22 Transmit checksum generation offload errors */\r
-                       reserved2:3,         /** 23..25        */\r
-                       b_lco:1,             /** 26     Late collision, transmit error detected */\r
-                       b_exhausted:1,       /** 27     Buffer exhausted in mid frame */\r
-                       b_underrun:1,        /** 28     Transmit underrun */\r
-                       b_error:1,           /** 29     Retry limit exceeded, error detected */\r
-                       b_wrap:1,            /** 30     Marks last descriptor in TD list */\r
-                       b_used:1;            /** 31     User clear, GMAC sets this to 1 once a frame has been successfully transmitted */\r
-               } bm;\r
-       } status;\r
-} gmac_tx_descriptor_t;\r
-\r
-COMPILER_PACK_RESET()\r
-\r
-/**\r
- * \brief Input parameters when initializing the gmac module mode.\r
- */\r
-typedef struct gmac_options {\r
-       /*  Enable/Disable CopyAllFrame */\r
-       uint8_t uc_copy_all_frame;\r
-       /* Enable/Disable NoBroadCast */\r
-       uint8_t uc_no_boardcast;\r
-       /* MAC address */\r
-       uint8_t uc_mac_addr[GMAC_ADDR_LENGTH];\r
-} gmac_options_t;\r
-\r
-/** RX callback */\r
-typedef void (*gmac_dev_tx_cb_t) (uint32_t ul_status);\r
-/** Wakeup callback */\r
-typedef void (*gmac_dev_wakeup_cb_t) (void);\r
-\r
-/**\r
- * GMAC driver structure.\r
- */\r
-typedef struct gmac_device {\r
-\r
-       /** Pointer to HW register base */\r
-       Gmac *p_hw;\r
-       /**\r
-        * Pointer to allocated TX buffer.\r
-        * Section 3.6 of AMBA 2.0 spec states that burst should not cross\r
-        * 1K Boundaries.\r
-        * Receive buffer manager writes are burst of 2 words => 3 lsb bits\r
-        * of the address shall be set to 0.\r
-        */\r
-       uint8_t *p_tx_buffer;\r
-       /** Pointer to allocated RX buffer */\r
-       uint8_t *p_rx_buffer;\r
-       /** Pointer to Rx TDs (must be 8-byte aligned) */\r
-       gmac_rx_descriptor_t *p_rx_dscr;\r
-       /** Pointer to Tx TDs (must be 8-byte aligned) */\r
-       gmac_tx_descriptor_t *p_tx_dscr;\r
-       /** Optional callback to be invoked once a frame has been received */\r
-       gmac_dev_tx_cb_t func_rx_cb;\r
-#if( GMAC_USES_WAKEUP_CALLBACK )\r
-       /** Optional callback to be invoked once several TDs have been released */\r
-       gmac_dev_wakeup_cb_t func_wakeup_cb;\r
-#endif\r
-#if( GMAC_USES_TX_CALLBACK != 0 )\r
-       /** Optional callback list to be invoked once TD has been processed */\r
-       gmac_dev_tx_cb_t *func_tx_cb_list;\r
-#endif\r
-       /** RX TD list size */\r
-       uint32_t ul_rx_list_size;\r
-       /** RX index for current processing TD */\r
-       uint32_t ul_rx_idx;\r
-       /** TX TD list size */\r
-       uint32_t ul_tx_list_size;\r
-       /** Circular buffer head pointer by upper layer (buffer to be sent) */\r
-       int32_t l_tx_head;\r
-       /** Circular buffer tail pointer incremented by handlers (buffer sent) */\r
-       int32_t l_tx_tail;\r
-\r
-       /** Number of free TD before wakeup callback is invoked */\r
-       uint32_t uc_wakeup_threshold;\r
-} gmac_device_t;\r
-\r
-/**\r
- * \brief Write network control value.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param ul_ncr   Network control value.\r
- */\r
-static inline void gmac_network_control(Gmac* p_gmac, uint32_t ul_ncr)\r
-{\r
-       p_gmac->GMAC_NCR = ul_ncr;\r
-}\r
-\r
-/**\r
- * \brief Get network control value.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- */\r
-\r
-static inline uint32_t gmac_get_network_control(Gmac* p_gmac)\r
-{\r
-       return p_gmac->GMAC_NCR;\r
-}\r
-\r
-/**\r
- * \brief Enable/Disable GMAC receive.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param uc_enable   0 to disable GMAC receiver, else to enable it.\r
- */\r
-static inline void gmac_enable_receive(Gmac* p_gmac, uint8_t uc_enable)\r
-{\r
-       if (uc_enable) {\r
-               p_gmac->GMAC_NCR |= GMAC_NCR_RXEN;\r
-       } else {\r
-               p_gmac->GMAC_NCR &= ~GMAC_NCR_RXEN;\r
-       }\r
-}\r
-\r
-/**\r
- * \brief Enable/Disable GMAC transmit.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param uc_enable   0 to disable GMAC transmit, else to enable it.\r
- */\r
-static inline void gmac_enable_transmit(Gmac* p_gmac, uint8_t uc_enable)\r
-{\r
-       if (uc_enable) {\r
-               p_gmac->GMAC_NCR |= GMAC_NCR_TXEN;\r
-       } else {\r
-               p_gmac->GMAC_NCR &= ~GMAC_NCR_TXEN;\r
-       }\r
-}\r
-\r
-/**\r
- * \brief Enable/Disable GMAC management.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param uc_enable   0 to disable GMAC management, else to enable it.\r
- */\r
-static inline void gmac_enable_management(Gmac* p_gmac, uint8_t uc_enable)\r
-{\r
-       if (uc_enable) {\r
-               p_gmac->GMAC_NCR |= GMAC_NCR_MPE;\r
-       } else {\r
-               p_gmac->GMAC_NCR &= ~GMAC_NCR_MPE;\r
-       }\r
-}\r
-\r
-/**\r
- * \brief Clear all statistics registers.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- */\r
-static inline void gmac_clear_statistics(Gmac* p_gmac)\r
-{\r
-       p_gmac->GMAC_NCR |= GMAC_NCR_CLRSTAT;\r
-}\r
-\r
-/**\r
- * \brief Increase all statistics registers.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- */\r
-static inline void gmac_increase_statistics(Gmac* p_gmac)\r
-{\r
-       p_gmac->GMAC_NCR |= GMAC_NCR_INCSTAT;\r
-}\r
-\r
-/**\r
- * \brief Enable/Disable statistics registers writing.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param uc_enable   0 to disable the statistics registers writing, else to enable it.\r
- */\r
-static inline void gmac_enable_statistics_write(Gmac* p_gmac,\r
-               uint8_t uc_enable)\r
-{\r
-       if (uc_enable) {\r
-               p_gmac->GMAC_NCR |= GMAC_NCR_WESTAT;\r
-       } else {\r
-               p_gmac->GMAC_NCR &= ~GMAC_NCR_WESTAT;\r
-       }\r
-}\r
-\r
-/**\r
- * \brief In half-duplex mode, forces collisions on all received frames.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param uc_enable   0 to disable the back pressure, else to enable it.\r
- */\r
-static inline void gmac_enable_back_pressure(Gmac* p_gmac, uint8_t uc_enable)\r
-{\r
-       if (uc_enable) {\r
-               p_gmac->GMAC_NCR |= GMAC_NCR_BP;\r
-       } else {\r
-               p_gmac->GMAC_NCR &= ~GMAC_NCR_BP;\r
-       }\r
-}\r
-\r
-/**\r
- * \brief Start transmission.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- */\r
-static inline void gmac_start_transmission(Gmac* p_gmac)\r
-{\r
-       p_gmac->GMAC_NCR |= GMAC_NCR_TSTART;\r
-}\r
-\r
-/**\r
- * \brief Halt transmission.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- */\r
-static inline void gmac_halt_transmission(Gmac* p_gmac)\r
-{\r
-       p_gmac->GMAC_NCR |= GMAC_NCR_THALT;\r
-}\r
-\r
-/**\r
- * \brief Transmit pause frame.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- */\r
-static inline void gmac_tx_pause_frame(Gmac* p_gmac)\r
-{\r
-       p_gmac->GMAC_NCR |= GMAC_NCR_TXPF;\r
-}\r
-\r
-/**\r
- * \brief Transmit zero quantum pause frame.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- */\r
-static inline void gmac_tx_pause_zero_quantum_frame(Gmac* p_gmac)\r
-{\r
-       p_gmac->GMAC_NCR |= GMAC_NCR_TXZQPF;\r
-}\r
-\r
-/**\r
- * \brief Read snapshot.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- */\r
-static inline void gmac_read_snapshot(Gmac* p_gmac)\r
-{\r
-       p_gmac->GMAC_NCR |= GMAC_NCR_RDS;\r
-}\r
-\r
-/**\r
- * \brief Store receivetime stamp to memory.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param uc_enable   0 to normal operation, else to enable the store.\r
- */\r
-static inline void gmac_store_rx_time_stamp(Gmac* p_gmac, uint8_t uc_enable)\r
-{\r
-       if (uc_enable) {\r
-               p_gmac->GMAC_NCR |= GMAC_NCR_SRTSM;\r
-       } else {\r
-               p_gmac->GMAC_NCR &= ~GMAC_NCR_SRTSM;\r
-       }\r
-}\r
-\r
-/**\r
- * \brief Enable PFC priority-based pause reception.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param uc_enable   1 to set the reception, 0 to disable.\r
- */\r
-static inline void gmac_enable_pfc_pause_frame(Gmac* p_gmac, uint8_t uc_enable)\r
-{\r
-       if (uc_enable) {\r
-               p_gmac->GMAC_NCR |= GMAC_NCR_ENPBPR;\r
-       } else {\r
-               p_gmac->GMAC_NCR &= ~GMAC_NCR_ENPBPR;\r
-       }\r
-}\r
-\r
-/**\r
- * \brief Transmit PFC priority-based pause reception.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- */\r
-static inline void gmac_transmit_pfc_pause_frame(Gmac* p_gmac)\r
-{\r
-               p_gmac->GMAC_NCR |= GMAC_NCR_TXPBPF;\r
-}\r
-\r
-/**\r
- * \brief Flush next packet.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- */\r
-static inline void gmac_flush_next_packet(Gmac* p_gmac)\r
-{\r
-               p_gmac->GMAC_NCR |= GMAC_NCR_FNP;\r
-}\r
-\r
-/**\r
- * \brief Set up network configuration register.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
-  * \param ul_cfg   Network configuration value.\r
- */\r
-static inline void gmac_set_configure(Gmac* p_gmac, uint32_t ul_cfg)\r
-{\r
-       p_gmac->GMAC_NCFGR = ul_cfg;\r
-}\r
-\r
-/**\r
- * \brief Get network configuration.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- *\r
- * \return Network configuration.\r
- */\r
-static inline uint32_t gmac_get_configure(Gmac* p_gmac)\r
-{\r
-       return p_gmac->GMAC_NCFGR;\r
-}\r
-\r
-\r
-/* Get and set DMA Configuration Register */\r
-static inline void gmac_set_dma(Gmac* p_gmac, uint32_t ul_cfg)\r
-{\r
-       p_gmac->GMAC_DCFGR = ul_cfg;\r
-}\r
-\r
-static inline uint32_t gmac_get_dma(Gmac* p_gmac)\r
-{\r
-       return p_gmac->GMAC_DCFGR;\r
-}\r
-\r
-/**\r
- * \brief Set speed.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param uc_speed 1 to indicate 100Mbps, 0 to 10Mbps.\r
- */\r
-static inline void gmac_set_speed(Gmac* p_gmac, uint8_t uc_speed)\r
-{\r
-       if (uc_speed) {\r
-               p_gmac->GMAC_NCFGR |= GMAC_NCFGR_SPD;\r
-       } else {\r
-               p_gmac->GMAC_NCFGR &= ~GMAC_NCFGR_SPD;\r
-       }\r
-}\r
-\r
-/**\r
- * \brief Enable/Disable Full-Duplex mode.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param uc_enable   0 to disable the Full-Duplex mode, else to enable it.\r
- */\r
-static inline void gmac_enable_full_duplex(Gmac* p_gmac, uint8_t uc_enable)\r
-{\r
-       if (uc_enable) {\r
-               p_gmac->GMAC_NCFGR |= GMAC_NCFGR_FD;\r
-       } else {\r
-               p_gmac->GMAC_NCFGR &= ~GMAC_NCFGR_FD;\r
-       }\r
-}\r
-\r
-/**\r
- * \brief Enable/Disable Copy(Receive) All Valid Frames.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param uc_enable   0 to disable copying all valid frames, else to enable it.\r
- */\r
-static inline void gmac_enable_copy_all(Gmac* p_gmac, uint8_t uc_enable)\r
-{\r
-       if (uc_enable) {\r
-               p_gmac->GMAC_NCFGR |= GMAC_NCFGR_CAF;\r
-       } else {\r
-               p_gmac->GMAC_NCFGR &= ~GMAC_NCFGR_CAF;\r
-       }\r
-}\r
-\r
-/**\r
- * \brief Enable/Disable jumbo frames (up to 10240 bytes).\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param uc_enable   0 to disable the jumbo frames, else to enable it.\r
- */\r
-static inline void gmac_enable_jumbo_frames(Gmac* p_gmac, uint8_t uc_enable)\r
-{\r
-       if (uc_enable) {\r
-               p_gmac->GMAC_NCFGR |= GMAC_NCFGR_JFRAME;\r
-       } else {\r
-               p_gmac->GMAC_NCFGR &= ~GMAC_NCFGR_JFRAME;\r
-       }\r
-}\r
-\r
-/**\r
- * \brief Disable/Enable broadcast receiving.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param uc_enable   1 to disable the broadcast, else to enable it.\r
- */\r
-static inline void gmac_disable_broadcast(Gmac* p_gmac, uint8_t uc_enable)\r
-{\r
-       if (uc_enable) {\r
-               p_gmac->GMAC_NCFGR |= GMAC_NCFGR_NBC;\r
-       } else {\r
-               p_gmac->GMAC_NCFGR &= ~GMAC_NCFGR_NBC;\r
-       }\r
-}\r
-\r
-/**\r
- * \brief Enable/Disable multicast hash.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param uc_enable   0 to disable the multicast hash, else to enable it.\r
- */\r
-static inline void gmac_enable_multicast_hash(Gmac* p_gmac, uint8_t uc_enable)\r
-{\r
-       if (uc_enable) {\r
-               p_gmac->GMAC_NCFGR |= GMAC_NCFGR_UNIHEN;\r
-       } else {\r
-               p_gmac->GMAC_NCFGR &= ~GMAC_NCFGR_UNIHEN;\r
-       }\r
-}\r
-\r
-/**\r
- * \brief Enable/Disable big frames (over 1518, up to 1536).\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param uc_enable   0 to disable big frames else to enable it.\r
- */\r
-static inline void gmac_enable_big_frame(Gmac* p_gmac, uint8_t uc_enable)\r
-{\r
-       if (uc_enable) {\r
-               p_gmac->GMAC_NCFGR |= GMAC_NCFGR_MAXFS;\r
-       } else {\r
-               p_gmac->GMAC_NCFGR &= ~GMAC_NCFGR_MAXFS;\r
-       }\r
-}\r
-\r
-/**\r
- * \brief Set MDC clock divider.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param ul_mck   GMAC MCK.\r
- *\r
- * \return GMAC_OK if successfully.\r
- */\r
-static inline uint8_t gmac_set_mdc_clock(Gmac* p_gmac, uint32_t ul_mck)\r
-{\r
-       uint32_t ul_clk;\r
-       \r
-       if (ul_mck > GMAC_MCK_SPEED_240MHZ) {\r
-               return GMAC_INVALID;\r
-       } else if (ul_mck > GMAC_MCK_SPEED_160MHZ) {\r
-               ul_clk = GMAC_NCFGR_CLK_MCK_96;\r
-       } else if (ul_mck > GMAC_MCK_SPEED_120MHZ) {\r
-               ul_clk = GMAC_NCFGR_CLK_MCK_64;\r
-       } else if (ul_mck > GMAC_MCK_SPEED_80MHZ) {\r
-               ul_clk = GMAC_NCFGR_CLK_MCK_48;\r
-       } else if (ul_mck > GMAC_MCK_SPEED_40MHZ) {\r
-               ul_clk = GMAC_NCFGR_CLK_MCK_32;\r
-       } else if (ul_mck > GMAC_MCK_SPEED_20MHZ) {\r
-               ul_clk = GMAC_NCFGR_CLK_MCK_16;\r
-       } else {\r
-               ul_clk = GMAC_NCFGR_CLK_MCK_8;\r
-       }\r
-       ;\r
-       p_gmac->GMAC_NCFGR = (p_gmac->GMAC_NCFGR & ~GMAC_NCFGR_CLK_Msk) | ul_clk;\r
-       return GMAC_OK;\r
-}\r
-\r
-/**\r
- * \brief Enable/Disable retry test.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param uc_enable   0 to disable the GMAC receiver, else to enable it.\r
- */\r
-static inline void gmac_enable_retry_test(Gmac* p_gmac, uint8_t uc_enable)\r
-{\r
-       if (uc_enable) {\r
-               p_gmac->GMAC_NCFGR |= GMAC_NCFGR_RTY;\r
-       } else {\r
-               p_gmac->GMAC_NCFGR &= ~GMAC_NCFGR_RTY;\r
-       }\r
-}\r
-\r
-/**\r
- * \brief Enable/Disable pause (when a valid pause frame is received).\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param uc_enable   0 to disable pause frame, else to enable it.\r
- */\r
-static inline void gmac_enable_pause_frame(Gmac* p_gmac, uint8_t uc_enable)\r
-{\r
-       if (uc_enable) {\r
-               p_gmac->GMAC_NCFGR |= GMAC_NCFGR_PEN;\r
-       } else {\r
-               p_gmac->GMAC_NCFGR &= ~GMAC_NCFGR_PEN;\r
-       }\r
-}\r
-\r
-/**\r
- * \brief Set receive buffer offset to 0 ~ 3.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- */\r
-static inline void gmac_set_rx_buffer_offset(Gmac* p_gmac, uint8_t uc_offset)\r
-{\r
-       p_gmac->GMAC_NCFGR &= ~GMAC_NCFGR_RXBUFO_Msk;\r
-       p_gmac->GMAC_NCFGR |= GMAC_NCFGR_RXBUFO(uc_offset);\r
-}\r
-\r
-/**\r
- * \brief Enable/Disable receive length field checking.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param uc_enable   0 to disable receive length field checking, else to enable it.\r
- */\r
-static inline void gmac_enable_rx_length_check(Gmac* p_gmac, uint8_t uc_enable)\r
-{\r
-       if (uc_enable) {\r
-               p_gmac->GMAC_NCFGR |= GMAC_NCFGR_LFERD;\r
-       } else {\r
-               p_gmac->GMAC_NCFGR &= ~GMAC_NCFGR_LFERD;\r
-       }\r
-}\r
-\r
-/**\r
- * \brief Enable/Disable discarding FCS field of received frames.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param uc_enable   0 to disable discarding FCS field of received frames, else to enable it.\r
- */\r
-static inline void gmac_enable_discard_fcs(Gmac* p_gmac, uint8_t uc_enable)\r
-{\r
-       if (uc_enable) {\r
-               p_gmac->GMAC_NCFGR |= GMAC_NCFGR_RFCS;\r
-       } else {\r
-               p_gmac->GMAC_NCFGR &= ~GMAC_NCFGR_RFCS;\r
-       }\r
-}\r
-\r
-\r
-/**\r
- * \brief Enable/Disable frames to be received in half-duplex mode\r
- * while transmitting.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param uc_enable   0 to disable the received in half-duplex mode, else to enable it.\r
- */\r
-static inline void gmac_enable_efrhd(Gmac* p_gmac, uint8_t uc_enable)\r
-{\r
-       if (uc_enable) {\r
-               p_gmac->GMAC_NCFGR |= GMAC_NCFGR_EFRHD;\r
-       } else {\r
-               p_gmac->GMAC_NCFGR &= ~GMAC_NCFGR_EFRHD;\r
-       }\r
-}\r
-\r
-/**\r
- * \brief Enable/Disable ignore RX FCS.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param uc_enable   0 to disable ignore RX FCS, else to enable it.\r
- */\r
-static inline void gmac_enable_ignore_rx_fcs(Gmac* p_gmac, uint8_t uc_enable)\r
-{\r
-       if (uc_enable) {\r
-               p_gmac->GMAC_NCFGR |= GMAC_NCFGR_IRXFCS;\r
-       } else {\r
-               p_gmac->GMAC_NCFGR &= ~GMAC_NCFGR_IRXFCS;\r
-       }\r
-}\r
-\r
-/**\r
- * \brief Get Network Status.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- *\r
- * \return Network status.\r
- */\r
-static inline uint32_t gmac_get_status(Gmac* p_gmac)\r
-{\r
-       return p_gmac->GMAC_NSR;\r
-}\r
-\r
-/**\r
- * \brief Get MDIO IN pin status.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- *\r
- * \return MDIO IN pin status.\r
- */\r
-static inline uint8_t gmac_get_MDIO(Gmac* p_gmac)\r
-{\r
-       return ((p_gmac->GMAC_NSR & GMAC_NSR_MDIO) > 0);\r
-}\r
-\r
-/**\r
- * \brief Check if PHY is idle.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- *\r
- * \return  1 if PHY is idle.\r
- */\r
-static inline uint8_t gmac_is_phy_idle(Gmac* p_gmac)\r
-{\r
-       return ((p_gmac->GMAC_NSR & GMAC_NSR_IDLE) > 0);\r
-}\r
-\r
-/**\r
- * \brief Return transmit status.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- *\r
- * \return  Transmit status.\r
- */\r
-static inline uint32_t gmac_get_tx_status(Gmac* p_gmac)\r
-{\r
-       return p_gmac->GMAC_TSR;\r
-}\r
-\r
-/**\r
- * \brief Clear transmit status.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param ul_status   Transmit status.\r
- */\r
-static inline void gmac_clear_tx_status(Gmac* p_gmac, uint32_t ul_status)\r
-{\r
-       p_gmac->GMAC_TSR = ul_status;\r
-}\r
-\r
-/**\r
- * \brief Return receive status.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- */\r
-static inline uint32_t gmac_get_rx_status(Gmac* p_gmac)\r
-{\r
-       return p_gmac->GMAC_RSR;\r
-}\r
-\r
-/**\r
- * \brief Clear receive status.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param ul_status   Receive status.\r
- */\r
-static inline void gmac_clear_rx_status(Gmac* p_gmac, uint32_t ul_status)\r
-{\r
-       p_gmac->GMAC_RSR = ul_status;\r
-}\r
-\r
-/**\r
- * \brief Set Rx Queue.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param ul_addr   Rx queue address.\r
- */\r
-static inline void gmac_set_rx_queue(Gmac* p_gmac, uint32_t ul_addr)\r
-{\r
-       p_gmac->GMAC_RBQB = GMAC_RBQB_ADDR_Msk & ul_addr;\r
-}\r
-\r
-/**\r
- * \brief Get Rx Queue Address.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- *\r
- * \return  Rx queue address.\r
- */\r
-static inline uint32_t gmac_get_rx_queue(Gmac* p_gmac)\r
-{\r
-       return p_gmac->GMAC_RBQB;\r
-}\r
-\r
-/**\r
- * \brief Set Tx Queue.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param ul_addr  Tx queue address.\r
- */\r
-static inline void gmac_set_tx_queue(Gmac* p_gmac, uint32_t ul_addr)\r
-{\r
-       p_gmac->GMAC_TBQB = GMAC_TBQB_ADDR_Msk & ul_addr;\r
-}\r
-\r
-/**\r
- * \brief Get Tx Queue.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- *\r
- * \return  Rx queue address.\r
- */\r
-static inline uint32_t gmac_get_tx_queue(Gmac* p_gmac)\r
-{\r
-       return p_gmac->GMAC_TBQB;\r
-}\r
-\r
-/**\r
- * \brief Enable interrupt(s).\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param ul_source   Interrupt source(s) to be enabled.\r
- */\r
-static inline void gmac_enable_interrupt(Gmac* p_gmac, uint32_t ul_source)\r
-{\r
-       p_gmac->GMAC_IER = ul_source;\r
-}\r
-\r
-/**\r
- * \brief Disable interrupt(s).\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param ul_source   Interrupt source(s) to be disabled.\r
- */\r
-static inline void gmac_disable_interrupt(Gmac* p_gmac, uint32_t ul_source)\r
-{\r
-       p_gmac->GMAC_IDR = ul_source;\r
-}\r
-\r
-/**\r
- * \brief Return interrupt status.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- *\r
- * \return Interrupt status.\r
- */\r
-static inline uint32_t gmac_get_interrupt_status(Gmac* p_gmac)\r
-{\r
-       return p_gmac->GMAC_ISR;\r
-}\r
-\r
-/**\r
- * \brief Return interrupt mask.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- *\r
- * \return Interrupt mask.\r
- */\r
-static inline uint32_t gmac_get_interrupt_mask(Gmac* p_gmac)\r
-{\r
-       return p_gmac->GMAC_IMR;\r
-}\r
-\r
-/**\r
- * \brief Execute PHY maintenance command.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param uc_phy_addr   PHY address.\r
- * \param uc_reg_addr   Register address.\r
- * \param uc_rw   1 to Read, 0 to write.\r
- * \param us_data   Data to be performed, write only.\r
- */\r
-static inline void gmac_maintain_phy(Gmac* p_gmac,\r
-               uint8_t uc_phy_addr, uint8_t uc_reg_addr, uint8_t uc_rw,\r
-               uint16_t us_data)\r
-{\r
-       /* Wait until bus idle */\r
-       while ((p_gmac->GMAC_NSR & GMAC_NSR_IDLE) == 0);\r
-       /* Write maintain register */\r
-       p_gmac->GMAC_MAN = GMAC_MAN_WTN(GMAC_MAN_CODE_VALUE)\r
-                       | GMAC_MAN_CLTTO \r
-                       | GMAC_MAN_PHYA(uc_phy_addr)\r
-                       | GMAC_MAN_REGA(uc_reg_addr)\r
-                       | GMAC_MAN_OP((uc_rw ? GMAC_MAN_RW_TYPE : GMAC_MAN_READ_ONLY))\r
-                       | GMAC_MAN_DATA(us_data);\r
-}\r
-\r
-/**\r
- * \brief Get PHY maintenance data returned.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- *\r
- * \return Get PHY data.\r
- */\r
-static inline uint16_t gmac_get_phy_data(Gmac* p_gmac)\r
-{\r
-       /* Wait until bus idle */\r
-       while ((p_gmac->GMAC_NSR & GMAC_NSR_IDLE) == 0);\r
-       /* Return data */\r
-       return (uint16_t) (p_gmac->GMAC_MAN & GMAC_MAN_DATA_Msk);\r
-}\r
-\r
-/**\r
- * \brief Set Hash.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param ul_hash_top   Hash top.\r
- * \param ul_hash_bottom   Hash bottom.\r
- */\r
-static inline void gmac_set_hash(Gmac* p_gmac, uint32_t ul_hash_top,\r
-               uint32_t ul_hash_bottom)\r
-{\r
-       p_gmac->GMAC_HRB = ul_hash_bottom;\r
-       p_gmac->GMAC_HRT = ul_hash_top;\r
-}\r
-\r
-/**\r
- * \brief Set 64 bits Hash.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param ull_hash   64 bits hash value.\r
- */\r
-static inline void gmac_set_hash64(Gmac* p_gmac, uint64_t ull_hash)\r
-{\r
-       p_gmac->GMAC_HRB = (uint32_t) ull_hash;\r
-       p_gmac->GMAC_HRT = (uint32_t) (ull_hash >> 32);\r
-}\r
-\r
-/**\r
- * \brief Set MAC Address.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param uc_index  GMAC specific address register index.\r
- * \param p_mac_addr  GMAC address.\r
- */\r
-static inline void gmac_set_address(Gmac* p_gmac, uint8_t uc_index,\r
-               uint8_t* p_mac_addr)\r
-{\r
-       p_gmac->GMAC_SA[uc_index].GMAC_SAB = (p_mac_addr[3] << 24)\r
-                       | (p_mac_addr[2] << 16)\r
-                       | (p_mac_addr[1] << 8)\r
-                       | (p_mac_addr[0]);\r
-       p_gmac->GMAC_SA[uc_index].GMAC_SAT = (p_mac_addr[5] << 8)\r
-                       | (p_mac_addr[4]);\r
-}\r
-\r
-/**\r
- * \brief Set MAC Address via 2 dword.\r
-  *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param uc_index  GMAC specific address register index.\r
- * \param ul_mac_top  GMAC top address.\r
- * \param ul_mac_bottom  GMAC bottom address.\r
- */\r
-static inline void gmac_set_address32(Gmac* p_gmac, uint8_t uc_index,\r
-               uint32_t ul_mac_top, uint32_t ul_mac_bottom)\r
-{\r
-       p_gmac->GMAC_SA[uc_index].GMAC_SAB = ul_mac_bottom;\r
-       p_gmac->GMAC_SA[uc_index].GMAC_SAT = ul_mac_top;\r
-}\r
-\r
-/**\r
- * \brief Set MAC Address via int64.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param uc_index  GMAC specific address register index.\r
- * \param ull_mac  64-bit GMAC address.\r
- */\r
-static inline void gmac_set_address64(Gmac* p_gmac, uint8_t uc_index,\r
-               uint64_t ull_mac)\r
-{\r
-       p_gmac->GMAC_SA[uc_index].GMAC_SAB = (uint32_t) ull_mac;\r
-       p_gmac->GMAC_SA[uc_index].GMAC_SAT = (uint32_t) (ull_mac >> 32);\r
-}\r
-\r
-/**\r
- * \brief Select media independent interface mode.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param mode   Media independent interface mode.\r
- */\r
-static inline void gmac_select_mii_mode(Gmac* p_gmac, gmac_mii_mode_t mode)\r
-{\r
-       switch (mode) {\r
-               case GMAC_PHY_MII:\r
-               case GMAC_PHY_RMII:\r
-                       p_gmac->GMAC_UR |= GMAC_UR_RMIIMII;\r
-               break;\r
-\r
-               default:\r
-                       p_gmac->GMAC_UR &= ~GMAC_UR_RMIIMII;\r
-               break;\r
-       }\r
-}\r
-\r
-uint8_t gmac_phy_read(Gmac* p_gmac, uint8_t uc_phy_address, uint8_t uc_address,\r
-               uint32_t* p_value);\r
-uint8_t gmac_phy_write(Gmac* p_gmac, uint8_t uc_phy_address,\r
-               uint8_t uc_address, uint32_t ul_value);\r
-void gmac_dev_init(Gmac* p_gmac, gmac_device_t* p_gmac_dev,\r
-               gmac_options_t* p_opt);\r
-uint32_t gmac_dev_read(gmac_device_t* p_gmac_dev, uint8_t* p_frame,\r
-               uint32_t ul_frame_size, uint32_t* p_rcv_size);\r
-uint32_t gmac_dev_write(gmac_device_t* p_gmac_dev, void *p_buffer,\r
-               uint32_t ul_size, gmac_dev_tx_cb_t func_tx_cb);\r
-uint32_t gmac_dev_get_tx_load(gmac_device_t* p_gmac_dev);\r
-void gmac_dev_set_rx_callback(gmac_device_t* p_gmac_dev,\r
-               gmac_dev_tx_cb_t func_rx_cb);\r
-uint8_t gmac_dev_set_tx_wakeup_callback(gmac_device_t* p_gmac_dev,\r
-               gmac_dev_wakeup_cb_t func_wakeup, uint8_t uc_threshold);\r
-void gmac_dev_reset(gmac_device_t* p_gmac_dev);\r
-void gmac_handler(gmac_device_t* p_gmac_dev);\r
-\r
-/// @cond 0\r
-/**INDENT-OFF**/\r
-#ifdef __cplusplus\r
-}\r
-#endif\r
-/**INDENT-ON**/\r
-/// @endcond\r
-\r
-/**\r
- * \page gmac_quickstart Quickstart guide for GMAC driver.\r
- *\r
- * This is the quickstart guide for the \ref gmac_group "Ethernet MAC",\r
- * with step-by-step instructions on how to configure and use the driver in a\r
- * selection of use cases.\r
- *\r
- * The use cases contain several code fragments. The code fragments in the\r
- * steps for setup can be copied into a custom initialization function, while\r
- * the steps for usage can be copied into, e.g., the main application function.\r
- *\r
- * \section gmac_basic_use_case Basic use case\r
- * In the basic use case, the GMAC driver are configured for:\r
- * - PHY component KSZ8051MNL is used\r
- * - GMAC uses MII mode\r
- * - The number of receive buffer is 16\r
- * - The number of transfer buffer is 8\r
- * - MAC address is set to 00-04-25-1c-a0-02\r
- * - IP address is set to 192.168.0.2\r
- * - IP address is set to 192.168.0.2\r
- * - Gateway is set to 192.168.0.1\r
- * - Network mask is 255.255.255.0\r
- * - PHY operation max retry count is 1000000\r
- * - GMAC is configured to not support copy all frame and support broadcast\r
- * - The data will be read from the ethernet\r
- *\r
- * \section gmac_basic_use_case_setup Setup steps\r
- *\r
- * \subsection gmac_basic_use_case_setup_prereq Prerequisites\r
- * -# \ref sysclk_group "System Clock Management (sysclock)"\r
- * -# \ref pmc_group "Power Management Controller (pmc)"\r
- * -# \ref ksz8051mnl_ethernet_phy_group "PHY component (KSZ8051MNL)"\r
- *\r
- * \subsection gmac_basic_use_case_setup_code Example code\r
- * Content of conf_eth.h\r
- * \code\r
- * #define GMAC_RX_BUFFERS                               16\r
- * #define GMAC_TX_BUFFERS                               8\r
- * #define MAC_PHY_RETRY_MAX                             1000000\r
- * #define ETHERNET_CONF_ETHADDR0                        0x00\r
- * #define ETHERNET_CONF_ETHADDR0                        0x00\r
- * #define ETHERNET_CONF_ETHADDR1                        0x04\r
- * #define ETHERNET_CONF_ETHADDR2                        0x25\r
- * #define ETHERNET_CONF_ETHADDR3                        0x1C\r
- * #define ETHERNET_CONF_ETHADDR4                        0xA0\r
- * #define ETHERNET_CONF_ETHADDR5                        0x02\r
- * #define ETHERNET_CONF_IPADDR0                         192\r
- * #define ETHERNET_CONF_IPADDR1                         168\r
- * #define ETHERNET_CONF_IPADDR2                         0\r
- * #define ETHERNET_CONF_IPADDR3                         2\r
- * #define ETHERNET_CONF_GATEWAY_ADDR0                   192\r
- * #define ETHERNET_CONF_GATEWAY_ADDR1                   168\r
- * #define ETHERNET_CONF_GATEWAY_ADDR2                   0\r
- * #define ETHERNET_CONF_GATEWAY_ADDR3                   1\r
- * #define ETHERNET_CONF_NET_MASK0                       255\r
- * #define ETHERNET_CONF_NET_MASK1                       255\r
- * #define ETHERNET_CONF_NET_MASK2                       255\r
- * #define ETHERNET_CONF_NET_MASK3                       0\r
- * #define ETH_PHY_MODE                                  ETH_PHY_MODE\r
- * \endcode\r
- *\r
- * A specific gmac device and the receive data buffer must be defined; another ul_frm_size should be defined\r
- * to trace the actual size of the data received.\r
- * \code\r
- * static gmac_device_t gs_gmac_dev;\r
- * static volatile uint8_t gs_uc_eth_buffer[GMAC_FRAME_LENTGH_MAX];\r
- *\r
- * uint32_t ul_frm_size;\r
- * \endcode\r
- *\r
- * Add to application C-file:\r
- * \code\r
- *   void gmac_init(void)\r
- *   {\r
- *       sysclk_init();\r
- *\r
- *       board_init();\r
- *\r
- *       pmc_enable_periph_clk(ID_GMAC);\r
- *\r
- *       gmac_option.uc_copy_all_frame = 0;\r
- *       gmac_option.uc_no_boardcast = 0;\r
- *       memcpy(gmac_option.uc_mac_addr, gs_uc_mac_address, sizeof(gs_uc_mac_address));\r
- *       gs_gmac_dev.p_hw = GMAC;\r
- *\r
- *       gmac_dev_init(GMAC, &gs_gmac_dev, &gmac_option);\r
- *\r
- *       NVIC_EnableIRQ(GMAC_IRQn);\r
- *\r
- *       ethernet_phy_init(GMAC, BOARD_GMAC_PHY_ADDR, sysclk_get_cpu_hz());\r
- * \r
- *       ethernet_phy_auto_negotiate(GMAC, BOARD_GMAC_PHY_ADDR);\r
- *\r
- *       ethernet_phy_set_link(GMAC, BOARD_GMAC_PHY_ADDR, 1);\r
- * \endcode\r
- *\r
- * \subsection gmac_basic_use_case_setup_flow Workflow\r
- * - Ensure that conf_eth.h is present and contains the\r
- * following configuration symbol. This configuration file is used\r
- * by the driver and should not be included by the application.\r
- * -# Define the receiving buffer size used in the internal GMAC driver.\r
- * The buffer size used for RX is GMAC_RX_BUFFERS * 128.\r
- * If it was supposed receiving a large number of frame, the\r
- * GMAC_RX_BUFFERS should be set higher. E.g., the application wants to accept\r
- * a ping echo test of 2048, the GMAC_RX_BUFFERS should be set at least \r
- * (2048/128)=16, and as there are additional frames coming, a preferred\r
- * number is 24 depending on a normal Ethernet throughput.\r
- *   - \code\r
- *        #define GMAC_RX_BUFFERS                               16\r
- *   \endcode\r
- * -# Define the transmitting buffer size used in the internal GMAC driver.\r
- * The buffer size used for TX is GMAC_TX_BUFFERS * 1518.\r
- *   - \code\r
- *        #define GMAC_TX_BUFFERS                               8\r
- *   \endcode\r
- * -# Define maximum retry time for a PHY read/write operation.\r
- *   - \code\r
- *        #define MAC_PHY_RETRY_MAX                             1000000\r
- *   \endcode\r
- * -# Define the MAC address. 00:04:25:1C:A0:02 is the address reserved\r
- * for ATMEL, application should always change this address to its' own.\r
- *   - \code\r
- *        #define ETHERNET_CONF_ETHADDR0                        0x00\r
- *        #define ETHERNET_CONF_ETHADDR1                        0x04\r
- *        #define ETHERNET_CONF_ETHADDR2                        0x25\r
- *        #define ETHERNET_CONF_ETHADDR3                        0x1C\r
- *        #define ETHERNET_CONF_ETHADDR4                        0xA0\r
- *        #define ETHERNET_CONF_ETHADDR5                        0x02\r
- *   \endcode\r
- * -# Define the IP address configration used in the application. When DHCP\r
- *  is enabled, this configuration is not effected.\r
- *   - \code\r
- *        #define ETHERNET_CONF_IPADDR0                         192\r
- *        #define ETHERNET_CONF_IPADDR1                         168\r
- *        #define ETHERNET_CONF_IPADDR2                         0\r
- *        #define ETHERNET_CONF_IPADDR3                         2\r
- *        #define ETHERNET_CONF_GATEWAY_ADDR0                   192\r
- *        #define ETHERNET_CONF_GATEWAY_ADDR1                   168\r
- *        #define ETHERNET_CONF_GATEWAY_ADDR2                   0\r
- *        #define ETHERNET_CONF_GATEWAY_ADDR3                   1\r
- *        #define ETHERNET_CONF_NET_MASK0                       255\r
- *        #define ETHERNET_CONF_NET_MASK1                       255\r
- *        #define ETHERNET_CONF_NET_MASK2                       255\r
- *        #define ETHERNET_CONF_NET_MASK3                       0\r
- *   \endcode\r
- * -# Configure the PHY maintainance interface.\r
- *   - \code\r
- *        #define ETH_PHY_MODE                                  GMAC_PHY_MII\r
- *   \endcode\r
- * -# Enable the system clock:\r
- *   - \code sysclk_init(); \endcode\r
- * -# Enable PIO configurations for GMAC:\r
- *   - \code board_init(); \endcode\r
- * -# Enable PMC clock for GMAC:\r
- *   - \code pmc_enable_periph_clk(ID_GMAC); \endcode\r
- * -# Set the GMAC options; it's set to copy all frame and support broadcast:\r
- *   - \code\r
- *         gmac_option.uc_copy_all_frame = 0;\r
- *         gmac_option.uc_no_boardcast = 0;\r
- *         memcpy(gmac_option.uc_mac_addr, gs_uc_mac_address, sizeof(gs_uc_mac_address));\r
- *         gs_gmac_dev.p_hw = GMAC;\r
- * \endcode\r
- * -# Initialize GMAC device with the filled option:\r
- *   - \code\r
- *         gmac_dev_init(GMAC, &gs_gmac_dev, &gmac_option);\r
- * \endcode\r
- * -# Enable the interrupt service for GMAC:\r
- *   - \code\r
- *         NVIC_EnableIRQ(GMAC_IRQn);\r
- * \endcode\r
- * -# Initialize the PHY component:\r
- *   - \code\r
- *         ethernet_phy_init(GMAC, BOARD_GMAC_PHY_ADDR, sysclk_get_cpu_hz());\r
- * \endcode\r
-  * -# The link will be established based on auto negotiation.\r
- *   - \code\r
- *         ethernet_phy_auto_negotiate(GMAC, BOARD_GMAC_PHY_ADDR);\r
- * \endcode\r
- * -# Establish the ethernet link; the network can be worked from now on:\r
- *   - \code\r
- *         ethernet_phy_set_link(GMAC, BOARD_GMAC_PHY_ADDR, 1);\r
- * \endcode\r
- *\r
- * \section gmac_basic_use_case_usage Usage steps\r
- * \subsection gmac_basic_use_case_usage_code Example code\r
- * Add to, e.g., main loop in application C-file:\r
- * \code\r
- *    gmac_dev_read(&gs_gmac_dev, (uint8_t *) gs_uc_eth_buffer, sizeof(gs_uc_eth_buffer), &ul_frm_size));\r
- * \endcode\r
- *\r
- * \subsection gmac_basic_use_case_usage_flow Workflow\r
- * -# Start reading the data from the ethernet:\r
- *   - \code gmac_dev_read(&gs_gmac_dev, (uint8_t *) gs_uc_eth_buffer, sizeof(gs_uc_eth_buffer), &ul_frm_size)); \endcode\r
- */\r
-\r
-#      define GMAC_STATS 0\r
-\r
-#if( GMAC_STATS != 0 )\r
-\r
-       /* Here below some code to study the types and\r
-       frequencies of  GMAC interrupts. */\r
-       #define GMAC_IDX_RXUBR 0\r
-       #define GMAC_IDX_TUR   1\r
-       #define GMAC_IDX_RLEX  2\r
-       #define GMAC_IDX_TFC   3\r
-       #define GMAC_IDX_RCOMP 4\r
-       #define GMAC_IDX_TCOMP 5\r
-       #define GMAC_IDX_ROVR  6\r
-       #define GMAC_IDX_HRESP 7\r
-       #define GMAC_IDX_PFNZ  8\r
-       #define GMAC_IDX_PTZ   9\r
-\r
-       struct SGmacStats {\r
-               unsigned recvCount;\r
-               unsigned rovrCount;\r
-               unsigned bnaCount;\r
-               unsigned sendCount;\r
-               unsigned sovrCount;\r
-               unsigned incompCount;\r
-               unsigned truncCount;\r
-\r
-               unsigned intStatus[10];\r
-       };\r
-       extern struct SGmacStats gmacStats;\r
-\r
-       struct SIntPair {\r
-               const char *name;\r
-               unsigned mask;\r
-               int index;\r
-       };\r
-\r
-       #define MK_PAIR( NAME )   #NAME, GMAC_IER_##NAME, GMAC_IDX_##NAME\r
-       static const struct SIntPair intPairs[] = {\r
-               { MK_PAIR( RXUBR ) }, /* Enable receive used bit read interrupt. */\r
-               { MK_PAIR( TUR   ) }, /* Enable transmit underrun interrupt. */\r
-               { MK_PAIR( RLEX  ) }, /* Enable retry limit  exceeded interrupt. */\r
-               { MK_PAIR( TFC   ) }, /* Enable transmit buffers exhausted in mid-frame interrupt. */\r
-               { MK_PAIR( RCOMP ) }, /* Receive complete */\r
-               { MK_PAIR( TCOMP ) }, /* Enable transmit complete interrupt. */\r
-               { MK_PAIR( ROVR  ) }, /* Enable receive overrun interrupt. */\r
-               { MK_PAIR( HRESP ) }, /* Enable Hresp not OK interrupt. */\r
-               { MK_PAIR( PFNZ  ) }, /* Enable pause frame received interrupt. */\r
-               { MK_PAIR( PTZ   ) }  /* Enable pause time zero interrupt. */\r
-       };\r
-\r
-       void gmac_show_irq_counts ();\r
-\r
-#endif\r
-\r
-#endif /* GMAC_H_INCLUDED */\r
+ /**
+ * \file
+ *
+ * \brief GMAC (Ethernet MAC) driver for SAM.
+ *
+ * Copyright (c) 2013 Atmel Corporation. All rights reserved.
+ *
+ * \asf_license_start
+ *
+ * \page License
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ *
+ * 3. The name of Atmel may not be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * 4. This software may only be redistributed and used in connection with an
+ *    Atmel microcontroller product.
+ *
+ * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
+ * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * \asf_license_stop
+ *
+ */
+
+#ifndef GMAC_H_INCLUDED
+#define GMAC_H_INCLUDED
+
+#include "compiler.h"
+
+/// @cond 0
+/**INDENT-OFF**/
+#ifdef __cplusplus
+extern "C" {
+#endif
+/**INDENT-ON**/
+/// @endcond
+
+/** The buffer addresses written into the descriptors must be aligned, so the
+    last few bits are zero.  These bits have special meaning for the GMAC
+    peripheral and cannot be used as part of the address. */
+#define GMAC_RXD_ADDR_MASK      0xFFFFFFFC
+#define GMAC_RXD_WRAP         (1ul << 1)  /**< Wrap bit */
+#define GMAC_RXD_OWNERSHIP    (1ul << 0)  /**< Ownership bit */
+
+#define GMAC_RXD_BROADCAST    (1ul << 31) /**< Broadcast detected */
+#define GMAC_RXD_MULTIHASH    (1ul << 30) /**< Multicast hash match */
+#define GMAC_RXD_UNIHASH      (1ul << 29) /**< Unicast hash match */
+#define GMAC_RXD_ADDR_FOUND      (1ul << 27) /**< Specific address match found */
+#define GMAC_RXD_ADDR        (3ul << 25) /**< Address match */
+#define GMAC_RXD_RXCOEN        (1ul << 24) /**< RXCOEN related function */
+#define GMAC_RXD_TYPE         (3ul << 22) /**< Type ID match */
+#define GMAC_RXD_VLAN         (1ul << 21) /**< VLAN tag detected */
+#define GMAC_RXD_PRIORITY     (1ul << 20) /**< Priority tag detected */
+#define GMAC_RXD_PRIORITY_MASK  (3ul << 17) /**< VLAN priority */
+#define GMAC_RXD_CFI          (1ul << 16) /**< Concatenation Format Indicator only if bit 21 is set */
+#define GMAC_RXD_EOF          (1ul << 15) /**< End of frame */
+#define GMAC_RXD_SOF          (1ul << 14) /**< Start of frame */
+#define GMAC_RXD_FCS          (1ul << 13) /**< Frame check sequence */
+#define GMAC_RXD_OFFSET_MASK                /**< Receive buffer offset */
+#define GMAC_RXD_LEN_MASK       (0xFFF)     /**< Length of frame including FCS (if selected) */
+#define GMAC_RXD_LENJUMBO_MASK  (0x3FFF)    /**< Jumbo frame length */
+
+#define GMAC_TXD_USED         (1ul << 31) /**< Frame is transmitted */
+#define GMAC_TXD_WRAP         (1ul << 30) /**< Last descriptor */
+#define GMAC_TXD_ERROR        (1ul << 29) /**< Retry limit exceeded, error */
+#define GMAC_TXD_UNDERRUN     (1ul << 28) /**< Transmit underrun */
+#define GMAC_TXD_EXHAUSTED    (1ul << 27) /**< Buffer exhausted */
+#define GMAC_TXD_LATE    (1ul << 26) /**< Late collision,transmit  error  */
+#define GMAC_TXD_CHECKSUM_ERROR   (7ul << 20) /**< Checksum error */
+#define GMAC_TXD_NOCRC        (1ul << 16) /**< No CRC */
+#define GMAC_TXD_LAST         (1ul << 15) /**< Last buffer in frame */
+#define GMAC_TXD_LEN_MASK       (0x1FFF)     /**< Length of buffer */
+
+/** The MAC can support frame lengths up to 1536 bytes */
+#define GMAC_FRAME_LENTGH_MAX       1536
+
+#define GMAC_RX_UNITSIZE            128     /**< Fixed size for RX buffer  */
+#define GMAC_TX_UNITSIZE            1518    /**< Size for ETH frame length */
+
+/** GMAC clock speed */
+#define GMAC_MCK_SPEED_240MHZ        (240*1000*1000)
+#define GMAC_MCK_SPEED_160MHZ        (160*1000*1000)
+#define GMAC_MCK_SPEED_120MHZ        (120*1000*1000)
+#define GMAC_MCK_SPEED_80MHZ          (80*1000*1000)
+#define GMAC_MCK_SPEED_40MHZ          (40*1000*1000)
+#define GMAC_MCK_SPEED_20MHZ          (20*1000*1000)
+
+/** GMAC maintain code default value*/
+#define GMAC_MAN_CODE_VALUE    (10)
+
+/** GMAC maintain start of frame default value*/
+#define GMAC_MAN_SOF_VALUE     (1)
+
+/** GMAC maintain read/write*/
+#define GMAC_MAN_RW_TYPE       (2)
+
+/** GMAC maintain read only*/
+#define GMAC_MAN_READ_ONLY     (1)
+
+/** GMAC address length */
+#define GMAC_ADDR_LENGTH       (6)
+
+
+#define GMAC_DUPLEX_HALF 0
+#define GMAC_DUPLEX_FULL 1
+
+#define GMAC_SPEED_10M      0
+#define GMAC_SPEED_100M     1
+
+/**
+ * \brief Return codes for GMAC APIs.
+ */
+typedef enum {
+       GMAC_OK = 0,         /** 0  Operation OK */
+       GMAC_TIMEOUT = 1,    /** 1  GMAC operation timeout */
+       GMAC_TX_BUSY,        /** 2  TX in progress */
+       GMAC_RX_NULL,        /** 3  No data received */
+       GMAC_SIZE_TOO_SMALL, /** 4  Buffer size not enough */
+       GMAC_PARAM,          /** 5  Parameter error, TX packet invalid or RX size too small */
+       GMAC_INVALID = 0xFF, /* Invalid */
+} gmac_status_t;
+
+/**
+ * \brief Media Independent Interface (MII) type.
+ */
+typedef enum {
+       GMAC_PHY_MII = 0,         /** MII mode */
+       GMAC_PHY_RMII = 1,    /** Reduced MII mode */
+       GMAC_PHY_INVALID = 0xFF, /* Invalid mode*/
+} gmac_mii_mode_t;
+
+/** Receive buffer descriptor struct */
+COMPILER_PACK_SET(8)
+typedef struct gmac_rx_descriptor {
+       union gmac_rx_addr {
+               uint32_t val;
+               struct gmac_rx_addr_bm {
+                       uint32_t b_ownership:1, /**< User clear, GMAC sets this to 1 once it has successfully written a frame to memory */
+                       b_wrap:1,   /**< Marks last descriptor in receive buffer */
+                       addr_dw:30; /**< Address in number of DW */
+               } bm;
+       } addr; /**< Address, Wrap & Ownership */
+       union gmac_rx_status {
+               uint32_t val;
+               struct gmac_rx_status_bm {
+                       uint32_t len:13,       /**  0..12  Length of frame including FCS */
+                       b_fcs:1,               /**  13     Receive buffer offset,  bits 13:12 of frame length for jumbo frame */
+                       b_sof:1,               /**  14     Start of frame */
+                       b_eof:1,               /**  15     End of frame */
+                       b_cfi:1,               /**  16     Concatenation Format Indicator */
+                       vlan_priority:3,       /**  17..19 VLAN priority (if VLAN detected) */
+                       b_priority_detected:1, /**  20     Priority tag detected */
+                       b_vlan_detected:1,     /**  21     VLAN tag detected */
+                       b_type_id_match:2,     /**  22..23 Type ID match */
+                       b_checksumoffload:1,   /**  24     Checksum offload specific function */
+                       b_addrmatch:2,         /**  25..26 Address register match */
+                       b_ext_addr_match:1,    /**  27     External address match found */
+                       reserved:1,            /**  28     */
+                       b_uni_hash_match:1,    /**  29     Unicast hash match */
+                       b_multi_hash_match:1,  /**  30     Multicast hash match */
+                       b_boardcast_detect:1;  /**  31     Global broadcast address detected */
+               } bm;
+       } status;
+} gmac_rx_descriptor_t;
+
+/** Transmit buffer descriptor struct */
+COMPILER_PACK_SET(8)
+typedef struct gmac_tx_descriptor {
+       uint32_t addr;
+       union gmac_tx_status {
+               uint32_t val;
+               struct gmac_tx_status_bm {
+                       uint32_t len:14,     /**  0..13 Length of buffer */
+                       reserved:1,          /** 14            */
+                       b_last_buffer:1,     /** 15     Last buffer (in the current frame) */
+                       b_no_crc:1,          /** 16     No CRC */
+                       reserved1:3,         /** 17..19        */
+                       b_checksumoffload:3, /** 20..22 Transmit checksum generation offload errors */
+                       reserved2:3,         /** 23..25        */
+                       b_lco:1,             /** 26     Late collision, transmit error detected */
+                       b_exhausted:1,       /** 27     Buffer exhausted in mid frame */
+                       b_underrun:1,        /** 28     Transmit underrun */
+                       b_error:1,           /** 29     Retry limit exceeded, error detected */
+                       b_wrap:1,            /** 30     Marks last descriptor in TD list */
+                       b_used:1;            /** 31     User clear, GMAC sets this to 1 once a frame has been successfully transmitted */
+               } bm;
+       } status;
+} gmac_tx_descriptor_t;
+
+COMPILER_PACK_RESET()
+
+/**
+ * \brief Input parameters when initializing the gmac module mode.
+ */
+typedef struct gmac_options {
+       /*  Enable/Disable CopyAllFrame */
+       uint8_t uc_copy_all_frame;
+       /* Enable/Disable NoBroadCast */
+       uint8_t uc_no_boardcast;
+       /* MAC address */
+       uint8_t uc_mac_addr[GMAC_ADDR_LENGTH];
+} gmac_options_t;
+
+/** RX callback */
+typedef void (*gmac_dev_tx_cb_t) (uint32_t ul_status);
+/** Wakeup callback */
+typedef void (*gmac_dev_wakeup_cb_t) (void);
+
+/**
+ * GMAC driver structure.
+ */
+typedef struct gmac_device {
+
+       /** Pointer to HW register base */
+       Gmac *p_hw;
+       /**
+        * Pointer to allocated TX buffer.
+        * Section 3.6 of AMBA 2.0 spec states that burst should not cross
+        * 1K Boundaries.
+        * Receive buffer manager writes are burst of 2 words => 3 lsb bits
+        * of the address shall be set to 0.
+        */
+       uint8_t *p_tx_buffer;
+       /** Pointer to allocated RX buffer */
+       uint8_t *p_rx_buffer;
+       /** Pointer to Rx TDs (must be 8-byte aligned) */
+       gmac_rx_descriptor_t *p_rx_dscr;
+       /** Pointer to Tx TDs (must be 8-byte aligned) */
+       gmac_tx_descriptor_t *p_tx_dscr;
+       /** Optional callback to be invoked once a frame has been received */
+       gmac_dev_tx_cb_t func_rx_cb;
+#if( GMAC_USES_WAKEUP_CALLBACK )
+       /** Optional callback to be invoked once several TDs have been released */
+       gmac_dev_wakeup_cb_t func_wakeup_cb;
+#endif
+#if( GMAC_USES_TX_CALLBACK != 0 )
+       /** Optional callback list to be invoked once TD has been processed */
+       gmac_dev_tx_cb_t *func_tx_cb_list;
+#endif
+       /** RX TD list size */
+       uint32_t ul_rx_list_size;
+       /** RX index for current processing TD */
+       uint32_t ul_rx_idx;
+       /** TX TD list size */
+       uint32_t ul_tx_list_size;
+       /** Circular buffer head pointer by upper layer (buffer to be sent) */
+       int32_t l_tx_head;
+       /** Circular buffer tail pointer incremented by handlers (buffer sent) */
+       int32_t l_tx_tail;
+
+       /** Number of free TD before wakeup callback is invoked */
+       uint32_t uc_wakeup_threshold;
+} gmac_device_t;
+
+/**
+ * \brief Write network control value.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param ul_ncr   Network control value.
+ */
+static inline void gmac_network_control(Gmac* p_gmac, uint32_t ul_ncr)
+{
+       p_gmac->GMAC_NCR = ul_ncr;
+}
+
+/**
+ * \brief Get network control value.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ */
+
+static inline uint32_t gmac_get_network_control(Gmac* p_gmac)
+{
+       return p_gmac->GMAC_NCR;
+}
+
+/**
+ * \brief Enable/Disable GMAC receive.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param uc_enable   0 to disable GMAC receiver, else to enable it.
+ */
+static inline void gmac_enable_receive(Gmac* p_gmac, uint8_t uc_enable)
+{
+       if (uc_enable) {
+               p_gmac->GMAC_NCR |= GMAC_NCR_RXEN;
+       } else {
+               p_gmac->GMAC_NCR &= ~GMAC_NCR_RXEN;
+       }
+}
+
+/**
+ * \brief Enable/Disable GMAC transmit.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param uc_enable   0 to disable GMAC transmit, else to enable it.
+ */
+static inline void gmac_enable_transmit(Gmac* p_gmac, uint8_t uc_enable)
+{
+       if (uc_enable) {
+               p_gmac->GMAC_NCR |= GMAC_NCR_TXEN;
+       } else {
+               p_gmac->GMAC_NCR &= ~GMAC_NCR_TXEN;
+       }
+}
+
+/**
+ * \brief Enable/Disable GMAC management.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param uc_enable   0 to disable GMAC management, else to enable it.
+ */
+static inline void gmac_enable_management(Gmac* p_gmac, uint8_t uc_enable)
+{
+       if (uc_enable) {
+               p_gmac->GMAC_NCR |= GMAC_NCR_MPE;
+       } else {
+               p_gmac->GMAC_NCR &= ~GMAC_NCR_MPE;
+       }
+}
+
+/**
+ * \brief Clear all statistics registers.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ */
+static inline void gmac_clear_statistics(Gmac* p_gmac)
+{
+       p_gmac->GMAC_NCR |= GMAC_NCR_CLRSTAT;
+}
+
+/**
+ * \brief Increase all statistics registers.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ */
+static inline void gmac_increase_statistics(Gmac* p_gmac)
+{
+       p_gmac->GMAC_NCR |= GMAC_NCR_INCSTAT;
+}
+
+/**
+ * \brief Enable/Disable statistics registers writing.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param uc_enable   0 to disable the statistics registers writing, else to enable it.
+ */
+static inline void gmac_enable_statistics_write(Gmac* p_gmac,
+               uint8_t uc_enable)
+{
+       if (uc_enable) {
+               p_gmac->GMAC_NCR |= GMAC_NCR_WESTAT;
+       } else {
+               p_gmac->GMAC_NCR &= ~GMAC_NCR_WESTAT;
+       }
+}
+
+/**
+ * \brief In half-duplex mode, forces collisions on all received frames.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param uc_enable   0 to disable the back pressure, else to enable it.
+ */
+static inline void gmac_enable_back_pressure(Gmac* p_gmac, uint8_t uc_enable)
+{
+       if (uc_enable) {
+               p_gmac->GMAC_NCR |= GMAC_NCR_BP;
+       } else {
+               p_gmac->GMAC_NCR &= ~GMAC_NCR_BP;
+       }
+}
+
+/**
+ * \brief Start transmission.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ */
+static inline void gmac_start_transmission(Gmac* p_gmac)
+{
+       p_gmac->GMAC_NCR |= GMAC_NCR_TSTART;
+}
+
+/**
+ * \brief Halt transmission.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ */
+static inline void gmac_halt_transmission(Gmac* p_gmac)
+{
+       p_gmac->GMAC_NCR |= GMAC_NCR_THALT;
+}
+
+/**
+ * \brief Transmit pause frame.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ */
+static inline void gmac_tx_pause_frame(Gmac* p_gmac)
+{
+       p_gmac->GMAC_NCR |= GMAC_NCR_TXPF;
+}
+
+/**
+ * \brief Transmit zero quantum pause frame.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ */
+static inline void gmac_tx_pause_zero_quantum_frame(Gmac* p_gmac)
+{
+       p_gmac->GMAC_NCR |= GMAC_NCR_TXZQPF;
+}
+
+/**
+ * \brief Read snapshot.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ */
+static inline void gmac_read_snapshot(Gmac* p_gmac)
+{
+       p_gmac->GMAC_NCR |= GMAC_NCR_RDS;
+}
+
+/**
+ * \brief Store receivetime stamp to memory.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param uc_enable   0 to normal operation, else to enable the store.
+ */
+static inline void gmac_store_rx_time_stamp(Gmac* p_gmac, uint8_t uc_enable)
+{
+       if (uc_enable) {
+               p_gmac->GMAC_NCR |= GMAC_NCR_SRTSM;
+       } else {
+               p_gmac->GMAC_NCR &= ~GMAC_NCR_SRTSM;
+       }
+}
+
+/**
+ * \brief Enable PFC priority-based pause reception.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param uc_enable   1 to set the reception, 0 to disable.
+ */
+static inline void gmac_enable_pfc_pause_frame(Gmac* p_gmac, uint8_t uc_enable)
+{
+       if (uc_enable) {
+               p_gmac->GMAC_NCR |= GMAC_NCR_ENPBPR;
+       } else {
+               p_gmac->GMAC_NCR &= ~GMAC_NCR_ENPBPR;
+       }
+}
+
+/**
+ * \brief Transmit PFC priority-based pause reception.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ */
+static inline void gmac_transmit_pfc_pause_frame(Gmac* p_gmac)
+{
+               p_gmac->GMAC_NCR |= GMAC_NCR_TXPBPF;
+}
+
+/**
+ * \brief Flush next packet.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ */
+static inline void gmac_flush_next_packet(Gmac* p_gmac)
+{
+               p_gmac->GMAC_NCR |= GMAC_NCR_FNP;
+}
+
+/**
+ * \brief Set up network configuration register.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+  * \param ul_cfg   Network configuration value.
+ */
+static inline void gmac_set_configure(Gmac* p_gmac, uint32_t ul_cfg)
+{
+       p_gmac->GMAC_NCFGR = ul_cfg;
+}
+
+/**
+ * \brief Get network configuration.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ *
+ * \return Network configuration.
+ */
+static inline uint32_t gmac_get_configure(Gmac* p_gmac)
+{
+       return p_gmac->GMAC_NCFGR;
+}
+
+
+/* Get and set DMA Configuration Register */
+static inline void gmac_set_dma(Gmac* p_gmac, uint32_t ul_cfg)
+{
+       p_gmac->GMAC_DCFGR = ul_cfg;
+}
+
+static inline uint32_t gmac_get_dma(Gmac* p_gmac)
+{
+       return p_gmac->GMAC_DCFGR;
+}
+
+/**
+ * \brief Set speed.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param uc_speed 1 to indicate 100Mbps, 0 to 10Mbps.
+ */
+static inline void gmac_set_speed(Gmac* p_gmac, uint8_t uc_speed)
+{
+       if (uc_speed) {
+               p_gmac->GMAC_NCFGR |= GMAC_NCFGR_SPD;
+       } else {
+               p_gmac->GMAC_NCFGR &= ~GMAC_NCFGR_SPD;
+       }
+}
+
+/**
+ * \brief Enable/Disable Full-Duplex mode.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param uc_enable   0 to disable the Full-Duplex mode, else to enable it.
+ */
+static inline void gmac_enable_full_duplex(Gmac* p_gmac, uint8_t uc_enable)
+{
+       if (uc_enable) {
+               p_gmac->GMAC_NCFGR |= GMAC_NCFGR_FD;
+       } else {
+               p_gmac->GMAC_NCFGR &= ~GMAC_NCFGR_FD;
+       }
+}
+
+/**
+ * \brief Enable/Disable Copy(Receive) All Valid Frames.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param uc_enable   0 to disable copying all valid frames, else to enable it.
+ */
+static inline void gmac_enable_copy_all(Gmac* p_gmac, uint8_t uc_enable)
+{
+       if (uc_enable) {
+               p_gmac->GMAC_NCFGR |= GMAC_NCFGR_CAF;
+       } else {
+               p_gmac->GMAC_NCFGR &= ~GMAC_NCFGR_CAF;
+       }
+}
+
+/**
+ * \brief Enable/Disable jumbo frames (up to 10240 bytes).
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param uc_enable   0 to disable the jumbo frames, else to enable it.
+ */
+static inline void gmac_enable_jumbo_frames(Gmac* p_gmac, uint8_t uc_enable)
+{
+       if (uc_enable) {
+               p_gmac->GMAC_NCFGR |= GMAC_NCFGR_JFRAME;
+       } else {
+               p_gmac->GMAC_NCFGR &= ~GMAC_NCFGR_JFRAME;
+       }
+}
+
+/**
+ * \brief Disable/Enable broadcast receiving.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param uc_enable   1 to disable the broadcast, else to enable it.
+ */
+static inline void gmac_disable_broadcast(Gmac* p_gmac, uint8_t uc_enable)
+{
+       if (uc_enable) {
+               p_gmac->GMAC_NCFGR |= GMAC_NCFGR_NBC;
+       } else {
+               p_gmac->GMAC_NCFGR &= ~GMAC_NCFGR_NBC;
+       }
+}
+
+/**
+ * \brief Enable/Disable multicast hash.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param uc_enable   0 to disable the multicast hash, else to enable it.
+ */
+static inline void gmac_enable_multicast_hash(Gmac* p_gmac, uint8_t uc_enable)
+{
+       if (uc_enable) {
+               p_gmac->GMAC_NCFGR |= GMAC_NCFGR_UNIHEN;
+       } else {
+               p_gmac->GMAC_NCFGR &= ~GMAC_NCFGR_UNIHEN;
+       }
+}
+
+/**
+ * \brief Enable/Disable big frames (over 1518, up to 1536).
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param uc_enable   0 to disable big frames else to enable it.
+ */
+static inline void gmac_enable_big_frame(Gmac* p_gmac, uint8_t uc_enable)
+{
+       if (uc_enable) {
+               p_gmac->GMAC_NCFGR |= GMAC_NCFGR_MAXFS;
+       } else {
+               p_gmac->GMAC_NCFGR &= ~GMAC_NCFGR_MAXFS;
+       }
+}
+
+/**
+ * \brief Set MDC clock divider.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param ul_mck   GMAC MCK.
+ *
+ * \return GMAC_OK if successfully.
+ */
+static inline uint8_t gmac_set_mdc_clock(Gmac* p_gmac, uint32_t ul_mck)
+{
+       uint32_t ul_clk;
+       
+       if (ul_mck > GMAC_MCK_SPEED_240MHZ) {
+               return GMAC_INVALID;
+       } else if (ul_mck > GMAC_MCK_SPEED_160MHZ) {
+               ul_clk = GMAC_NCFGR_CLK_MCK_96;
+       } else if (ul_mck > GMAC_MCK_SPEED_120MHZ) {
+               ul_clk = GMAC_NCFGR_CLK_MCK_64;
+       } else if (ul_mck > GMAC_MCK_SPEED_80MHZ) {
+               ul_clk = GMAC_NCFGR_CLK_MCK_48;
+       } else if (ul_mck > GMAC_MCK_SPEED_40MHZ) {
+               ul_clk = GMAC_NCFGR_CLK_MCK_32;
+       } else if (ul_mck > GMAC_MCK_SPEED_20MHZ) {
+               ul_clk = GMAC_NCFGR_CLK_MCK_16;
+       } else {
+               ul_clk = GMAC_NCFGR_CLK_MCK_8;
+       }
+       ;
+       p_gmac->GMAC_NCFGR = (p_gmac->GMAC_NCFGR & ~GMAC_NCFGR_CLK_Msk) | ul_clk;
+       return GMAC_OK;
+}
+
+/**
+ * \brief Enable/Disable retry test.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param uc_enable   0 to disable the GMAC receiver, else to enable it.
+ */
+static inline void gmac_enable_retry_test(Gmac* p_gmac, uint8_t uc_enable)
+{
+       if (uc_enable) {
+               p_gmac->GMAC_NCFGR |= GMAC_NCFGR_RTY;
+       } else {
+               p_gmac->GMAC_NCFGR &= ~GMAC_NCFGR_RTY;
+       }
+}
+
+/**
+ * \brief Enable/Disable pause (when a valid pause frame is received).
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param uc_enable   0 to disable pause frame, else to enable it.
+ */
+static inline void gmac_enable_pause_frame(Gmac* p_gmac, uint8_t uc_enable)
+{
+       if (uc_enable) {
+               p_gmac->GMAC_NCFGR |= GMAC_NCFGR_PEN;
+       } else {
+               p_gmac->GMAC_NCFGR &= ~GMAC_NCFGR_PEN;
+       }
+}
+
+/**
+ * \brief Set receive buffer offset to 0 ~ 3.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ */
+static inline void gmac_set_rx_buffer_offset(Gmac* p_gmac, uint8_t uc_offset)
+{
+       p_gmac->GMAC_NCFGR &= ~GMAC_NCFGR_RXBUFO_Msk;
+       p_gmac->GMAC_NCFGR |= GMAC_NCFGR_RXBUFO(uc_offset);
+}
+
+/**
+ * \brief Enable/Disable receive length field checking.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param uc_enable   0 to disable receive length field checking, else to enable it.
+ */
+static inline void gmac_enable_rx_length_check(Gmac* p_gmac, uint8_t uc_enable)
+{
+       if (uc_enable) {
+               p_gmac->GMAC_NCFGR |= GMAC_NCFGR_LFERD;
+       } else {
+               p_gmac->GMAC_NCFGR &= ~GMAC_NCFGR_LFERD;
+       }
+}
+
+/**
+ * \brief Enable/Disable discarding FCS field of received frames.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param uc_enable   0 to disable discarding FCS field of received frames, else to enable it.
+ */
+static inline void gmac_enable_discard_fcs(Gmac* p_gmac, uint8_t uc_enable)
+{
+       if (uc_enable) {
+               p_gmac->GMAC_NCFGR |= GMAC_NCFGR_RFCS;
+       } else {
+               p_gmac->GMAC_NCFGR &= ~GMAC_NCFGR_RFCS;
+       }
+}
+
+
+/**
+ * \brief Enable/Disable frames to be received in half-duplex mode
+ * while transmitting.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param uc_enable   0 to disable the received in half-duplex mode, else to enable it.
+ */
+static inline void gmac_enable_efrhd(Gmac* p_gmac, uint8_t uc_enable)
+{
+       if (uc_enable) {
+               p_gmac->GMAC_NCFGR |= GMAC_NCFGR_EFRHD;
+       } else {
+               p_gmac->GMAC_NCFGR &= ~GMAC_NCFGR_EFRHD;
+       }
+}
+
+/**
+ * \brief Enable/Disable ignore RX FCS.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param uc_enable   0 to disable ignore RX FCS, else to enable it.
+ */
+static inline void gmac_enable_ignore_rx_fcs(Gmac* p_gmac, uint8_t uc_enable)
+{
+       if (uc_enable) {
+               p_gmac->GMAC_NCFGR |= GMAC_NCFGR_IRXFCS;
+       } else {
+               p_gmac->GMAC_NCFGR &= ~GMAC_NCFGR_IRXFCS;
+       }
+}
+
+/**
+ * \brief Get Network Status.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ *
+ * \return Network status.
+ */
+static inline uint32_t gmac_get_status(Gmac* p_gmac)
+{
+       return p_gmac->GMAC_NSR;
+}
+
+/**
+ * \brief Get MDIO IN pin status.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ *
+ * \return MDIO IN pin status.
+ */
+static inline uint8_t gmac_get_MDIO(Gmac* p_gmac)
+{
+       return ((p_gmac->GMAC_NSR & GMAC_NSR_MDIO) > 0);
+}
+
+/**
+ * \brief Check if PHY is idle.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ *
+ * \return  1 if PHY is idle.
+ */
+static inline uint8_t gmac_is_phy_idle(Gmac* p_gmac)
+{
+       return ((p_gmac->GMAC_NSR & GMAC_NSR_IDLE) > 0);
+}
+
+/**
+ * \brief Return transmit status.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ *
+ * \return  Transmit status.
+ */
+static inline uint32_t gmac_get_tx_status(Gmac* p_gmac)
+{
+       return p_gmac->GMAC_TSR;
+}
+
+/**
+ * \brief Clear transmit status.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param ul_status   Transmit status.
+ */
+static inline void gmac_clear_tx_status(Gmac* p_gmac, uint32_t ul_status)
+{
+       p_gmac->GMAC_TSR = ul_status;
+}
+
+/**
+ * \brief Return receive status.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ */
+static inline uint32_t gmac_get_rx_status(Gmac* p_gmac)
+{
+       return p_gmac->GMAC_RSR;
+}
+
+/**
+ * \brief Clear receive status.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param ul_status   Receive status.
+ */
+static inline void gmac_clear_rx_status(Gmac* p_gmac, uint32_t ul_status)
+{
+       p_gmac->GMAC_RSR = ul_status;
+}
+
+/**
+ * \brief Set Rx Queue.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param ul_addr   Rx queue address.
+ */
+static inline void gmac_set_rx_queue(Gmac* p_gmac, uint32_t ul_addr)
+{
+       p_gmac->GMAC_RBQB = GMAC_RBQB_ADDR_Msk & ul_addr;
+}
+
+/**
+ * \brief Get Rx Queue Address.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ *
+ * \return  Rx queue address.
+ */
+static inline uint32_t gmac_get_rx_queue(Gmac* p_gmac)
+{
+       return p_gmac->GMAC_RBQB;
+}
+
+/**
+ * \brief Set Tx Queue.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param ul_addr  Tx queue address.
+ */
+static inline void gmac_set_tx_queue(Gmac* p_gmac, uint32_t ul_addr)
+{
+       p_gmac->GMAC_TBQB = GMAC_TBQB_ADDR_Msk & ul_addr;
+}
+
+/**
+ * \brief Get Tx Queue.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ *
+ * \return  Rx queue address.
+ */
+static inline uint32_t gmac_get_tx_queue(Gmac* p_gmac)
+{
+       return p_gmac->GMAC_TBQB;
+}
+
+/**
+ * \brief Enable interrupt(s).
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param ul_source   Interrupt source(s) to be enabled.
+ */
+static inline void gmac_enable_interrupt(Gmac* p_gmac, uint32_t ul_source)
+{
+       p_gmac->GMAC_IER = ul_source;
+}
+
+/**
+ * \brief Disable interrupt(s).
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param ul_source   Interrupt source(s) to be disabled.
+ */
+static inline void gmac_disable_interrupt(Gmac* p_gmac, uint32_t ul_source)
+{
+       p_gmac->GMAC_IDR = ul_source;
+}
+
+/**
+ * \brief Return interrupt status.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ *
+ * \return Interrupt status.
+ */
+static inline uint32_t gmac_get_interrupt_status(Gmac* p_gmac)
+{
+       return p_gmac->GMAC_ISR;
+}
+
+/**
+ * \brief Return interrupt mask.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ *
+ * \return Interrupt mask.
+ */
+static inline uint32_t gmac_get_interrupt_mask(Gmac* p_gmac)
+{
+       return p_gmac->GMAC_IMR;
+}
+
+/**
+ * \brief Execute PHY maintenance command.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param uc_phy_addr   PHY address.
+ * \param uc_reg_addr   Register address.
+ * \param uc_rw   1 to Read, 0 to write.
+ * \param us_data   Data to be performed, write only.
+ */
+static inline void gmac_maintain_phy(Gmac* p_gmac,
+               uint8_t uc_phy_addr, uint8_t uc_reg_addr, uint8_t uc_rw,
+               uint16_t us_data)
+{
+       /* Wait until bus idle */
+       while ((p_gmac->GMAC_NSR & GMAC_NSR_IDLE) == 0);
+       /* Write maintain register */
+       p_gmac->GMAC_MAN = GMAC_MAN_WTN(GMAC_MAN_CODE_VALUE)
+                       | GMAC_MAN_CLTTO 
+                       | GMAC_MAN_PHYA(uc_phy_addr)
+                       | GMAC_MAN_REGA(uc_reg_addr)
+                       | GMAC_MAN_OP((uc_rw ? GMAC_MAN_RW_TYPE : GMAC_MAN_READ_ONLY))
+                       | GMAC_MAN_DATA(us_data);
+}
+
+/**
+ * \brief Get PHY maintenance data returned.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ *
+ * \return Get PHY data.
+ */
+static inline uint16_t gmac_get_phy_data(Gmac* p_gmac)
+{
+       /* Wait until bus idle */
+       while ((p_gmac->GMAC_NSR & GMAC_NSR_IDLE) == 0);
+       /* Return data */
+       return (uint16_t) (p_gmac->GMAC_MAN & GMAC_MAN_DATA_Msk);
+}
+
+/**
+ * \brief Set Hash.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param ul_hash_top   Hash top.
+ * \param ul_hash_bottom   Hash bottom.
+ */
+static inline void gmac_set_hash(Gmac* p_gmac, uint32_t ul_hash_top,
+               uint32_t ul_hash_bottom)
+{
+       p_gmac->GMAC_HRB = ul_hash_bottom;
+       p_gmac->GMAC_HRT = ul_hash_top;
+}
+
+/**
+ * \brief Set 64 bits Hash.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param ull_hash   64 bits hash value.
+ */
+static inline void gmac_set_hash64(Gmac* p_gmac, uint64_t ull_hash)
+{
+       p_gmac->GMAC_HRB = (uint32_t) ull_hash;
+       p_gmac->GMAC_HRT = (uint32_t) (ull_hash >> 32);
+}
+
+/**
+ * \brief Set MAC Address.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param uc_index  GMAC specific address register index.
+ * \param p_mac_addr  GMAC address.
+ */
+static inline void gmac_set_address(Gmac* p_gmac, uint8_t uc_index,
+               uint8_t* p_mac_addr)
+{
+       p_gmac->GMAC_SA[uc_index].GMAC_SAB = (p_mac_addr[3] << 24)
+                       | (p_mac_addr[2] << 16)
+                       | (p_mac_addr[1] << 8)
+                       | (p_mac_addr[0]);
+       p_gmac->GMAC_SA[uc_index].GMAC_SAT = (p_mac_addr[5] << 8)
+                       | (p_mac_addr[4]);
+}
+
+/**
+ * \brief Set MAC Address via 2 dword.
+  *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param uc_index  GMAC specific address register index.
+ * \param ul_mac_top  GMAC top address.
+ * \param ul_mac_bottom  GMAC bottom address.
+ */
+static inline void gmac_set_address32(Gmac* p_gmac, uint8_t uc_index,
+               uint32_t ul_mac_top, uint32_t ul_mac_bottom)
+{
+       p_gmac->GMAC_SA[uc_index].GMAC_SAB = ul_mac_bottom;
+       p_gmac->GMAC_SA[uc_index].GMAC_SAT = ul_mac_top;
+}
+
+/**
+ * \brief Set MAC Address via int64.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param uc_index  GMAC specific address register index.
+ * \param ull_mac  64-bit GMAC address.
+ */
+static inline void gmac_set_address64(Gmac* p_gmac, uint8_t uc_index,
+               uint64_t ull_mac)
+{
+       p_gmac->GMAC_SA[uc_index].GMAC_SAB = (uint32_t) ull_mac;
+       p_gmac->GMAC_SA[uc_index].GMAC_SAT = (uint32_t) (ull_mac >> 32);
+}
+
+/**
+ * \brief Select media independent interface mode.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param mode   Media independent interface mode.
+ */
+static inline void gmac_select_mii_mode(Gmac* p_gmac, gmac_mii_mode_t mode)
+{
+       switch (mode) {
+               case GMAC_PHY_MII:
+               case GMAC_PHY_RMII:
+                       p_gmac->GMAC_UR |= GMAC_UR_RMIIMII;
+               break;
+
+               default:
+                       p_gmac->GMAC_UR &= ~GMAC_UR_RMIIMII;
+               break;
+       }
+}
+
+uint8_t gmac_phy_read(Gmac* p_gmac, uint8_t uc_phy_address, uint8_t uc_address,
+               uint32_t* p_value);
+uint8_t gmac_phy_write(Gmac* p_gmac, uint8_t uc_phy_address,
+               uint8_t uc_address, uint32_t ul_value);
+void gmac_dev_init(Gmac* p_gmac, gmac_device_t* p_gmac_dev,
+               gmac_options_t* p_opt);
+uint32_t gmac_dev_read(gmac_device_t* p_gmac_dev, uint8_t* p_frame,
+               uint32_t ul_frame_size, uint32_t* p_rcv_size);
+uint32_t gmac_dev_write(gmac_device_t* p_gmac_dev, void *p_buffer,
+               uint32_t ul_size, gmac_dev_tx_cb_t func_tx_cb);
+uint32_t gmac_dev_get_tx_load(gmac_device_t* p_gmac_dev);
+void gmac_dev_set_rx_callback(gmac_device_t* p_gmac_dev,
+               gmac_dev_tx_cb_t func_rx_cb);
+uint8_t gmac_dev_set_tx_wakeup_callback(gmac_device_t* p_gmac_dev,
+               gmac_dev_wakeup_cb_t func_wakeup, uint8_t uc_threshold);
+void gmac_dev_reset(gmac_device_t* p_gmac_dev);
+void gmac_handler(gmac_device_t* p_gmac_dev);
+
+/// @cond 0
+/**INDENT-OFF**/
+#ifdef __cplusplus
+}
+#endif
+/**INDENT-ON**/
+/// @endcond
+
+/**
+ * \page gmac_quickstart Quickstart guide for GMAC driver.
+ *
+ * This is the quickstart guide for the \ref gmac_group "Ethernet MAC",
+ * with step-by-step instructions on how to configure and use the driver in a
+ * selection of use cases.
+ *
+ * The use cases contain several code fragments. The code fragments in the
+ * steps for setup can be copied into a custom initialization function, while
+ * the steps for usage can be copied into, e.g., the main application function.
+ *
+ * \section gmac_basic_use_case Basic use case
+ * In the basic use case, the GMAC driver are configured for:
+ * - PHY component KSZ8051MNL is used
+ * - GMAC uses MII mode
+ * - The number of receive buffer is 16
+ * - The number of transfer buffer is 8
+ * - MAC address is set to 00-04-25-1c-a0-02
+ * - IP address is set to 192.168.0.2
+ * - IP address is set to 192.168.0.2
+ * - Gateway is set to 192.168.0.1
+ * - Network mask is 255.255.255.0
+ * - PHY operation max retry count is 1000000
+ * - GMAC is configured to not support copy all frame and support broadcast
+ * - The data will be read from the ethernet
+ *
+ * \section gmac_basic_use_case_setup Setup steps
+ *
+ * \subsection gmac_basic_use_case_setup_prereq Prerequisites
+ * -# \ref sysclk_group "System Clock Management (sysclock)"
+ * -# \ref pmc_group "Power Management Controller (pmc)"
+ * -# \ref ksz8051mnl_ethernet_phy_group "PHY component (KSZ8051MNL)"
+ *
+ * \subsection gmac_basic_use_case_setup_code Example code
+ * Content of conf_eth.h
+ * \code
+ * #define GMAC_RX_BUFFERS                               16
+ * #define GMAC_TX_BUFFERS                               8
+ * #define MAC_PHY_RETRY_MAX                             1000000
+ * #define ETHERNET_CONF_ETHADDR0                        0x00
+ * #define ETHERNET_CONF_ETHADDR0                        0x00
+ * #define ETHERNET_CONF_ETHADDR1                        0x04
+ * #define ETHERNET_CONF_ETHADDR2                        0x25
+ * #define ETHERNET_CONF_ETHADDR3                        0x1C
+ * #define ETHERNET_CONF_ETHADDR4                        0xA0
+ * #define ETHERNET_CONF_ETHADDR5                        0x02
+ * #define ETHERNET_CONF_IPADDR0                         192
+ * #define ETHERNET_CONF_IPADDR1                         168
+ * #define ETHERNET_CONF_IPADDR2                         0
+ * #define ETHERNET_CONF_IPADDR3                         2
+ * #define ETHERNET_CONF_GATEWAY_ADDR0                   192
+ * #define ETHERNET_CONF_GATEWAY_ADDR1                   168
+ * #define ETHERNET_CONF_GATEWAY_ADDR2                   0
+ * #define ETHERNET_CONF_GATEWAY_ADDR3                   1
+ * #define ETHERNET_CONF_NET_MASK0                       255
+ * #define ETHERNET_CONF_NET_MASK1                       255
+ * #define ETHERNET_CONF_NET_MASK2                       255
+ * #define ETHERNET_CONF_NET_MASK3                       0
+ * #define ETH_PHY_MODE                                  ETH_PHY_MODE
+ * \endcode
+ *
+ * A specific gmac device and the receive data buffer must be defined; another ul_frm_size should be defined
+ * to trace the actual size of the data received.
+ * \code
+ * static gmac_device_t gs_gmac_dev;
+ * static volatile uint8_t gs_uc_eth_buffer[GMAC_FRAME_LENTGH_MAX];
+ *
+ * uint32_t ul_frm_size;
+ * \endcode
+ *
+ * Add to application C-file:
+ * \code
+ *   void gmac_init(void)
+ *   {
+ *       sysclk_init();
+ *
+ *       board_init();
+ *
+ *       pmc_enable_periph_clk(ID_GMAC);
+ *
+ *       gmac_option.uc_copy_all_frame = 0;
+ *       gmac_option.uc_no_boardcast = 0;
+ *       memcpy(gmac_option.uc_mac_addr, gs_uc_mac_address, sizeof(gs_uc_mac_address));
+ *       gs_gmac_dev.p_hw = GMAC;
+ *
+ *       gmac_dev_init(GMAC, &gs_gmac_dev, &gmac_option);
+ *
+ *       NVIC_EnableIRQ(GMAC_IRQn);
+ *
+ *       ethernet_phy_init(GMAC, BOARD_GMAC_PHY_ADDR, sysclk_get_cpu_hz());
+ * 
+ *       ethernet_phy_auto_negotiate(GMAC, BOARD_GMAC_PHY_ADDR);
+ *
+ *       ethernet_phy_set_link(GMAC, BOARD_GMAC_PHY_ADDR, 1);
+ * \endcode
+ *
+ * \subsection gmac_basic_use_case_setup_flow Workflow
+ * - Ensure that conf_eth.h is present and contains the
+ * following configuration symbol. This configuration file is used
+ * by the driver and should not be included by the application.
+ * -# Define the receiving buffer size used in the internal GMAC driver.
+ * The buffer size used for RX is GMAC_RX_BUFFERS * 128.
+ * If it was supposed receiving a large number of frame, the
+ * GMAC_RX_BUFFERS should be set higher. E.g., the application wants to accept
+ * a ping echo test of 2048, the GMAC_RX_BUFFERS should be set at least 
+ * (2048/128)=16, and as there are additional frames coming, a preferred
+ * number is 24 depending on a normal Ethernet throughput.
+ *   - \code
+ *        #define GMAC_RX_BUFFERS                               16
+ *   \endcode
+ * -# Define the transmitting buffer size used in the internal GMAC driver.
+ * The buffer size used for TX is GMAC_TX_BUFFERS * 1518.
+ *   - \code
+ *        #define GMAC_TX_BUFFERS                               8
+ *   \endcode
+ * -# Define maximum retry time for a PHY read/write operation.
+ *   - \code
+ *        #define MAC_PHY_RETRY_MAX                             1000000
+ *   \endcode
+ * -# Define the MAC address. 00:04:25:1C:A0:02 is the address reserved
+ * for ATMEL, application should always change this address to its' own.
+ *   - \code
+ *        #define ETHERNET_CONF_ETHADDR0                        0x00
+ *        #define ETHERNET_CONF_ETHADDR1                        0x04
+ *        #define ETHERNET_CONF_ETHADDR2                        0x25
+ *        #define ETHERNET_CONF_ETHADDR3                        0x1C
+ *        #define ETHERNET_CONF_ETHADDR4                        0xA0
+ *        #define ETHERNET_CONF_ETHADDR5                        0x02
+ *   \endcode
+ * -# Define the IP address configration used in the application. When DHCP
+ *  is enabled, this configuration is not effected.
+ *   - \code
+ *        #define ETHERNET_CONF_IPADDR0                         192
+ *        #define ETHERNET_CONF_IPADDR1                         168
+ *        #define ETHERNET_CONF_IPADDR2                         0
+ *        #define ETHERNET_CONF_IPADDR3                         2
+ *        #define ETHERNET_CONF_GATEWAY_ADDR0                   192
+ *        #define ETHERNET_CONF_GATEWAY_ADDR1                   168
+ *        #define ETHERNET_CONF_GATEWAY_ADDR2                   0
+ *        #define ETHERNET_CONF_GATEWAY_ADDR3                   1
+ *        #define ETHERNET_CONF_NET_MASK0                       255
+ *        #define ETHERNET_CONF_NET_MASK1                       255
+ *        #define ETHERNET_CONF_NET_MASK2                       255
+ *        #define ETHERNET_CONF_NET_MASK3                       0
+ *   \endcode
+ * -# Configure the PHY maintainance interface.
+ *   - \code
+ *        #define ETH_PHY_MODE                                  GMAC_PHY_MII
+ *   \endcode
+ * -# Enable the system clock:
+ *   - \code sysclk_init(); \endcode
+ * -# Enable PIO configurations for GMAC:
+ *   - \code board_init(); \endcode
+ * -# Enable PMC clock for GMAC:
+ *   - \code pmc_enable_periph_clk(ID_GMAC); \endcode
+ * -# Set the GMAC options; it's set to copy all frame and support broadcast:
+ *   - \code
+ *         gmac_option.uc_copy_all_frame = 0;
+ *         gmac_option.uc_no_boardcast = 0;
+ *         memcpy(gmac_option.uc_mac_addr, gs_uc_mac_address, sizeof(gs_uc_mac_address));
+ *         gs_gmac_dev.p_hw = GMAC;
+ * \endcode
+ * -# Initialize GMAC device with the filled option:
+ *   - \code
+ *         gmac_dev_init(GMAC, &gs_gmac_dev, &gmac_option);
+ * \endcode
+ * -# Enable the interrupt service for GMAC:
+ *   - \code
+ *         NVIC_EnableIRQ(GMAC_IRQn);
+ * \endcode
+ * -# Initialize the PHY component:
+ *   - \code
+ *         ethernet_phy_init(GMAC, BOARD_GMAC_PHY_ADDR, sysclk_get_cpu_hz());
+ * \endcode
+  * -# The link will be established based on auto negotiation.
+ *   - \code
+ *         ethernet_phy_auto_negotiate(GMAC, BOARD_GMAC_PHY_ADDR);
+ * \endcode
+ * -# Establish the ethernet link; the network can be worked from now on:
+ *   - \code
+ *         ethernet_phy_set_link(GMAC, BOARD_GMAC_PHY_ADDR, 1);
+ * \endcode
+ *
+ * \section gmac_basic_use_case_usage Usage steps
+ * \subsection gmac_basic_use_case_usage_code Example code
+ * Add to, e.g., main loop in application C-file:
+ * \code
+ *    gmac_dev_read(&gs_gmac_dev, (uint8_t *) gs_uc_eth_buffer, sizeof(gs_uc_eth_buffer), &ul_frm_size));
+ * \endcode
+ *
+ * \subsection gmac_basic_use_case_usage_flow Workflow
+ * -# Start reading the data from the ethernet:
+ *   - \code gmac_dev_read(&gs_gmac_dev, (uint8_t *) gs_uc_eth_buffer, sizeof(gs_uc_eth_buffer), &ul_frm_size)); \endcode
+ */
+
+#      define GMAC_STATS 0
+
+#if( GMAC_STATS != 0 )
+
+       /* Here below some code to study the types and
+       frequencies of  GMAC interrupts. */
+       #define GMAC_IDX_RXUBR 0
+       #define GMAC_IDX_TUR   1
+       #define GMAC_IDX_RLEX  2
+       #define GMAC_IDX_TFC   3
+       #define GMAC_IDX_RCOMP 4
+       #define GMAC_IDX_TCOMP 5
+       #define GMAC_IDX_ROVR  6
+       #define GMAC_IDX_HRESP 7
+       #define GMAC_IDX_PFNZ  8
+       #define GMAC_IDX_PTZ   9
+
+       struct SGmacStats {
+               unsigned recvCount;
+               unsigned rovrCount;
+               unsigned bnaCount;
+               unsigned sendCount;
+               unsigned sovrCount;
+               unsigned incompCount;
+               unsigned truncCount;
+
+               unsigned intStatus[10];
+       };
+       extern struct SGmacStats gmacStats;
+
+       struct SIntPair {
+               const char *name;
+               unsigned mask;
+               int index;
+       };
+
+       #define MK_PAIR( NAME )   #NAME, GMAC_IER_##NAME, GMAC_IDX_##NAME
+       static const struct SIntPair intPairs[] = {
+               { MK_PAIR( RXUBR ) }, /* Enable receive used bit read interrupt. */
+               { MK_PAIR( TUR   ) }, /* Enable transmit underrun interrupt. */
+               { MK_PAIR( RLEX  ) }, /* Enable retry limit  exceeded interrupt. */
+               { MK_PAIR( TFC   ) }, /* Enable transmit buffers exhausted in mid-frame interrupt. */
+               { MK_PAIR( RCOMP ) }, /* Receive complete */
+               { MK_PAIR( TCOMP ) }, /* Enable transmit complete interrupt. */
+               { MK_PAIR( ROVR  ) }, /* Enable receive overrun interrupt. */
+               { MK_PAIR( HRESP ) }, /* Enable Hresp not OK interrupt. */
+               { MK_PAIR( PFNZ  ) }, /* Enable pause frame received interrupt. */
+               { MK_PAIR( PTZ   ) }  /* Enable pause time zero interrupt. */
+       };
+
+       void gmac_show_irq_counts ();
+
+#endif
+
+#endif /* GMAC_H_INCLUDED */
index 24d806d949c3da4c490b6868cd76ed9e35cec586..dd29dfe7896eb4524a1e749c24f6f70c5e443ac8 100644 (file)
- /**\r
- * \file\r
- *\r
- * \brief GMAC (Ethernet MAC) driver for SAM.\r
- *\r
- * Copyright (c) 2013 Atmel Corporation. All rights reserved.\r
- *\r
- * \asf_license_start\r
- *\r
- * \page License\r
- *\r
- * Redistribution and use in source and binary forms, with or without\r
- * modification, are permitted provided that the following conditions are met:\r
- *\r
- * 1. Redistributions of source code must retain the above copyright notice,\r
- *    this list of conditions and the following disclaimer.\r
- *\r
- * 2. Redistributions in binary form must reproduce the above copyright notice,\r
- *    this list of conditions and the following disclaimer in the documentation\r
- *    and/or other materials provided with the distribution.\r
- *\r
- * 3. The name of Atmel may not be used to endorse or promote products derived\r
- *    from this software without specific prior written permission.\r
- *\r
- * 4. This software may only be redistributed and used in connection with an\r
- *    Atmel microcontroller product.\r
- *\r
- * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED\r
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
- * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR\r
- * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\r
- * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\r
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
- * POSSIBILITY OF SUCH DAMAGE.\r
- *\r
- * \asf_license_stop\r
- *\r
- */\r
-\r
-#ifndef GMAC_H_INCLUDED\r
-#define GMAC_H_INCLUDED\r
-\r
-#include "compiler.h"\r
-#include "component/gmac.h"\r
-\r
-/// @cond 0\r
-/**INDENT-OFF**/\r
-#ifdef __cplusplus\r
-extern "C" {\r
-#endif\r
-/**INDENT-ON**/\r
-/// @endcond\r
-\r
-/** The buffer addresses written into the descriptors must be aligned, so the\r
-    last few bits are zero.  These bits have special meaning for the GMAC\r
-    peripheral and cannot be used as part of the address. */\r
-#define GMAC_RXD_ADDR_MASK      0xFFFFFFFC\r
-#define GMAC_RXD_WRAP         (1ul << 1)  /**< Wrap bit */\r
-#define GMAC_RXD_OWNERSHIP    (1ul << 0)  /**< Ownership bit */\r
-\r
-#define GMAC_RXD_BROADCAST    (1ul << 31) /**< Broadcast detected */\r
-#define GMAC_RXD_MULTIHASH    (1ul << 30) /**< Multicast hash match */\r
-#define GMAC_RXD_UNIHASH      (1ul << 29) /**< Unicast hash match */\r
-#define GMAC_RXD_ADDR_FOUND      (1ul << 27) /**< Specific address match found */\r
-#define GMAC_RXD_ADDR        (3ul << 25) /**< Address match */\r
-#define GMAC_RXD_RXCOEN        (1ul << 24) /**< RXCOEN related function */\r
-#define GMAC_RXD_TYPE         (3ul << 22) /**< Type ID match */\r
-#define GMAC_RXD_VLAN         (1ul << 21) /**< VLAN tag detected */\r
-#define GMAC_RXD_PRIORITY     (1ul << 20) /**< Priority tag detected */\r
-#define GMAC_RXD_PRIORITY_MASK  (3ul << 17) /**< VLAN priority */\r
-#define GMAC_RXD_CFI          (1ul << 16) /**< Concatenation Format Indicator only if bit 21 is set */\r
-#define GMAC_RXD_EOF          (1ul << 15) /**< End of frame */\r
-#define GMAC_RXD_SOF          (1ul << 14) /**< Start of frame */\r
-#define GMAC_RXD_FCS          (1ul << 13) /**< Frame check sequence */\r
-#define GMAC_RXD_OFFSET_MASK                /**< Receive buffer offset */\r
-#define GMAC_RXD_LEN_MASK       (0xFFF)     /**< Length of frame including FCS (if selected) */\r
-#define GMAC_RXD_LENJUMBO_MASK  (0x3FFF)    /**< Jumbo frame length */\r
-\r
-#define GMAC_TXD_USED         (1ul << 31) /**< Frame is transmitted */\r
-#define GMAC_TXD_WRAP         (1ul << 30) /**< Last descriptor */\r
-#define GMAC_TXD_ERROR        (1ul << 29) /**< Retry limit exceeded, error */\r
-#define GMAC_TXD_UNDERRUN     (1ul << 28) /**< Transmit underrun */\r
-#define GMAC_TXD_EXHAUSTED    (1ul << 27) /**< Buffer exhausted */\r
-#define GMAC_TXD_LATE    (1ul << 26) /**< Late collision,transmit  error  */\r
-#define GMAC_TXD_CHECKSUM_ERROR   (7ul << 20) /**< Checksum error */\r
-#define GMAC_TXD_NOCRC        (1ul << 16) /**< No CRC */\r
-#define GMAC_TXD_LAST         (1ul << 15) /**< Last buffer in frame */\r
-#define GMAC_TXD_LEN_MASK       (0x1FFF)     /**< Length of buffer */\r
-\r
-/** The MAC can support frame lengths up to 1536 bytes */\r
-#define GMAC_FRAME_LENTGH_MAX       1536\r
-\r
-#define GMAC_RX_UNITSIZE            128     /**< Fixed size for RX buffer  */\r
-#define GMAC_TX_UNITSIZE            1518    /**< Size for ETH frame length */\r
-\r
-/** GMAC clock speed */\r
-#define GMAC_MCK_SPEED_240MHZ        (240*1000*1000)\r
-#define GMAC_MCK_SPEED_160MHZ        (160*1000*1000)\r
-#define GMAC_MCK_SPEED_120MHZ        (120*1000*1000)\r
-#define GMAC_MCK_SPEED_80MHZ          (80*1000*1000)\r
-#define GMAC_MCK_SPEED_40MHZ          (40*1000*1000)\r
-#define GMAC_MCK_SPEED_20MHZ          (20*1000*1000)\r
-\r
-/** GMAC maintain code default value*/\r
-#define GMAC_MAN_CODE_VALUE    (10)\r
-\r
-/** GMAC maintain start of frame default value*/\r
-#define GMAC_MAN_SOF_VALUE     (1)\r
-\r
-/** GMAC maintain read/write*/\r
-#define GMAC_MAN_RW_TYPE       (2)\r
-\r
-/** GMAC maintain read only*/\r
-#define GMAC_MAN_READ_ONLY     (1)\r
-\r
-/** GMAC address length */\r
-#define GMAC_ADDR_LENGTH       (6)\r
-\r
-\r
-#define GMAC_DUPLEX_HALF 0\r
-#define GMAC_DUPLEX_FULL 1\r
-\r
-#define GMAC_SPEED_10M      0\r
-#define GMAC_SPEED_100M     1\r
-\r
-/**\r
- * \brief Return codes for GMAC APIs.\r
- */\r
-typedef enum {\r
-       GMAC_OK = 0,         /** 0  Operation OK */\r
-       GMAC_TIMEOUT = 1,    /** 1  GMAC operation timeout */\r
-       GMAC_TX_BUSY,        /** 2  TX in progress */\r
-       GMAC_RX_NULL,        /** 3  No data received */\r
-       GMAC_SIZE_TOO_SMALL, /** 4  Buffer size not enough */\r
-       GMAC_PARAM,          /** 5  Parameter error, TX packet invalid or RX size too small */\r
-       GMAC_INVALID = 0xFF, /* Invalid */\r
-} gmac_status_t;\r
-\r
-/**\r
- * \brief Media Independent Interface (MII) type.\r
- */\r
-typedef enum {\r
-       GMAC_PHY_MII = 0,         /** MII mode */\r
-       GMAC_PHY_RMII = 1,    /** Reduced MII mode */\r
-       GMAC_PHY_INVALID = 0xFF, /* Invalid mode*/\r
-} gmac_mii_mode_t;\r
-\r
-/** Receive buffer descriptor struct */\r
-COMPILER_PACK_SET(8)\r
-typedef struct gmac_rx_descriptor {\r
-       union gmac_rx_addr {\r
-               uint32_t val;\r
-               struct gmac_rx_addr_bm {\r
-                       uint32_t b_ownership:1, /**< User clear, GMAC sets this to 1 once it has successfully written a frame to memory */\r
-                       b_wrap:1,   /**< Marks last descriptor in receive buffer */\r
-                       addr_dw:30; /**< Address in number of DW */\r
-               } bm;\r
-       } addr; /**< Address, Wrap & Ownership */\r
-       union gmac_rx_status {\r
-               uint32_t val;\r
-               struct gmac_rx_status_bm {\r
-                       uint32_t len:13,       /**  0..12  Length of frame including FCS */\r
-                       b_fcs:1,               /**  13     Receive buffer offset,  bits 13:12 of frame length for jumbo frame */\r
-                       b_sof:1,               /**  14     Start of frame */\r
-                       b_eof:1,               /**  15     End of frame */\r
-                       b_cfi:1,               /**  16     Concatenation Format Indicator */\r
-                       vlan_priority:3,       /**  17..19 VLAN priority (if VLAN detected) */\r
-                       b_priority_detected:1, /**  20     Priority tag detected */\r
-                       b_vlan_detected:1,     /**  21     VLAN tag detected */\r
-                       b_type_id_match:2,     /**  22..23 Type ID match */\r
-                       b_checksumoffload:1,   /**  24     Checksum offload specific function */\r
-                       b_addrmatch:2,         /**  25..26 Address register match */\r
-                       b_ext_addr_match:1,    /**  27     External address match found */\r
-                       reserved:1,            /**  28     */\r
-                       b_uni_hash_match:1,    /**  29     Unicast hash match */\r
-                       b_multi_hash_match:1,  /**  30     Multicast hash match */\r
-                       b_boardcast_detect:1;  /**  31     Global broadcast address detected */\r
-               } bm;\r
-       } status;\r
-} gmac_rx_descriptor_t;\r
-\r
-/** Transmit buffer descriptor struct */\r
-COMPILER_PACK_SET(8)\r
-typedef struct gmac_tx_descriptor {\r
-       uint32_t addr;\r
-       union gmac_tx_status {\r
-               uint32_t val;\r
-               struct gmac_tx_status_bm {\r
-                       uint32_t len:14,     /**  0..13 Length of buffer */\r
-                       reserved:1,          /** 14            */\r
-                       b_last_buffer:1,     /** 15     Last buffer (in the current frame) */\r
-                       b_no_crc:1,          /** 16     No CRC */\r
-                       reserved1:3,         /** 17..19        */\r
-                       b_checksumoffload:3, /** 20..22 Transmit checksum generation offload errors */\r
-                       reserved2:3,         /** 23..25        */\r
-                       b_lco:1,             /** 26     Late collision, transmit error detected */\r
-                       b_exhausted:1,       /** 27     Buffer exhausted in mid frame */\r
-                       b_underrun:1,        /** 28     Transmit underrun */\r
-                       b_error:1,           /** 29     Retry limit exceeded, error detected */\r
-                       b_wrap:1,            /** 30     Marks last descriptor in TD list */\r
-                       b_used:1;            /** 31     User clear, GMAC sets this to 1 once a frame has been successfully transmitted */\r
-               } bm;\r
-       } status;\r
-} gmac_tx_descriptor_t;\r
-\r
-COMPILER_PACK_RESET()\r
-\r
-/**\r
- * \brief Input parameters when initializing the gmac module mode.\r
- */\r
-typedef struct gmac_options {\r
-       /*  Enable/Disable CopyAllFrame */\r
-       uint8_t uc_copy_all_frame;\r
-       /* Enable/Disable NoBroadCast */\r
-       uint8_t uc_no_boardcast;\r
-       /* MAC address */\r
-       uint8_t uc_mac_addr[GMAC_ADDR_LENGTH];\r
-} gmac_options_t;\r
-\r
-/** TX callback */\r
-typedef void (*gmac_dev_tx_cb_t) (uint32_t ul_status, uint8_t *puc_buffer);\r
-/** RX callback */\r
-typedef void (*gmac_dev_rx_cb_t) (uint32_t ul_status);\r
-/** Wakeup callback */\r
-typedef void (*gmac_dev_wakeup_cb_t) (void);\r
-\r
-/**\r
- * GMAC driver structure.\r
- */\r
-typedef struct gmac_device {\r
-\r
-       /** Pointer to HW register base */\r
-       Gmac *p_hw;\r
-       /**\r
-        * Pointer to allocated TX buffer.\r
-        * Section 3.6 of AMBA 2.0 spec states that burst should not cross\r
-        * 1K Boundaries.\r
-        * Receive buffer manager writes are burst of 2 words => 3 lsb bits\r
-        * of the address shall be set to 0.\r
-        */\r
-       uint8_t *p_tx_buffer;\r
-       /** Pointer to allocated RX buffer */\r
-       uint8_t *p_rx_buffer;\r
-       /** Pointer to Rx TDs (must be 8-byte aligned) */\r
-       gmac_rx_descriptor_t *p_rx_dscr;\r
-       /** Pointer to Tx TDs (must be 8-byte aligned) */\r
-       gmac_tx_descriptor_t *p_tx_dscr;\r
-       /** Optional callback to be invoked once a frame has been received */\r
-       gmac_dev_rx_cb_t func_rx_cb;\r
-#if( GMAC_USES_WAKEUP_CALLBACK )\r
-       /** Optional callback to be invoked once several TDs have been released */\r
-       gmac_dev_wakeup_cb_t func_wakeup_cb;\r
-#endif\r
-#if( GMAC_USES_TX_CALLBACK != 0 )\r
-       /** Optional callback list to be invoked once TD has been processed */\r
-       gmac_dev_tx_cb_t *func_tx_cb_list;\r
-#endif\r
-       /** RX TD list size */\r
-       uint32_t ul_rx_list_size;\r
-       /** RX index for current processing TD */\r
-       uint32_t ul_rx_idx;\r
-       /** TX TD list size */\r
-       uint32_t ul_tx_list_size;\r
-       /** Circular buffer head pointer by upper layer (buffer to be sent) */\r
-       int32_t l_tx_head;\r
-       /** Circular buffer tail pointer incremented by handlers (buffer sent) */\r
-       int32_t l_tx_tail;\r
-\r
-       /** Number of free TD before wakeup callback is invoked */\r
-       uint32_t uc_wakeup_threshold;\r
-} gmac_device_t;\r
-\r
-/**\r
- * \brief Write network control value.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param ul_ncr   Network control value.\r
- */\r
-static inline void gmac_network_control(Gmac* p_gmac, uint32_t ul_ncr)\r
-{\r
-       p_gmac->GMAC_NCR = ul_ncr;\r
-}\r
-\r
-/**\r
- * \brief Get network control value.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- */\r
-\r
-static inline uint32_t gmac_get_network_control(Gmac* p_gmac)\r
-{\r
-       return p_gmac->GMAC_NCR;\r
-}\r
-\r
-/**\r
- * \brief Enable/Disable GMAC receive.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param uc_enable   0 to disable GMAC receiver, else to enable it.\r
- */\r
-static inline void gmac_enable_receive(Gmac* p_gmac, uint8_t uc_enable)\r
-{\r
-       if (uc_enable) {\r
-               p_gmac->GMAC_NCR |= GMAC_NCR_RXEN;\r
-       } else {\r
-               p_gmac->GMAC_NCR &= ~GMAC_NCR_RXEN;\r
-       }\r
-}\r
-\r
-/**\r
- * \brief Enable/Disable GMAC transmit.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param uc_enable   0 to disable GMAC transmit, else to enable it.\r
- */\r
-static inline void gmac_enable_transmit(Gmac* p_gmac, uint8_t uc_enable)\r
-{\r
-       if (uc_enable) {\r
-               p_gmac->GMAC_NCR |= GMAC_NCR_TXEN;\r
-       } else {\r
-               p_gmac->GMAC_NCR &= ~GMAC_NCR_TXEN;\r
-       }\r
-}\r
-\r
-/**\r
- * \brief Enable/Disable GMAC management.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param uc_enable   0 to disable GMAC management, else to enable it.\r
- */\r
-static inline void gmac_enable_management(Gmac* p_gmac, uint8_t uc_enable)\r
-{\r
-       if (uc_enable) {\r
-               p_gmac->GMAC_NCR |= GMAC_NCR_MPE;\r
-       } else {\r
-               p_gmac->GMAC_NCR &= ~GMAC_NCR_MPE;\r
-       }\r
-}\r
-\r
-/**\r
- * \brief Clear all statistics registers.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- */\r
-static inline void gmac_clear_statistics(Gmac* p_gmac)\r
-{\r
-       p_gmac->GMAC_NCR |= GMAC_NCR_CLRSTAT;\r
-}\r
-\r
-/**\r
- * \brief Increase all statistics registers.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- */\r
-static inline void gmac_increase_statistics(Gmac* p_gmac)\r
-{\r
-       p_gmac->GMAC_NCR |= GMAC_NCR_INCSTAT;\r
-}\r
-\r
-/**\r
- * \brief Enable/Disable statistics registers writing.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param uc_enable   0 to disable the statistics registers writing, else to enable it.\r
- */\r
-static inline void gmac_enable_statistics_write(Gmac* p_gmac,\r
-               uint8_t uc_enable)\r
-{\r
-       if (uc_enable) {\r
-               p_gmac->GMAC_NCR |= GMAC_NCR_WESTAT;\r
-       } else {\r
-               p_gmac->GMAC_NCR &= ~GMAC_NCR_WESTAT;\r
-       }\r
-}\r
-\r
-/**\r
- * \brief In half-duplex mode, forces collisions on all received frames.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param uc_enable   0 to disable the back pressure, else to enable it.\r
- */\r
-static inline void gmac_enable_back_pressure(Gmac* p_gmac, uint8_t uc_enable)\r
-{\r
-       if (uc_enable) {\r
-               p_gmac->GMAC_NCR |= GMAC_NCR_BP;\r
-       } else {\r
-               p_gmac->GMAC_NCR &= ~GMAC_NCR_BP;\r
-       }\r
-}\r
-\r
-/**\r
- * \brief Start transmission.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- */\r
-static inline void gmac_start_transmission(Gmac* p_gmac)\r
-{\r
-       p_gmac->GMAC_NCR |= GMAC_NCR_TSTART;\r
-}\r
-\r
-/**\r
- * \brief Halt transmission.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- */\r
-static inline void gmac_halt_transmission(Gmac* p_gmac)\r
-{\r
-       p_gmac->GMAC_NCR |= GMAC_NCR_THALT;\r
-}\r
-\r
-/**\r
- * \brief Transmit pause frame.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- */\r
-static inline void gmac_tx_pause_frame(Gmac* p_gmac)\r
-{\r
-       p_gmac->GMAC_NCR |= GMAC_NCR_TXPF;\r
-}\r
-\r
-/**\r
- * \brief Transmit zero quantum pause frame.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- */\r
-static inline void gmac_tx_pause_zero_quantum_frame(Gmac* p_gmac)\r
-{\r
-       p_gmac->GMAC_NCR |= GMAC_NCR_TXZQPF;\r
-}\r
-\r
-/**\r
- * \brief Read snapshot.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- */\r
-static inline void gmac_read_snapshot(Gmac* p_gmac)\r
-{\r
-       p_gmac->GMAC_NCR |= GMAC_NCR_RDS;\r
-}\r
-\r
-/**\r
- * \brief Store receivetime stamp to memory.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param uc_enable   0 to normal operation, else to enable the store.\r
- */\r
-static inline void gmac_store_rx_time_stamp(Gmac* p_gmac, uint8_t uc_enable)\r
-{\r
-       if (uc_enable) {\r
-               p_gmac->GMAC_NCR |= GMAC_NCR_SRTSM;\r
-       } else {\r
-               p_gmac->GMAC_NCR &= ~GMAC_NCR_SRTSM;\r
-       }\r
-}\r
-\r
-/**\r
- * \brief Enable PFC priority-based pause reception.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param uc_enable   1 to set the reception, 0 to disable.\r
- */\r
-static inline void gmac_enable_pfc_pause_frame(Gmac* p_gmac, uint8_t uc_enable)\r
-{\r
-       if (uc_enable) {\r
-               p_gmac->GMAC_NCR |= GMAC_NCR_ENPBPR;\r
-       } else {\r
-               p_gmac->GMAC_NCR &= ~GMAC_NCR_ENPBPR;\r
-       }\r
-}\r
-\r
-/**\r
- * \brief Transmit PFC priority-based pause reception.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- */\r
-static inline void gmac_transmit_pfc_pause_frame(Gmac* p_gmac)\r
-{\r
-               p_gmac->GMAC_NCR |= GMAC_NCR_TXPBPF;\r
-}\r
-\r
-/**\r
- * \brief Flush next packet.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- */\r
-static inline void gmac_flush_next_packet(Gmac* p_gmac)\r
-{\r
-               p_gmac->GMAC_NCR |= GMAC_NCR_FNP;\r
-}\r
-\r
-/**\r
- * \brief Set up network configuration register.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
-  * \param ul_cfg   Network configuration value.\r
- */\r
-static inline void gmac_set_configure(Gmac* p_gmac, uint32_t ul_cfg)\r
-{\r
-       p_gmac->GMAC_NCFGR = ul_cfg;\r
-}\r
-\r
-/**\r
- * \brief Get network configuration.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- *\r
- * \return Network configuration.\r
- */\r
-static inline uint32_t gmac_get_configure(Gmac* p_gmac)\r
-{\r
-       return p_gmac->GMAC_NCFGR;\r
-}\r
-\r
-\r
-/* Get and set DMA Configuration Register */\r
-static inline void gmac_set_dma(Gmac* p_gmac, uint32_t ul_cfg)\r
-{\r
-       p_gmac->GMAC_DCFGR = ul_cfg;\r
-}\r
-\r
-static inline uint32_t gmac_get_dma(Gmac* p_gmac)\r
-{\r
-       return p_gmac->GMAC_DCFGR;\r
-}\r
-\r
-/**\r
- * \brief Set speed.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param uc_speed 1 to indicate 100Mbps, 0 to 10Mbps.\r
- */\r
-static inline void gmac_set_speed(Gmac* p_gmac, uint8_t uc_speed)\r
-{\r
-       if (uc_speed) {\r
-               p_gmac->GMAC_NCFGR |= GMAC_NCFGR_SPD;\r
-       } else {\r
-               p_gmac->GMAC_NCFGR &= ~GMAC_NCFGR_SPD;\r
-       }\r
-}\r
-\r
-/**\r
- * \brief Enable/Disable Full-Duplex mode.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param uc_enable   0 to disable the Full-Duplex mode, else to enable it.\r
- */\r
-static inline void gmac_enable_full_duplex(Gmac* p_gmac, uint8_t uc_enable)\r
-{\r
-       if (uc_enable) {\r
-               p_gmac->GMAC_NCFGR |= GMAC_NCFGR_FD;\r
-       } else {\r
-               p_gmac->GMAC_NCFGR &= ~GMAC_NCFGR_FD;\r
-       }\r
-}\r
-\r
-/**\r
- * \brief Enable/Disable Copy(Receive) All Valid Frames.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param uc_enable   0 to disable copying all valid frames, else to enable it.\r
- */\r
-static inline void gmac_enable_copy_all(Gmac* p_gmac, uint8_t uc_enable)\r
-{\r
-       if (uc_enable) {\r
-               p_gmac->GMAC_NCFGR |= GMAC_NCFGR_CAF;\r
-       } else {\r
-               p_gmac->GMAC_NCFGR &= ~GMAC_NCFGR_CAF;\r
-       }\r
-}\r
-\r
-/**\r
- * \brief Enable/Disable jumbo frames (up to 10240 bytes).\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param uc_enable   0 to disable the jumbo frames, else to enable it.\r
- */\r
-static inline void gmac_enable_jumbo_frames(Gmac* p_gmac, uint8_t uc_enable)\r
-{\r
-       if (uc_enable) {\r
-               p_gmac->GMAC_NCFGR |= GMAC_NCFGR_JFRAME;\r
-       } else {\r
-               p_gmac->GMAC_NCFGR &= ~GMAC_NCFGR_JFRAME;\r
-       }\r
-}\r
-\r
-/**\r
- * \brief Disable/Enable broadcast receiving.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param uc_enable   1 to disable the broadcast, else to enable it.\r
- */\r
-static inline void gmac_disable_broadcast(Gmac* p_gmac, uint8_t uc_enable)\r
-{\r
-       if (uc_enable) {\r
-               p_gmac->GMAC_NCFGR |= GMAC_NCFGR_NBC;\r
-       } else {\r
-               p_gmac->GMAC_NCFGR &= ~GMAC_NCFGR_NBC;\r
-       }\r
-}\r
-\r
-/**\r
- * \brief Enable/Disable multicast hash.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param uc_enable   0 to disable the multicast hash, else to enable it.\r
- */\r
-static inline void gmac_enable_multicast_hash(Gmac* p_gmac, uint8_t uc_enable)\r
-{\r
-       if (uc_enable) {\r
-               p_gmac->GMAC_NCFGR |= GMAC_NCFGR_UNIHEN;\r
-       } else {\r
-               p_gmac->GMAC_NCFGR &= ~GMAC_NCFGR_UNIHEN;\r
-       }\r
-}\r
-\r
-/**\r
- * \brief Enable/Disable big frames (over 1518, up to 1536).\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param uc_enable   0 to disable big frames else to enable it.\r
- */\r
-static inline void gmac_enable_big_frame(Gmac* p_gmac, uint8_t uc_enable)\r
-{\r
-       if (uc_enable) {\r
-               p_gmac->GMAC_NCFGR |= GMAC_NCFGR_MAXFS;\r
-       } else {\r
-               p_gmac->GMAC_NCFGR &= ~GMAC_NCFGR_MAXFS;\r
-       }\r
-}\r
-\r
-/**\r
- * \brief Set MDC clock divider.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param ul_mck   GMAC MCK.\r
- *\r
- * \return GMAC_OK if successfully.\r
- */\r
-static inline uint8_t gmac_set_mdc_clock(Gmac* p_gmac, uint32_t ul_mck)\r
-{\r
-       uint32_t ul_clk;\r
-\r
-       if (ul_mck > GMAC_MCK_SPEED_240MHZ) {\r
-               return GMAC_INVALID;\r
-       } else if (ul_mck > GMAC_MCK_SPEED_160MHZ) {\r
-               ul_clk = GMAC_NCFGR_CLK_MCK_96;\r
-       } else if (ul_mck > GMAC_MCK_SPEED_120MHZ) {\r
-               ul_clk = GMAC_NCFGR_CLK_MCK_64;\r
-       } else if (ul_mck > GMAC_MCK_SPEED_80MHZ) {\r
-               ul_clk = GMAC_NCFGR_CLK_MCK_48;\r
-       } else if (ul_mck > GMAC_MCK_SPEED_40MHZ) {\r
-               ul_clk = GMAC_NCFGR_CLK_MCK_32;\r
-       } else if (ul_mck > GMAC_MCK_SPEED_20MHZ) {\r
-               ul_clk = GMAC_NCFGR_CLK_MCK_16;\r
-       } else {\r
-               ul_clk = GMAC_NCFGR_CLK_MCK_8;\r
-       }\r
-       ;\r
-       p_gmac->GMAC_NCFGR = (p_gmac->GMAC_NCFGR & ~GMAC_NCFGR_CLK_Msk) | ul_clk;\r
-       return GMAC_OK;\r
-}\r
-\r
-/**\r
- * \brief Enable/Disable retry test.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param uc_enable   0 to disable the GMAC receiver, else to enable it.\r
- */\r
-static inline void gmac_enable_retry_test(Gmac* p_gmac, uint8_t uc_enable)\r
-{\r
-       if (uc_enable) {\r
-               p_gmac->GMAC_NCFGR |= GMAC_NCFGR_RTY;\r
-       } else {\r
-               p_gmac->GMAC_NCFGR &= ~GMAC_NCFGR_RTY;\r
-       }\r
-}\r
-\r
-/**\r
- * \brief Enable/Disable pause (when a valid pause frame is received).\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param uc_enable   0 to disable pause frame, else to enable it.\r
- */\r
-static inline void gmac_enable_pause_frame(Gmac* p_gmac, uint8_t uc_enable)\r
-{\r
-       if (uc_enable) {\r
-               p_gmac->GMAC_NCFGR |= GMAC_NCFGR_PEN;\r
-       } else {\r
-               p_gmac->GMAC_NCFGR &= ~GMAC_NCFGR_PEN;\r
-       }\r
-}\r
-\r
-/**\r
- * \brief Set receive buffer offset to 0 ~ 3.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- */\r
-static inline void gmac_set_rx_buffer_offset(Gmac* p_gmac, uint8_t uc_offset)\r
-{\r
-       p_gmac->GMAC_NCFGR &= ~GMAC_NCFGR_RXBUFO_Msk;\r
-       p_gmac->GMAC_NCFGR |= GMAC_NCFGR_RXBUFO(uc_offset);\r
-}\r
-\r
-/**\r
- * \brief Enable/Disable receive length field checking.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param uc_enable   0 to disable receive length field checking, else to enable it.\r
- */\r
-static inline void gmac_enable_rx_length_check(Gmac* p_gmac, uint8_t uc_enable)\r
-{\r
-       if (uc_enable) {\r
-               p_gmac->GMAC_NCFGR |= GMAC_NCFGR_LFERD;\r
-       } else {\r
-               p_gmac->GMAC_NCFGR &= ~GMAC_NCFGR_LFERD;\r
-       }\r
-}\r
-\r
-/**\r
- * \brief Enable/Disable discarding FCS field of received frames.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param uc_enable   0 to disable discarding FCS field of received frames, else to enable it.\r
- */\r
-static inline void gmac_enable_discard_fcs(Gmac* p_gmac, uint8_t uc_enable)\r
-{\r
-       if (uc_enable) {\r
-               p_gmac->GMAC_NCFGR |= GMAC_NCFGR_RFCS;\r
-       } else {\r
-               p_gmac->GMAC_NCFGR &= ~GMAC_NCFGR_RFCS;\r
-       }\r
-}\r
-\r
-\r
-/**\r
- * \brief Enable/Disable frames to be received in half-duplex mode\r
- * while transmitting.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param uc_enable   0 to disable the received in half-duplex mode, else to enable it.\r
- */\r
-static inline void gmac_enable_efrhd(Gmac* p_gmac, uint8_t uc_enable)\r
-{\r
-       if (uc_enable) {\r
-               p_gmac->GMAC_NCFGR |= GMAC_NCFGR_EFRHD;\r
-       } else {\r
-               p_gmac->GMAC_NCFGR &= ~GMAC_NCFGR_EFRHD;\r
-       }\r
-}\r
-\r
-/**\r
- * \brief Enable/Disable ignore RX FCS.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param uc_enable   0 to disable ignore RX FCS, else to enable it.\r
- */\r
-static inline void gmac_enable_ignore_rx_fcs(Gmac* p_gmac, uint8_t uc_enable)\r
-{\r
-       if (uc_enable) {\r
-               p_gmac->GMAC_NCFGR |= GMAC_NCFGR_IRXFCS;\r
-       } else {\r
-               p_gmac->GMAC_NCFGR &= ~GMAC_NCFGR_IRXFCS;\r
-       }\r
-}\r
-\r
-/**\r
- * \brief Get Network Status.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- *\r
- * \return Network status.\r
- */\r
-static inline uint32_t gmac_get_status(Gmac* p_gmac)\r
-{\r
-       return p_gmac->GMAC_NSR;\r
-}\r
-\r
-/**\r
- * \brief Get MDIO IN pin status.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- *\r
- * \return MDIO IN pin status.\r
- */\r
-static inline uint8_t gmac_get_MDIO(Gmac* p_gmac)\r
-{\r
-       return ((p_gmac->GMAC_NSR & GMAC_NSR_MDIO) > 0);\r
-}\r
-\r
-/**\r
- * \brief Check if PHY is idle.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- *\r
- * \return  1 if PHY is idle.\r
- */\r
-static inline uint8_t gmac_is_phy_idle(Gmac* p_gmac)\r
-{\r
-       return ((p_gmac->GMAC_NSR & GMAC_NSR_IDLE) > 0);\r
-}\r
-\r
-/**\r
- * \brief Return transmit status.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- *\r
- * \return  Transmit status.\r
- */\r
-static inline uint32_t gmac_get_tx_status(Gmac* p_gmac)\r
-{\r
-       return p_gmac->GMAC_TSR;\r
-}\r
-\r
-/**\r
- * \brief Clear transmit status.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param ul_status   Transmit status.\r
- */\r
-static inline void gmac_clear_tx_status(Gmac* p_gmac, uint32_t ul_status)\r
-{\r
-       p_gmac->GMAC_TSR = ul_status;\r
-}\r
-\r
-/**\r
- * \brief Return receive status.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- */\r
-static inline uint32_t gmac_get_rx_status(Gmac* p_gmac)\r
-{\r
-       return p_gmac->GMAC_RSR;\r
-}\r
-\r
-/**\r
- * \brief Clear receive status.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param ul_status   Receive status.\r
- */\r
-static inline void gmac_clear_rx_status(Gmac* p_gmac, uint32_t ul_status)\r
-{\r
-       p_gmac->GMAC_RSR = ul_status;\r
-}\r
-\r
-/**\r
- * \brief Set Rx Queue.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param ul_addr   Rx queue address.\r
- */\r
-static inline void gmac_set_rx_queue(Gmac* p_gmac, uint32_t ul_addr)\r
-{\r
-       p_gmac->GMAC_RBQB = GMAC_RBQB_ADDR_Msk & ul_addr;\r
-}\r
-\r
-/**\r
- * \brief Get Rx Queue Address.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- *\r
- * \return  Rx queue address.\r
- */\r
-static inline uint32_t gmac_get_rx_queue(Gmac* p_gmac)\r
-{\r
-       return p_gmac->GMAC_RBQB;\r
-}\r
-\r
-/**\r
- * \brief Set Tx Queue.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param ul_addr  Tx queue address.\r
- */\r
-static inline void gmac_set_tx_queue(Gmac* p_gmac, uint32_t ul_addr)\r
-{\r
-       p_gmac->GMAC_TBQB = GMAC_TBQB_ADDR_Msk & ul_addr;\r
-}\r
-\r
-/**\r
- * \brief Get Tx Queue.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- *\r
- * \return  Rx queue address.\r
- */\r
-static inline uint32_t gmac_get_tx_queue(Gmac* p_gmac)\r
-{\r
-       return p_gmac->GMAC_TBQB;\r
-}\r
-\r
-/**\r
- * \brief Enable interrupt(s).\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param ul_source   Interrupt source(s) to be enabled.\r
- */\r
-static inline void gmac_enable_interrupt(Gmac* p_gmac, uint32_t ul_source)\r
-{\r
-       p_gmac->GMAC_IER = ul_source;\r
-}\r
-\r
-/**\r
- * \brief Disable interrupt(s).\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param ul_source   Interrupt source(s) to be disabled.\r
- */\r
-static inline void gmac_disable_interrupt(Gmac* p_gmac, uint32_t ul_source)\r
-{\r
-       p_gmac->GMAC_IDR = ul_source;\r
-}\r
-\r
-/**\r
- * \brief Return interrupt status.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- *\r
- * \return Interrupt status.\r
- */\r
-static inline uint32_t gmac_get_interrupt_status(Gmac* p_gmac)\r
-{\r
-       return p_gmac->GMAC_ISR;\r
-}\r
-\r
-/**\r
- * \brief Return interrupt mask.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- *\r
- * \return Interrupt mask.\r
- */\r
-static inline uint32_t gmac_get_interrupt_mask(Gmac* p_gmac)\r
-{\r
-       return p_gmac->GMAC_IMR;\r
-}\r
-\r
-/**\r
- * \brief Execute PHY maintenance command.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param uc_phy_addr   PHY address.\r
- * \param uc_reg_addr   Register address.\r
- * \param uc_rw   1 to Read, 0 to write.\r
- * \param us_data   Data to be performed, write only.\r
- */\r
-static inline void gmac_maintain_phy(Gmac* p_gmac,\r
-               uint8_t uc_phy_addr, uint8_t uc_reg_addr, uint8_t uc_rw,\r
-               uint16_t us_data)\r
-{\r
-       /* Wait until bus idle */\r
-       while ((p_gmac->GMAC_NSR & GMAC_NSR_IDLE) == 0);\r
-       /* Write maintain register */\r
-       p_gmac->GMAC_MAN = GMAC_MAN_WTN(GMAC_MAN_CODE_VALUE)\r
-                       | GMAC_MAN_CLTTO\r
-                       | GMAC_MAN_PHYA(uc_phy_addr)\r
-                       | GMAC_MAN_REGA(uc_reg_addr)\r
-                       | GMAC_MAN_OP((uc_rw ? GMAC_MAN_RW_TYPE : GMAC_MAN_READ_ONLY))\r
-                       | GMAC_MAN_DATA(us_data);\r
-}\r
-\r
-/**\r
- * \brief Get PHY maintenance data returned.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- *\r
- * \return Get PHY data.\r
- */\r
-static inline uint16_t gmac_get_phy_data(Gmac* p_gmac)\r
-{\r
-       /* Wait until bus idle */\r
-       while ((p_gmac->GMAC_NSR & GMAC_NSR_IDLE) == 0);\r
-       /* Return data */\r
-       return (uint16_t) (p_gmac->GMAC_MAN & GMAC_MAN_DATA_Msk);\r
-}\r
-\r
-/**\r
- * \brief Set Hash.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param ul_hash_top   Hash top.\r
- * \param ul_hash_bottom   Hash bottom.\r
- */\r
-static inline void gmac_set_hash(Gmac* p_gmac, uint32_t ul_hash_top,\r
-               uint32_t ul_hash_bottom)\r
-{\r
-       p_gmac->GMAC_HRB = ul_hash_bottom;\r
-       p_gmac->GMAC_HRT = ul_hash_top;\r
-}\r
-\r
-/**\r
- * \brief Set 64 bits Hash.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param ull_hash   64 bits hash value.\r
- */\r
-static inline void gmac_set_hash64(Gmac* p_gmac, uint64_t ull_hash)\r
-{\r
-       p_gmac->GMAC_HRB = (uint32_t) ull_hash;\r
-       p_gmac->GMAC_HRT = (uint32_t) (ull_hash >> 32);\r
-}\r
-\r
-/**\r
- * \brief Set MAC Address.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param uc_index  GMAC specific address register index.\r
- * \param p_mac_addr  GMAC address.\r
- */\r
-static inline void gmac_set_address(Gmac* p_gmac, uint8_t uc_index,\r
-               uint8_t* p_mac_addr)\r
-{\r
-       p_gmac->GMAC_SA[uc_index].GMAC_SAB = (p_mac_addr[3] << 24)\r
-                       | (p_mac_addr[2] << 16)\r
-                       | (p_mac_addr[1] << 8)\r
-                       | (p_mac_addr[0]);\r
-       p_gmac->GMAC_SA[uc_index].GMAC_SAT = (p_mac_addr[5] << 8)\r
-                       | (p_mac_addr[4]);\r
-}\r
-\r
-/**\r
- * \brief Set MAC Address via 2 dword.\r
-  *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param uc_index  GMAC specific address register index.\r
- * \param ul_mac_top  GMAC top address.\r
- * \param ul_mac_bottom  GMAC bottom address.\r
- */\r
-static inline void gmac_set_address32(Gmac* p_gmac, uint8_t uc_index,\r
-               uint32_t ul_mac_top, uint32_t ul_mac_bottom)\r
-{\r
-       p_gmac->GMAC_SA[uc_index].GMAC_SAB = ul_mac_bottom;\r
-       p_gmac->GMAC_SA[uc_index].GMAC_SAT = ul_mac_top;\r
-}\r
-\r
-/**\r
- * \brief Set MAC Address via int64.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param uc_index  GMAC specific address register index.\r
- * \param ull_mac  64-bit GMAC address.\r
- */\r
-static inline void gmac_set_address64(Gmac* p_gmac, uint8_t uc_index,\r
-               uint64_t ull_mac)\r
-{\r
-       p_gmac->GMAC_SA[uc_index].GMAC_SAB = (uint32_t) ull_mac;\r
-       p_gmac->GMAC_SA[uc_index].GMAC_SAT = (uint32_t) (ull_mac >> 32);\r
-}\r
-\r
-/**\r
- * \brief Select media independent interface mode.\r
- *\r
- * \param p_gmac   Pointer to the GMAC instance.\r
- * \param mode   Media independent interface mode.\r
- */\r
-static inline void gmac_select_mii_mode(Gmac* p_gmac, gmac_mii_mode_t mode)\r
-{\r
-       switch (mode) {\r
-               case GMAC_PHY_MII:\r
-               case GMAC_PHY_RMII:\r
-                       p_gmac->GMAC_UR |= GMAC_UR_RMIIMII;\r
-               break;\r
-\r
-               default:\r
-                       p_gmac->GMAC_UR &= ~GMAC_UR_RMIIMII;\r
-               break;\r
-       }\r
-}\r
-\r
-uint8_t gmac_phy_read(Gmac* p_gmac, uint8_t uc_phy_address, uint8_t uc_address,\r
-               uint32_t* p_value);\r
-uint8_t gmac_phy_write(Gmac* p_gmac, uint8_t uc_phy_address,\r
-               uint8_t uc_address, uint32_t ul_value);\r
-void gmac_dev_init(Gmac* p_gmac, gmac_device_t* p_gmac_dev,\r
-               gmac_options_t* p_opt);\r
-uint32_t gmac_dev_read(gmac_device_t* p_gmac_dev, uint8_t* p_frame,\r
-               uint32_t ul_frame_size, uint32_t* p_rcv_size);\r
-uint32_t gmac_dev_write(gmac_device_t* p_gmac_dev, void *p_buffer,\r
-               uint32_t ul_size, gmac_dev_tx_cb_t func_tx_cb);\r
-uint32_t gmac_dev_get_tx_load(gmac_device_t* p_gmac_dev);\r
-void gmac_dev_set_rx_callback(gmac_device_t* p_gmac_dev,\r
-               gmac_dev_rx_cb_t func_rx_cb);\r
-uint8_t gmac_dev_set_tx_wakeup_callback(gmac_device_t* p_gmac_dev,\r
-               gmac_dev_wakeup_cb_t func_wakeup, uint8_t uc_threshold);\r
-void gmac_dev_reset(gmac_device_t* p_gmac_dev);\r
-void gmac_handler(gmac_device_t* p_gmac_dev);\r
-\r
-/// @cond 0\r
-/**INDENT-OFF**/\r
-#ifdef __cplusplus\r
-}\r
-#endif\r
-/**INDENT-ON**/\r
-/// @endcond\r
-\r
-/**\r
- * \page gmac_quickstart Quickstart guide for GMAC driver.\r
- *\r
- * This is the quickstart guide for the \ref gmac_group "Ethernet MAC",\r
- * with step-by-step instructions on how to configure and use the driver in a\r
- * selection of use cases.\r
- *\r
- * The use cases contain several code fragments. The code fragments in the\r
- * steps for setup can be copied into a custom initialization function, while\r
- * the steps for usage can be copied into, e.g., the main application function.\r
- *\r
- * \section gmac_basic_use_case Basic use case\r
- * In the basic use case, the GMAC driver are configured for:\r
- * - PHY component KSZ8051MNL is used\r
- * - GMAC uses MII mode\r
- * - The number of receive buffer is 16\r
- * - The number of transfer buffer is 8\r
- * - MAC address is set to 00-04-25-1c-a0-02\r
- * - IP address is set to 192.168.0.2\r
- * - IP address is set to 192.168.0.2\r
- * - Gateway is set to 192.168.0.1\r
- * - Network mask is 255.255.255.0\r
- * - PHY operation max retry count is 1000000\r
- * - GMAC is configured to not support copy all frame and support broadcast\r
- * - The data will be read from the ethernet\r
- *\r
- * \section gmac_basic_use_case_setup Setup steps\r
- *\r
- * \subsection gmac_basic_use_case_setup_prereq Prerequisites\r
- * -# \ref sysclk_group "System Clock Management (sysclock)"\r
- * -# \ref pmc_group "Power Management Controller (pmc)"\r
- * -# \ref ksz8051mnl_ethernet_phy_group "PHY component (KSZ8051MNL)"\r
- *\r
- * \subsection gmac_basic_use_case_setup_code Example code\r
- * Content of conf_eth.h\r
- * \code\r
- * #define GMAC_RX_BUFFERS                               16\r
- * #define GMAC_TX_BUFFERS                               8\r
- * #define MAC_PHY_RETRY_MAX                             1000000\r
- * #define ETHERNET_CONF_ETHADDR0                        0x00\r
- * #define ETHERNET_CONF_ETHADDR0                        0x00\r
- * #define ETHERNET_CONF_ETHADDR1                        0x04\r
- * #define ETHERNET_CONF_ETHADDR2                        0x25\r
- * #define ETHERNET_CONF_ETHADDR3                        0x1C\r
- * #define ETHERNET_CONF_ETHADDR4                        0xA0\r
- * #define ETHERNET_CONF_ETHADDR5                        0x02\r
- * #define ETHERNET_CONF_IPADDR0                         192\r
- * #define ETHERNET_CONF_IPADDR1                         168\r
- * #define ETHERNET_CONF_IPADDR2                         0\r
- * #define ETHERNET_CONF_IPADDR3                         2\r
- * #define ETHERNET_CONF_GATEWAY_ADDR0                   192\r
- * #define ETHERNET_CONF_GATEWAY_ADDR1                   168\r
- * #define ETHERNET_CONF_GATEWAY_ADDR2                   0\r
- * #define ETHERNET_CONF_GATEWAY_ADDR3                   1\r
- * #define ETHERNET_CONF_NET_MASK0                       255\r
- * #define ETHERNET_CONF_NET_MASK1                       255\r
- * #define ETHERNET_CONF_NET_MASK2                       255\r
- * #define ETHERNET_CONF_NET_MASK3                       0\r
- * #define ETH_PHY_MODE                                  ETH_PHY_MODE\r
- * \endcode\r
- *\r
- * A specific gmac device and the receive data buffer must be defined; another ul_frm_size should be defined\r
- * to trace the actual size of the data received.\r
- * \code\r
- * static gmac_device_t gs_gmac_dev;\r
- * static volatile uint8_t gs_uc_eth_buffer[GMAC_FRAME_LENTGH_MAX];\r
- *\r
- * uint32_t ul_frm_size;\r
- * \endcode\r
- *\r
- * Add to application C-file:\r
- * \code\r
- *   void gmac_init(void)\r
- *   {\r
- *       sysclk_init();\r
- *\r
- *       board_init();\r
- *\r
- *       pmc_enable_periph_clk(ID_GMAC);\r
- *\r
- *       gmac_option.uc_copy_all_frame = 0;\r
- *       gmac_option.uc_no_boardcast = 0;\r
- *       memcpy(gmac_option.uc_mac_addr, gs_uc_mac_address, sizeof(gs_uc_mac_address));\r
- *       gs_gmac_dev.p_hw = GMAC;\r
- *\r
- *       gmac_dev_init(GMAC, &gs_gmac_dev, &gmac_option);\r
- *\r
- *       NVIC_EnableIRQ(GMAC_IRQn);\r
- *\r
- *       ethernet_phy_init(GMAC, BOARD_GMAC_PHY_ADDR, sysclk_get_cpu_hz());\r
- *\r
- *       ethernet_phy_auto_negotiate(GMAC, BOARD_GMAC_PHY_ADDR);\r
- *\r
- *       ethernet_phy_set_link(GMAC, BOARD_GMAC_PHY_ADDR, 1);\r
- * \endcode\r
- *\r
- * \subsection gmac_basic_use_case_setup_flow Workflow\r
- * - Ensure that conf_eth.h is present and contains the\r
- * following configuration symbol. This configuration file is used\r
- * by the driver and should not be included by the application.\r
- * -# Define the receiving buffer size used in the internal GMAC driver.\r
- * The buffer size used for RX is GMAC_RX_BUFFERS * 128.\r
- * If it was supposed receiving a large number of frame, the\r
- * GMAC_RX_BUFFERS should be set higher. E.g., the application wants to accept\r
- * a ping echo test of 2048, the GMAC_RX_BUFFERS should be set at least\r
- * (2048/128)=16, and as there are additional frames coming, a preferred\r
- * number is 24 depending on a normal Ethernet throughput.\r
- *   - \code\r
- *        #define GMAC_RX_BUFFERS                               16\r
- *   \endcode\r
- * -# Define the transmitting buffer size used in the internal GMAC driver.\r
- * The buffer size used for TX is GMAC_TX_BUFFERS * 1518.\r
- *   - \code\r
- *        #define GMAC_TX_BUFFERS                               8\r
- *   \endcode\r
- * -# Define maximum retry time for a PHY read/write operation.\r
- *   - \code\r
- *        #define MAC_PHY_RETRY_MAX                             1000000\r
- *   \endcode\r
- * -# Define the MAC address. 00:04:25:1C:A0:02 is the address reserved\r
- * for ATMEL, application should always change this address to its' own.\r
- *   - \code\r
- *        #define ETHERNET_CONF_ETHADDR0                        0x00\r
- *        #define ETHERNET_CONF_ETHADDR1                        0x04\r
- *        #define ETHERNET_CONF_ETHADDR2                        0x25\r
- *        #define ETHERNET_CONF_ETHADDR3                        0x1C\r
- *        #define ETHERNET_CONF_ETHADDR4                        0xA0\r
- *        #define ETHERNET_CONF_ETHADDR5                        0x02\r
- *   \endcode\r
- * -# Define the IP address configration used in the application. When DHCP\r
- *  is enabled, this configuration is not effected.\r
- *   - \code\r
- *        #define ETHERNET_CONF_IPADDR0                         192\r
- *        #define ETHERNET_CONF_IPADDR1                         168\r
- *        #define ETHERNET_CONF_IPADDR2                         0\r
- *        #define ETHERNET_CONF_IPADDR3                         2\r
- *        #define ETHERNET_CONF_GATEWAY_ADDR0                   192\r
- *        #define ETHERNET_CONF_GATEWAY_ADDR1                   168\r
- *        #define ETHERNET_CONF_GATEWAY_ADDR2                   0\r
- *        #define ETHERNET_CONF_GATEWAY_ADDR3                   1\r
- *        #define ETHERNET_CONF_NET_MASK0                       255\r
- *        #define ETHERNET_CONF_NET_MASK1                       255\r
- *        #define ETHERNET_CONF_NET_MASK2                       255\r
- *        #define ETHERNET_CONF_NET_MASK3                       0\r
- *   \endcode\r
- * -# Configure the PHY maintainance interface.\r
- *   - \code\r
- *        #define ETH_PHY_MODE                                  GMAC_PHY_MII\r
- *   \endcode\r
- * -# Enable the system clock:\r
- *   - \code sysclk_init(); \endcode\r
- * -# Enable PIO configurations for GMAC:\r
- *   - \code board_init(); \endcode\r
- * -# Enable PMC clock for GMAC:\r
- *   - \code pmc_enable_periph_clk(ID_GMAC); \endcode\r
- * -# Set the GMAC options; it's set to copy all frame and support broadcast:\r
- *   - \code\r
- *         gmac_option.uc_copy_all_frame = 0;\r
- *         gmac_option.uc_no_boardcast = 0;\r
- *         memcpy(gmac_option.uc_mac_addr, gs_uc_mac_address, sizeof(gs_uc_mac_address));\r
- *         gs_gmac_dev.p_hw = GMAC;\r
- * \endcode\r
- * -# Initialize GMAC device with the filled option:\r
- *   - \code\r
- *         gmac_dev_init(GMAC, &gs_gmac_dev, &gmac_option);\r
- * \endcode\r
- * -# Enable the interrupt service for GMAC:\r
- *   - \code\r
- *         NVIC_EnableIRQ(GMAC_IRQn);\r
- * \endcode\r
- * -# Initialize the PHY component:\r
- *   - \code\r
- *         ethernet_phy_init(GMAC, BOARD_GMAC_PHY_ADDR, sysclk_get_cpu_hz());\r
- * \endcode\r
-  * -# The link will be established based on auto negotiation.\r
- *   - \code\r
- *         ethernet_phy_auto_negotiate(GMAC, BOARD_GMAC_PHY_ADDR);\r
- * \endcode\r
- * -# Establish the ethernet link; the network can be worked from now on:\r
- *   - \code\r
- *         ethernet_phy_set_link(GMAC, BOARD_GMAC_PHY_ADDR, 1);\r
- * \endcode\r
- *\r
- * \section gmac_basic_use_case_usage Usage steps\r
- * \subsection gmac_basic_use_case_usage_code Example code\r
- * Add to, e.g., main loop in application C-file:\r
- * \code\r
- *    gmac_dev_read(&gs_gmac_dev, (uint8_t *) gs_uc_eth_buffer, sizeof(gs_uc_eth_buffer), &ul_frm_size));\r
- * \endcode\r
- *\r
- * \subsection gmac_basic_use_case_usage_flow Workflow\r
- * -# Start reading the data from the ethernet:\r
- *   - \code gmac_dev_read(&gs_gmac_dev, (uint8_t *) gs_uc_eth_buffer, sizeof(gs_uc_eth_buffer), &ul_frm_size)); \endcode\r
- */\r
-\r
-#      define GMAC_STATS 0\r
-\r
-#if( GMAC_STATS != 0 )\r
-\r
-       /* Here below some code to study the types and\r
-       frequencies of  GMAC interrupts. */\r
-       #define GMAC_IDX_RXUBR 0\r
-       #define GMAC_IDX_TUR   1\r
-       #define GMAC_IDX_RLEX  2\r
-       #define GMAC_IDX_TFC   3\r
-       #define GMAC_IDX_RCOMP 4\r
-       #define GMAC_IDX_TCOMP 5\r
-       #define GMAC_IDX_ROVR  6\r
-       #define GMAC_IDX_HRESP 7\r
-       #define GMAC_IDX_PFNZ  8\r
-       #define GMAC_IDX_PTZ   9\r
-\r
-       struct SGmacStats {\r
-               unsigned recvCount;\r
-               unsigned rovrCount;\r
-               unsigned bnaCount;\r
-               unsigned sendCount;\r
-               unsigned sovrCount;\r
-               unsigned incompCount;\r
-               unsigned truncCount;\r
-\r
-               unsigned intStatus[10];\r
-       };\r
-       extern struct SGmacStats gmacStats;\r
-\r
-       struct SIntPair {\r
-               const char *name;\r
-               unsigned mask;\r
-               int index;\r
-       };\r
-\r
-       #define MK_PAIR( NAME )   #NAME, GMAC_IER_##NAME, GMAC_IDX_##NAME\r
-       static const struct SIntPair intPairs[] = {\r
-               { MK_PAIR( RXUBR ) }, /* Enable receive used bit read interrupt. */\r
-               { MK_PAIR( TUR   ) }, /* Enable transmit underrun interrupt. */\r
-               { MK_PAIR( RLEX  ) }, /* Enable retry limit  exceeded interrupt. */\r
-               { MK_PAIR( TFC   ) }, /* Enable transmit buffers exhausted in mid-frame interrupt. */\r
-               { MK_PAIR( RCOMP ) }, /* Receive complete */\r
-               { MK_PAIR( TCOMP ) }, /* Enable transmit complete interrupt. */\r
-               { MK_PAIR( ROVR  ) }, /* Enable receive overrun interrupt. */\r
-               { MK_PAIR( HRESP ) }, /* Enable Hresp not OK interrupt. */\r
-               { MK_PAIR( PFNZ  ) }, /* Enable pause frame received interrupt. */\r
-               { MK_PAIR( PTZ   ) }  /* Enable pause time zero interrupt. */\r
-       };\r
-\r
-       void gmac_show_irq_counts ();\r
-\r
-#endif\r
-\r
-#endif /* GMAC_H_INCLUDED */\r
+ /**
+ * \file
+ *
+ * \brief GMAC (Ethernet MAC) driver for SAM.
+ *
+ * Copyright (c) 2013 Atmel Corporation. All rights reserved.
+ *
+ * \asf_license_start
+ *
+ * \page License
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ *
+ * 3. The name of Atmel may not be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * 4. This software may only be redistributed and used in connection with an
+ *    Atmel microcontroller product.
+ *
+ * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
+ * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * \asf_license_stop
+ *
+ */
+
+#ifndef GMAC_H_INCLUDED
+#define GMAC_H_INCLUDED
+
+#include "compiler.h"
+#include "component/gmac.h"
+
+/// @cond 0
+/**INDENT-OFF**/
+#ifdef __cplusplus
+extern "C" {
+#endif
+/**INDENT-ON**/
+/// @endcond
+
+/** The buffer addresses written into the descriptors must be aligned, so the
+    last few bits are zero.  These bits have special meaning for the GMAC
+    peripheral and cannot be used as part of the address. */
+#define GMAC_RXD_ADDR_MASK      0xFFFFFFFC
+#define GMAC_RXD_WRAP         (1ul << 1)  /**< Wrap bit */
+#define GMAC_RXD_OWNERSHIP    (1ul << 0)  /**< Ownership bit */
+
+#define GMAC_RXD_BROADCAST    (1ul << 31) /**< Broadcast detected */
+#define GMAC_RXD_MULTIHASH    (1ul << 30) /**< Multicast hash match */
+#define GMAC_RXD_UNIHASH      (1ul << 29) /**< Unicast hash match */
+#define GMAC_RXD_ADDR_FOUND      (1ul << 27) /**< Specific address match found */
+#define GMAC_RXD_ADDR        (3ul << 25) /**< Address match */
+#define GMAC_RXD_RXCOEN        (1ul << 24) /**< RXCOEN related function */
+#define GMAC_RXD_TYPE         (3ul << 22) /**< Type ID match */
+#define GMAC_RXD_VLAN         (1ul << 21) /**< VLAN tag detected */
+#define GMAC_RXD_PRIORITY     (1ul << 20) /**< Priority tag detected */
+#define GMAC_RXD_PRIORITY_MASK  (3ul << 17) /**< VLAN priority */
+#define GMAC_RXD_CFI          (1ul << 16) /**< Concatenation Format Indicator only if bit 21 is set */
+#define GMAC_RXD_EOF          (1ul << 15) /**< End of frame */
+#define GMAC_RXD_SOF          (1ul << 14) /**< Start of frame */
+#define GMAC_RXD_FCS          (1ul << 13) /**< Frame check sequence */
+#define GMAC_RXD_OFFSET_MASK                /**< Receive buffer offset */
+#define GMAC_RXD_LEN_MASK       (0xFFF)     /**< Length of frame including FCS (if selected) */
+#define GMAC_RXD_LENJUMBO_MASK  (0x3FFF)    /**< Jumbo frame length */
+
+#define GMAC_TXD_USED         (1ul << 31) /**< Frame is transmitted */
+#define GMAC_TXD_WRAP         (1ul << 30) /**< Last descriptor */
+#define GMAC_TXD_ERROR        (1ul << 29) /**< Retry limit exceeded, error */
+#define GMAC_TXD_UNDERRUN     (1ul << 28) /**< Transmit underrun */
+#define GMAC_TXD_EXHAUSTED    (1ul << 27) /**< Buffer exhausted */
+#define GMAC_TXD_LATE    (1ul << 26) /**< Late collision,transmit  error  */
+#define GMAC_TXD_CHECKSUM_ERROR   (7ul << 20) /**< Checksum error */
+#define GMAC_TXD_NOCRC        (1ul << 16) /**< No CRC */
+#define GMAC_TXD_LAST         (1ul << 15) /**< Last buffer in frame */
+#define GMAC_TXD_LEN_MASK       (0x1FFF)     /**< Length of buffer */
+
+/** The MAC can support frame lengths up to 1536 bytes */
+#define GMAC_FRAME_LENTGH_MAX       1536
+
+#define GMAC_RX_UNITSIZE            128     /**< Fixed size for RX buffer  */
+#define GMAC_TX_UNITSIZE            1518    /**< Size for ETH frame length */
+
+/** GMAC clock speed */
+#define GMAC_MCK_SPEED_240MHZ        (240*1000*1000)
+#define GMAC_MCK_SPEED_160MHZ        (160*1000*1000)
+#define GMAC_MCK_SPEED_120MHZ        (120*1000*1000)
+#define GMAC_MCK_SPEED_80MHZ          (80*1000*1000)
+#define GMAC_MCK_SPEED_40MHZ          (40*1000*1000)
+#define GMAC_MCK_SPEED_20MHZ          (20*1000*1000)
+
+/** GMAC maintain code default value*/
+#define GMAC_MAN_CODE_VALUE    (10)
+
+/** GMAC maintain start of frame default value*/
+#define GMAC_MAN_SOF_VALUE     (1)
+
+/** GMAC maintain read/write*/
+#define GMAC_MAN_RW_TYPE       (2)
+
+/** GMAC maintain read only*/
+#define GMAC_MAN_READ_ONLY     (1)
+
+/** GMAC address length */
+#define GMAC_ADDR_LENGTH       (6)
+
+
+#define GMAC_DUPLEX_HALF 0
+#define GMAC_DUPLEX_FULL 1
+
+#define GMAC_SPEED_10M      0
+#define GMAC_SPEED_100M     1
+
+/**
+ * \brief Return codes for GMAC APIs.
+ */
+typedef enum {
+       GMAC_OK = 0,         /** 0  Operation OK */
+       GMAC_TIMEOUT = 1,    /** 1  GMAC operation timeout */
+       GMAC_TX_BUSY,        /** 2  TX in progress */
+       GMAC_RX_NULL,        /** 3  No data received */
+       GMAC_SIZE_TOO_SMALL, /** 4  Buffer size not enough */
+       GMAC_PARAM,          /** 5  Parameter error, TX packet invalid or RX size too small */
+       GMAC_INVALID = 0xFF, /* Invalid */
+} gmac_status_t;
+
+/**
+ * \brief Media Independent Interface (MII) type.
+ */
+typedef enum {
+       GMAC_PHY_MII = 0,         /** MII mode */
+       GMAC_PHY_RMII = 1,    /** Reduced MII mode */
+       GMAC_PHY_INVALID = 0xFF, /* Invalid mode*/
+} gmac_mii_mode_t;
+
+/** Receive buffer descriptor struct */
+COMPILER_PACK_SET(8)
+typedef struct gmac_rx_descriptor {
+       union gmac_rx_addr {
+               uint32_t val;
+               struct gmac_rx_addr_bm {
+                       uint32_t b_ownership:1, /**< User clear, GMAC sets this to 1 once it has successfully written a frame to memory */
+                       b_wrap:1,   /**< Marks last descriptor in receive buffer */
+                       addr_dw:30; /**< Address in number of DW */
+               } bm;
+       } addr; /**< Address, Wrap & Ownership */
+       union gmac_rx_status {
+               uint32_t val;
+               struct gmac_rx_status_bm {
+                       uint32_t len:13,       /**  0..12  Length of frame including FCS */
+                       b_fcs:1,               /**  13     Receive buffer offset,  bits 13:12 of frame length for jumbo frame */
+                       b_sof:1,               /**  14     Start of frame */
+                       b_eof:1,               /**  15     End of frame */
+                       b_cfi:1,               /**  16     Concatenation Format Indicator */
+                       vlan_priority:3,       /**  17..19 VLAN priority (if VLAN detected) */
+                       b_priority_detected:1, /**  20     Priority tag detected */
+                       b_vlan_detected:1,     /**  21     VLAN tag detected */
+                       b_type_id_match:2,     /**  22..23 Type ID match */
+                       b_checksumoffload:1,   /**  24     Checksum offload specific function */
+                       b_addrmatch:2,         /**  25..26 Address register match */
+                       b_ext_addr_match:1,    /**  27     External address match found */
+                       reserved:1,            /**  28     */
+                       b_uni_hash_match:1,    /**  29     Unicast hash match */
+                       b_multi_hash_match:1,  /**  30     Multicast hash match */
+                       b_boardcast_detect:1;  /**  31     Global broadcast address detected */
+               } bm;
+       } status;
+} gmac_rx_descriptor_t;
+
+/** Transmit buffer descriptor struct */
+COMPILER_PACK_SET(8)
+typedef struct gmac_tx_descriptor {
+       uint32_t addr;
+       union gmac_tx_status {
+               uint32_t val;
+               struct gmac_tx_status_bm {
+                       uint32_t len:14,     /**  0..13 Length of buffer */
+                       reserved:1,          /** 14            */
+                       b_last_buffer:1,     /** 15     Last buffer (in the current frame) */
+                       b_no_crc:1,          /** 16     No CRC */
+                       reserved1:3,         /** 17..19        */
+                       b_checksumoffload:3, /** 20..22 Transmit checksum generation offload errors */
+                       reserved2:3,         /** 23..25        */
+                       b_lco:1,             /** 26     Late collision, transmit error detected */
+                       b_exhausted:1,       /** 27     Buffer exhausted in mid frame */
+                       b_underrun:1,        /** 28     Transmit underrun */
+                       b_error:1,           /** 29     Retry limit exceeded, error detected */
+                       b_wrap:1,            /** 30     Marks last descriptor in TD list */
+                       b_used:1;            /** 31     User clear, GMAC sets this to 1 once a frame has been successfully transmitted */
+               } bm;
+       } status;
+} gmac_tx_descriptor_t;
+
+COMPILER_PACK_RESET()
+
+/**
+ * \brief Input parameters when initializing the gmac module mode.
+ */
+typedef struct gmac_options {
+       /*  Enable/Disable CopyAllFrame */
+       uint8_t uc_copy_all_frame;
+       /* Enable/Disable NoBroadCast */
+       uint8_t uc_no_boardcast;
+       /* MAC address */
+       uint8_t uc_mac_addr[GMAC_ADDR_LENGTH];
+} gmac_options_t;
+
+/** TX callback */
+typedef void (*gmac_dev_tx_cb_t) (uint32_t ul_status, uint8_t *puc_buffer);
+/** RX callback */
+typedef void (*gmac_dev_rx_cb_t) (uint32_t ul_status);
+/** Wakeup callback */
+typedef void (*gmac_dev_wakeup_cb_t) (void);
+
+/**
+ * GMAC driver structure.
+ */
+typedef struct gmac_device {
+
+       /** Pointer to HW register base */
+       Gmac *p_hw;
+       /**
+        * Pointer to allocated TX buffer.
+        * Section 3.6 of AMBA 2.0 spec states that burst should not cross
+        * 1K Boundaries.
+        * Receive buffer manager writes are burst of 2 words => 3 lsb bits
+        * of the address shall be set to 0.
+        */
+       uint8_t *p_tx_buffer;
+       /** Pointer to allocated RX buffer */
+       uint8_t *p_rx_buffer;
+       /** Pointer to Rx TDs (must be 8-byte aligned) */
+       gmac_rx_descriptor_t *p_rx_dscr;
+       /** Pointer to Tx TDs (must be 8-byte aligned) */
+       gmac_tx_descriptor_t *p_tx_dscr;
+       /** Optional callback to be invoked once a frame has been received */
+       gmac_dev_rx_cb_t func_rx_cb;
+#if( GMAC_USES_WAKEUP_CALLBACK )
+       /** Optional callback to be invoked once several TDs have been released */
+       gmac_dev_wakeup_cb_t func_wakeup_cb;
+#endif
+#if( GMAC_USES_TX_CALLBACK != 0 )
+       /** Optional callback list to be invoked once TD has been processed */
+       gmac_dev_tx_cb_t *func_tx_cb_list;
+#endif
+       /** RX TD list size */
+       uint32_t ul_rx_list_size;
+       /** RX index for current processing TD */
+       uint32_t ul_rx_idx;
+       /** TX TD list size */
+       uint32_t ul_tx_list_size;
+       /** Circular buffer head pointer by upper layer (buffer to be sent) */
+       int32_t l_tx_head;
+       /** Circular buffer tail pointer incremented by handlers (buffer sent) */
+       int32_t l_tx_tail;
+
+       /** Number of free TD before wakeup callback is invoked */
+       uint32_t uc_wakeup_threshold;
+} gmac_device_t;
+
+/**
+ * \brief Write network control value.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param ul_ncr   Network control value.
+ */
+static inline void gmac_network_control(Gmac* p_gmac, uint32_t ul_ncr)
+{
+       p_gmac->GMAC_NCR = ul_ncr;
+}
+
+/**
+ * \brief Get network control value.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ */
+
+static inline uint32_t gmac_get_network_control(Gmac* p_gmac)
+{
+       return p_gmac->GMAC_NCR;
+}
+
+/**
+ * \brief Enable/Disable GMAC receive.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param uc_enable   0 to disable GMAC receiver, else to enable it.
+ */
+static inline void gmac_enable_receive(Gmac* p_gmac, uint8_t uc_enable)
+{
+       if (uc_enable) {
+               p_gmac->GMAC_NCR |= GMAC_NCR_RXEN;
+       } else {
+               p_gmac->GMAC_NCR &= ~GMAC_NCR_RXEN;
+       }
+}
+
+/**
+ * \brief Enable/Disable GMAC transmit.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param uc_enable   0 to disable GMAC transmit, else to enable it.
+ */
+static inline void gmac_enable_transmit(Gmac* p_gmac, uint8_t uc_enable)
+{
+       if (uc_enable) {
+               p_gmac->GMAC_NCR |= GMAC_NCR_TXEN;
+       } else {
+               p_gmac->GMAC_NCR &= ~GMAC_NCR_TXEN;
+       }
+}
+
+/**
+ * \brief Enable/Disable GMAC management.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param uc_enable   0 to disable GMAC management, else to enable it.
+ */
+static inline void gmac_enable_management(Gmac* p_gmac, uint8_t uc_enable)
+{
+       if (uc_enable) {
+               p_gmac->GMAC_NCR |= GMAC_NCR_MPE;
+       } else {
+               p_gmac->GMAC_NCR &= ~GMAC_NCR_MPE;
+       }
+}
+
+/**
+ * \brief Clear all statistics registers.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ */
+static inline void gmac_clear_statistics(Gmac* p_gmac)
+{
+       p_gmac->GMAC_NCR |= GMAC_NCR_CLRSTAT;
+}
+
+/**
+ * \brief Increase all statistics registers.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ */
+static inline void gmac_increase_statistics(Gmac* p_gmac)
+{
+       p_gmac->GMAC_NCR |= GMAC_NCR_INCSTAT;
+}
+
+/**
+ * \brief Enable/Disable statistics registers writing.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param uc_enable   0 to disable the statistics registers writing, else to enable it.
+ */
+static inline void gmac_enable_statistics_write(Gmac* p_gmac,
+               uint8_t uc_enable)
+{
+       if (uc_enable) {
+               p_gmac->GMAC_NCR |= GMAC_NCR_WESTAT;
+       } else {
+               p_gmac->GMAC_NCR &= ~GMAC_NCR_WESTAT;
+       }
+}
+
+/**
+ * \brief In half-duplex mode, forces collisions on all received frames.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param uc_enable   0 to disable the back pressure, else to enable it.
+ */
+static inline void gmac_enable_back_pressure(Gmac* p_gmac, uint8_t uc_enable)
+{
+       if (uc_enable) {
+               p_gmac->GMAC_NCR |= GMAC_NCR_BP;
+       } else {
+               p_gmac->GMAC_NCR &= ~GMAC_NCR_BP;
+       }
+}
+
+/**
+ * \brief Start transmission.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ */
+static inline void gmac_start_transmission(Gmac* p_gmac)
+{
+       p_gmac->GMAC_NCR |= GMAC_NCR_TSTART;
+}
+
+/**
+ * \brief Halt transmission.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ */
+static inline void gmac_halt_transmission(Gmac* p_gmac)
+{
+       p_gmac->GMAC_NCR |= GMAC_NCR_THALT;
+}
+
+/**
+ * \brief Transmit pause frame.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ */
+static inline void gmac_tx_pause_frame(Gmac* p_gmac)
+{
+       p_gmac->GMAC_NCR |= GMAC_NCR_TXPF;
+}
+
+/**
+ * \brief Transmit zero quantum pause frame.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ */
+static inline void gmac_tx_pause_zero_quantum_frame(Gmac* p_gmac)
+{
+       p_gmac->GMAC_NCR |= GMAC_NCR_TXZQPF;
+}
+
+/**
+ * \brief Read snapshot.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ */
+static inline void gmac_read_snapshot(Gmac* p_gmac)
+{
+       p_gmac->GMAC_NCR |= GMAC_NCR_RDS;
+}
+
+/**
+ * \brief Store receivetime stamp to memory.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param uc_enable   0 to normal operation, else to enable the store.
+ */
+static inline void gmac_store_rx_time_stamp(Gmac* p_gmac, uint8_t uc_enable)
+{
+       if (uc_enable) {
+               p_gmac->GMAC_NCR |= GMAC_NCR_SRTSM;
+       } else {
+               p_gmac->GMAC_NCR &= ~GMAC_NCR_SRTSM;
+       }
+}
+
+/**
+ * \brief Enable PFC priority-based pause reception.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param uc_enable   1 to set the reception, 0 to disable.
+ */
+static inline void gmac_enable_pfc_pause_frame(Gmac* p_gmac, uint8_t uc_enable)
+{
+       if (uc_enable) {
+               p_gmac->GMAC_NCR |= GMAC_NCR_ENPBPR;
+       } else {
+               p_gmac->GMAC_NCR &= ~GMAC_NCR_ENPBPR;
+       }
+}
+
+/**
+ * \brief Transmit PFC priority-based pause reception.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ */
+static inline void gmac_transmit_pfc_pause_frame(Gmac* p_gmac)
+{
+               p_gmac->GMAC_NCR |= GMAC_NCR_TXPBPF;
+}
+
+/**
+ * \brief Flush next packet.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ */
+static inline void gmac_flush_next_packet(Gmac* p_gmac)
+{
+               p_gmac->GMAC_NCR |= GMAC_NCR_FNP;
+}
+
+/**
+ * \brief Set up network configuration register.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+  * \param ul_cfg   Network configuration value.
+ */
+static inline void gmac_set_configure(Gmac* p_gmac, uint32_t ul_cfg)
+{
+       p_gmac->GMAC_NCFGR = ul_cfg;
+}
+
+/**
+ * \brief Get network configuration.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ *
+ * \return Network configuration.
+ */
+static inline uint32_t gmac_get_configure(Gmac* p_gmac)
+{
+       return p_gmac->GMAC_NCFGR;
+}
+
+
+/* Get and set DMA Configuration Register */
+static inline void gmac_set_dma(Gmac* p_gmac, uint32_t ul_cfg)
+{
+       p_gmac->GMAC_DCFGR = ul_cfg;
+}
+
+static inline uint32_t gmac_get_dma(Gmac* p_gmac)
+{
+       return p_gmac->GMAC_DCFGR;
+}
+
+/**
+ * \brief Set speed.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param uc_speed 1 to indicate 100Mbps, 0 to 10Mbps.
+ */
+static inline void gmac_set_speed(Gmac* p_gmac, uint8_t uc_speed)
+{
+       if (uc_speed) {
+               p_gmac->GMAC_NCFGR |= GMAC_NCFGR_SPD;
+       } else {
+               p_gmac->GMAC_NCFGR &= ~GMAC_NCFGR_SPD;
+       }
+}
+
+/**
+ * \brief Enable/Disable Full-Duplex mode.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param uc_enable   0 to disable the Full-Duplex mode, else to enable it.
+ */
+static inline void gmac_enable_full_duplex(Gmac* p_gmac, uint8_t uc_enable)
+{
+       if (uc_enable) {
+               p_gmac->GMAC_NCFGR |= GMAC_NCFGR_FD;
+       } else {
+               p_gmac->GMAC_NCFGR &= ~GMAC_NCFGR_FD;
+       }
+}
+
+/**
+ * \brief Enable/Disable Copy(Receive) All Valid Frames.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param uc_enable   0 to disable copying all valid frames, else to enable it.
+ */
+static inline void gmac_enable_copy_all(Gmac* p_gmac, uint8_t uc_enable)
+{
+       if (uc_enable) {
+               p_gmac->GMAC_NCFGR |= GMAC_NCFGR_CAF;
+       } else {
+               p_gmac->GMAC_NCFGR &= ~GMAC_NCFGR_CAF;
+       }
+}
+
+/**
+ * \brief Enable/Disable jumbo frames (up to 10240 bytes).
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param uc_enable   0 to disable the jumbo frames, else to enable it.
+ */
+static inline void gmac_enable_jumbo_frames(Gmac* p_gmac, uint8_t uc_enable)
+{
+       if (uc_enable) {
+               p_gmac->GMAC_NCFGR |= GMAC_NCFGR_JFRAME;
+       } else {
+               p_gmac->GMAC_NCFGR &= ~GMAC_NCFGR_JFRAME;
+       }
+}
+
+/**
+ * \brief Disable/Enable broadcast receiving.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param uc_enable   1 to disable the broadcast, else to enable it.
+ */
+static inline void gmac_disable_broadcast(Gmac* p_gmac, uint8_t uc_enable)
+{
+       if (uc_enable) {
+               p_gmac->GMAC_NCFGR |= GMAC_NCFGR_NBC;
+       } else {
+               p_gmac->GMAC_NCFGR &= ~GMAC_NCFGR_NBC;
+       }
+}
+
+/**
+ * \brief Enable/Disable multicast hash.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param uc_enable   0 to disable the multicast hash, else to enable it.
+ */
+static inline void gmac_enable_multicast_hash(Gmac* p_gmac, uint8_t uc_enable)
+{
+       if (uc_enable) {
+               p_gmac->GMAC_NCFGR |= GMAC_NCFGR_UNIHEN;
+       } else {
+               p_gmac->GMAC_NCFGR &= ~GMAC_NCFGR_UNIHEN;
+       }
+}
+
+/**
+ * \brief Enable/Disable big frames (over 1518, up to 1536).
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param uc_enable   0 to disable big frames else to enable it.
+ */
+static inline void gmac_enable_big_frame(Gmac* p_gmac, uint8_t uc_enable)
+{
+       if (uc_enable) {
+               p_gmac->GMAC_NCFGR |= GMAC_NCFGR_MAXFS;
+       } else {
+               p_gmac->GMAC_NCFGR &= ~GMAC_NCFGR_MAXFS;
+       }
+}
+
+/**
+ * \brief Set MDC clock divider.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param ul_mck   GMAC MCK.
+ *
+ * \return GMAC_OK if successfully.
+ */
+static inline uint8_t gmac_set_mdc_clock(Gmac* p_gmac, uint32_t ul_mck)
+{
+       uint32_t ul_clk;
+
+       if (ul_mck > GMAC_MCK_SPEED_240MHZ) {
+               return GMAC_INVALID;
+       } else if (ul_mck > GMAC_MCK_SPEED_160MHZ) {
+               ul_clk = GMAC_NCFGR_CLK_MCK_96;
+       } else if (ul_mck > GMAC_MCK_SPEED_120MHZ) {
+               ul_clk = GMAC_NCFGR_CLK_MCK_64;
+       } else if (ul_mck > GMAC_MCK_SPEED_80MHZ) {
+               ul_clk = GMAC_NCFGR_CLK_MCK_48;
+       } else if (ul_mck > GMAC_MCK_SPEED_40MHZ) {
+               ul_clk = GMAC_NCFGR_CLK_MCK_32;
+       } else if (ul_mck > GMAC_MCK_SPEED_20MHZ) {
+               ul_clk = GMAC_NCFGR_CLK_MCK_16;
+       } else {
+               ul_clk = GMAC_NCFGR_CLK_MCK_8;
+       }
+       ;
+       p_gmac->GMAC_NCFGR = (p_gmac->GMAC_NCFGR & ~GMAC_NCFGR_CLK_Msk) | ul_clk;
+       return GMAC_OK;
+}
+
+/**
+ * \brief Enable/Disable retry test.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param uc_enable   0 to disable the GMAC receiver, else to enable it.
+ */
+static inline void gmac_enable_retry_test(Gmac* p_gmac, uint8_t uc_enable)
+{
+       if (uc_enable) {
+               p_gmac->GMAC_NCFGR |= GMAC_NCFGR_RTY;
+       } else {
+               p_gmac->GMAC_NCFGR &= ~GMAC_NCFGR_RTY;
+       }
+}
+
+/**
+ * \brief Enable/Disable pause (when a valid pause frame is received).
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param uc_enable   0 to disable pause frame, else to enable it.
+ */
+static inline void gmac_enable_pause_frame(Gmac* p_gmac, uint8_t uc_enable)
+{
+       if (uc_enable) {
+               p_gmac->GMAC_NCFGR |= GMAC_NCFGR_PEN;
+       } else {
+               p_gmac->GMAC_NCFGR &= ~GMAC_NCFGR_PEN;
+       }
+}
+
+/**
+ * \brief Set receive buffer offset to 0 ~ 3.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ */
+static inline void gmac_set_rx_buffer_offset(Gmac* p_gmac, uint8_t uc_offset)
+{
+       p_gmac->GMAC_NCFGR &= ~GMAC_NCFGR_RXBUFO_Msk;
+       p_gmac->GMAC_NCFGR |= GMAC_NCFGR_RXBUFO(uc_offset);
+}
+
+/**
+ * \brief Enable/Disable receive length field checking.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param uc_enable   0 to disable receive length field checking, else to enable it.
+ */
+static inline void gmac_enable_rx_length_check(Gmac* p_gmac, uint8_t uc_enable)
+{
+       if (uc_enable) {
+               p_gmac->GMAC_NCFGR |= GMAC_NCFGR_LFERD;
+       } else {
+               p_gmac->GMAC_NCFGR &= ~GMAC_NCFGR_LFERD;
+       }
+}
+
+/**
+ * \brief Enable/Disable discarding FCS field of received frames.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param uc_enable   0 to disable discarding FCS field of received frames, else to enable it.
+ */
+static inline void gmac_enable_discard_fcs(Gmac* p_gmac, uint8_t uc_enable)
+{
+       if (uc_enable) {
+               p_gmac->GMAC_NCFGR |= GMAC_NCFGR_RFCS;
+       } else {
+               p_gmac->GMAC_NCFGR &= ~GMAC_NCFGR_RFCS;
+       }
+}
+
+
+/**
+ * \brief Enable/Disable frames to be received in half-duplex mode
+ * while transmitting.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param uc_enable   0 to disable the received in half-duplex mode, else to enable it.
+ */
+static inline void gmac_enable_efrhd(Gmac* p_gmac, uint8_t uc_enable)
+{
+       if (uc_enable) {
+               p_gmac->GMAC_NCFGR |= GMAC_NCFGR_EFRHD;
+       } else {
+               p_gmac->GMAC_NCFGR &= ~GMAC_NCFGR_EFRHD;
+       }
+}
+
+/**
+ * \brief Enable/Disable ignore RX FCS.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param uc_enable   0 to disable ignore RX FCS, else to enable it.
+ */
+static inline void gmac_enable_ignore_rx_fcs(Gmac* p_gmac, uint8_t uc_enable)
+{
+       if (uc_enable) {
+               p_gmac->GMAC_NCFGR |= GMAC_NCFGR_IRXFCS;
+       } else {
+               p_gmac->GMAC_NCFGR &= ~GMAC_NCFGR_IRXFCS;
+       }
+}
+
+/**
+ * \brief Get Network Status.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ *
+ * \return Network status.
+ */
+static inline uint32_t gmac_get_status(Gmac* p_gmac)
+{
+       return p_gmac->GMAC_NSR;
+}
+
+/**
+ * \brief Get MDIO IN pin status.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ *
+ * \return MDIO IN pin status.
+ */
+static inline uint8_t gmac_get_MDIO(Gmac* p_gmac)
+{
+       return ((p_gmac->GMAC_NSR & GMAC_NSR_MDIO) > 0);
+}
+
+/**
+ * \brief Check if PHY is idle.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ *
+ * \return  1 if PHY is idle.
+ */
+static inline uint8_t gmac_is_phy_idle(Gmac* p_gmac)
+{
+       return ((p_gmac->GMAC_NSR & GMAC_NSR_IDLE) > 0);
+}
+
+/**
+ * \brief Return transmit status.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ *
+ * \return  Transmit status.
+ */
+static inline uint32_t gmac_get_tx_status(Gmac* p_gmac)
+{
+       return p_gmac->GMAC_TSR;
+}
+
+/**
+ * \brief Clear transmit status.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param ul_status   Transmit status.
+ */
+static inline void gmac_clear_tx_status(Gmac* p_gmac, uint32_t ul_status)
+{
+       p_gmac->GMAC_TSR = ul_status;
+}
+
+/**
+ * \brief Return receive status.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ */
+static inline uint32_t gmac_get_rx_status(Gmac* p_gmac)
+{
+       return p_gmac->GMAC_RSR;
+}
+
+/**
+ * \brief Clear receive status.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param ul_status   Receive status.
+ */
+static inline void gmac_clear_rx_status(Gmac* p_gmac, uint32_t ul_status)
+{
+       p_gmac->GMAC_RSR = ul_status;
+}
+
+/**
+ * \brief Set Rx Queue.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param ul_addr   Rx queue address.
+ */
+static inline void gmac_set_rx_queue(Gmac* p_gmac, uint32_t ul_addr)
+{
+       p_gmac->GMAC_RBQB = GMAC_RBQB_ADDR_Msk & ul_addr;
+}
+
+/**
+ * \brief Get Rx Queue Address.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ *
+ * \return  Rx queue address.
+ */
+static inline uint32_t gmac_get_rx_queue(Gmac* p_gmac)
+{
+       return p_gmac->GMAC_RBQB;
+}
+
+/**
+ * \brief Set Tx Queue.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param ul_addr  Tx queue address.
+ */
+static inline void gmac_set_tx_queue(Gmac* p_gmac, uint32_t ul_addr)
+{
+       p_gmac->GMAC_TBQB = GMAC_TBQB_ADDR_Msk & ul_addr;
+}
+
+/**
+ * \brief Get Tx Queue.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ *
+ * \return  Rx queue address.
+ */
+static inline uint32_t gmac_get_tx_queue(Gmac* p_gmac)
+{
+       return p_gmac->GMAC_TBQB;
+}
+
+/**
+ * \brief Enable interrupt(s).
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param ul_source   Interrupt source(s) to be enabled.
+ */
+static inline void gmac_enable_interrupt(Gmac* p_gmac, uint32_t ul_source)
+{
+       p_gmac->GMAC_IER = ul_source;
+}
+
+/**
+ * \brief Disable interrupt(s).
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param ul_source   Interrupt source(s) to be disabled.
+ */
+static inline void gmac_disable_interrupt(Gmac* p_gmac, uint32_t ul_source)
+{
+       p_gmac->GMAC_IDR = ul_source;
+}
+
+/**
+ * \brief Return interrupt status.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ *
+ * \return Interrupt status.
+ */
+static inline uint32_t gmac_get_interrupt_status(Gmac* p_gmac)
+{
+       return p_gmac->GMAC_ISR;
+}
+
+/**
+ * \brief Return interrupt mask.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ *
+ * \return Interrupt mask.
+ */
+static inline uint32_t gmac_get_interrupt_mask(Gmac* p_gmac)
+{
+       return p_gmac->GMAC_IMR;
+}
+
+/**
+ * \brief Execute PHY maintenance command.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param uc_phy_addr   PHY address.
+ * \param uc_reg_addr   Register address.
+ * \param uc_rw   1 to Read, 0 to write.
+ * \param us_data   Data to be performed, write only.
+ */
+static inline void gmac_maintain_phy(Gmac* p_gmac,
+               uint8_t uc_phy_addr, uint8_t uc_reg_addr, uint8_t uc_rw,
+               uint16_t us_data)
+{
+       /* Wait until bus idle */
+       while ((p_gmac->GMAC_NSR & GMAC_NSR_IDLE) == 0);
+       /* Write maintain register */
+       p_gmac->GMAC_MAN = GMAC_MAN_WTN(GMAC_MAN_CODE_VALUE)
+                       | GMAC_MAN_CLTTO
+                       | GMAC_MAN_PHYA(uc_phy_addr)
+                       | GMAC_MAN_REGA(uc_reg_addr)
+                       | GMAC_MAN_OP((uc_rw ? GMAC_MAN_RW_TYPE : GMAC_MAN_READ_ONLY))
+                       | GMAC_MAN_DATA(us_data);
+}
+
+/**
+ * \brief Get PHY maintenance data returned.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ *
+ * \return Get PHY data.
+ */
+static inline uint16_t gmac_get_phy_data(Gmac* p_gmac)
+{
+       /* Wait until bus idle */
+       while ((p_gmac->GMAC_NSR & GMAC_NSR_IDLE) == 0);
+       /* Return data */
+       return (uint16_t) (p_gmac->GMAC_MAN & GMAC_MAN_DATA_Msk);
+}
+
+/**
+ * \brief Set Hash.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param ul_hash_top   Hash top.
+ * \param ul_hash_bottom   Hash bottom.
+ */
+static inline void gmac_set_hash(Gmac* p_gmac, uint32_t ul_hash_top,
+               uint32_t ul_hash_bottom)
+{
+       p_gmac->GMAC_HRB = ul_hash_bottom;
+       p_gmac->GMAC_HRT = ul_hash_top;
+}
+
+/**
+ * \brief Set 64 bits Hash.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param ull_hash   64 bits hash value.
+ */
+static inline void gmac_set_hash64(Gmac* p_gmac, uint64_t ull_hash)
+{
+       p_gmac->GMAC_HRB = (uint32_t) ull_hash;
+       p_gmac->GMAC_HRT = (uint32_t) (ull_hash >> 32);
+}
+
+/**
+ * \brief Set MAC Address.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param uc_index  GMAC specific address register index.
+ * \param p_mac_addr  GMAC address.
+ */
+static inline void gmac_set_address(Gmac* p_gmac, uint8_t uc_index,
+               uint8_t* p_mac_addr)
+{
+       p_gmac->GMAC_SA[uc_index].GMAC_SAB = (p_mac_addr[3] << 24)
+                       | (p_mac_addr[2] << 16)
+                       | (p_mac_addr[1] << 8)
+                       | (p_mac_addr[0]);
+       p_gmac->GMAC_SA[uc_index].GMAC_SAT = (p_mac_addr[5] << 8)
+                       | (p_mac_addr[4]);
+}
+
+/**
+ * \brief Set MAC Address via 2 dword.
+  *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param uc_index  GMAC specific address register index.
+ * \param ul_mac_top  GMAC top address.
+ * \param ul_mac_bottom  GMAC bottom address.
+ */
+static inline void gmac_set_address32(Gmac* p_gmac, uint8_t uc_index,
+               uint32_t ul_mac_top, uint32_t ul_mac_bottom)
+{
+       p_gmac->GMAC_SA[uc_index].GMAC_SAB = ul_mac_bottom;
+       p_gmac->GMAC_SA[uc_index].GMAC_SAT = ul_mac_top;
+}
+
+/**
+ * \brief Set MAC Address via int64.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param uc_index  GMAC specific address register index.
+ * \param ull_mac  64-bit GMAC address.
+ */
+static inline void gmac_set_address64(Gmac* p_gmac, uint8_t uc_index,
+               uint64_t ull_mac)
+{
+       p_gmac->GMAC_SA[uc_index].GMAC_SAB = (uint32_t) ull_mac;
+       p_gmac->GMAC_SA[uc_index].GMAC_SAT = (uint32_t) (ull_mac >> 32);
+}
+
+/**
+ * \brief Select media independent interface mode.
+ *
+ * \param p_gmac   Pointer to the GMAC instance.
+ * \param mode   Media independent interface mode.
+ */
+static inline void gmac_select_mii_mode(Gmac* p_gmac, gmac_mii_mode_t mode)
+{
+       switch (mode) {
+               case GMAC_PHY_MII:
+               case GMAC_PHY_RMII:
+                       p_gmac->GMAC_UR |= GMAC_UR_RMIIMII;
+               break;
+
+               default:
+                       p_gmac->GMAC_UR &= ~GMAC_UR_RMIIMII;
+               break;
+       }
+}
+
+uint8_t gmac_phy_read(Gmac* p_gmac, uint8_t uc_phy_address, uint8_t uc_address,
+               uint32_t* p_value);
+uint8_t gmac_phy_write(Gmac* p_gmac, uint8_t uc_phy_address,
+               uint8_t uc_address, uint32_t ul_value);
+void gmac_dev_init(Gmac* p_gmac, gmac_device_t* p_gmac_dev,
+               gmac_options_t* p_opt);
+uint32_t gmac_dev_read(gmac_device_t* p_gmac_dev, uint8_t* p_frame,
+               uint32_t ul_frame_size, uint32_t* p_rcv_size);
+uint32_t gmac_dev_write(gmac_device_t* p_gmac_dev, void *p_buffer,
+               uint32_t ul_size, gmac_dev_tx_cb_t func_tx_cb);
+uint32_t gmac_dev_get_tx_load(gmac_device_t* p_gmac_dev);
+void gmac_dev_set_rx_callback(gmac_device_t* p_gmac_dev,
+               gmac_dev_rx_cb_t func_rx_cb);
+uint8_t gmac_dev_set_tx_wakeup_callback(gmac_device_t* p_gmac_dev,
+               gmac_dev_wakeup_cb_t func_wakeup, uint8_t uc_threshold);
+void gmac_dev_reset(gmac_device_t* p_gmac_dev);
+void gmac_handler(gmac_device_t* p_gmac_dev);
+
+/// @cond 0
+/**INDENT-OFF**/
+#ifdef __cplusplus
+}
+#endif
+/**INDENT-ON**/
+/// @endcond
+
+/**
+ * \page gmac_quickstart Quickstart guide for GMAC driver.
+ *
+ * This is the quickstart guide for the \ref gmac_group "Ethernet MAC",
+ * with step-by-step instructions on how to configure and use the driver in a
+ * selection of use cases.
+ *
+ * The use cases contain several code fragments. The code fragments in the
+ * steps for setup can be copied into a custom initialization function, while
+ * the steps for usage can be copied into, e.g., the main application function.
+ *
+ * \section gmac_basic_use_case Basic use case
+ * In the basic use case, the GMAC driver are configured for:
+ * - PHY component KSZ8051MNL is used
+ * - GMAC uses MII mode
+ * - The number of receive buffer is 16
+ * - The number of transfer buffer is 8
+ * - MAC address is set to 00-04-25-1c-a0-02
+ * - IP address is set to 192.168.0.2
+ * - IP address is set to 192.168.0.2
+ * - Gateway is set to 192.168.0.1
+ * - Network mask is 255.255.255.0
+ * - PHY operation max retry count is 1000000
+ * - GMAC is configured to not support copy all frame and support broadcast
+ * - The data will be read from the ethernet
+ *
+ * \section gmac_basic_use_case_setup Setup steps
+ *
+ * \subsection gmac_basic_use_case_setup_prereq Prerequisites
+ * -# \ref sysclk_group "System Clock Management (sysclock)"
+ * -# \ref pmc_group "Power Management Controller (pmc)"
+ * -# \ref ksz8051mnl_ethernet_phy_group "PHY component (KSZ8051MNL)"
+ *
+ * \subsection gmac_basic_use_case_setup_code Example code
+ * Content of conf_eth.h
+ * \code
+ * #define GMAC_RX_BUFFERS                               16
+ * #define GMAC_TX_BUFFERS                               8
+ * #define MAC_PHY_RETRY_MAX                             1000000
+ * #define ETHERNET_CONF_ETHADDR0                        0x00
+ * #define ETHERNET_CONF_ETHADDR0                        0x00
+ * #define ETHERNET_CONF_ETHADDR1                        0x04
+ * #define ETHERNET_CONF_ETHADDR2                        0x25
+ * #define ETHERNET_CONF_ETHADDR3                        0x1C
+ * #define ETHERNET_CONF_ETHADDR4                        0xA0
+ * #define ETHERNET_CONF_ETHADDR5                        0x02
+ * #define ETHERNET_CONF_IPADDR0                         192
+ * #define ETHERNET_CONF_IPADDR1                         168
+ * #define ETHERNET_CONF_IPADDR2                         0
+ * #define ETHERNET_CONF_IPADDR3                         2
+ * #define ETHERNET_CONF_GATEWAY_ADDR0                   192
+ * #define ETHERNET_CONF_GATEWAY_ADDR1                   168
+ * #define ETHERNET_CONF_GATEWAY_ADDR2                   0
+ * #define ETHERNET_CONF_GATEWAY_ADDR3                   1
+ * #define ETHERNET_CONF_NET_MASK0                       255
+ * #define ETHERNET_CONF_NET_MASK1                       255
+ * #define ETHERNET_CONF_NET_MASK2                       255
+ * #define ETHERNET_CONF_NET_MASK3                       0
+ * #define ETH_PHY_MODE                                  ETH_PHY_MODE
+ * \endcode
+ *
+ * A specific gmac device and the receive data buffer must be defined; another ul_frm_size should be defined
+ * to trace the actual size of the data received.
+ * \code
+ * static gmac_device_t gs_gmac_dev;
+ * static volatile uint8_t gs_uc_eth_buffer[GMAC_FRAME_LENTGH_MAX];
+ *
+ * uint32_t ul_frm_size;
+ * \endcode
+ *
+ * Add to application C-file:
+ * \code
+ *   void gmac_init(void)
+ *   {
+ *       sysclk_init();
+ *
+ *       board_init();
+ *
+ *       pmc_enable_periph_clk(ID_GMAC);
+ *
+ *       gmac_option.uc_copy_all_frame = 0;
+ *       gmac_option.uc_no_boardcast = 0;
+ *       memcpy(gmac_option.uc_mac_addr, gs_uc_mac_address, sizeof(gs_uc_mac_address));
+ *       gs_gmac_dev.p_hw = GMAC;
+ *
+ *       gmac_dev_init(GMAC, &gs_gmac_dev, &gmac_option);
+ *
+ *       NVIC_EnableIRQ(GMAC_IRQn);
+ *
+ *       ethernet_phy_init(GMAC, BOARD_GMAC_PHY_ADDR, sysclk_get_cpu_hz());
+ *
+ *       ethernet_phy_auto_negotiate(GMAC, BOARD_GMAC_PHY_ADDR);
+ *
+ *       ethernet_phy_set_link(GMAC, BOARD_GMAC_PHY_ADDR, 1);
+ * \endcode
+ *
+ * \subsection gmac_basic_use_case_setup_flow Workflow
+ * - Ensure that conf_eth.h is present and contains the
+ * following configuration symbol. This configuration file is used
+ * by the driver and should not be included by the application.
+ * -# Define the receiving buffer size used in the internal GMAC driver.
+ * The buffer size used for RX is GMAC_RX_BUFFERS * 128.
+ * If it was supposed receiving a large number of frame, the
+ * GMAC_RX_BUFFERS should be set higher. E.g., the application wants to accept
+ * a ping echo test of 2048, the GMAC_RX_BUFFERS should be set at least
+ * (2048/128)=16, and as there are additional frames coming, a preferred
+ * number is 24 depending on a normal Ethernet throughput.
+ *   - \code
+ *        #define GMAC_RX_BUFFERS                               16
+ *   \endcode
+ * -# Define the transmitting buffer size used in the internal GMAC driver.
+ * The buffer size used for TX is GMAC_TX_BUFFERS * 1518.
+ *   - \code
+ *        #define GMAC_TX_BUFFERS                               8
+ *   \endcode
+ * -# Define maximum retry time for a PHY read/write operation.
+ *   - \code
+ *        #define MAC_PHY_RETRY_MAX                             1000000
+ *   \endcode
+ * -# Define the MAC address. 00:04:25:1C:A0:02 is the address reserved
+ * for ATMEL, application should always change this address to its' own.
+ *   - \code
+ *        #define ETHERNET_CONF_ETHADDR0                        0x00
+ *        #define ETHERNET_CONF_ETHADDR1                        0x04
+ *        #define ETHERNET_CONF_ETHADDR2                        0x25
+ *        #define ETHERNET_CONF_ETHADDR3                        0x1C
+ *        #define ETHERNET_CONF_ETHADDR4                        0xA0
+ *        #define ETHERNET_CONF_ETHADDR5                        0x02
+ *   \endcode
+ * -# Define the IP address configration used in the application. When DHCP
+ *  is enabled, this configuration is not effected.
+ *   - \code
+ *        #define ETHERNET_CONF_IPADDR0                         192
+ *        #define ETHERNET_CONF_IPADDR1                         168
+ *        #define ETHERNET_CONF_IPADDR2                         0
+ *        #define ETHERNET_CONF_IPADDR3                         2
+ *        #define ETHERNET_CONF_GATEWAY_ADDR0                   192
+ *        #define ETHERNET_CONF_GATEWAY_ADDR1                   168
+ *        #define ETHERNET_CONF_GATEWAY_ADDR2                   0
+ *        #define ETHERNET_CONF_GATEWAY_ADDR3                   1
+ *        #define ETHERNET_CONF_NET_MASK0                       255
+ *        #define ETHERNET_CONF_NET_MASK1                       255
+ *        #define ETHERNET_CONF_NET_MASK2                       255
+ *        #define ETHERNET_CONF_NET_MASK3                       0
+ *   \endcode
+ * -# Configure the PHY maintainance interface.
+ *   - \code
+ *        #define ETH_PHY_MODE                                  GMAC_PHY_MII
+ *   \endcode
+ * -# Enable the system clock:
+ *   - \code sysclk_init(); \endcode
+ * -# Enable PIO configurations for GMAC:
+ *   - \code board_init(); \endcode
+ * -# Enable PMC clock for GMAC:
+ *   - \code pmc_enable_periph_clk(ID_GMAC); \endcode
+ * -# Set the GMAC options; it's set to copy all frame and support broadcast:
+ *   - \code
+ *         gmac_option.uc_copy_all_frame = 0;
+ *         gmac_option.uc_no_boardcast = 0;
+ *         memcpy(gmac_option.uc_mac_addr, gs_uc_mac_address, sizeof(gs_uc_mac_address));
+ *         gs_gmac_dev.p_hw = GMAC;
+ * \endcode
+ * -# Initialize GMAC device with the filled option:
+ *   - \code
+ *         gmac_dev_init(GMAC, &gs_gmac_dev, &gmac_option);
+ * \endcode
+ * -# Enable the interrupt service for GMAC:
+ *   - \code
+ *         NVIC_EnableIRQ(GMAC_IRQn);
+ * \endcode
+ * -# Initialize the PHY component:
+ *   - \code
+ *         ethernet_phy_init(GMAC, BOARD_GMAC_PHY_ADDR, sysclk_get_cpu_hz());
+ * \endcode
+  * -# The link will be established based on auto negotiation.
+ *   - \code
+ *         ethernet_phy_auto_negotiate(GMAC, BOARD_GMAC_PHY_ADDR);
+ * \endcode
+ * -# Establish the ethernet link; the network can be worked from now on:
+ *   - \code
+ *         ethernet_phy_set_link(GMAC, BOARD_GMAC_PHY_ADDR, 1);
+ * \endcode
+ *
+ * \section gmac_basic_use_case_usage Usage steps
+ * \subsection gmac_basic_use_case_usage_code Example code
+ * Add to, e.g., main loop in application C-file:
+ * \code
+ *    gmac_dev_read(&gs_gmac_dev, (uint8_t *) gs_uc_eth_buffer, sizeof(gs_uc_eth_buffer), &ul_frm_size));
+ * \endcode
+ *
+ * \subsection gmac_basic_use_case_usage_flow Workflow
+ * -# Start reading the data from the ethernet:
+ *   - \code gmac_dev_read(&gs_gmac_dev, (uint8_t *) gs_uc_eth_buffer, sizeof(gs_uc_eth_buffer), &ul_frm_size)); \endcode
+ */
+
+#      define GMAC_STATS 0
+
+#if( GMAC_STATS != 0 )
+
+       /* Here below some code to study the types and
+       frequencies of  GMAC interrupts. */
+       #define GMAC_IDX_RXUBR 0
+       #define GMAC_IDX_TUR   1
+       #define GMAC_IDX_RLEX  2
+       #define GMAC_IDX_TFC   3
+       #define GMAC_IDX_RCOMP 4
+       #define GMAC_IDX_TCOMP 5
+       #define GMAC_IDX_ROVR  6
+       #define GMAC_IDX_HRESP 7
+       #define GMAC_IDX_PFNZ  8
+       #define GMAC_IDX_PTZ   9
+
+       struct SGmacStats {
+               unsigned recvCount;
+               unsigned rovrCount;
+               unsigned bnaCount;
+               unsigned sendCount;
+               unsigned sovrCount;
+               unsigned incompCount;
+               unsigned truncCount;
+
+               unsigned intStatus[10];
+       };
+       extern struct SGmacStats gmacStats;
+
+       struct SIntPair {
+               const char *name;
+               unsigned mask;
+               int index;
+       };
+
+       #define MK_PAIR( NAME )   #NAME, GMAC_IER_##NAME, GMAC_IDX_##NAME
+       static const struct SIntPair intPairs[] = {
+               { MK_PAIR( RXUBR ) }, /* Enable receive used bit read interrupt. */
+               { MK_PAIR( TUR   ) }, /* Enable transmit underrun interrupt. */
+               { MK_PAIR( RLEX  ) }, /* Enable retry limit  exceeded interrupt. */
+               { MK_PAIR( TFC   ) }, /* Enable transmit buffers exhausted in mid-frame interrupt. */
+               { MK_PAIR( RCOMP ) }, /* Receive complete */
+               { MK_PAIR( TCOMP ) }, /* Enable transmit complete interrupt. */
+               { MK_PAIR( ROVR  ) }, /* Enable receive overrun interrupt. */
+               { MK_PAIR( HRESP ) }, /* Enable Hresp not OK interrupt. */
+               { MK_PAIR( PFNZ  ) }, /* Enable pause frame received interrupt. */
+               { MK_PAIR( PTZ   ) }  /* Enable pause time zero interrupt. */
+       };
+
+       void gmac_show_irq_counts ();
+
+#endif
+
+#endif /* GMAC_H_INCLUDED */
diff --git a/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/Common/phyHandling.c b/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/Common/phyHandling.c
deleted file mode 100644 (file)
index fa76959..0000000
+++ /dev/null
@@ -1,721 +0,0 @@
-/*\r
- * Handling of Ethernet PHY's\r
- * PHY's communicate with an EMAC either through\r
- * a Media-Independent Interface (MII), or a Reduced Media-Independent Interface (RMII).\r
- * The EMAC can poll for PHY ports on 32 different addresses. Each of the PHY ports\r
- * shall be treated independently.\r
- * \r
- */\r
-\r
-/* Standard includes. */\r
-#include <stdint.h>\r
-#include <stdio.h>\r
-#include <stdlib.h>\r
-\r
-/* FreeRTOS includes. */\r
-#include "FreeRTOS.h"\r
-#include "task.h"\r
-#include "queue.h"\r
-#include "semphr.h"\r
-\r
-/* FreeRTOS+TCP includes. */\r
-#include "FreeRTOS_IP.h"\r
-#include "FreeRTOS_Sockets.h"\r
-\r
-#include "phyHandling.h"\r
-\r
-#define phyMIN_PHY_ADDRESS             0\r
-#define phyMAX_PHY_ADDRESS             31\r
-\r
-#if defined( PHY_LS_HIGH_CHECK_TIME_MS ) || defined( PHY_LS_LOW_CHECK_TIME_MS )\r
-       #warning please use the new defines with 'ipconfig' prefix\r
-#endif\r
-\r
-#ifndef        ipconfigPHY_LS_HIGH_CHECK_TIME_MS\r
-       /* Check if the LinkStatus in the PHY is still high after 15 seconds of not\r
-       receiving packets. */\r
-       #define ipconfigPHY_LS_HIGH_CHECK_TIME_MS       15000uL\r
-#endif\r
-\r
-#ifndef        ipconfigPHY_LS_LOW_CHECK_TIME_MS\r
-       /* Check if the LinkStatus in the PHY is still low every second. */\r
-       #define ipconfigPHY_LS_LOW_CHECK_TIME_MS        1000uL\r
-#endif\r
-\r
-/* As the following 3 macro's are OK in most situations, and so they're not\r
-included in 'FreeRTOSIPConfigDefaults.h'.\r
-Users can change their values in the project's 'FreeRTOSIPConfig.h'. */\r
-#ifndef phyPHY_MAX_RESET_TIME_MS\r
-       #define phyPHY_MAX_RESET_TIME_MS                        1000uL\r
-#endif\r
-\r
-#ifndef phyPHY_MAX_NEGOTIATE_TIME_MS\r
-       #define phyPHY_MAX_NEGOTIATE_TIME_MS            3000uL\r
-#endif\r
-\r
-#ifndef phySHORT_DELAY_MS\r
-       #define phySHORT_DELAY_MS                                       50uL\r
-#endif\r
-\r
-/* Naming and numbering of basic PHY registers. */\r
-#define phyREG_00_BMCR                         0x00u   /* Basic Mode Control Register. */\r
-#define phyREG_01_BMSR                         0x01u   /* Basic Mode Status Register. */\r
-#define phyREG_02_PHYSID1                      0x02u   /* PHYS ID 1 */\r
-#define phyREG_03_PHYSID2                      0x03u   /* PHYS ID 2 */\r
-#define phyREG_04_ADVERTISE                    0x04u   /* Advertisement control reg */\r
-\r
-/* Naming and numbering of extended PHY registers. */\r
-#define PHYREG_10_PHYSTS                       0x10u   /* 16 PHY status register Offset */\r
-#define        phyREG_19_PHYCR                         0x19u   /* 25 RW PHY Control Register */\r
-#define        phyREG_1F_PHYSPCS                       0x1Fu   /* 31 RW PHY Special Control Status */\r
-\r
-/* Bit fields for 'phyREG_00_BMCR', the 'Basic Mode Control Register'. */\r
-#define phyBMCR_FULL_DUPLEX                    0x0100u /* Full duplex. */\r
-#define phyBMCR_AN_RESTART                     0x0200u /* Auto negotiation restart. */\r
-#define phyBMCR_ISOLATE                                0x0400u /* 1 = Isolates 0 = Normal operation. */\r
-#define phyBMCR_AN_ENABLE                      0x1000u /* Enable auto negotiation. */\r
-#define phyBMCR_SPEED_100                      0x2000u /* Select 100Mbps. */\r
-#define phyBMCR_RESET                          0x8000u /* Reset the PHY. */\r
-\r
-/* Bit fields for 'phyREG_19_PHYCR', the 'PHY Control Register'. */\r
-#define PHYCR_MDIX_EN                          0x8000u /* Enable Auto MDIX. */\r
-#define PHYCR_MDIX_FORCE                       0x4000u /* Force MDIX crossed. */\r
-\r
-#define phyBMSR_AN_COMPLETE                    0x0020u /* Auto-Negotiation process completed */\r
-\r
-#define phyBMSR_LINK_STATUS                    0x0004u\r
-\r
-#define phyPHYSTS_LINK_STATUS          0x0001u /* PHY Link mask */\r
-#define phyPHYSTS_SPEED_STATUS         0x0002u /* PHY Speed mask */\r
-#define phyPHYSTS_DUPLEX_STATUS                0x0004u /* PHY Duplex mask */\r
-\r
-/* Bit fields for 'phyREG_1F_PHYSPCS\r
-       001 = 10BASE-T half-duplex\r
-       101 = 10BASE-T full-duplex\r
-       010 = 100BASE-TX half-duplex\r
-       110 = 100BASE-TX full-duplex\r
-*/\r
-#define phyPHYSPCS_SPEED_MASK          0x000Cu\r
-#define phyPHYSPCS_SPEED_10                    0x0004u\r
-#define phyPHYSPCS_FULL_DUPLEX         0x0010u\r
-\r
-/*\r
- * Description of all capabilities that can be advertised to\r
- * the peer (usually a switch or router).\r
- */\r
-\r
-#define phyADVERTISE_CSMA                      0x0001u /* Supports IEEE 802.3u: Fast Ethernet at 100 Mbit/s */\r
-#define phyADVERTISE_10HALF                    0x0020u /* Try for 10mbps half-duplex. */\r
-#define phyADVERTISE_10FULL                    0x0040u /* Try for 10mbps full-duplex. */\r
-#define phyADVERTISE_100HALF           0x0080u /* Try for 100mbps half-duplex. */\r
-#define phyADVERTISE_100FULL           0x0100u /* Try for 100mbps full-duplex. */\r
-\r
-#define phyADVERTISE_ALL                       ( phyADVERTISE_10HALF | phyADVERTISE_10FULL | \\r
-                                                                         phyADVERTISE_100HALF | phyADVERTISE_100FULL | \\r
-                                                                         phyADVERTISE_CSMA )\r
-\r
-/* Send a reset command to a set of PHY-ports. */\r
-static uint32_t xPhyReset( EthernetPhy_t *pxPhyObject, uint32_t ulPhyMask );\r
-\r
-static BaseType_t xHas_1F_PHYSPCS( uint32_t ulPhyID )\r
-{\r
-BaseType_t xResult;\r
-\r
-       switch( ulPhyID )\r
-       {\r
-               case PHY_ID_LAN8720:\r
-               case PHY_ID_LAN8742A:\r
-               case PHY_ID_KSZ8041:\r
-/*\r
-               case PHY_ID_KSZ8051: // same ID as 8041\r
-               case PHY_ID_KSZ8081: // same ID as 8041\r
-*/\r
-               case PHY_ID_KSZ8081MNXIA:\r
-\r
-               case PHY_ID_KSZ8863:\r
-               default:\r
-                       /* Most PHY's have a 1F_PHYSPCS */\r
-                       xResult = pdTRUE;\r
-                       break;\r
-               case PHY_ID_DP83848I:\r
-                       xResult = pdFALSE;\r
-                       break;\r
-       }\r
-       return xResult;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static BaseType_t xHas_19_PHYCR( uint32_t ulPhyID )\r
-{\r
-BaseType_t xResult;\r
-\r
-       switch( ulPhyID )\r
-       {\r
-               case PHY_ID_LAN8742A:\r
-               case PHY_ID_DP83848I:\r
-                       xResult = pdTRUE;\r
-                       break;\r
-               default:\r
-                       /* Most PHY's do not have a 19_PHYCR */\r
-                       xResult = pdFALSE;\r
-                       break;\r
-       }\r
-       return xResult;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-/* Initialise the struct and assign a PHY-read and -write function. */\r
-void vPhyInitialise( EthernetPhy_t *pxPhyObject, xApplicationPhyReadHook_t fnPhyRead, xApplicationPhyWriteHook_t fnPhyWrite )\r
-{\r
-       memset( ( void * )pxPhyObject, '\0', sizeof( *pxPhyObject ) );\r
-\r
-       pxPhyObject->fnPhyRead = fnPhyRead;\r
-       pxPhyObject->fnPhyWrite = fnPhyWrite;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-/* Discover all PHY's connected by polling 32 indexes ( zero-based ) */\r
-BaseType_t xPhyDiscover( EthernetPhy_t *pxPhyObject )\r
-{\r
-BaseType_t xPhyAddress;\r
-\r
-       pxPhyObject->xPortCount = 0;\r
-\r
-       for( xPhyAddress = phyMIN_PHY_ADDRESS; xPhyAddress <= phyMAX_PHY_ADDRESS; xPhyAddress++ )\r
-       {\r
-       uint32_t ulLowerID;\r
-\r
-               pxPhyObject->fnPhyRead( xPhyAddress, phyREG_03_PHYSID2, &ulLowerID );\r
-               /* A valid PHY id can not be all zeros or all ones. */\r
-               if( ( ulLowerID != ( uint16_t )~0u )  && ( ulLowerID != ( uint16_t )0u ) )\r
-               {\r
-               uint32_t ulUpperID;\r
-               uint32_t ulPhyID;\r
-\r
-                       pxPhyObject->fnPhyRead( xPhyAddress, phyREG_02_PHYSID1, &ulUpperID );\r
-                       ulPhyID = ( ( ( uint32_t ) ulUpperID ) << 16 ) | ( ulLowerID & 0xFFF0 );\r
-\r
-                       pxPhyObject->ucPhyIndexes[ pxPhyObject->xPortCount ] = xPhyAddress;\r
-                       pxPhyObject->ulPhyIDs[ pxPhyObject->xPortCount ] = ulPhyID;\r
-\r
-                       pxPhyObject->xPortCount++;\r
-\r
-                       /* See if there is more storage space. */\r
-                       if( pxPhyObject->xPortCount == ipconfigPHY_MAX_PORTS )\r
-                       {\r
-                               break;\r
-                       }\r
-               }\r
-       }\r
-       if( pxPhyObject->xPortCount > 0 )\r
-       {\r
-               FreeRTOS_printf( ( "PHY ID %lX\n", pxPhyObject->ulPhyIDs[ 0 ] ) );\r
-       }\r
-\r
-       return pxPhyObject->xPortCount;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-/* Send a reset command to a set of PHY-ports. */\r
-static uint32_t xPhyReset( EthernetPhy_t *pxPhyObject, uint32_t ulPhyMask )\r
-{\r
-uint32_t ulDoneMask, ulConfig;\r
-TickType_t xRemainingTime;\r
-TimeOut_t xTimer;\r
-BaseType_t xPhyIndex;\r
-\r
-       /* A bit-mask of PHY ports that are ready. */\r
-       ulDoneMask = 0ul;\r
-\r
-       /* Set the RESET bits high. */\r
-       for( xPhyIndex = 0; xPhyIndex < pxPhyObject->xPortCount; xPhyIndex++ )\r
-       {\r
-       BaseType_t xPhyAddress = pxPhyObject->ucPhyIndexes[ xPhyIndex ];\r
-\r
-               /* Read Control register. */\r
-               pxPhyObject->fnPhyRead( xPhyAddress, phyREG_00_BMCR, &ulConfig );\r
-               pxPhyObject->fnPhyWrite( xPhyAddress, phyREG_00_BMCR, ulConfig | phyBMCR_RESET );\r
-       }\r
-\r
-       xRemainingTime = ( TickType_t ) pdMS_TO_TICKS( phyPHY_MAX_RESET_TIME_MS );\r
-       vTaskSetTimeOutState( &xTimer );\r
-\r
-       /* The reset should last less than a second. */\r
-       for( ;; )\r
-       {\r
-               for( xPhyIndex = 0; xPhyIndex < pxPhyObject->xPortCount; xPhyIndex++ )\r
-               {\r
-               BaseType_t xPhyAddress = pxPhyObject->ucPhyIndexes[ xPhyIndex ];\r
-\r
-                       pxPhyObject->fnPhyRead( xPhyAddress, phyREG_00_BMCR, &ulConfig );\r
-                       if( ( ulConfig & phyBMCR_RESET ) == 0 )\r
-                       {\r
-                               FreeRTOS_printf( ( "xPhyReset: phyBMCR_RESET %d ready\n", (int)xPhyIndex ) );\r
-                               ulDoneMask |= ( 1ul << xPhyIndex );\r
-                       }\r
-               }\r
-               if( ulDoneMask == ulPhyMask )\r
-               {\r
-                       break;\r
-               }\r
-               if( xTaskCheckForTimeOut( &xTimer, &xRemainingTime ) != pdFALSE )\r
-               {\r
-                       FreeRTOS_printf( ( "xPhyReset: phyBMCR_RESET timed out ( done 0x%02lX )\n", ulDoneMask ) );\r
-                       break;\r
-               }\r
-               /* Block for a while */\r
-               vTaskDelay( pdMS_TO_TICKS( phySHORT_DELAY_MS ) );\r
-       }\r
-\r
-       /* Clear the reset bits. */\r
-       for( xPhyIndex = 0; xPhyIndex < pxPhyObject->xPortCount; xPhyIndex++ )\r
-       {\r
-               if( ( ulDoneMask & ( 1ul << xPhyIndex ) ) == 0uL )\r
-               {\r
-               BaseType_t xPhyAddress = pxPhyObject->ucPhyIndexes[ xPhyIndex ];\r
-\r
-                       /* The reset operation timed out, clear the bit manually. */\r
-                       pxPhyObject->fnPhyRead( xPhyAddress, phyREG_00_BMCR, &ulConfig );\r
-                       pxPhyObject->fnPhyWrite( xPhyAddress, phyREG_00_BMCR, ulConfig & ~phyBMCR_RESET );\r
-               }\r
-       }\r
-\r
-       vTaskDelay( pdMS_TO_TICKS( phySHORT_DELAY_MS ) );\r
-\r
-       return ulDoneMask;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-BaseType_t xPhyConfigure( EthernetPhy_t *pxPhyObject, const PhyProperties_t *pxPhyProperties )\r
-{\r
-uint32_t ulConfig, ulAdvertise;\r
-BaseType_t xPhyIndex;\r
-\r
-       if( pxPhyObject->xPortCount < 1 )\r
-       {\r
-               FreeRTOS_printf( ( "xPhyConfigure: No PHY's detected.\n" ) );\r
-               return -1;\r
-       }\r
-\r
-       /* The expected ID for the 'LAN8742A'  is 0x0007c130. */\r
-       /* The expected ID for the 'LAN8720'   is 0x0007c0f0. */\r
-       /* The expected ID for the 'DP83848I'  is 0x20005C90. */\r
-\r
-    /* Set advertise register. */\r
-       if( ( pxPhyProperties->ucSpeed == ( uint8_t )PHY_SPEED_AUTO ) && ( pxPhyProperties->ucDuplex == ( uint8_t )PHY_DUPLEX_AUTO ) )\r
-       {\r
-               ulAdvertise = phyADVERTISE_ALL;\r
-               /* Reset auto-negotiation capability. */\r
-       }\r
-       else\r
-       {\r
-               /* Always select protocol 802.3u. */\r
-               ulAdvertise = phyADVERTISE_CSMA;\r
-\r
-               if( pxPhyProperties->ucSpeed == ( uint8_t )PHY_SPEED_AUTO )\r
-               {\r
-                       if( pxPhyProperties->ucDuplex == ( uint8_t )PHY_DUPLEX_FULL )\r
-                       {\r
-                               ulAdvertise |= phyADVERTISE_10FULL | phyADVERTISE_100FULL;\r
-                       }\r
-                       else\r
-                       {\r
-                               ulAdvertise |= phyADVERTISE_10HALF | phyADVERTISE_100HALF;\r
-                       }\r
-               }\r
-               else if( pxPhyProperties->ucDuplex == ( uint8_t )PHY_DUPLEX_AUTO )\r
-               {\r
-                       if( pxPhyProperties->ucSpeed == ( uint8_t )PHY_SPEED_10 )\r
-                       {\r
-                               ulAdvertise |= phyADVERTISE_10FULL | phyADVERTISE_10HALF;\r
-                       }\r
-                       else\r
-                       {\r
-                               ulAdvertise |= phyADVERTISE_100FULL | phyADVERTISE_100HALF;\r
-                       }\r
-               }\r
-               else if( pxPhyProperties->ucSpeed == ( uint8_t )PHY_SPEED_100 )\r
-               {\r
-                       if( pxPhyProperties->ucDuplex == ( uint8_t )PHY_DUPLEX_FULL )\r
-                       {\r
-                               ulAdvertise |= phyADVERTISE_100FULL;\r
-                       }\r
-                       else\r
-                       {\r
-                               ulAdvertise |= phyADVERTISE_100HALF;\r
-                       }\r
-               }\r
-               else\r
-               {\r
-                       if( pxPhyProperties->ucDuplex == ( uint8_t )PHY_DUPLEX_FULL )\r
-                       {\r
-                               ulAdvertise |= phyADVERTISE_10FULL;\r
-                       }\r
-                       else\r
-                       {\r
-                               ulAdvertise |= phyADVERTISE_10HALF;\r
-                       }\r
-               }\r
-       }\r
-\r
-       /* Send a reset command to a set of PHY-ports. */\r
-       xPhyReset( pxPhyObject, xPhyGetMask( pxPhyObject ) );\r
-\r
-       for( xPhyIndex = 0; xPhyIndex < pxPhyObject->xPortCount; xPhyIndex++ )\r
-       {\r
-       BaseType_t xPhyAddress = pxPhyObject->ucPhyIndexes[ xPhyIndex ];\r
-       uint32_t ulPhyID = pxPhyObject->ulPhyIDs[ xPhyIndex ];\r
-\r
-               /* Write advertise register. */\r
-               pxPhyObject->fnPhyWrite( xPhyAddress, phyREG_04_ADVERTISE, ulAdvertise );\r
-\r
-               /*\r
-                               AN_EN        AN1         AN0       Forced Mode\r
-                                 0           0           0        10BASE-T, Half-Duplex\r
-                                 0           0           1        10BASE-T, Full-Duplex\r
-                                 0           1           0        100BASE-TX, Half-Duplex\r
-                                 0           1           1        100BASE-TX, Full-Duplex\r
-                               AN_EN        AN1         AN0       Advertised Mode\r
-                                 1           0           0        10BASE-T, Half/Full-Duplex\r
-                                 1           0           1        100BASE-TX, Half/Full-Duplex\r
-                                 1           1           0        10BASE-T Half-Duplex\r
-                                                                                                  100BASE-TX, Half-Duplex\r
-                                 1           1           1        10BASE-T, Half/Full-Duplex\r
-                                                                                                  100BASE-TX, Half/Full-Duplex\r
-               */\r
-\r
-               /* Read Control register. */\r
-               pxPhyObject->fnPhyRead( xPhyAddress, phyREG_00_BMCR, &ulConfig );\r
-\r
-               ulConfig &= ~( phyBMCR_SPEED_100 | phyBMCR_FULL_DUPLEX );\r
-\r
-               ulConfig |= phyBMCR_AN_ENABLE;\r
-\r
-               if( ( pxPhyProperties->ucSpeed == ( uint8_t )PHY_SPEED_100 ) || ( pxPhyProperties->ucSpeed == ( uint8_t )PHY_SPEED_AUTO ) )\r
-               {\r
-                       ulConfig |= phyBMCR_SPEED_100;\r
-               }\r
-               else if( pxPhyProperties->ucSpeed == ( uint8_t )PHY_SPEED_10 )\r
-               {\r
-                       ulConfig &= ~phyBMCR_SPEED_100;\r
-               }\r
-\r
-               if( ( pxPhyProperties->ucDuplex == ( uint8_t )PHY_DUPLEX_FULL ) || ( pxPhyProperties->ucDuplex == ( uint8_t )PHY_DUPLEX_AUTO ) )\r
-               {\r
-                       ulConfig |= phyBMCR_FULL_DUPLEX;\r
-               }\r
-               else if( pxPhyProperties->ucDuplex == ( uint8_t )PHY_DUPLEX_HALF )\r
-               {\r
-                       ulConfig &= ~phyBMCR_FULL_DUPLEX;\r
-               }\r
-\r
-               if( xHas_19_PHYCR( ulPhyID ) )\r
-               {\r
-               uint32_t ulPhyControl;\r
-                       /* Read PHY Control register. */\r
-                       pxPhyObject->fnPhyRead( xPhyAddress, phyREG_19_PHYCR, &ulPhyControl );\r
-\r
-                       /* Clear bits which might get set: */\r
-                       ulPhyControl &= ~( PHYCR_MDIX_EN|PHYCR_MDIX_FORCE );\r
-\r
-                       if( pxPhyProperties->ucMDI_X == PHY_MDIX_AUTO )\r
-                       {\r
-                               ulPhyControl |= PHYCR_MDIX_EN;\r
-                       }\r
-                       else if( pxPhyProperties->ucMDI_X == PHY_MDIX_CROSSED )\r
-                       {\r
-                               /* Force direct link = Use crossed RJ45 cable. */\r
-                               ulPhyControl &= ~PHYCR_MDIX_FORCE;\r
-                       }\r
-                       else\r
-                       {\r
-                               /* Force crossed link = Use direct RJ45 cable. */\r
-                               ulPhyControl |= PHYCR_MDIX_FORCE;\r
-                       }\r
-                       /* update PHY Control Register. */\r
-                       pxPhyObject->fnPhyWrite( xPhyAddress, phyREG_19_PHYCR, ulPhyControl );\r
-               }\r
-\r
-               FreeRTOS_printf( ( "+TCP: advertise: %04lX config %04lX\n", ulAdvertise, ulConfig ) );\r
-       }\r
-\r
-       /* Keep these values for later use. */\r
-       pxPhyObject->ulBCRValue = ulConfig & ~phyBMCR_ISOLATE;\r
-       pxPhyObject->ulACRValue = ulAdvertise;\r
-\r
-       return 0;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-/* xPhyFixedValue(): this function is called in case auto-negotiation is disabled.\r
-The caller has set the values in 'xPhyPreferences' (ucDuplex and ucSpeed).\r
-The PHY register phyREG_00_BMCR will be set for every connected PHY that matches\r
-with ulPhyMask. */\r
-BaseType_t xPhyFixedValue( EthernetPhy_t *pxPhyObject, uint32_t ulPhyMask )\r
-{\r
-BaseType_t xPhyIndex;\r
-uint32_t ulValue, ulBitMask = ( uint32_t )1u;\r
-\r
-       ulValue = ( uint32_t )0u;\r
-\r
-       if( pxPhyObject->xPhyPreferences.ucDuplex == PHY_DUPLEX_FULL )\r
-       {\r
-               ulValue |= phyBMCR_FULL_DUPLEX;\r
-       }\r
-       if( pxPhyObject->xPhyPreferences.ucSpeed == PHY_SPEED_100 )\r
-       {\r
-               ulValue |= phyBMCR_SPEED_100;\r
-       }\r
-\r
-       for( xPhyIndex = 0; xPhyIndex < pxPhyObject->xPortCount; xPhyIndex++, ulBitMask <<= 1 )\r
-       {\r
-               if( ( ulPhyMask & ulBitMask ) != 0lu )\r
-               {\r
-               BaseType_t xPhyAddress = pxPhyObject->ucPhyIndexes[ xPhyIndex ];\r
-\r
-                       /* Enable Auto-Negotiation. */\r
-                       pxPhyObject->fnPhyWrite( xPhyAddress, phyREG_00_BMCR, ulValue );\r
-               }\r
-       }\r
-       return 0;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-/* xPhyStartAutoNegotiation() is the alternative xPhyFixedValue():\r
-It sets the BMCR_AN_RESTART bit and waits for the auto-negotiation completion\r
-( phyBMSR_AN_COMPLETE ). */\r
-BaseType_t xPhyStartAutoNegotiation( EthernetPhy_t *pxPhyObject, uint32_t ulPhyMask )\r
-{\r
-uint32_t xPhyIndex, ulDoneMask, ulBitMask;\r
-uint32_t ulPHYLinkStatus, ulRegValue;\r
-TickType_t xRemainingTime;\r
-TimeOut_t xTimer;\r
-\r
-       if( ulPhyMask == ( uint32_t )0u )\r
-       {\r
-               return 0;\r
-       }\r
-       for( xPhyIndex = 0; xPhyIndex < ( uint32_t ) pxPhyObject->xPortCount; xPhyIndex++ )\r
-       {\r
-               if( ( ulPhyMask & ( 1lu << xPhyIndex ) ) != 0lu )\r
-               {\r
-               BaseType_t xPhyAddress = pxPhyObject->ucPhyIndexes[ xPhyIndex ];\r
-\r
-                       /* Enable Auto-Negotiation. */\r
-                       pxPhyObject->fnPhyWrite( xPhyAddress, phyREG_04_ADVERTISE, pxPhyObject->ulACRValue);\r
-                       pxPhyObject->fnPhyWrite( xPhyAddress, phyREG_00_BMCR, pxPhyObject->ulBCRValue | phyBMCR_AN_RESTART );\r
-               }\r
-       }\r
-       xRemainingTime = ( TickType_t ) pdMS_TO_TICKS( phyPHY_MAX_NEGOTIATE_TIME_MS );\r
-       vTaskSetTimeOutState( &xTimer );\r
-       ulDoneMask = 0;\r
-       /* Wait until the auto-negotiation will be completed */\r
-       for( ;; )\r
-       {\r
-               ulBitMask = ( uint32_t )1u;\r
-               for( xPhyIndex = 0; xPhyIndex < ( uint32_t ) pxPhyObject->xPortCount; xPhyIndex++, ulBitMask <<= 1 )\r
-               {\r
-                       if( ( ulPhyMask & ulBitMask ) != 0lu )\r
-                       {\r
-                               if( ( ulDoneMask & ulBitMask ) == 0lu )\r
-                               {\r
-                               BaseType_t xPhyAddress = pxPhyObject->ucPhyIndexes[ xPhyIndex ];\r
-\r
-                                       pxPhyObject->fnPhyRead( xPhyAddress, phyREG_01_BMSR, &ulRegValue );\r
-                                       if( ( ulRegValue & phyBMSR_AN_COMPLETE ) != 0 )\r
-                                       {\r
-                                               ulDoneMask |= ulBitMask;\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-               if( ulPhyMask == ulDoneMask )\r
-               {\r
-                       break;\r
-               }\r
-               if( xTaskCheckForTimeOut( &xTimer, &xRemainingTime ) != pdFALSE )\r
-               {\r
-                       FreeRTOS_printf( ( "xPhyStartAutoNegotiation: phyBMCR_RESET timed out ( done 0x%02lX )\n", ulDoneMask ) );\r
-                       break;\r
-               }\r
-               vTaskDelay( pdMS_TO_TICKS( phySHORT_DELAY_MS ) );\r
-       }\r
-\r
-       if( ulDoneMask != ( uint32_t)0u )\r
-       {\r
-               ulBitMask = ( uint32_t )1u;\r
-               pxPhyObject->ulLinkStatusMask &= ~( ulDoneMask );\r
-               for( xPhyIndex = 0; xPhyIndex < ( uint32_t ) pxPhyObject->xPortCount; xPhyIndex++, ulBitMask <<= 1 )\r
-               {\r
-               BaseType_t xPhyAddress = pxPhyObject->ucPhyIndexes[ xPhyIndex ];\r
-               uint32_t ulPhyID = pxPhyObject->ulPhyIDs[ xPhyIndex ];\r
-\r
-                       if( ( ulDoneMask & ulBitMask ) == ( uint32_t )0u )\r
-                       {\r
-                               continue;\r
-                       }\r
-\r
-                       /* Clear the 'phyBMCR_AN_RESTART'  bit. */\r
-                       pxPhyObject->fnPhyWrite( xPhyAddress, phyREG_00_BMCR, pxPhyObject->ulBCRValue );\r
-\r
-                       pxPhyObject->fnPhyRead( xPhyAddress, phyREG_01_BMSR, &ulRegValue);\r
-                       if( ( ulRegValue & phyBMSR_LINK_STATUS ) != 0 )\r
-                       {\r
-                               ulPHYLinkStatus |= phyBMSR_LINK_STATUS;\r
-                               pxPhyObject->ulLinkStatusMask |= ulBitMask;\r
-                       }\r
-                       else\r
-                       {\r
-                               ulPHYLinkStatus &= ~( phyBMSR_LINK_STATUS );\r
-                       }\r
-\r
-                       if( ulPhyID == PHY_ID_KSZ8081MNXIA )\r
-                       {\r
-                       uint32_t ulControlStatus;\r
-\r
-                               pxPhyObject->fnPhyRead( xPhyAddress, 0x1E, &ulControlStatus);\r
-                               switch( ulControlStatus & 0x07 )\r
-                               {\r
-                               case 0x01:\r
-                               case 0x05:\r
-//     [001] = 10BASE-T half-duplex\r
-//     [101] = 10BASE-T full-duplex\r
-                                       /* 10 Mbps. */\r
-                                       ulRegValue |= phyPHYSTS_SPEED_STATUS;\r
-                                       break;\r
-                               case 0x02:\r
-                               case 0x06:\r
-//     [010] = 100BASE-TX half-duplex\r
-//     [110] = 100BASE-TX full-duplex\r
-                                       break;\r
-                               }\r
-                               switch( ulControlStatus & 0x07 )\r
-                               {\r
-                               case 0x05:\r
-                               case 0x06:\r
-//     [101] = 10BASE-T full-duplex\r
-//     [110] = 100BASE-TX full-duplex\r
-                                       /* Full duplex. */\r
-                                       ulRegValue |= phyPHYSTS_DUPLEX_STATUS;\r
-                                       break;\r
-                               case 0x01:\r
-                               case 0x02:\r
-//     [001] = 10BASE-T half-duplex\r
-//     [010] = 100BASE-TX half-duplex\r
-                                       break;\r
-                               }\r
-                       }\r
-                       else if( xHas_1F_PHYSPCS( ulPhyID ) )\r
-                       {\r
-                       /* 31 RW PHY Special Control Status */\r
-                       uint32_t ulControlStatus;\r
-\r
-                               pxPhyObject->fnPhyRead( xPhyAddress, phyREG_1F_PHYSPCS, &ulControlStatus);\r
-                               ulRegValue = 0;\r
-                               if( ( ulControlStatus & phyPHYSPCS_FULL_DUPLEX ) != 0 )\r
-                               {\r
-                                       ulRegValue |= phyPHYSTS_DUPLEX_STATUS;\r
-                               }\r
-                               if( ( ulControlStatus & phyPHYSPCS_SPEED_MASK ) == phyPHYSPCS_SPEED_10 )\r
-                               {\r
-                                       ulRegValue |= phyPHYSTS_SPEED_STATUS;\r
-                               }\r
-                       }\r
-                       else\r
-                       {\r
-                               /* Read the result of the auto-negotiation. */\r
-                               pxPhyObject->fnPhyRead( xPhyAddress, PHYREG_10_PHYSTS, &ulRegValue);\r
-                       }\r
-\r
-                       FreeRTOS_printf( ( "Autonego ready: %08lx: %s duplex %u mbit %s status\n",\r
-                               ulRegValue,\r
-                               ( ulRegValue & phyPHYSTS_DUPLEX_STATUS ) ? "full" : "half",\r
-                               ( ulRegValue & phyPHYSTS_SPEED_STATUS ) ? 10 : 100,\r
-                               ( ( ulPHYLinkStatus |= phyBMSR_LINK_STATUS ) != 0) ? "high" : "low" ) );\r
-                       if( ( ulRegValue & phyPHYSTS_DUPLEX_STATUS ) != ( uint32_t )0u )\r
-                       {\r
-                               pxPhyObject->xPhyProperties.ucDuplex = PHY_DUPLEX_FULL;\r
-                       }\r
-                       else\r
-                       {\r
-                               pxPhyObject->xPhyProperties.ucDuplex = PHY_DUPLEX_HALF;\r
-                       }\r
-\r
-                       if( ( ulRegValue & phyPHYSTS_SPEED_STATUS ) != 0 )\r
-                       {\r
-                               pxPhyObject->xPhyProperties.ucSpeed = PHY_SPEED_10;\r
-                       }\r
-                       else\r
-                       {\r
-                               pxPhyObject->xPhyProperties.ucSpeed = PHY_SPEED_100;\r
-                       }\r
-               }\r
-       }       /* if( ulDoneMask != ( uint32_t)0u ) */\r
-\r
-       return 0;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-BaseType_t xPhyCheckLinkStatus( EthernetPhy_t *pxPhyObject, BaseType_t xHadReception )\r
-{\r
-uint32_t ulStatus, ulBitMask = 1u;\r
-BaseType_t xPhyIndex;\r
-BaseType_t xNeedCheck = pdFALSE;\r
-\r
-       if( xHadReception > 0 )\r
-       {\r
-               /* A packet was received. No need to check for the PHY status now,\r
-               but set a timer to check it later on. */\r
-               vTaskSetTimeOutState( &( pxPhyObject->xLinkStatusTimer ) );\r
-               pxPhyObject->xLinkStatusRemaining = pdMS_TO_TICKS( ipconfigPHY_LS_HIGH_CHECK_TIME_MS );\r
-               for( xPhyIndex = 0; xPhyIndex < pxPhyObject->xPortCount; xPhyIndex++, ulBitMask <<= 1 )\r
-               {\r
-                       if( ( pxPhyObject->ulLinkStatusMask & ulBitMask ) == 0ul )\r
-                       {\r
-                               pxPhyObject->ulLinkStatusMask |= ulBitMask;\r
-                               FreeRTOS_printf( ( "xPhyCheckLinkStatus: PHY LS now %02lX\n", pxPhyObject->ulLinkStatusMask ) );\r
-                               xNeedCheck = pdTRUE;\r
-                       }\r
-               }\r
-       }\r
-       else if( xTaskCheckForTimeOut( &( pxPhyObject->xLinkStatusTimer ), &( pxPhyObject->xLinkStatusRemaining ) ) != pdFALSE )\r
-       {\r
-               /* Frequent checking the PHY Link Status can affect for the performance of Ethernet controller.\r
-               As long as packets are received, no polling is needed.\r
-               Otherwise, polling will be done when the 'xLinkStatusTimer' expires. */\r
-               for( xPhyIndex = 0; xPhyIndex < pxPhyObject->xPortCount; xPhyIndex++, ulBitMask <<= 1 )\r
-               {\r
-               BaseType_t xPhyAddress = pxPhyObject->ucPhyIndexes[ xPhyIndex ];\r
-\r
-                       if( pxPhyObject->fnPhyRead( xPhyAddress, phyREG_01_BMSR, &ulStatus ) == 0 )\r
-                       {\r
-                               if( !!( pxPhyObject->ulLinkStatusMask & ulBitMask ) != !!( ulStatus & phyBMSR_LINK_STATUS ) )\r
-                               {\r
-                                       if( ( ulStatus & phyBMSR_LINK_STATUS ) != 0 )\r
-                                       {\r
-                                               pxPhyObject->ulLinkStatusMask |= ulBitMask;\r
-                                       }\r
-                                       else\r
-                                       {\r
-                                               pxPhyObject->ulLinkStatusMask &= ~( ulBitMask );\r
-                                       }\r
-                                       FreeRTOS_printf( ( "xPhyCheckLinkStatus: PHY LS now %02lX\n", pxPhyObject->ulLinkStatusMask ) );\r
-                                       xNeedCheck = pdTRUE;\r
-                               }\r
-                       }\r
-               }\r
-               vTaskSetTimeOutState( &( pxPhyObject->xLinkStatusTimer ) );\r
-               if( ( pxPhyObject->ulLinkStatusMask & phyBMSR_LINK_STATUS ) != 0 )\r
-               {\r
-                       /* The link status is high, so don't poll the PHY too often. */\r
-                       pxPhyObject->xLinkStatusRemaining = pdMS_TO_TICKS( ipconfigPHY_LS_HIGH_CHECK_TIME_MS );\r
-               }\r
-               else\r
-               {\r
-                       /* The link status is low, polling may be done more frequently. */\r
-                       pxPhyObject->xLinkStatusRemaining = pdMS_TO_TICKS( ipconfigPHY_LS_LOW_CHECK_TIME_MS );\r
-               }\r
-       }\r
-       return xNeedCheck;\r
-}\r
-/*-----------------------------------------------------------*/\r
index e0d04e45472b3eba6fb5de15bae301774ce725e0..7cee711cd3dc89132c114b5554820808640bd1f4 100644 (file)
-/*\r
-FreeRTOS+TCP V2.0.11\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://aws.amazon.com/freertos\r
- http://www.FreeRTOS.org\r
-*/\r
-\r
-/* Standard includes. */\r
-#include <stdint.h>\r
-\r
-/* FreeRTOS includes. */\r
-#include "FreeRTOS.h"\r
-#include "task.h"\r
-#include "queue.h"\r
-#include "semphr.h"\r
-\r
-/* Hardware abstraction. */\r
-#include "FreeRTOS_IO.h"\r
-\r
-/* FreeRTOS+TCP includes. */\r
-#include "FreeRTOS_UDP_IP.h"\r
-#include "FreeRTOS_Sockets.h"\r
-#include "NetworkBufferManagement.h"\r
-\r
-/* Driver includes. */\r
-#include "lpc17xx_emac.h"\r
-#include "lpc17xx_pinsel.h"\r
-\r
-/* Demo includes. */\r
-#include "NetworkInterface.h"\r
-\r
-#if ipconfigETHERNET_DRIVER_FILTERS_FRAME_TYPES != 1\r
-       #define ipCONSIDER_FRAME_FOR_PROCESSING( pucEthernetBuffer ) eProcessBuffer\r
-#else\r
-       #define ipCONSIDER_FRAME_FOR_PROCESSING( pucEthernetBuffer ) eConsiderFrameForProcessing( ( pucEthernetBuffer ) )\r
-#endif\r
-\r
-/* When a packet is ready to be sent, if it cannot be sent immediately then the\r
-task performing the transmit will block for niTX_BUFFER_FREE_WAIT\r
-milliseconds.  It will do this a maximum of niMAX_TX_ATTEMPTS before giving\r
-up. */\r
-#define niTX_BUFFER_FREE_WAIT  ( pdMS_TO_TICKS( 2UL ) )\r
-#define niMAX_TX_ATTEMPTS              ( 5 )\r
-\r
-/* The length of the queue used to send interrupt status words from the\r
-interrupt handler to the deferred handler task. */\r
-#define niINTERRUPT_QUEUE_LENGTH       ( 10 )\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-/*\r
- * A deferred interrupt handler task that processes\r
- */\r
-static void prvEMACHandlerTask( void *pvParameters );\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-/* The queue used to communicate Ethernet events with the IP task. */\r
-extern QueueHandle_t xNetworkEventQueue;\r
-\r
-/* The semaphore used to wake the deferred interrupt handler task when an Rx\r
-interrupt is received. */\r
-static SemaphoreHandle_t xEMACRxEventSemaphore = NULL;\r
-/*-----------------------------------------------------------*/\r
-\r
-BaseType_t xNetworkInterfaceInitialise( void )\r
-{\r
-EMAC_CFG_Type Emac_Config;\r
-PINSEL_CFG_Type xPinConfig;\r
-BaseType_t xStatus, xReturn;\r
-extern uint8_t ucMACAddress[ 6 ];\r
-\r
-       /* Enable Ethernet Pins */\r
-       boardCONFIGURE_ENET_PINS( xPinConfig );\r
-\r
-       Emac_Config.Mode = EMAC_MODE_AUTO;\r
-       Emac_Config.pbEMAC_Addr = ucMACAddress;\r
-       xStatus = EMAC_Init( &Emac_Config );\r
-\r
-       LPC_EMAC->IntEnable &= ~( EMAC_INT_TX_DONE );\r
-\r
-       if( xStatus != ERROR )\r
-       {\r
-               vSemaphoreCreateBinary( xEMACRxEventSemaphore );\r
-               configASSERT( xEMACRxEventSemaphore );\r
-\r
-               /* The handler task is created at the highest possible priority to\r
-               ensure the interrupt handler can return directly to it. */\r
-               xTaskCreate( prvEMACHandlerTask, "EMAC", configMINIMAL_STACK_SIZE, NULL, configMAX_PRIORITIES - 1, NULL );\r
-\r
-               /* Enable the interrupt and set its priority to the minimum\r
-               interrupt priority.  */\r
-               NVIC_SetPriority( ENET_IRQn, configMAC_INTERRUPT_PRIORITY );\r
-               NVIC_EnableIRQ( ENET_IRQn );\r
-\r
-               xReturn = pdPASS;\r
-       }\r
-       else\r
-       {\r
-               xReturn = pdFAIL;\r
-       }\r
-\r
-       configASSERT( xStatus != ERROR );\r
-\r
-       return xReturn;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-BaseType_t xNetworkInterfaceOutput( NetworkBufferDescriptor_t * const pxNetworkBuffer )\r
-{\r
-BaseType_t xReturn = pdFAIL;\r
-int32_t x;\r
-extern void EMAC_StartTransmitNextBuffer( uint32_t ulLength );\r
-extern void EMAC_SetNextPacketToSend( uint8_t * pucBuffer );\r
-\r
-\r
-       /* Attempt to obtain access to a Tx buffer. */\r
-       for( x = 0; x < niMAX_TX_ATTEMPTS; x++ )\r
-       {\r
-               if( EMAC_CheckTransmitIndex() == TRUE )\r
-               {\r
-                       /* Will the data fit in the Tx buffer? */\r
-                       if( pxNetworkBuffer->xDataLength < EMAC_ETH_MAX_FLEN ) /*_RB_ The size needs to come from FreeRTOSIPConfig.h. */\r
-                       {\r
-                               /* Assign the buffer to the Tx descriptor that is now known to\r
-                               be free. */\r
-                               EMAC_SetNextPacketToSend( pxNetworkBuffer->pucBuffer );\r
-\r
-                               /* The EMAC now owns the buffer. */\r
-                               pxNetworkBuffer->pucBuffer = NULL;\r
-\r
-                               /* Initiate the Tx. */\r
-                               EMAC_StartTransmitNextBuffer( pxNetworkBuffer->xDataLength );\r
-                               iptraceNETWORK_INTERFACE_TRANSMIT();\r
-\r
-                               /* The Tx has been initiated. */\r
-                               xReturn = pdPASS;\r
-                       }\r
-                       break;\r
-               }\r
-               else\r
-               {\r
-                       vTaskDelay( niTX_BUFFER_FREE_WAIT );\r
-               }\r
-       }\r
-\r
-       /* Finished with the network buffer. */\r
-       vReleaseNetworkBufferAndDescriptor( pxNetworkBuffer );\r
-\r
-       return xReturn;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-void ENET_IRQHandler( void )\r
-{\r
-uint32_t ulInterruptCause;\r
-\r
-       while( ( ulInterruptCause = LPC_EMAC->IntStatus ) != 0 )\r
-       {\r
-               /* Clear the interrupt. */\r
-               LPC_EMAC->IntClear = ulInterruptCause;\r
-\r
-               /* Clear fatal error conditions.  NOTE:  The driver does not clear all\r
-               errors, only those actually experienced.  For future reference, range\r
-               errors are not actually errors so can be ignored. */\r
-               if( ( ulInterruptCause & EMAC_INT_TX_UNDERRUN ) != 0U )\r
-               {\r
-                       LPC_EMAC->Command |= EMAC_CR_TX_RES;\r
-               }\r
-\r
-               /* Unblock the deferred interrupt handler task if the event was an\r
-               Rx. */\r
-               if( ( ulInterruptCause & EMAC_INT_RX_DONE ) != 0UL )\r
-               {\r
-                       xSemaphoreGiveFromISR( xEMACRxEventSemaphore, NULL );\r
-               }\r
-       }\r
-\r
-       /* ulInterruptCause is used for convenience here.  A context switch is\r
-       wanted, but coding portEND_SWITCHING_ISR( 1 ) would likely result in a\r
-       compiler warning. */\r
-       portEND_SWITCHING_ISR( ulInterruptCause );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvEMACHandlerTask( void *pvParameters )\r
-{\r
-size_t xDataLength;\r
-const uint16_t usCRCLength = 4;\r
-NetworkBufferDescriptor_t *pxNetworkBuffer;\r
-IPStackEvent_t xRxEvent = { eNetworkRxEvent, NULL };\r
-\r
-/* This is not included in the header file for some reason. */\r
-extern uint8_t *EMAC_NextPacketToRead( void );\r
-\r
-       ( void ) pvParameters;\r
-       configASSERT( xEMACRxEventSemaphore );\r
-\r
-       for( ;; )\r
-       {\r
-               /* Wait for the EMAC interrupt to indicate that another packet has been\r
-               received.  The while() loop is only needed if INCLUDE_vTaskSuspend is\r
-               set to 0 in FreeRTOSConfig.h. */\r
-               while( xSemaphoreTake( xEMACRxEventSemaphore, portMAX_DELAY ) == pdFALSE );\r
-\r
-               /* At least one packet has been received. */\r
-               while( EMAC_CheckReceiveIndex() != FALSE )\r
-               {\r
-                       /* Obtain the length, minus the CRC.  The CRC is four bytes\r
-                       but the length is already minus 1. */\r
-                       xDataLength = ( size_t ) EMAC_GetReceiveDataSize() - ( usCRCLength - 1U );\r
-\r
-                       if( xDataLength > 0U )\r
-                       {\r
-                               /* Obtain a network buffer to pass this data into the\r
-                               stack.  No storage is required as the network buffer\r
-                               will point directly to the buffer that already holds\r
-                               the     received data. */\r
-                               pxNetworkBuffer = pxGetNetworkBufferWithDescriptor( 0, ( TickType_t ) 0 );\r
-\r
-                               if( pxNetworkBuffer != NULL )\r
-                               {\r
-                                       pxNetworkBuffer->pucBuffer = EMAC_NextPacketToRead();\r
-                                       pxNetworkBuffer->xDataLength = xDataLength;\r
-                                       xRxEvent.pvData = ( void * ) pxNetworkBuffer;\r
-\r
-                                       /* Data was received and stored.  Send a message to the IP\r
-                                       task to let it know. */\r
-                                       if( xSendEventStructToIPTask( &xRxEvent, ( TickType_t ) 0 ) == pdFAIL )\r
-                                       {\r
-                                               vReleaseNetworkBufferAndDescriptor( pxNetworkBuffer );\r
-                                               iptraceETHERNET_RX_EVENT_LOST();\r
-                                       }\r
-                               }\r
-                               else\r
-                               {\r
-                                       iptraceETHERNET_RX_EVENT_LOST();\r
-                               }\r
-\r
-                               iptraceNETWORK_INTERFACE_RECEIVE();\r
-                       }\r
-\r
-                       /* Release the frame. */\r
-                       EMAC_UpdateRxConsumeIndex();\r
-               }\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
+/*
+FreeRTOS+TCP V2.0.11
+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
+*/
+
+/* Standard includes. */
+#include <stdint.h>
+
+/* FreeRTOS includes. */
+#include "FreeRTOS.h"
+#include "task.h"
+#include "queue.h"
+#include "semphr.h"
+
+/* Hardware abstraction. */
+#include "FreeRTOS_IO.h"
+
+/* FreeRTOS+TCP includes. */
+#include "FreeRTOS_UDP_IP.h"
+#include "FreeRTOS_Sockets.h"
+#include "NetworkBufferManagement.h"
+
+/* Driver includes. */
+#include "lpc17xx_emac.h"
+#include "lpc17xx_pinsel.h"
+
+/* Demo includes. */
+#include "NetworkInterface.h"
+
+#if ipconfigETHERNET_DRIVER_FILTERS_FRAME_TYPES != 1
+       #define ipCONSIDER_FRAME_FOR_PROCESSING( pucEthernetBuffer ) eProcessBuffer
+#else
+       #define ipCONSIDER_FRAME_FOR_PROCESSING( pucEthernetBuffer ) eConsiderFrameForProcessing( ( pucEthernetBuffer ) )
+#endif
+
+/* When a packet is ready to be sent, if it cannot be sent immediately then the
+task performing the transmit will block for niTX_BUFFER_FREE_WAIT
+milliseconds.  It will do this a maximum of niMAX_TX_ATTEMPTS before giving
+up. */
+#define niTX_BUFFER_FREE_WAIT  ( pdMS_TO_TICKS( 2UL ) )
+#define niMAX_TX_ATTEMPTS              ( 5 )
+
+/* The length of the queue used to send interrupt status words from the
+interrupt handler to the deferred handler task. */
+#define niINTERRUPT_QUEUE_LENGTH       ( 10 )
+
+/*-----------------------------------------------------------*/
+
+/*
+ * A deferred interrupt handler task that processes
+ */
+static void prvEMACHandlerTask( void *pvParameters );
+
+/*-----------------------------------------------------------*/
+
+/* The queue used to communicate Ethernet events with the IP task. */
+extern QueueHandle_t xNetworkEventQueue;
+
+/* The semaphore used to wake the deferred interrupt handler task when an Rx
+interrupt is received. */
+static SemaphoreHandle_t xEMACRxEventSemaphore = NULL;
+/*-----------------------------------------------------------*/
+
+BaseType_t xNetworkInterfaceInitialise( void )
+{
+EMAC_CFG_Type Emac_Config;
+PINSEL_CFG_Type xPinConfig;
+BaseType_t xStatus, xReturn;
+extern uint8_t ucMACAddress[ 6 ];
+
+       /* Enable Ethernet Pins */
+       boardCONFIGURE_ENET_PINS( xPinConfig );
+
+       Emac_Config.Mode = EMAC_MODE_AUTO;
+       Emac_Config.pbEMAC_Addr = ucMACAddress;
+       xStatus = EMAC_Init( &Emac_Config );
+
+       LPC_EMAC->IntEnable &= ~( EMAC_INT_TX_DONE );
+
+       if( xStatus != ERROR )
+       {
+               vSemaphoreCreateBinary( xEMACRxEventSemaphore );
+               configASSERT( xEMACRxEventSemaphore );
+
+               /* The handler task is created at the highest possible priority to
+               ensure the interrupt handler can return directly to it. */
+               xTaskCreate( prvEMACHandlerTask, "EMAC", configMINIMAL_STACK_SIZE, NULL, configMAX_PRIORITIES - 1, NULL );
+
+               /* Enable the interrupt and set its priority to the minimum
+               interrupt priority.  */
+               NVIC_SetPriority( ENET_IRQn, configMAC_INTERRUPT_PRIORITY );
+               NVIC_EnableIRQ( ENET_IRQn );
+
+               xReturn = pdPASS;
+       }
+       else
+       {
+               xReturn = pdFAIL;
+       }
+
+       configASSERT( xStatus != ERROR );
+
+       return xReturn;
+}
+/*-----------------------------------------------------------*/
+
+BaseType_t xNetworkInterfaceOutput( NetworkBufferDescriptor_t * const pxNetworkBuffer )
+{
+BaseType_t xReturn = pdFAIL;
+int32_t x;
+extern void EMAC_StartTransmitNextBuffer( uint32_t ulLength );
+extern void EMAC_SetNextPacketToSend( uint8_t * pucBuffer );
+
+
+       /* Attempt to obtain access to a Tx buffer. */
+       for( x = 0; x < niMAX_TX_ATTEMPTS; x++ )
+       {
+               if( EMAC_CheckTransmitIndex() == TRUE )
+               {
+                       /* Will the data fit in the Tx buffer? */
+                       if( pxNetworkBuffer->xDataLength < EMAC_ETH_MAX_FLEN ) /*_RB_ The size needs to come from FreeRTOSIPConfig.h. */
+                       {
+                               /* Assign the buffer to the Tx descriptor that is now known to
+                               be free. */
+                               EMAC_SetNextPacketToSend( pxNetworkBuffer->pucBuffer );
+
+                               /* The EMAC now owns the buffer. */
+                               pxNetworkBuffer->pucBuffer = NULL;
+
+                               /* Initiate the Tx. */
+                               EMAC_StartTransmitNextBuffer( pxNetworkBuffer->xDataLength );
+                               iptraceNETWORK_INTERFACE_TRANSMIT();
+
+                               /* The Tx has been initiated. */
+                               xReturn = pdPASS;
+                       }
+                       break;
+               }
+               else
+               {
+                       vTaskDelay( niTX_BUFFER_FREE_WAIT );
+               }
+       }
+
+       /* Finished with the network buffer. */
+       vReleaseNetworkBufferAndDescriptor( pxNetworkBuffer );
+
+       return xReturn;
+}
+/*-----------------------------------------------------------*/
+
+void ENET_IRQHandler( void )
+{
+uint32_t ulInterruptCause;
+
+       while( ( ulInterruptCause = LPC_EMAC->IntStatus ) != 0 )
+       {
+               /* Clear the interrupt. */
+               LPC_EMAC->IntClear = ulInterruptCause;
+
+               /* Clear fatal error conditions.  NOTE:  The driver does not clear all
+               errors, only those actually experienced.  For future reference, range
+               errors are not actually errors so can be ignored. */
+               if( ( ulInterruptCause & EMAC_INT_TX_UNDERRUN ) != 0U )
+               {
+                       LPC_EMAC->Command |= EMAC_CR_TX_RES;
+               }
+
+               /* Unblock the deferred interrupt handler task if the event was an
+               Rx. */
+               if( ( ulInterruptCause & EMAC_INT_RX_DONE ) != 0UL )
+               {
+                       xSemaphoreGiveFromISR( xEMACRxEventSemaphore, NULL );
+               }
+       }
+
+       /* ulInterruptCause is used for convenience here.  A context switch is
+       wanted, but coding portEND_SWITCHING_ISR( 1 ) would likely result in a
+       compiler warning. */
+       portEND_SWITCHING_ISR( ulInterruptCause );
+}
+/*-----------------------------------------------------------*/
+
+static void prvEMACHandlerTask( void *pvParameters )
+{
+size_t xDataLength;
+const uint16_t usCRCLength = 4;
+NetworkBufferDescriptor_t *pxNetworkBuffer;
+IPStackEvent_t xRxEvent = { eNetworkRxEvent, NULL };
+
+/* This is not included in the header file for some reason. */
+extern uint8_t *EMAC_NextPacketToRead( void );
+
+       ( void ) pvParameters;
+       configASSERT( xEMACRxEventSemaphore );
+
+       for( ;; )
+       {
+               /* Wait for the EMAC interrupt to indicate that another packet has been
+               received.  The while() loop is only needed if INCLUDE_vTaskSuspend is
+               set to 0 in FreeRTOSConfig.h. */
+               while( xSemaphoreTake( xEMACRxEventSemaphore, portMAX_DELAY ) == pdFALSE );
+
+               /* At least one packet has been received. */
+               while( EMAC_CheckReceiveIndex() != FALSE )
+               {
+                       /* Obtain the length, minus the CRC.  The CRC is four bytes
+                       but the length is already minus 1. */
+                       xDataLength = ( size_t ) EMAC_GetReceiveDataSize() - ( usCRCLength - 1U );
+
+                       if( xDataLength > 0U )
+                       {
+                               /* Obtain a network buffer to pass this data into the
+                               stack.  No storage is required as the network buffer
+                               will point directly to the buffer that already holds
+                               the     received data. */
+                               pxNetworkBuffer = pxGetNetworkBufferWithDescriptor( 0, ( TickType_t ) 0 );
+
+                               if( pxNetworkBuffer != NULL )
+                               {
+                                       pxNetworkBuffer->pucBuffer = EMAC_NextPacketToRead();
+                                       pxNetworkBuffer->xDataLength = xDataLength;
+                                       xRxEvent.pvData = ( void * ) pxNetworkBuffer;
+
+                                       /* Data was received and stored.  Send a message to the IP
+                                       task to let it know. */
+                                       if( xSendEventStructToIPTask( &xRxEvent, ( TickType_t ) 0 ) == pdFAIL )
+                                       {
+                                               vReleaseNetworkBufferAndDescriptor( pxNetworkBuffer );
+                                               iptraceETHERNET_RX_EVENT_LOST();
+                                       }
+                               }
+                               else
+                               {
+                                       iptraceETHERNET_RX_EVENT_LOST();
+                               }
+
+                               iptraceNETWORK_INTERFACE_RECEIVE();
+                       }
+
+                       /* Release the frame. */
+                       EMAC_UpdateRxConsumeIndex();
+               }
+       }
+}
+/*-----------------------------------------------------------*/
+
index ac01d41af47d865905094c6edafdaad777c99609..0b1f74d075554b9580f7ca5f489e263c0fff85a9 100644 (file)
-/*\r
-FreeRTOS+TCP V2.0.11\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://aws.amazon.com/freertos\r
- http://www.FreeRTOS.org\r
-*/\r
-\r
-/* Standard includes. */\r
-#include <stdint.h>\r
-#include <stdio.h>\r
-#include <stdlib.h>\r
-\r
-/* FreeRTOS includes. */\r
-#include "FreeRTOS.h"\r
-#include "task.h"\r
-#include "queue.h"\r
-#include "semphr.h"\r
-\r
-/* FreeRTOS+TCP includes. */\r
-#include "FreeRTOS_IP.h"\r
-#include "FreeRTOS_Sockets.h"\r
-#include "FreeRTOS_IP_Private.h"\r
-#include "NetworkBufferManagement.h"\r
-#include "NetworkInterface.h"\r
-\r
-/* LPCOpen includes. */\r
-#include "chip.h"\r
-#include "lpc_phy.h"\r
-\r
-/* The size of the stack allocated to the task that handles Rx packets. */\r
-#define nwRX_TASK_STACK_SIZE   140\r
-\r
-#ifndef        PHY_LS_HIGH_CHECK_TIME_MS\r
-       /* Check if the LinkSStatus in the PHY is still high after 15 seconds of not\r
-       receiving packets. */\r
-       #define PHY_LS_HIGH_CHECK_TIME_MS       15000\r
-#endif\r
-\r
-#ifndef        PHY_LS_LOW_CHECK_TIME_MS\r
-       /* Check if the LinkSStatus in the PHY is still low every second. */\r
-       #define PHY_LS_LOW_CHECK_TIME_MS        1000\r
-#endif\r
-\r
-#ifndef configUSE_RMII\r
-       #define configUSE_RMII 1\r
-#endif\r
-\r
-#ifndef configNUM_RX_DESCRIPTORS\r
-       #error please define configNUM_RX_DESCRIPTORS in your FreeRTOSIPConfig.h\r
-#endif\r
-\r
-#ifndef configNUM_TX_DESCRIPTORS\r
-       #error please define configNUM_TX_DESCRIPTORS in your FreeRTOSIPConfig.h\r
-#endif\r
-\r
-#ifndef NETWORK_IRQHandler\r
-       #error NETWORK_IRQHandler must be defined to the name of the function that is installed in the interrupt vector table to handle Ethernet interrupts.\r
-#endif\r
-\r
-#if !defined( MAC_FF_HMC )\r
-       /* Hash for multicast. */\r
-       #define MAC_FF_HMC     ( 1UL << 2UL )\r
-#endif\r
-\r
-#ifndef iptraceEMAC_TASK_STARTING\r
-       #define iptraceEMAC_TASK_STARTING()     do { } while( 0 )\r
-#endif\r
-\r
-/* Define the bits of .STATUS that indicate a reception error. */\r
-#define nwRX_STATUS_ERROR_BITS \\r
-       ( RDES_CE  /* CRC Error */                        | \\r
-         RDES_RE  /* Receive Error */                    | \\r
-         RDES_DE  /* Descriptor Error */                 | \\r
-         RDES_RWT /* Receive Watchdog Timeout */         | \\r
-         RDES_LC  /* Late Collision */                   | \\r
-         RDES_OE  /* Overflow Error */                   | \\r
-         RDES_SAF /* Source Address Filter Fail */       | \\r
-         RDES_AFM /* Destination Address Filter Fail */  | \\r
-         RDES_LE  /* Length Error */                     )\r
-\r
-/* Define the EMAC status bits that should trigger an interrupt. */\r
-#define nwDMA_INTERRUPT_MASK \\r
-       ( DMA_IE_TIE  /* Transmit interrupt enable */         | \\r
-         DMA_IE_TSE  /* Transmit stopped enable */           | \\r
-         DMA_IE_OVE  /* Overflow interrupt enable */         | \\r
-         DMA_IE_RIE  /* Receive interrupt enable */          | \\r
-         DMA_IE_NIE  /* Normal interrupt summary enable */   | \\r
-         DMA_IE_AIE  /* Abnormal interrupt summary enable */ | \\r
-         DMA_IE_RUE  /* Receive buffer unavailable enable */ | \\r
-         DMA_IE_UNE  /* Underflow interrupt enable. */       | \\r
-         DMA_IE_TJE  /* Transmit jabber timeout enable */    | \\r
-         DMA_IE_RSE  /* Received stopped enable */           | \\r
-         DMA_IE_RWE  /* Receive watchdog timeout enable */   | \\r
-         DMA_IE_FBE )/* Fatal bus error enable */\r
-\r
-/* Interrupt events to process.  Currently only the RX/TX events are processed\r
-although code for other events is included to allow for possible future\r
-expansion. */\r
-#define EMAC_IF_RX_EVENT        1UL\r
-#define EMAC_IF_TX_EVENT        2UL\r
-#define EMAC_IF_ERR_EVENT       4UL\r
-#define EMAC_IF_ALL_EVENT       ( EMAC_IF_RX_EVENT | EMAC_IF_TX_EVENT | EMAC_IF_ERR_EVENT )\r
-\r
- /* If ipconfigETHERNET_DRIVER_FILTERS_FRAME_TYPES is set to 1, then the Ethernet\r
- driver will filter incoming packets and only pass the stack those packets it\r
- considers need processing. */\r
- #if( ipconfigETHERNET_DRIVER_FILTERS_FRAME_TYPES == 0 )\r
-       #define ipCONSIDER_FRAME_FOR_PROCESSING( pucEthernetBuffer ) eProcessBuffer\r
- #else\r
-       #define ipCONSIDER_FRAME_FOR_PROCESSING( pucEthernetBuffer ) eConsiderFrameForProcessing( ( pucEthernetBuffer ) )\r
- #endif\r
-\r
-#if( ipconfigZERO_COPY_RX_DRIVER == 0 ) || ( ipconfigZERO_COPY_TX_DRIVER == 0 )\r
-       #warning It is adviced to enable both macros\r
-#endif\r
-\r
-#ifndef configPLACE_IN_SECTION_RAM\r
-       #define configPLACE_IN_SECTION_RAM\r
-/*\r
-       #define configPLACE_IN_SECTION_RAM      __attribute__ ((section(".ramfunc")))\r
-*/\r
-#endif\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-/*\r
- * Delay function passed into the library.  The implementation uses FreeRTOS\r
- * calls so the scheduler must be started before the driver can be used.\r
- */\r
-static void prvDelay( uint32_t ulMilliSeconds );\r
-\r
-/*\r
- * Initialises the Tx and Rx descriptors respectively.\r
- */\r
-static void prvSetupTxDescriptors( void );\r
-static void prvSetupRxDescriptors( void );\r
-\r
-/*\r
- * A task that processes received frames.\r
- */\r
-static void prvEMACHandlerTask( void *pvParameters );\r
-\r
-/*\r
- * Sets up the MAC with the results of an auto-negotiation.\r
- */\r
-static BaseType_t prvSetLinkSpeed( void );\r
-\r
-/*\r
- * Generates a CRC for a MAC address that is then used to generate a hash index.\r
- */\r
-static uint32_t prvGenerateCRC32( const uint8_t *ucAddress );\r
-\r
-/*\r
- * Generates a hash index when setting a filter to permit a MAC address.\r
- */\r
-static uint32_t prvGetHashIndex( const uint8_t *ucAddress );\r
-\r
-/*\r
- * Update the hash table to allow a MAC address.\r
- */\r
-static void prvAddMACAddress( const uint8_t* ucMacAddress );\r
-\r
-/*\r
- * Sometimes the DMA will report received data as being longer than the actual\r
- * received from length.  This function checks the reported length and corrects\r
- * if if necessary.\r
- */\r
-static void prvRemoveTrailingBytes( NetworkBufferDescriptor_t *pxDescriptor );\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-/* Bit map of outstanding ETH interrupt events for processing.  Currently only\r
-the Rx and Tx interrupt is handled, although code is included for other events\r
-to enable future expansion. */\r
-static volatile uint32_t ulISREvents;\r
-\r
-/* A copy of PHY register 1: 'PHY_REG_01_BMSR' */\r
-static uint32_t ulPHYLinkStatus = 0;\r
-\r
-/* Tx descriptors and index. */\r
-static ENET_ENHTXDESC_T xDMATxDescriptors[ configNUM_TX_DESCRIPTORS ];\r
-\r
-/* ulNextFreeTxDescriptor is declared volatile, because it is accessed from\r
-to different tasks. */\r
-static volatile uint32_t ulNextFreeTxDescriptor;\r
-static uint32_t ulTxDescriptorToClear;\r
-\r
-/* Rx descriptors and index. */\r
-static ENET_ENHRXDESC_T xDMARxDescriptors[ configNUM_RX_DESCRIPTORS ];\r
-static uint32_t ulNextRxDescriptorToProcess;\r
-\r
-/* Must be defined externally - the demo applications define this in main.c. */\r
-extern uint8_t ucMACAddress[ 6 ];\r
-\r
-/* The handle of the task that processes Rx packets.  The handle is required so\r
-the task can be notified when new packets arrive. */\r
-static TaskHandle_t xRxHanderTask = NULL;\r
-\r
-#if( ipconfigUSE_LLMNR == 1 )\r
-       static const uint8_t xLLMNR_MACAddress[] = { '\x01', '\x00', '\x5E', '\x00', '\x00', '\xFC' };\r
-#endif /* ipconfigUSE_LLMNR == 1 */\r
-\r
-/* xTXDescriptorSemaphore is a counting semaphore with\r
-a maximum count of ETH_TXBUFNB, which is the number of\r
-DMA TX descriptors. */\r
-static SemaphoreHandle_t xTXDescriptorSemaphore = NULL;\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-\r
-BaseType_t xNetworkInterfaceInitialise( void )\r
-{\r
-BaseType_t xReturn = pdPASS;\r
-\r
-       /* The interrupt will be turned on when a link is established. */\r
-       NVIC_DisableIRQ( ETHERNET_IRQn );\r
-\r
-       /* Disable receive and transmit DMA processes. */\r
-       LPC_ETHERNET->DMA_OP_MODE &= ~( DMA_OM_ST | DMA_OM_SR );\r
-\r
-       /* Disable packet reception. */\r
-       LPC_ETHERNET->MAC_CONFIG &= ~( MAC_CFG_RE | MAC_CFG_TE );\r
-\r
-       /* Call the LPCOpen function to initialise the hardware. */\r
-       Chip_ENET_Init( LPC_ETHERNET );\r
-\r
-       /* Save MAC address. */\r
-       Chip_ENET_SetADDR( LPC_ETHERNET, ucMACAddress );\r
-\r
-       /* Clear all MAC address hash entries. */\r
-       LPC_ETHERNET->MAC_HASHTABLE_HIGH = 0;\r
-       LPC_ETHERNET->MAC_HASHTABLE_LOW = 0;\r
-\r
-       #if( ipconfigUSE_LLMNR == 1 )\r
-       {\r
-               prvAddMACAddress( xLLMNR_MACAddress );\r
-       }\r
-       #endif /* ipconfigUSE_LLMNR == 1 */\r
-\r
-       /* Promiscuous flag (PR) and Receive All flag (RA) set to zero.  The\r
-       registers MAC_HASHTABLE_[LOW|HIGH] will be loaded to allow certain\r
-       multi-cast addresses. */\r
-       LPC_ETHERNET->MAC_FRAME_FILTER = MAC_FF_HMC;\r
-\r
-       #if( configUSE_RMII == 1 )\r
-       {\r
-               if( lpc_phy_init( pdTRUE, prvDelay ) != SUCCESS )\r
-               {\r
-                       xReturn = pdFAIL;\r
-               }\r
-       }\r
-       #else\r
-       {\r
-               #warning This path has not been tested.\r
-               if( lpc_phy_init( pdFALSE, prvDelay ) != SUCCESS )\r
-               {\r
-                       xReturn = pdFAIL;\r
-               }\r
-       }\r
-       #endif\r
-\r
-       if( xReturn == pdPASS )\r
-       {\r
-               /* Guard against the task being created more than once and the\r
-               descriptors being initialised more than once. */\r
-               if( xRxHanderTask == NULL )\r
-               {\r
-                       xReturn = xTaskCreate( prvEMACHandlerTask, "EMAC", nwRX_TASK_STACK_SIZE, NULL, configMAX_PRIORITIES - 1, &xRxHanderTask );\r
-                       configASSERT( xReturn );\r
-               }\r
-\r
-               if( xTXDescriptorSemaphore == NULL )\r
-               {\r
-                       /* Create a counting semaphore, with a value of 'configNUM_TX_DESCRIPTORS'\r
-                       and a maximum of 'configNUM_TX_DESCRIPTORS'. */\r
-                       xTXDescriptorSemaphore = xSemaphoreCreateCounting( ( UBaseType_t ) configNUM_TX_DESCRIPTORS, ( UBaseType_t ) configNUM_TX_DESCRIPTORS );\r
-                       configASSERT( xTXDescriptorSemaphore );\r
-               }\r
-\r
-               /* Enable MAC interrupts. */\r
-               LPC_ETHERNET->DMA_INT_EN = nwDMA_INTERRUPT_MASK;\r
-       }\r
-\r
-       if( xReturn != pdFAIL )\r
-       {\r
-               /* Auto-negotiate was already started.  Wait for it to complete. */\r
-               xReturn = prvSetLinkSpeed();\r
-\r
-               if( xReturn == pdPASS )\r
-               {\r
-                       /* Initialise the descriptors. */\r
-                       prvSetupTxDescriptors();\r
-                       prvSetupRxDescriptors();\r
-\r
-                       /* Clear all interrupts. */\r
-                       LPC_ETHERNET->DMA_STAT = DMA_ST_ALL;\r
-\r
-                       /* Enable receive and transmit DMA processes. */\r
-                       LPC_ETHERNET->DMA_OP_MODE |= DMA_OM_ST | DMA_OM_SR;\r
-\r
-                       /* Set Receiver / Transmitter Enable. */\r
-                       LPC_ETHERNET->MAC_CONFIG |= MAC_CFG_RE | MAC_CFG_TE;\r
-\r
-                       /* Start receive polling. */\r
-                       LPC_ETHERNET->DMA_REC_POLL_DEMAND = 1;\r
-\r
-                       /* Enable interrupts in the NVIC. */\r
-                       NVIC_SetPriority( ETHERNET_IRQn, configMAC_INTERRUPT_PRIORITY );\r
-                       NVIC_EnableIRQ( ETHERNET_IRQn );\r
-               }\r
-       }\r
-\r
-       return xReturn;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-#define niBUFFER_1_PACKET_SIZE         1536\r
-\r
-static __attribute__ ((section("._ramAHB32"))) uint8_t ucNetworkPackets[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS * niBUFFER_1_PACKET_SIZE ] __attribute__ ( ( aligned( 32 ) ) );\r
-\r
-void vNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] )\r
-{\r
-\r
-uint8_t *ucRAMBuffer = ucNetworkPackets;\r
-uint32_t ul;\r
-\r
-       for( ul = 0; ul < ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS; ul++ )\r
-       {\r
-               pxNetworkBuffers[ ul ].pucEthernetBuffer = ucRAMBuffer + ipBUFFER_PADDING;\r
-               *( ( unsigned * ) ucRAMBuffer ) = ( unsigned ) ( &( pxNetworkBuffers[ ul ] ) );\r
-               ucRAMBuffer += niBUFFER_1_PACKET_SIZE;\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-configPLACE_IN_SECTION_RAM\r
-static void vClearTXBuffers()\r
-{\r
-uint32_t ulLastDescriptor = ulNextFreeTxDescriptor;\r
-size_t uxCount = ( ( size_t ) configNUM_TX_DESCRIPTORS ) - uxSemaphoreGetCount( xTXDescriptorSemaphore );\r
-#if( ipconfigZERO_COPY_TX_DRIVER != 0 )\r
-       NetworkBufferDescriptor_t *pxNetworkBuffer;\r
-       uint8_t *ucPayLoad;\r
-#endif\r
-\r
-       /* This function is called after a TX-completion interrupt.\r
-       It will release each Network Buffer used in xNetworkInterfaceOutput().\r
-       'uxCount' represents the number of descriptors given to DMA for transmission.\r
-       After sending a packet, the DMA will clear the 'TDES_OWN' bit. */\r
-       while( ( uxCount > ( size_t ) 0u ) && ( ( xDMATxDescriptors[ ulTxDescriptorToClear ].CTRLSTAT & TDES_OWN ) == 0 ) )\r
-       {\r
-               if( ( ulTxDescriptorToClear == ulLastDescriptor ) && ( uxCount != ( size_t ) configNUM_TX_DESCRIPTORS ) )\r
-               {\r
-                       break;\r
-               }\r
-\r
-\r
-               #if( ipconfigZERO_COPY_TX_DRIVER != 0 )\r
-               {\r
-                       ucPayLoad = ( uint8_t * )xDMATxDescriptors[ ulTxDescriptorToClear ].B1ADD;\r
-                       if( ucPayLoad != NULL )\r
-                       {\r
-                               /* B1ADD points to a pucEthernetBuffer of a Network Buffer descriptor. */\r
-                               pxNetworkBuffer = pxPacketBuffer_to_NetworkBuffer( ucPayLoad );\r
-\r
-                               configASSERT( pxNetworkBuffer != NULL );\r
-\r
-                               vReleaseNetworkBufferAndDescriptor( pxNetworkBuffer ) ;\r
-                               xDMATxDescriptors[ ulTxDescriptorToClear ].B1ADD = ( uint32_t )0u;\r
-                       }\r
-               }\r
-               #endif /* ipconfigZERO_COPY_TX_DRIVER */\r
-\r
-               /* Move onto the next descriptor, wrapping if necessary. */\r
-               ulTxDescriptorToClear++;\r
-               if( ulTxDescriptorToClear >= configNUM_TX_DESCRIPTORS )\r
-               {\r
-                       ulTxDescriptorToClear = 0;\r
-               }\r
-\r
-               uxCount--;\r
-               /* Tell the counting semaphore that one more TX descriptor is available. */\r
-               xSemaphoreGive( xTXDescriptorSemaphore );\r
-       }\r
-}\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-configPLACE_IN_SECTION_RAM\r
-BaseType_t xNetworkInterfaceOutput( NetworkBufferDescriptor_t * const pxDescriptor, BaseType_t bReleaseAfterSend )\r
-{\r
-BaseType_t xReturn = pdFAIL;\r
-const TickType_t xBlockTimeTicks = pdMS_TO_TICKS( 50 );\r
-\r
-       /* Attempt to obtain access to a Tx descriptor. */\r
-       do\r
-       {\r
-               if( xTXDescriptorSemaphore == NULL )\r
-               {\r
-                       break;\r
-               }\r
-               if( xSemaphoreTake( xTXDescriptorSemaphore, xBlockTimeTicks ) != pdPASS )\r
-               {\r
-                       /* Time-out waiting for a free TX descriptor. */\r
-                       break;\r
-               }\r
-\r
-               /* If the descriptor is still owned by the DMA it can't be used. */\r
-               if( ( xDMATxDescriptors[ ulNextFreeTxDescriptor ].CTRLSTAT & TDES_OWN ) != 0 )\r
-               {\r
-                       /* The semaphore was taken, the TX DMA-descriptor is still not available.\r
-                       Actually that should not occur, the 'TDES_OWN' was already confirmed low in vClearTXBuffers(). */\r
-                       xSemaphoreGive( xTXDescriptorSemaphore );\r
-               }\r
-               else\r
-               {\r
-                       #if( ipconfigZERO_COPY_TX_DRIVER != 0 )\r
-                       {\r
-                               /* bReleaseAfterSend should always be set when using the zero\r
-                               copy driver. */\r
-                               configASSERT( bReleaseAfterSend != pdFALSE );\r
-\r
-                               /* The DMA's descriptor to point directly to the data in the\r
-                               network buffer descriptor.  The data is not copied. */\r
-                               xDMATxDescriptors[ ulNextFreeTxDescriptor ].B1ADD = ( uint32_t ) pxDescriptor->pucEthernetBuffer;\r
-\r
-                               /* The DMA descriptor will 'own' this Network Buffer,\r
-                               until it has been sent.  So don't release it now. */\r
-                               bReleaseAfterSend = false;\r
-                       }\r
-                       #else\r
-                       {\r
-                               /* The data is copied from the network buffer descriptor into\r
-                               the DMA's descriptor. */\r
-                               memcpy( ( void * ) xDMATxDescriptors[ ulNextFreeTxDescriptor ].B1ADD, ( void * ) pxDescriptor->pucEthernetBuffer, pxDescriptor->xDataLength );\r
-                       }\r
-                       #endif\r
-\r
-                       xDMATxDescriptors[ ulNextFreeTxDescriptor ].BSIZE = ( uint32_t ) TDES_ENH_BS1( pxDescriptor->xDataLength );\r
-\r
-                       /* This descriptor is given back to the DMA. */\r
-                       xDMATxDescriptors[ ulNextFreeTxDescriptor ].CTRLSTAT |= TDES_OWN;\r
-\r
-                       /* Ensure the DMA is polling Tx descriptors. */\r
-                       LPC_ETHERNET->DMA_TRANS_POLL_DEMAND = 1;\r
-\r
-            iptraceNETWORK_INTERFACE_TRANSMIT();\r
-\r
-                       /* Move onto the next descriptor, wrapping if necessary. */\r
-                       ulNextFreeTxDescriptor++;\r
-                       if( ulNextFreeTxDescriptor >= configNUM_TX_DESCRIPTORS )\r
-                       {\r
-                               ulNextFreeTxDescriptor = 0;\r
-                       }\r
-\r
-                       /* The Tx has been initiated. */\r
-                       xReturn = pdPASS;\r
-               }\r
-       } while( 0 );\r
-\r
-       /* The buffer has been sent so can be released. */\r
-       if( bReleaseAfterSend != pdFALSE )\r
-       {\r
-               vReleaseNetworkBufferAndDescriptor( pxDescriptor );\r
-       }\r
-\r
-       return xReturn;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvDelay( uint32_t ulMilliSeconds )\r
-{\r
-       /* Ensure the scheduler was started before attempting to use the scheduler to\r
-       create a delay. */\r
-       configASSERT( xTaskGetSchedulerState() == taskSCHEDULER_RUNNING );\r
-\r
-       vTaskDelay( pdMS_TO_TICKS( ulMilliSeconds ) );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvSetupTxDescriptors( void )\r
-{\r
-BaseType_t x;\r
-\r
-       /* Start with Tx descriptors clear. */\r
-       memset( ( void * ) xDMATxDescriptors, 0, sizeof( xDMATxDescriptors ) );\r
-\r
-       /* Index to the next Tx descriptor to use. */\r
-       ulNextFreeTxDescriptor = 0ul;\r
-\r
-       /* Index to the next Tx descriptor to clear ( after transmission ). */\r
-       ulTxDescriptorToClear = 0ul;\r
-\r
-       for( x = 0; x < configNUM_TX_DESCRIPTORS; x++ )\r
-       {\r
-               #if( ipconfigZERO_COPY_TX_DRIVER != 0 )\r
-               {\r
-                       /* Nothing to do, B1ADD will be set when data is ready to transmit.\r
-                       Currently the memset above will have set it to NULL. */\r
-               }\r
-               #else\r
-               {\r
-                       /* Allocate a buffer to the Tx descriptor.  This is the most basic\r
-                       way of creating a driver as the data is then copied into the\r
-                       buffer. */\r
-                       xDMATxDescriptors[ x ].B1ADD = ( uint32_t ) pvPortMalloc( ipTOTAL_ETHERNET_FRAME_SIZE );\r
-\r
-                       /* Use an assert to check the allocation as +TCP applications will\r
-                       often not use a malloc() failed hook as the TCP stack will recover\r
-                       from allocation failures. */\r
-                       configASSERT( xDMATxDescriptors[ x ].B1ADD );\r
-               }\r
-               #endif\r
-\r
-               /* Buffers hold an entire frame so all buffers are both the start and\r
-               end of a frame. */\r
-               /* TDES_ENH_TCH     Second Address Chained. */\r
-               /* TDES_ENH_CIC(n)  Checksum Insertion Control, tried but it does not work for the LPC18xx... */\r
-               /* TDES_ENH_FS      First Segment. */\r
-               /* TDES_ENH_LS      Last Segment. */\r
-               /* TDES_ENH_IC      Interrupt on Completion. */\r
-               xDMATxDescriptors[ x ].CTRLSTAT = TDES_ENH_TCH | TDES_ENH_CIC( 3 ) | TDES_ENH_FS | TDES_ENH_LS | TDES_ENH_IC;\r
-               xDMATxDescriptors[ x ].B2ADD = ( uint32_t ) &xDMATxDescriptors[ x + 1 ];\r
-       }\r
-\r
-       xDMATxDescriptors[ configNUM_TX_DESCRIPTORS - 1 ].CTRLSTAT |= TDES_ENH_TER;\r
-       xDMATxDescriptors[ configNUM_TX_DESCRIPTORS - 1 ].B2ADD = ( uint32_t ) &xDMATxDescriptors[ 0 ];\r
-\r
-       /* Point the DMA to the base of the descriptor list. */\r
-       LPC_ETHERNET->DMA_TRANS_DES_ADDR = ( uint32_t ) xDMATxDescriptors;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvSetupRxDescriptors( void )\r
-{\r
-BaseType_t x;\r
-#if( ipconfigZERO_COPY_RX_DRIVER != 0 )\r
-       NetworkBufferDescriptor_t *pxNetworkBuffer;\r
-#endif\r
-\r
-       /* Index to the next Rx descriptor to use. */\r
-       ulNextRxDescriptorToProcess = 0;\r
-\r
-       /* Clear RX descriptor list. */\r
-       memset( ( void * )  xDMARxDescriptors, 0, sizeof( xDMARxDescriptors ) );\r
-\r
-       for( x = 0; x < configNUM_RX_DESCRIPTORS; x++ )\r
-       {\r
-               /* Allocate a buffer of the largest     possible frame size as it is not\r
-               known what size received frames will be. */\r
-\r
-               #if( ipconfigZERO_COPY_RX_DRIVER != 0 )\r
-               {\r
-                       pxNetworkBuffer = pxGetNetworkBufferWithDescriptor( ipTOTAL_ETHERNET_FRAME_SIZE, 0 );\r
-\r
-                       /* During start-up there should be enough Network Buffers available,\r
-                       so it is safe to use configASSERT().\r
-                       In case this assert fails, please check: configNUM_RX_DESCRIPTORS,\r
-                       ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS, and in case BufferAllocation_2.c\r
-                       is included, check the amount of available heap. */\r
-                       configASSERT( pxNetworkBuffer != NULL );\r
-\r
-                       /* Pass the actual buffer to DMA. */\r
-                       xDMARxDescriptors[ x ].B1ADD = ( uint32_t ) pxNetworkBuffer->pucEthernetBuffer;\r
-               }\r
-               #else\r
-               {\r
-                       /* All DMA descriptors are populated with permanent memory blocks.\r
-                       Their contents will be copy to Network Buffers. */\r
-                       xDMARxDescriptors[ x ].B1ADD = ( uint32_t ) pvPortMalloc( ipTOTAL_ETHERNET_FRAME_SIZE );\r
-               }\r
-               #endif /* ipconfigZERO_COPY_RX_DRIVER */\r
-\r
-               /* Use an assert to check the allocation as +TCP applications will often\r
-               not use a malloc failed hook as the TCP stack will recover from\r
-               allocation failures. */\r
-               configASSERT( xDMARxDescriptors[ x ].B1ADD );\r
-\r
-               xDMARxDescriptors[ x ].B2ADD = ( uint32_t ) &( xDMARxDescriptors[ x + 1 ] );\r
-               xDMARxDescriptors[ x ].CTRL = ( uint32_t ) RDES_ENH_BS1( ipTOTAL_ETHERNET_FRAME_SIZE ) | RDES_ENH_RCH;\r
-\r
-               /* The descriptor is available for use by the DMA. */\r
-               xDMARxDescriptors[ x ].STATUS = RDES_OWN;\r
-       }\r
-\r
-       /* RDES_ENH_RER  Receive End of Ring. */\r
-       xDMARxDescriptors[ ( configNUM_RX_DESCRIPTORS - 1 ) ].CTRL |= RDES_ENH_RER;\r
-       xDMARxDescriptors[ configNUM_RX_DESCRIPTORS - 1 ].B2ADD = ( uint32_t ) &( xDMARxDescriptors[ 0 ] );\r
-\r
-       /* Point the DMA to the base of the descriptor list. */\r
-       LPC_ETHERNET->DMA_REC_DES_ADDR = ( uint32_t ) xDMARxDescriptors;\r
-}\r
-/*-----------------------------------------------------------*/\r
-configPLACE_IN_SECTION_RAM\r
-static void prvRemoveTrailingBytes( NetworkBufferDescriptor_t *pxDescriptor )\r
-{\r
-size_t xExpectedLength;\r
-IPPacket_t *pxIPPacket;\r
-\r
-       pxIPPacket = ( IPPacket_t * ) pxDescriptor->pucEthernetBuffer;\r
-       /* Look at the actual length of the packet, translate it to a host-endial notation. */\r
-       xExpectedLength = sizeof( EthernetHeader_t ) + ( size_t ) FreeRTOS_htons( pxIPPacket->xIPHeader.usLength );\r
-\r
-       if( xExpectedLength == ( pxDescriptor->xDataLength + 4 ) )\r
-       {\r
-               pxDescriptor->xDataLength -= 4;\r
-       }\r
-       else\r
-       {\r
-               if( pxDescriptor->xDataLength > xExpectedLength )\r
-               {\r
-                       pxDescriptor->xDataLength = ( size_t ) xExpectedLength;\r
-               }\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-configPLACE_IN_SECTION_RAM\r
-BaseType_t xGetPhyLinkStatus( void )\r
-{\r
-BaseType_t xReturn;\r
-\r
-       if( ( ulPHYLinkStatus & PHY_LINK_CONNECTED ) == 0 )\r
-       {\r
-               xReturn = pdFALSE;\r
-       }\r
-       else\r
-       {\r
-               xReturn = pdTRUE;\r
-       }\r
-\r
-       return xReturn;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-uint32_t ulDataAvailable;\r
-\r
-configPLACE_IN_SECTION_RAM\r
-static BaseType_t prvNetworkInterfaceInput()\r
-{\r
-BaseType_t xResult = pdFALSE;\r
-uint32_t ulStatus;\r
-eFrameProcessingResult_t eResult;\r
-const TickType_t xDescriptorWaitTime = pdMS_TO_TICKS( 250 );\r
-const UBaseType_t uxMinimumBuffersRemaining = 3UL;\r
-uint16_t usLength;\r
-NetworkBufferDescriptor_t *pxDescriptor;\r
-#if( ipconfigZERO_COPY_RX_DRIVER != 0 )\r
-       NetworkBufferDescriptor_t *pxNewDescriptor;\r
-#endif /* ipconfigZERO_COPY_RX_DRIVER */\r
-#if( ipconfigUSE_LINKED_RX_MESSAGES == 0 )\r
-       IPStackEvent_t xRxEvent = { eNetworkRxEvent, NULL };\r
-#endif\r
-\r
-       /* Process each descriptor that is not still in use by the DMA. */\r
-       ulStatus = xDMARxDescriptors[ ulNextRxDescriptorToProcess ].STATUS;\r
-       if( ( ulStatus & RDES_OWN ) == 0 )\r
-       {\r
-               /* Check packet for errors */\r
-               if( ( ulStatus & nwRX_STATUS_ERROR_BITS ) != 0 )\r
-               {\r
-                       /* There is some reception error. */\r
-                       intCount[ 3 ]++;\r
-                       /* Clear error bits. */\r
-                       ulStatus &= ~( ( uint32_t )nwRX_STATUS_ERROR_BITS );\r
-               }\r
-               else\r
-               {\r
-                       xResult++;\r
-\r
-                       eResult = ipCONSIDER_FRAME_FOR_PROCESSING( ( const uint8_t * const ) ( xDMARxDescriptors[ ulNextRxDescriptorToProcess ].B1ADD ) );\r
-                       if( eResult == eProcessBuffer )\r
-                       {\r
-                               if( ( ulPHYLinkStatus & PHY_LINK_CONNECTED ) == 0 )\r
-                               {\r
-                                       ulPHYLinkStatus |= PHY_LINK_CONNECTED;\r
-                                       FreeRTOS_printf( ( "prvEMACHandlerTask: PHY LS now %d (message received)\n", ( ulPHYLinkStatus & PHY_LINK_CONNECTED ) != 0 ) );\r
-                               }\r
-\r
-                       #if( ipconfigZERO_COPY_RX_DRIVER != 0 )\r
-                               if( uxGetNumberOfFreeNetworkBuffers() > uxMinimumBuffersRemaining )\r
-                               {\r
-                                       pxNewDescriptor = pxGetNetworkBufferWithDescriptor( ipTOTAL_ETHERNET_FRAME_SIZE, xDescriptorWaitTime );\r
-                               }\r
-                               else\r
-                               {\r
-                                       /* Too risky to allocate a new Network Buffer. */\r
-                                       pxNewDescriptor = NULL;\r
-                               }\r
-                               if( pxNewDescriptor != NULL )\r
-                       #else\r
-                               if( uxGetNumberOfFreeNetworkBuffers() > uxMinimumBuffersRemaining )\r
-                       #endif /* ipconfigZERO_COPY_RX_DRIVER */\r
-                               {\r
-                       #if( ipconfigZERO_COPY_RX_DRIVER != 0 )\r
-                               const uint8_t *pucBuffer;\r
-                       #endif\r
-\r
-                                       /* Get the actual length. */\r
-                                       usLength = RDES_FLMSK( ulStatus );\r
-\r
-                                       #if( ipconfigZERO_COPY_RX_DRIVER != 0 )\r
-                                       {\r
-                                               /* Replace the character buffer 'B1ADD'. */\r
-                                               pucBuffer = ( const uint8_t * const ) ( xDMARxDescriptors[ ulNextRxDescriptorToProcess ].B1ADD );\r
-                                               xDMARxDescriptors[ ulNextRxDescriptorToProcess ].B1ADD = ( uint32_t ) pxNewDescriptor->pucEthernetBuffer;\r
-\r
-                                               /* 'B1ADD' contained the address of a 'pucEthernetBuffer' that\r
-                                               belongs to a Network Buffer.  Find the original Network Buffer. */\r
-                                               pxDescriptor = pxPacketBuffer_to_NetworkBuffer( pucBuffer );\r
-                                               /* This zero-copy driver makes sure that every 'xDMARxDescriptors' contains\r
-                                               a reference to a Network Buffer at any time.\r
-                                               In case it runs out of Network Buffers, a DMA buffer won't be replaced,\r
-                                               and the received messages is dropped. */\r
-                                               configASSERT( pxDescriptor != NULL );\r
-                                       }\r
-                                       #else\r
-                                       {\r
-                                               /* Create a buffer of exactly the required length. */\r
-                                               pxDescriptor = pxGetNetworkBufferWithDescriptor( usLength, xDescriptorWaitTime );\r
-                                       }\r
-                                       #endif /* ipconfigZERO_COPY_RX_DRIVER */\r
-\r
-                                       if( pxDescriptor != NULL )\r
-                                       {\r
-                                               pxDescriptor->xDataLength = ( size_t ) usLength;\r
-                                               #if( ipconfigZERO_COPY_RX_DRIVER == 0 )\r
-                                               {\r
-                                                       /* Copy the data into the allocated buffer. */\r
-                                                       memcpy( ( void * ) pxDescriptor->pucEthernetBuffer, ( void * ) xDMARxDescriptors[ ulNextRxDescriptorToProcess ].B1ADD, usLength );\r
-                                               }\r
-                                               #endif /* ipconfigZERO_COPY_RX_DRIVER */\r
-                                               /* It is possible that more data was copied than\r
-                                               actually makes up the frame.  If this is the case\r
-                                               adjust the length to remove any trailing bytes. */\r
-                                               prvRemoveTrailingBytes( pxDescriptor );\r
-\r
-                                               /* Pass the data to the TCP/IP task for processing. */\r
-                                               xRxEvent.pvData = ( void * ) pxDescriptor;\r
-                                               if( xSendEventStructToIPTask( &xRxEvent, xDescriptorWaitTime ) == pdFALSE )\r
-                                               {\r
-                                                       /* Could not send the descriptor into the TCP/IP\r
-                                                       stack, it must be released. */\r
-                                                       vReleaseNetworkBufferAndDescriptor( pxDescriptor );\r
-                                               }\r
-                                               else\r
-                                               {\r
-                                                       iptraceNETWORK_INTERFACE_RECEIVE();\r
-\r
-                                                       /* The data that was available at the top of this\r
-                                                       loop has been sent, so is no longer available. */\r
-                                                       ulDataAvailable = pdFALSE;\r
-                                               }\r
-                                       }\r
-                               }\r
-                       }\r
-                       else\r
-                       {\r
-                               /* The packet is discarded as uninteresting. */\r
-                               ulDataAvailable = pdFALSE;\r
-                       }\r
-                       /* Got here because received data was sent to the IP task or the\r
-                       data contained an error and was discarded.  Give the descriptor\r
-                       back to the DMA. */\r
-                       xDMARxDescriptors[ ulNextRxDescriptorToProcess ].STATUS = ulStatus | RDES_OWN;\r
-\r
-                       /* Move onto the next descriptor. */\r
-                       ulNextRxDescriptorToProcess++;\r
-                       if( ulNextRxDescriptorToProcess >= configNUM_RX_DESCRIPTORS )\r
-                       {\r
-                               ulNextRxDescriptorToProcess = 0;\r
-                       }\r
-\r
-                       ulStatus = xDMARxDescriptors[ ulNextRxDescriptorToProcess ].STATUS;\r
-               } /* if( ( ulStatus & nwRX_STATUS_ERROR_BITS ) != 0 ) */\r
-       } /* if( ( ulStatus & RDES_OWN ) == 0 ) */\r
-\r
-       /* Restart receive polling. */\r
-       LPC_ETHERNET->DMA_REC_POLL_DEMAND = 1;\r
-\r
-       return xResult;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-configPLACE_IN_SECTION_RAM\r
-void NETWORK_IRQHandler( void )\r
-{\r
-BaseType_t xHigherPriorityTaskWoken = pdFALSE;\r
-uint32_t ulDMAStatus;\r
-const uint32_t ulRxInterruptMask =\r
-       DMA_ST_RI |             /* Receive interrupt */\r
-       DMA_ST_RU;              /* Receive buffer unavailable */\r
-const uint32_t ulTxInterruptMask =\r
-       DMA_ST_TI |             /* Transmit interrupt */\r
-       DMA_ST_TPS;             /* Transmit process stopped */\r
-\r
-       configASSERT( xRxHanderTask );\r
-\r
-       /* Get pending interrupts. */\r
-       ulDMAStatus = LPC_ETHERNET->DMA_STAT;\r
-\r
-       /* RX group interrupt(s). */\r
-       if( ( ulDMAStatus & ulRxInterruptMask ) != 0x00 )\r
-       {\r
-               /* Remember that an RX event has happened. */\r
-               ulISREvents |= EMAC_IF_RX_EVENT;\r
-               vTaskNotifyGiveFromISR( xRxHanderTask, &xHigherPriorityTaskWoken );\r
-               intCount[ 0 ]++;\r
-       }\r
-\r
-       /* TX group interrupt(s). */\r
-       if( ( ulDMAStatus & ulTxInterruptMask ) != 0x00 )\r
-       {\r
-               /* Remember that a TX event has happened. */\r
-               ulISREvents |= EMAC_IF_TX_EVENT;\r
-               vTaskNotifyGiveFromISR( xRxHanderTask, &xHigherPriorityTaskWoken );\r
-               intCount[ 1 ]++;\r
-       }\r
-\r
-       /* Test for 'Abnormal interrupt summary'. */\r
-       if( ( ulDMAStatus & DMA_ST_AIE ) != 0x00 )\r
-       {\r
-               /* The trace macro must be written such that it can be called from\r
-               an interrupt. */\r
-               iptraceETHERNET_RX_EVENT_LOST();\r
-       }\r
-\r
-       /* Clear pending interrupts */\r
-       LPC_ETHERNET->DMA_STAT = ulDMAStatus;\r
-\r
-       /* Context switch needed? */\r
-       portYIELD_FROM_ISR( xHigherPriorityTaskWoken );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static BaseType_t prvSetLinkSpeed( void )\r
-{\r
-BaseType_t xReturn = pdFAIL;\r
-TickType_t xTimeOnEntering;\r
-uint32_t ulPhyStatus;\r
-const TickType_t xAutoNegotiateDelay = pdMS_TO_TICKS( 5000UL );\r
-\r
-       /* Ensure polling does not starve lower priority tasks by temporarily\r
-       setting the priority of this task to that of the idle task. */\r
-       vTaskPrioritySet( NULL, tskIDLE_PRIORITY );\r
-\r
-       xTimeOnEntering = xTaskGetTickCount();\r
-       do\r
-       {\r
-               ulPhyStatus = lpcPHYStsPoll();\r
-               if( ( ulPhyStatus & PHY_LINK_CONNECTED ) != 0x00 )\r
-               {\r
-                       /* Set interface speed and duplex. */\r
-                       if( ( ulPhyStatus & PHY_LINK_SPEED100 ) != 0x00 )\r
-                       {\r
-                               Chip_ENET_SetSpeed( LPC_ETHERNET, 1 );\r
-                       }\r
-                       else\r
-                       {\r
-                               Chip_ENET_SetSpeed( LPC_ETHERNET, 0 );\r
-                       }\r
-\r
-                       if( ( ulPhyStatus & PHY_LINK_FULLDUPLX ) != 0x00 )\r
-                       {\r
-                               Chip_ENET_SetDuplex( LPC_ETHERNET, true );\r
-                       }\r
-                       else\r
-                       {\r
-                               Chip_ENET_SetDuplex( LPC_ETHERNET, false );\r
-                       }\r
-\r
-                       xReturn = pdPASS;\r
-                       break;\r
-               }\r
-       } while( ( xTaskGetTickCount() - xTimeOnEntering ) < xAutoNegotiateDelay );\r
-\r
-       /* Reset the priority of this task back to its original value. */\r
-       vTaskPrioritySet( NULL, ipconfigIP_TASK_PRIORITY );\r
-\r
-       return xReturn;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static uint32_t prvGenerateCRC32( const uint8_t *ucAddress )\r
-{\r
-unsigned int j;\r
-const uint32_t Polynomial = 0xEDB88320;\r
-uint32_t crc = ~0ul;\r
-const uint8_t *pucCurrent = ( const uint8_t * ) ucAddress;\r
-const uint8_t *pucLast = pucCurrent + 6;\r
-\r
-    /* Calculate  normal CRC32 */\r
-    while( pucCurrent < pucLast )\r
-    {\r
-        crc ^= *( pucCurrent++ );\r
-        for( j = 0; j < 8; j++ )\r
-        {\r
-            if( ( crc & 1 ) != 0 )\r
-            {\r
-                crc = (crc >> 1) ^ Polynomial;\r
-            }\r
-            else\r
-            {\r
-                crc >>= 1;\r
-            }\r
-        }\r
-    }\r
-    return ~crc;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static uint32_t prvGetHashIndex( const uint8_t *ucAddress )\r
-{\r
-uint32_t ulCrc = prvGenerateCRC32( ucAddress );\r
-uint32_t ulIndex = 0ul;\r
-BaseType_t xCount = 6;\r
-\r
-    /* Take the lowest 6 bits of the CRC32 and reverse them */\r
-    while( xCount-- )\r
-    {\r
-        ulIndex <<= 1;\r
-        ulIndex |= ( ulCrc & 1 );\r
-        ulCrc >>= 1;\r
-    }\r
-\r
-    /* This is the has value of 'ucAddress' */\r
-    return ulIndex;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvAddMACAddress( const uint8_t* ucMacAddress )\r
-{\r
-BaseType_t xIndex;\r
-\r
-    xIndex = prvGetHashIndex( ucMacAddress );\r
-    if( xIndex >= 32 )\r
-    {\r
-        LPC_ETHERNET->MAC_HASHTABLE_HIGH |= ( 1u << ( xIndex - 32 ) );\r
-    }\r
-    else\r
-    {\r
-        LPC_ETHERNET->MAC_HASHTABLE_LOW |= ( 1u << xIndex );\r
-    }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-configPLACE_IN_SECTION_RAM\r
-static void prvEMACHandlerTask( void *pvParameters )\r
-{\r
-TimeOut_t xPhyTime;\r
-TickType_t xPhyRemTime;\r
-UBaseType_t uxLastMinBufferCount = 0;\r
-UBaseType_t uxCurrentCount;\r
-BaseType_t xResult = 0;\r
-uint32_t ulStatus;\r
-const TickType_t xBlockTime = pdMS_TO_TICKS( 5000ul );\r
-\r
-       /* Remove compiler warning about unused parameter. */\r
-       ( void ) pvParameters;\r
-\r
-       /* A possibility to set some additional task properties. */\r
-       iptraceEMAC_TASK_STARTING();\r
-\r
-       vTaskSetTimeOutState( &xPhyTime );\r
-       xPhyRemTime = pdMS_TO_TICKS( PHY_LS_LOW_CHECK_TIME_MS );\r
-\r
-       for( ;; )\r
-       {\r
-               uxCurrentCount = uxGetMinimumFreeNetworkBuffers();\r
-               if( uxLastMinBufferCount != uxCurrentCount )\r
-               {\r
-                       /* The logging produced below may be helpful\r
-                       while tuning +TCP: see how many buffers are in use. */\r
-                       uxLastMinBufferCount = uxCurrentCount;\r
-                       FreeRTOS_printf( ( "Network buffers: %lu lowest %lu\n",\r
-                               uxGetNumberOfFreeNetworkBuffers(), uxCurrentCount ) );\r
-               }\r
-\r
-               #if( ipconfigCHECK_IP_QUEUE_SPACE != 0 )\r
-               {\r
-               static UBaseType_t uxLastMinQueueSpace = 0;\r
-\r
-                       uxCurrentCount = uxGetMinimumIPQueueSpace();\r
-                       if( uxLastMinQueueSpace != uxCurrentCount )\r
-                       {\r
-                               /* The logging produced below may be helpful\r
-                               while tuning +TCP: see how many buffers are in use. */\r
-                               uxLastMinQueueSpace = uxCurrentCount;\r
-                               FreeRTOS_printf( ( "Queue space: lowest %lu\n", uxCurrentCount ) );\r
-                       }\r
-               }\r
-               #endif /* ipconfigCHECK_IP_QUEUE_SPACE */\r
-\r
-               ulTaskNotifyTake( pdTRUE, xBlockTime );\r
-\r
-               xResult = ( BaseType_t ) 0;\r
-\r
-               if( ( ulISREvents & EMAC_IF_TX_EVENT ) != 0 )\r
-               {\r
-                       /* Code to release TX buffers if zero-copy is used. */\r
-                       ulISREvents &= ~EMAC_IF_TX_EVENT;\r
-                       {\r
-                               /* Check if DMA packets have been delivered. */\r
-                               vClearTXBuffers();\r
-                       }\r
-               }\r
-\r
-               if( ( ulISREvents & EMAC_IF_RX_EVENT ) != 0 )\r
-               {\r
-                       ulISREvents &= ~EMAC_IF_RX_EVENT;\r
-\r
-                       xResult = prvNetworkInterfaceInput();\r
-                       if( xResult > 0 )\r
-                       {\r
-                               while( prvNetworkInterfaceInput() > 0 )\r
-                               {\r
-                               }\r
-                       }\r
-               }\r
-\r
-               if( xResult > 0 )\r
-               {\r
-                       /* A packet was received. No need to check for the PHY status now,\r
-                       but set a timer to check it later on. */\r
-                       vTaskSetTimeOutState( &xPhyTime );\r
-                       xPhyRemTime = pdMS_TO_TICKS( PHY_LS_HIGH_CHECK_TIME_MS );\r
-                       xResult = 0;\r
-               }\r
-               else if( xTaskCheckForTimeOut( &xPhyTime, &xPhyRemTime ) != pdFALSE )\r
-               {\r
-                       ulStatus = lpcPHYStsPoll();\r
-\r
-                       if( ( ulPHYLinkStatus & PHY_LINK_CONNECTED ) != ( ulStatus & PHY_LINK_CONNECTED ) )\r
-                       {\r
-                               ulPHYLinkStatus = ulStatus;\r
-                               FreeRTOS_printf( ( "prvEMACHandlerTask: PHY LS now %d (polled PHY)\n", ( ulPHYLinkStatus & PHY_LINK_CONNECTED ) != 0 ) );\r
-                       }\r
-\r
-                       vTaskSetTimeOutState( &xPhyTime );\r
-                       if( ( ulPHYLinkStatus & PHY_LINK_CONNECTED ) != 0 )\r
-                       {\r
-                               xPhyRemTime = pdMS_TO_TICKS( PHY_LS_HIGH_CHECK_TIME_MS );\r
-                       }\r
-                       else\r
-                       {\r
-                               xPhyRemTime = pdMS_TO_TICKS( PHY_LS_LOW_CHECK_TIME_MS );\r
-                       }\r
-               }\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
+/*
+FreeRTOS+TCP V2.0.11
+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
+*/
+
+/* Standard includes. */
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+/* FreeRTOS includes. */
+#include "FreeRTOS.h"
+#include "task.h"
+#include "queue.h"
+#include "semphr.h"
+
+/* FreeRTOS+TCP includes. */
+#include "FreeRTOS_IP.h"
+#include "FreeRTOS_Sockets.h"
+#include "FreeRTOS_IP_Private.h"
+#include "NetworkBufferManagement.h"
+#include "NetworkInterface.h"
+
+/* LPCOpen includes. */
+#include "chip.h"
+#include "lpc_phy.h"
+
+/* The size of the stack allocated to the task that handles Rx packets. */
+#define nwRX_TASK_STACK_SIZE   140
+
+#ifndef        PHY_LS_HIGH_CHECK_TIME_MS
+       /* Check if the LinkSStatus in the PHY is still high after 15 seconds of not
+       receiving packets. */
+       #define PHY_LS_HIGH_CHECK_TIME_MS       15000
+#endif
+
+#ifndef        PHY_LS_LOW_CHECK_TIME_MS
+       /* Check if the LinkSStatus in the PHY is still low every second. */
+       #define PHY_LS_LOW_CHECK_TIME_MS        1000
+#endif
+
+#ifndef configUSE_RMII
+       #define configUSE_RMII 1
+#endif
+
+#ifndef configNUM_RX_DESCRIPTORS
+       #error please define configNUM_RX_DESCRIPTORS in your FreeRTOSIPConfig.h
+#endif
+
+#ifndef configNUM_TX_DESCRIPTORS
+       #error please define configNUM_TX_DESCRIPTORS in your FreeRTOSIPConfig.h
+#endif
+
+#ifndef NETWORK_IRQHandler
+       #error NETWORK_IRQHandler must be defined to the name of the function that is installed in the interrupt vector table to handle Ethernet interrupts.
+#endif
+
+#if !defined( MAC_FF_HMC )
+       /* Hash for multicast. */
+       #define MAC_FF_HMC     ( 1UL << 2UL )
+#endif
+
+#ifndef iptraceEMAC_TASK_STARTING
+       #define iptraceEMAC_TASK_STARTING()     do { } while( 0 )
+#endif
+
+/* Define the bits of .STATUS that indicate a reception error. */
+#define nwRX_STATUS_ERROR_BITS \
+       ( RDES_CE  /* CRC Error */                        | \
+         RDES_RE  /* Receive Error */                    | \
+         RDES_DE  /* Descriptor Error */                 | \
+         RDES_RWT /* Receive Watchdog Timeout */         | \
+         RDES_LC  /* Late Collision */                   | \
+         RDES_OE  /* Overflow Error */                   | \
+         RDES_SAF /* Source Address Filter Fail */       | \
+         RDES_AFM /* Destination Address Filter Fail */  | \
+         RDES_LE  /* Length Error */                     )
+
+/* Define the EMAC status bits that should trigger an interrupt. */
+#define nwDMA_INTERRUPT_MASK \
+       ( DMA_IE_TIE  /* Transmit interrupt enable */         | \
+         DMA_IE_TSE  /* Transmit stopped enable */           | \
+         DMA_IE_OVE  /* Overflow interrupt enable */         | \
+         DMA_IE_RIE  /* Receive interrupt enable */          | \
+         DMA_IE_NIE  /* Normal interrupt summary enable */   | \
+         DMA_IE_AIE  /* Abnormal interrupt summary enable */ | \
+         DMA_IE_RUE  /* Receive buffer unavailable enable */ | \
+         DMA_IE_UNE  /* Underflow interrupt enable. */       | \
+         DMA_IE_TJE  /* Transmit jabber timeout enable */    | \
+         DMA_IE_RSE  /* Received stopped enable */           | \
+         DMA_IE_RWE  /* Receive watchdog timeout enable */   | \
+         DMA_IE_FBE )/* Fatal bus error enable */
+
+/* Interrupt events to process.  Currently only the RX/TX events are processed
+although code for other events is included to allow for possible future
+expansion. */
+#define EMAC_IF_RX_EVENT        1UL
+#define EMAC_IF_TX_EVENT        2UL
+#define EMAC_IF_ERR_EVENT       4UL
+#define EMAC_IF_ALL_EVENT       ( EMAC_IF_RX_EVENT | EMAC_IF_TX_EVENT | EMAC_IF_ERR_EVENT )
+
+ /* If ipconfigETHERNET_DRIVER_FILTERS_FRAME_TYPES is set to 1, then the Ethernet
+ driver will filter incoming packets and only pass the stack those packets it
+ considers need processing. */
+ #if( ipconfigETHERNET_DRIVER_FILTERS_FRAME_TYPES == 0 )
+       #define ipCONSIDER_FRAME_FOR_PROCESSING( pucEthernetBuffer ) eProcessBuffer
+ #else
+       #define ipCONSIDER_FRAME_FOR_PROCESSING( pucEthernetBuffer ) eConsiderFrameForProcessing( ( pucEthernetBuffer ) )
+ #endif
+
+#if( ipconfigZERO_COPY_RX_DRIVER == 0 ) || ( ipconfigZERO_COPY_TX_DRIVER == 0 )
+       #warning It is adviced to enable both macros
+#endif
+
+#ifndef configPLACE_IN_SECTION_RAM
+       #define configPLACE_IN_SECTION_RAM
+/*
+       #define configPLACE_IN_SECTION_RAM      __attribute__ ((section(".ramfunc")))
+*/
+#endif
+
+/*-----------------------------------------------------------*/
+
+/*
+ * Delay function passed into the library.  The implementation uses FreeRTOS
+ * calls so the scheduler must be started before the driver can be used.
+ */
+static void prvDelay( uint32_t ulMilliSeconds );
+
+/*
+ * Initialises the Tx and Rx descriptors respectively.
+ */
+static void prvSetupTxDescriptors( void );
+static void prvSetupRxDescriptors( void );
+
+/*
+ * A task that processes received frames.
+ */
+static void prvEMACHandlerTask( void *pvParameters );
+
+/*
+ * Sets up the MAC with the results of an auto-negotiation.
+ */
+static BaseType_t prvSetLinkSpeed( void );
+
+/*
+ * Generates a CRC for a MAC address that is then used to generate a hash index.
+ */
+static uint32_t prvGenerateCRC32( const uint8_t *ucAddress );
+
+/*
+ * Generates a hash index when setting a filter to permit a MAC address.
+ */
+static uint32_t prvGetHashIndex( const uint8_t *ucAddress );
+
+/*
+ * Update the hash table to allow a MAC address.
+ */
+static void prvAddMACAddress( const uint8_t* ucMacAddress );
+
+/*
+ * Sometimes the DMA will report received data as being longer than the actual
+ * received from length.  This function checks the reported length and corrects
+ * if if necessary.
+ */
+static void prvRemoveTrailingBytes( NetworkBufferDescriptor_t *pxDescriptor );
+
+/*-----------------------------------------------------------*/
+
+/* Bit map of outstanding ETH interrupt events for processing.  Currently only
+the Rx and Tx interrupt is handled, although code is included for other events
+to enable future expansion. */
+static volatile uint32_t ulISREvents;
+
+/* A copy of PHY register 1: 'PHY_REG_01_BMSR' */
+static uint32_t ulPHYLinkStatus = 0;
+
+/* Tx descriptors and index. */
+static ENET_ENHTXDESC_T xDMATxDescriptors[ configNUM_TX_DESCRIPTORS ];
+
+/* ulNextFreeTxDescriptor is declared volatile, because it is accessed from
+to different tasks. */
+static volatile uint32_t ulNextFreeTxDescriptor;
+static uint32_t ulTxDescriptorToClear;
+
+/* Rx descriptors and index. */
+static ENET_ENHRXDESC_T xDMARxDescriptors[ configNUM_RX_DESCRIPTORS ];
+static uint32_t ulNextRxDescriptorToProcess;
+
+/* Must be defined externally - the demo applications define this in main.c. */
+extern uint8_t ucMACAddress[ 6 ];
+
+/* The handle of the task that processes Rx packets.  The handle is required so
+the task can be notified when new packets arrive. */
+static TaskHandle_t xRxHanderTask = NULL;
+
+#if( ipconfigUSE_LLMNR == 1 )
+       static const uint8_t xLLMNR_MACAddress[] = { '\x01', '\x00', '\x5E', '\x00', '\x00', '\xFC' };
+#endif /* ipconfigUSE_LLMNR == 1 */
+
+/* xTXDescriptorSemaphore is a counting semaphore with
+a maximum count of ETH_TXBUFNB, which is the number of
+DMA TX descriptors. */
+static SemaphoreHandle_t xTXDescriptorSemaphore = NULL;
+
+/*-----------------------------------------------------------*/
+
+
+BaseType_t xNetworkInterfaceInitialise( void )
+{
+BaseType_t xReturn = pdPASS;
+
+       /* The interrupt will be turned on when a link is established. */
+       NVIC_DisableIRQ( ETHERNET_IRQn );
+
+       /* Disable receive and transmit DMA processes. */
+       LPC_ETHERNET->DMA_OP_MODE &= ~( DMA_OM_ST | DMA_OM_SR );
+
+       /* Disable packet reception. */
+       LPC_ETHERNET->MAC_CONFIG &= ~( MAC_CFG_RE | MAC_CFG_TE );
+
+       /* Call the LPCOpen function to initialise the hardware. */
+       Chip_ENET_Init( LPC_ETHERNET );
+
+       /* Save MAC address. */
+       Chip_ENET_SetADDR( LPC_ETHERNET, ucMACAddress );
+
+       /* Clear all MAC address hash entries. */
+       LPC_ETHERNET->MAC_HASHTABLE_HIGH = 0;
+       LPC_ETHERNET->MAC_HASHTABLE_LOW = 0;
+
+       #if( ipconfigUSE_LLMNR == 1 )
+       {
+               prvAddMACAddress( xLLMNR_MACAddress );
+       }
+       #endif /* ipconfigUSE_LLMNR == 1 */
+
+       /* Promiscuous flag (PR) and Receive All flag (RA) set to zero.  The
+       registers MAC_HASHTABLE_[LOW|HIGH] will be loaded to allow certain
+       multi-cast addresses. */
+       LPC_ETHERNET->MAC_FRAME_FILTER = MAC_FF_HMC;
+
+       #if( configUSE_RMII == 1 )
+       {
+               if( lpc_phy_init( pdTRUE, prvDelay ) != SUCCESS )
+               {
+                       xReturn = pdFAIL;
+               }
+       }
+       #else
+       {
+               #warning This path has not been tested.
+               if( lpc_phy_init( pdFALSE, prvDelay ) != SUCCESS )
+               {
+                       xReturn = pdFAIL;
+               }
+       }
+       #endif
+
+       if( xReturn == pdPASS )
+       {
+               /* Guard against the task being created more than once and the
+               descriptors being initialised more than once. */
+               if( xRxHanderTask == NULL )
+               {
+                       xReturn = xTaskCreate( prvEMACHandlerTask, "EMAC", nwRX_TASK_STACK_SIZE, NULL, configMAX_PRIORITIES - 1, &xRxHanderTask );
+                       configASSERT( xReturn );
+               }
+
+               if( xTXDescriptorSemaphore == NULL )
+               {
+                       /* Create a counting semaphore, with a value of 'configNUM_TX_DESCRIPTORS'
+                       and a maximum of 'configNUM_TX_DESCRIPTORS'. */
+                       xTXDescriptorSemaphore = xSemaphoreCreateCounting( ( UBaseType_t ) configNUM_TX_DESCRIPTORS, ( UBaseType_t ) configNUM_TX_DESCRIPTORS );
+                       configASSERT( xTXDescriptorSemaphore );
+               }
+
+               /* Enable MAC interrupts. */
+               LPC_ETHERNET->DMA_INT_EN = nwDMA_INTERRUPT_MASK;
+       }
+
+       if( xReturn != pdFAIL )
+       {
+               /* Auto-negotiate was already started.  Wait for it to complete. */
+               xReturn = prvSetLinkSpeed();
+
+               if( xReturn == pdPASS )
+               {
+                       /* Initialise the descriptors. */
+                       prvSetupTxDescriptors();
+                       prvSetupRxDescriptors();
+
+                       /* Clear all interrupts. */
+                       LPC_ETHERNET->DMA_STAT = DMA_ST_ALL;
+
+                       /* Enable receive and transmit DMA processes. */
+                       LPC_ETHERNET->DMA_OP_MODE |= DMA_OM_ST | DMA_OM_SR;
+
+                       /* Set Receiver / Transmitter Enable. */
+                       LPC_ETHERNET->MAC_CONFIG |= MAC_CFG_RE | MAC_CFG_TE;
+
+                       /* Start receive polling. */
+                       LPC_ETHERNET->DMA_REC_POLL_DEMAND = 1;
+
+                       /* Enable interrupts in the NVIC. */
+                       NVIC_SetPriority( ETHERNET_IRQn, configMAC_INTERRUPT_PRIORITY );
+                       NVIC_EnableIRQ( ETHERNET_IRQn );
+               }
+       }
+
+       return xReturn;
+}
+/*-----------------------------------------------------------*/
+
+#define niBUFFER_1_PACKET_SIZE         1536
+
+static __attribute__ ((section("._ramAHB32"))) uint8_t ucNetworkPackets[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS * niBUFFER_1_PACKET_SIZE ] __attribute__ ( ( aligned( 32 ) ) );
+
+void vNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] )
+{
+
+uint8_t *ucRAMBuffer = ucNetworkPackets;
+uint32_t ul;
+
+       for( ul = 0; ul < ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS; ul++ )
+       {
+               pxNetworkBuffers[ ul ].pucEthernetBuffer = ucRAMBuffer + ipBUFFER_PADDING;
+               *( ( unsigned * ) ucRAMBuffer ) = ( unsigned ) ( &( pxNetworkBuffers[ ul ] ) );
+               ucRAMBuffer += niBUFFER_1_PACKET_SIZE;
+       }
+}
+/*-----------------------------------------------------------*/
+
+configPLACE_IN_SECTION_RAM
+static void vClearTXBuffers()
+{
+uint32_t ulLastDescriptor = ulNextFreeTxDescriptor;
+size_t uxCount = ( ( size_t ) configNUM_TX_DESCRIPTORS ) - uxSemaphoreGetCount( xTXDescriptorSemaphore );
+#if( ipconfigZERO_COPY_TX_DRIVER != 0 )
+       NetworkBufferDescriptor_t *pxNetworkBuffer;
+       uint8_t *ucPayLoad;
+#endif
+
+       /* This function is called after a TX-completion interrupt.
+       It will release each Network Buffer used in xNetworkInterfaceOutput().
+       'uxCount' represents the number of descriptors given to DMA for transmission.
+       After sending a packet, the DMA will clear the 'TDES_OWN' bit. */
+       while( ( uxCount > ( size_t ) 0u ) && ( ( xDMATxDescriptors[ ulTxDescriptorToClear ].CTRLSTAT & TDES_OWN ) == 0 ) )
+       {
+               if( ( ulTxDescriptorToClear == ulLastDescriptor ) && ( uxCount != ( size_t ) configNUM_TX_DESCRIPTORS ) )
+               {
+                       break;
+               }
+
+
+               #if( ipconfigZERO_COPY_TX_DRIVER != 0 )
+               {
+                       ucPayLoad = ( uint8_t * )xDMATxDescriptors[ ulTxDescriptorToClear ].B1ADD;
+                       if( ucPayLoad != NULL )
+                       {
+                               /* B1ADD points to a pucEthernetBuffer of a Network Buffer descriptor. */
+                               pxNetworkBuffer = pxPacketBuffer_to_NetworkBuffer( ucPayLoad );
+
+                               configASSERT( pxNetworkBuffer != NULL );
+
+                               vReleaseNetworkBufferAndDescriptor( pxNetworkBuffer ) ;
+                               xDMATxDescriptors[ ulTxDescriptorToClear ].B1ADD = ( uint32_t )0u;
+                       }
+               }
+               #endif /* ipconfigZERO_COPY_TX_DRIVER */
+
+               /* Move onto the next descriptor, wrapping if necessary. */
+               ulTxDescriptorToClear++;
+               if( ulTxDescriptorToClear >= configNUM_TX_DESCRIPTORS )
+               {
+                       ulTxDescriptorToClear = 0;
+               }
+
+               uxCount--;
+               /* Tell the counting semaphore that one more TX descriptor is available. */
+               xSemaphoreGive( xTXDescriptorSemaphore );
+       }
+}
+
+/*-----------------------------------------------------------*/
+
+configPLACE_IN_SECTION_RAM
+BaseType_t xNetworkInterfaceOutput( NetworkBufferDescriptor_t * const pxDescriptor, BaseType_t bReleaseAfterSend )
+{
+BaseType_t xReturn = pdFAIL;
+const TickType_t xBlockTimeTicks = pdMS_TO_TICKS( 50 );
+
+       /* Attempt to obtain access to a Tx descriptor. */
+       do
+       {
+               if( xTXDescriptorSemaphore == NULL )
+               {
+                       break;
+               }
+               if( xSemaphoreTake( xTXDescriptorSemaphore, xBlockTimeTicks ) != pdPASS )
+               {
+                       /* Time-out waiting for a free TX descriptor. */
+                       break;
+               }
+
+               /* If the descriptor is still owned by the DMA it can't be used. */
+               if( ( xDMATxDescriptors[ ulNextFreeTxDescriptor ].CTRLSTAT & TDES_OWN ) != 0 )
+               {
+                       /* The semaphore was taken, the TX DMA-descriptor is still not available.
+                       Actually that should not occur, the 'TDES_OWN' was already confirmed low in vClearTXBuffers(). */
+                       xSemaphoreGive( xTXDescriptorSemaphore );
+               }
+               else
+               {
+                       #if( ipconfigZERO_COPY_TX_DRIVER != 0 )
+                       {
+                               /* bReleaseAfterSend should always be set when using the zero
+                               copy driver. */
+                               configASSERT( bReleaseAfterSend != pdFALSE );
+
+                               /* The DMA's descriptor to point directly to the data in the
+                               network buffer descriptor.  The data is not copied. */
+                               xDMATxDescriptors[ ulNextFreeTxDescriptor ].B1ADD = ( uint32_t ) pxDescriptor->pucEthernetBuffer;
+
+                               /* The DMA descriptor will 'own' this Network Buffer,
+                               until it has been sent.  So don't release it now. */
+                               bReleaseAfterSend = false;
+                       }
+                       #else
+                       {
+                               /* The data is copied from the network buffer descriptor into
+                               the DMA's descriptor. */
+                               memcpy( ( void * ) xDMATxDescriptors[ ulNextFreeTxDescriptor ].B1ADD, ( void * ) pxDescriptor->pucEthernetBuffer, pxDescriptor->xDataLength );
+                       }
+                       #endif
+
+                       xDMATxDescriptors[ ulNextFreeTxDescriptor ].BSIZE = ( uint32_t ) TDES_ENH_BS1( pxDescriptor->xDataLength );
+
+                       /* This descriptor is given back to the DMA. */
+                       xDMATxDescriptors[ ulNextFreeTxDescriptor ].CTRLSTAT |= TDES_OWN;
+
+                       /* Ensure the DMA is polling Tx descriptors. */
+                       LPC_ETHERNET->DMA_TRANS_POLL_DEMAND = 1;
+
+            iptraceNETWORK_INTERFACE_TRANSMIT();
+
+                       /* Move onto the next descriptor, wrapping if necessary. */
+                       ulNextFreeTxDescriptor++;
+                       if( ulNextFreeTxDescriptor >= configNUM_TX_DESCRIPTORS )
+                       {
+                               ulNextFreeTxDescriptor = 0;
+                       }
+
+                       /* The Tx has been initiated. */
+                       xReturn = pdPASS;
+               }
+       } while( 0 );
+
+       /* The buffer has been sent so can be released. */
+       if( bReleaseAfterSend != pdFALSE )
+       {
+               vReleaseNetworkBufferAndDescriptor( pxDescriptor );
+       }
+
+       return xReturn;
+}
+/*-----------------------------------------------------------*/
+
+static void prvDelay( uint32_t ulMilliSeconds )
+{
+       /* Ensure the scheduler was started before attempting to use the scheduler to
+       create a delay. */
+       configASSERT( xTaskGetSchedulerState() == taskSCHEDULER_RUNNING );
+
+       vTaskDelay( pdMS_TO_TICKS( ulMilliSeconds ) );
+}
+/*-----------------------------------------------------------*/
+
+static void prvSetupTxDescriptors( void )
+{
+BaseType_t x;
+
+       /* Start with Tx descriptors clear. */
+       memset( ( void * ) xDMATxDescriptors, 0, sizeof( xDMATxDescriptors ) );
+
+       /* Index to the next Tx descriptor to use. */
+       ulNextFreeTxDescriptor = 0ul;
+
+       /* Index to the next Tx descriptor to clear ( after transmission ). */
+       ulTxDescriptorToClear = 0ul;
+
+       for( x = 0; x < configNUM_TX_DESCRIPTORS; x++ )
+       {
+               #if( ipconfigZERO_COPY_TX_DRIVER != 0 )
+               {
+                       /* Nothing to do, B1ADD will be set when data is ready to transmit.
+                       Currently the memset above will have set it to NULL. */
+               }
+               #else
+               {
+                       /* Allocate a buffer to the Tx descriptor.  This is the most basic
+                       way of creating a driver as the data is then copied into the
+                       buffer. */
+                       xDMATxDescriptors[ x ].B1ADD = ( uint32_t ) pvPortMalloc( ipTOTAL_ETHERNET_FRAME_SIZE );
+
+                       /* Use an assert to check the allocation as +TCP applications will
+                       often not use a malloc() failed hook as the TCP stack will recover
+                       from allocation failures. */
+                       configASSERT( xDMATxDescriptors[ x ].B1ADD );
+               }
+               #endif
+
+               /* Buffers hold an entire frame so all buffers are both the start and
+               end of a frame. */
+               /* TDES_ENH_TCH     Second Address Chained. */
+               /* TDES_ENH_CIC(n)  Checksum Insertion Control, tried but it does not work for the LPC18xx... */
+               /* TDES_ENH_FS      First Segment. */
+               /* TDES_ENH_LS      Last Segment. */
+               /* TDES_ENH_IC      Interrupt on Completion. */
+               xDMATxDescriptors[ x ].CTRLSTAT = TDES_ENH_TCH | TDES_ENH_CIC( 3 ) | TDES_ENH_FS | TDES_ENH_LS | TDES_ENH_IC;
+               xDMATxDescriptors[ x ].B2ADD = ( uint32_t ) &xDMATxDescriptors[ x + 1 ];
+       }
+
+       xDMATxDescriptors[ configNUM_TX_DESCRIPTORS - 1 ].CTRLSTAT |= TDES_ENH_TER;
+       xDMATxDescriptors[ configNUM_TX_DESCRIPTORS - 1 ].B2ADD = ( uint32_t ) &xDMATxDescriptors[ 0 ];
+
+       /* Point the DMA to the base of the descriptor list. */
+       LPC_ETHERNET->DMA_TRANS_DES_ADDR = ( uint32_t ) xDMATxDescriptors;
+}
+/*-----------------------------------------------------------*/
+
+static void prvSetupRxDescriptors( void )
+{
+BaseType_t x;
+#if( ipconfigZERO_COPY_RX_DRIVER != 0 )
+       NetworkBufferDescriptor_t *pxNetworkBuffer;
+#endif
+
+       /* Index to the next Rx descriptor to use. */
+       ulNextRxDescriptorToProcess = 0;
+
+       /* Clear RX descriptor list. */
+       memset( ( void * )  xDMARxDescriptors, 0, sizeof( xDMARxDescriptors ) );
+
+       for( x = 0; x < configNUM_RX_DESCRIPTORS; x++ )
+       {
+               /* Allocate a buffer of the largest     possible frame size as it is not
+               known what size received frames will be. */
+
+               #if( ipconfigZERO_COPY_RX_DRIVER != 0 )
+               {
+                       pxNetworkBuffer = pxGetNetworkBufferWithDescriptor( ipTOTAL_ETHERNET_FRAME_SIZE, 0 );
+
+                       /* During start-up there should be enough Network Buffers available,
+                       so it is safe to use configASSERT().
+                       In case this assert fails, please check: configNUM_RX_DESCRIPTORS,
+                       ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS, and in case BufferAllocation_2.c
+                       is included, check the amount of available heap. */
+                       configASSERT( pxNetworkBuffer != NULL );
+
+                       /* Pass the actual buffer to DMA. */
+                       xDMARxDescriptors[ x ].B1ADD = ( uint32_t ) pxNetworkBuffer->pucEthernetBuffer;
+               }
+               #else
+               {
+                       /* All DMA descriptors are populated with permanent memory blocks.
+                       Their contents will be copy to Network Buffers. */
+                       xDMARxDescriptors[ x ].B1ADD = ( uint32_t ) pvPortMalloc( ipTOTAL_ETHERNET_FRAME_SIZE );
+               }
+               #endif /* ipconfigZERO_COPY_RX_DRIVER */
+
+               /* Use an assert to check the allocation as +TCP applications will often
+               not use a malloc failed hook as the TCP stack will recover from
+               allocation failures. */
+               configASSERT( xDMARxDescriptors[ x ].B1ADD );
+
+               xDMARxDescriptors[ x ].B2ADD = ( uint32_t ) &( xDMARxDescriptors[ x + 1 ] );
+               xDMARxDescriptors[ x ].CTRL = ( uint32_t ) RDES_ENH_BS1( ipTOTAL_ETHERNET_FRAME_SIZE ) | RDES_ENH_RCH;
+
+               /* The descriptor is available for use by the DMA. */
+               xDMARxDescriptors[ x ].STATUS = RDES_OWN;
+       }
+
+       /* RDES_ENH_RER  Receive End of Ring. */
+       xDMARxDescriptors[ ( configNUM_RX_DESCRIPTORS - 1 ) ].CTRL |= RDES_ENH_RER;
+       xDMARxDescriptors[ configNUM_RX_DESCRIPTORS - 1 ].B2ADD = ( uint32_t ) &( xDMARxDescriptors[ 0 ] );
+
+       /* Point the DMA to the base of the descriptor list. */
+       LPC_ETHERNET->DMA_REC_DES_ADDR = ( uint32_t ) xDMARxDescriptors;
+}
+/*-----------------------------------------------------------*/
+configPLACE_IN_SECTION_RAM
+static void prvRemoveTrailingBytes( NetworkBufferDescriptor_t *pxDescriptor )
+{
+size_t xExpectedLength;
+IPPacket_t *pxIPPacket;
+
+       pxIPPacket = ( IPPacket_t * ) pxDescriptor->pucEthernetBuffer;
+       /* Look at the actual length of the packet, translate it to a host-endial notation. */
+       xExpectedLength = sizeof( EthernetHeader_t ) + ( size_t ) FreeRTOS_htons( pxIPPacket->xIPHeader.usLength );
+
+       if( xExpectedLength == ( pxDescriptor->xDataLength + 4 ) )
+       {
+               pxDescriptor->xDataLength -= 4;
+       }
+       else
+       {
+               if( pxDescriptor->xDataLength > xExpectedLength )
+               {
+                       pxDescriptor->xDataLength = ( size_t ) xExpectedLength;
+               }
+       }
+}
+/*-----------------------------------------------------------*/
+configPLACE_IN_SECTION_RAM
+BaseType_t xGetPhyLinkStatus( void )
+{
+BaseType_t xReturn;
+
+       if( ( ulPHYLinkStatus & PHY_LINK_CONNECTED ) == 0 )
+       {
+               xReturn = pdFALSE;
+       }
+       else
+       {
+               xReturn = pdTRUE;
+       }
+
+       return xReturn;
+}
+/*-----------------------------------------------------------*/
+
+uint32_t ulDataAvailable;
+
+configPLACE_IN_SECTION_RAM
+static BaseType_t prvNetworkInterfaceInput()
+{
+BaseType_t xResult = pdFALSE;
+uint32_t ulStatus;
+eFrameProcessingResult_t eResult;
+const TickType_t xDescriptorWaitTime = pdMS_TO_TICKS( 250 );
+const UBaseType_t uxMinimumBuffersRemaining = 3UL;
+uint16_t usLength;
+NetworkBufferDescriptor_t *pxDescriptor;
+#if( ipconfigZERO_COPY_RX_DRIVER != 0 )
+       NetworkBufferDescriptor_t *pxNewDescriptor;
+#endif /* ipconfigZERO_COPY_RX_DRIVER */
+#if( ipconfigUSE_LINKED_RX_MESSAGES == 0 )
+       IPStackEvent_t xRxEvent = { eNetworkRxEvent, NULL };
+#endif
+
+       /* Process each descriptor that is not still in use by the DMA. */
+       ulStatus = xDMARxDescriptors[ ulNextRxDescriptorToProcess ].STATUS;
+       if( ( ulStatus & RDES_OWN ) == 0 )
+       {
+               /* Check packet for errors */
+               if( ( ulStatus & nwRX_STATUS_ERROR_BITS ) != 0 )
+               {
+                       /* There is some reception error. */
+                       intCount[ 3 ]++;
+                       /* Clear error bits. */
+                       ulStatus &= ~( ( uint32_t )nwRX_STATUS_ERROR_BITS );
+               }
+               else
+               {
+                       xResult++;
+
+                       eResult = ipCONSIDER_FRAME_FOR_PROCESSING( ( const uint8_t * const ) ( xDMARxDescriptors[ ulNextRxDescriptorToProcess ].B1ADD ) );
+                       if( eResult == eProcessBuffer )
+                       {
+                               if( ( ulPHYLinkStatus & PHY_LINK_CONNECTED ) == 0 )
+                               {
+                                       ulPHYLinkStatus |= PHY_LINK_CONNECTED;
+                                       FreeRTOS_printf( ( "prvEMACHandlerTask: PHY LS now %d (message received)\n", ( ulPHYLinkStatus & PHY_LINK_CONNECTED ) != 0 ) );
+                               }
+
+                       #if( ipconfigZERO_COPY_RX_DRIVER != 0 )
+                               if( uxGetNumberOfFreeNetworkBuffers() > uxMinimumBuffersRemaining )
+                               {
+                                       pxNewDescriptor = pxGetNetworkBufferWithDescriptor( ipTOTAL_ETHERNET_FRAME_SIZE, xDescriptorWaitTime );
+                               }
+                               else
+                               {
+                                       /* Too risky to allocate a new Network Buffer. */
+                                       pxNewDescriptor = NULL;
+                               }
+                               if( pxNewDescriptor != NULL )
+                       #else
+                               if( uxGetNumberOfFreeNetworkBuffers() > uxMinimumBuffersRemaining )
+                       #endif /* ipconfigZERO_COPY_RX_DRIVER */
+                               {
+                       #if( ipconfigZERO_COPY_RX_DRIVER != 0 )
+                               const uint8_t *pucBuffer;
+                       #endif
+
+                                       /* Get the actual length. */
+                                       usLength = RDES_FLMSK( ulStatus );
+
+                                       #if( ipconfigZERO_COPY_RX_DRIVER != 0 )
+                                       {
+                                               /* Replace the character buffer 'B1ADD'. */
+                                               pucBuffer = ( const uint8_t * const ) ( xDMARxDescriptors[ ulNextRxDescriptorToProcess ].B1ADD );
+                                               xDMARxDescriptors[ ulNextRxDescriptorToProcess ].B1ADD = ( uint32_t ) pxNewDescriptor->pucEthernetBuffer;
+
+                                               /* 'B1ADD' contained the address of a 'pucEthernetBuffer' that
+                                               belongs to a Network Buffer.  Find the original Network Buffer. */
+                                               pxDescriptor = pxPacketBuffer_to_NetworkBuffer( pucBuffer );
+                                               /* This zero-copy driver makes sure that every 'xDMARxDescriptors' contains
+                                               a reference to a Network Buffer at any time.
+                                               In case it runs out of Network Buffers, a DMA buffer won't be replaced,
+                                               and the received messages is dropped. */
+                                               configASSERT( pxDescriptor != NULL );
+                                       }
+                                       #else
+                                       {
+                                               /* Create a buffer of exactly the required length. */
+                                               pxDescriptor = pxGetNetworkBufferWithDescriptor( usLength, xDescriptorWaitTime );
+                                       }
+                                       #endif /* ipconfigZERO_COPY_RX_DRIVER */
+
+                                       if( pxDescriptor != NULL )
+                                       {
+                                               pxDescriptor->xDataLength = ( size_t ) usLength;
+                                               #if( ipconfigZERO_COPY_RX_DRIVER == 0 )
+                                               {
+                                                       /* Copy the data into the allocated buffer. */
+                                                       memcpy( ( void * ) pxDescriptor->pucEthernetBuffer, ( void * ) xDMARxDescriptors[ ulNextRxDescriptorToProcess ].B1ADD, usLength );
+                                               }
+                                               #endif /* ipconfigZERO_COPY_RX_DRIVER */
+                                               /* It is possible that more data was copied than
+                                               actually makes up the frame.  If this is the case
+                                               adjust the length to remove any trailing bytes. */
+                                               prvRemoveTrailingBytes( pxDescriptor );
+
+                                               /* Pass the data to the TCP/IP task for processing. */
+                                               xRxEvent.pvData = ( void * ) pxDescriptor;
+                                               if( xSendEventStructToIPTask( &xRxEvent, xDescriptorWaitTime ) == pdFALSE )
+                                               {
+                                                       /* Could not send the descriptor into the TCP/IP
+                                                       stack, it must be released. */
+                                                       vReleaseNetworkBufferAndDescriptor( pxDescriptor );
+                                               }
+                                               else
+                                               {
+                                                       iptraceNETWORK_INTERFACE_RECEIVE();
+
+                                                       /* The data that was available at the top of this
+                                                       loop has been sent, so is no longer available. */
+                                                       ulDataAvailable = pdFALSE;
+                                               }
+                                       }
+                               }
+                       }
+                       else
+                       {
+                               /* The packet is discarded as uninteresting. */
+                               ulDataAvailable = pdFALSE;
+                       }
+                       /* Got here because received data was sent to the IP task or the
+                       data contained an error and was discarded.  Give the descriptor
+                       back to the DMA. */
+                       xDMARxDescriptors[ ulNextRxDescriptorToProcess ].STATUS = ulStatus | RDES_OWN;
+
+                       /* Move onto the next descriptor. */
+                       ulNextRxDescriptorToProcess++;
+                       if( ulNextRxDescriptorToProcess >= configNUM_RX_DESCRIPTORS )
+                       {
+                               ulNextRxDescriptorToProcess = 0;
+                       }
+
+                       ulStatus = xDMARxDescriptors[ ulNextRxDescriptorToProcess ].STATUS;
+               } /* if( ( ulStatus & nwRX_STATUS_ERROR_BITS ) != 0 ) */
+       } /* if( ( ulStatus & RDES_OWN ) == 0 ) */
+
+       /* Restart receive polling. */
+       LPC_ETHERNET->DMA_REC_POLL_DEMAND = 1;
+
+       return xResult;
+}
+/*-----------------------------------------------------------*/
+
+configPLACE_IN_SECTION_RAM
+void NETWORK_IRQHandler( void )
+{
+BaseType_t xHigherPriorityTaskWoken = pdFALSE;
+uint32_t ulDMAStatus;
+const uint32_t ulRxInterruptMask =
+       DMA_ST_RI |             /* Receive interrupt */
+       DMA_ST_RU;              /* Receive buffer unavailable */
+const uint32_t ulTxInterruptMask =
+       DMA_ST_TI |             /* Transmit interrupt */
+       DMA_ST_TPS;             /* Transmit process stopped */
+
+       configASSERT( xRxHanderTask );
+
+       /* Get pending interrupts. */
+       ulDMAStatus = LPC_ETHERNET->DMA_STAT;
+
+       /* RX group interrupt(s). */
+       if( ( ulDMAStatus & ulRxInterruptMask ) != 0x00 )
+       {
+               /* Remember that an RX event has happened. */
+               ulISREvents |= EMAC_IF_RX_EVENT;
+               vTaskNotifyGiveFromISR( xRxHanderTask, &xHigherPriorityTaskWoken );
+               intCount[ 0 ]++;
+       }
+
+       /* TX group interrupt(s). */
+       if( ( ulDMAStatus & ulTxInterruptMask ) != 0x00 )
+       {
+               /* Remember that a TX event has happened. */
+               ulISREvents |= EMAC_IF_TX_EVENT;
+               vTaskNotifyGiveFromISR( xRxHanderTask, &xHigherPriorityTaskWoken );
+               intCount[ 1 ]++;
+       }
+
+       /* Test for 'Abnormal interrupt summary'. */
+       if( ( ulDMAStatus & DMA_ST_AIE ) != 0x00 )
+       {
+               /* The trace macro must be written such that it can be called from
+               an interrupt. */
+               iptraceETHERNET_RX_EVENT_LOST();
+       }
+
+       /* Clear pending interrupts */
+       LPC_ETHERNET->DMA_STAT = ulDMAStatus;
+
+       /* Context switch needed? */
+       portYIELD_FROM_ISR( xHigherPriorityTaskWoken );
+}
+/*-----------------------------------------------------------*/
+
+static BaseType_t prvSetLinkSpeed( void )
+{
+BaseType_t xReturn = pdFAIL;
+TickType_t xTimeOnEntering;
+uint32_t ulPhyStatus;
+const TickType_t xAutoNegotiateDelay = pdMS_TO_TICKS( 5000UL );
+
+       /* Ensure polling does not starve lower priority tasks by temporarily
+       setting the priority of this task to that of the idle task. */
+       vTaskPrioritySet( NULL, tskIDLE_PRIORITY );
+
+       xTimeOnEntering = xTaskGetTickCount();
+       do
+       {
+               ulPhyStatus = lpcPHYStsPoll();
+               if( ( ulPhyStatus & PHY_LINK_CONNECTED ) != 0x00 )
+               {
+                       /* Set interface speed and duplex. */
+                       if( ( ulPhyStatus & PHY_LINK_SPEED100 ) != 0x00 )
+                       {
+                               Chip_ENET_SetSpeed( LPC_ETHERNET, 1 );
+                       }
+                       else
+                       {
+                               Chip_ENET_SetSpeed( LPC_ETHERNET, 0 );
+                       }
+
+                       if( ( ulPhyStatus & PHY_LINK_FULLDUPLX ) != 0x00 )
+                       {
+                               Chip_ENET_SetDuplex( LPC_ETHERNET, true );
+                       }
+                       else
+                       {
+                               Chip_ENET_SetDuplex( LPC_ETHERNET, false );
+                       }
+
+                       xReturn = pdPASS;
+                       break;
+               }
+       } while( ( xTaskGetTickCount() - xTimeOnEntering ) < xAutoNegotiateDelay );
+
+       /* Reset the priority of this task back to its original value. */
+       vTaskPrioritySet( NULL, ipconfigIP_TASK_PRIORITY );
+
+       return xReturn;
+}
+/*-----------------------------------------------------------*/
+
+static uint32_t prvGenerateCRC32( const uint8_t *ucAddress )
+{
+unsigned int j;
+const uint32_t Polynomial = 0xEDB88320;
+uint32_t crc = ~0ul;
+const uint8_t *pucCurrent = ( const uint8_t * ) ucAddress;
+const uint8_t *pucLast = pucCurrent + 6;
+
+    /* Calculate  normal CRC32 */
+    while( pucCurrent < pucLast )
+    {
+        crc ^= *( pucCurrent++ );
+        for( j = 0; j < 8; j++ )
+        {
+            if( ( crc & 1 ) != 0 )
+            {
+                crc = (crc >> 1) ^ Polynomial;
+            }
+            else
+            {
+                crc >>= 1;
+            }
+        }
+    }
+    return ~crc;
+}
+/*-----------------------------------------------------------*/
+
+static uint32_t prvGetHashIndex( const uint8_t *ucAddress )
+{
+uint32_t ulCrc = prvGenerateCRC32( ucAddress );
+uint32_t ulIndex = 0ul;
+BaseType_t xCount = 6;
+
+    /* Take the lowest 6 bits of the CRC32 and reverse them */
+    while( xCount-- )
+    {
+        ulIndex <<= 1;
+        ulIndex |= ( ulCrc & 1 );
+        ulCrc >>= 1;
+    }
+
+    /* This is the has value of 'ucAddress' */
+    return ulIndex;
+}
+/*-----------------------------------------------------------*/
+
+static void prvAddMACAddress( const uint8_t* ucMacAddress )
+{
+BaseType_t xIndex;
+
+    xIndex = prvGetHashIndex( ucMacAddress );
+    if( xIndex >= 32 )
+    {
+        LPC_ETHERNET->MAC_HASHTABLE_HIGH |= ( 1u << ( xIndex - 32 ) );
+    }
+    else
+    {
+        LPC_ETHERNET->MAC_HASHTABLE_LOW |= ( 1u << xIndex );
+    }
+}
+/*-----------------------------------------------------------*/
+
+configPLACE_IN_SECTION_RAM
+static void prvEMACHandlerTask( void *pvParameters )
+{
+TimeOut_t xPhyTime;
+TickType_t xPhyRemTime;
+UBaseType_t uxLastMinBufferCount = 0;
+UBaseType_t uxCurrentCount;
+BaseType_t xResult = 0;
+uint32_t ulStatus;
+const TickType_t xBlockTime = pdMS_TO_TICKS( 5000ul );
+
+       /* Remove compiler warning about unused parameter. */
+       ( void ) pvParameters;
+
+       /* A possibility to set some additional task properties. */
+       iptraceEMAC_TASK_STARTING();
+
+       vTaskSetTimeOutState( &xPhyTime );
+       xPhyRemTime = pdMS_TO_TICKS( PHY_LS_LOW_CHECK_TIME_MS );
+
+       for( ;; )
+       {
+               uxCurrentCount = uxGetMinimumFreeNetworkBuffers();
+               if( uxLastMinBufferCount != uxCurrentCount )
+               {
+                       /* The logging produced below may be helpful
+                       while tuning +TCP: see how many buffers are in use. */
+                       uxLastMinBufferCount = uxCurrentCount;
+                       FreeRTOS_printf( ( "Network buffers: %lu lowest %lu\n",
+                               uxGetNumberOfFreeNetworkBuffers(), uxCurrentCount ) );
+               }
+
+               #if( ipconfigCHECK_IP_QUEUE_SPACE != 0 )
+               {
+               static UBaseType_t uxLastMinQueueSpace = 0;
+
+                       uxCurrentCount = uxGetMinimumIPQueueSpace();
+                       if( uxLastMinQueueSpace != uxCurrentCount )
+                       {
+                               /* The logging produced below may be helpful
+                               while tuning +TCP: see how many buffers are in use. */
+                               uxLastMinQueueSpace = uxCurrentCount;
+                               FreeRTOS_printf( ( "Queue space: lowest %lu\n", uxCurrentCount ) );
+                       }
+               }
+               #endif /* ipconfigCHECK_IP_QUEUE_SPACE */
+
+               ulTaskNotifyTake( pdTRUE, xBlockTime );
+
+               xResult = ( BaseType_t ) 0;
+
+               if( ( ulISREvents & EMAC_IF_TX_EVENT ) != 0 )
+               {
+                       /* Code to release TX buffers if zero-copy is used. */
+                       ulISREvents &= ~EMAC_IF_TX_EVENT;
+                       {
+                               /* Check if DMA packets have been delivered. */
+                               vClearTXBuffers();
+                       }
+               }
+
+               if( ( ulISREvents & EMAC_IF_RX_EVENT ) != 0 )
+               {
+                       ulISREvents &= ~EMAC_IF_RX_EVENT;
+
+                       xResult = prvNetworkInterfaceInput();
+                       if( xResult > 0 )
+                       {
+                               while( prvNetworkInterfaceInput() > 0 )
+                               {
+                               }
+                       }
+               }
+
+               if( xResult > 0 )
+               {
+                       /* A packet was received. No need to check for the PHY status now,
+                       but set a timer to check it later on. */
+                       vTaskSetTimeOutState( &xPhyTime );
+                       xPhyRemTime = pdMS_TO_TICKS( PHY_LS_HIGH_CHECK_TIME_MS );
+                       xResult = 0;
+               }
+               else if( xTaskCheckForTimeOut( &xPhyTime, &xPhyRemTime ) != pdFALSE )
+               {
+                       ulStatus = lpcPHYStsPoll();
+
+                       if( ( ulPHYLinkStatus & PHY_LINK_CONNECTED ) != ( ulStatus & PHY_LINK_CONNECTED ) )
+                       {
+                               ulPHYLinkStatus = ulStatus;
+                               FreeRTOS_printf( ( "prvEMACHandlerTask: PHY LS now %d (polled PHY)\n", ( ulPHYLinkStatus & PHY_LINK_CONNECTED ) != 0 ) );
+                       }
+
+                       vTaskSetTimeOutState( &xPhyTime );
+                       if( ( ulPHYLinkStatus & PHY_LINK_CONNECTED ) != 0 )
+                       {
+                               xPhyRemTime = pdMS_TO_TICKS( PHY_LS_HIGH_CHECK_TIME_MS );
+                       }
+                       else
+                       {
+                               xPhyRemTime = pdMS_TO_TICKS( PHY_LS_LOW_CHECK_TIME_MS );
+                       }
+               }
+       }
+}
+/*-----------------------------------------------------------*/
index 86a7f91213243fbbd5dba0125db19d85986326ed..cde8e0e3dcaf13bab0078b01f22aba5e31a2ef0d 100644 (file)
@@ -1,3 +1,3 @@
-NetworkInterface.c:\r
-Requires NXP's LPCOpen library and was developed on an LPC1830 and LPC1835 Xplorer\r
+NetworkInterface.c:
+Requires NXP's LPCOpen library and was developed on an LPC1830 and LPC1835 Xplorer
 boards from NGX.
\ No newline at end of file
index e759141cc34537942c595efe1fb5c12d58e4bdf1..6b926c8119141b8cbf3658884f137921bea87923 100644 (file)
-/*\r
-FreeRTOS+TCP V2.0.11\r
-Copyright (C) 2018 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://aws.amazon.com/freertos\r
- http://www.FreeRTOS.org\r
-*/\r
-\r
-/* FreeRTOS includes. */\r
-#include "FreeRTOS.h"\r
-#include "list.h"\r
-#include "queue.h"\r
-#include "semphr.h"\r
-#include "task.h"\r
-\r
-/* FreeRTOS+TCP includes. */\r
-#include "FreeRTOS_IP.h"\r
-#include "FreeRTOS_Sockets.h"\r
-#include "FreeRTOS_IP_Private.h"\r
-#include "NetworkBufferManagement.h"\r
-#include "NetworkInterface.h"\r
-\r
-\r
-#include "m480_eth.h"\r
-\r
-/* If ipconfigETHERNET_DRIVER_FILTERS_FRAME_TYPES is set to 1, then the Ethernet\r
-driver will filter incoming packets and only pass the stack those packets it\r
-considers need processing. */\r
-#if( ipconfigETHERNET_DRIVER_FILTERS_FRAME_TYPES == 0 )\r
-#define ipCONSIDER_FRAME_FOR_PROCESSING( pucEthernetBuffer ) eProcessBuffer\r
-#else\r
-#define ipCONSIDER_FRAME_FOR_PROCESSING( pucEthernetBuffer ) eConsiderFrameForProcessing( ( pucEthernetBuffer ) )\r
-#endif\r
-\r
-/* Default the size of the stack used by the EMAC deferred handler task to twice\r
-the size of the stack used by the idle task - but allow this to be overridden in\r
-FreeRTOSConfig.h as configMINIMAL_STACK_SIZE is a user definable constant. */\r
-#ifndef configEMAC_TASK_STACK_SIZE\r
-    #define configEMAC_TASK_STACK_SIZE ( 2 * configMINIMAL_STACK_SIZE )\r
-#endif\r
-\r
-\r
-static SemaphoreHandle_t xTXMutex = NULL;\r
-\r
-/* The handle of the task that processes Rx packets.  The handle is required so\r
-the task can be notified when new packets arrive. */\r
-static TaskHandle_t xRxHanderTask = NULL;\r
-static TimerHandle_t xPhyHandlerTask = NULL;\r
-/*\r
- * A task that processes received frames.\r
- */\r
-static void prvEMACHandlerTask( void *pvParameters );\r
-static void prvPhyTmrCallback( TimerHandle_t xTimer );\r
-\r
-/* The size of each buffer when BufferAllocation_1 is used:\r
-http://www.freertos.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/Embedded_Ethernet_Buffer_Management.html */\r
-\r
-#define niBUFFER_1_PACKET_SIZE        1536\r
-#ifdef __ICCARM__\r
-#pragma data_alignment=4\r
-static uint8_t ucNetworkPackets[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS * niBUFFER_1_PACKET_SIZE ]\r
-#else\r
-static uint8_t ucNetworkPackets[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS * niBUFFER_1_PACKET_SIZE ] __attribute__ ((aligned(4)));\r
-#endif\r
-\r
-BaseType_t xNetworkInterfaceInitialise( void )\r
-{\r
-    uint8_t hwaddr[6];\r
-    BaseType_t xReturn = pdPASS;\r
-\r
-    /* Init ETH */\r
-    numaker_mac_address(hwaddr);\r
-    FreeRTOS_UpdateMACAddress(hwaddr);\r
-    FreeRTOS_printf( ("mac address %02x-%02x-%02x-%02x-%02x-%02x \r\n", hwaddr[0], hwaddr[1],hwaddr[2],hwaddr[3],hwaddr[4],hwaddr[5]) );\r
-    /* Enable clock & set EMAC configuration         */\r
-    /* Enable MAC and DMA transmission and reception */\r
-    if( numaker_eth_init(hwaddr) < 0)\r
-    {\r
-        xReturn = pdFAIL;\r
-    } else {\r
-        xReturn = pdPASS;\r
-        /* Guard against the task being created more than once and the\r
-        descriptors being initialized more than once. */\r
-        /* Timer task to monitor PHY Link status */\r
-        if( xPhyHandlerTask == NULL )\r
-        {\r
-            xPhyHandlerTask = xTimerCreate( "TimerPhy",  pdMS_TO_TICKS( 1000 ), pdTRUE, 0, prvPhyTmrCallback );\r
-            configASSERT(xPhyHandlerTask);\r
-            xReturn = xTimerStart( xPhyHandlerTask, 0 ) ;\r
-            configASSERT( xReturn );\r
-        }\r
-        /* Rx task */\r
-        if( xRxHanderTask == NULL )\r
-        {\r
-            xReturn = xTaskCreate( prvEMACHandlerTask, "EMAC", configEMAC_TASK_STACK_SIZE, NULL, configMAX_PRIORITIES - 1, &xRxHanderTask );\r
-            configASSERT( xReturn );\r
-        }\r
-        \r
-        if( xTXMutex == NULL )\r
-        {\r
-            xTXMutex = xSemaphoreCreateMutex();\r
-            configASSERT( xTXMutex );\r
-        }        \r
-    }\r
-\r
-        NVIC_SetPriority( EMAC_RX_IRQn, configMAC_INTERRUPT_PRIORITY );\r
-        NVIC_SetPriority( EMAC_TX_IRQn, configMAC_INTERRUPT_PRIORITY );\r
-\r
-        numaker_eth_enable_interrupts();\r
-\r
-        FreeRTOS_printf( ("ETH-RX priority:%d\n",NVIC_GetPriority( EMAC_RX_IRQn)) );\r
-\r
-    return xReturn;\r
-}\r
-\r
-BaseType_t xNetworkInterfaceOutput( NetworkBufferDescriptor_t * const pxDescriptor, BaseType_t xReleaseAfterSend )\r
-{\r
-    uint8_t *buffer=NULL;\r
-//    FreeRTOS_printf(("<-- dataLength=%d\n",pxDescriptor->xDataLength));\r
-    if( pxDescriptor->xDataLength >= PACKET_BUFFER_SIZE )\r
-    {\r
-        FreeRTOS_printf(("TX buffer length %d over %d\n", pxDescriptor->xDataLength, PACKET_BUFFER_SIZE));\r
-        return pdFALSE;\r
-    }\r
-    \r
-    buffer = numaker_eth_get_tx_buf();\r
-    if( buffer == NULL )\r
-    {\r
-        NU_DEBUGF(("Eth TX slots are busy\n"));\r
-        return pdFALSE;\r
-    }    \r
-    \r
-    /* Get exclusive access */\r
-    xSemaphoreTake(xTXMutex, portMAX_DELAY);\r
-    NU_DEBUGF(("%s ... buffer=0x%x\r\n",__FUNCTION__, buffer));   \r
-    //SendData: pt = pxDescriptor->pucBuffer, length = pxDescriptor->xDataLength\r
-    memcpy(buffer, pxDescriptor->pucEthernetBuffer, pxDescriptor->xDataLength);\r
-    numaker_eth_trigger_tx(pxDescriptor->xDataLength, NULL);\r
-    /* Call the standard trace macro to log the send event. */\r
-    iptraceNETWORK_INTERFACE_TRANSMIT();\r
-\r
-    if( xReleaseAfterSend != pdFALSE )\r
-    {\r
-        /* It is assumed SendData() copies the data out of the FreeRTOS+TCP Ethernet\r
-        buffer.  The Ethernet buffer is therefore no longer needed, and must be\r
-        freed for re-use. */\r
-        vReleaseNetworkBufferAndDescriptor( pxDescriptor );\r
-    }\r
-\r
-    xSemaphoreGive(xTXMutex);\r
-    \r
-    return pdTRUE;\r
-}\r
-\r
-\r
-void vNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] )\r
-{\r
-\r
-    uint8_t *ucRAMBuffer = ucNetworkPackets;\r
-    uint32_t ul;\r
-\r
-    for( ul = 0; ul < ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS; ul++ )\r
-    {\r
-        pxNetworkBuffers[ ul ].pucEthernetBuffer = ucRAMBuffer + ipBUFFER_PADDING;\r
-        *( ( unsigned * ) ucRAMBuffer ) = ( unsigned ) ( &( pxNetworkBuffers[ ul ] ) );\r
-        ucRAMBuffer += niBUFFER_1_PACKET_SIZE;\r
-    }\r
-}\r
-\r
-\r
-BaseType_t xGetPhyLinkStatus( void )\r
-{\r
-    BaseType_t xReturn;\r
-\r
-    if( numaker_eth_link_ok() )\r
-    {\r
-        xReturn = pdPASS;\r
-    }\r
-    else\r
-    {\r
-        xReturn = pdFAIL;\r
-    }\r
-\r
-    return xReturn;\r
-}\r
-\r
-static void prvPhyTmrCallback( TimerHandle_t xTimer )\r
-{\r
-    IPStackEvent_t xRxEvent;\r
-    static BaseType_t lastLink = pdFAIL;\r
-    BaseType_t currLink = xGetPhyLinkStatus();\r
-    if( currLink != lastLink )\r
-    {\r
-        FreeRTOS_printf(("PHY Link %s\n", (currLink) ? "Up" : "Down"));\r
-        if( !currLink )\r
-        {\r
-            xRxEvent.eEventType = eNetworkDownEvent;\r
-            xSendEventStructToIPTask( &xRxEvent, 0 );\r
-        }\r
-        lastLink = currLink;\r
-    }\r
-\r
-}    \r
-\r
-    \r
-static void prvEMACHandlerTask( void *pvParameters )\r
-{\r
-    TimeOut_t xPhyTime;\r
-    TickType_t xPhyRemTime;\r
-    UBaseType_t uxLastMinBufferCount = 0;\r
-    UBaseType_t uxCurrentCount;\r
-    BaseType_t xResult = 0;\r
-    uint32_t ulStatus;\r
-    uint16_t dataLength = 0;\r
-    uint8_t *buffer = NULL;\r
-    NetworkBufferDescriptor_t *pxBufferDescriptor = NULL;\r
-    IPStackEvent_t xRxEvent;\r
-    const TickType_t xBlockTime = pdMS_TO_TICKS( 5000ul );\r
-    \r
-    /* Remove compiler warnings about unused parameters. */\r
-    ( void ) pvParameters;\r
-    /* A possibility to set some additional task properties. */\r
-    \r
-    for( ;; )\r
-    {\r
-        uxCurrentCount = uxGetMinimumFreeNetworkBuffers();\r
-        if( uxLastMinBufferCount != uxCurrentCount )\r
-        {\r
-            /* The logging produced below may be helpful\r
-            while tuning +TCP: see how many buffers are in use. */\r
-            uxLastMinBufferCount = uxCurrentCount;\r
-            FreeRTOS_printf( ( "Network buffers: %lu lowest %lu\n",\r
-                uxGetNumberOfFreeNetworkBuffers(), uxCurrentCount ) );\r
-        }\r
-        \r
-        /* No events to process now, wait for the next. */\r
-        ulTaskNotifyTake( pdFALSE, portMAX_DELAY ); \r
-        while(1)\r
-        {    \r
-            /* get received frame */\r
-            if ( numaker_eth_get_rx_buf(&dataLength, &buffer) != 0) {\r
-            /* The event was lost because a network buffer was not available.\r
-            Call the standard trace macro to log the occurrence. */\r
-                iptraceETHERNET_RX_EVENT_LOST();\r
-                break;\r
-            }        \r
-\r
-            /* Allocate a network buffer descriptor that points to a buffer\r
-            large enough to hold the received frame.  As this is the simple\r
-            rather than efficient example the received data will just be copied\r
-            into this buffer. */\r
-\r
-            pxBufferDescriptor = pxGetNetworkBufferWithDescriptor( PACKET_BUFFER_SIZE, 0 );\r
-\r
-            if( pxBufferDescriptor != NULL )\r
-            {        \r
-                memcpy( pxBufferDescriptor->pucEthernetBuffer, buffer, dataLength );\r
-//                          FreeRTOS_printf(("--> dataLength=%d\n",dataLength));\r
-                pxBufferDescriptor->xDataLength = dataLength;            \r
-            } else {\r
-                numaker_eth_rx_next();\r
-                iptraceETHERNET_RX_EVENT_LOST();\r
-                break;\r
-            }\r
-            /* The event about to be sent to the TCP/IP is an Rx event. */\r
-            xRxEvent.eEventType = eNetworkRxEvent;\r
-\r
-            /* pvData is used to point to the network buffer descriptor that\r
-                now references the received data. */\r
-            xRxEvent.pvData = ( void * ) pxBufferDescriptor;\r
-\r
-            /* Send the data to the TCP/IP stack. */\r
-            if( xSendEventStructToIPTask( &xRxEvent, 0 ) == pdFALSE )\r
-            {\r
-                /* The buffer could not be sent to the IP task so the buffer\r
-                 must be released. */\r
-                vReleaseNetworkBufferAndDescriptor( pxBufferDescriptor );\r
-\r
-                /* Make a call to the standard trace macro to log the\r
-                        occurrence. */\r
-\r
-                iptraceETHERNET_RX_EVENT_LOST();\r
-            } else\r
-            {\r
-                /* The message was successfully sent to the TCP/IP stack.\r
-                Call the standard trace macro to log the occurrence. */\r
-                iptraceNETWORK_INTERFACE_RECEIVE();\r
-            } \r
-                numaker_eth_rx_next();\r
-        }    \r
-        numaker_eth_trigger_rx();\r
-    }\r
-}\r
-\r
-void xNetworkCallback(char event)\r
-{\r
-    BaseType_t xHigherPriorityTaskWoken = pdFALSE;\r
-    switch (event)\r
-    {\r
-      case 'R': //For RX event\r
-    /* Wakeup the prvEMACHandlerTask. */\r
-        if( xRxHanderTask != NULL )\r
-        {\r
-            vTaskNotifyGiveFromISR( xRxHanderTask, &xHigherPriorityTaskWoken );\r
-            portYIELD_FROM_ISR( xHigherPriorityTaskWoken );\r
-        }\r
-        break;\r
-      case 'T': //For TX event\r
-        // ack of tx done, no-op in this stage\r
-        break;\r
-      default:\r
-        break;\r
-    }\r
-}\r
+/*
+FreeRTOS+TCP V2.0.11
+Copyright (C) 2018 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
+*/
+
+/* FreeRTOS includes. */
+#include "FreeRTOS.h"
+#include "list.h"
+#include "queue.h"
+#include "semphr.h"
+#include "task.h"
+
+/* FreeRTOS+TCP includes. */
+#include "FreeRTOS_IP.h"
+#include "FreeRTOS_Sockets.h"
+#include "FreeRTOS_IP_Private.h"
+#include "NetworkBufferManagement.h"
+#include "NetworkInterface.h"
+
+
+#include "m480_eth.h"
+
+/* If ipconfigETHERNET_DRIVER_FILTERS_FRAME_TYPES is set to 1, then the Ethernet
+driver will filter incoming packets and only pass the stack those packets it
+considers need processing. */
+#if( ipconfigETHERNET_DRIVER_FILTERS_FRAME_TYPES == 0 )
+#define ipCONSIDER_FRAME_FOR_PROCESSING( pucEthernetBuffer ) eProcessBuffer
+#else
+#define ipCONSIDER_FRAME_FOR_PROCESSING( pucEthernetBuffer ) eConsiderFrameForProcessing( ( pucEthernetBuffer ) )
+#endif
+
+/* Default the size of the stack used by the EMAC deferred handler task to twice
+the size of the stack used by the idle task - but allow this to be overridden in
+FreeRTOSConfig.h as configMINIMAL_STACK_SIZE is a user definable constant. */
+#ifndef configEMAC_TASK_STACK_SIZE
+    #define configEMAC_TASK_STACK_SIZE ( 2 * configMINIMAL_STACK_SIZE )
+#endif
+
+
+static SemaphoreHandle_t xTXMutex = NULL;
+
+/* The handle of the task that processes Rx packets.  The handle is required so
+the task can be notified when new packets arrive. */
+static TaskHandle_t xRxHanderTask = NULL;
+static TimerHandle_t xPhyHandlerTask = NULL;
+/*
+ * A task that processes received frames.
+ */
+static void prvEMACHandlerTask( void *pvParameters );
+static void prvPhyTmrCallback( TimerHandle_t xTimer );
+
+/* The size of each buffer when BufferAllocation_1 is used:
+http://www.freertos.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/Embedded_Ethernet_Buffer_Management.html */
+
+#define niBUFFER_1_PACKET_SIZE        1536
+#ifdef __ICCARM__
+#pragma data_alignment=4
+static uint8_t ucNetworkPackets[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS * niBUFFER_1_PACKET_SIZE ]
+#else
+static uint8_t ucNetworkPackets[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS * niBUFFER_1_PACKET_SIZE ] __attribute__ ((aligned(4)));
+#endif
+
+BaseType_t xNetworkInterfaceInitialise( void )
+{
+    uint8_t hwaddr[6];
+    BaseType_t xReturn = pdPASS;
+
+    /* Init ETH */
+    numaker_mac_address(hwaddr);
+    FreeRTOS_UpdateMACAddress(hwaddr);
+    FreeRTOS_printf( ("mac address %02x-%02x-%02x-%02x-%02x-%02x \r\n", hwaddr[0], hwaddr[1],hwaddr[2],hwaddr[3],hwaddr[4],hwaddr[5]) );
+    /* Enable clock & set EMAC configuration         */
+    /* Enable MAC and DMA transmission and reception */
+    if( numaker_eth_init(hwaddr) < 0)
+    {
+        xReturn = pdFAIL;
+    } else {
+        xReturn = pdPASS;
+        /* Guard against the task being created more than once and the
+        descriptors being initialized more than once. */
+        /* Timer task to monitor PHY Link status */
+        if( xPhyHandlerTask == NULL )
+        {
+            xPhyHandlerTask = xTimerCreate( "TimerPhy",  pdMS_TO_TICKS( 1000 ), pdTRUE, 0, prvPhyTmrCallback );
+            configASSERT(xPhyHandlerTask);
+            xReturn = xTimerStart( xPhyHandlerTask, 0 ) ;
+            configASSERT( xReturn );
+        }
+        /* Rx task */
+        if( xRxHanderTask == NULL )
+        {
+            xReturn = xTaskCreate( prvEMACHandlerTask, "EMAC", configEMAC_TASK_STACK_SIZE, NULL, configMAX_PRIORITIES - 1, &xRxHanderTask );
+            configASSERT( xReturn );
+        }
+        
+        if( xTXMutex == NULL )
+        {
+            xTXMutex = xSemaphoreCreateMutex();
+            configASSERT( xTXMutex );
+        }        
+    }
+
+        NVIC_SetPriority( EMAC_RX_IRQn, configMAC_INTERRUPT_PRIORITY );
+        NVIC_SetPriority( EMAC_TX_IRQn, configMAC_INTERRUPT_PRIORITY );
+
+        numaker_eth_enable_interrupts();
+
+        FreeRTOS_printf( ("ETH-RX priority:%d\n",NVIC_GetPriority( EMAC_RX_IRQn)) );
+
+    return xReturn;
+}
+
+BaseType_t xNetworkInterfaceOutput( NetworkBufferDescriptor_t * const pxDescriptor, BaseType_t xReleaseAfterSend )
+{
+    uint8_t *buffer=NULL;
+//    FreeRTOS_printf(("<-- dataLength=%d\n",pxDescriptor->xDataLength));
+    if( pxDescriptor->xDataLength >= PACKET_BUFFER_SIZE )
+    {
+        FreeRTOS_printf(("TX buffer length %d over %d\n", pxDescriptor->xDataLength, PACKET_BUFFER_SIZE));
+        return pdFALSE;
+    }
+    
+    buffer = numaker_eth_get_tx_buf();
+    if( buffer == NULL )
+    {
+        NU_DEBUGF(("Eth TX slots are busy\n"));
+        return pdFALSE;
+    }    
+    
+    /* Get exclusive access */
+    xSemaphoreTake(xTXMutex, portMAX_DELAY);
+    NU_DEBUGF(("%s ... buffer=0x%x\r\n",__FUNCTION__, buffer));   
+    //SendData: pt = pxDescriptor->pucBuffer, length = pxDescriptor->xDataLength
+    memcpy(buffer, pxDescriptor->pucEthernetBuffer, pxDescriptor->xDataLength);
+    numaker_eth_trigger_tx(pxDescriptor->xDataLength, NULL);
+    /* Call the standard trace macro to log the send event. */
+    iptraceNETWORK_INTERFACE_TRANSMIT();
+
+    if( xReleaseAfterSend != pdFALSE )
+    {
+        /* It is assumed SendData() copies the data out of the FreeRTOS+TCP Ethernet
+        buffer.  The Ethernet buffer is therefore no longer needed, and must be
+        freed for re-use. */
+        vReleaseNetworkBufferAndDescriptor( pxDescriptor );
+    }
+
+    xSemaphoreGive(xTXMutex);
+    
+    return pdTRUE;
+}
+
+
+void vNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] )
+{
+
+    uint8_t *ucRAMBuffer = ucNetworkPackets;
+    uint32_t ul;
+
+    for( ul = 0; ul < ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS; ul++ )
+    {
+        pxNetworkBuffers[ ul ].pucEthernetBuffer = ucRAMBuffer + ipBUFFER_PADDING;
+        *( ( unsigned * ) ucRAMBuffer ) = ( unsigned ) ( &( pxNetworkBuffers[ ul ] ) );
+        ucRAMBuffer += niBUFFER_1_PACKET_SIZE;
+    }
+}
+
+
+BaseType_t xGetPhyLinkStatus( void )
+{
+    BaseType_t xReturn;
+
+    if( numaker_eth_link_ok() )
+    {
+        xReturn = pdPASS;
+    }
+    else
+    {
+        xReturn = pdFAIL;
+    }
+
+    return xReturn;
+}
+
+static void prvPhyTmrCallback( TimerHandle_t xTimer )
+{
+    IPStackEvent_t xRxEvent;
+    static BaseType_t lastLink = pdFAIL;
+    BaseType_t currLink = xGetPhyLinkStatus();
+    if( currLink != lastLink )
+    {
+        FreeRTOS_printf(("PHY Link %s\n", (currLink) ? "Up" : "Down"));
+        if( !currLink )
+        {
+            xRxEvent.eEventType = eNetworkDownEvent;
+            xSendEventStructToIPTask( &xRxEvent, 0 );
+        }
+        lastLink = currLink;
+    }
+
+}    
+
+    
+static void prvEMACHandlerTask( void *pvParameters )
+{
+    TimeOut_t xPhyTime;
+    TickType_t xPhyRemTime;
+    UBaseType_t uxLastMinBufferCount = 0;
+    UBaseType_t uxCurrentCount;
+    BaseType_t xResult = 0;
+    uint32_t ulStatus;
+    uint16_t dataLength = 0;
+    uint8_t *buffer = NULL;
+    NetworkBufferDescriptor_t *pxBufferDescriptor = NULL;
+    IPStackEvent_t xRxEvent;
+    const TickType_t xBlockTime = pdMS_TO_TICKS( 5000ul );
+    
+    /* Remove compiler warnings about unused parameters. */
+    ( void ) pvParameters;
+    /* A possibility to set some additional task properties. */
+    
+    for( ;; )
+    {
+        uxCurrentCount = uxGetMinimumFreeNetworkBuffers();
+        if( uxLastMinBufferCount != uxCurrentCount )
+        {
+            /* The logging produced below may be helpful
+            while tuning +TCP: see how many buffers are in use. */
+            uxLastMinBufferCount = uxCurrentCount;
+            FreeRTOS_printf( ( "Network buffers: %lu lowest %lu\n",
+                uxGetNumberOfFreeNetworkBuffers(), uxCurrentCount ) );
+        }
+        
+        /* No events to process now, wait for the next. */
+        ulTaskNotifyTake( pdFALSE, portMAX_DELAY ); 
+        while(1)
+        {    
+            /* get received frame */
+            if ( numaker_eth_get_rx_buf(&dataLength, &buffer) != 0) {
+            /* The event was lost because a network buffer was not available.
+            Call the standard trace macro to log the occurrence. */
+                iptraceETHERNET_RX_EVENT_LOST();
+                break;
+            }        
+
+            /* Allocate a network buffer descriptor that points to a buffer
+            large enough to hold the received frame.  As this is the simple
+            rather than efficient example the received data will just be copied
+            into this buffer. */
+
+            pxBufferDescriptor = pxGetNetworkBufferWithDescriptor( PACKET_BUFFER_SIZE, 0 );
+
+            if( pxBufferDescriptor != NULL )
+            {        
+                memcpy( pxBufferDescriptor->pucEthernetBuffer, buffer, dataLength );
+//                          FreeRTOS_printf(("--> dataLength=%d\n",dataLength));
+                pxBufferDescriptor->xDataLength = dataLength;            
+            } else {
+                numaker_eth_rx_next();
+                iptraceETHERNET_RX_EVENT_LOST();
+                break;
+            }
+            /* The event about to be sent to the TCP/IP is an Rx event. */
+            xRxEvent.eEventType = eNetworkRxEvent;
+
+            /* pvData is used to point to the network buffer descriptor that
+                now references the received data. */
+            xRxEvent.pvData = ( void * ) pxBufferDescriptor;
+
+            /* Send the data to the TCP/IP stack. */
+            if( xSendEventStructToIPTask( &xRxEvent, 0 ) == pdFALSE )
+            {
+                /* The buffer could not be sent to the IP task so the buffer
+                 must be released. */
+                vReleaseNetworkBufferAndDescriptor( pxBufferDescriptor );
+
+                /* Make a call to the standard trace macro to log the
+                        occurrence. */
+
+                iptraceETHERNET_RX_EVENT_LOST();
+            } else
+            {
+                /* The message was successfully sent to the TCP/IP stack.
+                Call the standard trace macro to log the occurrence. */
+                iptraceNETWORK_INTERFACE_RECEIVE();
+            } 
+                numaker_eth_rx_next();
+        }    
+        numaker_eth_trigger_rx();
+    }
+}
+
+void xNetworkCallback(char event)
+{
+    BaseType_t xHigherPriorityTaskWoken = pdFALSE;
+    switch (event)
+    {
+      case 'R': //For RX event
+    /* Wakeup the prvEMACHandlerTask. */
+        if( xRxHanderTask != NULL )
+        {
+            vTaskNotifyGiveFromISR( xRxHanderTask, &xHigherPriorityTaskWoken );
+            portYIELD_FROM_ISR( xHigherPriorityTaskWoken );
+        }
+        break;
+      case 'T': //For TX event
+        // ack of tx done, no-op in this stage
+        break;
+      default:
+        break;
+    }
+}
index 2d45661d003606d220e0bfba536b36a7ebd73a29..cf862da3ea7c9c110ca546ac52c565682435332b 100644 (file)
-/**************************************************************************//**\r
- * @copyright (C) 2019 Nuvoton Technology Corp. All rights reserved.\r
- * \r
- * Redistribution and use in source and binary forms, with or without modification,\r
- * are permitted provided that the following conditions are met:\r
- *   1. Redistributions of source code must retain the above copyright notice,\r
- *      this list of conditions and the following disclaimer.\r
- *   2. Redistributions in binary form must reproduce the above copyright notice,\r
- *      this list of conditions and the following disclaimer in the documentation\r
- *      and/or other materials provided with the distribution.\r
- *   3. Neither the name of Nuvoton Technology Corp. nor the names of its contributors\r
- *      may be used to endorse or promote products derived from this software\r
- *      without specific prior written permission.\r
- * \r
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"\r
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
-*****************************************************************************/\r
-#include "FreeRTOS.h"\r
-#include "list.h"\r
-#include "FreeRTOS_IP.h"\r
-\r
-#include "m480_eth.h"\r
-\r
-#define ETH_TRIGGER_RX()    do{EMAC->RXST = 0;}while(0)\r
-#define ETH_TRIGGER_TX()    do{EMAC->TXST = 0;}while(0)\r
-#define ETH_ENABLE_TX()     do{EMAC->CTL |= EMAC_CTL_TXON;}while(0)\r
-#define ETH_ENABLE_RX()     do{EMAC->CTL |= EMAC_CTL_RXON;}while(0)\r
-#define ETH_DISABLE_TX()    do{EMAC->CTL &= ~EMAC_CTL_TXON;}while(0)\r
-#define ETH_DISABLE_RX()    do{EMAC->CTL &= ~EMAC_CTL_RXON;}while(0)\r
-    \r
-\r
-struct eth_descriptor rx_desc[RX_DESCRIPTOR_NUM] __attribute__ ((aligned(4)));\r
-struct eth_descriptor tx_desc[TX_DESCRIPTOR_NUM] __attribute__ ((aligned(4)));\r
-#ifdef __ICCARM__\r
-#pragma data_alignment=4\r
-struct eth_descriptor rx_desc[RX_DESCRIPTOR_NUM];\r
-struct eth_descriptor tx_desc[TX_DESCRIPTOR_NUM];\r
-uint8_t rx_buf[RX_DESCRIPTOR_NUM][PACKET_BUFFER_SIZE];\r
-uint8_t tx_buf[TX_DESCRIPTOR_NUM][PACKET_BUFFER_SIZE];\r
-#else\r
-struct eth_descriptor rx_desc[RX_DESCRIPTOR_NUM] __attribute__ ((aligned(4)));\r
-struct eth_descriptor tx_desc[TX_DESCRIPTOR_NUM] __attribute__ ((aligned(4)));\r
-uint8_t rx_buf[RX_DESCRIPTOR_NUM][PACKET_BUFFER_SIZE]  __attribute__ ((aligned(4)));\r
-uint8_t tx_buf[TX_DESCRIPTOR_NUM][PACKET_BUFFER_SIZE]  __attribute__ ((aligned(4)));\r
-#endif\r
-struct eth_descriptor volatile *cur_tx_desc_ptr, *cur_rx_desc_ptr, *fin_tx_desc_ptr;\r
-\r
-\r
-// PTP source clock is 84MHz (Real chip using PLL). Each tick is 11.90ns\r
-// Assume we want to set each tick to 100ns.\r
-// Increase register = (100 * 2^31) / (10^9) = 214.71 =~ 215 = 0xD7\r
-// Addend register = 2^32 * tick_freq / (84MHz), where tick_freq = (2^31 / 215) MHz\r
-// From above equation, addend register = 2^63 / (84M * 215) ~= 510707200 = 0x1E70C600\r
-\r
-\r
-\r
-static void mdio_write(uint8_t addr, uint8_t reg, uint16_t val)\r
-{\r
-\r
-    EMAC->MIIMDAT = val;\r
-    EMAC->MIIMCTL = (addr << EMAC_MIIMCTL_PHYADDR_Pos) | reg | EMAC_MIIMCTL_BUSY_Msk | EMAC_MIIMCTL_WRITE_Msk | EMAC_MIIMCTL_MDCON_Msk;\r
-\r
-    while (EMAC->MIIMCTL & EMAC_MIIMCTL_BUSY_Msk);\r
-\r
-}\r
-\r
-\r
-static uint16_t mdio_read(uint8_t addr, uint8_t reg)\r
-{\r
-    EMAC->MIIMCTL = (addr << EMAC_MIIMCTL_PHYADDR_Pos) | reg | EMAC_MIIMCTL_BUSY_Msk | EMAC_MIIMCTL_MDCON_Msk;\r
-    while (EMAC->MIIMCTL & EMAC_MIIMCTL_BUSY_Msk);\r
-\r
-    return(EMAC->MIIMDAT);\r
-}\r
-\r
-static int reset_phy(void)\r
-{\r
-\r
-    uint16_t reg;\r
-    uint32_t delayCnt;\r
-\r
-\r
-    mdio_write(CONFIG_PHY_ADDR, MII_BMCR, BMCR_RESET);\r
-\r
-    delayCnt = 2000;\r
-    while(delayCnt-- > 0) {\r
-        if((mdio_read(CONFIG_PHY_ADDR, MII_BMCR) & BMCR_RESET) == 0)\r
-            break;\r
-\r
-    }\r
-\r
-    if(delayCnt == 0) {\r
-        NU_DEBUGF(("Reset phy failed\n"));\r
-        return(-1);\r
-    }\r
-\r
-    mdio_write(CONFIG_PHY_ADDR, MII_ADVERTISE, ADVERTISE_CSMA |\r
-               ADVERTISE_10HALF |\r
-               ADVERTISE_10FULL |\r
-               ADVERTISE_100HALF |\r
-               ADVERTISE_100FULL);\r
-\r
-    reg = mdio_read(CONFIG_PHY_ADDR, MII_BMCR);\r
-    mdio_write(CONFIG_PHY_ADDR, MII_BMCR, reg | BMCR_ANRESTART);\r
-\r
-    delayCnt = 200000;\r
-    while(delayCnt-- > 0) {\r
-        if((mdio_read(CONFIG_PHY_ADDR, MII_BMSR) & (BMSR_ANEGCOMPLETE | BMSR_LSTATUS))\r
-                == (BMSR_ANEGCOMPLETE | BMSR_LSTATUS))\r
-            break;\r
-    }\r
-\r
-    if(delayCnt == 0) {\r
-        NU_DEBUGF(("AN failed. Set to 100 FULL\n"));\r
-        EMAC->CTL |= (EMAC_CTL_OPMODE_Msk | EMAC_CTL_FUDUP_Msk);\r
-        return(-1);\r
-    } else {\r
-        reg = mdio_read(CONFIG_PHY_ADDR, MII_LPA);\r
-\r
-        if(reg & ADVERTISE_100FULL) {\r
-            NU_DEBUGF(("100 full\n"));\r
-            EMAC->CTL |= (EMAC_CTL_OPMODE_Msk | EMAC_CTL_FUDUP_Msk);\r
-        } else if(reg & ADVERTISE_100HALF) {\r
-            NU_DEBUGF(("100 half\n"));\r
-            EMAC->CTL = (EMAC->CTL & ~EMAC_CTL_FUDUP_Msk) | EMAC_CTL_OPMODE_Msk;\r
-        } else if(reg & ADVERTISE_10FULL) {\r
-            NU_DEBUGF(("10 full\n"));\r
-            EMAC->CTL = (EMAC->CTL & ~EMAC_CTL_OPMODE_Msk) | EMAC_CTL_FUDUP_Msk;\r
-        } else {\r
-            NU_DEBUGF(("10 half\n"));\r
-            EMAC->CTL &= ~(EMAC_CTL_OPMODE_Msk | EMAC_CTL_FUDUP_Msk);\r
-        }\r
-    }\r
-       FreeRTOS_printf(("PHY ID 1:0x%x\r\n", mdio_read(CONFIG_PHY_ADDR, MII_PHYSID1)));\r
-       FreeRTOS_printf(("PHY ID 2:0x%x\r\n", mdio_read(CONFIG_PHY_ADDR, MII_PHYSID2)));\r
-\r
-    return(0);\r
-}\r
-\r
-\r
-static void init_tx_desc(void)\r
-{\r
-    uint32_t i;\r
-\r
-\r
-    cur_tx_desc_ptr = fin_tx_desc_ptr = &tx_desc[0];\r
-\r
-    for(i = 0; i < TX_DESCRIPTOR_NUM; i++) {\r
-        tx_desc[i].status1 = TXFD_PADEN | TXFD_CRCAPP | TXFD_INTEN;\r
-        tx_desc[i].buf = &tx_buf[i][0];\r
-        tx_desc[i].status2 = 0;\r
-        tx_desc[i].next = &tx_desc[(i + 1) % TX_DESCRIPTOR_NUM];\r
-\r
-    }\r
-    EMAC->TXDSA = (unsigned int)&tx_desc[0];\r
-    return;\r
-}\r
-\r
-static void init_rx_desc(void)\r
-{\r
-    uint32_t i;\r
-\r
-\r
-    cur_rx_desc_ptr = &rx_desc[0];\r
-\r
-    for(i = 0; i < RX_DESCRIPTOR_NUM; i++) {\r
-        rx_desc[i].status1 = OWNERSHIP_EMAC;\r
-        rx_desc[i].buf = &rx_buf[i][0];\r
-        rx_desc[i].status2 = 0;\r
-        rx_desc[i].next = &rx_desc[(i + 1) % TX_DESCRIPTOR_NUM];\r
-    }\r
-    EMAC->RXDSA = (unsigned int)&rx_desc[0];\r
-    return;\r
-}\r
-\r
-void numaker_set_mac_addr(uint8_t *addr)\r
-{\r
-\r
-    EMAC->CAM0M = (addr[0] << 24) |\r
-                  (addr[1] << 16) |\r
-                  (addr[2] << 8) |\r
-                  addr[3];\r
-\r
-    EMAC->CAM0L = (addr[4] << 24) |\r
-                  (addr[5] << 16);\r
-\r
-\r
-}\r
-\r
-static void __eth_clk_pin_init()\r
-{\r
-    /* Unlock protected registers */\r
-    SYS_UnlockReg();\r
-\r
-    /* Enable IP clock */\r
-    CLK_EnableModuleClock(EMAC_MODULE);\r
-    \r
-    // Configure MDC clock rate to HCLK / (127 + 1) = 1.25 MHz if system is running at 160 MH\r
-    CLK_SetModuleClock(EMAC_MODULE, 0, CLK_CLKDIV3_EMAC(127));\r
-    \r
-    /* Update System Core Clock */\r
-    SystemCoreClockUpdate();\r
-    \r
-    /*---------------------------------------------------------------------------------------------------------*/\r
-    /* Init I/O Multi-function                                                                                 */\r
-    /*---------------------------------------------------------------------------------------------------------*/\r
-    // Configure RMII pins\r
-    SYS->GPA_MFPL &= ~(SYS_GPA_MFPL_PA6MFP_Msk | SYS_GPA_MFPL_PA7MFP_Msk);\r
-    SYS->GPA_MFPL |= SYS_GPA_MFPL_PA6MFP_EMAC_RMII_RXERR | SYS_GPA_MFPL_PA7MFP_EMAC_RMII_CRSDV;\r
-    SYS->GPC_MFPL &= ~(SYS_GPC_MFPL_PC6MFP_Msk | SYS_GPC_MFPL_PC7MFP_Msk);\r
-    SYS->GPC_MFPL |= SYS_GPC_MFPL_PC6MFP_EMAC_RMII_RXD1 | SYS_GPC_MFPL_PC7MFP_EMAC_RMII_RXD0;\r
-    SYS->GPC_MFPH &= ~SYS_GPC_MFPH_PC8MFP_Msk;\r
-    SYS->GPC_MFPH |= SYS_GPC_MFPH_PC8MFP_EMAC_RMII_REFCLK;\r
-    SYS->GPE_MFPH &= ~(SYS_GPE_MFPH_PE8MFP_Msk | SYS_GPE_MFPH_PE9MFP_Msk | SYS_GPE_MFPH_PE10MFP_Msk |\r
-                       SYS_GPE_MFPH_PE11MFP_Msk | SYS_GPE_MFPH_PE12MFP_Msk);\r
-    SYS->GPE_MFPH |= SYS_GPE_MFPH_PE8MFP_EMAC_RMII_MDC |\r
-                    SYS_GPE_MFPH_PE9MFP_EMAC_RMII_MDIO |\r
-                    SYS_GPE_MFPH_PE10MFP_EMAC_RMII_TXD0 |\r
-                    SYS_GPE_MFPH_PE11MFP_EMAC_RMII_TXD1 |\r
-                    SYS_GPE_MFPH_PE12MFP_EMAC_RMII_TXEN;\r
-\r
-    // Enable high slew rate on all RMII TX output pins\r
-    PE->SLEWCTL = (GPIO_SLEWCTL_HIGH << GPIO_SLEWCTL_HSREN10_Pos) |\r
-                  (GPIO_SLEWCTL_HIGH << GPIO_SLEWCTL_HSREN11_Pos) |\r
-                  (GPIO_SLEWCTL_HIGH << GPIO_SLEWCTL_HSREN12_Pos);\r
-\r
-\r
-    /* Lock protected registers */\r
-    SYS_LockReg();\r
-\r
-\r
-}\r
-\r
-int numaker_eth_init(uint8_t *mac_addr)\r
-{\r
-    int ret = 0;\r
-    // init CLK & pins\r
-    __eth_clk_pin_init();\r
-  \r
-    // Reset MAC\r
-    EMAC->CTL = EMAC_CTL_RST_Msk;\r
-    while(EMAC->CTL & EMAC_CTL_RST_Msk) {}\r
-\r
-    init_tx_desc();\r
-    init_rx_desc();\r
-\r
-    numaker_set_mac_addr(mac_addr);  // need to reconfigure hardware address 'cos we just RESET emc...\r
-\r
-\r
-    /* Configure the MAC interrupt enable register. */\r
-    EMAC->INTEN = EMAC_INTEN_RXIEN_Msk |\r
-                  EMAC_INTEN_TXIEN_Msk |\r
-                  EMAC_INTEN_RXGDIEN_Msk |\r
-                  EMAC_INTEN_TXCPIEN_Msk |\r
-                  EMAC_INTEN_RXBEIEN_Msk |\r
-                  EMAC_INTEN_TXBEIEN_Msk |\r
-                  EMAC_INTEN_RDUIEN_Msk |\r
-                  EMAC_INTEN_TSALMIEN_Msk |\r
-                  EMAC_INTEN_WOLIEN_Msk;\r
-\r
-    /* Configure the MAC control register. */\r
-    EMAC->CTL = EMAC_CTL_STRIPCRC_Msk | EMAC_CTL_RMIIEN_Msk;\r
-\r
-    /* Accept packets for us and all broadcast and multicast packets */\r
-    EMAC->CAMCTL =  EMAC_CAMCTL_CMPEN_Msk |\r
-                    EMAC_CAMCTL_AMP_Msk |\r
-                    EMAC_CAMCTL_ABP_Msk;\r
-    EMAC->CAMEN = 1;    // Enable CAM entry 0    \r
-\r
-    ret= reset_phy();                    \r
-                    \r
-    EMAC_ENABLE_RX();\r
-    EMAC_ENABLE_TX();\r
-    return ret;\r
-}\r
-\r
-\r
-\r
-void  ETH_halt(void)\r
-{\r
-\r
-    EMAC->CTL &= ~(EMAC_CTL_RXON_Msk | EMAC_CTL_TXON_Msk);\r
-}\r
-\r
-unsigned int m_status;\r
-\r
-void EMAC_RX_IRQHandler(void)\r
-{\r
-//    NU_DEBUGF(("%s ... \r\n", __FUNCTION__));\r
-    m_status = EMAC->INTSTS & 0xFFFF;\r
-    EMAC->INTSTS = m_status;\r
-    if (m_status & EMAC_INTSTS_RXBEIF_Msk) {\r
-        // Shouldn't goes here, unless descriptor corrupted\r
-               NU_DEBUGF(("RX descriptor corrupted \r\n"));\r
-               //return;\r
-    }\r
-    // FIX ME: for rx-event, to ack rx_isr into event queue\r
-        xNetworkCallback('R');\r
-}\r
-\r
-\r
-void numaker_eth_trigger_rx(void)\r
-{\r
-    ETH_TRIGGER_RX();\r
-}\r
-\r
-int numaker_eth_get_rx_buf(uint16_t *len, uint8_t **buf)\r
-{\r
-    unsigned int cur_entry, status;\r
-\r
-    cur_entry = EMAC->CRXDSA;\r
-    if ((cur_entry == (uint32_t)cur_rx_desc_ptr) && (!(m_status & EMAC_INTSTS_RDUIF_Msk)))  // cur_entry may equal to cur_rx_desc_ptr if RDU occures\r
-            return -1;\r
-    status = cur_rx_desc_ptr->status1;\r
-\r
-    if(status & OWNERSHIP_EMAC)\r
-            return -1;\r
-\r
-    if (status & RXFD_RXGD) {\r
-        *buf = cur_rx_desc_ptr->buf;\r
-        *len = status & 0xFFFF;\r
-    }\r
-    return 0;\r
-}    \r
-\r
-void numaker_eth_rx_next(void)\r
-{\r
-    cur_rx_desc_ptr->status1 = OWNERSHIP_EMAC;\r
-    cur_rx_desc_ptr = cur_rx_desc_ptr->next;    \r
-}    \r
-\r
-void EMAC_TX_IRQHandler(void)\r
-{\r
-    unsigned int cur_entry, status;\r
-\r
-    status = EMAC->INTSTS & 0xFFFF0000;\r
-    EMAC->INTSTS = status;\r
-    if(status & EMAC_INTSTS_TXBEIF_Msk) {\r
-        // Shouldn't goes here, unless descriptor corrupted\r
-        return;\r
-    }\r
-\r
-    cur_entry = EMAC->CTXDSA;\r
-\r
-    while (cur_entry != (uint32_t)fin_tx_desc_ptr) {\r
-\r
-        fin_tx_desc_ptr = fin_tx_desc_ptr->next;\r
-    }\r
-    // FIX ME: for tx-event, no-op at this stage\r
-    xNetworkCallback('T');\r
-}\r
-\r
-uint8_t *numaker_eth_get_tx_buf(void)\r
-{\r
-    if(cur_tx_desc_ptr->status1 & OWNERSHIP_EMAC)\r
-        return(NULL);\r
-    else\r
-        return(cur_tx_desc_ptr->buf);\r
-}\r
-\r
-void numaker_eth_trigger_tx(uint16_t length, void *p)\r
-{\r
-    struct eth_descriptor volatile *desc;\r
-    cur_tx_desc_ptr->status2 = (unsigned int)length;\r
-    desc = cur_tx_desc_ptr->next;    // in case TX is transmitting and overwrite next pointer before we can update cur_tx_desc_ptr\r
-    cur_tx_desc_ptr->status1 |= OWNERSHIP_EMAC;\r
-    cur_tx_desc_ptr = desc;\r
-\r
-    ETH_TRIGGER_TX();\r
-\r
-}\r
-\r
-int numaker_eth_link_ok(void)\r
-{\r
-    /* first, a dummy read to latch */\r
-    mdio_read(CONFIG_PHY_ADDR, MII_BMSR);\r
-    if(mdio_read(CONFIG_PHY_ADDR, MII_BMSR) & BMSR_LSTATUS)\r
-      return 1;\r
-    return 0;  \r
-}\r
-\r
-//void numaker_eth_set_cb(eth_callback_t eth_cb, void *userData)\r
-//{\r
-//    nu_eth_txrx_cb =  eth_cb;\r
-//    nu_userData = userData;\r
-//}\r
-\r
-// Provide ethernet devices with a semi-unique MAC address\r
-void numaker_mac_address(uint8_t *mac)\r
-{\r
-    uint32_t uID1;\r
-    // Fetch word 0\r
-    uint32_t word0 = *(uint32_t *)0x7F804; // 2KB Data Flash at 0x7F800\r
-    // Fetch word 1\r
-    // we only want bottom 16 bits of word1 (MAC bits 32-47)\r
-    // and bit 9 forced to 1, bit 8 forced to 0\r
-    // Locally administered MAC, reduced conflicts\r
-    // http://en.wikipedia.org/wiki/MAC_address\r
-    uint32_t word1 = *(uint32_t *)0x7F800; // 2KB Data Flash at 0x7F800\r
-\r
-    if( word0 == 0xFFFFFFFF )          // Not burn any mac address at 1st 2 words of Data Flash\r
-    {\r
-        // with a semi-unique MAC address from the UUID\r
-        /* Enable FMC ISP function */\r
-        SYS_UnlockReg();\r
-        FMC_Open();\r
-        // = FMC_ReadUID(0);\r
-        uID1 = FMC_ReadUID(1);\r
-        word1 = (uID1 & 0x003FFFFF) | ((uID1 & 0x030000) << 6) >> 8;\r
-        word0 = ((FMC_ReadUID(0) >> 4) << 20) | ((uID1 & 0xFF)<<12) | (FMC_ReadUID(2) & 0xFFF);\r
-        /* Disable FMC ISP function */\r
-        FMC_Close();\r
-        /* Lock protected registers */\r
-        SYS_LockReg();\r
-    }\r
-\r
-    word1 |= 0x00000200;\r
-    word1 &= 0x0000FEFF;\r
-\r
-    mac[0] = (word1 & 0x0000ff00) >> 8;    \r
-    mac[1] = (word1 & 0x000000ff);\r
-    mac[2] = (word0 & 0xff000000) >> 24;\r
-    mac[3] = (word0 & 0x00ff0000) >> 16;\r
-    mac[4] = (word0 & 0x0000ff00) >> 8;\r
-    mac[5] = (word0 & 0x000000ff);\r
-    \r
-    NU_DEBUGF(("mac address %02x-%02x-%02x-%02x-%02x-%02x \r\n", mac[0], mac[1],mac[2],mac[3],mac[4],mac[5]));\r
-}\r
-\r
-void numaker_eth_enable_interrupts(void) {\r
-  EMAC->INTEN |= EMAC_INTEN_RXIEN_Msk |\r
-                   EMAC_INTEN_TXIEN_Msk ;\r
-  NVIC_EnableIRQ(EMAC_RX_IRQn);\r
-  NVIC_EnableIRQ(EMAC_TX_IRQn);\r
-}\r
-\r
-void numaker_eth_disable_interrupts(void) {\r
-  NVIC_DisableIRQ(EMAC_RX_IRQn);\r
-  NVIC_DisableIRQ(EMAC_TX_IRQn);\r
-}\r
+/**************************************************************************//**
+ * @copyright (C) 2019 Nuvoton Technology Corp. All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *   1. Redistributions of source code must retain the above copyright notice,
+ *      this list of conditions and the following disclaimer.
+ *   2. Redistributions in binary form must reproduce the above copyright notice,
+ *      this list of conditions and the following disclaimer in the documentation
+ *      and/or other materials provided with the distribution.
+ *   3. Neither the name of Nuvoton Technology Corp. nor the names of its contributors
+ *      may be used to endorse or promote products derived from this software
+ *      without specific prior written permission.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*****************************************************************************/
+#include "FreeRTOS.h"
+#include "list.h"
+#include "FreeRTOS_IP.h"
+
+#include "m480_eth.h"
+
+#define ETH_TRIGGER_RX()    do{EMAC->RXST = 0;}while(0)
+#define ETH_TRIGGER_TX()    do{EMAC->TXST = 0;}while(0)
+#define ETH_ENABLE_TX()     do{EMAC->CTL |= EMAC_CTL_TXON;}while(0)
+#define ETH_ENABLE_RX()     do{EMAC->CTL |= EMAC_CTL_RXON;}while(0)
+#define ETH_DISABLE_TX()    do{EMAC->CTL &= ~EMAC_CTL_TXON;}while(0)
+#define ETH_DISABLE_RX()    do{EMAC->CTL &= ~EMAC_CTL_RXON;}while(0)
+    
+
+struct eth_descriptor rx_desc[RX_DESCRIPTOR_NUM] __attribute__ ((aligned(4)));
+struct eth_descriptor tx_desc[TX_DESCRIPTOR_NUM] __attribute__ ((aligned(4)));
+#ifdef __ICCARM__
+#pragma data_alignment=4
+struct eth_descriptor rx_desc[RX_DESCRIPTOR_NUM];
+struct eth_descriptor tx_desc[TX_DESCRIPTOR_NUM];
+uint8_t rx_buf[RX_DESCRIPTOR_NUM][PACKET_BUFFER_SIZE];
+uint8_t tx_buf[TX_DESCRIPTOR_NUM][PACKET_BUFFER_SIZE];
+#else
+struct eth_descriptor rx_desc[RX_DESCRIPTOR_NUM] __attribute__ ((aligned(4)));
+struct eth_descriptor tx_desc[TX_DESCRIPTOR_NUM] __attribute__ ((aligned(4)));
+uint8_t rx_buf[RX_DESCRIPTOR_NUM][PACKET_BUFFER_SIZE]  __attribute__ ((aligned(4)));
+uint8_t tx_buf[TX_DESCRIPTOR_NUM][PACKET_BUFFER_SIZE]  __attribute__ ((aligned(4)));
+#endif
+struct eth_descriptor volatile *cur_tx_desc_ptr, *cur_rx_desc_ptr, *fin_tx_desc_ptr;
+
+
+// PTP source clock is 84MHz (Real chip using PLL). Each tick is 11.90ns
+// Assume we want to set each tick to 100ns.
+// Increase register = (100 * 2^31) / (10^9) = 214.71 =~ 215 = 0xD7
+// Addend register = 2^32 * tick_freq / (84MHz), where tick_freq = (2^31 / 215) MHz
+// From above equation, addend register = 2^63 / (84M * 215) ~= 510707200 = 0x1E70C600
+
+
+
+static void mdio_write(uint8_t addr, uint8_t reg, uint16_t val)
+{
+
+    EMAC->MIIMDAT = val;
+    EMAC->MIIMCTL = (addr << EMAC_MIIMCTL_PHYADDR_Pos) | reg | EMAC_MIIMCTL_BUSY_Msk | EMAC_MIIMCTL_WRITE_Msk | EMAC_MIIMCTL_MDCON_Msk;
+
+    while (EMAC->MIIMCTL & EMAC_MIIMCTL_BUSY_Msk);
+
+}
+
+
+static uint16_t mdio_read(uint8_t addr, uint8_t reg)
+{
+    EMAC->MIIMCTL = (addr << EMAC_MIIMCTL_PHYADDR_Pos) | reg | EMAC_MIIMCTL_BUSY_Msk | EMAC_MIIMCTL_MDCON_Msk;
+    while (EMAC->MIIMCTL & EMAC_MIIMCTL_BUSY_Msk);
+
+    return(EMAC->MIIMDAT);
+}
+
+static int reset_phy(void)
+{
+
+    uint16_t reg;
+    uint32_t delayCnt;
+
+
+    mdio_write(CONFIG_PHY_ADDR, MII_BMCR, BMCR_RESET);
+
+    delayCnt = 2000;
+    while(delayCnt-- > 0) {
+        if((mdio_read(CONFIG_PHY_ADDR, MII_BMCR) & BMCR_RESET) == 0)
+            break;
+
+    }
+
+    if(delayCnt == 0) {
+        NU_DEBUGF(("Reset phy failed\n"));
+        return(-1);
+    }
+
+    mdio_write(CONFIG_PHY_ADDR, MII_ADVERTISE, ADVERTISE_CSMA |
+               ADVERTISE_10HALF |
+               ADVERTISE_10FULL |
+               ADVERTISE_100HALF |
+               ADVERTISE_100FULL);
+
+    reg = mdio_read(CONFIG_PHY_ADDR, MII_BMCR);
+    mdio_write(CONFIG_PHY_ADDR, MII_BMCR, reg | BMCR_ANRESTART);
+
+    delayCnt = 200000;
+    while(delayCnt-- > 0) {
+        if((mdio_read(CONFIG_PHY_ADDR, MII_BMSR) & (BMSR_ANEGCOMPLETE | BMSR_LSTATUS))
+                == (BMSR_ANEGCOMPLETE | BMSR_LSTATUS))
+            break;
+    }
+
+    if(delayCnt == 0) {
+        NU_DEBUGF(("AN failed. Set to 100 FULL\n"));
+        EMAC->CTL |= (EMAC_CTL_OPMODE_Msk | EMAC_CTL_FUDUP_Msk);
+        return(-1);
+    } else {
+        reg = mdio_read(CONFIG_PHY_ADDR, MII_LPA);
+
+        if(reg & ADVERTISE_100FULL) {
+            NU_DEBUGF(("100 full\n"));
+            EMAC->CTL |= (EMAC_CTL_OPMODE_Msk | EMAC_CTL_FUDUP_Msk);
+        } else if(reg & ADVERTISE_100HALF) {
+            NU_DEBUGF(("100 half\n"));
+            EMAC->CTL = (EMAC->CTL & ~EMAC_CTL_FUDUP_Msk) | EMAC_CTL_OPMODE_Msk;
+        } else if(reg & ADVERTISE_10FULL) {
+            NU_DEBUGF(("10 full\n"));
+            EMAC->CTL = (EMAC->CTL & ~EMAC_CTL_OPMODE_Msk) | EMAC_CTL_FUDUP_Msk;
+        } else {
+            NU_DEBUGF(("10 half\n"));
+            EMAC->CTL &= ~(EMAC_CTL_OPMODE_Msk | EMAC_CTL_FUDUP_Msk);
+        }
+    }
+       FreeRTOS_printf(("PHY ID 1:0x%x\r\n", mdio_read(CONFIG_PHY_ADDR, MII_PHYSID1)));
+       FreeRTOS_printf(("PHY ID 2:0x%x\r\n", mdio_read(CONFIG_PHY_ADDR, MII_PHYSID2)));
+
+    return(0);
+}
+
+
+static void init_tx_desc(void)
+{
+    uint32_t i;
+
+
+    cur_tx_desc_ptr = fin_tx_desc_ptr = &tx_desc[0];
+
+    for(i = 0; i < TX_DESCRIPTOR_NUM; i++) {
+        tx_desc[i].status1 = TXFD_PADEN | TXFD_CRCAPP | TXFD_INTEN;
+        tx_desc[i].buf = &tx_buf[i][0];
+        tx_desc[i].status2 = 0;
+        tx_desc[i].next = &tx_desc[(i + 1) % TX_DESCRIPTOR_NUM];
+
+    }
+    EMAC->TXDSA = (unsigned int)&tx_desc[0];
+    return;
+}
+
+static void init_rx_desc(void)
+{
+    uint32_t i;
+
+
+    cur_rx_desc_ptr = &rx_desc[0];
+
+    for(i = 0; i < RX_DESCRIPTOR_NUM; i++) {
+        rx_desc[i].status1 = OWNERSHIP_EMAC;
+        rx_desc[i].buf = &rx_buf[i][0];
+        rx_desc[i].status2 = 0;
+        rx_desc[i].next = &rx_desc[(i + 1) % TX_DESCRIPTOR_NUM];
+    }
+    EMAC->RXDSA = (unsigned int)&rx_desc[0];
+    return;
+}
+
+void numaker_set_mac_addr(uint8_t *addr)
+{
+
+    EMAC->CAM0M = (addr[0] << 24) |
+                  (addr[1] << 16) |
+                  (addr[2] << 8) |
+                  addr[3];
+
+    EMAC->CAM0L = (addr[4] << 24) |
+                  (addr[5] << 16);
+
+
+}
+
+static void __eth_clk_pin_init()
+{
+    /* Unlock protected registers */
+    SYS_UnlockReg();
+
+    /* Enable IP clock */
+    CLK_EnableModuleClock(EMAC_MODULE);
+    
+    // Configure MDC clock rate to HCLK / (127 + 1) = 1.25 MHz if system is running at 160 MH
+    CLK_SetModuleClock(EMAC_MODULE, 0, CLK_CLKDIV3_EMAC(127));
+    
+    /* Update System Core Clock */
+    SystemCoreClockUpdate();
+    
+    /*---------------------------------------------------------------------------------------------------------*/
+    /* Init I/O Multi-function                                                                                 */
+    /*---------------------------------------------------------------------------------------------------------*/
+    // Configure RMII pins
+    SYS->GPA_MFPL &= ~(SYS_GPA_MFPL_PA6MFP_Msk | SYS_GPA_MFPL_PA7MFP_Msk);
+    SYS->GPA_MFPL |= SYS_GPA_MFPL_PA6MFP_EMAC_RMII_RXERR | SYS_GPA_MFPL_PA7MFP_EMAC_RMII_CRSDV;
+    SYS->GPC_MFPL &= ~(SYS_GPC_MFPL_PC6MFP_Msk | SYS_GPC_MFPL_PC7MFP_Msk);
+    SYS->GPC_MFPL |= SYS_GPC_MFPL_PC6MFP_EMAC_RMII_RXD1 | SYS_GPC_MFPL_PC7MFP_EMAC_RMII_RXD0;
+    SYS->GPC_MFPH &= ~SYS_GPC_MFPH_PC8MFP_Msk;
+    SYS->GPC_MFPH |= SYS_GPC_MFPH_PC8MFP_EMAC_RMII_REFCLK;
+    SYS->GPE_MFPH &= ~(SYS_GPE_MFPH_PE8MFP_Msk | SYS_GPE_MFPH_PE9MFP_Msk | SYS_GPE_MFPH_PE10MFP_Msk |
+                       SYS_GPE_MFPH_PE11MFP_Msk | SYS_GPE_MFPH_PE12MFP_Msk);
+    SYS->GPE_MFPH |= SYS_GPE_MFPH_PE8MFP_EMAC_RMII_MDC |
+                    SYS_GPE_MFPH_PE9MFP_EMAC_RMII_MDIO |
+                    SYS_GPE_MFPH_PE10MFP_EMAC_RMII_TXD0 |
+                    SYS_GPE_MFPH_PE11MFP_EMAC_RMII_TXD1 |
+                    SYS_GPE_MFPH_PE12MFP_EMAC_RMII_TXEN;
+
+    // Enable high slew rate on all RMII TX output pins
+    PE->SLEWCTL = (GPIO_SLEWCTL_HIGH << GPIO_SLEWCTL_HSREN10_Pos) |
+                  (GPIO_SLEWCTL_HIGH << GPIO_SLEWCTL_HSREN11_Pos) |
+                  (GPIO_SLEWCTL_HIGH << GPIO_SLEWCTL_HSREN12_Pos);
+
+
+    /* Lock protected registers */
+    SYS_LockReg();
+
+
+}
+
+int numaker_eth_init(uint8_t *mac_addr)
+{
+    int ret = 0;
+    // init CLK & pins
+    __eth_clk_pin_init();
+  
+    // Reset MAC
+    EMAC->CTL = EMAC_CTL_RST_Msk;
+    while(EMAC->CTL & EMAC_CTL_RST_Msk) {}
+
+    init_tx_desc();
+    init_rx_desc();
+
+    numaker_set_mac_addr(mac_addr);  // need to reconfigure hardware address 'cos we just RESET emc...
+
+
+    /* Configure the MAC interrupt enable register. */
+    EMAC->INTEN = EMAC_INTEN_RXIEN_Msk |
+                  EMAC_INTEN_TXIEN_Msk |
+                  EMAC_INTEN_RXGDIEN_Msk |
+                  EMAC_INTEN_TXCPIEN_Msk |
+                  EMAC_INTEN_RXBEIEN_Msk |
+                  EMAC_INTEN_TXBEIEN_Msk |
+                  EMAC_INTEN_RDUIEN_Msk |
+                  EMAC_INTEN_TSALMIEN_Msk |
+                  EMAC_INTEN_WOLIEN_Msk;
+
+    /* Configure the MAC control register. */
+    EMAC->CTL = EMAC_CTL_STRIPCRC_Msk | EMAC_CTL_RMIIEN_Msk;
+
+    /* Accept packets for us and all broadcast and multicast packets */
+    EMAC->CAMCTL =  EMAC_CAMCTL_CMPEN_Msk |
+                    EMAC_CAMCTL_AMP_Msk |
+                    EMAC_CAMCTL_ABP_Msk;
+    EMAC->CAMEN = 1;    // Enable CAM entry 0    
+
+    ret= reset_phy();                    
+                    
+    EMAC_ENABLE_RX();
+    EMAC_ENABLE_TX();
+    return ret;
+}
+
+
+
+void  ETH_halt(void)
+{
+
+    EMAC->CTL &= ~(EMAC_CTL_RXON_Msk | EMAC_CTL_TXON_Msk);
+}
+
+unsigned int m_status;
+
+void EMAC_RX_IRQHandler(void)
+{
+//    NU_DEBUGF(("%s ... \r\n", __FUNCTION__));
+    m_status = EMAC->INTSTS & 0xFFFF;
+    EMAC->INTSTS = m_status;
+    if (m_status & EMAC_INTSTS_RXBEIF_Msk) {
+        // Shouldn't goes here, unless descriptor corrupted
+               NU_DEBUGF(("RX descriptor corrupted \r\n"));
+               //return;
+    }
+    // FIX ME: for rx-event, to ack rx_isr into event queue
+        xNetworkCallback('R');
+}
+
+
+void numaker_eth_trigger_rx(void)
+{
+    ETH_TRIGGER_RX();
+}
+
+int numaker_eth_get_rx_buf(uint16_t *len, uint8_t **buf)
+{
+    unsigned int cur_entry, status;
+
+    cur_entry = EMAC->CRXDSA;
+    if ((cur_entry == (uint32_t)cur_rx_desc_ptr) && (!(m_status & EMAC_INTSTS_RDUIF_Msk)))  // cur_entry may equal to cur_rx_desc_ptr if RDU occures
+            return -1;
+    status = cur_rx_desc_ptr->status1;
+
+    if(status & OWNERSHIP_EMAC)
+            return -1;
+
+    if (status & RXFD_RXGD) {
+        *buf = cur_rx_desc_ptr->buf;
+        *len = status & 0xFFFF;
+    }
+    return 0;
+}    
+
+void numaker_eth_rx_next(void)
+{
+    cur_rx_desc_ptr->status1 = OWNERSHIP_EMAC;
+    cur_rx_desc_ptr = cur_rx_desc_ptr->next;    
+}    
+
+void EMAC_TX_IRQHandler(void)
+{
+    unsigned int cur_entry, status;
+
+    status = EMAC->INTSTS & 0xFFFF0000;
+    EMAC->INTSTS = status;
+    if(status & EMAC_INTSTS_TXBEIF_Msk) {
+        // Shouldn't goes here, unless descriptor corrupted
+        return;
+    }
+
+    cur_entry = EMAC->CTXDSA;
+
+    while (cur_entry != (uint32_t)fin_tx_desc_ptr) {
+
+        fin_tx_desc_ptr = fin_tx_desc_ptr->next;
+    }
+    // FIX ME: for tx-event, no-op at this stage
+    xNetworkCallback('T');
+}
+
+uint8_t *numaker_eth_get_tx_buf(void)
+{
+    if(cur_tx_desc_ptr->status1 & OWNERSHIP_EMAC)
+        return(NULL);
+    else
+        return(cur_tx_desc_ptr->buf);
+}
+
+void numaker_eth_trigger_tx(uint16_t length, void *p)
+{
+    struct eth_descriptor volatile *desc;
+    cur_tx_desc_ptr->status2 = (unsigned int)length;
+    desc = cur_tx_desc_ptr->next;    // in case TX is transmitting and overwrite next pointer before we can update cur_tx_desc_ptr
+    cur_tx_desc_ptr->status1 |= OWNERSHIP_EMAC;
+    cur_tx_desc_ptr = desc;
+
+    ETH_TRIGGER_TX();
+
+}
+
+int numaker_eth_link_ok(void)
+{
+    /* first, a dummy read to latch */
+    mdio_read(CONFIG_PHY_ADDR, MII_BMSR);
+    if(mdio_read(CONFIG_PHY_ADDR, MII_BMSR) & BMSR_LSTATUS)
+      return 1;
+    return 0;  
+}
+
+//void numaker_eth_set_cb(eth_callback_t eth_cb, void *userData)
+//{
+//    nu_eth_txrx_cb =  eth_cb;
+//    nu_userData = userData;
+//}
+
+// Provide ethernet devices with a semi-unique MAC address
+void numaker_mac_address(uint8_t *mac)
+{
+    uint32_t uID1;
+    // Fetch word 0
+    uint32_t word0 = *(uint32_t *)0x7F804; // 2KB Data Flash at 0x7F800
+    // Fetch word 1
+    // we only want bottom 16 bits of word1 (MAC bits 32-47)
+    // and bit 9 forced to 1, bit 8 forced to 0
+    // Locally administered MAC, reduced conflicts
+    // http://en.wikipedia.org/wiki/MAC_address
+    uint32_t word1 = *(uint32_t *)0x7F800; // 2KB Data Flash at 0x7F800
+
+    if( word0 == 0xFFFFFFFF )          // Not burn any mac address at 1st 2 words of Data Flash
+    {
+        // with a semi-unique MAC address from the UUID
+        /* Enable FMC ISP function */
+        SYS_UnlockReg();
+        FMC_Open();
+        // = FMC_ReadUID(0);
+        uID1 = FMC_ReadUID(1);
+        word1 = (uID1 & 0x003FFFFF) | ((uID1 & 0x030000) << 6) >> 8;
+        word0 = ((FMC_ReadUID(0) >> 4) << 20) | ((uID1 & 0xFF)<<12) | (FMC_ReadUID(2) & 0xFFF);
+        /* Disable FMC ISP function */
+        FMC_Close();
+        /* Lock protected registers */
+        SYS_LockReg();
+    }
+
+    word1 |= 0x00000200;
+    word1 &= 0x0000FEFF;
+
+    mac[0] = (word1 & 0x0000ff00) >> 8;    
+    mac[1] = (word1 & 0x000000ff);
+    mac[2] = (word0 & 0xff000000) >> 24;
+    mac[3] = (word0 & 0x00ff0000) >> 16;
+    mac[4] = (word0 & 0x0000ff00) >> 8;
+    mac[5] = (word0 & 0x000000ff);
+    
+    NU_DEBUGF(("mac address %02x-%02x-%02x-%02x-%02x-%02x \r\n", mac[0], mac[1],mac[2],mac[3],mac[4],mac[5]));
+}
+
+void numaker_eth_enable_interrupts(void) {
+  EMAC->INTEN |= EMAC_INTEN_RXIEN_Msk |
+                   EMAC_INTEN_TXIEN_Msk ;
+  NVIC_EnableIRQ(EMAC_RX_IRQn);
+  NVIC_EnableIRQ(EMAC_TX_IRQn);
+}
+
+void numaker_eth_disable_interrupts(void) {
+  NVIC_DisableIRQ(EMAC_RX_IRQn);
+  NVIC_DisableIRQ(EMAC_TX_IRQn);
+}
index 4e4d98d6d673ca50e83406ef5f304636524e49ae..3d370bca7f8b38531f04522768ec56b68068beb3 100644 (file)
-/**************************************************************************//**\r
- * @copyright (C) 2019 Nuvoton Technology Corp. All rights reserved.\r
- * \r
- * Redistribution and use in source and binary forms, with or without modification,\r
- * are permitted provided that the following conditions are met:\r
- *   1. Redistributions of source code must retain the above copyright notice,\r
- *      this list of conditions and the following disclaimer.\r
- *   2. Redistributions in binary form must reproduce the above copyright notice,\r
- *      this list of conditions and the following disclaimer in the documentation\r
- *      and/or other materials provided with the distribution.\r
- *   3. Neither the name of Nuvoton Technology Corp. nor the names of its contributors\r
- *      may be used to endorse or promote products derived from this software\r
- *      without specific prior written permission.\r
- * \r
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"\r
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
-*****************************************************************************/\r
-#include "M480.h"\r
-#ifndef  _M480_ETH_\r
-#define  _M480_ETH_\r
-\r
-/* Generic MII registers. */\r
-\r
-#define MII_BMCR            0x00        /* Basic mode control register */\r
-#define MII_BMSR            0x01        /* Basic mode status register  */\r
-#define MII_PHYSID1         0x02        /* PHYS ID 1                   */\r
-#define MII_PHYSID2         0x03        /* PHYS ID 2                   */\r
-#define MII_ADVERTISE       0x04        /* Advertisement control reg   */\r
-#define MII_LPA             0x05        /* Link partner ability reg    */\r
-#define MII_EXPANSION       0x06        /* Expansion register          */\r
-#define MII_DCOUNTER        0x12        /* Disconnect counter          */\r
-#define MII_FCSCOUNTER      0x13        /* False carrier counter       */\r
-#define MII_NWAYTEST        0x14        /* N-way auto-neg test reg     */\r
-#define MII_RERRCOUNTER     0x15        /* Receive error counter       */\r
-#define MII_SREVISION       0x16        /* Silicon revision            */\r
-#define MII_RESV1           0x17        /* Reserved...                 */\r
-#define MII_LBRERROR        0x18        /* Lpback, rx, bypass error    */\r
-#define MII_PHYADDR         0x19        /* PHY address                 */\r
-#define MII_RESV2           0x1a        /* Reserved...                 */\r
-#define MII_TPISTATUS       0x1b        /* TPI status for 10mbps       */\r
-#define MII_NCONFIG         0x1c        /* Network interface config    */\r
-\r
-/* Basic mode control register. */\r
-#define BMCR_RESV               0x007f  /* Unused...                   */\r
-#define BMCR_CTST               0x0080  /* Collision test              */\r
-#define BMCR_FULLDPLX           0x0100  /* Full duplex                 */\r
-#define BMCR_ANRESTART          0x0200  /* Auto negotiation restart    */\r
-#define BMCR_ISOLATE            0x0400  /* Disconnect DP83840 from MII */\r
-#define BMCR_PDOWN              0x0800  /* Powerdown the DP83840       */\r
-#define BMCR_ANENABLE           0x1000  /* Enable auto negotiation     */\r
-#define BMCR_SPEED100           0x2000  /* Select 100Mbps              */\r
-#define BMCR_LOOPBACK           0x4000  /* TXD loopback bits           */\r
-#define BMCR_RESET              0x8000  /* Reset the DP83840           */\r
-\r
-/* Basic mode status register. */\r
-#define BMSR_ERCAP              0x0001  /* Ext-reg capability          */\r
-#define BMSR_JCD                0x0002  /* Jabber detected             */\r
-#define BMSR_LSTATUS            0x0004  /* Link status                 */\r
-#define BMSR_ANEGCAPABLE        0x0008  /* Able to do auto-negotiation */\r
-#define BMSR_RFAULT             0x0010  /* Remote fault detected       */\r
-#define BMSR_ANEGCOMPLETE       0x0020  /* Auto-negotiation complete   */\r
-#define BMSR_RESV               0x07c0  /* Unused...                   */\r
-#define BMSR_10HALF             0x0800  /* Can do 10mbps, half-duplex  */\r
-#define BMSR_10FULL             0x1000  /* Can do 10mbps, full-duplex  */\r
-#define BMSR_100HALF            0x2000  /* Can do 100mbps, half-duplex */\r
-#define BMSR_100FULL            0x4000  /* Can do 100mbps, full-duplex */\r
-#define BMSR_100BASE4           0x8000  /* Can do 100mbps, 4k packets  */\r
-\r
-/* Advertisement control register. */\r
-#define ADVERTISE_SLCT          0x001f  /* Selector bits               */\r
-#define ADVERTISE_CSMA          0x0001  /* Only selector supported     */\r
-#define ADVERTISE_10HALF        0x0020  /* Try for 10mbps half-duplex  */\r
-#define ADVERTISE_10FULL        0x0040  /* Try for 10mbps full-duplex  */\r
-#define ADVERTISE_100HALF       0x0080  /* Try for 100mbps half-duplex */\r
-#define ADVERTISE_100FULL       0x0100  /* Try for 100mbps full-duplex */\r
-#define ADVERTISE_100BASE4      0x0200  /* Try for 100mbps 4k packets  */\r
-#define ADVERTISE_RESV          0x1c00  /* Unused...                   */\r
-#define ADVERTISE_RFAULT        0x2000  /* Say we can detect faults    */\r
-#define ADVERTISE_LPACK         0x4000  /* Ack link partners response  */\r
-#define ADVERTISE_NPAGE         0x8000  /* Next page bit               */\r
-\r
-#define RX_DESCRIPTOR_NUM       4 //8    // Max Number of Rx Frame Descriptors\r
-#define TX_DESCRIPTOR_NUM       2 //4    // Max number of Tx Frame Descriptors\r
-\r
-#define PACKET_BUFFER_SIZE      1520\r
-\r
-#define CONFIG_PHY_ADDR     1\r
-\r
-\r
-// Frame Descriptor's Owner bit\r
-#define OWNERSHIP_EMAC 0x80000000  // 1 = EMAC\r
-//#define OWNERSHIP_CPU 0x7fffffff  // 0 = CPU\r
-\r
-\r
-\r
-// Rx Frame Descriptor Status\r
-#define RXFD_RXGD    0x00100000  // Receiving Good Packet Received\r
-#define RXFD_RTSAS   0x00800000  // RX Time Stamp Available \r
-\r
-\r
-// Tx Frame Descriptor's Control bits\r
-#define TXFD_TTSEN    0x08    // Tx Time Stamp Enable\r
-#define TXFD_INTEN    0x04    // Interrupt Enable\r
-#define TXFD_CRCAPP   0x02    // Append CRC\r
-#define TXFD_PADEN    0x01    // Padding Enable\r
-\r
-// Tx Frame Descriptor Status\r
-#define TXFD_TXCP    0x00080000  // Transmission Completion\r
-#define TXFD_TTSAS   0x08000000  // TX Time Stamp Available\r
-\r
-// Tx/Rx buffer descriptor structure\r
-struct eth_descriptor;\r
-struct eth_descriptor {\r
-    uint32_t  status1;\r
-    uint8_t *buf;\r
-    uint32_t  status2;\r
-    struct eth_descriptor *next;\r
-#ifdef TIME_STAMPING\r
-    uint32_t backup1;\r
-    uint32_t backup2;\r
-    uint32_t reserved1;\r
-    uint32_t reserved2;\r
-#endif\r
-};\r
-\r
-#ifdef TIME_STAMPING\r
-\r
-#define ETH_TS_ENABLE() do{EMAC->TSCTL = EMAC_TSCTL_TSEN_Msk;}while(0)\r
-#define ETH_TS_START() do{EMAC->TSCTL |= (EMAC_TSCTL_TSMODE_Msk | EMAC_TSCTL_TSIEN_Msk);}while(0)\r
-s32_t ETH_settime(u32_t sec, u32_t nsec);\r
-s32_t ETH_gettime(u32_t *sec, u32_t *nsec);\r
-s32_t ETH_updatetime(u32_t neg, u32_t sec, u32_t nsec);\r
-s32_t ETH_adjtimex(int ppm);\r
-void ETH_setinc(void);\r
-\r
-#endif\r
-\r
-#ifdef NU_TRACE\r
-#define NU_DEBUGF(x) { printf x; }\r
-#else\r
-#define NU_DEBUGF(x)\r
-#endif\r
-\r
-void numaker_set_mac_addr(uint8_t *addr);\r
-int numaker_eth_init(uint8_t *mac_addr);\r
-uint8_t *numaker_eth_get_tx_buf(void);\r
-void numaker_eth_trigger_tx(uint16_t length, void *p);\r
-int numaker_eth_get_rx_buf(uint16_t *len, uint8_t **buf);\r
-void numaker_eth_rx_next(void);\r
-void numaker_eth_trigger_rx(void);\r
-int numaker_eth_link_ok(void);\r
-void numaker_mac_address(uint8_t *mac);\r
-void numaker_eth_enable_interrupts(void);\r
-void numaker_eth_disable_interrupts(void);\r
-\r
-#endif  /* _M480_ETH_ */\r
+/**************************************************************************//**
+ * @copyright (C) 2019 Nuvoton Technology Corp. All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *   1. Redistributions of source code must retain the above copyright notice,
+ *      this list of conditions and the following disclaimer.
+ *   2. Redistributions in binary form must reproduce the above copyright notice,
+ *      this list of conditions and the following disclaimer in the documentation
+ *      and/or other materials provided with the distribution.
+ *   3. Neither the name of Nuvoton Technology Corp. nor the names of its contributors
+ *      may be used to endorse or promote products derived from this software
+ *      without specific prior written permission.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*****************************************************************************/
+#include "M480.h"
+#ifndef  _M480_ETH_
+#define  _M480_ETH_
+
+/* Generic MII registers. */
+
+#define MII_BMCR            0x00        /* Basic mode control register */
+#define MII_BMSR            0x01        /* Basic mode status register  */
+#define MII_PHYSID1         0x02        /* PHYS ID 1                   */
+#define MII_PHYSID2         0x03        /* PHYS ID 2                   */
+#define MII_ADVERTISE       0x04        /* Advertisement control reg   */
+#define MII_LPA             0x05        /* Link partner ability reg    */
+#define MII_EXPANSION       0x06        /* Expansion register          */
+#define MII_DCOUNTER        0x12        /* Disconnect counter          */
+#define MII_FCSCOUNTER      0x13        /* False carrier counter       */
+#define MII_NWAYTEST        0x14        /* N-way auto-neg test reg     */
+#define MII_RERRCOUNTER     0x15        /* Receive error counter       */
+#define MII_SREVISION       0x16        /* Silicon revision            */
+#define MII_RESV1           0x17        /* Reserved...                 */
+#define MII_LBRERROR        0x18        /* Lpback, rx, bypass error    */
+#define MII_PHYADDR         0x19        /* PHY address                 */
+#define MII_RESV2           0x1a        /* Reserved...                 */
+#define MII_TPISTATUS       0x1b        /* TPI status for 10mbps       */
+#define MII_NCONFIG         0x1c        /* Network interface config    */
+
+/* Basic mode control register. */
+#define BMCR_RESV               0x007f  /* Unused...                   */
+#define BMCR_CTST               0x0080  /* Collision test              */
+#define BMCR_FULLDPLX           0x0100  /* Full duplex                 */
+#define BMCR_ANRESTART          0x0200  /* Auto negotiation restart    */
+#define BMCR_ISOLATE            0x0400  /* Disconnect DP83840 from MII */
+#define BMCR_PDOWN              0x0800  /* Powerdown the DP83840       */
+#define BMCR_ANENABLE           0x1000  /* Enable auto negotiation     */
+#define BMCR_SPEED100           0x2000  /* Select 100Mbps              */
+#define BMCR_LOOPBACK           0x4000  /* TXD loopback bits           */
+#define BMCR_RESET              0x8000  /* Reset the DP83840           */
+
+/* Basic mode status register. */
+#define BMSR_ERCAP              0x0001  /* Ext-reg capability          */
+#define BMSR_JCD                0x0002  /* Jabber detected             */
+#define BMSR_LSTATUS            0x0004  /* Link status                 */
+#define BMSR_ANEGCAPABLE        0x0008  /* Able to do auto-negotiation */
+#define BMSR_RFAULT             0x0010  /* Remote fault detected       */
+#define BMSR_ANEGCOMPLETE       0x0020  /* Auto-negotiation complete   */
+#define BMSR_RESV               0x07c0  /* Unused...                   */
+#define BMSR_10HALF             0x0800  /* Can do 10mbps, half-duplex  */
+#define BMSR_10FULL             0x1000  /* Can do 10mbps, full-duplex  */
+#define BMSR_100HALF            0x2000  /* Can do 100mbps, half-duplex */
+#define BMSR_100FULL            0x4000  /* Can do 100mbps, full-duplex */
+#define BMSR_100BASE4           0x8000  /* Can do 100mbps, 4k packets  */
+
+/* Advertisement control register. */
+#define ADVERTISE_SLCT          0x001f  /* Selector bits               */
+#define ADVERTISE_CSMA          0x0001  /* Only selector supported     */
+#define ADVERTISE_10HALF        0x0020  /* Try for 10mbps half-duplex  */
+#define ADVERTISE_10FULL        0x0040  /* Try for 10mbps full-duplex  */
+#define ADVERTISE_100HALF       0x0080  /* Try for 100mbps half-duplex */
+#define ADVERTISE_100FULL       0x0100  /* Try for 100mbps full-duplex */
+#define ADVERTISE_100BASE4      0x0200  /* Try for 100mbps 4k packets  */
+#define ADVERTISE_RESV          0x1c00  /* Unused...                   */
+#define ADVERTISE_RFAULT        0x2000  /* Say we can detect faults    */
+#define ADVERTISE_LPACK         0x4000  /* Ack link partners response  */
+#define ADVERTISE_NPAGE         0x8000  /* Next page bit               */
+
+#define RX_DESCRIPTOR_NUM       4 //8    // Max Number of Rx Frame Descriptors
+#define TX_DESCRIPTOR_NUM       2 //4    // Max number of Tx Frame Descriptors
+
+#define PACKET_BUFFER_SIZE      1520
+
+#define CONFIG_PHY_ADDR     1
+
+
+// Frame Descriptor's Owner bit
+#define OWNERSHIP_EMAC 0x80000000  // 1 = EMAC
+//#define OWNERSHIP_CPU 0x7fffffff  // 0 = CPU
+
+
+
+// Rx Frame Descriptor Status
+#define RXFD_RXGD    0x00100000  // Receiving Good Packet Received
+#define RXFD_RTSAS   0x00800000  // RX Time Stamp Available 
+
+
+// Tx Frame Descriptor's Control bits
+#define TXFD_TTSEN    0x08    // Tx Time Stamp Enable
+#define TXFD_INTEN    0x04    // Interrupt Enable
+#define TXFD_CRCAPP   0x02    // Append CRC
+#define TXFD_PADEN    0x01    // Padding Enable
+
+// Tx Frame Descriptor Status
+#define TXFD_TXCP    0x00080000  // Transmission Completion
+#define TXFD_TTSAS   0x08000000  // TX Time Stamp Available
+
+// Tx/Rx buffer descriptor structure
+struct eth_descriptor;
+struct eth_descriptor {
+    uint32_t  status1;
+    uint8_t *buf;
+    uint32_t  status2;
+    struct eth_descriptor *next;
+#ifdef TIME_STAMPING
+    uint32_t backup1;
+    uint32_t backup2;
+    uint32_t reserved1;
+    uint32_t reserved2;
+#endif
+};
+
+#ifdef TIME_STAMPING
+
+#define ETH_TS_ENABLE() do{EMAC->TSCTL = EMAC_TSCTL_TSEN_Msk;}while(0)
+#define ETH_TS_START() do{EMAC->TSCTL |= (EMAC_TSCTL_TSMODE_Msk | EMAC_TSCTL_TSIEN_Msk);}while(0)
+s32_t ETH_settime(u32_t sec, u32_t nsec);
+s32_t ETH_gettime(u32_t *sec, u32_t *nsec);
+s32_t ETH_updatetime(u32_t neg, u32_t sec, u32_t nsec);
+s32_t ETH_adjtimex(int ppm);
+void ETH_setinc(void);
+
+#endif
+
+#ifdef NU_TRACE
+#define NU_DEBUGF(x) { printf x; }
+#else
+#define NU_DEBUGF(x)
+#endif
+
+void numaker_set_mac_addr(uint8_t *addr);
+int numaker_eth_init(uint8_t *mac_addr);
+uint8_t *numaker_eth_get_tx_buf(void);
+void numaker_eth_trigger_tx(uint16_t length, void *p);
+int numaker_eth_get_rx_buf(uint16_t *len, uint8_t **buf);
+void numaker_eth_rx_next(void);
+void numaker_eth_trigger_rx(void);
+int numaker_eth_link_ok(void);
+void numaker_mac_address(uint8_t *mac);
+void numaker_eth_enable_interrupts(void);
+void numaker_eth_disable_interrupts(void);
+
+#endif  /* _M480_ETH_ */
index 347bb113edc156a9e34297234ecafdcff635fcee..d4dc8687c877248b311b4df7e851c551137803b9 100644 (file)
@@ -1,10 +1,10 @@
-Network drivers are provided as examples only, and do not form part of the\r
-FreeRTOS+TCP stack itself.  They:\r
-\r
-       + May be based on driver code provided by the chip vendors,\r
-       + May not have been tested in all possible configurations,\r
-       + Will not necessarily be optimised.\r
-       + May have a dependency on a particular PHY part number.\r
-       + May not necessarily comply with any particular coding standard.\r
-       + May have dependencies on chip company libraries.\r
-       + May include other hardware board dependencies.\r
+Network drivers are provided as examples only, and do not form part of the
+FreeRTOS+TCP stack itself.  They:
+
+       + May be based on driver code provided by the chip vendors,
+       + May not have been tested in all possible configurations,
+       + Will not necessarily be optimised.
+       + May have a dependency on a particular PHY part number.
+       + May not necessarily comply with any particular coding standard.
+       + May have dependencies on chip company libraries.
+       + May include other hardware board dependencies.
index 5a605af9b5f12ab9b713cb6e1aa7f12911c34495..139979cce5a5e64f610be7af6f81d5bb9180e00e 100644 (file)
-/***********************************************************************************************************************\r
-* DISCLAIMER\r
-* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No\r
-* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all\r
-* applicable laws, including copyright laws.\r
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING\r
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,\r
-* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM\r
-* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES\r
-* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS\r
-* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\r
-* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of\r
-* this software. By using this software, you agree to the additional terms and conditions found by accessing the\r
-* following link:\r
-* http://www.renesas.com/disclaimer\r
-*\r
-* Copyright (C) 2018 Renesas Electronics Corporation. All rights reserved.\r
-***********************************************************************************************************************/\r
-\r
-/***********************************************************************************************************************\r
-* File Name    : NetworkInterface.c\r
-* Device(s)    : RX\r
-* Description  : Interfaces FreeRTOS TCP/IP stack to RX Ethernet driver.\r
-***********************************************************************************************************************/\r
-\r
-/***********************************************************************************************************************\r
-* History : DD.MM.YYYY Version  Description\r
-*         : 07.03.2018 0.1     Development\r
-***********************************************************************************************************************/\r
-\r
-/***********************************************************************************************************************\r
-*  Includes   <System Includes> , "Project Includes"\r
-***********************************************************************************************************************/\r
-#include <stdint.h>\r
-#include <stdio.h>\r
-#include <stdlib.h>\r
-#include <string.h>\r
-\r
-/* FreeRTOS includes. */\r
-#include "FreeRTOS.h"\r
-#include "task.h"\r
-#include "FreeRTOS_IP.h"\r
-#include "FreeRTOS_IP_Private.h"\r
-/*#include "FreeRTOS_DNS.h" */\r
-#include "NetworkBufferManagement.h"\r
-#include "NetworkInterface.h"\r
-\r
-#include "r_ether_rx_if.h"\r
-#include "r_pinset.h"\r
-\r
-/***********************************************************************************************************************\r
- * Macro definitions\r
- **********************************************************************************************************************/\r
-#define ETHER_BUFSIZE_MIN    60\r
-\r
-#if defined( BSP_MCU_RX65N ) || defined( BSP_MCU_RX64M ) || defined( BSP_MCU_RX71M )\r
-    #if ETHER_CFG_MODE_SEL == 0\r
-        #define R_ETHER_PinSet_CHANNEL_0()    R_ETHER_PinSet_ETHERC0_MII()\r
-    #elif ETHER_CFG_MODE_SEL == 1\r
-        #define R_ETHER_PinSet_CHANNEL_0()    R_ETHER_PinSet_ETHERC0_RMII()\r
-    #endif\r
-#elif defined( BSP_MCU_RX63N )\r
-    #if ETHER_CFG_MODE_SEL == 0\r
-        #define R_ETHER_PinSet_CHANNEL_0()    R_ETHER_PinSet_ETHERC_MII()\r
-    #elif ETHER_CFG_MODE_SEL == 1\r
-        #define R_ETHER_PinSet_CHANNEL_0()    R_ETHER_PinSet_ETHERC_RMII()\r
-    #endif\r
-#endif /* if defined( BSP_MCU_RX65N ) || defined( BSP_MCU_RX64M ) || defined( BSP_MCU_RX71M ) */\r
-\r
-#ifndef PHY_LS_HIGH_CHECK_TIME_MS\r
-\r
-/* Check if the LinkSStatus in the PHY is still high after 2 seconds of not\r
- * receiving packets. */\r
-    #define PHY_LS_HIGH_CHECK_TIME_MS    2000\r
-#endif\r
-\r
-#ifndef PHY_LS_LOW_CHECK_TIME_MS\r
-    /* Check if the LinkSStatus in the PHY is still low every second. */\r
-    #define PHY_LS_LOW_CHECK_TIME_MS    1000\r
-#endif\r
-\r
-/***********************************************************************************************************************\r
- * Private global variables and functions\r
- **********************************************************************************************************************/\r
-typedef enum\r
-{\r
-    eMACInit,   /* Must initialise MAC. */\r
-    eMACPass,   /* Initialisation was successful. */\r
-    eMACFailed, /* Initialisation failed. */\r
-} eMAC_INIT_STATUS_TYPE;\r
-\r
-static TaskHandle_t ether_receive_check_task_handle = 0;\r
-static TaskHandle_t ether_link_check_task_handle = 0;\r
-static TaskHandle_t xTaskToNotify = NULL;\r
-static BaseType_t xPHYLinkStatus;\r
-static BaseType_t xReportedStatus;\r
-static eMAC_INIT_STATUS_TYPE xMacInitStatus = eMACInit;\r
-\r
-static int16_t SendData( uint8_t * pucBuffer,\r
-                         size_t length );\r
-static int InitializeNetwork( void );\r
-static void prvEMACDeferredInterruptHandlerTask( void * pvParameters );\r
-static void clear_all_ether_rx_discriptors( uint32_t event );\r
-\r
-int32_t callback_ether_regist( void );\r
-void EINT_Trig_isr( void * );\r
-void get_random_number( uint8_t * data,\r
-                        uint32_t len );\r
-\r
-void prvLinkStatusChange( BaseType_t xStatus );\r
-#if ( ipconfigHAS_PRINTF != 0 )\r
-    static void prvMonitorResources( void );\r
-#endif\r
-\r
-/***********************************************************************************************************************\r
- * Function Name: xNetworkInterfaceInitialise ()\r
- * Description  : Initialization of Ethernet driver.\r
- * Arguments    : none\r
- * Return Value : pdPASS, pdFAIL\r
- **********************************************************************************************************************/\r
-BaseType_t xNetworkInterfaceInitialise( void )\r
-{\r
-    BaseType_t xReturn;\r
-\r
-    if( xMacInitStatus == eMACInit )\r
-    {\r
-        /*\r
-         * Perform the hardware specific network initialization here using the Ethernet driver library to initialize the\r
-         * Ethernet hardware, initialize DMA descriptors, and perform a PHY auto-negotiation to obtain a network link.\r
-         *\r
-         * InitialiseNetwork() uses Ethernet peripheral driver library function, and returns 0 if the initialization fails.\r
-         */\r
-        if( InitializeNetwork() == pdFALSE )\r
-        {\r
-            xMacInitStatus = eMACFailed;\r
-        }\r
-        else\r
-        {\r
-            /* Indicate that the MAC initialisation succeeded. */\r
-            xMacInitStatus = eMACPass;\r
-        }\r
-\r
-        FreeRTOS_printf( ( "InitializeNetwork returns %s\n", ( xMacInitStatus == eMACPass ) ? "OK" : " Fail" ) );\r
-    }\r
-\r
-    if( xMacInitStatus == eMACPass )\r
-    {\r
-        xReturn = xPHYLinkStatus;\r
-    }\r
-    else\r
-    {\r
-        xReturn = pdFAIL;\r
-    }\r
-\r
-    FreeRTOS_printf( ( "xNetworkInterfaceInitialise returns %d\n", xReturn ) );\r
-\r
-    return xReturn;\r
-} /* End of function xNetworkInterfaceInitialise() */\r
-\r
-\r
-/***********************************************************************************************************************\r
- * Function Name: xNetworkInterfaceOutput ()\r
- * Description  : Simple network output interface.\r
- * Arguments    : pxDescriptor, xReleaseAfterSend\r
- * Return Value : pdTRUE, pdFALSE\r
- **********************************************************************************************************************/\r
-BaseType_t xNetworkInterfaceOutput( NetworkBufferDescriptor_t * const pxDescriptor,\r
-                                    BaseType_t xReleaseAfterSend )\r
-{\r
-    BaseType_t xReturn = pdFALSE;\r
-\r
-    /* Simple network interfaces (as opposed to more efficient zero copy network\r
-     * interfaces) just use Ethernet peripheral driver library functions to copy\r
-     * data from the FreeRTOS+TCP buffer into the peripheral driver's own buffer.\r
-     * This example assumes SendData() is a peripheral driver library function that\r
-     * takes a pointer to the start of the data to be sent and the length of the\r
-     * data to be sent as two separate parameters.  The start of the data is located\r
-     * by pxDescriptor->pucEthernetBuffer.  The length of the data is located\r
-     * by pxDescriptor->xDataLength. */\r
-    if( xPHYLinkStatus != 0 )\r
-    {\r
-        if( SendData( pxDescriptor->pucEthernetBuffer, pxDescriptor->xDataLength ) >= 0 )\r
-        {\r
-            xReturn = pdTRUE;\r
-            /* Call the standard trace macro to log the send event. */\r
-            iptraceNETWORK_INTERFACE_TRANSMIT();\r
-        }\r
-    }\r
-    else\r
-    {\r
-        /* As the PHY Link Status is low, it makes no sense trying to deliver a packet. */\r
-    }\r
-\r
-    if( xReleaseAfterSend != pdFALSE )\r
-    {\r
-        /* It is assumed SendData() copies the data out of the FreeRTOS+TCP Ethernet\r
-         * buffer.  The Ethernet buffer is therefore no longer needed, and must be\r
-         * freed for re-use. */\r
-        vReleaseNetworkBufferAndDescriptor( pxDescriptor );\r
-    }\r
-\r
-    return xReturn;\r
-} /* End of function xNetworkInterfaceOutput() */\r
-\r
-\r
-#if ( ipconfigHAS_PRINTF != 0 )\r
-    static void prvMonitorResources()\r
-    {\r
-        static UBaseType_t uxLastMinBufferCount = 0u;\r
-        static UBaseType_t uxCurrentBufferCount = 0u;\r
-        static size_t uxMinLastSize = 0uL;\r
-        static size_t uxCurLastSize = 0uL;\r
-        size_t uxMinSize;\r
-        size_t uxCurSize;\r
-\r
-        uxCurrentBufferCount = uxGetMinimumFreeNetworkBuffers();\r
-\r
-        if( uxLastMinBufferCount != uxCurrentBufferCount )\r
-        {\r
-            /* The logging produced below may be helpful\r
-             * while tuning +TCP: see how many buffers are in use. */\r
-            uxLastMinBufferCount = uxCurrentBufferCount;\r
-            FreeRTOS_printf( ( "Network buffers: %lu lowest %lu\n",\r
-                               uxGetNumberOfFreeNetworkBuffers(), uxCurrentBufferCount ) );\r
-        }\r
-\r
-        uxMinSize = xPortGetMinimumEverFreeHeapSize();\r
-        uxCurSize = xPortGetFreeHeapSize();\r
-\r
-        if( uxMinLastSize != uxMinSize )\r
-        {\r
-            uxCurLastSize = uxCurSize;\r
-            uxMinLastSize = uxMinSize;\r
-            FreeRTOS_printf( ( "Heap: current %lu lowest %lu\n", uxCurSize, uxMinSize ) );\r
-        }\r
-\r
-        #if ( ipconfigCHECK_IP_QUEUE_SPACE != 0 )\r
-            {\r
-                static UBaseType_t uxLastMinQueueSpace = 0;\r
-                UBaseType_t uxCurrentCount = 0u;\r
-\r
-                uxCurrentCount = uxGetMinimumIPQueueSpace();\r
-\r
-                if( uxLastMinQueueSpace != uxCurrentCount )\r
-                {\r
-                    /* The logging produced below may be helpful\r
-                     * while tuning +TCP: see how many buffers are in use. */\r
-                    uxLastMinQueueSpace = uxCurrentCount;\r
-                    FreeRTOS_printf( ( "Queue space: lowest %lu\n", uxCurrentCount ) );\r
-                }\r
-            }\r
-        #endif /* ipconfigCHECK_IP_QUEUE_SPACE */\r
-    }\r
-#endif /* ( ipconfigHAS_PRINTF != 0 ) */\r
-\r
-/***********************************************************************************************************************\r
- * Function Name: prvEMACDeferredInterruptHandlerTask ()\r
- * Description  : The deferred interrupt handler is a standard RTOS task.\r
- * Arguments    : pvParameters\r
- * Return Value : none\r
- **********************************************************************************************************************/\r
-static void prvEMACDeferredInterruptHandlerTask( void * pvParameters )\r
-{\r
-    NetworkBufferDescriptor_t * pxBufferDescriptor;\r
-    int32_t xBytesReceived = 0;\r
-\r
-    /* Avoid compiler warning about unreferenced parameter. */\r
-    ( void ) pvParameters;\r
-\r
-    /* Used to indicate that xSendEventStructToIPTask() is being called because\r
-     * of an Ethernet receive event. */\r
-    IPStackEvent_t xRxEvent;\r
-\r
-    uint8_t * buffer_pointer;\r
-\r
-    /* Some variables related to monitoring the PHY. */\r
-    TimeOut_t xPhyTime;\r
-    TickType_t xPhyRemTime;\r
-    const TickType_t ulMaxBlockTime = pdMS_TO_TICKS( 100UL );\r
-\r
-    vTaskSetTimeOutState( &xPhyTime );\r
-    xPhyRemTime = pdMS_TO_TICKS( PHY_LS_LOW_CHECK_TIME_MS );\r
-\r
-    FreeRTOS_printf( ( "Deferred Interrupt Handler Task started\n" ) );\r
-    xTaskToNotify = ether_receive_check_task_handle;\r
-\r
-    for( ; ; )\r
-    {\r
-        #if ( ipconfigHAS_PRINTF != 0 )\r
-            {\r
-                prvMonitorResources();\r
-            }\r
-        #endif /* ipconfigHAS_PRINTF != 0 ) */\r
-\r
-        /* Wait for the Ethernet MAC interrupt to indicate that another packet\r
-         * has been received.  */\r
-        if( xBytesReceived <= 0 )\r
-        {\r
-            ulTaskNotifyTake( pdFALSE, ulMaxBlockTime );\r
-        }\r
-\r
-        /* See how much data was received.  */\r
-        xBytesReceived = R_ETHER_Read_ZC2( ETHER_CHANNEL_0, ( void ** ) &buffer_pointer );\r
-\r
-        if( xBytesReceived < 0 )\r
-        {\r
-            /* This is an error. Logged. */\r
-               if( xBytesReceived == ETHER_ERR_LINK )\r
-               {\r
-                               /* Auto-negotiation is not completed, and transmission/\r
-                               reception is not enabled. Will be logged elsewhere. */\r
-               }\r
-               else\r
-               {\r
-                       FreeRTOS_printf( ( "R_ETHER_Read_ZC2: rc = %d not %d\n", xBytesReceived, ETHER_ERR_LINK ) );\r
-               }\r
-        }\r
-        else if( xBytesReceived > 0 )\r
-        {\r
-            /* Allocate a network buffer descriptor that points to a buffer\r
-             * large enough to hold the received frame.  As this is the simple\r
-             * rather than efficient example the received data will just be copied\r
-             * into this buffer. */\r
-            pxBufferDescriptor = pxGetNetworkBufferWithDescriptor( ( size_t ) xBytesReceived, 0 );\r
-\r
-            if( pxBufferDescriptor != NULL )\r
-            {\r
-                /* pxBufferDescriptor->pucEthernetBuffer now points to an Ethernet\r
-                 * buffer large enough to hold the received data.  Copy the\r
-                 * received data into pcNetworkBuffer->pucEthernetBuffer.  Here it\r
-                 * is assumed ReceiveData() is a peripheral driver function that\r
-                 * copies the received data into a buffer passed in as the function's\r
-                 * parameter.  Remember! While is is a simple robust technique -\r
-                 * it is not efficient.  An example that uses a zero copy technique\r
-                 * is provided further down this page. */\r
-                memcpy( pxBufferDescriptor->pucEthernetBuffer, buffer_pointer, ( size_t ) xBytesReceived );\r
-                /*ReceiveData( pxBufferDescriptor->pucEthernetBuffer ); */\r
-\r
-                /* Set the actual packet length, in case a larger buffer was returned. */\r
-                pxBufferDescriptor->xDataLength = ( size_t ) xBytesReceived;\r
-\r
-                R_ETHER_Read_ZC2_BufRelease( ETHER_CHANNEL_0 );\r
-\r
-                /* See if the data contained in the received Ethernet frame needs\r
-                * to be processed.  NOTE! It is preferable to do this in\r
-                * the interrupt service routine itself, which would remove the need\r
-                * to unblock this task for packets that don't need processing. */\r
-                if( eConsiderFrameForProcessing( pxBufferDescriptor->pucEthernetBuffer ) == eProcessBuffer )\r
-                {\r
-                    /* The event about to be sent to the TCP/IP is an Rx event. */\r
-                    xRxEvent.eEventType = eNetworkRxEvent;\r
-\r
-                    /* pvData is used to point to the network buffer descriptor that\r
-                     * now references the received data. */\r
-                    xRxEvent.pvData = ( void * ) pxBufferDescriptor;\r
-\r
-                    /* Send the data to the TCP/IP stack. */\r
-                    if( xSendEventStructToIPTask( &xRxEvent, 0 ) == pdFALSE )\r
-                    {\r
-                        /* The buffer could not be sent to the IP task so the buffer must be released. */\r
-                        vReleaseNetworkBufferAndDescriptor( pxBufferDescriptor );\r
-\r
-                        /* Make a call to the standard trace macro to log the occurrence. */\r
-                        iptraceETHERNET_RX_EVENT_LOST();\r
-                        clear_all_ether_rx_discriptors( 0 );\r
-                    }\r
-                    else\r
-                    {\r
-                        /* The message was successfully sent to the TCP/IP stack.\r
-                        * Call the standard trace macro to log the occurrence. */\r
-                        iptraceNETWORK_INTERFACE_RECEIVE();\r
-                        R_NOP();\r
-                    }\r
-                }\r
-                else\r
-                {\r
-                    /* The Ethernet frame can be dropped, but the Ethernet buffer must be released. */\r
-                    vReleaseNetworkBufferAndDescriptor( pxBufferDescriptor );\r
-                }\r
-            }\r
-            else\r
-            {\r
-                /* The event was lost because a network buffer was not available.\r
-                 * Call the standard trace macro to log the occurrence. */\r
-                iptraceETHERNET_RX_EVENT_LOST();\r
-                clear_all_ether_rx_discriptors( 1 );\r
-                FreeRTOS_printf( ( "R_ETHER_Read_ZC2: Cleared descriptors\n" ) );\r
-            }\r
-        }\r
-\r
-        if( xBytesReceived > 0 )\r
-        {\r
-            /* A packet was received. No need to check for the PHY status now,\r
-             * but set a timer to check it later on. */\r
-            vTaskSetTimeOutState( &xPhyTime );\r
-            xPhyRemTime = pdMS_TO_TICKS( PHY_LS_HIGH_CHECK_TIME_MS );\r
-\r
-            /* Indicate that the Link Status is high, so that\r
-             * xNetworkInterfaceOutput() can send packets. */\r
-            if( xPHYLinkStatus == 0 )\r
-            {\r
-                xPHYLinkStatus = 1;\r
-                FreeRTOS_printf( ( "prvEMACHandlerTask: PHY LS assume %d\n", xPHYLinkStatus ) );\r
-            }\r
-        }\r
-        else if( ( xTaskCheckForTimeOut( &xPhyTime, &xPhyRemTime ) != pdFALSE ) || ( FreeRTOS_IsNetworkUp() == pdFALSE ) )\r
-        {\r
-            R_ETHER_LinkProcess( 0 );\r
-\r
-            if( xPHYLinkStatus != xReportedStatus )\r
-            {\r
-                xPHYLinkStatus = xReportedStatus;\r
-                FreeRTOS_printf( ( "prvEMACHandlerTask: PHY LS now %d\n", xPHYLinkStatus ) );\r
-            }\r
-\r
-            vTaskSetTimeOutState( &xPhyTime );\r
-\r
-            if( xPHYLinkStatus != 0 )\r
-            {\r
-                xPhyRemTime = pdMS_TO_TICKS( PHY_LS_HIGH_CHECK_TIME_MS );\r
-            }\r
-            else\r
-            {\r
-                xPhyRemTime = pdMS_TO_TICKS( PHY_LS_LOW_CHECK_TIME_MS );\r
-            }\r
-        }\r
-    }\r
-} /* End of function prvEMACDeferredInterruptHandlerTask() */\r
-\r
-\r
-/***********************************************************************************************************************\r
- * Function Name: vNetworkInterfaceAllocateRAMToBuffers ()\r
- * Description  : .\r
- * Arguments    : pxNetworkBuffers\r
- * Return Value : none\r
- **********************************************************************************************************************/\r
-void vNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] )\r
-{\r
-    uint32_t ul;\r
-    uint8_t * buffer_address;\r
-\r
-    R_EXTERN_SEC( B_ETHERNET_BUFFERS_1 )\r
-\r
-    buffer_address = R_SECTOP( B_ETHERNET_BUFFERS_1 );\r
-\r
-    for( ul = 0; ul < ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS; ul++ )\r
-    {\r
-        pxNetworkBuffers[ ul ].pucEthernetBuffer = ( buffer_address + ( ETHER_CFG_BUFSIZE * ul ) );\r
-    }\r
-} /* End of function vNetworkInterfaceAllocateRAMToBuffers() */\r
-\r
-\r
-/***********************************************************************************************************************\r
- * Function Name: prvLinkStatusChange ()\r
- * Description  : Function will be called when the Link Status of the phy has changed ( see ether_callback.c )\r
- * Arguments    : xStatus : true when statyus has become high\r
- * Return Value : void\r
- **********************************************************************************************************************/\r
-void prvLinkStatusChange( BaseType_t xStatus )\r
-{\r
-    if( xReportedStatus != xStatus )\r
-    {\r
-        xReportedStatus = xStatus;\r
-    }\r
-}\r
-\r
-/***********************************************************************************************************************\r
- * Function Name: InitializeNetwork ()\r
- * Description  :\r
- * Arguments    : none\r
- * Return Value : pdTRUE, pdFALSE\r
- **********************************************************************************************************************/\r
-static int InitializeNetwork( void )\r
-{\r
-    ether_return_t eth_ret;\r
-    BaseType_t return_code = pdFALSE;\r
-    ether_param_t param;\r
-    uint8_t myethaddr[ 6 ] =\r
-    {\r
-        configMAC_ADDR0,\r
-        configMAC_ADDR1,\r
-        configMAC_ADDR2,\r
-        configMAC_ADDR3,\r
-        configMAC_ADDR4,\r
-        configMAC_ADDR5\r
-    }; /*XXX Fix me */\r
-\r
-    R_ETHER_PinSet_CHANNEL_0();\r
-    R_ETHER_Initial();\r
-    callback_ether_regist();\r
-\r
-    param.channel = ETHER_CHANNEL_0;\r
-    eth_ret = R_ETHER_Control( CONTROL_POWER_ON, param ); /* PHY mode settings, module stop cancellation */\r
-\r
-    if( ETHER_SUCCESS != eth_ret )\r
-    {\r
-        return pdFALSE;\r
-    }\r
-\r
-    eth_ret = R_ETHER_Open_ZC2( ETHER_CHANNEL_0, myethaddr, ETHER_FLAG_OFF );\r
-\r
-    if( ETHER_SUCCESS != eth_ret )\r
-    {\r
-        return pdFALSE;\r
-    }\r
-\r
-    return_code = xTaskCreate( prvEMACDeferredInterruptHandlerTask,\r
-                               "ETHER_RECEIVE_CHECK_TASK",\r
-                               512u,\r
-                               0,\r
-                               configMAX_PRIORITIES - 1,\r
-                               &ether_receive_check_task_handle );\r
-\r
-    if( pdFALSE == return_code )\r
-    {\r
-        return pdFALSE;\r
-    }\r
-\r
-    return pdTRUE;\r
-} /* End of function InitializeNetwork() */\r
-\r
-\r
-/***********************************************************************************************************************\r
- * Function Name: SendData ()\r
- * Description  :\r
- * Arguments    : pucBuffer, length\r
- * Return Value : 0 success, negative fail\r
- **********************************************************************************************************************/\r
-static int16_t SendData( uint8_t * pucBuffer,\r
-                         size_t length ) /*TODO complete stub function */\r
-{\r
-    ether_return_t ret;\r
-    uint8_t * pwrite_buffer;\r
-    uint16_t write_buf_size;\r
-\r
-    /* (1) Retrieve the transmit buffer location controlled by the  descriptor. */\r
-    ret = R_ETHER_Write_ZC2_GetBuf( ETHER_CHANNEL_0, ( void ** ) &pwrite_buffer, &write_buf_size );\r
-\r
-    if( ETHER_SUCCESS == ret )\r
-    {\r
-        if( write_buf_size >= length )\r
-        {\r
-            memcpy( pwrite_buffer, pucBuffer, length );\r
-        }\r
-\r
-        if( length < ETHER_BUFSIZE_MIN )                                             /*under minimum*/\r
-        {\r
-            memset( ( pwrite_buffer + length ), 0, ( ETHER_BUFSIZE_MIN - length ) ); /*padding*/\r
-            length = ETHER_BUFSIZE_MIN;                                              /*resize*/\r
-        }\r
-\r
-        ret = R_ETHER_Write_ZC2_SetBuf( ETHER_CHANNEL_0, ( uint16_t ) length );\r
-        ret = R_ETHER_CheckWrite( ETHER_CHANNEL_0 );\r
-    }\r
-\r
-    if( ETHER_SUCCESS != ret )\r
-    {\r
-        return -5; /* XXX return meaningful value */\r
-    }\r
-    else\r
-    {\r
-        return 0;\r
-    }\r
-} /* End of function SendData() */\r
-\r
-\r
-/***********************************************************************************************************************\r
-* Function Name: EINT_Trig_isr\r
-* Description  : Standard frame received interrupt handler\r
-* Arguments    : ectrl - EDMAC and ETHERC control structure\r
-* Return Value : None\r
-* Note         : This callback function is executed when EINT0 interrupt occurred.\r
-***********************************************************************************************************************/\r
-void EINT_Trig_isr( void * ectrl )\r
-{\r
-    ether_cb_arg_t * pdecode;\r
-    BaseType_t xHigherPriorityTaskWoken = pdFALSE;\r
-\r
-    pdecode = ( ether_cb_arg_t * ) ectrl;\r
-\r
-    if( pdecode->status_eesr & 0x00040000 ) /* EDMAC FR (Frame Receive Event) interrupt */\r
-    {\r
-        if( xTaskToNotify != NULL )\r
-        {\r
-            vTaskNotifyGiveFromISR( ether_receive_check_task_handle, &xHigherPriorityTaskWoken );\r
-        }\r
-\r
-        /* If xHigherPriorityTaskWoken is now set to pdTRUE then a context switch\r
-         * should be performed to ensure the interrupt returns directly to the highest\r
-         * priority task.  The macro used for this purpose is dependent on the port in\r
-         * use and may be called portEND_SWITCHING_ISR(). */\r
-        portYIELD_FROM_ISR( xHigherPriorityTaskWoken );\r
-        /*TODO complete interrupt handler for other events. */\r
-    }\r
-} /* End of function EINT_Trig_isr() */\r
-\r
-\r
-static void clear_all_ether_rx_discriptors( uint32_t event )\r
-{\r
-    int32_t xBytesReceived;\r
-    uint8_t * buffer_pointer;\r
-\r
-    /* Avoid compiler warning about unreferenced parameter. */\r
-    ( void ) event;\r
-\r
-    while( 1 )\r
-    {\r
-        /* See how much data was received.  */\r
-        xBytesReceived = R_ETHER_Read_ZC2( ETHER_CHANNEL_0, ( void ** ) &buffer_pointer );\r
-\r
-        if( 0 > xBytesReceived )\r
-        {\r
-            /* This is an error. Ignored. */\r
-        }\r
-        else if( 0 < xBytesReceived )\r
-        {\r
-            R_ETHER_Read_ZC2_BufRelease( ETHER_CHANNEL_0 );\r
-            iptraceETHERNET_RX_EVENT_LOST();\r
-        }\r
-        else\r
-        {\r
-            break;\r
-        }\r
-    }\r
-}\r
-\r
-/***********************************************************************************************************************\r
- * End of file "NetworkInterface.c"\r
- **********************************************************************************************************************/\r
+/***********************************************************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No
+* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
+* applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,
+* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM
+* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES
+* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS
+* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of
+* this software. By using this software, you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+*
+* Copyright (C) 2018 Renesas Electronics Corporation. All rights reserved.
+***********************************************************************************************************************/
+
+/***********************************************************************************************************************
+* File Name    : NetworkInterface.c
+* Device(s)    : RX
+* Description  : Interfaces FreeRTOS TCP/IP stack to RX Ethernet driver.
+***********************************************************************************************************************/
+
+/***********************************************************************************************************************
+* History : DD.MM.YYYY Version  Description
+*         : 07.03.2018 0.1     Development
+***********************************************************************************************************************/
+
+/***********************************************************************************************************************
+*  Includes   <System Includes> , "Project Includes"
+***********************************************************************************************************************/
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+/* FreeRTOS includes. */
+#include "FreeRTOS.h"
+#include "task.h"
+#include "FreeRTOS_IP.h"
+#include "FreeRTOS_IP_Private.h"
+/*#include "FreeRTOS_DNS.h" */
+#include "NetworkBufferManagement.h"
+#include "NetworkInterface.h"
+
+#include "r_ether_rx_if.h"
+#include "r_pinset.h"
+
+/***********************************************************************************************************************
+ * Macro definitions
+ **********************************************************************************************************************/
+#define ETHER_BUFSIZE_MIN    60
+
+#if defined( BSP_MCU_RX65N ) || defined( BSP_MCU_RX64M ) || defined( BSP_MCU_RX71M )
+    #if ETHER_CFG_MODE_SEL == 0
+        #define R_ETHER_PinSet_CHANNEL_0()    R_ETHER_PinSet_ETHERC0_MII()
+    #elif ETHER_CFG_MODE_SEL == 1
+        #define R_ETHER_PinSet_CHANNEL_0()    R_ETHER_PinSet_ETHERC0_RMII()
+    #endif
+#elif defined( BSP_MCU_RX63N )
+    #if ETHER_CFG_MODE_SEL == 0
+        #define R_ETHER_PinSet_CHANNEL_0()    R_ETHER_PinSet_ETHERC_MII()
+    #elif ETHER_CFG_MODE_SEL == 1
+        #define R_ETHER_PinSet_CHANNEL_0()    R_ETHER_PinSet_ETHERC_RMII()
+    #endif
+#endif /* if defined( BSP_MCU_RX65N ) || defined( BSP_MCU_RX64M ) || defined( BSP_MCU_RX71M ) */
+
+#ifndef PHY_LS_HIGH_CHECK_TIME_MS
+
+/* Check if the LinkSStatus in the PHY is still high after 2 seconds of not
+ * receiving packets. */
+    #define PHY_LS_HIGH_CHECK_TIME_MS    2000
+#endif
+
+#ifndef PHY_LS_LOW_CHECK_TIME_MS
+    /* Check if the LinkSStatus in the PHY is still low every second. */
+    #define PHY_LS_LOW_CHECK_TIME_MS    1000
+#endif
+
+/***********************************************************************************************************************
+ * Private global variables and functions
+ **********************************************************************************************************************/
+typedef enum
+{
+    eMACInit,   /* Must initialise MAC. */
+    eMACPass,   /* Initialisation was successful. */
+    eMACFailed, /* Initialisation failed. */
+} eMAC_INIT_STATUS_TYPE;
+
+static TaskHandle_t ether_receive_check_task_handle = 0;
+static TaskHandle_t ether_link_check_task_handle = 0;
+static TaskHandle_t xTaskToNotify = NULL;
+static BaseType_t xPHYLinkStatus;
+static BaseType_t xReportedStatus;
+static eMAC_INIT_STATUS_TYPE xMacInitStatus = eMACInit;
+
+static int16_t SendData( uint8_t * pucBuffer,
+                         size_t length );
+static int InitializeNetwork( void );
+static void prvEMACDeferredInterruptHandlerTask( void * pvParameters );
+static void clear_all_ether_rx_discriptors( uint32_t event );
+
+int32_t callback_ether_regist( void );
+void EINT_Trig_isr( void * );
+void get_random_number( uint8_t * data,
+                        uint32_t len );
+
+void prvLinkStatusChange( BaseType_t xStatus );
+#if ( ipconfigHAS_PRINTF != 0 )
+    static void prvMonitorResources( void );
+#endif
+
+/***********************************************************************************************************************
+ * Function Name: xNetworkInterfaceInitialise ()
+ * Description  : Initialization of Ethernet driver.
+ * Arguments    : none
+ * Return Value : pdPASS, pdFAIL
+ **********************************************************************************************************************/
+BaseType_t xNetworkInterfaceInitialise( void )
+{
+    BaseType_t xReturn;
+
+    if( xMacInitStatus == eMACInit )
+    {
+        /*
+         * Perform the hardware specific network initialization here using the Ethernet driver library to initialize the
+         * Ethernet hardware, initialize DMA descriptors, and perform a PHY auto-negotiation to obtain a network link.
+         *
+         * InitialiseNetwork() uses Ethernet peripheral driver library function, and returns 0 if the initialization fails.
+         */
+        if( InitializeNetwork() == pdFALSE )
+        {
+            xMacInitStatus = eMACFailed;
+        }
+        else
+        {
+            /* Indicate that the MAC initialisation succeeded. */
+            xMacInitStatus = eMACPass;
+        }
+
+        FreeRTOS_printf( ( "InitializeNetwork returns %s\n", ( xMacInitStatus == eMACPass ) ? "OK" : " Fail" ) );
+    }
+
+    if( xMacInitStatus == eMACPass )
+    {
+        xReturn = xPHYLinkStatus;
+    }
+    else
+    {
+        xReturn = pdFAIL;
+    }
+
+    FreeRTOS_printf( ( "xNetworkInterfaceInitialise returns %d\n", xReturn ) );
+
+    return xReturn;
+} /* End of function xNetworkInterfaceInitialise() */
+
+
+/***********************************************************************************************************************
+ * Function Name: xNetworkInterfaceOutput ()
+ * Description  : Simple network output interface.
+ * Arguments    : pxDescriptor, xReleaseAfterSend
+ * Return Value : pdTRUE, pdFALSE
+ **********************************************************************************************************************/
+BaseType_t xNetworkInterfaceOutput( NetworkBufferDescriptor_t * const pxDescriptor,
+                                    BaseType_t xReleaseAfterSend )
+{
+    BaseType_t xReturn = pdFALSE;
+
+    /* Simple network interfaces (as opposed to more efficient zero copy network
+     * interfaces) just use Ethernet peripheral driver library functions to copy
+     * data from the FreeRTOS+TCP buffer into the peripheral driver's own buffer.
+     * This example assumes SendData() is a peripheral driver library function that
+     * takes a pointer to the start of the data to be sent and the length of the
+     * data to be sent as two separate parameters.  The start of the data is located
+     * by pxDescriptor->pucEthernetBuffer.  The length of the data is located
+     * by pxDescriptor->xDataLength. */
+    if( xPHYLinkStatus != 0 )
+    {
+        if( SendData( pxDescriptor->pucEthernetBuffer, pxDescriptor->xDataLength ) >= 0 )
+        {
+            xReturn = pdTRUE;
+            /* Call the standard trace macro to log the send event. */
+            iptraceNETWORK_INTERFACE_TRANSMIT();
+        }
+    }
+    else
+    {
+        /* As the PHY Link Status is low, it makes no sense trying to deliver a packet. */
+    }
+
+    if( xReleaseAfterSend != pdFALSE )
+    {
+        /* It is assumed SendData() copies the data out of the FreeRTOS+TCP Ethernet
+         * buffer.  The Ethernet buffer is therefore no longer needed, and must be
+         * freed for re-use. */
+        vReleaseNetworkBufferAndDescriptor( pxDescriptor );
+    }
+
+    return xReturn;
+} /* End of function xNetworkInterfaceOutput() */
+
+
+#if ( ipconfigHAS_PRINTF != 0 )
+    static void prvMonitorResources()
+    {
+        static UBaseType_t uxLastMinBufferCount = 0u;
+        static UBaseType_t uxCurrentBufferCount = 0u;
+        static size_t uxMinLastSize = 0uL;
+        static size_t uxCurLastSize = 0uL;
+        size_t uxMinSize;
+        size_t uxCurSize;
+
+        uxCurrentBufferCount = uxGetMinimumFreeNetworkBuffers();
+
+        if( uxLastMinBufferCount != uxCurrentBufferCount )
+        {
+            /* The logging produced below may be helpful
+             * while tuning +TCP: see how many buffers are in use. */
+            uxLastMinBufferCount = uxCurrentBufferCount;
+            FreeRTOS_printf( ( "Network buffers: %lu lowest %lu\n",
+                               uxGetNumberOfFreeNetworkBuffers(), uxCurrentBufferCount ) );
+        }
+
+        uxMinSize = xPortGetMinimumEverFreeHeapSize();
+        uxCurSize = xPortGetFreeHeapSize();
+
+        if( uxMinLastSize != uxMinSize )
+        {
+            uxCurLastSize = uxCurSize;
+            uxMinLastSize = uxMinSize;
+            FreeRTOS_printf( ( "Heap: current %lu lowest %lu\n", uxCurSize, uxMinSize ) );
+        }
+
+        #if ( ipconfigCHECK_IP_QUEUE_SPACE != 0 )
+            {
+                static UBaseType_t uxLastMinQueueSpace = 0;
+                UBaseType_t uxCurrentCount = 0u;
+
+                uxCurrentCount = uxGetMinimumIPQueueSpace();
+
+                if( uxLastMinQueueSpace != uxCurrentCount )
+                {
+                    /* The logging produced below may be helpful
+                     * while tuning +TCP: see how many buffers are in use. */
+                    uxLastMinQueueSpace = uxCurrentCount;
+                    FreeRTOS_printf( ( "Queue space: lowest %lu\n", uxCurrentCount ) );
+                }
+            }
+        #endif /* ipconfigCHECK_IP_QUEUE_SPACE */
+    }
+#endif /* ( ipconfigHAS_PRINTF != 0 ) */
+
+/***********************************************************************************************************************
+ * Function Name: prvEMACDeferredInterruptHandlerTask ()
+ * Description  : The deferred interrupt handler is a standard RTOS task.
+ * Arguments    : pvParameters
+ * Return Value : none
+ **********************************************************************************************************************/
+static void prvEMACDeferredInterruptHandlerTask( void * pvParameters )
+{
+    NetworkBufferDescriptor_t * pxBufferDescriptor;
+    int32_t xBytesReceived = 0;
+
+    /* Avoid compiler warning about unreferenced parameter. */
+    ( void ) pvParameters;
+
+    /* Used to indicate that xSendEventStructToIPTask() is being called because
+     * of an Ethernet receive event. */
+    IPStackEvent_t xRxEvent;
+
+    uint8_t * buffer_pointer;
+
+    /* Some variables related to monitoring the PHY. */
+    TimeOut_t xPhyTime;
+    TickType_t xPhyRemTime;
+    const TickType_t ulMaxBlockTime = pdMS_TO_TICKS( 100UL );
+
+    vTaskSetTimeOutState( &xPhyTime );
+    xPhyRemTime = pdMS_TO_TICKS( PHY_LS_LOW_CHECK_TIME_MS );
+
+    FreeRTOS_printf( ( "Deferred Interrupt Handler Task started\n" ) );
+    xTaskToNotify = ether_receive_check_task_handle;
+
+    for( ; ; )
+    {
+        #if ( ipconfigHAS_PRINTF != 0 )
+            {
+                prvMonitorResources();
+            }
+        #endif /* ipconfigHAS_PRINTF != 0 ) */
+
+        /* Wait for the Ethernet MAC interrupt to indicate that another packet
+         * has been received.  */
+        if( xBytesReceived <= 0 )
+        {
+            ulTaskNotifyTake( pdFALSE, ulMaxBlockTime );
+        }
+
+        /* See how much data was received.  */
+        xBytesReceived = R_ETHER_Read_ZC2( ETHER_CHANNEL_0, ( void ** ) &buffer_pointer );
+
+        if( xBytesReceived < 0 )
+        {
+            /* This is an error. Logged. */
+            FreeRTOS_printf( ( "R_ETHER_Read_ZC2: rc = %d\n", xBytesReceived ) );
+        }
+        else if( xBytesReceived > 0 )
+        {
+            /* Allocate a network buffer descriptor that points to a buffer
+             * large enough to hold the received frame.  As this is the simple
+             * rather than efficient example the received data will just be copied
+             * into this buffer. */
+            pxBufferDescriptor = pxGetNetworkBufferWithDescriptor( ( size_t ) xBytesReceived, 0 );
+
+            if( pxBufferDescriptor != NULL )
+            {
+                /* pxBufferDescriptor->pucEthernetBuffer now points to an Ethernet
+                 * buffer large enough to hold the received data.  Copy the
+                 * received data into pcNetworkBuffer->pucEthernetBuffer.  Here it
+                 * is assumed ReceiveData() is a peripheral driver function that
+                 * copies the received data into a buffer passed in as the function's
+                 * parameter.  Remember! While is is a simple robust technique -
+                 * it is not efficient.  An example that uses a zero copy technique
+                 * is provided further down this page. */
+                memcpy( pxBufferDescriptor->pucEthernetBuffer, buffer_pointer, ( size_t ) xBytesReceived );
+                /*ReceiveData( pxBufferDescriptor->pucEthernetBuffer ); */
+
+                /* Set the actual packet length, in case a larger buffer was returned. */
+                pxBufferDescriptor->xDataLength = ( size_t ) xBytesReceived;
+
+                R_ETHER_Read_ZC2_BufRelease( ETHER_CHANNEL_0 );
+
+                /* See if the data contained in the received Ethernet frame needs
+                * to be processed.  NOTE! It is preferable to do this in
+                * the interrupt service routine itself, which would remove the need
+                * to unblock this task for packets that don't need processing. */
+                if( eConsiderFrameForProcessing( pxBufferDescriptor->pucEthernetBuffer ) == eProcessBuffer )
+                {
+                    /* The event about to be sent to the TCP/IP is an Rx event. */
+                    xRxEvent.eEventType = eNetworkRxEvent;
+
+                    /* pvData is used to point to the network buffer descriptor that
+                     * now references the received data. */
+                    xRxEvent.pvData = ( void * ) pxBufferDescriptor;
+
+                    /* Send the data to the TCP/IP stack. */
+                    if( xSendEventStructToIPTask( &xRxEvent, 0 ) == pdFALSE )
+                    {
+                        /* The buffer could not be sent to the IP task so the buffer must be released. */
+                        vReleaseNetworkBufferAndDescriptor( pxBufferDescriptor );
+
+                        /* Make a call to the standard trace macro to log the occurrence. */
+                        iptraceETHERNET_RX_EVENT_LOST();
+                        clear_all_ether_rx_discriptors( 0 );
+                    }
+                    else
+                    {
+                        /* The message was successfully sent to the TCP/IP stack.
+                        * Call the standard trace macro to log the occurrence. */
+                        iptraceNETWORK_INTERFACE_RECEIVE();
+                        R_NOP();
+                    }
+                }
+                else
+                {
+                    /* The Ethernet frame can be dropped, but the Ethernet buffer must be released. */
+                    vReleaseNetworkBufferAndDescriptor( pxBufferDescriptor );
+                }
+            }
+            else
+            {
+                /* The event was lost because a network buffer was not available.
+                 * Call the standard trace macro to log the occurrence. */
+                iptraceETHERNET_RX_EVENT_LOST();
+                clear_all_ether_rx_discriptors( 1 );
+                FreeRTOS_printf( ( "R_ETHER_Read_ZC2: Cleared descriptors\n" ) );
+            }
+        }
+
+        if( xBytesReceived > 0 )
+        {
+            /* A packet was received. No need to check for the PHY status now,
+             * but set a timer to check it later on. */
+            vTaskSetTimeOutState( &xPhyTime );
+            xPhyRemTime = pdMS_TO_TICKS( PHY_LS_HIGH_CHECK_TIME_MS );
+
+            /* Indicate that the Link Status is high, so that
+             * xNetworkInterfaceOutput() can send packets. */
+            if( xPHYLinkStatus == 0 )
+            {
+                xPHYLinkStatus = 1;
+                FreeRTOS_printf( ( "prvEMACHandlerTask: PHY LS assume %d\n", xPHYLinkStatus ) );
+            }
+        }
+        else if( ( xTaskCheckForTimeOut( &xPhyTime, &xPhyRemTime ) != pdFALSE ) || ( FreeRTOS_IsNetworkUp() == pdFALSE ) )
+        {
+            R_ETHER_LinkProcess( 0 );
+
+            if( xPHYLinkStatus != xReportedStatus )
+            {
+                xPHYLinkStatus = xReportedStatus;
+                FreeRTOS_printf( ( "prvEMACHandlerTask: PHY LS now %d\n", xPHYLinkStatus ) );
+            }
+
+            vTaskSetTimeOutState( &xPhyTime );
+
+            if( xPHYLinkStatus != 0 )
+            {
+                xPhyRemTime = pdMS_TO_TICKS( PHY_LS_HIGH_CHECK_TIME_MS );
+            }
+            else
+            {
+                xPhyRemTime = pdMS_TO_TICKS( PHY_LS_LOW_CHECK_TIME_MS );
+            }
+        }
+    }
+} /* End of function prvEMACDeferredInterruptHandlerTask() */
+
+
+/***********************************************************************************************************************
+ * Function Name: vNetworkInterfaceAllocateRAMToBuffers ()
+ * Description  : .
+ * Arguments    : pxNetworkBuffers
+ * Return Value : none
+ **********************************************************************************************************************/
+void vNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] )
+{
+    uint32_t ul;
+    uint8_t * buffer_address;
+
+    R_EXTERN_SEC( B_ETHERNET_BUFFERS_1 )
+
+    buffer_address = R_SECTOP( B_ETHERNET_BUFFERS_1 );
+
+    for( ul = 0; ul < ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS; ul++ )
+    {
+        pxNetworkBuffers[ ul ].pucEthernetBuffer = ( buffer_address + ( ETHER_CFG_BUFSIZE * ul ) );
+    }
+} /* End of function vNetworkInterfaceAllocateRAMToBuffers() */
+
+
+/***********************************************************************************************************************
+ * Function Name: prvLinkStatusChange ()
+ * Description  : Function will be called when the Link Status of the phy has changed ( see ether_callback.c )
+ * Arguments    : xStatus : true when statyus has become high
+ * Return Value : void
+ **********************************************************************************************************************/
+void prvLinkStatusChange( BaseType_t xStatus )
+{
+    if( xReportedStatus != xStatus )
+    {
+        FreeRTOS_printf( ( "prvLinkStatusChange( %d )\n", xStatus ) );
+        xReportedStatus = xStatus;
+    }
+}
+
+/***********************************************************************************************************************
+ * Function Name: InitializeNetwork ()
+ * Description  :
+ * Arguments    : none
+ * Return Value : pdTRUE, pdFALSE
+ **********************************************************************************************************************/
+static int InitializeNetwork( void )
+{
+    ether_return_t eth_ret;
+    BaseType_t return_code = pdFALSE;
+    ether_param_t param;
+    uint8_t myethaddr[ 6 ] =
+    {
+        configMAC_ADDR0,
+        configMAC_ADDR1,
+        configMAC_ADDR2,
+        configMAC_ADDR3,
+        configMAC_ADDR4,
+        configMAC_ADDR5
+    }; /*XXX Fix me */
+
+    R_ETHER_PinSet_CHANNEL_0();
+    R_ETHER_Initial();
+    callback_ether_regist();
+
+    param.channel = ETHER_CHANNEL_0;
+    eth_ret = R_ETHER_Control( CONTROL_POWER_ON, param ); /* PHY mode settings, module stop cancellation */
+
+    if( ETHER_SUCCESS != eth_ret )
+    {
+        return pdFALSE;
+    }
+
+    eth_ret = R_ETHER_Open_ZC2( ETHER_CHANNEL_0, myethaddr, ETHER_FLAG_OFF );
+
+    if( ETHER_SUCCESS != eth_ret )
+    {
+        return pdFALSE;
+    }
+
+    return_code = xTaskCreate( prvEMACDeferredInterruptHandlerTask,
+                               "ETHER_RECEIVE_CHECK_TASK",
+                               512u,
+                               0,
+                               configMAX_PRIORITIES - 1,
+                               &ether_receive_check_task_handle );
+
+    if( pdFALSE == return_code )
+    {
+        return pdFALSE;
+    }
+
+    return pdTRUE;
+} /* End of function InitializeNetwork() */
+
+
+/***********************************************************************************************************************
+ * Function Name: SendData ()
+ * Description  :
+ * Arguments    : pucBuffer, length
+ * Return Value : 0 success, negative fail
+ **********************************************************************************************************************/
+static int16_t SendData( uint8_t * pucBuffer,
+                         size_t length ) /*TODO complete stub function */
+{
+    ether_return_t ret;
+    uint8_t * pwrite_buffer;
+    uint16_t write_buf_size;
+
+    /* (1) Retrieve the transmit buffer location controlled by the  descriptor. */
+    ret = R_ETHER_Write_ZC2_GetBuf( ETHER_CHANNEL_0, ( void ** ) &pwrite_buffer, &write_buf_size );
+
+    if( ETHER_SUCCESS == ret )
+    {
+        if( write_buf_size >= length )
+        {
+            memcpy( pwrite_buffer, pucBuffer, length );
+        }
+
+        if( length < ETHER_BUFSIZE_MIN )                                             /*under minimum*/
+        {
+            memset( ( pwrite_buffer + length ), 0, ( ETHER_BUFSIZE_MIN - length ) ); /*padding*/
+            length = ETHER_BUFSIZE_MIN;                                              /*resize*/
+        }
+
+        ret = R_ETHER_Write_ZC2_SetBuf( ETHER_CHANNEL_0, ( uint16_t ) length );
+        ret = R_ETHER_CheckWrite( ETHER_CHANNEL_0 );
+    }
+
+    if( ETHER_SUCCESS != ret )
+    {
+        return -5; /* XXX return meaningful value */
+    }
+    else
+    {
+        return 0;
+    }
+} /* End of function SendData() */
+
+
+/***********************************************************************************************************************
+* Function Name: EINT_Trig_isr
+* Description  : Standard frame received interrupt handler
+* Arguments    : ectrl - EDMAC and ETHERC control structure
+* Return Value : None
+* Note         : This callback function is executed when EINT0 interrupt occurred.
+***********************************************************************************************************************/
+void EINT_Trig_isr( void * ectrl )
+{
+    ether_cb_arg_t * pdecode;
+    BaseType_t xHigherPriorityTaskWoken = pdFALSE;
+
+    pdecode = ( ether_cb_arg_t * ) ectrl;
+
+    if( pdecode->status_eesr & 0x00040000 ) /* EDMAC FR (Frame Receive Event) interrupt */
+    {
+        if( xTaskToNotify != NULL )
+        {
+            vTaskNotifyGiveFromISR( ether_receive_check_task_handle, &xHigherPriorityTaskWoken );
+        }
+
+        /* If xHigherPriorityTaskWoken is now set to pdTRUE then a context switch
+         * should be performed to ensure the interrupt returns directly to the highest
+         * priority task.  The macro used for this purpose is dependent on the port in
+         * use and may be called portEND_SWITCHING_ISR(). */
+        portYIELD_FROM_ISR( xHigherPriorityTaskWoken );
+        /*TODO complete interrupt handler for other events. */
+    }
+} /* End of function EINT_Trig_isr() */
+
+
+static void clear_all_ether_rx_discriptors( uint32_t event )
+{
+    int32_t xBytesReceived;
+    uint8_t * buffer_pointer;
+
+    /* Avoid compiler warning about unreferenced parameter. */
+    ( void ) event;
+
+    while( 1 )
+    {
+        /* See how much data was received.  */
+        xBytesReceived = R_ETHER_Read_ZC2( ETHER_CHANNEL_0, ( void ** ) &buffer_pointer );
+
+        if( 0 > xBytesReceived )
+        {
+            /* This is an error. Ignored. */
+        }
+        else if( 0 < xBytesReceived )
+        {
+            R_ETHER_Read_ZC2_BufRelease( ETHER_CHANNEL_0 );
+            iptraceETHERNET_RX_EVENT_LOST();
+        }
+        else
+        {
+            break;
+        }
+    }
+}
+
+/***********************************************************************************************************************
+ * End of file "NetworkInterface.c"
+ **********************************************************************************************************************/
index c42d8a20b36f2f3ed064caa059f540b1ae4b6d97..8cb38ce30dc101192b42dcda21f49983ca681376 100644 (file)
-/***********************************************************************************************************************\r
-* DISCLAIMER\r
-* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No\r
-* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all\r
-* applicable laws, including copyright laws.\r
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING\r
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,\r
-* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM\r
-* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES\r
-* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS\r
-* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\r
-* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of\r
-* this software. By using this software, you agree to the additional terms and conditions found by accessing the\r
-* following link:\r
-* http://www.renesas.com/disclaimer\r
-*\r
-* Copyright (C) 2015 Renesas Electronics Corporation. All rights reserved.\r
-***********************************************************************************************************************/\r
-/***********************************************************************************************************************\r
-* File Name    : ether_callback.c\r
-* Version      : ----\r
-* Description  : This module solves all the world's problems\r
-***********************************************************************************************************************/\r
-/**********************************************************************************************************************\r
-* History : DD.MM.YYYY Version  Description\r
-*         : 05.01.2015 ----     Clean up source code.\r
-***********************************************************************************************************************/\r
-\r
-/***********************************************************************************************************************\r
-Includes   <System Includes> , "Project Includes"\r
-***********************************************************************************************************************/\r
-#include "r_ether_rx_if.h"\r
-\r
-/***********************************************************************************************************************\r
-Private global variables and functions\r
-***********************************************************************************************************************/\r
-int32_t callback_ether_regist(void);\r
-void callback_ether(void * pparam);\r
-static void callback_wakeon_lan(uint32_t channel);\r
-static void callback_link_on(uint32_t channel);\r
-static void callback_link_off(uint32_t channel);\r
-\r
-volatile uint8_t  pause_enable = ETHER_FLAG_OFF;\r
-volatile uint8_t  magic_packet_detect[ETHER_CHANNEL_MAX];\r
-volatile uint8_t  link_detect[ETHER_CHANNEL_MAX];\r
-\r
-void EINT_Trig_isr(void *);\r
-\r
-/*\r
- * When that Link Status changes, the following function will be called:\r
- */\r
-void prvLinkStatusChange( BaseType_t xStatus );\r
-\r
-/***********************************************************************************************************************\r
-* Function Name: callback_ether\r
-* Description  : Regist of callback function\r
-* Arguments    : -\r
-* Return Value : 0: success, -1:failed\r
-***********************************************************************************************************************/\r
-int32_t callback_ether_regist(void)\r
-{\r
-    ether_param_t   param;\r
-    ether_cb_t      cb_func;\r
-\r
-    int32_t         ret;\r
-\r
-    /* Set the callback function (LAN cable connect/disconnect event) */\r
-    cb_func.pcb_func     = &callback_ether;\r
-    param.ether_callback = cb_func;\r
-    ret = R_ETHER_Control(CONTROL_SET_CALLBACK, param);\r
-    if (ETHER_SUCCESS != ret)\r
-    {\r
-        return -1;\r
-    }\r
-\r
-    /* Set the callback function (Ether interrupt event) */\r
-    cb_func.pcb_int_hnd     = &EINT_Trig_isr;\r
-    param.ether_callback = cb_func;\r
-    ret = R_ETHER_Control(CONTROL_SET_INT_HANDLER, param);\r
-    if (ETHER_SUCCESS != ret)\r
-    {\r
-        return -1;\r
-    }\r
-    return 0;\r
-} /* End of function callback_ether_regist() */\r
-\r
-/***********************************************************************************************************************\r
-* Function Name: callback_ether\r
-* Description  : Sample of the callback function\r
-* Arguments    : pparam -\r
-*\r
-* Return Value : none\r
-***********************************************************************************************************************/\r
-void callback_ether(void * pparam)\r
-{\r
-    ether_cb_arg_t    * pdecode;\r
-    uint32_t            channel;\r
-\r
-    pdecode = (ether_cb_arg_t *)pparam;\r
-    channel = pdecode->channel;                             /* Get Ethernet channel number */\r
-\r
-    switch (pdecode->event_id)\r
-    {\r
-        /* Callback function that notifies user to have detected magic packet. */\r
-        case ETHER_CB_EVENT_ID_WAKEON_LAN:\r
-            callback_wakeon_lan(channel);\r
-            break;\r
-\r
-        /* Callback function that notifies user to have become Link up. */\r
-        case ETHER_CB_EVENT_ID_LINK_ON:\r
-            callback_link_on(channel);\r
-            break;\r
-\r
-        /* Callback function that notifies user to have become Link down. */\r
-        case ETHER_CB_EVENT_ID_LINK_OFF:\r
-            callback_link_off(channel);\r
-            break;\r
-\r
-        default:\r
-            break;\r
-    }\r
-} /* End of function callback_ether() */\r
-\r
-/***********************************************************************************************************************\r
-* Function Name: callback_wakeon_lan\r
-* Description  :\r
-* Arguments    : channel -\r
-*                    Ethernet channel number\r
-* Return Value : none\r
-***********************************************************************************************************************/\r
-static void callback_wakeon_lan(uint32_t channel)\r
-{\r
-    if (ETHER_CHANNEL_MAX > channel)\r
-    {\r
-        magic_packet_detect[channel] = 1;\r
-\r
-        /* Please add necessary processing when magic packet is detected.  */\r
-    }\r
-} /* End of function callback_wakeon_lan() */\r
-\r
-/***********************************************************************************************************************\r
-* Function Name: callback_link_on\r
-* Description  :\r
-* Arguments    : channel -\r
-*                    Ethernet channel number\r
-* Return Value : none\r
-***********************************************************************************************************************/\r
-static void callback_link_on(uint32_t channel)\r
-{\r
-    if (ETHER_CHANNEL_MAX > channel)\r
-    {\r
-        link_detect[channel] = ETHER_FLAG_ON_LINK_ON;\r
-\r
-        /* Please add necessary processing when becoming Link up. */\r
-               prvLinkStatusChange( 1 );\r
-    }\r
-} /* End of function callback_link_on() */\r
-\r
-/***********************************************************************************************************************\r
-* Function Name: callback_link_off\r
-* Description  :\r
-* Arguments    : channel -\r
-*                    Ethernet channel number\r
-* Return Value : none\r
-***********************************************************************************************************************/\r
-static void callback_link_off(uint32_t channel)\r
-{\r
-    if (ETHER_CHANNEL_MAX > channel)\r
-    {\r
-        link_detect[channel] = ETHER_FLAG_ON_LINK_OFF;\r
-\r
-        /* Please add necessary processing when becoming Link down. */\r
-               prvLinkStatusChange( 0 );\r
-    }\r
-} /* End of function ether_cb_link_off() */\r
-\r
-/* End of File */\r
+/***********************************************************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No
+* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
+* applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,
+* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM
+* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES
+* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS
+* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of
+* this software. By using this software, you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+*
+* Copyright (C) 2015 Renesas Electronics Corporation. All rights reserved.
+***********************************************************************************************************************/
+/***********************************************************************************************************************
+* File Name    : ether_callback.c
+* Version      : ----
+* Description  : This module solves all the world's problems
+***********************************************************************************************************************/
+/**********************************************************************************************************************
+* History : DD.MM.YYYY Version  Description
+*         : 05.01.2015 ----     Clean up source code.
+***********************************************************************************************************************/
+
+/***********************************************************************************************************************
+Includes   <System Includes> , "Project Includes"
+***********************************************************************************************************************/
+#include "r_ether_rx_if.h"
+
+/***********************************************************************************************************************
+Private global variables and functions
+***********************************************************************************************************************/
+int32_t callback_ether_regist(void);
+void callback_ether(void * pparam);
+static void callback_wakeon_lan(uint32_t channel);
+static void callback_link_on(uint32_t channel);
+static void callback_link_off(uint32_t channel);
+
+volatile uint8_t  pause_enable = ETHER_FLAG_OFF;
+volatile uint8_t  magic_packet_detect[ETHER_CHANNEL_MAX];
+volatile uint8_t  link_detect[ETHER_CHANNEL_MAX];
+
+void EINT_Trig_isr(void *);
+
+/*
+ * When that Link Status changes, the following function will be called:
+ */
+void prvLinkStatusChange( BaseType_t xStatus );
+
+/***********************************************************************************************************************
+* Function Name: callback_ether
+* Description  : Regist of callback function
+* Arguments    : -
+* Return Value : 0: success, -1:failed
+***********************************************************************************************************************/
+int32_t callback_ether_regist(void)
+{
+    ether_param_t   param;
+    ether_cb_t      cb_func;
+
+    int32_t         ret;
+
+    /* Set the callback function (LAN cable connect/disconnect event) */
+    cb_func.pcb_func     = &callback_ether;
+    param.ether_callback = cb_func;
+    ret = R_ETHER_Control(CONTROL_SET_CALLBACK, param);
+    if (ETHER_SUCCESS != ret)
+    {
+        return -1;
+    }
+
+    /* Set the callback function (Ether interrupt event) */
+    cb_func.pcb_int_hnd     = &EINT_Trig_isr;
+    param.ether_callback = cb_func;
+    ret = R_ETHER_Control(CONTROL_SET_INT_HANDLER, param);
+    if (ETHER_SUCCESS != ret)
+    {
+        return -1;
+    }
+    return 0;
+} /* End of function callback_ether_regist() */
+
+/***********************************************************************************************************************
+* Function Name: callback_ether
+* Description  : Sample of the callback function
+* Arguments    : pparam -
+*
+* Return Value : none
+***********************************************************************************************************************/
+void callback_ether(void * pparam)
+{
+    ether_cb_arg_t    * pdecode;
+    uint32_t            channel;
+
+    pdecode = (ether_cb_arg_t *)pparam;
+    channel = pdecode->channel;                             /* Get Ethernet channel number */
+
+    switch (pdecode->event_id)
+    {
+        /* Callback function that notifies user to have detected magic packet. */
+        case ETHER_CB_EVENT_ID_WAKEON_LAN:
+            callback_wakeon_lan(channel);
+            break;
+
+        /* Callback function that notifies user to have become Link up. */
+        case ETHER_CB_EVENT_ID_LINK_ON:
+            callback_link_on(channel);
+            break;
+
+        /* Callback function that notifies user to have become Link down. */
+        case ETHER_CB_EVENT_ID_LINK_OFF:
+            callback_link_off(channel);
+            break;
+
+        default:
+            break;
+    }
+} /* End of function callback_ether() */
+
+/***********************************************************************************************************************
+* Function Name: callback_wakeon_lan
+* Description  :
+* Arguments    : channel -
+*                    Ethernet channel number
+* Return Value : none
+***********************************************************************************************************************/
+static void callback_wakeon_lan(uint32_t channel)
+{
+    if (ETHER_CHANNEL_MAX > channel)
+    {
+        magic_packet_detect[channel] = 1;
+
+        /* Please add necessary processing when magic packet is detected.  */
+    }
+} /* End of function callback_wakeon_lan() */
+
+/***********************************************************************************************************************
+* Function Name: callback_link_on
+* Description  :
+* Arguments    : channel -
+*                    Ethernet channel number
+* Return Value : none
+***********************************************************************************************************************/
+static void callback_link_on(uint32_t channel)
+{
+    if (ETHER_CHANNEL_MAX > channel)
+    {
+        link_detect[channel] = ETHER_FLAG_ON_LINK_ON;
+
+        /* Please add necessary processing when becoming Link up. */
+               prvLinkStatusChange( 1 );
+    }
+} /* End of function callback_link_on() */
+
+/***********************************************************************************************************************
+* Function Name: callback_link_off
+* Description  :
+* Arguments    : channel -
+*                    Ethernet channel number
+* Return Value : none
+***********************************************************************************************************************/
+static void callback_link_off(uint32_t channel)
+{
+    if (ETHER_CHANNEL_MAX > channel)
+    {
+        link_detect[channel] = ETHER_FLAG_ON_LINK_OFF;
+
+        /* Please add necessary processing when becoming Link down. */
+               prvLinkStatusChange( 0 );
+    }
+} /* End of function ether_cb_link_off() */
+
+/* End of File */
index 44d19f3a9a0b2b4fb899147b9633893df1ce6f0c..adc603c52552f015c4db990eab7d1074876522dc 100644 (file)
-/*\r
-FreeRTOS+TCP V2.0.11\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://aws.amazon.com/freertos\r
- http://www.FreeRTOS.org\r
-*/\r
-\r
-/* Standard includes. */\r
-#include <stdint.h>\r
-\r
-/* FreeRTOS includes. */\r
-#include "FreeRTOS.h"\r
-#include "task.h"\r
-#include "queue.h"\r
-#include "semphr.h"\r
-\r
-/* FreeRTOS+TCP includes. */\r
-#include "FreeRTOS_UDP_IP.h"\r
-#include "FreeRTOS_Sockets.h"\r
-#include "NetworkBufferManagement.h"\r
-\r
-/* Hardware includes. */\r
-#include "hwEthernet.h"\r
-\r
-/* Demo includes. */\r
-#include "NetworkInterface.h"\r
-\r
-#if ipconfigETHERNET_DRIVER_FILTERS_FRAME_TYPES != 1\r
-       #define ipCONSIDER_FRAME_FOR_PROCESSING( pucEthernetBuffer ) eProcessBuffer\r
-#else\r
-       #define ipCONSIDER_FRAME_FOR_PROCESSING( pucEthernetBuffer ) eConsiderFrameForProcessing( ( pucEthernetBuffer ) )\r
-#endif\r
-\r
-/* When a packet is ready to be sent, if it cannot be sent immediately then the\r
-task performing the transmit will block for niTX_BUFFER_FREE_WAIT\r
-milliseconds.  It will do this a maximum of niMAX_TX_ATTEMPTS before giving\r
-up. */\r
-#define niTX_BUFFER_FREE_WAIT  ( ( TickType_t ) 2UL / portTICK_PERIOD_MS )\r
-#define niMAX_TX_ATTEMPTS              ( 5 )\r
-\r
-/* The length of the queue used to send interrupt status words from the\r
-interrupt handler to the deferred handler task. */\r
-#define niINTERRUPT_QUEUE_LENGTH       ( 10 )\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-/*\r
- * A deferred interrupt handler task that processes\r
- */\r
-extern void vEMACHandlerTask( void *pvParameters );\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-/* The queue used to communicate Ethernet events with the IP task. */\r
-extern QueueHandle_t xNetworkEventQueue;\r
-\r
-/* The semaphore used to wake the deferred interrupt handler task when an Rx\r
-interrupt is received. */\r
-SemaphoreHandle_t xEMACRxEventSemaphore = NULL;\r
-/*-----------------------------------------------------------*/\r
-\r
-BaseType_t xNetworkInterfaceInitialise( void )\r
-{\r
-BaseType_t xStatus, xReturn;\r
-extern uint8_t ucMACAddress[ 6 ];\r
-\r
-       /* Initialise the MAC. */\r
-       vInitEmac();\r
-\r
-       while( lEMACWaitForLink() != pdPASS )\r
-    {\r
-        vTaskDelay( 20 );\r
-    }\r
-\r
-       vSemaphoreCreateBinary( xEMACRxEventSemaphore );\r
-       configASSERT( xEMACRxEventSemaphore );\r
-\r
-       /* The handler task is created at the highest possible priority to\r
-       ensure the interrupt handler can return directly to it. */\r
-       xTaskCreate( vEMACHandlerTask, "EMAC", configMINIMAL_STACK_SIZE, NULL, configMAX_PRIORITIES - 1, NULL );\r
-       xReturn = pdPASS;\r
-\r
-       return xReturn;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-BaseType_t xNetworkInterfaceOutput( NetworkBufferDescriptor_t * const pxNetworkBuffer )\r
-{\r
-extern void vEMACCopyWrite( uint8_t * pucBuffer, uint16_t usLength );\r
-\r
-       vEMACCopyWrite( pxNetworkBuffer->pucBuffer, pxNetworkBuffer->xDataLength );\r
-\r
-       /* Finished with the network buffer. */\r
-       vReleaseNetworkBufferAndDescriptor( pxNetworkBuffer );\r
-\r
-       return pdTRUE;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-\r
+/*
+FreeRTOS+TCP V2.0.11
+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
+*/
+
+/* Standard includes. */
+#include <stdint.h>
+
+/* FreeRTOS includes. */
+#include "FreeRTOS.h"
+#include "task.h"
+#include "queue.h"
+#include "semphr.h"
+
+/* FreeRTOS+TCP includes. */
+#include "FreeRTOS_UDP_IP.h"
+#include "FreeRTOS_Sockets.h"
+#include "NetworkBufferManagement.h"
+
+/* Hardware includes. */
+#include "hwEthernet.h"
+
+/* Demo includes. */
+#include "NetworkInterface.h"
+
+#if ipconfigETHERNET_DRIVER_FILTERS_FRAME_TYPES != 1
+       #define ipCONSIDER_FRAME_FOR_PROCESSING( pucEthernetBuffer ) eProcessBuffer
+#else
+       #define ipCONSIDER_FRAME_FOR_PROCESSING( pucEthernetBuffer ) eConsiderFrameForProcessing( ( pucEthernetBuffer ) )
+#endif
+
+/* When a packet is ready to be sent, if it cannot be sent immediately then the
+task performing the transmit will block for niTX_BUFFER_FREE_WAIT
+milliseconds.  It will do this a maximum of niMAX_TX_ATTEMPTS before giving
+up. */
+#define niTX_BUFFER_FREE_WAIT  ( ( TickType_t ) 2UL / portTICK_PERIOD_MS )
+#define niMAX_TX_ATTEMPTS              ( 5 )
+
+/* The length of the queue used to send interrupt status words from the
+interrupt handler to the deferred handler task. */
+#define niINTERRUPT_QUEUE_LENGTH       ( 10 )
+
+/*-----------------------------------------------------------*/
+
+/*
+ * A deferred interrupt handler task that processes
+ */
+extern void vEMACHandlerTask( void *pvParameters );
+
+/*-----------------------------------------------------------*/
+
+/* The queue used to communicate Ethernet events with the IP task. */
+extern QueueHandle_t xNetworkEventQueue;
+
+/* The semaphore used to wake the deferred interrupt handler task when an Rx
+interrupt is received. */
+SemaphoreHandle_t xEMACRxEventSemaphore = NULL;
+/*-----------------------------------------------------------*/
+
+BaseType_t xNetworkInterfaceInitialise( void )
+{
+BaseType_t xStatus, xReturn;
+extern uint8_t ucMACAddress[ 6 ];
+
+       /* Initialise the MAC. */
+       vInitEmac();
+
+       while( lEMACWaitForLink() != pdPASS )
+    {
+        vTaskDelay( 20 );
+    }
+
+       vSemaphoreCreateBinary( xEMACRxEventSemaphore );
+       configASSERT( xEMACRxEventSemaphore );
+
+       /* The handler task is created at the highest possible priority to
+       ensure the interrupt handler can return directly to it. */
+       xTaskCreate( vEMACHandlerTask, "EMAC", configMINIMAL_STACK_SIZE, NULL, configMAX_PRIORITIES - 1, NULL );
+       xReturn = pdPASS;
+
+       return xReturn;
+}
+/*-----------------------------------------------------------*/
+
+BaseType_t xNetworkInterfaceOutput( NetworkBufferDescriptor_t * const pxNetworkBuffer )
+{
+extern void vEMACCopyWrite( uint8_t * pucBuffer, uint16_t usLength );
+
+       vEMACCopyWrite( pxNetworkBuffer->pucBuffer, pxNetworkBuffer->xDataLength );
+
+       /* Finished with the network buffer. */
+       vReleaseNetworkBufferAndDescriptor( pxNetworkBuffer );
+
+       return pdTRUE;
+}
+/*-----------------------------------------------------------*/
+
+
diff --git a/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/STM32F7xx/NetworkInterface.c b/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/STM32F7xx/NetworkInterface.c
deleted file mode 100644 (file)
index 7de2902..0000000
+++ /dev/null
@@ -1,1193 +0,0 @@
-/*\r
- * Some constants, hardware definitions and comments taken from ST's HAL driver\r
- * library, COPYRIGHT(c) 2015 STMicroelectronics.\r
- */\r
-\r
-/*\r
- * FreeRTOS+TCP V2.0.11\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
-/* Standard includes. */\r
-#include <stdint.h>\r
-#include <stdio.h>\r
-#include <stdlib.h>\r
-\r
-/* FreeRTOS includes. */\r
-#include "FreeRTOS.h"\r
-#include "task.h"\r
-#include "queue.h"\r
-#include "semphr.h"\r
-\r
-/* FreeRTOS+TCP includes. */\r
-#include "FreeRTOS_IP.h"\r
-#include "FreeRTOS_Sockets.h"\r
-#include "FreeRTOS_IP_Private.h"\r
-#include "FreeRTOS_DNS.h"\r
-#include "NetworkBufferManagement.h"\r
-#include "NetworkInterface.h"\r
-\r
-#include "phyHandling.h"\r
-\r
-/* ST includes. */\r
-#ifdef STM32F7xx\r
-       #include "stm32f7xx_hal.h"\r
-#else\r
-       #include "stm32f4xx_hal.h"\r
-#endif\r
-\r
-/* Interrupt events to process.  Currently only the Rx event is processed\r
-although code for other events is included to allow for possible future\r
-expansion. */\r
-#define EMAC_IF_RX_EVENT        1UL\r
-#define EMAC_IF_TX_EVENT        2UL\r
-#define EMAC_IF_ERR_EVENT       4UL\r
-#define EMAC_IF_ALL_EVENT       ( EMAC_IF_RX_EVENT | EMAC_IF_TX_EVENT | EMAC_IF_ERR_EVENT )\r
-\r
-#define ETH_DMA_ALL_INTS \\r
-       ( ETH_DMA_IT_TST | ETH_DMA_IT_PMT | ETH_DMA_IT_MMC | ETH_DMA_IT_NIS | ETH_DMA_IT_ER | \\r
-         ETH_DMA_IT_FBE | ETH_DMA_IT_RWT | ETH_DMA_IT_RPS | ETH_DMA_IT_RBU | ETH_DMA_IT_R | \\r
-         ETH_DMA_IT_TU | ETH_DMA_IT_RO | ETH_DMA_IT_TJT | ETH_DMA_IT_TPS | ETH_DMA_IT_T )\r
-\r
-\r
-\r
-#define ipFRAGMENT_OFFSET_BIT_MASK             ( ( uint16_t ) 0x0fff ) /* The bits in the two byte IP header field that make up the fragment offset value. */\r
-\r
-/*\r
- * Most users will want a PHY that negotiates about\r
- * the connection properties: speed, dmix and duplex.\r
- * On some rare cases, you want to select what is being\r
- * advertised, properties like MDIX and duplex.\r
- */\r
-\r
-#if !defined( ipconfigETHERNET_AN_ENABLE )\r
-       /* Enable auto-negotiation */\r
-       #define ipconfigETHERNET_AN_ENABLE                              1\r
-#endif\r
-\r
-#if !defined( ipconfigETHERNET_AUTO_CROSS_ENABLE )\r
-       #define ipconfigETHERNET_AUTO_CROSS_ENABLE              1\r
-#endif\r
-\r
-#if( ipconfigETHERNET_AN_ENABLE == 0 )\r
-       /*\r
-        * The following three defines are only used in case there\r
-        * is no auto-negotiation.\r
-        */\r
-       #if !defined( ipconfigETHERNET_CROSSED_LINK )\r
-               #define ipconfigETHERNET_CROSSED_LINK                   1\r
-       #endif\r
-\r
-       #if !defined( ipconfigETHERNET_USE_100MB )\r
-               #define ipconfigETHERNET_USE_100MB                              1\r
-       #endif\r
-\r
-       #if !defined( ipconfigETHERNET_USE_FULL_DUPLEX )\r
-               #define ipconfigETHERNET_USE_FULL_DUPLEX                1\r
-       #endif\r
-#endif /* ipconfigETHERNET_AN_ENABLE == 0 */\r
-\r
-/* Default the size of the stack used by the EMAC deferred handler task to twice\r
-the size of the stack used by the idle task - but allow this to be overridden in\r
-FreeRTOSConfig.h as configMINIMAL_STACK_SIZE is a user definable constant. */\r
-#ifndef configEMAC_TASK_STACK_SIZE\r
-       #define configEMAC_TASK_STACK_SIZE ( 2 * configMINIMAL_STACK_SIZE )\r
-#endif\r
-\r
-/* Two choices must be made: RMII versus MII,\r
-and the index of the PHY in use ( between 0 and 31 ). */\r
-#ifndef ipconfigUSE_RMII\r
-       #ifdef STM32F7xx\r
-               #define ipconfigUSE_RMII        1\r
-       #else\r
-               #define ipconfigUSE_RMII        0\r
-       #endif /* STM32F7xx */\r
-#endif /* ipconfigUSE_RMII */\r
-\r
-#ifndef ipconfigPHY_INDEX\r
-       #ifdef STM32F7xx\r
-               #define ipconfigPHY_INDEX       0\r
-       #else\r
-               #define ipconfigPHY_INDEX       1\r
-       #endif /* STM32F7xx */\r
-#endif /* ipconfigPHY_INDEX */\r
-\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-/*\r
- * A deferred interrupt handler task that processes\r
- */\r
-static void prvEMACHandlerTask( void *pvParameters );\r
-\r
-/*\r
- * Force a negotiation with the Switch or Router and wait for LS.\r
- */\r
-static void prvEthernetUpdateConfig( BaseType_t xForce );\r
-\r
-/*\r
- * See if there is a new packet and forward it to the IP-task.\r
- */\r
-static BaseType_t prvNetworkInterfaceInput( void );\r
-\r
-#if( ipconfigUSE_LLMNR != 0 )\r
-       /*\r
-        * For LLMNR, an extra MAC-address must be configured to\r
-        * be able to receive the multicast messages.\r
-        */\r
-       static void prvMACAddressConfig(ETH_HandleTypeDef *heth, uint32_t ulIndex, uint8_t *Addr);\r
-#endif\r
-\r
-/*\r
- * Check if a given packet should be accepted.\r
- */\r
-static BaseType_t xMayAcceptPacket( uint8_t *pcBuffer );\r
-\r
-/*\r
- * Initialise the TX descriptors.\r
- */\r
-static void prvDMATxDescListInit( void );\r
-\r
-/*\r
- * Initialise the RX descriptors.\r
- */\r
-static void prvDMARxDescListInit( void );\r
-\r
-/* After packets have been sent, the network\r
-buffers will be released. */\r
-static void vClearTXBuffers( void );\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-/* Bit map of outstanding ETH interrupt events for processing.  Currently only\r
-the Rx interrupt is handled, although code is included for other events to\r
-enable future expansion. */\r
-static volatile uint32_t ulISREvents;\r
-\r
-#if( ipconfigUSE_LLMNR == 1 )\r
-       static const uint8_t xLLMNR_MACAddress[] = { 0x01, 0x00, 0x5E, 0x00, 0x00, 0xFC };\r
-#endif\r
-\r
-static EthernetPhy_t xPhyObject;\r
-\r
-/* Ethernet handle. */\r
-static ETH_HandleTypeDef xETH;\r
-\r
-/* xTXDescriptorSemaphore is a counting semaphore with\r
-a maximum count of ETH_TXBUFNB, which is the number of\r
-DMA TX descriptors. */\r
-static SemaphoreHandle_t xTXDescriptorSemaphore = NULL;\r
-\r
-/*\r
- * Note: it is adviced to define both\r
- *\r
- *     #define  ipconfigZERO_COPY_RX_DRIVER   1\r
- *     #define  ipconfigZERO_COPY_TX_DRIVER   1\r
- *\r
- * The method using memcpy is slower and probaly uses more RAM memory.\r
- * The possibility is left in the code just for comparison.\r
- *\r
- * It is adviced to define ETH_TXBUFNB at least 4. Note that no\r
- * TX buffers are allocated in a zero-copy driver.\r
- */\r
-/* MAC buffers: ---------------------------------------------------------*/\r
-\r
-/* Put the DMA descriptors in '.first_data'.\r
-This is important for STM32F7, which has an L1 data cache.\r
-The first 64KB of the SRAM is not cached. */\r
-\r
-/* Ethernet Rx MA Descriptor */\r
-__attribute__ ((aligned (32)))\r
-__attribute__ ((section(".first_data")))\r
-       ETH_DMADescTypeDef  DMARxDscrTab[ ETH_RXBUFNB ];\r
-\r
-#if( ipconfigZERO_COPY_RX_DRIVER == 0 )\r
-       /* Ethernet Receive Buffer */\r
-       __ALIGN_BEGIN uint8_t Rx_Buff[ ETH_RXBUFNB ][ ETH_RX_BUF_SIZE ] __ALIGN_END;\r
-#endif\r
-\r
-/* Ethernet Tx DMA Descriptor */\r
-__attribute__ ((aligned (32)))\r
-__attribute__ ((section(".first_data")))\r
-       ETH_DMADescTypeDef  DMATxDscrTab[ ETH_TXBUFNB ];\r
-\r
-#if( ipconfigZERO_COPY_TX_DRIVER == 0 )\r
-       /* Ethernet Transmit Buffer */\r
-       __ALIGN_BEGIN uint8_t Tx_Buff[ ETH_TXBUFNB ][ ETH_TX_BUF_SIZE ] __ALIGN_END;\r
-#endif\r
-\r
-#if( ipconfigZERO_COPY_TX_DRIVER != 0 )\r
-       /* DMATxDescToClear points to the next TX DMA descriptor\r
-       that must be cleared by vClearTXBuffers(). */\r
-       static __IO ETH_DMADescTypeDef  *DMATxDescToClear;\r
-#endif\r
-\r
-/* ucMACAddress as it appears in main.c */\r
-extern const uint8_t ucMACAddress[ 6 ];\r
-\r
-/* Holds the handle of the task used as a deferred interrupt processor.  The\r
-handle is used so direct notifications can be sent to the task for all EMAC/DMA\r
-related interrupts. */\r
-static TaskHandle_t xEMACTaskHandle = NULL;\r
-\r
-/* For local use only: describe the PHY's properties: */\r
-const PhyProperties_t xPHYProperties =\r
-{\r
-       #if( ipconfigETHERNET_AN_ENABLE != 0 )\r
-               .ucSpeed = PHY_SPEED_AUTO,\r
-               .ucDuplex = PHY_DUPLEX_AUTO,\r
-       #else\r
-               #if( ipconfigETHERNET_USE_100MB != 0 )\r
-                       .ucSpeed = PHY_SPEED_100,\r
-               #else\r
-                       .ucSpeed = PHY_SPEED_10,\r
-               #endif\r
-\r
-               #if( ipconfigETHERNET_USE_FULL_DUPLEX != 0 )\r
-                       .duplex = PHY_DUPLEX_FULL,\r
-               #else\r
-                       .duplex = PHY_DUPLEX_HALF,\r
-               #endif\r
-       #endif\r
-\r
-       #if( ipconfigETHERNET_AN_ENABLE != 0 ) && ( ipconfigETHERNET_AUTO_CROSS_ENABLE != 0 )\r
-               .ucMDI_X = PHY_MDIX_AUTO,\r
-       #elif( ipconfigETHERNET_CROSSED_LINK != 0 )\r
-               .ucMDI_X = PHY_MDIX_CROSSED,\r
-       #else\r
-               .ucMDI_X = PHY_MDIX_DIRECT,\r
-       #endif\r
-};\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-void HAL_ETH_RxCpltCallback( ETH_HandleTypeDef *heth )\r
-{\r
-BaseType_t xHigherPriorityTaskWoken = pdFALSE;\r
-\r
-       /* Ethernet RX-Complete callback function, elsewhere declared as weak. */\r
-    ulISREvents |= EMAC_IF_RX_EVENT;\r
-       /* Wakeup the prvEMACHandlerTask. */\r
-       if( xEMACTaskHandle != NULL )\r
-       {\r
-               vTaskNotifyGiveFromISR( xEMACTaskHandle, &xHigherPriorityTaskWoken );\r
-               portYIELD_FROM_ISR( xHigherPriorityTaskWoken );\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-void HAL_ETH_TxCpltCallback( ETH_HandleTypeDef *heth )\r
-{\r
-BaseType_t xHigherPriorityTaskWoken = pdFALSE;\r
-\r
-       /* This call-back is only useful in case packets are being sent\r
-       zero-copy.  Once they're sent, the buffers will be released\r
-       by the function vClearTXBuffers(). */\r
-       ulISREvents |= EMAC_IF_TX_EVENT;\r
-       /* Wakeup the prvEMACHandlerTask. */\r
-       if( xEMACTaskHandle != NULL )\r
-       {\r
-               vTaskNotifyGiveFromISR( xEMACTaskHandle, &xHigherPriorityTaskWoken );\r
-               portYIELD_FROM_ISR( xHigherPriorityTaskWoken );\r
-       }\r
-\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void vClearTXBuffers()\r
-{\r
-__IO ETH_DMADescTypeDef  *txLastDescriptor = xETH.TxDesc;\r
-size_t uxCount = ( ( UBaseType_t ) ETH_TXBUFNB ) - uxSemaphoreGetCount( xTXDescriptorSemaphore );\r
-#if( ipconfigZERO_COPY_TX_DRIVER != 0 )\r
-       NetworkBufferDescriptor_t *pxNetworkBuffer;\r
-       uint8_t *ucPayLoad;\r
-#endif\r
-\r
-       /* This function is called after a TX-completion interrupt.\r
-       It will release each Network Buffer used in xNetworkInterfaceOutput().\r
-       'uxCount' represents the number of descriptors given to DMA for transmission.\r
-       After sending a packet, the DMA will clear the 'ETH_DMATXDESC_OWN' bit. */\r
-       while( ( uxCount > 0 ) && ( ( DMATxDescToClear->Status & ETH_DMATXDESC_OWN ) == 0 ) )\r
-       {\r
-               if( ( DMATxDescToClear == txLastDescriptor ) && ( uxCount != ETH_TXBUFNB ) )\r
-               {\r
-                       break;\r
-               }\r
-               #if( ipconfigZERO_COPY_TX_DRIVER != 0 )\r
-               {\r
-                       ucPayLoad = ( uint8_t * )DMATxDescToClear->Buffer1Addr;\r
-\r
-                       if( ucPayLoad != NULL )\r
-                       {\r
-                               pxNetworkBuffer = pxPacketBuffer_to_NetworkBuffer( ucPayLoad );\r
-                               if( pxNetworkBuffer != NULL )\r
-                               {\r
-                                       vReleaseNetworkBufferAndDescriptor( pxNetworkBuffer ) ;\r
-                               }\r
-                               DMATxDescToClear->Buffer1Addr = ( uint32_t )0u;\r
-                       }\r
-               }\r
-               #endif /* ipconfigZERO_COPY_TX_DRIVER */\r
-\r
-               DMATxDescToClear = ( ETH_DMADescTypeDef * )( DMATxDescToClear->Buffer2NextDescAddr );\r
-\r
-               uxCount--;\r
-               /* Tell the counting semaphore that one more TX descriptor is available. */\r
-               xSemaphoreGive( xTXDescriptorSemaphore );\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-BaseType_t xNetworkInterfaceInitialise( void )\r
-{\r
-HAL_StatusTypeDef hal_eth_init_status;\r
-BaseType_t xResult;\r
-\r
-       if( xEMACTaskHandle == NULL )\r
-       {\r
-               if( xTXDescriptorSemaphore == NULL )\r
-               {\r
-                       xTXDescriptorSemaphore = xSemaphoreCreateCounting( ( UBaseType_t ) ETH_TXBUFNB, ( UBaseType_t ) ETH_TXBUFNB );\r
-                       configASSERT( xTXDescriptorSemaphore );\r
-               }\r
-\r
-               /* Initialise ETH */\r
-\r
-               xETH.Instance = ETH;\r
-//#warning Enable auto-nego again\r
-               xETH.Init.AutoNegotiation = ETH_AUTONEGOTIATION_ENABLE;\r
-//             xETH.Init.AutoNegotiation = ETH_AUTONEGOTIATION_DISABLE;\r
-               xETH.Init.Speed = ETH_SPEED_100M;\r
-               xETH.Init.DuplexMode = ETH_MODE_FULLDUPLEX;\r
-               xETH.Init.PhyAddress = ipconfigPHY_INDEX;\r
-\r
-               xETH.Init.MACAddr = ( uint8_t *) ucMACAddress;\r
-               xETH.Init.RxMode = ETH_RXINTERRUPT_MODE;\r
-\r
-               /* using the ETH_CHECKSUM_BY_HARDWARE option:\r
-               both the IP and the protocol checksums will be calculated\r
-               by the peripheral. */\r
-               xETH.Init.ChecksumMode = ETH_CHECKSUM_BY_HARDWARE;\r
-\r
-               #if( ipconfigUSE_RMII != 0 )\r
-               {\r
-                       xETH.Init.MediaInterface = ETH_MEDIA_INTERFACE_RMII;\r
-               }\r
-               #else\r
-               {\r
-                       xETH.Init.MediaInterface = ETH_MEDIA_INTERFACE_MII;\r
-               }\r
-               #endif /* ipconfigUSE_RMII */\r
-\r
-               hal_eth_init_status = HAL_ETH_Init( &xETH );\r
-\r
-               /* Only for inspection by debugger. */\r
-               ( void ) hal_eth_init_status;\r
-\r
-               /* Set the TxDesc and RxDesc pointers. */\r
-               xETH.TxDesc = DMATxDscrTab;\r
-               xETH.RxDesc = DMARxDscrTab;\r
-\r
-               /* Make sure that all unused fields are cleared. */\r
-               memset( &DMATxDscrTab, '\0', sizeof( DMATxDscrTab ) );\r
-               memset( &DMARxDscrTab, '\0', sizeof( DMARxDscrTab ) );\r
-\r
-               /* Initialize Tx Descriptors list: Chain Mode */\r
-               DMATxDescToClear = DMATxDscrTab;\r
-\r
-               /* Initialise TX-descriptors. */\r
-               prvDMATxDescListInit();\r
-\r
-               /* Initialise RX-descriptors. */\r
-               prvDMARxDescListInit();\r
-\r
-               #if( ipconfigUSE_LLMNR != 0 )\r
-               {\r
-                       /* Program the LLMNR address at index 1. */\r
-                       prvMACAddressConfig( &xETH, ETH_MAC_ADDRESS1, ( uint8_t *) xLLMNR_MACAddress );\r
-               }\r
-               #endif\r
-\r
-               /* Force a negotiation with the Switch or Router and wait for LS. */\r
-               prvEthernetUpdateConfig( pdTRUE );\r
-\r
-               /* The deferred interrupt handler task is created at the highest\r
-               possible priority to ensure the interrupt handler can return directly\r
-               to it.  The task's handle is stored in xEMACTaskHandle so interrupts can\r
-               notify the task when there is something to process. */\r
-               xTaskCreate( prvEMACHandlerTask, "EMAC", configEMAC_TASK_STACK_SIZE, NULL, configMAX_PRIORITIES - 1, &xEMACTaskHandle );\r
-       } /* if( xEMACTaskHandle == NULL ) */\r
-\r
-       if( xPhyObject.ulLinkStatusMask != 0 )\r
-       {\r
-               xETH.Instance->DMAIER |= ETH_DMA_ALL_INTS;\r
-               xResult = pdPASS;\r
-               FreeRTOS_printf( ( "Link Status is high\n" ) ) ;\r
-       }\r
-       else\r
-       {\r
-               /* For now pdFAIL will be returned. But prvEMACHandlerTask() is running\r
-               and it will keep on checking the PHY and set 'ulLinkStatusMask' when necessary. */\r
-               xResult = pdFAIL;\r
-               FreeRTOS_printf( ( "Link Status still low\n" ) ) ;\r
-       }\r
-       /* When returning non-zero, the stack will become active and\r
-    start DHCP (in configured) */\r
-       return xResult;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvDMATxDescListInit()\r
-{\r
-ETH_DMADescTypeDef *pxDMADescriptor;\r
-BaseType_t xIndex;\r
-\r
-       /* Get the pointer on the first member of the descriptor list */\r
-       pxDMADescriptor = DMATxDscrTab;\r
-\r
-       /* Fill each DMA descriptor with the right values */\r
-       for( xIndex = 0; xIndex < ETH_TXBUFNB; xIndex++, pxDMADescriptor++ )\r
-       {\r
-               /* Set Second Address Chained bit */\r
-               pxDMADescriptor->Status = ETH_DMATXDESC_TCH;\r
-\r
-               #if( ipconfigZERO_COPY_TX_DRIVER == 0 )\r
-               {\r
-                       /* Set Buffer1 address pointer */\r
-                       pxDMADescriptor->Buffer1Addr = ( uint32_t )( Tx_Buff[ xIndex ] );\r
-               }\r
-               #endif\r
-\r
-               if( xETH.Init.ChecksumMode == ETH_CHECKSUM_BY_HARDWARE )\r
-               {\r
-                       /* Set the DMA Tx descriptors checksum insertion for TCP, UDP, and ICMP */\r
-                       pxDMADescriptor->Status |= ETH_DMATXDESC_CHECKSUMTCPUDPICMPFULL;\r
-               }\r
-\r
-               /* Initialize the next descriptor with the Next Descriptor Polling Enable */\r
-               if( xIndex < ETH_TXBUFNB - 1 )\r
-               {\r
-                       /* Set next descriptor address register with next descriptor base address */\r
-                       pxDMADescriptor->Buffer2NextDescAddr = ( uint32_t ) ( pxDMADescriptor + 1 );\r
-               }\r
-               else\r
-               {\r
-                       /* For last descriptor, set next descriptor address register equal to the first descriptor base address */\r
-                       pxDMADescriptor->Buffer2NextDescAddr = ( uint32_t ) DMATxDscrTab;\r
-               }\r
-       }\r
-\r
-       /* Set Transmit Descriptor List Address Register */\r
-       xETH.Instance->DMATDLAR = ( uint32_t ) DMATxDscrTab;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvDMARxDescListInit()\r
-{\r
-ETH_DMADescTypeDef *pxDMADescriptor;\r
-BaseType_t xIndex;\r
-       /*\r
-        * RX-descriptors.\r
-        */\r
-\r
-       /* Get the pointer on the first member of the descriptor list */\r
-       pxDMADescriptor = DMARxDscrTab;\r
-\r
-       /* Fill each DMA descriptor with the right values */\r
-       for( xIndex = 0; xIndex < ETH_RXBUFNB; xIndex++, pxDMADescriptor++ )\r
-       {\r
-\r
-               /* Set Buffer1 size and Second Address Chained bit */\r
-               pxDMADescriptor->ControlBufferSize = ETH_DMARXDESC_RCH | (uint32_t)ETH_RX_BUF_SIZE;  \r
-\r
-               #if( ipconfigZERO_COPY_RX_DRIVER != 0 )\r
-               {\r
-               /* Set Buffer1 address pointer */\r
-               NetworkBufferDescriptor_t *pxBuffer;\r
-\r
-                       pxBuffer = pxGetNetworkBufferWithDescriptor( ETH_RX_BUF_SIZE, 100ul );\r
-                       /* If the assert below fails, make sure that there are at least 'ETH_RXBUFNB'\r
-                       Network Buffers available during start-up ( ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ) */\r
-                       configASSERT( pxBuffer != NULL );\r
-                       if( pxBuffer != NULL )\r
-                       {\r
-                               pxDMADescriptor->Buffer1Addr = (uint32_t)pxBuffer->pucEthernetBuffer;\r
-                               pxDMADescriptor->Status = ETH_DMARXDESC_OWN;\r
-                       }\r
-               }\r
-               #else\r
-               {\r
-                       /* Set Buffer1 address pointer */\r
-                       pxDMADescriptor->Buffer1Addr = ( uint32_t )( Rx_Buff[ xIndex ] );\r
-                       /* Set Own bit of the Rx descriptor Status */\r
-                       pxDMADescriptor->Status = ETH_DMARXDESC_OWN;\r
-               }\r
-               #endif\r
-\r
-               /* Initialize the next descriptor with the Next Descriptor Polling Enable */\r
-               if( xIndex < ETH_RXBUFNB - 1 )\r
-               {\r
-                       /* Set next descriptor address register with next descriptor base address */\r
-                       pxDMADescriptor->Buffer2NextDescAddr = ( uint32_t )( pxDMADescriptor + 1 );\r
-               }\r
-               else\r
-               {\r
-                       /* For last descriptor, set next descriptor address register equal to the first descriptor base address */\r
-                       pxDMADescriptor->Buffer2NextDescAddr = ( uint32_t ) DMARxDscrTab;\r
-               }\r
-\r
-       }\r
-       /* Set Receive Descriptor List Address Register */\r
-       xETH.Instance->DMARDLAR = ( uint32_t ) DMARxDscrTab;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvMACAddressConfig(ETH_HandleTypeDef *heth, uint32_t ulIndex, uint8_t *Addr)\r
-{\r
-uint32_t ulTempReg;\r
-\r
-       /* Calculate the selected MAC address high register. */\r
-       ulTempReg = 0x80000000ul | ( ( uint32_t ) Addr[ 5 ] << 8 ) | ( uint32_t ) Addr[ 4 ];\r
-\r
-       /* Load the selected MAC address high register. */\r
-       ( *(__IO uint32_t *)( ( uint32_t ) ( ETH_MAC_ADDR_HBASE + ulIndex ) ) ) = ulTempReg;\r
-\r
-       /* Calculate the selected MAC address low register. */\r
-       ulTempReg = ( ( uint32_t ) Addr[ 3 ] << 24 ) | ( ( uint32_t ) Addr[ 2 ] << 16 ) | ( ( uint32_t ) Addr[ 1 ] << 8 ) | Addr[ 0 ];\r
-\r
-       /* Load the selected MAC address low register */\r
-       ( *(__IO uint32_t *) ( ( uint32_t ) ( ETH_MAC_ADDR_LBASE + ulIndex ) ) ) = ulTempReg;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-BaseType_t xNetworkInterfaceOutput( NetworkBufferDescriptor_t * const pxDescriptor, BaseType_t bReleaseAfterSend )\r
-{\r
-BaseType_t xReturn = pdFAIL;\r
-uint32_t ulTransmitSize = 0;\r
-__IO ETH_DMADescTypeDef *pxDmaTxDesc;\r
-/* Do not wait too long for a free TX DMA buffer. */\r
-const TickType_t xBlockTimeTicks = pdMS_TO_TICKS( 50u );\r
-\r
-       #if( ipconfigDRIVER_INCLUDED_TX_IP_CHECKSUM != 0 )\r
-       {\r
-       ProtocolPacket_t *pxPacket;\r
-\r
-               #if( ipconfigZERO_COPY_RX_DRIVER != 0 )\r
-               {\r
-                       configASSERT( bReleaseAfterSend != 0 );\r
-               }\r
-               #endif /* ipconfigZERO_COPY_RX_DRIVER */\r
-\r
-               /* If the peripheral must calculate the checksum, it wants\r
-               the protocol checksum to have a value of zero. */\r
-               pxPacket = ( ProtocolPacket_t * ) ( pxDescriptor->pucEthernetBuffer );\r
-\r
-               if( pxPacket->xICMPPacket.xIPHeader.ucProtocol == ipPROTOCOL_ICMP )\r
-               {\r
-                       pxPacket->xICMPPacket.xICMPHeader.usChecksum = ( uint16_t )0u;\r
-               }\r
-       }\r
-       #endif\r
-\r
-       /* Open a do {} while ( 0 ) loop to be able to call break. */\r
-       do\r
-       {\r
-               if( xPhyObject.ulLinkStatusMask != 0 )\r
-               {\r
-                       if( xSemaphoreTake( xTXDescriptorSemaphore, xBlockTimeTicks ) != pdPASS )\r
-                       {\r
-                               /* Time-out waiting for a free TX descriptor. */\r
-                               break;\r
-                       }\r
-\r
-                       /* This function does the actual transmission of the packet. The packet is\r
-                       contained in 'pxDescriptor' that is passed to the function. */\r
-                       pxDmaTxDesc = xETH.TxDesc;\r
-\r
-                       /* Is this buffer available? */\r
-                       configASSERT ( ( pxDmaTxDesc->Status & ETH_DMATXDESC_OWN ) == 0 );\r
-\r
-                       {\r
-                               /* Is this buffer available? */\r
-                               /* Get bytes in current buffer. */\r
-                               ulTransmitSize = pxDescriptor->xDataLength;\r
-\r
-                               if( ulTransmitSize > ETH_TX_BUF_SIZE )\r
-                               {\r
-                                       ulTransmitSize = ETH_TX_BUF_SIZE;\r
-                               }\r
-\r
-                               #if( ipconfigZERO_COPY_TX_DRIVER == 0 )\r
-                               {\r
-                                       /* Copy the bytes. */\r
-                                       memcpy( ( void * ) pxDmaTxDesc->Buffer1Addr, pxDescriptor->pucEthernetBuffer, ulTransmitSize );\r
-                               }\r
-                               #else\r
-                               {\r
-                                       /* Move the buffer. */\r
-                                       pxDmaTxDesc->Buffer1Addr = ( uint32_t )pxDescriptor->pucEthernetBuffer;\r
-                                       /* The Network Buffer has been passed to DMA, no need to release it. */\r
-                                       bReleaseAfterSend = pdFALSE_UNSIGNED;\r
-                               }\r
-                               #endif /* ipconfigZERO_COPY_TX_DRIVER */\r
-\r
-                               /* Ask to set the IPv4 checksum.\r
-                               Also need an Interrupt on Completion so that 'vClearTXBuffers()' will be called.. */\r
-                               pxDmaTxDesc->Status |= ETH_DMATXDESC_CIC_TCPUDPICMP_FULL | ETH_DMATXDESC_IC;\r
-\r
-                               /* Prepare transmit descriptors to give to DMA. */\r
-\r
-                               /* Set LAST and FIRST segment */\r
-                               pxDmaTxDesc->Status |= ETH_DMATXDESC_FS | ETH_DMATXDESC_LS;\r
-                               /* Set frame size */\r
-                               pxDmaTxDesc->ControlBufferSize = ( ulTransmitSize & ETH_DMATXDESC_TBS1 );\r
-                               /* Set Own bit of the Tx descriptor Status: gives the buffer back to ETHERNET DMA */\r
-                               pxDmaTxDesc->Status |= ETH_DMATXDESC_OWN;\r
-\r
-                               /* Point to next descriptor */\r
-                               xETH.TxDesc = ( ETH_DMADescTypeDef * ) ( xETH.TxDesc->Buffer2NextDescAddr );\r
-                               /* Ensure completion of memory access */\r
-                               __DSB();\r
-                               /* Resume DMA transmission*/\r
-                               xETH.Instance->DMATPDR = 0;\r
-                               iptraceNETWORK_INTERFACE_TRANSMIT();\r
-                               xReturn = pdPASS;\r
-                       }\r
-               }\r
-               else\r
-               {\r
-                       /* The PHY has no Link Status, packet shall be dropped. */\r
-               }\r
-       } while( 0 );\r
-       /* The buffer has been sent so can be released. */\r
-       if( bReleaseAfterSend != pdFALSE )\r
-       {\r
-               vReleaseNetworkBufferAndDescriptor( pxDescriptor );\r
-       }\r
-\r
-       return xReturn;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static BaseType_t xMayAcceptPacket( uint8_t *pcBuffer )\r
-{\r
-const ProtocolPacket_t *pxProtPacket = ( const ProtocolPacket_t * )pcBuffer;\r
-\r
-       switch( pxProtPacket->xTCPPacket.xEthernetHeader.usFrameType )\r
-       {\r
-       case ipARP_FRAME_TYPE:\r
-               /* Check it later. */\r
-               return pdTRUE;\r
-       case ipIPv4_FRAME_TYPE:\r
-               /* Check it here. */\r
-               break;\r
-       default:\r
-               /* Refuse the packet. */\r
-               return pdFALSE;\r
-       }\r
-\r
-       #if( ipconfigETHERNET_DRIVER_FILTERS_PACKETS == 1 )\r
-       {\r
-               const IPHeader_t *pxIPHeader = &(pxProtPacket->xTCPPacket.xIPHeader);\r
-               uint32_t ulDestinationIPAddress;\r
-\r
-               /* Ensure that the incoming packet is not fragmented (only outgoing packets\r
-                * can be fragmented) as these are the only handled IP frames currently. */\r
-               if( ( pxIPHeader->usFragmentOffset & FreeRTOS_ntohs( ipFRAGMENT_OFFSET_BIT_MASK ) ) != 0U )\r
-               {\r
-                       return pdFALSE;\r
-               }\r
-               /* HT: Might want to make the following configurable because\r
-                * most IP messages have a standard length of 20 bytes */\r
-\r
-               /* 0x45 means: IPv4 with an IP header of 5 x 4 = 20 bytes\r
-                * 0x47 means: IPv4 with an IP header of 7 x 4 = 28 bytes */\r
-               if( pxIPHeader->ucVersionHeaderLength < 0x45 || pxIPHeader->ucVersionHeaderLength > 0x4F )\r
-               {\r
-                       return pdFALSE;\r
-               }\r
-\r
-               ulDestinationIPAddress = pxIPHeader->ulDestinationIPAddress;\r
-               /* Is the packet for this node? */\r
-               if( ( ulDestinationIPAddress != *ipLOCAL_IP_ADDRESS_POINTER ) &&\r
-                       /* Is it a broadcast address x.x.x.255 ? */\r
-                       ( ( FreeRTOS_ntohl( ulDestinationIPAddress ) & 0xff ) != 0xff ) &&\r
-               #if( ipconfigUSE_LLMNR == 1 )\r
-                       ( ulDestinationIPAddress != ipLLMNR_IP_ADDR ) &&\r
-               #endif\r
-                       ( *ipLOCAL_IP_ADDRESS_POINTER != 0 ) ) {\r
-                       FreeRTOS_printf( ( "Drop IP %lxip\n", FreeRTOS_ntohl( ulDestinationIPAddress ) ) );\r
-                       return pdFALSE;\r
-               }\r
-\r
-               if( pxIPHeader->ucProtocol == ipPROTOCOL_UDP )\r
-               {\r
-                       uint16_t port = pxProtPacket->xUDPPacket.xUDPHeader.usDestinationPort;\r
-\r
-                       if( ( xPortHasUDPSocket( port ) == pdFALSE )\r
-                       #if ipconfigUSE_LLMNR == 1\r
-                               && ( port != FreeRTOS_ntohs( ipLLMNR_PORT ) )\r
-                       #endif\r
-                       #if ipconfigUSE_NBNS == 1\r
-                               && ( port != FreeRTOS_ntohs( ipNBNS_PORT ) )\r
-                       #endif\r
-                       #if ipconfigUSE_DNS == 1\r
-                               && ( pxProtPacket->xUDPPacket.xUDPHeader.usSourcePort != FreeRTOS_ntohs( ipDNS_PORT ) )\r
-                       #endif\r
-                               ) {\r
-                               /* Drop this packet, not for this device. */\r
-                               return pdFALSE;\r
-                       }\r
-               }\r
-       }\r
-       #endif  /* ipconfigETHERNET_DRIVER_FILTERS_PACKETS */\r
-       return pdTRUE;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static BaseType_t prvNetworkInterfaceInput( void )\r
-{\r
-NetworkBufferDescriptor_t *pxCurDescriptor;\r
-NetworkBufferDescriptor_t *pxNewDescriptor = NULL;\r
-BaseType_t xReceivedLength, xAccepted;\r
-__IO ETH_DMADescTypeDef *pxDMARxDescriptor;\r
-xIPStackEvent_t xRxEvent = { eNetworkRxEvent, NULL };\r
-const TickType_t xDescriptorWaitTime = pdMS_TO_TICKS( 250 );\r
-uint8_t *pucBuffer;\r
-\r
-       pxDMARxDescriptor = xETH.RxDesc;\r
-\r
-       if( ( pxDMARxDescriptor->Status & ETH_DMARXDESC_OWN) == 0 )\r
-       {\r
-               /* Get the Frame Length of the received packet: substruct 4 bytes of the CRC */\r
-               xReceivedLength = ( ( pxDMARxDescriptor->Status & ETH_DMARXDESC_FL ) >> ETH_DMARXDESC_FRAMELENGTHSHIFT ) - 4;\r
-\r
-               pucBuffer = (uint8_t *) pxDMARxDescriptor->Buffer1Addr;\r
-\r
-               /* Update the ETHERNET DMA global Rx descriptor with next Rx descriptor */\r
-               /* Chained Mode */    \r
-               /* Selects the next DMA Rx descriptor list for next buffer to read */ \r
-               xETH.RxDesc = ( ETH_DMADescTypeDef* )pxDMARxDescriptor->Buffer2NextDescAddr;\r
-       }\r
-       else\r
-       {\r
-               xReceivedLength = 0;\r
-       }\r
-\r
-       /* Obtain the size of the packet and put it into the "usReceivedLength" variable. */\r
-\r
-       /* get received frame */\r
-       if( xReceivedLength > 0ul )\r
-       {\r
-               /* In order to make the code easier and faster, only packets in a single buffer\r
-               will be accepted.  This can be done by making the buffers large enough to\r
-               hold a complete Ethernet packet (1536 bytes).\r
-               Therefore, two sanity checks: */\r
-               configASSERT( xReceivedLength <= ETH_RX_BUF_SIZE );\r
-\r
-               if( ( pxDMARxDescriptor->Status & ( ETH_DMARXDESC_CE | ETH_DMARXDESC_IPV4HCE | ETH_DMARXDESC_FT ) ) != ETH_DMARXDESC_FT )\r
-               {\r
-                       /* Not an Ethernet frame-type or a checmsum error. */\r
-                       xAccepted = pdFALSE;\r
-               }\r
-               else\r
-               {\r
-                       /* See if this packet must be handled. */\r
-                       xAccepted = xMayAcceptPacket( pucBuffer );\r
-               }\r
-\r
-               if( xAccepted != pdFALSE )\r
-               {\r
-                       /* The packet wil be accepted, but check first if a new Network Buffer can\r
-                       be obtained. If not, the packet will still be dropped. */\r
-                       pxNewDescriptor = pxGetNetworkBufferWithDescriptor( ETH_RX_BUF_SIZE, xDescriptorWaitTime );\r
-\r
-                       if( pxNewDescriptor == NULL )\r
-                       {\r
-                               /* A new descriptor can not be allocated now. This packet will be dropped. */\r
-                               xAccepted = pdFALSE;\r
-                       }\r
-               }\r
-               #if( ipconfigZERO_COPY_RX_DRIVER != 0 )\r
-               {\r
-                       /* Find out which Network Buffer was originally passed to the descriptor. */\r
-                       pxCurDescriptor = pxPacketBuffer_to_NetworkBuffer( pucBuffer );\r
-                       configASSERT( pxCurDescriptor != NULL );\r
-               }\r
-               #else\r
-               {\r
-                       /* In this mode, the two descriptors are the same. */\r
-                       pxCurDescriptor = pxNewDescriptor;\r
-                       if( pxNewDescriptor != NULL )\r
-                       {\r
-                               /* The packet is acepted and a new Network Buffer was created,\r
-                               copy data to the Network Bufffer. */\r
-                               memcpy( pxNewDescriptor->pucEthernetBuffer, pucBuffer, xReceivedLength );\r
-                       }\r
-               }\r
-               #endif\r
-\r
-               if( xAccepted != pdFALSE )\r
-               {\r
-                       pxCurDescriptor->xDataLength = xReceivedLength;\r
-                       xRxEvent.pvData = ( void * ) pxCurDescriptor;\r
-\r
-                       /* Pass the data to the TCP/IP task for processing. */\r
-                       if( xSendEventStructToIPTask( &xRxEvent, xDescriptorWaitTime ) == pdFALSE )\r
-                       {\r
-                               /* Could not send the descriptor into the TCP/IP stack, it\r
-                               must be released. */\r
-                               vReleaseNetworkBufferAndDescriptor( pxCurDescriptor );\r
-                               iptraceETHERNET_RX_EVENT_LOST();\r
-                       }\r
-                       else\r
-                       {\r
-                               iptraceNETWORK_INTERFACE_RECEIVE();\r
-                       }\r
-               }\r
-\r
-               /* Release descriptors to DMA */\r
-               #if( ipconfigZERO_COPY_RX_DRIVER != 0 )\r
-               {\r
-                       /* Set Buffer1 address pointer */\r
-                       if( pxNewDescriptor != NULL )\r
-                       {\r
-                               pxDMARxDescriptor->Buffer1Addr = (uint32_t)pxNewDescriptor->pucEthernetBuffer;\r
-                       }\r
-                       else\r
-                       {\r
-                               /* The packet was dropped and the same Network\r
-                               Buffer will be used to receive a new packet. */\r
-                       }\r
-               }\r
-               #endif /* ipconfigZERO_COPY_RX_DRIVER */\r
-\r
-               /* Set Buffer1 size and Second Address Chained bit */\r
-               pxDMARxDescriptor->ControlBufferSize = ETH_DMARXDESC_RCH | (uint32_t)ETH_RX_BUF_SIZE;  \r
-               pxDMARxDescriptor->Status = ETH_DMARXDESC_OWN;\r
-\r
-               /* Ensure completion of memory access */\r
-               __DSB();\r
-               /* When Rx Buffer unavailable flag is set clear it and resume\r
-               reception. */\r
-               if( ( xETH.Instance->DMASR & ETH_DMASR_RBUS ) != 0 )\r
-               {\r
-                       /* Clear RBUS ETHERNET DMA flag. */\r
-                       xETH.Instance->DMASR = ETH_DMASR_RBUS;\r
-\r
-                       /* Resume DMA reception. */\r
-                       xETH.Instance->DMARPDR = 0;\r
-               }\r
-       }\r
-\r
-       return ( xReceivedLength > 0 );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-\r
-BaseType_t xSTM32_PhyRead( BaseType_t xAddress, BaseType_t xRegister, uint32_t *pulValue )\r
-{\r
-uint16_t usPrevAddress = xETH.Init.PhyAddress;\r
-BaseType_t xResult;\r
-HAL_StatusTypeDef xHALResult;\r
-\r
-       xETH.Init.PhyAddress = xAddress;\r
-       xHALResult = HAL_ETH_ReadPHYRegister( &xETH, ( uint16_t )xRegister, pulValue );\r
-       xETH.Init.PhyAddress = usPrevAddress;\r
-\r
-       if( xHALResult == HAL_OK )\r
-       {\r
-               xResult = 0;\r
-       }\r
-       else\r
-       {\r
-               xResult = -1;\r
-       }\r
-       return xResult;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-BaseType_t xSTM32_PhyWrite( BaseType_t xAddress, BaseType_t xRegister, uint32_t ulValue )\r
-{\r
-uint16_t usPrevAddress = xETH.Init.PhyAddress;\r
-BaseType_t xResult;\r
-HAL_StatusTypeDef xHALResult;\r
-\r
-       xETH.Init.PhyAddress = xAddress;\r
-       xHALResult = HAL_ETH_WritePHYRegister( &xETH, ( uint16_t )xRegister, ulValue );\r
-       xETH.Init.PhyAddress = usPrevAddress;\r
-\r
-       if( xHALResult == HAL_OK )\r
-       {\r
-               xResult = 0;\r
-       }\r
-       else\r
-       {\r
-               xResult = -1;\r
-       }\r
-       return xResult;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-void phy_test()\r
-{\r
-BaseType_t xPhyCount;\r
-BaseType_t xPhyIndex;\r
-\r
-       vPhyInitialise( &xPhyObject, xSTM32_PhyRead, xSTM32_PhyWrite );\r
-       xPhyCount = xPhyDiscover( &xPhyObject );\r
-       FreeRTOS_printf( ( "PHY count %ld\n", xPhyCount ) );\r
-       for( xPhyIndex = 0; xPhyIndex < xPhyCount; xPhyIndex++ )\r
-       {\r
-               FreeRTOS_printf( ( "PHY[%d] at address %d ( 0x%08X )\n",\r
-                       xPhyIndex,\r
-                       xPhyObject.ucPhyIndexes[ xPhyIndex ],\r
-                       xPhyObject.ulPhyIDs[ xPhyIndex ] ) );\r
-\r
-       }\r
-       \r
-}\r
-\r
-void vMACBProbePhy( void )\r
-{\r
-       vPhyInitialise( &xPhyObject, xSTM32_PhyRead, xSTM32_PhyWrite );\r
-       xPhyDiscover( &xPhyObject );\r
-       xPhyConfigure( &xPhyObject, &xPHYProperties );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvEthernetUpdateConfig( BaseType_t xForce )\r
-{\r
-       FreeRTOS_printf( ( "prvEthernetUpdateConfig: LS mask %02X Force %d\n",\r
-               xPhyObject.ulLinkStatusMask,\r
-               ( int )xForce ) );\r
-\r
-       if( ( xForce != pdFALSE ) || ( xPhyObject.ulLinkStatusMask != 0 ) )\r
-       {\r
-               /* Restart the auto-negotiation. */\r
-               if( xETH.Init.AutoNegotiation != ETH_AUTONEGOTIATION_DISABLE )\r
-               {\r
-                       xPhyStartAutoNegotiation( &xPhyObject, xPhyGetMask( &xPhyObject ) );\r
-\r
-                       /* Configure the MAC with the Duplex Mode fixed by the\r
-                       auto-negotiation process. */\r
-                       if( xPhyObject.xPhyProperties.ucDuplex == PHY_DUPLEX_FULL )\r
-                       {\r
-                               xETH.Init.DuplexMode = ETH_MODE_FULLDUPLEX;\r
-                       }\r
-                       else\r
-                       {\r
-                               xETH.Init.DuplexMode = ETH_MODE_HALFDUPLEX;\r
-                       }\r
-\r
-                       /* Configure the MAC with the speed fixed by the\r
-                       auto-negotiation process. */\r
-                       if( xPhyObject.xPhyProperties.ucSpeed == PHY_SPEED_10 )\r
-                       {\r
-                               xETH.Init.Speed = ETH_SPEED_10M;\r
-                       }\r
-                       else\r
-                       {\r
-                               xETH.Init.Speed = ETH_SPEED_100M;\r
-                       }\r
-               }\r
-               else /* AutoNegotiation Disable */\r
-               {\r
-                       /* Check parameters */\r
-                       assert_param( IS_ETH_SPEED( xETH.Init.Speed ) );\r
-                       assert_param( IS_ETH_DUPLEX_MODE( xETH.Init.DuplexMode ) );\r
-\r
-                       if( xETH.Init.DuplexMode == ETH_MODE_FULLDUPLEX )\r
-                       {\r
-                               xPhyObject.xPhyPreferences.ucDuplex = PHY_DUPLEX_HALF;\r
-                       }\r
-                       else\r
-                       {\r
-                               xPhyObject.xPhyPreferences.ucDuplex = PHY_DUPLEX_FULL;\r
-                       }\r
-\r
-                       if( xETH.Init.Speed == ETH_SPEED_10M )\r
-                       {\r
-                               xPhyObject.xPhyPreferences.ucSpeed = PHY_SPEED_10;\r
-                       }\r
-                       else\r
-                       {\r
-                               xPhyObject.xPhyPreferences.ucSpeed = PHY_SPEED_100;\r
-                       }\r
-\r
-                       xPhyObject.xPhyPreferences.ucMDI_X = PHY_MDIX_AUTO;\r
-\r
-                       /* Use predefined (fixed) configuration. */\r
-                       xPhyFixedValue( &xPhyObject, xPhyGetMask( &xPhyObject ) );\r
-               }\r
-\r
-               /* ETHERNET MAC Re-Configuration */\r
-               HAL_ETH_ConfigMAC( &xETH, (ETH_MACInitTypeDef *) NULL);\r
-\r
-               /* Restart MAC interface */\r
-               HAL_ETH_Start( &xETH);\r
-       }\r
-       else\r
-       {\r
-               /* Stop MAC interface */\r
-               HAL_ETH_Stop( &xETH );\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-BaseType_t xGetPhyLinkStatus( void )\r
-{\r
-BaseType_t xReturn;\r
-\r
-       if( xPhyObject.ulLinkStatusMask != 0 )\r
-       {\r
-               xReturn = pdPASS;\r
-       }\r
-       else\r
-       {\r
-               xReturn = pdFAIL;\r
-       }\r
-\r
-       return xReturn;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-#define niBUFFER_1_PACKET_SIZE         1536\r
-\r
-static __attribute__ ((section(".first_data"))) uint8_t ucNetworkPackets[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS * niBUFFER_1_PACKET_SIZE ] __attribute__ ( ( aligned( 32 ) ) );\r
-\r
-void vNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] )\r
-{\r
-\r
-uint8_t *ucRAMBuffer = ucNetworkPackets;\r
-uint32_t ul;\r
-\r
-       for( ul = 0; ul < ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS; ul++ )\r
-       {\r
-               pxNetworkBuffers[ ul ].pucEthernetBuffer = ucRAMBuffer + ipBUFFER_PADDING;\r
-               *( ( unsigned * ) ucRAMBuffer ) = ( unsigned ) ( &( pxNetworkBuffers[ ul ] ) );\r
-               ucRAMBuffer += niBUFFER_1_PACKET_SIZE;\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvEMACHandlerTask( void *pvParameters )\r
-{\r
-UBaseType_t uxLastMinBufferCount = 0;\r
-#if( ipconfigCHECK_IP_QUEUE_SPACE != 0 )\r
-UBaseType_t uxLastMinQueueSpace = 0;\r
-#endif\r
-UBaseType_t uxCurrentCount;\r
-BaseType_t xResult;\r
-const TickType_t ulMaxBlockTime = pdMS_TO_TICKS( 100UL );\r
-\r
-       /* Remove compiler warnings about unused parameters. */\r
-       ( void ) pvParameters;\r
-\r
-       for( ;; )\r
-       {\r
-               xResult = 0;\r
-               uxCurrentCount = uxGetMinimumFreeNetworkBuffers();\r
-               if( uxLastMinBufferCount != uxCurrentCount )\r
-               {\r
-                       /* The logging produced below may be helpful\r
-                       while tuning +TCP: see how many buffers are in use. */\r
-                       uxLastMinBufferCount = uxCurrentCount;\r
-                       FreeRTOS_printf( ( "Network buffers: %lu lowest %lu\n",\r
-                               uxGetNumberOfFreeNetworkBuffers(), uxCurrentCount ) );\r
-               }\r
-\r
-               if( xTXDescriptorSemaphore != NULL )\r
-               {\r
-               static UBaseType_t uxLowestSemCount = ( UBaseType_t ) ETH_TXBUFNB - 1;\r
-\r
-                       uxCurrentCount = uxSemaphoreGetCount( xTXDescriptorSemaphore );\r
-                       if( uxLowestSemCount > uxCurrentCount )\r
-                       {\r
-                               uxLowestSemCount = uxCurrentCount;\r
-                               FreeRTOS_printf( ( "TX DMA buffers: lowest %lu\n", uxLowestSemCount ) );\r
-                       }\r
-\r
-               }\r
-\r
-               #if( ipconfigCHECK_IP_QUEUE_SPACE != 0 )\r
-               {\r
-                       uxCurrentCount = uxGetMinimumIPQueueSpace();\r
-                       if( uxLastMinQueueSpace != uxCurrentCount )\r
-                       {\r
-                               /* The logging produced below may be helpful\r
-                               while tuning +TCP: see how many buffers are in use. */\r
-                               uxLastMinQueueSpace = uxCurrentCount;\r
-                               FreeRTOS_printf( ( "Queue space: lowest %lu\n", uxCurrentCount ) );\r
-                       }\r
-               }\r
-               #endif /* ipconfigCHECK_IP_QUEUE_SPACE */\r
-\r
-               if( ( ulISREvents & EMAC_IF_ALL_EVENT ) == 0 )\r
-               {\r
-                       /* No events to process now, wait for the next. */\r
-                       ulTaskNotifyTake( pdFALSE, ulMaxBlockTime );\r
-               }\r
-\r
-               if( ( ulISREvents & EMAC_IF_RX_EVENT ) != 0 )\r
-               {\r
-                       ulISREvents &= ~EMAC_IF_RX_EVENT;\r
-\r
-                       xResult = prvNetworkInterfaceInput();\r
-                       if( xResult > 0 )\r
-                       {\r
-                               while( prvNetworkInterfaceInput() > 0 )\r
-                               {\r
-                               }\r
-                       }\r
-               }\r
-\r
-               if( ( ulISREvents & EMAC_IF_TX_EVENT ) != 0 )\r
-               {\r
-                       /* Code to release TX buffers if zero-copy is used. */\r
-                       ulISREvents &= ~EMAC_IF_TX_EVENT;\r
-                       /* Check if DMA packets have been delivered. */\r
-                       vClearTXBuffers();\r
-               }\r
-\r
-               if( ( ulISREvents & EMAC_IF_ERR_EVENT ) != 0 )\r
-               {\r
-                       /* Future extension: logging about errors that occurred. */\r
-                       ulISREvents &= ~EMAC_IF_ERR_EVENT;\r
-               }\r
-               if( xPhyCheckLinkStatus( &xPhyObject, xResult ) != 0 )\r
-               {\r
-                       /* Something has changed to a Link Status, need re-check. */\r
-                       prvEthernetUpdateConfig( pdFALSE );\r
-               }\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-void ETH_IRQHandler( void )\r
-{\r
-       HAL_ETH_IRQHandler( &xETH );\r
-}\r
-\r
diff --git a/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/STM32F7xx/stm32f7xx_hal_eth.c b/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/STM32F7xx/stm32f7xx_hal_eth.c
deleted file mode 100644 (file)
index 6f335c5..0000000
+++ /dev/null
@@ -1,1835 +0,0 @@
-/**\r
-  ******************************************************************************\r
-  * @file    stm32f7xx_hal_eth.c\r
-  * @author  MCD Application Team\r
-  * @version V1.3.2\r
-  * @date    26-June-2015\r
-  * @brief   ETH HAL module driver.\r
-  *          This file provides firmware functions to manage the following \r
-  *          functionalities of the Ethernet (ETH) peripheral:\r
-  *           + Initialization and de-initialization functions\r
-  *           + IO operation functions\r
-  *           + Peripheral Control functions \r
-  *           + Peripheral State and Errors functions\r
-  *\r
-  @verbatim\r
-  ==============================================================================\r
-                    ##### How to use this driver #####\r
-  ==============================================================================\r
-    [..]\r
-      (#)Declare a ETH_HandleTypeDef handle structure, for example:\r
-         ETH_HandleTypeDef  heth;\r
-        \r
-      (#)Fill parameters of Init structure in heth handle\r
-  \r
-      (#)Call HAL_ETH_Init() API to initialize the Ethernet peripheral (MAC, DMA, ...) \r
-\r
-      (#)Initialize the ETH low level resources through the HAL_ETH_MspInit() API:\r
-          (##) Enable the Ethernet interface clock using \r
-               (+++) __HAL_RCC_ETHMAC_CLK_ENABLE();\r
-               (+++) __HAL_RCC_ETHMACTX_CLK_ENABLE();\r
-               (+++) __HAL_RCC_ETHMACRX_CLK_ENABLE();\r
-           \r
-          (##) Initialize the related GPIO clocks\r
-          (##) Configure Ethernet pin-out\r
-          (##) Configure Ethernet NVIC interrupt (IT mode)   \r
-    \r
-      (#)Initialize Ethernet DMA Descriptors in chain mode and point to allocated buffers:\r
-          (##) HAL_ETH_DMATxDescListInit(); for Transmission process\r
-          (##) HAL_ETH_DMARxDescListInit(); for Reception process\r
-\r
-      (#)Enable MAC and DMA transmission and reception:\r
-          (##) HAL_ETH_Start();\r
-\r
-      (#)Prepare ETH DMA TX Descriptors and give the hand to ETH DMA to transfer \r
-         the frame to MAC TX FIFO:\r
-         (##) HAL_ETH_TransmitFrame();\r
-\r
-      (#)Poll for a received frame in ETH RX DMA Descriptors and get received \r
-         frame parameters\r
-         (##) HAL_ETH_GetReceivedFrame(); (should be called into an infinite loop)\r
-\r
-      (#) Get a received frame when an ETH RX interrupt occurs:\r
-         (##) HAL_ETH_GetReceivedFrame_IT(); (called in IT mode only)\r
-\r
-      (#) Communicate with external PHY device:\r
-         (##) Read a specific register from the PHY  \r
-              HAL_ETH_ReadPHYRegister();\r
-         (##) Write data to a specific RHY register:\r
-              HAL_ETH_WritePHYRegister();\r
-\r
-      (#) Configure the Ethernet MAC after ETH peripheral initialization\r
-          HAL_ETH_ConfigMAC(); all MAC parameters should be filled.\r
-      \r
-      (#) Configure the Ethernet DMA after ETH peripheral initialization\r
-          HAL_ETH_ConfigDMA(); all DMA parameters should be filled.\r
-\r
-      -@- The PTP protocol and the DMA descriptors ring mode are not supported\r
-          in this driver\r
-\r
-  @endverbatim\r
-  ******************************************************************************\r
-  * @attention\r
-  *\r
-  * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>\r
-  *\r
-  * Redistribution and use in source and binary forms, with or without modification,\r
-  * are permitted provided that the following conditions are met:\r
-  *   1. Redistributions of source code must retain the above copyright notice,\r
-  *      this list of conditions and the following disclaimer.\r
-  *   2. Redistributions in binary form must reproduce the above copyright notice,\r
-  *      this list of conditions and the following disclaimer in the documentation\r
-  *      and/or other materials provided with the distribution.\r
-  *   3. Neither the name of STMicroelectronics nor the names of its contributors\r
-  *      may be used to endorse or promote products derived from this software\r
-  *      without specific prior written permission.\r
-  *\r
-  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"\r
-  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
-  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r
-  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r
-  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
-  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r
-  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r
-  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r
-  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
-  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
-  *\r
-  ******************************************************************************\r
-  */ \r
-\r
-/* Includes ------------------------------------------------------------------*/\r
-#include "stm32f7xx_hal.h"\r
-\r
-\r
-int lUDPLoggingPrintf( const char *pcFormatString, ... );\r
-\r
-/** @addtogroup STM32F4xx_HAL_Driver\r
-  * @{\r
-  */\r
-\r
-/** @defgroup ETH ETH\r
-  * @brief ETH HAL module driver\r
-  * @{\r
-  */\r
-\r
-#if !defined( ARRAY_SIZE )\r
-       #define ARRAY_SIZE( x ) ( sizeof ( x ) / sizeof ( x )[ 0 ] )\r
-#endif\r
-\r
-#ifdef HAL_ETH_MODULE_ENABLED\r
-\r
-#if defined(STM32F7xx)\r
-\r
-/* Private typedef -----------------------------------------------------------*/\r
-/* Private define ------------------------------------------------------------*/\r
-/** @defgroup ETH_Private_Constants ETH Private Constants\r
-  * @{\r
-  */\r
-#define LINKED_STATE_TIMEOUT_VALUE          ((uint32_t)2000)  /* 2000 ms */\r
-#define AUTONEGO_COMPLETED_TIMEOUT_VALUE    ((uint32_t)1000)  /* 1000 ms */\r
-\r
-/**\r
-  * @}\r
-  */\r
-/* Private macro -------------------------------------------------------------*/\r
-/* Private variables ---------------------------------------------------------*/\r
-/* Private function prototypes -----------------------------------------------*/\r
-/** @defgroup ETH_Private_Functions ETH Private Functions\r
-  * @{\r
-  */\r
-static void ETH_MACDMAConfig(ETH_HandleTypeDef *heth, uint32_t err);\r
-static void ETH_MACAddressConfig(ETH_HandleTypeDef *heth, uint32_t MacAddr, uint8_t *Addr);\r
-static void ETH_MACReceptionEnable(ETH_HandleTypeDef *heth);\r
-static void ETH_MACReceptionDisable(ETH_HandleTypeDef *heth);\r
-static void ETH_MACTransmissionEnable(ETH_HandleTypeDef *heth);\r
-static void ETH_MACTransmissionDisable(ETH_HandleTypeDef *heth);\r
-static void ETH_DMATransmissionEnable(ETH_HandleTypeDef *heth);\r
-static void ETH_DMATransmissionDisable(ETH_HandleTypeDef *heth);\r
-static void ETH_DMAReceptionEnable(ETH_HandleTypeDef *heth);\r
-static void ETH_DMAReceptionDisable(ETH_HandleTypeDef *heth);\r
-static void ETH_FlushTransmitFIFO(ETH_HandleTypeDef *heth);\r
-\r
-/**\r
-  * @}\r
-  */\r
-/* Private functions ---------------------------------------------------------*/\r
-\r
-/** @defgroup ETH_Exported_Functions ETH Exported Functions\r
-  * @{\r
-  */\r
-\r
-/** @defgroup ETH_Exported_Functions_Group1 Initialization and de-initialization functions\r
-  *  @brief   Initialization and Configuration functions\r
-  *\r
-  @verbatim\r
-  ===============================================================================\r
-            ##### Initialization and de-initialization functions #####\r
-  ===============================================================================\r
-  [..]  This section provides functions allowing to:\r
-      (+) Initialize and configure the Ethernet peripheral\r
-      (+) De-initialize the Ethernet peripheral\r
-\r
-  @endverbatim\r
-  * @{\r
-  */\r
-extern void vMACBProbePhy ( void );\r
-\r
-/**\r
-  * @brief  Initializes the Ethernet MAC and DMA according to default\r
-  *         parameters.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @retval HAL status\r
-  */\r
-HAL_StatusTypeDef HAL_ETH_Init(ETH_HandleTypeDef *heth)\r
-{\r
-       uint32_t tmpreg = 0;\r
-       uint32_t hclk = 60000000;\r
-       uint32_t err = ETH_SUCCESS;\r
-\r
-       /* Check the ETH peripheral state */\r
-       if( heth == NULL )\r
-       {\r
-               return HAL_ERROR;\r
-       }\r
-\r
-       /* Check parameters */\r
-       assert_param(IS_ETH_AUTONEGOTIATION(heth->Init.AutoNegotiation));\r
-       assert_param(IS_ETH_RX_MODE(heth->Init.RxMode));\r
-       assert_param(IS_ETH_CHECKSUM_MODE(heth->Init.ChecksumMode));\r
-       assert_param(IS_ETH_MEDIA_INTERFACE(heth->Init.MediaInterface));\r
-\r
-       if( heth->State == HAL_ETH_STATE_RESET )\r
-       {\r
-               /* Init the low level hardware : GPIO, CLOCK, NVIC. */\r
-               HAL_ETH_MspInit( heth );\r
-       }\r
-\r
-       /* Enable SYSCFG Clock */\r
-       __HAL_RCC_SYSCFG_CLK_ENABLE();\r
-\r
-       /* Select MII or RMII Mode*/\r
-       SYSCFG->PMC &= ~(SYSCFG_PMC_MII_RMII_SEL);\r
-       SYSCFG->PMC |= (uint32_t)heth->Init.MediaInterface;\r
-\r
-       /* Ethernet Software reset */\r
-       /* Set the SWR bit: resets all MAC subsystem internal registers and logic */\r
-       /* After reset all the registers holds their respective reset values */\r
-       /* Also enable EDFE: Enhanced descriptor format enable. */\r
-//     heth->Instance->DMABMR |= ETH_DMABMR_SR | ETH_DMABMR_EDE;\r
-       heth->Instance->DMABMR |= ETH_DMABMR_SR;\r
-\r
-       /* Wait for software reset */\r
-       while ((heth->Instance->DMABMR & ETH_DMABMR_SR) != (uint32_t)RESET)\r
-       {\r
-       }\r
-\r
-       /*-------------------------------- MAC Initialization ----------------------*/\r
-       /* Get the ETHERNET MACMIIAR value */\r
-       tmpreg = heth->Instance->MACMIIAR;\r
-       /* Clear CSR Clock Range CR[2:0] bits */\r
-       tmpreg &= ETH_MACMIIAR_CR_MASK;\r
-\r
-       /* Get hclk frequency value (168,000,000) */\r
-       hclk = HAL_RCC_GetHCLKFreq();\r
-\r
-       /* Set CR bits depending on hclk value */\r
-       if( ( hclk >= 20000000 ) && ( hclk < 35000000 ) )\r
-       {\r
-               /* CSR Clock Range between 20-35 MHz */\r
-               tmpreg |= (uint32_t) ETH_MACMIIAR_CR_Div16;\r
-       }\r
-       else if( ( hclk >= 35000000 ) && ( hclk < 60000000 ) )\r
-       {\r
-       /* CSR Clock Range between 35-60 MHz */\r
-       tmpreg |= ( uint32_t ) ETH_MACMIIAR_CR_Div26;\r
-       }\r
-       else if((hclk >= 60000000 ) && ( hclk < 100000000 ) )\r
-       {\r
-               /* CSR Clock Range between 60-100 MHz */\r
-               tmpreg |= (uint32_t)ETH_MACMIIAR_CR_Div42;\r
-       }\r
-       else if((hclk >= 100000000 ) && ( hclk < 150000000))\r
-       {\r
-               /* CSR Clock Range between 100-150 MHz */\r
-               tmpreg |= (uint32_t)ETH_MACMIIAR_CR_Div62;\r
-       }\r
-       else /* ((hclk >= 150000000 ) && ( hclk <= 168000000)) */\r
-       {\r
-               /* CSR Clock Range between 150-168 MHz */\r
-               tmpreg |= (uint32_t)ETH_MACMIIAR_CR_Div102;\r
-       }\r
-\r
-       /* Write to ETHERNET MAC MIIAR: Configure the ETHERNET CSR Clock Range */\r
-       heth->Instance->MACMIIAR = (uint32_t)tmpreg;\r
-\r
-       /* Initialise the MACB and set all PHY properties */\r
-       vMACBProbePhy();\r
-\r
-       /* Config MAC and DMA */\r
-       ETH_MACDMAConfig(heth, err);\r
-\r
-       /* Set ETH HAL State to Ready */\r
-       heth->State= HAL_ETH_STATE_READY;\r
-\r
-       /* Return function status */\r
-       return HAL_OK;\r
-}\r
-\r
-/**\r
-  * @brief  De-Initializes the ETH peripheral.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @retval HAL status\r
-  */\r
-HAL_StatusTypeDef HAL_ETH_DeInit(ETH_HandleTypeDef *heth)\r
-{\r
-       /* Set the ETH peripheral state to BUSY */\r
-       heth->State = HAL_ETH_STATE_BUSY;\r
-\r
-       /* De-Init the low level hardware : GPIO, CLOCK, NVIC. */\r
-       HAL_ETH_MspDeInit( heth );\r
-\r
-       /* Set ETH HAL state to Disabled */\r
-       heth->State= HAL_ETH_STATE_RESET;\r
-\r
-       /* Release Lock */\r
-       __HAL_UNLOCK( heth );\r
-\r
-       /* Return function status */\r
-       return HAL_OK;\r
-}\r
-\r
-/**\r
-  * @brief  Initializes the DMA Tx descriptors in chain mode.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @param  DMATxDescTab: Pointer to the first Tx desc list\r
-  * @param  TxBuff: Pointer to the first TxBuffer list\r
-  * @param  TxBuffCount: Number of the used Tx desc in the list\r
-  * @retval HAL status\r
-  */\r
-HAL_StatusTypeDef HAL_ETH_DMATxDescListInit(ETH_HandleTypeDef *heth, ETH_DMADescTypeDef *pxDMATable, uint8_t *ucDataBuffer, uint32_t ulBufferCount)\r
-{\r
-       uint32_t i = 0;\r
-       ETH_DMADescTypeDef *pxDMADescriptor;\r
-\r
-       /* Process Locked */\r
-       __HAL_LOCK( heth );\r
-\r
-       /* Set the ETH peripheral state to BUSY */\r
-       heth->State = HAL_ETH_STATE_BUSY;\r
-\r
-       /* Set the TxDesc pointer with the first one of the pxDMATable list */\r
-       heth->TxDesc = pxDMATable;\r
-\r
-       /* Fill each DMA descriptor with the right values */\r
-       for( i=0; i < ulBufferCount; i++ )\r
-       {\r
-               /* Get the pointer on the ith member of the descriptor list */\r
-               pxDMADescriptor = pxDMATable + i;\r
-\r
-               /* Set Second Address Chained bit */\r
-               pxDMADescriptor->Status = ETH_DMATXDESC_TCH;\r
-\r
-               pxDMADescriptor->ControlBufferSize = 0;\r
-\r
-               /* Set Buffer1 address pointer */\r
-               if( ucDataBuffer != NULL )\r
-               {\r
-                       pxDMADescriptor->Buffer1Addr = ( uint32_t )( &ucDataBuffer[ i * ETH_TX_BUF_SIZE ] );\r
-               }\r
-               else\r
-               {\r
-                       /* Buffer space is not provided because it uses zero-copy transmissions. */\r
-                       pxDMADescriptor->Buffer1Addr = ( uint32_t )0u;\r
-               }\r
-\r
-               if (heth->Init.ChecksumMode == ETH_CHECKSUM_BY_HARDWARE)\r
-               {\r
-                       /* Set the DMA Tx descriptors checksum insertion for TCP, UDP, and ICMP */\r
-                       pxDMADescriptor->Status |= ETH_DMATXDESC_CHECKSUMTCPUDPICMPFULL;\r
-               }\r
-\r
-               /* Initialize the next descriptor with the Next Descriptor Polling Enable */\r
-               if(i < ( ulBufferCount - 1 ) )\r
-               {\r
-                       /* Set next descriptor address register with next descriptor base address */\r
-                       pxDMADescriptor->Buffer2NextDescAddr = ( uint32_t ) ( pxDMATable + i + 1 );\r
-               }\r
-               else\r
-               {\r
-                       /* For last descriptor, set next descriptor address register equal to the first descriptor base address */\r
-                       pxDMADescriptor->Buffer2NextDescAddr = ( uint32_t ) pxDMATable;\r
-               }\r
-       }\r
-\r
-       /* Set Transmit Descriptor List Address Register */\r
-       heth->Instance->DMATDLAR = ( uint32_t ) pxDMATable;\r
-\r
-       /* Set ETH HAL State to Ready */\r
-       heth->State= HAL_ETH_STATE_READY;\r
-\r
-       /* Process Unlocked */\r
-       __HAL_UNLOCK( heth );\r
-\r
-       /* Return function status */\r
-       return HAL_OK;\r
-}\r
-\r
-/**\r
-  * @brief  Initializes the DMA Rx descriptors in chain mode.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @param  DMARxDescTab: Pointer to the first Rx desc list\r
-  * @param  RxBuff: Pointer to the first RxBuffer list\r
-  * @param  RxBuffCount: Number of the used Rx desc in the list\r
-  * @retval HAL status\r
-  */\r
-HAL_StatusTypeDef HAL_ETH_DMARxDescListInit(ETH_HandleTypeDef *heth, ETH_DMADescTypeDef *pxDMATable, uint8_t *ucDataBuffer, uint32_t ulBufferCount)\r
-{\r
-       uint32_t i = 0;\r
-       ETH_DMADescTypeDef *pxDMADescriptor;\r
-\r
-       /* Process Locked */\r
-       __HAL_LOCK( heth );\r
-\r
-       /* Set the ETH peripheral state to BUSY */\r
-       heth->State = HAL_ETH_STATE_BUSY;\r
-\r
-       /* Set the RxDesc pointer with the first one of the pxDMATable list */\r
-       heth->RxDesc = pxDMATable;\r
-\r
-       /* Fill each DMA descriptor with the right values */\r
-       for(i=0; i < ulBufferCount; i++)\r
-       {\r
-               /* Get the pointer on the ith member of the descriptor list */\r
-               pxDMADescriptor = pxDMATable+i;\r
-\r
-               /* Set Own bit of the Rx descriptor Status */\r
-               pxDMADescriptor->Status = ETH_DMARXDESC_OWN;\r
-\r
-               /* Set Buffer1 size and Second Address Chained bit */\r
-               pxDMADescriptor->ControlBufferSize = ETH_DMARXDESC_RCH | ETH_RX_BUF_SIZE;\r
-\r
-               /* Set Buffer1 address pointer */\r
-               if( ucDataBuffer != NULL )\r
-               {\r
-                       pxDMADescriptor->Buffer1Addr = ( uint32_t )( &ucDataBuffer[ i * ETH_RX_BUF_SIZE ] );\r
-               }\r
-               else\r
-               {\r
-                       /* Buffer space is not provided because it uses zero-copy reception. */\r
-                       pxDMADescriptor->Buffer1Addr = ( uint32_t )0u;\r
-               }\r
-\r
-               if( heth->Init.RxMode == ETH_RXINTERRUPT_MODE )\r
-               {\r
-                       /* Enable Ethernet DMA Rx Descriptor interrupt */\r
-                       pxDMADescriptor->ControlBufferSize &= ~ETH_DMARXDESC_DIC;\r
-               }\r
-\r
-               /* Initialize the next descriptor with the Next Descriptor Polling Enable */\r
-               if(i < (ulBufferCount-1))\r
-               {\r
-                       /* Set next descriptor address register with next descriptor base address */\r
-                       pxDMADescriptor->Buffer2NextDescAddr = (uint32_t)(pxDMATable+i+1);\r
-               }\r
-               else\r
-               {\r
-                       /* For last descriptor, set next descriptor address register equal to the first descriptor base address */\r
-                       pxDMADescriptor->Buffer2NextDescAddr = ( uint32_t ) pxDMATable;\r
-               }\r
-       }\r
-\r
-       /* Set Receive Descriptor List Address Register */\r
-       heth->Instance->DMARDLAR = ( uint32_t ) pxDMATable;\r
-\r
-       /* Set ETH HAL State to Ready */\r
-       heth->State= HAL_ETH_STATE_READY;\r
-\r
-       /* Process Unlocked */\r
-       __HAL_UNLOCK( heth );\r
-\r
-       /* Return function status */\r
-       return HAL_OK;\r
-}\r
-\r
-/**\r
-  * @brief  Initializes the ETH MSP.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @retval None\r
-  */\r
-__weak void HAL_ETH_MspInit(ETH_HandleTypeDef *heth)\r
-{\r
-  /* NOTE : This function Should not be modified, when the callback is needed,\r
-  the HAL_ETH_MspInit could be implemented in the user file\r
-  */\r
-}\r
-\r
-/**\r
-  * @brief  DeInitializes ETH MSP.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @retval None\r
-  */\r
-__weak void HAL_ETH_MspDeInit(ETH_HandleTypeDef *heth)\r
-{\r
-  /* NOTE : This function Should not be modified, when the callback is needed,\r
-  the HAL_ETH_MspDeInit could be implemented in the user file\r
-  */\r
-}\r
-\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Exported_Functions_Group2 IO operation functions\r
-  *  @brief   Data transfers functions\r
-  *\r
-  @verbatim\r
-  ==============================================================================\r
-                          ##### IO operation functions #####\r
-  ==============================================================================\r
-  [..]  This section provides functions allowing to:\r
-        (+) Transmit a frame\r
-            HAL_ETH_TransmitFrame();\r
-        (+) Receive a frame\r
-            HAL_ETH_GetReceivedFrame();\r
-            HAL_ETH_GetReceivedFrame_IT();\r
-        (+) Read from an External PHY register\r
-            HAL_ETH_ReadPHYRegister();\r
-        (+) Write to an External PHY register\r
-            HAL_ETH_WritePHYRegister();\r
-\r
-  @endverbatim\r
-\r
-  * @{\r
-  */\r
-\r
-/**\r
-  * @brief  Sends an Ethernet frame.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @param  FrameLength: Amount of data to be sent\r
-  * @retval HAL status\r
-  */\r
-HAL_StatusTypeDef HAL_ETH_TransmitFrame(ETH_HandleTypeDef *heth, uint32_t FrameLength)\r
-{\r
-       uint32_t bufcount = 0, size = 0, i = 0;\r
-       __IO ETH_DMADescTypeDef *pxDmaTxDesc = heth->TxDesc;\r
-       /* Process Locked */\r
-       __HAL_LOCK( heth );\r
-\r
-       /* Set the ETH peripheral state to BUSY */\r
-       heth->State = HAL_ETH_STATE_BUSY;\r
-\r
-       if( FrameLength == 0 )\r
-       {\r
-               /* Set ETH HAL state to READY */\r
-               heth->State = HAL_ETH_STATE_READY;\r
-\r
-               /* Process Unlocked */\r
-               __HAL_UNLOCK( heth );\r
-\r
-               return  HAL_ERROR;\r
-       }\r
-\r
-       /* Check if the descriptor is owned by the ETHERNET DMA (when set) or CPU (when reset) */\r
-       if( ( pxDmaTxDesc->Status & ETH_DMATXDESC_OWN ) != ( uint32_t ) RESET )\r
-       {\r
-               /* OWN bit set */\r
-               heth->State = HAL_ETH_STATE_BUSY_TX;\r
-\r
-               /* Process Unlocked */\r
-               __HAL_UNLOCK( heth );\r
-\r
-               return HAL_ERROR;\r
-       }\r
-\r
-       /* Get the number of needed Tx buffers for the current frame, rounding up. */\r
-       bufcount = ( FrameLength + ETH_TX_BUF_SIZE - 1 ) / ETH_TX_BUF_SIZE;\r
-\r
-       if (bufcount == 1)\r
-       {\r
-               /* Set LAST and FIRST segment */\r
-               pxDmaTxDesc->Status |= ETH_DMATXDESC_FS | ETH_DMATXDESC_LS;\r
-               /* Set frame size */\r
-               pxDmaTxDesc->ControlBufferSize = ( FrameLength & ETH_DMATXDESC_TBS1 );\r
-               /* Set Own bit of the Tx descriptor Status: gives the buffer back to ETHERNET DMA */\r
-               pxDmaTxDesc->Status |= ETH_DMATXDESC_OWN;\r
-               /* Point to next descriptor */\r
-               heth->TxDesc = ( ETH_DMADescTypeDef * ) ( heth->TxDesc->Buffer2NextDescAddr );\r
-       }\r
-       else\r
-       {\r
-               for( i = 0; i < bufcount; i++ )\r
-               {\r
-                       /* Clear FIRST and LAST segment bits */\r
-               uint32_t ulStatus = heth->TxDesc->Status & ~( ETH_DMATXDESC_FS | ETH_DMATXDESC_LS );\r
-\r
-                       if( i == 0 )\r
-                       {\r
-                               /* Setting the first segment bit */\r
-                               heth->TxDesc->Status = ulStatus | ETH_DMATXDESC_FS;\r
-                       }\r
-\r
-                       /* Program size */\r
-                       if (i < (bufcount-1))\r
-                       {\r
-                               heth->TxDesc->ControlBufferSize = (ETH_TX_BUF_SIZE & ETH_DMATXDESC_TBS1);\r
-                       }\r
-                       else\r
-                       {\r
-                               /* Setting the last segment bit */\r
-                               heth->TxDesc->Status = ulStatus | ETH_DMATXDESC_LS;\r
-                               size = FrameLength - (bufcount-1)*ETH_TX_BUF_SIZE;\r
-                               heth->TxDesc->ControlBufferSize = (size & ETH_DMATXDESC_TBS1);\r
-                       }\r
-\r
-                       /* Set Own bit of the Tx descriptor Status: gives the buffer back to ETHERNET DMA */\r
-                       heth->TxDesc->Status |= ETH_DMATXDESC_OWN;\r
-                       /* point to next descriptor */\r
-                       heth->TxDesc = (ETH_DMADescTypeDef *)( heth->TxDesc->Buffer2NextDescAddr );\r
-               }\r
-       }\r
-\r
-       __DSB();\r
-\r
-       /* When Tx Buffer unavailable flag is set: clear it and resume transmission */\r
-       if( ( heth->Instance->DMASR & ETH_DMASR_TBUS ) != ( uint32_t )RESET )\r
-       {\r
-               heth->Instance->DMACHTDR = ( uint32_t )pxDmaTxDesc;\r
-\r
-               /* Clear TBUS ETHERNET DMA flag */\r
-               heth->Instance->DMASR = ETH_DMASR_TBUS;\r
-               /* Resume DMA transmission*/\r
-               heth->Instance->DMATPDR = 0;\r
-       }\r
-\r
-       /* Set ETH HAL State to Ready */\r
-       heth->State = HAL_ETH_STATE_READY;\r
-\r
-       /* Process Unlocked */\r
-       __HAL_UNLOCK( heth );\r
-\r
-       /* Return function status */\r
-       return HAL_OK;\r
-}\r
-\r
-/**\r
-  * @brief  Checks for received frames.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @retval HAL status\r
-  */\r
-HAL_StatusTypeDef HAL_ETH_GetReceivedFrame_IT( ETH_HandleTypeDef *heth )\r
-{\r
-       return HAL_ETH_GetReceivedFrame( heth );\r
-}\r
-\r
-HAL_StatusTypeDef HAL_ETH_GetReceivedFrame( ETH_HandleTypeDef *heth )\r
-{\r
-uint32_t ulCounter = 0;\r
-ETH_DMADescTypeDef *pxDescriptor = heth->RxDesc;\r
-HAL_StatusTypeDef xResult = HAL_ERROR;\r
-\r
-       /* Process Locked */\r
-       __HAL_LOCK( heth );\r
-\r
-       /* Check the ETH state to BUSY */\r
-       heth->State = HAL_ETH_STATE_BUSY;\r
-\r
-       /* Scan descriptors owned by CPU */\r
-       while( ( ( pxDescriptor->Status & ETH_DMARXDESC_OWN ) == 0ul ) && ( ulCounter < ETH_RXBUFNB ) )\r
-       {\r
-       uint32_t ulStatus = pxDescriptor->Status;\r
-\r
-               /* Just for security. */\r
-               ulCounter++;\r
-\r
-               if( ( ulStatus & ( ETH_DMARXDESC_FS | ETH_DMARXDESC_LS ) ) == ( uint32_t )ETH_DMARXDESC_FS )\r
-               {\r
-                       /* First segment in frame, but not the last. */\r
-                       heth->RxFrameInfos.FSRxDesc = pxDescriptor;\r
-                       heth->RxFrameInfos.LSRxDesc = ( ETH_DMADescTypeDef *)NULL;\r
-                       heth->RxFrameInfos.SegCount = 1;\r
-                       /* Point to next descriptor. */\r
-                       pxDescriptor = (ETH_DMADescTypeDef*) (pxDescriptor->Buffer2NextDescAddr);\r
-                       heth->RxDesc = pxDescriptor;\r
-               }\r
-               else if( ( ulStatus & ( ETH_DMARXDESC_LS | ETH_DMARXDESC_FS ) ) == 0ul )\r
-               {\r
-                       /* This is an intermediate segment, not first, not last. */\r
-                       /* Increment segment count. */\r
-                       heth->RxFrameInfos.SegCount++;\r
-                       /* Move to the next descriptor. */\r
-                       pxDescriptor = ( ETH_DMADescTypeDef * ) ( pxDescriptor->Buffer2NextDescAddr );\r
-                       heth->RxDesc = pxDescriptor;\r
-               }\r
-               /* Must be a last segment */\r
-               else\r
-               {\r
-                       /* This is the last segment. */\r
-                       /* Check if last segment is first segment: one segment contains the frame */\r
-                       if( heth->RxFrameInfos.SegCount == 0 )\r
-                       {\r
-                               /* Remember the first segment. */\r
-                               heth->RxFrameInfos.FSRxDesc = pxDescriptor;\r
-                       }\r
-\r
-                       /* Increment segment count */\r
-                       heth->RxFrameInfos.SegCount++;\r
-\r
-                       /* Remember the last segment. */\r
-                       heth->RxFrameInfos.LSRxDesc = pxDescriptor;\r
-\r
-                       /* Get the Frame Length of the received packet: substruct 4 bytes of the CRC */\r
-                       heth->RxFrameInfos.length =\r
-                               ( ( ulStatus & ETH_DMARXDESC_FL ) >> ETH_DMARXDESC_FRAMELENGTHSHIFT ) - 4;\r
-\r
-                       /* Get the address of the buffer start address */\r
-                       heth->RxFrameInfos.buffer = heth->RxFrameInfos.FSRxDesc->Buffer1Addr;\r
-\r
-                       /* Point to next descriptor */\r
-                       heth->RxDesc = ( ETH_DMADescTypeDef * ) pxDescriptor->Buffer2NextDescAddr;\r
-\r
-                       /* Return OK status: a packet was received. */\r
-                       xResult = HAL_OK;\r
-                       break;\r
-               }\r
-       }\r
-\r
-       /* Set ETH HAL State to Ready */\r
-       heth->State = HAL_ETH_STATE_READY;\r
-\r
-       /* Process Unlocked */\r
-       __HAL_UNLOCK( heth );\r
-\r
-       /* Return function status */\r
-       return xResult;\r
-}\r
-\r
-#if( STM32_ETHERNET_STATS != 0 )\r
-\r
-       volatile int rx_count, tx_count, int_count;\r
-       /**\r
-         * @brief  This function handles ETH interrupt request.\r
-         * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-         *         the configuration information for ETHERNET module\r
-         * @retval HAL status\r
-         */\r
-       volatile int int_counts[32];\r
-       volatile int tx_status[8];\r
-       volatile unsigned sr_history[32];\r
-       volatile int sr_head;\r
-       #define STM32_STAT_INC( x )             do { ( x )++; } while( 0 )\r
-\r
-#else\r
-       #define STM32_STAT_INC( x )             do { } while( 0 )\r
-#endif /* STM32_ETHERNET_STATS */\r
-\r
-#define ETH_DMA_ALL_INTS \\r
-       ( ETH_DMA_IT_TST | ETH_DMA_IT_PMT | ETH_DMA_IT_MMC | ETH_DMA_IT_NIS | ETH_DMA_IT_AIS | ETH_DMA_IT_ER | \\r
-       ETH_DMA_IT_FBE | ETH_DMA_IT_ET | ETH_DMA_IT_RWT | ETH_DMA_IT_RPS | ETH_DMA_IT_RBU | ETH_DMA_IT_R | \\r
-       ETH_DMA_IT_TU | ETH_DMA_IT_RO | ETH_DMA_IT_TJT | ETH_DMA_IT_TPS | ETH_DMA_IT_T )\r
-\r
-//#define ETH_DMA_ALL_INTS             ETH_DMA_IT_RBU | ETH_DMA_FLAG_T | ETH_DMA_FLAG_AIS\r
-\r
-#define INT_MASK               ( ( uint32_t ) ~ ( ETH_DMA_IT_TBU ) )\r
-void HAL_ETH_IRQHandler(ETH_HandleTypeDef *heth)\r
-{\r
-       uint32_t dmasr;\r
-\r
-       STM32_STAT_INC( int_count );\r
-\r
-       dmasr = heth->Instance->DMASR & ETH_DMA_ALL_INTS;\r
-       heth->Instance->DMASR = dmasr;\r
-\r
-#if( STM32_ETHERNET_STATS != 0 )\r
-       if( sr_head < ARRAY_SIZE( sr_history ) )\r
-       {\r
-               sr_history[ sr_head++ ] = dmasr;\r
-       }\r
-\r
-       {\r
-               int i;\r
-               for (i = 0; i < 32; i++) {\r
-                       if (dmasr & (1u << i)) {\r
-                               int_counts[i]++;\r
-                       }\r
-               }\r
-               tx_status[ ( dmasr >> 20 ) & 0x07 ]++;\r
-       }\r
-#endif\r
-\r
-       /* Frame received */\r
-       if( ( dmasr & ( ETH_DMA_FLAG_R | ETH_DMA_IT_RBU ) ) != 0 )\r
-       {\r
-               /* Receive complete callback */\r
-               HAL_ETH_RxCpltCallback( heth );\r
-               STM32_STAT_INC( rx_count );\r
-       }\r
-       /* Frame transmitted */\r
-       if( ( dmasr & ( ETH_DMA_FLAG_T ) ) != 0 )\r
-       {\r
-               /* Transfer complete callback */\r
-               HAL_ETH_TxCpltCallback( heth );\r
-               STM32_STAT_INC( tx_count );\r
-       }\r
-\r
-       /* ETH DMA Error */\r
-       if( ( dmasr & ( ETH_DMA_FLAG_AIS ) ) != 0 )\r
-       {\r
-               /* Ethernet Error callback */\r
-               HAL_ETH_ErrorCallback( heth );\r
-       }\r
-}\r
-\r
-/**\r
-  * @brief  Tx Transfer completed callbacks.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @retval None\r
-  */\r
-__weak void HAL_ETH_TxCpltCallback(ETH_HandleTypeDef *heth)\r
-{\r
-  /* NOTE : This function Should not be modified, when the callback is needed,\r
-  the HAL_ETH_TxCpltCallback could be implemented in the user file\r
-  */\r
-}\r
-\r
-/**\r
-  * @brief  Rx Transfer completed callbacks.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @retval None\r
-  */\r
-__weak void HAL_ETH_RxCpltCallback(ETH_HandleTypeDef *heth)\r
-{\r
-  /* NOTE : This function Should not be modified, when the callback is needed,\r
-  the HAL_ETH_TxCpltCallback could be implemented in the user file\r
-  */\r
-}\r
-\r
-/**\r
-  * @brief  Ethernet transfer error callbacks\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @retval None\r
-  */\r
-__weak void HAL_ETH_ErrorCallback(ETH_HandleTypeDef *heth)\r
-{\r
-  /* NOTE : This function Should not be modified, when the callback is needed,\r
-  the HAL_ETH_TxCpltCallback could be implemented in the user file\r
-  */\r
-}\r
-\r
-/**\r
-  * @brief  Reads a PHY register\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @param PHYReg: PHY register address, is the index of one of the 32 PHY register.\r
-  *                This parameter can be one of the following values:\r
-  *                   PHY_BCR: Transceiver Basic Control Register,\r
-  *                   PHY_BSR: Transceiver Basic Status Register.\r
-  *                   More PHY register could be read depending on the used PHY\r
-  * @param RegValue: PHY register value\r
-  * @retval HAL status\r
-  */\r
-HAL_StatusTypeDef HAL_ETH_ReadPHYRegister(ETH_HandleTypeDef *heth, uint16_t PHYReg, uint32_t *RegValue)\r
-{\r
-uint32_t tmpreg = 0;\r
-uint32_t tickstart = 0;\r
-HAL_StatusTypeDef xResult;\r
-\r
-       /* Check parameters */\r
-       assert_param(IS_ETH_PHY_ADDRESS(heth->Init.PhyAddress));\r
-\r
-       /* Check the ETH peripheral state */\r
-       if( heth->State == HAL_ETH_STATE_BUSY_RD )\r
-       {\r
-               xResult = HAL_BUSY;\r
-       }\r
-       else\r
-       {\r
-               __HAL_LOCK( heth );\r
-\r
-               /* Set ETH HAL State to BUSY_RD */\r
-               heth->State = HAL_ETH_STATE_BUSY_RD;\r
-\r
-               /* Get the ETHERNET MACMIIAR value */\r
-               tmpreg = heth->Instance->MACMIIAR;\r
-\r
-               /* Keep only the CSR Clock Range CR[2:0] bits value */\r
-               tmpreg &= ~ETH_MACMIIAR_CR_MASK;\r
-\r
-               /* Prepare the MII address register value */\r
-               tmpreg |= ( ( ( uint32_t )heth->Init.PhyAddress << 11) & ETH_MACMIIAR_PA );    /* Set the PHY device address   */\r
-               tmpreg |= ( ( ( uint32_t )PHYReg << 6 ) & ETH_MACMIIAR_MR );                   /* Set the PHY register address */\r
-               tmpreg &= ~ETH_MACMIIAR_MW;                                           /* Set the read mode            */\r
-               tmpreg |= ETH_MACMIIAR_MB;                                            /* Set the MII Busy bit         */\r
-\r
-               /* Write the result value into the MII Address register */\r
-               heth->Instance->MACMIIAR = tmpreg;\r
-\r
-               /* Get tick */\r
-               tickstart = HAL_GetTick();\r
-\r
-               /* Check for the Busy flag */\r
-               while( 1 )\r
-               {\r
-                       tmpreg = heth->Instance->MACMIIAR;\r
-\r
-                       if( ( tmpreg & ETH_MACMIIAR_MB ) == 0ul )\r
-                       {\r
-                               /* Get MACMIIDR value */\r
-                               *RegValue = ( uint32_t ) heth->Instance->MACMIIDR;\r
-                               xResult = HAL_OK;\r
-                               break;\r
-                       }\r
-                       /* Check for the Timeout */\r
-                       if( ( HAL_GetTick( ) - tickstart ) > PHY_READ_TO )\r
-                       {\r
-                               xResult = HAL_TIMEOUT;\r
-                               break;\r
-                       }\r
-\r
-               }\r
-\r
-               /* Set ETH HAL State to READY */\r
-               heth->State = HAL_ETH_STATE_READY;\r
-\r
-               /* Process Unlocked */\r
-               __HAL_UNLOCK( heth );\r
-       }\r
-\r
-       if( xResult != HAL_OK )\r
-       {\r
-               lUDPLoggingPrintf( "ReadPHY: %d\n", xResult );\r
-       }\r
-       /* Return function status */\r
-       return xResult;\r
-}\r
-\r
-/**\r
-  * @brief  Writes to a PHY register.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @param  PHYReg: PHY register address, is the index of one of the 32 PHY register.\r
-  *          This parameter can be one of the following values:\r
-  *             PHY_BCR: Transceiver Control Register.\r
-  *             More PHY register could be written depending on the used PHY\r
-  * @param  RegValue: the value to write\r
-  * @retval HAL status\r
-  */\r
-HAL_StatusTypeDef HAL_ETH_WritePHYRegister(ETH_HandleTypeDef *heth, uint16_t PHYReg, uint32_t RegValue)\r
-{\r
-uint32_t tmpreg = 0;\r
-uint32_t tickstart = 0;\r
-HAL_StatusTypeDef xResult;\r
-\r
-       /* Check parameters */\r
-       assert_param( IS_ETH_PHY_ADDRESS( heth->Init.PhyAddress ) );\r
-\r
-       /* Check the ETH peripheral state */\r
-       if( heth->State == HAL_ETH_STATE_BUSY_WR )\r
-       {\r
-               xResult = HAL_BUSY;\r
-       }\r
-       else\r
-       {\r
-               __HAL_LOCK( heth );\r
-\r
-               /* Set ETH HAL State to BUSY_WR */\r
-               heth->State = HAL_ETH_STATE_BUSY_WR;\r
-\r
-               /* Get the ETHERNET MACMIIAR value */\r
-               tmpreg = heth->Instance->MACMIIAR;\r
-\r
-               /* Keep only the CSR Clock Range CR[2:0] bits value */\r
-               tmpreg &= ~ETH_MACMIIAR_CR_MASK;\r
-\r
-               /* Prepare the MII register address value */\r
-               tmpreg |= ( ( ( uint32_t ) heth->Init.PhyAddress << 11 ) & ETH_MACMIIAR_PA ); /* Set the PHY device address */\r
-               tmpreg |= ( ( ( uint32_t ) PHYReg << 6 ) & ETH_MACMIIAR_MR );                 /* Set the PHY register address */\r
-               tmpreg |= ETH_MACMIIAR_MW;                                          /* Set the write mode */\r
-               tmpreg |= ETH_MACMIIAR_MB;                                          /* Set the MII Busy bit */\r
-\r
-               /* Give the value to the MII data register */\r
-               heth->Instance->MACMIIDR = ( uint16_t ) RegValue;\r
-\r
-               /* Write the result value into the MII Address register */\r
-               heth->Instance->MACMIIAR = tmpreg;\r
-\r
-               /* Get tick */\r
-               tickstart = HAL_GetTick();\r
-\r
-               /* Check for the Busy flag */\r
-               while( 1 )\r
-               {\r
-                       tmpreg = heth->Instance->MACMIIAR;\r
-\r
-                       if( ( tmpreg & ETH_MACMIIAR_MB ) == 0ul )\r
-                       {\r
-                               xResult = HAL_OK;\r
-                               break;\r
-                       }\r
-                       /* Check for the Timeout */\r
-                       if( ( HAL_GetTick( ) - tickstart ) > PHY_WRITE_TO )\r
-                       {\r
-                               xResult = HAL_TIMEOUT;\r
-                               break;\r
-                       }\r
-               }\r
-\r
-               /* Set ETH HAL State to READY */\r
-               heth->State = HAL_ETH_STATE_READY;\r
-               /* Process Unlocked */\r
-               __HAL_UNLOCK( heth );\r
-       }\r
-\r
-       if( xResult != HAL_OK )\r
-       {\r
-               lUDPLoggingPrintf( "WritePHY: %d\n", xResult );\r
-       }\r
-       /* Return function status */\r
-       return xResult;\r
-}\r
-\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Exported_Functions_Group3 Peripheral Control functions\r
- *  @brief    Peripheral Control functions\r
- *\r
-@verbatim\r
- ===============================================================================\r
-                  ##### Peripheral Control functions #####\r
- ===============================================================================\r
-    [..]  This section provides functions allowing to:\r
-      (+) Enable MAC and DMA transmission and reception.\r
-          HAL_ETH_Start();\r
-      (+) Disable MAC and DMA transmission and reception.\r
-          HAL_ETH_Stop();\r
-      (+) Set the MAC configuration in runtime mode\r
-          HAL_ETH_ConfigMAC();\r
-      (+) Set the DMA configuration in runtime mode\r
-          HAL_ETH_ConfigDMA();\r
-\r
-@endverbatim\r
-  * @{\r
-  */\r
-\r
- /**\r
-  * @brief  Enables Ethernet MAC and DMA reception/transmission\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @retval HAL status\r
-  */\r
-HAL_StatusTypeDef HAL_ETH_Start( ETH_HandleTypeDef *heth )\r
-{\r
-       /* Process Locked */\r
-       __HAL_LOCK( heth );\r
-\r
-       /* Set the ETH peripheral state to BUSY */\r
-       heth->State = HAL_ETH_STATE_BUSY;\r
-\r
-       /* Enable transmit state machine of the MAC for transmission on the MII */\r
-       ETH_MACTransmissionEnable( heth );\r
-\r
-       /* Enable receive state machine of the MAC for reception from the MII */\r
-       ETH_MACReceptionEnable( heth );\r
-\r
-       /* Flush Transmit FIFO */\r
-       ETH_FlushTransmitFIFO( heth );\r
-\r
-       /* Start DMA transmission */\r
-       ETH_DMATransmissionEnable( heth );\r
-\r
-       /* Start DMA reception */\r
-       ETH_DMAReceptionEnable( heth );\r
-\r
-       /* Set the ETH state to READY*/\r
-       heth->State= HAL_ETH_STATE_READY;\r
-\r
-       /* Process Unlocked */\r
-       __HAL_UNLOCK( heth );\r
-\r
-       /* Return function status */\r
-       return HAL_OK;\r
-}\r
-\r
-/**\r
-  * @brief  Stop Ethernet MAC and DMA reception/transmission\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @retval HAL status\r
-  */\r
-HAL_StatusTypeDef HAL_ETH_Stop(ETH_HandleTypeDef *heth)\r
-{\r
-  /* Process Locked */\r
-  __HAL_LOCK( heth );\r
-\r
-  /* Set the ETH peripheral state to BUSY */\r
-  heth->State = HAL_ETH_STATE_BUSY;\r
-\r
-  /* Stop DMA transmission */\r
-  ETH_DMATransmissionDisable( heth );\r
-\r
-  /* Stop DMA reception */\r
-  ETH_DMAReceptionDisable( heth );\r
-\r
-  /* Disable receive state machine of the MAC for reception from the MII */\r
-  ETH_MACReceptionDisable( heth );\r
-\r
-  /* Flush Transmit FIFO */\r
-  ETH_FlushTransmitFIFO( heth );\r
-\r
-  /* Disable transmit state machine of the MAC for transmission on the MII */\r
-  ETH_MACTransmissionDisable( heth );\r
-\r
-  /* Set the ETH state*/\r
-  heth->State = HAL_ETH_STATE_READY;\r
-\r
-  /* Process Unlocked */\r
-  __HAL_UNLOCK( heth );\r
-\r
-  /* Return function status */\r
-  return HAL_OK;\r
-}\r
-\r
-static void prvWriteMACFCR( ETH_HandleTypeDef *heth, uint32_t ulValue)\r
-{\r
-       /* Enable the MAC transmission */\r
-       heth->Instance->MACFCR = ulValue;\r
-\r
-       /* Wait until the write operation will be taken into account:\r
-       at least four TX_CLK/RX_CLK clock cycles.\r
-       Read it back, wait a ms and */\r
-       ( void ) heth->Instance->MACFCR;\r
-\r
-       HAL_Delay( ETH_REG_WRITE_DELAY );\r
-\r
-       heth->Instance->MACFCR = ulValue;\r
-}\r
-\r
-static void prvWriteDMAOMR( ETH_HandleTypeDef *heth, uint32_t ulValue)\r
-{\r
-       /* Enable the MAC transmission */\r
-       heth->Instance->DMAOMR = ulValue;\r
-\r
-       /* Wait until the write operation will be taken into account:\r
-       at least four TX_CLK/RX_CLK clock cycles.\r
-       Read it back, wait a ms and */\r
-       ( void ) heth->Instance->DMAOMR;\r
-\r
-       HAL_Delay( ETH_REG_WRITE_DELAY );\r
-\r
-       heth->Instance->DMAOMR = ulValue;\r
-}\r
-\r
-static void prvWriteMACCR( ETH_HandleTypeDef *heth, uint32_t ulValue)\r
-{\r
-       /* Enable the MAC transmission */\r
-       heth->Instance->MACCR = ulValue;\r
-\r
-       /* Wait until the write operation will be taken into account:\r
-       at least four TX_CLK/RX_CLK clock cycles.\r
-       Read it back, wait a ms and */\r
-       ( void ) heth->Instance->MACCR;\r
-\r
-       HAL_Delay( ETH_REG_WRITE_DELAY );\r
-\r
-       heth->Instance->MACCR = ulValue;\r
-}\r
-\r
-/**\r
-  * @brief  Set ETH MAC Configuration.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @param  macconf: MAC Configuration structure\r
-  * @retval HAL status\r
-  */\r
-HAL_StatusTypeDef HAL_ETH_ConfigMAC(ETH_HandleTypeDef *heth, ETH_MACInitTypeDef *macconf)\r
-{\r
-       uint32_t tmpreg = 0;\r
-\r
-       /* Process Locked */\r
-       __HAL_LOCK( heth );\r
-\r
-       /* Set the ETH peripheral state to BUSY */\r
-       heth->State= HAL_ETH_STATE_BUSY;\r
-\r
-       assert_param(IS_ETH_SPEED(heth->Init.Speed));\r
-       assert_param(IS_ETH_DUPLEX_MODE(heth->Init.DuplexMode));\r
-\r
-       if (macconf != NULL)\r
-       {\r
-               /* Check the parameters */\r
-               assert_param(IS_ETH_WATCHDOG(macconf->Watchdog));\r
-               assert_param(IS_ETH_JABBER(macconf->Jabber));\r
-               assert_param(IS_ETH_INTER_FRAME_GAP(macconf->InterFrameGap));\r
-               assert_param(IS_ETH_CARRIER_SENSE(macconf->CarrierSense));\r
-               assert_param(IS_ETH_RECEIVE_OWN(macconf->ReceiveOwn));\r
-               assert_param(IS_ETH_LOOPBACK_MODE(macconf->LoopbackMode));\r
-               assert_param(IS_ETH_CHECKSUM_OFFLOAD(macconf->ChecksumOffload));\r
-               assert_param(IS_ETH_RETRY_TRANSMISSION(macconf->RetryTransmission));\r
-               assert_param(IS_ETH_AUTOMATIC_PADCRC_STRIP(macconf->AutomaticPadCRCStrip));\r
-               assert_param(IS_ETH_BACKOFF_LIMIT(macconf->BackOffLimit));\r
-               assert_param(IS_ETH_DEFERRAL_CHECK(macconf->DeferralCheck));\r
-               assert_param(IS_ETH_RECEIVE_ALL(macconf->ReceiveAll));\r
-               assert_param(IS_ETH_SOURCE_ADDR_FILTER(macconf->SourceAddrFilter));\r
-               assert_param(IS_ETH_CONTROL_FRAMES(macconf->PassControlFrames));\r
-               assert_param(IS_ETH_BROADCAST_FRAMES_RECEPTION(macconf->BroadcastFramesReception));\r
-               assert_param(IS_ETH_DESTINATION_ADDR_FILTER(macconf->DestinationAddrFilter));\r
-               assert_param(IS_ETH_PROMISCUOUS_MODE(macconf->PromiscuousMode));\r
-               assert_param(IS_ETH_MULTICAST_FRAMES_FILTER(macconf->MulticastFramesFilter));\r
-               assert_param(IS_ETH_UNICAST_FRAMES_FILTER(macconf->UnicastFramesFilter));\r
-               assert_param(IS_ETH_PAUSE_TIME(macconf->PauseTime));\r
-               assert_param(IS_ETH_ZEROQUANTA_PAUSE(macconf->ZeroQuantaPause));\r
-               assert_param(IS_ETH_PAUSE_LOW_THRESHOLD(macconf->PauseLowThreshold));\r
-               assert_param(IS_ETH_UNICAST_PAUSE_FRAME_DETECT(macconf->UnicastPauseFrameDetect));\r
-               assert_param(IS_ETH_RECEIVE_FLOWCONTROL(macconf->ReceiveFlowControl));\r
-               assert_param(IS_ETH_TRANSMIT_FLOWCONTROL(macconf->TransmitFlowControl));\r
-               assert_param(IS_ETH_VLAN_TAG_COMPARISON(macconf->VLANTagComparison));\r
-               assert_param(IS_ETH_VLAN_TAG_IDENTIFIER(macconf->VLANTagIdentifier));\r
-\r
-               /*------------------------ ETHERNET MACCR Configuration --------------------*/\r
-               /* Get the ETHERNET MACCR value */\r
-               tmpreg = heth->Instance->MACCR;\r
-               /* Clear WD, PCE, PS, TE and RE bits */\r
-               tmpreg &= ETH_MACCR_CLEAR_MASK;\r
-\r
-               tmpreg |= (uint32_t)(\r
-                       macconf->Watchdog |\r
-                       macconf->Jabber |\r
-                       macconf->InterFrameGap |\r
-                       macconf->CarrierSense |\r
-                       heth->Init.Speed |\r
-                       macconf->ReceiveOwn |\r
-                       macconf->LoopbackMode |\r
-                       heth->Init.DuplexMode |\r
-                       macconf->ChecksumOffload |\r
-                       macconf->RetryTransmission |\r
-                       macconf->AutomaticPadCRCStrip |\r
-                       macconf->BackOffLimit |\r
-                       macconf->DeferralCheck);\r
-\r
-               /* Write to ETHERNET MACCR */\r
-               prvWriteMACCR( heth, tmpreg );\r
-\r
-               /*----------------------- ETHERNET MACFFR Configuration --------------------*/\r
-               /* Write to ETHERNET MACFFR */\r
-               heth->Instance->MACFFR = (uint32_t)(\r
-                       macconf->ReceiveAll |\r
-                       macconf->SourceAddrFilter |\r
-                       macconf->PassControlFrames |\r
-                       macconf->BroadcastFramesReception |\r
-                       macconf->DestinationAddrFilter |\r
-                       macconf->PromiscuousMode |\r
-                       macconf->MulticastFramesFilter |\r
-                       macconf->UnicastFramesFilter);\r
-\r
-               /* Wait until the write operation will be taken into account :\r
-               at least four TX_CLK/RX_CLK clock cycles */\r
-               tmpreg = heth->Instance->MACFFR;\r
-               HAL_Delay(ETH_REG_WRITE_DELAY);\r
-               heth->Instance->MACFFR = tmpreg;\r
-\r
-               /*--------------- ETHERNET MACHTHR and MACHTLR Configuration ---------------*/\r
-               /* Write to ETHERNET MACHTHR */\r
-               heth->Instance->MACHTHR = (uint32_t)macconf->HashTableHigh;\r
-\r
-               /* Write to ETHERNET MACHTLR */\r
-               heth->Instance->MACHTLR = (uint32_t)macconf->HashTableLow;\r
-               /*----------------------- ETHERNET MACFCR Configuration --------------------*/\r
-\r
-               /* Get the ETHERNET MACFCR value */\r
-               tmpreg = heth->Instance->MACFCR;\r
-               /* Clear xx bits */\r
-               tmpreg &= ETH_MACFCR_CLEAR_MASK;\r
-\r
-               tmpreg |= (uint32_t)((\r
-                       macconf->PauseTime << 16) |\r
-                       macconf->ZeroQuantaPause |\r
-                       macconf->PauseLowThreshold |\r
-                       macconf->UnicastPauseFrameDetect |\r
-                       macconf->ReceiveFlowControl |\r
-                       macconf->TransmitFlowControl);\r
-\r
-               /* Write to ETHERNET MACFCR */\r
-               prvWriteMACFCR( heth, tmpreg );\r
-\r
-               /*----------------------- ETHERNET MACVLANTR Configuration -----------------*/\r
-               heth->Instance->MACVLANTR = (uint32_t)(macconf->VLANTagComparison |\r
-               macconf->VLANTagIdentifier);\r
-\r
-               /* Wait until the write operation will be taken into account :\r
-               at least four TX_CLK/RX_CLK clock cycles */\r
-               tmpreg = heth->Instance->MACVLANTR;\r
-               HAL_Delay(ETH_REG_WRITE_DELAY);\r
-               heth->Instance->MACVLANTR = tmpreg;\r
-       }\r
-       else /* macconf == NULL : here we just configure Speed and Duplex mode */\r
-       {\r
-               /*------------------------ ETHERNET MACCR Configuration --------------------*/\r
-               /* Get the ETHERNET MACCR value */\r
-               tmpreg = heth->Instance->MACCR;\r
-\r
-               /* Clear FES and DM bits */\r
-               tmpreg &= ~((uint32_t)0x00004800);\r
-\r
-               tmpreg |= (uint32_t)(heth->Init.Speed | heth->Init.DuplexMode);\r
-\r
-               /* Write to ETHERNET MACCR */\r
-               prvWriteMACCR( heth, tmpreg );\r
-       }\r
-\r
-       /* Set the ETH state to Ready */\r
-       heth->State= HAL_ETH_STATE_READY;\r
-\r
-       /* Process Unlocked */\r
-       __HAL_UNLOCK( heth );\r
-\r
-       /* Return function status */\r
-       return HAL_OK;\r
-}\r
-\r
-/**\r
-  * @brief  Sets ETH DMA Configuration.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @param  dmaconf: DMA Configuration structure\r
-  * @retval HAL status\r
-  */\r
-HAL_StatusTypeDef HAL_ETH_ConfigDMA(ETH_HandleTypeDef *heth, ETH_DMAInitTypeDef *dmaconf)\r
-{\r
-       uint32_t tmpreg = 0;\r
-\r
-       /* Process Locked */\r
-       __HAL_LOCK( heth );\r
-\r
-       /* Set the ETH peripheral state to BUSY */\r
-       heth->State= HAL_ETH_STATE_BUSY;\r
-\r
-       /* Check parameters */\r
-       assert_param(IS_ETH_DROP_TCPIP_CHECKSUM_FRAME(dmaconf->DropTCPIPChecksumErrorFrame));\r
-       assert_param(IS_ETH_RECEIVE_STORE_FORWARD(dmaconf->ReceiveStoreForward));\r
-       assert_param(IS_ETH_FLUSH_RECEIVE_FRAME(dmaconf->FlushReceivedFrame));\r
-       assert_param(IS_ETH_TRANSMIT_STORE_FORWARD(dmaconf->TransmitStoreForward));\r
-       assert_param(IS_ETH_TRANSMIT_THRESHOLD_CONTROL(dmaconf->TransmitThresholdControl));\r
-       assert_param(IS_ETH_FORWARD_ERROR_FRAMES(dmaconf->ForwardErrorFrames));\r
-       assert_param(IS_ETH_FORWARD_UNDERSIZED_GOOD_FRAMES(dmaconf->ForwardUndersizedGoodFrames));\r
-       assert_param(IS_ETH_RECEIVE_THRESHOLD_CONTROL(dmaconf->ReceiveThresholdControl));\r
-       assert_param(IS_ETH_SECOND_FRAME_OPERATE(dmaconf->SecondFrameOperate));\r
-       assert_param(IS_ETH_ADDRESS_ALIGNED_BEATS(dmaconf->AddressAlignedBeats));\r
-       assert_param(IS_ETH_FIXED_BURST(dmaconf->FixedBurst));\r
-       assert_param(IS_ETH_RXDMA_BURST_LENGTH(dmaconf->RxDMABurstLength));\r
-       assert_param(IS_ETH_TXDMA_BURST_LENGTH(dmaconf->TxDMABurstLength));\r
-       assert_param(IS_ETH_ENHANCED_DESCRIPTOR_FORMAT(dmaconf->EnhancedDescriptorFormat));\r
-       assert_param(IS_ETH_DMA_DESC_SKIP_LENGTH(dmaconf->DescriptorSkipLength));\r
-       assert_param(IS_ETH_DMA_ARBITRATION_ROUNDROBIN_RXTX(dmaconf->DMAArbitration));\r
-\r
-       /*----------------------- ETHERNET DMAOMR Configuration --------------------*/\r
-       /* Get the ETHERNET DMAOMR value */\r
-       tmpreg = heth->Instance->DMAOMR;\r
-       /* Clear xx bits */\r
-       tmpreg &= ETH_DMAOMR_CLEAR_MASK;\r
-\r
-       tmpreg |= (uint32_t)(\r
-               dmaconf->DropTCPIPChecksumErrorFrame |\r
-               dmaconf->ReceiveStoreForward |\r
-               dmaconf->FlushReceivedFrame |\r
-               dmaconf->TransmitStoreForward |\r
-               dmaconf->TransmitThresholdControl |\r
-               dmaconf->ForwardErrorFrames |\r
-               dmaconf->ForwardUndersizedGoodFrames |\r
-               dmaconf->ReceiveThresholdControl |\r
-               dmaconf->SecondFrameOperate);\r
-\r
-       /* Write to ETHERNET DMAOMR */\r
-       prvWriteDMAOMR( heth, tmpreg );\r
-\r
-       /*----------------------- ETHERNET DMABMR Configuration --------------------*/\r
-       heth->Instance->DMABMR = (uint32_t)(dmaconf->AddressAlignedBeats |\r
-       dmaconf->FixedBurst |\r
-       dmaconf->RxDMABurstLength | /* !! if 4xPBL is selected for Tx or Rx it is applied for the other */\r
-       dmaconf->TxDMABurstLength |\r
-       dmaconf->EnhancedDescriptorFormat |\r
-       (dmaconf->DescriptorSkipLength << 2) |\r
-       dmaconf->DMAArbitration |\r
-       ETH_DMABMR_USP); /* Enable use of separate PBL for Rx and Tx */\r
-\r
-       /* Wait until the write operation will be taken into account:\r
-       at least four TX_CLK/RX_CLK clock cycles */\r
-       tmpreg = heth->Instance->DMABMR;\r
-       HAL_Delay(ETH_REG_WRITE_DELAY);\r
-       heth->Instance->DMABMR = tmpreg;\r
-\r
-       /* Set the ETH state to Ready */\r
-       heth->State= HAL_ETH_STATE_READY;\r
-\r
-       /* Process Unlocked */\r
-       __HAL_UNLOCK( heth );\r
-\r
-       /* Return function status */\r
-       return HAL_OK;\r
-}\r
-\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Exported_Functions_Group4 Peripheral State functions\r
-  *  @brief   Peripheral State functions\r
-  *\r
-  @verbatim\r
-  ===============================================================================\r
-                         ##### Peripheral State functions #####\r
-  ===============================================================================\r
-  [..]\r
-  This subsection permits to get in run-time the status of the peripheral\r
-  and the data flow.\r
-       (+) Get the ETH handle state:\r
-           HAL_ETH_GetState();\r
-\r
-\r
-  @endverbatim\r
-  * @{\r
-  */\r
-\r
-/**\r
-  * @brief  Return the ETH HAL state\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @retval HAL state\r
-  */\r
-HAL_ETH_StateTypeDef HAL_ETH_GetState(ETH_HandleTypeDef *heth)\r
-{\r
-  /* Return ETH state */\r
-  return heth->State;\r
-}\r
-\r
-/**\r
-  * @}\r
-  */\r
-\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @addtogroup ETH_Private_Functions\r
-  * @{\r
-  */\r
-\r
-/**\r
-  * @brief  Configures Ethernet MAC and DMA with default parameters.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @param  err: Ethernet Init error\r
-  * @retval HAL status\r
-  */\r
-static void ETH_MACDMAConfig(ETH_HandleTypeDef *heth, uint32_t err)\r
-{\r
-  ETH_MACInitTypeDef macinit;\r
-  ETH_DMAInitTypeDef dmainit;\r
-  uint32_t tmpreg = 0;\r
-\r
-  if (err != ETH_SUCCESS) /* Auto-negotiation failed */\r
-  {\r
-    /* Set Ethernet duplex mode to Full-duplex */\r
-    heth->Init.DuplexMode = ETH_MODE_FULLDUPLEX;\r
-\r
-    /* Set Ethernet speed to 100M */\r
-    heth->Init.Speed = ETH_SPEED_100M;\r
-  }\r
-\r
-  /* Ethernet MAC default initialization **************************************/\r
-  macinit.Watchdog = ETH_WATCHDOG_ENABLE;\r
-  macinit.Jabber = ETH_JABBER_ENABLE;\r
-  macinit.InterFrameGap = ETH_INTERFRAMEGAP_96BIT;\r
-  macinit.CarrierSense = ETH_CARRIERSENCE_ENABLE;\r
-  macinit.ReceiveOwn = ETH_RECEIVEOWN_ENABLE;\r
-  macinit.LoopbackMode = ETH_LOOPBACKMODE_DISABLE;\r
-  if(heth->Init.ChecksumMode == ETH_CHECKSUM_BY_HARDWARE)\r
-  {\r
-    macinit.ChecksumOffload = ETH_CHECKSUMOFFLAOD_ENABLE;\r
-  }\r
-  else\r
-  {\r
-    macinit.ChecksumOffload = ETH_CHECKSUMOFFLAOD_DISABLE;\r
-  }\r
-  macinit.RetryTransmission = ETH_RETRYTRANSMISSION_DISABLE;\r
-  macinit.AutomaticPadCRCStrip = ETH_AUTOMATICPADCRCSTRIP_DISABLE;\r
-  macinit.BackOffLimit = ETH_BACKOFFLIMIT_10;\r
-  macinit.DeferralCheck = ETH_DEFFERRALCHECK_DISABLE;\r
-  macinit.ReceiveAll = ETH_RECEIVEAll_DISABLE;\r
-  macinit.SourceAddrFilter = ETH_SOURCEADDRFILTER_DISABLE;\r
-  macinit.PassControlFrames = ETH_PASSCONTROLFRAMES_BLOCKALL;\r
-  macinit.BroadcastFramesReception = ETH_BROADCASTFRAMESRECEPTION_ENABLE;\r
-  macinit.DestinationAddrFilter = ETH_DESTINATIONADDRFILTER_NORMAL;\r
-  macinit.PromiscuousMode = ETH_PROMISCUOUS_MODE_DISABLE;\r
-  macinit.MulticastFramesFilter = ETH_MULTICASTFRAMESFILTER_PERFECT;\r
-  macinit.UnicastFramesFilter = ETH_UNICASTFRAMESFILTER_PERFECT;\r
-  macinit.HashTableHigh = 0x0;\r
-  macinit.HashTableLow = 0x0;\r
-  macinit.PauseTime = 0x0;\r
-  macinit.ZeroQuantaPause = ETH_ZEROQUANTAPAUSE_DISABLE;\r
-  macinit.PauseLowThreshold = ETH_PAUSELOWTHRESHOLD_MINUS4;\r
-  macinit.UnicastPauseFrameDetect = ETH_UNICASTPAUSEFRAMEDETECT_DISABLE;\r
-  macinit.ReceiveFlowControl = ETH_RECEIVEFLOWCONTROL_DISABLE;\r
-  macinit.TransmitFlowControl = ETH_TRANSMITFLOWCONTROL_DISABLE;\r
-  macinit.VLANTagComparison = ETH_VLANTAGCOMPARISON_16BIT;\r
-  macinit.VLANTagIdentifier = 0x0;\r
-\r
-  /*------------------------ ETHERNET MACCR Configuration --------------------*/\r
-  /* Get the ETHERNET MACCR value */\r
-  tmpreg = heth->Instance->MACCR;\r
-  /* Clear WD, PCE, PS, TE and RE bits */\r
-  tmpreg &= ETH_MACCR_CLEAR_MASK;\r
-  /* Set the WD bit according to ETH Watchdog value */\r
-  /* Set the JD: bit according to ETH Jabber value */\r
-  /* Set the IFG bit according to ETH InterFrameGap value */\r
-  /* Set the DCRS bit according to ETH CarrierSense value */\r
-  /* Set the FES bit according to ETH Speed value */\r
-  /* Set the DO bit according to ETH ReceiveOwn value */\r
-  /* Set the LM bit according to ETH LoopbackMode value */\r
-  /* Set the DM bit according to ETH Mode value */\r
-  /* Set the IPCO bit according to ETH ChecksumOffload value */\r
-  /* Set the DR bit according to ETH RetryTransmission value */\r
-  /* Set the ACS bit according to ETH AutomaticPadCRCStrip value */\r
-  /* Set the BL bit according to ETH BackOffLimit value */\r
-  /* Set the DC bit according to ETH DeferralCheck value */\r
-  tmpreg |= (uint32_t)(macinit.Watchdog |\r
-                       macinit.Jabber |\r
-                       macinit.InterFrameGap |\r
-                       macinit.CarrierSense |\r
-                       heth->Init.Speed |\r
-                       macinit.ReceiveOwn |\r
-                       macinit.LoopbackMode |\r
-                       heth->Init.DuplexMode |\r
-                       macinit.ChecksumOffload |\r
-                       macinit.RetryTransmission |\r
-                       macinit.AutomaticPadCRCStrip |\r
-                       macinit.BackOffLimit |\r
-                       macinit.DeferralCheck);\r
-\r
-  /* Write to ETHERNET MACCR */\r
-  prvWriteMACCR( heth, tmpreg );\r
-\r
-  /*----------------------- ETHERNET MACFFR Configuration --------------------*/\r
-  /* Set the RA bit according to ETH ReceiveAll value */\r
-  /* Set the SAF and SAIF bits according to ETH SourceAddrFilter value */\r
-  /* Set the PCF bit according to ETH PassControlFrames value */\r
-  /* Set the DBF bit according to ETH BroadcastFramesReception value */\r
-  /* Set the DAIF bit according to ETH DestinationAddrFilter value */\r
-  /* Set the PR bit according to ETH PromiscuousMode value */\r
-  /* Set the PM, HMC and HPF bits according to ETH MulticastFramesFilter value */\r
-  /* Set the HUC and HPF bits according to ETH UnicastFramesFilter value */\r
-  /* Write to ETHERNET MACFFR */\r
-  heth->Instance->MACFFR = (uint32_t)(macinit.ReceiveAll |\r
-                                        macinit.SourceAddrFilter |\r
-                                        macinit.PassControlFrames |\r
-                                        macinit.BroadcastFramesReception |\r
-                                        macinit.DestinationAddrFilter |\r
-                                        macinit.PromiscuousMode |\r
-                                        macinit.MulticastFramesFilter |\r
-                                        macinit.UnicastFramesFilter);\r
-\r
-   /* Wait until the write operation will be taken into account:\r
-      at least four TX_CLK/RX_CLK clock cycles */\r
-   tmpreg = heth->Instance->MACFFR;\r
-   HAL_Delay(ETH_REG_WRITE_DELAY);\r
-   heth->Instance->MACFFR = tmpreg;\r
-\r
-   /*--------------- ETHERNET MACHTHR and MACHTLR Configuration --------------*/\r
-   /* Write to ETHERNET MACHTHR */\r
-   heth->Instance->MACHTHR = (uint32_t)macinit.HashTableHigh;\r
-\r
-   /* Write to ETHERNET MACHTLR */\r
-   heth->Instance->MACHTLR = (uint32_t)macinit.HashTableLow;\r
-   /*----------------------- ETHERNET MACFCR Configuration -------------------*/\r
-\r
-   /* Get the ETHERNET MACFCR value */\r
-   tmpreg = heth->Instance->MACFCR;\r
-   /* Clear xx bits */\r
-   tmpreg &= ETH_MACFCR_CLEAR_MASK;\r
-\r
-   /* Set the PT bit according to ETH PauseTime value */\r
-   /* Set the DZPQ bit according to ETH ZeroQuantaPause value */\r
-   /* Set the PLT bit according to ETH PauseLowThreshold value */\r
-   /* Set the UP bit according to ETH UnicastPauseFrameDetect value */\r
-   /* Set the RFE bit according to ETH ReceiveFlowControl value */\r
-   /* Set the TFE bit according to ETH TransmitFlowControl value */\r
-   tmpreg |= (uint32_t)((macinit.PauseTime << 16) |\r
-                        macinit.ZeroQuantaPause |\r
-                        macinit.PauseLowThreshold |\r
-                        macinit.UnicastPauseFrameDetect |\r
-                        macinit.ReceiveFlowControl |\r
-                        macinit.TransmitFlowControl);\r
-\r
-   /* Write to ETHERNET MACFCR */\r
-   prvWriteMACFCR( heth, tmpreg );\r
-\r
-   /*----------------------- ETHERNET MACVLANTR Configuration ----------------*/\r
-   /* Set the ETV bit according to ETH VLANTagComparison value */\r
-   /* Set the VL bit according to ETH VLANTagIdentifier value */\r
-   heth->Instance->MACVLANTR = (uint32_t)(macinit.VLANTagComparison |\r
-                                            macinit.VLANTagIdentifier);\r
-\r
-    /* Wait until the write operation will be taken into account:\r
-       at least four TX_CLK/RX_CLK clock cycles */\r
-    tmpreg = heth->Instance->MACVLANTR;\r
-    HAL_Delay(ETH_REG_WRITE_DELAY);\r
-    heth->Instance->MACVLANTR = tmpreg;\r
-\r
-    /* Ethernet DMA default initialization ************************************/\r
-    dmainit.DropTCPIPChecksumErrorFrame = ETH_DROPTCPIPCHECKSUMERRORFRAME_ENABLE;\r
-    dmainit.ReceiveStoreForward = ETH_RECEIVESTOREFORWARD_ENABLE;\r
-    dmainit.FlushReceivedFrame = ETH_FLUSHRECEIVEDFRAME_ENABLE;\r
-    dmainit.TransmitStoreForward = ETH_TRANSMITSTOREFORWARD_ENABLE;\r
-    dmainit.TransmitThresholdControl = ETH_TRANSMITTHRESHOLDCONTROL_64BYTES;\r
-    dmainit.ForwardErrorFrames = ETH_FORWARDERRORFRAMES_DISABLE;\r
-    dmainit.ForwardUndersizedGoodFrames = ETH_FORWARDUNDERSIZEDGOODFRAMES_DISABLE;\r
-    dmainit.ReceiveThresholdControl = ETH_RECEIVEDTHRESHOLDCONTROL_64BYTES;\r
-    dmainit.SecondFrameOperate = ETH_SECONDFRAMEOPERARTE_ENABLE;\r
-    dmainit.AddressAlignedBeats = ETH_ADDRESSALIGNEDBEATS_ENABLE;\r
-    dmainit.FixedBurst = ETH_FIXEDBURST_ENABLE;\r
-    dmainit.RxDMABurstLength = ETH_RXDMABURSTLENGTH_32BEAT;\r
-    dmainit.TxDMABurstLength = ETH_TXDMABURSTLENGTH_32BEAT;\r
-    dmainit.EnhancedDescriptorFormat = ETH_DMAENHANCEDDESCRIPTOR_ENABLE;\r
-    dmainit.DescriptorSkipLength = 0x0;\r
-    dmainit.DMAArbitration = ETH_DMAARBITRATION_ROUNDROBIN_RXTX_1_1;\r
-\r
-    /* Get the ETHERNET DMAOMR value */\r
-    tmpreg = heth->Instance->DMAOMR;\r
-    /* Clear xx bits */\r
-    tmpreg &= ETH_DMAOMR_CLEAR_MASK;\r
-\r
-    /* Set the DT bit according to ETH DropTCPIPChecksumErrorFrame value */\r
-    /* Set the RSF bit according to ETH ReceiveStoreForward value */\r
-    /* Set the DFF bit according to ETH FlushReceivedFrame value */\r
-    /* Set the TSF bit according to ETH TransmitStoreForward value */\r
-    /* Set the TTC bit according to ETH TransmitThresholdControl value */\r
-    /* Set the FEF bit according to ETH ForwardErrorFrames value */\r
-    /* Set the FUF bit according to ETH ForwardUndersizedGoodFrames value */\r
-    /* Set the RTC bit according to ETH ReceiveThresholdControl value */\r
-    /* Set the OSF bit according to ETH SecondFrameOperate value */\r
-    tmpreg |= (uint32_t)(dmainit.DropTCPIPChecksumErrorFrame |\r
-                         dmainit.ReceiveStoreForward |\r
-                         dmainit.FlushReceivedFrame |\r
-                         dmainit.TransmitStoreForward |\r
-                         dmainit.TransmitThresholdControl |\r
-                         dmainit.ForwardErrorFrames |\r
-                         dmainit.ForwardUndersizedGoodFrames |\r
-                         dmainit.ReceiveThresholdControl |\r
-                         dmainit.SecondFrameOperate);\r
-\r
-    /* Write to ETHERNET DMAOMR */\r
-    prvWriteDMAOMR( heth, tmpreg );\r
-\r
-    /*----------------------- ETHERNET DMABMR Configuration ------------------*/\r
-    /* Set the AAL bit according to ETH AddressAlignedBeats value */\r
-    /* Set the FB bit according to ETH FixedBurst value */\r
-    /* Set the RPBL and 4*PBL bits according to ETH RxDMABurstLength value */\r
-    /* Set the PBL and 4*PBL bits according to ETH TxDMABurstLength value */\r
-    /* Set the Enhanced DMA descriptors bit according to ETH EnhancedDescriptorFormat value*/\r
-    /* Set the DSL bit according to ETH DesciptorSkipLength value */\r
-    /* Set the PR and DA bits according to ETH DMAArbitration value */\r
-    heth->Instance->DMABMR = (uint32_t)(dmainit.AddressAlignedBeats |\r
-                                          dmainit.FixedBurst |\r
-                                          dmainit.RxDMABurstLength |    /* !! if 4xPBL is selected for Tx or Rx it is applied for the other */\r
-                                          dmainit.TxDMABurstLength |\r
-                                          dmainit.EnhancedDescriptorFormat |\r
-                                          (dmainit.DescriptorSkipLength << 2) |\r
-                                          dmainit.DMAArbitration |\r
-                                          ETH_DMABMR_USP); /* Enable use of separate PBL for Rx and Tx */\r
-\r
-     /* Wait until the write operation will be taken into account:\r
-        at least four TX_CLK/RX_CLK clock cycles */\r
-     tmpreg = heth->Instance->DMABMR;\r
-     HAL_Delay(ETH_REG_WRITE_DELAY);\r
-     heth->Instance->DMABMR = tmpreg;\r
-\r
-     if(heth->Init.RxMode == ETH_RXINTERRUPT_MODE)\r
-     {\r
-       /* Enable the Ethernet Rx Interrupt */\r
-       __HAL_ETH_DMA_ENABLE_IT(( heth ), ETH_DMA_IT_NIS | ETH_DMA_IT_R);\r
-     }\r
-\r
-     /* Initialize MAC address in ethernet MAC */\r
-     ETH_MACAddressConfig(heth, ETH_MAC_ADDRESS0, heth->Init.MACAddr);\r
-}\r
-\r
-/**\r
-  * @brief  Configures the selected MAC address.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @param  MacAddr: The MAC address to configure\r
-  *          This parameter can be one of the following values:\r
-  *             @arg ETH_MAC_Address0: MAC Address0\r
-  *             @arg ETH_MAC_Address1: MAC Address1\r
-  *             @arg ETH_MAC_Address2: MAC Address2\r
-  *             @arg ETH_MAC_Address3: MAC Address3\r
-  * @param  Addr: Pointer to MAC address buffer data (6 bytes)\r
-  * @retval HAL status\r
-  */\r
-static void ETH_MACAddressConfig(ETH_HandleTypeDef *heth, uint32_t MacAddr, uint8_t *Addr)\r
-{\r
-       uint32_t tmpreg;\r
-\r
-       /* Check the parameters */\r
-       assert_param( IS_ETH_MAC_ADDRESS0123( MacAddr ) );\r
-\r
-       /* Calculate the selected MAC address high register */\r
-       tmpreg = 0x80000000ul | ( ( uint32_t )Addr[ 5 ] << 8) | (uint32_t)Addr[ 4 ];\r
-       /* Load the selected MAC address high register */\r
-       ( * ( __IO uint32_t * ) ( ( uint32_t ) ( ETH_MAC_ADDR_HBASE + MacAddr ) ) ) = tmpreg;\r
-       /* Calculate the selected MAC address low register */\r
-       tmpreg = ( ( uint32_t )Addr[ 3 ] << 24 ) | ( ( uint32_t )Addr[ 2 ] << 16 ) | ( ( uint32_t )Addr[ 1 ] << 8 ) | Addr[ 0 ];\r
-\r
-       /* Load the selected MAC address low register */\r
-       ( * ( __IO uint32_t * ) ( ( uint32_t ) ( ETH_MAC_ADDR_LBASE + MacAddr ) ) ) = tmpreg;\r
-}\r
-\r
-/**\r
-  * @brief  Enables the MAC transmission.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @retval None\r
-  */\r
-static void ETH_MACTransmissionEnable(ETH_HandleTypeDef *heth)\r
-{\r
-       uint32_t tmpreg = heth->Instance->MACCR | ETH_MACCR_TE;\r
-\r
-       prvWriteMACCR( heth, tmpreg );\r
-}\r
-\r
-/**\r
-  * @brief  Disables the MAC transmission.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @retval None\r
-  */\r
-static void ETH_MACTransmissionDisable(ETH_HandleTypeDef *heth)\r
-{\r
-       uint32_t tmpreg = heth->Instance->MACCR & ~( ETH_MACCR_TE );\r
-\r
-       prvWriteMACCR( heth, tmpreg );\r
-}\r
-\r
-/**\r
-  * @brief  Enables the MAC reception.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @retval None\r
-  */\r
-static void ETH_MACReceptionEnable(ETH_HandleTypeDef *heth)\r
-{\r
-       __IO uint32_t tmpreg = heth->Instance->MACCR | ETH_MACCR_RE;\r
-\r
-       prvWriteMACCR( heth, tmpreg );\r
-}\r
-\r
-/**\r
-  * @brief  Disables the MAC reception.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @retval None\r
-  */\r
-static void ETH_MACReceptionDisable(ETH_HandleTypeDef *heth)\r
-{\r
-       __IO uint32_t tmpreg = heth->Instance->MACCR & ~( ETH_MACCR_RE );\r
-\r
-       prvWriteMACCR( heth, tmpreg );\r
-}\r
-\r
-/**\r
-  * @brief  Enables the DMA transmission.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @retval None\r
-  */\r
-static void ETH_DMATransmissionEnable(ETH_HandleTypeDef *heth)\r
-{\r
-       /* Enable the DMA transmission */\r
-       __IO uint32_t tmpreg = heth->Instance->DMAOMR | ETH_DMAOMR_ST;\r
-\r
-       prvWriteDMAOMR( heth, tmpreg );\r
-}\r
-\r
-/**\r
-  * @brief  Disables the DMA transmission.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @retval None\r
-  */\r
-static void ETH_DMATransmissionDisable(ETH_HandleTypeDef *heth)\r
-{\r
-       /* Disable the DMA transmission */\r
-       __IO uint32_t tmpreg = heth->Instance->DMAOMR & ~( ETH_DMAOMR_ST );\r
-\r
-       prvWriteDMAOMR( heth, tmpreg );\r
-}\r
-\r
-/**\r
-  * @brief  Enables the DMA reception.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @retval None\r
-  */\r
-static void ETH_DMAReceptionEnable(ETH_HandleTypeDef *heth)\r
-{\r
-       /* Enable the DMA reception */\r
-       __IO uint32_t tmpreg = heth->Instance->DMAOMR | ETH_DMAOMR_SR;\r
-\r
-       prvWriteDMAOMR( heth, tmpreg );\r
-}\r
-\r
-/**\r
-  * @brief  Disables the DMA reception.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @retval None\r
-  */\r
-static void ETH_DMAReceptionDisable(ETH_HandleTypeDef *heth)\r
-{\r
-       /* Disable the DMA reception */\r
-       __IO uint32_t tmpreg = heth->Instance->DMAOMR & ~( ETH_DMAOMR_SR );\r
-\r
-       prvWriteDMAOMR( heth, tmpreg );\r
-}\r
-\r
-/**\r
-  * @brief  Clears the ETHERNET transmit FIFO.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @retval None\r
-  */\r
-static void ETH_FlushTransmitFIFO(ETH_HandleTypeDef *heth)\r
-{\r
-       /* Set the Flush Transmit FIFO bit */\r
-       __IO uint32_t tmpreg = heth->Instance->DMAOMR | ETH_DMAOMR_FTF;\r
-\r
-       prvWriteDMAOMR( heth, tmpreg );\r
-}\r
-\r
-/**\r
-  * @}\r
-  */\r
-\r
-#endif /* STM32F7xx */\r
-#endif /* HAL_ETH_MODULE_ENABLED */\r
-/**\r
-  * @}\r
-  */\r
-\r
-/**\r
-  * @}\r
-  */\r
-\r
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r
diff --git a/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/STM32F7xx/stm32f7xx_hal_eth.h b/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/STM32F7xx/stm32f7xx_hal_eth.h
deleted file mode 100644 (file)
index 0c40193..0000000
+++ /dev/null
@@ -1,2214 +0,0 @@
-/**\r
-  ******************************************************************************\r
-  * @file    stm32f7xx_hal_eth.h\r
-  * @author  MCD Application Team\r
-  * @version V1.2.2\r
-  * @date    14-April-2017\r
-  * @brief   Header file of ETH HAL module.\r
-  ******************************************************************************\r
-  * @attention\r
-  *\r
-  * <h2><center>&copy; COPYRIGHT(c) 2017 STMicroelectronics</center></h2>\r
-  *\r
-  * Redistribution and use in source and binary forms, with or without modification,\r
-  * are permitted provided that the following conditions are met:\r
-  *   1. Redistributions of source code must retain the above copyright notice,\r
-  *      this list of conditions and the following disclaimer.\r
-  *   2. Redistributions in binary form must reproduce the above copyright notice,\r
-  *      this list of conditions and the following disclaimer in the documentation\r
-  *      and/or other materials provided with the distribution.\r
-  *   3. Neither the name of STMicroelectronics nor the names of its contributors\r
-  *      may be used to endorse or promote products derived from this software\r
-  *      without specific prior written permission.\r
-  *\r
-  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"\r
-  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
-  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r
-  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r
-  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
-  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r
-  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r
-  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r
-  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
-  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
-  *\r
-  ******************************************************************************\r
-  */ \r
-\r
-/* Define to prevent recursive inclusion -------------------------------------*/\r
-#ifndef __STM32F7xx_HAL_ETH_H\r
-#define __STM32F7xx_HAL_ETH_H\r
-\r
-#ifdef __cplusplus\r
- extern "C" {\r
-#endif\r
-\r
-/* Includes ------------------------------------------------------------------*/\r
-#include "stm32f7xx_hal_def.h"\r
-\r
-/** @addtogroup STM32F7xx_HAL_Driver\r
-  * @{\r
-  */\r
-\r
-/** @addtogroup ETH\r
-  * @{\r
-  */ \r
-  \r
-/** @addtogroup ETH_Private_Macros\r
-  * @{\r
-  */\r
-#define IS_ETH_PHY_ADDRESS(ADDRESS) ((ADDRESS) <= 0x20)\r
-#define IS_ETH_AUTONEGOTIATION(CMD) (((CMD) == ETH_AUTONEGOTIATION_ENABLE) || \\r
-                                     ((CMD) == ETH_AUTONEGOTIATION_DISABLE))\r
-#define IS_ETH_SPEED(SPEED) (((SPEED) == ETH_SPEED_10M) || \\r
-                             ((SPEED) == ETH_SPEED_100M))\r
-#define IS_ETH_DUPLEX_MODE(MODE)  (((MODE) == ETH_MODE_FULLDUPLEX) || \\r
-                                  ((MODE) == ETH_MODE_HALFDUPLEX))\r
-#define IS_ETH_RX_MODE(MODE)    (((MODE) == ETH_RXPOLLING_MODE) || \\r
-                                 ((MODE) == ETH_RXINTERRUPT_MODE))\r
-#define IS_ETH_CHECKSUM_MODE(MODE)    (((MODE) == ETH_CHECKSUM_BY_HARDWARE) || \\r
-                                      ((MODE) == ETH_CHECKSUM_BY_SOFTWARE))\r
-#define IS_ETH_MEDIA_INTERFACE(MODE)         (((MODE) == ETH_MEDIA_INTERFACE_MII) || \\r
-                                              ((MODE) == ETH_MEDIA_INTERFACE_RMII))\r
-#define IS_ETH_WATCHDOG(CMD) (((CMD) == ETH_WATCHDOG_ENABLE) || \\r
-                              ((CMD) == ETH_WATCHDOG_DISABLE))\r
-#define IS_ETH_JABBER(CMD) (((CMD) == ETH_JABBER_ENABLE) || \\r
-                            ((CMD) == ETH_JABBER_DISABLE))\r
-#define IS_ETH_INTER_FRAME_GAP(GAP) (((GAP) == ETH_INTERFRAMEGAP_96BIT) || \\r
-                                     ((GAP) == ETH_INTERFRAMEGAP_88BIT) || \\r
-                                     ((GAP) == ETH_INTERFRAMEGAP_80BIT) || \\r
-                                     ((GAP) == ETH_INTERFRAMEGAP_72BIT) || \\r
-                                     ((GAP) == ETH_INTERFRAMEGAP_64BIT) || \\r
-                                     ((GAP) == ETH_INTERFRAMEGAP_56BIT) || \\r
-                                     ((GAP) == ETH_INTERFRAMEGAP_48BIT) || \\r
-                                     ((GAP) == ETH_INTERFRAMEGAP_40BIT))\r
-#define IS_ETH_CARRIER_SENSE(CMD) (((CMD) == ETH_CARRIERSENCE_ENABLE) || \\r
-                                   ((CMD) == ETH_CARRIERSENCE_DISABLE))\r
-#define IS_ETH_RECEIVE_OWN(CMD) (((CMD) == ETH_RECEIVEOWN_ENABLE) || \\r
-                                 ((CMD) == ETH_RECEIVEOWN_DISABLE))\r
-#define IS_ETH_LOOPBACK_MODE(CMD) (((CMD) == ETH_LOOPBACKMODE_ENABLE) || \\r
-                                   ((CMD) == ETH_LOOPBACKMODE_DISABLE))\r
-#define IS_ETH_CHECKSUM_OFFLOAD(CMD) (((CMD) == ETH_CHECKSUMOFFLAOD_ENABLE) || \\r
-                                      ((CMD) == ETH_CHECKSUMOFFLAOD_DISABLE))\r
-#define IS_ETH_RETRY_TRANSMISSION(CMD) (((CMD) == ETH_RETRYTRANSMISSION_ENABLE) || \\r
-                                        ((CMD) == ETH_RETRYTRANSMISSION_DISABLE))\r
-#define IS_ETH_AUTOMATIC_PADCRC_STRIP(CMD) (((CMD) == ETH_AUTOMATICPADCRCSTRIP_ENABLE) || \\r
-                                            ((CMD) == ETH_AUTOMATICPADCRCSTRIP_DISABLE))\r
-#define IS_ETH_BACKOFF_LIMIT(LIMIT) (((LIMIT) == ETH_BACKOFFLIMIT_10) || \\r
-                                     ((LIMIT) == ETH_BACKOFFLIMIT_8) || \\r
-                                     ((LIMIT) == ETH_BACKOFFLIMIT_4) || \\r
-                                     ((LIMIT) == ETH_BACKOFFLIMIT_1))\r
-#define IS_ETH_DEFERRAL_CHECK(CMD) (((CMD) == ETH_DEFFERRALCHECK_ENABLE) || \\r
-                                    ((CMD) == ETH_DEFFERRALCHECK_DISABLE))\r
-#define IS_ETH_RECEIVE_ALL(CMD) (((CMD) == ETH_RECEIVEALL_ENABLE) || \\r
-                                 ((CMD) == ETH_RECEIVEAll_DISABLE))\r
-#define IS_ETH_SOURCE_ADDR_FILTER(CMD) (((CMD) == ETH_SOURCEADDRFILTER_NORMAL_ENABLE) || \\r
-                                        ((CMD) == ETH_SOURCEADDRFILTER_INVERSE_ENABLE) || \\r
-                                        ((CMD) == ETH_SOURCEADDRFILTER_DISABLE))\r
-#define IS_ETH_CONTROL_FRAMES(PASS) (((PASS) == ETH_PASSCONTROLFRAMES_BLOCKALL) || \\r
-                                     ((PASS) == ETH_PASSCONTROLFRAMES_FORWARDALL) || \\r
-                                     ((PASS) == ETH_PASSCONTROLFRAMES_FORWARDPASSEDADDRFILTER))\r
-#define IS_ETH_BROADCAST_FRAMES_RECEPTION(CMD) (((CMD) == ETH_BROADCASTFRAMESRECEPTION_ENABLE) || \\r
-                                                ((CMD) == ETH_BROADCASTFRAMESRECEPTION_DISABLE))\r
-#define IS_ETH_DESTINATION_ADDR_FILTER(FILTER) (((FILTER) == ETH_DESTINATIONADDRFILTER_NORMAL) || \\r
-                                                ((FILTER) == ETH_DESTINATIONADDRFILTER_INVERSE))\r
-#define IS_ETH_PROMISCUOUS_MODE(CMD) (((CMD) == ETH_PROMISCUOUS_MODE_ENABLE) || \\r
-                                      ((CMD) == ETH_PROMISCUOUS_MODE_DISABLE))\r
-#define IS_ETH_MULTICAST_FRAMES_FILTER(FILTER) (((FILTER) == ETH_MULTICASTFRAMESFILTER_PERFECTHASHTABLE) || \\r
-                                                ((FILTER) == ETH_MULTICASTFRAMESFILTER_HASHTABLE) || \\r
-                                                ((FILTER) == ETH_MULTICASTFRAMESFILTER_PERFECT) || \\r
-                                                ((FILTER) == ETH_MULTICASTFRAMESFILTER_NONE))\r
-#define IS_ETH_UNICAST_FRAMES_FILTER(FILTER) (((FILTER) == ETH_UNICASTFRAMESFILTER_PERFECTHASHTABLE) || \\r
-                                              ((FILTER) == ETH_UNICASTFRAMESFILTER_HASHTABLE) || \\r
-                                              ((FILTER) == ETH_UNICASTFRAMESFILTER_PERFECT))\r
-#define IS_ETH_PAUSE_TIME(TIME) ((TIME) <= 0xFFFF)\r
-#define IS_ETH_ZEROQUANTA_PAUSE(CMD)   (((CMD) == ETH_ZEROQUANTAPAUSE_ENABLE) || \\r
-                                        ((CMD) == ETH_ZEROQUANTAPAUSE_DISABLE))\r
-#define IS_ETH_PAUSE_LOW_THRESHOLD(THRESHOLD) (((THRESHOLD) == ETH_PAUSELOWTHRESHOLD_MINUS4) || \\r
-                                               ((THRESHOLD) == ETH_PAUSELOWTHRESHOLD_MINUS28) || \\r
-                                               ((THRESHOLD) == ETH_PAUSELOWTHRESHOLD_MINUS144) || \\r
-                                               ((THRESHOLD) == ETH_PAUSELOWTHRESHOLD_MINUS256))\r
-#define IS_ETH_UNICAST_PAUSE_FRAME_DETECT(CMD) (((CMD) == ETH_UNICASTPAUSEFRAMEDETECT_ENABLE) || \\r
-                                                ((CMD) == ETH_UNICASTPAUSEFRAMEDETECT_DISABLE))\r
-#define IS_ETH_RECEIVE_FLOWCONTROL(CMD) (((CMD) == ETH_RECEIVEFLOWCONTROL_ENABLE) || \\r
-                                         ((CMD) == ETH_RECEIVEFLOWCONTROL_DISABLE))\r
-#define IS_ETH_TRANSMIT_FLOWCONTROL(CMD) (((CMD) == ETH_TRANSMITFLOWCONTROL_ENABLE) || \\r
-                                          ((CMD) == ETH_TRANSMITFLOWCONTROL_DISABLE))\r
-#define IS_ETH_VLAN_TAG_COMPARISON(COMPARISON) (((COMPARISON) == ETH_VLANTAGCOMPARISON_12BIT) || \\r
-                                                ((COMPARISON) == ETH_VLANTAGCOMPARISON_16BIT))\r
-#define IS_ETH_VLAN_TAG_IDENTIFIER(IDENTIFIER) ((IDENTIFIER) <= 0xFFFF)\r
-#define IS_ETH_MAC_ADDRESS0123(ADDRESS) (((ADDRESS) == ETH_MAC_ADDRESS0) || \\r
-                                         ((ADDRESS) == ETH_MAC_ADDRESS1) || \\r
-                                         ((ADDRESS) == ETH_MAC_ADDRESS2) || \\r
-                                         ((ADDRESS) == ETH_MAC_ADDRESS3))\r
-#define IS_ETH_MAC_ADDRESS123(ADDRESS) (((ADDRESS) == ETH_MAC_ADDRESS1) || \\r
-                                        ((ADDRESS) == ETH_MAC_ADDRESS2) || \\r
-                                        ((ADDRESS) == ETH_MAC_ADDRESS3))\r
-#define IS_ETH_MAC_ADDRESS_FILTER(FILTER) (((FILTER) == ETH_MAC_ADDRESSFILTER_SA) || \\r
-                                           ((FILTER) == ETH_MAC_ADDRESSFILTER_DA))\r
-#define IS_ETH_MAC_ADDRESS_MASK(MASK) (((MASK) == ETH_MAC_ADDRESSMASK_BYTE6) || \\r
-                                       ((MASK) == ETH_MAC_ADDRESSMASK_BYTE5) || \\r
-                                       ((MASK) == ETH_MAC_ADDRESSMASK_BYTE4) || \\r
-                                       ((MASK) == ETH_MAC_ADDRESSMASK_BYTE3) || \\r
-                                       ((MASK) == ETH_MAC_ADDRESSMASK_BYTE2) || \\r
-                                       ((MASK) == ETH_MAC_ADDRESSMASK_BYTE1))\r
-#define IS_ETH_DROP_TCPIP_CHECKSUM_FRAME(CMD) (((CMD) == ETH_DROPTCPIPCHECKSUMERRORFRAME_ENABLE) || \\r
-                                               ((CMD) == ETH_DROPTCPIPCHECKSUMERRORFRAME_DISABLE))\r
-#define IS_ETH_RECEIVE_STORE_FORWARD(CMD) (((CMD) == ETH_RECEIVESTOREFORWARD_ENABLE) || \\r
-                                           ((CMD) == ETH_RECEIVESTOREFORWARD_DISABLE))\r
-#define IS_ETH_FLUSH_RECEIVE_FRAME(CMD) (((CMD) == ETH_FLUSHRECEIVEDFRAME_ENABLE) || \\r
-                                         ((CMD) == ETH_FLUSHRECEIVEDFRAME_DISABLE))\r
-#define IS_ETH_TRANSMIT_STORE_FORWARD(CMD) (((CMD) == ETH_TRANSMITSTOREFORWARD_ENABLE) || \\r
-                                            ((CMD) == ETH_TRANSMITSTOREFORWARD_DISABLE))\r
-#define IS_ETH_TRANSMIT_THRESHOLD_CONTROL(THRESHOLD) (((THRESHOLD) == ETH_TRANSMITTHRESHOLDCONTROL_64BYTES) || \\r
-                                                      ((THRESHOLD) == ETH_TRANSMITTHRESHOLDCONTROL_128BYTES) || \\r
-                                                      ((THRESHOLD) == ETH_TRANSMITTHRESHOLDCONTROL_192BYTES) || \\r
-                                                      ((THRESHOLD) == ETH_TRANSMITTHRESHOLDCONTROL_256BYTES) || \\r
-                                                      ((THRESHOLD) == ETH_TRANSMITTHRESHOLDCONTROL_40BYTES) || \\r
-                                                      ((THRESHOLD) == ETH_TRANSMITTHRESHOLDCONTROL_32BYTES) || \\r
-                                                      ((THRESHOLD) == ETH_TRANSMITTHRESHOLDCONTROL_24BYTES) || \\r
-                                                      ((THRESHOLD) == ETH_TRANSMITTHRESHOLDCONTROL_16BYTES))\r
-#define IS_ETH_FORWARD_ERROR_FRAMES(CMD) (((CMD) == ETH_FORWARDERRORFRAMES_ENABLE) || \\r
-                                          ((CMD) == ETH_FORWARDERRORFRAMES_DISABLE))\r
-#define IS_ETH_FORWARD_UNDERSIZED_GOOD_FRAMES(CMD) (((CMD) == ETH_FORWARDUNDERSIZEDGOODFRAMES_ENABLE) || \\r
-                                                    ((CMD) == ETH_FORWARDUNDERSIZEDGOODFRAMES_DISABLE))\r
-#define IS_ETH_RECEIVE_THRESHOLD_CONTROL(THRESHOLD) (((THRESHOLD) == ETH_RECEIVEDTHRESHOLDCONTROL_64BYTES) || \\r
-                                                     ((THRESHOLD) == ETH_RECEIVEDTHRESHOLDCONTROL_32BYTES) || \\r
-                                                     ((THRESHOLD) == ETH_RECEIVEDTHRESHOLDCONTROL_96BYTES) || \\r
-                                                     ((THRESHOLD) == ETH_RECEIVEDTHRESHOLDCONTROL_128BYTES))\r
-#define IS_ETH_SECOND_FRAME_OPERATE(CMD) (((CMD) == ETH_SECONDFRAMEOPERARTE_ENABLE) || \\r
-                                          ((CMD) == ETH_SECONDFRAMEOPERARTE_DISABLE))\r
-#define IS_ETH_ADDRESS_ALIGNED_BEATS(CMD) (((CMD) == ETH_ADDRESSALIGNEDBEATS_ENABLE) || \\r
-                                           ((CMD) == ETH_ADDRESSALIGNEDBEATS_DISABLE))\r
-#define IS_ETH_FIXED_BURST(CMD) (((CMD) == ETH_FIXEDBURST_ENABLE) || \\r
-                                 ((CMD) == ETH_FIXEDBURST_DISABLE))\r
-#define IS_ETH_RXDMA_BURST_LENGTH(LENGTH) (((LENGTH) == ETH_RXDMABURSTLENGTH_1BEAT) || \\r
-                                           ((LENGTH) == ETH_RXDMABURSTLENGTH_2BEAT) || \\r
-                                           ((LENGTH) == ETH_RXDMABURSTLENGTH_4BEAT) || \\r
-                                           ((LENGTH) == ETH_RXDMABURSTLENGTH_8BEAT) || \\r
-                                           ((LENGTH) == ETH_RXDMABURSTLENGTH_16BEAT) || \\r
-                                           ((LENGTH) == ETH_RXDMABURSTLENGTH_32BEAT) || \\r
-                                           ((LENGTH) == ETH_RXDMABURSTLENGTH_4XPBL_4BEAT) || \\r
-                                           ((LENGTH) == ETH_RXDMABURSTLENGTH_4XPBL_8BEAT) || \\r
-                                           ((LENGTH) == ETH_RXDMABURSTLENGTH_4XPBL_16BEAT) || \\r
-                                           ((LENGTH) == ETH_RXDMABURSTLENGTH_4XPBL_32BEAT) || \\r
-                                           ((LENGTH) == ETH_RXDMABURSTLENGTH_4XPBL_64BEAT) || \\r
-                                           ((LENGTH) == ETH_RXDMABURSTLENGTH_4XPBL_128BEAT))\r
-#define IS_ETH_TXDMA_BURST_LENGTH(LENGTH) (((LENGTH) == ETH_TXDMABURSTLENGTH_1BEAT) || \\r
-                                           ((LENGTH) == ETH_TXDMABURSTLENGTH_2BEAT) || \\r
-                                           ((LENGTH) == ETH_TXDMABURSTLENGTH_4BEAT) || \\r
-                                           ((LENGTH) == ETH_TXDMABURSTLENGTH_8BEAT) || \\r
-                                           ((LENGTH) == ETH_TXDMABURSTLENGTH_16BEAT) || \\r
-                                           ((LENGTH) == ETH_TXDMABURSTLENGTH_32BEAT) || \\r
-                                           ((LENGTH) == ETH_TXDMABURSTLENGTH_4XPBL_4BEAT) || \\r
-                                           ((LENGTH) == ETH_TXDMABURSTLENGTH_4XPBL_8BEAT) || \\r
-                                           ((LENGTH) == ETH_TXDMABURSTLENGTH_4XPBL_16BEAT) || \\r
-                                           ((LENGTH) == ETH_TXDMABURSTLENGTH_4XPBL_32BEAT) || \\r
-                                           ((LENGTH) == ETH_TXDMABURSTLENGTH_4XPBL_64BEAT) || \\r
-                                           ((LENGTH) == ETH_TXDMABURSTLENGTH_4XPBL_128BEAT))\r
-#define IS_ETH_DMA_DESC_SKIP_LENGTH(LENGTH) ((LENGTH) <= 0x1F)\r
-#define IS_ETH_DMA_ARBITRATION_ROUNDROBIN_RXTX(RATIO) (((RATIO) == ETH_DMAARBITRATION_ROUNDROBIN_RXTX_1_1) || \\r
-                                                       ((RATIO) == ETH_DMAARBITRATION_ROUNDROBIN_RXTX_2_1) || \\r
-                                                       ((RATIO) == ETH_DMAARBITRATION_ROUNDROBIN_RXTX_3_1) || \\r
-                                                       ((RATIO) == ETH_DMAARBITRATION_ROUNDROBIN_RXTX_4_1) || \\r
-                                                       ((RATIO) == ETH_DMAARBITRATION_RXPRIORTX))\r
-#define IS_ETH_DMATXDESC_GET_FLAG(FLAG) (((FLAG) == ETH_DMATXDESC_OWN) || \\r
-                                         ((FLAG) == ETH_DMATXDESC_IC) || \\r
-                                         ((FLAG) == ETH_DMATXDESC_LS) || \\r
-                                         ((FLAG) == ETH_DMATXDESC_FS) || \\r
-                                         ((FLAG) == ETH_DMATXDESC_DC) || \\r
-                                         ((FLAG) == ETH_DMATXDESC_DP) || \\r
-                                         ((FLAG) == ETH_DMATXDESC_TTSE) || \\r
-                                         ((FLAG) == ETH_DMATXDESC_TER) || \\r
-                                         ((FLAG) == ETH_DMATXDESC_TCH) || \\r
-                                         ((FLAG) == ETH_DMATXDESC_TTSS) || \\r
-                                         ((FLAG) == ETH_DMATXDESC_IHE) || \\r
-                                         ((FLAG) == ETH_DMATXDESC_ES) || \\r
-                                         ((FLAG) == ETH_DMATXDESC_JT) || \\r
-                                         ((FLAG) == ETH_DMATXDESC_FF) || \\r
-                                         ((FLAG) == ETH_DMATXDESC_PCE) || \\r
-                                         ((FLAG) == ETH_DMATXDESC_LCA) || \\r
-                                         ((FLAG) == ETH_DMATXDESC_NC) || \\r
-                                         ((FLAG) == ETH_DMATXDESC_LCO) || \\r
-                                         ((FLAG) == ETH_DMATXDESC_EC) || \\r
-                                         ((FLAG) == ETH_DMATXDESC_VF) || \\r
-                                         ((FLAG) == ETH_DMATXDESC_CC) || \\r
-                                         ((FLAG) == ETH_DMATXDESC_ED) || \\r
-                                         ((FLAG) == ETH_DMATXDESC_UF) || \\r
-                                         ((FLAG) == ETH_DMATXDESC_DB))\r
-#define IS_ETH_DMA_TXDESC_SEGMENT(SEGMENT) (((SEGMENT) == ETH_DMATXDESC_LASTSEGMENTS) || \\r
-                                            ((SEGMENT) == ETH_DMATXDESC_FIRSTSEGMENT))\r
-#define IS_ETH_DMA_TXDESC_CHECKSUM(CHECKSUM) (((CHECKSUM) == ETH_DMATXDESC_CHECKSUMBYPASS) || \\r
-                                              ((CHECKSUM) == ETH_DMATXDESC_CHECKSUMIPV4HEADER) || \\r
-                                              ((CHECKSUM) == ETH_DMATXDESC_CHECKSUMTCPUDPICMPSEGMENT) || \\r
-                                              ((CHECKSUM) == ETH_DMATXDESC_CHECKSUMTCPUDPICMPFULL))\r
-#define IS_ETH_DMATXDESC_BUFFER_SIZE(SIZE) ((SIZE) <= 0x1FFF)\r
-#define IS_ETH_DMARXDESC_GET_FLAG(FLAG) (((FLAG) == ETH_DMARXDESC_OWN) || \\r
-                                         ((FLAG) == ETH_DMARXDESC_AFM) || \\r
-                                         ((FLAG) == ETH_DMARXDESC_ES) || \\r
-                                         ((FLAG) == ETH_DMARXDESC_DE) || \\r
-                                         ((FLAG) == ETH_DMARXDESC_SAF) || \\r
-                                         ((FLAG) == ETH_DMARXDESC_LE) || \\r
-                                         ((FLAG) == ETH_DMARXDESC_OE) || \\r
-                                         ((FLAG) == ETH_DMARXDESC_VLAN) || \\r
-                                         ((FLAG) == ETH_DMARXDESC_FS) || \\r
-                                         ((FLAG) == ETH_DMARXDESC_LS) || \\r
-                                         ((FLAG) == ETH_DMARXDESC_IPV4HCE) || \\r
-                                         ((FLAG) == ETH_DMARXDESC_LC) || \\r
-                                         ((FLAG) == ETH_DMARXDESC_FT) || \\r
-                                         ((FLAG) == ETH_DMARXDESC_RWT) || \\r
-                                         ((FLAG) == ETH_DMARXDESC_RE) || \\r
-                                         ((FLAG) == ETH_DMARXDESC_DBE) || \\r
-                                         ((FLAG) == ETH_DMARXDESC_CE) || \\r
-                                         ((FLAG) == ETH_DMARXDESC_MAMPCE))\r
-#define IS_ETH_DMA_RXDESC_BUFFER(BUFFER) (((BUFFER) == ETH_DMARXDESC_BUFFER1) || \\r
-                                          ((BUFFER) == ETH_DMARXDESC_BUFFER2))\r
-#define IS_ETH_PMT_GET_FLAG(FLAG) (((FLAG) == ETH_PMT_FLAG_WUFR) || \\r
-                                   ((FLAG) == ETH_PMT_FLAG_MPR))\r
-#define IS_ETH_DMA_FLAG(FLAG) ((((FLAG) & (uint32_t)0xC7FE1800) == 0x00) && ((FLAG) != 0x00)) \r
-#define IS_ETH_DMA_GET_FLAG(FLAG) (((FLAG) == ETH_DMA_FLAG_TST) || ((FLAG) == ETH_DMA_FLAG_PMT) || \\r
-                                   ((FLAG) == ETH_DMA_FLAG_MMC) || ((FLAG) == ETH_DMA_FLAG_DATATRANSFERERROR) || \\r
-                                   ((FLAG) == ETH_DMA_FLAG_READWRITEERROR) || ((FLAG) == ETH_DMA_FLAG_ACCESSERROR) || \\r
-                                   ((FLAG) == ETH_DMA_FLAG_NIS) || ((FLAG) == ETH_DMA_FLAG_AIS) || \\r
-                                   ((FLAG) == ETH_DMA_FLAG_ER) || ((FLAG) == ETH_DMA_FLAG_FBE) || \\r
-                                   ((FLAG) == ETH_DMA_FLAG_ET) || ((FLAG) == ETH_DMA_FLAG_RWT) || \\r
-                                   ((FLAG) == ETH_DMA_FLAG_RPS) || ((FLAG) == ETH_DMA_FLAG_RBU) || \\r
-                                   ((FLAG) == ETH_DMA_FLAG_R) || ((FLAG) == ETH_DMA_FLAG_TU) || \\r
-                                   ((FLAG) == ETH_DMA_FLAG_RO) || ((FLAG) == ETH_DMA_FLAG_TJT) || \\r
-                                   ((FLAG) == ETH_DMA_FLAG_TBU) || ((FLAG) == ETH_DMA_FLAG_TPS) || \\r
-                                   ((FLAG) == ETH_DMA_FLAG_T))\r
-#define IS_ETH_MAC_IT(IT) ((((IT) & (uint32_t)0xFFFFFDF1) == 0x00) && ((IT) != 0x00))\r
-#define IS_ETH_MAC_GET_IT(IT) (((IT) == ETH_MAC_IT_TST) || ((IT) == ETH_MAC_IT_MMCT) || \\r
-                               ((IT) == ETH_MAC_IT_MMCR) || ((IT) == ETH_MAC_IT_MMC) || \\r
-                               ((IT) == ETH_MAC_IT_PMT))\r
-#define IS_ETH_MAC_GET_FLAG(FLAG) (((FLAG) == ETH_MAC_FLAG_TST) || ((FLAG) == ETH_MAC_FLAG_MMCT) || \\r
-                                   ((FLAG) == ETH_MAC_FLAG_MMCR) || ((FLAG) == ETH_MAC_FLAG_MMC) || \\r
-                                   ((FLAG) == ETH_MAC_FLAG_PMT))\r
-#define IS_ETH_DMA_IT(IT) ((((IT) & (uint32_t)0xC7FE1800) == 0x00) && ((IT) != 0x00))\r
-#define IS_ETH_DMA_GET_IT(IT) (((IT) == ETH_DMA_IT_TST) || ((IT) == ETH_DMA_IT_PMT) || \\r
-                               ((IT) == ETH_DMA_IT_MMC) || ((IT) == ETH_DMA_IT_NIS) || \\r
-                               ((IT) == ETH_DMA_IT_AIS) || ((IT) == ETH_DMA_IT_ER) || \\r
-                               ((IT) == ETH_DMA_IT_FBE) || ((IT) == ETH_DMA_IT_ET) || \\r
-                               ((IT) == ETH_DMA_IT_RWT) || ((IT) == ETH_DMA_IT_RPS) || \\r
-                               ((IT) == ETH_DMA_IT_RBU) || ((IT) == ETH_DMA_IT_R) || \\r
-                               ((IT) == ETH_DMA_IT_TU) || ((IT) == ETH_DMA_IT_RO) || \\r
-                               ((IT) == ETH_DMA_IT_TJT) || ((IT) == ETH_DMA_IT_TBU) || \\r
-                               ((IT) == ETH_DMA_IT_TPS) || ((IT) == ETH_DMA_IT_T))\r
-#define IS_ETH_DMA_GET_OVERFLOW(OVERFLOW) (((OVERFLOW) == ETH_DMA_OVERFLOW_RXFIFOCOUNTER) || \\r
-                                           ((OVERFLOW) == ETH_DMA_OVERFLOW_MISSEDFRAMECOUNTER))\r
-#define IS_ETH_MMC_IT(IT) (((((IT) & (uint32_t)0xFFDF3FFF) == 0x00) || (((IT) & (uint32_t)0xEFFDFF9F) == 0x00)) && \\r
-                           ((IT) != 0x00))\r
-#define IS_ETH_MMC_GET_IT(IT) (((IT) == ETH_MMC_IT_TGF) || ((IT) == ETH_MMC_IT_TGFMSC) || \\r
-                               ((IT) == ETH_MMC_IT_TGFSC) || ((IT) == ETH_MMC_IT_RGUF) || \\r
-                               ((IT) == ETH_MMC_IT_RFAE) || ((IT) == ETH_MMC_IT_RFCE))\r
-#define IS_ETH_ENHANCED_DESCRIPTOR_FORMAT(CMD) (((CMD) == ETH_DMAENHANCEDDESCRIPTOR_ENABLE) || \\r
-                                                ((CMD) == ETH_DMAENHANCEDDESCRIPTOR_DISABLE))\r
-\r
-\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @addtogroup ETH_Private_Defines\r
-  * @{\r
-  */\r
-/* Delay to wait when writing to some Ethernet registers */\r
-#define ETH_REG_WRITE_DELAY ((uint32_t)0x00000001U)\r
-\r
-/* Ethernet Errors */\r
-#define  ETH_SUCCESS            ((uint32_t)0U)\r
-#define  ETH_ERROR              ((uint32_t)1U)\r
-\r
-/* Ethernet DMA Tx descriptors Collision Count Shift */\r
-#define  ETH_DMATXDESC_COLLISION_COUNTSHIFT         ((uint32_t)3U)\r
-\r
-/* Ethernet DMA Tx descriptors Buffer2 Size Shift */\r
-#define  ETH_DMATXDESC_BUFFER2_SIZESHIFT           ((uint32_t)16U)\r
-\r
-/* Ethernet DMA Rx descriptors Frame Length Shift */\r
-#define  ETH_DMARXDESC_FRAME_LENGTHSHIFT           ((uint32_t)16U)\r
-\r
-/* Ethernet DMA Rx descriptors Buffer2 Size Shift */\r
-#define  ETH_DMARXDESC_BUFFER2_SIZESHIFT           ((uint32_t)16U)\r
-\r
-/* Ethernet DMA Rx descriptors Frame length Shift */\r
-#define  ETH_DMARXDESC_FRAMELENGTHSHIFT            ((uint32_t)16)\r
-\r
-/* Ethernet MAC address offsets */\r
-#define ETH_MAC_ADDR_HBASE    (uint32_t)(ETH_MAC_BASE + (uint32_t)0x40U)  /* Ethernet MAC address high offset */\r
-#define ETH_MAC_ADDR_LBASE    (uint32_t)(ETH_MAC_BASE + (uint32_t)0x44U)  /* Ethernet MAC address low offset */\r
-\r
-/* Ethernet MACMIIAR register Mask */\r
-#define ETH_MACMIIAR_CR_MASK    ((uint32_t)0xFFFFFFE3U)\r
-\r
-/* Ethernet MACCR register Mask */\r
-#define ETH_MACCR_CLEAR_MASK    ((uint32_t)0xFF20810FU)  \r
-\r
-/* Ethernet MACFCR register Mask */\r
-#define ETH_MACFCR_CLEAR_MASK   ((uint32_t)0x0000FF41U)\r
-\r
-/* Ethernet DMAOMR register Mask */\r
-#define ETH_DMAOMR_CLEAR_MASK   ((uint32_t)0xF8DE3F23U)\r
-\r
-/* Ethernet Remote Wake-up frame register length */\r
-#define ETH_WAKEUP_REGISTER_LENGTH      8U\r
-\r
-/* Ethernet Missed frames counter Shift */\r
-#define  ETH_DMA_RX_OVERFLOW_MISSEDFRAMES_COUNTERSHIFT     17U\r
- /**\r
-  * @}\r
-  */\r
-\r
-/* Exported types ------------------------------------------------------------*/ \r
-/** @defgroup ETH_Exported_Types ETH Exported Types\r
-  * @{\r
-  */\r
-\r
-/** \r
-  * @brief  HAL State structures definition  \r
-  */ \r
-typedef enum\r
-{\r
-  HAL_ETH_STATE_RESET             = 0x00U,    /*!< Peripheral not yet Initialized or disabled         */\r
-  HAL_ETH_STATE_READY             = 0x01U,    /*!< Peripheral Initialized and ready for use           */\r
-  HAL_ETH_STATE_BUSY              = 0x02U,    /*!< an internal process is ongoing                     */\r
-  HAL_ETH_STATE_BUSY_TX           = 0x12U,    /*!< Data Transmission process is ongoing               */\r
-  HAL_ETH_STATE_BUSY_RX           = 0x22U,    /*!< Data Reception process is ongoing                  */\r
-  HAL_ETH_STATE_BUSY_TX_RX        = 0x32U,    /*!< Data Transmission and Reception process is ongoing */\r
-  HAL_ETH_STATE_BUSY_WR           = 0x42U,    /*!< Write process is ongoing                           */\r
-  HAL_ETH_STATE_BUSY_RD           = 0x82U,    /*!< Read process is ongoing                            */\r
-  HAL_ETH_STATE_TIMEOUT           = 0x03U,    /*!< Timeout state                                      */\r
-  HAL_ETH_STATE_ERROR             = 0x04U     /*!< Reception process is ongoing                       */\r
-}HAL_ETH_StateTypeDef;\r
-\r
-/** \r
-  * @brief  ETH Init Structure definition  \r
-  */\r
-\r
-typedef struct\r
-{\r
-  uint32_t             AutoNegotiation;           /*!< Selects or not the AutoNegotiation mode for the external PHY\r
-                                                           The AutoNegotiation allows an automatic setting of the Speed (10/100Mbps)\r
-                                                           and the mode (half/full-duplex).\r
-                                                           This parameter can be a value of @ref ETH_AutoNegotiation */\r
-\r
-  uint32_t             Speed;                     /*!< Sets the Ethernet speed: 10/100 Mbps.\r
-                                                           This parameter can be a value of @ref ETH_Speed */\r
-\r
-  uint32_t             DuplexMode;                /*!< Selects the MAC duplex mode: Half-Duplex or Full-Duplex mode\r
-                                                           This parameter can be a value of @ref ETH_Duplex_Mode */\r
-  \r
-  uint16_t             PhyAddress;                /*!< Ethernet PHY address.\r
-                                                           This parameter must be a number between Min_Data = 0 and Max_Data = 32 */\r
-  \r
-  uint8_t             *MACAddr;                   /*!< MAC Address of used Hardware: must be pointer on an array of 6 bytes */\r
-  \r
-  uint32_t             RxMode;                    /*!< Selects the Ethernet Rx mode: Polling mode, Interrupt mode.\r
-                                                           This parameter can be a value of @ref ETH_Rx_Mode */\r
-  \r
-  uint32_t             ChecksumMode;              /*!< Selects if the checksum is check by hardware or by software. \r
-                                                         This parameter can be a value of @ref ETH_Checksum_Mode */\r
-  \r
-  uint32_t             MediaInterface    ;               /*!< Selects the media-independent interface or the reduced media-independent interface. \r
-                                                         This parameter can be a value of @ref ETH_Media_Interface */\r
-\r
-} ETH_InitTypeDef;\r
-\r
-\r
- /** \r
-  * @brief  ETH MAC Configuration Structure definition  \r
-  */\r
-\r
-typedef struct\r
-{\r
-  uint32_t             Watchdog;                  /*!< Selects or not the Watchdog timer\r
-                                                           When enabled, the MAC allows no more then 2048 bytes to be received.\r
-                                                           When disabled, the MAC can receive up to 16384 bytes.\r
-                                                           This parameter can be a value of @ref ETH_Watchdog */  \r
-\r
-  uint32_t             Jabber;                    /*!< Selects or not Jabber timer\r
-                                                           When enabled, the MAC allows no more then 2048 bytes to be sent.\r
-                                                           When disabled, the MAC can send up to 16384 bytes.\r
-                                                           This parameter can be a value of @ref ETH_Jabber */\r
-\r
-  uint32_t             InterFrameGap;             /*!< Selects the minimum IFG between frames during transmission.\r
-                                                           This parameter can be a value of @ref ETH_Inter_Frame_Gap */   \r
-\r
-  uint32_t             CarrierSense;              /*!< Selects or not the Carrier Sense.\r
-                                                           This parameter can be a value of @ref ETH_Carrier_Sense */\r
-\r
-  uint32_t             ReceiveOwn;                /*!< Selects or not the ReceiveOwn,\r
-                                                           ReceiveOwn allows the reception of frames when the TX_EN signal is asserted\r
-                                                           in Half-Duplex mode.\r
-                                                           This parameter can be a value of @ref ETH_Receive_Own */  \r
-\r
-  uint32_t             LoopbackMode;              /*!< Selects or not the internal MAC MII Loopback mode.\r
-                                                           This parameter can be a value of @ref ETH_Loop_Back_Mode */  \r
-\r
-  uint32_t             ChecksumOffload;           /*!< Selects or not the IPv4 checksum checking for received frame payloads' TCP/UDP/ICMP headers.\r
-                                                           This parameter can be a value of @ref ETH_Checksum_Offload */    \r
-\r
-  uint32_t             RetryTransmission;         /*!< Selects or not the MAC attempt retries transmission, based on the settings of BL,\r
-                                                           when a collision occurs (Half-Duplex mode).\r
-                                                           This parameter can be a value of @ref ETH_Retry_Transmission */\r
-\r
-  uint32_t             AutomaticPadCRCStrip;      /*!< Selects or not the Automatic MAC Pad/CRC Stripping.\r
-                                                           This parameter can be a value of @ref ETH_Automatic_Pad_CRC_Strip */ \r
-\r
-  uint32_t             BackOffLimit;              /*!< Selects the BackOff limit value.\r
-                                                           This parameter can be a value of @ref ETH_Back_Off_Limit */\r
-\r
-  uint32_t             DeferralCheck;             /*!< Selects or not the deferral check function (Half-Duplex mode).\r
-                                                           This parameter can be a value of @ref ETH_Deferral_Check */                                                                                                        \r
-\r
-  uint32_t             ReceiveAll;                /*!< Selects or not all frames reception by the MAC (No filtering).\r
-                                                           This parameter can be a value of @ref ETH_Receive_All */   \r
-\r
-  uint32_t             SourceAddrFilter;          /*!< Selects the Source Address Filter mode.                                                           \r
-                                                           This parameter can be a value of @ref ETH_Source_Addr_Filter */                  \r
-\r
-  uint32_t             PassControlFrames;         /*!< Sets the forwarding mode of the control frames (including unicast and multicast PAUSE frames)                                                          \r
-                                                           This parameter can be a value of @ref ETH_Pass_Control_Frames */ \r
-\r
-  uint32_t             BroadcastFramesReception;  /*!< Selects or not the reception of Broadcast Frames.\r
-                                                           This parameter can be a value of @ref ETH_Broadcast_Frames_Reception */\r
-\r
-  uint32_t             DestinationAddrFilter;     /*!< Sets the destination filter mode for both unicast and multicast frames.\r
-                                                           This parameter can be a value of @ref ETH_Destination_Addr_Filter */ \r
-\r
-  uint32_t             PromiscuousMode;           /*!< Selects or not the Promiscuous Mode\r
-                                                           This parameter can be a value of @ref ETH_Promiscuous_Mode */\r
-\r
-  uint32_t             MulticastFramesFilter;     /*!< Selects the Multicast Frames filter mode: None/HashTableFilter/PerfectFilter/PerfectHashTableFilter.\r
-                                                           This parameter can be a value of @ref ETH_Multicast_Frames_Filter */ \r
-\r
-  uint32_t             UnicastFramesFilter;       /*!< Selects the Unicast Frames filter mode: HashTableFilter/PerfectFilter/PerfectHashTableFilter.\r
-                                                           This parameter can be a value of @ref ETH_Unicast_Frames_Filter */ \r
-\r
-  uint32_t             HashTableHigh;             /*!< This field holds the higher 32 bits of Hash table.\r
-                                                           This parameter must be a number between Min_Data = 0x0 and Max_Data = 0xFFFFFFFF */\r
-\r
-  uint32_t             HashTableLow;              /*!< This field holds the lower 32 bits of Hash table.\r
-                                                           This parameter must be a number between Min_Data = 0x0 and Max_Data = 0xFFFFFFFF  */    \r
-\r
-  uint32_t             PauseTime;                 /*!< This field holds the value to be used in the Pause Time field in the transmit control frame. \r
-                                                           This parameter must be a number between Min_Data = 0x0 and Max_Data = 0xFFFF */\r
-\r
-  uint32_t             ZeroQuantaPause;           /*!< Selects or not the automatic generation of Zero-Quanta Pause Control frames.\r
-                                                           This parameter can be a value of @ref ETH_Zero_Quanta_Pause */  \r
-\r
-  uint32_t             PauseLowThreshold;         /*!< This field configures the threshold of the PAUSE to be checked for\r
-                                                           automatic retransmission of PAUSE Frame.\r
-                                                           This parameter can be a value of @ref ETH_Pause_Low_Threshold */\r
-                                                           \r
-  uint32_t             UnicastPauseFrameDetect;   /*!< Selects or not the MAC detection of the Pause frames (with MAC Address0\r
-                                                           unicast address and unique multicast address).\r
-                                                           This parameter can be a value of @ref ETH_Unicast_Pause_Frame_Detect */  \r
-\r
-  uint32_t             ReceiveFlowControl;        /*!< Enables or disables the MAC to decode the received Pause frame and\r
-                                                           disable its transmitter for a specified time (Pause Time)\r
-                                                           This parameter can be a value of @ref ETH_Receive_Flow_Control */\r
-\r
-  uint32_t             TransmitFlowControl;       /*!< Enables or disables the MAC to transmit Pause frames (Full-Duplex mode)\r
-                                                           or the MAC back-pressure operation (Half-Duplex mode)\r
-                                                           This parameter can be a value of @ref ETH_Transmit_Flow_Control */     \r
-\r
-  uint32_t             VLANTagComparison;         /*!< Selects the 12-bit VLAN identifier or the complete 16-bit VLAN tag for\r
-                                                           comparison and filtering.\r
-                                                           This parameter can be a value of @ref ETH_VLAN_Tag_Comparison */ \r
-\r
-  uint32_t             VLANTagIdentifier;         /*!< Holds the VLAN tag identifier for receive frames */\r
-\r
-} ETH_MACInitTypeDef;\r
-\r
-\r
-/** \r
-  * @brief  ETH DMA Configuration Structure definition  \r
-  */\r
-\r
-typedef struct\r
-{\r
- uint32_t              DropTCPIPChecksumErrorFrame; /*!< Selects or not the Dropping of TCP/IP Checksum Error Frames.\r
-                                                             This parameter can be a value of @ref ETH_Drop_TCP_IP_Checksum_Error_Frame */ \r
-\r
-  uint32_t             ReceiveStoreForward;         /*!< Enables or disables the Receive store and forward mode.\r
-                                                             This parameter can be a value of @ref ETH_Receive_Store_Forward */ \r
-\r
-  uint32_t             FlushReceivedFrame;          /*!< Enables or disables the flushing of received frames.\r
-                                                             This parameter can be a value of @ref ETH_Flush_Received_Frame */ \r
-\r
-  uint32_t             TransmitStoreForward;        /*!< Enables or disables Transmit store and forward mode.\r
-                                                             This parameter can be a value of @ref ETH_Transmit_Store_Forward */ \r
-\r
-  uint32_t             TransmitThresholdControl;    /*!< Selects or not the Transmit Threshold Control.\r
-                                                             This parameter can be a value of @ref ETH_Transmit_Threshold_Control */\r
-\r
-  uint32_t             ForwardErrorFrames;          /*!< Selects or not the forward to the DMA of erroneous frames.\r
-                                                             This parameter can be a value of @ref ETH_Forward_Error_Frames */\r
-\r
-  uint32_t             ForwardUndersizedGoodFrames; /*!< Enables or disables the Rx FIFO to forward Undersized frames (frames with no Error\r
-                                                             and length less than 64 bytes) including pad-bytes and CRC)\r
-                                                             This parameter can be a value of @ref ETH_Forward_Undersized_Good_Frames */\r
-\r
-  uint32_t             ReceiveThresholdControl;     /*!< Selects the threshold level of the Receive FIFO.\r
-                                                             This parameter can be a value of @ref ETH_Receive_Threshold_Control */\r
-\r
-  uint32_t             SecondFrameOperate;          /*!< Selects or not the Operate on second frame mode, which allows the DMA to process a second\r
-                                                             frame of Transmit data even before obtaining the status for the first frame.\r
-                                                             This parameter can be a value of @ref ETH_Second_Frame_Operate */\r
-\r
-  uint32_t             AddressAlignedBeats;         /*!< Enables or disables the Address Aligned Beats.\r
-                                                             This parameter can be a value of @ref ETH_Address_Aligned_Beats */\r
-\r
-  uint32_t             FixedBurst;                  /*!< Enables or disables the AHB Master interface fixed burst transfers.\r
-                                                             This parameter can be a value of @ref ETH_Fixed_Burst */\r
-                       \r
-  uint32_t             RxDMABurstLength;            /*!< Indicates the maximum number of beats to be transferred in one Rx DMA transaction.\r
-                                                             This parameter can be a value of @ref ETH_Rx_DMA_Burst_Length */ \r
-\r
-  uint32_t             TxDMABurstLength;            /*!< Indicates the maximum number of beats to be transferred in one Tx DMA transaction.\r
-                                                             This parameter can be a value of @ref ETH_Tx_DMA_Burst_Length */\r
-  \r
-  uint32_t             EnhancedDescriptorFormat;    /*!< Enables the enhanced descriptor format.\r
-                                                             This parameter can be a value of @ref ETH_DMA_Enhanced_descriptor_format */\r
-\r
-  uint32_t             DescriptorSkipLength;        /*!< Specifies the number of word to skip between two unchained descriptors (Ring mode)\r
-                                                             This parameter must be a number between Min_Data = 0 and Max_Data = 32 */                                                             \r
-\r
-  uint32_t             DMAArbitration;              /*!< Selects the DMA Tx/Rx arbitration.\r
-                                                             This parameter can be a value of @ref ETH_DMA_Arbitration */  \r
-} ETH_DMAInitTypeDef;\r
-\r
-\r
-/** \r
-  * @brief  ETH DMA Descriptors data structure definition\r
-  */ \r
-\r
-typedef struct  \r
-{\r
-  __IO uint32_t   Status;           /*!< Status */\r
-  \r
-  uint32_t   ControlBufferSize;     /*!< Control and Buffer1, Buffer2 lengths */\r
-  \r
-  uint32_t   Buffer1Addr;           /*!< Buffer1 address pointer */\r
-  \r
-  uint32_t   Buffer2NextDescAddr;   /*!< Buffer2 or next descriptor address pointer */\r
-  \r
-  /*!< Enhanced Ethernet DMA PTP Descriptors */\r
-  uint32_t   ExtendedStatus;        /*!< Extended status for PTP receive descriptor */\r
-  \r
-  uint32_t   Reserved1;             /*!< Reserved */\r
-  \r
-  uint32_t   TimeStampLow;          /*!< Time Stamp Low value for transmit and receive */\r
-  \r
-  uint32_t   TimeStampHigh;         /*!< Time Stamp High value for transmit and receive */\r
-\r
-} ETH_DMADescTypeDef;\r
-\r
-\r
-/** \r
-  * @brief  Received Frame Informations structure definition\r
-  */ \r
-typedef struct  \r
-{\r
-  ETH_DMADescTypeDef *FSRxDesc;          /*!< First Segment Rx Desc */\r
-  \r
-  ETH_DMADescTypeDef *LSRxDesc;          /*!< Last Segment Rx Desc */\r
-  \r
-  uint32_t  SegCount;                    /*!< Segment count */\r
-  \r
-  uint32_t length;                       /*!< Frame length */\r
-  \r
-  uint32_t buffer;                       /*!< Frame buffer */\r
-\r
-} ETH_DMARxFrameInfos;\r
-\r
-\r
-/** \r
-  * @brief  ETH Handle Structure definition  \r
-  */\r
-  \r
-typedef struct\r
-{\r
-  ETH_TypeDef                *Instance;     /*!< Register base address       */\r
-  \r
-  ETH_InitTypeDef            Init;          /*!< Ethernet Init Configuration */\r
-  \r
-  uint32_t                   LinkStatus;    /*!< Ethernet link status        */\r
-  \r
-  ETH_DMADescTypeDef         *RxDesc;       /*!< Rx descriptor to Get        */\r
-  \r
-  ETH_DMADescTypeDef         *TxDesc;       /*!< Tx descriptor to Set        */\r
-  \r
-  ETH_DMARxFrameInfos        RxFrameInfos;  /*!< last Rx frame infos         */\r
-  \r
-  __IO HAL_ETH_StateTypeDef  State;         /*!< ETH communication state     */\r
-  \r
-  HAL_LockTypeDef            Lock;          /*!< ETH Lock                    */\r
-\r
-} ETH_HandleTypeDef;\r
-\r
- /**\r
-  * @}\r
-  */\r
-\r
-/* Exported constants --------------------------------------------------------*/\r
-/** @defgroup ETH_Exported_Constants ETH Exported Constants\r
-  * @{\r
-  */\r
-\r
-/** @defgroup ETH_Buffers_setting ETH Buffers setting\r
-  * @{\r
-  */ \r
-#define ETH_MAX_PACKET_SIZE    ((uint32_t)1524U)    /*!< ETH_HEADER + ETH_EXTRA + ETH_VLAN_TAG + ETH_MAX_ETH_PAYLOAD + ETH_CRC */\r
-#define ETH_HEADER               ((uint32_t)14U)    /*!< 6 byte Dest addr, 6 byte Src addr, 2 byte length/type */\r
-#define ETH_CRC                   ((uint32_t)4U)    /*!< Ethernet CRC */\r
-#define ETH_EXTRA                 ((uint32_t)2U)    /*!< Extra bytes in some cases */   \r
-#define ETH_VLAN_TAG              ((uint32_t)4U)    /*!< optional 802.1q VLAN Tag */\r
-#define ETH_MIN_ETH_PAYLOAD       ((uint32_t)46U)    /*!< Minimum Ethernet payload size */\r
-#define ETH_MAX_ETH_PAYLOAD       ((uint32_t)1500U)    /*!< Maximum Ethernet payload size */\r
-#define ETH_JUMBO_FRAME_PAYLOAD   ((uint32_t)9000U)    /*!< Jumbo frame payload size */      \r
-\r
- /* Ethernet driver receive buffers are organized in a chained linked-list, when\r
-    an Ethernet packet is received, the Rx-DMA will transfer the packet from RxFIFO\r
-    to the driver receive buffers memory.\r
-\r
-    Depending on the size of the received Ethernet packet and the size of \r
-    each Ethernet driver receive buffer, the received packet can take one or more\r
-    Ethernet driver receive buffer. \r
-\r
-    In below are defined the size of one Ethernet driver receive buffer ETH_RX_BUF_SIZE \r
-    and the total count of the driver receive buffers ETH_RXBUFNB.\r
-\r
-    The configured value for ETH_RX_BUF_SIZE and ETH_RXBUFNB are only provided as \r
-    example, they can be reconfigured in the application layer to fit the application \r
-    needs */ \r
-\r
-/* Here we configure each Ethernet driver receive buffer to fit the Max size Ethernet\r
-   packet */\r
-#ifndef ETH_RX_BUF_SIZE\r
- #define ETH_RX_BUF_SIZE         ETH_MAX_PACKET_SIZE \r
-#endif\r
-\r
-/* 5 Ethernet driver receive buffers are used (in a chained linked list)*/ \r
-#ifndef ETH_RXBUFNB\r
- #define ETH_RXBUFNB             ((uint32_t)5U)     /*  5 Rx buffers of size ETH_RX_BUF_SIZE */\r
-#endif\r
-\r
-\r
- /* Ethernet driver transmit buffers are organized in a chained linked-list, when\r
-    an Ethernet packet is transmitted, Tx-DMA will transfer the packet from the \r
-    driver transmit buffers memory to the TxFIFO.\r
-\r
-    Depending on the size of the Ethernet packet to be transmitted and the size of \r
-    each Ethernet driver transmit buffer, the packet to be transmitted can take \r
-    one or more Ethernet driver transmit buffer. \r
-\r
-    In below are defined the size of one Ethernet driver transmit buffer ETH_TX_BUF_SIZE \r
-    and the total count of the driver transmit buffers ETH_TXBUFNB.\r
-\r
-    The configured value for ETH_TX_BUF_SIZE and ETH_TXBUFNB are only provided as \r
-    example, they can be reconfigured in the application layer to fit the application \r
-    needs */ \r
-\r
-/* Here we configure each Ethernet driver transmit buffer to fit the Max size Ethernet\r
-   packet */\r
-#ifndef ETH_TX_BUF_SIZE \r
- #define ETH_TX_BUF_SIZE         ETH_MAX_PACKET_SIZE\r
-#endif\r
-\r
-/* 5 Ethernet driver transmit buffers are used (in a chained linked list)*/ \r
-#ifndef ETH_TXBUFNB\r
- #define ETH_TXBUFNB             ((uint32_t)5U)      /* 5  Tx buffers of size ETH_TX_BUF_SIZE */\r
-#endif\r
-\r
- /**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_DMA_TX_Descriptor ETH DMA TX Descriptor\r
-  * @{\r
-  */\r
-\r
-/*\r
-   DMA Tx Descriptor\r
-  -----------------------------------------------------------------------------------------------\r
-  TDES0 | OWN(31) | CTRL[30:26] | Reserved[25:24] | CTRL[23:20] | Reserved[19:17] | Status[16:0] |\r
-  -----------------------------------------------------------------------------------------------\r
-  TDES1 | Reserved[31:29] | Buffer2 ByteCount[28:16] | Reserved[15:13] | Buffer1 ByteCount[12:0] |\r
-  -----------------------------------------------------------------------------------------------\r
-  TDES2 |                         Buffer1 Address [31:0]                                         |\r
-  -----------------------------------------------------------------------------------------------\r
-  TDES3 |                   Buffer2 Address [31:0] / Next Descriptor Address [31:0]              |\r
-  -----------------------------------------------------------------------------------------------\r
-*/\r
-\r
-/** \r
-  * @brief  Bit definition of TDES0 register: DMA Tx descriptor status register\r
-  */ \r
-#define ETH_DMATXDESC_OWN                     ((uint32_t)0x80000000U)  /*!< OWN bit: descriptor is owned by DMA engine */\r
-#define ETH_DMATXDESC_IC                      ((uint32_t)0x40000000U)  /*!< Interrupt on Completion */\r
-#define ETH_DMATXDESC_LS                      ((uint32_t)0x20000000U)  /*!< Last Segment */\r
-#define ETH_DMATXDESC_FS                      ((uint32_t)0x10000000U)  /*!< First Segment */\r
-#define ETH_DMATXDESC_DC                      ((uint32_t)0x08000000U)  /*!< Disable CRC */\r
-#define ETH_DMATXDESC_DP                      ((uint32_t)0x04000000U)  /*!< Disable Padding */\r
-#define ETH_DMATXDESC_TTSE                    ((uint32_t)0x02000000U)  /*!< Transmit Time Stamp Enable */\r
-#define ETH_DMATXDESC_CIC                     ((uint32_t)0x00C00000U)  /*!< Checksum Insertion Control: 4 cases */\r
-#define ETH_DMATXDESC_CIC_BYPASS              ((uint32_t)0x00000000U)  /*!< Do Nothing: Checksum Engine is bypassed */ \r
-#define ETH_DMATXDESC_CIC_IPV4HEADER          ((uint32_t)0x00400000U)  /*!< IPV4 header Checksum Insertion */ \r
-#define ETH_DMATXDESC_CIC_TCPUDPICMP_SEGMENT  ((uint32_t)0x00800000U)  /*!< TCP/UDP/ICMP Checksum Insertion calculated over segment only */ \r
-#define ETH_DMATXDESC_CIC_TCPUDPICMP_FULL     ((uint32_t)0x00C00000U)  /*!< TCP/UDP/ICMP Checksum Insertion fully calculated */ \r
-#define ETH_DMATXDESC_TER                     ((uint32_t)0x00200000U)  /*!< Transmit End of Ring */\r
-#define ETH_DMATXDESC_TCH                     ((uint32_t)0x00100000U)  /*!< Second Address Chained */\r
-#define ETH_DMATXDESC_TTSS                    ((uint32_t)0x00020000U)  /*!< Tx Time Stamp Status */\r
-#define ETH_DMATXDESC_IHE                     ((uint32_t)0x00010000U)  /*!< IP Header Error */\r
-#define ETH_DMATXDESC_ES                      ((uint32_t)0x00008000U)  /*!< Error summary: OR of the following bits: UE || ED || EC || LCO || NC || LCA || FF || JT */\r
-#define ETH_DMATXDESC_JT                      ((uint32_t)0x00004000U)  /*!< Jabber Timeout */\r
-#define ETH_DMATXDESC_FF                      ((uint32_t)0x00002000U)  /*!< Frame Flushed: DMA/MTL flushed the frame due to SW flush */\r
-#define ETH_DMATXDESC_PCE                     ((uint32_t)0x00001000U)  /*!< Payload Checksum Error */\r
-#define ETH_DMATXDESC_LCA                     ((uint32_t)0x00000800U)  /*!< Loss of Carrier: carrier lost during transmission */\r
-#define ETH_DMATXDESC_NC                      ((uint32_t)0x00000400U)  /*!< No Carrier: no carrier signal from the transceiver */\r
-#define ETH_DMATXDESC_LCO                     ((uint32_t)0x00000200U)  /*!< Late Collision: transmission aborted due to collision */\r
-#define ETH_DMATXDESC_EC                      ((uint32_t)0x00000100U)  /*!< Excessive Collision: transmission aborted after 16 collisions */\r
-#define ETH_DMATXDESC_VF                      ((uint32_t)0x00000080U)  /*!< VLAN Frame */\r
-#define ETH_DMATXDESC_CC                      ((uint32_t)0x00000078U)  /*!< Collision Count */\r
-#define ETH_DMATXDESC_ED                      ((uint32_t)0x00000004U)  /*!< Excessive Deferral */\r
-#define ETH_DMATXDESC_UF                      ((uint32_t)0x00000002U)  /*!< Underflow Error: late data arrival from the memory */\r
-#define ETH_DMATXDESC_DB                      ((uint32_t)0x00000001U)  /*!< Deferred Bit */\r
-\r
-/** \r
-  * @brief  Bit definition of TDES1 register\r
-  */ \r
-#define ETH_DMATXDESC_TBS2  ((uint32_t)0x1FFF0000U)  /*!< Transmit Buffer2 Size */\r
-#define ETH_DMATXDESC_TBS1  ((uint32_t)0x00001FFFU)  /*!< Transmit Buffer1 Size */\r
-\r
-/** \r
-  * @brief  Bit definition of TDES2 register\r
-  */ \r
-#define ETH_DMATXDESC_B1AP  ((uint32_t)0xFFFFFFFFU)  /*!< Buffer1 Address Pointer */\r
-\r
-/** \r
-  * @brief  Bit definition of TDES3 register\r
-  */ \r
-#define ETH_DMATXDESC_B2AP  ((uint32_t)0xFFFFFFFFU)  /*!< Buffer2 Address Pointer */\r
-\r
-  /*---------------------------------------------------------------------------------------------\r
-  TDES6 |                         Transmit Time Stamp Low [31:0]                                 |\r
-  -----------------------------------------------------------------------------------------------\r
-  TDES7 |                         Transmit Time Stamp High [31:0]                                |\r
-  ----------------------------------------------------------------------------------------------*/\r
-\r
-/* Bit definition of TDES6 register */\r
- #define ETH_DMAPTPTXDESC_TTSL  ((uint32_t)0xFFFFFFFFU)  /* Transmit Time Stamp Low */\r
-\r
-/* Bit definition of TDES7 register */\r
- #define ETH_DMAPTPTXDESC_TTSH  ((uint32_t)0xFFFFFFFFU)  /* Transmit Time Stamp High */\r
-\r
-/**\r
-  * @}\r
-  */ \r
-/** @defgroup ETH_DMA_RX_Descriptor ETH DMA RX Descriptor\r
-  * @{\r
-  */\r
-\r
-/*\r
-  DMA Rx Descriptor\r
-  --------------------------------------------------------------------------------------------------------------------\r
-  RDES0 | OWN(31) |                                             Status [30:0]                                          |\r
-  ---------------------------------------------------------------------------------------------------------------------\r
-  RDES1 | CTRL(31) | Reserved[30:29] | Buffer2 ByteCount[28:16] | CTRL[15:14] | Reserved(13) | Buffer1 ByteCount[12:0] |\r
-  ---------------------------------------------------------------------------------------------------------------------\r
-  RDES2 |                                       Buffer1 Address [31:0]                                                 |\r
-  ---------------------------------------------------------------------------------------------------------------------\r
-  RDES3 |                          Buffer2 Address [31:0] / Next Descriptor Address [31:0]                             |\r
-  ---------------------------------------------------------------------------------------------------------------------\r
-*/\r
-\r
-/** \r
-  * @brief  Bit definition of RDES0 register: DMA Rx descriptor status register\r
-  */ \r
-#define ETH_DMARXDESC_OWN         ((uint32_t)0x80000000U)  /*!< OWN bit: descriptor is owned by DMA engine  */\r
-#define ETH_DMARXDESC_AFM         ((uint32_t)0x40000000U)  /*!< DA Filter Fail for the rx frame  */\r
-#define ETH_DMARXDESC_FL          ((uint32_t)0x3FFF0000U)  /*!< Receive descriptor frame length  */\r
-#define ETH_DMARXDESC_ES          ((uint32_t)0x00008000U)  /*!< Error summary: OR of the following bits: DE || OE || IPC || LC || RWT || RE || CE */\r
-#define ETH_DMARXDESC_DE          ((uint32_t)0x00004000U)  /*!< Descriptor error: no more descriptors for receive frame  */\r
-#define ETH_DMARXDESC_SAF         ((uint32_t)0x00002000U)  /*!< SA Filter Fail for the received frame */\r
-#define ETH_DMARXDESC_LE          ((uint32_t)0x00001000U)  /*!< Frame size not matching with length field */\r
-#define ETH_DMARXDESC_OE          ((uint32_t)0x00000800U)  /*!< Overflow Error: Frame was damaged due to buffer overflow */\r
-#define ETH_DMARXDESC_VLAN        ((uint32_t)0x00000400U)  /*!< VLAN Tag: received frame is a VLAN frame */\r
-#define ETH_DMARXDESC_FS          ((uint32_t)0x00000200U)  /*!< First descriptor of the frame  */\r
-#define ETH_DMARXDESC_LS          ((uint32_t)0x00000100U)  /*!< Last descriptor of the frame  */ \r
-#define ETH_DMARXDESC_IPV4HCE     ((uint32_t)0x00000080U)  /*!< IPC Checksum Error: Rx Ipv4 header checksum error   */    \r
-#define ETH_DMARXDESC_LC          ((uint32_t)0x00000040U)  /*!< Late collision occurred during reception   */\r
-#define ETH_DMARXDESC_FT          ((uint32_t)0x00000020U)  /*!< Frame type - Ethernet, otherwise 802.3    */\r
-#define ETH_DMARXDESC_RWT         ((uint32_t)0x00000010U)  /*!< Receive Watchdog Timeout: watchdog timer expired during reception    */\r
-#define ETH_DMARXDESC_RE          ((uint32_t)0x00000008U)  /*!< Receive error: error reported by MII interface  */\r
-#define ETH_DMARXDESC_DBE         ((uint32_t)0x00000004U)  /*!< Dribble bit error: frame contains non int multiple of 8 bits  */\r
-#define ETH_DMARXDESC_CE          ((uint32_t)0x00000002U)  /*!< CRC error */\r
-#define ETH_DMARXDESC_MAMPCE      ((uint32_t)0x00000001U)  /*!< Rx MAC Address/Payload Checksum Error: Rx MAC address matched/ Rx Payload Checksum Error */\r
-\r
-/** \r
-  * @brief  Bit definition of RDES1 register\r
-  */ \r
-#define ETH_DMARXDESC_DIC   ((uint32_t)0x80000000U)  /*!< Disable Interrupt on Completion */\r
-#define ETH_DMARXDESC_RBS2  ((uint32_t)0x1FFF0000U)  /*!< Receive Buffer2 Size */\r
-#define ETH_DMARXDESC_RER   ((uint32_t)0x00008000U)  /*!< Receive End of Ring */\r
-#define ETH_DMARXDESC_RCH   ((uint32_t)0x00004000U)  /*!< Second Address Chained */\r
-#define ETH_DMARXDESC_RBS1  ((uint32_t)0x00001FFFU)  /*!< Receive Buffer1 Size */\r
-\r
-/** \r
-  * @brief  Bit definition of RDES2 register  \r
-  */ \r
-#define ETH_DMARXDESC_B1AP  ((uint32_t)0xFFFFFFFFU)  /*!< Buffer1 Address Pointer */\r
-\r
-/** \r
-  * @brief  Bit definition of RDES3 register  \r
-  */ \r
-#define ETH_DMARXDESC_B2AP  ((uint32_t)0xFFFFFFFFU)  /*!< Buffer2 Address Pointer */\r
-\r
-/*---------------------------------------------------------------------------------------------------------------------\r
-  RDES4 |                   Reserved[31:15]              |             Extended Status [14:0]                          |\r
-  ---------------------------------------------------------------------------------------------------------------------\r
-  RDES5 |                                            Reserved[31:0]                                                    |\r
-  ---------------------------------------------------------------------------------------------------------------------\r
-  RDES6 |                                       Receive Time Stamp Low [31:0]                                          |\r
-  ---------------------------------------------------------------------------------------------------------------------\r
-  RDES7 |                                       Receive Time Stamp High [31:0]                                         |\r
-  --------------------------------------------------------------------------------------------------------------------*/\r
-\r
-/* Bit definition of RDES4 register */\r
-#define ETH_DMAPTPRXDESC_PTPV                            ((uint32_t)0x00002000U)  /* PTP Version */\r
-#define ETH_DMAPTPRXDESC_PTPFT                           ((uint32_t)0x00001000U)  /* PTP Frame Type */\r
-#define ETH_DMAPTPRXDESC_PTPMT                           ((uint32_t)0x00000F00U)  /* PTP Message Type */\r
-#define ETH_DMAPTPRXDESC_PTPMT_SYNC                      ((uint32_t)0x00000100U)  /* SYNC message (all clock types) */\r
-#define ETH_DMAPTPRXDESC_PTPMT_FOLLOWUP                  ((uint32_t)0x00000200U)  /* FollowUp message (all clock types) */ \r
-#define ETH_DMAPTPRXDESC_PTPMT_DELAYREQ                  ((uint32_t)0x00000300U)  /* DelayReq message (all clock types) */ \r
-#define ETH_DMAPTPRXDESC_PTPMT_DELAYRESP                 ((uint32_t)0x00000400U)  /* DelayResp message (all clock types) */ \r
-#define ETH_DMAPTPRXDESC_PTPMT_PDELAYREQ_ANNOUNCE        ((uint32_t)0x00000500U)  /* PdelayReq message (peer-to-peer transparent clock) or Announce message (Ordinary or Boundary clock) */ \r
-#define ETH_DMAPTPRXDESC_PTPMT_PDELAYRESP_MANAG          ((uint32_t)0x00000600U)  /* PdelayResp message (peer-to-peer transparent clock) or Management message (Ordinary or Boundary clock)  */ \r
-#define ETH_DMAPTPRXDESC_PTPMT_PDELAYRESPFOLLOWUP_SIGNAL ((uint32_t)0x00000700U)  /* PdelayRespFollowUp message (peer-to-peer transparent clock) or Signaling message (Ordinary or Boundary clock) */           \r
-#define ETH_DMAPTPRXDESC_IPV6PR                          ((uint32_t)0x00000080U)  /* IPv6 Packet Received */\r
-#define ETH_DMAPTPRXDESC_IPV4PR                          ((uint32_t)0x00000040U)  /* IPv4 Packet Received */\r
-#define ETH_DMAPTPRXDESC_IPCB                            ((uint32_t)0x00000020U)  /* IP Checksum Bypassed */\r
-#define ETH_DMAPTPRXDESC_IPPE                            ((uint32_t)0x00000010U)  /* IP Payload Error */\r
-#define ETH_DMAPTPRXDESC_IPHE                            ((uint32_t)0x00000008U)  /* IP Header Error */\r
-#define ETH_DMAPTPRXDESC_IPPT                            ((uint32_t)0x00000007U)  /* IP Payload Type */\r
-#define ETH_DMAPTPRXDESC_IPPT_UDP                        ((uint32_t)0x00000001U)  /* UDP payload encapsulated in the IP datagram */\r
-#define ETH_DMAPTPRXDESC_IPPT_TCP                        ((uint32_t)0x00000002U)  /* TCP payload encapsulated in the IP datagram */ \r
-#define ETH_DMAPTPRXDESC_IPPT_ICMP                       ((uint32_t)0x00000003U)  /* ICMP payload encapsulated in the IP datagram */\r
-\r
-/* Bit definition of RDES6 register */\r
-#define ETH_DMAPTPRXDESC_RTSL  ((uint32_t)0xFFFFFFFFU)  /* Receive Time Stamp Low */\r
-\r
-/* Bit definition of RDES7 register */\r
-#define ETH_DMAPTPRXDESC_RTSH  ((uint32_t)0xFFFFFFFFU)  /* Receive Time Stamp High */\r
-/**\r
-  * @}\r
-  */\r
- /** @defgroup ETH_AutoNegotiation ETH AutoNegotiation \r
-  * @{\r
-  */ \r
-#define ETH_AUTONEGOTIATION_ENABLE     ((uint32_t)0x00000001U)\r
-#define ETH_AUTONEGOTIATION_DISABLE    ((uint32_t)0x00000000U)\r
-\r
-/**\r
-  * @}\r
-  */\r
-/** @defgroup ETH_Speed ETH Speed \r
-  * @{\r
-  */ \r
-#define ETH_SPEED_10M        ((uint32_t)0x00000000U)\r
-#define ETH_SPEED_100M       ((uint32_t)0x00004000U)\r
-\r
-/**\r
-  * @}\r
-  */\r
-/** @defgroup ETH_Duplex_Mode ETH Duplex Mode\r
-  * @{\r
-  */ \r
-#define ETH_MODE_FULLDUPLEX       ((uint32_t)0x00000800U)\r
-#define ETH_MODE_HALFDUPLEX       ((uint32_t)0x00000000U)\r
-/**\r
-  * @}\r
-  */\r
-/** @defgroup ETH_Rx_Mode ETH Rx Mode\r
-  * @{\r
-  */ \r
-#define ETH_RXPOLLING_MODE      ((uint32_t)0x00000000U)\r
-#define ETH_RXINTERRUPT_MODE    ((uint32_t)0x00000001U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Checksum_Mode ETH Checksum Mode\r
-  * @{\r
-  */ \r
-#define ETH_CHECKSUM_BY_HARDWARE      ((uint32_t)0x00000000U)\r
-#define ETH_CHECKSUM_BY_SOFTWARE      ((uint32_t)0x00000001U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Media_Interface ETH Media Interface\r
-  * @{\r
-  */ \r
-#define ETH_MEDIA_INTERFACE_MII       ((uint32_t)0x00000000U)\r
-#define ETH_MEDIA_INTERFACE_RMII      ((uint32_t)SYSCFG_PMC_MII_RMII_SEL)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Watchdog ETH Watchdog \r
-  * @{\r
-  */ \r
-#define ETH_WATCHDOG_ENABLE       ((uint32_t)0x00000000U)\r
-#define ETH_WATCHDOG_DISABLE      ((uint32_t)0x00800000U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Jabber ETH Jabber\r
-  * @{\r
-  */ \r
-#define ETH_JABBER_ENABLE    ((uint32_t)0x00000000U)\r
-#define ETH_JABBER_DISABLE   ((uint32_t)0x00400000U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Inter_Frame_Gap ETH Inter Frame Gap \r
-  * @{\r
-  */ \r
-#define ETH_INTERFRAMEGAP_96BIT   ((uint32_t)0x00000000U)  /*!< minimum IFG between frames during transmission is 96Bit */\r
-#define ETH_INTERFRAMEGAP_88BIT   ((uint32_t)0x00020000U)  /*!< minimum IFG between frames during transmission is 88Bit */\r
-#define ETH_INTERFRAMEGAP_80BIT   ((uint32_t)0x00040000U)  /*!< minimum IFG between frames during transmission is 80Bit */\r
-#define ETH_INTERFRAMEGAP_72BIT   ((uint32_t)0x00060000U)  /*!< minimum IFG between frames during transmission is 72Bit */\r
-#define ETH_INTERFRAMEGAP_64BIT   ((uint32_t)0x00080000U)  /*!< minimum IFG between frames during transmission is 64Bit */\r
-#define ETH_INTERFRAMEGAP_56BIT   ((uint32_t)0x000A0000U)  /*!< minimum IFG between frames during transmission is 56Bit */\r
-#define ETH_INTERFRAMEGAP_48BIT   ((uint32_t)0x000C0000U)  /*!< minimum IFG between frames during transmission is 48Bit */\r
-#define ETH_INTERFRAMEGAP_40BIT   ((uint32_t)0x000E0000U)  /*!< minimum IFG between frames during transmission is 40Bit */\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Carrier_Sense ETH Carrier Sense\r
-  * @{\r
-  */ \r
-#define ETH_CARRIERSENCE_ENABLE   ((uint32_t)0x00000000U)\r
-#define ETH_CARRIERSENCE_DISABLE  ((uint32_t)0x00010000U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Receive_Own ETH Receive Own \r
-  * @{\r
-  */ \r
-#define ETH_RECEIVEOWN_ENABLE     ((uint32_t)0x00000000U)\r
-#define ETH_RECEIVEOWN_DISABLE    ((uint32_t)0x00002000U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Loop_Back_Mode ETH Loop Back Mode \r
-  * @{\r
-  */ \r
-#define ETH_LOOPBACKMODE_ENABLE        ((uint32_t)0x00001000U)\r
-#define ETH_LOOPBACKMODE_DISABLE       ((uint32_t)0x00000000U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Checksum_Offload ETH Checksum Offload\r
-  * @{\r
-  */ \r
-#define ETH_CHECKSUMOFFLAOD_ENABLE     ((uint32_t)0x00000400U)\r
-#define ETH_CHECKSUMOFFLAOD_DISABLE    ((uint32_t)0x00000000U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Retry_Transmission ETH Retry Transmission\r
-  * @{\r
-  */ \r
-#define ETH_RETRYTRANSMISSION_ENABLE   ((uint32_t)0x00000000U)\r
-#define ETH_RETRYTRANSMISSION_DISABLE  ((uint32_t)0x00000200U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Automatic_Pad_CRC_Strip ETH Automatic Pad CRC Strip\r
-  * @{\r
-  */ \r
-#define ETH_AUTOMATICPADCRCSTRIP_ENABLE     ((uint32_t)0x00000080U)\r
-#define ETH_AUTOMATICPADCRCSTRIP_DISABLE    ((uint32_t)0x00000000U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Back_Off_Limit ETH Back Off Limit\r
-  * @{\r
-  */ \r
-#define ETH_BACKOFFLIMIT_10  ((uint32_t)0x00000000U)\r
-#define ETH_BACKOFFLIMIT_8   ((uint32_t)0x00000020U)\r
-#define ETH_BACKOFFLIMIT_4   ((uint32_t)0x00000040U)\r
-#define ETH_BACKOFFLIMIT_1   ((uint32_t)0x00000060U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Deferral_Check ETH Deferral Check\r
-  * @{\r
-  */\r
-#define ETH_DEFFERRALCHECK_ENABLE       ((uint32_t)0x00000010U)\r
-#define ETH_DEFFERRALCHECK_DISABLE      ((uint32_t)0x00000000U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Receive_All ETH Receive All\r
-  * @{\r
-  */ \r
-#define ETH_RECEIVEALL_ENABLE     ((uint32_t)0x80000000U)\r
-#define ETH_RECEIVEAll_DISABLE    ((uint32_t)0x00000000U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Source_Addr_Filter ETH Source Addr Filter\r
-  * @{\r
-  */ \r
-#define ETH_SOURCEADDRFILTER_NORMAL_ENABLE       ((uint32_t)0x00000200U)\r
-#define ETH_SOURCEADDRFILTER_INVERSE_ENABLE      ((uint32_t)0x00000300U)\r
-#define ETH_SOURCEADDRFILTER_DISABLE             ((uint32_t)0x00000000U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Pass_Control_Frames ETH Pass Control Frames\r
-  * @{\r
-  */ \r
-#define ETH_PASSCONTROLFRAMES_BLOCKALL                ((uint32_t)0x00000040U)  /*!< MAC filters all control frames from reaching the application */\r
-#define ETH_PASSCONTROLFRAMES_FORWARDALL              ((uint32_t)0x00000080U)  /*!< MAC forwards all control frames to application even if they fail the Address Filter */\r
-#define ETH_PASSCONTROLFRAMES_FORWARDPASSEDADDRFILTER ((uint32_t)0x000000C0U)  /*!< MAC forwards control frames that pass the Address Filter. */ \r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Broadcast_Frames_Reception ETH Broadcast Frames Reception\r
-  * @{\r
-  */ \r
-#define ETH_BROADCASTFRAMESRECEPTION_ENABLE     ((uint32_t)0x00000000U)\r
-#define ETH_BROADCASTFRAMESRECEPTION_DISABLE    ((uint32_t)0x00000020U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Destination_Addr_Filter ETH Destination Addr Filter\r
-  * @{\r
-  */ \r
-#define ETH_DESTINATIONADDRFILTER_NORMAL    ((uint32_t)0x00000000U)\r
-#define ETH_DESTINATIONADDRFILTER_INVERSE   ((uint32_t)0x00000008U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Promiscuous_Mode ETH Promiscuous Mode\r
-  * @{\r
-  */ \r
-#define ETH_PROMISCUOUS_MODE_ENABLE     ((uint32_t)0x00000001U)\r
-#define ETH_PROMISCUOUS_MODE_DISABLE    ((uint32_t)0x00000000U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Multicast_Frames_Filter ETH Multicast Frames Filter\r
-  * @{\r
-  */ \r
-#define ETH_MULTICASTFRAMESFILTER_PERFECTHASHTABLE    ((uint32_t)0x00000404U)\r
-#define ETH_MULTICASTFRAMESFILTER_HASHTABLE           ((uint32_t)0x00000004U)\r
-#define ETH_MULTICASTFRAMESFILTER_PERFECT             ((uint32_t)0x00000000U)\r
-#define ETH_MULTICASTFRAMESFILTER_NONE                ((uint32_t)0x00000010U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Unicast_Frames_Filter ETH Unicast Frames Filter\r
-  * @{\r
-  */ \r
-#define ETH_UNICASTFRAMESFILTER_PERFECTHASHTABLE ((uint32_t)0x00000402U)\r
-#define ETH_UNICASTFRAMESFILTER_HASHTABLE        ((uint32_t)0x00000002U)\r
-#define ETH_UNICASTFRAMESFILTER_PERFECT          ((uint32_t)0x00000000U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Zero_Quanta_Pause ETH Zero Quanta Pause \r
-  * @{\r
-  */ \r
-#define ETH_ZEROQUANTAPAUSE_ENABLE     ((uint32_t)0x00000000U)\r
-#define ETH_ZEROQUANTAPAUSE_DISABLE    ((uint32_t)0x00000080U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Pause_Low_Threshold ETH Pause Low Threshold\r
-  * @{\r
-  */ \r
-#define ETH_PAUSELOWTHRESHOLD_MINUS4        ((uint32_t)0x00000000U)  /*!< Pause time minus 4 slot times */\r
-#define ETH_PAUSELOWTHRESHOLD_MINUS28       ((uint32_t)0x00000010U)  /*!< Pause time minus 28 slot times */\r
-#define ETH_PAUSELOWTHRESHOLD_MINUS144      ((uint32_t)0x00000020U)  /*!< Pause time minus 144 slot times */\r
-#define ETH_PAUSELOWTHRESHOLD_MINUS256      ((uint32_t)0x00000030U)  /*!< Pause time minus 256 slot times */\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Unicast_Pause_Frame_Detect ETH Unicast Pause Frame Detect\r
-  * @{\r
-  */ \r
-#define ETH_UNICASTPAUSEFRAMEDETECT_ENABLE  ((uint32_t)0x00000008U)\r
-#define ETH_UNICASTPAUSEFRAMEDETECT_DISABLE ((uint32_t)0x00000000U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Receive_Flow_Control ETH Receive Flow Control\r
-  * @{\r
-  */ \r
-#define ETH_RECEIVEFLOWCONTROL_ENABLE       ((uint32_t)0x00000004U)\r
-#define ETH_RECEIVEFLOWCONTROL_DISABLE      ((uint32_t)0x00000000U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Transmit_Flow_Control ETH Transmit Flow Control\r
-  * @{\r
-  */ \r
-#define ETH_TRANSMITFLOWCONTROL_ENABLE      ((uint32_t)0x00000002U)\r
-#define ETH_TRANSMITFLOWCONTROL_DISABLE     ((uint32_t)0x00000000U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_VLAN_Tag_Comparison ETH VLAN Tag Comparison\r
-  * @{\r
-  */ \r
-#define ETH_VLANTAGCOMPARISON_12BIT    ((uint32_t)0x00010000U)\r
-#define ETH_VLANTAGCOMPARISON_16BIT    ((uint32_t)0x00000000U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_MAC_addresses ETH MAC addresses\r
-  * @{\r
-  */ \r
-#define ETH_MAC_ADDRESS0     ((uint32_t)0x00000000U)\r
-#define ETH_MAC_ADDRESS1     ((uint32_t)0x00000008U)\r
-#define ETH_MAC_ADDRESS2     ((uint32_t)0x00000010U)\r
-#define ETH_MAC_ADDRESS3     ((uint32_t)0x00000018U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_MAC_addresses_filter_SA_DA ETH MAC addresses filter SA DA \r
-  * @{\r
-  */ \r
-#define ETH_MAC_ADDRESSFILTER_SA       ((uint32_t)0x00000000U)\r
-#define ETH_MAC_ADDRESSFILTER_DA       ((uint32_t)0x00000008U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_MAC_addresses_filter_Mask_bytes ETH MAC addresses filter Mask bytes\r
-  * @{\r
-  */ \r
-#define ETH_MAC_ADDRESSMASK_BYTE6      ((uint32_t)0x20000000U)  /*!< Mask MAC Address high reg bits [15:8] */\r
-#define ETH_MAC_ADDRESSMASK_BYTE5      ((uint32_t)0x10000000U)  /*!< Mask MAC Address high reg bits [7:0] */\r
-#define ETH_MAC_ADDRESSMASK_BYTE4      ((uint32_t)0x08000000U)  /*!< Mask MAC Address low reg bits [31:24] */\r
-#define ETH_MAC_ADDRESSMASK_BYTE3      ((uint32_t)0x04000000U)  /*!< Mask MAC Address low reg bits [23:16] */\r
-#define ETH_MAC_ADDRESSMASK_BYTE2      ((uint32_t)0x02000000U)  /*!< Mask MAC Address low reg bits [15:8] */\r
-#define ETH_MAC_ADDRESSMASK_BYTE1      ((uint32_t)0x01000000U)  /*!< Mask MAC Address low reg bits [70] */\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_MAC_Debug_flags ETH MAC Debug flags\r
-  * @{\r
-  */ \r
-#define ETH_MAC_TXFIFO_FULL          ((uint32_t)0x02000000)  /* Tx FIFO full */\r
-#define ETH_MAC_TXFIFONOT_EMPTY      ((uint32_t)0x01000000)  /* Tx FIFO not empty */\r
-#define ETH_MAC_TXFIFO_WRITE_ACTIVE  ((uint32_t)0x00400000)  /* Tx FIFO write active */\r
-#define ETH_MAC_TXFIFO_IDLE     ((uint32_t)0x00000000)  /* Tx FIFO read status: Idle */\r
-#define ETH_MAC_TXFIFO_READ     ((uint32_t)0x00100000)  /* Tx FIFO read status: Read (transferring data to the MAC transmitter) */\r
-#define ETH_MAC_TXFIFO_WAITING  ((uint32_t)0x00200000)  /* Tx FIFO read status: Waiting for TxStatus from MAC transmitter */\r
-#define ETH_MAC_TXFIFO_WRITING  ((uint32_t)0x00300000)  /* Tx FIFO read status: Writing the received TxStatus or flushing the TxFIFO */\r
-#define ETH_MAC_TRANSMISSION_PAUSE     ((uint32_t)0x00080000)  /* MAC transmitter in pause */\r
-#define ETH_MAC_TRANSMITFRAMECONTROLLER_IDLE            ((uint32_t)0x00000000)  /* MAC transmit frame controller: Idle */\r
-#define ETH_MAC_TRANSMITFRAMECONTROLLER_WAITING         ((uint32_t)0x00020000)  /* MAC transmit frame controller: Waiting for Status of previous frame or IFG/backoff period to be over */\r
-#define ETH_MAC_TRANSMITFRAMECONTROLLER_GENRATING_PCF   ((uint32_t)0x00040000)  /* MAC transmit frame controller: Generating and transmitting a Pause control frame (in full duplex mode) */\r
-#define ETH_MAC_TRANSMITFRAMECONTROLLER_TRANSFERRING    ((uint32_t)0x00060000)  /* MAC transmit frame controller: Transferring input frame for transmission */\r
-#define ETH_MAC_MII_TRANSMIT_ACTIVE      ((uint32_t)0x00010000)  /* MAC MII transmit engine active */\r
-#define ETH_MAC_RXFIFO_EMPTY             ((uint32_t)0x00000000)  /* Rx FIFO fill level: empty */\r
-#define ETH_MAC_RXFIFO_BELOW_THRESHOLD   ((uint32_t)0x00000100)  /* Rx FIFO fill level: fill-level below flow-control de-activate threshold */\r
-#define ETH_MAC_RXFIFO_ABOVE_THRESHOLD   ((uint32_t)0x00000200)  /* Rx FIFO fill level: fill-level above flow-control activate threshold */\r
-#define ETH_MAC_RXFIFO_FULL              ((uint32_t)0x00000300)  /* Rx FIFO fill level: full */\r
-#define ETH_MAC_READCONTROLLER_IDLE            ((uint32_t)0x00000060)  /* Rx FIFO read controller IDLE state */\r
-#define ETH_MAC_READCONTROLLER_READING_DATA    ((uint32_t)0x00000060)  /* Rx FIFO read controller Reading frame data */\r
-#define ETH_MAC_READCONTROLLER_READING_STATUS  ((uint32_t)0x00000060)  /* Rx FIFO read controller Reading frame status (or time-stamp) */\r
-#define ETH_MAC_READCONTROLLER_ FLUSHING       ((uint32_t)0x00000060)  /* Rx FIFO read controller Flushing the frame data and status */\r
-#define ETH_MAC_RXFIFO_WRITE_ACTIVE     ((uint32_t)0x00000010)  /* Rx FIFO write controller active */\r
-#define ETH_MAC_SMALL_FIFO_NOTACTIVE    ((uint32_t)0x00000000)  /* MAC small FIFO read / write controllers not active */\r
-#define ETH_MAC_SMALL_FIFO_READ_ACTIVE  ((uint32_t)0x00000002)  /* MAC small FIFO read controller active */\r
-#define ETH_MAC_SMALL_FIFO_WRITE_ACTIVE ((uint32_t)0x00000004)  /* MAC small FIFO write controller active */\r
-#define ETH_MAC_SMALL_FIFO_RW_ACTIVE    ((uint32_t)0x00000006)  /* MAC small FIFO read / write controllers active */\r
-#define ETH_MAC_MII_RECEIVE_PROTOCOL_ACTIVE   ((uint32_t)0x00000001)  /* MAC MII receive protocol engine active */\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Drop_TCP_IP_Checksum_Error_Frame ETH Drop TCP IP Checksum Error Frame\r
-  * @{\r
-  */ \r
-#define ETH_DROPTCPIPCHECKSUMERRORFRAME_ENABLE   ((uint32_t)0x00000000U)\r
-#define ETH_DROPTCPIPCHECKSUMERRORFRAME_DISABLE  ((uint32_t)0x04000000U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Receive_Store_Forward ETH Receive Store Forward\r
-  * @{\r
-  */ \r
-#define ETH_RECEIVESTOREFORWARD_ENABLE      ((uint32_t)0x02000000U)\r
-#define ETH_RECEIVESTOREFORWARD_DISABLE     ((uint32_t)0x00000000U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Flush_Received_Frame ETH Flush Received Frame\r
-  * @{\r
-  */ \r
-#define ETH_FLUSHRECEIVEDFRAME_ENABLE       ((uint32_t)0x00000000U)\r
-#define ETH_FLUSHRECEIVEDFRAME_DISABLE      ((uint32_t)0x01000000U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Transmit_Store_Forward ETH Transmit Store Forward\r
-  * @{\r
-  */ \r
-#define ETH_TRANSMITSTOREFORWARD_ENABLE     ((uint32_t)0x00200000U)\r
-#define ETH_TRANSMITSTOREFORWARD_DISABLE    ((uint32_t)0x00000000U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Transmit_Threshold_Control ETH Transmit Threshold Control\r
-  * @{\r
-  */ \r
-#define ETH_TRANSMITTHRESHOLDCONTROL_64BYTES     ((uint32_t)0x00000000U)  /*!< threshold level of the MTL Transmit FIFO is 64 Bytes */\r
-#define ETH_TRANSMITTHRESHOLDCONTROL_128BYTES    ((uint32_t)0x00004000U)  /*!< threshold level of the MTL Transmit FIFO is 128 Bytes */\r
-#define ETH_TRANSMITTHRESHOLDCONTROL_192BYTES    ((uint32_t)0x00008000U)  /*!< threshold level of the MTL Transmit FIFO is 192 Bytes */\r
-#define ETH_TRANSMITTHRESHOLDCONTROL_256BYTES    ((uint32_t)0x0000C000U)  /*!< threshold level of the MTL Transmit FIFO is 256 Bytes */\r
-#define ETH_TRANSMITTHRESHOLDCONTROL_40BYTES     ((uint32_t)0x00010000U)  /*!< threshold level of the MTL Transmit FIFO is 40 Bytes */\r
-#define ETH_TRANSMITTHRESHOLDCONTROL_32BYTES     ((uint32_t)0x00014000U)  /*!< threshold level of the MTL Transmit FIFO is 32 Bytes */\r
-#define ETH_TRANSMITTHRESHOLDCONTROL_24BYTES     ((uint32_t)0x00018000U)  /*!< threshold level of the MTL Transmit FIFO is 24 Bytes */\r
-#define ETH_TRANSMITTHRESHOLDCONTROL_16BYTES     ((uint32_t)0x0001C000U)  /*!< threshold level of the MTL Transmit FIFO is 16 Bytes */\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Forward_Error_Frames ETH Forward Error Frames\r
-  * @{\r
-  */ \r
-#define ETH_FORWARDERRORFRAMES_ENABLE       ((uint32_t)0x00000080U)\r
-#define ETH_FORWARDERRORFRAMES_DISABLE      ((uint32_t)0x00000000U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Forward_Undersized_Good_Frames ETH Forward Undersized Good Frames\r
-  * @{\r
-  */ \r
-#define ETH_FORWARDUNDERSIZEDGOODFRAMES_ENABLE   ((uint32_t)0x00000040U)\r
-#define ETH_FORWARDUNDERSIZEDGOODFRAMES_DISABLE  ((uint32_t)0x00000000U)     \r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Receive_Threshold_Control ETH Receive Threshold Control\r
-  * @{\r
-  */ \r
-#define ETH_RECEIVEDTHRESHOLDCONTROL_64BYTES      ((uint32_t)0x00000000U)  /*!< threshold level of the MTL Receive FIFO is 64 Bytes */\r
-#define ETH_RECEIVEDTHRESHOLDCONTROL_32BYTES      ((uint32_t)0x00000008U)  /*!< threshold level of the MTL Receive FIFO is 32 Bytes */\r
-#define ETH_RECEIVEDTHRESHOLDCONTROL_96BYTES      ((uint32_t)0x00000010U)  /*!< threshold level of the MTL Receive FIFO is 96 Bytes */\r
-#define ETH_RECEIVEDTHRESHOLDCONTROL_128BYTES     ((uint32_t)0x00000018U)  /*!< threshold level of the MTL Receive FIFO is 128 Bytes */\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Second_Frame_Operate ETH Second Frame Operate\r
-  * @{\r
-  */ \r
-#define ETH_SECONDFRAMEOPERARTE_ENABLE       ((uint32_t)0x00000004U)\r
-#define ETH_SECONDFRAMEOPERARTE_DISABLE      ((uint32_t)0x00000000U)  \r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Address_Aligned_Beats ETH Address Aligned Beats \r
-  * @{\r
-  */ \r
-#define ETH_ADDRESSALIGNEDBEATS_ENABLE      ((uint32_t)0x02000000U)\r
-#define ETH_ADDRESSALIGNEDBEATS_DISABLE     ((uint32_t)0x00000000U) \r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Fixed_Burst ETH Fixed Burst\r
-  * @{\r
-  */ \r
-#define ETH_FIXEDBURST_ENABLE     ((uint32_t)0x00010000U)\r
-#define ETH_FIXEDBURST_DISABLE    ((uint32_t)0x00000000U) \r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Rx_DMA_Burst_Length ETH Rx DMA Burst Length\r
-  * @{\r
-  */ \r
-#define ETH_RXDMABURSTLENGTH_1BEAT          ((uint32_t)0x00020000U)  /*!< maximum number of beats to be transferred in one RxDMA transaction is 1 */\r
-#define ETH_RXDMABURSTLENGTH_2BEAT          ((uint32_t)0x00040000U)  /*!< maximum number of beats to be transferred in one RxDMA transaction is 2 */\r
-#define ETH_RXDMABURSTLENGTH_4BEAT          ((uint32_t)0x00080000U)  /*!< maximum number of beats to be transferred in one RxDMA transaction is 4 */\r
-#define ETH_RXDMABURSTLENGTH_8BEAT          ((uint32_t)0x00100000U)  /*!< maximum number of beats to be transferred in one RxDMA transaction is 8 */\r
-#define ETH_RXDMABURSTLENGTH_16BEAT         ((uint32_t)0x00200000U)  /*!< maximum number of beats to be transferred in one RxDMA transaction is 16 */\r
-#define ETH_RXDMABURSTLENGTH_32BEAT         ((uint32_t)0x00400000U)  /*!< maximum number of beats to be transferred in one RxDMA transaction is 32 */                \r
-#define ETH_RXDMABURSTLENGTH_4XPBL_4BEAT    ((uint32_t)0x01020000U)  /*!< maximum number of beats to be transferred in one RxDMA transaction is 4 */\r
-#define ETH_RXDMABURSTLENGTH_4XPBL_8BEAT    ((uint32_t)0x01040000U)  /*!< maximum number of beats to be transferred in one RxDMA transaction is 8 */\r
-#define ETH_RXDMABURSTLENGTH_4XPBL_16BEAT   ((uint32_t)0x01080000U)  /*!< maximum number of beats to be transferred in one RxDMA transaction is 16 */\r
-#define ETH_RXDMABURSTLENGTH_4XPBL_32BEAT   ((uint32_t)0x01100000U)  /*!< maximum number of beats to be transferred in one RxDMA transaction is 32 */\r
-#define ETH_RXDMABURSTLENGTH_4XPBL_64BEAT   ((uint32_t)0x01200000U)  /*!< maximum number of beats to be transferred in one RxDMA transaction is 64 */\r
-#define ETH_RXDMABURSTLENGTH_4XPBL_128BEAT  ((uint32_t)0x01400000U)  /*!< maximum number of beats to be transferred in one RxDMA transaction is 128 */\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Tx_DMA_Burst_Length ETH Tx DMA Burst Length\r
-  * @{\r
-  */ \r
-#define ETH_TXDMABURSTLENGTH_1BEAT          ((uint32_t)0x00000100U)  /*!< maximum number of beats to be transferred in one TxDMA (or both) transaction is 1 */\r
-#define ETH_TXDMABURSTLENGTH_2BEAT          ((uint32_t)0x00000200U)  /*!< maximum number of beats to be transferred in one TxDMA (or both) transaction is 2 */\r
-#define ETH_TXDMABURSTLENGTH_4BEAT          ((uint32_t)0x00000400U)  /*!< maximum number of beats to be transferred in one TxDMA (or both) transaction is 4 */\r
-#define ETH_TXDMABURSTLENGTH_8BEAT          ((uint32_t)0x00000800U)  /*!< maximum number of beats to be transferred in one TxDMA (or both) transaction is 8 */\r
-#define ETH_TXDMABURSTLENGTH_16BEAT         ((uint32_t)0x00001000U)  /*!< maximum number of beats to be transferred in one TxDMA (or both) transaction is 16 */\r
-#define ETH_TXDMABURSTLENGTH_32BEAT         ((uint32_t)0x00002000U)  /*!< maximum number of beats to be transferred in one TxDMA (or both) transaction is 32 */                \r
-#define ETH_TXDMABURSTLENGTH_4XPBL_4BEAT    ((uint32_t)0x01000100U)  /*!< maximum number of beats to be transferred in one TxDMA (or both) transaction is 4 */\r
-#define ETH_TXDMABURSTLENGTH_4XPBL_8BEAT    ((uint32_t)0x01000200U)  /*!< maximum number of beats to be transferred in one TxDMA (or both) transaction is 8 */\r
-#define ETH_TXDMABURSTLENGTH_4XPBL_16BEAT   ((uint32_t)0x01000400U)  /*!< maximum number of beats to be transferred in one TxDMA (or both) transaction is 16 */\r
-#define ETH_TXDMABURSTLENGTH_4XPBL_32BEAT   ((uint32_t)0x01000800U)  /*!< maximum number of beats to be transferred in one TxDMA (or both) transaction is 32 */\r
-#define ETH_TXDMABURSTLENGTH_4XPBL_64BEAT   ((uint32_t)0x01001000U)  /*!< maximum number of beats to be transferred in one TxDMA (or both) transaction is 64 */\r
-#define ETH_TXDMABURSTLENGTH_4XPBL_128BEAT  ((uint32_t)0x01002000U)  /*!< maximum number of beats to be transferred in one TxDMA (or both) transaction is 128 */\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_DMA_Enhanced_descriptor_format ETH DMA Enhanced descriptor format\r
-  * @{\r
-  */  \r
-#define ETH_DMAENHANCEDDESCRIPTOR_ENABLE              ((uint32_t)0x00000080U)\r
-#define ETH_DMAENHANCEDDESCRIPTOR_DISABLE             ((uint32_t)0x00000000U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_DMA_Arbitration ETH DMA Arbitration\r
-  * @{\r
-  */ \r
-#define ETH_DMAARBITRATION_ROUNDROBIN_RXTX_1_1   ((uint32_t)0x00000000U)\r
-#define ETH_DMAARBITRATION_ROUNDROBIN_RXTX_2_1   ((uint32_t)0x00004000U)\r
-#define ETH_DMAARBITRATION_ROUNDROBIN_RXTX_3_1   ((uint32_t)0x00008000U)\r
-#define ETH_DMAARBITRATION_ROUNDROBIN_RXTX_4_1   ((uint32_t)0x0000C000U)\r
-#define ETH_DMAARBITRATION_RXPRIORTX             ((uint32_t)0x00000002U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_DMA_Tx_descriptor_segment ETH DMA Tx descriptor segment\r
-  * @{\r
-  */ \r
-#define ETH_DMATXDESC_LASTSEGMENTS      ((uint32_t)0x40000000U)  /*!< Last Segment */\r
-#define ETH_DMATXDESC_FIRSTSEGMENT      ((uint32_t)0x20000000U)  /*!< First Segment */\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_DMA_Tx_descriptor_Checksum_Insertion_Control ETH DMA Tx descriptor Checksum Insertion Control\r
-  * @{\r
-  */ \r
-#define ETH_DMATXDESC_CHECKSUMBYPASS             ((uint32_t)0x00000000U)   /*!< Checksum engine bypass */\r
-#define ETH_DMATXDESC_CHECKSUMIPV4HEADER         ((uint32_t)0x00400000U)   /*!< IPv4 header checksum insertion  */\r
-#define ETH_DMATXDESC_CHECKSUMTCPUDPICMPSEGMENT  ((uint32_t)0x00800000U)   /*!< TCP/UDP/ICMP checksum insertion. Pseudo header checksum is assumed to be present */\r
-#define ETH_DMATXDESC_CHECKSUMTCPUDPICMPFULL     ((uint32_t)0x00C00000U)   /*!< TCP/UDP/ICMP checksum fully in hardware including pseudo header */\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_DMA_Rx_descriptor_buffers ETH DMA Rx descriptor buffers \r
-  * @{\r
-  */ \r
-#define ETH_DMARXDESC_BUFFER1     ((uint32_t)0x00000000U)  /*!< DMA Rx Desc Buffer1 */\r
-#define ETH_DMARXDESC_BUFFER2     ((uint32_t)0x00000001U)  /*!< DMA Rx Desc Buffer2 */\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_PMT_Flags ETH PMT Flags\r
-  * @{\r
-  */ \r
-#define ETH_PMT_FLAG_WUFFRPR      ((uint32_t)0x80000000U)  /*!< Wake-Up Frame Filter Register Pointer Reset */\r
-#define ETH_PMT_FLAG_WUFR         ((uint32_t)0x00000040U)  /*!< Wake-Up Frame Received */\r
-#define ETH_PMT_FLAG_MPR          ((uint32_t)0x00000020U)  /*!< Magic Packet Received */\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_MMC_Tx_Interrupts ETH MMC Tx Interrupts\r
-  * @{\r
-  */ \r
-#define ETH_MMC_IT_TGF       ((uint32_t)0x00200000U)  /*!< When Tx good frame counter reaches half the maximum value */\r
-#define ETH_MMC_IT_TGFMSC    ((uint32_t)0x00008000U)  /*!< When Tx good multi col counter reaches half the maximum value */\r
-#define ETH_MMC_IT_TGFSC     ((uint32_t)0x00004000U)  /*!< When Tx good single col counter reaches half the maximum value */\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_MMC_Rx_Interrupts ETH MMC Rx Interrupts\r
-  * @{\r
-  */\r
-#define ETH_MMC_IT_RGUF      ((uint32_t)0x10020000U)  /*!< When Rx good unicast frames counter reaches half the maximum value */\r
-#define ETH_MMC_IT_RFAE      ((uint32_t)0x10000040U)  /*!< When Rx alignment error counter reaches half the maximum value */\r
-#define ETH_MMC_IT_RFCE      ((uint32_t)0x10000020U)  /*!< When Rx crc error counter reaches half the maximum value */\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_MAC_Flags ETH MAC Flags\r
-  * @{\r
-  */ \r
-#define ETH_MAC_FLAG_TST     ((uint32_t)0x00000200U)  /*!< Time stamp trigger flag (on MAC) */\r
-#define ETH_MAC_FLAG_MMCT    ((uint32_t)0x00000040U)  /*!< MMC transmit flag  */\r
-#define ETH_MAC_FLAG_MMCR    ((uint32_t)0x00000020U)  /*!< MMC receive flag */\r
-#define ETH_MAC_FLAG_MMC     ((uint32_t)0x00000010U)  /*!< MMC flag (on MAC) */\r
-#define ETH_MAC_FLAG_PMT     ((uint32_t)0x00000008U)  /*!< PMT flag (on MAC) */\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_DMA_Flags ETH DMA Flags\r
-  * @{\r
-  */ \r
-#define ETH_DMA_FLAG_TST               ((uint32_t)0x20000000U)  /*!< Time-stamp trigger interrupt (on DMA) */\r
-#define ETH_DMA_FLAG_PMT               ((uint32_t)0x10000000U)  /*!< PMT interrupt (on DMA) */\r
-#define ETH_DMA_FLAG_MMC               ((uint32_t)0x08000000U)  /*!< MMC interrupt (on DMA) */\r
-#define ETH_DMA_FLAG_DATATRANSFERERROR ((uint32_t)0x00800000U)  /*!< Error bits 0-Rx DMA, 1-Tx DMA */\r
-#define ETH_DMA_FLAG_READWRITEERROR    ((uint32_t)0x01000000U)  /*!< Error bits 0-write transfer, 1-read transfer */\r
-#define ETH_DMA_FLAG_ACCESSERROR       ((uint32_t)0x02000000U)  /*!< Error bits 0-data buffer, 1-desc. access */\r
-#define ETH_DMA_FLAG_NIS               ((uint32_t)0x00010000U)  /*!< Normal interrupt summary flag */\r
-#define ETH_DMA_FLAG_AIS               ((uint32_t)0x00008000U)  /*!< Abnormal interrupt summary flag */\r
-#define ETH_DMA_FLAG_ER                ((uint32_t)0x00004000U)  /*!< Early receive flag */\r
-#define ETH_DMA_FLAG_FBE               ((uint32_t)0x00002000U)  /*!< Fatal bus error flag */\r
-#define ETH_DMA_FLAG_ET                ((uint32_t)0x00000400U)  /*!< Early transmit flag */\r
-#define ETH_DMA_FLAG_RWT               ((uint32_t)0x00000200U)  /*!< Receive watchdog timeout flag */\r
-#define ETH_DMA_FLAG_RPS               ((uint32_t)0x00000100U)  /*!< Receive process stopped flag */\r
-#define ETH_DMA_FLAG_RBU               ((uint32_t)0x00000080U)  /*!< Receive buffer unavailable flag */\r
-#define ETH_DMA_FLAG_R                 ((uint32_t)0x00000040U)  /*!< Receive flag */\r
-#define ETH_DMA_FLAG_TU                ((uint32_t)0x00000020U)  /*!< Underflow flag */\r
-#define ETH_DMA_FLAG_RO                ((uint32_t)0x00000010U)  /*!< Overflow flag */\r
-#define ETH_DMA_FLAG_TJT               ((uint32_t)0x00000008U)  /*!< Transmit jabber timeout flag */\r
-#define ETH_DMA_FLAG_TBU               ((uint32_t)0x00000004U)  /*!< Transmit buffer unavailable flag */\r
-#define ETH_DMA_FLAG_TPS               ((uint32_t)0x00000002U)  /*!< Transmit process stopped flag */\r
-#define ETH_DMA_FLAG_T                 ((uint32_t)0x00000001U)  /*!< Transmit flag */\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_MAC_Interrupts ETH MAC Interrupts \r
-  * @{\r
-  */ \r
-#define ETH_MAC_IT_TST       ((uint32_t)0x00000200U)  /*!< Time stamp trigger interrupt (on MAC) */\r
-#define ETH_MAC_IT_MMCT      ((uint32_t)0x00000040U)  /*!< MMC transmit interrupt */\r
-#define ETH_MAC_IT_MMCR      ((uint32_t)0x00000020U)  /*!< MMC receive interrupt */\r
-#define ETH_MAC_IT_MMC       ((uint32_t)0x00000010U)  /*!< MMC interrupt (on MAC) */\r
-#define ETH_MAC_IT_PMT       ((uint32_t)0x00000008U)  /*!< PMT interrupt (on MAC) */\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_DMA_Interrupts ETH DMA Interrupts \r
-  * @{\r
-  */ \r
-#define ETH_DMA_IT_TST       ((uint32_t)0x20000000U)  /*!< Time-stamp trigger interrupt (on DMA) */\r
-#define ETH_DMA_IT_PMT       ((uint32_t)0x10000000U)  /*!< PMT interrupt (on DMA) */\r
-#define ETH_DMA_IT_MMC       ((uint32_t)0x08000000U)  /*!< MMC interrupt (on DMA) */\r
-#define ETH_DMA_IT_NIS       ((uint32_t)0x00010000U)  /*!< Normal interrupt summary */\r
-#define ETH_DMA_IT_AIS       ((uint32_t)0x00008000U)  /*!< Abnormal interrupt summary */\r
-#define ETH_DMA_IT_ER        ((uint32_t)0x00004000U)  /*!< Early receive interrupt */\r
-#define ETH_DMA_IT_FBE       ((uint32_t)0x00002000U)  /*!< Fatal bus error interrupt */\r
-#define ETH_DMA_IT_ET        ((uint32_t)0x00000400U)  /*!< Early transmit interrupt */\r
-#define ETH_DMA_IT_RWT       ((uint32_t)0x00000200U)  /*!< Receive watchdog timeout interrupt */\r
-#define ETH_DMA_IT_RPS       ((uint32_t)0x00000100U)  /*!< Receive process stopped interrupt */\r
-#define ETH_DMA_IT_RBU       ((uint32_t)0x00000080U)  /*!< Receive buffer unavailable interrupt */\r
-#define ETH_DMA_IT_R         ((uint32_t)0x00000040U)  /*!< Receive interrupt */\r
-#define ETH_DMA_IT_TU        ((uint32_t)0x00000020U)  /*!< Underflow interrupt */\r
-#define ETH_DMA_IT_RO        ((uint32_t)0x00000010U)  /*!< Overflow interrupt */\r
-#define ETH_DMA_IT_TJT       ((uint32_t)0x00000008U)  /*!< Transmit jabber timeout interrupt */\r
-#define ETH_DMA_IT_TBU       ((uint32_t)0x00000004U)  /*!< Transmit buffer unavailable interrupt */\r
-#define ETH_DMA_IT_TPS       ((uint32_t)0x00000002U)  /*!< Transmit process stopped interrupt */\r
-#define ETH_DMA_IT_T         ((uint32_t)0x00000001U)  /*!< Transmit interrupt */\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_DMA_transmit_process_state ETH DMA transmit process state \r
-  * @{\r
-  */ \r
-#define ETH_DMA_TRANSMITPROCESS_STOPPED     ((uint32_t)0x00000000U)  /*!< Stopped - Reset or Stop Tx Command issued */\r
-#define ETH_DMA_TRANSMITPROCESS_FETCHING    ((uint32_t)0x00100000U)  /*!< Running - fetching the Tx descriptor */\r
-#define ETH_DMA_TRANSMITPROCESS_WAITING     ((uint32_t)0x00200000U)  /*!< Running - waiting for status */\r
-#define ETH_DMA_TRANSMITPROCESS_READING     ((uint32_t)0x00300000U)  /*!< Running - reading the data from host memory */\r
-#define ETH_DMA_TRANSMITPROCESS_SUSPENDED   ((uint32_t)0x00600000U)  /*!< Suspended - Tx Descriptor unavailable */\r
-#define ETH_DMA_TRANSMITPROCESS_CLOSING     ((uint32_t)0x00700000U)  /*!< Running - closing Rx descriptor */\r
-\r
-/**\r
-  * @}\r
-  */ \r
-\r
-\r
-/** @defgroup ETH_DMA_receive_process_state ETH DMA receive process state \r
-  * @{\r
-  */ \r
-#define ETH_DMA_RECEIVEPROCESS_STOPPED      ((uint32_t)0x00000000U)  /*!< Stopped - Reset or Stop Rx Command issued */\r
-#define ETH_DMA_RECEIVEPROCESS_FETCHING     ((uint32_t)0x00020000U)  /*!< Running - fetching the Rx descriptor */\r
-#define ETH_DMA_RECEIVEPROCESS_WAITING      ((uint32_t)0x00060000U)  /*!< Running - waiting for packet */\r
-#define ETH_DMA_RECEIVEPROCESS_SUSPENDED    ((uint32_t)0x00080000U)  /*!< Suspended - Rx Descriptor unavailable */\r
-#define ETH_DMA_RECEIVEPROCESS_CLOSING      ((uint32_t)0x000A0000U)  /*!< Running - closing descriptor */\r
-#define ETH_DMA_RECEIVEPROCESS_QUEUING      ((uint32_t)0x000E0000U)  /*!< Running - queuing the receive frame into host memory */\r
-\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_DMA_overflow ETH DMA overflow\r
-  * @{\r
-  */ \r
-#define ETH_DMA_OVERFLOW_RXFIFOCOUNTER      ((uint32_t)0x10000000U)  /*!< Overflow bit for FIFO overflow counter */\r
-#define ETH_DMA_OVERFLOW_MISSEDFRAMECOUNTER ((uint32_t)0x00010000U)  /*!< Overflow bit for missed frame counter */\r
-/**\r
-  * @}\r
-  */ \r
-\r
-/** @defgroup ETH_EXTI_LINE_WAKEUP ETH EXTI LINE WAKEUP\r
-  * @{\r
-  */ \r
-#define ETH_EXTI_LINE_WAKEUP              ((uint32_t)0x00080000U)  /*!< External interrupt line 19 Connected to the ETH EXTI Line */\r
-\r
-/**\r
-  * @}\r
-  */\r
-\r
-/**\r
-  * @}\r
-  */\r
-\r
-/* Exported macro ------------------------------------------------------------*/\r
-/** @defgroup ETH_Exported_Macros ETH Exported Macros\r
- *  @brief macros to handle interrupts and specific clock configurations\r
- * @{\r
- */\r
\r
-/** @brief Reset ETH handle state\r
-  * @param  __HANDLE__: specifies the ETH handle.\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_ETH_STATE_RESET)\r
-\r
-/** \r
-  * @brief  Checks whether the specified Ethernet DMA Tx Desc flag is set or not.\r
-  * @param  __HANDLE__: ETH Handle\r
-  * @param  __FLAG__: specifies the flag of TDES0 to check.\r
-  * @retval the ETH_DMATxDescFlag (SET or RESET).\r
-  */\r
-#define __HAL_ETH_DMATXDESC_GET_FLAG(__HANDLE__, __FLAG__)             ((__HANDLE__)->TxDesc->Status & (__FLAG__) == (__FLAG__))\r
-\r
-/**\r
-  * @brief  Checks whether the specified Ethernet DMA Rx Desc flag is set or not.\r
-  * @param  __HANDLE__: ETH Handle\r
-  * @param  __FLAG__: specifies the flag of RDES0 to check.\r
-  * @retval the ETH_DMATxDescFlag (SET or RESET).\r
-  */\r
-#define __HAL_ETH_DMARXDESC_GET_FLAG(__HANDLE__, __FLAG__)             ((__HANDLE__)->RxDesc->Status & (__FLAG__) == (__FLAG__))\r
-\r
-/**\r
-  * @brief  Enables the specified DMA Rx Desc receive interrupt.\r
-  * @param  __HANDLE__: ETH Handle\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_DMARXDESC_ENABLE_IT(__HANDLE__)                          ((__HANDLE__)->RxDesc->ControlBufferSize &=(~(uint32_t)ETH_DMARXDESC_DIC))\r
-\r
-/**\r
-  * @brief  Disables the specified DMA Rx Desc receive interrupt.\r
-  * @param  __HANDLE__: ETH Handle\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_DMARXDESC_DISABLE_IT(__HANDLE__)                         ((__HANDLE__)->RxDesc->ControlBufferSize |= ETH_DMARXDESC_DIC)\r
-\r
-/**\r
-  * @brief  Set the specified DMA Rx Desc Own bit.\r
-  * @param  __HANDLE__: ETH Handle\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_DMARXDESC_SET_OWN_BIT(__HANDLE__)                           ((__HANDLE__)->RxDesc->Status |= ETH_DMARXDESC_OWN)\r
-\r
-/**\r
-  * @brief  Returns the specified Ethernet DMA Tx Desc collision count.\r
-  * @param  __HANDLE__: ETH Handle                     \r
-  * @retval The Transmit descriptor collision counter value.\r
-  */\r
-#define __HAL_ETH_DMATXDESC_GET_COLLISION_COUNT(__HANDLE__)                   (((__HANDLE__)->TxDesc->Status & ETH_DMATXDESC_CC) >> ETH_DMATXDESC_COLLISION_COUNTSHIFT)\r
-\r
-/**\r
-  * @brief  Set the specified DMA Tx Desc Own bit.\r
-  * @param  __HANDLE__: ETH Handle\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_DMATXDESC_SET_OWN_BIT(__HANDLE__)                       ((__HANDLE__)->TxDesc->Status |= ETH_DMATXDESC_OWN)\r
-\r
-/**\r
-  * @brief  Enables the specified DMA Tx Desc Transmit interrupt.\r
-  * @param  __HANDLE__: ETH Handle                   \r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_DMATXDESC_ENABLE_IT(__HANDLE__)                          ((__HANDLE__)->TxDesc->Status |= ETH_DMATXDESC_IC)\r
-\r
-/**\r
-  * @brief  Disables the specified DMA Tx Desc Transmit interrupt.\r
-  * @param  __HANDLE__: ETH Handle             \r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_DMATXDESC_DISABLE_IT(__HANDLE__)                          ((__HANDLE__)->TxDesc->Status &= ~ETH_DMATXDESC_IC)\r
-\r
-/**\r
-  * @brief  Selects the specified Ethernet DMA Tx Desc Checksum Insertion.\r
-  * @param  __HANDLE__: ETH Handle  \r
-  * @param  __CHECKSUM__: specifies is the DMA Tx desc checksum insertion.\r
-  *   This parameter can be one of the following values:\r
-  *     @arg ETH_DMATXDESC_CHECKSUMBYPASS : Checksum bypass\r
-  *     @arg ETH_DMATXDESC_CHECKSUMIPV4HEADER : IPv4 header checksum\r
-  *     @arg ETH_DMATXDESC_CHECKSUMTCPUDPICMPSEGMENT : TCP/UDP/ICMP checksum. Pseudo header checksum is assumed to be present\r
-  *     @arg ETH_DMATXDESC_CHECKSUMTCPUDPICMPFULL : TCP/UDP/ICMP checksum fully in hardware including pseudo header                                                                \r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_DMATXDESC_CHECKSUM_INSERTION(__HANDLE__, __CHECKSUM__)     ((__HANDLE__)->TxDesc->Status |= (__CHECKSUM__))\r
-\r
-/**\r
-  * @brief  Enables the DMA Tx Desc CRC.\r
-  * @param  __HANDLE__: ETH Handle \r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_DMATXDESC_CRC_ENABLE(__HANDLE__)                          ((__HANDLE__)->TxDesc->Status &= ~ETH_DMATXDESC_DC)\r
-\r
-/**\r
-  * @brief  Disables the DMA Tx Desc CRC.\r
-  * @param  __HANDLE__: ETH Handle \r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_DMATXDESC_CRC_DISABLE(__HANDLE__)                         ((__HANDLE__)->TxDesc->Status |= ETH_DMATXDESC_DC)\r
-\r
-/**\r
-  * @brief  Enables the DMA Tx Desc padding for frame shorter than 64 bytes.\r
-  * @param  __HANDLE__: ETH Handle \r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_DMATXDESC_SHORT_FRAME_PADDING_ENABLE(__HANDLE__)            ((__HANDLE__)->TxDesc->Status &= ~ETH_DMATXDESC_DP)\r
-\r
-/**\r
-  * @brief  Disables the DMA Tx Desc padding for frame shorter than 64 bytes.\r
-  * @param  __HANDLE__: ETH Handle \r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_DMATXDESC_SHORT_FRAME_PADDING_DISABLE(__HANDLE__)           ((__HANDLE__)->TxDesc->Status |= ETH_DMATXDESC_DP)\r
-\r
-/** \r
- * @brief  Enables the specified Ethernet MAC interrupts.\r
-  * @param  __HANDLE__   : ETH Handle\r
-  * @param  __INTERRUPT__: specifies the Ethernet MAC interrupt sources to be\r
-  *   enabled or disabled.\r
-  *   This parameter can be any combination of the following values:\r
-  *     @arg ETH_MAC_IT_TST : Time stamp trigger interrupt \r
-  *     @arg ETH_MAC_IT_PMT : PMT interrupt \r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_MAC_ENABLE_IT(__HANDLE__, __INTERRUPT__)                 ((__HANDLE__)->Instance->MACIMR |= (__INTERRUPT__))\r
-\r
-/**\r
-  * @brief  Disables the specified Ethernet MAC interrupts.\r
-  * @param  __HANDLE__   : ETH Handle\r
-  * @param  __INTERRUPT__: specifies the Ethernet MAC interrupt sources to be\r
-  *   enabled or disabled.\r
-  *   This parameter can be any combination of the following values:\r
-  *     @arg ETH_MAC_IT_TST : Time stamp trigger interrupt \r
-  *     @arg ETH_MAC_IT_PMT : PMT interrupt\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_MAC_DISABLE_IT(__HANDLE__, __INTERRUPT__)                ((__HANDLE__)->Instance->MACIMR &= ~(__INTERRUPT__))\r
-\r
-/**\r
-  * @brief  Initiate a Pause Control Frame (Full-duplex only).\r
-  * @param  __HANDLE__: ETH Handle\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_INITIATE_PAUSE_CONTROL_FRAME(__HANDLE__)              ((__HANDLE__)->Instance->MACFCR |= ETH_MACFCR_FCBBPA)\r
-\r
-/**\r
-  * @brief  Checks whether the Ethernet flow control busy bit is set or not.\r
-  * @param  __HANDLE__: ETH Handle\r
-  * @retval The new state of flow control busy status bit (SET or RESET).\r
-  */\r
-#define __HAL_ETH_GET_FLOW_CONTROL_BUSY_STATUS(__HANDLE__)               (((__HANDLE__)->Instance->MACFCR & ETH_MACFCR_FCBBPA) == ETH_MACFCR_FCBBPA)\r
-\r
-/**\r
-  * @brief  Enables the MAC Back Pressure operation activation (Half-duplex only).\r
-  * @param  __HANDLE__: ETH Handle\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_BACK_PRESSURE_ACTIVATION_ENABLE(__HANDLE__)          ((__HANDLE__)->Instance->MACFCR |= ETH_MACFCR_FCBBPA)\r
-\r
-/**\r
-  * @brief  Disables the MAC BackPressure operation activation (Half-duplex only).\r
-  * @param  __HANDLE__: ETH Handle\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_BACK_PRESSURE_ACTIVATION_DISABLE(__HANDLE__)         ((__HANDLE__)->Instance->MACFCR &= ~ETH_MACFCR_FCBBPA)\r
-\r
-/**\r
-  * @brief  Checks whether the specified Ethernet MAC flag is set or not.\r
-  * @param  __HANDLE__: ETH Handle\r
-  * @param  __FLAG__: specifies the flag to check.\r
-  *   This parameter can be one of the following values:\r
-  *     @arg ETH_MAC_FLAG_TST  : Time stamp trigger flag   \r
-  *     @arg ETH_MAC_FLAG_MMCT : MMC transmit flag  \r
-  *     @arg ETH_MAC_FLAG_MMCR : MMC receive flag   \r
-  *     @arg ETH_MAC_FLAG_MMC  : MMC flag  \r
-  *     @arg ETH_MAC_FLAG_PMT  : PMT flag  \r
-  * @retval The state of Ethernet MAC flag.\r
-  */\r
-#define __HAL_ETH_MAC_GET_FLAG(__HANDLE__, __FLAG__)                   (((__HANDLE__)->Instance->MACSR &( __FLAG__)) == ( __FLAG__))\r
-\r
-/** \r
-  * @brief  Enables the specified Ethernet DMA interrupts.\r
-  * @param  __HANDLE__   : ETH Handle\r
-  * @param  __INTERRUPT__: specifies the Ethernet DMA interrupt sources to be\r
-  *   enabled @ref ETH_DMA_Interrupts\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_DMA_ENABLE_IT(__HANDLE__, __INTERRUPT__)                 ((__HANDLE__)->Instance->DMAIER |= (__INTERRUPT__))\r
-\r
-/**\r
-  * @brief  Disables the specified Ethernet DMA interrupts.\r
-  * @param  __HANDLE__   : ETH Handle\r
-  * @param  __INTERRUPT__: specifies the Ethernet DMA interrupt sources to be\r
-  *   disabled. @ref ETH_DMA_Interrupts\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_DMA_DISABLE_IT(__HANDLE__, __INTERRUPT__)                ((__HANDLE__)->Instance->DMAIER &= ~(__INTERRUPT__))\r
-\r
-/**\r
-  * @brief  Clears the Ethernet DMA IT pending bit.\r
-  * @param  __HANDLE__   : ETH Handle\r
-  * @param  __INTERRUPT__: specifies the interrupt pending bit to clear. @ref ETH_DMA_Interrupts\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_DMA_CLEAR_IT(__HANDLE__, __INTERRUPT__)      ((__HANDLE__)->Instance->DMASR =(__INTERRUPT__))\r
-\r
-/**\r
-  * @brief  Checks whether the specified Ethernet DMA flag is set or not.\r
-* @param  __HANDLE__: ETH Handle\r
-  * @param  __FLAG__: specifies the flag to check. @ref ETH_DMA_Flags\r
-  * @retval The new state of ETH_DMA_FLAG (SET or RESET).\r
-  */\r
-#define __HAL_ETH_DMA_GET_FLAG(__HANDLE__, __FLAG__)                   (((__HANDLE__)->Instance->DMASR &( __FLAG__)) == ( __FLAG__))\r
-\r
-/**\r
-  * @brief  Checks whether the specified Ethernet DMA flag is set or not.\r
-  * @param  __HANDLE__: ETH Handle\r
-  * @param  __FLAG__: specifies the flag to clear. @ref ETH_DMA_Flags\r
-  * @retval The new state of ETH_DMA_FLAG (SET or RESET).\r
-  */\r
-#define __HAL_ETH_DMA_CLEAR_FLAG(__HANDLE__, __FLAG__)                 ((__HANDLE__)->Instance->DMASR = (__FLAG__))\r
-\r
-/**\r
-  * @brief  Checks whether the specified Ethernet DMA overflow flag is set or not.\r
-  * @param  __HANDLE__: ETH Handle\r
-  * @param  __OVERFLOW__: specifies the DMA overflow flag to check.\r
-  *   This parameter can be one of the following values:\r
-  *     @arg ETH_DMA_OVERFLOW_RXFIFOCOUNTER : Overflow for FIFO Overflows Counter\r
-  *     @arg ETH_DMA_OVERFLOW_MISSEDFRAMECOUNTER : Overflow for Buffer Unavailable Missed Frame Counter\r
-  * @retval The state of Ethernet DMA overflow Flag (SET or RESET).\r
-  */\r
-#define __HAL_ETH_GET_DMA_OVERFLOW_STATUS(__HANDLE__, __OVERFLOW__)       (((__HANDLE__)->Instance->DMAMFBOCR & (__OVERFLOW__)) == (__OVERFLOW__))\r
-\r
-/**\r
-  * @brief  Set the DMA Receive status watchdog timer register value\r
-  * @param  __HANDLE__: ETH Handle\r
-  * @param  __VALUE__: DMA Receive status watchdog timer register value   \r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_SET_RECEIVE_WATCHDOG_TIMER(__HANDLE__, __VALUE__)       ((__HANDLE__)->Instance->DMARSWTR = (__VALUE__))\r
-\r
-/** \r
-  * @brief  Enables any unicast packet filtered by the MAC address\r
-  *   recognition to be a wake-up frame.\r
-  * @param  __HANDLE__: ETH Handle.\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_GLOBAL_UNICAST_WAKEUP_ENABLE(__HANDLE__)               ((__HANDLE__)->Instance->MACPMTCSR |= ETH_MACPMTCSR_GU)\r
-\r
-/**\r
-  * @brief  Disables any unicast packet filtered by the MAC address\r
-  *   recognition to be a wake-up frame.\r
-  * @param  __HANDLE__: ETH Handle.\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_GLOBAL_UNICAST_WAKEUP_DISABLE(__HANDLE__)              ((__HANDLE__)->Instance->MACPMTCSR &= ~ETH_MACPMTCSR_GU)\r
-\r
-/**\r
-  * @brief  Enables the MAC Wake-Up Frame Detection.\r
-  * @param  __HANDLE__: ETH Handle.\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_WAKEUP_FRAME_DETECTION_ENABLE(__HANDLE__)              ((__HANDLE__)->Instance->MACPMTCSR |= ETH_MACPMTCSR_WFE)\r
-\r
-/**\r
-  * @brief  Disables the MAC Wake-Up Frame Detection.\r
-  * @param  __HANDLE__: ETH Handle.\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_WAKEUP_FRAME_DETECTION_DISABLE(__HANDLE__)             ((__HANDLE__)->Instance->MACPMTCSR &= ~ETH_MACPMTCSR_WFE)\r
-\r
-/**\r
-  * @brief  Enables the MAC Magic Packet Detection.\r
-  * @param  __HANDLE__: ETH Handle.\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_MAGIC_PACKET_DETECTION_ENABLE(__HANDLE__)              ((__HANDLE__)->Instance->MACPMTCSR |= ETH_MACPMTCSR_MPE)\r
-\r
-/**\r
-  * @brief  Disables the MAC Magic Packet Detection.\r
-  * @param  __HANDLE__: ETH Handle.\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_MAGIC_PACKET_DETECTION_DISABLE(__HANDLE__)             ((__HANDLE__)->Instance->MACPMTCSR &= ~ETH_MACPMTCSR_WFE)\r
-\r
-/**\r
-  * @brief  Enables the MAC Power Down.\r
-  * @param  __HANDLE__: ETH Handle\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_POWER_DOWN_ENABLE(__HANDLE__)                         ((__HANDLE__)->Instance->MACPMTCSR |= ETH_MACPMTCSR_PD)\r
-\r
-/**\r
-  * @brief  Disables the MAC Power Down.\r
-  * @param  __HANDLE__: ETH Handle\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_POWER_DOWN_DISABLE(__HANDLE__)                        ((__HANDLE__)->Instance->MACPMTCSR &= ~ETH_MACPMTCSR_PD)\r
-\r
-/**\r
-  * @brief  Checks whether the specified Ethernet PMT flag is set or not.\r
-  * @param  __HANDLE__: ETH Handle.\r
-  * @param  __FLAG__: specifies the flag to check.\r
-  *   This parameter can be one of the following values:\r
-  *     @arg ETH_PMT_FLAG_WUFFRPR : Wake-Up Frame Filter Register Pointer Reset \r
-  *     @arg ETH_PMT_FLAG_WUFR    : Wake-Up Frame Received \r
-  *     @arg ETH_PMT_FLAG_MPR     : Magic Packet Received\r
-  * @retval The new state of Ethernet PMT Flag (SET or RESET).\r
-  */\r
-#define __HAL_ETH_GET_PMT_FLAG_STATUS(__HANDLE__, __FLAG__)               (((__HANDLE__)->Instance->MACPMTCSR &( __FLAG__)) == ( __FLAG__))\r
-\r
-/** \r
-  * @brief  Preset and Initialize the MMC counters to almost-full value: 0xFFFF_FFF0 (full - 16)\r
-  * @param   __HANDLE__: ETH Handle.\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_MMC_COUNTER_FULL_PRESET(__HANDLE__)                     ((__HANDLE__)->Instance->MMCCR |= (ETH_MMCCR_MCFHP | ETH_MMCCR_MCP))\r
-\r
-/**\r
-  * @brief  Preset and Initialize the MMC counters to almost-half value: 0x7FFF_FFF0 (half - 16)\r
-  * @param  __HANDLE__: ETH Handle.\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_MMC_COUNTER_HALF_PRESET(__HANDLE__)                     do{(__HANDLE__)->Instance->MMCCR &= ~ETH_MMCCR_MCFHP;\\r
-                                                                          (__HANDLE__)->Instance->MMCCR |= ETH_MMCCR_MCP;} while (0)\r
-\r
-/**\r
-  * @brief  Enables the MMC Counter Freeze.\r
-  * @param  __HANDLE__: ETH Handle.\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_MMC_COUNTER_FREEZE_ENABLE(__HANDLE__)                  ((__HANDLE__)->Instance->MMCCR |= ETH_MMCCR_MCF)\r
-\r
-/**\r
-  * @brief  Disables the MMC Counter Freeze.\r
-  * @param  __HANDLE__: ETH Handle.\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_MMC_COUNTER_FREEZE_DISABLE(__HANDLE__)                 ((__HANDLE__)->Instance->MMCCR &= ~ETH_MMCCR_MCF)\r
-\r
-/**\r
-  * @brief  Enables the MMC Reset On Read.\r
-  * @param  __HANDLE__: ETH Handle.\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_ETH_MMC_RESET_ONREAD_ENABLE(__HANDLE__)                ((__HANDLE__)->Instance->MMCCR |= ETH_MMCCR_ROR)\r
-\r
-/**\r
-  * @brief  Disables the MMC Reset On Read.\r
-  * @param  __HANDLE__: ETH Handle.\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_ETH_MMC_RESET_ONREAD_DISABLE(__HANDLE__)               ((__HANDLE__)->Instance->MMCCR &= ~ETH_MMCCR_ROR)\r
-\r
-/**\r
-  * @brief  Enables the MMC Counter Stop Rollover.\r
-  * @param  __HANDLE__: ETH Handle.\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_ETH_MMC_COUNTER_ROLLOVER_ENABLE(__HANDLE__)            ((__HANDLE__)->Instance->MMCCR &= ~ETH_MMCCR_CSR)\r
-\r
-/**\r
-  * @brief  Disables the MMC Counter Stop Rollover.\r
-  * @param  __HANDLE__: ETH Handle.\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_ETH_MMC_COUNTER_ROLLOVER_DISABLE(__HANDLE__)           ((__HANDLE__)->Instance->MMCCR |= ETH_MMCCR_CSR)\r
-\r
-/**\r
-  * @brief  Resets the MMC Counters.\r
-  * @param   __HANDLE__: ETH Handle.\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_MMC_COUNTERS_RESET(__HANDLE__)                         ((__HANDLE__)->Instance->MMCCR |= ETH_MMCCR_CR)\r
-\r
-/**\r
-  * @brief  Enables the specified Ethernet MMC Rx interrupts.\r
-  * @param   __HANDLE__: ETH Handle.\r
-  * @param  __INTERRUPT__: specifies the Ethernet MMC interrupt sources to be enabled or disabled.\r
-  *   This parameter can be one of the following values:  \r
-  *     @arg ETH_MMC_IT_RGUF  : When Rx good unicast frames counter reaches half the maximum value \r
-  *     @arg ETH_MMC_IT_RFAE  : When Rx alignment error counter reaches half the maximum value \r
-  *     @arg ETH_MMC_IT_RFCE  : When Rx crc error counter reaches half the maximum value\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_MMC_RX_IT_ENABLE(__HANDLE__, __INTERRUPT__)               (__HANDLE__)->Instance->MMCRIMR &= ~((__INTERRUPT__) & 0xEFFFFFFF)\r
-/**\r
-  * @brief  Disables the specified Ethernet MMC Rx interrupts.\r
-  * @param   __HANDLE__: ETH Handle.\r
-  * @param  __INTERRUPT__: specifies the Ethernet MMC interrupt sources to be enabled or disabled.\r
-  *   This parameter can be one of the following values: \r
-  *     @arg ETH_MMC_IT_RGUF  : When Rx good unicast frames counter reaches half the maximum value \r
-  *     @arg ETH_MMC_IT_RFAE  : When Rx alignment error counter reaches half the maximum value \r
-  *     @arg ETH_MMC_IT_RFCE  : When Rx crc error counter reaches half the maximum value\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_MMC_RX_IT_DISABLE(__HANDLE__, __INTERRUPT__)              (__HANDLE__)->Instance->MMCRIMR |= ((__INTERRUPT__) & 0xEFFFFFFF)\r
-/**\r
-  * @brief  Enables the specified Ethernet MMC Tx interrupts.\r
-  * @param   __HANDLE__: ETH Handle.\r
-  * @param  __INTERRUPT__: specifies the Ethernet MMC interrupt sources to be enabled or disabled.\r
-  *   This parameter can be one of the following values:  \r
-  *     @arg ETH_MMC_IT_TGF   : When Tx good frame counter reaches half the maximum value \r
-  *     @arg ETH_MMC_IT_TGFMSC: When Tx good multi col counter reaches half the maximum value \r
-  *     @arg ETH_MMC_IT_TGFSC : When Tx good single col counter reaches half the maximum value \r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_MMC_TX_IT_ENABLE(__HANDLE__, __INTERRUPT__)            ((__HANDLE__)->Instance->MMCRIMR &= ~ (__INTERRUPT__))\r
-\r
-/**\r
-  * @brief  Disables the specified Ethernet MMC Tx interrupts.\r
-  * @param   __HANDLE__: ETH Handle.\r
-  * @param  __INTERRUPT__: specifies the Ethernet MMC interrupt sources to be enabled or disabled.\r
-  *   This parameter can be one of the following values:  \r
-  *     @arg ETH_MMC_IT_TGF   : When Tx good frame counter reaches half the maximum value \r
-  *     @arg ETH_MMC_IT_TGFMSC: When Tx good multi col counter reaches half the maximum value \r
-  *     @arg ETH_MMC_IT_TGFSC : When Tx good single col counter reaches half the maximum value \r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_MMC_TX_IT_DISABLE(__HANDLE__, __INTERRUPT__)           ((__HANDLE__)->Instance->MMCRIMR |= (__INTERRUPT__))\r
-\r
-/**\r
-  * @brief  Enables the ETH External interrupt line.\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_WAKEUP_EXTI_ENABLE_IT()    EXTI->IMR |= (ETH_EXTI_LINE_WAKEUP)\r
-\r
-/**\r
-  * @brief  Disables the ETH External interrupt line.\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_WAKEUP_EXTI_DISABLE_IT()   EXTI->IMR &= ~(ETH_EXTI_LINE_WAKEUP)\r
-\r
-/**\r
-  * @brief Enable event on ETH External event line.\r
-  * @retval None.\r
-  */\r
-#define __HAL_ETH_WAKEUP_EXTI_ENABLE_EVENT()  EXTI->EMR |= (ETH_EXTI_LINE_WAKEUP)\r
-\r
-/**\r
-  * @brief Disable event on ETH External event line\r
-  * @retval None.\r
-  */\r
-#define __HAL_ETH_WAKEUP_EXTI_DISABLE_EVENT() EXTI->EMR &= ~(ETH_EXTI_LINE_WAKEUP)\r
-\r
-/**\r
-  * @brief  Get flag of the ETH External interrupt line.\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_WAKEUP_EXTI_GET_FLAG()     EXTI->PR & (ETH_EXTI_LINE_WAKEUP)\r
-\r
-/**\r
-  * @brief  Clear flag of the ETH External interrupt line.\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_WAKEUP_EXTI_CLEAR_FLAG()   EXTI->PR = (ETH_EXTI_LINE_WAKEUP)\r
-\r
-/**\r
-  * @brief  Enables rising edge trigger to the ETH External interrupt line.\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_WAKEUP_EXTI_ENABLE_RISING_EDGE_TRIGGER()  EXTI->RTSR |= ETH_EXTI_LINE_WAKEUP\r
-                                                            \r
-/**\r
-  * @brief  Disables the rising edge trigger to the ETH External interrupt line.\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_WAKEUP_EXTI_DISABLE_RISING_EDGE_TRIGGER()  EXTI->RTSR &= ~(ETH_EXTI_LINE_WAKEUP)                                                          \r
-\r
-/**\r
-  * @brief  Enables falling edge trigger to the ETH External interrupt line.\r
-  * @retval None\r
-  */                                                      \r
-#define __HAL_ETH_WAKEUP_EXTI_ENABLE_FALLING_EDGE_TRIGGER()  EXTI->FTSR |= (ETH_EXTI_LINE_WAKEUP)\r
-\r
-/**\r
-  * @brief  Disables falling edge trigger to the ETH External interrupt line.\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_WAKEUP_EXTI_DISABLE_FALLING_EDGE_TRIGGER()  EXTI->FTSR &= ~(ETH_EXTI_LINE_WAKEUP)\r
-\r
-/**\r
-  * @brief  Enables rising/falling edge trigger to the ETH External interrupt line.\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_WAKEUP_EXTI_ENABLE_FALLINGRISING_TRIGGER()  EXTI->RTSR |= ETH_EXTI_LINE_WAKEUP;\\r
-                                                              EXTI->FTSR |= ETH_EXTI_LINE_WAKEUP\r
-\r
-/**\r
-  * @brief  Disables rising/falling edge trigger to the ETH External interrupt line.\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_WAKEUP_EXTI_DISABLE_FALLINGRISING_TRIGGER()  EXTI->RTSR &= ~(ETH_EXTI_LINE_WAKEUP);\\r
-                                                               EXTI->FTSR &= ~(ETH_EXTI_LINE_WAKEUP)\r
-\r
-/**\r
-  * @brief Generate a Software interrupt on selected EXTI line.\r
-  * @retval None.\r
-  */\r
-#define __HAL_ETH_WAKEUP_EXTI_GENERATE_SWIT()                  EXTI->SWIER|= ETH_EXTI_LINE_WAKEUP\r
-\r
-/**\r
-  * @}\r
-  */\r
-/* Exported functions --------------------------------------------------------*/\r
-\r
-/** @addtogroup ETH_Exported_Functions\r
-  * @{\r
-  */\r
-\r
-/* Initialization and de-initialization functions  ****************************/\r
-\r
-/** @addtogroup ETH_Exported_Functions_Group1\r
-  * @{\r
-  */\r
-HAL_StatusTypeDef HAL_ETH_Init(ETH_HandleTypeDef *heth);\r
-HAL_StatusTypeDef HAL_ETH_DeInit(ETH_HandleTypeDef *heth);\r
-void HAL_ETH_MspInit(ETH_HandleTypeDef *heth);\r
-void HAL_ETH_MspDeInit(ETH_HandleTypeDef *heth);\r
-HAL_StatusTypeDef HAL_ETH_DMATxDescListInit(ETH_HandleTypeDef *heth, ETH_DMADescTypeDef *DMATxDescTab, uint8_t* TxBuff, uint32_t TxBuffCount);\r
-HAL_StatusTypeDef HAL_ETH_DMARxDescListInit(ETH_HandleTypeDef *heth, ETH_DMADescTypeDef *DMARxDescTab, uint8_t *RxBuff, uint32_t RxBuffCount);\r
-\r
-/**\r
-  * @}\r
-  */\r
-/* IO operation functions  ****************************************************/\r
-\r
-/** @addtogroup ETH_Exported_Functions_Group2\r
-  * @{\r
-  */\r
-HAL_StatusTypeDef HAL_ETH_TransmitFrame(ETH_HandleTypeDef *heth, uint32_t FrameLength);\r
-HAL_StatusTypeDef HAL_ETH_GetReceivedFrame(ETH_HandleTypeDef *heth);\r
-/* Communication with PHY functions*/\r
-HAL_StatusTypeDef HAL_ETH_ReadPHYRegister(ETH_HandleTypeDef *heth, uint16_t PHYReg, uint32_t *RegValue);\r
-HAL_StatusTypeDef HAL_ETH_WritePHYRegister(ETH_HandleTypeDef *heth, uint16_t PHYReg, uint32_t RegValue);\r
-/* Non-Blocking mode: Interrupt */\r
-HAL_StatusTypeDef HAL_ETH_GetReceivedFrame_IT(ETH_HandleTypeDef *heth);\r
-void HAL_ETH_IRQHandler(ETH_HandleTypeDef *heth);\r
-/* Callback in non blocking modes (Interrupt) */\r
-void HAL_ETH_TxCpltCallback(ETH_HandleTypeDef *heth);\r
-void HAL_ETH_RxCpltCallback(ETH_HandleTypeDef *heth);\r
-void HAL_ETH_ErrorCallback(ETH_HandleTypeDef *heth);\r
-/**\r
-  * @}\r
-  */\r
-\r
-/* Peripheral Control functions  **********************************************/\r
-\r
-/** @addtogroup ETH_Exported_Functions_Group3\r
-  * @{\r
-  */\r
-\r
-HAL_StatusTypeDef HAL_ETH_Start(ETH_HandleTypeDef *heth);\r
-HAL_StatusTypeDef HAL_ETH_Stop(ETH_HandleTypeDef *heth);\r
-HAL_StatusTypeDef HAL_ETH_ConfigMAC(ETH_HandleTypeDef *heth, ETH_MACInitTypeDef *macconf);\r
-HAL_StatusTypeDef HAL_ETH_ConfigDMA(ETH_HandleTypeDef *heth, ETH_DMAInitTypeDef *dmaconf);\r
-/**\r
-  * @}\r
-  */ \r
-\r
-/* Peripheral State functions  ************************************************/\r
-\r
-/** @addtogroup ETH_Exported_Functions_Group4\r
-  * @{\r
-  */\r
-HAL_ETH_StateTypeDef HAL_ETH_GetState(ETH_HandleTypeDef *heth);\r
-/**\r
-  * @}\r
-  */\r
-\r
-/**\r
-  * @}\r
-  */\r
-\r
-/**\r
-  * @}\r
-  */\r
-\r
-/**\r
-  * @}\r
-  */\r
-#ifdef __cplusplus\r
-}\r
-#endif\r
-\r
-#endif /* __STM32F7xx_HAL_ETH_H */\r
-\r
-\r
-\r
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r
index 6fad9216e8aaa5c2f40902cafd5db637f4116d6b..b9278c0429f610119232cbb4283452b56f39d4cb 100644 (file)
-/*\r
- * Some constants, hardware definitions and comments taken from ST's HAL driver\r
- * library, COPYRIGHT(c) 2015 STMicroelectronics.\r
- */\r
-\r
-/*\r
-FreeRTOS+TCP V2.0.11\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://aws.amazon.com/freertos\r
- http://www.FreeRTOS.org\r
-*/\r
-\r
-/* Standard includes. */\r
-#include <stdint.h>\r
-#include <stdio.h>\r
-#include <stdlib.h>\r
-\r
-/* FreeRTOS includes. */\r
-#include "FreeRTOS.h"\r
-#include "task.h"\r
-#include "queue.h"\r
-#include "semphr.h"\r
-\r
-/* FreeRTOS+TCP includes. */\r
-#include "FreeRTOS_IP.h"\r
-#include "FreeRTOS_Sockets.h"\r
-#include "FreeRTOS_IP_Private.h"\r
-#include "FreeRTOS_DNS.h"\r
-#include "FreeRTOS_ARP.h"\r
-#include "NetworkBufferManagement.h"\r
-#include "NetworkInterface.h"\r
-#include "phyHandling.h"\r
-\r
-/* ST includes. */\r
-#if defined( STM32F7xx )\r
-       #include "stm32f7xx_hal.h"\r
-#elif defined( STM32F4xx )\r
-       #include "stm32f4xx_hal.h"\r
-#elif defined( STM32F2xx )\r
-       #include "stm32f2xx_hal.h"\r
-#elif !defined( _lint )        /* Lint does not like an #error */\r
-       #error What part?\r
-#endif\r
-\r
-#include "stm32fxx_hal_eth.h"\r
-\r
-/* Interrupt events to process.  Currently only the Rx event is processed\r
-although code for other events is included to allow for possible future\r
-expansion. */\r
-#define EMAC_IF_RX_EVENT        1UL\r
-#define EMAC_IF_TX_EVENT        2UL\r
-#define EMAC_IF_ERR_EVENT       4UL\r
-#define EMAC_IF_ALL_EVENT       ( EMAC_IF_RX_EVENT | EMAC_IF_TX_EVENT | EMAC_IF_ERR_EVENT )\r
-\r
-#define ETH_DMA_ALL_INTS \\r
-       ( ETH_DMA_IT_TST | ETH_DMA_IT_PMT | ETH_DMA_IT_MMC | ETH_DMA_IT_NIS | ETH_DMA_IT_ER | \\r
-         ETH_DMA_IT_FBE | ETH_DMA_IT_RWT | ETH_DMA_IT_RPS | ETH_DMA_IT_RBU | ETH_DMA_IT_R | \\r
-         ETH_DMA_IT_TU | ETH_DMA_IT_RO | ETH_DMA_IT_TJT | ETH_DMA_IT_TPS | ETH_DMA_IT_T )\r
-\r
-#ifndef niEMAC_HANDLER_TASK_PRIORITY\r
-       #define niEMAC_HANDLER_TASK_PRIORITY    configMAX_PRIORITIES - 1\r
-#endif\r
-\r
-#define ipFRAGMENT_OFFSET_BIT_MASK             ( ( uint16_t ) 0x0fff ) /* The bits in the two byte IP header field that make up the fragment offset value. */\r
-\r
-#if( ( ipconfigDRIVER_INCLUDED_TX_IP_CHECKSUM == 0 ) || ( ipconfigDRIVER_INCLUDED_RX_IP_CHECKSUM == 0 ) )\r
-       #warning Consider enabling checksum offloading\r
-#endif\r
-\r
-#ifndef niDESCRIPTOR_WAIT_TIME_MS\r
-       #define niDESCRIPTOR_WAIT_TIME_MS               250uL\r
-#endif\r
-\r
-/*\r
- * Most users will want a PHY that negotiates about\r
- * the connection properties: speed, dmix and duplex.\r
- * On some rare cases, you want to select what is being\r
- * advertised, properties like MDIX and duplex.\r
- */\r
-\r
-#if !defined( ipconfigETHERNET_AN_ENABLE )\r
-       /* Enable auto-negotiation */\r
-       #define ipconfigETHERNET_AN_ENABLE                              1\r
-#endif\r
-\r
-#if !defined( ipconfigETHERNET_AUTO_CROSS_ENABLE )\r
-       #define ipconfigETHERNET_AUTO_CROSS_ENABLE              1\r
-#endif\r
-\r
-#if( ipconfigETHERNET_AN_ENABLE == 0 )\r
-       /*\r
-        * The following three defines are only used in case there\r
-        * is no auto-negotiation.\r
-        */\r
-       #if !defined( ipconfigETHERNET_CROSSED_LINK )\r
-               #define ipconfigETHERNET_CROSSED_LINK                   1\r
-       #endif\r
-\r
-       #if !defined( ipconfigETHERNET_USE_100MB )\r
-               #define ipconfigETHERNET_USE_100MB                              1\r
-       #endif\r
-\r
-       #if !defined( ipconfigETHERNET_USE_FULL_DUPLEX )\r
-               #define ipconfigETHERNET_USE_FULL_DUPLEX                1\r
-       #endif\r
-#endif /* ipconfigETHERNET_AN_ENABLE == 0 */\r
-\r
-/* Default the size of the stack used by the EMAC deferred handler task to twice\r
-the size of the stack used by the idle task - but allow this to be overridden in\r
-FreeRTOSConfig.h as configMINIMAL_STACK_SIZE is a user definable constant. */\r
-#ifndef configEMAC_TASK_STACK_SIZE\r
-       #define configEMAC_TASK_STACK_SIZE ( 2 * configMINIMAL_STACK_SIZE )\r
-#endif\r
-\r
-/* Two choices must be made: RMII versus MII,\r
-and the index of the PHY in use ( between 0 and 31 ). */\r
-#ifndef ipconfigUSE_RMII\r
-       #ifdef STM32F7xx\r
-               #define ipconfigUSE_RMII        1\r
-       #else\r
-               #define ipconfigUSE_RMII        0\r
-       #endif /* STM32F7xx */\r
-#endif /* ipconfigUSE_RMII */\r
-\r
-#if( ipconfigUSE_RMII != 0 )\r
-       #warning Using RMII, make sure if this is correct\r
-#else\r
-       #warning Using MII, make sure if this is correct\r
-#endif\r
-\r
-typedef enum\r
-{\r
-    eMACInit,   /* Must initialise MAC. */\r
-    eMACPass,   /* Initialisation was successful. */\r
-    eMACFailed, /* Initialisation failed. */\r
-} eMAC_INIT_STATUS_TYPE;\r
-\r
-static eMAC_INIT_STATUS_TYPE xMacInitStatus = eMACInit;\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-/*\r
- * A deferred interrupt handler task that processes\r
- */\r
-static void prvEMACHandlerTask( void *pvParameters );\r
-\r
-/*\r
- * Force a negotiation with the Switch or Router and wait for LS.\r
- */\r
-static void prvEthernetUpdateConfig( BaseType_t xForce );\r
-\r
-/*\r
- * See if there is a new packet and forward it to the IP-task.\r
- */\r
-static BaseType_t prvNetworkInterfaceInput( void );\r
-\r
-#if( ipconfigUSE_LLMNR != 0 )\r
-       /*\r
-        * For LLMNR, an extra MAC-address must be configured to\r
-        * be able to receive the multicast messages.\r
-        */\r
-       static void prvMACAddressConfig(ETH_HandleTypeDef *heth, uint32_t ulIndex, uint8_t *Addr);\r
-#endif\r
-\r
-/*\r
- * Check if a given packet should be accepted.\r
- */\r
-static BaseType_t xMayAcceptPacket( uint8_t *pcBuffer );\r
-\r
-/*\r
- * Initialise the TX descriptors.\r
- */\r
-static void prvDMATxDescListInit( void );\r
-\r
-/*\r
- * Initialise the RX descriptors.\r
- */\r
-static void prvDMARxDescListInit( void );\r
-\r
-/* After packets have been sent, the network\r
-buffers will be released. */\r
-static void vClearTXBuffers( void );\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-/* Bit map of outstanding ETH interrupt events for processing.  Currently only\r
-the Rx interrupt is handled, although code is included for other events to\r
-enable future expansion. */\r
-static volatile uint32_t ulISREvents;\r
-\r
-#if( ipconfigUSE_LLMNR == 1 )\r
-       static const uint8_t xLLMNR_MACAddress[] = { 0x01, 0x00, 0x5E, 0x00, 0x00, 0xFC };\r
-#endif\r
-\r
-static EthernetPhy_t xPhyObject;\r
-\r
-/* Ethernet handle. */\r
-static ETH_HandleTypeDef xETH;\r
-\r
-/* xTXDescriptorSemaphore is a counting semaphore with\r
-a maximum count of ETH_TXBUFNB, which is the number of\r
-DMA TX descriptors. */\r
-static SemaphoreHandle_t xTXDescriptorSemaphore = NULL;\r
-\r
-/*\r
- * Note: it is adviced to define both\r
- *\r
- *     #define  ipconfigZERO_COPY_RX_DRIVER   1\r
- *     #define  ipconfigZERO_COPY_TX_DRIVER   1\r
- *\r
- * The method using memcpy is slower and probaly uses more RAM memory.\r
- * The possibility is left in the code just for comparison.\r
- *\r
- * It is adviced to define ETH_TXBUFNB at least 4. Note that no\r
- * TX buffers are allocated in a zero-copy driver.\r
- */\r
-/* MAC buffers: ---------------------------------------------------------*/\r
-\r
-/* Put the DMA descriptors in '.first_data'.\r
-This is important for STM32F7, which has an L1 data cache.\r
-The first 64KB of the SRAM is not cached. */\r
-\r
-/* Ethernet Rx MA Descriptor */\r
-__attribute__ ((aligned (32)))\r
-__attribute__ ((section(".first_data")))\r
-       ETH_DMADescTypeDef  DMARxDscrTab[ ETH_RXBUFNB ];\r
-\r
-#if( ipconfigZERO_COPY_RX_DRIVER == 0 )\r
-       /* Ethernet Receive Buffer */\r
-       __ALIGN_BEGIN uint8_t Rx_Buff[ ETH_RXBUFNB ][ ETH_RX_BUF_SIZE ] __ALIGN_END;\r
-#endif\r
-\r
-/* Ethernet Tx DMA Descriptor */\r
-__attribute__ ((aligned (32)))\r
-__attribute__ ((section(".first_data")))\r
-       ETH_DMADescTypeDef  DMATxDscrTab[ ETH_TXBUFNB ];\r
-\r
-#if( ipconfigZERO_COPY_TX_DRIVER == 0 )\r
-       /* Ethernet Transmit Buffer */\r
-       __ALIGN_BEGIN uint8_t Tx_Buff[ ETH_TXBUFNB ][ ETH_TX_BUF_SIZE ] __ALIGN_END;\r
-#endif\r
-\r
-/* DMATxDescToClear points to the next TX DMA descriptor\r
-that must be cleared by vClearTXBuffers(). */\r
-static __IO ETH_DMADescTypeDef  *DMATxDescToClear;\r
-\r
-/* Holds the handle of the task used as a deferred interrupt processor.  The\r
-handle is used so direct notifications can be sent to the task for all EMAC/DMA\r
-related interrupts. */\r
-static TaskHandle_t xEMACTaskHandle = NULL;\r
-\r
-/* For local use only: describe the PHY's properties: */\r
-const PhyProperties_t xPHYProperties =\r
-{\r
-       #if( ipconfigETHERNET_AN_ENABLE != 0 )\r
-               .ucSpeed = PHY_SPEED_AUTO,\r
-               .ucDuplex = PHY_DUPLEX_AUTO,\r
-       #else\r
-               #if( ipconfigETHERNET_USE_100MB != 0 )\r
-                       .ucSpeed = PHY_SPEED_100,\r
-               #else\r
-                       .ucSpeed = PHY_SPEED_10,\r
-               #endif\r
-\r
-               #if( ipconfigETHERNET_USE_FULL_DUPLEX != 0 )\r
-                       .ucDuplex = PHY_DUPLEX_FULL,\r
-               #else\r
-                       .ucDuplex = PHY_DUPLEX_HALF,\r
-               #endif\r
-       #endif\r
-\r
-       #if( ipconfigETHERNET_AN_ENABLE != 0 ) && ( ipconfigETHERNET_AUTO_CROSS_ENABLE != 0 )\r
-               .ucMDI_X = PHY_MDIX_AUTO,\r
-       #elif( ipconfigETHERNET_CROSSED_LINK != 0 )\r
-               .ucMDI_X = PHY_MDIX_CROSSED,\r
-       #else\r
-               .ucMDI_X = PHY_MDIX_DIRECT,\r
-       #endif\r
-};\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-void HAL_ETH_RxCpltCallback( ETH_HandleTypeDef *heth )\r
-{\r
-BaseType_t xHigherPriorityTaskWoken = pdFALSE;\r
-\r
-       ( void ) heth;\r
-\r
-       /* Ethernet RX-Complete callback function, elsewhere declared as weak. */\r
-    ulISREvents |= EMAC_IF_RX_EVENT;\r
-       /* Wakeup the prvEMACHandlerTask. */\r
-       if( xEMACTaskHandle != NULL )\r
-       {\r
-               vTaskNotifyGiveFromISR( xEMACTaskHandle, &xHigherPriorityTaskWoken );\r
-               portYIELD_FROM_ISR( xHigherPriorityTaskWoken );\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-void HAL_ETH_TxCpltCallback( ETH_HandleTypeDef *heth )\r
-{\r
-BaseType_t xHigherPriorityTaskWoken = pdFALSE;\r
-\r
-       ( void ) heth;\r
-\r
-       /* This call-back is only useful in case packets are being sent\r
-       zero-copy.  Once they're sent, the buffers will be released\r
-       by the function vClearTXBuffers(). */\r
-       ulISREvents |= EMAC_IF_TX_EVENT;\r
-       /* Wakeup the prvEMACHandlerTask. */\r
-       if( xEMACTaskHandle != NULL )\r
-       {\r
-               vTaskNotifyGiveFromISR( xEMACTaskHandle, &xHigherPriorityTaskWoken );\r
-               portYIELD_FROM_ISR( xHigherPriorityTaskWoken );\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void vClearTXBuffers()\r
-{\r
-__IO ETH_DMADescTypeDef  *txLastDescriptor = xETH.TxDesc;\r
-size_t uxCount = ( ( UBaseType_t ) ETH_TXBUFNB ) - uxSemaphoreGetCount( xTXDescriptorSemaphore );\r
-#if( ipconfigZERO_COPY_TX_DRIVER != 0 )\r
-       NetworkBufferDescriptor_t *pxNetworkBuffer;\r
-       uint8_t *ucPayLoad;\r
-#endif\r
-\r
-       /* This function is called after a TX-completion interrupt.\r
-       It will release each Network Buffer used in xNetworkInterfaceOutput().\r
-       'uxCount' represents the number of descriptors given to DMA for transmission.\r
-       After sending a packet, the DMA will clear the 'ETH_DMATXDESC_OWN' bit. */\r
-       while( ( uxCount > 0 ) && ( ( DMATxDescToClear->Status & ETH_DMATXDESC_OWN ) == 0 ) )\r
-       {\r
-               if( ( DMATxDescToClear == txLastDescriptor ) && ( uxCount != ETH_TXBUFNB ) )\r
-               {\r
-                       break;\r
-               }\r
-               #if( ipconfigZERO_COPY_TX_DRIVER != 0 )\r
-               {\r
-                       ucPayLoad = ( uint8_t * )DMATxDescToClear->Buffer1Addr;\r
-\r
-                       if( ucPayLoad != NULL )\r
-                       {\r
-                               pxNetworkBuffer = pxPacketBuffer_to_NetworkBuffer( ucPayLoad );\r
-                               if( pxNetworkBuffer != NULL )\r
-                               {\r
-                                       vReleaseNetworkBufferAndDescriptor( pxNetworkBuffer ) ;\r
-                               }\r
-                               DMATxDescToClear->Buffer1Addr = ( uint32_t )0u;\r
-                       }\r
-               }\r
-               #endif /* ipconfigZERO_COPY_TX_DRIVER */\r
-\r
-               DMATxDescToClear = ( ETH_DMADescTypeDef * )( DMATxDescToClear->Buffer2NextDescAddr );\r
-\r
-               uxCount--;\r
-               /* Tell the counting semaphore that one more TX descriptor is available. */\r
-               xSemaphoreGive( xTXDescriptorSemaphore );\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-BaseType_t xNetworkInterfaceInitialise( void )\r
-{\r
-HAL_StatusTypeDef hal_eth_init_status;\r
-BaseType_t xResult;\r
-\r
-    if( xMacInitStatus == eMACInit )\r
-       {\r
-               xTXDescriptorSemaphore = xSemaphoreCreateCounting( ( UBaseType_t ) ETH_TXBUFNB, ( UBaseType_t ) ETH_TXBUFNB );\r
-               if( xTXDescriptorSemaphore == NULL )\r
-               {\r
-                       xMacInitStatus = eMACFailed;\r
-               }\r
-               else\r
-               {\r
-                       /* Initialise ETH */\r
-\r
-                       xETH.Instance = ETH;\r
-                       xETH.Init.AutoNegotiation = ETH_AUTONEGOTIATION_ENABLE;\r
-                       xETH.Init.Speed = ETH_SPEED_100M;\r
-                       xETH.Init.DuplexMode = ETH_MODE_FULLDUPLEX;\r
-                       /* Value of PhyAddress doesn't matter, will be probed for. */\r
-                       xETH.Init.PhyAddress = 0;\r
-\r
-                       xETH.Init.MACAddr = ( uint8_t * ) FreeRTOS_GetMACAddress();\r
-                       xETH.Init.RxMode = ETH_RXINTERRUPT_MODE;\r
-\r
-                       #if( ipconfigDRIVER_INCLUDED_TX_IP_CHECKSUM != 0 )\r
-                       {\r
-                               /* using the ETH_CHECKSUM_BY_HARDWARE option:\r
-                               both the IP and the protocol checksums will be calculated\r
-                               by the peripheral. */\r
-                               xETH.Init.ChecksumMode = ETH_CHECKSUM_BY_HARDWARE;\r
-                       }\r
-                       #else\r
-                       {\r
-                               xETH.Init.ChecksumMode = ETH_CHECKSUM_BY_SOFTWARE;\r
-                       }\r
-                       #endif\r
-\r
-                       #if( ipconfigUSE_RMII != 0 )\r
-                       {\r
-                               xETH.Init.MediaInterface = ETH_MEDIA_INTERFACE_RMII;\r
-                       }\r
-                       #else\r
-                       {\r
-                               xETH.Init.MediaInterface = ETH_MEDIA_INTERFACE_MII;\r
-                       }\r
-                       #endif /* ipconfigUSE_RMII */\r
-\r
-                       hal_eth_init_status = HAL_ETH_Init( &xETH );\r
-\r
-                       /* Only for inspection by debugger. */\r
-                       ( void ) hal_eth_init_status;\r
-\r
-                       /* Set the TxDesc and RxDesc pointers. */\r
-                       xETH.TxDesc = DMATxDscrTab;\r
-                       xETH.RxDesc = DMARxDscrTab;\r
-\r
-                       /* Make sure that all unused fields are cleared. */\r
-                       memset( &DMATxDscrTab, '\0', sizeof( DMATxDscrTab ) );\r
-                       memset( &DMARxDscrTab, '\0', sizeof( DMARxDscrTab ) );\r
-\r
-                       /* Initialize Tx Descriptors list: Chain Mode */\r
-                       DMATxDescToClear = DMATxDscrTab;\r
-\r
-                       /* Initialise TX-descriptors. */\r
-                       prvDMATxDescListInit();\r
-\r
-                       /* Initialise RX-descriptors. */\r
-                       prvDMARxDescListInit();\r
-\r
-                       #if( ipconfigUSE_LLMNR != 0 )\r
-                       {\r
-                               /* Program the LLMNR address at index 1. */\r
-                               prvMACAddressConfig( &xETH, ETH_MAC_ADDRESS1, ( uint8_t *) xLLMNR_MACAddress );\r
-                       }\r
-                       #endif\r
-\r
-                       /* Force a negotiation with the Switch or Router and wait for LS. */\r
-                       prvEthernetUpdateConfig( pdTRUE );\r
-\r
-                       /* The deferred interrupt handler task is created at the highest\r
-                       possible priority to ensure the interrupt handler can return directly\r
-                       to it.  The task's handle is stored in xEMACTaskHandle so interrupts can\r
-                       notify the task when there is something to process. */\r
-                       if( xTaskCreate( prvEMACHandlerTask, "EMAC", configEMAC_TASK_STACK_SIZE, NULL, niEMAC_HANDLER_TASK_PRIORITY, &xEMACTaskHandle ) == pdPASS )\r
-                       {\r
-                               /* The xTXDescriptorSemaphore and the task are created successfully. */\r
-                               xMacInitStatus = eMACPass;\r
-                       }\r
-                       else\r
-                       {\r
-                               xMacInitStatus = eMACFailed;\r
-                       }\r
-               }\r
-       } /* if( xEMACTaskHandle == NULL ) */\r
-\r
-       if( xMacInitStatus != eMACPass )\r
-       {\r
-               /* EMAC initialisation failed, return pdFAIL. */\r
-               xResult = pdFAIL;\r
-       }\r
-       else\r
-       {\r
-               if( xPhyObject.ulLinkStatusMask != 0uL )\r
-               {\r
-                       xETH.Instance->DMAIER |= ETH_DMA_ALL_INTS;\r
-                       xResult = pdPASS;\r
-                       FreeRTOS_printf( ( "Link Status is high\n" ) ) ;\r
-               }\r
-               else\r
-               {\r
-                       /* For now pdFAIL will be returned. But prvEMACHandlerTask() is running\r
-                       and it will keep on checking the PHY and set 'ulLinkStatusMask' when necessary. */\r
-                       xResult = pdFAIL;\r
-               }\r
-       }\r
-       /* When returning non-zero, the stack will become active and\r
-    start DHCP (in configured) */\r
-       return xResult;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvDMATxDescListInit()\r
-{\r
-ETH_DMADescTypeDef *pxDMADescriptor;\r
-BaseType_t xIndex;\r
-\r
-       /* Get the pointer on the first member of the descriptor list */\r
-       pxDMADescriptor = DMATxDscrTab;\r
-\r
-       /* Fill each DMA descriptor with the right values */\r
-       for( xIndex = 0; xIndex < ETH_TXBUFNB; xIndex++, pxDMADescriptor++ )\r
-       {\r
-               /* Set Second Address Chained bit */\r
-               pxDMADescriptor->Status = ETH_DMATXDESC_TCH;\r
-\r
-               #if( ipconfigZERO_COPY_TX_DRIVER == 0 )\r
-               {\r
-                       /* Set Buffer1 address pointer */\r
-                       pxDMADescriptor->Buffer1Addr = ( uint32_t )( Tx_Buff[ xIndex ] );\r
-               }\r
-               #endif\r
-\r
-               if( xETH.Init.ChecksumMode == ETH_CHECKSUM_BY_HARDWARE )\r
-               {\r
-                       /* Set the DMA Tx descriptors checksum insertion for TCP, UDP, and ICMP */\r
-                       pxDMADescriptor->Status |= ETH_DMATXDESC_CHECKSUMTCPUDPICMPFULL;\r
-               }\r
-               else\r
-               {\r
-                       pxDMADescriptor->Status &= ~( ( uint32_t ) ETH_DMATXDESC_CHECKSUMTCPUDPICMPFULL );\r
-               }\r
-\r
-               /* Initialize the next descriptor with the Next Descriptor Polling Enable */\r
-               if( xIndex < ETH_TXBUFNB - 1 )\r
-               {\r
-                       /* Set next descriptor address register with next descriptor base address */\r
-                       pxDMADescriptor->Buffer2NextDescAddr = ( uint32_t ) ( pxDMADescriptor + 1 );\r
-               }\r
-               else\r
-               {\r
-                       /* For last descriptor, set next descriptor address register equal to the first descriptor base address */\r
-                       pxDMADescriptor->Buffer2NextDescAddr = ( uint32_t ) DMATxDscrTab;\r
-               }\r
-       }\r
-\r
-       /* Set Transmit Descriptor List Address Register */\r
-       xETH.Instance->DMATDLAR = ( uint32_t ) DMATxDscrTab;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvDMARxDescListInit()\r
-{\r
-ETH_DMADescTypeDef *pxDMADescriptor;\r
-BaseType_t xIndex;\r
-       /*\r
-        * RX-descriptors.\r
-        */\r
-\r
-       /* Get the pointer on the first member of the descriptor list */\r
-       pxDMADescriptor = DMARxDscrTab;\r
-\r
-       /* Fill each DMA descriptor with the right values */\r
-       for( xIndex = 0; xIndex < ETH_RXBUFNB; xIndex++, pxDMADescriptor++ )\r
-       {\r
-\r
-               /* Set Buffer1 size and Second Address Chained bit */\r
-               pxDMADescriptor->ControlBufferSize = ETH_DMARXDESC_RCH | (uint32_t)ETH_RX_BUF_SIZE;  \r
-\r
-               #if( ipconfigZERO_COPY_RX_DRIVER != 0 )\r
-               {\r
-               /* Set Buffer1 address pointer */\r
-               NetworkBufferDescriptor_t *pxBuffer;\r
-\r
-                       pxBuffer = pxGetNetworkBufferWithDescriptor( ETH_RX_BUF_SIZE, 100ul );\r
-                       /* If the assert below fails, make sure that there are at least 'ETH_RXBUFNB'\r
-                       Network Buffers available during start-up ( ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ) */\r
-                       configASSERT( pxBuffer != NULL );\r
-                       if( pxBuffer != NULL )\r
-                       {\r
-                               pxDMADescriptor->Buffer1Addr = (uint32_t)pxBuffer->pucEthernetBuffer;\r
-                               pxDMADescriptor->Status = ETH_DMARXDESC_OWN;\r
-                       }\r
-               }\r
-               #else\r
-               {\r
-                       /* Set Buffer1 address pointer */\r
-                       pxDMADescriptor->Buffer1Addr = ( uint32_t )( Rx_Buff[ xIndex ] );\r
-                       /* Set Own bit of the Rx descriptor Status */\r
-                       pxDMADescriptor->Status = ETH_DMARXDESC_OWN;\r
-               }\r
-               #endif\r
-\r
-               /* Initialize the next descriptor with the Next Descriptor Polling Enable */\r
-               if( xIndex < ETH_RXBUFNB - 1 )\r
-               {\r
-                       /* Set next descriptor address register with next descriptor base address */\r
-                       pxDMADescriptor->Buffer2NextDescAddr = ( uint32_t )( pxDMADescriptor + 1 );\r
-               }\r
-               else\r
-               {\r
-                       /* For last descriptor, set next descriptor address register equal to the first descriptor base address */\r
-                       pxDMADescriptor->Buffer2NextDescAddr = ( uint32_t ) DMARxDscrTab;\r
-               }\r
-\r
-       }\r
-       /* Set Receive Descriptor List Address Register */\r
-       xETH.Instance->DMARDLAR = ( uint32_t ) DMARxDscrTab;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvMACAddressConfig(ETH_HandleTypeDef *heth, uint32_t ulIndex, uint8_t *Addr)\r
-{\r
-uint32_t ulTempReg;\r
-\r
-       ( void ) heth;\r
-\r
-       /* Calculate the selected MAC address high register. */\r
-       ulTempReg = 0x80000000ul | ( ( uint32_t ) Addr[ 5 ] << 8 ) | ( uint32_t ) Addr[ 4 ];\r
-\r
-       /* Load the selected MAC address high register. */\r
-       ( *(__IO uint32_t *)( ( uint32_t ) ( ETH_MAC_ADDR_HBASE + ulIndex ) ) ) = ulTempReg;\r
-\r
-       /* Calculate the selected MAC address low register. */\r
-       ulTempReg = ( ( uint32_t ) Addr[ 3 ] << 24 ) | ( ( uint32_t ) Addr[ 2 ] << 16 ) | ( ( uint32_t ) Addr[ 1 ] << 8 ) | Addr[ 0 ];\r
-\r
-       /* Load the selected MAC address low register */\r
-       ( *(__IO uint32_t *) ( ( uint32_t ) ( ETH_MAC_ADDR_LBASE + ulIndex ) ) ) = ulTempReg;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-BaseType_t xNetworkInterfaceOutput( NetworkBufferDescriptor_t * const pxDescriptor, BaseType_t bReleaseAfterSend )\r
-{\r
-BaseType_t xReturn = pdFAIL;\r
-uint32_t ulTransmitSize = 0;\r
-__IO ETH_DMADescTypeDef *pxDmaTxDesc;\r
-/* Do not wait too long for a free TX DMA buffer. */\r
-const TickType_t xBlockTimeTicks = pdMS_TO_TICKS( 50u );\r
-\r
-       /* Open a do {} while ( 0 ) loop to be able to call break. */\r
-       do\r
-       {\r
-               if( xCheckLoopback( pxDescriptor, bReleaseAfterSend ) != 0 )\r
-               {\r
-                       /* The packet has been sent back to the IP-task.\r
-                       The IP-task will further handle it.\r
-                       Do not release the descriptor. */\r
-                       bReleaseAfterSend = pdFALSE;\r
-                       break;\r
-               }\r
-               #if( ipconfigDRIVER_INCLUDED_TX_IP_CHECKSUM != 0 )\r
-               {\r
-               ProtocolPacket_t *pxPacket;\r
-\r
-                       /* If the peripheral must calculate the checksum, it wants\r
-                       the protocol checksum to have a value of zero. */\r
-                       pxPacket = ( ProtocolPacket_t * ) ( pxDescriptor->pucEthernetBuffer );\r
-\r
-                       if( pxPacket->xICMPPacket.xIPHeader.ucProtocol == ( uint8_t ) ipPROTOCOL_ICMP )\r
-                       {\r
-                               pxPacket->xICMPPacket.xICMPHeader.usChecksum = ( uint16_t )0u;\r
-                       }\r
-               }\r
-               #endif /* ipconfigDRIVER_INCLUDED_TX_IP_CHECKSUM */\r
-               if( xPhyObject.ulLinkStatusMask != 0 )\r
-               {\r
-                       if( xSemaphoreTake( xTXDescriptorSemaphore, xBlockTimeTicks ) != pdPASS )\r
-                       {\r
-                               /* Time-out waiting for a free TX descriptor. */\r
-                               break;\r
-                       }\r
-\r
-                       /* This function does the actual transmission of the packet. The packet is\r
-                       contained in 'pxDescriptor' that is passed to the function. */\r
-                       pxDmaTxDesc = xETH.TxDesc;\r
-\r
-                       /* Is this buffer available? */\r
-                       configASSERT ( ( pxDmaTxDesc->Status & ETH_DMATXDESC_OWN ) == 0 );\r
-\r
-                       {\r
-                               /* Is this buffer available? */\r
-                               /* Get bytes in current buffer. */\r
-                               ulTransmitSize = pxDescriptor->xDataLength;\r
-\r
-                               if( ulTransmitSize > ETH_TX_BUF_SIZE )\r
-                               {\r
-                                       ulTransmitSize = ETH_TX_BUF_SIZE;\r
-                               }\r
-\r
-                               #if( ipconfigZERO_COPY_TX_DRIVER == 0 )\r
-                               {\r
-                                       /* Copy the bytes. */\r
-                                       memcpy( ( void * ) pxDmaTxDesc->Buffer1Addr, pxDescriptor->pucEthernetBuffer, ulTransmitSize );\r
-                               }\r
-                               #else\r
-                               {\r
-                                       configASSERT( bReleaseAfterSend != 0 );\r
-\r
-                                       /* Move the buffer. */\r
-                                       pxDmaTxDesc->Buffer1Addr = ( uint32_t )pxDescriptor->pucEthernetBuffer;\r
-                                       /* The Network Buffer has been passed to DMA, no need to release it. */\r
-                                       bReleaseAfterSend = pdFALSE_UNSIGNED;\r
-                               }\r
-                               #endif /* ipconfigZERO_COPY_TX_DRIVER */\r
-\r
-                               /* Ask to set the IPv4 checksum.\r
-                               Also need an Interrupt on Completion so that 'vClearTXBuffers()' will be called.. */\r
-                               #if( ipconfigDRIVER_INCLUDED_TX_IP_CHECKSUM != 0 )\r
-                               {\r
-                                       pxDmaTxDesc->Status |= ETH_DMATXDESC_CIC_TCPUDPICMP_FULL | ETH_DMATXDESC_IC;\r
-                               }\r
-                               #else\r
-                               {\r
-                                       pxDmaTxDesc->Status &= ~( ( uint32_t ) ETH_DMATXDESC_CIC );\r
-                                       pxDmaTxDesc->Status |= ETH_DMATXDESC_IC;\r
-                               }\r
-                               #endif\r
-                               \r
-\r
-                               /* Prepare transmit descriptors to give to DMA. */\r
-\r
-                               /* Set LAST and FIRST segment */\r
-                               pxDmaTxDesc->Status |= ETH_DMATXDESC_FS | ETH_DMATXDESC_LS;\r
-                               /* Set frame size */\r
-                               pxDmaTxDesc->ControlBufferSize = ( ulTransmitSize & ETH_DMATXDESC_TBS1 );\r
-\r
-                               #if( NETWORK_BUFFERS_CACHED     != 0 )\r
-                               {\r
-                               BaseType_t xlength = CACHE_LINE_SIZE * ( ( ulTransmitSize + NETWORK_BUFFER_HEADER_SIZE + CACHE_LINE_SIZE - 1 ) / CACHE_LINE_SIZE );\r
-                               uint32_t *pulBuffer = ( uint32_t )( pxDescriptor->pucEthernetBuffer - NETWORK_BUFFER_HEADER_SIZE );\r
-                                       cache_clean_invalidate_by_addr( pulBuffer, xlength );\r
-                               }\r
-                               #endif\r
-\r
-                               /* Set Own bit of the Tx descriptor Status: gives the buffer back to ETHERNET DMA */\r
-                               pxDmaTxDesc->Status |= ETH_DMATXDESC_OWN;\r
-\r
-                               /* Point to next descriptor */\r
-                               xETH.TxDesc = ( ETH_DMADescTypeDef * ) ( xETH.TxDesc->Buffer2NextDescAddr );\r
-                               /* Ensure completion of memory access */\r
-                               __DSB();\r
-                               /* Resume DMA transmission*/\r
-                               xETH.Instance->DMATPDR = 0;\r
-                               iptraceNETWORK_INTERFACE_TRANSMIT();\r
-                               xReturn = pdPASS;\r
-                       }\r
-               }\r
-               else\r
-               {\r
-                       /* The PHY has no Link Status, packet shall be dropped. */\r
-               }\r
-       } while( 0 );\r
-       /* The buffer has been sent so can be released. */\r
-       if( bReleaseAfterSend != pdFALSE )\r
-       {\r
-               vReleaseNetworkBufferAndDescriptor( pxDescriptor );\r
-       }\r
-\r
-       return xReturn;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static BaseType_t xMayAcceptPacket( uint8_t *pcBuffer )\r
-{\r
-const ProtocolPacket_t *pxProtPacket = ( const ProtocolPacket_t * )pcBuffer;\r
-\r
-       switch( pxProtPacket->xTCPPacket.xEthernetHeader.usFrameType )\r
-       {\r
-       case ipARP_FRAME_TYPE:\r
-               /* Check it later. */\r
-               return pdTRUE;\r
-       case ipIPv4_FRAME_TYPE:\r
-               /* Check it here. */\r
-               break;\r
-       default:\r
-               /* Refuse the packet. */\r
-               return pdFALSE;\r
-       }\r
-\r
-       #if( ipconfigETHERNET_DRIVER_FILTERS_PACKETS == 1 )\r
-       {\r
-               const IPHeader_t *pxIPHeader = &(pxProtPacket->xTCPPacket.xIPHeader);\r
-               uint32_t ulDestinationIPAddress;\r
-\r
-               /* Ensure that the incoming packet is not fragmented (only outgoing packets\r
-                * can be fragmented) as these are the only handled IP frames currently. */\r
-               if( ( pxIPHeader->usFragmentOffset & FreeRTOS_ntohs( ipFRAGMENT_OFFSET_BIT_MASK ) ) != 0U )\r
-               {\r
-                       return pdFALSE;\r
-               }\r
-               /* HT: Might want to make the following configurable because\r
-                * most IP messages have a standard length of 20 bytes */\r
-\r
-               /* 0x45 means: IPv4 with an IP header of 5 x 4 = 20 bytes\r
-                * 0x47 means: IPv4 with an IP header of 7 x 4 = 28 bytes */\r
-               if( pxIPHeader->ucVersionHeaderLength < 0x45 || pxIPHeader->ucVersionHeaderLength > 0x4F )\r
-               {\r
-                       return pdFALSE;\r
-               }\r
-\r
-               ulDestinationIPAddress = pxIPHeader->ulDestinationIPAddress;\r
-               /* Is the packet for this node? */\r
-               if( ( ulDestinationIPAddress != *ipLOCAL_IP_ADDRESS_POINTER ) &&\r
-                       /* Is it a broadcast address x.x.x.255 ? */\r
-                       ( ( FreeRTOS_ntohl( ulDestinationIPAddress ) & 0xff ) != 0xff ) &&\r
-               #if( ipconfigUSE_LLMNR == 1 )\r
-                       ( ulDestinationIPAddress != ipLLMNR_IP_ADDR ) &&\r
-               #endif\r
-                       ( *ipLOCAL_IP_ADDRESS_POINTER != 0 ) ) {\r
-                       FreeRTOS_printf( ( "Drop IP %lxip\n", FreeRTOS_ntohl( ulDestinationIPAddress ) ) );\r
-                       return pdFALSE;\r
-               }\r
-\r
-               if( pxIPHeader->ucProtocol == ipPROTOCOL_UDP )\r
-               {\r
-               uint16_t usSourcePort = FreeRTOS_ntohs( pxProtPacket->xUDPPacket.xUDPHeader.usSourcePort );\r
-               uint16_t usDestinationPort = FreeRTOS_ntohs( pxProtPacket->xUDPPacket.xUDPHeader.usDestinationPort );\r
-\r
-                       if( ( xPortHasUDPSocket( pxProtPacket->xUDPPacket.xUDPHeader.usDestinationPort ) == pdFALSE )\r
-                       #if ipconfigUSE_LLMNR == 1\r
-                               && ( usDestinationPort != ipLLMNR_PORT )\r
-                               && ( usSourcePort != ipLLMNR_PORT )\r
-                       #endif\r
-                       #if ipconfigUSE_NBNS == 1\r
-                               && ( usDestinationPort != ipNBNS_PORT )\r
-                               && ( usSourcePort != ipNBNS_PORT )\r
-                       #endif\r
-                       #if ipconfigUSE_DNS == 1\r
-                               && ( usSourcePort != ipDNS_PORT )\r
-                       #endif\r
-                               ) {\r
-                               /* Drop this packet, not for this device. */\r
-                               /* FreeRTOS_printf( ( "Drop: UDP port %d -> %d\n", usSourcePort, usDestinationPort ) ); */\r
-                               return pdFALSE;\r
-                       }\r
-               }\r
-       }\r
-       #endif  /* ipconfigETHERNET_DRIVER_FILTERS_PACKETS */\r
-       return pdTRUE;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvPassEthMessages( NetworkBufferDescriptor_t *pxDescriptor )\r
-{\r
-IPStackEvent_t xRxEvent;\r
-\r
-       xRxEvent.eEventType = eNetworkRxEvent;\r
-       xRxEvent.pvData = ( void * ) pxDescriptor;\r
-\r
-       if( xSendEventStructToIPTask( &xRxEvent, ( TickType_t ) 1000 ) != pdPASS )\r
-       {\r
-               /* The buffer could not be sent to the stack so must be released again.\r
-               This is a deferred handler taskr, not a real interrupt, so it is ok to\r
-               use the task level function here. */\r
-               #if( ipconfigUSE_LINKED_RX_MESSAGES != 0 )\r
-               {\r
-                       do\r
-                       {\r
-                               NetworkBufferDescriptor_t *pxNext = pxDescriptor->pxNextBuffer;\r
-                               vReleaseNetworkBufferAndDescriptor( pxDescriptor );\r
-                               pxDescriptor = pxNext;\r
-                       } while( pxDescriptor != NULL );\r
-               }\r
-               #else\r
-               {\r
-                       vReleaseNetworkBufferAndDescriptor( pxDescriptor );\r
-               }\r
-               #endif  /* ipconfigUSE_LINKED_RX_MESSAGES */\r
-               iptraceETHERNET_RX_EVENT_LOST();\r
-               FreeRTOS_printf( ( "prvPassEthMessages: Can not queue return packet!\n" ) );\r
-       }\r
-       else\r
-       {\r
-               iptraceNETWORK_INTERFACE_RECEIVE();\r
-       }\r
-}\r
-\r
-static BaseType_t prvNetworkInterfaceInput( void )\r
-{\r
-NetworkBufferDescriptor_t *pxCurDescriptor;\r
-NetworkBufferDescriptor_t *pxNewDescriptor = NULL;\r
-#if( ipconfigUSE_LINKED_RX_MESSAGES != 0 )\r
-       NetworkBufferDescriptor_t *pxFirstDescriptor = NULL;\r
-       NetworkBufferDescriptor_t *pxLastDescriptor = NULL;\r
-#endif\r
-BaseType_t xReceivedLength = 0;\r
-__IO ETH_DMADescTypeDef *pxDMARxDescriptor;\r
-const TickType_t xDescriptorWaitTime = pdMS_TO_TICKS( niDESCRIPTOR_WAIT_TIME_MS );\r
-uint8_t *pucBuffer;\r
-\r
-       pxDMARxDescriptor = xETH.RxDesc;\r
-\r
-       while( ( pxDMARxDescriptor->Status & ETH_DMARXDESC_OWN ) == 0u )\r
-       {\r
-       BaseType_t xAccepted = pdTRUE;\r
-               /* Get the Frame Length of the received packet: substruct 4 bytes of the CRC */\r
-               xReceivedLength = ( ( pxDMARxDescriptor->Status & ETH_DMARXDESC_FL ) >> ETH_DMARXDESC_FRAMELENGTHSHIFT ) - 4;\r
-\r
-               pucBuffer = (uint8_t *) pxDMARxDescriptor->Buffer1Addr;\r
-\r
-               /* Update the ETHERNET DMA global Rx descriptor with next Rx descriptor */\r
-               /* Chained Mode */    \r
-               /* Selects the next DMA Rx descriptor list for next buffer to read */ \r
-               xETH.RxDesc = ( ETH_DMADescTypeDef* )pxDMARxDescriptor->Buffer2NextDescAddr;\r
-\r
-               /* In order to make the code easier and faster, only packets in a single buffer\r
-               will be accepted.  This can be done by making the buffers large enough to\r
-               hold a complete Ethernet packet (1536 bytes).\r
-               Therefore, two sanity checks: */\r
-               configASSERT( xReceivedLength <= ETH_RX_BUF_SIZE );\r
-\r
-               if( ( pxDMARxDescriptor->Status & ( ETH_DMARXDESC_CE | ETH_DMARXDESC_IPV4HCE | ETH_DMARXDESC_FT ) ) != ETH_DMARXDESC_FT )\r
-               {\r
-                       /* Not an Ethernet frame-type or a checmsum error. */\r
-                       xAccepted = pdFALSE;\r
-               }\r
-               else\r
-               {\r
-                       /* See if this packet must be handled. */\r
-                       xAccepted = xMayAcceptPacket( pucBuffer );\r
-               }\r
-\r
-               if( xAccepted != pdFALSE )\r
-               {\r
-                       /* The packet wil be accepted, but check first if a new Network Buffer can\r
-                       be obtained. If not, the packet will still be dropped. */\r
-                       pxNewDescriptor = pxGetNetworkBufferWithDescriptor( ETH_RX_BUF_SIZE, xDescriptorWaitTime );\r
-\r
-                       if( pxNewDescriptor == NULL )\r
-                       {\r
-                               /* A new descriptor can not be allocated now. This packet will be dropped. */\r
-                               xAccepted = pdFALSE;\r
-                       }\r
-               }\r
-               #if( ipconfigZERO_COPY_RX_DRIVER != 0 )\r
-               {\r
-                       /* Find out which Network Buffer was originally passed to the descriptor. */\r
-                       pxCurDescriptor = pxPacketBuffer_to_NetworkBuffer( pucBuffer );\r
-                       configASSERT( pxCurDescriptor != NULL );\r
-               }\r
-               #else\r
-               {\r
-                       /* In this mode, the two descriptors are the same. */\r
-                       pxCurDescriptor = pxNewDescriptor;\r
-                       if( pxNewDescriptor != NULL )\r
-                       {\r
-                               /* The packet is acepted and a new Network Buffer was created,\r
-                               copy data to the Network Bufffer. */\r
-                               memcpy( pxNewDescriptor->pucEthernetBuffer, pucBuffer, xReceivedLength );\r
-                       }\r
-               }\r
-               #endif\r
-\r
-               if( xAccepted != pdFALSE )\r
-               {\r
-                       pxCurDescriptor->xDataLength = xReceivedLength;\r
-                       #if( ipconfigUSE_LINKED_RX_MESSAGES != 0 )\r
-                       {\r
-                               pxCurDescriptor->pxNextBuffer = NULL;\r
-\r
-                               if( pxFirstDescriptor == NULL )\r
-                               {\r
-                                       // Becomes the first message\r
-                                       pxFirstDescriptor = pxCurDescriptor;\r
-                               }\r
-                               else if( pxLastDescriptor != NULL )\r
-                               {\r
-                                       // Add to the tail\r
-                                       pxLastDescriptor->pxNextBuffer = pxCurDescriptor;\r
-                               }\r
-\r
-                               pxLastDescriptor = pxCurDescriptor;\r
-                       }\r
-                       #else\r
-                       {\r
-                               prvPassEthMessages( pxCurDescriptor );\r
-                       }\r
-                       #endif\r
-               }\r
-\r
-               /* Release descriptors to DMA */\r
-               #if( ipconfigZERO_COPY_RX_DRIVER != 0 )\r
-               {\r
-                       /* Set Buffer1 address pointer */\r
-                       if( pxNewDescriptor != NULL )\r
-                       {\r
-                               pxDMARxDescriptor->Buffer1Addr = (uint32_t)pxNewDescriptor->pucEthernetBuffer;\r
-                       }\r
-                       else\r
-                       {\r
-                               /* The packet was dropped and the same Network\r
-                               Buffer will be used to receive a new packet. */\r
-                       }\r
-               }\r
-               #endif /* ipconfigZERO_COPY_RX_DRIVER */\r
-\r
-               /* Set Buffer1 size and Second Address Chained bit */\r
-               pxDMARxDescriptor->ControlBufferSize = ETH_DMARXDESC_RCH | (uint32_t)ETH_RX_BUF_SIZE;  \r
-               pxDMARxDescriptor->Status = ETH_DMARXDESC_OWN;\r
-\r
-               /* Ensure completion of memory access */\r
-               __DSB();\r
-               /* When Rx Buffer unavailable flag is set clear it and resume\r
-               reception. */\r
-               if( ( xETH.Instance->DMASR & ETH_DMASR_RBUS ) != 0 )\r
-               {\r
-                       /* Clear RBUS ETHERNET DMA flag. */\r
-                       xETH.Instance->DMASR = ETH_DMASR_RBUS;\r
-\r
-                       /* Resume DMA reception. */\r
-                       xETH.Instance->DMARPDR = 0;\r
-               }\r
-               pxDMARxDescriptor = xETH.RxDesc;\r
-       }\r
-\r
-       #if( ipconfigUSE_LINKED_RX_MESSAGES != 0 )\r
-       {\r
-               if( pxFirstDescriptor != NULL )\r
-               {\r
-                       prvPassEthMessages( pxFirstDescriptor );\r
-               }\r
-       }\r
-       #endif  /* ipconfigUSE_LINKED_RX_MESSAGES */\r
-\r
-       return ( xReceivedLength > 0 );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-\r
-BaseType_t xSTM32_PhyRead( BaseType_t xAddress, BaseType_t xRegister, uint32_t *pulValue )\r
-{\r
-uint16_t usPrevAddress = xETH.Init.PhyAddress;\r
-BaseType_t xResult;\r
-HAL_StatusTypeDef xHALResult;\r
-\r
-       xETH.Init.PhyAddress = xAddress;\r
-       xHALResult = HAL_ETH_ReadPHYRegister( &xETH, ( uint16_t )xRegister, pulValue );\r
-       xETH.Init.PhyAddress = usPrevAddress;\r
-\r
-       if( xHALResult == HAL_OK )\r
-       {\r
-               xResult = 0;\r
-       }\r
-       else\r
-       {\r
-               xResult = -1;\r
-       }\r
-       return xResult;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-BaseType_t xSTM32_PhyWrite( BaseType_t xAddress, BaseType_t xRegister, uint32_t ulValue )\r
-{\r
-uint16_t usPrevAddress = xETH.Init.PhyAddress;\r
-BaseType_t xResult;\r
-HAL_StatusTypeDef xHALResult;\r
-\r
-       xETH.Init.PhyAddress = xAddress;\r
-       xHALResult = HAL_ETH_WritePHYRegister( &xETH, ( uint16_t )xRegister, ulValue );\r
-       xETH.Init.PhyAddress = usPrevAddress;\r
-\r
-       if( xHALResult == HAL_OK )\r
-       {\r
-               xResult = 0;\r
-       }\r
-       else\r
-       {\r
-               xResult = -1;\r
-       }\r
-       return xResult;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-void vMACBProbePhy( void )\r
-{\r
-       vPhyInitialise( &xPhyObject, xSTM32_PhyRead, xSTM32_PhyWrite );\r
-       xPhyDiscover( &xPhyObject );\r
-       xPhyConfigure( &xPhyObject, &xPHYProperties );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvEthernetUpdateConfig( BaseType_t xForce )\r
-{\r
-       FreeRTOS_printf( ( "prvEthernetUpdateConfig: LS mask %02lX Force %d\n",\r
-               xPhyObject.ulLinkStatusMask,\r
-               ( int )xForce ) );\r
-\r
-       if( ( xForce != pdFALSE ) || ( xPhyObject.ulLinkStatusMask != 0 ) )\r
-       {\r
-               /* Restart the auto-negotiation. */\r
-               if( xETH.Init.AutoNegotiation != ETH_AUTONEGOTIATION_DISABLE )\r
-               {\r
-                       xPhyStartAutoNegotiation( &xPhyObject, xPhyGetMask( &xPhyObject ) );\r
-\r
-                       /* Configure the MAC with the Duplex Mode fixed by the\r
-                       auto-negotiation process. */\r
-                       if( xPhyObject.xPhyProperties.ucDuplex == PHY_DUPLEX_FULL )\r
-                       {\r
-                               xETH.Init.DuplexMode = ETH_MODE_FULLDUPLEX;\r
-                       }\r
-                       else\r
-                       {\r
-                               xETH.Init.DuplexMode = ETH_MODE_HALFDUPLEX;\r
-                       }\r
-\r
-                       /* Configure the MAC with the speed fixed by the\r
-                       auto-negotiation process. */\r
-                       if( xPhyObject.xPhyProperties.ucSpeed == PHY_SPEED_10 )\r
-                       {\r
-                               xETH.Init.Speed = ETH_SPEED_10M;\r
-                       }\r
-                       else\r
-                       {\r
-                               xETH.Init.Speed = ETH_SPEED_100M;\r
-                       }\r
-               }\r
-               else /* AutoNegotiation Disable */\r
-               {\r
-                       /* Check parameters */\r
-                       assert_param( IS_ETH_SPEED( xETH.Init.Speed ) );\r
-                       assert_param( IS_ETH_DUPLEX_MODE( xETH.Init.DuplexMode ) );\r
-\r
-                       if( xETH.Init.DuplexMode == ETH_MODE_FULLDUPLEX )\r
-                       {\r
-                               xPhyObject.xPhyPreferences.ucDuplex = PHY_DUPLEX_HALF;\r
-                       }\r
-                       else\r
-                       {\r
-                               xPhyObject.xPhyPreferences.ucDuplex = PHY_DUPLEX_FULL;\r
-                       }\r
-\r
-                       if( xETH.Init.Speed == ETH_SPEED_10M )\r
-                       {\r
-                               xPhyObject.xPhyPreferences.ucSpeed = PHY_SPEED_10;\r
-                       }\r
-                       else\r
-                       {\r
-                               xPhyObject.xPhyPreferences.ucSpeed = PHY_SPEED_100;\r
-                       }\r
-\r
-                       xPhyObject.xPhyPreferences.ucMDI_X = PHY_MDIX_AUTO;\r
-\r
-                       /* Use predefined (fixed) configuration. */\r
-                       xPhyFixedValue( &xPhyObject, xPhyGetMask( &xPhyObject ) );\r
-               }\r
-\r
-               /* ETHERNET MAC Re-Configuration */\r
-               HAL_ETH_ConfigMAC( &xETH, (ETH_MACInitTypeDef *) NULL);\r
-\r
-               /* Restart MAC interface */\r
-               HAL_ETH_Start( &xETH);\r
-       }\r
-       else\r
-       {\r
-               /* Stop MAC interface */\r
-               HAL_ETH_Stop( &xETH );\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-BaseType_t xGetPhyLinkStatus( void )\r
-{\r
-BaseType_t xReturn;\r
-\r
-       if( xPhyObject.ulLinkStatusMask != 0 )\r
-       {\r
-               xReturn = pdPASS;\r
-       }\r
-       else\r
-       {\r
-               xReturn = pdFAIL;\r
-       }\r
-\r
-       return xReturn;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-/* Uncomment this in case BufferAllocation_1.c is used. */\r
-\r
-void vNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] )\r
-{\r
-static __attribute__ ((section(".first_data"))) uint8_t ucNetworkPackets[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS * ETH_MAX_PACKET_SIZE ] __attribute__ ( ( aligned( 32 ) ) );\r
-uint8_t *ucRAMBuffer = ucNetworkPackets;\r
-uint32_t ul;\r
-\r
-       for( ul = 0; ul < ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS; ul++ )\r
-       {\r
-               pxNetworkBuffers[ ul ].pucEthernetBuffer = ucRAMBuffer + ipBUFFER_PADDING;\r
-               *( ( unsigned * ) ucRAMBuffer ) = ( unsigned ) ( &( pxNetworkBuffers[ ul ] ) );\r
-               ucRAMBuffer += ETH_MAX_PACKET_SIZE;\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvEMACHandlerTask( void *pvParameters )\r
-{\r
-UBaseType_t uxLastMinBufferCount = 0;\r
-#if( ipconfigCHECK_IP_QUEUE_SPACE != 0 )\r
-UBaseType_t uxLastMinQueueSpace = 0;\r
-#endif\r
-UBaseType_t uxCurrentCount;\r
-BaseType_t xResult;\r
-const TickType_t ulMaxBlockTime = pdMS_TO_TICKS( 100UL );\r
-\r
-       /* Remove compiler warnings about unused parameters. */\r
-       ( void ) pvParameters;\r
-\r
-       for( ;; )\r
-       {\r
-               xResult = 0;\r
-               uxCurrentCount = uxGetMinimumFreeNetworkBuffers();\r
-               if( uxLastMinBufferCount != uxCurrentCount )\r
-               {\r
-                       /* The logging produced below may be helpful\r
-                       while tuning +TCP: see how many buffers are in use. */\r
-                       uxLastMinBufferCount = uxCurrentCount;\r
-                       FreeRTOS_printf( ( "Network buffers: %lu lowest %lu\n",\r
-                               uxGetNumberOfFreeNetworkBuffers(), uxCurrentCount ) );\r
-               }\r
-\r
-               if( xTXDescriptorSemaphore != NULL )\r
-               {\r
-               static UBaseType_t uxLowestSemCount = ( UBaseType_t ) ETH_TXBUFNB - 1;\r
-\r
-                       uxCurrentCount = uxSemaphoreGetCount( xTXDescriptorSemaphore );\r
-                       if( uxLowestSemCount > uxCurrentCount )\r
-                       {\r
-                               uxLowestSemCount = uxCurrentCount;\r
-                               FreeRTOS_printf( ( "TX DMA buffers: lowest %lu\n", uxLowestSemCount ) );\r
-                       }\r
-\r
-               }\r
-\r
-               #if( ipconfigCHECK_IP_QUEUE_SPACE != 0 )\r
-               {\r
-                       uxCurrentCount = uxGetMinimumIPQueueSpace();\r
-                       if( uxLastMinQueueSpace != uxCurrentCount )\r
-                       {\r
-                               /* The logging produced below may be helpful\r
-                               while tuning +TCP: see how many buffers are in use. */\r
-                               uxLastMinQueueSpace = uxCurrentCount;\r
-                               FreeRTOS_printf( ( "Queue space: lowest %lu\n", uxCurrentCount ) );\r
-                       }\r
-               }\r
-               #endif /* ipconfigCHECK_IP_QUEUE_SPACE */\r
-\r
-               if( ( ulISREvents & EMAC_IF_ALL_EVENT ) == 0 )\r
-               {\r
-                       /* No events to process now, wait for the next. */\r
-                       ulTaskNotifyTake( pdFALSE, ulMaxBlockTime );\r
-               }\r
-\r
-               if( ( ulISREvents & EMAC_IF_RX_EVENT ) != 0 )\r
-               {\r
-                       ulISREvents &= ~EMAC_IF_RX_EVENT;\r
-\r
-                       xResult = prvNetworkInterfaceInput();\r
-               }\r
-\r
-               if( ( ulISREvents & EMAC_IF_TX_EVENT ) != 0 )\r
-               {\r
-                       /* Code to release TX buffers if zero-copy is used. */\r
-                       ulISREvents &= ~EMAC_IF_TX_EVENT;\r
-                       /* Check if DMA packets have been delivered. */\r
-                       vClearTXBuffers();\r
-               }\r
-\r
-               if( ( ulISREvents & EMAC_IF_ERR_EVENT ) != 0 )\r
-               {\r
-                       /* Future extension: logging about errors that occurred. */\r
-                       ulISREvents &= ~EMAC_IF_ERR_EVENT;\r
-               }\r
-               if( xPhyCheckLinkStatus( &xPhyObject, xResult ) != 0 )\r
-               {\r
-                       /* Something has changed to a Link Status, need re-check. */\r
-                       prvEthernetUpdateConfig( pdFALSE );\r
-               }\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-void ETH_IRQHandler( void )\r
-{\r
-       HAL_ETH_IRQHandler( &xETH );\r
-}\r
-\r
+/*
+ * Some constants, hardware definitions and comments taken from ST's HAL driver
+ * library, COPYRIGHT(c) 2015 STMicroelectronics.
+ */
+
+/*
+FreeRTOS+TCP V2.0.11
+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
+*/
+
+/* Standard includes. */
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+/* FreeRTOS includes. */
+#include "FreeRTOS.h"
+#include "task.h"
+#include "queue.h"
+#include "semphr.h"
+
+/* FreeRTOS+TCP includes. */
+#include "FreeRTOS_IP.h"
+#include "FreeRTOS_Sockets.h"
+#include "FreeRTOS_IP_Private.h"
+#include "FreeRTOS_DNS.h"
+#include "NetworkBufferManagement.h"
+#include "NetworkInterface.h"
+
+/* ST includes. */
+#include "stm32f4xx_hal.h"
+
+#ifndef        BMSR_LINK_STATUS
+       #define BMSR_LINK_STATUS            0x0004UL
+#endif
+
+#ifndef        PHY_LS_HIGH_CHECK_TIME_MS
+       /* Check if the LinkSStatus in the PHY is still high after 15 seconds of not
+       receiving packets. */
+       #define PHY_LS_HIGH_CHECK_TIME_MS       15000
+#endif
+
+#ifndef        PHY_LS_LOW_CHECK_TIME_MS
+       /* Check if the LinkSStatus in the PHY is still low every second. */
+       #define PHY_LS_LOW_CHECK_TIME_MS        1000
+#endif
+
+/* Interrupt events to process.  Currently only the Rx event is processed
+although code for other events is included to allow for possible future
+expansion. */
+#define EMAC_IF_RX_EVENT        1UL
+#define EMAC_IF_TX_EVENT        2UL
+#define EMAC_IF_ERR_EVENT       4UL
+#define EMAC_IF_ALL_EVENT       ( EMAC_IF_RX_EVENT | EMAC_IF_TX_EVENT | EMAC_IF_ERR_EVENT )
+
+#define ETH_DMA_ALL_INTS \
+       ( ETH_DMA_IT_TST | ETH_DMA_IT_PMT | ETH_DMA_IT_MMC | ETH_DMA_IT_NIS | ETH_DMA_IT_ER | \
+         ETH_DMA_IT_FBE | ETH_DMA_IT_RWT | ETH_DMA_IT_RPS | ETH_DMA_IT_RBU | ETH_DMA_IT_R | \
+         ETH_DMA_IT_TU | ETH_DMA_IT_RO | ETH_DMA_IT_TJT | ETH_DMA_IT_TPS | ETH_DMA_IT_T )
+
+/* Naming and numbering of PHY registers. */
+#define PHY_REG_00_BMCR                        0x00    /* Basic Mode Control Register */
+#define PHY_REG_01_BMSR                        0x01    /* Basic Mode Status Register */
+#define PHY_REG_02_PHYSID1             0x02    /* PHYS ID 1 */
+#define PHY_REG_03_PHYSID2             0x03    /* PHYS ID 2 */
+#define PHY_REG_04_ADVERTISE   0x04    /* Advertisement control reg */
+
+#define PHY_ID_LAN8720         0x0007c0f0
+#define PHY_ID_DP83848I                0x20005C90
+
+#ifndef USE_STM324xG_EVAL
+       #define USE_STM324xG_EVAL       1
+#endif
+
+#if( USE_STM324xG_EVAL == 0 )
+       #define EXPECTED_PHY_ID                 PHY_ID_LAN8720
+       #define PHY_REG_1F_PHYSPCS              0x1F    /* 31 RW PHY Special Control Status */
+       /* Use 3 bits in register 31 */
+       #define PHYSPCS_SPEED_MASK              0x0C
+       #define PHYSPCS_SPEED_10                0x04
+       #define PHYSPCS_SPEED_100               0x08
+       #define PHYSPCS_FULL_DUPLEX             0x10
+#else
+       #define EXPECTED_PHY_ID         PHY_ID_DP83848I
+
+       #define PHY_REG_10_PHY_SR               0x10    /* PHY status register Offset */
+       #define PHY_REG_19_PHYCR                0x19    /* 25 RW PHY Control Register */
+#endif
+
+/* Some defines used internally here to indicate preferences about speed, MDIX
+(wired direct or crossed), and duplex (half or full). */
+#define        PHY_SPEED_10       1
+#define        PHY_SPEED_100      2
+#define        PHY_SPEED_AUTO     (PHY_SPEED_10|PHY_SPEED_100)
+
+#define        PHY_MDIX_DIRECT    1
+#define        PHY_MDIX_CROSSED   2
+#define        PHY_MDIX_AUTO      (PHY_MDIX_CROSSED|PHY_MDIX_DIRECT)
+
+#define        PHY_DUPLEX_HALF    1
+#define        PHY_DUPLEX_FULL    2
+#define        PHY_DUPLEX_AUTO    (PHY_DUPLEX_FULL|PHY_DUPLEX_HALF)
+
+#define PHY_AUTONEGO_COMPLETE    ((uint16_t)0x0020)  /*!< Auto-Negotiation process completed   */
+
+/*
+ * Description of all capabilities that can be advertised to
+ * the peer (usually a switch or router).
+ */
+#define ADVERTISE_CSMA                 0x0001          /* Only selector supported. */
+#define ADVERTISE_10HALF               0x0020          /* Try for 10mbps half-duplex. */
+#define ADVERTISE_10FULL               0x0040          /* Try for 10mbps full-duplex. */
+#define ADVERTISE_100HALF              0x0080          /* Try for 100mbps half-duplex. */
+#define ADVERTISE_100FULL              0x0100          /* Try for 100mbps full-duplex. */
+
+#define ADVERTISE_ALL                  ( ADVERTISE_10HALF | ADVERTISE_10FULL | \
+                                                                 ADVERTISE_100HALF | ADVERTISE_100FULL)
+
+/*
+ * Value for the 'PHY_REG_00_BMCR', the PHY's Basic Mode Control Register
+ */
+#define BMCR_FULLDPLX                  0x0100          /* Full duplex. */
+#define BMCR_ANRESTART                 0x0200          /* Auto negotiation restart. */
+#define BMCR_ANENABLE                  0x1000          /* Enable auto negotiation. */
+#define BMCR_SPEED100                  0x2000          /* Select 100Mbps. */
+#define BMCR_RESET                             0x8000          /* Reset the PHY. */
+
+#define PHYCR_MDIX_EN                  0x8000          /* Enable Auto MDIX. */
+#define PHYCR_MDIX_FORCE               0x4000          /* Force MDIX crossed. */
+
+#define ipFRAGMENT_OFFSET_BIT_MASK             ( ( uint16_t ) 0x0fff ) /* The bits in the two byte IP header field that make up the fragment offset value. */
+
+/*
+ * Most users will want a PHY that negotiates about
+ * the connection properties: speed, dmix and duplex.
+ * On some rare cases, you want to select what is being
+ * advertised, properties like MDIX and duplex.
+ */
+
+#if !defined( ipconfigETHERNET_AN_ENABLE )
+       /* Enable auto-negotiation */
+       #define ipconfigETHERNET_AN_ENABLE                              1
+#endif
+
+#if !defined( ipconfigETHERNET_AUTO_CROSS_ENABLE )
+       #define ipconfigETHERNET_AUTO_CROSS_ENABLE              1
+#endif
+
+#if( ipconfigETHERNET_AN_ENABLE == 0 )
+       /*
+        * The following three defines are only used in case there
+        * is no auto-negotiation.
+        */
+       #if !defined( ipconfigETHERNET_CROSSED_LINK )
+               #define ipconfigETHERNET_CROSSED_LINK                   1
+       #endif
+
+       #if !defined( ipconfigETHERNET_USE_100MB )
+               #define ipconfigETHERNET_USE_100MB                              1
+       #endif
+
+       #if !defined( ipconfigETHERNET_USE_FULL_DUPLEX )
+               #define ipconfigETHERNET_USE_FULL_DUPLEX                1
+       #endif
+#endif /* ipconfigETHERNET_AN_ENABLE == 0 */
+
+/* Default the size of the stack used by the EMAC deferred handler task to twice
+the size of the stack used by the idle task - but allow this to be overridden in
+FreeRTOSConfig.h as configMINIMAL_STACK_SIZE is a user definable constant. */
+#ifndef configEMAC_TASK_STACK_SIZE
+       #define configEMAC_TASK_STACK_SIZE ( 2 * configMINIMAL_STACK_SIZE )
+#endif
+
+/*-----------------------------------------------------------*/
+
+/*
+ * A deferred interrupt handler task that processes
+ */
+static void prvEMACHandlerTask( void *pvParameters );
+
+/*
+ * Force a negotiation with the Switch or Router and wait for LS.
+ */
+static void prvEthernetUpdateConfig( BaseType_t xForce );
+
+/*
+ * See if there is a new packet and forward it to the IP-task.
+ */
+static BaseType_t prvNetworkInterfaceInput( void );
+
+#if( ipconfigUSE_LLMNR != 0 )
+       /*
+        * For LLMNR, an extra MAC-address must be configured to
+        * be able to receive the multicast messages.
+        */
+       static void prvMACAddressConfig(ETH_HandleTypeDef *heth, uint32_t ulIndex, uint8_t *Addr);
+#endif
+
+/*
+ * Check if a given packet should be accepted.
+ */
+static BaseType_t xMayAcceptPacket( uint8_t *pcBuffer );
+
+/*
+ * Initialise the TX descriptors.
+ */
+static void prvDMATxDescListInit( void );
+
+/*
+ * Initialise the RX descriptors.
+ */
+static void prvDMARxDescListInit( void );
+
+#if( ipconfigZERO_COPY_TX_DRIVER != 0 )
+       /* After packets have been sent, the network
+       buffers will be released. */
+       static void vClearTXBuffers( void );
+#endif /* ipconfigZERO_COPY_TX_DRIVER */
+
+/*-----------------------------------------------------------*/
+
+typedef struct _PhyProperties_t
+{
+       uint8_t speed;
+       uint8_t mdix;
+       uint8_t duplex;
+       uint8_t spare;
+} PhyProperties_t;
+
+/* Bit map of outstanding ETH interrupt events for processing.  Currently only
+the Rx interrupt is handled, although code is included for other events to
+enable future expansion. */
+static volatile uint32_t ulISREvents;
+
+/* A copy of PHY register 1: 'PHY_REG_01_BMSR' */
+static uint32_t ulPHYLinkStatus = 0;
+
+#if( ipconfigUSE_LLMNR == 1 )
+       static const uint8_t xLLMNR_MACAddress[] = { 0x01, 0x00, 0x5E, 0x00, 0x00, 0xFC };
+#endif
+
+/* Ethernet handle. */
+static ETH_HandleTypeDef xETH;
+
+#if( ipconfigZERO_COPY_TX_DRIVER != 0 )
+       /* xTXDescriptorSemaphore is a counting semaphore with
+       a maximum count of ETH_TXBUFNB, which is the number of
+       DMA TX descriptors. */
+       static SemaphoreHandle_t xTXDescriptorSemaphore = NULL;
+#endif /* ipconfigZERO_COPY_TX_DRIVER */
+
+/*
+ * Note: it is adviced to define both
+ *
+ *     #define  ipconfigZERO_COPY_RX_DRIVER   1
+ *     #define  ipconfigZERO_COPY_TX_DRIVER   1
+ *
+ * The method using memcpy is slower and probaly uses more RAM memory.
+ * The possibility is left in the code just for comparison.
+ *
+ * It is adviced to define ETH_TXBUFNB at least 4. Note that no
+ * TX buffers are allocated in a zero-copy driver.
+ */
+/* MAC buffers: ---------------------------------------------------------*/
+__ALIGN_BEGIN ETH_DMADescTypeDef  DMARxDscrTab[ ETH_RXBUFNB ] __ALIGN_END;/* Ethernet Rx MA Descriptor */
+#if( ipconfigZERO_COPY_RX_DRIVER == 0 )
+       __ALIGN_BEGIN uint8_t Rx_Buff[ ETH_RXBUFNB ][ ETH_RX_BUF_SIZE ] __ALIGN_END; /* Ethernet Receive Buffer */
+#endif
+
+__ALIGN_BEGIN ETH_DMADescTypeDef  DMATxDscrTab[ ETH_TXBUFNB ] __ALIGN_END;/* Ethernet Tx DMA Descriptor */
+#if( ipconfigZERO_COPY_TX_DRIVER == 0 )
+       __ALIGN_BEGIN uint8_t Tx_Buff[ ETH_TXBUFNB ][ ETH_TX_BUF_SIZE ] __ALIGN_END; /* Ethernet Transmit Buffer */
+#endif
+
+#if( ipconfigZERO_COPY_TX_DRIVER != 0 )
+       /* DMATxDescToClear points to the next TX DMA descriptor
+       that must be cleared by vClearTXBuffers(). */
+       static __IO ETH_DMADescTypeDef  *DMATxDescToClear;
+#endif
+
+/* Value to be written into the 'Basic mode Control Register'. */
+static uint32_t ulBCRvalue;
+
+/* Value to be written into the 'Advertisement Control Register'. */
+static uint32_t ulACRValue;
+
+/* ucMACAddress as it appears in main.c */
+extern const uint8_t ucMACAddress[ 6 ];
+
+/* Holds the handle of the task used as a deferred interrupt processor.  The
+handle is used so direct notifications can be sent to the task for all EMAC/DMA
+related interrupts. */
+static TaskHandle_t xEMACTaskHandle = NULL;
+
+/* For local use only: describe the PHY's properties: */
+const PhyProperties_t xPHYProperties =
+{
+       #if( ipconfigETHERNET_AN_ENABLE != 0 )
+               .speed = PHY_SPEED_AUTO,
+               .duplex = PHY_DUPLEX_AUTO,
+       #else
+               #if( ipconfigETHERNET_USE_100MB != 0 )
+                       .speed = PHY_SPEED_100,
+               #else
+                       .speed = PHY_SPEED_10,
+               #endif
+
+               #if( ipconfigETHERNET_USE_FULL_DUPLEX != 0 )
+                       .duplex = PHY_DUPLEX_FULL,
+               #else
+                       .duplex = PHY_DUPLEX_HALF,
+               #endif
+       #endif
+
+       #if( ipconfigETHERNET_AN_ENABLE != 0 ) && ( ipconfigETHERNET_AUTO_CROSS_ENABLE != 0 )
+               .mdix = PHY_MDIX_AUTO,
+       #elif( ipconfigETHERNET_CROSSED_LINK != 0 )
+               .mdix = PHY_MDIX_CROSSED,
+       #else
+               .mdix = PHY_MDIX_DIRECT,
+       #endif
+};
+
+/*-----------------------------------------------------------*/
+
+void HAL_ETH_RxCpltCallback( ETH_HandleTypeDef *heth )
+{
+BaseType_t xHigherPriorityTaskWoken = pdFALSE;
+
+       /* Ethernet RX-Complete callback function, elsewhere declared as weak. */
+    ulISREvents |= EMAC_IF_RX_EVENT;
+       /* Wakeup the prvEMACHandlerTask. */
+       if( xEMACTaskHandle != NULL )
+       {
+               vTaskNotifyGiveFromISR( xEMACTaskHandle, &xHigherPriorityTaskWoken );
+               portYIELD_FROM_ISR( xHigherPriorityTaskWoken );
+       }
+}
+/*-----------------------------------------------------------*/
+
+#if( ipconfigZERO_COPY_TX_DRIVER != 0 )
+       void HAL_ETH_TxCpltCallback( ETH_HandleTypeDef *heth )
+       {
+       BaseType_t xHigherPriorityTaskWoken = pdFALSE;
+
+               /* This call-back is only useful in case packets are being sent
+               zero-copy.  Once they're sent, the buffers will be released
+               by the function vClearTXBuffers(). */
+               ulISREvents |= EMAC_IF_TX_EVENT;
+               /* Wakeup the prvEMACHandlerTask. */
+               if( xEMACTaskHandle != NULL )
+               {
+                       vTaskNotifyGiveFromISR( xEMACTaskHandle, &xHigherPriorityTaskWoken );
+                       portYIELD_FROM_ISR( xHigherPriorityTaskWoken );
+               }
+
+       }
+#endif /* ipconfigZERO_COPY_TX_DRIVER */
+
+/*-----------------------------------------------------------*/
+
+#if( ipconfigZERO_COPY_TX_DRIVER != 0 )
+       static void vClearTXBuffers()
+       {
+       __IO ETH_DMADescTypeDef  *txLastDescriptor = xETH.TxDesc;
+       NetworkBufferDescriptor_t *pxNetworkBuffer;
+       uint8_t *ucPayLoad;
+       size_t uxCount = ( ( UBaseType_t ) ETH_TXBUFNB ) - uxSemaphoreGetCount( xTXDescriptorSemaphore );
+
+               /* This function is called after a TX-completion interrupt.
+               It will release each Network Buffer used in xNetworkInterfaceOutput().
+               'uxCount' represents the number of descriptors given to DMA for transmission.
+               After sending a packet, the DMA will clear the 'ETH_DMATXDESC_OWN' bit. */
+               while( ( uxCount > 0 ) && ( ( DMATxDescToClear->Status & ETH_DMATXDESC_OWN ) == 0 ) )
+               {
+                       if( ( DMATxDescToClear == txLastDescriptor ) && ( uxCount != ETH_TXBUFNB ) )
+                       {
+                               break;
+                       }
+
+                       ucPayLoad = ( uint8_t * )DMATxDescToClear->Buffer1Addr;
+
+                       if( ucPayLoad != NULL )
+                       {
+                               pxNetworkBuffer = pxPacketBuffer_to_NetworkBuffer( ucPayLoad );
+                               if( pxNetworkBuffer != NULL )
+                               {
+                                       vReleaseNetworkBufferAndDescriptor( pxNetworkBuffer ) ;
+                               }
+                               DMATxDescToClear->Buffer1Addr = ( uint32_t )0u;
+                       }
+
+                       DMATxDescToClear = ( ETH_DMADescTypeDef * )( DMATxDescToClear->Buffer2NextDescAddr );
+
+                       uxCount--;
+                       /* Tell the counting semaphore that one more TX descriptor is available. */
+                       xSemaphoreGive( xTXDescriptorSemaphore );
+               }
+       }
+#endif /* ipconfigZERO_COPY_TX_DRIVER */
+/*-----------------------------------------------------------*/
+
+BaseType_t xNetworkInterfaceInitialise( void )
+{
+HAL_StatusTypeDef hal_eth_init_status;
+BaseType_t xResult;
+
+       if( xEMACTaskHandle == NULL )
+       {
+               #if( ipconfigZERO_COPY_TX_DRIVER != 0 )
+               {
+                       if( xTXDescriptorSemaphore == NULL )
+                       {
+                               xTXDescriptorSemaphore = xSemaphoreCreateCounting( ( UBaseType_t ) ETH_TXBUFNB, ( UBaseType_t ) ETH_TXBUFNB );
+                               configASSERT( xTXDescriptorSemaphore );
+                       }
+               }
+               #endif /* ipconfigZERO_COPY_TX_DRIVER */
+
+               /* Initialise ETH */
+
+               xETH.Instance = ETH;
+               xETH.Init.AutoNegotiation = ETH_AUTONEGOTIATION_ENABLE;
+               xETH.Init.Speed = ETH_SPEED_100M;
+               xETH.Init.DuplexMode = ETH_MODE_FULLDUPLEX;
+               xETH.Init.PhyAddress = 1;
+
+               xETH.Init.MACAddr = ( uint8_t *) ucMACAddress;
+               xETH.Init.RxMode = ETH_RXINTERRUPT_MODE;
+
+               /* using the ETH_CHECKSUM_BY_HARDWARE option:
+               both the IP and the protocol checksums will be calculated
+               by the peripheral. */
+               xETH.Init.ChecksumMode = ETH_CHECKSUM_BY_HARDWARE;
+
+               xETH.Init.MediaInterface = ETH_MEDIA_INTERFACE_MII;
+               hal_eth_init_status = HAL_ETH_Init( &xETH );
+
+               /* Only for inspection by debugger. */
+               ( void ) hal_eth_init_status;
+
+               /* Set the TxDesc and RxDesc pointers. */
+               xETH.TxDesc = DMATxDscrTab;
+               xETH.RxDesc = DMARxDscrTab;
+
+               /* Make sure that all unused fields are cleared. */
+               memset( &DMATxDscrTab, '\0', sizeof( DMATxDscrTab ) );
+               memset( &DMARxDscrTab, '\0', sizeof( DMARxDscrTab ) );
+
+               #if( ipconfigZERO_COPY_TX_DRIVER != 0 )
+               {
+                       /* Initialize Tx Descriptors list: Chain Mode */
+                       DMATxDescToClear = DMATxDscrTab;
+               }
+               #endif /* ipconfigZERO_COPY_TX_DRIVER */
+
+               /* Initialise TX-descriptors. */
+               prvDMATxDescListInit();
+
+               /* Initialise RX-descriptors. */
+               prvDMARxDescListInit();
+
+               #if( ipconfigUSE_LLMNR != 0 )
+               {
+                       /* Program the LLMNR address at index 1. */
+                       prvMACAddressConfig( &xETH, ETH_MAC_ADDRESS1, ( uint8_t *) xLLMNR_MACAddress );
+               }
+               #endif
+
+               /* Force a negotiation with the Switch or Router and wait for LS. */
+               prvEthernetUpdateConfig( pdTRUE );
+
+               /* The deferred interrupt handler task is created at the highest
+               possible priority to ensure the interrupt handler can return directly
+               to it.  The task's handle is stored in xEMACTaskHandle so interrupts can
+               notify the task when there is something to process. */
+               xTaskCreate( prvEMACHandlerTask, "EMAC", configEMAC_TASK_STACK_SIZE, NULL, configMAX_PRIORITIES - 1, &xEMACTaskHandle );
+       } /* if( xEMACTaskHandle == NULL ) */
+
+       if( ( ulPHYLinkStatus & BMSR_LINK_STATUS ) != 0 )
+       {
+               xETH.Instance->DMAIER |= ETH_DMA_ALL_INTS;
+               xResult = pdPASS;
+               FreeRTOS_printf( ( "Link Status is high\n" ) ) ;
+       }
+       else
+       {
+               /* For now pdFAIL will be returned. But prvEMACHandlerTask() is running
+               and it will keep on checking the PHY and set ulPHYLinkStatus when necessary. */
+               xResult = pdFAIL;
+               FreeRTOS_printf( ( "Link Status still low\n" ) ) ;
+       }
+       /* When returning non-zero, the stack will become active and
+    start DHCP (in configured) */
+       return xResult;
+}
+/*-----------------------------------------------------------*/
+
+static void prvDMATxDescListInit()
+{
+ETH_DMADescTypeDef *pxDMADescriptor;
+BaseType_t xIndex;
+
+       /* Get the pointer on the first member of the descriptor list */
+       pxDMADescriptor = DMATxDscrTab;
+
+       /* Fill each DMA descriptor with the right values */
+       for( xIndex = 0; xIndex < ETH_TXBUFNB; xIndex++, pxDMADescriptor++ )
+       {
+               /* Set Second Address Chained bit */
+               pxDMADescriptor->Status = ETH_DMATXDESC_TCH;
+
+               #if( ipconfigZERO_COPY_TX_DRIVER == 0 )
+               {
+                       /* Set Buffer1 address pointer */
+                       pxDMADescriptor->Buffer1Addr = ( uint32_t )( Tx_Buff[ xIndex ] );
+               }
+               #endif
+
+               if( xETH.Init.ChecksumMode == ETH_CHECKSUM_BY_HARDWARE )
+               {
+                       /* Set the DMA Tx descriptors checksum insertion for TCP, UDP, and ICMP */
+                       pxDMADescriptor->Status |= ETH_DMATXDESC_CHECKSUMTCPUDPICMPFULL;
+               }
+
+               /* Initialize the next descriptor with the Next Descriptor Polling Enable */
+               if( xIndex < ETH_TXBUFNB - 1 )
+               {
+                       /* Set next descriptor address register with next descriptor base address */
+                       pxDMADescriptor->Buffer2NextDescAddr = ( uint32_t ) ( pxDMADescriptor + 1 );
+               }
+               else
+               {
+                       /* For last descriptor, set next descriptor address register equal to the first descriptor base address */
+                       pxDMADescriptor->Buffer2NextDescAddr = ( uint32_t ) DMATxDscrTab;
+               }
+       }
+
+       /* Set Transmit Descriptor List Address Register */
+       xETH.Instance->DMATDLAR = ( uint32_t ) DMATxDscrTab;
+}
+/*-----------------------------------------------------------*/
+
+static void prvDMARxDescListInit()
+{
+ETH_DMADescTypeDef *pxDMADescriptor;
+BaseType_t xIndex;
+       /*
+        * RX-descriptors.
+        */
+
+       /* Get the pointer on the first member of the descriptor list */
+       pxDMADescriptor = DMARxDscrTab;
+
+       /* Fill each DMA descriptor with the right values */
+       for( xIndex = 0; xIndex < ETH_RXBUFNB; xIndex++, pxDMADescriptor++ )
+       {
+
+               /* Set Buffer1 size and Second Address Chained bit */
+               pxDMADescriptor->ControlBufferSize = ETH_DMARXDESC_RCH | (uint32_t)ETH_RX_BUF_SIZE;  
+
+               #if( ipconfigZERO_COPY_RX_DRIVER != 0 )
+               {
+               /* Set Buffer1 address pointer */
+               NetworkBufferDescriptor_t *pxBuffer;
+
+                       pxBuffer = pxGetNetworkBufferWithDescriptor( ETH_RX_BUF_SIZE, 100ul );
+                       /* If the assert below fails, make sure that there are at least 'ETH_RXBUFNB'
+                       Network Buffers available during start-up ( ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ) */
+                       configASSERT( pxBuffer != NULL );
+                       if( pxBuffer != NULL )
+                       {
+                               pxDMADescriptor->Buffer1Addr = (uint32_t)pxBuffer->pucEthernetBuffer;
+                               pxDMADescriptor->Status = ETH_DMARXDESC_OWN;
+                       }
+               }
+               #else
+               {
+                       /* Set Buffer1 address pointer */
+                       pxDMADescriptor->Buffer1Addr = ( uint32_t )( Rx_Buff[ xIndex ] );
+                       /* Set Own bit of the Rx descriptor Status */
+                       pxDMADescriptor->Status = ETH_DMARXDESC_OWN;
+               }
+               #endif
+
+               /* Initialize the next descriptor with the Next Descriptor Polling Enable */
+               if( xIndex < ETH_RXBUFNB - 1 )
+               {
+                       /* Set next descriptor address register with next descriptor base address */
+                       pxDMADescriptor->Buffer2NextDescAddr = ( uint32_t )( pxDMADescriptor + 1 );
+               }
+               else
+               {
+                       /* For last descriptor, set next descriptor address register equal to the first descriptor base address */
+                       pxDMADescriptor->Buffer2NextDescAddr = ( uint32_t ) DMARxDscrTab;
+               }
+
+       }
+       /* Set Receive Descriptor List Address Register */
+       xETH.Instance->DMARDLAR = ( uint32_t ) DMARxDscrTab;
+}
+/*-----------------------------------------------------------*/
+
+static void prvMACAddressConfig(ETH_HandleTypeDef *heth, uint32_t ulIndex, uint8_t *Addr)
+{
+uint32_t ulTempReg;
+
+       /* Calculate the selected MAC address high register. */
+       ulTempReg = 0x80000000ul | ( ( uint32_t ) Addr[ 5 ] << 8 ) | ( uint32_t ) Addr[ 4 ];
+
+       /* Load the selected MAC address high register. */
+       ( *(__IO uint32_t *)( ( uint32_t ) ( ETH_MAC_ADDR_HBASE + ulIndex ) ) ) = ulTempReg;
+
+       /* Calculate the selected MAC address low register. */
+       ulTempReg = ( ( uint32_t ) Addr[ 3 ] << 24 ) | ( ( uint32_t ) Addr[ 2 ] << 16 ) | ( ( uint32_t ) Addr[ 1 ] << 8 ) | Addr[ 0 ];
+
+       /* Load the selected MAC address low register */
+       ( *(__IO uint32_t *) ( ( uint32_t ) ( ETH_MAC_ADDR_LBASE + ulIndex ) ) ) = ulTempReg;
+}
+/*-----------------------------------------------------------*/
+
+BaseType_t xNetworkInterfaceOutput( NetworkBufferDescriptor_t * const pxDescriptor, BaseType_t bReleaseAfterSend )
+{
+BaseType_t xReturn = pdFAIL;
+uint32_t ulTransmitSize = 0;
+__IO ETH_DMADescTypeDef *pxDmaTxDesc;
+/* Do not wait too long for a free TX DMA buffer. */
+const TickType_t xBlockTimeTicks = pdMS_TO_TICKS( 50u );
+
+       #if( ipconfigDRIVER_INCLUDED_TX_IP_CHECKSUM != 0 )
+       {
+       ProtocolPacket_t *pxPacket;
+
+               /* If the peripheral must calculate the checksum, it wants
+               the protocol checksum to have a value of zero. */
+               pxPacket = ( ProtocolPacket_t * ) ( pxDescriptor->pucEthernetBuffer );
+
+               if( pxPacket->xICMPPacket.xIPHeader.ucProtocol == ipPROTOCOL_ICMP )
+               {
+                       pxPacket->xICMPPacket.xICMPHeader.usChecksum = ( uint16_t )0u;
+               }
+       }
+       #endif
+
+       /* Open a do {} while ( 0 ) loop to be able to call break. */
+       do
+       {
+               if( ( ulPHYLinkStatus & BMSR_LINK_STATUS ) != 0 )
+               {
+                       #if( ipconfigZERO_COPY_TX_DRIVER != 0 )
+                       {
+                               if( xTXDescriptorSemaphore == NULL )
+                               {
+                                       break;
+                               }
+                               if( xSemaphoreTake( xTXDescriptorSemaphore, xBlockTimeTicks ) != pdPASS )
+                               {
+                                       /* Time-out waiting for a free TX descriptor. */
+                                       break;
+                               }
+                       }
+                       #endif /* ipconfigZERO_COPY_TX_DRIVER */
+
+                       /* This function does the actual transmission of the packet. The packet is
+                       contained in 'pxDescriptor' that is passed to the function. */
+                       pxDmaTxDesc = xETH.TxDesc;
+
+                       /* Is this buffer available? */
+                       if( ( pxDmaTxDesc->Status & ETH_DMATXDESC_OWN ) == 0 )
+                       {
+                               /* Is this buffer available? */
+                               /* Get bytes in current buffer. */
+                               ulTransmitSize = pxDescriptor->xDataLength;
+
+                               if( ulTransmitSize > ETH_TX_BUF_SIZE )
+                               {
+                                       ulTransmitSize = ETH_TX_BUF_SIZE;
+                               }
+
+                               #if( ipconfigZERO_COPY_TX_DRIVER == 0 )
+                               {
+                                       /* Copy the bytes. */
+                                       memcpy( ( void * ) pxDmaTxDesc->Buffer1Addr, pxDescriptor->pucEthernetBuffer, ulTransmitSize );
+                                       pxDmaTxDesc->Status |= ETH_DMATXDESC_CIC_TCPUDPICMP_FULL;
+                               }
+                               #else
+                               {
+                                       /* Move the buffer. */
+                                       pxDmaTxDesc->Buffer1Addr = ( uint32_t )pxDescriptor->pucEthernetBuffer;
+                                       /* Ask to set the IPv4 checksum.
+                                       Also need an Interrupt on Completion so that 'vClearTXBuffers()' will be called.. */
+                                       pxDmaTxDesc->Status |= ETH_DMATXDESC_CIC_TCPUDPICMP_FULL | ETH_DMATXDESC_IC;
+                                       /* The Network Buffer has been passed to DMA, no need to release it. */
+                                       bReleaseAfterSend = pdFALSE_UNSIGNED;
+                               }
+                               #endif /* ipconfigZERO_COPY_TX_DRIVER */
+
+                               /* Prepare transmit descriptors to give to DMA. */
+
+                               /* Set LAST and FIRST segment */
+                               pxDmaTxDesc->Status |= ETH_DMATXDESC_FS | ETH_DMATXDESC_LS;
+                               /* Set frame size */
+                               pxDmaTxDesc->ControlBufferSize = ( ulTransmitSize & ETH_DMATXDESC_TBS1 );
+                               /* Set Own bit of the Tx descriptor Status: gives the buffer back to ETHERNET DMA */
+                               pxDmaTxDesc->Status |= ETH_DMATXDESC_OWN;
+
+                               /* Point to next descriptor */
+                               xETH.TxDesc = ( ETH_DMADescTypeDef * ) ( xETH.TxDesc->Buffer2NextDescAddr );
+       
+                               /* Resume DMA transmission*/
+                               xETH.Instance->DMATPDR = 0;
+                               iptraceNETWORK_INTERFACE_TRANSMIT();
+                               xReturn = pdPASS;
+                       }
+               }
+               else
+               {
+                       /* The PHY has no Link Status, packet shall be dropped. */
+               }
+       } while( 0 );
+       /* The buffer has been sent so can be released. */
+       if( bReleaseAfterSend != pdFALSE )
+       {
+               vReleaseNetworkBufferAndDescriptor( pxDescriptor );
+       }
+
+       return xReturn;
+}
+/*-----------------------------------------------------------*/
+
+static BaseType_t xMayAcceptPacket( uint8_t *pcBuffer )
+{
+const ProtocolPacket_t *pxProtPacket = ( const ProtocolPacket_t * )pcBuffer;
+
+       switch( pxProtPacket->xTCPPacket.xEthernetHeader.usFrameType )
+       {
+       case ipARP_FRAME_TYPE:
+               /* Check it later. */
+               return pdTRUE;
+       case ipIPv4_FRAME_TYPE:
+               /* Check it here. */
+               break;
+       default:
+               /* Refuse the packet. */
+               return pdFALSE;
+       }
+
+       #if( ipconfigETHERNET_DRIVER_FILTERS_PACKETS == 1 )
+       {
+               const IPHeader_t *pxIPHeader = &(pxProtPacket->xTCPPacket.xIPHeader);
+               uint32_t ulDestinationIPAddress;
+
+               /* Ensure that the incoming packet is not fragmented (only outgoing packets
+                * can be fragmented) as these are the only handled IP frames currently. */
+               if( ( pxIPHeader->usFragmentOffset & FreeRTOS_ntohs( ipFRAGMENT_OFFSET_BIT_MASK ) ) != 0U )
+               {
+                       return pdFALSE;
+               }
+               /* HT: Might want to make the following configurable because
+                * most IP messages have a standard length of 20 bytes */
+
+               /* 0x45 means: IPv4 with an IP header of 5 x 4 = 20 bytes
+                * 0x47 means: IPv4 with an IP header of 7 x 4 = 28 bytes */
+               if( pxIPHeader->ucVersionHeaderLength < 0x45 || pxIPHeader->ucVersionHeaderLength > 0x4F )
+               {
+                       return pdFALSE;
+               }
+
+               ulDestinationIPAddress = pxIPHeader->ulDestinationIPAddress;
+               /* Is the packet for this node? */
+               if( ( ulDestinationIPAddress != *ipLOCAL_IP_ADDRESS_POINTER ) &&
+                       /* Is it a broadcast address x.x.x.255 ? */
+                       ( ( FreeRTOS_ntohl( ulDestinationIPAddress ) & 0xff ) != 0xff ) &&
+               #if( ipconfigUSE_LLMNR == 1 )
+                       ( ulDestinationIPAddress != ipLLMNR_IP_ADDR ) &&
+               #endif
+                       ( *ipLOCAL_IP_ADDRESS_POINTER != 0 ) ) {
+                       FreeRTOS_printf( ( "Drop IP %lxip\n", FreeRTOS_ntohl( ulDestinationIPAddress ) ) );
+                       return pdFALSE;
+               }
+
+               if( pxIPHeader->ucProtocol == ipPROTOCOL_UDP )
+               {
+                       uint16_t port = pxProtPacket->xUDPPacket.xUDPHeader.usDestinationPort;
+
+                       if( ( xPortHasUDPSocket( port ) == pdFALSE )
+                       #if ipconfigUSE_LLMNR == 1
+                               && ( port != FreeRTOS_ntohs( ipLLMNR_PORT ) )
+                       #endif
+                       #if ipconfigUSE_NBNS == 1
+                               && ( port != FreeRTOS_ntohs( ipNBNS_PORT ) )
+                       #endif
+                       #if ipconfigUSE_DNS == 1
+                               && ( pxProtPacket->xUDPPacket.xUDPHeader.usSourcePort != FreeRTOS_ntohs( ipDNS_PORT ) )
+                       #endif
+                               ) {
+                               /* Drop this packet, not for this device. */
+                               return pdFALSE;
+                       }
+               }
+       }
+       #endif  /* ipconfigETHERNET_DRIVER_FILTERS_PACKETS */
+       return pdTRUE;
+}
+/*-----------------------------------------------------------*/
+
+static BaseType_t prvNetworkInterfaceInput( void )
+{
+NetworkBufferDescriptor_t *pxCurDescriptor;
+NetworkBufferDescriptor_t *pxNewDescriptor = NULL;
+BaseType_t xReceivedLength, xAccepted;
+__IO ETH_DMADescTypeDef *pxDMARxDescriptor;
+xIPStackEvent_t xRxEvent = { eNetworkRxEvent, NULL };
+const TickType_t xDescriptorWaitTime = pdMS_TO_TICKS( 250 );
+uint8_t *pucBuffer;
+
+       pxDMARxDescriptor = xETH.RxDesc;
+
+       if( ( pxDMARxDescriptor->Status & ETH_DMARXDESC_OWN) == 0 )
+       {
+               /* Get the Frame Length of the received packet: substruct 4 bytes of the CRC */
+               xReceivedLength = ( ( pxDMARxDescriptor->Status & ETH_DMARXDESC_FL ) >> ETH_DMARXDESC_FRAMELENGTHSHIFT ) - 4;
+
+               pucBuffer = (uint8_t *) pxDMARxDescriptor->Buffer1Addr;
+
+               /* Update the ETHERNET DMA global Rx descriptor with next Rx descriptor */
+               /* Chained Mode */    
+               /* Selects the next DMA Rx descriptor list for next buffer to read */ 
+               xETH.RxDesc = ( ETH_DMADescTypeDef* )pxDMARxDescriptor->Buffer2NextDescAddr;
+       }
+       else
+       {
+               xReceivedLength = 0;
+       }
+
+       /* Obtain the size of the packet and put it into the "usReceivedLength" variable. */
+       /* 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
+       hold a complete Ethernet packet (1536 bytes). */
+       if( xReceivedLength > 0ul && xReceivedLength < ETH_RX_BUF_SIZE ) 
+       {
+               if( ( pxDMARxDescriptor->Status & ( ETH_DMARXDESC_CE | ETH_DMARXDESC_IPV4HCE | ETH_DMARXDESC_FT ) ) != ETH_DMARXDESC_FT )
+               {
+                       /* Not an Ethernet frame-type or a checmsum error. */
+                       xAccepted = pdFALSE;
+               }
+               else
+               {
+                       /* See if this packet must be handled. */
+                       xAccepted = xMayAcceptPacket( pucBuffer );
+               }
+
+               if( xAccepted != pdFALSE )
+               {
+                       /* The packet wil be accepted, but check first if a new Network Buffer can
+                       be obtained. If not, the packet will still be dropped. */
+                       pxNewDescriptor = pxGetNetworkBufferWithDescriptor( ETH_RX_BUF_SIZE, xDescriptorWaitTime );
+
+                       if( pxNewDescriptor == NULL )
+                       {
+                               /* A new descriptor can not be allocated now. This packet will be dropped. */
+                               xAccepted = pdFALSE;
+                       }
+               }
+               #if( ipconfigZERO_COPY_RX_DRIVER != 0 )
+               {
+                       /* Find out which Network Buffer was originally passed to the descriptor. */
+                       pxCurDescriptor = pxPacketBuffer_to_NetworkBuffer( pucBuffer );
+                       configASSERT( pxCurDescriptor != NULL );
+               }
+               #else
+               {
+                       /* In this mode, the two descriptors are the same. */
+                       pxCurDescriptor = pxNewDescriptor;
+                       if( pxNewDescriptor != NULL )
+                       {
+                               /* The packet is acepted and a new Network Buffer was created,
+                               copy data to the Network Bufffer. */
+                               memcpy( pxNewDescriptor->pucEthernetBuffer, pucBuffer, xReceivedLength );
+                       }
+               }
+               #endif
+
+               if( xAccepted != pdFALSE )
+               {
+                       pxCurDescriptor->xDataLength = xReceivedLength;
+                       xRxEvent.pvData = ( void * ) pxCurDescriptor;
+
+                       /* Pass the data to the TCP/IP task for processing. */
+                       if( xSendEventStructToIPTask( &xRxEvent, xDescriptorWaitTime ) == pdFALSE )
+                       {
+                               /* Could not send the descriptor into the TCP/IP stack, it
+                               must be released. */
+                               vReleaseNetworkBufferAndDescriptor( pxCurDescriptor );
+                               iptraceETHERNET_RX_EVENT_LOST();
+                       }
+                       else
+                       {
+                               iptraceNETWORK_INTERFACE_RECEIVE();
+                       }
+               }
+
+               /* Release descriptors to DMA */
+               #if( ipconfigZERO_COPY_RX_DRIVER != 0 )
+               {
+                       /* Set Buffer1 address pointer */
+                       if( pxNewDescriptor != NULL )
+                       {
+                               pxDMARxDescriptor->Buffer1Addr = (uint32_t)pxNewDescriptor->pucEthernetBuffer;
+                       }
+                       else
+                       {
+                               /* The packet was dropped and the same Network
+                               Buffer will be used to receive a new packet. */
+                       }
+               }
+               #endif /* ipconfigZERO_COPY_RX_DRIVER */
+
+               /* Set Buffer1 size and Second Address Chained bit */
+               pxDMARxDescriptor->ControlBufferSize = ETH_DMARXDESC_RCH | (uint32_t)ETH_RX_BUF_SIZE;  
+               pxDMARxDescriptor->Status = ETH_DMARXDESC_OWN;
+
+               /* When Rx Buffer unavailable flag is set clear it and resume
+               reception. */
+               if( ( xETH.Instance->DMASR & ETH_DMASR_RBUS ) != 0 )
+               {
+                       /* Clear RBUS ETHERNET DMA flag. */
+                       xETH.Instance->DMASR = ETH_DMASR_RBUS;
+
+                       /* Resume DMA reception. */
+                       xETH.Instance->DMARPDR = 0;
+               }
+       }
+
+       return ( xReceivedLength > 0 );
+}
+/*-----------------------------------------------------------*/
+
+void vMACBProbePhy( void )
+{
+uint32_t ulConfig, ulAdvertise, ulLower, ulUpper, ulMACPhyID, ulValue;
+TimeOut_t xPhyTime;
+TickType_t xRemTime = 0;
+#if( EXPECTED_PHY_ID == PHY_ID_DP83848I )
+       uint32_t ulPhyControl;
+#endif
+
+       HAL_ETH_ReadPHYRegister(&xETH, PHY_REG_03_PHYSID2, &ulLower);
+       HAL_ETH_ReadPHYRegister(&xETH, PHY_REG_02_PHYSID1, &ulUpper);
+
+       ulMACPhyID = ( ( ulUpper << 16 ) & 0xFFFF0000 ) | ( ulLower & 0xFFF0 );
+
+       /* The expected ID for the 'LAN8720' is 0x0007c0f0. */
+       /* The expected ID for the 'DP83848I' is 0x20005C90. */
+
+       FreeRTOS_printf( ( "PHY ID %lX (%s)\n", ulMACPhyID,
+               ( ulMACPhyID == EXPECTED_PHY_ID ) ? "OK" : "Unknown" ) );
+
+       /* Remove compiler warning if FreeRTOS_printf() is not defined. */
+       ( void ) ulMACPhyID;
+
+    /* Set advertise register. */
+       if( ( xPHYProperties.speed == PHY_SPEED_AUTO ) && ( xPHYProperties.duplex == PHY_DUPLEX_AUTO ) )
+       {
+               ulAdvertise = ADVERTISE_CSMA | ADVERTISE_ALL;
+               /* Reset auto-negotiation capability. */
+       }
+       else
+       {
+               ulAdvertise = ADVERTISE_CSMA;
+
+               if( xPHYProperties.speed == PHY_SPEED_AUTO )
+               {
+                       if( xPHYProperties.duplex == PHY_DUPLEX_FULL )
+                       {
+                               ulAdvertise |= ADVERTISE_10FULL | ADVERTISE_100FULL;
+                       }
+                       else
+                       {
+                               ulAdvertise |= ADVERTISE_10HALF | ADVERTISE_100HALF;
+                       }
+               }
+               else if( xPHYProperties.duplex == PHY_DUPLEX_AUTO )
+               {
+                       if( xPHYProperties.speed == PHY_SPEED_10 )
+                       {
+                               ulAdvertise |= ADVERTISE_10FULL | ADVERTISE_10HALF;
+                       }
+                       else
+                       {
+                               ulAdvertise |= ADVERTISE_100FULL | ADVERTISE_100HALF;
+                       }
+               }
+               else if( xPHYProperties.speed == PHY_SPEED_100 )
+               {
+                       if( xPHYProperties.duplex == PHY_DUPLEX_FULL )
+                       {
+                               ulAdvertise |= ADVERTISE_100FULL;
+                       }
+                       else
+                       {
+                               ulAdvertise |= ADVERTISE_100HALF;
+                       }
+               }
+               else
+               {
+                       if( xPHYProperties.duplex == PHY_DUPLEX_FULL )
+                       {
+                               ulAdvertise |= ADVERTISE_10FULL;
+                       }
+                       else
+                       {
+                               ulAdvertise |= ADVERTISE_10HALF;
+                       }
+               }
+       }
+
+       /* Read Control register. */
+       HAL_ETH_ReadPHYRegister( &xETH, PHY_REG_00_BMCR, &ulConfig );
+
+       HAL_ETH_WritePHYRegister( &xETH, PHY_REG_00_BMCR, ulConfig | BMCR_RESET );
+       xRemTime = ( TickType_t ) pdMS_TO_TICKS( 1000UL );
+       vTaskSetTimeOutState( &xPhyTime );
+
+       for( ; ; )
+       {
+               HAL_ETH_ReadPHYRegister( &xETH, PHY_REG_00_BMCR, &ulValue );
+               if( ( ulValue & BMCR_RESET ) == 0 )
+               {
+                       FreeRTOS_printf( ( "BMCR_RESET ready\n" ) );
+                       break;
+               }
+               if( xTaskCheckForTimeOut( &xPhyTime, &xRemTime ) != pdFALSE )
+               {
+                       FreeRTOS_printf( ( "BMCR_RESET timed out\n" ) );
+                       break;
+               }
+       }
+       HAL_ETH_WritePHYRegister( &xETH, PHY_REG_00_BMCR, ulConfig & ~BMCR_RESET );
+
+       vTaskDelay( pdMS_TO_TICKS( 50ul ) );
+
+    /* Write advertise register. */
+       HAL_ETH_WritePHYRegister( &xETH, PHY_REG_04_ADVERTISE, ulAdvertise );
+
+       /*
+                       AN_EN        AN1         AN0       Forced Mode
+                         0           0           0        10BASE-T, Half-Duplex
+                         0           0           1        10BASE-T, Full-Duplex
+                         0           1           0        100BASE-TX, Half-Duplex
+                         0           1           1        100BASE-TX, Full-Duplex
+                       AN_EN        AN1         AN0       Advertised Mode
+                         1           0           0        10BASE-T, Half/Full-Duplex
+                         1           0           1        100BASE-TX, Half/Full-Duplex
+                         1           1           0        10BASE-T Half-Duplex
+                                                                                          100BASE-TX, Half-Duplex
+                         1           1           1        10BASE-T, Half/Full-Duplex
+                                                                                          100BASE-TX, Half/Full-Duplex
+       */
+
+    /* Read Control register. */
+       HAL_ETH_ReadPHYRegister( &xETH, PHY_REG_00_BMCR, &ulConfig );
+
+       ulConfig &= ~( BMCR_ANRESTART | BMCR_ANENABLE | BMCR_SPEED100 | BMCR_FULLDPLX );
+
+       /* HT 12/9/14: always set AN-restart and AN-enable, even though the choices
+       are limited. */
+       ulConfig |= (BMCR_ANRESTART | BMCR_ANENABLE);
+
+       if( xPHYProperties.speed == PHY_SPEED_100 )
+       {
+               ulConfig |= BMCR_SPEED100;
+       }
+       else if( xPHYProperties.speed == PHY_SPEED_10 )
+       {
+               ulConfig &= ~BMCR_SPEED100;
+       }
+
+       if( xPHYProperties.duplex == PHY_DUPLEX_FULL )
+       {
+               ulConfig |= BMCR_FULLDPLX;
+       }
+       else if( xPHYProperties.duplex == PHY_DUPLEX_HALF )
+       {
+               ulConfig &= ~BMCR_FULLDPLX;
+       }
+
+       #if( EXPECTED_PHY_ID == PHY_ID_LAN8720 )
+       {
+       }
+       #elif( EXPECTED_PHY_ID == PHY_ID_DP83848I )
+       {
+               /* Read PHY Control register. */
+               HAL_ETH_ReadPHYRegister( &xETH, PHY_REG_19_PHYCR, &ulPhyControl );
+
+               /* Clear bits which might get set: */
+               ulPhyControl &= ~( PHYCR_MDIX_EN|PHYCR_MDIX_FORCE );
+
+               if( xPHYProperties.mdix == PHY_MDIX_AUTO )
+               {
+                       ulPhyControl |= PHYCR_MDIX_EN;
+               }
+               else if( xPHYProperties.mdix == PHY_MDIX_CROSSED )
+               {
+                       /* Force direct link = Use crossed RJ45 cable. */
+                       ulPhyControl &= ~PHYCR_MDIX_FORCE;
+               }
+               else
+               {
+                       /* Force crossed link = Use direct RJ45 cable. */
+                       ulPhyControl |= PHYCR_MDIX_FORCE;
+               }
+               /* update PHY Control Register. */
+               HAL_ETH_WritePHYRegister( &xETH, PHY_REG_19_PHYCR, ulPhyControl );
+       }
+       #endif
+       FreeRTOS_printf( ( "+TCP: advertise: %lX config %lX\n", ulAdvertise, ulConfig ) );
+
+       /* Now the two values to global values for later use. */
+       ulBCRvalue = ulConfig;
+       ulACRValue = ulAdvertise;
+}
+/*-----------------------------------------------------------*/
+
+static void prvEthernetUpdateConfig( BaseType_t xForce )
+{
+__IO uint32_t ulTimeout = 0;
+uint32_t ulRegValue = 0;
+
+       FreeRTOS_printf( ( "prvEthernetUpdateConfig: LS %d Force %d\n",
+               ( ulPHYLinkStatus & BMSR_LINK_STATUS ) != 0 ,
+               xForce ) );
+
+       if( ( xForce != pdFALSE ) || ( ( ulPHYLinkStatus & BMSR_LINK_STATUS ) != 0 ) )
+       {
+               /* Restart the auto-negotiation. */
+               if( xETH.Init.AutoNegotiation != ETH_AUTONEGOTIATION_DISABLE )
+               {
+                       /* Enable Auto-Negotiation. */
+                       HAL_ETH_WritePHYRegister( &xETH, PHY_REG_00_BMCR, ulBCRvalue | BMCR_ANRESTART );
+                       HAL_ETH_WritePHYRegister( &xETH, PHY_REG_04_ADVERTISE, ulACRValue);
+
+                       /* Wait until the auto-negotiation will be completed */
+                       do
+                       {
+                               ulTimeout++;
+                               HAL_ETH_ReadPHYRegister( &xETH, PHY_REG_01_BMSR, &ulRegValue );
+                       } while( ( ( ulRegValue & PHY_AUTONEGO_COMPLETE) == 0 ) && ( ulTimeout < PHY_READ_TO ) );
+
+                       HAL_ETH_WritePHYRegister( &xETH, PHY_REG_00_BMCR, ulBCRvalue & ~BMCR_ANRESTART );
+
+                       if( ulTimeout < PHY_READ_TO )
+                       {
+                               /* Reset Timeout counter. */
+                               ulTimeout = 0;
+
+                               HAL_ETH_ReadPHYRegister( &xETH, PHY_REG_01_BMSR, &ulRegValue);
+                               if( ( ulRegValue & BMSR_LINK_STATUS ) != 0 )
+                               {
+                                       ulPHYLinkStatus |= BMSR_LINK_STATUS;
+                               }
+                               else
+                               {
+                                       ulPHYLinkStatus &= ~( BMSR_LINK_STATUS );
+                               }
+
+                               #if( EXPECTED_PHY_ID == PHY_ID_LAN8720 )
+                               {
+                               /* 31 RW PHY Special Control Status */
+                               uint32_t ulControlStatus;
+
+                                       HAL_ETH_ReadPHYRegister( &xETH, PHY_REG_1F_PHYSPCS, &ulControlStatus);
+                                       ulRegValue = 0;
+                                       if( ( ulControlStatus & PHYSPCS_FULL_DUPLEX ) != 0 )
+                                       {
+                                               ulRegValue |= PHY_DUPLEX_STATUS;
+                                       }
+                                       if( ( ulControlStatus & PHYSPCS_SPEED_MASK ) == PHYSPCS_SPEED_10 )
+                                       {
+                                               ulRegValue |= PHY_SPEED_STATUS;
+                                       }
+
+                               }
+                               #elif( EXPECTED_PHY_ID == PHY_ID_DP83848I )
+                               {
+                                       /* Read the result of the auto-negotiation. */
+                                       HAL_ETH_ReadPHYRegister( &xETH, PHY_REG_10_PHY_SR, &ulRegValue);
+                               }
+                               #endif
+                               FreeRTOS_printf( ( ">> Autonego ready: %08lx: %s duplex %u mbit %s status\n",
+                                       ulRegValue,
+                                       (ulRegValue & PHY_DUPLEX_STATUS) ? "full" : "half",
+                                       (ulRegValue & PHY_SPEED_STATUS) ? 10 : 100,
+                                       ((ulPHYLinkStatus |= BMSR_LINK_STATUS) != 0) ? "high" : "low" ) );
+
+                               /* Configure the MAC with the Duplex Mode fixed by the
+                               auto-negotiation process. */
+                               if( ( ulRegValue & PHY_DUPLEX_STATUS ) != ( uint32_t ) RESET )
+                               {
+                                       /* Set Ethernet duplex mode to Full-duplex following the
+                                       auto-negotiation. */
+                                       xETH.Init.DuplexMode = ETH_MODE_FULLDUPLEX;
+                               }
+                               else
+                               {
+                                       /* Set Ethernet duplex mode to Half-duplex following the
+                                       auto-negotiation. */
+                                       xETH.Init.DuplexMode = ETH_MODE_HALFDUPLEX;
+                               }
+
+                               /* Configure the MAC with the speed fixed by the
+                               auto-negotiation process. */
+                               if( ( ulRegValue & PHY_SPEED_STATUS) != 0 )
+                               {
+                                       /* Set Ethernet speed to 10M following the
+                                       auto-negotiation. */
+                                       xETH.Init.Speed = ETH_SPEED_10M;
+                               }
+                               else
+                               {
+                                       /* Set Ethernet speed to 100M following the
+                                       auto-negotiation. */
+                                       xETH.Init.Speed = ETH_SPEED_100M;
+                               }
+                       }       /* if( ulTimeout < PHY_READ_TO ) */
+               }
+               else /* AutoNegotiation Disable */
+               {
+               uint16_t usValue;
+
+                       /* Check parameters */
+                       assert_param( IS_ETH_SPEED( xETH.Init.Speed ) );
+                       assert_param( IS_ETH_DUPLEX_MODE( xETH.Init.DuplexMode ) );
+
+                       /* Set MAC Speed and Duplex Mode to PHY */
+                       usValue = ( uint16_t ) ( xETH.Init.DuplexMode >> 3 ) | ( uint16_t ) ( xETH.Init.Speed >> 1 );
+                       HAL_ETH_WritePHYRegister( &xETH, PHY_REG_00_BMCR, usValue );
+               }
+
+               /* ETHERNET MAC Re-Configuration */
+               HAL_ETH_ConfigMAC( &xETH, (ETH_MACInitTypeDef *) NULL);
+
+               /* Restart MAC interface */
+               HAL_ETH_Start( &xETH);
+       }
+       else
+       {
+               /* Stop MAC interface */
+               HAL_ETH_Stop( &xETH );
+       }
+}
+/*-----------------------------------------------------------*/
+
+BaseType_t xGetPhyLinkStatus( void )
+{
+BaseType_t xReturn;
+
+       if( ( ulPHYLinkStatus & BMSR_LINK_STATUS ) != 0 )
+       {
+               xReturn = pdPASS;
+       }
+       else
+       {
+               xReturn = pdFAIL;
+       }
+
+       return xReturn;
+}
+/*-----------------------------------------------------------*/
+
+static void prvEMACHandlerTask( void *pvParameters )
+{
+TimeOut_t xPhyTime;
+TickType_t xPhyRemTime;
+UBaseType_t uxLastMinBufferCount = 0;
+#if( ipconfigCHECK_IP_QUEUE_SPACE != 0 )
+UBaseType_t uxLastMinQueueSpace = 0;
+#endif
+UBaseType_t uxCurrentCount;
+BaseType_t xResult = 0;
+uint32_t xStatus;
+const TickType_t ulMaxBlockTime = pdMS_TO_TICKS( 100UL );
+
+       /* Remove compiler warnings about unused parameters. */
+       ( void ) pvParameters;
+
+       vTaskSetTimeOutState( &xPhyTime );
+       xPhyRemTime = pdMS_TO_TICKS( PHY_LS_LOW_CHECK_TIME_MS );
+
+       for( ;; )
+       {
+               uxCurrentCount = uxGetMinimumFreeNetworkBuffers();
+               if( uxLastMinBufferCount != uxCurrentCount )
+               {
+                       /* The logging produced below may be helpful
+                       while tuning +TCP: see how many buffers are in use. */
+                       uxLastMinBufferCount = uxCurrentCount;
+                       FreeRTOS_printf( ( "Network buffers: %lu lowest %lu\n",
+                               uxGetNumberOfFreeNetworkBuffers(), uxCurrentCount ) );
+               }
+
+               #if( ipconfigZERO_COPY_TX_DRIVER != 0 )
+               if( xTXDescriptorSemaphore != NULL )
+               {
+               static UBaseType_t uxLowestSemCount = ( UBaseType_t ) ETH_TXBUFNB - 1;
+
+                       uxCurrentCount = uxSemaphoreGetCount( xTXDescriptorSemaphore );
+                       if( uxLowestSemCount > uxCurrentCount )
+                       {
+                               uxLowestSemCount = uxCurrentCount;
+                               FreeRTOS_printf( ( "TX DMA buffers: lowest %lu\n", uxLowestSemCount ) );
+                       }
+
+               }
+               #endif
+               #if( ipconfigCHECK_IP_QUEUE_SPACE != 0 )
+               {
+                       uxCurrentCount = uxGetMinimumIPQueueSpace();
+                       if( uxLastMinQueueSpace != uxCurrentCount )
+                       {
+                               /* The logging produced below may be helpful
+                               while tuning +TCP: see how many buffers are in use. */
+                               uxLastMinQueueSpace = uxCurrentCount;
+                               FreeRTOS_printf( ( "Queue space: lowest %lu\n", uxCurrentCount ) );
+                       }
+               }
+               #endif /* ipconfigCHECK_IP_QUEUE_SPACE */
+
+               if( ( ulISREvents & EMAC_IF_ALL_EVENT ) == 0 )
+               {
+                       /* No events to process now, wait for the next. */
+                       ulTaskNotifyTake( pdFALSE, ulMaxBlockTime );
+               }
+
+               if( ( ulISREvents & EMAC_IF_RX_EVENT ) != 0 )
+               {
+                       ulISREvents &= ~EMAC_IF_RX_EVENT;
+
+                       xResult = prvNetworkInterfaceInput();
+                       if( xResult > 0 )
+                       {
+                               while( prvNetworkInterfaceInput() > 0 )
+                               {
+                               }
+                       }
+               }
+
+               if( ( ulISREvents & EMAC_IF_TX_EVENT ) != 0 )
+               {
+                       /* Code to release TX buffers if zero-copy is used. */
+                       ulISREvents &= ~EMAC_IF_TX_EVENT;
+                       #if( ipconfigZERO_COPY_TX_DRIVER != 0 )
+                       {
+                               /* Check if DMA packets have been delivered. */
+                               vClearTXBuffers();
+                       }
+                       #endif
+               }
+
+               if( ( ulISREvents & EMAC_IF_ERR_EVENT ) != 0 )
+               {
+                       /* Future extension: logging about errors that occurred. */
+                       ulISREvents &= ~EMAC_IF_ERR_EVENT;
+               }
+
+               if( xResult > 0 )
+               {
+                       /* A packet was received. No need to check for the PHY status now,
+                       but set a timer to check it later on. */
+                       vTaskSetTimeOutState( &xPhyTime );
+                       xPhyRemTime = pdMS_TO_TICKS( PHY_LS_HIGH_CHECK_TIME_MS );
+                       xResult = 0;
+               }
+               else if( xTaskCheckForTimeOut( &xPhyTime, &xPhyRemTime ) != pdFALSE )
+               {
+                       HAL_ETH_ReadPHYRegister( &xETH, PHY_REG_01_BMSR, &xStatus );
+                       if( ( ulPHYLinkStatus & BMSR_LINK_STATUS ) != ( xStatus & BMSR_LINK_STATUS ) )
+                       {
+                               ulPHYLinkStatus = xStatus;
+                               FreeRTOS_printf( ( "prvEMACHandlerTask: PHY LS now %d\n", ( ulPHYLinkStatus & BMSR_LINK_STATUS ) != 0 ) );
+                               prvEthernetUpdateConfig( pdFALSE );
+                       }
+
+                       vTaskSetTimeOutState( &xPhyTime );
+                       if( ( ulPHYLinkStatus & BMSR_LINK_STATUS ) != 0 )
+                       {
+                               xPhyRemTime = pdMS_TO_TICKS( PHY_LS_HIGH_CHECK_TIME_MS );
+                       }
+                       else
+                       {
+                               xPhyRemTime = pdMS_TO_TICKS( PHY_LS_LOW_CHECK_TIME_MS );
+                       }
+               }
+       }
+}
+/*-----------------------------------------------------------*/
+
+void ETH_IRQHandler( void )
+{
+       HAL_ETH_IRQHandler( &xETH );
+}
diff --git a/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/STM32Fxx/readme.txt b/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/STM32Fxx/readme.txt
deleted file mode 100644 (file)
index 51170c0..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-This is a FreeeRTOS+TCP driver that works for both STM32F4xx and STM32F7xx parts.\r
-\r
-The code of stm32fxx_hal_eth.c is based on both drivers as provided by ST.\r
-\r
-These modules should be included:\r
-\r
-    NetworkInterface.c\r
-       stm32fxx_hal_eth.c\r
-\r
-It is assumed that one of these words are defined:\r
-\r
-       STM32F7xx\r
-       STM32F407xx\r
-       STM32F417xx\r
-       STM32F427xx\r
-       STM32F437xx\r
-       STM32F429xx\r
-       STM32F439xx\r
-\r
-The driver has been tested on both Eval and Discovery boards with both STM32F4 and STM32F7.\r
-\r
-Recommened settings for STM32Fxx Network Interface:\r
-\r
-// Defined in FreeRTOSIPConfig.h\r
-\r
-#define ipconfigETHERNET_DRIVER_FILTERS_FRAME_TYPES   1\r
-#define ipconfigDRIVER_INCLUDED_TX_IP_CHECKSUM        1\r
-#define ipconfigDRIVER_INCLUDED_RX_IP_CHECKSUM        1\r
-#define ipconfigZERO_COPY_RX_DRIVER                   1\r
-#define ipconfigZERO_COPY_TX_DRIVER                   1\r
-#define ipconfigUSE_LINKED_RX_MESSAGES                1\r
-\r
-// Defined in stm32f4xx_hal_conf.h\r
-#define ETH_RXBUFNB                                   3 or 4\r
-#define ETH_TXBUFNB                                   2 or 3\r
-#define ETH_RX_BUF_SIZE                               ( ipconfigNETWORK_MTU + 36 )\r
-#define ETH_TX_BUF_SIZE                               ( ipconfigNETWORK_MTU + 36 )\r
-\r
-The best size for 'ETH_RXBUFNB' and 'ETH_TXBUFNB' depends on the speed of the CPU. These macro's define the number of DMA buffers for reception and for transmission.\r
-In general, if the CPU is very fast, you will need less buffers. You can obtain an estimate empirically.\r
-\r
-The optimal value of 'ETH_RX_BUF_SIZE' and 'ETH_TX_BUF_SIZE' depends on the actual value of 'ipconfigNETWORK_MTU'.\r
-When MTU is 1500, MTU+36 becomes a well-aligned buffer of 1536 bytes ( 0x600 ).\r
-When MTU is 1200, MTU+48 will make 1248 ( 0x4E0 ), which is also well aligned.\r
-\r
-Having well aligned buffers is important for CPU with memory cache. Often the caching system divides memory in blocks of 32 bytes. When two buffers share the same cache buffer, you are bound to see data errors.\r
-\r
-Without memory caching, let the size be at least a multiple of 8 ( for DMA ), and make it at least "ipconfigNETWORK_MTU + 14".\r
-\r
-The driver contains these files:\r
-\r
-       stm32fxx_hal_eth.c\r
-       stm32f2xx_hal_eth.h\r
-       stm32f4xx_hal_eth.h\r
-       stm32f7xx_hal_eth.h\r
-       stm32fxx_hal_eth.h\r
-\r
-These files are copied from ST's HAL library. These work both for STM32F4 and STM32F7.\r
-Please remove or rename these files from the HAL distribution that you are using.\r
-\r
diff --git a/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/STM32Fxx/stm32f2xx_hal_eth.h b/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/STM32Fxx/stm32f2xx_hal_eth.h
deleted file mode 100644 (file)
index 93b9caf..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-/*\r
- * The Ethernet header files for STM32F2, STM32F4 and STM32F7 have been merged to\r
- * a single module that works for both parts: "stm32fxx_hal_eth"\r
- */\r
-\r
-#include "stm32fxx_hal_eth.h"\r
diff --git a/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/STM32Fxx/stm32f4xx_hal_eth.c b/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/STM32Fxx/stm32f4xx_hal_eth.c
deleted file mode 100644 (file)
index 4388d12..0000000
+++ /dev/null
@@ -1,1833 +0,0 @@
-/**\r
-  ******************************************************************************\r
-  * @file    stm32f4xx_hal_eth.c\r
-  * @author  MCD Application Team\r
-  * @version V1.3.2\r
-  * @date    26-June-2015\r
-  * @brief   ETH HAL module driver.\r
-  *          This file provides firmware functions to manage the following\r
-  *          functionalities of the Ethernet (ETH) peripheral:\r
-  *           + Initialization and de-initialization functions\r
-  *           + IO operation functions\r
-  *           + Peripheral Control functions\r
-  *           + Peripheral State and Errors functions\r
-  *\r
-  @verbatim\r
-  ==============================================================================\r
-                    ##### How to use this driver #####\r
-  ==============================================================================\r
-    [..]\r
-      (#)Declare a ETH_HandleTypeDef handle structure, for example:\r
-         ETH_HandleTypeDef  heth;\r
-\r
-      (#)Fill parameters of Init structure in heth handle\r
-\r
-      (#)Call HAL_ETH_Init() API to initialize the Ethernet peripheral (MAC, DMA, ...)\r
-\r
-      (#)Initialize the ETH low level resources through the HAL_ETH_MspInit() API:\r
-          (##) Enable the Ethernet interface clock using\r
-               (+++) __HAL_RCC_ETHMAC_CLK_ENABLE();\r
-               (+++) __HAL_RCC_ETHMACTX_CLK_ENABLE();\r
-               (+++) __HAL_RCC_ETHMACRX_CLK_ENABLE();\r
-\r
-          (##) Initialize the related GPIO clocks\r
-          (##) Configure Ethernet pin-out\r
-          (##) Configure Ethernet NVIC interrupt (IT mode)\r
-\r
-      (#)Initialize Ethernet DMA Descriptors in chain mode and point to allocated buffers:\r
-          (##) HAL_ETH_DMATxDescListInit(); for Transmission process\r
-          (##) HAL_ETH_DMARxDescListInit(); for Reception process\r
-\r
-      (#)Enable MAC and DMA transmission and reception:\r
-          (##) HAL_ETH_Start();\r
-\r
-      (#)Prepare ETH DMA TX Descriptors and give the hand to ETH DMA to transfer\r
-         the frame to MAC TX FIFO:\r
-         (##) HAL_ETH_TransmitFrame();\r
-\r
-      (#)Poll for a received frame in ETH RX DMA Descriptors and get received\r
-         frame parameters\r
-         (##) HAL_ETH_GetReceivedFrame(); (should be called into an infinite loop)\r
-\r
-      (#) Get a received frame when an ETH RX interrupt occurs:\r
-         (##) HAL_ETH_GetReceivedFrame_IT(); (called in IT mode only)\r
-\r
-      (#) Communicate with external PHY device:\r
-         (##) Read a specific register from the PHY\r
-              HAL_ETH_ReadPHYRegister();\r
-         (##) Write data to a specific RHY register:\r
-              HAL_ETH_WritePHYRegister();\r
-\r
-      (#) Configure the Ethernet MAC after ETH peripheral initialization\r
-          HAL_ETH_ConfigMAC(); all MAC parameters should be filled.\r
-\r
-      (#) Configure the Ethernet DMA after ETH peripheral initialization\r
-          HAL_ETH_ConfigDMA(); all DMA parameters should be filled.\r
-\r
-      -@- The PTP protocol and the DMA descriptors ring mode are not supported\r
-          in this driver\r
-\r
-  @endverbatim\r
-  ******************************************************************************\r
-  * @attention\r
-  *\r
-  * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>\r
-  *\r
-  * Redistribution and use in source and binary forms, with or without modification,\r
-  * are permitted provided that the following conditions are met:\r
-  *   1. Redistributions of source code must retain the above copyright notice,\r
-  *      this list of conditions and the following disclaimer.\r
-  *   2. Redistributions in binary form must reproduce the above copyright notice,\r
-  *      this list of conditions and the following disclaimer in the documentation\r
-  *      and/or other materials provided with the distribution.\r
-  *   3. Neither the name of STMicroelectronics nor the names of its contributors\r
-  *      may be used to endorse or promote products derived from this software\r
-  *      without specific prior written permission.\r
-  *\r
-  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"\r
-  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
-  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r
-  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r
-  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
-  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r
-  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r
-  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r
-  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
-  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
-  *\r
-  ******************************************************************************\r
-  */\r
-\r
-/* Includes ------------------------------------------------------------------*/\r
-#include "stm32f4xx_hal.h"\r
-\r
-int lUDPLoggingPrintf( const char *pcFormatString, ... );\r
-\r
-/** @addtogroup STM32F4xx_HAL_Driver\r
-  * @{\r
-  */\r
-\r
-/** @defgroup ETH ETH\r
-  * @brief ETH HAL module driver\r
-  * @{\r
-  */\r
-\r
-#if !defined( ARRAY_SIZE )\r
-       #define ARRAY_SIZE( x ) ( sizeof ( x ) / sizeof ( x )[ 0 ] )\r
-#endif\r
-\r
-#ifdef HAL_ETH_MODULE_ENABLED\r
-\r
-#if defined(STM32F407xx) || defined(STM32F417xx) || defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\r
-\r
-/* Private typedef -----------------------------------------------------------*/\r
-/* Private define ------------------------------------------------------------*/\r
-/** @defgroup ETH_Private_Constants ETH Private Constants\r
-  * @{\r
-  */\r
-#define LINKED_STATE_TIMEOUT_VALUE          ((uint32_t)2000)  /* 2000 ms */\r
-#define AUTONEGO_COMPLETED_TIMEOUT_VALUE    ((uint32_t)1000)  /* 1000 ms */\r
-\r
-/**\r
-  * @}\r
-  */\r
-/* Private macro -------------------------------------------------------------*/\r
-/* Private variables ---------------------------------------------------------*/\r
-/* Private function prototypes -----------------------------------------------*/\r
-/** @defgroup ETH_Private_Functions ETH Private Functions\r
-  * @{\r
-  */\r
-static void ETH_MACDMAConfig(ETH_HandleTypeDef *heth, uint32_t err);\r
-static void ETH_MACAddressConfig(ETH_HandleTypeDef *heth, uint32_t MacAddr, uint8_t *Addr);\r
-static void ETH_MACReceptionEnable(ETH_HandleTypeDef *heth);\r
-static void ETH_MACReceptionDisable(ETH_HandleTypeDef *heth);\r
-static void ETH_MACTransmissionEnable(ETH_HandleTypeDef *heth);\r
-static void ETH_MACTransmissionDisable(ETH_HandleTypeDef *heth);\r
-static void ETH_DMATransmissionEnable(ETH_HandleTypeDef *heth);\r
-static void ETH_DMATransmissionDisable(ETH_HandleTypeDef *heth);\r
-static void ETH_DMAReceptionEnable(ETH_HandleTypeDef *heth);\r
-static void ETH_DMAReceptionDisable(ETH_HandleTypeDef *heth);\r
-static void ETH_FlushTransmitFIFO(ETH_HandleTypeDef *heth);\r
-\r
-/**\r
-  * @}\r
-  */\r
-/* Private functions ---------------------------------------------------------*/\r
-\r
-/** @defgroup ETH_Exported_Functions ETH Exported Functions\r
-  * @{\r
-  */\r
-\r
-/** @defgroup ETH_Exported_Functions_Group1 Initialization and de-initialization functions\r
-  *  @brief   Initialization and Configuration functions\r
-  *\r
-  @verbatim\r
-  ===============================================================================\r
-            ##### Initialization and de-initialization functions #####\r
-  ===============================================================================\r
-  [..]  This section provides functions allowing to:\r
-      (+) Initialize and configure the Ethernet peripheral\r
-      (+) De-initialize the Ethernet peripheral\r
-\r
-  @endverbatim\r
-  * @{\r
-  */\r
-extern void vMACBProbePhy ( void );\r
-\r
-/**\r
-  * @brief  Initializes the Ethernet MAC and DMA according to default\r
-  *         parameters.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @retval HAL status\r
-  */\r
-HAL_StatusTypeDef HAL_ETH_Init(ETH_HandleTypeDef *heth)\r
-{\r
-       uint32_t tmpreg = 0;\r
-       uint32_t hclk = 60000000;\r
-       uint32_t err = ETH_SUCCESS;\r
-\r
-       /* Check the ETH peripheral state */\r
-       if( heth == NULL )\r
-       {\r
-               return HAL_ERROR;\r
-       }\r
-\r
-       /* Check parameters */\r
-       assert_param(IS_ETH_AUTONEGOTIATION(heth->Init.AutoNegotiation));\r
-       assert_param(IS_ETH_RX_MODE(heth->Init.RxMode));\r
-       assert_param(IS_ETH_CHECKSUM_MODE(heth->Init.ChecksumMode));\r
-       assert_param(IS_ETH_MEDIA_INTERFACE(heth->Init.MediaInterface));\r
-\r
-       if( heth->State == HAL_ETH_STATE_RESET )\r
-       {\r
-               /* Init the low level hardware : GPIO, CLOCK, NVIC. */\r
-               HAL_ETH_MspInit( heth );\r
-       }\r
-\r
-       /* Enable SYSCFG Clock */\r
-       __HAL_RCC_SYSCFG_CLK_ENABLE();\r
-\r
-       /* Select MII or RMII Mode*/\r
-       SYSCFG->PMC &= ~(SYSCFG_PMC_MII_RMII_SEL);\r
-       SYSCFG->PMC |= (uint32_t)heth->Init.MediaInterface;\r
-\r
-       /* Ethernet Software reset */\r
-       /* Set the SWR bit: resets all MAC subsystem internal registers and logic */\r
-       /* After reset all the registers holds their respective reset values */\r
-       /* Also enable EDFE: Enhanced descriptor format enable. */\r
-       heth->Instance->DMABMR |= ETH_DMABMR_SR | ETH_DMABMR_EDE;\r
-\r
-       /* Wait for software reset */\r
-       while ((heth->Instance->DMABMR & ETH_DMABMR_SR) != (uint32_t)RESET)\r
-       {\r
-       }\r
-\r
-       /*-------------------------------- MAC Initialization ----------------------*/\r
-       /* Get the ETHERNET MACMIIAR value */\r
-       tmpreg = heth->Instance->MACMIIAR;\r
-       /* Clear CSR Clock Range CR[2:0] bits */\r
-       tmpreg &= ETH_MACMIIAR_CR_MASK;\r
-\r
-       /* Get hclk frequency value (168,000,000) */\r
-       hclk = HAL_RCC_GetHCLKFreq();\r
-\r
-       /* Set CR bits depending on hclk value */\r
-       if( ( hclk >= 20000000 ) && ( hclk < 35000000 ) )\r
-       {\r
-               /* CSR Clock Range between 20-35 MHz */\r
-               tmpreg |= (uint32_t) ETH_MACMIIAR_CR_Div16;\r
-       }\r
-       else if( ( hclk >= 35000000 ) && ( hclk < 60000000 ) )\r
-       {\r
-       /* CSR Clock Range between 35-60 MHz */\r
-       tmpreg |= ( uint32_t ) ETH_MACMIIAR_CR_Div26;\r
-       }\r
-       else if((hclk >= 60000000 ) && ( hclk < 100000000 ) )\r
-       {\r
-               /* CSR Clock Range between 60-100 MHz */\r
-               tmpreg |= (uint32_t)ETH_MACMIIAR_CR_Div42;\r
-       }\r
-       else if((hclk >= 100000000 ) && ( hclk < 150000000))\r
-       {\r
-               /* CSR Clock Range between 100-150 MHz */\r
-               tmpreg |= (uint32_t)ETH_MACMIIAR_CR_Div62;\r
-       }\r
-       else /* ((hclk >= 150000000 ) && ( hclk <= 168000000)) */\r
-       {\r
-               /* CSR Clock Range between 150-168 MHz */\r
-               tmpreg |= (uint32_t)ETH_MACMIIAR_CR_Div102;\r
-       }\r
-\r
-       /* Write to ETHERNET MAC MIIAR: Configure the ETHERNET CSR Clock Range */\r
-       heth->Instance->MACMIIAR = (uint32_t)tmpreg;\r
-\r
-       /* Initialise the MACB and set all PHY properties */\r
-       vMACBProbePhy();\r
-\r
-       /* Config MAC and DMA */\r
-       ETH_MACDMAConfig(heth, err);\r
-\r
-       /* Set ETH HAL State to Ready */\r
-       heth->State= HAL_ETH_STATE_READY;\r
-\r
-       /* Return function status */\r
-       return HAL_OK;\r
-}\r
-\r
-/**\r
-  * @brief  De-Initializes the ETH peripheral.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @retval HAL status\r
-  */\r
-HAL_StatusTypeDef HAL_ETH_DeInit(ETH_HandleTypeDef *heth)\r
-{\r
-       /* Set the ETH peripheral state to BUSY */\r
-       heth->State = HAL_ETH_STATE_BUSY;\r
-\r
-       /* De-Init the low level hardware : GPIO, CLOCK, NVIC. */\r
-       HAL_ETH_MspDeInit( heth );\r
-\r
-       /* Set ETH HAL state to Disabled */\r
-       heth->State= HAL_ETH_STATE_RESET;\r
-\r
-       /* Release Lock */\r
-       __HAL_UNLOCK( heth );\r
-\r
-       /* Return function status */\r
-       return HAL_OK;\r
-}\r
-\r
-/**\r
-  * @brief  Initializes the DMA Tx descriptors in chain mode.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @param  DMATxDescTab: Pointer to the first Tx desc list\r
-  * @param  TxBuff: Pointer to the first TxBuffer list\r
-  * @param  TxBuffCount: Number of the used Tx desc in the list\r
-  * @retval HAL status\r
-  */\r
-HAL_StatusTypeDef HAL_ETH_DMATxDescListInit(ETH_HandleTypeDef *heth, ETH_DMADescTypeDef *pxDMATable, uint8_t *ucDataBuffer, uint32_t ulBufferCount)\r
-{\r
-       uint32_t i = 0;\r
-       ETH_DMADescTypeDef *pxDMADescriptor;\r
-\r
-       /* Process Locked */\r
-       __HAL_LOCK( heth );\r
-\r
-       /* Set the ETH peripheral state to BUSY */\r
-       heth->State = HAL_ETH_STATE_BUSY;\r
-\r
-       /* Set the TxDesc pointer with the first one of the pxDMATable list */\r
-       heth->TxDesc = pxDMATable;\r
-\r
-       /* Fill each DMA descriptor with the right values */\r
-       for( i=0; i < ulBufferCount; i++ )\r
-       {\r
-               /* Get the pointer on the ith member of the descriptor list */\r
-               pxDMADescriptor = pxDMATable + i;\r
-\r
-               /* Set Second Address Chained bit */\r
-               pxDMADescriptor->Status = ETH_DMATXDESC_TCH;\r
-\r
-               pxDMADescriptor->ControlBufferSize = 0;\r
-\r
-               /* Set Buffer1 address pointer */\r
-               if( ucDataBuffer != NULL )\r
-               {\r
-                       pxDMADescriptor->Buffer1Addr = ( uint32_t )( &ucDataBuffer[ i * ETH_TX_BUF_SIZE ] );\r
-               }\r
-               else\r
-               {\r
-                       /* Buffer space is not provided because it uses zero-copy transmissions. */\r
-                       pxDMADescriptor->Buffer1Addr = ( uint32_t )0u;\r
-               }\r
-\r
-               if (heth->Init.ChecksumMode == ETH_CHECKSUM_BY_HARDWARE)\r
-               {\r
-                       /* Set the DMA Tx descriptors checksum insertion for TCP, UDP, and ICMP */\r
-                       pxDMADescriptor->Status |= ETH_DMATXDESC_CHECKSUMTCPUDPICMPFULL;\r
-               }\r
-\r
-               /* Initialize the next descriptor with the Next Descriptor Polling Enable */\r
-               if(i < ( ulBufferCount - 1 ) )\r
-               {\r
-                       /* Set next descriptor address register with next descriptor base address */\r
-                       pxDMADescriptor->Buffer2NextDescAddr = ( uint32_t ) ( pxDMATable + i + 1 );\r
-               }\r
-               else\r
-               {\r
-                       /* For last descriptor, set next descriptor address register equal to the first descriptor base address */\r
-                       pxDMADescriptor->Buffer2NextDescAddr = ( uint32_t ) pxDMATable;\r
-               }\r
-       }\r
-\r
-       /* Set Transmit Descriptor List Address Register */\r
-       heth->Instance->DMATDLAR = ( uint32_t ) pxDMATable;\r
-\r
-       /* Set ETH HAL State to Ready */\r
-       heth->State= HAL_ETH_STATE_READY;\r
-\r
-       /* Process Unlocked */\r
-       __HAL_UNLOCK( heth );\r
-\r
-       /* Return function status */\r
-       return HAL_OK;\r
-}\r
-\r
-/**\r
-  * @brief  Initializes the DMA Rx descriptors in chain mode.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @param  DMARxDescTab: Pointer to the first Rx desc list\r
-  * @param  RxBuff: Pointer to the first RxBuffer list\r
-  * @param  RxBuffCount: Number of the used Rx desc in the list\r
-  * @retval HAL status\r
-  */\r
-HAL_StatusTypeDef HAL_ETH_DMARxDescListInit(ETH_HandleTypeDef *heth, ETH_DMADescTypeDef *pxDMATable, uint8_t *ucDataBuffer, uint32_t ulBufferCount)\r
-{\r
-       uint32_t i = 0;\r
-       ETH_DMADescTypeDef *pxDMADescriptor;\r
-\r
-       /* Process Locked */\r
-       __HAL_LOCK( heth );\r
-\r
-       /* Set the ETH peripheral state to BUSY */\r
-       heth->State = HAL_ETH_STATE_BUSY;\r
-\r
-       /* Set the RxDesc pointer with the first one of the pxDMATable list */\r
-       heth->RxDesc = pxDMATable;\r
-\r
-       /* Fill each DMA descriptor with the right values */\r
-       for(i=0; i < ulBufferCount; i++)\r
-       {\r
-               /* Get the pointer on the ith member of the descriptor list */\r
-               pxDMADescriptor = pxDMATable+i;\r
-\r
-               /* Set Own bit of the Rx descriptor Status */\r
-               pxDMADescriptor->Status = ETH_DMARXDESC_OWN;\r
-\r
-               /* Set Buffer1 size and Second Address Chained bit */\r
-               pxDMADescriptor->ControlBufferSize = ETH_DMARXDESC_RCH | ETH_RX_BUF_SIZE;\r
-\r
-               /* Set Buffer1 address pointer */\r
-               if( ucDataBuffer != NULL )\r
-               {\r
-                       pxDMADescriptor->Buffer1Addr = ( uint32_t )( &ucDataBuffer[ i * ETH_RX_BUF_SIZE ] );\r
-               }\r
-               else\r
-               {\r
-                       /* Buffer space is not provided because it uses zero-copy reception. */\r
-                       pxDMADescriptor->Buffer1Addr = ( uint32_t )0u;\r
-               }\r
-\r
-               if( heth->Init.RxMode == ETH_RXINTERRUPT_MODE )\r
-               {\r
-                       /* Enable Ethernet DMA Rx Descriptor interrupt */\r
-                       pxDMADescriptor->ControlBufferSize &= ~ETH_DMARXDESC_DIC;\r
-               }\r
-\r
-               /* Initialize the next descriptor with the Next Descriptor Polling Enable */\r
-               if(i < (ulBufferCount-1))\r
-               {\r
-                       /* Set next descriptor address register with next descriptor base address */\r
-                       pxDMADescriptor->Buffer2NextDescAddr = (uint32_t)(pxDMATable+i+1);\r
-               }\r
-               else\r
-               {\r
-                       /* For last descriptor, set next descriptor address register equal to the first descriptor base address */\r
-                       pxDMADescriptor->Buffer2NextDescAddr = ( uint32_t ) pxDMATable;\r
-               }\r
-       }\r
-\r
-       /* Set Receive Descriptor List Address Register */\r
-       heth->Instance->DMARDLAR = ( uint32_t ) pxDMATable;\r
-\r
-       /* Set ETH HAL State to Ready */\r
-       heth->State= HAL_ETH_STATE_READY;\r
-\r
-       /* Process Unlocked */\r
-       __HAL_UNLOCK( heth );\r
-\r
-       /* Return function status */\r
-       return HAL_OK;\r
-}\r
-\r
-/**\r
-  * @brief  Initializes the ETH MSP.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @retval None\r
-  */\r
-__weak void HAL_ETH_MspInit(ETH_HandleTypeDef *heth)\r
-{\r
-  /* NOTE : This function Should not be modified, when the callback is needed,\r
-  the HAL_ETH_MspInit could be implemented in the user file\r
-  */\r
-}\r
-\r
-/**\r
-  * @brief  DeInitializes ETH MSP.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @retval None\r
-  */\r
-__weak void HAL_ETH_MspDeInit(ETH_HandleTypeDef *heth)\r
-{\r
-  /* NOTE : This function Should not be modified, when the callback is needed,\r
-  the HAL_ETH_MspDeInit could be implemented in the user file\r
-  */\r
-}\r
-\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Exported_Functions_Group2 IO operation functions\r
-  *  @brief   Data transfers functions\r
-  *\r
-  @verbatim\r
-  ==============================================================================\r
-                          ##### IO operation functions #####\r
-  ==============================================================================\r
-  [..]  This section provides functions allowing to:\r
-        (+) Transmit a frame\r
-            HAL_ETH_TransmitFrame();\r
-        (+) Receive a frame\r
-            HAL_ETH_GetReceivedFrame();\r
-            HAL_ETH_GetReceivedFrame_IT();\r
-        (+) Read from an External PHY register\r
-            HAL_ETH_ReadPHYRegister();\r
-        (+) Write to an External PHY register\r
-            HAL_ETH_WritePHYRegister();\r
-\r
-  @endverbatim\r
-\r
-  * @{\r
-  */\r
-\r
-/**\r
-  * @brief  Sends an Ethernet frame.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @param  FrameLength: Amount of data to be sent\r
-  * @retval HAL status\r
-  */\r
-HAL_StatusTypeDef HAL_ETH_TransmitFrame(ETH_HandleTypeDef *heth, uint32_t FrameLength)\r
-{\r
-       uint32_t bufcount = 0, size = 0, i = 0;\r
-       __IO ETH_DMADescTypeDef *pxDmaTxDesc = heth->TxDesc;\r
-       /* Process Locked */\r
-       __HAL_LOCK( heth );\r
-\r
-       /* Set the ETH peripheral state to BUSY */\r
-       heth->State = HAL_ETH_STATE_BUSY;\r
-\r
-       if( FrameLength == 0 )\r
-       {\r
-               /* Set ETH HAL state to READY */\r
-               heth->State = HAL_ETH_STATE_READY;\r
-\r
-               /* Process Unlocked */\r
-               __HAL_UNLOCK( heth );\r
-\r
-               return  HAL_ERROR;\r
-       }\r
-\r
-       /* Check if the descriptor is owned by the ETHERNET DMA (when set) or CPU (when reset) */\r
-       if( ( pxDmaTxDesc->Status & ETH_DMATXDESC_OWN ) != ( uint32_t ) RESET )\r
-       {\r
-               /* OWN bit set */\r
-               heth->State = HAL_ETH_STATE_BUSY_TX;\r
-\r
-               /* Process Unlocked */\r
-               __HAL_UNLOCK( heth );\r
-\r
-               return HAL_ERROR;\r
-       }\r
-\r
-       /* Get the number of needed Tx buffers for the current frame, rounding up. */\r
-       bufcount = ( FrameLength + ETH_TX_BUF_SIZE - 1 ) / ETH_TX_BUF_SIZE;\r
-\r
-       if (bufcount == 1)\r
-       {\r
-               /* Set LAST and FIRST segment */\r
-               pxDmaTxDesc->Status |= ETH_DMATXDESC_FS | ETH_DMATXDESC_LS;\r
-               /* Set frame size */\r
-               pxDmaTxDesc->ControlBufferSize = ( FrameLength & ETH_DMATXDESC_TBS1 );\r
-               /* Set Own bit of the Tx descriptor Status: gives the buffer back to ETHERNET DMA */\r
-               pxDmaTxDesc->Status |= ETH_DMATXDESC_OWN;\r
-               /* Point to next descriptor */\r
-               heth->TxDesc = ( ETH_DMADescTypeDef * ) ( heth->TxDesc->Buffer2NextDescAddr );\r
-       }\r
-       else\r
-       {\r
-               for( i = 0; i < bufcount; i++ )\r
-               {\r
-                       /* Clear FIRST and LAST segment bits */\r
-               uint32_t ulStatus = heth->TxDesc->Status & ~( ETH_DMATXDESC_FS | ETH_DMATXDESC_LS );\r
-\r
-                       if( i == 0 )\r
-                       {\r
-                               /* Setting the first segment bit */\r
-                               heth->TxDesc->Status = ulStatus | ETH_DMATXDESC_FS;\r
-                       }\r
-\r
-                       /* Program size */\r
-                       if (i < (bufcount-1))\r
-                       {\r
-                               heth->TxDesc->ControlBufferSize = (ETH_TX_BUF_SIZE & ETH_DMATXDESC_TBS1);\r
-                       }\r
-                       else\r
-                       {\r
-                               /* Setting the last segment bit */\r
-                               heth->TxDesc->Status = ulStatus | ETH_DMATXDESC_LS;\r
-                               size = FrameLength - (bufcount-1)*ETH_TX_BUF_SIZE;\r
-                               heth->TxDesc->ControlBufferSize = (size & ETH_DMATXDESC_TBS1);\r
-                       }\r
-\r
-                       /* Set Own bit of the Tx descriptor Status: gives the buffer back to ETHERNET DMA */\r
-                       heth->TxDesc->Status |= ETH_DMATXDESC_OWN;\r
-                       /* point to next descriptor */\r
-                       heth->TxDesc = (ETH_DMADescTypeDef *)( heth->TxDesc->Buffer2NextDescAddr );\r
-               }\r
-       }\r
-\r
-       __DSB();\r
-\r
-       /* When Tx Buffer unavailable flag is set: clear it and resume transmission */\r
-       if( ( heth->Instance->DMASR & ETH_DMASR_TBUS ) != ( uint32_t )RESET )\r
-       {\r
-               heth->Instance->DMACHTDR = ( uint32_t )pxDmaTxDesc;\r
-\r
-               /* Clear TBUS ETHERNET DMA flag */\r
-               heth->Instance->DMASR = ETH_DMASR_TBUS;\r
-               /* Resume DMA transmission*/\r
-               heth->Instance->DMATPDR = 0;\r
-       }\r
-\r
-       /* Set ETH HAL State to Ready */\r
-       heth->State = HAL_ETH_STATE_READY;\r
-\r
-       /* Process Unlocked */\r
-       __HAL_UNLOCK( heth );\r
-\r
-       /* Return function status */\r
-       return HAL_OK;\r
-}\r
-\r
-/**\r
-  * @brief  Checks for received frames.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @retval HAL status\r
-  */\r
-HAL_StatusTypeDef HAL_ETH_GetReceivedFrame_IT( ETH_HandleTypeDef *heth )\r
-{\r
-       return HAL_ETH_GetReceivedFrame( heth );\r
-}\r
-\r
-HAL_StatusTypeDef HAL_ETH_GetReceivedFrame( ETH_HandleTypeDef *heth )\r
-{\r
-uint32_t ulCounter = 0;\r
-ETH_DMADescTypeDef *pxDescriptor = heth->RxDesc;\r
-HAL_StatusTypeDef xResult = HAL_ERROR;\r
-\r
-       /* Process Locked */\r
-       __HAL_LOCK( heth );\r
-\r
-       /* Check the ETH state to BUSY */\r
-       heth->State = HAL_ETH_STATE_BUSY;\r
-\r
-       /* Scan descriptors owned by CPU */\r
-       while( ( ( pxDescriptor->Status & ETH_DMARXDESC_OWN ) == 0ul ) && ( ulCounter < ETH_RXBUFNB ) )\r
-       {\r
-       uint32_t ulStatus = pxDescriptor->Status;\r
-\r
-               /* Just for security. */\r
-               ulCounter++;\r
-\r
-               if( ( ulStatus & ( ETH_DMARXDESC_FS | ETH_DMARXDESC_LS ) ) == ( uint32_t )ETH_DMARXDESC_FS )\r
-               {\r
-                       /* First segment in frame, but not the last. */\r
-                       heth->RxFrameInfos.FSRxDesc = pxDescriptor;\r
-                       heth->RxFrameInfos.LSRxDesc = ( ETH_DMADescTypeDef *)NULL;\r
-                       heth->RxFrameInfos.SegCount = 1;\r
-                       /* Point to next descriptor. */\r
-                       pxDescriptor = (ETH_DMADescTypeDef*) (pxDescriptor->Buffer2NextDescAddr);\r
-                       heth->RxDesc = pxDescriptor;\r
-               }\r
-               else if( ( ulStatus & ( ETH_DMARXDESC_LS | ETH_DMARXDESC_FS ) ) == 0ul )\r
-               {\r
-                       /* This is an intermediate segment, not first, not last. */\r
-                       /* Increment segment count. */\r
-                       heth->RxFrameInfos.SegCount++;\r
-                       /* Move to the next descriptor. */\r
-                       pxDescriptor = ( ETH_DMADescTypeDef * ) ( pxDescriptor->Buffer2NextDescAddr );\r
-                       heth->RxDesc = pxDescriptor;\r
-               }\r
-               /* Must be a last segment */\r
-               else\r
-               {\r
-                       /* This is the last segment. */\r
-                       /* Check if last segment is first segment: one segment contains the frame */\r
-                       if( heth->RxFrameInfos.SegCount == 0 )\r
-                       {\r
-                               /* Remember the first segment. */\r
-                               heth->RxFrameInfos.FSRxDesc = pxDescriptor;\r
-                       }\r
-\r
-                       /* Increment segment count */\r
-                       heth->RxFrameInfos.SegCount++;\r
-\r
-                       /* Remember the last segment. */\r
-                       heth->RxFrameInfos.LSRxDesc = pxDescriptor;\r
-\r
-                       /* Get the Frame Length of the received packet: substruct 4 bytes of the CRC */\r
-                       heth->RxFrameInfos.length =\r
-                               ( ( ulStatus & ETH_DMARXDESC_FL ) >> ETH_DMARXDESC_FRAMELENGTHSHIFT ) - 4;\r
-\r
-                       /* Get the address of the buffer start address */\r
-                       heth->RxFrameInfos.buffer = heth->RxFrameInfos.FSRxDesc->Buffer1Addr;\r
-\r
-                       /* Point to next descriptor */\r
-                       heth->RxDesc = ( ETH_DMADescTypeDef * ) pxDescriptor->Buffer2NextDescAddr;\r
-\r
-                       /* Return OK status: a packet was received. */\r
-                       xResult = HAL_OK;\r
-                       break;\r
-               }\r
-       }\r
-\r
-       /* Set ETH HAL State to Ready */\r
-       heth->State = HAL_ETH_STATE_READY;\r
-\r
-       /* Process Unlocked */\r
-       __HAL_UNLOCK( heth );\r
-\r
-       /* Return function status */\r
-       return xResult;\r
-}\r
-\r
-#if( STM32_ETHERNET_STATS != 0 )\r
-\r
-       volatile int rx_count, tx_count, int_count;\r
-       /**\r
-         * @brief  This function handles ETH interrupt request.\r
-         * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-         *         the configuration information for ETHERNET module\r
-         * @retval HAL status\r
-         */\r
-       volatile int int_counts[32];\r
-       volatile int tx_status[8];\r
-       volatile unsigned sr_history[32];\r
-       volatile int sr_head;\r
-       #define STM32_STAT_INC( x )             do { ( x )++; } while( 0 )\r
-\r
-#else\r
-       #define STM32_STAT_INC( x )             do { } while( 0 )\r
-#endif /* STM32_ETHERNET_STATS */\r
-\r
-#define ETH_DMA_ALL_INTS \\r
-       ( ETH_DMA_IT_TST | ETH_DMA_IT_PMT | ETH_DMA_IT_MMC | ETH_DMA_IT_NIS | ETH_DMA_IT_AIS | ETH_DMA_IT_ER | \\r
-       ETH_DMA_IT_FBE | ETH_DMA_IT_ET | ETH_DMA_IT_RWT | ETH_DMA_IT_RPS | ETH_DMA_IT_RBU | ETH_DMA_IT_R | \\r
-       ETH_DMA_IT_TU | ETH_DMA_IT_RO | ETH_DMA_IT_TJT | ETH_DMA_IT_TPS | ETH_DMA_IT_T )\r
-\r
-//#define ETH_DMA_ALL_INTS             ETH_DMA_IT_RBU | ETH_DMA_FLAG_T | ETH_DMA_FLAG_AIS\r
-\r
-#define INT_MASK               ( ( uint32_t ) ~ ( ETH_DMA_IT_TBU ) )\r
-void HAL_ETH_IRQHandler(ETH_HandleTypeDef *heth)\r
-{\r
-       uint32_t dmasr;\r
-\r
-       STM32_STAT_INC( int_count );\r
-\r
-       dmasr = heth->Instance->DMASR & ETH_DMA_ALL_INTS;\r
-       heth->Instance->DMASR = dmasr;\r
-\r
-#if( STM32_ETHERNET_STATS != 0 )\r
-       if( sr_head < ARRAY_SIZE( sr_history ) )\r
-       {\r
-               sr_history[ sr_head++ ] = dmasr;\r
-       }\r
-\r
-       {\r
-               int i;\r
-               for (i = 0; i < 32; i++) {\r
-                       if (dmasr & (1u << i)) {\r
-                               int_counts[i]++;\r
-                       }\r
-               }\r
-               tx_status[ ( dmasr >> 20 ) & 0x07 ]++;\r
-       }\r
-#endif\r
-\r
-       /* Frame received */\r
-       if( ( dmasr & ( ETH_DMA_FLAG_R | ETH_DMA_IT_RBU ) ) != 0 )\r
-       {\r
-               /* Receive complete callback */\r
-               HAL_ETH_RxCpltCallback( heth );\r
-               STM32_STAT_INC( rx_count );\r
-       }\r
-       /* Frame transmitted */\r
-       if( ( dmasr & ( ETH_DMA_FLAG_T ) ) != 0 )\r
-       {\r
-               /* Transfer complete callback */\r
-               HAL_ETH_TxCpltCallback( heth );\r
-               STM32_STAT_INC( tx_count );\r
-       }\r
-\r
-       /* ETH DMA Error */\r
-       if( ( dmasr & ( ETH_DMA_FLAG_AIS ) ) != 0 )\r
-       {\r
-               /* Ethernet Error callback */\r
-               HAL_ETH_ErrorCallback( heth );\r
-       }\r
-}\r
-\r
-/**\r
-  * @brief  Tx Transfer completed callbacks.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @retval None\r
-  */\r
-__weak void HAL_ETH_TxCpltCallback(ETH_HandleTypeDef *heth)\r
-{\r
-  /* NOTE : This function Should not be modified, when the callback is needed,\r
-  the HAL_ETH_TxCpltCallback could be implemented in the user file\r
-  */\r
-}\r
-\r
-/**\r
-  * @brief  Rx Transfer completed callbacks.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @retval None\r
-  */\r
-__weak void HAL_ETH_RxCpltCallback(ETH_HandleTypeDef *heth)\r
-{\r
-  /* NOTE : This function Should not be modified, when the callback is needed,\r
-  the HAL_ETH_TxCpltCallback could be implemented in the user file\r
-  */\r
-}\r
-\r
-/**\r
-  * @brief  Ethernet transfer error callbacks\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @retval None\r
-  */\r
-__weak void HAL_ETH_ErrorCallback(ETH_HandleTypeDef *heth)\r
-{\r
-  /* NOTE : This function Should not be modified, when the callback is needed,\r
-  the HAL_ETH_TxCpltCallback could be implemented in the user file\r
-  */\r
-}\r
-\r
-/**\r
-  * @brief  Reads a PHY register\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @param PHYReg: PHY register address, is the index of one of the 32 PHY register.\r
-  *                This parameter can be one of the following values:\r
-  *                   PHY_BCR: Transceiver Basic Control Register,\r
-  *                   PHY_BSR: Transceiver Basic Status Register.\r
-  *                   More PHY register could be read depending on the used PHY\r
-  * @param RegValue: PHY register value\r
-  * @retval HAL status\r
-  */\r
-HAL_StatusTypeDef HAL_ETH_ReadPHYRegister(ETH_HandleTypeDef *heth, uint16_t PHYReg, uint32_t *RegValue)\r
-{\r
-uint32_t tmpreg = 0;\r
-uint32_t tickstart = 0;\r
-HAL_StatusTypeDef xResult;\r
-\r
-       /* Check parameters */\r
-       assert_param(IS_ETH_PHY_ADDRESS(heth->Init.PhyAddress));\r
-\r
-       /* Check the ETH peripheral state */\r
-       if( heth->State == HAL_ETH_STATE_BUSY_RD )\r
-       {\r
-               xResult = HAL_BUSY;\r
-       }\r
-       else\r
-       {\r
-               __HAL_LOCK( heth );\r
-\r
-               /* Set ETH HAL State to BUSY_RD */\r
-               heth->State = HAL_ETH_STATE_BUSY_RD;\r
-\r
-               /* Get the ETHERNET MACMIIAR value */\r
-               tmpreg = heth->Instance->MACMIIAR;\r
-\r
-               /* Keep only the CSR Clock Range CR[2:0] bits value */\r
-               tmpreg &= ~ETH_MACMIIAR_CR_MASK;\r
-\r
-               /* Prepare the MII address register value */\r
-               tmpreg |= ( ( ( uint32_t )heth->Init.PhyAddress << 11) & ETH_MACMIIAR_PA );    /* Set the PHY device address   */\r
-               tmpreg |= ( ( ( uint32_t )PHYReg << 6 ) & ETH_MACMIIAR_MR );                   /* Set the PHY register address */\r
-               tmpreg &= ~ETH_MACMIIAR_MW;                                           /* Set the read mode            */\r
-               tmpreg |= ETH_MACMIIAR_MB;                                            /* Set the MII Busy bit         */\r
-\r
-               /* Write the result value into the MII Address register */\r
-               heth->Instance->MACMIIAR = tmpreg;\r
-\r
-               /* Get tick */\r
-               tickstart = HAL_GetTick();\r
-\r
-               /* Check for the Busy flag */\r
-               while( 1 )\r
-               {\r
-                       tmpreg = heth->Instance->MACMIIAR;\r
-\r
-                       if( ( tmpreg & ETH_MACMIIAR_MB ) == 0ul )\r
-                       {\r
-                               /* Get MACMIIDR value */\r
-                               *RegValue = ( uint32_t ) heth->Instance->MACMIIDR;\r
-                               xResult = HAL_OK;\r
-                               break;\r
-                       }\r
-                       /* Check for the Timeout */\r
-                       if( ( HAL_GetTick( ) - tickstart ) > PHY_READ_TO )\r
-                       {\r
-                               xResult = HAL_TIMEOUT;\r
-                               break;\r
-                       }\r
-\r
-               }\r
-\r
-               /* Set ETH HAL State to READY */\r
-               heth->State = HAL_ETH_STATE_READY;\r
-\r
-               /* Process Unlocked */\r
-               __HAL_UNLOCK( heth );\r
-       }\r
-\r
-       if( xResult != HAL_OK )\r
-       {\r
-               lUDPLoggingPrintf( "ReadPHY: %d\n", xResult );\r
-       }\r
-       /* Return function status */\r
-       return xResult;\r
-}\r
-\r
-/**\r
-  * @brief  Writes to a PHY register.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @param  PHYReg: PHY register address, is the index of one of the 32 PHY register.\r
-  *          This parameter can be one of the following values:\r
-  *             PHY_BCR: Transceiver Control Register.\r
-  *             More PHY register could be written depending on the used PHY\r
-  * @param  RegValue: the value to write\r
-  * @retval HAL status\r
-  */\r
-HAL_StatusTypeDef HAL_ETH_WritePHYRegister(ETH_HandleTypeDef *heth, uint16_t PHYReg, uint32_t RegValue)\r
-{\r
-uint32_t tmpreg = 0;\r
-uint32_t tickstart = 0;\r
-HAL_StatusTypeDef xResult;\r
-\r
-       /* Check parameters */\r
-       assert_param( IS_ETH_PHY_ADDRESS( heth->Init.PhyAddress ) );\r
-\r
-       /* Check the ETH peripheral state */\r
-       if( heth->State == HAL_ETH_STATE_BUSY_WR )\r
-       {\r
-               xResult = HAL_BUSY;\r
-       }\r
-       else\r
-       {\r
-               __HAL_LOCK( heth );\r
-\r
-               /* Set ETH HAL State to BUSY_WR */\r
-               heth->State = HAL_ETH_STATE_BUSY_WR;\r
-\r
-               /* Get the ETHERNET MACMIIAR value */\r
-               tmpreg = heth->Instance->MACMIIAR;\r
-\r
-               /* Keep only the CSR Clock Range CR[2:0] bits value */\r
-               tmpreg &= ~ETH_MACMIIAR_CR_MASK;\r
-\r
-               /* Prepare the MII register address value */\r
-               tmpreg |= ( ( ( uint32_t ) heth->Init.PhyAddress << 11 ) & ETH_MACMIIAR_PA ); /* Set the PHY device address */\r
-               tmpreg |= ( ( ( uint32_t ) PHYReg << 6 ) & ETH_MACMIIAR_MR );                 /* Set the PHY register address */\r
-               tmpreg |= ETH_MACMIIAR_MW;                                          /* Set the write mode */\r
-               tmpreg |= ETH_MACMIIAR_MB;                                          /* Set the MII Busy bit */\r
-\r
-               /* Give the value to the MII data register */\r
-               heth->Instance->MACMIIDR = ( uint16_t ) RegValue;\r
-\r
-               /* Write the result value into the MII Address register */\r
-               heth->Instance->MACMIIAR = tmpreg;\r
-\r
-               /* Get tick */\r
-               tickstart = HAL_GetTick();\r
-\r
-               /* Check for the Busy flag */\r
-               while( 1 )\r
-               {\r
-                       tmpreg = heth->Instance->MACMIIAR;\r
-\r
-                       if( ( tmpreg & ETH_MACMIIAR_MB ) == 0ul )\r
-                       {\r
-                               xResult = HAL_OK;\r
-                               break;\r
-                       }\r
-                       /* Check for the Timeout */\r
-                       if( ( HAL_GetTick( ) - tickstart ) > PHY_WRITE_TO )\r
-                       {\r
-                               xResult = HAL_TIMEOUT;\r
-                               break;\r
-                       }\r
-               }\r
-\r
-               /* Set ETH HAL State to READY */\r
-               heth->State = HAL_ETH_STATE_READY;\r
-               /* Process Unlocked */\r
-               __HAL_UNLOCK( heth );\r
-       }\r
-\r
-       if( xResult != HAL_OK )\r
-       {\r
-               lUDPLoggingPrintf( "WritePHY: %d\n", xResult );\r
-       }\r
-       /* Return function status */\r
-       return xResult;\r
-}\r
-\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Exported_Functions_Group3 Peripheral Control functions\r
- *  @brief    Peripheral Control functions\r
- *\r
-@verbatim\r
- ===============================================================================\r
-                  ##### Peripheral Control functions #####\r
- ===============================================================================\r
-    [..]  This section provides functions allowing to:\r
-      (+) Enable MAC and DMA transmission and reception.\r
-          HAL_ETH_Start();\r
-      (+) Disable MAC and DMA transmission and reception.\r
-          HAL_ETH_Stop();\r
-      (+) Set the MAC configuration in runtime mode\r
-          HAL_ETH_ConfigMAC();\r
-      (+) Set the DMA configuration in runtime mode\r
-          HAL_ETH_ConfigDMA();\r
-\r
-@endverbatim\r
-  * @{\r
-  */\r
-\r
- /**\r
-  * @brief  Enables Ethernet MAC and DMA reception/transmission\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @retval HAL status\r
-  */\r
-HAL_StatusTypeDef HAL_ETH_Start( ETH_HandleTypeDef *heth )\r
-{\r
-       /* Process Locked */\r
-       __HAL_LOCK( heth );\r
-\r
-       /* Set the ETH peripheral state to BUSY */\r
-       heth->State = HAL_ETH_STATE_BUSY;\r
-\r
-       /* Enable transmit state machine of the MAC for transmission on the MII */\r
-       ETH_MACTransmissionEnable( heth );\r
-\r
-       /* Enable receive state machine of the MAC for reception from the MII */\r
-       ETH_MACReceptionEnable( heth );\r
-\r
-       /* Flush Transmit FIFO */\r
-       ETH_FlushTransmitFIFO( heth );\r
-\r
-       /* Start DMA transmission */\r
-       ETH_DMATransmissionEnable( heth );\r
-\r
-       /* Start DMA reception */\r
-       ETH_DMAReceptionEnable( heth );\r
-\r
-       /* Set the ETH state to READY*/\r
-       heth->State= HAL_ETH_STATE_READY;\r
-\r
-       /* Process Unlocked */\r
-       __HAL_UNLOCK( heth );\r
-\r
-       /* Return function status */\r
-       return HAL_OK;\r
-}\r
-\r
-/**\r
-  * @brief  Stop Ethernet MAC and DMA reception/transmission\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @retval HAL status\r
-  */\r
-HAL_StatusTypeDef HAL_ETH_Stop(ETH_HandleTypeDef *heth)\r
-{\r
-  /* Process Locked */\r
-  __HAL_LOCK( heth );\r
-\r
-  /* Set the ETH peripheral state to BUSY */\r
-  heth->State = HAL_ETH_STATE_BUSY;\r
-\r
-  /* Stop DMA transmission */\r
-  ETH_DMATransmissionDisable( heth );\r
-\r
-  /* Stop DMA reception */\r
-  ETH_DMAReceptionDisable( heth );\r
-\r
-  /* Disable receive state machine of the MAC for reception from the MII */\r
-  ETH_MACReceptionDisable( heth );\r
-\r
-  /* Flush Transmit FIFO */\r
-  ETH_FlushTransmitFIFO( heth );\r
-\r
-  /* Disable transmit state machine of the MAC for transmission on the MII */\r
-  ETH_MACTransmissionDisable( heth );\r
-\r
-  /* Set the ETH state*/\r
-  heth->State = HAL_ETH_STATE_READY;\r
-\r
-  /* Process Unlocked */\r
-  __HAL_UNLOCK( heth );\r
-\r
-  /* Return function status */\r
-  return HAL_OK;\r
-}\r
-\r
-static void prvWriteMACFCR( ETH_HandleTypeDef *heth, uint32_t ulValue)\r
-{\r
-       /* Enable the MAC transmission */\r
-       heth->Instance->MACFCR = ulValue;\r
-\r
-       /* Wait until the write operation will be taken into account:\r
-       at least four TX_CLK/RX_CLK clock cycles.\r
-       Read it back, wait a ms and */\r
-       ( void ) heth->Instance->MACFCR;\r
-\r
-       HAL_Delay( ETH_REG_WRITE_DELAY );\r
-\r
-       heth->Instance->MACFCR = ulValue;\r
-}\r
-\r
-static void prvWriteDMAOMR( ETH_HandleTypeDef *heth, uint32_t ulValue)\r
-{\r
-       /* Enable the MAC transmission */\r
-       heth->Instance->DMAOMR = ulValue;\r
-\r
-       /* Wait until the write operation will be taken into account:\r
-       at least four TX_CLK/RX_CLK clock cycles.\r
-       Read it back, wait a ms and */\r
-       ( void ) heth->Instance->DMAOMR;\r
-\r
-       HAL_Delay( ETH_REG_WRITE_DELAY );\r
-\r
-       heth->Instance->DMAOMR = ulValue;\r
-}\r
-\r
-static void prvWriteMACCR( ETH_HandleTypeDef *heth, uint32_t ulValue)\r
-{\r
-       /* Enable the MAC transmission */\r
-       heth->Instance->MACCR = ulValue;\r
-\r
-       /* Wait until the write operation will be taken into account:\r
-       at least four TX_CLK/RX_CLK clock cycles.\r
-       Read it back, wait a ms and */\r
-       ( void ) heth->Instance->MACCR;\r
-\r
-       HAL_Delay( ETH_REG_WRITE_DELAY );\r
-\r
-       heth->Instance->MACCR = ulValue;\r
-}\r
-\r
-/**\r
-  * @brief  Set ETH MAC Configuration.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @param  macconf: MAC Configuration structure\r
-  * @retval HAL status\r
-  */\r
-HAL_StatusTypeDef HAL_ETH_ConfigMAC(ETH_HandleTypeDef *heth, ETH_MACInitTypeDef *macconf)\r
-{\r
-       uint32_t tmpreg = 0;\r
-\r
-       /* Process Locked */\r
-       __HAL_LOCK( heth );\r
-\r
-       /* Set the ETH peripheral state to BUSY */\r
-       heth->State= HAL_ETH_STATE_BUSY;\r
-\r
-       assert_param(IS_ETH_SPEED(heth->Init.Speed));\r
-       assert_param(IS_ETH_DUPLEX_MODE(heth->Init.DuplexMode));\r
-\r
-       if (macconf != NULL)\r
-       {\r
-               /* Check the parameters */\r
-               assert_param(IS_ETH_WATCHDOG(macconf->Watchdog));\r
-               assert_param(IS_ETH_JABBER(macconf->Jabber));\r
-               assert_param(IS_ETH_INTER_FRAME_GAP(macconf->InterFrameGap));\r
-               assert_param(IS_ETH_CARRIER_SENSE(macconf->CarrierSense));\r
-               assert_param(IS_ETH_RECEIVE_OWN(macconf->ReceiveOwn));\r
-               assert_param(IS_ETH_LOOPBACK_MODE(macconf->LoopbackMode));\r
-               assert_param(IS_ETH_CHECKSUM_OFFLOAD(macconf->ChecksumOffload));\r
-               assert_param(IS_ETH_RETRY_TRANSMISSION(macconf->RetryTransmission));\r
-               assert_param(IS_ETH_AUTOMATIC_PADCRC_STRIP(macconf->AutomaticPadCRCStrip));\r
-               assert_param(IS_ETH_BACKOFF_LIMIT(macconf->BackOffLimit));\r
-               assert_param(IS_ETH_DEFERRAL_CHECK(macconf->DeferralCheck));\r
-               assert_param(IS_ETH_RECEIVE_ALL(macconf->ReceiveAll));\r
-               assert_param(IS_ETH_SOURCE_ADDR_FILTER(macconf->SourceAddrFilter));\r
-               assert_param(IS_ETH_CONTROL_FRAMES(macconf->PassControlFrames));\r
-               assert_param(IS_ETH_BROADCAST_FRAMES_RECEPTION(macconf->BroadcastFramesReception));\r
-               assert_param(IS_ETH_DESTINATION_ADDR_FILTER(macconf->DestinationAddrFilter));\r
-               assert_param(IS_ETH_PROMISCUOUS_MODE(macconf->PromiscuousMode));\r
-               assert_param(IS_ETH_MULTICAST_FRAMES_FILTER(macconf->MulticastFramesFilter));\r
-               assert_param(IS_ETH_UNICAST_FRAMES_FILTER(macconf->UnicastFramesFilter));\r
-               assert_param(IS_ETH_PAUSE_TIME(macconf->PauseTime));\r
-               assert_param(IS_ETH_ZEROQUANTA_PAUSE(macconf->ZeroQuantaPause));\r
-               assert_param(IS_ETH_PAUSE_LOW_THRESHOLD(macconf->PauseLowThreshold));\r
-               assert_param(IS_ETH_UNICAST_PAUSE_FRAME_DETECT(macconf->UnicastPauseFrameDetect));\r
-               assert_param(IS_ETH_RECEIVE_FLOWCONTROL(macconf->ReceiveFlowControl));\r
-               assert_param(IS_ETH_TRANSMIT_FLOWCONTROL(macconf->TransmitFlowControl));\r
-               assert_param(IS_ETH_VLAN_TAG_COMPARISON(macconf->VLANTagComparison));\r
-               assert_param(IS_ETH_VLAN_TAG_IDENTIFIER(macconf->VLANTagIdentifier));\r
-\r
-               /*------------------------ ETHERNET MACCR Configuration --------------------*/\r
-               /* Get the ETHERNET MACCR value */\r
-               tmpreg = heth->Instance->MACCR;\r
-               /* Clear WD, PCE, PS, TE and RE bits */\r
-               tmpreg &= ETH_MACCR_CLEAR_MASK;\r
-\r
-               tmpreg |= (uint32_t)(\r
-                       macconf->Watchdog |\r
-                       macconf->Jabber |\r
-                       macconf->InterFrameGap |\r
-                       macconf->CarrierSense |\r
-                       heth->Init.Speed |\r
-                       macconf->ReceiveOwn |\r
-                       macconf->LoopbackMode |\r
-                       heth->Init.DuplexMode |\r
-                       macconf->ChecksumOffload |\r
-                       macconf->RetryTransmission |\r
-                       macconf->AutomaticPadCRCStrip |\r
-                       macconf->BackOffLimit |\r
-                       macconf->DeferralCheck);\r
-\r
-               /* Write to ETHERNET MACCR */\r
-               prvWriteMACCR( heth, tmpreg );\r
-\r
-               /*----------------------- ETHERNET MACFFR Configuration --------------------*/\r
-               /* Write to ETHERNET MACFFR */\r
-               heth->Instance->MACFFR = (uint32_t)(\r
-                       macconf->ReceiveAll |\r
-                       macconf->SourceAddrFilter |\r
-                       macconf->PassControlFrames |\r
-                       macconf->BroadcastFramesReception |\r
-                       macconf->DestinationAddrFilter |\r
-                       macconf->PromiscuousMode |\r
-                       macconf->MulticastFramesFilter |\r
-                       macconf->UnicastFramesFilter);\r
-\r
-               /* Wait until the write operation will be taken into account :\r
-               at least four TX_CLK/RX_CLK clock cycles */\r
-               tmpreg = heth->Instance->MACFFR;\r
-               HAL_Delay(ETH_REG_WRITE_DELAY);\r
-               heth->Instance->MACFFR = tmpreg;\r
-\r
-               /*--------------- ETHERNET MACHTHR and MACHTLR Configuration ---------------*/\r
-               /* Write to ETHERNET MACHTHR */\r
-               heth->Instance->MACHTHR = (uint32_t)macconf->HashTableHigh;\r
-\r
-               /* Write to ETHERNET MACHTLR */\r
-               heth->Instance->MACHTLR = (uint32_t)macconf->HashTableLow;\r
-               /*----------------------- ETHERNET MACFCR Configuration --------------------*/\r
-\r
-               /* Get the ETHERNET MACFCR value */\r
-               tmpreg = heth->Instance->MACFCR;\r
-               /* Clear xx bits */\r
-               tmpreg &= ETH_MACFCR_CLEAR_MASK;\r
-\r
-               tmpreg |= (uint32_t)((\r
-                       macconf->PauseTime << 16) |\r
-                       macconf->ZeroQuantaPause |\r
-                       macconf->PauseLowThreshold |\r
-                       macconf->UnicastPauseFrameDetect |\r
-                       macconf->ReceiveFlowControl |\r
-                       macconf->TransmitFlowControl);\r
-\r
-               /* Write to ETHERNET MACFCR */\r
-               prvWriteMACFCR( heth, tmpreg );\r
-\r
-               /*----------------------- ETHERNET MACVLANTR Configuration -----------------*/\r
-               heth->Instance->MACVLANTR = (uint32_t)(macconf->VLANTagComparison |\r
-               macconf->VLANTagIdentifier);\r
-\r
-               /* Wait until the write operation will be taken into account :\r
-               at least four TX_CLK/RX_CLK clock cycles */\r
-               tmpreg = heth->Instance->MACVLANTR;\r
-               HAL_Delay(ETH_REG_WRITE_DELAY);\r
-               heth->Instance->MACVLANTR = tmpreg;\r
-       }\r
-       else /* macconf == NULL : here we just configure Speed and Duplex mode */\r
-       {\r
-               /*------------------------ ETHERNET MACCR Configuration --------------------*/\r
-               /* Get the ETHERNET MACCR value */\r
-               tmpreg = heth->Instance->MACCR;\r
-\r
-               /* Clear FES and DM bits */\r
-               tmpreg &= ~((uint32_t)0x00004800);\r
-\r
-               tmpreg |= (uint32_t)(heth->Init.Speed | heth->Init.DuplexMode);\r
-\r
-               /* Write to ETHERNET MACCR */\r
-               prvWriteMACCR( heth, tmpreg );\r
-       }\r
-\r
-       /* Set the ETH state to Ready */\r
-       heth->State= HAL_ETH_STATE_READY;\r
-\r
-       /* Process Unlocked */\r
-       __HAL_UNLOCK( heth );\r
-\r
-       /* Return function status */\r
-       return HAL_OK;\r
-}\r
-\r
-/**\r
-  * @brief  Sets ETH DMA Configuration.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @param  dmaconf: DMA Configuration structure\r
-  * @retval HAL status\r
-  */\r
-HAL_StatusTypeDef HAL_ETH_ConfigDMA(ETH_HandleTypeDef *heth, ETH_DMAInitTypeDef *dmaconf)\r
-{\r
-       uint32_t tmpreg = 0;\r
-\r
-       /* Process Locked */\r
-       __HAL_LOCK( heth );\r
-\r
-       /* Set the ETH peripheral state to BUSY */\r
-       heth->State= HAL_ETH_STATE_BUSY;\r
-\r
-       /* Check parameters */\r
-       assert_param(IS_ETH_DROP_TCPIP_CHECKSUM_FRAME(dmaconf->DropTCPIPChecksumErrorFrame));\r
-       assert_param(IS_ETH_RECEIVE_STORE_FORWARD(dmaconf->ReceiveStoreForward));\r
-       assert_param(IS_ETH_FLUSH_RECEIVE_FRAME(dmaconf->FlushReceivedFrame));\r
-       assert_param(IS_ETH_TRANSMIT_STORE_FORWARD(dmaconf->TransmitStoreForward));\r
-       assert_param(IS_ETH_TRANSMIT_THRESHOLD_CONTROL(dmaconf->TransmitThresholdControl));\r
-       assert_param(IS_ETH_FORWARD_ERROR_FRAMES(dmaconf->ForwardErrorFrames));\r
-       assert_param(IS_ETH_FORWARD_UNDERSIZED_GOOD_FRAMES(dmaconf->ForwardUndersizedGoodFrames));\r
-       assert_param(IS_ETH_RECEIVE_THRESHOLD_CONTROL(dmaconf->ReceiveThresholdControl));\r
-       assert_param(IS_ETH_SECOND_FRAME_OPERATE(dmaconf->SecondFrameOperate));\r
-       assert_param(IS_ETH_ADDRESS_ALIGNED_BEATS(dmaconf->AddressAlignedBeats));\r
-       assert_param(IS_ETH_FIXED_BURST(dmaconf->FixedBurst));\r
-       assert_param(IS_ETH_RXDMA_BURST_LENGTH(dmaconf->RxDMABurstLength));\r
-       assert_param(IS_ETH_TXDMA_BURST_LENGTH(dmaconf->TxDMABurstLength));\r
-       assert_param(IS_ETH_ENHANCED_DESCRIPTOR_FORMAT(dmaconf->EnhancedDescriptorFormat));\r
-       assert_param(IS_ETH_DMA_DESC_SKIP_LENGTH(dmaconf->DescriptorSkipLength));\r
-       assert_param(IS_ETH_DMA_ARBITRATION_ROUNDROBIN_RXTX(dmaconf->DMAArbitration));\r
-\r
-       /*----------------------- ETHERNET DMAOMR Configuration --------------------*/\r
-       /* Get the ETHERNET DMAOMR value */\r
-       tmpreg = heth->Instance->DMAOMR;\r
-       /* Clear xx bits */\r
-       tmpreg &= ETH_DMAOMR_CLEAR_MASK;\r
-\r
-       tmpreg |= (uint32_t)(\r
-               dmaconf->DropTCPIPChecksumErrorFrame |\r
-               dmaconf->ReceiveStoreForward |\r
-               dmaconf->FlushReceivedFrame |\r
-               dmaconf->TransmitStoreForward |\r
-               dmaconf->TransmitThresholdControl |\r
-               dmaconf->ForwardErrorFrames |\r
-               dmaconf->ForwardUndersizedGoodFrames |\r
-               dmaconf->ReceiveThresholdControl |\r
-               dmaconf->SecondFrameOperate);\r
-\r
-       /* Write to ETHERNET DMAOMR */\r
-       prvWriteDMAOMR( heth, tmpreg );\r
-\r
-       /*----------------------- ETHERNET DMABMR Configuration --------------------*/\r
-       heth->Instance->DMABMR = (uint32_t)(dmaconf->AddressAlignedBeats |\r
-       dmaconf->FixedBurst |\r
-       dmaconf->RxDMABurstLength | /* !! if 4xPBL is selected for Tx or Rx it is applied for the other */\r
-       dmaconf->TxDMABurstLength |\r
-       dmaconf->EnhancedDescriptorFormat |\r
-       (dmaconf->DescriptorSkipLength << 2) |\r
-       dmaconf->DMAArbitration |\r
-       ETH_DMABMR_USP); /* Enable use of separate PBL for Rx and Tx */\r
-\r
-       /* Wait until the write operation will be taken into account:\r
-       at least four TX_CLK/RX_CLK clock cycles */\r
-       tmpreg = heth->Instance->DMABMR;\r
-       HAL_Delay(ETH_REG_WRITE_DELAY);\r
-       heth->Instance->DMABMR = tmpreg;\r
-\r
-       /* Set the ETH state to Ready */\r
-       heth->State= HAL_ETH_STATE_READY;\r
-\r
-       /* Process Unlocked */\r
-       __HAL_UNLOCK( heth );\r
-\r
-       /* Return function status */\r
-       return HAL_OK;\r
-}\r
-\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Exported_Functions_Group4 Peripheral State functions\r
-  *  @brief   Peripheral State functions\r
-  *\r
-  @verbatim\r
-  ===============================================================================\r
-                         ##### Peripheral State functions #####\r
-  ===============================================================================\r
-  [..]\r
-  This subsection permits to get in run-time the status of the peripheral\r
-  and the data flow.\r
-       (+) Get the ETH handle state:\r
-           HAL_ETH_GetState();\r
-\r
-\r
-  @endverbatim\r
-  * @{\r
-  */\r
-\r
-/**\r
-  * @brief  Return the ETH HAL state\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @retval HAL state\r
-  */\r
-HAL_ETH_StateTypeDef HAL_ETH_GetState(ETH_HandleTypeDef *heth)\r
-{\r
-  /* Return ETH state */\r
-  return heth->State;\r
-}\r
-\r
-/**\r
-  * @}\r
-  */\r
-\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @addtogroup ETH_Private_Functions\r
-  * @{\r
-  */\r
-\r
-/**\r
-  * @brief  Configures Ethernet MAC and DMA with default parameters.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @param  err: Ethernet Init error\r
-  * @retval HAL status\r
-  */\r
-static void ETH_MACDMAConfig(ETH_HandleTypeDef *heth, uint32_t err)\r
-{\r
-  ETH_MACInitTypeDef macinit;\r
-  ETH_DMAInitTypeDef dmainit;\r
-  uint32_t tmpreg = 0;\r
-\r
-  if (err != ETH_SUCCESS) /* Auto-negotiation failed */\r
-  {\r
-    /* Set Ethernet duplex mode to Full-duplex */\r
-    heth->Init.DuplexMode = ETH_MODE_FULLDUPLEX;\r
-\r
-    /* Set Ethernet speed to 100M */\r
-    heth->Init.Speed = ETH_SPEED_100M;\r
-  }\r
-\r
-  /* Ethernet MAC default initialization **************************************/\r
-  macinit.Watchdog = ETH_WATCHDOG_ENABLE;\r
-  macinit.Jabber = ETH_JABBER_ENABLE;\r
-  macinit.InterFrameGap = ETH_INTERFRAMEGAP_96BIT;\r
-  macinit.CarrierSense = ETH_CARRIERSENCE_ENABLE;\r
-  macinit.ReceiveOwn = ETH_RECEIVEOWN_ENABLE;\r
-  macinit.LoopbackMode = ETH_LOOPBACKMODE_DISABLE;\r
-  if(heth->Init.ChecksumMode == ETH_CHECKSUM_BY_HARDWARE)\r
-  {\r
-    macinit.ChecksumOffload = ETH_CHECKSUMOFFLAOD_ENABLE;\r
-  }\r
-  else\r
-  {\r
-    macinit.ChecksumOffload = ETH_CHECKSUMOFFLAOD_DISABLE;\r
-  }\r
-  macinit.RetryTransmission = ETH_RETRYTRANSMISSION_DISABLE;\r
-  macinit.AutomaticPadCRCStrip = ETH_AUTOMATICPADCRCSTRIP_DISABLE;\r
-  macinit.BackOffLimit = ETH_BACKOFFLIMIT_10;\r
-  macinit.DeferralCheck = ETH_DEFFERRALCHECK_DISABLE;\r
-  macinit.ReceiveAll = ETH_RECEIVEAll_DISABLE;\r
-  macinit.SourceAddrFilter = ETH_SOURCEADDRFILTER_DISABLE;\r
-  macinit.PassControlFrames = ETH_PASSCONTROLFRAMES_BLOCKALL;\r
-  macinit.BroadcastFramesReception = ETH_BROADCASTFRAMESRECEPTION_ENABLE;\r
-  macinit.DestinationAddrFilter = ETH_DESTINATIONADDRFILTER_NORMAL;\r
-  macinit.PromiscuousMode = ETH_PROMISCUOUS_MODE_DISABLE;\r
-  macinit.MulticastFramesFilter = ETH_MULTICASTFRAMESFILTER_PERFECT;\r
-  macinit.UnicastFramesFilter = ETH_UNICASTFRAMESFILTER_PERFECT;\r
-  macinit.HashTableHigh = 0x0;\r
-  macinit.HashTableLow = 0x0;\r
-  macinit.PauseTime = 0x0;\r
-  macinit.ZeroQuantaPause = ETH_ZEROQUANTAPAUSE_DISABLE;\r
-  macinit.PauseLowThreshold = ETH_PAUSELOWTHRESHOLD_MINUS4;\r
-  macinit.UnicastPauseFrameDetect = ETH_UNICASTPAUSEFRAMEDETECT_DISABLE;\r
-  macinit.ReceiveFlowControl = ETH_RECEIVEFLOWCONTROL_DISABLE;\r
-  macinit.TransmitFlowControl = ETH_TRANSMITFLOWCONTROL_DISABLE;\r
-  macinit.VLANTagComparison = ETH_VLANTAGCOMPARISON_16BIT;\r
-  macinit.VLANTagIdentifier = 0x0;\r
-\r
-  /*------------------------ ETHERNET MACCR Configuration --------------------*/\r
-  /* Get the ETHERNET MACCR value */\r
-  tmpreg = heth->Instance->MACCR;\r
-  /* Clear WD, PCE, PS, TE and RE bits */\r
-  tmpreg &= ETH_MACCR_CLEAR_MASK;\r
-  /* Set the WD bit according to ETH Watchdog value */\r
-  /* Set the JD: bit according to ETH Jabber value */\r
-  /* Set the IFG bit according to ETH InterFrameGap value */\r
-  /* Set the DCRS bit according to ETH CarrierSense value */\r
-  /* Set the FES bit according to ETH Speed value */\r
-  /* Set the DO bit according to ETH ReceiveOwn value */\r
-  /* Set the LM bit according to ETH LoopbackMode value */\r
-  /* Set the DM bit according to ETH Mode value */\r
-  /* Set the IPCO bit according to ETH ChecksumOffload value */\r
-  /* Set the DR bit according to ETH RetryTransmission value */\r
-  /* Set the ACS bit according to ETH AutomaticPadCRCStrip value */\r
-  /* Set the BL bit according to ETH BackOffLimit value */\r
-  /* Set the DC bit according to ETH DeferralCheck value */\r
-  tmpreg |= (uint32_t)(macinit.Watchdog |\r
-                       macinit.Jabber |\r
-                       macinit.InterFrameGap |\r
-                       macinit.CarrierSense |\r
-                       heth->Init.Speed |\r
-                       macinit.ReceiveOwn |\r
-                       macinit.LoopbackMode |\r
-                       heth->Init.DuplexMode |\r
-                       macinit.ChecksumOffload |\r
-                       macinit.RetryTransmission |\r
-                       macinit.AutomaticPadCRCStrip |\r
-                       macinit.BackOffLimit |\r
-                       macinit.DeferralCheck);\r
-\r
-  /* Write to ETHERNET MACCR */\r
-  prvWriteMACCR( heth, tmpreg );\r
-\r
-  /*----------------------- ETHERNET MACFFR Configuration --------------------*/\r
-  /* Set the RA bit according to ETH ReceiveAll value */\r
-  /* Set the SAF and SAIF bits according to ETH SourceAddrFilter value */\r
-  /* Set the PCF bit according to ETH PassControlFrames value */\r
-  /* Set the DBF bit according to ETH BroadcastFramesReception value */\r
-  /* Set the DAIF bit according to ETH DestinationAddrFilter value */\r
-  /* Set the PR bit according to ETH PromiscuousMode value */\r
-  /* Set the PM, HMC and HPF bits according to ETH MulticastFramesFilter value */\r
-  /* Set the HUC and HPF bits according to ETH UnicastFramesFilter value */\r
-  /* Write to ETHERNET MACFFR */\r
-  heth->Instance->MACFFR = (uint32_t)(macinit.ReceiveAll |\r
-                                        macinit.SourceAddrFilter |\r
-                                        macinit.PassControlFrames |\r
-                                        macinit.BroadcastFramesReception |\r
-                                        macinit.DestinationAddrFilter |\r
-                                        macinit.PromiscuousMode |\r
-                                        macinit.MulticastFramesFilter |\r
-                                        macinit.UnicastFramesFilter);\r
-\r
-   /* Wait until the write operation will be taken into account:\r
-      at least four TX_CLK/RX_CLK clock cycles */\r
-   tmpreg = heth->Instance->MACFFR;\r
-   HAL_Delay(ETH_REG_WRITE_DELAY);\r
-   heth->Instance->MACFFR = tmpreg;\r
-\r
-   /*--------------- ETHERNET MACHTHR and MACHTLR Configuration --------------*/\r
-   /* Write to ETHERNET MACHTHR */\r
-   heth->Instance->MACHTHR = (uint32_t)macinit.HashTableHigh;\r
-\r
-   /* Write to ETHERNET MACHTLR */\r
-   heth->Instance->MACHTLR = (uint32_t)macinit.HashTableLow;\r
-   /*----------------------- ETHERNET MACFCR Configuration -------------------*/\r
-\r
-   /* Get the ETHERNET MACFCR value */\r
-   tmpreg = heth->Instance->MACFCR;\r
-   /* Clear xx bits */\r
-   tmpreg &= ETH_MACFCR_CLEAR_MASK;\r
-\r
-   /* Set the PT bit according to ETH PauseTime value */\r
-   /* Set the DZPQ bit according to ETH ZeroQuantaPause value */\r
-   /* Set the PLT bit according to ETH PauseLowThreshold value */\r
-   /* Set the UP bit according to ETH UnicastPauseFrameDetect value */\r
-   /* Set the RFE bit according to ETH ReceiveFlowControl value */\r
-   /* Set the TFE bit according to ETH TransmitFlowControl value */\r
-   tmpreg |= (uint32_t)((macinit.PauseTime << 16) |\r
-                        macinit.ZeroQuantaPause |\r
-                        macinit.PauseLowThreshold |\r
-                        macinit.UnicastPauseFrameDetect |\r
-                        macinit.ReceiveFlowControl |\r
-                        macinit.TransmitFlowControl);\r
-\r
-   /* Write to ETHERNET MACFCR */\r
-   prvWriteMACFCR( heth, tmpreg );\r
-\r
-   /*----------------------- ETHERNET MACVLANTR Configuration ----------------*/\r
-   /* Set the ETV bit according to ETH VLANTagComparison value */\r
-   /* Set the VL bit according to ETH VLANTagIdentifier value */\r
-   heth->Instance->MACVLANTR = (uint32_t)(macinit.VLANTagComparison |\r
-                                            macinit.VLANTagIdentifier);\r
-\r
-    /* Wait until the write operation will be taken into account:\r
-       at least four TX_CLK/RX_CLK clock cycles */\r
-    tmpreg = heth->Instance->MACVLANTR;\r
-    HAL_Delay(ETH_REG_WRITE_DELAY);\r
-    heth->Instance->MACVLANTR = tmpreg;\r
-\r
-    /* Ethernet DMA default initialization ************************************/\r
-    dmainit.DropTCPIPChecksumErrorFrame = ETH_DROPTCPIPCHECKSUMERRORFRAME_ENABLE;\r
-    dmainit.ReceiveStoreForward = ETH_RECEIVESTOREFORWARD_ENABLE;\r
-    dmainit.FlushReceivedFrame = ETH_FLUSHRECEIVEDFRAME_ENABLE;\r
-    dmainit.TransmitStoreForward = ETH_TRANSMITSTOREFORWARD_ENABLE;\r
-    dmainit.TransmitThresholdControl = ETH_TRANSMITTHRESHOLDCONTROL_64BYTES;\r
-    dmainit.ForwardErrorFrames = ETH_FORWARDERRORFRAMES_DISABLE;\r
-    dmainit.ForwardUndersizedGoodFrames = ETH_FORWARDUNDERSIZEDGOODFRAMES_DISABLE;\r
-    dmainit.ReceiveThresholdControl = ETH_RECEIVEDTHRESHOLDCONTROL_64BYTES;\r
-    dmainit.SecondFrameOperate = ETH_SECONDFRAMEOPERARTE_ENABLE;\r
-    dmainit.AddressAlignedBeats = ETH_ADDRESSALIGNEDBEATS_ENABLE;\r
-    dmainit.FixedBurst = ETH_FIXEDBURST_ENABLE;\r
-    dmainit.RxDMABurstLength = ETH_RXDMABURSTLENGTH_32BEAT;\r
-    dmainit.TxDMABurstLength = ETH_TXDMABURSTLENGTH_32BEAT;\r
-    dmainit.EnhancedDescriptorFormat = ETH_DMAENHANCEDDESCRIPTOR_ENABLE;\r
-    dmainit.DescriptorSkipLength = 0x0;\r
-    dmainit.DMAArbitration = ETH_DMAARBITRATION_ROUNDROBIN_RXTX_1_1;\r
-\r
-    /* Get the ETHERNET DMAOMR value */\r
-    tmpreg = heth->Instance->DMAOMR;\r
-    /* Clear xx bits */\r
-    tmpreg &= ETH_DMAOMR_CLEAR_MASK;\r
-\r
-    /* Set the DT bit according to ETH DropTCPIPChecksumErrorFrame value */\r
-    /* Set the RSF bit according to ETH ReceiveStoreForward value */\r
-    /* Set the DFF bit according to ETH FlushReceivedFrame value */\r
-    /* Set the TSF bit according to ETH TransmitStoreForward value */\r
-    /* Set the TTC bit according to ETH TransmitThresholdControl value */\r
-    /* Set the FEF bit according to ETH ForwardErrorFrames value */\r
-    /* Set the FUF bit according to ETH ForwardUndersizedGoodFrames value */\r
-    /* Set the RTC bit according to ETH ReceiveThresholdControl value */\r
-    /* Set the OSF bit according to ETH SecondFrameOperate value */\r
-    tmpreg |= (uint32_t)(dmainit.DropTCPIPChecksumErrorFrame |\r
-                         dmainit.ReceiveStoreForward |\r
-                         dmainit.FlushReceivedFrame |\r
-                         dmainit.TransmitStoreForward |\r
-                         dmainit.TransmitThresholdControl |\r
-                         dmainit.ForwardErrorFrames |\r
-                         dmainit.ForwardUndersizedGoodFrames |\r
-                         dmainit.ReceiveThresholdControl |\r
-                         dmainit.SecondFrameOperate);\r
-\r
-    /* Write to ETHERNET DMAOMR */\r
-    prvWriteDMAOMR( heth, tmpreg );\r
-\r
-    /*----------------------- ETHERNET DMABMR Configuration ------------------*/\r
-    /* Set the AAL bit according to ETH AddressAlignedBeats value */\r
-    /* Set the FB bit according to ETH FixedBurst value */\r
-    /* Set the RPBL and 4*PBL bits according to ETH RxDMABurstLength value */\r
-    /* Set the PBL and 4*PBL bits according to ETH TxDMABurstLength value */\r
-    /* Set the Enhanced DMA descriptors bit according to ETH EnhancedDescriptorFormat value*/\r
-    /* Set the DSL bit according to ETH DesciptorSkipLength value */\r
-    /* Set the PR and DA bits according to ETH DMAArbitration value */\r
-    heth->Instance->DMABMR = (uint32_t)(dmainit.AddressAlignedBeats |\r
-                                          dmainit.FixedBurst |\r
-                                          dmainit.RxDMABurstLength |    /* !! if 4xPBL is selected for Tx or Rx it is applied for the other */\r
-                                          dmainit.TxDMABurstLength |\r
-                                          dmainit.EnhancedDescriptorFormat |\r
-                                          (dmainit.DescriptorSkipLength << 2) |\r
-                                          dmainit.DMAArbitration |\r
-                                          ETH_DMABMR_USP); /* Enable use of separate PBL for Rx and Tx */\r
-\r
-     /* Wait until the write operation will be taken into account:\r
-        at least four TX_CLK/RX_CLK clock cycles */\r
-     tmpreg = heth->Instance->DMABMR;\r
-     HAL_Delay(ETH_REG_WRITE_DELAY);\r
-     heth->Instance->DMABMR = tmpreg;\r
-\r
-     if(heth->Init.RxMode == ETH_RXINTERRUPT_MODE)\r
-     {\r
-       /* Enable the Ethernet Rx Interrupt */\r
-       __HAL_ETH_DMA_ENABLE_IT(( heth ), ETH_DMA_IT_NIS | ETH_DMA_IT_R);\r
-     }\r
-\r
-     /* Initialize MAC address in ethernet MAC */\r
-     ETH_MACAddressConfig(heth, ETH_MAC_ADDRESS0, heth->Init.MACAddr);\r
-}\r
-\r
-/**\r
-  * @brief  Configures the selected MAC address.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @param  MacAddr: The MAC address to configure\r
-  *          This parameter can be one of the following values:\r
-  *             @arg ETH_MAC_Address0: MAC Address0\r
-  *             @arg ETH_MAC_Address1: MAC Address1\r
-  *             @arg ETH_MAC_Address2: MAC Address2\r
-  *             @arg ETH_MAC_Address3: MAC Address3\r
-  * @param  Addr: Pointer to MAC address buffer data (6 bytes)\r
-  * @retval HAL status\r
-  */\r
-static void ETH_MACAddressConfig(ETH_HandleTypeDef *heth, uint32_t MacAddr, uint8_t *Addr)\r
-{\r
-       uint32_t tmpreg;\r
-\r
-       /* Check the parameters */\r
-       assert_param( IS_ETH_MAC_ADDRESS0123( MacAddr ) );\r
-\r
-       /* Calculate the selected MAC address high register */\r
-       tmpreg = 0x80000000ul | ( ( uint32_t )Addr[ 5 ] << 8) | (uint32_t)Addr[ 4 ];\r
-       /* Load the selected MAC address high register */\r
-       ( * ( __IO uint32_t * ) ( ( uint32_t ) ( ETH_MAC_ADDR_HBASE + MacAddr ) ) ) = tmpreg;\r
-       /* Calculate the selected MAC address low register */\r
-       tmpreg = ( ( uint32_t )Addr[ 3 ] << 24 ) | ( ( uint32_t )Addr[ 2 ] << 16 ) | ( ( uint32_t )Addr[ 1 ] << 8 ) | Addr[ 0 ];\r
-\r
-       /* Load the selected MAC address low register */\r
-       ( * ( __IO uint32_t * ) ( ( uint32_t ) ( ETH_MAC_ADDR_LBASE + MacAddr ) ) ) = tmpreg;\r
-}\r
-\r
-/**\r
-  * @brief  Enables the MAC transmission.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @retval None\r
-  */\r
-static void ETH_MACTransmissionEnable(ETH_HandleTypeDef *heth)\r
-{\r
-       uint32_t tmpreg = heth->Instance->MACCR | ETH_MACCR_TE;\r
-\r
-       prvWriteMACCR( heth, tmpreg );\r
-}\r
-\r
-/**\r
-  * @brief  Disables the MAC transmission.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @retval None\r
-  */\r
-static void ETH_MACTransmissionDisable(ETH_HandleTypeDef *heth)\r
-{\r
-       uint32_t tmpreg = heth->Instance->MACCR & ~( ETH_MACCR_TE );\r
-\r
-       prvWriteMACCR( heth, tmpreg );\r
-}\r
-\r
-/**\r
-  * @brief  Enables the MAC reception.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @retval None\r
-  */\r
-static void ETH_MACReceptionEnable(ETH_HandleTypeDef *heth)\r
-{\r
-       __IO uint32_t tmpreg = heth->Instance->MACCR | ETH_MACCR_RE;\r
-\r
-       prvWriteMACCR( heth, tmpreg );\r
-}\r
-\r
-/**\r
-  * @brief  Disables the MAC reception.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @retval None\r
-  */\r
-static void ETH_MACReceptionDisable(ETH_HandleTypeDef *heth)\r
-{\r
-       __IO uint32_t tmpreg = heth->Instance->MACCR & ~( ETH_MACCR_RE );\r
-\r
-       prvWriteMACCR( heth, tmpreg );\r
-}\r
-\r
-/**\r
-  * @brief  Enables the DMA transmission.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @retval None\r
-  */\r
-static void ETH_DMATransmissionEnable(ETH_HandleTypeDef *heth)\r
-{\r
-       /* Enable the DMA transmission */\r
-       __IO uint32_t tmpreg = heth->Instance->DMAOMR | ETH_DMAOMR_ST;\r
-\r
-       prvWriteDMAOMR( heth, tmpreg );\r
-}\r
-\r
-/**\r
-  * @brief  Disables the DMA transmission.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @retval None\r
-  */\r
-static void ETH_DMATransmissionDisable(ETH_HandleTypeDef *heth)\r
-{\r
-       /* Disable the DMA transmission */\r
-       __IO uint32_t tmpreg = heth->Instance->DMAOMR & ~( ETH_DMAOMR_ST );\r
-\r
-       prvWriteDMAOMR( heth, tmpreg );\r
-}\r
-\r
-/**\r
-  * @brief  Enables the DMA reception.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @retval None\r
-  */\r
-static void ETH_DMAReceptionEnable(ETH_HandleTypeDef *heth)\r
-{\r
-       /* Enable the DMA reception */\r
-       __IO uint32_t tmpreg = heth->Instance->DMAOMR | ETH_DMAOMR_SR;\r
-\r
-       prvWriteDMAOMR( heth, tmpreg );\r
-}\r
-\r
-/**\r
-  * @brief  Disables the DMA reception.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @retval None\r
-  */\r
-static void ETH_DMAReceptionDisable(ETH_HandleTypeDef *heth)\r
-{\r
-       /* Disable the DMA reception */\r
-       __IO uint32_t tmpreg = heth->Instance->DMAOMR & ~( ETH_DMAOMR_SR );\r
-\r
-       prvWriteDMAOMR( heth, tmpreg );\r
-}\r
-\r
-/**\r
-  * @brief  Clears the ETHERNET transmit FIFO.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @retval None\r
-  */\r
-static void ETH_FlushTransmitFIFO(ETH_HandleTypeDef *heth)\r
-{\r
-       /* Set the Flush Transmit FIFO bit */\r
-       __IO uint32_t tmpreg = heth->Instance->DMAOMR | ETH_DMAOMR_FTF;\r
-\r
-       prvWriteDMAOMR( heth, tmpreg );\r
-}\r
-\r
-/**\r
-  * @}\r
-  */\r
-\r
-#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */\r
-#endif /* HAL_ETH_MODULE_ENABLED */\r
-/**\r
-  * @}\r
-  */\r
-\r
-/**\r
-  * @}\r
-  */\r
-\r
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r
diff --git a/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/STM32Fxx/stm32f4xx_hal_eth.h b/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/STM32Fxx/stm32f4xx_hal_eth.h
deleted file mode 100644 (file)
index 93b9caf..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-/*\r
- * The Ethernet header files for STM32F2, STM32F4 and STM32F7 have been merged to\r
- * a single module that works for both parts: "stm32fxx_hal_eth"\r
- */\r
-\r
-#include "stm32fxx_hal_eth.h"\r
diff --git a/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/STM32Fxx/stm32f7xx_hal_eth.h b/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/STM32Fxx/stm32f7xx_hal_eth.h
deleted file mode 100644 (file)
index 93b9caf..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-/*\r
- * The Ethernet header files for STM32F2, STM32F4 and STM32F7 have been merged to\r
- * a single module that works for both parts: "stm32fxx_hal_eth"\r
- */\r
-\r
-#include "stm32fxx_hal_eth.h"\r
diff --git a/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/STM32Fxx/stm32fxx_hal_eth.c b/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/STM32Fxx/stm32fxx_hal_eth.c
deleted file mode 100644 (file)
index dad16aa..0000000
+++ /dev/null
@@ -1,1468 +0,0 @@
-/**\r
-  ******************************************************************************\r
-  * @file    stm32fxx_hal_eth.c\r
-  * @author  MCD Application Team\r
-  * @version V1.3.2\r
-  * @date    26-June-2015\r
-  * @brief   ETH HAL module driver.\r
-  *          This file provides firmware functions to manage the following\r
-  *          functionalities of the Ethernet (ETH) peripheral:\r
-  *           + Initialization and de-initialization functions\r
-  *           + IO operation functions\r
-  *           + Peripheral Control functions\r
-  *           + Peripheral State and Errors functions\r
-  *\r
-  @verbatim\r
-  ==============================================================================\r
-                    ##### How to use this driver #####\r
-  ==============================================================================\r
-    [..]\r
-      (#)Declare a ETH_HandleTypeDef handle structure, for example:\r
-         ETH_HandleTypeDef  heth;\r
-\r
-      (#)Fill parameters of Init structure in heth handle\r
-\r
-      (#)Call HAL_ETH_Init() API to initialize the Ethernet peripheral (MAC, DMA, ...)\r
-\r
-      (#)Initialize the ETH low level resources through the HAL_ETH_MspInit() API:\r
-          (##) Enable the Ethernet interface clock using\r
-               (+++) __HAL_RCC_ETHMAC_CLK_ENABLE();\r
-               (+++) __HAL_RCC_ETHMACTX_CLK_ENABLE();\r
-               (+++) __HAL_RCC_ETHMACRX_CLK_ENABLE();\r
-\r
-          (##) Initialize the related GPIO clocks\r
-          (##) Configure Ethernet pin-out\r
-          (##) Configure Ethernet NVIC interrupt (IT mode)\r
-\r
-      (#)Initialize Ethernet DMA Descriptors in chain mode and point to allocated buffers:\r
-          (##) HAL_ETH_DMATxDescListInit(); for Transmission process\r
-          (##) HAL_ETH_DMARxDescListInit(); for Reception process\r
-\r
-      (#)Enable MAC and DMA transmission and reception:\r
-          (##) HAL_ETH_Start();\r
-\r
-      (#)Prepare ETH DMA TX Descriptors and give the hand to ETH DMA to transfer\r
-         the frame to MAC TX FIFO:\r
-         (##) HAL_ETH_TransmitFrame();\r
-\r
-      (#)Poll for a received frame in ETH RX DMA Descriptors and get received\r
-         frame parameters\r
-         (##) HAL_ETH_GetReceivedFrame(); (should be called into an infinite loop)\r
-\r
-      (#) Get a received frame when an ETH RX interrupt occurs:\r
-         (##) HAL_ETH_GetReceivedFrame_IT(); (called in IT mode only)\r
-\r
-      (#) Communicate with external PHY device:\r
-         (##) Read a specific register from the PHY\r
-              HAL_ETH_ReadPHYRegister();\r
-         (##) Write data to a specific RHY register:\r
-              HAL_ETH_WritePHYRegister();\r
-\r
-      (#) Configure the Ethernet MAC after ETH peripheral initialization\r
-          HAL_ETH_ConfigMAC(); all MAC parameters should be filled.\r
-\r
-      (#) Configure the Ethernet DMA after ETH peripheral initialization\r
-          HAL_ETH_ConfigDMA(); all DMA parameters should be filled.\r
-\r
-      -@- The PTP protocol and the DMA descriptors ring mode are not supported\r
-          in this driver\r
-\r
-  @endverbatim\r
-  ******************************************************************************\r
-  * @attention\r
-  *\r
-  * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>\r
-  *\r
-  * Redistribution and use in source and binary forms, with or without modification,\r
-  * are permitted provided that the following conditions are met:\r
-  *   1. Redistributions of source code must retain the above copyright notice,\r
-  *      this list of conditions and the following disclaimer.\r
-  *   2. Redistributions in binary form must reproduce the above copyright notice,\r
-  *      this list of conditions and the following disclaimer in the documentation\r
-  *      and/or other materials provided with the distribution.\r
-  *   3. Neither the name of STMicroelectronics nor the names of its contributors\r
-  *      may be used to endorse or promote products derived from this software\r
-  *      without specific prior written permission.\r
-  *\r
-  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"\r
-  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
-  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r
-  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r
-  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
-  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r
-  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r
-  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r
-  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
-  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
-  *\r
-  ******************************************************************************\r
-  */\r
-\r
-/* Includes ------------------------------------------------------------------*/\r
-\r
-#if defined(STM32F7xx)\r
-       #include "stm32f7xx_hal.h"\r
-       #define stm_is_F7       1\r
-#elif defined(STM32F407xx) || defined(STM32F417xx) || defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\r
-       #include "stm32f4xx_hal.h"\r
-       #define stm_is_F4       1\r
-#elif defined(STM32F2xx)\r
-       #include "stm32f2xx_hal.h"\r
-       #define stm_is_F2       1\r
-#else\r
-       #error For what part should this be compiled?\r
-#endif\r
-\r
-#include "stm32fxx_hal_eth.h"\r
-\r
-/** @addtogroup STM32F4xx_HAL_Driver\r
-  * @{\r
-  */\r
-\r
-/** @defgroup ETH ETH\r
-  * @brief ETH HAL module driver\r
-  * @{\r
-  */\r
-\r
-#if !defined( ARRAY_SIZE )\r
-       #define ARRAY_SIZE( x ) ( sizeof ( x ) / sizeof ( x )[ 0 ] )\r
-#endif\r
-\r
-#ifdef HAL_ETH_MODULE_ENABLED\r
-\r
-#if( stm_is_F2 != 0 || stm_is_F4 != 0 || stm_is_F7 )\r
-\r
-/* Private typedef -----------------------------------------------------------*/\r
-/* Private define ------------------------------------------------------------*/\r
-/** @defgroup ETH_Private_Constants ETH Private Constants\r
-  * @{\r
-  */\r
-\r
-/**\r
-  * @}\r
-  */\r
-/* Private macro -------------------------------------------------------------*/\r
-/* Private variables ---------------------------------------------------------*/\r
-/* Private function prototypes -----------------------------------------------*/\r
-/** @defgroup ETH_Private_Functions ETH Private Functions\r
-  * @{\r
-  */\r
-static void ETH_MACDMAConfig(ETH_HandleTypeDef *heth, uint32_t err);\r
-static void ETH_MACAddressConfig(ETH_HandleTypeDef *heth, uint32_t MacAddr, uint8_t *Addr);\r
-static void ETH_MACReceptionEnable(ETH_HandleTypeDef *heth);\r
-static void ETH_MACReceptionDisable(ETH_HandleTypeDef *heth);\r
-static void ETH_MACTransmissionEnable(ETH_HandleTypeDef *heth);\r
-static void ETH_MACTransmissionDisable(ETH_HandleTypeDef *heth);\r
-static void ETH_DMATransmissionEnable(ETH_HandleTypeDef *heth);\r
-static void ETH_DMATransmissionDisable(ETH_HandleTypeDef *heth);\r
-static void ETH_DMAReceptionEnable(ETH_HandleTypeDef *heth);\r
-static void ETH_DMAReceptionDisable(ETH_HandleTypeDef *heth);\r
-static void ETH_FlushTransmitFIFO(ETH_HandleTypeDef *heth);\r
-\r
-/**\r
-  * @}\r
-  */\r
-/* Private functions ---------------------------------------------------------*/\r
-\r
-/** @defgroup ETH_Exported_Functions ETH Exported Functions\r
-  * @{\r
-  */\r
-\r
-/** @defgroup ETH_Exported_Functions_Group1 Initialization and de-initialization functions\r
-  *  @brief   Initialization and Configuration functions\r
-  *\r
-  @verbatim\r
-  ===============================================================================\r
-            ##### Initialization and de-initialization functions #####\r
-  ===============================================================================\r
-  [..]  This section provides functions allowing to:\r
-      (+) Initialize and configure the Ethernet peripheral\r
-      (+) De-initialize the Ethernet peripheral\r
-\r
-  @endverbatim\r
-  * @{\r
-  */\r
-extern void vMACBProbePhy ( void );\r
-\r
-/**\r
-  * @brief  Initializes the Ethernet MAC and DMA according to default\r
-  *         parameters.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @retval HAL status\r
-  */\r
-HAL_StatusTypeDef HAL_ETH_Init(ETH_HandleTypeDef *heth)\r
-{\r
-       uint32_t tmpreg = 0uL;\r
-       uint32_t hclk = 60000000uL;\r
-       uint32_t err = ETH_SUCCESS;\r
-\r
-       /* Check the ETH peripheral state */\r
-       if( heth == NULL )\r
-       {\r
-               return HAL_ERROR;\r
-       }\r
-\r
-       /* Check parameters */\r
-       assert_param(IS_ETH_AUTONEGOTIATION(heth->Init.AutoNegotiation));\r
-       assert_param(IS_ETH_RX_MODE(heth->Init.RxMode));\r
-       assert_param(IS_ETH_CHECKSUM_MODE(heth->Init.ChecksumMode));\r
-       assert_param(IS_ETH_MEDIA_INTERFACE(heth->Init.MediaInterface));\r
-\r
-       if( heth->State == HAL_ETH_STATE_RESET )\r
-       {\r
-               /* Init the low level hardware : GPIO, CLOCK, NVIC. */\r
-               HAL_ETH_MspInit( heth );\r
-       }\r
-\r
-       /* Enable SYSCFG Clock */\r
-       __HAL_RCC_SYSCFG_CLK_ENABLE();\r
-\r
-       /* Select MII or RMII Mode*/\r
-       SYSCFG->PMC &= ~(SYSCFG_PMC_MII_RMII_SEL);\r
-       SYSCFG->PMC |= (uint32_t)heth->Init.MediaInterface;\r
-\r
-       /* Ethernet Software reset */\r
-       /* Set the SWR bit: resets all MAC subsystem internal registers and logic */\r
-       /* After reset all the registers holds their respective reset values */\r
-       /* Also enable EDFE: Enhanced descriptor format enable. */\r
-       heth->Instance->DMABMR |= ETH_DMABMR_SR | ETH_DMABMR_EDE;\r
-\r
-       /* Wait for software reset */\r
-       while ((heth->Instance->DMABMR & ETH_DMABMR_SR) != (uint32_t)RESET)\r
-       {\r
-               /* If your program hangs here, please check the value of 'ipconfigUSE_RMII'. */\r
-       }\r
-\r
-       /*-------------------------------- MAC Initialization ----------------------*/\r
-       /* Get the ETHERNET MACMIIAR value */\r
-       tmpreg = heth->Instance->MACMIIAR;\r
-       /* Clear CSR Clock Range CR[2:0] bits */\r
-       tmpreg &= ETH_MACMIIAR_CR_MASK;\r
-\r
-       /* Get hclk frequency value (e.g. 168,000,000) */\r
-       hclk = HAL_RCC_GetHCLKFreq();\r
-\r
-       /* Set CR bits depending on hclk value */\r
-       if(( hclk >= 20000000uL ) && ( hclk < 35000000uL ) )\r
-       {\r
-               /* CSR Clock Range between 20-35 MHz */\r
-               tmpreg |= ( uint32_t) ETH_MACMIIAR_CR_Div16;\r
-       }\r
-       else if( ( hclk >= 35000000uL ) && ( hclk < 60000000uL ) )\r
-       {\r
-       /* CSR Clock Range between 35-60 MHz */\r
-       tmpreg |= ( uint32_t ) ETH_MACMIIAR_CR_Div26;\r
-       }\r
-       else if( ( hclk >= 60000000uL ) && ( hclk < 100000000uL ) )\r
-       {\r
-               /* CSR Clock Range between 60-100 MHz */\r
-               tmpreg |= (uint32_t)ETH_MACMIIAR_CR_Div42;\r
-       }\r
-       else if( ( hclk >= 100000000uL ) && ( hclk < 150000000uL ) )\r
-       {\r
-               /* CSR Clock Range between 100-150 MHz */\r
-               tmpreg |= (uint32_t)ETH_MACMIIAR_CR_Div62;\r
-       }\r
-       else /* ( ( hclk >= 150000000uL ) && ( hclk <= 183000000uL ) ) */\r
-       {\r
-               /* CSR Clock Range between 150-183 MHz */\r
-               tmpreg |= (uint32_t)ETH_MACMIIAR_CR_Div102;\r
-       }\r
-\r
-       /* Write to ETHERNET MAC MIIAR: Configure the ETHERNET CSR Clock Range */\r
-       heth->Instance->MACMIIAR = (uint32_t)tmpreg;\r
-\r
-       /* Initialise the MACB and set all PHY properties */\r
-       vMACBProbePhy();\r
-\r
-       /* Config MAC and DMA */\r
-       ETH_MACDMAConfig(heth, err);\r
-\r
-       /* Set ETH HAL State to Ready */\r
-       heth->State= HAL_ETH_STATE_READY;\r
-\r
-       /* Return function status */\r
-       return HAL_OK;\r
-}\r
-\r
-/**\r
-  * @brief  De-Initializes the ETH peripheral.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @retval HAL status\r
-  */\r
-HAL_StatusTypeDef HAL_ETH_DeInit(ETH_HandleTypeDef *heth)\r
-{\r
-       /* Set the ETH peripheral state to BUSY */\r
-       heth->State = HAL_ETH_STATE_BUSY;\r
-\r
-       /* De-Init the low level hardware : GPIO, CLOCK, NVIC. */\r
-       HAL_ETH_MspDeInit( heth );\r
-\r
-       /* Set ETH HAL state to Disabled */\r
-       heth->State= HAL_ETH_STATE_RESET;\r
-\r
-       /* Release Lock */\r
-       __HAL_UNLOCK( heth );\r
-\r
-       /* Return function status */\r
-       return HAL_OK;\r
-}\r
-\r
-/**\r
-  * @brief  Initializes the ETH MSP.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @retval None\r
-  */\r
-__weak void HAL_ETH_MspInit(ETH_HandleTypeDef *heth)\r
-{\r
-  /* NOTE : This function Should not be modified, when the callback is needed,\r
-  the HAL_ETH_MspInit could be implemented in the user file\r
-  */\r
-  ( void ) heth;\r
-}\r
-\r
-/**\r
-  * @brief  DeInitializes ETH MSP.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @retval None\r
-  */\r
-__weak void HAL_ETH_MspDeInit(ETH_HandleTypeDef *heth)\r
-{\r
-  /* NOTE : This function Should not be modified, when the callback is needed,\r
-  the HAL_ETH_MspDeInit could be implemented in the user file\r
-  */\r
-  ( void ) heth;\r
-}\r
-\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Exported_Functions_Group2 IO operation functions\r
-  *  @brief   Data transfers functions\r
-  *\r
-  @verbatim\r
-  ==============================================================================\r
-                          ##### IO operation functions #####\r
-  ==============================================================================\r
-  [..]  This section provides functions allowing to:\r
-        (+) Transmit a frame\r
-            HAL_ETH_TransmitFrame();\r
-        (+) Receive a frame\r
-            HAL_ETH_GetReceivedFrame();\r
-            HAL_ETH_GetReceivedFrame_IT();\r
-        (+) Read from an External PHY register\r
-            HAL_ETH_ReadPHYRegister();\r
-        (+) Write to an External PHY register\r
-            HAL_ETH_WritePHYRegister();\r
-\r
-  @endverbatim\r
-\r
-  * @{\r
-  */\r
-\r
-#define ETH_DMA_ALL_INTS \\r
-       ( ETH_DMA_IT_TST | ETH_DMA_IT_PMT | ETH_DMA_IT_MMC | ETH_DMA_IT_NIS | ETH_DMA_IT_AIS | ETH_DMA_IT_ER | \\r
-       ETH_DMA_IT_FBE | ETH_DMA_IT_ET | ETH_DMA_IT_RWT | ETH_DMA_IT_RPS | ETH_DMA_IT_RBU | ETH_DMA_IT_R | \\r
-       ETH_DMA_IT_TU | ETH_DMA_IT_RO | ETH_DMA_IT_TJT | ETH_DMA_IT_TPS | ETH_DMA_IT_T )\r
-\r
-//#define ETH_DMA_ALL_INTS             ETH_DMA_IT_RBU | ETH_DMA_FLAG_T | ETH_DMA_FLAG_AIS\r
-\r
-#define INT_MASK               ( ( uint32_t ) ~ ( ETH_DMA_IT_TBU ) )\r
-void HAL_ETH_IRQHandler(ETH_HandleTypeDef *heth)\r
-{\r
-       uint32_t dmasr;\r
-\r
-       dmasr = heth->Instance->DMASR & ETH_DMA_ALL_INTS;\r
-       heth->Instance->DMASR = dmasr;\r
-\r
-       /* Frame received */\r
-       if( ( dmasr & ( ETH_DMA_FLAG_R | ETH_DMA_IT_RBU ) ) != 0 )\r
-       {\r
-               /* Receive complete callback */\r
-               HAL_ETH_RxCpltCallback( heth );\r
-       }\r
-       /* Frame transmitted */\r
-       if( ( dmasr & ( ETH_DMA_FLAG_T ) ) != 0 )\r
-       {\r
-               /* Transfer complete callback */\r
-               HAL_ETH_TxCpltCallback( heth );\r
-       }\r
-\r
-       /* ETH DMA Error */\r
-       if( ( dmasr & ( ETH_DMA_FLAG_AIS ) ) != 0 )\r
-       {\r
-               /* Ethernet Error callback */\r
-               HAL_ETH_ErrorCallback( heth );\r
-       }\r
-}\r
-\r
-/**\r
-  * @brief  Tx Transfer completed callbacks.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @retval None\r
-  */\r
-__weak void HAL_ETH_TxCpltCallback(ETH_HandleTypeDef *heth)\r
-{\r
-  /* NOTE : This function Should not be modified, when the callback is needed,\r
-  the HAL_ETH_TxCpltCallback could be implemented in the user file\r
-  */\r
-  ( void ) heth;\r
-}\r
-\r
-/**\r
-  * @brief  Rx Transfer completed callbacks.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @retval None\r
-  */\r
-__weak void HAL_ETH_RxCpltCallback(ETH_HandleTypeDef *heth)\r
-{\r
-  /* NOTE : This function Should not be modified, when the callback is needed,\r
-  the HAL_ETH_TxCpltCallback could be implemented in the user file\r
-  */\r
-  ( void ) heth;\r
-}\r
-\r
-/**\r
-  * @brief  Ethernet transfer error callbacks\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @retval None\r
-  */\r
-__weak void HAL_ETH_ErrorCallback(ETH_HandleTypeDef *heth)\r
-{\r
-  /* NOTE : This function Should not be modified, when the callback is needed,\r
-  the HAL_ETH_TxCpltCallback could be implemented in the user file\r
-  */\r
-  ( void ) heth;\r
-}\r
-\r
-/**\r
-  * @brief  Reads a PHY register\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @param PHYReg: PHY register address, is the index of one of the 32 PHY register.\r
-  *                This parameter can be one of the following values:\r
-  *                   PHY_BCR: Transceiver Basic Control Register,\r
-  *                   PHY_BSR: Transceiver Basic Status Register.\r
-  *                   More PHY register could be read depending on the used PHY\r
-  * @param RegValue: PHY register value\r
-  * @retval HAL status\r
-  */\r
-HAL_StatusTypeDef HAL_ETH_ReadPHYRegister(ETH_HandleTypeDef *heth, uint16_t PHYReg, uint32_t *RegValue)\r
-{\r
-uint32_t tmpreg = 0uL;\r
-uint32_t tickstart = 0uL;\r
-HAL_StatusTypeDef xResult;\r
-\r
-       /* Check parameters */\r
-       assert_param(IS_ETH_PHY_ADDRESS(heth->Init.PhyAddress));\r
-\r
-       /* Check the ETH peripheral state */\r
-       if( heth->State == HAL_ETH_STATE_BUSY_RD )\r
-       {\r
-               xResult = HAL_BUSY;\r
-       }\r
-       else\r
-       {\r
-               __HAL_LOCK( heth );\r
-\r
-               /* Set ETH HAL State to BUSY_RD */\r
-               heth->State = HAL_ETH_STATE_BUSY_RD;\r
-\r
-               /* Get the ETHERNET MACMIIAR value */\r
-               tmpreg = heth->Instance->MACMIIAR;\r
-\r
-               /* Keep only the CSR Clock Range CR[2:0] bits value */\r
-               tmpreg &= ~ETH_MACMIIAR_CR_MASK;\r
-\r
-               /* Prepare the MII address register value */\r
-               tmpreg |= ( ( ( uint32_t )heth->Init.PhyAddress << 11) & ETH_MACMIIAR_PA );    /* Set the PHY device address   */\r
-               tmpreg |= ( ( ( uint32_t )PHYReg << 6 ) & ETH_MACMIIAR_MR );                   /* Set the PHY register address */\r
-               tmpreg &= ~ETH_MACMIIAR_MW;                                           /* Set the read mode            */\r
-               tmpreg |= ETH_MACMIIAR_MB;                                            /* Set the MII Busy bit         */\r
-\r
-               /* Write the result value into the MII Address register */\r
-               heth->Instance->MACMIIAR = tmpreg;\r
-\r
-               /* Get tick */\r
-               tickstart = HAL_GetTick();\r
-\r
-               /* Check for the Busy flag */\r
-               while( 1 )\r
-               {\r
-                       tmpreg = heth->Instance->MACMIIAR;\r
-\r
-                       if( ( tmpreg & ETH_MACMIIAR_MB ) == 0uL )\r
-                       {\r
-                               /* Get MACMIIDR value */\r
-                               *RegValue = ( uint32_t ) heth->Instance->MACMIIDR;\r
-                               xResult = HAL_OK;\r
-                               break;\r
-                       }\r
-                       /* Check for the Timeout */\r
-                       if( ( HAL_GetTick( ) - tickstart ) > PHY_READ_TO )\r
-                       {\r
-                               xResult = HAL_TIMEOUT;\r
-                               break;\r
-                       }\r
-\r
-               }\r
-\r
-               /* Set ETH HAL State to READY */\r
-               heth->State = HAL_ETH_STATE_READY;\r
-\r
-               /* Process Unlocked */\r
-               __HAL_UNLOCK( heth );\r
-       }\r
-\r
-       /* Return function status */\r
-       return xResult;\r
-}\r
-\r
-/**\r
-  * @brief  Writes to a PHY register.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @param  PHYReg: PHY register address, is the index of one of the 32 PHY register.\r
-  *          This parameter can be one of the following values:\r
-  *             PHY_BCR: Transceiver Control Register.\r
-  *             More PHY register could be written depending on the used PHY\r
-  * @param  RegValue: the value to write\r
-  * @retval HAL status\r
-  */\r
-HAL_StatusTypeDef HAL_ETH_WritePHYRegister(ETH_HandleTypeDef *heth, uint16_t PHYReg, uint32_t RegValue)\r
-{\r
-uint32_t tmpreg = 0;\r
-uint32_t tickstart = 0;\r
-HAL_StatusTypeDef xResult;\r
-\r
-       /* Check parameters */\r
-       assert_param( IS_ETH_PHY_ADDRESS( heth->Init.PhyAddress ) );\r
-\r
-       /* Check the ETH peripheral state */\r
-       if( heth->State == HAL_ETH_STATE_BUSY_WR )\r
-       {\r
-               xResult = HAL_BUSY;\r
-       }\r
-       else\r
-       {\r
-               __HAL_LOCK( heth );\r
-\r
-               /* Set ETH HAL State to BUSY_WR */\r
-               heth->State = HAL_ETH_STATE_BUSY_WR;\r
-\r
-               /* Get the ETHERNET MACMIIAR value */\r
-               tmpreg = heth->Instance->MACMIIAR;\r
-\r
-               /* Keep only the CSR Clock Range CR[2:0] bits value */\r
-               tmpreg &= ~ETH_MACMIIAR_CR_MASK;\r
-\r
-               /* Prepare the MII register address value */\r
-               tmpreg |= ( ( ( uint32_t ) heth->Init.PhyAddress << 11 ) & ETH_MACMIIAR_PA ); /* Set the PHY device address */\r
-               tmpreg |= ( ( ( uint32_t ) PHYReg << 6 ) & ETH_MACMIIAR_MR );                 /* Set the PHY register address */\r
-               tmpreg |= ETH_MACMIIAR_MW;                                          /* Set the write mode */\r
-               tmpreg |= ETH_MACMIIAR_MB;                                          /* Set the MII Busy bit */\r
-\r
-               /* Give the value to the MII data register */\r
-               heth->Instance->MACMIIDR = ( uint16_t ) RegValue;\r
-\r
-               /* Write the result value into the MII Address register */\r
-               heth->Instance->MACMIIAR = tmpreg;\r
-\r
-               /* Get tick */\r
-               tickstart = HAL_GetTick();\r
-\r
-               /* Check for the Busy flag */\r
-               while( 1 )\r
-               {\r
-                       tmpreg = heth->Instance->MACMIIAR;\r
-\r
-                       if( ( tmpreg & ETH_MACMIIAR_MB ) == 0ul )\r
-                       {\r
-                               xResult = HAL_OK;\r
-                               break;\r
-                       }\r
-                       /* Check for the Timeout */\r
-                       if( ( HAL_GetTick( ) - tickstart ) > PHY_WRITE_TO )\r
-                       {\r
-                               xResult = HAL_TIMEOUT;\r
-                               break;\r
-                       }\r
-               }\r
-\r
-               /* Set ETH HAL State to READY */\r
-               heth->State = HAL_ETH_STATE_READY;\r
-               /* Process Unlocked */\r
-               __HAL_UNLOCK( heth );\r
-       }\r
-\r
-       /* Return function status */\r
-       return xResult;\r
-}\r
-\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Exported_Functions_Group3 Peripheral Control functions\r
- *  @brief    Peripheral Control functions\r
- *\r
-@verbatim\r
- ===============================================================================\r
-                  ##### Peripheral Control functions #####\r
- ===============================================================================\r
-    [..]  This section provides functions allowing to:\r
-      (+) Enable MAC and DMA transmission and reception.\r
-          HAL_ETH_Start();\r
-      (+) Disable MAC and DMA transmission and reception.\r
-          HAL_ETH_Stop();\r
-      (+) Set the MAC configuration in runtime mode\r
-          HAL_ETH_ConfigMAC();\r
-      (+) Set the DMA configuration in runtime mode\r
-          HAL_ETH_ConfigDMA();\r
-\r
-@endverbatim\r
-  * @{\r
-  */\r
-\r
- /**\r
-  * @brief  Enables Ethernet MAC and DMA reception/transmission\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @retval HAL status\r
-  */\r
-HAL_StatusTypeDef HAL_ETH_Start( ETH_HandleTypeDef *heth )\r
-{\r
-       /* Process Locked */\r
-       __HAL_LOCK( heth );\r
-\r
-       /* Set the ETH peripheral state to BUSY */\r
-       heth->State = HAL_ETH_STATE_BUSY;\r
-\r
-       /* Enable transmit state machine of the MAC for transmission on the MII */\r
-       ETH_MACTransmissionEnable( heth );\r
-\r
-       /* Enable receive state machine of the MAC for reception from the MII */\r
-       ETH_MACReceptionEnable( heth );\r
-\r
-       /* Flush Transmit FIFO */\r
-       ETH_FlushTransmitFIFO( heth );\r
-\r
-       /* Start DMA transmission */\r
-       ETH_DMATransmissionEnable( heth );\r
-\r
-       /* Start DMA reception */\r
-       ETH_DMAReceptionEnable( heth );\r
-\r
-       /* Set the ETH state to READY*/\r
-       heth->State= HAL_ETH_STATE_READY;\r
-\r
-       /* Process Unlocked */\r
-       __HAL_UNLOCK( heth );\r
-\r
-       /* Return function status */\r
-       return HAL_OK;\r
-}\r
-\r
-/**\r
-  * @brief  Stop Ethernet MAC and DMA reception/transmission\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @retval HAL status\r
-  */\r
-HAL_StatusTypeDef HAL_ETH_Stop(ETH_HandleTypeDef *heth)\r
-{\r
-  /* Process Locked */\r
-  __HAL_LOCK( heth );\r
-\r
-  /* Set the ETH peripheral state to BUSY */\r
-  heth->State = HAL_ETH_STATE_BUSY;\r
-\r
-  /* Stop DMA transmission */\r
-  ETH_DMATransmissionDisable( heth );\r
-\r
-  /* Stop DMA reception */\r
-  ETH_DMAReceptionDisable( heth );\r
-\r
-  /* Disable receive state machine of the MAC for reception from the MII */\r
-  ETH_MACReceptionDisable( heth );\r
-\r
-  /* Flush Transmit FIFO */\r
-  ETH_FlushTransmitFIFO( heth );\r
-\r
-  /* Disable transmit state machine of the MAC for transmission on the MII */\r
-  ETH_MACTransmissionDisable( heth );\r
-\r
-  /* Set the ETH state*/\r
-  heth->State = HAL_ETH_STATE_READY;\r
-\r
-  /* Process Unlocked */\r
-  __HAL_UNLOCK( heth );\r
-\r
-  /* Return function status */\r
-  return HAL_OK;\r
-}\r
-\r
-static void vRegisterDelay()\r
-{\r
-uint32_t uxCount;\r
-       /*\r
-        * Regarding the HAL delay functions, I noticed that HAL delay is being used to workaround the\r
-        * "Successive write operations to the same register might not be fully taken into account" errata.\r
-        * The workaround requires a delay of four TX_CLK/RX_CLK clock cycles. For a 10 Mbit connection,\r
-        * these clocks are running at 2.5 MHz, so this delay would be at most 1.6 microseconds.\r
-        * 180 Mhz = 288 loops\r
-        * 168 Mhz = 269 loops\r
-        * 100 Mhz = 160 loops\r
-        *  84 Mhz = 134 loops\r
-        */\r
-       #define WAIT_TIME_NS    1600uL                  /* 1.6 microseconds */\r
-       #define CPU_MAX_FREQ    SystemCoreClock /* 84, 100, 168 or 180 MHz */\r
-       uint32_t NOP_COUNT = ( WAIT_TIME_NS * ( CPU_MAX_FREQ / 1000uL ) ) / 1000000uL;\r
-       for( uxCount = NOP_COUNT; uxCount > 0uL; uxCount-- )\r
-       {\r
-               __NOP();\r
-       }\r
-}\r
-\r
-static void prvWriteMACFCR( ETH_HandleTypeDef *heth, uint32_t ulValue)\r
-{\r
-       /* Enable the MAC transmission */\r
-       heth->Instance->MACFCR = ulValue;\r
-\r
-       /* Wait until the write operation will be taken into account:\r
-       at least four TX_CLK/RX_CLK clock cycles.\r
-       Read it back, wait a ms and */\r
-       ( void ) heth->Instance->MACFCR;\r
-\r
-       vRegisterDelay();\r
-\r
-       heth->Instance->MACFCR = ulValue;\r
-}\r
-\r
-static void prvWriteDMAOMR( ETH_HandleTypeDef *heth, uint32_t ulValue)\r
-{\r
-       /* Enable the MAC transmission */\r
-       heth->Instance->DMAOMR = ulValue;\r
-\r
-       /* Wait until the write operation will be taken into account:\r
-       at least four TX_CLK/RX_CLK clock cycles.\r
-       Read it back, wait a ms and */\r
-       ( void ) heth->Instance->DMAOMR;\r
-\r
-       vRegisterDelay();\r
-\r
-       heth->Instance->DMAOMR = ulValue;\r
-}\r
-\r
-static void prvWriteMACCR( ETH_HandleTypeDef *heth, uint32_t ulValue)\r
-{\r
-       /* Enable the MAC transmission */\r
-       heth->Instance->MACCR = ulValue;\r
-\r
-       /* Wait until the write operation will be taken into account:\r
-       at least four TX_CLK/RX_CLK clock cycles.\r
-       Read it back, wait a ms and */\r
-       ( void ) heth->Instance->MACCR;\r
-\r
-       vRegisterDelay();\r
-\r
-       heth->Instance->MACCR = ulValue;\r
-}\r
-\r
-/**\r
-  * @brief  Set ETH MAC Configuration.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @param  macconf: MAC Configuration structure\r
-  * @retval HAL status\r
-  */\r
-HAL_StatusTypeDef HAL_ETH_ConfigMAC(ETH_HandleTypeDef *heth, ETH_MACInitTypeDef *macconf)\r
-{\r
-       uint32_t tmpreg = 0uL;\r
-\r
-       /* Process Locked */\r
-       __HAL_LOCK( heth );\r
-\r
-       /* Set the ETH peripheral state to BUSY */\r
-       heth->State= HAL_ETH_STATE_BUSY;\r
-\r
-       assert_param(IS_ETH_SPEED(heth->Init.Speed));\r
-       assert_param(IS_ETH_DUPLEX_MODE(heth->Init.DuplexMode));\r
-\r
-       if (macconf != NULL)\r
-       {\r
-               /* Check the parameters */\r
-               assert_param(IS_ETH_WATCHDOG(macconf->Watchdog));\r
-               assert_param(IS_ETH_JABBER(macconf->Jabber));\r
-               assert_param(IS_ETH_INTER_FRAME_GAP(macconf->InterFrameGap));\r
-               assert_param(IS_ETH_CARRIER_SENSE(macconf->CarrierSense));\r
-               assert_param(IS_ETH_RECEIVE_OWN(macconf->ReceiveOwn));\r
-               assert_param(IS_ETH_LOOPBACK_MODE(macconf->LoopbackMode));\r
-               assert_param(IS_ETH_CHECKSUM_OFFLOAD(macconf->ChecksumOffload));\r
-               assert_param(IS_ETH_RETRY_TRANSMISSION(macconf->RetryTransmission));\r
-               assert_param(IS_ETH_AUTOMATIC_PADCRC_STRIP(macconf->AutomaticPadCRCStrip));\r
-               assert_param(IS_ETH_BACKOFF_LIMIT(macconf->BackOffLimit));\r
-               assert_param(IS_ETH_DEFERRAL_CHECK(macconf->DeferralCheck));\r
-               assert_param(IS_ETH_RECEIVE_ALL(macconf->ReceiveAll));\r
-               assert_param(IS_ETH_SOURCE_ADDR_FILTER(macconf->SourceAddrFilter));\r
-               assert_param(IS_ETH_CONTROL_FRAMES(macconf->PassControlFrames));\r
-               assert_param(IS_ETH_BROADCAST_FRAMES_RECEPTION(macconf->BroadcastFramesReception));\r
-               assert_param(IS_ETH_DESTINATION_ADDR_FILTER(macconf->DestinationAddrFilter));\r
-               assert_param(IS_ETH_PROMISCUOUS_MODE(macconf->PromiscuousMode));\r
-               assert_param(IS_ETH_MULTICAST_FRAMES_FILTER(macconf->MulticastFramesFilter));\r
-               assert_param(IS_ETH_UNICAST_FRAMES_FILTER(macconf->UnicastFramesFilter));\r
-               assert_param(IS_ETH_PAUSE_TIME(macconf->PauseTime));\r
-               assert_param(IS_ETH_ZEROQUANTA_PAUSE(macconf->ZeroQuantaPause));\r
-               assert_param(IS_ETH_PAUSE_LOW_THRESHOLD(macconf->PauseLowThreshold));\r
-               assert_param(IS_ETH_UNICAST_PAUSE_FRAME_DETECT(macconf->UnicastPauseFrameDetect));\r
-               assert_param(IS_ETH_RECEIVE_FLOWCONTROL(macconf->ReceiveFlowControl));\r
-               assert_param(IS_ETH_TRANSMIT_FLOWCONTROL(macconf->TransmitFlowControl));\r
-               assert_param(IS_ETH_VLAN_TAG_COMPARISON(macconf->VLANTagComparison));\r
-               assert_param(IS_ETH_VLAN_TAG_IDENTIFIER(macconf->VLANTagIdentifier));\r
-\r
-               /*------------------------ ETHERNET MACCR Configuration --------------------*/\r
-               /* Get the ETHERNET MACCR value */\r
-               tmpreg = heth->Instance->MACCR;\r
-               /* Clear WD, PCE, PS, TE and RE bits */\r
-               tmpreg &= ETH_MACCR_CLEAR_MASK;\r
-\r
-               tmpreg |= (uint32_t)(\r
-                       macconf->Watchdog |\r
-                       macconf->Jabber |\r
-                       macconf->InterFrameGap |\r
-                       macconf->CarrierSense |\r
-                       heth->Init.Speed |\r
-                       macconf->ReceiveOwn |\r
-                       macconf->LoopbackMode |\r
-                       heth->Init.DuplexMode |\r
-                       macconf->ChecksumOffload |\r
-                       macconf->RetryTransmission |\r
-                       macconf->AutomaticPadCRCStrip |\r
-                       macconf->BackOffLimit |\r
-                       macconf->DeferralCheck);\r
-\r
-               /* Write to ETHERNET MACCR */\r
-               prvWriteMACCR( heth, tmpreg );\r
-\r
-               /*----------------------- ETHERNET MACFFR Configuration --------------------*/\r
-               /* Write to ETHERNET MACFFR */\r
-               heth->Instance->MACFFR = (uint32_t)(\r
-                       macconf->ReceiveAll |\r
-                       macconf->SourceAddrFilter |\r
-                       macconf->PassControlFrames |\r
-                       macconf->BroadcastFramesReception |\r
-                       macconf->DestinationAddrFilter |\r
-                       macconf->PromiscuousMode |\r
-                       macconf->MulticastFramesFilter |\r
-                       macconf->UnicastFramesFilter);\r
-\r
-               /* Wait until the write operation will be taken into account :\r
-               at least four TX_CLK/RX_CLK clock cycles */\r
-               tmpreg = heth->Instance->MACFFR;\r
-               vRegisterDelay();\r
-               heth->Instance->MACFFR = tmpreg;\r
-\r
-               /*--------------- ETHERNET MACHTHR and MACHTLR Configuration ---------------*/\r
-               /* Write to ETHERNET MACHTHR */\r
-               heth->Instance->MACHTHR = (uint32_t)macconf->HashTableHigh;\r
-\r
-               /* Write to ETHERNET MACHTLR */\r
-               heth->Instance->MACHTLR = (uint32_t)macconf->HashTableLow;\r
-               /*----------------------- ETHERNET MACFCR Configuration --------------------*/\r
-\r
-               /* Get the ETHERNET MACFCR value */\r
-               tmpreg = heth->Instance->MACFCR;\r
-               /* Clear xx bits */\r
-               tmpreg &= ETH_MACFCR_CLEAR_MASK;\r
-\r
-               tmpreg |= (uint32_t)((\r
-                       macconf->PauseTime << 16) |\r
-                       macconf->ZeroQuantaPause |\r
-                       macconf->PauseLowThreshold |\r
-                       macconf->UnicastPauseFrameDetect |\r
-                       macconf->ReceiveFlowControl |\r
-                       macconf->TransmitFlowControl);\r
-\r
-               /* Write to ETHERNET MACFCR */\r
-               prvWriteMACFCR( heth, tmpreg );\r
-\r
-               /*----------------------- ETHERNET MACVLANTR Configuration -----------------*/\r
-               heth->Instance->MACVLANTR = (uint32_t)(macconf->VLANTagComparison |\r
-               macconf->VLANTagIdentifier);\r
-\r
-               /* Wait until the write operation will be taken into account :\r
-               at least four TX_CLK/RX_CLK clock cycles */\r
-               tmpreg = heth->Instance->MACVLANTR;\r
-               vRegisterDelay();\r
-               heth->Instance->MACVLANTR = tmpreg;\r
-       }\r
-       else /* macconf == NULL : here we just configure Speed and Duplex mode */\r
-       {\r
-               /*------------------------ ETHERNET MACCR Configuration --------------------*/\r
-               /* Get the ETHERNET MACCR value */\r
-               tmpreg = heth->Instance->MACCR;\r
-\r
-               /* Clear FES and DM bits */\r
-               tmpreg &= ~( ( uint32_t ) 0x00004800uL );\r
-\r
-               tmpreg |= (uint32_t)(heth->Init.Speed | heth->Init.DuplexMode);\r
-\r
-               /* Write to ETHERNET MACCR */\r
-               prvWriteMACCR( heth, tmpreg );\r
-       }\r
-\r
-       /* Set the ETH state to Ready */\r
-       heth->State= HAL_ETH_STATE_READY;\r
-\r
-       /* Process Unlocked */\r
-       __HAL_UNLOCK( heth );\r
-\r
-       /* Return function status */\r
-       return HAL_OK;\r
-}\r
-\r
-/**\r
-  * @brief  Sets ETH DMA Configuration.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @param  dmaconf: DMA Configuration structure\r
-  * @retval HAL status\r
-  */\r
-HAL_StatusTypeDef HAL_ETH_ConfigDMA(ETH_HandleTypeDef *heth, ETH_DMAInitTypeDef *dmaconf)\r
-{\r
-       uint32_t tmpreg = 0uL;\r
-\r
-       /* Process Locked */\r
-       __HAL_LOCK( heth );\r
-\r
-       /* Set the ETH peripheral state to BUSY */\r
-       heth->State= HAL_ETH_STATE_BUSY;\r
-\r
-       /* Check parameters */\r
-       assert_param(IS_ETH_DROP_TCPIP_CHECKSUM_FRAME(dmaconf->DropTCPIPChecksumErrorFrame));\r
-       assert_param(IS_ETH_RECEIVE_STORE_FORWARD(dmaconf->ReceiveStoreForward));\r
-       assert_param(IS_ETH_FLUSH_RECEIVE_FRAME(dmaconf->FlushReceivedFrame));\r
-       assert_param(IS_ETH_TRANSMIT_STORE_FORWARD(dmaconf->TransmitStoreForward));\r
-       assert_param(IS_ETH_TRANSMIT_THRESHOLD_CONTROL(dmaconf->TransmitThresholdControl));\r
-       assert_param(IS_ETH_FORWARD_ERROR_FRAMES(dmaconf->ForwardErrorFrames));\r
-       assert_param(IS_ETH_FORWARD_UNDERSIZED_GOOD_FRAMES(dmaconf->ForwardUndersizedGoodFrames));\r
-       assert_param(IS_ETH_RECEIVE_THRESHOLD_CONTROL(dmaconf->ReceiveThresholdControl));\r
-       assert_param(IS_ETH_SECOND_FRAME_OPERATE(dmaconf->SecondFrameOperate));\r
-       assert_param(IS_ETH_ADDRESS_ALIGNED_BEATS(dmaconf->AddressAlignedBeats));\r
-       assert_param(IS_ETH_FIXED_BURST(dmaconf->FixedBurst));\r
-       assert_param(IS_ETH_RXDMA_BURST_LENGTH(dmaconf->RxDMABurstLength));\r
-       assert_param(IS_ETH_TXDMA_BURST_LENGTH(dmaconf->TxDMABurstLength));\r
-       assert_param(IS_ETH_ENHANCED_DESCRIPTOR_FORMAT(dmaconf->EnhancedDescriptorFormat));\r
-       assert_param(IS_ETH_DMA_DESC_SKIP_LENGTH(dmaconf->DescriptorSkipLength));\r
-       assert_param(IS_ETH_DMA_ARBITRATION_ROUNDROBIN_RXTX(dmaconf->DMAArbitration));\r
-\r
-       /*----------------------- ETHERNET DMAOMR Configuration --------------------*/\r
-       /* Get the ETHERNET DMAOMR value */\r
-       tmpreg = heth->Instance->DMAOMR;\r
-       /* Clear xx bits */\r
-       tmpreg &= ETH_DMAOMR_CLEAR_MASK;\r
-\r
-       tmpreg |= (uint32_t)(\r
-               dmaconf->DropTCPIPChecksumErrorFrame |\r
-               dmaconf->ReceiveStoreForward |\r
-               dmaconf->FlushReceivedFrame |\r
-               dmaconf->TransmitStoreForward |\r
-               dmaconf->TransmitThresholdControl |\r
-               dmaconf->ForwardErrorFrames |\r
-               dmaconf->ForwardUndersizedGoodFrames |\r
-               dmaconf->ReceiveThresholdControl |\r
-               dmaconf->SecondFrameOperate);\r
-\r
-       /* Write to ETHERNET DMAOMR */\r
-       prvWriteDMAOMR( heth, tmpreg );\r
-\r
-       /*----------------------- ETHERNET DMABMR Configuration --------------------*/\r
-       heth->Instance->DMABMR = (uint32_t)(dmaconf->AddressAlignedBeats |\r
-       dmaconf->FixedBurst |\r
-       dmaconf->RxDMABurstLength | /* !! if 4xPBL is selected for Tx or Rx it is applied for the other */\r
-       dmaconf->TxDMABurstLength |\r
-       dmaconf->EnhancedDescriptorFormat |\r
-       (dmaconf->DescriptorSkipLength << 2) |\r
-       dmaconf->DMAArbitration |\r
-       ETH_DMABMR_USP); /* Enable use of separate PBL for Rx and Tx */\r
-\r
-       /* Wait until the write operation will be taken into account:\r
-       at least four TX_CLK/RX_CLK clock cycles */\r
-       tmpreg = heth->Instance->DMABMR;\r
-       vRegisterDelay();\r
-       heth->Instance->DMABMR = tmpreg;\r
-\r
-       /* Set the ETH state to Ready */\r
-       heth->State= HAL_ETH_STATE_READY;\r
-\r
-       /* Process Unlocked */\r
-       __HAL_UNLOCK( heth );\r
-\r
-       /* Return function status */\r
-       return HAL_OK;\r
-}\r
-\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Exported_Functions_Group4 Peripheral State functions\r
-  *  @brief   Peripheral State functions\r
-  *\r
-  @verbatim\r
-  ===============================================================================\r
-                         ##### Peripheral State functions #####\r
-  ===============================================================================\r
-  [..]\r
-  This subsection permits to get in run-time the status of the peripheral\r
-  and the data flow.\r
-       (+) Get the ETH handle state:\r
-           HAL_ETH_GetState();\r
-\r
-\r
-  @endverbatim\r
-  * @{\r
-  */\r
-\r
-/**\r
-  * @brief  Return the ETH HAL state\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @retval HAL state\r
-  */\r
-HAL_ETH_StateTypeDef HAL_ETH_GetState(ETH_HandleTypeDef *heth)\r
-{\r
-  /* Return ETH state */\r
-  return heth->State;\r
-}\r
-\r
-/**\r
-  * @}\r
-  */\r
-\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @addtogroup ETH_Private_Functions\r
-  * @{\r
-  */\r
-\r
-/**\r
-  * @brief  Configures Ethernet MAC and DMA with default parameters.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @param  err: Ethernet Init error\r
-  * @retval HAL status\r
-  */\r
-static void ETH_MACDMAConfig(ETH_HandleTypeDef *heth, uint32_t err)\r
-{\r
-  ETH_MACInitTypeDef macinit;\r
-  ETH_DMAInitTypeDef dmainit;\r
-  uint32_t tmpreg = 0uL;\r
-\r
-  if (err != ETH_SUCCESS) /* Auto-negotiation failed */\r
-  {\r
-    /* Set Ethernet duplex mode to Full-duplex */\r
-    heth->Init.DuplexMode = ETH_MODE_FULLDUPLEX;\r
-\r
-    /* Set Ethernet speed to 100M */\r
-    heth->Init.Speed = ETH_SPEED_100M;\r
-  }\r
-\r
-  /* Ethernet MAC default initialization **************************************/\r
-  macinit.Watchdog = ETH_WATCHDOG_ENABLE;\r
-  macinit.Jabber = ETH_JABBER_ENABLE;\r
-  macinit.InterFrameGap = ETH_INTERFRAMEGAP_96BIT;\r
-  macinit.CarrierSense = ETH_CARRIERSENCE_ENABLE;\r
-  macinit.ReceiveOwn = ETH_RECEIVEOWN_ENABLE;\r
-  macinit.LoopbackMode = ETH_LOOPBACKMODE_DISABLE;\r
-  if(heth->Init.ChecksumMode == ETH_CHECKSUM_BY_HARDWARE)\r
-  {\r
-    macinit.ChecksumOffload = ETH_CHECKSUMOFFLAOD_ENABLE;\r
-  }\r
-  else\r
-  {\r
-    macinit.ChecksumOffload = ETH_CHECKSUMOFFLAOD_DISABLE;\r
-  }\r
-  macinit.RetryTransmission = ETH_RETRYTRANSMISSION_DISABLE;\r
-  macinit.AutomaticPadCRCStrip = ETH_AUTOMATICPADCRCSTRIP_DISABLE;\r
-  macinit.BackOffLimit = ETH_BACKOFFLIMIT_10;\r
-  macinit.DeferralCheck = ETH_DEFFERRALCHECK_DISABLE;\r
-  macinit.ReceiveAll = ETH_RECEIVEAll_DISABLE;\r
-  macinit.SourceAddrFilter = ETH_SOURCEADDRFILTER_DISABLE;\r
-  macinit.PassControlFrames = ETH_PASSCONTROLFRAMES_BLOCKALL;\r
-  macinit.BroadcastFramesReception = ETH_BROADCASTFRAMESRECEPTION_ENABLE;\r
-  macinit.DestinationAddrFilter = ETH_DESTINATIONADDRFILTER_NORMAL;\r
-  macinit.PromiscuousMode = ETH_PROMISCUOUS_MODE_DISABLE;\r
-  macinit.MulticastFramesFilter = ETH_MULTICASTFRAMESFILTER_PERFECT;\r
-  macinit.UnicastFramesFilter = ETH_UNICASTFRAMESFILTER_PERFECT;\r
-  macinit.HashTableHigh = 0x0uL;\r
-  macinit.HashTableLow = 0x0uL;\r
-  macinit.PauseTime = 0x0uL;\r
-  macinit.ZeroQuantaPause = ETH_ZEROQUANTAPAUSE_DISABLE;\r
-  macinit.PauseLowThreshold = ETH_PAUSELOWTHRESHOLD_MINUS4;\r
-  macinit.UnicastPauseFrameDetect = ETH_UNICASTPAUSEFRAMEDETECT_DISABLE;\r
-  macinit.ReceiveFlowControl = ETH_RECEIVEFLOWCONTROL_DISABLE;\r
-  macinit.TransmitFlowControl = ETH_TRANSMITFLOWCONTROL_DISABLE;\r
-  macinit.VLANTagComparison = ETH_VLANTAGCOMPARISON_16BIT;\r
-  macinit.VLANTagIdentifier = 0x0uL;\r
-\r
-  /*------------------------ ETHERNET MACCR Configuration --------------------*/\r
-  /* Get the ETHERNET MACCR value */\r
-  tmpreg = heth->Instance->MACCR;\r
-  /* Clear WD, PCE, PS, TE and RE bits */\r
-  tmpreg &= ETH_MACCR_CLEAR_MASK;\r
-  /* Set the WD bit according to ETH Watchdog value */\r
-  /* Set the JD: bit according to ETH Jabber value */\r
-  /* Set the IFG bit according to ETH InterFrameGap value */\r
-  /* Set the DCRS bit according to ETH CarrierSense value */\r
-  /* Set the FES bit according to ETH Speed value */\r
-  /* Set the DO bit according to ETH ReceiveOwn value */\r
-  /* Set the LM bit according to ETH LoopbackMode value */\r
-  /* Set the DM bit according to ETH Mode value */\r
-  /* Set the IPCO bit according to ETH ChecksumOffload value */\r
-  /* Set the DR bit according to ETH RetryTransmission value */\r
-  /* Set the ACS bit according to ETH AutomaticPadCRCStrip value */\r
-  /* Set the BL bit according to ETH BackOffLimit value */\r
-  /* Set the DC bit according to ETH DeferralCheck value */\r
-  tmpreg |= (uint32_t)(macinit.Watchdog |\r
-                       macinit.Jabber |\r
-                       macinit.InterFrameGap |\r
-                       macinit.CarrierSense |\r
-                       heth->Init.Speed |\r
-                       macinit.ReceiveOwn |\r
-                       macinit.LoopbackMode |\r
-                       heth->Init.DuplexMode |\r
-                       macinit.ChecksumOffload |\r
-                       macinit.RetryTransmission |\r
-                       macinit.AutomaticPadCRCStrip |\r
-                       macinit.BackOffLimit |\r
-                       macinit.DeferralCheck);\r
-\r
-  /* Write to ETHERNET MACCR */\r
-  prvWriteMACCR( heth, tmpreg );\r
-\r
-  /*----------------------- ETHERNET MACFFR Configuration --------------------*/\r
-  /* Set the RA bit according to ETH ReceiveAll value */\r
-  /* Set the SAF and SAIF bits according to ETH SourceAddrFilter value */\r
-  /* Set the PCF bit according to ETH PassControlFrames value */\r
-  /* Set the DBF bit according to ETH BroadcastFramesReception value */\r
-  /* Set the DAIF bit according to ETH DestinationAddrFilter value */\r
-  /* Set the PR bit according to ETH PromiscuousMode value */\r
-  /* Set the PM, HMC and HPF bits according to ETH MulticastFramesFilter value */\r
-  /* Set the HUC and HPF bits according to ETH UnicastFramesFilter value */\r
-  /* Write to ETHERNET MACFFR */\r
-  heth->Instance->MACFFR = (uint32_t)(macinit.ReceiveAll |\r
-                                        macinit.SourceAddrFilter |\r
-                                        macinit.PassControlFrames |\r
-                                        macinit.BroadcastFramesReception |\r
-                                        macinit.DestinationAddrFilter |\r
-                                        macinit.PromiscuousMode |\r
-                                        macinit.MulticastFramesFilter |\r
-                                        macinit.UnicastFramesFilter);\r
-\r
-   /* Wait until the write operation will be taken into account:\r
-      at least four TX_CLK/RX_CLK clock cycles */\r
-   tmpreg = heth->Instance->MACFFR;\r
-   vRegisterDelay();\r
-   heth->Instance->MACFFR = tmpreg;\r
-\r
-   /*--------------- ETHERNET MACHTHR and MACHTLR Configuration --------------*/\r
-   /* Write to ETHERNET MACHTHR */\r
-   heth->Instance->MACHTHR = (uint32_t)macinit.HashTableHigh;\r
-\r
-   /* Write to ETHERNET MACHTLR */\r
-   heth->Instance->MACHTLR = (uint32_t)macinit.HashTableLow;\r
-   /*----------------------- ETHERNET MACFCR Configuration -------------------*/\r
-\r
-   /* Get the ETHERNET MACFCR value */\r
-   tmpreg = heth->Instance->MACFCR;\r
-   /* Clear xx bits */\r
-   tmpreg &= ETH_MACFCR_CLEAR_MASK;\r
-\r
-   /* Set the PT bit according to ETH PauseTime value */\r
-   /* Set the DZPQ bit according to ETH ZeroQuantaPause value */\r
-   /* Set the PLT bit according to ETH PauseLowThreshold value */\r
-   /* Set the UP bit according to ETH UnicastPauseFrameDetect value */\r
-   /* Set the RFE bit according to ETH ReceiveFlowControl value */\r
-   /* Set the TFE bit according to ETH TransmitFlowControl value */\r
-   tmpreg |= (uint32_t)((macinit.PauseTime << 16) |\r
-                        macinit.ZeroQuantaPause |\r
-                        macinit.PauseLowThreshold |\r
-                        macinit.UnicastPauseFrameDetect |\r
-                        macinit.ReceiveFlowControl |\r
-                        macinit.TransmitFlowControl);\r
-\r
-   /* Write to ETHERNET MACFCR */\r
-   prvWriteMACFCR( heth, tmpreg );\r
-\r
-   /*----------------------- ETHERNET MACVLANTR Configuration ----------------*/\r
-   /* Set the ETV bit according to ETH VLANTagComparison value */\r
-   /* Set the VL bit according to ETH VLANTagIdentifier value */\r
-   heth->Instance->MACVLANTR = (uint32_t)(macinit.VLANTagComparison |\r
-                                            macinit.VLANTagIdentifier);\r
-\r
-    /* Wait until the write operation will be taken into account:\r
-       at least four TX_CLK/RX_CLK clock cycles */\r
-    tmpreg = heth->Instance->MACVLANTR;\r
-    vRegisterDelay();\r
-    heth->Instance->MACVLANTR = tmpreg;\r
-\r
-    /* Ethernet DMA default initialization ************************************/\r
-    dmainit.DropTCPIPChecksumErrorFrame = ETH_DROPTCPIPCHECKSUMERRORFRAME_ENABLE;\r
-    dmainit.ReceiveStoreForward = ETH_RECEIVESTOREFORWARD_ENABLE;\r
-    dmainit.FlushReceivedFrame = ETH_FLUSHRECEIVEDFRAME_ENABLE;\r
-    dmainit.TransmitStoreForward = ETH_TRANSMITSTOREFORWARD_ENABLE;\r
-    dmainit.TransmitThresholdControl = ETH_TRANSMITTHRESHOLDCONTROL_64BYTES;\r
-    dmainit.ForwardErrorFrames = ETH_FORWARDERRORFRAMES_DISABLE;\r
-    dmainit.ForwardUndersizedGoodFrames = ETH_FORWARDUNDERSIZEDGOODFRAMES_DISABLE;\r
-    dmainit.ReceiveThresholdControl = ETH_RECEIVEDTHRESHOLDCONTROL_64BYTES;\r
-    dmainit.SecondFrameOperate = ETH_SECONDFRAMEOPERARTE_ENABLE;\r
-    dmainit.AddressAlignedBeats = ETH_ADDRESSALIGNEDBEATS_ENABLE;\r
-    dmainit.FixedBurst = ETH_FIXEDBURST_ENABLE;\r
-    dmainit.RxDMABurstLength = ETH_RXDMABURSTLENGTH_32BEAT;\r
-    dmainit.TxDMABurstLength = ETH_TXDMABURSTLENGTH_32BEAT;\r
-    dmainit.EnhancedDescriptorFormat = ETH_DMAENHANCEDDESCRIPTOR_ENABLE;\r
-    dmainit.DescriptorSkipLength = 0x0uL;\r
-    dmainit.DMAArbitration = ETH_DMAARBITRATION_ROUNDROBIN_RXTX_1_1;\r
-\r
-    /* Get the ETHERNET DMAOMR value */\r
-    tmpreg = heth->Instance->DMAOMR;\r
-    /* Clear xx bits */\r
-    tmpreg &= ETH_DMAOMR_CLEAR_MASK;\r
-\r
-    /* Set the DT bit according to ETH DropTCPIPChecksumErrorFrame value */\r
-    /* Set the RSF bit according to ETH ReceiveStoreForward value */\r
-    /* Set the DFF bit according to ETH FlushReceivedFrame value */\r
-    /* Set the TSF bit according to ETH TransmitStoreForward value */\r
-    /* Set the TTC bit according to ETH TransmitThresholdControl value */\r
-    /* Set the FEF bit according to ETH ForwardErrorFrames value */\r
-    /* Set the FUF bit according to ETH ForwardUndersizedGoodFrames value */\r
-    /* Set the RTC bit according to ETH ReceiveThresholdControl value */\r
-    /* Set the OSF bit according to ETH SecondFrameOperate value */\r
-    tmpreg |= (uint32_t)(dmainit.DropTCPIPChecksumErrorFrame |\r
-                         dmainit.ReceiveStoreForward |\r
-                         dmainit.FlushReceivedFrame |\r
-                         dmainit.TransmitStoreForward |\r
-                         dmainit.TransmitThresholdControl |\r
-                         dmainit.ForwardErrorFrames |\r
-                         dmainit.ForwardUndersizedGoodFrames |\r
-                         dmainit.ReceiveThresholdControl |\r
-                         dmainit.SecondFrameOperate);\r
-\r
-    /* Write to ETHERNET DMAOMR */\r
-    prvWriteDMAOMR( heth, tmpreg );\r
-\r
-    /*----------------------- ETHERNET DMABMR Configuration ------------------*/\r
-    /* Set the AAL bit according to ETH AddressAlignedBeats value */\r
-    /* Set the FB bit according to ETH FixedBurst value */\r
-    /* Set the RPBL and 4*PBL bits according to ETH RxDMABurstLength value */\r
-    /* Set the PBL and 4*PBL bits according to ETH TxDMABurstLength value */\r
-    /* Set the Enhanced DMA descriptors bit according to ETH EnhancedDescriptorFormat value*/\r
-    /* Set the DSL bit according to ETH DesciptorSkipLength value */\r
-    /* Set the PR and DA bits according to ETH DMAArbitration value */\r
-    heth->Instance->DMABMR = (uint32_t)(dmainit.AddressAlignedBeats |\r
-                                          dmainit.FixedBurst |\r
-                                          dmainit.RxDMABurstLength |    /* !! if 4xPBL is selected for Tx or Rx it is applied for the other */\r
-                                          dmainit.TxDMABurstLength |\r
-                                          dmainit.EnhancedDescriptorFormat |\r
-                                          (dmainit.DescriptorSkipLength << 2) |\r
-                                          dmainit.DMAArbitration |\r
-                                          ETH_DMABMR_USP); /* Enable use of separate PBL for Rx and Tx */\r
-\r
-     /* Wait until the write operation will be taken into account:\r
-        at least four TX_CLK/RX_CLK clock cycles */\r
-     tmpreg = heth->Instance->DMABMR;\r
-     vRegisterDelay();\r
-     heth->Instance->DMABMR = tmpreg;\r
-\r
-     if(heth->Init.RxMode == ETH_RXINTERRUPT_MODE)\r
-     {\r
-       /* Enable the Ethernet Rx Interrupt */\r
-       __HAL_ETH_DMA_ENABLE_IT(( heth ), ETH_DMA_IT_NIS | ETH_DMA_IT_R);\r
-     }\r
-\r
-     /* Initialize MAC address in ethernet MAC */\r
-     ETH_MACAddressConfig(heth, ETH_MAC_ADDRESS0, heth->Init.MACAddr);\r
-}\r
-\r
-/**\r
-  * @brief  Configures the selected MAC address.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @param  MacAddr: The MAC address to configure\r
-  *          This parameter can be one of the following values:\r
-  *             @arg ETH_MAC_Address0: MAC Address0\r
-  *             @arg ETH_MAC_Address1: MAC Address1\r
-  *             @arg ETH_MAC_Address2: MAC Address2\r
-  *             @arg ETH_MAC_Address3: MAC Address3\r
-  * @param  Addr: Pointer to MAC address buffer data (6 bytes)\r
-  * @retval HAL status\r
-  */\r
-static void ETH_MACAddressConfig(ETH_HandleTypeDef *heth, uint32_t MacAddr, uint8_t *Addr)\r
-{\r
-       uint32_t tmpreg;\r
-\r
-       ( void ) heth;\r
-\r
-       /* Check the parameters */\r
-       assert_param( IS_ETH_MAC_ADDRESS0123( MacAddr ) );\r
-\r
-       /* Calculate the selected MAC address high register */\r
-       /* Register ETH_MACA0HR: Bit 31 MO: Always 1. */\r
-       tmpreg = 0x80000000uL | ( ( uint32_t )Addr[ 5 ] << 8) | (uint32_t)Addr[ 4 ];\r
-       /* Load the selected MAC address high register */\r
-       ( * ( __IO uint32_t * ) ( ( uint32_t ) ( ETH_MAC_ADDR_HBASE + MacAddr ) ) ) = tmpreg;\r
-       /* Calculate the selected MAC address low register */\r
-       tmpreg = ( ( uint32_t )Addr[ 3 ] << 24 ) | ( ( uint32_t )Addr[ 2 ] << 16 ) | ( ( uint32_t )Addr[ 1 ] << 8 ) | Addr[ 0 ];\r
-\r
-       /* Load the selected MAC address low register */\r
-       ( * ( __IO uint32_t * ) ( ( uint32_t ) ( ETH_MAC_ADDR_LBASE + MacAddr ) ) ) = tmpreg;\r
-}\r
-\r
-/**\r
-  * @brief  Enables the MAC transmission.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @retval None\r
-  */\r
-static void ETH_MACTransmissionEnable(ETH_HandleTypeDef *heth)\r
-{\r
-       uint32_t tmpreg = heth->Instance->MACCR | ETH_MACCR_TE;\r
-\r
-       prvWriteMACCR( heth, tmpreg );\r
-}\r
-\r
-/**\r
-  * @brief  Disables the MAC transmission.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @retval None\r
-  */\r
-static void ETH_MACTransmissionDisable(ETH_HandleTypeDef *heth)\r
-{\r
-       uint32_t tmpreg = heth->Instance->MACCR & ~( ETH_MACCR_TE );\r
-\r
-       prvWriteMACCR( heth, tmpreg );\r
-}\r
-\r
-/**\r
-  * @brief  Enables the MAC reception.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @retval None\r
-  */\r
-static void ETH_MACReceptionEnable(ETH_HandleTypeDef *heth)\r
-{\r
-       __IO uint32_t tmpreg = heth->Instance->MACCR | ETH_MACCR_RE;\r
-\r
-       prvWriteMACCR( heth, tmpreg );\r
-}\r
-\r
-/**\r
-  * @brief  Disables the MAC reception.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @retval None\r
-  */\r
-static void ETH_MACReceptionDisable(ETH_HandleTypeDef *heth)\r
-{\r
-       __IO uint32_t tmpreg = heth->Instance->MACCR & ~( ETH_MACCR_RE );\r
-\r
-       prvWriteMACCR( heth, tmpreg );\r
-}\r
-\r
-/**\r
-  * @brief  Enables the DMA transmission.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @retval None\r
-  */\r
-static void ETH_DMATransmissionEnable(ETH_HandleTypeDef *heth)\r
-{\r
-       /* Enable the DMA transmission */\r
-       __IO uint32_t tmpreg = heth->Instance->DMAOMR | ETH_DMAOMR_ST;\r
-\r
-       prvWriteDMAOMR( heth, tmpreg );\r
-}\r
-\r
-/**\r
-  * @brief  Disables the DMA transmission.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @retval None\r
-  */\r
-static void ETH_DMATransmissionDisable(ETH_HandleTypeDef *heth)\r
-{\r
-       /* Disable the DMA transmission */\r
-       __IO uint32_t tmpreg = heth->Instance->DMAOMR & ~( ETH_DMAOMR_ST );\r
-\r
-       prvWriteDMAOMR( heth, tmpreg );\r
-}\r
-\r
-/**\r
-  * @brief  Enables the DMA reception.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @retval None\r
-  */\r
-static void ETH_DMAReceptionEnable(ETH_HandleTypeDef *heth)\r
-{\r
-       /* Enable the DMA reception */\r
-       __IO uint32_t tmpreg = heth->Instance->DMAOMR | ETH_DMAOMR_SR;\r
-\r
-       prvWriteDMAOMR( heth, tmpreg );\r
-}\r
-\r
-/**\r
-  * @brief  Disables the DMA reception.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @retval None\r
-  */\r
-static void ETH_DMAReceptionDisable(ETH_HandleTypeDef *heth)\r
-{\r
-       /* Disable the DMA reception */\r
-       __IO uint32_t tmpreg = heth->Instance->DMAOMR & ~( ETH_DMAOMR_SR );\r
-\r
-       prvWriteDMAOMR( heth, tmpreg );\r
-}\r
-\r
-/**\r
-  * @brief  Clears the ETHERNET transmit FIFO.\r
-  * @param  heth: pointer to a ETH_HandleTypeDef structure that contains\r
-  *         the configuration information for ETHERNET module\r
-  * @retval None\r
-  */\r
-static void ETH_FlushTransmitFIFO(ETH_HandleTypeDef *heth)\r
-{\r
-       /* Set the Flush Transmit FIFO bit */\r
-       __IO uint32_t tmpreg = heth->Instance->DMAOMR | ETH_DMAOMR_FTF;\r
-\r
-       prvWriteDMAOMR( heth, tmpreg );\r
-}\r
-\r
-/**\r
-  * @}\r
-  */\r
-#endif /* stm_is_F2 != 0 || stm_is_F4 != 0 || stm_is_F7 */\r
-\r
-#endif /* HAL_ETH_MODULE_ENABLED */\r
-/**\r
-  * @}\r
-  */\r
-\r
-/**\r
-  * @}\r
-  */\r
-\r
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r
diff --git a/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/STM32Fxx/stm32fxx_hal_eth.h b/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/STM32Fxx/stm32fxx_hal_eth.h
deleted file mode 100644 (file)
index f911225..0000000
+++ /dev/null
@@ -1,2262 +0,0 @@
-/**\r
-  ******************************************************************************\r
-  * @file    stm32fxx_hal_eth.h\r
-  * @author  MCD Application Team\r
-  * @version V1.2.2\r
-  * @date    14-April-2017\r
-  * @brief   Header file of ETH HAL module.\r
-  ******************************************************************************\r
-  * @attention\r
-  *\r
-  * <h2><center>&copy; COPYRIGHT(c) 2017 STMicroelectronics</center></h2>\r
-  *\r
-  * Redistribution and use in source and binary forms, with or without modification,\r
-  * are permitted provided that the following conditions are met:\r
-  *   1. Redistributions of source code must retain the above copyright notice,\r
-  *      this list of conditions and the following disclaimer.\r
-  *   2. Redistributions in binary form must reproduce the above copyright notice,\r
-  *      this list of conditions and the following disclaimer in the documentation\r
-  *      and/or other materials provided with the distribution.\r
-  *   3. Neither the name of STMicroelectronics nor the names of its contributors\r
-  *      may be used to endorse or promote products derived from this software\r
-  *      without specific prior written permission.\r
-  *\r
-  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"\r
-  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
-  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r
-  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r
-  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
-  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r
-  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r
-  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r
-  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
-  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
-  *\r
-  ******************************************************************************\r
-  */\r
-\r
-/* Define to prevent recursive inclusion -------------------------------------*/\r
-#ifndef __STM32Fxx_HAL_ETH_H\r
-#define __STM32Fxx_HAL_ETH_H\r
-\r
-/* make sure that the original ETH headers files won't be included after this. */\r
-#define __STM32F2xx_HAL_ETH_H\r
-#define __STM32F4xx_HAL_ETH_H\r
-#define __STM32F7xx_HAL_ETH_H\r
-\r
-#if defined(STM32F7xx)\r
-       #include "stm32f7xx_hal_def.h"\r
-#elif defined(STM32F407xx) || defined(STM32F417xx) || defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\r
-       #include "stm32f4xx_hal_def.h"\r
-#elif defined(STM32F2xx)\r
-       #include "stm32f2xx_hal_def.h"\r
-#endif\r
-\r
-#ifdef __cplusplus\r
- extern "C" {\r
-#endif\r
-\r
-/** @addtogroup STM32Fxx_HAL_Driver\r
-  * @{\r
-  */\r
-\r
-/** @addtogroup ETH\r
-  * @{\r
-  */\r
-\r
-/** @addtogroup ETH_Private_Macros\r
-  * @{\r
-  */\r
-#define IS_ETH_PHY_ADDRESS(ADDRESS) ((ADDRESS) <= 0x20)\r
-#define IS_ETH_AUTONEGOTIATION(CMD) (((CMD) == ETH_AUTONEGOTIATION_ENABLE) || \\r
-                                     ((CMD) == ETH_AUTONEGOTIATION_DISABLE))\r
-#define IS_ETH_SPEED(SPEED) (((SPEED) == ETH_SPEED_10M) || \\r
-                             ((SPEED) == ETH_SPEED_100M))\r
-#define IS_ETH_DUPLEX_MODE(MODE)  (((MODE) == ETH_MODE_FULLDUPLEX) || \\r
-                                  ((MODE) == ETH_MODE_HALFDUPLEX))\r
-#define IS_ETH_DUPLEX_MODE(MODE)  (((MODE) == ETH_MODE_FULLDUPLEX) || \\r
-                                  ((MODE) == ETH_MODE_HALFDUPLEX))\r
-#define IS_ETH_RX_MODE(MODE)    (((MODE) == ETH_RXPOLLING_MODE) || \\r
-                                 ((MODE) == ETH_RXINTERRUPT_MODE))\r
-#define IS_ETH_RX_MODE(MODE)    (((MODE) == ETH_RXPOLLING_MODE) || \\r
-                                 ((MODE) == ETH_RXINTERRUPT_MODE))\r
-#define IS_ETH_RX_MODE(MODE)    (((MODE) == ETH_RXPOLLING_MODE) || \\r
-                                 ((MODE) == ETH_RXINTERRUPT_MODE))\r
-#define IS_ETH_CHECKSUM_MODE(MODE)    (((MODE) == ETH_CHECKSUM_BY_HARDWARE) || \\r
-                                      ((MODE) == ETH_CHECKSUM_BY_SOFTWARE))\r
-#define IS_ETH_MEDIA_INTERFACE(MODE)         (((MODE) == ETH_MEDIA_INTERFACE_MII) || \\r
-                                              ((MODE) == ETH_MEDIA_INTERFACE_RMII))\r
-#define IS_ETH_WATCHDOG(CMD) (((CMD) == ETH_WATCHDOG_ENABLE) || \\r
-                              ((CMD) == ETH_WATCHDOG_DISABLE))\r
-#define IS_ETH_JABBER(CMD) (((CMD) == ETH_JABBER_ENABLE) || \\r
-                            ((CMD) == ETH_JABBER_DISABLE))\r
-#define IS_ETH_INTER_FRAME_GAP(GAP) (((GAP) == ETH_INTERFRAMEGAP_96BIT) || \\r
-                                     ((GAP) == ETH_INTERFRAMEGAP_88BIT) || \\r
-                                     ((GAP) == ETH_INTERFRAMEGAP_80BIT) || \\r
-                                     ((GAP) == ETH_INTERFRAMEGAP_72BIT) || \\r
-                                     ((GAP) == ETH_INTERFRAMEGAP_64BIT) || \\r
-                                     ((GAP) == ETH_INTERFRAMEGAP_56BIT) || \\r
-                                     ((GAP) == ETH_INTERFRAMEGAP_48BIT) || \\r
-                                     ((GAP) == ETH_INTERFRAMEGAP_40BIT))\r
-#define IS_ETH_CARRIER_SENSE(CMD) (((CMD) == ETH_CARRIERSENCE_ENABLE) || \\r
-                                   ((CMD) == ETH_CARRIERSENCE_DISABLE))\r
-#define IS_ETH_RECEIVE_OWN(CMD) (((CMD) == ETH_RECEIVEOWN_ENABLE) || \\r
-                                 ((CMD) == ETH_RECEIVEOWN_DISABLE))\r
-#define IS_ETH_LOOPBACK_MODE(CMD) (((CMD) == ETH_LOOPBACKMODE_ENABLE) || \\r
-                                   ((CMD) == ETH_LOOPBACKMODE_DISABLE))\r
-#define IS_ETH_CHECKSUM_OFFLOAD(CMD) (((CMD) == ETH_CHECKSUMOFFLAOD_ENABLE) || \\r
-                                      ((CMD) == ETH_CHECKSUMOFFLAOD_DISABLE))\r
-#define IS_ETH_RETRY_TRANSMISSION(CMD) (((CMD) == ETH_RETRYTRANSMISSION_ENABLE) || \\r
-                                        ((CMD) == ETH_RETRYTRANSMISSION_DISABLE))\r
-#define IS_ETH_AUTOMATIC_PADCRC_STRIP(CMD) (((CMD) == ETH_AUTOMATICPADCRCSTRIP_ENABLE) || \\r
-                                            ((CMD) == ETH_AUTOMATICPADCRCSTRIP_DISABLE))\r
-#define IS_ETH_BACKOFF_LIMIT(LIMIT) (((LIMIT) == ETH_BACKOFFLIMIT_10) || \\r
-                                     ((LIMIT) == ETH_BACKOFFLIMIT_8) || \\r
-                                     ((LIMIT) == ETH_BACKOFFLIMIT_4) || \\r
-                                     ((LIMIT) == ETH_BACKOFFLIMIT_1))\r
-#define IS_ETH_DEFERRAL_CHECK(CMD) (((CMD) == ETH_DEFFERRALCHECK_ENABLE) || \\r
-                                    ((CMD) == ETH_DEFFERRALCHECK_DISABLE))\r
-#define IS_ETH_RECEIVE_ALL(CMD) (((CMD) == ETH_RECEIVEALL_ENABLE) || \\r
-                                 ((CMD) == ETH_RECEIVEAll_DISABLE))\r
-#define IS_ETH_SOURCE_ADDR_FILTER(CMD) (((CMD) == ETH_SOURCEADDRFILTER_NORMAL_ENABLE) || \\r
-                                        ((CMD) == ETH_SOURCEADDRFILTER_INVERSE_ENABLE) || \\r
-                                        ((CMD) == ETH_SOURCEADDRFILTER_DISABLE))\r
-#define IS_ETH_CONTROL_FRAMES(PASS) (((PASS) == ETH_PASSCONTROLFRAMES_BLOCKALL) || \\r
-                                     ((PASS) == ETH_PASSCONTROLFRAMES_FORWARDALL) || \\r
-                                     ((PASS) == ETH_PASSCONTROLFRAMES_FORWARDPASSEDADDRFILTER))\r
-#define IS_ETH_BROADCAST_FRAMES_RECEPTION(CMD) (((CMD) == ETH_BROADCASTFRAMESRECEPTION_ENABLE) || \\r
-                                                ((CMD) == ETH_BROADCASTFRAMESRECEPTION_DISABLE))\r
-#define IS_ETH_DESTINATION_ADDR_FILTER(FILTER) (((FILTER) == ETH_DESTINATIONADDRFILTER_NORMAL) || \\r
-                                                ((FILTER) == ETH_DESTINATIONADDRFILTER_INVERSE))\r
-#define IS_ETH_PROMISCUOUS_MODE(CMD) (((CMD) == ETH_PROMISCUOUS_MODE_ENABLE) || \\r
-                                      ((CMD) == ETH_PROMISCUOUS_MODE_DISABLE))\r
-#define IS_ETH_MULTICAST_FRAMES_FILTER(FILTER) (((FILTER) == ETH_MULTICASTFRAMESFILTER_PERFECTHASHTABLE) || \\r
-                                                ((FILTER) == ETH_MULTICASTFRAMESFILTER_HASHTABLE) || \\r
-                                                ((FILTER) == ETH_MULTICASTFRAMESFILTER_PERFECT) || \\r
-                                                ((FILTER) == ETH_MULTICASTFRAMESFILTER_NONE))\r
-#define IS_ETH_UNICAST_FRAMES_FILTER(FILTER) (((FILTER) == ETH_UNICASTFRAMESFILTER_PERFECTHASHTABLE) || \\r
-                                              ((FILTER) == ETH_UNICASTFRAMESFILTER_HASHTABLE) || \\r
-                                              ((FILTER) == ETH_UNICASTFRAMESFILTER_PERFECT))\r
-#define IS_ETH_PAUSE_TIME(TIME) ((TIME) <= 0xFFFF)\r
-#define IS_ETH_ZEROQUANTA_PAUSE(CMD)   (((CMD) == ETH_ZEROQUANTAPAUSE_ENABLE) || \\r
-                                        ((CMD) == ETH_ZEROQUANTAPAUSE_DISABLE))\r
-#define IS_ETH_PAUSE_LOW_THRESHOLD(THRESHOLD) (((THRESHOLD) == ETH_PAUSELOWTHRESHOLD_MINUS4) || \\r
-                                               ((THRESHOLD) == ETH_PAUSELOWTHRESHOLD_MINUS28) || \\r
-                                               ((THRESHOLD) == ETH_PAUSELOWTHRESHOLD_MINUS144) || \\r
-                                               ((THRESHOLD) == ETH_PAUSELOWTHRESHOLD_MINUS256))\r
-#define IS_ETH_UNICAST_PAUSE_FRAME_DETECT(CMD) (((CMD) == ETH_UNICASTPAUSEFRAMEDETECT_ENABLE) || \\r
-                                                ((CMD) == ETH_UNICASTPAUSEFRAMEDETECT_DISABLE))\r
-#define IS_ETH_RECEIVE_FLOWCONTROL(CMD) (((CMD) == ETH_RECEIVEFLOWCONTROL_ENABLE) || \\r
-                                         ((CMD) == ETH_RECEIVEFLOWCONTROL_DISABLE))\r
-#define IS_ETH_TRANSMIT_FLOWCONTROL(CMD) (((CMD) == ETH_TRANSMITFLOWCONTROL_ENABLE) || \\r
-                                          ((CMD) == ETH_TRANSMITFLOWCONTROL_DISABLE))\r
-#define IS_ETH_VLAN_TAG_COMPARISON(COMPARISON) (((COMPARISON) == ETH_VLANTAGCOMPARISON_12BIT) || \\r
-                                                ((COMPARISON) == ETH_VLANTAGCOMPARISON_16BIT))\r
-#define IS_ETH_VLAN_TAG_IDENTIFIER(IDENTIFIER) ((IDENTIFIER) <= 0xFFFF)\r
-#define IS_ETH_MAC_ADDRESS0123(ADDRESS) (((ADDRESS) == ETH_MAC_ADDRESS0) || \\r
-                                         ((ADDRESS) == ETH_MAC_ADDRESS1) || \\r
-                                         ((ADDRESS) == ETH_MAC_ADDRESS2) || \\r
-                                         ((ADDRESS) == ETH_MAC_ADDRESS3))\r
-#define IS_ETH_MAC_ADDRESS123(ADDRESS) (((ADDRESS) == ETH_MAC_ADDRESS1) || \\r
-                                        ((ADDRESS) == ETH_MAC_ADDRESS2) || \\r
-                                        ((ADDRESS) == ETH_MAC_ADDRESS3))\r
-#define IS_ETH_MAC_ADDRESS_FILTER(FILTER) (((FILTER) == ETH_MAC_ADDRESSFILTER_SA) || \\r
-                                           ((FILTER) == ETH_MAC_ADDRESSFILTER_DA))\r
-#define IS_ETH_MAC_ADDRESS_MASK(MASK) (((MASK) == ETH_MAC_ADDRESSMASK_BYTE6) || \\r
-                                       ((MASK) == ETH_MAC_ADDRESSMASK_BYTE5) || \\r
-                                       ((MASK) == ETH_MAC_ADDRESSMASK_BYTE4) || \\r
-                                       ((MASK) == ETH_MAC_ADDRESSMASK_BYTE3) || \\r
-                                       ((MASK) == ETH_MAC_ADDRESSMASK_BYTE2) || \\r
-                                       ((MASK) == ETH_MAC_ADDRESSMASK_BYTE1))\r
-#define IS_ETH_DROP_TCPIP_CHECKSUM_FRAME(CMD) (((CMD) == ETH_DROPTCPIPCHECKSUMERRORFRAME_ENABLE) || \\r
-                                               ((CMD) == ETH_DROPTCPIPCHECKSUMERRORFRAME_DISABLE))\r
-#define IS_ETH_RECEIVE_STORE_FORWARD(CMD) (((CMD) == ETH_RECEIVESTOREFORWARD_ENABLE) || \\r
-                                           ((CMD) == ETH_RECEIVESTOREFORWARD_DISABLE))\r
-#define IS_ETH_FLUSH_RECEIVE_FRAME(CMD) (((CMD) == ETH_FLUSHRECEIVEDFRAME_ENABLE) || \\r
-                                         ((CMD) == ETH_FLUSHRECEIVEDFRAME_DISABLE))\r
-#define IS_ETH_TRANSMIT_STORE_FORWARD(CMD) (((CMD) == ETH_TRANSMITSTOREFORWARD_ENABLE) || \\r
-                                            ((CMD) == ETH_TRANSMITSTOREFORWARD_DISABLE))\r
-#define IS_ETH_TRANSMIT_THRESHOLD_CONTROL(THRESHOLD) (((THRESHOLD) == ETH_TRANSMITTHRESHOLDCONTROL_64BYTES) || \\r
-                                                      ((THRESHOLD) == ETH_TRANSMITTHRESHOLDCONTROL_128BYTES) || \\r
-                                                      ((THRESHOLD) == ETH_TRANSMITTHRESHOLDCONTROL_192BYTES) || \\r
-                                                      ((THRESHOLD) == ETH_TRANSMITTHRESHOLDCONTROL_256BYTES) || \\r
-                                                      ((THRESHOLD) == ETH_TRANSMITTHRESHOLDCONTROL_40BYTES) || \\r
-                                                      ((THRESHOLD) == ETH_TRANSMITTHRESHOLDCONTROL_32BYTES) || \\r
-                                                      ((THRESHOLD) == ETH_TRANSMITTHRESHOLDCONTROL_24BYTES) || \\r
-                                                      ((THRESHOLD) == ETH_TRANSMITTHRESHOLDCONTROL_16BYTES))\r
-#define IS_ETH_FORWARD_ERROR_FRAMES(CMD) (((CMD) == ETH_FORWARDERRORFRAMES_ENABLE) || \\r
-                                          ((CMD) == ETH_FORWARDERRORFRAMES_DISABLE))\r
-#define IS_ETH_FORWARD_UNDERSIZED_GOOD_FRAMES(CMD) (((CMD) == ETH_FORWARDUNDERSIZEDGOODFRAMES_ENABLE) || \\r
-                                                    ((CMD) == ETH_FORWARDUNDERSIZEDGOODFRAMES_DISABLE))\r
-#define IS_ETH_RECEIVE_THRESHOLD_CONTROL(THRESHOLD) (((THRESHOLD) == ETH_RECEIVEDTHRESHOLDCONTROL_64BYTES) || \\r
-                                                     ((THRESHOLD) == ETH_RECEIVEDTHRESHOLDCONTROL_32BYTES) || \\r
-                                                     ((THRESHOLD) == ETH_RECEIVEDTHRESHOLDCONTROL_96BYTES) || \\r
-                                                     ((THRESHOLD) == ETH_RECEIVEDTHRESHOLDCONTROL_128BYTES))\r
-#define IS_ETH_SECOND_FRAME_OPERATE(CMD) (((CMD) == ETH_SECONDFRAMEOPERARTE_ENABLE) || \\r
-                                          ((CMD) == ETH_SECONDFRAMEOPERARTE_DISABLE))\r
-#define IS_ETH_ADDRESS_ALIGNED_BEATS(CMD) (((CMD) == ETH_ADDRESSALIGNEDBEATS_ENABLE) || \\r
-                                           ((CMD) == ETH_ADDRESSALIGNEDBEATS_DISABLE))\r
-#define IS_ETH_FIXED_BURST(CMD) (((CMD) == ETH_FIXEDBURST_ENABLE) || \\r
-                                 ((CMD) == ETH_FIXEDBURST_DISABLE))\r
-#define IS_ETH_RXDMA_BURST_LENGTH(LENGTH) (((LENGTH) == ETH_RXDMABURSTLENGTH_1BEAT) || \\r
-                                           ((LENGTH) == ETH_RXDMABURSTLENGTH_2BEAT) || \\r
-                                           ((LENGTH) == ETH_RXDMABURSTLENGTH_4BEAT) || \\r
-                                           ((LENGTH) == ETH_RXDMABURSTLENGTH_8BEAT) || \\r
-                                           ((LENGTH) == ETH_RXDMABURSTLENGTH_16BEAT) || \\r
-                                           ((LENGTH) == ETH_RXDMABURSTLENGTH_32BEAT) || \\r
-                                           ((LENGTH) == ETH_RXDMABURSTLENGTH_4XPBL_4BEAT) || \\r
-                                           ((LENGTH) == ETH_RXDMABURSTLENGTH_4XPBL_8BEAT) || \\r
-                                           ((LENGTH) == ETH_RXDMABURSTLENGTH_4XPBL_16BEAT) || \\r
-                                           ((LENGTH) == ETH_RXDMABURSTLENGTH_4XPBL_32BEAT) || \\r
-                                           ((LENGTH) == ETH_RXDMABURSTLENGTH_4XPBL_64BEAT) || \\r
-                                           ((LENGTH) == ETH_RXDMABURSTLENGTH_4XPBL_128BEAT))\r
-#define IS_ETH_TXDMA_BURST_LENGTH(LENGTH) (((LENGTH) == ETH_TXDMABURSTLENGTH_1BEAT) || \\r
-                                           ((LENGTH) == ETH_TXDMABURSTLENGTH_2BEAT) || \\r
-                                           ((LENGTH) == ETH_TXDMABURSTLENGTH_4BEAT) || \\r
-                                           ((LENGTH) == ETH_TXDMABURSTLENGTH_8BEAT) || \\r
-                                           ((LENGTH) == ETH_TXDMABURSTLENGTH_16BEAT) || \\r
-                                           ((LENGTH) == ETH_TXDMABURSTLENGTH_32BEAT) || \\r
-                                           ((LENGTH) == ETH_TXDMABURSTLENGTH_4XPBL_4BEAT) || \\r
-                                           ((LENGTH) == ETH_TXDMABURSTLENGTH_4XPBL_8BEAT) || \\r
-                                           ((LENGTH) == ETH_TXDMABURSTLENGTH_4XPBL_16BEAT) || \\r
-                                           ((LENGTH) == ETH_TXDMABURSTLENGTH_4XPBL_32BEAT) || \\r
-                                           ((LENGTH) == ETH_TXDMABURSTLENGTH_4XPBL_64BEAT) || \\r
-                                           ((LENGTH) == ETH_TXDMABURSTLENGTH_4XPBL_128BEAT))\r
-#define IS_ETH_DMA_DESC_SKIP_LENGTH(LENGTH) ((LENGTH) <= 0x1F)\r
-#define IS_ETH_DMA_ARBITRATION_ROUNDROBIN_RXTX(RATIO) (((RATIO) == ETH_DMAARBITRATION_ROUNDROBIN_RXTX_1_1) || \\r
-                                                       ((RATIO) == ETH_DMAARBITRATION_ROUNDROBIN_RXTX_2_1) || \\r
-                                                       ((RATIO) == ETH_DMAARBITRATION_ROUNDROBIN_RXTX_3_1) || \\r
-                                                       ((RATIO) == ETH_DMAARBITRATION_ROUNDROBIN_RXTX_4_1) || \\r
-                                                       ((RATIO) == ETH_DMAARBITRATION_RXPRIORTX))\r
-#define IS_ETH_DMATXDESC_GET_FLAG(FLAG) (((FLAG) == ETH_DMATXDESC_OWN) || \\r
-                                         ((FLAG) == ETH_DMATXDESC_IC) || \\r
-                                         ((FLAG) == ETH_DMATXDESC_LS) || \\r
-                                         ((FLAG) == ETH_DMATXDESC_FS) || \\r
-                                         ((FLAG) == ETH_DMATXDESC_DC) || \\r
-                                         ((FLAG) == ETH_DMATXDESC_DP) || \\r
-                                         ((FLAG) == ETH_DMATXDESC_TTSE) || \\r
-                                         ((FLAG) == ETH_DMATXDESC_TER) || \\r
-                                         ((FLAG) == ETH_DMATXDESC_TCH) || \\r
-                                         ((FLAG) == ETH_DMATXDESC_TTSS) || \\r
-                                         ((FLAG) == ETH_DMATXDESC_IHE) || \\r
-                                         ((FLAG) == ETH_DMATXDESC_ES) || \\r
-                                         ((FLAG) == ETH_DMATXDESC_JT) || \\r
-                                         ((FLAG) == ETH_DMATXDESC_FF) || \\r
-                                         ((FLAG) == ETH_DMATXDESC_PCE) || \\r
-                                         ((FLAG) == ETH_DMATXDESC_LCA) || \\r
-                                         ((FLAG) == ETH_DMATXDESC_NC) || \\r
-                                         ((FLAG) == ETH_DMATXDESC_LCO) || \\r
-                                         ((FLAG) == ETH_DMATXDESC_EC) || \\r
-                                         ((FLAG) == ETH_DMATXDESC_VF) || \\r
-                                         ((FLAG) == ETH_DMATXDESC_CC) || \\r
-                                         ((FLAG) == ETH_DMATXDESC_ED) || \\r
-                                         ((FLAG) == ETH_DMATXDESC_UF) || \\r
-                                         ((FLAG) == ETH_DMATXDESC_DB))\r
-#define IS_ETH_DMA_TXDESC_SEGMENT(SEGMENT) (((SEGMENT) == ETH_DMATXDESC_LASTSEGMENTS) || \\r
-                                            ((SEGMENT) == ETH_DMATXDESC_FIRSTSEGMENT))\r
-#define IS_ETH_DMA_TXDESC_CHECKSUM(CHECKSUM) (((CHECKSUM) == ETH_DMATXDESC_CHECKSUMBYPASS) || \\r
-                                              ((CHECKSUM) == ETH_DMATXDESC_CHECKSUMIPV4HEADER) || \\r
-                                              ((CHECKSUM) == ETH_DMATXDESC_CHECKSUMTCPUDPICMPSEGMENT) || \\r
-                                              ((CHECKSUM) == ETH_DMATXDESC_CHECKSUMTCPUDPICMPFULL))\r
-#define IS_ETH_DMATXDESC_BUFFER_SIZE(SIZE) ((SIZE) <= 0x1FFF)\r
-#define IS_ETH_DMARXDESC_GET_FLAG(FLAG) (((FLAG) == ETH_DMARXDESC_OWN) || \\r
-                                         ((FLAG) == ETH_DMARXDESC_AFM) || \\r
-                                         ((FLAG) == ETH_DMARXDESC_ES) || \\r
-                                         ((FLAG) == ETH_DMARXDESC_DE) || \\r
-                                         ((FLAG) == ETH_DMARXDESC_SAF) || \\r
-                                         ((FLAG) == ETH_DMARXDESC_LE) || \\r
-                                         ((FLAG) == ETH_DMARXDESC_OE) || \\r
-                                         ((FLAG) == ETH_DMARXDESC_VLAN) || \\r
-                                         ((FLAG) == ETH_DMARXDESC_FS) || \\r
-                                         ((FLAG) == ETH_DMARXDESC_LS) || \\r
-                                         ((FLAG) == ETH_DMARXDESC_IPV4HCE) || \\r
-                                         ((FLAG) == ETH_DMARXDESC_LC) || \\r
-                                         ((FLAG) == ETH_DMARXDESC_FT) || \\r
-                                         ((FLAG) == ETH_DMARXDESC_RWT) || \\r
-                                         ((FLAG) == ETH_DMARXDESC_RE) || \\r
-                                         ((FLAG) == ETH_DMARXDESC_DBE) || \\r
-                                         ((FLAG) == ETH_DMARXDESC_CE) || \\r
-                                         ((FLAG) == ETH_DMARXDESC_MAMPCE))\r
-#define IS_ETH_DMA_RXDESC_BUFFER(BUFFER) (((BUFFER) == ETH_DMARXDESC_BUFFER1) || \\r
-                                          ((BUFFER) == ETH_DMARXDESC_BUFFER2))\r
-#define IS_ETH_PMT_GET_FLAG(FLAG) (((FLAG) == ETH_PMT_FLAG_WUFR) || \\r
-                                   ((FLAG) == ETH_PMT_FLAG_MPR))\r
-#define IS_ETH_DMA_FLAG(FLAG) ((((FLAG) & (uint32_t)0xC7FE1800) == 0x00) && ((FLAG) != 0x00))\r
-#define IS_ETH_DMA_GET_FLAG(FLAG) (((FLAG) == ETH_DMA_FLAG_TST) || ((FLAG) == ETH_DMA_FLAG_PMT) || \\r
-                                   ((FLAG) == ETH_DMA_FLAG_MMC) || ((FLAG) == ETH_DMA_FLAG_DATATRANSFERERROR) || \\r
-                                   ((FLAG) == ETH_DMA_FLAG_READWRITEERROR) || ((FLAG) == ETH_DMA_FLAG_ACCESSERROR) || \\r
-                                   ((FLAG) == ETH_DMA_FLAG_NIS) || ((FLAG) == ETH_DMA_FLAG_AIS) || \\r
-                                   ((FLAG) == ETH_DMA_FLAG_ER) || ((FLAG) == ETH_DMA_FLAG_FBE) || \\r
-                                   ((FLAG) == ETH_DMA_FLAG_ET) || ((FLAG) == ETH_DMA_FLAG_RWT) || \\r
-                                   ((FLAG) == ETH_DMA_FLAG_RPS) || ((FLAG) == ETH_DMA_FLAG_RBU) || \\r
-                                   ((FLAG) == ETH_DMA_FLAG_R) || ((FLAG) == ETH_DMA_FLAG_TU) || \\r
-                                   ((FLAG) == ETH_DMA_FLAG_RO) || ((FLAG) == ETH_DMA_FLAG_TJT) || \\r
-                                   ((FLAG) == ETH_DMA_FLAG_TBU) || ((FLAG) == ETH_DMA_FLAG_TPS) || \\r
-                                   ((FLAG) == ETH_DMA_FLAG_T))\r
-#define IS_ETH_MAC_IT(IT) ((((IT) & (uint32_t)0xFFFFFDF1) == 0x00) && ((IT) != 0x00))\r
-#define IS_ETH_MAC_GET_IT(IT) (((IT) == ETH_MAC_IT_TST) || ((IT) == ETH_MAC_IT_MMCT) || \\r
-                               ((IT) == ETH_MAC_IT_MMCR) || ((IT) == ETH_MAC_IT_MMC) || \\r
-                               ((IT) == ETH_MAC_IT_PMT))\r
-#define IS_ETH_MAC_GET_FLAG(FLAG) (((FLAG) == ETH_MAC_FLAG_TST) || ((FLAG) == ETH_MAC_FLAG_MMCT) || \\r
-                                   ((FLAG) == ETH_MAC_FLAG_MMCR) || ((FLAG) == ETH_MAC_FLAG_MMC) || \\r
-                                   ((FLAG) == ETH_MAC_FLAG_PMT))\r
-#define IS_ETH_DMA_IT(IT) ((((IT) & (uint32_t)0xC7FE1800) == 0x00) && ((IT) != 0x00))\r
-#define IS_ETH_DMA_GET_IT(IT) (((IT) == ETH_DMA_IT_TST) || ((IT) == ETH_DMA_IT_PMT) || \\r
-                               ((IT) == ETH_DMA_IT_MMC) || ((IT) == ETH_DMA_IT_NIS) || \\r
-                               ((IT) == ETH_DMA_IT_AIS) || ((IT) == ETH_DMA_IT_ER) || \\r
-                               ((IT) == ETH_DMA_IT_FBE) || ((IT) == ETH_DMA_IT_ET) || \\r
-                               ((IT) == ETH_DMA_IT_RWT) || ((IT) == ETH_DMA_IT_RPS) || \\r
-                               ((IT) == ETH_DMA_IT_RBU) || ((IT) == ETH_DMA_IT_R) || \\r
-                               ((IT) == ETH_DMA_IT_TU) || ((IT) == ETH_DMA_IT_RO) || \\r
-                               ((IT) == ETH_DMA_IT_TJT) || ((IT) == ETH_DMA_IT_TBU) || \\r
-                               ((IT) == ETH_DMA_IT_TPS) || ((IT) == ETH_DMA_IT_T))\r
-#define IS_ETH_DMA_GET_OVERFLOW(OVERFLOW) (((OVERFLOW) == ETH_DMA_OVERFLOW_RXFIFOCOUNTER) || \\r
-                                           ((OVERFLOW) == ETH_DMA_OVERFLOW_MISSEDFRAMECOUNTER))\r
-#define IS_ETH_MMC_IT(IT) (((((IT) & (uint32_t)0xFFDF3FFF) == 0x00) || (((IT) & (uint32_t)0xEFFDFF9F) == 0x00)) && \\r
-                           ((IT) != 0x00))\r
-#define IS_ETH_MMC_GET_IT(IT) (((IT) == ETH_MMC_IT_TGF) || ((IT) == ETH_MMC_IT_TGFMSC) || \\r
-                               ((IT) == ETH_MMC_IT_TGFSC) || ((IT) == ETH_MMC_IT_RGUF) || \\r
-                               ((IT) == ETH_MMC_IT_RFAE) || ((IT) == ETH_MMC_IT_RFCE))\r
-#define IS_ETH_ENHANCED_DESCRIPTOR_FORMAT(CMD) (((CMD) == ETH_DMAENHANCEDDESCRIPTOR_ENABLE) || \\r
-                                                ((CMD) == ETH_DMAENHANCEDDESCRIPTOR_DISABLE))\r
-\r
-\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @addtogroup ETH_Private_Defines\r
-  * @{\r
-  */\r
-/* Delay to wait when writing to some Ethernet registers */\r
-#define ETH_REG_WRITE_DELAY ((uint32_t)0x00000001U)\r
-\r
-/* Ethernet Errors */\r
-#define  ETH_SUCCESS            ((uint32_t)0U)\r
-#define  ETH_ERROR              ((uint32_t)1U)\r
-\r
-/* Ethernet DMA Tx descriptors Collision Count Shift */\r
-#define  ETH_DMATXDESC_COLLISION_COUNTSHIFT         ((uint32_t)3U)\r
-\r
-/* Ethernet DMA Tx descriptors Buffer2 Size Shift */\r
-#define  ETH_DMATXDESC_BUFFER2_SIZESHIFT           ((uint32_t)16U)\r
-\r
-/* Ethernet DMA Rx descriptors Frame Length Shift */\r
-#define  ETH_DMARXDESC_FRAME_LENGTHSHIFT           ((uint32_t)16U)\r
-\r
-/* Ethernet DMA Rx descriptors Buffer2 Size Shift */\r
-#define  ETH_DMARXDESC_BUFFER2_SIZESHIFT           ((uint32_t)16U)\r
-\r
-/* Ethernet DMA Rx descriptors Frame length Shift */\r
-#define  ETH_DMARXDESC_FRAMELENGTHSHIFT            ((uint32_t)16U)\r
-\r
-/* Ethernet MAC address offsets */\r
-#define ETH_MAC_ADDR_HBASE    (uint32_t)(ETH_MAC_BASE + (uint32_t)0x40U)  /* Ethernet MAC address high offset */\r
-#define ETH_MAC_ADDR_LBASE    (uint32_t)(ETH_MAC_BASE + (uint32_t)0x44U)  /* Ethernet MAC address low offset */\r
-\r
-/* Ethernet MACMIIAR register Mask */\r
-#define ETH_MACMIIAR_CR_MASK    ((uint32_t)0xFFFFFFE3U)\r
-\r
-/* Ethernet MACCR register Mask */\r
-#define ETH_MACCR_CLEAR_MASK    ((uint32_t)0xFF20810FU)\r
-\r
-/* Ethernet MACFCR register Mask */\r
-#define ETH_MACFCR_CLEAR_MASK   ((uint32_t)0x0000FF41U)\r
-\r
-/* Ethernet DMAOMR register Mask */\r
-#define ETH_DMAOMR_CLEAR_MASK   ((uint32_t)0xF8DE3F23U)\r
-\r
-/* Ethernet Remote Wake-up frame register length */\r
-#define ETH_WAKEUP_REGISTER_LENGTH      8U\r
-\r
-/* Ethernet Missed frames counter Shift */\r
-#define  ETH_DMA_RX_OVERFLOW_MISSEDFRAMES_COUNTERSHIFT     17U\r
- /**\r
-  * @}\r
-  */\r
-\r
-#ifdef _lint\r
-       #ifdef __IO\r
-               #undef __IO\r
-       #endif\r
-       #define __IO\r
-\r
-       #ifdef ETH_TypeDef\r
-               #undef ETH_TypeDef\r
-       #endif\r
-       #define ETH_TypeDef     void\r
-\r
-       #ifdef HAL_LockTypeDef\r
-               #undef HAL_LockTypeDef\r
-       #endif\r
-       #define HAL_LockTypeDef unsigned\r
-\r
-       #ifdef ETH_RX_BUF_SIZE\r
-               #undef ETH_RX_BUF_SIZE\r
-       #endif\r
-       #define ETH_RX_BUF_SIZE 1536\r
-\r
-       #ifdef ETH_TX_BUF_SIZE\r
-               #undef ETH_TX_BUF_SIZE\r
-       #endif\r
-       #define ETH_TX_BUF_SIZE 1536\r
-#endif\r
-\r
-/* Exported types ------------------------------------------------------------*/\r
-/** @defgroup ETH_Exported_Types ETH Exported Types\r
-  * @{\r
-  */\r
-\r
-/**\r
-  * @brief  HAL State structures definition\r
-  */\r
-typedef enum\r
-{\r
-  HAL_ETH_STATE_RESET             = 0x00U,    /*!< Peripheral not yet Initialized or disabled         */\r
-  HAL_ETH_STATE_READY             = 0x01U,    /*!< Peripheral Initialized and ready for use           */\r
-  HAL_ETH_STATE_BUSY              = 0x02U,    /*!< an internal process is ongoing                     */\r
-  HAL_ETH_STATE_BUSY_TX           = 0x12U,    /*!< Data Transmission process is ongoing               */\r
-  HAL_ETH_STATE_BUSY_RX           = 0x22U,    /*!< Data Reception process is ongoing                  */\r
-  HAL_ETH_STATE_BUSY_TX_RX        = 0x32U,    /*!< Data Transmission and Reception process is ongoing */\r
-  HAL_ETH_STATE_BUSY_WR           = 0x42U,    /*!< Write process is ongoing                           */\r
-  HAL_ETH_STATE_BUSY_RD           = 0x82U,    /*!< Read process is ongoing                            */\r
-  HAL_ETH_STATE_TIMEOUT           = 0x03U,    /*!< Timeout state                                      */\r
-  HAL_ETH_STATE_ERROR             = 0x04U     /*!< Reception process is ongoing                       */\r
-}HAL_ETH_StateTypeDef;\r
-\r
-/**\r
-  * @brief  ETH Init Structure definition\r
-  */\r
-\r
-typedef struct\r
-{\r
-  uint32_t             AutoNegotiation;           /*!< Selects or not the AutoNegotiation mode for the external PHY\r
-                                                           The AutoNegotiation allows an automatic setting of the Speed (10/100Mbps)\r
-                                                           and the mode (half/full-duplex).\r
-                                                           This parameter can be a value of @ref ETH_AutoNegotiation */\r
-\r
-  uint32_t             Speed;                     /*!< Sets the Ethernet speed: 10/100 Mbps.\r
-                                                           This parameter can be a value of @ref ETH_Speed */\r
-\r
-  uint32_t             DuplexMode;                /*!< Selects the MAC duplex mode: Half-Duplex or Full-Duplex mode\r
-                                                           This parameter can be a value of @ref ETH_Duplex_Mode */\r
-\r
-  uint16_t             PhyAddress;                /*!< Ethernet PHY address.\r
-                                                           This parameter must be a number between Min_Data = 0 and Max_Data = 32 */\r
-\r
-  uint8_t             *MACAddr;                   /*!< MAC Address of used Hardware: must be pointer on an array of 6 bytes */\r
-\r
-  uint32_t             RxMode;                    /*!< Selects the Ethernet Rx mode: Polling mode, Interrupt mode.\r
-                                                           This parameter can be a value of @ref ETH_Rx_Mode */\r
-\r
-  uint32_t             ChecksumMode;              /*!< Selects if the checksum is check by hardware or by software.\r
-                                                         This parameter can be a value of @ref ETH_Checksum_Mode */\r
-\r
-  uint32_t             MediaInterface    ;               /*!< Selects the media-independent interface or the reduced media-independent interface.\r
-                                                         This parameter can be a value of @ref ETH_Media_Interface */\r
-\r
-} ETH_InitTypeDef;\r
-\r
-\r
- /**\r
-  * @brief  ETH MAC Configuration Structure definition\r
-  */\r
-\r
-typedef struct\r
-{\r
-  uint32_t             Watchdog;                  /*!< Selects or not the Watchdog timer\r
-                                                           When enabled, the MAC allows no more then 2048 bytes to be received.\r
-                                                           When disabled, the MAC can receive up to 16384 bytes.\r
-                                                           This parameter can be a value of @ref ETH_Watchdog */\r
-\r
-  uint32_t             Jabber;                    /*!< Selects or not Jabber timer\r
-                                                           When enabled, the MAC allows no more then 2048 bytes to be sent.\r
-                                                           When disabled, the MAC can send up to 16384 bytes.\r
-                                                           This parameter can be a value of @ref ETH_Jabber */\r
-\r
-  uint32_t             InterFrameGap;             /*!< Selects the minimum IFG between frames during transmission.\r
-                                                           This parameter can be a value of @ref ETH_Inter_Frame_Gap */\r
-\r
-  uint32_t             CarrierSense;              /*!< Selects or not the Carrier Sense.\r
-                                                           This parameter can be a value of @ref ETH_Carrier_Sense */\r
-\r
-  uint32_t             ReceiveOwn;                /*!< Selects or not the ReceiveOwn,\r
-                                                           ReceiveOwn allows the reception of frames when the TX_EN signal is asserted\r
-                                                           in Half-Duplex mode.\r
-                                                           This parameter can be a value of @ref ETH_Receive_Own */\r
-\r
-  uint32_t             LoopbackMode;              /*!< Selects or not the internal MAC MII Loopback mode.\r
-                                                           This parameter can be a value of @ref ETH_Loop_Back_Mode */\r
-\r
-  uint32_t             ChecksumOffload;           /*!< Selects or not the IPv4 checksum checking for received frame payloads' TCP/UDP/ICMP headers.\r
-                                                           This parameter can be a value of @ref ETH_Checksum_Offload */\r
-\r
-  uint32_t             RetryTransmission;         /*!< Selects or not the MAC attempt retries transmission, based on the settings of BL,\r
-                                                           when a collision occurs (Half-Duplex mode).\r
-                                                           This parameter can be a value of @ref ETH_Retry_Transmission */\r
-\r
-  uint32_t             AutomaticPadCRCStrip;      /*!< Selects or not the Automatic MAC Pad/CRC Stripping.\r
-                                                           This parameter can be a value of @ref ETH_Automatic_Pad_CRC_Strip */\r
-\r
-  uint32_t             BackOffLimit;              /*!< Selects the BackOff limit value.\r
-                                                           This parameter can be a value of @ref ETH_Back_Off_Limit */\r
-\r
-  uint32_t             DeferralCheck;             /*!< Selects or not the deferral check function (Half-Duplex mode).\r
-                                                           This parameter can be a value of @ref ETH_Deferral_Check */\r
-\r
-  uint32_t             ReceiveAll;                /*!< Selects or not all frames reception by the MAC (No filtering).\r
-                                                           This parameter can be a value of @ref ETH_Receive_All */\r
-\r
-  uint32_t             SourceAddrFilter;          /*!< Selects the Source Address Filter mode.\r
-                                                           This parameter can be a value of @ref ETH_Source_Addr_Filter */\r
-\r
-  uint32_t             PassControlFrames;         /*!< Sets the forwarding mode of the control frames (including unicast and multicast PAUSE frames)\r
-                                                           This parameter can be a value of @ref ETH_Pass_Control_Frames */\r
-\r
-  uint32_t             BroadcastFramesReception;  /*!< Selects or not the reception of Broadcast Frames.\r
-                                                           This parameter can be a value of @ref ETH_Broadcast_Frames_Reception */\r
-\r
-  uint32_t             DestinationAddrFilter;     /*!< Sets the destination filter mode for both unicast and multicast frames.\r
-                                                           This parameter can be a value of @ref ETH_Destination_Addr_Filter */\r
-\r
-  uint32_t             PromiscuousMode;           /*!< Selects or not the Promiscuous Mode\r
-                                                           This parameter can be a value of @ref ETH_Promiscuous_Mode */\r
-\r
-  uint32_t             MulticastFramesFilter;     /*!< Selects the Multicast Frames filter mode: None/HashTableFilter/PerfectFilter/PerfectHashTableFilter.\r
-                                                           This parameter can be a value of @ref ETH_Multicast_Frames_Filter */\r
-\r
-  uint32_t             UnicastFramesFilter;       /*!< Selects the Unicast Frames filter mode: HashTableFilter/PerfectFilter/PerfectHashTableFilter.\r
-                                                           This parameter can be a value of @ref ETH_Unicast_Frames_Filter */\r
-\r
-  uint32_t             HashTableHigh;             /*!< This field holds the higher 32 bits of Hash table.\r
-                                                           This parameter must be a number between Min_Data = 0x0 and Max_Data = 0xFFFFFFFF */\r
-\r
-  uint32_t             HashTableLow;              /*!< This field holds the lower 32 bits of Hash table.\r
-                                                           This parameter must be a number between Min_Data = 0x0 and Max_Data = 0xFFFFFFFF  */\r
-\r
-  uint32_t             PauseTime;                 /*!< This field holds the value to be used in the Pause Time field in the transmit control frame.\r
-                                                           This parameter must be a number between Min_Data = 0x0 and Max_Data = 0xFFFF */\r
-\r
-  uint32_t             ZeroQuantaPause;           /*!< Selects or not the automatic generation of Zero-Quanta Pause Control frames.\r
-                                                           This parameter can be a value of @ref ETH_Zero_Quanta_Pause */\r
-\r
-  uint32_t             PauseLowThreshold;         /*!< This field configures the threshold of the PAUSE to be checked for\r
-                                                           automatic retransmission of PAUSE Frame.\r
-                                                           This parameter can be a value of @ref ETH_Pause_Low_Threshold */\r
-\r
-  uint32_t             UnicastPauseFrameDetect;   /*!< Selects or not the MAC detection of the Pause frames (with MAC Address0\r
-                                                           unicast address and unique multicast address).\r
-                                                           This parameter can be a value of @ref ETH_Unicast_Pause_Frame_Detect */\r
-\r
-  uint32_t             ReceiveFlowControl;        /*!< Enables or disables the MAC to decode the received Pause frame and\r
-                                                           disable its transmitter for a specified time (Pause Time)\r
-                                                           This parameter can be a value of @ref ETH_Receive_Flow_Control */\r
-\r
-  uint32_t             TransmitFlowControl;       /*!< Enables or disables the MAC to transmit Pause frames (Full-Duplex mode)\r
-                                                           or the MAC back-pressure operation (Half-Duplex mode)\r
-                                                           This parameter can be a value of @ref ETH_Transmit_Flow_Control */\r
-\r
-  uint32_t             VLANTagComparison;         /*!< Selects the 12-bit VLAN identifier or the complete 16-bit VLAN tag for\r
-                                                           comparison and filtering.\r
-                                                           This parameter can be a value of @ref ETH_VLAN_Tag_Comparison */\r
-\r
-  uint32_t             VLANTagIdentifier;         /*!< Holds the VLAN tag identifier for receive frames */\r
-\r
-} ETH_MACInitTypeDef;\r
-\r
-\r
-/**\r
-  * @brief  ETH DMA Configuration Structure definition\r
-  */\r
-\r
-typedef struct\r
-{\r
- uint32_t              DropTCPIPChecksumErrorFrame; /*!< Selects or not the Dropping of TCP/IP Checksum Error Frames.\r
-                                                             This parameter can be a value of @ref ETH_Drop_TCP_IP_Checksum_Error_Frame */\r
-\r
-  uint32_t             ReceiveStoreForward;         /*!< Enables or disables the Receive store and forward mode.\r
-                                                             This parameter can be a value of @ref ETH_Receive_Store_Forward */\r
-\r
-  uint32_t             FlushReceivedFrame;          /*!< Enables or disables the flushing of received frames.\r
-                                                             This parameter can be a value of @ref ETH_Flush_Received_Frame */\r
-\r
-  uint32_t             TransmitStoreForward;        /*!< Enables or disables Transmit store and forward mode.\r
-                                                             This parameter can be a value of @ref ETH_Transmit_Store_Forward */\r
-\r
-  uint32_t             TransmitThresholdControl;    /*!< Selects or not the Transmit Threshold Control.\r
-                                                             This parameter can be a value of @ref ETH_Transmit_Threshold_Control */\r
-\r
-  uint32_t             ForwardErrorFrames;          /*!< Selects or not the forward to the DMA of erroneous frames.\r
-                                                             This parameter can be a value of @ref ETH_Forward_Error_Frames */\r
-\r
-  uint32_t             ForwardUndersizedGoodFrames; /*!< Enables or disables the Rx FIFO to forward Undersized frames (frames with no Error\r
-                                                             and length less than 64 bytes) including pad-bytes and CRC)\r
-                                                             This parameter can be a value of @ref ETH_Forward_Undersized_Good_Frames */\r
-\r
-  uint32_t             ReceiveThresholdControl;     /*!< Selects the threshold level of the Receive FIFO.\r
-                                                             This parameter can be a value of @ref ETH_Receive_Threshold_Control */\r
-\r
-  uint32_t             SecondFrameOperate;          /*!< Selects or not the Operate on second frame mode, which allows the DMA to process a second\r
-                                                             frame of Transmit data even before obtaining the status for the first frame.\r
-                                                             This parameter can be a value of @ref ETH_Second_Frame_Operate */\r
-\r
-  uint32_t             AddressAlignedBeats;         /*!< Enables or disables the Address Aligned Beats.\r
-                                                             This parameter can be a value of @ref ETH_Address_Aligned_Beats */\r
-\r
-  uint32_t             FixedBurst;                  /*!< Enables or disables the AHB Master interface fixed burst transfers.\r
-                                                             This parameter can be a value of @ref ETH_Fixed_Burst */\r
-\r
-  uint32_t             RxDMABurstLength;            /*!< Indicates the maximum number of beats to be transferred in one Rx DMA transaction.\r
-                                                             This parameter can be a value of @ref ETH_Rx_DMA_Burst_Length */\r
-\r
-  uint32_t             TxDMABurstLength;            /*!< Indicates the maximum number of beats to be transferred in one Tx DMA transaction.\r
-                                                             This parameter can be a value of @ref ETH_Tx_DMA_Burst_Length */\r
-\r
-  uint32_t             EnhancedDescriptorFormat;    /*!< Enables the enhanced descriptor format.\r
-                                                             This parameter can be a value of @ref ETH_DMA_Enhanced_descriptor_format */\r
-\r
-  uint32_t             DescriptorSkipLength;        /*!< Specifies the number of word to skip between two unchained descriptors (Ring mode)\r
-                                                             This parameter must be a number between Min_Data = 0 and Max_Data = 32 */\r
-\r
-  uint32_t             DMAArbitration;              /*!< Selects the DMA Tx/Rx arbitration.\r
-                                                             This parameter can be a value of @ref ETH_DMA_Arbitration */\r
-} ETH_DMAInitTypeDef;\r
-\r
-\r
-/**\r
-  * @brief  ETH DMA Descriptors data structure definition\r
-  */\r
-\r
-typedef struct\r
-{\r
-  __IO uint32_t   Status;           /*!< Status */\r
-\r
-  uint32_t   ControlBufferSize;     /*!< Control and Buffer1, Buffer2 lengths */\r
-\r
-  uint32_t   Buffer1Addr;           /*!< Buffer1 address pointer */\r
-\r
-  uint32_t   Buffer2NextDescAddr;   /*!< Buffer2 or next descriptor address pointer */\r
-\r
-  /*!< Enhanced Ethernet DMA PTP Descriptors */\r
-  uint32_t   ExtendedStatus;        /*!< Extended status for PTP receive descriptor */\r
-\r
-  uint32_t   Reserved1;             /*!< Reserved */\r
-\r
-  uint32_t   TimeStampLow;          /*!< Time Stamp Low value for transmit and receive */\r
-\r
-  uint32_t   TimeStampHigh;         /*!< Time Stamp High value for transmit and receive */\r
-\r
-} ETH_DMADescTypeDef;\r
-\r
-\r
-/**\r
-  * @brief  Received Frame Informations structure definition\r
-  */\r
-typedef struct\r
-{\r
-  ETH_DMADescTypeDef *FSRxDesc;          /*!< First Segment Rx Desc */\r
-\r
-  ETH_DMADescTypeDef *LSRxDesc;          /*!< Last Segment Rx Desc */\r
-\r
-  uint32_t  SegCount;                    /*!< Segment count */\r
-\r
-  uint32_t length;                       /*!< Frame length */\r
-\r
-  uint32_t buffer;                       /*!< Frame buffer */\r
-\r
-} ETH_DMARxFrameInfos;\r
-\r
-\r
-/**\r
-  * @brief  ETH Handle Structure definition\r
-  */\r
-\r
-typedef struct\r
-{\r
-  ETH_TypeDef                *Instance;     /*!< Register base address       */\r
-\r
-  ETH_InitTypeDef            Init;          /*!< Ethernet Init Configuration */\r
-\r
-  uint32_t                   LinkStatus;    /*!< Ethernet link status        */\r
-\r
-  ETH_DMADescTypeDef         *RxDesc;       /*!< Rx descriptor to Get        */\r
-\r
-  ETH_DMADescTypeDef         *TxDesc;       /*!< Tx descriptor to Set        */\r
-\r
-  ETH_DMARxFrameInfos        RxFrameInfos;  /*!< last Rx frame infos         */\r
-\r
-  __IO HAL_ETH_StateTypeDef  State;         /*!< ETH communication state     */\r
-\r
-  HAL_LockTypeDef            Lock;          /*!< ETH Lock                    */\r
-\r
-} ETH_HandleTypeDef;\r
-\r
- /**\r
-  * @}\r
-  */\r
-\r
-/* Exported constants --------------------------------------------------------*/\r
-/** @defgroup ETH_Exported_Constants ETH Exported Constants\r
-  * @{\r
-  */\r
-\r
-/** @defgroup ETH_Buffers_setting ETH Buffers setting\r
-  * @{\r
-  */\r
-#define ETH_MAX_PACKET_SIZE    ((uint32_t)1536U)    /*!< ETH_HEADER + ETH_EXTRA + ETH_VLAN_TAG + ETH_MAX_ETH_PAYLOAD + ETH_CRC */\r
-#define ETH_HEADER               ((uint32_t)14U)    /*!< 6 byte Dest addr, 6 byte Src addr, 2 byte length/type */\r
-#define ETH_CRC                   ((uint32_t)4U)    /*!< Ethernet CRC */\r
-#define ETH_EXTRA                 ((uint32_t)2U)    /*!< Extra bytes in some cases */\r
-#define ETH_VLAN_TAG              ((uint32_t)4U)    /*!< optional 802.1q VLAN Tag */\r
-#define ETH_MIN_ETH_PAYLOAD       ((uint32_t)46U)    /*!< Minimum Ethernet payload size */\r
-#define ETH_MAX_ETH_PAYLOAD       ((uint32_t)1500U)    /*!< Maximum Ethernet payload size */\r
-#define ETH_JUMBO_FRAME_PAYLOAD   ((uint32_t)9000U)    /*!< Jumbo frame payload size */\r
-\r
- /* Ethernet driver receive buffers are organized in a chained linked-list, when\r
-    an Ethernet packet is received, the Rx-DMA will transfer the packet from RxFIFO\r
-    to the driver receive buffers memory.\r
-\r
-    Depending on the size of the received Ethernet packet and the size of\r
-    each Ethernet driver receive buffer, the received packet can take one or more\r
-    Ethernet driver receive buffer.\r
-\r
-    In below are defined the size of one Ethernet driver receive buffer ETH_RX_BUF_SIZE\r
-    and the total count of the driver receive buffers ETH_RXBUFNB.\r
-\r
-    The configured value for ETH_RX_BUF_SIZE and ETH_RXBUFNB are only provided as\r
-    example, they can be reconfigured in the application layer to fit the application\r
-    needs */\r
-\r
-/* Here we configure each Ethernet driver receive buffer to fit the Max size Ethernet\r
-   packet */\r
-#ifndef ETH_RX_BUF_SIZE\r
- #error please define ETH_RX_BUF_SIZE\r
- #define ETH_RX_BUF_SIZE         ETH_MAX_PACKET_SIZE\r
-#endif\r
-\r
-/* 5 Ethernet driver receive buffers are used (in a chained linked list)*/\r
-#ifndef ETH_RXBUFNB\r
- #define ETH_RXBUFNB             ((uint32_t)5U)     /*  5 Rx buffers of size ETH_RX_BUF_SIZE */\r
-#endif\r
-\r
-\r
- /* Ethernet driver transmit buffers are organized in a chained linked-list, when\r
-    an Ethernet packet is transmitted, Tx-DMA will transfer the packet from the\r
-    driver transmit buffers memory to the TxFIFO.\r
-\r
-    Depending on the size of the Ethernet packet to be transmitted and the size of\r
-    each Ethernet driver transmit buffer, the packet to be transmitted can take\r
-    one or more Ethernet driver transmit buffer.\r
-\r
-    In below are defined the size of one Ethernet driver transmit buffer ETH_TX_BUF_SIZE\r
-    and the total count of the driver transmit buffers ETH_TXBUFNB.\r
-\r
-    The configured value for ETH_TX_BUF_SIZE and ETH_TXBUFNB are only provided as\r
-    example, they can be reconfigured in the application layer to fit the application\r
-    needs */\r
-\r
-/* Here we configure each Ethernet driver transmit buffer to fit the Max size Ethernet\r
-   packet */\r
-#ifndef ETH_TX_BUF_SIZE\r
- #error please define ETH_TX_BUF_SIZE\r
- #define ETH_TX_BUF_SIZE         ETH_MAX_PACKET_SIZE\r
-#endif\r
-\r
-/* 5 Ethernet driver transmit buffers are used (in a chained linked list)*/\r
-#ifndef ETH_TXBUFNB\r
- #define ETH_TXBUFNB             ((uint32_t)5U)      /* 5  Tx buffers of size ETH_TX_BUF_SIZE */\r
-#endif\r
-\r
- /**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_DMA_TX_Descriptor ETH DMA TX Descriptor\r
-  * @{\r
-  */\r
-\r
-/*\r
-   DMA Tx Descriptor\r
-  -----------------------------------------------------------------------------------------------\r
-  TDES0 | OWN(31) | CTRL[30:26] | Reserved[25:24] | CTRL[23:20] | Reserved[19:17] | Status[16:0] |\r
-  -----------------------------------------------------------------------------------------------\r
-  TDES1 | Reserved[31:29] | Buffer2 ByteCount[28:16] | Reserved[15:13] | Buffer1 ByteCount[12:0] |\r
-  -----------------------------------------------------------------------------------------------\r
-  TDES2 |                         Buffer1 Address [31:0]                                         |\r
-  -----------------------------------------------------------------------------------------------\r
-  TDES3 |                   Buffer2 Address [31:0] / Next Descriptor Address [31:0]              |\r
-  -----------------------------------------------------------------------------------------------\r
-*/\r
-\r
-/**\r
-  * @brief  Bit definition of TDES0 register: DMA Tx descriptor status register\r
-  */\r
-#define ETH_DMATXDESC_OWN                     ((uint32_t)0x80000000U)  /*!< OWN bit: descriptor is owned by DMA engine */\r
-#define ETH_DMATXDESC_IC                      ((uint32_t)0x40000000U)  /*!< Interrupt on Completion */\r
-#define ETH_DMATXDESC_LS                      ((uint32_t)0x20000000U)  /*!< Last Segment */\r
-#define ETH_DMATXDESC_FS                      ((uint32_t)0x10000000U)  /*!< First Segment */\r
-#define ETH_DMATXDESC_DC                      ((uint32_t)0x08000000U)  /*!< Disable CRC */\r
-#define ETH_DMATXDESC_DP                      ((uint32_t)0x04000000U)  /*!< Disable Padding */\r
-#define ETH_DMATXDESC_TTSE                    ((uint32_t)0x02000000U)  /*!< Transmit Time Stamp Enable */\r
-#define ETH_DMATXDESC_CIC                     ((uint32_t)0x00C00000U)  /*!< Checksum Insertion Control: 4 cases */\r
-#define ETH_DMATXDESC_CIC_BYPASS              ((uint32_t)0x00000000U)  /*!< Do Nothing: Checksum Engine is bypassed */\r
-#define ETH_DMATXDESC_CIC_IPV4HEADER          ((uint32_t)0x00400000U)  /*!< IPV4 header Checksum Insertion */\r
-#define ETH_DMATXDESC_CIC_TCPUDPICMP_SEGMENT  ((uint32_t)0x00800000U)  /*!< TCP/UDP/ICMP Checksum Insertion calculated over segment only */\r
-#define ETH_DMATXDESC_CIC_TCPUDPICMP_FULL     ((uint32_t)0x00C00000U)  /*!< TCP/UDP/ICMP Checksum Insertion fully calculated */\r
-#define ETH_DMATXDESC_TER                     ((uint32_t)0x00200000U)  /*!< Transmit End of Ring */\r
-#define ETH_DMATXDESC_TCH                     ((uint32_t)0x00100000U)  /*!< Second Address Chained */\r
-#define ETH_DMATXDESC_TTSS                    ((uint32_t)0x00020000U)  /*!< Tx Time Stamp Status */\r
-#define ETH_DMATXDESC_IHE                     ((uint32_t)0x00010000U)  /*!< IP Header Error */\r
-#define ETH_DMATXDESC_ES                      ((uint32_t)0x00008000U)  /*!< Error summary: OR of the following bits: UE || ED || EC || LCO || NC || LCA || FF || JT */\r
-#define ETH_DMATXDESC_JT                      ((uint32_t)0x00004000U)  /*!< Jabber Timeout */\r
-#define ETH_DMATXDESC_FF                      ((uint32_t)0x00002000U)  /*!< Frame Flushed: DMA/MTL flushed the frame due to SW flush */\r
-#define ETH_DMATXDESC_PCE                     ((uint32_t)0x00001000U)  /*!< Payload Checksum Error */\r
-#define ETH_DMATXDESC_LCA                     ((uint32_t)0x00000800U)  /*!< Loss of Carrier: carrier lost during transmission */\r
-#define ETH_DMATXDESC_NC                      ((uint32_t)0x00000400U)  /*!< No Carrier: no carrier signal from the transceiver */\r
-#define ETH_DMATXDESC_LCO                     ((uint32_t)0x00000200U)  /*!< Late Collision: transmission aborted due to collision */\r
-#define ETH_DMATXDESC_EC                      ((uint32_t)0x00000100U)  /*!< Excessive Collision: transmission aborted after 16 collisions */\r
-#define ETH_DMATXDESC_VF                      ((uint32_t)0x00000080U)  /*!< VLAN Frame */\r
-#define ETH_DMATXDESC_CC                      ((uint32_t)0x00000078U)  /*!< Collision Count */\r
-#define ETH_DMATXDESC_ED                      ((uint32_t)0x00000004U)  /*!< Excessive Deferral */\r
-#define ETH_DMATXDESC_UF                      ((uint32_t)0x00000002U)  /*!< Underflow Error: late data arrival from the memory */\r
-#define ETH_DMATXDESC_DB                      ((uint32_t)0x00000001U)  /*!< Deferred Bit */\r
-\r
-/**\r
-  * @brief  Bit definition of TDES1 register\r
-  */\r
-#define ETH_DMATXDESC_TBS2  ((uint32_t)0x1FFF0000U)  /*!< Transmit Buffer2 Size */\r
-#define ETH_DMATXDESC_TBS1  ((uint32_t)0x00001FFFU)  /*!< Transmit Buffer1 Size */\r
-\r
-/**\r
-  * @brief  Bit definition of TDES2 register\r
-  */\r
-#define ETH_DMATXDESC_B1AP  ((uint32_t)0xFFFFFFFFU)  /*!< Buffer1 Address Pointer */\r
-\r
-/**\r
-  * @brief  Bit definition of TDES3 register\r
-  */\r
-#define ETH_DMATXDESC_B2AP  ((uint32_t)0xFFFFFFFFU)  /*!< Buffer2 Address Pointer */\r
-\r
-  /*---------------------------------------------------------------------------------------------\r
-  TDES6 |                         Transmit Time Stamp Low [31:0]                                 |\r
-  -----------------------------------------------------------------------------------------------\r
-  TDES7 |                         Transmit Time Stamp High [31:0]                                |\r
-  ----------------------------------------------------------------------------------------------*/\r
-\r
-/* Bit definition of TDES6 register */\r
- #define ETH_DMAPTPTXDESC_TTSL  ((uint32_t)0xFFFFFFFFU)  /* Transmit Time Stamp Low */\r
-\r
-/* Bit definition of TDES7 register */\r
- #define ETH_DMAPTPTXDESC_TTSH  ((uint32_t)0xFFFFFFFFU)  /* Transmit Time Stamp High */\r
-\r
-/**\r
-  * @}\r
-  */\r
-/** @defgroup ETH_DMA_RX_Descriptor ETH DMA RX Descriptor\r
-  * @{\r
-  */\r
-\r
-/*\r
-  DMA Rx Descriptor\r
-  --------------------------------------------------------------------------------------------------------------------\r
-  RDES0 | OWN(31) |                                             Status [30:0]                                          |\r
-  ---------------------------------------------------------------------------------------------------------------------\r
-  RDES1 | CTRL(31) | Reserved[30:29] | Buffer2 ByteCount[28:16] | CTRL[15:14] | Reserved(13) | Buffer1 ByteCount[12:0] |\r
-  ---------------------------------------------------------------------------------------------------------------------\r
-  RDES2 |                                       Buffer1 Address [31:0]                                                 |\r
-  ---------------------------------------------------------------------------------------------------------------------\r
-  RDES3 |                          Buffer2 Address [31:0] / Next Descriptor Address [31:0]                             |\r
-  ---------------------------------------------------------------------------------------------------------------------\r
-*/\r
-\r
-/**\r
-  * @brief  Bit definition of RDES0 register: DMA Rx descriptor status register\r
-  */\r
-#define ETH_DMARXDESC_OWN         ((uint32_t)0x80000000U)  /*!< OWN bit: descriptor is owned by DMA engine  */\r
-#define ETH_DMARXDESC_AFM         ((uint32_t)0x40000000U)  /*!< DA Filter Fail for the rx frame  */\r
-#define ETH_DMARXDESC_FL          ((uint32_t)0x3FFF0000U)  /*!< Receive descriptor frame length  */\r
-#define ETH_DMARXDESC_ES          ((uint32_t)0x00008000U)  /*!< Error summary: OR of the following bits: DE || OE || IPC || LC || RWT || RE || CE */\r
-#define ETH_DMARXDESC_DE          ((uint32_t)0x00004000U)  /*!< Descriptor error: no more descriptors for receive frame  */\r
-#define ETH_DMARXDESC_SAF         ((uint32_t)0x00002000U)  /*!< SA Filter Fail for the received frame */\r
-#define ETH_DMARXDESC_LE          ((uint32_t)0x00001000U)  /*!< Frame size not matching with length field */\r
-#define ETH_DMARXDESC_OE          ((uint32_t)0x00000800U)  /*!< Overflow Error: Frame was damaged due to buffer overflow */\r
-#define ETH_DMARXDESC_VLAN        ((uint32_t)0x00000400U)  /*!< VLAN Tag: received frame is a VLAN frame */\r
-#define ETH_DMARXDESC_FS          ((uint32_t)0x00000200U)  /*!< First descriptor of the frame  */\r
-#define ETH_DMARXDESC_LS          ((uint32_t)0x00000100U)  /*!< Last descriptor of the frame  */\r
-#define ETH_DMARXDESC_IPV4HCE     ((uint32_t)0x00000080U)  /*!< IPC Checksum Error: Rx Ipv4 header checksum error   */\r
-#define ETH_DMARXDESC_LC          ((uint32_t)0x00000040U)  /*!< Late collision occurred during reception   */\r
-#define ETH_DMARXDESC_FT          ((uint32_t)0x00000020U)  /*!< Frame type - Ethernet, otherwise 802.3    */\r
-#define ETH_DMARXDESC_RWT         ((uint32_t)0x00000010U)  /*!< Receive Watchdog Timeout: watchdog timer expired during reception    */\r
-#define ETH_DMARXDESC_RE          ((uint32_t)0x00000008U)  /*!< Receive error: error reported by MII interface  */\r
-#define ETH_DMARXDESC_DBE         ((uint32_t)0x00000004U)  /*!< Dribble bit error: frame contains non int multiple of 8 bits  */\r
-#define ETH_DMARXDESC_CE          ((uint32_t)0x00000002U)  /*!< CRC error */\r
-#define ETH_DMARXDESC_MAMPCE      ((uint32_t)0x00000001U)  /*!< Rx MAC Address/Payload Checksum Error: Rx MAC address matched/ Rx Payload Checksum Error */\r
-\r
-/**\r
-  * @brief  Bit definition of RDES1 register\r
-  */\r
-#define ETH_DMARXDESC_DIC   ((uint32_t)0x80000000U)  /*!< Disable Interrupt on Completion */\r
-#define ETH_DMARXDESC_RBS2  ((uint32_t)0x1FFF0000U)  /*!< Receive Buffer2 Size */\r
-#define ETH_DMARXDESC_RER   ((uint32_t)0x00008000U)  /*!< Receive End of Ring */\r
-#define ETH_DMARXDESC_RCH   ((uint32_t)0x00004000U)  /*!< Second Address Chained */\r
-#define ETH_DMARXDESC_RBS1  ((uint32_t)0x00001FFFU)  /*!< Receive Buffer1 Size */\r
-\r
-/**\r
-  * @brief  Bit definition of RDES2 register\r
-  */\r
-#define ETH_DMARXDESC_B1AP  ((uint32_t)0xFFFFFFFFU)  /*!< Buffer1 Address Pointer */\r
-\r
-/**\r
-  * @brief  Bit definition of RDES3 register\r
-  */\r
-#define ETH_DMARXDESC_B2AP  ((uint32_t)0xFFFFFFFFU)  /*!< Buffer2 Address Pointer */\r
-\r
-/*---------------------------------------------------------------------------------------------------------------------\r
-  RDES4 |                   Reserved[31:15]              |             Extended Status [14:0]                          |\r
-  ---------------------------------------------------------------------------------------------------------------------\r
-  RDES5 |                                            Reserved[31:0]                                                    |\r
-  ---------------------------------------------------------------------------------------------------------------------\r
-  RDES6 |                                       Receive Time Stamp Low [31:0]                                          |\r
-  ---------------------------------------------------------------------------------------------------------------------\r
-  RDES7 |                                       Receive Time Stamp High [31:0]                                         |\r
-  --------------------------------------------------------------------------------------------------------------------*/\r
-\r
-/* Bit definition of RDES4 register */\r
-#define ETH_DMAPTPRXDESC_PTPV                            ((uint32_t)0x00002000U)  /* PTP Version */\r
-#define ETH_DMAPTPRXDESC_PTPFT                           ((uint32_t)0x00001000U)  /* PTP Frame Type */\r
-#define ETH_DMAPTPRXDESC_PTPMT                           ((uint32_t)0x00000F00U)  /* PTP Message Type */\r
-  #define ETH_DMAPTPRXDESC_PTPMT_SYNC                      ((uint32_t)0x00000100U)  /* SYNC message (all clock types) */\r
-  #define ETH_DMAPTPRXDESC_PTPMT_FOLLOWUP                  ((uint32_t)0x00000200U)  /* FollowUp message (all clock types) */\r
-  #define ETH_DMAPTPRXDESC_PTPMT_DELAYREQ                  ((uint32_t)0x00000300U)  /* DelayReq message (all clock types) */\r
-  #define ETH_DMAPTPRXDESC_PTPMT_DELAYRESP                 ((uint32_t)0x00000400U)  /* DelayResp message (all clock types) */\r
-  #define ETH_DMAPTPRXDESC_PTPMT_PDELAYREQ_ANNOUNCE        ((uint32_t)0x00000500U)  /* PdelayReq message (peer-to-peer transparent clock) or Announce message (Ordinary or Boundary clock) */\r
-  #define ETH_DMAPTPRXDESC_PTPMT_PDELAYRESP_MANAG          ((uint32_t)0x00000600U)  /* PdelayResp message (peer-to-peer transparent clock) or Management message (Ordinary or Boundary clock)  */\r
-  #define ETH_DMAPTPRXDESC_PTPMT_PDELAYRESPFOLLOWUP_SIGNAL ((uint32_t)0x00000700U)  /* PdelayRespFollowUp message (peer-to-peer transparent clock) or Signaling message (Ordinary or Boundary clock) */\r
-#define ETH_DMAPTPRXDESC_IPV6PR                          ((uint32_t)0x00000080U)  /* IPv6 Packet Received */\r
-#define ETH_DMAPTPRXDESC_IPV4PR                          ((uint32_t)0x00000040U)  /* IPv4 Packet Received */\r
-#define ETH_DMAPTPRXDESC_IPCB                            ((uint32_t)0x00000020U)  /* IP Checksum Bypassed */\r
-#define ETH_DMAPTPRXDESC_IPPE                            ((uint32_t)0x00000010U)  /* IP Payload Error */\r
-#define ETH_DMAPTPRXDESC_IPHE                            ((uint32_t)0x00000008U)  /* IP Header Error */\r
-#define ETH_DMAPTPRXDESC_IPPT                            ((uint32_t)0x00000007U)  /* IP Payload Type */\r
-  #define ETH_DMAPTPRXDESC_IPPT_UDP                      ((uint32_t)0x00000001U)  /* UDP payload encapsulated in the IP datagram */\r
-  #define ETH_DMAPTPRXDESC_IPPT_TCP                      ((uint32_t)0x00000002U)  /* TCP payload encapsulated in the IP datagram */\r
-  #define ETH_DMAPTPRXDESC_IPPT_ICMP                     ((uint32_t)0x00000003U)  /* ICMP payload encapsulated in the IP datagram */\r
-\r
-/* Bit definition of RDES6 register */\r
-#define ETH_DMAPTPRXDESC_RTSL  ((uint32_t)0xFFFFFFFFU)  /* Receive Time Stamp Low */\r
-\r
-/* Bit definition of RDES7 register */\r
-#define ETH_DMAPTPRXDESC_RTSH  ((uint32_t)0xFFFFFFFFU)  /* Receive Time Stamp High */\r
-/**\r
-  * @}\r
-  */\r
- /** @defgroup ETH_AutoNegotiation ETH AutoNegotiation\r
-  * @{\r
-  */\r
-#define ETH_AUTONEGOTIATION_ENABLE     ((uint32_t)0x00000001U)\r
-#define ETH_AUTONEGOTIATION_DISABLE    ((uint32_t)0x00000000U)\r
-\r
-/**\r
-  * @}\r
-  */\r
-/** @defgroup ETH_Speed ETH Speed\r
-  * @{\r
-  */\r
-#define ETH_SPEED_10M        ((uint32_t)0x00000000U)\r
-#define ETH_SPEED_100M       ((uint32_t)0x00004000U)\r
-\r
-/**\r
-  * @}\r
-  */\r
-/** @defgroup ETH_Duplex_Mode ETH Duplex Mode\r
-  * @{\r
-  */\r
-#define ETH_MODE_FULLDUPLEX       ((uint32_t)0x00000800U)\r
-#define ETH_MODE_HALFDUPLEX       ((uint32_t)0x00000000U)\r
-/**\r
-  * @}\r
-  */\r
-/** @defgroup ETH_Rx_Mode ETH Rx Mode\r
-  * @{\r
-  */\r
-#define ETH_RXPOLLING_MODE      ((uint32_t)0x00000000U)\r
-#define ETH_RXINTERRUPT_MODE    ((uint32_t)0x00000001U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Checksum_Mode ETH Checksum Mode\r
-  * @{\r
-  */\r
-#define ETH_CHECKSUM_BY_HARDWARE      ((uint32_t)0x00000000U)\r
-#define ETH_CHECKSUM_BY_SOFTWARE      ((uint32_t)0x00000001U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Media_Interface ETH Media Interface\r
-  * @{\r
-  */\r
-#define ETH_MEDIA_INTERFACE_MII       ((uint32_t)0x00000000U)\r
-#define ETH_MEDIA_INTERFACE_RMII      ((uint32_t)SYSCFG_PMC_MII_RMII_SEL)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Watchdog ETH Watchdog\r
-  * @{\r
-  */\r
-#define ETH_WATCHDOG_ENABLE       ((uint32_t)0x00000000U)\r
-#define ETH_WATCHDOG_DISABLE      ((uint32_t)0x00800000U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Jabber ETH Jabber\r
-  * @{\r
-  */\r
-#define ETH_JABBER_ENABLE    ((uint32_t)0x00000000U)\r
-#define ETH_JABBER_DISABLE   ((uint32_t)0x00400000U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Inter_Frame_Gap ETH Inter Frame Gap\r
-  * @{\r
-  */\r
-#define ETH_INTERFRAMEGAP_96BIT   ((uint32_t)0x00000000U)  /*!< minimum IFG between frames during transmission is 96Bit */\r
-#define ETH_INTERFRAMEGAP_88BIT   ((uint32_t)0x00020000U)  /*!< minimum IFG between frames during transmission is 88Bit */\r
-#define ETH_INTERFRAMEGAP_80BIT   ((uint32_t)0x00040000U)  /*!< minimum IFG between frames during transmission is 80Bit */\r
-#define ETH_INTERFRAMEGAP_72BIT   ((uint32_t)0x00060000U)  /*!< minimum IFG between frames during transmission is 72Bit */\r
-#define ETH_INTERFRAMEGAP_64BIT   ((uint32_t)0x00080000U)  /*!< minimum IFG between frames during transmission is 64Bit */\r
-#define ETH_INTERFRAMEGAP_56BIT   ((uint32_t)0x000A0000U)  /*!< minimum IFG between frames during transmission is 56Bit */\r
-#define ETH_INTERFRAMEGAP_48BIT   ((uint32_t)0x000C0000U)  /*!< minimum IFG between frames during transmission is 48Bit */\r
-#define ETH_INTERFRAMEGAP_40BIT   ((uint32_t)0x000E0000U)  /*!< minimum IFG between frames during transmission is 40Bit */\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Carrier_Sense ETH Carrier Sense\r
-  * @{\r
-  */\r
-#define ETH_CARRIERSENCE_ENABLE   ((uint32_t)0x00000000U)\r
-#define ETH_CARRIERSENCE_DISABLE  ((uint32_t)0x00010000U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Receive_Own ETH Receive Own\r
-  * @{\r
-  */\r
-#define ETH_RECEIVEOWN_ENABLE     ((uint32_t)0x00000000U)\r
-#define ETH_RECEIVEOWN_DISABLE    ((uint32_t)0x00002000U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Loop_Back_Mode ETH Loop Back Mode\r
-  * @{\r
-  */\r
-#define ETH_LOOPBACKMODE_ENABLE        ((uint32_t)0x00001000U)\r
-#define ETH_LOOPBACKMODE_DISABLE       ((uint32_t)0x00000000U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Checksum_Offload ETH Checksum Offload\r
-  * @{\r
-  */\r
-#define ETH_CHECKSUMOFFLAOD_ENABLE     ((uint32_t)0x00000400U)\r
-#define ETH_CHECKSUMOFFLAOD_DISABLE    ((uint32_t)0x00000000U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Retry_Transmission ETH Retry Transmission\r
-  * @{\r
-  */\r
-#define ETH_RETRYTRANSMISSION_ENABLE   ((uint32_t)0x00000000U)\r
-#define ETH_RETRYTRANSMISSION_DISABLE  ((uint32_t)0x00000200U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Automatic_Pad_CRC_Strip ETH Automatic Pad CRC Strip\r
-  * @{\r
-  */\r
-#define ETH_AUTOMATICPADCRCSTRIP_ENABLE     ((uint32_t)0x00000080U)\r
-#define ETH_AUTOMATICPADCRCSTRIP_DISABLE    ((uint32_t)0x00000000U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Back_Off_Limit ETH Back Off Limit\r
-  * @{\r
-  */\r
-#define ETH_BACKOFFLIMIT_10  ((uint32_t)0x00000000U)\r
-#define ETH_BACKOFFLIMIT_8   ((uint32_t)0x00000020U)\r
-#define ETH_BACKOFFLIMIT_4   ((uint32_t)0x00000040U)\r
-#define ETH_BACKOFFLIMIT_1   ((uint32_t)0x00000060U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Deferral_Check ETH Deferral Check\r
-  * @{\r
-  */\r
-#define ETH_DEFFERRALCHECK_ENABLE       ((uint32_t)0x00000010U)\r
-#define ETH_DEFFERRALCHECK_DISABLE      ((uint32_t)0x00000000U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Receive_All ETH Receive All\r
-  * @{\r
-  */\r
-#define ETH_RECEIVEALL_ENABLE     ((uint32_t)0x80000000U)\r
-#define ETH_RECEIVEAll_DISABLE    ((uint32_t)0x00000000U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Source_Addr_Filter ETH Source Addr Filter\r
-  * @{\r
-  */\r
-#define ETH_SOURCEADDRFILTER_NORMAL_ENABLE       ((uint32_t)0x00000200U)\r
-#define ETH_SOURCEADDRFILTER_INVERSE_ENABLE      ((uint32_t)0x00000300U)\r
-#define ETH_SOURCEADDRFILTER_DISABLE             ((uint32_t)0x00000000U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Pass_Control_Frames ETH Pass Control Frames\r
-  * @{\r
-  */\r
-#define ETH_PASSCONTROLFRAMES_BLOCKALL                ((uint32_t)0x00000040U)  /*!< MAC filters all control frames from reaching the application */\r
-#define ETH_PASSCONTROLFRAMES_FORWARDALL              ((uint32_t)0x00000080U)  /*!< MAC forwards all control frames to application even if they fail the Address Filter */\r
-#define ETH_PASSCONTROLFRAMES_FORWARDPASSEDADDRFILTER ((uint32_t)0x000000C0U)  /*!< MAC forwards control frames that pass the Address Filter. */\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Broadcast_Frames_Reception ETH Broadcast Frames Reception\r
-  * @{\r
-  */\r
-#define ETH_BROADCASTFRAMESRECEPTION_ENABLE     ((uint32_t)0x00000000U)\r
-#define ETH_BROADCASTFRAMESRECEPTION_DISABLE    ((uint32_t)0x00000020U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Destination_Addr_Filter ETH Destination Addr Filter\r
-  * @{\r
-  */\r
-#define ETH_DESTINATIONADDRFILTER_NORMAL    ((uint32_t)0x00000000U)\r
-#define ETH_DESTINATIONADDRFILTER_INVERSE   ((uint32_t)0x00000008U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Promiscuous_Mode ETH Promiscuous Mode\r
-  * @{\r
-  */\r
-#define ETH_PROMISCUOUS_MODE_ENABLE     ((uint32_t)0x00000001U)\r
-#define ETH_PROMISCUOUS_MODE_DISABLE    ((uint32_t)0x00000000U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Multicast_Frames_Filter ETH Multicast Frames Filter\r
-  * @{\r
-  */\r
-#define ETH_MULTICASTFRAMESFILTER_PERFECTHASHTABLE    ((uint32_t)0x00000404U)\r
-#define ETH_MULTICASTFRAMESFILTER_HASHTABLE           ((uint32_t)0x00000004U)\r
-#define ETH_MULTICASTFRAMESFILTER_PERFECT             ((uint32_t)0x00000000U)\r
-#define ETH_MULTICASTFRAMESFILTER_NONE                ((uint32_t)0x00000010U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Unicast_Frames_Filter ETH Unicast Frames Filter\r
-  * @{\r
-  */\r
-#define ETH_UNICASTFRAMESFILTER_PERFECTHASHTABLE ((uint32_t)0x00000402U)\r
-#define ETH_UNICASTFRAMESFILTER_HASHTABLE        ((uint32_t)0x00000002U)\r
-#define ETH_UNICASTFRAMESFILTER_PERFECT          ((uint32_t)0x00000000U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Zero_Quanta_Pause ETH Zero Quanta Pause\r
-  * @{\r
-  */\r
-#define ETH_ZEROQUANTAPAUSE_ENABLE     ((uint32_t)0x00000000U)\r
-#define ETH_ZEROQUANTAPAUSE_DISABLE    ((uint32_t)0x00000080U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Pause_Low_Threshold ETH Pause Low Threshold\r
-  * @{\r
-  */\r
-#define ETH_PAUSELOWTHRESHOLD_MINUS4        ((uint32_t)0x00000000U)  /*!< Pause time minus 4 slot times */\r
-#define ETH_PAUSELOWTHRESHOLD_MINUS28       ((uint32_t)0x00000010U)  /*!< Pause time minus 28 slot times */\r
-#define ETH_PAUSELOWTHRESHOLD_MINUS144      ((uint32_t)0x00000020U)  /*!< Pause time minus 144 slot times */\r
-#define ETH_PAUSELOWTHRESHOLD_MINUS256      ((uint32_t)0x00000030U)  /*!< Pause time minus 256 slot times */\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Unicast_Pause_Frame_Detect ETH Unicast Pause Frame Detect\r
-  * @{\r
-  */\r
-#define ETH_UNICASTPAUSEFRAMEDETECT_ENABLE  ((uint32_t)0x00000008U)\r
-#define ETH_UNICASTPAUSEFRAMEDETECT_DISABLE ((uint32_t)0x00000000U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Receive_Flow_Control ETH Receive Flow Control\r
-  * @{\r
-  */\r
-#define ETH_RECEIVEFLOWCONTROL_ENABLE       ((uint32_t)0x00000004U)\r
-#define ETH_RECEIVEFLOWCONTROL_DISABLE      ((uint32_t)0x00000000U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Transmit_Flow_Control ETH Transmit Flow Control\r
-  * @{\r
-  */\r
-#define ETH_TRANSMITFLOWCONTROL_ENABLE      ((uint32_t)0x00000002U)\r
-#define ETH_TRANSMITFLOWCONTROL_DISABLE     ((uint32_t)0x00000000U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_VLAN_Tag_Comparison ETH VLAN Tag Comparison\r
-  * @{\r
-  */\r
-#define ETH_VLANTAGCOMPARISON_12BIT    ((uint32_t)0x00010000U)\r
-#define ETH_VLANTAGCOMPARISON_16BIT    ((uint32_t)0x00000000U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_MAC_addresses ETH MAC addresses\r
-  * @{\r
-  */\r
-#define ETH_MAC_ADDRESS0     ((uint32_t)0x00000000U)\r
-#define ETH_MAC_ADDRESS1     ((uint32_t)0x00000008U)\r
-#define ETH_MAC_ADDRESS2     ((uint32_t)0x00000010U)\r
-#define ETH_MAC_ADDRESS3     ((uint32_t)0x00000018U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_MAC_addresses_filter_SA_DA ETH MAC addresses filter SA DA\r
-  * @{\r
-  */\r
-#define ETH_MAC_ADDRESSFILTER_SA       ((uint32_t)0x00000000U)\r
-#define ETH_MAC_ADDRESSFILTER_DA       ((uint32_t)0x00000008U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_MAC_addresses_filter_Mask_bytes ETH MAC addresses filter Mask bytes\r
-  * @{\r
-  */\r
-#define ETH_MAC_ADDRESSMASK_BYTE6      ((uint32_t)0x20000000U)  /*!< Mask MAC Address high reg bits [15:8] */\r
-#define ETH_MAC_ADDRESSMASK_BYTE5      ((uint32_t)0x10000000U)  /*!< Mask MAC Address high reg bits [7:0] */\r
-#define ETH_MAC_ADDRESSMASK_BYTE4      ((uint32_t)0x08000000U)  /*!< Mask MAC Address low reg bits [31:24] */\r
-#define ETH_MAC_ADDRESSMASK_BYTE3      ((uint32_t)0x04000000U)  /*!< Mask MAC Address low reg bits [23:16] */\r
-#define ETH_MAC_ADDRESSMASK_BYTE2      ((uint32_t)0x02000000U)  /*!< Mask MAC Address low reg bits [15:8] */\r
-#define ETH_MAC_ADDRESSMASK_BYTE1      ((uint32_t)0x01000000U)  /*!< Mask MAC Address low reg bits [70] */\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_MAC_Debug_flags ETH MAC Debug flags\r
-  * @{\r
-  */\r
-#ifndef ETH_MAC_TXFIFO_FULL\r
-       #define ETH_MAC_TXFIFO_FULL          ((uint32_t)0x02000000)  /* Tx FIFO full */\r
-       #define ETH_MAC_TXFIFONOT_EMPTY      ((uint32_t)0x01000000)  /* Tx FIFO not empty */\r
-       #define ETH_MAC_TXFIFO_WRITE_ACTIVE  ((uint32_t)0x00400000)  /* Tx FIFO write active */\r
-       #define ETH_MAC_TXFIFO_IDLE     ((uint32_t)0x00000000)  /* Tx FIFO read status: Idle */\r
-       #define ETH_MAC_TXFIFO_READ     ((uint32_t)0x00100000)  /* Tx FIFO read status: Read (transferring data to the MAC transmitter) */\r
-       #define ETH_MAC_TXFIFO_WAITING  ((uint32_t)0x00200000)  /* Tx FIFO read status: Waiting for TxStatus from MAC transmitter */\r
-       #define ETH_MAC_TXFIFO_WRITING  ((uint32_t)0x00300000)  /* Tx FIFO read status: Writing the received TxStatus or flushing the TxFIFO */\r
-       #define ETH_MAC_TRANSMISSION_PAUSE     ((uint32_t)0x00080000)  /* MAC transmitter in pause */\r
-       #define ETH_MAC_TRANSMITFRAMECONTROLLER_IDLE            ((uint32_t)0x00000000)  /* MAC transmit frame controller: Idle */\r
-       #define ETH_MAC_TRANSMITFRAMECONTROLLER_WAITING         ((uint32_t)0x00020000)  /* MAC transmit frame controller: Waiting for Status of previous frame or IFG/backoff period to be over */\r
-       #define ETH_MAC_TRANSMITFRAMECONTROLLER_GENRATING_PCF   ((uint32_t)0x00040000)  /* MAC transmit frame controller: Generating and transmitting a Pause control frame (in full duplex mode) */\r
-       #define ETH_MAC_TRANSMITFRAMECONTROLLER_TRANSFERRING    ((uint32_t)0x00060000)  /* MAC transmit frame controller: Transferring input frame for transmission */\r
-       #define ETH_MAC_MII_TRANSMIT_ACTIVE      ((uint32_t)0x00010000)  /* MAC MII transmit engine active */\r
-       #define ETH_MAC_RXFIFO_EMPTY             ((uint32_t)0x00000000)  /* Rx FIFO fill level: empty */\r
-       #define ETH_MAC_RXFIFO_BELOW_THRESHOLD   ((uint32_t)0x00000100)  /* Rx FIFO fill level: fill-level below flow-control de-activate threshold */\r
-       #define ETH_MAC_RXFIFO_ABOVE_THRESHOLD   ((uint32_t)0x00000200)  /* Rx FIFO fill level: fill-level above flow-control activate threshold */\r
-       #define ETH_MAC_RXFIFO_FULL              ((uint32_t)0x00000300)  /* Rx FIFO fill level: full */\r
-       #define ETH_MAC_READCONTROLLER_IDLE            ((uint32_t)0x00000060)  /* Rx FIFO read controller IDLE state */\r
-       #define ETH_MAC_READCONTROLLER_READING_DATA    ((uint32_t)0x00000060)  /* Rx FIFO read controller Reading frame data */\r
-       #define ETH_MAC_READCONTROLLER_READING_STATUS  ((uint32_t)0x00000060)  /* Rx FIFO read controller Reading frame status (or time-stamp) */\r
-       #define ETH_MAC_READCONTROLLER_ FLUSHING       ((uint32_t)0x00000060)  /* Rx FIFO read controller Flushing the frame data and status */\r
-       #define ETH_MAC_RXFIFO_WRITE_ACTIVE     ((uint32_t)0x00000010)  /* Rx FIFO write controller active */\r
-       #define ETH_MAC_SMALL_FIFO_NOTACTIVE    ((uint32_t)0x00000000)  /* MAC small FIFO read / write controllers not active */\r
-       #define ETH_MAC_SMALL_FIFO_READ_ACTIVE  ((uint32_t)0x00000002)  /* MAC small FIFO read controller active */\r
-       #define ETH_MAC_SMALL_FIFO_WRITE_ACTIVE ((uint32_t)0x00000004)  /* MAC small FIFO write controller active */\r
-       #define ETH_MAC_SMALL_FIFO_RW_ACTIVE    ((uint32_t)0x00000006)  /* MAC small FIFO read / write controllers active */\r
-       #define ETH_MAC_MII_RECEIVE_PROTOCOL_ACTIVE   ((uint32_t)0x00000001)  /* MAC MII receive protocol engine active */\r
-#else\r
-       /* stm32_hal_legacy.h has probably been included. That file defines 'ETH_MAC_TXFIFO_FULL' and all macro's here below. */\r
-#endif\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Drop_TCP_IP_Checksum_Error_Frame ETH Drop TCP IP Checksum Error Frame\r
-  * @{\r
-  */\r
-#define ETH_DROPTCPIPCHECKSUMERRORFRAME_ENABLE   ((uint32_t)0x00000000U)\r
-#define ETH_DROPTCPIPCHECKSUMERRORFRAME_DISABLE  ((uint32_t)0x04000000U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Receive_Store_Forward ETH Receive Store Forward\r
-  * @{\r
-  */\r
-#define ETH_RECEIVESTOREFORWARD_ENABLE      ((uint32_t)0x02000000U)\r
-#define ETH_RECEIVESTOREFORWARD_DISABLE     ((uint32_t)0x00000000U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Flush_Received_Frame ETH Flush Received Frame\r
-  * @{\r
-  */\r
-#define ETH_FLUSHRECEIVEDFRAME_ENABLE       ((uint32_t)0x00000000U)\r
-#define ETH_FLUSHRECEIVEDFRAME_DISABLE      ((uint32_t)0x01000000U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Transmit_Store_Forward ETH Transmit Store Forward\r
-  * @{\r
-  */\r
-#define ETH_TRANSMITSTOREFORWARD_ENABLE     ((uint32_t)0x00200000U)\r
-#define ETH_TRANSMITSTOREFORWARD_DISABLE    ((uint32_t)0x00000000U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Transmit_Threshold_Control ETH Transmit Threshold Control\r
-  * @{\r
-  */\r
-#define ETH_TRANSMITTHRESHOLDCONTROL_64BYTES     ((uint32_t)0x00000000U)  /*!< threshold level of the MTL Transmit FIFO is 64 Bytes */\r
-#define ETH_TRANSMITTHRESHOLDCONTROL_128BYTES    ((uint32_t)0x00004000U)  /*!< threshold level of the MTL Transmit FIFO is 128 Bytes */\r
-#define ETH_TRANSMITTHRESHOLDCONTROL_192BYTES    ((uint32_t)0x00008000U)  /*!< threshold level of the MTL Transmit FIFO is 192 Bytes */\r
-#define ETH_TRANSMITTHRESHOLDCONTROL_256BYTES    ((uint32_t)0x0000C000U)  /*!< threshold level of the MTL Transmit FIFO is 256 Bytes */\r
-#define ETH_TRANSMITTHRESHOLDCONTROL_40BYTES     ((uint32_t)0x00010000U)  /*!< threshold level of the MTL Transmit FIFO is 40 Bytes */\r
-#define ETH_TRANSMITTHRESHOLDCONTROL_32BYTES     ((uint32_t)0x00014000U)  /*!< threshold level of the MTL Transmit FIFO is 32 Bytes */\r
-#define ETH_TRANSMITTHRESHOLDCONTROL_24BYTES     ((uint32_t)0x00018000U)  /*!< threshold level of the MTL Transmit FIFO is 24 Bytes */\r
-#define ETH_TRANSMITTHRESHOLDCONTROL_16BYTES     ((uint32_t)0x0001C000U)  /*!< threshold level of the MTL Transmit FIFO is 16 Bytes */\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Forward_Error_Frames ETH Forward Error Frames\r
-  * @{\r
-  */\r
-#define ETH_FORWARDERRORFRAMES_ENABLE       ((uint32_t)0x00000080U)\r
-#define ETH_FORWARDERRORFRAMES_DISABLE      ((uint32_t)0x00000000U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Forward_Undersized_Good_Frames ETH Forward Undersized Good Frames\r
-  * @{\r
-  */\r
-#define ETH_FORWARDUNDERSIZEDGOODFRAMES_ENABLE   ((uint32_t)0x00000040U)\r
-#define ETH_FORWARDUNDERSIZEDGOODFRAMES_DISABLE  ((uint32_t)0x00000000U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Receive_Threshold_Control ETH Receive Threshold Control\r
-  * @{\r
-  */\r
-#define ETH_RECEIVEDTHRESHOLDCONTROL_64BYTES      ((uint32_t)0x00000000U)  /*!< threshold level of the MTL Receive FIFO is 64 Bytes */\r
-#define ETH_RECEIVEDTHRESHOLDCONTROL_32BYTES      ((uint32_t)0x00000008U)  /*!< threshold level of the MTL Receive FIFO is 32 Bytes */\r
-#define ETH_RECEIVEDTHRESHOLDCONTROL_96BYTES      ((uint32_t)0x00000010U)  /*!< threshold level of the MTL Receive FIFO is 96 Bytes */\r
-#define ETH_RECEIVEDTHRESHOLDCONTROL_128BYTES     ((uint32_t)0x00000018U)  /*!< threshold level of the MTL Receive FIFO is 128 Bytes */\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Second_Frame_Operate ETH Second Frame Operate\r
-  * @{\r
-  */\r
-#define ETH_SECONDFRAMEOPERARTE_ENABLE       ((uint32_t)0x00000004U)\r
-#define ETH_SECONDFRAMEOPERARTE_DISABLE      ((uint32_t)0x00000000U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Address_Aligned_Beats ETH Address Aligned Beats\r
-  * @{\r
-  */\r
-#define ETH_ADDRESSALIGNEDBEATS_ENABLE      ((uint32_t)0x02000000U)\r
-#define ETH_ADDRESSALIGNEDBEATS_DISABLE     ((uint32_t)0x00000000U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Fixed_Burst ETH Fixed Burst\r
-  * @{\r
-  */\r
-#define ETH_FIXEDBURST_ENABLE     ((uint32_t)0x00010000U)\r
-#define ETH_FIXEDBURST_DISABLE    ((uint32_t)0x00000000U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Rx_DMA_Burst_Length ETH Rx DMA Burst Length\r
-  * @{\r
-  */\r
-#define ETH_RXDMABURSTLENGTH_1BEAT          ((uint32_t)0x00020000U)  /*!< maximum number of beats to be transferred in one RxDMA transaction is 1 */\r
-#define ETH_RXDMABURSTLENGTH_2BEAT          ((uint32_t)0x00040000U)  /*!< maximum number of beats to be transferred in one RxDMA transaction is 2 */\r
-#define ETH_RXDMABURSTLENGTH_4BEAT          ((uint32_t)0x00080000U)  /*!< maximum number of beats to be transferred in one RxDMA transaction is 4 */\r
-#define ETH_RXDMABURSTLENGTH_8BEAT          ((uint32_t)0x00100000U)  /*!< maximum number of beats to be transferred in one RxDMA transaction is 8 */\r
-#define ETH_RXDMABURSTLENGTH_16BEAT         ((uint32_t)0x00200000U)  /*!< maximum number of beats to be transferred in one RxDMA transaction is 16 */\r
-#define ETH_RXDMABURSTLENGTH_32BEAT         ((uint32_t)0x00400000U)  /*!< maximum number of beats to be transferred in one RxDMA transaction is 32 */\r
-#define ETH_RXDMABURSTLENGTH_4XPBL_4BEAT    ((uint32_t)0x01020000U)  /*!< maximum number of beats to be transferred in one RxDMA transaction is 4 */\r
-#define ETH_RXDMABURSTLENGTH_4XPBL_8BEAT    ((uint32_t)0x01040000U)  /*!< maximum number of beats to be transferred in one RxDMA transaction is 8 */\r
-#define ETH_RXDMABURSTLENGTH_4XPBL_16BEAT   ((uint32_t)0x01080000U)  /*!< maximum number of beats to be transferred in one RxDMA transaction is 16 */\r
-#define ETH_RXDMABURSTLENGTH_4XPBL_32BEAT   ((uint32_t)0x01100000U)  /*!< maximum number of beats to be transferred in one RxDMA transaction is 32 */\r
-#define ETH_RXDMABURSTLENGTH_4XPBL_64BEAT   ((uint32_t)0x01200000U)  /*!< maximum number of beats to be transferred in one RxDMA transaction is 64 */\r
-#define ETH_RXDMABURSTLENGTH_4XPBL_128BEAT  ((uint32_t)0x01400000U)  /*!< maximum number of beats to be transferred in one RxDMA transaction is 128 */\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_Tx_DMA_Burst_Length ETH Tx DMA Burst Length\r
-  * @{\r
-  */\r
-#define ETH_TXDMABURSTLENGTH_1BEAT          ((uint32_t)0x00000100U)  /*!< maximum number of beats to be transferred in one TxDMA (or both) transaction is 1 */\r
-#define ETH_TXDMABURSTLENGTH_2BEAT          ((uint32_t)0x00000200U)  /*!< maximum number of beats to be transferred in one TxDMA (or both) transaction is 2 */\r
-#define ETH_TXDMABURSTLENGTH_4BEAT          ((uint32_t)0x00000400U)  /*!< maximum number of beats to be transferred in one TxDMA (or both) transaction is 4 */\r
-#define ETH_TXDMABURSTLENGTH_8BEAT          ((uint32_t)0x00000800U)  /*!< maximum number of beats to be transferred in one TxDMA (or both) transaction is 8 */\r
-#define ETH_TXDMABURSTLENGTH_16BEAT         ((uint32_t)0x00001000U)  /*!< maximum number of beats to be transferred in one TxDMA (or both) transaction is 16 */\r
-#define ETH_TXDMABURSTLENGTH_32BEAT         ((uint32_t)0x00002000U)  /*!< maximum number of beats to be transferred in one TxDMA (or both) transaction is 32 */\r
-#define ETH_TXDMABURSTLENGTH_4XPBL_4BEAT    ((uint32_t)0x01000100U)  /*!< maximum number of beats to be transferred in one TxDMA (or both) transaction is 4 */\r
-#define ETH_TXDMABURSTLENGTH_4XPBL_8BEAT    ((uint32_t)0x01000200U)  /*!< maximum number of beats to be transferred in one TxDMA (or both) transaction is 8 */\r
-#define ETH_TXDMABURSTLENGTH_4XPBL_16BEAT   ((uint32_t)0x01000400U)  /*!< maximum number of beats to be transferred in one TxDMA (or both) transaction is 16 */\r
-#define ETH_TXDMABURSTLENGTH_4XPBL_32BEAT   ((uint32_t)0x01000800U)  /*!< maximum number of beats to be transferred in one TxDMA (or both) transaction is 32 */\r
-#define ETH_TXDMABURSTLENGTH_4XPBL_64BEAT   ((uint32_t)0x01001000U)  /*!< maximum number of beats to be transferred in one TxDMA (or both) transaction is 64 */\r
-#define ETH_TXDMABURSTLENGTH_4XPBL_128BEAT  ((uint32_t)0x01002000U)  /*!< maximum number of beats to be transferred in one TxDMA (or both) transaction is 128 */\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_DMA_Enhanced_descriptor_format ETH DMA Enhanced descriptor format\r
-  * @{\r
-  */\r
-#define ETH_DMAENHANCEDDESCRIPTOR_ENABLE              ((uint32_t)0x00000080U)\r
-#define ETH_DMAENHANCEDDESCRIPTOR_DISABLE             ((uint32_t)0x00000000U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_DMA_Arbitration ETH DMA Arbitration\r
-  * @{\r
-  */\r
-#define ETH_DMAARBITRATION_ROUNDROBIN_RXTX_1_1   ((uint32_t)0x00000000U)\r
-#define ETH_DMAARBITRATION_ROUNDROBIN_RXTX_2_1   ((uint32_t)0x00004000U)\r
-#define ETH_DMAARBITRATION_ROUNDROBIN_RXTX_3_1   ((uint32_t)0x00008000U)\r
-#define ETH_DMAARBITRATION_ROUNDROBIN_RXTX_4_1   ((uint32_t)0x0000C000U)\r
-#define ETH_DMAARBITRATION_RXPRIORTX             ((uint32_t)0x00000002U)\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_DMA_Tx_descriptor_segment ETH DMA Tx descriptor segment\r
-  * @{\r
-  */\r
-#define ETH_DMATXDESC_LASTSEGMENTS      ((uint32_t)0x40000000U)  /*!< Last Segment */\r
-#define ETH_DMATXDESC_FIRSTSEGMENT      ((uint32_t)0x20000000U)  /*!< First Segment */\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_DMA_Tx_descriptor_Checksum_Insertion_Control ETH DMA Tx descriptor Checksum Insertion Control\r
-  * @{\r
-  */\r
-#define ETH_DMATXDESC_CHECKSUMBYPASS             ((uint32_t)0x00000000U)   /*!< Checksum engine bypass */\r
-#define ETH_DMATXDESC_CHECKSUMIPV4HEADER         ((uint32_t)0x00400000U)   /*!< IPv4 header checksum insertion  */\r
-#define ETH_DMATXDESC_CHECKSUMTCPUDPICMPSEGMENT  ((uint32_t)0x00800000U)   /*!< TCP/UDP/ICMP checksum insertion. Pseudo header checksum is assumed to be present */\r
-#define ETH_DMATXDESC_CHECKSUMTCPUDPICMPFULL     ((uint32_t)0x00C00000U)   /*!< TCP/UDP/ICMP checksum fully in hardware including pseudo header */\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_DMA_Rx_descriptor_buffers ETH DMA Rx descriptor buffers\r
-  * @{\r
-  */\r
-#define ETH_DMARXDESC_BUFFER1     ((uint32_t)0x00000000U)  /*!< DMA Rx Desc Buffer1 */\r
-#define ETH_DMARXDESC_BUFFER2     ((uint32_t)0x00000001U)  /*!< DMA Rx Desc Buffer2 */\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_PMT_Flags ETH PMT Flags\r
-  * @{\r
-  */\r
-#define ETH_PMT_FLAG_WUFFRPR      ((uint32_t)0x80000000U)  /*!< Wake-Up Frame Filter Register Pointer Reset */\r
-#define ETH_PMT_FLAG_WUFR         ((uint32_t)0x00000040U)  /*!< Wake-Up Frame Received */\r
-#define ETH_PMT_FLAG_MPR          ((uint32_t)0x00000020U)  /*!< Magic Packet Received */\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_MMC_Tx_Interrupts ETH MMC Tx Interrupts\r
-  * @{\r
-  */\r
-#define ETH_MMC_IT_TGF       ((uint32_t)0x00200000U)  /*!< When Tx good frame counter reaches half the maximum value */\r
-#define ETH_MMC_IT_TGFMSC    ((uint32_t)0x00008000U)  /*!< When Tx good multi col counter reaches half the maximum value */\r
-#define ETH_MMC_IT_TGFSC     ((uint32_t)0x00004000U)  /*!< When Tx good single col counter reaches half the maximum value */\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_MMC_Rx_Interrupts ETH MMC Rx Interrupts\r
-  * @{\r
-  */\r
-#define ETH_MMC_IT_RGUF      ((uint32_t)0x10020000U)  /*!< When Rx good unicast frames counter reaches half the maximum value */\r
-#define ETH_MMC_IT_RFAE      ((uint32_t)0x10000040U)  /*!< When Rx alignment error counter reaches half the maximum value */\r
-#define ETH_MMC_IT_RFCE      ((uint32_t)0x10000020U)  /*!< When Rx crc error counter reaches half the maximum value */\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_MAC_Flags ETH MAC Flags\r
-  * @{\r
-  */\r
-#define ETH_MAC_FLAG_TST     ((uint32_t)0x00000200U)  /*!< Time stamp trigger flag (on MAC) */\r
-#define ETH_MAC_FLAG_MMCT    ((uint32_t)0x00000040U)  /*!< MMC transmit flag  */\r
-#define ETH_MAC_FLAG_MMCR    ((uint32_t)0x00000020U)  /*!< MMC receive flag */\r
-#define ETH_MAC_FLAG_MMC     ((uint32_t)0x00000010U)  /*!< MMC flag (on MAC) */\r
-#define ETH_MAC_FLAG_PMT     ((uint32_t)0x00000008U)  /*!< PMT flag (on MAC) */\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_DMA_Flags ETH DMA Flags\r
-  * @{\r
-  */\r
-#define ETH_DMA_FLAG_TST               ((uint32_t)0x20000000U)  /*!< Time-stamp trigger interrupt (on DMA) */\r
-#define ETH_DMA_FLAG_PMT               ((uint32_t)0x10000000U)  /*!< PMT interrupt (on DMA) */\r
-#define ETH_DMA_FLAG_MMC               ((uint32_t)0x08000000U)  /*!< MMC interrupt (on DMA) */\r
-#define ETH_DMA_FLAG_DATATRANSFERERROR ((uint32_t)0x00800000U)  /*!< Error bits 0-Rx DMA, 1-Tx DMA */\r
-#define ETH_DMA_FLAG_READWRITEERROR    ((uint32_t)0x01000000U)  /*!< Error bits 0-write transfer, 1-read transfer */\r
-#define ETH_DMA_FLAG_ACCESSERROR       ((uint32_t)0x02000000U)  /*!< Error bits 0-data buffer, 1-desc. access */\r
-#define ETH_DMA_FLAG_NIS               ((uint32_t)0x00010000U)  /*!< Normal interrupt summary flag */\r
-#define ETH_DMA_FLAG_AIS               ((uint32_t)0x00008000U)  /*!< Abnormal interrupt summary flag */\r
-#define ETH_DMA_FLAG_ER                ((uint32_t)0x00004000U)  /*!< Early receive flag */\r
-#define ETH_DMA_FLAG_FBE               ((uint32_t)0x00002000U)  /*!< Fatal bus error flag */\r
-#define ETH_DMA_FLAG_ET                ((uint32_t)0x00000400U)  /*!< Early transmit flag */\r
-#define ETH_DMA_FLAG_RWT               ((uint32_t)0x00000200U)  /*!< Receive watchdog timeout flag */\r
-#define ETH_DMA_FLAG_RPS               ((uint32_t)0x00000100U)  /*!< Receive process stopped flag */\r
-#define ETH_DMA_FLAG_RBU               ((uint32_t)0x00000080U)  /*!< Receive buffer unavailable flag */\r
-#define ETH_DMA_FLAG_R                 ((uint32_t)0x00000040U)  /*!< Receive flag */\r
-#define ETH_DMA_FLAG_TU                ((uint32_t)0x00000020U)  /*!< Underflow flag */\r
-#define ETH_DMA_FLAG_RO                ((uint32_t)0x00000010U)  /*!< Overflow flag */\r
-#define ETH_DMA_FLAG_TJT               ((uint32_t)0x00000008U)  /*!< Transmit jabber timeout flag */\r
-#define ETH_DMA_FLAG_TBU               ((uint32_t)0x00000004U)  /*!< Transmit buffer unavailable flag */\r
-#define ETH_DMA_FLAG_TPS               ((uint32_t)0x00000002U)  /*!< Transmit process stopped flag */\r
-#define ETH_DMA_FLAG_T                 ((uint32_t)0x00000001U)  /*!< Transmit flag */\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_MAC_Interrupts ETH MAC Interrupts\r
-  * @{\r
-  */\r
-#define ETH_MAC_IT_TST       ((uint32_t)0x00000200U)  /*!< Time stamp trigger interrupt (on MAC) */\r
-#define ETH_MAC_IT_MMCT      ((uint32_t)0x00000040U)  /*!< MMC transmit interrupt */\r
-#define ETH_MAC_IT_MMCR      ((uint32_t)0x00000020U)  /*!< MMC receive interrupt */\r
-#define ETH_MAC_IT_MMC       ((uint32_t)0x00000010U)  /*!< MMC interrupt (on MAC) */\r
-#define ETH_MAC_IT_PMT       ((uint32_t)0x00000008U)  /*!< PMT interrupt (on MAC) */\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_DMA_Interrupts ETH DMA Interrupts\r
-  * @{\r
-  */\r
-#define ETH_DMA_IT_TST       ((uint32_t)0x20000000U)  /*!< Time-stamp trigger interrupt (on DMA) */\r
-#define ETH_DMA_IT_PMT       ((uint32_t)0x10000000U)  /*!< PMT interrupt (on DMA) */\r
-#define ETH_DMA_IT_MMC       ((uint32_t)0x08000000U)  /*!< MMC interrupt (on DMA) */\r
-#define ETH_DMA_IT_NIS       ((uint32_t)0x00010000U)  /*!< Normal interrupt summary */\r
-#define ETH_DMA_IT_AIS       ((uint32_t)0x00008000U)  /*!< Abnormal interrupt summary */\r
-#define ETH_DMA_IT_ER        ((uint32_t)0x00004000U)  /*!< Early receive interrupt */\r
-#define ETH_DMA_IT_FBE       ((uint32_t)0x00002000U)  /*!< Fatal bus error interrupt */\r
-#define ETH_DMA_IT_ET        ((uint32_t)0x00000400U)  /*!< Early transmit interrupt */\r
-#define ETH_DMA_IT_RWT       ((uint32_t)0x00000200U)  /*!< Receive watchdog timeout interrupt */\r
-#define ETH_DMA_IT_RPS       ((uint32_t)0x00000100U)  /*!< Receive process stopped interrupt */\r
-#define ETH_DMA_IT_RBU       ((uint32_t)0x00000080U)  /*!< Receive buffer unavailable interrupt */\r
-#define ETH_DMA_IT_R         ((uint32_t)0x00000040U)  /*!< Receive interrupt */\r
-#define ETH_DMA_IT_TU        ((uint32_t)0x00000020U)  /*!< Underflow interrupt */\r
-#define ETH_DMA_IT_RO        ((uint32_t)0x00000010U)  /*!< Overflow interrupt */\r
-#define ETH_DMA_IT_TJT       ((uint32_t)0x00000008U)  /*!< Transmit jabber timeout interrupt */\r
-#define ETH_DMA_IT_TBU       ((uint32_t)0x00000004U)  /*!< Transmit buffer unavailable interrupt */\r
-#define ETH_DMA_IT_TPS       ((uint32_t)0x00000002U)  /*!< Transmit process stopped interrupt */\r
-#define ETH_DMA_IT_T         ((uint32_t)0x00000001U)  /*!< Transmit interrupt */\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_DMA_transmit_process_state ETH DMA transmit process state\r
-  * @{\r
-  */\r
-#define ETH_DMA_TRANSMITPROCESS_STOPPED     ((uint32_t)0x00000000U)  /*!< Stopped - Reset or Stop Tx Command issued */\r
-#define ETH_DMA_TRANSMITPROCESS_FETCHING    ((uint32_t)0x00100000U)  /*!< Running - fetching the Tx descriptor */\r
-#define ETH_DMA_TRANSMITPROCESS_WAITING     ((uint32_t)0x00200000U)  /*!< Running - waiting for status */\r
-#define ETH_DMA_TRANSMITPROCESS_READING     ((uint32_t)0x00300000U)  /*!< Running - reading the data from host memory */\r
-#define ETH_DMA_TRANSMITPROCESS_SUSPENDED   ((uint32_t)0x00600000U)  /*!< Suspended - Tx Descriptor unavailable */\r
-#define ETH_DMA_TRANSMITPROCESS_CLOSING     ((uint32_t)0x00700000U)  /*!< Running - closing Rx descriptor */\r
-\r
-/**\r
-  * @}\r
-  */\r
-\r
-\r
-/** @defgroup ETH_DMA_receive_process_state ETH DMA receive process state\r
-  * @{\r
-  */\r
-#define ETH_DMA_RECEIVEPROCESS_STOPPED      ((uint32_t)0x00000000U)  /*!< Stopped - Reset or Stop Rx Command issued */\r
-#define ETH_DMA_RECEIVEPROCESS_FETCHING     ((uint32_t)0x00020000U)  /*!< Running - fetching the Rx descriptor */\r
-#define ETH_DMA_RECEIVEPROCESS_WAITING      ((uint32_t)0x00060000U)  /*!< Running - waiting for packet */\r
-#define ETH_DMA_RECEIVEPROCESS_SUSPENDED    ((uint32_t)0x00080000U)  /*!< Suspended - Rx Descriptor unavailable */\r
-#define ETH_DMA_RECEIVEPROCESS_CLOSING      ((uint32_t)0x000A0000U)  /*!< Running - closing descriptor */\r
-#define ETH_DMA_RECEIVEPROCESS_QUEUING      ((uint32_t)0x000E0000U)  /*!< Running - queuing the receive frame into host memory */\r
-\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_DMA_overflow ETH DMA overflow\r
-  * @{\r
-  */\r
-#define ETH_DMA_OVERFLOW_RXFIFOCOUNTER      ((uint32_t)0x10000000U)  /*!< Overflow bit for FIFO overflow counter */\r
-#define ETH_DMA_OVERFLOW_MISSEDFRAMECOUNTER ((uint32_t)0x00010000U)  /*!< Overflow bit for missed frame counter */\r
-/**\r
-  * @}\r
-  */\r
-\r
-/** @defgroup ETH_EXTI_LINE_WAKEUP ETH EXTI LINE WAKEUP\r
-  * @{\r
-  */\r
-#define ETH_EXTI_LINE_WAKEUP              ((uint32_t)0x00080000U)  /*!< External interrupt line 19 Connected to the ETH EXTI Line */\r
-\r
-/**\r
-  * @}\r
-  */\r
-\r
-/**\r
-  * @}\r
-  */\r
-\r
-/* Exported macro ------------------------------------------------------------*/\r
-/** @defgroup ETH_Exported_Macros ETH Exported Macros\r
- *  @brief macros to handle interrupts and specific clock configurations\r
- * @{\r
- */\r
-\r
-/** @brief Reset ETH handle state\r
-  * @param  __HANDLE__: specifies the ETH handle.\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_ETH_STATE_RESET)\r
-\r
-/**\r
-  * @brief  Checks whether the specified Ethernet DMA Tx Desc flag is set or not.\r
-  * @param  __HANDLE__: ETH Handle\r
-  * @param  __FLAG__: specifies the flag of TDES0 to check.\r
-  * @retval the ETH_DMATxDescFlag (SET or RESET).\r
-  */\r
-#define __HAL_ETH_DMATXDESC_GET_FLAG(__HANDLE__, __FLAG__)             ((__HANDLE__)->TxDesc->Status & (__FLAG__) == (__FLAG__))\r
-\r
-/**\r
-  * @brief  Checks whether the specified Ethernet DMA Rx Desc flag is set or not.\r
-  * @param  __HANDLE__: ETH Handle\r
-  * @param  __FLAG__: specifies the flag of RDES0 to check.\r
-  * @retval the ETH_DMATxDescFlag (SET or RESET).\r
-  */\r
-#define __HAL_ETH_DMARXDESC_GET_FLAG(__HANDLE__, __FLAG__)             ((__HANDLE__)->RxDesc->Status & (__FLAG__) == (__FLAG__))\r
-\r
-/**\r
-  * @brief  Enables the specified DMA Rx Desc receive interrupt.\r
-  * @param  __HANDLE__: ETH Handle\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_DMARXDESC_ENABLE_IT(__HANDLE__)                          ((__HANDLE__)->RxDesc->ControlBufferSize &=(~(uint32_t)ETH_DMARXDESC_DIC))\r
-\r
-/**\r
-  * @brief  Disables the specified DMA Rx Desc receive interrupt.\r
-  * @param  __HANDLE__: ETH Handle\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_DMARXDESC_DISABLE_IT(__HANDLE__)                         ((__HANDLE__)->RxDesc->ControlBufferSize |= ETH_DMARXDESC_DIC)\r
-\r
-/**\r
-  * @brief  Set the specified DMA Rx Desc Own bit.\r
-  * @param  __HANDLE__: ETH Handle\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_DMARXDESC_SET_OWN_BIT(__HANDLE__)                           ((__HANDLE__)->RxDesc->Status |= ETH_DMARXDESC_OWN)\r
-\r
-/**\r
-  * @brief  Returns the specified Ethernet DMA Tx Desc collision count.\r
-  * @param  __HANDLE__: ETH Handle\r
-  * @retval The Transmit descriptor collision counter value.\r
-  */\r
-#define __HAL_ETH_DMATXDESC_GET_COLLISION_COUNT(__HANDLE__)                   (((__HANDLE__)->TxDesc->Status & ETH_DMATXDESC_CC) >> ETH_DMATXDESC_COLLISION_COUNTSHIFT)\r
-\r
-/**\r
-  * @brief  Set the specified DMA Tx Desc Own bit.\r
-  * @param  __HANDLE__: ETH Handle\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_DMATXDESC_SET_OWN_BIT(__HANDLE__)                       ((__HANDLE__)->TxDesc->Status |= ETH_DMATXDESC_OWN)\r
-\r
-/**\r
-  * @brief  Enables the specified DMA Tx Desc Transmit interrupt.\r
-  * @param  __HANDLE__: ETH Handle\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_DMATXDESC_ENABLE_IT(__HANDLE__)                          ((__HANDLE__)->TxDesc->Status |= ETH_DMATXDESC_IC)\r
-\r
-/**\r
-  * @brief  Disables the specified DMA Tx Desc Transmit interrupt.\r
-  * @param  __HANDLE__: ETH Handle\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_DMATXDESC_DISABLE_IT(__HANDLE__)                          ((__HANDLE__)->TxDesc->Status &= ~ETH_DMATXDESC_IC)\r
-\r
-/**\r
-  * @brief  Selects the specified Ethernet DMA Tx Desc Checksum Insertion.\r
-  * @param  __HANDLE__: ETH Handle\r
-  * @param  __CHECKSUM__: specifies is the DMA Tx desc checksum insertion.\r
-  *   This parameter can be one of the following values:\r
-  *     @arg ETH_DMATXDESC_CHECKSUMBYPASS : Checksum bypass\r
-  *     @arg ETH_DMATXDESC_CHECKSUMIPV4HEADER : IPv4 header checksum\r
-  *     @arg ETH_DMATXDESC_CHECKSUMTCPUDPICMPSEGMENT : TCP/UDP/ICMP checksum. Pseudo header checksum is assumed to be present\r
-  *     @arg ETH_DMATXDESC_CHECKSUMTCPUDPICMPFULL : TCP/UDP/ICMP checksum fully in hardware including pseudo header\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_DMATXDESC_CHECKSUM_INSERTION(__HANDLE__, __CHECKSUM__)     ((__HANDLE__)->TxDesc->Status |= (__CHECKSUM__))\r
-\r
-/**\r
-  * @brief  Enables the DMA Tx Desc CRC.\r
-  * @param  __HANDLE__: ETH Handle\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_DMATXDESC_CRC_ENABLE(__HANDLE__)                          ((__HANDLE__)->TxDesc->Status &= ~ETH_DMATXDESC_DC)\r
-\r
-/**\r
-  * @brief  Disables the DMA Tx Desc CRC.\r
-  * @param  __HANDLE__: ETH Handle\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_DMATXDESC_CRC_DISABLE(__HANDLE__)                         ((__HANDLE__)->TxDesc->Status |= ETH_DMATXDESC_DC)\r
-\r
-/**\r
-  * @brief  Enables the DMA Tx Desc padding for frame shorter than 64 bytes.\r
-  * @param  __HANDLE__: ETH Handle\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_DMATXDESC_SHORT_FRAME_PADDING_ENABLE(__HANDLE__)            ((__HANDLE__)->TxDesc->Status &= ~ETH_DMATXDESC_DP)\r
-\r
-/**\r
-  * @brief  Disables the DMA Tx Desc padding for frame shorter than 64 bytes.\r
-  * @param  __HANDLE__: ETH Handle\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_DMATXDESC_SHORT_FRAME_PADDING_DISABLE(__HANDLE__)           ((__HANDLE__)->TxDesc->Status |= ETH_DMATXDESC_DP)\r
-\r
-/**\r
- * @brief  Enables the specified Ethernet MAC interrupts.\r
-  * @param  __HANDLE__   : ETH Handle\r
-  * @param  __INTERRUPT__: specifies the Ethernet MAC interrupt sources to be\r
-  *   enabled or disabled.\r
-  *   This parameter can be any combination of the following values:\r
-  *     @arg ETH_MAC_IT_TST : Time stamp trigger interrupt\r
-  *     @arg ETH_MAC_IT_PMT : PMT interrupt\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_MAC_ENABLE_IT(__HANDLE__, __INTERRUPT__)                 ((__HANDLE__)->Instance->MACIMR |= (__INTERRUPT__))\r
-\r
-/**\r
-  * @brief  Disables the specified Ethernet MAC interrupts.\r
-  * @param  __HANDLE__   : ETH Handle\r
-  * @param  __INTERRUPT__: specifies the Ethernet MAC interrupt sources to be\r
-  *   enabled or disabled.\r
-  *   This parameter can be any combination of the following values:\r
-  *     @arg ETH_MAC_IT_TST : Time stamp trigger interrupt\r
-  *     @arg ETH_MAC_IT_PMT : PMT interrupt\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_MAC_DISABLE_IT(__HANDLE__, __INTERRUPT__)                ((__HANDLE__)->Instance->MACIMR &= ~(__INTERRUPT__))\r
-\r
-/**\r
-  * @brief  Initiate a Pause Control Frame (Full-duplex only).\r
-  * @param  __HANDLE__: ETH Handle\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_INITIATE_PAUSE_CONTROL_FRAME(__HANDLE__)              ((__HANDLE__)->Instance->MACFCR |= ETH_MACFCR_FCBBPA)\r
-\r
-/**\r
-  * @brief  Checks whether the Ethernet flow control busy bit is set or not.\r
-  * @param  __HANDLE__: ETH Handle\r
-  * @retval The new state of flow control busy status bit (SET or RESET).\r
-  */\r
-#define __HAL_ETH_GET_FLOW_CONTROL_BUSY_STATUS(__HANDLE__)               (((__HANDLE__)->Instance->MACFCR & ETH_MACFCR_FCBBPA) == ETH_MACFCR_FCBBPA)\r
-\r
-/**\r
-  * @brief  Enables the MAC Back Pressure operation activation (Half-duplex only).\r
-  * @param  __HANDLE__: ETH Handle\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_BACK_PRESSURE_ACTIVATION_ENABLE(__HANDLE__)          ((__HANDLE__)->Instance->MACFCR |= ETH_MACFCR_FCBBPA)\r
-\r
-/**\r
-  * @brief  Disables the MAC BackPressure operation activation (Half-duplex only).\r
-  * @param  __HANDLE__: ETH Handle\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_BACK_PRESSURE_ACTIVATION_DISABLE(__HANDLE__)         ((__HANDLE__)->Instance->MACFCR &= ~ETH_MACFCR_FCBBPA)\r
-\r
-/**\r
-  * @brief  Checks whether the specified Ethernet MAC flag is set or not.\r
-  * @param  __HANDLE__: ETH Handle\r
-  * @param  __FLAG__: specifies the flag to check.\r
-  *   This parameter can be one of the following values:\r
-  *     @arg ETH_MAC_FLAG_TST  : Time stamp trigger flag\r
-  *     @arg ETH_MAC_FLAG_MMCT : MMC transmit flag\r
-  *     @arg ETH_MAC_FLAG_MMCR : MMC receive flag\r
-  *     @arg ETH_MAC_FLAG_MMC  : MMC flag\r
-  *     @arg ETH_MAC_FLAG_PMT  : PMT flag\r
-  * @retval The state of Ethernet MAC flag.\r
-  */\r
-#define __HAL_ETH_MAC_GET_FLAG(__HANDLE__, __FLAG__)                   (((__HANDLE__)->Instance->MACSR &( __FLAG__)) == ( __FLAG__))\r
-\r
-/**\r
-  * @brief  Enables the specified Ethernet DMA interrupts.\r
-  * @param  __HANDLE__   : ETH Handle\r
-  * @param  __INTERRUPT__: specifies the Ethernet DMA interrupt sources to be\r
-  *   enabled @ref ETH_DMA_Interrupts\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_DMA_ENABLE_IT(__HANDLE__, __INTERRUPT__)                 ((__HANDLE__)->Instance->DMAIER |= (__INTERRUPT__))\r
-\r
-/**\r
-  * @brief  Disables the specified Ethernet DMA interrupts.\r
-  * @param  __HANDLE__   : ETH Handle\r
-  * @param  __INTERRUPT__: specifies the Ethernet DMA interrupt sources to be\r
-  *   disabled. @ref ETH_DMA_Interrupts\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_DMA_DISABLE_IT(__HANDLE__, __INTERRUPT__)                ((__HANDLE__)->Instance->DMAIER &= ~(__INTERRUPT__))\r
-\r
-/**\r
-  * @brief  Clears the Ethernet DMA IT pending bit.\r
-  * @param  __HANDLE__   : ETH Handle\r
-  * @param  __INTERRUPT__: specifies the interrupt pending bit to clear. @ref ETH_DMA_Interrupts\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_DMA_CLEAR_IT(__HANDLE__, __INTERRUPT__)      ((__HANDLE__)->Instance->DMASR =(__INTERRUPT__))\r
-\r
-/**\r
-  * @brief  Checks whether the specified Ethernet DMA flag is set or not.\r
-* @param  __HANDLE__: ETH Handle\r
-  * @param  __FLAG__: specifies the flag to check. @ref ETH_DMA_Flags\r
-  * @retval The new state of ETH_DMA_FLAG (SET or RESET).\r
-  */\r
-#define __HAL_ETH_DMA_GET_FLAG(__HANDLE__, __FLAG__)                   (((__HANDLE__)->Instance->DMASR &( __FLAG__)) == ( __FLAG__))\r
-\r
-/**\r
-  * @brief  Checks whether the specified Ethernet DMA flag is set or not.\r
-  * @param  __HANDLE__: ETH Handle\r
-  * @param  __FLAG__: specifies the flag to clear. @ref ETH_DMA_Flags\r
-  * @retval The new state of ETH_DMA_FLAG (SET or RESET).\r
-  */\r
-#define __HAL_ETH_DMA_CLEAR_FLAG(__HANDLE__, __FLAG__)                 ((__HANDLE__)->Instance->DMASR = (__FLAG__))\r
-\r
-/**\r
-  * @brief  Checks whether the specified Ethernet DMA overflow flag is set or not.\r
-  * @param  __HANDLE__: ETH Handle\r
-  * @param  __OVERFLOW__: specifies the DMA overflow flag to check.\r
-  *   This parameter can be one of the following values:\r
-  *     @arg ETH_DMA_OVERFLOW_RXFIFOCOUNTER : Overflow for FIFO Overflows Counter\r
-  *     @arg ETH_DMA_OVERFLOW_MISSEDFRAMECOUNTER : Overflow for Buffer Unavailable Missed Frame Counter\r
-  * @retval The state of Ethernet DMA overflow Flag (SET or RESET).\r
-  */\r
-#define __HAL_ETH_GET_DMA_OVERFLOW_STATUS(__HANDLE__, __OVERFLOW__)       (((__HANDLE__)->Instance->DMAMFBOCR & (__OVERFLOW__)) == (__OVERFLOW__))\r
-\r
-/**\r
-  * @brief  Set the DMA Receive status watchdog timer register value\r
-  * @param  __HANDLE__: ETH Handle\r
-  * @param  __VALUE__: DMA Receive status watchdog timer register value\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_SET_RECEIVE_WATCHDOG_TIMER(__HANDLE__, __VALUE__)       ((__HANDLE__)->Instance->DMARSWTR = (__VALUE__))\r
-\r
-/**\r
-  * @brief  Enables any unicast packet filtered by the MAC address\r
-  *   recognition to be a wake-up frame.\r
-  * @param  __HANDLE__: ETH Handle.\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_GLOBAL_UNICAST_WAKEUP_ENABLE(__HANDLE__)               ((__HANDLE__)->Instance->MACPMTCSR |= ETH_MACPMTCSR_GU)\r
-\r
-/**\r
-  * @brief  Disables any unicast packet filtered by the MAC address\r
-  *   recognition to be a wake-up frame.\r
-  * @param  __HANDLE__: ETH Handle.\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_GLOBAL_UNICAST_WAKEUP_DISABLE(__HANDLE__)              ((__HANDLE__)->Instance->MACPMTCSR &= ~ETH_MACPMTCSR_GU)\r
-\r
-/**\r
-  * @brief  Enables the MAC Wake-Up Frame Detection.\r
-  * @param  __HANDLE__: ETH Handle.\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_WAKEUP_FRAME_DETECTION_ENABLE(__HANDLE__)              ((__HANDLE__)->Instance->MACPMTCSR |= ETH_MACPMTCSR_WFE)\r
-\r
-/**\r
-  * @brief  Disables the MAC Wake-Up Frame Detection.\r
-  * @param  __HANDLE__: ETH Handle.\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_WAKEUP_FRAME_DETECTION_DISABLE(__HANDLE__)             ((__HANDLE__)->Instance->MACPMTCSR &= ~ETH_MACPMTCSR_WFE)\r
-\r
-/**\r
-  * @brief  Enables the MAC Magic Packet Detection.\r
-  * @param  __HANDLE__: ETH Handle.\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_MAGIC_PACKET_DETECTION_ENABLE(__HANDLE__)              ((__HANDLE__)->Instance->MACPMTCSR |= ETH_MACPMTCSR_MPE)\r
-\r
-/**\r
-  * @brief  Disables the MAC Magic Packet Detection.\r
-  * @param  __HANDLE__: ETH Handle.\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_MAGIC_PACKET_DETECTION_DISABLE(__HANDLE__)             ((__HANDLE__)->Instance->MACPMTCSR &= ~ETH_MACPMTCSR_WFE)\r
-\r
-/**\r
-  * @brief  Enables the MAC Power Down.\r
-  * @param  __HANDLE__: ETH Handle\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_POWER_DOWN_ENABLE(__HANDLE__)                         ((__HANDLE__)->Instance->MACPMTCSR |= ETH_MACPMTCSR_PD)\r
-\r
-/**\r
-  * @brief  Disables the MAC Power Down.\r
-  * @param  __HANDLE__: ETH Handle\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_POWER_DOWN_DISABLE(__HANDLE__)                        ((__HANDLE__)->Instance->MACPMTCSR &= ~ETH_MACPMTCSR_PD)\r
-\r
-/**\r
-  * @brief  Checks whether the specified Ethernet PMT flag is set or not.\r
-  * @param  __HANDLE__: ETH Handle.\r
-  * @param  __FLAG__: specifies the flag to check.\r
-  *   This parameter can be one of the following values:\r
-  *     @arg ETH_PMT_FLAG_WUFFRPR : Wake-Up Frame Filter Register Pointer Reset\r
-  *     @arg ETH_PMT_FLAG_WUFR    : Wake-Up Frame Received\r
-  *     @arg ETH_PMT_FLAG_MPR     : Magic Packet Received\r
-  * @retval The new state of Ethernet PMT Flag (SET or RESET).\r
-  */\r
-#define __HAL_ETH_GET_PMT_FLAG_STATUS(__HANDLE__, __FLAG__)               (((__HANDLE__)->Instance->MACPMTCSR &( __FLAG__)) == ( __FLAG__))\r
-\r
-/**\r
-  * @brief  Preset and Initialize the MMC counters to almost-full value: 0xFFFF_FFF0 (full - 16)\r
-  * @param   __HANDLE__: ETH Handle.\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_MMC_COUNTER_FULL_PRESET(__HANDLE__)                     ((__HANDLE__)->Instance->MMCCR |= (ETH_MMCCR_MCFHP | ETH_MMCCR_MCP))\r
-\r
-/**\r
-  * @brief  Preset and Initialize the MMC counters to almost-half value: 0x7FFF_FFF0 (half - 16)\r
-  * @param  __HANDLE__: ETH Handle.\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_MMC_COUNTER_HALF_PRESET(__HANDLE__)                     do{(__HANDLE__)->Instance->MMCCR &= ~ETH_MMCCR_MCFHP;\\r
-                                                                          (__HANDLE__)->Instance->MMCCR |= ETH_MMCCR_MCP;} while (0)\r
-\r
-/**\r
-  * @brief  Enables the MMC Counter Freeze.\r
-  * @param  __HANDLE__: ETH Handle.\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_MMC_COUNTER_FREEZE_ENABLE(__HANDLE__)                  ((__HANDLE__)->Instance->MMCCR |= ETH_MMCCR_MCF)\r
-\r
-/**\r
-  * @brief  Disables the MMC Counter Freeze.\r
-  * @param  __HANDLE__: ETH Handle.\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_MMC_COUNTER_FREEZE_DISABLE(__HANDLE__)                 ((__HANDLE__)->Instance->MMCCR &= ~ETH_MMCCR_MCF)\r
-\r
-/**\r
-  * @brief  Enables the MMC Reset On Read.\r
-  * @param  __HANDLE__: ETH Handle.\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_ETH_MMC_RESET_ONREAD_ENABLE(__HANDLE__)                ((__HANDLE__)->Instance->MMCCR |= ETH_MMCCR_ROR)\r
-\r
-/**\r
-  * @brief  Disables the MMC Reset On Read.\r
-  * @param  __HANDLE__: ETH Handle.\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_ETH_MMC_RESET_ONREAD_DISABLE(__HANDLE__)               ((__HANDLE__)->Instance->MMCCR &= ~ETH_MMCCR_ROR)\r
-\r
-/**\r
-  * @brief  Enables the MMC Counter Stop Rollover.\r
-  * @param  __HANDLE__: ETH Handle.\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_ETH_MMC_COUNTER_ROLLOVER_ENABLE(__HANDLE__)            ((__HANDLE__)->Instance->MMCCR &= ~ETH_MMCCR_CSR)\r
-\r
-/**\r
-  * @brief  Disables the MMC Counter Stop Rollover.\r
-  * @param  __HANDLE__: ETH Handle.\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_ETH_MMC_COUNTER_ROLLOVER_DISABLE(__HANDLE__)           ((__HANDLE__)->Instance->MMCCR |= ETH_MMCCR_CSR)\r
-\r
-/**\r
-  * @brief  Resets the MMC Counters.\r
-  * @param   __HANDLE__: ETH Handle.\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_MMC_COUNTERS_RESET(__HANDLE__)                         ((__HANDLE__)->Instance->MMCCR |= ETH_MMCCR_CR)\r
-\r
-/**\r
-  * @brief  Enables the specified Ethernet MMC Rx interrupts.\r
-  * @param   __HANDLE__: ETH Handle.\r
-  * @param  __INTERRUPT__: specifies the Ethernet MMC interrupt sources to be enabled or disabled.\r
-  *   This parameter can be one of the following values:\r
-  *     @arg ETH_MMC_IT_RGUF  : When Rx good unicast frames counter reaches half the maximum value\r
-  *     @arg ETH_MMC_IT_RFAE  : When Rx alignment error counter reaches half the maximum value\r
-  *     @arg ETH_MMC_IT_RFCE  : When Rx crc error counter reaches half the maximum value\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_MMC_RX_IT_ENABLE(__HANDLE__, __INTERRUPT__)               (__HANDLE__)->Instance->MMCRIMR &= ~((__INTERRUPT__) & 0xEFFFFFFF)\r
-/**\r
-  * @brief  Disables the specified Ethernet MMC Rx interrupts.\r
-  * @param   __HANDLE__: ETH Handle.\r
-  * @param  __INTERRUPT__: specifies the Ethernet MMC interrupt sources to be enabled or disabled.\r
-  *   This parameter can be one of the following values:\r
-  *     @arg ETH_MMC_IT_RGUF  : When Rx good unicast frames counter reaches half the maximum value\r
-  *     @arg ETH_MMC_IT_RFAE  : When Rx alignment error counter reaches half the maximum value\r
-  *     @arg ETH_MMC_IT_RFCE  : When Rx crc error counter reaches half the maximum value\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_MMC_RX_IT_DISABLE(__HANDLE__, __INTERRUPT__)              (__HANDLE__)->Instance->MMCRIMR |= ((__INTERRUPT__) & 0xEFFFFFFF)\r
-/**\r
-  * @brief  Enables the specified Ethernet MMC Tx interrupts.\r
-  * @param   __HANDLE__: ETH Handle.\r
-  * @param  __INTERRUPT__: specifies the Ethernet MMC interrupt sources to be enabled or disabled.\r
-  *   This parameter can be one of the following values:\r
-  *     @arg ETH_MMC_IT_TGF   : When Tx good frame counter reaches half the maximum value\r
-  *     @arg ETH_MMC_IT_TGFMSC: When Tx good multi col counter reaches half the maximum value\r
-  *     @arg ETH_MMC_IT_TGFSC : When Tx good single col counter reaches half the maximum value\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_MMC_TX_IT_ENABLE(__HANDLE__, __INTERRUPT__)            ((__HANDLE__)->Instance->MMCRIMR &= ~ (__INTERRUPT__))\r
-\r
-/**\r
-  * @brief  Disables the specified Ethernet MMC Tx interrupts.\r
-  * @param   __HANDLE__: ETH Handle.\r
-  * @param  __INTERRUPT__: specifies the Ethernet MMC interrupt sources to be enabled or disabled.\r
-  *   This parameter can be one of the following values:\r
-  *     @arg ETH_MMC_IT_TGF   : When Tx good frame counter reaches half the maximum value\r
-  *     @arg ETH_MMC_IT_TGFMSC: When Tx good multi col counter reaches half the maximum value\r
-  *     @arg ETH_MMC_IT_TGFSC : When Tx good single col counter reaches half the maximum value\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_MMC_TX_IT_DISABLE(__HANDLE__, __INTERRUPT__)           ((__HANDLE__)->Instance->MMCRIMR |= (__INTERRUPT__))\r
-\r
-/**\r
-  * @brief  Enables the ETH External interrupt line.\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_WAKEUP_EXTI_ENABLE_IT()    EXTI->IMR |= (ETH_EXTI_LINE_WAKEUP)\r
-\r
-/**\r
-  * @brief  Disables the ETH External interrupt line.\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_WAKEUP_EXTI_DISABLE_IT()   EXTI->IMR &= ~(ETH_EXTI_LINE_WAKEUP)\r
-\r
-/**\r
-  * @brief Enable event on ETH External event line.\r
-  * @retval None.\r
-  */\r
-#define __HAL_ETH_WAKEUP_EXTI_ENABLE_EVENT()  EXTI->EMR |= (ETH_EXTI_LINE_WAKEUP)\r
-\r
-/**\r
-  * @brief Disable event on ETH External event line\r
-  * @retval None.\r
-  */\r
-#define __HAL_ETH_WAKEUP_EXTI_DISABLE_EVENT() EXTI->EMR &= ~(ETH_EXTI_LINE_WAKEUP)\r
-\r
-/**\r
-  * @brief  Get flag of the ETH External interrupt line.\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_WAKEUP_EXTI_GET_FLAG()     EXTI->PR & (ETH_EXTI_LINE_WAKEUP)\r
-\r
-/**\r
-  * @brief  Clear flag of the ETH External interrupt line.\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_WAKEUP_EXTI_CLEAR_FLAG()   EXTI->PR = (ETH_EXTI_LINE_WAKEUP)\r
-\r
-/**\r
-  * @brief  Enables rising edge trigger to the ETH External interrupt line.\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_WAKEUP_EXTI_ENABLE_RISING_EDGE_TRIGGER()  EXTI->RTSR |= ETH_EXTI_LINE_WAKEUP\r
-\r
-/**\r
-  * @brief  Disables the rising edge trigger to the ETH External interrupt line.\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_WAKEUP_EXTI_DISABLE_RISING_EDGE_TRIGGER()  EXTI->RTSR &= ~(ETH_EXTI_LINE_WAKEUP)\r
-\r
-/**\r
-  * @brief  Enables falling edge trigger to the ETH External interrupt line.\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_WAKEUP_EXTI_ENABLE_FALLING_EDGE_TRIGGER()  EXTI->FTSR |= (ETH_EXTI_LINE_WAKEUP)\r
-\r
-/**\r
-  * @brief  Disables falling edge trigger to the ETH External interrupt line.\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_WAKEUP_EXTI_DISABLE_FALLING_EDGE_TRIGGER()  EXTI->FTSR &= ~(ETH_EXTI_LINE_WAKEUP)\r
-\r
-/**\r
-  * @brief  Enables rising/falling edge trigger to the ETH External interrupt line.\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_WAKEUP_EXTI_ENABLE_FALLINGRISING_TRIGGER()  EXTI->RTSR |= ETH_EXTI_LINE_WAKEUP;\\r
-                                                              EXTI->FTSR |= ETH_EXTI_LINE_WAKEUP\r
-\r
-/**\r
-  * @brief  Disables rising/falling edge trigger to the ETH External interrupt line.\r
-  * @retval None\r
-  */\r
-#define __HAL_ETH_WAKEUP_EXTI_DISABLE_FALLINGRISING_TRIGGER()  EXTI->RTSR &= ~(ETH_EXTI_LINE_WAKEUP);\\r
-                                                               EXTI->FTSR &= ~(ETH_EXTI_LINE_WAKEUP)\r
-\r
-/**\r
-  * @brief Generate a Software interrupt on selected EXTI line.\r
-  * @retval None.\r
-  */\r
-#define __HAL_ETH_WAKEUP_EXTI_GENERATE_SWIT()                  EXTI->SWIER|= ETH_EXTI_LINE_WAKEUP\r
-\r
-/**\r
-  * @}\r
-  */\r
-/* Exported functions --------------------------------------------------------*/\r
-\r
-/** @addtogroup ETH_Exported_Functions\r
-  * @{\r
-  */\r
-\r
-/* Initialization and de-initialization functions  ****************************/\r
-\r
-/** @addtogroup ETH_Exported_Functions_Group1\r
-  * @{\r
-  */\r
-HAL_StatusTypeDef HAL_ETH_Init(ETH_HandleTypeDef *heth);\r
-HAL_StatusTypeDef HAL_ETH_DeInit(ETH_HandleTypeDef *heth);\r
-void HAL_ETH_MspInit(ETH_HandleTypeDef *heth);\r
-void HAL_ETH_MspDeInit(ETH_HandleTypeDef *heth);\r
-HAL_StatusTypeDef HAL_ETH_DMATxDescListInit(ETH_HandleTypeDef *heth, ETH_DMADescTypeDef *DMATxDescTab, uint8_t* TxBuff, uint32_t TxBuffCount);\r
-HAL_StatusTypeDef HAL_ETH_DMARxDescListInit(ETH_HandleTypeDef *heth, ETH_DMADescTypeDef *DMARxDescTab, uint8_t *RxBuff, uint32_t RxBuffCount);\r
-\r
-/**\r
-  * @}\r
-  */\r
-/* IO operation functions  ****************************************************/\r
-\r
-/** @addtogroup ETH_Exported_Functions_Group2\r
-  * @{\r
-  */\r
-HAL_StatusTypeDef HAL_ETH_TransmitFrame(ETH_HandleTypeDef *heth, uint32_t FrameLength);\r
-HAL_StatusTypeDef HAL_ETH_GetReceivedFrame(ETH_HandleTypeDef *heth);\r
-/* Communication with PHY functions*/\r
-HAL_StatusTypeDef HAL_ETH_ReadPHYRegister(ETH_HandleTypeDef *heth, uint16_t PHYReg, uint32_t *RegValue);\r
-HAL_StatusTypeDef HAL_ETH_WritePHYRegister(ETH_HandleTypeDef *heth, uint16_t PHYReg, uint32_t RegValue);\r
-/* Non-Blocking mode: Interrupt */\r
-HAL_StatusTypeDef HAL_ETH_GetReceivedFrame_IT(ETH_HandleTypeDef *heth);\r
-void HAL_ETH_IRQHandler(ETH_HandleTypeDef *heth);\r
-/* Callback in non blocking modes (Interrupt) */\r
-void HAL_ETH_TxCpltCallback(ETH_HandleTypeDef *heth);\r
-void HAL_ETH_RxCpltCallback(ETH_HandleTypeDef *heth);\r
-void HAL_ETH_ErrorCallback(ETH_HandleTypeDef *heth);\r
-/**\r
-  * @}\r
-  */\r
-\r
-/* Peripheral Control functions  **********************************************/\r
-\r
-/** @addtogroup ETH_Exported_Functions_Group3\r
-  * @{\r
-  */\r
-\r
-HAL_StatusTypeDef HAL_ETH_Start(ETH_HandleTypeDef *heth);\r
-HAL_StatusTypeDef HAL_ETH_Stop(ETH_HandleTypeDef *heth);\r
-HAL_StatusTypeDef HAL_ETH_ConfigMAC(ETH_HandleTypeDef *heth, ETH_MACInitTypeDef *macconf);\r
-HAL_StatusTypeDef HAL_ETH_ConfigDMA(ETH_HandleTypeDef *heth, ETH_DMAInitTypeDef *dmaconf);\r
-/**\r
-  * @}\r
-  */\r
-\r
-/* Peripheral State functions  ************************************************/\r
-\r
-/** @addtogroup ETH_Exported_Functions_Group4\r
-  * @{\r
-  */\r
-HAL_ETH_StateTypeDef HAL_ETH_GetState(ETH_HandleTypeDef *heth);\r
-/**\r
-  * @}\r
-  */\r
-\r
-/**\r
-  * @}\r
-  */\r
-\r
-/**\r
-  * @}\r
-  */\r
-\r
-/**\r
-  * @}\r
-  */\r
-#ifdef __cplusplus\r
-}\r
-#endif\r
-\r
-#endif /* __STM32Fxx_HAL_ETH_H */\r
-\r
-\r
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r
index 502fbd661dc5f43a0e678af100ecfc4ef1f446bf..8e64a40cc4e36aac7b85c4cc2fbf49797eaa96da 100644 (file)
-#define xBUFFER_CACHE_SIZE                     10\r
-#define xMAX_FAULT_INJECTION_RATE      15\r
-#define xMIN_FAULT_INJECTION_RATE      3\r
-#define xNUM_FAULT_TYPES                       1\r
-\r
-static NetworkBufferDescriptor_t *xNetworkBufferCache[ xBUFFER_CACHE_SIZE ] = { 0 };\r
-\r
-#define xFAULT_LOG_SIZE 2048\r
-uint32_t ulInjectedFault[ xFAULT_LOG_SIZE ];\r
-uint32_t ulFaultLogIndex = 0;\r
-\r
-static BaseType_t prvCachePacket( NetworkBufferDescriptor_t *pxNetworkBufferIn )\r
-{\r
-BaseType_t x, xReturn = pdFALSE;\r
-\r
-       for( x = 0; x < xBUFFER_CACHE_SIZE; x++ )\r
-       {\r
-               if( xNetworkBufferCache[ x ] == NULL )\r
-               {\r
-                       xNetworkBufferCache[ x ] = pxNetworkBufferIn;\r
-                       xReturn = pdTRUE;\r
-                       break;\r
-               }\r
-       }\r
-\r
-       return xReturn;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static NetworkBufferDescriptor_t *prvGetCachedPacket( void )\r
-{\r
-BaseType_t x;\r
-NetworkBufferDescriptor_t *pxReturn = NULL;\r
-\r
-       for( x = ( xBUFFER_CACHE_SIZE - 1 ); x >= 0; x-- )\r
-       {\r
-               if( xNetworkBufferCache[ x ] != NULL )\r
-               {\r
-                       pxReturn = xNetworkBufferCache[ x ];\r
-                       xNetworkBufferCache[ x ] = NULL;\r
-                       break;\r
-               }\r
-       }\r
-\r
-       return pxReturn;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static NetworkBufferDescriptor_t *prvDuplicatePacket( NetworkBufferDescriptor_t * pxOriginalPacket, const uint8_t *pucPacketData )\r
-{\r
-NetworkBufferDescriptor_t *pxReturn;\r
-\r
-       /* Obtain a new descriptor. */\r
-       pxReturn = pxGetNetworkBufferWithDescriptor( pxOriginalPacket->xDataLength, 0 );\r
-\r
-       if( pxReturn != NULL )\r
-       {\r
-               /* Copy in the packet data. */\r
-               pxReturn->xDataLength = pxOriginalPacket->xDataLength;\r
-               memcpy( pxReturn->pucEthernetBuffer, pucPacketData, pxOriginalPacket->xDataLength );\r
-       }\r
-\r
-       return pxReturn;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static NetworkBufferDescriptor_t *prvRxFaultInjection( NetworkBufferDescriptor_t *pxNetworkBufferIn, const uint8_t *pucPacketData )\r
-{\r
-static uint32_t ulCallCount = 0, ulNextFaultCallCount = 0;\r
-NetworkBufferDescriptor_t *pxReturn = pxNetworkBufferIn;\r
-IPStackEvent_t xRxEvent = { eNetworkRxEvent, NULL };\r
-uint32_t ulFault;\r
-\r
-return pxNetworkBufferIn;\r
-\r
-       ulCallCount++;\r
-\r
-       if( ulCallCount > ulNextFaultCallCount )\r
-       {\r
-               xApplicationGetRandomNumber( &( ulNextFaultCallCount ) );\r
-               ulNextFaultCallCount = ulNextFaultCallCount % xMAX_FAULT_INJECTION_RATE;\r
-               if( ulNextFaultCallCount < xMIN_FAULT_INJECTION_RATE )\r
-               {\r
-                       ulNextFaultCallCount = xMIN_FAULT_INJECTION_RATE;\r
-               }\r
-\r
-               ulCallCount = 0;\r
-\r
-               xApplicationGetRandomNumber( &( ulFault ) );\r
-               ulFault = ulFault % xNUM_FAULT_TYPES;\r
-\r
-               if( ulFaultLogIndex < xFAULT_LOG_SIZE )\r
-               {\r
-                       ulInjectedFault[ ulFaultLogIndex ] = ulFault;\r
-                       ulFaultLogIndex++;\r
-               }\r
-\r
-               switch( ulFault )\r
-               {\r
-                       case 0:\r
-                               /* Just drop the packet. */\r
-                               vReleaseNetworkBufferAndDescriptor( pxNetworkBufferIn );\r
-                               pxReturn = NULL;\r
-                               break;\r
-\r
-                       case 1:\r
-                               /* Store the packet in the cache for later. */\r
-                               if( prvCachePacket( pxNetworkBufferIn ) == pdTRUE )\r
-                               {\r
-                                       /* The packet may get sent later, it is not being sent\r
-                                       now. */\r
-                                       pxReturn = NULL;\r
-                               }\r
-                               break;\r
-\r
-                       case 2:\r
-                               /* Send a cached packet. */\r
-                               pxReturn = prvGetCachedPacket();\r
-                               if( pxReturn != NULL )\r
-                               {\r
-                                       /* A cached packet was obtained so drop the original\r
-                                       packet. */\r
-                                       vReleaseNetworkBufferAndDescriptor( pxNetworkBufferIn );\r
-                               }\r
-                               else\r
-                               {\r
-                                       /* Could not obtain a packet from the cache so just return\r
-                                       the packet that was passed in. */\r
-                                       pxReturn = pxNetworkBufferIn;\r
-                               }\r
-                               break;\r
-\r
-                       case 4:\r
-\r
-                               /* Send a duplicate of the packet right away. */\r
-                               pxReturn = prvDuplicatePacket( pxNetworkBufferIn, pucPacketData );\r
-\r
-                               /* Send the original packet to the stack. */\r
-                               xRxEvent.pvData = ( void * ) pxNetworkBufferIn;\r
-                               if( xSendEventStructToIPTask( &xRxEvent, ( TickType_t ) 0 ) == pdFAIL )\r
-                               {\r
-                                       vReleaseNetworkBufferAndDescriptor( pxNetworkBufferIn );\r
-                               }\r
-                               break;\r
-\r
-                       case 5:\r
-\r
-                               /* Send both a cached packet and the current packet. */\r
-                               xRxEvent.pvData = ( void * ) prvGetCachedPacket();\r
-                               if( xRxEvent.pvData != NULL )\r
-                               {\r
-                                       if( xSendEventStructToIPTask( &xRxEvent, ( TickType_t ) 0 ) == pdFAIL )\r
-                                       {\r
-                                               vReleaseNetworkBufferAndDescriptor( pxNetworkBufferIn );\r
-                                       }\r
-                               }\r
-                               break;\r
-\r
-                       case 6:\r
-                       case 7:\r
-                       case 8:\r
-                               /* Store the packet in the cache for later. */\r
-                               if( prvCachePacket( pxNetworkBufferIn ) == pdTRUE )\r
-                               {\r
-                                       /* The packet may get sent later, it is not being sent\r
-                                       now. */\r
-                                       pxReturn = NULL;\r
-                               }\r
-                               break;\r
-               }\r
-       }\r
-\r
-       return pxReturn;\r
-}\r
-/*-----------------------------------------------------------*/\r
+#define xBUFFER_CACHE_SIZE                     10
+#define xMAX_FAULT_INJECTION_RATE      15
+#define xMIN_FAULT_INJECTION_RATE      3
+#define xNUM_FAULT_TYPES                       1
+
+static NetworkBufferDescriptor_t *xNetworkBufferCache[ xBUFFER_CACHE_SIZE ] = { 0 };
+
+#define xFAULT_LOG_SIZE 2048
+uint32_t ulInjectedFault[ xFAULT_LOG_SIZE ];
+uint32_t ulFaultLogIndex = 0;
+
+static BaseType_t prvCachePacket( NetworkBufferDescriptor_t *pxNetworkBufferIn )
+{
+BaseType_t x, xReturn = pdFALSE;
+
+       for( x = 0; x < xBUFFER_CACHE_SIZE; x++ )
+       {
+               if( xNetworkBufferCache[ x ] == NULL )
+               {
+                       xNetworkBufferCache[ x ] = pxNetworkBufferIn;
+                       xReturn = pdTRUE;
+                       break;
+               }
+       }
+
+       return xReturn;
+}
+/*-----------------------------------------------------------*/
+
+static NetworkBufferDescriptor_t *prvGetCachedPacket( void )
+{
+BaseType_t x;
+NetworkBufferDescriptor_t *pxReturn = NULL;
+
+       for( x = ( xBUFFER_CACHE_SIZE - 1 ); x >= 0; x-- )
+       {
+               if( xNetworkBufferCache[ x ] != NULL )
+               {
+                       pxReturn = xNetworkBufferCache[ x ];
+                       xNetworkBufferCache[ x ] = NULL;
+                       break;
+               }
+       }
+
+       return pxReturn;
+}
+/*-----------------------------------------------------------*/
+
+static NetworkBufferDescriptor_t *prvDuplicatePacket( NetworkBufferDescriptor_t * pxOriginalPacket, const uint8_t *pucPacketData )
+{
+NetworkBufferDescriptor_t *pxReturn;
+
+       /* Obtain a new descriptor. */
+       pxReturn = pxGetNetworkBufferWithDescriptor( pxOriginalPacket->xDataLength, 0 );
+
+       if( pxReturn != NULL )
+       {
+               /* Copy in the packet data. */
+               pxReturn->xDataLength = pxOriginalPacket->xDataLength;
+               memcpy( pxReturn->pucEthernetBuffer, pucPacketData, pxOriginalPacket->xDataLength );
+       }
+
+       return pxReturn;
+}
+/*-----------------------------------------------------------*/
+
+static NetworkBufferDescriptor_t *prvRxFaultInjection( NetworkBufferDescriptor_t *pxNetworkBufferIn, const uint8_t *pucPacketData )
+{
+static uint32_t ulCallCount = 0, ulNextFaultCallCount = 0;
+NetworkBufferDescriptor_t *pxReturn = pxNetworkBufferIn;
+IPStackEvent_t xRxEvent = { eNetworkRxEvent, NULL };
+uint32_t ulFault;
+
+return pxNetworkBufferIn;
+
+       ulCallCount++;
+
+       if( ulCallCount > ulNextFaultCallCount )
+       {
+               xApplicationGetRandomNumber( &( ulNextFaultCallCount ) );
+               ulNextFaultCallCount = ulNextFaultCallCount % xMAX_FAULT_INJECTION_RATE;
+               if( ulNextFaultCallCount < xMIN_FAULT_INJECTION_RATE )
+               {
+                       ulNextFaultCallCount = xMIN_FAULT_INJECTION_RATE;
+               }
+
+               ulCallCount = 0;
+
+               xApplicationGetRandomNumber( &( ulFault ) );
+               ulFault = ulFault % xNUM_FAULT_TYPES;
+
+               if( ulFaultLogIndex < xFAULT_LOG_SIZE )
+               {
+                       ulInjectedFault[ ulFaultLogIndex ] = ulFault;
+                       ulFaultLogIndex++;
+               }
+
+               switch( ulFault )
+               {
+                       case 0:
+                               /* Just drop the packet. */
+                               vReleaseNetworkBufferAndDescriptor( pxNetworkBufferIn );
+                               pxReturn = NULL;
+                               break;
+
+                       case 1:
+                               /* Store the packet in the cache for later. */
+                               if( prvCachePacket( pxNetworkBufferIn ) == pdTRUE )
+                               {
+                                       /* The packet may get sent later, it is not being sent
+                                       now. */
+                                       pxReturn = NULL;
+                               }
+                               break;
+
+                       case 2:
+                               /* Send a cached packet. */
+                               pxReturn = prvGetCachedPacket();
+                               if( pxReturn != NULL )
+                               {
+                                       /* A cached packet was obtained so drop the original
+                                       packet. */
+                                       vReleaseNetworkBufferAndDescriptor( pxNetworkBufferIn );
+                               }
+                               else
+                               {
+                                       /* Could not obtain a packet from the cache so just return
+                                       the packet that was passed in. */
+                                       pxReturn = pxNetworkBufferIn;
+                               }
+                               break;
+
+                       case 4:
+
+                               /* Send a duplicate of the packet right away. */
+                               pxReturn = prvDuplicatePacket( pxNetworkBufferIn, pucPacketData );
+
+                               /* Send the original packet to the stack. */
+                               xRxEvent.pvData = ( void * ) pxNetworkBufferIn;
+                               if( xSendEventStructToIPTask( &xRxEvent, ( TickType_t ) 0 ) == pdFAIL )
+                               {
+                                       vReleaseNetworkBufferAndDescriptor( pxNetworkBufferIn );
+                               }
+                               break;
+
+                       case 5:
+
+                               /* Send both a cached packet and the current packet. */
+                               xRxEvent.pvData = ( void * ) prvGetCachedPacket();
+                               if( xRxEvent.pvData != NULL )
+                               {
+                                       if( xSendEventStructToIPTask( &xRxEvent, ( TickType_t ) 0 ) == pdFAIL )
+                                       {
+                                               vReleaseNetworkBufferAndDescriptor( pxNetworkBufferIn );
+                                       }
+                               }
+                               break;
+
+                       case 6:
+                       case 7:
+                       case 8:
+                               /* Store the packet in the cache for later. */
+                               if( prvCachePacket( pxNetworkBufferIn ) == pdTRUE )
+                               {
+                                       /* The packet may get sent later, it is not being sent
+                                       now. */
+                                       pxReturn = NULL;
+                               }
+                               break;
+               }
+       }
+
+       return pxReturn;
+}
+/*-----------------------------------------------------------*/
index 474629e4632d4a552efa3e2afe016bd053b53068..c4a12515b0891a151d7a5063428e77157ac80cf5 100644 (file)
-/*\r
-FreeRTOS+TCP V2.0.11\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://aws.amazon.com/freertos\r
- http://www.FreeRTOS.org\r
-*/\r
-\r
-/* WinPCap includes. */\r
-#define HAVE_REMOTE\r
-#include "pcap.h"\r
-\r
-/* FreeRTOS includes. */\r
-#include "FreeRTOS.h"\r
-#include "task.h"\r
-#include "semphr.h"\r
-\r
-/* FreeRTOS+TCP includes. */\r
-#include "FreeRTOS_IP.h"\r
-#include "FreeRTOS_IP_Private.h"\r
-#include "NetworkBufferManagement.h"\r
-\r
-/* Thread-safe circular buffers are being used to pass data to and from the PCAP\r
-access functions. */\r
-#include "Win32-Extensions.h"\r
-#include "FreeRTOS_Stream_Buffer.h"\r
-\r
-/* Sizes of the thread safe circular buffers used to pass data to and from the\r
-WinPCAP Windows threads. */\r
-#define xSEND_BUFFER_SIZE  32768\r
-#define xRECV_BUFFER_SIZE  32768\r
-\r
-/* If ipconfigETHERNET_DRIVER_FILTERS_FRAME_TYPES is set to 1, then the Ethernet\r
-driver will filter incoming packets and only pass the stack those packets it\r
-considers need processing. */\r
-#if( ipconfigETHERNET_DRIVER_FILTERS_FRAME_TYPES == 0 )\r
-       #define ipCONSIDER_FRAME_FOR_PROCESSING( pucEthernetBuffer ) eProcessBuffer\r
-#else\r
-       #define ipCONSIDER_FRAME_FOR_PROCESSING( pucEthernetBuffer ) eConsiderFrameForProcessing( ( pucEthernetBuffer ) )\r
-#endif\r
-\r
-/* Used to insert test code only. */\r
-#define niDISRUPT_PACKETS      0\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-/*\r
- * Windows threads that are outside of the control of the FreeRTOS simulator are\r
- * used to interface with the WinPCAP libraries.\r
- */\r
-DWORD WINAPI prvWinPcapRecvThread( void *pvParam );\r
-DWORD WINAPI prvWinPcapSendThread( void *pvParam );\r
-\r
-/*\r
- * Print out a numbered list of network interfaces that are available on the\r
- * host computer.\r
- */\r
-static pcap_if_t * prvPrintAvailableNetworkInterfaces( void );\r
-\r
-/*\r
- * Open the network interface.  The number of the interface to be opened is set\r
- * by the configNETWORK_INTERFACE_TO_USE constant in FreeRTOSConfig.h.\r
- */\r
-static void prvOpenSelectedNetworkInterface( pcap_if_t *pxAllNetworkInterfaces );\r
-static int prvOpenInterface( const char *pucName );\r
-\r
-/*\r
- * Configure the capture filter to allow blocking reads, and to filter out\r
- * packets that are not of interest to this demo.\r
- */\r
-static void prvConfigureCaptureBehaviour( void );\r
-\r
-/*\r
- * A function that simulates Ethernet interrupts by periodically polling the\r
- * WinPCap interface for new data.\r
- */\r
-static void prvInterruptSimulatorTask( void *pvParameters );\r
-\r
-/*\r
- * Create the buffers that are used to pass data between the FreeRTOS simulator\r
- * and the Win32 threads that manage WinPCAP.\r
- */\r
-static void prvCreateThreadSafeBuffers( void );\r
-\r
-/*\r
- * Utility function used to format print messages only.\r
- */\r
-static const char *prvRemoveSpaces( char *pcBuffer, int aBuflen, const char *pcMessage );\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-/* Required by the WinPCap library. */\r
-static char cErrorBuffer[ PCAP_ERRBUF_SIZE ];\r
-\r
-/* An event used to wake up the Win32 thread that sends data through the WinPCAP\r
-library. */\r
-static void *pvSendEvent = NULL;\r
-\r
-/* _HT_ made the PCAP interface number configurable through the program's\r
-parameters in order to test in different machines. */\r
-static BaseType_t xConfigNetworkInterfaceToUse = configNETWORK_INTERFACE_TO_USE;\r
-\r
-/* Handles to the Windows threads that handle the PCAP IO. */\r
-static HANDLE vWinPcapRecvThreadHandle = NULL;\r
-static HANDLE vWinPcapSendThreadHandle = NULL;;\r
-\r
-/* The interface being used by WinPCap. */\r
-static pcap_t *pxOpenedInterfaceHandle = NULL;\r
-\r
-/* Circular buffers used by the PCAP Win32 threads. */\r
-static StreamBuffer_t *xSendBuffer = NULL;\r
-static StreamBuffer_t *xRecvBuffer = NULL;\r
-\r
-/* The MAC address initially set to the constants defined in FreeRTOSConfig.h. */\r
-extern uint8_t ucMACAddress[ 6 ];\r
-\r
-/* Logs the number of WinPCAP send failures, for viewing in the debugger only. */\r
-static volatile uint32_t ulWinPCAPSendFailures = 0;\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-BaseType_t xNetworkInterfaceInitialise( void )\r
-{\r
-BaseType_t xReturn = pdFALSE;\r
-pcap_if_t *pxAllNetworkInterfaces;\r
-\r
-       /* Query the computer the simulation is being executed on to find the\r
-       network interfaces it has installed. */\r
-       pxAllNetworkInterfaces = prvPrintAvailableNetworkInterfaces();\r
-\r
-       /* Open the network interface.  The number of the interface to be opened is\r
-       set by the configNETWORK_INTERFACE_TO_USE constant in FreeRTOSConfig.h.\r
-       Calling this function will set the pxOpenedInterfaceHandle variable.  If,\r
-       after calling this function, pxOpenedInterfaceHandle is equal to NULL, then\r
-       the interface could not be opened. */\r
-       if( pxAllNetworkInterfaces != NULL )\r
-       {\r
-               prvOpenSelectedNetworkInterface( pxAllNetworkInterfaces );\r
-       }\r
-\r
-       if( pxOpenedInterfaceHandle != NULL )\r
-       {\r
-               xReturn = pdPASS;\r
-       }\r
-\r
-       return xReturn;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvCreateThreadSafeBuffers( void )\r
-{\r
-       /* The buffer used to pass data to be transmitted from a FreeRTOS task to\r
-       the Win32 thread that sends via the WinPCAP library. */\r
-       if( xSendBuffer == NULL)\r
-       {\r
-               xSendBuffer = ( StreamBuffer_t * ) malloc( sizeof( *xSendBuffer ) - sizeof( xSendBuffer->ucArray ) + xSEND_BUFFER_SIZE + 1 );\r
-               configASSERT( xSendBuffer );\r
-               memset( xSendBuffer, '\0', sizeof( *xSendBuffer ) - sizeof( xSendBuffer->ucArray ) );\r
-               xSendBuffer->LENGTH = xSEND_BUFFER_SIZE + 1;\r
-       }\r
-\r
-       /* The buffer used to pass received data from the Win32 thread that receives\r
-       via the WinPCAP library to the FreeRTOS task. */\r
-       if( xRecvBuffer == NULL)\r
-       {\r
-               xRecvBuffer = ( StreamBuffer_t * ) malloc( sizeof( *xRecvBuffer ) - sizeof( xRecvBuffer->ucArray ) + xRECV_BUFFER_SIZE + 1 );\r
-               configASSERT( xRecvBuffer );\r
-               memset( xRecvBuffer, '\0', sizeof( *xRecvBuffer ) - sizeof( xRecvBuffer->ucArray ) );\r
-               xRecvBuffer->LENGTH = xRECV_BUFFER_SIZE + 1;\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-BaseType_t xNetworkInterfaceOutput( NetworkBufferDescriptor_t * const pxNetworkBuffer, BaseType_t bReleaseAfterSend )\r
-{\r
-size_t xSpace;\r
-\r
-       iptraceNETWORK_INTERFACE_TRANSMIT();\r
-       configASSERT( xIsCallingFromIPTask() == pdTRUE );\r
-\r
-       /* Both the length of the data being sent and the actual data being sent\r
-       are placed in the thread safe buffer used to pass data between the FreeRTOS\r
-       tasks and the Win32 thread that sends data via the WinPCAP library.  Drop\r
-       the packet if there is insufficient space in the buffer to hold both. */\r
-       xSpace = uxStreamBufferGetSpace( xSendBuffer );\r
-\r
-       if( ( pxNetworkBuffer->xDataLength <= ( ipconfigNETWORK_MTU + ipSIZE_OF_ETH_HEADER ) ) &&\r
-               ( xSpace >= ( pxNetworkBuffer->xDataLength + sizeof( pxNetworkBuffer->xDataLength ) ) ) )\r
-       {\r
-               /* First write in the length of the data, then write in the data\r
-               itself. */\r
-               uxStreamBufferAdd( xSendBuffer, 0, ( const uint8_t * ) &( pxNetworkBuffer->xDataLength ), sizeof( pxNetworkBuffer->xDataLength ) );\r
-               uxStreamBufferAdd( xSendBuffer, 0, ( const uint8_t * ) pxNetworkBuffer->pucEthernetBuffer, pxNetworkBuffer->xDataLength );\r
-       }\r
-       else\r
-       {\r
-               FreeRTOS_debug_printf( ( "xNetworkInterfaceOutput: send buffers full to store %lu\n", pxNetworkBuffer->xDataLength ) );\r
-       }\r
-\r
-       /* Kick the Tx task in either case in case it doesn't know the buffer is\r
-       full. */\r
-       SetEvent( pvSendEvent );\r
-\r
-       /* The buffer has been sent so can be released. */\r
-       if( bReleaseAfterSend != pdFALSE )\r
-       {\r
-               vReleaseNetworkBufferAndDescriptor( pxNetworkBuffer );\r
-       }\r
-\r
-       return pdPASS;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static pcap_if_t * prvPrintAvailableNetworkInterfaces( void )\r
-{\r
-pcap_if_t * pxAllNetworkInterfaces = NULL, *xInterface;\r
-int32_t lInterfaceNumber = 1;\r
-char cBuffer[ 512 ];\r
-static BaseType_t xInvalidInterfaceDetected = pdFALSE;\r
-\r
-       if( xInvalidInterfaceDetected == pdFALSE )\r
-       {\r
-               if( pcap_findalldevs_ex( PCAP_SRC_IF_STRING, NULL, &pxAllNetworkInterfaces, cErrorBuffer ) == -1 )\r
-               {\r
-                       printf( "Could not obtain a list of network interfaces\n%s\n", cErrorBuffer );\r
-                       pxAllNetworkInterfaces = NULL;\r
-               }\r
-               else\r
-               {\r
-                       printf( "\r\n\r\nThe following network interfaces are available:\r\n\r\n" );\r
-               }\r
-\r
-               if( pxAllNetworkInterfaces != NULL )\r
-               {\r
-                       /* Print out the list of network interfaces.  The first in the list\r
-                       is interface '1', not interface '0'. */\r
-                       for( xInterface = pxAllNetworkInterfaces; xInterface != NULL; xInterface = xInterface->next )\r
-                       {\r
-                               /* The descriptions of the devices can be full of spaces, clean them\r
-                               a little.  printf() can only be used here because the network is not\r
-                               up yet - so no other network tasks will be running. */\r
-                               printf( "Interface %d - %s\n", lInterfaceNumber, prvRemoveSpaces( cBuffer, sizeof( cBuffer ), xInterface->name ) );\r
-                               printf( "              (%s)\n", prvRemoveSpaces(cBuffer, sizeof( cBuffer ), xInterface->description ? xInterface->description : "No description" ) );\r
-                               printf( "\n" );\r
-                               lInterfaceNumber++;\r
-                       }\r
-               }\r
-\r
-               if( lInterfaceNumber == 1 )\r
-               {\r
-                       /* The interface number was never incremented, so the above for() loop\r
-                       did not execute meaning no interfaces were found. */\r
-                       printf( " \nNo network interfaces were found.\n" );\r
-                       pxAllNetworkInterfaces = NULL;\r
-               }\r
-\r
-               printf( "\r\nThe interface that will be opened is set by " );\r
-               printf( "\"configNETWORK_INTERFACE_TO_USE\", which\r\nshould be defined in FreeRTOSConfig.h\r\n" );\r
-\r
-               if( ( xConfigNetworkInterfaceToUse < 1L ) || ( xConfigNetworkInterfaceToUse >= lInterfaceNumber ) )\r
-               {\r
-                       printf( "\r\nERROR:  configNETWORK_INTERFACE_TO_USE is set to %d, which is an invalid value.\r\n", xConfigNetworkInterfaceToUse );\r
-                       printf( "Please set configNETWORK_INTERFACE_TO_USE to one of the interface numbers listed above,\r\n" );\r
-                       printf( "then re-compile and re-start the application.  Only Ethernet (as opposed to WiFi)\r\n" );\r
-                       printf( "interfaces are supported.\r\n\r\nHALTING\r\n\r\n\r\n" );\r
-                       xInvalidInterfaceDetected = pdTRUE;\r
-\r
-                       if( pxAllNetworkInterfaces != NULL )\r
-                       {\r
-                               /* Free the device list, as no devices are going to be opened. */\r
-                               pcap_freealldevs( pxAllNetworkInterfaces );\r
-                               pxAllNetworkInterfaces = NULL;\r
-                       }\r
-               }\r
-               else\r
-               {\r
-                       printf( "Attempting to open interface number %d.\n", xConfigNetworkInterfaceToUse );\r
-               }\r
-       }\r
-\r
-       return pxAllNetworkInterfaces;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static int prvOpenInterface( const char *pucName )\r
-{\r
-static char pucInterfaceName[ 256 ];\r
-\r
-       if( pucName != NULL )\r
-       {\r
-               strncpy( pucInterfaceName, pucName, sizeof( pucInterfaceName ) );\r
-       }\r
-\r
-       pxOpenedInterfaceHandle = pcap_open(    pucInterfaceName,               /* The name of the selected interface. */\r
-                                                                                       ipTOTAL_ETHERNET_FRAME_SIZE, /* The size of the packet to capture. */\r
-                                                                                       PCAP_OPENFLAG_PROMISCUOUS,      /* Open in promiscuous mode as the MAC and\r
-                                                                                                                                               IP address is going to be "simulated", and\r
-                                                                                                                                               not be the real MAC and IP address.  This allows\r
-                                                                                                                                               traffic to the simulated IP address to be routed\r
-                                                                                                                                               to uIP, and traffic to the real IP address to be\r
-                                                                                                                                               routed to the Windows TCP/IP stack. */\r
-                                                                                       100,\r
-                                                                                       NULL,                                   /* No authentication is required as this is\r
-                                                                                                                                               not a remote capture session. */\r
-                                                                                       cErrorBuffer\r
-                                                                          );\r
-\r
-       if ( pxOpenedInterfaceHandle == NULL )\r
-       {\r
-               printf( "\n%s is not supported by WinPcap and cannot be opened\n", pucInterfaceName );\r
-               return 1;\r
-       }\r
-       else\r
-       {\r
-               /* Configure the capture filter to allow blocking reads, and to filter\r
-               out packets that are not of interest to this demo. */\r
-               prvConfigureCaptureBehaviour();\r
-       }\r
-       return 0;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvOpenSelectedNetworkInterface( pcap_if_t *pxAllNetworkInterfaces )\r
-{\r
-pcap_if_t *pxInterface;\r
-int32_t x;\r
-\r
-       /* Walk the list of devices until the selected device is located. */\r
-       pxInterface = pxAllNetworkInterfaces;\r
-       for( x = 0L; x < ( xConfigNetworkInterfaceToUse - 1L ); x++ )\r
-       {\r
-               pxInterface = pxInterface->next;\r
-       }\r
-\r
-       /* Open the selected interface. */\r
-       if( prvOpenInterface( pxInterface->name ) == 0 )\r
-       {\r
-               printf( "Successfully opened interface number %d.\n", x + 1 );\r
-       }\r
-       else\r
-       {\r
-               printf( "Failed to open interface number %d.\n", x + 1 );\r
-       }\r
-\r
-       /* The device list is no longer required. */\r
-       pcap_freealldevs( pxAllNetworkInterfaces );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvConfigureCaptureBehaviour( void )\r
-{\r
-struct bpf_program xFilterCode;\r
-uint32_t ulNetMask;\r
-\r
-       /* Set up a filter so only the packets of interest are passed to the IP\r
-       stack.  cErrorBuffer is used for convenience to create the string.  Don't\r
-       confuse this with an error message. */\r
-       sprintf( cErrorBuffer, "broadcast or multicast or ether host %x:%x:%x:%x:%x:%x",\r
-               ucMACAddress[0], ucMACAddress[1], ucMACAddress[2], ucMACAddress[3], ucMACAddress[4], ucMACAddress[5] );\r
-\r
-       ulNetMask = ( configNET_MASK3 << 24UL ) | ( configNET_MASK2 << 16UL ) | ( configNET_MASK1 << 8L ) | configNET_MASK0;\r
-\r
-       if( pcap_compile( pxOpenedInterfaceHandle, &xFilterCode, cErrorBuffer, 1, ulNetMask ) < 0 )\r
-       {\r
-               printf( "\nThe packet filter string is invalid\n" );\r
-       }\r
-       else\r
-       {\r
-               if( pcap_setfilter( pxOpenedInterfaceHandle, &xFilterCode ) < 0 )\r
-               {\r
-                       printf( "\nAn error occurred setting the packet filter.\n" );\r
-               }\r
-               /* When pcap_compile() succeeds, it allocates memory for the memory pointed to by the bpf_program struct \r
-               parameter.pcap_freecode() will free that memory. */\r
-               pcap_freecode( &xFilterCode );\r
-       }\r
-\r
-       /* Create the buffers used to pass packets between the FreeRTOS simulator\r
-       and the Win32 threads that are handling WinPCAP. */\r
-       prvCreateThreadSafeBuffers();\r
-\r
-       if( pvSendEvent == NULL )\r
-       {\r
-               /* Create event used to signal the Win32 WinPCAP Tx thread. */\r
-               pvSendEvent = CreateEvent( NULL, FALSE, TRUE, NULL );\r
-\r
-               /* Create the Win32 thread that handles WinPCAP Rx. */\r
-               vWinPcapRecvThreadHandle = CreateThread(\r
-                       NULL,   /* Pointer to thread security attributes. */\r
-                       0,              /* Initial thread stack size, in bytes. */\r
-                       prvWinPcapRecvThread,   /* Pointer to thread function. */\r
-                       NULL,   /* Argument for new thread. */\r
-                       0,              /* Creation flags. */\r
-                       NULL );\r
-\r
-               /* Use the cores that are not used by the FreeRTOS tasks. */\r
-               SetThreadAffinityMask( vWinPcapRecvThreadHandle, ~0x01u );\r
-\r
-               /* Create the Win32 thread that handlers WinPCAP Tx. */\r
-               vWinPcapSendThreadHandle = CreateThread(\r
-                       NULL,   /* Pointer to thread security attributes. */\r
-                       0,              /* initial thread stack size, in bytes. */\r
-                       prvWinPcapSendThread,   /* Pointer to thread function. */\r
-                       NULL,   /* Argument for new thread. */\r
-                       0,              /* Creation flags. */\r
-                       NULL );\r
-\r
-               /* Use the cores that are not used by the FreeRTOS tasks. */\r
-               SetThreadAffinityMask( vWinPcapSendThreadHandle, ~0x01u );\r
-\r
-               /* Create a task that simulates an interrupt in a real system.  This will\r
-               block waiting for packets, then send a message to the IP task when data\r
-               is available. */\r
-               xTaskCreate( prvInterruptSimulatorTask, "MAC_ISR", configMINIMAL_STACK_SIZE, NULL, configMAC_ISR_SIMULATOR_PRIORITY, NULL );\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-/* WinPCAP function. */\r
-void pcap_callback( u_char *user, const struct pcap_pkthdr *pkt_header, const u_char *pkt_data )\r
-{\r
-       (void)user;\r
-\r
-       /* THIS IS CALLED FROM A WINDOWS THREAD - DO NOT ATTEMPT ANY FREERTOS CALLS\r
-       OR TO PRINT OUT MESSAGES HERE. */\r
-\r
-       /* Pass data to the FreeRTOS simulator on a thread safe circular buffer. */\r
-       if( ( pkt_header->caplen <= ( ipconfigNETWORK_MTU + ipSIZE_OF_ETH_HEADER ) ) &&\r
-               ( uxStreamBufferGetSpace( xRecvBuffer ) >= ( ( ( size_t ) pkt_header->caplen ) + sizeof( *pkt_header ) ) ) )\r
-       {\r
-               uxStreamBufferAdd( xRecvBuffer, 0, ( const uint8_t* ) pkt_header, sizeof( *pkt_header ) );\r
-               uxStreamBufferAdd( xRecvBuffer, 0, ( const uint8_t* ) pkt_data, ( size_t ) pkt_header->caplen );\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-DWORD WINAPI prvWinPcapRecvThread ( void *pvParam )\r
-{\r
-       ( void ) pvParam;\r
-\r
-       /* THIS IS A WINDOWS THREAD - DO NOT ATTEMPT ANY FREERTOS CALLS OR TO PRINT\r
-       OUT MESSAGES HERE. */\r
-\r
-       for( ;; )\r
-       {\r
-               pcap_dispatch( pxOpenedInterfaceHandle, 1, pcap_callback, ( u_char * ) "mydata" );\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-DWORD WINAPI prvWinPcapSendThread( void *pvParam )\r
-{\r
-size_t xLength;\r
-uint8_t ucBuffer[ ipconfigNETWORK_MTU + ipSIZE_OF_ETH_HEADER ];\r
-static char cErrorMessage[ 1024 ];\r
-const DWORD xMaxMSToWait = 1000;\r
-\r
-       /* THIS IS A WINDOWS THREAD - DO NOT ATTEMPT ANY FREERTOS CALLS OR TO PRINT\r
-       OUT MESSAGES HERE. */\r
-\r
-       /* Remove compiler warnings about unused parameters. */\r
-       ( void ) pvParam;\r
-\r
-       for( ;; )\r
-       {\r
-               /* Wait until notified of something to send. */\r
-               WaitForSingleObject( pvSendEvent, xMaxMSToWait );\r
-\r
-               /* Is there more than the length value stored in the circular buffer\r
-               used to pass data from the FreeRTOS simulator into this Win32 thread? */\r
-               while( uxStreamBufferGetSize( xSendBuffer ) > sizeof( xLength ) )\r
-               {\r
-                       uxStreamBufferGet( xSendBuffer, 0, ( uint8_t * ) &xLength, sizeof( xLength ), pdFALSE );\r
-                       uxStreamBufferGet( xSendBuffer, 0, ( uint8_t* ) ucBuffer, xLength, pdFALSE );\r
-                       if( pcap_sendpacket( pxOpenedInterfaceHandle, ucBuffer, xLength  ) != 0 )\r
-                       {\r
-                               ulWinPCAPSendFailures++;\r
-                       }\r
-               }\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvInterruptSimulatorTask( void *pvParameters )\r
-{\r
-struct pcap_pkthdr xHeader;\r
-static struct pcap_pkthdr *pxHeader;\r
-const uint8_t *pucPacketData;\r
-uint8_t ucRecvBuffer[ ipconfigNETWORK_MTU + ipSIZE_OF_ETH_HEADER ];\r
-NetworkBufferDescriptor_t *pxNetworkBuffer;\r
-IPStackEvent_t xRxEvent = { eNetworkRxEvent, NULL };\r
-eFrameProcessingResult_t eResult;\r
-\r
-       /* Remove compiler warnings about unused parameters. */\r
-       ( void ) pvParameters;\r
-\r
-       for( ;; )\r
-       {\r
-               /* Does the circular buffer used to pass data from the Win32 thread that\r
-               handles WinPCAP Rx into the FreeRTOS simulator contain another packet? */\r
-               if( uxStreamBufferGetSize( xRecvBuffer ) > sizeof( xHeader ) )\r
-               {\r
-                       /* Get the next packet. */\r
-                       uxStreamBufferGet( xRecvBuffer, 0, (uint8_t*)&xHeader, sizeof( xHeader ), pdFALSE );\r
-                       uxStreamBufferGet( xRecvBuffer, 0, (uint8_t*)ucRecvBuffer, ( size_t ) xHeader.len, pdFALSE );\r
-                       pucPacketData = ucRecvBuffer;\r
-                       pxHeader = &xHeader;\r
-\r
-                       iptraceNETWORK_INTERFACE_RECEIVE();\r
-\r
-                       /* Check for minimal size. */\r
-                       if( pxHeader->len >= sizeof( EthernetHeader_t ) )\r
-                       {\r
-                               eResult = ipCONSIDER_FRAME_FOR_PROCESSING( pucPacketData );\r
-                       }\r
-                       else\r
-                       {\r
-                               eResult = eReleaseBuffer;\r
-                       }\r
-\r
-                       if( eResult == eProcessBuffer )\r
-                       {\r
-                               /* Will the data fit into the frame buffer? */\r
-                               if( pxHeader->len <= ipTOTAL_ETHERNET_FRAME_SIZE )\r
-                               {\r
-                                       /* Obtain a buffer into which the data can be placed.  This\r
-                                       is only an interrupt simulator, not a real interrupt, so it\r
-                                       is ok to call the task level function here, but note that\r
-                                       some buffer implementations cannot be called from a real\r
-                                       interrupt. */\r
-                                       pxNetworkBuffer = pxGetNetworkBufferWithDescriptor( pxHeader->len, 0 );\r
-\r
-                                       if( pxNetworkBuffer != NULL )\r
-                                       {\r
-                                               memcpy( pxNetworkBuffer->pucEthernetBuffer, pucPacketData, pxHeader->len );\r
-                                               pxNetworkBuffer->xDataLength = ( size_t ) pxHeader->len;\r
-\r
-                                               #if( niDISRUPT_PACKETS == 1 )\r
-                                               {\r
-                                                       pxNetworkBuffer = vRxFaultInjection( pxNetworkBuffer, pucPacketData );\r
-                                               }\r
-                                               #endif /* niDISRUPT_PACKETS */\r
-\r
-                                               if( pxNetworkBuffer != NULL )\r
-                                               {\r
-                                                       xRxEvent.pvData = ( void * ) pxNetworkBuffer;\r
-\r
-                                                       /* Data was received and stored.  Send a message to\r
-                                                       the IP task to let it know. */\r
-                                                       if( xSendEventStructToIPTask( &xRxEvent, ( TickType_t ) 0 ) == pdFAIL )\r
-                                                       {\r
-                                                               /* The buffer could not be sent to the stack so\r
-                                                               must be released again.  This is only an\r
-                                                               interrupt simulator, not a real interrupt, so it\r
-                                                               is ok to use the task level function here, but\r
-                                                               note no all buffer implementations will allow\r
-                                                               this function to be executed from a real\r
-                                                               interrupt. */\r
-                                                               vReleaseNetworkBufferAndDescriptor( pxNetworkBuffer );\r
-                                                               iptraceETHERNET_RX_EVENT_LOST();\r
-                                                       }\r
-                                               }\r
-                                               else\r
-                                               {\r
-                                                       /* The packet was already released or stored inside\r
-                                                       vRxFaultInjection().  Don't release it here. */\r
-                                               }\r
-                                       }\r
-                                       else\r
-                                       {\r
-                                               iptraceETHERNET_RX_EVENT_LOST();\r
-                                       }\r
-                               }\r
-                               else\r
-                               {\r
-                                       /* Log that a packet was dropped because it would have\r
-                                       overflowed the buffer, but there may be more buffers to\r
-                                       process. */\r
-                               }\r
-                       }\r
-               }\r
-               else\r
-               {\r
-                       /* There is no real way of simulating an interrupt.  Make sure\r
-                       other tasks can run. */\r
-                       vTaskDelay( configWINDOWS_MAC_INTERRUPT_SIMULATOR_DELAY );\r
-               }\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static const char *prvRemoveSpaces( char *pcBuffer, int aBuflen, const char *pcMessage )\r
-{\r
-       char *pcTarget = pcBuffer;\r
-\r
-       /* Utility function used to formap messages being printed only. */\r
-       while( ( *pcMessage != 0 ) && ( pcTarget < ( pcBuffer + aBuflen - 1 ) ) )\r
-       {\r
-               *( pcTarget++ ) = *pcMessage;\r
-\r
-               if( isspace( *pcMessage ) != pdFALSE )\r
-               {\r
-                       while( isspace( *pcMessage ) != pdFALSE )\r
-                       {\r
-                               pcMessage++;\r
-                       }\r
-               }\r
-               else\r
-               {\r
-                       pcMessage++;\r
-               }\r
-       }\r
-\r
-       *pcTarget = '\0';\r
-\r
-       return pcBuffer;\r
-}\r
+/*
+FreeRTOS+TCP V2.0.11
+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
+*/
+
+/* WinPCap includes. */
+#define HAVE_REMOTE
+#include "pcap.h"
+
+/* FreeRTOS includes. */
+#include "FreeRTOS.h"
+#include "task.h"
+#include "semphr.h"
+
+/* FreeRTOS+TCP includes. */
+#include "FreeRTOS_IP.h"
+#include "FreeRTOS_IP_Private.h"
+#include "NetworkBufferManagement.h"
+
+/* Thread-safe circular buffers are being used to pass data to and from the PCAP
+access functions. */
+#include "Win32-Extensions.h"
+#include "FreeRTOS_Stream_Buffer.h"
+
+/* Sizes of the thread safe circular buffers used to pass data to and from the
+WinPCAP Windows threads. */
+#define xSEND_BUFFER_SIZE  32768
+#define xRECV_BUFFER_SIZE  32768
+
+/* If ipconfigETHERNET_DRIVER_FILTERS_FRAME_TYPES is set to 1, then the Ethernet
+driver will filter incoming packets and only pass the stack those packets it
+considers need processing. */
+#if( ipconfigETHERNET_DRIVER_FILTERS_FRAME_TYPES == 0 )
+       #define ipCONSIDER_FRAME_FOR_PROCESSING( pucEthernetBuffer ) eProcessBuffer
+#else
+       #define ipCONSIDER_FRAME_FOR_PROCESSING( pucEthernetBuffer ) eConsiderFrameForProcessing( ( pucEthernetBuffer ) )
+#endif
+
+/* Used to insert test code only. */
+#define niDISRUPT_PACKETS      0
+
+/*-----------------------------------------------------------*/
+
+/*
+ * Windows threads that are outside of the control of the FreeRTOS simulator are
+ * used to interface with the WinPCAP libraries.
+ */
+DWORD WINAPI prvWinPcapRecvThread( void *pvParam );
+DWORD WINAPI prvWinPcapSendThread( void *pvParam );
+
+/*
+ * Print out a numbered list of network interfaces that are available on the
+ * host computer.
+ */
+static pcap_if_t * prvPrintAvailableNetworkInterfaces( void );
+
+/*
+ * Open the network interface.  The number of the interface to be opened is set
+ * by the configNETWORK_INTERFACE_TO_USE constant in FreeRTOSConfig.h.
+ */
+static void prvOpenSelectedNetworkInterface( pcap_if_t *pxAllNetworkInterfaces );
+static int prvOpenInterface( const char *pucName );
+
+/*
+ * Configure the capture filter to allow blocking reads, and to filter out
+ * packets that are not of interest to this demo.
+ */
+static void prvConfigureCaptureBehaviour( void );
+
+/*
+ * A function that simulates Ethernet interrupts by periodically polling the
+ * WinPCap interface for new data.
+ */
+static void prvInterruptSimulatorTask( void *pvParameters );
+
+/*
+ * Create the buffers that are used to pass data between the FreeRTOS simulator
+ * and the Win32 threads that manage WinPCAP.
+ */
+static void prvCreateThreadSafeBuffers( void );
+
+/*
+ * Utility function used to format print messages only.
+ */
+static const char *prvRemoveSpaces( char *pcBuffer, int aBuflen, const char *pcMessage );
+
+/*-----------------------------------------------------------*/
+
+/* Required by the WinPCap library. */
+static char cErrorBuffer[ PCAP_ERRBUF_SIZE ];
+
+/* An event used to wake up the Win32 thread that sends data through the WinPCAP
+library. */
+static void *pvSendEvent = NULL;
+
+/* _HT_ made the PCAP interface number configurable through the program's
+parameters in order to test in different machines. */
+static BaseType_t xConfigNetworkInterfaceToUse = configNETWORK_INTERFACE_TO_USE;
+
+/* Handles to the Windows threads that handle the PCAP IO. */
+static HANDLE vWinPcapRecvThreadHandle = NULL;
+static HANDLE vWinPcapSendThreadHandle = NULL;;
+
+/* The interface being used by WinPCap. */
+static pcap_t *pxOpenedInterfaceHandle = NULL;
+
+/* Circular buffers used by the PCAP Win32 threads. */
+static StreamBuffer_t *xSendBuffer = NULL;
+static StreamBuffer_t *xRecvBuffer = NULL;
+
+/* The MAC address initially set to the constants defined in FreeRTOSConfig.h. */
+extern uint8_t ucMACAddress[ 6 ];
+
+/* Logs the number of WinPCAP send failures, for viewing in the debugger only. */
+static volatile uint32_t ulWinPCAPSendFailures = 0;
+
+/*-----------------------------------------------------------*/
+
+BaseType_t xNetworkInterfaceInitialise( void )
+{
+BaseType_t xReturn = pdFALSE;
+pcap_if_t *pxAllNetworkInterfaces;
+
+       /* Query the computer the simulation is being executed on to find the
+       network interfaces it has installed. */
+       pxAllNetworkInterfaces = prvPrintAvailableNetworkInterfaces();
+
+       /* Open the network interface.  The number of the interface to be opened is
+       set by the configNETWORK_INTERFACE_TO_USE constant in FreeRTOSConfig.h.
+       Calling this function will set the pxOpenedInterfaceHandle variable.  If,
+       after calling this function, pxOpenedInterfaceHandle is equal to NULL, then
+       the interface could not be opened. */
+       if( pxAllNetworkInterfaces != NULL )
+       {
+               prvOpenSelectedNetworkInterface( pxAllNetworkInterfaces );
+       }
+
+       if( pxOpenedInterfaceHandle != NULL )
+       {
+               xReturn = pdPASS;
+       }
+
+       return xReturn;
+}
+/*-----------------------------------------------------------*/
+
+static void prvCreateThreadSafeBuffers( void )
+{
+       /* The buffer used to pass data to be transmitted from a FreeRTOS task to
+       the Win32 thread that sends via the WinPCAP library. */
+       if( xSendBuffer == NULL)
+       {
+               xSendBuffer = ( StreamBuffer_t * ) malloc( sizeof( *xSendBuffer ) - sizeof( xSendBuffer->ucArray ) + xSEND_BUFFER_SIZE + 1 );
+               configASSERT( xSendBuffer );
+               memset( xSendBuffer, '\0', sizeof( *xSendBuffer ) - sizeof( xSendBuffer->ucArray ) );
+               xSendBuffer->LENGTH = xSEND_BUFFER_SIZE + 1;
+       }
+
+       /* The buffer used to pass received data from the Win32 thread that receives
+       via the WinPCAP library to the FreeRTOS task. */
+       if( xRecvBuffer == NULL)
+       {
+               xRecvBuffer = ( StreamBuffer_t * ) malloc( sizeof( *xRecvBuffer ) - sizeof( xRecvBuffer->ucArray ) + xRECV_BUFFER_SIZE + 1 );
+               configASSERT( xRecvBuffer );
+               memset( xRecvBuffer, '\0', sizeof( *xRecvBuffer ) - sizeof( xRecvBuffer->ucArray ) );
+               xRecvBuffer->LENGTH = xRECV_BUFFER_SIZE + 1;
+       }
+}
+/*-----------------------------------------------------------*/
+
+BaseType_t xNetworkInterfaceOutput( NetworkBufferDescriptor_t * const pxNetworkBuffer, BaseType_t bReleaseAfterSend )
+{
+size_t xSpace;
+
+       iptraceNETWORK_INTERFACE_TRANSMIT();
+       configASSERT( xIsCallingFromIPTask() == pdTRUE );
+
+       /* Both the length of the data being sent and the actual data being sent
+       are placed in the thread safe buffer used to pass data between the FreeRTOS
+       tasks and the Win32 thread that sends data via the WinPCAP library.  Drop
+       the packet if there is insufficient space in the buffer to hold both. */
+       xSpace = uxStreamBufferGetSpace( xSendBuffer );
+
+       if( ( pxNetworkBuffer->xDataLength <= ( ipconfigNETWORK_MTU + ipSIZE_OF_ETH_HEADER ) ) &&
+               ( xSpace >= ( pxNetworkBuffer->xDataLength + sizeof( pxNetworkBuffer->xDataLength ) ) ) )
+       {
+               /* First write in the length of the data, then write in the data
+               itself. */
+               uxStreamBufferAdd( xSendBuffer, 0, ( const uint8_t * ) &( pxNetworkBuffer->xDataLength ), sizeof( pxNetworkBuffer->xDataLength ) );
+               uxStreamBufferAdd( xSendBuffer, 0, ( const uint8_t * ) pxNetworkBuffer->pucEthernetBuffer, pxNetworkBuffer->xDataLength );
+       }
+       else
+       {
+               FreeRTOS_debug_printf( ( "xNetworkInterfaceOutput: send buffers full to store %lu\n", pxNetworkBuffer->xDataLength ) );
+       }
+
+       /* Kick the Tx task in either case in case it doesn't know the buffer is
+       full. */
+       SetEvent( pvSendEvent );
+
+       /* The buffer has been sent so can be released. */
+       if( bReleaseAfterSend != pdFALSE )
+       {
+               vReleaseNetworkBufferAndDescriptor( pxNetworkBuffer );
+       }
+
+       return pdPASS;
+}
+/*-----------------------------------------------------------*/
+
+static pcap_if_t * prvPrintAvailableNetworkInterfaces( void )
+{
+pcap_if_t * pxAllNetworkInterfaces = NULL, *xInterface;
+int32_t lInterfaceNumber = 1;
+char cBuffer[ 512 ];
+static BaseType_t xInvalidInterfaceDetected = pdFALSE;
+
+       if( xInvalidInterfaceDetected == pdFALSE )
+       {
+               if( pcap_findalldevs_ex( PCAP_SRC_IF_STRING, NULL, &pxAllNetworkInterfaces, cErrorBuffer ) == -1 )
+               {
+                       printf( "Could not obtain a list of network interfaces\n%s\n", cErrorBuffer );
+                       pxAllNetworkInterfaces = NULL;
+               }
+               else
+               {
+                       printf( "\r\n\r\nThe following network interfaces are available:\r\n\r\n" );
+               }
+
+               if( pxAllNetworkInterfaces != NULL )
+               {
+                       /* Print out the list of network interfaces.  The first in the list
+                       is interface '1', not interface '0'. */
+                       for( xInterface = pxAllNetworkInterfaces; xInterface != NULL; xInterface = xInterface->next )
+                       {
+                               /* The descriptions of the devices can be full of spaces, clean them
+                               a little.  printf() can only be used here because the network is not
+                               up yet - so no other network tasks will be running. */
+                               printf( "Interface %d - %s\n", lInterfaceNumber, prvRemoveSpaces( cBuffer, sizeof( cBuffer ), xInterface->name ) );
+                               printf( "              (%s)\n", prvRemoveSpaces(cBuffer, sizeof( cBuffer ), xInterface->description ? xInterface->description : "No description" ) );
+                               printf( "\n" );
+                               lInterfaceNumber++;
+                       }
+               }
+
+               if( lInterfaceNumber == 1 )
+               {
+                       /* The interface number was never incremented, so the above for() loop
+                       did not execute meaning no interfaces were found. */
+                       printf( " \nNo network interfaces were found.\n" );
+                       pxAllNetworkInterfaces = NULL;
+               }
+
+               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" );
+
+               if( ( xConfigNetworkInterfaceToUse < 1L ) || ( xConfigNetworkInterfaceToUse >= lInterfaceNumber ) )
+               {
+                       printf( "\r\nERROR:  configNETWORK_INTERFACE_TO_USE is set to %d, which is an invalid value.\r\n", xConfigNetworkInterfaceToUse );
+                       printf( "Please set configNETWORK_INTERFACE_TO_USE to one of the interface numbers listed above,\r\n" );
+                       printf( "then re-compile and re-start the application.  Only Ethernet (as opposed to WiFi)\r\n" );
+                       printf( "interfaces are supported.\r\n\r\nHALTING\r\n\r\n\r\n" );
+                       xInvalidInterfaceDetected = pdTRUE;
+
+                       if( pxAllNetworkInterfaces != NULL )
+                       {
+                               /* Free the device list, as no devices are going to be opened. */
+                               pcap_freealldevs( pxAllNetworkInterfaces );
+                               pxAllNetworkInterfaces = NULL;
+                       }
+               }
+               else
+               {
+                       printf( "Attempting to open interface number %d.\n", xConfigNetworkInterfaceToUse );
+               }
+       }
+
+       return pxAllNetworkInterfaces;
+}
+/*-----------------------------------------------------------*/
+
+static int prvOpenInterface( const char *pucName )
+{
+static char pucInterfaceName[ 256 ];
+
+       if( pucName != NULL )
+       {
+               strncpy( pucInterfaceName, pucName, sizeof( pucInterfaceName ) );
+       }
+
+       pxOpenedInterfaceHandle = pcap_open(    pucInterfaceName,               /* The name of the selected interface. */
+                                                                                       ipTOTAL_ETHERNET_FRAME_SIZE, /* The size of the packet to capture. */
+                                                                                       PCAP_OPENFLAG_PROMISCUOUS,      /* Open in promiscuous mode as the MAC and
+                                                                                                                                               IP address is going to be "simulated", and
+                                                                                                                                               not be the real MAC and IP address.  This allows
+                                                                                                                                               traffic to the simulated IP address to be routed
+                                                                                                                                               to uIP, and traffic to the real IP address to be
+                                                                                                                                               routed to the Windows TCP/IP stack. */
+                                                                                       100,
+                                                                                       NULL,                                   /* No authentication is required as this is
+                                                                                                                                               not a remote capture session. */
+                                                                                       cErrorBuffer
+                                                                          );
+
+       if ( pxOpenedInterfaceHandle == NULL )
+       {
+               printf( "\n%s is not supported by WinPcap and cannot be opened\n", pucInterfaceName );
+               return 1;
+       }
+       else
+       {
+               /* Configure the capture filter to allow blocking reads, and to filter
+               out packets that are not of interest to this demo. */
+               prvConfigureCaptureBehaviour();
+       }
+       return 0;
+}
+/*-----------------------------------------------------------*/
+
+static void prvOpenSelectedNetworkInterface( pcap_if_t *pxAllNetworkInterfaces )
+{
+pcap_if_t *pxInterface;
+int32_t x;
+
+       /* Walk the list of devices until the selected device is located. */
+       pxInterface = pxAllNetworkInterfaces;
+       for( x = 0L; x < ( xConfigNetworkInterfaceToUse - 1L ); x++ )
+       {
+               pxInterface = pxInterface->next;
+       }
+
+       /* Open the selected interface. */
+       if( prvOpenInterface( pxInterface->name ) == 0 )
+       {
+               printf( "Successfully opened interface number %d.\n", x + 1 );
+       }
+       else
+       {
+               printf( "Failed to open interface number %d.\n", x + 1 );
+       }
+
+       /* The device list is no longer required. */
+       pcap_freealldevs( pxAllNetworkInterfaces );
+}
+/*-----------------------------------------------------------*/
+
+static void prvConfigureCaptureBehaviour( void )
+{
+struct bpf_program xFilterCode;
+uint32_t ulNetMask;
+
+       /* Set up a filter so only the packets of interest are passed to the IP
+       stack.  cErrorBuffer is used for convenience to create the string.  Don't
+       confuse this with an error message. */
+       sprintf( cErrorBuffer, "broadcast or multicast or ether host %x:%x:%x:%x:%x:%x",
+               ucMACAddress[0], ucMACAddress[1], ucMACAddress[2], ucMACAddress[3], ucMACAddress[4], ucMACAddress[5] );
+
+       ulNetMask = ( configNET_MASK3 << 24UL ) | ( configNET_MASK2 << 16UL ) | ( configNET_MASK1 << 8L ) | configNET_MASK0;
+
+       if( pcap_compile( pxOpenedInterfaceHandle, &xFilterCode, cErrorBuffer, 1, ulNetMask ) < 0 )
+       {
+               printf( "\nThe packet filter string is invalid\n" );
+       }
+       else
+       {
+               if( pcap_setfilter( pxOpenedInterfaceHandle, &xFilterCode ) < 0 )
+               {
+                       printf( "\nAn error occurred setting the packet filter.\n" );
+               }
+               /* When pcap_compile() succeeds, it allocates memory for the memory pointed to by the bpf_program struct 
+               parameter.pcap_freecode() will free that memory. */
+               pcap_freecode( &xFilterCode );
+       }
+
+       /* Create the buffers used to pass packets between the FreeRTOS simulator
+       and the Win32 threads that are handling WinPCAP. */
+       prvCreateThreadSafeBuffers();
+
+       if( pvSendEvent == NULL )
+       {
+               /* Create event used to signal the Win32 WinPCAP Tx thread. */
+               pvSendEvent = CreateEvent( NULL, FALSE, TRUE, NULL );
+
+               /* Create the Win32 thread that handles WinPCAP Rx. */
+               vWinPcapRecvThreadHandle = CreateThread(
+                       NULL,   /* Pointer to thread security attributes. */
+                       0,              /* Initial thread stack size, in bytes. */
+                       prvWinPcapRecvThread,   /* Pointer to thread function. */
+                       NULL,   /* Argument for new thread. */
+                       0,              /* Creation flags. */
+                       NULL );
+
+               /* Use the cores that are not used by the FreeRTOS tasks. */
+               SetThreadAffinityMask( vWinPcapRecvThreadHandle, ~0x01u );
+
+               /* Create the Win32 thread that handlers WinPCAP Tx. */
+               vWinPcapSendThreadHandle = CreateThread(
+                       NULL,   /* Pointer to thread security attributes. */
+                       0,              /* initial thread stack size, in bytes. */
+                       prvWinPcapSendThread,   /* Pointer to thread function. */
+                       NULL,   /* Argument for new thread. */
+                       0,              /* Creation flags. */
+                       NULL );
+
+               /* Use the cores that are not used by the FreeRTOS tasks. */
+               SetThreadAffinityMask( vWinPcapSendThreadHandle, ~0x01u );
+
+               /* Create a task that simulates an interrupt in a real system.  This will
+               block waiting for packets, then send a message to the IP task when data
+               is available. */
+               xTaskCreate( prvInterruptSimulatorTask, "MAC_ISR", configMINIMAL_STACK_SIZE, NULL, configMAC_ISR_SIMULATOR_PRIORITY, NULL );
+       }
+}
+/*-----------------------------------------------------------*/
+
+/* WinPCAP function. */
+void pcap_callback( u_char *user, const struct pcap_pkthdr *pkt_header, const u_char *pkt_data )
+{
+       (void)user;
+
+       /* THIS IS CALLED FROM A WINDOWS THREAD - DO NOT ATTEMPT ANY FREERTOS CALLS
+       OR TO PRINT OUT MESSAGES HERE. */
+
+       /* Pass data to the FreeRTOS simulator on a thread safe circular buffer. */
+       if( ( pkt_header->caplen <= ( ipconfigNETWORK_MTU + ipSIZE_OF_ETH_HEADER ) ) &&
+               ( uxStreamBufferGetSpace( xRecvBuffer ) >= ( ( ( size_t ) pkt_header->caplen ) + sizeof( *pkt_header ) ) ) )
+       {
+               uxStreamBufferAdd( xRecvBuffer, 0, ( const uint8_t* ) pkt_header, sizeof( *pkt_header ) );
+               uxStreamBufferAdd( xRecvBuffer, 0, ( const uint8_t* ) pkt_data, ( size_t ) pkt_header->caplen );
+       }
+}
+/*-----------------------------------------------------------*/
+
+DWORD WINAPI prvWinPcapRecvThread ( void *pvParam )
+{
+       ( void ) pvParam;
+
+       /* THIS IS A WINDOWS THREAD - DO NOT ATTEMPT ANY FREERTOS CALLS OR TO PRINT
+       OUT MESSAGES HERE. */
+
+       for( ;; )
+       {
+               pcap_dispatch( pxOpenedInterfaceHandle, 1, pcap_callback, ( u_char * ) "mydata" );
+       }
+}
+/*-----------------------------------------------------------*/
+
+DWORD WINAPI prvWinPcapSendThread( void *pvParam )
+{
+size_t xLength;
+uint8_t ucBuffer[ ipconfigNETWORK_MTU + ipSIZE_OF_ETH_HEADER ];
+static char cErrorMessage[ 1024 ];
+const DWORD xMaxMSToWait = 1000;
+
+       /* THIS IS A WINDOWS THREAD - DO NOT ATTEMPT ANY FREERTOS CALLS OR TO PRINT
+       OUT MESSAGES HERE. */
+
+       /* Remove compiler warnings about unused parameters. */
+       ( void ) pvParam;
+
+       for( ;; )
+       {
+               /* Wait until notified of something to send. */
+               WaitForSingleObject( pvSendEvent, xMaxMSToWait );
+
+               /* Is there more than the length value stored in the circular buffer
+               used to pass data from the FreeRTOS simulator into this Win32 thread? */
+               while( uxStreamBufferGetSize( xSendBuffer ) > sizeof( xLength ) )
+               {
+                       uxStreamBufferGet( xSendBuffer, 0, ( uint8_t * ) &xLength, sizeof( xLength ), pdFALSE );
+                       uxStreamBufferGet( xSendBuffer, 0, ( uint8_t* ) ucBuffer, xLength, pdFALSE );
+                       if( pcap_sendpacket( pxOpenedInterfaceHandle, ucBuffer, xLength  ) != 0 )
+                       {
+                               ulWinPCAPSendFailures++;
+                       }
+               }
+       }
+}
+/*-----------------------------------------------------------*/
+
+static void prvInterruptSimulatorTask( void *pvParameters )
+{
+struct pcap_pkthdr xHeader;
+static struct pcap_pkthdr *pxHeader;
+const uint8_t *pucPacketData;
+uint8_t ucRecvBuffer[ ipconfigNETWORK_MTU + ipSIZE_OF_ETH_HEADER ];
+NetworkBufferDescriptor_t *pxNetworkBuffer;
+IPStackEvent_t xRxEvent = { eNetworkRxEvent, NULL };
+eFrameProcessingResult_t eResult;
+
+       /* Remove compiler warnings about unused parameters. */
+       ( void ) pvParameters;
+
+       for( ;; )
+       {
+               /* Does the circular buffer used to pass data from the Win32 thread that
+               handles WinPCAP Rx into the FreeRTOS simulator contain another packet? */
+               if( uxStreamBufferGetSize( xRecvBuffer ) > sizeof( xHeader ) )
+               {
+                       /* Get the next packet. */
+                       uxStreamBufferGet( xRecvBuffer, 0, (uint8_t*)&xHeader, sizeof( xHeader ), pdFALSE );
+                       uxStreamBufferGet( xRecvBuffer, 0, (uint8_t*)ucRecvBuffer, ( size_t ) xHeader.len, pdFALSE );
+                       pucPacketData = ucRecvBuffer;
+                       pxHeader = &xHeader;
+
+                       iptraceNETWORK_INTERFACE_RECEIVE();
+
+                       /* Check for minimal size. */
+                       if( pxHeader->len >= sizeof( EthernetHeader_t ) )
+                       {
+                               eResult = ipCONSIDER_FRAME_FOR_PROCESSING( pucPacketData );
+                       }
+                       else
+                       {
+                               eResult = eReleaseBuffer;
+                       }
+
+                       if( eResult == eProcessBuffer )
+                       {
+                               /* Will the data fit into the frame buffer? */
+                               if( pxHeader->len <= ipTOTAL_ETHERNET_FRAME_SIZE )
+                               {
+                                       /* Obtain a buffer into which the data can be placed.  This
+                                       is only an interrupt simulator, not a real interrupt, so it
+                                       is ok to call the task level function here, but note that
+                                       some buffer implementations cannot be called from a real
+                                       interrupt. */
+                                       pxNetworkBuffer = pxGetNetworkBufferWithDescriptor( pxHeader->len, 0 );
+
+                                       if( pxNetworkBuffer != NULL )
+                                       {
+                                               memcpy( pxNetworkBuffer->pucEthernetBuffer, pucPacketData, pxHeader->len );
+                                               pxNetworkBuffer->xDataLength = ( size_t ) pxHeader->len;
+
+                                               #if( niDISRUPT_PACKETS == 1 )
+                                               {
+                                                       pxNetworkBuffer = vRxFaultInjection( pxNetworkBuffer, pucPacketData );
+                                               }
+                                               #endif /* niDISRUPT_PACKETS */
+
+                                               if( pxNetworkBuffer != NULL )
+                                               {
+                                                       xRxEvent.pvData = ( void * ) pxNetworkBuffer;
+
+                                                       /* Data was received and stored.  Send a message to
+                                                       the IP task to let it know. */
+                                                       if( xSendEventStructToIPTask( &xRxEvent, ( TickType_t ) 0 ) == pdFAIL )
+                                                       {
+                                                               /* The buffer could not be sent to the stack so
+                                                               must be released again.  This is only an
+                                                               interrupt simulator, not a real interrupt, so it
+                                                               is ok to use the task level function here, but
+                                                               note no all buffer implementations will allow
+                                                               this function to be executed from a real
+                                                               interrupt. */
+                                                               vReleaseNetworkBufferAndDescriptor( pxNetworkBuffer );
+                                                               iptraceETHERNET_RX_EVENT_LOST();
+                                                       }
+                                               }
+                                               else
+                                               {
+                                                       /* The packet was already released or stored inside
+                                                       vRxFaultInjection().  Don't release it here. */
+                                               }
+                                       }
+                                       else
+                                       {
+                                               iptraceETHERNET_RX_EVENT_LOST();
+                                       }
+                               }
+                               else
+                               {
+                                       /* Log that a packet was dropped because it would have
+                                       overflowed the buffer, but there may be more buffers to
+                                       process. */
+                               }
+                       }
+               }
+               else
+               {
+                       /* There is no real way of simulating an interrupt.  Make sure
+                       other tasks can run. */
+                       vTaskDelay( configWINDOWS_MAC_INTERRUPT_SIMULATOR_DELAY );
+               }
+       }
+}
+/*-----------------------------------------------------------*/
+
+static const char *prvRemoveSpaces( char *pcBuffer, int aBuflen, const char *pcMessage )
+{
+       char *pcTarget = pcBuffer;
+
+       /* Utility function used to formap messages being printed only. */
+       while( ( *pcMessage != 0 ) && ( pcTarget < ( pcBuffer + aBuflen - 1 ) ) )
+       {
+               *( pcTarget++ ) = *pcMessage;
+
+               if( isspace( *pcMessage ) != pdFALSE )
+               {
+                       while( isspace( *pcMessage ) != pdFALSE )
+                       {
+                               pcMessage++;
+                       }
+               }
+               else
+               {
+                       pcMessage++;
+               }
+       }
+
+       *pcTarget = '\0';
+
+       return pcBuffer;
+}
index 1c11976cbcec7779ed97ef48964cc7a25bcdd9d9..c8f9653951e567f4a1e5ed6f26f9409ffa8fecec 100644 (file)
-/*\r
-FreeRTOS+TCP V2.0.11\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://aws.amazon.com/freertos\r
- http://www.FreeRTOS.org\r
-*/\r
-\r
-/* Standard includes. */\r
-#include <stdint.h>\r
-#include <stdio.h>\r
-#include <stdlib.h>\r
-\r
-/* FreeRTOS includes. */\r
-#include "FreeRTOS.h"\r
-#include "task.h"\r
-#include "queue.h"\r
-#include "semphr.h"\r
-\r
-/* FreeRTOS+TCP includes. */\r
-#include "FreeRTOS_IP.h"\r
-#include "FreeRTOS_Sockets.h"\r
-#include "FreeRTOS_IP_Private.h"\r
-#include "NetworkBufferManagement.h"\r
-#include "NetworkInterface.h"\r
-\r
-/* Xilinx library files. */\r
-#include <xemacps.h>\r
-#include "Zynq/x_topology.h"\r
-#include "Zynq/x_emacpsif.h"\r
-#include "Zynq/x_emacpsif_hw.h"\r
-\r
-/* Provided memory configured as uncached. */\r
-#include "uncached_memory.h"\r
-\r
-#ifndef        BMSR_LINK_STATUS\r
-       #define BMSR_LINK_STATUS            0x0004UL\r
-#endif\r
-\r
-#ifndef        PHY_LS_HIGH_CHECK_TIME_MS\r
-       /* Check if the LinkSStatus in the PHY is still high after 15 seconds of not\r
-       receiving packets. */\r
-       #define PHY_LS_HIGH_CHECK_TIME_MS       15000\r
-#endif\r
-\r
-#ifndef        PHY_LS_LOW_CHECK_TIME_MS\r
-       /* Check if the LinkSStatus in the PHY is still low every second. */\r
-       #define PHY_LS_LOW_CHECK_TIME_MS        1000\r
-#endif\r
-\r
-/* The size of each buffer when BufferAllocation_1 is used:\r
-http://www.freertos.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/Embedded_Ethernet_Buffer_Management.html */\r
-#define niBUFFER_1_PACKET_SIZE         1536\r
-\r
-/* Naming and numbering of PHY registers. */\r
-#define PHY_REG_01_BMSR                        0x01    /* Basic mode status register */\r
-\r
-#ifndef iptraceEMAC_TASK_STARTING\r
-       #define iptraceEMAC_TASK_STARTING()     do { } while( 0 )\r
-#endif\r
-\r
-/* Default the size of the stack used by the EMAC deferred handler task to twice\r
-the size of the stack used by the idle task - but allow this to be overridden in\r
-FreeRTOSConfig.h as configMINIMAL_STACK_SIZE is a user definable constant. */\r
-#ifndef configEMAC_TASK_STACK_SIZE\r
-       #define configEMAC_TASK_STACK_SIZE ( 2 * configMINIMAL_STACK_SIZE )\r
-#endif\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-/*\r
- * Look for the link to be up every few milliseconds until either xMaxTime time\r
- * has passed or a link is found.\r
- */\r
-static BaseType_t prvGMACWaitLS( TickType_t xMaxTime );\r
-\r
-/*\r
- * A deferred interrupt handler for all MAC/DMA interrupt sources.\r
- */\r
-static void prvEMACHandlerTask( void *pvParameters );\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-/* EMAC data/descriptions. */\r
-static xemacpsif_s xEMACpsif;\r
-struct xtopology_t xXTopology =\r
-{\r
-       .emac_baseaddr = XPAR_PS7_ETHERNET_0_BASEADDR,\r
-       .emac_type = xemac_type_emacps,\r
-       .intc_baseaddr = 0x0,\r
-       .intc_emac_intr = 0x0,\r
-       .scugic_baseaddr = XPAR_PS7_SCUGIC_0_BASEADDR,\r
-       .scugic_emac_intr = 0x36,\r
-};\r
-\r
-XEmacPs_Config mac_config =\r
-{\r
-       .DeviceId = XPAR_PS7_ETHERNET_0_DEVICE_ID,      /**< Unique ID  of device */\r
-       .BaseAddress = XPAR_PS7_ETHERNET_0_BASEADDR /**< Physical base address of IPIF registers */\r
-};\r
-\r
-extern int phy_detected;\r
-\r
-/* A copy of PHY register 1: 'PHY_REG_01_BMSR' */\r
-static uint32_t ulPHYLinkStatus = 0;\r
-\r
-#if( ipconfigUSE_LLMNR == 1 )\r
-       static const uint8_t xLLMNR_MACAddress[] = { 0x01, 0x00, 0x5E, 0x00, 0x00, 0xFC };\r
-#endif\r
-\r
-/* ucMACAddress as it appears in main.c */\r
-extern const uint8_t ucMACAddress[ 6 ];\r
-\r
-/* Holds the handle of the task used as a deferred interrupt processor.  The\r
-handle is used so direct notifications can be sent to the task for all EMAC/DMA\r
-related interrupts. */\r
-TaskHandle_t xEMACTaskHandle = NULL;\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-BaseType_t xNetworkInterfaceInitialise( void )\r
-{\r
-uint32_t ulLinkSpeed, ulDMAReg;\r
-BaseType_t xStatus, xLinkStatus;\r
-XEmacPs *pxEMAC_PS;\r
-const TickType_t xWaitLinkDelay = pdMS_TO_TICKS( 7000UL ), xWaitRelinkDelay = pdMS_TO_TICKS( 1000UL );\r
-\r
-       /* Guard against the init function being called more than once. */\r
-       if( xEMACTaskHandle == NULL )\r
-       {\r
-               pxEMAC_PS = &( xEMACpsif.emacps );\r
-               memset( &xEMACpsif, '\0', sizeof( xEMACpsif ) );\r
-\r
-               xStatus = XEmacPs_CfgInitialize( pxEMAC_PS, &mac_config, mac_config.BaseAddress);\r
-               if( xStatus != XST_SUCCESS )\r
-               {\r
-                       FreeRTOS_printf( ( "xEMACInit: EmacPs Configuration Failed....\n" ) );\r
-               }\r
-\r
-               /* Initialize the mac and set the MAC address. */\r
-               XEmacPs_SetMacAddress( pxEMAC_PS, ( void * ) ucMACAddress, 1 );\r
-\r
-               #if( ipconfigUSE_LLMNR == 1 )\r
-               {\r
-                       /* Also add LLMNR multicast MAC address. */\r
-                       XEmacPs_SetMacAddress( pxEMAC_PS, ( void * )xLLMNR_MACAddress, 2 );\r
-               }\r
-               #endif  /* ipconfigUSE_LLMNR == 1 */\r
-\r
-               XEmacPs_SetMdioDivisor( pxEMAC_PS, MDC_DIV_224 );\r
-               ulLinkSpeed = Phy_Setup( pxEMAC_PS );\r
-               XEmacPs_SetOperatingSpeed( pxEMAC_PS, ulLinkSpeed);\r
-\r
-               /* Setting the operating speed of the MAC needs a delay. */\r
-               vTaskDelay( pdMS_TO_TICKS( 25UL ) );\r
-\r
-               ulDMAReg = XEmacPs_ReadReg( pxEMAC_PS->Config.BaseAddress, XEMACPS_DMACR_OFFSET);\r
-\r
-               /* DISC_WHEN_NO_AHB: when set, the GEM DMA will automatically discard receive\r
-               packets from the receiver packet buffer memory when no AHB resource is available. */\r
-               XEmacPs_WriteReg( pxEMAC_PS->Config.BaseAddress, XEMACPS_DMACR_OFFSET,\r
-                       ulDMAReg | XEMACPS_DMACR_DISC_WHEN_NO_AHB_MASK);\r
-\r
-               setup_isr( &xEMACpsif );\r
-               init_dma( &xEMACpsif );\r
-               start_emacps( &xEMACpsif );\r
-\r
-               prvGMACWaitLS( xWaitLinkDelay );\r
-\r
-               /* The deferred interrupt handler task is created at the highest\r
-               possible priority to ensure the interrupt handler can return directly\r
-               to it.  The task's handle is stored in xEMACTaskHandle so interrupts can\r
-               notify the task when there is something to process. */\r
-               xTaskCreate( prvEMACHandlerTask, "EMAC", configEMAC_TASK_STACK_SIZE, NULL, configMAX_PRIORITIES - 1, &xEMACTaskHandle );\r
-       }\r
-       else\r
-       {\r
-               /* Initialisation was already performed, just wait for the link. */\r
-               prvGMACWaitLS( xWaitRelinkDelay );\r
-       }\r
-\r
-       /* Only return pdTRUE when the Link Status of the PHY is high, otherwise the\r
-       DHCP process and all other communication will fail. */\r
-       xLinkStatus = xGetPhyLinkStatus();\r
-\r
-       return ( xLinkStatus != pdFALSE );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-BaseType_t xNetworkInterfaceOutput( NetworkBufferDescriptor_t * const pxBuffer, BaseType_t bReleaseAfterSend )\r
-{\r
-       if( ( ulPHYLinkStatus & BMSR_LINK_STATUS ) != 0 )\r
-       {\r
-               iptraceNETWORK_INTERFACE_TRANSMIT();\r
-               emacps_send_message( &xEMACpsif, pxBuffer, bReleaseAfterSend );\r
-       }\r
-       else if( bReleaseAfterSend != pdFALSE )\r
-       {\r
-               /* No link. */\r
-               vReleaseNetworkBufferAndDescriptor( pxBuffer );\r
-       }\r
-\r
-       return pdTRUE;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static inline unsigned long ulReadMDIO( unsigned ulRegister )\r
-{\r
-uint16_t usValue;\r
-\r
-       XEmacPs_PhyRead( &( xEMACpsif.emacps ), phy_detected, ulRegister, &usValue );\r
-       return usValue;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static BaseType_t prvGMACWaitLS( TickType_t xMaxTime )\r
-{\r
-TickType_t xStartTime, xEndTime;\r
-const TickType_t xShortDelay = pdMS_TO_TICKS( 20UL );\r
-BaseType_t xReturn;\r
-\r
-       xStartTime = xTaskGetTickCount();\r
-\r
-       for( ;; )\r
-       {\r
-               xEndTime = xTaskGetTickCount();\r
-\r
-               if( xEndTime - xStartTime > xMaxTime )\r
-               {\r
-                       xReturn = pdFALSE;\r
-                       break;\r
-               }\r
-               ulPHYLinkStatus = ulReadMDIO( PHY_REG_01_BMSR );\r
-\r
-               if( ( ulPHYLinkStatus & BMSR_LINK_STATUS ) != 0 )\r
-               {\r
-                       xReturn = pdTRUE;\r
-                       break;\r
-               }\r
-\r
-               vTaskDelay( xShortDelay );\r
-       }\r
-\r
-       return xReturn;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-void vNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] )\r
-{\r
-static uint8_t ucNetworkPackets[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS * niBUFFER_1_PACKET_SIZE ] __attribute__ ( ( aligned( 32 ) ) );\r
-uint8_t *ucRAMBuffer = ucNetworkPackets;\r
-uint32_t ul;\r
-\r
-       for( ul = 0; ul < ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS; ul++ )\r
-       {\r
-               pxNetworkBuffers[ ul ].pucEthernetBuffer = ucRAMBuffer + ipBUFFER_PADDING;\r
-               *( ( unsigned * ) ucRAMBuffer ) = ( unsigned ) ( &( pxNetworkBuffers[ ul ] ) );\r
-               ucRAMBuffer += niBUFFER_1_PACKET_SIZE;\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-BaseType_t xGetPhyLinkStatus( void )\r
-{\r
-BaseType_t xReturn;\r
-\r
-       if( ( ulPHYLinkStatus & BMSR_LINK_STATUS ) == 0 )\r
-       {\r
-               xReturn = pdFALSE;\r
-       }\r
-       else\r
-       {\r
-               xReturn = pdTRUE;\r
-       }\r
-\r
-       return xReturn;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvEMACHandlerTask( void *pvParameters )\r
-{\r
-TimeOut_t xPhyTime;\r
-TickType_t xPhyRemTime;\r
-UBaseType_t uxLastMinBufferCount = 0;\r
-UBaseType_t uxCurrentCount;\r
-BaseType_t xResult = 0;\r
-uint32_t xStatus;\r
-const TickType_t ulMaxBlockTime = pdMS_TO_TICKS( 100UL );\r
-\r
-       /* Remove compiler warnings about unused parameters. */\r
-       ( void ) pvParameters;\r
-\r
-       /* A possibility to set some additional task properties like calling\r
-       portTASK_USES_FLOATING_POINT() */\r
-       iptraceEMAC_TASK_STARTING();\r
-\r
-       vTaskSetTimeOutState( &xPhyTime );\r
-       xPhyRemTime = pdMS_TO_TICKS( PHY_LS_LOW_CHECK_TIME_MS );\r
-\r
-       for( ;; )\r
-       {\r
-               uxCurrentCount = uxGetMinimumFreeNetworkBuffers();\r
-               if( uxLastMinBufferCount != uxCurrentCount )\r
-               {\r
-                       /* The logging produced below may be helpful\r
-                       while tuning +TCP: see how many buffers are in use. */\r
-                       uxLastMinBufferCount = uxCurrentCount;\r
-                       FreeRTOS_printf( ( "Network buffers: %lu lowest %lu\n",\r
-                               uxGetNumberOfFreeNetworkBuffers(), uxCurrentCount ) );\r
-               }\r
-\r
-               #if( ipconfigCHECK_IP_QUEUE_SPACE != 0 )\r
-               {\r
-               static UBaseType_t uxLastMinQueueSpace = 0;\r
-\r
-                       uxCurrentCount = uxGetMinimumIPQueueSpace();\r
-                       if( uxLastMinQueueSpace != uxCurrentCount )\r
-                       {\r
-                               /* The logging produced below may be helpful\r
-                               while tuning +TCP: see how many buffers are in use. */\r
-                               uxLastMinQueueSpace = uxCurrentCount;\r
-                               FreeRTOS_printf( ( "Queue space: lowest %lu\n", uxCurrentCount ) );\r
-                       }\r
-               }\r
-               #endif /* ipconfigCHECK_IP_QUEUE_SPACE */\r
-\r
-               if( ( xEMACpsif.isr_events & EMAC_IF_ALL_EVENT ) == 0 )\r
-               {\r
-                       /* No events to process now, wait for the next. */\r
-                       ulTaskNotifyTake( pdFALSE, ulMaxBlockTime );\r
-               }\r
-\r
-               if( ( xEMACpsif.isr_events & EMAC_IF_RX_EVENT ) != 0 )\r
-               {\r
-                       xEMACpsif.isr_events &= ~EMAC_IF_RX_EVENT;\r
-                       xResult = emacps_check_rx( &xEMACpsif );\r
-               }\r
-\r
-               if( ( xEMACpsif.isr_events & EMAC_IF_TX_EVENT ) != 0 )\r
-               {\r
-                       xEMACpsif.isr_events &= ~EMAC_IF_TX_EVENT;\r
-                       emacps_check_tx( &xEMACpsif );\r
-               }\r
-\r
-               if( ( xEMACpsif.isr_events & EMAC_IF_ERR_EVENT ) != 0 )\r
-               {\r
-                       xEMACpsif.isr_events &= ~EMAC_IF_ERR_EVENT;\r
-                       emacps_check_errors( &xEMACpsif );\r
-               }\r
-\r
-               if( xResult > 0 )\r
-               {\r
-                       /* A packet was received. No need to check for the PHY status now,\r
-                       but set a timer to check it later on. */\r
-                       vTaskSetTimeOutState( &xPhyTime );\r
-                       xPhyRemTime = pdMS_TO_TICKS( PHY_LS_HIGH_CHECK_TIME_MS );\r
-                       xResult = 0;\r
-               }\r
-               else if( xTaskCheckForTimeOut( &xPhyTime, &xPhyRemTime ) != pdFALSE )\r
-               {\r
-                       xStatus = ulReadMDIO( PHY_REG_01_BMSR );\r
-\r
-                       if( ( ulPHYLinkStatus & BMSR_LINK_STATUS ) != ( xStatus & BMSR_LINK_STATUS ) )\r
-                       {\r
-                               ulPHYLinkStatus = xStatus;\r
-                               FreeRTOS_printf( ( "prvEMACHandlerTask: PHY LS now %d\n", ( ulPHYLinkStatus & BMSR_LINK_STATUS ) != 0 ) );\r
-                       }\r
-\r
-                       vTaskSetTimeOutState( &xPhyTime );\r
-                       if( ( ulPHYLinkStatus & BMSR_LINK_STATUS ) != 0 )\r
-                       {\r
-                               xPhyRemTime = pdMS_TO_TICKS( PHY_LS_HIGH_CHECK_TIME_MS );\r
-                       }\r
-                       else\r
-                       {\r
-                               xPhyRemTime = pdMS_TO_TICKS( PHY_LS_LOW_CHECK_TIME_MS );\r
-                       }\r
-               }\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
+/*
+FreeRTOS+TCP V2.0.11
+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
+*/
+
+/* Standard includes. */
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+/* FreeRTOS includes. */
+#include "FreeRTOS.h"
+#include "task.h"
+#include "queue.h"
+#include "semphr.h"
+
+/* FreeRTOS+TCP includes. */
+#include "FreeRTOS_IP.h"
+#include "FreeRTOS_Sockets.h"
+#include "FreeRTOS_IP_Private.h"
+#include "NetworkBufferManagement.h"
+#include "NetworkInterface.h"
+
+/* Xilinx library files. */
+#include <xemacps.h>
+#include "Zynq/x_topology.h"
+#include "Zynq/x_emacpsif.h"
+#include "Zynq/x_emacpsif_hw.h"
+
+/* Provided memory configured as uncached. */
+#include "uncached_memory.h"
+
+#ifndef        BMSR_LINK_STATUS
+       #define BMSR_LINK_STATUS            0x0004UL
+#endif
+
+#ifndef        PHY_LS_HIGH_CHECK_TIME_MS
+       /* Check if the LinkSStatus in the PHY is still high after 15 seconds of not
+       receiving packets. */
+       #define PHY_LS_HIGH_CHECK_TIME_MS       15000
+#endif
+
+#ifndef        PHY_LS_LOW_CHECK_TIME_MS
+       /* Check if the LinkSStatus in the PHY is still low every second. */
+       #define PHY_LS_LOW_CHECK_TIME_MS        1000
+#endif
+
+/* The size of each buffer when BufferAllocation_1 is used:
+http://www.freertos.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/Embedded_Ethernet_Buffer_Management.html */
+#define niBUFFER_1_PACKET_SIZE         1536
+
+/* Naming and numbering of PHY registers. */
+#define PHY_REG_01_BMSR                        0x01    /* Basic mode status register */
+
+#ifndef iptraceEMAC_TASK_STARTING
+       #define iptraceEMAC_TASK_STARTING()     do { } while( 0 )
+#endif
+
+/* Default the size of the stack used by the EMAC deferred handler task to twice
+the size of the stack used by the idle task - but allow this to be overridden in
+FreeRTOSConfig.h as configMINIMAL_STACK_SIZE is a user definable constant. */
+#ifndef configEMAC_TASK_STACK_SIZE
+       #define configEMAC_TASK_STACK_SIZE ( 2 * configMINIMAL_STACK_SIZE )
+#endif
+
+/*-----------------------------------------------------------*/
+
+/*
+ * Look for the link to be up every few milliseconds until either xMaxTime time
+ * has passed or a link is found.
+ */
+static BaseType_t prvGMACWaitLS( TickType_t xMaxTime );
+
+/*
+ * A deferred interrupt handler for all MAC/DMA interrupt sources.
+ */
+static void prvEMACHandlerTask( void *pvParameters );
+
+/*-----------------------------------------------------------*/
+
+/* EMAC data/descriptions. */
+static xemacpsif_s xEMACpsif;
+struct xtopology_t xXTopology =
+{
+       .emac_baseaddr = XPAR_PS7_ETHERNET_0_BASEADDR,
+       .emac_type = xemac_type_emacps,
+       .intc_baseaddr = 0x0,
+       .intc_emac_intr = 0x0,
+       .scugic_baseaddr = XPAR_PS7_SCUGIC_0_BASEADDR,
+       .scugic_emac_intr = 0x36,
+};
+
+XEmacPs_Config mac_config =
+{
+       .DeviceId = XPAR_PS7_ETHERNET_0_DEVICE_ID,      /**< Unique ID  of device */
+       .BaseAddress = XPAR_PS7_ETHERNET_0_BASEADDR /**< Physical base address of IPIF registers */
+};
+
+extern int phy_detected;
+
+/* A copy of PHY register 1: 'PHY_REG_01_BMSR' */
+static uint32_t ulPHYLinkStatus = 0;
+
+#if( ipconfigUSE_LLMNR == 1 )
+       static const uint8_t xLLMNR_MACAddress[] = { 0x01, 0x00, 0x5E, 0x00, 0x00, 0xFC };
+#endif
+
+/* ucMACAddress as it appears in main.c */
+extern const uint8_t ucMACAddress[ 6 ];
+
+/* Holds the handle of the task used as a deferred interrupt processor.  The
+handle is used so direct notifications can be sent to the task for all EMAC/DMA
+related interrupts. */
+TaskHandle_t xEMACTaskHandle = NULL;
+
+/*-----------------------------------------------------------*/
+
+BaseType_t xNetworkInterfaceInitialise( void )
+{
+uint32_t ulLinkSpeed, ulDMAReg;
+BaseType_t xStatus, xLinkStatus;
+XEmacPs *pxEMAC_PS;
+const TickType_t xWaitLinkDelay = pdMS_TO_TICKS( 7000UL ), xWaitRelinkDelay = pdMS_TO_TICKS( 1000UL );
+
+       /* Guard against the init function being called more than once. */
+       if( xEMACTaskHandle == NULL )
+       {
+               pxEMAC_PS = &( xEMACpsif.emacps );
+               memset( &xEMACpsif, '\0', sizeof( xEMACpsif ) );
+
+               xStatus = XEmacPs_CfgInitialize( pxEMAC_PS, &mac_config, mac_config.BaseAddress);
+               if( xStatus != XST_SUCCESS )
+               {
+                       FreeRTOS_printf( ( "xEMACInit: EmacPs Configuration Failed....\n" ) );
+               }
+
+               /* Initialize the mac and set the MAC address. */
+               XEmacPs_SetMacAddress( pxEMAC_PS, ( void * ) ucMACAddress, 1 );
+
+               #if( ipconfigUSE_LLMNR == 1 )
+               {
+                       /* Also add LLMNR multicast MAC address. */
+                       XEmacPs_SetMacAddress( pxEMAC_PS, ( void * )xLLMNR_MACAddress, 2 );
+               }
+               #endif  /* ipconfigUSE_LLMNR == 1 */
+
+               XEmacPs_SetMdioDivisor( pxEMAC_PS, MDC_DIV_224 );
+               ulLinkSpeed = Phy_Setup( pxEMAC_PS );
+               XEmacPs_SetOperatingSpeed( pxEMAC_PS, ulLinkSpeed);
+
+               /* Setting the operating speed of the MAC needs a delay. */
+               vTaskDelay( pdMS_TO_TICKS( 25UL ) );
+
+               ulDMAReg = XEmacPs_ReadReg( pxEMAC_PS->Config.BaseAddress, XEMACPS_DMACR_OFFSET);
+
+               /* DISC_WHEN_NO_AHB: when set, the GEM DMA will automatically discard receive
+               packets from the receiver packet buffer memory when no AHB resource is available. */
+               XEmacPs_WriteReg( pxEMAC_PS->Config.BaseAddress, XEMACPS_DMACR_OFFSET,
+                       ulDMAReg | XEMACPS_DMACR_DISC_WHEN_NO_AHB_MASK);
+
+               setup_isr( &xEMACpsif );
+               init_dma( &xEMACpsif );
+               start_emacps( &xEMACpsif );
+
+               prvGMACWaitLS( xWaitLinkDelay );
+
+               /* The deferred interrupt handler task is created at the highest
+               possible priority to ensure the interrupt handler can return directly
+               to it.  The task's handle is stored in xEMACTaskHandle so interrupts can
+               notify the task when there is something to process. */
+               xTaskCreate( prvEMACHandlerTask, "EMAC", configEMAC_TASK_STACK_SIZE, NULL, configMAX_PRIORITIES - 1, &xEMACTaskHandle );
+       }
+       else
+       {
+               /* Initialisation was already performed, just wait for the link. */
+               prvGMACWaitLS( xWaitRelinkDelay );
+       }
+
+       /* Only return pdTRUE when the Link Status of the PHY is high, otherwise the
+       DHCP process and all other communication will fail. */
+       xLinkStatus = xGetPhyLinkStatus();
+
+       return ( xLinkStatus != pdFALSE );
+}
+/*-----------------------------------------------------------*/
+
+BaseType_t xNetworkInterfaceOutput( NetworkBufferDescriptor_t * const pxBuffer, BaseType_t bReleaseAfterSend )
+{
+       if( ( ulPHYLinkStatus & BMSR_LINK_STATUS ) != 0 )
+       {
+               iptraceNETWORK_INTERFACE_TRANSMIT();
+               emacps_send_message( &xEMACpsif, pxBuffer, bReleaseAfterSend );
+       }
+       else if( bReleaseAfterSend != pdFALSE )
+       {
+               /* No link. */
+               vReleaseNetworkBufferAndDescriptor( pxBuffer );
+       }
+
+       return pdTRUE;
+}
+/*-----------------------------------------------------------*/
+
+static inline unsigned long ulReadMDIO( unsigned ulRegister )
+{
+uint16_t usValue;
+
+       XEmacPs_PhyRead( &( xEMACpsif.emacps ), phy_detected, ulRegister, &usValue );
+       return usValue;
+}
+/*-----------------------------------------------------------*/
+
+static BaseType_t prvGMACWaitLS( TickType_t xMaxTime )
+{
+TickType_t xStartTime, xEndTime;
+const TickType_t xShortDelay = pdMS_TO_TICKS( 20UL );
+BaseType_t xReturn;
+
+       xStartTime = xTaskGetTickCount();
+
+       for( ;; )
+       {
+               xEndTime = xTaskGetTickCount();
+
+               if( xEndTime - xStartTime > xMaxTime )
+               {
+                       xReturn = pdFALSE;
+                       break;
+               }
+               ulPHYLinkStatus = ulReadMDIO( PHY_REG_01_BMSR );
+
+               if( ( ulPHYLinkStatus & BMSR_LINK_STATUS ) != 0 )
+               {
+                       xReturn = pdTRUE;
+                       break;
+               }
+
+               vTaskDelay( xShortDelay );
+       }
+
+       return xReturn;
+}
+/*-----------------------------------------------------------*/
+
+void vNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] )
+{
+static uint8_t ucNetworkPackets[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS * niBUFFER_1_PACKET_SIZE ] __attribute__ ( ( aligned( 32 ) ) );
+uint8_t *ucRAMBuffer = ucNetworkPackets;
+uint32_t ul;
+
+       for( ul = 0; ul < ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS; ul++ )
+       {
+               pxNetworkBuffers[ ul ].pucEthernetBuffer = ucRAMBuffer + ipBUFFER_PADDING;
+               *( ( unsigned * ) ucRAMBuffer ) = ( unsigned ) ( &( pxNetworkBuffers[ ul ] ) );
+               ucRAMBuffer += niBUFFER_1_PACKET_SIZE;
+       }
+}
+/*-----------------------------------------------------------*/
+
+BaseType_t xGetPhyLinkStatus( void )
+{
+BaseType_t xReturn;
+
+       if( ( ulPHYLinkStatus & BMSR_LINK_STATUS ) == 0 )
+       {
+               xReturn = pdFALSE;
+       }
+       else
+       {
+               xReturn = pdTRUE;
+       }
+
+       return xReturn;
+}
+/*-----------------------------------------------------------*/
+
+static void prvEMACHandlerTask( void *pvParameters )
+{
+TimeOut_t xPhyTime;
+TickType_t xPhyRemTime;
+UBaseType_t uxLastMinBufferCount = 0;
+UBaseType_t uxCurrentCount;
+BaseType_t xResult = 0;
+uint32_t xStatus;
+const TickType_t ulMaxBlockTime = pdMS_TO_TICKS( 100UL );
+
+       /* Remove compiler warnings about unused parameters. */
+       ( void ) pvParameters;
+
+       /* A possibility to set some additional task properties like calling
+       portTASK_USES_FLOATING_POINT() */
+       iptraceEMAC_TASK_STARTING();
+
+       vTaskSetTimeOutState( &xPhyTime );
+       xPhyRemTime = pdMS_TO_TICKS( PHY_LS_LOW_CHECK_TIME_MS );
+
+       for( ;; )
+       {
+               uxCurrentCount = uxGetMinimumFreeNetworkBuffers();
+               if( uxLastMinBufferCount != uxCurrentCount )
+               {
+                       /* The logging produced below may be helpful
+                       while tuning +TCP: see how many buffers are in use. */
+                       uxLastMinBufferCount = uxCurrentCount;
+                       FreeRTOS_printf( ( "Network buffers: %lu lowest %lu\n",
+                               uxGetNumberOfFreeNetworkBuffers(), uxCurrentCount ) );
+               }
+
+               #if( ipconfigCHECK_IP_QUEUE_SPACE != 0 )
+               {
+               static UBaseType_t uxLastMinQueueSpace = 0;
+
+                       uxCurrentCount = uxGetMinimumIPQueueSpace();
+                       if( uxLastMinQueueSpace != uxCurrentCount )
+                       {
+                               /* The logging produced below may be helpful
+                               while tuning +TCP: see how many buffers are in use. */
+                               uxLastMinQueueSpace = uxCurrentCount;
+                               FreeRTOS_printf( ( "Queue space: lowest %lu\n", uxCurrentCount ) );
+                       }
+               }
+               #endif /* ipconfigCHECK_IP_QUEUE_SPACE */
+
+               if( ( xEMACpsif.isr_events & EMAC_IF_ALL_EVENT ) == 0 )
+               {
+                       /* No events to process now, wait for the next. */
+                       ulTaskNotifyTake( pdFALSE, ulMaxBlockTime );
+               }
+
+               if( ( xEMACpsif.isr_events & EMAC_IF_RX_EVENT ) != 0 )
+               {
+                       xEMACpsif.isr_events &= ~EMAC_IF_RX_EVENT;
+                       xResult = emacps_check_rx( &xEMACpsif );
+               }
+
+               if( ( xEMACpsif.isr_events & EMAC_IF_TX_EVENT ) != 0 )
+               {
+                       xEMACpsif.isr_events &= ~EMAC_IF_TX_EVENT;
+                       emacps_check_tx( &xEMACpsif );
+               }
+
+               if( ( xEMACpsif.isr_events & EMAC_IF_ERR_EVENT ) != 0 )
+               {
+                       xEMACpsif.isr_events &= ~EMAC_IF_ERR_EVENT;
+                       emacps_check_errors( &xEMACpsif );
+               }
+
+               if( xResult > 0 )
+               {
+                       /* A packet was received. No need to check for the PHY status now,
+                       but set a timer to check it later on. */
+                       vTaskSetTimeOutState( &xPhyTime );
+                       xPhyRemTime = pdMS_TO_TICKS( PHY_LS_HIGH_CHECK_TIME_MS );
+                       xResult = 0;
+               }
+               else if( xTaskCheckForTimeOut( &xPhyTime, &xPhyRemTime ) != pdFALSE )
+               {
+                       xStatus = ulReadMDIO( PHY_REG_01_BMSR );
+
+                       if( ( ulPHYLinkStatus & BMSR_LINK_STATUS ) != ( xStatus & BMSR_LINK_STATUS ) )
+                       {
+                               ulPHYLinkStatus = xStatus;
+                               FreeRTOS_printf( ( "prvEMACHandlerTask: PHY LS now %d\n", ( ulPHYLinkStatus & BMSR_LINK_STATUS ) != 0 ) );
+                       }
+
+                       vTaskSetTimeOutState( &xPhyTime );
+                       if( ( ulPHYLinkStatus & BMSR_LINK_STATUS ) != 0 )
+                       {
+                               xPhyRemTime = pdMS_TO_TICKS( PHY_LS_HIGH_CHECK_TIME_MS );
+                       }
+                       else
+                       {
+                               xPhyRemTime = pdMS_TO_TICKS( PHY_LS_LOW_CHECK_TIME_MS );
+                       }
+               }
+       }
+}
+/*-----------------------------------------------------------*/
index 74b241dcf9b3078c5c99745940444f2308b802f3..f9e54bb2f450cc942fca45605203d298ef74a4ee 100644 (file)
@@ -1,25 +1,25 @@
-\r
-\r
-NetworkInterface for Xilinx' Zynq\r
-\r
-Please include the following source files:\r
-\r
-       $(PLUS_TCP_PATH)/portable/NetworkInterface/Zynq/NetworkInterface.c\r
-       $(PLUS_TCP_PATH)/portable/NetworkInterface/Zynq/x_emacpsif_dma.c\r
-       $(PLUS_TCP_PATH)/portable/NetworkInterface/Zynq/x_emacpsif_physpeed.c\r
-       $(PLUS_TCP_PATH)/portable/NetworkInterface/Zynq/x_emacpsif_hw.c\r
-\r
-And include the following source files from the Xilinx library:\r
-\r
-       $(CPU_PATH)/$(PROCESSOR)/libsrc/emacps_v2_0/src/xemacps.c\r
-       $(CPU_PATH)/$(PROCESSOR)/libsrc/emacps_v2_0/src/xemacps_control.c\r
-       $(CPU_PATH)/$(PROCESSOR)/libsrc/emacps_v2_0/src/xemacps_g.c\r
-       $(CPU_PATH)/$(PROCESSOR)/libsrc/emacps_v2_0/src/xemacps_intr.c\r
-\r
-       E.g. ps7_cortexa9_0/libsrc/emacps_v2_0/src/xemacps_intr.c\r
-\r
-The following source files are NOT used for the FreeRTOS+TCP interface:\r
-\r
-       $(CPU_PATH)/$(PROCESSOR)/libsrc/emacps_v2_0/src/xemacps_bdring.c\r
-       $(CPU_PATH)/$(PROCESSOR)/libsrc/emacps_v2_0/src/xemacps_hw.c\r
-       $(CPU_PATH)/$(PROCESSOR)/libsrc/emacps_v2_0/src/xemacps_sinit.c\r
+
+
+NetworkInterface for Xilinx' Zynq
+
+Please include the following source files:
+
+       $(PLUS_TCP_PATH)/portable/NetworkInterface/Zynq/NetworkInterface.c
+       $(PLUS_TCP_PATH)/portable/NetworkInterface/Zynq/x_emacpsif_dma.c
+       $(PLUS_TCP_PATH)/portable/NetworkInterface/Zynq/x_emacpsif_physpeed.c
+       $(PLUS_TCP_PATH)/portable/NetworkInterface/Zynq/x_emacpsif_hw.c
+
+And include the following source files from the Xilinx library:
+
+       $(CPU_PATH)/$(PROCESSOR)/libsrc/emacps_v2_0/src/xemacps.c
+       $(CPU_PATH)/$(PROCESSOR)/libsrc/emacps_v2_0/src/xemacps_control.c
+       $(CPU_PATH)/$(PROCESSOR)/libsrc/emacps_v2_0/src/xemacps_g.c
+       $(CPU_PATH)/$(PROCESSOR)/libsrc/emacps_v2_0/src/xemacps_intr.c
+
+       E.g. ps7_cortexa9_0/libsrc/emacps_v2_0/src/xemacps_intr.c
+
+The following source files are NOT used for the FreeRTOS+TCP interface:
+
+       $(CPU_PATH)/$(PROCESSOR)/libsrc/emacps_v2_0/src/xemacps_bdring.c
+       $(CPU_PATH)/$(PROCESSOR)/libsrc/emacps_v2_0/src/xemacps_hw.c
+       $(CPU_PATH)/$(PROCESSOR)/libsrc/emacps_v2_0/src/xemacps_sinit.c
diff --git a/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/Zynq/uncached_memory.c b/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/Zynq/uncached_memory.c
deleted file mode 100644 (file)
index b43e50e..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
-/*\r
- * uncached_memory.c\r
- *\r
- * This module will declare 1 MB of memory and switch off the caching for it.\r
- *\r
- * pucGetUncachedMemory( ulSize ) returns a trunc of this memory with a length\r
- * rounded up to a multiple of 4 KB\r
- *\r
- * ucIsCachedMemory( pucBuffer ) returns non-zero if a given pointer is NOT\r
- * within the range of the 1 MB non-cached memory.\r
- *\r
- */\r
-\r
-/*\r
- * After "_end", 1 MB of uncached memory will be allocated for DMA transfers.\r
- * Both the DMA descriptors as well as all EMAC TX-buffers will be allocated in\r
- * uncached memory.\r
- */\r
-\r
-/* Standard includes. */\r
-#include <stdint.h>\r
-#include <stdio.h>\r
-#include <stdlib.h>\r
-\r
-/* FreeRTOS includes. */\r
-#include "FreeRTOS.h"\r
-#include "task.h"\r
-#include "queue.h"\r
-\r
-/* FreeRTOS+TCP includes. */\r
-#include "FreeRTOS_IP.h"\r
-#include "FreeRTOS_Sockets.h"\r
-#include "FreeRTOS_IP_Private.h"\r
-\r
-#include "Zynq/x_emacpsif.h"\r
-#include "Zynq/x_topology.h"\r
-#include "xstatus.h"\r
-\r
-#include "xparameters.h"\r
-#include "xparameters_ps.h"\r
-#include "xil_exception.h"\r
-#include "xil_mmu.h"\r
-\r
-#include "uncached_memory.h"\r
-\r
-#define UNCACHED_MEMORY_SIZE   0x100000ul\r
-\r
-#define DDR_MEMORY_END (XPAR_PS7_DDR_0_S_AXI_HIGHADDR+1)\r
-\r
-static void vInitialiseUncachedMemory( void );\r
-\r
-static uint8_t *pucHeadOfMemory;\r
-static uint32_t ulMemorySize;\r
-static uint8_t *pucStartOfMemory = NULL;\r
-\r
-uint8_t ucIsCachedMemory( const uint8_t *pucBuffer )\r
-{\r
-uint8_t ucReturn;\r
-\r
-       if( ( pucStartOfMemory != NULL ) &&\r
-               ( pucBuffer >= pucStartOfMemory ) &&\r
-               ( pucBuffer < ( pucStartOfMemory + UNCACHED_MEMORY_SIZE ) ) )\r
-       {\r
-               ucReturn = pdFALSE;\r
-       }\r
-       else\r
-       {\r
-               ucReturn = pdTRUE;\r
-       }\r
-\r
-       return ucReturn;\r
-}\r
-\r
-uint8_t *pucGetUncachedMemory( uint32_t ulSize )\r
-{\r
-uint8_t *pucReturn;\r
-\r
-       if( pucStartOfMemory == NULL )\r
-       {\r
-               vInitialiseUncachedMemory( );\r
-       }\r
-       if( ( pucStartOfMemory == NULL ) || ( ulSize > ulMemorySize ) )\r
-       {\r
-               pucReturn = NULL;\r
-       }\r
-       else\r
-       {\r
-       uint32_t ulSkipSize;\r
-\r
-               pucReturn = pucHeadOfMemory;\r
-               ulSkipSize = ( ulSize + 0x1000ul ) & ~0xffful;\r
-               pucHeadOfMemory += ulSkipSize;\r
-               ulMemorySize -= ulSkipSize;\r
-       }\r
-\r
-       return pucReturn;\r
-}\r
-\r
-extern u8 _end;\r
-\r
-static void vInitialiseUncachedMemory( )\r
-{\r
-       /* At the end of program's space... */\r
-       pucStartOfMemory = (uint8_t *) &_end;\r
-       /*\r
-        * Align the start address to 1 MB boundary.\r
-        */\r
-       pucStartOfMemory = (uint8_t *)( ( ( uint32_t )pucStartOfMemory + UNCACHED_MEMORY_SIZE ) & ( ~( UNCACHED_MEMORY_SIZE - 1 ) ) );\r
-\r
-       if( ( ( u32 )pucStartOfMemory ) + UNCACHED_MEMORY_SIZE > DDR_MEMORY_END )\r
-       {\r
-//             vLoggingPrintf("vInitialiseUncachedMemory: Can not allocate uncached memory\n" );\r
-       }\r
-       else\r
-       {\r
-               /*\r
-                * Some objects want to be stored in uncached memory. Hence the 1 MB\r
-                * address range that starts after "_end" is made uncached\r
-                * by setting appropriate attributes in the translation table.\r
-                */\r
-               /* FIXME claudio rossi. Modified to prevent data abort exception (misaligned access)\r
-                * when application is compiled with -O1 or more optimization flag.\r
-                */\r
-/*             Xil_SetTlbAttributes( ( uint32_t )pucStartOfMemory, 0xc02 ); // addr, attr */\r
-               Xil_SetTlbAttributes( ( uint32_t )pucStartOfMemory, 0x1c02 ); // addr, attr\r
-\r
-               /* For experiments in the SDIO driver, make the remaining uncached memory public */\r
-               pucHeadOfMemory = pucStartOfMemory;\r
-               ulMemorySize = UNCACHED_MEMORY_SIZE;\r
-               memset( pucStartOfMemory, '\0', UNCACHED_MEMORY_SIZE );\r
-       }\r
-}\r
diff --git a/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/Zynq/uncached_memory.h b/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/Zynq/uncached_memory.h
deleted file mode 100644 (file)
index 5a8e5f3..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-/*\r
- * uncached_memory.h\r
- *\r
- * This module will declare 1 MB of memory and switch off the caching for it.\r
- *\r
- * pucGetUncachedMemory( ulSize ) returns a trunc of this memory with a length\r
- * rounded up to a multiple of 4 KB\r
- *\r
- * ucIsCachedMemory( pucBuffer ) returns non-zero if a given pointer is NOT\r
- * within the range of the 1 MB non-cached memory.\r
- *\r
- */\r
-\r
-#ifndef UNCACHEMEMORY_H\r
-\r
-#define UNCACHEMEMORY_H\r
-\r
-uint8_t *pucGetUncachedMemory( uint32_t ulSize );\r
-\r
-uint8_t ucIsCachedMemory( const uint8_t *pucBuffer );\r
-\r
-#endif /* UNCACHEMEMORY_H */\r
-\r
index 823dee0d30a79dbae2ff7c2bfd7f3a9136e17861..2f1b0df2041aaf60a6fab860bf08700b0991a503 100644 (file)
-/*\r
- * Copyright (c) 2010-2013 Xilinx, Inc.  All rights reserved.\r
- *\r
- * Xilinx, Inc.\r
- * XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" AS A\r
- * COURTESY TO YOU.  BY PROVIDING THIS DESIGN, CODE, OR INFORMATION AS\r
- * ONE POSSIBLE   IMPLEMENTATION OF THIS FEATURE, APPLICATION OR\r
- * STANDARD, XILINX IS MAKING NO REPRESENTATION THAT THIS IMPLEMENTATION\r
- * IS FREE FROM ANY CLAIMS OF INFRINGEMENT, AND YOU ARE RESPONSIBLE\r
- * FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE FOR YOUR IMPLEMENTATION.\r
- * XILINX EXPRESSLY DISCLAIMS ANY WARRANTY WHATSOEVER WITH RESPECT TO\r
- * THE ADEQUACY OF THE IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO\r
- * ANY WARRANTIES OR REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE\r
- * FROM CLAIMS OF INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY\r
- * AND FITNESS FOR A PARTICULAR PURPOSE.\r
- *\r
- */\r
-\r
-#ifndef __NETIF_XEMACPSIF_H__\r
-#define __NETIF_XEMACPSIF_H__\r
-\r
-#ifdef __cplusplus\r
-extern "C" {\r
-#endif\r
-\r
-#include <stdint.h>\r
-\r
-#include "xstatus.h"\r
-#include "sleep.h"\r
-#include "xparameters.h"\r
-#include "xparameters_ps.h"    /* defines XPAR values */\r
-#include "xil_types.h"\r
-#include "xil_assert.h"\r
-#include "xil_io.h"\r
-#include "xil_exception.h"\r
-#include "xpseudo_asm.h"\r
-#include "xil_cache.h"\r
-#include "xil_printf.h"\r
-#include "xuartps.h"\r
-#include "xscugic.h"\r
-#include "xemacps.h"           /* defines XEmacPs API */\r
-\r
-//#include "netif/xpqueue.h"\r
-//#include "xlwipconfig.h"\r
-\r
-void   xemacpsif_setmac(uint32_t index, uint8_t *addr);\r
-uint8_t*       xemacpsif_getmac(uint32_t index);\r
-//int  xemacpsif_init(struct netif *netif);\r
-//int  xemacpsif_input(struct netif *netif);\r
-#ifdef NOTNOW_BHILL\r
-unsigned get_IEEE_phy_speed(XLlTemac *xlltemacp);\r
-#endif\r
-\r
-/* xaxiemacif_hw.c */\r
-void   xemacps_error_handler(XEmacPs * Temac);\r
-\r
-struct xBD_TYPE {\r
-       uint32_t address;\r
-       uint32_t flags;\r
-};\r
-\r
-/*\r
- * Missing declaration in 'src/xemacps_hw.h' :\r
- * When set, the GEM DMA will automatically\r
- * discard receive packets from the receiver packet\r
- * buffer memory when no AHB resource is\r
- * available.\r
- * When low, then received packets will remain to be\r
- * stored in the SRAM based packet buffer until\r
- * AHB buffer resource next becomes available.\r
- */\r
-#define XEMACPS_DMACR_DISC_WHEN_NO_AHB_MASK            0x01000000\r
-\r
-#define EMAC_IF_RX_EVENT       1\r
-#define EMAC_IF_TX_EVENT       2\r
-#define EMAC_IF_ERR_EVENT      4\r
-#define EMAC_IF_ALL_EVENT      7\r
-\r
-/* structure within each netif, encapsulating all information required for\r
- * using a particular temac instance\r
- */\r
-typedef struct {\r
-       XEmacPs emacps;\r
-\r
-       /* pointers to memory holding buffer descriptors (used only with SDMA) */\r
-       struct xBD_TYPE *rxSegments;\r
-       struct xBD_TYPE *txSegments;\r
-\r
-       unsigned char *tx_space;\r
-       unsigned uTxUnitSize;\r
-\r
-       char *remain_mem;\r
-       unsigned remain_siz;\r
-\r
-       volatile int rxHead, rxTail;\r
-       volatile int txHead, txTail;\r
-\r
-       volatile int txBusy;\r
-\r
-       volatile uint32_t isr_events;\r
-\r
-       unsigned int last_rx_frms_cntr;\r
-\r
-} xemacpsif_s;\r
-\r
-//extern xemacpsif_s xemacpsif;\r
-\r
-int    is_tx_space_available(xemacpsif_s *emac);\r
-\r
-/* xaxiemacif_dma.c */\r
-\r
-struct xNETWORK_BUFFER;\r
-\r
-int emacps_check_rx( xemacpsif_s *xemacpsif );\r
-void emacps_check_tx( xemacpsif_s *xemacpsif );\r
-int emacps_check_errors( xemacpsif_s *xemacps );\r
-void emacps_set_rx_buffers( xemacpsif_s *xemacpsif, u32 ulCount );\r
-\r
-extern XStatus emacps_send_message(xemacpsif_s *xemacpsif, struct xNETWORK_BUFFER *pxBuffer, int iReleaseAfterSend );\r
-extern unsigned Phy_Setup( XEmacPs *xemacpsp );\r
-extern void setup_isr( xemacpsif_s *xemacpsif );\r
-extern XStatus init_dma( xemacpsif_s *xemacpsif );\r
-extern void start_emacps( xemacpsif_s *xemacpsif );\r
-\r
-void EmacEnableIntr(void);\r
-void EmacDisableIntr(void);\r
-\r
-XStatus init_axi_dma(xemacpsif_s *xemacpsif);\r
-void process_sent_bds( xemacpsif_s *xemacpsif );\r
-\r
-void emacps_send_handler(void *arg);\r
-void emacps_recv_handler(void *arg);\r
-void emacps_error_handler(void *arg,u8 Direction, u32 ErrorWord);\r
-void HandleTxErrors(xemacpsif_s *xemacpsif);\r
-XEmacPs_Config *xemacps_lookup_config(unsigned mac_base);\r
-\r
-void clean_dma_txdescs(xemacpsif_s *xemacpsif);\r
-void resetrx_on_no_rxdata(xemacpsif_s *xemacpsif);\r
-\r
-#ifdef __cplusplus\r
-}\r
-#endif\r
-\r
-#endif /* __NETIF_XAXIEMACIF_H__ */\r
+/*
+ * Copyright (c) 2010-2013 Xilinx, Inc.  All rights reserved.
+ *
+ * Xilinx, Inc.
+ * XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" AS A
+ * COURTESY TO YOU.  BY PROVIDING THIS DESIGN, CODE, OR INFORMATION AS
+ * ONE POSSIBLE   IMPLEMENTATION OF THIS FEATURE, APPLICATION OR
+ * STANDARD, XILINX IS MAKING NO REPRESENTATION THAT THIS IMPLEMENTATION
+ * IS FREE FROM ANY CLAIMS OF INFRINGEMENT, AND YOU ARE RESPONSIBLE
+ * FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE FOR YOUR IMPLEMENTATION.
+ * XILINX EXPRESSLY DISCLAIMS ANY WARRANTY WHATSOEVER WITH RESPECT TO
+ * THE ADEQUACY OF THE IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO
+ * ANY WARRANTIES OR REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE
+ * FROM CLAIMS OF INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __NETIF_XEMACPSIF_H__
+#define __NETIF_XEMACPSIF_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <stdint.h>
+
+#include "xstatus.h"
+#include "sleep.h"
+#include "xparameters.h"
+#include "xparameters_ps.h"    /* defines XPAR values */
+#include "xil_types.h"
+#include "xil_assert.h"
+#include "xil_io.h"
+#include "xil_exception.h"
+#include "xpseudo_asm.h"
+#include "xil_cache.h"
+#include "xil_printf.h"
+#include "xuartps.h"
+#include "xscugic.h"
+#include "xemacps.h"           /* defines XEmacPs API */
+
+//#include "netif/xpqueue.h"
+//#include "xlwipconfig.h"
+
+void   xemacpsif_setmac(uint32_t index, uint8_t *addr);
+uint8_t*       xemacpsif_getmac(uint32_t index);
+//int  xemacpsif_init(struct netif *netif);
+//int  xemacpsif_input(struct netif *netif);
+#ifdef NOTNOW_BHILL
+unsigned get_IEEE_phy_speed(XLlTemac *xlltemacp);
+#endif
+
+/* xaxiemacif_hw.c */
+void   xemacps_error_handler(XEmacPs * Temac);
+
+struct xBD_TYPE {
+       uint32_t address;
+       uint32_t flags;
+};
+
+/*
+ * Missing declaration in 'src/xemacps_hw.h' :
+ * When set, the GEM DMA will automatically
+ * discard receive packets from the receiver packet
+ * buffer memory when no AHB resource is
+ * available.
+ * When low, then received packets will remain to be
+ * stored in the SRAM based packet buffer until
+ * AHB buffer resource next becomes available.
+ */
+#define XEMACPS_DMACR_DISC_WHEN_NO_AHB_MASK            0x01000000
+
+#define EMAC_IF_RX_EVENT       1
+#define EMAC_IF_TX_EVENT       2
+#define EMAC_IF_ERR_EVENT      4
+#define EMAC_IF_ALL_EVENT      7
+
+/* structure within each netif, encapsulating all information required for
+ * using a particular temac instance
+ */
+typedef struct {
+       XEmacPs emacps;
+
+       /* pointers to memory holding buffer descriptors (used only with SDMA) */
+       struct xBD_TYPE *rxSegments;
+       struct xBD_TYPE *txSegments;
+
+       unsigned char *tx_space;
+       unsigned uTxUnitSize;
+
+       char *remain_mem;
+       unsigned remain_siz;
+
+       volatile int rxHead, rxTail;
+       volatile int txHead, txTail;
+
+       volatile int txBusy;
+
+       volatile uint32_t isr_events;
+
+       unsigned int last_rx_frms_cntr;
+
+} xemacpsif_s;
+
+//extern xemacpsif_s xemacpsif;
+
+int    is_tx_space_available(xemacpsif_s *emac);
+
+/* xaxiemacif_dma.c */
+
+struct xNETWORK_BUFFER;
+
+int emacps_check_rx( xemacpsif_s *xemacpsif );
+void emacps_check_tx( xemacpsif_s *xemacpsif );
+int emacps_check_errors( xemacpsif_s *xemacps );
+void emacps_set_rx_buffers( xemacpsif_s *xemacpsif, u32 ulCount );
+
+extern XStatus emacps_send_message(xemacpsif_s *xemacpsif, struct xNETWORK_BUFFER *pxBuffer, int iReleaseAfterSend );
+extern unsigned Phy_Setup( XEmacPs *xemacpsp );
+extern void setup_isr( xemacpsif_s *xemacpsif );
+extern XStatus init_dma( xemacpsif_s *xemacpsif );
+extern void start_emacps( xemacpsif_s *xemacpsif );
+
+void EmacEnableIntr(void);
+void EmacDisableIntr(void);
+
+XStatus init_axi_dma(xemacpsif_s *xemacpsif);
+void process_sent_bds( xemacpsif_s *xemacpsif );
+
+void emacps_send_handler(void *arg);
+void emacps_recv_handler(void *arg);
+void emacps_error_handler(void *arg,u8 Direction, u32 ErrorWord);
+void HandleTxErrors(xemacpsif_s *xemacpsif);
+XEmacPs_Config *xemacps_lookup_config(unsigned mac_base);
+
+void clean_dma_txdescs(xemacpsif_s *xemacpsif);
+void resetrx_on_no_rxdata(xemacpsif_s *xemacpsif);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __NETIF_XAXIEMACIF_H__ */
index fc09d218335022fd0750a72d6ceb635138ca90e7..13a62852d4de046ef505ce189a59e6f49d0879cd 100644 (file)
-/*\r
-FreeRTOS+TCP V2.0.11\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://aws.amazon.com/freertos\r
- http://www.FreeRTOS.org\r
-*/\r
-\r
-#include "Zynq/x_emacpsif.h"\r
-#include "Zynq/x_topology.h"\r
-#include "xstatus.h"\r
-\r
-#include "xparameters.h"\r
-#include "xparameters_ps.h"\r
-#include "xil_exception.h"\r
-#include "xil_mmu.h"\r
-\r
-#include "FreeRTOS.h"\r
-#include "task.h"\r
-#include "timers.h"\r
-#include "semphr.h"\r
-\r
-/* FreeRTOS+TCP includes. */\r
-#include "FreeRTOS_IP.h"\r
-#include "FreeRTOS_Sockets.h"\r
-#include "FreeRTOS_IP_Private.h"\r
-#include "NetworkBufferManagement.h"\r
-\r
-#include "uncached_memory.h"\r
-\r
-/* Two defines used to set or clear the EMAC interrupt */\r
-#define INTC_BASE_ADDR         XPAR_SCUGIC_CPU_BASEADDR\r
-#define INTC_DIST_BASE_ADDR    XPAR_SCUGIC_DIST_BASEADDR\r
-\r
-\r
-\r
-#if( ipconfigPACKET_FILLER_SIZE != 2 )\r
-       #error Please define ipconfigPACKET_FILLER_SIZE as the value '2'\r
-#endif\r
-#define TX_OFFSET                              ipconfigPACKET_FILLER_SIZE\r
-\r
-#define RX_BUFFER_ALIGNMENT    14\r
-\r
-/* Defined in NetworkInterface.c */\r
-extern TaskHandle_t xEMACTaskHandle;\r
-\r
-/*\r
-       pxDMA_tx_buffers: these are character arrays, each one is big enough to hold 1 MTU.\r
-       The actual TX buffers are located in uncached RAM.\r
-*/\r
-static unsigned char *pxDMA_tx_buffers[ ipconfigNIC_N_TX_DESC ] = { NULL };\r
-\r
-/*\r
-       pxDMA_rx_buffers: these are pointers to 'NetworkBufferDescriptor_t'.\r
-       Once a message has been received by the EMAC, the descriptor can be passed\r
-       immediately to the IP-task.\r
-*/\r
-static NetworkBufferDescriptor_t *pxDMA_rx_buffers[ ipconfigNIC_N_RX_DESC ] = { NULL };\r
-\r
-/*\r
-       The FreeRTOS+TCP port is using a fixed 'topology', which is declared in\r
-       ./portable/NetworkInterface/Zynq/NetworkInterface.c\r
-*/\r
-extern struct xtopology_t xXTopology;\r
-\r
-static SemaphoreHandle_t xTXDescriptorSemaphore = NULL;\r
-\r
-/*\r
-       The FreeRTOS+TCP port does not make use of "src/xemacps_bdring.c".\r
-       In stead 'struct xemacpsif_s' has a "head" and a "tail" index.\r
-       "head" is the next index to be written, used.\r
-       "tail" is the next index to be read, freed.\r
-*/\r
-\r
-int is_tx_space_available( xemacpsif_s *xemacpsif )\r
-{\r
-size_t uxCount;\r
-\r
-       if( xTXDescriptorSemaphore != NULL )\r
-       {\r
-               uxCount = ( ( UBaseType_t ) ipconfigNIC_N_TX_DESC ) - uxSemaphoreGetCount( xTXDescriptorSemaphore );\r
-       }\r
-       else\r
-       {\r
-               uxCount = ( UBaseType_t ) 0u;\r
-       }\r
-\r
-       return uxCount;\r
-}\r
-\r
-void emacps_check_tx( xemacpsif_s *xemacpsif )\r
-{\r
-int tail = xemacpsif->txTail;\r
-int head = xemacpsif->txHead;\r
-size_t uxCount = ( ( UBaseType_t ) ipconfigNIC_N_TX_DESC ) - uxSemaphoreGetCount( xTXDescriptorSemaphore );\r
-\r
-       /* uxCount is the number of TX descriptors that are in use by the DMA. */\r
-       /* When done, "TXBUF_USED" will be set. */\r
-\r
-       while( ( uxCount > 0 ) && ( ( xemacpsif->txSegments[ tail ].flags & XEMACPS_TXBUF_USED_MASK ) != 0 ) )\r
-       {\r
-               if( ( tail == head ) && ( uxCount != ipconfigNIC_N_TX_DESC ) )\r
-               {\r
-                       break;\r
-               }\r
-#if( ipconfigZERO_COPY_TX_DRIVER != 0 )\r
-#warning ipconfigZERO_COPY_TX_DRIVER is defined\r
-               {\r
-               void *pvBuffer = pxDMA_tx_buffers[ tail ];\r
-               NetworkBufferDescriptor_t *pxBuffer;\r
-\r
-                       if( pvBuffer != NULL )\r
-                       {\r
-                               pxDMA_tx_buffers[ tail ] = NULL;\r
-                               pxBuffer = pxPacketBuffer_to_NetworkBuffer( pvBuffer );\r
-                               if( pxBuffer != NULL )\r
-                               {\r
-                                       vReleaseNetworkBufferAndDescriptor( pxBuffer );\r
-                               }\r
-                               else\r
-                               {\r
-                                       FreeRTOS_printf( ( "emacps_check_tx: Can not find network buffer\n" ) );\r
-                               }\r
-                       }\r
-               }\r
-#endif\r
-               /* Clear all but the "used" and "wrap" bits. */\r
-               if( tail < ipconfigNIC_N_TX_DESC - 1 )\r
-               {\r
-                       xemacpsif->txSegments[ tail ].flags = XEMACPS_TXBUF_USED_MASK;\r
-               }\r
-               else\r
-               {\r
-                       xemacpsif->txSegments[ tail ].flags = XEMACPS_TXBUF_USED_MASK | XEMACPS_TXBUF_WRAP_MASK;\r
-               }\r
-               uxCount--;\r
-               /* Tell the counting semaphore that one more TX descriptor is available. */\r
-               xSemaphoreGive( xTXDescriptorSemaphore );\r
-               if( ++tail == ipconfigNIC_N_TX_DESC )\r
-               {\r
-                       tail = 0;\r
-               }\r
-               xemacpsif->txTail = tail;\r
-       }\r
-\r
-       return;\r
-}\r
-\r
-void emacps_send_handler(void *arg)\r
-{\r
-xemacpsif_s   *xemacpsif;\r
-BaseType_t xHigherPriorityTaskWoken = pdFALSE;\r
-\r
-       xemacpsif = (xemacpsif_s *)(arg);\r
-\r
-       /* In this port for FreeRTOS+TCP, the EMAC interrupts will only set a bit in\r
-       "isr_events". The task in NetworkInterface will wake-up and do the necessary work.\r
-       */\r
-       xemacpsif->isr_events |= EMAC_IF_TX_EVENT;\r
-       xemacpsif->txBusy = pdFALSE;\r
-\r
-       if( xEMACTaskHandle != NULL )\r
-       {\r
-               vTaskNotifyGiveFromISR( xEMACTaskHandle, &xHigherPriorityTaskWoken );\r
-       }\r
-\r
-       portYIELD_FROM_ISR( xHigherPriorityTaskWoken );\r
-}\r
-\r
-static BaseType_t xValidLength( BaseType_t xLength )\r
-{\r
-BaseType_t xReturn;\r
-\r
-       if( ( xLength >= ( BaseType_t ) sizeof( struct xARP_PACKET ) ) && ( ( ( uint32_t ) xLength ) <= ipTOTAL_ETHERNET_FRAME_SIZE ) )\r
-       {\r
-               xReturn = pdTRUE;\r
-       }\r
-       else\r
-       {\r
-               xReturn =  pdFALSE;\r
-       }\r
-\r
-       return xReturn;\r
-}\r
-\r
-XStatus emacps_send_message(xemacpsif_s *xemacpsif, NetworkBufferDescriptor_t *pxBuffer, int iReleaseAfterSend )\r
-{\r
-int head = xemacpsif->txHead;\r
-int iHasSent = 0;\r
-uint32_t ulBaseAddress = xemacpsif->emacps.Config.BaseAddress;\r
-TickType_t xBlockTimeTicks = pdMS_TO_TICKS( 5000u );\r
-\r
-       #if( ipconfigZERO_COPY_TX_DRIVER != 0 )\r
-       {\r
-               /* This driver wants to own all network buffers which are to be transmitted. */\r
-               configASSERT( iReleaseAfterSend != pdFALSE );\r
-       }\r
-       #endif\r
-\r
-       /* Open a do {} while ( 0 ) loop to be able to call break. */\r
-       do\r
-       {\r
-       uint32_t ulFlags = 0;\r
-\r
-               if( xValidLength( pxBuffer->xDataLength ) != pdTRUE )\r
-               {\r
-                       break;\r
-               }\r
-\r
-               if( xTXDescriptorSemaphore == NULL )\r
-               {\r
-                       break;\r
-               }\r
-\r
-               if( xSemaphoreTake( xTXDescriptorSemaphore, xBlockTimeTicks ) != pdPASS )\r
-               {\r
-                       FreeRTOS_printf( ( "emacps_send_message: Time-out waiting for TX buffer\n" ) );\r
-                       break;\r
-               }\r
-\r
-#if( ipconfigZERO_COPY_TX_DRIVER != 0 )\r
-               /* Pass the pointer (and its ownership) directly to DMA. */\r
-               pxDMA_tx_buffers[ head ] = pxBuffer->pucEthernetBuffer;\r
-               if( ucIsCachedMemory( pxBuffer->pucEthernetBuffer ) != 0 )\r
-               {\r
-                       Xil_DCacheFlushRange( ( unsigned )pxBuffer->pucEthernetBuffer, pxBuffer->xDataLength );\r
-               }\r
-               /* Buffer has been transferred, do not release it. */\r
-               iReleaseAfterSend = pdFALSE;\r
-#else\r
-               if( pxDMA_tx_buffers[ head ] == NULL )\r
-               {\r
-                       FreeRTOS_printf( ( "emacps_send_message: pxDMA_tx_buffers[ %d ] == NULL\n", head ) );\r
-                       break;\r
-               }\r
-               /* Copy the message to unbuffered space in RAM. */\r
-               memcpy( pxDMA_tx_buffers[ head ], pxBuffer->pucEthernetBuffer, pxBuffer->xDataLength );\r
-#endif\r
-               /* Packets will be sent one-by-one, so for each packet\r
-               the TXBUF_LAST bit will be set. */\r
-               ulFlags |= XEMACPS_TXBUF_LAST_MASK;\r
-               ulFlags |= ( pxBuffer->xDataLength & XEMACPS_TXBUF_LEN_MASK );\r
-               if( head == ( ipconfigNIC_N_TX_DESC - 1 ) )\r
-               {\r
-                       ulFlags |= XEMACPS_TXBUF_WRAP_MASK;\r
-               }\r
-\r
-               /* Copy the address of the buffer and set the flags. */\r
-               xemacpsif->txSegments[ head ].address = ( uint32_t )pxDMA_tx_buffers[ head ];\r
-               xemacpsif->txSegments[ head ].flags = ulFlags;\r
-\r
-               iHasSent = pdTRUE;\r
-               if( ++head == ipconfigNIC_N_TX_DESC )\r
-               {\r
-                       head = 0;\r
-               }\r
-               /* Update the TX-head index. These variable are declared volatile so they will be\r
-               accessed as little as possible. */\r
-               xemacpsif->txHead = head;\r
-       } while( pdFALSE );\r
-\r
-       if( iReleaseAfterSend != pdFALSE )\r
-       {\r
-               vReleaseNetworkBufferAndDescriptor( pxBuffer );\r
-               pxBuffer = NULL;\r
-       }\r
-\r
-       /* Data Synchronization Barrier */\r
-       dsb();\r
-\r
-       if( iHasSent != pdFALSE )\r
-       {\r
-               /* Make STARTTX high */\r
-               uint32_t ulValue = XEmacPs_ReadReg( ulBaseAddress, XEMACPS_NWCTRL_OFFSET);\r
-               /* Start transmit */\r
-               xemacpsif->txBusy = pdTRUE;\r
-               XEmacPs_WriteReg( ulBaseAddress, XEMACPS_NWCTRL_OFFSET, ( ulValue | XEMACPS_NWCTRL_STARTTX_MASK ) );\r
-       }\r
-       dsb();\r
-\r
-       return 0;\r
-}\r
-\r
-void emacps_recv_handler(void *arg)\r
-{\r
-       xemacpsif_s *xemacpsif;\r
-       BaseType_t xHigherPriorityTaskWoken = pdFALSE;\r
-\r
-       xemacpsif = (xemacpsif_s *)(arg);\r
-       xemacpsif->isr_events |= EMAC_IF_RX_EVENT;\r
-\r
-       if( xEMACTaskHandle != NULL )\r
-       {\r
-               vTaskNotifyGiveFromISR( xEMACTaskHandle, &xHigherPriorityTaskWoken );\r
-       }\r
-\r
-       portYIELD_FROM_ISR( xHigherPriorityTaskWoken );\r
-}\r
-\r
-static NetworkBufferDescriptor_t *ethMsg = NULL;\r
-static NetworkBufferDescriptor_t *ethLast = NULL;\r
-\r
-static void passEthMessages( void )\r
-{\r
-IPStackEvent_t xRxEvent;\r
-\r
-       xRxEvent.eEventType = eNetworkRxEvent;\r
-       xRxEvent.pvData = ( void * ) ethMsg;\r
-\r
-       if( xSendEventStructToIPTask( &xRxEvent, ( TickType_t ) 1000 ) != pdPASS )\r
-       {\r
-               /* The buffer could not be sent to the stack so must be released again.\r
-               This is a deferred handler taskr, not a real interrupt, so it is ok to\r
-               use the task level function here. */\r
-               do\r
-               {\r
-                       NetworkBufferDescriptor_t *xNext = ethMsg->pxNextBuffer;\r
-                       vReleaseNetworkBufferAndDescriptor( ethMsg );\r
-                       ethMsg = xNext;\r
-               } while( ethMsg != NULL );\r
-\r
-               iptraceETHERNET_RX_EVENT_LOST();\r
-               FreeRTOS_printf( ( "passEthMessages: Can not queue return packet!\n" ) );\r
-       }\r
-\r
-       ethMsg = ethLast = NULL;\r
-}\r
-\r
-int emacps_check_rx( xemacpsif_s *xemacpsif )\r
-{\r
-NetworkBufferDescriptor_t *pxBuffer, *pxNewBuffer;\r
-int rx_bytes;\r
-volatile int msgCount = 0;\r
-int head = xemacpsif->rxHead;\r
-\r
-       /* There seems to be an issue (SI# 692601), see comments below. */\r
-       resetrx_on_no_rxdata(xemacpsif);\r
-\r
-       /* This FreeRTOS+TCP driver shall be compiled with the option\r
-       "ipconfigUSE_LINKED_RX_MESSAGES" enabled.  It allows the driver to send a\r
-       chain of RX messages within one message to the IP-task. */\r
-       for( ;; )\r
-       {\r
-               if( ( ( xemacpsif->rxSegments[ head ].address & XEMACPS_RXBUF_NEW_MASK ) == 0 ) ||\r
-                       ( pxDMA_rx_buffers[ head ] == NULL ) )\r
-               {\r
-                       break;\r
-               }\r
-\r
-               pxNewBuffer = pxGetNetworkBufferWithDescriptor( ipTOTAL_ETHERNET_FRAME_SIZE + RX_BUFFER_ALIGNMENT, ( TickType_t ) 0 );\r
-               if( pxNewBuffer == NULL )\r
-               {\r
-                       /* A packet has been received, but there is no replacement for this Network Buffer.\r
-                       The packet will be dropped, and it Network Buffer will stay in place. */\r
-                       FreeRTOS_printf( ("emacps_check_rx: unable to allocate a Netwrok Buffer\n" ) );\r
-                       pxNewBuffer = ( NetworkBufferDescriptor_t * )pxDMA_rx_buffers[ head ];\r
-               }\r
-               else\r
-               {\r
-                       pxBuffer = ( NetworkBufferDescriptor_t * )pxDMA_rx_buffers[ head ];\r
-\r
-                       /* Just avoiding to use or refer to the same buffer again */\r
-                       pxDMA_rx_buffers[ head ] = pxNewBuffer;\r
-\r
-                       /*\r
-                        * Adjust the buffer size to the actual number of bytes received.\r
-                        */\r
-                       rx_bytes = xemacpsif->rxSegments[ head ].flags & XEMACPS_RXBUF_LEN_MASK;\r
-\r
-                       pxBuffer->xDataLength = rx_bytes;\r
-\r
-                       if( ucIsCachedMemory( pxBuffer->pucEthernetBuffer ) != 0 )\r
-                       {\r
-                               Xil_DCacheInvalidateRange( ( ( uint32_t )pxBuffer->pucEthernetBuffer ) - ipconfigPACKET_FILLER_SIZE, (unsigned)rx_bytes );\r
-                       }\r
-\r
-                       /* store it in the receive queue, where it'll be processed by a\r
-                       different handler. */\r
-                       iptraceNETWORK_INTERFACE_RECEIVE();\r
-                       pxBuffer->pxNextBuffer = NULL;\r
-\r
-                       if( ethMsg == NULL )\r
-                       {\r
-                               // Becomes the first message\r
-                               ethMsg = pxBuffer;\r
-                       }\r
-                       else if( ethLast != NULL )\r
-                       {\r
-                               // Add to the tail\r
-                               ethLast->pxNextBuffer = pxBuffer;\r
-                       }\r
-\r
-                       ethLast = pxBuffer;\r
-                       msgCount++;\r
-               }\r
-               {\r
-                       if( ucIsCachedMemory( pxNewBuffer->pucEthernetBuffer ) != 0 )\r
-                       {\r
-                               Xil_DCacheInvalidateRange( ( ( uint32_t )pxNewBuffer->pucEthernetBuffer ) - ipconfigPACKET_FILLER_SIZE, (unsigned)ipTOTAL_ETHERNET_FRAME_SIZE + RX_BUFFER_ALIGNMENT);\r
-                       }\r
-                       {\r
-                               uint32_t addr = ( ( uint32_t )pxNewBuffer->pucEthernetBuffer ) & XEMACPS_RXBUF_ADD_MASK;\r
-                               if( head == ( ipconfigNIC_N_RX_DESC - 1 ) )\r
-                               {\r
-                                       addr |= XEMACPS_RXBUF_WRAP_MASK;\r
-                               }\r
-                               /* Clearing 'XEMACPS_RXBUF_NEW_MASK'       0x00000001 *< Used bit.. */\r
-                               xemacpsif->rxSegments[ head ].address = addr;\r
-                               xemacpsif->rxSegments[ head ].flags = 0;\r
-                       }\r
-               }\r
-\r
-               if( ++head == ipconfigNIC_N_RX_DESC )\r
-               {\r
-                       head = 0;\r
-               }\r
-               xemacpsif->rxHead = head;\r
-       }\r
-\r
-       if( ethMsg != NULL )\r
-       {\r
-               passEthMessages( );\r
-       }\r
-\r
-       return msgCount;\r
-}\r
-\r
-void clean_dma_txdescs(xemacpsif_s *xemacpsif)\r
-{\r
-int index;\r
-unsigned char *ucTxBuffer;\r
-\r
-       /* Clear all TX descriptors and assign uncached memory to each descriptor.\r
-       "tx_space" points to the first available TX buffer. */\r
-       ucTxBuffer = xemacpsif->tx_space;\r
-\r
-       for( index = 0; index < ipconfigNIC_N_TX_DESC; index++ )\r
-       {\r
-               xemacpsif->txSegments[ index ].address = ( uint32_t )ucTxBuffer;\r
-               xemacpsif->txSegments[ index ].flags = XEMACPS_TXBUF_USED_MASK;\r
-#if( ipconfigZERO_COPY_TX_DRIVER != 0 )\r
-               pxDMA_tx_buffers[ index ] = ( void* )NULL;\r
-#else\r
-               pxDMA_tx_buffers[ index ] = ( void* )( ucTxBuffer + TX_OFFSET );\r
-#endif\r
-               ucTxBuffer += xemacpsif->uTxUnitSize;\r
-       }\r
-       xemacpsif->txSegments[ ipconfigNIC_N_TX_DESC - 1 ].flags =\r
-               XEMACPS_TXBUF_USED_MASK | XEMACPS_TXBUF_WRAP_MASK;\r
-}\r
-\r
-XStatus init_dma(xemacpsif_s *xemacpsif)\r
-{\r
-       NetworkBufferDescriptor_t *pxBuffer;\r
-\r
-       int iIndex;\r
-       UBaseType_t xRxSize;\r
-       UBaseType_t xTxSize;\r
-       struct xtopology_t *xtopologyp = &xXTopology;\r
-\r
-       xRxSize = ipconfigNIC_N_RX_DESC * sizeof( xemacpsif->rxSegments[ 0 ] );\r
-\r
-       xTxSize = ipconfigNIC_N_TX_DESC * sizeof( xemacpsif->txSegments[ 0 ] );\r
-\r
-       /* Also round-up to 4KB */\r
-       xemacpsif->uTxUnitSize = ( ipTOTAL_ETHERNET_FRAME_SIZE + 0x1000ul ) & ~0xffful;\r
-       /*\r
-        * We allocate 65536 bytes for RX BDs which can accommodate a\r
-        * maximum of 8192 BDs which is much more than any application\r
-        * will ever need.\r
-        */\r
-       xemacpsif->rxSegments = ( struct xBD_TYPE * )( pucGetUncachedMemory ( xRxSize )  );\r
-       xemacpsif->txSegments = ( struct xBD_TYPE * )( pucGetUncachedMemory ( xTxSize ) );\r
-       xemacpsif->tx_space   = ( unsigned char *   )( pucGetUncachedMemory ( ipconfigNIC_N_TX_DESC * xemacpsif->uTxUnitSize ) );\r
-\r
-       /* These variables will be used in XEmacPs_Start (see src/xemacps.c). */\r
-       xemacpsif->emacps.RxBdRing.BaseBdAddr = ( uint32_t ) xemacpsif->rxSegments;\r
-       xemacpsif->emacps.TxBdRing.BaseBdAddr = ( uint32_t ) xemacpsif->txSegments;\r
-\r
-       if( xTXDescriptorSemaphore == NULL )\r
-       {\r
-               xTXDescriptorSemaphore = xSemaphoreCreateCounting( ( UBaseType_t ) ipconfigNIC_N_TX_DESC, ( UBaseType_t ) ipconfigNIC_N_TX_DESC );\r
-               configASSERT( xTXDescriptorSemaphore );\r
-       }\r
-       /*\r
-        * Allocate RX descriptors, 1 RxBD at a time.\r
-        */\r
-       for( iIndex = 0; iIndex < ipconfigNIC_N_RX_DESC; iIndex++ )\r
-       {\r
-               pxBuffer = pxDMA_rx_buffers[ iIndex ];\r
-               if( pxBuffer == NULL )\r
-               {\r
-                       pxBuffer = pxGetNetworkBufferWithDescriptor( ipTOTAL_ETHERNET_FRAME_SIZE + RX_BUFFER_ALIGNMENT, ( TickType_t ) 0 );\r
-                       if( pxBuffer == NULL )\r
-                       {\r
-                               FreeRTOS_printf( ("Unable to allocate a network buffer in recv_handler\n" ) );\r
-                               return -1;\r
-                       }\r
-               }\r
-\r
-               xemacpsif->rxSegments[ iIndex ].flags = 0;\r
-               xemacpsif->rxSegments[ iIndex ].address = ( ( uint32_t )pxBuffer->pucEthernetBuffer ) & XEMACPS_RXBUF_ADD_MASK;\r
-\r
-               pxDMA_rx_buffers[ iIndex ] = pxBuffer;\r
-               /* Make sure this memory is not in cache for now. */\r
-               if( ucIsCachedMemory( pxBuffer->pucEthernetBuffer ) != 0 )\r
-               {\r
-                       Xil_DCacheInvalidateRange( ( ( uint32_t )pxBuffer->pucEthernetBuffer ) - ipconfigPACKET_FILLER_SIZE,\r
-                               (unsigned)ipTOTAL_ETHERNET_FRAME_SIZE + RX_BUFFER_ALIGNMENT);\r
-               }\r
-       }\r
-\r
-       xemacpsif->rxSegments[ ipconfigNIC_N_RX_DESC - 1 ].address |= XEMACPS_RXBUF_WRAP_MASK;\r
-\r
-       memset( xemacpsif->tx_space, '\0', ipconfigNIC_N_TX_DESC * xemacpsif->uTxUnitSize );\r
-\r
-       clean_dma_txdescs( xemacpsif );\r
-\r
-       {\r
-               uint32_t value;\r
-               value = XEmacPs_ReadReg( xemacpsif->emacps.Config.BaseAddress, XEMACPS_DMACR_OFFSET );\r
-\r
-               // 1xxxx: Attempt to use INCR16 AHB bursts\r
-               value = ( value & ~( XEMACPS_DMACR_BLENGTH_MASK ) ) | XEMACPS_DMACR_INCR16_AHB_BURST;\r
-#if( ipconfigDRIVER_INCLUDED_TX_IP_CHECKSUM != 0 )\r
-               value |= XEMACPS_DMACR_TCPCKSUM_MASK;\r
-#else\r
-#warning Are you sure the EMAC should not calculate outgoing checksums?\r
-               value &= ~XEMACPS_DMACR_TCPCKSUM_MASK;\r
-#endif\r
-               XEmacPs_WriteReg( xemacpsif->emacps.Config.BaseAddress, XEMACPS_DMACR_OFFSET, value );\r
-       }\r
-       {\r
-               uint32_t value;\r
-               value = XEmacPs_ReadReg( xemacpsif->emacps.Config.BaseAddress, XEMACPS_NWCFG_OFFSET );\r
-\r
-               /* Network buffers are 32-bit aligned + 2 bytes (because ipconfigPACKET_FILLER_SIZE = 2 ).\r
-               Now tell the EMAC that received messages should be stored at "address + 2". */\r
-               value = ( value & ~XEMACPS_NWCFG_RXOFFS_MASK ) | 0x8000;\r
-\r
-#if( ipconfigDRIVER_INCLUDED_RX_IP_CHECKSUM != 0 )\r
-               value |= XEMACPS_NWCFG_RXCHKSUMEN_MASK;\r
-#else\r
-#warning Are you sure the EMAC should not calculate incoming checksums?\r
-               value &= ~XEMACPS_NWCFG_RXCHKSUMEN_MASK;\r
-#endif\r
-               XEmacPs_WriteReg( xemacpsif->emacps.Config.BaseAddress, XEMACPS_NWCFG_OFFSET, value );\r
-       }\r
-\r
-       /*\r
-        * Connect the device driver handler that will be called when an\r
-        * interrupt for the device occurs, the handler defined above performs\r
-        * the specific interrupt processing for the device.\r
-        */\r
-       XScuGic_RegisterHandler(INTC_BASE_ADDR, xtopologyp->scugic_emac_intr,\r
-               (Xil_ExceptionHandler)XEmacPs_IntrHandler,\r
-               (void *)&xemacpsif->emacps);\r
-       /*\r
-        * Enable the interrupt for emacps.\r
-        */\r
-       EmacEnableIntr( );\r
-\r
-       return 0;\r
-}\r
-\r
-/*\r
- * resetrx_on_no_rxdata():\r
- *\r
- * It is called at regular intervals through the API xemacpsif_resetrx_on_no_rxdata\r
- * called by the user.\r
- * The EmacPs has a HW bug (SI# 692601) on the Rx path for heavy Rx traffic.\r
- * Under heavy Rx traffic because of the HW bug there are times when the Rx path\r
- * becomes unresponsive. The workaround for it is to check for the Rx path for\r
- * traffic (by reading the stats registers regularly). If the stats register\r
- * does not increment for sometime (proving no Rx traffic), the function resets\r
- * the Rx data path.\r
- *\r
- */\r
-\r
-void resetrx_on_no_rxdata(xemacpsif_s *xemacpsif)\r
-{\r
-       unsigned long regctrl;\r
-       unsigned long tempcntr;\r
-\r
-       tempcntr = XEmacPs_ReadReg( xemacpsif->emacps.Config.BaseAddress, XEMACPS_RXCNT_OFFSET );\r
-       if ( ( tempcntr == 0 ) && ( xemacpsif->last_rx_frms_cntr == 0 ) )\r
-       {\r
-               regctrl = XEmacPs_ReadReg(xemacpsif->emacps.Config.BaseAddress,\r
-                               XEMACPS_NWCTRL_OFFSET);\r
-               regctrl &= (~XEMACPS_NWCTRL_RXEN_MASK);\r
-               XEmacPs_WriteReg(xemacpsif->emacps.Config.BaseAddress,\r
-                               XEMACPS_NWCTRL_OFFSET, regctrl);\r
-               regctrl = XEmacPs_ReadReg(xemacpsif->emacps.Config.BaseAddress, XEMACPS_NWCTRL_OFFSET);\r
-               regctrl |= (XEMACPS_NWCTRL_RXEN_MASK);\r
-               XEmacPs_WriteReg(xemacpsif->emacps.Config.BaseAddress, XEMACPS_NWCTRL_OFFSET, regctrl);\r
-       }\r
-       xemacpsif->last_rx_frms_cntr = tempcntr;\r
-}\r
-\r
-void EmacDisableIntr(void)\r
-{\r
-       XScuGic_DisableIntr(INTC_DIST_BASE_ADDR, xXTopology.scugic_emac_intr);\r
-}\r
-\r
-void EmacEnableIntr(void)\r
-{\r
-       XScuGic_EnableIntr(INTC_DIST_BASE_ADDR, xXTopology.scugic_emac_intr);\r
-}\r
-\r
+/*
+FreeRTOS+TCP V2.0.11
+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
+*/
+
+#include "Zynq/x_emacpsif.h"
+#include "Zynq/x_topology.h"
+#include "xstatus.h"
+
+#include "xparameters.h"
+#include "xparameters_ps.h"
+#include "xil_exception.h"
+#include "xil_mmu.h"
+
+#include "FreeRTOS.h"
+#include "task.h"
+#include "timers.h"
+#include "semphr.h"
+
+/* FreeRTOS+TCP includes. */
+#include "FreeRTOS_IP.h"
+#include "FreeRTOS_Sockets.h"
+#include "FreeRTOS_IP_Private.h"
+#include "NetworkBufferManagement.h"
+
+#include "uncached_memory.h"
+
+/* Two defines used to set or clear the EMAC interrupt */
+#define INTC_BASE_ADDR         XPAR_SCUGIC_CPU_BASEADDR
+#define INTC_DIST_BASE_ADDR    XPAR_SCUGIC_DIST_BASEADDR
+
+
+
+#if( ipconfigPACKET_FILLER_SIZE != 2 )
+       #error Please define ipconfigPACKET_FILLER_SIZE as the value '2'
+#endif
+#define TX_OFFSET                              ipconfigPACKET_FILLER_SIZE
+
+#define RX_BUFFER_ALIGNMENT    14
+
+/* Defined in NetworkInterface.c */
+extern TaskHandle_t xEMACTaskHandle;
+
+/*
+       pxDMA_tx_buffers: these are character arrays, each one is big enough to hold 1 MTU.
+       The actual TX buffers are located in uncached RAM.
+*/
+static unsigned char *pxDMA_tx_buffers[ ipconfigNIC_N_TX_DESC ] = { NULL };
+
+/*
+       pxDMA_rx_buffers: these are pointers to 'NetworkBufferDescriptor_t'.
+       Once a message has been received by the EMAC, the descriptor can be passed
+       immediately to the IP-task.
+*/
+static NetworkBufferDescriptor_t *pxDMA_rx_buffers[ ipconfigNIC_N_RX_DESC ] = { NULL };
+
+/*
+       The FreeRTOS+TCP port is using a fixed 'topology', which is declared in
+       ./portable/NetworkInterface/Zynq/NetworkInterface.c
+*/
+extern struct xtopology_t xXTopology;
+
+static SemaphoreHandle_t xTXDescriptorSemaphore = NULL;
+
+/*
+       The FreeRTOS+TCP port does not make use of "src/xemacps_bdring.c".
+       In stead 'struct xemacpsif_s' has a "head" and a "tail" index.
+       "head" is the next index to be written, used.
+       "tail" is the next index to be read, freed.
+*/
+
+int is_tx_space_available( xemacpsif_s *xemacpsif )
+{
+size_t uxCount;
+
+       if( xTXDescriptorSemaphore != NULL )
+       {
+               uxCount = ( ( UBaseType_t ) ipconfigNIC_N_TX_DESC ) - uxSemaphoreGetCount( xTXDescriptorSemaphore );
+       }
+       else
+       {
+               uxCount = ( UBaseType_t ) 0u;
+       }
+
+       return uxCount;
+}
+
+void emacps_check_tx( xemacpsif_s *xemacpsif )
+{
+int tail = xemacpsif->txTail;
+int head = xemacpsif->txHead;
+size_t uxCount = ( ( UBaseType_t ) ipconfigNIC_N_TX_DESC ) - uxSemaphoreGetCount( xTXDescriptorSemaphore );
+
+       /* uxCount is the number of TX descriptors that are in use by the DMA. */
+       /* When done, "TXBUF_USED" will be set. */
+
+       while( ( uxCount > 0 ) && ( ( xemacpsif->txSegments[ tail ].flags & XEMACPS_TXBUF_USED_MASK ) != 0 ) )
+       {
+               if( ( tail == head ) && ( uxCount != ipconfigNIC_N_TX_DESC ) )
+               {
+                       break;
+               }
+#if( ipconfigZERO_COPY_TX_DRIVER != 0 )
+#warning ipconfigZERO_COPY_TX_DRIVER is defined
+               {
+               void *pvBuffer = pxDMA_tx_buffers[ tail ];
+               NetworkBufferDescriptor_t *pxBuffer;
+
+                       if( pvBuffer != NULL )
+                       {
+                               pxDMA_tx_buffers[ tail ] = NULL;
+                               pxBuffer = pxPacketBuffer_to_NetworkBuffer( pvBuffer );
+                               if( pxBuffer != NULL )
+                               {
+                                       vReleaseNetworkBufferAndDescriptor( pxBuffer );
+                               }
+                               else
+                               {
+                                       FreeRTOS_printf( ( "emacps_check_tx: Can not find network buffer\n" ) );
+                               }
+                       }
+               }
+#endif
+               /* Clear all but the "used" and "wrap" bits. */
+               if( tail < ipconfigNIC_N_TX_DESC - 1 )
+               {
+                       xemacpsif->txSegments[ tail ].flags = XEMACPS_TXBUF_USED_MASK;
+               }
+               else
+               {
+                       xemacpsif->txSegments[ tail ].flags = XEMACPS_TXBUF_USED_MASK | XEMACPS_TXBUF_WRAP_MASK;
+               }
+               uxCount--;
+               /* Tell the counting semaphore that one more TX descriptor is available. */
+               xSemaphoreGive( xTXDescriptorSemaphore );
+               if( ++tail == ipconfigNIC_N_TX_DESC )
+               {
+                       tail = 0;
+               }
+               xemacpsif->txTail = tail;
+       }
+
+       return;
+}
+
+void emacps_send_handler(void *arg)
+{
+xemacpsif_s   *xemacpsif;
+BaseType_t xHigherPriorityTaskWoken = pdFALSE;
+
+       xemacpsif = (xemacpsif_s *)(arg);
+
+       /* In this port for FreeRTOS+TCP, the EMAC interrupts will only set a bit in
+       "isr_events". The task in NetworkInterface will wake-up and do the necessary work.
+       */
+       xemacpsif->isr_events |= EMAC_IF_TX_EVENT;
+       xemacpsif->txBusy = pdFALSE;
+
+       if( xEMACTaskHandle != NULL )
+       {
+               vTaskNotifyGiveFromISR( xEMACTaskHandle, &xHigherPriorityTaskWoken );
+       }
+
+       portYIELD_FROM_ISR( xHigherPriorityTaskWoken );
+}
+
+static BaseType_t xValidLength( BaseType_t xLength )
+{
+BaseType_t xReturn;
+
+       if( ( xLength >= ( BaseType_t ) sizeof( struct xARP_PACKET ) ) && ( ( ( uint32_t ) xLength ) <= ipTOTAL_ETHERNET_FRAME_SIZE ) )
+       {
+               xReturn = pdTRUE;
+       }
+       else
+       {
+               xReturn =  pdFALSE;
+       }
+
+       return xReturn;
+}
+
+XStatus emacps_send_message(xemacpsif_s *xemacpsif, NetworkBufferDescriptor_t *pxBuffer, int iReleaseAfterSend )
+{
+int head = xemacpsif->txHead;
+int iHasSent = 0;
+uint32_t ulBaseAddress = xemacpsif->emacps.Config.BaseAddress;
+TickType_t xBlockTimeTicks = pdMS_TO_TICKS( 5000u );
+
+       #if( ipconfigZERO_COPY_TX_DRIVER != 0 )
+       {
+               /* This driver wants to own all network buffers which are to be transmitted. */
+               configASSERT( iReleaseAfterSend != pdFALSE );
+       }
+       #endif
+
+       /* Open a do {} while ( 0 ) loop to be able to call break. */
+       do
+       {
+       uint32_t ulFlags = 0;
+
+               if( xValidLength( pxBuffer->xDataLength ) != pdTRUE )
+               {
+                       break;
+               }
+
+               if( xTXDescriptorSemaphore == NULL )
+               {
+                       break;
+               }
+
+               if( xSemaphoreTake( xTXDescriptorSemaphore, xBlockTimeTicks ) != pdPASS )
+               {
+                       FreeRTOS_printf( ( "emacps_send_message: Time-out waiting for TX buffer\n" ) );
+                       break;
+               }
+
+#if( ipconfigZERO_COPY_TX_DRIVER != 0 )
+               /* Pass the pointer (and its ownership) directly to DMA. */
+               pxDMA_tx_buffers[ head ] = pxBuffer->pucEthernetBuffer;
+               if( ucIsCachedMemory( pxBuffer->pucEthernetBuffer ) != 0 )
+               {
+                       Xil_DCacheFlushRange( ( unsigned )pxBuffer->pucEthernetBuffer, pxBuffer->xDataLength );
+               }
+               /* Buffer has been transferred, do not release it. */
+               iReleaseAfterSend = pdFALSE;
+#else
+               if( pxDMA_tx_buffers[ head ] == NULL )
+               {
+                       FreeRTOS_printf( ( "emacps_send_message: pxDMA_tx_buffers[ %d ] == NULL\n", head ) );
+                       break;
+               }
+               /* Copy the message to unbuffered space in RAM. */
+               memcpy( pxDMA_tx_buffers[ head ], pxBuffer->pucEthernetBuffer, pxBuffer->xDataLength );
+#endif
+               /* Packets will be sent one-by-one, so for each packet
+               the TXBUF_LAST bit will be set. */
+               ulFlags |= XEMACPS_TXBUF_LAST_MASK;
+               ulFlags |= ( pxBuffer->xDataLength & XEMACPS_TXBUF_LEN_MASK );
+               if( head == ( ipconfigNIC_N_TX_DESC - 1 ) )
+               {
+                       ulFlags |= XEMACPS_TXBUF_WRAP_MASK;
+               }
+
+               /* Copy the address of the buffer and set the flags. */
+               xemacpsif->txSegments[ head ].address = ( uint32_t )pxDMA_tx_buffers[ head ];
+               xemacpsif->txSegments[ head ].flags = ulFlags;
+
+               iHasSent = pdTRUE;
+               if( ++head == ipconfigNIC_N_TX_DESC )
+               {
+                       head = 0;
+               }
+               /* Update the TX-head index. These variable are declared volatile so they will be
+               accessed as little as possible. */
+               xemacpsif->txHead = head;
+       } while( pdFALSE );
+
+       if( iReleaseAfterSend != pdFALSE )
+       {
+               vReleaseNetworkBufferAndDescriptor( pxBuffer );
+               pxBuffer = NULL;
+       }
+
+       /* Data Synchronization Barrier */
+       dsb();
+
+       if( iHasSent != pdFALSE )
+       {
+               /* Make STARTTX high */
+               uint32_t ulValue = XEmacPs_ReadReg( ulBaseAddress, XEMACPS_NWCTRL_OFFSET);
+               /* Start transmit */
+               xemacpsif->txBusy = pdTRUE;
+               XEmacPs_WriteReg( ulBaseAddress, XEMACPS_NWCTRL_OFFSET, ( ulValue | XEMACPS_NWCTRL_STARTTX_MASK ) );
+       }
+       dsb();
+
+       return 0;
+}
+
+void emacps_recv_handler(void *arg)
+{
+       xemacpsif_s *xemacpsif;
+       BaseType_t xHigherPriorityTaskWoken = pdFALSE;
+
+       xemacpsif = (xemacpsif_s *)(arg);
+       xemacpsif->isr_events |= EMAC_IF_RX_EVENT;
+
+       if( xEMACTaskHandle != NULL )
+       {
+               vTaskNotifyGiveFromISR( xEMACTaskHandle, &xHigherPriorityTaskWoken );
+       }
+
+       portYIELD_FROM_ISR( xHigherPriorityTaskWoken );
+}
+
+static NetworkBufferDescriptor_t *ethMsg = NULL;
+static NetworkBufferDescriptor_t *ethLast = NULL;
+
+static void passEthMessages( void )
+{
+IPStackEvent_t xRxEvent;
+
+       xRxEvent.eEventType = eNetworkRxEvent;
+       xRxEvent.pvData = ( void * ) ethMsg;
+
+       if( xSendEventStructToIPTask( &xRxEvent, ( TickType_t ) 1000 ) != pdPASS )
+       {
+               /* The buffer could not be sent to the stack so must be released again.
+               This is a deferred handler taskr, not a real interrupt, so it is ok to
+               use the task level function here. */
+               do
+               {
+                       NetworkBufferDescriptor_t *xNext = ethMsg->pxNextBuffer;
+                       vReleaseNetworkBufferAndDescriptor( ethMsg );
+                       ethMsg = xNext;
+               } while( ethMsg != NULL );
+
+               iptraceETHERNET_RX_EVENT_LOST();
+               FreeRTOS_printf( ( "passEthMessages: Can not queue return packet!\n" ) );
+       }
+
+       ethMsg = ethLast = NULL;
+}
+
+int emacps_check_rx( xemacpsif_s *xemacpsif )
+{
+NetworkBufferDescriptor_t *pxBuffer, *pxNewBuffer;
+int rx_bytes;
+volatile int msgCount = 0;
+int head = xemacpsif->rxHead;
+
+       /* There seems to be an issue (SI# 692601), see comments below. */
+       resetrx_on_no_rxdata(xemacpsif);
+
+       /* This FreeRTOS+TCP driver shall be compiled with the option
+       "ipconfigUSE_LINKED_RX_MESSAGES" enabled.  It allows the driver to send a
+       chain of RX messages within one message to the IP-task. */
+       for( ;; )
+       {
+               if( ( ( xemacpsif->rxSegments[ head ].address & XEMACPS_RXBUF_NEW_MASK ) == 0 ) ||
+                       ( pxDMA_rx_buffers[ head ] == NULL ) )
+               {
+                       break;
+               }
+
+               pxNewBuffer = pxGetNetworkBufferWithDescriptor( ipTOTAL_ETHERNET_FRAME_SIZE + RX_BUFFER_ALIGNMENT, ( TickType_t ) 0 );
+               if( pxNewBuffer == NULL )
+               {
+                       /* A packet has been received, but there is no replacement for this Network Buffer.
+                       The packet will be dropped, and it Network Buffer will stay in place. */
+                       FreeRTOS_printf( ("emacps_check_rx: unable to allocate a Netwrok Buffer\n" ) );
+                       pxNewBuffer = ( NetworkBufferDescriptor_t * )pxDMA_rx_buffers[ head ];
+               }
+               else
+               {
+                       pxBuffer = ( NetworkBufferDescriptor_t * )pxDMA_rx_buffers[ head ];
+
+                       /* Just avoiding to use or refer to the same buffer again */
+                       pxDMA_rx_buffers[ head ] = pxNewBuffer;
+
+                       /*
+                        * Adjust the buffer size to the actual number of bytes received.
+                        */
+                       rx_bytes = xemacpsif->rxSegments[ head ].flags & XEMACPS_RXBUF_LEN_MASK;
+
+                       pxBuffer->xDataLength = rx_bytes;
+
+                       if( ucIsCachedMemory( pxBuffer->pucEthernetBuffer ) != 0 )
+                       {
+                               Xil_DCacheInvalidateRange( ( ( uint32_t )pxBuffer->pucEthernetBuffer ) - ipconfigPACKET_FILLER_SIZE, (unsigned)rx_bytes );
+                       }
+
+                       /* store it in the receive queue, where it'll be processed by a
+                       different handler. */
+                       iptraceNETWORK_INTERFACE_RECEIVE();
+                       pxBuffer->pxNextBuffer = NULL;
+
+                       if( ethMsg == NULL )
+                       {
+                               // Becomes the first message
+                               ethMsg = pxBuffer;
+                       }
+                       else if( ethLast != NULL )
+                       {
+                               // Add to the tail
+                               ethLast->pxNextBuffer = pxBuffer;
+                       }
+
+                       ethLast = pxBuffer;
+                       msgCount++;
+               }
+               {
+                       if( ucIsCachedMemory( pxNewBuffer->pucEthernetBuffer ) != 0 )
+                       {
+                               Xil_DCacheInvalidateRange( ( ( uint32_t )pxNewBuffer->pucEthernetBuffer ) - ipconfigPACKET_FILLER_SIZE, (unsigned)ipTOTAL_ETHERNET_FRAME_SIZE + RX_BUFFER_ALIGNMENT);
+                       }
+                       {
+                               uint32_t addr = ( ( uint32_t )pxNewBuffer->pucEthernetBuffer ) & XEMACPS_RXBUF_ADD_MASK;
+                               if( head == ( ipconfigNIC_N_RX_DESC - 1 ) )
+                               {
+                                       addr |= XEMACPS_RXBUF_WRAP_MASK;
+                               }
+                               /* Clearing 'XEMACPS_RXBUF_NEW_MASK'       0x00000001 *< Used bit.. */
+                               xemacpsif->rxSegments[ head ].address = addr;
+                               xemacpsif->rxSegments[ head ].flags = 0;
+                       }
+               }
+
+               if( ++head == ipconfigNIC_N_RX_DESC )
+               {
+                       head = 0;
+               }
+               xemacpsif->rxHead = head;
+       }
+
+       if( ethMsg != NULL )
+       {
+               passEthMessages( );
+       }
+
+       return msgCount;
+}
+
+void clean_dma_txdescs(xemacpsif_s *xemacpsif)
+{
+int index;
+unsigned char *ucTxBuffer;
+
+       /* Clear all TX descriptors and assign uncached memory to each descriptor.
+       "tx_space" points to the first available TX buffer. */
+       ucTxBuffer = xemacpsif->tx_space;
+
+       for( index = 0; index < ipconfigNIC_N_TX_DESC; index++ )
+       {
+               xemacpsif->txSegments[ index ].address = ( uint32_t )ucTxBuffer;
+               xemacpsif->txSegments[ index ].flags = XEMACPS_TXBUF_USED_MASK;
+#if( ipconfigZERO_COPY_TX_DRIVER != 0 )
+               pxDMA_tx_buffers[ index ] = ( void* )NULL;
+#else
+               pxDMA_tx_buffers[ index ] = ( void* )( ucTxBuffer + TX_OFFSET );
+#endif
+               ucTxBuffer += xemacpsif->uTxUnitSize;
+       }
+       xemacpsif->txSegments[ ipconfigNIC_N_TX_DESC - 1 ].flags =
+               XEMACPS_TXBUF_USED_MASK | XEMACPS_TXBUF_WRAP_MASK;
+}
+
+XStatus init_dma(xemacpsif_s *xemacpsif)
+{
+       NetworkBufferDescriptor_t *pxBuffer;
+
+       int iIndex;
+       UBaseType_t xRxSize;
+       UBaseType_t xTxSize;
+       struct xtopology_t *xtopologyp = &xXTopology;
+
+       xRxSize = ipconfigNIC_N_RX_DESC * sizeof( xemacpsif->rxSegments[ 0 ] );
+
+       xTxSize = ipconfigNIC_N_TX_DESC * sizeof( xemacpsif->txSegments[ 0 ] );
+
+       /* Also round-up to 4KB */
+       xemacpsif->uTxUnitSize = ( ipTOTAL_ETHERNET_FRAME_SIZE + 0x1000ul ) & ~0xffful;
+       /*
+        * We allocate 65536 bytes for RX BDs which can accommodate a
+        * maximum of 8192 BDs which is much more than any application
+        * will ever need.
+        */
+       xemacpsif->rxSegments = ( struct xBD_TYPE * )( pucGetUncachedMemory ( xRxSize )  );
+       xemacpsif->txSegments = ( struct xBD_TYPE * )( pucGetUncachedMemory ( xTxSize ) );
+       xemacpsif->tx_space   = ( unsigned char *   )( pucGetUncachedMemory ( ipconfigNIC_N_TX_DESC * xemacpsif->uTxUnitSize ) );
+
+       /* These variables will be used in XEmacPs_Start (see src/xemacps.c). */
+       xemacpsif->emacps.RxBdRing.BaseBdAddr = ( uint32_t ) xemacpsif->rxSegments;
+       xemacpsif->emacps.TxBdRing.BaseBdAddr = ( uint32_t ) xemacpsif->txSegments;
+
+       if( xTXDescriptorSemaphore == NULL )
+       {
+               xTXDescriptorSemaphore = xSemaphoreCreateCounting( ( UBaseType_t ) ipconfigNIC_N_TX_DESC, ( UBaseType_t ) ipconfigNIC_N_TX_DESC );
+               configASSERT( xTXDescriptorSemaphore );
+       }
+       /*
+        * Allocate RX descriptors, 1 RxBD at a time.
+        */
+       for( iIndex = 0; iIndex < ipconfigNIC_N_RX_DESC; iIndex++ )
+       {
+               pxBuffer = pxDMA_rx_buffers[ iIndex ];
+               if( pxBuffer == NULL )
+               {
+                       pxBuffer = pxGetNetworkBufferWithDescriptor( ipTOTAL_ETHERNET_FRAME_SIZE + RX_BUFFER_ALIGNMENT, ( TickType_t ) 0 );
+                       if( pxBuffer == NULL )
+                       {
+                               FreeRTOS_printf( ("Unable to allocate a network buffer in recv_handler\n" ) );
+                               return -1;
+                       }
+               }
+
+               xemacpsif->rxSegments[ iIndex ].flags = 0;
+               xemacpsif->rxSegments[ iIndex ].address = ( ( uint32_t )pxBuffer->pucEthernetBuffer ) & XEMACPS_RXBUF_ADD_MASK;
+
+               pxDMA_rx_buffers[ iIndex ] = pxBuffer;
+               /* Make sure this memory is not in cache for now. */
+               if( ucIsCachedMemory( pxBuffer->pucEthernetBuffer ) != 0 )
+               {
+                       Xil_DCacheInvalidateRange( ( ( uint32_t )pxBuffer->pucEthernetBuffer ) - ipconfigPACKET_FILLER_SIZE,
+                               (unsigned)ipTOTAL_ETHERNET_FRAME_SIZE + RX_BUFFER_ALIGNMENT);
+               }
+       }
+
+       xemacpsif->rxSegments[ ipconfigNIC_N_RX_DESC - 1 ].address |= XEMACPS_RXBUF_WRAP_MASK;
+
+       memset( xemacpsif->tx_space, '\0', ipconfigNIC_N_TX_DESC * xemacpsif->uTxUnitSize );
+
+       clean_dma_txdescs( xemacpsif );
+
+       {
+               uint32_t value;
+               value = XEmacPs_ReadReg( xemacpsif->emacps.Config.BaseAddress, XEMACPS_DMACR_OFFSET );
+
+               // 1xxxx: Attempt to use INCR16 AHB bursts
+               value = ( value & ~( XEMACPS_DMACR_BLENGTH_MASK ) ) | XEMACPS_DMACR_INCR16_AHB_BURST;
+#if( ipconfigDRIVER_INCLUDED_TX_IP_CHECKSUM != 0 )
+               value |= XEMACPS_DMACR_TCPCKSUM_MASK;
+#else
+#warning Are you sure the EMAC should not calculate outgoing checksums?
+               value &= ~XEMACPS_DMACR_TCPCKSUM_MASK;
+#endif
+               XEmacPs_WriteReg( xemacpsif->emacps.Config.BaseAddress, XEMACPS_DMACR_OFFSET, value );
+       }
+       {
+               uint32_t value;
+               value = XEmacPs_ReadReg( xemacpsif->emacps.Config.BaseAddress, XEMACPS_NWCFG_OFFSET );
+
+               /* Network buffers are 32-bit aligned + 2 bytes (because ipconfigPACKET_FILLER_SIZE = 2 ).
+               Now tell the EMAC that received messages should be stored at "address + 2". */
+               value = ( value & ~XEMACPS_NWCFG_RXOFFS_MASK ) | 0x8000;
+
+#if( ipconfigDRIVER_INCLUDED_RX_IP_CHECKSUM != 0 )
+               value |= XEMACPS_NWCFG_RXCHKSUMEN_MASK;
+#else
+#warning Are you sure the EMAC should not calculate incoming checksums?
+               value &= ~XEMACPS_NWCFG_RXCHKSUMEN_MASK;
+#endif
+               XEmacPs_WriteReg( xemacpsif->emacps.Config.BaseAddress, XEMACPS_NWCFG_OFFSET, value );
+       }
+
+       /*
+        * Connect the device driver handler that will be called when an
+        * interrupt for the device occurs, the handler defined above performs
+        * the specific interrupt processing for the device.
+        */
+       XScuGic_RegisterHandler(INTC_BASE_ADDR, xtopologyp->scugic_emac_intr,
+               (Xil_ExceptionHandler)XEmacPs_IntrHandler,
+               (void *)&xemacpsif->emacps);
+       /*
+        * Enable the interrupt for emacps.
+        */
+       EmacEnableIntr( );
+
+       return 0;
+}
+
+/*
+ * resetrx_on_no_rxdata():
+ *
+ * It is called at regular intervals through the API xemacpsif_resetrx_on_no_rxdata
+ * called by the user.
+ * The EmacPs has a HW bug (SI# 692601) on the Rx path for heavy Rx traffic.
+ * Under heavy Rx traffic because of the HW bug there are times when the Rx path
+ * becomes unresponsive. The workaround for it is to check for the Rx path for
+ * traffic (by reading the stats registers regularly). If the stats register
+ * does not increment for sometime (proving no Rx traffic), the function resets
+ * the Rx data path.
+ *
+ */
+
+void resetrx_on_no_rxdata(xemacpsif_s *xemacpsif)
+{
+       unsigned long regctrl;
+       unsigned long tempcntr;
+
+       tempcntr = XEmacPs_ReadReg( xemacpsif->emacps.Config.BaseAddress, XEMACPS_RXCNT_OFFSET );
+       if ( ( tempcntr == 0 ) && ( xemacpsif->last_rx_frms_cntr == 0 ) )
+       {
+               regctrl = XEmacPs_ReadReg(xemacpsif->emacps.Config.BaseAddress,
+                               XEMACPS_NWCTRL_OFFSET);
+               regctrl &= (~XEMACPS_NWCTRL_RXEN_MASK);
+               XEmacPs_WriteReg(xemacpsif->emacps.Config.BaseAddress,
+                               XEMACPS_NWCTRL_OFFSET, regctrl);
+               regctrl = XEmacPs_ReadReg(xemacpsif->emacps.Config.BaseAddress, XEMACPS_NWCTRL_OFFSET);
+               regctrl |= (XEMACPS_NWCTRL_RXEN_MASK);
+               XEmacPs_WriteReg(xemacpsif->emacps.Config.BaseAddress, XEMACPS_NWCTRL_OFFSET, regctrl);
+       }
+       xemacpsif->last_rx_frms_cntr = tempcntr;
+}
+
+void EmacDisableIntr(void)
+{
+       XScuGic_DisableIntr(INTC_DIST_BASE_ADDR, xXTopology.scugic_emac_intr);
+}
+
+void EmacEnableIntr(void)
+{
+       XScuGic_EnableIntr(INTC_DIST_BASE_ADDR, xXTopology.scugic_emac_intr);
+}
+
index e9443cda8e17151e4a2381a2113c29fa31eea298..be00f4f9c8493dff2363d357744bf39b07fc1ed0 100644 (file)
-/*\r
- * Copyright (c) 2010-2013 Xilinx, Inc.  All rights reserved.\r
- *\r
- * Xilinx, Inc.\r
- * XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" AS A\r
- * COURTESY TO YOU.  BY PROVIDING THIS DESIGN, CODE, OR INFORMATION AS\r
- * ONE POSSIBLE   IMPLEMENTATION OF THIS FEATURE, APPLICATION OR\r
- * STANDARD, XILINX IS MAKING NO REPRESENTATION THAT THIS IMPLEMENTATION\r
- * IS FREE FROM ANY CLAIMS OF INFRINGEMENT, AND YOU ARE RESPONSIBLE\r
- * FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE FOR YOUR IMPLEMENTATION.\r
- * XILINX EXPRESSLY DISCLAIMS ANY WARRANTY WHATSOEVER WITH RESPECT TO\r
- * THE ADEQUACY OF THE IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO\r
- * ANY WARRANTIES OR REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE\r
- * FROM CLAIMS OF INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY\r
- * AND FITNESS FOR A PARTICULAR PURPOSE.\r
- *\r
- */\r
-\r
-\r
-/* Standard includes. */\r
-#include <stdint.h>\r
-#include <stdio.h>\r
-#include <stdlib.h>\r
-\r
-#include "Zynq/x_emacpsif.h"\r
-\r
-/* FreeRTOS includes. */\r
-#include "FreeRTOS.h"\r
-#include "task.h"\r
-#include "queue.h"\r
-\r
-///* FreeRTOS+TCP includes. */\r
-/* FreeRTOS+TCP includes. */\r
-#include "FreeRTOS_IP.h"\r
-#include "FreeRTOS_Sockets.h"\r
-#include "FreeRTOS_IP_Private.h"\r
-#include "NetworkBufferManagement.h"\r
-\r
-extern TaskHandle_t xEMACTaskHandle;\r
-\r
-/*** IMPORTANT: Define PEEP in xemacpsif.h and sys_arch_raw.c\r
- *** to run it on a PEEP board\r
- ***/\r
-\r
-unsigned int link_speed = 100;\r
-\r
-void setup_isr( xemacpsif_s *xemacpsif )\r
-{\r
-       /*\r
-        * Setup callbacks\r
-        */\r
-       XEmacPs_SetHandler(&xemacpsif->emacps, XEMACPS_HANDLER_DMASEND,\r
-               (void *) emacps_send_handler,\r
-               (void *) xemacpsif);\r
-\r
-       XEmacPs_SetHandler(&xemacpsif->emacps, XEMACPS_HANDLER_DMARECV,\r
-               (void *) emacps_recv_handler,\r
-               (void *) xemacpsif);\r
-\r
-       XEmacPs_SetHandler(&xemacpsif->emacps, XEMACPS_HANDLER_ERROR,\r
-               (void *) emacps_error_handler,\r
-               (void *) xemacpsif);\r
-}\r
-\r
-void start_emacps (xemacpsif_s *xemacps)\r
-{\r
-       /* start the temac */\r
-       XEmacPs_Start(&xemacps->emacps);\r
-}\r
-\r
-extern struct xtopology_t xXTopology;\r
-\r
-volatile int error_msg_count = 0;\r
-volatile const char *last_err_msg = "";\r
-\r
-struct xERROR_MSG {\r
-       void *arg;\r
-       u8 Direction;\r
-       u32 ErrorWord;\r
-};\r
-\r
-static struct xERROR_MSG xErrorList[ 8 ];\r
-static BaseType_t xErrorHead, xErrorTail;\r
-\r
-void emacps_error_handler(void *arg, u8 Direction, u32 ErrorWord)\r
-{\r
-       BaseType_t xHigherPriorityTaskWoken = pdFALSE;\r
-       xemacpsif_s *xemacpsif;\r
-       BaseType_t xNextHead = xErrorHead;\r
-\r
-       xemacpsif = (xemacpsif_s *)(arg);\r
-\r
-       if( ( Direction != XEMACPS_SEND ) || (ErrorWord != XEMACPS_TXSR_USEDREAD_MASK ) )\r
-       {\r
-               if( ++xNextHead == ( sizeof( xErrorList ) / sizeof( xErrorList[ 0 ] ) ) )\r
-                       xNextHead = 0;\r
-               if( xNextHead != xErrorTail )\r
-               {\r
-\r
-                       xErrorList[ xErrorHead ].arg = arg;\r
-                       xErrorList[ xErrorHead ].Direction = Direction;\r
-                       xErrorList[ xErrorHead ].ErrorWord = ErrorWord;\r
-\r
-                       xErrorHead = xNextHead;\r
-\r
-                       xemacpsif = (xemacpsif_s *)(arg);\r
-                       xemacpsif->isr_events |= EMAC_IF_ERR_EVENT;\r
-               }\r
-\r
-               if( xEMACTaskHandle != NULL )\r
-               {\r
-                       vTaskNotifyGiveFromISR( xEMACTaskHandle, &xHigherPriorityTaskWoken );\r
-               }\r
-\r
-       }\r
-\r
-       portYIELD_FROM_ISR( xHigherPriorityTaskWoken );\r
-}\r
-\r
-static void emacps_handle_error(void *arg, u8 Direction, u32 ErrorWord);\r
-\r
-int emacps_check_errors( xemacpsif_s *xemacps )\r
-{\r
-int xResult;\r
-\r
-       ( void ) xemacps;\r
-\r
-       if( xErrorHead == xErrorTail )\r
-       {\r
-               xResult = 0;\r
-       }\r
-       else\r
-       {\r
-               xResult = 1;\r
-               emacps_handle_error(\r
-                       xErrorList[ xErrorTail ].arg,\r
-                       xErrorList[ xErrorTail ].Direction,\r
-                       xErrorList[ xErrorTail ].ErrorWord );\r
-       }\r
-\r
-       return xResult;\r
-}\r
-\r
-BaseType_t xNetworkInterfaceInitialise( void );\r
-\r
-static void emacps_handle_error(void *arg, u8 Direction, u32 ErrorWord)\r
-{\r
-       xemacpsif_s   *xemacpsif;\r
-       struct xtopology_t *xtopologyp;\r
-       XEmacPs *xemacps;\r
-\r
-       xemacpsif = (xemacpsif_s *)(arg);\r
-\r
-       xtopologyp = &xXTopology;\r
-\r
-       xemacps = &xemacpsif->emacps;\r
-\r
-       /* Do not appear to be used. */\r
-       ( void ) xemacps;\r
-       ( void ) xtopologyp;\r
-\r
-       last_err_msg = NULL;\r
-\r
-       if( ErrorWord != 0 )\r
-       {\r
-               switch (Direction) {\r
-               case XEMACPS_RECV:\r
-                       if( ( ErrorWord & XEMACPS_RXSR_HRESPNOK_MASK ) != 0 )\r
-                       {\r
-                               last_err_msg = "Receive DMA error";\r
-                               xNetworkInterfaceInitialise( );\r
-                       }\r
-                       if( ( ErrorWord & XEMACPS_RXSR_RXOVR_MASK ) != 0 )\r
-                       {\r
-                               last_err_msg = "Receive over run";\r
-                               emacps_recv_handler(arg);\r
-                       }\r
-                       if( ( ErrorWord & XEMACPS_RXSR_BUFFNA_MASK ) != 0 )\r
-                       {\r
-                               last_err_msg = "Receive buffer not available";\r
-                               emacps_recv_handler(arg);\r
-                       }\r
-                       break;\r
-               case XEMACPS_SEND:\r
-                       if( ( ErrorWord & XEMACPS_TXSR_HRESPNOK_MASK ) != 0 )\r
-                       {\r
-                               last_err_msg = "Transmit DMA error";\r
-                               xNetworkInterfaceInitialise( );\r
-                       }\r
-                       if( ( ErrorWord & XEMACPS_TXSR_URUN_MASK ) != 0 )\r
-                       {\r
-                               last_err_msg = "Transmit under run";\r
-                               HandleTxErrors( xemacpsif );\r
-                       }\r
-                       if( ( ErrorWord & XEMACPS_TXSR_BUFEXH_MASK ) != 0 )\r
-                       {\r
-                               last_err_msg = "Transmit buffer exhausted";\r
-                               HandleTxErrors( xemacpsif );\r
-                       }\r
-                       if( ( ErrorWord & XEMACPS_TXSR_RXOVR_MASK ) != 0 )\r
-                       {\r
-                               last_err_msg = "Transmit retry excessed limits";\r
-                               HandleTxErrors( xemacpsif );\r
-                       }\r
-                       if( ( ErrorWord & XEMACPS_TXSR_FRAMERX_MASK ) != 0 )\r
-                       {\r
-                               last_err_msg = "Transmit collision";\r
-                               emacps_check_tx( xemacpsif );\r
-                       }\r
-                       break;\r
-               }\r
-       }\r
-       // Break on this statement and inspect error_msg if you like\r
-       if( last_err_msg != NULL )\r
-       {\r
-               error_msg_count++;\r
-               FreeRTOS_printf( ( "emacps_handle_error: %s\n", last_err_msg ) );\r
-       }\r
-}\r
-\r
-extern XEmacPs_Config mac_config;\r
-\r
-void HandleTxErrors(xemacpsif_s *xemacpsif)\r
-{\r
-       u32 netctrlreg;\r
-\r
-       //taskENTER_CRITICAL()\r
-       {\r
-               netctrlreg = XEmacPs_ReadReg(xemacpsif->emacps.Config.BaseAddress,\r
-                                                                                                       XEMACPS_NWCTRL_OFFSET);\r
-               netctrlreg = netctrlreg & (~XEMACPS_NWCTRL_TXEN_MASK);\r
-               XEmacPs_WriteReg(xemacpsif->emacps.Config.BaseAddress,\r
-                                                                               XEMACPS_NWCTRL_OFFSET, netctrlreg);\r
-\r
-               clean_dma_txdescs( xemacpsif );\r
-               netctrlreg = XEmacPs_ReadReg(xemacpsif->emacps.Config.BaseAddress,\r
-                                                                                                               XEMACPS_NWCTRL_OFFSET);\r
-               netctrlreg = netctrlreg | (XEMACPS_NWCTRL_TXEN_MASK);\r
-               XEmacPs_WriteReg(xemacpsif->emacps.Config.BaseAddress,\r
-                                                                                       XEMACPS_NWCTRL_OFFSET, netctrlreg);\r
-       }\r
-       //taskEXIT_CRITICAL( );\r
-}\r
+/*
+ * Copyright (c) 2010-2013 Xilinx, Inc.  All rights reserved.
+ *
+ * Xilinx, Inc.
+ * XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" AS A
+ * COURTESY TO YOU.  BY PROVIDING THIS DESIGN, CODE, OR INFORMATION AS
+ * ONE POSSIBLE   IMPLEMENTATION OF THIS FEATURE, APPLICATION OR
+ * STANDARD, XILINX IS MAKING NO REPRESENTATION THAT THIS IMPLEMENTATION
+ * IS FREE FROM ANY CLAIMS OF INFRINGEMENT, AND YOU ARE RESPONSIBLE
+ * FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE FOR YOUR IMPLEMENTATION.
+ * XILINX EXPRESSLY DISCLAIMS ANY WARRANTY WHATSOEVER WITH RESPECT TO
+ * THE ADEQUACY OF THE IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO
+ * ANY WARRANTIES OR REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE
+ * FROM CLAIMS OF INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+
+/* Standard includes. */
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "Zynq/x_emacpsif.h"
+
+/* FreeRTOS includes. */
+#include "FreeRTOS.h"
+#include "task.h"
+#include "queue.h"
+
+///* FreeRTOS+TCP includes. */
+/* FreeRTOS+TCP includes. */
+#include "FreeRTOS_IP.h"
+#include "FreeRTOS_Sockets.h"
+#include "FreeRTOS_IP_Private.h"
+#include "NetworkBufferManagement.h"
+
+extern TaskHandle_t xEMACTaskHandle;
+
+/*** IMPORTANT: Define PEEP in xemacpsif.h and sys_arch_raw.c
+ *** to run it on a PEEP board
+ ***/
+
+unsigned int link_speed = 100;
+
+void setup_isr( xemacpsif_s *xemacpsif )
+{
+       /*
+        * Setup callbacks
+        */
+       XEmacPs_SetHandler(&xemacpsif->emacps, XEMACPS_HANDLER_DMASEND,
+               (void *) emacps_send_handler,
+               (void *) xemacpsif);
+
+       XEmacPs_SetHandler(&xemacpsif->emacps, XEMACPS_HANDLER_DMARECV,
+               (void *) emacps_recv_handler,
+               (void *) xemacpsif);
+
+       XEmacPs_SetHandler(&xemacpsif->emacps, XEMACPS_HANDLER_ERROR,
+               (void *) emacps_error_handler,
+               (void *) xemacpsif);
+}
+
+void start_emacps (xemacpsif_s *xemacps)
+{
+       /* start the temac */
+       XEmacPs_Start(&xemacps->emacps);
+}
+
+extern struct xtopology_t xXTopology;
+
+volatile int error_msg_count = 0;
+volatile const char *last_err_msg = "";
+
+struct xERROR_MSG {
+       void *arg;
+       u8 Direction;
+       u32 ErrorWord;
+};
+
+static struct xERROR_MSG xErrorList[ 8 ];
+static BaseType_t xErrorHead, xErrorTail;
+
+void emacps_error_handler(void *arg, u8 Direction, u32 ErrorWord)
+{
+       BaseType_t xHigherPriorityTaskWoken = pdFALSE;
+       xemacpsif_s *xemacpsif;
+       BaseType_t xNextHead = xErrorHead;
+
+       xemacpsif = (xemacpsif_s *)(arg);
+
+       if( ( Direction != XEMACPS_SEND ) || (ErrorWord != XEMACPS_TXSR_USEDREAD_MASK ) )
+       {
+               if( ++xNextHead == ( sizeof( xErrorList ) / sizeof( xErrorList[ 0 ] ) ) )
+                       xNextHead = 0;
+               if( xNextHead != xErrorTail )
+               {
+
+                       xErrorList[ xErrorHead ].arg = arg;
+                       xErrorList[ xErrorHead ].Direction = Direction;
+                       xErrorList[ xErrorHead ].ErrorWord = ErrorWord;
+
+                       xErrorHead = xNextHead;
+
+                       xemacpsif = (xemacpsif_s *)(arg);
+                       xemacpsif->isr_events |= EMAC_IF_ERR_EVENT;
+               }
+
+               if( xEMACTaskHandle != NULL )
+               {
+                       vTaskNotifyGiveFromISR( xEMACTaskHandle, &xHigherPriorityTaskWoken );
+               }
+
+       }
+
+       portYIELD_FROM_ISR( xHigherPriorityTaskWoken );
+}
+
+static void emacps_handle_error(void *arg, u8 Direction, u32 ErrorWord);
+
+int emacps_check_errors( xemacpsif_s *xemacps )
+{
+int xResult;
+
+       ( void ) xemacps;
+
+       if( xErrorHead == xErrorTail )
+       {
+               xResult = 0;
+       }
+       else
+       {
+               xResult = 1;
+               emacps_handle_error(
+                       xErrorList[ xErrorTail ].arg,
+                       xErrorList[ xErrorTail ].Direction,
+                       xErrorList[ xErrorTail ].ErrorWord );
+       }
+
+       return xResult;
+}
+
+BaseType_t xNetworkInterfaceInitialise( void );
+
+static void emacps_handle_error(void *arg, u8 Direction, u32 ErrorWord)
+{
+       xemacpsif_s   *xemacpsif;
+       struct xtopology_t *xtopologyp;
+       XEmacPs *xemacps;
+
+       xemacpsif = (xemacpsif_s *)(arg);
+
+       xtopologyp = &xXTopology;
+
+       xemacps = &xemacpsif->emacps;
+
+       /* Do not appear to be used. */
+       ( void ) xemacps;
+       ( void ) xtopologyp;
+
+       last_err_msg = NULL;
+
+       if( ErrorWord != 0 )
+       {
+               switch (Direction) {
+               case XEMACPS_RECV:
+                       if( ( ErrorWord & XEMACPS_RXSR_HRESPNOK_MASK ) != 0 )
+                       {
+                               last_err_msg = "Receive DMA error";
+                               xNetworkInterfaceInitialise( );
+                       }
+                       if( ( ErrorWord & XEMACPS_RXSR_RXOVR_MASK ) != 0 )
+                       {
+                               last_err_msg = "Receive over run";
+                               emacps_recv_handler(arg);
+                       }
+                       if( ( ErrorWord & XEMACPS_RXSR_BUFFNA_MASK ) != 0 )
+                       {
+                               last_err_msg = "Receive buffer not available";
+                               emacps_recv_handler(arg);
+                       }
+                       break;
+               case XEMACPS_SEND:
+                       if( ( ErrorWord & XEMACPS_TXSR_HRESPNOK_MASK ) != 0 )
+                       {
+                               last_err_msg = "Transmit DMA error";
+                               xNetworkInterfaceInitialise( );
+                       }
+                       if( ( ErrorWord & XEMACPS_TXSR_URUN_MASK ) != 0 )
+                       {
+                               last_err_msg = "Transmit under run";
+                               HandleTxErrors( xemacpsif );
+                       }
+                       if( ( ErrorWord & XEMACPS_TXSR_BUFEXH_MASK ) != 0 )
+                       {
+                               last_err_msg = "Transmit buffer exhausted";
+                               HandleTxErrors( xemacpsif );
+                       }
+                       if( ( ErrorWord & XEMACPS_TXSR_RXOVR_MASK ) != 0 )
+                       {
+                               last_err_msg = "Transmit retry excessed limits";
+                               HandleTxErrors( xemacpsif );
+                       }
+                       if( ( ErrorWord & XEMACPS_TXSR_FRAMERX_MASK ) != 0 )
+                       {
+                               last_err_msg = "Transmit collision";
+                               emacps_check_tx( xemacpsif );
+                       }
+                       break;
+               }
+       }
+       // Break on this statement and inspect error_msg if you like
+       if( last_err_msg != NULL )
+       {
+               error_msg_count++;
+               FreeRTOS_printf( ( "emacps_handle_error: %s\n", last_err_msg ) );
+       }
+}
+
+extern XEmacPs_Config mac_config;
+
+void HandleTxErrors(xemacpsif_s *xemacpsif)
+{
+       u32 netctrlreg;
+
+       //taskENTER_CRITICAL()
+       {
+               netctrlreg = XEmacPs_ReadReg(xemacpsif->emacps.Config.BaseAddress,
+                                                                                                       XEMACPS_NWCTRL_OFFSET);
+               netctrlreg = netctrlreg & (~XEMACPS_NWCTRL_TXEN_MASK);
+               XEmacPs_WriteReg(xemacpsif->emacps.Config.BaseAddress,
+                                                                               XEMACPS_NWCTRL_OFFSET, netctrlreg);
+
+               clean_dma_txdescs( xemacpsif );
+               netctrlreg = XEmacPs_ReadReg(xemacpsif->emacps.Config.BaseAddress,
+                                                                                                               XEMACPS_NWCTRL_OFFSET);
+               netctrlreg = netctrlreg | (XEMACPS_NWCTRL_TXEN_MASK);
+               XEmacPs_WriteReg(xemacpsif->emacps.Config.BaseAddress,
+                                                                                       XEMACPS_NWCTRL_OFFSET, netctrlreg);
+       }
+       //taskEXIT_CRITICAL( );
+}
index f3c424a4b5497a2bae86a91f8bee0e3292319edf..7b0e4fd3647a357643707edbf47ffbfe0a11036c 100644 (file)
@@ -1,39 +1,39 @@
-/*\r
- * Copyright (c) 2010-2013 Xilinx, Inc.  All rights reserved.\r
- *\r
- * Xilinx, Inc.\r
- * XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" AS A\r
- * COURTESY TO YOU.  BY PROVIDING THIS DESIGN, CODE, OR INFORMATION AS\r
- * ONE POSSIBLE   IMPLEMENTATION OF THIS FEATURE, APPLICATION OR\r
- * STANDARD, XILINX IS MAKING NO REPRESENTATION THAT THIS IMPLEMENTATION\r
- * IS FREE FROM ANY CLAIMS OF INFRINGEMENT, AND YOU ARE RESPONSIBLE\r
- * FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE FOR YOUR IMPLEMENTATION.\r
- * XILINX EXPRESSLY DISCLAIMS ANY WARRANTY WHATSOEVER WITH RESPECT TO\r
- * THE ADEQUACY OF THE IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO\r
- * ANY WARRANTIES OR REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE\r
- * FROM CLAIMS OF INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY\r
- * AND FITNESS FOR A PARTICULAR PURPOSE.\r
- *\r
- */\r
-\r
-#ifndef __XEMACPSIF_HW_H_\r
-#define __XEMACPSIF_HW_H_\r
-\r
-#include "Zynq/x_emacpsif.h"\r
-//#include "lwip/netif.h"\r
-\r
-#ifdef __cplusplus\r
-extern "C" {\r
-#endif\r
-\r
-XEmacPs_Config * lookup_config(unsigned mac_base);\r
-\r
-//void init_emacps(xemacpsif_s *xemacpsif, struct netif *netif);\r
-\r
-int emacps_check_errors( xemacpsif_s *xemacps );\r
-\r
-#ifdef __cplusplus\r
-}\r
-#endif\r
-\r
-#endif\r
+/*
+ * Copyright (c) 2010-2013 Xilinx, Inc.  All rights reserved.
+ *
+ * Xilinx, Inc.
+ * XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" AS A
+ * COURTESY TO YOU.  BY PROVIDING THIS DESIGN, CODE, OR INFORMATION AS
+ * ONE POSSIBLE   IMPLEMENTATION OF THIS FEATURE, APPLICATION OR
+ * STANDARD, XILINX IS MAKING NO REPRESENTATION THAT THIS IMPLEMENTATION
+ * IS FREE FROM ANY CLAIMS OF INFRINGEMENT, AND YOU ARE RESPONSIBLE
+ * FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE FOR YOUR IMPLEMENTATION.
+ * XILINX EXPRESSLY DISCLAIMS ANY WARRANTY WHATSOEVER WITH RESPECT TO
+ * THE ADEQUACY OF THE IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO
+ * ANY WARRANTIES OR REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE
+ * FROM CLAIMS OF INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __XEMACPSIF_HW_H_
+#define __XEMACPSIF_HW_H_
+
+#include "Zynq/x_emacpsif.h"
+//#include "lwip/netif.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+XEmacPs_Config * lookup_config(unsigned mac_base);
+
+//void init_emacps(xemacpsif_s *xemacpsif, struct netif *netif);
+
+int emacps_check_errors( xemacpsif_s *xemacps );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
index 12b8c60c8b9da9b4ccf0fe20cb0ef6fc31352b14..742ff8b96665c9797e7fc4d6625c0728d48d7e30 100644 (file)
-/*\r
- * Copyright (c) 2007-2008, Advanced Micro Devices, Inc.\r
- *               All rights reserved.\r
- *\r
- * Redistribution and use in source and binary forms, with or without\r
- * modification, are permitted provided that the following conditions\r
- * are met:\r
- *\r
- *    * Redistributions of source code must retain the above copyright\r
- *      notice, this list of conditions and the following disclaimer.\r
- *    * Redistributions in binary form must reproduce the above copyright\r
- *      notice, this list of conditions and the following disclaimer in\r
- *      the documentation and/or other materials provided with the\r
- *      distribution.\r
- *    * Neither the name of Advanced Micro Devices, Inc. nor the names\r
- *      of its contributors may be used to endorse or promote products\r
- *      derived from this software without specific prior written\r
- *      permission.\r
- *\r
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
- */\r
-\r
-/*\r
- * Some portions copyright (c) 2010-2013 Xilinx, Inc.  All rights reserved.\r
- *\r
- * Xilinx, Inc.\r
- * XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" AS A\r
- * COURTESY TO YOU.  BY PROVIDING THIS DESIGN, CODE, OR INFORMATION AS\r
- * ONE POSSIBLE   IMPLEMENTATION OF THIS FEATURE, APPLICATION OR\r
- * STANDARD, XILINX IS MAKING NO REPRESENTATION THAT THIS IMPLEMENTATION\r
- * IS FREE FROM ANY CLAIMS OF INFRINGEMENT, AND YOU ARE RESPONSIBLE\r
- * FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE FOR YOUR IMPLEMENTATION.\r
- * XILINX EXPRESSLY DISCLAIMS ANY WARRANTY WHATSOEVER WITH RESPECT TO\r
- * THE ADEQUACY OF THE IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO\r
- * ANY WARRANTIES OR REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE\r
- * FROM CLAIMS OF INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY\r
- * AND FITNESS FOR A PARTICULAR PURPOSE.\r
- *\r
- */\r
-\r
-/* Standard includes. */\r
-#include <stdint.h>\r
-#include <stdio.h>\r
-#include <stdlib.h>\r
-\r
-#include "Zynq/x_emacpsif.h"\r
-//#include "lwipopts.h"\r
-#include "xparameters_ps.h"\r
-#include "xparameters.h"\r
-\r
-/* FreeRTOS includes. */\r
-#include "FreeRTOS.h"\r
-#include "task.h"\r
-#include "queue.h"\r
-#include "semphr.h"\r
-\r
-///* FreeRTOS+TCP includes. */\r
-/* FreeRTOS+TCP includes. */\r
-#include "FreeRTOS_IP.h"\r
-#include "FreeRTOS_Sockets.h"\r
-#include "FreeRTOS_IP_Private.h"\r
-#include "NetworkBufferManagement.h"\r
-\r
-int phy_detected = 0;\r
-\r
-/*** IMPORTANT: Define PEEP in xemacpsif.h and sys_arch_raw.c\r
- *** to run it on a PEEP board\r
- ***/\r
-\r
-/* Advertisement control register. */\r
-#define ADVERTISE_10HALF               0x0020  /* Try for 10mbps half-duplex  */\r
-#define ADVERTISE_10FULL               0x0040  /* Try for 10mbps full-duplex  */\r
-#define ADVERTISE_100HALF              0x0080  /* Try for 100mbps half-duplex */\r
-#define ADVERTISE_100FULL              0x0100  /* Try for 100mbps full-duplex */\r
-\r
-#define ADVERTISE_100_AND_10   (ADVERTISE_10FULL | ADVERTISE_100FULL | \\r
-                                                               ADVERTISE_10HALF | ADVERTISE_100HALF)\r
-#define ADVERTISE_100                  (ADVERTISE_100FULL | ADVERTISE_100HALF)\r
-#define ADVERTISE_10                   (ADVERTISE_10FULL | ADVERTISE_10HALF)\r
-\r
-#define ADVERTISE_1000                 0x0300\r
-\r
-\r
-//#define PHY_REG_00_BMCR            0x00 // Basic mode control register\r
-//#define PHY_REG_01_BMSR            0x01 // Basic mode status register\r
-//#define PHY_REG_02_PHYSID1         0x02 // PHYS ID 1\r
-//#define PHY_REG_03_PHYSID2         0x03 // PHYS ID 2\r
-//#define PHY_REG_04_ADVERTISE       0x04 // Advertisement control reg\r
-\r
-#define IEEE_CONTROL_REG_OFFSET                                0\r
-#define IEEE_STATUS_REG_OFFSET                         1\r
-#define IEEE_AUTONEGO_ADVERTISE_REG                    4\r
-#define IEEE_PARTNER_ABILITIES_1_REG_OFFSET    5\r
-#define IEEE_1000_ADVERTISE_REG_OFFSET         9\r
-#define IEEE_PARTNER_ABILITIES_3_REG_OFFSET    10\r
-#define IEEE_COPPER_SPECIFIC_CONTROL_REG       16\r
-#define IEEE_SPECIFIC_STATUS_REG                       17\r
-#define IEEE_COPPER_SPECIFIC_STATUS_REG_2      19\r
-#define IEEE_CONTROL_REG_MAC                           21\r
-#define IEEE_PAGE_ADDRESS_REGISTER                     22\r
-\r
-\r
-#define IEEE_CTRL_1GBPS_LINKSPEED_MASK         0x2040\r
-#define IEEE_CTRL_LINKSPEED_MASK                       0x0040\r
-#define IEEE_CTRL_LINKSPEED_1000M                      0x0040\r
-#define IEEE_CTRL_LINKSPEED_100M                       0x2000\r
-#define IEEE_CTRL_LINKSPEED_10M                                0x0000\r
-#define IEEE_CTRL_RESET_MASK                           0x8000\r
-#define IEEE_CTRL_AUTONEGOTIATE_ENABLE         0x1000\r
-#if XPAR_GIGE_PCS_PMA_CORE_PRESENT == 1\r
-#define IEEE_CTRL_RESET                         0x9140\r
-#define IEEE_CTRL_ISOLATE_DISABLE               0xFBFF\r
-#endif\r
-#define IEEE_STAT_AUTONEGOTIATE_CAPABLE                0x0008\r
-#define IEEE_STAT_AUTONEGOTIATE_COMPLETE       0x0020\r
-#define IEEE_STAT_AUTONEGOTIATE_RESTART                0x0200\r
-#define IEEE_STAT_1GBPS_EXTENSIONS                     0x0100\r
-#define IEEE_AN1_ABILITY_MASK                          0x1FE0\r
-#define IEEE_AN3_ABILITY_MASK_1GBPS                    0x0C00\r
-#define IEEE_AN1_ABILITY_MASK_100MBPS          0x0380\r
-#define IEEE_AN1_ABILITY_MASK_10MBPS           0x0060\r
-#define IEEE_RGMII_TXRX_CLOCK_DELAYED_MASK     0x0030\r
-\r
-#define IEEE_ASYMMETRIC_PAUSE_MASK                     0x0800\r
-#define IEEE_PAUSE_MASK                                                0x0400\r
-#define IEEE_AUTONEG_ERROR_MASK                                0x8000\r
-\r
-#define PHY_DETECT_REG  1\r
-#define PHY_DETECT_MASK 0x1808\r
-\r
-#define XEMACPS_GMII2RGMII_SPEED1000_FD                0x140\r
-#define XEMACPS_GMII2RGMII_SPEED100_FD         0x2100\r
-#define XEMACPS_GMII2RGMII_SPEED10_FD          0x100\r
-#define XEMACPS_GMII2RGMII_REG_NUM                     0x10\r
-\r
-/* Frequency setting */\r
-#define SLCR_LOCK_ADDR                 (XPS_SYS_CTRL_BASEADDR + 0x4)\r
-#define SLCR_UNLOCK_ADDR               (XPS_SYS_CTRL_BASEADDR + 0x8)\r
-#define SLCR_GEM0_CLK_CTRL_ADDR        (XPS_SYS_CTRL_BASEADDR + 0x140)\r
-#define SLCR_GEM1_CLK_CTRL_ADDR        (XPS_SYS_CTRL_BASEADDR + 0x144)\r
-#ifdef PEEP\r
-#define SLCR_GEM_10M_CLK_CTRL_VALUE            0x00103031\r
-#define SLCR_GEM_100M_CLK_CTRL_VALUE   0x00103001\r
-#define SLCR_GEM_1G_CLK_CTRL_VALUE             0x00103011\r
-#endif\r
-#define SLCR_LOCK_KEY_VALUE                    0x767B\r
-#define SLCR_UNLOCK_KEY_VALUE                  0xDF0D\r
-#define SLCR_ADDR_GEM_RST_CTRL                 (XPS_SYS_CTRL_BASEADDR + 0x214)\r
-#define EMACPS_SLCR_DIV_MASK                   0xFC0FC0FF\r
-\r
-#define EMAC0_BASE_ADDRESS                             0xE000B000\r
-#define EMAC1_BASE_ADDRESS                             0xE000C000\r
-\r
-static int detect_phy(XEmacPs *xemacpsp)\r
-{\r
-       u16 phy_reg;\r
-       u32 phy_addr;\r
-\r
-       for (phy_addr = 31; phy_addr > 0; phy_addr--) {\r
-               XEmacPs_PhyRead(xemacpsp, phy_addr, PHY_DETECT_REG,\r
-                                                       &phy_reg);\r
-\r
-               if ((phy_reg != 0xFFFF) &&\r
-                       ((phy_reg & PHY_DETECT_MASK) == PHY_DETECT_MASK)) {\r
-                       /* Found a valid PHY address */\r
-                       FreeRTOS_printf( ("XEmacPs detect_phy: PHY detected at address %d.\r\n",\r
-                                                                                                                                       phy_addr));\r
-                       FreeRTOS_printf( ("XEmacPs detect_phy: PHY detected.\n" ) );\r
-                       phy_detected = phy_addr;\r
-                       return phy_addr;\r
-               }\r
-       }\r
-\r
-       FreeRTOS_printf( ("XEmacPs detect_phy: No PHY detected.  Assuming a PHY at address 0\n" ) );\r
-\r
-        /* default to zero */\r
-       return 0;\r
-}\r
-\r
-#ifdef PEEP\r
-unsigned get_IEEE_phy_speed(XEmacPs *xemacpsp)\r
-{\r
-\r
-       u16 control;\r
-       u16 status;\r
-       u16 partner_capabilities;\r
-       u16 partner_capabilities_1000;\r
-       u16 phylinkspeed;\r
-       u32 phy_addr = detect_phy(xemacpsp);\r
-\r
-       XEmacPs_PhyWrite(xemacpsp, phy_addr, IEEE_1000_ADVERTISE_REG_OFFSET,\r
-                                                                                                                       ADVERTISE_1000);\r
-       /* Advertise PHY speed of 100 and 10 Mbps */\r
-       XEmacPs_PhyWrite(xemacpsp, phy_addr, IEEE_AUTONEGO_ADVERTISE_REG,\r
-                                                                                                       ADVERTISE_100_AND_10);\r
-\r
-       XEmacPs_PhyRead(xemacpsp, phy_addr, IEEE_CONTROL_REG_OFFSET,\r
-                                                                                                                               &control);\r
-       control |= (IEEE_CTRL_AUTONEGOTIATE_ENABLE |\r
-                                       IEEE_STAT_AUTONEGOTIATE_RESTART);\r
-\r
-       XEmacPs_PhyWrite(xemacpsp, phy_addr, IEEE_CONTROL_REG_OFFSET, control);\r
-\r
-       /* Read PHY control and status registers is successful. */\r
-       XEmacPs_PhyRead(xemacpsp, phy_addr, IEEE_CONTROL_REG_OFFSET, &control);\r
-       XEmacPs_PhyRead(xemacpsp, phy_addr, IEEE_STATUS_REG_OFFSET, &status);\r
-\r
-       if ((control & IEEE_CTRL_AUTONEGOTIATE_ENABLE) && (status &\r
-                                       IEEE_STAT_AUTONEGOTIATE_CAPABLE)) {\r
-\r
-               while ( !(status & IEEE_STAT_AUTONEGOTIATE_COMPLETE) ) {\r
-                       XEmacPs_PhyRead(xemacpsp, phy_addr, IEEE_STATUS_REG_OFFSET,\r
-                                                                                                                               &status);\r
-               }\r
-\r
-               XEmacPs_PhyRead(xemacpsp, phy_addr, IEEE_PARTNER_ABILITIES_1_REG_OFFSET,\r
-                                                                                                                       &partner_capabilities);\r
-\r
-               if (status & IEEE_STAT_1GBPS_EXTENSIONS) {\r
-                       XEmacPs_PhyRead(xemacpsp, phy_addr, IEEE_PARTNER_ABILITIES_3_REG_OFFSET,\r
-                                                                                                               &partner_capabilities_1000);\r
-                       if (partner_capabilities_1000 & IEEE_AN3_ABILITY_MASK_1GBPS)\r
-                               return 1000;\r
-               }\r
-\r
-               if (partner_capabilities & IEEE_AN1_ABILITY_MASK_100MBPS)\r
-                       return 100;\r
-               if (partner_capabilities & IEEE_AN1_ABILITY_MASK_10MBPS)\r
-                       return 10;\r
-\r
-               xil_printf("%s: unknown PHY link speed, setting TEMAC speed to be 10 Mbps\r\n",\r
-                               __FUNCTION__);\r
-               return 10;\r
-\r
-       } else {\r
-\r
-               /* Update TEMAC speed accordingly */\r
-               if (status & IEEE_STAT_1GBPS_EXTENSIONS) {\r
-                       /* Get commanded link speed */\r
-                       phylinkspeed = control & IEEE_CTRL_1GBPS_LINKSPEED_MASK;\r
-\r
-                       switch (phylinkspeed) {\r
-                               case (IEEE_CTRL_LINKSPEED_1000M):\r
-                                       return 1000;\r
-                               case (IEEE_CTRL_LINKSPEED_100M):\r
-                                       return 100;\r
-                               case (IEEE_CTRL_LINKSPEED_10M):\r
-                                       return 10;\r
-                               default:\r
-                                       xil_printf("%s: unknown PHY link speed (%d), setting TEMAC speed to be 10 Mbps\r\n",\r
-                                                       __FUNCTION__, phylinkspeed);\r
-                                       return 10;\r
-                       }\r
-\r
-               } else {\r
-\r
-                       return (control & IEEE_CTRL_LINKSPEED_MASK) ? 100 : 10;\r
-\r
-               }\r
-       }\r
-}\r
-\r
-#else /* Zynq */\r
-unsigned get_IEEE_phy_speed(XEmacPs *xemacpsp)\r
-{\r
-       u16 temp;\r
-       u16 control;\r
-       u16 status;\r
-       u16 partner_capabilities;\r
-#if XPAR_GIGE_PCS_PMA_CORE_PRESENT == 1\r
-       u32 phy_addr = XPAR_PCSPMA_SGMII_PHYADDR;\r
-#else\r
-       u32 phy_addr = detect_phy(xemacpsp);\r
-#endif\r
-       xil_printf("Start PHY autonegotiation \r\n");\r
-\r
-#if XPAR_GIGE_PCS_PMA_CORE_PRESENT == 1\r
-#else\r
-       XEmacPs_PhyWrite(xemacpsp,phy_addr, IEEE_PAGE_ADDRESS_REGISTER, 2);\r
-       XEmacPs_PhyRead(xemacpsp, phy_addr, IEEE_CONTROL_REG_MAC, &control);\r
-       control |= IEEE_RGMII_TXRX_CLOCK_DELAYED_MASK;\r
-       XEmacPs_PhyWrite(xemacpsp, phy_addr, IEEE_CONTROL_REG_MAC, control);\r
-\r
-       XEmacPs_PhyWrite(xemacpsp, phy_addr, IEEE_PAGE_ADDRESS_REGISTER, 0);\r
-\r
-       XEmacPs_PhyRead(xemacpsp, phy_addr, IEEE_AUTONEGO_ADVERTISE_REG, &control);\r
-       control |= IEEE_ASYMMETRIC_PAUSE_MASK;\r
-       control |= IEEE_PAUSE_MASK;\r
-       control |= ADVERTISE_100;\r
-       control |= ADVERTISE_10;\r
-       XEmacPs_PhyWrite(xemacpsp, phy_addr, IEEE_AUTONEGO_ADVERTISE_REG, control);\r
-\r
-       XEmacPs_PhyRead(xemacpsp, phy_addr, IEEE_1000_ADVERTISE_REG_OFFSET,\r
-                                                                                                                                       &control);\r
-       control |= ADVERTISE_1000;\r
-       XEmacPs_PhyWrite(xemacpsp, phy_addr, IEEE_1000_ADVERTISE_REG_OFFSET,\r
-                                                                                                                                       control);\r
-\r
-       XEmacPs_PhyWrite(xemacpsp, phy_addr, IEEE_PAGE_ADDRESS_REGISTER, 0);\r
-       XEmacPs_PhyRead(xemacpsp, phy_addr, IEEE_COPPER_SPECIFIC_CONTROL_REG,\r
-                                                                                                                               &control);\r
-       control |= (7 << 12);   /* max number of gigabit attempts */\r
-       control |= (1 << 11);   /* enable downshift */\r
-       XEmacPs_PhyWrite(xemacpsp, phy_addr, IEEE_COPPER_SPECIFIC_CONTROL_REG,\r
-                                                                                                                               control);\r
-#endif\r
-       XEmacPs_PhyRead(xemacpsp, phy_addr, IEEE_CONTROL_REG_OFFSET, &control);\r
-       control |= IEEE_CTRL_AUTONEGOTIATE_ENABLE;\r
-       control |= IEEE_STAT_AUTONEGOTIATE_RESTART;\r
-#if XPAR_GIGE_PCS_PMA_CORE_PRESENT == 1\r
-    control &= IEEE_CTRL_ISOLATE_DISABLE;\r
-#endif\r
-\r
-       XEmacPs_PhyWrite(xemacpsp, phy_addr, IEEE_CONTROL_REG_OFFSET, control);\r
-\r
-\r
-#if XPAR_GIGE_PCS_PMA_CORE_PRESENT == 1\r
-#else\r
-       XEmacPs_PhyRead(xemacpsp, phy_addr, IEEE_CONTROL_REG_OFFSET, &control);\r
-       control |= IEEE_CTRL_RESET_MASK;\r
-       XEmacPs_PhyWrite(xemacpsp, phy_addr, IEEE_CONTROL_REG_OFFSET, control);\r
-\r
-       while (1) {\r
-               XEmacPs_PhyRead(xemacpsp, phy_addr, IEEE_CONTROL_REG_OFFSET, &control);\r
-               if (control & IEEE_CTRL_RESET_MASK)\r
-                       continue;\r
-               else\r
-                       break;\r
-       }\r
-#endif\r
-       xil_printf("Waiting for PHY to complete autonegotiation.\r\n");\r
-\r
-       XEmacPs_PhyRead(xemacpsp, phy_addr, IEEE_STATUS_REG_OFFSET, &status);\r
-       while ( !(status & IEEE_STAT_AUTONEGOTIATE_COMPLETE) ) {\r
-               sleep(1);\r
-#if XPAR_GIGE_PCS_PMA_CORE_PRESENT == 1\r
-#else\r
-               XEmacPs_PhyRead(xemacpsp, phy_addr, IEEE_COPPER_SPECIFIC_STATUS_REG_2,\r
-                                                                                                                                       &temp);\r
-               if (temp & IEEE_AUTONEG_ERROR_MASK) {\r
-                       xil_printf("Auto negotiation error \r\n");\r
-               }\r
-#endif\r
-               XEmacPs_PhyRead(xemacpsp, phy_addr, IEEE_STATUS_REG_OFFSET,\r
-                                                                                                                               &status);\r
-               }\r
-\r
-       xil_printf("autonegotiation complete \r\n");\r
-\r
-#if XPAR_GIGE_PCS_PMA_CORE_PRESENT == 1\r
-#else\r
-       XEmacPs_PhyRead(xemacpsp, phy_addr, IEEE_SPECIFIC_STATUS_REG, &partner_capabilities);\r
-#endif\r
-\r
-#if XPAR_GIGE_PCS_PMA_CORE_PRESENT == 1\r
-       xil_printf("Waiting for Link to be up; Polling for SGMII core Reg \r\n");\r
-       XEmacPs_PhyRead(xemacpsp, phy_addr, 5, &temp);\r
-       while(!(temp & 0x8000)) {\r
-               XEmacPs_PhyRead(xemacpsp, phy_addr, 5, &temp);\r
-       }\r
-       if((temp & 0x0C00) == 0x0800) {\r
-               XEmacPs_PhyRead(xemacpsp, phy_addr, 0, &temp);\r
-               return 1000;\r
-       }\r
-       else if((temp & 0x0C00) == 0x0400) {\r
-               XEmacPs_PhyRead(xemacpsp, phy_addr, 0, &temp);\r
-               return 100;\r
-       }\r
-       else if((temp & 0x0C00) == 0x0000) {\r
-               XEmacPs_PhyRead(xemacpsp, phy_addr, 0, &temp);\r
-               return 10;\r
-       } else {\r
-               xil_printf("get_IEEE_phy_speed(): Invalid speed bit value, Deafulting to Speed = 10 Mbps\r\n");\r
-               XEmacPs_PhyRead(xemacpsp, phy_addr, 0, &temp);\r
-               XEmacPs_PhyWrite(xemacpsp, phy_addr, 0, 0x0100);\r
-               return 10;\r
-       }\r
-#else\r
-       if ( ((partner_capabilities >> 14) & 3) == 2)/* 1000Mbps */\r
-               return 1000;\r
-       else if ( ((partner_capabilities >> 14) & 3) == 1)/* 100Mbps */\r
-               return 100;\r
-       else                                    /* 10Mbps */\r
-               return 10;\r
-#endif\r
-}\r
-#endif\r
-\r
-unsigned configure_IEEE_phy_speed(XEmacPs *xemacpsp, unsigned speed)\r
-{\r
-       u16 control;\r
-       u32 phy_addr = detect_phy(xemacpsp);\r
-\r
-       XEmacPs_PhyWrite(xemacpsp,phy_addr, IEEE_PAGE_ADDRESS_REGISTER, 2);\r
-       XEmacPs_PhyRead(xemacpsp, phy_addr, IEEE_CONTROL_REG_MAC, &control);\r
-       control |= IEEE_RGMII_TXRX_CLOCK_DELAYED_MASK;\r
-       XEmacPs_PhyWrite(xemacpsp, phy_addr, IEEE_CONTROL_REG_MAC, control);\r
-\r
-       XEmacPs_PhyWrite(xemacpsp, phy_addr, IEEE_PAGE_ADDRESS_REGISTER, 0);\r
-\r
-       XEmacPs_PhyRead(xemacpsp, phy_addr, IEEE_AUTONEGO_ADVERTISE_REG, &control);\r
-       control |= IEEE_ASYMMETRIC_PAUSE_MASK;\r
-       control |= IEEE_PAUSE_MASK;\r
-       XEmacPs_PhyWrite(xemacpsp, phy_addr, IEEE_AUTONEGO_ADVERTISE_REG, control);\r
-\r
-       XEmacPs_PhyRead(xemacpsp, phy_addr, IEEE_CONTROL_REG_OFFSET, &control);\r
-       control &= ~IEEE_CTRL_LINKSPEED_1000M;\r
-       control &= ~IEEE_CTRL_LINKSPEED_100M;\r
-       control &= ~IEEE_CTRL_LINKSPEED_10M;\r
-\r
-       if (speed == 1000) {\r
-               control |= IEEE_CTRL_LINKSPEED_1000M;\r
-       }\r
-\r
-       else if (speed == 100) {\r
-               control |= IEEE_CTRL_LINKSPEED_100M;\r
-               /* Dont advertise PHY speed of 1000 Mbps */\r
-               XEmacPs_PhyWrite(xemacpsp, phy_addr, IEEE_1000_ADVERTISE_REG_OFFSET, 0);\r
-               /* Dont advertise PHY speed of 10 Mbps */\r
-               XEmacPs_PhyWrite(xemacpsp, phy_addr, IEEE_AUTONEGO_ADVERTISE_REG,\r
-                                                                                                                               ADVERTISE_100);\r
-       }\r
-\r
-       else if (speed == 10) {\r
-               control |= IEEE_CTRL_LINKSPEED_10M;\r
-               /* Dont advertise PHY speed of 1000 Mbps */\r
-               XEmacPs_PhyWrite(xemacpsp, phy_addr, IEEE_1000_ADVERTISE_REG_OFFSET,\r
-                                                                                                                                                       0);\r
-               /* Dont advertise PHY speed of 100 Mbps */\r
-               XEmacPs_PhyWrite(xemacpsp, phy_addr, IEEE_AUTONEGO_ADVERTISE_REG,\r
-                                                                                                                               ADVERTISE_10);\r
-       }\r
-\r
-       XEmacPs_PhyWrite(xemacpsp, phy_addr, IEEE_CONTROL_REG_OFFSET,\r
-                                                                                       control | IEEE_CTRL_RESET_MASK);\r
-       {\r
-               volatile int wait;\r
-               for (wait=0; wait < 100000; wait++);\r
-       }\r
-       return 0;\r
-}\r
-\r
-static void SetUpSLCRDivisors(int mac_baseaddr, int speed)\r
-{\r
-       volatile u32 slcrBaseAddress;\r
-#ifndef PEEP\r
-       u32 SlcrDiv0;\r
-       u32 SlcrDiv1=0;\r
-       u32 SlcrTxClkCntrl;\r
-#endif\r
-\r
-       *(volatile unsigned int *)(SLCR_UNLOCK_ADDR) = SLCR_UNLOCK_KEY_VALUE;\r
-\r
-       if ((unsigned long)mac_baseaddr == EMAC0_BASE_ADDRESS) {\r
-               slcrBaseAddress = SLCR_GEM0_CLK_CTRL_ADDR;\r
-       } else {\r
-               slcrBaseAddress = SLCR_GEM1_CLK_CTRL_ADDR;\r
-       }\r
-#ifdef PEEP\r
-       if (speed == 1000) {\r
-               *(volatile unsigned int *)(slcrBaseAddress) =\r
-                                                                                       SLCR_GEM_1G_CLK_CTRL_VALUE;\r
-       } else if (speed == 100) {\r
-               *(volatile unsigned int *)(slcrBaseAddress) =\r
-                                                                                       SLCR_GEM_100M_CLK_CTRL_VALUE;\r
-       } else {\r
-               *(volatile unsigned int *)(slcrBaseAddress) =\r
-                                                                                       SLCR_GEM_10M_CLK_CTRL_VALUE;\r
-       }\r
-#else\r
-       if (speed == 1000) {\r
-               if ((unsigned long)mac_baseaddr == EMAC0_BASE_ADDRESS) {\r
-#ifdef XPAR_PS7_ETHERNET_0_ENET_SLCR_1000MBPS_DIV0\r
-                       SlcrDiv0 = XPAR_PS7_ETHERNET_0_ENET_SLCR_1000MBPS_DIV0;\r
-                       SlcrDiv1 = XPAR_PS7_ETHERNET_0_ENET_SLCR_1000MBPS_DIV1;\r
-#endif\r
-               } else {\r
-#ifdef XPAR_PS7_ETHERNET_1_ENET_SLCR_1000MBPS_DIV0\r
-                       SlcrDiv0 = XPAR_PS7_ETHERNET_1_ENET_SLCR_1000MBPS_DIV0;\r
-                       SlcrDiv1 = XPAR_PS7_ETHERNET_1_ENET_SLCR_1000MBPS_DIV1;\r
-#endif\r
-               }\r
-       } else if (speed == 100) {\r
-               if ((unsigned long)mac_baseaddr == EMAC0_BASE_ADDRESS) {\r
-#ifdef XPAR_PS7_ETHERNET_0_ENET_SLCR_100MBPS_DIV0\r
-                       SlcrDiv0 = XPAR_PS7_ETHERNET_0_ENET_SLCR_100MBPS_DIV0;\r
-                       SlcrDiv1 = XPAR_PS7_ETHERNET_0_ENET_SLCR_100MBPS_DIV1;\r
-#endif\r
-               } else {\r
-#ifdef XPAR_PS7_ETHERNET_1_ENET_SLCR_100MBPS_DIV0\r
-                       SlcrDiv0 = XPAR_PS7_ETHERNET_1_ENET_SLCR_100MBPS_DIV0;\r
-                       SlcrDiv1 = XPAR_PS7_ETHERNET_1_ENET_SLCR_100MBPS_DIV1;\r
-#endif\r
-               }\r
-       } else {\r
-               if ((unsigned long)mac_baseaddr == EMAC0_BASE_ADDRESS) {\r
-#ifdef XPAR_PS7_ETHERNET_0_ENET_SLCR_10MBPS_DIV0\r
-                       SlcrDiv0 = XPAR_PS7_ETHERNET_0_ENET_SLCR_10MBPS_DIV0;\r
-                       SlcrDiv1 = XPAR_PS7_ETHERNET_0_ENET_SLCR_10MBPS_DIV1;\r
-#endif\r
-               } else {\r
-#ifdef XPAR_PS7_ETHERNET_1_ENET_SLCR_10MBPS_DIV0\r
-                       SlcrDiv0 = XPAR_PS7_ETHERNET_1_ENET_SLCR_10MBPS_DIV0;\r
-                       SlcrDiv1 = XPAR_PS7_ETHERNET_1_ENET_SLCR_10MBPS_DIV1;\r
-#endif\r
-               }\r
-       }\r
-       SlcrTxClkCntrl = *(volatile unsigned int *)(slcrBaseAddress);\r
-       SlcrTxClkCntrl &= EMACPS_SLCR_DIV_MASK;\r
-       SlcrTxClkCntrl |= (SlcrDiv1 << 20);\r
-       SlcrTxClkCntrl |= (SlcrDiv0 << 8);\r
-       *(volatile unsigned int *)(slcrBaseAddress) = SlcrTxClkCntrl;\r
-#endif\r
-       *(volatile unsigned int *)(SLCR_LOCK_ADDR) = SLCR_LOCK_KEY_VALUE;\r
-       return;\r
-}\r
-\r
-\r
-unsigned link_speed;\r
-unsigned Phy_Setup (XEmacPs *xemacpsp)\r
-{\r
-       unsigned long conv_present = 0;\r
-       unsigned long convspeeddupsetting = 0;\r
-       unsigned long convphyaddr = 0;\r
-\r
-#ifdef XPAR_GMII2RGMIICON_0N_ETH0_ADDR\r
-       convphyaddr = XPAR_GMII2RGMIICON_0N_ETH0_ADDR;\r
-       conv_present = 1;\r
-#else\r
-#ifdef XPAR_GMII2RGMIICON_0N_ETH1_ADDR\r
-       convphyaddr = XPAR_GMII2RGMIICON_0N_ETH1_ADDR;\r
-       conv_present = 1;\r
-#endif\r
-#endif\r
-\r
-#ifdef  ipconfigNIC_LINKSPEED_AUTODETECT\r
-       link_speed = get_IEEE_phy_speed(xemacpsp);\r
-       if (link_speed == 1000) {\r
-               SetUpSLCRDivisors(xemacpsp->Config.BaseAddress,1000);\r
-               convspeeddupsetting = XEMACPS_GMII2RGMII_SPEED1000_FD;\r
-       } else if (link_speed == 100) {\r
-               SetUpSLCRDivisors(xemacpsp->Config.BaseAddress,100);\r
-               convspeeddupsetting = XEMACPS_GMII2RGMII_SPEED100_FD;\r
-       } else {\r
-               SetUpSLCRDivisors(xemacpsp->Config.BaseAddress,10);\r
-               convspeeddupsetting = XEMACPS_GMII2RGMII_SPEED10_FD;\r
-       }\r
-#elif  defined(ipconfigNIC_LINKSPEED1000)\r
-       SetUpSLCRDivisors(xemacpsp->Config.BaseAddress,1000);\r
-       link_speed = 1000;\r
-       configure_IEEE_phy_speed(xemacpsp, link_speed);\r
-       convspeeddupsetting = XEMACPS_GMII2RGMII_SPEED1000_FD;\r
-       sleep(1);\r
-#elif  defined(ipconfigNIC_LINKSPEED100)\r
-       SetUpSLCRDivisors(xemacpsp->Config.BaseAddress,100);\r
-       link_speed = 100;\r
-       configure_IEEE_phy_speed(xemacpsp, link_speed);\r
-       convspeeddupsetting = XEMACPS_GMII2RGMII_SPEED100_FD;\r
-       sleep(1);\r
-#elif  defined(ipconfigNIC_LINKSPEED10)\r
-       SetUpSLCRDivisors(xemacpsp->Config.BaseAddress,10);\r
-       link_speed = 10;\r
-       configure_IEEE_phy_speed(xemacpsp, link_speed);\r
-       convspeeddupsetting = XEMACPS_GMII2RGMII_SPEED10_FD;\r
-       sleep(1);\r
-#endif\r
-       if (conv_present) {\r
-               XEmacPs_PhyWrite(xemacpsp, convphyaddr,\r
-               XEMACPS_GMII2RGMII_REG_NUM, convspeeddupsetting);\r
-       }\r
-\r
-       xil_printf("link speed: %d\r\n", link_speed);\r
-       return link_speed;\r
-}\r
-\r
+/*
+ * Copyright (c) 2007-2008, Advanced Micro Devices, Inc.
+ *               All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *    * Redistributions of source code must retain the above copyright
+ *      notice, this list of conditions and the following disclaimer.
+ *    * Redistributions in binary form must reproduce the above copyright
+ *      notice, this list of conditions and the following disclaimer in
+ *      the documentation and/or other materials provided with the
+ *      distribution.
+ *    * Neither the name of Advanced Micro Devices, Inc. nor the names
+ *      of its contributors may be used to endorse or promote products
+ *      derived from this software without specific prior written
+ *      permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * Some portions copyright (c) 2010-2013 Xilinx, Inc.  All rights reserved.
+ *
+ * Xilinx, Inc.
+ * XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" AS A
+ * COURTESY TO YOU.  BY PROVIDING THIS DESIGN, CODE, OR INFORMATION AS
+ * ONE POSSIBLE   IMPLEMENTATION OF THIS FEATURE, APPLICATION OR
+ * STANDARD, XILINX IS MAKING NO REPRESENTATION THAT THIS IMPLEMENTATION
+ * IS FREE FROM ANY CLAIMS OF INFRINGEMENT, AND YOU ARE RESPONSIBLE
+ * FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE FOR YOUR IMPLEMENTATION.
+ * XILINX EXPRESSLY DISCLAIMS ANY WARRANTY WHATSOEVER WITH RESPECT TO
+ * THE ADEQUACY OF THE IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO
+ * ANY WARRANTIES OR REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE
+ * FROM CLAIMS OF INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+/* Standard includes. */
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "Zynq/x_emacpsif.h"
+//#include "lwipopts.h"
+#include "xparameters_ps.h"
+#include "xparameters.h"
+
+/* FreeRTOS includes. */
+#include "FreeRTOS.h"
+#include "task.h"
+#include "queue.h"
+#include "semphr.h"
+
+///* FreeRTOS+TCP includes. */
+/* FreeRTOS+TCP includes. */
+#include "FreeRTOS_IP.h"
+#include "FreeRTOS_Sockets.h"
+#include "FreeRTOS_IP_Private.h"
+#include "NetworkBufferManagement.h"
+
+int phy_detected = 0;
+
+/*** IMPORTANT: Define PEEP in xemacpsif.h and sys_arch_raw.c
+ *** to run it on a PEEP board
+ ***/
+
+/* Advertisement control register. */
+#define ADVERTISE_10HALF               0x0020  /* Try for 10mbps half-duplex  */
+#define ADVERTISE_10FULL               0x0040  /* Try for 10mbps full-duplex  */
+#define ADVERTISE_100HALF              0x0080  /* Try for 100mbps half-duplex */
+#define ADVERTISE_100FULL              0x0100  /* Try for 100mbps full-duplex */
+
+#define ADVERTISE_100_AND_10   (ADVERTISE_10FULL | ADVERTISE_100FULL | \
+                                                               ADVERTISE_10HALF | ADVERTISE_100HALF)
+#define ADVERTISE_100                  (ADVERTISE_100FULL | ADVERTISE_100HALF)
+#define ADVERTISE_10                   (ADVERTISE_10FULL | ADVERTISE_10HALF)
+
+#define ADVERTISE_1000                 0x0300
+
+
+//#define PHY_REG_00_BMCR            0x00 // Basic mode control register
+//#define PHY_REG_01_BMSR            0x01 // Basic mode status register
+//#define PHY_REG_02_PHYSID1         0x02 // PHYS ID 1
+//#define PHY_REG_03_PHYSID2         0x03 // PHYS ID 2
+//#define PHY_REG_04_ADVERTISE       0x04 // Advertisement control reg
+
+#define IEEE_CONTROL_REG_OFFSET                                0
+#define IEEE_STATUS_REG_OFFSET                         1
+#define IEEE_AUTONEGO_ADVERTISE_REG                    4
+#define IEEE_PARTNER_ABILITIES_1_REG_OFFSET    5
+#define IEEE_1000_ADVERTISE_REG_OFFSET         9
+#define IEEE_PARTNER_ABILITIES_3_REG_OFFSET    10
+#define IEEE_COPPER_SPECIFIC_CONTROL_REG       16
+#define IEEE_SPECIFIC_STATUS_REG                       17
+#define IEEE_COPPER_SPECIFIC_STATUS_REG_2      19
+#define IEEE_CONTROL_REG_MAC                           21
+#define IEEE_PAGE_ADDRESS_REGISTER                     22
+
+
+#define IEEE_CTRL_1GBPS_LINKSPEED_MASK         0x2040
+#define IEEE_CTRL_LINKSPEED_MASK                       0x0040
+#define IEEE_CTRL_LINKSPEED_1000M                      0x0040
+#define IEEE_CTRL_LINKSPEED_100M                       0x2000
+#define IEEE_CTRL_LINKSPEED_10M                                0x0000
+#define IEEE_CTRL_RESET_MASK                           0x8000
+#define IEEE_CTRL_AUTONEGOTIATE_ENABLE         0x1000
+#if XPAR_GIGE_PCS_PMA_CORE_PRESENT == 1
+#define IEEE_CTRL_RESET                         0x9140
+#define IEEE_CTRL_ISOLATE_DISABLE               0xFBFF
+#endif
+#define IEEE_STAT_AUTONEGOTIATE_CAPABLE                0x0008
+#define IEEE_STAT_AUTONEGOTIATE_COMPLETE       0x0020
+#define IEEE_STAT_AUTONEGOTIATE_RESTART                0x0200
+#define IEEE_STAT_1GBPS_EXTENSIONS                     0x0100
+#define IEEE_AN1_ABILITY_MASK                          0x1FE0
+#define IEEE_AN3_ABILITY_MASK_1GBPS                    0x0C00
+#define IEEE_AN1_ABILITY_MASK_100MBPS          0x0380
+#define IEEE_AN1_ABILITY_MASK_10MBPS           0x0060
+#define IEEE_RGMII_TXRX_CLOCK_DELAYED_MASK     0x0030
+
+#define IEEE_ASYMMETRIC_PAUSE_MASK                     0x0800
+#define IEEE_PAUSE_MASK                                                0x0400
+#define IEEE_AUTONEG_ERROR_MASK                                0x8000
+
+#define PHY_DETECT_REG  1
+#define PHY_DETECT_MASK 0x1808
+
+#define XEMACPS_GMII2RGMII_SPEED1000_FD                0x140
+#define XEMACPS_GMII2RGMII_SPEED100_FD         0x2100
+#define XEMACPS_GMII2RGMII_SPEED10_FD          0x100
+#define XEMACPS_GMII2RGMII_REG_NUM                     0x10
+
+/* Frequency setting */
+#define SLCR_LOCK_ADDR                 (XPS_SYS_CTRL_BASEADDR + 0x4)
+#define SLCR_UNLOCK_ADDR               (XPS_SYS_CTRL_BASEADDR + 0x8)
+#define SLCR_GEM0_CLK_CTRL_ADDR        (XPS_SYS_CTRL_BASEADDR + 0x140)
+#define SLCR_GEM1_CLK_CTRL_ADDR        (XPS_SYS_CTRL_BASEADDR + 0x144)
+#ifdef PEEP
+#define SLCR_GEM_10M_CLK_CTRL_VALUE            0x00103031
+#define SLCR_GEM_100M_CLK_CTRL_VALUE   0x00103001
+#define SLCR_GEM_1G_CLK_CTRL_VALUE             0x00103011
+#endif
+#define SLCR_LOCK_KEY_VALUE                    0x767B
+#define SLCR_UNLOCK_KEY_VALUE                  0xDF0D
+#define SLCR_ADDR_GEM_RST_CTRL                 (XPS_SYS_CTRL_BASEADDR + 0x214)
+#define EMACPS_SLCR_DIV_MASK                   0xFC0FC0FF
+
+#define EMAC0_BASE_ADDRESS                             0xE000B000
+#define EMAC1_BASE_ADDRESS                             0xE000C000
+
+static int detect_phy(XEmacPs *xemacpsp)
+{
+       u16 phy_reg;
+       u32 phy_addr;
+
+       for (phy_addr = 31; phy_addr > 0; phy_addr--) {
+               XEmacPs_PhyRead(xemacpsp, phy_addr, PHY_DETECT_REG,
+                                                       &phy_reg);
+
+               if ((phy_reg != 0xFFFF) &&
+                       ((phy_reg & PHY_DETECT_MASK) == PHY_DETECT_MASK)) {
+                       /* Found a valid PHY address */
+                       FreeRTOS_printf( ("XEmacPs detect_phy: PHY detected at address %d.\r\n",
+                                                                                                                                       phy_addr));
+                       FreeRTOS_printf( ("XEmacPs detect_phy: PHY detected.\n" ) );
+                       phy_detected = phy_addr;
+                       return phy_addr;
+               }
+       }
+
+       FreeRTOS_printf( ("XEmacPs detect_phy: No PHY detected.  Assuming a PHY at address 0\n" ) );
+
+        /* default to zero */
+       return 0;
+}
+
+#ifdef PEEP
+unsigned get_IEEE_phy_speed(XEmacPs *xemacpsp)
+{
+
+       u16 control;
+       u16 status;
+       u16 partner_capabilities;
+       u16 partner_capabilities_1000;
+       u16 phylinkspeed;
+       u32 phy_addr = detect_phy(xemacpsp);
+
+       XEmacPs_PhyWrite(xemacpsp, phy_addr, IEEE_1000_ADVERTISE_REG_OFFSET,
+                                                                                                                       ADVERTISE_1000);
+       /* Advertise PHY speed of 100 and 10 Mbps */
+       XEmacPs_PhyWrite(xemacpsp, phy_addr, IEEE_AUTONEGO_ADVERTISE_REG,
+                                                                                                       ADVERTISE_100_AND_10);
+
+       XEmacPs_PhyRead(xemacpsp, phy_addr, IEEE_CONTROL_REG_OFFSET,
+                                                                                                                               &control);
+       control |= (IEEE_CTRL_AUTONEGOTIATE_ENABLE |
+                                       IEEE_STAT_AUTONEGOTIATE_RESTART);
+
+       XEmacPs_PhyWrite(xemacpsp, phy_addr, IEEE_CONTROL_REG_OFFSET, control);
+
+       /* Read PHY control and status registers is successful. */
+       XEmacPs_PhyRead(xemacpsp, phy_addr, IEEE_CONTROL_REG_OFFSET, &control);
+       XEmacPs_PhyRead(xemacpsp, phy_addr, IEEE_STATUS_REG_OFFSET, &status);
+
+       if ((control & IEEE_CTRL_AUTONEGOTIATE_ENABLE) && (status &
+                                       IEEE_STAT_AUTONEGOTIATE_CAPABLE)) {
+
+               while ( !(status & IEEE_STAT_AUTONEGOTIATE_COMPLETE) ) {
+                       XEmacPs_PhyRead(xemacpsp, phy_addr, IEEE_STATUS_REG_OFFSET,
+                                                                                                                               &status);
+               }
+
+               XEmacPs_PhyRead(xemacpsp, phy_addr, IEEE_PARTNER_ABILITIES_1_REG_OFFSET,
+                                                                                                                       &partner_capabilities);
+
+               if (status & IEEE_STAT_1GBPS_EXTENSIONS) {
+                       XEmacPs_PhyRead(xemacpsp, phy_addr, IEEE_PARTNER_ABILITIES_3_REG_OFFSET,
+                                                                                                               &partner_capabilities_1000);
+                       if (partner_capabilities_1000 & IEEE_AN3_ABILITY_MASK_1GBPS)
+                               return 1000;
+               }
+
+               if (partner_capabilities & IEEE_AN1_ABILITY_MASK_100MBPS)
+                       return 100;
+               if (partner_capabilities & IEEE_AN1_ABILITY_MASK_10MBPS)
+                       return 10;
+
+               xil_printf("%s: unknown PHY link speed, setting TEMAC speed to be 10 Mbps\r\n",
+                               __FUNCTION__);
+               return 10;
+
+       } else {
+
+               /* Update TEMAC speed accordingly */
+               if (status & IEEE_STAT_1GBPS_EXTENSIONS) {
+                       /* Get commanded link speed */
+                       phylinkspeed = control & IEEE_CTRL_1GBPS_LINKSPEED_MASK;
+
+                       switch (phylinkspeed) {
+                               case (IEEE_CTRL_LINKSPEED_1000M):
+                                       return 1000;
+                               case (IEEE_CTRL_LINKSPEED_100M):
+                                       return 100;
+                               case (IEEE_CTRL_LINKSPEED_10M):
+                                       return 10;
+                               default:
+                                       xil_printf("%s: unknown PHY link speed (%d), setting TEMAC speed to be 10 Mbps\r\n",
+                                                       __FUNCTION__, phylinkspeed);
+                                       return 10;
+                       }
+
+               } else {
+
+                       return (control & IEEE_CTRL_LINKSPEED_MASK) ? 100 : 10;
+
+               }
+       }
+}
+
+#else /* Zynq */
+unsigned get_IEEE_phy_speed(XEmacPs *xemacpsp)
+{
+       u16 temp;
+       u16 control;
+       u16 status;
+       u16 partner_capabilities;
+#if XPAR_GIGE_PCS_PMA_CORE_PRESENT == 1
+       u32 phy_addr = XPAR_PCSPMA_SGMII_PHYADDR;
+#else
+       u32 phy_addr = detect_phy(xemacpsp);
+#endif
+       xil_printf("Start PHY autonegotiation \r\n");
+
+#if XPAR_GIGE_PCS_PMA_CORE_PRESENT == 1
+#else
+       XEmacPs_PhyWrite(xemacpsp,phy_addr, IEEE_PAGE_ADDRESS_REGISTER, 2);
+       XEmacPs_PhyRead(xemacpsp, phy_addr, IEEE_CONTROL_REG_MAC, &control);
+       control |= IEEE_RGMII_TXRX_CLOCK_DELAYED_MASK;
+       XEmacPs_PhyWrite(xemacpsp, phy_addr, IEEE_CONTROL_REG_MAC, control);
+
+       XEmacPs_PhyWrite(xemacpsp, phy_addr, IEEE_PAGE_ADDRESS_REGISTER, 0);
+
+       XEmacPs_PhyRead(xemacpsp, phy_addr, IEEE_AUTONEGO_ADVERTISE_REG, &control);
+       control |= IEEE_ASYMMETRIC_PAUSE_MASK;
+       control |= IEEE_PAUSE_MASK;
+       control |= ADVERTISE_100;
+       control |= ADVERTISE_10;
+       XEmacPs_PhyWrite(xemacpsp, phy_addr, IEEE_AUTONEGO_ADVERTISE_REG, control);
+
+       XEmacPs_PhyRead(xemacpsp, phy_addr, IEEE_1000_ADVERTISE_REG_OFFSET,
+                                                                                                                                       &control);
+       control |= ADVERTISE_1000;
+       XEmacPs_PhyWrite(xemacpsp, phy_addr, IEEE_1000_ADVERTISE_REG_OFFSET,
+                                                                                                                                       control);
+
+       XEmacPs_PhyWrite(xemacpsp, phy_addr, IEEE_PAGE_ADDRESS_REGISTER, 0);
+       XEmacPs_PhyRead(xemacpsp, phy_addr, IEEE_COPPER_SPECIFIC_CONTROL_REG,
+                                                                                                                               &control);
+       control |= (7 << 12);   /* max number of gigabit attempts */
+       control |= (1 << 11);   /* enable downshift */
+       XEmacPs_PhyWrite(xemacpsp, phy_addr, IEEE_COPPER_SPECIFIC_CONTROL_REG,
+                                                                                                                               control);
+#endif
+       XEmacPs_PhyRead(xemacpsp, phy_addr, IEEE_CONTROL_REG_OFFSET, &control);
+       control |= IEEE_CTRL_AUTONEGOTIATE_ENABLE;
+       control |= IEEE_STAT_AUTONEGOTIATE_RESTART;
+#if XPAR_GIGE_PCS_PMA_CORE_PRESENT == 1
+    control &= IEEE_CTRL_ISOLATE_DISABLE;
+#endif
+
+       XEmacPs_PhyWrite(xemacpsp, phy_addr, IEEE_CONTROL_REG_OFFSET, control);
+
+
+#if XPAR_GIGE_PCS_PMA_CORE_PRESENT == 1
+#else
+       XEmacPs_PhyRead(xemacpsp, phy_addr, IEEE_CONTROL_REG_OFFSET, &control);
+       control |= IEEE_CTRL_RESET_MASK;
+       XEmacPs_PhyWrite(xemacpsp, phy_addr, IEEE_CONTROL_REG_OFFSET, control);
+
+       while (1) {
+               XEmacPs_PhyRead(xemacpsp, phy_addr, IEEE_CONTROL_REG_OFFSET, &control);
+               if (control & IEEE_CTRL_RESET_MASK)
+                       continue;
+               else
+                       break;
+       }
+#endif
+       xil_printf("Waiting for PHY to complete autonegotiation.\r\n");
+
+       XEmacPs_PhyRead(xemacpsp, phy_addr, IEEE_STATUS_REG_OFFSET, &status);
+       while ( !(status & IEEE_STAT_AUTONEGOTIATE_COMPLETE) ) {
+               sleep(1);
+#if XPAR_GIGE_PCS_PMA_CORE_PRESENT == 1
+#else
+               XEmacPs_PhyRead(xemacpsp, phy_addr, IEEE_COPPER_SPECIFIC_STATUS_REG_2,
+                                                                                                                                       &temp);
+               if (temp & IEEE_AUTONEG_ERROR_MASK) {
+                       xil_printf("Auto negotiation error \r\n");
+               }
+#endif
+               XEmacPs_PhyRead(xemacpsp, phy_addr, IEEE_STATUS_REG_OFFSET,
+                                                                                                                               &status);
+               }
+
+       xil_printf("autonegotiation complete \r\n");
+
+#if XPAR_GIGE_PCS_PMA_CORE_PRESENT == 1
+#else
+       XEmacPs_PhyRead(xemacpsp, phy_addr, IEEE_SPECIFIC_STATUS_REG, &partner_capabilities);
+#endif
+
+#if XPAR_GIGE_PCS_PMA_CORE_PRESENT == 1
+       xil_printf("Waiting for Link to be up; Polling for SGMII core Reg \r\n");
+       XEmacPs_PhyRead(xemacpsp, phy_addr, 5, &temp);
+       while(!(temp & 0x8000)) {
+               XEmacPs_PhyRead(xemacpsp, phy_addr, 5, &temp);
+       }
+       if((temp & 0x0C00) == 0x0800) {
+               XEmacPs_PhyRead(xemacpsp, phy_addr, 0, &temp);
+               return 1000;
+       }
+       else if((temp & 0x0C00) == 0x0400) {
+               XEmacPs_PhyRead(xemacpsp, phy_addr, 0, &temp);
+               return 100;
+       }
+       else if((temp & 0x0C00) == 0x0000) {
+               XEmacPs_PhyRead(xemacpsp, phy_addr, 0, &temp);
+               return 10;
+       } else {
+               xil_printf("get_IEEE_phy_speed(): Invalid speed bit value, Deafulting to Speed = 10 Mbps\r\n");
+               XEmacPs_PhyRead(xemacpsp, phy_addr, 0, &temp);
+               XEmacPs_PhyWrite(xemacpsp, phy_addr, 0, 0x0100);
+               return 10;
+       }
+#else
+       if ( ((partner_capabilities >> 14) & 3) == 2)/* 1000Mbps */
+               return 1000;
+       else if ( ((partner_capabilities >> 14) & 3) == 1)/* 100Mbps */
+               return 100;
+       else                                    /* 10Mbps */
+               return 10;
+#endif
+}
+#endif
+
+unsigned configure_IEEE_phy_speed(XEmacPs *xemacpsp, unsigned speed)
+{
+       u16 control;
+       u32 phy_addr = detect_phy(xemacpsp);
+
+       XEmacPs_PhyWrite(xemacpsp,phy_addr, IEEE_PAGE_ADDRESS_REGISTER, 2);
+       XEmacPs_PhyRead(xemacpsp, phy_addr, IEEE_CONTROL_REG_MAC, &control);
+       control |= IEEE_RGMII_TXRX_CLOCK_DELAYED_MASK;
+       XEmacPs_PhyWrite(xemacpsp, phy_addr, IEEE_CONTROL_REG_MAC, control);
+
+       XEmacPs_PhyWrite(xemacpsp, phy_addr, IEEE_PAGE_ADDRESS_REGISTER, 0);
+
+       XEmacPs_PhyRead(xemacpsp, phy_addr, IEEE_AUTONEGO_ADVERTISE_REG, &control);
+       control |= IEEE_ASYMMETRIC_PAUSE_MASK;
+       control |= IEEE_PAUSE_MASK;
+       XEmacPs_PhyWrite(xemacpsp, phy_addr, IEEE_AUTONEGO_ADVERTISE_REG, control);
+
+       XEmacPs_PhyRead(xemacpsp, phy_addr, IEEE_CONTROL_REG_OFFSET, &control);
+       control &= ~IEEE_CTRL_LINKSPEED_1000M;
+       control &= ~IEEE_CTRL_LINKSPEED_100M;
+       control &= ~IEEE_CTRL_LINKSPEED_10M;
+
+       if (speed == 1000) {
+               control |= IEEE_CTRL_LINKSPEED_1000M;
+       }
+
+       else if (speed == 100) {
+               control |= IEEE_CTRL_LINKSPEED_100M;
+               /* Dont advertise PHY speed of 1000 Mbps */
+               XEmacPs_PhyWrite(xemacpsp, phy_addr, IEEE_1000_ADVERTISE_REG_OFFSET, 0);
+               /* Dont advertise PHY speed of 10 Mbps */
+               XEmacPs_PhyWrite(xemacpsp, phy_addr, IEEE_AUTONEGO_ADVERTISE_REG,
+                                                                                                                               ADVERTISE_100);
+       }
+
+       else if (speed == 10) {
+               control |= IEEE_CTRL_LINKSPEED_10M;
+               /* Dont advertise PHY speed of 1000 Mbps */
+               XEmacPs_PhyWrite(xemacpsp, phy_addr, IEEE_1000_ADVERTISE_REG_OFFSET,
+                                                                                                                                                       0);
+               /* Dont advertise PHY speed of 100 Mbps */
+               XEmacPs_PhyWrite(xemacpsp, phy_addr, IEEE_AUTONEGO_ADVERTISE_REG,
+                                                                                                                               ADVERTISE_10);
+       }
+
+       XEmacPs_PhyWrite(xemacpsp, phy_addr, IEEE_CONTROL_REG_OFFSET,
+                                                                                       control | IEEE_CTRL_RESET_MASK);
+       {
+               volatile int wait;
+               for (wait=0; wait < 100000; wait++);
+       }
+       return 0;
+}
+
+static void SetUpSLCRDivisors(int mac_baseaddr, int speed)
+{
+       volatile u32 slcrBaseAddress;
+#ifndef PEEP
+       u32 SlcrDiv0;
+       u32 SlcrDiv1=0;
+       u32 SlcrTxClkCntrl;
+#endif
+
+       *(volatile unsigned int *)(SLCR_UNLOCK_ADDR) = SLCR_UNLOCK_KEY_VALUE;
+
+       if ((unsigned long)mac_baseaddr == EMAC0_BASE_ADDRESS) {
+               slcrBaseAddress = SLCR_GEM0_CLK_CTRL_ADDR;
+       } else {
+               slcrBaseAddress = SLCR_GEM1_CLK_CTRL_ADDR;
+       }
+#ifdef PEEP
+       if (speed == 1000) {
+               *(volatile unsigned int *)(slcrBaseAddress) =
+                                                                                       SLCR_GEM_1G_CLK_CTRL_VALUE;
+       } else if (speed == 100) {
+               *(volatile unsigned int *)(slcrBaseAddress) =
+                                                                                       SLCR_GEM_100M_CLK_CTRL_VALUE;
+       } else {
+               *(volatile unsigned int *)(slcrBaseAddress) =
+                                                                                       SLCR_GEM_10M_CLK_CTRL_VALUE;
+       }
+#else
+       if (speed == 1000) {
+               if ((unsigned long)mac_baseaddr == EMAC0_BASE_ADDRESS) {
+#ifdef XPAR_PS7_ETHERNET_0_ENET_SLCR_1000MBPS_DIV0
+                       SlcrDiv0 = XPAR_PS7_ETHERNET_0_ENET_SLCR_1000MBPS_DIV0;
+                       SlcrDiv1 = XPAR_PS7_ETHERNET_0_ENET_SLCR_1000MBPS_DIV1;
+#endif
+               } else {
+#ifdef XPAR_PS7_ETHERNET_1_ENET_SLCR_1000MBPS_DIV0
+                       SlcrDiv0 = XPAR_PS7_ETHERNET_1_ENET_SLCR_1000MBPS_DIV0;
+                       SlcrDiv1 = XPAR_PS7_ETHERNET_1_ENET_SLCR_1000MBPS_DIV1;
+#endif
+               }
+       } else if (speed == 100) {
+               if ((unsigned long)mac_baseaddr == EMAC0_BASE_ADDRESS) {
+#ifdef XPAR_PS7_ETHERNET_0_ENET_SLCR_100MBPS_DIV0
+                       SlcrDiv0 = XPAR_PS7_ETHERNET_0_ENET_SLCR_100MBPS_DIV0;
+                       SlcrDiv1 = XPAR_PS7_ETHERNET_0_ENET_SLCR_100MBPS_DIV1;
+#endif
+               } else {
+#ifdef XPAR_PS7_ETHERNET_1_ENET_SLCR_100MBPS_DIV0
+                       SlcrDiv0 = XPAR_PS7_ETHERNET_1_ENET_SLCR_100MBPS_DIV0;
+                       SlcrDiv1 = XPAR_PS7_ETHERNET_1_ENET_SLCR_100MBPS_DIV1;
+#endif
+               }
+       } else {
+               if ((unsigned long)mac_baseaddr == EMAC0_BASE_ADDRESS) {
+#ifdef XPAR_PS7_ETHERNET_0_ENET_SLCR_10MBPS_DIV0
+                       SlcrDiv0 = XPAR_PS7_ETHERNET_0_ENET_SLCR_10MBPS_DIV0;
+                       SlcrDiv1 = XPAR_PS7_ETHERNET_0_ENET_SLCR_10MBPS_DIV1;
+#endif
+               } else {
+#ifdef XPAR_PS7_ETHERNET_1_ENET_SLCR_10MBPS_DIV0
+                       SlcrDiv0 = XPAR_PS7_ETHERNET_1_ENET_SLCR_10MBPS_DIV0;
+                       SlcrDiv1 = XPAR_PS7_ETHERNET_1_ENET_SLCR_10MBPS_DIV1;
+#endif
+               }
+       }
+       SlcrTxClkCntrl = *(volatile unsigned int *)(slcrBaseAddress);
+       SlcrTxClkCntrl &= EMACPS_SLCR_DIV_MASK;
+       SlcrTxClkCntrl |= (SlcrDiv1 << 20);
+       SlcrTxClkCntrl |= (SlcrDiv0 << 8);
+       *(volatile unsigned int *)(slcrBaseAddress) = SlcrTxClkCntrl;
+#endif
+       *(volatile unsigned int *)(SLCR_LOCK_ADDR) = SLCR_LOCK_KEY_VALUE;
+       return;
+}
+
+
+unsigned link_speed;
+unsigned Phy_Setup (XEmacPs *xemacpsp)
+{
+       unsigned long conv_present = 0;
+       unsigned long convspeeddupsetting = 0;
+       unsigned long convphyaddr = 0;
+
+#ifdef XPAR_GMII2RGMIICON_0N_ETH0_ADDR
+       convphyaddr = XPAR_GMII2RGMIICON_0N_ETH0_ADDR;
+       conv_present = 1;
+#else
+#ifdef XPAR_GMII2RGMIICON_0N_ETH1_ADDR
+       convphyaddr = XPAR_GMII2RGMIICON_0N_ETH1_ADDR;
+       conv_present = 1;
+#endif
+#endif
+
+#ifdef  ipconfigNIC_LINKSPEED_AUTODETECT
+       link_speed = get_IEEE_phy_speed(xemacpsp);
+       if (link_speed == 1000) {
+               SetUpSLCRDivisors(xemacpsp->Config.BaseAddress,1000);
+               convspeeddupsetting = XEMACPS_GMII2RGMII_SPEED1000_FD;
+       } else if (link_speed == 100) {
+               SetUpSLCRDivisors(xemacpsp->Config.BaseAddress,100);
+               convspeeddupsetting = XEMACPS_GMII2RGMII_SPEED100_FD;
+       } else {
+               SetUpSLCRDivisors(xemacpsp->Config.BaseAddress,10);
+               convspeeddupsetting = XEMACPS_GMII2RGMII_SPEED10_FD;
+       }
+#elif  defined(ipconfigNIC_LINKSPEED1000)
+       SetUpSLCRDivisors(xemacpsp->Config.BaseAddress,1000);
+       link_speed = 1000;
+       configure_IEEE_phy_speed(xemacpsp, link_speed);
+       convspeeddupsetting = XEMACPS_GMII2RGMII_SPEED1000_FD;
+       sleep(1);
+#elif  defined(ipconfigNIC_LINKSPEED100)
+       SetUpSLCRDivisors(xemacpsp->Config.BaseAddress,100);
+       link_speed = 100;
+       configure_IEEE_phy_speed(xemacpsp, link_speed);
+       convspeeddupsetting = XEMACPS_GMII2RGMII_SPEED100_FD;
+       sleep(1);
+#elif  defined(ipconfigNIC_LINKSPEED10)
+       SetUpSLCRDivisors(xemacpsp->Config.BaseAddress,10);
+       link_speed = 10;
+       configure_IEEE_phy_speed(xemacpsp, link_speed);
+       convspeeddupsetting = XEMACPS_GMII2RGMII_SPEED10_FD;
+       sleep(1);
+#endif
+       if (conv_present) {
+               XEmacPs_PhyWrite(xemacpsp, convphyaddr,
+               XEMACPS_GMII2RGMII_REG_NUM, convspeeddupsetting);
+       }
+
+       xil_printf("link speed: %d\r\n", link_speed);
+       return link_speed;
+}
+
index bb51783469e2c1e453c19df2795462f68bf69ce0..1d8fede15ff871dd778076161852b95bfa3be390 100644 (file)
@@ -1,46 +1,46 @@
-/*\r
- * Copyright (c) 2007-2013 Xilinx, Inc.  All rights reserved.\r
- *\r
- * Xilinx, Inc.\r
- * XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" AS A\r
- * COURTESY TO YOU.  BY PROVIDING THIS DESIGN, CODE, OR INFORMATION AS\r
- * ONE POSSIBLE   IMPLEMENTATION OF THIS FEATURE, APPLICATION OR\r
- * STANDARD, XILINX IS MAKING NO REPRESENTATION THAT THIS IMPLEMENTATION\r
- * IS FREE FROM ANY CLAIMS OF INFRINGEMENT, AND YOU ARE RESPONSIBLE\r
- * FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE FOR YOUR IMPLEMENTATION.\r
- * XILINX EXPRESSLY DISCLAIMS ANY WARRANTY WHATSOEVER WITH RESPECT TO\r
- * THE ADEQUACY OF THE IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO\r
- * ANY WARRANTIES OR REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE\r
- * FROM CLAIMS OF INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY\r
- * AND FITNESS FOR A PARTICULAR PURPOSE.\r
- *\r
- */\r
-\r
-#ifndef __XTOPOLOGY_H_\r
-#define __XTOPOLOGY_H_\r
-\r
-#ifdef __cplusplus\r
-extern "C" {\r
-#endif\r
-\r
-enum xemac_types { xemac_type_unknown = -1, xemac_type_xps_emaclite, xemac_type_xps_ll_temac, xemac_type_axi_ethernet, xemac_type_emacps };\r
-\r
-struct xtopology_t {\r
-       unsigned emac_baseaddr;\r
-       enum xemac_types emac_type;\r
-       unsigned intc_baseaddr;\r
-       unsigned intc_emac_intr;        /* valid only for xemac_type_xps_emaclite */\r
-       unsigned scugic_baseaddr; /* valid only for Zynq */\r
-       unsigned scugic_emac_intr; /* valid only for GEM */\r
-};\r
-\r
-extern int x_topology_n_emacs;\r
-extern struct xtopology_t x_topology[];\r
-\r
-int x_topology_find_index(unsigned base);\r
-\r
-#ifdef __cplusplus\r
-}\r
-#endif\r
-\r
-#endif\r
+/*
+ * Copyright (c) 2007-2013 Xilinx, Inc.  All rights reserved.
+ *
+ * Xilinx, Inc.
+ * XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" AS A
+ * COURTESY TO YOU.  BY PROVIDING THIS DESIGN, CODE, OR INFORMATION AS
+ * ONE POSSIBLE   IMPLEMENTATION OF THIS FEATURE, APPLICATION OR
+ * STANDARD, XILINX IS MAKING NO REPRESENTATION THAT THIS IMPLEMENTATION
+ * IS FREE FROM ANY CLAIMS OF INFRINGEMENT, AND YOU ARE RESPONSIBLE
+ * FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE FOR YOUR IMPLEMENTATION.
+ * XILINX EXPRESSLY DISCLAIMS ANY WARRANTY WHATSOEVER WITH RESPECT TO
+ * THE ADEQUACY OF THE IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO
+ * ANY WARRANTIES OR REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE
+ * FROM CLAIMS OF INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __XTOPOLOGY_H_
+#define __XTOPOLOGY_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+enum xemac_types { xemac_type_unknown = -1, xemac_type_xps_emaclite, xemac_type_xps_ll_temac, xemac_type_axi_ethernet, xemac_type_emacps };
+
+struct xtopology_t {
+       unsigned emac_baseaddr;
+       enum xemac_types emac_type;
+       unsigned intc_baseaddr;
+       unsigned intc_emac_intr;        /* valid only for xemac_type_xps_emaclite */
+       unsigned scugic_baseaddr; /* valid only for Zynq */
+       unsigned scugic_emac_intr; /* valid only for GEM */
+};
+
+extern int x_topology_n_emacs;
+extern struct xtopology_t x_topology[];
+
+int x_topology_find_index(unsigned base);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
index aa0a646b4b7307d026b834c66d84b53b2a787b80..4692c12c4a5d3c04f6e88828e0aa01de491f3417 100644 (file)
@@ -1,63 +1,63 @@
-/*\r
-FreeRTOS+TCP V2.0.11\r
-Copyright (C) 2018 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://aws.amazon.com/freertos\r
- http://www.FreeRTOS.org\r
-*/\r
-\r
-/* FreeRTOS includes. */\r
-#include "FreeRTOS.h"\r
-#include "list.h"\r
-\r
-/* FreeRTOS+TCP includes. */\r
-#include "FreeRTOS_IP.h"\r
-\r
-/* If ipconfigETHERNET_DRIVER_FILTERS_FRAME_TYPES is set to 1, then the Ethernet\r
-driver will filter incoming packets and only pass the stack those packets it\r
-considers need processing. */\r
-#if( ipconfigETHERNET_DRIVER_FILTERS_FRAME_TYPES == 0 )\r
-#define ipCONSIDER_FRAME_FOR_PROCESSING( pucEthernetBuffer ) eProcessBuffer\r
-#else\r
-#define ipCONSIDER_FRAME_FOR_PROCESSING( pucEthernetBuffer ) eConsiderFrameForProcessing( ( pucEthernetBuffer ) )\r
-#endif\r
-\r
-BaseType_t xNetworkInterfaceInitialise( void )\r
-{\r
-    /* FIX ME. */\r
-    return pdFALSE;\r
-}\r
-\r
-BaseType_t xNetworkInterfaceOutput( NetworkBufferDescriptor_t * const pxNetworkBuffer, BaseType_t xReleaseAfterSend )\r
-{\r
-    /* FIX ME. */\r
-    return pdFALSE;\r
-}\r
-\r
-void vNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] )\r
-{\r
-    /* FIX ME. */\r
-}\r
-\r
-BaseType_t xGetPhyLinkStatus( void )\r
-{\r
-    /* FIX ME. */\r
-    return pdFALSE;\r
+/*
+FreeRTOS+TCP V2.0.11
+Copyright (C) 2018 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
+*/
+
+/* FreeRTOS includes. */
+#include "FreeRTOS.h"
+#include "list.h"
+
+/* FreeRTOS+TCP includes. */
+#include "FreeRTOS_IP.h"
+
+/* If ipconfigETHERNET_DRIVER_FILTERS_FRAME_TYPES is set to 1, then the Ethernet
+driver will filter incoming packets and only pass the stack those packets it
+considers need processing. */
+#if( ipconfigETHERNET_DRIVER_FILTERS_FRAME_TYPES == 0 )
+#define ipCONSIDER_FRAME_FOR_PROCESSING( pucEthernetBuffer ) eProcessBuffer
+#else
+#define ipCONSIDER_FRAME_FOR_PROCESSING( pucEthernetBuffer ) eConsiderFrameForProcessing( ( pucEthernetBuffer ) )
+#endif
+
+BaseType_t xNetworkInterfaceInitialise( void )
+{
+    /* FIX ME. */
+    return pdFALSE;
+}
+
+BaseType_t xNetworkInterfaceOutput( NetworkBufferDescriptor_t * const pxNetworkBuffer, BaseType_t xReleaseAfterSend )
+{
+    /* FIX ME. */
+    return pdFALSE;
+}
+
+void vNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] )
+{
+    /* FIX ME. */
+}
+
+BaseType_t xGetPhyLinkStatus( void )
+{
+    /* FIX ME. */
+    return pdFALSE;
 }
\ No newline at end of file
index 0b34edf7b8865891953a14114b2c5ee692787d0a..96503f457a504e1a60728826b19f0e18edc0d2fe 100644 (file)
-// Copyright 2018 Espressif Systems (Shanghai) PTE LTD\r
-//\r
-// Licensed under the Apache License, Version 2.0 (the "License");\r
-// you may not use this file except in compliance with the License.\r
-// You may obtain a copy of the License at\r
-//\r
-//     http://www.apache.org/licenses/LICENSE-2.0\r
-//\r
-// Unless required by applicable law or agreed to in writing, software\r
-// distributed under the License is distributed on an "AS IS" BASIS,\r
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
-// See the License for the specific language governing permissions and\r
-// limitations under the License.\r
-\r
-/* Standard includes. */\r
-#include <stdint.h>\r
-#include <stdio.h>\r
-#include <stdlib.h>\r
-\r
-/* FreeRTOS includes. */\r
-#include "FreeRTOS.h"\r
-#include "task.h"\r
-#include "queue.h"\r
-#include "semphr.h"\r
-\r
-/* FreeRTOS+TCP includes. */\r
-#include "FreeRTOS_IP.h"\r
-#include "FreeRTOS_Sockets.h"\r
-#include "FreeRTOS_IP_Private.h"\r
-#include "FreeRTOS_DNS.h"\r
-#include "NetworkBufferManagement.h"\r
-#include "NetworkInterface.h"\r
-\r
-#include "esp_log.h"\r
-#include "esp_wifi.h"\r
-#include "esp_wifi_internal.h"\r
-#include "tcpip_adapter.h"\r
-\r
-enum if_state_t {\r
-    INTERFACE_DOWN = 0,\r
-    INTERFACE_UP,\r
-};\r
-\r
-static const char *TAG = "NetInterface";\r
-volatile static uint32_t xInterfaceState = INTERFACE_DOWN;\r
-\r
-#if ( ipconfigHAS_PRINTF != 0 )\r
-    static void prvMonitorResources();\r
-#endif\r
-\r
-BaseType_t xNetworkInterfaceInitialise( void )\r
-{\r
-    static BaseType_t xMACAdrInitialized = pdFALSE;\r
-    uint8_t ucMACAddress[ ipMAC_ADDRESS_LENGTH_BYTES ];\r
-\r
-    if (xInterfaceState == INTERFACE_UP) {\r
-        if (xMACAdrInitialized == pdFALSE) {\r
-            esp_wifi_get_mac(ESP_IF_WIFI_STA, ucMACAddress);\r
-            FreeRTOS_UpdateMACAddress(ucMACAddress);\r
-            xMACAdrInitialized = pdTRUE;\r
-        }\r
-        return pdTRUE;\r
-    }\r
-    return pdFALSE;\r
-}\r
-\r
-BaseType_t xNetworkInterfaceOutput( NetworkBufferDescriptor_t *const pxNetworkBuffer, BaseType_t xReleaseAfterSend )\r
-{\r
-    if (pxNetworkBuffer == NULL || pxNetworkBuffer->pucEthernetBuffer == NULL || pxNetworkBuffer->xDataLength == 0) {\r
-        ESP_LOGE(TAG, "Invalid params");\r
-        return pdFALSE;\r
-    }\r
-\r
-    esp_err_t ret;\r
-    if (xInterfaceState == INTERFACE_DOWN) {\r
-        ESP_LOGD(TAG, "Interface down");\r
-        ret = ESP_FAIL;\r
-    } else {\r
-        ret = esp_wifi_internal_tx(ESP_IF_WIFI_STA, pxNetworkBuffer->pucEthernetBuffer, pxNetworkBuffer->xDataLength);\r
-        if (ret != ESP_OK) {\r
-            ESP_LOGE(TAG, "Failed to tx buffer %p, len %d, err %d", pxNetworkBuffer->pucEthernetBuffer, pxNetworkBuffer->xDataLength, ret);\r
-        }\r
-    }\r
-\r
-#if ( ipconfigHAS_PRINTF != 0 )\r
-    prvMonitorResources();\r
-#endif\r
-    if (xReleaseAfterSend == pdTRUE) {\r
-        vReleaseNetworkBufferAndDescriptor(pxNetworkBuffer);\r
-    }\r
-\r
-    return ret == ESP_OK ? pdTRUE : pdFALSE;\r
-}\r
-\r
-void vNetworkNotifyIFDown()\r
-{\r
-    IPStackEvent_t xRxEvent = { eNetworkDownEvent, NULL };\r
-    if (xInterfaceState != INTERFACE_DOWN) {\r
-        xInterfaceState = INTERFACE_DOWN;\r
-        xSendEventStructToIPTask( &xRxEvent, 0 );\r
-    }\r
-}\r
-\r
-void vNetworkNotifyIFUp()\r
-{\r
-    xInterfaceState = INTERFACE_UP;\r
-}\r
-\r
-esp_err_t wlanif_input(void *netif, void *buffer, uint16_t len, void *eb)\r
-{\r
-    NetworkBufferDescriptor_t *pxNetworkBuffer;\r
-    IPStackEvent_t xRxEvent = { eNetworkRxEvent, NULL };\r
-    const TickType_t xDescriptorWaitTime = pdMS_TO_TICKS( 250 );\r
-\r
-#if ( ipconfigHAS_PRINTF != 0 )\r
-    prvMonitorResources();\r
-#endif\r
-\r
-    if( eConsiderFrameForProcessing( buffer ) != eProcessBuffer ) {\r
-        ESP_LOGD(TAG, "Dropping packet");\r
-        esp_wifi_internal_free_rx_buffer(eb);\r
-        return ESP_OK;\r
-    }\r
-\r
-    pxNetworkBuffer = pxGetNetworkBufferWithDescriptor(len, xDescriptorWaitTime);\r
-    if (pxNetworkBuffer != NULL) {\r
-\r
-        /* Set the packet size, in case a larger buffer was returned. */\r
-        pxNetworkBuffer->xDataLength = len;\r
-\r
-        /* Copy the packet data. */\r
-        memcpy(pxNetworkBuffer->pucEthernetBuffer, buffer, len);\r
-        xRxEvent.pvData = (void *) pxNetworkBuffer;\r
-\r
-        if ( xSendEventStructToIPTask( &xRxEvent, xDescriptorWaitTime) == pdFAIL ) {\r
-            ESP_LOGE(TAG, "Failed to enqueue packet to network stack %p, len %d", buffer, len);\r
-            vReleaseNetworkBufferAndDescriptor(pxNetworkBuffer);\r
-            return ESP_FAIL;\r
-        }\r
-        esp_wifi_internal_free_rx_buffer(eb);\r
-        return ESP_OK;\r
-    } else {\r
-        ESP_LOGE(TAG, "Failed to get buffer descriptor");\r
-        return ESP_FAIL;\r
-    }\r
-}\r
-\r
-#if ( ipconfigHAS_PRINTF != 0 )\r
-    static void prvMonitorResources()\r
-    {\r
-        static UBaseType_t uxLastMinBufferCount = 0u;\r
-        static UBaseType_t uxCurrentBufferCount = 0u;\r
-        static size_t uxMinLastSize = 0uL;\r
-        size_t uxMinSize;\r
-\r
-        uxCurrentBufferCount = uxGetMinimumFreeNetworkBuffers();\r
-\r
-        if( uxLastMinBufferCount != uxCurrentBufferCount )\r
-        {\r
-            /* The logging produced below may be helpful\r
-             * while tuning +TCP: see how many buffers are in use. */\r
-            uxLastMinBufferCount = uxCurrentBufferCount;\r
-            FreeRTOS_printf( ( "Network buffers: %lu lowest %lu\n",\r
-                               uxGetNumberOfFreeNetworkBuffers(), uxCurrentBufferCount ) );\r
-        }\r
-\r
-        uxMinSize = xPortGetMinimumEverFreeHeapSize();\r
-\r
-        if( uxMinLastSize != uxMinSize )\r
-        {\r
-            uxMinLastSize = uxMinSize;\r
-            FreeRTOS_printf( ( "Heap: current %lu lowest %lu\n", xPortGetFreeHeapSize(), uxMinSize ) );\r
-        }\r
-\r
-        #if ( ipconfigCHECK_IP_QUEUE_SPACE != 0 )\r
-            {\r
-                static UBaseType_t uxLastMinQueueSpace = 0;\r
-                UBaseType_t uxCurrentCount = 0u;\r
-\r
-                uxCurrentCount = uxGetMinimumIPQueueSpace();\r
-\r
-                if( uxLastMinQueueSpace != uxCurrentCount )\r
-                {\r
-                    /* The logging produced below may be helpful\r
-                     * while tuning +TCP: see how many buffers are in use. */\r
-                    uxLastMinQueueSpace = uxCurrentCount;\r
-                    FreeRTOS_printf( ( "Queue space: lowest %lu\n", uxCurrentCount ) );\r
-                }\r
-            }\r
-        #endif /* ipconfigCHECK_IP_QUEUE_SPACE */\r
-    }\r
-#endif /* ( ipconfigHAS_PRINTF != 0 ) */\r
-/*-----------------------------------------------------------*/\r
+// Copyright 2018 Espressif Systems (Shanghai) PTE LTD
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+/* Standard includes. */
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+/* FreeRTOS includes. */
+#include "FreeRTOS.h"
+#include "task.h"
+#include "queue.h"
+#include "semphr.h"
+
+/* FreeRTOS+TCP includes. */
+#include "FreeRTOS_IP.h"
+#include "FreeRTOS_Sockets.h"
+#include "FreeRTOS_IP_Private.h"
+#include "FreeRTOS_DNS.h"
+#include "NetworkBufferManagement.h"
+#include "NetworkInterface.h"
+
+#include "esp_log.h"
+#include "esp_wifi.h"
+#include "esp_wifi_internal.h"
+#include "tcpip_adapter.h"
+
+enum if_state_t {
+    INTERFACE_DOWN = 0,
+    INTERFACE_UP,
+};
+
+static const char *TAG = "NetInterface";
+volatile static uint32_t xInterfaceState = INTERFACE_DOWN;
+
+BaseType_t xNetworkInterfaceInitialise( void )
+{
+    static BaseType_t xMACAdrInitialized = pdFALSE;
+    uint8_t ucMACAddress[ ipMAC_ADDRESS_LENGTH_BYTES ];
+
+    if (xInterfaceState == INTERFACE_UP) {
+        if (xMACAdrInitialized == pdFALSE) {
+            esp_wifi_get_mac(ESP_IF_WIFI_STA, ucMACAddress);
+            FreeRTOS_UpdateMACAddress(ucMACAddress);
+            xMACAdrInitialized = pdTRUE;
+        }
+        return pdTRUE;
+    }
+    return pdFALSE;
+}
+
+BaseType_t xNetworkInterfaceOutput( NetworkBufferDescriptor_t *const pxNetworkBuffer, BaseType_t xReleaseAfterSend )
+{
+    if (pxNetworkBuffer == NULL || pxNetworkBuffer->pucEthernetBuffer == NULL || pxNetworkBuffer->xDataLength == 0) {
+        ESP_LOGE(TAG, "Invalid params");
+        return pdFALSE;
+    }
+
+    esp_err_t ret;
+    if (xInterfaceState == INTERFACE_DOWN) {
+        ESP_LOGD(TAG, "Interface down");
+        ret = ESP_FAIL;
+    } else {
+        ret = esp_wifi_internal_tx(ESP_IF_WIFI_STA, pxNetworkBuffer->pucEthernetBuffer, pxNetworkBuffer->xDataLength);
+        if (ret != ESP_OK) {
+            ESP_LOGE(TAG, "Failed to tx buffer %p, len %d, err %d", pxNetworkBuffer->pucEthernetBuffer, pxNetworkBuffer->xDataLength, ret);
+        }
+    }
+
+    if (xReleaseAfterSend == pdTRUE) {
+        vReleaseNetworkBufferAndDescriptor(pxNetworkBuffer);
+    }
+
+    return ret == ESP_OK ? pdTRUE : pdFALSE;
+}
+
+void vNetworkNotifyIFDown()
+{
+    IPStackEvent_t xRxEvent = { eNetworkDownEvent, NULL };
+    if (xInterfaceState != INTERFACE_DOWN) {
+        xInterfaceState = INTERFACE_DOWN;
+        xSendEventStructToIPTask( &xRxEvent, 0 );
+    }
+}
+
+void vNetworkNotifyIFUp()
+{
+    xInterfaceState = INTERFACE_UP;
+}
+
+esp_err_t wlanif_input(void *netif, void *buffer, uint16_t len, void *eb)
+{
+    NetworkBufferDescriptor_t *pxNetworkBuffer;
+    IPStackEvent_t xRxEvent = { eNetworkRxEvent, NULL };
+    const TickType_t xDescriptorWaitTime = pdMS_TO_TICKS( 250 );
+
+    if( eConsiderFrameForProcessing( buffer ) != eProcessBuffer ) {
+        ESP_LOGD(TAG, "Dropping packet");
+        esp_wifi_internal_free_rx_buffer(eb);
+        return ESP_OK;
+    }
+
+    pxNetworkBuffer = pxGetNetworkBufferWithDescriptor(len, xDescriptorWaitTime);
+    if (pxNetworkBuffer != NULL) {
+
+       /* Set the packet size, in case a larger buffer was returned. */
+       pxNetworkBuffer->xDataLength = len;
+
+       /* Copy the packet data. */
+        memcpy(pxNetworkBuffer->pucEthernetBuffer, buffer, len);
+        xRxEvent.pvData = (void *) pxNetworkBuffer;
+
+        if ( xSendEventStructToIPTask( &xRxEvent, xDescriptorWaitTime) == pdFAIL ) {
+            ESP_LOGE(TAG, "Failed to enqueue packet to network stack %p, len %d", buffer, len);
+            vReleaseNetworkBufferAndDescriptor(pxNetworkBuffer);
+            return ESP_FAIL;
+        }
+        esp_wifi_internal_free_rx_buffer(eb);
+        return ESP_OK;
+    } else {
+        ESP_LOGE(TAG, "Failed to get buffer descriptor");
+        return ESP_FAIL;
+    }
+}
diff --git a/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/include/phyHandling.h b/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/include/phyHandling.h
deleted file mode 100644 (file)
index 9e8a113..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-/*\r
- * Handling of Ethernet PHY's\r
- * PHY's communicate with an EMAC either through\r
- * a Media-Independent Interface (MII), or a Reduced Media-Independent Interface (RMII).\r
- * The EMAC can poll for PHY ports on 32 different addresses. Each of the PHY ports\r
- * shall be treated independently.\r
- * \r
- */\r
-\r
-#ifndef PHYHANDLING_H\r
-\r
-#define PHYHANDLING_H\r
-\r
-#ifdef __cplusplus\r
-extern "C" {\r
-#endif\r
-\r
-\r
-#ifndef ipconfigPHY_MAX_PORTS\r
-       /* There can be at most 32 PHY ports, but in most cases there are 4 or less. */\r
-       #define ipconfigPHY_MAX_PORTS   4\r
-#endif\r
-\r
-/* A generic user-provided function that reads from the PHY-port at 'xAddress'( 0-based ). A 16-bit value shall be stored in\r
-  '*pulValue'. xRegister is the register number ( 0 .. 31 ). In fact all PHY registers are 16-bit.\r
-  Return non-zero in case the action failed. */\r
-typedef BaseType_t ( *xApplicationPhyReadHook_t )( BaseType_t xAddress, BaseType_t xRegister, uint32_t *pulValue );\r
-\r
-/* A generic user-provided function that writes 'ulValue' to the\r
-   PHY-port at 'xAddress' ( 0-based ). xRegister is the register number ( 0 .. 31 ).\r
-   Return non-zero in case the action failed. */\r
-typedef BaseType_t ( *xApplicationPhyWriteHook_t )( BaseType_t xAddress, BaseType_t xRegister, uint32_t ulValue );\r
-\r
-typedef struct xPhyProperties\r
-{\r
-       uint8_t ucSpeed;\r
-       uint8_t ucMDI_X;                /* MDI-X : Medium Dependent Interface - Crossover */\r
-       uint8_t ucDuplex;\r
-       uint8_t ucSpare;\r
-} PhyProperties_t;\r
-\r
-typedef struct xEthernetPhy\r
-{\r
-       xApplicationPhyReadHook_t fnPhyRead;\r
-       xApplicationPhyWriteHook_t fnPhyWrite;\r
-       uint32_t ulPhyIDs[ ipconfigPHY_MAX_PORTS ];\r
-       uint8_t ucPhyIndexes[ ipconfigPHY_MAX_PORTS ];\r
-       TimeOut_t xLinkStatusTimer;\r
-       TickType_t xLinkStatusRemaining;\r
-       BaseType_t xPortCount;\r
-       uint32_t ulBCRValue;\r
-       uint32_t ulACRValue;\r
-       uint32_t ulLinkStatusMask;\r
-       PhyProperties_t xPhyPreferences;\r
-       PhyProperties_t xPhyProperties;\r
-} EthernetPhy_t;\r
-\r
-/* Some defines used internally here to indicate preferences about speed, MDIX\r
-(wired direct or crossed), and duplex (half or full). */\r
-\r
-/* Values for PhyProperties_t::ucSpeed : */\r
-#define        PHY_SPEED_10            1\r
-#define        PHY_SPEED_100           2\r
-#define        PHY_SPEED_AUTO          3\r
-\r
-/* Values for PhyProperties_t::ucMDI_X : */\r
-#define        PHY_MDIX_DIRECT         1\r
-#define        PHY_MDIX_CROSSED        2\r
-#define        PHY_MDIX_AUTO           3\r
-\r
-/* Values for PhyProperties_t::ucDuplex : */\r
-#define        PHY_DUPLEX_HALF         1\r
-#define        PHY_DUPLEX_FULL         2\r
-#define        PHY_DUPLEX_AUTO         3\r
-\r
-/* ID's of supported PHY's : */\r
-#define PHY_ID_LAN8742A                0x0007c130\r
-#define PHY_ID_LAN8720         0x0007c0f0\r
-\r
-#define PHY_ID_KSZ8041         0x000010A1\r
-#define PHY_ID_KSZ8051         0x000010A1\r
-#define PHY_ID_KSZ8081         0x000010A1\r
-\r
-#define PHY_ID_KSZ8863         0x00221430\r
-#define PHY_ID_KSZ8081MNXIA 0x00221560\r
-\r
-#define PHY_ID_DP83848I                0x20005C90\r
-\r
-\r
-/* Initialise the struct and assign a PHY-read and -write function. */\r
-void vPhyInitialise( EthernetPhy_t *pxPhyObject, xApplicationPhyReadHook_t fnPhyRead, xApplicationPhyWriteHook_t fnPhyWrite );\r
-\r
-/* Discover all PHY's connected by polling 32 indexes ( zero-based ) */\r
-BaseType_t xPhyDiscover( EthernetPhy_t *pxPhyObject );\r
-\r
-/* Send a reset command to the connected PHY ports and send configuration. */\r
-BaseType_t xPhyConfigure( EthernetPhy_t *pxPhyObject, const PhyProperties_t *pxPhyProperties );\r
-\r
-/* Give a command to start auto negotiation on a set of PHY port's. */\r
-BaseType_t xPhyStartAutoNegotiation( EthernetPhy_t *pxPhyObject, uint32_t ulPhyMask );\r
-\r
-/* Do not use auto negotiation but use predefined values from 'pxPhyObject->xPhyPreferences'. */\r
-BaseType_t xPhyFixedValue( EthernetPhy_t *pxPhyObject, uint32_t ulPhyMask );\r
-\r
-/* Check the current Link Status.\r
-'xHadReception' : make this true if a packet has been received since the\r
-last call to this function. */\r
-BaseType_t xPhyCheckLinkStatus( EthernetPhy_t *pxPhyObject, BaseType_t xHadReception );\r
-\r
-/* Get the bitmask of a given 'EthernetPhy_t'. */\r
-#define xPhyGetMask( pxPhyObject ) \\r
-       ( ( ( ( uint32_t ) 1u ) << ( pxPhyObject )->xPortCount ) - 1u )\r
-\r
-#ifdef __cplusplus\r
-} /* extern "C" */\r
-#endif\r
-\r
-#endif\r
index 544e5ba095497386218b939f7dbc2d1ba1ee632c..e4ae1168f6ef0a1e52e8f47f03e44ac3938d7f62 100644 (file)
-/*\r
-FreeRTOS+TCP V2.0.11\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://aws.amazon.com/freertos\r
- http://www.FreeRTOS.org\r
-*/\r
-\r
-/* Standard includes. */\r
-#include <stdint.h>\r
-#include <stdio.h>\r
-#include <stdlib.h>\r
-#include <stdarg.h>\r
-\r
-/* FreeRTOS includes. */\r
-#include "FreeRTOS.h"\r
-#include "task.h"\r
-#include "queue.h"\r
-#include "semphr.h"\r
-\r
-/* FreeRTOS+TCP includes. */\r
-#include "FreeRTOS_IP.h"\r
-#include "FreeRTOS_Sockets.h"\r
-#include "FreeRTOS_IP_Private.h"\r
-#include "NetworkBufferManagement.h"\r
-#include "NetworkInterface.h"\r
-\r
-#include "sam4e_xplained_pro.h"\r
-#include "hr_gettime.h"\r
-#include "conf_eth.h"\r
-#include "ksz8851snl.h"\r
-#include "ksz8851snl_reg.h"\r
-\r
-/* Some files from the Atmel Software Framework */\r
-#include <sysclk.h>\r
-#include <pdc/pdc.h>\r
-#include <spi/spi.h>\r
-\r
-/*\r
-       Sending a packet:\r
-\r
-               1) Called by UP-task, add buffer to the TX-list:\r
-                       xNetworkInterfaceOutput()\r
-                               tx_buffers[ us_tx_head ] = pxNetworkBuffer;\r
-                               tx_busy[ us_tx_head ] = pdTRUE;\r
-                               us_tx_head++;\r
-\r
-               2) Called by EMAC-Task: start SPI transfer\r
-                       ksz8851snl_update()\r
-                       if( ul_spi_pdc_status == SPI_PDC_IDLE )\r
-                       {\r
-                               if( ( tx_busy[ us_tx_tail ] != pdFALSE ) &&\r
-                                       ( us_pending_frame == 0 ) &&\r
-                                       ( ul_had_intn_interrupt == 0 ) )\r
-                               {\r
-                                       // disable all interrupts.\r
-                                       ksz8851_reg_write( REG_INT_MASK, 0 );\r
-                                       Bring KSZ8851SNL_CSN_GPIO low\r
-                                       ksz8851_fifo_write( pxNetworkBuffer->pucEthernetBuffer, xLength, xLength );\r
-                                       ul_spi_pdc_status = SPI_PDC_TX_START;\r
-                                       tx_cur_buffer = pxNetworkBuffer;\r
-                               }\r
-                       }\r
-               3) Wait for SPI RXBUFF interrupt\r
-                       SPI_Handler()\r
-                               if( ul_spi_pdc_status == SPI_PDC_TX_START )\r
-                               {\r
-                                       if( SPI_Status & SPI_SR_RXBUFF )\r
-                                       {\r
-                                               ul_spi_pdc_status = SPI_PDC_TX_COMPLETE;\r
-                                       }\r
-                               }\r
-\r
-               4) Called by EMAC-Task: finish SPI transfer\r
-                       ksz8851snl_update()\r
-                               if( ul_spi_pdc_status == SPI_PDC_TX_COMPLETE )\r
-                               {\r
-                                       ul_spi_pdc_status = SPI_PDC_IDLE;\r
-                                       Bring KSZ8851SNL_CSN_GPIO high\r
-                                       // TX step12: disable TXQ write access.\r
-                                       ksz8851_reg_clrbits( REG_RXQ_CMD, RXQ_START );\r
-                                       // TX step12.1: enqueue frame in TXQ.\r
-                                       ksz8851_reg_setbits( REG_TXQ_CMD, TXQ_ENQUEUE );\r
-\r
-                                       // RX step13: enable INT_RX flag.\r
-                                       ksz8851_reg_write( REG_INT_MASK, INT_RX );\r
-\r
-                                       // Buffer sent, free the corresponding buffer and mark descriptor as owned by software.\r
-                                       vReleaseNetworkBufferAndDescriptor( pxNetworkBuffer );\r
-\r
-                                       tx_buffers[ us_tx_tail ] = NULL;\r
-                                       tx_busy[ us_tx_tail ] = pdFALSE;\r
-                                       us_tx_tail++\r
-                               }\r
-\r
-       Receiving a packet:\r
-\r
-               1) Wait for a INTN interrupt\r
-                       INTN_Handler()\r
-                               ul_had_intn_interrupt = 1\r
-                               vTaskNotifyGiveFromISR();       // Wake up the EMAC task\r
-\r
-               2) Called by EMAC-Task: check for new fragments and start SPI transfer\r
-                       ksz8851snl_update()\r
-                               if( ul_spi_pdc_status == SPI_PDC_IDLE )\r
-                               {\r
-                                       if( ( ul_had_intn_interrupt != 0 ) || ( us_pending_frame > 0 ) )\r
-                                       {\r
-                                               if( us_pending_frame == 0 )\r
-                                               {\r
-                                                       us_pending_frame = ksz8851_reg_read(REG_RX_FRAME_CNT_THRES) >> 8;\r
-                                                       if( us_pending_frame == 0 )\r
-                                                       {\r
-                                                               break;\r
-                                                       }\r
-                                               }\r
-                                               // RX step2: disable all interrupts.\r
-                                               ksz8851_reg_write( REG_INT_MASK, 0 );\r
-                                               Check if there is a valid packet: REG_RX_FHR_STATUS\r
-                                               Read the length of the next fragment: REG_RX_FHR_BYTE_CNT\r
-                                               ul_spi_pdc_status = SPI_PDC_RX_START;\r
-                                               gpio_set_pin_low(KSZ8851SNL_CSN_GPIO);\r
-                                               // Start SPI data transfer\r
-                                               ksz8851_fifo_read( pxNetworkBuffer->pucEthernetBuffer, xReadLength );\r
-                                       }\r
-                               }\r
-\r
-               3) Wait for SPI RXBUFF interrupt\r
-                       SPI_Handler()\r
-                       if( ul_spi_pdc_status == SPI_PDC_RX_START:\r
-                       {\r
-                               if( ( ulCurrentSPIStatus & SPI_SR_RXBUFF ) != 0 )\r
-                               {\r
-                                       // Transfer complete, disable SPI RXBUFF interrupt.\r
-                                       spi_disable_interrupt( KSZ8851SNL_SPI, SPI_IDR_RXBUFF );\r
-\r
-                                       ul_spi_pdc_status = SPI_PDC_RX_COMPLETE;\r
-                               }\r
-                       }\r
-               }\r
-\r
-               4) Finish SPI transfer\r
-                       ksz8851snl_update()\r
-                               if( ul_spi_pdc_status == SPI_PDC_RX_COMPLETE )\r
-                               {\r
-                                       ul_spi_pdc_status = SPI_PDC_IDLE;\r
-                                       Bring KSZ8851SNL_CSN_GPIO high\r
-                                       // RX step21: end RXQ read access.\r
-                                       ksz8851_reg_clrbits(REG_RXQ_CMD, RXQ_START);\r
-                                       // RX step22-23: update frame count to be read.\r
-                                       us_pending_frame--\r
-                                       // RX step24: enable INT_RX flag if transfer complete.\r
-                                       if( us_pending_frame == 0 )\r
-                                       {\r
-                                               // Allow more RX interrupts.\r
-                                               ksz8851_reg_write( REG_INT_MASK, INT_RX );\r
-                                       }\r
-\r
-                                       // Mark descriptor ready to be read.\r
-                                       rx_ready[ rxHead ] = pdTRUE;\r
-                                       rxHead++\r
-                               }\r
-*/\r
-\r
-#define PHY_REG_00_BMCR            0x00 // Basic mode control register\r
-#define PHY_REG_01_BMSR            0x01 // Basic mode status register\r
-#define PHY_REG_02_PHYSID1         0x02 // PHYS ID 1\r
-#define PHY_REG_03_PHYSID2         0x03 // PHYS ID 2\r
-#define PHY_REG_04_ADVERTISE       0x04 // Advertisement control reg\r
-#define PHY_REG_05_LPA             0x05 // Link partner ability reg\r
-#define        PHY_REG_06_ANER            0x06 //      6       RW              Auto-Negotiation Expansion Register\r
-#define        PHY_REG_07_ANNPTR          0x07 //      7       RW              Auto-Negotiation Next Page TX\r
-#define        PHY_REG_08_RESERVED0       0x08 // 0x08..0x0Fh  8-15    RW              RESERVED\r
-\r
-#define BMSR_LINK_STATUS            0x0004  //!< Link status\r
-\r
-#ifndef        PHY_LS_HIGH_CHECK_TIME_MS\r
-       /* Check if the LinkSStatus in the PHY is still high after 15 seconds of not\r
-       receiving packets. */\r
-       #define PHY_LS_HIGH_CHECK_TIME_MS       15000\r
-#endif\r
-\r
-#ifndef        PHY_LS_LOW_CHECK_TIME_MS\r
-       /* Check if the LinkSStatus in the PHY is still low every second. */\r
-       #define PHY_LS_LOW_CHECK_TIME_MS        1000\r
-#endif\r
-\r
-/* Interrupt events to process.  Currently only the Rx event is processed\r
-although code for other events is included to allow for possible future\r
-expansion. */\r
-#define EMAC_IF_RX_EVENT                               1UL\r
-#define EMAC_IF_TX_EVENT                               2UL\r
-#define EMAC_IF_ERR_EVENT                              4UL\r
-#define EMAC_IF_ALL_EVENT                              ( EMAC_IF_RX_EVENT | EMAC_IF_TX_EVENT | EMAC_IF_ERR_EVENT )\r
-\r
-#define ETHERNET_CONF_PHY_ADDR BOARD_GMAC_PHY_ADDR\r
-\r
-#ifdef ipconfigHAS_TX_CRC_OFFLOADING\r
-       #undef ipconfigHAS_TX_CRC_OFFLOADING\r
-#endif\r
-/* Override this define because the KSZ8851 is programmed to set all outgoing CRC's */\r
-#define        ipconfigHAS_TX_CRC_OFFLOADING   1\r
-\r
-#ifndef        EMAC_MAX_BLOCK_TIME_MS\r
-       #define EMAC_MAX_BLOCK_TIME_MS  100ul\r
-#endif\r
-\r
-/* Default the size of the stack used by the EMAC deferred handler task to 4x\r
-the size of the stack used by the idle task - but allow this to be overridden in\r
-FreeRTOSConfig.h as configMINIMAL_STACK_SIZE is a user definable constant. */\r
-#ifndef configEMAC_TASK_STACK_SIZE\r
-       #define configEMAC_TASK_STACK_SIZE ( 6 * configMINIMAL_STACK_SIZE )\r
-#endif\r
-\r
-#define SPI_PDC_IDLE                   0\r
-#define SPI_PDC_RX_START               1\r
-#define SPI_PDC_TX_ERROR               2\r
-#define SPI_PDC_RX_COMPLETE            3\r
-#define SPI_PDC_TX_START               4\r
-#define SPI_PDC_RX_ERROR               5\r
-#define SPI_PDC_TX_COMPLETE            6\r
-\r
-/**\r
- * ksz8851snl driver structure.\r
- */\r
-typedef struct {\r
-       /** Set to 1 when owner is software (ready to read), 0 for Micrel. */\r
-       uint32_t rx_ready[MICREL_RX_BUFFERS];\r
-       /** Set to 1 when owner is Micrel, 0 for software. */\r
-       uint32_t tx_busy[MICREL_TX_BUFFERS];\r
-       /** RX NetworkBufferDescriptor_t pointer list */\r
-       NetworkBufferDescriptor_t *rx_buffers[MICREL_RX_BUFFERS];\r
-       /** TX NetworkBufferDescriptor_t pointer list */\r
-       NetworkBufferDescriptor_t *tx_buffers[MICREL_TX_BUFFERS];\r
-       NetworkBufferDescriptor_t *tx_cur_buffer;\r
-\r
-       /** Circular buffer head pointer for packet received. */\r
-       uint32_t us_rx_head;\r
-       /** Circular buffer tail pointer for packet to be read. */\r
-       uint32_t us_rx_tail;\r
-       /** Circular buffer head pointer by upper layer (buffer to be sent). */\r
-       uint32_t us_tx_head;\r
-       /** Circular buffer tail pointer incremented by handlers (buffer sent). */\r
-       uint32_t us_tx_tail;\r
-\r
-       uint32_t ul_total_tx;\r
-       uint32_t ul_total_rx;\r
-       uint32_t tx_space;\r
-\r
-       /** Still experimental: hash table to allow certain multicast addresses. */\r
-       uint16_t pusHashTable[ 4 ];\r
-\r
-       /* ul_spi_pdc_status has "SPI_PDC_xxx" values. */\r
-       volatile uint32_t ul_spi_pdc_status;\r
-\r
-       /* ul_had_intn_interrupt becomes true within the INTN interrupt. */\r
-       volatile uint32_t ul_had_intn_interrupt;\r
-\r
-       uint16_t us_pending_frame;\r
-} xKSZ8851_Device_t;\r
-\r
-/* SPI PDC register base.\r
-Declared in ASF\sam\components\ksz8851snl\ksz8851snl.c */\r
-extern Pdc *g_p_spi_pdc;\r
-\r
-/* Temporary buffer for PDC reception.\r
-declared in ASF\sam\components\ksz8851snl\ksz8851snl.c */\r
-extern uint8_t tmpbuf[1536];\r
-\r
-COMPILER_ALIGNED(8)\r
-static xKSZ8851_Device_t xMicrelDevice;\r
-\r
-static TaskHandle_t xTransmitHandle;\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-/*\r
- * Wait a fixed time for the link status to indicate the network is up.\r
- */\r
-static BaseType_t xGMACWaitLS( TickType_t xMaxTime );\r
-\r
-/*\r
- * A deferred interrupt handler task that processes GMAC interrupts.\r
- */\r
-static void prvEMACHandlerTask( void *pvParameters );\r
-\r
-/*\r
- * Try to obtain an Rx packet from the hardware.\r
- */\r
-static uint32_t prvEMACRxPoll( void );\r
-\r
-static inline unsigned long ulReadMDIO( unsigned uAddress );\r
-\r
-static void ksz8851snl_low_level_init( void );\r
-\r
-static NetworkBufferDescriptor_t *ksz8851snl_low_level_input( void );\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-/* Bit map of outstanding ETH interrupt events for processing.  Currently only\r
-the Rx interrupt is handled, although code is included for other events to\r
-enable future expansion. */\r
-static volatile uint32_t ulISREvents;\r
-\r
-/* A copy of PHY register 1: 'PHY_REG_01_BMSR' */\r
-static uint32_t ulPHYLinkStatus = 0;\r
-static volatile BaseType_t xGMACSwitchRequired;\r
-\r
-static void ksz8851snl_update( void );\r
-\r
-static void ksz8851snl_rx_init( void );\r
-\r
-static void ksz8851snl_tx_init( void );\r
-\r
-/* Holds the handle of the task used as a deferred interrupt processor.  The\r
-handle is used so direct notifications can be sent to the task for all EMAC/DMA\r
-related interrupts. */\r
-TaskHandle_t xEMACTaskHandle = NULL;\r
-\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-BaseType_t xNetworkInterfaceInitialise( void )\r
-{\r
-const TickType_t x5_Seconds = 5000UL;\r
-\r
-       if( xEMACTaskHandle == NULL )\r
-       {\r
-               ksz8851snl_low_level_init();\r
-\r
-               /* Wait at most 5 seconds for a Link Status in the PHY. */\r
-               xGMACWaitLS( pdMS_TO_TICKS( x5_Seconds ) );\r
-\r
-               /* The handler task is created at the highest possible priority to\r
-               ensure the interrupt handler can return directly to it. */\r
-               xTaskCreate( prvEMACHandlerTask, "KSZ8851", configEMAC_TASK_STACK_SIZE, NULL, configMAX_PRIORITIES - 1, &xEMACTaskHandle );\r
-               configASSERT( xEMACTaskHandle );\r
-       }\r
-\r
-       /* When returning non-zero, the stack will become active and\r
-    start DHCP (in configured) */\r
-       ulPHYLinkStatus = ulReadMDIO( PHY_REG_01_BMSR );\r
-\r
-       return ( ulPHYLinkStatus & BMSR_LINK_STATUS ) != 0;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-BaseType_t xGetPhyLinkStatus( void )\r
-{\r
-BaseType_t xResult;\r
-\r
-       /* This function returns true if the Link Status in the PHY is high. */\r
-       if( ( ulPHYLinkStatus & BMSR_LINK_STATUS ) != 0 )\r
-       {\r
-               xResult = pdTRUE;\r
-       }\r
-       else\r
-       {\r
-               xResult = pdFALSE;\r
-       }\r
-\r
-       return xResult;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-BaseType_t xNetworkInterfaceOutput( NetworkBufferDescriptor_t * const pxNetworkBuffer, BaseType_t bReleaseAfterSend )\r
-{\r
-BaseType_t xResult = pdFALSE;\r
-int txHead = xMicrelDevice.us_tx_head;\r
-\r
-       /* Make sure the next descriptor is free. */\r
-       if( xMicrelDevice.tx_busy[ txHead ] != pdFALSE )\r
-       {\r
-               /* All TX buffers busy. */\r
-       }\r
-       else if( ( ulPHYLinkStatus & BMSR_LINK_STATUS ) == 0 )\r
-       {\r
-               /* Output: LS low. */\r
-       }\r
-       else\r
-       {\r
-               /* Pass the packet. */\r
-               xMicrelDevice.tx_buffers[ txHead ] = pxNetworkBuffer;\r
-               /* The descriptor is now owned by Micrel. */\r
-               xMicrelDevice.tx_busy[ txHead ] = pdTRUE;\r
-\r
-               /* Move the head pointer. */\r
-               if( ++txHead == MICREL_TX_BUFFERS )\r
-               {\r
-                       txHead = 0;\r
-               }\r
-               xMicrelDevice.us_tx_head = txHead;\r
-               if( xEMACTaskHandle != NULL )\r
-               {\r
-                       xTaskNotifyGive( xEMACTaskHandle );\r
-               }\r
-\r
-       #if( ipconfigZERO_COPY_TX_DRIVER != 1 )\r
-               #warning Please ipconfigZERO_COPY_TX_DRIVER as 1\r
-       #endif\r
-               configASSERT( bReleaseAfterSend != pdFALSE );\r
-               xResult = pdTRUE;\r
-       }\r
-       if( ( xResult == pdFALSE ) && ( bReleaseAfterSend  != pdFALSE ) )\r
-       {\r
-               vReleaseNetworkBufferAndDescriptor( pxNetworkBuffer );\r
-       }\r
-       return xResult;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-/* This Micrel has numbered it's PHY registers in a different way.\r
-Translate the register index. */\r
-static int ks8851_phy_reg( int reg )\r
-{\r
-       switch (reg) {\r
-       case PHY_REG_00_BMCR:\r
-               return REG_PHY_CNTL;    // P1MBCR;\r
-       case PHY_REG_01_BMSR:\r
-               return REG_PHY_STATUS;\r
-       case PHY_REG_02_PHYSID1:\r
-               return REG_PHY_ID_LOW;\r
-       case PHY_REG_03_PHYSID2:\r
-               return REG_PHY_ID_HIGH;\r
-       case PHY_REG_04_ADVERTISE:\r
-               return REG_PHY_AUTO_NEGOTIATION;\r
-       case PHY_REG_05_LPA:\r
-               return REG_PHY_REMOTE_CAPABILITY;\r
-       }\r
-\r
-       return 0x0;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static inline unsigned long ulReadMDIO( unsigned uAddress )\r
-{\r
-uint16_t usPHYStatus;\r
-int ks8851_reg = ks8851_phy_reg( uAddress );\r
-\r
-       if( ks8851_reg != 0 )\r
-       {\r
-               usPHYStatus = ksz8851_reg_read( ks8851_reg );\r
-       }\r
-       else\r
-       {\r
-               /* Other addresses not yet implemented. */\r
-               usPHYStatus = 0;\r
-       }\r
-       return usPHYStatus;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static BaseType_t xGMACWaitLS( TickType_t xMaxTime )\r
-{\r
-TickType_t xStartTime = xTaskGetTickCount();\r
-TickType_t xEndTime;\r
-BaseType_t xReturn;\r
-const TickType_t xShortTime = pdMS_TO_TICKS( 100UL );\r
-const uint32_t ulHz_Per_MHz = 1000000UL;\r
-\r
-       for( ;; )\r
-       {\r
-               xEndTime = xTaskGetTickCount();\r
-\r
-               if( ( xEndTime - xStartTime ) > xMaxTime )\r
-               {\r
-                       /* Wated more than xMaxTime, return. */\r
-                       xReturn = pdFALSE;\r
-                       break;\r
-               }\r
-\r
-               /* Check the link status again. */\r
-               ulPHYLinkStatus = ulReadMDIO( PHY_REG_01_BMSR );\r
-\r
-               if( ( ulPHYLinkStatus & BMSR_LINK_STATUS ) != 0 )\r
-               {\r
-                       /* Link is up - return. */\r
-                       xReturn = pdTRUE;\r
-                       break;\r
-               }\r
-\r
-               /* Link is down - wait in the Blocked state for a short while (to allow\r
-               other tasks to execute) before checking again. */\r
-               vTaskDelay( xShortTime );\r
-       }\r
-\r
-       FreeRTOS_printf( ( "xGMACWaitLS: %ld freq %lu Mz\n",\r
-               xReturn,\r
-               sysclk_get_cpu_hz() / ulHz_Per_MHz ) );\r
-\r
-       return xReturn;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void vPioSetPinHigh(uint32_t ul_pin)\r
-{\r
-       Pio *p_pio = (Pio *)((uint32_t)PIOA + (PIO_DELTA * (ul_pin >> 5)));\r
-       // Value to be driven on the I/O line: 1.\r
-       p_pio->PIO_SODR = 1 << (ul_pin & 0x1F);\r
-}\r
-\r
-/**\r
- * \brief Handler for SPI interrupt.\r
- */\r
-void SPI_Handler(void)\r
-{\r
-BaseType_t xDoWakeup = pdFALSE;\r
-BaseType_t xKSZTaskWoken = pdFALSE;\r
-uint32_t ulCurrentSPIStatus;\r
-uint32_t ulEnabledSPIStatus;\r
-\r
-       ulCurrentSPIStatus = spi_read_status( KSZ8851SNL_SPI );\r
-       ulEnabledSPIStatus = spi_read_interrupt_mask( KSZ8851SNL_SPI );\r
-       ulCurrentSPIStatus &= ulEnabledSPIStatus;\r
-       spi_disable_interrupt( KSZ8851SNL_SPI, ulCurrentSPIStatus );\r
-\r
-\r
-       switch( xMicrelDevice.ul_spi_pdc_status )\r
-       {\r
-               case SPI_PDC_RX_START:\r
-               {\r
-                       if( ( ulCurrentSPIStatus & SPI_SR_OVRES ) != 0 )\r
-                       {\r
-                               pdc_disable_transfer(g_p_spi_pdc, PERIPH_PTCR_RXTDIS | PERIPH_PTCR_TXTDIS);\r
-                               xMicrelDevice.ul_spi_pdc_status = SPI_PDC_RX_ERROR;\r
-                               xDoWakeup = pdTRUE;\r
-                       }\r
-                       else\r
-                       {\r
-                               if( ( ulCurrentSPIStatus & SPI_SR_RXBUFF ) != 0 )\r
-                               {\r
-                                       xMicrelDevice.ul_spi_pdc_status = SPI_PDC_RX_COMPLETE;\r
-                                       xDoWakeup = pdTRUE;\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-               case SPI_PDC_TX_START:\r
-               {\r
-                       /* Middle of TX. */\r
-                       if( ( ulCurrentSPIStatus & SPI_SR_OVRES ) != 0 )\r
-                       {\r
-                               pdc_disable_transfer(g_p_spi_pdc, PERIPH_PTCR_RXTDIS | PERIPH_PTCR_TXTDIS);\r
-                               xMicrelDevice.ul_spi_pdc_status = SPI_PDC_TX_ERROR;\r
-                               xDoWakeup = pdTRUE;\r
-                       }\r
-                       else\r
-                       {\r
-                               if( ( ulCurrentSPIStatus & SPI_SR_ENDRX ) != 0 )\r
-                               {\r
-                                       /* Enable RX complete interrupt. */\r
-                                       spi_enable_interrupt( KSZ8851SNL_SPI, SPI_IER_RXBUFF );\r
-                               }\r
-                               /* End of TX. */\r
-                               if( ( ulCurrentSPIStatus & SPI_END_OF_TX ) != 0 )\r
-                               {\r
-                                       xMicrelDevice.ul_spi_pdc_status = SPI_PDC_TX_COMPLETE;\r
-                                       xDoWakeup = pdTRUE;\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-       }       /* switch( xMicrelDevice.ul_spi_pdc_status ) */\r
-\r
-       if( xDoWakeup != pdFALSE )\r
-       {\r
-               if( xEMACTaskHandle != NULL )\r
-               {\r
-                       vTaskNotifyGiveFromISR( xEMACTaskHandle, ( BaseType_t * ) &xKSZTaskWoken );\r
-               }\r
-       }\r
-       else\r
-       {\r
-       }\r
-       portEND_SWITCHING_ISR( xKSZTaskWoken );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void INTN_Handler(uint32_t id, uint32_t mask)\r
-{\r
-BaseType_t xKSZTaskWoken = pdFALSE;\r
-\r
-       if( ( id == INTN_ID ) &&\r
-               ( mask == INTN_PIN_MSK ) )\r
-       {\r
-               /* Clear the PIO interrupt flags. */\r
-               pio_get_interrupt_status( INTN_PIO );\r
-\r
-               /* Set the INTN flag. */\r
-               xMicrelDevice.ul_had_intn_interrupt++;\r
-               if( xEMACTaskHandle != NULL )\r
-               {\r
-                       vTaskNotifyGiveFromISR( xEMACTaskHandle, &( xKSZTaskWoken ) );\r
-               }\r
-       }\r
-       portEND_SWITCHING_ISR( xKSZTaskWoken );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-/**\r
- * \brief Populate the RX descriptor ring buffers with pbufs.\r
- *\r
- * \param p_ksz8851snl_dev Pointer to driver data structure.\r
- */\r
-static void ksz8851snl_rx_populate_queue( void )\r
-{\r
-       uint32_t ul_index = 0;\r
-       NetworkBufferDescriptor_t *pxNetworkBuffer;\r
-\r
-       /* Set up the RX descriptors */\r
-       for (ul_index = 0; ul_index < MICREL_RX_BUFFERS; ul_index++) {\r
-               if( xMicrelDevice.rx_buffers[ ul_index ] == NULL )\r
-               {\r
-                       /* Allocate a new NetworkBufferDescriptor_t with the maximum size. */\r
-                       pxNetworkBuffer = pxGetNetworkBufferWithDescriptor( ipconfigNETWORK_MTU + 36, 100 );\r
-                       if( pxNetworkBuffer == NULL )\r
-                       {\r
-                               FreeRTOS_printf( ( "ksz8851snl_rx_populate_queue: NetworkBufferDescriptor_t allocation failure\n" ) );\r
-                               configASSERT( 1 == 2 );\r
-                       }\r
-\r
-                       /* Make sure lwIP is well configured so one NetworkBufferDescriptor_t can contain the maximum packet size. */\r
-                       //LWIP_ASSERT("ksz8851snl_rx_populate_queue: NetworkBufferDescriptor_t size too small!", pbuf_clen(pxNetworkBuffer) <= 1);\r
-\r
-                       /* Save NetworkBufferDescriptor_t pointer to be sent to lwIP upper layer. */\r
-                       xMicrelDevice.rx_buffers[ ul_index ] = pxNetworkBuffer;\r
-                       /* Pass it to Micrel for reception. */\r
-                       xMicrelDevice.rx_ready[ ul_index ] = pdFALSE;\r
-               }\r
-       }\r
-}\r
-\r
-unsigned tx_space, wait_tx_space, tx_status, fhr_status;\r
-unsigned rx_debug = 0;\r
-/**\r
- * \brief Update Micrel state machine and perform required actions.\r
- *\r
- * \param netif the lwIP network interface structure for this ethernetif.\r
- */\r
-static void ksz8851snl_update()\r
-{\r
-       uint16_t txmir = 0;\r
-\r
-/* Check for free PDC. */\r
-       switch( xMicrelDevice.ul_spi_pdc_status )\r
-       {\r
-       case SPI_PDC_TX_ERROR:\r
-               {\r
-               uint32_t ulValue;\r
-       //              /* TX step11: end TX transfer. */\r
-                       gpio_set_pin_high( KSZ8851SNL_CSN_GPIO );\r
-\r
-                       vTaskDelay( 2 ); gpio_set_pin_low( KSZ8851SNL_CSN_GPIO );\r
-                       vTaskDelay( 1 ); gpio_set_pin_high( KSZ8851SNL_CSN_GPIO );\r
-                       vTaskDelay( 1 );\r
-\r
-                       /* Disable asynchronous transfer mode. */\r
-                       xMicrelDevice.ul_spi_pdc_status = SPI_PDC_IDLE;\r
-\r
-                       /* TX step12: disable TXQ write access. */\r
-                       ksz8851_reg_clrbits( REG_RXQ_CMD, RXQ_START );\r
-\r
-                       ulValue = ksz8851snl_reset_tx();\r
-\r
-                       xMicrelDevice.tx_space = ksz8851_reg_read( REG_TX_MEM_INFO ) & TX_MEM_AVAILABLE_MASK;\r
-\r
-                       FreeRTOS_printf( ("SPI_PDC_TX_ERROR %02X\n", ulValue ) );\r
-               }\r
-               break;\r
-\r
-       case SPI_PDC_RX_ERROR:\r
-               {\r
-               uint32_t ulValue;\r
-                       /* TX step11: end TX transfer. */\r
-                       gpio_set_pin_high( KSZ8851SNL_CSN_GPIO );\r
-\r
-                       vTaskDelay( 2 ); gpio_set_pin_low( KSZ8851SNL_CSN_GPIO );\r
-                       vTaskDelay( 1 ); gpio_set_pin_high( KSZ8851SNL_CSN_GPIO );\r
-                       vTaskDelay( 1 );\r
-\r
-                       /* Disable asynchronous transfer mode. */\r
-                       xMicrelDevice.ul_spi_pdc_status = SPI_PDC_IDLE;\r
-\r
-                       /* TX step12: disable TXQ write access. */\r
-                       ksz8851_reg_clrbits( REG_RXQ_CMD, RXQ_START );\r
-\r
-                       //ulValue = ksz8851snl_reset_rx();\r
-                       ulValue = ksz8851snl_reinit();\r
-\r
-                       xGMACWaitLS( pdMS_TO_TICKS( 5000UL ) );\r
-\r
-                       FreeRTOS_printf( ("SPI_PDC_RX_ERROR %02X\n", ulValue ) );\r
-               }\r
-               break;\r
-       }\r
-       switch( xMicrelDevice.ul_spi_pdc_status )\r
-       {\r
-               case SPI_PDC_IDLE:\r
-               {\r
-               int txTail = xMicrelDevice.us_tx_tail;\r
-\r
-                       /*\r
-                        * ========================== Handle RX ==========================\r
-                        */\r
-                       if( ( xMicrelDevice.ul_had_intn_interrupt != 0 ) || ( xMicrelDevice.us_pending_frame > 0 ) )\r
-                       {\r
-                       int rxHead = xMicrelDevice.us_rx_head;\r
-                       NetworkBufferDescriptor_t *pxNetworkBuffer;\r
-#warning try\r
-                               xMicrelDevice.ul_had_intn_interrupt = 0;\r
-\r
-                               if( xMicrelDevice.us_pending_frame == 0 )\r
-                               {\r
-                               uint16_t int_status;\r
-                                       /* RX step1: read interrupt status for INT_RX flag. */\r
-                                       int_status = ksz8851_reg_read( REG_INT_STATUS );\r
-\r
-\r
-                                       /* RX step2: disable all interrupts. */\r
-                                       ksz8851_reg_write( REG_INT_MASK, 0 );\r
-\r
-                                       /* RX step3: clear INT_RX flag. */\r
-                                       ksz8851_reg_setbits( REG_INT_STATUS, INT_RX );\r
-\r
-                                       /* RX step4-5: check for received frames. */\r
-                                       xMicrelDevice.us_pending_frame = ksz8851_reg_read(REG_RX_FRAME_CNT_THRES) >> 8;\r
-                                       if( xMicrelDevice.us_pending_frame == 0 )\r
-                                       {\r
-                                               /* RX step24: enable INT_RX flag. */\r
-                                               ksz8851_reg_write(REG_INT_MASK, INT_RX);\r
-                                               return;\r
-                                       }\r
-                               }\r
-#warning try\r
-                               xMicrelDevice.ul_had_intn_interrupt = 0;\r
-\r
-                               /* Now xMicrelDevice.us_pending_frame != 0 */\r
-\r
-                               /* Don't break Micrel state machine, wait for a free descriptor first! */\r
-                               if( xMicrelDevice.rx_ready[ rxHead ] != pdFALSE )\r
-                               {\r
-                                       FreeRTOS_printf( ( "ksz8851snl_update: out of free descriptor! [tail=%u head=%u]\n",\r
-                                                       xMicrelDevice.us_rx_tail, rxHead ) );\r
-                                       return;\r
-                               }\r
-                               pxNetworkBuffer = xMicrelDevice.rx_buffers[ rxHead ];\r
-\r
-                               if( pxNetworkBuffer == NULL )\r
-                               {\r
-                                       ksz8851snl_rx_populate_queue();\r
-                                       FreeRTOS_printf( ( "ksz8851snl_update: no buffer set [head=%u]\n", rxHead ) );\r
-                                       return;\r
-                               }\r
-\r
-                               /* RX step6: get RX packet status. */\r
-                               fhr_status = ksz8851_reg_read( REG_RX_FHR_STATUS );\r
-                               if( ( ( fhr_status & RX_VALID ) == 0 ) || ( ( fhr_status & RX_ERRORS ) != 0 ) )\r
-                               {\r
-                                       ksz8851_reg_setbits(REG_RXQ_CMD, RXQ_CMD_FREE_PACKET);\r
-                                       FreeRTOS_printf( ( "ksz8851snl_update: RX packet error!\n" ) );\r
-\r
-                                       /* RX step4-5: check for received frames. */\r
-                                       xMicrelDevice.us_pending_frame = ksz8851_reg_read(REG_RX_FRAME_CNT_THRES) >> 8;\r
-                                       if( xMicrelDevice.us_pending_frame == 0 )\r
-                                       {\r
-                                               /* RX step24: enable INT_RX flag. */\r
-                                               ksz8851_reg_write(REG_INT_MASK, INT_RX);\r
-                                       }\r
-                                       ulISREvents |= EMAC_IF_ERR_EVENT;\r
-                               }\r
-                               else\r
-                               {\r
-                               size_t xLength;\r
-                                       /* RX step7: read frame length. */\r
-                                       xLength = ksz8851_reg_read(REG_RX_FHR_BYTE_CNT) & RX_BYTE_CNT_MASK;\r
-\r
-                                       /* RX step8: Drop packet if len is invalid or no descriptor available. */\r
-                                       if( xLength == 0 )\r
-                                       {\r
-                                               ksz8851_reg_setbits( REG_RXQ_CMD, RXQ_CMD_FREE_PACKET );\r
-                                               FreeRTOS_printf( ( "ksz8851snl_update: RX bad len!\n" ) );\r
-                                               ulISREvents |= EMAC_IF_ERR_EVENT;\r
-                                       }\r
-                                       else\r
-                                       {\r
-                                       size_t xReadLength = xLength;\r
-\r
-                                               xMicrelDevice.ul_total_rx++;\r
-                                               /* RX step9: reset RX frame pointer. */\r
-                                               ksz8851_reg_clrbits(REG_RX_ADDR_PTR, ADDR_PTR_MASK);\r
-\r
-                                               /* RX step10: start RXQ read access. */\r
-                                               ksz8851_reg_setbits(REG_RXQ_CMD, RXQ_START);\r
-                                               /* RX step11-17: start asynchronous FIFO read operation. */\r
-                                               xMicrelDevice.ul_spi_pdc_status = SPI_PDC_RX_START;\r
-                                               gpio_set_pin_low( KSZ8851SNL_CSN_GPIO );\r
-                                               if( ( xReadLength & ( sizeof( size_t ) - 1 ) ) != 0 )\r
-                                               {\r
-                                                       xReadLength = ( xReadLength | ( sizeof( size_t ) - 1 ) ) + 1;\r
-                                               }\r
-\r
-                                               /* Pass the buffer minus 2 bytes, see ksz8851snl.c: RXQ_TWOBYTE_OFFSET. */\r
-                                               ksz8851_fifo_read( pxNetworkBuffer->pucEthernetBuffer - 2, xReadLength );\r
-                                               /* Remove CRC and update buffer length. */\r
-                                               xLength -= 4;\r
-                                               pxNetworkBuffer->xDataLength = xLength;\r
-                                               /* Wait for SPI interrupt to set status 'SPI_PDC_RX_COMPLETE'. */\r
-                                       }\r
-                               }\r
-                               break;\r
-                       } /* ul_had_intn_interrupt || us_pending_frame */\r
-                       /*\r
-                        * ========================== Handle TX ==========================\r
-                        */\r
-\r
-                       /* Fetch next packet to be sent. */\r
-                       if( ( xMicrelDevice.tx_busy[ txTail ] != pdFALSE ) &&\r
-                               ( xMicrelDevice.us_pending_frame == 0 ) &&\r
-                               ( xMicrelDevice.ul_had_intn_interrupt == 0 ) )\r
-                       {\r
-                       NetworkBufferDescriptor_t *pxNetworkBuffer = xMicrelDevice.tx_buffers[ txTail ];\r
-                       size_t xLength = pxNetworkBuffer->xDataLength;\r
-                       int iIndex = xLength;\r
-\r
-                               xLength = 4 * ( ( xLength + 3 ) / 4 );\r
-                               while( iIndex < ( int ) xLength )\r
-                               {\r
-                                       pxNetworkBuffer->pucEthernetBuffer[ iIndex ] = '\0';\r
-                                       iIndex++;\r
-                               }\r
-                               pxNetworkBuffer->xDataLength = xLength;\r
-\r
-                               /* TX step1: check if TXQ memory size is available for transmit. */\r
-                               txmir = ksz8851_reg_read( REG_TX_MEM_INFO );\r
-                               txmir = txmir & TX_MEM_AVAILABLE_MASK;\r
-\r
-                               if( txmir < ( xLength + 8 ) )\r
-                               {\r
-                                       if( wait_tx_space == pdFALSE )\r
-                                       {\r
-                                               tx_status = ksz8851_reg_read( REG_TX_STATUS );\r
-                                               fhr_status = ksz8851_reg_read( REG_RX_FHR_STATUS );\r
-                                               wait_tx_space = pdTRUE;\r
-                                       }\r
-                                       //return;\r
-                                       rx_debug = 1;\r
-                                       tx_space = txmir;\r
-                               }\r
-                               else\r
-                               {\r
-                                       tx_space = txmir;\r
-\r
-                                       /* TX step2: disable all interrupts. */\r
-                                       ksz8851_reg_write( REG_INT_MASK, 0 );\r
-\r
-                                       xMicrelDevice.tx_space -= xLength;\r
-\r
-                                       /* TX step3: enable TXQ write access. */\r
-                                       ksz8851_reg_setbits( REG_RXQ_CMD, RXQ_START );\r
-                                       /* TX step4-8: perform FIFO write operation. */\r
-                                       xMicrelDevice.ul_spi_pdc_status = SPI_PDC_TX_START;\r
-                                       xMicrelDevice.tx_cur_buffer = pxNetworkBuffer;\r
-                                       /* Bring SPI SS low. */\r
-                                       gpio_set_pin_low( KSZ8851SNL_CSN_GPIO );\r
-                                       xMicrelDevice.ul_total_tx++;\r
-\r
-                                       ksz8851_fifo_write( pxNetworkBuffer->pucEthernetBuffer, xLength, xLength );\r
-                               }\r
-                       }\r
-               }\r
-               break;  /* SPI_PDC_IDLE */\r
-\r
-       case SPI_PDC_RX_COMPLETE:\r
-               {\r
-               int rxHead = xMicrelDevice.us_rx_head;\r
-                       /* RX step18-19: pad with dummy data to keep dword alignment. */\r
-                       /* Packet lengths will be rounded up to a multiple of "sizeof size_t". */\r
-//                     xLength = xMicrelDevice.rx_buffers[ rxHead ]->xDataLength & 3;\r
-//                     if( xLength != 0 )\r
-//                     {\r
-//                             ksz8851_fifo_dummy( 4 - xLength );\r
-//                     }\r
-\r
-                       /* RX step20: end RX transfer. */\r
-                       gpio_set_pin_high( KSZ8851SNL_CSN_GPIO );\r
-\r
-                       /* Disable asynchronous transfer mode. */\r
-                       xMicrelDevice.ul_spi_pdc_status = SPI_PDC_IDLE;\r
-\r
-                       /* RX step21: end RXQ read access. */\r
-                       ksz8851_reg_clrbits(REG_RXQ_CMD, RXQ_START);\r
-\r
-                       /* RX step22-23: update frame count to be read. */\r
-                       xMicrelDevice.us_pending_frame -= 1;\r
-\r
-                       /* RX step24: enable INT_RX flag if transfer complete. */\r
-                       if( xMicrelDevice.us_pending_frame == 0 )\r
-                       {\r
-                               ksz8851_reg_write(REG_INT_MASK, INT_RX);\r
-                       }\r
-\r
-                       /* Mark descriptor ready to be read. */\r
-                       xMicrelDevice.rx_ready[ rxHead ] = pdTRUE;\r
-                       if( ++rxHead == MICREL_RX_BUFFERS )\r
-                       {\r
-                               rxHead = 0;\r
-                       }\r
-                       xMicrelDevice.us_rx_head = rxHead;\r
-                       if( rx_debug != 0 )\r
-                       {\r
-                       uint32_t txmir;\r
-                               rx_debug = 0;\r
-                               txmir = ksz8851_reg_read( REG_TX_MEM_INFO );\r
-                               txmir = txmir & TX_MEM_AVAILABLE_MASK;\r
-                       }\r
-                       /* Tell prvEMACHandlerTask that RX packets are available. */\r
-                       ulISREvents |= EMAC_IF_RX_EVENT;\r
-               }       /* case SPI_PDC_RX_COMPLETE */\r
-               break;\r
-\r
-       case SPI_PDC_TX_COMPLETE:\r
-               {\r
-               int txTail = xMicrelDevice.us_tx_tail;\r
-               NetworkBufferDescriptor_t *pxNetworkBuffer = xMicrelDevice.tx_buffers[ txTail ];\r
-\r
-               size_t xLength;\r
-                       /* TX step9-10: pad with dummy data to keep dword alignment. */\r
-                       /* Not necessary: length is already a multiple of 4. */\r
-                       xLength = pxNetworkBuffer->xDataLength & 3;\r
-                       if( xLength != 0 )\r
-                       {\r
-//                             ksz8851_fifo_dummy( 4 - xLength );\r
-                       }\r
-\r
-//                     /* TX step11: end TX transfer. */\r
-                       gpio_set_pin_high( KSZ8851SNL_CSN_GPIO );\r
-\r
-                       /* Disable asynchronous transfer mode. */\r
-                       xMicrelDevice.ul_spi_pdc_status = SPI_PDC_IDLE;\r
-\r
-                       /* TX step12: disable TXQ write access. */\r
-                       ksz8851_reg_clrbits( REG_RXQ_CMD, RXQ_START );\r
-\r
-                       xMicrelDevice.tx_space = ksz8851_reg_read( REG_TX_MEM_INFO ) & TX_MEM_AVAILABLE_MASK;\r
-\r
-                       /* TX step12.1: enqueue frame in TXQ. */\r
-                       ksz8851_reg_setbits( REG_TXQ_CMD, TXQ_ENQUEUE );\r
-\r
-                       /* RX step13: enable INT_RX flag. */\r
-//                     ksz8851_reg_write( REG_INT_MASK, INT_RX );\r
-                       /* Buffer sent, free the corresponding buffer and mark descriptor as owned by software. */\r
-                       vReleaseNetworkBufferAndDescriptor( pxNetworkBuffer );\r
-\r
-                       xMicrelDevice.tx_buffers[ txTail ] = NULL;\r
-                       xMicrelDevice.tx_busy[ txTail ] = pdFALSE;\r
-                       if( ++txTail == MICREL_TX_BUFFERS )\r
-                       {\r
-                               txTail = 0;\r
-                       }\r
-\r
-                       xMicrelDevice.us_tx_tail = txTail;\r
-                       /* Experiment. */\r
-                       //xMicrelDevice.ul_had_intn_interrupt = 1;\r
-                       if( xTransmitHandle != NULL )\r
-                       {\r
-                               xTaskNotifyGive( xTransmitHandle );\r
-                       }\r
-#warning moved downward\r
-                       /* RX step13: enable INT_RX flag. */\r
-                       ksz8851_reg_write( REG_INT_MASK, INT_RX );\r
-                       /* Prevent the EMAC task from sleeping a single time. */\r
-                       ulISREvents |= EMAC_IF_TX_EVENT;\r
-               }       /* case SPI_PDC_TX_COMPLETE */\r
-               break;\r
-       }       /* switch( xMicrelDevice.ul_spi_pdc_status ) */\r
-}\r
-\r
-/**\r
- * \brief Set up the RX descriptor ring buffers.\r
- *\r
- * This function sets up the descriptor list used for RX packets.\r
- *\r
- */\r
-static void ksz8851snl_rx_init()\r
-{\r
-       uint32_t ul_index = 0;\r
-\r
-       /* Init pointer index. */\r
-       xMicrelDevice.us_rx_head = 0;\r
-       xMicrelDevice.us_rx_tail = 0;\r
-\r
-       /* Set up the RX descriptors. */\r
-       for (ul_index = 0; ul_index < MICREL_RX_BUFFERS; ul_index++) {\r
-               xMicrelDevice.rx_buffers[ul_index] = NULL;\r
-               xMicrelDevice.rx_ready[ul_index] = pdFALSE;\r
-       }\r
-\r
-       /* Build RX buffer and descriptors. */\r
-       ksz8851snl_rx_populate_queue();\r
-}\r
-\r
-/**\r
- * \brief Set up the TX descriptor ring buffers.\r
- *\r
- * This function sets up the descriptor list used for TX packets.\r
- *\r
- */\r
-static void ksz8851snl_tx_init()\r
-{\r
-       uint32_t ul_index = 0;\r
-\r
-       /* Init TX index pointer. */\r
-       xMicrelDevice.us_tx_head = 0;\r
-       xMicrelDevice.us_tx_tail = 0;\r
-\r
-       /* Set up the TX descriptors */\r
-       for( ul_index = 0; ul_index < MICREL_TX_BUFFERS; ul_index++ )\r
-       {\r
-               xMicrelDevice.tx_busy[ul_index] = pdFALSE;\r
-       }\r
-       xMicrelDevice.tx_space = 6144;\r
-}\r
-\r
-/**\r
- * \brief Initialize ksz8851snl ethernet controller.\r
- *\r
- * \note Called from ethernetif_init().\r
- *\r
- * \param netif the lwIP network interface structure for this ethernetif.\r
- */\r
-static void ksz8851snl_low_level_init( void )\r
-{\r
-       ksz8851snl_rx_init();\r
-       ksz8851snl_tx_init();\r
-\r
-       /* Enable NVIC interrupts. */\r
-       NVIC_SetPriority(SPI_IRQn, INT_PRIORITY_SPI);\r
-       NVIC_EnableIRQ(SPI_IRQn);\r
-\r
-       /* Initialize SPI link. */\r
-       if( ksz8851snl_init() < 0 )\r
-       {\r
-               FreeRTOS_printf( ( "ksz8851snl_low_level_init: failed to initialize the Micrel driver!\n" ) );\r
-               configASSERT(0 == 1);\r
-       }\r
-       memset( xMicrelDevice.pusHashTable, 255, sizeof( xMicrelDevice.pusHashTable ) );\r
-       ksz8851_reg_write( REG_MAC_HASH_0, FreeRTOS_htons( xMicrelDevice.pusHashTable[ 0 ] ) );\r
-       ksz8851_reg_write( REG_MAC_HASH_2, FreeRTOS_htons( xMicrelDevice.pusHashTable[ 1 ] ) );\r
-       ksz8851_reg_write( REG_MAC_HASH_4, FreeRTOS_htons( xMicrelDevice.pusHashTable[ 2 ] ) );\r
-       ksz8851_reg_write( REG_MAC_HASH_6, FreeRTOS_htons( xMicrelDevice.pusHashTable[ 3 ] ) );\r
-\r
-       /* Initialize interrupt line INTN. */\r
-       configure_intn( INTN_Handler );\r
-}\r
-\r
-/**\r
- * \brief Use pre-allocated pbuf as DMA source and return the incoming packet.\r
- *\r
- * \param netif the lwIP network interface structure for this ethernetif.\r
- *\r
- * \return a pbuf filled with the received packet (including MAC header).\r
- * 0 on memory error.\r
- */\r
-static NetworkBufferDescriptor_t *ksz8851snl_low_level_input( void )\r
-{\r
-NetworkBufferDescriptor_t *pxNetworkBuffer = NULL;\r
-int rxTail = xMicrelDevice.us_rx_tail;\r
-\r
-       /* Check that descriptor is owned by software (ie packet received). */\r
-       if( xMicrelDevice.rx_ready[ rxTail ] != pdFALSE )\r
-       {\r
-\r
-               /* Fetch pre-allocated buffer */\r
-               pxNetworkBuffer = xMicrelDevice.rx_buffers[ rxTail ];\r
-\r
-               /* Remove this pbuf from its descriptor. */\r
-               xMicrelDevice.rx_buffers[ rxTail ] = NULL;\r
-\r
-               /* Clears rx_ready and sets rx_buffers. */\r
-               ksz8851snl_rx_populate_queue();\r
-\r
-               if( ++rxTail == MICREL_RX_BUFFERS )\r
-               {\r
-                       rxTail = 0;\r
-               }\r
-               xMicrelDevice.us_rx_tail = rxTail;\r
-       }\r
-\r
-       return pxNetworkBuffer;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static uint32_t prvEMACRxPoll( void )\r
-{\r
-NetworkBufferDescriptor_t *pxNetworkBuffer;\r
-IPStackEvent_t xRxEvent = { eNetworkRxEvent, NULL };\r
-uint32_t ulReturnValue = 0;\r
-\r
-       for( ;; )\r
-       {\r
-       /* Only for logging. */\r
-       int rxTail = xMicrelDevice.us_rx_tail;\r
-       EthernetHeader_t *pxEthernetHeader;\r
-\r
-       pxNetworkBuffer = ksz8851snl_low_level_input();\r
-       \r
-               if( pxNetworkBuffer == NULL )\r
-               {\r
-                       break;\r
-               }\r
-               pxEthernetHeader = ( EthernetHeader_t * ) ( pxNetworkBuffer->pucEthernetBuffer );\r
-\r
-               if( ( pxEthernetHeader->usFrameType != ipIPv4_FRAME_TYPE ) &&\r
-                       ( pxEthernetHeader->usFrameType != ipARP_FRAME_TYPE     ) )\r
-               {\r
-                       FreeRTOS_printf( ( "Frame type %02X received\n", pxEthernetHeader->usFrameType ) );\r
-               }\r
-               ulReturnValue++;\r
-\r
-               xRxEvent.pvData = ( void * )pxNetworkBuffer;\r
-               /* Send the descriptor to the IP task for processing. */\r
-               if( xSendEventStructToIPTask( &xRxEvent, 100UL ) != pdTRUE )\r
-               {\r
-                       vReleaseNetworkBufferAndDescriptor( pxNetworkBuffer );\r
-                       iptraceETHERNET_RX_EVENT_LOST();\r
-                       FreeRTOS_printf( ( "prvEMACRxPoll: Can not queue return packet!\n" ) );\r
-               }\r
-       }\r
-\r
-       return ulReturnValue;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvEMACHandlerTask( void *pvParameters )\r
-{\r
-TimeOut_t xPhyTime;\r
-TickType_t xPhyRemTime;\r
-TickType_t xLoggingTime;\r
-UBaseType_t uxLastMinBufferCount = 0;\r
-UBaseType_t uxCurrentCount;\r
-BaseType_t xResult = 0;\r
-uint32_t xStatus;\r
-const TickType_t ulMaxBlockTime = pdMS_TO_TICKS( EMAC_MAX_BLOCK_TIME_MS );\r
-#if( ipconfigCHECK_IP_QUEUE_SPACE != 0 )\r
-       UBaseType_t uxLastMinQueueSpace = 0;\r
-#endif\r
-\r
-       /* Remove compiler warnings about unused parameters. */\r
-       ( void ) pvParameters;\r
-\r
-       configASSERT( xEMACTaskHandle );\r
-\r
-       vTaskSetTimeOutState( &xPhyTime );\r
-       xPhyRemTime = pdMS_TO_TICKS( PHY_LS_LOW_CHECK_TIME_MS );\r
-       xLoggingTime = xTaskGetTickCount();\r
-\r
-       for( ;; )\r
-       {\r
-               uxCurrentCount = uxGetMinimumFreeNetworkBuffers();\r
-               if( uxLastMinBufferCount != uxCurrentCount )\r
-               {\r
-                       /* The logging produced below may be helpful\r
-                       while tuning +TCP: see how many buffers are in use. */\r
-                       uxLastMinBufferCount = uxCurrentCount;\r
-                       FreeRTOS_printf( ( "Network buffers: %lu lowest %lu\n",\r
-                               uxGetNumberOfFreeNetworkBuffers(), uxCurrentCount ) );\r
-               }\r
-\r
-               #if( ipconfigCHECK_IP_QUEUE_SPACE != 0 )\r
-               {\r
-                       uxCurrentCount = uxGetMinimumIPQueueSpace();\r
-                       if( uxLastMinQueueSpace != uxCurrentCount )\r
-                       {\r
-                               /* The logging produced below may be helpful\r
-                               while tuning +TCP: see how many buffers are in use. */\r
-                               uxLastMinQueueSpace = uxCurrentCount;\r
-                               FreeRTOS_printf( ( "Queue space: lowest %lu\n", uxCurrentCount ) );\r
-                       }\r
-               }\r
-               #endif /* ipconfigCHECK_IP_QUEUE_SPACE */\r
-\r
-               /* Run the state-machine of the ksz8851 driver. */\r
-               ksz8851snl_update();\r
-\r
-               if( ( ulISREvents & EMAC_IF_ALL_EVENT ) == 0 )\r
-               {\r
-                       /* No events to process now, wait for the next. */\r
-                       ulTaskNotifyTake( pdTRUE, ulMaxBlockTime );\r
-               }\r
-\r
-               if( ( xTaskGetTickCount() - xLoggingTime ) > 10000 )\r
-               {\r
-                       xLoggingTime += 10000;\r
-                       FreeRTOS_printf( ( "Now Tx/Rx %7d /%7d\n",\r
-                               xMicrelDevice.ul_total_tx, xMicrelDevice.ul_total_rx ) );\r
-               }\r
-\r
-               if( ( ulISREvents & EMAC_IF_RX_EVENT ) != 0 )\r
-               {\r
-                       ulISREvents &= ~EMAC_IF_RX_EVENT;\r
-\r
-                       /* Wait for the EMAC interrupt to indicate that another packet has been\r
-                       received. */\r
-                       xResult = prvEMACRxPoll();\r
-               }\r
-\r
-               if( ( ulISREvents & EMAC_IF_TX_EVENT ) != 0 )\r
-               {\r
-                       /* Future extension: code to release TX buffers if zero-copy is used. */\r
-                       ulISREvents &= ~EMAC_IF_TX_EVENT;\r
-               }\r
-\r
-               if( ( ulISREvents & EMAC_IF_ERR_EVENT ) != 0 )\r
-               {\r
-                       /* Future extension: logging about errors that occurred. */\r
-                       ulISREvents &= ~EMAC_IF_ERR_EVENT;\r
-               }\r
-\r
-               if( xResult > 0 )\r
-               {\r
-                       /* As long as packets are being received, assume that\r
-                       the Link Status is high. */\r
-                       ulPHYLinkStatus |= BMSR_LINK_STATUS;\r
-                       /* A packet was received. No need to check for the PHY status now,\r
-                       but set a timer to check it later on. */\r
-                       vTaskSetTimeOutState( &xPhyTime );\r
-                       xPhyRemTime = pdMS_TO_TICKS( PHY_LS_HIGH_CHECK_TIME_MS );\r
-                       xResult = 0;\r
-               }\r
-               else if( ( xTaskCheckForTimeOut( &xPhyTime, &xPhyRemTime ) != pdFALSE ) &&\r
-                       ( xMicrelDevice.ul_spi_pdc_status == SPI_PDC_IDLE ) )\r
-               {\r
-                       /* Check the link status again. */\r
-                       xStatus = ulReadMDIO( PHY_REG_01_BMSR );\r
-\r
-                       if( ( ulPHYLinkStatus & BMSR_LINK_STATUS ) != ( xStatus & BMSR_LINK_STATUS ) )\r
-                       {\r
-                               ulPHYLinkStatus = xStatus;\r
-                               FreeRTOS_printf( ( "prvEMACHandlerTask: PHY LS now %d\n", ( ulPHYLinkStatus & BMSR_LINK_STATUS ) != 0 ) );\r
-                       }\r
-\r
-                       vTaskSetTimeOutState( &xPhyTime );\r
-                       if( ( ulPHYLinkStatus & BMSR_LINK_STATUS ) != 0 )\r
-                       {\r
-                               xPhyRemTime = pdMS_TO_TICKS( PHY_LS_HIGH_CHECK_TIME_MS );\r
-                       }\r
-                       else\r
-                       {\r
-                               xPhyRemTime = pdMS_TO_TICKS( PHY_LS_LOW_CHECK_TIME_MS );\r
-                       }\r
-               }\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
+/*
+FreeRTOS+TCP V2.0.11
+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
+*/
+
+/* Standard includes. */
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+
+/* FreeRTOS includes. */
+#include "FreeRTOS.h"
+#include "task.h"
+#include "queue.h"
+#include "semphr.h"
+
+/* FreeRTOS+TCP includes. */
+#include "FreeRTOS_IP.h"
+#include "FreeRTOS_Sockets.h"
+#include "FreeRTOS_IP_Private.h"
+#include "NetworkBufferManagement.h"
+#include "NetworkInterface.h"
+
+#include "sam4e_xplained_pro.h"
+#include "hr_gettime.h"
+#include "conf_eth.h"
+#include "ksz8851snl.h"
+#include "ksz8851snl_reg.h"
+
+/* Some files from the Atmel Software Framework */
+#include <sysclk.h>
+#include <pdc/pdc.h>
+#include <spi/spi.h>
+
+/*
+       Sending a packet:
+
+               1) Called by UP-task, add buffer to the TX-list:
+                       xNetworkInterfaceOutput()
+                               tx_buffers[ us_tx_head ] = pxNetworkBuffer;
+                               tx_busy[ us_tx_head ] = pdTRUE;
+                               us_tx_head++;
+
+               2) Called by EMAC-Task: start SPI transfer
+                       ksz8851snl_update()
+                       if( ul_spi_pdc_status == SPI_PDC_IDLE )
+                       {
+                               if( ( tx_busy[ us_tx_tail ] != pdFALSE ) &&
+                                       ( us_pending_frame == 0 ) &&
+                                       ( ul_had_intn_interrupt == 0 ) )
+                               {
+                                       // disable all interrupts.
+                                       ksz8851_reg_write( REG_INT_MASK, 0 );
+                                       Bring KSZ8851SNL_CSN_GPIO low
+                                       ksz8851_fifo_write( pxNetworkBuffer->pucEthernetBuffer, xLength, xLength );
+                                       ul_spi_pdc_status = SPI_PDC_TX_START;
+                                       tx_cur_buffer = pxNetworkBuffer;
+                               }
+                       }
+               3) Wait for SPI RXBUFF interrupt
+                       SPI_Handler()
+                               if( ul_spi_pdc_status == SPI_PDC_TX_START )
+                               {
+                                       if( SPI_Status & SPI_SR_RXBUFF )
+                                       {
+                                               ul_spi_pdc_status = SPI_PDC_TX_COMPLETE;
+                                       }
+                               }
+
+               4) Called by EMAC-Task: finish SPI transfer
+                       ksz8851snl_update()
+                               if( ul_spi_pdc_status == SPI_PDC_TX_COMPLETE )
+                               {
+                                       ul_spi_pdc_status = SPI_PDC_IDLE;
+                                       Bring KSZ8851SNL_CSN_GPIO high
+                                       // TX step12: disable TXQ write access.
+                                       ksz8851_reg_clrbits( REG_RXQ_CMD, RXQ_START );
+                                       // TX step12.1: enqueue frame in TXQ.
+                                       ksz8851_reg_setbits( REG_TXQ_CMD, TXQ_ENQUEUE );
+
+                                       // RX step13: enable INT_RX flag.
+                                       ksz8851_reg_write( REG_INT_MASK, INT_RX );
+
+                                       // Buffer sent, free the corresponding buffer and mark descriptor as owned by software.
+                                       vReleaseNetworkBufferAndDescriptor( pxNetworkBuffer );
+
+                                       tx_buffers[ us_tx_tail ] = NULL;
+                                       tx_busy[ us_tx_tail ] = pdFALSE;
+                                       us_tx_tail++
+                               }
+
+       Receiving a packet:
+
+               1) Wait for a INTN interrupt
+                       INTN_Handler()
+                               ul_had_intn_interrupt = 1
+                               vTaskNotifyGiveFromISR();       // Wake up the EMAC task
+
+               2) Called by EMAC-Task: check for new fragments and start SPI transfer
+                       ksz8851snl_update()
+                               if( ul_spi_pdc_status == SPI_PDC_IDLE )
+                               {
+                                       if( ( ul_had_intn_interrupt != 0 ) || ( us_pending_frame > 0 ) )
+                                       {
+                                               if( us_pending_frame == 0 )
+                                               {
+                                                       us_pending_frame = ksz8851_reg_read(REG_RX_FRAME_CNT_THRES) >> 8;
+                                                       if( us_pending_frame == 0 )
+                                                       {
+                                                               break;
+                                                       }
+                                               }
+                                               // RX step2: disable all interrupts.
+                                               ksz8851_reg_write( REG_INT_MASK, 0 );
+                                               Check if there is a valid packet: REG_RX_FHR_STATUS
+                                               Read the length of the next fragment: REG_RX_FHR_BYTE_CNT
+                                               ul_spi_pdc_status = SPI_PDC_RX_START;
+                                               gpio_set_pin_low(KSZ8851SNL_CSN_GPIO);
+                                               // Start SPI data transfer
+                                               ksz8851_fifo_read( pxNetworkBuffer->pucEthernetBuffer, xReadLength );
+                                       }
+                               }
+
+               3) Wait for SPI RXBUFF interrupt
+                       SPI_Handler()
+                       if( ul_spi_pdc_status == SPI_PDC_RX_START:
+                       {
+                               if( ( ulCurrentSPIStatus & SPI_SR_RXBUFF ) != 0 )
+                               {
+                                       // Transfer complete, disable SPI RXBUFF interrupt.
+                                       spi_disable_interrupt( KSZ8851SNL_SPI, SPI_IDR_RXBUFF );
+
+                                       ul_spi_pdc_status = SPI_PDC_RX_COMPLETE;
+                               }
+                       }
+               }
+
+               4) Finish SPI transfer
+                       ksz8851snl_update()
+                               if( ul_spi_pdc_status == SPI_PDC_RX_COMPLETE )
+                               {
+                                       ul_spi_pdc_status = SPI_PDC_IDLE;
+                                       Bring KSZ8851SNL_CSN_GPIO high
+                                       // RX step21: end RXQ read access.
+                                       ksz8851_reg_clrbits(REG_RXQ_CMD, RXQ_START);
+                                       // RX step22-23: update frame count to be read.
+                                       us_pending_frame--
+                                       // RX step24: enable INT_RX flag if transfer complete.
+                                       if( us_pending_frame == 0 )
+                                       {
+                                               // Allow more RX interrupts.
+                                               ksz8851_reg_write( REG_INT_MASK, INT_RX );
+                                       }
+
+                                       // Mark descriptor ready to be read.
+                                       rx_ready[ rxHead ] = pdTRUE;
+                                       rxHead++
+                               }
+*/
+
+#define PHY_REG_00_BMCR            0x00 // Basic mode control register
+#define PHY_REG_01_BMSR            0x01 // Basic mode status register
+#define PHY_REG_02_PHYSID1         0x02 // PHYS ID 1
+#define PHY_REG_03_PHYSID2         0x03 // PHYS ID 2
+#define PHY_REG_04_ADVERTISE       0x04 // Advertisement control reg
+#define PHY_REG_05_LPA             0x05 // Link partner ability reg
+#define        PHY_REG_06_ANER            0x06 //      6       RW              Auto-Negotiation Expansion Register
+#define        PHY_REG_07_ANNPTR          0x07 //      7       RW              Auto-Negotiation Next Page TX
+#define        PHY_REG_08_RESERVED0       0x08 // 0x08..0x0Fh  8-15    RW              RESERVED
+
+#define BMSR_LINK_STATUS            0x0004  //!< Link status
+
+#ifndef        PHY_LS_HIGH_CHECK_TIME_MS
+       /* Check if the LinkSStatus in the PHY is still high after 15 seconds of not
+       receiving packets. */
+       #define PHY_LS_HIGH_CHECK_TIME_MS       15000
+#endif
+
+#ifndef        PHY_LS_LOW_CHECK_TIME_MS
+       /* Check if the LinkSStatus in the PHY is still low every second. */
+       #define PHY_LS_LOW_CHECK_TIME_MS        1000
+#endif
+
+/* Interrupt events to process.  Currently only the Rx event is processed
+although code for other events is included to allow for possible future
+expansion. */
+#define EMAC_IF_RX_EVENT                               1UL
+#define EMAC_IF_TX_EVENT                               2UL
+#define EMAC_IF_ERR_EVENT                              4UL
+#define EMAC_IF_ALL_EVENT                              ( EMAC_IF_RX_EVENT | EMAC_IF_TX_EVENT | EMAC_IF_ERR_EVENT )
+
+#define ETHERNET_CONF_PHY_ADDR BOARD_GMAC_PHY_ADDR
+
+#ifdef ipconfigHAS_TX_CRC_OFFLOADING
+       #undef ipconfigHAS_TX_CRC_OFFLOADING
+#endif
+/* Override this define because the KSZ8851 is programmed to set all outgoing CRC's */
+#define        ipconfigHAS_TX_CRC_OFFLOADING   1
+
+#ifndef        EMAC_MAX_BLOCK_TIME_MS
+       #define EMAC_MAX_BLOCK_TIME_MS  100ul
+#endif
+
+/* Default the size of the stack used by the EMAC deferred handler task to 4x
+the size of the stack used by the idle task - but allow this to be overridden in
+FreeRTOSConfig.h as configMINIMAL_STACK_SIZE is a user definable constant. */
+#ifndef configEMAC_TASK_STACK_SIZE
+       #define configEMAC_TASK_STACK_SIZE ( 6 * configMINIMAL_STACK_SIZE )
+#endif
+
+#define SPI_PDC_IDLE                   0
+#define SPI_PDC_RX_START               1
+#define SPI_PDC_TX_ERROR               2
+#define SPI_PDC_RX_COMPLETE            3
+#define SPI_PDC_TX_START               4
+#define SPI_PDC_RX_ERROR               5
+#define SPI_PDC_TX_COMPLETE            6
+
+/**
+ * ksz8851snl driver structure.
+ */
+typedef struct {
+       /** Set to 1 when owner is software (ready to read), 0 for Micrel. */
+       uint32_t rx_ready[MICREL_RX_BUFFERS];
+       /** Set to 1 when owner is Micrel, 0 for software. */
+       uint32_t tx_busy[MICREL_TX_BUFFERS];
+       /** RX NetworkBufferDescriptor_t pointer list */
+       NetworkBufferDescriptor_t *rx_buffers[MICREL_RX_BUFFERS];
+       /** TX NetworkBufferDescriptor_t pointer list */
+       NetworkBufferDescriptor_t *tx_buffers[MICREL_TX_BUFFERS];
+       NetworkBufferDescriptor_t *tx_cur_buffer;
+
+       /** Circular buffer head pointer for packet received. */
+       uint32_t us_rx_head;
+       /** Circular buffer tail pointer for packet to be read. */
+       uint32_t us_rx_tail;
+       /** Circular buffer head pointer by upper layer (buffer to be sent). */
+       uint32_t us_tx_head;
+       /** Circular buffer tail pointer incremented by handlers (buffer sent). */
+       uint32_t us_tx_tail;
+
+       uint32_t ul_total_tx;
+       uint32_t ul_total_rx;
+       uint32_t tx_space;
+
+       /** Still experimental: hash table to allow certain multicast addresses. */
+       uint16_t pusHashTable[ 4 ];
+
+       /* ul_spi_pdc_status has "SPI_PDC_xxx" values. */
+       volatile uint32_t ul_spi_pdc_status;
+
+       /* ul_had_intn_interrupt becomes true within the INTN interrupt. */
+       volatile uint32_t ul_had_intn_interrupt;
+
+       uint16_t us_pending_frame;
+} xKSZ8851_Device_t;
+
+/* SPI PDC register base.
+Declared in ASF\sam\components\ksz8851snl\ksz8851snl.c */
+extern Pdc *g_p_spi_pdc;
+
+/* Temporary buffer for PDC reception.
+declared in ASF\sam\components\ksz8851snl\ksz8851snl.c */
+extern uint8_t tmpbuf[1536];
+
+COMPILER_ALIGNED(8)
+static xKSZ8851_Device_t xMicrelDevice;
+
+static TaskHandle_t xTransmitHandle;
+
+/*-----------------------------------------------------------*/
+
+/*
+ * Wait a fixed time for the link status to indicate the network is up.
+ */
+static BaseType_t xGMACWaitLS( TickType_t xMaxTime );
+
+/*
+ * A deferred interrupt handler task that processes GMAC interrupts.
+ */
+static void prvEMACHandlerTask( void *pvParameters );
+
+/*
+ * Try to obtain an Rx packet from the hardware.
+ */
+static uint32_t prvEMACRxPoll( void );
+
+static inline unsigned long ulReadMDIO( unsigned uAddress );
+
+static void ksz8851snl_low_level_init( void );
+
+static NetworkBufferDescriptor_t *ksz8851snl_low_level_input( void );
+
+/*-----------------------------------------------------------*/
+
+/* Bit map of outstanding ETH interrupt events for processing.  Currently only
+the Rx interrupt is handled, although code is included for other events to
+enable future expansion. */
+static volatile uint32_t ulISREvents;
+
+/* A copy of PHY register 1: 'PHY_REG_01_BMSR' */
+static uint32_t ulPHYLinkStatus = 0;
+static volatile BaseType_t xGMACSwitchRequired;
+
+static void ksz8851snl_update( void );
+
+static void ksz8851snl_rx_init( void );
+
+static void ksz8851snl_tx_init( void );
+
+/* Holds the handle of the task used as a deferred interrupt processor.  The
+handle is used so direct notifications can be sent to the task for all EMAC/DMA
+related interrupts. */
+TaskHandle_t xEMACTaskHandle = NULL;
+
+
+/*-----------------------------------------------------------*/
+
+BaseType_t xNetworkInterfaceInitialise( void )
+{
+const TickType_t x5_Seconds = 5000UL;
+
+       if( xEMACTaskHandle == NULL )
+       {
+               ksz8851snl_low_level_init();
+
+               /* Wait at most 5 seconds for a Link Status in the PHY. */
+               xGMACWaitLS( pdMS_TO_TICKS( x5_Seconds ) );
+
+               /* The handler task is created at the highest possible priority to
+               ensure the interrupt handler can return directly to it. */
+               xTaskCreate( prvEMACHandlerTask, "KSZ8851", configEMAC_TASK_STACK_SIZE, NULL, configMAX_PRIORITIES - 1, &xEMACTaskHandle );
+               configASSERT( xEMACTaskHandle );
+       }
+
+       /* When returning non-zero, the stack will become active and
+    start DHCP (in configured) */
+       ulPHYLinkStatus = ulReadMDIO( PHY_REG_01_BMSR );
+
+       return ( ulPHYLinkStatus & BMSR_LINK_STATUS ) != 0;
+}
+/*-----------------------------------------------------------*/
+
+BaseType_t xGetPhyLinkStatus( void )
+{
+BaseType_t xResult;
+
+       /* This function returns true if the Link Status in the PHY is high. */
+       if( ( ulPHYLinkStatus & BMSR_LINK_STATUS ) != 0 )
+       {
+               xResult = pdTRUE;
+       }
+       else
+       {
+               xResult = pdFALSE;
+       }
+
+       return xResult;
+}
+/*-----------------------------------------------------------*/
+
+BaseType_t xNetworkInterfaceOutput( NetworkBufferDescriptor_t * const pxNetworkBuffer, BaseType_t bReleaseAfterSend )
+{
+BaseType_t xResult = pdFALSE;
+int txHead = xMicrelDevice.us_tx_head;
+
+       /* Make sure the next descriptor is free. */
+       if( xMicrelDevice.tx_busy[ txHead ] != pdFALSE )
+       {
+               /* All TX buffers busy. */
+       }
+       else if( ( ulPHYLinkStatus & BMSR_LINK_STATUS ) == 0 )
+       {
+               /* Output: LS low. */
+       }
+       else
+       {
+               /* Pass the packet. */
+               xMicrelDevice.tx_buffers[ txHead ] = pxNetworkBuffer;
+               /* The descriptor is now owned by Micrel. */
+               xMicrelDevice.tx_busy[ txHead ] = pdTRUE;
+
+               /* Move the head pointer. */
+               if( ++txHead == MICREL_TX_BUFFERS )
+               {
+                       txHead = 0;
+               }
+               xMicrelDevice.us_tx_head = txHead;
+               if( xEMACTaskHandle != NULL )
+               {
+                       xTaskNotifyGive( xEMACTaskHandle );
+               }
+
+       #if( ipconfigZERO_COPY_TX_DRIVER != 1 )
+               #warning Please ipconfigZERO_COPY_TX_DRIVER as 1
+       #endif
+               configASSERT( bReleaseAfterSend != pdFALSE );
+               xResult = pdTRUE;
+       }
+       if( ( xResult == pdFALSE ) && ( bReleaseAfterSend  != pdFALSE ) )
+       {
+               vReleaseNetworkBufferAndDescriptor( pxNetworkBuffer );
+       }
+       return xResult;
+}
+/*-----------------------------------------------------------*/
+
+/* This Micrel has numbered it's PHY registers in a different way.
+Translate the register index. */
+static int ks8851_phy_reg( int reg )
+{
+       switch (reg) {
+       case PHY_REG_00_BMCR:
+               return REG_PHY_CNTL;    // P1MBCR;
+       case PHY_REG_01_BMSR:
+               return REG_PHY_STATUS;
+       case PHY_REG_02_PHYSID1:
+               return REG_PHY_ID_LOW;
+       case PHY_REG_03_PHYSID2:
+               return REG_PHY_ID_HIGH;
+       case PHY_REG_04_ADVERTISE:
+               return REG_PHY_AUTO_NEGOTIATION;
+       case PHY_REG_05_LPA:
+               return REG_PHY_REMOTE_CAPABILITY;
+       }
+
+       return 0x0;
+}
+/*-----------------------------------------------------------*/
+
+static inline unsigned long ulReadMDIO( unsigned uAddress )
+{
+uint16_t usPHYStatus;
+int ks8851_reg = ks8851_phy_reg( uAddress );
+
+       if( ks8851_reg != 0 )
+       {
+               usPHYStatus = ksz8851_reg_read( ks8851_reg );
+       }
+       else
+       {
+               /* Other addresses not yet implemented. */
+               usPHYStatus = 0;
+       }
+       return usPHYStatus;
+}
+/*-----------------------------------------------------------*/
+
+static BaseType_t xGMACWaitLS( TickType_t xMaxTime )
+{
+TickType_t xStartTime = xTaskGetTickCount();
+TickType_t xEndTime;
+BaseType_t xReturn;
+const TickType_t xShortTime = pdMS_TO_TICKS( 100UL );
+const uint32_t ulHz_Per_MHz = 1000000UL;
+
+       for( ;; )
+       {
+               xEndTime = xTaskGetTickCount();
+
+               if( ( xEndTime - xStartTime ) > xMaxTime )
+               {
+                       /* Wated more than xMaxTime, return. */
+                       xReturn = pdFALSE;
+                       break;
+               }
+
+               /* Check the link status again. */
+               ulPHYLinkStatus = ulReadMDIO( PHY_REG_01_BMSR );
+
+               if( ( ulPHYLinkStatus & BMSR_LINK_STATUS ) != 0 )
+               {
+                       /* Link is up - return. */
+                       xReturn = pdTRUE;
+                       break;
+               }
+
+               /* Link is down - wait in the Blocked state for a short while (to allow
+               other tasks to execute) before checking again. */
+               vTaskDelay( xShortTime );
+       }
+
+       FreeRTOS_printf( ( "xGMACWaitLS: %ld freq %lu Mz\n",
+               xReturn,
+               sysclk_get_cpu_hz() / ulHz_Per_MHz ) );
+
+       return xReturn;
+}
+/*-----------------------------------------------------------*/
+
+static void vPioSetPinHigh(uint32_t ul_pin)
+{
+       Pio *p_pio = (Pio *)((uint32_t)PIOA + (PIO_DELTA * (ul_pin >> 5)));
+       // Value to be driven on the I/O line: 1.
+       p_pio->PIO_SODR = 1 << (ul_pin & 0x1F);
+}
+
+/**
+ * \brief Handler for SPI interrupt.
+ */
+void SPI_Handler(void)
+{
+BaseType_t xDoWakeup = pdFALSE;
+BaseType_t xKSZTaskWoken = pdFALSE;
+uint32_t ulCurrentSPIStatus;
+uint32_t ulEnabledSPIStatus;
+
+       ulCurrentSPIStatus = spi_read_status( KSZ8851SNL_SPI );
+       ulEnabledSPIStatus = spi_read_interrupt_mask( KSZ8851SNL_SPI );
+       ulCurrentSPIStatus &= ulEnabledSPIStatus;
+       spi_disable_interrupt( KSZ8851SNL_SPI, ulCurrentSPIStatus );
+
+
+       switch( xMicrelDevice.ul_spi_pdc_status )
+       {
+               case SPI_PDC_RX_START:
+               {
+                       if( ( ulCurrentSPIStatus & SPI_SR_OVRES ) != 0 )
+                       {
+                               pdc_disable_transfer(g_p_spi_pdc, PERIPH_PTCR_RXTDIS | PERIPH_PTCR_TXTDIS);
+                               xMicrelDevice.ul_spi_pdc_status = SPI_PDC_RX_ERROR;
+                               xDoWakeup = pdTRUE;
+                       }
+                       else
+                       {
+                               if( ( ulCurrentSPIStatus & SPI_SR_RXBUFF ) != 0 )
+                               {
+                                       xMicrelDevice.ul_spi_pdc_status = SPI_PDC_RX_COMPLETE;
+                                       xDoWakeup = pdTRUE;
+                               }
+                       }
+               }
+               break;
+
+               case SPI_PDC_TX_START:
+               {
+                       /* Middle of TX. */
+                       if( ( ulCurrentSPIStatus & SPI_SR_OVRES ) != 0 )
+                       {
+                               pdc_disable_transfer(g_p_spi_pdc, PERIPH_PTCR_RXTDIS | PERIPH_PTCR_TXTDIS);
+                               xMicrelDevice.ul_spi_pdc_status = SPI_PDC_TX_ERROR;
+                               xDoWakeup = pdTRUE;
+                       }
+                       else
+                       {
+                               if( ( ulCurrentSPIStatus & SPI_SR_ENDRX ) != 0 )
+                               {
+                                       /* Enable RX complete interrupt. */
+                                       spi_enable_interrupt( KSZ8851SNL_SPI, SPI_IER_RXBUFF );
+                               }
+                               /* End of TX. */
+                               if( ( ulCurrentSPIStatus & SPI_END_OF_TX ) != 0 )
+                               {
+                                       xMicrelDevice.ul_spi_pdc_status = SPI_PDC_TX_COMPLETE;
+                                       xDoWakeup = pdTRUE;
+                               }
+                       }
+               }
+               break;
+       }       /* switch( xMicrelDevice.ul_spi_pdc_status ) */
+
+       if( xDoWakeup != pdFALSE )
+       {
+               if( xEMACTaskHandle != NULL )
+               {
+                       vTaskNotifyGiveFromISR( xEMACTaskHandle, ( BaseType_t * ) &xKSZTaskWoken );
+               }
+       }
+       else
+       {
+       }
+       portEND_SWITCHING_ISR( xKSZTaskWoken );
+}
+/*-----------------------------------------------------------*/
+
+static void INTN_Handler(uint32_t id, uint32_t mask)
+{
+BaseType_t xKSZTaskWoken = pdFALSE;
+
+       if( ( id == INTN_ID ) &&
+               ( mask == INTN_PIN_MSK ) )
+       {
+               /* Clear the PIO interrupt flags. */
+               pio_get_interrupt_status( INTN_PIO );
+
+               /* Set the INTN flag. */
+               xMicrelDevice.ul_had_intn_interrupt++;
+               if( xEMACTaskHandle != NULL )
+               {
+                       vTaskNotifyGiveFromISR( xEMACTaskHandle, &( xKSZTaskWoken ) );
+               }
+       }
+       portEND_SWITCHING_ISR( xKSZTaskWoken );
+}
+/*-----------------------------------------------------------*/
+
+/**
+ * \brief Populate the RX descriptor ring buffers with pbufs.
+ *
+ * \param p_ksz8851snl_dev Pointer to driver data structure.
+ */
+static void ksz8851snl_rx_populate_queue( void )
+{
+       uint32_t ul_index = 0;
+       NetworkBufferDescriptor_t *pxNetworkBuffer;
+
+       /* Set up the RX descriptors */
+       for (ul_index = 0; ul_index < MICREL_RX_BUFFERS; ul_index++) {
+               if( xMicrelDevice.rx_buffers[ ul_index ] == NULL )
+               {
+                       /* Allocate a new NetworkBufferDescriptor_t with the maximum size. */
+                       pxNetworkBuffer = pxGetNetworkBufferWithDescriptor( ipconfigNETWORK_MTU + 36, 100 );
+                       if( pxNetworkBuffer == NULL )
+                       {
+                               FreeRTOS_printf( ( "ksz8851snl_rx_populate_queue: NetworkBufferDescriptor_t allocation failure\n" ) );
+                               configASSERT( 1 == 2 );
+                       }
+
+                       /* Make sure lwIP is well configured so one NetworkBufferDescriptor_t can contain the maximum packet size. */
+                       //LWIP_ASSERT("ksz8851snl_rx_populate_queue: NetworkBufferDescriptor_t size too small!", pbuf_clen(pxNetworkBuffer) <= 1);
+
+                       /* Save NetworkBufferDescriptor_t pointer to be sent to lwIP upper layer. */
+                       xMicrelDevice.rx_buffers[ ul_index ] = pxNetworkBuffer;
+                       /* Pass it to Micrel for reception. */
+                       xMicrelDevice.rx_ready[ ul_index ] = pdFALSE;
+               }
+       }
+}
+
+unsigned tx_space, wait_tx_space, tx_status, fhr_status;
+unsigned rx_debug = 0;
+/**
+ * \brief Update Micrel state machine and perform required actions.
+ *
+ * \param netif the lwIP network interface structure for this ethernetif.
+ */
+static void ksz8851snl_update()
+{
+       uint16_t txmir = 0;
+
+/* Check for free PDC. */
+       switch( xMicrelDevice.ul_spi_pdc_status )
+       {
+       case SPI_PDC_TX_ERROR:
+               {
+               uint32_t ulValue;
+       //              /* TX step11: end TX transfer. */
+                       gpio_set_pin_high( KSZ8851SNL_CSN_GPIO );
+
+                       vTaskDelay( 2 ); gpio_set_pin_low( KSZ8851SNL_CSN_GPIO );
+                       vTaskDelay( 1 ); gpio_set_pin_high( KSZ8851SNL_CSN_GPIO );
+                       vTaskDelay( 1 );
+
+                       /* Disable asynchronous transfer mode. */
+                       xMicrelDevice.ul_spi_pdc_status = SPI_PDC_IDLE;
+
+                       /* TX step12: disable TXQ write access. */
+                       ksz8851_reg_clrbits( REG_RXQ_CMD, RXQ_START );
+
+                       ulValue = ksz8851snl_reset_tx();
+
+                       xMicrelDevice.tx_space = ksz8851_reg_read( REG_TX_MEM_INFO ) & TX_MEM_AVAILABLE_MASK;
+
+                       FreeRTOS_printf( ("SPI_PDC_TX_ERROR %02X\n", ulValue ) );
+               }
+               break;
+
+       case SPI_PDC_RX_ERROR:
+               {
+               uint32_t ulValue;
+                       /* TX step11: end TX transfer. */
+                       gpio_set_pin_high( KSZ8851SNL_CSN_GPIO );
+
+                       vTaskDelay( 2 ); gpio_set_pin_low( KSZ8851SNL_CSN_GPIO );
+                       vTaskDelay( 1 ); gpio_set_pin_high( KSZ8851SNL_CSN_GPIO );
+                       vTaskDelay( 1 );
+
+                       /* Disable asynchronous transfer mode. */
+                       xMicrelDevice.ul_spi_pdc_status = SPI_PDC_IDLE;
+
+                       /* TX step12: disable TXQ write access. */
+                       ksz8851_reg_clrbits( REG_RXQ_CMD, RXQ_START );
+
+                       //ulValue = ksz8851snl_reset_rx();
+                       ulValue = ksz8851snl_reinit();
+
+                       xGMACWaitLS( pdMS_TO_TICKS( 5000UL ) );
+
+                       FreeRTOS_printf( ("SPI_PDC_RX_ERROR %02X\n", ulValue ) );
+               }
+               break;
+       }
+       switch( xMicrelDevice.ul_spi_pdc_status )
+       {
+               case SPI_PDC_IDLE:
+               {
+               int txTail = xMicrelDevice.us_tx_tail;
+
+                       /*
+                        * ========================== Handle RX ==========================
+                        */
+                       if( ( xMicrelDevice.ul_had_intn_interrupt != 0 ) || ( xMicrelDevice.us_pending_frame > 0 ) )
+                       {
+                       int rxHead = xMicrelDevice.us_rx_head;
+                       NetworkBufferDescriptor_t *pxNetworkBuffer;
+#warning try
+                               xMicrelDevice.ul_had_intn_interrupt = 0;
+
+                               if( xMicrelDevice.us_pending_frame == 0 )
+                               {
+                               uint16_t int_status;
+                                       /* RX step1: read interrupt status for INT_RX flag. */
+                                       int_status = ksz8851_reg_read( REG_INT_STATUS );
+
+
+                                       /* RX step2: disable all interrupts. */
+                                       ksz8851_reg_write( REG_INT_MASK, 0 );
+
+                                       /* RX step3: clear INT_RX flag. */
+                                       ksz8851_reg_setbits( REG_INT_STATUS, INT_RX );
+
+                                       /* RX step4-5: check for received frames. */
+                                       xMicrelDevice.us_pending_frame = ksz8851_reg_read(REG_RX_FRAME_CNT_THRES) >> 8;
+                                       if( xMicrelDevice.us_pending_frame == 0 )
+                                       {
+                                               /* RX step24: enable INT_RX flag. */
+                                               ksz8851_reg_write(REG_INT_MASK, INT_RX);
+                                               return;
+                                       }
+                               }
+#warning try
+                               xMicrelDevice.ul_had_intn_interrupt = 0;
+
+                               /* Now xMicrelDevice.us_pending_frame != 0 */
+
+                               /* Don't break Micrel state machine, wait for a free descriptor first! */
+                               if( xMicrelDevice.rx_ready[ rxHead ] != pdFALSE )
+                               {
+                                       FreeRTOS_printf( ( "ksz8851snl_update: out of free descriptor! [tail=%u head=%u]\n",
+                                                       xMicrelDevice.us_rx_tail, rxHead ) );
+                                       return;
+                               }
+                               pxNetworkBuffer = xMicrelDevice.rx_buffers[ rxHead ];
+
+                               if( pxNetworkBuffer == NULL )
+                               {
+                                       ksz8851snl_rx_populate_queue();
+                                       FreeRTOS_printf( ( "ksz8851snl_update: no buffer set [head=%u]\n", rxHead ) );
+                                       return;
+                               }
+
+                               /* RX step6: get RX packet status. */
+                               fhr_status = ksz8851_reg_read( REG_RX_FHR_STATUS );
+                               if( ( ( fhr_status & RX_VALID ) == 0 ) || ( ( fhr_status & RX_ERRORS ) != 0 ) )
+                               {
+                                       ksz8851_reg_setbits(REG_RXQ_CMD, RXQ_CMD_FREE_PACKET);
+                                       FreeRTOS_printf( ( "ksz8851snl_update: RX packet error!\n" ) );
+
+                                       /* RX step4-5: check for received frames. */
+                                       xMicrelDevice.us_pending_frame = ksz8851_reg_read(REG_RX_FRAME_CNT_THRES) >> 8;
+                                       if( xMicrelDevice.us_pending_frame == 0 )
+                                       {
+                                               /* RX step24: enable INT_RX flag. */
+                                               ksz8851_reg_write(REG_INT_MASK, INT_RX);
+                                       }
+                                       ulISREvents |= EMAC_IF_ERR_EVENT;
+                               }
+                               else
+                               {
+                               size_t xLength;
+                                       /* RX step7: read frame length. */
+                                       xLength = ksz8851_reg_read(REG_RX_FHR_BYTE_CNT) & RX_BYTE_CNT_MASK;
+
+                                       /* RX step8: Drop packet if len is invalid or no descriptor available. */
+                                       if( xLength == 0 )
+                                       {
+                                               ksz8851_reg_setbits( REG_RXQ_CMD, RXQ_CMD_FREE_PACKET );
+                                               FreeRTOS_printf( ( "ksz8851snl_update: RX bad len!\n" ) );
+                                               ulISREvents |= EMAC_IF_ERR_EVENT;
+                                       }
+                                       else
+                                       {
+                                       size_t xReadLength = xLength;
+
+                                               xMicrelDevice.ul_total_rx++;
+                                               /* RX step9: reset RX frame pointer. */
+                                               ksz8851_reg_clrbits(REG_RX_ADDR_PTR, ADDR_PTR_MASK);
+
+                                               /* RX step10: start RXQ read access. */
+                                               ksz8851_reg_setbits(REG_RXQ_CMD, RXQ_START);
+                                               /* RX step11-17: start asynchronous FIFO read operation. */
+                                               xMicrelDevice.ul_spi_pdc_status = SPI_PDC_RX_START;
+                                               gpio_set_pin_low( KSZ8851SNL_CSN_GPIO );
+                                               if( ( xReadLength & ( sizeof( size_t ) - 1 ) ) != 0 )
+                                               {
+                                                       xReadLength = ( xReadLength | ( sizeof( size_t ) - 1 ) ) + 1;
+                                               }
+
+                                               /* Pass the buffer minus 2 bytes, see ksz8851snl.c: RXQ_TWOBYTE_OFFSET. */
+                                               ksz8851_fifo_read( pxNetworkBuffer->pucEthernetBuffer - 2, xReadLength );
+                                               /* Remove CRC and update buffer length. */
+                                               xLength -= 4;
+                                               pxNetworkBuffer->xDataLength = xLength;
+                                               /* Wait for SPI interrupt to set status 'SPI_PDC_RX_COMPLETE'. */
+                                       }
+                               }
+                               break;
+                       } /* ul_had_intn_interrupt || us_pending_frame */
+                       /*
+                        * ========================== Handle TX ==========================
+                        */
+
+                       /* Fetch next packet to be sent. */
+                       if( ( xMicrelDevice.tx_busy[ txTail ] != pdFALSE ) &&
+                               ( xMicrelDevice.us_pending_frame == 0 ) &&
+                               ( xMicrelDevice.ul_had_intn_interrupt == 0 ) )
+                       {
+                       NetworkBufferDescriptor_t *pxNetworkBuffer = xMicrelDevice.tx_buffers[ txTail ];
+                       size_t xLength = pxNetworkBuffer->xDataLength;
+                       int iIndex = xLength;
+
+                               xLength = 4 * ( ( xLength + 3 ) / 4 );
+                               while( iIndex < ( int ) xLength )
+                               {
+                                       pxNetworkBuffer->pucEthernetBuffer[ iIndex ] = '\0';
+                                       iIndex++;
+                               }
+                               pxNetworkBuffer->xDataLength = xLength;
+
+                               /* TX step1: check if TXQ memory size is available for transmit. */
+                               txmir = ksz8851_reg_read( REG_TX_MEM_INFO );
+                               txmir = txmir & TX_MEM_AVAILABLE_MASK;
+
+                               if( txmir < ( xLength + 8 ) )
+                               {
+                                       if( wait_tx_space == pdFALSE )
+                                       {
+                                               tx_status = ksz8851_reg_read( REG_TX_STATUS );
+                                               fhr_status = ksz8851_reg_read( REG_RX_FHR_STATUS );
+                                               wait_tx_space = pdTRUE;
+                                       }
+                                       //return;
+                                       rx_debug = 1;
+                                       tx_space = txmir;
+                               }
+                               else
+                               {
+                                       tx_space = txmir;
+
+                                       /* TX step2: disable all interrupts. */
+                                       ksz8851_reg_write( REG_INT_MASK, 0 );
+
+                                       xMicrelDevice.tx_space -= xLength;
+
+                                       /* TX step3: enable TXQ write access. */
+                                       ksz8851_reg_setbits( REG_RXQ_CMD, RXQ_START );
+                                       /* TX step4-8: perform FIFO write operation. */
+                                       xMicrelDevice.ul_spi_pdc_status = SPI_PDC_TX_START;
+                                       xMicrelDevice.tx_cur_buffer = pxNetworkBuffer;
+                                       /* Bring SPI SS low. */
+                                       gpio_set_pin_low( KSZ8851SNL_CSN_GPIO );
+                                       xMicrelDevice.ul_total_tx++;
+
+                                       ksz8851_fifo_write( pxNetworkBuffer->pucEthernetBuffer, xLength, xLength );
+                               }
+                       }
+               }
+               break;  /* SPI_PDC_IDLE */
+
+       case SPI_PDC_RX_COMPLETE:
+               {
+               int rxHead = xMicrelDevice.us_rx_head;
+                       /* RX step18-19: pad with dummy data to keep dword alignment. */
+                       /* Packet lengths will be rounded up to a multiple of "sizeof size_t". */
+//                     xLength = xMicrelDevice.rx_buffers[ rxHead ]->xDataLength & 3;
+//                     if( xLength != 0 )
+//                     {
+//                             ksz8851_fifo_dummy( 4 - xLength );
+//                     }
+
+                       /* RX step20: end RX transfer. */
+                       gpio_set_pin_high( KSZ8851SNL_CSN_GPIO );
+
+                       /* Disable asynchronous transfer mode. */
+                       xMicrelDevice.ul_spi_pdc_status = SPI_PDC_IDLE;
+
+                       /* RX step21: end RXQ read access. */
+                       ksz8851_reg_clrbits(REG_RXQ_CMD, RXQ_START);
+
+                       /* RX step22-23: update frame count to be read. */
+                       xMicrelDevice.us_pending_frame -= 1;
+
+                       /* RX step24: enable INT_RX flag if transfer complete. */
+                       if( xMicrelDevice.us_pending_frame == 0 )
+                       {
+                               ksz8851_reg_write(REG_INT_MASK, INT_RX);
+                       }
+
+                       /* Mark descriptor ready to be read. */
+                       xMicrelDevice.rx_ready[ rxHead ] = pdTRUE;
+                       if( ++rxHead == MICREL_RX_BUFFERS )
+                       {
+                               rxHead = 0;
+                       }
+                       xMicrelDevice.us_rx_head = rxHead;
+                       if( rx_debug != 0 )
+                       {
+                       uint32_t txmir;
+                               rx_debug = 0;
+                               txmir = ksz8851_reg_read( REG_TX_MEM_INFO );
+                               txmir = txmir & TX_MEM_AVAILABLE_MASK;
+                       }
+                       /* Tell prvEMACHandlerTask that RX packets are available. */
+                       ulISREvents |= EMAC_IF_RX_EVENT;
+               }       /* case SPI_PDC_RX_COMPLETE */
+               break;
+
+       case SPI_PDC_TX_COMPLETE:
+               {
+               int txTail = xMicrelDevice.us_tx_tail;
+               NetworkBufferDescriptor_t *pxNetworkBuffer = xMicrelDevice.tx_buffers[ txTail ];
+
+               size_t xLength;
+                       /* TX step9-10: pad with dummy data to keep dword alignment. */
+                       /* Not necessary: length is already a multiple of 4. */
+                       xLength = pxNetworkBuffer->xDataLength & 3;
+                       if( xLength != 0 )
+                       {
+//                             ksz8851_fifo_dummy( 4 - xLength );
+                       }
+
+//                     /* TX step11: end TX transfer. */
+                       gpio_set_pin_high( KSZ8851SNL_CSN_GPIO );
+
+                       /* Disable asynchronous transfer mode. */
+                       xMicrelDevice.ul_spi_pdc_status = SPI_PDC_IDLE;
+
+                       /* TX step12: disable TXQ write access. */
+                       ksz8851_reg_clrbits( REG_RXQ_CMD, RXQ_START );
+
+                       xMicrelDevice.tx_space = ksz8851_reg_read( REG_TX_MEM_INFO ) & TX_MEM_AVAILABLE_MASK;
+
+                       /* TX step12.1: enqueue frame in TXQ. */
+                       ksz8851_reg_setbits( REG_TXQ_CMD, TXQ_ENQUEUE );
+
+                       /* RX step13: enable INT_RX flag. */
+//                     ksz8851_reg_write( REG_INT_MASK, INT_RX );
+                       /* Buffer sent, free the corresponding buffer and mark descriptor as owned by software. */
+                       vReleaseNetworkBufferAndDescriptor( pxNetworkBuffer );
+
+                       xMicrelDevice.tx_buffers[ txTail ] = NULL;
+                       xMicrelDevice.tx_busy[ txTail ] = pdFALSE;
+                       if( ++txTail == MICREL_TX_BUFFERS )
+                       {
+                               txTail = 0;
+                       }
+
+                       xMicrelDevice.us_tx_tail = txTail;
+                       /* Experiment. */
+                       //xMicrelDevice.ul_had_intn_interrupt = 1;
+                       if( xTransmitHandle != NULL )
+                       {
+                               xTaskNotifyGive( xTransmitHandle );
+                       }
+#warning moved downward
+                       /* RX step13: enable INT_RX flag. */
+                       ksz8851_reg_write( REG_INT_MASK, INT_RX );
+                       /* Prevent the EMAC task from sleeping a single time. */
+                       ulISREvents |= EMAC_IF_TX_EVENT;
+               }       /* case SPI_PDC_TX_COMPLETE */
+               break;
+       }       /* switch( xMicrelDevice.ul_spi_pdc_status ) */
+}
+
+/**
+ * \brief Set up the RX descriptor ring buffers.
+ *
+ * This function sets up the descriptor list used for RX packets.
+ *
+ */
+static void ksz8851snl_rx_init()
+{
+       uint32_t ul_index = 0;
+
+       /* Init pointer index. */
+       xMicrelDevice.us_rx_head = 0;
+       xMicrelDevice.us_rx_tail = 0;
+
+       /* Set up the RX descriptors. */
+       for (ul_index = 0; ul_index < MICREL_RX_BUFFERS; ul_index++) {
+               xMicrelDevice.rx_buffers[ul_index] = NULL;
+               xMicrelDevice.rx_ready[ul_index] = pdFALSE;
+       }
+
+       /* Build RX buffer and descriptors. */
+       ksz8851snl_rx_populate_queue();
+}
+
+/**
+ * \brief Set up the TX descriptor ring buffers.
+ *
+ * This function sets up the descriptor list used for TX packets.
+ *
+ */
+static void ksz8851snl_tx_init()
+{
+       uint32_t ul_index = 0;
+
+       /* Init TX index pointer. */
+       xMicrelDevice.us_tx_head = 0;
+       xMicrelDevice.us_tx_tail = 0;
+
+       /* Set up the TX descriptors */
+       for( ul_index = 0; ul_index < MICREL_TX_BUFFERS; ul_index++ )
+       {
+               xMicrelDevice.tx_busy[ul_index] = pdFALSE;
+       }
+       xMicrelDevice.tx_space = 6144;
+}
+
+/**
+ * \brief Initialize ksz8851snl ethernet controller.
+ *
+ * \note Called from ethernetif_init().
+ *
+ * \param netif the lwIP network interface structure for this ethernetif.
+ */
+static void ksz8851snl_low_level_init( void )
+{
+       ksz8851snl_rx_init();
+       ksz8851snl_tx_init();
+
+       /* Enable NVIC interrupts. */
+       NVIC_SetPriority(SPI_IRQn, INT_PRIORITY_SPI);
+       NVIC_EnableIRQ(SPI_IRQn);
+
+       /* Initialize SPI link. */
+       if( ksz8851snl_init() < 0 )
+       {
+               FreeRTOS_printf( ( "ksz8851snl_low_level_init: failed to initialize the Micrel driver!\n" ) );
+               configASSERT(0 == 1);
+       }
+       memset( xMicrelDevice.pusHashTable, 255, sizeof( xMicrelDevice.pusHashTable ) );
+       ksz8851_reg_write( REG_MAC_HASH_0, FreeRTOS_htons( xMicrelDevice.pusHashTable[ 0 ] ) );
+       ksz8851_reg_write( REG_MAC_HASH_2, FreeRTOS_htons( xMicrelDevice.pusHashTable[ 1 ] ) );
+       ksz8851_reg_write( REG_MAC_HASH_4, FreeRTOS_htons( xMicrelDevice.pusHashTable[ 2 ] ) );
+       ksz8851_reg_write( REG_MAC_HASH_6, FreeRTOS_htons( xMicrelDevice.pusHashTable[ 3 ] ) );
+
+       /* Initialize interrupt line INTN. */
+       configure_intn( INTN_Handler );
+}
+
+/**
+ * \brief Use pre-allocated pbuf as DMA source and return the incoming packet.
+ *
+ * \param netif the lwIP network interface structure for this ethernetif.
+ *
+ * \return a pbuf filled with the received packet (including MAC header).
+ * 0 on memory error.
+ */
+static NetworkBufferDescriptor_t *ksz8851snl_low_level_input( void )
+{
+NetworkBufferDescriptor_t *pxNetworkBuffer = NULL;
+int rxTail = xMicrelDevice.us_rx_tail;
+
+       /* Check that descriptor is owned by software (ie packet received). */
+       if( xMicrelDevice.rx_ready[ rxTail ] != pdFALSE )
+       {
+
+               /* Fetch pre-allocated buffer */
+               pxNetworkBuffer = xMicrelDevice.rx_buffers[ rxTail ];
+
+               /* Remove this pbuf from its descriptor. */
+               xMicrelDevice.rx_buffers[ rxTail ] = NULL;
+
+               /* Clears rx_ready and sets rx_buffers. */
+               ksz8851snl_rx_populate_queue();
+
+               if( ++rxTail == MICREL_RX_BUFFERS )
+               {
+                       rxTail = 0;
+               }
+               xMicrelDevice.us_rx_tail = rxTail;
+       }
+
+       return pxNetworkBuffer;
+}
+/*-----------------------------------------------------------*/
+
+static uint32_t prvEMACRxPoll( void )
+{
+NetworkBufferDescriptor_t *pxNetworkBuffer;
+IPStackEvent_t xRxEvent = { eNetworkRxEvent, NULL };
+uint32_t ulReturnValue = 0;
+
+       for( ;; )
+       {
+       /* Only for logging. */
+       int rxTail = xMicrelDevice.us_rx_tail;
+       EthernetHeader_t *pxEthernetHeader;
+
+       pxNetworkBuffer = ksz8851snl_low_level_input();
+       
+               if( pxNetworkBuffer == NULL )
+               {
+                       break;
+               }
+               pxEthernetHeader = ( EthernetHeader_t * ) ( pxNetworkBuffer->pucEthernetBuffer );
+
+               if( ( pxEthernetHeader->usFrameType != ipIPv4_FRAME_TYPE ) &&
+                       ( pxEthernetHeader->usFrameType != ipARP_FRAME_TYPE     ) )
+               {
+                       FreeRTOS_printf( ( "Frame type %02X received\n", pxEthernetHeader->usFrameType ) );
+               }
+               ulReturnValue++;
+
+               xRxEvent.pvData = ( void * )pxNetworkBuffer;
+               /* Send the descriptor to the IP task for processing. */
+               if( xSendEventStructToIPTask( &xRxEvent, 100UL ) != pdTRUE )
+               {
+                       vReleaseNetworkBufferAndDescriptor( pxNetworkBuffer );
+                       iptraceETHERNET_RX_EVENT_LOST();
+                       FreeRTOS_printf( ( "prvEMACRxPoll: Can not queue return packet!\n" ) );
+               }
+       }
+
+       return ulReturnValue;
+}
+/*-----------------------------------------------------------*/
+
+static void prvEMACHandlerTask( void *pvParameters )
+{
+TimeOut_t xPhyTime;
+TickType_t xPhyRemTime;
+TickType_t xLoggingTime;
+UBaseType_t uxLastMinBufferCount = 0;
+UBaseType_t uxCurrentCount;
+BaseType_t xResult = 0;
+uint32_t xStatus;
+const TickType_t ulMaxBlockTime = pdMS_TO_TICKS( EMAC_MAX_BLOCK_TIME_MS );
+#if( ipconfigCHECK_IP_QUEUE_SPACE != 0 )
+       UBaseType_t uxLastMinQueueSpace = 0;
+#endif
+
+       /* Remove compiler warnings about unused parameters. */
+       ( void ) pvParameters;
+
+       configASSERT( xEMACTaskHandle );
+
+       vTaskSetTimeOutState( &xPhyTime );
+       xPhyRemTime = pdMS_TO_TICKS( PHY_LS_LOW_CHECK_TIME_MS );
+       xLoggingTime = xTaskGetTickCount();
+
+       for( ;; )
+       {
+               uxCurrentCount = uxGetMinimumFreeNetworkBuffers();
+               if( uxLastMinBufferCount != uxCurrentCount )
+               {
+                       /* The logging produced below may be helpful
+                       while tuning +TCP: see how many buffers are in use. */
+                       uxLastMinBufferCount = uxCurrentCount;
+                       FreeRTOS_printf( ( "Network buffers: %lu lowest %lu\n",
+                               uxGetNumberOfFreeNetworkBuffers(), uxCurrentCount ) );
+               }
+
+               #if( ipconfigCHECK_IP_QUEUE_SPACE != 0 )
+               {
+                       uxCurrentCount = uxGetMinimumIPQueueSpace();
+                       if( uxLastMinQueueSpace != uxCurrentCount )
+                       {
+                               /* The logging produced below may be helpful
+                               while tuning +TCP: see how many buffers are in use. */
+                               uxLastMinQueueSpace = uxCurrentCount;
+                               FreeRTOS_printf( ( "Queue space: lowest %lu\n", uxCurrentCount ) );
+                       }
+               }
+               #endif /* ipconfigCHECK_IP_QUEUE_SPACE */
+
+               /* Run the state-machine of the ksz8851 driver. */
+               ksz8851snl_update();
+
+               if( ( ulISREvents & EMAC_IF_ALL_EVENT ) == 0 )
+               {
+                       /* No events to process now, wait for the next. */
+                       ulTaskNotifyTake( pdTRUE, ulMaxBlockTime );
+               }
+
+               if( ( xTaskGetTickCount() - xLoggingTime ) > 10000 )
+               {
+                       xLoggingTime += 10000;
+                       FreeRTOS_printf( ( "Now Tx/Rx %7d /%7d\n",
+                               xMicrelDevice.ul_total_tx, xMicrelDevice.ul_total_rx ) );
+               }
+
+               if( ( ulISREvents & EMAC_IF_RX_EVENT ) != 0 )
+               {
+                       ulISREvents &= ~EMAC_IF_RX_EVENT;
+
+                       /* Wait for the EMAC interrupt to indicate that another packet has been
+                       received. */
+                       xResult = prvEMACRxPoll();
+               }
+
+               if( ( ulISREvents & EMAC_IF_TX_EVENT ) != 0 )
+               {
+                       /* Future extension: code to release TX buffers if zero-copy is used. */
+                       ulISREvents &= ~EMAC_IF_TX_EVENT;
+               }
+
+               if( ( ulISREvents & EMAC_IF_ERR_EVENT ) != 0 )
+               {
+                       /* Future extension: logging about errors that occurred. */
+                       ulISREvents &= ~EMAC_IF_ERR_EVENT;
+               }
+
+               if( xResult > 0 )
+               {
+                       /* As long as packets are being received, assume that
+                       the Link Status is high. */
+                       ulPHYLinkStatus |= BMSR_LINK_STATUS;
+                       /* A packet was received. No need to check for the PHY status now,
+                       but set a timer to check it later on. */
+                       vTaskSetTimeOutState( &xPhyTime );
+                       xPhyRemTime = pdMS_TO_TICKS( PHY_LS_HIGH_CHECK_TIME_MS );
+                       xResult = 0;
+               }
+               else if( ( xTaskCheckForTimeOut( &xPhyTime, &xPhyRemTime ) != pdFALSE ) &&
+                       ( xMicrelDevice.ul_spi_pdc_status == SPI_PDC_IDLE ) )
+               {
+                       /* Check the link status again. */
+                       xStatus = ulReadMDIO( PHY_REG_01_BMSR );
+
+                       if( ( ulPHYLinkStatus & BMSR_LINK_STATUS ) != ( xStatus & BMSR_LINK_STATUS ) )
+                       {
+                               ulPHYLinkStatus = xStatus;
+                               FreeRTOS_printf( ( "prvEMACHandlerTask: PHY LS now %d\n", ( ulPHYLinkStatus & BMSR_LINK_STATUS ) != 0 ) );
+                       }
+
+                       vTaskSetTimeOutState( &xPhyTime );
+                       if( ( ulPHYLinkStatus & BMSR_LINK_STATUS ) != 0 )
+                       {
+                               xPhyRemTime = pdMS_TO_TICKS( PHY_LS_HIGH_CHECK_TIME_MS );
+                       }
+                       else
+                       {
+                               xPhyRemTime = pdMS_TO_TICKS( PHY_LS_LOW_CHECK_TIME_MS );
+                       }
+               }
+       }
+}
+/*-----------------------------------------------------------*/
diff --git a/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/ksz8851snl/ksz8851snl.c b/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/ksz8851snl/ksz8851snl.c
deleted file mode 100644 (file)
index 1579863..0000000
+++ /dev/null
@@ -1,610 +0,0 @@
-/**\r
- *\r
- * \file\r
- *\r
- * \brief KS8851SNL driver for SAM.\r
- *\r
- * Copyright (c) 2013-2015 Atmel Corporation. All rights reserved.\r
- *\r
- * \asf_license_start\r
- *\r
- * \page License\r
- *\r
- * Redistribution and use in source and binary forms, with or without\r
- * modification, are permitted provided that the following conditions are met:\r
- *\r
- * 1. Redistributions of source code must retain the above copyright notice,\r
- *    this list of conditions and the following disclaimer.\r
- *\r
- * 2. Redistributions in binary form must reproduce the above copyright notice,\r
- *    this list of conditions and the following disclaimer in the documentation\r
- *    and/or other materials provided with the distribution.\r
- *\r
- * 3. The name of Atmel may not be used to endorse or promote products derived\r
- *    from this software without specific prior written permission.\r
- *\r
- * 4. This software may only be redistributed and used in connection with an\r
- *    Atmel microcontroller product.\r
- *\r
- * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED\r
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
- * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR\r
- * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\r
- * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\r
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
- * POSSIBILITY OF SUCH DAMAGE.\r
- *\r
- * \asf_license_stop\r
- *\r
- */\r
-/*\r
- * Support and FAQ: visit <a href="http://www.atmel.com/design-support/">Atmel Support</a>\r
- */\r
-\r
-/* FreeRTOS includes. */\r
-#include "FreeRTOS.h"\r
-#include "task.h"\r
-\r
-#include "spi_master.h"\r
-#include "ksz8851snl.h"\r
-#include "ksz8851snl_reg.h"\r
-#include "delay.h"\r
-#include "pio.h"\r
-#include "pio_handler.h"\r
-#include "pdc.h"\r
-#include "conf_eth.h"\r
-\r
-/* Clock polarity. */\r
-#define SPI_CLK_POLARITY 0\r
-\r
-/* Clock phase. */\r
-#define SPI_CLK_PHASE 1\r
-\r
-/* SPI PDC register base. */\r
-Pdc *g_p_spi_pdc = 0;\r
-\r
-int lUDPLoggingPrintf( const char *pcFormatString, ... );\r
-\r
-/* Temporary buffer for PDC reception. */\r
-uint8_t tmpbuf[1536] __attribute__ ((aligned (16)));\r
-\r
-union {\r
-       uint64_t ul[2];\r
-       uint8_t uc[16];\r
-} cmdBuf, respBuf;\r
-\r
-void dbg_add_line( const char *pcFormat, ... );\r
-\r
-static void spi_clear_ovres( void );\r
-\r
-/**\r
- * \brief Read register content, set bitmask and write back to register.\r
- *\r
- * \param reg the register address to modify.\r
- * \param bits_to_set bitmask to apply.\r
- */\r
-void ksz8851_reg_setbits(uint16_t reg, uint16_t bits_to_set)\r
-{\r
-   uint16_t    temp;\r
-\r
-   temp = ksz8851_reg_read(reg);\r
-   temp |= bits_to_set;\r
-   ksz8851_reg_write(reg, temp);\r
-}\r
-\r
-/**\r
- * \brief Read register content, clear bitmask and write back to register.\r
- *\r
- * \param reg the register address to modify.\r
- * \param bits_to_set bitmask to apply.\r
- */\r
-void ksz8851_reg_clrbits(uint16_t reg, uint16_t bits_to_clr)\r
-{\r
-   uint16_t    temp;\r
-\r
-   temp = ksz8851_reg_read(reg);\r
-   temp &= ~(uint32_t) bits_to_clr;\r
-   ksz8851_reg_write(reg, temp);\r
-}\r
-\r
-/**\r
- * \brief Configure the INTN interrupt.\r
- */\r
-void configure_intn(void (*p_handler) (uint32_t, uint32_t))\r
-{\r
-//     gpio_configure_pin(KSZ8851SNL_INTN_GPIO, PIO_INPUT);\r
-//     pio_set_input(PIOA, PIO_PA11_IDX, PIO_PULLUP);\r
-\r
-       /* Configure PIO clock. */\r
-       pmc_enable_periph_clk(INTN_ID);\r
-\r
-       /* Adjust PIO debounce filter parameters, uses 10 Hz filter. */\r
-       pio_set_debounce_filter(INTN_PIO, INTN_PIN_MSK, 10);\r
-\r
-       /* Initialize PIO interrupt handlers, see PIO definition in board.h. */\r
-       pio_handler_set(INTN_PIO, INTN_ID, INTN_PIN_MSK,\r
-               INTN_ATTR, p_handler);\r
-\r
-       /* Enable NVIC interrupts. */\r
-       NVIC_SetPriority(INTN_IRQn, INT_PRIORITY_PIO);\r
-       NVIC_EnableIRQ((IRQn_Type)INTN_ID);\r
-\r
-       /* Enable PIO interrupts. */\r
-       pio_enable_interrupt(INTN_PIO, INTN_PIN_MSK);\r
-}\r
-\r
-/**\r
- * \brief Read a register value.\r
- *\r
- * \param reg the register address to modify.\r
- *\r
- * \return the register value.\r
- */\r
-uint16_t ksz8851_reg_read(uint16_t reg)\r
-{\r
-pdc_packet_t g_pdc_spi_tx_packet;\r
-pdc_packet_t g_pdc_spi_rx_packet;\r
-uint16_t cmd = 0;\r
-uint16_t res = 0;\r
-int iTryCount = 3;\r
-\r
-       while( iTryCount-- > 0 )\r
-       {\r
-       uint32_t ulStatus;\r
-\r
-               spi_clear_ovres();\r
-               /* Move register address to cmd bits 9-2, make 32-bit address. */\r
-               cmd = (reg << 2) & REG_ADDR_MASK;\r
-\r
-               /* Last 2 bits still under "don't care bits" handled with byte enable. */\r
-               /* Select byte enable for command. */\r
-               if (reg & 2) {\r
-                       /* Odd word address writes bytes 2 and 3 */\r
-                       cmd |= (0xc << 10);\r
-               } else {\r
-                       /* Even word address write bytes 0 and 1 */\r
-                       cmd |= (0x3 << 10);\r
-               }\r
-\r
-               /* Add command read code. */\r
-               cmd |= CMD_READ;\r
-               cmdBuf.uc[0] = cmd >> 8;\r
-               cmdBuf.uc[1] = cmd & 0xff;\r
-               cmdBuf.uc[2] = CONFIG_SPI_MASTER_DUMMY;\r
-               cmdBuf.uc[3] = CONFIG_SPI_MASTER_DUMMY;\r
-\r
-               /* Prepare PDC transfer. */\r
-               g_pdc_spi_tx_packet.ul_addr = (uint32_t) cmdBuf.uc;\r
-               g_pdc_spi_tx_packet.ul_size = 4;\r
-               g_pdc_spi_rx_packet.ul_addr = (uint32_t) tmpbuf;\r
-               g_pdc_spi_rx_packet.ul_size = 4;\r
-               pdc_disable_transfer(g_p_spi_pdc, PERIPH_PTCR_RXTDIS | PERIPH_PTCR_TXTDIS);\r
-               pdc_tx_init(g_p_spi_pdc, &g_pdc_spi_tx_packet, NULL);\r
-               pdc_rx_init(g_p_spi_pdc, &g_pdc_spi_rx_packet, NULL);\r
-       gpio_set_pin_low(KSZ8851SNL_CSN_GPIO);\r
-\r
-       spi_disable_interrupt( KSZ8851SNL_SPI, ~0ul );\r
-               pdc_enable_transfer(g_p_spi_pdc, PERIPH_PTCR_RXTEN | PERIPH_PTCR_TXTEN);\r
-               for( ;; )\r
-               {\r
-                       ulStatus = spi_read_status( KSZ8851SNL_SPI );\r
-                       if( ( ulStatus & ( SPI_SR_OVRES | SPI_SR_ENDRX ) ) != 0 )\r
-                       {\r
-                               break;\r
-                       }\r
-               }\r
-               gpio_set_pin_high( KSZ8851SNL_CSN_GPIO );\r
-               if( ( ulStatus & SPI_SR_OVRES ) == 0 )\r
-               {\r
-                       break;\r
-               }\r
-               pdc_disable_transfer(g_p_spi_pdc, PERIPH_PTCR_RXTDIS | PERIPH_PTCR_TXTDIS);\r
-               lUDPLoggingPrintf( "ksz8851_reg_read: SPI_SR_OVRES\n" );\r
-       }\r
-\r
-       res = (tmpbuf[3] << 8) | tmpbuf[2];\r
-       return res;\r
-}\r
-\r
-/**\r
- * \brief Write a register value.\r
- *\r
- * \param reg the register address to modify.\r
- * \param wrdata the new register value.\r
- */\r
-void ksz8851_reg_write(uint16_t reg, uint16_t wrdata)\r
-{\r
-pdc_packet_t g_pdc_spi_tx_packet;\r
-pdc_packet_t g_pdc_spi_rx_packet;\r
-uint16_t cmd = 0;\r
-int iTryCount = 3;\r
-\r
-       while( iTryCount-- > 0 )\r
-       {\r
-       uint32_t ulStatus;\r
-\r
-\r
-               spi_clear_ovres();\r
-               /* Move register address to cmd bits 9-2, make 32-bit address. */\r
-               cmd = (reg << 2) & REG_ADDR_MASK;\r
-\r
-               /* Last 2 bits still under "don't care bits" handled with byte enable. */\r
-               /* Select byte enable for command. */\r
-               if (reg & 2) {\r
-                       /* Odd word address writes bytes 2 and 3 */\r
-                       cmd |= (0xc << 10);\r
-               } else {\r
-                       /* Even word address write bytes 0 and 1 */\r
-                       cmd |= (0x3 << 10);\r
-               }\r
-\r
-               /* Add command write code. */\r
-               cmd |= CMD_WRITE;\r
-               cmdBuf.uc[0] = cmd >> 8;\r
-               cmdBuf.uc[1] = cmd & 0xff;\r
-               cmdBuf.uc[2] = wrdata & 0xff;\r
-               cmdBuf.uc[3] = wrdata >> 8;\r
-\r
-               /* Prepare PDC transfer. */\r
-               g_pdc_spi_tx_packet.ul_addr = (uint32_t) cmdBuf.uc;\r
-               g_pdc_spi_tx_packet.ul_size = 4;\r
-               g_pdc_spi_rx_packet.ul_addr = (uint32_t) tmpbuf;\r
-               g_pdc_spi_rx_packet.ul_size = 4;\r
-               pdc_disable_transfer(g_p_spi_pdc, PERIPH_PTCR_RXTDIS | PERIPH_PTCR_TXTDIS);\r
-               pdc_tx_init(g_p_spi_pdc, &g_pdc_spi_tx_packet, NULL);\r
-               pdc_rx_init(g_p_spi_pdc, &g_pdc_spi_rx_packet, NULL);\r
-               gpio_set_pin_low(KSZ8851SNL_CSN_GPIO);\r
-\r
-               spi_disable_interrupt( KSZ8851SNL_SPI, ~0ul );\r
-\r
-               pdc_enable_transfer(g_p_spi_pdc, PERIPH_PTCR_RXTEN | PERIPH_PTCR_TXTEN);\r
-               for( ;; )\r
-               {\r
-                       ulStatus = spi_read_status( KSZ8851SNL_SPI );\r
-                       if( ( ulStatus & ( SPI_SR_OVRES | SPI_SR_ENDRX ) ) != 0 )\r
-                       {\r
-                               break;\r
-                       }\r
-               }\r
-               gpio_set_pin_high( KSZ8851SNL_CSN_GPIO );\r
-               if( ( ulStatus & SPI_SR_OVRES ) == 0 )\r
-               {\r
-                       break;\r
-               }\r
-               pdc_disable_transfer(g_p_spi_pdc, PERIPH_PTCR_RXTDIS | PERIPH_PTCR_TXTDIS);\r
-               lUDPLoggingPrintf( "ksz8851_reg_write: SPI_SR_OVRES\n" );\r
-       }\r
-}\r
-\r
-static void spi_clear_ovres( void )\r
-{\r
-volatile uint32_t rc;\r
-       rc = KSZ8851SNL_SPI->SPI_RDR;\r
-\r
-       spi_read_status( KSZ8851SNL_SPI );\r
-}\r
-\r
-/**\r
- * \brief Read internal fifo buffer.\r
- *\r
- * \param buf the buffer to store the data from the fifo buffer.\r
- * \param len the amount of data to read.\r
- */\r
-void ksz8851_fifo_read(uint8_t *buf, uint32_t len)\r
-{\r
-       pdc_packet_t g_pdc_spi_tx_packet;\r
-       pdc_packet_t g_pdc_spi_rx_packet;\r
-       pdc_packet_t g_pdc_spi_tx_npacket;\r
-       pdc_packet_t g_pdc_spi_rx_npacket;\r
-\r
-       memset( cmdBuf.uc, '\0', sizeof cmdBuf );\r
-       cmdBuf.uc[0] = FIFO_READ;\r
-       spi_clear_ovres();\r
-\r
-       /* Prepare PDC transfer. */\r
-       g_pdc_spi_tx_packet.ul_addr = (uint32_t) cmdBuf.uc;\r
-       g_pdc_spi_tx_packet.ul_size = 9;\r
-       g_pdc_spi_rx_packet.ul_addr = (uint32_t) respBuf.uc;\r
-       g_pdc_spi_rx_packet.ul_size = 9;\r
-\r
-       g_pdc_spi_tx_npacket.ul_addr = (uint32_t) buf;\r
-       g_pdc_spi_tx_npacket.ul_size = len;\r
-       g_pdc_spi_rx_npacket.ul_addr = (uint32_t) buf;\r
-       g_pdc_spi_rx_npacket.ul_size = len;\r
-       pdc_disable_transfer(g_p_spi_pdc, PERIPH_PTCR_RXTDIS | PERIPH_PTCR_TXTDIS);\r
-       pdc_tx_init(g_p_spi_pdc, &g_pdc_spi_tx_packet, &g_pdc_spi_tx_npacket);\r
-       pdc_rx_init(g_p_spi_pdc, &g_pdc_spi_rx_packet, &g_pdc_spi_rx_npacket);\r
-\r
-spi_enable_interrupt(KSZ8851SNL_SPI, SPI_IER_RXBUFF | SPI_IER_OVRES);\r
-\r
-       pdc_enable_transfer(g_p_spi_pdc, PERIPH_PTCR_RXTEN | PERIPH_PTCR_TXTEN);\r
-}\r
-\r
-/**\r
- * \brief Write internal fifo buffer.\r
- *\r
- * \param buf the buffer to send to the fifo buffer.\r
- * \param ulActualLength the total amount of data to write.\r
- * \param ulFIFOLength the size of the first pbuf to write from the pbuf chain.\r
- */\r
-void ksz8851_fifo_write(uint8_t *buf, uint32_t ulActualLength, uint32_t ulFIFOLength)\r
-{\r
-       static uint8_t frameID = 0;\r
-\r
-       pdc_packet_t g_pdc_spi_tx_packet;\r
-       pdc_packet_t g_pdc_spi_rx_packet;\r
-       pdc_packet_t g_pdc_spi_tx_npacket;\r
-       pdc_packet_t g_pdc_spi_rx_npacket;\r
-\r
-       /* Prepare control word and byte count. */\r
-       cmdBuf.uc[0] = FIFO_WRITE;\r
-       cmdBuf.uc[1] = frameID++ & 0x3f;\r
-       cmdBuf.uc[2] = 0;\r
-       cmdBuf.uc[3] = ulActualLength & 0xff;\r
-       cmdBuf.uc[4] = ulActualLength >> 8;\r
-\r
-       spi_clear_ovres();\r
-\r
-       /* Prepare PDC transfer. */\r
-       g_pdc_spi_tx_packet.ul_addr = (uint32_t) cmdBuf.uc;\r
-       g_pdc_spi_tx_packet.ul_size = 5;\r
-\r
-       g_pdc_spi_rx_packet.ul_addr = (uint32_t) respBuf.uc;\r
-       g_pdc_spi_rx_packet.ul_size = 5;\r
-\r
-       g_pdc_spi_tx_npacket.ul_addr = (uint32_t) buf;\r
-       g_pdc_spi_tx_npacket.ul_size = ulFIFOLength;\r
-\r
-       g_pdc_spi_rx_npacket.ul_addr = (uint32_t) tmpbuf;\r
-       g_pdc_spi_rx_npacket.ul_size = ulFIFOLength;\r
-\r
-       pdc_disable_transfer(g_p_spi_pdc, PERIPH_PTCR_RXTDIS | PERIPH_PTCR_TXTDIS);\r
-       pdc_tx_init(g_p_spi_pdc, &g_pdc_spi_tx_packet, &g_pdc_spi_tx_npacket);\r
-       #if( TX_USES_RECV == 1 )\r
-               pdc_rx_init(g_p_spi_pdc, &g_pdc_spi_rx_packet, &g_pdc_spi_rx_npacket);\r
-               spi_enable_interrupt(KSZ8851SNL_SPI, SPI_IER_ENDRX | SPI_IER_OVRES);\r
-               pdc_enable_transfer(g_p_spi_pdc, PERIPH_PTCR_RXTEN | PERIPH_PTCR_TXTEN);\r
-       #else\r
-               spi_enable_interrupt(KSZ8851SNL_SPI, SPI_SR_TXBUFE | SPI_IER_OVRES);\r
-               pdc_enable_transfer(g_p_spi_pdc, PERIPH_PTCR_TXTEN);\r
-       #endif\r
-}\r
-\r
-/**\r
- * \brief Write dummy data to the internal fifo buffer.\r
- *\r
- * \param len the amount of dummy data to write.\r
- */\r
-void ksz8851_fifo_dummy(uint32_t len)\r
-{\r
-       pdc_packet_t g_pdc_spi_tx_packet;\r
-       pdc_packet_t g_pdc_spi_rx_packet;\r
-\r
-       /* Prepare PDC transfer. */\r
-       g_pdc_spi_tx_packet.ul_addr = (uint32_t) tmpbuf;\r
-       g_pdc_spi_tx_packet.ul_size = len;\r
-       g_pdc_spi_rx_packet.ul_addr = (uint32_t) tmpbuf;\r
-       g_pdc_spi_rx_packet.ul_size = len;\r
-       pdc_disable_transfer(g_p_spi_pdc, PERIPH_PTCR_RXTDIS | PERIPH_PTCR_TXTDIS);\r
-       pdc_tx_init(g_p_spi_pdc, &g_pdc_spi_tx_packet, NULL);\r
-       pdc_rx_init(g_p_spi_pdc, &g_pdc_spi_rx_packet, NULL);\r
-       pdc_enable_transfer(g_p_spi_pdc, PERIPH_PTCR_RXTEN | PERIPH_PTCR_TXTEN);\r
-\r
-       while (!(spi_read_status(KSZ8851SNL_SPI) & SPI_SR_ENDRX))\r
-               ;\r
-}\r
-\r
-void ksz8851snl_set_registers(void)\r
-{\r
-       /* Init step2-4: write QMU MAC address (low, middle then high). */\r
-       ksz8851_reg_write(REG_MAC_ADDR_0, (ETHERNET_CONF_ETHADDR4 << 8) | ETHERNET_CONF_ETHADDR5);\r
-       ksz8851_reg_write(REG_MAC_ADDR_2, (ETHERNET_CONF_ETHADDR2 << 8) | ETHERNET_CONF_ETHADDR3);\r
-       ksz8851_reg_write(REG_MAC_ADDR_4, (ETHERNET_CONF_ETHADDR0 << 8) | ETHERNET_CONF_ETHADDR1);\r
-\r
-       /* Init step5: enable QMU Transmit Frame Data Pointer Auto Increment. */\r
-       ksz8851_reg_write(REG_TX_ADDR_PTR, ADDR_PTR_AUTO_INC);\r
-\r
-       /* Init step6: configure QMU transmit control register. */\r
-       ksz8851_reg_write(REG_TX_CTRL,\r
-                       TX_CTRL_ICMP_CHECKSUM |\r
-                       TX_CTRL_UDP_CHECKSUM |\r
-                       TX_CTRL_TCP_CHECKSUM |\r
-                       TX_CTRL_IP_CHECKSUM |\r
-                       TX_CTRL_FLOW_ENABLE |\r
-                       TX_CTRL_PAD_ENABLE |\r
-                       TX_CTRL_CRC_ENABLE\r
-               );\r
-\r
-       /* Init step7: enable QMU Receive Frame Data Pointer Auto Increment. */\r
-       ksz8851_reg_write(REG_RX_ADDR_PTR, ADDR_PTR_AUTO_INC);\r
-\r
-       /* Init step8: configure QMU Receive Frame Threshold for one frame. */\r
-       ksz8851_reg_write(REG_RX_FRAME_CNT_THRES, 1);\r
-\r
-       /* Init step9: configure QMU receive control register1. */\r
-       ksz8851_reg_write(REG_RX_CTRL1,\r
-                       RX_CTRL_UDP_CHECKSUM |\r
-                       RX_CTRL_TCP_CHECKSUM |\r
-                       RX_CTRL_IP_CHECKSUM |\r
-                       RX_CTRL_MAC_FILTER |\r
-                       RX_CTRL_FLOW_ENABLE |\r
-                       RX_CTRL_BROADCAST |\r
-                       RX_CTRL_ALL_MULTICAST|\r
-                       RX_CTRL_UNICAST);\r
-//     ksz8851_reg_write(REG_RX_CTRL1,\r
-//                     RX_CTRL_UDP_CHECKSUM |\r
-//                     RX_CTRL_TCP_CHECKSUM |\r
-//                     RX_CTRL_IP_CHECKSUM |\r
-//                     RX_CTRL_FLOW_ENABLE |\r
-//                     RX_CTRL_PROMISCUOUS);\r
-\r
-       ksz8851_reg_write(REG_RX_CTRL2,\r
-                       RX_CTRL_IPV6_UDP_NOCHECKSUM |\r
-                       RX_CTRL_UDP_LITE_CHECKSUM |\r
-                       RX_CTRL_ICMP_CHECKSUM |\r
-                       RX_CTRL_BURST_LEN_FRAME);\r
-\r
-\r
-//#define   RXQ_TWOBYTE_OFFSET          (0x0200)    /* Enable adding 2-byte before frame header for IP aligned with DWORD */\r
-#warning Remember to try the above option to get a 2-byte offset\r
-\r
-       /* Init step11: configure QMU receive queue: trigger INT and auto-dequeue frame. */\r
-       ksz8851_reg_write( REG_RXQ_CMD, RXQ_CMD_CNTL | RXQ_TWOBYTE_OFFSET );\r
-\r
-       /* Init step12: adjust SPI data output delay. */\r
-       ksz8851_reg_write(REG_BUS_CLOCK_CTRL, BUS_CLOCK_166 | BUS_CLOCK_DIVIDEDBY_1);\r
-\r
-       /* Init step13: restart auto-negotiation. */\r
-       ksz8851_reg_setbits(REG_PORT_CTRL, PORT_AUTO_NEG_RESTART);\r
-\r
-       /* Init step13.1: force link in half duplex if auto-negotiation failed. */\r
-       if ((ksz8851_reg_read(REG_PORT_CTRL) & PORT_AUTO_NEG_RESTART) != PORT_AUTO_NEG_RESTART)\r
-       {\r
-               ksz8851_reg_clrbits(REG_PORT_CTRL, PORT_FORCE_FULL_DUPLEX);\r
-       }\r
-\r
-       /* Init step14: clear interrupt status. */\r
-       ksz8851_reg_write(REG_INT_STATUS, 0xFFFF);\r
-\r
-       /* Init step15: set interrupt mask. */\r
-       ksz8851_reg_write(REG_INT_MASK, INT_RX);\r
-\r
-       /* Init step16: enable QMU Transmit. */\r
-       ksz8851_reg_setbits(REG_TX_CTRL, TX_CTRL_ENABLE);\r
-\r
-       /* Init step17: enable QMU Receive. */\r
-       ksz8851_reg_setbits(REG_RX_CTRL1, RX_CTRL_ENABLE);\r
-}\r
-/**\r
- * \brief KSZ8851SNL initialization function.\r
- *\r
- * \return 0 on success, 1 on communication error.\r
- */\r
-uint32_t ksz8851snl_init(void)\r
-{\r
-uint32_t count = 10;\r
-uint16_t dev_id = 0;\r
-uint8_t id_ok = 0;\r
-\r
-       /* Configure the SPI peripheral. */\r
-       spi_enable_clock(KSZ8851SNL_SPI);\r
-       spi_disable(KSZ8851SNL_SPI);\r
-       spi_reset(KSZ8851SNL_SPI);\r
-       spi_set_master_mode(KSZ8851SNL_SPI);\r
-       spi_disable_mode_fault_detect(KSZ8851SNL_SPI);\r
-       spi_set_peripheral_chip_select_value(KSZ8851SNL_SPI, ~(uint32_t)(1UL << KSZ8851SNL_CS_PIN));\r
-spi_set_fixed_peripheral_select(KSZ8851SNL_SPI);\r
-//spi_disable_peripheral_select_decode(KSZ8851SNL_SPI);\r
-\r
-       spi_set_clock_polarity(KSZ8851SNL_SPI, KSZ8851SNL_CS_PIN, SPI_CLK_POLARITY);\r
-       spi_set_clock_phase(KSZ8851SNL_SPI, KSZ8851SNL_CS_PIN, SPI_CLK_PHASE);\r
-       spi_set_bits_per_transfer(KSZ8851SNL_SPI, KSZ8851SNL_CS_PIN,\r
-                       SPI_CSR_BITS_8_BIT);\r
-       spi_set_baudrate_div(KSZ8851SNL_SPI, KSZ8851SNL_CS_PIN, (sysclk_get_cpu_hz() / KSZ8851SNL_CLOCK_SPEED));\r
-//     spi_set_transfer_delay(KSZ8851SNL_SPI, KSZ8851SNL_CS_PIN, CONFIG_SPI_MASTER_DELAY_BS,\r
-//                     CONFIG_SPI_MASTER_DELAY_BCT);\r
-\r
-\r
-       spi_set_transfer_delay(KSZ8851SNL_SPI, KSZ8851SNL_CS_PIN, 0, 0);\r
-\r
-       spi_enable(KSZ8851SNL_SPI);\r
-\r
-       /* Get pointer to UART PDC register base. */\r
-       g_p_spi_pdc = spi_get_pdc_base(KSZ8851SNL_SPI);\r
-       pdc_enable_transfer(g_p_spi_pdc, PERIPH_PTCR_RXTEN | PERIPH_PTCR_TXTEN);\r
-\r
-       /* Control RSTN and CSN pin from the driver. */\r
-       gpio_configure_pin(KSZ8851SNL_CSN_GPIO, KSZ8851SNL_CSN_FLAGS);\r
-       gpio_set_pin_high(KSZ8851SNL_CSN_GPIO);\r
-       gpio_configure_pin(KSZ8851SNL_RSTN_GPIO, KSZ8851SNL_RSTN_FLAGS);\r
-\r
-       /* Reset the Micrel in a proper state. */\r
-       while( count-- )\r
-       {\r
-               /* Perform hardware reset with respect to the reset timing from the datasheet. */\r
-               gpio_set_pin_low(KSZ8851SNL_RSTN_GPIO);\r
-               vTaskDelay(2);\r
-               gpio_set_pin_high(KSZ8851SNL_RSTN_GPIO);\r
-               vTaskDelay(2);\r
-\r
-               /* Init step1: read chip ID. */\r
-               dev_id = ksz8851_reg_read(REG_CHIP_ID);\r
-               if( ( dev_id & 0xFFF0 ) == CHIP_ID_8851_16 )\r
-               {\r
-                       id_ok = 1;\r
-                       break;\r
-               }\r
-       }\r
-       if( id_ok != 0 )\r
-       {\r
-               ksz8851snl_set_registers();\r
-       }\r
-\r
-       return id_ok ? 1 : -1;\r
-}\r
-\r
-uint32_t ksz8851snl_reinit(void)\r
-{\r
-uint32_t count = 10;\r
-uint16_t dev_id = 0;\r
-uint8_t id_ok = 0;\r
-       /* Reset the Micrel in a proper state. */\r
-       while( count-- )\r
-       {\r
-               /* Perform hardware reset with respect to the reset timing from the datasheet. */\r
-               gpio_set_pin_low(KSZ8851SNL_RSTN_GPIO);\r
-               vTaskDelay(2);\r
-               gpio_set_pin_high(KSZ8851SNL_RSTN_GPIO);\r
-               vTaskDelay(2);\r
-\r
-               /* Init step1: read chip ID. */\r
-               dev_id = ksz8851_reg_read(REG_CHIP_ID);\r
-               if( ( dev_id & 0xFFF0 ) == CHIP_ID_8851_16 )\r
-               {\r
-                       id_ok = 1;\r
-                       break;\r
-               }\r
-       }\r
-       if( id_ok != 0 )\r
-       {\r
-               ksz8851snl_set_registers();\r
-       }\r
-\r
-       return id_ok ? 1 : -1;\r
-}\r
-\r
-uint32_t ksz8851snl_reset_rx( void )\r
-{\r
-uint16_t usValue;\r
-\r
-       usValue = ksz8851_reg_read(REG_RX_CTRL1);\r
-\r
-       usValue &= ~( ( uint16_t ) RX_CTRL_ENABLE | RX_CTRL_FLUSH_QUEUE );\r
-\r
-       ksz8851_reg_write( REG_RX_CTRL1, usValue ); vTaskDelay( 2 );\r
-       ksz8851_reg_write( REG_RX_CTRL1, usValue | RX_CTRL_FLUSH_QUEUE ); vTaskDelay( 1 );\r
-       ksz8851_reg_write( REG_RX_CTRL1, usValue ); vTaskDelay( 1 );\r
-       ksz8851_reg_write( REG_RX_CTRL1, usValue | RX_CTRL_ENABLE ); vTaskDelay( 1 );\r
-\r
-       return ( uint32_t )usValue;\r
-}\r
-\r
-uint32_t ksz8851snl_reset_tx( void )\r
-{\r
-uint16_t usValue;\r
-\r
-       usValue = ksz8851_reg_read( REG_TX_CTRL );\r
-\r
-       usValue &= ~( ( uint16_t ) TX_CTRL_ENABLE | TX_CTRL_FLUSH_QUEUE );\r
-\r
-       ksz8851_reg_write( REG_TX_CTRL, usValue ); vTaskDelay( 2 );\r
-       ksz8851_reg_write( REG_TX_CTRL, usValue | TX_CTRL_FLUSH_QUEUE ); vTaskDelay( 1 );\r
-       ksz8851_reg_write( REG_TX_CTRL, usValue ); vTaskDelay( 1 );\r
-       ksz8851_reg_write( REG_TX_CTRL, usValue | TX_CTRL_ENABLE ); vTaskDelay( 1 );\r
-\r
-       return ( uint32_t )usValue;\r
-}\r
diff --git a/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/ksz8851snl/ksz8851snl.h b/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/ksz8851snl/ksz8851snl.h
deleted file mode 100644 (file)
index 7952dc2..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-/**\r
- *\r
- * \file\r
- *\r
- * \brief KS8851SNL driver for SAM.\r
- *\r
- * Copyright (c) 2013-2015 Atmel Corporation. All rights reserved.\r
- *\r
- * \asf_license_start\r
- *\r
- * \page License\r
- *\r
- * Redistribution and use in source and binary forms, with or without\r
- * modification, are permitted provided that the following conditions are met:\r
- *\r
- * 1. Redistributions of source code must retain the above copyright notice,\r
- *    this list of conditions and the following disclaimer.\r
- *\r
- * 2. Redistributions in binary form must reproduce the above copyright notice,\r
- *    this list of conditions and the following disclaimer in the documentation\r
- *    and/or other materials provided with the distribution.\r
- *\r
- * 3. The name of Atmel may not be used to endorse or promote products derived\r
- *    from this software without specific prior written permission.\r
- *\r
- * 4. This software may only be redistributed and used in connection with an\r
- *    Atmel microcontroller product.\r
- *\r
- * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED\r
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
- * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR\r
- * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\r
- * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\r
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
- * POSSIBILITY OF SUCH DAMAGE.\r
- *\r
- * \asf_license_stop\r
- *\r
- */\r
-/*\r
- * Support and FAQ: visit <a href="http://www.atmel.com/design-support/">Atmel Support</a>\r
- */\r
-\r
-#ifndef KSZ8851SNL_H_INCLUDED\r
-#define KSZ8851SNL_H_INCLUDED\r
-\r
-#include "gpio.h"\r
-\r
-void configure_intn(void (*p_handler) (uint32_t, uint32_t));\r
-void ksz8851_reg_setbits(uint16_t reg, uint16_t bits_to_set);\r
-void ksz8851_reg_clrbits(uint16_t reg, uint16_t bits_to_clr);\r
-void ksz8851_fifo_read(uint8_t *buf, uint32_t len);\r
-void ksz8851_fifo_write(uint8_t *buf, uint32_t ulActualLength, uint32_t ulFIFOLength);\r
-void ksz8851_fifo_dummy(uint32_t len);\r
-void ksz8851_reg_write(uint16_t reg, uint16_t wrdata);\r
-uint16_t ksz8851_reg_read(uint16_t reg);\r
-uint32_t ksz8851snl_init(void);\r
-uint32_t ksz8851snl_reinit(void);\r
-\r
-uint32_t ksz8851snl_reset_rx( void );\r
-uint32_t ksz8851snl_reset_tx( void );\r
-\r
-#endif /* KSZ8851SNL_H_INCLUDED */\r
diff --git a/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/ksz8851snl/ksz8851snl_reg.h b/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/ksz8851snl/ksz8851snl_reg.h
deleted file mode 100644 (file)
index 3102fcc..0000000
+++ /dev/null
@@ -1,473 +0,0 @@
-/**\r
- *\r
- * \file\r
- *\r
- * \brief KS8851SNL registers definitions.\r
- *\r
- * Copyright (c) 2013-2015 Atmel Corporation. All rights reserved.\r
- *\r
- * \asf_license_start\r
- *\r
- * \page License\r
- *\r
- * Redistribution and use in source and binary forms, with or without\r
- * modification, are permitted provided that the following conditions are met:\r
- *\r
- * 1. Redistributions of source code must retain the above copyright notice,\r
- *    this list of conditions and the following disclaimer.\r
- *\r
- * 2. Redistributions in binary form must reproduce the above copyright notice,\r
- *    this list of conditions and the following disclaimer in the documentation\r
- *    and/or other materials provided with the distribution.\r
- *\r
- * 3. The name of Atmel may not be used to endorse or promote products derived\r
- *    from this software without specific prior written permission.\r
- *\r
- * 4. This software may only be redistributed and used in connection with an\r
- *    Atmel microcontroller product.\r
- *\r
- * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED\r
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
- * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR\r
- * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\r
- * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\r
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
- * POSSIBILITY OF SUCH DAMAGE.\r
- *\r
- * \asf_license_stop\r
- *\r
- */\r
-/*\r
- * Support and FAQ: visit <a href="http://www.atmel.com/design-support/">Atmel Support</a>\r
- */\r
-\r
-#ifndef KSZ8851SNL_REG_H_INCLUDED\r
-#define KSZ8851SNL_REG_H_INCLUDED\r
-\r
-#define REG_ADDR_MASK              (0x3F0)      /* Register address mask */\r
-#define OPCODE_MASK                (3 << 14)\r
-#define CMD_READ                   (0 << 14)\r
-#define CMD_WRITE                  (1 << 14)\r
-#define FIFO_READ                  (0x80)\r
-#define FIFO_WRITE                 (0xC0)\r
-\r
-/*\r
- * MAC Registers\r
- * (Offset 0x00 - 0x25)\r
- */\r
-#define REG_BUS_ERROR_STATUS       (0x06)       /* BESR */\r
-#define   BUS_ERROR_IBEC              (0x8000)\r
-#define   BUS_ERROR_IBECV_MASK        (0x7800)    /* Default IPSec clock at 166Mhz */\r
-\r
-#define REG_CHIP_CFG_STATUS        (0x08)       /* CCFG */\r
-#define   LITTLE_ENDIAN_BUS_MODE      (0x0400)    /* Bus in little endian mode */\r
-#define   EEPROM_PRESENCE             (0x0200)    /* External EEPROM is used */\r
-#define   SPI_BUS_MODE                (0x0100)    /* In SPI bus mode */\r
-#define   DATA_BUS_8BIT               (0x0080)    /* In 8-bit bus mode operation */\r
-#define   DATA_BUS_16BIT              (0x0040)    /* In 16-bit bus mode operation */\r
-#define   DATA_BUS_32BIT              (0x0020)    /* In 32-bit bus mode operation */\r
-#define   MULTIPLEX_MODE              (0x0010)    /* Data and address bus are shared */\r
-#define   CHIP_PACKAGE_128PIN         (0x0008)    /* 128-pin package */\r
-#define   CHIP_PACKAGE_80PIN          (0x0004)    /* 80-pin package */\r
-#define   CHIP_PACKAGE_48PIN          (0x0002)    /* 48-pin package */\r
-#define   CHIP_PACKAGE_32PIN          (0x0001)    /* 32-pin package for SPI host interface only */\r
-\r
-#define REG_MAC_ADDR_0             (0x10)       /* MARL */\r
-#define REG_MAC_ADDR_1             (0x11)       /* MARL */\r
-#define REG_MAC_ADDR_2             (0x12)       /* MARM */\r
-#define REG_MAC_ADDR_3             (0x13)       /* MARM */\r
-#define REG_MAC_ADDR_4             (0x14)       /* MARH */\r
-#define REG_MAC_ADDR_5             (0x15)       /* MARH */\r
-\r
-#define REG_BUS_CLOCK_CTRL         (0x20)       /* OBCR */\r
-#define   BUS_CLOCK_166               (0x0004)    /* 166 MHz on-chip bus clock (defaul is 125MHz) */\r
-#define   BUS_CLOCK_DIVIDEDBY_5       (0x0003)    /* Bus clock devided by 5 */\r
-#define   BUS_CLOCK_DIVIDEDBY_3       (0x0002)    /* Bus clock devided by 3 */\r
-#define   BUS_CLOCK_DIVIDEDBY_2       (0x0001)    /* Bus clock devided by 2 */\r
-#define   BUS_CLOCK_DIVIDEDBY_1       (0x0000)    /* Bus clock devided by 1 */\r
-#define   BUS_CLOCK_DIVIDED_MASK      (0x0003)    /* Bus clock devider mask */\r
-\r
-#define   BUS_SPEED_166_MHZ           (0x0004)    /* Set bus speed to 166 MHz */\r
-#define   BUS_SPEED_125_MHZ           (0x0000)    /* Set bus speed to 125 MHz */\r
-#define   BUS_SPEED_83_MHZ            (0x0005)    /* Set bus speed to 83 MHz (166/2)*/\r
-#define   BUS_SPEED_62_5_MHZ          (0x0001)    /* Set bus speed to 62.5 MHz (125/2) */\r
-#define   BUS_SPEED_53_3_MHZ          (0x0006)    /* Set bus speed to 53.3 MHz (166/3) */\r
-#define   BUS_SPEED_41_7_MHZ          (0x0002)    /* Set bus speed to 41.67 MHz (125/3) */\r
-#define   BUS_SPEED_33_2_MHZ          (0x0007)    /* Set bus speed to 33.2 MHz (166/5) */\r
-#define   BUS_SPEED_25_MHZ            (0x0003)    /* Set bus speed to 25 MHz (125/5) */\r
-\r
-#define REG_EEPROM_CTRL            (0x22)       /* EEPCR */\r
-#define   EEPROM_ACCESS_ENABLE        (0x0010)    /* Enable software to access EEPROM through bit 3 to bit 0 */\r
-#define   EEPROM_DATA_IN              (0x0008)    /* Data receive from EEPROM (EEDI pin) */\r
-#define   EEPROM_DATA_OUT             (0x0004)    /* Data transmit to EEPROM (EEDO pin) */\r
-#define   EEPROM_SERIAL_CLOCK         (0x0002)    /* Serial clock (EESK pin) */\r
-#define   EEPROM_CHIP_SELECT          (0x0001)    /* EEPROM chip select (EECS pin) */\r
-\r
-#define REG_MEM_BIST_INFO          (0x24)       /* MBIR */\r
-#define   TX_MEM_TEST_FINISHED        (0x1000)    /* TX memeory BIST test finish */\r
-#define   TX_MEM_TEST_FAILED          (0x0800)    /* TX memory BIST test fail */\r
-#define   TX_MEM_TEST_FAILED_COUNT    (0x0700)    /* TX memory BIST test fail count */\r
-#define   RX_MEM_TEST_FINISHED        (0x0010)    /* RX memory BIST test finish */\r
-#define   RX_MEM_TEST_FAILED          (0x0008)    /* RX memory BIST test fail */\r
-#define   RX_MEM_TEST_FAILED_COUNT    (0x0003)    /* RX memory BIST test fail count */\r
-\r
-#define REG_RESET_CTRL             (0x26)       /* GRR */\r
-#define   QMU_SOFTWARE_RESET          (0x0002)    /* QMU soft reset (clear TxQ, RxQ) */\r
-#define   GLOBAL_SOFTWARE_RESET       (0x0001)    /* Global soft reset (PHY, MAC, QMU) */\r
-\r
-/*\r
- * Wake On Lan Control Registers\r
- * (Offset 0x2A - 0x6B)\r
- */\r
-#define REG_WOL_CTRL               (0x2A)       /* WFCR */\r
-#define   WOL_MAGIC_ENABLE            (0x0080)    /* Enable the magic packet pattern detection */\r
-#define   WOL_FRAME3_ENABLE           (0x0008)    /* Enable the wake up frame 3 pattern detection */\r
-#define   WOL_FRAME2_ENABLE           (0x0004)    /* Enable the wake up frame 2 pattern detection */\r
-#define   WOL_FRAME1_ENABLE           (0x0002)    /* Enable the wake up frame 1 pattern detection */\r
-#define   WOL_FRAME0_ENABLE           (0x0001)    /* Enable the wake up frame 0 pattern detection */\r
-\r
-#define REG_WOL_FRAME0_CRC0        (0x30)       /* WF0CRC0 */\r
-#define REG_WOL_FRAME0_CRC1        (0x32)       /* WF0CRC1 */\r
-#define REG_WOL_FRAME0_BYTE_MASK0  (0x34)       /* WF0BM0 */\r
-#define REG_WOL_FRAME0_BYTE_MASK1  (0x36)       /* WF0BM1 */\r
-#define REG_WOL_FRAME0_BYTE_MASK2  (0x38)       /* WF0BM2 */\r
-#define REG_WOL_FRAME0_BYTE_MASK3  (0x3A)       /* WF0BM3 */\r
-\r
-#define REG_WOL_FRAME1_CRC0        (0x40)       /* WF1CRC0 */\r
-#define REG_WOL_FRAME1_CRC1        (0x42)       /* WF1CRC1 */\r
-#define REG_WOL_FRAME1_BYTE_MASK0  (0x44)       /* WF1BM0 */\r
-#define REG_WOL_FRAME1_BYTE_MASK1  (0x46)       /* WF1BM1 */\r
-#define REG_WOL_FRAME1_BYTE_MASK2  (0x48)       /* WF1BM2 */\r
-#define REG_WOL_FRAME1_BYTE_MASK3  (0x4A)       /* WF1BM3 */\r
-\r
-#define REG_WOL_FRAME2_CRC0        (0x50)       /* WF2CRC0 */\r
-#define REG_WOL_FRAME2_CRC1        (0x52)       /* WF2CRC1 */\r
-#define REG_WOL_FRAME2_BYTE_MASK0  (0x54)       /* WF2BM0 */\r
-#define REG_WOL_FRAME2_BYTE_MASK1  (0x56)       /* WF2BM1 */\r
-#define REG_WOL_FRAME2_BYTE_MASK2  (0x58)       /* WF2BM2 */\r
-#define REG_WOL_FRAME2_BYTE_MASK3  (0x5A)       /* WF2BM3 */\r
-\r
-#define REG_WOL_FRAME3_CRC0        (0x60)       /* WF3CRC0 */\r
-#define REG_WOL_FRAME3_CRC1        (0x62)       /* WF3CRC1 */\r
-#define REG_WOL_FRAME3_BYTE_MASK0  (0x64)       /* WF3BM0 */\r
-#define REG_WOL_FRAME3_BYTE_MASK1  (0x66)       /* WF3BM1 */\r
-#define REG_WOL_FRAME3_BYTE_MASK2  (0x68)       /* WF3BM2 */\r
-#define REG_WOL_FRAME3_BYTE_MASK3  (0x6A)       /* WF3BM3 */\r
-\r
-/*\r
- * Transmit/Receive Control Registers\r
- * (Offset 0x70 - 0x9F)\r
- */\r
-\r
-/* Transmit Frame Header */\r
-#define REG_QDR_DUMMY              (0x00)       /* Dummy address to access QMU RxQ, TxQ */\r
-#define   TX_CTRL_INTERRUPT_ON        (0x8000)    /* Transmit Interrupt on Completion */\r
-\r
-#define REG_TX_CTRL                (0x70)       /* TXCR */\r
-#define   TX_CTRL_ICMP_CHECKSUM       (0x0100)    /* Enable ICMP frame checksum generation */\r
-#define   TX_CTRL_UDP_CHECKSUM        (0x0080)    /* Enable UDP frame checksum generation */\r
-#define   TX_CTRL_TCP_CHECKSUM        (0x0040)    /* Enable TCP frame checksum generation */\r
-#define   TX_CTRL_IP_CHECKSUM         (0x0020)    /* Enable IP frame checksum generation */\r
-#define   TX_CTRL_FLUSH_QUEUE         (0x0010)    /* Clear transmit queue, reset tx frame pointer */\r
-#define   TX_CTRL_FLOW_ENABLE         (0x0008)    /* Enable transmit flow control */\r
-#define   TX_CTRL_PAD_ENABLE          (0x0004)    /* Eanble adding a padding to a packet shorter than 64 bytes */\r
-#define   TX_CTRL_CRC_ENABLE          (0x0002)    /* Enable adding a CRC to the end of transmit frame */\r
-#define   TX_CTRL_ENABLE              (0x0001)    /* Enable tranmsit */\r
-\r
-#define REG_TX_STATUS              (0x72)       /* TXSR */\r
-#define   TX_STAT_LATE_COL            (0x2000)    /* Tranmsit late collision occurs */\r
-#define   TX_STAT_MAX_COL             (0x1000)    /* Tranmsit maximum collision is reached */\r
-#define   TX_FRAME_ID_MASK            (0x003F)    /* Transmit frame ID mask */\r
-#define   TX_STAT_ERRORS             ( TX_STAT_MAX_COL | TX_STAT_LATE_COL )\r
-\r
-#define REG_RX_CTRL1               (0x74)       /* RXCR1 */\r
-#define   RX_CTRL_FLUSH_QUEUE         (0x8000)    /* Clear receive queue, reset rx frame pointer */\r
-#define   RX_CTRL_UDP_CHECKSUM        (0x4000)    /* Enable UDP frame checksum verification */\r
-#define   RX_CTRL_TCP_CHECKSUM        (0x2000)    /* Enable TCP frame checksum verification */\r
-#define   RX_CTRL_IP_CHECKSUM         (0x1000)    /* Enable IP frame checksum verification */\r
-#define   RX_CTRL_MAC_FILTER          (0x0800)    /* Receive with address that pass MAC address filtering */\r
-#define   RX_CTRL_FLOW_ENABLE         (0x0400)    /* Enable receive flow control */\r
-#define   RX_CTRL_BAD_PACKET          (0x0200)    /* Eanble receive CRC error frames */\r
-#define   RX_CTRL_MULTICAST           (0x0100)    /* Receive multicast frames that pass the CRC hash filtering */\r
-#define   RX_CTRL_BROADCAST           (0x0080)    /* Receive all the broadcast frames */\r
-#define   RX_CTRL_ALL_MULTICAST       (0x0040)    /* Receive all the multicast frames (including broadcast frames) */\r
-#define   RX_CTRL_UNICAST             (0x0020)    /* Receive unicast frames that match the device MAC address */\r
-#define   RX_CTRL_PROMISCUOUS         (0x0010)    /* Receive all incoming frames, regardless of frame's DA */\r
-#define   RX_CTRL_STRIP_CRC           (0x0008)    /* Enable strip CRC on the received frames */\r
-#define   RX_CTRL_INVERSE_FILTER      (0x0002)    /* Receive with address check in inverse filtering mode */\r
-#define   RX_CTRL_ENABLE              (0x0001)    /* Enable receive */\r
-\r
-/* Address filtering scheme mask */\r
-#define RX_CTRL_FILTER_MASK    ( RX_CTRL_INVERSE_FILTER | RX_CTRL_PROMISCUOUS | RX_CTRL_MULTICAST | RX_CTRL_MAC_FILTER )\r
-\r
-#define REG_RX_CTRL2               (0x76)       /* RXCR2 */\r
-#define   RX_CTRL_IPV6_UDP_NOCHECKSUM (0x0010)    /* No checksum generation and verification if IPv6 UDP is fragment */\r
-#define   RX_CTRL_IPV6_UDP_CHECKSUM   (0x0008)    /* Receive pass IPv6 UDP frame with UDP checksum is zero */\r
-#define   RX_CTRL_UDP_LITE_CHECKSUM   (0x0004)    /* Enable UDP Lite frame checksum generation and verification */\r
-#define   RX_CTRL_ICMP_CHECKSUM       (0x0002)    /* Enable ICMP frame checksum verification */\r
-#define   RX_CTRL_BLOCK_MAC           (0x0001)    /* Receive drop frame if the SA is same as device MAC address */\r
-#define   RX_CTRL_BURST_LEN_MASK      (0x00e0)    /* SRDBL SPI Receive Data Burst Length */\r
-#define   RX_CTRL_BURST_LEN_4         (0x0000)\r
-#define   RX_CTRL_BURST_LEN_8         (0x0020)\r
-#define   RX_CTRL_BURST_LEN_16        (0x0040)\r
-#define   RX_CTRL_BURST_LEN_32        (0x0060)\r
-#define   RX_CTRL_BURST_LEN_FRAME     (0x0080)\r
-\r
-#define REG_TX_MEM_INFO            (0x78)       /* TXMIR */\r
-#define   TX_MEM_AVAILABLE_MASK       (0x1FFF)    /* The amount of memory available in TXQ */\r
-\r
-#define REG_RX_FHR_STATUS          (0x7C)       /* RXFHSR */\r
-#define   RX_VALID                    (0x8000)    /* Frame in the receive packet memory is valid */\r
-#define   RX_ICMP_ERROR               (0x2000)    /* ICMP checksum field doesn't match */\r
-#define   RX_IP_ERROR                 (0x1000)    /* IP checksum field doesn't match */\r
-#define   RX_TCP_ERROR                (0x0800)    /* TCP checksum field doesn't match */\r
-#define   RX_UDP_ERROR                (0x0400)    /* UDP checksum field doesn't match */\r
-#define   RX_BROADCAST                (0x0080)    /* Received frame is a broadcast frame */\r
-#define   RX_MULTICAST                (0x0040)    /* Received frame is a multicast frame */\r
-#define   RX_UNICAST                  (0x0020)    /* Received frame is a unicast frame */\r
-#define   RX_PHY_ERROR                (0x0010)    /* Received frame has runt error */\r
-#define   RX_FRAME_ETHER              (0x0008)    /* Received frame is an Ethernet-type frame */\r
-#define   RX_TOO_LONG                 (0x0004)    /* Received frame length exceeds max size 0f 2048 bytes */\r
-#define   RX_RUNT_ERROR               (0x0002)    /* Received frame was demaged by a collision */\r
-#define   RX_BAD_CRC                  (0x0001)    /* Received frame has a CRC error */\r
-#define   RX_ERRORS                   ( RX_BAD_CRC | RX_TOO_LONG | RX_RUNT_ERROR | RX_PHY_ERROR | \\r
-                                        RX_ICMP_ERROR | RX_IP_ERROR | RX_TCP_ERROR | RX_UDP_ERROR )\r
-\r
-#define REG_RX_FHR_BYTE_CNT        (0x7E)       /* RXFHBCR */\r
-#define   RX_BYTE_CNT_MASK            (0x0FFF)    /* Received frame byte size mask */\r
-\r
-#define REG_TXQ_CMD                (0x80)       /* TXQCR */\r
-#define   TXQ_AUTO_ENQUEUE            (0x0004)    /* Enable enqueue tx frames from tx buffer automatically */\r
-#define   TXQ_MEM_AVAILABLE_INT       (0x0002)    /* Enable generate interrupt when tx memory is available */\r
-#define   TXQ_ENQUEUE                 (0x0001)    /* Enable enqueue tx frames one frame at a time */\r
-\r
-#define REG_RXQ_CMD                (0x82)       /* RXQCR */\r
-#define   RXQ_STAT_TIME_INT           (0x1000)    /* RX interrupt is occured by timer duration */\r
-#define   RXQ_STAT_BYTE_CNT_INT       (0x0800)    /* RX interrupt is occured by byte count threshold */\r
-#define   RXQ_STAT_FRAME_CNT_INT      (0x0400)    /* RX interrupt is occured by frame count threshold */\r
-#define   RXQ_TWOBYTE_OFFSET          (0x0200)    /* Enable adding 2-byte before frame header for IP aligned with DWORD */\r
-#define   RXQ_TIME_INT                (0x0080)    /* Enable RX interrupt by timer duration */\r
-#define   RXQ_BYTE_CNT_INT            (0x0040)    /* Enable RX interrupt by byte count threshold */\r
-#define   RXQ_FRAME_CNT_INT           (0x0020)    /* Enable RX interrupt by frame count threshold */\r
-#define   RXQ_AUTO_DEQUEUE            (0x0010)    /* Enable release rx frames from rx buffer automatically */\r
-#define   RXQ_START                   (0x0008)    /* Start QMU transfer operation */\r
-#define   RXQ_CMD_FREE_PACKET         (0x0001)    /* Manual dequeue (release the current frame from RxQ) */\r
-\r
-#define   RXQ_CMD_CNTL                (RXQ_FRAME_CNT_INT|RXQ_AUTO_DEQUEUE)\r
-\r
-#define REG_TX_ADDR_PTR            (0x84)       /* TXFDPR */\r
-#define REG_RX_ADDR_PTR            (0x86)       /* RXFDPR */\r
-#define   ADDR_PTR_AUTO_INC           (0x4000)    /* Enable Frame data pointer increments automatically */\r
-#define   ADDR_PTR_MASK               (0x03ff)    /* Address pointer mask */\r
-\r
-#define REG_RX_TIME_THRES          (0x8C)       /* RXDTTR */\r
-#define   RX_TIME_THRESHOLD_MASK      (0xFFFF)    /* Set receive timer duration threshold */\r
-\r
-#define REG_RX_BYTE_CNT_THRES      (0x8E)       /* RXDBCTR */\r
-#define   RX_BYTE_THRESHOLD_MASK      (0xFFFF)    /* Set receive byte count threshold */\r
-\r
-#define REG_INT_MASK               (0x90)       /* IER */\r
-#define   INT_PHY                     (0x8000)    /* Enable link change interrupt */\r
-#define   INT_TX                      (0x4000)    /* Enable transmit done interrupt */\r
-#define   INT_RX                      (0x2000)    /* Enable receive interrupt */\r
-#define   INT_RX_OVERRUN              (0x0800)    /* Enable receive overrun interrupt */\r
-#define   INT_TX_STOPPED              (0x0200)    /* Enable transmit process stopped interrupt */\r
-#define   INT_RX_STOPPED              (0x0100)    /* Enable receive process stopped interrupt */\r
-#define   INT_TX_SPACE                (0x0040)    /* Enable transmit space available interrupt */\r
-#define   INT_RX_WOL_FRAME            (0x0020)    /* Enable WOL on receive wake-up frame detect interrupt */\r
-#define   INT_RX_WOL_MAGIC            (0x0010)    /* Enable WOL on receive magic packet detect interrupt */\r
-#define   INT_RX_WOL_LINKUP           (0x0008)    /* Enable WOL on link up detect interrupt */\r
-#define   INT_RX_WOL_ENERGY           (0x0004)    /* Enable WOL on energy detect interrupt */\r
-#define   INT_RX_SPI_ERROR            (0x0002)    /* Enable receive SPI bus error interrupt */\r
-#define   INT_RX_WOL_DELAY_ENERGY     (0x0001)    /* Enable WOL on delay energy detect interrupt */\r
-#define   INT_MASK                    ( INT_RX | INT_TX | INT_PHY )\r
-\r
-#define REG_INT_STATUS             (0x92)       /* ISR */\r
-\r
-#define REG_RX_FRAME_CNT_THRES     (0x9C)       /* RXFCTFC */\r
-#define   RX_FRAME_CNT_MASK           (0xFF00)    /* Received frame count mask */\r
-#define   RX_FRAME_THRESHOLD_MASK     (0x00FF)    /* Set receive frame count threshold mask */\r
-\r
-#define REG_TX_TOTAL_FRAME_SIZE    (0x9E)       /* TXNTFSR */\r
-#define   TX_TOTAL_FRAME_SIZE_MASK    (0xFFFF)    /* Set next total tx frame size mask */\r
-\r
-/*\r
- * MAC Address Hash Table Control Registers\r
- * (Offset 0xA0 - 0xA7)\r
- */\r
-#define REG_MAC_HASH_0             (0xA0)       /* MAHTR0 */\r
-#define REG_MAC_HASH_1             (0xA1)\r
-\r
-#define REG_MAC_HASH_2             (0xA2)       /* MAHTR1 */\r
-#define REG_MAC_HASH_3             (0xA3)\r
-\r
-#define REG_MAC_HASH_4             (0xA4)       /* MAHTR2 */\r
-#define REG_MAC_HASH_5             (0xA5)\r
-\r
-#define REG_MAC_HASH_6             (0xA6)       /* MAHTR3 */\r
-#define REG_MAC_HASH_7             (0xA7)\r
-\r
-/*\r
- * QMU Receive Queue Watermark Control Registers\r
- * (Offset 0xB0 - 0xB5)\r
- */\r
-#define REG_RX_LOW_WATERMARK       (0xB0)       /* FCLWR */\r
-#define   RX_LOW_WATERMARK_MASK       (0x0FFF)    /* Set QMU RxQ low watermark mask */\r
-\r
-#define REG_RX_HIGH_WATERMARK      (0xB2)       /* FCHWR */\r
-#define   RX_HIGH_WATERMARK_MASK      (0x0FFF)    /* Set QMU RxQ high watermark mask */\r
-\r
-#define REG_RX_OVERRUN_WATERMARK   (0xB4)       /* FCOWR */\r
-#define   RX_OVERRUN_WATERMARK_MASK   (0x0FFF)    /* Set QMU RxQ overrun watermark mask */\r
-\r
-/*\r
- * Global Control Registers\r
- * (Offset 0xC0 - 0xD3)\r
- */\r
-#define REG_CHIP_ID                (0xC0)       /* CIDER */\r
-#define   CHIP_ID_MASK                (0xFFF0)     /* Family ID and chip ID mask */\r
-#define   REVISION_MASK               (0x000E)     /* Chip revision mask */\r
-#define   CHIP_ID_SHIFT               (4)\r
-#define   REVISION_SHIFT              (1)\r
-#define   CHIP_ID_8851_16             (0x8870)     /* KS8851-16/32MQL chip ID */\r
-\r
-#define REG_LED_CTRL               (0xC6)       /* CGCR */\r
-#define   LED_CTRL_SEL1               (0x8000)     /* Select LED3/LED2/LED1/LED0 indication */\r
-#define   LED_CTRL_SEL0               (0x0200)     /* Select LED3/LED2/LED1/LED0 indication */\r
-\r
-#define REG_IND_IACR               (0xC8)       /* IACR */\r
-#define   TABLE_READ                  (0x1000)     /* Indirect read */\r
-#define   TABLE_MIB                   (0x0C00)     /* Select MIB counter table */\r
-#define   TABLE_ENTRY_MASK            (0x001F)     /* Set table entry to access */\r
-\r
-#define REG_IND_DATA_LOW           (0xD0)       /* IADLR */\r
-#define REG_IND_DATA_HIGH          (0xD2)       /* IADHR */\r
-\r
-/*\r
- * Power Management Control Registers\r
- * (Offset 0xD4 - 0xD7)\r
- */\r
-#define REG_POWER_CNTL             (0xD4)       /* PMECR */\r
-#define   PME_DELAY_ENABLE            (0x4000)    /* Enable the PME output pin assertion delay */\r
-#define   PME_ACTIVE_HIGHT            (0x1000)    /* PME output pin is active high */\r
-#define   PME_FROM_WKFRAME            (0x0800)    /* PME asserted when wake-up frame is detected */\r
-#define   PME_FROM_MAGIC              (0x0400)    /* PME asserted when magic packet is detected */\r
-#define   PME_FROM_LINKUP             (0x0200)    /* PME asserted when link up is detected */\r
-#define   PME_FROM_ENERGY             (0x0100)    /* PME asserted when energy is detected */\r
-#define   PME_EVENT_MASK              (0x0F00)    /* PME asserted event mask */\r
-#define   WAKEUP_AUTO_ENABLE          (0x0080)    /* Enable auto wake-up in energy mode */\r
-#define   WAKEUP_NORMAL_AUTO_ENABLE   (0x0040)    /* Enable auto goto normal mode from energy detecion mode */\r
-#define   WAKEUP_FROM_WKFRAME         (0x0020)    /* Wake-up from wake-up frame event detected */\r
-#define   WAKEUP_FROM_MAGIC           (0x0010)    /* Wake-up from magic packet event detected */\r
-#define   WAKEUP_FROM_LINKUP          (0x0008)    /* Wake-up from link up event detected */\r
-#define   WAKEUP_FROM_ENERGY          (0x0004)    /* Wake-up from energy event detected */\r
-#define   WAKEUP_EVENT_MASK           (0x003C)    /* Wake-up event mask */\r
-#define   POWER_STATE_D1              (0x0003)    /* Power saving mode */\r
-#define   POWER_STATE_D3              (0x0002)    /* Power down mode */\r
-#define   POWER_STATE_D2              (0x0001)    /* Power detection mode */\r
-#define   POWER_STATE_D0              (0x0000)    /* Normal operation mode (default) */\r
-#define   POWER_STATE_MASK            (0x0003)    /* Power management mode mask */\r
-\r
-#define REG_WAKEUP_TIME            (0xD6)       /* GSWUTR */\r
-#define   WAKEUP_TIME                 (0xFF00)    /* Min time (sec) wake-uo after detected energy */\r
-#define   GOSLEEP_TIME                (0x00FF)    /* Min time (sec) before goto sleep when in energy mode */\r
-\r
-/*\r
- * PHY Control Registers\r
- * (Offset 0xD8 - 0xF9)\r
- */\r
-#define REG_PHY_RESET              (0xD8)       /* PHYRR */\r
-#define   PHY_RESET                   (0x0001)    /* Reset PHY */\r
-\r
-#define REG_PHY_CNTL               (0xE4)       /* P1MBCR */\r
-#define   PHY_SPEED_100MBIT           (0x2000)     /* Force PHY 100Mbps */\r
-#define   PHY_AUTO_NEG_ENABLE         (0x1000)     /* Enable PHY auto-negotiation */\r
-#define   PHY_POWER_DOWN              (0x0800)     /* Set PHY power-down */\r
-#define   PHY_AUTO_NEG_RESTART        (0x0200)     /* Restart PHY auto-negotiation */\r
-#define   PHY_FULL_DUPLEX             (0x0100)     /* Force PHY in full duplex mode */\r
-#define   PHY_HP_MDIX                 (0x0020)     /* Set PHY in HP auto MDI-X mode */\r
-#define   PHY_FORCE_MDIX              (0x0010)     /* Force MDI-X */\r
-#define   PHY_AUTO_MDIX_DISABLE       (0x0008)     /* Disable auto MDI-X */\r
-#define   PHY_TRANSMIT_DISABLE        (0x0002)     /* Disable PHY transmit */\r
-#define   PHY_LED_DISABLE             (0x0001)     /* Disable PHY LED */\r
-\r
-#define REG_PHY_STATUS             (0xE6)       /* P1MBSR */\r
-#define   PHY_100BT4_CAPABLE          (0x8000)     /* 100 BASE-T4 capable */\r
-#define   PHY_100BTX_FD_CAPABLE       (0x4000)     /* 100BASE-TX full duplex capable */\r
-#define   PHY_100BTX_CAPABLE          (0x2000)     /* 100BASE-TX half duplex capable */\r
-#define   PHY_10BT_FD_CAPABLE         (0x1000)     /* 10BASE-TX full duplex capable */\r
-#define   PHY_10BT_CAPABLE            (0x0800)     /* 10BASE-TX half duplex capable */\r
-#define   PHY_AUTO_NEG_ACKNOWLEDGE    (0x0020)     /* Auto-negotiation complete */\r
-#define   PHY_AUTO_NEG_CAPABLE        (0x0008)     /* Auto-negotiation capable */\r
-#define   PHY_LINK_UP                 (0x0004)     /* PHY link is up */\r
-#define   PHY_EXTENDED_CAPABILITY     (0x0001)     /* PHY extended register capable */\r
-\r
-#define REG_PHY_ID_LOW             (0xE8)       /* PHY1ILR */\r
-#define REG_PHY_ID_HIGH            (0xEA)       /* PHY1IHR */\r
-\r
-#define REG_PHY_AUTO_NEGOTIATION   (0xEC)       /* P1ANAR */\r
-#define   PHY_AUTO_NEG_SYM_PAUSE      (0x0400)     /* Advertise pause capability */\r
-#define   PHY_AUTO_NEG_100BTX_FD      (0x0100)     /* Advertise 100 full-duplex capability */\r
-#define   PHY_AUTO_NEG_100BTX         (0x0080)     /* Advertise 100 half-duplex capability */\r
-#define   PHY_AUTO_NEG_10BT_FD        (0x0040)     /* Advertise 10 full-duplex capability */\r
-#define   PHY_AUTO_NEG_10BT           (0x0020)     /* Advertise 10 half-duplex capability */\r
-#define   PHY_AUTO_NEG_SELECTOR       (0x001F)     /* Selector field mask */\r
-#define   PHY_AUTO_NEG_802_3          (0x0001)     /* 802.3 */\r
-\r
-#define REG_PHY_REMOTE_CAPABILITY  (0xEE)       /* P1ANLPR */\r
-#define   PHY_REMOTE_SYM_PAUSE        (0x0400)     /* Link partner pause capability */\r
-#define   PHY_REMOTE_100BTX_FD        (0x0100)     /* Link partner 100 full-duplex capability */\r
-#define   PHY_REMOTE_100BTX           (0x0080)     /* Link partner 100 half-duplex capability */\r
-#define   PHY_REMOTE_10BT_FD          (0x0040)     /* Link partner 10 full-duplex capability */\r
-#define   PHY_REMOTE_10BT             (0x0020)     /* Link partner 10 half-duplex capability */\r
-\r
-#define REG_PORT_LINK_MD           (0xF4)       /* P1SCLMD */\r
-#define   PORT_CABLE_10M_SHORT        (0x8000)     /* Cable length is less than 10m short */\r
-#define   PORT_CABLE_STAT_FAILED      (0x6000)     /* Cable diagnostic test fail */\r
-#define   PORT_CABLE_STAT_SHORT       (0x4000)     /* Short condition detected in the cable */\r
-#define   PORT_CABLE_STAT_OPEN        (0x2000)     /* Open condition detected in the cable */\r
-#define   PORT_CABLE_STAT_NORMAL      (0x0000)     /* Normal condition */\r
-#define   PORT_CABLE_DIAG_RESULT      (0x6000)     /* Cable diagnostic test result mask */\r
-#define   PORT_START_CABLE_DIAG       (0x1000)     /* Enable cable diagnostic test */\r
-#define   PORT_FORCE_LINK             (0x0800)     /* Enable force link pass */\r
-#define   PORT_POWER_SAVING           (0x0400)     /* Disable power saving */\r
-#define   PORT_REMOTE_LOOPBACK        (0x0200)     /* Enable remote loopback at PHY */\r
-#define   PORT_CABLE_FAULT_COUNTER    (0x01FF)     /* Cable length distance to the fault */\r
-\r
-#define REG_PORT_CTRL              (0xF6)       /* P1CR */\r
-#define   PORT_LED_OFF                (0x8000)     /* Turn off all the port LEDs (LED3/LED2/LED1/LED0) */\r
-#define   PORT_TX_DISABLE             (0x4000)     /* Disable port transmit */\r
-#define   PORT_AUTO_NEG_RESTART       (0x2000)     /* Restart auto-negotiation */\r
-#define   PORT_POWER_DOWN             (0x0800)     /* Set port power-down */\r
-#define   PORT_AUTO_MDIX_DISABLE      (0x0400)     /* Disable auto MDI-X */\r
-#define   PORT_FORCE_MDIX             (0x0200)     /* Force MDI-X */\r
-#define   PORT_AUTO_NEG_ENABLE        (0x0080)     /* Enable auto-negotiation */\r
-#define   PORT_FORCE_100_MBIT         (0x0040)     /* Force PHY 100Mbps */\r
-#define   PORT_FORCE_FULL_DUPLEX      (0x0020)     /* Force PHY in full duplex mode */\r
-#define   PORT_AUTO_NEG_SYM_PAUSE     (0x0010)     /* Advertise pause capability */\r
-#define   PORT_AUTO_NEG_100BTX_FD     (0x0008)     /* Advertise 100 full-duplex capability */\r
-#define   PORT_AUTO_NEG_100BTX        (0x0004)     /* Advertise 100 half-duplex capability */\r
-#define   PORT_AUTO_NEG_10BT_FD       (0x0002)     /* Advertise 10 full-duplex capability */\r
-#define   PORT_AUTO_NEG_10BT          (0x0001)     /* Advertise 10 half-duplex capability */\r
-\r
-#define REG_PORT_STATUS            (0xF8)       /* P1SR */\r
-#define   PORT_HP_MDIX                (0x8000)     /* Set PHY in HP auto MDI-X mode */\r
-#define   PORT_REVERSED_POLARITY      (0x2000)     /* Polarity is reversed */\r
-#define   PORT_RX_FLOW_CTRL           (0x1000)     /* Reeive flow control feature is active */\r
-#define   PORT_TX_FLOW_CTRL           (0x0800)     /* Transmit flow control feature is active */\r
-#define   PORT_STAT_SPEED_100MBIT     (0x0400)     /* Link is 100Mbps */\r
-#define   PORT_STAT_FULL_DUPLEX       (0x0200)     /* Link is full duplex mode */\r
-#define   PORT_MDIX_STATUS            (0x0080)     /* Is MDI */\r
-#define   PORT_AUTO_NEG_COMPLETE      (0x0040)     /* Auto-negotiation complete */\r
-#define   PORT_STATUS_LINK_GOOD       (0x0020)     /* PHY link is up */\r
-#define   PORT_REMOTE_SYM_PAUSE       (0x0010)     /* Link partner pause capability */\r
-#define   PORT_REMOTE_100BTX_FD       (0x0008)     /* Link partner 100 full-duplex capability */\r
-#define   PORT_REMOTE_100BTX          (0x0004)     /* Link partner 100 half-duplex capability */\r
-#define   PORT_REMOTE_10BT_FD         (0x0002)     /* Link partner 10 full-duplex capability */\r
-#define   PORT_REMOTE_10BT            (0x0001)     /* Link partner 10 half-duplex capability */\r
-\r
-#endif /* KSZ8851SNL_REG_H_INCLUDED */\r
index 87161fd3925dab4dbfc1e3a053100e645a336010..df5bd7cfe50fe6b96e7eb797d937716c1e433cbb 100644 (file)
-/*\r
-FreeRTOS+TCP V2.0.11\r
-Copyright (C) 2018 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://aws.amazon.com/freertos\r
- http://www.FreeRTOS.org\r
-*/\r
-\r
-/* FreeRTOS includes. */\r
-#include "FreeRTOS.h"\r
-#include "list.h"\r
-\r
-/* FreeRTOS+TCP includes. */\r
-#include "FreeRTOS_IP.h"\r
-/* FreeRTOS+TCP includes. */\r
-#include "FreeRTOS_IP.h"\r
-#include "FreeRTOS_Sockets.h"\r
-#include "FreeRTOS_IP_Private.h"\r
-#include "FreeRTOS_DNS.h"\r
-#include "NetworkBufferManagement.h"\r
-#include "NetworkInterface.h"\r
-\r
-#include "wifi-decl.h"\r
-#include "wmerrno.h"\r
-#include "wifi.h"\r
-\r
-#include <wmlog.h>\r
-\r
-#define net_e(...)                             \\r
-    wmlog_e("freertos_tcp", ##__VA_ARGS__)\r
-#define net_w(...)                             \\r
-    wmlog_w("freertos_tcp", ##__VA_ARGS__)\r
-#define net_d(...)                             \\r
-    wmlog("freertos_tcp", ##__VA_ARGS__)\r
-\r
-#if 0 //this is lwip structure.\r
-#define MAX_INTERFACES_SUPPORTED 3\r
-static struct netif *netif_arr[MAX_INTERFACES_SUPPORTED];\r
-#endif\r
-\r
-/* If ipconfigETHERNET_DRIVER_FILTERS_FRAME_TYPES is set to 1, then the Ethernet\r
-driver will filter incoming packets and only pass the stack those packets it\r
-considers need processing. */\r
-#if( ipconfigETHERNET_DRIVER_FILTERS_FRAME_TYPES == 0 )\r
-#define ipCONSIDER_FRAME_FOR_PROCESSING( pucEthernetBuffer ) eProcessBuffer\r
-#else\r
-#define ipCONSIDER_FRAME_FOR_PROCESSING( pucEthernetBuffer ) eConsiderFrameForProcessing( ( pucEthernetBuffer ) )\r
-#endif\r
-\r
-#define IP_ADDR_ANY         ((ip_addr_t *)&ip_addr_any)\r
-#define IP_ADDR_BROADCAST   ((ip_addr_t *)&ip_addr_broadcast)\r
-\r
-/** 255.255.255.255 */\r
-#define IPADDR_NONE         ((u32_t)0xffffffffUL)\r
-/** 127.0.0.1 */\r
-#define IPADDR_LOOPBACK     ((u32_t)0x7f000001UL)\r
-/** 0.0.0.0 */\r
-#define IPADDR_ANY          ((u32_t)0x00000000UL)\r
-/** 255.255.255.255 */\r
-#define IPADDR_BROADCAST    ((u32_t)0xffffffffUL)\r
-\r
-/** 255.255.255.255 */\r
-#define INADDR_NONE         IPADDR_NONE\r
-/** 127.0.0.1 */\r
-#define INADDR_LOOPBACK     IPADDR_LOOPBACK\r
-/** 0.0.0.0 */\r
-#define INADDR_ANY          IPADDR_ANY\r
-/** 255.255.255.255 */\r
-#define INADDR_BROADCAST    IPADDR_BROADCAST\r
-\r
-enum if_state_t {\r
-    INTERFACE_DOWN = 0,\r
-    INTERFACE_UP,\r
-};\r
-struct ip_addr {\r
-  u32_t addr;\r
-};\r
-\r
-#define MLAN_BSS_TYPE_STA 0\r
-\r
-extern uint8_t outbuf[2048];\r
-extern bool mlan_is_amsdu(const t_u8 *rcvdata);\r
-extern t_u8 *mlan_get_payload(const t_u8 *rcvdata, t_u16 *payload_len, int *interface);\r
-extern int wrapper_wlan_handle_amsdu_rx_packet(const t_u8 *rcvdata, const t_u16 datalen);\r
-extern int wrapper_wlan_handle_rx_packet(const t_u16 datalen, const t_u8 *rcvdata,  NetworkBufferDescriptor_t *pxNetworkBuffer);\r
-static volatile  uint32_t xInterfaceState = INTERFACE_DOWN;\r
-\r
-static int process_data_packet(const t_u8 *databuf, const t_u16 datalen)\r
-{\r
-    int interface = BSS_TYPE_STA;\r
-    t_u8 *payload = NULL;\r
-    t_u16 payload_len = 0;\r
-    const TickType_t xDescriptorWaitTime = pdMS_TO_TICKS( 250 );\r
-\r
-    NetworkBufferDescriptor_t *pxNetworkBuffer;\r
-    IPStackEvent_t xRxEvent = { eNetworkRxEvent, NULL };\r
-\r
-    payload = (t_u8 *)mlan_get_payload(databuf, &payload_len, &interface);\r
-\r
-    if( eConsiderFrameForProcessing( payload ) != eProcessBuffer ) {\r
-       net_d("Dropping packet\r\n");\r
-       return WM_SUCCESS;\r
-    }\r
-\r
-    pxNetworkBuffer = pxGetNetworkBufferWithDescriptor(/*payload_len*/datalen, xDescriptorWaitTime);\r
-\r
-    if (pxNetworkBuffer != NULL) {\r
-       /* Set the packet size, in case a larger buffer was returned. */\r
-       pxNetworkBuffer->xDataLength = payload_len;\r
-\r
-       /* Copy the packet data. */\r
-       memcpy(pxNetworkBuffer->pucEthernetBuffer, payload, payload_len);\r
-\r
-       xRxEvent.pvData = (void *) pxNetworkBuffer;\r
-       if ( xSendEventStructToIPTask( &xRxEvent, xDescriptorWaitTime) == pdFAIL ) {\r
-               wmprintf("Failed to enqueue packet to network stack %p, len %d", payload, payload_len);\r
-               vReleaseNetworkBufferAndDescriptor(pxNetworkBuffer);\r
-               return WM_FAIL;\r
-       }\r
-    }\r
-    return WM_SUCCESS;\r
-}\r
-\r
-/* Callback function called from the wifi module */\r
-void handle_data_packet(const t_u8 interface, const t_u8 *rcvdata,\r
-                        const t_u16 datalen)\r
-{\r
-    if (interface == BSS_TYPE_STA)\r
-       process_data_packet(rcvdata, datalen);\r
-}\r
-\r
-BaseType_t xNetworkInterfaceInitialise( void )\r
-{\r
-    uint8_t ret;\r
-    mac_addr_t mac_addr;\r
-\r
-       ret = wifi_get_device_mac_addr(&mac_addr);\r
-       if (ret != WM_SUCCESS) {\r
-               net_d("Failed to get mac address");\r
-       }\r
-\r
-       FreeRTOS_UpdateMACAddress(mac_addr.mac);\r
-\r
-    return ( xInterfaceState == INTERFACE_UP && ret == WM_SUCCESS ) ? pdTRUE : pdFALSE;\r
-}\r
-\r
-void vNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] )\r
-{\r
-    /* FIX ME. */\r
-}\r
-\r
-BaseType_t xGetPhyLinkStatus( void )\r
-{\r
-    /* FIX ME. */\r
-    return pdFALSE;\r
-}\r
-void vNetworkNotifyIFDown()\r
-{\r
-    IPStackEvent_t xRxEvent = { eNetworkDownEvent, NULL };\r
-    xInterfaceState = INTERFACE_DOWN;\r
-    if( xSendEventStructToIPTask( &xRxEvent, 0 ) != pdPASS ) {\r
-       /* Could not send the message, so it is still pending. */\r
-        net_e("Could not send network down event");\r
-    }\r
-    else {\r
-       /* Message was sent so it is not pending. */\r
-        net_d("Sent network down event");\r
-    }\r
-}\r
-\r
-void vNetworkNotifyIFUp()\r
-{\r
-    xInterfaceState = INTERFACE_UP;\r
-}\r
-\r
-BaseType_t xNetworkInterfaceOutput( NetworkBufferDescriptor_t *const pxNetworkBuffer, BaseType_t xReleaseAfterSend )\r
-{\r
-    uint8_t pkt_len;\r
-\r
-    if (pxNetworkBuffer == NULL ||\r
-       pxNetworkBuffer->pucEthernetBuffer == NULL ||\r
-       pxNetworkBuffer->xDataLength == 0) {\r
-           net_d("Incorrect params");\r
-            return pdFALSE;\r
-    }\r
-    memset(outbuf, 0x00, sizeof(outbuf));\r
-    pkt_len = 22 + 4; /* sizeof(TxPD) + INTF_HEADER_LEN */\r
-    memcpy((u8_t *) outbuf + pkt_len, (u8_t *) pxNetworkBuffer->pucEthernetBuffer,\r
-               pxNetworkBuffer->xDataLength);\r
-    int ret = wifi_low_level_output(BSS_TYPE_STA, outbuf + pkt_len, pxNetworkBuffer->xDataLength);\r
-    if (ret != WM_SUCCESS) {\r
-       net_e("Failed output %p, length %d, error %d \r\n", pxNetworkBuffer->pucEthernetBuffer, pxNetworkBuffer->xDataLength, ret);\r
-    }\r
-\r
-    if (xReleaseAfterSend != pdFALSE) {\r
-        vReleaseNetworkBufferAndDescriptor(pxNetworkBuffer);\r
-    }\r
-\r
-    return ret == WM_SUCCESS ? pdTRUE : pdFALSE;\r
-}\r
+/*
+FreeRTOS+TCP V2.0.11
+Copyright (C) 2018 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
+*/
+
+/* FreeRTOS includes. */
+#include "FreeRTOS.h"
+#include "list.h"
+
+/* FreeRTOS+TCP includes. */
+#include "FreeRTOS_IP.h"
+/* FreeRTOS+TCP includes. */
+#include "FreeRTOS_IP.h"
+#include "FreeRTOS_Sockets.h"
+#include "FreeRTOS_IP_Private.h"
+#include "FreeRTOS_DNS.h"
+#include "NetworkBufferManagement.h"
+#include "NetworkInterface.h"
+
+#include "wifi-decl.h"
+#include "wmerrno.h"
+#include "wifi.h"
+
+#include <wmlog.h>
+
+#define net_e(...)                             \
+    wmlog_e("freertos_tcp", ##__VA_ARGS__)
+#define net_w(...)                             \
+    wmlog_w("freertos_tcp", ##__VA_ARGS__)
+#define net_d(...)                             \
+    wmlog("freertos_tcp", ##__VA_ARGS__)
+
+#if 0 //this is lwip structure.
+#define MAX_INTERFACES_SUPPORTED 3
+static struct netif *netif_arr[MAX_INTERFACES_SUPPORTED];
+#endif
+
+/* If ipconfigETHERNET_DRIVER_FILTERS_FRAME_TYPES is set to 1, then the Ethernet
+driver will filter incoming packets and only pass the stack those packets it
+considers need processing. */
+#if( ipconfigETHERNET_DRIVER_FILTERS_FRAME_TYPES == 0 )
+#define ipCONSIDER_FRAME_FOR_PROCESSING( pucEthernetBuffer ) eProcessBuffer
+#else
+#define ipCONSIDER_FRAME_FOR_PROCESSING( pucEthernetBuffer ) eConsiderFrameForProcessing( ( pucEthernetBuffer ) )
+#endif
+
+#define IP_ADDR_ANY         ((ip_addr_t *)&ip_addr_any)
+#define IP_ADDR_BROADCAST   ((ip_addr_t *)&ip_addr_broadcast)
+
+/** 255.255.255.255 */
+#define IPADDR_NONE         ((u32_t)0xffffffffUL)
+/** 127.0.0.1 */
+#define IPADDR_LOOPBACK     ((u32_t)0x7f000001UL)
+/** 0.0.0.0 */
+#define IPADDR_ANY          ((u32_t)0x00000000UL)
+/** 255.255.255.255 */
+#define IPADDR_BROADCAST    ((u32_t)0xffffffffUL)
+
+/** 255.255.255.255 */
+#define INADDR_NONE         IPADDR_NONE
+/** 127.0.0.1 */
+#define INADDR_LOOPBACK     IPADDR_LOOPBACK
+/** 0.0.0.0 */
+#define INADDR_ANY          IPADDR_ANY
+/** 255.255.255.255 */
+#define INADDR_BROADCAST    IPADDR_BROADCAST
+
+enum if_state_t {
+    INTERFACE_DOWN = 0,
+    INTERFACE_UP,
+};
+struct ip_addr {
+  u32_t addr;
+};
+
+#define MLAN_BSS_TYPE_STA 0
+
+extern uint8_t outbuf[2048];
+extern bool mlan_is_amsdu(const t_u8 *rcvdata);
+extern t_u8 *mlan_get_payload(const t_u8 *rcvdata, t_u16 *payload_len, int *interface);
+extern int wrapper_wlan_handle_amsdu_rx_packet(const t_u8 *rcvdata, const t_u16 datalen);
+extern int wrapper_wlan_handle_rx_packet(const t_u16 datalen, const t_u8 *rcvdata,  NetworkBufferDescriptor_t *pxNetworkBuffer);
+static volatile  uint32_t xInterfaceState = INTERFACE_DOWN;
+
+static int process_data_packet(const t_u8 *databuf, const t_u16 datalen)
+{
+    int interface = BSS_TYPE_STA;
+    t_u8 *payload = NULL;
+    t_u16 payload_len = 0;
+    const TickType_t xDescriptorWaitTime = pdMS_TO_TICKS( 250 );
+
+    NetworkBufferDescriptor_t *pxNetworkBuffer;
+    IPStackEvent_t xRxEvent = { eNetworkRxEvent, NULL };
+
+    payload = (t_u8 *)mlan_get_payload(databuf, &payload_len, &interface);
+
+    if( eConsiderFrameForProcessing( payload ) != eProcessBuffer ) {
+       net_d("Dropping packet\r\n");
+       return WM_SUCCESS;
+    }
+
+    pxNetworkBuffer = pxGetNetworkBufferWithDescriptor(/*payload_len*/datalen, xDescriptorWaitTime);
+
+    if (pxNetworkBuffer != NULL) {
+       /* Set the packet size, in case a larger buffer was returned. */
+       pxNetworkBuffer->xDataLength = payload_len;
+
+       /* Copy the packet data. */
+       memcpy(pxNetworkBuffer->pucEthernetBuffer, payload, payload_len);
+
+       xRxEvent.pvData = (void *) pxNetworkBuffer;
+       if ( xSendEventStructToIPTask( &xRxEvent, xDescriptorWaitTime) == pdFAIL ) {
+               wmprintf("Failed to enqueue packet to network stack %p, len %d", payload, payload_len);
+               vReleaseNetworkBufferAndDescriptor(pxNetworkBuffer);
+               return WM_FAIL;
+       }
+    }
+    return WM_SUCCESS;
+}
+
+/* Callback function called from the wifi module */
+void handle_data_packet(const t_u8 interface, const t_u8 *rcvdata,
+                        const t_u16 datalen)
+{
+    if (interface == BSS_TYPE_STA)
+       process_data_packet(rcvdata, datalen);
+}
+
+BaseType_t xNetworkInterfaceInitialise( void )
+{
+    uint8_t ret;
+    mac_addr_t mac_addr;
+
+       ret = wifi_get_device_mac_addr(&mac_addr);
+       if (ret != WM_SUCCESS) {
+               net_d("Failed to get mac address");
+       }
+
+       FreeRTOS_UpdateMACAddress(mac_addr.mac);
+
+    return ( xInterfaceState == INTERFACE_UP && ret == WM_SUCCESS ) ? pdTRUE : pdFALSE;
+}
+
+void vNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] )
+{
+    /* FIX ME. */
+}
+
+BaseType_t xGetPhyLinkStatus( void )
+{
+    /* FIX ME. */
+    return pdFALSE;
+}
+void vNetworkNotifyIFDown()
+{
+    IPStackEvent_t xRxEvent = { eNetworkDownEvent, NULL };
+    xInterfaceState = INTERFACE_DOWN;
+    if( xSendEventStructToIPTask( &xRxEvent, 0 ) != pdPASS ) {
+       /* Could not send the message, so it is still pending. */
+        net_e("Could not send network down event");
+    }
+    else {
+       /* Message was sent so it is not pending. */
+        net_d("Sent network down event");
+    }
+}
+
+void vNetworkNotifyIFUp()
+{
+    xInterfaceState = INTERFACE_UP;
+}
+
+BaseType_t xNetworkInterfaceOutput( NetworkBufferDescriptor_t *const pxNetworkBuffer, BaseType_t xReleaseAfterSend )
+{
+    uint8_t pkt_len;
+
+    if (pxNetworkBuffer == NULL ||
+       pxNetworkBuffer->pucEthernetBuffer == NULL ||
+       pxNetworkBuffer->xDataLength == 0) {
+           net_d("Incorrect params");
+            return pdFALSE;
+    }
+    memset(outbuf, 0x00, sizeof(outbuf));
+    pkt_len = 22 + 4; /* sizeof(TxPD) + INTF_HEADER_LEN */
+    memcpy((u8_t *) outbuf + pkt_len, (u8_t *) pxNetworkBuffer->pucEthernetBuffer,
+               pxNetworkBuffer->xDataLength);
+    int ret = wifi_low_level_output(BSS_TYPE_STA, outbuf + pkt_len, pxNetworkBuffer->xDataLength);
+    if (ret != WM_SUCCESS) {
+       net_e("Failed output %p, length %d, error %d \r\n", pxNetworkBuffer->pucEthernetBuffer, pxNetworkBuffer->xDataLength, ret);
+    }
+
+    if (xReleaseAfterSend != pdFALSE) {
+        vReleaseNetworkBufferAndDescriptor(pxNetworkBuffer);
+    }
+
+    return ret == WM_SUCCESS ? pdTRUE : pdFALSE;
+}
index 531e878eafc8e2837e6364281d242bafa746d401..f00ae1fe8297ad4f59a02fd20f769a4420e22952 100644 (file)
-/*\r
- * FreeRTOS+TCP Labs Build 160919 (C) 2016 Real Time Engineers ltd.\r
- * Authors include Hein Tibosch and Richard Barry\r
- *\r
- *******************************************************************************\r
- ***** NOTE ******* NOTE ******* NOTE ******* NOTE ******* NOTE ******* NOTE ***\r
- ***                                                                         ***\r
- ***                                                                         ***\r
- ***   FREERTOS+TCP IS STILL IN THE LAB (mainly because the FTP and HTTP     ***\r
- ***   demos have a dependency on FreeRTOS+FAT, which is only in the Labs    ***\r
- ***   download):                                                            ***\r
- ***                                                                         ***\r
- ***   FreeRTOS+TCP is functional and has been used in commercial products   ***\r
- ***   for some time.  Be aware however that we are still refining its       ***\r
- ***   design, the source code does not yet quite conform to the strict      ***\r
- ***   coding and style standards mandated by Real Time Engineers ltd., and  ***\r
- ***   the documentation and testing is not necessarily complete.            ***\r
- ***                                                                         ***\r
- ***   PLEASE REPORT EXPERIENCES USING THE SUPPORT RESOURCES FOUND ON THE    ***\r
- ***   URL: http://www.FreeRTOS.org/contact  Active early adopters may, at   ***\r
- ***   the sole discretion of Real Time Engineers Ltd., be offered versions  ***\r
- ***   under a license other than that described below.                      ***\r
- ***                                                                         ***\r
- ***                                                                         ***\r
- ***** NOTE ******* NOTE ******* NOTE ******* NOTE ******* NOTE ******* NOTE ***\r
- *******************************************************************************\r
- *\r
- * FreeRTOS+TCP can be used under two different free open source licenses.  The\r
- * license that applies is dependent on the processor on which FreeRTOS+TCP is\r
- * executed, as follows:\r
- *\r
- * If FreeRTOS+TCP is executed on one of the processors listed under the Special\r
- * License Arrangements heading of the FreeRTOS+TCP license information web\r
- * page, then it can be used under the terms of the FreeRTOS Open Source\r
- * License.  If FreeRTOS+TCP is used on any other processor, then it can be used\r
- * under the terms of the GNU General Public License V2.  Links to the relevant\r
- * licenses follow:\r
- *\r
- * The FreeRTOS+TCP License Information Page: http://www.FreeRTOS.org/tcp_license\r
- * The FreeRTOS Open Source License: http://www.FreeRTOS.org/license\r
- * The GNU General Public License Version 2: http://www.FreeRTOS.org/gpl-2.0.txt\r
- *\r
- * FreeRTOS+TCP is distributed in the hope that it will be useful.  You cannot\r
- * use FreeRTOS+TCP unless you agree that you use the software 'as is'.\r
- * FreeRTOS+TCP 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
- *\r
- * http://www.FreeRTOS.org\r
- * http://www.FreeRTOS.org/plus\r
- * http://www.FreeRTOS.org/labs\r
- *\r
- */\r
-\r
-/******************************************************************************\r
-*\r
-* See the following web page for essential buffer allocation scheme usage and\r
-* configuration details:\r
-* http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/Embedded_Ethernet_Buffer_Management.html\r
-*\r
-******************************************************************************/\r
-\r
-/* THIS FILE SHOULD NOT BE USED IF THE PROJECT INCLUDES A MEMORY ALLOCATOR\r
- * THAT WILL FRAGMENT THE HEAP MEMORY.  For example, heap_2 must not be used,\r
- * heap_4 can be used. */\r
-\r
-/* Standard includes. */\r
-#include <stdint.h>\r
-\r
-/* FreeRTOS includes. */\r
-#include "FreeRTOS.h"\r
-#include "task.h"\r
-#include "semphr.h"\r
-\r
-/* FreeRTOS+TCP includes. */\r
-#include "FreeRTOS_IP.h"\r
-#include "FreeRTOS_UDP_IP.h"\r
-#include "FreeRTOS_IP_Private.h"\r
-#include "NetworkInterface.h"\r
-#include "NetworkBufferManagement.h"\r
-\r
-#include "tcpip/tcpip.h"\r
-#include "tcpip/src/tcpip_private.h"\r
-\r
-#include "NetworkConfig.h"\r
-\r
-/* The obtained network buffer must be large enough to hold a packet that might\r
- * replace the packet that was requested to be sent. */\r
-#if ipconfigUSE_TCP == 1\r
-    #define baMINIMAL_BUFFER_SIZE    sizeof( TCPPacket_t )\r
-#else\r
-    #define baMINIMAL_BUFFER_SIZE    sizeof( ARPPacket_t )\r
-#endif /* ipconfigUSE_TCP == 1 */\r
-\r
-/*_RB_ This is too complex not to have an explanation. */\r
-#if defined( ipconfigETHERNET_MINIMUM_PACKET_BYTES )\r
-    #define ASSERT_CONCAT_( a, b )    a ## b\r
-    #define ASSERT_CONCAT( a, b )     ASSERT_CONCAT_( a, b )\r
-    #define STATIC_ASSERT( e ) \\r
-    ; enum { ASSERT_CONCAT( assert_line_, __LINE__ ) = 1 / ( !!( e ) ) }\r
-\r
-    STATIC_ASSERT( ipconfigETHERNET_MINIMUM_PACKET_BYTES <= baMINIMAL_BUFFER_SIZE );\r
-#endif\r
-\r
-/* A list of free (available) NetworkBufferDescriptor_t structures. */\r
-static List_t xFreeBuffersList;\r
-\r
-/* Some statistics about the use of buffers. */\r
-static size_t uxMinimumFreeNetworkBuffers;\r
-\r
-/* Declares the pool of NetworkBufferDescriptor_t structures that are available\r
- * to the system.  All the network buffers referenced from xFreeBuffersList exist\r
- * in this array.  The array is not accessed directly except during initialisation,\r
- * when the xFreeBuffersList is filled (as all the buffers are free when the system\r
- * is booted). */\r
-static NetworkBufferDescriptor_t xNetworkBufferDescriptors[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ];\r
-\r
-/* This constant is defined as false to let FreeRTOS_TCP_IP.c know that the\r
- * network buffers have a variable size: resizing may be necessary */\r
-const BaseType_t xBufferAllocFixedSize = pdFALSE;\r
-\r
-/* The semaphore used to obtain network buffers. */\r
-static SemaphoreHandle_t xNetworkBufferSemaphore = NULL;\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-#ifdef PIC32_USE_ETHERNET\r
-\r
-    /* PIC32 specific stuff */\r
-    /* */\r
-\r
-    /* MAC packet acknowledgment, once MAC is done with it */\r
-        static bool PIC32_MacPacketAcknowledge( TCPIP_MAC_PACKET * pPkt,\r
-                                                const void * param );\r
-\r
-    /* allocates a MAC packet that holds a data buffer that can be used by both: */\r
-    /*  - the FreeRTOSIP (NetworkBufferDescriptor_t->pucEthernetBuffer) */\r
-    /*  - the Harmony MAC driver: TCPIP_MAC_PACKET->pDSeg->segLoad */\r
-    /* from the beginning of the buffer: */\r
-    /*      - 4 bytes pointer to the network descriptor (FreeRTOS) */\r
-    /*      - 4 bytes pointer to the MAC packet (pic32_NetworkInterface.c) */\r
-    /*      - 2 bytes offset from the MAC packet (Harmony MAC driver: segLoadOffset) */\r
-    /* */\r
-    /* NOTE: segLoadLen should NOT include: */\r
-    /*          - the TCPIP_MAC_FRAME_OFFSET (== ipBUFFER_PADDING which should be == 10!) */\r
-    /*          - the sizeof(TCPIP_MAC_ETHERNET_HEADER) */\r
-    /*       These are added by the MAC packet allocation! */\r
-    /* */\r
-    static uint8_t * PIC32_PktAlloc( uint16_t pktLen,\r
-                                     uint16_t segLoadLen,\r
-                                     TCPIP_MAC_PACKET_ACK_FUNC ackF,\r
-                                     TCPIP_MAC_PACKET ** pPtrPkt )\r
-    {\r
-        uint8_t * pBuff = 0;\r
-\r
-        /* allocate standard packet */\r
-        TCPIP_MAC_PACKET * pPkt = TCPIP_PKT_PacketAlloc( pktLen, segLoadLen, 0 );\r
-\r
-        /* set the MAC packet pointer in the packet */\r
-        if( pPkt != 0 )\r
-        {\r
-            pBuff = pPkt->pDSeg->segLoad;\r
-            TCPIP_MAC_PACKET ** ppkt = ( TCPIP_MAC_PACKET ** ) ( pBuff - PIC32_BUFFER_PKT_PTR_OSSET );\r
-            configASSERT( ( ( uint32_t ) ppkt & ( sizeof( uint32_t ) - 1 ) ) == 0 );\r
-            *ppkt = pPkt; /* store the packet it comes from */\r
-            pPkt->ackFunc = ackF;\r
-            pPkt->ackParam = 0;\r
-        }\r
-\r
-        if( pPtrPkt != 0 )\r
-        {\r
-            *pPtrPkt = pPkt;\r
-        }\r
-\r
-        return pBuff;\r
-    }\r
-\r
-\r
-\r
-    /* standard PIC32 MAC allocation function for a MAC packet */\r
-    /* this packet saves room for the FreeRTOS network descriptor */\r
-    /* at the beginning of the data buffer */\r
-    /* see NetworkBufferAllocate */\r
-    /* Note: flags parameter is ignored since that's used in the Harmony stack only */\r
-    TCPIP_MAC_PACKET * PIC32_MacPacketAllocate( uint16_t pktLen,\r
-                                                uint16_t segLoadLen,\r
-                                                TCPIP_MAC_PACKET_FLAGS flags )\r
-    {\r
-        TCPIP_MAC_PACKET * pPkt;\r
-\r
-        PIC32_PktAlloc( pktLen, segLoadLen, 0, &pPkt );\r
-\r
-        return pPkt;\r
-    }\r
-\r
-    /* standard PIC32 MAC packet acknowledgment */\r
-    /* function called once MAC is done with it */\r
-    static bool PIC32_MacPacketAcknowledge( TCPIP_MAC_PACKET * pPkt,\r
-                                            const void * param )\r
-    {\r
-        configASSERT( ( pPkt != 0 ) );\r
-\r
-        TCPIP_PKT_PacketFree( pPkt );\r
-\r
-        return false;\r
-    }\r
-\r
-    /* associates the current MAC packet with a network descriptor */\r
-    /* mainly for RX packet */\r
-    void PIC32_MacAssociate( TCPIP_MAC_PACKET * pRxPkt,\r
-                             NetworkBufferDescriptor_t * pxBufferDescriptor,\r
-                             size_t pktLength )\r
-    {\r
-        uint8_t * pPktBuff = pRxPkt->pDSeg->segLoad;\r
-\r
-        pxBufferDescriptor->pucEthernetBuffer = pPktBuff;\r
-        pxBufferDescriptor->xDataLength = pktLength;\r
-\r
-        /* make sure this is a properly allocated packet */\r
-        TCPIP_MAC_PACKET ** ppkt = ( TCPIP_MAC_PACKET ** ) ( pPktBuff - PIC32_BUFFER_PKT_PTR_OSSET );\r
-        configASSERT( ( ( uint32_t ) ppkt & ( sizeof( uint32_t ) - 1 ) ) == 0 );\r
-\r
-        if( *ppkt != pRxPkt )\r
-        {\r
-            configASSERT( false );\r
-        }\r
-\r
-        /* set the proper descriptor info */\r
-        NetworkBufferDescriptor_t ** ppDcpt = ( NetworkBufferDescriptor_t ** ) ( pPktBuff - ipBUFFER_PADDING );\r
-        configASSERT( ( ( uint32_t ) ppDcpt & ( sizeof( uint32_t ) - 1 ) ) == 0 );\r
-        *ppDcpt = pxBufferDescriptor;\r
-    }\r
-\r
-    /* debug functionality */\r
-    void PIC32_MacPacketOrphan( TCPIP_MAC_PACKET * pPkt )\r
-    {\r
-        TCPIP_PKT_PacketFree( pPkt );\r
-        configASSERT( false );\r
-    }\r
-\r
-    /* FreeRTOS allocation functions */\r
-\r
-    /* allocates a buffer that can be used by both: */\r
-    /*  - the FreeRTOSIP (NetworkBufferDescriptor_t->pucEthernetBuffer) */\r
-    /*  - the Harmony MAC driver: TCPIP_MAC_PACKET */\r
-    /*  See PIC32_PktAlloc for details */\r
-    /* */\r
-    /* NOTE: reqLength should NOT include the ipBUFFER_PADDING (which should be == 10!) */\r
-    /*       or the sizeof(TCPIP_MAC_ETHERNET_HEADER) */\r
-    /*       These are added by the MAC packet allocation! */\r
-    /* */\r
-    uint8_t * NetworkBufferAllocate( size_t reqLength )\r
-    {\r
-        return PIC32_PktAlloc( sizeof( TCPIP_MAC_PACKET ), reqLength, PIC32_MacPacketAcknowledge, 0 );\r
-    }\r
-\r
-    /* deallocates a network buffer previously allocated */\r
-    /* with NetworkBufferAllocate */\r
-    void NetworkBufferFree( uint8_t * pNetworkBuffer )\r
-    {\r
-        if( pNetworkBuffer != 0 )\r
-        {\r
-            TCPIP_MAC_PACKET ** ppkt = ( TCPIP_MAC_PACKET ** ) ( pNetworkBuffer - PIC32_BUFFER_PKT_PTR_OSSET );\r
-            configASSERT( ( ( uint32_t ) ppkt & ( sizeof( uint32_t ) - 1 ) ) == 0 );\r
-            TCPIP_MAC_PACKET * pPkt = *ppkt;\r
-            configASSERT( ( pPkt != 0 ) );\r
-\r
-            if( pPkt->ackFunc != 0 )\r
-            {\r
-                ( *pPkt->ackFunc )( pPkt, pPkt->ackParam );\r
-            }\r
-            else\r
-            { /* ??? */\r
-                PIC32_MacPacketOrphan( pPkt );\r
-            }\r
-        }\r
-    }\r
-\r
-#endif /* #ifdef PIC32_USE_ETHERNET */\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-BaseType_t xNetworkBuffersInitialise( void )\r
-{\r
-    BaseType_t xReturn, x;\r
-\r
-    /* Only initialise the buffers and their associated kernel objects if they\r
-     * have not been initialised before. */\r
-    if( xNetworkBufferSemaphore == NULL )\r
-    {\r
-        xNetworkBufferSemaphore = xSemaphoreCreateCounting( ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS, ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS );\r
-        configASSERT( xNetworkBufferSemaphore );\r
-\r
-        if( xNetworkBufferSemaphore != NULL )\r
-        {\r
-            #if ( configQUEUE_REGISTRY_SIZE > 0 )\r
-                {\r
-                    vQueueAddToRegistry( xNetworkBufferSemaphore, "NetBufSem" );\r
-                }\r
-            #endif /* configQUEUE_REGISTRY_SIZE */\r
-\r
-            /* If the trace recorder code is included name the semaphore for viewing\r
-             * in FreeRTOS+Trace.  */\r
-            #if ( ipconfigINCLUDE_EXAMPLE_FREERTOS_PLUS_TRACE_CALLS == 1 )\r
-                {\r
-                    extern QueueHandle_t xNetworkEventQueue;\r
-                    vTraceSetQueueName( xNetworkEventQueue, "IPStackEvent" );\r
-                    vTraceSetQueueName( xNetworkBufferSemaphore, "NetworkBufferCount" );\r
-                }\r
-            #endif /*  ipconfigINCLUDE_EXAMPLE_FREERTOS_PLUS_TRACE_CALLS == 1 */\r
-\r
-            vListInitialise( &xFreeBuffersList );\r
-\r
-            /* Initialise all the network buffers.  No storage is allocated to\r
-             * the buffers yet. */\r
-            for( x = 0; x < ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS; x++ )\r
-            {\r
-                /* Initialise and set the owner of the buffer list items. */\r
-                xNetworkBufferDescriptors[ x ].pucEthernetBuffer = NULL;\r
-                vListInitialiseItem( &( xNetworkBufferDescriptors[ x ].xBufferListItem ) );\r
-                listSET_LIST_ITEM_OWNER( &( xNetworkBufferDescriptors[ x ].xBufferListItem ), &xNetworkBufferDescriptors[ x ] );\r
-\r
-                /* Currently, all buffers are available for use. */\r
-                vListInsert( &xFreeBuffersList, &( xNetworkBufferDescriptors[ x ].xBufferListItem ) );\r
-            }\r
-\r
-            uxMinimumFreeNetworkBuffers = ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS;\r
-        }\r
-    }\r
-\r
-    if( xNetworkBufferSemaphore == NULL )\r
-    {\r
-        xReturn = pdFAIL;\r
-    }\r
-    else\r
-    {\r
-        xReturn = pdPASS;\r
-    }\r
-\r
-    return xReturn;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-uint8_t * pucGetNetworkBuffer( size_t * pxRequestedSizeBytes )\r
-{\r
-    uint8_t * pucEthernetBuffer;\r
-    size_t xSize = *pxRequestedSizeBytes;\r
-\r
-    if( xSize < baMINIMAL_BUFFER_SIZE )\r
-    {\r
-        /* Buffers must be at least large enough to hold a TCP-packet with\r
-         * headers, or an ARP packet, in case TCP is not included. */\r
-        xSize = baMINIMAL_BUFFER_SIZE;\r
-    }\r
-\r
-    /* Round up xSize to the nearest multiple of N bytes,\r
-     * where N equals 'sizeof( size_t )'. */\r
-    if( ( xSize & ( sizeof( size_t ) - 1u ) ) != 0u )\r
-    {\r
-        xSize = ( xSize | ( sizeof( size_t ) - 1u ) ) + 1u;\r
-    }\r
-\r
-    *pxRequestedSizeBytes = xSize;\r
-\r
-    /* Allocate a buffer large enough to store the requested Ethernet frame size\r
-     * and a pointer to a network buffer structure (hence the addition of\r
-     * ipBUFFER_PADDING bytes). */\r
-\r
-    #ifdef PIC32_USE_ETHERNET\r
-        pucEthernetBuffer = NetworkBufferAllocate( xSize - sizeof( TCPIP_MAC_ETHERNET_HEADER ) );\r
-    #else\r
-        pucEthernetBuffer = ( uint8_t * ) pvPortMalloc( xSize + ipBUFFER_PADDING );\r
-    #endif /* #ifdef PIC32_USE_ETHERNET */\r
-\r
-    configASSERT( pucEthernetBuffer );\r
-\r
-    if( pucEthernetBuffer != NULL )\r
-    {\r
-        /* Enough space is left at the start of the buffer to place a pointer to\r
-         * the network buffer structure that references this Ethernet buffer.\r
-         * Return a pointer to the start of the Ethernet buffer itself. */\r
-               #ifndef PIC32_USE_ETHERNET\r
-               pucEthernetBuffer += ipBUFFER_PADDING;\r
-               #endif /* #ifndef PIC32_USE_ETHERNET */\r
-    }\r
-\r
-    return pucEthernetBuffer;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-void vReleaseNetworkBuffer( uint8_t * pucEthernetBuffer )\r
-{\r
-    /* There is space before the Ethernet buffer in which a pointer to the\r
-     * network buffer that references this Ethernet buffer is stored.  Remove the\r
-     * space before freeing the buffer. */\r
-    #ifdef PIC32_USE_ETHERNET\r
-        NetworkBufferFree( pucEthernetBuffer );\r
-    #else\r
-        if( pucEthernetBuffer != NULL )\r
-        {\r
-            pucEthernetBuffer -= ipBUFFER_PADDING;\r
-            vPortFree( ( void * ) pucEthernetBuffer );\r
-        }\r
-    #endif /* #ifdef PIC32_USE_ETHERNET */\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-NetworkBufferDescriptor_t * pxGetNetworkBufferWithDescriptor( size_t xRequestedSizeBytes,\r
-                                                              TickType_t xBlockTimeTicks )\r
-{\r
-    NetworkBufferDescriptor_t * pxReturn = NULL;\r
-    size_t uxCount;\r
-\r
-    if( ( xRequestedSizeBytes != 0u ) && ( xRequestedSizeBytes < ( size_t ) baMINIMAL_BUFFER_SIZE ) )\r
-    {\r
-        /* ARP packets can replace application packets, so the storage must be\r
-         * at least large enough to hold an ARP. */\r
-        xRequestedSizeBytes = baMINIMAL_BUFFER_SIZE;\r
-    }\r
-\r
-       #ifdef PIC32_USE_ETHERNET\r
-       if( xRequestedSizeBytes != 0u )\r
-    {\r
-       #endif /* #ifdef PIC32_USE_ETHERNET */\r
-       xRequestedSizeBytes += 2u;\r
-\r
-       if( ( xRequestedSizeBytes & ( sizeof( size_t ) - 1u ) ) != 0u )\r
-       {\r
-               xRequestedSizeBytes = ( xRequestedSizeBytes | ( sizeof( size_t ) - 1u ) ) + 1u;\r
-       }\r
-       #ifdef PIC32_USE_ETHERNET\r
-    }\r
-       #endif /* #ifdef PIC32_USE_ETHERNET */\r
-\r
-    /* If there is a semaphore available, there is a network buffer available. */\r
-    if( xSemaphoreTake( xNetworkBufferSemaphore, xBlockTimeTicks ) == pdPASS )\r
-    {\r
-        /* Protect the structure as it is accessed from tasks and interrupts. */\r
-        taskENTER_CRITICAL();\r
-        {\r
-            pxReturn = ( NetworkBufferDescriptor_t * ) listGET_OWNER_OF_HEAD_ENTRY( &xFreeBuffersList );\r
-            uxListRemove( &( pxReturn->xBufferListItem ) );\r
-        }\r
-        taskEXIT_CRITICAL();\r
-\r
-        /* Reading UBaseType_t, no critical section needed. */\r
-        uxCount = listCURRENT_LIST_LENGTH( &xFreeBuffersList );\r
-\r
-        if( uxMinimumFreeNetworkBuffers > uxCount )\r
-        {\r
-            uxMinimumFreeNetworkBuffers = uxCount;\r
-        }\r
-\r
-        /* Allocate storage of exactly the requested size to the buffer. */\r
-        configASSERT( pxReturn->pucEthernetBuffer == NULL );\r
-\r
-        if( xRequestedSizeBytes > 0 )\r
-        {\r
-            /* Extra space is obtained so a pointer to the network buffer can\r
-             * be stored at the beginning of the buffer. */\r
-\r
-            #ifdef PIC32_USE_ETHERNET\r
-                pxReturn->pucEthernetBuffer = NetworkBufferAllocate( xRequestedSizeBytes - sizeof( TCPIP_MAC_ETHERNET_HEADER ) );\r
-            #else\r
-                pxReturn->pucEthernetBuffer = ( uint8_t * ) pvPortMalloc( xRequestedSizeBytes + ipBUFFER_PADDING );\r
-            #endif /* #ifdef PIC32_USE_ETHERNET */\r
-\r
-            if( pxReturn->pucEthernetBuffer == NULL )\r
-            {\r
-                /* The attempt to allocate storage for the buffer payload failed,\r
-                 * so the network buffer structure cannot be used and must be\r
-                 * released. */\r
-                vReleaseNetworkBufferAndDescriptor( pxReturn );\r
-                pxReturn = NULL;\r
-            }\r
-            else\r
-            {\r
-                /* Store a pointer to the network buffer structure in the\r
-                 * buffer storage area, then move the buffer pointer on past the\r
-                 * stored pointer so the pointer value is not overwritten by the\r
-                 * application when the buffer is used. */\r
-                #ifdef PIC32_USE_ETHERNET\r
-                    *( ( NetworkBufferDescriptor_t ** ) ( pxReturn->pucEthernetBuffer - ipBUFFER_PADDING ) ) = pxReturn;\r
-                #else\r
-                    *( ( NetworkBufferDescriptor_t ** ) ( pxReturn->pucEthernetBuffer ) ) = pxReturn;\r
-                    pxReturn->pucEthernetBuffer += ipBUFFER_PADDING;\r
-                #endif /* #ifdef PIC32_USE_ETHERNET */\r
-\r
-                /* Store the actual size of the allocated buffer, which may be\r
-                 * greater than the original requested size. */\r
-                pxReturn->xDataLength = xRequestedSizeBytes;\r
-\r
-                #if ( ipconfigUSE_LINKED_RX_MESSAGES != 0 )\r
-                    {\r
-                        /* make sure the buffer is not linked */\r
-                        pxReturn->pxNextBuffer = NULL;\r
-                    }\r
-                #endif /* ipconfigUSE_LINKED_RX_MESSAGES */\r
-            }\r
-        }\r
-        else\r
-        {\r
-            /* A descriptor is being returned without an associated buffer being\r
-             * allocated. */\r
-        }\r
-    }\r
-\r
-    if( pxReturn == NULL )\r
-    {\r
-        iptraceFAILED_TO_OBTAIN_NETWORK_BUFFER();\r
-    }\r
-    else\r
-    {\r
-        iptraceNETWORK_BUFFER_OBTAINED( pxReturn );\r
-    }\r
-\r
-    return pxReturn;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-void vReleaseNetworkBufferAndDescriptor( NetworkBufferDescriptor_t * const pxNetworkBuffer )\r
-{\r
-    BaseType_t xListItemAlreadyInFreeList;\r
-\r
-    /* Ensure the buffer is returned to the list of free buffers before the\r
-    * counting semaphore is 'given' to say a buffer is available.  Release the\r
-    * storage allocated to the buffer payload.  THIS FILE SHOULD NOT BE USED\r
-    * IF THE PROJECT INCLUDES A MEMORY ALLOCATOR THAT WILL FRAGMENT THE HEAP\r
-    * MEMORY.  For example, heap_2 must not be used, heap_4 can be used. */\r
-    vReleaseNetworkBuffer( pxNetworkBuffer->pucEthernetBuffer );\r
-    pxNetworkBuffer->pucEthernetBuffer = NULL;\r
-\r
-    taskENTER_CRITICAL();\r
-    {\r
-        xListItemAlreadyInFreeList = listIS_CONTAINED_WITHIN( &xFreeBuffersList, &( pxNetworkBuffer->xBufferListItem ) );\r
-\r
-        if( xListItemAlreadyInFreeList == pdFALSE )\r
-        {\r
-            vListInsertEnd( &xFreeBuffersList, &( pxNetworkBuffer->xBufferListItem ) );\r
-        }\r
-    }\r
-    taskEXIT_CRITICAL();\r
-\r
-    /*\r
-     * Update the network state machine, unless the program fails to release its 'xNetworkBufferSemaphore'.\r
-     * The program should only try to release its semaphore if 'xListItemAlreadyInFreeList' is false.\r
-     */\r
-    if( xListItemAlreadyInFreeList == pdFALSE )\r
-    {\r
-        if ( xSemaphoreGive( xNetworkBufferSemaphore ) == pdTRUE )\r
-        {\r
-            iptraceNETWORK_BUFFER_RELEASED( pxNetworkBuffer );\r
-        }\r
-    }\r
-    else\r
-    {\r
-        iptraceNETWORK_BUFFER_RELEASED( pxNetworkBuffer );\r
-    }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-/*\r
- * Returns the number of free network buffers\r
- */\r
-UBaseType_t uxGetNumberOfFreeNetworkBuffers( void )\r
-{\r
-    return listCURRENT_LIST_LENGTH( &xFreeBuffersList );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-UBaseType_t uxGetMinimumFreeNetworkBuffers( void )\r
-{\r
-    return uxMinimumFreeNetworkBuffers;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-NetworkBufferDescriptor_t * pxResizeNetworkBufferWithDescriptor( NetworkBufferDescriptor_t * pxNetworkBuffer,\r
-                                                                 size_t xNewSizeBytes )\r
-{\r
-    size_t xOriginalLength;\r
-    uint8_t * pucBuffer;\r
-\r
-    #ifdef PIC32_USE_ETHERNET\r
-        xOriginalLength = pxNetworkBuffer->xDataLength;\r
-    #else\r
-        xOriginalLength = pxNetworkBuffer->xDataLength + ipBUFFER_PADDING;\r
-               xNewSizeBytes = xNewSizeBytes + ipBUFFER_PADDING;\r
-    #endif /* #ifdef PIC32_USE_ETHERNET */\r
-       \r
-    pucBuffer = pucGetNetworkBuffer( &( xNewSizeBytes ) );\r
-\r
-    if( pucBuffer == NULL )\r
-    {\r
-        /* In case the allocation fails, return NULL. */\r
-        pxNetworkBuffer = NULL;\r
-    }\r
-    else\r
-    {\r
-        pxNetworkBuffer->xDataLength = xNewSizeBytes;\r
-        if( xNewSizeBytes > xOriginalLength )\r
-        {\r
-            xNewSizeBytes = xOriginalLength;\r
-        }\r
-\r
-        #ifdef PIC32_USE_ETHERNET\r
-            memcpy( pucBuffer, pxNetworkBuffer->pucEthernetBuffer, xNewSizeBytes );\r
-            *( ( NetworkBufferDescriptor_t ** ) ( pucBuffer - ipBUFFER_PADDING ) ) = pxNetworkBuffer;\r
-        #else\r
-            memcpy( pucBuffer - ipBUFFER_PADDING, pxNetworkBuffer->pucEthernetBuffer - ipBUFFER_PADDING, xNewSizeBytes );\r
-        #endif /* #ifdef PIC32_USE_ETHERNET */\r
-\r
-        vReleaseNetworkBuffer( pxNetworkBuffer->pucEthernetBuffer );\r
-        pxNetworkBuffer->pucEthernetBuffer = pucBuffer;\r
-    }\r
-\r
-    return pxNetworkBuffer;\r
-}\r
+/*
+ * FreeRTOS+TCP Labs Build 160919 (C) 2016 Real Time Engineers ltd.
+ * Authors include Hein Tibosch and Richard Barry
+ *
+ *******************************************************************************
+ ***** NOTE ******* NOTE ******* NOTE ******* NOTE ******* NOTE ******* NOTE ***
+ ***                                                                         ***
+ ***                                                                         ***
+ ***   FREERTOS+TCP IS STILL IN THE LAB (mainly because the FTP and HTTP     ***
+ ***   demos have a dependency on FreeRTOS+FAT, which is only in the Labs    ***
+ ***   download):                                                            ***
+ ***                                                                         ***
+ ***   FreeRTOS+TCP is functional and has been used in commercial products   ***
+ ***   for some time.  Be aware however that we are still refining its       ***
+ ***   design, the source code does not yet quite conform to the strict      ***
+ ***   coding and style standards mandated by Real Time Engineers ltd., and  ***
+ ***   the documentation and testing is not necessarily complete.            ***
+ ***                                                                         ***
+ ***   PLEASE REPORT EXPERIENCES USING THE SUPPORT RESOURCES FOUND ON THE    ***
+ ***   URL: http://www.FreeRTOS.org/contact  Active early adopters may, at   ***
+ ***   the sole discretion of Real Time Engineers Ltd., be offered versions  ***
+ ***   under a license other than that described below.                      ***
+ ***                                                                         ***
+ ***                                                                         ***
+ ***** NOTE ******* NOTE ******* NOTE ******* NOTE ******* NOTE ******* NOTE ***
+ *******************************************************************************
+ *
+ * FreeRTOS+TCP can be used under two different free open source licenses.  The
+ * license that applies is dependent on the processor on which FreeRTOS+TCP is
+ * executed, as follows:
+ *
+ * If FreeRTOS+TCP is executed on one of the processors listed under the Special
+ * License Arrangements heading of the FreeRTOS+TCP license information web
+ * page, then it can be used under the terms of the FreeRTOS Open Source
+ * License.  If FreeRTOS+TCP is used on any other processor, then it can be used
+ * under the terms of the GNU General Public License V2.  Links to the relevant
+ * licenses follow:
+ *
+ * The FreeRTOS+TCP License Information Page: http://www.FreeRTOS.org/tcp_license
+ * The FreeRTOS Open Source License: http://www.FreeRTOS.org/license
+ * The GNU General Public License Version 2: http://www.FreeRTOS.org/gpl-2.0.txt
+ *
+ * FreeRTOS+TCP is distributed in the hope that it will be useful.  You cannot
+ * use FreeRTOS+TCP unless you agree that you use the software 'as is'.
+ * FreeRTOS+TCP is provided WITHOUT ANY WARRANTY; without even the implied
+ * warranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE. Real Time Engineers Ltd. disclaims all conditions and terms, be they
+ * implied, expressed, or statutory.
+ *
+ * 1 tab == 4 spaces!
+ *
+ * http://www.FreeRTOS.org
+ * http://www.FreeRTOS.org/plus
+ * http://www.FreeRTOS.org/labs
+ *
+ */
+
+/******************************************************************************
+*
+* See the following web page for essential buffer allocation scheme usage and
+* configuration details:
+* http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/Embedded_Ethernet_Buffer_Management.html
+*
+******************************************************************************/
+
+/* THIS FILE SHOULD NOT BE USED IF THE PROJECT INCLUDES A MEMORY ALLOCATOR
+ * THAT WILL FRAGMENT THE HEAP MEMORY.  For example, heap_2 must not be used,
+ * heap_4 can be used. */
+
+/* Standard includes. */
+#include <stdint.h>
+
+/* FreeRTOS includes. */
+#include "FreeRTOS.h"
+#include "task.h"
+#include "semphr.h"
+
+/* FreeRTOS+TCP includes. */
+#include "FreeRTOS_IP.h"
+#include "FreeRTOS_UDP_IP.h"
+#include "FreeRTOS_IP_Private.h"
+#include "NetworkInterface.h"
+#include "NetworkBufferManagement.h"
+
+#include "tcpip/tcpip.h"
+#include "tcpip/src/tcpip_private.h"
+
+#include "NetworkConfig.h"
+
+/* The obtained network buffer must be large enough to hold a packet that might
+ * replace the packet that was requested to be sent. */
+#if ipconfigUSE_TCP == 1
+    #define baMINIMAL_BUFFER_SIZE    sizeof( TCPPacket_t )
+#else
+    #define baMINIMAL_BUFFER_SIZE    sizeof( ARPPacket_t )
+#endif /* ipconfigUSE_TCP == 1 */
+
+/*_RB_ This is too complex not to have an explanation. */
+#if defined( ipconfigETHERNET_MINIMUM_PACKET_BYTES )
+    #define ASSERT_CONCAT_( a, b )    a ## b
+    #define ASSERT_CONCAT( a, b )     ASSERT_CONCAT_( a, b )
+    #define STATIC_ASSERT( e ) \
+    ; enum { ASSERT_CONCAT( assert_line_, __LINE__ ) = 1 / ( !!( e ) ) }
+
+    STATIC_ASSERT( ipconfigETHERNET_MINIMUM_PACKET_BYTES <= baMINIMAL_BUFFER_SIZE );
+#endif
+
+/* A list of free (available) NetworkBufferDescriptor_t structures. */
+static List_t xFreeBuffersList;
+
+/* Some statistics about the use of buffers. */
+static size_t uxMinimumFreeNetworkBuffers;
+
+/* Declares the pool of NetworkBufferDescriptor_t structures that are available
+ * to the system.  All the network buffers referenced from xFreeBuffersList exist
+ * in this array.  The array is not accessed directly except during initialisation,
+ * when the xFreeBuffersList is filled (as all the buffers are free when the system
+ * is booted). */
+static NetworkBufferDescriptor_t xNetworkBufferDescriptors[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ];
+
+/* This constant is defined as false to let FreeRTOS_TCP_IP.c know that the
+ * network buffers have a variable size: resizing may be necessary */
+const BaseType_t xBufferAllocFixedSize = pdFALSE;
+
+/* The semaphore used to obtain network buffers. */
+static SemaphoreHandle_t xNetworkBufferSemaphore = NULL;
+
+/*-----------------------------------------------------------*/
+
+#ifdef PIC32_USE_ETHERNET
+
+    /* PIC32 specific stuff */
+    /* */
+
+    /* MAC packet acknowledgment, once MAC is done with it */
+        static bool PIC32_MacPacketAcknowledge( TCPIP_MAC_PACKET * pPkt,
+                                                const void * param );
+
+    /* allocates a MAC packet that holds a data buffer that can be used by both: */
+    /*  - the FreeRTOSIP (NetworkBufferDescriptor_t->pucEthernetBuffer) */
+    /*  - the Harmony MAC driver: TCPIP_MAC_PACKET->pDSeg->segLoad */
+    /* from the beginning of the buffer: */
+    /*      - 4 bytes pointer to the network descriptor (FreeRTOS) */
+    /*      - 4 bytes pointer to the MAC packet (pic32_NetworkInterface.c) */
+    /*      - 2 bytes offset from the MAC packet (Harmony MAC driver: segLoadOffset) */
+    /* */
+    /* NOTE: segLoadLen should NOT include: */
+    /*          - the TCPIP_MAC_FRAME_OFFSET (== ipBUFFER_PADDING which should be == 10!) */
+    /*          - the sizeof(TCPIP_MAC_ETHERNET_HEADER) */
+    /*       These are added by the MAC packet allocation! */
+    /* */
+    static uint8_t * PIC32_PktAlloc( uint16_t pktLen,
+                                     uint16_t segLoadLen,
+                                     TCPIP_MAC_PACKET_ACK_FUNC ackF,
+                                     TCPIP_MAC_PACKET ** pPtrPkt )
+    {
+        uint8_t * pBuff = 0;
+
+        /* allocate standard packet */
+        TCPIP_MAC_PACKET * pPkt = TCPIP_PKT_PacketAlloc( pktLen, segLoadLen, 0 );
+
+        /* set the MAC packet pointer in the packet */
+        if( pPkt != 0 )
+        {
+            pBuff = pPkt->pDSeg->segLoad;
+            TCPIP_MAC_PACKET ** ppkt = ( TCPIP_MAC_PACKET ** ) ( pBuff - PIC32_BUFFER_PKT_PTR_OSSET );
+            configASSERT( ( ( uint32_t ) ppkt & ( sizeof( uint32_t ) - 1 ) ) == 0 );
+            *ppkt = pPkt; /* store the packet it comes from */
+            pPkt->ackFunc = ackF;
+            pPkt->ackParam = 0;
+        }
+
+        if( pPtrPkt != 0 )
+        {
+            *pPtrPkt = pPkt;
+        }
+
+        return pBuff;
+    }
+
+
+
+    /* standard PIC32 MAC allocation function for a MAC packet */
+    /* this packet saves room for the FreeRTOS network descriptor */
+    /* at the beginning of the data buffer */
+    /* see NetworkBufferAllocate */
+    /* Note: flags parameter is ignored since that's used in the Harmony stack only */
+    TCPIP_MAC_PACKET * PIC32_MacPacketAllocate( uint16_t pktLen,
+                                                uint16_t segLoadLen,
+                                                TCPIP_MAC_PACKET_FLAGS flags )
+    {
+        TCPIP_MAC_PACKET * pPkt;
+
+        PIC32_PktAlloc( pktLen, segLoadLen, 0, &pPkt );
+
+        return pPkt;
+    }
+
+    /* standard PIC32 MAC packet acknowledgment */
+    /* function called once MAC is done with it */
+    static bool PIC32_MacPacketAcknowledge( TCPIP_MAC_PACKET * pPkt,
+                                            const void * param )
+    {
+        configASSERT( ( pPkt != 0 ) );
+
+        TCPIP_PKT_PacketFree( pPkt );
+
+        return false;
+    }
+
+    /* associates the current MAC packet with a network descriptor */
+    /* mainly for RX packet */
+    void PIC32_MacAssociate( TCPIP_MAC_PACKET * pRxPkt,
+                             NetworkBufferDescriptor_t * pxBufferDescriptor,
+                             size_t pktLength )
+    {
+        uint8_t * pPktBuff = pRxPkt->pDSeg->segLoad;
+
+        pxBufferDescriptor->pucEthernetBuffer = pPktBuff;
+        pxBufferDescriptor->xDataLength = pktLength;
+
+        /* make sure this is a properly allocated packet */
+        TCPIP_MAC_PACKET ** ppkt = ( TCPIP_MAC_PACKET ** ) ( pPktBuff - PIC32_BUFFER_PKT_PTR_OSSET );
+        configASSERT( ( ( uint32_t ) ppkt & ( sizeof( uint32_t ) - 1 ) ) == 0 );
+
+        if( *ppkt != pRxPkt )
+        {
+            configASSERT( false );
+        }
+
+        /* set the proper descriptor info */
+        NetworkBufferDescriptor_t ** ppDcpt = ( NetworkBufferDescriptor_t ** ) ( pPktBuff - ipBUFFER_PADDING );
+        configASSERT( ( ( uint32_t ) ppDcpt & ( sizeof( uint32_t ) - 1 ) ) == 0 );
+        *ppDcpt = pxBufferDescriptor;
+    }
+
+    /* debug functionality */
+    void PIC32_MacPacketOrphan( TCPIP_MAC_PACKET * pPkt )
+    {
+        TCPIP_PKT_PacketFree( pPkt );
+        configASSERT( false );
+    }
+
+    /* FreeRTOS allocation functions */
+
+    /* allocates a buffer that can be used by both: */
+    /*  - the FreeRTOSIP (NetworkBufferDescriptor_t->pucEthernetBuffer) */
+    /*  - the Harmony MAC driver: TCPIP_MAC_PACKET */
+    /*  See PIC32_PktAlloc for details */
+    /* */
+    /* NOTE: reqLength should NOT include the ipBUFFER_PADDING (which should be == 10!) */
+    /*       or the sizeof(TCPIP_MAC_ETHERNET_HEADER) */
+    /*       These are added by the MAC packet allocation! */
+    /* */
+    uint8_t * NetworkBufferAllocate( size_t reqLength )
+    {
+        return PIC32_PktAlloc( sizeof( TCPIP_MAC_PACKET ), reqLength, PIC32_MacPacketAcknowledge, 0 );
+    }
+
+    /* deallocates a network buffer previously allocated */
+    /* with NetworkBufferAllocate */
+    void NetworkBufferFree( uint8_t * pNetworkBuffer )
+    {
+        if( pNetworkBuffer != 0 )
+        {
+            TCPIP_MAC_PACKET ** ppkt = ( TCPIP_MAC_PACKET ** ) ( pNetworkBuffer - PIC32_BUFFER_PKT_PTR_OSSET );
+            configASSERT( ( ( uint32_t ) ppkt & ( sizeof( uint32_t ) - 1 ) ) == 0 );
+            TCPIP_MAC_PACKET * pPkt = *ppkt;
+            configASSERT( ( pPkt != 0 ) );
+
+            if( pPkt->ackFunc != 0 )
+            {
+                ( *pPkt->ackFunc )( pPkt, pPkt->ackParam );
+            }
+            else
+            { /* ??? */
+                PIC32_MacPacketOrphan( pPkt );
+            }
+        }
+    }
+
+#endif /* #ifdef PIC32_USE_ETHERNET */
+
+/*-----------------------------------------------------------*/
+
+BaseType_t xNetworkBuffersInitialise( void )
+{
+    BaseType_t xReturn, x;
+
+    /* Only initialise the buffers and their associated kernel objects if they
+     * have not been initialised before. */
+    if( xNetworkBufferSemaphore == NULL )
+    {
+        xNetworkBufferSemaphore = xSemaphoreCreateCounting( ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS, ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS );
+        configASSERT( xNetworkBufferSemaphore );
+
+        if( xNetworkBufferSemaphore != NULL )
+        {
+            #if ( configQUEUE_REGISTRY_SIZE > 0 )
+                {
+                    vQueueAddToRegistry( xNetworkBufferSemaphore, "NetBufSem" );
+                }
+            #endif /* configQUEUE_REGISTRY_SIZE */
+
+            /* If the trace recorder code is included name the semaphore for viewing
+             * in FreeRTOS+Trace.  */
+            #if ( ipconfigINCLUDE_EXAMPLE_FREERTOS_PLUS_TRACE_CALLS == 1 )
+                {
+                    extern QueueHandle_t xNetworkEventQueue;
+                    vTraceSetQueueName( xNetworkEventQueue, "IPStackEvent" );
+                    vTraceSetQueueName( xNetworkBufferSemaphore, "NetworkBufferCount" );
+                }
+            #endif /*  ipconfigINCLUDE_EXAMPLE_FREERTOS_PLUS_TRACE_CALLS == 1 */
+
+            vListInitialise( &xFreeBuffersList );
+
+            /* Initialise all the network buffers.  No storage is allocated to
+             * the buffers yet. */
+            for( x = 0; x < ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS; x++ )
+            {
+                /* Initialise and set the owner of the buffer list items. */
+                xNetworkBufferDescriptors[ x ].pucEthernetBuffer = NULL;
+                vListInitialiseItem( &( xNetworkBufferDescriptors[ x ].xBufferListItem ) );
+                listSET_LIST_ITEM_OWNER( &( xNetworkBufferDescriptors[ x ].xBufferListItem ), &xNetworkBufferDescriptors[ x ] );
+
+                /* Currently, all buffers are available for use. */
+                vListInsert( &xFreeBuffersList, &( xNetworkBufferDescriptors[ x ].xBufferListItem ) );
+            }
+
+            uxMinimumFreeNetworkBuffers = ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS;
+        }
+    }
+
+    if( xNetworkBufferSemaphore == NULL )
+    {
+        xReturn = pdFAIL;
+    }
+    else
+    {
+        xReturn = pdPASS;
+    }
+
+    return xReturn;
+}
+/*-----------------------------------------------------------*/
+
+uint8_t * pucGetNetworkBuffer( size_t * pxRequestedSizeBytes )
+{
+    uint8_t * pucEthernetBuffer;
+    size_t xSize = *pxRequestedSizeBytes;
+
+    if( xSize < baMINIMAL_BUFFER_SIZE )
+    {
+        /* Buffers must be at least large enough to hold a TCP-packet with
+         * headers, or an ARP packet, in case TCP is not included. */
+        xSize = baMINIMAL_BUFFER_SIZE;
+    }
+
+    /* Round up xSize to the nearest multiple of N bytes,
+     * where N equals 'sizeof( size_t )'. */
+    if( ( xSize & ( sizeof( size_t ) - 1u ) ) != 0u )
+    {
+        xSize = ( xSize | ( sizeof( size_t ) - 1u ) ) + 1u;
+    }
+
+    *pxRequestedSizeBytes = xSize;
+
+    /* Allocate a buffer large enough to store the requested Ethernet frame size
+     * and a pointer to a network buffer structure (hence the addition of
+     * ipBUFFER_PADDING bytes). */
+
+    #ifdef PIC32_USE_ETHERNET
+        pucEthernetBuffer = NetworkBufferAllocate( xSize - sizeof( TCPIP_MAC_ETHERNET_HEADER ) );
+    #else
+        pucEthernetBuffer = ( uint8_t * ) pvPortMalloc( xSize + ipBUFFER_PADDING );
+    #endif /* #ifdef PIC32_USE_ETHERNET */
+
+    configASSERT( pucEthernetBuffer );
+
+    if( pucEthernetBuffer != NULL )
+    {
+        /* Enough space is left at the start of the buffer to place a pointer to
+         * the network buffer structure that references this Ethernet buffer.
+         * Return a pointer to the start of the Ethernet buffer itself. */
+               #ifndef PIC32_USE_ETHERNET
+               pucEthernetBuffer += ipBUFFER_PADDING;
+               #endif /* #ifndef PIC32_USE_ETHERNET */
+    }
+
+    return pucEthernetBuffer;
+}
+/*-----------------------------------------------------------*/
+
+void vReleaseNetworkBuffer( uint8_t * pucEthernetBuffer )
+{
+    /* There is space before the Ethernet buffer in which a pointer to the
+     * network buffer that references this Ethernet buffer is stored.  Remove the
+     * space before freeing the buffer. */
+    #ifdef PIC32_USE_ETHERNET
+        NetworkBufferFree( pucEthernetBuffer );
+    #else
+        if( pucEthernetBuffer != NULL )
+        {
+            pucEthernetBuffer -= ipBUFFER_PADDING;
+            vPortFree( ( void * ) pucEthernetBuffer );
+        }
+    #endif /* #ifdef PIC32_USE_ETHERNET */
+}
+/*-----------------------------------------------------------*/
+
+NetworkBufferDescriptor_t * pxGetNetworkBufferWithDescriptor( size_t xRequestedSizeBytes,
+                                                              TickType_t xBlockTimeTicks )
+{
+    NetworkBufferDescriptor_t * pxReturn = NULL;
+    size_t uxCount;
+
+    if( ( xRequestedSizeBytes != 0u ) && ( xRequestedSizeBytes < ( size_t ) baMINIMAL_BUFFER_SIZE ) )
+    {
+        /* ARP packets can replace application packets, so the storage must be
+         * at least large enough to hold an ARP. */
+        xRequestedSizeBytes = baMINIMAL_BUFFER_SIZE;
+    }
+
+       #ifdef PIC32_USE_ETHERNET
+       if( xRequestedSizeBytes != 0u )
+    {
+       #endif /* #ifdef PIC32_USE_ETHERNET */
+       xRequestedSizeBytes += 2u;
+
+       if( ( xRequestedSizeBytes & ( sizeof( size_t ) - 1u ) ) != 0u )
+       {
+               xRequestedSizeBytes = ( xRequestedSizeBytes | ( sizeof( size_t ) - 1u ) ) + 1u;
+       }
+       #ifdef PIC32_USE_ETHERNET
+    }
+       #endif /* #ifdef PIC32_USE_ETHERNET */
+
+    /* If there is a semaphore available, there is a network buffer available. */
+    if( xSemaphoreTake( xNetworkBufferSemaphore, xBlockTimeTicks ) == pdPASS )
+    {
+        /* Protect the structure as it is accessed from tasks and interrupts. */
+        taskENTER_CRITICAL();
+        {
+            pxReturn = ( NetworkBufferDescriptor_t * ) listGET_OWNER_OF_HEAD_ENTRY( &xFreeBuffersList );
+            uxListRemove( &( pxReturn->xBufferListItem ) );
+        }
+        taskEXIT_CRITICAL();
+
+        /* Reading UBaseType_t, no critical section needed. */
+        uxCount = listCURRENT_LIST_LENGTH( &xFreeBuffersList );
+
+        if( uxMinimumFreeNetworkBuffers > uxCount )
+        {
+            uxMinimumFreeNetworkBuffers = uxCount;
+        }
+
+        /* Allocate storage of exactly the requested size to the buffer. */
+        configASSERT( pxReturn->pucEthernetBuffer == NULL );
+
+        if( xRequestedSizeBytes > 0 )
+        {
+            /* Extra space is obtained so a pointer to the network buffer can
+             * be stored at the beginning of the buffer. */
+
+            #ifdef PIC32_USE_ETHERNET
+                pxReturn->pucEthernetBuffer = NetworkBufferAllocate( xRequestedSizeBytes - sizeof( TCPIP_MAC_ETHERNET_HEADER ) );
+            #else
+                pxReturn->pucEthernetBuffer = ( uint8_t * ) pvPortMalloc( xRequestedSizeBytes + ipBUFFER_PADDING );
+            #endif /* #ifdef PIC32_USE_ETHERNET */
+
+            if( pxReturn->pucEthernetBuffer == NULL )
+            {
+                /* The attempt to allocate storage for the buffer payload failed,
+                 * so the network buffer structure cannot be used and must be
+                 * released. */
+                vReleaseNetworkBufferAndDescriptor( pxReturn );
+                pxReturn = NULL;
+            }
+            else
+            {
+                /* Store a pointer to the network buffer structure in the
+                 * buffer storage area, then move the buffer pointer on past the
+                 * stored pointer so the pointer value is not overwritten by the
+                 * application when the buffer is used. */
+                #ifdef PIC32_USE_ETHERNET
+                    *( ( NetworkBufferDescriptor_t ** ) ( pxReturn->pucEthernetBuffer - ipBUFFER_PADDING ) ) = pxReturn;
+                #else
+                    *( ( NetworkBufferDescriptor_t ** ) ( pxReturn->pucEthernetBuffer ) ) = pxReturn;
+                    pxReturn->pucEthernetBuffer += ipBUFFER_PADDING;
+                #endif /* #ifdef PIC32_USE_ETHERNET */
+
+                /* Store the actual size of the allocated buffer, which may be
+                 * greater than the original requested size. */
+                pxReturn->xDataLength = xRequestedSizeBytes;
+
+                #if ( ipconfigUSE_LINKED_RX_MESSAGES != 0 )
+                    {
+                        /* make sure the buffer is not linked */
+                        pxReturn->pxNextBuffer = NULL;
+                    }
+                #endif /* ipconfigUSE_LINKED_RX_MESSAGES */
+            }
+        }
+        else
+        {
+            /* A descriptor is being returned without an associated buffer being
+             * allocated. */
+        }
+    }
+
+    if( pxReturn == NULL )
+    {
+        iptraceFAILED_TO_OBTAIN_NETWORK_BUFFER();
+    }
+    else
+    {
+        iptraceNETWORK_BUFFER_OBTAINED( pxReturn );
+    }
+
+    return pxReturn;
+}
+/*-----------------------------------------------------------*/
+
+void vReleaseNetworkBufferAndDescriptor( NetworkBufferDescriptor_t * const pxNetworkBuffer )
+{
+    BaseType_t xListItemAlreadyInFreeList;
+
+    /* Ensure the buffer is returned to the list of free buffers before the
+    * counting semaphore is 'given' to say a buffer is available.  Release the
+    * storage allocated to the buffer payload.  THIS FILE SHOULD NOT BE USED
+    * IF THE PROJECT INCLUDES A MEMORY ALLOCATOR THAT WILL FRAGMENT THE HEAP
+    * MEMORY.  For example, heap_2 must not be used, heap_4 can be used. */
+    vReleaseNetworkBuffer( pxNetworkBuffer->pucEthernetBuffer );
+    pxNetworkBuffer->pucEthernetBuffer = NULL;
+
+    taskENTER_CRITICAL();
+    {
+        xListItemAlreadyInFreeList = listIS_CONTAINED_WITHIN( &xFreeBuffersList, &( pxNetworkBuffer->xBufferListItem ) );
+
+        if( xListItemAlreadyInFreeList == pdFALSE )
+        {
+            vListInsertEnd( &xFreeBuffersList, &( pxNetworkBuffer->xBufferListItem ) );
+        }
+    }
+    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 ( xSemaphoreGive( xNetworkBufferSemaphore ) == pdTRUE )
+        {
+            iptraceNETWORK_BUFFER_RELEASED( pxNetworkBuffer );
+        }
+    }
+    else
+    {
+        iptraceNETWORK_BUFFER_RELEASED( pxNetworkBuffer );
+    }
+}
+/*-----------------------------------------------------------*/
+
+/*
+ * Returns the number of free network buffers
+ */
+UBaseType_t uxGetNumberOfFreeNetworkBuffers( void )
+{
+    return listCURRENT_LIST_LENGTH( &xFreeBuffersList );
+}
+/*-----------------------------------------------------------*/
+
+UBaseType_t uxGetMinimumFreeNetworkBuffers( void )
+{
+    return uxMinimumFreeNetworkBuffers;
+}
+/*-----------------------------------------------------------*/
+
+NetworkBufferDescriptor_t * pxResizeNetworkBufferWithDescriptor( NetworkBufferDescriptor_t * pxNetworkBuffer,
+                                                                 size_t xNewSizeBytes )
+{
+    size_t xOriginalLength;
+    uint8_t * pucBuffer;
+
+    #ifdef PIC32_USE_ETHERNET
+        xOriginalLength = pxNetworkBuffer->xDataLength;
+    #else
+        xOriginalLength = pxNetworkBuffer->xDataLength + ipBUFFER_PADDING;
+               xNewSizeBytes = xNewSizeBytes + ipBUFFER_PADDING;
+    #endif /* #ifdef PIC32_USE_ETHERNET */
+       
+    pucBuffer = pucGetNetworkBuffer( &( xNewSizeBytes ) );
+
+    if( pucBuffer == NULL )
+    {
+        /* In case the allocation fails, return NULL. */
+        pxNetworkBuffer = NULL;
+    }
+    else
+    {
+        pxNetworkBuffer->xDataLength = xNewSizeBytes;
+        if( xNewSizeBytes > xOriginalLength )
+        {
+            xNewSizeBytes = xOriginalLength;
+        }
+
+        #ifdef PIC32_USE_ETHERNET
+            memcpy( pucBuffer, pxNetworkBuffer->pucEthernetBuffer, xNewSizeBytes );
+            *( ( NetworkBufferDescriptor_t ** ) ( pucBuffer - ipBUFFER_PADDING ) ) = pxNetworkBuffer;
+        #else
+            memcpy( pucBuffer - ipBUFFER_PADDING, pxNetworkBuffer->pucEthernetBuffer - ipBUFFER_PADDING, xNewSizeBytes );
+        #endif /* #ifdef PIC32_USE_ETHERNET */
+
+        vReleaseNetworkBuffer( pxNetworkBuffer->pucEthernetBuffer );
+        pxNetworkBuffer->pucEthernetBuffer = pucBuffer;
+    }
+
+    return pxNetworkBuffer;
+}
index 1b7584c44cb74813ccc21306360783ed9193ee6d..5fe4438bd2709660bf3d6dbe772b9b4601e3b685 100644 (file)
-/*******************************************************************************\r
-*  Network Interface file\r
-*\r
-*  Summary:\r
-*   Network Interface file for FreeRTOS-Plus-TCP stack\r
-*\r
-*  Description:\r
-*   - Interfaces PIC32 to the FreeRTOS TCP/IP stack\r
-*******************************************************************************/\r
-\r
-/*******************************************************************************\r
-*  File Name:  pic32_NetworkInterface.c\r
-*  Copyright 2017 Microchip Technology Incorporated and its subsidiaries.\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\r
-*  of the Software, and to permit persons to whom the Software is furnished to do\r
-*  so, subject to the following conditions:\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,\r
-*  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
-*  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
-*  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r
-*  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r
-*  SOFTWARE\r
-*******************************************************************************/\r
-#include <sys/kmem.h>\r
-\r
-#include "FreeRTOS.h"\r
-#include "semphr.h"\r
-#include "event_groups.h"\r
-#include "FreeRTOS_IP.h"\r
-#include "FreeRTOS_IP_Private.h"\r
-\r
-#include "NetworkInterface.h"\r
-#include "NetworkBufferManagement.h"\r
-\r
-\r
-#include "NetworkInterface.h"\r
-#include "NetworkConfig.h"\r
-\r
-#include "peripheral/eth/plib_eth.h"\r
-\r
-#include "system_config.h"\r
-#include "system/console/sys_console.h"\r
-#include "system/debug/sys_debug.h"\r
-#include "system/command/sys_command.h"\r
-\r
-#include "driver/ethmac/drv_ethmac.h"\r
-#include "driver/miim/drv_miim.h"\r
-\r
-#include "tcpip/tcpip.h"\r
-#include "tcpip/src/tcpip_private.h"\r
-#include "tcpip/src/link_list.h"\r
-\r
-#ifdef PIC32_USE_ETHERNET\r
-\r
-    /* local definitions and data */\r
-\r
-    /* debug messages */\r
-    #if ( PIC32_MAC_DEBUG_MESSAGES != 0 )\r
-        #define PIC32_MAC_DbgPrint( format, ... )    SYS_CONSOLE_PRINT( format, ## __VA_ARGS__ )\r
-    #else\r
-        #define PIC32_MAC_DbgPrint( format, ... )\r
-    #endif /* (PIC32_MAC_DEBUG_MESSAGES != 0) */\r
-\r
-    typedef enum\r
-    {\r
-        PIC32_MAC_EVENT_INIT_NONE = 0x000,      /* no event/invalid */\r
-\r
-        PIC32_MAC_EVENT_INIT_DONE = 0x001,      /* initialization done event */\r
-        PIC32_MAC_EVENT_TIMEOUT = 0x002,        /* periodic timeout event */\r
-        PIC32_MAC_EVENT_IF_PENDING = 0x004,     /* an interface event signal: RX, TX, errors. etc. */\r
-    } PIC32_MAC_EVENT_TYPE;\r
-\r
-    typedef enum\r
-    {\r
-        eMACInit,                               /* Must initialise MAC. */\r
-        eMACPass,                               /* Initialisation was successful. */\r
-        eMACFailed,                             /* Initialisation failed. */\r
-    } eMAC_INIT_STATUS_TYPE;\r
-\r
-    static TCPIP_STACK_HEAP_HANDLE macHeapHandle;\r
-\r
-    static const TCPIP_MAC_OBJECT * macObject; /* the one and only MAC object; */\r
-\r
-    static SYS_MODULE_OBJ macObjHandle;        /* the MAC object instance, obtained at initialization */\r
-    static TCPIP_MAC_HANDLE macCliHandle;      /* client handle */\r
-    static volatile SYS_STATUS macObjStatus;   /* current MAC status */\r
-\r
-    static TaskHandle_t macTaskHandle;\r
-\r
-    static TimerHandle_t macTmrHandle;\r
-\r
-    static bool macLinkStatus;              /* true if link is ON */\r
-\r
-    static eMAC_INIT_STATUS_TYPE xMacInitStatus = eMACInit;\r
-\r
-    /* local prototypes */\r
-    static bool StartInitMac( void );\r
-    static void StartInitCleanup( void );\r
-\r
-    static void SetMacCtrl( TCPIP_MAC_MODULE_CTRL * pMacCtrl );\r
-\r
-    static bool MacSyncFunction( void * synchHandle,\r
-                                 TCPIP_MAC_SYNCH_REQUEST req );\r
-\r
-    /* the PIC32 MAC task function */\r
-    static void MacHandlerTask( void * params );\r
-\r
-    /* MAC interrupt event function */\r
-    static void MAC_EventFunction( TCPIP_MAC_EVENT event,\r
-                                   const void * eventParam );\r
-\r
-    /* timer callback for link maintenance, etc; */\r
-    static void MacTmrCallback( TimerHandle_t xTimer );\r
-\r
-    /* MAC RX packets functions */\r
-    static void MacRxPackets( void );\r
-    static void MacProcessRxPacket( TCPIP_MAC_PACKET * pRxPkt );\r
-\r
-\r
-    /* memory allocation mapping to FreeRTOS */\r
-    static void * _malloc( size_t nBytes )\r
-    {\r
-        return pvPortMalloc( nBytes );\r
-    }\r
-\r
-    /*-----------------------------------------------------------*/\r
-\r
-    static void * _calloc( size_t nElems,\r
-                           size_t elemSize )\r
-    {\r
-        size_t nBytes = nElems * elemSize;\r
-\r
-        void * ptr = pvPortMalloc( nBytes );\r
-\r
-        if( ptr != 0 )\r
-        {\r
-            memset( ptr, 0, nBytes );\r
-        }\r
-\r
-        return ptr;\r
-    }\r
-\r
-    /*-----------------------------------------------------------*/\r
-\r
-    static void _free( void * pBuff )\r
-    {\r
-        vPortFree( pBuff );\r
-    }\r
-\r
-    /* extern references */\r
-    /* */\r
-    /* use the configuration data from the system_init.c */\r
-    extern const TCPIP_NETWORK_CONFIG TCPIP_HOSTS_CONFIGURATION[];\r
-\r
-    /* BufferAllocation_2.c:: packet allocation function */\r
-    extern TCPIP_MAC_PACKET * PIC32_MacPacketAllocate( uint16_t pktLen,\r
-                                                       uint16_t segLoadLen,\r
-                                                       TCPIP_MAC_PACKET_FLAGS flags );\r
-\r
-    extern void PIC32_MacAssociate( TCPIP_MAC_PACKET * pRxPkt,\r
-                                    NetworkBufferDescriptor_t * pxBufferDescriptor,\r
-                                    size_t pktLength );\r
-    extern void PIC32_MacPacketOrphan( TCPIP_MAC_PACKET * pPkt );\r
-\r
-    /* cannot use the system_init.c::tcpipHeapConfig because FreeRTOS does not have a calloc function! */\r
-    /* we build it here! */\r
-\r
-    /* make sure we're running with external heap! Redirect to FreeRTOS. */\r
-    #if !defined( TCPIP_STACK_USE_EXTERNAL_HEAP ) || defined( TCPIP_STACK_USE_INTERNAL_HEAP ) || defined( TCPIP_STACK_USE_INTERNAL_HEAP_POOL )\r
-        #error "TCPIP_STACK_USE_EXTERNAL_HEAP should be defined for this project!"\r
-    #endif\r
-\r
-    static const TCPIP_STACK_HEAP_EXTERNAL_CONFIG tcpipHeapConfig =\r
-    {\r
-        .heapType   = TCPIP_STACK_HEAP_TYPE_EXTERNAL_HEAP,\r
-        .heapFlags  = TCPIP_STACK_HEAP_FLAG_ALLOC_UNCACHED | TCPIP_STACK_HEAP_FLAG_NO_MTHREAD_SYNC,\r
-        .heapUsage  = TCPIP_STACK_HEAP_USE_DEFAULT,\r
-        .malloc_fnc = _malloc,\r
-        .calloc_fnc = _calloc,\r
-        .free_fnc   = _free,\r
-    };\r
-\r
-    #if ( PIC32_MAC_DEBUG_COMMANDS != 0 )\r
-        static int _Command_MacInfo( SYS_CMD_DEVICE_NODE * pCmdIO,\r
-                                     int argc,\r
-                                     char ** argv );\r
-        static int _Command_NetInfo( SYS_CMD_DEVICE_NODE * pCmdIO,\r
-                                     int argc,\r
-                                     char ** argv );\r
-        static int _Command_Version( SYS_CMD_DEVICE_NODE * pCmdIO,\r
-                                     int argc,\r
-                                     char ** argv );\r
-\r
-        static const SYS_CMD_DESCRIPTOR macCmdTbl[] =\r
-        {\r
-            { "macinfo", _Command_MacInfo, ": Check MAC statistics" },\r
-            { "netinfo", _Command_NetInfo, ": Net info" },\r
-            { "version", _Command_Version, ": Version info" },\r
-        };\r
-    #endif /* (PIC32_MAC_DEBUG_COMMANDS != 0) */\r
-\r
-\r
-    /* FreeRTOS implementation functions */\r
-    BaseType_t xNetworkInterfaceInitialise( void )\r
-    {\r
-    BaseType_t xResult;\r
-\r
-        if( xMacInitStatus == eMACInit )\r
-        {\r
-                       /* This is the first time this function is called. */\r
-            if( StartInitMac() != false )\r
-            {\r
-                /* Indicate that the MAC initialisation succeeded. */\r
-                xMacInitStatus = eMACPass;\r
-            }\r
-            else\r
-            {\r
-                xMacInitStatus = eMACFailed;\r
-            }\r
-        }\r
-\r
-        if( xMacInitStatus == eMACPass )\r
-        {\r
-            xResult = xGetPhyLinkStatus();\r
-        }\r
-        else\r
-        {\r
-            xResult = pdFAIL;\r
-        }\r
-\r
-       PIC32_MAC_DbgPrint( "xNetworkInterfaceInitialise: %d %d\r\n", ( int ) xMacInitStatus, ( int ) xResult );\r
-\r
-        return xResult;\r
-    }\r
-\r
-\r
-    /*-----------------------------------------------------------*/\r
-\r
-    BaseType_t xNetworkInterfaceOutput( NetworkBufferDescriptor_t * const pxDescriptor,\r
-                                        BaseType_t xReleaseAfterSend )\r
-    {\r
-        TCPIP_MAC_RES macRes;\r
-        TCPIP_MAC_PACKET * pTxPkt;\r
-\r
-        BaseType_t retRes = pdFALSE;\r
-\r
-\r
-        if( ( pxDescriptor != 0 ) && ( pxDescriptor->pucEthernetBuffer != 0 ) && ( pxDescriptor->xDataLength != 0 ) )\r
-        {\r
-            TCPIP_MAC_PACKET ** ppkt = ( TCPIP_MAC_PACKET ** ) ( pxDescriptor->pucEthernetBuffer - PIC32_BUFFER_PKT_PTR_OSSET );\r
-            configASSERT( ( ( uint32_t ) ppkt & ( sizeof( uint32_t ) - 1 ) ) == 0 );\r
-            pTxPkt = *ppkt;\r
-            configASSERT( pTxPkt != 0 );\r
-\r
-            /* prepare the packet for transmission */\r
-            /* set the correct data length: */\r
-            configASSERT( pTxPkt->pDSeg->segSize >= pTxPkt->pDSeg->segLen );\r
-            pTxPkt->pDSeg->segLen = pxDescriptor->xDataLength;\r
-            pTxPkt->next = 0; /* unlink it */\r
-            macRes = ( macObject->TCPIP_MAC_PacketTx )( macCliHandle, pTxPkt );\r
-\r
-            if( macRes >= 0 )\r
-            {\r
-                retRes = pdTRUE;\r
-                pxDescriptor->pucEthernetBuffer = 0; /* it will be released by the MAC driver once it's transmitted */\r
-                iptraceNETWORK_INTERFACE_TRANSMIT();\r
-            }\r
-\r
-            /* else same error occurred; this normally should not happen! But the buffer is left in there so it shold be freed! */\r
-\r
-            /* The buffer has been sent so can be released. */\r
-            if( xReleaseAfterSend != pdFALSE )\r
-            {\r
-                vReleaseNetworkBufferAndDescriptor( pxDescriptor );\r
-            }\r
-        }\r
-\r
-        return retRes;\r
-    }\r
-\r
-\r
-    /************************************* Section: helper functions ************************************************** */\r
-    /* */\r
-\r
-    void PIC32_GetMACAddress( uint8_t macAdd[ 6 ] )\r
-    {\r
-        #if defined( __PIC32MZ__ ) || defined( __PIC32MX__ )\r
-            PLIB_ETH_MACGetAddress( ETH_ID_0, macAdd );\r
-        #else\r
-        #error "MAC Address: not supported architecture!"\r
-        #endif\r
-    }\r
-\r
-\r
-    /*-----------------------------------------------------------*/\r
-\r
-    const void * const PIC32_GetMacConfigData( void )\r
-    {\r
-        #if defined( __PIC32MZ__ ) || defined( __PIC32MX__ )\r
-            extern const TCPIP_MODULE_MAC_PIC32INT_CONFIG tcpipMACPIC32INTInitData;\r
-\r
-            return &tcpipMACPIC32INTInitData;\r
-        #else\r
-        #error "MAC Address: not supported architecture!"\r
-        #endif\r
-    }\r
-\r
-    /************************************* Section: worker code ************************************************** */\r
-    /* */\r
-\r
-\r
-    static bool StartInitMac( void )\r
-    {\r
-        TCPIP_MAC_MODULE_CTRL macCtrl;\r
-        SYS_MODULE_INIT moduleInit;\r
-        EventBits_t evBits;\r
-\r
-\r
-        /* perform some initialization of all variables so that we can cleanup what failed */\r
-        /* if something failed, the routine will be called again and again by FreeRTOS! */\r
-        macHeapHandle = 0;\r
-        macObjHandle = 0;\r
-        macCliHandle = 0;\r
-        macTmrHandle = 0;\r
-        macTaskHandle = 0;\r
-        macObject = TCPIP_HOSTS_CONFIGURATION[ 0 ].pMacObject; /* the MAC object we use */\r
-        macObjStatus = SYS_STATUS_UNINITIALIZED;\r
-        macLinkStatus = false;\r
-\r
-        int netUpFail = 0;\r
-\r
-        while( true )\r
-        {\r
-            /* start the allocator */\r
-            macHeapHandle = TCPIP_HEAP_Create( ( const TCPIP_STACK_HEAP_CONFIG * ) &tcpipHeapConfig, 0 );\r
-\r
-            if( macHeapHandle == 0 )\r
-            {\r
-                netUpFail = 1;\r
-                break;\r
-            }\r
-\r
-            if( TCPIP_PKT_Initialize( macHeapHandle, 0, 0 ) == false )\r
-            {\r
-                netUpFail = 2;\r
-                break;\r
-            }\r
-\r
-            moduleInit.sys.powerState = SYS_MODULE_POWER_RUN_FULL;\r
-\r
-            /* Initialize the MAC. MAC address is defined to 0x000000000000 in\r
-             * FreeRTOSConfig.h and therefore it will be initialized to the\r
-             * factory programmed MAC address. */\r
-            SetMacCtrl( &macCtrl );\r
-            /* Set the mac address in the FreeRTOS+TCP stack. */\r
-            FreeRTOS_UpdateMACAddress( macCtrl.ifPhyAddress.v );\r
-\r
-            TCPIP_MAC_INIT macInit =\r
-            {\r
-                .moduleInit = { moduleInit.value },\r
-                .macControl = &macCtrl,\r
-                .moduleData = PIC32_GetMacConfigData(),\r
-            };\r
-\r
-            macObjHandle = ( macObject->TCPIP_MAC_Initialize )( TCPIP_MODULE_MAC_PIC32INT, &macInit.moduleInit );\r
-\r
-            if( macObjHandle == SYS_MODULE_OBJ_INVALID )\r
-            {\r
-                macObjHandle = 0;\r
-                netUpFail = 4;\r
-                break;\r
-            }\r
-\r
-            /* open the MAC */\r
-            macCliHandle = ( macObject->TCPIP_MAC_Open )( TCPIP_MODULE_MAC_PIC32INT, DRV_IO_INTENT_READWRITE );\r
-\r
-            if( macCliHandle == DRV_HANDLE_INVALID )\r
-            {\r
-                macCliHandle = 0;\r
-                netUpFail = 5;\r
-                break;\r
-            }\r
-\r
-            if( !( macObject->TCPIP_MAC_EventMaskSet )( macCliHandle, ( TCPIP_MAC_EV_RX_DONE | TCPIP_MAC_EV_TX_DONE | TCPIP_MAC_EV_RXTX_ERRORS ), true ) )\r
-            {\r
-                netUpFail = 6;\r
-                break;\r
-            }\r
-\r
-            /* completed the MAC initialization */\r
-            /* continue the initialization */\r
-            macTmrHandle = xTimerCreate( PIC32_MAC_TIMER_NAME, PIC32_MAC_TIMER_PERIOD, pdTRUE, 0, MacTmrCallback );\r
-\r
-            if( ( macTmrHandle == 0 ) || ( xTimerStart( macTmrHandle, 0 ) != pdPASS ) )\r
-            {\r
-                netUpFail = 8;\r
-                break;\r
-            }\r
-\r
-            /* spawn the PIC32 MAC task function */\r
-            /* and wait for its event signal */\r
-            macObjStatus = SYS_STATUS_BUSY;\r
-\r
-            if( xTaskCreate( MacHandlerTask, PIC32_MAC_TASK_NAME, PIC32_MAC_TASK_STACK_SIZE, xTaskGetCurrentTaskHandle(), PIC32_MAC_TASK_PRI, &macTaskHandle ) != pdPASS )\r
-            { /* failed */\r
-                netUpFail = 9;\r
-                break;\r
-            }\r
-\r
-            xTaskNotifyWait( PIC32_MAC_EVENT_INIT_DONE, PIC32_MAC_EVENT_INIT_DONE, &evBits, PIC32_MAC_INIT_TIMEOUT );\r
-\r
-            if( ( evBits & PIC32_MAC_EVENT_INIT_DONE ) == 0 )\r
-            { /* timed out */\r
-                netUpFail = 10;\r
-                break;\r
-            }\r
-\r
-            if( macObjStatus != SYS_STATUS_READY )\r
-            { /* failed somehow ??? */\r
-                netUpFail = 11;\r
-                break;\r
-            }\r
-\r
-            netUpFail = 0;\r
-            break;\r
-        }\r
-\r
-        if( netUpFail == 0 )\r
-        {\r
-            PIC32_MAC_DbgPrint( " MAC Init success!\r\n" );\r
-\r
-            #if ( PIC32_MAC_DEBUG_COMMANDS != 0 )\r
-                /* create command group */\r
-                if( !SYS_CMD_ADDGRP( macCmdTbl, sizeof( macCmdTbl ) / sizeof( *macCmdTbl ), "mac", ": mac commands" ) )\r
-                {\r
-                    PIC32_MAC_DbgPrint( "Failed to create MAC Commands\r\n" );\r
-                }\r
-            #endif /* (PIC32_MAC_DEBUG_COMMANDS != 0) */\r
-\r
-            return true;\r
-        }\r
-        else\r
-        {\r
-            StartInitCleanup();\r
-            PIC32_MAC_DbgPrint( "MAC Init failed: %d!\r\n", netUpFail );\r
-\r
-            return false;\r
-        }\r
-    }\r
-\r
-    /*-----------------------------------------------------------*/\r
-\r
-    static void StartInitCleanup( void )\r
-    {\r
-        if( macHeapHandle != 0 )\r
-        {\r
-            TCPIP_HEAP_Delete( macHeapHandle );\r
-            macHeapHandle = 0;\r
-        }\r
-\r
-        if( macObjHandle != 0 )\r
-        {\r
-            ( macObject->TCPIP_MAC_Deinitialize )( macObjHandle );\r
-            macObjHandle = 0;\r
-        }\r
-\r
-        if( macTmrHandle != 0 )\r
-        {\r
-            xTimerDelete( macTmrHandle, portMAX_DELAY );\r
-            macTmrHandle = 0;\r
-        }\r
-\r
-        if( macTaskHandle != 0 )\r
-        {\r
-            vTaskDelete( macTaskHandle );\r
-            macTaskHandle = 0;\r
-        }\r
-    }\r
-\r
-    /*-----------------------------------------------------------*/\r
-\r
-    static void SetMacCtrl( TCPIP_MAC_MODULE_CTRL * pMacCtrl )\r
-    {\r
-        TCPIP_MAC_ADDR macAdd;\r
-        uint8_t unsetMACAddr[ 6 ] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };     /* not set MAC address */\r
-\r
-        pMacCtrl->nIfs = 1;\r
-\r
-        pMacCtrl->mallocF = TCPIP_HEAP_MallocOutline;\r
-        pMacCtrl->callocF = TCPIP_HEAP_CallocOutline;\r
-        pMacCtrl->freeF = TCPIP_HEAP_FreeOutline;\r
-        pMacCtrl->memH = macHeapHandle;\r
-\r
-\r
-        pMacCtrl->pktAllocF = PIC32_MacPacketAllocate;\r
-        pMacCtrl->pktFreeF = ( TCPIP_MAC_PKT_FreeF ) _TCPIP_PKT_FREE_FNC;\r
-        pMacCtrl->pktAckF = ( TCPIP_MAC_PKT_AckF ) _TCPIP_PKT_ACK_FNC;\r
-\r
-        pMacCtrl->synchF = MacSyncFunction;\r
-\r
-        pMacCtrl->eventF = MAC_EventFunction;\r
-        pMacCtrl->eventParam = 0;\r
-\r
-        pMacCtrl->moduleId = TCPIP_MODULE_MAC_PIC32INT;\r
-        pMacCtrl->netIx = 0;\r
-        pMacCtrl->macAction = TCPIP_MAC_ACTION_INIT;\r
-        pMacCtrl->powerMode = TCPIP_MAC_POWER_FULL;\r
-\r
-        macAdd.v[ 0 ] = configMAC_ADDR0;\r
-        macAdd.v[ 1 ] = configMAC_ADDR1;\r
-        macAdd.v[ 2 ] = configMAC_ADDR2;\r
-        macAdd.v[ 3 ] = configMAC_ADDR3;\r
-        macAdd.v[ 4 ] = configMAC_ADDR4;\r
-        macAdd.v[ 5 ] = configMAC_ADDR5;\r
-\r
-        if( memcmp( macAdd.v, unsetMACAddr, sizeof( unsetMACAddr ) ) == 0 )\r
-        { /* if unspecified we use the factory pre-programmed address */\r
-            PIC32_GetMACAddress( pMacCtrl->ifPhyAddress.v );\r
-        }\r
-        else\r
-        { /* use the config suggested one */\r
-            memcpy( pMacCtrl->ifPhyAddress.v, macAdd.v, sizeof( macAdd ) );\r
-        }\r
-    }\r
-\r
-    /*-----------------------------------------------------------*/\r
-\r
-    static bool MacSyncFunction( void * synchHandle,\r
-                                 TCPIP_MAC_SYNCH_REQUEST req )\r
-    {\r
-        switch( req )\r
-        {\r
-            case TCPIP_MAC_SYNCH_REQUEST_OBJ_CREATE:\r
-                vSemaphoreCreateBinary( *( SemaphoreHandle_t * ) synchHandle );\r
-\r
-                return ( *( SemaphoreHandle_t * ) synchHandle == NULL ) ? false : true;\r
-\r
-            case TCPIP_MAC_SYNCH_REQUEST_OBJ_DELETE:\r
-                vSemaphoreDelete( *( SemaphoreHandle_t * ) synchHandle );\r
-                *( SemaphoreHandle_t * ) synchHandle = NULL;\r
-\r
-                return true;\r
-\r
-            case TCPIP_MAC_SYNCH_REQUEST_OBJ_LOCK:\r
-\r
-                return ( xSemaphoreTake( *( SemaphoreHandle_t * ) synchHandle, portMAX_DELAY ) == pdTRUE ) ? true : false;\r
-\r
-            case TCPIP_MAC_SYNCH_REQUEST_OBJ_UNLOCK:\r
-\r
-                return ( xSemaphoreGive( *( SemaphoreHandle_t * ) synchHandle ) == pdTRUE ) ? true : false;\r
-\r
-            case TCPIP_MAC_SYNCH_REQUEST_CRIT_ENTER:\r
-                vTaskSuspendAll();\r
-\r
-                return true;\r
-\r
-            case TCPIP_MAC_SYNCH_REQUEST_CRIT_LEAVE:\r
-                xTaskResumeAll();\r
-\r
-                return true;\r
-\r
-            default:\r
-\r
-                return false;\r
-        }\r
-    }\r
-\r
-\r
-    /*-----------------------------------------------------------*/\r
-\r
-    static void MacHandlerTask( void * params )\r
-    {\r
-        EventBits_t evBits;\r
-\r
-        /* perform the MAC initialization */\r
-        while( macObjStatus == SYS_STATUS_BUSY )\r
-        {\r
-            /* process the underlying MAC module tasks */\r
-            ( macObject->TCPIP_MAC_Tasks )( macObjHandle );\r
-\r
-            SYS_STATUS macStatus = ( macObject->TCPIP_MAC_Status )( macObjHandle );\r
-\r
-            if( macStatus == SYS_STATUS_BUSY )\r
-            { /* still pending */\r
-                vTaskDelay( PIC32_MAC_TASK_INIT_PENDING_DELAY );\r
-            }\r
-            else\r
-            { /* completed ...somehow */\r
-                macObjStatus = macStatus;\r
-\r
-                xTaskNotify( ( TaskHandle_t ) params, PIC32_MAC_EVENT_INIT_DONE, eSetBits );\r
-\r
-                if( macStatus != SYS_STATUS_READY )\r
-                { /* failed miserably */\r
-                    vTaskDelete( 0 );\r
-                }\r
-\r
-                /* done, up and running */\r
-            }\r
-        }\r
-\r
-        while( true )\r
-        {\r
-            xTaskNotifyWait( PIC32_MAC_EVENT_TIMEOUT | PIC32_MAC_EVENT_IF_PENDING, PIC32_MAC_EVENT_TIMEOUT | PIC32_MAC_EVENT_IF_PENDING, &evBits, portMAX_DELAY );\r
-\r
-            if( ( evBits & PIC32_MAC_EVENT_TIMEOUT ) != 0 )\r
-            {                                                                       /* timeout occurred... */\r
-                ( macObject->TCPIP_MAC_Tasks )( macObjHandle );\r
-                bool linkCurr = ( macObject->TCPIP_MAC_LinkCheck )( macCliHandle ); /* check link status */\r
-\r
-                if( macLinkStatus != linkCurr )\r
-                { /* link status changed; some event could ve fired here if needed */\r
-                    PIC32_MAC_DbgPrint( " MAC link: %s!\r\n", linkCurr ? "ON" : "OFF" );\r
-                    macLinkStatus = linkCurr;\r
-                }\r
-            }\r
-\r
-            if( ( evBits & PIC32_MAC_EVENT_IF_PENDING ) != 0 )\r
-            { /* IF events signal */\r
-                TCPIP_MAC_EVENT activeEvents = ( macObject->TCPIP_MAC_EventPendingGet )( macCliHandle );\r
-\r
-                if( activeEvents != TCPIP_MAC_EV_NONE )\r
-                {\r
-                    /* acknowledge the events */\r
-                    ( macObject->TCPIP_MAC_EventAcknowledge )( macCliHandle, activeEvents );\r
-\r
-                    /* check for RX */\r
-                    if( ( activeEvents & ( TCPIP_MAC_EV_RX_DONE | TCPIP_MAC_EV_RX_OVFLOW | TCPIP_MAC_EV_RX_BUFNA ) ) != 0 )\r
-                    { /* RX packets available */\r
-                        MacRxPackets();\r
-                    }\r
-\r
-                    /* call the driver process function; */\r
-                    /* PIC32 driver requests it through TCPIP_MAC_ParametersGet() which is bypassed here! */\r
-                    ( macObject->TCPIP_MAC_Process )( macCliHandle );\r
-                }\r
-            }\r
-\r
-            /* do what you have to do and then wait for another event... */\r
-        }\r
-    }\r
-\r
-    /*-----------------------------------------------------------*/\r
-\r
-    static void MacTmrCallback( TimerHandle_t xTimer )\r
-    {\r
-        xTaskNotify( macTaskHandle, PIC32_MAC_EVENT_TIMEOUT, eSetBits );\r
-    }\r
-\r
-    /* MAC interrupt event function */\r
-    /* MAC signals an event, probably from within ISR */\r
-    /* we care just for RX related events */\r
-    static void MAC_EventFunction( TCPIP_MAC_EVENT event,\r
-                                   const void * eventParam )\r
-    {\r
-        BaseType_t xHigherPriorityTaskWoken;\r
-\r
-        if( ( event & ( TCPIP_MAC_EV_RX_DONE | TCPIP_MAC_EV_TX_DONE | TCPIP_MAC_EV_RXTX_ERRORS ) ) != 0 )\r
-        {\r
-            xHigherPriorityTaskWoken = pdFALSE;\r
-            xTaskNotifyFromISR( macTaskHandle, PIC32_MAC_EVENT_IF_PENDING, eSetBits, &xHigherPriorityTaskWoken );\r
-\r
-            if( xHigherPriorityTaskWoken )\r
-            {\r
-                portEND_SWITCHING_ISR( xHigherPriorityTaskWoken );\r
-            }\r
-        }\r
-    }\r
-\r
-    /*-----------------------------------------------------------*/\r
-\r
-    BaseType_t xGetPhyLinkStatus( void )\r
-    {\r
-        return macLinkStatus == true ? pdPASS : pdFAIL;\r
-    }\r
-\r
-\r
-    /* receive packets from the MAC driver */\r
-    static void MacRxPackets( void )\r
-    {\r
-        TCPIP_MAC_PACKET * pRxPkt;\r
-\r
-        /* get all the new MAC packets */\r
-        while( ( pRxPkt = ( macObject->TCPIP_MAC_PacketRx )( macCliHandle, 0, 0 ) ) != 0 )\r
-        {\r
-            MacProcessRxPacket( pRxPkt );\r
-        }\r
-    }\r
-\r
-    /*-----------------------------------------------------------*/\r
-\r
-    static void MacProcessRxPacket( TCPIP_MAC_PACKET * pRxPkt )\r
-    {\r
-        bool pktSuccess, pktLost;\r
-        size_t pktLength;\r
-        TCPIP_MAC_DATA_SEGMENT * pSeg;\r
-        uint8_t * pPktBuff;\r
-        NetworkBufferDescriptor_t * pxBufferDescriptor;\r
-        IPStackEvent_t xRxEvent;\r
-\r
-        pxBufferDescriptor = 0;\r
-        pktSuccess = pktLost = false;\r
-\r
-        while( true )\r
-        {\r
-            pktLength = 0;\r
-            int nSegs = 0;\r
-            pSeg = pRxPkt->pDSeg;\r
-            pPktBuff = pSeg->segLoad;\r
-\r
-            /* calculate the packet size */\r
-            do\r
-            {\r
-                pktLength += pSeg->segLen;\r
-                pSeg = pSeg->next;\r
-                nSegs++;\r
-            } while( pSeg != 0 );\r
-\r
-            if( nSegs > 1 )\r
-            { /* no support in FreeRTOS for multi segment packets! */\r
-                break;\r
-            }\r
-\r
-            /* sizeof(TCPIP_MAC_ETHERNET_HEADER) is subtracted by the driver */\r
-            /* but FreeRTOS needs the whole frame! */\r
-            pktLength += sizeof( TCPIP_MAC_ETHERNET_HEADER );\r
-\r
-            if( eConsiderFrameForProcessing( pPktBuff ) != eProcessBuffer )\r
-            {\r
-                break;\r
-            }\r
-\r
-            /* get the network descriptor (no data buffer) to hold this packet */\r
-            pxBufferDescriptor = pxGetNetworkBufferWithDescriptor( 0, 0 );\r
-\r
-            if( pxBufferDescriptor == 0 )\r
-            {\r
-                pktLost = true;\r
-                break;\r
-            }\r
-\r
-            PIC32_MacAssociate( pRxPkt, pxBufferDescriptor, pktLength );\r
-\r
-            xRxEvent.eEventType = eNetworkRxEvent;\r
-            xRxEvent.pvData = ( void * ) pxBufferDescriptor;\r
-\r
-            /* Send the data to the TCP/IP stack */\r
-            if( xSendEventStructToIPTask( &xRxEvent, 0 ) == pdFALSE )\r
-            { /* failed */\r
-                pktLost = true;\r
-            }\r
-            else\r
-            { /* success */\r
-                pktSuccess = true;\r
-                iptraceNETWORK_INTERFACE_RECEIVE();\r
-            }\r
-\r
-            break;\r
-        }\r
-\r
-        if( !pktSuccess )\r
-        { /* smth went wrong; nothing sent to the */\r
-            if( pxBufferDescriptor != 0 )\r
-            {\r
-                pxBufferDescriptor->pucEthernetBuffer = 0;\r
-                vReleaseNetworkBufferAndDescriptor( pxBufferDescriptor );\r
-            }\r
-\r
-            if( pktLost )\r
-            {\r
-                iptraceETHERNET_RX_EVENT_LOST();\r
-            }\r
-\r
-            /* acknowledge the packet to the MAC driver */\r
-            if( pRxPkt->ackFunc )\r
-            {\r
-                ( *pRxPkt->ackFunc )( pRxPkt, pRxPkt->ackParam );\r
-            }\r
-            else\r
-            {\r
-                PIC32_MacPacketOrphan( pRxPkt );\r
-            }\r
-        }\r
-    }\r
-\r
-    #if ( PIC32_MAC_DEBUG_COMMANDS != 0 )\r
-        /* */\r
-        static int _Command_MacInfo( SYS_CMD_DEVICE_NODE * pCmdIO,\r
-                                     int argc,\r
-                                     char ** argv )\r
-        {\r
-            TCPIP_MAC_RES macRes;\r
-            TCPIP_MAC_RX_STATISTICS rxStatistics;\r
-            TCPIP_MAC_TX_STATISTICS txStatistics;\r
-            TCPIP_MAC_STATISTICS_REG_ENTRY regEntries[ 8 ];\r
-            TCPIP_MAC_STATISTICS_REG_ENTRY * pRegEntry;\r
-            int jx, hwEntries;\r
-            char entryName[ sizeof( pRegEntry->registerName ) + 1 ];\r
-\r
-            const void * cmdIoParam = pCmdIO->cmdIoParam;\r
-\r
-            if( argc != 1 )\r
-            {\r
-                ( *pCmdIO->pCmdApi->msg )( cmdIoParam, "Usage: macinfo \r\n" );\r
-                ( *pCmdIO->pCmdApi->msg )( cmdIoParam, "Ex: macinfo \r\n" );\r
-\r
-                return false;\r
-            }\r
-\r
-            ( *pCmdIO->pCmdApi->print )( cmdIoParam, "Interface: %s driver statistics\r\n", macObject->macName );\r
-            macRes = ( macObject->TCPIP_MAC_StatisticsGet )( macCliHandle, &rxStatistics, &txStatistics );\r
-\r
-            if( macRes == TCPIP_MAC_RES_OK )\r
-            {\r
-                ( *pCmdIO->pCmdApi->print )( cmdIoParam, "\tnRxOkPackets: %d, nRxPendBuffers: %d, nRxSchedBuffers: %d, ",\r
-                                             rxStatistics.nRxOkPackets, rxStatistics.nRxPendBuffers, rxStatistics.nRxSchedBuffers );\r
-                ( *pCmdIO->pCmdApi->print )( cmdIoParam, "nRxErrorPackets: %d, nRxFragmentErrors: %d\r\n", rxStatistics.nRxErrorPackets, rxStatistics.nRxFragmentErrors );\r
-                ( *pCmdIO->pCmdApi->print )( cmdIoParam, "\tnTxOkPackets: %d, nTxPendBuffers: %d, nTxErrorPackets: %d, nTxQueueFull: %d\r\n",\r
-                                             txStatistics.nTxOkPackets, txStatistics.nTxPendBuffers, txStatistics.nTxErrorPackets, txStatistics.nTxQueueFull );\r
-            }\r
-            else\r
-            {\r
-                ( *pCmdIO->pCmdApi->msg )( cmdIoParam, "\tnot supported\r\n" );\r
-            }\r
-\r
-            ( *pCmdIO->pCmdApi->print )( cmdIoParam, "Interface: %s hardware statistics\r\n", macObject->macName );\r
-            macRes = ( macObject->TCPIP_MAC_RegisterStatisticsGet )( macCliHandle, regEntries, sizeof( regEntries ) / sizeof( *regEntries ), &hwEntries );\r
-\r
-            if( macRes == TCPIP_MAC_RES_OK )\r
-            {\r
-                entryName[ sizeof( entryName ) - 1 ] = 0;\r
-\r
-                for( jx = 0, pRegEntry = regEntries; jx < hwEntries && jx < sizeof( regEntries ) / sizeof( *regEntries ); jx++, pRegEntry++ )\r
-                {\r
-                    strncpy( entryName, pRegEntry->registerName, sizeof( entryName ) - 1 );\r
-                    ( *pCmdIO->pCmdApi->print )( cmdIoParam, "\t%s: 0x%8x\r\n", entryName, pRegEntry->registerValue );\r
-                }\r
-            }\r
-            else\r
-            {\r
-                ( *pCmdIO->pCmdApi->msg )( cmdIoParam, "\tnot supported\r\n" );\r
-            }\r
-\r
-            return true;\r
-        }\r
-\r
-        /*-----------------------------------------------------------*/\r
-\r
-        static int _Command_NetInfo( SYS_CMD_DEVICE_NODE * pCmdIO,\r
-                                     int argc,\r
-                                     char ** argv )\r
-        {\r
-            const void * cmdIoParam = pCmdIO->cmdIoParam;\r
-\r
-            union\r
-            {\r
-                uint32_t ul;\r
-                uint8_t b[ 4 ];\r
-            }\r
-            sUl;\r
-\r
-            sUl.ul = FreeRTOS_GetIPAddress();\r
-\r
-            bool linkUp = FreeRTOS_IsNetworkUp() == pdTRUE;\r
-\r
-            ( *pCmdIO->pCmdApi->print )( cmdIoParam, "IP address: %d.%d.%d.%d\r\n", sUl.b[ 0 ], sUl.b[ 1 ], sUl.b[ 2 ], sUl.b[ 3 ] );\r
-            ( *pCmdIO->pCmdApi->print )( cmdIoParam, "Link is: %s\r\n", linkUp ? "Up" : "Down" );\r
-\r
-            return true;\r
-        }\r
-\r
-#include "aws_application_version.h"\r
-\r
-static int _Command_Version(SYS_CMD_DEVICE_NODE* pCmdIO, int argc, char** argv)\r
-{\r
-    configPRINTF( ( "App version - maj: %d, min: %d, build: %d\r\n",  xAppFirmwareVersion.u.x.ucMajor, xAppFirmwareVersion.u.x.ucMinor, xAppFirmwareVersion.u.x.usBuild) );\r
-    return 0;\r
-}\r
-\r
-    #endif /* (PIC32_MAC_DEBUG_COMMANDS != 0) */\r
-#endif /* #ifdef PIC32_USE_ETHERNET */\r
+/*******************************************************************************
+*  Network Interface file
+*
+*  Summary:
+*   Network Interface file for FreeRTOS-Plus-TCP stack
+*
+*  Description:
+*   - Interfaces PIC32 to the FreeRTOS TCP/IP stack
+*******************************************************************************/
+
+/*******************************************************************************
+*  File Name:  pic32_NetworkInterface.c
+*  Copyright 2017 Microchip Technology Incorporated and its subsidiaries.
+*
+*  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
+*******************************************************************************/
+#include <sys/kmem.h>
+
+#include "FreeRTOS.h"
+#include "semphr.h"
+#include "event_groups.h"
+#include "FreeRTOS_IP.h"
+#include "FreeRTOS_IP_Private.h"
+
+#include "NetworkInterface.h"
+#include "NetworkBufferManagement.h"
+
+
+#include "NetworkInterface.h"
+#include "NetworkConfig.h"
+
+#include "peripheral/eth/plib_eth.h"
+
+#include "system_config.h"
+#include "system/console/sys_console.h"
+#include "system/debug/sys_debug.h"
+#include "system/command/sys_command.h"
+
+#include "driver/ethmac/drv_ethmac.h"
+#include "driver/miim/drv_miim.h"
+
+#include "tcpip/tcpip.h"
+#include "tcpip/src/tcpip_private.h"
+#include "tcpip/src/link_list.h"
+
+#ifdef PIC32_USE_ETHERNET
+
+    /* local definitions and data */
+
+    /* debug messages */
+    #if ( PIC32_MAC_DEBUG_MESSAGES != 0 )
+        #define PIC32_MAC_DbgPrint( format, ... )    SYS_CONSOLE_PRINT( format, ## __VA_ARGS__ )
+    #else
+        #define PIC32_MAC_DbgPrint( format, ... )
+    #endif /* (PIC32_MAC_DEBUG_MESSAGES != 0) */
+
+    typedef enum
+    {
+        PIC32_MAC_EVENT_INIT_NONE = 0x000,      /* no event/invalid */
+
+        PIC32_MAC_EVENT_INIT_DONE = 0x001,      /* initialization done event */
+        PIC32_MAC_EVENT_TIMEOUT = 0x002,        /* periodic timeout event */
+        PIC32_MAC_EVENT_IF_PENDING = 0x004,     /* an interface event signal: RX, TX, errors. etc. */
+    } PIC32_MAC_EVENT_TYPE;
+
+    typedef enum
+    {
+        eMACInit,                               /* Must initialise MAC. */
+        eMACPass,                               /* Initialisation was successful. */
+        eMACFailed,                             /* Initialisation failed. */
+    } eMAC_INIT_STATUS_TYPE;
+
+    static TCPIP_STACK_HEAP_HANDLE macHeapHandle;
+
+    static const TCPIP_MAC_OBJECT * macObject; /* the one and only MAC object; */
+
+    static SYS_MODULE_OBJ macObjHandle;        /* the MAC object instance, obtained at initialization */
+    static TCPIP_MAC_HANDLE macCliHandle;      /* client handle */
+    static volatile SYS_STATUS macObjStatus;   /* current MAC status */
+
+    static TaskHandle_t macTaskHandle;
+
+    static TimerHandle_t macTmrHandle;
+
+    static bool macLinkStatus;              /* true if link is ON */
+
+    static eMAC_INIT_STATUS_TYPE xMacInitStatus = eMACInit;
+
+    /* local prototypes */
+    static bool StartInitMac( void );
+    static void StartInitCleanup( void );
+
+    static void SetMacCtrl( TCPIP_MAC_MODULE_CTRL * pMacCtrl );
+
+    static bool MacSyncFunction( void * synchHandle,
+                                 TCPIP_MAC_SYNCH_REQUEST req );
+
+    /* the PIC32 MAC task function */
+    static void MacHandlerTask( void * params );
+
+    /* MAC interrupt event function */
+    static void MAC_EventFunction( TCPIP_MAC_EVENT event,
+                                   const void * eventParam );
+
+    /* timer callback for link maintenance, etc; */
+    static void MacTmrCallback( TimerHandle_t xTimer );
+
+    /* MAC RX packets functions */
+    static void MacRxPackets( void );
+    static void MacProcessRxPacket( TCPIP_MAC_PACKET * pRxPkt );
+
+
+    /* memory allocation mapping to FreeRTOS */
+    static void * _malloc( size_t nBytes )
+    {
+        return pvPortMalloc( nBytes );
+    }
+
+    /*-----------------------------------------------------------*/
+
+    static void * _calloc( size_t nElems,
+                           size_t elemSize )
+    {
+        size_t nBytes = nElems * elemSize;
+
+        void * ptr = pvPortMalloc( nBytes );
+
+        if( ptr != 0 )
+        {
+            memset( ptr, 0, nBytes );
+        }
+
+        return ptr;
+    }
+
+    /*-----------------------------------------------------------*/
+
+    static void _free( void * pBuff )
+    {
+        vPortFree( pBuff );
+    }
+
+    /* extern references */
+    /* */
+    /* use the configuration data from the system_init.c */
+    extern const TCPIP_NETWORK_CONFIG TCPIP_HOSTS_CONFIGURATION[];
+
+    /* BufferAllocation_2.c:: packet allocation function */
+    extern TCPIP_MAC_PACKET * PIC32_MacPacketAllocate( uint16_t pktLen,
+                                                       uint16_t segLoadLen,
+                                                       TCPIP_MAC_PACKET_FLAGS flags );
+
+    extern void PIC32_MacAssociate( TCPIP_MAC_PACKET * pRxPkt,
+                                    NetworkBufferDescriptor_t * pxBufferDescriptor,
+                                    size_t pktLength );
+    extern void PIC32_MacPacketOrphan( TCPIP_MAC_PACKET * pPkt );
+
+    /* cannot use the system_init.c::tcpipHeapConfig because FreeRTOS does not have a calloc function! */
+    /* we build it here! */
+
+    /* make sure we're running with external heap! Redirect to FreeRTOS. */
+    #if !defined( TCPIP_STACK_USE_EXTERNAL_HEAP ) || defined( TCPIP_STACK_USE_INTERNAL_HEAP ) || defined( TCPIP_STACK_USE_INTERNAL_HEAP_POOL )
+        #error "TCPIP_STACK_USE_EXTERNAL_HEAP should be defined for this project!"
+    #endif
+
+    static const TCPIP_STACK_HEAP_EXTERNAL_CONFIG tcpipHeapConfig =
+    {
+        .heapType   = TCPIP_STACK_HEAP_TYPE_EXTERNAL_HEAP,
+        .heapFlags  = TCPIP_STACK_HEAP_FLAG_ALLOC_UNCACHED | TCPIP_STACK_HEAP_FLAG_NO_MTHREAD_SYNC,
+        .heapUsage  = TCPIP_STACK_HEAP_USE_DEFAULT,
+        .malloc_fnc = _malloc,
+        .calloc_fnc = _calloc,
+        .free_fnc   = _free,
+    };
+
+    #if ( PIC32_MAC_DEBUG_COMMANDS != 0 )
+        static int _Command_MacInfo( SYS_CMD_DEVICE_NODE * pCmdIO,
+                                     int argc,
+                                     char ** argv );
+        static int _Command_NetInfo( SYS_CMD_DEVICE_NODE * pCmdIO,
+                                     int argc,
+                                     char ** argv );
+        static int _Command_Version( SYS_CMD_DEVICE_NODE * pCmdIO,
+                                     int argc,
+                                     char ** argv );
+
+        static const SYS_CMD_DESCRIPTOR macCmdTbl[] =
+        {
+            { "macinfo", _Command_MacInfo, ": Check MAC statistics" },
+            { "netinfo", _Command_NetInfo, ": Net info" },
+            { "version", _Command_Version, ": Version info" },
+        };
+    #endif /* (PIC32_MAC_DEBUG_COMMANDS != 0) */
+
+
+    /* FreeRTOS implementation functions */
+    BaseType_t xNetworkInterfaceInitialise( void )
+    {
+    BaseType_t xResult;
+
+        if( xMacInitStatus == eMACInit )
+        {
+                       /* This is the first time this function is called. */
+            if( StartInitMac() != false )
+            {
+                /* Indicate that the MAC initialisation succeeded. */
+                xMacInitStatus = eMACPass;
+            }
+            else
+            {
+                xMacInitStatus = eMACFailed;
+            }
+        }
+
+        if( xMacInitStatus == eMACPass )
+        {
+            xResult = xGetPhyLinkStatus();
+        }
+        else
+        {
+            xResult = pdFAIL;
+        }
+
+       PIC32_MAC_DbgPrint( "xNetworkInterfaceInitialise: %d %d\r\n", ( int ) xMacInitStatus, ( int ) xResult );
+
+        return xResult;
+    }
+
+
+    /*-----------------------------------------------------------*/
+
+    BaseType_t xNetworkInterfaceOutput( NetworkBufferDescriptor_t * const pxDescriptor,
+                                        BaseType_t xReleaseAfterSend )
+    {
+        TCPIP_MAC_RES macRes;
+        TCPIP_MAC_PACKET * pTxPkt;
+
+        BaseType_t retRes = pdFALSE;
+
+
+        if( ( pxDescriptor != 0 ) && ( pxDescriptor->pucEthernetBuffer != 0 ) && ( pxDescriptor->xDataLength != 0 ) )
+        {
+            TCPIP_MAC_PACKET ** ppkt = ( TCPIP_MAC_PACKET ** ) ( pxDescriptor->pucEthernetBuffer - PIC32_BUFFER_PKT_PTR_OSSET );
+            configASSERT( ( ( uint32_t ) ppkt & ( sizeof( uint32_t ) - 1 ) ) == 0 );
+            pTxPkt = *ppkt;
+            configASSERT( pTxPkt != 0 );
+
+            /* prepare the packet for transmission */
+            /* set the correct data length: */
+            configASSERT( pTxPkt->pDSeg->segSize >= pTxPkt->pDSeg->segLen );
+            pTxPkt->pDSeg->segLen = pxDescriptor->xDataLength;
+            pTxPkt->next = 0; /* unlink it */
+            macRes = ( macObject->TCPIP_MAC_PacketTx )( macCliHandle, pTxPkt );
+
+            if( macRes >= 0 )
+            {
+                retRes = pdTRUE;
+                pxDescriptor->pucEthernetBuffer = 0; /* it will be released by the MAC driver once it's transmitted */
+                iptraceNETWORK_INTERFACE_TRANSMIT();
+            }
+
+            /* else same error occurred; this normally should not happen! But the buffer is left in there so it shold be freed! */
+
+            /* The buffer has been sent so can be released. */
+            if( xReleaseAfterSend != pdFALSE )
+            {
+                vReleaseNetworkBufferAndDescriptor( pxDescriptor );
+            }
+        }
+
+        return retRes;
+    }
+
+
+    /************************************* Section: helper functions ************************************************** */
+    /* */
+
+    void PIC32_GetMACAddress( uint8_t macAdd[ 6 ] )
+    {
+        #if defined( __PIC32MZ__ ) || defined( __PIC32MX__ )
+            PLIB_ETH_MACGetAddress( ETH_ID_0, macAdd );
+        #else
+        #error "MAC Address: not supported architecture!"
+        #endif
+    }
+
+
+    /*-----------------------------------------------------------*/
+
+    const void * const PIC32_GetMacConfigData( void )
+    {
+        #if defined( __PIC32MZ__ ) || defined( __PIC32MX__ )
+            extern const TCPIP_MODULE_MAC_PIC32INT_CONFIG tcpipMACPIC32INTInitData;
+
+            return &tcpipMACPIC32INTInitData;
+        #else
+        #error "MAC Address: not supported architecture!"
+        #endif
+    }
+
+    /************************************* Section: worker code ************************************************** */
+    /* */
+
+
+    static bool StartInitMac( void )
+    {
+        TCPIP_MAC_MODULE_CTRL macCtrl;
+        SYS_MODULE_INIT moduleInit;
+        EventBits_t evBits;
+
+
+        /* perform some initialization of all variables so that we can cleanup what failed */
+        /* if something failed, the routine will be called again and again by FreeRTOS! */
+        macHeapHandle = 0;
+        macObjHandle = 0;
+        macCliHandle = 0;
+        macTmrHandle = 0;
+        macTaskHandle = 0;
+        macObject = TCPIP_HOSTS_CONFIGURATION[ 0 ].pMacObject; /* the MAC object we use */
+        macObjStatus = SYS_STATUS_UNINITIALIZED;
+        macLinkStatus = false;
+
+        int netUpFail = 0;
+
+        while( true )
+        {
+            /* start the allocator */
+            macHeapHandle = TCPIP_HEAP_Create( ( const TCPIP_STACK_HEAP_CONFIG * ) &tcpipHeapConfig, 0 );
+
+            if( macHeapHandle == 0 )
+            {
+                netUpFail = 1;
+                break;
+            }
+
+            if( TCPIP_PKT_Initialize( macHeapHandle, 0, 0 ) == false )
+            {
+                netUpFail = 2;
+                break;
+            }
+
+            moduleInit.sys.powerState = SYS_MODULE_POWER_RUN_FULL;
+
+            /* Initialize the MAC. MAC address is defined to 0x000000000000 in
+             * FreeRTOSConfig.h and therefore it will be initialized to the
+             * factory programmed MAC address. */
+            SetMacCtrl( &macCtrl );
+            /* Set the mac address in the FreeRTOS+TCP stack. */
+            FreeRTOS_UpdateMACAddress( macCtrl.ifPhyAddress.v );
+
+            TCPIP_MAC_INIT macInit =
+            {
+                .moduleInit = { moduleInit.value },
+                .macControl = &macCtrl,
+                .moduleData = PIC32_GetMacConfigData(),
+            };
+
+            macObjHandle = ( macObject->TCPIP_MAC_Initialize )( TCPIP_MODULE_MAC_PIC32INT, &macInit.moduleInit );
+
+            if( macObjHandle == SYS_MODULE_OBJ_INVALID )
+            {
+                macObjHandle = 0;
+                netUpFail = 4;
+                break;
+            }
+
+            /* open the MAC */
+            macCliHandle = ( macObject->TCPIP_MAC_Open )( TCPIP_MODULE_MAC_PIC32INT, DRV_IO_INTENT_READWRITE );
+
+            if( macCliHandle == DRV_HANDLE_INVALID )
+            {
+                macCliHandle = 0;
+                netUpFail = 5;
+                break;
+            }
+
+            if( !( macObject->TCPIP_MAC_EventMaskSet )( macCliHandle, ( TCPIP_MAC_EV_RX_DONE | TCPIP_MAC_EV_TX_DONE | TCPIP_MAC_EV_RXTX_ERRORS ), true ) )
+            {
+                netUpFail = 6;
+                break;
+            }
+
+            /* completed the MAC initialization */
+            /* continue the initialization */
+            macTmrHandle = xTimerCreate( PIC32_MAC_TIMER_NAME, PIC32_MAC_TIMER_PERIOD, pdTRUE, 0, MacTmrCallback );
+
+            if( ( macTmrHandle == 0 ) || ( xTimerStart( macTmrHandle, 0 ) != pdPASS ) )
+            {
+                netUpFail = 8;
+                break;
+            }
+
+            /* spawn the PIC32 MAC task function */
+            /* and wait for its event signal */
+            macObjStatus = SYS_STATUS_BUSY;
+
+            if( xTaskCreate( MacHandlerTask, PIC32_MAC_TASK_NAME, PIC32_MAC_TASK_STACK_SIZE, xTaskGetCurrentTaskHandle(), PIC32_MAC_TASK_PRI, &macTaskHandle ) != pdPASS )
+            { /* failed */
+                netUpFail = 9;
+                break;
+            }
+
+            xTaskNotifyWait( PIC32_MAC_EVENT_INIT_DONE, PIC32_MAC_EVENT_INIT_DONE, &evBits, PIC32_MAC_INIT_TIMEOUT );
+
+            if( ( evBits & PIC32_MAC_EVENT_INIT_DONE ) == 0 )
+            { /* timed out */
+                netUpFail = 10;
+                break;
+            }
+
+            if( macObjStatus != SYS_STATUS_READY )
+            { /* failed somehow ??? */
+                netUpFail = 11;
+                break;
+            }
+
+            netUpFail = 0;
+            break;
+        }
+
+        if( netUpFail == 0 )
+        {
+            PIC32_MAC_DbgPrint( " MAC Init success!\r\n" );
+
+            #if ( PIC32_MAC_DEBUG_COMMANDS != 0 )
+                /* create command group */
+                if( !SYS_CMD_ADDGRP( macCmdTbl, sizeof( macCmdTbl ) / sizeof( *macCmdTbl ), "mac", ": mac commands" ) )
+                {
+                    PIC32_MAC_DbgPrint( "Failed to create MAC Commands\r\n" );
+                }
+            #endif /* (PIC32_MAC_DEBUG_COMMANDS != 0) */
+
+            return true;
+        }
+        else
+        {
+            StartInitCleanup();
+            PIC32_MAC_DbgPrint( "MAC Init failed: %d!\r\n", netUpFail );
+
+            return false;
+        }
+    }
+
+    /*-----------------------------------------------------------*/
+
+    static void StartInitCleanup( void )
+    {
+        if( macHeapHandle != 0 )
+        {
+            TCPIP_HEAP_Delete( macHeapHandle );
+            macHeapHandle = 0;
+        }
+
+        if( macObjHandle != 0 )
+        {
+            ( macObject->TCPIP_MAC_Deinitialize )( macObjHandle );
+            macObjHandle = 0;
+        }
+
+        if( macTmrHandle != 0 )
+        {
+            xTimerDelete( macTmrHandle, portMAX_DELAY );
+            macTmrHandle = 0;
+        }
+
+        if( macTaskHandle != 0 )
+        {
+            vTaskDelete( macTaskHandle );
+            macTaskHandle = 0;
+        }
+    }
+
+    /*-----------------------------------------------------------*/
+
+    static void SetMacCtrl( TCPIP_MAC_MODULE_CTRL * pMacCtrl )
+    {
+        TCPIP_MAC_ADDR macAdd;
+        uint8_t unsetMACAddr[ 6 ] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };     /* not set MAC address */
+
+        pMacCtrl->nIfs = 1;
+
+        pMacCtrl->mallocF = TCPIP_HEAP_MallocOutline;
+        pMacCtrl->callocF = TCPIP_HEAP_CallocOutline;
+        pMacCtrl->freeF = TCPIP_HEAP_FreeOutline;
+        pMacCtrl->memH = macHeapHandle;
+
+
+        pMacCtrl->pktAllocF = PIC32_MacPacketAllocate;
+        pMacCtrl->pktFreeF = ( TCPIP_MAC_PKT_FreeF ) _TCPIP_PKT_FREE_FNC;
+        pMacCtrl->pktAckF = ( TCPIP_MAC_PKT_AckF ) _TCPIP_PKT_ACK_FNC;
+
+        pMacCtrl->synchF = MacSyncFunction;
+
+        pMacCtrl->eventF = MAC_EventFunction;
+        pMacCtrl->eventParam = 0;
+
+        pMacCtrl->moduleId = TCPIP_MODULE_MAC_PIC32INT;
+        pMacCtrl->netIx = 0;
+        pMacCtrl->macAction = TCPIP_MAC_ACTION_INIT;
+        pMacCtrl->powerMode = TCPIP_MAC_POWER_FULL;
+
+        macAdd.v[ 0 ] = configMAC_ADDR0;
+        macAdd.v[ 1 ] = configMAC_ADDR1;
+        macAdd.v[ 2 ] = configMAC_ADDR2;
+        macAdd.v[ 3 ] = configMAC_ADDR3;
+        macAdd.v[ 4 ] = configMAC_ADDR4;
+        macAdd.v[ 5 ] = configMAC_ADDR5;
+
+        if( memcmp( macAdd.v, unsetMACAddr, sizeof( unsetMACAddr ) ) == 0 )
+        { /* if unspecified we use the factory pre-programmed address */
+            PIC32_GetMACAddress( pMacCtrl->ifPhyAddress.v );
+        }
+        else
+        { /* use the config suggested one */
+            memcpy( pMacCtrl->ifPhyAddress.v, macAdd.v, sizeof( macAdd ) );
+        }
+    }
+
+    /*-----------------------------------------------------------*/
+
+    static bool MacSyncFunction( void * synchHandle,
+                                 TCPIP_MAC_SYNCH_REQUEST req )
+    {
+        switch( req )
+        {
+            case TCPIP_MAC_SYNCH_REQUEST_OBJ_CREATE:
+                vSemaphoreCreateBinary( *( SemaphoreHandle_t * ) synchHandle );
+
+                return ( *( SemaphoreHandle_t * ) synchHandle == NULL ) ? false : true;
+
+            case TCPIP_MAC_SYNCH_REQUEST_OBJ_DELETE:
+                vSemaphoreDelete( *( SemaphoreHandle_t * ) synchHandle );
+                *( SemaphoreHandle_t * ) synchHandle = NULL;
+
+                return true;
+
+            case TCPIP_MAC_SYNCH_REQUEST_OBJ_LOCK:
+
+                return ( xSemaphoreTake( *( SemaphoreHandle_t * ) synchHandle, portMAX_DELAY ) == pdTRUE ) ? true : false;
+
+            case TCPIP_MAC_SYNCH_REQUEST_OBJ_UNLOCK:
+
+                return ( xSemaphoreGive( *( SemaphoreHandle_t * ) synchHandle ) == pdTRUE ) ? true : false;
+
+            case TCPIP_MAC_SYNCH_REQUEST_CRIT_ENTER:
+                vTaskSuspendAll();
+
+                return true;
+
+            case TCPIP_MAC_SYNCH_REQUEST_CRIT_LEAVE:
+                xTaskResumeAll();
+
+                return true;
+
+            default:
+
+                return false;
+        }
+    }
+
+
+    /*-----------------------------------------------------------*/
+
+    static void MacHandlerTask( void * params )
+    {
+        EventBits_t evBits;
+
+        /* perform the MAC initialization */
+        while( macObjStatus == SYS_STATUS_BUSY )
+        {
+            /* process the underlying MAC module tasks */
+            ( macObject->TCPIP_MAC_Tasks )( macObjHandle );
+
+            SYS_STATUS macStatus = ( macObject->TCPIP_MAC_Status )( macObjHandle );
+
+            if( macStatus == SYS_STATUS_BUSY )
+            { /* still pending */
+                vTaskDelay( PIC32_MAC_TASK_INIT_PENDING_DELAY );
+            }
+            else
+            { /* completed ...somehow */
+                macObjStatus = macStatus;
+
+                xTaskNotify( ( TaskHandle_t ) params, PIC32_MAC_EVENT_INIT_DONE, eSetBits );
+
+                if( macStatus != SYS_STATUS_READY )
+                { /* failed miserably */
+                    vTaskDelete( 0 );
+                }
+
+                /* done, up and running */
+            }
+        }
+
+        while( true )
+        {
+            xTaskNotifyWait( PIC32_MAC_EVENT_TIMEOUT | PIC32_MAC_EVENT_IF_PENDING, PIC32_MAC_EVENT_TIMEOUT | PIC32_MAC_EVENT_IF_PENDING, &evBits, portMAX_DELAY );
+
+            if( ( evBits & PIC32_MAC_EVENT_TIMEOUT ) != 0 )
+            {                                                                       /* timeout occurred... */
+                ( macObject->TCPIP_MAC_Tasks )( macObjHandle );
+                bool linkCurr = ( macObject->TCPIP_MAC_LinkCheck )( macCliHandle ); /* check link status */
+
+                if( macLinkStatus != linkCurr )
+                { /* link status changed; some event could ve fired here if needed */
+                    PIC32_MAC_DbgPrint( " MAC link: %s!\r\n", linkCurr ? "ON" : "OFF" );
+                    macLinkStatus = linkCurr;
+                }
+            }
+
+            if( ( evBits & PIC32_MAC_EVENT_IF_PENDING ) != 0 )
+            { /* IF events signal */
+                TCPIP_MAC_EVENT activeEvents = ( macObject->TCPIP_MAC_EventPendingGet )( macCliHandle );
+
+                if( activeEvents != TCPIP_MAC_EV_NONE )
+                {
+                    /* acknowledge the events */
+                    ( macObject->TCPIP_MAC_EventAcknowledge )( macCliHandle, activeEvents );
+
+                    /* check for RX */
+                    if( ( activeEvents & ( TCPIP_MAC_EV_RX_DONE | TCPIP_MAC_EV_RX_OVFLOW | TCPIP_MAC_EV_RX_BUFNA ) ) != 0 )
+                    { /* RX packets available */
+                        MacRxPackets();
+                    }
+
+                    /* call the driver process function; */
+                    /* PIC32 driver requests it through TCPIP_MAC_ParametersGet() which is bypassed here! */
+                    ( macObject->TCPIP_MAC_Process )( macCliHandle );
+                }
+            }
+
+            /* do what you have to do and then wait for another event... */
+        }
+    }
+
+    /*-----------------------------------------------------------*/
+
+    static void MacTmrCallback( TimerHandle_t xTimer )
+    {
+        xTaskNotify( macTaskHandle, PIC32_MAC_EVENT_TIMEOUT, eSetBits );
+    }
+
+    /* MAC interrupt event function */
+    /* MAC signals an event, probably from within ISR */
+    /* we care just for RX related events */
+    static void MAC_EventFunction( TCPIP_MAC_EVENT event,
+                                   const void * eventParam )
+    {
+        BaseType_t xHigherPriorityTaskWoken;
+
+        if( ( event & ( TCPIP_MAC_EV_RX_DONE | TCPIP_MAC_EV_TX_DONE | TCPIP_MAC_EV_RXTX_ERRORS ) ) != 0 )
+        {
+            xHigherPriorityTaskWoken = pdFALSE;
+            xTaskNotifyFromISR( macTaskHandle, PIC32_MAC_EVENT_IF_PENDING, eSetBits, &xHigherPriorityTaskWoken );
+
+            if( xHigherPriorityTaskWoken )
+            {
+                portEND_SWITCHING_ISR( xHigherPriorityTaskWoken );
+            }
+        }
+    }
+
+    /*-----------------------------------------------------------*/
+
+    BaseType_t xGetPhyLinkStatus( void )
+    {
+        return macLinkStatus == true ? pdPASS : pdFAIL;
+    }
+
+
+    /* receive packets from the MAC driver */
+    static void MacRxPackets( void )
+    {
+        TCPIP_MAC_PACKET * pRxPkt;
+
+        /* get all the new MAC packets */
+        while( ( pRxPkt = ( macObject->TCPIP_MAC_PacketRx )( macCliHandle, 0, 0 ) ) != 0 )
+        {
+            MacProcessRxPacket( pRxPkt );
+        }
+    }
+
+    /*-----------------------------------------------------------*/
+
+    static void MacProcessRxPacket( TCPIP_MAC_PACKET * pRxPkt )
+    {
+        bool pktSuccess, pktLost;
+        size_t pktLength;
+        TCPIP_MAC_DATA_SEGMENT * pSeg;
+        uint8_t * pPktBuff;
+        NetworkBufferDescriptor_t * pxBufferDescriptor;
+        IPStackEvent_t xRxEvent;
+
+        pxBufferDescriptor = 0;
+        pktSuccess = pktLost = false;
+
+        while( true )
+        {
+            pktLength = 0;
+            int nSegs = 0;
+            pSeg = pRxPkt->pDSeg;
+            pPktBuff = pSeg->segLoad;
+
+            /* calculate the packet size */
+            do
+            {
+                pktLength += pSeg->segLen;
+                pSeg = pSeg->next;
+                nSegs++;
+            } while( pSeg != 0 );
+
+            if( nSegs > 1 )
+            { /* no support in FreeRTOS for multi segment packets! */
+                break;
+            }
+
+            /* sizeof(TCPIP_MAC_ETHERNET_HEADER) is subtracted by the driver */
+            /* but FreeRTOS needs the whole frame! */
+            pktLength += sizeof( TCPIP_MAC_ETHERNET_HEADER );
+
+            if( eConsiderFrameForProcessing( pPktBuff ) != eProcessBuffer )
+            {
+                break;
+            }
+
+            /* get the network descriptor (no data buffer) to hold this packet */
+            pxBufferDescriptor = pxGetNetworkBufferWithDescriptor( 0, 0 );
+
+            if( pxBufferDescriptor == 0 )
+            {
+                pktLost = true;
+                break;
+            }
+
+            PIC32_MacAssociate( pRxPkt, pxBufferDescriptor, pktLength );
+
+            xRxEvent.eEventType = eNetworkRxEvent;
+            xRxEvent.pvData = ( void * ) pxBufferDescriptor;
+
+            /* Send the data to the TCP/IP stack */
+            if( xSendEventStructToIPTask( &xRxEvent, 0 ) == pdFALSE )
+            { /* failed */
+                pktLost = true;
+            }
+            else
+            { /* success */
+                pktSuccess = true;
+                iptraceNETWORK_INTERFACE_RECEIVE();
+            }
+
+            break;
+        }
+
+        if( !pktSuccess )
+        { /* smth went wrong; nothing sent to the */
+            if( pxBufferDescriptor != 0 )
+            {
+                pxBufferDescriptor->pucEthernetBuffer = 0;
+                vReleaseNetworkBufferAndDescriptor( pxBufferDescriptor );
+            }
+
+            if( pktLost )
+            {
+                iptraceETHERNET_RX_EVENT_LOST();
+            }
+
+            /* acknowledge the packet to the MAC driver */
+            if( pRxPkt->ackFunc )
+            {
+                ( *pRxPkt->ackFunc )( pRxPkt, pRxPkt->ackParam );
+            }
+            else
+            {
+                PIC32_MacPacketOrphan( pRxPkt );
+            }
+        }
+    }
+
+    #if ( PIC32_MAC_DEBUG_COMMANDS != 0 )
+        /* */
+        static int _Command_MacInfo( SYS_CMD_DEVICE_NODE * pCmdIO,
+                                     int argc,
+                                     char ** argv )
+        {
+            TCPIP_MAC_RES macRes;
+            TCPIP_MAC_RX_STATISTICS rxStatistics;
+            TCPIP_MAC_TX_STATISTICS txStatistics;
+            TCPIP_MAC_STATISTICS_REG_ENTRY regEntries[ 8 ];
+            TCPIP_MAC_STATISTICS_REG_ENTRY * pRegEntry;
+            int jx, hwEntries;
+            char entryName[ sizeof( pRegEntry->registerName ) + 1 ];
+
+            const void * cmdIoParam = pCmdIO->cmdIoParam;
+
+            if( argc != 1 )
+            {
+                ( *pCmdIO->pCmdApi->msg )( cmdIoParam, "Usage: macinfo \r\n" );
+                ( *pCmdIO->pCmdApi->msg )( cmdIoParam, "Ex: macinfo \r\n" );
+
+                return false;
+            }
+
+            ( *pCmdIO->pCmdApi->print )( cmdIoParam, "Interface: %s driver statistics\r\n", macObject->macName );
+            macRes = ( macObject->TCPIP_MAC_StatisticsGet )( macCliHandle, &rxStatistics, &txStatistics );
+
+            if( macRes == TCPIP_MAC_RES_OK )
+            {
+                ( *pCmdIO->pCmdApi->print )( cmdIoParam, "\tnRxOkPackets: %d, nRxPendBuffers: %d, nRxSchedBuffers: %d, ",
+                                             rxStatistics.nRxOkPackets, rxStatistics.nRxPendBuffers, rxStatistics.nRxSchedBuffers );
+                ( *pCmdIO->pCmdApi->print )( cmdIoParam, "nRxErrorPackets: %d, nRxFragmentErrors: %d\r\n", rxStatistics.nRxErrorPackets, rxStatistics.nRxFragmentErrors );
+                ( *pCmdIO->pCmdApi->print )( cmdIoParam, "\tnTxOkPackets: %d, nTxPendBuffers: %d, nTxErrorPackets: %d, nTxQueueFull: %d\r\n",
+                                             txStatistics.nTxOkPackets, txStatistics.nTxPendBuffers, txStatistics.nTxErrorPackets, txStatistics.nTxQueueFull );
+            }
+            else
+            {
+                ( *pCmdIO->pCmdApi->msg )( cmdIoParam, "\tnot supported\r\n" );
+            }
+
+            ( *pCmdIO->pCmdApi->print )( cmdIoParam, "Interface: %s hardware statistics\r\n", macObject->macName );
+            macRes = ( macObject->TCPIP_MAC_RegisterStatisticsGet )( macCliHandle, regEntries, sizeof( regEntries ) / sizeof( *regEntries ), &hwEntries );
+
+            if( macRes == TCPIP_MAC_RES_OK )
+            {
+                entryName[ sizeof( entryName ) - 1 ] = 0;
+
+                for( jx = 0, pRegEntry = regEntries; jx < hwEntries && jx < sizeof( regEntries ) / sizeof( *regEntries ); jx++, pRegEntry++ )
+                {
+                    strncpy( entryName, pRegEntry->registerName, sizeof( entryName ) - 1 );
+                    ( *pCmdIO->pCmdApi->print )( cmdIoParam, "\t%s: 0x%8x\r\n", entryName, pRegEntry->registerValue );
+                }
+            }
+            else
+            {
+                ( *pCmdIO->pCmdApi->msg )( cmdIoParam, "\tnot supported\r\n" );
+            }
+
+            return true;
+        }
+
+        /*-----------------------------------------------------------*/
+
+        static int _Command_NetInfo( SYS_CMD_DEVICE_NODE * pCmdIO,
+                                     int argc,
+                                     char ** argv )
+        {
+            const void * cmdIoParam = pCmdIO->cmdIoParam;
+
+            union
+            {
+                uint32_t ul;
+                uint8_t b[ 4 ];
+            }
+            sUl;
+
+            sUl.ul = FreeRTOS_GetIPAddress();
+
+            bool linkUp = FreeRTOS_IsNetworkUp() == pdTRUE;
+
+            ( *pCmdIO->pCmdApi->print )( cmdIoParam, "IP address: %d.%d.%d.%d\r\n", sUl.b[ 0 ], sUl.b[ 1 ], sUl.b[ 2 ], sUl.b[ 3 ] );
+            ( *pCmdIO->pCmdApi->print )( cmdIoParam, "Link is: %s\r\n", linkUp ? "Up" : "Down" );
+
+            return true;
+        }
+
+#include "aws_application_version.h"
+
+static int _Command_Version(SYS_CMD_DEVICE_NODE* pCmdIO, int argc, char** argv)
+{
+    configPRINTF( ( "App version - maj: %d, min: %d, build: %d\r\n",  xAppFirmwareVersion.u.x.ucMajor, xAppFirmwareVersion.u.x.ucMinor, xAppFirmwareVersion.u.x.usBuild) );
+    return 0;
+}
+
+    #endif /* (PIC32_MAC_DEBUG_COMMANDS != 0) */
+#endif /* #ifdef PIC32_USE_ETHERNET */
index a24cfe8ad7e575f44aa11b55e02047ae5023e77f..fc8335ebea9ee842ffcd0c523eb92beb5f6bee72 100644 (file)
-/*******************************************************************************\r
-*  Network Interface file\r
-*\r
-*  Summary:\r
-*   Network Interface file for FreeRTOS-Plus-TCP stack\r
-*\r
-*  Description:\r
-*   - Interfaces PIC32 to the FreeRTOS TCP/IP stack\r
-*******************************************************************************/\r
-\r
-/*******************************************************************************\r
-*  File Name:  pic32_NetworkInterface.c\r
-*  Copyright 2017 Microchip Technology Incorporated and its subsidiaries.\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\r
-*  of the Software, and to permit persons to whom the Software is furnished to do\r
-*  so, subject to the following conditions:\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,\r
-*  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
-*  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
-*  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r
-*  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r
-*  SOFTWARE\r
-*******************************************************************************/\r
-#ifndef PIC32_USE_ETHERNET\r
-#include <sys/kmem.h>\r
-\r
-#include "FreeRTOS.h"\r
-#include "semphr.h"\r
-#include "event_groups.h"\r
-#include "FreeRTOS_IP.h"\r
-#include "FreeRTOS_IP_Private.h"\r
-\r
-#include "NetworkInterface.h"\r
-#include "NetworkBufferManagement.h"\r
-#include "peripheral/eth/plib_eth.h"\r
-\r
-#include "system_config.h"\r
-#include "system/console/sys_console.h"\r
-#include "system/debug/sys_debug.h"\r
-#include "system/command/sys_command.h"\r
-\r
-#include "driver/ethmac/drv_ethmac.h"\r
-#include "driver/miim/drv_miim.h"\r
-#include "m2m_types.h"\r
-\r
-#include "tcpip/tcpip.h"\r
-#include "tcpip/src/tcpip_private.h"\r
-#include "tcpip/src/link_list.h"\r
-#include "wilc1000_task.h"\r
-\r
-#include "NetworkConfig.h"\r
-\r
-\r
-    #include "iot_wifi.h"\r
-\r
-    /* local definitions and data */\r
-\r
-\r
-    /* FreeRTOS implementation functions */\r
-    BaseType_t xNetworkInterfaceInitialise( void )\r
-    {\r
-        WIFINetworkParams_t xNetworkParams;\r
-\r
-        xNetworkParams.pcSSID = clientcredentialWIFI_SSID;\r
-        xNetworkParams.ucSSIDLength = sizeof( clientcredentialWIFI_SSID );\r
-        xNetworkParams.pcPassword = clientcredentialWIFI_PASSWORD;\r
-        xNetworkParams.ucPasswordLength = sizeof( clientcredentialWIFI_PASSWORD );\r
-        xNetworkParams.xSecurity = clientcredentialWIFI_SECURITY;\r
-        xNetworkParams.cChannel = M2M_WIFI_CH_ALL; /* Scan all channels (255) */\r
-\r
-        /*Turn  WiFi ON */\r
-        if( WIFI_On() != eWiFiSuccess )\r
-        {\r
-            return pdFAIL;\r
-        }\r
-\r
-        /* Connect to the AP */\r
-        if( WIFI_ConnectAP( &xNetworkParams ) != eWiFiSuccess )\r
-        {\r
-            return pdFAIL;\r
-        }\r
-\r
-        return pdPASS;\r
-    }\r
-\r
-\r
-    /*-----------------------------------------------------------*/\r
-\r
-    BaseType_t xNetworkInterfaceOutput( NetworkBufferDescriptor_t * const pxDescriptor,\r
-                                        BaseType_t xReleaseAfterSend )\r
-    {\r
-        BaseType_t retRes = pdFALSE;\r
-\r
-        if( ( pxDescriptor != 0 ) && ( pxDescriptor->pucEthernetBuffer != 0 ) && ( pxDescriptor->xDataLength != 0 ) )\r
-        {\r
-            /* There you go */\r
-            if( WDRV_EXT_DataSend( pxDescriptor->xDataLength, pxDescriptor->pucEthernetBuffer ) == 0 )\r
-            {\r
-                retRes = pdTRUE;\r
-            }\r
-\r
-            /* The buffer has been sent so can be released. */\r
-            if( xReleaseAfterSend != pdFALSE )\r
-            {\r
-                vReleaseNetworkBufferAndDescriptor( pxDescriptor );\r
-            }\r
-        }\r
-\r
-        return retRes;\r
-    }\r
-\r
-\r
-    /************************************* Section: helper functions ************************************************** */\r
-    /* */\r
-\r
-\r
-\r
-    /************************************* Section: worker code ************************************************** */\r
-    /* */\r
-\r
-    void xNetworkFrameReceived( uint32_t len,\r
-                                uint8_t const * const frame )\r
-    {\r
-        bool pktSuccess, pktLost;\r
-        NetworkBufferDescriptor_t * pxNetworkBuffer = NULL;\r
-        IPStackEvent_t xRxEvent = { eNetworkRxEvent, NULL };\r
-\r
-        pktSuccess = pktLost = false;\r
-\r
-        while( true )\r
-        {\r
-            if( eConsiderFrameForProcessing( frame ) != eProcessBuffer )\r
-            {\r
-                break;\r
-            }\r
-\r
-            /* get the network descriptor (no data buffer) to hold this packet */\r
-            pxNetworkBuffer = pxGetNetworkBufferWithDescriptor( len, 0 );\r
-\r
-            if( pxNetworkBuffer == NULL )\r
-            {\r
-                pktLost = true;\r
-                break;\r
-            }\r
-\r
-            /* Set the actual packet length, in case a larger buffer was \r
-            returned. */\r
-            pxNetworkBuffer->xDataLength = len;\r
-            \r
-            /* Copy the packet. */\r
-            memcpy( pxNetworkBuffer->pucEthernetBuffer, frame, len );\r
-\r
-            /* Send the data to the TCP/IP stack. */\r
-            xRxEvent.pvData = ( void * ) pxNetworkBuffer;\r
-\r
-            if( xSendEventStructToIPTask( &xRxEvent, 0 ) == pdFALSE )\r
-            { /* failed */\r
-                pktLost = true;\r
-            }\r
-            else\r
-            { /* success */\r
-                pktSuccess = true;\r
-                iptraceNETWORK_INTERFACE_RECEIVE();\r
-            }\r
-\r
-            break;\r
-        }\r
-\r
-        if( !pktSuccess )\r
-        { /* smth went wrong; nothing sent to the */\r
-            if( pxNetworkBuffer != NULL )\r
-            {\r
-                pxNetworkBuffer->pucEthernetBuffer = 0;\r
-                vReleaseNetworkBufferAndDescriptor( pxNetworkBuffer );\r
-            }\r
-\r
-            if( pktLost )\r
-            {\r
-                iptraceETHERNET_RX_EVENT_LOST();\r
-            }\r
-        }\r
-    }\r
-\r
-#endif /* #ifndef PIC32_USE_ETHERNET */\r
+/*******************************************************************************
+*  Network Interface file
+*
+*  Summary:
+*   Network Interface file for FreeRTOS-Plus-TCP stack
+*
+*  Description:
+*   - Interfaces PIC32 to the FreeRTOS TCP/IP stack
+*******************************************************************************/
+
+/*******************************************************************************
+*  File Name:  pic32_NetworkInterface.c
+*  Copyright 2017 Microchip Technology Incorporated and its subsidiaries.
+*
+*  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
+*******************************************************************************/
+#ifndef PIC32_USE_ETHERNET
+#include <sys/kmem.h>
+
+#include "FreeRTOS.h"
+#include "semphr.h"
+#include "event_groups.h"
+#include "FreeRTOS_IP.h"
+#include "FreeRTOS_IP_Private.h"
+
+#include "NetworkInterface.h"
+#include "NetworkBufferManagement.h"
+#include "peripheral/eth/plib_eth.h"
+
+#include "system_config.h"
+#include "system/console/sys_console.h"
+#include "system/debug/sys_debug.h"
+#include "system/command/sys_command.h"
+
+#include "driver/ethmac/drv_ethmac.h"
+#include "driver/miim/drv_miim.h"
+#include "m2m_types.h"
+
+#include "tcpip/tcpip.h"
+#include "tcpip/src/tcpip_private.h"
+#include "tcpip/src/link_list.h"
+#include "wilc1000_task.h"
+
+#include "NetworkConfig.h"
+
+
+    #include "iot_wifi.h"
+
+    /* local definitions and data */
+
+
+    /* FreeRTOS implementation functions */
+    BaseType_t xNetworkInterfaceInitialise( void )
+    {
+        WIFINetworkParams_t xNetworkParams;
+
+        xNetworkParams.pcSSID = clientcredentialWIFI_SSID;
+        xNetworkParams.ucSSIDLength = sizeof( clientcredentialWIFI_SSID );
+        xNetworkParams.pcPassword = clientcredentialWIFI_PASSWORD;
+        xNetworkParams.ucPasswordLength = sizeof( clientcredentialWIFI_PASSWORD );
+        xNetworkParams.xSecurity = clientcredentialWIFI_SECURITY;
+        xNetworkParams.cChannel = M2M_WIFI_CH_ALL; /* Scan all channels (255) */
+
+        /*Turn  WiFi ON */
+        if( WIFI_On() != eWiFiSuccess )
+        {
+            return pdFAIL;
+        }
+
+        /* Connect to the AP */
+        if( WIFI_ConnectAP( &xNetworkParams ) != eWiFiSuccess )
+        {
+            return pdFAIL;
+        }
+
+        return pdPASS;
+    }
+
+
+    /*-----------------------------------------------------------*/
+
+    BaseType_t xNetworkInterfaceOutput( NetworkBufferDescriptor_t * const pxDescriptor,
+                                        BaseType_t xReleaseAfterSend )
+    {
+        BaseType_t retRes = pdFALSE;
+
+        if( ( pxDescriptor != 0 ) && ( pxDescriptor->pucEthernetBuffer != 0 ) && ( pxDescriptor->xDataLength != 0 ) )
+        {
+            /* There you go */
+            if( WDRV_EXT_DataSend( pxDescriptor->xDataLength, pxDescriptor->pucEthernetBuffer ) == 0 )
+            {
+                retRes = pdTRUE;
+            }
+
+            /* The buffer has been sent so can be released. */
+            if( xReleaseAfterSend != pdFALSE )
+            {
+                vReleaseNetworkBufferAndDescriptor( pxDescriptor );
+            }
+        }
+
+        return retRes;
+    }
+
+
+    /************************************* Section: helper functions ************************************************** */
+    /* */
+
+
+
+    /************************************* Section: worker code ************************************************** */
+    /* */
+
+    void xNetworkFrameReceived( uint32_t len,
+                                uint8_t const * const frame )
+    {
+        bool pktSuccess, pktLost;
+        NetworkBufferDescriptor_t * pxNetworkBuffer = NULL;
+        IPStackEvent_t xRxEvent = { eNetworkRxEvent, NULL };
+
+        pktSuccess = pktLost = false;
+
+        while( true )
+        {
+            if( eConsiderFrameForProcessing( frame ) != eProcessBuffer )
+            {
+                break;
+            }
+
+            /* get the network descriptor (no data buffer) to hold this packet */
+            pxNetworkBuffer = pxGetNetworkBufferWithDescriptor( len, 0 );
+
+            if( pxNetworkBuffer == NULL )
+            {
+                pktLost = true;
+                break;
+            }
+
+            /* Set the actual packet length, in case a larger buffer was 
+            returned. */
+            pxNetworkBuffer->xDataLength = len;
+            
+            /* Copy the packet. */
+            memcpy( pxNetworkBuffer->pucEthernetBuffer, frame, len );
+
+            /* Send the data to the TCP/IP stack. */
+            xRxEvent.pvData = ( void * ) pxNetworkBuffer;
+
+            if( xSendEventStructToIPTask( &xRxEvent, 0 ) == pdFALSE )
+            { /* failed */
+                pktLost = true;
+            }
+            else
+            { /* success */
+                pktSuccess = true;
+                iptraceNETWORK_INTERFACE_RECEIVE();
+            }
+
+            break;
+        }
+
+        if( !pktSuccess )
+        { /* smth went wrong; nothing sent to the */
+            if( pxNetworkBuffer != NULL )
+            {
+                pxNetworkBuffer->pucEthernetBuffer = 0;
+                vReleaseNetworkBufferAndDescriptor( pxNetworkBuffer );
+            }
+
+            if( pktLost )
+            {
+                iptraceETHERNET_RX_EVENT_LOST();
+            }
+        }
+    }
+
+#endif /* #ifndef PIC32_USE_ETHERNET */
index a90fb9e171bb59d60adf786ae8975f4a17555c6c..65e5e2b19df14a312fc0c1701dcea72c804bf0fb 100644 (file)
@@ -1,18 +1,18 @@
-Contains the files that implement FreeRTOS+TCP.\r
-\r
-User documentation, including an API reference is available on:\r
-http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/\r
-\r
-A description of the source code organisation is available on:\r
-http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/TCP_Networking_Tutorial.html\r
-\r
-The porting guide is available on:\r
-http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/FreeRTOS_TCP_Porting.html\r
-\r
-License information is available on:\r
-http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/FreeRTOS_Plus_TCP_License.html\r
-\r
-At this time it is recommended to use BufferAllocation_2.c in which case it is\r
-essential to use the heap_4.c memory allocation scheme:\r
-http://www.FreeRTOS.org/a00111.html\r
-\r
+Contains the files that implement FreeRTOS+TCP.
+
+User documentation, including an API reference is available on:
+http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/
+
+A description of the source code organisation is available on:
+http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/TCP_Networking_Tutorial.html
+
+The porting guide is available on:
+http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/FreeRTOS_TCP_Porting.html
+
+License information is available on:
+http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/FreeRTOS_Plus_TCP_License.html
+
+At this time it is recommended to use BufferAllocation_2.c in which case it is
+essential to use the heap_4.c memory allocation scheme:
+http://www.FreeRTOS.org/a00111.html
+
index 3dd136cf784dcfd3571a785b7f1e3086c74028e1..1e12d0e7fd369f1ba38fb9e1ec90cf6357fee244 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 7aaffb5686f5ff50904a72b3b5dd79c579114fd2..d917e5f773ae2384fab17846acdfe2bd6be6ab2e 100644 (file)
@@ -1,6 +1,6 @@
 #/*\r
-# * FreeRTOS Kernel V10.2.1\r
-# * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+# * FreeRTOS Kernel V10.3.0\r
+# * Copyright (C) 2020 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
index 4442610e4b432e8cd1f3aad25a49f5f877e248b4..bf6021e2ffd324c65809b7dbeea4b1c48ada5240 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 1076e1a7642d5526e6dbfb5a533f3a6f226d1b71..3c2fe4c120b6f5fd712462ca6e989bb8794d1ba9 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 91107d42ab55849ea9cf8332bfe57d94acc2316d..bb21ef22405467d47f0d6d5afc92c38839991bf8 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 058a04b8f7965045563dfc601af5020cf002c796..2839764fbe31079f307bdb702ef1af622bbd666c 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index b6642e016834f03d662d9c6a87be5943a1b7a92c..da35db510f118f36188417f7ea6882c4f9a7ceac 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index cf103f189e806c9cae9bcfe64154f111712e5319..5ede834b112a9a6d634917ea4b69434b3458052f 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 1d2b789bb77692e5b5bdc6dbae1114b091cd4d59..8d910b0ac7e12ac007c601ecc62cc08c2327eb6f 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index b9a7e05b5bdedfd7321594777620f0aab42837b5..a812c89615a6d6de7246b3a0f58a37b88f45708b 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e6c5bacf9357b43bcc2b1d10cf6f9bfe7190b7a8..5583515656713fa1d2b8e23d831d23e5a7ad5127 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 35d28db71577eb3ad7c47828bac7b83fe92ef046..fadccd8a3a70c7d33a8c54fe820edbb26ec60bf1 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index ff876820cd2b0ce92cf624756bc2a48d7934e6d3..c76f711fffadf13d2c22e4e1de1832f83cebeb99 100644 (file)
@@ -1,6 +1,6 @@
 #/*\r
-# * FreeRTOS Kernel V10.2.1\r
-# * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+# * FreeRTOS Kernel V10.3.0\r
+# * Copyright (C) 2020 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
index 0f735878aede5435dbb5fabeaa73e4bdf5409a07..6f12833c91ee8d6140def628a70b69c62ec36359 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 677e5586e008b2a50db4ed805fca21f79672a379..c24f02f1f523a6ef687d7b6db08dcb6a7f7bba3d 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 6e7de78fda50146106b839118ab93fb614a5ce62..a47a67a5b71299afb0e00809bb510b50b4e72737 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 446d7def1156cbd5197d0932a8d005162dd86045..ab6c444ee4fabd1cd8a53c9946a7f771afe2bc06 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 1e302cbadfdb8ab970aac259f6aad802e673a17c..3ed8e6a3e9e300ef359713e0d87f0cb6c1a26046 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index b2ab22ab49abfae34b653b59bcd246f7906825da..6822e2ca0c981bda80ffd730c184d9d6dad7aed4 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 846aac7de1cca00a5c7cb04116f421fb78e8a994..8a59ce9ef281da672190cd4f36db8ee58598631f 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index dd26bdb4827accdd199bb0886b004d93b29fd80e..625be05309dec22bb67bf3ea03f7bf69758b6d5d 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index b61c801cf212a13f7928a04b155012c8db963900..c373bb04b9462704d5dc0134e86489053299cc12 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 2cea246bff75cb945df5828d02141db05bad99ca..a5be9aa36a8475912bdff5969369a50b851c74dd 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 39e9f513f23969477e4fcf2b64fd16a4c619e01f..e09f97f5f0b22be0e985660045b99a86276e5da8 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d415c8a529559dd5fced370e26dbc32340cfbeb0..16bc3f0b57783da2f39e3087308817ac5cd064c0 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 498d4b2a038b948fc0d1a1ba9640a193f07919df..633cc508bcf5cf213fb2f8480d5c7008c45629a4 100644 (file)
@@ -1,6 +1,6 @@
 ;/*\r
-; * FreeRTOS Kernel V10.2.1\r
-; * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+; * FreeRTOS Kernel V10.3.0\r
+; * Copyright (C) 2020 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
index 6840d1f34482b7c0d829937ccff8b2e5e0d5c166..a76c1d8d376e853312d44d4aceaa56b5da9a2a50 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 399a6c9ec60beffd637c5173e9cd243f087b76c7..07c21ac5fba35ccb096bc0c67dc6cae0de1990ee 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index bd81c823d7dd33ecad76ec3d148f8a22df886d1b..10c8588c4069e1da3059672b2a00ea95b499628b 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 88d231bd236e5709557352d3c76a94d551b3b2a4..fd08317992d29329cd89c7fdd3b880863f6e9971 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 171e1b0d2a6754c48a3a408c8aaa9c64588ff9ff..7a96d3720234d8176d23ec91940292eca2b96429 100644 (file)
@@ -1,6 +1,6 @@
 #/*\r
-# * FreeRTOS Kernel V10.2.1\r
-# * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+# * FreeRTOS Kernel V10.3.0\r
+# * Copyright (C) 2020 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
index 4a2ae0335ee33b3b8e71ed10f967528bf9bbb69e..e644737b4d3eae35265c23bf82ade0461f5f8d93 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index b52d1dfe2191d76be848f0d37a261bba529c17f8..6f3f59bf23c12100ec093a2d006148a9c14a1405 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 668c0b4424cd3f341e8e95890a6f4ac75a5a17f2..8fa61d48685208c36a0abc867bc688be7d3696e0 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 9caacc9311f7ca71cd34340619083067c2840186..a9b8afa5639c7cc0fd50d80a7ba80fe2afc516ad 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 4a2ae0335ee33b3b8e71ed10f967528bf9bbb69e..e644737b4d3eae35265c23bf82ade0461f5f8d93 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 3722305a15eac36f87c5499a16040eb887661a7b..68208df5f3e051c3fc3746135e10438762c2228e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 2d18844d5714f9a16226f450d8385eb1affc1743..d3ac6ec1d7e7f62264a813911c16928a63f42b61 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 18e07dcde2ebb660dfdfadfd959cb83bb4bc9a5d..686a0eee87ceb0c220b58b09725245ad23a06f04 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 5c5dc5058eec620cd8ca58241666f50f98880fcd..ac4be779cc02cf9c173ef9f5e2039bf669f32e3a 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 3f2997f1b744a4628c47c1d4a78b1a8b5803b9b3..8c007de6a0dcb8494491d910defb09af4d789ea6 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 3c35f6bcc8edee625bb6997e48c25c21d4d8ee57..709f6c362c2eeded9e039399759a80f510481705 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 0a40a137a1a6541120458888e9fb89960e91c3f1..1453dbf26687830dc3ae118bd145d8668ca167ec 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 3d66bc43a4edc7174e603ca99d326bdb81e3670d..4917784d463aa46753ffc2f5148bcadd08e32d96 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 632ba4e2a31211ea1c3e08823808cd8ddf3d5a35..bef019759feb44b42786855f4b7007204bcd377d 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d67266666ae779517fa0997c9fc33544c8b5b9dc..5df501471efe533d2dff715ba4b1210d7b742cff 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 32255892a332277b34a3924b1d074cdf2be5a955..845557e4e5ce273cf4c26c62cea6109d24bd9304 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 48bf36029ac1cd5da565eeeaded3bf9c1c75cde2..3e5cfd22ccf70bab8d80306785ce7b61cfa3298f 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 3d66bc43a4edc7174e603ca99d326bdb81e3670d..4917784d463aa46753ffc2f5148bcadd08e32d96 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 33e374b4392d26518e07e0f64a26b759ed465870..cdadc8bedec91bb93983703268236cba3c03e192 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 3ffb5904f40d430565a0178fd6baffb4103060ad..72ea37d563ec50cfce3632bf4a0a9675f3ae5532 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index ec561c5d70c6aa73462ccdb6d20f1e5dc42941f4..da70eac0f710c01de339f7c1e2ae6b86a9fff0e4 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index edb0a5cf696719fee1c47af65e2eba88a20df09c..acab516e30adcb148b73f1426ab7fcb1d320be5b 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index a75c88af4d9e3b7cfac4ad8563f21400eb4bca1a..bde81a654b3418db492416f5f4657ea61929f645 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index bb92a6d0207e72be91cae4a27aade774569fc412..21c7d6e629be0bd464b5ccfed2b3f690f0f3c1c2 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 62bc843686456a6db352468e0a01f4a581d7d002..ce1594a484b91f8be9c9696c85d26de9bc8d591e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 6c64f41b523d435d6595ede8754093949429663f..519cf48c2ee19081c0981593663461f63448f025 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 8e5fdc1bf74b71dd1131ff4a1f61df1ce9983687..513a5a75ccd869bc852861cd46c7ebfa685702bc 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e5877573362ed2b2d26ed26b2eea57b91c06f7b9..29b69aac0101fbae861080491e39196fad710a8b 100644 (file)
@@ -1,7 +1,7 @@
 \r
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 18ebbc9fa015d69ca05201f1af6442b3e6ea6c44..d0544b4452d83e9b6b725feb63a7b508d2b5c870 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 59a05c0e5c58d9f03e11e99e29bf79abd72204d9..62ec72a4f137731e8cc455c2c68ceb9064b4d61d 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 43cf40e9e699f43159849c2ae3eefe9e85017d02..3bd0c7930b0b0c55d266674aaa993a97489def8a 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 3753ac8f96618340575ad8cd61f7a6f3ed607a3d..a13a45f779480340cd66ec000156456f40c1241b 100644 (file)
@@ -30,8 +30,8 @@
  *****************************************************************************/\r
 \r
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c900b23e3726ebd82d1295ac0c7606a35178c1b1..096e2690aa63e8f1356170ed3b4b0e28578c8106 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 533c30fafa3df8207ac4675d1fc38bc00d9c8d6f..eb9f3f5b54912fcf91b0e887eaee911806969199 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d9938680d9c01915fb911d2bf65967787663df27..c628dc5e6a27da44aade3d46a2d1a33e5679da5a 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 50da17cd99c45970c8c4e071652caab8f46dd376..c4f3be26a103089af3ddbccc8587fea94a536007 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 8643e3ea50bb2aff8801d190695e2f9e3f1486c1..902ad87a968fa4ec19b4edfe57ce886c80694865 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 64905bac50e4e0719016ea1663979d7397e522eb..21e7d3293002199923a0eaf27f9c0932e38425f0 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 05bc9c07769f5167025aff9063e9e1e27a114e07..75264f83964020c8461a82ebbd26fdc60a6b4535 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 6282788cd9fdec4edd1e07fe8d6beab7b145dc08..d9f2a8277e63a49e64e9e20b40b22d38877c0eac 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index befcc008628fff77b49f40d823ebf2e0d6ee8215..b8f9f6f7a59ea18d1c9f49930dd442a7c5e06d4f 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 268f69b450bf43822043f2278627403382397719..da34b924b6d0b93e1da4c0ebf827a64048767d61 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 8643e3ea50bb2aff8801d190695e2f9e3f1486c1..902ad87a968fa4ec19b4edfe57ce886c80694865 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d1d57a7e7e6cb224f2b3df380f3246f5f945654a..65b6ef6b40dd18a730a83ec89a00448bb3405c1d 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 46f7efd1b4bb6806b8b3d1bb274bffcdee54cc53..a2e8a8365e55b3290bd960478958fa905d0c66bd 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d1c406ca73376f3b0f02ef078aec029d738e0a51..ccc7bc3b7f6add5b8c5b4ff4797e5d6a8ed83c61 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e0194876ec188aa0ddfd415e40ce8dd4d2224e05..48305bdb72e85b2f3a1933fb5a806814325d4b9d 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 248e1355e11ebc6a1ad21c700c6802fc46c01616..bd5b5c0c23272909dea1d63e742c7807c7d30048 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 88506a4e1af64d108af46330db770d18c22c6727..f3cbf65319450dc9ac9eea4f52371d7da776fd72 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e615f32513ba497fb0ce688d58521ba33f360da9..cb5afcfdb68ce8c7f4a1ac89953193ef1c56858c 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d1c406ca73376f3b0f02ef078aec029d738e0a51..ccc7bc3b7f6add5b8c5b4ff4797e5d6a8ed83c61 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 5e4ca97f2e86ca82de1f7769c8c521c8b6db1d32..7bf649f81d051a3e370944f970ebe2c9c8797fcf 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 716fd8f3896537e3f9640eb0dc6df74c4d05ac0f..903de81be7c6044e73377d74a9cc9909c0fc5102 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index a998a33cd1f942044dcbb8a6de87c9c041888d33..1b6db0e3338e8c9c17b3bad3f18eb679ff5e699d 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 0d472963dfeb86753d4955571e27732722bfa8c2..4f4f551c53714aeaec284c7d14b933de96fff0c3 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 9174cdd7aabe4f049dbe13cb2c48c8804da1ba7a..fe5ae2a62686524b223aab4332b0889da5486c94 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index cc3f0f69574800f1d977ab60d964bce9d19a11ac..84e9e3008810dc70ecdbbd985943eb99961a8cd9 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 0faa2a4b87b56db5e359bdac22b30c9e6ef6f3f8..d0fbc404335abb162d4a92b3a0d9aa339f6c1c26 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c42b95499b2428f5fd250891a01e59ea0a9f5505..349ae52d7b1118e037fffcf9c5a4f1af55a4f228 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 250cbc4949fb937c6b1a77a70d4d13dc44b0d06b..1b27469e715b213cce248c3bc3e86eb051341a17 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 1d3c41e9f85251cc8e951499d4d5b4c7a8d60573..102a6d39cfb1ed9c769ce8c2c827128e792d7364 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 6bb268d96571aa67dbaf0aa6b33d827a210d57d8..e585fad573233953d6f7db66caffeeb66be73fda 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 104d61aff2baedc4433b87f7738ac124987bbe8a..276560d841230a2ee6651f25f1626968afac9396 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 6a06132f22aed78f75241c3d0afd30d36e013919..c8bb6a387743a008fd9bc6888e3c9918c009aa46 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 39f8da057c1834c6533d55dd6d9b8df0dc5864a0..aa5b1dfb53684a9a7dc4691f47d07f30275e7479 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c42b95499b2428f5fd250891a01e59ea0a9f5505..349ae52d7b1118e037fffcf9c5a4f1af55a4f228 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 5575945a5caa9de286ec02849af5a96c7860d036..442dc4ce674c81c2057ec1dee954fc3b9007140c 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 267c029a8a6e31441122712f0c36fe33269dad01..974bbc200a81826eb17c3186c4a9054381e8b408 100644 (file)
@@ -1,6 +1,6 @@
 ;/*\r
-; * FreeRTOS Kernel V10.2.1\r
-; * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+; * FreeRTOS Kernel V10.3.0\r
+; * Copyright (C) 2020 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
index ea0c5c9c55d5163d2c0f04ebe1346048ec282fa0..561e5380b9dcc849bee45ca929fda563442f1a16 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d4ffdd76689a8bbf7f1284d33d04c85c03ddcc65..e4cc724a941895df31e7e032491e2df7d39176d2 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 4fc9c835b90748cb5e7bbee58ce3fac4c55053c7..da81f12e32034a6bc650e010d49cd00aa0b0a888 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 19f19f951de3bc5180e1a4d1cf44f4e48accb5dd..fc7c413361460f3aea4f55bc06a86d007326db35 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 094f7308410bad0d78d58d715612ce225369f309..c22f09b9bae929305fe81a67084b4171b26cdb25 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 4d16e49f1db093be4404367653a0bc504afa9f48..1721e0aac9fba19fb70ac359f0134a18e696978c 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f859a0f5b831be620fee05ed6f90f60dd476d576..228a801540b833691a74fa84b5450fa27c460016 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c42b95499b2428f5fd250891a01e59ea0a9f5505..349ae52d7b1118e037fffcf9c5a4f1af55a4f228 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 3cdd2164e04ad28a0432493167d660a2cf3b949f..8d0786709a3ab3b4ee6470907f04c961ffe429b8 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 267c029a8a6e31441122712f0c36fe33269dad01..974bbc200a81826eb17c3186c4a9054381e8b408 100644 (file)
@@ -1,6 +1,6 @@
 ;/*\r
-; * FreeRTOS Kernel V10.2.1\r
-; * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+; * FreeRTOS Kernel V10.3.0\r
+; * Copyright (C) 2020 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
index 47eeb3f21f24d1d46d0b92d67516583fb7183ab1..66112d80e04bf159e0a7c0b2c66dcfc9fb9a18a4 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 2e8c801434061ae898a5cbb55ebfbdb934664c45..34b7f2b92cac235d8eb2b49af3a2225d762385be 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index ab7ac6e8611d86447a58fce2cc36838a5fa525a6..9b12ef46d2d2e2ac5c28c1f5191576976ce3acd0 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 2e8c801434061ae898a5cbb55ebfbdb934664c45..34b7f2b92cac235d8eb2b49af3a2225d762385be 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c0bfa4d3422e2f5cf739a0bcada4977be17bdc06..4d15a8651a10949d14e7fbae87a8849b00969d92 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 18d59aa049ee24584f9d9f4d4c2ed0b9ca2dfdb0..46938154f1103782b4e07df88a0e1b60f04659ff 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 9fe550d0cbc55d9c8823a57403457bd18d425172..7a8afdda3ae8b536d5f184c385bb6c15d154baf2 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 0e0e5d3be027fcaa3af94d301cccfc9d704654e0..f5bef15f6946095991df019787765281fd977f1d 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c42b95499b2428f5fd250891a01e59ea0a9f5505..349ae52d7b1118e037fffcf9c5a4f1af55a4f228 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 0f79ecf186cff0b12ea4f04dc2633cd3eda41fa9..362a6530fce179af441185be31f497575bc571e2 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index a55e0fdda6c5e70a5b2092ad1c738a8b0dfc6270..c3a5ec25a7c12c545981646036246f97a301c122 100644 (file)
@@ -1,6 +1,6 @@
 ;/*\r
-; * FreeRTOS Kernel V10.2.1\r
-; * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+; * FreeRTOS Kernel V10.3.0\r
+; * Copyright (C) 2020 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
index 47eeb3f21f24d1d46d0b92d67516583fb7183ab1..66112d80e04bf159e0a7c0b2c66dcfc9fb9a18a4 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index ae782a72de65ae4d7157a3899eb0e66fe3f91efc..5696c2ee925d6c35f5e764f6ea98e45e4792ee15 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c58d6280f4bc302f219ac7d9cd4f2075ffc9c972..44bcb2eb41492a812a952e2c13ddd53817f82178 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 92516572f8609ed7cfd9b0d13d54ea82d8ef5a23..5dcb1c35700c9c65cea255645a97921b90c947d7 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d9bc4166364378926b0a787364495b463c5d6ed2..29fec5f9c035bb477d7a0e660ac28ab9e4ca0d87 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 462dbc43c87b55476b9f298304a36099b39bba3c..aec22a2032ae9c9b72c3007ae785d39412148ad3 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 692770d9b1e257d5c75b87263d79c8cf46ec476e..3f8a52fd465adecd6e423ae0c2974a66a42d518b 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d84d4771e367252975bd75a379ad6f1a0300b3d6..75da22d44292e6516bc17dd1b89ff8430b74c2c4 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 58e3e571313eca3463927be3f25a0d7984c5943e..dc5d8c2b20f40b7ab3f74eebb18483a474a0de88 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index dcc12bcd52a2498c66a0dffdad149a6916ea389a..a24c287d4f82d9f9480c5c284f4b019d9974c29e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 1f530b99455b15f14b76385c7d99740350ef9b84..7777aaa9fa92642005586d520cbd695a02b67a60 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 60aab2e9a6839378ffdade6695fd260e4cf06db7..453eb36002bff0a42ef92d055d6452ddb28137dc 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 0c03b560c834d785af29f4caa08042387e7ef039..4291f13824d4b4667b7863462ca3b78a69e21014 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d26057f9a6dff07dfb1cd8bc23d07eeee199a3e7..6d56a462f18157c5cd669ad2ea6aa7f0d6e25f70 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 3200bf6a64a795cd1d56a669b84047f4f33eeb87..21e5509cf207f018d21b18466b8687afdb7f7ac3 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d84d4771e367252975bd75a379ad6f1a0300b3d6..75da22d44292e6516bc17dd1b89ff8430b74c2c4 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 5624e45d0210c7fb21d2312f4c765a8464866348..9fb09f049b54eebefa61ab37daf9e807b7895fa5 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index ccf04e953df0b81088d0f67ea1a6ef78dd2baeca..04a81eb2c21ee3ec807aedb78a547c871aba95e7 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 37d3e82ab5a54fa430565b7c336821bc07bf5b01..8789767f153d5fc169bda30772b33fc8909916cc 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 41482df23f604f686ce12b08697376b2ae2e5557..0cf50683fe061ffb1130e321f9818d318874916b 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index fc00d94ca9ed5bdd13d6b481a8a069aa7852ef67..4bb4aec7d9cfd9bfdbbaba1897cdc57c4fa3e9b5 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 21737798f6fb5627ec0ca9cb683b3a740036521b..3276bf08ecca3b76c5a35c07541fdd022586805e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 7903326e163e0f795a18b831ecf649aa12fb048d..5aeeb12a43595cb237c36397698c36266c24c024 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 913a4653b9ad28396a9ee04f161826a5a5571e38..b14f41f4839cbb8ec7b3129ca7d3b3470b762843 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index daa0563c4d9672ad9df56021fefa521ee7f9c05a..8d406e5550210a1896a797bedad9686f685ef140 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c9ffe4354377b566c7768c1611d7a66879d9e853..1c14fccadc7d3f6ca273dadb433ef226afd7de1a 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 1aa62a4674fb8e6a5b6037d6910348b5f0af7ed4..625773f4a335dbcb92580b4853904a1273507119 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 7a00fac7886b3402e1322c774fde534621f62315..76009ed76f7f89846a9e3faca8125699d735ec14 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 91875e568088f213329fbc6d2c44d447e472e406..ec8a2411d57c2c96ec665f42778a65d29dabd8c5 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 9c4fbcd18bcd3f625d977b284a87fba9f9d151c6..173184b055d99969db57e0e0b8f51f4139394073 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 97dce01fd9e1cfab10244d69b15d274af0b3ef0d..0bce0ef72a50f7ebd3d19191679e2d7a13147ed9 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index b046c986867a0d5771b5c52b2a5b3afb53946fb0..a5322f5c57de2f9eae744a352a99ce15aa23f5d1 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 72bad178fcd021da1f51c4e26e83b87583eec96d..98d0c86822c31d2ecb73a489f558ee06f3233fd3 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f861d7dff7f5d6af4b204139fa5ec8d94d8a5417..2ad8e244b7f8fa83bc634b2d7e8538464668f634 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e74a7e67e3ae0e11b7c4ac6de749fb8fd7afbbc6..f59c8085d3c98e3e50281c131cf8f89329b445b9 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 8a480de89670ce966526adb9ac73e55b9d86e89f..4aeb4cf7ace92f4a98c3dd7b71a2df7d7f0f0fc3 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 91875e568088f213329fbc6d2c44d447e472e406..ec8a2411d57c2c96ec665f42778a65d29dabd8c5 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 9c4fbcd18bcd3f625d977b284a87fba9f9d151c6..173184b055d99969db57e0e0b8f51f4139394073 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 97dce01fd9e1cfab10244d69b15d274af0b3ef0d..0bce0ef72a50f7ebd3d19191679e2d7a13147ed9 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index b046c986867a0d5771b5c52b2a5b3afb53946fb0..a5322f5c57de2f9eae744a352a99ce15aa23f5d1 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 72bad178fcd021da1f51c4e26e83b87583eec96d..98d0c86822c31d2ecb73a489f558ee06f3233fd3 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f861d7dff7f5d6af4b204139fa5ec8d94d8a5417..2ad8e244b7f8fa83bc634b2d7e8538464668f634 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e74a7e67e3ae0e11b7c4ac6de749fb8fd7afbbc6..f59c8085d3c98e3e50281c131cf8f89329b445b9 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 042513ca33d06b5d3e8c8a57407d82abba59b2de..dc5f2d5fe2cf182fe224e53fdd36013d00f328a3 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 4ac3ee40c430c74dc4d0f0bc583f45f5a98453d5..9f9afea336e08ab312bede93e19955528aa1ee0e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 4c63111af5c0080df018c4a576bd94bee6f19187..4dd90e28ef316a356f9c545d99a9fa2b876d4fc5 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index b46b5c855e9c9980369f5cc63328391a5a1f3ffb..13eea3c0ac3f50155584ce2d3c80fc14f2e7be35 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 1aa2634285b49251fe054e03d8f5eac4419073ef..1e2ef0925b9d51f424d5676b003c02b7b0a13f2b 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 92494b611660355df1e5ef74dd6029b2d465b7a1..4f1418a60b1ba735e4ca1c6cdf450e6d09278fc2 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 56e1657f8aa7ad1801020ed4a4da4f9c4efc6d83..6540cf64d70b47b0b00b9a69d76e32c8364183fd 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index ca59ab2fc934129990cec23f48baac3d3dd5baf3..f066a45e4e27bfcf7c60a2bca1d79492ac822177 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 4ac3ee40c430c74dc4d0f0bc583f45f5a98453d5..9f9afea336e08ab312bede93e19955528aa1ee0e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 4c63111af5c0080df018c4a576bd94bee6f19187..4dd90e28ef316a356f9c545d99a9fa2b876d4fc5 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index b46b5c855e9c9980369f5cc63328391a5a1f3ffb..13eea3c0ac3f50155584ce2d3c80fc14f2e7be35 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 1aa2634285b49251fe054e03d8f5eac4419073ef..1e2ef0925b9d51f424d5676b003c02b7b0a13f2b 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 92494b611660355df1e5ef74dd6029b2d465b7a1..4f1418a60b1ba735e4ca1c6cdf450e6d09278fc2 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 56e1657f8aa7ad1801020ed4a4da4f9c4efc6d83..6540cf64d70b47b0b00b9a69d76e32c8364183fd 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index ca59ab2fc934129990cec23f48baac3d3dd5baf3..f066a45e4e27bfcf7c60a2bca1d79492ac822177 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 4ac3ee40c430c74dc4d0f0bc583f45f5a98453d5..9f9afea336e08ab312bede93e19955528aa1ee0e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 4c63111af5c0080df018c4a576bd94bee6f19187..4dd90e28ef316a356f9c545d99a9fa2b876d4fc5 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index b46b5c855e9c9980369f5cc63328391a5a1f3ffb..13eea3c0ac3f50155584ce2d3c80fc14f2e7be35 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 1aa2634285b49251fe054e03d8f5eac4419073ef..1e2ef0925b9d51f424d5676b003c02b7b0a13f2b 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 92494b611660355df1e5ef74dd6029b2d465b7a1..4f1418a60b1ba735e4ca1c6cdf450e6d09278fc2 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 56e1657f8aa7ad1801020ed4a4da4f9c4efc6d83..6540cf64d70b47b0b00b9a69d76e32c8364183fd 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index ca59ab2fc934129990cec23f48baac3d3dd5baf3..f066a45e4e27bfcf7c60a2bca1d79492ac822177 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c9f26dffbaec490c2fb302431b04367db32addf3..775855fc83a3211e6384ddf3203bf0985d87c9a1 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 0d32ad805bf0f881512c30e37431ea19fc4f0962..3597b3a743b8df1f1ea24d67072d453ced822e64 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 1e5c059051a6eb2861597accdda1416247b51053..218c9075bbe7c2ec18c62e8c3072db4585ee8032 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 4f7ac1ccf9d9bdc7e9cf56f3ecdf107d04c5cecf..0366266396437eb3b4550e1efdc2f372101c3e6e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f0dbe2a3c3155662a73c5bcbd75d4d2077950b7e..4756e0d8b71a89071a157edf8bab44ee7d1f7128 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 84ca5f1841ae460c3652c487c503dd7b4c6b5f9a..3c137f48456bb1011a150e5bf01c96f7ece7782c 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 83647234b2e6b9c8e3624ce931a25630c5ad5d49..d35fa541ac0d3f6df4e6a897925b089b97757249 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 4be766b51e02ff4ea101ac48a04fd38a512f9b4f..be4e10d8ca28bb8494913f80c121d1388538a6f8 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e8ed7bd45886f12f8a5c6cb2820c6261324a6d63..af7901ffc87ed49fabbd946beef2561684a7a7db 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 1e5c059051a6eb2861597accdda1416247b51053..218c9075bbe7c2ec18c62e8c3072db4585ee8032 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 1504f026c6ffee5fd75c1a126c38f509d2f8b0ff..adce62cc438e7b172812670ba220ed576ae2f534 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 84ca5f1841ae460c3652c487c503dd7b4c6b5f9a..3c137f48456bb1011a150e5bf01c96f7ece7782c 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 0c99bf863af00450ec571b471d2996076b888e64..99f5edc828ac15e2a43234a69114bc74ba0cd1ce 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 040a125c410fa07c9934f1e4113dc19999398546..c850d69694e25d40f42efddbbe64e3717ad67fc3 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 131db0cd7525c71a4859d7dcd822ba91c19b8e00..9ec86f895db8f9bc3a3bef2ca4c3f840053451b5 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 366db237de6380c6071a542b1841ace857fd2017..0eaf29803472c8080ff59e97fbcd15d15f43c0c1 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 4493b0e5881cd55cdd65bd99a892b1a894d9007a..85edcf66f3595fdb37b922ca3ecfadee5b60cafb 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e80db990f7e5a6034c2fbb005e1d3144bb94d8e9..5198f497f5bee74dbbf56db00c689d175127eafe 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 936ef63a1b3a6bf13dbd1806111f3120374c69f4..bcbe08169bc36dcc6ee0b11942afab3a6707629f 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 6bdbedfcf323acca5cd770421a145aa8f6bb59bd..6deeed13c472077816e1f28934bffc27cc76c49d 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 5309e01befe403e984fa0cd056fd3390e48c0cec..c60761d72d72a1cbfc999f070b9faab207f4fb2e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c537a4d6a8e68441154318faeb3eb30c08c07a2c..759c3784e13138f5f1d2efaacd97dcdadc339373 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index bf147fb8b5c04c3f0920a49342a660bc6a41f550..83106088827c1925fe6d249ef0ed0d968802e830 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 81b036235e848ebced5d72d523471c63ba9d4e71..60bd59e02464a1799b1aa6f43766eb6f4375fdc9 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 31e689ed2e4515a88389ae5264cf640fbaba9929..20610e53a8a919dd56c49d411dc450093c1dff36 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 82fe2370d4953465186773bb77627d3ea7b264f9..08b49d03ac65ee8ba52c2a84caa12321807f8f09 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c537a4d6a8e68441154318faeb3eb30c08c07a2c..759c3784e13138f5f1d2efaacd97dcdadc339373 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 31e689ed2e4515a88389ae5264cf640fbaba9929..20610e53a8a919dd56c49d411dc450093c1dff36 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 82fe2370d4953465186773bb77627d3ea7b264f9..08b49d03ac65ee8ba52c2a84caa12321807f8f09 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 908905b34b22c92801c9818757dec268d508b20c..39c7855747e37ba08994154368118685114bd2cc 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 97c429de3732b67a1cf1dc000db801f2ec3320e9..ba2559854db6fb16fb9670111cff8e56c7e82cb9 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 82fe2370d4953465186773bb77627d3ea7b264f9..08b49d03ac65ee8ba52c2a84caa12321807f8f09 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 56dfea857c7daa4905e7a11a06e8d43d57cfdd9f..d56017d69abb36674fb4e4112fa9985296116373 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index a4c49af1b153d282a8faa107173debdab39bc980..1c8f6fe6389e682974bda27e308cd8baacdc5f15 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 4fe48a5089057a5e670d6b7bfe67957c04592ced..80f826e44d3f8646e2345c92691a45182ef49431 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 700e8e52075dc194f51807c036eca2f848fa9972..cc9d7f40e37c67d8d4e0d9113f5a8e41ad935e69 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 188ab15c3881b40274ea78d899a03394a2c7d313..c456e896c7c67797dbaed5fa9a957d285194baa5 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 82fe2370d4953465186773bb77627d3ea7b264f9..08b49d03ac65ee8ba52c2a84caa12321807f8f09 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 47e05c5a5fcf58ae1194197c6b4a632f291166bf..61cdb7e214e44a791de657e1161b5e8126ca38cc 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index b173aae887a0c5eef4e69905e3d234f17c520eb9..933db9e389fad018f07658f6ff97a9a356a857e9 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 261112061b9b66125d55fab61c929586857240ab..87849af069fab9f40c61649b35d11a94f6be498e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 8db172c10ca83c27aed7e7b742086e1e81fbb7a0..6280359e448b6cf763f8b808706ef2056a95730e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 4c22aed8cda86bcd53cdf4b2a9404574242cefbc..21440a4d72c1a687413a5dfd928bf0d94cfddf35 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 6c546950dad6f967332bf68e53f77a9264f3fade..2fa1bfefcdc7c11ca44dd06b48d6c36efaa81b59 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 80712d03f475fa8ea94b076aa9d8b2267d6573f8..632cd5d09830efafdf5a20fd2dadb60ff67577f0 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index ee61fbcf41bc29d59bcce834f837ff998d9aeb49..e5cce82eb45dc2f7e2cc8f8002eb95a95faa37d7 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 60b845e05415d25aa985aee3e400c907c3642b3e..351915a248623f777732a96742a2c54738796ab2 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 2532104caacb7bd1ea124c95b0b5a627db25f22a..ffccc86dedb0e6398b7b1b8705cdd672b99b5960 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f122fcfea0d31740f4370bab6cce03db17e17648..1220053455885109bf93b6bd5f3add8d86665c6b 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 6e03c3dfaf4d5087e9d77fed12a06cca78eeea7e..fda25c3a1afbbc67b2f12d5f4c6a2b309e54bd0a 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d26057f9a6dff07dfb1cd8bc23d07eeee199a3e7..6d56a462f18157c5cd669ad2ea6aa7f0d6e25f70 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 8603cd3d5f945df68270a304854b19ed88b01cf7..bf7a0de717fc0e0c1fd4708ff30ae7939ba06ac4 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 825dcbb519a763a2a7794b71aa7dae817232efac..4e39a252c0985b0bce3f314cc7337bc36577daef 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 6ecd5001ccae99b0afebc01e9a271be8548b0dae..aef4aafaddcd5ae5e01cda41255e1dfa0d96ce06 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 1eeaf3a159fc94545d09486cc98dd9b06b760542..225ff354e7985dd34e5ef2d8fcc6c3bfb6aa1ae0 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 0b83dd4097c930b2ea788a454e687018be1b5f66..093ef037ffd3d7c19d83633e6faeb9927d093df0 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c55718c2a22ea22fab3d343adf48bafda4f36ed5..f446a470cbee24d85fba0389a3585d4c2ccab690 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 6e03c3dfaf4d5087e9d77fed12a06cca78eeea7e..fda25c3a1afbbc67b2f12d5f4c6a2b309e54bd0a 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d26057f9a6dff07dfb1cd8bc23d07eeee199a3e7..6d56a462f18157c5cd669ad2ea6aa7f0d6e25f70 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 8603cd3d5f945df68270a304854b19ed88b01cf7..bf7a0de717fc0e0c1fd4708ff30ae7939ba06ac4 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 56328a724d664ba12e02350726f84050c21b6ba7..e28c52542a304ea57c3eac8b6e4febcd77db6d5b 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f45a92557f8bd98b217d9b8a86e1ac3c30fa30cd..7104b6a2dfd7ceca73a4e49c684baacb5627a688 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index a6d63561338095d87d9717f6f47e2c817499cd37..428e66a5336a312928326c27fdfbaf9f6e304fe9 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f81d277c9bfd0a815929d9340b3dda52640578c6..95f93b9fc68dabd3c800347a4939a6383e929890 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 8b9fb264fbb7cc7e7d85ebc4484fe171112c3ca6..1186f01b8a0a453769a09231075f1c7577e0f929 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 0ee928d5bafc534e4fedafbcacd5cc4f0449ecaf..c31136e01beab5d604ac6bbd44a6b7b54135279d 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 0ff78d51bbfca6393185fe9b114aea5ce4a7a0af..3d001eb7cf4547e6c558d350f14d6edf5d8e28f5 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 1e9913716c0bda0f643900ac2cd6aa97537ac0e8..15e89e447c218929579ee4cada15f17d18c71168 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 46014e8fb22527c5f1082718f580c94ea3798bda..c213717a133dbb47f5302178129866b413fce96f 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 4397c8355b4be9cfe62cf5e4183441d758e1ff37..c60a16c9179873669a52aa1c94e274d8c8a0d476 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 1994c61a7f6e45d5ab95a98733da12f8efde7898..42580f83ade55812ccd51924ae00302f07e30125 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f4148f050eec52929357e754c8cf00f75816dc36..0f542500f999eec69d3c387981fb123fc061e5e2 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index b11610d63b5fc2c692920189c731d0efa864fbe7..51932cc2124990cca0058782ae01712167f789db 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c5be6ac8c39240c66413111a805f1f76a06f40e2..7661f7af7343d3474bcd1c68899275601bd1322f 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 9113af2032840ac244d81876f3dffb9842a575df..e06e7661188b79eab191acc0e3f5a5b208950bea 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 10ed0839c54498c1edecc1f2cc18472cd91ab063..cf3d4087145afd134936c2fd88b8c1d8db8548e6 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 1994c61a7f6e45d5ab95a98733da12f8efde7898..42580f83ade55812ccd51924ae00302f07e30125 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 8a5d69e94a0290600b83d3400d1a4910fc980d29..676ccb1c32f0b958155901bdea2173eadee1ccf0 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c4d4dd9d4656b74d4d3a54f86b21981cbee10955..6ef021dd20f0215a23c39063b73f1d44dbb568a1 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 089b85fdef57442271595b9f39115cd667604230..3d6eebccbb99d2e96511538ce880e98e79c11271 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 9113af2032840ac244d81876f3dffb9842a575df..e06e7661188b79eab191acc0e3f5a5b208950bea 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index cea618d87665d07a06eab6e742b5988da9030f28..35d39c11903d39ec1b1c45f160d5ad7904b71ba0 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 9b438714b82908bcee4030bb9e6dffecc869baee..5d12a66dc811a160754b8122113ff1c2be5c3a65 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index fd793a04c3d01878449298a85e997ef8c162bd4e..ffafd336599759614a801739ec8cb223041372b8 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 1783abe3cf255d000dee90ca95906b24b3f63b24..ba365fa0b8feef6181a1c2f8771a3be163dffedc 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e5034d3b1b0c362f07ef0a1f99a939373c06d37c..940a856eccf95b69cd4900dec3bafab5654d23a1 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index ef872fb7b72b61e02aec7cb671baf7ef8696051d..4ae80c0c877c8ee591cc4c4f8625b9ef0f440af2 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index a327a796252b63239c7ad72ba9aa001abc9b1fc4..d9dbf2282706eec3aa9af3af396e6d08f8b521d7 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 8e6300b2f649f527e85db2407ea869a38b7db2e8..397b1d2f1b2f1f2fe45e796ff030726fbb042d97 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 383b8ba82b4d37a5dc85972a5948c2e6fc567de1..c5ecd13e5772bbaaa6f90f77f3e53237e5d8a6dd 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 8abf71e3c5f4646ce6a16b734229aeb32402f383..ffe5a1195cc4144603b9a5265490961a8b4c2112 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 54fc1a235e9a1634b8ecffbb52c1889178b89d92..26510b23330d5a5bfe9cb383185bcdd95f07a6fc 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 0160d96c454996a7eaa85e524086aee6ffb1f7f7..062fdaf7b64efc876c91f6aa138136cd29042f5e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 0374936bb3c69674073d33511c85ea345a1de8f9..e57acb2b3125942898365cc229422521a3b574e4 100644 (file)
@@ -1,6 +1,6 @@
 ;/*\r
-; * FreeRTOS Kernel V10.2.1\r
-; * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+; * FreeRTOS Kernel V10.3.0\r
+; * Copyright (C) 2020 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
index 3a030396e92698a82c8311d13675ea13e5dadd17..2f25267ae0cfec67b0ee50e0c117c17775339b2c 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f4402eddf58bc6846c737d47c7bb6ac0eda9f60a..f11e8f62c0298c4789cb277fa20c08ab2df6e9a1 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 2bf143344117366d86eb6c8024799a6a5f3c9a74..4f1c7b99348b6fde4c22dcd930069357f1891550 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d26057f9a6dff07dfb1cd8bc23d07eeee199a3e7..6d56a462f18157c5cd669ad2ea6aa7f0d6e25f70 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 1fd2e2635d18ab07c2aa065c7986b81e599abe91..f15909a3c5b2ae430e5fd8d3765863ac8f626a18 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 2f6b882d444ab931844bd74e6045b2978c555964..3c039a2781fc4966a32afc4c5e70dfe5602bf29d 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 183bfe96a3eef3df4f861c940ab73941bf86c548..7ae55a389eddbf1b94cd374ad2f4934009190fe8 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c080491cc198da53875fd827b145c734482c82a3..0863bd43711a58ee3d64d21b36ec82cb3769ccb0 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 54fc1a235e9a1634b8ecffbb52c1889178b89d92..26510b23330d5a5bfe9cb383185bcdd95f07a6fc 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 0374936bb3c69674073d33511c85ea345a1de8f9..e57acb2b3125942898365cc229422521a3b574e4 100644 (file)
@@ -1,6 +1,6 @@
 ;/*\r
-; * FreeRTOS Kernel V10.2.1\r
-; * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+; * FreeRTOS Kernel V10.3.0\r
+; * Copyright (C) 2020 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
index 473c119d7d12c1768430d066b1723da603c9cfa6..150fea3e22499062b22fa9e048bd45c8f4781039 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 24aaed8e2676c99b0221d699a32d75a710a874d8..84b7e02277365e44d5bce2fe4ba3cbcbc6e411de 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 1ba3d11633156086f41e5c27b3a72a0261dae7df..629d2fab515b6f19fba62320cf609d4a5ea06995 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 506aedcef608a79a9d783936b46e7629931b469c..6db1b6ff3e2ad1221ea89eda7d14da3ad628bcec 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 3c9fac6f20302ae9ce02624f36f210b75d92180b..3c0ebdc541592334a0b6c8fede7a046f12f74dfe 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index a4afd9f22d51ff2f629e8d0b3d12043d63b8f12e..0f3770b957e07ff1ba7f70c282502d7172a3e9c6 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 04bc4ccc03f5ccd60683745ecd77b4f6db91a524..d4b7f13188b500fd1cfa61fb664631d746e9e16b 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 016f498abb7a8398c8e0a1e54fcf5b81cc342dd7..1e089991d9e14988781a308137e5c7b4c8653fbc 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d26057f9a6dff07dfb1cd8bc23d07eeee199a3e7..6d56a462f18157c5cd669ad2ea6aa7f0d6e25f70 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 383b8ba82b4d37a5dc85972a5948c2e6fc567de1..c5ecd13e5772bbaaa6f90f77f3e53237e5d8a6dd 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f044b335654f2802a6b038a1cac7ce1cfa368347..bc11611edb60bafca2581889da8a3c8f8b056252 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index ef4961fa946d7b13837ccea3042a4d9e29d081d9..88c182d8f866ed674d273c45a4e317bdd8780ce8 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index a82558b9638e48267c3f2034f0ab264cc698f6ab..94ccd4490c3b5471949344609a4d14d05cc2d199 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 7dc6e64b04aed561d7445ba646910662b1730036..d9f3820cf84395a7b61774e11638d79e53a4db88 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 0be88a6193a05c5383f13ca6085429109e0dd560..56fdb3ae6b3d4348d8a29acf31e2369fd3db5b23 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 9d36797edc282fc2c77b9fbc1b5231d5f03d8fb7..23cede32341c9cd6519f8270b1b1b2adc7f39399 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 58042071219d0aaa4c8cf92556cfb2519ce1ed5d..88e61b743d85b97437d8408205e2b1bdb95a4533 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 8287df08fd11659f47bde307f4522d4006a9b9e7..9c5a297f17fc582eb4c1b3febfa263fceeed95e1 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d1db0a326d3262313db88875944f53a386babf0c..a375fdccb828227153fd24b8ea74df25006b5c0c 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e3c3aa50fc25a0e69a328cae03729bfc7141bf2b..b4befe0e34ecf27a7640e31f4288cfaf87df229f 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 54b0aced268df7bdae075b5b44391a79d43fbfd7..b7b927cb927c649f545270d3d1e509dc5ef75b98 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 0af781539b05f7a3fba73c21d85d77a3f4d93412..acb198a5b078007e10f060d52497d9f11fc207f0 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e519786179bd962da47bae6d79776a37c98c6929..96b07fff7e8b4a552b9e37e099cca7e32ee1e842 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 67c80a0e639ae73ee201fb9344fc31ad8ac6db98..053f2be5002943422b0d44da16ed5b762f17694d 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c42b95499b2428f5fd250891a01e59ea0a9f5505..349ae52d7b1118e037fffcf9c5a4f1af55a4f228 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 5db812d6f8064b2904524f3a8e4e6263a59e51a7..8e0c0235cc360064eaafbc94cbb3dc75d35fe3bb 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 037d11d17a560b58b18ef06648918901052f35b0..0eab0d18586f1832ef4a176f2a8a627b539a030e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 14bd4ca89b1f5366196f5582de7d3711b630974c..5bdaf51c4c04f21b572289390c7f93decd6e47ed 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 3b07e4bc6cb38df7d04a33fd93a4f5bdc5889f05..2e9d2fed388d7c95523c53b60cbc961fb5c5f454 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d769c6824c67ecc1bdd9405a56373b678a7a944a..0177fb1d6890b8a825be8d47b590805927175887 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 634f3a79cccc887ceab2036e310e9a362d40442e..a70a88fc50363634bb2bb5d6f53dfdd1b3aa905f 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index df8b2b0eceac3fd74e993417ca16c6b18eceb7bb..becf9861a9b58c6d81ddc94d2d18e8f6b1c4425f 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c42b95499b2428f5fd250891a01e59ea0a9f5505..349ae52d7b1118e037fffcf9c5a4f1af55a4f228 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index fa8683b766ec53e6013f43aab432652ba4e0141d..f5e81f418b27f3c41fa26023d5e6dc18718319db 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c5a100a0c4a25b0af1ad9f062e465993149dc468..24f41096864c0e675896fe122bea6c657a731ab6 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index edb2e107949baa94d324f7d73cb2c4317ce4572a..e89db71f77cd30bb06c06d0c2a856f34b082fc5f 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 856241706e8c362361c0a52ac898c040db40315c..344223303df85b5041fec59af05c5bc28062eec6 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d1cad45e1f1b5c716e5832c4356eebff966f864e..6473aa3623884e5efaf30d599cdcb577ba691931 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 742beed96e4ad7e1355bf0220aebd283f39574fb..c97ab08786c85c0b8078d41efb843dfe8223437f 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 476a5604a7f2c4e2eb5db8ff6ddb90bb43e6a5f0..283c9aea56e038e20d72b0d389e51aded95077f5 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f18370246508b9c3fe3704606e9242bd9dcec025..224ce01cf6f9daed4eca44c5f94651ff440a85be 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 7fb19c34b43f30f94709f43d0b649fa9cc39bcc1..c1b795bf16724fb441f3372d2433c8eebd70cc2e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e9bee76ce30f816636d603b27e5f52067dea9188..36844de78d9d19dd8485506491a963de369f6a81 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 21cdde346a4d77dfcfa5c9c2e622a2aa642b7376..ff2f1e8dde6da47bc9bf1fbaf637227231463fc9 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index a7ae5ca01c9bfe09e4394a33cbb5efd450e12f52..34097f00bb3d815e90bbf226ab919b02a524088f 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f18370246508b9c3fe3704606e9242bd9dcec025..224ce01cf6f9daed4eca44c5f94651ff440a85be 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 29fbc1ebd0375429ee7fedd84423261393f4e6cf..2959800202a19873f3ebda4f21f2e34e27b0261e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 9420e624a37b54355d361fc0dc235e629bbf7af6..82b82e5b187554ada6f843fb3edbd36a75e5da96 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 133544ea3cde416d598b5445e2b613639dfeef4c..2f0500d21f7b7046d6eef76dedd574dab1db4b71 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index a01f36a8cc27ff6311cae84afae026800be11323..ab9cea85f080e1f460ffbbec024c6db50a085890 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f18370246508b9c3fe3704606e9242bd9dcec025..224ce01cf6f9daed4eca44c5f94651ff440a85be 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 27714f93b1d7432b1c5bcb6994c51ed313747658..d8ca24c9f8083b6e352bf3411a2a2b88159811a2 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e181a93aa868ca7b2f742618a0e6040c8e8478a3..7dc08c9e789a15ad93e07632621f6e49bba5b6d7 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 831bbc6fe2a4cf28019e7ff605ef49228bf93c42..14955607678ffcf888e48bac653056e3cd346346 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index fa7ab4d8276a681b7866b853fb552b4f11dd173d..3c1fd2290f885e932fc775a0d54f94395515a2bb 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 037ce68b1c0147f0806d39892bd8cf049c696f7f..2b3eb84a02a20bf26b08476e6b6c568e8568ddec 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 6ac37b45599caf34b2c8c4ca0877ffc5990fdd26..7e3a532d58e62b98c14190545ea113b92400081f 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 9ee0dc891f797fbec3173a780f1fe34763e207e5..60988797ef9decc483e95ee0379c6ec35d37317a 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c97f1692682bbe8c73b45705ab8388f340bc8f92..420dfb7b4e536dbbc4f92bec74c9cdd28f579102 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e4f89c90f55f4b841f9cb919313c8353dc9c90db..f13af64f5c112a772b4b378289eef9420019f148 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 6988e007218fa20f7a6667ff6fbbc069cd5e8a22..22703fd1e66ca7d823ebba30c9efce40cc0d112b 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index b4df4b738054c49c88f6d03e1356446c21b3ca41..121e5baae759050408cdcc94d188d088f30f2771 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e58d0d0e245f58a11adf77855a5fe6049a8800ef..4d8d069abb87b2b8cbfb6ef74c85129c202f4a51 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c7fe2d27398f7bd43c7bf650766b27aba6cfe737..11d88eadb2a69c7b4f42e0c03f099f6c45625937 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index a3f54850c834c4b80623bba043519a01a5ec1921..645d344568904256db81c3ed2418f77003c8ae77 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 8ea5447cca13f65b0869e6432e606e4fbda12f99..0324777ad05cff5e5722ce8150bc6d2d03dda63e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c42b95499b2428f5fd250891a01e59ea0a9f5505..349ae52d7b1118e037fffcf9c5a4f1af55a4f228 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 76bc39bea9b65e3f0cf2204a56e01daceb9ddd0a..b345c9692310bf30393a1ed1e169c946207cd767 100644 (file)
@@ -1,6 +1,6 @@
 ;/*\r
-; * FreeRTOS Kernel V10.2.1\r
-; * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+; * FreeRTOS Kernel V10.3.0\r
+; * Copyright (C) 2020 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
index e56954a9555cf2d7479221e48c8214047feb8999..0fcd5ad7f4576bae51337860d2b9c877bf734622 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index ff50f43785c1143b3f3d445db70533db7f741e97..44389ee08bbbe7e6060aea9622fb05ce0ebd1ad0 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index a29633df74c78ac53638990f30667b722d8adbf4..8c3f34eba00e4136fa5781bb6f9d148e2d88511f 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 092bdb06a0a98398c53f4193c840efc51958fc5b..269628439b05a573b9f36435b716eed18f83eb44 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 389a0a4532f0bbb992fc55abd616197f9d5aae53..4c73619718f59a38f38879815fbb03319c36aec6 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 94c63fcd0576de3f571d038428ae0df13da2b523..66a58821963826fcbe76bf93f0f113c74b0d4f82 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 8e8d61874d930b691a7d34d55446d726d8f9858f..f8ee5dffb515833fbae79ae54180f323df5bd66b 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 47cc56ed5b4bd3a0886b2609b6eb2e0543d287bb..a2dc31e81e65bf821b037da7ea1713cd938bc581 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 412809880c05ca32681afda93b7f3196ce5eee94..558a34f502b10f8d32f97ca7ffad043d91826b64 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 08a6eb03ce050569b2b463c2bdca50299e904cc2..b45284ef8847f67f626b612dfc575b5d83beaedb 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 6032bc41789650030260b80c351f431d20ae6123..ad86e6a3238ae0cc7afc4ebe6bfa0b2a9b6bd935 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index a230f366e5871b975be0294e0ba264b9f37ba70b..32f398cd65f2c93fcd5d0271977ad21fe57c9396 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 1cf20d24e6206e909dfac32830b1819cbf1bcb6a..2cdd34de11e2951bae8a1b5e35cd6cbb4c1fd9bf 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 8593ab77a99e80608b8de61a990603dea86ad436..2b4d4c97e3f8e90997249018e3f7e4ee4247872b 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 8d44b248d499fbdacad3cacc4c5997f8bdc298fa..7841c7f58bde502beaca306a3e6877872c1edd13 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 076bd8c2dc16d5d5214ecb65846e25cbb56c4d8a..5ec4c88e775e39226696bfc62c9c06e369b262e1 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index dc2610f0f83e7b75af4aa7064472fdf821c1aedf..c759d1f4632823a7fffcbff27a3f95802d23cfaf 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 91875e568088f213329fbc6d2c44d447e472e406..ec8a2411d57c2c96ec665f42778a65d29dabd8c5 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 9c4fbcd18bcd3f625d977b284a87fba9f9d151c6..173184b055d99969db57e0e0b8f51f4139394073 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index a0eeb29c64f847e043b98106433db662e4d8c7e5..65d91256067fdf261c99b24956f8bd5c6bd4719c 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c23a1b8c03c2f565b5e8a64915df6e23f5916de0..f454ce2e7c4ee8786608575d0389ac6013e96c24 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c42b95499b2428f5fd250891a01e59ea0a9f5505..349ae52d7b1118e037fffcf9c5a4f1af55a4f228 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 96ce7a7508eca4321ec26e5fc503a258b4a3faab..abad725d575b2a1155821af7e3f966a7afc15808 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 9ee862f5ea572921577c2b5bf0fa46d3a3ef9b07..7f76ad50165f7226949fe7efa78c4305ebeac471 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f861d7dff7f5d6af4b204139fa5ec8d94d8a5417..2ad8e244b7f8fa83bc634b2d7e8538464668f634 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 54b2b4e1958550b776140f7a4df6281a627d3dae..edc652512f7b745cd51ffbccb57bcbd090651b0e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index effe8a53a038502116f6be521357bab03f82b1df..c81dd2dbb31cc6e47e1e38b5faf115a888762412 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 4de29dff1addd5a7f0cc494f2a3c3c6e16caab10..cb6c52b0faebccefac50812f77c15cbfc2f0ecd6 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 8f1dd8f64d0bb7181d2de0370e18382a697fab37..2d0b47c03ca0f2cfe057ac7cb25b5b6e7c62cf6e 100644 (file)
@@ -1,6 +1,6 @@
 ;/*\r
-; * FreeRTOS Kernel V10.2.1\r
-; * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+; * FreeRTOS Kernel V10.3.0\r
+; * Copyright (C) 2020 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
index feecc363480f6e930776624a24f208fcbbca1f64..1e3ae8e8e05f75ba1e6157dc8a1844bc030677bc 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 1dbf3febb6bb23f4cb61f55c5d08bd2df37bc288..4d4502a11ff27ca1445d95ab53cacef1598b82b4 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 5a910297ad91e5d9be78d5b9442c8dec0f755c4f..fedb822d62da85994f52622c1c12b3638fd6dfc6 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 7d2f9b08b816b02fe03ee7f04d747b5b90e88a2b..0483cd7f80e90eabb7730a4d71650879f8fecc5c 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 100bd326775a6d7e22f6f4650fa04b6f14a1e1a0..66d81170c94165707fa0c3bada133ae456f2a839 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 2e5d964348a5a53ddd1a315e0aa6ff1bae69fbe2..d70ceddc59481dbea9e94a2680be736fea7b88b5 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f881852127bf525b460e0134db227a6438b16e2b..2c7165d2c5989f3e5913cfd4238703c62497a5ec 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 58cd2def6a712003125515e0c4e730901c1fb0d0..a2eb29bb9ee593cde9986468640eb15c99a53421 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c42b95499b2428f5fd250891a01e59ea0a9f5505..349ae52d7b1118e037fffcf9c5a4f1af55a4f228 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 54b0aced268df7bdae075b5b44391a79d43fbfd7..b7b927cb927c649f545270d3d1e509dc5ef75b98 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index ab9069d3769caab09847efc872b3a96c47014c48..346ba3d822d70cf96ec4ba7105890b0852d6a42f 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index a43811ac7a0091f89f5768e1303bf0be6af9bc84..0acc409e086ff8066a9a80e904d759ebad3dd370 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 5645aef1a66f1d239d49d0e46937da41ff3f3924..2c688ec8d832be62d54c1426bf1331bc956325cf 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e07d6699c45fbc9cc0d9aaf7b7870c1d08d1c6a8..95366643957d8fb2fb2410a1431ca203b220638e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 0a11a48880dde3f7abcd766f3cac67dcced4870b..94618be6722b73dc5c3f1a95ddf44d4c698bfd9a 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c42b95499b2428f5fd250891a01e59ea0a9f5505..349ae52d7b1118e037fffcf9c5a4f1af55a4f228 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 54b0aced268df7bdae075b5b44391a79d43fbfd7..b7b927cb927c649f545270d3d1e509dc5ef75b98 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 2e09ade6a93f5442dbf56058c0a1678b692f00be..0421b7998dadc2b1b9690fe64d89d74ed7317912 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index ab165cb761aa625be4e53cbd5df81417ece670c4..923f4488e354a85e19bbc0b49ba64656594b2850 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 5645aef1a66f1d239d49d0e46937da41ff3f3924..2c688ec8d832be62d54c1426bf1331bc956325cf 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e07d6699c45fbc9cc0d9aaf7b7870c1d08d1c6a8..95366643957d8fb2fb2410a1431ca203b220638e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f06ac7f7a91f8092bad31939ff47fdafb5488bab..54e98f6e1123ae38daa9a51be9257a399eb2f641 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c42b95499b2428f5fd250891a01e59ea0a9f5505..349ae52d7b1118e037fffcf9c5a4f1af55a4f228 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 2e11af1e270e219b2b2d737e375f95e184b74d43..cfff05d8406df016d6b0bb68e0098bd279b31858 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 30a26518f0f0d3fd67328cb9952f3ddb0900de50..fc35798b2c2377559a214a363ed6904bf6798622 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 2e09ade6a93f5442dbf56058c0a1678b692f00be..0421b7998dadc2b1b9690fe64d89d74ed7317912 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index de52bbe7348ba179d92f98025c5e78ac17d04515..94a0906b512b1b1f02afe5b45c7167968fe55c5c 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e5787c547c3d984c5acad29b69740234a20861c2..d679fc9743cae2064aa8bd7bcea36f1a87eebcbd 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 6b3e587d8aabc58d19dc979523a6d1798b4baa0a..293497ebc2cae9f8c8087f0265379a0808d87923 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f0949e190f8d60f0fa09e088f1c0fbf3a00a07d4..ae9ee2f2f521e2ca4f0d7a10fd3618f21a3b5ef3 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c42b95499b2428f5fd250891a01e59ea0a9f5505..349ae52d7b1118e037fffcf9c5a4f1af55a4f228 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 30a26518f0f0d3fd67328cb9952f3ddb0900de50..fc35798b2c2377559a214a363ed6904bf6798622 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 2e11af1e270e219b2b2d737e375f95e184b74d43..cfff05d8406df016d6b0bb68e0098bd279b31858 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 68df23373fad02f5d10ee6b7efde6b9ea5648e65..be0dda9e22457aea5fcf95627b82dc382baa8df2 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 4db0dca2333952668bd1e3c6e99d801104ef5a93..0fc5ec26d3d408923b77365193ffe4345122295f 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 4af9d909d21452bc033a08fe56c7ba8fa939e5df..e0953c1924538cf1f3a57539f36b0124f4ec6d4d 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 13a1b87ab7b237d513200814ff91247451f51bf6..cb64948ca61775731ec0faa55895b26583405147 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index bde9d9add8c272ffc180b6119940941fb659597c..eb8c42110521a2eae4e495ebd2455dac8a27dce6 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index aaf9baa4e2eba943eeaf6a61f0ffc6443ea24d55..7caabd451de236aca3a7efdc42ead5666047d043 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e82864728c11e2cb83528d9056308a3859be0416..b810fb63893b1ba3c17b4fbfa6b7195c2fa6dba0 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index ee0ee8f0d088c54bf55625e4c9419f2a95d12944..349138249d82a106f78bbb27b98ad621618caecb 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 04ed65777c931cdcf58513a385800c90026e01dc..c135569ac5d3aeccd7db6991cb8211e36d286ca3 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 4931e088c2f66d558172748b6617e17310fd73b1..d5c956cf95454fb4a1e76feca6f09e11d15c79c9 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 28b737760ef71281aaf78a59f79f2f0245797993..df980c000685b05e059faae8d87f5d9d3119e6a6 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e1ec1ea98feb3455398673bfa53bfeab095d4039..6e487b2682f337c93f9f3b4482b1761e9a93aabf 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index ca7cfc627e08c2d242788b1b491557e3aca16bfa..1c0cd1824e1754df10dd33c2c8a0751c0c20c962 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d35d74daf52ea789b8de3f3fce7cc189308e780c..0307f86141276bb216bd56d4877900fcf0c7627b 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 4030b43ca1221f7fff819f5029e0898f1fb57e6f..3604030ab21559ae76136f435d9b29067486dadf 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f8d104e7d2e4728411cbd20c813d7a4a537b3d93..12515de4b295963e4efdef3651b730860a179d19 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f2aa78e88f934413a28afc04fefd58971a5aa236..badc3e76c8454b60f9be9dc0e4f3aabf5271b31b 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 6d8e067396ac9562385ee42000a0b725e48c73fc..b113ad59add2c8bd4521488a4030336af10c4fe5 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 039439a914bfdb5cfd10906f7e21845ccefe5eb9..83f7bcc92560985eebe71e748fb215f2700c8018 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e6240276194ff3efed92bfb6c9f8afd6a3d8924a..ece6a5a727d55fe6ef32423671d283cc0b72e05a 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f0e1b92e38f11362d890d2e44339e738f881ef18..7fba78e41c3083b63a8710ba5f5f88bcdeb5f536 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 5ecb9decbfa5b1a1d667942145b24df1bdd524ee..e2f6dd13caa1bd706f4836f9304b177943755740 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d04bb51c4832dba9165957f19818aa0c668f5a65..f24872c4b09dd22d4525d0c22e18cb9034765a6b 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 7c8af0101f5aae4c39615a57c5edf59f06b7fd9b..47ddbf6015af1a514c254d2c2da21c0336b30d04 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f44a018c76068261651e176a5827e22ca1e95350..27c644346059bd21ee66d93c07f5682c46b78704 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 5ecb9decbfa5b1a1d667942145b24df1bdd524ee..e2f6dd13caa1bd706f4836f9304b177943755740 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 68d74acc0088d43224af51fd01e95b7ce90ade56..757524f01ad0c0c4263f4f5970165dfd3aee549b 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 9915e919516e775f632ead6de1f90423736f1dde..7c2bca58f293482fcc35f714691e6ffcb5b64cad 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 181a6652143de736f463bbc4c93d2b808d517f16..6f62a7ab04883053fd8bfc6e12acdd81e4be9dec 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 7ef3618c600fea1e88a4d37f8c8ed7c9703998ca..de4d0d527f0b31f80127e4cdaff6594e905d18c4 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 531b0efd05f6fcdb5fd3fed1186f04c1bec75134..8353ae3813a9272668a0151908383956706b1cb6 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 181a6652143de736f463bbc4c93d2b808d517f16..6f62a7ab04883053fd8bfc6e12acdd81e4be9dec 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index fb6aeaa6bd2a3b4903f59969605d60487859ba2a..da49146546e1007b42d9a5ddfd3dddf34111badf 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f32f47a215867ed8dae711e6831dd680a6984054..7972a95bede74d5fdbc1a0b92049820aa57f715c 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c8f6553ab5131fc1dcdf3c39ebc5fa36f0d1cbe6..44f756a1c14fc874c5705f31cb50c55ee17689b9 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 81d6f5f69ad2753ba46a7ba5e98a5cfec27a1b51..9a72e6c1abf083a4208e08ab89f63eb4850433e3 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 64210fcec46ca492976c0799e1f8fcdf0c774290..3df250fb33bfb38a264f1d77cc1cd539d27f8c85 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 039439a914bfdb5cfd10906f7e21845ccefe5eb9..83f7bcc92560985eebe71e748fb215f2700c8018 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e6240276194ff3efed92bfb6c9f8afd6a3d8924a..ece6a5a727d55fe6ef32423671d283cc0b72e05a 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f0e1b92e38f11362d890d2e44339e738f881ef18..7fba78e41c3083b63a8710ba5f5f88bcdeb5f536 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c8f6553ab5131fc1dcdf3c39ebc5fa36f0d1cbe6..44f756a1c14fc874c5705f31cb50c55ee17689b9 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 81d6f5f69ad2753ba46a7ba5e98a5cfec27a1b51..9a72e6c1abf083a4208e08ab89f63eb4850433e3 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 64210fcec46ca492976c0799e1f8fcdf0c774290..3df250fb33bfb38a264f1d77cc1cd539d27f8c85 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 039439a914bfdb5cfd10906f7e21845ccefe5eb9..83f7bcc92560985eebe71e748fb215f2700c8018 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e6240276194ff3efed92bfb6c9f8afd6a3d8924a..ece6a5a727d55fe6ef32423671d283cc0b72e05a 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f0e1b92e38f11362d890d2e44339e738f881ef18..7fba78e41c3083b63a8710ba5f5f88bcdeb5f536 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 4e7b3afd9fbd72ee5cf14aa441f2a76419ae31d3..a94c0d777e7bc63443ad90d4abc429eecd3114eb 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 59efcd77f69997de57d6382f3f27fb0c9b2889fa..ff729191144e53f9902c894fd92ed0e2aa8ae6a8 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index b486d465ba7243f830cd97b6fc3fc308c918ff93..79ddcc990ec97cf784232ec48c3a02f582ffc39a 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d35d74daf52ea789b8de3f3fce7cc189308e780c..0307f86141276bb216bd56d4877900fcf0c7627b 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 4030b43ca1221f7fff819f5029e0898f1fb57e6f..3604030ab21559ae76136f435d9b29067486dadf 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 9a13d6f230e61a573fd00655b1748e77b9c59b01..3d61777dc5ef7e82b4fab7f61f8638a3b6edd6eb 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index bfbf80958dd6d65cd35ddf468a284e063631314c..6411abe3ddb7eb7c1a0cb1f270b12aed8dfa05a5 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d35d74daf52ea789b8de3f3fce7cc189308e780c..0307f86141276bb216bd56d4877900fcf0c7627b 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 4030b43ca1221f7fff819f5029e0898f1fb57e6f..3604030ab21559ae76136f435d9b29067486dadf 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 89aeb02d192152627f3c65d5de94589c7b326a22..d065d8178dd1cabc6eac1a9a6914ca3eef82da07 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 97b5812df8f65a5298911fb0fc536720e13b18f4..ab2c4350dcb74658b3cee8fe2a6ed0e9d2a9447c 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 112974536e9278a6fa03964876878e0fa91cf8bf..42260ad2e55ba59240e4a6af5bb34c54143d0814 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 5b994c3022894be20bb3789cccd00c6a6373ba5d..66635240d771f8ff1f75259fdb26eba72abe2a72 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index ce838c5265d38ce7cecef0ab1e14c0b703b8875c..c250aa33a939444b1a022bae6b23eb9158b2dd34 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c9b4edf05d974c6c23f78af72a958e983cd5ffdb..a9755c8b9838b5b733a412a1247be395ba4fe664 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d26057f9a6dff07dfb1cd8bc23d07eeee199a3e7..6d56a462f18157c5cd669ad2ea6aa7f0d6e25f70 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index bd7db3c0544f6fd7296a568358ad0f076d79c68f..79c112607e38b9b7d79d35c50222a6de86766abf 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 4cc09f76fdb7ecde4fa89d9c04b4cec1e826783b..bd899bae336928b8ae61086a0b9c3e20b7da6d75 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 0b8b98057a139f11c00822607174fca449fe7da1..33c23a3a6fdd70211ef5f431fc0b64b7bd839a00 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 8529edc5c2f4abdaa9cb0e96af8bc2b3e06450a4..9591539370a0511beb7476baa3d8575910d4e190 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d81849f650db0cdf3bbdefb5d5b1caa52aa51a5d..a64b320c75802c885302c69e3ab841ef2a60d854 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index a32ab29894e6d5c8538a4a39a43e69cade85ab4f..37645ff4fc63203d84a61ac402ef296ab42572bf 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 0e06be9d7965812338545324536b58bd5de72df9..0361608c460be0d56d6f5b848b95050f2f609a37 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 1b3569a91386ee04ee8f29c64ac296e95799bc2f..937c9086c69f3cd0b4fdea2434fbb954093f3302 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index b98f068f943433e3cd7fed4090823a3035c550ad..6a1f60a0d998ac0fd5b4fad2493adb24abc9f7a4 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 57cec12f6d180ecbb7f9f24dc9107fd3f40c2bfd..69238f19726bde090f6887f96804b6e8c40719e2 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index b2e2f4443384cfbdb9294aa6dde9cf7f34187bb1..1f36d6cacb0aa9fd93e38656cf2f6eaab847a4ba 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index ea7605c379153d9df273a2033d5532817d6e86ba..14780b9539754b2640b13fb742802fe01fc79e29 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 8deb9a0aa7af2273e8ac52b7f6e4306a6ef1a489..34c9954879f1df8ffdb5481cb49c5ba1b014c459 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 6d8490d2311aa0b935414b5356728fdfeb4b8362..e748bdcf4e6ed8be7652885d78a556eeea7070f8 100644 (file)
@@ -1,6 +1,6 @@
 ;/*\r
-; * FreeRTOS Kernel V10.2.1\r
-; * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+; * FreeRTOS Kernel V10.3.0\r
+; * Copyright (C) 2020 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
index b2af4a584b441b88b3b795b3d577366c7ba3c560..ff28134bef3ca74add39c06969456c49172e45ef 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 0d472963dfeb86753d4955571e27732722bfa8c2..4f4f551c53714aeaec284c7d14b933de96fff0c3 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e2ff864959a4223cda229e64b263d674610fabfe..9e554809fc3a34b74b6ccbd952da6df151b8a9b5 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 148ccf3334ce4b8c09d1ad873b273a1386974517..f0695b7e12c7f05282c4099fc3173f608c494dcb 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 73367ed6bb25bb6f610e388b5c02fff509ddc09d..aadbc02468f66facee2504ae0788ece7ebf59f57 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d26057f9a6dff07dfb1cd8bc23d07eeee199a3e7..6d56a462f18157c5cd669ad2ea6aa7f0d6e25f70 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index ffe68fba4bcbd10b0ca688268db61885eea036d7..d84614581e22d89e52d76586efe8d623dcf210a2 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index a73c5ed773719c78f9c64096a6d8ffc001093010..60b122b1608e946f47a17b471cf1426ea74b6216 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index ea325d81e9f07e43d84e9ca8ca0a5e5e218eeb26..6d0a233eac09cf745a93a6ee2eeabe446fb616e3 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 4a669c76e98aa1a210e4de57295ebdf63892d81e..d82a1dee829fb1638a6116c020257aaf82b02184 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 1b434fa6d3f89ec15265248585e66b60510950dd..15c1e4b481983bbb48a867b410d37b35c1bf8c99 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 799ec946ec717178e30cd5503072b888f8fee275..3c7548e10bf874e9aaa17ea88655724baf86f12a 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 424eb885dc956328fa9b762e5dc7595a2ba4168d..1711c79b3c1a2f4dee783bc4b3115e75898d75e9 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 99a7834d1daa439c9dc6bbfa65aa104a2907f506..f07c89e8282665c4854f3c9709230a19c4631457 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d1c40b13828002a9f8cf454efdb25675019116ac..04a154a7dd408566686bd6873a17f3b428d79316 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 5970f60f19b9464a52ef1474d31628c4a3670d5c..65b72ba5a0f0dce4ad0143dd246e987e554d7c44 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index bb258349034366030e6695f522228e62470763e1..e2ee01601d6fed4d2e1ca754cdbb67f1dec263a2 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index a818268a88cb7243b549a634747dd704975cc267..36bcc70ea6cc30684c81b47bf7479d680195d533 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 5970f60f19b9464a52ef1474d31628c4a3670d5c..65b72ba5a0f0dce4ad0143dd246e987e554d7c44 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index b662866c36b440a862ce12a5f00779d98a6f7297..c1c7c39fbb2d3e35ec1646f8a952136a10ea33d8 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f32be3655fc082c29aa58d3442583fedfdfb13f7..65d40ee5b8b1e1060b88234d208a65c0e6bc6334 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 89138f4aa071513ae623d6c2407db254d1cf7540..a875f61b282d26d0095ca8dc2d846920eaf6a248 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index a818268a88cb7243b549a634747dd704975cc267..36bcc70ea6cc30684c81b47bf7479d680195d533 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 5970f60f19b9464a52ef1474d31628c4a3670d5c..65b72ba5a0f0dce4ad0143dd246e987e554d7c44 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index b662866c36b440a862ce12a5f00779d98a6f7297..c1c7c39fbb2d3e35ec1646f8a952136a10ea33d8 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f32be3655fc082c29aa58d3442583fedfdfb13f7..65d40ee5b8b1e1060b88234d208a65c0e6bc6334 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 89138f4aa071513ae623d6c2407db254d1cf7540..a875f61b282d26d0095ca8dc2d846920eaf6a248 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 0add48286742b013885f0f0b412d626510ff6cc1..af744109e214cc71e2a51fdc9d92f9e16c6dc884 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index be2276bd0277bb1e4a4b6620bf992f8a3720629f..58ab8cf64a525d4c90cf62bf488fd1539e0fcd20 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 9c336cb347c28be00c635f60e790bd1e8d97e130..ce632a669510ae872356f1336459aad334e07a54 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 311e3f6521791d920f5c81e77dec0fe01e88cde4..c7754809a1181bcca72d4a2975a43e4eebaf30ee 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 89138f4aa071513ae623d6c2407db254d1cf7540..a875f61b282d26d0095ca8dc2d846920eaf6a248 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index dddb301d20967289c6603cfec840d8a3861d032b..f4a809d0392feb37ad9f39c1069a47e801717be8 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 795fcbd896fba2bf8c8fd801687870b57a94ce45..92bd61974424daccfd34a46b37e664a71ac36feb 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index cb6be850863ff6cec840bc224a0a2cd932a015bf..c26e60896b949bab5194d9e903250dc033261a1a 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d84023d80861475ba1a527087560288a483c2fed..2f5a5c18217c24fa5f8cdded7e85040f2e89d533 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 308b1b424359a7d3e9c6bd0e8c235dcb79180bcc..326a89837f050c81403fdf14665d9cb7b0059ec1 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 6534aa71f093fa4c37ad198264619328de9b63be..616ede2136531c07788afccb97a29daefdc62f09 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index fcc8246ac4786c65e0aca0d9fc5c4b0d2d83bd78..5caffa8bf0a8e3bc72711a7332bcc9b7328ec2e4 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c79a4ed7918391e1a31d57f1e2ce7185c8135804..6b04cfc35797b1775d18c36ccfbbaa4977e147ce 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 4766eb1326d26220318de5dcbef576d85a28877a..407664b6908bb4ef6f11e40214605f7a66bdc46c 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 01cdad968ca09ca9e220f3c958488dc4eea69ef0..401df1e0b88631f4cb03f5ae3037875cc348608f 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 8ab0a605c421895628aa59bbfc56fd4c387cf36f..2b72665bfa67051add860f8f8ee15a228556f467 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index a78e2b5fe07c98bbb3d7a625c1769d3089800eab..1528291b5bb7d5cf76e29ed62a9a5c6844ff765d 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index ed5cf6a383cdd80f0334a518bc6c8c1b2ac34282..3644ba0f8145fa581fb97afbaf15b8fe8e8843c6 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 903fa6e535dcd699289e33e6a34612c780aaca1c..0cc45ac8246846816138ff62a13255671a6f4a46 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index b716d745fd12502e5e88c8848465ac2c9b2cffed..e26d6721e0019c49c7bd74d746003cde2009e281 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 3421055d49315205a66623806f27916fc5e09a8e..521a2b2f62996b7e6a17c6eee447cd011b4b9eaa 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 5bbb55b0d02f4e2cddc4982f29f98b8194cb2372..236ebf322962b55b0655d03363b876ddc0065d2a 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index a237c1086e2c8eb4773046bf26ffb5bec012c52b..023ccca6d4994279bf5bed9f33e969480421e648 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 980a978b9cd774aef0826c18248490da5ef231f5..bc9039117654cce039504c70c3991c14d0493d09 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 7394bdbd704bde579cab9f5dd02714bc17077aa8..da9836c51e4f8ac49d4ef334fee660327e4232b2 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index fe63c0ee0a2b925600377a11fa86cc53b052b82d..c113bb0dead3b47358c9adddf35478afe512c8a3 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index a5adc6f234bebe2eabda3a53a3312cb454a103af..ee8bdef89aec81ce7ff52b7d2e9dd0871d952031 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 946d25a56ef7ed896850bf75ea6a629641ce16cb..3eb1bc8760d2cfa82622abbbfe3fe24f80e0d499 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 71ac2bbb93b3b56aa8d0db7e8fc7f429a7caf585..63e926ac48e5f968839e30881d320840a15bcda3 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 8643e3ea50bb2aff8801d190695e2f9e3f1486c1..902ad87a968fa4ec19b4edfe57ce886c80694865 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 2f395461dbe7bca5746ff8ebda8c641719afcf2a..bd5b33a9d165a157fb46c5035c47563771a44081 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index b6163bb76743d17d61e3b9e3b381c3b4992e18db..6377fb60dd8f25534f9a6c5f4ed9242e93adef2d 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 6cf0ddbe31f9a9dfed27b36c226b8e03401fd42d..f3abcf9b58a1c8f53b74e44c6480b8f42559d57a 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 10a7e59eba7f1e06bf5e76543490ec7e90d9b53f..bf645bcaa1170984da211bf05f0f8d8b25dcf0ae 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 2de6b8fa633acd77ec575e01b3ea7aaadd42c2e3..094393f1343520ea224dd30d5f4a014d08632b4a 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 6ccb20e2ee8eb8eed17f2ffa3d72666e9c6c85c0..2b5a35bb2490b711961520c70b6aa10bd6ff5cc0 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 6d81f1b4febdb99642376b0abc1ae5fc40560690..8b99185a32feb9055461730661874b8dd63e1da5 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f91570dc7bce2cb84e6ecd641ee902c376df5103..42089150cc9322e65cdb1c4fd9e4bb9a9a0c03f8 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 7384cffec00aa8aa203edea6c8b9b5411ca3a3ac..8074b1296e24868260588fa461dd6830fb526769 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 86748ca951a346337197551f7894ce7a1aaea7f5..ce8f1b15cd415ad30addffea470aed90bd60352e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 1e698b91f0f6f2423e9d20c58728c236a040e519..ebdf0527145aff3e53abc01f9fcb3c9689ce7ece 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f8f096e80c74e2043e61535bc78f9a7e20dca483..3d28c10365bfd2b26389d929e6b11a8b3fadad36 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 483edfc1060eb2848b2e317ea2ff52029ea62e77..16a7870cb44559915be14ccdb8ae5449b30c1961 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d397ff62a5c5df55b0e806ac78c83c873285f2f6..e92f40a2c4ba3eb27eb14b3f835524eb38c8a6b1 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f2289fd56810a354943de41b4498adfa069e09f8..2d913be882cb16825872e487b8e329be1e3512ee 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f55669acd170363502a8781ef2142b491194695a..34bd7bf41a784cdfb71272b2dcb056effee6c936 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 86748ca951a346337197551f7894ce7a1aaea7f5..ce8f1b15cd415ad30addffea470aed90bd60352e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 18598007a7088fc9398f3a87c19605b775700a10..9b3fe510829ed6d8b4cbaac8cf2e17e89b158c5a 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 6dea6db9dd917e14ac62d0a20cb55e467a08d1b9..2d9516ff3aeee725b3d29c816c306c41a29bccbd 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e6240276194ff3efed92bfb6c9f8afd6a3d8924a..ece6a5a727d55fe6ef32423671d283cc0b72e05a 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 9bf2b59db28b22322d66a5a964827701476a0d69..0e3b563ea956e727b359e00577d2e2df09c8744e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 45642303e9f86c39ffce38622b11d25533686aa8..fbc0372eb2a7f6431120ba07d1d3b467e9257448 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 7d42da48a5ebb0340f61f051ccd57cf43f5c1c60..5d8d86f301d21f82b4293df07c4b001e8b38e180 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f3277ab2945ba16cac113d209d6b1474dfaeb3a2..fe390890f96e11e9f1776539658226a2c02cac45 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 63e10915994ed55d7f2c43ad77eda65fb02ebcd2..b3ea3a0571cf3dfe891d0f1f883aa2a31a652547 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 169ab484e050eeffe87993b61ca02221bffd930c..0c1708f5bbeed05a4cad7d3b1cd823541b53eef2 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 6019c7c4bde2e8e39338d1f1ad06b64be289c4b1..8852498c7fc54c7f1001c6df026000bcfc6a5838 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 7bc65f519195a755fef132df4a497ba6eb13a46a..b5f64ee4a41b2f0cd4be465d874d480215042cba 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 1311eb62cad49ed8e3379406ec23b03810a76442..979ed64e40ccfeb0a47e4b1d3430ba33ba63a5e3 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 1e0ec99280371a29fe09fd9637e1099ee374c4bb..4ffa1932105a45096073b3f8f1b9b8fe4c7a59c4 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 1a56a6949135c8761045876ab4a061070f3c3db3..d0ce67021d0f8129428d96a0b65644e3f2e8d4ca 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index b1c6b13d5406956af0204b984283b34152bc4137..f501979df5a4a9a9ae925297f33c93abdaceb3e6 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index cc7787800e398e10f8963fed049e209cff637c8d..736ef758b04c873ee52c5b4d6fc33a194ad5f4d8 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 787609fc9cbe8f47c9b6cb48bbce7782838341e1..063652d13564e1e1c96b4c12ae552c10bcba89af 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 382bf2a6559c7641e2ca07912c12880dc35a6ed3..97422e9a98264cd3cc3721f2e3ee54647d3199b9 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 65d0104e8d9dd341ea31dbfd9675e927bde27b5e..d00347ad9ffa18f672e7f4d243ab2c92dcc0ffcf 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 96607860deb1a76f128b9ca992e646cd9fd8a305..df338ab2a6fcf29fa5cb4d471a9988722aff1410 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 21b2d7769da04b53297b599e5e105c6593da26ab..0cf8c2b79b239e8ebec0d06d4ccaff0fcf80f04d 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index b9022333ffd04f08332b06c3b80735af165c477d..ec468ea27026022191c7d53e4c2a1d552cb540c1 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d6e823e5a7eaf02601c8d2f864b190e167d3f753..f449a37d31eb9775a78892ea92c6b9f89cc4d8ae 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 884f719a38bf8e83d9277dc987ab9bdc815dbe38..effedfad889e6f7ab338297c567c8512cb26a190 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 2417844267b47ae6d7e39a1d2891a048fc8d74ef..abb2fa02fb78089cfc4c1986c856217e1e06a5be 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index ef52b2fd173ca843d2f84879ea9c5a6ed42bd480..73f392b1ece8de87c5b2039fcc647bad285287bb 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f24dd071e7af90d76cf7a128417dea084940825c..dea876a6bfc471a1a790383015daae4519461000 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f1820b9a7410828398ab6217bae6676fc6d79b65..55b21d2f2c00261f9f3698fe5e885fb7b4011cee 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 5b1dea541803e80e8d8e8f21070e40f6e8af62bd..f0dc2d368e51c40a4dc07e658c7a1403b72eb97e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index ad34a50e53d68d0695d5eb5bb853162d647269dc..507006c2c5d84643fb2ce5358403f2e962643827 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e5e57d43cf26573c6598db72bd6a184f6415ada5..0782f0588412f38c051f35933a387902d1dff83d 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 32e6777314a885bacf0b6be60a9af187b8c0e74e..f08713d5d358106ec5eafdf955fdf8b439591b14 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 3eac259cfdec207b5b251d658a7016a8b6a6ca28..49546ce96a3ae72ae6952818dae43138bccb4213 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 997d1d74004dfeaa9e7e2a654b13e47f84e5bc63..6cff87d2fe9ddf92deda95cd1f7b9545c85bf68d 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 8ee87051fe3a0a88d3500431b0d389331e3b8182..1afdde76083640c07c173f486fc6a36792a8fbbf 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 29478819a141747086bcda190d780a01faffdc02..9df78c4672f0c6665082304c8353683864493831 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 9abf824fc8bf988f6caae6a54c26d25df2a1b67f..92282fe26bdb7c75bccc395ff4a668c6f9a89835 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 3c4de38cf2d429775af55000667aa429cdb789c1..fe9c77091e03ab32090f7b97f2379465e94bc447 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 286725daca16367fb8a9b4b2cabae25af283b439..6ff05e87ab9dffe5598e599319e09b4a73c3c610 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 5f49369d155399c005ffb487da4824e36c641e04..70eafaf8a43044484abbe3bab460c0a67acde469 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 23f553b55e11e3efba521f0e14583378dfce91da..4acb2d1db06bbd8645144ea30fc4f5483131cac4 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 6069ada4001f9b5b11cf54c41cb78e70d2810c3d..576e247e08a6461ae4896d3a65cf117711f9bd84 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index b2fa8980acff44a50d7900cf1e783a78eea08d12..aff60e59af6b73ec971ee358874750b9416d31a8 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 26ccdf04f411a627ca00e9d6c31e2550875355f9..4e613e8903794af860846baf4b95e067a1908fd6 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 58a70a48bda28400aa2be3e27393897f3f7be17d..c0bf488b01b12a9ccef6e16fdb582aa80c3d8ca3 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 5a244ba65d1c709971ce892b1ea5eef76bb0fea4..e353615e91ef12ec3e8bcdbc01b4a0115ca9c767 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 186b97f727843efab8bbe1f84e76ae26b0ab16de..63e61a6cde0777dbe373ccdac6fcb40b6b6bf370 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 25b6eab22e7bb0e9342e6357891a46d4855c5e5a..bacae5938c3fdb5296b7a655ebf602124ce5a764 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index a2d4ed2e4c74f9b83f0ad599e261d4ddd2b4f5cd..81fd493080d119d37ecaeca39dbbd428138725ae 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 84c53a78c4c7781024a29a3412f02ac7dae1bcdd..7303d598edab6f2202bf6bf0e1f6a08fc7e45b7f 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 6feaed35379589b5431ea0e7974a94bf631a9f96..04e5677cdfa8c55b1e83a367bbe77c89562e94e7 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 1570c4b9b0e66bf58ffbb8a834835306f61f1a8d..00496b1a5c006501da6db8a931ec99f344757c17 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 7b2ffba3a5cf453eed430abde138ff9fcac5357e..130ecf939f3445e4241ba21fcacbb432529aa1f0 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 114bdf38a3c99c5087751d5733d21339cd30400c..6887a50ffde44eab3304dc825885af887c6f58a7 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index bebadc59b3c1da95a6b2dd7eb5d428dc0a58d8f5..f2ba2068bd5a351a113b3aea882e1d43f5126068 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 30792a72f6c983f032b85f094f442a066b5a1ff4..91e963902a3d551466b95da3819009544b01442b 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 18265ef88cab7e724bce9d8fa5179891daefc29b..200661cd0b7853d3bd41f993363febd73ad8ae78 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 4080e99a5dea2e3a95479bc1170828ed27853eba..06ef0605f97a1e5bc4ec39041ea96bc107614cfc 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 9429707406a4f87220eabcea35801317af744dfe..a58addfdd6720797ca4a8db475aaeda17e7a13ea 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 3b532a614441016cc2dbadb342c89f7cd471f622..2ba7c7cb848ab52fdc7fad17bf2efd0d91f2c1dd 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 2005825650528fd788b618c75de405c949f0d83f..ba4f065c20388b2f63ac6c2496606ed0f30448c1 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 89a7c55cfb5a5d458dd278a6a85b1240be22db67..d7175cc47bb4f64c32469d33e170ac21f97c3fb1 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index b18ee555aa0588676dd28c8a8997a295d2735e23..88d66413fbf5ab6708ccabaf4ed1722354a2b713 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 5d2e3fdd93222857eb483c0964d226b12edca65d..dcdf95ac53510c887021bc46b1b8ecf1a738f279 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index a628063fa53126e9a48760f4356a7731a6ee0501..280fe97b87cc0899564f78410cfa340234a52f32 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index cbdd1866cebc59d23ffa9a53ec418c7d00297ac1..b00ee088af80269a2e6879ee71125b4a5630144a 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 4f1090c348341a759141bec4b61f175dab5f0838..e5b8513b842dc1c21891a5d4e24dfa66b2164ac7 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 775eb7b681cc8e14897a39bd25f052467d040f97..da8a2bed3f4231a2fee625899cf30abe8ef2ffce 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 130a13f2b0e31c5b1f6f926970d60020ee227a09..e76e35a6498e40baa7ee56b98b0413329ce71b04 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 9327872adc268c82fbe80d3a1d76c56360573efa..cf36e03d1ff566184ca7b457fe2ae4c2b60768d6 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 24914fc0f5d8b72a017907d2a687aab03417edfb..050895abbed23f56c09c6fa69b70d50601bf3cdf 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 9ad8d5e00ce42d3caebe5524d247fd6013cb390c..e5636b7204f0b891d999fef10f7c80ee1b5d77b0 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f3101e7cf5a6717bc83556226dc89f40d1bfc636..a9eabd24cef3b984df82a04af41292f12051425d 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 76223b7a16739e991ad097e27d94df3f32b48ef0..891ca53c79c3e9c96399ccbde13846cfd539539d 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 0607f2b5ba100acda37d808e8d19b2fb4ab43787..9699a15cb8f8ad1a67702024a9a3ee0f2b2c6d3e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 397236183897b3164e18487818cbd52674c4557a..89b95115f89f9243725b9313f6f390945cc1ae38 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f9291b6cc3e5dde69bd64aebf168702b9a0af561..4b7619582fa0f075c754bd36b0f40344f364ac61 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 644faae4ea0c9baed1c0484967cc6d3d1ebf39e8..4bb0b0532102777dd5d1e94544fc07ae88b319e9 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f4b8988d7b817f7f9851fd854010273a05b004a7..7ecd9ef15d3d644b9871ac6dd51971e6f56ccd05 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 85209fc7a5a212a623ed445e2e4881d9134d1650..eae878e37a05c24bb9f8740d82d9759e11cf6848 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c6213c6df917c45a5cb14565af64f3ef0e77b861..8552bf8b12010903bea40216ef8101d3e9ad46e2 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index b90ce406741fce3c7dafc802b8cedee6f075eefc..ca64c2a97dda13de643bbc54384522045bb76a0f 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 747a5646442e206e41b6faa75f58c410933f615f..51dcbf24b9a7edf51c152dc8eb046379582fdb57 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 88a1efed6dd030cd801335ccddb8564d6d248a1f..2ac631a3a09b9a3b200dbbe0f2ea517c5c704333 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index a61e5a577bb51bda58b66ff7e6700db13b6e6bcb..b319120096a8cd75164c9edd5a8cddace3a68e7b 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 7e7f436460da5cb5c5588c803884c31863257d09..1a20822daab6601609b4808c5bab552f59afae92 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c1c53624bb67d4e49689772e03a271b10ab80812..30d56b6438269642d31483183488f18df9cddfb0 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 4d5f8525a2116d9cb7182f13675b6927cfa86d29..54d3e43de2d1eba860f39de381993f63f51a3be9 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index cbe3e67febefbe3351c7be9c52067d436b379905..deccda90451897840ce2c58717eb05b067140bea 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 29088b950e44607098bd32f76da4c39f4812ad86..04eb4d5daeb494f073ee2ddaaf6139960a6e8a3a 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 679c3797605813a6ecae14c1e1e727baaf539523..44a48caf1277fbc2696f0ee38dbf444434ba740e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index b7a5bb044c1167d428f09b8eae871e5fe2f13229..3b42141ef77539a6e1df5e964ea53847b0602e85 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 9c4fbcd18bcd3f625d977b284a87fba9f9d151c6..173184b055d99969db57e0e0b8f51f4139394073 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 3b655fec978171a5d40ef608ca8a1e0cc1fdbbc6..1d00cafc4652a41d60e54d721dad90d4d0c88fe1 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 4f88b8cca686e49d17878f9043c3e284f77f14d6..8aef80bb54975b43f40d46caa9e431d10ee7a890 100644 (file)
@@ -1,6 +1,6 @@
 #/*\r
-# * FreeRTOS Kernel V10.2.1\r
-# * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+# * FreeRTOS Kernel V10.3.0\r
+# * Copyright (C) 2020 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
index 40551cb48406f0a62cfe8265a0301152731d5569..beade909f9a617f420a062b6ffc55348aca77d5d 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e148cae786ffeaa1a3c429adfbd13f8a2d570092..2f5123bfb796ffbc262694316deaeec86cb9e84e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 712f7a7356f6a77f3068305fea7cc41b57158789..349ae4536b6583add338bf83353f3a08deb67f43 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 8abe28dc1ad63a51f38b4a1a4c9d18c791e0e2f0..03b09e52f3dacfdae135bd9e32f4aaca02ed627a 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d0e54c0a32fbf13be72336bcd4f09ed2167753d1..9c830c5e85d4972001702e976697b593604cedb9 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index b1cb9321147b204e8e86b16da011f7ccc5d0208e..8f0ae18905ebbc97ce4bdb45114c5fcc1a55cb5b 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e3decdcc55455d0341796e98122d847e7c8bc669..71f9483e88db1fa23b121cbf35a2f49cf8a2144b 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 37cc81fa240e6eca70763ade00a74a9b8656b09e..4a87a3dbe93cc45af3ba74a704cb1a8ebe72bcfd 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 83208fcc860ad35d23e647f3c437774c3b1d3d69..1af9bbbfab4e1ae5f292a3f0382119617372a6e2 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index b551bf105b9289dbedadd628bd3bb2f859d61560..8d9fdb9435bb06eaab2cba84f3ddddff8817a2ec 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 06347de17e2234b5a6d3c480e91d40b1232be7b3..90b5f3a131b5ef207959c364bcca6b31f8759c91 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 9a1fb2ea30b992224368cd175b1efd52fb4da90b..a77e31999eab9c160e6531f24b4dbde62525c995 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index a570302ff17c10d88f36665e595c3810a07ab274..4b2ec8c84c8abdff35f7917a2909f874db24ad7e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
diff --git a/FreeRTOS/Demo/HCS12_CodeWarrior_banked/CODE/COM0.C b/FreeRTOS/Demo/HCS12_CodeWarrior_banked/CODE/COM0.C
deleted file mode 100644 (file)
index e575af4..0000000
+++ /dev/null
@@ -1,205 +0,0 @@
-/** ###################################################################\r
-**     THIS BEAN MODULE IS GENERATED BY THE TOOL. DO NOT MODIFY IT.\r
-**     Filename  : COM0.C\r
-**     Project   : RTOSDemo\r
-**     Processor : MC9S12DP256BCPV\r
-**     Beantype  : AsynchroSerial\r
-**     Version   : Bean 02.231, Driver 01.08, CPU db: 2.87.283\r
-**     Compiler  : Metrowerks HC12 C Compiler\r
-**     Date/Time : 19/06/2005, 15:07\r
-**     Abstract  :\r
-**         This bean "AsynchroSerial" implements an asynchronous serial\r
-**         communication. The bean supports different settings of \r
-**         parity, word width, stop-bit and communication speed,\r
-**         user can select interrupt or polling handler.\r
-**         Communication speed can be changed also in runtime.\r
-**         The bean requires one on-chip asynchronous serial channel.\r
-**     Settings  :\r
-**         Serial channel              : SCI0\r
-**\r
-**         Protocol\r
-**             Init baud rate          : 38400baud\r
-**             Width                   : 8 bits\r
-**             Stop bits               : 1\r
-**             Parity                  : none\r
-**             Breaks                  : Disabled\r
-**\r
-**         Registers\r
-**             Input buffer            : SCI0DRL   [207]\r
-**             Output buffer           : SCI0DRL   [207]\r
-**             Control register        : SCI0CR1   [202]\r
-**             Mode register           : SCI0CR2   [203]\r
-**             Baud setting reg.       : SCI0BD    [200]\r
-**             Special register        : SCI0SR1   [204]\r
-**\r
-**         Input interrupt\r
-**             Vector name             : INT_SCI0\r
-**             Priority                : 1\r
-**\r
-**         Output interrupt\r
-**             Vector name             : INT_SCI0\r
-**             Priority                : 1\r
-**\r
-**         Used pins                   : \r
-**             ----------------------------------------------------\r
-**               Function | On package |    Name\r
-**             ----------------------------------------------------\r
-**                Input   |     89     |  PS0_RxD0\r
-**                Output  |     90     |  PS1_TxD0\r
-**             ----------------------------------------------------\r
-**\r
-**\r
-**         Used baud modes             :\r
-**             ----------------------------------------------------\r
-**               No. |    Mode ID      |  Baud rate\r
-**             ----------------------------------------------------\r
-**                0  |  Bm_38400baud   |  38400baud\r
-**                1  |  Bm_19200baud   |  19200baud\r
-**                2  |  Bm_9600baud    |  9600baud\r
-**                3  |  Bm_4800baud    |  4800baud\r
-**             ----------------------------------------------------\r
-**     Contents  :\r
-**         SetBaudRateMode - byte COM0_SetBaudRateMode(byte Mod);\r
-**\r
-**     (c) Copyright UNIS, spol. s r.o. 1997-2002\r
-**     UNIS, spol. s r.o.\r
-**     Jundrovska 33\r
-**     624 00 Brno\r
-**     Czech Republic\r
-**     http      : www.processorexpert.com\r
-**     mail      : info@processorexpert.com\r
-** ###################################################################*/\r
-\r
-/* MODULE COM0. */\r
-\r
-#pragma MESSAGE DISABLE C4002 /* WARNING C4002: Result not used is ignored */\r
-#pragma MESSAGE DISABLE C4301 /* INFORMATION C4301: Inline expansion done for function call */\r
-\r
-#include "COM0.h"\r
-#include "TickTimer.h"\r
-#include "Byte1.h"\r
-\r
-/* Definition of DATA and CODE segments for this bean. User can specify where\r
-   these segments will be located on "Build options" tab of the selected CPU bean. */\r
-#pragma DATA_SEG COM0_DATA             /* Data section for this module. */\r
-#pragma CODE_SEG COM0_CODE             /* Code section for this module. */\r
-\r
-\r
-#define OVERRUN_ERR      1             /* Overrun error flag bit   */\r
-#define FRAMING_ERR      2             /* Framing error flag bit   */\r
-#define PARITY_ERR       4             /* Parity error flag bit    */\r
-#define CHAR_IN_RX       8             /* Char is in RX buffer     */\r
-#define FULL_TX          16            /* Full transmit buffer     */\r
-#define RUNINT_FROM_TX   32            /* Interrupt is in progress */\r
-#define FULL_RX          64            /* Full receive buffer      */\r
-#define NOISE_ERR        128           /* Noise erorr flag bit     */\r
-#define IDLE_ERR         256           /* Idle character flag bit  */\r
-#define BREAK_ERR        512           /* Break detect             */\r
-\r
-static word SerFlag;                   /* Flags for serial communication */\r
-                                       /* Bits: 0 - OverRun error */\r
-                                       /*       1 - Framing error */\r
-                                       /*       2 - Parity error */\r
-                                       /*       3 - Char in RX buffer */\r
-                                       /*       4 - Full TX buffer */\r
-                                       /*       5 - Running int from TX */\r
-                                       /*       6 - Full RX buffer */\r
-                                       /*       7 - Noise error */\r
-                                       /*       8 - Idle character  */\r
-                                       /*       9 - Break detected  */\r
-                                       /*      10 - Unused */\r
-static word PrescHigh;\r
-static byte NumMode;                   /* Number of selected baud mode */\r
-\r
-\r
-/*\r
-** ===================================================================\r
-**     Method      :  HWEnDi (bean AsynchroSerial)\r
-**\r
-**     Description :\r
-**         This method is internal. It is used by Processor Expert\r
-**         only.\r
-** ===================================================================\r
-*/\r
-static void HWEnDi(void)\r
-{\r
-    SCI0CR2_TE = 1;                    /* Enable transmitter */\r
-    SCI0CR2_RE = 1;                    /* Enable receiver */\r
-    SCI0CR2_RIE = 1;                   /* Enable recieve interrupt */\r
-}\r
-\r
-/*\r
-** ===================================================================\r
-**     Method      :  COM0_SetBaudRateMode (bean AsynchroSerial)\r
-**\r
-**     Description :\r
-**         This method changes the channel communication speed (baud\r
-**         rate). This method can be used only if you specify a list\r
-**         of possible period settings at design time (see <Timing\r
-**         dialog box> - Runtime setting - from a list of values).\r
-**         Each of these settings constitutes a mode and Processor\r
-**         Expert^[TM] assigns them a mode identifier. The prescaler\r
-**         and compare values corresponding to each mode are\r
-**         calculated at design time. You may switch modes at\r
-**         runtime by referring only to a mode identifier. No\r
-**         run-time calculations are performed, all the calculations\r
-**         are performed at design time.\r
-**     Parameters  :\r
-**         NAME            - DESCRIPTION\r
-**         Mod             - Timing mode to set\r
-**     Returns     :\r
-**         ---             - Error code, possible codes:\r
-**                           ERR_OK - OK\r
-**                           ERR_SPEED - This device does not work in\r
-**                           the active speed mode\r
-** ===================================================================\r
-*/\r
-byte COM0_SetBaudRateMode(byte Mod)\r
-{\r
-  static const word COM0_PrescHigh[4] = {41,81,163,326};\r
-\r
-  if(Mod >= 4)                         /* Is mode in baud mode list */\r
-    return ERR_VALUE;                  /* If no then error */\r
-  NumMode = Mod;                       /* New baud mode */\r
-  PrescHigh = COM0_PrescHigh[Mod];     /* Prescaler in high speed mode */\r
-  SCI0BD = PrescHigh;                  /* Set prescaler bits */\r
-  return ERR_OK;                       /* OK */\r
-}\r
-\r
-/*\r
-** ===================================================================\r
-**     Method      :  COM0_Init (bean AsynchroSerial)\r
-**\r
-**     Description :\r
-**         This method is internal. It is used by Processor Expert\r
-**         only.\r
-** ===================================================================\r
-*/\r
-void COM0_Init(void)\r
-{\r
-  PrescHigh = 41;                      /* Precaler in high speed mode */\r
-  SerFlag = 0;                         /* Reset flags */\r
-  NumMode = 0;                         /* Number of selected baud mode */\r
-  /* SCI0CR1: LOOPS=0,SCISWAI=1,RSRC=0,M=0,WAKE=0,ILT=0,PE=0,PT=0 */\r
-  SCI0CR1 = 64;                        /* Set the SCI configuration */\r
-  /* SCI0SR2: ??=0,??=0,??=0,??=0,??=0,BRK13=0,TXDIR=0,RAF=0 */\r
-  SCI0SR2 = 0;                         /* Set the Break Character Length and Transmitter pin data direction in Single-wire mode */\r
-  SCI0SR1;                             /* Reset interrupt request flags */\r
-  /* SCI0CR2: SCTIE=0,TCIE=0,RIE=0,ILIE=0,TE=0,RE=0,RWU=0,SBK=0 */\r
-  SCI0CR2 = 0;                         /* Disable error interrupts */\r
-  SCI0BD = PrescHigh;                  /* Set prescaler bits */\r
-  HWEnDi();                            /* Enable/disable device according to status flags */\r
-}\r
-\r
-\r
-/* END COM0. */\r
-\r
-\r
-/*\r
-** ###################################################################\r
-**\r
-**     This file was created by UNIS Processor Expert 03.33 for \r
-**     the Motorola HCS12 series of microcontrollers.\r
-**\r
-** ###################################################################\r
-*/\r
diff --git a/FreeRTOS/Demo/HCS12_CodeWarrior_banked/CODE/COM0.H b/FreeRTOS/Demo/HCS12_CodeWarrior_banked/CODE/COM0.H
deleted file mode 100644 (file)
index 3f0e99a..0000000
+++ /dev/null
@@ -1,191 +0,0 @@
-/** ###################################################################\r
-**     THIS BEAN MODULE IS GENERATED BY THE TOOL. DO NOT MODIFY IT.\r
-**     Filename  : COM0.H\r
-**     Project   : RTOSDemo\r
-**     Processor : MC9S12DP256BCPV\r
-**     Beantype  : AsynchroSerial\r
-**     Version   : Bean 02.231, Driver 01.08, CPU db: 2.87.283\r
-**     Compiler  : Metrowerks HC12 C Compiler\r
-**     Date/Time : 19/06/2005, 15:07\r
-**     Abstract  :\r
-**         This bean "AsynchroSerial" implements an asynchronous serial\r
-**         communication. The bean supports different settings of \r
-**         parity, word width, stop-bit and communication speed,\r
-**         user can select interrupt or polling handler.\r
-**         Communication speed can be changed also in runtime.\r
-**         The bean requires one on-chip asynchronous serial channel.\r
-**     Settings  :\r
-**         Serial channel              : SCI0\r
-**\r
-**         Protocol\r
-**             Init baud rate          : 38400baud\r
-**             Width                   : 8 bits\r
-**             Stop bits               : 1\r
-**             Parity                  : none\r
-**             Breaks                  : Disabled\r
-**\r
-**         Registers\r
-**             Input buffer            : SCI0DRL   [207]\r
-**             Output buffer           : SCI0DRL   [207]\r
-**             Control register        : SCI0CR1   [202]\r
-**             Mode register           : SCI0CR2   [203]\r
-**             Baud setting reg.       : SCI0BD    [200]\r
-**             Special register        : SCI0SR1   [204]\r
-**\r
-**         Input interrupt\r
-**             Vector name             : INT_SCI0\r
-**             Priority                : 1\r
-**\r
-**         Output interrupt\r
-**             Vector name             : INT_SCI0\r
-**             Priority                : 1\r
-**\r
-**         Used pins                   : \r
-**             ----------------------------------------------------\r
-**               Function | On package |    Name\r
-**             ----------------------------------------------------\r
-**                Input   |     89     |  PS0_RxD0\r
-**                Output  |     90     |  PS1_TxD0\r
-**             ----------------------------------------------------\r
-**\r
-**\r
-**         Used baud modes             :\r
-**             ----------------------------------------------------\r
-**               No. |    Mode ID      |  Baud rate\r
-**             ----------------------------------------------------\r
-**                0  |  Bm_38400baud   |  38400baud\r
-**                1  |  Bm_19200baud   |  19200baud\r
-**                2  |  Bm_9600baud    |  9600baud\r
-**                3  |  Bm_4800baud    |  4800baud\r
-**             ----------------------------------------------------\r
-**     Contents  :\r
-**         SetBaudRateMode - byte COM0_SetBaudRateMode(byte Mod);\r
-**\r
-**     (c) Copyright UNIS, spol. s r.o. 1997-2002\r
-**     UNIS, spol. s r.o.\r
-**     Jundrovska 33\r
-**     624 00 Brno\r
-**     Czech Republic\r
-**     http      : www.processorexpert.com\r
-**     mail      : info@processorexpert.com\r
-** ###################################################################*/\r
-\r
-#ifndef __COM0\r
-#define __COM0\r
-\r
-/* MODULE COM0. */\r
-\r
-#include "Cpu.h"\r
-\r
-#define COM0_Bm_38400baud         0    /* Constant for switch to mode 0 */\r
-#define COM0_Bm_19200baud         1    /* Constant for switch to mode 1 */\r
-#define COM0_Bm_9600baud          2    /* Constant for switch to mode 2 */\r
-#define COM0_Bm_4800baud          3    /* Constant for switch to mode 3 */\r
-\r
-\r
-\r
-#ifndef __BWUserType_tItem\r
-#define __BWUserType_tItem\r
-  typedef struct {                     /* Item of the index table for possible baudrates */\r
-    word div;                          /* divisior */\r
-    byte val;                          /* values of the prescalers */\r
-  } tItem;\r
-#endif\r
-#ifndef __BWUserType_COM0_TError\r
-#define __BWUserType_COM0_TError\r
-typedef union {\r
-  byte err;\r
-  struct {\r
-    bool OverRun  : 1;                 /* OverRun error flag */\r
-    bool Framing  : 1;                 /* Framing error flag */\r
-    bool Parity   : 1;                 /* Parity error flag */\r
-    bool RxBufOvf : 1;                 /* Rx buffer full error flag */\r
-    bool Noise    : 1;                 /* Noise error */\r
-    bool Break    : 1;                 /* Break detect */\r
-    bool Idle     : 1;                 /* Idle characted */\r
-  }errName;\r
-} COM0_TError;\r
-#endif\r
-#ifndef __BWUserType_TDirection\r
-#define __BWUserType_TDirection\r
-  typedef enum {                       /*  */\r
-    TXD_INPUT,\r
-    TXD_OUTPUT\r
-  } TDirection;\r
-#endif\r
-\r
-#ifndef __BWUserType_COM0_TComData\r
-#define __BWUserType_COM0_TComData\r
-  typedef byte COM0_TComData ;         /* User type for communication. Size of this type depends on the communication data witdh. */\r
-#endif\r
-\r
-#pragma CODE_SEG COM0_CODE             /* Code section for this module. */\r
-\r
-byte COM0_SetBaudRateMode(byte Mod);\r
-/*\r
-** ===================================================================\r
-**     Method      :  COM0_SetBaudRateMode (bean AsynchroSerial)\r
-**\r
-**     Description :\r
-**         This method changes the channel communication speed (baud\r
-**         rate). This method can be used only if you specify a list\r
-**         of possible period settings at design time (see <Timing\r
-**         dialog box> - Runtime setting - from a list of values).\r
-**         Each of these settings constitutes a mode and Processor\r
-**         Expert^[TM] assigns them a mode identifier. The prescaler\r
-**         and compare values corresponding to each mode are\r
-**         calculated at design time. You may switch modes at\r
-**         runtime by referring only to a mode identifier. No\r
-**         run-time calculations are performed, all the calculations\r
-**         are performed at design time.\r
-**     Parameters  :\r
-**         NAME            - DESCRIPTION\r
-**         Mod             - Timing mode to set\r
-**     Returns     :\r
-**         ---             - Error code, possible codes:\r
-**                           ERR_OK - OK\r
-**                           ERR_SPEED - This device does not work in\r
-**                           the active speed mode\r
-** ===================================================================\r
-*/\r
-\r
-#pragma CODE_SEG __NEAR_SEG NON_BANKED /* Interrupt section for this module. Placement will be in NON_BANKED area. */\r
-__interrupt void COM0_Interrupt(void);\r
-#pragma CODE_SEG COM0_CODE             /* Code section for this module. */\r
-/*\r
-** ===================================================================\r
-**     Method      :  COM0_Interrupt (bean AsynchroSerial)\r
-**\r
-**     Description :\r
-**         This method is internal. It is used by Processor Expert\r
-**         only.\r
-** ===================================================================\r
-*/\r
-\r
-\r
-void COM0_Init(void);\r
-/*\r
-** ===================================================================\r
-**     Method      :  COM0_Init (bean AsynchroSerial)\r
-**\r
-**     Description :\r
-**         This method is internal. It is used by Processor Expert\r
-**         only.\r
-** ===================================================================\r
-*/\r
-\r
-\r
-#pragma CODE_SEG DEFAULT               /* Change code section to DEFAULT. */\r
-\r
-/* END COM0. */\r
-\r
-/*\r
-** ###################################################################\r
-**\r
-**     This file was created by UNIS Processor Expert 03.33 for \r
-**     the Motorola HCS12 series of microcontrollers.\r
-**\r
-** ###################################################################\r
-*/\r
-\r
-#endif /* ifndef __COM0 */\r
diff --git a/FreeRTOS/Demo/HCS12_CodeWarrior_banked/CODE/_COM0.C b/FreeRTOS/Demo/HCS12_CodeWarrior_banked/CODE/_COM0.C
new file mode 100644 (file)
index 0000000..e575af4
--- /dev/null
@@ -0,0 +1,205 @@
+/** ###################################################################\r
+**     THIS BEAN MODULE IS GENERATED BY THE TOOL. DO NOT MODIFY IT.\r
+**     Filename  : COM0.C\r
+**     Project   : RTOSDemo\r
+**     Processor : MC9S12DP256BCPV\r
+**     Beantype  : AsynchroSerial\r
+**     Version   : Bean 02.231, Driver 01.08, CPU db: 2.87.283\r
+**     Compiler  : Metrowerks HC12 C Compiler\r
+**     Date/Time : 19/06/2005, 15:07\r
+**     Abstract  :\r
+**         This bean "AsynchroSerial" implements an asynchronous serial\r
+**         communication. The bean supports different settings of \r
+**         parity, word width, stop-bit and communication speed,\r
+**         user can select interrupt or polling handler.\r
+**         Communication speed can be changed also in runtime.\r
+**         The bean requires one on-chip asynchronous serial channel.\r
+**     Settings  :\r
+**         Serial channel              : SCI0\r
+**\r
+**         Protocol\r
+**             Init baud rate          : 38400baud\r
+**             Width                   : 8 bits\r
+**             Stop bits               : 1\r
+**             Parity                  : none\r
+**             Breaks                  : Disabled\r
+**\r
+**         Registers\r
+**             Input buffer            : SCI0DRL   [207]\r
+**             Output buffer           : SCI0DRL   [207]\r
+**             Control register        : SCI0CR1   [202]\r
+**             Mode register           : SCI0CR2   [203]\r
+**             Baud setting reg.       : SCI0BD    [200]\r
+**             Special register        : SCI0SR1   [204]\r
+**\r
+**         Input interrupt\r
+**             Vector name             : INT_SCI0\r
+**             Priority                : 1\r
+**\r
+**         Output interrupt\r
+**             Vector name             : INT_SCI0\r
+**             Priority                : 1\r
+**\r
+**         Used pins                   : \r
+**             ----------------------------------------------------\r
+**               Function | On package |    Name\r
+**             ----------------------------------------------------\r
+**                Input   |     89     |  PS0_RxD0\r
+**                Output  |     90     |  PS1_TxD0\r
+**             ----------------------------------------------------\r
+**\r
+**\r
+**         Used baud modes             :\r
+**             ----------------------------------------------------\r
+**               No. |    Mode ID      |  Baud rate\r
+**             ----------------------------------------------------\r
+**                0  |  Bm_38400baud   |  38400baud\r
+**                1  |  Bm_19200baud   |  19200baud\r
+**                2  |  Bm_9600baud    |  9600baud\r
+**                3  |  Bm_4800baud    |  4800baud\r
+**             ----------------------------------------------------\r
+**     Contents  :\r
+**         SetBaudRateMode - byte COM0_SetBaudRateMode(byte Mod);\r
+**\r
+**     (c) Copyright UNIS, spol. s r.o. 1997-2002\r
+**     UNIS, spol. s r.o.\r
+**     Jundrovska 33\r
+**     624 00 Brno\r
+**     Czech Republic\r
+**     http      : www.processorexpert.com\r
+**     mail      : info@processorexpert.com\r
+** ###################################################################*/\r
+\r
+/* MODULE COM0. */\r
+\r
+#pragma MESSAGE DISABLE C4002 /* WARNING C4002: Result not used is ignored */\r
+#pragma MESSAGE DISABLE C4301 /* INFORMATION C4301: Inline expansion done for function call */\r
+\r
+#include "COM0.h"\r
+#include "TickTimer.h"\r
+#include "Byte1.h"\r
+\r
+/* Definition of DATA and CODE segments for this bean. User can specify where\r
+   these segments will be located on "Build options" tab of the selected CPU bean. */\r
+#pragma DATA_SEG COM0_DATA             /* Data section for this module. */\r
+#pragma CODE_SEG COM0_CODE             /* Code section for this module. */\r
+\r
+\r
+#define OVERRUN_ERR      1             /* Overrun error flag bit   */\r
+#define FRAMING_ERR      2             /* Framing error flag bit   */\r
+#define PARITY_ERR       4             /* Parity error flag bit    */\r
+#define CHAR_IN_RX       8             /* Char is in RX buffer     */\r
+#define FULL_TX          16            /* Full transmit buffer     */\r
+#define RUNINT_FROM_TX   32            /* Interrupt is in progress */\r
+#define FULL_RX          64            /* Full receive buffer      */\r
+#define NOISE_ERR        128           /* Noise erorr flag bit     */\r
+#define IDLE_ERR         256           /* Idle character flag bit  */\r
+#define BREAK_ERR        512           /* Break detect             */\r
+\r
+static word SerFlag;                   /* Flags for serial communication */\r
+                                       /* Bits: 0 - OverRun error */\r
+                                       /*       1 - Framing error */\r
+                                       /*       2 - Parity error */\r
+                                       /*       3 - Char in RX buffer */\r
+                                       /*       4 - Full TX buffer */\r
+                                       /*       5 - Running int from TX */\r
+                                       /*       6 - Full RX buffer */\r
+                                       /*       7 - Noise error */\r
+                                       /*       8 - Idle character  */\r
+                                       /*       9 - Break detected  */\r
+                                       /*      10 - Unused */\r
+static word PrescHigh;\r
+static byte NumMode;                   /* Number of selected baud mode */\r
+\r
+\r
+/*\r
+** ===================================================================\r
+**     Method      :  HWEnDi (bean AsynchroSerial)\r
+**\r
+**     Description :\r
+**         This method is internal. It is used by Processor Expert\r
+**         only.\r
+** ===================================================================\r
+*/\r
+static void HWEnDi(void)\r
+{\r
+    SCI0CR2_TE = 1;                    /* Enable transmitter */\r
+    SCI0CR2_RE = 1;                    /* Enable receiver */\r
+    SCI0CR2_RIE = 1;                   /* Enable recieve interrupt */\r
+}\r
+\r
+/*\r
+** ===================================================================\r
+**     Method      :  COM0_SetBaudRateMode (bean AsynchroSerial)\r
+**\r
+**     Description :\r
+**         This method changes the channel communication speed (baud\r
+**         rate). This method can be used only if you specify a list\r
+**         of possible period settings at design time (see <Timing\r
+**         dialog box> - Runtime setting - from a list of values).\r
+**         Each of these settings constitutes a mode and Processor\r
+**         Expert^[TM] assigns them a mode identifier. The prescaler\r
+**         and compare values corresponding to each mode are\r
+**         calculated at design time. You may switch modes at\r
+**         runtime by referring only to a mode identifier. No\r
+**         run-time calculations are performed, all the calculations\r
+**         are performed at design time.\r
+**     Parameters  :\r
+**         NAME            - DESCRIPTION\r
+**         Mod             - Timing mode to set\r
+**     Returns     :\r
+**         ---             - Error code, possible codes:\r
+**                           ERR_OK - OK\r
+**                           ERR_SPEED - This device does not work in\r
+**                           the active speed mode\r
+** ===================================================================\r
+*/\r
+byte COM0_SetBaudRateMode(byte Mod)\r
+{\r
+  static const word COM0_PrescHigh[4] = {41,81,163,326};\r
+\r
+  if(Mod >= 4)                         /* Is mode in baud mode list */\r
+    return ERR_VALUE;                  /* If no then error */\r
+  NumMode = Mod;                       /* New baud mode */\r
+  PrescHigh = COM0_PrescHigh[Mod];     /* Prescaler in high speed mode */\r
+  SCI0BD = PrescHigh;                  /* Set prescaler bits */\r
+  return ERR_OK;                       /* OK */\r
+}\r
+\r
+/*\r
+** ===================================================================\r
+**     Method      :  COM0_Init (bean AsynchroSerial)\r
+**\r
+**     Description :\r
+**         This method is internal. It is used by Processor Expert\r
+**         only.\r
+** ===================================================================\r
+*/\r
+void COM0_Init(void)\r
+{\r
+  PrescHigh = 41;                      /* Precaler in high speed mode */\r
+  SerFlag = 0;                         /* Reset flags */\r
+  NumMode = 0;                         /* Number of selected baud mode */\r
+  /* SCI0CR1: LOOPS=0,SCISWAI=1,RSRC=0,M=0,WAKE=0,ILT=0,PE=0,PT=0 */\r
+  SCI0CR1 = 64;                        /* Set the SCI configuration */\r
+  /* SCI0SR2: ??=0,??=0,??=0,??=0,??=0,BRK13=0,TXDIR=0,RAF=0 */\r
+  SCI0SR2 = 0;                         /* Set the Break Character Length and Transmitter pin data direction in Single-wire mode */\r
+  SCI0SR1;                             /* Reset interrupt request flags */\r
+  /* SCI0CR2: SCTIE=0,TCIE=0,RIE=0,ILIE=0,TE=0,RE=0,RWU=0,SBK=0 */\r
+  SCI0CR2 = 0;                         /* Disable error interrupts */\r
+  SCI0BD = PrescHigh;                  /* Set prescaler bits */\r
+  HWEnDi();                            /* Enable/disable device according to status flags */\r
+}\r
+\r
+\r
+/* END COM0. */\r
+\r
+\r
+/*\r
+** ###################################################################\r
+**\r
+**     This file was created by UNIS Processor Expert 03.33 for \r
+**     the Motorola HCS12 series of microcontrollers.\r
+**\r
+** ###################################################################\r
+*/\r
diff --git a/FreeRTOS/Demo/HCS12_CodeWarrior_banked/CODE/_COM0.H b/FreeRTOS/Demo/HCS12_CodeWarrior_banked/CODE/_COM0.H
new file mode 100644 (file)
index 0000000..3f0e99a
--- /dev/null
@@ -0,0 +1,191 @@
+/** ###################################################################\r
+**     THIS BEAN MODULE IS GENERATED BY THE TOOL. DO NOT MODIFY IT.\r
+**     Filename  : COM0.H\r
+**     Project   : RTOSDemo\r
+**     Processor : MC9S12DP256BCPV\r
+**     Beantype  : AsynchroSerial\r
+**     Version   : Bean 02.231, Driver 01.08, CPU db: 2.87.283\r
+**     Compiler  : Metrowerks HC12 C Compiler\r
+**     Date/Time : 19/06/2005, 15:07\r
+**     Abstract  :\r
+**         This bean "AsynchroSerial" implements an asynchronous serial\r
+**         communication. The bean supports different settings of \r
+**         parity, word width, stop-bit and communication speed,\r
+**         user can select interrupt or polling handler.\r
+**         Communication speed can be changed also in runtime.\r
+**         The bean requires one on-chip asynchronous serial channel.\r
+**     Settings  :\r
+**         Serial channel              : SCI0\r
+**\r
+**         Protocol\r
+**             Init baud rate          : 38400baud\r
+**             Width                   : 8 bits\r
+**             Stop bits               : 1\r
+**             Parity                  : none\r
+**             Breaks                  : Disabled\r
+**\r
+**         Registers\r
+**             Input buffer            : SCI0DRL   [207]\r
+**             Output buffer           : SCI0DRL   [207]\r
+**             Control register        : SCI0CR1   [202]\r
+**             Mode register           : SCI0CR2   [203]\r
+**             Baud setting reg.       : SCI0BD    [200]\r
+**             Special register        : SCI0SR1   [204]\r
+**\r
+**         Input interrupt\r
+**             Vector name             : INT_SCI0\r
+**             Priority                : 1\r
+**\r
+**         Output interrupt\r
+**             Vector name             : INT_SCI0\r
+**             Priority                : 1\r
+**\r
+**         Used pins                   : \r
+**             ----------------------------------------------------\r
+**               Function | On package |    Name\r
+**             ----------------------------------------------------\r
+**                Input   |     89     |  PS0_RxD0\r
+**                Output  |     90     |  PS1_TxD0\r
+**             ----------------------------------------------------\r
+**\r
+**\r
+**         Used baud modes             :\r
+**             ----------------------------------------------------\r
+**               No. |    Mode ID      |  Baud rate\r
+**             ----------------------------------------------------\r
+**                0  |  Bm_38400baud   |  38400baud\r
+**                1  |  Bm_19200baud   |  19200baud\r
+**                2  |  Bm_9600baud    |  9600baud\r
+**                3  |  Bm_4800baud    |  4800baud\r
+**             ----------------------------------------------------\r
+**     Contents  :\r
+**         SetBaudRateMode - byte COM0_SetBaudRateMode(byte Mod);\r
+**\r
+**     (c) Copyright UNIS, spol. s r.o. 1997-2002\r
+**     UNIS, spol. s r.o.\r
+**     Jundrovska 33\r
+**     624 00 Brno\r
+**     Czech Republic\r
+**     http      : www.processorexpert.com\r
+**     mail      : info@processorexpert.com\r
+** ###################################################################*/\r
+\r
+#ifndef __COM0\r
+#define __COM0\r
+\r
+/* MODULE COM0. */\r
+\r
+#include "Cpu.h"\r
+\r
+#define COM0_Bm_38400baud         0    /* Constant for switch to mode 0 */\r
+#define COM0_Bm_19200baud         1    /* Constant for switch to mode 1 */\r
+#define COM0_Bm_9600baud          2    /* Constant for switch to mode 2 */\r
+#define COM0_Bm_4800baud          3    /* Constant for switch to mode 3 */\r
+\r
+\r
+\r
+#ifndef __BWUserType_tItem\r
+#define __BWUserType_tItem\r
+  typedef struct {                     /* Item of the index table for possible baudrates */\r
+    word div;                          /* divisior */\r
+    byte val;                          /* values of the prescalers */\r
+  } tItem;\r
+#endif\r
+#ifndef __BWUserType_COM0_TError\r
+#define __BWUserType_COM0_TError\r
+typedef union {\r
+  byte err;\r
+  struct {\r
+    bool OverRun  : 1;                 /* OverRun error flag */\r
+    bool Framing  : 1;                 /* Framing error flag */\r
+    bool Parity   : 1;                 /* Parity error flag */\r
+    bool RxBufOvf : 1;                 /* Rx buffer full error flag */\r
+    bool Noise    : 1;                 /* Noise error */\r
+    bool Break    : 1;                 /* Break detect */\r
+    bool Idle     : 1;                 /* Idle characted */\r
+  }errName;\r
+} COM0_TError;\r
+#endif\r
+#ifndef __BWUserType_TDirection\r
+#define __BWUserType_TDirection\r
+  typedef enum {                       /*  */\r
+    TXD_INPUT,\r
+    TXD_OUTPUT\r
+  } TDirection;\r
+#endif\r
+\r
+#ifndef __BWUserType_COM0_TComData\r
+#define __BWUserType_COM0_TComData\r
+  typedef byte COM0_TComData ;         /* User type for communication. Size of this type depends on the communication data witdh. */\r
+#endif\r
+\r
+#pragma CODE_SEG COM0_CODE             /* Code section for this module. */\r
+\r
+byte COM0_SetBaudRateMode(byte Mod);\r
+/*\r
+** ===================================================================\r
+**     Method      :  COM0_SetBaudRateMode (bean AsynchroSerial)\r
+**\r
+**     Description :\r
+**         This method changes the channel communication speed (baud\r
+**         rate). This method can be used only if you specify a list\r
+**         of possible period settings at design time (see <Timing\r
+**         dialog box> - Runtime setting - from a list of values).\r
+**         Each of these settings constitutes a mode and Processor\r
+**         Expert^[TM] assigns them a mode identifier. The prescaler\r
+**         and compare values corresponding to each mode are\r
+**         calculated at design time. You may switch modes at\r
+**         runtime by referring only to a mode identifier. No\r
+**         run-time calculations are performed, all the calculations\r
+**         are performed at design time.\r
+**     Parameters  :\r
+**         NAME            - DESCRIPTION\r
+**         Mod             - Timing mode to set\r
+**     Returns     :\r
+**         ---             - Error code, possible codes:\r
+**                           ERR_OK - OK\r
+**                           ERR_SPEED - This device does not work in\r
+**                           the active speed mode\r
+** ===================================================================\r
+*/\r
+\r
+#pragma CODE_SEG __NEAR_SEG NON_BANKED /* Interrupt section for this module. Placement will be in NON_BANKED area. */\r
+__interrupt void COM0_Interrupt(void);\r
+#pragma CODE_SEG COM0_CODE             /* Code section for this module. */\r
+/*\r
+** ===================================================================\r
+**     Method      :  COM0_Interrupt (bean AsynchroSerial)\r
+**\r
+**     Description :\r
+**         This method is internal. It is used by Processor Expert\r
+**         only.\r
+** ===================================================================\r
+*/\r
+\r
+\r
+void COM0_Init(void);\r
+/*\r
+** ===================================================================\r
+**     Method      :  COM0_Init (bean AsynchroSerial)\r
+**\r
+**     Description :\r
+**         This method is internal. It is used by Processor Expert\r
+**         only.\r
+** ===================================================================\r
+*/\r
+\r
+\r
+#pragma CODE_SEG DEFAULT               /* Change code section to DEFAULT. */\r
+\r
+/* END COM0. */\r
+\r
+/*\r
+** ###################################################################\r
+**\r
+**     This file was created by UNIS Processor Expert 03.33 for \r
+**     the Motorola HCS12 series of microcontrollers.\r
+**\r
+** ###################################################################\r
+*/\r
+\r
+#endif /* ifndef __COM0 */\r
index 768bb3f18f7a48cd7439c7f58ab10caaecf5aa9c..4d756a395ed066689fff9f09ee66f51352f9fa42 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 13c1f19fe16f66d521e47f710ac0aa7626e9286c..6961feefe8b839ca3a223aa93ce577aa0bfc1125 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 9e16bcaf2a12559b5650bf2f7f4d87b1f13e7caf..a373fbd0e6f10853fbef66169b172afeb47fbae7 100644 (file)
@@ -1,7 +1,7 @@
 \r
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 4bd363f5ccce9f0aaedd12333d5a8924182eaece..15a9c81645e97ca737c36de80c51e8c40cd1557c 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 9c9b60330987db1d64b3107004b435584496e86c..c30df043c5b64a31390af8ebb5873a478ba8c291 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 13c1f19fe16f66d521e47f710ac0aa7626e9286c..6961feefe8b839ca3a223aa93ce577aa0bfc1125 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 3b99c78c6ece80a81116a269a970c2e12fa4bbce..87fe3c5e7c827a0927ad60f51f3ede63686dd8b6 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 98ae6e092310213d719a2f44f1fa2ce6ae4e8689..4f00245c8a2b5cd573b08b67c8a3883184904ac9 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 291e171e889ab954df497016fe7c0359417c6fe9..a7afefb72ecaba49cc77e5ac5b0c6937fd34de33 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 9837e107f4279a2892220ef2ae32b382889d084a..791e205968a48885ce179d62343ffb05c5f36a43 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 1d7f5ac9701b79de231c36a4edc112837da126dc..c2f3b25e0b48ee9db39e0be109cc37c23f7ebde3 100644 (file)
@@ -1,7 +1,7 @@
 \r
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index aeada05eb4d8cc68a532bc7aa768d180f9323f12..3399a6fa6ca27d23b775630b6912e7beb2e6c4ba 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 4b16e1741283e3951f1caef9e5d5179ac8fe79c1..75bda5645de89776c44950a318115a024fb9108b 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 3f396ccee38ad68b960818c20979bc8aa34cd50b..320e5de6045717ee1f2fa3ceaf7745f6cca12b61 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 052f322bc39e164d8793d06a101fc572d7e85a18..5f0132d595c22165c4c72cb23d93ae8d177617be 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d26057f9a6dff07dfb1cd8bc23d07eeee199a3e7..6d56a462f18157c5cd669ad2ea6aa7f0d6e25f70 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index a546aee4dc35413e889ed0dcd18000003b48a119..40ac2cd00c7b14783f8b618358c19d104f8ffc31 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 35b8c1770c3e46bdeb36881d11623491ba7d37f8..3fe3221865e8e8185f3df0435eaee2ce827ed19c 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index ae9f22a57a2acd37e212171bf08752e9a336894f..45e8b099e08d360be5ca4bb19213ffbbbac2d96e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d58a463dcb27a37c69d27ff83b6cf8868ecd685e..4a9eeb6381facb3491bf357ef82413eb2bde8f4e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 5c474bc5a0d1dc886fa4984ef0698fb2be8761ee..b2677a95fcf5b3b31fbe60072e67013c9b75e61e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 106f70f388a9fdeed8f806ba21678b42340eaad0..7b4e40e893216b928bdb1f5826d2916e7218b5b5 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 07102337ca11364bb9c490b4be174bc9613d60bd..7dc570554c272fe37ebe794a37db448489264505 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index be7def4a0ce6c917116d070606525cf9c4fb883e..6da50219db097a84c0f434e676de205aae8669b9 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d040a857ff52cdfdd012b3c180b3476eef31bca5..9cdcb917e0eb5480b05d78eba67e18bc838e89d7 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 67a6124b736c369185c17e06938606213579d62f..cfe480583a30afe8c9cb7433b4013bfcc301b228 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 5528748de895d0f3db3aa9841303d66c9809d669..6bdbec36b68f441089467bb85735fb7d5c91e53b 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f7371a44b671afee864426d8251efe7b7b8d2f08..25b56f6dd666346cf60b61369b97e3db94f79c87 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 9411c9826d971ade076321066a2f4f091c5f2091..254dcbc21fdf02bdd7696e5bea90defc9ed60a16 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d040a857ff52cdfdd012b3c180b3476eef31bca5..9cdcb917e0eb5480b05d78eba67e18bc838e89d7 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f1363e052a84c44cd76dc32f1041c0703c157608..883a50d2d7c8ecaf8f269b6faf4f302e0c3b3495 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 7118a7527359a93441c4e9087253690f31cccc6f..37f44db9fac3a4bf173dceabd80857253c9710bb 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 39e09616c69f913c1dc0eee5dfa37d4add4aa29e..54f0442bd14ce16ded118e0fe288c389a4777886 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f705607e4a74e1f175697b067f6d0aac9c2db136..62de98060c5dd9747c23aa173b071b47d1fc1fb5 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 75a9c4d817af181d4fe51d903bfd1efa164c27a1..18899c59414f4bf0fa35c727b08ee5e84abcb0a2 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f81223e7b890c02d980e7196dc71421d793c471e..58facd906ef05e7760b3ede8ae829847aad32338 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 7e9efffa3728166ba6e5d6e42acd0f7b5ad90dec..b0fdb5c6ea80ce4dbb70ece2e2f6e8557e4cb6ed 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 893aa04f2bc8c2d3a1219d15cc459292d317c0b0..cfdb3d8e6648bd698d43672061698c93ed63aa5a 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d57c1d452cf089f6cd1d54365c5c70b2ddcc5117..b53cbb1b1dd34dff0cd7d58b5b39056aab151785 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 2d71723ff51763815ab8f7ed223c3afd88c6a2b9..c8bafad0eb9c2d19f36d7a2ecd8de9c6df3d5804 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index b7df323fb00fe227d1e31d3b31e1c1ee136f03e7..6815b7ae224e4ed996fa92aabc77ff8c3e0b28a0 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 3cbc136f9e209e4363b12d52ce173b63d6caf309..59bbb6e39c52e5b79e97714ae26cc0d976379939 100644 (file)
@@ -1,7 +1,7 @@
 ;\r
 ;/*\r
-; * FreeRTOS Kernel V10.2.1\r
-; * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+; * FreeRTOS Kernel V10.3.0\r
+; * Copyright (C) 2020 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
index 31752aab68b14c5d4dbbe03ac9ad2db21a21abe2..a45cd0de1800b6d10ef93dc14425e21c2c89f265 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index b095c063831b092c5bdcb6a72238f63aa535c9b8..c2f6877dfe1fd498b30695efc9eb981b8e59fd51 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 70d5a88671b6dcb95b958bf84248d9e59c56f80b..015a3e1ab25b6e9c52490f4078bc809590bc10f3 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index a988f50614aab6fc60671912fd4fcad7d97d933e..87a89800c0ef9c09e08dc6708d28b6f46b64339f 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index b7df323fb00fe227d1e31d3b31e1c1ee136f03e7..6815b7ae224e4ed996fa92aabc77ff8c3e0b28a0 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 76ff4d59d7fb9fb9294743f3a574916348f6e32e..5f2498f2741a5b633e97aeea2bfeb8a3dd914561 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index b6f527c146ba5bbbc67756267ced694cde8146aa..2c3c4faf5082d7ec8ca1891811a29290c4e622dd 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e868d18c1363b8e45bede3269d9702ef61f29d5e..422d651acbb2cd6a27d3d568954ea7a3a19c1c8e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e3d00a976b621d54bda778eda1807cc839e3e687..a90ae61254861f698173d27446cd4c480ac49647 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 840b57c68d7972fb88c6422186fc302ac36378b4..bae812a1a4c034335b4f1d784df0b737e4e88e1f 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 18bbff2f84d621e7fc2ce50bdcde458fe0c43885..6c5e434c27875b3ac9ec457b0d7728004ccd0288 100644 (file)
@@ -1,7 +1,7 @@
 ;\r
 ;/*\r
-; * FreeRTOS Kernel V10.2.1\r
-; * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+; * FreeRTOS Kernel V10.3.0\r
+; * Copyright (C) 2020 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
index 49bcc5e9d3abaef958e6c8508807d65053fc2a38..16ce691f92fbdbbf5bfb19a53a4291a1aa4f65dc 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 871ff615c49b6c6da063f220840849d567e42f76..c82e6800e9d73a5ce997f7a11295e5ff7e9e0b78 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 2f425e8e3f4f34ac58b0226849b700d93adb4228..0fccdd7f3bfb83e17ec9337d7a7aa76915408f46 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index b9dd6eca86fe013b5ddc48fac14b5a425ab64338..407c919f6fdfe299101bccacdcaca1bdb181e0e1 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 2cbbf97ab29112ddf43c9cc1435232144caaf99e..f339b7b2638c722c0da8f2c8380c504738b64991 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 7318bdacfeb76c7c6058bb1cd6a3c14bc9b1e9f9..57fa0ff8bb9749b4893a21f70f22efedc36fe434 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 599c69d4f5d7a24d77a8e6a0036b8413a177f6f5..37034be103676a29519f960bef00d8b3a5cf50e4 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 1a7731c0a52d03e429f43f81f171024cc854685f..3c879b419e6a3ad7d4acd1019c5af37b39680fd4 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 849f80e2f079458b7973a7bf0dd0966a28166f7a..c4924a7a283b1a2d8fb207367ac87a25b811a948 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 13e2737202fffb5d9bad3bcaa669c979eb912290..1da94468cd58ae5a32fea326eeba6b62c978385a 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 9e6bdc8665e6445f23c5eb7ed93249431817770c..320b318a2cfef94af573f0214e365eeff2c5d3be 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index b88eb393d1db9b90a801c97a1cf18a2ef943b24b..e58bcbe50a3f0355ef42914a3591d9ff088932ba 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 81fcacbe858c18d8d3f2cc0b2ea0ef23a2d64b69..57bc5a2dba5302cfa02387192803acb54a0f1345 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index fc00d94ca9ed5bdd13d6b481a8a069aa7852ef67..4bb4aec7d9cfd9bfdbbaba1897cdc57c4fa3e9b5 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 66ce54c874b8eb74d6bbd9310dc2a729cd547301..723df6c28baee32093f1ffb4b4ab9ffff1aabf57 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index bf1bb7eb360a132510f65822ac26786fbd394d52..fef7a5ffe460a143430e58b26172ec3de3e0d50b 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 72cc8f027b63eb6e6b219dc463238e079cb7fb92..a1c24f58309ed3c3df0b14da500a36526d321a07 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index a39c6e641cd7fc65aa552f8f4ad4a6b70003a378..cd98ce192074316f625ce571a211008d84bf9c7e 100644 (file)
@@ -1,6 +1,6 @@
 ;/*\r
-; * FreeRTOS Kernel V10.2.1\r
-; * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+; * FreeRTOS Kernel V10.3.0\r
+; * Copyright (C) 2020 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
index c1f089c50b5bf66dab84f6a126b31fbde9c72f3b..eee4e5746376e0c202169a77cc0dea611d5467da 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 48f68a5d959239d3e80ab666236e9b80d8495a4b..6cdf2dbe4d8a7fbc08d930de7d02e9d5f9e66712 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d0136f737213e122335501ea7a55ed92f9a5ffb3..e132a4836cb23d37f58c69a21df7ba9b2de7dc47 100644 (file)
@@ -1,6 +1,6 @@
 ;/*\r
-; * FreeRTOS Kernel V10.2.1\r
-; * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+; * FreeRTOS Kernel V10.3.0\r
+; * Copyright (C) 2020 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
index 9b5b56a218b399d819fbd6f46ad03a2a3a76a6a8..ecc2223b6d12ad45e8ed548cd21a6f8805154faf 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 24ebdbd88475f455e941fe81ff34df9107cac02f..f1ba02041805d94377f71784822c88b95eebe4f5 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e28f33c9897670678f34fb7bab0fd4959eab8d10..a70f4c769c35509909b6a7e6730cd83fbacd2e79 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 7318e777fa7108447cba03d298f3e5e719bc2776..b3a1b3f6d8330c327f4433bd1e98565a358fe127 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index db2ab176b56e40aa53db0fd3cae7b674d646c80b..2e559cf2d8c4b2a07478df06ca0048e7356ca7fd 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 08f5e80ca3d8dcce2cc702e0a3e10067d4c8c0cf..89e436e662a5fd49b0379554bd5bc61291d1bd98 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index a44cfbbd6ec8125abfaeadf61edd1a90f29f602e..709fc6e0fe75293caf83b1651431d96865f96cb3 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 03582f5cb4915ba0fb4dacc48db6ea20b727a605..1ef661da0476e90fde046373fcdf773472f1e760 100644 (file)
@@ -1,6 +1,6 @@
 ;/*\r
-; * FreeRTOS Kernel V10.2.1\r
-; * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+; * FreeRTOS Kernel V10.3.0\r
+; * Copyright (C) 2020 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
index e3276061f5b6ab00ff58e4e02d0c0c21665430a5..684bf5d6a2f05f003395280af2aa273f4770b737 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 5abd48e25e3144477517ddf901547da7ff7a6dbd..5ff1c6d413e45a726c328cea0cdbe72844e74ac6 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e65d0443e1512826bd1d7a91796a9665913b2ed0..cd47b84f87839dc08a0b546bd11cfcc4b860e99a 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 00b3ce2f525ab668476381645e56a4c8824458d3..9aaddecd309d35446567544b69dca849ca28d6a8 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 0795c7f04ba7b38aacc7b0889db4e2a403bd80ba..b91d78da838afd8793dc37a54c5dc234df735102 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 9d56e4fa1733683921167489bcae7f561d031bfd..6fd8a30425c46764f907d4a47b185e7a700aa0ad 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 8e55655f48f235753389e8eb5f1f45bd20fe300b..a662736fc65da79ae5e0bb3d639217b3964b0401 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c6ed510498bce4889ae17a276b71e7a9f241d6da..5235d35c4ef2a49d33c4b58b5a7fcfd719b62a7d 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 8950f3623135cf555194f049d492ad5e83479644..4dc1989f83051a6ea73e668cbc0baa40fd383c4a 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 15ba88509727355e05bde4a55191ea299adbccfe..1ea5517b874293181a8c5711f617310350ec3444 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c746dbdc702227af146ec3bcbb18fa572f4f773a..a47cdc9f3ac7507afb4bb295110efc3578c951e7 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 5dc2fdb9055f1b06712269f8a02640f705d9c790..790f9e2395e3e50eb5d4d71792304a213a604cc6 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e4bd51fce3087cd5fb88aa4f7c00ebd923f9a3cb..18dd3991027c312ffcf28b970a41b3c839157e18 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 4424dfe5f722619247a4ef0ef9d6c726f9cc3486..e40e2ba72b867480c673c682730eb3f41b79da73 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 1793f88a8b312baabb28d1a7eddd1a9a67c8624c..b80c871838cc867343d298f49e64adcbc9132d7a 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 818a180f0e3f8d510f31547e298babc9e7512037..3110f798810f415a42812c3f17d598f7614ba57a 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 5251acb11a5a1ae77a5441d4e3f5c26307ab69bb..04d1bc1edfbc336c006a42e988046762b65ffdc0 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index eb7f09483918bc3557a97fd3fe2e7d3813d3dfd8..10d19f2a8320c9d639a72adbe2e13fbd0bdae8af 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 836f5bcd17f1b0327e4d08d306da66aff9223364..eabe108a63da34d74d51dee786c78da949107eda 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 1793f88a8b312baabb28d1a7eddd1a9a67c8624c..b80c871838cc867343d298f49e64adcbc9132d7a 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 080c2eaf28f1e59f50d5ec21a9b8f358d1db6382..1d831e44514c2f9c46302764955bb3f745232839 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 2d20860ef076447af01f359aa7175940f9cf8b4a..baa9d8e399096f46f4f7786289a4c9466b251a45 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 6a63b6e9eb713461b5c54581bb16490a9d04b6c9..8cd5fd71057a749a3b87833c658ef2ccb408704a 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 836f5bcd17f1b0327e4d08d306da66aff9223364..eabe108a63da34d74d51dee786c78da949107eda 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 1793f88a8b312baabb28d1a7eddd1a9a67c8624c..b80c871838cc867343d298f49e64adcbc9132d7a 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 080c2eaf28f1e59f50d5ec21a9b8f358d1db6382..1d831e44514c2f9c46302764955bb3f745232839 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 95ec723e6fd471278339a6c32871c92a7a017b2f..869302ac47a12da108ff9191a6d4f741ceeedb3f 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index ca1647c0ff82a5a8c0aa2fb1fc05df911f27be68..a36a0d100afa09e8d21dc5d970ed8f3bcd4931ea 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 836f5bcd17f1b0327e4d08d306da66aff9223364..eabe108a63da34d74d51dee786c78da949107eda 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 1793f88a8b312baabb28d1a7eddd1a9a67c8624c..b80c871838cc867343d298f49e64adcbc9132d7a 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 080c2eaf28f1e59f50d5ec21a9b8f358d1db6382..1d831e44514c2f9c46302764955bb3f745232839 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 1e84a0b0399abe7e297ca28aee5aed81fadd611a..df2eb908e441c19a95965b077fb0deb6d0d184a7 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 8cc3762d0bb248d5ca5e3bdc0eee32528f1e657d..6d881c13d6a56adf183a574577e260f8879efd86 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 836f5bcd17f1b0327e4d08d306da66aff9223364..eabe108a63da34d74d51dee786c78da949107eda 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 1793f88a8b312baabb28d1a7eddd1a9a67c8624c..b80c871838cc867343d298f49e64adcbc9132d7a 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 080c2eaf28f1e59f50d5ec21a9b8f358d1db6382..1d831e44514c2f9c46302764955bb3f745232839 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index afc42fcab9cf9f053e13193310a6bb55d04d594b..20ea8ae3b3ea49dbe0d50002bfb31a2473443865 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 4da1dc6b201e1bd6ef26f1f5ae24779e276641fd..bb8a6852b878eb3330e6a014b8f812c29d9fdee9 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 836f5bcd17f1b0327e4d08d306da66aff9223364..eabe108a63da34d74d51dee786c78da949107eda 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 1793f88a8b312baabb28d1a7eddd1a9a67c8624c..b80c871838cc867343d298f49e64adcbc9132d7a 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 080c2eaf28f1e59f50d5ec21a9b8f358d1db6382..1d831e44514c2f9c46302764955bb3f745232839 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 7afaaeef16a80152d2ae0bc34ae9d8832fc7dcbc..21369994aa4982ee019a5da80eece8bb0d1f210e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 76dfcf20f2f823fe5c6a4d1af18074071a2eb808..85fd6cc3254d6c8de1dc0321376fc897056ac250 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 836f5bcd17f1b0327e4d08d306da66aff9223364..eabe108a63da34d74d51dee786c78da949107eda 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 1793f88a8b312baabb28d1a7eddd1a9a67c8624c..b80c871838cc867343d298f49e64adcbc9132d7a 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 080c2eaf28f1e59f50d5ec21a9b8f358d1db6382..1d831e44514c2f9c46302764955bb3f745232839 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 95a444b3d713054d555f84991ebc5660f8b9eba9..f81c25748900e9eb0f70fa41f30bd586bf9e8cc8 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f90b6a63e62a3848609f3bd360dfd4be7da4e699..0f80beb9a30a38332a7bc30242554ec1fbf331ba 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index aae3f0270213a42c6133c294c34d9fb519d232a1..48083720ca184c469989ddf31f8316dfb75dbbdc 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 20e5d7db83f60d6a13c5da3b82334120e2ae8f7d..b58e126a6f1262b583beed5c37b9064f9357106d 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 5e27e50cf76ec045adf41328953f55da099dcc72..36274755e8aedffc5d3676832d87e8b009c236d5 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index abd44f1e719929ee1f834cfe2f689ac962a6af8d..9cff5ec02e79728a9aa5c89a67a9ab19de70b67e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 18187d22213808bfceb4d773a8d8401a94cf7328..3a6272c40b157c80e347b0f3b4f90d1680c44af7 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index b1324f5f7779bd03639febbe9e6aade4e8a1b165..177780bdf3bfdc7c775f5b836be15eb505a3b75a 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 99a5379628fe36daee85ef3ba7bd179cb62735f0..ace730eff306637cc003fb343c2d4f41fa6b6b78 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 1b5489e47bfe9700a5a66e6f10c2048d1b6d3704..7c89a4c7007d138c4ab65a5cd691716c038f7e2c 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 6c005042f04ea64a1cdf5666a681a5f31dc3ff69..a7bebb5b0ea110df33066ee720e167b876276049 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 5fa0950ebe58c5624e50de2d1d7d1d22b321cb80..8b49715fa51ee6da566ab947504d6b085bbb9fde 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 98ffa08ebbcfe51e401bb09287897ac3ae47ae92..f552114d7b9c96742c6b84cf9c819defc87cb591 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 173fa71e2ce582110d92c2cd7e7d2b35bbe48ad1..24ef787b5bc9d38ee95b9067e92a21aa8afbd80c 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 3bd9a1bca2d4ffa7cc3b969974d286724b1a4c1b..802de247fd33d975d28d4f37d15091aacef5a07b 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index deb65e20af1e1e45db4a1c0899f33b95f1703e3e..adf43345e633d8f5fa1dc283ac632d50c648fa11 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d26057f9a6dff07dfb1cd8bc23d07eeee199a3e7..6d56a462f18157c5cd669ad2ea6aa7f0d6e25f70 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index fb65d433fd2cd94fd4a24a1a933533e1f21b492a..633ed23571e51b2e5a7e63fa7cb61ac3f208d286 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index b109593e3c3928a3cbd9e0d4a58bd5c4997c6cee..9690c9ad4bb43fd2a19b89b72e1d6ae227c19260 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 7c14a22a2d2f3d7af5e031835862c6add66e811b..fdb018d0f87be1032f97330bbcb243c65f7fdd85 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c4ca7ea8cc98e316dbc5d6862cc863608ed21165..3916d4d5b8e86101f1b47a896cb883675bbd1071 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 98ffa08ebbcfe51e401bb09287897ac3ae47ae92..f552114d7b9c96742c6b84cf9c819defc87cb591 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f645b25913361973fdca7ec815b2c152d23d13f6..6a5fa3030688027a612910215f42bbb40bc02656 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index de9dcb6ab51f493ce9cfdb228b3c4fadebb58c2e..fbab92639a9de9ecfca3d0a8599a652295085547 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 16094c38c46e206396ffcda22fccd1e80eca8b64..e55518bcc0ccc33d73ef59f7debbf2d0df7ee876 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index b9d8760e4f666fd680b4d8a5008a8f42f81fa19c..334541d266106813d5f903c1429e775f3918b5e9 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e6df0db9f5980a171900b3282eb80462bb4f725e..bd8edf3e0e9a2aae869e9c72bf6f802dbb6219f9 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d26057f9a6dff07dfb1cd8bc23d07eeee199a3e7..6d56a462f18157c5cd669ad2ea6aa7f0d6e25f70 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 27666f80a054135f420edb366a4b058e4f4659ef..e406cf34bcd8d5f69b95edd8354331787a0b841e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index a3156cdc450b6958ca4f84b3f35302c495fb1a9a..79933e614f856512a2d5dbeca318ae622689cb2c 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 03e6fc65a30292665ed0f2521e02bed3c3623fb0..d3e3f263964a0a527d34395cdb266543f3fb5362 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index b6cb7891d45489e50198ae3955fd8bca1331f1a8..8b0d71bc468fe0eea6fc92cf27940deeae3e4e4f 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 14606e729c23990f38e6cb5bf0db899d11836560..5112745f89de7fe5b10254a0e75c932a41736a62 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 99a5379628fe36daee85ef3ba7bd179cb62735f0..ace730eff306637cc003fb343c2d4f41fa6b6b78 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 8a8d1b9702776a0eb15770d951ed120ad2d31063..e17619fee4fc7d8e6d69dde77aeacf6def555a4c 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index df2216e03469374838762cece64a868dc19d2236..d8ab2099c462796937c20a22a32485ee7273d9ea 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 25ecbfc47654eeb1b6ae6901a7701b73683c0d9d..2828710c65c4173c8fb73b9626d0b93fa37d8b8a 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 9a0f4f3c89a4e2b421c66a3158c5062d3ede9e45..1702512594cbf6f23d4f306ebed77e00e3de3de4 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 0b3041798979a8093e66f0c927814781baef72d8..cfacc7720aee4820726260fbbe51da3eb516a4ed 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 98ffa08ebbcfe51e401bb09287897ac3ae47ae92..f552114d7b9c96742c6b84cf9c819defc87cb591 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 440b15739c8deda7ed34d3cf19ca3854d19ea21e..3a4a788cd6a0d331a41e3df0472466b9ba93e2c0 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e1767552201fa0994d482edfec16a1d0acde5b4b..ebf55dfd7a1912ae14f99f29c26b2482d8021c62 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 16094c38c46e206396ffcda22fccd1e80eca8b64..e55518bcc0ccc33d73ef59f7debbf2d0df7ee876 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c8ef10c5370ca35a814eb4a25a935499c4aaa43d..beb102e166e1cbc583306e00733f43b7dd8a079c 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 4eb94e040acd8889a03b1f17346100f9920339ae..827517c3558aedf4072d15179874cdfd1279a356 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 23c7443beae1cd67209aeecdd7fc8c543b04871a..43653657a5ccfb07d8e135f38d7e0f60f4e01a91 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e6df0db9f5980a171900b3282eb80462bb4f725e..bd8edf3e0e9a2aae869e9c72bf6f802dbb6219f9 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d26057f9a6dff07dfb1cd8bc23d07eeee199a3e7..6d56a462f18157c5cd669ad2ea6aa7f0d6e25f70 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e8a5aeedadf1a21869bb8c9d9e79c1f2d30e608d..541d68fc5f94a8fc983ed742c559b3f9a2412353 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 2fde5a4bf938acb425de747a0ec4fa08225ac85f..3dbcd8997e5605988613a10f8bcd83157ed44118 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 31192e074ca99087fc559c154381f8b107f6ed75..a701c420106b227c71f7a21ee8f4d7145dc16a4b 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index aa5dcbbdb3437bf515681ea0bd496e52dbe85adc..16c3be0425d66aedec1cf41b1a0b1e955cd5a733 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 57cec12f6d180ecbb7f9f24dc9107fd3f40c2bfd..69238f19726bde090f6887f96804b6e8c40719e2 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 029f0fbd416739a1e2ab88e26385bb321be6b318..7f1d193d37c2af1b909855e0b2e34d68866746a4 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index fc076ba51585c32d2080956e68f86abb83e592c9..5a9ca77a37d048bc54cf8ab186e1b53717164890 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 1e9c67f2d8418e7160faf76daf59ef71f395df39..25b799e7bc9a09d729a8546c04a1caac69feac4c 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 918b6771dbdf8e4495b602e605b6230ac1842f9a..7e9078ea82750ea7af11003a0db57239bb22e046 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 98ffa08ebbcfe51e401bb09287897ac3ae47ae92..f552114d7b9c96742c6b84cf9c819defc87cb591 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 5882bed6260a5ab4e4704edade801d09ad414a2c..fd83b29e8ee8a328577b2995fe80ecdbbc0540f3 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 5a208903a9bcaff7019c89b423a62225967874aa..bfd2994beab5da3a113c1d0a2733f98ae90181cb 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 99ff70b6066dcf6412b752fdfcc3dab710a08120..d330bcf941d9c0167795741eb2e6cc9f75a31817 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 6071b7a5ced55a824c9a87bea5346ebb91888566..456a2dab4e0434a6751de3a125101d93b94bbae7 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 86da60d8f004d197b8b54db4917873a2fb58c2e5..1a8313e5c2bfedba5afa9052967960d9eb53604c 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index ade0c2348001b8937ab02509b870da809476ba55..5fedf1f78544391736c024f3996845e2f94e2f6d 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 198e35627091b9cf218dfbe989088c14bb970dc8..22363718c5b1490fbc2359827309e309c427accf 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 31e414d26b939875c5c3667a6d8b004b8a7eb057..eb72e67c52a7ac0006189dcb96aaf8b1a88b60c2 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 5a208903a9bcaff7019c89b423a62225967874aa..bfd2994beab5da3a113c1d0a2733f98ae90181cb 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 5361273116f22c192250bb7bbe4acd519fab2d39..5614d25c3d0399b6680dadce78f8ef0897a06f98 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 6071b7a5ced55a824c9a87bea5346ebb91888566..456a2dab4e0434a6751de3a125101d93b94bbae7 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e10ac3a1ef3bc16749ac20dd554f445e5dbb9023..64ed8974849994930c56729be0d065ada00ac2e5 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 1a77cbdbf22de08af7900996570e1481658b73ca..25dad61d806cb10f39fe191ec9943e9438c7017e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 198e35627091b9cf218dfbe989088c14bb970dc8..22363718c5b1490fbc2359827309e309c427accf 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 31e414d26b939875c5c3667a6d8b004b8a7eb057..eb72e67c52a7ac0006189dcb96aaf8b1a88b60c2 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index def7f07a4ffe1336fb496796b11627c93e3df72b..1d5c32cf057f0c2ee51800f6b1299e534804cb75 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 5361273116f22c192250bb7bbe4acd519fab2d39..5614d25c3d0399b6680dadce78f8ef0897a06f98 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 6071b7a5ced55a824c9a87bea5346ebb91888566..456a2dab4e0434a6751de3a125101d93b94bbae7 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e10ac3a1ef3bc16749ac20dd554f445e5dbb9023..64ed8974849994930c56729be0d065ada00ac2e5 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 4c8dac5ccb181bc2968bbeb829776de23f5aad6d..66a65e55a144d9d3673b68aa2704bfd2897b2ef3 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d31439657b8530ca56e7f4d22f6d8929c59f039d..d8a42ec1d2bfa53bef8340b7a8087ddacfec84ef 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 31e414d26b939875c5c3667a6d8b004b8a7eb057..eb72e67c52a7ac0006189dcb96aaf8b1a88b60c2 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 96b9f91106a7fe9b29a1fd6a99d767b838cd6528..f2580f553773e2207131c9fa11cfa566a11ce7dd 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 83b80c111406d9f5e212895267a7553fe55603aa..3eab0e9d901d2fa65b1b73e817d6684d0a17d907 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d50f84560ae7ef1ce914a00dc4833831af374193..825d342701fa1664f328387e77799ea11fffcd71 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 04c095bcecb8772ae6f088023d79e2698c4b290a..e3a2c3a166bdcd17d9779edd3a752ec7084028b0 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index bfd6cfd1e35f2d1f03722ecf45c877336f61b22b..fac14f4a24304b80d964d20b05d08f7c89a3e5fa 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 64ed555456c4207b43be090856d51b0c20b388a8..95b1632a70162e526391d235cb5fe3a8078f7db9 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 501e7ade7d9e0fcdb29bf3f11f06ecf95707a7cf..5cbf6d844794c9c14109fda7b05cb1eae39f3dc6 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c8be19e6d529cf2b8a652dcd87fffaf177a67f9d..3f876da9b176617d697c5305eda1eaa1245c9d51 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index cdb34f87a7abc61c7db22596bd3f3294fc5c8d3d..ac70526d8d06c48cebf2f679117da1d51b615b5e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 30aeb1baa2f34e85decb2422498a5fd20fddb858..29ba2c906d8e8f216807316d17421eb3e0fdccbc 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f2602c430bfd980ba089898e01ca82a271711ca8..03bb0800c85d48d92c79672710e1b32741a54b6d 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 1f25b0174baf85c143d961097ea172a9bd76afad..9521318a597e78c675818bf8a72a79ec6a7d50fe 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index de03b623b4a9414e4e8688bedf0db8d39af5fffd..5cdcc5636f2967855c9edcddec1b3a492cb38cdc 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 1edf11793acdc7f3bf82c828ac08b62fa28d1f68..951097f76f1345486cd03887bb1b166df9d5213e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index a1d1edb0b2e4302fa0b6f524cdda191bad241811..0944ef7630f9e37becba892bb566a2cb382285a0 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 7b13c8ab115fc48d8117cd688e1f8eba7f97c0c7..cdf5e4d7b21dd9e41bbcd87697d02b8e3c24a7c3 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 4591e611871e84e8ef37afbdfffaf2f7c9cecda7..5cc4358ab4a2c6186f6a2f8d0c800276c7b9fe5a 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 4d9eeae013feaa582a99864321709ee3d11fcf40..b8ee55a01183a81022da329d049b115bbf470d92 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 303baf1938036cab9fdc25f3cdce595ac6a66364..16aa66172efe2d8f209ba38af9604cd65bd9f10b 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f2602c430bfd980ba089898e01ca82a271711ca8..03bb0800c85d48d92c79672710e1b32741a54b6d 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 276b15e62b3b179fcf03600f9448a8a2ec42a120..998a251611491c8cf5411676fea6aa7cfe742168 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 0f0d40d3ef8a46e4a24ead225c416682a80eee9b..a91b077fb06242f27e239e9fa548576e063a9fe6 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
diff --git a/FreeRTOS/Demo/RL78_E2Studio_GCC/.HardwareDebuglinker b/FreeRTOS/Demo/RL78_E2Studio_GCC/.HardwareDebuglinker
deleted file mode 100644 (file)
index de9a65c..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-<?xml version="1.0" encoding="ASCII"?>\r
-<com.renesas.linkersection.model:SectionContainer xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:com.renesas.linkersection.model="http:///LinkerSection.ecore" targets="GNU_RL78">\r
-  <sections name=".vec" isKeep="true">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".vec"/>\r
-  </sections>\r
-  <sections name=".vects" isKeep="true">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress" fixedAddress="4"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".vects"/>\r
-  </sections>\r
-  <sections name=".option_bytes" isKeep="true">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress" fixedAddress="192"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".option_bytes"/>\r
-  </sections>\r
-  <sections name=".security_id" isKeep="true">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress" fixedAddress="196"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".security_id"/>\r
-  </sections>\r
-  <sections name=".text">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress" fixedAddress="216"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".text"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".text.*"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="etext"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Keyword" text=". = ALIGN(2)"/>\r
-  </sections>\r
-  <sections name=".init">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:ReferencedSectionAddress" referencedSection="//@sections.4"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".init"/>\r
-  </sections>\r
-  <sections name=".fini">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:ReferencedSectionAddress" referencedSection="//@sections.5"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".fini"/>\r
-  </sections>\r
-  <sections name=".got">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:ReferencedSectionAddress" referencedSection="//@sections.6"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".got"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".got.plt"/>\r
-  </sections>\r
-  <sections name=".rodata MAX(., 0x3000)">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:ReferencedSectionAddress" referencedSection="//@sections.7"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Keyword" text=". = ALIGN(2)"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".rodata"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".rodata.*"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_erodata"/>\r
-  </sections>\r
-  <sections name=".eh_frame_hdr">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:ReferencedSectionAddress" referencedSection="//@sections.8"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".eh_frame_hdr"/>\r
-  </sections>\r
-  <sections name=".eh_frame">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:ReferencedSectionAddress" referencedSection="//@sections.9"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".eh_frame"/>\r
-  </sections>\r
-  <sections name=".jcr">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:ReferencedSectionAddress" referencedSection="//@sections.10"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".jcr"/>\r
-  </sections>\r
-  <sections name=".tors">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:ReferencedSectionAddress" referencedSection="//@sections.11"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="__CTOR_LIST__"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Keyword" text=". = ALIGN(2)"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="___ctors"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".ctors"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="___ctors_end"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="__CTOR_END__"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="__DTOR_LIST__"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="___dtors"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".dtors"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="___dtors_end"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="__DTOR_END__"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Keyword" text=". = ALIGN(2)"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_mdata"/>\r
-  </sections>\r
-  <sections name=".data">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress" fixedAddress="1023744"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Keyword" text=". = ALIGN(2)"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_data"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".data"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".data.*"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Keyword" text=". = ALIGN(2)"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_edata"/>\r
-    <reservedMemAddress xsi:type="com.renesas.linkersection.model:ReferencedLabelAddress" label="//@sections.12/@contents.12"/>\r
-  </sections>\r
-  <sections name=".bss">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:ReferencedSectionAddress" referencedSection="//@sections.13"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Keyword" text=". = ALIGN(2)"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_bss"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".bss"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".bss.**"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Keyword" text=". = ALIGN(2)"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name="COMMON"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Keyword" text=". = ALIGN(2)"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_ebss"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_end"/>\r
-  </sections>\r
-  <sections name=".stack" isNoLoad="true">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress" fixedAddress="1048064"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_stack"/>\r
-  </sections>\r
-</com.renesas.linkersection.model:SectionContainer>\r
diff --git a/FreeRTOS/Demo/RL78_E2Studio_GCC/.RL78_G1A_TBlinker b/FreeRTOS/Demo/RL78_E2Studio_GCC/.RL78_G1A_TBlinker
deleted file mode 100644 (file)
index 9d33098..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-<?xml version="1.0" encoding="ASCII"?>\r
-<com.renesas.linkersection.model:SectionContainer xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:com.renesas.linkersection.model="http:///LinkerSection.ecore" targets="GNU_RL78">\r
-  <sections name=".vec" isKeep="true">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".vec"/>\r
-  </sections>\r
-  <sections name=".vects" isKeep="true">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress" fixedAddress="4"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".vects"/>\r
-  </sections>\r
-  <sections name=".option_bytes" isKeep="true">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress" fixedAddress="192"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".option_bytes"/>\r
-  </sections>\r
-  <sections name=".security_id" isKeep="true">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress" fixedAddress="196"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".security_id"/>\r
-  </sections>\r
-  <sections name=".text">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress" fixedAddress="216"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".text"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".text.*"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="etext"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Keyword" text=". = ALIGN(2)"/>\r
-  </sections>\r
-  <sections name=".init">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:ReferencedSectionAddress" referencedSection="//@sections.4"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".init"/>\r
-  </sections>\r
-  <sections name=".fini">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:ReferencedSectionAddress" referencedSection="//@sections.5"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".fini"/>\r
-  </sections>\r
-  <sections name=".got">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:ReferencedSectionAddress" referencedSection="//@sections.6"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".got"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".got.plt"/>\r
-  </sections>\r
-  <sections name=".rodata MAX(., 0x2000)">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:ReferencedSectionAddress" referencedSection="//@sections.7"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Keyword" text=". = ALIGN(2)"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".rodata"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".rodata.*"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_erodata"/>\r
-  </sections>\r
-  <sections name=".eh_frame_hdr">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:ReferencedSectionAddress" referencedSection="//@sections.8"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".eh_frame_hdr"/>\r
-  </sections>\r
-  <sections name=".eh_frame">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:ReferencedSectionAddress" referencedSection="//@sections.9"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".eh_frame"/>\r
-  </sections>\r
-  <sections name=".jcr">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:ReferencedSectionAddress" referencedSection="//@sections.10"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".jcr"/>\r
-  </sections>\r
-  <sections name=".tors">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:ReferencedSectionAddress" referencedSection="//@sections.11"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="__CTOR_LIST__"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Keyword" text=". = ALIGN(2)"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="___ctors"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".ctors"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="___ctors_end"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="__CTOR_END__"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="__DTOR_LIST__"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="___dtors"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".dtors"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="___dtors_end"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="__DTOR_END__"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Keyword" text=". = ALIGN(2)"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_mdata"/>\r
-  </sections>\r
-  <sections name=".data">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress" fixedAddress="1044224"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Keyword" text=". = ALIGN(2)"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_data"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".data"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".data.*"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Keyword" text=". = ALIGN(2)"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_edata"/>\r
-    <reservedMemAddress xsi:type="com.renesas.linkersection.model:ReferencedLabelAddress" label="//@sections.12/@contents.12"/>\r
-  </sections>\r
-  <sections name=".bss">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:ReferencedSectionAddress" referencedSection="//@sections.13"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Keyword" text=". = ALIGN(2)"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_bss"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".bss"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".bss.**"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Keyword" text=". = ALIGN(2)"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name="COMMON"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Keyword" text=". = ALIGN(2)"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_ebss"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_end"/>\r
-  </sections>\r
-  <sections name=".stack" isNoLoad="true">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress" fixedAddress="1048064"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_stack"/>\r
-  </sections>\r
-</com.renesas.linkersection.model:SectionContainer>\r
diff --git a/FreeRTOS/Demo/RL78_E2Studio_GCC/.RSKRL78G1Clinker b/FreeRTOS/Demo/RL78_E2Studio_GCC/.RSKRL78G1Clinker
deleted file mode 100644 (file)
index 279af16..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-<?xml version="1.0" encoding="ASCII"?>\r
-<com.renesas.linkersection.model:SectionContainer xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:com.renesas.linkersection.model="http:///LinkerSection.ecore" targets="GNU_RL78">\r
-  <sections name=".vec" isKeep="true">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".vec"/>\r
-  </sections>\r
-  <sections name=".vects" isKeep="true">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress" fixedAddress="4"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".vects"/>\r
-  </sections>\r
-  <sections name=".option_bytes" isKeep="true">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress" fixedAddress="192"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".option_bytes"/>\r
-  </sections>\r
-  <sections name=".security_id" isKeep="true">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress" fixedAddress="196"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".security_id"/>\r
-  </sections>\r
-  <sections name=".text">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress" fixedAddress="216"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".text"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".text.*"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="etext"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Keyword" text=". = ALIGN(2)"/>\r
-  </sections>\r
-  <sections name=".init">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:ReferencedSectionAddress" referencedSection="//@sections.4"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".init"/>\r
-  </sections>\r
-  <sections name=".fini">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:ReferencedSectionAddress" referencedSection="//@sections.5"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".fini"/>\r
-  </sections>\r
-  <sections name=".got">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:ReferencedSectionAddress" referencedSection="//@sections.6"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".got"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".got.plt"/>\r
-  </sections>\r
-  <sections name=".rodata MAX(., 0x2000)">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:ReferencedSectionAddress" referencedSection="//@sections.7"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Keyword" text=". = ALIGN(2)"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".rodata"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".rodata.*"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_erodata"/>\r
-  </sections>\r
-  <sections name=".eh_frame_hdr">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:ReferencedSectionAddress" referencedSection="//@sections.8"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".eh_frame_hdr"/>\r
-  </sections>\r
-  <sections name=".eh_frame">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:ReferencedSectionAddress" referencedSection="//@sections.9"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".eh_frame"/>\r
-  </sections>\r
-  <sections name=".jcr">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:ReferencedSectionAddress" referencedSection="//@sections.10"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".jcr"/>\r
-  </sections>\r
-  <sections name=".tors">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:ReferencedSectionAddress" referencedSection="//@sections.11"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="__CTOR_LIST__"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Keyword" text=". = ALIGN(2)"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="___ctors"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".ctors"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="___ctors_end"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="__CTOR_END__"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="__DTOR_LIST__"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="___dtors"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".dtors"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="___dtors_end"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="__DTOR_END__"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Keyword" text=". = ALIGN(2)"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_mdata"/>\r
-  </sections>\r
-  <sections name=".data">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress" fixedAddress="1042688"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Keyword" text=". = ALIGN(2)"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_data"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".data"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".data.*"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Keyword" text=". = ALIGN(2)"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_edata"/>\r
-    <reservedMemAddress xsi:type="com.renesas.linkersection.model:ReferencedLabelAddress" label="//@sections.12/@contents.12"/>\r
-  </sections>\r
-  <sections name=".bss">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:ReferencedSectionAddress" referencedSection="//@sections.13"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Keyword" text=". = ALIGN(2)"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_bss"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".bss"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".bss.**"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Keyword" text=". = ALIGN(2)"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name="COMMON"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Keyword" text=". = ALIGN(2)"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_ebss"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_end"/>\r
-  </sections>\r
-  <sections name=".stack" isNoLoad="true">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress" fixedAddress="1048064"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_stack"/>\r
-  </sections>\r
-</com.renesas.linkersection.model:SectionContainer>\r
diff --git a/FreeRTOS/Demo/RL78_E2Studio_GCC/.RSKRL78L13linker b/FreeRTOS/Demo/RL78_E2Studio_GCC/.RSKRL78L13linker
deleted file mode 100644 (file)
index 851e32c..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-<?xml version="1.0" encoding="ASCII"?>\r
-<com.renesas.linkersection.model:SectionContainer xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:com.renesas.linkersection.model="http:///LinkerSection.ecore" targets="GNU_RL78">\r
-  <sections name=".vec" isKeep="true">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".vec"/>\r
-  </sections>\r
-  <sections name=".vects" isKeep="true">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress" fixedAddress="4"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".vects"/>\r
-  </sections>\r
-  <sections name=".option_bytes" isKeep="true">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress" fixedAddress="192"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".option_bytes"/>\r
-  </sections>\r
-  <sections name=".security_id" isKeep="true">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress" fixedAddress="196"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".security_id"/>\r
-  </sections>\r
-  <sections name=".text">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress" fixedAddress="216"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".text"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".text.*"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="etext"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Keyword" text=". = ALIGN(2)"/>\r
-  </sections>\r
-  <sections name=".init">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:ReferencedSectionAddress" referencedSection="//@sections.4"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".init"/>\r
-  </sections>\r
-  <sections name=".fini">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:ReferencedSectionAddress" referencedSection="//@sections.5"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".fini"/>\r
-  </sections>\r
-  <sections name=".got">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:ReferencedSectionAddress" referencedSection="//@sections.6"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".got"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".got.plt"/>\r
-  </sections>\r
-  <sections name=".rodata MAX(., 0x3000)">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:ReferencedSectionAddress" referencedSection="//@sections.7"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Keyword" text=". = ALIGN(2)"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".rodata"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".rodata.*"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_erodata"/>\r
-  </sections>\r
-  <sections name=".eh_frame_hdr">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:ReferencedSectionAddress" referencedSection="//@sections.8"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".eh_frame_hdr"/>\r
-  </sections>\r
-  <sections name=".eh_frame">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:ReferencedSectionAddress" referencedSection="//@sections.9"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".eh_frame"/>\r
-  </sections>\r
-  <sections name=".jcr">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:ReferencedSectionAddress" referencedSection="//@sections.10"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".jcr"/>\r
-  </sections>\r
-  <sections name=".tors">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:ReferencedSectionAddress" referencedSection="//@sections.11"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="__CTOR_LIST__"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Keyword" text=". = ALIGN(2)"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="___ctors"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".ctors"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="___ctors_end"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="__CTOR_END__"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="__DTOR_LIST__"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="___dtors"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".dtors"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="___dtors_end"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="__DTOR_END__"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Keyword" text=". = ALIGN(2)"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_mdata"/>\r
-  </sections>\r
-  <sections name=".data" isKeep="true">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress" fixedAddress="1040128"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Keyword" text=". = ALIGN(2)"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_data"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".data"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".data.*"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Keyword" text=". = ALIGN(2)"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_edata"/>\r
-    <reservedMemAddress xsi:type="com.renesas.linkersection.model:ReferencedLabelAddress" label="//@sections.12/@contents.12"/>\r
-  </sections>\r
-  <sections name=".bss">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:ReferencedSectionAddress" referencedSection="//@sections.13"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Keyword" text=". = ALIGN(2)"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_bss"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".bss"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".bss.**"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Keyword" text=". = ALIGN(2)"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name="COMMON"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Keyword" text=". = ALIGN(2)"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_ebss"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_end"/>\r
-  </sections>\r
-  <sections name=".stack" isNoLoad="true">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress" fixedAddress="1048064"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_stack"/>\r
-  </sections>\r
-</com.renesas.linkersection.model:SectionContainer>\r
diff --git a/FreeRTOS/Demo/RL78_E2Studio_GCC/.RSKRL78L1Clinker b/FreeRTOS/Demo/RL78_E2Studio_GCC/.RSKRL78L1Clinker
deleted file mode 100644 (file)
index b933427..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-<?xml version="1.0" encoding="ASCII"?>\r
-<com.renesas.linkersection.model:SectionContainer xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:com.renesas.linkersection.model="http:///LinkerSection.ecore" targets="GNU_RL78">\r
-  <sections name=".vec" isKeep="true">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".vec"/>\r
-  </sections>\r
-  <sections name=".vects" isKeep="true">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress" fixedAddress="4"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".vects"/>\r
-  </sections>\r
-  <sections name=".option_bytes" isKeep="true">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress" fixedAddress="192"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".option_bytes"/>\r
-  </sections>\r
-  <sections name=".security_id" isKeep="true">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress" fixedAddress="196"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".security_id"/>\r
-  </sections>\r
-  <sections name=".text">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress" fixedAddress="216"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".text"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".text.*"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="etext"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Keyword" text=". = ALIGN(2)"/>\r
-  </sections>\r
-  <sections name=".init">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:ReferencedSectionAddress" referencedSection="//@sections.4"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".init"/>\r
-  </sections>\r
-  <sections name=".fini">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:ReferencedSectionAddress" referencedSection="//@sections.5"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".fini"/>\r
-  </sections>\r
-  <sections name=".got">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:ReferencedSectionAddress" referencedSection="//@sections.6"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".got"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".got.plt"/>\r
-  </sections>\r
-  <sections name=".rodata MAX(., 0x3000)">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:ReferencedSectionAddress" referencedSection="//@sections.7"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Keyword" text=". = ALIGN(2)"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".rodata"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".rodata.*"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_erodata"/>\r
-  </sections>\r
-  <sections name=".eh_frame_hdr">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:ReferencedSectionAddress" referencedSection="//@sections.8"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".eh_frame_hdr"/>\r
-  </sections>\r
-  <sections name=".eh_frame">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:ReferencedSectionAddress" referencedSection="//@sections.9"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".eh_frame"/>\r
-  </sections>\r
-  <sections name=".jcr">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:ReferencedSectionAddress" referencedSection="//@sections.10"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".jcr"/>\r
-  </sections>\r
-  <sections name=".tors">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:ReferencedSectionAddress" referencedSection="//@sections.11"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="__CTOR_LIST__"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Keyword" text=". = ALIGN(2)"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="___ctors"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".ctors"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="___ctors_end"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="__CTOR_END__"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="__DTOR_LIST__"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="___dtors"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".dtors"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="___dtors_end"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="__DTOR_END__"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Keyword" text=". = ALIGN(2)"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_mdata"/>\r
-  </sections>\r
-  <sections name=".data">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress" fixedAddress="1031936"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Keyword" text=". = ALIGN(2)"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_data"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".data"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".data.*"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Keyword" text=". = ALIGN(2)"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_edata"/>\r
-    <reservedMemAddress xsi:type="com.renesas.linkersection.model:ReferencedLabelAddress" label="//@sections.12/@contents.12"/>\r
-  </sections>\r
-  <sections name=".bss">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:ReferencedSectionAddress" referencedSection="//@sections.13"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Keyword" text=". = ALIGN(2)"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_bss"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".bss"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".bss.**"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Keyword" text=". = ALIGN(2)"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name="COMMON"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Keyword" text=". = ALIGN(2)"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_ebss"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_end"/>\r
-  </sections>\r
-  <sections name=".stack" isNoLoad="true">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress" fixedAddress="1048064"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_stack"/>\r
-  </sections>\r
-</com.renesas.linkersection.model:SectionContainer>\r
diff --git a/FreeRTOS/Demo/RL78_E2Studio_GCC/.YRDKRL78G14linker b/FreeRTOS/Demo/RL78_E2Studio_GCC/.YRDKRL78G14linker
deleted file mode 100644 (file)
index 6cce6bb..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-<?xml version="1.0" encoding="ASCII"?>\r
-<com.renesas.linkersection.model:SectionContainer xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:com.renesas.linkersection.model="http:///LinkerSection.ecore" targets="GNU_RL78">\r
-  <sections name=".vec" isKeep="true">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".vec"/>\r
-  </sections>\r
-  <sections name=".vects" isKeep="true">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress" fixedAddress="4"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".vects"/>\r
-  </sections>\r
-  <sections name=".option_bytes" isKeep="true">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress" fixedAddress="192"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".option_bytes"/>\r
-  </sections>\r
-  <sections name=".security_id" isKeep="true">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress" fixedAddress="196"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".security_id"/>\r
-  </sections>\r
-  <sections name=".text">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress" fixedAddress="216"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".text"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".text.*"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="etext"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Keyword" text=". = ALIGN(2)"/>\r
-  </sections>\r
-  <sections name=".init">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:ReferencedSectionAddress" referencedSection="//@sections.4"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".init"/>\r
-  </sections>\r
-  <sections name=".fini">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:ReferencedSectionAddress" referencedSection="//@sections.5"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".fini"/>\r
-  </sections>\r
-  <sections name=".got">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:ReferencedSectionAddress" referencedSection="//@sections.6"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".got"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".got.plt"/>\r
-  </sections>\r
-  <sections name=".rodata MAX(., 0x3000)">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:ReferencedSectionAddress" referencedSection="//@sections.7"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Keyword" text=". = ALIGN(2)"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".rodata"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".rodata.*"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_erodata"/>\r
-  </sections>\r
-  <sections name=".eh_frame_hdr">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:ReferencedSectionAddress" referencedSection="//@sections.8"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".eh_frame_hdr"/>\r
-  </sections>\r
-  <sections name=".eh_frame">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:ReferencedSectionAddress" referencedSection="//@sections.9"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".eh_frame"/>\r
-  </sections>\r
-  <sections name=".jcr">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:ReferencedSectionAddress" referencedSection="//@sections.10"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".jcr"/>\r
-  </sections>\r
-  <sections name=".tors">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:ReferencedSectionAddress" referencedSection="//@sections.11"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="__CTOR_LIST__"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Keyword" text=". = ALIGN(2)"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="___ctors"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".ctors"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="___ctors_end"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="__CTOR_END__"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="__DTOR_LIST__"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="___dtors"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".dtors"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="___dtors_end"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="__DTOR_END__"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Keyword" text=". = ALIGN(2)"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_mdata"/>\r
-  </sections>\r
-  <sections name=".data_original" isNoLoad="true" isKeep="true">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress" fixedAddress="1023744"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Keyword" text=". = ALIGN(2)"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_data_original"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".data_original"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".data_original.*"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Keyword" text=". = ALIGN(2)"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_edata_original"/>\r
-  </sections>\r
-  <sections name="trace_buffer" isKeep="true">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress" fixedAddress="1024768"/>\r
-  </sections>\r
-  <sections name=".data" isKeep="true">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress" fixedAddress="1025792"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Keyword" text=". = ALIGN(2)"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_data"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".data"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".data.*"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Keyword" text=". = ALIGN(2)"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_edata"/>\r
-    <reservedMemAddress xsi:type="com.renesas.linkersection.model:ReferencedLabelAddress" label="//@sections.12/@contents.12"/>\r
-  </sections>\r
-  <sections name=".bss">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:ReferencedSectionAddress" referencedSection="//@sections.15"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Keyword" text=". = ALIGN(2)"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_bss"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".bss"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name=".bss.**"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Keyword" text=". = ALIGN(2)"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:WildCardExpression" specificSection="true" name="COMMON"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Keyword" text=". = ALIGN(2)"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_ebss"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_end"/>\r
-  </sections>\r
-  <sections name=".stack" isNoLoad="true">\r
-    <sectionAddress xsi:type="com.renesas.linkersection.model:FixedAddress" fixedAddress="1048064"/>\r
-    <contents xsi:type="com.renesas.linkersection.model:Label" rhs="= .;" lhs="_stack"/>\r
-  </sections>\r
-</com.renesas.linkersection.model:SectionContainer>\r
diff --git a/FreeRTOS/Demo/RL78_E2Studio_GCC/.cproject b/FreeRTOS/Demo/RL78_E2Studio_GCC/.cproject
deleted file mode 100644 (file)
index 6635b59..0000000
+++ /dev/null
@@ -1,651 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>\r
-<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">\r
-       <storageModule moduleId="org.eclipse.cdt.core.settings">\r
-               <cconfiguration id="com.renesas.cdt.RL78.configuration.hardwaredebug.1462655394.864201896">\r
-                       <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.renesas.cdt.RL78.configuration.hardwaredebug.1462655394.864201896" moduleId="org.eclipse.cdt.core.settings" name="YRDKRL78G14">\r
-                               <externalSettings/>\r
-                               <extensions>\r
-                                       <extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>\r
-                                       <extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>\r
-                                       <extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>\r
-                                       <extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>\r
-                                       <extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>\r
-                                       <extension id="org.eclipse.cdt.core.PE" point="org.eclipse.cdt.core.BinaryParser"/>\r
-                               </extensions>\r
-                       </storageModule>\r
-                       <storageModule moduleId="cdtBuildSystem" version="4.0.0">\r
-                               <configuration artifactExtension="mot" artifactName="RTOSDemo" buildArtefactType="com.renesas.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug,org.eclipse.cdt.build.core.buildArtefactType=com.renesas.cdt.build.core.buildArtefactType.exe" cleanCommand="rm -rf *.lst *.lis *.lpp *.map" description="" id="com.renesas.cdt.RL78.configuration.hardwaredebug.1462655394.864201896" name="YRDKRL78G14" parent="com.renesas.cdt.RL78.configuration.hardwaredebug">\r
-                                       <folderInfo id="com.renesas.cdt.RL78.configuration.hardwaredebug.1462655394.864201896." name="/" resourcePath="">\r
-                                               <toolChain id="com.renesas.cdt.RL78.toolChain.hardwaredebugConf.2105647290" name="KPIT GNURL78-ELF Toolchain" superClass="com.renesas.cdt.RL78.toolChain.hardwaredebugConf">\r
-                                                       <targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF;org.eclipse.cdt.core.PE" id="com.renesas.cdt.rl78.hardwaredebug.win32.targetPlatform.1977742921" osList="win32" superClass="com.renesas.cdt.rl78.hardwaredebug.win32.targetPlatform"/>\r
-                                                       <builder buildPath="${workspace_loc:/RTOSDemo/HardwareDebug}" id="com.renesas.cdt.rl78.hardwaredebug.win32.builder.Id.291234065" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="GNU Make Builder" superClass="com.renesas.cdt.rl78.hardwaredebug.win32.builder.Id"/>\r
-                                                       <tool command="rl78-elf-libgen" id="com.renesas.cdt.rl78.hardwaredebug.win32.tool.libgen.Id.915781966" name="Library Generator" superClass="com.renesas.cdt.rl78.hardwaredebug.win32.tool.libgen.Id">\r
-                                                               <option id="com.renesas.cdt.core.LibraryGenerator.option.stdio.442763428" name="stdio.h : Performs input/output handling" superClass="com.renesas.cdt.core.LibraryGenerator.option.stdio" value="false" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.LibraryGenerator.option.stdlib.73062971" name="stdlib.h : Performs C program standard processing such as storage area management" superClass="com.renesas.cdt.core.LibraryGenerator.option.stdlib" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.LibraryGenerator.option.string.1752787959" name="string.h : Performs string comparison, copying " superClass="com.renesas.cdt.core.LibraryGenerator.option.string" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.LibraryGenerator.option.selectLibrary.1349163289" name="Select library" superClass="com.renesas.cdt.core.LibraryGenerator.option.selectLibrary" value="Optimized" valueType="enumerated"/>\r
-                                                               <option id="com.renesas.cdt.core.LibraryGenerator.option.libraryType.1850153794" name="Library type" superClass="com.renesas.cdt.core.LibraryGenerator.option.libraryType" value="Project-Built" valueType="enumerated"/>\r
-                                                       </tool>\r
-                                                       <tool id="com.renesas.cdt.rl78.hardwaredebug.win32.tool.compiler.Id.1257527949" name="Compiler" superClass="com.renesas.cdt.rl78.hardwaredebug.win32.tool.compiler.Id">\r
-                                                               <option id="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.cpuType.190677938" name="CPU Type" superClass="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.cpuType" value="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.cpuType.g14" valueType="enumerated"/>\r
-                                                               <option id="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.mmul.1081397113" name="Multiplication code Generation Option" superClass="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.mmul" value="None" valueType="enumerated"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.includeFileDir.18427768" name="Include file directories" superClass="com.renesas.cdt.core.Compiler.option.includeFileDir" valueType="includePath">\r
-                                                                       <listOptionValue builtIn="false" value="&quot;${TCINSTALL}/rl78-elf/optlibinc&quot;"/>\r
-                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src/iodefine}&quot;"/>\r
-                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src/Common-Demo-Tasks/include}&quot;"/>\r
-                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src}&quot;"/>\r
-                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src/FreeRTOS_Source/include}&quot;"/>\r
-                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src/FreeRTOS_Source/portable/GCC/RL78}&quot;"/>\r
-                                                               </option>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.CPUSeries.492092351" name="Cpu Series" superClass="com.renesas.cdt.core.Compiler.option.CPUSeries" value="R5F10JBC" valueType="string"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning14.1999001488" name="Print extra warning messages(-Wextra)" superClass="com.renesas.cdt.core.Compiler.option.warning14" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.stdWarnings.2033355479" name="Standard Warnings" superClass="com.renesas.cdt.core.Compiler.option.stdWarnings" value="com.renesas.cdt.core.Compiler.option.stdWarnings.enableAll" valueType="enumerated"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning1.1188153264" name="Issue Warning if an array subscript has type char(-Wchar-subscripts)" superClass="com.renesas.cdt.core.Compiler.option.warning1" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning2.1365724981" name="Issue Warning if comment appears within comment(-Wcomment)" superClass="com.renesas.cdt.core.Compiler.option.warning2" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning3.187071513" name="Issue Warning if string functions format is incorrect(-Wformat)" superClass="com.renesas.cdt.core.Compiler.option.warning3" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning4.167581461" name="Issue Warning if a function or parameter is implicitly declared(-Wimplicit)" superClass="com.renesas.cdt.core.Compiler.option.warning4" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning5.392920277" name="Disable Warning about the use of #import(-Wno-import)" superClass="com.renesas.cdt.core.Compiler.option.warning5" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning6.1735271693" name="Issue Warning if parentheses are omitted in certain contexts(-Wparentheses)" superClass="com.renesas.cdt.core.Compiler.option.warning6" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning7.1204889219" name="Issue Warning of possible return type problems(-Wreturn-type)" superClass="com.renesas.cdt.core.Compiler.option.warning7" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning8.1046413401" name="Issue Warning of possible switch statement problems(-Wswitch)" superClass="com.renesas.cdt.core.Compiler.option.warning8" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning9.150999274" name="Issue Warning if any trigraphs are encountered(-Wtrigraphs)" superClass="com.renesas.cdt.core.Compiler.option.warning9" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning10.215714668" name="Issue Warning if a variable is unused aside from its declaration(-Wunused)" superClass="com.renesas.cdt.core.Compiler.option.warning10" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning11.44335597" name="Issue Warning if an uninitialised automatic variable is used(-Wuninitialized)" superClass="com.renesas.cdt.core.Compiler.option.warning11" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning12.1212638254" name="Issue Warning of member initialisation mismatch(-Wreorder)" superClass="com.renesas.cdt.core.Compiler.option.warning12" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning13.1936980483" name="Issue Warning of bad sign comparisions(-Wsign-compare)" superClass="com.renesas.cdt.core.Compiler.option.warning13" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.debugFormat.1002084348" name="Debug format" superClass="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.debugFormat" value="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.debugFormat.dwarf" valueType="enumerated"/>\r
-                                                               <option id="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.optimizationLevel.1876718114" name="Optimization level" superClass="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.optimizationLevel" value="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.optimizationLevel.none" valueType="enumerated"/>\r
-                                                               <option id="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.macroDefines.1159637418" name="Macro Defines" superClass="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.macroDefines" valueType="definedSymbols">\r
-                                                                       <listOptionValue builtIn="false" value="YRDKRL78G14"/>\r
-                                                               </option>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.includeSymbolTable.318290481" name="Include Symbol Table(s)" superClass="com.renesas.cdt.core.Compiler.option.includeSymbolTable" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.misc26.759636132" name="Ignore 'inline' keyword(-fno-inline)" superClass="com.renesas.cdt.core.Compiler.option.misc26" value="false" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.misc48.181042602" name="List macro definitions but omit arguments and contents(-dN)" superClass="com.renesas.cdt.core.Compiler.option.misc48" value="false" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.userDefinedOptions.2146764026" name="User defined options" superClass="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.userDefinedOptions"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.misc2.1429263328" name="Don't search standard system directories for header files(-nostdinc)" superClass="com.renesas.cdt.core.Compiler.option.misc2" value="false" valueType="boolean"/>\r
-                                                               <inputType id="%Base.Compiler.C.InputType.Id.1290374987" name="C Input" superClass="%Base.Compiler.C.InputType.Id"/>\r
-                                                               <inputType id="Base.Compiler.CPP.InputType.Id.1815429899" name="C++ Input" superClass="Base.Compiler.CPP.InputType.Id"/>\r
-                                                       </tool>\r
-                                                       <tool id="com.renesas.cdt.rl78.hardwaredebug.win32.tool.assembler.Id.1164252651" name="Assembler" superClass="com.renesas.cdt.rl78.hardwaredebug.win32.tool.assembler.Id">\r
-                                                               <option id="com.renesas.cdt.core.Assembler.option.includeFileDirectories.611081498" name="Include file directories" superClass="com.renesas.cdt.core.Assembler.option.includeFileDirectories" valueType="includePath">\r
-                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}}/src&quot;"/>\r
-                                                               </option>\r
-                                                               <option id="com.renesas.cdt.core.Assembler.option.includeSymbolTable.2099981296" name="Include Symbol Table(-as)" superClass="com.renesas.cdt.core.Assembler.option.includeSymbolTable" value="true" valueType="boolean"/>\r
-                                                               <inputType id="%Base.Assembler.inputType.Id.1153908375" name="Assembler InputType" superClass="%Base.Assembler.inputType.Id"/>\r
-                                                       </tool>\r
-                                                       <tool command="rl78-elf-ld" commandLinePattern="${COMMAND} ${OUTPUT_FLAG}${OUTPUT_PREFIX} ${OUTPUT}${INPUTS} ${FLAGS}" id="com.renesas.cdt.rl78.hardwaredebug.win32.tool.linker.Id.1989122310" name="Linker" superClass="com.renesas.cdt.rl78.hardwaredebug.win32.tool.linker.Id">\r
-                                                               <option id="com.renesas.cdt.rl78.HardwareDebug.Linker.option.archiveSearchDirectories.984802356" name="Archive search directories" superClass="com.renesas.cdt.rl78.HardwareDebug.Linker.option.archiveSearchDirectories" valueType="stringList">\r
-                                                                       <listOptionValue builtIn="false" value="&quot;${CONFIGDIR}&quot;"/>\r
-                                                                       <listOptionValue builtIn="false" value="&quot;${TCINSTALL}/lib/gcc/rl78-elf//${GCC_VERSION}&quot;"/>\r
-                                                               </option>\r
-                                                               <option id="com.renesas.cdt.rl78.HardwareDebug.Linker.option.archiveLibraryFiles.1052424957" name="Archive (library) files" superClass="com.renesas.cdt.rl78.HardwareDebug.Linker.option.archiveLibraryFiles" valueType="stringList">\r
-                                                                       <listOptionValue builtIn="false" value="${BuildArtifactFileBaseName}"/>\r
-                                                                       <listOptionValue builtIn="false" value="gcc"/>\r
-                                                               </option>\r
-                                                               <option id="com.renesas.cdt.core.Linker.option.userDefinedOptions.518249328" name="User defined options" superClass="com.renesas.cdt.core.Linker.option.userDefinedOptions" valueType="stringList">\r
-                                                                       <listOptionValue builtIn="false" value="-e_PowerON_Reset"/>\r
-                                                               </option>\r
-                                                               <option command="-stats" id="com.renesas.cdt.core.Linker.option.misc8.1335307106" name="Compute and display statistics about the operation of the linker(-stats)" superClass="com.renesas.cdt.core.Linker.option.misc8" value="true" valueType="boolean"/>\r
-                                                       </tool>\r
-                                                       <tool id="com.renesas.cdt.rl78.hardwaredebug.win32.tool.objcopy.Id.1661224436" name="Objcopy" superClass="com.renesas.cdt.rl78.hardwaredebug.win32.tool.objcopy.Id"/>\r
-                                               </toolChain>\r
-                                       </folderInfo>\r
-                                       <sourceEntries>\r
-                                               <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>\r
-                                       </sourceEntries>\r
-                               </configuration>\r
-                       </storageModule>\r
-                       <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>\r
-                       <storageModule moduleId="org.eclipse.cdt.core.language.mapping"/>\r
-                       <storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>\r
-               </cconfiguration>\r
-               <cconfiguration id="com.renesas.cdt.RL78.configuration.hardwaredebug.1462655394.864201896.848838140">\r
-                       <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.renesas.cdt.RL78.configuration.hardwaredebug.1462655394.864201896.848838140" moduleId="org.eclipse.cdt.core.settings" name="RSKRL78G1C">\r
-                               <externalSettings/>\r
-                               <extensions>\r
-                                       <extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>\r
-                                       <extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>\r
-                                       <extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>\r
-                                       <extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>\r
-                                       <extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>\r
-                                       <extension id="org.eclipse.cdt.core.PE" point="org.eclipse.cdt.core.BinaryParser"/>\r
-                               </extensions>\r
-                       </storageModule>\r
-                       <storageModule moduleId="cdtBuildSystem" version="4.0.0">\r
-                               <configuration artifactExtension="mot" artifactName="RTOSDemo" buildArtefactType="com.renesas.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug,org.eclipse.cdt.build.core.buildArtefactType=com.renesas.cdt.build.core.buildArtefactType.exe" cleanCommand="rm -rf *.lst *.lis *.lpp *.map" description="" id="com.renesas.cdt.RL78.configuration.hardwaredebug.1462655394.864201896.848838140" name="RSKRL78G1C" parent="com.renesas.cdt.RL78.configuration.hardwaredebug">\r
-                                       <folderInfo id="com.renesas.cdt.RL78.configuration.hardwaredebug.1462655394.864201896.848838140." name="/" resourcePath="">\r
-                                               <toolChain id="com.renesas.cdt.RL78.toolChain.hardwaredebugConf.1539056525" name="KPIT GNURL78-ELF Toolchain" superClass="com.renesas.cdt.RL78.toolChain.hardwaredebugConf">\r
-                                                       <targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF;org.eclipse.cdt.core.PE" id="com.renesas.cdt.rl78.hardwaredebug.win32.targetPlatform.1930314102" osList="win32" superClass="com.renesas.cdt.rl78.hardwaredebug.win32.targetPlatform"/>\r
-                                                       <builder buildPath="${workspace_loc:/RTOSDemo/HardwareDebug}" id="com.renesas.cdt.rl78.hardwaredebug.win32.builder.Id.513359906" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="GNU Make Builder" superClass="com.renesas.cdt.rl78.hardwaredebug.win32.builder.Id"/>\r
-                                                       <tool command="rl78-elf-libgen" id="com.renesas.cdt.rl78.hardwaredebug.win32.tool.libgen.Id.1268974285" name="Library Generator" superClass="com.renesas.cdt.rl78.hardwaredebug.win32.tool.libgen.Id">\r
-                                                               <option id="com.renesas.cdt.core.LibraryGenerator.option.stdio.911793759" name="stdio.h : Performs input/output handling" superClass="com.renesas.cdt.core.LibraryGenerator.option.stdio" value="false" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.LibraryGenerator.option.stdlib.1355603265" name="stdlib.h : Performs C program standard processing such as storage area management" superClass="com.renesas.cdt.core.LibraryGenerator.option.stdlib" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.LibraryGenerator.option.string.1375717436" name="string.h : Performs string comparison, copying " superClass="com.renesas.cdt.core.LibraryGenerator.option.string" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.LibraryGenerator.option.selectLibrary.2003767005" name="Select library" superClass="com.renesas.cdt.core.LibraryGenerator.option.selectLibrary" value="Optimized" valueType="enumerated"/>\r
-                                                               <option id="com.renesas.cdt.core.LibraryGenerator.option.libraryType.1466545808" name="Library type" superClass="com.renesas.cdt.core.LibraryGenerator.option.libraryType" value="Project-Built" valueType="enumerated"/>\r
-                                                       </tool>\r
-                                                       <tool id="com.renesas.cdt.rl78.hardwaredebug.win32.tool.compiler.Id.2123469861" name="Compiler" superClass="com.renesas.cdt.rl78.hardwaredebug.win32.tool.compiler.Id">\r
-                                                               <option id="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.cpuType.973510681" name="CPU Type" superClass="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.cpuType" value="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.cpuType.g1c" valueType="enumerated"/>\r
-                                                               <option id="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.mmul.876151860" name="Multiplication code Generation Option" superClass="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.mmul" value="None" valueType="enumerated"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.includeFileDir.709582364" name="Include file directories" superClass="com.renesas.cdt.core.Compiler.option.includeFileDir" valueType="includePath">\r
-                                                                       <listOptionValue builtIn="false" value="&quot;${TCINSTALL}/rl78-elf/optlibinc&quot;"/>\r
-                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src/iodefine}&quot;"/>\r
-                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src/Common-Demo-Tasks/include}&quot;"/>\r
-                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src}&quot;"/>\r
-                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src/FreeRTOS_Source/include}&quot;"/>\r
-                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src/FreeRTOS_Source/portable/GCC/RL78}&quot;"/>\r
-                                                               </option>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.CPUSeries.1635355107" name="Cpu Series" superClass="com.renesas.cdt.core.Compiler.option.CPUSeries" value="R5F10JBC" valueType="string"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning14.718469333" name="Print extra warning messages(-Wextra)" superClass="com.renesas.cdt.core.Compiler.option.warning14" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.stdWarnings.1773056093" name="Standard Warnings" superClass="com.renesas.cdt.core.Compiler.option.stdWarnings" value="com.renesas.cdt.core.Compiler.option.stdWarnings.enableAll" valueType="enumerated"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning1.409407684" name="Issue Warning if an array subscript has type char(-Wchar-subscripts)" superClass="com.renesas.cdt.core.Compiler.option.warning1" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning2.197154356" name="Issue Warning if comment appears within comment(-Wcomment)" superClass="com.renesas.cdt.core.Compiler.option.warning2" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning3.1784044334" name="Issue Warning if string functions format is incorrect(-Wformat)" superClass="com.renesas.cdt.core.Compiler.option.warning3" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning4.1225978557" name="Issue Warning if a function or parameter is implicitly declared(-Wimplicit)" superClass="com.renesas.cdt.core.Compiler.option.warning4" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning5.1962967676" name="Disable Warning about the use of #import(-Wno-import)" superClass="com.renesas.cdt.core.Compiler.option.warning5" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning6.248630929" name="Issue Warning if parentheses are omitted in certain contexts(-Wparentheses)" superClass="com.renesas.cdt.core.Compiler.option.warning6" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning7.1359720126" name="Issue Warning of possible return type problems(-Wreturn-type)" superClass="com.renesas.cdt.core.Compiler.option.warning7" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning8.110294476" name="Issue Warning of possible switch statement problems(-Wswitch)" superClass="com.renesas.cdt.core.Compiler.option.warning8" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning9.677978489" name="Issue Warning if any trigraphs are encountered(-Wtrigraphs)" superClass="com.renesas.cdt.core.Compiler.option.warning9" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning10.1887488640" name="Issue Warning if a variable is unused aside from its declaration(-Wunused)" superClass="com.renesas.cdt.core.Compiler.option.warning10" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning11.1812348470" name="Issue Warning if an uninitialised automatic variable is used(-Wuninitialized)" superClass="com.renesas.cdt.core.Compiler.option.warning11" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning12.803153981" name="Issue Warning of member initialisation mismatch(-Wreorder)" superClass="com.renesas.cdt.core.Compiler.option.warning12" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning13.738663367" name="Issue Warning of bad sign comparisions(-Wsign-compare)" superClass="com.renesas.cdt.core.Compiler.option.warning13" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.debugFormat.971374425" name="Debug format" superClass="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.debugFormat" value="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.debugFormat.dwarf" valueType="enumerated"/>\r
-                                                               <option id="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.optimizationLevel.2018542110" name="Optimization level" superClass="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.optimizationLevel" value="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.optimizationLevel.none" valueType="enumerated"/>\r
-                                                               <option id="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.macroDefines.1382612927" name="Macro Defines" superClass="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.macroDefines" valueType="definedSymbols">\r
-                                                                       <listOptionValue builtIn="false" value="RSKRL78G1C"/>\r
-                                                               </option>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.includeSymbolTable.992185200" name="Include Symbol Table(s)" superClass="com.renesas.cdt.core.Compiler.option.includeSymbolTable" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.misc2.23981720" name="Don't search standard system directories for header files(-nostdinc)" superClass="com.renesas.cdt.core.Compiler.option.misc2" value="false" valueType="boolean"/>\r
-                                                               <inputType id="%Base.Compiler.C.InputType.Id.1356266742" name="C Input" superClass="%Base.Compiler.C.InputType.Id"/>\r
-                                                               <inputType id="Base.Compiler.CPP.InputType.Id.1207636487" name="C++ Input" superClass="Base.Compiler.CPP.InputType.Id"/>\r
-                                                       </tool>\r
-                                                       <tool id="com.renesas.cdt.rl78.hardwaredebug.win32.tool.assembler.Id.870260982" name="Assembler" superClass="com.renesas.cdt.rl78.hardwaredebug.win32.tool.assembler.Id">\r
-                                                               <option id="com.renesas.cdt.core.Assembler.option.includeFileDirectories.2084802267" name="Include file directories" superClass="com.renesas.cdt.core.Assembler.option.includeFileDirectories" valueType="includePath">\r
-                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}}/src&quot;"/>\r
-                                                               </option>\r
-                                                               <option id="com.renesas.cdt.core.Assembler.option.includeSymbolTable.703108790" name="Include Symbol Table(-as)" superClass="com.renesas.cdt.core.Assembler.option.includeSymbolTable" value="true" valueType="boolean"/>\r
-                                                               <option command="--defsym " id="com.renesas.cdt.core.Assembler.option.symbolDefines.657057740" name="Symbol defines" superClass="com.renesas.cdt.core.Assembler.option.symbolDefines"/>\r
-                                                               <inputType id="%Base.Assembler.inputType.Id.65149048" name="Assembler InputType" superClass="%Base.Assembler.inputType.Id"/>\r
-                                                       </tool>\r
-                                                       <tool command="rl78-elf-ld" commandLinePattern="${COMMAND} ${OUTPUT_FLAG}${OUTPUT_PREFIX} ${OUTPUT}${INPUTS} ${FLAGS}" id="com.renesas.cdt.rl78.hardwaredebug.win32.tool.linker.Id.1025535221" name="Linker" superClass="com.renesas.cdt.rl78.hardwaredebug.win32.tool.linker.Id">\r
-                                                               <option id="com.renesas.cdt.rl78.HardwareDebug.Linker.option.archiveSearchDirectories.1960648199" name="Archive search directories" superClass="com.renesas.cdt.rl78.HardwareDebug.Linker.option.archiveSearchDirectories" valueType="stringList">\r
-                                                                       <listOptionValue builtIn="false" value="&quot;${CONFIGDIR}&quot;"/>\r
-                                                                       <listOptionValue builtIn="false" value="&quot;${TCINSTALL}/lib/gcc/rl78-elf//${GCC_VERSION}&quot;"/>\r
-                                                               </option>\r
-                                                               <option id="com.renesas.cdt.rl78.HardwareDebug.Linker.option.archiveLibraryFiles.1335777265" name="Archive (library) files" superClass="com.renesas.cdt.rl78.HardwareDebug.Linker.option.archiveLibraryFiles" valueType="stringList">\r
-                                                                       <listOptionValue builtIn="false" value="${BuildArtifactFileBaseName}"/>\r
-                                                                       <listOptionValue builtIn="false" value="gcc"/>\r
-                                                               </option>\r
-                                                               <option id="com.renesas.cdt.core.Linker.option.userDefinedOptions.1800942722" name="User defined options" superClass="com.renesas.cdt.core.Linker.option.userDefinedOptions" valueType="stringList">\r
-                                                                       <listOptionValue builtIn="false" value="-e_PowerON_Reset"/>\r
-                                                               </option>\r
-                                                               <option command="-stats" id="com.renesas.cdt.core.Linker.option.misc8.661027224" name="Compute and display statistics about the operation of the linker(-stats)" superClass="com.renesas.cdt.core.Linker.option.misc8" value="true" valueType="boolean"/>\r
-                                                       </tool>\r
-                                                       <tool id="com.renesas.cdt.rl78.hardwaredebug.win32.tool.objcopy.Id.1504543797" name="Objcopy" superClass="com.renesas.cdt.rl78.hardwaredebug.win32.tool.objcopy.Id"/>\r
-                                               </toolChain>\r
-                                       </folderInfo>\r
-                                       <sourceEntries>\r
-                                               <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>\r
-                                       </sourceEntries>\r
-                               </configuration>\r
-                       </storageModule>\r
-                       <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>\r
-                       <storageModule moduleId="org.eclipse.cdt.core.language.mapping"/>\r
-                       <storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>\r
-               </cconfiguration>\r
-               <cconfiguration id="com.renesas.cdt.RL78.configuration.hardwaredebug.1462655394.864201896.1336466388">\r
-                       <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.renesas.cdt.RL78.configuration.hardwaredebug.1462655394.864201896.1336466388" moduleId="org.eclipse.cdt.core.settings" name="RSKRL78L13">\r
-                               <externalSettings/>\r
-                               <extensions>\r
-                                       <extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>\r
-                                       <extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>\r
-                                       <extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>\r
-                                       <extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>\r
-                                       <extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>\r
-                                       <extension id="org.eclipse.cdt.core.PE" point="org.eclipse.cdt.core.BinaryParser"/>\r
-                               </extensions>\r
-                       </storageModule>\r
-                       <storageModule moduleId="cdtBuildSystem" version="4.0.0">\r
-                               <configuration artifactExtension="mot" artifactName="RTOSDemo" buildArtefactType="com.renesas.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug,org.eclipse.cdt.build.core.buildArtefactType=com.renesas.cdt.build.core.buildArtefactType.exe" cleanCommand="rm -rf *.lst *.lis *.lpp *.map" description="" errorParsers="org.eclipse.cdt.core.GmakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;org.eclipse.cdt.core.GASErrorParser;org.eclipse.cdt.core.GLDErrorParser" id="com.renesas.cdt.RL78.configuration.hardwaredebug.1462655394.864201896.1336466388" name="RSKRL78L13" parent="com.renesas.cdt.RL78.configuration.hardwaredebug" postbuildStep="rl78-elf-size RTOSDemo.x">\r
-                                       <folderInfo id="com.renesas.cdt.RL78.configuration.hardwaredebug.1462655394.864201896.1336466388." name="/" resourcePath="">\r
-                                               <toolChain errorParsers="" id="com.renesas.cdt.RL78.toolChain.hardwaredebugConf.173659762" name="KPIT GNURL78-ELF Toolchain" superClass="com.renesas.cdt.RL78.toolChain.hardwaredebugConf">\r
-                                                       <targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF;org.eclipse.cdt.core.PE" id="com.renesas.cdt.rl78.hardwaredebug.win32.targetPlatform.1290357402" osList="win32" superClass="com.renesas.cdt.rl78.hardwaredebug.win32.targetPlatform"/>\r
-                                                       <builder buildPath="${workspace_loc:/RTOSDemo/HardwareDebug}" errorParsers="org.eclipse.cdt.core.GmakeErrorParser" id="com.renesas.cdt.rl78.hardwaredebug.win32.builder.Id.1362183277" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="GNU Make Builder" superClass="com.renesas.cdt.rl78.hardwaredebug.win32.builder.Id"/>\r
-                                                       <tool command="rl78-elf-libgen" commandLinePattern="${COMMAND} ${FLAGS} ${OUTPUT_FLAG}${OUTPUT_PREFIX} ${INPUTS}${OUTPUT}" errorParsers="" id="com.renesas.cdt.rl78.hardwaredebug.win32.tool.libgen.Id.1607833241" name="Library Generator" superClass="com.renesas.cdt.rl78.hardwaredebug.win32.tool.libgen.Id">\r
-                                                               <option id="com.renesas.cdt.core.LibraryGenerator.option.stdio.1289197999" name="stdio.h : Performs input/output handling" superClass="com.renesas.cdt.core.LibraryGenerator.option.stdio" value="false" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.LibraryGenerator.option.stdlib.872798558" name="stdlib.h : Performs C program standard processing such as storage area management" superClass="com.renesas.cdt.core.LibraryGenerator.option.stdlib" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.LibraryGenerator.option.string.542217779" name="string.h : Performs string comparison, copying " superClass="com.renesas.cdt.core.LibraryGenerator.option.string" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.LibraryGenerator.option.selectLibrary.40578768" name="Select library" superClass="com.renesas.cdt.core.LibraryGenerator.option.selectLibrary" value="Optimized" valueType="enumerated"/>\r
-                                                               <option id="com.renesas.cdt.core.LibraryGenerator.option.libraryType.2058797892" name="Library type" superClass="com.renesas.cdt.core.LibraryGenerator.option.libraryType" value="Project-Built" valueType="enumerated"/>\r
-                                                       </tool>\r
-                                                       <tool errorParsers="org.eclipse.cdt.core.GCCErrorParser" id="com.renesas.cdt.rl78.hardwaredebug.win32.tool.compiler.Id.1028798281" name="Compiler" superClass="com.renesas.cdt.rl78.hardwaredebug.win32.tool.compiler.Id">\r
-                                                               <option id="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.cpuType.1115439445" name="CPU Type" superClass="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.cpuType" value="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.cpuType.l13" valueType="enumerated"/>\r
-                                                               <option id="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.mmul.2107947275" name="Multiplication code Generation Option" superClass="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.mmul" value="None" valueType="enumerated"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.includeFileDir.1700227546" name="Include file directories" superClass="com.renesas.cdt.core.Compiler.option.includeFileDir" valueType="includePath">\r
-                                                                       <listOptionValue builtIn="false" value="&quot;${TCINSTALL}/rl78-elf/optlibinc&quot;"/>\r
-                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src/iodefine}&quot;"/>\r
-                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src/Common-Demo-Tasks/include}&quot;"/>\r
-                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src}&quot;"/>\r
-                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src/FreeRTOS_Source/include}&quot;"/>\r
-                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src/FreeRTOS_Source/portable/GCC/RL78}&quot;"/>\r
-                                                               </option>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.CPUSeries.2075382607" name="Cpu Series" superClass="com.renesas.cdt.core.Compiler.option.CPUSeries" value="R5F10JBC" valueType="string"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning14.387937438" name="Print extra warning messages(-Wextra)" superClass="com.renesas.cdt.core.Compiler.option.warning14" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.stdWarnings.357842346" name="Standard Warnings" superClass="com.renesas.cdt.core.Compiler.option.stdWarnings" value="com.renesas.cdt.core.Compiler.option.stdWarnings.enableAll" valueType="enumerated"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning1.1230142758" name="Issue Warning if an array subscript has type char(-Wchar-subscripts)" superClass="com.renesas.cdt.core.Compiler.option.warning1" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning2.938767347" name="Issue Warning if comment appears within comment(-Wcomment)" superClass="com.renesas.cdt.core.Compiler.option.warning2" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning3.387439530" name="Issue Warning if string functions format is incorrect(-Wformat)" superClass="com.renesas.cdt.core.Compiler.option.warning3" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning4.2101810135" name="Issue Warning if a function or parameter is implicitly declared(-Wimplicit)" superClass="com.renesas.cdt.core.Compiler.option.warning4" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning5.1734622382" name="Disable Warning about the use of #import(-Wno-import)" superClass="com.renesas.cdt.core.Compiler.option.warning5" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning6.238915025" name="Issue Warning if parentheses are omitted in certain contexts(-Wparentheses)" superClass="com.renesas.cdt.core.Compiler.option.warning6" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning7.763840368" name="Issue Warning of possible return type problems(-Wreturn-type)" superClass="com.renesas.cdt.core.Compiler.option.warning7" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning8.673708386" name="Issue Warning of possible switch statement problems(-Wswitch)" superClass="com.renesas.cdt.core.Compiler.option.warning8" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning9.1354328631" name="Issue Warning if any trigraphs are encountered(-Wtrigraphs)" superClass="com.renesas.cdt.core.Compiler.option.warning9" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning10.1175931057" name="Issue Warning if a variable is unused aside from its declaration(-Wunused)" superClass="com.renesas.cdt.core.Compiler.option.warning10" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning11.1621923809" name="Issue Warning if an uninitialised automatic variable is used(-Wuninitialized)" superClass="com.renesas.cdt.core.Compiler.option.warning11" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning12.1187041851" name="Issue Warning of member initialisation mismatch(-Wreorder)" superClass="com.renesas.cdt.core.Compiler.option.warning12" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning13.2085992177" name="Issue Warning of bad sign comparisions(-Wsign-compare)" superClass="com.renesas.cdt.core.Compiler.option.warning13" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.debugFormat.1743586745" name="Debug format" superClass="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.debugFormat" value="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.debugFormat.dwarf" valueType="enumerated"/>\r
-                                                               <option id="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.optimizationLevel.854346802" name="Optimization level" superClass="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.optimizationLevel" value="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.optimizationLevel.none" valueType="enumerated"/>\r
-                                                               <option id="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.macroDefines.1857322785" name="Macro Defines" superClass="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.macroDefines" valueType="definedSymbols">\r
-                                                                       <listOptionValue builtIn="false" value="RSKRL78L13"/>\r
-                                                               </option>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.includeSymbolTable.1827952485" name="Include Symbol Table(s)" superClass="com.renesas.cdt.core.Compiler.option.includeSymbolTable" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.misc2.1309529749" name="Don't search standard system directories for header files(-nostdinc)" superClass="com.renesas.cdt.core.Compiler.option.misc2" value="false" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.userDefinedOptions.1713741321" name="User defined options" superClass="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.userDefinedOptions" valueType="stringList">\r
-                                                                       <listOptionValue builtIn="false" value="-ffunction-sections"/>\r
-                                                                       <listOptionValue builtIn="false" value="-fdata-sections"/>\r
-                                                               </option>\r
-                                                               <inputType id="%Base.Compiler.C.InputType.Id.1471081059" name="C Input" superClass="%Base.Compiler.C.InputType.Id"/>\r
-                                                               <inputType id="Base.Compiler.CPP.InputType.Id.1237074300" name="C++ Input" superClass="Base.Compiler.CPP.InputType.Id"/>\r
-                                                       </tool>\r
-                                                       <tool errorParsers="org.eclipse.cdt.core.GASErrorParser" id="com.renesas.cdt.rl78.hardwaredebug.win32.tool.assembler.Id.407878600" name="Assembler" superClass="com.renesas.cdt.rl78.hardwaredebug.win32.tool.assembler.Id">\r
-                                                               <option id="com.renesas.cdt.core.Assembler.option.includeFileDirectories.739747882" name="Include file directories" superClass="com.renesas.cdt.core.Assembler.option.includeFileDirectories" valueType="includePath">\r
-                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}}/src&quot;"/>\r
-                                                               </option>\r
-                                                               <option id="com.renesas.cdt.core.Assembler.option.includeSymbolTable.1402574310" name="Include Symbol Table(-as)" superClass="com.renesas.cdt.core.Assembler.option.includeSymbolTable" value="true" valueType="boolean"/>\r
-                                                               <inputType id="%Base.Assembler.inputType.Id.1964427308" name="Assembler InputType" superClass="%Base.Assembler.inputType.Id"/>\r
-                                                       </tool>\r
-                                                       <tool command="rl78-elf-ld" commandLinePattern="${COMMAND} ${OUTPUT_FLAG}${OUTPUT_PREFIX} ${OUTPUT}${INPUTS} ${FLAGS}" errorParsers="org.eclipse.cdt.core.GLDErrorParser" id="com.renesas.cdt.rl78.hardwaredebug.win32.tool.linker.Id.807843680" name="Linker" superClass="com.renesas.cdt.rl78.hardwaredebug.win32.tool.linker.Id">\r
-                                                               <option id="com.renesas.cdt.rl78.HardwareDebug.Linker.option.archiveSearchDirectories.8586332" name="Archive search directories" superClass="com.renesas.cdt.rl78.HardwareDebug.Linker.option.archiveSearchDirectories" valueType="stringList">\r
-                                                                       <listOptionValue builtIn="false" value="&quot;${CONFIGDIR}&quot;"/>\r
-                                                                       <listOptionValue builtIn="false" value="&quot;${TCINSTALL}/lib/gcc/rl78-elf//${GCC_VERSION}&quot;"/>\r
-                                                               </option>\r
-                                                               <option id="com.renesas.cdt.rl78.HardwareDebug.Linker.option.archiveLibraryFiles.511810826" name="Archive (library) files" superClass="com.renesas.cdt.rl78.HardwareDebug.Linker.option.archiveLibraryFiles" valueType="stringList">\r
-                                                                       <listOptionValue builtIn="false" value="${BuildArtifactFileBaseName}"/>\r
-                                                                       <listOptionValue builtIn="false" value="gcc"/>\r
-                                                               </option>\r
-                                                               <option id="com.renesas.cdt.core.Linker.option.userDefinedOptions.393231908" name="User defined options" superClass="com.renesas.cdt.core.Linker.option.userDefinedOptions" valueType="stringList">\r
-                                                                       <listOptionValue builtIn="false" value="-e_PowerON_Reset"/>\r
-                                                                       <listOptionValue builtIn="false" value="--gc-sections"/>\r
-                                                               </option>\r
-                                                               <option command="-stats" id="com.renesas.cdt.core.Linker.option.misc8.1087911111" name="Compute and display statistics about the operation of the linker(-stats)" superClass="com.renesas.cdt.core.Linker.option.misc8" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Linker.option.linkOrderList.1908118178" name="" superClass="com.renesas.cdt.core.Linker.option.linkOrderList" valueType="stringList">\r
-                                                                       <listOptionValue builtIn="false" value="&quot;.\src/FreeRTOS_Source/portable/MemMang\heap_2.o&quot;"/>\r
-                                                                       <listOptionValue builtIn="false" value="&quot;.\src/FreeRTOS_Source/portable/GCC/RL78\port.o&quot;"/>\r
-                                                                       <listOptionValue builtIn="false" value="&quot;.\src/FreeRTOS_Source/portable/GCC/RL78\portasm.o&quot;"/>\r
-                                                                       <listOptionValue builtIn="false" value="&quot;.\src/FreeRTOS_Source\croutine.o&quot;"/>\r
-                                                                       <listOptionValue builtIn="false" value="&quot;.\src/FreeRTOS_Source\event_groups.o&quot;"/>\r
-                                                                       <listOptionValue builtIn="false" value="&quot;.\src/FreeRTOS_Source\list.o&quot;"/>\r
-                                                                       <listOptionValue builtIn="false" value="&quot;.\src/FreeRTOS_Source\queue.o&quot;"/>\r
-                                                                       <listOptionValue builtIn="false" value="&quot;.\src/FreeRTOS_Source\tasks.o&quot;"/>\r
-                                                                       <listOptionValue builtIn="false" value="&quot;.\src/FreeRTOS_Source\timers.o&quot;"/>\r
-                                                                       <listOptionValue builtIn="false" value="&quot;.\src/Common-Demo-Tasks\PollQ.o&quot;"/>\r
-                                                                       <listOptionValue builtIn="false" value="&quot;.\src/Common-Demo-Tasks\blocktim.o&quot;"/>\r
-                                                                       <listOptionValue builtIn="false" value="&quot;.\src/Common-Demo-Tasks\dynamic.o&quot;"/>\r
-                                                                       <listOptionValue builtIn="false" value="&quot;.\src\ExampleISR.o&quot;"/>\r
-                                                                       <listOptionValue builtIn="false" value="&quot;.\src\RegTest.o&quot;"/>\r
-                                                                       <listOptionValue builtIn="false" value="&quot;.\src\hardware_setup.o&quot;"/>\r
-                                                                       <listOptionValue builtIn="false" value="&quot;.\src\main.o&quot;"/>\r
-                                                                       <listOptionValue builtIn="false" value="&quot;.\src\main_blinky.o&quot;"/>\r
-                                                                       <listOptionValue builtIn="false" value="&quot;.\src\main_full.o&quot;"/>\r
-                                                                       <listOptionValue builtIn="false" value="&quot;.\src\reset_program.o&quot;"/>\r
-                                                                       <listOptionValue builtIn="false" value="&quot;.\src\vector_table.o&quot;"/>\r
-                                                                       <listOptionValue builtIn="false" value="&quot;.\libRTOSDemo.a&quot;"/>\r
-                                                               </option>\r
-                                                       </tool>\r
-                                                       <tool errorParsers="" id="com.renesas.cdt.rl78.hardwaredebug.win32.tool.objcopy.Id.290652406" name="Objcopy" superClass="com.renesas.cdt.rl78.hardwaredebug.win32.tool.objcopy.Id"/>\r
-                                               </toolChain>\r
-                                       </folderInfo>\r
-                                       <sourceEntries>\r
-                                               <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>\r
-                                       </sourceEntries>\r
-                               </configuration>\r
-                       </storageModule>\r
-                       <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>\r
-                       <storageModule moduleId="org.eclipse.cdt.core.language.mapping"/>\r
-                       <storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>\r
-               </cconfiguration>\r
-               <cconfiguration id="com.renesas.cdt.RL78.configuration.hardwaredebug.1462655394.864201896.848838140.1372568088">\r
-                       <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.renesas.cdt.RL78.configuration.hardwaredebug.1462655394.864201896.848838140.1372568088" moduleId="org.eclipse.cdt.core.settings" name="RL78_G1A_TB">\r
-                               <externalSettings/>\r
-                               <extensions>\r
-                                       <extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>\r
-                                       <extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>\r
-                                       <extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>\r
-                                       <extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>\r
-                                       <extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>\r
-                                       <extension id="org.eclipse.cdt.core.PE" point="org.eclipse.cdt.core.BinaryParser"/>\r
-                               </extensions>\r
-                       </storageModule>\r
-                       <storageModule moduleId="cdtBuildSystem" version="4.0.0">\r
-                               <configuration artifactExtension="mot" artifactName="RTOSDemo" buildArtefactType="com.renesas.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug,org.eclipse.cdt.build.core.buildArtefactType=com.renesas.cdt.build.core.buildArtefactType.exe" cleanCommand="rm -rf *.lst *.lis *.lpp *.map" description="" id="com.renesas.cdt.RL78.configuration.hardwaredebug.1462655394.864201896.848838140.1372568088" name="RL78_G1A_TB" parent="com.renesas.cdt.RL78.configuration.hardwaredebug">\r
-                                       <folderInfo id="com.renesas.cdt.RL78.configuration.hardwaredebug.1462655394.864201896.848838140.1372568088." name="/" resourcePath="">\r
-                                               <toolChain id="com.renesas.cdt.RL78.toolChain.hardwaredebugConf.533064755" name="KPIT GNURL78-ELF Toolchain" superClass="com.renesas.cdt.RL78.toolChain.hardwaredebugConf">\r
-                                                       <targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF;org.eclipse.cdt.core.PE" id="com.renesas.cdt.rl78.hardwaredebug.win32.targetPlatform.225674594" osList="win32" superClass="com.renesas.cdt.rl78.hardwaredebug.win32.targetPlatform"/>\r
-                                                       <builder buildPath="${workspace_loc:/RTOSDemo/HardwareDebug}" id="com.renesas.cdt.rl78.hardwaredebug.win32.builder.Id.73440468" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="GNU Make Builder" superClass="com.renesas.cdt.rl78.hardwaredebug.win32.builder.Id"/>\r
-                                                       <tool command="rl78-elf-libgen" id="com.renesas.cdt.rl78.hardwaredebug.win32.tool.libgen.Id.1757659235" name="Library Generator" superClass="com.renesas.cdt.rl78.hardwaredebug.win32.tool.libgen.Id">\r
-                                                               <option id="com.renesas.cdt.core.LibraryGenerator.option.stdio.551398759" name="stdio.h : Performs input/output handling" superClass="com.renesas.cdt.core.LibraryGenerator.option.stdio" value="false" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.LibraryGenerator.option.stdlib.975999573" name="stdlib.h : Performs C program standard processing such as storage area management" superClass="com.renesas.cdt.core.LibraryGenerator.option.stdlib" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.LibraryGenerator.option.string.1668451586" name="string.h : Performs string comparison, copying " superClass="com.renesas.cdt.core.LibraryGenerator.option.string" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.LibraryGenerator.option.selectLibrary.382453755" name="Select library" superClass="com.renesas.cdt.core.LibraryGenerator.option.selectLibrary" value="Optimized" valueType="enumerated"/>\r
-                                                               <option id="com.renesas.cdt.core.LibraryGenerator.option.libraryType.653497482" name="Library type" superClass="com.renesas.cdt.core.LibraryGenerator.option.libraryType" value="Project-Built" valueType="enumerated"/>\r
-                                                       </tool>\r
-                                                       <tool id="com.renesas.cdt.rl78.hardwaredebug.win32.tool.compiler.Id.1095988964" name="Compiler" superClass="com.renesas.cdt.rl78.hardwaredebug.win32.tool.compiler.Id">\r
-                                                               <option id="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.cpuType.293779100" name="CPU Type" superClass="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.cpuType" value="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.cpuType.g1a" valueType="enumerated"/>\r
-                                                               <option id="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.mmul.760592108" name="Multiplication code Generation Option" superClass="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.mmul" value="None" valueType="enumerated"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.includeFileDir.325109554" name="Include file directories" superClass="com.renesas.cdt.core.Compiler.option.includeFileDir" valueType="includePath">\r
-                                                                       <listOptionValue builtIn="false" value="&quot;${TCINSTALL}/rl78-elf/optlibinc&quot;"/>\r
-                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src/iodefine}&quot;"/>\r
-                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src/Common-Demo-Tasks/include}&quot;"/>\r
-                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src}&quot;"/>\r
-                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src/FreeRTOS_Source/include}&quot;"/>\r
-                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src/FreeRTOS_Source/portable/GCC/RL78}&quot;"/>\r
-                                                               </option>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.CPUSeries.1426658807" name="Cpu Series" superClass="com.renesas.cdt.core.Compiler.option.CPUSeries" value="R5F10JBC" valueType="string"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning14.873187803" name="Print extra warning messages(-Wextra)" superClass="com.renesas.cdt.core.Compiler.option.warning14" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.stdWarnings.1542801487" name="Standard Warnings" superClass="com.renesas.cdt.core.Compiler.option.stdWarnings" value="com.renesas.cdt.core.Compiler.option.stdWarnings.enableAll" valueType="enumerated"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning1.1516555288" name="Issue Warning if an array subscript has type char(-Wchar-subscripts)" superClass="com.renesas.cdt.core.Compiler.option.warning1" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning2.799182957" name="Issue Warning if comment appears within comment(-Wcomment)" superClass="com.renesas.cdt.core.Compiler.option.warning2" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning3.1607127292" name="Issue Warning if string functions format is incorrect(-Wformat)" superClass="com.renesas.cdt.core.Compiler.option.warning3" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning4.1144048059" name="Issue Warning if a function or parameter is implicitly declared(-Wimplicit)" superClass="com.renesas.cdt.core.Compiler.option.warning4" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning5.1428395136" name="Disable Warning about the use of #import(-Wno-import)" superClass="com.renesas.cdt.core.Compiler.option.warning5" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning6.464876974" name="Issue Warning if parentheses are omitted in certain contexts(-Wparentheses)" superClass="com.renesas.cdt.core.Compiler.option.warning6" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning7.1788493264" name="Issue Warning of possible return type problems(-Wreturn-type)" superClass="com.renesas.cdt.core.Compiler.option.warning7" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning8.479607051" name="Issue Warning of possible switch statement problems(-Wswitch)" superClass="com.renesas.cdt.core.Compiler.option.warning8" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning9.1405466384" name="Issue Warning if any trigraphs are encountered(-Wtrigraphs)" superClass="com.renesas.cdt.core.Compiler.option.warning9" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning10.1116206936" name="Issue Warning if a variable is unused aside from its declaration(-Wunused)" superClass="com.renesas.cdt.core.Compiler.option.warning10" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning11.1272691817" name="Issue Warning if an uninitialised automatic variable is used(-Wuninitialized)" superClass="com.renesas.cdt.core.Compiler.option.warning11" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning12.1957285695" name="Issue Warning of member initialisation mismatch(-Wreorder)" superClass="com.renesas.cdt.core.Compiler.option.warning12" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning13.1614464075" name="Issue Warning of bad sign comparisions(-Wsign-compare)" superClass="com.renesas.cdt.core.Compiler.option.warning13" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.debugFormat.774664907" name="Debug format" superClass="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.debugFormat" value="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.debugFormat.dwarf" valueType="enumerated"/>\r
-                                                               <option id="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.optimizationLevel.1273422143" name="Optimization level" superClass="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.optimizationLevel" value="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.optimizationLevel.none" valueType="enumerated"/>\r
-                                                               <option id="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.macroDefines.820242475" name="Macro Defines" superClass="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.macroDefines" valueType="definedSymbols">\r
-                                                                       <listOptionValue builtIn="false" value="RL78_G1A_TB"/>\r
-                                                               </option>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.includeSymbolTable.702595527" name="Include Symbol Table(s)" superClass="com.renesas.cdt.core.Compiler.option.includeSymbolTable" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.misc2.713693207" name="Don't search standard system directories for header files(-nostdinc)" superClass="com.renesas.cdt.core.Compiler.option.misc2" value="false" valueType="boolean"/>\r
-                                                               <inputType id="%Base.Compiler.C.InputType.Id.1185371592" name="C Input" superClass="%Base.Compiler.C.InputType.Id"/>\r
-                                                               <inputType id="Base.Compiler.CPP.InputType.Id.763886474" name="C++ Input" superClass="Base.Compiler.CPP.InputType.Id"/>\r
-                                                       </tool>\r
-                                                       <tool id="com.renesas.cdt.rl78.hardwaredebug.win32.tool.assembler.Id.2071712931" name="Assembler" superClass="com.renesas.cdt.rl78.hardwaredebug.win32.tool.assembler.Id">\r
-                                                               <option id="com.renesas.cdt.core.Assembler.option.includeFileDirectories.338447007" name="Include file directories" superClass="com.renesas.cdt.core.Assembler.option.includeFileDirectories" valueType="includePath">\r
-                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}}/src&quot;"/>\r
-                                                               </option>\r
-                                                               <option id="com.renesas.cdt.core.Assembler.option.includeSymbolTable.1667734422" name="Include Symbol Table(-as)" superClass="com.renesas.cdt.core.Assembler.option.includeSymbolTable" value="true" valueType="boolean"/>\r
-                                                               <option command="--defsym " id="com.renesas.cdt.core.Assembler.option.symbolDefines.873642275" name="Symbol defines" superClass="com.renesas.cdt.core.Assembler.option.symbolDefines"/>\r
-                                                               <inputType id="%Base.Assembler.inputType.Id.1525876099" name="Assembler InputType" superClass="%Base.Assembler.inputType.Id"/>\r
-                                                       </tool>\r
-                                                       <tool command="rl78-elf-ld" commandLinePattern="${COMMAND} ${OUTPUT_FLAG}${OUTPUT_PREFIX} ${OUTPUT}${INPUTS} ${FLAGS}" id="com.renesas.cdt.rl78.hardwaredebug.win32.tool.linker.Id.1741378147" name="Linker" superClass="com.renesas.cdt.rl78.hardwaredebug.win32.tool.linker.Id">\r
-                                                               <option id="com.renesas.cdt.rl78.HardwareDebug.Linker.option.archiveSearchDirectories.1402339016" name="Archive search directories" superClass="com.renesas.cdt.rl78.HardwareDebug.Linker.option.archiveSearchDirectories" valueType="stringList">\r
-                                                                       <listOptionValue builtIn="false" value="&quot;${CONFIGDIR}&quot;"/>\r
-                                                                       <listOptionValue builtIn="false" value="&quot;${TCINSTALL}/lib/gcc/rl78-elf//${GCC_VERSION}&quot;"/>\r
-                                                               </option>\r
-                                                               <option id="com.renesas.cdt.rl78.HardwareDebug.Linker.option.archiveLibraryFiles.2067366351" name="Archive (library) files" superClass="com.renesas.cdt.rl78.HardwareDebug.Linker.option.archiveLibraryFiles" valueType="stringList">\r
-                                                                       <listOptionValue builtIn="false" value="${BuildArtifactFileBaseName}"/>\r
-                                                                       <listOptionValue builtIn="false" value="gcc"/>\r
-                                                               </option>\r
-                                                               <option id="com.renesas.cdt.core.Linker.option.userDefinedOptions.1076419513" name="User defined options" superClass="com.renesas.cdt.core.Linker.option.userDefinedOptions" valueType="stringList">\r
-                                                                       <listOptionValue builtIn="false" value="-e_PowerON_Reset"/>\r
-                                                               </option>\r
-                                                               <option command="-stats" id="com.renesas.cdt.core.Linker.option.misc8.1687098122" name="Compute and display statistics about the operation of the linker(-stats)" superClass="com.renesas.cdt.core.Linker.option.misc8" value="true" valueType="boolean"/>\r
-                                                       </tool>\r
-                                                       <tool id="com.renesas.cdt.rl78.hardwaredebug.win32.tool.objcopy.Id.708363548" name="Objcopy" superClass="com.renesas.cdt.rl78.hardwaredebug.win32.tool.objcopy.Id"/>\r
-                                               </toolChain>\r
-                                       </folderInfo>\r
-                                       <sourceEntries>\r
-                                               <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>\r
-                                       </sourceEntries>\r
-                               </configuration>\r
-                       </storageModule>\r
-                       <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>\r
-                       <storageModule moduleId="org.eclipse.cdt.core.language.mapping"/>\r
-                       <storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>\r
-               </cconfiguration>\r
-               <cconfiguration id="com.renesas.cdt.RL78.configuration.hardwaredebug.1462655394.864201896.661607105">\r
-                       <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.renesas.cdt.RL78.configuration.hardwaredebug.1462655394.864201896.661607105" moduleId="org.eclipse.cdt.core.settings" name="RSKRL78L1C">\r
-                               <externalSettings/>\r
-                               <extensions>\r
-                                       <extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>\r
-                                       <extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>\r
-                                       <extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>\r
-                                       <extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>\r
-                                       <extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>\r
-                                       <extension id="org.eclipse.cdt.core.PE" point="org.eclipse.cdt.core.BinaryParser"/>\r
-                               </extensions>\r
-                       </storageModule>\r
-                       <storageModule moduleId="cdtBuildSystem" version="4.0.0">\r
-                               <configuration artifactExtension="mot" artifactName="RTOSDemo" buildArtefactType="com.renesas.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug,org.eclipse.cdt.build.core.buildArtefactType=com.renesas.cdt.build.core.buildArtefactType.exe" cleanCommand="rm -rf *.lst *.lis *.lpp *.map" description="" id="com.renesas.cdt.RL78.configuration.hardwaredebug.1462655394.864201896.661607105" name="RSKRL78L1C" parent="com.renesas.cdt.RL78.configuration.hardwaredebug">\r
-                                       <folderInfo id="com.renesas.cdt.RL78.configuration.hardwaredebug.1462655394.864201896.661607105." name="/" resourcePath="">\r
-                                               <toolChain id="com.renesas.cdt.RL78.toolChain.hardwaredebugConf.1925187785" name="KPIT GNURL78-ELF Toolchain" superClass="com.renesas.cdt.RL78.toolChain.hardwaredebugConf">\r
-                                                       <targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF;org.eclipse.cdt.core.PE" id="com.renesas.cdt.rl78.hardwaredebug.win32.targetPlatform.464468283" osList="win32" superClass="com.renesas.cdt.rl78.hardwaredebug.win32.targetPlatform"/>\r
-                                                       <builder buildPath="${workspace_loc:/RTOSDemo/HardwareDebug}" id="com.renesas.cdt.rl78.hardwaredebug.win32.builder.Id.991079889" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="GNU Make Builder" superClass="com.renesas.cdt.rl78.hardwaredebug.win32.builder.Id"/>\r
-                                                       <tool command="rl78-elf-libgen" id="com.renesas.cdt.rl78.hardwaredebug.win32.tool.libgen.Id.150253841" name="Library Generator" superClass="com.renesas.cdt.rl78.hardwaredebug.win32.tool.libgen.Id">\r
-                                                               <option id="com.renesas.cdt.core.LibraryGenerator.option.stdio.1939771009" name="stdio.h : Performs input/output handling" superClass="com.renesas.cdt.core.LibraryGenerator.option.stdio" value="false" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.LibraryGenerator.option.stdlib.200300486" name="stdlib.h : Performs C program standard processing such as storage area management" superClass="com.renesas.cdt.core.LibraryGenerator.option.stdlib" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.LibraryGenerator.option.string.1968503186" name="string.h : Performs string comparison, copying " superClass="com.renesas.cdt.core.LibraryGenerator.option.string" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.LibraryGenerator.option.selectLibrary.689655144" name="Select library" superClass="com.renesas.cdt.core.LibraryGenerator.option.selectLibrary" value="Optimized" valueType="enumerated"/>\r
-                                                               <option id="com.renesas.cdt.core.LibraryGenerator.option.libraryType.2132503809" name="Library type" superClass="com.renesas.cdt.core.LibraryGenerator.option.libraryType" value="Project-Built" valueType="enumerated"/>\r
-                                                       </tool>\r
-                                                       <tool id="com.renesas.cdt.rl78.hardwaredebug.win32.tool.compiler.Id.437851717" name="Compiler" superClass="com.renesas.cdt.rl78.hardwaredebug.win32.tool.compiler.Id">\r
-                                                               <option id="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.cpuType.2100632987" name="CPU Type" superClass="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.cpuType" value="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.cpuType.l1c" valueType="enumerated"/>\r
-                                                               <option id="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.mmul.1101181582" name="Multiplication code Generation Option" superClass="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.mmul" value="None" valueType="enumerated"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.includeFileDir.820363941" name="Include file directories" superClass="com.renesas.cdt.core.Compiler.option.includeFileDir" valueType="includePath">\r
-                                                                       <listOptionValue builtIn="false" value="&quot;${TCINSTALL}/rl78-elf/optlibinc&quot;"/>\r
-                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src/iodefine}&quot;"/>\r
-                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src/Common-Demo-Tasks/include}&quot;"/>\r
-                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src}&quot;"/>\r
-                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src/FreeRTOS_Source/include}&quot;"/>\r
-                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src/FreeRTOS_Source/portable/GCC/RL78}&quot;"/>\r
-                                                               </option>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.CPUSeries.823867201" name="Cpu Series" superClass="com.renesas.cdt.core.Compiler.option.CPUSeries" value="R5F10JBC" valueType="string"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning14.1288237182" name="Print extra warning messages(-Wextra)" superClass="com.renesas.cdt.core.Compiler.option.warning14" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.stdWarnings.1684617262" name="Standard Warnings" superClass="com.renesas.cdt.core.Compiler.option.stdWarnings" value="com.renesas.cdt.core.Compiler.option.stdWarnings.enableAll" valueType="enumerated"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning1.806299273" name="Issue Warning if an array subscript has type char(-Wchar-subscripts)" superClass="com.renesas.cdt.core.Compiler.option.warning1" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning2.1901581096" name="Issue Warning if comment appears within comment(-Wcomment)" superClass="com.renesas.cdt.core.Compiler.option.warning2" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning3.1541543076" name="Issue Warning if string functions format is incorrect(-Wformat)" superClass="com.renesas.cdt.core.Compiler.option.warning3" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning4.1161378198" name="Issue Warning if a function or parameter is implicitly declared(-Wimplicit)" superClass="com.renesas.cdt.core.Compiler.option.warning4" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning5.1789292050" name="Disable Warning about the use of #import(-Wno-import)" superClass="com.renesas.cdt.core.Compiler.option.warning5" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning6.84501834" name="Issue Warning if parentheses are omitted in certain contexts(-Wparentheses)" superClass="com.renesas.cdt.core.Compiler.option.warning6" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning7.1338708112" name="Issue Warning of possible return type problems(-Wreturn-type)" superClass="com.renesas.cdt.core.Compiler.option.warning7" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning8.374855392" name="Issue Warning of possible switch statement problems(-Wswitch)" superClass="com.renesas.cdt.core.Compiler.option.warning8" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning9.1983388469" name="Issue Warning if any trigraphs are encountered(-Wtrigraphs)" superClass="com.renesas.cdt.core.Compiler.option.warning9" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning10.983060895" name="Issue Warning if a variable is unused aside from its declaration(-Wunused)" superClass="com.renesas.cdt.core.Compiler.option.warning10" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning11.923794925" name="Issue Warning if an uninitialised automatic variable is used(-Wuninitialized)" superClass="com.renesas.cdt.core.Compiler.option.warning11" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning12.1620427209" name="Issue Warning of member initialisation mismatch(-Wreorder)" superClass="com.renesas.cdt.core.Compiler.option.warning12" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.warning13.1082135198" name="Issue Warning of bad sign comparisions(-Wsign-compare)" superClass="com.renesas.cdt.core.Compiler.option.warning13" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.debugFormat.549479064" name="Debug format" superClass="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.debugFormat" value="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.debugFormat.dwarf" valueType="enumerated"/>\r
-                                                               <option id="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.optimizationLevel.452759366" name="Optimization level" superClass="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.optimizationLevel" value="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.optimizationLevel.none" valueType="enumerated"/>\r
-                                                               <option id="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.macroDefines.1552305025" name="Macro Defines" superClass="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.macroDefines" valueType="definedSymbols">\r
-                                                                       <listOptionValue builtIn="false" value="RSKRL78L1C"/>\r
-                                                               </option>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.includeSymbolTable.330377434" name="Include Symbol Table(s)" superClass="com.renesas.cdt.core.Compiler.option.includeSymbolTable" value="true" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.misc26.685469544" name="Ignore 'inline' keyword(-fno-inline)" superClass="com.renesas.cdt.core.Compiler.option.misc26" value="false" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.misc48.1598779240" name="List macro definitions but omit arguments and contents(-dN)" superClass="com.renesas.cdt.core.Compiler.option.misc48" value="false" valueType="boolean"/>\r
-                                                               <option id="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.userDefinedOptions.965893190" name="User defined options" superClass="com.renesas.cdt.rl78.HardwareDebug.Compiler.option.userDefinedOptions"/>\r
-                                                               <option id="com.renesas.cdt.core.Compiler.option.misc2.1239011445" name="Don't search standard system directories for header files(-nostdinc)" superClass="com.renesas.cdt.core.Compiler.option.misc2" value="false" valueType="boolean"/>\r
-                                                               <inputType id="%Base.Compiler.C.InputType.Id.1475424543" name="C Input" superClass="%Base.Compiler.C.InputType.Id"/>\r
-                                                               <inputType id="Base.Compiler.CPP.InputType.Id.13063581" name="C++ Input" superClass="Base.Compiler.CPP.InputType.Id"/>\r
-                                                       </tool>\r
-                                                       <tool id="com.renesas.cdt.rl78.hardwaredebug.win32.tool.assembler.Id.1767021126" name="Assembler" superClass="com.renesas.cdt.rl78.hardwaredebug.win32.tool.assembler.Id">\r
-                                                               <option id="com.renesas.cdt.core.Assembler.option.includeFileDirectories.584727211" name="Include file directories" superClass="com.renesas.cdt.core.Assembler.option.includeFileDirectories" valueType="includePath">\r
-                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}}/src&quot;"/>\r
-                                                               </option>\r
-                                                               <option id="com.renesas.cdt.core.Assembler.option.includeSymbolTable.1481239232" name="Include Symbol Table(-as)" superClass="com.renesas.cdt.core.Assembler.option.includeSymbolTable" value="true" valueType="boolean"/>\r
-                                                               <inputType id="%Base.Assembler.inputType.Id.1995981014" name="Assembler InputType" superClass="%Base.Assembler.inputType.Id"/>\r
-                                                       </tool>\r
-                                                       <tool command="rl78-elf-ld" commandLinePattern="${COMMAND} ${OUTPUT_FLAG}${OUTPUT_PREFIX} ${OUTPUT}${INPUTS} ${FLAGS}" id="com.renesas.cdt.rl78.hardwaredebug.win32.tool.linker.Id.1983403774" name="Linker" superClass="com.renesas.cdt.rl78.hardwaredebug.win32.tool.linker.Id">\r
-                                                               <option id="com.renesas.cdt.rl78.HardwareDebug.Linker.option.archiveSearchDirectories.1610499591" name="Archive search directories" superClass="com.renesas.cdt.rl78.HardwareDebug.Linker.option.archiveSearchDirectories" valueType="stringList">\r
-                                                                       <listOptionValue builtIn="false" value="&quot;${CONFIGDIR}&quot;"/>\r
-                                                                       <listOptionValue builtIn="false" value="&quot;${TCINSTALL}/lib/gcc/rl78-elf//${GCC_VERSION}&quot;"/>\r
-                                                                       <listOptionValue builtIn="false" value="&quot;${TCINSTALL}/lib/gcc/rl78-elf//${GCC_VERSION}&quot;"/>\r
-                                                               </option>\r
-                                                               <option id="com.renesas.cdt.rl78.HardwareDebug.Linker.option.archiveLibraryFiles.26850450" name="Archive (library) files" superClass="com.renesas.cdt.rl78.HardwareDebug.Linker.option.archiveLibraryFiles" valueType="stringList">\r
-                                                                       <listOptionValue builtIn="false" value="${BuildArtifactFileBaseName}"/>\r
-                                                                       <listOptionValue builtIn="false" value="gcc"/>\r
-                                                               </option>\r
-                                                               <option id="com.renesas.cdt.core.Linker.option.userDefinedOptions.490918053" name="User defined options" superClass="com.renesas.cdt.core.Linker.option.userDefinedOptions" valueType="stringList">\r
-                                                                       <listOptionValue builtIn="false" value="-e_PowerON_Reset"/>\r
-                                                               </option>\r
-                                                               <option command="-stats" id="com.renesas.cdt.core.Linker.option.misc8.1365322726" name="Compute and display statistics about the operation of the linker(-stats)" superClass="com.renesas.cdt.core.Linker.option.misc8" value="true" valueType="boolean"/>\r
-                                                       </tool>\r
-                                                       <tool id="com.renesas.cdt.rl78.hardwaredebug.win32.tool.objcopy.Id.529097714" name="Objcopy" superClass="com.renesas.cdt.rl78.hardwaredebug.win32.tool.objcopy.Id"/>\r
-                                               </toolChain>\r
-                                       </folderInfo>\r
-                                       <sourceEntries>\r
-                                               <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>\r
-                                       </sourceEntries>\r
-                               </configuration>\r
-                       </storageModule>\r
-                       <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>\r
-                       <storageModule moduleId="org.eclipse.cdt.core.language.mapping"/>\r
-                       <storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>\r
-               </cconfiguration>\r
-       </storageModule>\r
-       <storageModule moduleId="cdtBuildSystem" version="4.0.0">\r
-               <project id="RTOSDemo.com.renesas.cdt.RL78.projectType.1275970009" name="GNURL78" projectType="com.renesas.cdt.RL78.projectType"/>\r
-       </storageModule>\r
-       <storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>\r
-       <storageModule moduleId="scannerConfiguration">\r
-               <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>\r
-               <profile id="com.iar.cdt.v850.scanner.IAR_V850_PerProjectProfile">\r
-                       <buildOutputProvider>\r
-                               <openAction enabled="false" filePath=""/>\r
-                               <parser enabled="false"/>\r
-                       </buildOutputProvider>\r
-                       <scannerInfoProvider id="com.iar.cdt.v850.toolchain.scannerInfoProvider1">\r
-                               <runAction arguments="" command="" useDefault="true"/>\r
-                               <parser enabled="true"/>\r
-                       </scannerInfoProvider>\r
-               </profile>\r
-               <profile id="com.iar.cdt.rl78.scanner.IAR_RL78_PerProjectProfile">\r
-                       <buildOutputProvider>\r
-                               <openAction enabled="false" filePath=""/>\r
-                               <parser enabled="false"/>\r
-                       </buildOutputProvider>\r
-                       <scannerInfoProvider id="com.iar.cdt.rl78.toolchain.scannerInfoProviderRL78">\r
-                               <runAction arguments="" command="" useDefault="true"/>\r
-                               <parser enabled="true"/>\r
-                       </scannerInfoProvider>\r
-               </profile>\r
-               <profile id="com.iar.cdt.rx.scanner.IAR_RX_PerProjectProfile">\r
-                       <buildOutputProvider>\r
-                               <openAction enabled="false" filePath=""/>\r
-                               <parser enabled="false"/>\r
-                       </buildOutputProvider>\r
-                       <scannerInfoProvider id="com.iar.cdt.rx.toolchain.scannerInfoProviderRX">\r
-                               <runAction arguments="" command="" useDefault="true"/>\r
-                               <parser enabled="true"/>\r
-                       </scannerInfoProvider>\r
-               </profile>\r
-               <profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">\r
-                       <buildOutputProvider>\r
-                               <openAction enabled="true" filePath=""/>\r
-                               <parser enabled="true"/>\r
-                       </buildOutputProvider>\r
-                       <scannerInfoProvider id="specsFile">\r
-                               <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>\r
-                               <parser enabled="true"/>\r
-                       </scannerInfoProvider>\r
-               </profile>\r
-               <profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">\r
-                       <buildOutputProvider>\r
-                               <openAction enabled="true" filePath=""/>\r
-                               <parser enabled="true"/>\r
-                       </buildOutputProvider>\r
-                       <scannerInfoProvider id="makefileGenerator">\r
-                               <runAction arguments="-E -P -v -dD" command="" useDefault="true"/>\r
-                               <parser enabled="true"/>\r
-                       </scannerInfoProvider>\r
-               </profile>\r
-               <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">\r
-                       <buildOutputProvider>\r
-                               <openAction enabled="true" filePath=""/>\r
-                               <parser enabled="true"/>\r
-                       </buildOutputProvider>\r
-                       <scannerInfoProvider id="specsFile">\r
-                               <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>\r
-                               <parser enabled="true"/>\r
-                       </scannerInfoProvider>\r
-               </profile>\r
-               <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">\r
-                       <buildOutputProvider>\r
-                               <openAction enabled="true" filePath=""/>\r
-                               <parser enabled="true"/>\r
-                       </buildOutputProvider>\r
-                       <scannerInfoProvider id="specsFile">\r
-                               <runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>\r
-                               <parser enabled="true"/>\r
-                       </scannerInfoProvider>\r
-               </profile>\r
-               <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">\r
-                       <buildOutputProvider>\r
-                               <openAction enabled="true" filePath=""/>\r
-                               <parser enabled="true"/>\r
-                       </buildOutputProvider>\r
-                       <scannerInfoProvider id="specsFile">\r
-                               <runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>\r
-                               <parser enabled="true"/>\r
-                       </scannerInfoProvider>\r
-               </profile>\r
-               <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">\r
-                       <buildOutputProvider>\r
-                               <openAction enabled="true" filePath=""/>\r
-                               <parser enabled="true"/>\r
-                       </buildOutputProvider>\r
-                       <scannerInfoProvider id="specsFile">\r
-                               <runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/${specs_file}&quot;'" command="sh" useDefault="true"/>\r
-                               <parser enabled="true"/>\r
-                       </scannerInfoProvider>\r
-               </profile>\r
-               <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">\r
-                       <buildOutputProvider>\r
-                               <openAction enabled="true" filePath=""/>\r
-                               <parser enabled="true"/>\r
-                       </buildOutputProvider>\r
-                       <scannerInfoProvider id="specsFile">\r
-                               <runAction arguments="-c 'g++ -E -P -v -dD &quot;${plugin_state_location}/specs.cpp&quot;'" command="sh" useDefault="true"/>\r
-                               <parser enabled="true"/>\r
-                       </scannerInfoProvider>\r
-               </profile>\r
-               <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">\r
-                       <buildOutputProvider>\r
-                               <openAction enabled="true" filePath=""/>\r
-                               <parser enabled="true"/>\r
-                       </buildOutputProvider>\r
-                       <scannerInfoProvider id="specsFile">\r
-                               <runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/specs.c&quot;'" command="sh" useDefault="true"/>\r
-                               <parser enabled="true"/>\r
-                       </scannerInfoProvider>\r
-               </profile>\r
-       </storageModule>\r
-       <storageModule moduleId="refreshScope" versionNumber="2">\r
-               <configuration configurationName="RL78_G1A_TB">\r
-                       <resource resourceType="PROJECT" workspacePath="/RTOSDemo"/>\r
-               </configuration>\r
-               <configuration configurationName="YRDKRL78G14">\r
-                       <resource resourceType="PROJECT" workspacePath="/RTOSDemo"/>\r
-               </configuration>\r
-               <configuration configurationName="RSKRL78L13">\r
-                       <resource resourceType="PROJECT" workspacePath="/RTOSDemo"/>\r
-               </configuration>\r
-               <configuration configurationName="RSKRL78L1C">\r
-                       <resource resourceType="PROJECT" workspacePath="/RTOSDemo"/>\r
-               </configuration>\r
-               <configuration configurationName="RSKRL78G1C">\r
-                       <resource resourceType="PROJECT" workspacePath="/RTOSDemo"/>\r
-               </configuration>\r
-       </storageModule>\r
-</cproject>\r
diff --git a/FreeRTOS/Demo/RL78_E2Studio_GCC/.info b/FreeRTOS/Demo/RL78_E2Studio_GCC/.info
deleted file mode 100644 (file)
index 69e2de3..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-TOOL_CHAIN=KPIT GNURL78-ELF Toolchain
-VERSION=v14.01
-TC_INSTALL=C:\devtools\KPIT\GNURL78v14.01-ELF\rl78-ELF\
-GCC_STRING=4.8-GNURL78_v14.01
-VERSION_IDE=
-E2STUDIO_VERSION=3.0.0.22
-ACTIVE_CONFIGURATION=RSKRL78L13
diff --git a/FreeRTOS/Demo/RL78_E2Studio_GCC/.project b/FreeRTOS/Demo/RL78_E2Studio_GCC/.project
deleted file mode 100644 (file)
index 6c88a76..0000000
+++ /dev/null
@@ -1,161 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>\r
-<projectDescription>\r
-       <name>RTOSDemo</name>\r
-       <comment></comment>\r
-       <projects>\r
-       </projects>\r
-       <buildSpec>\r
-               <buildCommand>\r
-                       <name>com.renesas.cdt.core.genmakebuilder</name>\r
-                       <arguments>\r
-                               <dictionary>\r
-                                       <key>?name?</key>\r
-                                       <value></value>\r
-                               </dictionary>\r
-                               <dictionary>\r
-                                       <key>org.eclipse.cdt.make.core.append_environment</key>\r
-                                       <value>true</value>\r
-                               </dictionary>\r
-                               <dictionary>\r
-                                       <key>org.eclipse.cdt.make.core.autoBuildTarget</key>\r
-                                       <value>all</value>\r
-                               </dictionary>\r
-                               <dictionary>\r
-                                       <key>org.eclipse.cdt.make.core.buildArguments</key>\r
-                                       <value></value>\r
-                               </dictionary>\r
-                               <dictionary>\r
-                                       <key>org.eclipse.cdt.make.core.buildCommand</key>\r
-                                       <value>make</value>\r
-                               </dictionary>\r
-                               <dictionary>\r
-                                       <key>org.eclipse.cdt.make.core.buildLocation</key>\r
-                                       <value>${workspace_loc:/RTOSDemo/HardwareDebug}</value>\r
-                               </dictionary>\r
-                               <dictionary>\r
-                                       <key>org.eclipse.cdt.make.core.cleanBuildTarget</key>\r
-                                       <value>clean</value>\r
-                               </dictionary>\r
-                               <dictionary>\r
-                                       <key>org.eclipse.cdt.make.core.contents</key>\r
-                                       <value>org.eclipse.cdt.make.core.configurationIds</value>\r
-                               </dictionary>\r
-                               <dictionary>\r
-                                       <key>org.eclipse.cdt.make.core.enableAutoBuild</key>\r
-                                       <value>false</value>\r
-                               </dictionary>\r
-                               <dictionary>\r
-                                       <key>org.eclipse.cdt.make.core.enableCleanBuild</key>\r
-                                       <value>true</value>\r
-                               </dictionary>\r
-                               <dictionary>\r
-                                       <key>org.eclipse.cdt.make.core.enableFullBuild</key>\r
-                                       <value>true</value>\r
-                               </dictionary>\r
-                               <dictionary>\r
-                                       <key>org.eclipse.cdt.make.core.fullBuildTarget</key>\r
-                                       <value>all</value>\r
-                               </dictionary>\r
-                               <dictionary>\r
-                                       <key>org.eclipse.cdt.make.core.stopOnError</key>\r
-                                       <value>true</value>\r
-                               </dictionary>\r
-                               <dictionary>\r
-                                       <key>org.eclipse.cdt.make.core.useDefaultBuildCmd</key>\r
-                                       <value>true</value>\r
-                               </dictionary>\r
-                       </arguments>\r
-               </buildCommand>\r
-               <buildCommand>\r
-                       <name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>\r
-                       <triggers>full,incremental,</triggers>\r
-                       <arguments>\r
-                       </arguments>\r
-               </buildCommand>\r
-       </buildSpec>\r
-       <natures>\r
-               <nature>org.eclipse.cdt.core.cnature</nature>\r
-               <nature>com.renesas.cdt.core.kpitcnature</nature>\r
-               <nature>com.renesas.cdt.core.kpitccnature</nature>\r
-               <nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>\r
-               <nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>\r
-       </natures>\r
-       <linkedResources>\r
-               <link>\r
-                       <name>src/FreeRTOS_Source</name>\r
-                       <type>2</type>\r
-                       <locationURI>FREERTOS_ROOT/FreeRTOS/Source</locationURI>\r
-               </link>\r
-       </linkedResources>\r
-       <filteredResources>\r
-               <filter>\r
-                       <id>1389872096784</id>\r
-                       <name>src/FreeRTOS_Source</name>\r
-                       <type>5</type>\r
-                       <matcher>\r
-                               <id>org.eclipse.ui.ide.multiFilter</id>\r
-                               <arguments>1.0-name-matches-false-false-*.c</arguments>\r
-                       </matcher>\r
-               </filter>\r
-               <filter>\r
-                       <id>1389872116001</id>\r
-                       <name>src/FreeRTOS_Source/include</name>\r
-                       <type>5</type>\r
-                       <matcher>\r
-                               <id>org.eclipse.ui.ide.multiFilter</id>\r
-                               <arguments>1.0-name-matches-false-false-*.h</arguments>\r
-                       </matcher>\r
-               </filter>\r
-               <filter>\r
-                       <id>1389875541327</id>\r
-                       <name>src/FreeRTOS_Source/portable</name>\r
-                       <type>9</type>\r
-                       <matcher>\r
-                               <id>org.eclipse.ui.ide.multiFilter</id>\r
-                               <arguments>1.0-name-matches-false-false-GCC</arguments>\r
-                       </matcher>\r
-               </filter>\r
-               <filter>\r
-                       <id>1389875542015</id>\r
-                       <name>src/FreeRTOS_Source/portable</name>\r
-                       <type>6</type>\r
-                       <matcher>\r
-                               <id>org.eclipse.ui.ide.multiFilter</id>\r
-                               <arguments>1.0-name-matches-false-false-*.*</arguments>\r
-                       </matcher>\r
-               </filter>\r
-               <filter>\r
-                       <id>1389875542015</id>\r
-                       <name>src/FreeRTOS_Source/portable</name>\r
-                       <type>9</type>\r
-                       <matcher>\r
-                               <id>org.eclipse.ui.ide.multiFilter</id>\r
-                               <arguments>1.0-name-matches-false-false-MemMang</arguments>\r
-                       </matcher>\r
-               </filter>\r
-               <filter>\r
-                       <id>1389872218149</id>\r
-                       <name>src/FreeRTOS_Source/portable/GCC</name>\r
-                       <type>9</type>\r
-                       <matcher>\r
-                               <id>org.eclipse.ui.ide.multiFilter</id>\r
-                               <arguments>1.0-name-matches-false-false-RL78</arguments>\r
-                       </matcher>\r
-               </filter>\r
-               <filter>\r
-                       <id>1389875563809</id>\r
-                       <name>src/FreeRTOS_Source/portable/MemMang</name>\r
-                       <type>5</type>\r
-                       <matcher>\r
-                               <id>org.eclipse.ui.ide.multiFilter</id>\r
-                               <arguments>1.0-name-matches-false-false-heap_2.c</arguments>\r
-                       </matcher>\r
-               </filter>\r
-       </filteredResources>\r
-       <variableList>\r
-               <variable>\r
-                       <name>FREERTOS_ROOT</name>\r
-                       <value>$%7BPARENT-3-PROJECT_LOC%7D</value>\r
-               </variable>\r
-       </variableList>\r
-</projectDescription>\r
diff --git a/FreeRTOS/Demo/RL78_E2Studio_GCC/.settings/Project_Generation_Prefrences.prefs b/FreeRTOS/Demo/RL78_E2Studio_GCC/.settings/Project_Generation_Prefrences.prefs
deleted file mode 100644 (file)
index c2c6be9..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-Library\ Generator\ Command=rl78-elf-libgen\r
-com.renesas.cdt.core.Assembler.option.includeFileDirectories="${workspace_loc\:/${ProjName}}\\src";\r
-com.renesas.cdt.core.Compiler.option.includeFileDir.1067754383="${TCINSTALL}\\rl78-elf\\optlibinc";\r
-com.renesas.cdt.core.LibraryGenerator.option.ctype=true\r
-com.renesas.cdt.core.LibraryGenerator.option.libraryType=Project-Built\r
-com.renesas.cdt.core.LibraryGenerator.option.math=false\r
-com.renesas.cdt.core.LibraryGenerator.option.selectLibrary=Optimized\r
-com.renesas.cdt.core.LibraryGenerator.option.stdio=true\r
-com.renesas.cdt.core.LibraryGenerator.option.stdlib=true\r
-com.renesas.cdt.core.LibraryGenerator.option.string=true\r
-com.renesas.cdt.core.Linker.option.userDefinedOptions=[Ljava.lang.String;@1dfdfb2\r
-com.renesas.cdt.rl78.HardwareDebug.Compiler.option.cpuType=RL78 - G1C\r
-com.renesas.cdt.rl78.HardwareDebug.Compiler.option.cpuType.1364542281=RL78 - G1C\r
-com.renesas.cdt.rl78.HardwareDebug.Compiler.option.mmul=None\r
-com.renesas.cdt.rl78.HardwareDebug.Linker.option.archiveLibraryFiles=${ProjName};gcc;\r
-com.renesas.cdt.rl78.HardwareDebug.Linker.option.archiveSearchDirectories.1610499591="${CONFIGDIR}";"${TCINSTALL}/lib/gcc/rl78-elf//${GCC_VERSION}";"${TCINSTALL}\\lib\\gcc\\rl78-elf\\\\${GCC_VERSION}";\r
-com.renesas.cdt.rl78.HardwareDebug.Linker.option.archiveSearchDirectories.1960648199="${CONFIGDIR}";"${TCINSTALL}\\lib\\gcc\\rl78-elf\\\\${GCC_VERSION}";\r
-com.renesas.cdt.rl78.HardwareDebug.Linker.option.archiveSearchDirectories.8586332="${CONFIGDIR}";"${TCINSTALL}/lib/gcc/rl78-elf//${GCC_VERSION}";"${TCINSTALL}/lib/gcc/rl78-elf/${GCC_VERSION}";\r
-com.renesas.cdt.rl78.HardwareDebug.Linker.option.archiveSearchDirectories.970009502="${CONFIGDIR}";"${TCINSTALL}\\lib\\gcc\\rl78-elf\\\\${GCC_VERSION}";\r
-com.renesas.cdt.rl78.HardwareDebug.Linker.option.archiveSearchDirectories.984802356="${CONFIGDIR}";"${TCINSTALL}/lib/gcc/rl78-elf//${GCC_VERSION}";"${TCINSTALL}\\lib\\gcc\\rl78-elf\\\\${GCC_VERSION}";\r
-eclipse.preferences.version=1\r
diff --git a/FreeRTOS/Demo/RL78_E2Studio_GCC/.settings/org.eclipse.ltk.core.refactoring.prefs b/FreeRTOS/Demo/RL78_E2Studio_GCC/.settings/org.eclipse.ltk.core.refactoring.prefs
deleted file mode 100644 (file)
index 50255e8..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-#Fri Feb 22 15:51:32 GMT 2013\r
-eclipse.preferences.version=1\r
-org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false\r
diff --git a/FreeRTOS/Demo/RL78_E2Studio_GCC/custom.bat b/FreeRTOS/Demo/RL78_E2Studio_GCC/custom.bat
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/FreeRTOS/Demo/RL78_E2Studio_GCC/src/Common-Demo-Tasks/PollQ.c b/FreeRTOS/Demo/RL78_E2Studio_GCC/src/Common-Demo-Tasks/PollQ.c
deleted file mode 100644 (file)
index 804ec06..0000000
+++ /dev/null
@@ -1,220 +0,0 @@
-/*\r
- * FreeRTOS Kernel V10.1.0\r
- * Copyright (C) 2018 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
- * This version of PollQ. c is for use on systems that have limited stack\r
- * space and no display facilities.  The complete version can be found in\r
- * the Demo/Common/Full directory.\r
- *\r
- * Creates two tasks that communicate over a single queue.  One task acts as a\r
- * producer, the other a consumer.\r
- *\r
- * The producer loops for three iteration, posting an incrementing number onto the\r
- * queue each cycle.  It then delays for a fixed period before doing exactly the\r
- * same again.\r
- *\r
- * The consumer loops emptying the queue.  Each item removed from the queue is\r
- * checked to ensure it contains the expected value.  When the queue is empty it\r
- * blocks for a fixed period, then does the same again.\r
- *\r
- * All queue access is performed without blocking.  The consumer completely empties\r
- * the queue each time it runs so the producer should never find the queue full.\r
- *\r
- * An error is flagged if the consumer obtains an unexpected value or the producer\r
- * find the queue is full.\r
- */\r
-\r
-/*\r
-Changes from V2.0.0\r
-\r
-       + Delay periods are now specified using variables and constants of\r
-         TickType_t rather than unsigned long.\r
-*/\r
-\r
-#include <stdlib.h>\r
-\r
-/* Scheduler include files. */\r
-#include "FreeRTOS.h"\r
-#include "task.h"\r
-#include "queue.h"\r
-\r
-/* Demo program include files. */\r
-#include "PollQ.h"\r
-\r
-#define pollqSTACK_SIZE                        configMINIMAL_STACK_SIZE\r
-#define pollqQUEUE_SIZE                        ( 10 )\r
-#define pollqPRODUCER_DELAY            ( ( TickType_t ) 200 / portTICK_PERIOD_MS )\r
-#define pollqCONSUMER_DELAY            ( pollqPRODUCER_DELAY - ( TickType_t ) ( 20 / portTICK_PERIOD_MS ) )\r
-#define pollqNO_DELAY                  ( ( TickType_t ) 0 )\r
-#define pollqVALUES_TO_PRODUCE ( ( signed portBASE_TYPE ) 3 )\r
-#define pollqINITIAL_VALUE             ( ( signed portBASE_TYPE ) 0 )\r
-\r
-/* The task that posts the incrementing number onto the queue. */\r
-static portTASK_FUNCTION_PROTO( vPolledQueueProducer, pvParameters );\r
-\r
-/* The task that empties the queue. */\r
-static portTASK_FUNCTION_PROTO( vPolledQueueConsumer, pvParameters );\r
-\r
-/* Variables that are used to check that the tasks are still running with no\r
-errors. */\r
-static volatile signed portBASE_TYPE xPollingConsumerCount = pollqINITIAL_VALUE, xPollingProducerCount = pollqINITIAL_VALUE;\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-void vStartPolledQueueTasks( unsigned portBASE_TYPE uxPriority )\r
-{\r
-static QueueHandle_t xPolledQueue;\r
-\r
-       /* Create the queue used by the producer and consumer. */\r
-       xPolledQueue = xQueueCreate( pollqQUEUE_SIZE, ( unsigned portBASE_TYPE ) sizeof( unsigned short ) );\r
-\r
-       /* vQueueAddToRegistry() adds the queue to the queue registry, if one is\r
-       in use.  The queue registry is provided as a means for kernel aware\r
-       debuggers to locate queues and has no purpose if a kernel aware debugger\r
-       is not being used.  The call to vQueueAddToRegistry() will be removed\r
-       by the pre-processor if configQUEUE_REGISTRY_SIZE is not defined or is\r
-       defined to be less than 1. */\r
-       vQueueAddToRegistry( xPolledQueue, ( signed char * ) "Poll_Test_Queue" );\r
-\r
-       /* Spawn the producer and consumer. */\r
-       xTaskCreate( vPolledQueueConsumer, "QConsNB", pollqSTACK_SIZE, ( void * ) &xPolledQueue, uxPriority, ( TaskHandle_t * ) NULL );\r
-       xTaskCreate( vPolledQueueProducer, "QProdNB", pollqSTACK_SIZE, ( void * ) &xPolledQueue, uxPriority, ( TaskHandle_t * ) NULL );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static portTASK_FUNCTION( vPolledQueueProducer, pvParameters )\r
-{\r
-unsigned short usValue = ( unsigned short ) 0;\r
-signed portBASE_TYPE xError = pdFALSE, xLoop;\r
-\r
-       for( ;; )\r
-       {\r
-               for( xLoop = 0; xLoop < pollqVALUES_TO_PRODUCE; xLoop++ )\r
-               {\r
-                       /* Send an incrementing number on the queue without blocking. */\r
-                       if( xQueueSend( *( ( QueueHandle_t * ) pvParameters ), ( void * ) &usValue, pollqNO_DELAY ) != pdPASS )\r
-                       {\r
-                               /* We should never find the queue full so if we get here there\r
-                               has been an error. */\r
-                               xError = pdTRUE;\r
-                       }\r
-                       else\r
-                       {\r
-                               if( xError == pdFALSE )\r
-                               {\r
-                                       /* If an error has ever been recorded we stop incrementing the\r
-                                       check variable. */\r
-                                       portENTER_CRITICAL();\r
-                                               xPollingProducerCount++;\r
-                                       portEXIT_CRITICAL();\r
-                               }\r
-\r
-                               /* Update the value we are going to post next time around. */\r
-                               usValue++;\r
-                       }\r
-               }\r
-\r
-               /* Wait before we start posting again to ensure the consumer runs and\r
-               empties the queue. */\r
-               vTaskDelay( pollqPRODUCER_DELAY );\r
-       }\r
-}  /*lint !e818 Function prototype must conform to API. */\r
-/*-----------------------------------------------------------*/\r
-\r
-static portTASK_FUNCTION( vPolledQueueConsumer, pvParameters )\r
-{\r
-unsigned short usData, usExpectedValue = ( unsigned short ) 0;\r
-signed portBASE_TYPE xError = pdFALSE;\r
-\r
-       for( ;; )\r
-       {\r
-               /* Loop until the queue is empty. */\r
-               while( uxQueueMessagesWaiting( *( ( QueueHandle_t * ) pvParameters ) ) )\r
-               {\r
-                       if( xQueueReceive( *( ( QueueHandle_t * ) pvParameters ), &usData, pollqNO_DELAY ) == pdPASS )\r
-                       {\r
-                               if( usData != usExpectedValue )\r
-                               {\r
-                                       /* This is not what we expected to receive so an error has\r
-                                       occurred. */\r
-                                       xError = pdTRUE;\r
-\r
-                                       /* Catch-up to the value we received so our next expected\r
-                                       value should again be correct. */\r
-                                       usExpectedValue = usData;\r
-                               }\r
-                               else\r
-                               {\r
-                                       if( xError == pdFALSE )\r
-                                       {\r
-                                               /* Only increment the check variable if no errors have\r
-                                               occurred. */\r
-                                               portENTER_CRITICAL();\r
-                                                       xPollingConsumerCount++;\r
-                                               portEXIT_CRITICAL();\r
-                                       }\r
-                               }\r
-\r
-                               /* Next time round we would expect the number to be one higher. */\r
-                               usExpectedValue++;\r
-                       }\r
-               }\r
-\r
-               /* Now the queue is empty we block, allowing the producer to place more\r
-               items in the queue. */\r
-               vTaskDelay( pollqCONSUMER_DELAY );\r
-       }\r
-} /*lint !e818 Function prototype must conform to API. */\r
-/*-----------------------------------------------------------*/\r
-\r
-/* This is called to check that all the created tasks are still running with no errors. */\r
-portBASE_TYPE xArePollingQueuesStillRunning( void )\r
-{\r
-portBASE_TYPE xReturn;\r
-\r
-       /* Check both the consumer and producer poll count to check they have both\r
-       been changed since out last trip round.  We do not need a critical section\r
-       around the check variables as this is called from a higher priority than\r
-       the other tasks that access the same variables. */\r
-       if( ( xPollingConsumerCount == pollqINITIAL_VALUE ) ||\r
-               ( xPollingProducerCount == pollqINITIAL_VALUE )\r
-         )\r
-       {\r
-               xReturn = pdFALSE;\r
-       }\r
-       else\r
-       {\r
-               xReturn = pdTRUE;\r
-       }\r
-\r
-       /* Set the check variables back down so we know if they have been\r
-       incremented the next time around. */\r
-       xPollingConsumerCount = pollqINITIAL_VALUE;\r
-       xPollingProducerCount = pollqINITIAL_VALUE;\r
-\r
-       return xReturn;\r
-}\r
diff --git a/FreeRTOS/Demo/RL78_E2Studio_GCC/src/Common-Demo-Tasks/blocktim.c b/FreeRTOS/Demo/RL78_E2Studio_GCC/src/Common-Demo-Tasks/blocktim.c
deleted file mode 100644 (file)
index 932fb68..0000000
+++ /dev/null
@@ -1,467 +0,0 @@
-/*\r
- * FreeRTOS Kernel V10.1.0\r
- * Copyright (C) 2018 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
- * This file contains some test scenarios that ensure tasks do not exit queue\r
- * send or receive functions prematurely.  A description of the tests is\r
- * included within the code.\r
- */\r
-\r
-/* Kernel includes. */\r
-#include "FreeRTOS.h"\r
-#include "task.h"\r
-#include "queue.h"\r
-\r
-/* Demo includes. */\r
-#include "blocktim.h"\r
-\r
-/* Task priorities.  Allow these to be overridden. */\r
-#ifndef bktPRIMARY_PRIORITY\r
-       #define bktPRIMARY_PRIORITY             ( configMAX_PRIORITIES - 3 )\r
-#endif\r
-\r
-#ifndef bktSECONDARY_PRIORITY\r
-       #define bktSECONDARY_PRIORITY   ( configMAX_PRIORITIES - 4 )\r
-#endif\r
-\r
-/* Task behaviour. */\r
-#define bktQUEUE_LENGTH                                ( 5 )\r
-#define bktSHORT_WAIT                          ( ( ( TickType_t ) 20 ) / portTICK_PERIOD_MS )\r
-#define bktPRIMARY_BLOCK_TIME          ( 10 )\r
-#define bktALLOWABLE_MARGIN                    ( 15 )\r
-#define bktTIME_TO_BLOCK                       ( 175 )\r
-#define bktDONT_BLOCK                          ( ( TickType_t ) 0 )\r
-#define bktRUN_INDICATOR                       ( ( unsigned portBASE_TYPE ) 0x55 )\r
-\r
-/* The queue on which the tasks block. */\r
-static QueueHandle_t xTestQueue;\r
-\r
-/* Handle to the secondary task is required by the primary task for calls\r
-to vTaskSuspend/Resume(). */\r
-static TaskHandle_t xSecondary;\r
-\r
-/* Used to ensure that tasks are still executing without error. */\r
-static volatile portBASE_TYPE xPrimaryCycles = 0, xSecondaryCycles = 0;\r
-static volatile portBASE_TYPE xErrorOccurred = pdFALSE;\r
-\r
-/* Provides a simple mechanism for the primary task to know when the\r
-secondary task has executed. */\r
-static volatile unsigned portBASE_TYPE xRunIndicator;\r
-\r
-/* The two test tasks.  Their behaviour is commented within the files. */\r
-static void vPrimaryBlockTimeTestTask( void *pvParameters );\r
-static void vSecondaryBlockTimeTestTask( void *pvParameters );\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-void vCreateBlockTimeTasks( void )\r
-{\r
-       /* Create the queue on which the two tasks block. */\r
-    xTestQueue = xQueueCreate( bktQUEUE_LENGTH, sizeof( portBASE_TYPE ) );\r
-\r
-       /* vQueueAddToRegistry() adds the queue to the queue registry, if one is\r
-       in use.  The queue registry is provided as a means for kernel aware\r
-       debuggers to locate queues and has no purpose if a kernel aware debugger\r
-       is not being used.  The call to vQueueAddToRegistry() will be removed\r
-       by the pre-processor if configQUEUE_REGISTRY_SIZE is not defined or is\r
-       defined to be less than 1. */\r
-       vQueueAddToRegistry( xTestQueue, ( signed char * ) "Block_Time_Queue" );\r
-\r
-       /* Create the two test tasks. */\r
-       xTaskCreate( vPrimaryBlockTimeTestTask, "BTest1", configMINIMAL_STACK_SIZE, NULL, bktPRIMARY_PRIORITY, NULL );\r
-       xTaskCreate( vSecondaryBlockTimeTestTask, "BTest2", configMINIMAL_STACK_SIZE, NULL, bktSECONDARY_PRIORITY, &xSecondary );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void vPrimaryBlockTimeTestTask( void *pvParameters )\r
-{\r
-portBASE_TYPE xItem, xData;\r
-TickType_t xTimeWhenBlocking;\r
-TickType_t xTimeToBlock, xBlockedTime;\r
-\r
-       ( void ) pvParameters;\r
-\r
-       for( ;; )\r
-       {\r
-               /*********************************************************************\r
-        Test 1\r
-\r
-        Simple block time wakeup test on queue receives. */\r
-               for( xItem = 0; xItem < bktQUEUE_LENGTH; xItem++ )\r
-               {\r
-                       /* The queue is empty. Attempt to read from the queue using a block\r
-                       time.  When we wake, ensure the delta in time is as expected. */\r
-                       xTimeToBlock = bktPRIMARY_BLOCK_TIME << xItem;\r
-\r
-                       xTimeWhenBlocking = xTaskGetTickCount();\r
-\r
-                       /* We should unblock after xTimeToBlock having not received\r
-                       anything on the queue. */\r
-                       if( xQueueReceive( xTestQueue, &xData, xTimeToBlock ) != errQUEUE_EMPTY )\r
-                       {\r
-                               xErrorOccurred = pdTRUE;\r
-                       }\r
-\r
-                       /* How long were we blocked for? */\r
-                       xBlockedTime = xTaskGetTickCount() - xTimeWhenBlocking;\r
-\r
-                       if( xBlockedTime < xTimeToBlock )\r
-                       {\r
-                               /* Should not have blocked for less than we requested. */\r
-                               xErrorOccurred = pdTRUE;\r
-                       }\r
-\r
-                       if( xBlockedTime > ( xTimeToBlock + bktALLOWABLE_MARGIN ) )\r
-                       {\r
-                               /* Should not have blocked for longer than we requested,\r
-                               although we would not necessarily run as soon as we were\r
-                               unblocked so a margin is allowed. */\r
-                               xErrorOccurred = pdTRUE;\r
-                       }\r
-               }\r
-\r
-               /*********************************************************************\r
-        Test 2\r
-\r
-        Simple block time wakeup test on queue sends.\r
-\r
-               First fill the queue.  It should be empty so all sends should pass. */\r
-               for( xItem = 0; xItem < bktQUEUE_LENGTH; xItem++ )\r
-               {\r
-                       if( xQueueSend( xTestQueue, &xItem, bktDONT_BLOCK ) != pdPASS )\r
-                       {\r
-                               xErrorOccurred = pdTRUE;\r
-                       }\r
-\r
-                       #if configUSE_PREEMPTION == 0\r
-                               taskYIELD();\r
-                       #endif\r
-               }\r
-\r
-               for( xItem = 0; xItem < bktQUEUE_LENGTH; xItem++ )\r
-               {\r
-                       /* The queue is full. Attempt to write to the queue using a block\r
-                       time.  When we wake, ensure the delta in time is as expected. */\r
-                       xTimeToBlock = bktPRIMARY_BLOCK_TIME << xItem;\r
-\r
-                       xTimeWhenBlocking = xTaskGetTickCount();\r
-\r
-                       /* We should unblock after xTimeToBlock having not received\r
-                       anything on the queue. */\r
-                       if( xQueueSend( xTestQueue, &xItem, xTimeToBlock ) != errQUEUE_FULL )\r
-                       {\r
-                               xErrorOccurred = pdTRUE;\r
-                       }\r
-\r
-                       /* How long were we blocked for? */\r
-                       xBlockedTime = xTaskGetTickCount() - xTimeWhenBlocking;\r
-\r
-                       if( xBlockedTime < xTimeToBlock )\r
-                       {\r
-                               /* Should not have blocked for less than we requested. */\r
-                               xErrorOccurred = pdTRUE;\r
-                       }\r
-\r
-                       if( xBlockedTime > ( xTimeToBlock + bktALLOWABLE_MARGIN ) )\r
-                       {\r
-                               /* Should not have blocked for longer than we requested,\r
-                               although we would not necessarily run as soon as we were\r
-                               unblocked so a margin is allowed. */\r
-                               xErrorOccurred = pdTRUE;\r
-                       }\r
-               }\r
-\r
-               /*********************************************************************\r
-        Test 3\r
-\r
-               Wake the other task, it will block attempting to post to the queue.\r
-               When we read from the queue the other task will wake, but before it\r
-               can run we will post to the queue again.  When the other task runs it\r
-               will find the queue still full, even though it was woken.  It should\r
-               recognise that its block time has not expired and return to block for\r
-               the remains of its block time.\r
-\r
-               Wake the other task so it blocks attempting to post to the already\r
-               full queue. */\r
-               xRunIndicator = 0;\r
-               vTaskResume( xSecondary );\r
-\r
-               /* We need to wait a little to ensure the other task executes. */\r
-               while( xRunIndicator != bktRUN_INDICATOR )\r
-               {\r
-                       /* The other task has not yet executed. */\r
-                       vTaskDelay( bktSHORT_WAIT );\r
-               }\r
-               /* Make sure the other task is blocked on the queue. */\r
-               vTaskDelay( bktSHORT_WAIT );\r
-               xRunIndicator = 0;\r
-\r
-               for( xItem = 0; xItem < bktQUEUE_LENGTH; xItem++ )\r
-               {\r
-                       /* Now when we make space on the queue the other task should wake\r
-                       but not execute as this task has higher priority. */\r
-                       if( xQueueReceive( xTestQueue, &xData, bktDONT_BLOCK ) != pdPASS )\r
-                       {\r
-                               xErrorOccurred = pdTRUE;\r
-                       }\r
-\r
-                       /* Now fill the queue again before the other task gets a chance to\r
-                       execute.  If the other task had executed we would find the queue\r
-                       full ourselves, and the other task have set xRunIndicator. */\r
-                       if( xQueueSend( xTestQueue, &xItem, bktDONT_BLOCK ) != pdPASS )\r
-                       {\r
-                               xErrorOccurred = pdTRUE;\r
-                       }\r
-\r
-                       if( xRunIndicator == bktRUN_INDICATOR )\r
-                       {\r
-                               /* The other task should not have executed. */\r
-                               xErrorOccurred = pdTRUE;\r
-                       }\r
-\r
-                       /* Raise the priority of the other task so it executes and blocks\r
-                       on the queue again. */\r
-                       vTaskPrioritySet( xSecondary, bktPRIMARY_PRIORITY + 2 );\r
-\r
-                       /* The other task should now have re-blocked without exiting the\r
-                       queue function. */\r
-                       if( xRunIndicator == bktRUN_INDICATOR )\r
-                       {\r
-                               /* The other task should not have executed outside of the\r
-                               queue function. */\r
-                               xErrorOccurred = pdTRUE;\r
-                       }\r
-\r
-                       /* Set the priority back down. */\r
-                       vTaskPrioritySet( xSecondary, bktSECONDARY_PRIORITY );\r
-               }\r
-\r
-               /* Let the other task timeout.  When it unblockes it will check that it\r
-               unblocked at the correct time, then suspend itself. */\r
-               while( xRunIndicator != bktRUN_INDICATOR )\r
-               {\r
-                       vTaskDelay( bktSHORT_WAIT );\r
-               }\r
-               vTaskDelay( bktSHORT_WAIT );\r
-               xRunIndicator = 0;\r
-\r
-\r
-               /*********************************************************************\r
-        Test 4\r
-\r
-               As per test 3 - but with the send and receive the other way around.\r
-               The other task blocks attempting to read from the queue.\r
-\r
-               Empty the queue.  We should find that it is full. */\r
-               for( xItem = 0; xItem < bktQUEUE_LENGTH; xItem++ )\r
-               {\r
-                       if( xQueueReceive( xTestQueue, &xData, bktDONT_BLOCK ) != pdPASS )\r
-                       {\r
-                               xErrorOccurred = pdTRUE;\r
-                       }\r
-               }\r
-\r
-               /* Wake the other task so it blocks attempting to read from  the\r
-               already empty queue. */\r
-               vTaskResume( xSecondary );\r
-\r
-               /* We need to wait a little to ensure the other task executes. */\r
-               while( xRunIndicator != bktRUN_INDICATOR )\r
-               {\r
-                       vTaskDelay( bktSHORT_WAIT );\r
-               }\r
-               vTaskDelay( bktSHORT_WAIT );\r
-               xRunIndicator = 0;\r
-\r
-               for( xItem = 0; xItem < bktQUEUE_LENGTH; xItem++ )\r
-               {\r
-                       /* Now when we place an item on the queue the other task should\r
-                       wake but not execute as this task has higher priority. */\r
-                       if( xQueueSend( xTestQueue, &xItem, bktDONT_BLOCK ) != pdPASS )\r
-                       {\r
-                               xErrorOccurred = pdTRUE;\r
-                       }\r
-\r
-                       /* Now empty the queue again before the other task gets a chance to\r
-                       execute.  If the other task had executed we would find the queue\r
-                       empty ourselves, and the other task would be suspended. */\r
-                       if( xQueueReceive( xTestQueue, &xData, bktDONT_BLOCK ) != pdPASS )\r
-                       {\r
-                               xErrorOccurred = pdTRUE;\r
-                       }\r
-\r
-                       if( xRunIndicator == bktRUN_INDICATOR )\r
-                       {\r
-                               /* The other task should not have executed. */\r
-                               xErrorOccurred = pdTRUE;\r
-                       }\r
-\r
-                       /* Raise the priority of the other task so it executes and blocks\r
-                       on the queue again. */\r
-                       vTaskPrioritySet( xSecondary, bktPRIMARY_PRIORITY + 2 );\r
-\r
-                       /* The other task should now have re-blocked without exiting the\r
-                       queue function. */\r
-                       if( xRunIndicator == bktRUN_INDICATOR )\r
-                       {\r
-                               /* The other task should not have executed outside of the\r
-                               queue function. */\r
-                               xErrorOccurred = pdTRUE;\r
-                       }\r
-                       vTaskPrioritySet( xSecondary, bktSECONDARY_PRIORITY );\r
-               }\r
-\r
-               /* Let the other task timeout.  When it unblockes it will check that it\r
-               unblocked at the correct time, then suspend itself. */\r
-               while( xRunIndicator != bktRUN_INDICATOR )\r
-               {\r
-                       vTaskDelay( bktSHORT_WAIT );\r
-               }\r
-               vTaskDelay( bktSHORT_WAIT );\r
-\r
-               xPrimaryCycles++;\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void vSecondaryBlockTimeTestTask( void *pvParameters )\r
-{\r
-TickType_t xTimeWhenBlocking, xBlockedTime;\r
-portBASE_TYPE xData;\r
-\r
-       ( void ) pvParameters;\r
-\r
-       for( ;; )\r
-       {\r
-               /*********************************************************************\r
-        Test 1 and 2\r
-\r
-               This task does does not participate in these tests. */\r
-               vTaskSuspend( NULL );\r
-\r
-               /*********************************************************************\r
-        Test 3\r
-\r
-               The first thing we do is attempt to read from the queue.  It should be\r
-               full so we block.  Note the time before we block so we can check the\r
-               wake time is as per that expected. */\r
-               xTimeWhenBlocking = xTaskGetTickCount();\r
-\r
-               /* We should unblock after bktTIME_TO_BLOCK having not sent\r
-               anything to the queue. */\r
-               xData = 0;\r
-               xRunIndicator = bktRUN_INDICATOR;\r
-               if( xQueueSend( xTestQueue, &xData, bktTIME_TO_BLOCK ) != errQUEUE_FULL )\r
-               {\r
-                       xErrorOccurred = pdTRUE;\r
-               }\r
-\r
-               /* How long were we inside the send function? */\r
-               xBlockedTime = xTaskGetTickCount() - xTimeWhenBlocking;\r
-\r
-               /* We should not have blocked for less time than bktTIME_TO_BLOCK. */\r
-               if( xBlockedTime < bktTIME_TO_BLOCK )\r
-               {\r
-                       xErrorOccurred = pdTRUE;\r
-               }\r
-\r
-               /* We should of not blocked for much longer than bktALLOWABLE_MARGIN\r
-               either.  A margin is permitted as we would not necessarily run as\r
-               soon as we unblocked. */\r
-               if( xBlockedTime > ( bktTIME_TO_BLOCK + bktALLOWABLE_MARGIN ) )\r
-               {\r
-                       xErrorOccurred = pdTRUE;\r
-               }\r
-\r
-               /* Suspend ready for test 3. */\r
-               xRunIndicator = bktRUN_INDICATOR;\r
-               vTaskSuspend( NULL );\r
-\r
-               /*********************************************************************\r
-        Test 4\r
-\r
-               As per test three, but with the send and receive reversed. */\r
-               xTimeWhenBlocking = xTaskGetTickCount();\r
-\r
-               /* We should unblock after bktTIME_TO_BLOCK having not received\r
-               anything on the queue. */\r
-               xRunIndicator = bktRUN_INDICATOR;\r
-               if( xQueueReceive( xTestQueue, &xData, bktTIME_TO_BLOCK ) != errQUEUE_EMPTY )\r
-               {\r
-                       xErrorOccurred = pdTRUE;\r
-               }\r
-\r
-               xBlockedTime = xTaskGetTickCount() - xTimeWhenBlocking;\r
-\r
-               /* We should not have blocked for less time than bktTIME_TO_BLOCK. */\r
-               if( xBlockedTime < bktTIME_TO_BLOCK )\r
-               {\r
-                       xErrorOccurred = pdTRUE;\r
-               }\r
-\r
-               /* We should of not blocked for much longer than bktALLOWABLE_MARGIN\r
-               either.  A margin is permitted as we would not necessarily run as soon\r
-               as we unblocked. */\r
-               if( xBlockedTime > ( bktTIME_TO_BLOCK + bktALLOWABLE_MARGIN ) )\r
-               {\r
-                       xErrorOccurred = pdTRUE;\r
-               }\r
-\r
-               xRunIndicator = bktRUN_INDICATOR;\r
-\r
-               xSecondaryCycles++;\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-portBASE_TYPE xAreBlockTimeTestTasksStillRunning( void )\r
-{\r
-static portBASE_TYPE xLastPrimaryCycleCount = 0, xLastSecondaryCycleCount = 0;\r
-portBASE_TYPE xReturn = pdPASS;\r
-\r
-       /* Have both tasks performed at least one cycle since this function was\r
-       last called? */\r
-       if( xPrimaryCycles == xLastPrimaryCycleCount )\r
-       {\r
-               xReturn = pdFAIL;\r
-       }\r
-\r
-       if( xSecondaryCycles == xLastSecondaryCycleCount )\r
-       {\r
-               xReturn = pdFAIL;\r
-       }\r
-\r
-       if( xErrorOccurred == pdTRUE )\r
-       {\r
-               xReturn = pdFAIL;\r
-       }\r
-\r
-       xLastSecondaryCycleCount = xSecondaryCycles;\r
-       xLastPrimaryCycleCount = xPrimaryCycles;\r
-\r
-       return xReturn;\r
-}\r
diff --git a/FreeRTOS/Demo/RL78_E2Studio_GCC/src/Common-Demo-Tasks/dynamic.c b/FreeRTOS/Demo/RL78_E2Studio_GCC/src/Common-Demo-Tasks/dynamic.c
deleted file mode 100644 (file)
index 07d16e3..0000000
+++ /dev/null
@@ -1,401 +0,0 @@
-/*\r
- * FreeRTOS Kernel V10.1.0\r
- * Copyright (C) 2018 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
- * The first test creates three tasks - two counter tasks (one continuous count\r
- * and one limited count) and one controller.  A "count" variable is shared\r
- * between all three tasks.  The two counter tasks should never be in a "ready"\r
- * state at the same time.  The controller task runs at the same priority as\r
- * the continuous count task, and at a lower priority than the limited count\r
- * task.\r
- *\r
- * One counter task loops indefinitely, incrementing the shared count variable\r
- * on each iteration.  To ensure it has exclusive access to the variable it\r
- * raises it's priority above that of the controller task before each\r
- * increment, lowering it again to it's original priority before starting the\r
- * next iteration.\r
- *\r
- * The other counter task increments the shared count variable on each\r
- * iteration of it's loop until the count has reached a limit of 0xff - at\r
- * which point it suspends itself.  It will not start a new loop until the\r
- * controller task has made it "ready" again by calling vTaskResume ().\r
- * This second counter task operates at a higher priority than controller\r
- * task so does not need to worry about mutual exclusion of the counter\r
- * variable.\r
- *\r
- * The controller task is in two sections.  The first section controls and\r
- * monitors the continuous count task.  When this section is operational the\r
- * limited count task is suspended.  Likewise, the second section controls\r
- * and monitors the limited count task.  When this section is operational the\r
- * continuous count task is suspended.\r
- *\r
- * In the first section the controller task first takes a copy of the shared\r
- * count variable.  To ensure mutual exclusion on the count variable it\r
- * suspends the continuous count task, resuming it again when the copy has been\r
- * taken.  The controller task then sleeps for a fixed period - during which\r
- * the continuous count task will execute and increment the shared variable.\r
- * When the controller task wakes it checks that the continuous count task\r
- * has executed by comparing the copy of the shared variable with its current\r
- * value.  This time, to ensure mutual exclusion, the scheduler itself is\r
- * suspended with a call to vTaskSuspendAll ().  This is for demonstration\r
- * purposes only and is not a recommended technique due to its inefficiency.\r
- *\r
- * After a fixed number of iterations the controller task suspends the\r
- * continuous count task, and moves on to its second section.\r
- *\r
- * At the start of the second section the shared variable is cleared to zero.\r
- * The limited count task is then woken from it's suspension by a call to\r
- * vTaskResume ().  As this counter task operates at a higher priority than\r
- * the controller task the controller task should not run again until the\r
- * shared variable has been counted up to the limited value causing the counter\r
- * task to suspend itself.  The next line after vTaskResume () is therefore\r
- * a check on the shared variable to ensure everything is as expected.\r
- *\r
- *\r
- * The second test consists of a couple of very simple tasks that post onto a\r
- * queue while the scheduler is suspended.  This test was added to test parts\r
- * of the scheduler not exercised by the first test.\r
- *\r
- */\r
-\r
-#include <stdlib.h>\r
-\r
-/* Scheduler include files. */\r
-#include "FreeRTOS.h"\r
-#include "task.h"\r
-#include "semphr.h"\r
-\r
-/* Demo app include files. */\r
-#include "dynamic.h"\r
-\r
-/* Function that implements the "limited count" task as described above. */\r
-static portTASK_FUNCTION_PROTO( vLimitedIncrementTask, pvParameters );\r
-\r
-/* Function that implements the "continuous count" task as described above. */\r
-static portTASK_FUNCTION_PROTO( vContinuousIncrementTask, pvParameters );\r
-\r
-/* Function that implements the controller task as described above. */\r
-static portTASK_FUNCTION_PROTO( vCounterControlTask, pvParameters );\r
-\r
-static portTASK_FUNCTION_PROTO( vQueueReceiveWhenSuspendedTask, pvParameters );\r
-static portTASK_FUNCTION_PROTO( vQueueSendWhenSuspendedTask, pvParameters );\r
-\r
-/* Demo task specific constants. */\r
-#define priSTACK_SIZE                          ( configMINIMAL_STACK_SIZE )\r
-#define priSLEEP_TIME                          ( ( TickType_t ) 128 / portTICK_PERIOD_MS )\r
-#define priLOOPS                                       ( 5 )\r
-#define priMAX_COUNT                           ( ( unsigned long ) 0xff )\r
-#define priNO_BLOCK                                    ( ( TickType_t ) 0 )\r
-#define priSUSPENDED_QUEUE_LENGTH      ( 1 )\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-/* Handles to the two counter tasks.  These could be passed in as parameters\r
-to the controller task to prevent them having to be file scope. */\r
-static TaskHandle_t xContinousIncrementHandle, xLimitedIncrementHandle;\r
-\r
-/* The shared counter variable.  This is passed in as a parameter to the two\r
-counter variables for demonstration purposes. */\r
-static unsigned long ulCounter;\r
-\r
-/* Variables used to check that the tasks are still operating without error.\r
-Each complete iteration of the controller task increments this variable\r
-provided no errors have been found.  The variable maintaining the same value\r
-is therefore indication of an error. */\r
-static volatile unsigned short usCheckVariable = ( unsigned short ) 0;\r
-static volatile portBASE_TYPE xSuspendedQueueSendError = pdFALSE;\r
-static volatile portBASE_TYPE xSuspendedQueueReceiveError = pdFALSE;\r
-\r
-/* Queue used by the second test. */\r
-static QueueHandle_t xSuspendedTestQueue;\r
-\r
-/*-----------------------------------------------------------*/\r
-/*\r
- * Start the three tasks as described at the top of the file.\r
- * Note that the limited count task is given a higher priority.\r
- */\r
-void vStartDynamicPriorityTasks( void )\r
-{\r
-       xSuspendedTestQueue = xQueueCreate( priSUSPENDED_QUEUE_LENGTH, sizeof( unsigned long ) );\r
-\r
-       /* vQueueAddToRegistry() adds the queue to the queue registry, if one is\r
-       in use.  The queue registry is provided as a means for kernel aware\r
-       debuggers to locate queues and has no purpose if a kernel aware debugger\r
-       is not being used.  The call to vQueueAddToRegistry() will be removed\r
-       by the pre-processor if configQUEUE_REGISTRY_SIZE is not defined or is\r
-       defined to be less than 1. */\r
-       vQueueAddToRegistry( xSuspendedTestQueue, ( signed char * ) "Suspended_Test_Queue" );\r
-\r
-       xTaskCreate( vContinuousIncrementTask, "CNT_INC", priSTACK_SIZE, ( void * ) &ulCounter, tskIDLE_PRIORITY, &xContinousIncrementHandle );\r
-       xTaskCreate( vLimitedIncrementTask, "LIM_INC", priSTACK_SIZE, ( void * ) &ulCounter, tskIDLE_PRIORITY + 1, &xLimitedIncrementHandle );\r
-       xTaskCreate( vCounterControlTask, "C_CTRL", priSTACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );\r
-       xTaskCreate( vQueueSendWhenSuspendedTask, "SUSP_TX", priSTACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );\r
-       xTaskCreate( vQueueReceiveWhenSuspendedTask, "SUSP_RX", priSTACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-/*\r
- * Just loops around incrementing the shared variable until the limit has been\r
- * reached.  Once the limit has been reached it suspends itself.\r
- */\r
-static portTASK_FUNCTION( vLimitedIncrementTask, pvParameters )\r
-{\r
-unsigned long *pulCounter;\r
-\r
-       /* Take a pointer to the shared variable from the parameters passed into\r
-       the task. */\r
-       pulCounter = ( unsigned long * ) pvParameters;\r
-\r
-       /* This will run before the control task, so the first thing it does is\r
-       suspend - the control task will resume it when ready. */\r
-       vTaskSuspend( NULL );\r
-\r
-       for( ;; )\r
-       {\r
-               /* Just count up to a value then suspend. */\r
-               ( *pulCounter )++;\r
-\r
-               if( *pulCounter >= priMAX_COUNT )\r
-               {\r
-                       vTaskSuspend( NULL );\r
-               }\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-/*\r
- * Just keep counting the shared variable up.  The control task will suspend\r
- * this task when it wants.\r
- */\r
-static portTASK_FUNCTION( vContinuousIncrementTask, pvParameters )\r
-{\r
-unsigned long *pulCounter;\r
-unsigned portBASE_TYPE uxOurPriority;\r
-\r
-       /* Take a pointer to the shared variable from the parameters passed into\r
-       the task. */\r
-       pulCounter = ( unsigned long * ) pvParameters;\r
-\r
-       /* Query our priority so we can raise it when exclusive access to the\r
-       shared variable is required. */\r
-       uxOurPriority = uxTaskPriorityGet( NULL );\r
-\r
-       for( ;; )\r
-       {\r
-               /* Raise our priority above the controller task to ensure a context\r
-               switch does not occur while we are accessing this variable. */\r
-               vTaskPrioritySet( NULL, uxOurPriority + 1 );\r
-                       ( *pulCounter )++;\r
-               vTaskPrioritySet( NULL, uxOurPriority );\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-/*\r
- * Controller task as described above.\r
- */\r
-static portTASK_FUNCTION( vCounterControlTask, pvParameters )\r
-{\r
-unsigned long ulLastCounter;\r
-short sLoops;\r
-short sError = pdFALSE;\r
-\r
-       /* Just to stop warning messages. */\r
-       ( void ) pvParameters;\r
-\r
-       for( ;; )\r
-       {\r
-               /* Start with the counter at zero. */\r
-               ulCounter = ( unsigned long ) 0;\r
-\r
-               /* First section : */\r
-\r
-               /* Check the continuous count task is running. */\r
-               for( sLoops = 0; sLoops < priLOOPS; sLoops++ )\r
-               {\r
-                       /* Suspend the continuous count task so we can take a mirror of the\r
-                       shared variable without risk of corruption. */\r
-                       vTaskSuspend( xContinousIncrementHandle );\r
-                               ulLastCounter = ulCounter;\r
-                       vTaskResume( xContinousIncrementHandle );\r
-\r
-                       /* Now delay to ensure the other task has processor time. */\r
-                       vTaskDelay( priSLEEP_TIME );\r
-\r
-                       /* Check the shared variable again.  This time to ensure mutual\r
-                       exclusion the whole scheduler will be locked.  This is just for\r
-                       demo purposes! */\r
-                       vTaskSuspendAll();\r
-                       {\r
-                               if( ulLastCounter == ulCounter )\r
-                               {\r
-                                       /* The shared variable has not changed.  There is a problem\r
-                                       with the continuous count task so flag an error. */\r
-                                       sError = pdTRUE;\r
-                               }\r
-                       }\r
-                       xTaskResumeAll();\r
-               }\r
-\r
-\r
-               /* Second section: */\r
-\r
-               /* Suspend the continuous counter task so it stops accessing the shared variable. */\r
-               vTaskSuspend( xContinousIncrementHandle );\r
-\r
-               /* Reset the variable. */\r
-               ulCounter = ( unsigned long ) 0;\r
-\r
-               /* Resume the limited count task which has a higher priority than us.\r
-               We should therefore not return from this call until the limited count\r
-               task has suspended itself with a known value in the counter variable. */\r
-               vTaskResume( xLimitedIncrementHandle );\r
-\r
-               /* Does the counter variable have the expected value? */\r
-               if( ulCounter != priMAX_COUNT )\r
-               {\r
-                       sError = pdTRUE;\r
-               }\r
-\r
-               if( sError == pdFALSE )\r
-               {\r
-                       /* If no errors have occurred then increment the check variable. */\r
-                       portENTER_CRITICAL();\r
-                               usCheckVariable++;\r
-                       portEXIT_CRITICAL();\r
-               }\r
-\r
-               /* Resume the continuous count task and do it all again. */\r
-               vTaskResume( xContinousIncrementHandle );\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static portTASK_FUNCTION( vQueueSendWhenSuspendedTask, pvParameters )\r
-{\r
-static unsigned long ulValueToSend = ( unsigned long ) 0;\r
-\r
-       /* Just to stop warning messages. */\r
-       ( void ) pvParameters;\r
-\r
-       for( ;; )\r
-       {\r
-               vTaskSuspendAll();\r
-               {\r
-                       /* We must not block while the scheduler is suspended! */\r
-                       if( xQueueSend( xSuspendedTestQueue, ( void * ) &ulValueToSend, priNO_BLOCK ) != pdTRUE )\r
-                       {\r
-                               xSuspendedQueueSendError = pdTRUE;\r
-                       }\r
-               }\r
-               xTaskResumeAll();\r
-\r
-               vTaskDelay( priSLEEP_TIME );\r
-\r
-               ++ulValueToSend;\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static portTASK_FUNCTION( vQueueReceiveWhenSuspendedTask, pvParameters )\r
-{\r
-static unsigned long ulExpectedValue = ( unsigned long ) 0, ulReceivedValue;\r
-portBASE_TYPE xGotValue;\r
-\r
-       /* Just to stop warning messages. */\r
-       ( void ) pvParameters;\r
-\r
-       for( ;; )\r
-       {\r
-               do\r
-               {\r
-                       /* Suspending the scheduler here is fairly pointless and\r
-                       undesirable for a normal application.  It is done here purely\r
-                       to test the scheduler.  The inner xTaskResumeAll() should\r
-                       never return pdTRUE as the scheduler is still locked by the\r
-                       outer call. */\r
-                       vTaskSuspendAll();\r
-                       {\r
-                               vTaskSuspendAll();\r
-                               {\r
-                                       xGotValue = xQueueReceive( xSuspendedTestQueue, ( void * ) &ulReceivedValue, priNO_BLOCK );\r
-                               }\r
-                               if( xTaskResumeAll() )\r
-                               {\r
-                                       xSuspendedQueueReceiveError = pdTRUE;\r
-                               }\r
-                       }\r
-                       xTaskResumeAll();\r
-\r
-                       #if configUSE_PREEMPTION == 0\r
-                       {\r
-                               taskYIELD();\r
-                       }\r
-                       #endif\r
-\r
-               } while( xGotValue == pdFALSE );\r
-\r
-               if( ulReceivedValue != ulExpectedValue )\r
-               {\r
-                       xSuspendedQueueReceiveError = pdTRUE;\r
-               }\r
-\r
-               ++ulExpectedValue;\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-/* Called to check that all the created tasks are still running without error. */\r
-portBASE_TYPE xAreDynamicPriorityTasksStillRunning( void )\r
-{\r
-/* Keep a history of the check variables so we know if it has been incremented\r
-since the last call. */\r
-static unsigned short usLastTaskCheck = ( unsigned short ) 0;\r
-portBASE_TYPE xReturn = pdTRUE;\r
-\r
-       /* Check the tasks are still running by ensuring the check variable\r
-       is still incrementing. */\r
-\r
-       if( usCheckVariable == usLastTaskCheck )\r
-       {\r
-               /* The check has not incremented so an error exists. */\r
-               xReturn = pdFALSE;\r
-       }\r
-\r
-       if( xSuspendedQueueSendError == pdTRUE )\r
-       {\r
-               xReturn = pdFALSE;\r
-       }\r
-\r
-       if( xSuspendedQueueReceiveError == pdTRUE )\r
-       {\r
-               xReturn = pdFALSE;\r
-       }\r
-\r
-       usLastTaskCheck = usCheckVariable;\r
-       return xReturn;\r
-}\r
diff --git a/FreeRTOS/Demo/RL78_E2Studio_GCC/src/Common-Demo-Tasks/include/PollQ.h b/FreeRTOS/Demo/RL78_E2Studio_GCC/src/Common-Demo-Tasks/include/PollQ.h
deleted file mode 100644 (file)
index c87b31e..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/*\r
- * FreeRTOS Kernel V10.1.0\r
- * Copyright (C) 2018 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
-#ifndef POLLED_Q_H\r
-#define POLLED_Q_H\r
-\r
-void vStartPolledQueueTasks( unsigned portBASE_TYPE uxPriority );\r
-portBASE_TYPE xArePollingQueuesStillRunning( void );\r
-\r
-#endif\r
-\r
-\r
diff --git a/FreeRTOS/Demo/RL78_E2Studio_GCC/src/Common-Demo-Tasks/include/blocktim.h b/FreeRTOS/Demo/RL78_E2Studio_GCC/src/Common-Demo-Tasks/include/blocktim.h
deleted file mode 100644 (file)
index 479e089..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/*\r
- * FreeRTOS Kernel V10.1.0\r
- * Copyright (C) 2018 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
-#ifndef BLOCK_TIME_TEST_H\r
-#define BLOCK_TIME_TEST_H\r
-\r
-void vCreateBlockTimeTasks( void );\r
-portBASE_TYPE xAreBlockTimeTestTasksStillRunning( void );\r
-\r
-#endif\r
-\r
-\r
diff --git a/FreeRTOS/Demo/RL78_E2Studio_GCC/src/Common-Demo-Tasks/include/dynamic.h b/FreeRTOS/Demo/RL78_E2Studio_GCC/src/Common-Demo-Tasks/include/dynamic.h
deleted file mode 100644 (file)
index bbfb4cd..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/*\r
- * FreeRTOS Kernel V10.1.0\r
- * Copyright (C) 2018 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
-#ifndef DYNAMIC_MANIPULATION_H\r
-#define DYNAMIC_MANIPULATION_H\r
-\r
-void vStartDynamicPriorityTasks( void );\r
-portBASE_TYPE xAreDynamicPriorityTasksStillRunning( void );\r
-\r
-#endif\r
-\r
-\r
diff --git a/FreeRTOS/Demo/RL78_E2Studio_GCC/src/ExampleISR.S b/FreeRTOS/Demo/RL78_E2Studio_GCC/src/ExampleISR.S
deleted file mode 100644 (file)
index 5d7a6d9..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-/*\r
- * FreeRTOS Kernel V10.1.0\r
- * Copyright (C) 2018 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
- * This file defines the assembler wrapper for the example interrupt that is\r
- * defined in main.c.  The wrapper is the interrupt entry point.\r
- */\r
-\r
-/* ISR_Support.h contains the definitions of portSAVE_CONTEXT() and\r
-portRESTORE_CONTEXT(). */\r
-#include "ISR_Support.h"\r
-\r
-       .global _vANExampleISR_ASM_Wrapper\r
-       .extern _vAnExampleISR_C_Handler\r
-\r
-       .text\r
-\r
-       /*\r
-        * This demo does not include a functional interrupt service routine - so\r
-        * this dummy handler (which is not actually installed) is provided as an\r
-        * example of how an ISR that needs to cause a context switch needs to be\r
-        * implemented.  ISRs that do not cause a context switch have no special\r
-        * requirements and can be written as per the compiler documentation.\r
-        *\r
-        * This assembly wrapper function calls the main handler, which is called\r
-        * vAnExampleISR_C_Handler(), and is implemented in main.c.  See the\r
-        * documentation page for this demo on the FreeRTOS.org website for full\r
-        * instructions.\r
-        *\r
-        * NOTE:  vANExampleISR_ASM_Wrapper needs to be installed into the relevant\r
-        * vector within vector_table.c.\r
-        */\r
-\r
-        vANExampleISR_ASM_Wrapper:\r
-\r
-               /* portSAVE_CONTEXT() must be the first thing called in the ASM\r
-               wrapper. */\r
-               portSAVE_CONTEXT\r
-\r
-               /* Once the context has been saved the C handler can be called. */\r
-               call !!_vAnExampleISR_C_Handler\r
-\r
-               /* Finally the ISR must end with a call to portRESTORE_CONTEXT()\r
-               followed by a reti instruction to return from the interrupt to whichever\r
-               task is now the task selected to run (which may be different to the task\r
-               that was running before the interrupt started). */\r
-           portRESTORE_CONTEXT\r
-           reti\r
-\r
-       .end\r
-\r
diff --git a/FreeRTOS/Demo/RL78_E2Studio_GCC/src/FreeRTOSConfig.h b/FreeRTOS/Demo/RL78_E2Studio_GCC/src/FreeRTOSConfig.h
deleted file mode 100644 (file)
index e17441a..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-/*\r
- * FreeRTOS Kernel V10.1.0\r
- * Copyright (C) 2018 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
-#ifndef FREERTOS_CONFIG_H\r
-#define FREERTOS_CONFIG_H\r
-\r
-/*-----------------------------------------------------------\r
- * Application specific definitions.\r
- *\r
- * These definitions should be adjusted for your particular hardware and\r
- * application requirements.\r
- *\r
- * THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
- * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.\r
- *\r
- * See http://www.freertos.org/a00110.html\r
- *----------------------------------------------------------*/\r
-\r
-/* Include hardware dependent header files to allow this demo to run on\r
-multiple evaluation boards. */\r
-#include "demo_specific_io.h"\r
-\r
-#define configUSE_PREEMPTION                   1\r
-#define configTICK_RATE_HZ                             ( ( unsigned short ) 1000 )\r
-#define configMAX_PRIORITIES                   ( 4 )\r
-#define configMINIMAL_STACK_SIZE               ( ( unsigned short ) 90 )\r
-#define configMAX_TASK_NAME_LEN                        ( 10 )\r
-#define configUSE_TRACE_FACILITY               0\r
-#define configUSE_16_BIT_TICKS                 1\r
-#define configIDLE_SHOULD_YIELD                        1\r
-#define configTOTAL_HEAP_SIZE                  ( (size_t ) ( 3420 ) )\r
-#define configCHECK_FOR_STACK_OVERFLOW 2\r
-#define configUSE_MUTEXES                              1\r
-\r
-/* Hook function definitions. */\r
-#define configUSE_IDLE_HOOK                            0\r
-#define configUSE_TICK_HOOK                            0\r
-#define configUSE_MALLOC_FAILED_HOOK   1\r
-\r
-/* Software timer definitions. */\r
-#define configUSE_TIMERS                               1\r
-#define configTIMER_TASK_PRIORITY              ( 2 )\r
-#define configTIMER_QUEUE_LENGTH               10\r
-#define configTIMER_TASK_STACK_DEPTH   ( configMINIMAL_STACK_SIZE * 2 )\r
-\r
-/* Co-routine definitions. */\r
-#define configUSE_CO_ROUTINES                  0\r
-#define configMAX_CO_ROUTINE_PRIORITIES        ( 2 )\r
-\r
-/* Set the following definitions to 1 to include the API function, or zero\r
-to exclude the API function. */\r
-#define INCLUDE_vTaskPrioritySet                       1\r
-#define INCLUDE_uxTaskPriorityGet                      1\r
-#define INCLUDE_vTaskDelete                                    0\r
-#define INCLUDE_vTaskCleanUpResources          0\r
-#define INCLUDE_vTaskSuspend                           1\r
-#define INCLUDE_vTaskDelayUntil                                1\r
-#define INCLUDE_vTaskDelay                                     1\r
-#define INCLUDE_xTaskGetIdleTaskHandle                 0\r
-#define INCLUDE_xTimerGetTimerDaemonTaskHandle         0\r
-\r
-#define configASSERT( x ) if( ( x ) == 0 ) { taskDISABLE_INTERRUPTS(); for( ;; ); }\r
-\r
-\r
-#endif /* FREERTOS_CONFIG_H */\r
-\r
diff --git a/FreeRTOS/Demo/RL78_E2Studio_GCC/src/RegTest.S b/FreeRTOS/Demo/RL78_E2Studio_GCC/src/RegTest.S
deleted file mode 100644 (file)
index 4ef4110..0000000
+++ /dev/null
@@ -1,243 +0,0 @@
-/*\r
- * FreeRTOS Kernel V10.1.0\r
- * Copyright (C) 2018 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
- * This file defines the RegTest tasks as described at the top of main.c\r
- */\r
-\r
-       .global _vRegTest1Task\r
-       .short  _vRegTest1Task\r
-       .global _vRegTest2Task\r
-       .short  _vRegTest2Task\r
-\r
-       .extern _vRegTestError\r
-       .extern _usRegTest1LoopCounter\r
-       .extern _usRegTest2LoopCounter\r
-\r
-       .text\r
-/*\r
- * Fill all the registers with known values, then check that the registers\r
- * contain the expected value.  An incorrect value being indicative of an\r
- * error in the context switch mechanism.\r
- */\r
-_vRegTest1Task:\r
-\r
-       /* First fill the registers. */\r
-       SEL             RB0\r
-       MOVW    AX, #0x1122\r
-       MOVW    BC, #0x3344\r
-       MOVW    DE, #0x5566\r
-       MOVW    HL, #0x7788\r
-       SEL             RB1\r
-       MOVW    AX, #0x1111\r
-       MOVW    BC, #0x2222\r
-       MOVW    DE, #0x3333\r
-       MOVW    HL, #0x4444\r
-       SEL             RB2\r
-       MOVW    AX, #0x5555\r
-       MOVW    BC, #0x6666\r
-       MOVW    DE, #0x7777\r
-       MOVW    HL, #0x8888\r
-\r
-       /* Register bank 3 is not used outside of interrupts so is not saved as part\r
-       of the task context. */\r
-       SEL             RB0\r
-\r
-_loop1:\r
-\r
-       /* Continuously check that the register values remain at their expected\r
-       values.  The BRK is to test the yield.  This task runs at low priority\r
-       so will also regularly get preempted. */\r
-       BRK\r
-\r
-       /* Compare with the expected value. */\r
-       CMPW    AX, #0x1122\r
-       BZ              $.+5\r
-\r
-       /* Jump over the branch to vRegTestError() if the register contained the\r
-       expected value - otherwise flag an error by executing vRegTestError(). */\r
-       BR              !!_vRegTestError\r
-\r
-       /* Repeat for all the registers. */\r
-       MOVW    AX, BC\r
-       CMPW    AX, #0x3344\r
-       BZ              $.+5\r
-       BR              !!_vRegTestError\r
-       MOVW    AX, DE\r
-       CMPW    AX, #0x5566\r
-       BZ              $.+5\r
-       BR              !!_vRegTestError\r
-       MOVW    AX, HL\r
-       CMPW    AX, #0x7788\r
-       BZ              $.+5\r
-       BR              !!_vRegTestError\r
-\r
-       /* Set AX back to its initial value. */\r
-       MOVW    AX, #0x1122\r
-\r
-       SEL             RB1\r
-       CMPW    AX, #0x1111\r
-       BZ              $.+5\r
-       BR              !!_vRegTestError\r
-       MOVW    AX, BC\r
-       CMPW    AX, #0x2222\r
-       BZ              $.+5\r
-       BR              !!_vRegTestError\r
-       MOVW    AX, DE\r
-       CMPW    AX, #0x3333\r
-       BZ              $.+5\r
-       BR              !!_vRegTestError\r
-       MOVW    AX, HL\r
-       CMPW    AX, #0x4444\r
-       BZ              $.+5\r
-       BR              !!_vRegTestError\r
-       MOVW    AX, #0x1111\r
-\r
-\r
-       SEL             RB2\r
-       CMPW    AX, #0x5555\r
-       BZ              $.+5\r
-       BR              !!_vRegTestError\r
-       MOVW    AX, BC\r
-       CMPW    AX, #0x6666\r
-       BZ              $.+5\r
-       BR              !!_vRegTestError\r
-       MOVW    AX, DE\r
-       CMPW    AX, #0x7777\r
-       BZ              $.+5\r
-       BR              !!_vRegTestError\r
-       MOVW    AX, HL\r
-       CMPW    AX, #0x8888\r
-       BZ              $.+5\r
-       BR              !!_vRegTestError\r
-       MOVW    AX, #0x5555\r
-\r
-\r
-       /* Register bank 3 is not used outside of interrupts so is not saved as\r
-       part of the task context. */\r
-\r
-       SEL     RB0\r
-\r
-       /* Indicate that this task is still cycling. */\r
-       INCW    !_usRegTest1LoopCounter\r
-\r
-       BR              !!_loop1\r
-\r
-\r
-/*\r
- * Fill all the registers with known values, then check that the registers\r
- * contain the expected value.  An incorrect value being indicative of an\r
- * error in the context switch mechanism.\r
- */\r
-_vRegTest2Task:\r
-\r
-       SEL             RB0\r
-       MOVW    AX, #0x99aa\r
-       MOVW    BC, #0xbbcc\r
-       MOVW    DE, #0xddee\r
-       MOVW    HL, #0xff12\r
-       SEL             RB1\r
-       MOVW    AX, #0x0110\r
-       MOVW    BC, #0x0220\r
-       MOVW    DE, #0x0330\r
-       MOVW    HL, #0x0440\r
-       SEL             RB2\r
-       MOVW    AX, #0x0550\r
-       MOVW    BC, #0x0660\r
-       MOVW    DE, #0x0770\r
-       MOVW    HL, #0x0880\r
-\r
-       /* Register bank 3 is not used outside of interrupts so is not saved as\r
-       part of the task context. */\r
-       SEL             RB0\r
-\r
-_loop2:\r
-       CMPW    AX, #0x99aa\r
-       BZ              $.+5\r
-       BR              !!_vRegTestError\r
-       MOVW    AX, BC\r
-       CMPW    AX, #0xbbcc\r
-       BZ              $.+5\r
-       BR              !!_vRegTestError\r
-       MOVW    AX, DE\r
-       CMPW    AX, #0xddee\r
-       BZ              $.+5\r
-       BR              !!_vRegTestError\r
-       MOVW    AX, HL\r
-       CMPW    AX, #0xff12\r
-       BZ              $.+5\r
-       BR              !!_vRegTestError\r
-       MOVW    AX, #0x99aa\r
-\r
-       SEL             RB1\r
-       CMPW    AX, #0x0110\r
-       BZ              $.+5\r
-       BR              !!_vRegTestError\r
-       MOVW    AX, BC\r
-       CMPW    AX, #0x0220\r
-       BZ              $.+5\r
-       BR              !!_vRegTestError\r
-       MOVW    AX, DE\r
-       CMPW    AX, #0x0330\r
-       BZ              $.+5\r
-       BR              !!_vRegTestError\r
-       MOVW    AX, HL\r
-       CMPW    AX, #0x0440\r
-       BZ              $.+5\r
-       BR              !!_vRegTestError\r
-       MOVW    AX, #0x0110\r
-\r
-       SEL             RB2\r
-       CMPW    AX, #0x0550\r
-       BZ              $.+5\r
-       BR              !!_vRegTestError\r
-       MOVW    AX, BC\r
-       CMPW    AX, #0x0660\r
-       BZ              $.+5\r
-       BR              !!_vRegTestError\r
-       MOVW    AX, DE\r
-       CMPW    AX, #0x0770\r
-       BZ              $.+5\r
-       BR              !!_vRegTestError\r
-       MOVW    AX, HL\r
-       CMPW    AX, #0x0880\r
-       BZ              $.+5\r
-       BR              !!_vRegTestError\r
-       MOVW    AX, #0x0550\r
-\r
-       /* Register bank 3 is not used outside of interrupts so is not saved as\r
-       part of the task context. */\r
-\r
-       SEL     RB0\r
-\r
-       /* Indicate that this task is still cycling. */\r
-       INCW    !_usRegTest2LoopCounter\r
-\r
-       BR              !!_loop2\r
-\r
-       .end\r
-\r
diff --git a/FreeRTOS/Demo/RL78_E2Studio_GCC/src/demo_specific_io.h b/FreeRTOS/Demo/RL78_E2Studio_GCC/src/demo_specific_io.h
deleted file mode 100644 (file)
index 1237255..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-/*\r
- * FreeRTOS Kernel V10.1.0\r
- * Copyright (C) 2018 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
-#ifndef LED_IO_H\r
-#define LED_IO_H\r
-\r
-/* Include the register definition file that is correct for the hardware being\r
-used.  The C and assembler pre-processor must have one of the following board\r
-definitions defined to have the correct register definition header file\r
-included.  Alternatively, just manually include the correct files here. */\r
-\r
-       /* Prevent the files being included from the FreeRTOS port layer assembly\r
-       source files. */\r
-       #ifndef __ASSEMBLER__\r
-\r
-               #ifdef YRDKRL78G14\r
-                       #include "iodefine_RL78G14.h"\r
-                       #include "iodefine_RL78G14_ext.h"\r
-                       #define LED_BIT                 ( P4_bit.no1 )\r
-                       #define LED_INIT()              LED_BIT = 0\r
-               #endif /* YRDKRL78G14 */\r
-\r
-               #ifdef RSKRL78G1C\r
-                       #include "iodefine_RL78G1C.h"\r
-                       #include "iodefine_RL78G1C_ext.h"\r
-                       #define LED_BIT                 ( P0_bit.no1 )\r
-                       #define LED_INIT()              P0 &= 0xFD; PM0 &= 0xFD\r
-               #endif /* RSKRL78G1C */\r
-\r
-               #ifdef RSKRL78L1C\r
-                       #include "iodefine_RL78L1C.h"\r
-                       #include "iodefine_RL78L1C_ext.h"\r
-                       #define LED_BIT                 ( P4_bit.no1 )\r
-                       #define LED_INIT()              P4 &= 0xFD; PM4 &= 0xFD\r
-               #endif /* RSKRL78L1C */\r
-\r
-               #ifdef RSKRL78L13\r
-                       #include "iodefine_RL78L13.h"\r
-                       #include "iodefine_RL78L13_ext.h"\r
-                       #define LED_BIT                 ( P4_bit.no1 )\r
-                       #define LED_INIT()              P4 &= 0xFD; PM4 &= 0xFD\r
-               #endif /* RSKRL78L13 */\r
-\r
-               #ifdef RL78_G1A_TB\r
-                       #include "iodefine_RL78G1A.h"\r
-                       #include "iodefine_RL78G1A_ext.h"\r
-                       #define LED_BIT                 ( P6_bit.no2 )\r
-                       #define LED_INIT()              P6 &= 0xFB; PM6 &= 0xFB\r
-               #endif /* RL78_G1A_TB */\r
-\r
-               #ifndef LED_BIT\r
-                       #error The hardware platform is not defined\r
-               #endif\r
-\r
-       #endif /* INCLUDED_FROM_FREERTOS_ASM_FILE */\r
-\r
-#endif /* LED_IO_H */\r
-\r
diff --git a/FreeRTOS/Demo/RL78_E2Studio_GCC/src/hardware_setup.c b/FreeRTOS/Demo/RL78_E2Studio_GCC/src/hardware_setup.c
deleted file mode 100644 (file)
index 061df9c..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/***********************************************************************/
-/*                                                                                                                    */
-/*      PROJECT NAME :  RTOSDemo                                       */
-/*      FILE         :  hardware_setup.c                               */
-/*      DESCRIPTION  :  Hardware Initialization                        */
-/*      CPU SERIES   :  RL78 - G1C                                     */
-/*      CPU TYPE     :  R5F10JBC                                       */
-/*                                                                                                                    */
-/*      This file is generated by e2studio.                        */
-/*                                                                                                                    */
-/***********************************************************************/
-\r
-/* Scheduler include files. */
-#include "FreeRTOS.h"
-
-void HardwareSetup( void )\r
-{\r
-       portDISABLE_INTERRUPTS();
-
-       /* Set fMX */
-       CMC = 0x00;
-       MSTOP = 1U;
-
-       /* Set fMAIN */
-       MCM0 = 0U;
-
-       /* Set fSUB */
-       XTSTOP = 1U;
-       OSMC = 0x10;
-
-       /* Set fCLK */
-       CSS = 0U;
-
-       /* Set fIH */
-       HIOSTOP = 0U;
-
-       /* LED port initialization. */
-       LED_INIT();
-}\r
diff --git a/FreeRTOS/Demo/RL78_E2Studio_GCC/src/iodefine/iodefine_RL78G14.h b/FreeRTOS/Demo/RL78_E2Studio_GCC/src/iodefine/iodefine_RL78G14.h
deleted file mode 100644 (file)
index bfa227a..0000000
+++ /dev/null
@@ -1,1121 +0,0 @@
-/***********************************************************************/
-/*                                                                                                                    */
-/*      PROJECT NAME :  RL78G14                                        */
-/*      FILE         :  iodefine.h                                     */
-/*      DESCRIPTION  :  Definition of I/O Registers                    */
-/*      CPU SERIES   :  RL78 - G14                                     */
-/*      CPU TYPE     :  R5F104PJ                                       */
-/*                                                                                                                    */
-/*      This file is generated by e2studio.                        */
-/*                                                                                                                    */
-/***********************************************************************/                                                                       \r
-                                                                                   \r
-/************************************************************************/\r
-/* Header file generated from device file:                              */\r
-/*    DR5F104PJ.DVF                                                     */\r
-/*    Copyright(C) 2012 Renesas                                         */\r
-/*    File Version V2.00                                                */\r
-/*    Tool Version 1.9.7121                                             */\r
-/*    Date Generated 13/11/2012                                         */\r
-/************************************************************************/\r
-\r
-#ifndef __IOREG_BIT_STRUCTURES\r
-#define __IOREG_BIT_STRUCTURES\r
-typedef struct {\r
-       unsigned char no0 :1;\r
-       unsigned char no1 :1;\r
-       unsigned char no2 :1;\r
-       unsigned char no3 :1;\r
-       unsigned char no4 :1;\r
-       unsigned char no5 :1;\r
-       unsigned char no6 :1;\r
-       unsigned char no7 :1;\r
-} __BITS8;\r
-\r
-typedef struct {\r
-       unsigned short no0 :1;\r
-       unsigned short no1 :1;\r
-       unsigned short no2 :1;\r
-       unsigned short no3 :1;\r
-       unsigned short no4 :1;\r
-       unsigned short no5 :1;\r
-       unsigned short no6 :1;\r
-       unsigned short no7 :1;\r
-       unsigned short no8 :1;\r
-       unsigned short no9 :1;\r
-       unsigned short no10 :1;\r
-       unsigned short no11 :1;\r
-       unsigned short no12 :1;\r
-       unsigned short no13 :1;\r
-       unsigned short no14 :1;\r
-       unsigned short no15 :1;\r
-} __BITS16;\r
-\r
-#endif\r
-\r
-#ifndef IODEFINE_H\r
-#define IODEFINE_H\r
-\r
-/*\r
- IO Registers\r
- */\r
-union un_p0 {\r
-       unsigned char p0;\r
-       __BITS8 BIT;\r
-};\r
-union un_p1 {\r
-       unsigned char p1;\r
-       __BITS8 BIT;\r
-};\r
-union un_p2 {\r
-       unsigned char p2;\r
-       __BITS8 BIT;\r
-};\r
-union un_p3 {\r
-       unsigned char p3;\r
-       __BITS8 BIT;\r
-};\r
-union un_p4 {\r
-       unsigned char p4;\r
-       __BITS8 BIT;\r
-};\r
-union un_p5 {\r
-       unsigned char p5;\r
-       __BITS8 BIT;\r
-};\r
-union un_p6 {\r
-       unsigned char p6;\r
-       __BITS8 BIT;\r
-};\r
-union un_p7 {\r
-       unsigned char p7;\r
-       __BITS8 BIT;\r
-};\r
-union un_p8 {\r
-       unsigned char p8;\r
-       __BITS8 BIT;\r
-};\r
-union un_p10 {\r
-       unsigned char p10;\r
-       __BITS8 BIT;\r
-};\r
-union un_p11 {\r
-       unsigned char p11;\r
-       __BITS8 BIT;\r
-};\r
-union un_p12 {\r
-       unsigned char p12;\r
-       __BITS8 BIT;\r
-};\r
-union un_p13 {\r
-       unsigned char p13;\r
-       __BITS8 BIT;\r
-};\r
-union un_p14 {\r
-       unsigned char p14;\r
-       __BITS8 BIT;\r
-};\r
-union un_p15 {\r
-       unsigned char p15;\r
-       __BITS8 BIT;\r
-};\r
-union un_pm0 {\r
-       unsigned char pm0;\r
-       __BITS8 BIT;\r
-};\r
-union un_pm1 {\r
-       unsigned char pm1;\r
-       __BITS8 BIT;\r
-};\r
-union un_pm2 {\r
-       unsigned char pm2;\r
-       __BITS8 BIT;\r
-};\r
-union un_pm3 {\r
-       unsigned char pm3;\r
-       __BITS8 BIT;\r
-};\r
-union un_pm4 {\r
-       unsigned char pm4;\r
-       __BITS8 BIT;\r
-};\r
-union un_pm5 {\r
-       unsigned char pm5;\r
-       __BITS8 BIT;\r
-};\r
-union un_pm6 {\r
-       unsigned char pm6;\r
-       __BITS8 BIT;\r
-};\r
-union un_pm7 {\r
-       unsigned char pm7;\r
-       __BITS8 BIT;\r
-};\r
-union un_pm8 {\r
-       unsigned char pm8;\r
-       __BITS8 BIT;\r
-};\r
-union un_pm10 {\r
-       unsigned char pm10;\r
-       __BITS8 BIT;\r
-};\r
-union un_pm11 {\r
-       unsigned char pm11;\r
-       __BITS8 BIT;\r
-};\r
-union un_pm12 {\r
-       unsigned char pm12;\r
-       __BITS8 BIT;\r
-};\r
-union un_pm14 {\r
-       unsigned char pm14;\r
-       __BITS8 BIT;\r
-};\r
-union un_pm15 {\r
-       unsigned char pm15;\r
-       __BITS8 BIT;\r
-};\r
-union un_adm0 {\r
-       unsigned char adm0;\r
-       __BITS8 BIT;\r
-};\r
-union un_ads {\r
-       unsigned char ads;\r
-       __BITS8 BIT;\r
-};\r
-union un_adm1 {\r
-       unsigned char adm1;\r
-       __BITS8 BIT;\r
-};\r
-union un_dam {\r
-       unsigned char dam;\r
-       __BITS8 BIT;\r
-};\r
-union un_krm {\r
-       unsigned char krm;\r
-       __BITS8 BIT;\r
-};\r
-union un_egp0 {\r
-       unsigned char egp0;\r
-       __BITS8 BIT;\r
-};\r
-union un_egn0 {\r
-       unsigned char egn0;\r
-       __BITS8 BIT;\r
-};\r
-union un_egp1 {\r
-       unsigned char egp1;\r
-       __BITS8 BIT;\r
-};\r
-union un_egn1 {\r
-       unsigned char egn1;\r
-       __BITS8 BIT;\r
-};\r
-union un_iics0 {\r
-       unsigned char iics0;\r
-       __BITS8 BIT;\r
-};\r
-union un_iicf0 {\r
-       unsigned char iicf0;\r
-       __BITS8 BIT;\r
-};\r
-union un_iics1 {\r
-       unsigned char iics1;\r
-       __BITS8 BIT;\r
-};\r
-union un_iicf1 {\r
-       unsigned char iicf1;\r
-       __BITS8 BIT;\r
-};\r
-union un_flars {\r
-       unsigned char flars;\r
-       __BITS8 BIT;\r
-};\r
-union un_fssq {\r
-       unsigned char fssq;\r
-       __BITS8 BIT;\r
-};\r
-union un_flrst {\r
-       unsigned char flrst;\r
-       __BITS8 BIT;\r
-};\r
-union un_fsastl {\r
-       unsigned char fsastl;\r
-       __BITS8 BIT;\r
-};\r
-union un_fsasth {\r
-       unsigned char fsasth;\r
-       __BITS8 BIT;\r
-};\r
-union un_rtcc0 {\r
-       unsigned char rtcc0;\r
-       __BITS8 BIT;\r
-};\r
-union un_rtcc1 {\r
-       unsigned char rtcc1;\r
-       __BITS8 BIT;\r
-};\r
-union un_csc {\r
-       unsigned char csc;\r
-       __BITS8 BIT;\r
-};\r
-union un_ostc {\r
-       unsigned char ostc;\r
-       __BITS8 BIT;\r
-};\r
-union un_ckc {\r
-       unsigned char ckc;\r
-       __BITS8 BIT;\r
-};\r
-union un_cks0 {\r
-       unsigned char cks0;\r
-       __BITS8 BIT;\r
-};\r
-union un_cks1 {\r
-       unsigned char cks1;\r
-       __BITS8 BIT;\r
-};\r
-union un_lvim {\r
-       unsigned char lvim;\r
-       __BITS8 BIT;\r
-};\r
-union un_lvis {\r
-       unsigned char lvis;\r
-       __BITS8 BIT;\r
-};\r
-union un_monsta0 {\r
-       unsigned char monsta0;\r
-       __BITS8 BIT;\r
-};\r
-union un_asim {\r
-       unsigned char asim;\r
-       __BITS8 BIT;\r
-};\r
-union un_if2 {\r
-       unsigned short if2;\r
-       __BITS16 BIT;\r
-};\r
-union un_if2l {\r
-       unsigned char if2l;\r
-       __BITS8 BIT;\r
-};\r
-union un_if2h {\r
-       unsigned char if2h;\r
-       __BITS8 BIT;\r
-};\r
-union un_mk2 {\r
-       unsigned short mk2;\r
-       __BITS16 BIT;\r
-};\r
-union un_mk2l {\r
-       unsigned char mk2l;\r
-       __BITS8 BIT;\r
-};\r
-union un_mk2h {\r
-       unsigned char mk2h;\r
-       __BITS8 BIT;\r
-};\r
-union un_pr02 {\r
-       unsigned short pr02;\r
-       __BITS16 BIT;\r
-};\r
-union un_pr02l {\r
-       unsigned char pr02l;\r
-       __BITS8 BIT;\r
-};\r
-union un_pr02h {\r
-       unsigned char pr02h;\r
-       __BITS8 BIT;\r
-};\r
-union un_pr12 {\r
-       unsigned short pr12;\r
-       __BITS16 BIT;\r
-};\r
-union un_pr12l {\r
-       unsigned char pr12l;\r
-       __BITS8 BIT;\r
-};\r
-union un_pr12h {\r
-       unsigned char pr12h;\r
-       __BITS8 BIT;\r
-};\r
-union un_if0 {\r
-       unsigned short if0;\r
-       __BITS16 BIT;\r
-};\r
-union un_if0l {\r
-       unsigned char if0l;\r
-       __BITS8 BIT;\r
-};\r
-union un_if0h {\r
-       unsigned char if0h;\r
-       __BITS8 BIT;\r
-};\r
-union un_if1 {\r
-       unsigned short if1;\r
-       __BITS16 BIT;\r
-};\r
-union un_if1l {\r
-       unsigned char if1l;\r
-       __BITS8 BIT;\r
-};\r
-union un_if1h {\r
-       unsigned char if1h;\r
-       __BITS8 BIT;\r
-};\r
-union un_mk0 {\r
-       unsigned short mk0;\r
-       __BITS16 BIT;\r
-};\r
-union un_mk0l {\r
-       unsigned char mk0l;\r
-       __BITS8 BIT;\r
-};\r
-union un_mk0h {\r
-       unsigned char mk0h;\r
-       __BITS8 BIT;\r
-};\r
-union un_mk1 {\r
-       unsigned short mk1;\r
-       __BITS16 BIT;\r
-};\r
-union un_mk1l {\r
-       unsigned char mk1l;\r
-       __BITS8 BIT;\r
-};\r
-union un_mk1h {\r
-       unsigned char mk1h;\r
-       __BITS8 BIT;\r
-};\r
-union un_pr00 {\r
-       unsigned short pr00;\r
-       __BITS16 BIT;\r
-};\r
-union un_pr00l {\r
-       unsigned char pr00l;\r
-       __BITS8 BIT;\r
-};\r
-union un_pr00h {\r
-       unsigned char pr00h;\r
-       __BITS8 BIT;\r
-};\r
-union un_pr01 {\r
-       unsigned short pr01;\r
-       __BITS16 BIT;\r
-};\r
-union un_pr01l {\r
-       unsigned char pr01l;\r
-       __BITS8 BIT;\r
-};\r
-union un_pr01h {\r
-       unsigned char pr01h;\r
-       __BITS8 BIT;\r
-};\r
-union un_pr10 {\r
-       unsigned short pr10;\r
-       __BITS16 BIT;\r
-};\r
-union un_pr10l {\r
-       unsigned char pr10l;\r
-       __BITS8 BIT;\r
-};\r
-union un_pr10h {\r
-       unsigned char pr10h;\r
-       __BITS8 BIT;\r
-};\r
-union un_pr11 {\r
-       unsigned short pr11;\r
-       __BITS16 BIT;\r
-};\r
-union un_pr11l {\r
-       unsigned char pr11l;\r
-       __BITS8 BIT;\r
-};\r
-union un_pr11h {\r
-       unsigned char pr11h;\r
-       __BITS8 BIT;\r
-};\r
-union un_pmc {\r
-       unsigned char pmc;\r
-       __BITS8 BIT;\r
-};\r
-\r
-#define P0 (*(volatile union un_p0 *)0xFFF00).p0\r
-#define P0_bit (*(volatile union un_p0 *)0xFFF00).BIT\r
-#define P1 (*(volatile union un_p1 *)0xFFF01).p1\r
-#define P1_bit (*(volatile union un_p1 *)0xFFF01).BIT\r
-#define P2 (*(volatile union un_p2 *)0xFFF02).p2\r
-#define P2_bit (*(volatile union un_p2 *)0xFFF02).BIT\r
-#define P3 (*(volatile union un_p3 *)0xFFF03).p3\r
-#define P3_bit (*(volatile union un_p3 *)0xFFF03).BIT\r
-#define P4 (*(volatile union un_p4 *)0xFFF04).p4\r
-#define P4_bit (*(volatile union un_p4 *)0xFFF04).BIT\r
-#define P5 (*(volatile union un_p5 *)0xFFF05).p5\r
-#define P5_bit (*(volatile union un_p5 *)0xFFF05).BIT\r
-#define P6 (*(volatile union un_p6 *)0xFFF06).p6\r
-#define P6_bit (*(volatile union un_p6 *)0xFFF06).BIT\r
-#define P7 (*(volatile union un_p7 *)0xFFF07).p7\r
-#define P7_bit (*(volatile union un_p7 *)0xFFF07).BIT\r
-#define P8 (*(volatile union un_p8 *)0xFFF08).p8\r
-#define P8_bit (*(volatile union un_p8 *)0xFFF08).BIT\r
-#define P10 (*(volatile union un_p10 *)0xFFF0A).p10\r
-#define P10_bit (*(volatile union un_p10 *)0xFFF0A).BIT\r
-#define P11 (*(volatile union un_p11 *)0xFFF0B).p11\r
-#define P11_bit (*(volatile union un_p11 *)0xFFF0B).BIT\r
-#define P12 (*(volatile union un_p12 *)0xFFF0C).p12\r
-#define P12_bit (*(volatile union un_p12 *)0xFFF0C).BIT\r
-#define P13 (*(volatile union un_p13 *)0xFFF0D).p13\r
-#define P13_bit (*(volatile union un_p13 *)0xFFF0D).BIT\r
-#define P14 (*(volatile union un_p14 *)0xFFF0E).p14\r
-#define P14_bit (*(volatile union un_p14 *)0xFFF0E).BIT\r
-#define P15 (*(volatile union un_p15 *)0xFFF0F).p15\r
-#define P15_bit (*(volatile union un_p15 *)0xFFF0F).BIT\r
-#define SDR00 (*(volatile unsigned short *)0xFFF10)\r
-#define SIO00 (*(volatile unsigned char *)0xFFF10)\r
-#define TXD0 (*(volatile unsigned char *)0xFFF10)\r
-#define SDR01 (*(volatile unsigned short *)0xFFF12)\r
-#define RXD0 (*(volatile unsigned char *)0xFFF12)\r
-#define SIO01 (*(volatile unsigned char *)0xFFF12)\r
-#define SDR12 (*(volatile unsigned short *)0xFFF14)\r
-#define SIO30 (*(volatile unsigned char *)0xFFF14)\r
-#define TXD3 (*(volatile unsigned char *)0xFFF14)\r
-#define SDR13 (*(volatile unsigned short *)0xFFF16)\r
-#define RXD3 (*(volatile unsigned char *)0xFFF16)\r
-#define SIO31 (*(volatile unsigned char *)0xFFF16)\r
-#define TDR00 (*(volatile unsigned short *)0xFFF18)\r
-#define TDR01 (*(volatile unsigned short *)0xFFF1A)\r
-#define TDR01L (*(volatile unsigned char *)0xFFF1A)\r
-#define TDR01H (*(volatile unsigned char *)0xFFF1B)\r
-#define ADCR (*(volatile unsigned short *)0xFFF1E)\r
-#define ADCRH (*(volatile unsigned char *)0xFFF1F)\r
-#define PM0 (*(volatile union un_pm0 *)0xFFF20).pm0\r
-#define PM0_bit (*(volatile union un_pm0 *)0xFFF20).BIT\r
-#define PM1 (*(volatile union un_pm1 *)0xFFF21).pm1\r
-#define PM1_bit (*(volatile union un_pm1 *)0xFFF21).BIT\r
-#define PM2 (*(volatile union un_pm2 *)0xFFF22).pm2\r
-#define PM2_bit (*(volatile union un_pm2 *)0xFFF22).BIT\r
-#define PM3 (*(volatile union un_pm3 *)0xFFF23).pm3\r
-#define PM3_bit (*(volatile union un_pm3 *)0xFFF23).BIT\r
-#define PM4 (*(volatile union un_pm4 *)0xFFF24).pm4\r
-#define PM4_bit (*(volatile union un_pm4 *)0xFFF24).BIT\r
-#define PM5 (*(volatile union un_pm5 *)0xFFF25).pm5\r
-#define PM5_bit (*(volatile union un_pm5 *)0xFFF25).BIT\r
-#define PM6 (*(volatile union un_pm6 *)0xFFF26).pm6\r
-#define PM6_bit (*(volatile union un_pm6 *)0xFFF26).BIT\r
-#define PM7 (*(volatile union un_pm7 *)0xFFF27).pm7\r
-#define PM7_bit (*(volatile union un_pm7 *)0xFFF27).BIT\r
-#define PM8 (*(volatile union un_pm8 *)0xFFF28).pm8\r
-#define PM8_bit (*(volatile union un_pm8 *)0xFFF28).BIT\r
-#define PM10 (*(volatile union un_pm10 *)0xFFF2A).pm10\r
-#define PM10_bit (*(volatile union un_pm10 *)0xFFF2A).BIT\r
-#define PM11 (*(volatile union un_pm11 *)0xFFF2B).pm11\r
-#define PM11_bit (*(volatile union un_pm11 *)0xFFF2B).BIT\r
-#define PM12 (*(volatile union un_pm12 *)0xFFF2C).pm12\r
-#define PM12_bit (*(volatile union un_pm12 *)0xFFF2C).BIT\r
-#define PM14 (*(volatile union un_pm14 *)0xFFF2E).pm14\r
-#define PM14_bit (*(volatile union un_pm14 *)0xFFF2E).BIT\r
-#define PM15 (*(volatile union un_pm15 *)0xFFF2F).pm15\r
-#define PM15_bit (*(volatile union un_pm15 *)0xFFF2F).BIT\r
-#define ADM0 (*(volatile union un_adm0 *)0xFFF30).adm0\r
-#define ADM0_bit (*(volatile union un_adm0 *)0xFFF30).BIT\r
-#define ADS (*(volatile union un_ads *)0xFFF31).ads\r
-#define ADS_bit (*(volatile union un_ads *)0xFFF31).BIT\r
-#define ADM1 (*(volatile union un_adm1 *)0xFFF32).adm1\r
-#define ADM1_bit (*(volatile union un_adm1 *)0xFFF32).BIT\r
-#define DACS0 (*(volatile unsigned char *)0xFFF34)\r
-#define DACS1 (*(volatile unsigned char *)0xFFF35)\r
-#define DAM (*(volatile union un_dam *)0xFFF36).dam\r
-#define DAM_bit (*(volatile union un_dam *)0xFFF36).BIT\r
-#define KRM (*(volatile union un_krm *)0xFFF37).krm\r
-#define KRM_bit (*(volatile union un_krm *)0xFFF37).BIT\r
-#define EGP0 (*(volatile union un_egp0 *)0xFFF38).egp0\r
-#define EGP0_bit (*(volatile union un_egp0 *)0xFFF38).BIT\r
-#define EGN0 (*(volatile union un_egn0 *)0xFFF39).egn0\r
-#define EGN0_bit (*(volatile union un_egn0 *)0xFFF39).BIT\r
-#define EGP1 (*(volatile union un_egp1 *)0xFFF3A).egp1\r
-#define EGP1_bit (*(volatile union un_egp1 *)0xFFF3A).BIT\r
-#define EGN1 (*(volatile union un_egn1 *)0xFFF3B).egn1\r
-#define EGN1_bit (*(volatile union un_egn1 *)0xFFF3B).BIT\r
-#define SDR02 (*(volatile unsigned short *)0xFFF44)\r
-#define SIO10 (*(volatile unsigned char *)0xFFF44)\r
-#define TXD1 (*(volatile unsigned char *)0xFFF44)\r
-#define SDR03 (*(volatile unsigned short *)0xFFF46)\r
-#define RXD1 (*(volatile unsigned char *)0xFFF46)\r
-#define SIO11 (*(volatile unsigned char *)0xFFF46)\r
-#define SDR10 (*(volatile unsigned short *)0xFFF48)\r
-#define SIO20 (*(volatile unsigned char *)0xFFF48)\r
-#define TXD2 (*(volatile unsigned char *)0xFFF48)\r
-#define SDR11 (*(volatile unsigned short *)0xFFF4A)\r
-#define RXD2 (*(volatile unsigned char *)0xFFF4A)\r
-#define SIO21 (*(volatile unsigned char *)0xFFF4A)\r
-#define IICA0 (*(volatile unsigned char *)0xFFF50)\r
-#define IICS0 (*(volatile union un_iics0 *)0xFFF51).iics0\r
-#define IICS0_bit (*(volatile union un_iics0 *)0xFFF51).BIT\r
-#define IICF0 (*(volatile union un_iicf0 *)0xFFF52).iicf0\r
-#define IICF0_bit (*(volatile union un_iicf0 *)0xFFF52).BIT\r
-#define IICA1 (*(volatile unsigned char *)0xFFF54)\r
-#define IICS1 (*(volatile union un_iics1 *)0xFFF55).iics1\r
-#define IICS1_bit (*(volatile union un_iics1 *)0xFFF55).BIT\r
-#define IICF1 (*(volatile union un_iicf1 *)0xFFF56).iicf1\r
-#define IICF1_bit (*(volatile union un_iicf1 *)0xFFF56).BIT\r
-#define TRDGRC0 (*(volatile unsigned short *)0xFFF58)\r
-#define TRDGRD0 (*(volatile unsigned short *)0xFFF5A)\r
-#define TRDGRC1 (*(volatile unsigned short *)0xFFF5C)\r
-#define TRDGRD1 (*(volatile unsigned short *)0xFFF5E)\r
-#define TRGGRC (*(volatile unsigned short *)0xFFF60)\r
-#define TRGGRD (*(volatile unsigned short *)0xFFF62)\r
-#define TDR02 (*(volatile unsigned short *)0xFFF64)\r
-#define TDR03 (*(volatile unsigned short *)0xFFF66)\r
-#define TDR03L (*(volatile unsigned char *)0xFFF66)\r
-#define TDR03H (*(volatile unsigned char *)0xFFF67)\r
-#define TDR10 (*(volatile unsigned short *)0xFFF70)\r
-#define TDR11 (*(volatile unsigned short *)0xFFF72)\r
-#define TDR11L (*(volatile unsigned char *)0xFFF72)\r
-#define TDR11H (*(volatile unsigned char *)0xFFF73)\r
-#define TDR12 (*(volatile unsigned short *)0xFFF74)\r
-#define TDR13 (*(volatile unsigned short *)0xFFF76)\r
-#define TDR13L (*(volatile unsigned char *)0xFFF76)\r
-#define TDR13H (*(volatile unsigned char *)0xFFF77)\r
-#define FLPMC (*(volatile unsigned char *)0xFFF80)\r
-#define FLARS (*(volatile union un_flars *)0xFFF81).flars\r
-#define FLARS_bit (*(volatile union un_flars *)0xFFF81).BIT\r
-#define FLAPL (*(volatile unsigned short *)0xFFF82)\r
-#define FLAPH (*(volatile unsigned char *)0xFFF84)\r
-#define FSSQ (*(volatile union un_fssq *)0xFFF85).fssq\r
-#define FSSQ_bit (*(volatile union un_fssq *)0xFFF85).BIT\r
-#define FLSEDL (*(volatile unsigned short *)0xFFF86)\r
-#define FLSEDH (*(volatile unsigned char *)0xFFF88)\r
-#define FLRST (*(volatile union un_flrst *)0xFFF89).flrst\r
-#define FLRST_bit (*(volatile union un_flrst *)0xFFF89).BIT\r
-#define FSASTL (*(volatile union un_fsastl *)0xFFF8A).fsastl\r
-#define FSASTL_bit (*(volatile union un_fsastl *)0xFFF8A).BIT\r
-#define FSASTH (*(volatile union un_fsasth *)0xFFF8B).fsasth\r
-#define FSASTH_bit (*(volatile union un_fsasth *)0xFFF8B).BIT\r
-#define FLWL (*(volatile unsigned short *)0xFFF8C)\r
-#define FLWH (*(volatile unsigned short *)0xFFF8E)\r
-#define ITMC (*(volatile unsigned short *)0xFFF90)\r
-#define SEC (*(volatile unsigned char *)0xFFF92)\r
-#define MIN (*(volatile unsigned char *)0xFFF93)\r
-#define HOUR (*(volatile unsigned char *)0xFFF94)\r
-#define WEEK (*(volatile unsigned char *)0xFFF95)\r
-#define DAY (*(volatile unsigned char *)0xFFF96)\r
-#define MONTH (*(volatile unsigned char *)0xFFF97)\r
-#define YEAR (*(volatile unsigned char *)0xFFF98)\r
-#define SUBCUD (*(volatile unsigned char *)0xFFF99)\r
-#define ALARMWM (*(volatile unsigned char *)0xFFF9A)\r
-#define ALARMWH (*(volatile unsigned char *)0xFFF9B)\r
-#define ALARMWW (*(volatile unsigned char *)0xFFF9C)\r
-#define RTCC0 (*(volatile union un_rtcc0 *)0xFFF9D).rtcc0\r
-#define RTCC0_bit (*(volatile union un_rtcc0 *)0xFFF9D).BIT\r
-#define RTCC1 (*(volatile union un_rtcc1 *)0xFFF9E).rtcc1\r
-#define RTCC1_bit (*(volatile union un_rtcc1 *)0xFFF9E).BIT\r
-#define CMC (*(volatile unsigned char *)0xFFFA0)\r
-#define CSC (*(volatile union un_csc *)0xFFFA1).csc\r
-#define CSC_bit (*(volatile union un_csc *)0xFFFA1).BIT\r
-#define OSTC (*(volatile union un_ostc *)0xFFFA2).ostc\r
-#define OSTC_bit (*(volatile union un_ostc *)0xFFFA2).BIT\r
-#define OSTS (*(volatile unsigned char *)0xFFFA3)\r
-#define CKC (*(volatile union un_ckc *)0xFFFA4).ckc\r
-#define CKC_bit (*(volatile union un_ckc *)0xFFFA4).BIT\r
-#define CKS0 (*(volatile union un_cks0 *)0xFFFA5).cks0\r
-#define CKS0_bit (*(volatile union un_cks0 *)0xFFFA5).BIT\r
-#define CKS1 (*(volatile union un_cks1 *)0xFFFA6).cks1\r
-#define CKS1_bit (*(volatile union un_cks1 *)0xFFFA6).BIT\r
-#define RESF (*(volatile unsigned char *)0xFFFA8)\r
-#define LVIM (*(volatile union un_lvim *)0xFFFA9).lvim\r
-#define LVIM_bit (*(volatile union un_lvim *)0xFFFA9).BIT\r
-#define LVIS (*(volatile union un_lvis *)0xFFFAA).lvis\r
-#define LVIS_bit (*(volatile union un_lvis *)0xFFFAA).BIT\r
-#define WDTE (*(volatile unsigned char *)0xFFFAB)\r
-#define CRCIN (*(volatile unsigned char *)0xFFFAC)\r
-#define RXB (*(volatile unsigned char *)0xFFFAD)\r
-#define TXS (*(volatile unsigned char *)0xFFFAD)\r
-#define MONSTA0 (*(volatile union un_monsta0 *)0xFFFAE).monsta0\r
-#define MONSTA0_bit (*(volatile union un_monsta0 *)0xFFFAE).BIT\r
-#define ASIM (*(volatile union un_asim *)0xFFFAF).asim\r
-#define ASIM_bit (*(volatile union un_asim *)0xFFFAF).BIT\r
-#define IF2 (*(volatile union un_if2 *)0xFFFD0).if2\r
-#define IF2_bit (*(volatile union un_if2 *)0xFFFD0).BIT\r
-#define IF2L (*(volatile union un_if2l *)0xFFFD0).if2l\r
-#define IF2L_bit (*(volatile union un_if2l *)0xFFFD0).BIT\r
-#define IF2H (*(volatile union un_if2h *)0xFFFD1).if2h\r
-#define IF2H_bit (*(volatile union un_if2h *)0xFFFD1).BIT\r
-#define MK2 (*(volatile union un_mk2 *)0xFFFD4).mk2\r
-#define MK2_bit (*(volatile union un_mk2 *)0xFFFD4).BIT\r
-#define MK2L (*(volatile union un_mk2l *)0xFFFD4).mk2l\r
-#define MK2L_bit (*(volatile union un_mk2l *)0xFFFD4).BIT\r
-#define MK2H (*(volatile union un_mk2h *)0xFFFD5).mk2h\r
-#define MK2H_bit (*(volatile union un_mk2h *)0xFFFD5).BIT\r
-#define PR02 (*(volatile union un_pr02 *)0xFFFD8).pr02\r
-#define PR02_bit (*(volatile union un_pr02 *)0xFFFD8).BIT\r
-#define PR02L (*(volatile union un_pr02l *)0xFFFD8).pr02l\r
-#define PR02L_bit (*(volatile union un_pr02l *)0xFFFD8).BIT\r
-#define PR02H (*(volatile union un_pr02h *)0xFFFD9).pr02h\r
-#define PR02H_bit (*(volatile union un_pr02h *)0xFFFD9).BIT\r
-#define PR12 (*(volatile union un_pr12 *)0xFFFDC).pr12\r
-#define PR12_bit (*(volatile union un_pr12 *)0xFFFDC).BIT\r
-#define PR12L (*(volatile union un_pr12l *)0xFFFDC).pr12l\r
-#define PR12L_bit (*(volatile union un_pr12l *)0xFFFDC).BIT\r
-#define PR12H (*(volatile union un_pr12h *)0xFFFDD).pr12h\r
-#define PR12H_bit (*(volatile union un_pr12h *)0xFFFDD).BIT\r
-#define IF0 (*(volatile union un_if0 *)0xFFFE0).if0\r
-#define IF0_bit (*(volatile union un_if0 *)0xFFFE0).BIT\r
-#define IF0L (*(volatile union un_if0l *)0xFFFE0).if0l\r
-#define IF0L_bit (*(volatile union un_if0l *)0xFFFE0).BIT\r
-#define IF0H (*(volatile union un_if0h *)0xFFFE1).if0h\r
-#define IF0H_bit (*(volatile union un_if0h *)0xFFFE1).BIT\r
-#define IF1 (*(volatile union un_if1 *)0xFFFE2).if1\r
-#define IF1_bit (*(volatile union un_if1 *)0xFFFE2).BIT\r
-#define IF1L (*(volatile union un_if1l *)0xFFFE2).if1l\r
-#define IF1L_bit (*(volatile union un_if1l *)0xFFFE2).BIT\r
-#define IF1H (*(volatile union un_if1h *)0xFFFE3).if1h\r
-#define IF1H_bit (*(volatile union un_if1h *)0xFFFE3).BIT\r
-#define MK0 (*(volatile union un_mk0 *)0xFFFE4).mk0\r
-#define MK0_bit (*(volatile union un_mk0 *)0xFFFE4).BIT\r
-#define MK0L (*(volatile union un_mk0l *)0xFFFE4).mk0l\r
-#define MK0L_bit (*(volatile union un_mk0l *)0xFFFE4).BIT\r
-#define MK0H (*(volatile union un_mk0h *)0xFFFE5).mk0h\r
-#define MK0H_bit (*(volatile union un_mk0h *)0xFFFE5).BIT\r
-#define MK1 (*(volatile union un_mk1 *)0xFFFE6).mk1\r
-#define MK1_bit (*(volatile union un_mk1 *)0xFFFE6).BIT\r
-#define MK1L (*(volatile union un_mk1l *)0xFFFE6).mk1l\r
-#define MK1L_bit (*(volatile union un_mk1l *)0xFFFE6).BIT\r
-#define MK1H (*(volatile union un_mk1h *)0xFFFE7).mk1h\r
-#define MK1H_bit (*(volatile union un_mk1h *)0xFFFE7).BIT\r
-#define PR00 (*(volatile union un_pr00 *)0xFFFE8).pr00\r
-#define PR00_bit (*(volatile union un_pr00 *)0xFFFE8).BIT\r
-#define PR00L (*(volatile union un_pr00l *)0xFFFE8).pr00l\r
-#define PR00L_bit (*(volatile union un_pr00l *)0xFFFE8).BIT\r
-#define PR00H (*(volatile union un_pr00h *)0xFFFE9).pr00h\r
-#define PR00H_bit (*(volatile union un_pr00h *)0xFFFE9).BIT\r
-#define PR01 (*(volatile union un_pr01 *)0xFFFEA).pr01\r
-#define PR01_bit (*(volatile union un_pr01 *)0xFFFEA).BIT\r
-#define PR01L (*(volatile union un_pr01l *)0xFFFEA).pr01l\r
-#define PR01L_bit (*(volatile union un_pr01l *)0xFFFEA).BIT\r
-#define PR01H (*(volatile union un_pr01h *)0xFFFEB).pr01h\r
-#define PR01H_bit (*(volatile union un_pr01h *)0xFFFEB).BIT\r
-#define PR10 (*(volatile union un_pr10 *)0xFFFEC).pr10\r
-#define PR10_bit (*(volatile union un_pr10 *)0xFFFEC).BIT\r
-#define PR10L (*(volatile union un_pr10l *)0xFFFEC).pr10l\r
-#define PR10L_bit (*(volatile union un_pr10l *)0xFFFEC).BIT\r
-#define PR10H (*(volatile union un_pr10h *)0xFFFED).pr10h\r
-#define PR10H_bit (*(volatile union un_pr10h *)0xFFFED).BIT\r
-#define PR11 (*(volatile union un_pr11 *)0xFFFEE).pr11\r
-#define PR11_bit (*(volatile union un_pr11 *)0xFFFEE).BIT\r
-#define PR11L (*(volatile union un_pr11l *)0xFFFEE).pr11l\r
-#define PR11L_bit (*(volatile union un_pr11l *)0xFFFEE).BIT\r
-#define PR11H (*(volatile union un_pr11h *)0xFFFEF).pr11h\r
-#define PR11H_bit (*(volatile union un_pr11h *)0xFFFEF).BIT\r
-#define MACRL (*(volatile unsigned short *)0xFFFF0)\r
-#define MACRH (*(volatile unsigned short *)0xFFFF2)\r
-#define MDUC (*(volatile unsigned char *)0xFFFFB)\r
-#define PMC (*(volatile union un_pmc *)0xFFFFE).pmc\r
-#define PMC_bit (*(volatile union un_pmc *)0xFFFFE).BIT\r
-\r
-/*\r
- Sfr bits\r
- */\r
-#define ADCE ADM0_bit.no0\r
-#define ADCS ADM0_bit.no7\r
-#define DACE0 DAM_bit.no4\r
-#define DACE1 DAM_bit.no5\r
-#define SPD0 IICS0_bit.no0\r
-#define STD0 IICS0_bit.no1\r
-#define ACKD0 IICS0_bit.no2\r
-#define TRC0 IICS0_bit.no3\r
-#define COI0 IICS0_bit.no4\r
-#define EXC0 IICS0_bit.no5\r
-#define ALD0 IICS0_bit.no6\r
-#define MSTS0 IICS0_bit.no7\r
-#define IICRSV0 IICF0_bit.no0\r
-#define STCEN0 IICF0_bit.no1\r
-#define IICBSY0 IICF0_bit.no6\r
-#define STCF0 IICF0_bit.no7\r
-#define SPD1 IICS1_bit.no0\r
-#define STD1 IICS1_bit.no1\r
-#define ACKD1 IICS1_bit.no2\r
-#define TRC1 IICS1_bit.no3\r
-#define COI1 IICS1_bit.no4\r
-#define EXC1 IICS1_bit.no5\r
-#define ALD1 IICS1_bit.no6\r
-#define MSTS1 IICS1_bit.no7\r
-#define IICRSV1 IICF1_bit.no0\r
-#define STCEN1 IICF1_bit.no1\r
-#define IICBSY1 IICF1_bit.no6\r
-#define STCF1 IICF1_bit.no7\r
-#define FSSTP FSSQ_bit.no6\r
-#define SQST FSSQ_bit.no7\r
-#define SQEND FSASTH_bit.no6\r
-#define ESQEND FSASTH_bit.no7\r
-#define RCLOE1 RTCC0_bit.no5\r
-#define RTCE RTCC0_bit.no7\r
-#define RWAIT RTCC1_bit.no0\r
-#define RWST RTCC1_bit.no1\r
-#define RIFG RTCC1_bit.no3\r
-#define WAFG RTCC1_bit.no4\r
-#define WALIE RTCC1_bit.no6\r
-#define WALE RTCC1_bit.no7\r
-#define HIOSTOP CSC_bit.no0\r
-#define XTSTOP CSC_bit.no6\r
-#define MSTOP CSC_bit.no7\r
-#define SDIV CKC_bit.no3\r
-#define MCM0 CKC_bit.no4\r
-#define MCS CKC_bit.no5\r
-#define CSS CKC_bit.no6\r
-#define CLS CKC_bit.no7\r
-#define PCLOE0 CKS0_bit.no7\r
-#define PCLOE1 CKS1_bit.no7\r
-#define LVIF LVIM_bit.no0\r
-#define LVIOMSK LVIM_bit.no1\r
-#define LVISEN LVIM_bit.no7\r
-#define LVILV LVIS_bit.no0\r
-#define LVIMD LVIS_bit.no7\r
-#define TMIF11 IF2_bit.no0\r
-#define TMIF12 IF2_bit.no1\r
-#define TMIF13 IF2_bit.no2\r
-#define PIF6 IF2_bit.no3\r
-#define PIF7 IF2_bit.no4\r
-#define PIF8 IF2_bit.no5\r
-#define PIF9 IF2_bit.no6\r
-#define CMPIF0 IF2_bit.no7\r
-#define PIF10 IF2_bit.no7\r
-#define CMPIF1 IF2H_bit.no0\r
-#define PIF11 IF2H_bit.no0\r
-#define TRDIF0 IF2H_bit.no1\r
-#define TRDIF1 IF2H_bit.no2\r
-#define TRGIF IF2H_bit.no3\r
-#define SREIF3 IF2H_bit.no4\r
-#define TMIF13H IF2H_bit.no4\r
-#define IICAIF1 IF2H_bit.no6\r
-#define FLIF IF2H_bit.no7\r
-#define TMMK11 MK2_bit.no0\r
-#define TMMK12 MK2_bit.no1\r
-#define TMMK13 MK2_bit.no2\r
-#define PMK6 MK2_bit.no3\r
-#define PMK7 MK2_bit.no4\r
-#define PMK8 MK2_bit.no5\r
-#define PMK9 MK2_bit.no6\r
-#define CMPMK0 MK2_bit.no7\r
-#define PMK10 MK2_bit.no7\r
-#define CMPMK1 MK2H_bit.no0\r
-#define PMK11 MK2H_bit.no0\r
-#define TRDMK0 MK2H_bit.no1\r
-#define TRDMK1 MK2H_bit.no2\r
-#define TRGMK MK2H_bit.no3\r
-#define SREMK3 MK2H_bit.no4\r
-#define TMMK13H MK2H_bit.no4\r
-#define IICAMK1 MK2H_bit.no6\r
-#define FLMK MK2H_bit.no7\r
-#define TMPR011 PR02_bit.no0\r
-#define TMPR012 PR02_bit.no1\r
-#define TMPR013 PR02_bit.no2\r
-#define PPR06 PR02_bit.no3\r
-#define PPR07 PR02_bit.no4\r
-#define PPR08 PR02_bit.no5\r
-#define PPR09 PR02_bit.no6\r
-#define CMPPR00 PR02_bit.no7\r
-#define PPR010 PR02_bit.no7\r
-#define CMPPR01 PR02H_bit.no0\r
-#define PPR011 PR02H_bit.no0\r
-#define TRDPR00 PR02H_bit.no1\r
-#define TRDPR01 PR02H_bit.no2\r
-#define TRGPR0 PR02H_bit.no3\r
-#define SREPR03 PR02H_bit.no4\r
-#define TMPR013H PR02H_bit.no4\r
-#define IICAPR01 PR02H_bit.no6\r
-#define FLPR0 PR02H_bit.no7\r
-#define TMPR111 PR12_bit.no0\r
-#define TMPR112 PR12_bit.no1\r
-#define TMPR113 PR12_bit.no2\r
-#define PPR16 PR12_bit.no3\r
-#define PPR17 PR12_bit.no4\r
-#define PPR18 PR12_bit.no5\r
-#define PPR19 PR12_bit.no6\r
-#define CMPPR10 PR12_bit.no7\r
-#define PPR110 PR12_bit.no7\r
-#define CMPPR11 PR12H_bit.no0\r
-#define PPR111 PR12H_bit.no0\r
-#define TRDPR10 PR12H_bit.no1\r
-#define TRDPR11 PR12H_bit.no2\r
-#define TRGPR1 PR12H_bit.no3\r
-#define SREPR13 PR12H_bit.no4\r
-#define TMPR113H PR12H_bit.no4\r
-#define IICAPR11 PR12H_bit.no6\r
-#define FLPR1 PR12H_bit.no7\r
-#define SROIF IF0_bit.no0\r
-#define WDTIIF IF0_bit.no0\r
-#define LVIIF IF0_bit.no1\r
-#define PIF0 IF0_bit.no2\r
-#define PIF1 IF0_bit.no3\r
-#define PIF2 IF0_bit.no4\r
-#define PIF3 IF0_bit.no5\r
-#define PIF4 IF0_bit.no6\r
-#define PIF5 IF0_bit.no7\r
-#define CSIIF20 IF0H_bit.no0\r
-#define IICIF20 IF0H_bit.no0\r
-#define STIF2 IF0H_bit.no0\r
-#define CSIIF21 IF0H_bit.no1\r
-#define IICIF21 IF0H_bit.no1\r
-#define SRIF2 IF0H_bit.no1\r
-#define SREIF2 IF0H_bit.no2\r
-#define TMIF11H IF0H_bit.no2\r
-#define CSIIF00 IF0H_bit.no5\r
-#define IICIF00 IF0H_bit.no5\r
-#define STIF0 IF0H_bit.no5\r
-#define CSIIF01 IF0H_bit.no6\r
-#define IICIF01 IF0H_bit.no6\r
-#define SRIF0 IF0H_bit.no6\r
-#define SREIF0 IF0H_bit.no7\r
-#define TMIF01H IF0H_bit.no7\r
-#define CSIIF10 IF1_bit.no0\r
-#define IICIF10 IF1_bit.no0\r
-#define STIF1 IF1_bit.no0\r
-#define CSIIF11 IF1_bit.no1\r
-#define IICIF11 IF1_bit.no1\r
-#define SRIF1 IF1_bit.no1\r
-#define SREIF1 IF1_bit.no2\r
-#define TMIF03H IF1_bit.no2\r
-#define IICAIF0 IF1_bit.no3\r
-#define TMIF00 IF1_bit.no4\r
-#define TMIF01 IF1_bit.no5\r
-#define TMIF02 IF1_bit.no6\r
-#define TMIF03 IF1_bit.no7\r
-#define ADIF IF1H_bit.no0\r
-#define RTCIF IF1H_bit.no1\r
-#define ITIF IF1H_bit.no2\r
-#define KRIF IF1H_bit.no3\r
-#define CSIIF30 IF1H_bit.no4\r
-#define IICIF30 IF1H_bit.no4\r
-#define STIF3 IF1H_bit.no4\r
-#define CSIIF31 IF1H_bit.no5\r
-#define IICIF31 IF1H_bit.no5\r
-#define SRIF3 IF1H_bit.no5\r
-#define TRJIF0 IF1H_bit.no6\r
-#define TMIF10 IF1H_bit.no7\r
-#define SROMK MK0_bit.no0\r
-#define WDTIMK MK0_bit.no0\r
-#define LVIMK MK0_bit.no1\r
-#define PMK0 MK0_bit.no2\r
-#define PMK1 MK0_bit.no3\r
-#define PMK2 MK0_bit.no4\r
-#define PMK3 MK0_bit.no5\r
-#define PMK4 MK0_bit.no6\r
-#define PMK5 MK0_bit.no7\r
-#define CSIMK20 MK0H_bit.no0\r
-#define IICMK20 MK0H_bit.no0\r
-#define STMK2 MK0H_bit.no0\r
-#define CSIMK21 MK0H_bit.no1\r
-#define IICMK21 MK0H_bit.no1\r
-#define SRMK2 MK0H_bit.no1\r
-#define SREMK2 MK0H_bit.no2\r
-#define TMMK11H MK0H_bit.no2\r
-#define CSIMK00 MK0H_bit.no5\r
-#define IICMK00 MK0H_bit.no5\r
-#define STMK0 MK0H_bit.no5\r
-#define CSIMK01 MK0H_bit.no6\r
-#define IICMK01 MK0H_bit.no6\r
-#define SRMK0 MK0H_bit.no6\r
-#define SREMK0 MK0H_bit.no7\r
-#define TMMK01H MK0H_bit.no7\r
-#define CSIMK10 MK1_bit.no0\r
-#define IICMK10 MK1_bit.no0\r
-#define STMK1 MK1_bit.no0\r
-#define CSIMK11 MK1_bit.no1\r
-#define IICMK11 MK1_bit.no1\r
-#define SRMK1 MK1_bit.no1\r
-#define SREMK1 MK1_bit.no2\r
-#define TMMK03H MK1_bit.no2\r
-#define IICAMK0 MK1_bit.no3\r
-#define TMMK00 MK1_bit.no4\r
-#define TMMK01 MK1_bit.no5\r
-#define TMMK02 MK1_bit.no6\r
-#define TMMK03 MK1_bit.no7\r
-#define ADMK MK1H_bit.no0\r
-#define RTCMK MK1H_bit.no1\r
-#define ITMK MK1H_bit.no2\r
-#define KRMK MK1H_bit.no3\r
-#define CSIMK30 MK1H_bit.no4\r
-#define IICMK30 MK1H_bit.no4\r
-#define STMK3 MK1H_bit.no4\r
-#define CSIMK31 MK1H_bit.no5\r
-#define IICMK31 MK1H_bit.no5\r
-#define SRMK3 MK1H_bit.no5\r
-#define TRJMK0 MK1H_bit.no6\r
-#define TMMK10 MK1H_bit.no7\r
-#define SROPR0 PR00_bit.no0\r
-#define WDTIPR0 PR00_bit.no0\r
-#define LVIPR0 PR00_bit.no1\r
-#define PPR00 PR00_bit.no2\r
-#define PPR01 PR00_bit.no3\r
-#define PPR02 PR00_bit.no4\r
-#define PPR03 PR00_bit.no5\r
-#define PPR04 PR00_bit.no6\r
-#define PPR05 PR00_bit.no7\r
-#define CSIPR020 PR00H_bit.no0\r
-#define IICPR020 PR00H_bit.no0\r
-#define STPR02 PR00H_bit.no0\r
-#define CSIPR021 PR00H_bit.no1\r
-#define IICPR021 PR00H_bit.no1\r
-#define SRPR02 PR00H_bit.no1\r
-#define SREPR02 PR00H_bit.no2\r
-#define TMPR011H PR00H_bit.no2\r
-#define CSIPR000 PR00H_bit.no5\r
-#define IICPR000 PR00H_bit.no5\r
-#define STPR00 PR00H_bit.no5\r
-#define CSIPR001 PR00H_bit.no6\r
-#define IICPR001 PR00H_bit.no6\r
-#define SRPR00 PR00H_bit.no6\r
-#define SREPR00 PR00H_bit.no7\r
-#define TMPR001H PR00H_bit.no7\r
-#define CSIPR010 PR01_bit.no0\r
-#define IICPR010 PR01_bit.no0\r
-#define STPR01 PR01_bit.no0\r
-#define CSIPR011 PR01_bit.no1\r
-#define IICPR011 PR01_bit.no1\r
-#define SRPR01 PR01_bit.no1\r
-#define SREPR01 PR01_bit.no2\r
-#define TMPR003H PR01_bit.no2\r
-#define IICAPR00 PR01_bit.no3\r
-#define TMPR000 PR01_bit.no4\r
-#define TMPR001 PR01_bit.no5\r
-#define TMPR002 PR01_bit.no6\r
-#define TMPR003 PR01_bit.no7\r
-#define ADPR0 PR01H_bit.no0\r
-#define RTCPR0 PR01H_bit.no1\r
-#define ITPR0 PR01H_bit.no2\r
-#define KRPR0 PR01H_bit.no3\r
-#define CSIPR030 PR01H_bit.no4\r
-#define IICPR030 PR01H_bit.no4\r
-#define STPR03 PR01H_bit.no4\r
-#define CSIPR031 PR01H_bit.no5\r
-#define IICPR031 PR01H_bit.no5\r
-#define SRPR03 PR01H_bit.no5\r
-#define TRJPR00 PR01H_bit.no6\r
-#define TMPR010 PR01H_bit.no7\r
-#define SROPR1 PR10_bit.no0\r
-#define WDTIPR1 PR10_bit.no0\r
-#define LVIPR1 PR10_bit.no1\r
-#define PPR10 PR10_bit.no2\r
-#define PPR11 PR10_bit.no3\r
-#define PPR12 PR10_bit.no4\r
-#define PPR13 PR10_bit.no5\r
-#define PPR14 PR10_bit.no6\r
-#define PPR15 PR10_bit.no7\r
-#define CSIPR120 PR10H_bit.no0\r
-#define IICPR120 PR10H_bit.no0\r
-#define STPR12 PR10H_bit.no0\r
-#define CSIPR121 PR10H_bit.no1\r
-#define IICPR121 PR10H_bit.no1\r
-#define SRPR12 PR10H_bit.no1\r
-#define SREPR12 PR10H_bit.no2\r
-#define TMPR111H PR10H_bit.no2\r
-#define CSIPR100 PR10H_bit.no5\r
-#define IICPR100 PR10H_bit.no5\r
-#define STPR10 PR10H_bit.no5\r
-#define CSIPR101 PR10H_bit.no6\r
-#define IICPR101 PR10H_bit.no6\r
-#define SRPR10 PR10H_bit.no6\r
-#define SREPR10 PR10H_bit.no7\r
-#define TMPR101H PR10H_bit.no7\r
-#define CSIPR110 PR11_bit.no0\r
-#define IICPR110 PR11_bit.no0\r
-#define STPR11 PR11_bit.no0\r
-#define CSIPR111 PR11_bit.no1\r
-#define IICPR111 PR11_bit.no1\r
-#define SRPR11 PR11_bit.no1\r
-#define SREPR11 PR11_bit.no2\r
-#define TMPR103H PR11_bit.no2\r
-#define IICAPR10 PR11_bit.no3\r
-#define TMPR100 PR11_bit.no4\r
-#define TMPR101 PR11_bit.no5\r
-#define TMPR102 PR11_bit.no6\r
-#define TMPR103 PR11_bit.no7\r
-#define ADPR1 PR11H_bit.no0\r
-#define RTCPR1 PR11H_bit.no1\r
-#define ITPR1 PR11H_bit.no2\r
-#define KRPR1 PR11H_bit.no3\r
-#define CSIPR130 PR11H_bit.no4\r
-#define IICPR130 PR11H_bit.no4\r
-#define STPR13 PR11H_bit.no4\r
-#define CSIPR131 PR11H_bit.no5\r
-#define IICPR131 PR11H_bit.no5\r
-#define SRPR13 PR11H_bit.no5\r
-#define TRJPR10 PR11H_bit.no6\r
-#define TMPR110 PR11H_bit.no7\r
-#define MAA PMC_bit.no0\r
-\r
-/*\r
- Interrupt vector addresses\r
- */\r
-#define RST_vect (0x0)\r
-#define INTDBG_vect (0x2)\r
-#define INTSRO_vect (0x4)\r
-#define INTWDTI_vect (0x4)\r
-#define INTLVI_vect (0x6)\r
-#define INTP0_vect (0x8)\r
-#define INTP1_vect (0xA)\r
-#define INTP2_vect (0xC)\r
-#define INTP3_vect (0xE)\r
-#define INTP4_vect (0x10)\r
-#define INTP5_vect (0x12)\r
-#define INTCSI20_vect (0x14)\r
-#define INTIIC20_vect (0x14)\r
-#define INTST2_vect (0x14)\r
-#define INTCSI21_vect (0x16)\r
-#define INTIIC21_vect (0x16)\r
-#define INTSR2_vect (0x16)\r
-#define INTSRE2_vect (0x18)\r
-#define INTTM11H_vect (0x18)\r
-#define INTCSI00_vect (0x1E)\r
-#define INTIIC00_vect (0x1E)\r
-#define INTST0_vect (0x1E)\r
-#define INTCSI01_vect (0x20)\r
-#define INTIIC01_vect (0x20)\r
-#define INTSR0_vect (0x20)\r
-#define INTSRE0_vect (0x22)\r
-#define INTTM01H_vect (0x22)\r
-#define INTCSI10_vect (0x24)\r
-#define INTIIC10_vect (0x24)\r
-#define INTST1_vect (0x24)\r
-#define INTCSI11_vect (0x26)\r
-#define INTIIC11_vect (0x26)\r
-#define INTSR1_vect (0x26)\r
-#define INTSRE1_vect (0x28)\r
-#define INTTM03H_vect (0x28)\r
-#define INTIICA0_vect (0x2A)\r
-#define INTTM00_vect (0x2C)\r
-#define INTTM01_vect (0x2E)\r
-#define INTTM02_vect (0x30)\r
-#define INTTM03_vect (0x32)\r
-#define INTAD_vect (0x34)\r
-#define INTRTC_vect (0x36)\r
-#define INTIT_vect (0x38)\r
-#define INTKR_vect (0x3A)\r
-#define INTCSI30_vect (0x3C)\r
-#define INTIIC30_vect (0x3C)\r
-#define INTST3_vect (0x3C)\r
-#define INTCSI31_vect (0x3E)\r
-#define INTIIC31_vect (0x3E)\r
-#define INTSR3_vect (0x3E)\r
-#define INTTRJ0_vect (0x40)\r
-#define INTTM10_vect (0x42)\r
-#define INTTM11_vect (0x44)\r
-#define INTTM12_vect (0x46)\r
-#define INTTM13_vect (0x48)\r
-#define INTP6_vect (0x4A)\r
-#define INTP7_vect (0x4C)\r
-#define INTP8_vect (0x4E)\r
-#define INTP9_vect (0x50)\r
-#define INTCMP0_vect (0x52)\r
-#define INTP10_vect (0x52)\r
-#define INTCMP1_vect (0x54)\r
-#define INTP11_vect (0x54)\r
-#define INTTRD0_vect (0x56)\r
-#define INTTRD1_vect (0x58)\r
-#define INTTRG_vect (0x5A)\r
-#define INTSRE3_vect (0x5C)\r
-#define INTTM13H_vect (0x5C)\r
-#define INTIICA1_vect (0x60)\r
-#define INTFL_vect (0x62)\r
-#define BRK_I_vect (0x7E)\r
-#endif\r
diff --git a/FreeRTOS/Demo/RL78_E2Studio_GCC/src/iodefine/iodefine_RL78G14_ext.h b/FreeRTOS/Demo/RL78_E2Studio_GCC/src/iodefine/iodefine_RL78G14_ext.h
deleted file mode 100644 (file)
index 8926920..0000000
+++ /dev/null
@@ -1,1204 +0,0 @@
-/***********************************************************************/
-/*                                                                                                                    */
-/*      PROJECT NAME :  RL78G14                                        */
-/*      FILE         :  iodefine_ext.h                                 */
-/*      DESCRIPTION  :  Definition of Extended SFRs                    */
-/*      CPU SERIES   :  RL78 - G14                                     */
-/*      CPU TYPE     :  R5F104PJ                                       */
-/*                                                                                                                    */
-/*      This file is generated by e2studio.                        */
-/*                                                                                                                    */
-/***********************************************************************/                                                                       \r
-                                                                                   \r
-/************************************************************************/\r
-/* Header file generated from device file:                              */\r
-/*    DR5F104PJ.DVF                                                     */\r
-/*    Copyright(C) 2012 Renesas                                         */\r
-/*    File Version V2.00                                                */\r
-/*    Tool Version 1.9.7121                                             */\r
-/*    Date Generated 13/11/2012                                         */\r
-/************************************************************************/\r
-\r
-#ifndef __IOREG_BIT_STRUCTURES\r
-#define __IOREG_BIT_STRUCTURES\r
-typedef struct {\r
-       unsigned char no0 :1;\r
-       unsigned char no1 :1;\r
-       unsigned char no2 :1;\r
-       unsigned char no3 :1;\r
-       unsigned char no4 :1;\r
-       unsigned char no5 :1;\r
-       unsigned char no6 :1;\r
-       unsigned char no7 :1;\r
-} __BITS8;\r
-\r
-typedef struct {\r
-       unsigned short no0 :1;\r
-       unsigned short no1 :1;\r
-       unsigned short no2 :1;\r
-       unsigned short no3 :1;\r
-       unsigned short no4 :1;\r
-       unsigned short no5 :1;\r
-       unsigned short no6 :1;\r
-       unsigned short no7 :1;\r
-       unsigned short no8 :1;\r
-       unsigned short no9 :1;\r
-       unsigned short no10 :1;\r
-       unsigned short no11 :1;\r
-       unsigned short no12 :1;\r
-       unsigned short no13 :1;\r
-       unsigned short no14 :1;\r
-       unsigned short no15 :1;\r
-} __BITS16;\r
-\r
-#endif\r
-\r
-#ifndef IODEFINE_EXT_H\r
-#define IODEFINE_EXT_H\r
-\r
-/*\r
- IO Registers\r
- */\r
-union un_adm2 {\r
-       unsigned char adm2;\r
-       __BITS8 BIT;\r
-};\r
-union un_pu0 {\r
-       unsigned char pu0;\r
-       __BITS8 BIT;\r
-};\r
-union un_pu1 {\r
-       unsigned char pu1;\r
-       __BITS8 BIT;\r
-};\r
-union un_pu3 {\r
-       unsigned char pu3;\r
-       __BITS8 BIT;\r
-};\r
-union un_pu4 {\r
-       unsigned char pu4;\r
-       __BITS8 BIT;\r
-};\r
-union un_pu5 {\r
-       unsigned char pu5;\r
-       __BITS8 BIT;\r
-};\r
-union un_pu6 {\r
-       unsigned char pu6;\r
-       __BITS8 BIT;\r
-};\r
-union un_pu7 {\r
-       unsigned char pu7;\r
-       __BITS8 BIT;\r
-};\r
-union un_pu8 {\r
-       unsigned char pu8;\r
-       __BITS8 BIT;\r
-};\r
-union un_pu10 {\r
-       unsigned char pu10;\r
-       __BITS8 BIT;\r
-};\r
-union un_pu11 {\r
-       unsigned char pu11;\r
-       __BITS8 BIT;\r
-};\r
-union un_pu12 {\r
-       unsigned char pu12;\r
-       __BITS8 BIT;\r
-};\r
-union un_pu14 {\r
-       unsigned char pu14;\r
-       __BITS8 BIT;\r
-};\r
-union un_pim0 {\r
-       unsigned char pim0;\r
-       __BITS8 BIT;\r
-};\r
-union un_pim1 {\r
-       unsigned char pim1;\r
-       __BITS8 BIT;\r
-};\r
-union un_pim3 {\r
-       unsigned char pim3;\r
-       __BITS8 BIT;\r
-};\r
-union un_pim4 {\r
-       unsigned char pim4;\r
-       __BITS8 BIT;\r
-};\r
-union un_pim5 {\r
-       unsigned char pim5;\r
-       __BITS8 BIT;\r
-};\r
-union un_pim8 {\r
-       unsigned char pim8;\r
-       __BITS8 BIT;\r
-};\r
-union un_pim14 {\r
-       unsigned char pim14;\r
-       __BITS8 BIT;\r
-};\r
-union un_pom0 {\r
-       unsigned char pom0;\r
-       __BITS8 BIT;\r
-};\r
-union un_pom1 {\r
-       unsigned char pom1;\r
-       __BITS8 BIT;\r
-};\r
-union un_pom3 {\r
-       unsigned char pom3;\r
-       __BITS8 BIT;\r
-};\r
-union un_pom4 {\r
-       unsigned char pom4;\r
-       __BITS8 BIT;\r
-};\r
-union un_pom5 {\r
-       unsigned char pom5;\r
-       __BITS8 BIT;\r
-};\r
-union un_pom7 {\r
-       unsigned char pom7;\r
-       __BITS8 BIT;\r
-};\r
-union un_pom8 {\r
-       unsigned char pom8;\r
-       __BITS8 BIT;\r
-};\r
-union un_pom14 {\r
-       unsigned char pom14;\r
-       __BITS8 BIT;\r
-};\r
-union un_pmc0 {\r
-       unsigned char pmc0;\r
-       __BITS8 BIT;\r
-};\r
-union un_pmc1 {\r
-       unsigned char pmc1;\r
-       __BITS8 BIT;\r
-};\r
-union un_pmc10 {\r
-       unsigned char pmc10;\r
-       __BITS8 BIT;\r
-};\r
-union un_pmc12 {\r
-       unsigned char pmc12;\r
-       __BITS8 BIT;\r
-};\r
-union un_pmc14 {\r
-       unsigned char pmc14;\r
-       __BITS8 BIT;\r
-};\r
-union un_nfen0 {\r
-       unsigned char nfen0;\r
-       __BITS8 BIT;\r
-};\r
-union un_nfen1 {\r
-       unsigned char nfen1;\r
-       __BITS8 BIT;\r
-};\r
-union un_nfen2 {\r
-       unsigned char nfen2;\r
-       __BITS8 BIT;\r
-};\r
-union un_isc {\r
-       unsigned char isc;\r
-       __BITS8 BIT;\r
-};\r
-union un_per1 {\r
-       unsigned char per1;\r
-       __BITS8 BIT;\r
-};\r
-union un_pms {\r
-       unsigned char pms;\r
-       __BITS8 BIT;\r
-};\r
-union un_gdidis {\r
-       unsigned char gdidis;\r
-       __BITS8 BIT;\r
-};\r
-union un_dflctl {\r
-       unsigned char dflctl;\r
-       __BITS8 BIT;\r
-};\r
-union un_bectl {\r
-       unsigned char bectl;\r
-       __BITS8 BIT;\r
-};\r
-union un_fsse {\r
-       unsigned char fsse;\r
-       __BITS8 BIT;\r
-};\r
-union un_pfs {\r
-       unsigned char pfs;\r
-       __BITS8 BIT;\r
-};\r
-union un_per0 {\r
-       unsigned char per0;\r
-       __BITS8 BIT;\r
-};\r
-union un_rmc {\r
-       unsigned char rmc;\r
-       __BITS8 BIT;\r
-};\r
-union un_rpectl {\r
-       unsigned char rpectl;\r
-       __BITS8 BIT;\r
-};\r
-union un_se0l {\r
-       unsigned char se0l;\r
-       __BITS8 BIT;\r
-};\r
-union un_ss0l {\r
-       unsigned char ss0l;\r
-       __BITS8 BIT;\r
-};\r
-union un_st0l {\r
-       unsigned char st0l;\r
-       __BITS8 BIT;\r
-};\r
-union un_soe0l {\r
-       unsigned char soe0l;\r
-       __BITS8 BIT;\r
-};\r
-union un_se1l {\r
-       unsigned char se1l;\r
-       __BITS8 BIT;\r
-};\r
-union un_ss1l {\r
-       unsigned char ss1l;\r
-       __BITS8 BIT;\r
-};\r
-union un_st1l {\r
-       unsigned char st1l;\r
-       __BITS8 BIT;\r
-};\r
-union un_soe1l {\r
-       unsigned char soe1l;\r
-       __BITS8 BIT;\r
-};\r
-union un_te0l {\r
-       unsigned char te0l;\r
-       __BITS8 BIT;\r
-};\r
-union un_ts0l {\r
-       unsigned char ts0l;\r
-       __BITS8 BIT;\r
-};\r
-union un_tt0l {\r
-       unsigned char tt0l;\r
-       __BITS8 BIT;\r
-};\r
-union un_toe0l {\r
-       unsigned char toe0l;\r
-       __BITS8 BIT;\r
-};\r
-union un_te1l {\r
-       unsigned char te1l;\r
-       __BITS8 BIT;\r
-};\r
-union un_ts1l {\r
-       unsigned char ts1l;\r
-       __BITS8 BIT;\r
-};\r
-union un_tt1l {\r
-       unsigned char tt1l;\r
-       __BITS8 BIT;\r
-};\r
-union un_toe1l {\r
-       unsigned char toe1l;\r
-       __BITS8 BIT;\r
-};\r
-union un_iicctl00 {\r
-       unsigned char iicctl00;\r
-       __BITS8 BIT;\r
-};\r
-union un_iicctl01 {\r
-       unsigned char iicctl01;\r
-       __BITS8 BIT;\r
-};\r
-union un_iicctl10 {\r
-       unsigned char iicctl10;\r
-       __BITS8 BIT;\r
-};\r
-union un_iicctl11 {\r
-       unsigned char iicctl11;\r
-       __BITS8 BIT;\r
-};\r
-union un_trjioc0 {\r
-       unsigned char trjioc0;\r
-       __BITS8 BIT;\r
-};\r
-union un_trjmr0 {\r
-       unsigned char trjmr0;\r
-       __BITS8 BIT;\r
-};\r
-union un_trjisr0 {\r
-       unsigned char trjisr0;\r
-       __BITS8 BIT;\r
-};\r
-union un_trgmr {\r
-       unsigned char trgmr;\r
-       __BITS8 BIT;\r
-};\r
-union un_trgcntc {\r
-       unsigned char trgcntc;\r
-       __BITS8 BIT;\r
-};\r
-union un_trgcr {\r
-       unsigned char trgcr;\r
-       __BITS8 BIT;\r
-};\r
-union un_trgier {\r
-       unsigned char trgier;\r
-       __BITS8 BIT;\r
-};\r
-union un_trgsr {\r
-       unsigned char trgsr;\r
-       __BITS8 BIT;\r
-};\r
-union un_trgior {\r
-       unsigned char trgior;\r
-       __BITS8 BIT;\r
-};\r
-union un_trdelc {\r
-       unsigned char trdelc;\r
-       __BITS8 BIT;\r
-};\r
-union un_trdmr {\r
-       unsigned char trdmr;\r
-       __BITS8 BIT;\r
-};\r
-union un_trdpmr {\r
-       unsigned char trdpmr;\r
-       __BITS8 BIT;\r
-};\r
-union un_trdfcr {\r
-       unsigned char trdfcr;\r
-       __BITS8 BIT;\r
-};\r
-union un_trdoer1 {\r
-       unsigned char trdoer1;\r
-       __BITS8 BIT;\r
-};\r
-union un_trdoer2 {\r
-       unsigned char trdoer2;\r
-       __BITS8 BIT;\r
-};\r
-union un_trdocr {\r
-       unsigned char trdocr;\r
-       __BITS8 BIT;\r
-};\r
-union un_trddf0 {\r
-       unsigned char trddf0;\r
-       __BITS8 BIT;\r
-};\r
-union un_trddf1 {\r
-       unsigned char trddf1;\r
-       __BITS8 BIT;\r
-};\r
-union un_trdcr0 {\r
-       unsigned char trdcr0;\r
-       __BITS8 BIT;\r
-};\r
-union un_trdiora0 {\r
-       unsigned char trdiora0;\r
-       __BITS8 BIT;\r
-};\r
-union un_trdiorc0 {\r
-       unsigned char trdiorc0;\r
-       __BITS8 BIT;\r
-};\r
-union un_trdsr0 {\r
-       unsigned char trdsr0;\r
-       __BITS8 BIT;\r
-};\r
-union un_trdier0 {\r
-       unsigned char trdier0;\r
-       __BITS8 BIT;\r
-};\r
-union un_trdpocr0 {\r
-       unsigned char trdpocr0;\r
-       __BITS8 BIT;\r
-};\r
-union un_trdcr1 {\r
-       unsigned char trdcr1;\r
-       __BITS8 BIT;\r
-};\r
-union un_trdiora1 {\r
-       unsigned char trdiora1;\r
-       __BITS8 BIT;\r
-};\r
-union un_trdiorc1 {\r
-       unsigned char trdiorc1;\r
-       __BITS8 BIT;\r
-};\r
-union un_trdsr1 {\r
-       unsigned char trdsr1;\r
-       __BITS8 BIT;\r
-};\r
-union un_trdier1 {\r
-       unsigned char trdier1;\r
-       __BITS8 BIT;\r
-};\r
-union un_trdpocr1 {\r
-       unsigned char trdpocr1;\r
-       __BITS8 BIT;\r
-};\r
-union un_dtcen0 {\r
-       unsigned char dtcen0;\r
-       __BITS8 BIT;\r
-};\r
-union un_dtcen1 {\r
-       unsigned char dtcen1;\r
-       __BITS8 BIT;\r
-};\r
-union un_dtcen2 {\r
-       unsigned char dtcen2;\r
-       __BITS8 BIT;\r
-};\r
-union un_dtcen3 {\r
-       unsigned char dtcen3;\r
-       __BITS8 BIT;\r
-};\r
-union un_dtcen4 {\r
-       unsigned char dtcen4;\r
-       __BITS8 BIT;\r
-};\r
-union un_crc0ctl {\r
-       unsigned char crc0ctl;\r
-       __BITS8 BIT;\r
-};\r
-union un_elselr00 {\r
-       unsigned char elselr00;\r
-       __BITS8 BIT;\r
-};\r
-union un_elselr01 {\r
-       unsigned char elselr01;\r
-       __BITS8 BIT;\r
-};\r
-union un_elselr02 {\r
-       unsigned char elselr02;\r
-       __BITS8 BIT;\r
-};\r
-union un_elselr03 {\r
-       unsigned char elselr03;\r
-       __BITS8 BIT;\r
-};\r
-union un_elselr04 {\r
-       unsigned char elselr04;\r
-       __BITS8 BIT;\r
-};\r
-union un_elselr05 {\r
-       unsigned char elselr05;\r
-       __BITS8 BIT;\r
-};\r
-union un_elselr06 {\r
-       unsigned char elselr06;\r
-       __BITS8 BIT;\r
-};\r
-union un_elselr07 {\r
-       unsigned char elselr07;\r
-       __BITS8 BIT;\r
-};\r
-union un_elselr08 {\r
-       unsigned char elselr08;\r
-       __BITS8 BIT;\r
-};\r
-union un_elselr09 {\r
-       unsigned char elselr09;\r
-       __BITS8 BIT;\r
-};\r
-union un_elselr10 {\r
-       unsigned char elselr10;\r
-       __BITS8 BIT;\r
-};\r
-union un_elselr11 {\r
-       unsigned char elselr11;\r
-       __BITS8 BIT;\r
-};\r
-union un_elselr12 {\r
-       unsigned char elselr12;\r
-       __BITS8 BIT;\r
-};\r
-union un_elselr13 {\r
-       unsigned char elselr13;\r
-       __BITS8 BIT;\r
-};\r
-union un_elselr14 {\r
-       unsigned char elselr14;\r
-       __BITS8 BIT;\r
-};\r
-union un_elselr15 {\r
-       unsigned char elselr15;\r
-       __BITS8 BIT;\r
-};\r
-union un_elselr16 {\r
-       unsigned char elselr16;\r
-       __BITS8 BIT;\r
-};\r
-union un_elselr17 {\r
-       unsigned char elselr17;\r
-       __BITS8 BIT;\r
-};\r
-union un_elselr18 {\r
-       unsigned char elselr18;\r
-       __BITS8 BIT;\r
-};\r
-union un_elselr19 {\r
-       unsigned char elselr19;\r
-       __BITS8 BIT;\r
-};\r
-union un_elselr20 {\r
-       unsigned char elselr20;\r
-       __BITS8 BIT;\r
-};\r
-union un_elselr21 {\r
-       unsigned char elselr21;\r
-       __BITS8 BIT;\r
-};\r
-union un_elselr22 {\r
-       unsigned char elselr22;\r
-       __BITS8 BIT;\r
-};\r
-union un_elselr23 {\r
-       unsigned char elselr23;\r
-       __BITS8 BIT;\r
-};\r
-union un_elselr24 {\r
-       unsigned char elselr24;\r
-       __BITS8 BIT;\r
-};\r
-union un_elselr25 {\r
-       unsigned char elselr25;\r
-       __BITS8 BIT;\r
-};\r
-union un_compmdr {\r
-       unsigned char compmdr;\r
-       __BITS8 BIT;\r
-};\r
-union un_compfir {\r
-       unsigned char compfir;\r
-       __BITS8 BIT;\r
-};\r
-union un_compocr {\r
-       unsigned char compocr;\r
-       __BITS8 BIT;\r
-};\r
-union un_comptcr {\r
-       unsigned char comptcr;\r
-       __BITS8 BIT;\r
-};\r
-\r
-#define ADM2 (*(volatile union un_adm2 *)0xF0010).adm2\r
-#define ADM2_bit (*(volatile union un_adm2 *)0xF0010).BIT\r
-#define ADUL (*(volatile unsigned char *)0xF0011)\r
-#define ADLL (*(volatile unsigned char *)0xF0012)\r
-#define ADTES (*(volatile unsigned char *)0xF0013)\r
-#define PU0 (*(volatile union un_pu0 *)0xF0030).pu0\r
-#define PU0_bit (*(volatile union un_pu0 *)0xF0030).BIT\r
-#define PU1 (*(volatile union un_pu1 *)0xF0031).pu1\r
-#define PU1_bit (*(volatile union un_pu1 *)0xF0031).BIT\r
-#define PU3 (*(volatile union un_pu3 *)0xF0033).pu3\r
-#define PU3_bit (*(volatile union un_pu3 *)0xF0033).BIT\r
-#define PU4 (*(volatile union un_pu4 *)0xF0034).pu4\r
-#define PU4_bit (*(volatile union un_pu4 *)0xF0034).BIT\r
-#define PU5 (*(volatile union un_pu5 *)0xF0035).pu5\r
-#define PU5_bit (*(volatile union un_pu5 *)0xF0035).BIT\r
-#define PU6 (*(volatile union un_pu6 *)0xF0036).pu6\r
-#define PU6_bit (*(volatile union un_pu6 *)0xF0036).BIT\r
-#define PU7 (*(volatile union un_pu7 *)0xF0037).pu7\r
-#define PU7_bit (*(volatile union un_pu7 *)0xF0037).BIT\r
-#define PU8 (*(volatile union un_pu8 *)0xF0038).pu8\r
-#define PU8_bit (*(volatile union un_pu8 *)0xF0038).BIT\r
-#define PU10 (*(volatile union un_pu10 *)0xF003A).pu10\r
-#define PU10_bit (*(volatile union un_pu10 *)0xF003A).BIT\r
-#define PU11 (*(volatile union un_pu11 *)0xF003B).pu11\r
-#define PU11_bit (*(volatile union un_pu11 *)0xF003B).BIT\r
-#define PU12 (*(volatile union un_pu12 *)0xF003C).pu12\r
-#define PU12_bit (*(volatile union un_pu12 *)0xF003C).BIT\r
-#define PU14 (*(volatile union un_pu14 *)0xF003E).pu14\r
-#define PU14_bit (*(volatile union un_pu14 *)0xF003E).BIT\r
-#define PIM0 (*(volatile union un_pim0 *)0xF0040).pim0\r
-#define PIM0_bit (*(volatile union un_pim0 *)0xF0040).BIT\r
-#define PIM1 (*(volatile union un_pim1 *)0xF0041).pim1\r
-#define PIM1_bit (*(volatile union un_pim1 *)0xF0041).BIT\r
-#define PIM3 (*(volatile union un_pim3 *)0xF0043).pim3\r
-#define PIM3_bit (*(volatile union un_pim3 *)0xF0043).BIT\r
-#define PIM4 (*(volatile union un_pim4 *)0xF0044).pim4\r
-#define PIM4_bit (*(volatile union un_pim4 *)0xF0044).BIT\r
-#define PIM5 (*(volatile union un_pim5 *)0xF0045).pim5\r
-#define PIM5_bit (*(volatile union un_pim5 *)0xF0045).BIT\r
-#define PIM8 (*(volatile union un_pim8 *)0xF0048).pim8\r
-#define PIM8_bit (*(volatile union un_pim8 *)0xF0048).BIT\r
-#define PIM14 (*(volatile union un_pim14 *)0xF004E).pim14\r
-#define PIM14_bit (*(volatile union un_pim14 *)0xF004E).BIT\r
-#define POM0 (*(volatile union un_pom0 *)0xF0050).pom0\r
-#define POM0_bit (*(volatile union un_pom0 *)0xF0050).BIT\r
-#define POM1 (*(volatile union un_pom1 *)0xF0051).pom1\r
-#define POM1_bit (*(volatile union un_pom1 *)0xF0051).BIT\r
-#define POM3 (*(volatile union un_pom3 *)0xF0053).pom3\r
-#define POM3_bit (*(volatile union un_pom3 *)0xF0053).BIT\r
-#define POM4 (*(volatile union un_pom4 *)0xF0054).pom4\r
-#define POM4_bit (*(volatile union un_pom4 *)0xF0054).BIT\r
-#define POM5 (*(volatile union un_pom5 *)0xF0055).pom5\r
-#define POM5_bit (*(volatile union un_pom5 *)0xF0055).BIT\r
-#define POM7 (*(volatile union un_pom7 *)0xF0057).pom7\r
-#define POM7_bit (*(volatile union un_pom7 *)0xF0057).BIT\r
-#define POM8 (*(volatile union un_pom8 *)0xF0058).pom8\r
-#define POM8_bit (*(volatile union un_pom8 *)0xF0058).BIT\r
-#define POM14 (*(volatile union un_pom14 *)0xF005E).pom14\r
-#define POM14_bit (*(volatile union un_pom14 *)0xF005E).BIT\r
-#define PMC0 (*(volatile union un_pmc0 *)0xF0060).pmc0\r
-#define PMC0_bit (*(volatile union un_pmc0 *)0xF0060).BIT\r
-#define PMC1 (*(volatile union un_pmc1 *)0xF0061).pmc1\r
-#define PMC1_bit (*(volatile union un_pmc1 *)0xF0061).BIT\r
-#define PMC10 (*(volatile union un_pmc10 *)0xF006A).pmc10\r
-#define PMC10_bit (*(volatile union un_pmc10 *)0xF006A).BIT\r
-#define PMC12 (*(volatile union un_pmc12 *)0xF006C).pmc12\r
-#define PMC12_bit (*(volatile union un_pmc12 *)0xF006C).BIT\r
-#define PMC14 (*(volatile union un_pmc14 *)0xF006E).pmc14\r
-#define PMC14_bit (*(volatile union un_pmc14 *)0xF006E).BIT\r
-#define NFEN0 (*(volatile union un_nfen0 *)0xF0070).nfen0\r
-#define NFEN0_bit (*(volatile union un_nfen0 *)0xF0070).BIT\r
-#define NFEN1 (*(volatile union un_nfen1 *)0xF0071).nfen1\r
-#define NFEN1_bit (*(volatile union un_nfen1 *)0xF0071).BIT\r
-#define NFEN2 (*(volatile union un_nfen2 *)0xF0072).nfen2\r
-#define NFEN2_bit (*(volatile union un_nfen2 *)0xF0072).BIT\r
-#define ISC (*(volatile union un_isc *)0xF0073).isc\r
-#define ISC_bit (*(volatile union un_isc *)0xF0073).BIT\r
-#define TIS0 (*(volatile unsigned char *)0xF0074)\r
-#define ADPC (*(volatile unsigned char *)0xF0076)\r
-#define PIOR0 (*(volatile unsigned char *)0xF0077)\r
-#define IAWCTL (*(volatile unsigned char *)0xF0078)\r
-#define PIOR1 (*(volatile unsigned char *)0xF0079)\r
-#define PER1 (*(volatile union un_per1 *)0xF007A).per1\r
-#define PER1_bit (*(volatile union un_per1 *)0xF007A).BIT\r
-#define PMS (*(volatile union un_pms *)0xF007B).pms\r
-#define PMS_bit (*(volatile union un_pms *)0xF007B).BIT\r
-#define GDIDIS (*(volatile union un_gdidis *)0xF007D).gdidis\r
-#define GDIDIS_bit (*(volatile union un_gdidis *)0xF007D).BIT\r
-#define PRDSEL (*(volatile unsigned short *)0xF007E)\r
-#define TOOLEN (*(volatile unsigned char *)0xF0080)\r
-#define BPAL0 (*(volatile unsigned char *)0xF0081)\r
-#define BPAH0 (*(volatile unsigned char *)0xF0082)\r
-#define BPAS0 (*(volatile unsigned char *)0xF0083)\r
-#define BACDVL0 (*(volatile unsigned char *)0xF0084)\r
-#define BACDVH0 (*(volatile unsigned char *)0xF0085)\r
-#define BACDML0 (*(volatile unsigned char *)0xF0086)\r
-#define BACDMH0 (*(volatile unsigned char *)0xF0087)\r
-#define MONMOD (*(volatile unsigned char *)0xF0088)\r
-#define BPAL1 (*(volatile unsigned char *)0xF0089)\r
-#define BPAH1 (*(volatile unsigned char *)0xF008A)\r
-#define BPAS1 (*(volatile unsigned char *)0xF008B)\r
-#define BACDVL1 (*(volatile unsigned char *)0xF008C)\r
-#define BACDVH1 (*(volatile unsigned char *)0xF008D)\r
-#define BACDML1 (*(volatile unsigned char *)0xF008E)\r
-#define BACDMH1 (*(volatile unsigned char *)0xF008F)\r
-#define DFLCTL (*(volatile union un_dflctl *)0xF0090).dflctl\r
-#define DFLCTL_bit (*(volatile union un_dflctl *)0xF0090).BIT\r
-#define HIOTRM (*(volatile unsigned char *)0xF00A0)\r
-#define BECTL (*(volatile union un_bectl *)0xF00A1).bectl\r
-#define BECTL_bit (*(volatile union un_bectl *)0xF00A1).BIT\r
-#define HOCODIV (*(volatile unsigned char *)0xF00A8)\r
-#define TEMPCAL0 (*(volatile unsigned char *)0xF00AC)\r
-#define TEMPCAL1 (*(volatile unsigned char *)0xF00AD)\r
-#define TEMPCAL2 (*(volatile unsigned char *)0xF00AE)\r
-#define TEMPCAL3 (*(volatile unsigned char *)0xF00AF)\r
-#define FLSEC (*(volatile unsigned short *)0xF00B0)\r
-#define FLFSWS (*(volatile unsigned short *)0xF00B2)\r
-#define FLFSWE (*(volatile unsigned short *)0xF00B4)\r
-#define FSSET (*(volatile unsigned char *)0xF00B6)\r
-#define FSSE (*(volatile union un_fsse *)0xF00B7).fsse\r
-#define FSSE_bit (*(volatile union un_fsse *)0xF00B7).BIT\r
-#define FLFADL (*(volatile unsigned short *)0xF00B8)\r
-#define FLFADH (*(volatile unsigned char *)0xF00BA)\r
-#define PFCMD (*(volatile unsigned char *)0xF00C0)\r
-#define PFS (*(volatile union un_pfs *)0xF00C1).pfs\r
-#define PFS_bit (*(volatile union un_pfs *)0xF00C1).BIT\r
-#define FLRL (*(volatile unsigned short *)0xF00C2)\r
-#define FLRH (*(volatile unsigned short *)0xF00C4)\r
-#define FLWE (*(volatile unsigned char *)0xF00C6)\r
-#define FLRE (*(volatile unsigned char *)0xF00C7)\r
-#define FLTMS (*(volatile unsigned short *)0xF00C8)\r
-#define DFLMC (*(volatile unsigned short *)0xF00CA)\r
-#define FLMCL (*(volatile unsigned short *)0xF00CC)\r
-#define FLMCH (*(volatile unsigned char *)0xF00CE)\r
-#define FSCTL (*(volatile unsigned char *)0xF00CF)\r
-#define ICEADR (*(volatile unsigned short *)0xF00D0)\r
-#define ICEDAT (*(volatile unsigned short *)0xF00D2)\r
-#define PER0 (*(volatile union un_per0 *)0xF00F0).per0\r
-#define PER0_bit (*(volatile union un_per0 *)0xF00F0).BIT\r
-#define OSMC (*(volatile unsigned char *)0xF00F3)\r
-#define RMC (*(volatile union un_rmc *)0xF00F4).rmc\r
-#define RMC_bit (*(volatile union un_rmc *)0xF00F4).BIT\r
-#define RPECTL (*(volatile union un_rpectl *)0xF00F5).rpectl\r
-#define RPECTL_bit (*(volatile union un_rpectl *)0xF00F5).BIT\r
-#define BCDADJ (*(volatile unsigned char *)0xF00FE)\r
-#define VECTCTRL (*(volatile unsigned char *)0xF00FF)\r
-#define SSR00 (*(volatile unsigned short *)0xF0100)\r
-#define SSR00L (*(volatile unsigned char *)0xF0100)\r
-#define SSR01 (*(volatile unsigned short *)0xF0102)\r
-#define SSR01L (*(volatile unsigned char *)0xF0102)\r
-#define SSR02 (*(volatile unsigned short *)0xF0104)\r
-#define SSR02L (*(volatile unsigned char *)0xF0104)\r
-#define SSR03 (*(volatile unsigned short *)0xF0106)\r
-#define SSR03L (*(volatile unsigned char *)0xF0106)\r
-#define SIR00 (*(volatile unsigned short *)0xF0108)\r
-#define SIR00L (*(volatile unsigned char *)0xF0108)\r
-#define SIR01 (*(volatile unsigned short *)0xF010A)\r
-#define SIR01L (*(volatile unsigned char *)0xF010A)\r
-#define SIR02 (*(volatile unsigned short *)0xF010C)\r
-#define SIR02L (*(volatile unsigned char *)0xF010C)\r
-#define SIR03 (*(volatile unsigned short *)0xF010E)\r
-#define SIR03L (*(volatile unsigned char *)0xF010E)\r
-#define SMR00 (*(volatile unsigned short *)0xF0110)\r
-#define SMR01 (*(volatile unsigned short *)0xF0112)\r
-#define SMR02 (*(volatile unsigned short *)0xF0114)\r
-#define SMR03 (*(volatile unsigned short *)0xF0116)\r
-#define SCR00 (*(volatile unsigned short *)0xF0118)\r
-#define SCR01 (*(volatile unsigned short *)0xF011A)\r
-#define SCR02 (*(volatile unsigned short *)0xF011C)\r
-#define SCR03 (*(volatile unsigned short *)0xF011E)\r
-#define SE0 (*(volatile unsigned short *)0xF0120)\r
-#define SE0L (*(volatile union un_se0l *)0xF0120).se0l\r
-#define SE0L_bit (*(volatile union un_se0l *)0xF0120).BIT\r
-#define SS0 (*(volatile unsigned short *)0xF0122)\r
-#define SS0L (*(volatile union un_ss0l *)0xF0122).ss0l\r
-#define SS0L_bit (*(volatile union un_ss0l *)0xF0122).BIT\r
-#define ST0 (*(volatile unsigned short *)0xF0124)\r
-#define ST0L (*(volatile union un_st0l *)0xF0124).st0l\r
-#define ST0L_bit (*(volatile union un_st0l *)0xF0124).BIT\r
-#define SPS0 (*(volatile unsigned short *)0xF0126)\r
-#define SPS0L (*(volatile unsigned char *)0xF0126)\r
-#define SO0 (*(volatile unsigned short *)0xF0128)\r
-#define SOE0 (*(volatile unsigned short *)0xF012A)\r
-#define SOE0L (*(volatile union un_soe0l *)0xF012A).soe0l\r
-#define SOE0L_bit (*(volatile union un_soe0l *)0xF012A).BIT\r
-#define EDR00 (*(volatile unsigned short *)0xF012C)\r
-#define EDR00L (*(volatile unsigned char *)0xF012C)\r
-#define EDR01 (*(volatile unsigned short *)0xF012E)\r
-#define EDR01L (*(volatile unsigned char *)0xF012E)\r
-#define EDR02 (*(volatile unsigned short *)0xF0130)\r
-#define EDR02L (*(volatile unsigned char *)0xF0130)\r
-#define EDR03 (*(volatile unsigned short *)0xF0132)\r
-#define EDR03L (*(volatile unsigned char *)0xF0132)\r
-#define SOL0 (*(volatile unsigned short *)0xF0134)\r
-#define SOL0L (*(volatile unsigned char *)0xF0134)\r
-#define SSC0 (*(volatile unsigned short *)0xF0138)\r
-#define SSC0L (*(volatile unsigned char *)0xF0138)\r
-#define SSR10 (*(volatile unsigned short *)0xF0140)\r
-#define SSR10L (*(volatile unsigned char *)0xF0140)\r
-#define SSR11 (*(volatile unsigned short *)0xF0142)\r
-#define SSR11L (*(volatile unsigned char *)0xF0142)\r
-#define SSR12 (*(volatile unsigned short *)0xF0144)\r
-#define SSR12L (*(volatile unsigned char *)0xF0144)\r
-#define SSR13 (*(volatile unsigned short *)0xF0146)\r
-#define SSR13L (*(volatile unsigned char *)0xF0146)\r
-#define SIR10 (*(volatile unsigned short *)0xF0148)\r
-#define SIR10L (*(volatile unsigned char *)0xF0148)\r
-#define SIR11 (*(volatile unsigned short *)0xF014A)\r
-#define SIR11L (*(volatile unsigned char *)0xF014A)\r
-#define SIR12 (*(volatile unsigned short *)0xF014C)\r
-#define SIR12L (*(volatile unsigned char *)0xF014C)\r
-#define SIR13 (*(volatile unsigned short *)0xF014E)\r
-#define SIR13L (*(volatile unsigned char *)0xF014E)\r
-#define SMR10 (*(volatile unsigned short *)0xF0150)\r
-#define SMR11 (*(volatile unsigned short *)0xF0152)\r
-#define SMR12 (*(volatile unsigned short *)0xF0154)\r
-#define SMR13 (*(volatile unsigned short *)0xF0156)\r
-#define SCR10 (*(volatile unsigned short *)0xF0158)\r
-#define SCR11 (*(volatile unsigned short *)0xF015A)\r
-#define SCR12 (*(volatile unsigned short *)0xF015C)\r
-#define SCR13 (*(volatile unsigned short *)0xF015E)\r
-#define SE1 (*(volatile unsigned short *)0xF0160)\r
-#define SE1L (*(volatile union un_se1l *)0xF0160).se1l\r
-#define SE1L_bit (*(volatile union un_se1l *)0xF0160).BIT\r
-#define SS1 (*(volatile unsigned short *)0xF0162)\r
-#define SS1L (*(volatile union un_ss1l *)0xF0162).ss1l\r
-#define SS1L_bit (*(volatile union un_ss1l *)0xF0162).BIT\r
-#define ST1 (*(volatile unsigned short *)0xF0164)\r
-#define ST1L (*(volatile union un_st1l *)0xF0164).st1l\r
-#define ST1L_bit (*(volatile union un_st1l *)0xF0164).BIT\r
-#define SPS1 (*(volatile unsigned short *)0xF0166)\r
-#define SPS1L (*(volatile unsigned char *)0xF0166)\r
-#define SO1 (*(volatile unsigned short *)0xF0168)\r
-#define SOE1 (*(volatile unsigned short *)0xF016A)\r
-#define SOE1L (*(volatile union un_soe1l *)0xF016A).soe1l\r
-#define SOE1L_bit (*(volatile union un_soe1l *)0xF016A).BIT\r
-#define EDR10 (*(volatile unsigned short *)0xF016C)\r
-#define EDR10L (*(volatile unsigned char *)0xF016C)\r
-#define EDR11 (*(volatile unsigned short *)0xF016E)\r
-#define EDR11L (*(volatile unsigned char *)0xF016E)\r
-#define EDR12 (*(volatile unsigned short *)0xF0170)\r
-#define EDR12L (*(volatile unsigned char *)0xF0170)\r
-#define EDR13 (*(volatile unsigned short *)0xF0172)\r
-#define EDR13L (*(volatile unsigned char *)0xF0172)\r
-#define SOL1 (*(volatile unsigned short *)0xF0174)\r
-#define SOL1L (*(volatile unsigned char *)0xF0174)\r
-#define SSC1 (*(volatile unsigned short *)0xF0178)\r
-#define SSC1L (*(volatile unsigned char *)0xF0178)\r
-#define TCR00 (*(volatile unsigned short *)0xF0180)\r
-#define TCR01 (*(volatile unsigned short *)0xF0182)\r
-#define TCR02 (*(volatile unsigned short *)0xF0184)\r
-#define TCR03 (*(volatile unsigned short *)0xF0186)\r
-#define TMR00 (*(volatile unsigned short *)0xF0190)\r
-#define TMR01 (*(volatile unsigned short *)0xF0192)\r
-#define TMR02 (*(volatile unsigned short *)0xF0194)\r
-#define TMR03 (*(volatile unsigned short *)0xF0196)\r
-#define TSR00 (*(volatile unsigned short *)0xF01A0)\r
-#define TSR00L (*(volatile unsigned char *)0xF01A0)\r
-#define TSR01 (*(volatile unsigned short *)0xF01A2)\r
-#define TSR01L (*(volatile unsigned char *)0xF01A2)\r
-#define TSR02 (*(volatile unsigned short *)0xF01A4)\r
-#define TSR02L (*(volatile unsigned char *)0xF01A4)\r
-#define TSR03 (*(volatile unsigned short *)0xF01A6)\r
-#define TSR03L (*(volatile unsigned char *)0xF01A6)\r
-#define TE0 (*(volatile unsigned short *)0xF01B0)\r
-#define TE0L (*(volatile union un_te0l *)0xF01B0).te0l\r
-#define TE0L_bit (*(volatile union un_te0l *)0xF01B0).BIT\r
-#define TS0 (*(volatile unsigned short *)0xF01B2)\r
-#define TS0L (*(volatile union un_ts0l *)0xF01B2).ts0l\r
-#define TS0L_bit (*(volatile union un_ts0l *)0xF01B2).BIT\r
-#define TT0 (*(volatile unsigned short *)0xF01B4)\r
-#define TT0L (*(volatile union un_tt0l *)0xF01B4).tt0l\r
-#define TT0L_bit (*(volatile union un_tt0l *)0xF01B4).BIT\r
-#define TPS0 (*(volatile unsigned short *)0xF01B6)\r
-#define TO0 (*(volatile unsigned short *)0xF01B8)\r
-#define TO0L (*(volatile unsigned char *)0xF01B8)\r
-#define TOE0 (*(volatile unsigned short *)0xF01BA)\r
-#define TOE0L (*(volatile union un_toe0l *)0xF01BA).toe0l\r
-#define TOE0L_bit (*(volatile union un_toe0l *)0xF01BA).BIT\r
-#define TOL0 (*(volatile unsigned short *)0xF01BC)\r
-#define TOL0L (*(volatile unsigned char *)0xF01BC)\r
-#define TOM0 (*(volatile unsigned short *)0xF01BE)\r
-#define TOM0L (*(volatile unsigned char *)0xF01BE)\r
-#define TCR10 (*(volatile unsigned short *)0xF01C0)\r
-#define TCR11 (*(volatile unsigned short *)0xF01C2)\r
-#define TCR12 (*(volatile unsigned short *)0xF01C4)\r
-#define TCR13 (*(volatile unsigned short *)0xF01C6)\r
-#define TMR10 (*(volatile unsigned short *)0xF01D0)\r
-#define TMR11 (*(volatile unsigned short *)0xF01D2)\r
-#define TMR12 (*(volatile unsigned short *)0xF01D4)\r
-#define TMR13 (*(volatile unsigned short *)0xF01D6)\r
-#define TSR10 (*(volatile unsigned short *)0xF01E0)\r
-#define TSR10L (*(volatile unsigned char *)0xF01E0)\r
-#define TSR11 (*(volatile unsigned short *)0xF01E2)\r
-#define TSR11L (*(volatile unsigned char *)0xF01E2)\r
-#define TSR12 (*(volatile unsigned short *)0xF01E4)\r
-#define TSR12L (*(volatile unsigned char *)0xF01E4)\r
-#define TSR13 (*(volatile unsigned short *)0xF01E6)\r
-#define TSR13L (*(volatile unsigned char *)0xF01E6)\r
-#define TE1 (*(volatile unsigned short *)0xF01F0)\r
-#define TE1L (*(volatile union un_te1l *)0xF01F0).te1l\r
-#define TE1L_bit (*(volatile union un_te1l *)0xF01F0).BIT\r
-#define TS1 (*(volatile unsigned short *)0xF01F2)\r
-#define TS1L (*(volatile union un_ts1l *)0xF01F2).ts1l\r
-#define TS1L_bit (*(volatile union un_ts1l *)0xF01F2).BIT\r
-#define TT1 (*(volatile unsigned short *)0xF01F4)\r
-#define TT1L (*(volatile union un_tt1l *)0xF01F4).tt1l\r
-#define TT1L_bit (*(volatile union un_tt1l *)0xF01F4).BIT\r
-#define TPS1 (*(volatile unsigned short *)0xF01F6)\r
-#define TO1 (*(volatile unsigned short *)0xF01F8)\r
-#define TO1L (*(volatile unsigned char *)0xF01F8)\r
-#define TOE1 (*(volatile unsigned short *)0xF01FA)\r
-#define TOE1L (*(volatile union un_toe1l *)0xF01FA).toe1l\r
-#define TOE1L_bit (*(volatile union un_toe1l *)0xF01FA).BIT\r
-#define TOL1 (*(volatile unsigned short *)0xF01FC)\r
-#define TOL1L (*(volatile unsigned char *)0xF01FC)\r
-#define TOM1 (*(volatile unsigned short *)0xF01FE)\r
-#define TOM1L (*(volatile unsigned char *)0xF01FE)\r
-#define IICCTL00 (*(volatile union un_iicctl00 *)0xF0230).iicctl00\r
-#define IICCTL00_bit (*(volatile union un_iicctl00 *)0xF0230).BIT\r
-#define IICCTL01 (*(volatile union un_iicctl01 *)0xF0231).iicctl01\r
-#define IICCTL01_bit (*(volatile union un_iicctl01 *)0xF0231).BIT\r
-#define IICWL0 (*(volatile unsigned char *)0xF0232)\r
-#define IICWH0 (*(volatile unsigned char *)0xF0233)\r
-#define SVA0 (*(volatile unsigned char *)0xF0234)\r
-#define IICSE0 (*(volatile unsigned char *)0xF0235)\r
-#define IICCTL10 (*(volatile union un_iicctl10 *)0xF0238).iicctl10\r
-#define IICCTL10_bit (*(volatile union un_iicctl10 *)0xF0238).BIT\r
-#define IICCTL11 (*(volatile union un_iicctl11 *)0xF0239).iicctl11\r
-#define IICCTL11_bit (*(volatile union un_iicctl11 *)0xF0239).BIT\r
-#define IICWL1 (*(volatile unsigned char *)0xF023A)\r
-#define IICWH1 (*(volatile unsigned char *)0xF023B)\r
-#define SVA1 (*(volatile unsigned char *)0xF023C)\r
-#define IICSE1 (*(volatile unsigned char *)0xF023D)\r
-#define TRJCR0 (*(volatile unsigned char *)0xF0240)\r
-#define TRJIOC0 (*(volatile union un_trjioc0 *)0xF0241).trjioc0\r
-#define TRJIOC0_bit (*(volatile union un_trjioc0 *)0xF0241).BIT\r
-#define TRJMR0 (*(volatile union un_trjmr0 *)0xF0242).trjmr0\r
-#define TRJMR0_bit (*(volatile union un_trjmr0 *)0xF0242).BIT\r
-#define TRJISR0 (*(volatile union un_trjisr0 *)0xF0243).trjisr0\r
-#define TRJISR0_bit (*(volatile union un_trjisr0 *)0xF0243).BIT\r
-#define TRGMR (*(volatile union un_trgmr *)0xF0250).trgmr\r
-#define TRGMR_bit (*(volatile union un_trgmr *)0xF0250).BIT\r
-#define TRGCNTC (*(volatile union un_trgcntc *)0xF0251).trgcntc\r
-#define TRGCNTC_bit (*(volatile union un_trgcntc *)0xF0251).BIT\r
-#define TRGCR (*(volatile union un_trgcr *)0xF0252).trgcr\r
-#define TRGCR_bit (*(volatile union un_trgcr *)0xF0252).BIT\r
-#define TRGIER (*(volatile union un_trgier *)0xF0253).trgier\r
-#define TRGIER_bit (*(volatile union un_trgier *)0xF0253).BIT\r
-#define TRGSR (*(volatile union un_trgsr *)0xF0254).trgsr\r
-#define TRGSR_bit (*(volatile union un_trgsr *)0xF0254).BIT\r
-#define TRGIOR (*(volatile union un_trgior *)0xF0255).trgior\r
-#define TRGIOR_bit (*(volatile union un_trgior *)0xF0255).BIT\r
-#define TRG (*(volatile unsigned short *)0xF0256)\r
-#define TRGGRA (*(volatile unsigned short *)0xF0258)\r
-#define TRGGRB (*(volatile unsigned short *)0xF025A)\r
-#define TRGGRCM (*(volatile unsigned short *)0xF025C)\r
-#define TRGGRDM (*(volatile unsigned short *)0xF025E)\r
-#define TRDELC (*(volatile union un_trdelc *)0xF0260).trdelc\r
-#define TRDELC_bit (*(volatile union un_trdelc *)0xF0260).BIT\r
-#define TRDSTR (*(volatile unsigned char *)0xF0263)\r
-#define TRDMR (*(volatile union un_trdmr *)0xF0264).trdmr\r
-#define TRDMR_bit (*(volatile union un_trdmr *)0xF0264).BIT\r
-#define TRDPMR (*(volatile union un_trdpmr *)0xF0265).trdpmr\r
-#define TRDPMR_bit (*(volatile union un_trdpmr *)0xF0265).BIT\r
-#define TRDFCR (*(volatile union un_trdfcr *)0xF0266).trdfcr\r
-#define TRDFCR_bit (*(volatile union un_trdfcr *)0xF0266).BIT\r
-#define TRDOER1 (*(volatile union un_trdoer1 *)0xF0267).trdoer1\r
-#define TRDOER1_bit (*(volatile union un_trdoer1 *)0xF0267).BIT\r
-#define TRDOER2 (*(volatile union un_trdoer2 *)0xF0268).trdoer2\r
-#define TRDOER2_bit (*(volatile union un_trdoer2 *)0xF0268).BIT\r
-#define TRDOCR (*(volatile union un_trdocr *)0xF0269).trdocr\r
-#define TRDOCR_bit (*(volatile union un_trdocr *)0xF0269).BIT\r
-#define TRDDF0 (*(volatile union un_trddf0 *)0xF026A).trddf0\r
-#define TRDDF0_bit (*(volatile union un_trddf0 *)0xF026A).BIT\r
-#define TRDDF1 (*(volatile union un_trddf1 *)0xF026B).trddf1\r
-#define TRDDF1_bit (*(volatile union un_trddf1 *)0xF026B).BIT\r
-#define TRDCR0 (*(volatile union un_trdcr0 *)0xF0270).trdcr0\r
-#define TRDCR0_bit (*(volatile union un_trdcr0 *)0xF0270).BIT\r
-#define TRDIORA0 (*(volatile union un_trdiora0 *)0xF0271).trdiora0\r
-#define TRDIORA0_bit (*(volatile union un_trdiora0 *)0xF0271).BIT\r
-#define TRDIORC0 (*(volatile union un_trdiorc0 *)0xF0272).trdiorc0\r
-#define TRDIORC0_bit (*(volatile union un_trdiorc0 *)0xF0272).BIT\r
-#define TRDSR0 (*(volatile union un_trdsr0 *)0xF0273).trdsr0\r
-#define TRDSR0_bit (*(volatile union un_trdsr0 *)0xF0273).BIT\r
-#define TRDIER0 (*(volatile union un_trdier0 *)0xF0274).trdier0\r
-#define TRDIER0_bit (*(volatile union un_trdier0 *)0xF0274).BIT\r
-#define TRDPOCR0 (*(volatile union un_trdpocr0 *)0xF0275).trdpocr0\r
-#define TRDPOCR0_bit (*(volatile union un_trdpocr0 *)0xF0275).BIT\r
-#define TRD0 (*(volatile unsigned short *)0xF0276)\r
-#define TRDGRA0 (*(volatile unsigned short *)0xF0278)\r
-#define TRDGRB0 (*(volatile unsigned short *)0xF027A)\r
-#define TRDGRC0M (*(volatile unsigned short *)0xF027C)\r
-#define TRDGRD0M (*(volatile unsigned short *)0xF027E)\r
-#define TRDCR1 (*(volatile union un_trdcr1 *)0xF0280).trdcr1\r
-#define TRDCR1_bit (*(volatile union un_trdcr1 *)0xF0280).BIT\r
-#define TRDIORA1 (*(volatile union un_trdiora1 *)0xF0281).trdiora1\r
-#define TRDIORA1_bit (*(volatile union un_trdiora1 *)0xF0281).BIT\r
-#define TRDIORC1 (*(volatile union un_trdiorc1 *)0xF0282).trdiorc1\r
-#define TRDIORC1_bit (*(volatile union un_trdiorc1 *)0xF0282).BIT\r
-#define TRDSR1 (*(volatile union un_trdsr1 *)0xF0283).trdsr1\r
-#define TRDSR1_bit (*(volatile union un_trdsr1 *)0xF0283).BIT\r
-#define TRDIER1 (*(volatile union un_trdier1 *)0xF0284).trdier1\r
-#define TRDIER1_bit (*(volatile union un_trdier1 *)0xF0284).BIT\r
-#define TRDPOCR1 (*(volatile union un_trdpocr1 *)0xF0285).trdpocr1\r
-#define TRDPOCR1_bit (*(volatile union un_trdpocr1 *)0xF0285).BIT\r
-#define TRD1 (*(volatile unsigned short *)0xF0286)\r
-#define TRDGRA1 (*(volatile unsigned short *)0xF0288)\r
-#define TRDGRB1 (*(volatile unsigned short *)0xF028A)\r
-#define TRDGRC1M (*(volatile unsigned short *)0xF028C)\r
-#define TRDGRD1M (*(volatile unsigned short *)0xF028E)\r
-#define DTCBAR (*(volatile unsigned char *)0xF02E0)\r
-#define DTCEN0 (*(volatile union un_dtcen0 *)0xF02E8).dtcen0\r
-#define DTCEN0_bit (*(volatile union un_dtcen0 *)0xF02E8).BIT\r
-#define DTCEN1 (*(volatile union un_dtcen1 *)0xF02E9).dtcen1\r
-#define DTCEN1_bit (*(volatile union un_dtcen1 *)0xF02E9).BIT\r
-#define DTCEN2 (*(volatile union un_dtcen2 *)0xF02EA).dtcen2\r
-#define DTCEN2_bit (*(volatile union un_dtcen2 *)0xF02EA).BIT\r
-#define DTCEN3 (*(volatile union un_dtcen3 *)0xF02EB).dtcen3\r
-#define DTCEN3_bit (*(volatile union un_dtcen3 *)0xF02EB).BIT\r
-#define DTCEN4 (*(volatile union un_dtcen4 *)0xF02EC).dtcen4\r
-#define DTCEN4_bit (*(volatile union un_dtcen4 *)0xF02EC).BIT\r
-#define CRC0CTL (*(volatile union un_crc0ctl *)0xF02F0).crc0ctl\r
-#define CRC0CTL_bit (*(volatile union un_crc0ctl *)0xF02F0).BIT\r
-#define PGCRCL (*(volatile unsigned short *)0xF02F2)\r
-#define CRCD (*(volatile unsigned short *)0xF02FA)\r
-#define ELSELR00 (*(volatile union un_elselr00 *)0xF0300).elselr00\r
-#define ELSELR00_bit (*(volatile union un_elselr00 *)0xF0300).BIT\r
-#define ELSELR01 (*(volatile union un_elselr01 *)0xF0301).elselr01\r
-#define ELSELR01_bit (*(volatile union un_elselr01 *)0xF0301).BIT\r
-#define ELSELR02 (*(volatile union un_elselr02 *)0xF0302).elselr02\r
-#define ELSELR02_bit (*(volatile union un_elselr02 *)0xF0302).BIT\r
-#define ELSELR03 (*(volatile union un_elselr03 *)0xF0303).elselr03\r
-#define ELSELR03_bit (*(volatile union un_elselr03 *)0xF0303).BIT\r
-#define ELSELR04 (*(volatile union un_elselr04 *)0xF0304).elselr04\r
-#define ELSELR04_bit (*(volatile union un_elselr04 *)0xF0304).BIT\r
-#define ELSELR05 (*(volatile union un_elselr05 *)0xF0305).elselr05\r
-#define ELSELR05_bit (*(volatile union un_elselr05 *)0xF0305).BIT\r
-#define ELSELR06 (*(volatile union un_elselr06 *)0xF0306).elselr06\r
-#define ELSELR06_bit (*(volatile union un_elselr06 *)0xF0306).BIT\r
-#define ELSELR07 (*(volatile union un_elselr07 *)0xF0307).elselr07\r
-#define ELSELR07_bit (*(volatile union un_elselr07 *)0xF0307).BIT\r
-#define ELSELR08 (*(volatile union un_elselr08 *)0xF0308).elselr08\r
-#define ELSELR08_bit (*(volatile union un_elselr08 *)0xF0308).BIT\r
-#define ELSELR09 (*(volatile union un_elselr09 *)0xF0309).elselr09\r
-#define ELSELR09_bit (*(volatile union un_elselr09 *)0xF0309).BIT\r
-#define ELSELR10 (*(volatile union un_elselr10 *)0xF030A).elselr10\r
-#define ELSELR10_bit (*(volatile union un_elselr10 *)0xF030A).BIT\r
-#define ELSELR11 (*(volatile union un_elselr11 *)0xF030B).elselr11\r
-#define ELSELR11_bit (*(volatile union un_elselr11 *)0xF030B).BIT\r
-#define ELSELR12 (*(volatile union un_elselr12 *)0xF030C).elselr12\r
-#define ELSELR12_bit (*(volatile union un_elselr12 *)0xF030C).BIT\r
-#define ELSELR13 (*(volatile union un_elselr13 *)0xF030D).elselr13\r
-#define ELSELR13_bit (*(volatile union un_elselr13 *)0xF030D).BIT\r
-#define ELSELR14 (*(volatile union un_elselr14 *)0xF030E).elselr14\r
-#define ELSELR14_bit (*(volatile union un_elselr14 *)0xF030E).BIT\r
-#define ELSELR15 (*(volatile union un_elselr15 *)0xF030F).elselr15\r
-#define ELSELR15_bit (*(volatile union un_elselr15 *)0xF030F).BIT\r
-#define ELSELR16 (*(volatile union un_elselr16 *)0xF0310).elselr16\r
-#define ELSELR16_bit (*(volatile union un_elselr16 *)0xF0310).BIT\r
-#define ELSELR17 (*(volatile union un_elselr17 *)0xF0311).elselr17\r
-#define ELSELR17_bit (*(volatile union un_elselr17 *)0xF0311).BIT\r
-#define ELSELR18 (*(volatile union un_elselr18 *)0xF0312).elselr18\r
-#define ELSELR18_bit (*(volatile union un_elselr18 *)0xF0312).BIT\r
-#define ELSELR19 (*(volatile union un_elselr19 *)0xF0313).elselr19\r
-#define ELSELR19_bit (*(volatile union un_elselr19 *)0xF0313).BIT\r
-#define ELSELR20 (*(volatile union un_elselr20 *)0xF0314).elselr20\r
-#define ELSELR20_bit (*(volatile union un_elselr20 *)0xF0314).BIT\r
-#define ELSELR21 (*(volatile union un_elselr21 *)0xF0315).elselr21\r
-#define ELSELR21_bit (*(volatile union un_elselr21 *)0xF0315).BIT\r
-#define ELSELR22 (*(volatile union un_elselr22 *)0xF0316).elselr22\r
-#define ELSELR22_bit (*(volatile union un_elselr22 *)0xF0316).BIT\r
-#define ELSELR23 (*(volatile union un_elselr23 *)0xF0317).elselr23\r
-#define ELSELR23_bit (*(volatile union un_elselr23 *)0xF0317).BIT\r
-#define ELSELR24 (*(volatile union un_elselr24 *)0xF0318).elselr24\r
-#define ELSELR24_bit (*(volatile union un_elselr24 *)0xF0318).BIT\r
-#define ELSELR25 (*(volatile union un_elselr25 *)0xF0319).elselr25\r
-#define ELSELR25_bit (*(volatile union un_elselr25 *)0xF0319).BIT\r
-#define COMPMDR (*(volatile union un_compmdr *)0xF0340).compmdr\r
-#define COMPMDR_bit (*(volatile union un_compmdr *)0xF0340).BIT\r
-#define COMPFIR (*(volatile union un_compfir *)0xF0341).compfir\r
-#define COMPFIR_bit (*(volatile union un_compfir *)0xF0341).BIT\r
-#define COMPOCR (*(volatile union un_compocr *)0xF0342).compocr\r
-#define COMPOCR_bit (*(volatile union un_compocr *)0xF0342).BIT\r
-#define COMPTCR (*(volatile union un_comptcr *)0xF0343).comptcr\r
-#define COMPTCR_bit (*(volatile union un_comptcr *)0xF0343).BIT\r
-#define TRJ0 (*(volatile unsigned short *)0xF0500)\r
-#define MONMOD1 (*(volatile unsigned char *)0xF0720)\r
-#define TRCMA (*(volatile unsigned char *)0xF0721)\r
-\r
-/*\r
- Sfr bits\r
- */\r
-#define ADTYP ADM2_bit.no0\r
-#define AWC ADM2_bit.no2\r
-#define ADRCK ADM2_bit.no3\r
-#define SSIE00 ISC_bit.no7\r
-#define TRJ0EN PER1_bit.no0\r
-#define DTCEN PER1_bit.no3\r
-#define TRD0EN PER1_bit.no4\r
-#define CMPEN PER1_bit.no5\r
-#define TRGEN PER1_bit.no6\r
-#define DACEN PER1_bit.no7\r
-#define DFLEN DFLCTL_bit.no0\r
-#define BRSAM BECTL_bit.no0\r
-#define ESQST FSSE_bit.no7\r
-#define TAU0EN PER0_bit.no0\r
-#define TAU1EN PER0_bit.no1\r
-#define SAU0EN PER0_bit.no2\r
-#define SAU1EN PER0_bit.no3\r
-#define IICA0EN PER0_bit.no4\r
-#define ADCEN PER0_bit.no5\r
-#define IICA1EN PER0_bit.no6\r
-#define RTCEN PER0_bit.no7\r
-#define PAENB RMC_bit.no0\r
-#define WDVOL RMC_bit.no7\r
-#define RPEF RPECTL_bit.no0\r
-#define RPERDIS RPECTL_bit.no7\r
-#define SPT0 IICCTL00_bit.no0\r
-#define STT0 IICCTL00_bit.no1\r
-#define ACKE0 IICCTL00_bit.no2\r
-#define WTIM0 IICCTL00_bit.no3\r
-#define SPIE0 IICCTL00_bit.no4\r
-#define WREL0 IICCTL00_bit.no5\r
-#define LREL0 IICCTL00_bit.no6\r
-#define IICE0 IICCTL00_bit.no7\r
-#define PRS0 IICCTL01_bit.no0\r
-#define DFC0 IICCTL01_bit.no2\r
-#define SMC0 IICCTL01_bit.no3\r
-#define DAD0 IICCTL01_bit.no4\r
-#define CLD0 IICCTL01_bit.no5\r
-#define WUP0 IICCTL01_bit.no7\r
-#define SPT1 IICCTL10_bit.no0\r
-#define STT1 IICCTL10_bit.no1\r
-#define ACKE1 IICCTL10_bit.no2\r
-#define WTIM1 IICCTL10_bit.no3\r
-#define SPIE1 IICCTL10_bit.no4\r
-#define WREL1 IICCTL10_bit.no5\r
-#define LREL1 IICCTL10_bit.no6\r
-#define IICE1 IICCTL10_bit.no7\r
-#define PRS1 IICCTL11_bit.no0\r
-#define DFC1 IICCTL11_bit.no2\r
-#define SMC1 IICCTL11_bit.no3\r
-#define DAD1 IICCTL11_bit.no4\r
-#define CLD1 IICCTL11_bit.no5\r
-#define WUP1 IICCTL11_bit.no7\r
-#define TRGPWM TRGMR_bit.no0\r
-#define TRGMDF TRGMR_bit.no1\r
-#define TRGDFA TRGMR_bit.no2\r
-#define TRGDFB TRGMR_bit.no3\r
-#define TRGDFCK0 TRGMR_bit.no4\r
-#define TRGDFCK1 TRGMR_bit.no5\r
-#define TRGELCICE TRGMR_bit.no6\r
-#define TRGSTART TRGMR_bit.no7\r
-#define TRGTCK0 TRGCR_bit.no0\r
-#define TRGTCK1 TRGCR_bit.no1\r
-#define TRGTCK2 TRGCR_bit.no2\r
-#define TRGCKEG0 TRGCR_bit.no3\r
-#define TRGCKEG1 TRGCR_bit.no4\r
-#define TRGCCLR0 TRGCR_bit.no5\r
-#define TRGCCLR1 TRGCR_bit.no6\r
-#define TRGIMIEA TRGIER_bit.no0\r
-#define TRGIMIEB TRGIER_bit.no1\r
-#define TRGUDIE TRGIER_bit.no2\r
-#define TRGOVIE TRGIER_bit.no3\r
-#define TRGIMFA TRGSR_bit.no0\r
-#define TRGIMFB TRGSR_bit.no1\r
-#define TRGUDF TRGSR_bit.no2\r
-#define TRGOVF TRGSR_bit.no3\r
-#define TRGDIRF TRGSR_bit.no4\r
-#define TRGIOA0 TRGIOR_bit.no0\r
-#define TRGIOA1 TRGIOR_bit.no1\r
-#define TRGIOA2 TRGIOR_bit.no2\r
-#define TRGBUFA TRGIOR_bit.no3\r
-#define TRGIOB0 TRGIOR_bit.no4\r
-#define TRGIOB1 TRGIOR_bit.no5\r
-#define TRGIOB2 TRGIOR_bit.no6\r
-#define TRGBUFB TRGIOR_bit.no7\r
-#define TRDSYNC TRDMR_bit.no0\r
-#define TRDBFC0 TRDMR_bit.no4\r
-#define TRDBFD0 TRDMR_bit.no5\r
-#define TRDBFC1 TRDMR_bit.no6\r
-#define TRDBFD1 TRDMR_bit.no7\r
-#define TRDPWMB0 TRDPMR_bit.no0\r
-#define TRDPWMC0 TRDPMR_bit.no1\r
-#define TRDPWMD0 TRDPMR_bit.no2\r
-#define TRDPWMB1 TRDPMR_bit.no4\r
-#define TRDPWMC1 TRDPMR_bit.no5\r
-#define TRDPWMD1 TRDPMR_bit.no6\r
-#define TRDSHUTS TRDOER2_bit.no0\r
-#define TRDPTO TRDOER2_bit.no7\r
-#define CRC0EN CRC0CTL_bit.no7\r
-#define C0ENB COMPMDR_bit.no0\r
-#define C0MON COMPMDR_bit.no3\r
-#define C1ENB COMPMDR_bit.no4\r
-#define C1MON COMPMDR_bit.no7\r
-#define C0IE COMPOCR_bit.no0\r
-#define C0OE COMPOCR_bit.no1\r
-#define C0OP COMPOCR_bit.no2\r
-#define C1IE COMPOCR_bit.no4\r
-#define C1OE COMPOCR_bit.no5\r
-#define C1OP COMPOCR_bit.no6\r
-#define SPDMD COMPOCR_bit.no7\r
-#define TSTMD COMPTCR_bit.no0\r
-#define TMDWE COMPTCR_bit.no7\r
-\r
-/*\r
- Interrupt vector addresses\r
- */\r
-#endif\r
diff --git a/FreeRTOS/Demo/RL78_E2Studio_GCC/src/iodefine/iodefine_RL78G1A.h b/FreeRTOS/Demo/RL78_E2Studio_GCC/src/iodefine/iodefine_RL78G1A.h
deleted file mode 100644 (file)
index 341081e..0000000
+++ /dev/null
@@ -1,1037 +0,0 @@
-/***********************************************************************/
-/*                                                                                                                    */
-/*      PROJECT NAME :  RL78G1A                                        */
-/*      FILE         :  iodefine.h                                     */
-/*      DESCRIPTION  :  Definition of I/O Registers                    */
-/*      CPU SERIES   :  RL78 - G1A                                     */
-/*      CPU TYPE     :  R5F10ELE                                       */
-/*                                                                                                                    */
-/*      This file is generated by e2studio.                        */
-/*                                                                                                                    */
-/***********************************************************************/                                                                       \r
-                                                                                   \r
-/************************************************************************/\r
-/* Header file generated from device file:                              */\r
-/*    DR5F10ELE.DVF                                                     */\r
-/*    Copyright(C) 2012 Renesas                                         */\r
-/*    File Version V1.00                                                */\r
-/*    Tool Version 1.9.7121                                             */\r
-/*    Date Generated 13/11/2012                                         */\r
-/************************************************************************/\r
-\r
-#ifndef __IOREG_BIT_STRUCTURES\r
-#define __IOREG_BIT_STRUCTURES\r
-typedef struct {\r
-       unsigned char no0 :1;\r
-       unsigned char no1 :1;\r
-       unsigned char no2 :1;\r
-       unsigned char no3 :1;\r
-       unsigned char no4 :1;\r
-       unsigned char no5 :1;\r
-       unsigned char no6 :1;\r
-       unsigned char no7 :1;\r
-} __BITS8;\r
-\r
-typedef struct {\r
-       unsigned short no0 :1;\r
-       unsigned short no1 :1;\r
-       unsigned short no2 :1;\r
-       unsigned short no3 :1;\r
-       unsigned short no4 :1;\r
-       unsigned short no5 :1;\r
-       unsigned short no6 :1;\r
-       unsigned short no7 :1;\r
-       unsigned short no8 :1;\r
-       unsigned short no9 :1;\r
-       unsigned short no10 :1;\r
-       unsigned short no11 :1;\r
-       unsigned short no12 :1;\r
-       unsigned short no13 :1;\r
-       unsigned short no14 :1;\r
-       unsigned short no15 :1;\r
-} __BITS16;\r
-\r
-#endif\r
-\r
-#ifndef IODEFINE_H\r
-#define IODEFINE_H\r
-\r
-/*\r
- IO Registers\r
- */\r
-union un_p0 {\r
-       unsigned char p0;\r
-       __BITS8 BIT;\r
-};\r
-union un_p1 {\r
-       unsigned char p1;\r
-       __BITS8 BIT;\r
-};\r
-union un_p2 {\r
-       unsigned char p2;\r
-       __BITS8 BIT;\r
-};\r
-union un_p3 {\r
-       unsigned char p3;\r
-       __BITS8 BIT;\r
-};\r
-union un_p4 {\r
-       unsigned char p4;\r
-       __BITS8 BIT;\r
-};\r
-union un_p5 {\r
-       unsigned char p5;\r
-       __BITS8 BIT;\r
-};\r
-union un_p6 {\r
-       unsigned char p6;\r
-       __BITS8 BIT;\r
-};\r
-union un_p7 {\r
-       unsigned char p7;\r
-       __BITS8 BIT;\r
-};\r
-union un_p12 {\r
-       unsigned char p12;\r
-       __BITS8 BIT;\r
-};\r
-union un_p13 {\r
-       unsigned char p13;\r
-       __BITS8 BIT;\r
-};\r
-union un_p14 {\r
-       unsigned char p14;\r
-       __BITS8 BIT;\r
-};\r
-union un_p15 {\r
-       unsigned char p15;\r
-       __BITS8 BIT;\r
-};\r
-union un_pm0 {\r
-       unsigned char pm0;\r
-       __BITS8 BIT;\r
-};\r
-union un_pm1 {\r
-       unsigned char pm1;\r
-       __BITS8 BIT;\r
-};\r
-union un_pm2 {\r
-       unsigned char pm2;\r
-       __BITS8 BIT;\r
-};\r
-union un_pm3 {\r
-       unsigned char pm3;\r
-       __BITS8 BIT;\r
-};\r
-union un_pm4 {\r
-       unsigned char pm4;\r
-       __BITS8 BIT;\r
-};\r
-union un_pm5 {\r
-       unsigned char pm5;\r
-       __BITS8 BIT;\r
-};\r
-union un_pm6 {\r
-       unsigned char pm6;\r
-       __BITS8 BIT;\r
-};\r
-union un_pm7 {\r
-       unsigned char pm7;\r
-       __BITS8 BIT;\r
-};\r
-union un_pm12 {\r
-       unsigned char pm12;\r
-       __BITS8 BIT;\r
-};\r
-union un_pm14 {\r
-       unsigned char pm14;\r
-       __BITS8 BIT;\r
-};\r
-union un_pm15 {\r
-       unsigned char pm15;\r
-       __BITS8 BIT;\r
-};\r
-union un_adm0 {\r
-       unsigned char adm0;\r
-       __BITS8 BIT;\r
-};\r
-union un_ads {\r
-       unsigned char ads;\r
-       __BITS8 BIT;\r
-};\r
-union un_adm1 {\r
-       unsigned char adm1;\r
-       __BITS8 BIT;\r
-};\r
-union un_krctl {\r
-       unsigned char krctl;\r
-       __BITS8 BIT;\r
-};\r
-union un_krf {\r
-       unsigned char krf;\r
-       __BITS8 BIT;\r
-};\r
-union un_krm1 {\r
-       unsigned char krm1;\r
-       __BITS8 BIT;\r
-};\r
-union un_krm0 {\r
-       unsigned char krm0;\r
-       __BITS8 BIT;\r
-};\r
-union un_egp0 {\r
-       unsigned char egp0;\r
-       __BITS8 BIT;\r
-};\r
-union un_egn0 {\r
-       unsigned char egn0;\r
-       __BITS8 BIT;\r
-};\r
-union un_egp1 {\r
-       unsigned char egp1;\r
-       __BITS8 BIT;\r
-};\r
-union un_egn1 {\r
-       unsigned char egn1;\r
-       __BITS8 BIT;\r
-};\r
-union un_iics0 {\r
-       unsigned char iics0;\r
-       __BITS8 BIT;\r
-};\r
-union un_iicf0 {\r
-       unsigned char iicf0;\r
-       __BITS8 BIT;\r
-};\r
-union un_flars {\r
-       unsigned char flars;\r
-       __BITS8 BIT;\r
-};\r
-union un_fssq {\r
-       unsigned char fssq;\r
-       __BITS8 BIT;\r
-};\r
-union un_flrst {\r
-       unsigned char flrst;\r
-       __BITS8 BIT;\r
-};\r
-union un_fsastl {\r
-       unsigned char fsastl;\r
-       __BITS8 BIT;\r
-};\r
-union un_fsasth {\r
-       unsigned char fsasth;\r
-       __BITS8 BIT;\r
-};\r
-union un_rtcc0 {\r
-       unsigned char rtcc0;\r
-       __BITS8 BIT;\r
-};\r
-union un_rtcc1 {\r
-       unsigned char rtcc1;\r
-       __BITS8 BIT;\r
-};\r
-union un_csc {\r
-       unsigned char csc;\r
-       __BITS8 BIT;\r
-};\r
-union un_ostc {\r
-       unsigned char ostc;\r
-       __BITS8 BIT;\r
-};\r
-union un_ckc {\r
-       unsigned char ckc;\r
-       __BITS8 BIT;\r
-};\r
-union un_cks0 {\r
-       unsigned char cks0;\r
-       __BITS8 BIT;\r
-};\r
-union un_cks1 {\r
-       unsigned char cks1;\r
-       __BITS8 BIT;\r
-};\r
-union un_lvim {\r
-       unsigned char lvim;\r
-       __BITS8 BIT;\r
-};\r
-union un_lvis {\r
-       unsigned char lvis;\r
-       __BITS8 BIT;\r
-};\r
-union un_monsta0 {\r
-       unsigned char monsta0;\r
-       __BITS8 BIT;\r
-};\r
-union un_asim {\r
-       unsigned char asim;\r
-       __BITS8 BIT;\r
-};\r
-union un_dmc0 {\r
-       unsigned char dmc0;\r
-       __BITS8 BIT;\r
-};\r
-union un_dmc1 {\r
-       unsigned char dmc1;\r
-       __BITS8 BIT;\r
-};\r
-union un_drc0 {\r
-       unsigned char drc0;\r
-       __BITS8 BIT;\r
-};\r
-union un_drc1 {\r
-       unsigned char drc1;\r
-       __BITS8 BIT;\r
-};\r
-union un_if2 {\r
-       unsigned short if2;\r
-       __BITS16 BIT;\r
-};\r
-union un_if2l {\r
-       unsigned char if2l;\r
-       __BITS8 BIT;\r
-};\r
-union un_if2h {\r
-       unsigned char if2h;\r
-       __BITS8 BIT;\r
-};\r
-union un_mk2 {\r
-       unsigned short mk2;\r
-       __BITS16 BIT;\r
-};\r
-union un_mk2l {\r
-       unsigned char mk2l;\r
-       __BITS8 BIT;\r
-};\r
-union un_mk2h {\r
-       unsigned char mk2h;\r
-       __BITS8 BIT;\r
-};\r
-union un_pr02 {\r
-       unsigned short pr02;\r
-       __BITS16 BIT;\r
-};\r
-union un_pr02l {\r
-       unsigned char pr02l;\r
-       __BITS8 BIT;\r
-};\r
-union un_pr02h {\r
-       unsigned char pr02h;\r
-       __BITS8 BIT;\r
-};\r
-union un_pr12 {\r
-       unsigned short pr12;\r
-       __BITS16 BIT;\r
-};\r
-union un_pr12l {\r
-       unsigned char pr12l;\r
-       __BITS8 BIT;\r
-};\r
-union un_pr12h {\r
-       unsigned char pr12h;\r
-       __BITS8 BIT;\r
-};\r
-union un_if0 {\r
-       unsigned short if0;\r
-       __BITS16 BIT;\r
-};\r
-union un_if0l {\r
-       unsigned char if0l;\r
-       __BITS8 BIT;\r
-};\r
-union un_if0h {\r
-       unsigned char if0h;\r
-       __BITS8 BIT;\r
-};\r
-union un_if1 {\r
-       unsigned short if1;\r
-       __BITS16 BIT;\r
-};\r
-union un_if1l {\r
-       unsigned char if1l;\r
-       __BITS8 BIT;\r
-};\r
-union un_if1h {\r
-       unsigned char if1h;\r
-       __BITS8 BIT;\r
-};\r
-union un_mk0 {\r
-       unsigned short mk0;\r
-       __BITS16 BIT;\r
-};\r
-union un_mk0l {\r
-       unsigned char mk0l;\r
-       __BITS8 BIT;\r
-};\r
-union un_mk0h {\r
-       unsigned char mk0h;\r
-       __BITS8 BIT;\r
-};\r
-union un_mk1 {\r
-       unsigned short mk1;\r
-       __BITS16 BIT;\r
-};\r
-union un_mk1l {\r
-       unsigned char mk1l;\r
-       __BITS8 BIT;\r
-};\r
-union un_mk1h {\r
-       unsigned char mk1h;\r
-       __BITS8 BIT;\r
-};\r
-union un_pr00 {\r
-       unsigned short pr00;\r
-       __BITS16 BIT;\r
-};\r
-union un_pr00l {\r
-       unsigned char pr00l;\r
-       __BITS8 BIT;\r
-};\r
-union un_pr00h {\r
-       unsigned char pr00h;\r
-       __BITS8 BIT;\r
-};\r
-union un_pr01 {\r
-       unsigned short pr01;\r
-       __BITS16 BIT;\r
-};\r
-union un_pr01l {\r
-       unsigned char pr01l;\r
-       __BITS8 BIT;\r
-};\r
-union un_pr01h {\r
-       unsigned char pr01h;\r
-       __BITS8 BIT;\r
-};\r
-union un_pr10 {\r
-       unsigned short pr10;\r
-       __BITS16 BIT;\r
-};\r
-union un_pr10l {\r
-       unsigned char pr10l;\r
-       __BITS8 BIT;\r
-};\r
-union un_pr10h {\r
-       unsigned char pr10h;\r
-       __BITS8 BIT;\r
-};\r
-union un_pr11 {\r
-       unsigned short pr11;\r
-       __BITS16 BIT;\r
-};\r
-union un_pr11l {\r
-       unsigned char pr11l;\r
-       __BITS8 BIT;\r
-};\r
-union un_pr11h {\r
-       unsigned char pr11h;\r
-       __BITS8 BIT;\r
-};\r
-union un_pmc {\r
-       unsigned char pmc;\r
-       __BITS8 BIT;\r
-};\r
-\r
-#define P0 (*(volatile union un_p0 *)0xFFF00).p0\r
-#define P0_bit (*(volatile union un_p0 *)0xFFF00).BIT\r
-#define P1 (*(volatile union un_p1 *)0xFFF01).p1\r
-#define P1_bit (*(volatile union un_p1 *)0xFFF01).BIT\r
-#define P2 (*(volatile union un_p2 *)0xFFF02).p2\r
-#define P2_bit (*(volatile union un_p2 *)0xFFF02).BIT\r
-#define P3 (*(volatile union un_p3 *)0xFFF03).p3\r
-#define P3_bit (*(volatile union un_p3 *)0xFFF03).BIT\r
-#define P4 (*(volatile union un_p4 *)0xFFF04).p4\r
-#define P4_bit (*(volatile union un_p4 *)0xFFF04).BIT\r
-#define P5 (*(volatile union un_p5 *)0xFFF05).p5\r
-#define P5_bit (*(volatile union un_p5 *)0xFFF05).BIT\r
-#define P6 (*(volatile union un_p6 *)0xFFF06).p6\r
-#define P6_bit (*(volatile union un_p6 *)0xFFF06).BIT\r
-#define P7 (*(volatile union un_p7 *)0xFFF07).p7\r
-#define P7_bit (*(volatile union un_p7 *)0xFFF07).BIT\r
-#define P12 (*(volatile union un_p12 *)0xFFF0C).p12\r
-#define P12_bit (*(volatile union un_p12 *)0xFFF0C).BIT\r
-#define P13 (*(volatile union un_p13 *)0xFFF0D).p13\r
-#define P13_bit (*(volatile union un_p13 *)0xFFF0D).BIT\r
-#define P14 (*(volatile union un_p14 *)0xFFF0E).p14\r
-#define P14_bit (*(volatile union un_p14 *)0xFFF0E).BIT\r
-#define P15 (*(volatile union un_p15 *)0xFFF0F).p15\r
-#define P15_bit (*(volatile union un_p15 *)0xFFF0F).BIT\r
-#define SDR00 (*(volatile unsigned short *)0xFFF10)\r
-#define SIO00 (*(volatile unsigned char *)0xFFF10)\r
-#define TXD0 (*(volatile unsigned char *)0xFFF10)\r
-#define SDR01 (*(volatile unsigned short *)0xFFF12)\r
-#define RXD0 (*(volatile unsigned char *)0xFFF12)\r
-#define SIO01 (*(volatile unsigned char *)0xFFF12)\r
-#define TDR00 (*(volatile unsigned short *)0xFFF18)\r
-#define TDR01 (*(volatile unsigned short *)0xFFF1A)\r
-#define TDR01L (*(volatile unsigned char *)0xFFF1A)\r
-#define TDR01H (*(volatile unsigned char *)0xFFF1B)\r
-#define ADCR (*(volatile unsigned short *)0xFFF1E)\r
-#define ADCRH (*(volatile unsigned char *)0xFFF1F)\r
-#define PM0 (*(volatile union un_pm0 *)0xFFF20).pm0\r
-#define PM0_bit (*(volatile union un_pm0 *)0xFFF20).BIT\r
-#define PM1 (*(volatile union un_pm1 *)0xFFF21).pm1\r
-#define PM1_bit (*(volatile union un_pm1 *)0xFFF21).BIT\r
-#define PM2 (*(volatile union un_pm2 *)0xFFF22).pm2\r
-#define PM2_bit (*(volatile union un_pm2 *)0xFFF22).BIT\r
-#define PM3 (*(volatile union un_pm3 *)0xFFF23).pm3\r
-#define PM3_bit (*(volatile union un_pm3 *)0xFFF23).BIT\r
-#define PM4 (*(volatile union un_pm4 *)0xFFF24).pm4\r
-#define PM4_bit (*(volatile union un_pm4 *)0xFFF24).BIT\r
-#define PM5 (*(volatile union un_pm5 *)0xFFF25).pm5\r
-#define PM5_bit (*(volatile union un_pm5 *)0xFFF25).BIT\r
-#define PM6 (*(volatile union un_pm6 *)0xFFF26).pm6\r
-#define PM6_bit (*(volatile union un_pm6 *)0xFFF26).BIT\r
-#define PM7 (*(volatile union un_pm7 *)0xFFF27).pm7\r
-#define PM7_bit (*(volatile union un_pm7 *)0xFFF27).BIT\r
-#define PM12 (*(volatile union un_pm12 *)0xFFF2C).pm12\r
-#define PM12_bit (*(volatile union un_pm12 *)0xFFF2C).BIT\r
-#define PM14 (*(volatile union un_pm14 *)0xFFF2E).pm14\r
-#define PM14_bit (*(volatile union un_pm14 *)0xFFF2E).BIT\r
-#define PM15 (*(volatile union un_pm15 *)0xFFF2F).pm15\r
-#define PM15_bit (*(volatile union un_pm15 *)0xFFF2F).BIT\r
-#define ADM0 (*(volatile union un_adm0 *)0xFFF30).adm0\r
-#define ADM0_bit (*(volatile union un_adm0 *)0xFFF30).BIT\r
-#define ADS (*(volatile union un_ads *)0xFFF31).ads\r
-#define ADS_bit (*(volatile union un_ads *)0xFFF31).BIT\r
-#define ADM1 (*(volatile union un_adm1 *)0xFFF32).adm1\r
-#define ADM1_bit (*(volatile union un_adm1 *)0xFFF32).BIT\r
-#define KRCTL (*(volatile union un_krctl *)0xFFF34).krctl\r
-#define KRCTL_bit (*(volatile union un_krctl *)0xFFF34).BIT\r
-#define KRF (*(volatile union un_krf *)0xFFF35).krf\r
-#define KRF_bit (*(volatile union un_krf *)0xFFF35).BIT\r
-#define KRM1 (*(volatile union un_krm1 *)0xFFF36).krm1\r
-#define KRM1_bit (*(volatile union un_krm1 *)0xFFF36).BIT\r
-#define KRM0 (*(volatile union un_krm0 *)0xFFF37).krm0\r
-#define KRM0_bit (*(volatile union un_krm0 *)0xFFF37).BIT\r
-#define EGP0 (*(volatile union un_egp0 *)0xFFF38).egp0\r
-#define EGP0_bit (*(volatile union un_egp0 *)0xFFF38).BIT\r
-#define EGN0 (*(volatile union un_egn0 *)0xFFF39).egn0\r
-#define EGN0_bit (*(volatile union un_egn0 *)0xFFF39).BIT\r
-#define EGP1 (*(volatile union un_egp1 *)0xFFF3A).egp1\r
-#define EGP1_bit (*(volatile union un_egp1 *)0xFFF3A).BIT\r
-#define EGN1 (*(volatile union un_egn1 *)0xFFF3B).egn1\r
-#define EGN1_bit (*(volatile union un_egn1 *)0xFFF3B).BIT\r
-#define SDR02 (*(volatile unsigned short *)0xFFF44)\r
-#define SIO10 (*(volatile unsigned char *)0xFFF44)\r
-#define TXD1 (*(volatile unsigned char *)0xFFF44)\r
-#define SDR03 (*(volatile unsigned short *)0xFFF46)\r
-#define RXD1 (*(volatile unsigned char *)0xFFF46)\r
-#define SIO11 (*(volatile unsigned char *)0xFFF46)\r
-#define SDR10 (*(volatile unsigned short *)0xFFF48)\r
-#define SIO20 (*(volatile unsigned char *)0xFFF48)\r
-#define TXD2 (*(volatile unsigned char *)0xFFF48)\r
-#define SDR11 (*(volatile unsigned short *)0xFFF4A)\r
-#define RXD2 (*(volatile unsigned char *)0xFFF4A)\r
-#define SIO21 (*(volatile unsigned char *)0xFFF4A)\r
-#define IICA0 (*(volatile unsigned char *)0xFFF50)\r
-#define IICS0 (*(volatile union un_iics0 *)0xFFF51).iics0\r
-#define IICS0_bit (*(volatile union un_iics0 *)0xFFF51).BIT\r
-#define IICF0 (*(volatile union un_iicf0 *)0xFFF52).iicf0\r
-#define IICF0_bit (*(volatile union un_iicf0 *)0xFFF52).BIT\r
-#define TDR02 (*(volatile unsigned short *)0xFFF64)\r
-#define TDR03 (*(volatile unsigned short *)0xFFF66)\r
-#define TDR03L (*(volatile unsigned char *)0xFFF66)\r
-#define TDR03H (*(volatile unsigned char *)0xFFF67)\r
-#define TDR04 (*(volatile unsigned short *)0xFFF68)\r
-#define TDR05 (*(volatile unsigned short *)0xFFF6A)\r
-#define TDR06 (*(volatile unsigned short *)0xFFF6C)\r
-#define TDR07 (*(volatile unsigned short *)0xFFF6E)\r
-#define FLPMC (*(volatile unsigned char *)0xFFF80)\r
-#define FLARS (*(volatile union un_flars *)0xFFF81).flars\r
-#define FLARS_bit (*(volatile union un_flars *)0xFFF81).BIT\r
-#define FLAPL (*(volatile unsigned short *)0xFFF82)\r
-#define FLAPH (*(volatile unsigned char *)0xFFF84)\r
-#define FSSQ (*(volatile union un_fssq *)0xFFF85).fssq\r
-#define FSSQ_bit (*(volatile union un_fssq *)0xFFF85).BIT\r
-#define FLSEDL (*(volatile unsigned short *)0xFFF86)\r
-#define FLSEDH (*(volatile unsigned char *)0xFFF88)\r
-#define FLRST (*(volatile union un_flrst *)0xFFF89).flrst\r
-#define FLRST_bit (*(volatile union un_flrst *)0xFFF89).BIT\r
-#define FSASTL (*(volatile union un_fsastl *)0xFFF8A).fsastl\r
-#define FSASTL_bit (*(volatile union un_fsastl *)0xFFF8A).BIT\r
-#define FSASTH (*(volatile union un_fsasth *)0xFFF8B).fsasth\r
-#define FSASTH_bit (*(volatile union un_fsasth *)0xFFF8B).BIT\r
-#define FLWL (*(volatile unsigned short *)0xFFF8C)\r
-#define FLWH (*(volatile unsigned short *)0xFFF8E)\r
-#define ITMC (*(volatile unsigned short *)0xFFF90)\r
-#define SEC (*(volatile unsigned char *)0xFFF92)\r
-#define MIN (*(volatile unsigned char *)0xFFF93)\r
-#define HOUR (*(volatile unsigned char *)0xFFF94)\r
-#define WEEK (*(volatile unsigned char *)0xFFF95)\r
-#define DAY (*(volatile unsigned char *)0xFFF96)\r
-#define MONTH (*(volatile unsigned char *)0xFFF97)\r
-#define YEAR (*(volatile unsigned char *)0xFFF98)\r
-#define SUBCUD (*(volatile unsigned char *)0xFFF99)\r
-#define ALARMWM (*(volatile unsigned char *)0xFFF9A)\r
-#define ALARMWH (*(volatile unsigned char *)0xFFF9B)\r
-#define ALARMWW (*(volatile unsigned char *)0xFFF9C)\r
-#define RTCC0 (*(volatile union un_rtcc0 *)0xFFF9D).rtcc0\r
-#define RTCC0_bit (*(volatile union un_rtcc0 *)0xFFF9D).BIT\r
-#define RTCC1 (*(volatile union un_rtcc1 *)0xFFF9E).rtcc1\r
-#define RTCC1_bit (*(volatile union un_rtcc1 *)0xFFF9E).BIT\r
-#define CMC (*(volatile unsigned char *)0xFFFA0)\r
-#define CSC (*(volatile union un_csc *)0xFFFA1).csc\r
-#define CSC_bit (*(volatile union un_csc *)0xFFFA1).BIT\r
-#define OSTC (*(volatile union un_ostc *)0xFFFA2).ostc\r
-#define OSTC_bit (*(volatile union un_ostc *)0xFFFA2).BIT\r
-#define OSTS (*(volatile unsigned char *)0xFFFA3)\r
-#define CKC (*(volatile union un_ckc *)0xFFFA4).ckc\r
-#define CKC_bit (*(volatile union un_ckc *)0xFFFA4).BIT\r
-#define CKS0 (*(volatile union un_cks0 *)0xFFFA5).cks0\r
-#define CKS0_bit (*(volatile union un_cks0 *)0xFFFA5).BIT\r
-#define CKS1 (*(volatile union un_cks1 *)0xFFFA6).cks1\r
-#define CKS1_bit (*(volatile union un_cks1 *)0xFFFA6).BIT\r
-#define RESF (*(volatile unsigned char *)0xFFFA8)\r
-#define LVIM (*(volatile union un_lvim *)0xFFFA9).lvim\r
-#define LVIM_bit (*(volatile union un_lvim *)0xFFFA9).BIT\r
-#define LVIS (*(volatile union un_lvis *)0xFFFAA).lvis\r
-#define LVIS_bit (*(volatile union un_lvis *)0xFFFAA).BIT\r
-#define WDTE (*(volatile unsigned char *)0xFFFAB)\r
-#define CRCIN (*(volatile unsigned char *)0xFFFAC)\r
-#define RXB (*(volatile unsigned char *)0xFFFAD)\r
-#define TXS (*(volatile unsigned char *)0xFFFAD)\r
-#define MONSTA0 (*(volatile union un_monsta0 *)0xFFFAE).monsta0\r
-#define MONSTA0_bit (*(volatile union un_monsta0 *)0xFFFAE).BIT\r
-#define ASIM (*(volatile union un_asim *)0xFFFAF).asim\r
-#define ASIM_bit (*(volatile union un_asim *)0xFFFAF).BIT\r
-#define DSA0 (*(volatile unsigned char *)0xFFFB0)\r
-#define DSA1 (*(volatile unsigned char *)0xFFFB1)\r
-#define DRA0 (*(volatile unsigned short *)0xFFFB2)\r
-#define DRA0L (*(volatile unsigned char *)0xFFFB2)\r
-#define DRA0H (*(volatile unsigned char *)0xFFFB3)\r
-#define DRA1 (*(volatile unsigned short *)0xFFFB4)\r
-#define DRA1L (*(volatile unsigned char *)0xFFFB4)\r
-#define DRA1H (*(volatile unsigned char *)0xFFFB5)\r
-#define DBC0 (*(volatile unsigned short *)0xFFFB6)\r
-#define DBC0L (*(volatile unsigned char *)0xFFFB6)\r
-#define DBC0H (*(volatile unsigned char *)0xFFFB7)\r
-#define DBC1 (*(volatile unsigned short *)0xFFFB8)\r
-#define DBC1L (*(volatile unsigned char *)0xFFFB8)\r
-#define DBC1H (*(volatile unsigned char *)0xFFFB9)\r
-#define DMC0 (*(volatile union un_dmc0 *)0xFFFBA).dmc0\r
-#define DMC0_bit (*(volatile union un_dmc0 *)0xFFFBA).BIT\r
-#define DMC1 (*(volatile union un_dmc1 *)0xFFFBB).dmc1\r
-#define DMC1_bit (*(volatile union un_dmc1 *)0xFFFBB).BIT\r
-#define DRC0 (*(volatile union un_drc0 *)0xFFFBC).drc0\r
-#define DRC0_bit (*(volatile union un_drc0 *)0xFFFBC).BIT\r
-#define DRC1 (*(volatile union un_drc1 *)0xFFFBD).drc1\r
-#define DRC1_bit (*(volatile union un_drc1 *)0xFFFBD).BIT\r
-#define IF2 (*(volatile union un_if2 *)0xFFFD0).if2\r
-#define IF2_bit (*(volatile union un_if2 *)0xFFFD0).BIT\r
-#define IF2L (*(volatile union un_if2l *)0xFFFD0).if2l\r
-#define IF2L_bit (*(volatile union un_if2l *)0xFFFD0).BIT\r
-#define IF2H (*(volatile union un_if2h *)0xFFFD1).if2h\r
-#define IF2H_bit (*(volatile union un_if2h *)0xFFFD1).BIT\r
-#define MK2 (*(volatile union un_mk2 *)0xFFFD4).mk2\r
-#define MK2_bit (*(volatile union un_mk2 *)0xFFFD4).BIT\r
-#define MK2L (*(volatile union un_mk2l *)0xFFFD4).mk2l\r
-#define MK2L_bit (*(volatile union un_mk2l *)0xFFFD4).BIT\r
-#define MK2H (*(volatile union un_mk2h *)0xFFFD5).mk2h\r
-#define MK2H_bit (*(volatile union un_mk2h *)0xFFFD5).BIT\r
-#define PR02 (*(volatile union un_pr02 *)0xFFFD8).pr02\r
-#define PR02_bit (*(volatile union un_pr02 *)0xFFFD8).BIT\r
-#define PR02L (*(volatile union un_pr02l *)0xFFFD8).pr02l\r
-#define PR02L_bit (*(volatile union un_pr02l *)0xFFFD8).BIT\r
-#define PR02H (*(volatile union un_pr02h *)0xFFFD9).pr02h\r
-#define PR02H_bit (*(volatile union un_pr02h *)0xFFFD9).BIT\r
-#define PR12 (*(volatile union un_pr12 *)0xFFFDC).pr12\r
-#define PR12_bit (*(volatile union un_pr12 *)0xFFFDC).BIT\r
-#define PR12L (*(volatile union un_pr12l *)0xFFFDC).pr12l\r
-#define PR12L_bit (*(volatile union un_pr12l *)0xFFFDC).BIT\r
-#define PR12H (*(volatile union un_pr12h *)0xFFFDD).pr12h\r
-#define PR12H_bit (*(volatile union un_pr12h *)0xFFFDD).BIT\r
-#define IF0 (*(volatile union un_if0 *)0xFFFE0).if0\r
-#define IF0_bit (*(volatile union un_if0 *)0xFFFE0).BIT\r
-#define IF0L (*(volatile union un_if0l *)0xFFFE0).if0l\r
-#define IF0L_bit (*(volatile union un_if0l *)0xFFFE0).BIT\r
-#define IF0H (*(volatile union un_if0h *)0xFFFE1).if0h\r
-#define IF0H_bit (*(volatile union un_if0h *)0xFFFE1).BIT\r
-#define IF1 (*(volatile union un_if1 *)0xFFFE2).if1\r
-#define IF1_bit (*(volatile union un_if1 *)0xFFFE2).BIT\r
-#define IF1L (*(volatile union un_if1l *)0xFFFE2).if1l\r
-#define IF1L_bit (*(volatile union un_if1l *)0xFFFE2).BIT\r
-#define IF1H (*(volatile union un_if1h *)0xFFFE3).if1h\r
-#define IF1H_bit (*(volatile union un_if1h *)0xFFFE3).BIT\r
-#define MK0 (*(volatile union un_mk0 *)0xFFFE4).mk0\r
-#define MK0_bit (*(volatile union un_mk0 *)0xFFFE4).BIT\r
-#define MK0L (*(volatile union un_mk0l *)0xFFFE4).mk0l\r
-#define MK0L_bit (*(volatile union un_mk0l *)0xFFFE4).BIT\r
-#define MK0H (*(volatile union un_mk0h *)0xFFFE5).mk0h\r
-#define MK0H_bit (*(volatile union un_mk0h *)0xFFFE5).BIT\r
-#define MK1 (*(volatile union un_mk1 *)0xFFFE6).mk1\r
-#define MK1_bit (*(volatile union un_mk1 *)0xFFFE6).BIT\r
-#define MK1L (*(volatile union un_mk1l *)0xFFFE6).mk1l\r
-#define MK1L_bit (*(volatile union un_mk1l *)0xFFFE6).BIT\r
-#define MK1H (*(volatile union un_mk1h *)0xFFFE7).mk1h\r
-#define MK1H_bit (*(volatile union un_mk1h *)0xFFFE7).BIT\r
-#define PR00 (*(volatile union un_pr00 *)0xFFFE8).pr00\r
-#define PR00_bit (*(volatile union un_pr00 *)0xFFFE8).BIT\r
-#define PR00L (*(volatile union un_pr00l *)0xFFFE8).pr00l\r
-#define PR00L_bit (*(volatile union un_pr00l *)0xFFFE8).BIT\r
-#define PR00H (*(volatile union un_pr00h *)0xFFFE9).pr00h\r
-#define PR00H_bit (*(volatile union un_pr00h *)0xFFFE9).BIT\r
-#define PR01 (*(volatile union un_pr01 *)0xFFFEA).pr01\r
-#define PR01_bit (*(volatile union un_pr01 *)0xFFFEA).BIT\r
-#define PR01L (*(volatile union un_pr01l *)0xFFFEA).pr01l\r
-#define PR01L_bit (*(volatile union un_pr01l *)0xFFFEA).BIT\r
-#define PR01H (*(volatile union un_pr01h *)0xFFFEB).pr01h\r
-#define PR01H_bit (*(volatile union un_pr01h *)0xFFFEB).BIT\r
-#define PR10 (*(volatile union un_pr10 *)0xFFFEC).pr10\r
-#define PR10_bit (*(volatile union un_pr10 *)0xFFFEC).BIT\r
-#define PR10L (*(volatile union un_pr10l *)0xFFFEC).pr10l\r
-#define PR10L_bit (*(volatile union un_pr10l *)0xFFFEC).BIT\r
-#define PR10H (*(volatile union un_pr10h *)0xFFFED).pr10h\r
-#define PR10H_bit (*(volatile union un_pr10h *)0xFFFED).BIT\r
-#define PR11 (*(volatile union un_pr11 *)0xFFFEE).pr11\r
-#define PR11_bit (*(volatile union un_pr11 *)0xFFFEE).BIT\r
-#define PR11L (*(volatile union un_pr11l *)0xFFFEE).pr11l\r
-#define PR11L_bit (*(volatile union un_pr11l *)0xFFFEE).BIT\r
-#define PR11H (*(volatile union un_pr11h *)0xFFFEF).pr11h\r
-#define PR11H_bit (*(volatile union un_pr11h *)0xFFFEF).BIT\r
-#define MDAL (*(volatile unsigned short *)0xFFFF0)\r
-#define MULA (*(volatile unsigned short *)0xFFFF0)\r
-#define MDAH (*(volatile unsigned short *)0xFFFF2)\r
-#define MULB (*(volatile unsigned short *)0xFFFF2)\r
-#define MDBH (*(volatile unsigned short *)0xFFFF4)\r
-#define MULOH (*(volatile unsigned short *)0xFFFF4)\r
-#define MDBL (*(volatile unsigned short *)0xFFFF6)\r
-#define MULOL (*(volatile unsigned short *)0xFFFF6)\r
-#define PMC (*(volatile union un_pmc *)0xFFFFE).pmc\r
-#define PMC_bit (*(volatile union un_pmc *)0xFFFFE).BIT\r
-\r
-/*\r
- Sfr bits\r
- */\r
-#define ADCE ADM0_bit.no0\r
-#define ADCS ADM0_bit.no7\r
-#define SPD0 IICS0_bit.no0\r
-#define STD0 IICS0_bit.no1\r
-#define ACKD0 IICS0_bit.no2\r
-#define TRC0 IICS0_bit.no3\r
-#define COI0 IICS0_bit.no4\r
-#define EXC0 IICS0_bit.no5\r
-#define ALD0 IICS0_bit.no6\r
-#define MSTS0 IICS0_bit.no7\r
-#define IICRSV0 IICF0_bit.no0\r
-#define STCEN0 IICF0_bit.no1\r
-#define IICBSY0 IICF0_bit.no6\r
-#define STCF0 IICF0_bit.no7\r
-#define FSSTP FSSQ_bit.no6\r
-#define SQST FSSQ_bit.no7\r
-#define SQEND FSASTH_bit.no6\r
-#define ESQEND FSASTH_bit.no7\r
-#define RCLOE1 RTCC0_bit.no5\r
-#define RTCE RTCC0_bit.no7\r
-#define RWAIT RTCC1_bit.no0\r
-#define RWST RTCC1_bit.no1\r
-#define RIFG RTCC1_bit.no3\r
-#define WAFG RTCC1_bit.no4\r
-#define WALIE RTCC1_bit.no6\r
-#define WALE RTCC1_bit.no7\r
-#define HIOSTOP CSC_bit.no0\r
-#define XTSTOP CSC_bit.no6\r
-#define MSTOP CSC_bit.no7\r
-#define SDIV CKC_bit.no3\r
-#define MCM0 CKC_bit.no4\r
-#define MCS CKC_bit.no5\r
-#define CSS CKC_bit.no6\r
-#define CLS CKC_bit.no7\r
-#define PCLOE0 CKS0_bit.no7\r
-#define PCLOE1 CKS1_bit.no7\r
-#define LVIF LVIM_bit.no0\r
-#define LVIOMSK LVIM_bit.no1\r
-#define LVISEN LVIM_bit.no7\r
-#define LVILV LVIS_bit.no0\r
-#define LVIMD LVIS_bit.no7\r
-#define DWAIT0 DMC0_bit.no4\r
-#define DS0 DMC0_bit.no5\r
-#define DRS0 DMC0_bit.no6\r
-#define STG0 DMC0_bit.no7\r
-#define DWAIT1 DMC1_bit.no4\r
-#define DS1 DMC1_bit.no5\r
-#define DRS1 DMC1_bit.no6\r
-#define STG1 DMC1_bit.no7\r
-#define DST0 DRC0_bit.no0\r
-#define DEN0 DRC0_bit.no7\r
-#define DST1 DRC1_bit.no0\r
-#define DEN1 DRC1_bit.no7\r
-#define TMIF05 IF2_bit.no0\r
-#define TMIF06 IF2_bit.no1\r
-#define TMIF07 IF2_bit.no2\r
-#define PIF6 IF2_bit.no3\r
-#define PIF7 IF2_bit.no4\r
-#define PIF8 IF2_bit.no5\r
-#define PIF9 IF2_bit.no6\r
-#define PIF10 IF2_bit.no7\r
-#define PIF11 IF2H_bit.no0\r
-#define MDIF IF2H_bit.no5\r
-#define FLIF IF2H_bit.no7\r
-#define TMMK05 MK2_bit.no0\r
-#define TMMK06 MK2_bit.no1\r
-#define TMMK07 MK2_bit.no2\r
-#define PMK6 MK2_bit.no3\r
-#define PMK7 MK2_bit.no4\r
-#define PMK8 MK2_bit.no5\r
-#define PMK9 MK2_bit.no6\r
-#define PMK10 MK2_bit.no7\r
-#define PMK11 MK2H_bit.no0\r
-#define MDMK MK2H_bit.no5\r
-#define FLMK MK2H_bit.no7\r
-#define TMPR005 PR02_bit.no0\r
-#define TMPR006 PR02_bit.no1\r
-#define TMPR007 PR02_bit.no2\r
-#define PPR06 PR02_bit.no3\r
-#define PPR07 PR02_bit.no4\r
-#define PPR08 PR02_bit.no5\r
-#define PPR09 PR02_bit.no6\r
-#define PPR010 PR02_bit.no7\r
-#define PPR011 PR02H_bit.no0\r
-#define MDPR0 PR02H_bit.no5\r
-#define FLPR0 PR02H_bit.no7\r
-#define TMPR105 PR12_bit.no0\r
-#define TMPR106 PR12_bit.no1\r
-#define TMPR107 PR12_bit.no2\r
-#define PPR16 PR12_bit.no3\r
-#define PPR17 PR12_bit.no4\r
-#define PPR18 PR12_bit.no5\r
-#define PPR19 PR12_bit.no6\r
-#define PPR110 PR12_bit.no7\r
-#define PPR111 PR12H_bit.no0\r
-#define MDPR1 PR12H_bit.no5\r
-#define FLPR1 PR12H_bit.no7\r
-#define WDTIIF IF0_bit.no0\r
-#define LVIIF IF0_bit.no1\r
-#define PIF0 IF0_bit.no2\r
-#define PIF1 IF0_bit.no3\r
-#define PIF2 IF0_bit.no4\r
-#define PIF3 IF0_bit.no5\r
-#define PIF4 IF0_bit.no6\r
-#define PIF5 IF0_bit.no7\r
-#define CSIIF20 IF0H_bit.no0\r
-#define IICIF20 IF0H_bit.no0\r
-#define STIF2 IF0H_bit.no0\r
-#define CSIIF21 IF0H_bit.no1\r
-#define IICIF21 IF0H_bit.no1\r
-#define SRIF2 IF0H_bit.no1\r
-#define SREIF2 IF0H_bit.no2\r
-#define DMAIF0 IF0H_bit.no3\r
-#define DMAIF1 IF0H_bit.no4\r
-#define CSIIF00 IF0H_bit.no5\r
-#define IICIF00 IF0H_bit.no5\r
-#define STIF0 IF0H_bit.no5\r
-#define CSIIF01 IF0H_bit.no6\r
-#define IICIF01 IF0H_bit.no6\r
-#define SRIF0 IF0H_bit.no6\r
-#define SREIF0 IF0H_bit.no7\r
-#define TMIF01H IF0H_bit.no7\r
-#define CSIIF10 IF1_bit.no0\r
-#define IICIF10 IF1_bit.no0\r
-#define STIF1 IF1_bit.no0\r
-#define CSIIF11 IF1_bit.no1\r
-#define IICIF11 IF1_bit.no1\r
-#define SRIF1 IF1_bit.no1\r
-#define SREIF1 IF1_bit.no2\r
-#define TMIF03H IF1_bit.no2\r
-#define IICAIF0 IF1_bit.no3\r
-#define TMIF00 IF1_bit.no4\r
-#define TMIF01 IF1_bit.no5\r
-#define TMIF02 IF1_bit.no6\r
-#define TMIF03 IF1_bit.no7\r
-#define ADIF IF1H_bit.no0\r
-#define RTCIF IF1H_bit.no1\r
-#define ITIF IF1H_bit.no2\r
-#define KRIF IF1H_bit.no3\r
-#define TMIF04 IF1H_bit.no7\r
-#define WDTIMK MK0_bit.no0\r
-#define LVIMK MK0_bit.no1\r
-#define PMK0 MK0_bit.no2\r
-#define PMK1 MK0_bit.no3\r
-#define PMK2 MK0_bit.no4\r
-#define PMK3 MK0_bit.no5\r
-#define PMK4 MK0_bit.no6\r
-#define PMK5 MK0_bit.no7\r
-#define CSIMK20 MK0H_bit.no0\r
-#define IICMK20 MK0H_bit.no0\r
-#define STMK2 MK0H_bit.no0\r
-#define CSIMK21 MK0H_bit.no1\r
-#define IICMK21 MK0H_bit.no1\r
-#define SRMK2 MK0H_bit.no1\r
-#define SREMK2 MK0H_bit.no2\r
-#define DMAMK0 MK0H_bit.no3\r
-#define DMAMK1 MK0H_bit.no4\r
-#define CSIMK00 MK0H_bit.no5\r
-#define IICMK00 MK0H_bit.no5\r
-#define STMK0 MK0H_bit.no5\r
-#define CSIMK01 MK0H_bit.no6\r
-#define IICMK01 MK0H_bit.no6\r
-#define SRMK0 MK0H_bit.no6\r
-#define SREMK0 MK0H_bit.no7\r
-#define TMMK01H MK0H_bit.no7\r
-#define CSIMK10 MK1_bit.no0\r
-#define IICMK10 MK1_bit.no0\r
-#define STMK1 MK1_bit.no0\r
-#define CSIMK11 MK1_bit.no1\r
-#define IICMK11 MK1_bit.no1\r
-#define SRMK1 MK1_bit.no1\r
-#define SREMK1 MK1_bit.no2\r
-#define TMMK03H MK1_bit.no2\r
-#define IICAMK0 MK1_bit.no3\r
-#define TMMK00 MK1_bit.no4\r
-#define TMMK01 MK1_bit.no5\r
-#define TMMK02 MK1_bit.no6\r
-#define TMMK03 MK1_bit.no7\r
-#define ADMK MK1H_bit.no0\r
-#define RTCMK MK1H_bit.no1\r
-#define ITMK MK1H_bit.no2\r
-#define KRMK MK1H_bit.no3\r
-#define TMMK04 MK1H_bit.no7\r
-#define WDTIPR0 PR00_bit.no0\r
-#define LVIPR0 PR00_bit.no1\r
-#define PPR00 PR00_bit.no2\r
-#define PPR01 PR00_bit.no3\r
-#define PPR02 PR00_bit.no4\r
-#define PPR03 PR00_bit.no5\r
-#define PPR04 PR00_bit.no6\r
-#define PPR05 PR00_bit.no7\r
-#define CSIPR020 PR00H_bit.no0\r
-#define IICPR020 PR00H_bit.no0\r
-#define STPR02 PR00H_bit.no0\r
-#define CSIPR021 PR00H_bit.no1\r
-#define IICPR021 PR00H_bit.no1\r
-#define SRPR02 PR00H_bit.no1\r
-#define SREPR02 PR00H_bit.no2\r
-#define DMAPR00 PR00H_bit.no3\r
-#define DMAPR01 PR00H_bit.no4\r
-#define CSIPR000 PR00H_bit.no5\r
-#define IICPR000 PR00H_bit.no5\r
-#define STPR00 PR00H_bit.no5\r
-#define CSIPR001 PR00H_bit.no6\r
-#define IICPR001 PR00H_bit.no6\r
-#define SRPR00 PR00H_bit.no6\r
-#define SREPR00 PR00H_bit.no7\r
-#define TMPR001H PR00H_bit.no7\r
-#define CSIPR010 PR01_bit.no0\r
-#define IICPR010 PR01_bit.no0\r
-#define STPR01 PR01_bit.no0\r
-#define CSIPR011 PR01_bit.no1\r
-#define IICPR011 PR01_bit.no1\r
-#define SRPR01 PR01_bit.no1\r
-#define SREPR01 PR01_bit.no2\r
-#define TMPR003H PR01_bit.no2\r
-#define IICAPR00 PR01_bit.no3\r
-#define TMPR000 PR01_bit.no4\r
-#define TMPR001 PR01_bit.no5\r
-#define TMPR002 PR01_bit.no6\r
-#define TMPR003 PR01_bit.no7\r
-#define ADPR0 PR01H_bit.no0\r
-#define RTCPR0 PR01H_bit.no1\r
-#define ITPR0 PR01H_bit.no2\r
-#define KRPR0 PR01H_bit.no3\r
-#define TMPR004 PR01H_bit.no7\r
-#define WDTIPR1 PR10_bit.no0\r
-#define LVIPR1 PR10_bit.no1\r
-#define PPR10 PR10_bit.no2\r
-#define PPR11 PR10_bit.no3\r
-#define PPR12 PR10_bit.no4\r
-#define PPR13 PR10_bit.no5\r
-#define PPR14 PR10_bit.no6\r
-#define PPR15 PR10_bit.no7\r
-#define CSIPR120 PR10H_bit.no0\r
-#define IICPR120 PR10H_bit.no0\r
-#define STPR12 PR10H_bit.no0\r
-#define CSIPR121 PR10H_bit.no1\r
-#define IICPR121 PR10H_bit.no1\r
-#define SRPR12 PR10H_bit.no1\r
-#define SREPR12 PR10H_bit.no2\r
-#define DMAPR10 PR10H_bit.no3\r
-#define DMAPR11 PR10H_bit.no4\r
-#define CSIPR100 PR10H_bit.no5\r
-#define IICPR100 PR10H_bit.no5\r
-#define STPR10 PR10H_bit.no5\r
-#define CSIPR101 PR10H_bit.no6\r
-#define IICPR101 PR10H_bit.no6\r
-#define SRPR10 PR10H_bit.no6\r
-#define SREPR10 PR10H_bit.no7\r
-#define TMPR101H PR10H_bit.no7\r
-#define CSIPR110 PR11_bit.no0\r
-#define IICPR110 PR11_bit.no0\r
-#define STPR11 PR11_bit.no0\r
-#define CSIPR111 PR11_bit.no1\r
-#define IICPR111 PR11_bit.no1\r
-#define SRPR11 PR11_bit.no1\r
-#define SREPR11 PR11_bit.no2\r
-#define TMPR103H PR11_bit.no2\r
-#define IICAPR10 PR11_bit.no3\r
-#define TMPR100 PR11_bit.no4\r
-#define TMPR101 PR11_bit.no5\r
-#define TMPR102 PR11_bit.no6\r
-#define TMPR103 PR11_bit.no7\r
-#define ADPR1 PR11H_bit.no0\r
-#define RTCPR1 PR11H_bit.no1\r
-#define ITPR1 PR11H_bit.no2\r
-#define KRPR1 PR11H_bit.no3\r
-#define TMPR104 PR11H_bit.no7\r
-#define MAA PMC_bit.no0\r
-\r
-/*\r
- Interrupt vector addresses\r
- */\r
-#define RST_vect (0x0)\r
-#define INTDBG_vect (0x2)\r
-#define INTWDTI_vect (0x4)\r
-#define INTLVI_vect (0x6)\r
-#define INTP0_vect (0x8)\r
-#define INTP1_vect (0xA)\r
-#define INTP2_vect (0xC)\r
-#define INTP3_vect (0xE)\r
-#define INTP4_vect (0x10)\r
-#define INTP5_vect (0x12)\r
-#define INTCSI20_vect (0x14)\r
-#define INTIIC20_vect (0x14)\r
-#define INTST2_vect (0x14)\r
-#define INTCSI21_vect (0x16)\r
-#define INTIIC21_vect (0x16)\r
-#define INTSR2_vect (0x16)\r
-#define INTSRE2_vect (0x18)\r
-#define INTDMA0_vect (0x1A)\r
-#define INTDMA1_vect (0x1C)\r
-#define INTCSI00_vect (0x1E)\r
-#define INTIIC00_vect (0x1E)\r
-#define INTST0_vect (0x1E)\r
-#define INTCSI01_vect (0x20)\r
-#define INTIIC01_vect (0x20)\r
-#define INTSR0_vect (0x20)\r
-#define INTSRE0_vect (0x22)\r
-#define INTTM01H_vect (0x22)\r
-#define INTCSI10_vect (0x24)\r
-#define INTIIC10_vect (0x24)\r
-#define INTST1_vect (0x24)\r
-#define INTCSI11_vect (0x26)\r
-#define INTIIC11_vect (0x26)\r
-#define INTSR1_vect (0x26)\r
-#define INTSRE1_vect (0x28)\r
-#define INTTM03H_vect (0x28)\r
-#define INTIICA0_vect (0x2A)\r
-#define INTTM00_vect (0x2C)\r
-#define INTTM01_vect (0x2E)\r
-#define INTTM02_vect (0x30)\r
-#define INTTM03_vect (0x32)\r
-#define INTAD_vect (0x34)\r
-#define INTRTC_vect (0x36)\r
-#define INTIT_vect (0x38)\r
-#define INTKR_vect (0x3A)\r
-#define INTTM04_vect (0x42)\r
-#define INTTM05_vect (0x44)\r
-#define INTTM06_vect (0x46)\r
-#define INTTM07_vect (0x48)\r
-#define INTP6_vect (0x4A)\r
-#define INTP7_vect (0x4C)\r
-#define INTP8_vect (0x4E)\r
-#define INTP9_vect (0x50)\r
-#define INTP10_vect (0x52)\r
-#define INTP11_vect (0x54)\r
-#define INTMD_vect (0x5E)\r
-#define INTFL_vect (0x62)\r
-#define BRK_I_vect (0x7E)\r
-#endif\r
diff --git a/FreeRTOS/Demo/RL78_E2Studio_GCC/src/iodefine/iodefine_RL78G1A_ext.h b/FreeRTOS/Demo/RL78_E2Studio_GCC/src/iodefine/iodefine_RL78G1A_ext.h
deleted file mode 100644 (file)
index 0048962..0000000
+++ /dev/null
@@ -1,571 +0,0 @@
-/***********************************************************************/
-/*                                                                                                                    */
-/*      PROJECT NAME :  RL78G1A                                        */
-/*      FILE         :  iodefine_ext.h                                 */
-/*      DESCRIPTION  :  Definition of Extended SFRs                    */
-/*      CPU SERIES   :  RL78 - G1A                                     */
-/*      CPU TYPE     :  R5F10ELE                                       */
-/*                                                                                                                    */
-/*      This file is generated by e2studio.                        */
-/*                                                                                                                    */
-/***********************************************************************/                                                                       \r
-                                                                                   \r
-/************************************************************************/\r
-/* Header file generated from device file:                              */\r
-/*    DR5F10ELE.DVF                                                     */\r
-/*    Copyright(C) 2012 Renesas                                         */\r
-/*    File Version V1.00                                                */\r
-/*    Tool Version 1.9.7121                                             */\r
-/*    Date Generated 13/11/2012                                         */\r
-/************************************************************************/\r
-\r
-#ifndef __IOREG_BIT_STRUCTURES\r
-#define __IOREG_BIT_STRUCTURES\r
-typedef struct {\r
-       unsigned char no0 :1;\r
-       unsigned char no1 :1;\r
-       unsigned char no2 :1;\r
-       unsigned char no3 :1;\r
-       unsigned char no4 :1;\r
-       unsigned char no5 :1;\r
-       unsigned char no6 :1;\r
-       unsigned char no7 :1;\r
-} __BITS8;\r
-\r
-typedef struct {\r
-       unsigned short no0 :1;\r
-       unsigned short no1 :1;\r
-       unsigned short no2 :1;\r
-       unsigned short no3 :1;\r
-       unsigned short no4 :1;\r
-       unsigned short no5 :1;\r
-       unsigned short no6 :1;\r
-       unsigned short no7 :1;\r
-       unsigned short no8 :1;\r
-       unsigned short no9 :1;\r
-       unsigned short no10 :1;\r
-       unsigned short no11 :1;\r
-       unsigned short no12 :1;\r
-       unsigned short no13 :1;\r
-       unsigned short no14 :1;\r
-       unsigned short no15 :1;\r
-} __BITS16;\r
-\r
-#endif\r
-\r
-#ifndef IODEFINE_EXT_H\r
-#define IODEFINE_EXT_H\r
-\r
-/*\r
- IO Registers\r
- */\r
-union un_adm2 {\r
-       unsigned char adm2;\r
-       __BITS8 BIT;\r
-};\r
-union un_pu0 {\r
-       unsigned char pu0;\r
-       __BITS8 BIT;\r
-};\r
-union un_pu1 {\r
-       unsigned char pu1;\r
-       __BITS8 BIT;\r
-};\r
-union un_pu3 {\r
-       unsigned char pu3;\r
-       __BITS8 BIT;\r
-};\r
-union un_pu4 {\r
-       unsigned char pu4;\r
-       __BITS8 BIT;\r
-};\r
-union un_pu5 {\r
-       unsigned char pu5;\r
-       __BITS8 BIT;\r
-};\r
-union un_pu7 {\r
-       unsigned char pu7;\r
-       __BITS8 BIT;\r
-};\r
-union un_pu12 {\r
-       unsigned char pu12;\r
-       __BITS8 BIT;\r
-};\r
-union un_pu14 {\r
-       unsigned char pu14;\r
-       __BITS8 BIT;\r
-};\r
-union un_pim0 {\r
-       unsigned char pim0;\r
-       __BITS8 BIT;\r
-};\r
-union un_pim1 {\r
-       unsigned char pim1;\r
-       __BITS8 BIT;\r
-};\r
-union un_pom0 {\r
-       unsigned char pom0;\r
-       __BITS8 BIT;\r
-};\r
-union un_pom1 {\r
-       unsigned char pom1;\r
-       __BITS8 BIT;\r
-};\r
-union un_pom5 {\r
-       unsigned char pom5;\r
-       __BITS8 BIT;\r
-};\r
-union un_pom7 {\r
-       unsigned char pom7;\r
-       __BITS8 BIT;\r
-};\r
-union un_pmc0 {\r
-       unsigned char pmc0;\r
-       __BITS8 BIT;\r
-};\r
-union un_pmc1 {\r
-       unsigned char pmc1;\r
-       __BITS8 BIT;\r
-};\r
-union un_pmc3 {\r
-       unsigned char pmc3;\r
-       __BITS8 BIT;\r
-};\r
-union un_pmc4 {\r
-       unsigned char pmc4;\r
-       __BITS8 BIT;\r
-};\r
-union un_pmc5 {\r
-       unsigned char pmc5;\r
-       __BITS8 BIT;\r
-};\r
-union un_pmc7 {\r
-       unsigned char pmc7;\r
-       __BITS8 BIT;\r
-};\r
-union un_pmc12 {\r
-       unsigned char pmc12;\r
-       __BITS8 BIT;\r
-};\r
-union un_nfen0 {\r
-       unsigned char nfen0;\r
-       __BITS8 BIT;\r
-};\r
-union un_nfen1 {\r
-       unsigned char nfen1;\r
-       __BITS8 BIT;\r
-};\r
-union un_isc {\r
-       unsigned char isc;\r
-       __BITS8 BIT;\r
-};\r
-union un_gaidis {\r
-       unsigned char gaidis;\r
-       __BITS8 BIT;\r
-};\r
-union un_gdidis {\r
-       unsigned char gdidis;\r
-       __BITS8 BIT;\r
-};\r
-union un_dflctl {\r
-       unsigned char dflctl;\r
-       __BITS8 BIT;\r
-};\r
-union un_bectl {\r
-       unsigned char bectl;\r
-       __BITS8 BIT;\r
-};\r
-union un_fsse {\r
-       unsigned char fsse;\r
-       __BITS8 BIT;\r
-};\r
-union un_pfs {\r
-       unsigned char pfs;\r
-       __BITS8 BIT;\r
-};\r
-union un_mduc {\r
-       unsigned char mduc;\r
-       __BITS8 BIT;\r
-};\r
-union un_per0 {\r
-       unsigned char per0;\r
-       __BITS8 BIT;\r
-};\r
-union un_rmc {\r
-       unsigned char rmc;\r
-       __BITS8 BIT;\r
-};\r
-union un_rpectl {\r
-       unsigned char rpectl;\r
-       __BITS8 BIT;\r
-};\r
-union un_se0l {\r
-       unsigned char se0l;\r
-       __BITS8 BIT;\r
-};\r
-union un_ss0l {\r
-       unsigned char ss0l;\r
-       __BITS8 BIT;\r
-};\r
-union un_st0l {\r
-       unsigned char st0l;\r
-       __BITS8 BIT;\r
-};\r
-union un_soe0l {\r
-       unsigned char soe0l;\r
-       __BITS8 BIT;\r
-};\r
-union un_se1l {\r
-       unsigned char se1l;\r
-       __BITS8 BIT;\r
-};\r
-union un_ss1l {\r
-       unsigned char ss1l;\r
-       __BITS8 BIT;\r
-};\r
-union un_st1l {\r
-       unsigned char st1l;\r
-       __BITS8 BIT;\r
-};\r
-union un_soe1l {\r
-       unsigned char soe1l;\r
-       __BITS8 BIT;\r
-};\r
-union un_te0l {\r
-       unsigned char te0l;\r
-       __BITS8 BIT;\r
-};\r
-union un_ts0l {\r
-       unsigned char ts0l;\r
-       __BITS8 BIT;\r
-};\r
-union un_tt0l {\r
-       unsigned char tt0l;\r
-       __BITS8 BIT;\r
-};\r
-union un_toe0l {\r
-       unsigned char toe0l;\r
-       __BITS8 BIT;\r
-};\r
-union un_iicctl00 {\r
-       unsigned char iicctl00;\r
-       __BITS8 BIT;\r
-};\r
-union un_iicctl01 {\r
-       unsigned char iicctl01;\r
-       __BITS8 BIT;\r
-};\r
-union un_crc0ctl {\r
-       unsigned char crc0ctl;\r
-       __BITS8 BIT;\r
-};\r
-\r
-#define ADM2 (*(volatile union un_adm2 *)0xF0010).adm2\r
-#define ADM2_bit (*(volatile union un_adm2 *)0xF0010).BIT\r
-#define ADUL (*(volatile unsigned char *)0xF0011)\r
-#define ADLL (*(volatile unsigned char *)0xF0012)\r
-#define ADTES (*(volatile unsigned char *)0xF0013)\r
-#define PU0 (*(volatile union un_pu0 *)0xF0030).pu0\r
-#define PU0_bit (*(volatile union un_pu0 *)0xF0030).BIT\r
-#define PU1 (*(volatile union un_pu1 *)0xF0031).pu1\r
-#define PU1_bit (*(volatile union un_pu1 *)0xF0031).BIT\r
-#define PU3 (*(volatile union un_pu3 *)0xF0033).pu3\r
-#define PU3_bit (*(volatile union un_pu3 *)0xF0033).BIT\r
-#define PU4 (*(volatile union un_pu4 *)0xF0034).pu4\r
-#define PU4_bit (*(volatile union un_pu4 *)0xF0034).BIT\r
-#define PU5 (*(volatile union un_pu5 *)0xF0035).pu5\r
-#define PU5_bit (*(volatile union un_pu5 *)0xF0035).BIT\r
-#define PU7 (*(volatile union un_pu7 *)0xF0037).pu7\r
-#define PU7_bit (*(volatile union un_pu7 *)0xF0037).BIT\r
-#define PU12 (*(volatile union un_pu12 *)0xF003C).pu12\r
-#define PU12_bit (*(volatile union un_pu12 *)0xF003C).BIT\r
-#define PU14 (*(volatile union un_pu14 *)0xF003E).pu14\r
-#define PU14_bit (*(volatile union un_pu14 *)0xF003E).BIT\r
-#define PIM0 (*(volatile union un_pim0 *)0xF0040).pim0\r
-#define PIM0_bit (*(volatile union un_pim0 *)0xF0040).BIT\r
-#define PIM1 (*(volatile union un_pim1 *)0xF0041).pim1\r
-#define PIM1_bit (*(volatile union un_pim1 *)0xF0041).BIT\r
-#define POM0 (*(volatile union un_pom0 *)0xF0050).pom0\r
-#define POM0_bit (*(volatile union un_pom0 *)0xF0050).BIT\r
-#define POM1 (*(volatile union un_pom1 *)0xF0051).pom1\r
-#define POM1_bit (*(volatile union un_pom1 *)0xF0051).BIT\r
-#define POM5 (*(volatile union un_pom5 *)0xF0055).pom5\r
-#define POM5_bit (*(volatile union un_pom5 *)0xF0055).BIT\r
-#define POM7 (*(volatile union un_pom7 *)0xF0057).pom7\r
-#define POM7_bit (*(volatile union un_pom7 *)0xF0057).BIT\r
-#define PMC0 (*(volatile union un_pmc0 *)0xF0060).pmc0\r
-#define PMC0_bit (*(volatile union un_pmc0 *)0xF0060).BIT\r
-#define PMC1 (*(volatile union un_pmc1 *)0xF0061).pmc1\r
-#define PMC1_bit (*(volatile union un_pmc1 *)0xF0061).BIT\r
-#define PMC3 (*(volatile union un_pmc3 *)0xF0063).pmc3\r
-#define PMC3_bit (*(volatile union un_pmc3 *)0xF0063).BIT\r
-#define PMC4 (*(volatile union un_pmc4 *)0xF0064).pmc4\r
-#define PMC4_bit (*(volatile union un_pmc4 *)0xF0064).BIT\r
-#define PMC5 (*(volatile union un_pmc5 *)0xF0065).pmc5\r
-#define PMC5_bit (*(volatile union un_pmc5 *)0xF0065).BIT\r
-#define PMC7 (*(volatile union un_pmc7 *)0xF0067).pmc7\r
-#define PMC7_bit (*(volatile union un_pmc7 *)0xF0067).BIT\r
-#define PMC12 (*(volatile union un_pmc12 *)0xF006C).pmc12\r
-#define PMC12_bit (*(volatile union un_pmc12 *)0xF006C).BIT\r
-#define NFEN0 (*(volatile union un_nfen0 *)0xF0070).nfen0\r
-#define NFEN0_bit (*(volatile union un_nfen0 *)0xF0070).BIT\r
-#define NFEN1 (*(volatile union un_nfen1 *)0xF0071).nfen1\r
-#define NFEN1_bit (*(volatile union un_nfen1 *)0xF0071).BIT\r
-#define ISC (*(volatile union un_isc *)0xF0073).isc\r
-#define ISC_bit (*(volatile union un_isc *)0xF0073).BIT\r
-#define TIS0 (*(volatile unsigned char *)0xF0074)\r
-#define ADPC (*(volatile unsigned char *)0xF0076)\r
-#define PIOR (*(volatile unsigned char *)0xF0077)\r
-#define IAWCTL (*(volatile unsigned char *)0xF0078)\r
-#define GAIDIS (*(volatile union un_gaidis *)0xF007C).gaidis\r
-#define GAIDIS_bit (*(volatile union un_gaidis *)0xF007C).BIT\r
-#define GDIDIS (*(volatile union un_gdidis *)0xF007D).gdidis\r
-#define GDIDIS_bit (*(volatile union un_gdidis *)0xF007D).BIT\r
-#define PRDSEL (*(volatile unsigned short *)0xF007E)\r
-#define TOOLEN (*(volatile unsigned char *)0xF0080)\r
-#define BPAL0 (*(volatile unsigned char *)0xF0081)\r
-#define BPAH0 (*(volatile unsigned char *)0xF0082)\r
-#define BPAS0 (*(volatile unsigned char *)0xF0083)\r
-#define BACDVL0 (*(volatile unsigned char *)0xF0084)\r
-#define BACDVH0 (*(volatile unsigned char *)0xF0085)\r
-#define BACDML0 (*(volatile unsigned char *)0xF0086)\r
-#define BACDMH0 (*(volatile unsigned char *)0xF0087)\r
-#define MONMOD (*(volatile unsigned char *)0xF0088)\r
-#define DFLCTL (*(volatile union un_dflctl *)0xF0090).dflctl\r
-#define DFLCTL_bit (*(volatile union un_dflctl *)0xF0090).BIT\r
-#define HIOTRM (*(volatile unsigned char *)0xF00A0)\r
-#define BECTL (*(volatile union un_bectl *)0xF00A1).bectl\r
-#define BECTL_bit (*(volatile union un_bectl *)0xF00A1).BIT\r
-#define HOCODIV (*(volatile unsigned char *)0xF00A8)\r
-#define TEMPCAL0 (*(volatile unsigned char *)0xF00AC)\r
-#define TEMPCAL1 (*(volatile unsigned char *)0xF00AD)\r
-#define TEMPCAL2 (*(volatile unsigned char *)0xF00AE)\r
-#define TEMPCAL3 (*(volatile unsigned char *)0xF00AF)\r
-#define FLSEC (*(volatile unsigned short *)0xF00B0)\r
-#define FLFSWS (*(volatile unsigned short *)0xF00B2)\r
-#define FLFSWE (*(volatile unsigned short *)0xF00B4)\r
-#define FSSET (*(volatile unsigned char *)0xF00B6)\r
-#define FSSE (*(volatile union un_fsse *)0xF00B7).fsse\r
-#define FSSE_bit (*(volatile union un_fsse *)0xF00B7).BIT\r
-#define FLFADL (*(volatile unsigned short *)0xF00B8)\r
-#define FLFADH (*(volatile unsigned char *)0xF00BA)\r
-#define PFCMD (*(volatile unsigned char *)0xF00C0)\r
-#define PFS (*(volatile union un_pfs *)0xF00C1).pfs\r
-#define PFS_bit (*(volatile union un_pfs *)0xF00C1).BIT\r
-#define FLRL (*(volatile unsigned short *)0xF00C2)\r
-#define FLRH (*(volatile unsigned short *)0xF00C4)\r
-#define FLWE (*(volatile unsigned char *)0xF00C6)\r
-#define FLRE (*(volatile unsigned char *)0xF00C7)\r
-#define FLTMS (*(volatile unsigned short *)0xF00C8)\r
-#define DFLMC (*(volatile unsigned short *)0xF00CA)\r
-#define FLMCL (*(volatile unsigned short *)0xF00CC)\r
-#define FLMCH (*(volatile unsigned char *)0xF00CE)\r
-#define FSCTL (*(volatile unsigned char *)0xF00CF)\r
-#define ICEADR (*(volatile unsigned short *)0xF00D0)\r
-#define ICEDAT (*(volatile unsigned short *)0xF00D2)\r
-#define MDCL (*(volatile unsigned short *)0xF00E0)\r
-#define MDCH (*(volatile unsigned short *)0xF00E2)\r
-#define MDUC (*(volatile union un_mduc *)0xF00E8).mduc\r
-#define MDUC_bit (*(volatile union un_mduc *)0xF00E8).BIT\r
-#define PER0 (*(volatile union un_per0 *)0xF00F0).per0\r
-#define PER0_bit (*(volatile union un_per0 *)0xF00F0).BIT\r
-#define OSMC (*(volatile unsigned char *)0xF00F3)\r
-#define RMC (*(volatile union un_rmc *)0xF00F4).rmc\r
-#define RMC_bit (*(volatile union un_rmc *)0xF00F4).BIT\r
-#define RPECTL (*(volatile union un_rpectl *)0xF00F5).rpectl\r
-#define RPECTL_bit (*(volatile union un_rpectl *)0xF00F5).BIT\r
-#define BCDADJ (*(volatile unsigned char *)0xF00FE)\r
-#define VECTCTRL (*(volatile unsigned char *)0xF00FF)\r
-#define SSR00 (*(volatile unsigned short *)0xF0100)\r
-#define SSR00L (*(volatile unsigned char *)0xF0100)\r
-#define SSR01 (*(volatile unsigned short *)0xF0102)\r
-#define SSR01L (*(volatile unsigned char *)0xF0102)\r
-#define SSR02 (*(volatile unsigned short *)0xF0104)\r
-#define SSR02L (*(volatile unsigned char *)0xF0104)\r
-#define SSR03 (*(volatile unsigned short *)0xF0106)\r
-#define SSR03L (*(volatile unsigned char *)0xF0106)\r
-#define SIR00 (*(volatile unsigned short *)0xF0108)\r
-#define SIR00L (*(volatile unsigned char *)0xF0108)\r
-#define SIR01 (*(volatile unsigned short *)0xF010A)\r
-#define SIR01L (*(volatile unsigned char *)0xF010A)\r
-#define SIR02 (*(volatile unsigned short *)0xF010C)\r
-#define SIR02L (*(volatile unsigned char *)0xF010C)\r
-#define SIR03 (*(volatile unsigned short *)0xF010E)\r
-#define SIR03L (*(volatile unsigned char *)0xF010E)\r
-#define SMR00 (*(volatile unsigned short *)0xF0110)\r
-#define SMR01 (*(volatile unsigned short *)0xF0112)\r
-#define SMR02 (*(volatile unsigned short *)0xF0114)\r
-#define SMR03 (*(volatile unsigned short *)0xF0116)\r
-#define SCR00 (*(volatile unsigned short *)0xF0118)\r
-#define SCR01 (*(volatile unsigned short *)0xF011A)\r
-#define SCR02 (*(volatile unsigned short *)0xF011C)\r
-#define SCR03 (*(volatile unsigned short *)0xF011E)\r
-#define SE0 (*(volatile unsigned short *)0xF0120)\r
-#define SE0L (*(volatile union un_se0l *)0xF0120).se0l\r
-#define SE0L_bit (*(volatile union un_se0l *)0xF0120).BIT\r
-#define SS0 (*(volatile unsigned short *)0xF0122)\r
-#define SS0L (*(volatile union un_ss0l *)0xF0122).ss0l\r
-#define SS0L_bit (*(volatile union un_ss0l *)0xF0122).BIT\r
-#define ST0 (*(volatile unsigned short *)0xF0124)\r
-#define ST0L (*(volatile union un_st0l *)0xF0124).st0l\r
-#define ST0L_bit (*(volatile union un_st0l *)0xF0124).BIT\r
-#define SPS0 (*(volatile unsigned short *)0xF0126)\r
-#define SPS0L (*(volatile unsigned char *)0xF0126)\r
-#define SO0 (*(volatile unsigned short *)0xF0128)\r
-#define SOE0 (*(volatile unsigned short *)0xF012A)\r
-#define SOE0L (*(volatile union un_soe0l *)0xF012A).soe0l\r
-#define SOE0L_bit (*(volatile union un_soe0l *)0xF012A).BIT\r
-#define EDR00 (*(volatile unsigned short *)0xF012C)\r
-#define EDR00L (*(volatile unsigned char *)0xF012C)\r
-#define EDR01 (*(volatile unsigned short *)0xF012E)\r
-#define EDR01L (*(volatile unsigned char *)0xF012E)\r
-#define EDR02 (*(volatile unsigned short *)0xF0130)\r
-#define EDR02L (*(volatile unsigned char *)0xF0130)\r
-#define EDR03 (*(volatile unsigned short *)0xF0132)\r
-#define EDR03L (*(volatile unsigned char *)0xF0132)\r
-#define SOL0 (*(volatile unsigned short *)0xF0134)\r
-#define SOL0L (*(volatile unsigned char *)0xF0134)\r
-#define SSC0 (*(volatile unsigned short *)0xF0138)\r
-#define SSC0L (*(volatile unsigned char *)0xF0138)\r
-#define SSR10 (*(volatile unsigned short *)0xF0140)\r
-#define SSR10L (*(volatile unsigned char *)0xF0140)\r
-#define SSR11 (*(volatile unsigned short *)0xF0142)\r
-#define SSR11L (*(volatile unsigned char *)0xF0142)\r
-#define SIR10 (*(volatile unsigned short *)0xF0148)\r
-#define SIR10L (*(volatile unsigned char *)0xF0148)\r
-#define SIR11 (*(volatile unsigned short *)0xF014A)\r
-#define SIR11L (*(volatile unsigned char *)0xF014A)\r
-#define SMR10 (*(volatile unsigned short *)0xF0150)\r
-#define SMR11 (*(volatile unsigned short *)0xF0152)\r
-#define SCR10 (*(volatile unsigned short *)0xF0158)\r
-#define SCR11 (*(volatile unsigned short *)0xF015A)\r
-#define SE1 (*(volatile unsigned short *)0xF0160)\r
-#define SE1L (*(volatile union un_se1l *)0xF0160).se1l\r
-#define SE1L_bit (*(volatile union un_se1l *)0xF0160).BIT\r
-#define SS1 (*(volatile unsigned short *)0xF0162)\r
-#define SS1L (*(volatile union un_ss1l *)0xF0162).ss1l\r
-#define SS1L_bit (*(volatile union un_ss1l *)0xF0162).BIT\r
-#define ST1 (*(volatile unsigned short *)0xF0164)\r
-#define ST1L (*(volatile union un_st1l *)0xF0164).st1l\r
-#define ST1L_bit (*(volatile union un_st1l *)0xF0164).BIT\r
-#define SPS1 (*(volatile unsigned short *)0xF0166)\r
-#define SPS1L (*(volatile unsigned char *)0xF0166)\r
-#define SO1 (*(volatile unsigned short *)0xF0168)\r
-#define SOE1 (*(volatile unsigned short *)0xF016A)\r
-#define SOE1L (*(volatile union un_soe1l *)0xF016A).soe1l\r
-#define SOE1L_bit (*(volatile union un_soe1l *)0xF016A).BIT\r
-#define EDR10 (*(volatile unsigned short *)0xF016C)\r
-#define EDR10L (*(volatile unsigned char *)0xF016C)\r
-#define EDR11 (*(volatile unsigned short *)0xF016E)\r
-#define EDR11L (*(volatile unsigned char *)0xF016E)\r
-#define SOL1 (*(volatile unsigned short *)0xF0174)\r
-#define SOL1L (*(volatile unsigned char *)0xF0174)\r
-#define TCR00 (*(volatile unsigned short *)0xF0180)\r
-#define TCR01 (*(volatile unsigned short *)0xF0182)\r
-#define TCR02 (*(volatile unsigned short *)0xF0184)\r
-#define TCR03 (*(volatile unsigned short *)0xF0186)\r
-#define TCR04 (*(volatile unsigned short *)0xF0188)\r
-#define TCR05 (*(volatile unsigned short *)0xF018A)\r
-#define TCR06 (*(volatile unsigned short *)0xF018C)\r
-#define TCR07 (*(volatile unsigned short *)0xF018E)\r
-#define TMR00 (*(volatile unsigned short *)0xF0190)\r
-#define TMR01 (*(volatile unsigned short *)0xF0192)\r
-#define TMR02 (*(volatile unsigned short *)0xF0194)\r
-#define TMR03 (*(volatile unsigned short *)0xF0196)\r
-#define TMR04 (*(volatile unsigned short *)0xF0198)\r
-#define TMR05 (*(volatile unsigned short *)0xF019A)\r
-#define TMR06 (*(volatile unsigned short *)0xF019C)\r
-#define TMR07 (*(volatile unsigned short *)0xF019E)\r
-#define TSR00 (*(volatile unsigned short *)0xF01A0)\r
-#define TSR00L (*(volatile unsigned char *)0xF01A0)\r
-#define TSR01 (*(volatile unsigned short *)0xF01A2)\r
-#define TSR01L (*(volatile unsigned char *)0xF01A2)\r
-#define TSR02 (*(volatile unsigned short *)0xF01A4)\r
-#define TSR02L (*(volatile unsigned char *)0xF01A4)\r
-#define TSR03 (*(volatile unsigned short *)0xF01A6)\r
-#define TSR03L (*(volatile unsigned char *)0xF01A6)\r
-#define TSR04 (*(volatile unsigned short *)0xF01A8)\r
-#define TSR04L (*(volatile unsigned char *)0xF01A8)\r
-#define TSR05 (*(volatile unsigned short *)0xF01AA)\r
-#define TSR05L (*(volatile unsigned char *)0xF01AA)\r
-#define TSR06 (*(volatile unsigned short *)0xF01AC)\r
-#define TSR06L (*(volatile unsigned char *)0xF01AC)\r
-#define TSR07 (*(volatile unsigned short *)0xF01AE)\r
-#define TSR07L (*(volatile unsigned char *)0xF01AE)\r
-#define TE0 (*(volatile unsigned short *)0xF01B0)\r
-#define TE0L (*(volatile union un_te0l *)0xF01B0).te0l\r
-#define TE0L_bit (*(volatile union un_te0l *)0xF01B0).BIT\r
-#define TS0 (*(volatile unsigned short *)0xF01B2)\r
-#define TS0L (*(volatile union un_ts0l *)0xF01B2).ts0l\r
-#define TS0L_bit (*(volatile union un_ts0l *)0xF01B2).BIT\r
-#define TT0 (*(volatile unsigned short *)0xF01B4)\r
-#define TT0L (*(volatile union un_tt0l *)0xF01B4).tt0l\r
-#define TT0L_bit (*(volatile union un_tt0l *)0xF01B4).BIT\r
-#define TPS0 (*(volatile unsigned short *)0xF01B6)\r
-#define TO0 (*(volatile unsigned short *)0xF01B8)\r
-#define TO0L (*(volatile unsigned char *)0xF01B8)\r
-#define TOE0 (*(volatile unsigned short *)0xF01BA)\r
-#define TOE0L (*(volatile union un_toe0l *)0xF01BA).toe0l\r
-#define TOE0L_bit (*(volatile union un_toe0l *)0xF01BA).BIT\r
-#define TOL0 (*(volatile unsigned short *)0xF01BC)\r
-#define TOL0L (*(volatile unsigned char *)0xF01BC)\r
-#define TOM0 (*(volatile unsigned short *)0xF01BE)\r
-#define TOM0L (*(volatile unsigned char *)0xF01BE)\r
-#define IICCTL00 (*(volatile union un_iicctl00 *)0xF0230).iicctl00\r
-#define IICCTL00_bit (*(volatile union un_iicctl00 *)0xF0230).BIT\r
-#define IICCTL01 (*(volatile union un_iicctl01 *)0xF0231).iicctl01\r
-#define IICCTL01_bit (*(volatile union un_iicctl01 *)0xF0231).BIT\r
-#define IICWL0 (*(volatile unsigned char *)0xF0232)\r
-#define IICWH0 (*(volatile unsigned char *)0xF0233)\r
-#define SVA0 (*(volatile unsigned char *)0xF0234)\r
-#define IICSE0 (*(volatile unsigned char *)0xF0235)\r
-#define CRC0CTL (*(volatile union un_crc0ctl *)0xF02F0).crc0ctl\r
-#define CRC0CTL_bit (*(volatile union un_crc0ctl *)0xF02F0).BIT\r
-#define PGCRCL (*(volatile unsigned short *)0xF02F2)\r
-#define CRCD (*(volatile unsigned short *)0xF02FA)\r
-\r
-/*\r
- Sfr bits\r
- */\r
-#define ADTYP ADM2_bit.no0\r
-#define AWC ADM2_bit.no2\r
-#define ADRCK ADM2_bit.no3\r
-#define DFLEN DFLCTL_bit.no0\r
-#define BRSAM BECTL_bit.no0\r
-#define ESQST FSSE_bit.no7\r
-#define DIVST MDUC_bit.no0\r
-#define MACSF MDUC_bit.no1\r
-#define MACOF MDUC_bit.no2\r
-#define MDSM MDUC_bit.no3\r
-#define MACMODE MDUC_bit.no6\r
-#define DIVMODE MDUC_bit.no7\r
-#define TAU0EN PER0_bit.no0\r
-#define SAU0EN PER0_bit.no2\r
-#define SAU1EN PER0_bit.no3\r
-#define IICA0EN PER0_bit.no4\r
-#define ADCEN PER0_bit.no5\r
-#define RTCEN PER0_bit.no7\r
-#define PAENB RMC_bit.no0\r
-#define WDVOL RMC_bit.no7\r
-#define RPEF RPECTL_bit.no0\r
-#define RPERDIS RPECTL_bit.no7\r
-#define SPT0 IICCTL00_bit.no0\r
-#define STT0 IICCTL00_bit.no1\r
-#define ACKE0 IICCTL00_bit.no2\r
-#define WTIM0 IICCTL00_bit.no3\r
-#define SPIE0 IICCTL00_bit.no4\r
-#define WREL0 IICCTL00_bit.no5\r
-#define LREL0 IICCTL00_bit.no6\r
-#define IICE0 IICCTL00_bit.no7\r
-#define PRS0 IICCTL01_bit.no0\r
-#define DFC0 IICCTL01_bit.no2\r
-#define SMC0 IICCTL01_bit.no3\r
-#define DAD0 IICCTL01_bit.no4\r
-#define CLD0 IICCTL01_bit.no5\r
-#define WUP0 IICCTL01_bit.no7\r
-#define CRC0EN CRC0CTL_bit.no7\r
-\r
-/*\r
- Interrupt vector addresses\r
- */\r
-#endif\r
diff --git a/FreeRTOS/Demo/RL78_E2Studio_GCC/src/iodefine/iodefine_RL78G1C.h b/FreeRTOS/Demo/RL78_E2Studio_GCC/src/iodefine/iodefine_RL78G1C.h
deleted file mode 100644 (file)
index dfd8685..0000000
+++ /dev/null
@@ -1,903 +0,0 @@
-/***********************************************************************/
-/*                                                                                                                    */
-/*      PROJECT NAME :  RL78G1C                                        */
-/*      FILE         :  iodefine.h                                     */
-/*      DESCRIPTION  :  Definition of I/O Registers                    */
-/*      CPU SERIES   :  RL78 - G1C                                     */
-/*      CPU TYPE     :  R5F10JGC                                       */
-/*                                                                                                                    */
-/*      This file is generated by e2studio.                        */
-/*                                                                                                                    */
-/***********************************************************************/                                                                       \r
-                                                                                   \r
-/************************************************************************/\r
-/* Header file generated from device file:                              */\r
-/*    DR5F10JGC.DVF                                                     */\r
-/*    Copyright(C) 2012 Renesas                                         */\r
-/*    File Version V1.00                                                */\r
-/*    Tool Version 1.9.7121                                             */\r
-/*    Date Generated 13/11/2012                                         */\r
-/************************************************************************/\r
-\r
-#ifndef __IOREG_BIT_STRUCTURES\r
-#define __IOREG_BIT_STRUCTURES\r
-typedef struct {\r
-       unsigned char no0 :1;\r
-       unsigned char no1 :1;\r
-       unsigned char no2 :1;\r
-       unsigned char no3 :1;\r
-       unsigned char no4 :1;\r
-       unsigned char no5 :1;\r
-       unsigned char no6 :1;\r
-       unsigned char no7 :1;\r
-} __BITS8;\r
-\r
-typedef struct {\r
-       unsigned short no0 :1;\r
-       unsigned short no1 :1;\r
-       unsigned short no2 :1;\r
-       unsigned short no3 :1;\r
-       unsigned short no4 :1;\r
-       unsigned short no5 :1;\r
-       unsigned short no6 :1;\r
-       unsigned short no7 :1;\r
-       unsigned short no8 :1;\r
-       unsigned short no9 :1;\r
-       unsigned short no10 :1;\r
-       unsigned short no11 :1;\r
-       unsigned short no12 :1;\r
-       unsigned short no13 :1;\r
-       unsigned short no14 :1;\r
-       unsigned short no15 :1;\r
-} __BITS16;\r
-\r
-#endif\r
-\r
-#ifndef IODEFINE_H\r
-#define IODEFINE_H\r
-\r
-/*\r
- IO Registers\r
- */\r
-union un_p0 {\r
-       unsigned char p0;\r
-       __BITS8 BIT;\r
-};\r
-union un_p1 {\r
-       unsigned char p1;\r
-       __BITS8 BIT;\r
-};\r
-union un_p2 {\r
-       unsigned char p2;\r
-       __BITS8 BIT;\r
-};\r
-union un_p3 {\r
-       unsigned char p3;\r
-       __BITS8 BIT;\r
-};\r
-union un_p4 {\r
-       unsigned char p4;\r
-       __BITS8 BIT;\r
-};\r
-union un_p5 {\r
-       unsigned char p5;\r
-       __BITS8 BIT;\r
-};\r
-union un_p6 {\r
-       unsigned char p6;\r
-       __BITS8 BIT;\r
-};\r
-union un_p7 {\r
-       unsigned char p7;\r
-       __BITS8 BIT;\r
-};\r
-union un_p12 {\r
-       unsigned char p12;\r
-       __BITS8 BIT;\r
-};\r
-union un_p13 {\r
-       unsigned char p13;\r
-       __BITS8 BIT;\r
-};\r
-union un_p14 {\r
-       unsigned char p14;\r
-       __BITS8 BIT;\r
-};\r
-union un_pm0 {\r
-       unsigned char pm0;\r
-       __BITS8 BIT;\r
-};\r
-union un_pm1 {\r
-       unsigned char pm1;\r
-       __BITS8 BIT;\r
-};\r
-union un_pm2 {\r
-       unsigned char pm2;\r
-       __BITS8 BIT;\r
-};\r
-union un_pm3 {\r
-       unsigned char pm3;\r
-       __BITS8 BIT;\r
-};\r
-union un_pm4 {\r
-       unsigned char pm4;\r
-       __BITS8 BIT;\r
-};\r
-union un_pm5 {\r
-       unsigned char pm5;\r
-       __BITS8 BIT;\r
-};\r
-union un_pm6 {\r
-       unsigned char pm6;\r
-       __BITS8 BIT;\r
-};\r
-union un_pm7 {\r
-       unsigned char pm7;\r
-       __BITS8 BIT;\r
-};\r
-union un_pm12 {\r
-       unsigned char pm12;\r
-       __BITS8 BIT;\r
-};\r
-union un_pm14 {\r
-       unsigned char pm14;\r
-       __BITS8 BIT;\r
-};\r
-union un_adm0 {\r
-       unsigned char adm0;\r
-       __BITS8 BIT;\r
-};\r
-union un_ads {\r
-       unsigned char ads;\r
-       __BITS8 BIT;\r
-};\r
-union un_adm1 {\r
-       unsigned char adm1;\r
-       __BITS8 BIT;\r
-};\r
-union un_krm {\r
-       unsigned char krm;\r
-       __BITS8 BIT;\r
-};\r
-union un_egp0 {\r
-       unsigned char egp0;\r
-       __BITS8 BIT;\r
-};\r
-union un_egn0 {\r
-       unsigned char egn0;\r
-       __BITS8 BIT;\r
-};\r
-union un_egp1 {\r
-       unsigned char egp1;\r
-       __BITS8 BIT;\r
-};\r
-union un_egn1 {\r
-       unsigned char egn1;\r
-       __BITS8 BIT;\r
-};\r
-union un_iics0 {\r
-       unsigned char iics0;\r
-       __BITS8 BIT;\r
-};\r
-union un_iicf0 {\r
-       unsigned char iicf0;\r
-       __BITS8 BIT;\r
-};\r
-union un_flars {\r
-       unsigned char flars;\r
-       __BITS8 BIT;\r
-};\r
-union un_fssq {\r
-       unsigned char fssq;\r
-       __BITS8 BIT;\r
-};\r
-union un_flrst {\r
-       unsigned char flrst;\r
-       __BITS8 BIT;\r
-};\r
-union un_fsastl {\r
-       unsigned char fsastl;\r
-       __BITS8 BIT;\r
-};\r
-union un_fsasth {\r
-       unsigned char fsasth;\r
-       __BITS8 BIT;\r
-};\r
-union un_rtcc0 {\r
-       unsigned char rtcc0;\r
-       __BITS8 BIT;\r
-};\r
-union un_rtcc1 {\r
-       unsigned char rtcc1;\r
-       __BITS8 BIT;\r
-};\r
-union un_csc {\r
-       unsigned char csc;\r
-       __BITS8 BIT;\r
-};\r
-union un_ostc {\r
-       unsigned char ostc;\r
-       __BITS8 BIT;\r
-};\r
-union un_ckc {\r
-       unsigned char ckc;\r
-       __BITS8 BIT;\r
-};\r
-union un_cks0 {\r
-       unsigned char cks0;\r
-       __BITS8 BIT;\r
-};\r
-union un_cks1 {\r
-       unsigned char cks1;\r
-       __BITS8 BIT;\r
-};\r
-union un_lvim {\r
-       unsigned char lvim;\r
-       __BITS8 BIT;\r
-};\r
-union un_lvis {\r
-       unsigned char lvis;\r
-       __BITS8 BIT;\r
-};\r
-union un_monsta0 {\r
-       unsigned char monsta0;\r
-       __BITS8 BIT;\r
-};\r
-union un_asim {\r
-       unsigned char asim;\r
-       __BITS8 BIT;\r
-};\r
-union un_dmc0 {\r
-       unsigned char dmc0;\r
-       __BITS8 BIT;\r
-};\r
-union un_dmc1 {\r
-       unsigned char dmc1;\r
-       __BITS8 BIT;\r
-};\r
-union un_drc0 {\r
-       unsigned char drc0;\r
-       __BITS8 BIT;\r
-};\r
-union un_drc1 {\r
-       unsigned char drc1;\r
-       __BITS8 BIT;\r
-};\r
-union un_if2 {\r
-       unsigned short if2;\r
-       __BITS16 BIT;\r
-};\r
-union un_if2l {\r
-       unsigned char if2l;\r
-       __BITS8 BIT;\r
-};\r
-union un_if2h {\r
-       unsigned char if2h;\r
-       __BITS8 BIT;\r
-};\r
-union un_mk2 {\r
-       unsigned short mk2;\r
-       __BITS16 BIT;\r
-};\r
-union un_mk2l {\r
-       unsigned char mk2l;\r
-       __BITS8 BIT;\r
-};\r
-union un_mk2h {\r
-       unsigned char mk2h;\r
-       __BITS8 BIT;\r
-};\r
-union un_pr02 {\r
-       unsigned short pr02;\r
-       __BITS16 BIT;\r
-};\r
-union un_pr02l {\r
-       unsigned char pr02l;\r
-       __BITS8 BIT;\r
-};\r
-union un_pr02h {\r
-       unsigned char pr02h;\r
-       __BITS8 BIT;\r
-};\r
-union un_pr12 {\r
-       unsigned short pr12;\r
-       __BITS16 BIT;\r
-};\r
-union un_pr12l {\r
-       unsigned char pr12l;\r
-       __BITS8 BIT;\r
-};\r
-union un_pr12h {\r
-       unsigned char pr12h;\r
-       __BITS8 BIT;\r
-};\r
-union un_if0 {\r
-       unsigned short if0;\r
-       __BITS16 BIT;\r
-};\r
-union un_if0l {\r
-       unsigned char if0l;\r
-       __BITS8 BIT;\r
-};\r
-union un_if0h {\r
-       unsigned char if0h;\r
-       __BITS8 BIT;\r
-};\r
-union un_if1 {\r
-       unsigned short if1;\r
-       __BITS16 BIT;\r
-};\r
-union un_if1l {\r
-       unsigned char if1l;\r
-       __BITS8 BIT;\r
-};\r
-union un_if1h {\r
-       unsigned char if1h;\r
-       __BITS8 BIT;\r
-};\r
-union un_mk0 {\r
-       unsigned short mk0;\r
-       __BITS16 BIT;\r
-};\r
-union un_mk0l {\r
-       unsigned char mk0l;\r
-       __BITS8 BIT;\r
-};\r
-union un_mk0h {\r
-       unsigned char mk0h;\r
-       __BITS8 BIT;\r
-};\r
-union un_mk1 {\r
-       unsigned short mk1;\r
-       __BITS16 BIT;\r
-};\r
-union un_mk1l {\r
-       unsigned char mk1l;\r
-       __BITS8 BIT;\r
-};\r
-union un_mk1h {\r
-       unsigned char mk1h;\r
-       __BITS8 BIT;\r
-};\r
-union un_pr00 {\r
-       unsigned short pr00;\r
-       __BITS16 BIT;\r
-};\r
-union un_pr00l {\r
-       unsigned char pr00l;\r
-       __BITS8 BIT;\r
-};\r
-union un_pr00h {\r
-       unsigned char pr00h;\r
-       __BITS8 BIT;\r
-};\r
-union un_pr01 {\r
-       unsigned short pr01;\r
-       __BITS16 BIT;\r
-};\r
-union un_pr01l {\r
-       unsigned char pr01l;\r
-       __BITS8 BIT;\r
-};\r
-union un_pr01h {\r
-       unsigned char pr01h;\r
-       __BITS8 BIT;\r
-};\r
-union un_pr10 {\r
-       unsigned short pr10;\r
-       __BITS16 BIT;\r
-};\r
-union un_pr10l {\r
-       unsigned char pr10l;\r
-       __BITS8 BIT;\r
-};\r
-union un_pr10h {\r
-       unsigned char pr10h;\r
-       __BITS8 BIT;\r
-};\r
-union un_pr11 {\r
-       unsigned short pr11;\r
-       __BITS16 BIT;\r
-};\r
-union un_pr11l {\r
-       unsigned char pr11l;\r
-       __BITS8 BIT;\r
-};\r
-union un_pr11h {\r
-       unsigned char pr11h;\r
-       __BITS8 BIT;\r
-};\r
-union un_pmc {\r
-       unsigned char pmc;\r
-       __BITS8 BIT;\r
-};\r
-\r
-#define P0 (*(volatile union un_p0 *)0xFFF00).p0\r
-#define P0_bit (*(volatile union un_p0 *)0xFFF00).BIT\r
-#define P1 (*(volatile union un_p1 *)0xFFF01).p1\r
-#define P1_bit (*(volatile union un_p1 *)0xFFF01).BIT\r
-#define P2 (*(volatile union un_p2 *)0xFFF02).p2\r
-#define P2_bit (*(volatile union un_p2 *)0xFFF02).BIT\r
-#define P3 (*(volatile union un_p3 *)0xFFF03).p3\r
-#define P3_bit (*(volatile union un_p3 *)0xFFF03).BIT\r
-#define P4 (*(volatile union un_p4 *)0xFFF04).p4\r
-#define P4_bit (*(volatile union un_p4 *)0xFFF04).BIT\r
-#define P5 (*(volatile union un_p5 *)0xFFF05).p5\r
-#define P5_bit (*(volatile union un_p5 *)0xFFF05).BIT\r
-#define P6 (*(volatile union un_p6 *)0xFFF06).p6\r
-#define P6_bit (*(volatile union un_p6 *)0xFFF06).BIT\r
-#define P7 (*(volatile union un_p7 *)0xFFF07).p7\r
-#define P7_bit (*(volatile union un_p7 *)0xFFF07).BIT\r
-#define P12 (*(volatile union un_p12 *)0xFFF0C).p12\r
-#define P12_bit (*(volatile union un_p12 *)0xFFF0C).BIT\r
-#define P13 (*(volatile union un_p13 *)0xFFF0D).p13\r
-#define P13_bit (*(volatile union un_p13 *)0xFFF0D).BIT\r
-#define P14 (*(volatile union un_p14 *)0xFFF0E).p14\r
-#define P14_bit (*(volatile union un_p14 *)0xFFF0E).BIT\r
-#define SDR00 (*(volatile unsigned short *)0xFFF10)\r
-#define SIO00 (*(volatile unsigned char *)0xFFF10)\r
-#define TXD0 (*(volatile unsigned char *)0xFFF10)\r
-#define SDR01 (*(volatile unsigned short *)0xFFF12)\r
-#define RXD0 (*(volatile unsigned char *)0xFFF12)\r
-#define SIO01 (*(volatile unsigned char *)0xFFF12)\r
-#define TDR00 (*(volatile unsigned short *)0xFFF18)\r
-#define TDR01 (*(volatile unsigned short *)0xFFF1A)\r
-#define TDR01L (*(volatile unsigned char *)0xFFF1A)\r
-#define TDR01H (*(volatile unsigned char *)0xFFF1B)\r
-#define ADCR (*(volatile unsigned short *)0xFFF1E)\r
-#define ADCRH (*(volatile unsigned char *)0xFFF1F)\r
-#define PM0 (*(volatile union un_pm0 *)0xFFF20).pm0\r
-#define PM0_bit (*(volatile union un_pm0 *)0xFFF20).BIT\r
-#define PM1 (*(volatile union un_pm1 *)0xFFF21).pm1\r
-#define PM1_bit (*(volatile union un_pm1 *)0xFFF21).BIT\r
-#define PM2 (*(volatile union un_pm2 *)0xFFF22).pm2\r
-#define PM2_bit (*(volatile union un_pm2 *)0xFFF22).BIT\r
-#define PM3 (*(volatile union un_pm3 *)0xFFF23).pm3\r
-#define PM3_bit (*(volatile union un_pm3 *)0xFFF23).BIT\r
-#define PM4 (*(volatile union un_pm4 *)0xFFF24).pm4\r
-#define PM4_bit (*(volatile union un_pm4 *)0xFFF24).BIT\r
-#define PM5 (*(volatile union un_pm5 *)0xFFF25).pm5\r
-#define PM5_bit (*(volatile union un_pm5 *)0xFFF25).BIT\r
-#define PM6 (*(volatile union un_pm6 *)0xFFF26).pm6\r
-#define PM6_bit (*(volatile union un_pm6 *)0xFFF26).BIT\r
-#define PM7 (*(volatile union un_pm7 *)0xFFF27).pm7\r
-#define PM7_bit (*(volatile union un_pm7 *)0xFFF27).BIT\r
-#define PM12 (*(volatile union un_pm12 *)0xFFF2C).pm12\r
-#define PM12_bit (*(volatile union un_pm12 *)0xFFF2C).BIT\r
-#define PM14 (*(volatile union un_pm14 *)0xFFF2E).pm14\r
-#define PM14_bit (*(volatile union un_pm14 *)0xFFF2E).BIT\r
-#define ADM0 (*(volatile union un_adm0 *)0xFFF30).adm0\r
-#define ADM0_bit (*(volatile union un_adm0 *)0xFFF30).BIT\r
-#define ADS (*(volatile union un_ads *)0xFFF31).ads\r
-#define ADS_bit (*(volatile union un_ads *)0xFFF31).BIT\r
-#define ADM1 (*(volatile union un_adm1 *)0xFFF32).adm1\r
-#define ADM1_bit (*(volatile union un_adm1 *)0xFFF32).BIT\r
-#define KRM (*(volatile union un_krm *)0xFFF37).krm\r
-#define KRM_bit (*(volatile union un_krm *)0xFFF37).BIT\r
-#define EGP0 (*(volatile union un_egp0 *)0xFFF38).egp0\r
-#define EGP0_bit (*(volatile union un_egp0 *)0xFFF38).BIT\r
-#define EGN0 (*(volatile union un_egn0 *)0xFFF39).egn0\r
-#define EGN0_bit (*(volatile union un_egn0 *)0xFFF39).BIT\r
-#define EGP1 (*(volatile union un_egp1 *)0xFFF3A).egp1\r
-#define EGP1_bit (*(volatile union un_egp1 *)0xFFF3A).BIT\r
-#define EGN1 (*(volatile union un_egn1 *)0xFFF3B).egn1\r
-#define EGN1_bit (*(volatile union un_egn1 *)0xFFF3B).BIT\r
-#define IICA0 (*(volatile unsigned char *)0xFFF50)\r
-#define IICS0 (*(volatile union un_iics0 *)0xFFF51).iics0\r
-#define IICS0_bit (*(volatile union un_iics0 *)0xFFF51).BIT\r
-#define IICF0 (*(volatile union un_iicf0 *)0xFFF52).iicf0\r
-#define IICF0_bit (*(volatile union un_iicf0 *)0xFFF52).BIT\r
-#define CFIFO (*(volatile unsigned short *)0xFFF54)\r
-#define CFIFOL (*(volatile unsigned char *)0xFFF54)\r
-#define D0FIFO (*(volatile unsigned short *)0xFFF58)\r
-#define D0FIFOL (*(volatile unsigned char *)0xFFF58)\r
-#define D1FIFO (*(volatile unsigned short *)0xFFF5C)\r
-#define D1FIFOL (*(volatile unsigned char *)0xFFF5C)\r
-#define TDR02 (*(volatile unsigned short *)0xFFF64)\r
-#define TDR03 (*(volatile unsigned short *)0xFFF66)\r
-#define TDR03L (*(volatile unsigned char *)0xFFF66)\r
-#define TDR03H (*(volatile unsigned char *)0xFFF67)\r
-#define FLPMC (*(volatile unsigned char *)0xFFF80)\r
-#define FLARS (*(volatile union un_flars *)0xFFF81).flars\r
-#define FLARS_bit (*(volatile union un_flars *)0xFFF81).BIT\r
-#define FLAPL (*(volatile unsigned short *)0xFFF82)\r
-#define FLAPH (*(volatile unsigned char *)0xFFF84)\r
-#define FSSQ (*(volatile union un_fssq *)0xFFF85).fssq\r
-#define FSSQ_bit (*(volatile union un_fssq *)0xFFF85).BIT\r
-#define FLSEDL (*(volatile unsigned short *)0xFFF86)\r
-#define FLSEDH (*(volatile unsigned char *)0xFFF88)\r
-#define FLRST (*(volatile union un_flrst *)0xFFF89).flrst\r
-#define FLRST_bit (*(volatile union un_flrst *)0xFFF89).BIT\r
-#define FSASTL (*(volatile union un_fsastl *)0xFFF8A).fsastl\r
-#define FSASTL_bit (*(volatile union un_fsastl *)0xFFF8A).BIT\r
-#define FSASTH (*(volatile union un_fsasth *)0xFFF8B).fsasth\r
-#define FSASTH_bit (*(volatile union un_fsasth *)0xFFF8B).BIT\r
-#define FLWL (*(volatile unsigned short *)0xFFF8C)\r
-#define FLWH (*(volatile unsigned short *)0xFFF8E)\r
-#define ITMC (*(volatile unsigned short *)0xFFF90)\r
-#define SEC (*(volatile unsigned char *)0xFFF92)\r
-#define MIN (*(volatile unsigned char *)0xFFF93)\r
-#define HOUR (*(volatile unsigned char *)0xFFF94)\r
-#define WEEK (*(volatile unsigned char *)0xFFF95)\r
-#define DAY (*(volatile unsigned char *)0xFFF96)\r
-#define MONTH (*(volatile unsigned char *)0xFFF97)\r
-#define YEAR (*(volatile unsigned char *)0xFFF98)\r
-#define SUBCUD (*(volatile unsigned char *)0xFFF99)\r
-#define ALARMWM (*(volatile unsigned char *)0xFFF9A)\r
-#define ALARMWH (*(volatile unsigned char *)0xFFF9B)\r
-#define ALARMWW (*(volatile unsigned char *)0xFFF9C)\r
-#define RTCC0 (*(volatile union un_rtcc0 *)0xFFF9D).rtcc0\r
-#define RTCC0_bit (*(volatile union un_rtcc0 *)0xFFF9D).BIT\r
-#define RTCC1 (*(volatile union un_rtcc1 *)0xFFF9E).rtcc1\r
-#define RTCC1_bit (*(volatile union un_rtcc1 *)0xFFF9E).BIT\r
-#define CMC (*(volatile unsigned char *)0xFFFA0)\r
-#define CSC (*(volatile union un_csc *)0xFFFA1).csc\r
-#define CSC_bit (*(volatile union un_csc *)0xFFFA1).BIT\r
-#define OSTC (*(volatile union un_ostc *)0xFFFA2).ostc\r
-#define OSTC_bit (*(volatile union un_ostc *)0xFFFA2).BIT\r
-#define OSTS (*(volatile unsigned char *)0xFFFA3)\r
-#define CKC (*(volatile union un_ckc *)0xFFFA4).ckc\r
-#define CKC_bit (*(volatile union un_ckc *)0xFFFA4).BIT\r
-#define CKS0 (*(volatile union un_cks0 *)0xFFFA5).cks0\r
-#define CKS0_bit (*(volatile union un_cks0 *)0xFFFA5).BIT\r
-#define CKS1 (*(volatile union un_cks1 *)0xFFFA6).cks1\r
-#define CKS1_bit (*(volatile union un_cks1 *)0xFFFA6).BIT\r
-#define RESF (*(volatile unsigned char *)0xFFFA8)\r
-#define LVIM (*(volatile union un_lvim *)0xFFFA9).lvim\r
-#define LVIM_bit (*(volatile union un_lvim *)0xFFFA9).BIT\r
-#define LVIS (*(volatile union un_lvis *)0xFFFAA).lvis\r
-#define LVIS_bit (*(volatile union un_lvis *)0xFFFAA).BIT\r
-#define WDTE (*(volatile unsigned char *)0xFFFAB)\r
-#define CRCIN (*(volatile unsigned char *)0xFFFAC)\r
-#define RXB (*(volatile unsigned char *)0xFFFAD)\r
-#define TXS (*(volatile unsigned char *)0xFFFAD)\r
-#define MONSTA0 (*(volatile union un_monsta0 *)0xFFFAE).monsta0\r
-#define MONSTA0_bit (*(volatile union un_monsta0 *)0xFFFAE).BIT\r
-#define ASIM (*(volatile union un_asim *)0xFFFAF).asim\r
-#define ASIM_bit (*(volatile union un_asim *)0xFFFAF).BIT\r
-#define DSA0 (*(volatile unsigned char *)0xFFFB0)\r
-#define DSA1 (*(volatile unsigned char *)0xFFFB1)\r
-#define DRA0 (*(volatile unsigned short *)0xFFFB2)\r
-#define DRA0L (*(volatile unsigned char *)0xFFFB2)\r
-#define DRA0H (*(volatile unsigned char *)0xFFFB3)\r
-#define DRA1 (*(volatile unsigned short *)0xFFFB4)\r
-#define DRA1L (*(volatile unsigned char *)0xFFFB4)\r
-#define DRA1H (*(volatile unsigned char *)0xFFFB5)\r
-#define DBC0 (*(volatile unsigned short *)0xFFFB6)\r
-#define DBC0L (*(volatile unsigned char *)0xFFFB6)\r
-#define DBC0H (*(volatile unsigned char *)0xFFFB7)\r
-#define DBC1 (*(volatile unsigned short *)0xFFFB8)\r
-#define DBC1L (*(volatile unsigned char *)0xFFFB8)\r
-#define DBC1H (*(volatile unsigned char *)0xFFFB9)\r
-#define DMC0 (*(volatile union un_dmc0 *)0xFFFBA).dmc0\r
-#define DMC0_bit (*(volatile union un_dmc0 *)0xFFFBA).BIT\r
-#define DMC1 (*(volatile union un_dmc1 *)0xFFFBB).dmc1\r
-#define DMC1_bit (*(volatile union un_dmc1 *)0xFFFBB).BIT\r
-#define DRC0 (*(volatile union un_drc0 *)0xFFFBC).drc0\r
-#define DRC0_bit (*(volatile union un_drc0 *)0xFFFBC).BIT\r
-#define DRC1 (*(volatile union un_drc1 *)0xFFFBD).drc1\r
-#define DRC1_bit (*(volatile union un_drc1 *)0xFFFBD).BIT\r
-#define IF2 (*(volatile union un_if2 *)0xFFFD0).if2\r
-#define IF2_bit (*(volatile union un_if2 *)0xFFFD0).BIT\r
-#define IF2L (*(volatile union un_if2l *)0xFFFD0).if2l\r
-#define IF2L_bit (*(volatile union un_if2l *)0xFFFD0).BIT\r
-#define IF2H (*(volatile union un_if2h *)0xFFFD1).if2h\r
-#define IF2H_bit (*(volatile union un_if2h *)0xFFFD1).BIT\r
-#define MK2 (*(volatile union un_mk2 *)0xFFFD4).mk2\r
-#define MK2_bit (*(volatile union un_mk2 *)0xFFFD4).BIT\r
-#define MK2L (*(volatile union un_mk2l *)0xFFFD4).mk2l\r
-#define MK2L_bit (*(volatile union un_mk2l *)0xFFFD4).BIT\r
-#define MK2H (*(volatile union un_mk2h *)0xFFFD5).mk2h\r
-#define MK2H_bit (*(volatile union un_mk2h *)0xFFFD5).BIT\r
-#define PR02 (*(volatile union un_pr02 *)0xFFFD8).pr02\r
-#define PR02_bit (*(volatile union un_pr02 *)0xFFFD8).BIT\r
-#define PR02L (*(volatile union un_pr02l *)0xFFFD8).pr02l\r
-#define PR02L_bit (*(volatile union un_pr02l *)0xFFFD8).BIT\r
-#define PR02H (*(volatile union un_pr02h *)0xFFFD9).pr02h\r
-#define PR02H_bit (*(volatile union un_pr02h *)0xFFFD9).BIT\r
-#define PR12 (*(volatile union un_pr12 *)0xFFFDC).pr12\r
-#define PR12_bit (*(volatile union un_pr12 *)0xFFFDC).BIT\r
-#define PR12L (*(volatile union un_pr12l *)0xFFFDC).pr12l\r
-#define PR12L_bit (*(volatile union un_pr12l *)0xFFFDC).BIT\r
-#define PR12H (*(volatile union un_pr12h *)0xFFFDD).pr12h\r
-#define PR12H_bit (*(volatile union un_pr12h *)0xFFFDD).BIT\r
-#define IF0 (*(volatile union un_if0 *)0xFFFE0).if0\r
-#define IF0_bit (*(volatile union un_if0 *)0xFFFE0).BIT\r
-#define IF0L (*(volatile union un_if0l *)0xFFFE0).if0l\r
-#define IF0L_bit (*(volatile union un_if0l *)0xFFFE0).BIT\r
-#define IF0H (*(volatile union un_if0h *)0xFFFE1).if0h\r
-#define IF0H_bit (*(volatile union un_if0h *)0xFFFE1).BIT\r
-#define IF1 (*(volatile union un_if1 *)0xFFFE2).if1\r
-#define IF1_bit (*(volatile union un_if1 *)0xFFFE2).BIT\r
-#define IF1L (*(volatile union un_if1l *)0xFFFE2).if1l\r
-#define IF1L_bit (*(volatile union un_if1l *)0xFFFE2).BIT\r
-#define IF1H (*(volatile union un_if1h *)0xFFFE3).if1h\r
-#define IF1H_bit (*(volatile union un_if1h *)0xFFFE3).BIT\r
-#define MK0 (*(volatile union un_mk0 *)0xFFFE4).mk0\r
-#define MK0_bit (*(volatile union un_mk0 *)0xFFFE4).BIT\r
-#define MK0L (*(volatile union un_mk0l *)0xFFFE4).mk0l\r
-#define MK0L_bit (*(volatile union un_mk0l *)0xFFFE4).BIT\r
-#define MK0H (*(volatile union un_mk0h *)0xFFFE5).mk0h\r
-#define MK0H_bit (*(volatile union un_mk0h *)0xFFFE5).BIT\r
-#define MK1 (*(volatile union un_mk1 *)0xFFFE6).mk1\r
-#define MK1_bit (*(volatile union un_mk1 *)0xFFFE6).BIT\r
-#define MK1L (*(volatile union un_mk1l *)0xFFFE6).mk1l\r
-#define MK1L_bit (*(volatile union un_mk1l *)0xFFFE6).BIT\r
-#define MK1H (*(volatile union un_mk1h *)0xFFFE7).mk1h\r
-#define MK1H_bit (*(volatile union un_mk1h *)0xFFFE7).BIT\r
-#define PR00 (*(volatile union un_pr00 *)0xFFFE8).pr00\r
-#define PR00_bit (*(volatile union un_pr00 *)0xFFFE8).BIT\r
-#define PR00L (*(volatile union un_pr00l *)0xFFFE8).pr00l\r
-#define PR00L_bit (*(volatile union un_pr00l *)0xFFFE8).BIT\r
-#define PR00H (*(volatile union un_pr00h *)0xFFFE9).pr00h\r
-#define PR00H_bit (*(volatile union un_pr00h *)0xFFFE9).BIT\r
-#define PR01 (*(volatile union un_pr01 *)0xFFFEA).pr01\r
-#define PR01_bit (*(volatile union un_pr01 *)0xFFFEA).BIT\r
-#define PR01L (*(volatile union un_pr01l *)0xFFFEA).pr01l\r
-#define PR01L_bit (*(volatile union un_pr01l *)0xFFFEA).BIT\r
-#define PR01H (*(volatile union un_pr01h *)0xFFFEB).pr01h\r
-#define PR01H_bit (*(volatile union un_pr01h *)0xFFFEB).BIT\r
-#define PR10 (*(volatile union un_pr10 *)0xFFFEC).pr10\r
-#define PR10_bit (*(volatile union un_pr10 *)0xFFFEC).BIT\r
-#define PR10L (*(volatile union un_pr10l *)0xFFFEC).pr10l\r
-#define PR10L_bit (*(volatile union un_pr10l *)0xFFFEC).BIT\r
-#define PR10H (*(volatile union un_pr10h *)0xFFFED).pr10h\r
-#define PR10H_bit (*(volatile union un_pr10h *)0xFFFED).BIT\r
-#define PR11 (*(volatile union un_pr11 *)0xFFFEE).pr11\r
-#define PR11_bit (*(volatile union un_pr11 *)0xFFFEE).BIT\r
-#define PR11L (*(volatile union un_pr11l *)0xFFFEE).pr11l\r
-#define PR11L_bit (*(volatile union un_pr11l *)0xFFFEE).BIT\r
-#define PR11H (*(volatile union un_pr11h *)0xFFFEF).pr11h\r
-#define PR11H_bit (*(volatile union un_pr11h *)0xFFFEF).BIT\r
-#define MDAL (*(volatile unsigned short *)0xFFFF0)\r
-#define MULA (*(volatile unsigned short *)0xFFFF0)\r
-#define MDAH (*(volatile unsigned short *)0xFFFF2)\r
-#define MULB (*(volatile unsigned short *)0xFFFF2)\r
-#define MDBH (*(volatile unsigned short *)0xFFFF4)\r
-#define MULOH (*(volatile unsigned short *)0xFFFF4)\r
-#define MDBL (*(volatile unsigned short *)0xFFFF6)\r
-#define MULOL (*(volatile unsigned short *)0xFFFF6)\r
-#define PMC (*(volatile union un_pmc *)0xFFFFE).pmc\r
-#define PMC_bit (*(volatile union un_pmc *)0xFFFFE).BIT\r
-\r
-/*\r
- Sfr bits\r
- */\r
-#define ADCE ADM0_bit.no0\r
-#define ADCS ADM0_bit.no7\r
-#define SPD0 IICS0_bit.no0\r
-#define STD0 IICS0_bit.no1\r
-#define ACKD0 IICS0_bit.no2\r
-#define TRC0 IICS0_bit.no3\r
-#define COI0 IICS0_bit.no4\r
-#define EXC0 IICS0_bit.no5\r
-#define ALD0 IICS0_bit.no6\r
-#define MSTS0 IICS0_bit.no7\r
-#define IICRSV0 IICF0_bit.no0\r
-#define STCEN0 IICF0_bit.no1\r
-#define IICBSY0 IICF0_bit.no6\r
-#define STCF0 IICF0_bit.no7\r
-#define FSSTP FSSQ_bit.no6\r
-#define SQST FSSQ_bit.no7\r
-#define SQEND FSASTH_bit.no6\r
-#define ESQEND FSASTH_bit.no7\r
-#define RCLOE1 RTCC0_bit.no5\r
-#define RTCE RTCC0_bit.no7\r
-#define RWAIT RTCC1_bit.no0\r
-#define RWST RTCC1_bit.no1\r
-#define RIFG RTCC1_bit.no3\r
-#define WAFG RTCC1_bit.no4\r
-#define WALIE RTCC1_bit.no6\r
-#define WALE RTCC1_bit.no7\r
-#define HIOSTOP CSC_bit.no0\r
-#define XTSTOP CSC_bit.no6\r
-#define MSTOP CSC_bit.no7\r
-#define SDIV CKC_bit.no3\r
-#define MCM0 CKC_bit.no4\r
-#define MCS CKC_bit.no5\r
-#define CSS CKC_bit.no6\r
-#define CLS CKC_bit.no7\r
-#define PCLOE0 CKS0_bit.no7\r
-#define PCLOE1 CKS1_bit.no7\r
-#define LVIF LVIM_bit.no0\r
-#define LVIOMSK LVIM_bit.no1\r
-#define LVISEN LVIM_bit.no7\r
-#define LVILV LVIS_bit.no0\r
-#define LVIMD LVIS_bit.no7\r
-#define DWAIT0 DMC0_bit.no4\r
-#define DS0 DMC0_bit.no5\r
-#define DRS0 DMC0_bit.no6\r
-#define STG0 DMC0_bit.no7\r
-#define DWAIT1 DMC1_bit.no4\r
-#define DS1 DMC1_bit.no5\r
-#define DRS1 DMC1_bit.no6\r
-#define STG1 DMC1_bit.no7\r
-#define DST0 DRC0_bit.no0\r
-#define DEN0 DRC0_bit.no7\r
-#define DST1 DRC1_bit.no0\r
-#define DEN1 DRC1_bit.no7\r
-#define PIF6 IF2_bit.no3\r
-#define PIF8 IF2_bit.no5\r
-#define PIF9 IF2_bit.no6\r
-#define MDIF IF2H_bit.no5\r
-#define FLIF IF2H_bit.no7\r
-#define PMK6 MK2_bit.no3\r
-#define PMK8 MK2_bit.no5\r
-#define PMK9 MK2_bit.no6\r
-#define MDMK MK2H_bit.no5\r
-#define FLMK MK2H_bit.no7\r
-#define PPR06 PR02_bit.no3\r
-#define PPR08 PR02_bit.no5\r
-#define PPR09 PR02_bit.no6\r
-#define MDPR0 PR02H_bit.no5\r
-#define FLPR0 PR02H_bit.no7\r
-#define PPR16 PR12_bit.no3\r
-#define PPR18 PR12_bit.no5\r
-#define PPR19 PR12_bit.no6\r
-#define MDPR1 PR12H_bit.no5\r
-#define FLPR1 PR12H_bit.no7\r
-#define WDTIIF IF0_bit.no0\r
-#define LVIIF IF0_bit.no1\r
-#define PIF0 IF0_bit.no2\r
-#define PIF1 IF0_bit.no3\r
-#define PIF2 IF0_bit.no4\r
-#define PIF3 IF0_bit.no5\r
-#define PIF4 IF0_bit.no6\r
-#define PIF5 IF0_bit.no7\r
-#define DMAIF0 IF0H_bit.no3\r
-#define DMAIF1 IF0H_bit.no4\r
-#define CSIIF00 IF0H_bit.no5\r
-#define IICIF00 IF0H_bit.no5\r
-#define STIF0 IF0H_bit.no5\r
-#define TMIF00 IF0H_bit.no6\r
-#define CSIIF01 IF0H_bit.no7\r
-#define IICIF01 IF0H_bit.no7\r
-#define SRIF0 IF0H_bit.no7\r
-#define SREIF0 IF1_bit.no0\r
-#define TMIF01H IF1_bit.no0\r
-#define TMIF03H IF1_bit.no3\r
-#define IICAIF0 IF1_bit.no4\r
-#define TMIF01 IF1_bit.no5\r
-#define TMIF02 IF1_bit.no6\r
-#define TMIF03 IF1_bit.no7\r
-#define ADIF IF1H_bit.no0\r
-#define RTCIF IF1H_bit.no1\r
-#define ITIF IF1H_bit.no2\r
-#define KRIF IF1H_bit.no3\r
-#define USBIF IF1H_bit.no4\r
-#define RSUIF IF1H_bit.no5\r
-#define WDTIMK MK0_bit.no0\r
-#define LVIMK MK0_bit.no1\r
-#define PMK0 MK0_bit.no2\r
-#define PMK1 MK0_bit.no3\r
-#define PMK2 MK0_bit.no4\r
-#define PMK3 MK0_bit.no5\r
-#define PMK4 MK0_bit.no6\r
-#define PMK5 MK0_bit.no7\r
-#define DMAMK0 MK0H_bit.no3\r
-#define DMAMK1 MK0H_bit.no4\r
-#define CSIMK00 MK0H_bit.no5\r
-#define IICMK00 MK0H_bit.no5\r
-#define STMK0 MK0H_bit.no5\r
-#define TMMK00 MK0H_bit.no6\r
-#define CSIMK01 MK0H_bit.no7\r
-#define IICMK01 MK0H_bit.no7\r
-#define SRMK0 MK0H_bit.no7\r
-#define SREMK0 MK1_bit.no0\r
-#define TMMK01H MK1_bit.no0\r
-#define TMMK03H MK1_bit.no3\r
-#define IICAMK0 MK1_bit.no4\r
-#define TMMK01 MK1_bit.no5\r
-#define TMMK02 MK1_bit.no6\r
-#define TMMK03 MK1_bit.no7\r
-#define ADMK MK1H_bit.no0\r
-#define RTCMK MK1H_bit.no1\r
-#define ITMK MK1H_bit.no2\r
-#define KRMK MK1H_bit.no3\r
-#define USBMK MK1H_bit.no4\r
-#define RSUMK MK1H_bit.no5\r
-#define WDTIPR0 PR00_bit.no0\r
-#define LVIPR0 PR00_bit.no1\r
-#define PPR00 PR00_bit.no2\r
-#define PPR01 PR00_bit.no3\r
-#define PPR02 PR00_bit.no4\r
-#define PPR03 PR00_bit.no5\r
-#define PPR04 PR00_bit.no6\r
-#define PPR05 PR00_bit.no7\r
-#define DMAPR00 PR00H_bit.no3\r
-#define DMAPR01 PR00H_bit.no4\r
-#define CSIPR000 PR00H_bit.no5\r
-#define IICPR000 PR00H_bit.no5\r
-#define STPR00 PR00H_bit.no5\r
-#define TMPR000 PR00H_bit.no6\r
-#define CSIPR001 PR00H_bit.no7\r
-#define IICPR001 PR00H_bit.no7\r
-#define SRPR00 PR00H_bit.no7\r
-#define SREPR00 PR01_bit.no0\r
-#define TMPR001H PR01_bit.no0\r
-#define TMPR003H PR01_bit.no3\r
-#define IICAPR00 PR01_bit.no4\r
-#define TMPR001 PR01_bit.no5\r
-#define TMPR002 PR01_bit.no6\r
-#define TMPR003 PR01_bit.no7\r
-#define ADPR0 PR01H_bit.no0\r
-#define RTCPR0 PR01H_bit.no1\r
-#define ITPR0 PR01H_bit.no2\r
-#define KRPR0 PR01H_bit.no3\r
-#define USBPR0 PR01H_bit.no4\r
-#define RSUPR0 PR01H_bit.no5\r
-#define WDTIPR1 PR10_bit.no0\r
-#define LVIPR1 PR10_bit.no1\r
-#define PPR10 PR10_bit.no2\r
-#define PPR11 PR10_bit.no3\r
-#define PPR12 PR10_bit.no4\r
-#define PPR13 PR10_bit.no5\r
-#define PPR14 PR10_bit.no6\r
-#define PPR15 PR10_bit.no7\r
-#define DMAPR10 PR10H_bit.no3\r
-#define DMAPR11 PR10H_bit.no4\r
-#define CSIPR100 PR10H_bit.no5\r
-#define IICPR100 PR10H_bit.no5\r
-#define STPR10 PR10H_bit.no5\r
-#define TMPR100 PR10H_bit.no6\r
-#define CSIPR101 PR10H_bit.no7\r
-#define IICPR101 PR10H_bit.no7\r
-#define SRPR10 PR10H_bit.no7\r
-#define SREPR10 PR11_bit.no0\r
-#define TMPR101H PR11_bit.no0\r
-#define TMPR103H PR11_bit.no3\r
-#define IICAPR10 PR11_bit.no4\r
-#define TMPR101 PR11_bit.no5\r
-#define TMPR102 PR11_bit.no6\r
-#define TMPR103 PR11_bit.no7\r
-#define ADPR1 PR11H_bit.no0\r
-#define RTCPR1 PR11H_bit.no1\r
-#define ITPR1 PR11H_bit.no2\r
-#define KRPR1 PR11H_bit.no3\r
-#define USBPR1 PR11H_bit.no4\r
-#define RSUPR1 PR11H_bit.no5\r
-#define MAA PMC_bit.no0\r
-\r
-/*\r
- Interrupt vector addresses\r
- */\r
-#define RST_vect (0x0)\r
-#define INTDBG_vect (0x2)\r
-#define INTSRO_vect (0x4)\r
-#define INTWDTI_vect (0x4)\r
-#define INTLVI_vect (0x6)\r
-#define INTP0_vect (0x8)\r
-#define INTP1_vect (0xA)\r
-#define INTP2_vect (0xC)\r
-#define INTP3_vect (0xE)\r
-#define INTP4_vect (0x10)\r
-#define INTP5_vect (0x12)\r
-#define INTDMA0_vect (0x1A)\r
-#define INTDMA1_vect (0x1C)\r
-#define INTCSI00_vect (0x1E)\r
-#define INTIIC00_vect (0x1E)\r
-#define INTST0_vect (0x1E)\r
-#define INTTM00_vect (0x20)\r
-#define INTCSI01_vect (0x22)\r
-#define INTIIC01_vect (0x22)\r
-#define INTSR0_vect (0x22)\r
-#define INTSRE0_vect (0x24)\r
-#define INTTM01H_vect (0x24)\r
-#define INTTM03H_vect (0x2A)\r
-#define INTIICA0_vect (0x2C)\r
-#define INTTM01_vect (0x2E)\r
-#define INTTM02_vect (0x30)\r
-#define INTTM03_vect (0x32)\r
-#define INTAD_vect (0x34)\r
-#define INTRTC_vect (0x36)\r
-#define INTIT_vect (0x38)\r
-#define INTKR_vect (0x3A)\r
-#define INTUSB_vect (0x3C)\r
-#define INTRSUM_vect (0x3E)\r
-#define INTP6_vect (0x4A)\r
-#define INTP8_vect (0x4E)\r
-#define INTP9_vect (0x50)\r
-#define INTMD_vect (0x5E)\r
-#define INTFL_vect (0x62)\r
-#define BRK_I_vect (0x7E)\r
-#endif\r
diff --git a/FreeRTOS/Demo/RL78_E2Studio_GCC/src/iodefine/iodefine_RL78G1C_ext.h b/FreeRTOS/Demo/RL78_E2Studio_GCC/src/iodefine/iodefine_RL78G1C_ext.h
deleted file mode 100644 (file)
index e881e4b..0000000
+++ /dev/null
@@ -1,530 +0,0 @@
-/***********************************************************************/
-/*                                                                                                                    */
-/*      PROJECT NAME :  RL78G1C                                        */
-/*      FILE         :  iodefine_ext.h                                 */
-/*      DESCRIPTION  :  Definition of Extended SFRs                    */
-/*      CPU SERIES   :  RL78 - G1C                                     */
-/*      CPU TYPE     :  R5F10JGC                                       */
-/*                                                                                                                    */
-/*      This file is generated by e2studio.                        */
-/*                                                                                                                    */
-/***********************************************************************/                                                                       \r
-                                                                                   \r
-/************************************************************************/\r
-/* Header file generated from device file:                              */\r
-/*    DR5F10JGC.DVF                                                     */\r
-/*    Copyright(C) 2012 Renesas                                         */\r
-/*    File Version V1.00                                                */\r
-/*    Tool Version 1.9.7121                                             */\r
-/*    Date Generated 13/11/2012                                         */\r
-/************************************************************************/\r
-\r
-#ifndef __IOREG_BIT_STRUCTURES\r
-#define __IOREG_BIT_STRUCTURES\r
-typedef struct {\r
-       unsigned char no0 :1;\r
-       unsigned char no1 :1;\r
-       unsigned char no2 :1;\r
-       unsigned char no3 :1;\r
-       unsigned char no4 :1;\r
-       unsigned char no5 :1;\r
-       unsigned char no6 :1;\r
-       unsigned char no7 :1;\r
-} __BITS8;\r
-\r
-typedef struct {\r
-       unsigned short no0 :1;\r
-       unsigned short no1 :1;\r
-       unsigned short no2 :1;\r
-       unsigned short no3 :1;\r
-       unsigned short no4 :1;\r
-       unsigned short no5 :1;\r
-       unsigned short no6 :1;\r
-       unsigned short no7 :1;\r
-       unsigned short no8 :1;\r
-       unsigned short no9 :1;\r
-       unsigned short no10 :1;\r
-       unsigned short no11 :1;\r
-       unsigned short no12 :1;\r
-       unsigned short no13 :1;\r
-       unsigned short no14 :1;\r
-       unsigned short no15 :1;\r
-} __BITS16;\r
-\r
-#endif\r
-\r
-#ifndef IODEFINE_EXT_H\r
-#define IODEFINE_EXT_H\r
-\r
-/*\r
- IO Registers\r
- */\r
-union un_adm2 {\r
-       unsigned char adm2;\r
-       __BITS8 BIT;\r
-};\r
-union un_pms {\r
-       unsigned char pms;\r
-       __BITS8 BIT;\r
-};\r
-union un_pu0 {\r
-       unsigned char pu0;\r
-       __BITS8 BIT;\r
-};\r
-union un_pu1 {\r
-       unsigned char pu1;\r
-       __BITS8 BIT;\r
-};\r
-union un_pu3 {\r
-       unsigned char pu3;\r
-       __BITS8 BIT;\r
-};\r
-union un_pu4 {\r
-       unsigned char pu4;\r
-       __BITS8 BIT;\r
-};\r
-union un_pu5 {\r
-       unsigned char pu5;\r
-       __BITS8 BIT;\r
-};\r
-union un_pu7 {\r
-       unsigned char pu7;\r
-       __BITS8 BIT;\r
-};\r
-union un_pu12 {\r
-       unsigned char pu12;\r
-       __BITS8 BIT;\r
-};\r
-union un_pu14 {\r
-       unsigned char pu14;\r
-       __BITS8 BIT;\r
-};\r
-union un_pim0 {\r
-       unsigned char pim0;\r
-       __BITS8 BIT;\r
-};\r
-union un_pim3 {\r
-       unsigned char pim3;\r
-       __BITS8 BIT;\r
-};\r
-union un_pim5 {\r
-       unsigned char pim5;\r
-       __BITS8 BIT;\r
-};\r
-union un_pom0 {\r
-       unsigned char pom0;\r
-       __BITS8 BIT;\r
-};\r
-union un_pom3 {\r
-       unsigned char pom3;\r
-       __BITS8 BIT;\r
-};\r
-union un_pom5 {\r
-       unsigned char pom5;\r
-       __BITS8 BIT;\r
-};\r
-union un_pom7 {\r
-       unsigned char pom7;\r
-       __BITS8 BIT;\r
-};\r
-union un_pmc12 {\r
-       unsigned char pmc12;\r
-       __BITS8 BIT;\r
-};\r
-union un_nfen0 {\r
-       unsigned char nfen0;\r
-       __BITS8 BIT;\r
-};\r
-union un_nfen1 {\r
-       unsigned char nfen1;\r
-       __BITS8 BIT;\r
-};\r
-union un_isc {\r
-       unsigned char isc;\r
-       __BITS8 BIT;\r
-};\r
-union un_dflctl {\r
-       unsigned char dflctl;\r
-       __BITS8 BIT;\r
-};\r
-union un_bectl {\r
-       unsigned char bectl;\r
-       __BITS8 BIT;\r
-};\r
-union un_fsse {\r
-       unsigned char fsse;\r
-       __BITS8 BIT;\r
-};\r
-union un_pfs {\r
-       unsigned char pfs;\r
-       __BITS8 BIT;\r
-};\r
-union un_mduc {\r
-       unsigned char mduc;\r
-       __BITS8 BIT;\r
-};\r
-union un_per0 {\r
-       unsigned char per0;\r
-       __BITS8 BIT;\r
-};\r
-union un_rmc {\r
-       unsigned char rmc;\r
-       __BITS8 BIT;\r
-};\r
-union un_rpectl {\r
-       unsigned char rpectl;\r
-       __BITS8 BIT;\r
-};\r
-union un_se0l {\r
-       unsigned char se0l;\r
-       __BITS8 BIT;\r
-};\r
-union un_ss0l {\r
-       unsigned char ss0l;\r
-       __BITS8 BIT;\r
-};\r
-union un_st0l {\r
-       unsigned char st0l;\r
-       __BITS8 BIT;\r
-};\r
-union un_soe0l {\r
-       unsigned char soe0l;\r
-       __BITS8 BIT;\r
-};\r
-union un_te0l {\r
-       unsigned char te0l;\r
-       __BITS8 BIT;\r
-};\r
-union un_ts0l {\r
-       unsigned char ts0l;\r
-       __BITS8 BIT;\r
-};\r
-union un_tt0l {\r
-       unsigned char tt0l;\r
-       __BITS8 BIT;\r
-};\r
-union un_toe0l {\r
-       unsigned char toe0l;\r
-       __BITS8 BIT;\r
-};\r
-union un_iicctl00 {\r
-       unsigned char iicctl00;\r
-       __BITS8 BIT;\r
-};\r
-union un_iicctl01 {\r
-       unsigned char iicctl01;\r
-       __BITS8 BIT;\r
-};\r
-union un_dscctl {\r
-       unsigned char dscctl;\r
-       __BITS8 BIT;\r
-};\r
-union un_mckc {\r
-       unsigned char mckc;\r
-       __BITS8 BIT;\r
-};\r
-union un_crc0ctl {\r
-       unsigned char crc0ctl;\r
-       __BITS8 BIT;\r
-};\r
-\r
-#define ADM2 (*(volatile union un_adm2 *)0xF0010).adm2\r
-#define ADM2_bit (*(volatile union un_adm2 *)0xF0010).BIT\r
-#define ADUL (*(volatile unsigned char *)0xF0011)\r
-#define ADLL (*(volatile unsigned char *)0xF0012)\r
-#define ADTES (*(volatile unsigned char *)0xF0013)\r
-#define PMS (*(volatile union un_pms *)0xF0018).pms\r
-#define PMS_bit (*(volatile union un_pms *)0xF0018).BIT\r
-#define PIOR (*(volatile unsigned char *)0xF001A)\r
-#define PU0 (*(volatile union un_pu0 *)0xF0030).pu0\r
-#define PU0_bit (*(volatile union un_pu0 *)0xF0030).BIT\r
-#define PU1 (*(volatile union un_pu1 *)0xF0031).pu1\r
-#define PU1_bit (*(volatile union un_pu1 *)0xF0031).BIT\r
-#define PU3 (*(volatile union un_pu3 *)0xF0033).pu3\r
-#define PU3_bit (*(volatile union un_pu3 *)0xF0033).BIT\r
-#define PU4 (*(volatile union un_pu4 *)0xF0034).pu4\r
-#define PU4_bit (*(volatile union un_pu4 *)0xF0034).BIT\r
-#define PU5 (*(volatile union un_pu5 *)0xF0035).pu5\r
-#define PU5_bit (*(volatile union un_pu5 *)0xF0035).BIT\r
-#define PU7 (*(volatile union un_pu7 *)0xF0037).pu7\r
-#define PU7_bit (*(volatile union un_pu7 *)0xF0037).BIT\r
-#define PU12 (*(volatile union un_pu12 *)0xF003C).pu12\r
-#define PU12_bit (*(volatile union un_pu12 *)0xF003C).BIT\r
-#define PU14 (*(volatile union un_pu14 *)0xF003E).pu14\r
-#define PU14_bit (*(volatile union un_pu14 *)0xF003E).BIT\r
-#define PIM0 (*(volatile union un_pim0 *)0xF0040).pim0\r
-#define PIM0_bit (*(volatile union un_pim0 *)0xF0040).BIT\r
-#define PIM3 (*(volatile union un_pim3 *)0xF0043).pim3\r
-#define PIM3_bit (*(volatile union un_pim3 *)0xF0043).BIT\r
-#define PIM5 (*(volatile union un_pim5 *)0xF0045).pim5\r
-#define PIM5_bit (*(volatile union un_pim5 *)0xF0045).BIT\r
-#define POM0 (*(volatile union un_pom0 *)0xF0050).pom0\r
-#define POM0_bit (*(volatile union un_pom0 *)0xF0050).BIT\r
-#define POM3 (*(volatile union un_pom3 *)0xF0053).pom3\r
-#define POM3_bit (*(volatile union un_pom3 *)0xF0053).BIT\r
-#define POM5 (*(volatile union un_pom5 *)0xF0055).pom5\r
-#define POM5_bit (*(volatile union un_pom5 *)0xF0055).BIT\r
-#define POM7 (*(volatile union un_pom7 *)0xF0057).pom7\r
-#define POM7_bit (*(volatile union un_pom7 *)0xF0057).BIT\r
-#define PMC12 (*(volatile union un_pmc12 *)0xF006C).pmc12\r
-#define PMC12_bit (*(volatile union un_pmc12 *)0xF006C).BIT\r
-#define NFEN0 (*(volatile union un_nfen0 *)0xF0070).nfen0\r
-#define NFEN0_bit (*(volatile union un_nfen0 *)0xF0070).BIT\r
-#define NFEN1 (*(volatile union un_nfen1 *)0xF0071).nfen1\r
-#define NFEN1_bit (*(volatile union un_nfen1 *)0xF0071).BIT\r
-#define ISC (*(volatile union un_isc *)0xF0073).isc\r
-#define ISC_bit (*(volatile union un_isc *)0xF0073).BIT\r
-#define TIS0 (*(volatile unsigned char *)0xF0074)\r
-#define ADPC (*(volatile unsigned char *)0xF0076)\r
-#define IAWCTL (*(volatile unsigned char *)0xF0077)\r
-#define PRDSEL (*(volatile unsigned short *)0xF007E)\r
-#define TOOLEN (*(volatile unsigned char *)0xF0080)\r
-#define BPAL0 (*(volatile unsigned char *)0xF0081)\r
-#define BPAH0 (*(volatile unsigned char *)0xF0082)\r
-#define BPAS0 (*(volatile unsigned char *)0xF0083)\r
-#define BACDVL0 (*(volatile unsigned char *)0xF0084)\r
-#define BACDVH0 (*(volatile unsigned char *)0xF0085)\r
-#define BACDML0 (*(volatile unsigned char *)0xF0086)\r
-#define BACDMH0 (*(volatile unsigned char *)0xF0087)\r
-#define MONMOD (*(volatile unsigned char *)0xF0088)\r
-#define DFLCTL (*(volatile union un_dflctl *)0xF0090).dflctl\r
-#define DFLCTL_bit (*(volatile union un_dflctl *)0xF0090).BIT\r
-#define HIOTRM (*(volatile unsigned char *)0xF00A0)\r
-#define BECTL (*(volatile union un_bectl *)0xF00A1).bectl\r
-#define BECTL_bit (*(volatile union un_bectl *)0xF00A1).BIT\r
-#define HOCODIV (*(volatile unsigned char *)0xF00A8)\r
-#define TEMPCAL0 (*(volatile unsigned char *)0xF00AC)\r
-#define TEMPCAL1 (*(volatile unsigned char *)0xF00AD)\r
-#define TEMPCAL2 (*(volatile unsigned char *)0xF00AE)\r
-#define TEMPCAL3 (*(volatile unsigned char *)0xF00AF)\r
-#define FLSEC (*(volatile unsigned short *)0xF00B0)\r
-#define FLFSWS (*(volatile unsigned short *)0xF00B2)\r
-#define FLFSWE (*(volatile unsigned short *)0xF00B4)\r
-#define FSSET (*(volatile unsigned char *)0xF00B6)\r
-#define FSSE (*(volatile union un_fsse *)0xF00B7).fsse\r
-#define FSSE_bit (*(volatile union un_fsse *)0xF00B7).BIT\r
-#define FLFADL (*(volatile unsigned short *)0xF00B8)\r
-#define FLFADH (*(volatile unsigned char *)0xF00BA)\r
-#define PFCMD (*(volatile unsigned char *)0xF00C0)\r
-#define PFS (*(volatile union un_pfs *)0xF00C1).pfs\r
-#define PFS_bit (*(volatile union un_pfs *)0xF00C1).BIT\r
-#define FLRL (*(volatile unsigned short *)0xF00C2)\r
-#define FLRH (*(volatile unsigned short *)0xF00C4)\r
-#define FLWE (*(volatile unsigned char *)0xF00C6)\r
-#define FLRE (*(volatile unsigned char *)0xF00C7)\r
-#define FLTMS (*(volatile unsigned short *)0xF00C8)\r
-#define DFLMC (*(volatile unsigned short *)0xF00CA)\r
-#define FLMCL (*(volatile unsigned short *)0xF00CC)\r
-#define FLMCH (*(volatile unsigned char *)0xF00CE)\r
-#define FSCTL (*(volatile unsigned char *)0xF00CF)\r
-#define ICEADR (*(volatile unsigned short *)0xF00D0)\r
-#define ICEDAT (*(volatile unsigned short *)0xF00D2)\r
-#define MDCL (*(volatile unsigned short *)0xF00E0)\r
-#define MDCH (*(volatile unsigned short *)0xF00E2)\r
-#define MDUC (*(volatile union un_mduc *)0xF00E8).mduc\r
-#define MDUC_bit (*(volatile union un_mduc *)0xF00E8).BIT\r
-#define PER0 (*(volatile union un_per0 *)0xF00F0).per0\r
-#define PER0_bit (*(volatile union un_per0 *)0xF00F0).BIT\r
-#define OSMC (*(volatile unsigned char *)0xF00F3)\r
-#define RMC (*(volatile union un_rmc *)0xF00F4).rmc\r
-#define RMC_bit (*(volatile union un_rmc *)0xF00F4).BIT\r
-#define RPECTL (*(volatile union un_rpectl *)0xF00F5).rpectl\r
-#define RPECTL_bit (*(volatile union un_rpectl *)0xF00F5).BIT\r
-#define BCDADJ (*(volatile unsigned char *)0xF00FE)\r
-#define VECTCTRL (*(volatile unsigned char *)0xF00FF)\r
-#define SSR00 (*(volatile unsigned short *)0xF0100)\r
-#define SSR00L (*(volatile unsigned char *)0xF0100)\r
-#define SSR01 (*(volatile unsigned short *)0xF0102)\r
-#define SSR01L (*(volatile unsigned char *)0xF0102)\r
-#define SIR00 (*(volatile unsigned short *)0xF0108)\r
-#define SIR00L (*(volatile unsigned char *)0xF0108)\r
-#define SIR01 (*(volatile unsigned short *)0xF010A)\r
-#define SIR01L (*(volatile unsigned char *)0xF010A)\r
-#define SMR00 (*(volatile unsigned short *)0xF0110)\r
-#define SMR01 (*(volatile unsigned short *)0xF0112)\r
-#define SCR00 (*(volatile unsigned short *)0xF0118)\r
-#define SCR01 (*(volatile unsigned short *)0xF011A)\r
-#define SE0 (*(volatile unsigned short *)0xF0120)\r
-#define SE0L (*(volatile union un_se0l *)0xF0120).se0l\r
-#define SE0L_bit (*(volatile union un_se0l *)0xF0120).BIT\r
-#define SS0 (*(volatile unsigned short *)0xF0122)\r
-#define SS0L (*(volatile union un_ss0l *)0xF0122).ss0l\r
-#define SS0L_bit (*(volatile union un_ss0l *)0xF0122).BIT\r
-#define ST0 (*(volatile unsigned short *)0xF0124)\r
-#define ST0L (*(volatile union un_st0l *)0xF0124).st0l\r
-#define ST0L_bit (*(volatile union un_st0l *)0xF0124).BIT\r
-#define SPS0 (*(volatile unsigned short *)0xF0126)\r
-#define SPS0L (*(volatile unsigned char *)0xF0126)\r
-#define SO0 (*(volatile unsigned short *)0xF0128)\r
-#define SOE0 (*(volatile unsigned short *)0xF012A)\r
-#define SOE0L (*(volatile union un_soe0l *)0xF012A).soe0l\r
-#define SOE0L_bit (*(volatile union un_soe0l *)0xF012A).BIT\r
-#define EDR00 (*(volatile unsigned short *)0xF012C)\r
-#define EDR00L (*(volatile unsigned char *)0xF012C)\r
-#define EDR01 (*(volatile unsigned short *)0xF012E)\r
-#define EDR01L (*(volatile unsigned char *)0xF012E)\r
-#define SOL0 (*(volatile unsigned short *)0xF0134)\r
-#define SOL0L (*(volatile unsigned char *)0xF0134)\r
-#define SSC0 (*(volatile unsigned short *)0xF0138)\r
-#define SSC0L (*(volatile unsigned char *)0xF0138)\r
-#define TCR00 (*(volatile unsigned short *)0xF0180)\r
-#define TCR01 (*(volatile unsigned short *)0xF0182)\r
-#define TCR02 (*(volatile unsigned short *)0xF0184)\r
-#define TCR03 (*(volatile unsigned short *)0xF0186)\r
-#define TMR00 (*(volatile unsigned short *)0xF0190)\r
-#define TMR01 (*(volatile unsigned short *)0xF0192)\r
-#define TMR02 (*(volatile unsigned short *)0xF0194)\r
-#define TMR03 (*(volatile unsigned short *)0xF0196)\r
-#define TSR00 (*(volatile unsigned short *)0xF01A0)\r
-#define TSR00L (*(volatile unsigned char *)0xF01A0)\r
-#define TSR01 (*(volatile unsigned short *)0xF01A2)\r
-#define TSR01L (*(volatile unsigned char *)0xF01A2)\r
-#define TSR02 (*(volatile unsigned short *)0xF01A4)\r
-#define TSR02L (*(volatile unsigned char *)0xF01A4)\r
-#define TSR03 (*(volatile unsigned short *)0xF01A6)\r
-#define TSR03L (*(volatile unsigned char *)0xF01A6)\r
-#define TE0 (*(volatile unsigned short *)0xF01B0)\r
-#define TE0L (*(volatile union un_te0l *)0xF01B0).te0l\r
-#define TE0L_bit (*(volatile union un_te0l *)0xF01B0).BIT\r
-#define TS0 (*(volatile unsigned short *)0xF01B2)\r
-#define TS0L (*(volatile union un_ts0l *)0xF01B2).ts0l\r
-#define TS0L_bit (*(volatile union un_ts0l *)0xF01B2).BIT\r
-#define TT0 (*(volatile unsigned short *)0xF01B4)\r
-#define TT0L (*(volatile union un_tt0l *)0xF01B4).tt0l\r
-#define TT0L_bit (*(volatile union un_tt0l *)0xF01B4).BIT\r
-#define TPS0 (*(volatile unsigned short *)0xF01B6)\r
-#define TO0 (*(volatile unsigned short *)0xF01B8)\r
-#define TO0L (*(volatile unsigned char *)0xF01B8)\r
-#define TOE0 (*(volatile unsigned short *)0xF01BA)\r
-#define TOE0L (*(volatile union un_toe0l *)0xF01BA).toe0l\r
-#define TOE0L_bit (*(volatile union un_toe0l *)0xF01BA).BIT\r
-#define TOL0 (*(volatile unsigned short *)0xF01BC)\r
-#define TOL0L (*(volatile unsigned char *)0xF01BC)\r
-#define TOM0 (*(volatile unsigned short *)0xF01BE)\r
-#define TOM0L (*(volatile unsigned char *)0xF01BE)\r
-#define IICCTL00 (*(volatile union un_iicctl00 *)0xF0230).iicctl00\r
-#define IICCTL00_bit (*(volatile union un_iicctl00 *)0xF0230).BIT\r
-#define IICCTL01 (*(volatile union un_iicctl01 *)0xF0231).iicctl01\r
-#define IICCTL01_bit (*(volatile union un_iicctl01 *)0xF0231).BIT\r
-#define IICWL0 (*(volatile unsigned char *)0xF0232)\r
-#define IICWH0 (*(volatile unsigned char *)0xF0233)\r
-#define SVA0 (*(volatile unsigned char *)0xF0234)\r
-#define IICSE0 (*(volatile unsigned char *)0xF0235)\r
-#define DSCCTL (*(volatile union un_dscctl *)0xF02E5).dscctl\r
-#define DSCCTL_bit (*(volatile union un_dscctl *)0xF02E5).BIT\r
-#define MCKC (*(volatile union un_mckc *)0xF02E6).mckc\r
-#define MCKC_bit (*(volatile union un_mckc *)0xF02E6).BIT\r
-#define CRC0CTL (*(volatile union un_crc0ctl *)0xF02F0).crc0ctl\r
-#define CRC0CTL_bit (*(volatile union un_crc0ctl *)0xF02F0).BIT\r
-#define PGCRCL (*(volatile unsigned short *)0xF02F2)\r
-#define CRCD (*(volatile unsigned short *)0xF02FA)\r
-#define SYSCFG (*(volatile unsigned short *)0xF0400)\r
-#define SYSCFG1 (*(volatile unsigned short *)0xF0402)\r
-#define SYSSTS0 (*(volatile unsigned short *)0xF0404)\r
-#define SYSSTS1 (*(volatile unsigned short *)0xF0406)\r
-#define DVSTCTR0 (*(volatile unsigned short *)0xF0408)\r
-#define DVSTCTR1 (*(volatile unsigned short *)0xF040A)\r
-#define DMA0PCFG (*(volatile unsigned short *)0xF0410)\r
-#define DMA1PCFG (*(volatile unsigned short *)0xF0412)\r
-#define CFIFOM (*(volatile unsigned short *)0xF0414)\r
-#define CFIFOML (*(volatile unsigned char *)0xF0414)\r
-#define D0FIFOM (*(volatile unsigned short *)0xF0418)\r
-#define D0FIFOML (*(volatile unsigned char *)0xF0418)\r
-#define D1FIFOM (*(volatile unsigned short *)0xF041C)\r
-#define D1FIFOML (*(volatile unsigned char *)0xF041C)\r
-#define CFIFOSEL (*(volatile unsigned short *)0xF0420)\r
-#define CFIFOCTR (*(volatile unsigned short *)0xF0422)\r
-#define D0FIFOSEL (*(volatile unsigned short *)0xF0428)\r
-#define D0FIFOCTR (*(volatile unsigned short *)0xF042A)\r
-#define D1FIFOSEL (*(volatile unsigned short *)0xF042C)\r
-#define D1FIFOCTR (*(volatile unsigned short *)0xF042E)\r
-#define INTENB0 (*(volatile unsigned short *)0xF0430)\r
-#define INTENB1 (*(volatile unsigned short *)0xF0432)\r
-#define INTENB2 (*(volatile unsigned short *)0xF0434)\r
-#define BRDYENB (*(volatile unsigned short *)0xF0436)\r
-#define NRDYENB (*(volatile unsigned short *)0xF0438)\r
-#define BEMPENB (*(volatile unsigned short *)0xF043A)\r
-#define SOFCFG (*(volatile unsigned short *)0xF043C)\r
-#define INTSTS0 (*(volatile unsigned short *)0xF0440)\r
-#define INTSTS1 (*(volatile unsigned short *)0xF0442)\r
-#define INTSTS2 (*(volatile unsigned short *)0xF0444)\r
-#define BRDYSTS (*(volatile unsigned short *)0xF0446)\r
-#define NRDYSTS (*(volatile unsigned short *)0xF0448)\r
-#define BEMPSTS (*(volatile unsigned short *)0xF044A)\r
-#define FRMNUM (*(volatile unsigned short *)0xF044C)\r
-#define USBADDR (*(volatile unsigned short *)0xF0450)\r
-#define USBREQ (*(volatile unsigned short *)0xF0454)\r
-#define USBVAL (*(volatile unsigned short *)0xF0456)\r
-#define USBINDX (*(volatile unsigned short *)0xF0458)\r
-#define USBLENG (*(volatile unsigned short *)0xF045A)\r
-#define DCPCFG (*(volatile unsigned short *)0xF045C)\r
-#define DCPMAXP (*(volatile unsigned short *)0xF045E)\r
-#define DCPCTR (*(volatile unsigned short *)0xF0460)\r
-#define PIPESEL (*(volatile unsigned short *)0xF0464)\r
-#define PIPECFG (*(volatile unsigned short *)0xF0468)\r
-#define PIPEMAXP (*(volatile unsigned short *)0xF046C)\r
-#define PIPEPERI (*(volatile unsigned short *)0xF046E)\r
-#define PIPE4CTR (*(volatile unsigned short *)0xF0476)\r
-#define PIPE5CTR (*(volatile unsigned short *)0xF0478)\r
-#define PIPE6CTR (*(volatile unsigned short *)0xF047A)\r
-#define PIPE7CTR (*(volatile unsigned short *)0xF047C)\r
-#define PIPE4TRE (*(volatile unsigned short *)0xF049C)\r
-#define PIPE4TRN (*(volatile unsigned short *)0xF049E)\r
-#define PIPE5TRE (*(volatile unsigned short *)0xF04A0)\r
-#define PIPE5TRN (*(volatile unsigned short *)0xF04A2)\r
-#define USBBCCTRL0 (*(volatile unsigned short *)0xF04B0)\r
-#define USBBCCTRL1 (*(volatile unsigned short *)0xF04B4)\r
-#define USBBCOPT0 (*(volatile unsigned short *)0xF04B8)\r
-#define USBBCOPT1 (*(volatile unsigned short *)0xF04BC)\r
-#define USBMC (*(volatile unsigned short *)0xF04CC)\r
-#define DEVADD0 (*(volatile unsigned short *)0xF04D0)\r
-#define DEVADD1 (*(volatile unsigned short *)0xF04D2)\r
-#define DEVADD2 (*(volatile unsigned short *)0xF04D4)\r
-#define DEVADD3 (*(volatile unsigned short *)0xF04D6)\r
-#define DEVADD4 (*(volatile unsigned short *)0xF04D8)\r
-#define DEVADD5 (*(volatile unsigned short *)0xF04DA)\r
-\r
-/*\r
- Sfr bits\r
- */\r
-#define ADTYP ADM2_bit.no0\r
-#define AWC ADM2_bit.no2\r
-#define ADRCK ADM2_bit.no3\r
-#define DFLEN DFLCTL_bit.no0\r
-#define BRSAM BECTL_bit.no0\r
-#define ESQST FSSE_bit.no7\r
-#define DIVST MDUC_bit.no0\r
-#define MACSF MDUC_bit.no1\r
-#define MACOF MDUC_bit.no2\r
-#define MDSM MDUC_bit.no3\r
-#define MACMODE MDUC_bit.no6\r
-#define DIVMODE MDUC_bit.no7\r
-#define TAU0EN PER0_bit.no0\r
-#define SAU0EN PER0_bit.no2\r
-#define IICA0EN PER0_bit.no4\r
-#define ADCEN PER0_bit.no5\r
-#define RTCEN PER0_bit.no7\r
-#define PAENB RMC_bit.no0\r
-#define WDVOL RMC_bit.no7\r
-#define RPEF RPECTL_bit.no0\r
-#define RPERDIS RPECTL_bit.no7\r
-#define SPT0 IICCTL00_bit.no0\r
-#define STT0 IICCTL00_bit.no1\r
-#define ACKE0 IICCTL00_bit.no2\r
-#define WTIM0 IICCTL00_bit.no3\r
-#define SPIE0 IICCTL00_bit.no4\r
-#define WREL0 IICCTL00_bit.no5\r
-#define LREL0 IICCTL00_bit.no6\r
-#define IICE0 IICCTL00_bit.no7\r
-#define PRS0 IICCTL01_bit.no0\r
-#define DFC0 IICCTL01_bit.no2\r
-#define SMC0 IICCTL01_bit.no3\r
-#define DAD0 IICCTL01_bit.no4\r
-#define CLD0 IICCTL01_bit.no5\r
-#define WUP0 IICCTL01_bit.no7\r
-#define CRC0EN CRC0CTL_bit.no7\r
-\r
-/*\r
- Interrupt vector addresses\r
- */\r
-#endif\r
diff --git a/FreeRTOS/Demo/RL78_E2Studio_GCC/src/iodefine/iodefine_RL78L13.h b/FreeRTOS/Demo/RL78_E2Studio_GCC/src/iodefine/iodefine_RL78L13.h
deleted file mode 100644 (file)
index 60db13d..0000000
+++ /dev/null
@@ -1,1057 +0,0 @@
-/***********************************************************************/
-/*                                                                                                                    */
-/*      PROJECT NAME :  RL78L13                                        */
-/*      FILE         :  iodefine.h                                     */
-/*      DESCRIPTION  :  Definition of I/O Registers                    */
-/*      CPU SERIES   :  RL78 - L13                                     */
-/*      CPU TYPE     :  R5F10WMG                                       */
-/*                                                                                                                    */
-/*      This file is generated by e2studio.                        */
-/*                                                                                                                    */
-/***********************************************************************/                                                                       \r
-                                                                                   \r
-/************************************************************************/\r
-/* Header file generated from device file:                              */\r
-/*    DR5F10WMG.DVF                                                     */\r
-/*    Copyright(C) 2012 Renesas                                         */\r
-/*    Version E1.00d                                                    */\r
-/************************************************************************/\r
-\r
-#ifndef __IOREG_BIT_STRUCTURES\r
-#define __IOREG_BIT_STRUCTURES\r
-typedef struct {\r
-       unsigned char no0 :1;\r
-       unsigned char no1 :1;\r
-       unsigned char no2 :1;\r
-       unsigned char no3 :1;\r
-       unsigned char no4 :1;\r
-       unsigned char no5 :1;\r
-       unsigned char no6 :1;\r
-       unsigned char no7 :1;\r
-} __BITS8;\r
-\r
-typedef struct {\r
-       unsigned short no0 :1;\r
-       unsigned short no1 :1;\r
-       unsigned short no2 :1;\r
-       unsigned short no3 :1;\r
-       unsigned short no4 :1;\r
-       unsigned short no5 :1;\r
-       unsigned short no6 :1;\r
-       unsigned short no7 :1;\r
-       unsigned short no8 :1;\r
-       unsigned short no9 :1;\r
-       unsigned short no10 :1;\r
-       unsigned short no11 :1;\r
-       unsigned short no12 :1;\r
-       unsigned short no13 :1;\r
-       unsigned short no14 :1;\r
-       unsigned short no15 :1;\r
-} __BITS16;\r
-\r
-#endif\r
-\r
-#ifndef IODEFINE_H\r
-#define IODEFINE_H\r
-\r
-/*\r
- IO Registers\r
- */\r
-union un_p0 {\r
-       unsigned char p0;\r
-       __BITS8 BIT;\r
-};\r
-union un_p1 {\r
-       unsigned char p1;\r
-       __BITS8 BIT;\r
-};\r
-union un_p2 {\r
-       unsigned char p2;\r
-       __BITS8 BIT;\r
-};\r
-union un_p3 {\r
-       unsigned char p3;\r
-       __BITS8 BIT;\r
-};\r
-union un_p4 {\r
-       unsigned char p4;\r
-       __BITS8 BIT;\r
-};\r
-union un_p5 {\r
-       unsigned char p5;\r
-       __BITS8 BIT;\r
-};\r
-union un_p6 {\r
-       unsigned char p6;\r
-       __BITS8 BIT;\r
-};\r
-union un_p7 {\r
-       unsigned char p7;\r
-       __BITS8 BIT;\r
-};\r
-union un_p12 {\r
-       unsigned char p12;\r
-       __BITS8 BIT;\r
-};\r
-union un_p13 {\r
-       unsigned char p13;\r
-       __BITS8 BIT;\r
-};\r
-union un_pm0 {\r
-       unsigned char pm0;\r
-       __BITS8 BIT;\r
-};\r
-union un_pm1 {\r
-       unsigned char pm1;\r
-       __BITS8 BIT;\r
-};\r
-union un_pm2 {\r
-       unsigned char pm2;\r
-       __BITS8 BIT;\r
-};\r
-union un_pm3 {\r
-       unsigned char pm3;\r
-       __BITS8 BIT;\r
-};\r
-union un_pm4 {\r
-       unsigned char pm4;\r
-       __BITS8 BIT;\r
-};\r
-union un_pm5 {\r
-       unsigned char pm5;\r
-       __BITS8 BIT;\r
-};\r
-union un_pm6 {\r
-       unsigned char pm6;\r
-       __BITS8 BIT;\r
-};\r
-union un_pm7 {\r
-       unsigned char pm7;\r
-       __BITS8 BIT;\r
-};\r
-union un_pm12 {\r
-       unsigned char pm12;\r
-       __BITS8 BIT;\r
-};\r
-union un_pm13 {\r
-       unsigned char pm13;\r
-       __BITS8 BIT;\r
-};\r
-union un_adm0 {\r
-       unsigned char adm0;\r
-       __BITS8 BIT;\r
-};\r
-union un_ads {\r
-       unsigned char ads;\r
-       __BITS8 BIT;\r
-};\r
-union un_adm1 {\r
-       unsigned char adm1;\r
-       __BITS8 BIT;\r
-};\r
-union un_krctl {\r
-       unsigned char krctl;\r
-       __BITS8 BIT;\r
-};\r
-union un_krm0 {\r
-       unsigned char krm0;\r
-       __BITS8 BIT;\r
-};\r
-union un_egp0 {\r
-       unsigned char egp0;\r
-       __BITS8 BIT;\r
-};\r
-union un_egn0 {\r
-       unsigned char egn0;\r
-       __BITS8 BIT;\r
-};\r
-union un_lcdm1 {\r
-       unsigned char lcdm1;\r
-       __BITS8 BIT;\r
-};\r
-union un_mlcd {\r
-       unsigned char mlcd;\r
-       __BITS8 BIT;\r
-};\r
-union un_iics0 {\r
-       unsigned char iics0;\r
-       __BITS8 BIT;\r
-};\r
-union un_iicf0 {\r
-       unsigned char iicf0;\r
-       __BITS8 BIT;\r
-};\r
-union un_flars {\r
-       unsigned char flars;\r
-       __BITS8 BIT;\r
-};\r
-union un_fssq {\r
-       unsigned char fssq;\r
-       __BITS8 BIT;\r
-};\r
-union un_flrst {\r
-       unsigned char flrst;\r
-       __BITS8 BIT;\r
-};\r
-union un_fsastl {\r
-       unsigned char fsastl;\r
-       __BITS8 BIT;\r
-};\r
-union un_fsasth {\r
-       unsigned char fsasth;\r
-       __BITS8 BIT;\r
-};\r
-union un_rtcc0 {\r
-       unsigned char rtcc0;\r
-       __BITS8 BIT;\r
-};\r
-union un_rtcc1 {\r
-       unsigned char rtcc1;\r
-       __BITS8 BIT;\r
-};\r
-union un_csc {\r
-       unsigned char csc;\r
-       __BITS8 BIT;\r
-};\r
-union un_ostc {\r
-       unsigned char ostc;\r
-       __BITS8 BIT;\r
-};\r
-union un_ckc {\r
-       unsigned char ckc;\r
-       __BITS8 BIT;\r
-};\r
-union un_cks0 {\r
-       unsigned char cks0;\r
-       __BITS8 BIT;\r
-};\r
-union un_cks1 {\r
-       unsigned char cks1;\r
-       __BITS8 BIT;\r
-};\r
-union un_lvim {\r
-       unsigned char lvim;\r
-       __BITS8 BIT;\r
-};\r
-union un_lvis {\r
-       unsigned char lvis;\r
-       __BITS8 BIT;\r
-};\r
-union un_monsta0 {\r
-       unsigned char monsta0;\r
-       __BITS8 BIT;\r
-};\r
-union un_asim {\r
-       unsigned char asim;\r
-       __BITS8 BIT;\r
-};\r
-union un_dmc0 {\r
-       unsigned char dmc0;\r
-       __BITS8 BIT;\r
-};\r
-union un_dmc1 {\r
-       unsigned char dmc1;\r
-       __BITS8 BIT;\r
-};\r
-union un_drc0 {\r
-       unsigned char drc0;\r
-       __BITS8 BIT;\r
-};\r
-union un_drc1 {\r
-       unsigned char drc1;\r
-       __BITS8 BIT;\r
-};\r
-union un_if2 {\r
-       unsigned short if2;\r
-       __BITS16 BIT;\r
-};\r
-union un_if2l {\r
-       unsigned char if2l;\r
-       __BITS8 BIT;\r
-};\r
-union un_if2h {\r
-       unsigned char if2h;\r
-       __BITS8 BIT;\r
-};\r
-union un_if3 {\r
-       unsigned short if3;\r
-       __BITS16 BIT;\r
-};\r
-union un_if3l {\r
-       unsigned char if3l;\r
-       __BITS8 BIT;\r
-};\r
-union un_mk2 {\r
-       unsigned short mk2;\r
-       __BITS16 BIT;\r
-};\r
-union un_mk2l {\r
-       unsigned char mk2l;\r
-       __BITS8 BIT;\r
-};\r
-union un_mk2h {\r
-       unsigned char mk2h;\r
-       __BITS8 BIT;\r
-};\r
-union un_mk3 {\r
-       unsigned short mk3;\r
-       __BITS16 BIT;\r
-};\r
-union un_mk3l {\r
-       unsigned char mk3l;\r
-       __BITS8 BIT;\r
-};\r
-union un_pr02 {\r
-       unsigned short pr02;\r
-       __BITS16 BIT;\r
-};\r
-union un_pr02l {\r
-       unsigned char pr02l;\r
-       __BITS8 BIT;\r
-};\r
-union un_pr02h {\r
-       unsigned char pr02h;\r
-       __BITS8 BIT;\r
-};\r
-union un_pr03 {\r
-       unsigned short pr03;\r
-       __BITS16 BIT;\r
-};\r
-union un_pr03l {\r
-       unsigned char pr03l;\r
-       __BITS8 BIT;\r
-};\r
-union un_pr12 {\r
-       unsigned short pr12;\r
-       __BITS16 BIT;\r
-};\r
-union un_pr12l {\r
-       unsigned char pr12l;\r
-       __BITS8 BIT;\r
-};\r
-union un_pr12h {\r
-       unsigned char pr12h;\r
-       __BITS8 BIT;\r
-};\r
-union un_pr13 {\r
-       unsigned short pr13;\r
-       __BITS16 BIT;\r
-};\r
-union un_pr13l {\r
-       unsigned char pr13l;\r
-       __BITS8 BIT;\r
-};\r
-union un_if0 {\r
-       unsigned short if0;\r
-       __BITS16 BIT;\r
-};\r
-union un_if0l {\r
-       unsigned char if0l;\r
-       __BITS8 BIT;\r
-};\r
-union un_if0h {\r
-       unsigned char if0h;\r
-       __BITS8 BIT;\r
-};\r
-union un_if1 {\r
-       unsigned short if1;\r
-       __BITS16 BIT;\r
-};\r
-union un_if1l {\r
-       unsigned char if1l;\r
-       __BITS8 BIT;\r
-};\r
-union un_if1h {\r
-       unsigned char if1h;\r
-       __BITS8 BIT;\r
-};\r
-union un_mk0 {\r
-       unsigned short mk0;\r
-       __BITS16 BIT;\r
-};\r
-union un_mk0l {\r
-       unsigned char mk0l;\r
-       __BITS8 BIT;\r
-};\r
-union un_mk0h {\r
-       unsigned char mk0h;\r
-       __BITS8 BIT;\r
-};\r
-union un_mk1 {\r
-       unsigned short mk1;\r
-       __BITS16 BIT;\r
-};\r
-union un_mk1l {\r
-       unsigned char mk1l;\r
-       __BITS8 BIT;\r
-};\r
-union un_mk1h {\r
-       unsigned char mk1h;\r
-       __BITS8 BIT;\r
-};\r
-union un_pr00 {\r
-       unsigned short pr00;\r
-       __BITS16 BIT;\r
-};\r
-union un_pr00l {\r
-       unsigned char pr00l;\r
-       __BITS8 BIT;\r
-};\r
-union un_pr00h {\r
-       unsigned char pr00h;\r
-       __BITS8 BIT;\r
-};\r
-union un_pr01 {\r
-       unsigned short pr01;\r
-       __BITS16 BIT;\r
-};\r
-union un_pr01l {\r
-       unsigned char pr01l;\r
-       __BITS8 BIT;\r
-};\r
-union un_pr01h {\r
-       unsigned char pr01h;\r
-       __BITS8 BIT;\r
-};\r
-union un_pr10 {\r
-       unsigned short pr10;\r
-       __BITS16 BIT;\r
-};\r
-union un_pr10l {\r
-       unsigned char pr10l;\r
-       __BITS8 BIT;\r
-};\r
-union un_pr10h {\r
-       unsigned char pr10h;\r
-       __BITS8 BIT;\r
-};\r
-union un_pr11 {\r
-       unsigned short pr11;\r
-       __BITS16 BIT;\r
-};\r
-union un_pr11l {\r
-       unsigned char pr11l;\r
-       __BITS8 BIT;\r
-};\r
-union un_pr11h {\r
-       unsigned char pr11h;\r
-       __BITS8 BIT;\r
-};\r
-union un_pmc {\r
-       unsigned char pmc;\r
-       __BITS8 BIT;\r
-};\r
-\r
-#define P0 (*(volatile union un_p0 *)0xFFF00).p0\r
-#define P0_bit (*(volatile union un_p0 *)0xFFF00).BIT\r
-#define P1 (*(volatile union un_p1 *)0xFFF01).p1\r
-#define P1_bit (*(volatile union un_p1 *)0xFFF01).BIT\r
-#define P2 (*(volatile union un_p2 *)0xFFF02).p2\r
-#define P2_bit (*(volatile union un_p2 *)0xFFF02).BIT\r
-#define P3 (*(volatile union un_p3 *)0xFFF03).p3\r
-#define P3_bit (*(volatile union un_p3 *)0xFFF03).BIT\r
-#define P4 (*(volatile union un_p4 *)0xFFF04).p4\r
-#define P4_bit (*(volatile union un_p4 *)0xFFF04).BIT\r
-#define P5 (*(volatile union un_p5 *)0xFFF05).p5\r
-#define P5_bit (*(volatile union un_p5 *)0xFFF05).BIT\r
-#define P6 (*(volatile union un_p6 *)0xFFF06).p6\r
-#define P6_bit (*(volatile union un_p6 *)0xFFF06).BIT\r
-#define P7 (*(volatile union un_p7 *)0xFFF07).p7\r
-#define P7_bit (*(volatile union un_p7 *)0xFFF07).BIT\r
-#define P12 (*(volatile union un_p12 *)0xFFF0C).p12\r
-#define P12_bit (*(volatile union un_p12 *)0xFFF0C).BIT\r
-#define P13 (*(volatile union un_p13 *)0xFFF0D).p13\r
-#define P13_bit (*(volatile union un_p13 *)0xFFF0D).BIT\r
-#define SDR00 (*(volatile unsigned short *)0xFFF10)\r
-#define SIO00 (*(volatile unsigned char *)0xFFF10)\r
-#define TXD0 (*(volatile unsigned char *)0xFFF10)\r
-#define SDR01 (*(volatile unsigned short *)0xFFF12)\r
-#define RXD0 (*(volatile unsigned char *)0xFFF12)\r
-#define SDR12 (*(volatile unsigned short *)0xFFF14)\r
-#define TXD3 (*(volatile unsigned char *)0xFFF14)\r
-#define SDR13 (*(volatile unsigned short *)0xFFF16)\r
-#define RXD3 (*(volatile unsigned char *)0xFFF16)\r
-#define TDR00 (*(volatile unsigned short *)0xFFF18)\r
-#define TDR01 (*(volatile unsigned short *)0xFFF1A)\r
-#define TDR01L (*(volatile unsigned char *)0xFFF1A)\r
-#define TDR01H (*(volatile unsigned char *)0xFFF1B)\r
-#define ADCR (*(volatile unsigned short *)0xFFF1E)\r
-#define ADCRH (*(volatile unsigned char *)0xFFF1F)\r
-#define PM0 (*(volatile union un_pm0 *)0xFFF20).pm0\r
-#define PM0_bit (*(volatile union un_pm0 *)0xFFF20).BIT\r
-#define PM1 (*(volatile union un_pm1 *)0xFFF21).pm1\r
-#define PM1_bit (*(volatile union un_pm1 *)0xFFF21).BIT\r
-#define PM2 (*(volatile union un_pm2 *)0xFFF22).pm2\r
-#define PM2_bit (*(volatile union un_pm2 *)0xFFF22).BIT\r
-#define PM3 (*(volatile union un_pm3 *)0xFFF23).pm3\r
-#define PM3_bit (*(volatile union un_pm3 *)0xFFF23).BIT\r
-#define PM4 (*(volatile union un_pm4 *)0xFFF24).pm4\r
-#define PM4_bit (*(volatile union un_pm4 *)0xFFF24).BIT\r
-#define PM5 (*(volatile union un_pm5 *)0xFFF25).pm5\r
-#define PM5_bit (*(volatile union un_pm5 *)0xFFF25).BIT\r
-#define PM6 (*(volatile union un_pm6 *)0xFFF26).pm6\r
-#define PM6_bit (*(volatile union un_pm6 *)0xFFF26).BIT\r
-#define PM7 (*(volatile union un_pm7 *)0xFFF27).pm7\r
-#define PM7_bit (*(volatile union un_pm7 *)0xFFF27).BIT\r
-#define PM12 (*(volatile union un_pm12 *)0xFFF2C).pm12\r
-#define PM12_bit (*(volatile union un_pm12 *)0xFFF2C).BIT\r
-#define PM13 (*(volatile union un_pm13 *)0xFFF2D).pm13\r
-#define PM13_bit (*(volatile union un_pm13 *)0xFFF2D).BIT\r
-#define ADM0 (*(volatile union un_adm0 *)0xFFF30).adm0\r
-#define ADM0_bit (*(volatile union un_adm0 *)0xFFF30).BIT\r
-#define ADS (*(volatile union un_ads *)0xFFF31).ads\r
-#define ADS_bit (*(volatile union un_ads *)0xFFF31).BIT\r
-#define ADM1 (*(volatile union un_adm1 *)0xFFF32).adm1\r
-#define ADM1_bit (*(volatile union un_adm1 *)0xFFF32).BIT\r
-#define KRCTL (*(volatile union un_krctl *)0xFFF34).krctl\r
-#define KRCTL_bit (*(volatile union un_krctl *)0xFFF34).BIT\r
-#define KRF (*(volatile unsigned char *)0xFFF35)\r
-#define KRM0 (*(volatile union un_krm0 *)0xFFF37).krm0\r
-#define KRM0_bit (*(volatile union un_krm0 *)0xFFF37).BIT\r
-#define EGP0 (*(volatile union un_egp0 *)0xFFF38).egp0\r
-#define EGP0_bit (*(volatile union un_egp0 *)0xFFF38).BIT\r
-#define EGN0 (*(volatile union un_egn0 *)0xFFF39).egn0\r
-#define EGN0_bit (*(volatile union un_egn0 *)0xFFF39).BIT\r
-#define LCDM0 (*(volatile unsigned char *)0xFFF40)\r
-#define LCDM1 (*(volatile union un_lcdm1 *)0xFFF41).lcdm1\r
-#define LCDM1_bit (*(volatile union un_lcdm1 *)0xFFF41).BIT\r
-#define LCDC0 (*(volatile unsigned char *)0xFFF42)\r
-#define VLCD (*(volatile unsigned char *)0xFFF43)\r
-#define SDR02 (*(volatile unsigned short *)0xFFF44)\r
-#define SIO10 (*(volatile unsigned char *)0xFFF44)\r
-#define TXD1 (*(volatile unsigned char *)0xFFF44)\r
-#define SDR03 (*(volatile unsigned short *)0xFFF46)\r
-#define RXD1 (*(volatile unsigned char *)0xFFF46)\r
-#define SDR10 (*(volatile unsigned short *)0xFFF48)\r
-#define TXD2 (*(volatile unsigned char *)0xFFF48)\r
-#define SDR11 (*(volatile unsigned short *)0xFFF4A)\r
-#define RXD2 (*(volatile unsigned char *)0xFFF4A)\r
-#define MLCD (*(volatile union un_mlcd *)0xFFF4C).mlcd\r
-#define MLCD_bit (*(volatile union un_mlcd *)0xFFF4C).BIT\r
-#define IICA0 (*(volatile unsigned char *)0xFFF50)\r
-#define IICS0 (*(volatile union un_iics0 *)0xFFF51).iics0\r
-#define IICS0_bit (*(volatile union un_iics0 *)0xFFF51).BIT\r
-#define IICF0 (*(volatile union un_iicf0 *)0xFFF52).iicf0\r
-#define IICF0_bit (*(volatile union un_iicf0 *)0xFFF52).BIT\r
-#define TDR02 (*(volatile unsigned short *)0xFFF64)\r
-#define TDR03 (*(volatile unsigned short *)0xFFF66)\r
-#define TDR03L (*(volatile unsigned char *)0xFFF66)\r
-#define TDR03H (*(volatile unsigned char *)0xFFF67)\r
-#define TDR04 (*(volatile unsigned short *)0xFFF68)\r
-#define TDR05 (*(volatile unsigned short *)0xFFF6A)\r
-#define TDR06 (*(volatile unsigned short *)0xFFF6C)\r
-#define TDR07 (*(volatile unsigned short *)0xFFF6E)\r
-#define FLPMC (*(volatile unsigned char *)0xFFF80)\r
-#define FLARS (*(volatile union un_flars *)0xFFF81).flars\r
-#define FLARS_bit (*(volatile union un_flars *)0xFFF81).BIT\r
-#define FLAPL (*(volatile unsigned short *)0xFFF82)\r
-#define FLAPH (*(volatile unsigned char *)0xFFF84)\r
-#define FSSQ (*(volatile union un_fssq *)0xFFF85).fssq\r
-#define FSSQ_bit (*(volatile union un_fssq *)0xFFF85).BIT\r
-#define FLSEDL (*(volatile unsigned short *)0xFFF86)\r
-#define FLSEDH (*(volatile unsigned char *)0xFFF88)\r
-#define FLRST (*(volatile union un_flrst *)0xFFF89).flrst\r
-#define FLRST_bit (*(volatile union un_flrst *)0xFFF89).BIT\r
-#define FSASTL (*(volatile union un_fsastl *)0xFFF8A).fsastl\r
-#define FSASTL_bit (*(volatile union un_fsastl *)0xFFF8A).BIT\r
-#define FSASTH (*(volatile union un_fsasth *)0xFFF8B).fsasth\r
-#define FSASTH_bit (*(volatile union un_fsasth *)0xFFF8B).BIT\r
-#define FLWL (*(volatile unsigned short *)0xFFF8C)\r
-#define FLWH (*(volatile unsigned short *)0xFFF8E)\r
-#define ITMC (*(volatile unsigned short *)0xFFF90)\r
-#define SEC (*(volatile unsigned char *)0xFFF92)\r
-#define MIN (*(volatile unsigned char *)0xFFF93)\r
-#define HOUR (*(volatile unsigned char *)0xFFF94)\r
-#define WEEK (*(volatile unsigned char *)0xFFF95)\r
-#define DAY (*(volatile unsigned char *)0xFFF96)\r
-#define MONTH (*(volatile unsigned char *)0xFFF97)\r
-#define YEAR (*(volatile unsigned char *)0xFFF98)\r
-#define ALARMWM (*(volatile unsigned char *)0xFFF9A)\r
-#define ALARMWH (*(volatile unsigned char *)0xFFF9B)\r
-#define ALARMWW (*(volatile unsigned char *)0xFFF9C)\r
-#define RTCC0 (*(volatile union un_rtcc0 *)0xFFF9D).rtcc0\r
-#define RTCC0_bit (*(volatile union un_rtcc0 *)0xFFF9D).BIT\r
-#define RTCC1 (*(volatile union un_rtcc1 *)0xFFF9E).rtcc1\r
-#define RTCC1_bit (*(volatile union un_rtcc1 *)0xFFF9E).BIT\r
-#define CMC (*(volatile unsigned char *)0xFFFA0)\r
-#define CSC (*(volatile union un_csc *)0xFFFA1).csc\r
-#define CSC_bit (*(volatile union un_csc *)0xFFFA1).BIT\r
-#define OSTC (*(volatile union un_ostc *)0xFFFA2).ostc\r
-#define OSTC_bit (*(volatile union un_ostc *)0xFFFA2).BIT\r
-#define OSTS (*(volatile unsigned char *)0xFFFA3)\r
-#define CKC (*(volatile union un_ckc *)0xFFFA4).ckc\r
-#define CKC_bit (*(volatile union un_ckc *)0xFFFA4).BIT\r
-#define CKS0 (*(volatile union un_cks0 *)0xFFFA5).cks0\r
-#define CKS0_bit (*(volatile union un_cks0 *)0xFFFA5).BIT\r
-#define CKS1 (*(volatile union un_cks1 *)0xFFFA6).cks1\r
-#define CKS1_bit (*(volatile union un_cks1 *)0xFFFA6).BIT\r
-#define RESF (*(volatile unsigned char *)0xFFFA8)\r
-#define LVIM (*(volatile union un_lvim *)0xFFFA9).lvim\r
-#define LVIM_bit (*(volatile union un_lvim *)0xFFFA9).BIT\r
-#define LVIS (*(volatile union un_lvis *)0xFFFAA).lvis\r
-#define LVIS_bit (*(volatile union un_lvis *)0xFFFAA).BIT\r
-#define WDTE (*(volatile unsigned char *)0xFFFAB)\r
-#define CRCIN (*(volatile unsigned char *)0xFFFAC)\r
-#define RXB (*(volatile unsigned char *)0xFFFAD)\r
-#define TXS (*(volatile unsigned char *)0xFFFAD)\r
-#define MONSTA0 (*(volatile union un_monsta0 *)0xFFFAE).monsta0\r
-#define MONSTA0_bit (*(volatile union un_monsta0 *)0xFFFAE).BIT\r
-#define ASIM (*(volatile union un_asim *)0xFFFAF).asim\r
-#define ASIM_bit (*(volatile union un_asim *)0xFFFAF).BIT\r
-#define DSA0 (*(volatile unsigned char *)0xFFFB0)\r
-#define DSA1 (*(volatile unsigned char *)0xFFFB1)\r
-#define DRA0 (*(volatile unsigned short *)0xFFFB2)\r
-#define DRA0L (*(volatile unsigned char *)0xFFFB2)\r
-#define DRA0H (*(volatile unsigned char *)0xFFFB3)\r
-#define DRA1 (*(volatile unsigned short *)0xFFFB4)\r
-#define DRA1L (*(volatile unsigned char *)0xFFFB4)\r
-#define DRA1H (*(volatile unsigned char *)0xFFFB5)\r
-#define DBC0 (*(volatile unsigned short *)0xFFFB6)\r
-#define DBC0L (*(volatile unsigned char *)0xFFFB6)\r
-#define DBC0H (*(volatile unsigned char *)0xFFFB7)\r
-#define DBC1 (*(volatile unsigned short *)0xFFFB8)\r
-#define DBC1L (*(volatile unsigned char *)0xFFFB8)\r
-#define DBC1H (*(volatile unsigned char *)0xFFFB9)\r
-#define DMC0 (*(volatile union un_dmc0 *)0xFFFBA).dmc0\r
-#define DMC0_bit (*(volatile union un_dmc0 *)0xFFFBA).BIT\r
-#define DMC1 (*(volatile union un_dmc1 *)0xFFFBB).dmc1\r
-#define DMC1_bit (*(volatile union un_dmc1 *)0xFFFBB).BIT\r
-#define DRC0 (*(volatile union un_drc0 *)0xFFFBC).drc0\r
-#define DRC0_bit (*(volatile union un_drc0 *)0xFFFBC).BIT\r
-#define DRC1 (*(volatile union un_drc1 *)0xFFFBD).drc1\r
-#define DRC1_bit (*(volatile union un_drc1 *)0xFFFBD).BIT\r
-#define IF2 (*(volatile union un_if2 *)0xFFFD0).if2\r
-#define IF2_bit (*(volatile union un_if2 *)0xFFFD0).BIT\r
-#define IF2L (*(volatile union un_if2l *)0xFFFD0).if2l\r
-#define IF2L_bit (*(volatile union un_if2l *)0xFFFD0).BIT\r
-#define IF2H (*(volatile union un_if2h *)0xFFFD1).if2h\r
-#define IF2H_bit (*(volatile union un_if2h *)0xFFFD1).BIT\r
-#define IF3 (*(volatile union un_if3 *)0xFFFD2).if3\r
-#define IF3_bit (*(volatile union un_if3 *)0xFFFD2).BIT\r
-#define IF3L (*(volatile union un_if3l *)0xFFFD2).if3l\r
-#define IF3L_bit (*(volatile union un_if3l *)0xFFFD2).BIT\r
-#define MK2 (*(volatile union un_mk2 *)0xFFFD4).mk2\r
-#define MK2_bit (*(volatile union un_mk2 *)0xFFFD4).BIT\r
-#define MK2L (*(volatile union un_mk2l *)0xFFFD4).mk2l\r
-#define MK2L_bit (*(volatile union un_mk2l *)0xFFFD4).BIT\r
-#define MK2H (*(volatile union un_mk2h *)0xFFFD5).mk2h\r
-#define MK2H_bit (*(volatile union un_mk2h *)0xFFFD5).BIT\r
-#define MK3 (*(volatile union un_mk3 *)0xFFFD6).mk3\r
-#define MK3_bit (*(volatile union un_mk3 *)0xFFFD6).BIT\r
-#define MK3L (*(volatile union un_mk3l *)0xFFFD6).mk3l\r
-#define MK3L_bit (*(volatile union un_mk3l *)0xFFFD6).BIT\r
-#define PR02 (*(volatile union un_pr02 *)0xFFFD8).pr02\r
-#define PR02_bit (*(volatile union un_pr02 *)0xFFFD8).BIT\r
-#define PR02L (*(volatile union un_pr02l *)0xFFFD8).pr02l\r
-#define PR02L_bit (*(volatile union un_pr02l *)0xFFFD8).BIT\r
-#define PR02H (*(volatile union un_pr02h *)0xFFFD9).pr02h\r
-#define PR02H_bit (*(volatile union un_pr02h *)0xFFFD9).BIT\r
-#define PR03 (*(volatile union un_pr03 *)0xFFFDA).pr03\r
-#define PR03_bit (*(volatile union un_pr03 *)0xFFFDA).BIT\r
-#define PR03L (*(volatile union un_pr03l *)0xFFFDA).pr03l\r
-#define PR03L_bit (*(volatile union un_pr03l *)0xFFFDA).BIT\r
-#define PR12 (*(volatile union un_pr12 *)0xFFFDC).pr12\r
-#define PR12_bit (*(volatile union un_pr12 *)0xFFFDC).BIT\r
-#define PR12L (*(volatile union un_pr12l *)0xFFFDC).pr12l\r
-#define PR12L_bit (*(volatile union un_pr12l *)0xFFFDC).BIT\r
-#define PR12H (*(volatile union un_pr12h *)0xFFFDD).pr12h\r
-#define PR12H_bit (*(volatile union un_pr12h *)0xFFFDD).BIT\r
-#define PR13 (*(volatile union un_pr13 *)0xFFFDE).pr13\r
-#define PR13_bit (*(volatile union un_pr13 *)0xFFFDE).BIT\r
-#define PR13L (*(volatile union un_pr13l *)0xFFFDE).pr13l\r
-#define PR13L_bit (*(volatile union un_pr13l *)0xFFFDE).BIT\r
-#define IF0 (*(volatile union un_if0 *)0xFFFE0).if0\r
-#define IF0_bit (*(volatile union un_if0 *)0xFFFE0).BIT\r
-#define IF0L (*(volatile union un_if0l *)0xFFFE0).if0l\r
-#define IF0L_bit (*(volatile union un_if0l *)0xFFFE0).BIT\r
-#define IF0H (*(volatile union un_if0h *)0xFFFE1).if0h\r
-#define IF0H_bit (*(volatile union un_if0h *)0xFFFE1).BIT\r
-#define IF1 (*(volatile union un_if1 *)0xFFFE2).if1\r
-#define IF1_bit (*(volatile union un_if1 *)0xFFFE2).BIT\r
-#define IF1L (*(volatile union un_if1l *)0xFFFE2).if1l\r
-#define IF1L_bit (*(volatile union un_if1l *)0xFFFE2).BIT\r
-#define IF1H (*(volatile union un_if1h *)0xFFFE3).if1h\r
-#define IF1H_bit (*(volatile union un_if1h *)0xFFFE3).BIT\r
-#define MK0 (*(volatile union un_mk0 *)0xFFFE4).mk0\r
-#define MK0_bit (*(volatile union un_mk0 *)0xFFFE4).BIT\r
-#define MK0L (*(volatile union un_mk0l *)0xFFFE4).mk0l\r
-#define MK0L_bit (*(volatile union un_mk0l *)0xFFFE4).BIT\r
-#define MK0H (*(volatile union un_mk0h *)0xFFFE5).mk0h\r
-#define MK0H_bit (*(volatile union un_mk0h *)0xFFFE5).BIT\r
-#define MK1 (*(volatile union un_mk1 *)0xFFFE6).mk1\r
-#define MK1_bit (*(volatile union un_mk1 *)0xFFFE6).BIT\r
-#define MK1L (*(volatile union un_mk1l *)0xFFFE6).mk1l\r
-#define MK1L_bit (*(volatile union un_mk1l *)0xFFFE6).BIT\r
-#define MK1H (*(volatile union un_mk1h *)0xFFFE7).mk1h\r
-#define MK1H_bit (*(volatile union un_mk1h *)0xFFFE7).BIT\r
-#define PR00 (*(volatile union un_pr00 *)0xFFFE8).pr00\r
-#define PR00_bit (*(volatile union un_pr00 *)0xFFFE8).BIT\r
-#define PR00L (*(volatile union un_pr00l *)0xFFFE8).pr00l\r
-#define PR00L_bit (*(volatile union un_pr00l *)0xFFFE8).BIT\r
-#define PR00H (*(volatile union un_pr00h *)0xFFFE9).pr00h\r
-#define PR00H_bit (*(volatile union un_pr00h *)0xFFFE9).BIT\r
-#define PR01 (*(volatile union un_pr01 *)0xFFFEA).pr01\r
-#define PR01_bit (*(volatile union un_pr01 *)0xFFFEA).BIT\r
-#define PR01L (*(volatile union un_pr01l *)0xFFFEA).pr01l\r
-#define PR01L_bit (*(volatile union un_pr01l *)0xFFFEA).BIT\r
-#define PR01H (*(volatile union un_pr01h *)0xFFFEB).pr01h\r
-#define PR01H_bit (*(volatile union un_pr01h *)0xFFFEB).BIT\r
-#define PR10 (*(volatile union un_pr10 *)0xFFFEC).pr10\r
-#define PR10_bit (*(volatile union un_pr10 *)0xFFFEC).BIT\r
-#define PR10L (*(volatile union un_pr10l *)0xFFFEC).pr10l\r
-#define PR10L_bit (*(volatile union un_pr10l *)0xFFFEC).BIT\r
-#define PR10H (*(volatile union un_pr10h *)0xFFFED).pr10h\r
-#define PR10H_bit (*(volatile union un_pr10h *)0xFFFED).BIT\r
-#define PR11 (*(volatile union un_pr11 *)0xFFFEE).pr11\r
-#define PR11_bit (*(volatile union un_pr11 *)0xFFFEE).BIT\r
-#define PR11L (*(volatile union un_pr11l *)0xFFFEE).pr11l\r
-#define PR11L_bit (*(volatile union un_pr11l *)0xFFFEE).BIT\r
-#define PR11H (*(volatile union un_pr11h *)0xFFFEF).pr11h\r
-#define PR11H_bit (*(volatile union un_pr11h *)0xFFFEF).BIT\r
-#define MDAL (*(volatile unsigned short *)0xFFFF0)\r
-#define MULA (*(volatile unsigned short *)0xFFFF0)\r
-#define MDAH (*(volatile unsigned short *)0xFFFF2)\r
-#define MULB (*(volatile unsigned short *)0xFFFF2)\r
-#define MDBH (*(volatile unsigned short *)0xFFFF4)\r
-#define MULOH (*(volatile unsigned short *)0xFFFF4)\r
-#define MDBL (*(volatile unsigned short *)0xFFFF6)\r
-#define MULOL (*(volatile unsigned short *)0xFFFF6)\r
-#define PMC (*(volatile union un_pmc *)0xFFFFE).pmc\r
-#define PMC_bit (*(volatile union un_pmc *)0xFFFFE).BIT\r
-\r
-/*\r
- Sfr bits\r
- */\r
-#define ADCE ADM0_bit.no0\r
-#define ADCS ADM0_bit.no7\r
-#define LCDVLM LCDM1_bit.no0\r
-#define LCDSEL LCDM1_bit.no3\r
-#define BLON LCDM1_bit.no4\r
-#define VLCON LCDM1_bit.no5\r
-#define SCOC LCDM1_bit.no6\r
-#define LCDON LCDM1_bit.no7\r
-#define OPTCKE MLCD_bit.no4\r
-#define COMEXP MLCD_bit.no6\r
-#define MLCDEN MLCD_bit.no7\r
-#define SPD0 IICS0_bit.no0\r
-#define STD0 IICS0_bit.no1\r
-#define ACKD0 IICS0_bit.no2\r
-#define TRC0 IICS0_bit.no3\r
-#define COI0 IICS0_bit.no4\r
-#define EXC0 IICS0_bit.no5\r
-#define ALD0 IICS0_bit.no6\r
-#define MSTS0 IICS0_bit.no7\r
-#define IICRSV0 IICF0_bit.no0\r
-#define STCEN0 IICF0_bit.no1\r
-#define IICBSY0 IICF0_bit.no6\r
-#define STCF0 IICF0_bit.no7\r
-#define FSSTP FSSQ_bit.no6\r
-#define SQST FSSQ_bit.no7\r
-#define SQEND FSASTH_bit.no6\r
-#define ESQEND FSASTH_bit.no7\r
-#define RCLOE1 RTCC0_bit.no5\r
-#define RCLOSEL RTCC0_bit.no6\r
-#define RTCE RTCC0_bit.no7\r
-#define RWAIT RTCC1_bit.no0\r
-#define RWST RTCC1_bit.no1\r
-#define RIFG RTCC1_bit.no3\r
-#define WAFG RTCC1_bit.no4\r
-#define RITE RTCC1_bit.no5\r
-#define WALIE RTCC1_bit.no6\r
-#define WALE RTCC1_bit.no7\r
-#define HIOSTOP CSC_bit.no0\r
-#define XTSTOP CSC_bit.no6\r
-#define MSTOP CSC_bit.no7\r
-#define SDIV CKC_bit.no3\r
-#define MCM0 CKC_bit.no4\r
-#define MCS CKC_bit.no5\r
-#define CSS CKC_bit.no6\r
-#define CLS CKC_bit.no7\r
-#define PCLOE0 CKS0_bit.no7\r
-#define PCLOE1 CKS1_bit.no7\r
-#define LVIF LVIM_bit.no0\r
-#define LVIOMSK LVIM_bit.no1\r
-#define LVISEN LVIM_bit.no7\r
-#define LVILV LVIS_bit.no0\r
-#define LVIMD LVIS_bit.no7\r
-#define DWAIT0 DMC0_bit.no4\r
-#define DS0 DMC0_bit.no5\r
-#define DRS0 DMC0_bit.no6\r
-#define STG0 DMC0_bit.no7\r
-#define DWAIT1 DMC1_bit.no4\r
-#define DS1 DMC1_bit.no5\r
-#define DRS1 DMC1_bit.no6\r
-#define STG1 DMC1_bit.no7\r
-#define DST0 DRC0_bit.no0\r
-#define DEN0 DRC0_bit.no7\r
-#define DST1 DRC1_bit.no0\r
-#define DEN1 DRC1_bit.no7\r
-#define TKBIF2 IF2_bit.no0\r
-#define TMIF04 IF2_bit.no1\r
-#define TMIF05 IF2_bit.no2\r
-#define PIF6 IF2_bit.no3\r
-#define PIF7 IF2_bit.no4\r
-#define LCDIF0 IF2_bit.no5\r
-#define CMPIF0 IF2_bit.no6\r
-#define CMPIF1 IF2_bit.no7\r
-#define TMIF06 IF2H_bit.no0\r
-#define TMIF07 IF2H_bit.no1\r
-#define SREIF3 IF2H_bit.no4\r
-#define MDIF IF2H_bit.no5\r
-#define FLIF IF2H_bit.no7\r
-#define DMAIF2 IF3_bit.no0\r
-#define DMAIF3 IF3_bit.no1\r
-#define TKBMK2 MK2_bit.no0\r
-#define TMMK04 MK2_bit.no1\r
-#define TMMK05 MK2_bit.no2\r
-#define PMK6 MK2_bit.no3\r
-#define PMK7 MK2_bit.no4\r
-#define LCDMK0 MK2_bit.no5\r
-#define CMPMK0 MK2_bit.no6\r
-#define CMPMK1 MK2_bit.no7\r
-#define TMMK06 MK2H_bit.no0\r
-#define TMMK07 MK2H_bit.no1\r
-#define SREMK3 MK2H_bit.no4\r
-#define MDMK MK2H_bit.no5\r
-#define FLMK MK2H_bit.no7\r
-#define DMAMK2 MK3_bit.no0\r
-#define DMAMK3 MK3_bit.no1\r
-#define TKBPR02 PR02_bit.no0\r
-#define TMPR004 PR02_bit.no1\r
-#define TMPR005 PR02_bit.no2\r
-#define PPR06 PR02_bit.no3\r
-#define PPR07 PR02_bit.no4\r
-#define LCDPR00 PR02_bit.no5\r
-#define CMPPR00 PR02_bit.no6\r
-#define CMPPR01 PR02_bit.no7\r
-#define TPR006 PR02H_bit.no0\r
-#define TPR007 PR02H_bit.no1\r
-#define SREPR03 PR02H_bit.no4\r
-#define MDPR0 PR02H_bit.no5\r
-#define FLPR0 PR02H_bit.no7\r
-#define DMAPR02 PR03_bit.no0\r
-#define DMAPR03 PR03_bit.no1\r
-#define TKBPR12 PR12_bit.no0\r
-#define TMPR104 PR12_bit.no1\r
-#define TMPR105 PR12_bit.no2\r
-#define PPR16 PR12_bit.no3\r
-#define PPR17 PR12_bit.no4\r
-#define LCDPR10 PR12_bit.no5\r
-#define CMPPR10 PR12_bit.no6\r
-#define CMPPR11 PR12_bit.no7\r
-#define TPR106 PR12H_bit.no0\r
-#define TPR107 PR12H_bit.no1\r
-#define SREPR13 PR12H_bit.no4\r
-#define MDPR1 PR12H_bit.no5\r
-#define FLPR1 PR12H_bit.no7\r
-#define DMAPR12 PR13_bit.no0\r
-#define DMAPR13 PR13_bit.no1\r
-#define WDTIIF IF0_bit.no0\r
-#define LVIIF IF0_bit.no1\r
-#define PIF0 IF0_bit.no2\r
-#define PIF1 IF0_bit.no3\r
-#define PIF2 IF0_bit.no4\r
-#define PIF3 IF0_bit.no5\r
-#define PIF4 IF0_bit.no6\r
-#define PIF5 IF0_bit.no7\r
-#define STIF2 IF0H_bit.no0\r
-#define SRIF2 IF0H_bit.no1\r
-#define SREIF2 IF0H_bit.no2\r
-#define DMAIF0 IF0H_bit.no3\r
-#define DMAIF1 IF0H_bit.no4\r
-#define CSIIF00 IF0H_bit.no5\r
-#define IICIF00 IF0H_bit.no5\r
-#define STIF0 IF0H_bit.no5\r
-#define TMIF00 IF0H_bit.no6\r
-#define SRIF0 IF0H_bit.no7\r
-#define SREIF0 IF1_bit.no0\r
-#define TMIF01H IF1_bit.no0\r
-#define CSIIF10 IF1_bit.no1\r
-#define IICIF10 IF1_bit.no1\r
-#define STIF1 IF1_bit.no1\r
-#define SRIF1 IF1_bit.no2\r
-#define SREIF1 IF1_bit.no3\r
-#define TMIF03H IF1_bit.no3\r
-#define IICAIF0 IF1_bit.no4\r
-#define RTITIF IF1_bit.no5\r
-#define TMIF01 IF1_bit.no7\r
-#define TMIF02 IF1H_bit.no0\r
-#define TMIF03 IF1H_bit.no1\r
-#define ADIF IF1H_bit.no2\r
-#define RTCIF IF1H_bit.no3\r
-#define TMKAIF IF1H_bit.no4\r
-#define KRIF IF1H_bit.no5\r
-#define STIF3 IF1H_bit.no6\r
-#define SRIF3 IF1H_bit.no7\r
-#define WDTIMK MK0_bit.no0\r
-#define LVIMK MK0_bit.no1\r
-#define PMK0 MK0_bit.no2\r
-#define PMK1 MK0_bit.no3\r
-#define PMK2 MK0_bit.no4\r
-#define PMK3 MK0_bit.no5\r
-#define PMK4 MK0_bit.no6\r
-#define PMK5 MK0_bit.no7\r
-#define STMK2 MK0H_bit.no0\r
-#define SRMK2 MK0H_bit.no1\r
-#define SREMK2 MK0H_bit.no2\r
-#define DMAMK0 MK0H_bit.no3\r
-#define DMAMK1 MK0H_bit.no4\r
-#define CSIMK00 MK0H_bit.no5\r
-#define IICMK00 MK0H_bit.no5\r
-#define STMK0 MK0H_bit.no5\r
-#define TMMK00 MK0H_bit.no6\r
-#define SRMK0 MK0H_bit.no7\r
-#define SREMK0 MK1_bit.no0\r
-#define TMMK01H MK1_bit.no0\r
-#define CSIMK10 MK1_bit.no1\r
-#define IICMK10 MK1_bit.no1\r
-#define STMK1 MK1_bit.no1\r
-#define SRMK1 MK1_bit.no2\r
-#define SREMK1 MK1_bit.no3\r
-#define TMMK03H MK1_bit.no3\r
-#define IICAMK0 MK1_bit.no4\r
-#define RTITMK MK1_bit.no5\r
-#define TMMK01 MK1_bit.no7\r
-#define TMMK02 MK1H_bit.no0\r
-#define TMMK03 MK1H_bit.no1\r
-#define ADMK MK1H_bit.no2\r
-#define RTCMK MK1H_bit.no3\r
-#define TMKAMK MK1H_bit.no4\r
-#define KRMK MK1H_bit.no5\r
-#define STMK3 MK1H_bit.no6\r
-#define SRMK3 MK1H_bit.no7\r
-#define WDTIPR0 PR00_bit.no0\r
-#define LVIPR0 PR00_bit.no1\r
-#define PPR00 PR00_bit.no2\r
-#define PPR01 PR00_bit.no3\r
-#define PPR02 PR00_bit.no4\r
-#define PPR03 PR00_bit.no5\r
-#define PPR04 PR00_bit.no6\r
-#define PPR05 PR00_bit.no7\r
-#define STPR02 PR00H_bit.no0\r
-#define SRPR02 PR00H_bit.no1\r
-#define SREPR02 PR00H_bit.no2\r
-#define DMAPR00 PR00H_bit.no3\r
-#define DMAPR01 PR00H_bit.no4\r
-#define CSIPR000 PR00H_bit.no5\r
-#define IICPR000 PR00H_bit.no5\r
-#define STPR00 PR00H_bit.no5\r
-#define TMPR000 PR00H_bit.no6\r
-#define SRPR00 PR00H_bit.no7\r
-#define SREPR00 PR01_bit.no0\r
-#define TMPR001H PR01_bit.no0\r
-#define CSIPR010 PR01_bit.no1\r
-#define IICPR010 PR01_bit.no1\r
-#define STPR01 PR01_bit.no1\r
-#define SRPR01 PR01_bit.no2\r
-#define SREPR01 PR01_bit.no3\r
-#define TMPR003H PR01_bit.no3\r
-#define IICAPR00 PR01_bit.no4\r
-#define RTITPR0 PR01_bit.no5\r
-#define TMPR001 PR01_bit.no7\r
-#define TMPR002 PR01H_bit.no0\r
-#define TMPR003 PR01H_bit.no1\r
-#define ADPR0 PR01H_bit.no2\r
-#define RTCPR0 PR01H_bit.no3\r
-#define TMKAPR0 PR01H_bit.no4\r
-#define KRPR0 PR01H_bit.no5\r
-#define STPR03 PR01H_bit.no6\r
-#define SRPR03 PR01H_bit.no7\r
-#define WDTIPR1 PR10_bit.no0\r
-#define LVIPR1 PR10_bit.no1\r
-#define PPR10 PR10_bit.no2\r
-#define PPR11 PR10_bit.no3\r
-#define PPR12 PR10_bit.no4\r
-#define PPR13 PR10_bit.no5\r
-#define PPR14 PR10_bit.no6\r
-#define PPR15 PR10_bit.no7\r
-#define STPR12 PR10H_bit.no0\r
-#define SRPR12 PR10H_bit.no1\r
-#define SREPR12 PR10H_bit.no2\r
-#define DMAPR10 PR10H_bit.no3\r
-#define DMAPR11 PR10H_bit.no4\r
-#define CSIPR100 PR10H_bit.no5\r
-#define IICPR100 PR10H_bit.no5\r
-#define STPR10 PR10H_bit.no5\r
-#define TMPR100 PR10H_bit.no6\r
-#define SRPR10 PR10H_bit.no7\r
-#define SREPR10 PR11_bit.no0\r
-#define TMPR101H PR11_bit.no0\r
-#define CSIPR110 PR11_bit.no1\r
-#define IICPR110 PR11_bit.no1\r
-#define STPR11 PR11_bit.no1\r
-#define SRPR11 PR11_bit.no2\r
-#define SREPR11 PR11_bit.no3\r
-#define TMPR103H PR11_bit.no3\r
-#define IICAPR10 PR11_bit.no4\r
-#define RTITPR1 PR11_bit.no5\r
-#define TMPR101 PR11_bit.no7\r
-#define TMPR102 PR11H_bit.no0\r
-#define TMPR103 PR11H_bit.no1\r
-#define ADPR1 PR11H_bit.no2\r
-#define RTCPR1 PR11H_bit.no3\r
-#define TMKAPR1 PR11H_bit.no4\r
-#define KRPR1 PR11H_bit.no5\r
-#define STPR13 PR11H_bit.no6\r
-#define SRPR13 PR11H_bit.no7\r
-#define MAA PMC_bit.no0\r
-\r
-/*\r
- Interrupt vector addresses\r
- */\r
-#define RST_vect (0x0)\r
-#define INTDBG_vect (0x2)\r
-#define INTWDTI_vect (0x4)\r
-#define INTLVI_vect (0x6)\r
-#define INTP0_vect (0x8)\r
-#define INTP1_vect (0xA)\r
-#define INTP2_vect (0xC)\r
-#define INTP3_vect (0xE)\r
-#define INTP4_vect (0x10)\r
-#define INTP5_vect (0x12)\r
-#define INTST2_vect (0x14)\r
-#define INTSR2_vect (0x16)\r
-#define INTSRE2_vect (0x18)\r
-#define INTDMA0_vect (0x1A)\r
-#define INTDMA1_vect (0x1C)\r
-#define INTCSI00_vect (0x1E)\r
-#define INTIIC00_vect (0x1E)\r
-#define INTST0_vect (0x1E)\r
-#define INTTM00_vect (0x20)\r
-#define INTSR0_vect (0x22)\r
-#define INTSRE0_vect (0x24)\r
-#define INTTM01H_vect (0x24)\r
-#define INTCSI10_vect (0x26)\r
-#define INTIIC10_vect (0x26)\r
-#define INTST1_vect (0x26)\r
-#define INTSR1_vect (0x28)\r
-#define INTSRE1_vect (0x2A)\r
-#define INTTM03H_vect (0x2A)\r
-#define INTIICA0_vect (0x2C)\r
-#define INTRTIT_vect (0x2E)\r
-#define INTTM01_vect (0x32)\r
-#define INTTM02_vect (0x34)\r
-#define INTTM03_vect (0x36)\r
-#define INTAD_vect (0x38)\r
-#define INTRTC_vect (0x3A)\r
-#define INTIT_vect (0x3C)\r
-#define INTKR_vect (0x3E)\r
-#define INTST3_vect (0x40)\r
-#define INTSR3_vect (0x42)\r
-#define INTTKB20_vect (0x44)\r
-#define INTTM04_vect (0x46)\r
-#define INTTM05_vect (0x48)\r
-#define INTP6_vect (0x4A)\r
-#define INTP7_vect (0x4C)\r
-#define INTLCD0_vect (0x4E)\r
-#define INTCMP0_vect (0x50)\r
-#define INTCMP1_vect (0x52)\r
-#define INTTM06_vect (0x54)\r
-#define INTTM07_vect (0x56)\r
-#define INTSRE3_vect (0x5C)\r
-#define INTMD_vect (0x5E)\r
-#define INTFL_vect (0x62)\r
-#define INTDMA2_vect (0x64)\r
-#define INTDMA3_vect (0x66)\r
-#define BRK_I_vect (0x7E)\r
-#endif\r
diff --git a/FreeRTOS/Demo/RL78_E2Studio_GCC/src/iodefine/iodefine_RL78L13_ext.h b/FreeRTOS/Demo/RL78_E2Studio_GCC/src/iodefine/iodefine_RL78L13_ext.h
deleted file mode 100644 (file)
index dca40d0..0000000
+++ /dev/null
@@ -1,946 +0,0 @@
-/***********************************************************************/
-/*                                                                                                                    */
-/*      PROJECT NAME :  RL78L13                                        */
-/*      FILE         :  iodefine_ext.h                                 */
-/*      DESCRIPTION  :  Definition of Extended SFRs                    */
-/*      CPU SERIES   :  RL78 - L13                                     */
-/*      CPU TYPE     :  R5F10WMG                                       */
-/*                                                                                                                    */
-/*      This file is generated by e2studio.                        */
-/*                                                                                                                    */
-/***********************************************************************/                                                                       \r
-                                                                                   \r
-/************************************************************************/\r
-/* Header file generated from device file:                              */\r
-/*    DR5F10WMG.DVF                                                     */\r
-/*    Copyright(C) 2012 Renesas                                         */\r
-/*    Version E1.00d                                                    */\r
-/************************************************************************/\r
-\r
-#ifndef __IOREG_BIT_STRUCTURES\r
-#define __IOREG_BIT_STRUCTURES\r
-typedef struct {\r
-       unsigned char no0 :1;\r
-       unsigned char no1 :1;\r
-       unsigned char no2 :1;\r
-       unsigned char no3 :1;\r
-       unsigned char no4 :1;\r
-       unsigned char no5 :1;\r
-       unsigned char no6 :1;\r
-       unsigned char no7 :1;\r
-} __BITS8;\r
-\r
-typedef struct {\r
-       unsigned short no0 :1;\r
-       unsigned short no1 :1;\r
-       unsigned short no2 :1;\r
-       unsigned short no3 :1;\r
-       unsigned short no4 :1;\r
-       unsigned short no5 :1;\r
-       unsigned short no6 :1;\r
-       unsigned short no7 :1;\r
-       unsigned short no8 :1;\r
-       unsigned short no9 :1;\r
-       unsigned short no10 :1;\r
-       unsigned short no11 :1;\r
-       unsigned short no12 :1;\r
-       unsigned short no13 :1;\r
-       unsigned short no14 :1;\r
-       unsigned short no15 :1;\r
-} __BITS16;\r
-\r
-#endif\r
-\r
-#ifndef IODEFINE_EXT_H\r
-#define IODEFINE_EXT_H\r
-\r
-/*\r
- IO Registers\r
- */\r
-union un_adm2 {\r
-       unsigned char adm2;\r
-       __BITS8 BIT;\r
-};\r
-union un_pu0 {\r
-       unsigned char pu0;\r
-       __BITS8 BIT;\r
-};\r
-union un_pu1 {\r
-       unsigned char pu1;\r
-       __BITS8 BIT;\r
-};\r
-union un_pu2 {\r
-       unsigned char pu2;\r
-       __BITS8 BIT;\r
-};\r
-union un_pu3 {\r
-       unsigned char pu3;\r
-       __BITS8 BIT;\r
-};\r
-union un_pu4 {\r
-       unsigned char pu4;\r
-       __BITS8 BIT;\r
-};\r
-union un_pu5 {\r
-       unsigned char pu5;\r
-       __BITS8 BIT;\r
-};\r
-union un_pu7 {\r
-       unsigned char pu7;\r
-       __BITS8 BIT;\r
-};\r
-union un_pu12 {\r
-       unsigned char pu12;\r
-       __BITS8 BIT;\r
-};\r
-union un_pu13 {\r
-       unsigned char pu13;\r
-       __BITS8 BIT;\r
-};\r
-union un_pim0 {\r
-       unsigned char pim0;\r
-       __BITS8 BIT;\r
-};\r
-union un_pim1 {\r
-       unsigned char pim1;\r
-       __BITS8 BIT;\r
-};\r
-union un_pim3 {\r
-       unsigned char pim3;\r
-       __BITS8 BIT;\r
-};\r
-union un_pim4 {\r
-       unsigned char pim4;\r
-       __BITS8 BIT;\r
-};\r
-union un_pim5 {\r
-       unsigned char pim5;\r
-       __BITS8 BIT;\r
-};\r
-union un_pom0 {\r
-       unsigned char pom0;\r
-       __BITS8 BIT;\r
-};\r
-union un_pom1 {\r
-       unsigned char pom1;\r
-       __BITS8 BIT;\r
-};\r
-union un_pom3 {\r
-       unsigned char pom3;\r
-       __BITS8 BIT;\r
-};\r
-union un_pom4 {\r
-       unsigned char pom4;\r
-       __BITS8 BIT;\r
-};\r
-union un_pom5 {\r
-       unsigned char pom5;\r
-       __BITS8 BIT;\r
-};\r
-union un_pom13 {\r
-       unsigned char pom13;\r
-       __BITS8 BIT;\r
-};\r
-union un_pmc1 {\r
-       unsigned char pmc1;\r
-       __BITS8 BIT;\r
-};\r
-union un_pmc2 {\r
-       unsigned char pmc2;\r
-       __BITS8 BIT;\r
-};\r
-union un_pmc4 {\r
-       unsigned char pmc4;\r
-       __BITS8 BIT;\r
-};\r
-union un_nfen0 {\r
-       unsigned char nfen0;\r
-       __BITS8 BIT;\r
-};\r
-union un_nfen1 {\r
-       unsigned char nfen1;\r
-       __BITS8 BIT;\r
-};\r
-union un_isc {\r
-       unsigned char isc;\r
-       __BITS8 BIT;\r
-};\r
-union un_tos {\r
-       unsigned char tos;\r
-       __BITS8 BIT;\r
-};\r
-union un_per1 {\r
-       unsigned char per1;\r
-       __BITS8 BIT;\r
-};\r
-union un_pms {\r
-       unsigned char pms;\r
-       __BITS8 BIT;\r
-};\r
-union un_dflctl {\r
-       unsigned char dflctl;\r
-       __BITS8 BIT;\r
-};\r
-union un_perz {\r
-       unsigned char perz;\r
-       __BITS8 BIT;\r
-};\r
-union un_bectl {\r
-       unsigned char bectl;\r
-       __BITS8 BIT;\r
-};\r
-union un_fsse {\r
-       unsigned char fsse;\r
-       __BITS8 BIT;\r
-};\r
-union un_pfs {\r
-       unsigned char pfs;\r
-       __BITS8 BIT;\r
-};\r
-union un_mduc {\r
-       unsigned char mduc;\r
-       __BITS8 BIT;\r
-};\r
-union un_per0 {\r
-       unsigned char per0;\r
-       __BITS8 BIT;\r
-};\r
-union un_rmc {\r
-       unsigned char rmc;\r
-       __BITS8 BIT;\r
-};\r
-union un_rpectl {\r
-       unsigned char rpectl;\r
-       __BITS8 BIT;\r
-};\r
-union un_porsr {\r
-       unsigned char porsr;\r
-       __BITS8 BIT;\r
-};\r
-union un_se0l {\r
-       unsigned char se0l;\r
-       __BITS8 BIT;\r
-};\r
-union un_ss0l {\r
-       unsigned char ss0l;\r
-       __BITS8 BIT;\r
-};\r
-union un_st0l {\r
-       unsigned char st0l;\r
-       __BITS8 BIT;\r
-};\r
-union un_soe0l {\r
-       unsigned char soe0l;\r
-       __BITS8 BIT;\r
-};\r
-union un_se1l {\r
-       unsigned char se1l;\r
-       __BITS8 BIT;\r
-};\r
-union un_ss1l {\r
-       unsigned char ss1l;\r
-       __BITS8 BIT;\r
-};\r
-union un_st1l {\r
-       unsigned char st1l;\r
-       __BITS8 BIT;\r
-};\r
-union un_soe1l {\r
-       unsigned char soe1l;\r
-       __BITS8 BIT;\r
-};\r
-union un_te0l {\r
-       unsigned char te0l;\r
-       __BITS8 BIT;\r
-};\r
-union un_ts0l {\r
-       unsigned char ts0l;\r
-       __BITS8 BIT;\r
-};\r
-union un_tt0l {\r
-       unsigned char tt0l;\r
-       __BITS8 BIT;\r
-};\r
-union un_toe0l {\r
-       unsigned char toe0l;\r
-       __BITS8 BIT;\r
-};\r
-union un_dmc2 {\r
-       unsigned char dmc2;\r
-       __BITS8 BIT;\r
-};\r
-union un_dmc3 {\r
-       unsigned char dmc3;\r
-       __BITS8 BIT;\r
-};\r
-union un_drc2 {\r
-       unsigned char drc2;\r
-       __BITS8 BIT;\r
-};\r
-union un_drc3 {\r
-       unsigned char drc3;\r
-       __BITS8 BIT;\r
-};\r
-union un_dwaitall {\r
-       unsigned char dwaitall;\r
-       __BITS8 BIT;\r
-};\r
-union un_iicctl00 {\r
-       unsigned char iicctl00;\r
-       __BITS8 BIT;\r
-};\r
-union un_iicctl01 {\r
-       unsigned char iicctl01;\r
-       __BITS8 BIT;\r
-};\r
-union un_crc0ctl {\r
-       unsigned char crc0ctl;\r
-       __BITS8 BIT;\r
-};\r
-union un_pfseg0 {\r
-       unsigned char pfseg0;\r
-       __BITS8 BIT;\r
-};\r
-union un_pfseg1 {\r
-       unsigned char pfseg1;\r
-       __BITS8 BIT;\r
-};\r
-union un_pfseg2 {\r
-       unsigned char pfseg2;\r
-       __BITS8 BIT;\r
-};\r
-union un_pfseg3 {\r
-       unsigned char pfseg3;\r
-       __BITS8 BIT;\r
-};\r
-union un_pfseg4 {\r
-       unsigned char pfseg4;\r
-       __BITS8 BIT;\r
-};\r
-union un_pfseg5 {\r
-       unsigned char pfseg5;\r
-       __BITS8 BIT;\r
-};\r
-union un_pfseg6 {\r
-       unsigned char pfseg6;\r
-       __BITS8 BIT;\r
-};\r
-union un_isclcd {\r
-       unsigned char isclcd;\r
-       __BITS8 BIT;\r
-};\r
-union un_compmdr {\r
-       unsigned char compmdr;\r
-       __BITS8 BIT;\r
-};\r
-union un_compfir {\r
-       unsigned char compfir;\r
-       __BITS8 BIT;\r
-};\r
-union un_compocr {\r
-       unsigned char compocr;\r
-       __BITS8 BIT;\r
-};\r
-union un_comptcr {\r
-       unsigned char comptcr;\r
-       __BITS8 BIT;\r
-};\r
-union un_tkbtrg0 {\r
-       unsigned char tkbtrg0;\r
-       __BITS8 BIT;\r
-};\r
-union un_tkbflg0 {\r
-       unsigned char tkbflg0;\r
-       __BITS8 BIT;\r
-};\r
-union un_tkbioc00 {\r
-       unsigned char tkbioc00;\r
-       __BITS8 BIT;\r
-};\r
-union un_tkbclr0 {\r
-       unsigned char tkbclr0;\r
-       __BITS8 BIT;\r
-};\r
-union un_tkbioc01 {\r
-       unsigned char tkbioc01;\r
-       __BITS8 BIT;\r
-};\r
-union un_tkbctl01 {\r
-       unsigned char tkbctl01;\r
-       __BITS8 BIT;\r
-};\r
-union un_tkbpahfs0 {\r
-       unsigned char tkbpahfs0;\r
-       __BITS8 BIT;\r
-};\r
-union un_tkbpahft0 {\r
-       unsigned char tkbpahft0;\r
-       __BITS8 BIT;\r
-};\r
-union un_tkbpaflg0 {\r
-       unsigned char tkbpaflg0;\r
-       __BITS8 BIT;\r
-};\r
-union un_tkbpactl02 {\r
-       unsigned char tkbpactl02;\r
-       __BITS8 BIT;\r
-};\r
-\r
-#define ADM2 (*(volatile union un_adm2 *)0xF0010).adm2\r
-#define ADM2_bit (*(volatile union un_adm2 *)0xF0010).BIT\r
-#define ADUL (*(volatile unsigned char *)0xF0011)\r
-#define ADLL (*(volatile unsigned char *)0xF0012)\r
-#define ADTES (*(volatile unsigned char *)0xF0013)\r
-#define LCDI (*(volatile unsigned char *)0xF001F)\r
-#define PU0 (*(volatile union un_pu0 *)0xF0030).pu0\r
-#define PU0_bit (*(volatile union un_pu0 *)0xF0030).BIT\r
-#define PU1 (*(volatile union un_pu1 *)0xF0031).pu1\r
-#define PU1_bit (*(volatile union un_pu1 *)0xF0031).BIT\r
-#define PU2 (*(volatile union un_pu2 *)0xF0032).pu2\r
-#define PU2_bit (*(volatile union un_pu2 *)0xF0032).BIT\r
-#define PU3 (*(volatile union un_pu3 *)0xF0033).pu3\r
-#define PU3_bit (*(volatile union un_pu3 *)0xF0033).BIT\r
-#define PU4 (*(volatile union un_pu4 *)0xF0034).pu4\r
-#define PU4_bit (*(volatile union un_pu4 *)0xF0034).BIT\r
-#define PU5 (*(volatile union un_pu5 *)0xF0035).pu5\r
-#define PU5_bit (*(volatile union un_pu5 *)0xF0035).BIT\r
-#define PU7 (*(volatile union un_pu7 *)0xF0037).pu7\r
-#define PU7_bit (*(volatile union un_pu7 *)0xF0037).BIT\r
-#define PU12 (*(volatile union un_pu12 *)0xF003C).pu12\r
-#define PU12_bit (*(volatile union un_pu12 *)0xF003C).BIT\r
-#define PU13 (*(volatile union un_pu13 *)0xF003D).pu13\r
-#define PU13_bit (*(volatile union un_pu13 *)0xF003D).BIT\r
-#define PIM0 (*(volatile union un_pim0 *)0xF0040).pim0\r
-#define PIM0_bit (*(volatile union un_pim0 *)0xF0040).BIT\r
-#define PIM1 (*(volatile union un_pim1 *)0xF0041).pim1\r
-#define PIM1_bit (*(volatile union un_pim1 *)0xF0041).BIT\r
-#define PIM3 (*(volatile union un_pim3 *)0xF0043).pim3\r
-#define PIM3_bit (*(volatile union un_pim3 *)0xF0043).BIT\r
-#define PIM4 (*(volatile union un_pim4 *)0xF0044).pim4\r
-#define PIM4_bit (*(volatile union un_pim4 *)0xF0044).BIT\r
-#define PIM5 (*(volatile union un_pim5 *)0xF0045).pim5\r
-#define PIM5_bit (*(volatile union un_pim5 *)0xF0045).BIT\r
-#define POM0 (*(volatile union un_pom0 *)0xF0050).pom0\r
-#define POM0_bit (*(volatile union un_pom0 *)0xF0050).BIT\r
-#define POM1 (*(volatile union un_pom1 *)0xF0051).pom1\r
-#define POM1_bit (*(volatile union un_pom1 *)0xF0051).BIT\r
-#define POM3 (*(volatile union un_pom3 *)0xF0053).pom3\r
-#define POM3_bit (*(volatile union un_pom3 *)0xF0053).BIT\r
-#define POM4 (*(volatile union un_pom4 *)0xF0054).pom4\r
-#define POM4_bit (*(volatile union un_pom4 *)0xF0054).BIT\r
-#define POM5 (*(volatile union un_pom5 *)0xF0055).pom5\r
-#define POM5_bit (*(volatile union un_pom5 *)0xF0055).BIT\r
-#define POM13 (*(volatile union un_pom13 *)0xF005D).pom13\r
-#define POM13_bit (*(volatile union un_pom13 *)0xF005D).BIT\r
-#define PMC1 (*(volatile union un_pmc1 *)0xF0061).pmc1\r
-#define PMC1_bit (*(volatile union un_pmc1 *)0xF0061).BIT\r
-#define PMC2 (*(volatile union un_pmc2 *)0xF0062).pmc2\r
-#define PMC2_bit (*(volatile union un_pmc2 *)0xF0062).BIT\r
-#define PMC4 (*(volatile union un_pmc4 *)0xF0064).pmc4\r
-#define PMC4_bit (*(volatile union un_pmc4 *)0xF0064).BIT\r
-#define NFEN0 (*(volatile union un_nfen0 *)0xF0070).nfen0\r
-#define NFEN0_bit (*(volatile union un_nfen0 *)0xF0070).BIT\r
-#define NFEN1 (*(volatile union un_nfen1 *)0xF0071).nfen1\r
-#define NFEN1_bit (*(volatile union un_nfen1 *)0xF0071).BIT\r
-#define ISC (*(volatile union un_isc *)0xF0073).isc\r
-#define ISC_bit (*(volatile union un_isc *)0xF0073).BIT\r
-#define TIS0 (*(volatile unsigned char *)0xF0074)\r
-#define ADPC (*(volatile unsigned char *)0xF0076)\r
-#define PIOR (*(volatile unsigned char *)0xF0077)\r
-#define IAWCTL (*(volatile unsigned char *)0xF0078)\r
-#define TOS (*(volatile union un_tos *)0xF0079).tos\r
-#define TOS_bit (*(volatile union un_tos *)0xF0079).BIT\r
-#define PER1 (*(volatile union un_per1 *)0xF007A).per1\r
-#define PER1_bit (*(volatile union un_per1 *)0xF007A).BIT\r
-#define PMS (*(volatile union un_pms *)0xF007B).pms\r
-#define PMS_bit (*(volatile union un_pms *)0xF007B).BIT\r
-#define PWCTKB (*(volatile unsigned char *)0xF007C)\r
-#define PRDSEL (*(volatile unsigned short *)0xF007E)\r
-#define TOOLEN (*(volatile unsigned char *)0xF0080)\r
-#define BPAL0 (*(volatile unsigned char *)0xF0081)\r
-#define BPAH0 (*(volatile unsigned char *)0xF0082)\r
-#define BPAS0 (*(volatile unsigned char *)0xF0083)\r
-#define BACDVL0 (*(volatile unsigned char *)0xF0084)\r
-#define BACDVH0 (*(volatile unsigned char *)0xF0085)\r
-#define BACDML0 (*(volatile unsigned char *)0xF0086)\r
-#define BACDMH0 (*(volatile unsigned char *)0xF0087)\r
-#define MONMOD (*(volatile unsigned char *)0xF0088)\r
-#define DFLCTL (*(volatile union un_dflctl *)0xF0090).dflctl\r
-#define DFLCTL_bit (*(volatile union un_dflctl *)0xF0090).BIT\r
-#define PERZ (*(volatile union un_perz *)0xF009F).perz\r
-#define PERZ_bit (*(volatile union un_perz *)0xF009F).BIT\r
-#define HIOTRM (*(volatile unsigned char *)0xF00A0)\r
-#define BECTL (*(volatile union un_bectl *)0xF00A1).bectl\r
-#define BECTL_bit (*(volatile union un_bectl *)0xF00A1).BIT\r
-#define HOCODIV (*(volatile unsigned char *)0xF00A8)\r
-#define TEMPCAL0 (*(volatile unsigned char *)0xF00AC)\r
-#define TEMPCAL1 (*(volatile unsigned char *)0xF00AD)\r
-#define TEMPCAL2 (*(volatile unsigned char *)0xF00AE)\r
-#define TEMPCAL3 (*(volatile unsigned char *)0xF00AF)\r
-#define FLSEC (*(volatile unsigned short *)0xF00B0)\r
-#define FLFSWS (*(volatile unsigned short *)0xF00B2)\r
-#define FLFSWE (*(volatile unsigned short *)0xF00B4)\r
-#define FSSET (*(volatile unsigned char *)0xF00B6)\r
-#define FSSE (*(volatile union un_fsse *)0xF00B7).fsse\r
-#define FSSE_bit (*(volatile union un_fsse *)0xF00B7).BIT\r
-#define FLFADL (*(volatile unsigned short *)0xF00B8)\r
-#define FLFADH (*(volatile unsigned char *)0xF00BA)\r
-#define PFCMD (*(volatile unsigned char *)0xF00C0)\r
-#define PFS (*(volatile union un_pfs *)0xF00C1).pfs\r
-#define PFS_bit (*(volatile union un_pfs *)0xF00C1).BIT\r
-#define FLRL (*(volatile unsigned short *)0xF00C2)\r
-#define FLRH (*(volatile unsigned short *)0xF00C4)\r
-#define FLWE (*(volatile unsigned char *)0xF00C6)\r
-#define FLRE (*(volatile unsigned char *)0xF00C7)\r
-#define FLTMS (*(volatile unsigned short *)0xF00C8)\r
-#define DFLMC (*(volatile unsigned short *)0xF00CA)\r
-#define FLMCL (*(volatile unsigned short *)0xF00CC)\r
-#define FLMCH (*(volatile unsigned char *)0xF00CE)\r
-#define FSCTL (*(volatile unsigned char *)0xF00CF)\r
-#define ICEADR (*(volatile unsigned short *)0xF00D0)\r
-#define ICEDAT (*(volatile unsigned short *)0xF00D2)\r
-#define MDCL (*(volatile unsigned short *)0xF00E0)\r
-#define MDCH (*(volatile unsigned short *)0xF00E2)\r
-#define MDUC (*(volatile union un_mduc *)0xF00E8).mduc\r
-#define MDUC_bit (*(volatile union un_mduc *)0xF00E8).BIT\r
-#define PER0 (*(volatile union un_per0 *)0xF00F0).per0\r
-#define PER0_bit (*(volatile union un_per0 *)0xF00F0).BIT\r
-#define OSMC (*(volatile unsigned char *)0xF00F3)\r
-#define RMC (*(volatile union un_rmc *)0xF00F4).rmc\r
-#define RMC_bit (*(volatile union un_rmc *)0xF00F4).BIT\r
-#define RPECTL (*(volatile union un_rpectl *)0xF00F5).rpectl\r
-#define RPECTL_bit (*(volatile union un_rpectl *)0xF00F5).BIT\r
-#define PORSR (*(volatile union un_porsr *)0xF00F9).porsr\r
-#define PORSR_bit (*(volatile union un_porsr *)0xF00F9).BIT\r
-#define BCDADJ (*(volatile unsigned char *)0xF00FE)\r
-#define VECTCTRL (*(volatile unsigned char *)0xF00FF)\r
-#define SSR00 (*(volatile unsigned short *)0xF0100)\r
-#define SSR00L (*(volatile unsigned char *)0xF0100)\r
-#define SSR01 (*(volatile unsigned short *)0xF0102)\r
-#define SSR01L (*(volatile unsigned char *)0xF0102)\r
-#define SSR02 (*(volatile unsigned short *)0xF0104)\r
-#define SSR02L (*(volatile unsigned char *)0xF0104)\r
-#define SSR03 (*(volatile unsigned short *)0xF0106)\r
-#define SSR03L (*(volatile unsigned char *)0xF0106)\r
-#define SIR00 (*(volatile unsigned short *)0xF0108)\r
-#define SIR00L (*(volatile unsigned char *)0xF0108)\r
-#define SIR01 (*(volatile unsigned short *)0xF010A)\r
-#define SIR01L (*(volatile unsigned char *)0xF010A)\r
-#define SIR02 (*(volatile unsigned short *)0xF010C)\r
-#define SIR02L (*(volatile unsigned char *)0xF010C)\r
-#define SIR03 (*(volatile unsigned short *)0xF010E)\r
-#define SIR03L (*(volatile unsigned char *)0xF010E)\r
-#define SMR00 (*(volatile unsigned short *)0xF0110)\r
-#define SMR01 (*(volatile unsigned short *)0xF0112)\r
-#define SMR02 (*(volatile unsigned short *)0xF0114)\r
-#define SMR03 (*(volatile unsigned short *)0xF0116)\r
-#define SCR00 (*(volatile unsigned short *)0xF0118)\r
-#define SCR01 (*(volatile unsigned short *)0xF011A)\r
-#define SCR02 (*(volatile unsigned short *)0xF011C)\r
-#define SCR03 (*(volatile unsigned short *)0xF011E)\r
-#define SE0 (*(volatile unsigned short *)0xF0120)\r
-#define SE0L (*(volatile union un_se0l *)0xF0120).se0l\r
-#define SE0L_bit (*(volatile union un_se0l *)0xF0120).BIT\r
-#define SS0 (*(volatile unsigned short *)0xF0122)\r
-#define SS0L (*(volatile union un_ss0l *)0xF0122).ss0l\r
-#define SS0L_bit (*(volatile union un_ss0l *)0xF0122).BIT\r
-#define ST0 (*(volatile unsigned short *)0xF0124)\r
-#define ST0L (*(volatile union un_st0l *)0xF0124).st0l\r
-#define ST0L_bit (*(volatile union un_st0l *)0xF0124).BIT\r
-#define SPS0 (*(volatile unsigned short *)0xF0126)\r
-#define SPS0L (*(volatile unsigned char *)0xF0126)\r
-#define SO0 (*(volatile unsigned short *)0xF0128)\r
-#define SOE0 (*(volatile unsigned short *)0xF012A)\r
-#define SOE0L (*(volatile union un_soe0l *)0xF012A).soe0l\r
-#define SOE0L_bit (*(volatile union un_soe0l *)0xF012A).BIT\r
-#define EDR00 (*(volatile unsigned short *)0xF012C)\r
-#define EDR00L (*(volatile unsigned char *)0xF012C)\r
-#define EDR01 (*(volatile unsigned short *)0xF012E)\r
-#define EDR01L (*(volatile unsigned char *)0xF012E)\r
-#define EDR02 (*(volatile unsigned short *)0xF0130)\r
-#define EDR02L (*(volatile unsigned char *)0xF0130)\r
-#define EDR03 (*(volatile unsigned short *)0xF0132)\r
-#define EDR03L (*(volatile unsigned char *)0xF0132)\r
-#define SOL0 (*(volatile unsigned short *)0xF0134)\r
-#define SOL0L (*(volatile unsigned char *)0xF0134)\r
-#define SSC0 (*(volatile unsigned short *)0xF0138)\r
-#define SSC0L (*(volatile unsigned char *)0xF0138)\r
-#define SSR10 (*(volatile unsigned short *)0xF0140)\r
-#define SSR10L (*(volatile unsigned char *)0xF0140)\r
-#define SSR11 (*(volatile unsigned short *)0xF0142)\r
-#define SSR11L (*(volatile unsigned char *)0xF0142)\r
-#define SSR12 (*(volatile unsigned short *)0xF0144)\r
-#define SSR12L (*(volatile unsigned char *)0xF0144)\r
-#define SSR13 (*(volatile unsigned short *)0xF0146)\r
-#define SSR13L (*(volatile unsigned char *)0xF0146)\r
-#define SIR10 (*(volatile unsigned short *)0xF0148)\r
-#define SIR10L (*(volatile unsigned char *)0xF0148)\r
-#define SIR11 (*(volatile unsigned short *)0xF014A)\r
-#define SIR11L (*(volatile unsigned char *)0xF014A)\r
-#define SIR12 (*(volatile unsigned short *)0xF014C)\r
-#define SIR12L (*(volatile unsigned char *)0xF014C)\r
-#define SIR13 (*(volatile unsigned short *)0xF014E)\r
-#define SIR13L (*(volatile unsigned char *)0xF014E)\r
-#define SMR10 (*(volatile unsigned short *)0xF0150)\r
-#define SMR11 (*(volatile unsigned short *)0xF0152)\r
-#define SMR12 (*(volatile unsigned short *)0xF0154)\r
-#define SMR13 (*(volatile unsigned short *)0xF0156)\r
-#define SCR10 (*(volatile unsigned short *)0xF0158)\r
-#define SCR11 (*(volatile unsigned short *)0xF015A)\r
-#define SCR12 (*(volatile unsigned short *)0xF015C)\r
-#define SCR13 (*(volatile unsigned short *)0xF015E)\r
-#define SE1 (*(volatile unsigned short *)0xF0160)\r
-#define SE1L (*(volatile union un_se1l *)0xF0160).se1l\r
-#define SE1L_bit (*(volatile union un_se1l *)0xF0160).BIT\r
-#define SS1 (*(volatile unsigned short *)0xF0162)\r
-#define SS1L (*(volatile union un_ss1l *)0xF0162).ss1l\r
-#define SS1L_bit (*(volatile union un_ss1l *)0xF0162).BIT\r
-#define ST1 (*(volatile unsigned short *)0xF0164)\r
-#define ST1L (*(volatile union un_st1l *)0xF0164).st1l\r
-#define ST1L_bit (*(volatile union un_st1l *)0xF0164).BIT\r
-#define SPS1 (*(volatile unsigned short *)0xF0166)\r
-#define SPS1L (*(volatile unsigned char *)0xF0166)\r
-#define SO1 (*(volatile unsigned short *)0xF0168)\r
-#define SOE1 (*(volatile unsigned short *)0xF016A)\r
-#define SOE1L (*(volatile union un_soe1l *)0xF016A).soe1l\r
-#define SOE1L_bit (*(volatile union un_soe1l *)0xF016A).BIT\r
-#define EDR10 (*(volatile unsigned short *)0xF016C)\r
-#define EDR10L (*(volatile unsigned char *)0xF016C)\r
-#define EDR11 (*(volatile unsigned short *)0xF016E)\r
-#define EDR11L (*(volatile unsigned char *)0xF016E)\r
-#define EDR12 (*(volatile unsigned short *)0xF0170)\r
-#define EDR12L (*(volatile unsigned char *)0xF0170)\r
-#define EDR13 (*(volatile unsigned short *)0xF0172)\r
-#define EDR13L (*(volatile unsigned char *)0xF0172)\r
-#define SOL1 (*(volatile unsigned short *)0xF0174)\r
-#define SOL1L (*(volatile unsigned char *)0xF0174)\r
-#define SSC1 (*(volatile unsigned short *)0xF0178)\r
-#define SSC1L (*(volatile unsigned char *)0xF0178)\r
-#define TCR00 (*(volatile unsigned short *)0xF0180)\r
-#define TCR01 (*(volatile unsigned short *)0xF0182)\r
-#define TCR02 (*(volatile unsigned short *)0xF0184)\r
-#define TCR03 (*(volatile unsigned short *)0xF0186)\r
-#define TCR04 (*(volatile unsigned short *)0xF0188)\r
-#define TCR05 (*(volatile unsigned short *)0xF018A)\r
-#define TCR06 (*(volatile unsigned short *)0xF018C)\r
-#define TCR07 (*(volatile unsigned short *)0xF018E)\r
-#define TMR00 (*(volatile unsigned short *)0xF0190)\r
-#define TMR01 (*(volatile unsigned short *)0xF0192)\r
-#define TMR02 (*(volatile unsigned short *)0xF0194)\r
-#define TMR03 (*(volatile unsigned short *)0xF0196)\r
-#define TMR04 (*(volatile unsigned short *)0xF0198)\r
-#define TMR05 (*(volatile unsigned short *)0xF019A)\r
-#define TMR06 (*(volatile unsigned short *)0xF019C)\r
-#define TMR07 (*(volatile unsigned short *)0xF019E)\r
-#define TSR00 (*(volatile unsigned short *)0xF01A0)\r
-#define TSR00L (*(volatile unsigned char *)0xF01A0)\r
-#define TSR01 (*(volatile unsigned short *)0xF01A2)\r
-#define TSR01L (*(volatile unsigned char *)0xF01A2)\r
-#define TSR02 (*(volatile unsigned short *)0xF01A4)\r
-#define TSR02L (*(volatile unsigned char *)0xF01A4)\r
-#define TSR03 (*(volatile unsigned short *)0xF01A6)\r
-#define TSR03L (*(volatile unsigned char *)0xF01A6)\r
-#define TSR04 (*(volatile unsigned short *)0xF01A8)\r
-#define TSR04L (*(volatile unsigned char *)0xF01A8)\r
-#define TSR05 (*(volatile unsigned short *)0xF01AA)\r
-#define TSR05L (*(volatile unsigned char *)0xF01AA)\r
-#define TSR06 (*(volatile unsigned short *)0xF01AC)\r
-#define TSR06L (*(volatile unsigned char *)0xF01AC)\r
-#define TSR07 (*(volatile unsigned short *)0xF01AE)\r
-#define TSR07L (*(volatile unsigned char *)0xF01AE)\r
-#define TE0 (*(volatile unsigned short *)0xF01B0)\r
-#define TE0L (*(volatile union un_te0l *)0xF01B0).te0l\r
-#define TE0L_bit (*(volatile union un_te0l *)0xF01B0).BIT\r
-#define TS0 (*(volatile unsigned short *)0xF01B2)\r
-#define TS0L (*(volatile union un_ts0l *)0xF01B2).ts0l\r
-#define TS0L_bit (*(volatile union un_ts0l *)0xF01B2).BIT\r
-#define TT0 (*(volatile unsigned short *)0xF01B4)\r
-#define TT0L (*(volatile union un_tt0l *)0xF01B4).tt0l\r
-#define TT0L_bit (*(volatile union un_tt0l *)0xF01B4).BIT\r
-#define TPS0 (*(volatile unsigned short *)0xF01B6)\r
-#define TO0 (*(volatile unsigned short *)0xF01B8)\r
-#define TO0L (*(volatile unsigned char *)0xF01B8)\r
-#define TOE0 (*(volatile unsigned short *)0xF01BA)\r
-#define TOE0L (*(volatile union un_toe0l *)0xF01BA).toe0l\r
-#define TOE0L_bit (*(volatile union un_toe0l *)0xF01BA).BIT\r
-#define TOL0 (*(volatile unsigned short *)0xF01BC)\r
-#define TOL0L (*(volatile unsigned char *)0xF01BC)\r
-#define TOM0 (*(volatile unsigned short *)0xF01BE)\r
-#define TOM0L (*(volatile unsigned char *)0xF01BE)\r
-#define DSA2 (*(volatile unsigned char *)0xF0200)\r
-#define DSA3 (*(volatile unsigned char *)0xF0201)\r
-#define DRA2 (*(volatile unsigned short *)0xF0202)\r
-#define DRA2L (*(volatile unsigned char *)0xF0202)\r
-#define DRA2H (*(volatile unsigned char *)0xF0203)\r
-#define DRA3 (*(volatile unsigned short *)0xF0204)\r
-#define DRA3L (*(volatile unsigned char *)0xF0204)\r
-#define DRA3H (*(volatile unsigned char *)0xF0205)\r
-#define DBC2 (*(volatile unsigned short *)0xF0206)\r
-#define DBC2L (*(volatile unsigned char *)0xF0206)\r
-#define DBC2H (*(volatile unsigned char *)0xF0207)\r
-#define DBC3 (*(volatile unsigned short *)0xF0208)\r
-#define DBC3L (*(volatile unsigned char *)0xF0208)\r
-#define DBC3H (*(volatile unsigned char *)0xF0209)\r
-#define DMC2 (*(volatile union un_dmc2 *)0xF020A).dmc2\r
-#define DMC2_bit (*(volatile union un_dmc2 *)0xF020A).BIT\r
-#define DMC3 (*(volatile union un_dmc3 *)0xF020B).dmc3\r
-#define DMC3_bit (*(volatile union un_dmc3 *)0xF020B).BIT\r
-#define DRC2 (*(volatile union un_drc2 *)0xF020C).drc2\r
-#define DRC2_bit (*(volatile union un_drc2 *)0xF020C).BIT\r
-#define DRC3 (*(volatile union un_drc3 *)0xF020D).drc3\r
-#define DRC3_bit (*(volatile union un_drc3 *)0xF020D).BIT\r
-#define DWAITALL (*(volatile union un_dwaitall *)0xF020F).dwaitall\r
-#define DWAITALL_bit (*(volatile union un_dwaitall *)0xF020F).BIT\r
-#define IICCTL00 (*(volatile union un_iicctl00 *)0xF0230).iicctl00\r
-#define IICCTL00_bit (*(volatile union un_iicctl00 *)0xF0230).BIT\r
-#define IICCTL01 (*(volatile union un_iicctl01 *)0xF0231).iicctl01\r
-#define IICCTL01_bit (*(volatile union un_iicctl01 *)0xF0231).BIT\r
-#define IICWL0 (*(volatile unsigned char *)0xF0232)\r
-#define IICWH0 (*(volatile unsigned char *)0xF0233)\r
-#define SVA0 (*(volatile unsigned char *)0xF0234)\r
-#define IICSE0 (*(volatile unsigned char *)0xF0235)\r
-#define ELSELR00 (*(volatile unsigned char *)0xF0240)\r
-#define ELSELR01 (*(volatile unsigned char *)0xF0241)\r
-#define ELSELR02 (*(volatile unsigned char *)0xF0242)\r
-#define ELSELR03 (*(volatile unsigned char *)0xF0243)\r
-#define ELSELR04 (*(volatile unsigned char *)0xF0244)\r
-#define ELSELR05 (*(volatile unsigned char *)0xF0245)\r
-#define ELSELR06 (*(volatile unsigned char *)0xF0246)\r
-#define ELSELR07 (*(volatile unsigned char *)0xF0247)\r
-#define ELSELR08 (*(volatile unsigned char *)0xF0248)\r
-#define ELSELR09 (*(volatile unsigned char *)0xF0249)\r
-#define CRC0CTL (*(volatile union un_crc0ctl *)0xF02F0).crc0ctl\r
-#define CRC0CTL_bit (*(volatile union un_crc0ctl *)0xF02F0).BIT\r
-#define PGCRCL (*(volatile unsigned short *)0xF02F2)\r
-#define CRCD (*(volatile unsigned short *)0xF02FA)\r
-#define PFSEG0 (*(volatile union un_pfseg0 *)0xF0300).pfseg0\r
-#define PFSEG0_bit (*(volatile union un_pfseg0 *)0xF0300).BIT\r
-#define PFSEG1 (*(volatile union un_pfseg1 *)0xF0301).pfseg1\r
-#define PFSEG1_bit (*(volatile union un_pfseg1 *)0xF0301).BIT\r
-#define PFSEG2 (*(volatile union un_pfseg2 *)0xF0302).pfseg2\r
-#define PFSEG2_bit (*(volatile union un_pfseg2 *)0xF0302).BIT\r
-#define PFSEG3 (*(volatile union un_pfseg3 *)0xF0303).pfseg3\r
-#define PFSEG3_bit (*(volatile union un_pfseg3 *)0xF0303).BIT\r
-#define PFSEG4 (*(volatile union un_pfseg4 *)0xF0304).pfseg4\r
-#define PFSEG4_bit (*(volatile union un_pfseg4 *)0xF0304).BIT\r
-#define PFSEG5 (*(volatile union un_pfseg5 *)0xF0305).pfseg5\r
-#define PFSEG5_bit (*(volatile union un_pfseg5 *)0xF0305).BIT\r
-#define PFSEG6 (*(volatile union un_pfseg6 *)0xF0306).pfseg6\r
-#define PFSEG6_bit (*(volatile union un_pfseg6 *)0xF0306).BIT\r
-#define ISCLCD (*(volatile union un_isclcd *)0xF0308).isclcd\r
-#define ISCLCD_bit (*(volatile union un_isclcd *)0xF0308).BIT\r
-#define SUBCUD (*(volatile unsigned short *)0xF0310)\r
-#define COMPMDR (*(volatile union un_compmdr *)0xF0340).compmdr\r
-#define COMPMDR_bit (*(volatile union un_compmdr *)0xF0340).BIT\r
-#define COMPFIR (*(volatile union un_compfir *)0xF0341).compfir\r
-#define COMPFIR_bit (*(volatile union un_compfir *)0xF0341).BIT\r
-#define COMPOCR (*(volatile union un_compocr *)0xF0342).compocr\r
-#define COMPOCR_bit (*(volatile union un_compocr *)0xF0342).BIT\r
-#define COMPTCR (*(volatile union un_comptcr *)0xF0343).comptcr\r
-#define COMPTCR_bit (*(volatile union un_comptcr *)0xF0343).BIT\r
-#define SEG0 (*(volatile unsigned char *)0xF0400)\r
-#define SEG1 (*(volatile unsigned char *)0xF0401)\r
-#define SEG2 (*(volatile unsigned char *)0xF0402)\r
-#define SEG3 (*(volatile unsigned char *)0xF0403)\r
-#define SEG4 (*(volatile unsigned char *)0xF0404)\r
-#define SEG5 (*(volatile unsigned char *)0xF0405)\r
-#define SEG6 (*(volatile unsigned char *)0xF0406)\r
-#define SEG7 (*(volatile unsigned char *)0xF0407)\r
-#define SEG8 (*(volatile unsigned char *)0xF0408)\r
-#define SEG9 (*(volatile unsigned char *)0xF0409)\r
-#define SEG10 (*(volatile unsigned char *)0xF040A)\r
-#define SEG11 (*(volatile unsigned char *)0xF040B)\r
-#define SEG12 (*(volatile unsigned char *)0xF040C)\r
-#define SEG13 (*(volatile unsigned char *)0xF040D)\r
-#define SEG14 (*(volatile unsigned char *)0xF040E)\r
-#define SEG15 (*(volatile unsigned char *)0xF040F)\r
-#define SEG16 (*(volatile unsigned char *)0xF0410)\r
-#define SEG17 (*(volatile unsigned char *)0xF0411)\r
-#define SEG18 (*(volatile unsigned char *)0xF0412)\r
-#define SEG19 (*(volatile unsigned char *)0xF0413)\r
-#define SEG20 (*(volatile unsigned char *)0xF0414)\r
-#define SEG21 (*(volatile unsigned char *)0xF0415)\r
-#define SEG22 (*(volatile unsigned char *)0xF0416)\r
-#define SEG23 (*(volatile unsigned char *)0xF0417)\r
-#define SEG24 (*(volatile unsigned char *)0xF0418)\r
-#define SEG25 (*(volatile unsigned char *)0xF0419)\r
-#define SEG26 (*(volatile unsigned char *)0xF041A)\r
-#define SEG27 (*(volatile unsigned char *)0xF041B)\r
-#define SEG28 (*(volatile unsigned char *)0xF041C)\r
-#define SEG29 (*(volatile unsigned char *)0xF041D)\r
-#define SEG30 (*(volatile unsigned char *)0xF041E)\r
-#define SEG31 (*(volatile unsigned char *)0xF041F)\r
-#define SEG32 (*(volatile unsigned char *)0xF0420)\r
-#define SEG33 (*(volatile unsigned char *)0xF0421)\r
-#define SEG34 (*(volatile unsigned char *)0xF0422)\r
-#define SEG35 (*(volatile unsigned char *)0xF0423)\r
-#define SEG36 (*(volatile unsigned char *)0xF0424)\r
-#define SEG37 (*(volatile unsigned char *)0xF0425)\r
-#define SEG38 (*(volatile unsigned char *)0xF0426)\r
-#define SEG39 (*(volatile unsigned char *)0xF0427)\r
-#define SEG40 (*(volatile unsigned char *)0xF0428)\r
-#define SEG41 (*(volatile unsigned char *)0xF0429)\r
-#define SEG42 (*(volatile unsigned char *)0xF042A)\r
-#define SEG43 (*(volatile unsigned char *)0xF042B)\r
-#define SEG44 (*(volatile unsigned char *)0xF042C)\r
-#define SEG45 (*(volatile unsigned char *)0xF042D)\r
-#define SEG46 (*(volatile unsigned char *)0xF042E)\r
-#define SEG47 (*(volatile unsigned char *)0xF042F)\r
-#define SEG48 (*(volatile unsigned char *)0xF0430)\r
-#define SEG49 (*(volatile unsigned char *)0xF0431)\r
-#define SEG50 (*(volatile unsigned char *)0xF0432)\r
-#define SEG51 (*(volatile unsigned char *)0xF0433)\r
-#define SEG52 (*(volatile unsigned char *)0xF0434)\r
-#define SEG53 (*(volatile unsigned char *)0xF0435)\r
-#define SEG54 (*(volatile unsigned char *)0xF0436)\r
-#define SEG55 (*(volatile unsigned char *)0xF0437)\r
-#define TKBCR00 (*(volatile unsigned short *)0xF0500)\r
-#define TKBCR01 (*(volatile unsigned short *)0xF0502)\r
-#define TKBCR02 (*(volatile unsigned short *)0xF0504)\r
-#define TKBCR03 (*(volatile unsigned short *)0xF0506)\r
-#define TKBTGCR0 (*(volatile unsigned short *)0xF0508)\r
-#define TKBSIR00 (*(volatile unsigned short *)0xF050A)\r
-#define TKBSIR01 (*(volatile unsigned short *)0xF050C)\r
-#define TKBDNR00 (*(volatile unsigned char *)0xF050E)\r
-#define TKBSSR00 (*(volatile unsigned char *)0xF050F)\r
-#define TKBDNR01 (*(volatile unsigned char *)0xF0510)\r
-#define TKBSSR01 (*(volatile unsigned char *)0xF0511)\r
-#define TKBTRG0 (*(volatile union un_tkbtrg0 *)0xF0512).tkbtrg0\r
-#define TKBTRG0_bit (*(volatile union un_tkbtrg0 *)0xF0512).BIT\r
-#define TKBFLG0 (*(volatile union un_tkbflg0 *)0xF0513).tkbflg0\r
-#define TKBFLG0_bit (*(volatile union un_tkbflg0 *)0xF0513).BIT\r
-#define TKBCRLD00 (*(volatile unsigned short *)0xF0514)\r
-#define TKBCRLD01 (*(volatile unsigned short *)0xF0516)\r
-#define TKBCNT0 (*(volatile unsigned short *)0xF0520)\r
-#define TKBCTL00 (*(volatile unsigned short *)0xF0522)\r
-#define TKBMFR0 (*(volatile unsigned short *)0xF0524)\r
-#define TKBIOC00 (*(volatile union un_tkbioc00 *)0xF0526).tkbioc00\r
-#define TKBIOC00_bit (*(volatile union un_tkbioc00 *)0xF0526).BIT\r
-#define TKBCLR0 (*(volatile union un_tkbclr0 *)0xF0527).tkbclr0\r
-#define TKBCLR0_bit (*(volatile union un_tkbclr0 *)0xF0527).BIT\r
-#define TKBIOC01 (*(volatile union un_tkbioc01 *)0xF0528).tkbioc01\r
-#define TKBIOC01_bit (*(volatile union un_tkbioc01 *)0xF0528).BIT\r
-#define TKBCTL01 (*(volatile union un_tkbctl01 *)0xF0529).tkbctl01\r
-#define TKBCTL01_bit (*(volatile union un_tkbctl01 *)0xF0529).BIT\r
-#define TKBPSCS0 (*(volatile unsigned char *)0xF052A)\r
-#define TKBPACTL00 (*(volatile unsigned short *)0xF0530)\r
-#define TKBPACTL01 (*(volatile unsigned short *)0xF0532)\r
-#define TKBPAHFS0 (*(volatile union un_tkbpahfs0 *)0xF0534).tkbpahfs0\r
-#define TKBPAHFS0_bit (*(volatile union un_tkbpahfs0 *)0xF0534).BIT\r
-#define TKBPAHFT0 (*(volatile union un_tkbpahft0 *)0xF0535).tkbpahft0\r
-#define TKBPAHFT0_bit (*(volatile union un_tkbpahft0 *)0xF0535).BIT\r
-#define TKBPAFLG0 (*(volatile union un_tkbpaflg0 *)0xF0536).tkbpaflg0\r
-#define TKBPAFLG0_bit (*(volatile union un_tkbpaflg0 *)0xF0536).BIT\r
-#define TKBPACTL02 (*(volatile union un_tkbpactl02 *)0xF0537).tkbpactl02\r
-#define TKBPACTL02_bit (*(volatile union un_tkbpactl02 *)0xF0537).BIT\r
-\r
-/*\r
- Sfr bits\r
- */\r
-#define ADTYP ADM2_bit.no0\r
-#define AWC ADM2_bit.no2\r
-#define ADRCK ADM2_bit.no3\r
-#define TOS0 TOS_bit.no0\r
-#define TKB2EN PER1_bit.no4\r
-#define CMPEN PER1_bit.no5\r
-#define TMKAEN PER1_bit.no7\r
-#define DFLEN DFLCTL_bit.no0\r
-#define FSUBEN PERZ_bit.no7\r
-#define BRSAM BECTL_bit.no0\r
-#define ESQST FSSE_bit.no7\r
-#define DIVST MDUC_bit.no0\r
-#define MACSF MDUC_bit.no1\r
-#define MACOF MDUC_bit.no2\r
-#define MDSM MDUC_bit.no3\r
-#define MACMODE MDUC_bit.no6\r
-#define DIVMODE MDUC_bit.no7\r
-#define TAU0EN PER0_bit.no0\r
-#define SAU0EN PER0_bit.no2\r
-#define SAU1EN PER0_bit.no3\r
-#define IICA0EN PER0_bit.no4\r
-#define ADCEN PER0_bit.no5\r
-#define RTCWEN PER0_bit.no7\r
-#define PAENB RMC_bit.no0\r
-#define WDVOL RMC_bit.no7\r
-#define RPEF RPECTL_bit.no0\r
-#define RPERDIS RPECTL_bit.no7\r
-#define DWAIT2 DMC2_bit.no4\r
-#define DS2 DMC2_bit.no5\r
-#define DRS2 DMC2_bit.no6\r
-#define STG2 DMC2_bit.no7\r
-#define DWAIT3 DMC3_bit.no4\r
-#define DS3 DMC3_bit.no5\r
-#define DRS3 DMC3_bit.no6\r
-#define STG3 DMC3_bit.no7\r
-#define DST2 DRC2_bit.no0\r
-#define DEN2 DRC2_bit.no7\r
-#define DST3 DRC3_bit.no0\r
-#define DEN3 DRC3_bit.no7\r
-#define DWAITALL0 DWAITALL_bit.no0\r
-#define PRVARI DWAITALL_bit.no7\r
-#define SPT0 IICCTL00_bit.no0\r
-#define STT0 IICCTL00_bit.no1\r
-#define ACKE0 IICCTL00_bit.no2\r
-#define WTIM0 IICCTL00_bit.no3\r
-#define SPIE0 IICCTL00_bit.no4\r
-#define WREL0 IICCTL00_bit.no5\r
-#define LREL0 IICCTL00_bit.no6\r
-#define IICE0 IICCTL00_bit.no7\r
-#define PRS0 IICCTL01_bit.no0\r
-#define DFC0 IICCTL01_bit.no2\r
-#define SMC0 IICCTL01_bit.no3\r
-#define DAD0 IICCTL01_bit.no4\r
-#define CLD0 IICCTL01_bit.no5\r
-#define WUP0 IICCTL01_bit.no7\r
-#define CRC0EN CRC0CTL_bit.no7\r
-#define C0ENB COMPMDR_bit.no0\r
-#define C0MON COMPMDR_bit.no3\r
-#define C1ENB COMPMDR_bit.no4\r
-#define C1MON COMPMDR_bit.no7\r
-#define C0IE COMPOCR_bit.no0\r
-#define C0OE COMPOCR_bit.no1\r
-#define C0OP COMPOCR_bit.no2\r
-#define C1IE COMPOCR_bit.no4\r
-#define C1OE COMPOCR_bit.no5\r
-#define C1OP COMPOCR_bit.no6\r
-#define SPDMD COMPOCR_bit.no7\r
-#define TKBRDT0 TKBTRG0_bit.no0\r
-#define TKBRSF0 TKBFLG0_bit.no0\r
-#define TKBMFF0 TKBFLG0_bit.no1\r
-#define TKBIEF0 TKBFLG0_bit.no2\r
-#define TKBIRF0 TKBFLG0_bit.no3\r
-#define TKBSEF00 TKBFLG0_bit.no4\r
-#define TKBSEF01 TKBFLG0_bit.no5\r
-#define TKBSSF00 TKBFLG0_bit.no6\r
-#define TKBSSF01 TKBFLG0_bit.no7\r
-#define TKBTOD00 TKBIOC00_bit.no0\r
-#define TKBTOD01 TKBIOC00_bit.no1\r
-#define TKBTOL00 TKBIOC00_bit.no2\r
-#define TKBTOL01 TKBIOC00_bit.no3\r
-#define TKBCLMF0 TKBCLR0_bit.no1\r
-#define TKBCLIE0 TKBCLR0_bit.no2\r
-#define TKBCLIR0 TKBCLR0_bit.no3\r
-#define TKBCLSE00 TKBCLR0_bit.no4\r
-#define TKBCLSE01 TKBCLR0_bit.no5\r
-#define TKBTOE00 TKBIOC01_bit.no0\r
-#define TKBTOE01 TKBIOC01_bit.no1\r
-#define TKBCE0 TKBCTL01_bit.no7\r
-#define TKBPAHTS00 TKBPAHFS0_bit.no0\r
-#define TKBPAHTS01 TKBPAHFS0_bit.no1\r
-#define TKBPAHTT00 TKBPAHFT0_bit.no0\r
-#define TKBPAHTT01 TKBPAHFT0_bit.no1\r
-#define TKBPAHIF00 TKBPAFLG0_bit.no0\r
-#define TKBPAFIF00 TKBPAFLG0_bit.no1\r
-#define TKBPAHIF01 TKBPAFLG0_bit.no2\r
-#define TKBPAFIF01 TKBPAFLG0_bit.no3\r
-#define TKBPAHSF00 TKBPAFLG0_bit.no4\r
-#define TKBPAFSF00 TKBPAFLG0_bit.no5\r
-#define TKBPAHSF01 TKBPAFLG0_bit.no6\r
-#define TKBPAFSF01 TKBPAFLG0_bit.no7\r
-#define TKBPACE00 TKBPACTL02_bit.no0\r
-#define TKBPACE01 TKBPACTL02_bit.no1\r
-\r
-/*\r
- Interrupt vector addresses\r
- */\r
-#endif\r
diff --git a/FreeRTOS/Demo/RL78_E2Studio_GCC/src/iodefine/iodefine_RL78L1C.h b/FreeRTOS/Demo/RL78_E2Studio_GCC/src/iodefine/iodefine_RL78L1C.h
deleted file mode 100644 (file)
index b208556..0000000
+++ /dev/null
@@ -1,1002 +0,0 @@
-   \r
-/************************************************************************/\r
-/* Header file generated from device file:                              */\r
-/*    DR5F110PJ.DVF                                                     */\r
-/*    Copyright(C) 2013 Renesas                                         */\r
-/*    File Version E1.00h                                               */\r
-/*    Tool Version 2.5.211                                              */\r
-/*    Date Generated 07/05/2013                                         */\r
-/************************************************************************/\r
-\r
-#ifndef __INTRINSIC_FUNCTIONS\r
-#define __INTRINSIC_FUNCTIONS\r
-\r
-#define DI() asm("di")\r
-#define EI() asm("ei")\r
-#define HALT() asm("halt")\r
-#define NOP() asm("nop")\r
-#define STOP() asm("stop")\r
-\r
-#endif\r
-\r
-#ifndef __IOREG_BIT_STRUCTURES\r
-#define __IOREG_BIT_STRUCTURES\r
-typedef struct {\r
-       unsigned char no0 :1;\r
-       unsigned char no1 :1;\r
-       unsigned char no2 :1;\r
-       unsigned char no3 :1;\r
-       unsigned char no4 :1;\r
-       unsigned char no5 :1;\r
-       unsigned char no6 :1;\r
-       unsigned char no7 :1;\r
-} __BITS8;\r
-\r
-typedef struct {\r
-       unsigned short no0 :1;\r
-       unsigned short no1 :1;\r
-       unsigned short no2 :1;\r
-       unsigned short no3 :1;\r
-       unsigned short no4 :1;\r
-       unsigned short no5 :1;\r
-       unsigned short no6 :1;\r
-       unsigned short no7 :1;\r
-       unsigned short no8 :1;\r
-       unsigned short no9 :1;\r
-       unsigned short no10 :1;\r
-       unsigned short no11 :1;\r
-       unsigned short no12 :1;\r
-       unsigned short no13 :1;\r
-       unsigned short no14 :1;\r
-       unsigned short no15 :1;\r
-} __BITS16;\r
-\r
-#endif\r
-\r
-#ifndef IODEFINE_H\r
-#define IODEFINE_H\r
-\r
-/*\r
- IO Registers\r
- */\r
-union un_p0 {\r
-       unsigned char p0;\r
-       __BITS8 BIT;\r
-};\r
-union un_p1 {\r
-       unsigned char p1;\r
-       __BITS8 BIT;\r
-};\r
-union un_p2 {\r
-       unsigned char p2;\r
-       __BITS8 BIT;\r
-};\r
-union un_p3 {\r
-       unsigned char p3;\r
-       __BITS8 BIT;\r
-};\r
-union un_p4 {\r
-       unsigned char p4;\r
-       __BITS8 BIT;\r
-};\r
-union un_p5 {\r
-       unsigned char p5;\r
-       __BITS8 BIT;\r
-};\r
-union un_p6 {\r
-       unsigned char p6;\r
-       __BITS8 BIT;\r
-};\r
-union un_p7 {\r
-       unsigned char p7;\r
-       __BITS8 BIT;\r
-};\r
-union un_p12 {\r
-       unsigned char p12;\r
-       __BITS8 BIT;\r
-};\r
-union un_p13 {\r
-       unsigned char p13;\r
-       __BITS8 BIT;\r
-};\r
-union un_p14 {\r
-       unsigned char p14;\r
-       __BITS8 BIT;\r
-};\r
-union un_p15 {\r
-       unsigned char p15;\r
-       __BITS8 BIT;\r
-};\r
-union un_pm0 {\r
-       unsigned char pm0;\r
-       __BITS8 BIT;\r
-};\r
-union un_pm1 {\r
-       unsigned char pm1;\r
-       __BITS8 BIT;\r
-};\r
-union un_pm2 {\r
-       unsigned char pm2;\r
-       __BITS8 BIT;\r
-};\r
-union un_pm3 {\r
-       unsigned char pm3;\r
-       __BITS8 BIT;\r
-};\r
-union un_pm4 {\r
-       unsigned char pm4;\r
-       __BITS8 BIT;\r
-};\r
-union un_pm5 {\r
-       unsigned char pm5;\r
-       __BITS8 BIT;\r
-};\r
-union un_pm6 {\r
-       unsigned char pm6;\r
-       __BITS8 BIT;\r
-};\r
-union un_pm7 {\r
-       unsigned char pm7;\r
-       __BITS8 BIT;\r
-};\r
-union un_pm12 {\r
-       unsigned char pm12;\r
-       __BITS8 BIT;\r
-};\r
-union un_pm14 {\r
-       unsigned char pm14;\r
-       __BITS8 BIT;\r
-};\r
-union un_pm15 {\r
-       unsigned char pm15;\r
-       __BITS8 BIT;\r
-};\r
-union un_adm0 {\r
-       unsigned char adm0;\r
-       __BITS8 BIT;\r
-};\r
-union un_ads {\r
-       unsigned char ads;\r
-       __BITS8 BIT;\r
-};\r
-union un_adm1 {\r
-       unsigned char adm1;\r
-       __BITS8 BIT;\r
-};\r
-union un_krctl {\r
-       unsigned char krctl;\r
-       __BITS8 BIT;\r
-};\r
-union un_krm0 {\r
-       unsigned char krm0;\r
-       __BITS8 BIT;\r
-};\r
-union un_egp0 {\r
-       unsigned char egp0;\r
-       __BITS8 BIT;\r
-};\r
-union un_egn0 {\r
-       unsigned char egn0;\r
-       __BITS8 BIT;\r
-};\r
-union un_lcdm1 {\r
-       unsigned char lcdm1;\r
-       __BITS8 BIT;\r
-};\r
-union un_mlcd {\r
-       unsigned char mlcd;\r
-       __BITS8 BIT;\r
-};\r
-union un_iics0 {\r
-       unsigned char iics0;\r
-       __BITS8 BIT;\r
-};\r
-union un_iicf0 {\r
-       unsigned char iicf0;\r
-       __BITS8 BIT;\r
-};\r
-union un_dam {\r
-       unsigned char dam;\r
-       __BITS8 BIT;\r
-};\r
-union un_rtcc0 {\r
-       unsigned char rtcc0;\r
-       __BITS8 BIT;\r
-};\r
-union un_rtcc1 {\r
-       unsigned char rtcc1;\r
-       __BITS8 BIT;\r
-};\r
-union un_csc {\r
-       unsigned char csc;\r
-       __BITS8 BIT;\r
-};\r
-union un_ostc {\r
-       unsigned char ostc;\r
-       __BITS8 BIT;\r
-};\r
-union un_ckc {\r
-       unsigned char ckc;\r
-       __BITS8 BIT;\r
-};\r
-union un_cks0 {\r
-       unsigned char cks0;\r
-       __BITS8 BIT;\r
-};\r
-union un_cks1 {\r
-       unsigned char cks1;\r
-       __BITS8 BIT;\r
-};\r
-union un_lvim {\r
-       unsigned char lvim;\r
-       __BITS8 BIT;\r
-};\r
-union un_lvis {\r
-       unsigned char lvis;\r
-       __BITS8 BIT;\r
-};\r
-union un_if2 {\r
-       unsigned short if2;\r
-       __BITS16 BIT;\r
-};\r
-union un_if2l {\r
-       unsigned char if2l;\r
-       __BITS8 BIT;\r
-};\r
-union un_if2h {\r
-       unsigned char if2h;\r
-       __BITS8 BIT;\r
-};\r
-union un_if3 {\r
-       unsigned short if3;\r
-       __BITS16 BIT;\r
-};\r
-union un_if3l {\r
-       unsigned char if3l;\r
-       __BITS8 BIT;\r
-};\r
-union un_mk2 {\r
-       unsigned short mk2;\r
-       __BITS16 BIT;\r
-};\r
-union un_mk2l {\r
-       unsigned char mk2l;\r
-       __BITS8 BIT;\r
-};\r
-union un_mk2h {\r
-       unsigned char mk2h;\r
-       __BITS8 BIT;\r
-};\r
-union un_mk3 {\r
-       unsigned short mk3;\r
-       __BITS16 BIT;\r
-};\r
-union un_mk3l {\r
-       unsigned char mk3l;\r
-       __BITS8 BIT;\r
-};\r
-union un_pr02 {\r
-       unsigned short pr02;\r
-       __BITS16 BIT;\r
-};\r
-union un_pr02l {\r
-       unsigned char pr02l;\r
-       __BITS8 BIT;\r
-};\r
-union un_pr02h {\r
-       unsigned char pr02h;\r
-       __BITS8 BIT;\r
-};\r
-union un_pr03 {\r
-       unsigned short pr03;\r
-       __BITS16 BIT;\r
-};\r
-union un_pr03l {\r
-       unsigned char pr03l;\r
-       __BITS8 BIT;\r
-};\r
-union un_pr12 {\r
-       unsigned short pr12;\r
-       __BITS16 BIT;\r
-};\r
-union un_pr12l {\r
-       unsigned char pr12l;\r
-       __BITS8 BIT;\r
-};\r
-union un_pr12h {\r
-       unsigned char pr12h;\r
-       __BITS8 BIT;\r
-};\r
-union un_pr13 {\r
-       unsigned short pr13;\r
-       __BITS16 BIT;\r
-};\r
-union un_pr13l {\r
-       unsigned char pr13l;\r
-       __BITS8 BIT;\r
-};\r
-union un_if0 {\r
-       unsigned short if0;\r
-       __BITS16 BIT;\r
-};\r
-union un_if0l {\r
-       unsigned char if0l;\r
-       __BITS8 BIT;\r
-};\r
-union un_if0h {\r
-       unsigned char if0h;\r
-       __BITS8 BIT;\r
-};\r
-union un_if1 {\r
-       unsigned short if1;\r
-       __BITS16 BIT;\r
-};\r
-union un_if1l {\r
-       unsigned char if1l;\r
-       __BITS8 BIT;\r
-};\r
-union un_if1h {\r
-       unsigned char if1h;\r
-       __BITS8 BIT;\r
-};\r
-union un_mk0 {\r
-       unsigned short mk0;\r
-       __BITS16 BIT;\r
-};\r
-union un_mk0l {\r
-       unsigned char mk0l;\r
-       __BITS8 BIT;\r
-};\r
-union un_mk0h {\r
-       unsigned char mk0h;\r
-       __BITS8 BIT;\r
-};\r
-union un_mk1 {\r
-       unsigned short mk1;\r
-       __BITS16 BIT;\r
-};\r
-union un_mk1l {\r
-       unsigned char mk1l;\r
-       __BITS8 BIT;\r
-};\r
-union un_mk1h {\r
-       unsigned char mk1h;\r
-       __BITS8 BIT;\r
-};\r
-union un_pr00 {\r
-       unsigned short pr00;\r
-       __BITS16 BIT;\r
-};\r
-union un_pr00l {\r
-       unsigned char pr00l;\r
-       __BITS8 BIT;\r
-};\r
-union un_pr00h {\r
-       unsigned char pr00h;\r
-       __BITS8 BIT;\r
-};\r
-union un_pr01 {\r
-       unsigned short pr01;\r
-       __BITS16 BIT;\r
-};\r
-union un_pr01l {\r
-       unsigned char pr01l;\r
-       __BITS8 BIT;\r
-};\r
-union un_pr01h {\r
-       unsigned char pr01h;\r
-       __BITS8 BIT;\r
-};\r
-union un_pr10 {\r
-       unsigned short pr10;\r
-       __BITS16 BIT;\r
-};\r
-union un_pr10l {\r
-       unsigned char pr10l;\r
-       __BITS8 BIT;\r
-};\r
-union un_pr10h {\r
-       unsigned char pr10h;\r
-       __BITS8 BIT;\r
-};\r
-union un_pr11 {\r
-       unsigned short pr11;\r
-       __BITS16 BIT;\r
-};\r
-union un_pr11l {\r
-       unsigned char pr11l;\r
-       __BITS8 BIT;\r
-};\r
-union un_pr11h {\r
-       unsigned char pr11h;\r
-       __BITS8 BIT;\r
-};\r
-union un_pmc {\r
-       unsigned char pmc;\r
-       __BITS8 BIT;\r
-};\r
-\r
-#define P0 (*(volatile union un_p0 *)0xFFF00).p0\r
-#define P0_bit (*(volatile union un_p0 *)0xFFF00).BIT\r
-#define P1 (*(volatile union un_p1 *)0xFFF01).p1\r
-#define P1_bit (*(volatile union un_p1 *)0xFFF01).BIT\r
-#define P2 (*(volatile union un_p2 *)0xFFF02).p2\r
-#define P2_bit (*(volatile union un_p2 *)0xFFF02).BIT\r
-#define P3 (*(volatile union un_p3 *)0xFFF03).p3\r
-#define P3_bit (*(volatile union un_p3 *)0xFFF03).BIT\r
-#define P4 (*(volatile union un_p4 *)0xFFF04).p4\r
-#define P4_bit (*(volatile union un_p4 *)0xFFF04).BIT\r
-#define P5 (*(volatile union un_p5 *)0xFFF05).p5\r
-#define P5_bit (*(volatile union un_p5 *)0xFFF05).BIT\r
-#define P6 (*(volatile union un_p6 *)0xFFF06).p6\r
-#define P6_bit (*(volatile union un_p6 *)0xFFF06).BIT\r
-#define P7 (*(volatile union un_p7 *)0xFFF07).p7\r
-#define P7_bit (*(volatile union un_p7 *)0xFFF07).BIT\r
-#define P12 (*(volatile union un_p12 *)0xFFF0C).p12\r
-#define P12_bit (*(volatile union un_p12 *)0xFFF0C).BIT\r
-#define P13 (*(volatile union un_p13 *)0xFFF0D).p13\r
-#define P13_bit (*(volatile union un_p13 *)0xFFF0D).BIT\r
-#define P14 (*(volatile union un_p14 *)0xFFF0E).p14\r
-#define P14_bit (*(volatile union un_p14 *)0xFFF0E).BIT\r
-#define P15 (*(volatile union un_p15 *)0xFFF0F).p15\r
-#define P15_bit (*(volatile union un_p15 *)0xFFF0F).BIT\r
-#define SDR00 (*(volatile unsigned short *)0xFFF10)\r
-#define SIO00 (*(volatile unsigned char *)0xFFF10)\r
-#define TXD0 (*(volatile unsigned char *)0xFFF10)\r
-#define SDR01 (*(volatile unsigned short *)0xFFF12)\r
-#define RXD0 (*(volatile unsigned char *)0xFFF12)\r
-#define SDR12 (*(volatile unsigned short *)0xFFF14)\r
-#define SIO30 (*(volatile unsigned char *)0xFFF14)\r
-#define TXD3 (*(volatile unsigned char *)0xFFF14)\r
-#define SDR13 (*(volatile unsigned short *)0xFFF16)\r
-#define RXD3 (*(volatile unsigned char *)0xFFF16)\r
-#define TDR00 (*(volatile unsigned short *)0xFFF18)\r
-#define TDR01 (*(volatile unsigned short *)0xFFF1A)\r
-#define TDR01L (*(volatile unsigned char *)0xFFF1A)\r
-#define TDR01H (*(volatile unsigned char *)0xFFF1B)\r
-#define ADCR (*(volatile unsigned short *)0xFFF1E)\r
-#define ADCRH (*(volatile unsigned char *)0xFFF1F)\r
-#define PM0 (*(volatile union un_pm0 *)0xFFF20).pm0\r
-#define PM0_bit (*(volatile union un_pm0 *)0xFFF20).BIT\r
-#define PM1 (*(volatile union un_pm1 *)0xFFF21).pm1\r
-#define PM1_bit (*(volatile union un_pm1 *)0xFFF21).BIT\r
-#define PM2 (*(volatile union un_pm2 *)0xFFF22).pm2\r
-#define PM2_bit (*(volatile union un_pm2 *)0xFFF22).BIT\r
-#define PM3 (*(volatile union un_pm3 *)0xFFF23).pm3\r
-#define PM3_bit (*(volatile union un_pm3 *)0xFFF23).BIT\r
-#define PM4 (*(volatile union un_pm4 *)0xFFF24).pm4\r
-#define PM4_bit (*(volatile union un_pm4 *)0xFFF24).BIT\r
-#define PM5 (*(volatile union un_pm5 *)0xFFF25).pm5\r
-#define PM5_bit (*(volatile union un_pm5 *)0xFFF25).BIT\r
-#define PM6 (*(volatile union un_pm6 *)0xFFF26).pm6\r
-#define PM6_bit (*(volatile union un_pm6 *)0xFFF26).BIT\r
-#define PM7 (*(volatile union un_pm7 *)0xFFF27).pm7\r
-#define PM7_bit (*(volatile union un_pm7 *)0xFFF27).BIT\r
-#define PM12 (*(volatile union un_pm12 *)0xFFF2C).pm12\r
-#define PM12_bit (*(volatile union un_pm12 *)0xFFF2C).BIT\r
-#define PM14 (*(volatile union un_pm14 *)0xFFF2E).pm14\r
-#define PM14_bit (*(volatile union un_pm14 *)0xFFF2E).BIT\r
-#define PM15 (*(volatile union un_pm15 *)0xFFF2F).pm15\r
-#define PM15_bit (*(volatile union un_pm15 *)0xFFF2F).BIT\r
-#define ADM0 (*(volatile union un_adm0 *)0xFFF30).adm0\r
-#define ADM0_bit (*(volatile union un_adm0 *)0xFFF30).BIT\r
-#define ADS (*(volatile union un_ads *)0xFFF31).ads\r
-#define ADS_bit (*(volatile union un_ads *)0xFFF31).BIT\r
-#define ADM1 (*(volatile union un_adm1 *)0xFFF32).adm1\r
-#define ADM1_bit (*(volatile union un_adm1 *)0xFFF32).BIT\r
-#define KRCTL (*(volatile union un_krctl *)0xFFF34).krctl\r
-#define KRCTL_bit (*(volatile union un_krctl *)0xFFF34).BIT\r
-#define KRF (*(volatile unsigned char *)0xFFF35)\r
-#define KRM0 (*(volatile union un_krm0 *)0xFFF37).krm0\r
-#define KRM0_bit (*(volatile union un_krm0 *)0xFFF37).BIT\r
-#define EGP0 (*(volatile union un_egp0 *)0xFFF38).egp0\r
-#define EGP0_bit (*(volatile union un_egp0 *)0xFFF38).BIT\r
-#define EGN0 (*(volatile union un_egn0 *)0xFFF39).egn0\r
-#define EGN0_bit (*(volatile union un_egn0 *)0xFFF39).BIT\r
-#define LCDM0 (*(volatile unsigned char *)0xFFF40)\r
-#define LCDM1 (*(volatile union un_lcdm1 *)0xFFF41).lcdm1\r
-#define LCDM1_bit (*(volatile union un_lcdm1 *)0xFFF41).BIT\r
-#define LCDC0 (*(volatile unsigned char *)0xFFF42)\r
-#define VLCD (*(volatile unsigned char *)0xFFF43)\r
-#define SDR02 (*(volatile unsigned short *)0xFFF44)\r
-#define SIO10 (*(volatile unsigned char *)0xFFF44)\r
-#define TXD1 (*(volatile unsigned char *)0xFFF44)\r
-#define SDR03 (*(volatile unsigned short *)0xFFF46)\r
-#define RXD1 (*(volatile unsigned char *)0xFFF46)\r
-#define SDR10 (*(volatile unsigned short *)0xFFF48)\r
-#define SIO20 (*(volatile unsigned char *)0xFFF48)\r
-#define TXD2 (*(volatile unsigned char *)0xFFF48)\r
-#define SDR11 (*(volatile unsigned short *)0xFFF4A)\r
-#define RXD2 (*(volatile unsigned char *)0xFFF4A)\r
-#define MLCD (*(volatile union un_mlcd *)0xFFF4C).mlcd\r
-#define MLCD_bit (*(volatile union un_mlcd *)0xFFF4C).BIT\r
-#define IICA0 (*(volatile unsigned char *)0xFFF50)\r
-#define IICS0 (*(volatile union un_iics0 *)0xFFF51).iics0\r
-#define IICS0_bit (*(volatile union un_iics0 *)0xFFF51).BIT\r
-#define IICF0 (*(volatile union un_iicf0 *)0xFFF52).iicf0\r
-#define IICF0_bit (*(volatile union un_iicf0 *)0xFFF52).BIT\r
-#define TDR02 (*(volatile unsigned short *)0xFFF64)\r
-#define TDR03 (*(volatile unsigned short *)0xFFF66)\r
-#define TDR03L (*(volatile unsigned char *)0xFFF66)\r
-#define TDR03H (*(volatile unsigned char *)0xFFF67)\r
-#define TDR04 (*(volatile unsigned short *)0xFFF68)\r
-#define TDR05 (*(volatile unsigned short *)0xFFF6A)\r
-#define TDR06 (*(volatile unsigned short *)0xFFF6C)\r
-#define TDR07 (*(volatile unsigned short *)0xFFF6E)\r
-#define DACS0 (*(volatile unsigned char *)0xFFF74)\r
-#define DACS1 (*(volatile unsigned char *)0xFFF75)\r
-#define DAM (*(volatile union un_dam *)0xFFF76).dam\r
-#define DAM_bit (*(volatile union un_dam *)0xFFF76).BIT\r
-#define ITMC (*(volatile unsigned short *)0xFFF90)\r
-#define SEC (*(volatile unsigned char *)0xFFF92)\r
-#define MIN (*(volatile unsigned char *)0xFFF93)\r
-#define HOUR (*(volatile unsigned char *)0xFFF94)\r
-#define WEEK (*(volatile unsigned char *)0xFFF95)\r
-#define DAY (*(volatile unsigned char *)0xFFF96)\r
-#define MONTH (*(volatile unsigned char *)0xFFF97)\r
-#define YEAR (*(volatile unsigned char *)0xFFF98)\r
-#define ALARMWM (*(volatile unsigned char *)0xFFF9A)\r
-#define ALARMWH (*(volatile unsigned char *)0xFFF9B)\r
-#define ALARMWW (*(volatile unsigned char *)0xFFF9C)\r
-#define RTCC0 (*(volatile union un_rtcc0 *)0xFFF9D).rtcc0\r
-#define RTCC0_bit (*(volatile union un_rtcc0 *)0xFFF9D).BIT\r
-#define RTCC1 (*(volatile union un_rtcc1 *)0xFFF9E).rtcc1\r
-#define RTCC1_bit (*(volatile union un_rtcc1 *)0xFFF9E).BIT\r
-#define CMC (*(volatile unsigned char *)0xFFFA0)\r
-#define CSC (*(volatile union un_csc *)0xFFFA1).csc\r
-#define CSC_bit (*(volatile union un_csc *)0xFFFA1).BIT\r
-#define OSTC (*(volatile union un_ostc *)0xFFFA2).ostc\r
-#define OSTC_bit (*(volatile union un_ostc *)0xFFFA2).BIT\r
-#define OSTS (*(volatile unsigned char *)0xFFFA3)\r
-#define CKC (*(volatile union un_ckc *)0xFFFA4).ckc\r
-#define CKC_bit (*(volatile union un_ckc *)0xFFFA4).BIT\r
-#define CKS0 (*(volatile union un_cks0 *)0xFFFA5).cks0\r
-#define CKS0_bit (*(volatile union un_cks0 *)0xFFFA5).BIT\r
-#define CKS1 (*(volatile union un_cks1 *)0xFFFA6).cks1\r
-#define CKS1_bit (*(volatile union un_cks1 *)0xFFFA6).BIT\r
-#define RESF (*(volatile unsigned char *)0xFFFA8)\r
-#define LVIM (*(volatile union un_lvim *)0xFFFA9).lvim\r
-#define LVIM_bit (*(volatile union un_lvim *)0xFFFA9).BIT\r
-#define LVIS (*(volatile union un_lvis *)0xFFFAA).lvis\r
-#define LVIS_bit (*(volatile union un_lvis *)0xFFFAA).BIT\r
-#define WDTE (*(volatile unsigned char *)0xFFFAB)\r
-#define CRCIN (*(volatile unsigned char *)0xFFFAC)\r
-#define IF2 (*(volatile union un_if2 *)0xFFFD0).if2\r
-#define IF2_bit (*(volatile union un_if2 *)0xFFFD0).BIT\r
-#define IF2L (*(volatile union un_if2l *)0xFFFD0).if2l\r
-#define IF2L_bit (*(volatile union un_if2l *)0xFFFD0).BIT\r
-#define IF2H (*(volatile union un_if2h *)0xFFFD1).if2h\r
-#define IF2H_bit (*(volatile union un_if2h *)0xFFFD1).BIT\r
-#define IF3 (*(volatile union un_if3 *)0xFFFD2).if3\r
-#define IF3_bit (*(volatile union un_if3 *)0xFFFD2).BIT\r
-#define IF3L (*(volatile union un_if3l *)0xFFFD2).if3l\r
-#define IF3L_bit (*(volatile union un_if3l *)0xFFFD2).BIT\r
-#define MK2 (*(volatile union un_mk2 *)0xFFFD4).mk2\r
-#define MK2_bit (*(volatile union un_mk2 *)0xFFFD4).BIT\r
-#define MK2L (*(volatile union un_mk2l *)0xFFFD4).mk2l\r
-#define MK2L_bit (*(volatile union un_mk2l *)0xFFFD4).BIT\r
-#define MK2H (*(volatile union un_mk2h *)0xFFFD5).mk2h\r
-#define MK2H_bit (*(volatile union un_mk2h *)0xFFFD5).BIT\r
-#define MK3 (*(volatile union un_mk3 *)0xFFFD6).mk3\r
-#define MK3_bit (*(volatile union un_mk3 *)0xFFFD6).BIT\r
-#define MK3L (*(volatile union un_mk3l *)0xFFFD6).mk3l\r
-#define MK3L_bit (*(volatile union un_mk3l *)0xFFFD6).BIT\r
-#define PR02 (*(volatile union un_pr02 *)0xFFFD8).pr02\r
-#define PR02_bit (*(volatile union un_pr02 *)0xFFFD8).BIT\r
-#define PR02L (*(volatile union un_pr02l *)0xFFFD8).pr02l\r
-#define PR02L_bit (*(volatile union un_pr02l *)0xFFFD8).BIT\r
-#define PR02H (*(volatile union un_pr02h *)0xFFFD9).pr02h\r
-#define PR02H_bit (*(volatile union un_pr02h *)0xFFFD9).BIT\r
-#define PR03 (*(volatile union un_pr03 *)0xFFFDA).pr03\r
-#define PR03_bit (*(volatile union un_pr03 *)0xFFFDA).BIT\r
-#define PR03L (*(volatile union un_pr03l *)0xFFFDA).pr03l\r
-#define PR03L_bit (*(volatile union un_pr03l *)0xFFFDA).BIT\r
-#define PR12 (*(volatile union un_pr12 *)0xFFFDC).pr12\r
-#define PR12_bit (*(volatile union un_pr12 *)0xFFFDC).BIT\r
-#define PR12L (*(volatile union un_pr12l *)0xFFFDC).pr12l\r
-#define PR12L_bit (*(volatile union un_pr12l *)0xFFFDC).BIT\r
-#define PR12H (*(volatile union un_pr12h *)0xFFFDD).pr12h\r
-#define PR12H_bit (*(volatile union un_pr12h *)0xFFFDD).BIT\r
-#define PR13 (*(volatile union un_pr13 *)0xFFFDE).pr13\r
-#define PR13_bit (*(volatile union un_pr13 *)0xFFFDE).BIT\r
-#define PR13L (*(volatile union un_pr13l *)0xFFFDE).pr13l\r
-#define PR13L_bit (*(volatile union un_pr13l *)0xFFFDE).BIT\r
-#define IF0 (*(volatile union un_if0 *)0xFFFE0).if0\r
-#define IF0_bit (*(volatile union un_if0 *)0xFFFE0).BIT\r
-#define IF0L (*(volatile union un_if0l *)0xFFFE0).if0l\r
-#define IF0L_bit (*(volatile union un_if0l *)0xFFFE0).BIT\r
-#define IF0H (*(volatile union un_if0h *)0xFFFE1).if0h\r
-#define IF0H_bit (*(volatile union un_if0h *)0xFFFE1).BIT\r
-#define IF1 (*(volatile union un_if1 *)0xFFFE2).if1\r
-#define IF1_bit (*(volatile union un_if1 *)0xFFFE2).BIT\r
-#define IF1L (*(volatile union un_if1l *)0xFFFE2).if1l\r
-#define IF1L_bit (*(volatile union un_if1l *)0xFFFE2).BIT\r
-#define IF1H (*(volatile union un_if1h *)0xFFFE3).if1h\r
-#define IF1H_bit (*(volatile union un_if1h *)0xFFFE3).BIT\r
-#define MK0 (*(volatile union un_mk0 *)0xFFFE4).mk0\r
-#define MK0_bit (*(volatile union un_mk0 *)0xFFFE4).BIT\r
-#define MK0L (*(volatile union un_mk0l *)0xFFFE4).mk0l\r
-#define MK0L_bit (*(volatile union un_mk0l *)0xFFFE4).BIT\r
-#define MK0H (*(volatile union un_mk0h *)0xFFFE5).mk0h\r
-#define MK0H_bit (*(volatile union un_mk0h *)0xFFFE5).BIT\r
-#define MK1 (*(volatile union un_mk1 *)0xFFFE6).mk1\r
-#define MK1_bit (*(volatile union un_mk1 *)0xFFFE6).BIT\r
-#define MK1L (*(volatile union un_mk1l *)0xFFFE6).mk1l\r
-#define MK1L_bit (*(volatile union un_mk1l *)0xFFFE6).BIT\r
-#define MK1H (*(volatile union un_mk1h *)0xFFFE7).mk1h\r
-#define MK1H_bit (*(volatile union un_mk1h *)0xFFFE7).BIT\r
-#define PR00 (*(volatile union un_pr00 *)0xFFFE8).pr00\r
-#define PR00_bit (*(volatile union un_pr00 *)0xFFFE8).BIT\r
-#define PR00L (*(volatile union un_pr00l *)0xFFFE8).pr00l\r
-#define PR00L_bit (*(volatile union un_pr00l *)0xFFFE8).BIT\r
-#define PR00H (*(volatile union un_pr00h *)0xFFFE9).pr00h\r
-#define PR00H_bit (*(volatile union un_pr00h *)0xFFFE9).BIT\r
-#define PR01 (*(volatile union un_pr01 *)0xFFFEA).pr01\r
-#define PR01_bit (*(volatile union un_pr01 *)0xFFFEA).BIT\r
-#define PR01L (*(volatile union un_pr01l *)0xFFFEA).pr01l\r
-#define PR01L_bit (*(volatile union un_pr01l *)0xFFFEA).BIT\r
-#define PR01H (*(volatile union un_pr01h *)0xFFFEB).pr01h\r
-#define PR01H_bit (*(volatile union un_pr01h *)0xFFFEB).BIT\r
-#define PR10 (*(volatile union un_pr10 *)0xFFFEC).pr10\r
-#define PR10_bit (*(volatile union un_pr10 *)0xFFFEC).BIT\r
-#define PR10L (*(volatile union un_pr10l *)0xFFFEC).pr10l\r
-#define PR10L_bit (*(volatile union un_pr10l *)0xFFFEC).BIT\r
-#define PR10H (*(volatile union un_pr10h *)0xFFFED).pr10h\r
-#define PR10H_bit (*(volatile union un_pr10h *)0xFFFED).BIT\r
-#define PR11 (*(volatile union un_pr11 *)0xFFFEE).pr11\r
-#define PR11_bit (*(volatile union un_pr11 *)0xFFFEE).BIT\r
-#define PR11L (*(volatile union un_pr11l *)0xFFFEE).pr11l\r
-#define PR11L_bit (*(volatile union un_pr11l *)0xFFFEE).BIT\r
-#define PR11H (*(volatile union un_pr11h *)0xFFFEF).pr11h\r
-#define PR11H_bit (*(volatile union un_pr11h *)0xFFFEF).BIT\r
-#define MACRL (*(volatile unsigned short *)0xFFFF0)\r
-#define MACRH (*(volatile unsigned short *)0xFFFF2)\r
-#define PMC (*(volatile union un_pmc *)0xFFFFE).pmc\r
-#define PMC_bit (*(volatile union un_pmc *)0xFFFFE).BIT\r
-\r
-/*\r
- Sfr bits\r
- */\r
-#define ADCE ADM0_bit.no0\r
-#define ADCS ADM0_bit.no7\r
-#define LCDVLM LCDM1_bit.no0\r
-#define LCDSEL LCDM1_bit.no3\r
-#define BLON LCDM1_bit.no4\r
-#define VLCON LCDM1_bit.no5\r
-#define SCOC LCDM1_bit.no6\r
-#define LCDON LCDM1_bit.no7\r
-#define OPTCKE MLCD_bit.no4\r
-#define COMEXP MLCD_bit.no6\r
-#define LCTZS MLCD_bit.no7\r
-#define SPD0 IICS0_bit.no0\r
-#define STD0 IICS0_bit.no1\r
-#define ACKD0 IICS0_bit.no2\r
-#define TRC0 IICS0_bit.no3\r
-#define COI0 IICS0_bit.no4\r
-#define EXC0 IICS0_bit.no5\r
-#define ALD0 IICS0_bit.no6\r
-#define MSTS0 IICS0_bit.no7\r
-#define IICRSV0 IICF0_bit.no0\r
-#define STCEN0 IICF0_bit.no1\r
-#define IICBSY0 IICF0_bit.no6\r
-#define STCF0 IICF0_bit.no7\r
-#define DACE0 DAM_bit.no4\r
-#define DACE1 DAM_bit.no5\r
-#define CLOE1 RTCC0_bit.no5\r
-#define RTCE RTCC0_bit.no7\r
-#define RWAIT RTCC1_bit.no0\r
-#define RWST RTCC1_bit.no1\r
-#define RIFG RTCC1_bit.no3\r
-#define WAFG RTCC1_bit.no4\r
-#define RITE RTCC1_bit.no5\r
-#define WALIE RTCC1_bit.no6\r
-#define WALE RTCC1_bit.no7\r
-#define HIOSTOP CSC_bit.no0\r
-#define XTSTOP CSC_bit.no6\r
-#define MSTOP CSC_bit.no7\r
-#define SDIV CKC_bit.no3\r
-#define MCM0 CKC_bit.no4\r
-#define MCS CKC_bit.no5\r
-#define CSS CKC_bit.no6\r
-#define CLS CKC_bit.no7\r
-#define PCLOE0 CKS0_bit.no7\r
-#define PCLOE1 CKS1_bit.no7\r
-#define LVIF LVIM_bit.no0\r
-#define LVIOMSK LVIM_bit.no1\r
-#define LVISEN LVIM_bit.no7\r
-#define LVILV LVIS_bit.no0\r
-#define LVIMD LVIS_bit.no7\r
-#define TMIF04 IF2_bit.no1\r
-#define TMIF05 IF2_bit.no2\r
-#define PIF6 IF2_bit.no3\r
-#define PIF7 IF2_bit.no4\r
-#define LCDIF0 IF2_bit.no5\r
-#define CMPIF0 IF2_bit.no6\r
-#define CMPIF1 IF2_bit.no7\r
-#define TMIF06 IF2H_bit.no0\r
-#define TMIF07 IF2H_bit.no1\r
-#define USBIF IF2H_bit.no2\r
-#define RSUIF IF2H_bit.no3\r
-#define SREIF3 IF2H_bit.no4\r
-#define TKB2IF0 IF2H_bit.no5\r
-#define TKB2IF1 IF2H_bit.no6\r
-#define FLIF IF2H_bit.no7\r
-#define TKB2IF2 IF3_bit.no0\r
-#define FIFOIF0 IF3_bit.no1\r
-#define FIFOIF1 IF3_bit.no2\r
-#define TMMK04 MK2_bit.no1\r
-#define TMMK05 MK2_bit.no2\r
-#define PMK6 MK2_bit.no3\r
-#define PMK7 MK2_bit.no4\r
-#define LCDMK0 MK2_bit.no5\r
-#define CMPMK0 MK2_bit.no6\r
-#define CMPMK1 MK2_bit.no7\r
-#define TMMK06 MK2H_bit.no0\r
-#define TMMK07 MK2H_bit.no1\r
-#define USBMK MK2H_bit.no2\r
-#define RSUMK MK2H_bit.no3\r
-#define SREMK3 MK2H_bit.no4\r
-#define TKB2MK0 MK2H_bit.no5\r
-#define TKB2MK1 MK2H_bit.no6\r
-#define FLMK MK2H_bit.no7\r
-#define TKB2MK2 MK3_bit.no0\r
-#define FIFOMK0 MK3_bit.no1\r
-#define FIFOMK1 MK3_bit.no2\r
-#define TMPR004 PR02_bit.no1\r
-#define TMPR005 PR02_bit.no2\r
-#define PPR06 PR02_bit.no3\r
-#define PPR07 PR02_bit.no4\r
-#define LCDPR00 PR02_bit.no5\r
-#define CMPPR00 PR02_bit.no6\r
-#define CMPPR01 PR02_bit.no7\r
-#define TMPR006 PR02H_bit.no0\r
-#define TMPR007 PR02H_bit.no1\r
-#define USBPR0 PR02H_bit.no2\r
-#define RSUPR0 PR02H_bit.no3\r
-#define SREPR03 PR02H_bit.no4\r
-#define TKB2PR00 PR02H_bit.no5\r
-#define TKB2PR01 PR02H_bit.no6\r
-#define FLPR0 PR02H_bit.no7\r
-#define TKB2PR02 PR03_bit.no0\r
-#define FIFOPR00 PR03_bit.no1\r
-#define FIFOPR01 PR03_bit.no2\r
-#define TMPR104 PR12_bit.no1\r
-#define TMPR105 PR12_bit.no2\r
-#define PPR16 PR12_bit.no3\r
-#define PPR17 PR12_bit.no4\r
-#define LCDPR10 PR12_bit.no5\r
-#define CMPPR10 PR12_bit.no6\r
-#define CMPPR11 PR12_bit.no7\r
-#define TMPR106 PR12H_bit.no0\r
-#define TMPR107 PR12H_bit.no1\r
-#define USBPR1 PR12H_bit.no2\r
-#define RSUPR1 PR12H_bit.no3\r
-#define SREPR13 PR12H_bit.no4\r
-#define TKB2PR10 PR12H_bit.no5\r
-#define TKB2PR11 PR12H_bit.no6\r
-#define FLPR1 PR12H_bit.no7\r
-#define TKB2PR12 PR13_bit.no0\r
-#define FIFOPR10 PR13_bit.no1\r
-#define FIFOPR11 PR13_bit.no2\r
-#define WDTIIF IF0_bit.no0\r
-#define LVIIF IF0_bit.no1\r
-#define PIF0 IF0_bit.no2\r
-#define PIF1 IF0_bit.no3\r
-#define PIF2 IF0_bit.no4\r
-#define PIF3 IF0_bit.no5\r
-#define PIF4 IF0_bit.no6\r
-#define PIF5 IF0_bit.no7\r
-#define CSIIF20 IF0H_bit.no0\r
-#define IICIF20 IF0H_bit.no0\r
-#define STIF2 IF0H_bit.no0\r
-#define SRIF2 IF0H_bit.no1\r
-#define SREIF2 IF0H_bit.no2\r
-#define CSIIF00 IF0H_bit.no5\r
-#define IICIF00 IF0H_bit.no5\r
-#define STIF0 IF0H_bit.no5\r
-#define TMIF00 IF0H_bit.no6\r
-#define SRIF0 IF0H_bit.no7\r
-#define SREIF0 IF1_bit.no0\r
-#define TMIF01H IF1_bit.no0\r
-#define CSIIF10 IF1_bit.no1\r
-#define IICIF10 IF1_bit.no1\r
-#define STIF1 IF1_bit.no1\r
-#define SRIF1 IF1_bit.no2\r
-#define SREIF1 IF1_bit.no3\r
-#define TMIF03H IF1_bit.no3\r
-#define IICAIF0 IF1_bit.no4\r
-#define RTITIF IF1_bit.no5\r
-#define TMIF01 IF1_bit.no7\r
-#define TMIF02 IF1H_bit.no0\r
-#define TMIF03 IF1H_bit.no1\r
-#define ADIF IF1H_bit.no2\r
-#define RTCIF IF1H_bit.no3\r
-#define TMKAIF IF1H_bit.no4\r
-#define KRIF IF1H_bit.no5\r
-#define CSIIF30 IF1H_bit.no6\r
-#define IICIF30 IF1H_bit.no6\r
-#define STIF3 IF1H_bit.no6\r
-#define SRIF3 IF1H_bit.no7\r
-#define WDTIMK MK0_bit.no0\r
-#define LVIMK MK0_bit.no1\r
-#define PMK0 MK0_bit.no2\r
-#define PMK1 MK0_bit.no3\r
-#define PMK2 MK0_bit.no4\r
-#define PMK3 MK0_bit.no5\r
-#define PMK4 MK0_bit.no6\r
-#define PMK5 MK0_bit.no7\r
-#define CSIMK20 MK0H_bit.no0\r
-#define IICMK20 MK0H_bit.no0\r
-#define STMK2 MK0H_bit.no0\r
-#define SRMK2 MK0H_bit.no1\r
-#define SREMK2 MK0H_bit.no2\r
-#define CSIMK00 MK0H_bit.no5\r
-#define IICMK00 MK0H_bit.no5\r
-#define STMK0 MK0H_bit.no5\r
-#define TMMK00 MK0H_bit.no6\r
-#define SRMK0 MK0H_bit.no7\r
-#define SREMK0 MK1_bit.no0\r
-#define TMMK01H MK1_bit.no0\r
-#define CSIMK10 MK1_bit.no1\r
-#define IICMK10 MK1_bit.no1\r
-#define STMK1 MK1_bit.no1\r
-#define SRMK1 MK1_bit.no2\r
-#define SREMK1 MK1_bit.no3\r
-#define TMMK03H MK1_bit.no3\r
-#define IICAMK0 MK1_bit.no4\r
-#define RTITMK MK1_bit.no5\r
-#define TMMK01 MK1_bit.no7\r
-#define TMMK02 MK1H_bit.no0\r
-#define TMMK03 MK1H_bit.no1\r
-#define ADMK MK1H_bit.no2\r
-#define RTCMK MK1H_bit.no3\r
-#define TMKAMK MK1H_bit.no4\r
-#define KRMK MK1H_bit.no5\r
-#define CSIMK30 MK1H_bit.no6\r
-#define IICMK30 MK1H_bit.no6\r
-#define STMK3 MK1H_bit.no6\r
-#define SRMK3 MK1H_bit.no7\r
-#define WDTIPR0 PR00_bit.no0\r
-#define LVIPR0 PR00_bit.no1\r
-#define PPR00 PR00_bit.no2\r
-#define PPR01 PR00_bit.no3\r
-#define PPR02 PR00_bit.no4\r
-#define PPR03 PR00_bit.no5\r
-#define PPR04 PR00_bit.no6\r
-#define PPR05 PR00_bit.no7\r
-#define CSIPR020 PR00H_bit.no0\r
-#define IICPR020 PR00H_bit.no0\r
-#define STPR02 PR00H_bit.no0\r
-#define SRPR02 PR00H_bit.no1\r
-#define SREPR02 PR00H_bit.no2\r
-#define CSIPR000 PR00H_bit.no5\r
-#define IICPR000 PR00H_bit.no5\r
-#define STPR00 PR00H_bit.no5\r
-#define TMPR000 PR00H_bit.no6\r
-#define SRPR00 PR00H_bit.no7\r
-#define SREPR00 PR01_bit.no0\r
-#define TMPR001H PR01_bit.no0\r
-#define CSIPR010 PR01_bit.no1\r
-#define IICPR010 PR01_bit.no1\r
-#define STPR01 PR01_bit.no1\r
-#define SRPR01 PR01_bit.no2\r
-#define SREPR01 PR01_bit.no3\r
-#define TMPR003H PR01_bit.no3\r
-#define IICAPR00 PR01_bit.no4\r
-#define RTITPR0 PR01_bit.no5\r
-#define TMPR001 PR01_bit.no7\r
-#define TMPR002 PR01H_bit.no0\r
-#define TMPR003 PR01H_bit.no1\r
-#define ADPR0 PR01H_bit.no2\r
-#define RTCPR0 PR01H_bit.no3\r
-#define TMKAPR0 PR01H_bit.no4\r
-#define KRPR0 PR01H_bit.no5\r
-#define CSIPR030 PR01H_bit.no6\r
-#define IICPR030 PR01H_bit.no6\r
-#define STPR03 PR01H_bit.no6\r
-#define SRPR03 PR01H_bit.no7\r
-#define WDTIPR1 PR10_bit.no0\r
-#define LVIPR1 PR10_bit.no1\r
-#define PPR10 PR10_bit.no2\r
-#define PPR11 PR10_bit.no3\r
-#define PPR12 PR10_bit.no4\r
-#define PPR13 PR10_bit.no5\r
-#define PPR14 PR10_bit.no6\r
-#define PPR15 PR10_bit.no7\r
-#define CSIPR120 PR10H_bit.no0\r
-#define IICPR120 PR10H_bit.no0\r
-#define STPR12 PR10H_bit.no0\r
-#define SRPR12 PR10H_bit.no1\r
-#define SREPR12 PR10H_bit.no2\r
-#define CSIPR100 PR10H_bit.no5\r
-#define IICPR100 PR10H_bit.no5\r
-#define STPR10 PR10H_bit.no5\r
-#define TMPR100 PR10H_bit.no6\r
-#define SRPR10 PR10H_bit.no7\r
-#define SREPR10 PR11_bit.no0\r
-#define TMPR101H PR11_bit.no0\r
-#define CSIPR110 PR11_bit.no1\r
-#define IICPR110 PR11_bit.no1\r
-#define STPR11 PR11_bit.no1\r
-#define SRPR11 PR11_bit.no2\r
-#define SREPR11 PR11_bit.no3\r
-#define TMPR103H PR11_bit.no3\r
-#define IICAPR10 PR11_bit.no4\r
-#define RTITPR1 PR11_bit.no5\r
-#define TMPR101 PR11_bit.no7\r
-#define TMPR102 PR11H_bit.no0\r
-#define TMPR103 PR11H_bit.no1\r
-#define ADPR1 PR11H_bit.no2\r
-#define RTCPR1 PR11H_bit.no3\r
-#define TMKAPR1 PR11H_bit.no4\r
-#define KRPR1 PR11H_bit.no5\r
-#define CSIPR130 PR11H_bit.no6\r
-#define IICPR130 PR11H_bit.no6\r
-#define STPR13 PR11H_bit.no6\r
-#define SRPR13 PR11H_bit.no7\r
-#define MAA PMC_bit.no0\r
-\r
-/*\r
- Interrupt vector addresses\r
- */\r
-#define RST_vect (0x0)\r
-#define INTDBG_vect (0x2)\r
-#define INTWDTI_vect (0x4)\r
-#define INTLVI_vect (0x6)\r
-#define INTP0_vect (0x8)\r
-#define INTP1_vect (0xA)\r
-#define INTP2_vect (0xC)\r
-#define INTP3_vect (0xE)\r
-#define INTP4_vect (0x10)\r
-#define INTP5_vect (0x12)\r
-#define INTCSI20_vect (0x14)\r
-#define INTIIC20_vect (0x14)\r
-#define INTST2_vect (0x14)\r
-#define INTSR2_vect (0x16)\r
-#define INTSRE2_vect (0x18)\r
-#define INTCSI00_vect (0x1E)\r
-#define INTIIC00_vect (0x1E)\r
-#define INTST0_vect (0x1E)\r
-#define INTTM00_vect (0x20)\r
-#define INTSR0_vect (0x22)\r
-#define INTSRE0_vect (0x24)\r
-#define INTTM01H_vect (0x24)\r
-#define INTCSI10_vect (0x26)\r
-#define INTIIC10_vect (0x26)\r
-#define INTST1_vect (0x26)\r
-#define INTSR1_vect (0x28)\r
-#define INTSRE1_vect (0x2A)\r
-#define INTTM03H_vect (0x2A)\r
-#define INTIICA0_vect (0x2C)\r
-#define INTRTIT_vect (0x2E)\r
-#define INTTM01_vect (0x32)\r
-#define INTTM02_vect (0x34)\r
-#define INTTM03_vect (0x36)\r
-#define INTAD_vect (0x38)\r
-#define INTRTC_vect (0x3A)\r
-#define INTIT_vect (0x3C)\r
-#define INTKR_vect (0x3E)\r
-#define INTCSI30_vect (0x40)\r
-#define INTIIC30_vect (0x40)\r
-#define INTST3_vect (0x40)\r
-#define INTSR3_vect (0x42)\r
-#define INTTM04_vect (0x46)\r
-#define INTTM05_vect (0x48)\r
-#define INTP6_vect (0x4A)\r
-#define INTP7_vect (0x4C)\r
-#define INTLCD0_vect (0x4E)\r
-#define INTCMP0_vect (0x50)\r
-#define INTCMP1_vect (0x52)\r
-#define INTTM06_vect (0x54)\r
-#define INTTM07_vect (0x56)\r
-#define INTUSB_vect (0x58)\r
-#define INTRSUM_vect (0x5A)\r
-#define INTSRE3_vect (0x5C)\r
-#define INTTKB20_vect (0x5E)\r
-#define INTTKB21_vect (0x60)\r
-#define INTFL_vect (0x62)\r
-#define INTTKB22_vect (0x64)\r
-#define DTC0FIFO_vect (0x66)\r
-#define DTC1FIFO_vect (0x68)\r
-#define BRK_I_vect (0x7E)\r
-#endif\r
diff --git a/FreeRTOS/Demo/RL78_E2Studio_GCC/src/iodefine/iodefine_RL78L1C_ext.h b/FreeRTOS/Demo/RL78_E2Studio_GCC/src/iodefine/iodefine_RL78L1C_ext.h
deleted file mode 100644 (file)
index 9460259..0000000
+++ /dev/null
@@ -1,1178 +0,0 @@
-/************************************************************************/\r
-/* Header file generated from device file:                              */\r
-/*    DR5F110PJ.DVF                                                     */\r
-/*    Copyright(C) 2013 Renesas                                         */\r
-/*    File Version E1.00h                                               */\r
-/*    Tool Version 2.5.211                                              */\r
-/*    Date Generated 07/05/2013                                         */\r
-/************************************************************************/\r
-\r
-#ifndef __INTRINSIC_FUNCTIONS\r
-#define __INTRINSIC_FUNCTIONS\r
-\r
-#define DI() asm("di")\r
-#define EI() asm("ei")\r
-#define HALT() asm("halt")\r
-#define NOP() asm("nop")\r
-#define STOP() asm("stop")\r
-\r
-#endif\r
-\r
-#ifndef __IOREG_BIT_STRUCTURES\r
-#define __IOREG_BIT_STRUCTURES\r
-typedef struct {\r
-       unsigned char no0 :1;\r
-       unsigned char no1 :1;\r
-       unsigned char no2 :1;\r
-       unsigned char no3 :1;\r
-       unsigned char no4 :1;\r
-       unsigned char no5 :1;\r
-       unsigned char no6 :1;\r
-       unsigned char no7 :1;\r
-} __BITS8;\r
-\r
-typedef struct {\r
-       unsigned short no0 :1;\r
-       unsigned short no1 :1;\r
-       unsigned short no2 :1;\r
-       unsigned short no3 :1;\r
-       unsigned short no4 :1;\r
-       unsigned short no5 :1;\r
-       unsigned short no6 :1;\r
-       unsigned short no7 :1;\r
-       unsigned short no8 :1;\r
-       unsigned short no9 :1;\r
-       unsigned short no10 :1;\r
-       unsigned short no11 :1;\r
-       unsigned short no12 :1;\r
-       unsigned short no13 :1;\r
-       unsigned short no14 :1;\r
-       unsigned short no15 :1;\r
-} __BITS16;\r
-\r
-#endif\r
-\r
-#ifndef IODEFINE_EXT_H\r
-#define IODEFINE_EXT_H\r
-\r
-/*\r
- IO Registers\r
- */\r
-union un_adm2 {\r
-       unsigned char adm2;\r
-       __BITS8 BIT;\r
-};\r
-union un_pu0 {\r
-       unsigned char pu0;\r
-       __BITS8 BIT;\r
-};\r
-union un_pu1 {\r
-       unsigned char pu1;\r
-       __BITS8 BIT;\r
-};\r
-union un_pu2 {\r
-       unsigned char pu2;\r
-       __BITS8 BIT;\r
-};\r
-union un_pu3 {\r
-       unsigned char pu3;\r
-       __BITS8 BIT;\r
-};\r
-union un_pu4 {\r
-       unsigned char pu4;\r
-       __BITS8 BIT;\r
-};\r
-union un_pu5 {\r
-       unsigned char pu5;\r
-       __BITS8 BIT;\r
-};\r
-union un_pu7 {\r
-       unsigned char pu7;\r
-       __BITS8 BIT;\r
-};\r
-union un_pu12 {\r
-       unsigned char pu12;\r
-       __BITS8 BIT;\r
-};\r
-union un_pu14 {\r
-       unsigned char pu14;\r
-       __BITS8 BIT;\r
-};\r
-union un_pim0 {\r
-       unsigned char pim0;\r
-       __BITS8 BIT;\r
-};\r
-union un_pim1 {\r
-       unsigned char pim1;\r
-       __BITS8 BIT;\r
-};\r
-union un_pim2 {\r
-       unsigned char pim2;\r
-       __BITS8 BIT;\r
-};\r
-union un_pim3 {\r
-       unsigned char pim3;\r
-       __BITS8 BIT;\r
-};\r
-union un_pim4 {\r
-       unsigned char pim4;\r
-       __BITS8 BIT;\r
-};\r
-union un_pom0 {\r
-       unsigned char pom0;\r
-       __BITS8 BIT;\r
-};\r
-union un_pom1 {\r
-       unsigned char pom1;\r
-       __BITS8 BIT;\r
-};\r
-union un_pom2 {\r
-       unsigned char pom2;\r
-       __BITS8 BIT;\r
-};\r
-union un_pom3 {\r
-       unsigned char pom3;\r
-       __BITS8 BIT;\r
-};\r
-union un_pom4 {\r
-       unsigned char pom4;\r
-       __BITS8 BIT;\r
-};\r
-union un_pmc2 {\r
-       unsigned char pmc2;\r
-       __BITS8 BIT;\r
-};\r
-union un_pmc4 {\r
-       unsigned char pmc4;\r
-       __BITS8 BIT;\r
-};\r
-union un_pmc14 {\r
-       unsigned char pmc14;\r
-       __BITS8 BIT;\r
-};\r
-union un_nfen0 {\r
-       unsigned char nfen0;\r
-       __BITS8 BIT;\r
-};\r
-union un_nfen1 {\r
-       unsigned char nfen1;\r
-       __BITS8 BIT;\r
-};\r
-union un_isc {\r
-       unsigned char isc;\r
-       __BITS8 BIT;\r
-};\r
-union un_tos {\r
-       unsigned char tos;\r
-       __BITS8 BIT;\r
-};\r
-union un_per1 {\r
-       unsigned char per1;\r
-       __BITS8 BIT;\r
-};\r
-union un_pms {\r
-       unsigned char pms;\r
-       __BITS8 BIT;\r
-};\r
-union un_dflctl {\r
-       unsigned char dflctl;\r
-       __BITS8 BIT;\r
-};\r
-union un_per0 {\r
-       unsigned char per0;\r
-       __BITS8 BIT;\r
-};\r
-union un_rpectl {\r
-       unsigned char rpectl;\r
-       __BITS8 BIT;\r
-};\r
-union un_per2 {\r
-       unsigned char per2;\r
-       __BITS8 BIT;\r
-};\r
-union un_se0l {\r
-       unsigned char se0l;\r
-       __BITS8 BIT;\r
-};\r
-union un_ss0l {\r
-       unsigned char ss0l;\r
-       __BITS8 BIT;\r
-};\r
-union un_st0l {\r
-       unsigned char st0l;\r
-       __BITS8 BIT;\r
-};\r
-union un_soe0l {\r
-       unsigned char soe0l;\r
-       __BITS8 BIT;\r
-};\r
-union un_se1l {\r
-       unsigned char se1l;\r
-       __BITS8 BIT;\r
-};\r
-union un_ss1l {\r
-       unsigned char ss1l;\r
-       __BITS8 BIT;\r
-};\r
-union un_st1l {\r
-       unsigned char st1l;\r
-       __BITS8 BIT;\r
-};\r
-union un_soe1l {\r
-       unsigned char soe1l;\r
-       __BITS8 BIT;\r
-};\r
-union un_te0l {\r
-       unsigned char te0l;\r
-       __BITS8 BIT;\r
-};\r
-union un_ts0l {\r
-       unsigned char ts0l;\r
-       __BITS8 BIT;\r
-};\r
-union un_tt0l {\r
-       unsigned char tt0l;\r
-       __BITS8 BIT;\r
-};\r
-union un_toe0l {\r
-       unsigned char toe0l;\r
-       __BITS8 BIT;\r
-};\r
-union un_iicctl00 {\r
-       unsigned char iicctl00;\r
-       __BITS8 BIT;\r
-};\r
-union un_iicctl01 {\r
-       unsigned char iicctl01;\r
-       __BITS8 BIT;\r
-};\r
-union un_tkbtrg1 {\r
-       unsigned char tkbtrg1;\r
-       __BITS8 BIT;\r
-};\r
-union un_tkbflg1 {\r
-       unsigned char tkbflg1;\r
-       __BITS8 BIT;\r
-};\r
-union un_tkbioc10 {\r
-       unsigned char tkbioc10;\r
-       __BITS8 BIT;\r
-};\r
-union un_tkbclr1 {\r
-       unsigned char tkbclr1;\r
-       __BITS8 BIT;\r
-};\r
-union un_tkbioc11 {\r
-       unsigned char tkbioc11;\r
-       __BITS8 BIT;\r
-};\r
-union un_tkbctl11 {\r
-       unsigned char tkbctl11;\r
-       __BITS8 BIT;\r
-};\r
-union un_tkbpahfs1 {\r
-       unsigned char tkbpahfs1;\r
-       __BITS8 BIT;\r
-};\r
-union un_tkbpahft1 {\r
-       unsigned char tkbpahft1;\r
-       __BITS8 BIT;\r
-};\r
-union un_tkbpaflg1 {\r
-       unsigned char tkbpaflg1;\r
-       __BITS8 BIT;\r
-};\r
-union un_tkbpactl12 {\r
-       unsigned char tkbpactl12;\r
-       __BITS8 BIT;\r
-};\r
-union un_tkbtrg2 {\r
-       unsigned char tkbtrg2;\r
-       __BITS8 BIT;\r
-};\r
-union un_tkbflg2 {\r
-       unsigned char tkbflg2;\r
-       __BITS8 BIT;\r
-};\r
-union un_tkbioc20 {\r
-       unsigned char tkbioc20;\r
-       __BITS8 BIT;\r
-};\r
-union un_tkbclr2 {\r
-       unsigned char tkbclr2;\r
-       __BITS8 BIT;\r
-};\r
-union un_tkbioc21 {\r
-       unsigned char tkbioc21;\r
-       __BITS8 BIT;\r
-};\r
-union un_tkbctl21 {\r
-       unsigned char tkbctl21;\r
-       __BITS8 BIT;\r
-};\r
-union un_tkbpahfs2 {\r
-       unsigned char tkbpahfs2;\r
-       __BITS8 BIT;\r
-};\r
-union un_tkbpahft2 {\r
-       unsigned char tkbpahft2;\r
-       __BITS8 BIT;\r
-};\r
-union un_tkbpaflg2 {\r
-       unsigned char tkbpaflg2;\r
-       __BITS8 BIT;\r
-};\r
-union un_tkbpactl22 {\r
-       unsigned char tkbpactl22;\r
-       __BITS8 BIT;\r
-};\r
-union un_dscctl {\r
-       unsigned char dscctl;\r
-       __BITS8 BIT;\r
-};\r
-union un_mckc {\r
-       unsigned char mckc;\r
-       __BITS8 BIT;\r
-};\r
-union un_dtcen0 {\r
-       unsigned char dtcen0;\r
-       __BITS8 BIT;\r
-};\r
-union un_dtcen1 {\r
-       unsigned char dtcen1;\r
-       __BITS8 BIT;\r
-};\r
-union un_dtcen2 {\r
-       unsigned char dtcen2;\r
-       __BITS8 BIT;\r
-};\r
-union un_dtcen3 {\r
-       unsigned char dtcen3;\r
-       __BITS8 BIT;\r
-};\r
-union un_dtcen4 {\r
-       unsigned char dtcen4;\r
-       __BITS8 BIT;\r
-};\r
-union un_crc0ctl {\r
-       unsigned char crc0ctl;\r
-       __BITS8 BIT;\r
-};\r
-union un_pfseg0 {\r
-       unsigned char pfseg0;\r
-       __BITS8 BIT;\r
-};\r
-union un_pfseg1 {\r
-       unsigned char pfseg1;\r
-       __BITS8 BIT;\r
-};\r
-union un_pfseg2 {\r
-       unsigned char pfseg2;\r
-       __BITS8 BIT;\r
-};\r
-union un_pfseg3 {\r
-       unsigned char pfseg3;\r
-       __BITS8 BIT;\r
-};\r
-union un_pfseg4 {\r
-       unsigned char pfseg4;\r
-       __BITS8 BIT;\r
-};\r
-union un_pfseg5 {\r
-       unsigned char pfseg5;\r
-       __BITS8 BIT;\r
-};\r
-union un_pfseg6 {\r
-       unsigned char pfseg6;\r
-       __BITS8 BIT;\r
-};\r
-union un_isclcd {\r
-       unsigned char isclcd;\r
-       __BITS8 BIT;\r
-};\r
-union un_compmdr {\r
-       unsigned char compmdr;\r
-       __BITS8 BIT;\r
-};\r
-union un_compfir {\r
-       unsigned char compfir;\r
-       __BITS8 BIT;\r
-};\r
-union un_compocr {\r
-       unsigned char compocr;\r
-       __BITS8 BIT;\r
-};\r
-union un_tkbtrg0 {\r
-       unsigned char tkbtrg0;\r
-       __BITS8 BIT;\r
-};\r
-union un_tkbflg0 {\r
-       unsigned char tkbflg0;\r
-       __BITS8 BIT;\r
-};\r
-union un_tkbioc00 {\r
-       unsigned char tkbioc00;\r
-       __BITS8 BIT;\r
-};\r
-union un_tkbclr0 {\r
-       unsigned char tkbclr0;\r
-       __BITS8 BIT;\r
-};\r
-union un_tkbioc01 {\r
-       unsigned char tkbioc01;\r
-       __BITS8 BIT;\r
-};\r
-union un_tkbctl01 {\r
-       unsigned char tkbctl01;\r
-       __BITS8 BIT;\r
-};\r
-union un_tkbpahfs0 {\r
-       unsigned char tkbpahfs0;\r
-       __BITS8 BIT;\r
-};\r
-union un_tkbpahft0 {\r
-       unsigned char tkbpahft0;\r
-       __BITS8 BIT;\r
-};\r
-union un_tkbpaflg0 {\r
-       unsigned char tkbpaflg0;\r
-       __BITS8 BIT;\r
-};\r
-union un_tkbpactl02 {\r
-       unsigned char tkbpactl02;\r
-       __BITS8 BIT;\r
-};\r
-\r
-#define ADM2 (*(volatile union un_adm2 *)0xF0010).adm2\r
-#define ADM2_bit (*(volatile union un_adm2 *)0xF0010).BIT\r
-#define ADUL (*(volatile unsigned char *)0xF0011)\r
-#define ADLL (*(volatile unsigned char *)0xF0012)\r
-#define ADTES (*(volatile unsigned char *)0xF0013)\r
-#define PU0 (*(volatile union un_pu0 *)0xF0030).pu0\r
-#define PU0_bit (*(volatile union un_pu0 *)0xF0030).BIT\r
-#define PU1 (*(volatile union un_pu1 *)0xF0031).pu1\r
-#define PU1_bit (*(volatile union un_pu1 *)0xF0031).BIT\r
-#define PU2 (*(volatile union un_pu2 *)0xF0032).pu2\r
-#define PU2_bit (*(volatile union un_pu2 *)0xF0032).BIT\r
-#define PU3 (*(volatile union un_pu3 *)0xF0033).pu3\r
-#define PU3_bit (*(volatile union un_pu3 *)0xF0033).BIT\r
-#define PU4 (*(volatile union un_pu4 *)0xF0034).pu4\r
-#define PU4_bit (*(volatile union un_pu4 *)0xF0034).BIT\r
-#define PU5 (*(volatile union un_pu5 *)0xF0035).pu5\r
-#define PU5_bit (*(volatile union un_pu5 *)0xF0035).BIT\r
-#define PU7 (*(volatile union un_pu7 *)0xF0037).pu7\r
-#define PU7_bit (*(volatile union un_pu7 *)0xF0037).BIT\r
-#define PU12 (*(volatile union un_pu12 *)0xF003C).pu12\r
-#define PU12_bit (*(volatile union un_pu12 *)0xF003C).BIT\r
-#define PU14 (*(volatile union un_pu14 *)0xF003E).pu14\r
-#define PU14_bit (*(volatile union un_pu14 *)0xF003E).BIT\r
-#define PIM0 (*(volatile union un_pim0 *)0xF0040).pim0\r
-#define PIM0_bit (*(volatile union un_pim0 *)0xF0040).BIT\r
-#define PIM1 (*(volatile union un_pim1 *)0xF0041).pim1\r
-#define PIM1_bit (*(volatile union un_pim1 *)0xF0041).BIT\r
-#define PIM2 (*(volatile union un_pim2 *)0xF0042).pim2\r
-#define PIM2_bit (*(volatile union un_pim2 *)0xF0042).BIT\r
-#define PIM3 (*(volatile union un_pim3 *)0xF0043).pim3\r
-#define PIM3_bit (*(volatile union un_pim3 *)0xF0043).BIT\r
-#define PIM4 (*(volatile union un_pim4 *)0xF0044).pim4\r
-#define PIM4_bit (*(volatile union un_pim4 *)0xF0044).BIT\r
-#define POM0 (*(volatile union un_pom0 *)0xF0050).pom0\r
-#define POM0_bit (*(volatile union un_pom0 *)0xF0050).BIT\r
-#define POM1 (*(volatile union un_pom1 *)0xF0051).pom1\r
-#define POM1_bit (*(volatile union un_pom1 *)0xF0051).BIT\r
-#define POM2 (*(volatile union un_pom2 *)0xF0052).pom2\r
-#define POM2_bit (*(volatile union un_pom2 *)0xF0052).BIT\r
-#define POM3 (*(volatile union un_pom3 *)0xF0053).pom3\r
-#define POM3_bit (*(volatile union un_pom3 *)0xF0053).BIT\r
-#define POM4 (*(volatile union un_pom4 *)0xF0054).pom4\r
-#define POM4_bit (*(volatile union un_pom4 *)0xF0054).BIT\r
-#define PMC2 (*(volatile union un_pmc2 *)0xF0062).pmc2\r
-#define PMC2_bit (*(volatile union un_pmc2 *)0xF0062).BIT\r
-#define PMC4 (*(volatile union un_pmc4 *)0xF0064).pmc4\r
-#define PMC4_bit (*(volatile union un_pmc4 *)0xF0064).BIT\r
-#define PMC14 (*(volatile union un_pmc14 *)0xF006E).pmc14\r
-#define PMC14_bit (*(volatile union un_pmc14 *)0xF006E).BIT\r
-#define NFEN0 (*(volatile union un_nfen0 *)0xF0070).nfen0\r
-#define NFEN0_bit (*(volatile union un_nfen0 *)0xF0070).BIT\r
-#define NFEN1 (*(volatile union un_nfen1 *)0xF0071).nfen1\r
-#define NFEN1_bit (*(volatile union un_nfen1 *)0xF0071).BIT\r
-#define ISC (*(volatile union un_isc *)0xF0073).isc\r
-#define ISC_bit (*(volatile union un_isc *)0xF0073).BIT\r
-#define TIS0 (*(volatile unsigned char *)0xF0074)\r
-#define ADPC (*(volatile unsigned char *)0xF0076)\r
-#define PIOR (*(volatile unsigned char *)0xF0077)\r
-#define IAWCTL (*(volatile unsigned char *)0xF0078)\r
-#define TOS (*(volatile union un_tos *)0xF0079).tos\r
-#define TOS_bit (*(volatile union un_tos *)0xF0079).BIT\r
-#define PER1 (*(volatile union un_per1 *)0xF007A).per1\r
-#define PER1_bit (*(volatile union un_per1 *)0xF007A).BIT\r
-#define PMS (*(volatile union un_pms *)0xF007B).pms\r
-#define PMS_bit (*(volatile union un_pms *)0xF007B).BIT\r
-#define GAIDIS (*(volatile unsigned char *)0xF007C)\r
-#define DFLCTL (*(volatile union un_dflctl *)0xF0090).dflctl\r
-#define DFLCTL_bit (*(volatile union un_dflctl *)0xF0090).BIT\r
-#define HOCODIV (*(volatile unsigned char *)0xF00A8)\r
-#define PER0 (*(volatile union un_per0 *)0xF00F0).per0\r
-#define PER0_bit (*(volatile union un_per0 *)0xF00F0).BIT\r
-#define OSMC (*(volatile unsigned char *)0xF00F3)\r
-#define RPECTL (*(volatile union un_rpectl *)0xF00F5).rpectl\r
-#define RPECTL_bit (*(volatile union un_rpectl *)0xF00F5).BIT\r
-#define PORSR (*(volatile unsigned char *)0xF00F9)\r
-#define PER2 (*(volatile union un_per2 *)0xF00FD).per2\r
-#define PER2_bit (*(volatile union un_per2 *)0xF00FD).BIT\r
-#define BCDADJ (*(volatile unsigned char *)0xF00FE)\r
-#define SSR00 (*(volatile unsigned short *)0xF0100)\r
-#define SSR00L (*(volatile unsigned char *)0xF0100)\r
-#define SSR01 (*(volatile unsigned short *)0xF0102)\r
-#define SSR01L (*(volatile unsigned char *)0xF0102)\r
-#define SSR02 (*(volatile unsigned short *)0xF0104)\r
-#define SSR02L (*(volatile unsigned char *)0xF0104)\r
-#define SSR03 (*(volatile unsigned short *)0xF0106)\r
-#define SSR03L (*(volatile unsigned char *)0xF0106)\r
-#define SIR00 (*(volatile unsigned short *)0xF0108)\r
-#define SIR00L (*(volatile unsigned char *)0xF0108)\r
-#define SIR01 (*(volatile unsigned short *)0xF010A)\r
-#define SIR01L (*(volatile unsigned char *)0xF010A)\r
-#define SIR02 (*(volatile unsigned short *)0xF010C)\r
-#define SIR02L (*(volatile unsigned char *)0xF010C)\r
-#define SIR03 (*(volatile unsigned short *)0xF010E)\r
-#define SIR03L (*(volatile unsigned char *)0xF010E)\r
-#define SMR00 (*(volatile unsigned short *)0xF0110)\r
-#define SMR01 (*(volatile unsigned short *)0xF0112)\r
-#define SMR02 (*(volatile unsigned short *)0xF0114)\r
-#define SMR03 (*(volatile unsigned short *)0xF0116)\r
-#define SCR00 (*(volatile unsigned short *)0xF0118)\r
-#define SCR01 (*(volatile unsigned short *)0xF011A)\r
-#define SCR02 (*(volatile unsigned short *)0xF011C)\r
-#define SCR03 (*(volatile unsigned short *)0xF011E)\r
-#define SE0 (*(volatile unsigned short *)0xF0120)\r
-#define SE0L (*(volatile union un_se0l *)0xF0120).se0l\r
-#define SE0L_bit (*(volatile union un_se0l *)0xF0120).BIT\r
-#define SS0 (*(volatile unsigned short *)0xF0122)\r
-#define SS0L (*(volatile union un_ss0l *)0xF0122).ss0l\r
-#define SS0L_bit (*(volatile union un_ss0l *)0xF0122).BIT\r
-#define ST0 (*(volatile unsigned short *)0xF0124)\r
-#define ST0L (*(volatile union un_st0l *)0xF0124).st0l\r
-#define ST0L_bit (*(volatile union un_st0l *)0xF0124).BIT\r
-#define SPS0 (*(volatile unsigned short *)0xF0126)\r
-#define SPS0L (*(volatile unsigned char *)0xF0126)\r
-#define SO0 (*(volatile unsigned short *)0xF0128)\r
-#define SOE0 (*(volatile unsigned short *)0xF012A)\r
-#define SOE0L (*(volatile union un_soe0l *)0xF012A).soe0l\r
-#define SOE0L_bit (*(volatile union un_soe0l *)0xF012A).BIT\r
-#define SOL0 (*(volatile unsigned short *)0xF0134)\r
-#define SOL0L (*(volatile unsigned char *)0xF0134)\r
-#define SSC0 (*(volatile unsigned short *)0xF0138)\r
-#define SSC0L (*(volatile unsigned char *)0xF0138)\r
-#define SSR10 (*(volatile unsigned short *)0xF0140)\r
-#define SSR10L (*(volatile unsigned char *)0xF0140)\r
-#define SSR11 (*(volatile unsigned short *)0xF0142)\r
-#define SSR11L (*(volatile unsigned char *)0xF0142)\r
-#define SSR12 (*(volatile unsigned short *)0xF0144)\r
-#define SSR12L (*(volatile unsigned char *)0xF0144)\r
-#define SSR13 (*(volatile unsigned short *)0xF0146)\r
-#define SSR13L (*(volatile unsigned char *)0xF0146)\r
-#define SIR10 (*(volatile unsigned short *)0xF0148)\r
-#define SIR10L (*(volatile unsigned char *)0xF0148)\r
-#define SIR11 (*(volatile unsigned short *)0xF014A)\r
-#define SIR11L (*(volatile unsigned char *)0xF014A)\r
-#define SIR12 (*(volatile unsigned short *)0xF014C)\r
-#define SIR12L (*(volatile unsigned char *)0xF014C)\r
-#define SIR13 (*(volatile unsigned short *)0xF014E)\r
-#define SIR13L (*(volatile unsigned char *)0xF014E)\r
-#define SMR10 (*(volatile unsigned short *)0xF0150)\r
-#define SMR11 (*(volatile unsigned short *)0xF0152)\r
-#define SMR12 (*(volatile unsigned short *)0xF0154)\r
-#define SMR13 (*(volatile unsigned short *)0xF0156)\r
-#define SCR10 (*(volatile unsigned short *)0xF0158)\r
-#define SCR11 (*(volatile unsigned short *)0xF015A)\r
-#define SCR12 (*(volatile unsigned short *)0xF015C)\r
-#define SCR13 (*(volatile unsigned short *)0xF015E)\r
-#define SE1 (*(volatile unsigned short *)0xF0160)\r
-#define SE1L (*(volatile union un_se1l *)0xF0160).se1l\r
-#define SE1L_bit (*(volatile union un_se1l *)0xF0160).BIT\r
-#define SS1 (*(volatile unsigned short *)0xF0162)\r
-#define SS1L (*(volatile union un_ss1l *)0xF0162).ss1l\r
-#define SS1L_bit (*(volatile union un_ss1l *)0xF0162).BIT\r
-#define ST1 (*(volatile unsigned short *)0xF0164)\r
-#define ST1L (*(volatile union un_st1l *)0xF0164).st1l\r
-#define ST1L_bit (*(volatile union un_st1l *)0xF0164).BIT\r
-#define SPS1 (*(volatile unsigned short *)0xF0166)\r
-#define SPS1L (*(volatile unsigned char *)0xF0166)\r
-#define SO1 (*(volatile unsigned short *)0xF0168)\r
-#define SOE1 (*(volatile unsigned short *)0xF016A)\r
-#define SOE1L (*(volatile union un_soe1l *)0xF016A).soe1l\r
-#define SOE1L_bit (*(volatile union un_soe1l *)0xF016A).BIT\r
-#define SOL1 (*(volatile unsigned short *)0xF0174)\r
-#define SOL1L (*(volatile unsigned char *)0xF0174)\r
-#define SSC1 (*(volatile unsigned short *)0xF0178)\r
-#define SSC1L (*(volatile unsigned char *)0xF0178)\r
-#define TCR00 (*(volatile unsigned short *)0xF0180)\r
-#define TCR01 (*(volatile unsigned short *)0xF0182)\r
-#define TCR02 (*(volatile unsigned short *)0xF0184)\r
-#define TCR03 (*(volatile unsigned short *)0xF0186)\r
-#define TCR04 (*(volatile unsigned short *)0xF0188)\r
-#define TCR05 (*(volatile unsigned short *)0xF018A)\r
-#define TCR06 (*(volatile unsigned short *)0xF018C)\r
-#define TCR07 (*(volatile unsigned short *)0xF018E)\r
-#define TMR00 (*(volatile unsigned short *)0xF0190)\r
-#define TMR01 (*(volatile unsigned short *)0xF0192)\r
-#define TMR02 (*(volatile unsigned short *)0xF0194)\r
-#define TMR03 (*(volatile unsigned short *)0xF0196)\r
-#define TMR04 (*(volatile unsigned short *)0xF0198)\r
-#define TMR05 (*(volatile unsigned short *)0xF019A)\r
-#define TMR06 (*(volatile unsigned short *)0xF019C)\r
-#define TMR07 (*(volatile unsigned short *)0xF019E)\r
-#define TSR00 (*(volatile unsigned short *)0xF01A0)\r
-#define TSR00L (*(volatile unsigned char *)0xF01A0)\r
-#define TSR01 (*(volatile unsigned short *)0xF01A2)\r
-#define TSR01L (*(volatile unsigned char *)0xF01A2)\r
-#define TSR02 (*(volatile unsigned short *)0xF01A4)\r
-#define TSR02L (*(volatile unsigned char *)0xF01A4)\r
-#define TSR03 (*(volatile unsigned short *)0xF01A6)\r
-#define TSR03L (*(volatile unsigned char *)0xF01A6)\r
-#define TSR04 (*(volatile unsigned short *)0xF01A8)\r
-#define TSR04L (*(volatile unsigned char *)0xF01A8)\r
-#define TSR05 (*(volatile unsigned short *)0xF01AA)\r
-#define TSR05L (*(volatile unsigned char *)0xF01AA)\r
-#define TSR06 (*(volatile unsigned short *)0xF01AC)\r
-#define TSR06L (*(volatile unsigned char *)0xF01AC)\r
-#define TSR07 (*(volatile unsigned short *)0xF01AE)\r
-#define TSR07L (*(volatile unsigned char *)0xF01AE)\r
-#define TE0 (*(volatile unsigned short *)0xF01B0)\r
-#define TE0L (*(volatile union un_te0l *)0xF01B0).te0l\r
-#define TE0L_bit (*(volatile union un_te0l *)0xF01B0).BIT\r
-#define TS0 (*(volatile unsigned short *)0xF01B2)\r
-#define TS0L (*(volatile union un_ts0l *)0xF01B2).ts0l\r
-#define TS0L_bit (*(volatile union un_ts0l *)0xF01B2).BIT\r
-#define TT0 (*(volatile unsigned short *)0xF01B4)\r
-#define TT0L (*(volatile union un_tt0l *)0xF01B4).tt0l\r
-#define TT0L_bit (*(volatile union un_tt0l *)0xF01B4).BIT\r
-#define TPS0 (*(volatile unsigned short *)0xF01B6)\r
-#define TO0 (*(volatile unsigned short *)0xF01B8)\r
-#define TO0L (*(volatile unsigned char *)0xF01B8)\r
-#define TOE0 (*(volatile unsigned short *)0xF01BA)\r
-#define TOE0L (*(volatile union un_toe0l *)0xF01BA).toe0l\r
-#define TOE0L_bit (*(volatile union un_toe0l *)0xF01BA).BIT\r
-#define TOL0 (*(volatile unsigned short *)0xF01BC)\r
-#define TOL0L (*(volatile unsigned char *)0xF01BC)\r
-#define TOM0 (*(volatile unsigned short *)0xF01BE)\r
-#define TOM0L (*(volatile unsigned char *)0xF01BE)\r
-#define ELSELR00 (*(volatile unsigned char *)0xF01C0)\r
-#define ELSELR01 (*(volatile unsigned char *)0xF01C1)\r
-#define ELSELR02 (*(volatile unsigned char *)0xF01C2)\r
-#define ELSELR03 (*(volatile unsigned char *)0xF01C3)\r
-#define ELSELR04 (*(volatile unsigned char *)0xF01C4)\r
-#define ELSELR05 (*(volatile unsigned char *)0xF01C5)\r
-#define ELSELR06 (*(volatile unsigned char *)0xF01C6)\r
-#define ELSELR07 (*(volatile unsigned char *)0xF01C7)\r
-#define ELSELR08 (*(volatile unsigned char *)0xF01C8)\r
-#define ELSELR09 (*(volatile unsigned char *)0xF01C9)\r
-#define ELSELR10 (*(volatile unsigned char *)0xF01CA)\r
-#define ELSELR11 (*(volatile unsigned char *)0xF01CB)\r
-#define ELSELR12 (*(volatile unsigned char *)0xF01CC)\r
-#define ELSELR13 (*(volatile unsigned char *)0xF01CD)\r
-#define ELSELR14 (*(volatile unsigned char *)0xF01CE)\r
-#define ELSELR15 (*(volatile unsigned char *)0xF01CF)\r
-#define ELSELR16 (*(volatile unsigned char *)0xF01D0)\r
-#define ELSELR17 (*(volatile unsigned char *)0xF01D1)\r
-#define ELSELR18 (*(volatile unsigned char *)0xF01D2)\r
-#define ELSELR19 (*(volatile unsigned char *)0xF01D3)\r
-#define ELSELR20 (*(volatile unsigned char *)0xF01D4)\r
-#define ELSELR21 (*(volatile unsigned char *)0xF01D5)\r
-#define ELSELR22 (*(volatile unsigned char *)0xF01D6)\r
-#define ELSELR23 (*(volatile unsigned char *)0xF01D7)\r
-#define ELSELR24 (*(volatile unsigned char *)0xF01D8)\r
-#define ELSELR25 (*(volatile unsigned char *)0xF01D9)\r
-#define ELSELR26 (*(volatile unsigned char *)0xF01DA)\r
-#define ELSELR27 (*(volatile unsigned char *)0xF01DB)\r
-#define ELSELR28 (*(volatile unsigned char *)0xF01DC)\r
-#define ELSELR29 (*(volatile unsigned char *)0xF01DD)\r
-#define ELSELR30 (*(volatile unsigned char *)0xF01DE)\r
-#define IICCTL00 (*(volatile union un_iicctl00 *)0xF0230).iicctl00\r
-#define IICCTL00_bit (*(volatile union un_iicctl00 *)0xF0230).BIT\r
-#define IICCTL01 (*(volatile union un_iicctl01 *)0xF0231).iicctl01\r
-#define IICCTL01_bit (*(volatile union un_iicctl01 *)0xF0231).BIT\r
-#define IICWL0 (*(volatile unsigned char *)0xF0232)\r
-#define IICWH0 (*(volatile unsigned char *)0xF0233)\r
-#define SVA0 (*(volatile unsigned char *)0xF0234)\r
-#define TKBCR10 (*(volatile unsigned short *)0xF0240)\r
-#define TKBCR11 (*(volatile unsigned short *)0xF0242)\r
-#define TKBCR12 (*(volatile unsigned short *)0xF0244)\r
-#define TKBCR13 (*(volatile unsigned short *)0xF0246)\r
-#define TKBTGCR1 (*(volatile unsigned short *)0xF0248)\r
-#define TKBSIR10 (*(volatile unsigned short *)0xF024A)\r
-#define TKBSIR11 (*(volatile unsigned short *)0xF024C)\r
-#define TKBDNR10 (*(volatile unsigned char *)0xF024E)\r
-#define TKBSSR10 (*(volatile unsigned char *)0xF024F)\r
-#define TKBDNR11 (*(volatile unsigned char *)0xF0250)\r
-#define TKBSSR11 (*(volatile unsigned char *)0xF0251)\r
-#define TKBTRG1 (*(volatile union un_tkbtrg1 *)0xF0252).tkbtrg1\r
-#define TKBTRG1_bit (*(volatile union un_tkbtrg1 *)0xF0252).BIT\r
-#define TKBFLG1 (*(volatile union un_tkbflg1 *)0xF0253).tkbflg1\r
-#define TKBFLG1_bit (*(volatile union un_tkbflg1 *)0xF0253).BIT\r
-#define TKBCRLD10 (*(volatile unsigned short *)0xF0254)\r
-#define TKBCRLD11 (*(volatile unsigned short *)0xF0256)\r
-#define TKBCNT1 (*(volatile unsigned short *)0xF0260)\r
-#define TKBCTL10 (*(volatile unsigned short *)0xF0262)\r
-#define TKBMFR1 (*(volatile unsigned short *)0xF0264)\r
-#define TKBIOC10 (*(volatile union un_tkbioc10 *)0xF0266).tkbioc10\r
-#define TKBIOC10_bit (*(volatile union un_tkbioc10 *)0xF0266).BIT\r
-#define TKBCLR1 (*(volatile union un_tkbclr1 *)0xF0267).tkbclr1\r
-#define TKBCLR1_bit (*(volatile union un_tkbclr1 *)0xF0267).BIT\r
-#define TKBIOC11 (*(volatile union un_tkbioc11 *)0xF0268).tkbioc11\r
-#define TKBIOC11_bit (*(volatile union un_tkbioc11 *)0xF0268).BIT\r
-#define TKBCTL11 (*(volatile union un_tkbctl11 *)0xF0269).tkbctl11\r
-#define TKBCTL11_bit (*(volatile union un_tkbctl11 *)0xF0269).BIT\r
-#define TKBPSCS1 (*(volatile unsigned char *)0xF026A)\r
-#define TKBPACTL10 (*(volatile unsigned short *)0xF0270)\r
-#define TKBPACTL11 (*(volatile unsigned short *)0xF0272)\r
-#define TKBPAHFS1 (*(volatile union un_tkbpahfs1 *)0xF0274).tkbpahfs1\r
-#define TKBPAHFS1_bit (*(volatile union un_tkbpahfs1 *)0xF0274).BIT\r
-#define TKBPAHFT1 (*(volatile union un_tkbpahft1 *)0xF0275).tkbpahft1\r
-#define TKBPAHFT1_bit (*(volatile union un_tkbpahft1 *)0xF0275).BIT\r
-#define TKBPAFLG1 (*(volatile union un_tkbpaflg1 *)0xF0276).tkbpaflg1\r
-#define TKBPAFLG1_bit (*(volatile union un_tkbpaflg1 *)0xF0276).BIT\r
-#define TKBPACTL12 (*(volatile union un_tkbpactl12 *)0xF0277).tkbpactl12\r
-#define TKBPACTL12_bit (*(volatile union un_tkbpactl12 *)0xF0277).BIT\r
-#define TKBCR20 (*(volatile unsigned short *)0xF0280)\r
-#define TKBCR21 (*(volatile unsigned short *)0xF0282)\r
-#define TKBCR22 (*(volatile unsigned short *)0xF0284)\r
-#define TKBCR23 (*(volatile unsigned short *)0xF0286)\r
-#define TKBTGCR2 (*(volatile unsigned short *)0xF0288)\r
-#define TKBSIR20 (*(volatile unsigned short *)0xF028A)\r
-#define TKBSIR21 (*(volatile unsigned short *)0xF028C)\r
-#define TKBDNR20 (*(volatile unsigned char *)0xF028E)\r
-#define TKBSSR20 (*(volatile unsigned char *)0xF028F)\r
-#define TKBDNR21 (*(volatile unsigned char *)0xF0290)\r
-#define TKBSSR21 (*(volatile unsigned char *)0xF0291)\r
-#define TKBTRG2 (*(volatile union un_tkbtrg2 *)0xF0292).tkbtrg2\r
-#define TKBTRG2_bit (*(volatile union un_tkbtrg2 *)0xF0292).BIT\r
-#define TKBFLG2 (*(volatile union un_tkbflg2 *)0xF0293).tkbflg2\r
-#define TKBFLG2_bit (*(volatile union un_tkbflg2 *)0xF0293).BIT\r
-#define TKBCRLD20 (*(volatile unsigned short *)0xF0294)\r
-#define TKBCRLD21 (*(volatile unsigned short *)0xF0296)\r
-#define TKBCNT2 (*(volatile unsigned short *)0xF02A0)\r
-#define TKBCTL20 (*(volatile unsigned short *)0xF02A2)\r
-#define TKBMFR2 (*(volatile unsigned short *)0xF02A4)\r
-#define TKBIOC20 (*(volatile union un_tkbioc20 *)0xF02A6).tkbioc20\r
-#define TKBIOC20_bit (*(volatile union un_tkbioc20 *)0xF02A6).BIT\r
-#define TKBCLR2 (*(volatile union un_tkbclr2 *)0xF02A7).tkbclr2\r
-#define TKBCLR2_bit (*(volatile union un_tkbclr2 *)0xF02A7).BIT\r
-#define TKBIOC21 (*(volatile union un_tkbioc21 *)0xF02A8).tkbioc21\r
-#define TKBIOC21_bit (*(volatile union un_tkbioc21 *)0xF02A8).BIT\r
-#define TKBCTL21 (*(volatile union un_tkbctl21 *)0xF02A9).tkbctl21\r
-#define TKBCTL21_bit (*(volatile union un_tkbctl21 *)0xF02A9).BIT\r
-#define TKBPSCS2 (*(volatile unsigned char *)0xF02AA)\r
-#define TKBPACTL20 (*(volatile unsigned short *)0xF02B0)\r
-#define TKBPACTL21 (*(volatile unsigned short *)0xF02B2)\r
-#define TKBPAHFS2 (*(volatile union un_tkbpahfs2 *)0xF02B4).tkbpahfs2\r
-#define TKBPAHFS2_bit (*(volatile union un_tkbpahfs2 *)0xF02B4).BIT\r
-#define TKBPAHFT2 (*(volatile union un_tkbpahft2 *)0xF02B5).tkbpahft2\r
-#define TKBPAHFT2_bit (*(volatile union un_tkbpahft2 *)0xF02B5).BIT\r
-#define TKBPAFLG2 (*(volatile union un_tkbpaflg2 *)0xF02B6).tkbpaflg2\r
-#define TKBPAFLG2_bit (*(volatile union un_tkbpaflg2 *)0xF02B6).BIT\r
-#define TKBPACTL22 (*(volatile union un_tkbpactl22 *)0xF02B7).tkbpactl22\r
-#define TKBPACTL22_bit (*(volatile union un_tkbpactl22 *)0xF02B7).BIT\r
-#define DTCBAR (*(volatile unsigned char *)0xF02E0)\r
-#define DSCCTL (*(volatile union un_dscctl *)0xF02E5).dscctl\r
-#define DSCCTL_bit (*(volatile union un_dscctl *)0xF02E5).BIT\r
-#define MCKC (*(volatile union un_mckc *)0xF02E6).mckc\r
-#define MCKC_bit (*(volatile union un_mckc *)0xF02E6).BIT\r
-#define DTCEN0 (*(volatile union un_dtcen0 *)0xF02E8).dtcen0\r
-#define DTCEN0_bit (*(volatile union un_dtcen0 *)0xF02E8).BIT\r
-#define DTCEN1 (*(volatile union un_dtcen1 *)0xF02E9).dtcen1\r
-#define DTCEN1_bit (*(volatile union un_dtcen1 *)0xF02E9).BIT\r
-#define DTCEN2 (*(volatile union un_dtcen2 *)0xF02EA).dtcen2\r
-#define DTCEN2_bit (*(volatile union un_dtcen2 *)0xF02EA).BIT\r
-#define DTCEN3 (*(volatile union un_dtcen3 *)0xF02EB).dtcen3\r
-#define DTCEN3_bit (*(volatile union un_dtcen3 *)0xF02EB).BIT\r
-#define DTCEN4 (*(volatile union un_dtcen4 *)0xF02EC).dtcen4\r
-#define DTCEN4_bit (*(volatile union un_dtcen4 *)0xF02EC).BIT\r
-#define CRC0CTL (*(volatile union un_crc0ctl *)0xF02F0).crc0ctl\r
-#define CRC0CTL_bit (*(volatile union un_crc0ctl *)0xF02F0).BIT\r
-#define PGCRCL (*(volatile unsigned short *)0xF02F2)\r
-#define CRCD (*(volatile unsigned short *)0xF02FA)\r
-#define PFSEG0 (*(volatile union un_pfseg0 *)0xF0300).pfseg0\r
-#define PFSEG0_bit (*(volatile union un_pfseg0 *)0xF0300).BIT\r
-#define PFSEG1 (*(volatile union un_pfseg1 *)0xF0301).pfseg1\r
-#define PFSEG1_bit (*(volatile union un_pfseg1 *)0xF0301).BIT\r
-#define PFSEG2 (*(volatile union un_pfseg2 *)0xF0302).pfseg2\r
-#define PFSEG2_bit (*(volatile union un_pfseg2 *)0xF0302).BIT\r
-#define PFSEG3 (*(volatile union un_pfseg3 *)0xF0303).pfseg3\r
-#define PFSEG3_bit (*(volatile union un_pfseg3 *)0xF0303).BIT\r
-#define PFSEG4 (*(volatile union un_pfseg4 *)0xF0304).pfseg4\r
-#define PFSEG4_bit (*(volatile union un_pfseg4 *)0xF0304).BIT\r
-#define PFSEG5 (*(volatile union un_pfseg5 *)0xF0305).pfseg5\r
-#define PFSEG5_bit (*(volatile union un_pfseg5 *)0xF0305).BIT\r
-#define PFSEG6 (*(volatile union un_pfseg6 *)0xF0306).pfseg6\r
-#define PFSEG6_bit (*(volatile union un_pfseg6 *)0xF0306).BIT\r
-#define ISCLCD (*(volatile union un_isclcd *)0xF0308).isclcd\r
-#define ISCLCD_bit (*(volatile union un_isclcd *)0xF0308).BIT\r
-#define SUBCUD (*(volatile unsigned short *)0xF0310)\r
-#define COMPMDR (*(volatile union un_compmdr *)0xF0340).compmdr\r
-#define COMPMDR_bit (*(volatile union un_compmdr *)0xF0340).BIT\r
-#define COMPFIR (*(volatile union un_compfir *)0xF0341).compfir\r
-#define COMPFIR_bit (*(volatile union un_compfir *)0xF0341).BIT\r
-#define COMPOCR (*(volatile union un_compocr *)0xF0342).compocr\r
-#define COMPOCR_bit (*(volatile union un_compocr *)0xF0342).BIT\r
-#define SEG0 (*(volatile unsigned char *)0xF0400)\r
-#define SEG1 (*(volatile unsigned char *)0xF0401)\r
-#define SEG2 (*(volatile unsigned char *)0xF0402)\r
-#define SEG3 (*(volatile unsigned char *)0xF0403)\r
-#define SEG4 (*(volatile unsigned char *)0xF0404)\r
-#define SEG5 (*(volatile unsigned char *)0xF0405)\r
-#define SEG6 (*(volatile unsigned char *)0xF0406)\r
-#define SEG7 (*(volatile unsigned char *)0xF0407)\r
-#define SEG8 (*(volatile unsigned char *)0xF0408)\r
-#define SEG9 (*(volatile unsigned char *)0xF0409)\r
-#define SEG10 (*(volatile unsigned char *)0xF040A)\r
-#define SEG11 (*(volatile unsigned char *)0xF040B)\r
-#define SEG12 (*(volatile unsigned char *)0xF040C)\r
-#define SEG13 (*(volatile unsigned char *)0xF040D)\r
-#define SEG14 (*(volatile unsigned char *)0xF040E)\r
-#define SEG15 (*(volatile unsigned char *)0xF040F)\r
-#define SEG16 (*(volatile unsigned char *)0xF0410)\r
-#define SEG17 (*(volatile unsigned char *)0xF0411)\r
-#define SEG18 (*(volatile unsigned char *)0xF0412)\r
-#define SEG19 (*(volatile unsigned char *)0xF0413)\r
-#define SEG20 (*(volatile unsigned char *)0xF0414)\r
-#define SEG21 (*(volatile unsigned char *)0xF0415)\r
-#define SEG22 (*(volatile unsigned char *)0xF0416)\r
-#define SEG23 (*(volatile unsigned char *)0xF0417)\r
-#define SEG24 (*(volatile unsigned char *)0xF0418)\r
-#define SEG25 (*(volatile unsigned char *)0xF0419)\r
-#define SEG26 (*(volatile unsigned char *)0xF041A)\r
-#define SEG27 (*(volatile unsigned char *)0xF041B)\r
-#define SEG28 (*(volatile unsigned char *)0xF041C)\r
-#define SEG29 (*(volatile unsigned char *)0xF041D)\r
-#define SEG30 (*(volatile unsigned char *)0xF041E)\r
-#define SEG31 (*(volatile unsigned char *)0xF041F)\r
-#define SEG32 (*(volatile unsigned char *)0xF0420)\r
-#define SEG33 (*(volatile unsigned char *)0xF0421)\r
-#define SEG34 (*(volatile unsigned char *)0xF0422)\r
-#define SEG35 (*(volatile unsigned char *)0xF0423)\r
-#define SEG36 (*(volatile unsigned char *)0xF0424)\r
-#define SEG37 (*(volatile unsigned char *)0xF0425)\r
-#define SEG38 (*(volatile unsigned char *)0xF0426)\r
-#define SEG39 (*(volatile unsigned char *)0xF0427)\r
-#define SEG40 (*(volatile unsigned char *)0xF0428)\r
-#define SEG41 (*(volatile unsigned char *)0xF0429)\r
-#define SEG42 (*(volatile unsigned char *)0xF042A)\r
-#define SEG43 (*(volatile unsigned char *)0xF042B)\r
-#define SEG44 (*(volatile unsigned char *)0xF042C)\r
-#define SEG45 (*(volatile unsigned char *)0xF042D)\r
-#define SEG46 (*(volatile unsigned char *)0xF042E)\r
-#define SEG47 (*(volatile unsigned char *)0xF042F)\r
-#define SEG48 (*(volatile unsigned char *)0xF0430)\r
-#define SEG49 (*(volatile unsigned char *)0xF0431)\r
-#define SEG50 (*(volatile unsigned char *)0xF0432)\r
-#define SEG51 (*(volatile unsigned char *)0xF0433)\r
-#define SEG52 (*(volatile unsigned char *)0xF0434)\r
-#define SEG53 (*(volatile unsigned char *)0xF0435)\r
-#define SEG54 (*(volatile unsigned char *)0xF0436)\r
-#define SEG55 (*(volatile unsigned char *)0xF0437)\r
-#define TKBCR00 (*(volatile unsigned short *)0xF0500)\r
-#define TKBCR01 (*(volatile unsigned short *)0xF0502)\r
-#define TKBCR02 (*(volatile unsigned short *)0xF0504)\r
-#define TKBCR03 (*(volatile unsigned short *)0xF0506)\r
-#define TKBTGCR0 (*(volatile unsigned short *)0xF0508)\r
-#define TKBSIR00 (*(volatile unsigned short *)0xF050A)\r
-#define TKBSIR01 (*(volatile unsigned short *)0xF050C)\r
-#define TKBDNR00 (*(volatile unsigned char *)0xF050E)\r
-#define TKBSSR00 (*(volatile unsigned char *)0xF050F)\r
-#define TKBDNR01 (*(volatile unsigned char *)0xF0510)\r
-#define TKBSSR01 (*(volatile unsigned char *)0xF0511)\r
-#define TKBTRG0 (*(volatile union un_tkbtrg0 *)0xF0512).tkbtrg0\r
-#define TKBTRG0_bit (*(volatile union un_tkbtrg0 *)0xF0512).BIT\r
-#define TKBFLG0 (*(volatile union un_tkbflg0 *)0xF0513).tkbflg0\r
-#define TKBFLG0_bit (*(volatile union un_tkbflg0 *)0xF0513).BIT\r
-#define TKBCRLD00 (*(volatile unsigned short *)0xF0514)\r
-#define TKBCRLD01 (*(volatile unsigned short *)0xF0516)\r
-#define TKBCNT0 (*(volatile unsigned short *)0xF0520)\r
-#define TKBCTL00 (*(volatile unsigned short *)0xF0522)\r
-#define TKBMFR0 (*(volatile unsigned short *)0xF0524)\r
-#define TKBIOC00 (*(volatile union un_tkbioc00 *)0xF0526).tkbioc00\r
-#define TKBIOC00_bit (*(volatile union un_tkbioc00 *)0xF0526).BIT\r
-#define TKBCLR0 (*(volatile union un_tkbclr0 *)0xF0527).tkbclr0\r
-#define TKBCLR0_bit (*(volatile union un_tkbclr0 *)0xF0527).BIT\r
-#define TKBIOC01 (*(volatile union un_tkbioc01 *)0xF0528).tkbioc01\r
-#define TKBIOC01_bit (*(volatile union un_tkbioc01 *)0xF0528).BIT\r
-#define TKBCTL01 (*(volatile union un_tkbctl01 *)0xF0529).tkbctl01\r
-#define TKBCTL01_bit (*(volatile union un_tkbctl01 *)0xF0529).BIT\r
-#define TKBPSCS0 (*(volatile unsigned char *)0xF052A)\r
-#define TKBPACTL00 (*(volatile unsigned short *)0xF0530)\r
-#define TKBPACTL01 (*(volatile unsigned short *)0xF0532)\r
-#define TKBPAHFS0 (*(volatile union un_tkbpahfs0 *)0xF0534).tkbpahfs0\r
-#define TKBPAHFS0_bit (*(volatile union un_tkbpahfs0 *)0xF0534).BIT\r
-#define TKBPAHFT0 (*(volatile union un_tkbpahft0 *)0xF0535).tkbpahft0\r
-#define TKBPAHFT0_bit (*(volatile union un_tkbpahft0 *)0xF0535).BIT\r
-#define TKBPAFLG0 (*(volatile union un_tkbpaflg0 *)0xF0536).tkbpaflg0\r
-#define TKBPAFLG0_bit (*(volatile union un_tkbpaflg0 *)0xF0536).BIT\r
-#define TKBPACTL02 (*(volatile union un_tkbpactl02 *)0xF0537).tkbpactl02\r
-#define TKBPACTL02_bit (*(volatile union un_tkbpactl02 *)0xF0537).BIT\r
-#define D0FIFOD00 (*(volatile unsigned short *)0xF0580)\r
-#define D1FIFOD00 (*(volatile unsigned short *)0xF05C0)\r
-#define SYSCFG (*(volatile unsigned short *)0xF0600)\r
-#define SYSSTS0 (*(volatile unsigned short *)0xF0604)\r
-#define DVSTCTR0 (*(volatile unsigned short *)0xF0608)\r
-#define CFIFOM (*(volatile unsigned short *)0xF0614)\r
-#define CFIFOML (*(volatile unsigned char *)0xF0614)\r
-#define D0FIFOM (*(volatile unsigned short *)0xF0618)\r
-#define D0FIFOML (*(volatile unsigned char *)0xF0618)\r
-#define D1FIFOM (*(volatile unsigned short *)0xF061C)\r
-#define D1FIFOML (*(volatile unsigned char *)0xF061C)\r
-#define CFIFOSEL (*(volatile unsigned short *)0xF0620)\r
-#define CFIFOCTR (*(volatile unsigned short *)0xF0622)\r
-#define D0FIFOSEL (*(volatile unsigned short *)0xF0628)\r
-#define D0FIFOCTR (*(volatile unsigned short *)0xF062A)\r
-#define D1FIFOSEL (*(volatile unsigned short *)0xF062C)\r
-#define D1FIFOCTR (*(volatile unsigned short *)0xF062E)\r
-#define INTENB0 (*(volatile unsigned short *)0xF0630)\r
-#define INTENB1 (*(volatile unsigned short *)0xF0632)\r
-#define BRDYENB (*(volatile unsigned short *)0xF0636)\r
-#define NRDYENB (*(volatile unsigned short *)0xF0638)\r
-#define BEMPENB (*(volatile unsigned short *)0xF063A)\r
-#define SOFCFG (*(volatile unsigned short *)0xF063C)\r
-#define INTSTS0 (*(volatile unsigned short *)0xF0640)\r
-#define INTSTS1 (*(volatile unsigned short *)0xF0642)\r
-#define BRDYSTS (*(volatile unsigned short *)0xF0646)\r
-#define NRDYSTS (*(volatile unsigned short *)0xF0648)\r
-#define BEMPSTS (*(volatile unsigned short *)0xF064A)\r
-#define FRMNUM (*(volatile unsigned short *)0xF064C)\r
-#define USBADDR (*(volatile unsigned short *)0xF0650)\r
-#define USBREQ (*(volatile unsigned short *)0xF0654)\r
-#define USBVAL (*(volatile unsigned short *)0xF0656)\r
-#define USBINDX (*(volatile unsigned short *)0xF0658)\r
-#define USBLENG (*(volatile unsigned short *)0xF065A)\r
-#define DCPCFG (*(volatile unsigned short *)0xF065C)\r
-#define DCPMAXP (*(volatile unsigned short *)0xF065E)\r
-#define DCPCTR (*(volatile unsigned short *)0xF0660)\r
-#define PIPESEL (*(volatile unsigned short *)0xF0664)\r
-#define PIPECFG (*(volatile unsigned short *)0xF0668)\r
-#define PIPEMAXP (*(volatile unsigned short *)0xF066C)\r
-#define PIPE4CTR (*(volatile unsigned short *)0xF0676)\r
-#define PIPE5CTR (*(volatile unsigned short *)0xF0678)\r
-#define PIPE6CTR (*(volatile unsigned short *)0xF067A)\r
-#define PIPE7CTR (*(volatile unsigned short *)0xF067C)\r
-#define PIPE4TRE (*(volatile unsigned short *)0xF069C)\r
-#define PIPE4TRN (*(volatile unsigned short *)0xF069E)\r
-#define PIPE5TRE (*(volatile unsigned short *)0xF06A0)\r
-#define PIPE5TRN (*(volatile unsigned short *)0xF06A2)\r
-#define DTC0PCFG (*(volatile unsigned short *)0xF06A8)\r
-#define DTC1PCFG (*(volatile unsigned short *)0xF06AC)\r
-#define USBBCCTRL0 (*(volatile unsigned short *)0xF06B0)\r
-#define USBBCOPT0 (*(volatile unsigned short *)0xF06B8)\r
-#define USBMC (*(volatile unsigned short *)0xF06CC)\r
-\r
-/*\r
- Sfr bits\r
- */\r
-#define ADTYP ADM2_bit.no0\r
-#define AWC ADM2_bit.no2\r
-#define ADRCK ADM2_bit.no3\r
-#define TOS0 TOS_bit.no0\r
-#define DACEN PER1_bit.no0\r
-#define DTCEN PER1_bit.no3\r
-#define TKB20EN PER1_bit.no4\r
-#define CMPEN PER1_bit.no5\r
-#define TMKAEN PER1_bit.no7\r
-#define DFLEN DFLCTL_bit.no0\r
-#define TAU0EN PER0_bit.no0\r
-#define SAU0EN PER0_bit.no2\r
-#define SAU1EN PER0_bit.no3\r
-#define IICA0EN PER0_bit.no4\r
-#define ADCEN PER0_bit.no5\r
-#define RTCWEN PER0_bit.no7\r
-#define RPEF RPECTL_bit.no0\r
-#define RPERDIS RPECTL_bit.no7\r
-#define TKB21EN PER2_bit.no0\r
-#define TKB22EN PER2_bit.no1\r
-#define SPT0 IICCTL00_bit.no0\r
-#define STT0 IICCTL00_bit.no1\r
-#define ACKE0 IICCTL00_bit.no2\r
-#define WTIM0 IICCTL00_bit.no3\r
-#define SPIE0 IICCTL00_bit.no4\r
-#define WREL0 IICCTL00_bit.no5\r
-#define LREL0 IICCTL00_bit.no6\r
-#define IICE0 IICCTL00_bit.no7\r
-#define PRS0 IICCTL01_bit.no0\r
-#define DFC0 IICCTL01_bit.no2\r
-#define SMC0 IICCTL01_bit.no3\r
-#define DAD0 IICCTL01_bit.no4\r
-#define CLD0 IICCTL01_bit.no5\r
-#define WUP0 IICCTL01_bit.no7\r
-#define TKBRDT1 TKBTRG1_bit.no0\r
-#define TKBRSF1 TKBFLG1_bit.no0\r
-#define TKBMFF1 TKBFLG1_bit.no1\r
-#define TKBIEF1 TKBFLG1_bit.no2\r
-#define TKBIRF1 TKBFLG1_bit.no3\r
-#define TKBSEF10 TKBFLG1_bit.no4\r
-#define TKBSEF11 TKBFLG1_bit.no5\r
-#define TKBSSF10 TKBFLG1_bit.no6\r
-#define TKBSSF11 TKBFLG1_bit.no7\r
-#define TKBTOD10 TKBIOC10_bit.no0\r
-#define TKBTOD11 TKBIOC10_bit.no1\r
-#define TKBTOL10 TKBIOC10_bit.no2\r
-#define TKBTOL11 TKBIOC10_bit.no3\r
-#define TKBCLMF1 TKBCLR1_bit.no1\r
-#define TKBCLIE1 TKBCLR1_bit.no2\r
-#define TKBCLIR1 TKBCLR1_bit.no3\r
-#define TKBCLSE10 TKBCLR1_bit.no4\r
-#define TKBCLSE11 TKBCLR1_bit.no5\r
-#define TKBTOE10 TKBIOC11_bit.no0\r
-#define TKBTOE11 TKBIOC11_bit.no1\r
-#define TKBCE1 TKBCTL11_bit.no7\r
-#define TKBPAHTS10 TKBPAHFS1_bit.no0\r
-#define TKBPAHTS11 TKBPAHFS1_bit.no1\r
-#define TKBPAHTT10 TKBPAHFT1_bit.no0\r
-#define TKBPAHTT11 TKBPAHFT1_bit.no1\r
-#define TKBPAHIF10 TKBPAFLG1_bit.no0\r
-#define TKBPAFIF10 TKBPAFLG1_bit.no1\r
-#define TKBPAHIF11 TKBPAFLG1_bit.no2\r
-#define TKBPAFIF11 TKBPAFLG1_bit.no3\r
-#define TKBPAHSF10 TKBPAFLG1_bit.no4\r
-#define TKBPAFSF10 TKBPAFLG1_bit.no5\r
-#define TKBPAHSF11 TKBPAFLG1_bit.no6\r
-#define TKBPAFSF11 TKBPAFLG1_bit.no7\r
-#define TKBPACE10 TKBPACTL12_bit.no0\r
-#define TKBPACE11 TKBPACTL12_bit.no1\r
-#define TKBRDT2 TKBTRG2_bit.no0\r
-#define TKBRSF2 TKBFLG2_bit.no0\r
-#define TKBMFF2 TKBFLG2_bit.no1\r
-#define TKBIEF2 TKBFLG2_bit.no2\r
-#define TKBIRF2 TKBFLG2_bit.no3\r
-#define TKBSEF20 TKBFLG2_bit.no4\r
-#define TKBSEF21 TKBFLG2_bit.no5\r
-#define TKBSSF20 TKBFLG2_bit.no6\r
-#define TKBSSF21 TKBFLG2_bit.no7\r
-#define TKBTOD20 TKBIOC20_bit.no0\r
-#define TKBTOD21 TKBIOC20_bit.no1\r
-#define TKBTOL20 TKBIOC20_bit.no2\r
-#define TKBTOL21 TKBIOC20_bit.no3\r
-#define TKBCLMF2 TKBCLR2_bit.no1\r
-#define TKBCLIE2 TKBCLR2_bit.no2\r
-#define TKBCLIR2 TKBCLR2_bit.no3\r
-#define TKBCLSE20 TKBCLR2_bit.no4\r
-#define TKBCLSE21 TKBCLR2_bit.no5\r
-#define TKBTOE20 TKBIOC21_bit.no0\r
-#define TKBTOE21 TKBIOC21_bit.no1\r
-#define TKBCE2 TKBCTL21_bit.no7\r
-#define TKBPAHTS20 TKBPAHFS2_bit.no0\r
-#define TKBPAHTS21 TKBPAHFS2_bit.no1\r
-#define TKBPAHTT20 TKBPAHFT2_bit.no0\r
-#define TKBPAHTT21 TKBPAHFT2_bit.no1\r
-#define TKBPAHIF20 TKBPAFLG2_bit.no0\r
-#define TKBPAFIF20 TKBPAFLG2_bit.no1\r
-#define TKBPAHIF21 TKBPAFLG2_bit.no2\r
-#define TKBPAFIF21 TKBPAFLG2_bit.no3\r
-#define TKBPAHSF20 TKBPAFLG2_bit.no4\r
-#define TKBPAFSF20 TKBPAFLG2_bit.no5\r
-#define TKBPAHSF21 TKBPAFLG2_bit.no6\r
-#define TKBPAFSF21 TKBPAFLG2_bit.no7\r
-#define TKBPACE20 TKBPACTL22_bit.no0\r
-#define TKBPACE21 TKBPACTL22_bit.no1\r
-#define CRC0EN CRC0CTL_bit.no7\r
-#define PFSEG04 PFSEG0_bit.no4\r
-#define PFSEG05 PFSEG0_bit.no5\r
-#define PFSEG06 PFSEG0_bit.no6\r
-#define PFSEG07 PFSEG0_bit.no7\r
-#define PFSEG08 PFSEG1_bit.no0\r
-#define PFSEG09 PFSEG1_bit.no1\r
-#define PFSEG10 PFSEG1_bit.no2\r
-#define PFSEG11 PFSEG1_bit.no3\r
-#define PFSEG12 PFSEG1_bit.no4\r
-#define PFSEG13 PFSEG1_bit.no5\r
-#define PFSEG14 PFSEG1_bit.no6\r
-#define PFSEG15 PFSEG1_bit.no7\r
-#define PFSEG16 PFSEG2_bit.no0\r
-#define PFSEG17 PFSEG2_bit.no1\r
-#define PFSEG18 PFSEG2_bit.no2\r
-#define PFSEG19 PFSEG2_bit.no3\r
-#define PFSEG20 PFSEG2_bit.no4\r
-#define PFSEG21 PFSEG2_bit.no5\r
-#define PFSEG22 PFSEG2_bit.no6\r
-#define PFSEG23 PFSEG2_bit.no7\r
-#define PFSEG24 PFSEG3_bit.no0\r
-#define PFSEG25 PFSEG3_bit.no1\r
-#define PFSEG26 PFSEG3_bit.no2\r
-#define PFSEG27 PFSEG3_bit.no3\r
-#define PFSEG28 PFSEG3_bit.no4\r
-#define PFSEG29 PFSEG3_bit.no5\r
-#define PFSEG30 PFSEG3_bit.no6\r
-#define PFSEG31 PFSEG3_bit.no7\r
-#define PFSEG32 PFSEG4_bit.no0\r
-#define PFSEG33 PFSEG4_bit.no1\r
-#define PFSEG34 PFSEG4_bit.no2\r
-#define PFSEG35 PFSEG4_bit.no3\r
-#define PFSEG36 PFSEG4_bit.no4\r
-#define PFSEG37 PFSEG4_bit.no5\r
-#define PFSEG38 PFSEG4_bit.no6\r
-#define PFSEG39 PFSEG4_bit.no7\r
-#define PFSEG40 PFSEG5_bit.no0\r
-#define PFSEG41 PFSEG5_bit.no1\r
-#define PFSEG42 PFSEG5_bit.no2\r
-#define PFSEG43 PFSEG5_bit.no3\r
-#define PFSEG44 PFSEG5_bit.no4\r
-#define PFSEG45 PFSEG5_bit.no5\r
-#define PFSEG46 PFSEG5_bit.no6\r
-#define PFSEG47 PFSEG5_bit.no7\r
-#define PFSEG48 PFSEG6_bit.no0\r
-#define PFSEG49 PFSEG6_bit.no1\r
-#define PFSEG50 PFSEG6_bit.no2\r
-#define PFSEG51 PFSEG6_bit.no3\r
-#define PFSEG52 PFSEG6_bit.no4\r
-#define PFSEG53 PFSEG6_bit.no5\r
-#define PFSEG54 PFSEG6_bit.no6\r
-#define PFSEG55 PFSEG6_bit.no7\r
-#define C0ENB COMPMDR_bit.no0\r
-#define C0MON COMPMDR_bit.no3\r
-#define C1ENB COMPMDR_bit.no4\r
-#define C1MON COMPMDR_bit.no7\r
-#define C0IE COMPOCR_bit.no0\r
-#define C0OE COMPOCR_bit.no1\r
-#define C0OP COMPOCR_bit.no2\r
-#define C1IE COMPOCR_bit.no4\r
-#define C1OE COMPOCR_bit.no5\r
-#define C1OP COMPOCR_bit.no6\r
-#define SPDMD COMPOCR_bit.no7\r
-#define TKBRDT0 TKBTRG0_bit.no0\r
-#define TKBRSF0 TKBFLG0_bit.no0\r
-#define TKBMFF0 TKBFLG0_bit.no1\r
-#define TKBIEF0 TKBFLG0_bit.no2\r
-#define TKBIRF0 TKBFLG0_bit.no3\r
-#define TKBSEF00 TKBFLG0_bit.no4\r
-#define TKBSEF01 TKBFLG0_bit.no5\r
-#define TKBSSF00 TKBFLG0_bit.no6\r
-#define TKBSSF01 TKBFLG0_bit.no7\r
-#define TKBTOD00 TKBIOC00_bit.no0\r
-#define TKBTOD01 TKBIOC00_bit.no1\r
-#define TKBTOL00 TKBIOC00_bit.no2\r
-#define TKBTOL01 TKBIOC00_bit.no3\r
-#define TKBCLMF0 TKBCLR0_bit.no1\r
-#define TKBCLIE0 TKBCLR0_bit.no2\r
-#define TKBCLIR0 TKBCLR0_bit.no3\r
-#define TKBCLSE00 TKBCLR0_bit.no4\r
-#define TKBCLSE01 TKBCLR0_bit.no5\r
-#define TKBTOE00 TKBIOC01_bit.no0\r
-#define TKBTOE01 TKBIOC01_bit.no1\r
-#define TKBCE0 TKBCTL01_bit.no7\r
-#define TKBPAHTS00 TKBPAHFS0_bit.no0\r
-#define TKBPAHTS01 TKBPAHFS0_bit.no1\r
-#define TKBPAHTT00 TKBPAHFT0_bit.no0\r
-#define TKBPAHTT01 TKBPAHFT0_bit.no1\r
-#define TKBPAHIF00 TKBPAFLG0_bit.no0\r
-#define TKBPAFIF00 TKBPAFLG0_bit.no1\r
-#define TKBPAHIF01 TKBPAFLG0_bit.no2\r
-#define TKBPAFIF01 TKBPAFLG0_bit.no3\r
-#define TKBPAHSF00 TKBPAFLG0_bit.no4\r
-#define TKBPAFSF00 TKBPAFLG0_bit.no5\r
-#define TKBPAHSF01 TKBPAFLG0_bit.no6\r
-#define TKBPAFSF01 TKBPAFLG0_bit.no7\r
-#define TKBPACE00 TKBPACTL02_bit.no0\r
-#define TKBPACE01 TKBPACTL02_bit.no1\r
-\r
-/*\r
- Interrupt vector addresses\r
- */\r
-#endif\r
diff --git a/FreeRTOS/Demo/RL78_E2Studio_GCC/src/main.c b/FreeRTOS/Demo/RL78_E2Studio_GCC/src/main.c
deleted file mode 100644 (file)
index b3f0fc0..0000000
+++ /dev/null
@@ -1,210 +0,0 @@
-/*\r
- * FreeRTOS Kernel V10.1.0\r
- * Copyright (C) 2018 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
- * This project provides two demo applications.  A simple blinky style project,\r
- * and a more comprehensive test and demo application.  The\r
- * mainCREATE_SIMPLE_BLINKY_DEMO_ONLY setting (defined in this file) is used to\r
- * select between the two.  The simply blinky demo is implemented and described\r
- * in main_blinky.c.  The more comprehensive test and demo application is\r
- * implemented and described in main_full.c.\r
- *\r
- * This file implements the code that is not demo specific, including the\r
- * hardware setup and FreeRTOS hook functions.\r
- *\r
- * This project does not provide an example of how to write an RTOS compatible\r
- * interrupt service routine (other than the tick interrupt itself), so this\r
- * file contains the function vAnExampleISR_C_Handler() as a dummy example (that\r
- * is not actually installed) that can be used as a reference.  Also see the\r
- * file ExampleISR.S, and the documentation page for this demo on the\r
- * FreeRTOS.org website for full instructions.\r
- *\r
- * ENSURE TO READ THE DOCUMENTATION PAGE FOR THIS PORT AND DEMO APPLICATION ON\r
- * THE http://www.FreeRTOS.org WEB SITE FOR FULL INFORMATION ON USING THIS DEMO\r
- * APPLICATION, AND ITS ASSOCIATE FreeRTOS ARCHITECTURE PORT!\r
- *\r
- */\r
-\r
-/* Scheduler include files. */\r
-#include "FreeRTOS.h"\r
-#include "task.h"\r
-#include "semphr.h"\r
-\r
-/* Set mainCREATE_SIMPLE_BLINKY_DEMO_ONLY to one to run the simple blinky demo,\r
-or 0 to run the more comprehensive test and demo application. */\r
-#define mainCREATE_SIMPLE_BLINKY_DEMO_ONLY     0\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-/*\r
- * main_blinky() is used when mainCREATE_SIMPLE_BLINKY_DEMO_ONLY is set to 1.\r
- * main_full() is used when mainCREATE_SIMPLE_BLINKY_DEMO_ONLY is set to 0.\r
- */\r
-#if mainCREATE_SIMPLE_BLINKY_DEMO_ONLY == 1\r
-       extern void main_blinky( void );\r
-#else\r
-    extern void main_full( void );\r
-#endif\r
-\r
-/* Prototypes for the standard FreeRTOS callback/hook functions implemented\r
-within this file. */\r
-void vApplicationMallocFailedHook( void );\r
-void vApplicationIdleHook( void );\r
-void vApplicationStackOverflowHook( TaskHandle_t pxTask, char *pcTaskName );\r
-void vApplicationTickHook( void );\r
-\r
-/* This variable is not actually used, but provided to allow an example of how\r
-to write an ISR to be included in this file. */\r
-static SemaphoreHandle_t xSemaphore = NULL;\r
-/*-----------------------------------------------------------*/\r
-\r
-#define portPSW ( 0xc6UL )\r
-volatile uint32_t *pulAddress;\r
-volatile uint32_t ulValue, ulError = 0;\r
-\r
-int main( void )\r
-{\r
-       /* Store an address below 0x8000 */\r
-       pulAddress = ( uint32_t * ) 0x7fff;\r
-\r
-       /* Cast and OR with a value that uses the two most significant\r
-       bytes. */\r
-       ulValue = ( ( uint32_t ) pulAddress ) | ( portPSW << 24UL );\r
-\r
-       /* This test passes. */\r
-       if( ulValue != 0xc6007fff )\r
-       {\r
-               /* This line of code is not executed. */\r
-               ulError = 1;\r
-       }\r
-\r
-       /* Now do the same, but with an address above 0x7fff, but\r
-       still slower than the max 16-bit value. */\r
-       pulAddress = ( uint32_t * ) 0x8000;\r
-       ulValue = ( ( uint32_t ) pulAddress ) | ( portPSW << 24UL );\r
-\r
-       /* This test *fails*. */\r
-       if( ulValue != 0xc6008000 )\r
-       {\r
-               /* This line of code *is* executed. */\r
-               ulError = 1;\r
-       }\r
-\r
-\r
-       /* The mainCREATE_SIMPLE_BLINKY_DEMO_ONLY setting is\r
-       described at the top of this file. */\r
-       #if mainCREATE_SIMPLE_BLINKY_DEMO_ONLY == 1\r
-       {\r
-               main_blinky();\r
-       }\r
-       #else\r
-       {\r
-               main_full();\r
-       }\r
-       #endif\r
-\r
-       /* Should not get here.  See the definitions of main_blinky() and\r
-       main_full(). */\r
-       return 0;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-void vAnExampleISR_C_Handler( void )\r
-{\r
-       /*\r
-        * This demo does not include a functional interrupt service routine - so\r
-        * this dummy handler (which is not actually installed) is provided as an\r
-        * example of how an ISR that needs to cause a context switch needs to be\r
-        * implemented.  ISRs that do not cause a context switch have no special\r
-        * requirements and can be written as per the compiler documentation.\r
-        *\r
-        * This C function is called from a wrapper function that is implemented\r
-        * in assembly code.  See vANExampleISR_ASM_Wrapper() in ExampleISR.S.  Also\r
-        * see the documentation page for this demo on the FreeRTOS.org website for\r
-        * full instructions.\r
-        */\r
-short sHigherPriorityTaskWoken = pdFALSE;\r
-\r
-       /* Handler code goes here...*/\r
-\r
-       /* For purposes of demonstration, assume at some point the hander calls\r
-       xSemaphoreGiveFromISR().*/\r
-       xSemaphoreGiveFromISR( xSemaphore, &sHigherPriorityTaskWoken );\r
-\r
-       /* If giving the semaphore unblocked a task, and the unblocked task has a\r
-       priority higher than or equal to the currently running task, then\r
-       sHigherPriorityTaskWoken will have been set to pdTRUE internally within the\r
-       xSemaphoreGiveFromISR() function.  Passing a pdTRUE     value to\r
-       portYIELD_FROM_ISR() will cause this interrupt to return directly to the\r
-       higher priority unblocked task. */\r
-       portYIELD_FROM_ISR( sHigherPriorityTaskWoken );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-void vApplicationMallocFailedHook( void )\r
-{\r
-       /* Called if a call to pvPortMalloc() fails because there is insufficient\r
-       free memory available in the FreeRTOS heap.  pvPortMalloc() is called\r
-       internally by FreeRTOS API functions that create tasks, queues, software\r
-       timers, and semaphores.  The size of the FreeRTOS heap is set by the\r
-       configTOTAL_HEAP_SIZE configuration constant in FreeRTOSConfig.h. */\r
-       taskDISABLE_INTERRUPTS();\r
-       for( ;; );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-void vApplicationStackOverflowHook( TaskHandle_t pxTask, char *pcTaskName )\r
-{\r
-       ( void ) pcTaskName;\r
-       ( void ) pxTask;\r
-\r
-       /* Run time stack overflow checking is performed if\r
-       configCHECK_FOR_STACK_OVERFLOW is defined to 1 or 2.  This hook\r
-       function is called if a stack overflow is detected. */\r
-       taskDISABLE_INTERRUPTS();\r
-       for( ;; );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-void vApplicationIdleHook( void )\r
-{\r
-volatile size_t xFreeHeapSpace;\r
-\r
-       /* This is just a trivial example of an idle hook.  It is called on each\r
-       cycle of the idle task.  It must *NOT* attempt to block.  In this case the\r
-       idle task just queries the amount of FreeRTOS heap that remains.  See the\r
-       memory management section on the http://www.FreeRTOS.org web site for memory\r
-       management options.  If there is a lot of heap memory free then the\r
-       configTOTAL_HEAP_SIZE value in FreeRTOSConfig.h can be reduced to free up\r
-       RAM. */\r
-       xFreeHeapSpace = xPortGetFreeHeapSize();\r
-\r
-       /* Remove compiler warning about xFreeHeapSpace being set but never used. */\r
-       ( void ) xFreeHeapSpace;\r
-}\r
-\r
-\r
diff --git a/FreeRTOS/Demo/RL78_E2Studio_GCC/src/main_blinky.c b/FreeRTOS/Demo/RL78_E2Studio_GCC/src/main_blinky.c
deleted file mode 100644 (file)
index eb2237e..0000000
+++ /dev/null
@@ -1,195 +0,0 @@
-/*\r
- * FreeRTOS Kernel V10.1.0\r
- * Copyright (C) 2018 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
- * NOTE 1:  This project provides two demo applications.  A simple blinky style\r
- * project, and a more comprehensive test and demo application.  The\r
- * mainCREATE_SIMPLE_BLINKY_DEMO_ONLY setting in main.c is used to select\r
- * between the two.  See the notes on using mainCREATE_SIMPLE_BLINKY_DEMO_ONLY\r
- * in main.c.  This file implements the simply blinky style version.\r
- *\r
- * NOTE 2:  This file only contains the source code that is specific to the\r
- * basic demo.  Generic functions, such FreeRTOS hook functions, and functions\r
- * required to configure the hardware, along with an example interrupt service\r
- * routine, are defined in main.c.\r
- ******************************************************************************\r
- *\r
- * main_blinky() creates one queue, and two tasks.  It then starts the\r
- * scheduler.\r
- *\r
- * The Queue Send Task:\r
- * The queue send task is implemented by the prvQueueSendTask() function in\r
- * this file.  prvQueueSendTask() sits in a loop that causes it to repeatedly\r
- * block for 200 milliseconds, before sending the value 100 to the queue that\r
- * was created within main_blinky().  Once the value is sent, the task loops\r
- * back around to block for another 200 milliseconds.\r
- *\r
- * The Queue Receive Task:\r
- * The queue receive task is implemented by the prvQueueReceiveTask() function\r
- * in this file.  prvQueueReceiveTask() sits in a loop where it repeatedly\r
- * blocks on attempts to read data from the queue that was created within\r
- * main_blinky().  When data is received, the task checks the value of the\r
- * data, and if the value equals the expected 100, toggles the LED.  The 'block\r
- * time' parameter passed to the queue receive function specifies that the\r
- * task should be held in the Blocked state indefinitely to wait for data to\r
- * be available on the queue.  The queue receive task will only leave the\r
- * Blocked state when the queue send task writes to the queue.  As the queue\r
- * send task writes to the queue every 200 milliseconds, the queue receive\r
- * task leaves the Blocked state every 200 milliseconds, and therefore toggles\r
- * the LED every 200 milliseconds.\r
- */\r
-\r
-/* Standard includes. */\r
-#include <stdio.h>\r
-\r
-/* Kernel includes. */\r
-#include "FreeRTOS.h"\r
-#include "task.h"\r
-#include "semphr.h"\r
-\r
-/* Eval board specific definitions. */\r
-#include "demo_specific_io.h"\r
-\r
-/* Priorities at which the tasks are created. */\r
-#define mainQUEUE_RECEIVE_TASK_PRIORITY                ( tskIDLE_PRIORITY + 2 )\r
-#define        mainQUEUE_SEND_TASK_PRIORITY            ( tskIDLE_PRIORITY + 1 )\r
-\r
-/* The rate at which data is sent to the queue.  The 200ms value is converted\r
-to ticks using the portTICK_PERIOD_MS constant. */\r
-#define mainQUEUE_SEND_FREQUENCY_MS                    ( 200 / portTICK_PERIOD_MS )\r
-\r
-/* The number of items the queue can hold.  This is 1 as the receive task\r
-will remove items as they are added, meaning the send task should always find\r
-the queue empty. */\r
-#define mainQUEUE_LENGTH                                       ( 1 )\r
-\r
-/* Used to check the task parameter passing in both supported memory models. */\r
-#define mainQUEUE_SEND_PARAMETER       ( ( void * ) 0x1234U )\r
-#define mainQUEUE_RECEIVE_PARAMETER    ( ( void * ) 0x1122U )\r
-/*-----------------------------------------------------------*/\r
-\r
-/*\r
- * The tasks as described in the comments at the top of this file.\r
- */\r
-static void prvQueueReceiveTask( void *pvParameters );\r
-static void prvQueueSendTask( void *pvParameters );\r
-\r
-/*\r
- * Called by main() to create the simply blinky style application if\r
- * mainCREATE_SIMPLE_BLINKY_DEMO_ONLY is set to 1.\r
- */\r
-void main_blinky( void );\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-/* The queue used by both tasks. */\r
-static QueueHandle_t xQueue = NULL;\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-void main_blinky( void )\r
-{\r
-       /* Create the queue. */\r
-       xQueue = xQueueCreate( mainQUEUE_LENGTH, sizeof( unsigned long ) );\r
-\r
-       if( xQueue != NULL )\r
-       {\r
-               /* Start the two tasks as described in the comments at the top of this\r
-               file. */\r
-               xTaskCreate( prvQueueReceiveTask,                       /* The function that implements the task. */\r
-                                       "Rx",                                                   /* The text name assigned to the task - for debug only as it is not used by the kernel. */\r
-                                       configMINIMAL_STACK_SIZE,               /* The size of the stack to allocate to the task. */\r
-                                       mainQUEUE_RECEIVE_PARAMETER,    /* The parameter passed to the task - just used to check the port in this case. */\r
-                                       mainQUEUE_RECEIVE_TASK_PRIORITY,/* The priority assigned to the task. */\r
-                                       NULL );                                                 /* The task handle is not required, so NULL is passed. */\r
-\r
-               xTaskCreate( prvQueueSendTask, "TX", configMINIMAL_STACK_SIZE, mainQUEUE_SEND_PARAMETER, mainQUEUE_SEND_TASK_PRIORITY, NULL );\r
-\r
-               /* Start the tasks and timer running. */\r
-               vTaskStartScheduler();\r
-       }\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.  http://www.freertos.org/a00111.html. */\r
-       for( ;; );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvQueueSendTask( void *pvParameters )\r
-{\r
-TickType_t xNextWakeTime;\r
-const unsigned long ulValueToSend = 100UL;\r
-\r
-       /* Check the parameter was passed in correctly. */\r
-       configASSERT( pvParameters == mainQUEUE_SEND_PARAMETER )\r
-\r
-       /* Initialise xNextWakeTime - this only needs to be done once. */\r
-       xNextWakeTime = xTaskGetTickCount();\r
-\r
-       for( ;; )\r
-       {\r
-               /* Place this task in the blocked state until it is time to run again. */\r
-               vTaskDelayUntil( &xNextWakeTime, mainQUEUE_SEND_FREQUENCY_MS );\r
-\r
-               /* Send to the queue - causing the queue receive task to unblock and\r
-               toggle the LED.  0 is used as the block time so the sending operation\r
-               will not block - it shouldn't need to block as the queue should always\r
-               be empty at this point in the code. */\r
-               xQueueSend( xQueue, &ulValueToSend, 0U );\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvQueueReceiveTask( void *pvParameters )\r
-{\r
-unsigned long ulReceivedValue;\r
-const unsigned long ulExpectedValue = 100UL;\r
-\r
-       /* Check the parameter was passed in correctly. */\r
-       configASSERT( pvParameters == mainQUEUE_RECEIVE_PARAMETER )\r
-\r
-       for( ;; )\r
-       {\r
-               /* Wait until something arrives in the queue - this task will block\r
-               indefinitely provided INCLUDE_vTaskSuspend is set to 1 in\r
-               FreeRTOSConfig.h. */\r
-               xQueueReceive( xQueue, &ulReceivedValue, portMAX_DELAY );\r
-\r
-               /*  To get here something must have been received from the queue, but\r
-               is it the expected value?  If it is, toggle the LED. */\r
-               if( ulReceivedValue == ulExpectedValue )\r
-               {\r
-                       LED_BIT = !LED_BIT;\r
-                       ulReceivedValue = 0U;\r
-               }\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
diff --git a/FreeRTOS/Demo/RL78_E2Studio_GCC/src/main_full.c b/FreeRTOS/Demo/RL78_E2Studio_GCC/src/main_full.c
deleted file mode 100644 (file)
index 090e310..0000000
+++ /dev/null
@@ -1,379 +0,0 @@
-/*\r
- * FreeRTOS Kernel V10.1.0\r
- * Copyright (C) 2018 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
- * NOTE 1:  This project provides two demo applications.  A simple blinky style\r
- * project, and a more comprehensive test and demo application.  The\r
- * mainCREATE_SIMPLE_BLINKY_DEMO_ONLY setting in main.c is used to select\r
- * between the two.  See the notes on using mainCREATE_SIMPLE_BLINKY_DEMO_ONLY\r
- * in main.c.  This file implements the comprehensive test and demo version.\r
- *\r
- * NOTE 2:  This file only contains the source code that is specific to the\r
- * full demo.  Generic functions, such FreeRTOS hook functions, and functions\r
- * required to configure the hardware, along with an example of how to write an\r
- * interrupt service routine, are defined in main.c.\r
- ******************************************************************************\r
- *\r
- * main_full() creates all the demo application tasks and two software timers,\r
- * then starts the scheduler.  The web documentation provides more details of\r
- * the standard demo application tasks, which provide no particular\r
- * functionality, but do provide a good example of how to use the FreeRTOS API.\r
- *\r
- * In addition to the standard demo tasks, the following tasks, tests and\r
- * timers are created within this file:\r
- *\r
- * "Reg test" tasks - These fill the registers with known values, then check\r
- * that each register still contains its expected value.  Each task uses a\r
- * different set of values.  The reg test tasks execute with a very low priority,\r
- * so get preempted very frequently.  A register containing an unexpected value\r
- * is indicative of an error in the context switching mechanism.\r
- *\r
- * The "Demo" Timer and Callback Function:\r
- * The demo timer callback function does nothing more than increment a variable.\r
- * The period of the demo timer is set relative to the period of the check timer\r
- * (described below).  This allows the check timer to know how many times the\r
- * demo timer callback function should execute between each execution of the\r
- * check timer callback function.  The variable incremented in the demo timer\r
- * callback function is used to determine how many times the callback function\r
- * has executed.\r
- *\r
- * The "Check" Timer and Callback Function:\r
- * The check timer period is initially set to three seconds.  The check timer\r
- * callback function checks that all the standard demo tasks, the reg test\r
- * tasks, and the demo timer are not only still executing, but are executing\r
- * without reporting any errors.  If the check timer discovers that a task or\r
- * timer has stalled, or reported an error, then it changes its own period from\r
- * the initial three seconds, to just 200ms.  The check timer callback function\r
- * also toggles an LED each time it is called.  This provides a visual\r
- * indication of the system status:  If the LED toggles every three seconds,\r
- * then no issues have been discovered.  If the LED toggles every 200ms, then\r
- * an issue has been discovered with at least one task.\r
- *\r
- * ENSURE TO READ THE DOCUMENTATION PAGE FOR THIS PORT AND DEMO APPLICATION ON\r
- * THE http://www.FreeRTOS.org WEB SITE FOR FULL INFORMATION ON USING THIS DEMO\r
- * APPLICATION, AND ITS ASSOCIATE FreeRTOS ARCHITECTURE PORT!\r
- *\r
- */\r
-\r
-/* Scheduler include files. */\r
-#include "FreeRTOS.h"\r
-#include "task.h"\r
-#include "timers.h"\r
-\r
-/* Standard demo includes. */\r
-#include "dynamic.h"\r
-#include "PollQ.h"\r
-#include "blocktim.h"\r
-\r
-/* Hardware includes. */\r
-#include "demo_specific_io.h"\r
-\r
-/* The period at which the check timer will expire, in ms, provided no errors\r
-have been reported by any of the standard demo tasks.  ms are converted to the\r
-equivalent in ticks using the portTICK_PERIOD_MS constant. */\r
-#define mainCHECK_TIMER_PERIOD_MS                      ( 3000UL / portTICK_PERIOD_MS )\r
-\r
-/* The period at which the check timer will expire, in ms, if an error has been\r
-reported in one of the standard demo tasks, the check tasks, or the demo timer.\r
-ms are converted to the equivalent in ticks using the portTICK_PERIOD_MS\r
-constant. */\r
-#define mainERROR_CHECK_TIMER_PERIOD_MS        ( 200UL / portTICK_PERIOD_MS )\r
-\r
-/* These two definitions are used to set the period of the demo timer.  The demo\r
-timer period is always relative to the check timer period, so the check timer\r
-can determine if the demo timer has expired the expected number of times between\r
-its own executions. */\r
-#define mainDEMO_TIMER_INCREMENTS_PER_CHECK_TIMER_TIMEOUT      ( 100UL )\r
-#define mainDEMO_TIMER_PERIOD_MS                       ( mainCHECK_TIMER_PERIOD_MS / mainDEMO_TIMER_INCREMENTS_PER_CHECK_TIMER_TIMEOUT )\r
-\r
-/* A block time of zero simply means "don't block". */\r
-#define mainDONT_BLOCK                                         ( 0U )\r
-\r
-/* Values that are passed as parameters into the reg test tasks (purely to\r
-ensure task parameters are passed correctly). */\r
-#define mainREG_TEST_1_PARAMETER                       ( ( void * ) 0x1234 )\r
-#define mainREG_TEST_2_PARAMETER                       ( ( void * ) 0x5678 )\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-/*\r
- * The 'check' timer callback function, as described at the top of this file.\r
- */\r
-static void prvCheckTimerCallback( TimerHandle_t xTimer );\r
-\r
-/*\r
- * The 'demo' timer callback function, as described at the top of this file.\r
- */\r
-static void prvDemoTimerCallback( TimerHandle_t xTimer );\r
-\r
-/*\r
- * Functions that define the RegTest tasks, as described at the top of this\r
- * file.  The RegTest tasks are written (necessarily) in assembler.  Their\r
- * entry points are written in C to allow for easy checking of the task\r
- * parameter values.\r
- */\r
-extern void vRegTest1Task( void );\r
-extern void vRegTest2Task( void );\r
-static void prvRegTest1Entry( void *pvParameters );\r
-static void prvRegTest2Entry( void *pvParameters );\r
-\r
-/*\r
- * Called if a RegTest task discovers an error as a mechanism to stop the\r
- * tasks loop counter incrementing (so the check task can detect that an\r
- * error exists).\r
- */\r
-void vRegTestError( void );\r
-\r
-/*\r
- * Called by main() to create the more comprehensive application if\r
- * mainCREATE_SIMPLE_BLINKY_DEMO_ONLY is set to 0.\r
- */\r
-void main_full( void );\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-/* Variables that are incremented on each cycle of the two reg tests to allow\r
-the check timer to know that they are still executing. */\r
-unsigned short usRegTest1LoopCounter = 0, usRegTest2LoopCounter;\r
-\r
-/* The check timer.  This uses prvCheckTimerCallback() as its callback\r
-function. */\r
-static TimerHandle_t xCheckTimer = NULL;\r
-\r
-/* The demo timer.  This uses prvDemoTimerCallback() as its callback function. */\r
-static TimerHandle_t xDemoTimer = NULL;\r
-\r
-/* This variable is incremented each time the demo timer expires. */\r
-static volatile unsigned long ulDemoSoftwareTimerCounter = 0UL;\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-void main_full( void )\r
-{\r
-       /* Creates all the tasks and timers, then starts the scheduler. */\r
-\r
-       /* First create the 'standard demo' tasks.  These are used to demonstrate\r
-       API functions being used and also to test the kernel port.  More information\r
-       is provided on the FreeRTOS.org WEB site. */\r
-//     vStartDynamicPriorityTasks();\r
-//     vStartPolledQueueTasks( tskIDLE_PRIORITY );\r
-\r
-       /* Additional tasks can be added by un-commenting the line below on devices\r
-       with sufficient RAM for a larger heap (see configTOTAL_HEAP_SIZE in\r
-       FreeRTOSConfig.h). */\r
-       /*vCreateBlockTimeTasks();*/\r
-\r
-       /* Create the RegTest tasks as described at the top of this file. */\r
-       xTaskCreate( prvRegTest1Entry,                  /* The function that implements the task. */\r
-                                "Reg1",                                        /* Text name for the task - to assist debugging only, not used by the kernel. */\r
-                                configMINIMAL_STACK_SIZE,      /* The size of the stack allocated to the task (in words, not bytes). */\r
-                                mainREG_TEST_1_PARAMETER,  /* The parameter passed into the task. */\r
-                                configMAX_PRIORITIES-1, /*tskIDLE_PRIORITY,*/                  /* The priority at which the task will execute. */\r
-                                NULL );                                        /* Used to pass the handle of the created task out to the function caller - not used in this case. */\r
-\r
-//     xTaskCreate( prvRegTest2Entry, "Reg2", configMINIMAL_STACK_SIZE, mainREG_TEST_2_PARAMETER, tskIDLE_PRIORITY, NULL );\r
-\r
-       /* Create the software timer that performs the 'check' functionality,\r
-       as described at the top of this file. */\r
-//     xCheckTimer = xTimerCreate( "CheckTimer",                                       /* A text name, purely to help debugging. */\r
-//                                                             ( mainCHECK_TIMER_PERIOD_MS ),  /* The timer period, in this case 3000ms (3s). */\r
-//                                                             pdTRUE,                                                 /* This is an auto-reload timer, so xAutoReload is set to pdTRUE. */\r
-//                                                             ( void * ) 0,                                   /* The ID is not used, so can be set to anything. */\r
-//                                                             prvCheckTimerCallback                   /* The callback function that inspects the status of all the other tasks. */\r
-//                                                       );\r
-\r
-       /* Create the software timer that just increments a variable for demo\r
-       purposes. */\r
-//     xDemoTimer = xTimerCreate( "DemoTimer",                                         /* A text name, purely to help debugging. */\r
-//                                                             ( mainDEMO_TIMER_PERIOD_MS ),   /* The timer period, in this case it is always calculated relative to the check timer period (see the definition of mainDEMO_TIMER_PERIOD_MS). */\r
-//                                                             pdTRUE,                                                 /* This is an auto-reload timer, so xAutoReload is set to pdTRUE. */\r
-//                                                             ( void * ) 0,                                   /* The ID is not used, so can be set to anything. */\r
-//                                                             prvDemoTimerCallback                    /* The callback function that inspects the status of all the other tasks. */\r
-//                                                       );\r
-\r
-       /* Start both the check timer and the demo timer.  The timers won't actually\r
-       start until the scheduler is started. */\r
-//     xTimerStart( xCheckTimer, mainDONT_BLOCK );\r
-//     xTimerStart( xDemoTimer, mainDONT_BLOCK );\r
-\r
-       /* Finally start the scheduler running. */\r
-       vTaskStartScheduler();\r
-\r
-extern void my_function( void );\r
-       my_function();\r
-\r
-       /* If all is well execution will never reach here as the scheduler will be\r
-       running.  If this null loop is reached then it is likely there was\r
-       insufficient FreeRTOS heap available for the idle task and/or timer task to\r
-       be created.  See http://www.freertos.org/a00111.html. */\r
-       for( ;; );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvDemoTimerCallback( TimerHandle_t xTimer )\r
-{\r
-       /* Remove compiler warning about unused parameter. */\r
-       ( void ) xTimer;\r
-\r
-       /* The demo timer has expired.  All it does is increment a variable.  The\r
-       period of the demo timer is relative to that of the check timer, so the\r
-       check timer knows how many times this variable should have been incremented\r
-       between each execution of the check timer's own callback. */\r
-       ulDemoSoftwareTimerCounter++;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvCheckTimerCallback( TimerHandle_t xTimer )\r
-{\r
-static portBASE_TYPE xChangedTimerPeriodAlready = pdFALSE, xErrorStatus = pdPASS;\r
-static unsigned short usLastRegTest1Counter = 0, usLastRegTest2Counter = 0;\r
-\r
-       /* Remove compiler warning about unused parameter. */\r
-       ( void ) xTimer;\r
-\r
-       /* Inspect the status of the standard demo tasks. */\r
-       if( xAreDynamicPriorityTasksStillRunning() != pdTRUE )\r
-       {\r
-               xErrorStatus = pdFAIL;\r
-       }\r
-\r
-       if( xArePollingQueuesStillRunning() != pdTRUE )\r
-       {\r
-               xErrorStatus = pdFAIL;\r
-       }\r
-\r
-       if( xAreBlockTimeTestTasksStillRunning() != pdTRUE )\r
-       {\r
-               /* Un-comment this line if the block time tasks are included in the\r
-               demo. */\r
-               /* xErrorStatus = pdFAIL; */\r
-       }\r
-\r
-       /* Indicate an error if either of the reg test loop counters have not\r
-       incremented since the last time this function was called. */\r
-       if( usLastRegTest1Counter == usRegTest1LoopCounter )\r
-       {\r
-               xErrorStatus = pdFAIL;\r
-       }\r
-       else\r
-       {\r
-               usLastRegTest1Counter = usRegTest1LoopCounter;\r
-       }\r
-\r
-       if( usLastRegTest2Counter == usRegTest2LoopCounter )\r
-       {\r
-               xErrorStatus = pdFAIL;\r
-       }\r
-       else\r
-       {\r
-               usLastRegTest2Counter = usRegTest2LoopCounter;\r
-       }\r
-\r
-       /* Ensure that the demo software timer has expired\r
-       mainDEMO_TIMER_INCREMENTS_PER_CHECK_TIMER_TIMEOUT times in between\r
-       each call of this function.  A critical section is not required to access\r
-       ulDemoSoftwareTimerCounter as the variable is only accessed from another\r
-       software timer callback, and only one software timer callback can be\r
-       executing at any time. */\r
-       if( ( ulDemoSoftwareTimerCounter < ( mainDEMO_TIMER_INCREMENTS_PER_CHECK_TIMER_TIMEOUT - 1 ) ) ||\r
-           ( ulDemoSoftwareTimerCounter > ( mainDEMO_TIMER_INCREMENTS_PER_CHECK_TIMER_TIMEOUT + 1 ) )\r
-         )\r
-       {\r
-               xErrorStatus = pdFAIL;\r
-       }\r
-       else\r
-       {\r
-               ulDemoSoftwareTimerCounter = 0UL;\r
-       }\r
-\r
-       if( ( xErrorStatus == pdFAIL ) && ( xChangedTimerPeriodAlready == pdFALSE ) )\r
-       {\r
-               /* An error has occurred, but the timer's period has not yet been changed,\r
-               change it now, and remember that it has been changed.  Shortening the\r
-               timer's period means the LED will toggle at a faster rate, giving a\r
-               visible indication that something has gone wrong. */\r
-               xChangedTimerPeriodAlready = pdTRUE;\r
-\r
-               /* This call to xTimerChangePeriod() uses a zero block time.  Functions\r
-               called from inside of a timer callback function must *never* attempt to\r
-               block. */\r
-               xTimerChangePeriod( xCheckTimer, ( mainERROR_CHECK_TIMER_PERIOD_MS ), mainDONT_BLOCK );\r
-       }\r
-\r
-       /* Toggle the LED.  The toggle rate will depend on whether or not an error\r
-       has been found in any tasks. */\r
-       LED_BIT = !LED_BIT;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-void vRegTestError( void )\r
-{\r
-       /* Called by both reg test tasks if an error is found.  There is no way out\r
-       of this function so the loop counter of the calling task will stop\r
-       incrementing, which will result in the check timer signaling an error. */\r
-       for( ;; );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvRegTest1Entry( void *pvParameters )\r
-{\r
-       /* If the parameter has its expected value then start the first reg test\r
-       task (this is only done to test that the RTOS port is correctly handling\r
-       task parameters. */\r
-       if( pvParameters == mainREG_TEST_1_PARAMETER )\r
-       {\r
-               vRegTest1Task();\r
-       }\r
-       else\r
-       {\r
-               vRegTestError();\r
-       }\r
-\r
-       /* It is not possible to get here as neither of the two functions called\r
-       above will ever return. */\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvRegTest2Entry( void *pvParameters )\r
-{\r
-       /* If the parameter has its expected value then start the first reg test\r
-       task (this is only done to test that the RTOS port is correctly handling\r
-       task parameters. */\r
-       if( pvParameters == mainREG_TEST_2_PARAMETER )\r
-       {\r
-               vRegTest2Task();\r
-       }\r
-       else\r
-       {\r
-               vRegTestError();\r
-       }\r
-\r
-       /* It is not possible to get here as neither of the two functions called\r
-       above will ever return. */\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
diff --git a/FreeRTOS/Demo/RL78_E2Studio_GCC/src/reset_program.asm b/FreeRTOS/Demo/RL78_E2Studio_GCC/src/reset_program.asm
deleted file mode 100644 (file)
index c2e5b11..0000000
+++ /dev/null
@@ -1,11005 +0,0 @@
-/***********************************************************************/
-/*                                                                                                                    */
-/*      PROJECT NAME :  RTOSDemo                                       */
-/*      FILE         :  reset_program.asm                              */
-/*      DESCRIPTION  :  Reset Program                                  */
-/*      CPU SERIES   :  RL78 - G14                                     */
-/*      CPU TYPE     :  R5F104PJ                                       */
-/*                                                                                                                    */
-/*      This file is generated by e2studio.                        */
-/*                                                                                                                    */
-/***********************************************************************/\r
-\r
-       /*reset_program.asm*/\r
-\r
-       .list\r
-\r
-       .global _PowerON_Reset  /*! global Start routine */\r
-       .short _PowerON_Reset\r
-\r
-#ifdef CPPAPP\r
-___dso_handle:\r
-       .global ___dso_handle\r
-#endif\r
-\r
-\r
-       .extern _HardwareSetup /*! external Sub-routine to initialise Hardware*/\r
-       .extern _data\r
-       .extern _mdata\r
-       .extern _ebss\r
-       .extern _bss\r
-\r
-       .extern _edata\r
-       .extern _main\r
-       .extern _stack\r
-       .extern _exit\r
-\r
-       /*  ;; HL = start of list\r
-        ;; DE = end of list\r
-        ;; BC = step direction (+2 or -2)\r
-       */\r
-\r
-       .text\r
-\r
-/* call to _PowerON_Reset */\r
-_PowerON_Reset:\r
-/* initialise user stack pointer */\r
-       movw sp,#_stack /* Set stack pointer */\r
-\r
-/* call the hardware initialiser */
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-\r
-/* load data section from ROM to RAM */\r
-;; block move to initialize .data\r
-\r
-        ;; we're copying from 00:[_romdatastart] to 0F:[_datastart]\r
-        ;; and our data is not in the mirrored area.\r
-    mov     es, #0\r
-    sel     rb0         /*  ;;bank 0 */\r
-    movw    de, #_mdata        /* src ROM address of data section in de */\r
-    movw    hl, #_data         /* dest start RAM address of data section in hl */\r
-\r
-    sel     rb1              /* bank 1 */\r
-    movw    hl, #_data         /* dest start RAM address of data section in hl */\r
-    movw    ax, #_edata   /*    ;; size of romdata section in ax */\r
-    subw    ax,hl              /* store data size */\r
-    shrw       ax,1\r
-1:\r
-    cmpw    ax, #0                /* check if end of data */\r
-    bz      $1f\r
-    decw    ax\r
-    sel     rb0             /* bank 0 */\r
-    movw    ax, es:[de]\r
-    movw    [hl], ax\r
-    incw    de\r
-    incw       de\r
-    incw    hl\r
-       incw    hl\r
-    sel     rb1         /* bank 1  -  compare and decrement*/\r
-    br      $1b\r
-1:\r
-\r
-\r
-/* bss initialisation : zero out bss */\r
-    sel     rb0         /* bank 0 */\r
-    movw    hl, #_bss          /* store the start address of bss in hl */\r
-    movw    ax, #0             /* load AX reg with zero */\r
-    sel     rb1         /* bank 1 */\r
-    movw    ax, #_ebss  /* store the end address (size of) bss section in ax */\r
-    subw    ax,hl ;; store data size\r
-    shrw    ax,1\r
-1:\r
-    cmpw    ax, #0\r
-    bz      $1f\r
-    decw    ax\r
-    sel     rb0         /* bank 0 */\r
-    movw    [hl], ax\r
-    incw    hl\r
-    incw       hl\r
-    sel     rb1\r
-    br      $1b\r
-1:\r
-    sel     rb0             /* bank 0 */\r
-\r
-/* start user program */\r
-\r
-    movw    ax, #0\r
-    push    ax      /* envp */\r
-    push    ax      /* argv */\r
-    push    ax      /* argc */\r
-    call       !!_main\r
-\r
-\r
-/* call to exit*/\r
-_exit:
-     br        $_exit\r
-
-.global _my_function
-_my_function:
-#if 1
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-#endif
-#if 1
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-       call    !!_HardwareSetup
-#endif
-\r
-       .end\r
diff --git a/FreeRTOS/Demo/RL78_E2Studio_GCC/src/typedefine.h b/FreeRTOS/Demo/RL78_E2Studio_GCC/src/typedefine.h
deleted file mode 100644 (file)
index 8972f0e..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-/***********************************************************************/
-/*                                                                                                                    */
-/*      PROJECT NAME :  RTOSDemo                                       */
-/*      FILE         :  typedefine.h                                   */
-/*      DESCRIPTION  :  Aliases of Integer Type                        */
-/*      CPU SERIES   :  RL78 - G14                                     */
-/*      CPU TYPE     :  R5F104PJ                                       */
-/*                                                                                                                    */
-/*      This file is generated by e2studio.                        */
-/*                                                                                                                    */
-/***********************************************************************/ \r
-                                                                           \r
-\r
-\r
-typedef signed char _SBYTE;\r
-typedef unsigned char _UBYTE;\r
-typedef signed short _SWORD;\r
-typedef unsigned short _UWORD;\r
-typedef signed int _SINT;\r
-typedef unsigned int _UINT;\r
-typedef signed long _SDWORD;\r
-typedef unsigned long _UDWORD;\r
-typedef signed long long _SQWORD;\r
-typedef unsigned long long _UQWORD;\r
diff --git a/FreeRTOS/Demo/RL78_E2Studio_GCC/src/vector_table.c b/FreeRTOS/Demo/RL78_E2Studio_GCC/src/vector_table.c
deleted file mode 100644 (file)
index f891b89..0000000
+++ /dev/null
@@ -1,173 +0,0 @@
-/***********************************************************************/
-/*                                                                                                                    */
-/*      PROJECT NAME :  test                                           */
-/*      FILE         :  vector_table.c                                 */
-/*      DESCRIPTION  :  Vector Table                                   */
-/*      CPU SERIES   :  RL78 - G14                                     */
-/*      CPU TYPE     :  R5F104PJ                                       */
-/*                                                                                                                    */
-/*      This file is generated by e2studio.                               */
-/*                                                                                                                    */
-/***********************************************************************/\r
-
-#include "FreeRTOS.h"
-\r
-extern void PowerON_Reset( void );
-extern void vPortTickISR( void );
-extern void vPortYield( void );\r
-
-void Dummy_Handler( void ) __attribute__((interrupt));
-void Dummy_Handler( void )
-{
-}
-
-const unsigned char Option_Bytes[]  __attribute__ ((section (".option_bytes"))) = {\r
-       0x6e, 0xff, 0xe8, 0x85\r
-};\r
-\r
-const unsigned char Security_Id[]  __attribute__ ((section (".security_id"))) = {\r
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
-};\r
-\r
-#define VEC          __attribute__ ((section (".vec")))\r
-const void *HardwareVectors[] VEC = {\r
-       // Address 0x0\r
-       PowerON_Reset,\r
-};\r
-\r
-#define VECT_SECT          __attribute__ ((section (".vects")))\r
-const void *Vectors[] VECT_SECT = {\r
-       //(0x4)\r
-       Dummy_Handler,\r
-       //(0x6)\r
-       Dummy_Handler,\r
-       //(0x8)\r
-       Dummy_Handler,\r
-       //(0xA)\r
-       Dummy_Handler,\r
-       //(0xC)\r
-       Dummy_Handler,\r
-       //(0xE)\r
-       Dummy_Handler,\r
-       //(0x10)\r
-       Dummy_Handler,\r
-       //(0x12)\r
-       Dummy_Handler,\r
-       //(0x14)
-       Dummy_Handler,\r
-       //(0x16)
-       Dummy_Handler,\r
-       //(0x18)
-       Dummy_Handler,
-       // Padding\r
-       (void*)0xFFFF,\r
-       // Padding\r
-       (void*)0xFFFF,\r
-       //(0x1E)
-       Dummy_Handler,\r
-       //(0x20)\r
-       Dummy_Handler,\r
-       //(0x22)\r
-       Dummy_Handler,\r
-       //(0x24)\r
-       Dummy_Handler,\r
-       //(0x26)\r
-       Dummy_Handler,\r
-       //(0x28)\r
-       Dummy_Handler,\r
-       //(0x2A)\r
-       Dummy_Handler,\r
-       //(0x2C)
-       Dummy_Handler,
-       //(0x2E)\r
-       Dummy_Handler,\r
-       //(0x30)\r
-       Dummy_Handler,\r
-       //(0x32)\r
-       Dummy_Handler,\r
-       //(0x34)\r
-       Dummy_Handler,\r
-       //(0x36)\r
-       Dummy_Handler,\r
-       //(0x38)
-#if INTIT_vect == 0x38\r
-       vPortTickISR, /* Note this vector table definition is used with lots of RL78 chips, some of which have the INTIT vector here. */
-#else
-       Dummy_Handler,
-#endif\r
-       //(0x3A)\r
-       Dummy_Handler,\r
-       //(0x3C)\r
-#if INTIT_vect == 0x3C
-       vPortTickISR, /* Note this vector table definition is used with lots of RL78 chips, some of which have the INTIT vector here. */
-#else
-       Dummy_Handler,
-#endif
-       //(0x3E)\r
-       Dummy_Handler,\r
-       //(0x40)\r
-       Dummy_Handler,\r
-       //(0x42)\r
-       Dummy_Handler,\r
-       //(0x44)\r
-       Dummy_Handler,\r
-       //(0x46)\r
-       Dummy_Handler,\r
-       //(0x48)\r
-       Dummy_Handler,\r
-       //(0x4A)\r
-       Dummy_Handler,\r
-       //(0x4C)\r
-       Dummy_Handler,\r
-       //(0x4E)\r
-       Dummy_Handler,\r
-       //(0x50)\r
-       Dummy_Handler,\r
-       //(0x52)
-       Dummy_Handler,\r
-       //(0x54)
-       Dummy_Handler,\r
-       //(0x56)\r
-       Dummy_Handler,\r
-       //(0x58)\r
-       Dummy_Handler,\r
-       //(0x5A)\r
-       Dummy_Handler,\r
-       //(0x5C)\r
-       Dummy_Handler,\r
-       // Padding\r
-       (void*)0xFFFF,\r
-       //(0x60)\r
-       Dummy_Handler,\r
-       //(0x62)\r
-       Dummy_Handler,\r
-       // Padding\r
-       (void*)0xFFFF,\r
-       // Padding\r
-       (void*)0xFFFF,\r
-       // Padding\r
-       (void*)0xFFFF,\r
-       // Padding\r
-       (void*)0xFFFF,\r
-       // Padding\r
-       (void*)0xFFFF,\r
-       // Padding\r
-       (void*)0xFFFF,\r
-       // Padding\r
-       (void*)0xFFFF,\r
-       // Padding\r
-       (void*)0xFFFF,\r
-       // Padding\r
-       (void*)0xFFFF,\r
-       // Padding\r
-       (void*)0xFFFF,\r
-       // Padding\r
-       (void*)0xFFFF,\r
-       // Padding\r
-       (void*)0xFFFF,\r
-       // Padding\r
-       (void*)0xFFFF,\r
-       //INT_BRK_I (0x7E)\r
-       vPortYield,\r
-};\r
-\r
index b9e0a91c51c583e5bb2d960c3d65c2f4eb24e458..b61c1687ef76adb555b957293749fd10e75f1392 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 3381d2af1d2c1a7a4a133e544cdd03ed5a125fa6..89da14af7d89edef28d010910e4fa8dfa7cf57c4 100644 (file)
@@ -1,6 +1,6 @@
 ;/*\r
-; * FreeRTOS Kernel V10.2.1\r
-; * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+; * FreeRTOS Kernel V10.3.0\r
+; * Copyright (C) 2020 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
index 6b7cc15a81d78a6b182df63c039e2e9cc670739f..917e59ebdb6eba0c1d5191475d7719235bb7fce8 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 6c735bd021398a9413ae8f648a183d614209f72c..c4c77bb9b09655cbce5a7c0539d3a280529ff935 100644 (file)
@@ -1,6 +1,6 @@
 ;/*\r
-; * FreeRTOS Kernel V10.2.1\r
-; * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+; * FreeRTOS Kernel V10.3.0\r
+; * Copyright (C) 2020 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
index 7878b8478f6bbabd904e8f4ff2c676f35e33a713..2ff4e67685f29a6d6d9d8ab0b91956e25fbc469a 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 41cb72d7fb4bc2813e712885cee53825e22bd340..ebd1b0c4c9ec78fe5a7ed013d2acdb8cc22c1b24 100644 (file)
@@ -1,6 +1,6 @@
 ;/*\r
-; * FreeRTOS Kernel V10.2.1\r
-; * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+; * FreeRTOS Kernel V10.3.0\r
+; * Copyright (C) 2020 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
index 4cf0ea6f894f4f1f6a25fdfaefd48c292b7bc04a..206e21fa16a69a3d1a5f71bf19594b0695a5246a 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 147779667080dcde55c5ae1a5ceda818ec547492..43f8f0671f82726f756b35abc804e8dc64e1b60c 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 2695859270a0f79de8d2d5b6e376c984ead98c38..4dc40e7992678f7e6acbd2a9ed76fbaac34d917b 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e655f8ed20d31db8395a026030dbcf09e7a3da40..cb6a2b6ccc867cfaf04b255222785bc948dcbda7 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index ce39cb88f6964cb3c7e48e52642da686aad267ff..4f6cbc36c15be9fd7f9a62511110759e4d3738f1 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index dc45b8c6a60bc452ca2014d7fbf521d6490f1fa7..454781cd63c0e220f17df1c10bfae19820f148bb 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 135dacfa2b69eb4b50616cc3e60a8f05325530bd..14c73abcb7061399b44cfad4abf2a424ec5ae213 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index b980ce00f97c5a0d2f9e5a2be798e87b2c3c0971..6039ad3989666b8323bd04df7d71843b15e57eed 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f6a811af32c1e0a68f682e74d38b8d02a9b781b1..9b3497c5f6dc14b0e31e9c3db4bfd71eacca07cb 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 4ccb0080263de25632ef08ddd33a39bbf0892c55..e694724491d14a1efdd33d4d4f873cc0d1d7ca78 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index dc45b8c6a60bc452ca2014d7fbf521d6490f1fa7..454781cd63c0e220f17df1c10bfae19820f148bb 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e1fff48d6a21e5a35f683ec15cf4341adf651036..ce1a83f88a66808fad7209ea8686202f3bfe2069 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 784e8e54deb1ad9a2f010ae6b8f718b3bf177dd6..1972a90e517662eeae72b9e440a4982dd7db9784 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 2234b52c7e0dbcb5ae68fedb07684637a7b81a7b..5cb6550546c4d23f213361b922957ce7a25d73a1 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index b3fc2c6e775cafadefa39951757718d85889b38c..ac95a6f6135b4260fcfd42efa4f581cadd46f162 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d8d7c415641b4bfc4fd91d089520900b83b6b8bc..dd08294f3f7af19f3e0a4988f2729fd523c1e519 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 07b460d9519a5b3f11888cf2c9df1b50bf4d8691..1a002dc94900b320dfede4f13372d1115fd51952 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index dc45b8c6a60bc452ca2014d7fbf521d6490f1fa7..454781cd63c0e220f17df1c10bfae19820f148bb 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index ee1639496abe1f8c1763901fae0bf4ec7158c2cb..67a4ecd72c624be6dd8f4dae0bf66655c7696a67 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 839a737983239e4d8245d5d5d5879217a45df90b..44d874f3fc0559efd7127c28b31902caad8f5eb6 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index efee130be5d46bfe918ebe8afc32e853d2e63c8f..f1275af0c843e44fd6cf408becee42ce9f10c522 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 96abeb8964e57c45996dc07e6fccde9a7fc8e3bb..eebc565cf0ee7da6eef27bb5e859d8e149b343dc 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 1c6472e33a83d5d97d9e815ada65ef6c44c69fdd..5d1b16defd7d9694697faca99d30654c1257bdca 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 382d17ba3d40d69d2b9681f38899155b7d780ddf..b4a2d726a05f725db5e2d217070351d9f1027ca3 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c42b95499b2428f5fd250891a01e59ea0a9f5505..349ae52d7b1118e037fffcf9c5a4f1af55a4f228 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 56d7c93d9902960fcedab453358487e55058dbe2..1220cf992ce3aef6cce069a0f5d5ca6fdef18267 100644 (file)
@@ -1,6 +1,6 @@
 ;/*\r
-; * FreeRTOS Kernel V10.2.1\r
-; * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+; * FreeRTOS Kernel V10.3.0\r
+; * Copyright (C) 2020 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
index 3f7bedea1d3382bf6a1ef03151f35a38430559f2..382cfe5da7103e7437a406011599228c76f9562b 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 4376ec2ccde7d69962ae0edb07c31cf45aba0713..a69818c4e14ff9c74a50cc995e9613c882c2e93e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index cc63ff5fea66ae611581a2cdbf3e2ce5e7ff81f5..7d3872083c25e6444525e6181cdcf00fc905f300 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d6c9734105c63b30aa8937a4895dfdcc47287abf..e23332df560ff6369f0de82caf366939e8eb128f 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 96abeb8964e57c45996dc07e6fccde9a7fc8e3bb..eebc565cf0ee7da6eef27bb5e859d8e149b343dc 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 83abe93d166a52b8a8b232b259fb268b80b54287..32c7ceb7268cddadfe96e9b2d8367ab44ecb3a81 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index a29322f55d845d0ca2ca5dfbc0b310effc5bbb9c..39e535f73a3195f2d823bc12a95552c6fc5a8f10 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d26057f9a6dff07dfb1cd8bc23d07eeee199a3e7..6d56a462f18157c5cd669ad2ea6aa7f0d6e25f70 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 8c520765f59ed6c6a0a3ac4a271c3bf4c6217de8..e119a7a319a00556cc2b5b9e5eeff8f6f39b0ce5 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index a52bc25deab3a6781c729ceacba528319c409491..725eab9a5b0d2d76e6cf114067ce91c063498732 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index a69f5277031ac4a2e59513bfa7879d919459f6b8..a8fe1ba86cf42c7d7ec125a49ce3e7e13caf67a1 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 0c0f57aa2d834607e74ea9795144f8a1be6e0ba5..80060637af6f473f7595d861bdd0748bfc6021fa 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f5a832a88c6e73e60633317526818f8a9045e57e..fd58093f0b916e49cc38060663c3844da2cd1bbc 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e1f835bac42258a42e6cc4908ed213df86f3c26f..d2888a83aa2ba30fe6987019b925a399c3b46934 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 7b7dfd2529c5de17f54be530ce60bd623fb23d3d..62b0b30c3e7626b14388fc9835e294a20dbc1b1b 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index bf50a4c42a6c79d6c06206a46f84d80f5368e56c..618df245e95abdbe9e2cb841dbb8477f87c28281 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d26057f9a6dff07dfb1cd8bc23d07eeee199a3e7..6d56a462f18157c5cd669ad2ea6aa7f0d6e25f70 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 9bf6f846fe3fc5fc4fb60ec1625ef16cc31bf6e9..fa1fc5216c59bc8af347b906eb5636042b5b25f7 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index a5d40a99187c92a8ac084ae62970e3c21e2a7b8c..92539f2cd15ca95af721773891fa29b10773b987 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index dda3f909ac306ceaf4152c5e78d2f9be7fd365da..802c9046ead703a9847a6a3574f6ce2ba581a471 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 441c3b88e595952a90916d95bd638b565fbac844..dfa95b1b32f4c45d5d83f412da4bb0e4778bbb22 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index b259c6069f5f04f9ec784356b078c736e53cd07f..d4530295767863c3e2cee9833a81b9719cf8bd03 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c42b95499b2428f5fd250891a01e59ea0a9f5505..349ae52d7b1118e037fffcf9c5a4f1af55a4f228 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 56d7c93d9902960fcedab453358487e55058dbe2..1220cf992ce3aef6cce069a0f5d5ca6fdef18267 100644 (file)
@@ -1,6 +1,6 @@
 ;/*\r
-; * FreeRTOS Kernel V10.2.1\r
-; * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+; * FreeRTOS Kernel V10.3.0\r
+; * Copyright (C) 2020 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
index 475239aebf68f3595ba49299cbd9452d4f7085a4..813677822fbaac8b22f7d4d636bd71e807b2e36e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d9c2b48e36f8eed0b2f9206b500948064d6b7028..1173ab534a6a654139a5ab6207aa58b9ed542830 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index cc63ff5fea66ae611581a2cdbf3e2ce5e7ff81f5..7d3872083c25e6444525e6181cdcf00fc905f300 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 82fb6c0bf0cf9efa2bb77615c3a1cd494f86629e..7fc731798b501143a6bcf75b0cbfd19275a534d6 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index dda3f909ac306ceaf4152c5e78d2f9be7fd365da..802c9046ead703a9847a6a3574f6ce2ba581a471 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 13f8aae52c9854a620194195e994e4c0f978adf4..c7e639c16125e245144a738d095fc5dba8e5bac9 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 9fc249dcad0d47cf6e0a86bd589a773a7563bb85..c0f42b77ad9b2cdc535e7008b4677af014f8edf0 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c42b95499b2428f5fd250891a01e59ea0a9f5505..349ae52d7b1118e037fffcf9c5a4f1af55a4f228 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 51e3130d7acfec098f247726c817c73306a5ba65..98897f7af0e23dfcc8ab23302f2f8702d5c579bc 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 62202654d8bd2b8b774b95b6ca0dd68d183edeb3..bdb44dc7e6bf148a18001b901b18a406698a387a 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c7cd6a4a0b5679ac2857eafa105be577a5f5b2e8..b5b41e2ba3c25a0eceac19498f43aa6ccdcfbfa8 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index cbd30fd92c96fa0f45c61b62b7312401cd3aed0f..d29e5ecd02b782b8718a6456d5d1d23fe40a3cbc 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index beb167e7622c5ffbe5147baeb22b449a99cd65b6..155dc03105eb8c55a8ad120803ec98b8f3f30285 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d7afd6601dd102473424653d189669e618414ee3..d8711f47db75daee6569ef9c42fa84e45b3d1287 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d26057f9a6dff07dfb1cd8bc23d07eeee199a3e7..6d56a462f18157c5cd669ad2ea6aa7f0d6e25f70 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index ca94f5cbb0cf902d18d792485764ea10abf7f70b..b5b80ee1a56736dd799e862d4ac73efeb3e0e38c 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 3548a1f35fc9cbea479a5aecec4dfc3e7ca16afb..3184632f1d0cc0bff44aae9abad03f76006d6767 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index dfe20ace4e91e4a10450813c51740e1649e8de8f..e8728af4e0843fe25e06e1f418e31936096a721b 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c9210c45ceaccab202e211f639b45ee3a1c3c198..3ca54cff43f32be9ce52ab4563204d00582a07d0 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 158b6b1df070baa4985340b20b272db0c9863f9a..aa9d6a0d0632b898623f48a9b125d72af4931800 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index de38a1b488899d8a87f964757312b628c632c548..319e033ad81f22553af4114c13f647b504280bb3 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index be5f16c10e2f4deb330539e473fe17f296827f80..b774a36313a7fe7e30460f3c7bf325bfb7f9022f 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 29d037b71ebf825219667e1cf7c63331738e3efa..bdc68ce8b687aeeef8855ed08277aeab175a2ea8 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 4ef2df60b4a5825c98f610bf500296462238370a..8e1b13f1fcbc9d0f4cc7c8d3d68640d874e65f5d 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 57d66fc225903bfd6d5c1cab080b0a19f92201ff..25ee21ad8f5c41a18ffccb01f00d263f7fc148e0 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d26057f9a6dff07dfb1cd8bc23d07eeee199a3e7..6d56a462f18157c5cd669ad2ea6aa7f0d6e25f70 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 03b8b938a760499c3280b9926fe2582383f65f9b..2de58da8a0062b12b69059f88e5cd5ece1c74be2 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e6d34b89ad35b405ce906db3b945efce8d89beaf..d60483ea271ea5063f60292b267a76cbd39d62dc 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 72099b9a8d25dcc71fbc0c5e9c803c5ccb64eb25..546d049bfd2606239ef5420ff83f99374ed13cbb 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 38232162852c2134d5d3c5a8ecd20e1a6d2d1fe5..9017c72b8d5eda7acd0e634e6974acf21c584d66 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d0731a6c71e139e7e55ab77b9d2c36af4220745f..fd6717f95e8dde5666aacb0254d042cb551ed366 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f5a832a88c6e73e60633317526818f8a9045e57e..fd58093f0b916e49cc38060663c3844da2cd1bbc 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e1f835bac42258a42e6cc4908ed213df86f3c26f..d2888a83aa2ba30fe6987019b925a399c3b46934 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 3954a6c5d3ecb034a046ccaca981392bbd2c0bfb..300a963d8fda822447c85c85bc4bc8ad6ec6a6f3 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d26057f9a6dff07dfb1cd8bc23d07eeee199a3e7..6d56a462f18157c5cd669ad2ea6aa7f0d6e25f70 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index a2c300f277fb3ca369e9117e3148191c3e4258ea..dfc1b6ea7994fa0c8f25d046337e0cc6e7bf161e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 36df2c00db97e88850d6f6261cdeb4439d588c15..a1b91f698de51ca50c3ad27555b65174c59b792f 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index dfe20ace4e91e4a10450813c51740e1649e8de8f..e8728af4e0843fe25e06e1f418e31936096a721b 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 1103f10d3376171189705d43f8e6c08f4128e503..3231a13fe8ff253b5416525e86664258865571f5 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index a14a1c3c6ba4dbb46347d8adf44bfc2e98cc14c6..40061a7e5ca1022e85f51e6b47570e21bde37b1e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index cbd30fd92c96fa0f45c61b62b7312401cd3aed0f..d29e5ecd02b782b8718a6456d5d1d23fe40a3cbc 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index beb167e7622c5ffbe5147baeb22b449a99cd65b6..155dc03105eb8c55a8ad120803ec98b8f3f30285 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 8ab4e0a38f4cedc5cce2f58e84ccb6f219c6179c..04a9646449f1254e6e16f90979d3403a91fe74d5 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d26057f9a6dff07dfb1cd8bc23d07eeee199a3e7..6d56a462f18157c5cd669ad2ea6aa7f0d6e25f70 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index ca94f5cbb0cf902d18d792485764ea10abf7f70b..b5b80ee1a56736dd799e862d4ac73efeb3e0e38c 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 3548a1f35fc9cbea479a5aecec4dfc3e7ca16afb..3184632f1d0cc0bff44aae9abad03f76006d6767 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index dfe20ace4e91e4a10450813c51740e1649e8de8f..e8728af4e0843fe25e06e1f418e31936096a721b 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c9210c45ceaccab202e211f639b45ee3a1c3c198..3ca54cff43f32be9ce52ab4563204d00582a07d0 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c06d1249eaf137bdf88e2192f267c1aa401f1040..e0ddb764cbe0d1d1cfc8488914d80547547c2269 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index de38a1b488899d8a87f964757312b628c632c548..319e033ad81f22553af4114c13f647b504280bb3 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index be5f16c10e2f4deb330539e473fe17f296827f80..b774a36313a7fe7e30460f3c7bf325bfb7f9022f 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index a26e0d299d2f9c6633c65cb0abbc568a4e63f996..eba224dd7d7e99f0943298396a53f1dd61a6143d 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 4ef2df60b4a5825c98f610bf500296462238370a..8e1b13f1fcbc9d0f4cc7c8d3d68640d874e65f5d 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 57d66fc225903bfd6d5c1cab080b0a19f92201ff..25ee21ad8f5c41a18ffccb01f00d263f7fc148e0 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d26057f9a6dff07dfb1cd8bc23d07eeee199a3e7..6d56a462f18157c5cd669ad2ea6aa7f0d6e25f70 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index b9fe3dc3ab68862e93af40eb640f13ffca4e788a..c94309e227f62a369393b3d30cf34b8461227916 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index a6de9a4bd2c6ba1409ac6d113f8ff32beeefb14b..28488085f3a91e2444ffb615310078e7b0d707e0 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 72099b9a8d25dcc71fbc0c5e9c803c5ccb64eb25..546d049bfd2606239ef5420ff83f99374ed13cbb 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 38232162852c2134d5d3c5a8ecd20e1a6d2d1fe5..9017c72b8d5eda7acd0e634e6974acf21c584d66 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 85e2c2496ac47d83f05e08d788e8d43b00cbdd22..797865236628d86c7167a104f651b43d714de112 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f5a832a88c6e73e60633317526818f8a9045e57e..fd58093f0b916e49cc38060663c3844da2cd1bbc 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e1f835bac42258a42e6cc4908ed213df86f3c26f..d2888a83aa2ba30fe6987019b925a399c3b46934 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 8ab4e0a38f4cedc5cce2f58e84ccb6f219c6179c..04a9646449f1254e6e16f90979d3403a91fe74d5 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d26057f9a6dff07dfb1cd8bc23d07eeee199a3e7..6d56a462f18157c5cd669ad2ea6aa7f0d6e25f70 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index a2c300f277fb3ca369e9117e3148191c3e4258ea..dfc1b6ea7994fa0c8f25d046337e0cc6e7bf161e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 0db41d1f2409d373324a2089c87955abe6977261..53ddd6b3aaec16372d0d73248ea7a09433bdac6b 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index dfe20ace4e91e4a10450813c51740e1649e8de8f..e8728af4e0843fe25e06e1f418e31936096a721b 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d0f7e9dcda6ab6b59cde4745f7c16c7e3de27d3f..126d59c180ca6a7ecc2df650e1f254f0d355e0db 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index ee3d894096c4fab29045050d23996e1a501826c0..e1a906c99a1cd4170af7204e97b30cb14353f941 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f5a832a88c6e73e60633317526818f8a9045e57e..fd58093f0b916e49cc38060663c3844da2cd1bbc 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e1f835bac42258a42e6cc4908ed213df86f3c26f..d2888a83aa2ba30fe6987019b925a399c3b46934 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 7b7dfd2529c5de17f54be530ce60bd623fb23d3d..62b0b30c3e7626b14388fc9835e294a20dbc1b1b 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d26057f9a6dff07dfb1cd8bc23d07eeee199a3e7..6d56a462f18157c5cd669ad2ea6aa7f0d6e25f70 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 409aac01e232d3c120d85e88de0f407f70f41056..69e99b210f8613b512f5cae921263ea2a8c46504 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f8322eadaad15ed86f8f1fff94fb6bc507f28724..1ba34448bf730bad77ccc956e5fe4cea1aebde07 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index a7b9d9a8b8e02d26397f082143b40bb04e3d70d8..6fd8ca2bdc5cb6896ddfdd552cafe8bd16dc0ffd 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index b8a23b76e80439874e54865039853cfc50a076b9..d9b487afde80929e66fd261e06d97fa1682a0a50 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 5138e0abd0c4c73aeb9487ea4999bd584271c211..e8599fc3e4aab547160671f81188f4ff66f07a19 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d26057f9a6dff07dfb1cd8bc23d07eeee199a3e7..6d56a462f18157c5cd669ad2ea6aa7f0d6e25f70 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index b410bf7f594ba25382b151fe4623ca62e9bf0369..16c9bfc8a5a1aa6cf9cc4a77618c223b98165fb2 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c3ed5f2b81f8a752d22df287256e49b6bd4e8db9..cb08260e6a7deed16b0a55c9830b99dd5da294c3 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index bc502ee2fd6b41362c733dd9a9ea59c07875199c..b4073cfcecbed24b707b955107d2de76642658dd 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index dfe20ace4e91e4a10450813c51740e1649e8de8f..e8728af4e0843fe25e06e1f418e31936096a721b 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index b666f1784398ba87eaef2b08074285178142394d..5ef307c44f435fae0aa529b58b232e773d7cd7e7 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
diff --git a/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo.Hbp b/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo.Hbp
deleted file mode 100644 (file)
index 0d3910d..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-[Setting]\r
-ToolChain=0\r
-[Section]\r
-WindowSize=726,544\r
diff --git a/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo.hws b/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo.hws
deleted file mode 100644 (file)
index f9a2f9e..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-[HIMDBVersion]\r
-2.0\r
-[DATABASE_VERSION]\r
-"11.0" \r
-[WORKSPACE_DETAILS]\r
-"RTOSDemo" "C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas" "C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo.hws" "RX" "Renesas RX Standard" \r
-[SHARED_WORKSPACE_CONTROL_STATUS]\r
-"" "" "" \r
-"" "" "" \r
-[PROJECTS]\r
-"RTOSDemo" "C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo" "C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\RTOSDemo.hwp" 0 \r
-[INFORMATION]\r
-"No workspace information available" \r
-[SCRAP]\r
-[PROJECT_DEPENDENCY]\r
-[WORKSPACE_PROPERTIES]\r
-[HELP_FILES]\r
-"c:\devtools\renesas\hew\tools\renesas\rx\1_0_0\hew\stdlib.chm" "C/C++ Standard Library Help" 0 \r
-"c:\devtools\renesas\hew\tools\renesas\rx\1_0_1\hew\stdlib.chm" "C/C++ Standard Library Help" 0 \r
-"c:\devtools\renesas\hew\tools\renesas\rx\1_1_0\hew\stdlib.chm" "C/C++ Standard Library Help" 0 \r
-"c:\devtools\renesas\hew\tools\renesas\rx\1_2_0\hew\stdlib.chm" "C/C++ Standard Library Help" 1 \r
-"c:\program files\renesas\hew\tools\renesas\rx\1_0_1\hew\stdlib.chm" "C/C++ Standard Library Help" 0 \r
-"c:\program files\renesas\hew\tools\renesas\rx\1_1_0\hew\stdlib.chm" "C/C++ Standard Library Help" 0 \r
-"c:\program files\renesas\hew_002\tools\renesas\rx\1_0_1\hew\stdlib.chm" "C/C++ Standard Library Help" 0 \r
-"c:\program files\renesas\hew_rx210\tools\renesas\rx\1_0_1\hew\stdlib.chm" "C/C++ Standard Library Help" 0 \r
-"c:\program files\renesas\hewrx200\tools\renesas\rx\1_0_1\hew\stdlib.chm" "C/C++ Standard Library Help" 0 \r
-[GENERAL_DATA_PROJECT]\r
-[USERMENUTOOLS]\r
-[CUSTOMPLACEHOLDERS]\r
-[MAKEFILE_BUILD_INFO]\r
-"$(WORKSPDIR)\make\$(PROJECTNAME)_$(CONFIGNAME).mak" "" "$(WORKSPDIR)\make" 0 0 0 \r
-[VD_CONFIGURATION_OPTIONS]\r
-"ACTIVE_DESKTOP" "0" \r
-[VD_CONFIGURATIONS]\r
-"0" "Default1" "1" \r
-"1" "Default2" "1" \r
-"2" "Default3" "1" \r
-"3" "Default4" "1" \r
-[OPTIONS_DEBUG_TAB]\r
-0 0 0 0 0 \r
-[VCS]\r
-"" "" "" 0 \r
-[VCS_PROJECT]\r
-[MAKEFILE_ENV_STRINGS]\r
-[MAKEFILE_ENV_FLAGS]\r
-1 0 0 \r
-[MAKEFILE_CLEAN_INFO]\r
-"" \r
-[END]\r
diff --git a/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo.tws b/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo.tws
deleted file mode 100644 (file)
index e66c490..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-[HIMDBVersion]\r
-2.0\r
-[DATABASE_VERSION]\r
-"1.2" \r
-[CURRENT_PROJECT]\r
-"RTOSDemo" \r
-[GENERAL_DATA]\r
-[BREAKPOINTS]\r
-[OPEN_WORKSPACE_FILES]\r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\main-blinky.c" \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\main-full.c" \r
-[WORKSPACE_FILE_STATES]\r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\main-blinky.c" -4 -23 1326 673 1 1 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\main-full.c" 0 0 1116 444 0 0 \r
-[LOADED_PROJECTS]\r
-"RTOSDemo" \r
-[END]\r
diff --git a/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/DefaultSession.hsf b/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/DefaultSession.hsf
deleted file mode 100644 (file)
index 4a7c75e..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-[HIMDBVersion]\r
-2.0\r
-[DATABASE_VERSION]\r
-"2.3" \r
-[SESSION_DETAILS]\r
-"" \r
-[INFORMATION]\r
-"" \r
-[GENERAL_DATA]\r
-"{287A8023-99B5-49E1-A54E-4DDCA43D7959}MapCtrlECX_MAP_FIND_SYMBOL_LIST" "" \r
-"{287A8023-99B5-49E1-A54E-4DDCA43D7959}MapCtrlViews" "0" \r
-"{313F4FC1-6566-11D5-8BBE-0004E2013C71}CmdLineCtrlBatchFileName" "" \r
-"{313F4FC1-6566-11D5-8BBE-0004E2013C71}CmdLineCtrlBreakpointFlag" "-1 " \r
-"{313F4FC1-6566-11D5-8BBE-0004E2013C71}CmdLineCtrlBreakpointStatus" "-1 " \r
-"{313F4FC1-6566-11D5-8BBE-0004E2013C71}CmdLineCtrlBrowseDirectory" "" \r
-"{313F4FC1-6566-11D5-8BBE-0004E2013C71}CmdLineCtrlLogFileName" "" \r
-"{313F4FC1-6566-11D5-8BBE-0004E2013C71}CmdLineCtrlSplitterPosition" "242" \r
-"{313F4FC1-6566-11D5-8BBE-0004E2013C71}CmdLineCtrlViews" "1" \r
-"{313F4FC1-6566-11D5-8BBE-0004E2013C71}CmdLineCtrlWindowProperties" "17" \r
-"{313F4FC1-6566-11D5-8BBE-0004E2013C71}CmdLineWndInstanceKey0" "{WK_00000001_CmdLine}" \r
-"{313F4FC1-6566-11D5-8BBE-0004E2013C71}TclTkCtrlLogFileName" "" \r
-"{6C4D5B81-FD67-46A9-A089-EA44DCDE47FD}RAMMonitorManagerCtrlBlockInfoFileDir" "" \r
-"{6C4D5B81-FD67-46A9-A089-EA44DCDE47FD}RAMMonitorManagerCtrlBlockInfoFileName" "" \r
-"{7943C44E-7D44-422A-9140-4CF55C88F7D3}DifferenceCtrlViews" "0" \r
-"{CBEBB610-1516-11D4-8F2D-00409545B67B}ElfDwarf2Objects" "1" \r
-"{CBEBB610-1516-11D4-8F2D-00409545B67B}LoadModule0OBJ_ELFDWARF2_ARRAY_EXPAND_LIMIT" "-1" \r
-"{CBEBB610-1516-11D4-8F2D-00409545B67B}LoadModule0OBJ_ELFDWARF2_STATIC_MEM_EXPAND" "1" \r
-[LANGUAGE]\r
-"English" \r
-[CONFIG_INFO_VD1]\r
-1 \r
-[CONFIG_INFO_VD2]\r
-0 \r
-[CONFIG_INFO_VD3]\r
-0 \r
-[CONFIG_INFO_VD4]\r
-0 \r
-[WINDOW_POSITION_STATE_DATA_VD1]\r
-"Help" "TOOLBAR 0" 59419 1 5 "0.00" 0 0 0 0 0 17 0 "" "0.0" \r
-"{WK_00000001_OUTPUT}" "WINDOW" 59422 0 0 "1.00" 289 560 340 350 200 18 0 "36756|36757|36758|36759|<<separator>>|36746|36747|<<separator>>|39531|<<separator>>|39500|39534|<<separator>>|36687" "0.0" \r
-"{WK_00000002_WORKSPACE}" "WINDOW" 59420 0 0 "1.00" 206 560 340 350 200 18 0 "" "0.0" \r
-"{WK_TB00000001_STANDARD}" "TOOLBAR 0" 59419 0 2 "0.00" 0 0 0 0 0 18 0 "" "0.0" \r
-"{WK_TB00000002_EDITOR}" "TOOLBAR 0" 59419 0 0 "0.00" 0 0 0 0 0 18 0 "" "0.0" \r
-"{WK_TB00000003_BOOKMARKS}" "TOOLBAR 0" 59419 1 1 "0.00" 0 0 0 0 0 17 0 "" "0.0" \r
-"{WK_TB00000004_TEMPLATES}" "TOOLBAR 0" 59419 1 0 "0.00" 0 0 0 0 0 17 0 "" "0.0" \r
-"{WK_TB00000005_SEARCH}" "TOOLBAR 0" 59419 0 1 "0.00" 0 0 0 0 0 18 0 "" "0.0" \r
-"{WK_TB00000007_DEBUG}" "TOOLBAR 0" 59419 2 0 "0.00" 0 0 0 0 0 17 0 "" "0.0" \r
-"{WK_TB00000008_DEBUGRUN}" "TOOLBAR 0" 59419 2 1 "0.00" 0 0 0 0 0 17 0 "" "0.0" \r
-"{WK_TB00000009_VERSIONCONTROL}" "TOOLBAR 0" 59419 1 3 "0.00" 0 0 0 0 0 17 0 "" "0.0" \r
-"{WK_TB00000012_MAP}" "TOOLBAR 0" 59419 1 4 "0.00" 0 0 0 0 0 17 0 "" "0.0" \r
-"{WK_TB00000018_DEFAULTWINDOW}" "TOOLBAR 0" 59419 1 2 "0.00" 0 0 0 0 0 17 0 "" "0.0" \r
-"{WK_TB00000025_HELPSYSTEMTOOL}" "TOOLBAR 0" 59419 2 3 "0.00" 0 0 0 0 0 18 0 "" "0.0" \r
-"{WK_TB00000026_MACRO}" "TOOLBAR 0" 59419 1 6 "0.00" 0 0 0 0 0 17 0 "" "0.0" \r
-"{WK_TB00000028_RTOSDEBUG}" "TOOLBAR 0" 59419 2 2 "0.00" 0 0 0 0 0 17 0 "" "0.0" \r
-"{WK_TB00000029_SYSTEMTOOL}" "TOOLBAR 0" 59419 2 4 "0.00" 0 0 0 0 0 17 0 "" "0.0" \r
-[WINDOW_POSITION_STATE_DATA_VD2]\r
-[WINDOW_POSITION_STATE_DATA_VD3]\r
-[WINDOW_POSITION_STATE_DATA_VD4]\r
-[WINDOW_Z_ORDER]\r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N_Renesas\RTOSDemo\RTOSDemo.c" \r
-[TARGET_NAME]\r
-"" "" 1229201492 \r
-[STATUSBAR_STATEINFO_VD1]\r
-"MasterShowState" 1 \r
-"ApplicationShowState" 1 \r
-"DebuggerShowState" 1 \r
-[STATUSBAR_STATEINFO_VD2]\r
-"MasterShowState" 1 \r
-"ApplicationShowState" 1 \r
-"DebuggerShowState" 1 \r
-[STATUSBAR_STATEINFO_VD3]\r
-"MasterShowState" 1 \r
-"ApplicationShowState" 1 \r
-"DebuggerShowState" 1 \r
-[STATUSBAR_STATEINFO_VD4]\r
-"MasterShowState" 1 \r
-"ApplicationShowState" 1 \r
-"DebuggerShowState" 1 \r
-[STATUSBAR_DEBUGGER_PANESTATE_VD1]\r
-[STATUSBAR_DEBUGGER_PANESTATE_VD2]\r
-[STATUSBAR_DEBUGGER_PANESTATE_VD3]\r
-[STATUSBAR_DEBUGGER_PANESTATE_VD4]\r
-[DEBUGGER_OPTIONS]\r
-"" \r
-[DOWNLOAD_MODULES]\r
-[CONNECT_ON_GO]\r
-"FALSE" \r
-[DOWNLOAD_MODULES_AFTER_BUILD]\r
-"TRUE" \r
-[REMOVE_BREAKPOINTS_ON_DOWNLOAD]\r
-"FALSE" \r
-[DISABLE_MEMORY_ACCESS_PRIOR_TO_COMMAND_FILE_EXECUTION]\r
-"FALSE" \r
-[LIMIT_DISASSEMBLY_MEMORY_ACCESS]\r
-"FALSE" \r
-[DISABLE_MEMORY_ACCESS_DURING_EXECUTION]\r
-"FALSE" \r
-[DEBUGGER_OPTIONS_PROPERTIES]\r
-"1" \r
-[COMMAND_FILES]\r
-[DEFAULT_DEBUG_FORMAT]\r
-"" \r
-[FLASH_DETAILS]\r
-"0.000000" 0 0 "" 0 "" 0 0 "" 1 1 0 0 0 0 0 "" "" "" "" "" \r
-[BREAKPOINTS]\r
-[END]\r
diff --git a/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/FreeRTOSConfig.h b/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/FreeRTOSConfig.h
deleted file mode 100644 (file)
index c398d09..0000000
+++ /dev/null
@@ -1,146 +0,0 @@
-/*\r
- * FreeRTOS Kernel V10.1.0\r
- * Copyright (C) 2018 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
-#ifndef FREERTOS_CONFIG_H\r
-#define FREERTOS_CONFIG_H\r
-\r
-/* Board specifics. */\r
-#include "platform.h"\r
-\r
-/*-----------------------------------------------------------\r
- * Application specific definitions.\r
- *\r
- * These definitions should be adjusted for your particular hardware and\r
- * application requirements.\r
- *\r
- * THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
- * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.\r
- *\r
- * See http://www.freertos.org/a00110.html\r
- *----------------------------------------------------------*/\r
-\r
-#define configUSE_PREEMPTION                   1\r
-#define configUSE_IDLE_HOOK                            0\r
-#define configUSE_TICK_HOOK                            0\r
-#define configCPU_CLOCK_HZ                             ( 96000000UL )\r
-#define configPERIPHERAL_CLOCK_HZ              ( 48000000UL )\r
-#define configTICK_RATE_HZ                             ( ( TickType_t ) 1000 )\r
-#define configMINIMAL_STACK_SIZE               ( ( unsigned short ) 140 )\r
-#define configTOTAL_HEAP_SIZE                  ( ( size_t ) ( 50 * 1024 ) )\r
-#define configMAX_TASK_NAME_LEN                        ( 12 )\r
-#define configUSE_TRACE_FACILITY               1\r
-#define configUSE_16_BIT_TICKS                 0\r
-#define configIDLE_SHOULD_YIELD                        1\r
-#define configUSE_CO_ROUTINES                  0\r
-#define configUSE_MUTEXES                              1\r
-#define configGENERATE_RUN_TIME_STATS  1\r
-#define configCHECK_FOR_STACK_OVERFLOW 2\r
-#define configUSE_RECURSIVE_MUTEXES            1\r
-#define configQUEUE_REGISTRY_SIZE              0\r
-#define configUSE_MALLOC_FAILED_HOOK   1\r
-#define configUSE_APPLICATION_TASK_TAG 0\r
-\r
-#define configMAX_PRIORITIES                   ( 7 )\r
-#define configMAX_CO_ROUTINE_PRIORITIES ( 2 )\r
-\r
-/* Software timer definitions. */\r
-#define configUSE_TIMERS                               1\r
-#define configTIMER_TASK_PRIORITY              ( 3 )\r
-#define configTIMER_QUEUE_LENGTH               5\r
-#define configTIMER_TASK_STACK_DEPTH   ( configMINIMAL_STACK_SIZE )\r
-\r
-/* The interrupt priority used by the kernel itself for the tick interrupt and\r
-the pended interrupt.  This would normally be the lowest priority. */\r
-#define configKERNEL_INTERRUPT_PRIORITY         1\r
-\r
-/* The maximum interrupt priority from which FreeRTOS API calls can be made.\r
-Interrupts that use a priority above this will not be effected by anything the\r
-kernel is doing. */\r
-#define configMAX_SYSCALL_INTERRUPT_PRIORITY    4\r
-\r
-/* The peripheral used to generate the tick interrupt is configured as part of\r
-the application code.  This constant should be set to the vector number of the\r
-peripheral chosen.  As supplied this is CMT0. */\r
-#define configTICK_VECTOR                                              _CMT0_CMI0\r
-\r
-/* Set the following definitions to 1 to include the API function, or zero\r
-to exclude the API function. */\r
-\r
-#define INCLUDE_vTaskPrioritySet                       1\r
-#define INCLUDE_uxTaskPriorityGet                      1\r
-#define INCLUDE_vTaskDelete                                    1\r
-#define INCLUDE_vTaskCleanUpResources          0\r
-#define INCLUDE_vTaskSuspend                           1\r
-#define INCLUDE_vTaskDelayUntil                                1\r
-#define INCLUDE_vTaskDelay                                     1\r
-#define INCLUDE_uxTaskGetStackHighWaterMark    1\r
-#define INCLUDE_xTaskGetSchedulerState         1\r
-\r
-/* This demo makes use of one or more example stats formatting functions.  These\r
-format the raw data provided by the xTaskGetSystemState() function in to human\r
-readable ASCII form.  See the notes in the implementation of vTaskList() within \r
-FreeRTOS/Source/tasks.c for limitations. */\r
-#define configINCLUDE_STATS_FORMATTING_FUNCTIONS       1\r
-\r
-#define configASSERT( x ) if( ( x ) == 0 ) { taskDISABLE_INTERRUPTS(); for( ;; ); }    \r
-extern volatile unsigned long ulHighFrequencyTickCount;\r
-#define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() nop() /* Run time stats use the same timer as the high frequency timer test. */\r
-#define portGET_RUN_TIME_COUNTER_VALUE() ulHighFrequencyTickCount\r
-\r
-\r
-/* Override some of the priorities set in the common demo tasks.  This is\r
-required to ensure flase positive timing errors are not reported. */\r
-#define bktPRIMARY_PRIORITY            ( configMAX_PRIORITIES - 3 )\r
-#define bktSECONDARY_PRIORITY  ( configMAX_PRIORITIES - 4 )\r
-#define intqHIGHER_PRIORITY            ( configMAX_PRIORITIES - 3 )\r
-\r
-\r
-/*-----------------------------------------------------------\r
- * Ethernet configuration.\r
- *-----------------------------------------------------------*/\r
-\r
-/* MAC address configuration. */\r
-#define configMAC_ADDR0        0x00\r
-#define configMAC_ADDR1        0x12\r
-#define configMAC_ADDR2        0x13\r
-#define configMAC_ADDR3        0x10\r
-#define configMAC_ADDR4        0x15\r
-#define configMAC_ADDR5        0x11\r
-\r
-/* IP address configuration. */\r
-#define configIP_ADDR0         192\r
-#define configIP_ADDR1         168\r
-#define configIP_ADDR2         0\r
-#define configIP_ADDR3         200\r
-\r
-/* Netmask configuration. */\r
-#define configNET_MASK0                255\r
-#define configNET_MASK1                255\r
-#define configNET_MASK2                255\r
-#define configNET_MASK3                0\r
-\r
-#endif /* FREERTOS_CONFIG_H */\r
diff --git a/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/HighFrequencyTimerTest.c b/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/HighFrequencyTimerTest.c
deleted file mode 100644 (file)
index 60b169e..0000000
+++ /dev/null
@@ -1,144 +0,0 @@
-/*\r
- * FreeRTOS Kernel V10.1.0\r
- * Copyright (C) 2018 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
- * High frequency timer test as described in main.c. \r
- */\r
-\r
-/* Scheduler includes. */\r
-#include "FreeRTOS.h"\r
-\r
-/* Hardware specifics. */\r
-#include "iodefine.h"\r
-\r
-/* The set frequency of the interrupt.  Deviations from this are measured as\r
-the jitter. */\r
-#define timerINTERRUPT_FREQUENCY               ( 20000UL )\r
-\r
-/* The expected time between each of the timer interrupts - if the jitter was\r
-zero. */\r
-#define timerEXPECTED_DIFFERENCE_VALUE ( ( unsigned short ) ( ( configPERIPHERAL_CLOCK_HZ / 8UL ) / timerINTERRUPT_FREQUENCY ) )\r
-\r
-/* The highest available interrupt priority. */\r
-#define timerHIGHEST_PRIORITY                  ( 15 )\r
-\r
-/* Misc defines. */\r
-#define timerTIMER_3_COUNT_VALUE               ( *( ( unsigned short * ) 0x8801a ) ) /*( CMT3.CMCNT )*/\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-/* Interrupt handler in which the jitter is measured. */\r
-static void prvTimer2IntHandler( void );\r
-\r
-/* Stores the value of the maximum recorded jitter between interrupts.  This is\r
-displayed on one of the served web pages. */\r
-volatile unsigned short usMaxJitter = 0;\r
-\r
-/* Counts the number of high frequency interrupts - used to generate the run\r
-time stats. */\r
-volatile unsigned long ulHighFrequencyTickCount = 0UL;\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-void vSetupHighFrequencyTimer( void )\r
-{\r
-       /* Timer CMT2 is used to generate the interrupts, and CMT3 is used\r
-       to measure the jitter. */\r
-\r
-       /* Enable compare match timer 2 and 3. */\r
-       MSTP( CMT2 ) = 0;\r
-       MSTP( CMT3 ) = 0;\r
-       \r
-       /* Interrupt on compare match. */\r
-       CMT2.CMCR.BIT.CMIE = 1;\r
-       \r
-       /* Set the compare match value. */\r
-       CMT2.CMCOR = ( unsigned short ) ( ( ( configPERIPHERAL_CLOCK_HZ / timerINTERRUPT_FREQUENCY ) -1 ) / 8 );\r
-       \r
-       /* Divide the PCLK by 8. */\r
-       CMT2.CMCR.BIT.CKS = 0;\r
-       CMT3.CMCR.BIT.CKS = 0;\r
-       \r
-       /* Enable the interrupt... */\r
-       _IEN( _CMT2_CMI2 ) = 1;\r
-       \r
-       /* ...and set its priority to the maximum possible, this is above the priority\r
-       set by configMAX_SYSCALL_INTERRUPT_PRIORITY so will nest. */\r
-       _IPR( _CMT2_CMI2 ) = timerHIGHEST_PRIORITY;\r
-       \r
-       /* Start the timers. */\r
-       CMT.CMSTR1.BIT.STR2 = 1;\r
-       CMT.CMSTR1.BIT.STR3 = 1;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-#pragma interrupt ( prvTimer2IntHandler( vect = _VECT( _CMT2_CMI2 ), enable ) )\r
-static void prvTimer2IntHandler( void )\r
-{\r
-volatile unsigned short usCurrentCount;\r
-static unsigned short usMaxCount = 0;\r
-static unsigned long ulErrorCount = 0UL;\r
-\r
-       /* We use the timer 1 counter value to measure the clock cycles between\r
-       the timer 0 interrupts.  First stop the clock. */\r
-       CMT.CMSTR1.BIT.STR3 = 0;\r
-       nop();\r
-       nop();\r
-       usCurrentCount = timerTIMER_3_COUNT_VALUE;\r
-\r
-       /* Is this the largest count we have measured yet? */\r
-       if( usCurrentCount > usMaxCount )\r
-       {\r
-               if( usCurrentCount > timerEXPECTED_DIFFERENCE_VALUE )\r
-               {\r
-                       usMaxJitter = usCurrentCount - timerEXPECTED_DIFFERENCE_VALUE;\r
-               }\r
-               else\r
-               {\r
-                       /* This should not happen! */\r
-                       ulErrorCount++;\r
-               }\r
-               \r
-               usMaxCount = usCurrentCount;\r
-       }\r
-\r
-       /* Used to generate the run time stats. */\r
-       ulHighFrequencyTickCount++;\r
-       \r
-       /* Clear the timer. */\r
-       timerTIMER_3_COUNT_VALUE = 0;\r
-       \r
-       /* Then start the clock again. */\r
-       CMT.CMSTR1.BIT.STR3 = 1;\r
-}\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
diff --git a/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/IntQueueTimer.c b/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/IntQueueTimer.c
deleted file mode 100644 (file)
index 1e13a24..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-/*\r
- * FreeRTOS Kernel V10.1.0\r
- * Copyright (C) 2018 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
- * This file contains the non-portable and therefore RX62N specific parts of\r
- * the IntQueue standard demo task - namely the configuration of the timers\r
- * that generate the interrupts and the interrupt entry points.\r
- */\r
-\r
-/* Scheduler includes. */\r
-#include "FreeRTOS.h"\r
-#include "task.h"\r
-\r
-/* Demo includes. */\r
-#include "IntQueueTimer.h"\r
-#include "IntQueue.h"\r
-\r
-/* Hardware specifics. */\r
-#include "iodefine.h"\r
-\r
-#define tmrTIMER_0_1_FREQUENCY ( 2000UL )\r
-#define tmrTIMER_2_3_FREQUENCY ( 2001UL )\r
-\r
-void vInitialiseTimerForIntQueueTest( void )\r
-{\r
-       /* Ensure interrupts do not start until full configuration is complete. */\r
-       portENTER_CRITICAL();\r
-       {\r
-               /* Cascade two 8bit timer channels to generate the interrupts. \r
-               8bit timer unit 1 (TMR0 and TMR1) and 8bit timer unit 2 (TMR2 and TMR3 are\r
-               utilised for this test. */\r
-\r
-               /* Enable the timers. */\r
-               SYSTEM.MSTPCRA.BIT.MSTPA5 = 0;\r
-               SYSTEM.MSTPCRA.BIT.MSTPA4 = 0;\r
-\r
-               /* Enable compare match A interrupt request. */\r
-               TMR0.TCR.BIT.CMIEA = 1;\r
-               TMR2.TCR.BIT.CMIEA = 1;\r
-\r
-               /* Clear the timer on compare match A. */\r
-               TMR0.TCR.BIT.CCLR = 1;\r
-               TMR2.TCR.BIT.CCLR = 1;\r
-\r
-               /* Set the compare match value. */\r
-               TMR01.TCORA = ( unsigned short ) ( ( ( configPERIPHERAL_CLOCK_HZ / tmrTIMER_0_1_FREQUENCY ) -1 ) / 8 );\r
-               TMR23.TCORA = ( unsigned short ) ( ( ( configPERIPHERAL_CLOCK_HZ / tmrTIMER_0_1_FREQUENCY ) -1 ) / 8 );\r
-\r
-               /* 16 bit operation ( count from timer 1,2 ). */\r
-               TMR0.TCCR.BIT.CSS = 3;\r
-               TMR2.TCCR.BIT.CSS = 3;\r
-       \r
-               /* Use PCLK as the input. */\r
-               TMR1.TCCR.BIT.CSS = 1;\r
-               TMR3.TCCR.BIT.CSS = 1;\r
-       \r
-               /* Divide PCLK by 8. */\r
-               TMR1.TCCR.BIT.CKS = 2;\r
-               TMR3.TCCR.BIT.CKS = 2;\r
-       \r
-               /* Enable TMR 0, 2 interrupts. */\r
-               IEN( TMR0, CMIA0 ) = 1;\r
-               IEN( TMR2, CMIA2 ) = 1;\r
-\r
-               /* Set the timer interrupts to be above the kernel.  The interrupts are\r
-               assigned different priorities so they nest with each other. */\r
-               IPR( TMR0, CMIA0 ) = configMAX_SYSCALL_INTERRUPT_PRIORITY - 1;\r
-               IPR( TMR2, CMIA2 ) = ( configMAX_SYSCALL_INTERRUPT_PRIORITY - 2 );\r
-       }\r
-       portEXIT_CRITICAL();\r
-       \r
-       /* Ensure the interrupts are clear as they are edge detected. */\r
-       IR( TMR0, CMIA0 ) = 0;\r
-       IR( TMR2, CMIA2 ) = 0;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-#pragma interrupt ( vT0_1InterruptHandler( vect = VECT_TMR0_CMIA0, enable ) )\r
-void vT0_1InterruptHandler( void )\r
-{\r
-       portYIELD_FROM_ISR( xFirstTimerHandler() );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-#pragma interrupt ( vT2_3InterruptHandler( vect = VECT_TMR2_CMIA2, enable ) )\r
-void vT2_3InterruptHandler( void )\r
-{\r
-       portYIELD_FROM_ISR( xSecondTimerHandler() );\r
-}\r
-\r
-\r
-\r
-\r
diff --git a/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/IntQueueTimer.h b/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/IntQueueTimer.h
deleted file mode 100644 (file)
index 5630018..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/*\r
- * FreeRTOS Kernel V10.1.0\r
- * Copyright (C) 2018 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
-#ifndef INT_QUEUE_TIMER_H\r
-#define INT_QUEUE_TIMER_H\r
-\r
-void vInitialiseTimerForIntQueueTest( void );\r
-portBASE_TYPE xTimer0Handler( void );\r
-portBASE_TYPE xTimer1Handler( void );\r
-\r
-#endif\r
-\r
diff --git a/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/ParTest.c b/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/ParTest.c
deleted file mode 100644 (file)
index 62a32ac..0000000
+++ /dev/null
@@ -1,157 +0,0 @@
-/*\r
- * FreeRTOS Kernel V10.1.0\r
- * Copyright (C) 2018 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
- * Simple IO routines to control the LEDs.\r
- *-----------------------------------------------------------*/\r
-\r
-/* Scheduler includes. */\r
-#include "FreeRTOS.h"\r
-#include "task.h"\r
-\r
-/* Demo includes. */\r
-#include "partest.h"\r
-\r
-/* Hardware specifics. */\r
-#include "iodefine.h"\r
-\r
-#define partestNUM_LEDS ( 4 )\r
-\r
-long lParTestGetLEDState( unsigned long ulLED );\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-void vParTestInitialise( void )\r
-{\r
-       /* Port pin configuration is done by the low level set up prior to this \r
-       function being called. */\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-void vParTestSetLED( unsigned long ulLED, signed long xValue )\r
-{\r
-       if( ulLED < partestNUM_LEDS )\r
-       {\r
-               if( xValue != 0 )\r
-               {\r
-                       /* Turn the LED on. */\r
-                       taskENTER_CRITICAL();\r
-                       {\r
-                               switch( ulLED )\r
-                               {\r
-                                       case 0: LED0 = LED_ON;\r
-                                                       break;\r
-                                       case 1: LED1 = LED_ON;\r
-                                                       break;\r
-                                       case 2: LED2 = LED_ON;\r
-                                                       break;\r
-                                       case 3: LED3 = LED_ON;\r
-                                                       break;\r
-                               }\r
-                       }\r
-                       taskEXIT_CRITICAL();\r
-               }\r
-               else\r
-               {\r
-                       /* Turn the LED off. */\r
-                       taskENTER_CRITICAL();\r
-                       {\r
-                               switch( ulLED )\r
-                               {\r
-                                       case 0: LED0 = LED_OFF;\r
-                                                       break;\r
-                                       case 1: LED1 = LED_OFF;\r
-                                                       break;\r
-                                       case 2: LED2 = LED_OFF;\r
-                                                       break;\r
-                                       case 3: LED3 = LED_OFF;\r
-                                                       break;\r
-                               }\r
-\r
-                       }\r
-                       taskEXIT_CRITICAL();\r
-               }\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-void vParTestToggleLED( unsigned long ulLED )\r
-{\r
-       if( ulLED < partestNUM_LEDS )\r
-       {\r
-               taskENTER_CRITICAL();\r
-               {\r
-                       if( lParTestGetLEDState( ulLED ) != 0x00 )\r
-                       {\r
-                               vParTestSetLED( ulLED, 0 );\r
-                       }\r
-                       else\r
-                       {\r
-                               vParTestSetLED( ulLED, 1 );\r
-                       }\r
-               }\r
-               taskEXIT_CRITICAL();\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-                                                       \r
-long lParTestGetLEDState( unsigned long ulLED )\r
-{\r
-long lReturn = pdTRUE;\r
-\r
-       if( ulLED < partestNUM_LEDS )\r
-       {\r
-               switch( ulLED )\r
-               {\r
-                       case 0  :       if( LED0 != 0 )\r
-                                               {\r
-                                                       lReturn =  pdFALSE;\r
-                                               }\r
-                                               break;                                  \r
-                       case 1  :       if( LED1 != 0 )\r
-                                               {\r
-                                                       lReturn =  pdFALSE;\r
-                                               }\r
-                                               break;                                  \r
-                       case 2  :       if( LED2 != 0 )\r
-                                               {\r
-                                                       lReturn =  pdFALSE;\r
-                                               }\r
-                                               break;                                  \r
-                       case 3  :       if( LED3 != 0 )\r
-                                               {\r
-                                                       lReturn =  pdFALSE;\r
-                                               }\r
-                                               break;                                  \r
-               }\r
-       }\r
-       \r
-       return lReturn;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-                                                       
\ No newline at end of file
diff --git a/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/RTOSDemo.hwp b/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/RTOSDemo.hwp
deleted file mode 100644 (file)
index 456c784..0000000
+++ /dev/null
@@ -1,479 +0,0 @@
-[HIMDBVersion]\r
-2.0\r
-[DATABASE_VERSION]\r
-"2.8" \r
-[PROJECT_DETAILS]\r
-"RTOSDemo" "C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo" "C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\RTOSDemo.hwp" "RX" "Renesas RX Standard" "Application" "RX600" "Other" \r
-[INFORMATION]\r
-"No project information available" \r
-[TOOL_CHAIN]\r
-"Renesas RX Standard Toolchain" "1.2.0.0" \r
-[CONFIGURATIONS]\r
-"Blinky" "C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\Blinky" \r
-"Debug" "C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\Debug" \r
-"Debug-with-optimisation" "C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\Debug-with-optimisation" \r
-[BUILD_PHASES]\r
-"Renesas OptLinker" 1 \r
-"Renesas RX Assembler" 1 \r
-"Renesas RX C/C++ Compiler" 1 \r
-"Renesas RX C/C++ Library Generator" 1 \r
-"Renesas RX Configurator" 1 \r
-[TOOL_ENVIRONMENT]\r
-[EXTENSIONS]\r
-"Absolute file" "ABS" \r
-"Assembly include file" "INC" \r
-"Assembly list file" "LST" \r
-"Assembly source file" "S" \r
-"Assembly source file" "SRC" \r
-"Binary file" "BIN" \r
-"C header file" "H" \r
-"C source file" "C" \r
-"C++ header file" "HPP" \r
-"C++ source file" "CC" \r
-"C++ source file" "CP" \r
-"C++ source file" "CPP" \r
-"CPU information file" "CPU" \r
-"Calling information file" "CAL" \r
-"Configuration file" "CFG" \r
-"Debug information file" "DBG" \r
-"Hex file" "HEX" \r
-"Library file" "LIB" \r
-"Library information file" "LBP" \r
-"Linkage map file" "MAP" \r
-"Linkage symbol file" "FSY" \r
-"Object file" "OBJ" \r
-"Optimize map file" "bls" \r
-"Preprocessed C source file" "P" \r
-"Preprocessed C++ source file" "PP" \r
-"Relocatable file" "REL" \r
-"Rts information file" "RTS" \r
-"S-Record file" "MOT" \r
-"Stack information file" "SNI" \r
-"TD include object file" "RTI" \r
-[FILE_GROUPS]\r
-"Absolute file" "BIN" "NONE" "" \r
-"Assembly include file" "TEXT" "EDITOR" "" \r
-"Assembly list file" "TEXT" "EDITOR" "" \r
-"Assembly source file" "TEXT" "EDITOR" "" \r
-"Binary file" "BIN" "NONE" "" \r
-"C header file" "TEXT" "EDITOR" "" \r
-"C source file" "TEXT" "EDITOR" "" \r
-"C++ header file" "TEXT" "EDITOR" "" \r
-"C++ source file" "TEXT" "EDITOR" "" \r
-"CPU information file" "BIN" "NONE" "" \r
-"Calling information file" "BIN" "NONE" "" \r
-"Configuration file" "TEXT" "EDITOR" "" \r
-"Debug information file" "BIN" "NONE" "" \r
-"Hex file" "TEXT" "EDITOR" "" \r
-"Library file" "BIN" "NONE" "" \r
-"Library information file" "TEXT" "EDITOR" "" \r
-"Linkage map file" "TEXT" "EDITOR" "" \r
-"Linkage symbol file" "TEXT" "EDITOR" "" \r
-"Object file" "BIN" "NONE" "" \r
-"Optimize map file" "BIN" "NONE" "" \r
-"Preprocessed C source file" "TEXT" "EDITOR" "" \r
-"Preprocessed C++ source file" "TEXT" "EDITOR" "" \r
-"Relocatable file" "BIN" "NONE" "" \r
-"Rts information file" "BIN" "NONE" "" \r
-"S-Record file" "TEXT" "EDITOR" "" \r
-"Stack information file" "BIN" "NONE" "" \r
-"TD include object file" "BIN" "NONE" "" \r
-[ASSOCIATED_APPLICATIONS]\r
-[TOOLCHAIN_PHASE]\r
-"Renesas OptLinker" \r
-"Renesas RX Assembler" \r
-"Renesas RX C/C++ Compiler" \r
-"Renesas RX C/C++ Library Generator" \r
-"Renesas RX Configurator" \r
-[UTILITY_PHASE]\r
-[CUSTOM_PHASES]\r
-[CUSTOM_PHASE_INPUT_GROUP]\r
-[CUSTOM_PHASE_OUTPUT_SYNTAX]\r
-[BUILD_ORDER]\r
-"Renesas RX C/C++ Library Generator" 1 \r
-"Renesas RX C/C++ Compiler" 1 \r
-"Renesas RX Assembler" 1 \r
-"Renesas OptLinker" 1 \r
-"Renesas RX Configurator" 0 \r
-[BUILD_PHASE_DETAILS]\r
-"Renesas OptLinker" "Object file|Library file|Relocatable file" 0 \r
-"Renesas RX Assembler" "Assembly source file|Linkage symbol file" 1 \r
-"Renesas RX C/C++ Compiler" "C source file|C++ source file" 1 \r
-"Renesas RX C/C++ Library Generator" "" 0 \r
-"Renesas RX Configurator" "Configuration file" 0 \r
-[BUILD_FILE_ORDER_Assembly source file]\r
-"Renesas RX Assembler" 1 \r
-[BUILD_FILE_ORDER_C source file]\r
-"Renesas RX C/C++ Compiler" 1 \r
-[BUILD_FILE_ORDER_C++ source file]\r
-"Renesas RX C/C++ Compiler" 1 \r
-[BUILD_FILE_ORDER_Linkage symbol file]\r
-"Renesas RX Assembler" 1 \r
-[SCRAP]\r
-"Project Generator Setup File" "" \r
-[MAPPINGS]\r
-"Assembly source file" "Renesas RX Assembler" "Renesas RX C/C++ Compiler" \r
-"Library file" "Renesas OptLinker" "Renesas RX C/C++ Library Generator" \r
-"Object file" "Renesas OptLinker" "Renesas RX Assembler" \r
-"Object file" "Renesas OptLinker" "Renesas RX C/C++ Compiler" \r
-[PROJECT_FILES]\r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\BlockQ.c" "User" "C source file|Common demo tasks" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\GenQTest.c" "User" "C source file|Common demo tasks" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\IntQueue.c" "User" "C source file|Common demo tasks" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\PollQ.c" "User" "C source file|Common demo tasks" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\QPeek.c" "User" "C source file|Common demo tasks" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\blocktim.c" "User" "C source file|Common demo tasks" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\death.c" "User" "C source file|Common demo tasks" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\flash_timer.c" "User" "C source file|Common demo tasks" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\integer.c" "User" "C source file|Common demo tasks" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\recmutex.c" "User" "C source file|Common demo tasks" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\semtest.c" "User" "C source file|Common demo tasks" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\sp_flop.c" "User" "C source file|Common demo tasks" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\apps\httpd\http-strings.c" "User" "C source file|FreeTCP (Based on uIP)|Common" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\apps\httpd\httpd-fs.c" "User" "C source file|FreeTCP (Based on uIP)|Common" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\apps\httpd\httpd.c" "User" "C source file|FreeTCP (Based on uIP)|Common" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\psock.c" "User" "C source file|FreeTCP (Based on uIP)" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\timer.c" "User" "C source file|FreeTCP (Based on uIP)" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\uip.c" "User" "C source file|FreeTCP (Based on uIP)" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\uip_arp.c" "User" "C source file|FreeTCP (Based on uIP)" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\HighFrequencyTimerTest.c" "User" "C source file" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\IntQueueTimer.c" "User" "C source file" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\ParTest.c" "User" "C source file" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\Renesas-Files\board\rskrx63n\dbsct.c" "User" "C source file|Renesas Files" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\Renesas-Files\board\rskrx63n\flash_options.c" "User" "C source file|Renesas Files" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\Renesas-Files\board\rskrx63n\hwsetup.c" "User" "C source file|Renesas Files" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\Renesas-Files\board\rskrx63n\lowlvl.src" "User" "Assembly source file" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\Renesas-Files\board\rskrx63n\lowsrc.c" "User" "C source file|Renesas Files" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\Renesas-Files\board\rskrx63n\resetprg.c" "User" "C source file|Renesas Files" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\Renesas-Files\board\rskrx63n\sbrk.c" "User" "C source file|Renesas Files" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\Renesas-Files\board\rskrx63n\vecttbl.c" "User" "C source file|Renesas Files" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\main-blinky.c" "User" "C source file" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\main-full.c" "User" "C source file" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\uIP_Task.c" "User" "C source file" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\webserver\EMAC.c" "User" "C source file|FreeTCP (Based on uIP)|Port Specific" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\webserver\httpd-cgi.c" "User" "C source file|FreeTCP (Based on uIP)|Port Specific" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\webserver\phy.c" "User" "C source file|FreeTCP (Based on uIP)|Port Specific" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Source\list.c" "User" "C source file|FreeRTOS" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Source\portable\MemMang\heap_2.c" "User" "C source file|FreeRTOS|Portable layer" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Source\portable\Renesas\RX600\port.c" "User" "C source file|FreeRTOS|Portable layer" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Source\portable\Renesas\RX600\port_asm.src" "User" "Assembly source file" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Source\queue.c" "User" "C source file|FreeRTOS" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Source\tasks.c" "User" "C source file|FreeRTOS" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Source\timers.c" "User" "C source file|FreeRTOS" 2 \r
-[FOLDER]\r
-"Assembly source file" "Assembly source file" \r
-"C header file" "C header file" \r
-"C source file" "C source file" \r
-"C source file|Common demo tasks" "" \r
-"C source file|FreeRTOS" "" \r
-"C source file|FreeRTOS|Portable layer" "" \r
-"C source file|FreeTCP (Based on uIP)" "" \r
-"C source file|FreeTCP (Based on uIP)|Common" "" \r
-"C source file|FreeTCP (Based on uIP)|Port Specific" "" \r
-"C source file|Renesas Files" "" \r
-[GENERAL_DATA_PROJECT]\r
-"FDT_AutoConnect" "0" \r
-"FDT_BaseDevice" "" \r
-"FDT_BaudRate" "" \r
-"FDT_BlockLockConnect" "1" \r
-"FDT_BlockLockDisconnect" "1" \r
-"FDT_BootMode" "FALSE" \r
-"FDT_CKM" "0" \r
-"FDT_CKP" "0" \r
-"FDT_ClockMode" "0" \r
-"FDT_ClockSync" "00000000" \r
-"FDT_Comments" "" \r
-"FDT_ConnectionResetSuppression" "FFFFFFFF" \r
-"FDT_Device" "" \r
-"FDT_DoReadbackVerification" "" \r
-"FDT_DoSecurityProtection" "" \r
-"FDT_DoSecurityProtectionLevel" "" \r
-"FDT_Frequency" "0.0000" \r
-"FDT_Interface" "" \r
-"FDT_InternalClock" "FALSE" \r
-"FDT_KernelPath" "" \r
-"FDT_KernelResident" "FALSE" \r
-"FDT_McuId" "0" \r
-"FDT_MessageLevel" "0" \r
-"FDT_PinOutputs" "00000000" \r
-"FDT_PinSettings" "00000000" \r
-"FDT_Port" "" \r
-"FDT_Protection" "0" \r
-"FDT_Protocol" "" \r
-"FDT_ReinterrogateGenericDevice" "" \r
-"FDT_ResetOnDisconnect" "" \r
-"FDT_ResetPinOutputs" "00000000" \r
-"FDT_ResetPinSettings" "00000000" \r
-"FDT_SerNumConfigString" "" \r
-"FDT_SerNumDllFunction" "" \r
-"FDT_SerNumDllLocation" "" \r
-"FDT_SerNumEnabled" "FALSE" \r
-"FDT_SerNumMemArea" "" \r
-"FDT_UPMPinSettings" "00000000" \r
-"FDT_UseDefaultBaudRate" "FALSE" \r
-"FDT_UseInternalKernel" "TRUE" \r
-"FDT_UserPinOutputs" "00000000" \r
-"FDT_UserPinSettings" "00000000" \r
-"MAKEGEN_GENERATE_MAKEFILE_FOR" "0" \r
-"MAKEGEN_MAKEFILE_FORMAT" "2" \r
-"MAKEGEN_MAKEFILE_RELATIVITY" "1" \r
-"MAKEGEN_SCAN_DEPENDENCIES_WHILST_BUILDING_MAKEFILE" "1" \r
-"MAKEGEN_USE_STATIC_SUBCOMMAND_FILES" "1" \r
-"USE_CUSTOM_LINKAGE_ORDER" "0" \r
-[ON_DEMAND_COMPONENTS_LOADED]\r
-[SYNC_SESSION_NAMES]\r
-[SESSIONS]\r
-"SessionRX600_E1_E20_SYSTEM" "C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\SessionRX600_E1_E20_SYSTEM.hsf" 0 \r
-[GENERAL_DATA_SESSION_SessionRX600_E1_E20_SYSTEM]\r
-[OPTIONS_Blinky_Renesas OptLinker]\r
-"Single Shot" "0d8c8ced0612dc10" 5 \r
-[OPTIONS_Blinky_Renesas RX Assembler]\r
-"Assembly source file" "00bd89f6bf10dc10" 4 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\Renesas-Files\board\rskrx63n\lowlvl.src" "02e033f30612dc10" 4 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Source\portable\Renesas\RX600\port_asm.src" "00bd89f6bf10dc10" 4 \r
-"Linkage symbol file" "00bd89f6bf10dc10" 4 \r
-[OPTIONS_Blinky_Renesas RX C/C++ Compiler]\r
-"C source file" "08eacdba1712dc10" 2 \r
-"C++ source file" "08eacdba1712dc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\BlockQ.c" "08eacdba1712dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\GenQTest.c" "08eacdba1712dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\IntQueue.c" "08eacdba1712dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\PollQ.c" "08eacdba1712dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\QPeek.c" "08eacdba1712dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\blocktim.c" "08eacdba1712dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\death.c" "08eacdba1712dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\flash_timer.c" "08eacdba1712dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\integer.c" "08eacdba1712dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\recmutex.c" "08eacdba1712dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\semtest.c" "08eacdba1712dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\sp_flop.c" "08eacdba1712dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\apps\httpd\http-strings.c" "08eacdba1712dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\apps\httpd\httpd-fs.c" "08eacdba1712dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\apps\httpd\httpd.c" "08eacdba1712dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\psock.c" "08eacdba1712dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\timer.c" "08eacdba1712dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\uip.c" "08eacdba1712dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\uip_arp.c" "08eacdba1712dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\HighFrequencyTimerTest.c" "08eacdba1712dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\IntQueueTimer.c" "08eacdba1712dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\ParTest.c" "08eacdba1712dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\Renesas-Files\board\rskrx63n\dbsct.c" "08eacdba1712dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\Renesas-Files\board\rskrx63n\flash_options.c" "08eacdba1712dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\Renesas-Files\board\rskrx63n\hwsetup.c" "08eacdba1712dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\Renesas-Files\board\rskrx63n\lowsrc.c" "08eacdba1712dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\Renesas-Files\board\rskrx63n\resetprg.c" "08eacdba1712dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\Renesas-Files\board\rskrx63n\sbrk.c" "08eacdba1712dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\Renesas-Files\board\rskrx63n\vecttbl.c" "08eacdba1712dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\main-blinky.c" "08eacdba1712dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\main-full.c" "08eacdba1712dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\uIP_Task.c" "08eacdba1712dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\webserver\EMAC.c" "08eacdba1712dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\webserver\httpd-cgi.c" "08eacdba1712dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\webserver\phy.c" "08eacdba1712dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Source\list.c" "08eacdba1712dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Source\portable\MemMang\heap_2.c" "08eacdba1712dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Source\portable\Renesas\RX600\port.c" "08eacdba1712dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Source\queue.c" "08eacdba1712dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Source\tasks.c" "08eacdba1712dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Source\timers.c" "08eacdba1712dc10" 2 \r
-[OPTIONS_Blinky_Renesas RX C/C++ Library Generator]\r
-"Single Shot" "00a669f6bf10dc10" 1 \r
-[OPTIONS_Blinky_Renesas RX Configurator]\r
-"Single Shot" "02e033f30612dc10" 6 \r
-[OPTIONS_Blinky]\r
-"" 0 \r
-"[V|VERSION|1] [B|COMMAND|1] [S|SPEC|UITRON4] [S|OUTPUTPATH|^"$(CONFIGDIR)^"] [S|CPU|RX600] [S|ENDIAN|LITTLE] [S|FINT_REGISTER|0]" 6 \r
-"[V|VERSION|1] [B|SJIS|1] [B|DEBUG|1] [S|OUTPUTPATH|^"$(CONFIGDIR)\$(FILELEAF).obj^"] [S|CPU|RX600] [S|BASE|00000000=NONE] [B|SKIPDEPENDENCY|1]\r
-" 4 \r
-"[V|VERSION|1] [S|LANG|CPP] [B|SJIS|1] [S|INCLUDE|^"$(PROJDIR)\..\..\..\Source\portable\Renesas\RX600^"|^"$(PROJDIR)\..\..\..\Source\include^"|^"$(PROJDIR)\.^"|^"$(PROJDIR)\..\..\Common\include^"|^"$(PROJDIR)\.\Renesas-Files^"|^"$(PROJDIR)\webserver^"|^"$(PROJDIR)\Renesas-Files\mcu\rx63n^"] [S|OUTPUTPATH|^"$(CONFIGDIR)\$(FILELEAF).obj^"] [B|DEBUG|1] [S|OPTIMIZE|0] [B|SIZE|1] [B|MAP|0] [I|INLINE|100] [I|LOOP|2] [S|MISRA2004|ALL] [S|MISRA2004RULEFILE|^"$(CONFIGDIR)\$(PROJECTNAME).rde^"] [S|CPU|RX600] [S|BASE|00000000=NONE] [I|PID|16] [B|SKIPDEPENDENCY|1] [N|DEPENDSCAN|1]\r
-" 3 \r
-"[V|VERSION|1] [S|LANG|C] [B|SJIS|1] [S|INCLUDE|^"$(PROJDIR)\..\..\..\Source\portable\Renesas\RX600^"|^"$(PROJDIR)\..\..\..\Source\include^"|^"$(PROJDIR)\.^"|^"$(PROJDIR)\..\..\Common\include^"|^"$(PROJDIR)\.\Renesas-Files^"|^"$(PROJDIR)\webserver^"|^"$(PROJDIR)\Renesas-Files\mcu\rx63n^"] [S|OUTPUTPATH|^"$(CONFIGDIR)\$(FILELEAF).obj^"] [B|DEBUG|1] [S|OPTIMIZE|0] [B|SIZE|1] [B|MAP|0] [I|INLINE|100] [I|LOOP|2] [S|MISRA2004|ALL] [S|MISRA2004RULEFILE|^"$(CONFIGDIR)\$(PROJECTNAME).rde^"] [S|CPU|RX600] [S|BASE|00000000=NONE] [I|PID|16] [B|SKIPDEPENDENCY|1] [N|DEPENDSCAN|1]\r
-" 2 \r
-"[V|VERSION|1] [S|MODE|BUILD/CHANGED] [S|EXISTOUTPUTPATH|^"$(CONFIGDIR)\$(PROJECTNAME).lib^"] [B|RUNTIME|1] [B|STDIO|1] [B|STDLIB|1] [B|STRING|1] [B|NOFLOAT|1] [S|OUTPUTPATH|^"$(CONFIGDIR)\$(PROJECTNAME).lib^"] [B|SIZE|1] [I|INLINE|100] [I|LOOP|2] [S|CPU|RX600] [S|BASE|00000000=NONE] [B|SKIPDEPENDENCY|1]\r
-" 1 \r
-"[V|VERSION|6] [S|FORM|STYPE] [S|BYTE_COUNT_VALUE|FF] [B|DEBUG|1] [S|ROM|(D,R)|(D_1,R_1)|(D_2,R_2)] [S|CRC|NONE|DEFAULT|00000000] [B|LIST|1] [S|LIST|^"$(CONFIGDIR)\$(PROJECTNAME).map^"] [S|SHOW|METHODCUSTOM|] [S|OUTPUT|^"$(CONFIGDIR)\$(PROJECTNAME).mot^"] [I|SPACE|^"FF^"] [B|OPTIMIZE|0] [S|START|SI,SU,B_1,R_1,B_2,R_2,B,R(00)|C_1,C_2,C,C$*,L*,D*,P,W*(0FFF80000)|FIXEDVECT(0FFFFFF90)] [S|MEMORY|HIGH] [B|SKIPDEPENDENCY|1]\r
-" 5 \r
-[EXCLUDED_FILES_Blinky]\r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\apps\httpd\http-strings.c" \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\apps\httpd\httpd-fs.c" \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\apps\httpd\httpd.c" \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\psock.c" \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\timer.c" \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\uip.c" \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\uip_arp.c" \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\BlockQ.c" \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\blocktim.c" \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\death.c" \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\GenQTest.c" \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\integer.c" \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\IntQueue.c" \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\PollQ.c" \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\QPeek.c" \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\recmutex.c" \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\semtest.c" \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\sp_flop.c" \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\HighFrequencyTimerTest.c" \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\IntQueueTimer.c" \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\main-full.c" \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\uIP_Task.c" \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\webserver\EMAC.c" \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\webserver\httpd-cgi.c" \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\webserver\phy.c" \r
-[LINKAGE_ORDER_Blinky]\r
-[GENERAL_DATA_CONFIGURATION_Blinky]\r
-[OPTIONS_Debug_Renesas OptLinker]\r
-"Single Shot" "0b7666c11612dc10" 5 \r
-[OPTIONS_Debug_Renesas RX Assembler]\r
-"Assembly source file" "00a669f6bf10dc10" 4 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\Renesas-Files\board\rskrx63n\lowlvl.src" "02e033f30612dc10" 4 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Source\portable\Renesas\RX600\port_asm.src" "00a669f6bf10dc10" 4 \r
-"Linkage symbol file" "00a669f6bf10dc10" 4 \r
-[OPTIONS_Debug_Renesas RX C/C++ Compiler]\r
-"C source file" "0134ce902022dc10" 2 \r
-"C++ source file" "0134ce902022dc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\BlockQ.c" "0134ce902022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\GenQTest.c" "0134ce902022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\IntQueue.c" "0134ce902022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\PollQ.c" "0134ce902022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\QPeek.c" "0134ce902022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\blocktim.c" "0134ce902022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\death.c" "0134ce902022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\flash_timer.c" "0134ce902022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\integer.c" "0134ce902022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\recmutex.c" "0134ce902022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\semtest.c" "0134ce902022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\sp_flop.c" "0134ce902022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\apps\httpd\http-strings.c" "0134ce902022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\apps\httpd\httpd-fs.c" "0134ce902022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\apps\httpd\httpd.c" "0134ce902022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\psock.c" "0134ce902022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\timer.c" "0134ce902022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\uip.c" "0134ce902022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\uip_arp.c" "0134ce902022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\HighFrequencyTimerTest.c" "0134ce902022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\IntQueueTimer.c" "0134ce902022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\ParTest.c" "0134ce902022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\Renesas-Files\board\rskrx63n\dbsct.c" "0134ce902022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\Renesas-Files\board\rskrx63n\flash_options.c" "0134ce902022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\Renesas-Files\board\rskrx63n\hwsetup.c" "0134ce902022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\Renesas-Files\board\rskrx63n\lowsrc.c" "0134ce902022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\Renesas-Files\board\rskrx63n\resetprg.c" "0134ce902022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\Renesas-Files\board\rskrx63n\sbrk.c" "0134ce902022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\Renesas-Files\board\rskrx63n\vecttbl.c" "0134ce902022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\main-blinky.c" "0134ce902022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\main-full.c" "0134ce902022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\uIP_Task.c" "0134ce902022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\webserver\EMAC.c" "0134ce902022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\webserver\httpd-cgi.c" "0134ce902022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\webserver\phy.c" "0134ce902022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Source\list.c" "0134ce902022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Source\portable\MemMang\heap_2.c" "0134ce902022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Source\portable\Renesas\RX600\port.c" "0134ce902022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Source\queue.c" "0134ce902022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Source\tasks.c" "0134ce902022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Source\timers.c" "0134ce902022dc10" 2 \r
-[OPTIONS_Debug_Renesas RX C/C++ Library Generator]\r
-"Single Shot" "00a669f6bf10dc10" 1 \r
-[OPTIONS_Debug_Renesas RX Configurator]\r
-"Single Shot" "02e033f30612dc10" 6 \r
-[OPTIONS_Debug]\r
-"" 0 \r
-"[V|VERSION|1] [B|COMMAND|1] [S|SPEC|UITRON4] [S|OUTPUTPATH|^"$(CONFIGDIR)^"] [S|CPU|RX600] [S|ENDIAN|LITTLE] [S|FINT_REGISTER|0]" 6 \r
-"[V|VERSION|1] [B|SJIS|1] [B|DEBUG|1] [S|OUTPUTPATH|^"$(CONFIGDIR)\$(FILELEAF).obj^"] [S|CPU|RX600] [S|BASE|00000000=NONE]\r
-" 4 \r
-"[V|VERSION|1] [S|LANG|C99] [B|SJIS|1] [S|INCLUDE|^"$(PROJDIR)\..\..\..\Source\portable\Renesas\RX600^"|^"$(PROJDIR)\..\..\..\Source\include^"|^"$(PROJDIR)\.^"|^"$(PROJDIR)\..\..\Common\include^"|^"$(PROJDIR)\.\Renesas-Files^"|^"$(PROJDIR)\..\..\Common\ethernet\FreeTCPIP^"|^"$(PROJDIR)\webserver^"|^"$(PROJDIR)\Renesas-Files\mcu\rx63n^"] [S|CHANGE_MESSAGE|INFORMATION|] [S|OUTPUTPATH|^"$(CONFIGDIR)\$(FILELEAF).obj^"] [B|DEBUG|1] [S|OPTIMIZE|0] [B|SIZE|1] [B|MAP|0] [I|INLINE|100] [I|LOOP|2] [S|MISRA2004|ALL] [S|MISRA2004RULEFILE|^"$(CONFIGDIR)\$(PROJECTNAME).rde^"] [S|CPU|RX600] [S|BASE|00000000=NONE] [I|PID|16]\r
-" 2 \r
-"[V|VERSION|1] [S|LANG|CPP] [B|SJIS|1] [S|INCLUDE|^"$(PROJDIR)\..\..\..\Source\portable\Renesas\RX600^"|^"$(PROJDIR)\..\..\..\Source\include^"|^"$(PROJDIR)\.^"|^"$(PROJDIR)\..\..\Common\include^"|^"$(PROJDIR)\.\Renesas-Files^"|^"$(PROJDIR)\..\..\Common\ethernet\FreeTCPIP^"|^"$(PROJDIR)\webserver^"|^"$(PROJDIR)\Renesas-Files\mcu\rx63n^"] [S|CHANGE_MESSAGE|INFORMATION|] [S|OUTPUTPATH|^"$(CONFIGDIR)\$(FILELEAF).obj^"] [B|DEBUG|1] [S|OPTIMIZE|0] [B|SIZE|1] [B|MAP|0] [I|INLINE|100] [I|LOOP|2] [S|MISRA2004|ALL] [S|MISRA2004RULEFILE|^"$(CONFIGDIR)\$(PROJECTNAME).rde^"] [S|CPU|RX600] [S|BASE|00000000=NONE] [I|PID|16]\r
-" 3 \r
-"[V|VERSION|1] [S|MODE|BUILD/CHANGED] [S|EXISTOUTPUTPATH|^"$(CONFIGDIR)\$(PROJECTNAME).lib^"] [B|RUNTIME|1] [B|MATH|1] [B|STDIO|1] [B|STDLIB|1] [B|STRING|1] [S|OUTPUTPATH|^"$(CONFIGDIR)\$(PROJECTNAME).lib^"] [B|SIZE|1] [I|INLINE|100] [I|LOOP|2] [S|CPU|RX600] [S|BASE|00000000=NONE]\r
-" 1 \r
-"[V|VERSION|6] [S|PRELINK|SKIP] [S|FORM|STYPE] [S|BYTE_COUNT_VALUE|FF] [B|DEBUG|1] [S|ROM|(D,R)|(D_1,R_1)|(D_2,R_2)] [S|CRC|NONE|DEFAULT|00000000] [B|LIST|1] [S|LIST|^"$(CONFIGDIR)\$(PROJECTNAME).map^"] [S|SHOW|METHODALL|SYMBOL|REFERENCE|XREFERENCE] [S|OUTPUT|^"$(CONFIGDIR)\$(PROJECTNAME).mot^"] [I|SPACE|^"FF^"] [B|OPTIMIZE|0] [S|START|B_RX_DESC,B_TX_DESC,B_ETHERNET_BUFFERS,SI,SU,B_1,R_1,B_2,R_2,B,R(00)|C_1,C_2,C,C$*,L*,D*,P,W*(0FFF80000)|FIXEDVECT(0FFFFFF90)] [S|MEMORY|HIGH]\r
-" 5 \r
-[EXCLUDED_FILES_Debug]\r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\main-blinky.c" \r
-[LINKAGE_ORDER_Debug]\r
-[GENERAL_DATA_CONFIGURATION_Debug]\r
-[OPTIONS_Debug-with-optimisation_Renesas OptLinker]\r
-"Single Shot" "0d18192d3022dc10" 5 \r
-[OPTIONS_Debug-with-optimisation_Renesas RX Assembler]\r
-"Assembly source file" "00a669f6bf10dc10" 4 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\Renesas-Files\board\rskrx63n\lowlvl.src" "02e033f30612dc10" 4 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Source\portable\Renesas\RX600\port_asm.src" "00a669f6bf10dc10" 4 \r
-"Linkage symbol file" "00a669f6bf10dc10" 4 \r
-[OPTIONS_Debug-with-optimisation_Renesas RX C/C++ Compiler]\r
-"C source file" "0d18192d3022dc10" 2 \r
-"C++ source file" "0d18192d3022dc10" 3 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\BlockQ.c" "0d18192d3022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\GenQTest.c" "0d18192d3022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\IntQueue.c" "0d18192d3022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\PollQ.c" "0d18192d3022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\QPeek.c" "0d18192d3022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\blocktim.c" "0d18192d3022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\death.c" "0d18192d3022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\flash_timer.c" "0d18192d3022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\integer.c" "0d18192d3022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\recmutex.c" "0d18192d3022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\semtest.c" "0d18192d3022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\sp_flop.c" "0d18192d3022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\apps\httpd\http-strings.c" "0d18192d3022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\apps\httpd\httpd-fs.c" "0d18192d3022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\apps\httpd\httpd.c" "0d18192d3022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\psock.c" "0d18192d3022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\timer.c" "0d18192d3022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\uip.c" "0d18192d3022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\uip_arp.c" "0d18192d3022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\HighFrequencyTimerTest.c" "0d18192d3022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\IntQueueTimer.c" "0d18192d3022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\ParTest.c" "0d18192d3022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\Renesas-Files\board\rskrx63n\dbsct.c" "0d18192d3022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\Renesas-Files\board\rskrx63n\flash_options.c" "0d18192d3022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\Renesas-Files\board\rskrx63n\hwsetup.c" "0d18192d3022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\Renesas-Files\board\rskrx63n\lowsrc.c" "0d18192d3022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\Renesas-Files\board\rskrx63n\resetprg.c" "0d18192d3022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\Renesas-Files\board\rskrx63n\sbrk.c" "0d18192d3022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\Renesas-Files\board\rskrx63n\vecttbl.c" "0d18192d3022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\main-blinky.c" "0d18192d3022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\main-full.c" "0d18192d3022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\uIP_Task.c" "0d18192d3022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\webserver\EMAC.c" "0d18192d3022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\webserver\httpd-cgi.c" "0d18192d3022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\webserver\phy.c" "0d18192d3022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Source\list.c" "0d18192d3022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Source\portable\MemMang\heap_2.c" "0d18192d3022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Source\portable\Renesas\RX600\port.c" "0d18192d3022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Source\queue.c" "0d18192d3022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Source\tasks.c" "0d18192d3022dc10" 2 \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Source\timers.c" "0d18192d3022dc10" 2 \r
-[OPTIONS_Debug-with-optimisation_Renesas RX C/C++ Library Generator]\r
-"Single Shot" "00a669f6bf10dc10" 1 \r
-[OPTIONS_Debug-with-optimisation_Renesas RX Configurator]\r
-"Single Shot" "02e033f30612dc10" 6 \r
-[OPTIONS_Debug-with-optimisation]\r
-"" 0 \r
-"[V|VERSION|1] [B|COMMAND|1] [S|SPEC|UITRON4] [S|OUTPUTPATH|^"$(CONFIGDIR)^"] [S|CPU|RX600] [S|ENDIAN|LITTLE] [S|FINT_REGISTER|0]" 6 \r
-"[V|VERSION|1] [B|SJIS|1] [B|DEBUG|1] [S|OUTPUTPATH|^"$(CONFIGDIR)\$(FILELEAF).obj^"] [S|CPU|RX600] [S|BASE|00000000=NONE]\r
-" 4 \r
-"[V|VERSION|1] [S|LANG|C99] [B|SJIS|1] [S|INCLUDE|^"$(PROJDIR)\..\..\..\Source\portable\Renesas\RX600^"|^"$(PROJDIR)\..\..\..\Source\include^"|^"$(PROJDIR)\.^"|^"$(PROJDIR)\..\..\Common\include^"|^"$(PROJDIR)\.\Renesas-Files^"|^"$(PROJDIR)\..\..\Common\ethernet\FreeTCPIP^"|^"$(PROJDIR)\webserver^"|^"$(PROJDIR)\Renesas-Files\mcu\rx63n^"] [S|DEFINE|INCLUDE_HIGH_FREQUENCY_TIMER_TEST] [S|CHANGE_MESSAGE|INFORMATION|] [S|OUTPUTPATH|^"$(CONFIGDIR)\$(FILELEAF).obj^"] [B|DEBUG|1] [S|OPTIMIZE|MAX] [B|SIZE|1] [B|MAP|1] [S|MAPPATH|^"$(CONFIGDIR)\$(PROJECTNAME).bls^"] [I|INLINE|100] [I|LOOP|2] [B|MAPOPTIMIZATION|1] [S|MISRA2004|ALL] [S|MISRA2004RULEFILE|^"$(CONFIGDIR)\$(PROJECTNAME).rde^"] [S|CPU|RX600] [S|BASE|00000000=NONE] [I|PID|16]\r
-" 2 \r
-"[V|VERSION|1] [S|LANG|CPP] [B|SJIS|1] [S|INCLUDE|^"$(PROJDIR)\..\..\..\Source\portable\Renesas\RX600^"|^"$(PROJDIR)\..\..\..\Source\include^"|^"$(PROJDIR)\.^"|^"$(PROJDIR)\..\..\Common\include^"|^"$(PROJDIR)\.\Renesas-Files^"|^"$(PROJDIR)\..\..\Common\ethernet\FreeTCPIP^"|^"$(PROJDIR)\webserver^"|^"$(PROJDIR)\Renesas-Files\mcu\rx63n^"] [S|DEFINE|INCLUDE_HIGH_FREQUENCY_TIMER_TEST] [S|CHANGE_MESSAGE|INFORMATION|] [S|OUTPUTPATH|^"$(CONFIGDIR)\$(FILELEAF).obj^"] [B|DEBUG|1] [S|OPTIMIZE|MAX] [B|SIZE|1] [B|MAP|1] [S|MAPPATH|^"$(CONFIGDIR)\$(PROJECTNAME).bls^"] [I|INLINE|100] [I|LOOP|2] [B|MAPOPTIMIZATION|1] [S|MISRA2004|ALL] [S|MISRA2004RULEFILE|^"$(CONFIGDIR)\$(PROJECTNAME).rde^"] [S|CPU|RX600] [S|BASE|00000000=NONE] [I|PID|16]\r
-" 3 \r
-"[V|VERSION|1] [S|MODE|BUILD/CHANGED] [S|EXISTOUTPUTPATH|^"$(CONFIGDIR)\$(PROJECTNAME).lib^"] [B|RUNTIME|1] [B|MATH|1] [B|STDIO|1] [B|STDLIB|1] [B|STRING|1] [S|OUTPUTPATH|^"$(CONFIGDIR)\$(PROJECTNAME).lib^"] [B|SIZE|1] [I|INLINE|100] [I|LOOP|2] [S|CPU|RX600] [S|BASE|00000000=NONE]\r
-" 1 \r
-"[V|VERSION|6] [S|PRELINK|SKIP] [S|FORM|STYPE] [S|BYTE_COUNT_VALUE|FF] [B|DEBUG|1] [S|ROM|(D,R)|(D_1,R_1)|(D_2,R_2)] [S|CRC|NONE|DEFAULT|00000000] [B|LIST|1] [S|LIST|^"$(CONFIGDIR)\$(PROJECTNAME).map^"] [S|SHOW|METHODALL|SYMBOL|REFERENCE|XREFERENCE] [S|OUTPUT|^"$(CONFIGDIR)\$(PROJECTNAME).mot^"] [B|MAP|1] [S|MAPPATH|^"$(CONFIGDIR)\$(PROJECTNAME).bls^"] [I|SPACE|^"FF^"] [B|MAPOPTIMIZATION|1] [B|OPTIMIZE|0] [S|START|B_RX_DESC,B_TX_DESC,B_ETHERNET_BUFFERS,SI,SU,B_1,R_1,B_2,R_2,B,R(00)|C_1,C_2,C,C$*,L*,D*,P,W*(0FFF80000)|FIXEDVECT(0FFFFFF90)] [S|MEMORY|HIGH]\r
-" 5 \r
-[EXCLUDED_FILES_Debug-with-optimisation]\r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\main-blinky.c" \r
-[LINKAGE_ORDER_Debug-with-optimisation]\r
-[GENERAL_DATA_CONFIGURATION_Debug-with-optimisation]\r
-[GENERAL_DATA_CONFIGURATION_SESSION_Blinky_SessionRX600_E1_E20_SYSTEM]\r
-[SESSION_DATA_CONFIGURATION_SESSION_Blinky_SessionRX600_E1_E20_SYSTEM]\r
-"MEMORY_MAPPING_OPTIONS" "Unknown Options" \r
-[GENERAL_DATA_CONFIGURATION_SESSION_Debug_SessionRX600_E1_E20_SYSTEM]\r
-[SESSION_DATA_CONFIGURATION_SESSION_Debug_SessionRX600_E1_E20_SYSTEM]\r
-"MEMORY_MAPPING_OPTIONS" "Unknown Options" \r
-[GENERAL_DATA_CONFIGURATION_SESSION_Debug-with-optimisation_SessionRX600_E1_E20_SYSTEM]\r
-[SESSION_DATA_CONFIGURATION_SESSION_Debug-with-optimisation_SessionRX600_E1_E20_SYSTEM]\r
-"MEMORY_MAPPING_OPTIONS" "Unknown Options" \r
-[EXT_DEBUGGER_INFO]\r
-0 "" "" "" "" \r
-[END]\r
diff --git a/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/RTOSDemo.nav b/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/RTOSDemo.nav
deleted file mode 100644 (file)
index 982770b..0000000
Binary files a/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/RTOSDemo.nav and /dev/null differ
diff --git a/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/RTOSDemo.tps b/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/RTOSDemo.tps
deleted file mode 100644 (file)
index 4621b88..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-[HIMDBVersion]\r
-2.0\r
-[DATABASE_VERSION]\r
-"1.1" \r
-[SESSIONS_]\r
-"SessionRX600_E1_E20_SYSTEM" \r
-[CONFIGURATIONS]\r
-"Blinky" \r
-"Debug" \r
-"Debug-with-optimisation" \r
-[CURRENT_CONFIGURATION]\r
-"Blinky" \r
-[CURRENT_SESSION]\r
-"SessionRX600_E1_E20_SYSTEM" \r
-[GENERAL_DATA_PROJECT]\r
-"FDT_UserBootAreaFiles" "" \r
-[GENERAL_DATA_CONFIGURATION_Blinky]\r
-"PROJECT_FILES_MODIFIED_DATA_TAG" "FALSE" \r
-[SESSIONS_Blinky]\r
-"SessionRX600_E1_E20_SYSTEM" \r
-[GENERAL_DATA_CONFIGURATION_Debug]\r
-"PROJECT_FILES_MODIFIED_DATA_TAG" "FALSE" \r
-[SESSIONS_Debug]\r
-"SessionRX600_E1_E20_SYSTEM" \r
-[GENERAL_DATA_CONFIGURATION_Debug-with-optimisation]\r
-"PROJECT_FILES_MODIFIED_DATA_TAG" "FALSE" \r
-[SESSIONS_Debug-with-optimisation]\r
-"SessionRX600_E1_E20_SYSTEM" \r
-[GENERAL_DATA_CONFIGURATION_SESSION_Blinky_SessionRX600_E1_E20_SYSTEM]\r
-[GENERAL_DATA_CONFIGURATION_SESSION_Debug-with-optimisation_SessionRX600_E1_E20_SYSTEM]\r
-[GENERAL_DATA_CONFIGURATION_SESSION_Debug_SessionRX600_E1_E20_SYSTEM]\r
-[GENERAL_DATA_SESSION_SessionRX600_E1_E20_SYSTEM]\r
-[END]\r
diff --git a/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/Renesas-Files/board/rskrx63n/dbsct.c b/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/Renesas-Files/board/rskrx63n/dbsct.c
deleted file mode 100644 (file)
index b92493a..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-/***********************************************************************************************************************\r
-* DISCLAIMER\r
-* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No \r
-* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all \r
-* applicable laws, including copyright laws. \r
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING\r
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, \r
-* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM \r
-* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES \r
-* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS \r
-* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\r
-* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of \r
-* this software. By using this software, you agree to the additional terms and conditions found by accessing the \r
-* following link:\r
-* http://www.renesas.com/disclaimer \r
-*\r
-* Copyright (C) 2012 Renesas Electronics Corporation. All rights reserved.    \r
-***********************************************************************************************************************/\r
-/***********************************************************************************************************************\r
-* File Name       : dbsct.c\r
-* Device(s)       : RX\r
-* Description  : Defines the structure of the ROM and RAM areas.\r
-***********************************************************************************************************************/\r
-/***********************************************************************************************************************\r
-* History : DD.MM.YYYY Version  Description\r
-*         : 26.10.2011 1.00     First Release\r
-***********************************************************************************************************************/\r
-\r
-/***********************************************************************************************************************\r
-Includes   <System Includes> , "Project Includes"\r
-***********************************************************************************************************************/\r
-/* Defines type structures used in this file */
-#include <stdint.h>
-
-/* Preprocessor directive */
-#pragma unpack
-
-/* Section start */
-#pragma section C C$DSEC
-
-/* MCU ROM and RAM structure definition */
-extern const struct {
-    uint8_t *rom_s;       /* Start address of the initialized data section in ROM */
-    uint8_t *rom_e;       /* End address of the initialized data section in ROM   */
-    uint8_t *ram_s;       /* Start address of the initialized data section in RAM */
-}   _DTBL[] = {
-    { __sectop("D"), __secend("D"), __sectop("R") },
-    { __sectop("D_2"), __secend("D_2"), __sectop("R_2") },
-    { __sectop("D_1"), __secend("D_1"), __sectop("R_1") }
-};
-
-/* Section start */
-#pragma section C C$BSEC
-
-/* MCU ROM and RAM structure definition */
-extern const struct {
-    uint8_t *b_s;         /* Start address of non-initialized data section */
-    uint8_t *b_e;         /* End address of non-initialized data section */
-}   _BTBL[] = {
-    { __sectop("B"), __secend("B") },
-    { __sectop("B_2"), __secend("B_2") },
-    { __sectop("B_1"), __secend("B_1") }
-};
-
-/* Section start */
-#pragma section
-
-/* CTBL prevents excessive output of L1100 messages when linking.
-   Even if CTBL is deleted, the operation of the program does not change. */
-uint8_t * const _CTBL[] = {
-    __sectop("C_1"), __sectop("C_2"), __sectop("C"),
-    __sectop("W_1"), __sectop("W_2"), __sectop("W")
-};
-
-/* Preprocessor directive */
-#pragma packoption
-\r
-/* This is to ensure compatibility with new L section in version 1.1 and up of the RXC compiler.  Do not remove! */\r
-#pragma section C L\r
-const unsigned long deadSpace = 0xDEADDEAD;\r
-#pragma section   \r
-\r
-\r
diff --git a/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/Renesas-Files/board/rskrx63n/flash_options.c b/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/Renesas-Files/board/rskrx63n/flash_options.c
deleted file mode 100644 (file)
index a6be182..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-/***********************************************************************************************************************\r
-* DISCLAIMER\r
-* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No \r
-* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all \r
-* applicable laws, including copyright laws. \r
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING\r
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, \r
-* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM \r
-* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES \r
-* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS \r
-* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\r
-* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of \r
-* this software. By using this software, you agree to the additional terms and conditions found by accessing the \r
-* following link:\r
-* http://www.renesas.com/disclaimer \r
-*\r
-* Copyright (C) 2012 Renesas Electronics Corporation. All rights reserved.    \r
-***********************************************************************************************************************/\r
-/***********************************************************************************************************************\r
-* File Name       : flash_options.c\r
-* Device(s)    : RX63x\r
-* Description  : Some options of the RX63x are set through registers that are found in ROM. These registers and options\r
-*                are defined in the 'Option-Setting Memory' section of the HW Manual. These memory locations are defined\r
-*                below with descriptions of what is being set.\r
-***********************************************************************************************************************/\r
-/***********************************************************************************************************************\r
-* History : DD.MM.YYYY Version  Description\r
-*         : 31.10.2011 1.00     First Release\r
-*         : 13.03.2012 1.10     USER_BOOT_ENABLE macro from r_bsp_config.h is now used to set Option-Setting Memory\r
-*                               area to boot into User Boot Mode.\r
-***********************************************************************************************************************/\r
-\r
-/***********************************************************************************************************************\r
-Includes   <System Includes> , "Project Includes"\r
-***********************************************************************************************************************/\r
-/* Used for fixed-width typedefs. */\r
-#include <stdint.h>\r
-/* Determines whether user boot is used or not. */\r
-#include "platform.h"\r
-\r
-/* The UB Code A, UB Code B, and Endian select register B (MDEB) are located in the User Boot space. Immediately\r
-   following the MDEB register is the User Boot Reset Vector so it is defined below as well. These settings will only\r
-   be used when the MCU is reset in User Boot Mode. In order for the MCU to start up in User Boot Mode the following\r
-   conditions must be met:\r
-   1) UB code A is 55736572h and 426F6F74h.\r
-   2) UB code B is FFFF FF07h and 0008 C04Ch.\r
-   3) The low level is being input on the MD pin.\r
-   4) The high level is being input on the PC7 pin. \r
-   Please see the Option-Setting Memory section of your MCU's HW manual for more information. */\r
-\r
-/* 0xFF7FFFE8 - 0xFF7FFFEF : UB Code A register  \r
-   0xFF7FFFF0 - 0xFF7FFFF7 : UB Code B register\r
-   0xFF7FFFF8 - 0xFF7FFFFB : MDEB register\r
-   0xFF7FFFFC - 0xFF7FFFFF : User Boot Reset Vector */\r
-\r
-#pragma address user_boot_settings = 0xFF7FFFE8\r
-\r
-#if USER_BOOT_ENABLE == 1\r
-extern void PowerON_Reset_PC(void);\r
-\r
-/* Use this array if you are using User Boot. Make sure to fill in valid address for UB Reset Vector. */\r
-const uint32_t user_boot_settings[6] = \r
-{\r
-    0x55736572,                 //Required setting for UB Code A to get into User Boot\r
-    0x426f6f74,                 //Required setting for UB Code A to get into User Boot\r
-    0xffffff07,                 //Required setting for UB Code B to get into User Boot\r
-    0x0008c04c,                 //Required setting for UB Code B to get into User Boot\r
-    /* Choose endian for user application code\r
-       MDEB Register - Endian Select Register B\r
-       b31:b3 Reserved (set to 1)\r
-       b2:b0  MDE - Endian Select (0 = Big Endian, 7 = Little Endian) */                    \r
-    0xFFFFFFFF,                 //Select Little Endian for User Boot Code \r
-    (uint32_t) PowerON_Reset_PC //This is the User Boot Reset Vector. When using User Boot put in the reset address here\r
-};\r
-#endif\r
-\r
-/* The Endian select register S (MDES), Option function select register 1 (OFS1), and Option function select register 0\r
-   (OFS0) are located in User ROM. */\r
-\r
-/* 0xFFFFFF80 - 0xFFFFFF83 : MDES register\r
-   0xFFFFFF84 - 0xFFFFFF87 : Reserved space (0xFF's)\r
-   0xFFFFFF88 - 0xFFFFFF8B : OFS1 register\r
-   0xFFFFFF8C - 0xFFFFFF8F : OFS0 register */\r
-\r
-#pragma address flash_options = 0xFFFFFF80\r
-\r
-const uint32_t flash_options[] = \r
-{\r
-    /* Choose endian for user application code\r
-       MDES Register - Endian Select Register S\r
-       b31:b3 Reserved (set to 1)\r
-       b2:b0  MDE - Endian Select (0 = Big Endian, 7 = Little Endian) */\r
-    0xFFFFFFFF,     //Little Endian chosen for User Application\r
-    0xFFFFFFFF,     //Reserved space\r
-    /* Configure whether voltage detection 0 circuit and HOCO are enabled after reset. \r
-       OFS1 - Option Function Select Register 1 \r
-       b31:b9 Reserved (set to 1)\r
-       b8     HOCOEN - Enable/disable HOCO oscillation after a reset (0=enable, 1=disable)\r
-       b7:b3  Reserved (set to 1)\r
-       b2     LVDAS - Choose to enable/disable Voltage Detection 0 Circuit after a reset (0=enable, 1=disable)\r
-       b1:b0  Reserved (set to 1) */\r
-    0xFFFFFFFF,     //Both are disabled.\r
-    /* Configure WDT and IWDT settings. \r
-       OFS0 - Option Function Select Register 0 \r
-       b31:b29 Reserved (set to 1)\r
-       b28     WDTRSTIRQS - WDT Reset Interrupt Request - What to do on underflow (0=take interrupt, 1=reset MCU)\r
-       b27:b26 WDTRPSS - WDT Window Start Position Select - (0=25%, 1=50%, 2=75%, 3=100%,don't use)\r
-       b25:b24 WDTRPES - WDT Window End Position Select - (0=75%, 1=50%, 2=25%, 3=0%,don't use)\r
-       b23:b20 WDTCKS - WDT Clock Frequency Division Ratio - (1=/4, 4=/64, 0xF=/128, 6=/512, 7=/2048, 8=/8192)\r
-       b19:b18 WDTTOPS - WDT Timeout Period Select - (0=1024 cycles, 1=4096, 2=8192, 3=16384)\r
-       b17     WDTSTRT - WDT Start Mode Select - (0=auto-start after reset, halt after reset)\r
-       b16:b15 Reserved (set to 1)\r
-       b14     IWDTSLCSTP - IWDT Sleep Mode Count Stop Control - (0=can't stop count, 1=stop w/some low power modes)\r
-       b13     Reserved (set to 1)\r
-       b12     IWDTRSTIRQS - IWDT Reset Interrupt Request - What to do on underflow (0=take interrupt, 1=reset MCU)\r
-       b11:b10 IWDTRPSS - IWDT Window Start Position Select - (0=25%, 1=50%, 2=75%, 3=100%,don't use)\r
-       b9:b8   IWDTRPES - IWDT Window End Position Select - (0=75%, 1=50%, 2=25%, 3=0%,don't use)\r
-       b7:b4   IWDTCKS - IWDT Clock Frequency Division Ratio - (0=none, 2=/16, 3 = /32, 4=/64, 0xF=/128, 5=/256)\r
-       b3:b2   IWDTTOPS - IWDT Timeout Period Select - (0=1024 cycles, 1=4096, 2=8192, 3=16384)\r
-       b1      IWDTSTRT - IWDT Start Mode Select - (0=auto-start after reset, halt after reset)\r
-       b0      Reserved (set to 1) */\r
-    0xFFFFFFFF\r
-};\r
-\r
diff --git a/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/Renesas-Files/board/rskrx63n/hwsetup.c b/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/Renesas-Files/board/rskrx63n/hwsetup.c
deleted file mode 100644 (file)
index a72bd3f..0000000
+++ /dev/null
@@ -1,161 +0,0 @@
-/***********************************************************************************************************************\r
-* DISCLAIMER\r
-* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No \r
-* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all \r
-* applicable laws, including copyright laws. \r
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING\r
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, \r
-* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM \r
-* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES \r
-* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS \r
-* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\r
-* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of \r
-* this software. By using this software, you agree to the additional terms and conditions found by accessing the \r
-* following link:\r
-* http://www.renesas.com/disclaimer \r
-*\r
-* Copyright (C) 2012 Renesas Electronics Corporation. All rights reserved.    \r
-***********************************************************************************************************************/\r
-/***********************************************************************************************************************\r
-* File Name       : hwsetup.c\r
-* Device(s)    : RX\r
-* H/W Platform : RSK+RX63N\r
-* Description  : Defines the initialisation routines used each time the MCU is restarted.\r
-***********************************************************************************************************************/\r
-/***********************************************************************************************************************\r
-* History : DD.MM.YYYY Version  Description\r
-*         : 22.11.2011 1.00     First Release\r
-***********************************************************************************************************************/\r
-\r
-/***********************************************************************************************************************\r
-Includes   <System Includes> , "Project Includes"\r
-***********************************************************************************************************************/\r
-/* I/O Register and board definitions */\r
-#include "platform.h"\r
-/* Contains delcarations for the functions defined in this file */
-#include "hwsetup.h"\r
-\r
-/***********************************************************************************************************************\r
-Private global variables and functions\r
-***********************************************************************************************************************/\r
-/* MCU I/O port configuration function delcaration */
-static void output_ports_configure(void);\r
-
-/* Interrupt configuration function delcaration */
-static void interrupts_configure(void);\r
-
-/* MCU peripheral module configuration function declaration */
-static void peripheral_modules_enable(void);
-
-
-/***********************************************************************************************************************\r
-* Function name: hardware_setup\r
-* Description  : Contains setup functions called at device restart\r
-* Arguments    : none\r
-* Return value : none\r
-***********************************************************************************************************************/\r
-void hardware_setup(void)
-{
-    output_ports_configure();
-    interrupts_configure();
-    peripheral_modules_enable();
-}
-
-/***********************************************************************************************************************\r
-* Function name: output_ports_configure
-* Description  : Configures the port and pin direction settings, and sets the pin outputs to a safe level.\r
-* Arguments    : none\r
-* Return value : none\r
-***********************************************************************************************************************/\r
-void output_ports_configure(void)
-{
-    SYSTEM.PRCR.WORD = 0xA50B;                 /* Protect off */\r
-    MPC.PWPR.BIT.B0WI = 0 ;                    /* Unlock protection register */\r
-    MPC.PWPR.BIT.PFSWE = 1 ;                   /* Unlock MPC registers */\r
-\r
-    /* Enable LEDs. */\r
-    /* Start with LEDs off. */\r
-    LED0 = LED_OFF;\r
-    LED1 = LED_OFF;\r
-    LED2 = LED_OFF;\r
-    LED3 = LED_OFF;\r
-\r
-    /* Set LED pins as outputs. */\r
-    LED0_PDR = 1;\r
-    LED1_PDR = 1;\r
-    LED2_PDR = 1;\r
-    LED3_PDR = 1;\r
-\r
-    /* Enable switches. */\r
-    /* Set pins as inputs. */\r
-    SW1_PDR = 0;\r
-    SW2_PDR = 0;\r
-    SW3_PDR = 0;\r
-\r
-    /* Set port mode registers for switches. */\r
-    SW1_PMR = 0;\r
-    SW2_PMR = 0;\r
-    SW3_PMR = 0;\r
-    \r
-    /* Initialize RSPI pins that are used with on-board SPI flash. */\r
-    /* Set pin outputs to low to begin with. */\r
-    PORT2.PODR.BIT.B7 = 0x00;    /* RSPCKB */\r
-    PORT2.PODR.BIT.B6 = 0x00;    /* MOSIB */\r
-    PORT3.PODR.BIT.B0 = 0x00;    /* MISOB */\r
-    PORT3.PODR.BIT.B1 = 0x00;    /* SSLB0 */\r
-    \r
-    /* All GPIO for now */\r
-    PORT2.PMR.BIT.B7 = 0x00;    \r
-    PORT2.PMR.BIT.B6 = 0x00;    \r
-    PORT3.PMR.BIT.B0 = 0x00;\r
-    PORT3.PMR.BIT.B1 = 0x00;\r
-\r
-    /* Unlock MPC registers to enable writing to them. */\r
-    MPC.PWPR.BIT.B0WI = 0 ;     /* Unlock protection register */\r
-    MPC.PWPR.BIT.PFSWE = 1 ;    /* Unlock MPC registers */\r
-        \r
-    /* Set MPC for RSPI pins */\r
-    MPC.P27PFS.BYTE = 0x0D;    \r
-    MPC.P26PFS.BYTE = 0x0D;    \r
-    MPC.P30PFS.BYTE = 0x0D;    \r
-    \r
-    /* RSPI pins assigned to RSPI peripheral. */\r
-    PORT2.PMR.BIT.B7 = 1;    \r
-    PORT2.PMR.BIT.B6 = 1;    \r
-    PORT3.PMR.BIT.B0 = 1;\r
-    PORT3.PMR.BIT.B1 = 1;    \r
-    \r
-    /* RSPCKB is output. */\r
-    PORT2.PDR.BIT.B7 = 1;\r
-    /* MOSIB is output. */\r
-    PORT2.PDR.BIT.B6 = 1;\r
-    /* MISOB is input. */\r
-    PORT3.PDR.BIT.B0 = 0;\r
-    /* SSLB0 is output. */\r
-    PORT3.PDR.BIT.B1 = 1;\r
-    \r
-    /* Configure the pin connected to the ADC Pot as an input */\r
-    PORT4.PDR.BIT.B0 = 0;\r
-}
-
-/***********************************************************************************************************************\r
-* Function name: interrupts_configure\r
-* Description  : Configures interrupts used\r
-* Arguments    : none\r
-* Return value : none\r
-***********************************************************************************************************************/\r
-void interrupts_configure(void)
-{\r
-    /* Add code here to setup additional interrupts */\r
-}
-
-/***********************************************************************************************************************\r
-* Function name: peripheral_modules_enable\r
-* Description  : Enables and configures peripheral devices on the MCU\r
-* Arguments    : none\r
-* Return value : none\r
-***********************************************************************************************************************/\r
-void peripheral_modules_enable(void)
-{
-    /* Add code here to enable peripherals used by the application */
-}
diff --git a/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/Renesas-Files/board/rskrx63n/hwsetup.h b/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/Renesas-Files/board/rskrx63n/hwsetup.h
deleted file mode 100644 (file)
index 35e0686..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-/***********************************************************************************************************************\r
-* DISCLAIMER\r
-* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No \r
-* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all \r
-* applicable laws, including copyright laws. \r
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING\r
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, \r
-* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM \r
-* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES \r
-* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS \r
-* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\r
-* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of \r
-* this software. By using this software, you agree to the additional terms and conditions found by accessing the \r
-* following link:\r
-* http://www.renesas.com/disclaimer \r
-*\r
-* Copyright (C) 2012 Renesas Electronics Corporation. All rights reserved.    \r
-***********************************************************************************************************************/\r
-/***********************************************************************************************************************\r
-* File Name       : hwsetup.h\r
-* Description  : Hardware setup header file.\r
-***********************************************************************************************************************/\r
-/***********************************************************************************************************************\r
-* History : DD.MM.YYYY Version  Description\r
-*         : 26.10.2011 1.00     First Release\r
-***********************************************************************************************************************/\r
-
-/***********************************************************************************************************************\r
-Macro definitions\r
-***********************************************************************************************************************/\r
-/* Multiple inclusion prevention macro */
-#ifndef HWSETUP_H
-#define HWSETUP_H
-
-/***********************************************************************************************************************\r
-Exported global functions (to be accessed by other files)\r
-***********************************************************************************************************************/\r
-/* Hardware setup funtion declaration */
-void hardware_setup(void);
-
-/* End of multiple inclusion prevention macro */
-#endif
\ No newline at end of file
diff --git a/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/Renesas-Files/board/rskrx63n/lowlvl.src b/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/Renesas-Files/board/rskrx63n/lowlvl.src
deleted file mode 100644 (file)
index a75845e..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-;-----------------------------------------------------------------------\r
-;\r
-; FILE :lowlvl.src\r
-; DATE :Wed, Jul 01, 2009\r
-; DESCRIPTION :Program of Low level\r
-; CPU TYPE :RX\r
-;\r
-;-----------------------------------------------------------------------\r
-                .GLB    _charput\r
-                .GLB    _charget\r
-\r
-FC2E0           .EQU    00084080h\r
-FE2C0           .EQU    00084090h\r
-DBGSTAT         .EQU    000840C0h\r
-RXFL0EN         .EQU    00001000h\r
-TXFL0EN         .EQU    00000100h\r
-\r
-                .SECTION P,CODE\r
-\r
-;-----------------------------------------------------------------------\r
-; _charput:\r
-;-----------------------------------------------------------------------\r
-_charput:\r
-                .STACK  _charput = 00000000h\r
-__C2ESTART:     MOV.L   #TXFL0EN,R3\r
-                MOV.L   #DBGSTAT,R4\r
-__TXLOOP:       MOV.L   [R4],R5\r
-                AND     R3,R5\r
-                BNZ     __TXLOOP\r
-__WRITEFC2E0:   MOV.L   #FC2E0,R2\r
-                MOV.L   R1,[R2]\r
-__CHARPUTEXIT:  RTS\r
-\r
-;-----------------------------------------------------------------------\r
-; _charget:\r
-;-----------------------------------------------------------------------\r
-_charget:\r
-                .STACK  _charget = 00000000h\r
-__E2CSTART:     MOV.L   #RXFL0EN,R3\r
-                MOV.L   #DBGSTAT,R4\r
-__RXLOOP:       MOV.L   [R4],R5\r
-                AND     R3,R5\r
-                BZ      __RXLOOP\r
-__READFE2C0:    MOV.L   #FE2C0,R2\r
-                MOV.L   [R2],R1\r
-__CHARGETEXIT:  RTS\r
-\r
-;-----------------------------------------------------------------------\r
-\r
-; End of conditional code\r
-                .END\r
-\r
-\r
-\r
diff --git a/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/Renesas-Files/board/rskrx63n/lowsrc.c b/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/Renesas-Files/board/rskrx63n/lowsrc.c
deleted file mode 100644 (file)
index ad9f32c..0000000
+++ /dev/null
@@ -1,332 +0,0 @@
-/***********************************************************************************************************************\r
-* DISCLAIMER\r
-* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No \r
-* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all \r
-* applicable laws, including copyright laws. \r
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING\r
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, \r
-* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM \r
-* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES \r
-* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS \r
-* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\r
-* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of \r
-* this software. By using this software, you agree to the additional terms and conditions found by accessing the \r
-* following link:\r
-* http://www.renesas.com/disclaimer \r
-*\r
-* Copyright (C) 2012 Renesas Electronics Corporation. All rights reserved.    \r
-***********************************************************************************************************************/\r
-/***********************************************************************************************************************\r
-* File Name       : lowsrc.c\r
-* Description  : Functions to support stream I/O\r
-***********************************************************************************************************************/\r
-/***********************************************************************************************************************\r
-* History : DD.MM.YYYY Version  Description\r
-*         : 26.10.2011 1.00     First Release\r
-***********************************************************************************************************************/\r
-/***********************************************************************************************************************\r
-Includes   <System Includes> , "Project Includes"\r
-***********************************************************************************************************************/\r
-#include <string.h>\r
-#include <stdio.h>\r
-#include <stddef.h>\r
-\r
-/***********************************************************************************************************************\r
-Macro definitions\r
-***********************************************************************************************************************/\r
-/*Number of I/O Stream*/
-#define IOSTREAM 20
-
-/* file number */\r
-#define STDIN  0                    /* Standard input (console)        */\r
-#define STDOUT 1                    /* Standard output (console)       */\r
-#define STDERR 2                    /* Standard error output (console) */\r
-\r
-#define FLMIN  0                    /* Minimum file number     */\r
-#define _MOPENR        0x1\r
-#define _MOPENW        0x2\r
-#define _MOPENA        0x4\r
-#define _MTRUNC        0x8\r
-#define _MCREAT        0x10\r
-#define _MBIN  0x20\r
-#define _MEXCL 0x40\r
-#define _MALBUF        0x40\r
-#define _MALFIL        0x80\r
-#define _MEOF  0x100\r
-#define _MERR  0x200\r
-#define _MLBF  0x400\r
-#define _MNBF  0x800\r
-#define _MREAD 0x1000\r
-#define _MWRITE        0x2000\r
-#define _MBYTE 0x4000\r
-#define _MWIDE 0x8000\r
-/* File Flags */\r
-#define O_RDONLY 0x0001 /* Read only                                       */\r
-#define O_WRONLY 0x0002 /* Write only                                      */\r
-#define O_RDWR   0x0004 /* Both read and Write                             */\r
-#define O_CREAT  0x0008 /* A file is created if it is not existed          */\r
-#define O_TRUNC  0x0010 /* The file size is changed to 0 if it is existed. */\r
-#define O_APPEND 0x0020 /* The position is set for next reading/writing    */\r
-                        /* 0: Top of the file 1: End of file               */\r
-\r
-/* Special character code */\r
-#define CR 0x0d                     /* Carriage return */\r
-#define LF 0x0a                     /* Line feed       */\r
-\r
-#if defined( __RX )\r
-const long _nfiles = IOSTREAM; /* The number of files for input/output files */\r
-#else\r
-const int _nfiles = IOSTREAM;  /* The number of files for input/output files */\r
-#endif\r
-char flmod[IOSTREAM];          /* The location for the mode of opened file.  */\r
-\r
-unsigned char sml_buf[IOSTREAM];\r
-\r
-#define FPATH_STDIN     "C:\\stdin"\r
-#define FPATH_STDOUT    "C:\\stdout"\r
-#define FPATH_STDERR    "C:\\stderr"\r
-\r
-/* H8 Normal mode ,SH and RX */\r
-#if defined( __2000N__ ) || defined( __2600N__ ) || defined( __300HN__ ) || defined( _SH )\r
-/* Output one character to standard output */\r
-extern void charput(char);\r
-/* Input one character from standard input */\r
-extern char charget(void);\r
-/* Output one character to the file        */\r
-extern char fcharput(char, unsigned char);\r
-/* Input one character from the file       */\r
-extern char fcharget(char*, unsigned char);\r
-/* Open the file */\r
-extern char fileopen(char*, unsigned char, unsigned char*);\r
-/* Close the file */\r
-extern char fileclose(unsigned char);\r
-/* Move the file offset */\r
-extern char fpseek(unsigned char, long, unsigned char);\r
-/* Get the file offset */\r
-extern char fptell(unsigned char, long*);\r
-\r
-/* RX */\r
-#elif defined( __RX )\r
-/* Output one character to standard output */\r
-extern void charput(unsigned char);\r
-/* Input one character from standard input */\r
-extern unsigned char charget(void);\r
-\r
-/* H8 Advanced mode */\r
-#elif defined( __2000A__ ) || defined( __2600A__ ) || defined( __300HA__ ) || defined( __H8SXN__ ) || defined( __H8SXA__ ) || defined( __H8SXM__ ) || defined( __H8SXX__ )\r
-/* Output one character to standard output */\r
-extern void charput(char);\r
-/* Input one character from standard input */\r
-extern char charget(void);\r
-/* Output one character to the file        */\r
-extern char fcharput(char, unsigned char);\r
-/* Input one character from the file       */\r
-extern char fcharget(char*, unsigned char);\r
-/* Open the file */\r
-/* Specified as the number of register which stored paramter is 3 */\r
-extern char __regparam3 fileopen(char*, unsigned char, unsigned char*);\r
-/* Close the file */\r
-extern char fileclose(unsigned char);\r
-/* Move the file offset */\r
-extern char fpseek(unsigned char, long, unsigned char);\r
-/* Get the file offset */\r
-extern char fptell(unsigned char, long*);\r
-\r
-/* H8300 and H8300L */\r
-#elif defined( __300__ ) || defined( __300L__ )\r
-/* Output one character to standard output */\r
-extern void charput(char);\r
-/* Input one character from standard input */\r
-extern char charget(void);\r
-/* Output one character to the file        */\r
-extern char fcharput(char, unsigned char);\r
-/* Input one character from the file       */\r
-extern char fcharget(char*, unsigned char);\r
-/* Open the file */\r
-/* Specified as the number of register which stored paramter is 3 */\r
-extern char __regparam3 fileopen(char*, unsigned char, unsigned char*);\r
-/* Close the file */\r
-extern char fileclose(unsigned char);\r
-/* Move the file offset */\r
-/* Move the file offset */\r
-extern char __regparam3 fpseek(unsigned char, long, unsigned char);\r
-/* Get the file offset */\r
-extern char fptell(unsigned char, long*);\r
-#endif\r
-\r
-#include <stdio.h>\r
-FILE *_Files[IOSTREAM]; // structure for FILE\r
-char *env_list[] = {            // Array for environment variables(**environ)\r
-    "ENV1=temp01",\r
-    "ENV2=temp02",\r
-    "ENV9=end",\r
-    '\0'                        // Terminal for environment variables\r
-};\r
-\r
-char **environ = env_list;\r
-\r
-/****************************************************************************/\r
-/* _INIT_IOLIB                                                              */\r
-/*  Initialize C library Functions, if necessary.                           */\r
-/*  Define USES_SIMIO on Assembler Option.                                  */\r
-/****************************************************************************/\r
-void _INIT_IOLIB( void )\r
-{\r
-    /* A file for standard input/output is opened or created. Each FILE     */\r
-    /* structure members are initialized by the library. Each _Buf member   */\r
-    /* in it is re-set the end of buffer pointer.                           */\r
-\r
-    /* Standard Input File                                                  */\r
-    if( freopen( FPATH_STDIN, "r", stdin ) == NULL )\r
-        stdin->_Mode = 0xffff;  /* Not allow the access if it fails to open */\r
-    stdin->_Mode  = _MOPENR;            /* Read only attribute              */\r
-    stdin->_Mode |= _MNBF;              /* Non-buffering for data           */\r
-    stdin->_Bend = stdin->_Buf + 1;  /* Re-set pointer to the end of buffer */\r
-\r
-    /* Standard Output File                                                 */\r
-    if( freopen( FPATH_STDOUT, "w", stdout ) == NULL ) \r
-        stdout->_Mode = 0xffff; /* Not allow the access if it fails to open */\r
-    stdout->_Mode |= _MNBF;             /* Non-buffering for data           */\r
-    stdout->_Bend = stdout->_Buf + 1;/* Re-set pointer to the end of buffer */\r
-    \r
-    /* Standard Error File                                                  */\r
-    if( freopen( FPATH_STDERR, "w", stderr ) == NULL )\r
-        stderr->_Mode = 0xffff; /* Not allow the access if it fails to open */\r
-    stderr->_Mode |= _MNBF;             /* Non-buffering for data           */\r
-    stderr->_Bend = stderr->_Buf + 1;/* Re-set pointer to the end of buffer */\r
-}\r
-\r
-/****************************************************************************/\r
-/* _CLOSEALL                                                                */\r
-/****************************************************************************/\r
-void _CLOSEALL( void )\r
-{\r
-    long i;\r
-\r
-    for( i=0; i < _nfiles; i++ )\r
-    {\r
-        /* Checks if the file is opened or not                               */\r
-        if( _Files[i]->_Mode & (_MOPENR | _MOPENW | _MOPENA ) )\r
-        fclose( _Files[i] );    /* Closes the file                           */\r
-    }\r
-}\r
-\r
-/**************************************************************************/\r
-/*       open:file open                                                   */\r
-/*          Return value:File number (Pass)                               */\r
-/*                       -1          (Failure)                            */\r
-/**************************************************************************/\r
-#if defined( __RX )\r
-long open(const char *name,                  /* File name                 */\r
-     long  mode,                             /* Open mode                 */\r
-     long  flg)                              /* Open flag                 */\r
-#else\r
-int open(char *name,                         /* File name                 */\r
-     int  mode,                              /* Open mode                 */\r
-     int  flg)                               /* Open flag                 */\r
-#endif\r
-{\r
-\r
-\r
-    if( strcmp( name, FPATH_STDIN ) == 0 )      /* Standard Input file?   */\r
-    {\r
-        if( ( mode & O_RDONLY ) == 0 ) return -1;\r
-        flmod[STDIN] = mode;\r
-        return STDIN;\r
-    }\r
-    else if( strcmp( name, FPATH_STDOUT ) == 0 )/* Standard Output file?  */\r
-    {\r
-        if( ( mode & O_WRONLY ) == 0 ) return -1;\r
-        flmod[STDOUT] = mode;\r
-        return STDOUT;\r
-    }\r
-    else if(strcmp(name, FPATH_STDERR ) == 0 )  /* Standard Error file?   */\r
-    {\r
-        if( ( mode & O_WRONLY ) == 0 ) return -1;\r
-        flmod[STDERR] = mode;\r
-        return STDERR;\r
-    }\r
-    else return -1;                             /*Others                  */\r
-}\r
-\r
-#if defined( __RX )\r
-long close( long fileno )\r
-#else\r
-int close( int fileno )\r
-#endif\r
-{\r
-    return 1;\r
-}\r
-\r
-/**************************************************************************/\r
-/* write:Data write                                                       */\r
-/*  Return value:Number of write characters (Pass)                        */\r
-/*               -1                         (Failure)                     */\r
-/**************************************************************************/\r
-#if defined( __RX )\r
-long write(long  fileno,             /* File number                       */\r
-      const unsigned char *buf,       /* The address of destination buffer */\r
-      long  count)                   /* The number of chacter to write    */\r
-#else\r
-int write(int  fileno,               /* File number                       */\r
-      char *buf,                     /* The address of destination buffer */\r
-      int  count)                    /* The number of chacter to write    */\r
-#endif\r
-{\r
-    long    i;                          /* A variable for counter         */\r
-    unsigned char    c;                 /* An output character            */\r
-\r
-    /* Checking the mode of file , output each character                  */\r
-    /* Checking the attribute for Write-Only, Read-Only or Read-Write     */\r
-    if(flmod[fileno]&O_WRONLY || flmod[fileno]&O_RDWR)\r
-    {\r
-        if( fileno == STDIN ) return -1;            /* Standard Input     */\r
-        else if( (fileno == STDOUT) || (fileno == STDERR) ) \r
-                                                           /* Standard Error/output   */\r
-        {\r
-            for( i = count; i > 0; --i )\r
-            {\r
-                c = *buf++;\r
-                charput(c);\r
-            }\r
-            return count;        /*Return the number of written characters */\r
-        }\r
-        else return -1;                  /* Incorrect file number          */\r
-    }\r
-    else return -1;                      /* An error                       */\r
-}\r
-\r
-#if defined( __RX )\r
-long read( long fileno, unsigned char *buf, long count )\r
-#else\r
-int read( int fileno, char *buf, unsigned int count )\r
-#endif\r
-{\r
-          long i;\r
-\r
-       /* Checking the file mode with the file number, each character is input and stored the buffer */\r
-\r
-       if((flmod[fileno]&_MOPENR) || (flmod[fileno]&O_RDWR)){\r
-             for(i = count; i > 0; i--){\r
-                   *buf = charget();\r
-                   if(*buf==CR){              /* Replace the new line character */\r
-                         *buf = LF;\r
-                   }\r
-                   buf++;\r
-             }\r
-             return count;\r
-       }\r
-       else {\r
-             return -1;\r
-       }\r
-}\r
-\r
-#if defined( __RX )\r
-long lseek( long fileno, long offset, long base )\r
-#else\r
-long lseek( int fileno, long offset, int base )\r
-#endif\r
-{\r
-    return -1L;\r
-}\r
-\r
diff --git a/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/Renesas-Files/board/rskrx63n/mcu_info.h b/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/Renesas-Files/board/rskrx63n/mcu_info.h
deleted file mode 100644 (file)
index bf33ebc..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-/***********************************************************************************************************************\r
-* DISCLAIMER\r
-* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No \r
-* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all \r
-* applicable laws, including copyright laws. \r
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING\r
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, \r
-* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM \r
-* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES \r
-* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS \r
-* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\r
-* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of \r
-* this software. By using this software, you agree to the additional terms and conditions found by accessing the \r
-* following link:\r
-* http://www.renesas.com/disclaimer \r
-*\r
-* Copyright (C) 2012 Renesas Electronics Corporation. All rights reserved.    \r
-***********************************************************************************************************************/\r
-/***********************************************************************************************************************\r
-* File Name       : mcu_info.h\r
-* Device(s)    : RX\r
-* H/W Platform : RSK+RX63N\r
-* Description  : Information about the MCU on this board.\r
-***********************************************************************************************************************/\r
-/***********************************************************************************************************************\r
-* History : DD.MM.YYYY Version  Description\r
-*         : 28.11.2011 1.00     First Release\r
-*         : 13.03.2012 1.10     System clock speeds are now calculated from macros in r_bsp_config.h. \r
-***********************************************************************************************************************/\r
-\r
-#ifndef _MCU_INFO\r
-#define _MCU_INFO\r
-\r
-/* MCU that is used. */\r
-#define MCU_RX63N           (1)\r
-\r
-/* Package. */\r
-#define PACKAGE_LQFP176     (1)\r
-\r
-/* Memory size of your MCU. */\r
-#define ROM_SIZE_BYTES      (1048576)\r
-#define RAM_SIZE_BYTES      (131072)\r
-#define DF_SIZE_BYTES       (32768)\r
-\r
-/* System clock speed in Hz. */\r
-#define ICLK_HZ             (((XTAL_HZ/PLL_DIV) * PLL_MUL) / ICK_DIV)\r
-/* Peripheral Module Clock A speed in Hz. Used for ETHERC and EDMAC. */\r
-#define PCLKA_HZ            (((XTAL_HZ/PLL_DIV) * PLL_MUL) / PCKA_DIV)\r
-/* Peripheral Module Clock B speed in Hz. */\r
-#define PCLKB_HZ            (((XTAL_HZ/PLL_DIV) * PLL_MUL) / PCKB_DIV)\r
-/* External bus clock speed in Hz. */\r
-#define BCLK_HZ             (((XTAL_HZ/PLL_DIV) * PLL_MUL) / BCK_DIV)\r
-/* FlashIF clock speed in Hz. */\r
-#define FCLK_HZ             (((XTAL_HZ/PLL_DIV) * PLL_MUL) / FCK_DIV)\r
-/* USB clock speed in Hz. */\r
-#define UCLK_HZ             (((XTAL_HZ/PLL_DIV) * PLL_MUL) / UCK_DIV) \r
-\r
-#endif /* _MCU_INFO */\r
-\r
diff --git a/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/Renesas-Files/board/rskrx63n/r_bsp.h b/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/Renesas-Files/board/rskrx63n/r_bsp.h
deleted file mode 100644 (file)
index dbb95f4..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-/***********************************************************************************************************************\r
-* DISCLAIMER\r
-* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No \r
-* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all \r
-* applicable laws, including copyright laws. \r
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING\r
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, \r
-* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM \r
-* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES \r
-* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS \r
-* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\r
-* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of \r
-* this software. By using this software, you agree to the additional terms and conditions found by accessing the \r
-* following link:\r
-* http://www.renesas.com/disclaimer \r
-*\r
-* Copyright (C) 2012 Renesas Electronics Corporation. All rights reserved.    \r
-***********************************************************************************************************************/\r
-/***********************************************************************************************************************\r
-* File Name       : r_bsp.h\r
-* H/W Platform : RSK+RX63N\r
-* Description  : Has the header files that should be included for this platform.\r
-***********************************************************************************************************************/\r
-/***********************************************************************************************************************\r
-* History : DD.MM.YYYY Version  Description\r
-*         : 13.01.2012 1.00     First Release\r
-*         : 13.03.2012 1.10     Added locking.h and r_bsp_config.h #includes. Removed sbrk.h since heap size is not\r
-*                               defined in r_bsp_config.h.\r
-***********************************************************************************************************************/\r
-\r
-#ifndef PLATFORM_BOARD_RSKRX63N\r
-#define PLATFORM_BOARD_RSKRX63N\r
-\r
-/* Make sure that no other platforms have already been defined. Do not touch this! */\r
-#ifdef  PLATFORM_DEFINED\r
-#error  "Error - Multiple platforms defined in platform.h!"\r
-#else\r
-#define PLATFORM_DEFINED\r
-#endif\r
-\r
-/***********************************************************************************************************************\r
-INCLUDE APPROPRIATE MCU AND BOARD FILES\r
-***********************************************************************************************************************/\r
-#include    "r_bsp_config.h"\r
-#include    ".\mcu\rx63n\iodefine.h"\r
-#include    ".\board\rskrx63n\rskrx63n.h"\r
-#include    ".\board\rskrx63n\mcu_info.h"\r
-#include    ".\board\rskrx63n\hwsetup.h"\r
-/*#include    ".\board\rskrx63n\lcd.h" Not currently used. */\r
-/* #include    ".\board\rskrx63n\locking.h" Not currently used. */\r
-\r
-#endif /* PLATFORM_BOARD_RSKRX63N */\r
-\r
-\r
diff --git a/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/Renesas-Files/board/rskrx63n/r_bsp_config_reference.h b/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/Renesas-Files/board/rskrx63n/r_bsp_config_reference.h
deleted file mode 100644 (file)
index 0b00618..0000000
+++ /dev/null
@@ -1,149 +0,0 @@
-/***********************************************************************************************************************\r
-* DISCLAIMER\r
-* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No \r
-* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all \r
-* applicable laws, including copyright laws. \r
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING\r
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, \r
-* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM \r
-* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES \r
-* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS \r
-* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\r
-* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of \r
-* this software. By using this software, you agree to the additional terms and conditions found by accessing the \r
-* following link:\r
-* http://www.renesas.com/disclaimer \r
-*\r
-* Copyright (C) 2012 Renesas Electronics Corporation. All rights reserved.    \r
-***********************************************************************************************************************/\r
-/***********************************************************************************************************************\r
-* File Name    : r_bsp_config_reference.c\r
-* Device(s)    : RX63x\r
-* Description  : The file r_bsp_config.h is used to configure your BSP. r_bsp_config.h should be included\r
-*                somewhere in your package so that the r_bsp code has access to it. This file (r_bsp_config_reference.h)\r
-*                is just a reference file that the user can use to make their own r_bsp_config.h file.\r
-************************************************************************************************************************\r
-* History : DD.MM.YYYY Version Description           \r
-*         : 13.03.2012 1.00    First Release            \r
-***********************************************************************************************************************/\r
-#ifndef R_BSP_CONFIG_REF_HEADER_FILE\r
-#define R_BSP_CONFIG_REF_HEADER_FILE\r
-\r
-/***********************************************************************************************************************\r
-Configuration Options\r
-***********************************************************************************************************************/\r
-/* The 'BSP_DECLARE_STACK' macro is checked so that the stack is only declared in one place (resetprg.c). Every time a \r
-   '#pragma stacksize' is encountered, the stack size is increased. This prevents multiplication of stack size. */\r
-#if defined(BSP_DECLARE_STACK)\r
-/* User Stack size in bytes. The Renesas RX toolchain sets the stack size using the #pragma stacksize directive. */\r
-#pragma stacksize su=0x1000\r
-/* Interrupt Stack size in bytes. The Renesas RX toolchain sets the stack size using the #pragma stacksize directive. */\r
-#pragma stacksize si=0x400\r
-#endif\r
-\r
-/* Heap size in bytes. */\r
-#define HEAP_BYTES              (0x400)\r
-\r
-/* After reset MCU will operate in Supervisor mode. To switch to User mode, set this macro to '1'. For more information\r
-   on the differences between these 2 modes see the CPU >> Processor Mode section of your MCU's hardware manual.\r
-   0 = Stay in Supervisor mode.\r
-   1 = Switch to User mode.\r
-*/\r
-#define RUN_IN_USER_MODE        (0)\r
-\r
-/* To get into User Boot Mode the user must control some pins on the MCU and also set some values in ROM. These values\r
-   in ROM are described in the Option-Setting Memory section of the hardware manual. This macro sets these values so \r
-   that User Boot Mode can be used. The user is still responsible for setting the MCU pins appropriately.\r
-   0 = Single-Chip or USB Boot Mode\r
-   1 = User Boot Mode\r
-*/\r
-#define USER_BOOT_ENABLE        (0)\r
-\r
-/* Set your desired ID code. NOTE, leave at the default (all 0xFF's) if you do not wish to use an ID code. If you set \r
-   this value and program it into the MCU then you will need to remember the ID code because the debugger will ask for \r
-   it when trying to connect. Note that the E1/E20 will ignore the ID code when programming the MCU during debugging.\r
-   If you set this value and then forget it then you can clear the ID code by connecting up in serial boot mode using \r
-   FDT. The ID Code is 16 bytes long. The macro below define the ID Code in 4-byte sections. */\r
-/* Lowest 4-byte section, address 0xFFFFFFA0. From MSB to LSB: Control Code, ID code 1, ID code 2, ID code 3. */\r
-#define ID_CODE_LONG_1          (0xFFFFFFFF)\r
-/* 2nd ID Code section, address 0xFFFFFFA4. From MSB to LSB: ID code 4, ID code 5, ID code 6, ID code 7. */\r
-#define ID_CODE_LONG_2          (0xFFFFFFFF)\r
-/* 3rd ID Code section, address 0xFFFFFFA8. From MSB to LSB: ID code 8, ID code 9, ID code 10, ID code 11. */\r
-#define ID_CODE_LONG_3          (0xFFFFFFFF)\r
-/* 4th ID Code section, address 0xFFFFFFAC. From MSB to LSB: ID code 12, ID code 13, ID code 14, ID code 15. */\r
-#define ID_CODE_LONG_4          (0xFFFFFFFF)\r
-\r
-/* This macro lets other modules no if a RTOS is being used.\r
-   0 = RTOS is not used. \r
-   1 = RTOS is used.\r
-*/\r
-#define RTOS_USED               (0)\r
-\r
-/* Clock source select (CKSEL).\r
-   0 = Low Speed On-Chip Oscillator  (LOCO)\r
-   1 = High Speed On-Chip Oscillator (HOCO)\r
-   2 = Main Clock Oscillator  \r
-   3 = Sub-Clock Oscillator\r
-   4 = PLL Circuit\r
-*/ \r
-#define CLOCK_SOURCE            (4)\r
-\r
-/* Clock configuration options.\r
-   The input clock frequency is specified and then the system clocks are set by specifying the multipliers used. The\r
-   multiplier settings are used to set the clock registers in resetprg.c. If a 12MHz clock is used and the \r
-   ICLK is 96MHz, PCLKA is 48MHz, PCLKB is 48MHz, FCLK is 48MHz, USB Clock is 48MHz, and BCLK is 12MHz then the \r
-   settings would be:\r
-\r
-   XTAL_HZ = 12000000\r
-   PLL_DIV = 1  (no division)\r
-   PLL_MUL = 16 (12MHz x 16 = 192MHz)\r
-   ICK_DIV =  2      : System Clock (ICLK)        = (((XTAL_HZ/PLL_DIV) * PLL_MUL) / ICK_DIV)  = 96MHz\r
-   PCKA_DIV = 4      : Peripheral Clock A (PCLKA) = (((XTAL_HZ/PLL_DIV) * PLL_MUL) / PCKA_DIV) = 48MHz\r
-   PCKB_DIV = 4      : Peripheral Clock B (PCLKB) = (((XTAL_HZ/PLL_DIV) * PLL_MUL) / PCKB_DIV) = 48MHz\r
-   FCK_DIV =  4      : Flash IF Clock (FCLK)      = (((XTAL_HZ/PLL_DIV) * PLL_MUL) / FCK_DIV)  = 48MHz\r
-   BCK_DIV =  8      : External Bus Clock (BCK)   = (((XTAL_HZ/PLL_DIV) * PLL_MUL) / BCK_DIV)  = 24MHz\r
-   UCK_DIV =  4      : USB Clock (UCLK)           = (((XTAL_HZ/PLL_DIV) * PLL_MUL) / UCK_DIV)  = 48MHz\r
-*/\r
-/* XTAL - Input clock frequency in Hz */\r
-#define XTAL_HZ                 (12000000)\r
-/* PLL Input Frequency Divider Select (PLIDIV). \r
-   Available divisors = /1 (no division), /2, /4\r
-*/\r
-#define PLL_DIV                 (1)\r
-/* PLL Frequency Multiplication Factor Select (STC). \r
-   Available multipliers = x8, x10, x12, x16, x20, x24, x25, x50\r
-*/\r
-#define PLL_MUL                 (16)\r
-/* System Clock Divider (ICK).\r
-   Available divisors = /1 (no division), /2, /4, /8, /16, /32, /64\r
-*/\r
-#define ICK_DIV                 (2)\r
-/* Peripheral Module Clock A Divider (PCKA). \r
-   Available divisors = /1 (no division), /2, /4, /8, /16, /32, /64\r
-*/\r
-#define PCKA_DIV                (4)\r
-/* Peripheral Module Clock B Divider (PCKB). \r
-   Available divisors = /1 (no division), /2, /4, /8, /16, /32, /64\r
-*/\r
-#define PCKB_DIV                (4)\r
-/* External Bus Clock Divider (BCK). \r
-   Available divisors = /1 (no division), /2, /4, /8, /16, /32, /64\r
-*/\r
-#define BCK_DIV                 (8)\r
-/* Flash IF Clock Divider (FCK). \r
-   Available divisors = /1 (no division), /2, /4, /8, /16, /32, /64\r
-*/\r
-#define FCK_DIV                 (4)\r
-/* IEBUS Clock Divider Select. \r
-   Available divisors = /1 (no division), /2, /4, /6, /8, /16, /32, /64\r
-*/\r
-#define IEBCK_DIV               (8)\r
-/* USB Clock Divider Select. \r
-   Available divisors = /3, /4\r
-*/\r
-#define UCK_DIV                 (4)\r
-\r
-#endif /* R_BSP_CONFIG_REF_HEADER_FILE */\r
-\r
-\r
-\r
diff --git a/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/Renesas-Files/board/rskrx63n/resetprg.c b/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/Renesas-Files/board/rskrx63n/resetprg.c
deleted file mode 100644 (file)
index a8d08b9..0000000
+++ /dev/null
@@ -1,409 +0,0 @@
-/***********************************************************************************************************************\r
-* DISCLAIMER\r
-* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No \r
-* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all \r
-* applicable laws, including copyright laws. \r
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING\r
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, \r
-* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM \r
-* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES \r
-* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS \r
-* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\r
-* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of \r
-* this software. By using this software, you agree to the additional terms and conditions found by accessing the \r
-* following link:\r
-* http://www.renesas.com/disclaimer \r
-*\r
-* Copyright (C) 2012 Renesas Electronics Corporation. All rights reserved.    \r
-***********************************************************************************************************************/\r
-/***********************************************************************************************************************\r
-* File Name       : resetprg.c\r
-* Device(s)    : RX63x\r
-* Description  : Defines post-reset routines that are used to configure the MCU prior to the main program starting. \r
-*                This is were the program counter starts on power-up or reset.\r
-***********************************************************************************************************************/\r
-/***********************************************************************************************************************\r
-* History : DD.MM.YYYY Version  Description\r
-*         : 26.10.2011 1.00     First Release\r
-*         : 13.03.2012 1.10     Stack sizes are now defined in r_bsp_config.h. Because of this the #include for \r
-*                               stacksct.h was removed. Settings for SCKCR are now set in r_bsp_config.h and used here\r
-*                               to setup clocks based on user settings.\r
-***********************************************************************************************************************/\r
-\r
-/***********************************************************************************************************************\r
-Includes   <System Includes> , "Project Includes"\r
-***********************************************************************************************************************/
-/* Defines machine level functions used in this file */
-#include    <machine.h>
-/* Defines MCU configuration functions used in this file */
-#include    <_h_c_lib.h>
-/* Defines standard variable types used in this file */
-#include    <stdbool.h>
-#include    <stdint.h>\r
-\r
-/* This macro is here so that the stack will be declared here. This is used to prevent multiplication of stack size. */\r
-#define     BSP_DECLARE_STACK\r
-/* Define the target platform */\r
-#include    "platform.h"\r
-\r
-/***********************************************************************************************************************\r
-Macro definitions\r
-***********************************************************************************************************************/
-#define PSW_init  (0x00030000)
-#define FPSW_init (0x00000100)
-
-/***********************************************************************************************************************
-Pre-processor Directives
-***********************************************************************************************************************/
-/* Declare the contents of the function 'Change_PSW_PM_to_UserMode' as
-   assembler to the compiler */
-#pragma inline_asm Change_PSW_PM_to_UserMode
-\r
-/* Set this as the entry point from a power-on reset */
-#pragma entry PowerON_Reset_PC\r
-\r
-/***********************************************************************************************************************
-External function Prototypes
-***********************************************************************************************************************/
-/* Functions to setup I/O library */
-extern void _INIT_IOLIB(void);\r
-extern void _CLOSEALL(void);\r
-
-/***********************************************************************************************************************\r
-Private global variables and functions\r
-***********************************************************************************************************************/
-/* Power-on reset function declaration */
-void PowerON_Reset_PC(void);\r
-\r
-#if RUN_IN_USER_MODE==1\r
-    #if __RENESAS_VERSION__ < 0x01010000\r
-    /* MCU usermode switcher function declaration */
-    static void Change_PSW_PM_to_UserMode(void);\r
-    #endif
-#endif\r
-
-/* Main program function delcaration */
-void main(void);
-static void operating_frequency_set(void);
-\r
-/***********************************************************************************************************************\r
-* Function name: PowerON_Reset_PC\r
-* Description  : This function is the MCU's entry point from a power-on reset.\r
-*                The following steps are taken in the startup code:\r
-*                1. The User Stack Pointer (USP) and Interrupt Stack Pointer (ISP) are both set immediately after entry \r
-*                   to this function. The USP and ISP stack sizes are set in the file stacksct.h.\r
-*                   Default sizes are USP=4K and ISP=1K.\r
-*                2. The interrupt vector base register is set to point to the beginning of the relocatable interrupt \r
-*                   vector table.\r
-*                3. The MCU is setup for floating point operations by setting the initial value of the Floating Point \r
-*                   Status Word (FPSW).\r
-*                4. The MCU operating frequency is set by configuring the Clock Generation Circuit (CGC) in\r
-*                   operating_frequency_set.\r
-*                5. Calls are made to functions to setup the C runtime environment which involves initializing all \r
-*                   initialed data, zeroing all uninitialized variables, and configuring STDIO if used\r
-*                   (calls to _INITSCT and _INIT_IOLIB).\r
-*                6. Board-specific hardware setup, including configuring I/O pins on the MCU, in hardware_setup.\r
-*                7. Global interrupts are enabled by setting the I bit in the Program Status Word (PSW), and the stack \r
-*                   is switched from the ISP to the USP.  The initial Interrupt Priority Level is set to zero, enabling \r
-*                   any interrupts with a priority greater than zero to be serviced.\r
-*                8. The processor is optionally switched to user mode.  To run in user mode, set the macro \r
-*                   RUN_IN_USER_MODE above to a 1.\r
-*                9. The bus error interrupt is enabled to catch any accesses to invalid or reserved areas of memory.\r
-*\r
-*                Once this initialization is complete, the user's main() function is called.  It should not return.\r
-* Arguments    : none\r
-* Return value : none\r
-***********************************************************************************************************************/\r
-void PowerON_Reset_PC(void)
-{\r
-    /* Stack pointers are setup prior to calling this function - see comments above */    \r
-    
-    /* Initialise the MCU processor word */
-#if __RENESAS_VERSION__ >= 0x01010000    
-    set_intb((void *)__sectop("C$VECT"));
-#else
-    set_intb((unsigned long)__sectop("C$VECT"));
-#endif    \r
-\r
-    /* Initialize FPSW for floating-point operations */\r
-#ifdef __ROZ\r
-#define _ROUND 0x00000001  /* Let FPSW RMbits=01 (round to zero) */\r
-#else \r
-#define _ROUND 0x00000000  /* Let FPSW RMbits=00 (round to nearest) */\r
-#endif \r
-#ifdef __DOFF \r
-#define _DENOM 0x00000100  /* Let FPSW DNbit=1 (denormal as zero) */\r
-#else \r
-#define _DENOM 0x00000000  /* Let FPSW DNbit=0 (denormal as is) */\r
-#endif 
-    set_fpsw(FPSW_init | _ROUND | _DENOM); \r
-    \r
-    /* Switch to high-speed operation */\r
-    operating_frequency_set();
-
-    /* Initialize C runtime environment */
-    _INITSCT();
-\r
-    /* Comment this out if not using I/O lib\r
-    _INIT_IOLIB(); */\r
-
-    /* Configure the MCU and YRDK hardware */
-    hardware_setup();
-
-    /* Change the MCU's usermode from supervisor to user */        
-    nop();
-    set_psw(PSW_init);      
-#if RUN_IN_USER_MODE==1\r
-    /* Use chg_pmusr() intrinsic if possible. */\r
-    #if __RENESAS_VERSION__ >= 0x01010000
-    chg_pmusr() ;\r
-    #else\r
-    Change_PSW_PM_to_UserMode();\r
-    #endif
-#endif\r
-\r
-\r
-    /* Enable the bus error interrupt to catch accesses to illegal/reserved areas of memory */\r
-    /* The ISR for this interrupt can be found in vecttbl.c in the function "bus_error_isr" */\r
-    /* Clear any pending interrupts */\r
-    IR(BSC,BUSERR) = 0;\r
-    /* Make this the highest priority interrupt (adjust as necessary for your application */\r
-    IPR(BSC,BUSERR) = 0x0F; \r
-    /* Enable the interrupt in the ICU*/\r
-    IEN(BSC,BUSERR) = 1; \r
-    /* Enable illegal address interrupt in the BSC */\r
-    BSC.BEREN.BIT.IGAEN = 1;\r
-\r
-    /* Call the main program function (should not return) */
-    main();\r
-    \r
-    /* Comment this out if not using I/O lib - cleans up open files */\r
-    _CLOSEALL();
-
-    while(1)\r
-    {\r
-        /* Infinite loop. Put a breakpoint here if you want to catch an exit of main(). */\r
-    }\r
-}\r
-\r
-/***********************************************************************************************************************\r
-* Function name: operating_frequency_set\r
-* Description  : Configures the clock settings for each of the device clocks\r
-* Arguments    : none\r
-* Return value : none\r
-***********************************************************************************************************************/\r
-void operating_frequency_set(void)
-{
-    /* Used for constructing value to write to SCKCR register. */\r
-    uint32_t temp_clock = 0;\r
-    
-    /* \r
-    Clock Description              Frequency\r
-    ----------------------------------------\r
-    Input Clock Frequency............  12 MHz\r
-    PLL frequency (x16).............. 192 MHz\r
-    Internal Clock Frequency.........  96 MHz    \r
-    Peripheral Clock Frequency.......  48 MHz\r
-    USB Clock Frequency..............  48 MHz\r
-    External Bus Clock Frequency.....  24 MHz */\r
-\r
-       volatile unsigned int i;\r
-\r
-    /* Protect off. */\r
-    SYSTEM.PRCR.WORD = 0xA50B;                 \r
-       \r
-    /* Uncomment if not using sub-clock */\r
-       //SYSTEM.SOSCCR.BYTE = 0x01;          /* stop sub-clock */\r
-    SYSTEM.SOSCCR.BYTE = 0x00;                 /* Enable sub-clock for RTC */\r
-\r
-    /* Wait 131,072 cycles * 12 MHz = 10.9 ms */\r
-    SYSTEM.MOSCWTCR.BYTE = 0x0D;               \r
-\r
-    /* PLL wait is 4,194,304 cycles (default) * 192 MHz (12 MHz * 16) = 20.1 ms*/\r
-    SYSTEM.PLLWTCR.BYTE = 0x0F;                        \r
-\r
-    /* Set PLL Input Divisor. */\r
-    SYSTEM.PLLCR.BIT.PLIDIV = PLL_DIV >> 1;\r
-\r
-    /* Set PLL Multiplier. */\r
-    SYSTEM.PLLCR.BIT.STC = PLL_MUL - 1;\r
-\r
-    /* EXTAL ON */\r
-    SYSTEM.MOSCCR.BYTE = 0x00;                 \r
-\r
-    /* PLL ON */\r
-    SYSTEM.PLLCR2.BYTE = 0x00;                 \r
-\r
-       for(i = 0;i< 0x168;i++)             \r
-    {\r
-        /* Wait over 12ms */\r
-        nop() ;\r
-       }\r
-\r
-    /* Figure out setting for FCK bits. */\r
-#if   FCK_DIV == 1\r
-    /* Do nothing since FCK bits should be 0. */\r
-#elif FCK_DIV == 2\r
-    temp_clock |= 0x10000000;\r
-#elif FCK_DIV == 4\r
-    temp_clock |= 0x20000000;\r
-#elif FCK_DIV == 8\r
-    temp_clock |= 0x30000000;\r
-#elif FCK_DIV == 16\r
-    temp_clock |= 0x40000000;\r
-#elif FCK_DIV == 32\r
-    temp_clock |= 0x50000000;\r
-#elif FCK_DIV == 64\r
-    temp_clock |= 0x60000000;\r
-#else\r
-    #error "Error! Invalid setting for FCK_DIV in r_bsp_config.h"\r
-#endif\r
-\r
-    /* Figure out setting for ICK bits. */\r
-#if   ICK_DIV == 1\r
-    /* Do nothing since ICK bits should be 0. */\r
-#elif ICK_DIV == 2\r
-    temp_clock |= 0x01000000;\r
-#elif ICK_DIV == 4\r
-    temp_clock |= 0x02000000;\r
-#elif ICK_DIV == 8\r
-    temp_clock |= 0x03000000;\r
-#elif ICK_DIV == 16\r
-    temp_clock |= 0x04000000;\r
-#elif ICK_DIV == 32\r
-    temp_clock |= 0x05000000;\r
-#elif ICK_DIV == 64\r
-    temp_clock |= 0x06000000;\r
-#else\r
-    #error "Error! Invalid setting for ICK_DIV in r_bsp_config.h"\r
-#endif\r
-\r
-    /* SDCLK Pin Output and BCLK Pin Output are disabled by default. */\r
-    temp_clock |= 0x00C00000;\r
-\r
-    /* Figure out setting for BCK bits. */\r
-#if   BCK_DIV == 1\r
-    /* Do nothing since BCK bits should be 0. */\r
-#elif BCK_DIV == 2\r
-    temp_clock |= 0x00010000;\r
-#elif BCK_DIV == 4\r
-    temp_clock |= 0x00020000;\r
-#elif BCK_DIV == 8\r
-    temp_clock |= 0x00030000;\r
-#elif BCK_DIV == 16\r
-    temp_clock |= 0x00040000;\r
-#elif BCK_DIV == 32\r
-    temp_clock |= 0x00050000;\r
-#elif BCK_DIV == 64\r
-    temp_clock |= 0x00060000;\r
-#else\r
-    #error "Error! Invalid setting for BCK_DIV in r_bsp_config.h"\r
-#endif\r
-\r
-    /* Figure out setting for PCKA bits. */\r
-#if   PCKA_DIV == 1\r
-    /* Do nothing since PCKA bits should be 0. */\r
-#elif PCKA_DIV == 2\r
-    temp_clock |= 0x00001000;\r
-#elif PCKA_DIV == 4\r
-    temp_clock |= 0x00002000;\r
-#elif PCKA_DIV == 8\r
-    temp_clock |= 0x00003000;\r
-#elif PCKA_DIV == 16\r
-    temp_clock |= 0x00004000;\r
-#elif PCKA_DIV == 32\r
-    temp_clock |= 0x00005000;\r
-#elif PCKA_DIV == 64\r
-    temp_clock |= 0x00006000;\r
-#else\r
-    #error "Error! Invalid setting for PCKA_DIV in r_bsp_config.h"\r
-#endif\r
-\r
-    /* Figure out setting for PCKB bits. */\r
-#if   PCKB_DIV == 1\r
-    /* Do nothing since PCKB bits should be 0. */\r
-#elif PCKB_DIV == 2\r
-    temp_clock |= 0x00000100;\r
-#elif PCKB_DIV == 4\r
-    temp_clock |= 0x00000200;\r
-#elif PCKB_DIV == 8\r
-    temp_clock |= 0x00000300;\r
-#elif PCKB_DIV == 16\r
-    temp_clock |= 0x00000400;\r
-#elif PCKB_DIV == 32\r
-    temp_clock |= 0x00000500;\r
-#elif PCKB_DIV == 64\r
-    temp_clock |= 0x00000600;\r
-#else\r
-    #error "Error! Invalid setting for PCKB_DIV in r_bsp_config.h"\r
-#endif\r
-\r
-    /* Bottom byte of SCKCR register must be set to 0x11 */\r
-    temp_clock |= 0x00000011;\r
-\r
-    /* Set SCKCR register. */\r
-    SYSTEM.SCKCR.LONG = temp_clock;\r
-    \r
-    /* Re-init temp_clock to use to set SCKCR2. */\r
-    temp_clock = 0;\r
-\r
-    /* Figure out setting for IEBCK bits. */\r
-#if   IEBCK_DIV == 2\r
-    temp_clock |= 0x00000001;\r
-#elif IEBCK_DIV == 4\r
-    temp_clock |= 0x00000002;\r
-#elif IEBCK_DIV == 6\r
-    temp_clock |= 0x0000000C;\r
-#elif IEBCK_DIV == 8\r
-    temp_clock |= 0x00000003;\r
-#elif IEBCK_DIV == 16\r
-    temp_clock |= 0x00000004;\r
-#elif IEBCK_DIV == 32\r
-    temp_clock |= 0x00000005;\r
-#elif IEBCK_DIV == 64\r
-    temp_clock |= 0x00000006;\r
-#else\r
-    #error "Error! Invalid setting for IEBCK_DIV in r_bsp_config.h"\r
-#endif\r
-\r
-    /* Figure out setting for UCK bits. */\r
-#if   UCK_DIV == 3\r
-    temp_clock |= 0x00000020;\r
-#elif UCK_DIV == 4\r
-    temp_clock |= 0x00000030;\r
-#else\r
-    #error "Error! Invalid setting for UCK_DIV in r_bsp_config.h"\r
-#endif\r
-\r
-    /* Set SCKCR2 register. */\r
-    SYSTEM.SCKCR2.WORD = (uint16_t)temp_clock;\r
-\r
-    /* Choose clock source. Default for r_bsp_config.h is PLL. */\r
-    SYSTEM.SCKCR3.WORD = ((uint16_t)CLOCK_SOURCE) << 8;\r
-\r
-    /* Protect on. */\r
-    SYSTEM.PRCR.WORD = 0xA500;                 
-}
-\r
-/***********************************************************************************************************************\r
-* Function name: Change_PSW_PM_to_UserMode\r
-* Description  : Assembler function, used to change the MCU's usermode from supervisor to user.\r
-* Arguments    : none\r
-* Return value : none\r
-***********************************************************************************************************************/\r
-#if RUN_IN_USER_MODE==1\r
-    #if __RENESAS_VERSION__ < 0x01010000
-static void Change_PSW_PM_to_UserMode(void)
-{
-    MVFC   PSW,R1
-    OR     #00100000h,R1
-    PUSH.L R1
-    MVFC   PC,R1
-    ADD    #10,R1
-    PUSH.L R1
-    RTE
-    NOP
-    NOP
-}\r
-    #endif
-#endif
\ No newline at end of file
diff --git a/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/Renesas-Files/board/rskrx63n/rskrx63n.h b/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/Renesas-Files/board/rskrx63n/rskrx63n.h
deleted file mode 100644 (file)
index 6699734..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-/***********************************************************************************************************************\r
-* DISCLAIMER\r
-* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No \r
-* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all \r
-* applicable laws, including copyright laws. \r
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING\r
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, \r
-* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM \r
-* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES \r
-* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS \r
-* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\r
-* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of \r
-* this software. By using this software, you agree to the additional terms and conditions found by accessing the \r
-* following link:\r
-* http://www.renesas.com/disclaimer \r
-*\r
-* Copyright (C) 2012 Renesas Electronics Corporation. All rights reserved.    \r
-***********************************************************************************************************************/\r
-/***********************************************************************************************************************\r
-* File Name       : rskrx63n.h\r
-* H/W Platform : RSK+RX63N\r
-* Description  : Board specific definitions for the RSKRX630.\r
-***********************************************************************************************************************/\r
-/***********************************************************************************************************************\r
-* History : DD.MM.YYYY Version  Description\r
-*         : 28.11.2011 1.00     First Release\r
-***********************************************************************************************************************/\r
-\r
-#ifndef RSKRX63N_H
-#define RSKRX63N_H
-
-/* Local defines */
-#define LED_ON              (0)
-#define LED_OFF             (1)
-#define SET_BIT_HIGH        (1)
-#define SET_BIT_LOW         (0)
-#define SET_BYTE_HIGH       (0xFF)
-#define SET_BYTE_LOW        (0x00)\r
-\r
-/* Switches */\r
-#define SW_ACTIVE           0\r
-#define        SW1                         PORT3.PIDR.BIT.B2\r
-#define SW2                        PORT0.PIDR.BIT.B0\r
-#define SW3                        PORT0.PIDR.BIT.B7\r
-#define SW1_PDR                            PORT3.PDR.BIT.B2\r
-#define SW2_PDR                            PORT0.PDR.BIT.B0\r
-#define SW3_PDR                            PORT0.PDR.BIT.B7\r
-#define SW1_PMR                            PORT3.PMR.BIT.B2\r
-#define SW2_PMR                            PORT0.PMR.BIT.B0\r
-#define SW3_PMR                            PORT0.PMR.BIT.B7\r
-\r
-/* LEDs */\r
-#define        LED0                        PORT0.PODR.BIT.B3\r
-#define        LED1                        PORT0.PODR.BIT.B5\r
-#define        LED2                        PORT1.PODR.BIT.B0\r
-#define        LED3                        PORT1.PODR.BIT.B1\r
-#define        LED0_PDR                    PORT0.PDR.BIT.B3\r
-#define        LED1_PDR                    PORT0.PDR.BIT.B5\r
-#define        LED2_PDR                    PORT1.PDR.BIT.B0\r
-#define        LED3_PDR                    PORT1.PDR.BIT.B1\r
-\r
-/* Slave select. */\r
-#define FLASH_CS            PORT3.PDR.BIT.B1        // SSLB0\r
-
-#endif /* RSKRX63N_H */\r
diff --git a/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/Renesas-Files/board/rskrx63n/sbrk.c b/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/Renesas-Files/board/rskrx63n/sbrk.c
deleted file mode 100644 (file)
index ef29b31..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-/***********************************************************************************************************************\r
-* DISCLAIMER\r
-* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No \r
-* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all \r
-* applicable laws, including copyright laws. \r
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING\r
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, \r
-* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM \r
-* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES \r
-* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS \r
-* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\r
-* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of \r
-* this software. By using this software, you agree to the additional terms and conditions found by accessing the \r
-* following link:\r
-* http://www.renesas.com/disclaimer \r
-*\r
-* Copyright (C) 2012 Renesas Electronics Corporation. All rights reserved.    \r
-***********************************************************************************************************************/\r
-/***********************************************************************************************************************\r
-* File Name       : sbrk.c\r
-* Device(s)    : RX\r
-* Description  : Configures the MCU heap memory.  The size of the heap is defined by the macro HEAPSIZE below.\r
-***********************************************************************************************************************/\r
-/***********************************************************************************************************************\r
-* History : DD.MM.YYYY Version  Description\r
-*         : 26.10.2011 1.00     First Release\r
-*         : 12.03.2012 1.10     Heap size is now defined in r_bsp_config.h, not sbrk.h.\r
-***********************************************************************************************************************/\r
-/***********************************************************************************************************************\r
-Includes   <System Includes> , "Project Includes"\r
-***********************************************************************************************************************/\r
-/* Provides standard definitions used in this file */
-#include <stddef.h>
-/* Defines standard input/output functions used in this file */
-#include <stdio.h>
-/* Defines standard variable types used in this file */
-#include <stdint.h>\r
-/* Used for getting HEAP_BYTES macro. */\r
-#include "platform.h"
-\r
-/***********************************************************************************************************************\r
-Macro definitions\r
-***********************************************************************************************************************/\r
-
-/***********************************************************************************************************************
-Function Prototypes
-***********************************************************************************************************************/
-/* Memory allocation function prototype declaration */
-int8_t  *sbrk(size_t size);
-
-/***********************************************************************************************************************
-Global Variables
-***********************************************************************************************************************/
-//const size_t _sbrk_size=      /* Specifies the minimum unit of */
-/* the defined heap area */
-extern int8_t *_s1ptr;
-
-union HEAP_TYPE
-{
-    int32_t  dummy;             /* Dummy for 4-byte boundary */
-    int8_t heap[HEAP_BYTES];    /* Declaration of the area managed by sbrk*/
-};
-/* Declare memory heap area */
-static union HEAP_TYPE heap_area;
-/* End address allocated by sbrk    */
-static int8_t *brk=(int8_t *)&heap_area;
-
-/***********************************************************************************************************************\r
-* Function name: sbrk\r
-* Description  : This function configures MCU memory area allocation.\r
-* Arguments    : size - \r
-*                    assigned area size\r
-* Return value : Start address of allocated area (pass)\r
-*                -1 (failure)\r
-***********************************************************************************************************************/\r
-int8_t  *sbrk(size_t size)                      
-{
-    int8_t  *p;
-
-    if (brk+size > heap_area.heap+HEAP_BYTES)
-    {
-        /* Empty area size  */
-        p = (int8_t *)-1;
-    }
-    else
-    {
-        /* Area assignment */
-        p = brk;  
-
-        /* End address update */                           
-        brk += size;                           
-    }
-
-    /* Return result */
-    return p;
-}
diff --git a/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/Renesas-Files/board/rskrx63n/vecttbl.c b/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/Renesas-Files/board/rskrx63n/vecttbl.c
deleted file mode 100644 (file)
index e528b1f..0000000
+++ /dev/null
@@ -1,186 +0,0 @@
-/***********************************************************************************************************************\r
-* DISCLAIMER\r
-* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No \r
-* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all \r
-* applicable laws, including copyright laws. \r
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING\r
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, \r
-* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM \r
-* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES \r
-* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS \r
-* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\r
-* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of \r
-* this software. By using this software, you agree to the additional terms and conditions found by accessing the \r
-* following link:\r
-* http://www.renesas.com/disclaimer \r
-*\r
-* Copyright (C) 2012 Renesas Electronics Corporation. All rights reserved.    \r
-***********************************************************************************************************************/\r
-/***********************************************************************************************************************\r
-* File Name       : vecttbl.c\r
-* Device(s)    : RX\r
-* Description  : Definition of the fixed vector table\r
-***********************************************************************************************************************/\r
-/***********************************************************************************************************************\r
-* History : DD.MM.YYYY Version  Description\r
-*         : 26.10.2011 1.00     First Release\r
-*         : 17.02.2012 1.10     Made function names compliant with CS v4.0\r
-*         : 13.03.2012 1.20     ID Code is now specified in r_bsp_config.h. It is still used here in Fixed_Vectors[].\r
-***********************************************************************************************************************/\r
-\r
-/***********************************************************************************************************************\r
-Includes   <System Includes> , "Project Includes"\r
-***********************************************************************************************************************/\r
-#include <stdint.h>\r
-#include <machine.h>\r
-#include "platform.h"\r
-\r
-/***********************************************************************************************************************\r
-* Function name: PowerON_Reset_PC\r
-* Description  : The reset vector points to this function.  Code execution starts in this function after reset.\r
-* Arguments    : none\r
-* Return value : none\r
-***********************************************************************************************************************/\r
-extern void PowerON_Reset_PC(void);                                                                                                                \r
-\r
-/***********************************************************************************************************************\r
-* Function name: excep_supervisor_inst_isr\r
-* Description  : Supervisor Instruction Violation ISR\r
-* Arguments    : none\r
-* Return Value : none\r
-***********************************************************************************************************************/\r
-#pragma interrupt (excep_supervisor_inst_isr)\r
-void excep_supervisor_inst_isr(void)\r
-{\r
-    /* Add your own code here to handle this exception */\r
-    nop();\r
-}\r
-\r
-/***********************************************************************************************************************\r
-* Function name: excep_undefined_inst_isr\r
-* Description  : Undefined instruction exception ISR\r
-* Arguments    : none\r
-* Return Value : none\r
-***********************************************************************************************************************/\r
-#pragma interrupt (excep_undefined_inst_isr)\r
-void excep_undefined_inst_isr(void)\r
-{\r
-    /* Add your own code here to handle this exception */\r
-    nop();\r
-}\r
-\r
-/***********************************************************************************************************************\r
-* Function name: excep_floating_point_isr\r
-* Description  : Floating point exception ISR\r
-* Arguments    : none\r
-* Return Value : none\r
-***********************************************************************************************************************/\r
-#pragma interrupt (excep_floating_point_isr)\r
-void excep_floating_point_isr(void)\r
-{\r
-    /* Add your own code here to handle this exception */\r
-    nop();\r
-}\r
-\r
-/***********************************************************************************************************************\r
-* Function name: non_maskable_isr\r
-* Description  : Non-maskable interrupt ISR\r
-* Arguments    : none\r
-* Return Value : none\r
-***********************************************************************************************************************/\r
-#pragma interrupt (non_maskable_isr)\r
-void non_maskable_isr(void)\r
-{\r
-    /* Add your own code here to handle this exception */\r
-    nop();\r
-}\r
-\r
-/***********************************************************************************************************************\r
-* Function name: undefined_interrupt_source_isr\r
-* Description  : All undefined interrupt vectors point to this function.\r
-*                Set a breakpoint in this function to determine which source is creating unwanted interrupts.\r
-* Arguments    : none\r
-* Return Value : none\r
-***********************************************************************************************************************/\r
-#pragma interrupt (undefined_interrupt_source_isr)\r
-void undefined_interrupt_source_isr(void)\r
-{\r
-    /* Add your own code here to handle this exception */\r
-    nop();\r
-}\r
-\r
-/***********************************************************************************************************************\r
-* Function name: bus_error_isr\r
-* Description  : By default, this demo code enables the Bus Error Interrupt. This interrupt will fire if the user tries \r
-*                to access code or data from one of the reserved areas in the memory map, including the areas covered \r
-*                by disabled chip selects. A nop() statement is included here as a convenient place to set a breakpoint \r
-*                during debugging and development, and further handling should be added by the user for their \r
-*                application.\r
-* Arguments    : none\r
-* Return value : none\r
-***********************************************************************************************************************/\r
-#pragma interrupt (bus_error_isr(vect=VECT(BSC,BUSERR)))\r
-void bus_error_isr (void)\r
-{\r
-    /* \r
-        To find the address that was accessed when the bus error occured, read the register BSC.BERSR2.WORD.  The upper \r
-        13 bits of this register contain the upper 13-bits of the offending address (in 512K byte units)\r
-    */\r
-    \r
-    /* Add your own code here to handle this interrupt */\r
-    nop();\r
-}\r
-\r
-/***********************************************************************************************************************\r
-* The following array fills in the fixed vector table and the code\r
-* protecction ID bytes.\r
-***********************************************************************************************************************/\r
-#pragma section C FIXEDVECT\r
-\r
-void* const Fixed_Vectors[] = {\r
-    \r
-/* 0xffffff90 through 0xffffff9f: Reserved area - must be all 0xFF */\r
-  (void *)0xFFFFFFFF,   /* 0xffffff90 - Reserved */\r
-  (void *)0xFFFFFFFF,   /* 0xffffff94 - Reserved */\r
-  (void *)0xFFFFFFFF,   /* 0xffffff98 - Reserved */\r
-\r
-/* The 32-bit area immediately below (0xffffff9c through 0xffffff9f) is a special area that allows the ROM to be \r
-   protected from reading or writing by a parallel programmer. Please refer to the HW manual for appropriate settings.\r
-   The default (all 0xff) places no restrictions and therefore allows reads and writes by a parallel programmer. */\r
-  (void *)0xFFFFFFFF,   /* 0xffffff9C - ROM Code Protection */\r
-\r
-/* The memory are immediately below (0xffffffa0 through 0xffffffaf) is a special area that allows the on-chip firmware \r
-   to be protected. See the section "ID Code Protection" in the HW manual for details on how to enable protection.  \r
-   Setting the four long words below to non-0xFF values will enable protection.  Do this only after carefully review \r
-   the HW manual */\r
-   \r
-/* 0xffffffA0 through 0xffffffaf: ID Code Protection. The ID code is specified using macros in r_bsp_config.h.  */\r
-  (void *) ID_CODE_LONG_1,  /* 0xffffffA0 - Control code and ID code */\r
-  (void *) ID_CODE_LONG_2,  /* 0xffffffA4 - ID code (cont.) */\r
-  (void *) ID_CODE_LONG_3,  /* 0xffffffA8 - ID code (cont.) */\r
-  (void *) ID_CODE_LONG_4,  /* 0xffffffAC - ID code (cont.) */\r
-  \r
-/* 0xffffffB0 through 0xffffffcf: Reserved area */\r
-  (void *) 0xFFFFFFFF,  /* 0xffffffB0 - Reserved */\r
-  (void *) 0xFFFFFFFF,  /* 0xffffffB4 - Reserved */\r
-  (void *) 0xFFFFFFFF,  /* 0xffffffB8 - Reserved */\r
-  (void *) 0xFFFFFFFF,  /* 0xffffffBC - Reserved */\r
-  (void *) 0xFFFFFFFF,  /* 0xffffffC0 - Reserved */\r
-  (void *) 0xFFFFFFFF,  /* 0xffffffC4 - Reserved */\r
-  (void *) 0xFFFFFFFF,  /* 0xffffffC8 - Reserved */\r
-  (void *) 0xFFFFFFFF,  /* 0xffffffCC - Reserved */\r
-\r
-/* Fixed vector table */\r
-  (void *) excep_supervisor_inst_isr,         /* 0xffffffd0  Exception(Supervisor Instruction) */\r
-  (void *) undefined_interrupt_source_isr,    /* 0xffffffd4  Reserved */\r
-  (void *) undefined_interrupt_source_isr,    /* 0xffffffd8  Reserved */\r
-  (void *) excep_undefined_inst_isr,          /* 0xffffffdc  Exception(Undefined Instruction) */\r
-  (void *) undefined_interrupt_source_isr,    /* 0xffffffe0  Reserved */\r
-  (void *) excep_floating_point_isr,          /* 0xffffffe4  Exception(Floating Point) */\r
-  (void *) undefined_interrupt_source_isr,    /* 0xffffffe8  Reserved */\r
-  (void *) undefined_interrupt_source_isr,    /* 0xffffffec  Reserved */\r
-  (void *) undefined_interrupt_source_isr,    /* 0xfffffff0  Reserved */\r
-  (void *) undefined_interrupt_source_isr,    /* 0xfffffff4  Reserved */\r
-  (void *) non_maskable_isr,                  /* 0xfffffff8  NMI */\r
-  (void *) PowerON_Reset_PC                   /* 0xfffffffc  RESET */\r
-};\r
diff --git a/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/Renesas-Files/mcu/rx63n/iodefine.h b/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/Renesas-Files/mcu/rx63n/iodefine.h
deleted file mode 100644 (file)
index a543fba..0000000
+++ /dev/null
@@ -1,12106 +0,0 @@
-/***********************************************************************/\r
-/*                                                                     */\r
-/*  FILE        :iodefine.h                                            */\r
-/*  DATE        :Mon, Jul 11, 2011                                     */\r
-/*  DESCRIPTION :Definition of I/O Register                            */\r
-/*  CPU TYPE    :RX63N                                                 */\r
-/*                                                                     */\r
-/*  This file is generated by Renesas Project Generator (Ver.4.52).    */\r
-/*  NOTE:THIS IS A TYPICAL EXAMPLE.                                    */\r
-/*                                                                     */\r
-/***********************************************************************/\r
-/************************************************************************\r
-*\r
-* Device     : RX/RX600/RX63N\r
-*\r
-* File Name  : ioedfine.h\r
-*\r
-* Abstract   : Definition of I/O Register.\r
-*\r
-* History    : 0.50  (2011-03-28)  [Hardware Manual Revision : 0.50]\r
-*            : 0.02  (2010-11-01)  [Hardware Manual Revision : 0.01]\r
-*\r
-* NOTE       : THIS IS A TYPICAL EXAMPLE.\r
-*\r
-* Copyright (C) 2010(2011) Renesas Electronics Corporation\r
-* and Renesas Solutions Corp.\r
-*\r
-************************************************************************/\r
-/********************************************************************************/\r
-/*                                                                              */\r
-/*  DESCRIPTION : Definition of ICU Register                                    */\r
-/*  CPU TYPE    : RX63N                                                         */\r
-/*                                                                              */\r
-/*  Usage : IR,DTCER,IER,IPR of ICU Register                                    */\r
-/*     The following IR, DTCE, IEN, IPR macro functions simplify usage.         */\r
-/*     The bit access operation is "Bit_Name(interrupt source,name)".           */\r
-/*     A part of the name can be omitted.                                       */\r
-/*     for example :                                                            */\r
-/*       IR(TPU0,TGI0A) = 0;     expands to :                                   */\r
-/*         ICU.IR[126].BIT.IR = 0;                                              */\r
-/*                                                                              */\r
-/*       DTCE(ICU,IRQ0) = 1;     expands to :                                   */\r
-/*         ICU.DTCER[64].BIT.DTCE = 1;                                          */\r
-/*                                                                              */\r
-/*       IEN(CMT0,CMI0) = 1;     expands to :                                   */\r
-/*         ICU.IER[0x03].BIT.IEN4 = 1;                                          */\r
-/*                                                                              */\r
-/*       IPR(TPU0,TGI0A) = 2;    expands to :                                   */\r
-/*       IPR(TPU0,TGI  ) = 2;    // TGI0A,TGI0B,TGI0C,TGI0D share IPR level.    */\r
-/*         ICU.IPR[126].BIT.IPR = 2;                                            */\r
-/*                                                                              */\r
-/*       IPR(SCI0,RXI0) = 3;     expands to :                                   */\r
-/*       IPR(SCI0,    ) = 3;     // SCI0 uses single IPR for all sources.       */\r
-/*         ICU.IPR[214].BIT.IPR = 3;                                            */\r
-/*                                                                              */\r
-/*  Usage : #pragma interrupt Function_Identifier(vect=**)                      */\r
-/*     The number of vector is "(interrupt source, name)".                      */\r
-/*     for example :                                                            */\r
-/*       #pragma interrupt INT_IRQ0(vect=VECT(ICU,IRQ0))          expands to :  */\r
-/*         #pragma interrupt INT_IRQ0(vect=64)                                  */\r
-/*       #pragma interrupt INT_CMT0_CMI0(vect=VECT(CMT0,CMI0))    expands to :  */\r
-/*         #pragma interrupt INT_CMT0_CMI0(vect=28)                             */\r
-/*       #pragma interrupt INT_MTU0_TGIA0(vect=VECT(MTU0,TGIA0))  expands to :  */\r
-/*         #pragma interrupt INT_MTU0_TGIA0(vect=142)                           */\r
-/*       #pragma interrupt INT_TPU0_TGI0A(vect=VECT(TPU0,TGI0A))  expands to :  */\r
-/*         #pragma interrupt INT_TPU0_TGI0A(vect=126)                           */\r
-/*                                                                              */\r
-/*  Usage : MSTPCRA,MSTPCRB,MSTPCRC of SYSTEM Register                          */\r
-/*     The bit access operation is "MSTP(name)".                                */\r
-/*     The name that can be used is a macro name defined with "iodefine.h".     */\r
-/*     for example :                                                            */\r
-/*       MSTP(TMR2) = 0;    // TMR2,TMR3,TMR23                    expands to :  */\r
-/*         SYSTEM.MSTPCRA.BIT.MSTPA4  = 0;                                      */\r
-/*       MSTP(SCI0) = 0;    // SCI0,SMCI0                         expands to :  */\r
-/*         SYSTEM.MSTPCRB.BIT.MSTPB31 = 0;                                      */\r
-/*       MSTP(MTU4) = 0;    // MTU,MTU0,MTU1,MTU2,MTU3,MTU4,MTU5  expands to :  */\r
-/*         SYSTEM.MSTPCRA.BIT.MSTPA9  = 0;                                      */\r
-/*       MSTP(TPU4) = 0;    // TPU0,TPU1,TPU2,TPU3,TPU4,TPU5      expands to :  */\r
-/*         SYSTEM.MSTPCRA.BIT.MSTPA13 = 0;                                      */\r
-/*       MSTP(CMT3) = 0;    // CMT2,CMT3                          expands to :  */\r
-/*         SYSTEM.MSTPCRA.BIT.MSTPA14 = 0;                                      */\r
-/*                                                                              */\r
-/*                                                                              */\r
-/********************************************************************************/\r
-#ifndef __RX63NIODEFINE_HEADER__\r
-#define __RX63NIODEFINE_HEADER__\r
-#pragma bit_order left\r
-#pragma unpack\r
-struct st_ad {\r
-       unsigned short ADDRA;\r
-       unsigned short ADDRB;\r
-       unsigned short ADDRC;\r
-       unsigned short ADDRD;\r
-       unsigned short ADDRE;\r
-       unsigned short ADDRF;\r
-       unsigned short ADDRG;\r
-       unsigned short ADDRH;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char ADIE:1;\r
-                       unsigned char ADST:1;\r
-                       unsigned char :2;\r
-                       unsigned char CH:3;\r
-               } BIT;\r
-       } ADCSR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TRGS:3;\r
-                       unsigned char :1;\r
-                       unsigned char CKS:2;\r
-                       unsigned char MODE:2;\r
-               } BIT;\r
-       } ADCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char DPSEL:1;\r
-                       unsigned char EXOEN:1;\r
-                       unsigned char EXSEL:2;\r
-               } BIT;\r
-       } ADCR2;\r
-       unsigned char  ADSSTR;\r
-       char           wk0[11];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :6;\r
-                       unsigned char DIAG:2;\r
-               } BIT;\r
-       } ADDIAGR;\r
-};\r
-\r
-struct st_bsc {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char STSCLR:1;\r
-               } BIT;\r
-       } BERCLR;\r
-       char           wk0[3];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :6;\r
-                       unsigned char TOEN:1;\r
-                       unsigned char IGAEN:1;\r
-               } BIT;\r
-       } BEREN;\r
-       char           wk1[3];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char MST:3;\r
-                       unsigned char :2;\r
-                       unsigned char TO:1;\r
-                       unsigned char IA:1;\r
-               } BIT;\r
-       } BERSR1;\r
-       char           wk2[1];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short ADDR:13;\r
-               } BIT;\r
-       } BERSR2;\r
-       char           wk3[4];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :2;\r
-                       unsigned short BPEB:2;\r
-                       unsigned short BPFB:2;\r
-                       unsigned short BPHB:2;\r
-                       unsigned short BPGB:2;\r
-                       unsigned short BPIB:2;\r
-                       unsigned short BPRO:2;\r
-                       unsigned short BPRA:2;\r
-               } BIT;\r
-       } BUSPRI;\r
-       char           wk4[7408];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short PRMOD:1;\r
-                       unsigned short :5;\r
-                       unsigned short PWENB:1;\r
-                       unsigned short PRENB:1;\r
-                       unsigned short :4;\r
-                       unsigned short EWENB:1;\r
-                       unsigned short :2;\r
-                       unsigned short WRMOD:1;\r
-               } BIT;\r
-       } CS0MOD;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :3;\r
-                       unsigned long CSRWAIT:5;\r
-                       unsigned long :3;\r
-                       unsigned long CSWWAIT:5;\r
-                       unsigned long :5;\r
-                       unsigned long CSPRWAIT:3;\r
-                       unsigned long :5;\r
-                       unsigned long CSPWWAIT:3;\r
-               } BIT;\r
-       } CS0WCR1;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :1;\r
-                       unsigned long CSON:3;\r
-                       unsigned long :1;\r
-                       unsigned long WDON:3;\r
-                       unsigned long :1;\r
-                       unsigned long WRON:3;\r
-                       unsigned long :1;\r
-                       unsigned long RDON:3;\r
-                       unsigned long :2;\r
-                       unsigned long AWAIT:2;\r
-                       unsigned long :1;\r
-                       unsigned long WDOFF:3;\r
-                       unsigned long :1;\r
-                       unsigned long CSWOFF:3;\r
-                       unsigned long :1;\r
-                       unsigned long CSROFF:3;\r
-               } BIT;\r
-       } CS0WCR2;\r
-       char           wk5[6];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short PRMOD:1;\r
-                       unsigned short :5;\r
-                       unsigned short PWENB:1;\r
-                       unsigned short PRENB:1;\r
-                       unsigned short :4;\r
-                       unsigned short EWENB:1;\r
-                       unsigned short :2;\r
-                       unsigned short WRMOD:1;\r
-               } BIT;\r
-       } CS1MOD;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :3;\r
-                       unsigned long CSRWAIT:5;\r
-                       unsigned long :3;\r
-                       unsigned long CSWWAIT:5;\r
-                       unsigned long :5;\r
-                       unsigned long CSPRWAIT:3;\r
-                       unsigned long :5;\r
-                       unsigned long CSPWWAIT:3;\r
-               } BIT;\r
-       } CS1WCR1;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :1;\r
-                       unsigned long CSON:3;\r
-                       unsigned long :1;\r
-                       unsigned long WDON:3;\r
-                       unsigned long :1;\r
-                       unsigned long WRON:3;\r
-                       unsigned long :1;\r
-                       unsigned long RDON:3;\r
-                       unsigned long :2;\r
-                       unsigned long AWAIT:2;\r
-                       unsigned long :1;\r
-                       unsigned long WDOFF:3;\r
-                       unsigned long :1;\r
-                       unsigned long CSWOFF:3;\r
-                       unsigned long :1;\r
-                       unsigned long CSROFF:3;\r
-               } BIT;\r
-       } CS1WCR2;\r
-       char           wk6[6];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short PRMOD:1;\r
-                       unsigned short :5;\r
-                       unsigned short PWENB:1;\r
-                       unsigned short PRENB:1;\r
-                       unsigned short :4;\r
-                       unsigned short EWENB:1;\r
-                       unsigned short :2;\r
-                       unsigned short WRMOD:1;\r
-               } BIT;\r
-       } CS2MOD;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :3;\r
-                       unsigned long CSRWAIT:5;\r
-                       unsigned long :3;\r
-                       unsigned long CSWWAIT:5;\r
-                       unsigned long :5;\r
-                       unsigned long CSPRWAIT:3;\r
-                       unsigned long :5;\r
-                       unsigned long CSPWWAIT:3;\r
-               } BIT;\r
-       } CS2WCR1;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :1;\r
-                       unsigned long CSON:3;\r
-                       unsigned long :1;\r
-                       unsigned long WDON:3;\r
-                       unsigned long :1;\r
-                       unsigned long WRON:3;\r
-                       unsigned long :1;\r
-                       unsigned long RDON:3;\r
-                       unsigned long :2;\r
-                       unsigned long AWAIT:2;\r
-                       unsigned long :1;\r
-                       unsigned long WDOFF:3;\r
-                       unsigned long :1;\r
-                       unsigned long CSWOFF:3;\r
-                       unsigned long :1;\r
-                       unsigned long CSROFF:3;\r
-               } BIT;\r
-       } CS2WCR2;\r
-       char           wk7[6];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short PRMOD:1;\r
-                       unsigned short :5;\r
-                       unsigned short PWENB:1;\r
-                       unsigned short PRENB:1;\r
-                       unsigned short :4;\r
-                       unsigned short EWENB:1;\r
-                       unsigned short :2;\r
-                       unsigned short WRMOD:1;\r
-               } BIT;\r
-       } CS3MOD;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :3;\r
-                       unsigned long CSRWAIT:5;\r
-                       unsigned long :3;\r
-                       unsigned long CSWWAIT:5;\r
-                       unsigned long :5;\r
-                       unsigned long CSPRWAIT:3;\r
-                       unsigned long :5;\r
-                       unsigned long CSPWWAIT:3;\r
-               } BIT;\r
-       } CS3WCR1;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :1;\r
-                       unsigned long CSON:3;\r
-                       unsigned long :1;\r
-                       unsigned long WDON:3;\r
-                       unsigned long :1;\r
-                       unsigned long WRON:3;\r
-                       unsigned long :1;\r
-                       unsigned long RDON:3;\r
-                       unsigned long :2;\r
-                       unsigned long AWAIT:2;\r
-                       unsigned long :1;\r
-                       unsigned long WDOFF:3;\r
-                       unsigned long :1;\r
-                       unsigned long CSWOFF:3;\r
-                       unsigned long :1;\r
-                       unsigned long CSROFF:3;\r
-               } BIT;\r
-       } CS3WCR2;\r
-       char           wk8[6];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short PRMOD:1;\r
-                       unsigned short :5;\r
-                       unsigned short PWENB:1;\r
-                       unsigned short PRENB:1;\r
-                       unsigned short :4;\r
-                       unsigned short EWENB:1;\r
-                       unsigned short :2;\r
-                       unsigned short WRMOD:1;\r
-               } BIT;\r
-       } CS4MOD;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :3;\r
-                       unsigned long CSRWAIT:5;\r
-                       unsigned long :3;\r
-                       unsigned long CSWWAIT:5;\r
-                       unsigned long :5;\r
-                       unsigned long CSPRWAIT:3;\r
-                       unsigned long :5;\r
-                       unsigned long CSPWWAIT:3;\r
-               } BIT;\r
-       } CS4WCR1;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :1;\r
-                       unsigned long CSON:3;\r
-                       unsigned long :1;\r
-                       unsigned long WDON:3;\r
-                       unsigned long :1;\r
-                       unsigned long WRON:3;\r
-                       unsigned long :1;\r
-                       unsigned long RDON:3;\r
-                       unsigned long :2;\r
-                       unsigned long AWAIT:2;\r
-                       unsigned long :1;\r
-                       unsigned long WDOFF:3;\r
-                       unsigned long :1;\r
-                       unsigned long CSWOFF:3;\r
-                       unsigned long :1;\r
-                       unsigned long CSROFF:3;\r
-               } BIT;\r
-       } CS4WCR2;\r
-       char           wk9[6];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short PRMOD:1;\r
-                       unsigned short :5;\r
-                       unsigned short PWENB:1;\r
-                       unsigned short PRENB:1;\r
-                       unsigned short :4;\r
-                       unsigned short EWENB:1;\r
-                       unsigned short :2;\r
-                       unsigned short WRMOD:1;\r
-               } BIT;\r
-       } CS5MOD;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :3;\r
-                       unsigned long CSRWAIT:5;\r
-                       unsigned long :3;\r
-                       unsigned long CSWWAIT:5;\r
-                       unsigned long :5;\r
-                       unsigned long CSPRWAIT:3;\r
-                       unsigned long :5;\r
-                       unsigned long CSPWWAIT:3;\r
-               } BIT;\r
-       } CS5WCR1;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :1;\r
-                       unsigned long CSON:3;\r
-                       unsigned long :1;\r
-                       unsigned long WDON:3;\r
-                       unsigned long :1;\r
-                       unsigned long WRON:3;\r
-                       unsigned long :1;\r
-                       unsigned long RDON:3;\r
-                       unsigned long :2;\r
-                       unsigned long AWAIT:2;\r
-                       unsigned long :1;\r
-                       unsigned long WDOFF:3;\r
-                       unsigned long :1;\r
-                       unsigned long CSWOFF:3;\r
-                       unsigned long :1;\r
-                       unsigned long CSROFF:3;\r
-               } BIT;\r
-       } CS5WCR2;\r
-       char           wk10[6];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short PRMOD:1;\r
-                       unsigned short :5;\r
-                       unsigned short PWENB:1;\r
-                       unsigned short PRENB:1;\r
-                       unsigned short :4;\r
-                       unsigned short EWENB:1;\r
-                       unsigned short :2;\r
-                       unsigned short WRMOD:1;\r
-               } BIT;\r
-       } CS6MOD;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :3;\r
-                       unsigned long CSRWAIT:5;\r
-                       unsigned long :3;\r
-                       unsigned long CSWWAIT:5;\r
-                       unsigned long :5;\r
-                       unsigned long CSPRWAIT:3;\r
-                       unsigned long :5;\r
-                       unsigned long CSPWWAIT:3;\r
-               } BIT;\r
-       } CS6WCR1;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :1;\r
-                       unsigned long CSON:3;\r
-                       unsigned long :1;\r
-                       unsigned long WDON:3;\r
-                       unsigned long :1;\r
-                       unsigned long WRON:3;\r
-                       unsigned long :1;\r
-                       unsigned long RDON:3;\r
-                       unsigned long :2;\r
-                       unsigned long AWAIT:2;\r
-                       unsigned long :1;\r
-                       unsigned long WDOFF:3;\r
-                       unsigned long :1;\r
-                       unsigned long CSWOFF:3;\r
-                       unsigned long :1;\r
-                       unsigned long CSROFF:3;\r
-               } BIT;\r
-       } CS6WCR2;\r
-       char           wk11[6];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short PRMOD:1;\r
-                       unsigned short :5;\r
-                       unsigned short PWENB:1;\r
-                       unsigned short PRENB:1;\r
-                       unsigned short :4;\r
-                       unsigned short EWENB:1;\r
-                       unsigned short :2;\r
-                       unsigned short WRMOD:1;\r
-               } BIT;\r
-       } CS7MOD;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :3;\r
-                       unsigned long CSRWAIT:5;\r
-                       unsigned long :3;\r
-                       unsigned long CSWWAIT:5;\r
-                       unsigned long :5;\r
-                       unsigned long CSPRWAIT:3;\r
-                       unsigned long :5;\r
-                       unsigned long CSPWWAIT:3;\r
-               } BIT;\r
-       } CS7WCR1;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :1;\r
-                       unsigned long CSON:3;\r
-                       unsigned long :1;\r
-                       unsigned long WDON:3;\r
-                       unsigned long :1;\r
-                       unsigned long WRON:3;\r
-                       unsigned long :1;\r
-                       unsigned long RDON:3;\r
-                       unsigned long :2;\r
-                       unsigned long AWAIT:2;\r
-                       unsigned long :1;\r
-                       unsigned long WDOFF:3;\r
-                       unsigned long :1;\r
-                       unsigned long CSWOFF:3;\r
-                       unsigned long :1;\r
-                       unsigned long CSROFF:3;\r
-               } BIT;\r
-       } CS7WCR2;\r
-       char           wk12[1926];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :3;\r
-                       unsigned short MPXEN:1;\r
-                       unsigned short :3;\r
-                       unsigned short EMODE:1;\r
-                       unsigned short :2;\r
-                       unsigned short BSIZE:2;\r
-                       unsigned short :3;\r
-                       unsigned short EXENB:1;\r
-               } BIT;\r
-       } CS0CR;\r
-       char           wk13[6];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :4;\r
-                       unsigned short WRCV:4;\r
-                       unsigned short :4;\r
-                       unsigned short RRCV:4;\r
-               } BIT;\r
-       } CS0REC;\r
-       char           wk14[6];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :3;\r
-                       unsigned short MPXEN:1;\r
-                       unsigned short :3;\r
-                       unsigned short EMODE:1;\r
-                       unsigned short :2;\r
-                       unsigned short BSIZE:2;\r
-                       unsigned short :3;\r
-                       unsigned short EXENB:1;\r
-               } BIT;\r
-       } CS1CR;\r
-       char           wk15[6];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :4;\r
-                       unsigned short WRCV:4;\r
-                       unsigned short :4;\r
-                       unsigned short RRCV:4;\r
-               } BIT;\r
-       } CS1REC;\r
-       char           wk16[6];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :3;\r
-                       unsigned short MPXEN:1;\r
-                       unsigned short :3;\r
-                       unsigned short EMODE:1;\r
-                       unsigned short :2;\r
-                       unsigned short BSIZE:2;\r
-                       unsigned short :3;\r
-                       unsigned short EXENB:1;\r
-               } BIT;\r
-       } CS2CR;\r
-       char           wk17[6];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :4;\r
-                       unsigned short WRCV:4;\r
-                       unsigned short :4;\r
-                       unsigned short RRCV:4;\r
-               } BIT;\r
-       } CS2REC;\r
-       char           wk18[6];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :3;\r
-                       unsigned short MPXEN:1;\r
-                       unsigned short :3;\r
-                       unsigned short EMODE:1;\r
-                       unsigned short :2;\r
-                       unsigned short BSIZE:2;\r
-                       unsigned short :3;\r
-                       unsigned short EXENB:1;\r
-               } BIT;\r
-       } CS3CR;\r
-       char           wk19[6];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :4;\r
-                       unsigned short WRCV:4;\r
-                       unsigned short :4;\r
-                       unsigned short RRCV:4;\r
-               } BIT;\r
-       } CS3REC;\r
-       char           wk20[6];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :3;\r
-                       unsigned short MPXEN:1;\r
-                       unsigned short :3;\r
-                       unsigned short EMODE:1;\r
-                       unsigned short :2;\r
-                       unsigned short BSIZE:2;\r
-                       unsigned short :3;\r
-                       unsigned short EXENB:1;\r
-               } BIT;\r
-       } CS4CR;\r
-       char           wk21[6];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :4;\r
-                       unsigned short WRCV:4;\r
-                       unsigned short :4;\r
-                       unsigned short RRCV:4;\r
-               } BIT;\r
-       } CS4REC;\r
-       char           wk22[6];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :3;\r
-                       unsigned short MPXEN:1;\r
-                       unsigned short :3;\r
-                       unsigned short EMODE:1;\r
-                       unsigned short :2;\r
-                       unsigned short BSIZE:2;\r
-                       unsigned short :3;\r
-                       unsigned short EXENB:1;\r
-               } BIT;\r
-       } CS5CR;\r
-       char           wk23[6];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :4;\r
-                       unsigned short WRCV:4;\r
-                       unsigned short :4;\r
-                       unsigned short RRCV:4;\r
-               } BIT;\r
-       } CS5REC;\r
-       char           wk24[6];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :3;\r
-                       unsigned short MPXEN:1;\r
-                       unsigned short :3;\r
-                       unsigned short EMODE:1;\r
-                       unsigned short :2;\r
-                       unsigned short BSIZE:2;\r
-                       unsigned short :3;\r
-                       unsigned short EXENB:1;\r
-               } BIT;\r
-       } CS6CR;\r
-       char           wk25[6];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :4;\r
-                       unsigned short WRCV:4;\r
-                       unsigned short :4;\r
-                       unsigned short RRCV:4;\r
-               } BIT;\r
-       } CS6REC;\r
-       char           wk26[6];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :3;\r
-                       unsigned short MPXEN:1;\r
-                       unsigned short :3;\r
-                       unsigned short EMODE:1;\r
-                       unsigned short :2;\r
-                       unsigned short BSIZE:2;\r
-                       unsigned short :3;\r
-                       unsigned short EXENB:1;\r
-               } BIT;\r
-       } CS7CR;\r
-       char           wk27[6];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :4;\r
-                       unsigned short WRCV:4;\r
-                       unsigned short :4;\r
-                       unsigned short RRCV:4;\r
-               } BIT;\r
-       } CS7REC;\r
-       char           wk28[4];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short RCVENM7:1;\r
-                       unsigned short RCVENM6:1;\r
-                       unsigned short RCVENM5:1;\r
-                       unsigned short RCVENM4:1;\r
-                       unsigned short RCVENM3:1;\r
-                       unsigned short RCVENM2:1;\r
-                       unsigned short RCVENM1:1;\r
-                       unsigned short RCVENM0:1;\r
-                       unsigned short RCVEN7:1;\r
-                       unsigned short RCVEN6:1;\r
-                       unsigned short RCVEN5:1;\r
-                       unsigned short RCVEN4:1;\r
-                       unsigned short RCVEN3:1;\r
-                       unsigned short RCVEN2:1;\r
-                       unsigned short RCVEN1:1;\r
-                       unsigned short RCVEN0:1;\r
-               } BIT;\r
-       } CSRECEN;\r
-       char           wk29[894];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char BSIZE:2;\r
-                       unsigned char :3;\r
-                       unsigned char EXENB:1;\r
-               } BIT;\r
-       } SDCCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char EMODE:1;\r
-               } BIT;\r
-       } SDCMOD;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char BE:1;\r
-               } BIT;\r
-       } SDAMOD;\r
-       char           wk30[13];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char SFEN:1;\r
-               } BIT;\r
-       } SDSELF;\r
-       char           wk31[3];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short REFW:4;\r
-                       unsigned short RFC:12;\r
-               } BIT;\r
-       } SDRFCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char RFEN:1;\r
-               } BIT;\r
-       } SDRFEN;\r
-       char           wk32[9];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char INIRQ:1;\r
-               } BIT;\r
-       } SDICR;\r
-       char           wk33[3];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :5;\r
-                       unsigned short PRC:3;\r
-                       unsigned short ARFC:4;\r
-                       unsigned short ARFI:4;\r
-               } BIT;\r
-       } SDIR;\r
-       char           wk34[26];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :6;\r
-                       unsigned char MXC:2;\r
-               } BIT;\r
-       } SDADR;\r
-       char           wk35[3];\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :13;\r
-                       unsigned long RAS:3;\r
-                       unsigned long :2;\r
-                       unsigned long RCD:2;\r
-                       unsigned long RP:3;\r
-                       unsigned long WR:1;\r
-                       unsigned long :5;\r
-                       unsigned long CL:3;\r
-               } BIT;\r
-       } SDTR;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :1;\r
-                       unsigned short MR:15;\r
-               } BIT;\r
-       } SDMOD;\r
-       char           wk36[6];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char SRFST:1;\r
-                       unsigned char INIST:1;\r
-                       unsigned char :2;\r
-                       unsigned char MRSST:1;\r
-               } BIT;\r
-       } SDSR;\r
-};\r
-\r
-struct st_can {\r
-       struct {\r
-               union {\r
-                       unsigned long LONG;\r
-                       struct {\r
-                               unsigned short H;\r
-                               unsigned short L;\r
-                       } WORD;\r
-                       struct {\r
-                               unsigned char HH;\r
-                               unsigned char HL;\r
-                               unsigned char LH;\r
-                               unsigned char LL;\r
-                       } BYTE;\r
-                       struct {\r
-                               unsigned long IDE:1;\r
-                               unsigned long RTR:1;\r
-                               unsigned long :1;\r
-                               unsigned long SID:11;\r
-                               unsigned long EID:18;\r
-                       } BIT;\r
-               } ID;\r
-               unsigned short DLC;\r
-               unsigned char  DATA[8];\r
-               unsigned short TS;\r
-       } MB[32];\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned short H;\r
-                       unsigned short L;\r
-               } WORD;\r
-               struct {\r
-                       unsigned char HH;\r
-                       unsigned char HL;\r
-                       unsigned char LH;\r
-                       unsigned char LL;\r
-               } BYTE;\r
-               struct {\r
-                       unsigned long :3;\r
-                       unsigned long SID:11;\r
-                       unsigned long EID:18;\r
-               } BIT;\r
-       } MKR[8];\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned short H;\r
-                       unsigned short L;\r
-               } WORD;\r
-               struct {\r
-                       unsigned char HH;\r
-                       unsigned char HL;\r
-                       unsigned char LH;\r
-                       unsigned char LL;\r
-               } BYTE;\r
-               struct {\r
-                       unsigned long IDE:1;\r
-                       unsigned long RTR:1;\r
-                       unsigned long :1;\r
-                       unsigned long SID:11;\r
-                       unsigned long EID:18;\r
-               } BIT;\r
-       } FIDCR0;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned short H;\r
-                       unsigned short L;\r
-               } WORD;\r
-               struct {\r
-                       unsigned char HH;\r
-                       unsigned char HL;\r
-                       unsigned char LH;\r
-                       unsigned char LL;\r
-               } BYTE;\r
-               struct {\r
-                       unsigned long IDE:1;\r
-                       unsigned long RTR:1;\r
-                       unsigned long :1;\r
-                       unsigned long SID:11;\r
-                       unsigned long EID:18;\r
-               } BIT;\r
-       } FIDCR1;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned short H;\r
-                       unsigned short L;\r
-               } WORD;\r
-               struct {\r
-                       unsigned char HH;\r
-                       unsigned char HL;\r
-                       unsigned char LH;\r
-                       unsigned char LL;\r
-               } BYTE;\r
-               struct {\r
-                       unsigned char MB31:1;\r
-                       unsigned char MB30:1;\r
-                       unsigned char MB29:1;\r
-                       unsigned char MB28:1;\r
-                       unsigned char MB27:1;\r
-                       unsigned char MB26:1;\r
-                       unsigned char MB25:1;\r
-                       unsigned char MB24:1;\r
-                       unsigned char MB23:1;\r
-                       unsigned char MB22:1;\r
-                       unsigned char MB21:1;\r
-                       unsigned char MB20:1;\r
-                       unsigned char MB19:1;\r
-                       unsigned char MB18:1;\r
-                       unsigned char MB17:1;\r
-                       unsigned char MB16:1;\r
-                       unsigned char MB15:1;\r
-                       unsigned char MB14:1;\r
-                       unsigned char MB13:1;\r
-                       unsigned char MB12:1;\r
-                       unsigned char MB11:1;\r
-                       unsigned char MB10:1;\r
-                       unsigned char MB9:1;\r
-                       unsigned char MB8:1;\r
-                       unsigned char MB7:1;\r
-                       unsigned char MB6:1;\r
-                       unsigned char MB5:1;\r
-                       unsigned char MB4:1;\r
-                       unsigned char MB3:1;\r
-                       unsigned char MB2:1;\r
-                       unsigned char MB1:1;\r
-                       unsigned char MB0:1;\r
-               } BIT;\r
-       } MKIVLR;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned short H;\r
-                       unsigned short L;\r
-               } WORD;\r
-               struct {\r
-                       unsigned char HH;\r
-                       unsigned char HL;\r
-                       unsigned char LH;\r
-                       unsigned char LL;\r
-               } BYTE;\r
-               struct {\r
-                       unsigned char MB31:1;\r
-                       unsigned char MB30:1;\r
-                       unsigned char MB29:1;\r
-                       unsigned char MB28:1;\r
-                       unsigned char MB27:1;\r
-                       unsigned char MB26:1;\r
-                       unsigned char MB25:1;\r
-                       unsigned char MB24:1;\r
-                       unsigned char MB23:1;\r
-                       unsigned char MB22:1;\r
-                       unsigned char MB21:1;\r
-                       unsigned char MB20:1;\r
-                       unsigned char MB19:1;\r
-                       unsigned char MB18:1;\r
-                       unsigned char MB17:1;\r
-                       unsigned char MB16:1;\r
-                       unsigned char MB15:1;\r
-                       unsigned char MB14:1;\r
-                       unsigned char MB13:1;\r
-                       unsigned char MB12:1;\r
-                       unsigned char MB11:1;\r
-                       unsigned char MB10:1;\r
-                       unsigned char MB9:1;\r
-                       unsigned char MB8:1;\r
-                       unsigned char MB7:1;\r
-                       unsigned char MB6:1;\r
-                       unsigned char MB5:1;\r
-                       unsigned char MB4:1;\r
-                       unsigned char MB3:1;\r
-                       unsigned char MB2:1;\r
-                       unsigned char MB1:1;\r
-                       unsigned char MB0:1;\r
-               } BIT;\r
-       } MIER;\r
-       char           wk0[1008];\r
-       union {\r
-               unsigned char BYTE;\r
-               union {\r
-                       struct {\r
-                               unsigned char TRMREQ:1;\r
-                               unsigned char RECREQ:1;\r
-                               unsigned char :1;\r
-                               unsigned char ONESHOT:1;\r
-                               unsigned char :1;\r
-                               unsigned char TRMABT:1;\r
-                               unsigned char TRMACTIVE:1;\r
-                               unsigned char SENTDATA:1;\r
-                       } TX;\r
-                       struct {\r
-                               unsigned char TRMREQ:1;\r
-                               unsigned char RECREQ:1;\r
-                               unsigned char :1;\r
-                               unsigned char ONESHOT:1;\r
-                               unsigned char :1;\r
-                               unsigned char MSGLOST:1;\r
-                               unsigned char INVALDATA:1;\r
-                               unsigned char NEWDATA:1;\r
-                       } RX;\r
-               } BIT;\r
-       } MCTL[32];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned char H;\r
-                       unsigned char L;\r
-               } BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char RBOC:1;\r
-                       unsigned char BOM:2;\r
-                       unsigned char SLPM:1;\r
-                       unsigned char CANM:2;\r
-                       unsigned char TSPS:2;\r
-                       unsigned char TSRC:1;\r
-                       unsigned char TPM:1;\r
-                       unsigned char MLM:1;\r
-                       unsigned char IDFM:2;\r
-                       unsigned char MBM:1;\r
-               } BIT;\r
-       } CTLR;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned char H;\r
-                       unsigned char L;\r
-               } BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char RECST:1;\r
-                       unsigned char TRMST:1;\r
-                       unsigned char BOST:1;\r
-                       unsigned char EPST:1;\r
-                       unsigned char SLPST:1;\r
-                       unsigned char HLTST:1;\r
-                       unsigned char RSTST:1;\r
-                       unsigned char EST:1;\r
-                       unsigned char TABST:1;\r
-                       unsigned char FMLST:1;\r
-                       unsigned char NMLST:1;\r
-                       unsigned char TFST:1;\r
-                       unsigned char RFST:1;\r
-                       unsigned char SDST:1;\r
-                       unsigned char NDST:1;\r
-               } BIT;\r
-       } STR;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned short H;\r
-                       unsigned short L;\r
-               } WORD;\r
-               struct {\r
-                       unsigned char HH;\r
-                       unsigned char HL;\r
-                       unsigned char LH;\r
-                       unsigned char LL;\r
-               } BYTE;\r
-               struct {\r
-                       unsigned long TSEG1:4;\r
-                       unsigned long :2;\r
-                       unsigned long BRP:10;\r
-                       unsigned long :2;\r
-                       unsigned long SJW:2;\r
-                       unsigned long :1;\r
-                       unsigned long TSEG2:3;\r
-                       unsigned long :7;\r
-                       unsigned long CCLKS:1;\r
-               } BIT;\r
-       } BCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char RFEST:1;\r
-                       unsigned char RFWST:1;\r
-                       unsigned char RFFST:1;\r
-                       unsigned char RFMLF:1;\r
-                       unsigned char RFUST:3;\r
-                       unsigned char RFE:1;\r
-               } BIT;\r
-       } RFCR;\r
-       unsigned char  RFPCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TFEST:1;\r
-                       unsigned char TFFST:1;\r
-                       unsigned char :2;\r
-                       unsigned char TFUST:3;\r
-                       unsigned char TFE:1;\r
-               } BIT;\r
-       } TFCR;\r
-       unsigned char  TFPCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char BLIE:1;\r
-                       unsigned char OLIE:1;\r
-                       unsigned char ORIE:1;\r
-                       unsigned char BORIE:1;\r
-                       unsigned char BOEIE:1;\r
-                       unsigned char EPIE:1;\r
-                       unsigned char EWIE:1;\r
-                       unsigned char BEIE:1;\r
-               } BIT;\r
-       } EIER;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char BLIF:1;\r
-                       unsigned char OLIF:1;\r
-                       unsigned char ORIF:1;\r
-                       unsigned char BORIF:1;\r
-                       unsigned char BOEIF:1;\r
-                       unsigned char EPIF:1;\r
-                       unsigned char EWIF:1;\r
-                       unsigned char BEIF:1;\r
-               } BIT;\r
-       } EIFR;\r
-       unsigned char  RECR;\r
-       unsigned char  TECR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char EDPM:1;\r
-                       unsigned char ADEF:1;\r
-                       unsigned char BE0F:1;\r
-                       unsigned char BE1F:1;\r
-                       unsigned char CEF:1;\r
-                       unsigned char AEF:1;\r
-                       unsigned char FEF:1;\r
-                       unsigned char SEF:1;\r
-               } BIT;\r
-       } ECSR;\r
-       unsigned char  CSSR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char SEST:1;\r
-                       unsigned char :2;\r
-                       unsigned char MBNST:5;\r
-               } BIT;\r
-       } MSSR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :6;\r
-                       unsigned char MBSM:2;\r
-               } BIT;\r
-       } MSMR;\r
-       unsigned short TSR;\r
-       unsigned short AFSR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :5;\r
-                       unsigned char TSTM:2;\r
-                       unsigned char TSTE:1;\r
-               } BIT;\r
-       } TCR;\r
-};\r
-\r
-struct st_cmt {\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :14;\r
-                       unsigned short STR1:1;\r
-                       unsigned short STR0:1;\r
-               } BIT;\r
-       } CMSTR0;\r
-       char           wk0[14];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :14;\r
-                       unsigned short STR3:1;\r
-                       unsigned short STR2:1;\r
-               } BIT;\r
-       } CMSTR1;\r
-};\r
-\r
-struct st_cmt0 {\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :9;\r
-                       unsigned short CMIE:1;\r
-                       unsigned short :4;\r
-                       unsigned short CKS:2;\r
-               } BIT;\r
-       } CMCR;\r
-       unsigned short CMCNT;\r
-       unsigned short CMCOR;\r
-};\r
-\r
-struct st_crc {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char DORCLR:1;\r
-                       unsigned char :4;\r
-                       unsigned char LMS:1;\r
-                       unsigned char GPS:2;\r
-               } BIT;\r
-       } CRCCR;\r
-       unsigned char  CRCDIR;\r
-       unsigned short CRCDOR;\r
-};\r
-\r
-struct st_da {\r
-       unsigned short DADR0;\r
-       unsigned short DADR1;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char DAOE1:1;\r
-                       unsigned char DAOE0:1;\r
-                       unsigned char DAE:1;\r
-               } BIT;\r
-       } DACR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char DPSEL:1;\r
-               } BIT;\r
-       } DADPR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char DAADST:1;\r
-               } BIT;\r
-       } DAADSCR;\r
-};\r
-\r
-struct st_dmac {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char DMST:1;\r
-               } BIT;\r
-       } DMAST;\r
-};\r
-\r
-struct st_dmac0 {\r
-       unsigned long  DMSAR;\r
-       unsigned long  DMDAR;\r
-       unsigned long  DMCRA;\r
-       unsigned short DMCRB;\r
-       char           wk0[2];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short MD:2;\r
-                       unsigned short DTS:2;\r
-                       unsigned short :2;\r
-                       unsigned short SZ:2;\r
-                       unsigned short :6;\r
-                       unsigned short DCTG:2;\r
-               } BIT;\r
-       } DMTMD;\r
-       char           wk1[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char DTIE:1;\r
-                       unsigned char ESIE:1;\r
-                       unsigned char RPTIE:1;\r
-                       unsigned char SARIE:1;\r
-                       unsigned char DARIE:1;\r
-               } BIT;\r
-       } DMINT;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short SM:2;\r
-                       unsigned short :1;\r
-                       unsigned short SARA:5;\r
-                       unsigned short DM:2;\r
-                       unsigned short :1;\r
-                       unsigned short DARA:5;\r
-               } BIT;\r
-       } DMAMD;\r
-       char           wk2[2];\r
-       unsigned long  DMOFR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char DTE:1;\r
-               } BIT;\r
-       } DMCNT;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char CLRS:1;\r
-                       unsigned char :3;\r
-                       unsigned char SWREQ:1;\r
-               } BIT;\r
-       } DMREQ;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ACT:1;\r
-                       unsigned char :2;\r
-                       unsigned char DTIF:1;\r
-                       unsigned char :3;\r
-                       unsigned char ESIF:1;\r
-               } BIT;\r
-       } DMSTS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char DISEL:1;\r
-               } BIT;\r
-       } DMCSL;\r
-};\r
-\r
-struct st_dmac1 {\r
-       unsigned long  DMSAR;\r
-       unsigned long  DMDAR;\r
-       unsigned long  DMCRA;\r
-       unsigned short DMCRB;\r
-       char           wk0[2];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short MD:2;\r
-                       unsigned short DTS:2;\r
-                       unsigned short :2;\r
-                       unsigned short SZ:2;\r
-                       unsigned short :6;\r
-                       unsigned short DCTG:2;\r
-               } BIT;\r
-       } DMTMD;\r
-       char           wk1[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char DTIE:1;\r
-                       unsigned char ESIE:1;\r
-                       unsigned char RPTIE:1;\r
-                       unsigned char SARIE:1;\r
-                       unsigned char DARIE:1;\r
-               } BIT;\r
-       } DMINT;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short SM:2;\r
-                       unsigned short :1;\r
-                       unsigned short SARA:5;\r
-                       unsigned short DM:2;\r
-                       unsigned short :1;\r
-                       unsigned short DARA:5;\r
-               } BIT;\r
-       } DMAMD;\r
-       char           wk2[6];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char DTE:1;\r
-               } BIT;\r
-       } DMCNT;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char CLRS:1;\r
-                       unsigned char :3;\r
-                       unsigned char SWREQ:1;\r
-               } BIT;\r
-       } DMREQ;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ACT:1;\r
-                       unsigned char :2;\r
-                       unsigned char DTIF:1;\r
-                       unsigned char :3;\r
-                       unsigned char ESIF:1;\r
-               } BIT;\r
-       } DMSTS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char DISEL:1;\r
-               } BIT;\r
-       } DMCSL;\r
-};\r
-\r
-struct st_dtc {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char RRS:1;\r
-               } BIT;\r
-       } DTCCR;\r
-       char           wk0[3];\r
-       unsigned long  DTCVBR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char SHORT:1;\r
-               } BIT;\r
-       } DTCADMOD;\r
-       char           wk1[3];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char DTCST:1;\r
-               } BIT;\r
-       } DTCST;\r
-       char           wk2[1];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short ACT:1;\r
-                       unsigned short :7;\r
-                       unsigned short VECN:8;\r
-               } BIT;\r
-       } DTCSTS;\r
-};\r
-\r
-struct st_edmac {\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :25;\r
-                       unsigned long DE:1;\r
-                       unsigned long DL:2;\r
-                       unsigned long :3;\r
-                       unsigned long SWR:1;\r
-               } BIT;\r
-       } EDMR;\r
-       char           wk0[4];\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :31;\r
-                       unsigned long TR:1;\r
-               } BIT;\r
-       } EDTRR;\r
-       char           wk1[4];\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :31;\r
-                       unsigned long RR:1;\r
-               } BIT;\r
-       } EDRRR;\r
-       char           wk2[4];\r
-       unsigned long  TDLAR;\r
-       char           wk3[4];\r
-       unsigned long  RDLAR;\r
-       char           wk4[4];\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :1;\r
-                       unsigned long TWB:1;\r
-                       unsigned long :3;\r
-                       unsigned long TABT:1;\r
-                       unsigned long RABT:1;\r
-                       unsigned long RFCOF:1;\r
-                       unsigned long ADE:1;\r
-                       unsigned long ECI:1;\r
-                       unsigned long TC:1;\r
-                       unsigned long TDE:1;\r
-                       unsigned long TFUF:1;\r
-                       unsigned long FR:1;\r
-                       unsigned long RDE:1;\r
-                       unsigned long RFOF:1;\r
-                       unsigned long :4;\r
-                       unsigned long CND:1;\r
-                       unsigned long DLC:1;\r
-                       unsigned long CD:1;\r
-                       unsigned long TRO:1;\r
-                       unsigned long RMAF:1;\r
-                       unsigned long :2;\r
-                       unsigned long RRF:1;\r
-                       unsigned long RTLF:1;\r
-                       unsigned long RTSF:1;\r
-                       unsigned long PRE:1;\r
-                       unsigned long CERF:1;\r
-               } BIT;\r
-       } EESR;\r
-       char           wk5[4];\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :1;\r
-                       unsigned long TWBIP:1;\r
-                       unsigned long :3;\r
-                       unsigned long TABTIP:1;\r
-                       unsigned long RABTIP:1;\r
-                       unsigned long RFCOFIP:1;\r
-                       unsigned long ADEIP:1;\r
-                       unsigned long ECIIP:1;\r
-                       unsigned long TCIP:1;\r
-                       unsigned long TDEIP:1;\r
-                       unsigned long TFUFIP:1;\r
-                       unsigned long FRIP:1;\r
-                       unsigned long RDEIP:1;\r
-                       unsigned long RFOFIP:1;\r
-                       unsigned long :4;\r
-                       unsigned long CNDIP:1;\r
-                       unsigned long DLCIP:1;\r
-                       unsigned long CDIP:1;\r
-                       unsigned long TROIP:1;\r
-                       unsigned long RMAFIP:1;\r
-                       unsigned long :2;\r
-                       unsigned long RRFIP:1;\r
-                       unsigned long RTLFIP:1;\r
-                       unsigned long RTSFIP:1;\r
-                       unsigned long PREIP:1;\r
-                       unsigned long CERFIP:1;\r
-               } BIT;\r
-       } EESIPR;\r
-       char           wk6[4];\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :20;\r
-                       unsigned long CNDCE:1;\r
-                       unsigned long DLCCE:1;\r
-                       unsigned long CDCE:1;\r
-                       unsigned long TROCE:1;\r
-                       unsigned long RMAFCE:1;\r
-                       unsigned long :2;\r
-                       unsigned long RRFCE:1;\r
-                       unsigned long RTLFCE:1;\r
-                       unsigned long RTSFCE:1;\r
-                       unsigned long PRECE:1;\r
-                       unsigned long CERFCE:1;\r
-               } BIT;\r
-       } TRSCER;\r
-       char           wk7[4];\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :16;\r
-                       unsigned long MFC:16;\r
-               } BIT;\r
-       } RMFCR;\r
-       char           wk8[4];\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :21;\r
-                       unsigned long TFT:11;\r
-               } BIT;\r
-       } TFTR;\r
-       char           wk9[4];\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :19;\r
-                       unsigned long TFD:5;\r
-                       unsigned long :3;\r
-                       unsigned long RFD:5;\r
-               } BIT;\r
-       } FDR;\r
-       char           wk10[4];\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :30;\r
-                       unsigned long RNC:1;\r
-                       unsigned long RNR:1;\r
-               } BIT;\r
-       } RMCR;\r
-       char           wk11[8];\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :16;\r
-                       unsigned long UNDER:16;\r
-               } BIT;\r
-       } TFUCR;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :16;\r
-                       unsigned long OVER:16;\r
-               } BIT;\r
-       } RFOCR;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :31;\r
-                       unsigned long ELB:1;\r
-               } BIT;\r
-       } IOSR;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :13;\r
-                       unsigned long RFFO:3;\r
-                       unsigned long :13;\r
-                       unsigned long RFDO:3;\r
-               } BIT;\r
-       } FCFTR;\r
-       char           wk12[4];\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :14;\r
-                       unsigned long PADS:2;\r
-                       unsigned long :10;\r
-                       unsigned long PADR:6;\r
-               } BIT;\r
-       } RPADIR;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :27;\r
-                       unsigned long TIM:1;\r
-                       unsigned long :3;\r
-                       unsigned long TIS:1;\r
-               } BIT;\r
-       } TRIMD;\r
-       char           wk13[72];\r
-       unsigned long  RBWAR;\r
-       unsigned long  RDFAR;\r
-       char           wk14[4];\r
-       unsigned long  TBRAR;\r
-       unsigned long  TDFAR;\r
-};\r
-\r
-struct st_etherc {\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :11;\r
-                       unsigned long TPC:1;\r
-                       unsigned long ZPE:1;\r
-                       unsigned long PFR:1;\r
-                       unsigned long RXF:1;\r
-                       unsigned long TXF:1;\r
-                       unsigned long :3;\r
-                       unsigned long PRCEF:1;\r
-                       unsigned long :2;\r
-                       unsigned long MPDE:1;\r
-                       unsigned long :2;\r
-                       unsigned long RE:1;\r
-                       unsigned long TE:1;\r
-                       unsigned long :1;\r
-                       unsigned long ILB:1;\r
-                       unsigned long RTM:1;\r
-                       unsigned long DM:1;\r
-                       unsigned long PRM:1;\r
-               } BIT;\r
-       } ECMR;\r
-       char           wk0[4];\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :20;\r
-                       unsigned long RFL:12;\r
-               } BIT;\r
-       } RFLR;\r
-       char           wk1[4];\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :26;\r
-                       unsigned long BFR:1;\r
-                       unsigned long PSRTO:1;\r
-                       unsigned long :1;\r
-                       unsigned long LCHNG:1;\r
-                       unsigned long MPD:1;\r
-                       unsigned long ICD:1;\r
-               } BIT;\r
-       } ECSR;\r
-       char           wk2[4];\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :26;\r
-                       unsigned long BFSIPR:1;\r
-                       unsigned long PSRTOIP:1;\r
-                       unsigned long :1;\r
-                       unsigned long LCHNGIP:1;\r
-                       unsigned long MPDIP:1;\r
-                       unsigned long ICDIP:1;\r
-               } BIT;\r
-       } ECSIPR;\r
-       char           wk3[4];\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :28;\r
-                       unsigned long MDI:1;\r
-                       unsigned long MDO:1;\r
-                       unsigned long MMD:1;\r
-                       unsigned long MDC:1;\r
-               } BIT;\r
-       } PIR;\r
-       char           wk4[4];\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :31;\r
-                       unsigned long LMON:1;\r
-               } BIT;\r
-       } PSR;\r
-       char           wk5[20];\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :12;\r
-                       unsigned long RMD:20;\r
-               } BIT;\r
-       } RDMLR;\r
-       char           wk6[12];\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :27;\r
-                       unsigned long IPG:5;\r
-               } BIT;\r
-       } IPGR;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :16;\r
-                       unsigned long AP:16;\r
-               } BIT;\r
-       } APR;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :16;\r
-                       unsigned long MP:16;\r
-               } BIT;\r
-       } MPR;\r
-       char           wk7[4];\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :24;\r
-                       unsigned long RPAUSE:8;\r
-               } BIT;\r
-       } RFCF;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :16;\r
-                       unsigned long TPAUSE:16;\r
-               } BIT;\r
-       } TPAUSER;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :24;\r
-                       unsigned long TXP:8;\r
-               } BIT;\r
-       } TPAUSECR;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :16;\r
-                       unsigned long BCF:16;\r
-               } BIT;\r
-       } BCFRR;\r
-       char           wk8[80];\r
-       unsigned long  MAHR;\r
-       char           wk9[4];\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :16;\r
-                       unsigned long MA:16;\r
-               } BIT;\r
-       } MALR;\r
-       char           wk10[4];\r
-       unsigned long  TROCR;\r
-       unsigned long  CDCR;\r
-       unsigned long  LCCR;\r
-       unsigned long  CNDCR;\r
-       char           wk11[4];\r
-       unsigned long  CEFCR;\r
-       unsigned long  FRECR;\r
-       unsigned long  TSFRCR;\r
-       unsigned long  TLFRCR;\r
-       unsigned long  RFCR;\r
-       unsigned long  MAFCR;\r
-};\r
-\r
-struct st_exdmac {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char DMST:1;\r
-               } BIT;\r
-       } EDMAST;\r
-       char           wk0[479];\r
-       unsigned long  CLSBR0;\r
-       unsigned long  CLSBR1;\r
-       unsigned long  CLSBR2;\r
-       unsigned long  CLSBR3;\r
-       unsigned long  CLSBR4;\r
-       unsigned long  CLSBR5;\r
-       unsigned long  CLSBR6;\r
-       unsigned long  CLSBR7;\r
-};\r
-\r
-struct st_exdmac0 {\r
-       unsigned long  EDMSAR;\r
-       unsigned long  EDMDAR;\r
-       unsigned long  EDMCRA;\r
-       unsigned short EDMCRB;\r
-       char           wk0[2];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short MD:2;\r
-                       unsigned short DTS:2;\r
-                       unsigned short :2;\r
-                       unsigned short SZ:2;\r
-                       unsigned short :6;\r
-                       unsigned short DCTG:2;\r
-               } BIT;\r
-       } EDMTMD;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :4;\r
-                       unsigned char DACKS:1;\r
-                       unsigned char DACKE:1;\r
-                       unsigned char DACKW:1;\r
-               } BIT;\r
-       } EDMOMD;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char DTIE:1;\r
-                       unsigned char ESIE:1;\r
-                       unsigned char RPTIE:1;\r
-                       unsigned char SARIE:1;\r
-                       unsigned char DARIE:1;\r
-               } BIT;\r
-       } EDMINT;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :14;\r
-                       unsigned long AMS:1;\r
-                       unsigned long DIR:1;\r
-                       unsigned long SM:2;\r
-                       unsigned long :1;\r
-                       unsigned long SARA:5;\r
-                       unsigned long DM:2;\r
-                       unsigned long :1;\r
-                       unsigned long DARA:5;\r
-               } BIT;\r
-       } EDMAMD;\r
-       unsigned long  EDMOFR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char DTE:1;\r
-               } BIT;\r
-       } EDMCNT;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char CLRS:1;\r
-                       unsigned char :3;\r
-                       unsigned char SWREQ:1;\r
-               } BIT;\r
-       } EDMREQ;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ACT:1;\r
-                       unsigned char :2;\r
-                       unsigned char DTIF:1;\r
-                       unsigned char :3;\r
-                       unsigned char ESIF:1;\r
-               } BIT;\r
-       } EDMSTS;\r
-       char           wk1[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :6;\r
-                       unsigned char DREQS:2;\r
-               } BIT;\r
-       } EDMRMD;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char EREQ:1;\r
-               } BIT;\r
-       } EDMERF;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char PREQ:1;\r
-               } BIT;\r
-       } EDMPRF;\r
-};\r
-\r
-struct st_exdmac1 {\r
-       unsigned long  EDMSAR;\r
-       unsigned long  EDMDAR;\r
-       unsigned long  EDMCRA;\r
-       unsigned short EDMCRB;\r
-       char           wk0[2];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short MD:2;\r
-                       unsigned short DTS:2;\r
-                       unsigned short :2;\r
-                       unsigned short SZ:2;\r
-                       unsigned short :6;\r
-                       unsigned short DCTG:2;\r
-               } BIT;\r
-       } EDMTMD;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :4;\r
-                       unsigned char DACKS:1;\r
-                       unsigned char DACKE:1;\r
-                       unsigned char DACKW:1;\r
-               } BIT;\r
-       } EDMOMD;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char DTIE:1;\r
-                       unsigned char ESIE:1;\r
-                       unsigned char RPTIE:1;\r
-                       unsigned char SARIE:1;\r
-                       unsigned char DARIE:1;\r
-               } BIT;\r
-       } EDMINT;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :14;\r
-                       unsigned long AMS:1;\r
-                       unsigned long DIR:1;\r
-                       unsigned long SM:2;\r
-                       unsigned long :1;\r
-                       unsigned long SARA:5;\r
-                       unsigned long DM:2;\r
-                       unsigned long :1;\r
-                       unsigned long DARA:5;\r
-               } BIT;\r
-       } EDMAMD;\r
-       char           wk1[4];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char DTE:1;\r
-               } BIT;\r
-       } EDMCNT;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char CLRS:1;\r
-                       unsigned char :3;\r
-                       unsigned char SWREQ:1;\r
-               } BIT;\r
-       } EDMREQ;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ACT:1;\r
-                       unsigned char :2;\r
-                       unsigned char DTIF:1;\r
-                       unsigned char :3;\r
-                       unsigned char ESIF:1;\r
-               } BIT;\r
-       } EDMSTS;\r
-       char           wk2[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :6;\r
-                       unsigned char DREQS:2;\r
-               } BIT;\r
-       } EDMRMD;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char EREQ:1;\r
-               } BIT;\r
-       } EDMERF;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char PREQ:1;\r
-               } BIT;\r
-       } EDMPRF;\r
-};\r
-\r
-struct st_flash {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :6;\r
-                       unsigned char FLWE:2;\r
-               } BIT;\r
-       } FWEPROR;\r
-       char           wk0[7799147];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char FRDMD:1;\r
-               } BIT;\r
-       } FMODR;\r
-       char           wk1[13];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ROMAE:1;\r
-                       unsigned char :2;\r
-                       unsigned char CMDLK:1;\r
-                       unsigned char DFLAE:1;\r
-                       unsigned char :1;\r
-                       unsigned char DFLRPE:1;\r
-                       unsigned char DFLWPE:1;\r
-               } BIT;\r
-       } FASTAT;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ROMAEIE:1;\r
-                       unsigned char :2;\r
-                       unsigned char CMDLKIE:1;\r
-                       unsigned char DFLAEIE:1;\r
-                       unsigned char :1;\r
-                       unsigned char DFLRPEIE:1;\r
-                       unsigned char DFLWPEIE:1;\r
-               } BIT;\r
-       } FAEINT;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char FRDYIE:1;\r
-               } BIT;\r
-       } FRDYIE;\r
-       char           wk2[45];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short KEY:8;\r
-                       unsigned short DBRE07:1;\r
-                       unsigned short DBRE06:1;\r
-                       unsigned short DBRE05:1;\r
-                       unsigned short DBRE04:1;\r
-                       unsigned short DBRE03:1;\r
-                       unsigned short DBRE02:1;\r
-                       unsigned short DBRE01:1;\r
-                       unsigned short DBRE00:1;\r
-               } BIT;\r
-       } DFLRE0;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short KEY:8;\r
-                       unsigned short DBRE15:1;\r
-                       unsigned short DBRE14:1;\r
-                       unsigned short DBRE13:1;\r
-                       unsigned short DBRE12:1;\r
-                       unsigned short DBRE11:1;\r
-                       unsigned short DBRE10:1;\r
-                       unsigned short DBRE09:1;\r
-                       unsigned short DBRE08:1;\r
-               } BIT;\r
-       } DFLRE1;\r
-       char           wk3[12];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short KEY:8;\r
-                       unsigned short DBWE07:1;\r
-                       unsigned short DBW006:1;\r
-                       unsigned short DBWE05:1;\r
-                       unsigned short DBWE04:1;\r
-                       unsigned short DBWE03:1;\r
-                       unsigned short DBWE02:1;\r
-                       unsigned short DBWE01:1;\r
-                       unsigned short DBWE00:1;\r
-               } BIT;\r
-       } DFLWE0;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short KEY:8;\r
-                       unsigned short DBWE15:1;\r
-                       unsigned short DBWE14:1;\r
-                       unsigned short DBWE13:1;\r
-                       unsigned short DBWE12:1;\r
-                       unsigned short DBWE11:1;\r
-                       unsigned short DBWE10:1;\r
-                       unsigned short DBWE09:1;\r
-                       unsigned short DBWE08:1;\r
-               } BIT;\r
-       } DFLWE1;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short KEY:8;\r
-                       unsigned short :7;\r
-                       unsigned short FCRME:1;\r
-               } BIT;\r
-       } FCURAME;\r
-       char           wk4[15194];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char FRDY:1;\r
-                       unsigned char ILGLERR:1;\r
-                       unsigned char ERSERR:1;\r
-                       unsigned char PRGERR:1;\r
-                       unsigned char SUSRDY:1;\r
-                       unsigned char :1;\r
-                       unsigned char ERSSPD:1;\r
-                       unsigned char PRGSPD:1;\r
-               } BIT;\r
-       } FSTATR0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char FCUERR:1;\r
-                       unsigned char :2;\r
-                       unsigned char FLOCKST:1;\r
-               } BIT;\r
-       } FSTATR1;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short FEKEY:8;\r
-                       unsigned short FENTRYD:1;\r
-                       unsigned short :3;\r
-                       unsigned short FENTRY3:1;\r
-                       unsigned short FENTRY2:1;\r
-                       unsigned short FENTRY1:1;\r
-                       unsigned short FENTRY0:1;\r
-               } BIT;\r
-       } FENTRYR;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short FPKEY:8;\r
-                       unsigned short :7;\r
-                       unsigned short FPROTCN:1;\r
-               } BIT;\r
-       } FPROTR;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short FRKEY:8;\r
-                       unsigned short :7;\r
-                       unsigned short FRESET:1;\r
-               } BIT;\r
-       } FRESETR;\r
-       char           wk5[2];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short CMDR:8;\r
-                       unsigned short PCMDR:8;\r
-               } BIT;\r
-       } FCMDR;\r
-       char           wk6[12];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :15;\r
-                       unsigned short ESUSPMD:1;\r
-               } BIT;\r
-       } FCPSR;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short BCSIZE:1;\r
-                       unsigned short :4;\r
-                       unsigned short BCADR:11;\r
-               } BIT;\r
-       } DFLBCCNT;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :8;\r
-                       unsigned short PEERRST:8;\r
-               } BIT;\r
-       } FPESTAT;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :15;\r
-                       unsigned short BCST:1;\r
-               } BIT;\r
-       } DFLBCSTAT;\r
-       char           wk7[24];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :8;\r
-                       unsigned short PCKA:8;\r
-               } BIT;\r
-       } PCKAR;\r
-};\r
-\r
-struct st_icu {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char IR:1;\r
-               } BIT;\r
-       } IR[254];\r
-       char           wk0[2];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char DTCE:1;\r
-               } BIT;\r
-       } DTCER[252];\r
-       char           wk1[4];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char IEN7:1;\r
-                       unsigned char IEN6:1;\r
-                       unsigned char IEN5:1;\r
-                       unsigned char IEN4:1;\r
-                       unsigned char IEN3:1;\r
-                       unsigned char IEN2:1;\r
-                       unsigned char IEN1:1;\r
-                       unsigned char IEN0:1;\r
-               } BIT;\r
-       } IER[32];\r
-       char           wk2[192];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char SWINT:1;\r
-               } BIT;\r
-       } SWINTR;\r
-       char           wk3[15];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short FIEN:1;\r
-                       unsigned short :7;\r
-                       unsigned short FVCT:8;\r
-               } BIT;\r
-       } FIR;\r
-       char           wk4[14];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :4;\r
-                       unsigned char IPR:4;\r
-               } BIT;\r
-       } IPR[254];\r
-       char           wk5[2];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char DMRS:8;\r
-               } BIT;\r
-       } DMRSR0;\r
-       char           wk6[3];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char DMRS:8;\r
-               } BIT;\r
-       } DMRSR1;\r
-       char           wk7[3];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char DMRS:8;\r
-               } BIT;\r
-       } DMRSR2;\r
-       char           wk8[3];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char DMRS:8;\r
-               } BIT;\r
-       } DMRSR3;\r
-       char           wk9[243];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :4;\r
-                       unsigned char IRQMD:2;\r
-               } BIT;\r
-       } IRQCR[16];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char FLTEN7:1;\r
-                       unsigned char FLTEN6:1;\r
-                       unsigned char FLTEN5:1;\r
-                       unsigned char FLTEN4:1;\r
-                       unsigned char FLTEN3:1;\r
-                       unsigned char FLTEN2:1;\r
-                       unsigned char FLTEN1:1;\r
-                       unsigned char FLTEN0:1;\r
-               } BIT;\r
-       } IRQFLTE0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char FLTEN15:1;\r
-                       unsigned char FLTEN14:1;\r
-                       unsigned char FLTEN13:1;\r
-                       unsigned char FLTEN12:1;\r
-                       unsigned char FLTEN11:1;\r
-                       unsigned char FLTEN10:1;\r
-                       unsigned char FLTEN9:1;\r
-                       unsigned char FLTEN8:1;\r
-               } BIT;\r
-       } IRQFLTE1;\r
-       char           wk10[2];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short FCLKSEL7:2;\r
-                       unsigned short FCLKSEL6:2;\r
-                       unsigned short FCLKSEL5:2;\r
-                       unsigned short FCLKSEL4:2;\r
-                       unsigned short FCLKSEL3:2;\r
-                       unsigned short FCLKSEL2:2;\r
-                       unsigned short FCLKSEL1:2;\r
-                       unsigned short FCLKSEL0:2;\r
-               } BIT;\r
-       } IRQFLTC0;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short FCLKSEL15:2;\r
-                       unsigned short FCLKSEL14:2;\r
-                       unsigned short FCLKSEL13:2;\r
-                       unsigned short FCLKSEL12:2;\r
-                       unsigned short FCLKSEL11:2;\r
-                       unsigned short FCLKSEL10:2;\r
-                       unsigned short FCLKSEL9:2;\r
-                       unsigned short FCLKSEL8:2;\r
-               } BIT;\r
-       } IRQFLTC1;\r
-       char           wk11[104];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char LVD2ST:1;\r
-                       unsigned char LVD1ST:1;\r
-                       unsigned char IWDTST:1;\r
-                       unsigned char WDTST:1;\r
-                       unsigned char OSTST:1;\r
-                       unsigned char NMIST:1;\r
-               } BIT;\r
-       } NMISR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char LVD2EN:1;\r
-                       unsigned char LVD1EN:1;\r
-                       unsigned char IWDTEN:1;\r
-                       unsigned char WDTEN:1;\r
-                       unsigned char OSTEN:1;\r
-                       unsigned char NMIEN:1;\r
-               } BIT;\r
-       } NMIER;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char LVD2CLR:1;\r
-                       unsigned char LVD1CLR:1;\r
-                       unsigned char IWDTCLR:1;\r
-                       unsigned char WDTCLR:1;\r
-                       unsigned char OSTCLR:1;\r
-                       unsigned char NMICLR:1;\r
-               } BIT;\r
-       } NMICLR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :4;\r
-                       unsigned char NMIMD:1;\r
-               } BIT;\r
-       } NMICR;\r
-       char           wk12[12];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char NFLTEN:1;\r
-               } BIT;\r
-       } NMIFLTE;\r
-       char           wk13[3];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :6;\r
-                       unsigned char NFCLKSEL:2;\r
-               } BIT;\r
-       } NMIFLTC;\r
-       char           wk14[19819];\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :16;\r
-                       unsigned long IS15:1;\r
-                       unsigned long IS14:1;\r
-                       unsigned long IS13:1;\r
-                       unsigned long IS12:1;\r
-                       unsigned long IS11:1;\r
-                       unsigned long IS10:1;\r
-                       unsigned long IS9:1;\r
-                       unsigned long IS8:1;\r
-                       unsigned long IS7:1;\r
-                       unsigned long IS6:1;\r
-                       unsigned long IS5:1;\r
-                       unsigned long IS4:1;\r
-                       unsigned long IS3:1;\r
-                       unsigned long IS2:1;\r
-                       unsigned long IS1:1;\r
-                       unsigned long IS0:1;\r
-               } BIT;\r
-       } GRP[13];\r
-       char           wk15[12];\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :16;\r
-                       unsigned long EN15:1;\r
-                       unsigned long EN14:1;\r
-                       unsigned long EN13:1;\r
-                       unsigned long EN12:1;\r
-                       unsigned long EN11:1;\r
-                       unsigned long EN10:1;\r
-                       unsigned long EN9:1;\r
-                       unsigned long EN8:1;\r
-                       unsigned long EN7:1;\r
-                       unsigned long EN6:1;\r
-                       unsigned long EN5:1;\r
-                       unsigned long EN4:1;\r
-                       unsigned long EN3:1;\r
-                       unsigned long EN2:1;\r
-                       unsigned long EN1:1;\r
-                       unsigned long EN0:1;\r
-               } BIT;\r
-       } GEN[13];\r
-       char           wk16[12];\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :16;\r
-                       unsigned long CLR15:1;\r
-                       unsigned long CLR14:1;\r
-                       unsigned long CLR13:1;\r
-                       unsigned long CLR12:1;\r
-                       unsigned long CLR11:1;\r
-                       unsigned long CLR10:1;\r
-                       unsigned long CLR9:1;\r
-                       unsigned long CLR8:1;\r
-                       unsigned long CLR7:1;\r
-                       unsigned long CLR6:1;\r
-                       unsigned long CLR5:1;\r
-                       unsigned long CLR4:1;\r
-                       unsigned long CLR3:1;\r
-                       unsigned long CLR2:1;\r
-                       unsigned long CLR1:1;\r
-                       unsigned long CLR0:1;\r
-               } BIT;\r
-       } GCR[13];\r
-       char           wk17[12];\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :26;\r
-                       unsigned long CN5:1;\r
-                       unsigned long CN4:1;\r
-                       unsigned long CN3:1;\r
-                       unsigned long CN2:1;\r
-                       unsigned long CN1:1;\r
-                       unsigned long CN0:1;\r
-               } BIT;\r
-       } SEL;\r
-};\r
-\r
-struct st_ieb {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char IOL:1;\r
-                       unsigned char DEE:1;\r
-                       unsigned char :1;\r
-                       unsigned char RE:1;\r
-               } BIT;\r
-       } IECTR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :5;\r
-                       unsigned char CMD:3;\r
-               } BIT;\r
-       } IECMR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char SS:1;\r
-                       unsigned char RN:3;\r
-                       unsigned char CTL:4;\r
-               } BIT;\r
-       } IEMCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char IARL4:4;\r
-                       unsigned char IMD:2;\r
-                       unsigned char :1;\r
-                       unsigned char STE:1;\r
-               } BIT;\r
-       } IEAR1;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char IARU8:8;\r
-               } BIT;\r
-       } IEAR2;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ISAL4:4;\r
-               } BIT;\r
-       } IESA1;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ISAU8:8;\r
-               } BIT;\r
-       } IESA2;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char IBFL:8;\r
-               } BIT;\r
-       } IETBFL;\r
-       char           wk0[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ISAL4:4;\r
-               } BIT;\r
-       } IEMA1;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char IMAU8:8;\r
-               } BIT;\r
-       } IEMA2;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :4;\r
-                       unsigned char RCTL:4;\r
-               } BIT;\r
-       } IERCTL;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char RBFL:8;\r
-               } BIT;\r
-       } IERBFL;\r
-       char           wk1[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ILAL8:8;\r
-               } BIT;\r
-       } IELA1;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :4;\r
-                       unsigned char ILAU4:4;\r
-               } BIT;\r
-       } IELA2;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char CMX:1;\r
-                       unsigned char MRQ:1;\r
-                       unsigned char SRQ:1;\r
-                       unsigned char SRE:1;\r
-                       unsigned char LCK:1;\r
-                       unsigned char :1;\r
-                       unsigned char RSS:1;\r
-                       unsigned char GG:1;\r
-               } BIT;\r
-       } IEFLG;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char TXS:1;\r
-                       unsigned char TXF:1;\r
-                       unsigned char :1;\r
-                       unsigned char TXEAL:1;\r
-                       unsigned char TXETTME:1;\r
-                       unsigned char TXERO:1;\r
-                       unsigned char TXEACK:1;\r
-               } BIT;\r
-       } IETSR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char TXSE:1;\r
-                       unsigned char TXFE:1;\r
-                       unsigned char :1;\r
-                       unsigned char TXEALE:1;\r
-                       unsigned char TXETTMEE:1;\r
-                       unsigned char TXEROE:1;\r
-                       unsigned char TXEACKE:1;\r
-               } BIT;\r
-       } IEIET;\r
-       char           wk2[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char RXBSY:1;\r
-                       unsigned char RXS:1;\r
-                       unsigned char RXF:1;\r
-                       unsigned char RXEDE:1;\r
-                       unsigned char RXEOVE:1;\r
-                       unsigned char RXERTME:1;\r
-                       unsigned char RXEDLE:1;\r
-                       unsigned char RXEPE:1;\r
-               } BIT;\r
-       } IERSR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char RXBSYE:1;\r
-                       unsigned char RXSE:1;\r
-                       unsigned char RXFE:1;\r
-                       unsigned char RXEDEE:1;\r
-                       unsigned char RXEOVEE:1;\r
-                       unsigned char RXERTMEE:1;\r
-                       unsigned char RXEDLEE:1;\r
-                       unsigned char RXEPEE:1;\r
-               } BIT;\r
-       } IEIER;\r
-       char           wk3[2];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char FLT:1;\r
-                       unsigned char FCKS:2;\r
-                       unsigned char CKS3:1;\r
-                       unsigned char SRSTP:1;\r
-                       unsigned char CKS:3;\r
-               } BIT;\r
-       } IECKSR;\r
-       char           wk4[230];\r
-       unsigned char  IETB[33];\r
-       char           wk5[223];\r
-       unsigned char  IERB[33];\r
-};\r
-\r
-struct st_iwdt {\r
-       unsigned char  IWDTRR;\r
-       char           wk0[1];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :2;\r
-                       unsigned short RPSS:2;\r
-                       unsigned short :2;\r
-                       unsigned short RPES:2;\r
-                       unsigned short CKS:4;\r
-                       unsigned short :2;\r
-                       unsigned short TOPS:2;\r
-               } BIT;\r
-       } IWDTCR;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short REFEF:1;\r
-                       unsigned short UNDFF:1;\r
-                       unsigned short CNTVAL:14;\r
-               } BIT;\r
-       } IWDTSR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char RSTIRQS:1;\r
-               } BIT;\r
-       } IWDTRCR;\r
-       char           wk1[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char SLCSTP:1;\r
-               } BIT;\r
-       } IWDTCSTPR;\r
-};\r
-\r
-struct st_mpc {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char CS7E:1;\r
-                       unsigned char CS6E:1;\r
-                       unsigned char CS5E:1;\r
-                       unsigned char CS4E:1;\r
-                       unsigned char CS3E:1;\r
-                       unsigned char CS2E:1;\r
-                       unsigned char CS1E:1;\r
-                       unsigned char CS0E:1;\r
-               } BIT;\r
-       } PFCSE;\r
-       char           wk0[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char CS3S:2;\r
-                       unsigned char CS2S:2;\r
-                       unsigned char CS1S:2;\r
-                       unsigned char :1;\r
-                       unsigned char CS0S:1;\r
-               } BIT;\r
-       } PFCSS0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char CS7S:2;\r
-                       unsigned char CS6S:2;\r
-                       unsigned char CS5S:2;\r
-                       unsigned char CS4S:2;\r
-               } BIT;\r
-       } PFCSS1;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char A15E:1;\r
-                       unsigned char A14E:1;\r
-                       unsigned char A13E:1;\r
-                       unsigned char A12E:1;\r
-                       unsigned char A11E:1;\r
-                       unsigned char A10E:1;\r
-                       unsigned char A9E:1;\r
-                       unsigned char A8E:1;\r
-               } BIT;\r
-       } PFAOE0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char A23E:1;\r
-                       unsigned char A22E:1;\r
-                       unsigned char A21E:1;\r
-                       unsigned char A20E:1;\r
-                       unsigned char A19E:1;\r
-                       unsigned char A18E:1;\r
-                       unsigned char A17E:1;\r
-                       unsigned char A16E:1;\r
-               } BIT;\r
-       } PFAOE1;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char WR32BC32E:1;\r
-                       unsigned char WR1BC1E:1;\r
-                       unsigned char DH32E:1;\r
-                       unsigned char DHE:1;\r
-                       unsigned char :2;\r
-                       unsigned char ADRHMS:1;\r
-                       unsigned char ADRLE:1;\r
-               } BIT;\r
-       } PFBCR0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char SDCLKE:1;\r
-                       unsigned char DQM1E:1;\r
-                       unsigned char :1;\r
-                       unsigned char MDSDE:1;\r
-                       unsigned char :1;\r
-                       unsigned char ALEOE:1;\r
-                       unsigned char WAITS:2;\r
-               } BIT;\r
-       } PFBCR1;\r
-       char           wk1[6];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PHYMODE:1;\r
-               } BIT;\r
-       } PFENET;\r
-       char           wk2[5];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :5;\r
-                       unsigned char PUPHZS:1;\r
-               } BIT;\r
-       } PFUSB0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :5;\r
-                       unsigned char PUPHZS:1;\r
-               } BIT;\r
-       } PFUSB1;\r
-       char           wk3[9];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B0WI:1;\r
-                       unsigned char PFSWE:1;\r
-               } BIT;\r
-       } PWPR;\r
-       char           wk4[32];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P00PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P01PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P02PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P03PFS;\r
-       char           wk5[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P05PFS;\r
-       char           wk6[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P07PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P10PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P11PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P12PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P13PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P14PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P15PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P16PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P17PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P20PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P21PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P22PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P23PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P24PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P25PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P26PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P27PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P30PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P31PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P32PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P33PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P34PFS;\r
-       char           wk7[3];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char ISEL:1;\r
-               } BIT;\r
-       } P40PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char ISEL:1;\r
-               } BIT;\r
-       } P41PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char ISEL:1;\r
-               } BIT;\r
-       } P42PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char ISEL:1;\r
-               } BIT;\r
-       } P43PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char ISEL:1;\r
-               } BIT;\r
-       } P44PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char ISEL:1;\r
-               } BIT;\r
-       } P45PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char ISEL:1;\r
-               } BIT;\r
-       } P46PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char ISEL:1;\r
-               } BIT;\r
-       } P47PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P50PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P51PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P52PFS;\r
-       char           wk8[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P54PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P55PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P56PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P57PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P60PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P61PFS;\r
-       char           wk9[4];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P66PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P67PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P70PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P71PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P72PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P73PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P74PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P75PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P76PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P77PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P80PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P81PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P82PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P83PFS;\r
-       char           wk10[2];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P86PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P87PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char :2;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P90PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char :2;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P91PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char :2;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P92PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char :2;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P93PFS;\r
-       char           wk11[4];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PA0PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PA1PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PA2PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PA3PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PA4PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PA5PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PA6PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PA7PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PB0PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PB1PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PB2PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PB3PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PB4PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PB5PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PB6PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PB7PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PC0PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PC1PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PC2PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PC3PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PC4PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PC5PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PC6PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PC7PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PD0PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PD1PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PD2PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PD3PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PD4PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PD5PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PD6PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PD7PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char :2;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PE0PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char :2;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PE1PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PE2PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char :2;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PE3PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char :2;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PE4PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PE5PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PE6PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PE7PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PF0PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PF1PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PF2PFS;\r
-       char           wk12[2];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PF5PFS;\r
-       char           wk13[21];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PJ3PFS;\r
-};\r
-\r
-struct st_mtu {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char OE4D:1;\r
-                       unsigned char OE4C:1;\r
-                       unsigned char OE3D:1;\r
-                       unsigned char OE4B:1;\r
-                       unsigned char OE4A:1;\r
-                       unsigned char OE3B:1;\r
-               } BIT;\r
-       } TOER;\r
-       char           wk0[2];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char BDC:1;\r
-                       unsigned char N:1;\r
-                       unsigned char P:1;\r
-                       unsigned char FB:1;\r
-                       unsigned char WF:1;\r
-                       unsigned char VF:1;\r
-                       unsigned char UF:1;\r
-               } BIT;\r
-       } TGCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char PSYE:1;\r
-                       unsigned char :2;\r
-                       unsigned char TOCL:1;\r
-                       unsigned char TOCS:1;\r
-                       unsigned char OLSN:1;\r
-                       unsigned char OLSP:1;\r
-               } BIT;\r
-       } TOCR1;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char BF:2;\r
-                       unsigned char OLS3N:1;\r
-                       unsigned char OLS3P:1;\r
-                       unsigned char OLS2N:1;\r
-                       unsigned char OLS2P:1;\r
-                       unsigned char OLS1N:1;\r
-                       unsigned char OLS1P:1;\r
-               } BIT;\r
-       } TOCR2;\r
-       char           wk1[4];\r
-       unsigned short TCDR;\r
-       unsigned short TDDR;\r
-       char           wk2[8];\r
-       unsigned short TCNTS;\r
-       unsigned short TCBR;\r
-       char           wk3[12];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char T3AEN:1;\r
-                       unsigned char T3ACOR:3;\r
-                       unsigned char T4VEN:1;\r
-                       unsigned char T4VCOR:3;\r
-               } BIT;\r
-       } TITCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char T3ACNT:3;\r
-                       unsigned char :1;\r
-                       unsigned char T4VCNT:3;\r
-               } BIT;\r
-       } TITCNT;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :6;\r
-                       unsigned char BTE:2;\r
-               } BIT;\r
-       } TBTER;\r
-       char           wk4[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char TDER:1;\r
-               } BIT;\r
-       } TDER;\r
-       char           wk5[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char OLS3N:1;\r
-                       unsigned char OLS3P:1;\r
-                       unsigned char OLS2N:1;\r
-                       unsigned char OLS2P:1;\r
-                       unsigned char OLS1N:1;\r
-                       unsigned char OLS1P:1;\r
-               } BIT;\r
-       } TOLBR;\r
-       char           wk6[41];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char CCE:1;\r
-                       unsigned char :6;\r
-                       unsigned char WRE:1;\r
-               } BIT;\r
-       } TWCR;\r
-       char           wk7[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char CST4:1;\r
-                       unsigned char CST3:1;\r
-                       unsigned char :3;\r
-                       unsigned char CST2:1;\r
-                       unsigned char CST1:1;\r
-                       unsigned char CST0:1;\r
-               } BIT;\r
-       } TSTR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char SYNC4:1;\r
-                       unsigned char SYNC3:1;\r
-                       unsigned char :3;\r
-                       unsigned char SYNC2:1;\r
-                       unsigned char SYNC1:1;\r
-                       unsigned char SYNC0:1;\r
-               } BIT;\r
-       } TSYR;\r
-       char           wk8[2];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char RWE:1;\r
-               } BIT;\r
-       } TRWER;\r
-};\r
-\r
-struct st_mtu0 {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char NFCS:2;\r
-                       unsigned char NFDEN:1;\r
-                       unsigned char NFCEN:1;\r
-                       unsigned char NFBEN:1;\r
-                       unsigned char NFAEN:1;\r
-               } BIT;\r
-       } NFCR;\r
-       char           wk0[111];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char CCLR:3;\r
-                       unsigned char CKEG:2;\r
-                       unsigned char TPSC:3;\r
-               } BIT;\r
-       } TCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char BFE:1;\r
-                       unsigned char BFB:1;\r
-                       unsigned char BFA:1;\r
-                       unsigned char MD:4;\r
-               } BIT;\r
-       } TMDR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char IOB:4;\r
-                       unsigned char IOA:4;\r
-               } BIT;\r
-       } TIORH;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char IOD:4;\r
-                       unsigned char IOC:4;\r
-               } BIT;\r
-       } TIORL;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TTGE:1;\r
-                       unsigned char :2;\r
-                       unsigned char TCIEV:1;\r
-                       unsigned char TGIED:1;\r
-                       unsigned char TGIEC:1;\r
-                       unsigned char TGIEB:1;\r
-                       unsigned char TGIEA:1;\r
-               } BIT;\r
-       } TIER;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TCFD:1;\r
-               } BIT;\r
-       } TSR;\r
-       unsigned short TCNT;\r
-       unsigned short TGRA;\r
-       unsigned short TGRB;\r
-       unsigned short TGRC;\r
-       unsigned short TGRD;\r
-       char           wk1[16];\r
-       unsigned short TGRE;\r
-       unsigned short TGRF;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :6;\r
-                       unsigned char TGIEF:1;\r
-                       unsigned char TGIEE:1;\r
-               } BIT;\r
-       } TIER2;\r
-       char           wk2[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :5;\r
-                       unsigned char TTSE:1;\r
-                       unsigned char TTSB:1;\r
-                       unsigned char TTSA:1;\r
-               } BIT;\r
-       } TBTM;\r
-};\r
-\r
-struct st_mtu1 {\r
-       char           wk0[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char NFCS:2;\r
-                       unsigned char NFDEN:1;\r
-                       unsigned char NFCEN:1;\r
-                       unsigned char NFBEN:1;\r
-                       unsigned char NFAEN:1;\r
-               } BIT;\r
-       } NFCR;\r
-       char           wk1[238];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char CCLR:2;\r
-                       unsigned char CKEG:2;\r
-                       unsigned char TPSC:3;\r
-               } BIT;\r
-       } TCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :4;\r
-                       unsigned char MD:4;\r
-               } BIT;\r
-       } TMDR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char IOB:4;\r
-                       unsigned char IOA:4;\r
-               } BIT;\r
-       } TIOR;\r
-       char           wk2[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TTGE:1;\r
-                       unsigned char :1;\r
-                       unsigned char TCIEU:1;\r
-                       unsigned char TCIEV:1;\r
-                       unsigned char :2;\r
-                       unsigned char TGIEB:1;\r
-                       unsigned char TGIEA:1;\r
-               } BIT;\r
-       } TIER;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TCFD:1;\r
-               } BIT;\r
-       } TSR;\r
-       unsigned short TCNT;\r
-       unsigned short TGRA;\r
-       unsigned short TGRB;\r
-       char           wk3[4];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :4;\r
-                       unsigned char I2BE:1;\r
-                       unsigned char I2AE:1;\r
-                       unsigned char I1BE:1;\r
-                       unsigned char I1AE:1;\r
-               } BIT;\r
-       } TICCR;\r
-};\r
-\r
-struct st_mtu2 {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char NFCS:2;\r
-                       unsigned char NFDEN:1;\r
-                       unsigned char NFCEN:1;\r
-                       unsigned char NFBEN:1;\r
-                       unsigned char NFAEN:1;\r
-               } BIT;\r
-       } NFCR;\r
-       char           wk0[365];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char CCLR:2;\r
-                       unsigned char CKEG:2;\r
-                       unsigned char TPSC:3;\r
-               } BIT;\r
-       } TCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :4;\r
-                       unsigned char MD:4;\r
-               } BIT;\r
-       } TMDR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char IOB:4;\r
-                       unsigned char IOA:4;\r
-               } BIT;\r
-       } TIOR;\r
-       char           wk1[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TTGE:1;\r
-                       unsigned char :1;\r
-                       unsigned char TCIEU:1;\r
-                       unsigned char TCIEV:1;\r
-                       unsigned char :2;\r
-                       unsigned char TGIEB:1;\r
-                       unsigned char TGIEA:1;\r
-               } BIT;\r
-       } TIER;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TCFD:1;\r
-               } BIT;\r
-       } TSR;\r
-       unsigned short TCNT;\r
-       unsigned short TGRA;\r
-       unsigned short TGRB;\r
-};\r
-\r
-struct st_mtu3 {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char CCLR:3;\r
-                       unsigned char CKEG:2;\r
-                       unsigned char TPSC:3;\r
-               } BIT;\r
-       } TCR;\r
-       char           wk0[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char BFB:1;\r
-                       unsigned char BFA:1;\r
-                       unsigned char MD:4;\r
-               } BIT;\r
-       } TMDR;\r
-       char           wk1[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char IOB:4;\r
-                       unsigned char IOA:4;\r
-               } BIT;\r
-       } TIORH;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char IOD:4;\r
-                       unsigned char IOC:4;\r
-               } BIT;\r
-       } TIORL;\r
-       char           wk2[2];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TTGE:1;\r
-                       unsigned char :2;\r
-                       unsigned char TCIEV:1;\r
-                       unsigned char TGIED:1;\r
-                       unsigned char TGIEC:1;\r
-                       unsigned char TGIEB:1;\r
-                       unsigned char TGIEA:1;\r
-               } BIT;\r
-       } TIER;\r
-       char           wk3[7];\r
-       unsigned short TCNT;\r
-       char           wk4[6];\r
-       unsigned short TGRA;\r
-       unsigned short TGRB;\r
-       char           wk5[8];\r
-       unsigned short TGRC;\r
-       unsigned short TGRD;\r
-       char           wk6[4];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TCFD:1;\r
-               } BIT;\r
-       } TSR;\r
-       char           wk7[11];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :5;\r
-                       unsigned char TTSE:1;\r
-                       unsigned char TTSB:1;\r
-                       unsigned char TTSA:1;\r
-               } BIT;\r
-       } TBTM;\r
-       char           wk8[90];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char NFCS:2;\r
-                       unsigned char NFDEN:1;\r
-                       unsigned char NFCEN:1;\r
-                       unsigned char NFBEN:1;\r
-                       unsigned char NFAEN:1;\r
-               } BIT;\r
-       } NFCR;\r
-};\r
-\r
-struct st_mtu4 {\r
-       char           wk0[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char CCLR:3;\r
-                       unsigned char CKEG:2;\r
-                       unsigned char TPSC:3;\r
-               } BIT;\r
-       } TCR;\r
-       char           wk1[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char BFB:1;\r
-                       unsigned char BFA:1;\r
-                       unsigned char MD:4;\r
-               } BIT;\r
-       } TMDR;\r
-       char           wk2[2];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char IOB:4;\r
-                       unsigned char IOA:4;\r
-               } BIT;\r
-       } TIORH;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char IOD:4;\r
-                       unsigned char IOC:4;\r
-               } BIT;\r
-       } TIORL;\r
-       char           wk3[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TTGE:1;\r
-                       unsigned char TTGE2:1;\r
-                       unsigned char :1;\r
-                       unsigned char TCIEV:1;\r
-                       unsigned char TGIED:1;\r
-                       unsigned char TGIEC:1;\r
-                       unsigned char TGIEB:1;\r
-                       unsigned char TGIEA:1;\r
-               } BIT;\r
-       } TIER;\r
-       char           wk4[8];\r
-       unsigned short TCNT;\r
-       char           wk5[8];\r
-       unsigned short TGRA;\r
-       unsigned short TGRB;\r
-       char           wk6[8];\r
-       unsigned short TGRC;\r
-       unsigned short TGRD;\r
-       char           wk7[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TCFD:1;\r
-               } BIT;\r
-       } TSR;\r
-       char           wk8[11];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :5;\r
-                       unsigned char TTSE:1;\r
-                       unsigned char TTSB:1;\r
-                       unsigned char TTSA:1;\r
-               } BIT;\r
-       } TBTM;\r
-       char           wk9[6];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short BF:2;\r
-                       unsigned short :6;\r
-                       unsigned short UT4AE:1;\r
-                       unsigned short DT4AE:1;\r
-                       unsigned short UT4BE:1;\r
-                       unsigned short DT4BE:1;\r
-                       unsigned short ITA3AE:1;\r
-                       unsigned short ITA4VE:1;\r
-                       unsigned short ITB3AE:1;\r
-                       unsigned short ITB4VE:1;\r
-               } BIT;\r
-       } TADCR;\r
-       char           wk10[2];\r
-       unsigned short TADCORA;\r
-       unsigned short TADCORB;\r
-       unsigned short TADCOBRA;\r
-       unsigned short TADCOBRB;\r
-       char           wk11[72];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char NFCS:2;\r
-                       unsigned char NFDEN:1;\r
-                       unsigned char NFCEN:1;\r
-                       unsigned char NFBEN:1;\r
-                       unsigned char NFAEN:1;\r
-               } BIT;\r
-       } NFCR;\r
-};\r
-\r
-struct st_mtu5 {\r
-       char           wk0[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char NFCS:2;\r
-                       unsigned char :1;\r
-                       unsigned char NFWEN:1;\r
-                       unsigned char NFVEN:1;\r
-                       unsigned char NFUEN:1;\r
-               } BIT;\r
-       } NFCR;\r
-       char           wk1[490];\r
-       unsigned short TCNTU;\r
-       unsigned short TGRU;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :6;\r
-                       unsigned char TPSC:2;\r
-               } BIT;\r
-       } TCRU;\r
-       char           wk2[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char IOC:5;\r
-               } BIT;\r
-       } TIORU;\r
-       char           wk3[9];\r
-       unsigned short TCNTV;\r
-       unsigned short TGRV;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :6;\r
-                       unsigned char TPSC:2;\r
-               } BIT;\r
-       } TCRV;\r
-       char           wk4[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char IOC:5;\r
-               } BIT;\r
-       } TIORV;\r
-       char           wk5[9];\r
-       unsigned short TCNTW;\r
-       unsigned short TGRW;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :6;\r
-                       unsigned char TPSC:2;\r
-               } BIT;\r
-       } TCRW;\r
-       char           wk6[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char IOC:5;\r
-               } BIT;\r
-       } TIORW;\r
-       char           wk7[11];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :5;\r
-                       unsigned char TGIE5U:1;\r
-                       unsigned char TGIE5V:1;\r
-                       unsigned char TGIE5W:1;\r
-               } BIT;\r
-       } TIER;\r
-       char           wk8[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :5;\r
-                       unsigned char CSTU5:1;\r
-                       unsigned char CSTV5:1;\r
-                       unsigned char CSTW5:1;\r
-               } BIT;\r
-       } TSTR;\r
-       char           wk9[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :5;\r
-                       unsigned char CMPCLR5U:1;\r
-                       unsigned char CMPCLR5V:1;\r
-                       unsigned char CMPCLR5W:1;\r
-               } BIT;\r
-       } TCNTCMPCLR;\r
-};\r
-\r
-struct st_poe {\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short POE3F:1;\r
-                       unsigned short POE2F:1;\r
-                       unsigned short POE1F:1;\r
-                       unsigned short POE0F:1;\r
-                       unsigned short :3;\r
-                       unsigned short PIE1:1;\r
-                       unsigned short POE3M:2;\r
-                       unsigned short POE2M:2;\r
-                       unsigned short POE1M:2;\r
-                       unsigned short POE0M:2;\r
-               } BIT;\r
-       } ICSR1;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short OSF1:1;\r
-                       unsigned short :5;\r
-                       unsigned short OCE1:1;\r
-                       unsigned short OIE1:1;\r
-               } BIT;\r
-       } OCSR1;\r
-       char           wk0[4];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :3;\r
-                       unsigned short POE8F:1;\r
-                       unsigned short :2;\r
-                       unsigned short POE8E:1;\r
-                       unsigned short PIE2:1;\r
-                       unsigned short :6;\r
-                       unsigned short POE8M:2;\r
-               } BIT;\r
-       } ICSR2;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :6;\r
-                       unsigned char CH0HIZ:1;\r
-                       unsigned char CH34HIZ:1;\r
-               } BIT;\r
-       } SPOER;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :4;\r
-                       unsigned char PE3ZE:1;\r
-                       unsigned char PE2ZE:1;\r
-                       unsigned char PE1ZE:1;\r
-                       unsigned char PE0ZE:1;\r
-               } BIT;\r
-       } POECR1;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char P1CZEA:1;\r
-                       unsigned char P2CZEA:1;\r
-                       unsigned char P3CZEA:1;\r
-               } BIT;\r
-       } POECR2;\r
-       char           wk1[1];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :3;\r
-                       unsigned short OSTSTF:1;\r
-                       unsigned short :2;\r
-                       unsigned short OSTSTE:1;\r
-               } BIT;\r
-       } ICSR3;\r
-};\r
-\r
-struct st_port0 {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char :1;\r
-                       unsigned char B5:1;\r
-                       unsigned char :1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PDR;\r
-       char           wk0[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char :1;\r
-                       unsigned char B5:1;\r
-                       unsigned char :1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PODR;\r
-       char           wk1[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char :1;\r
-                       unsigned char B5:1;\r
-                       unsigned char :1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PIDR;\r
-       char           wk2[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char :1;\r
-                       unsigned char B5:1;\r
-                       unsigned char :1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PMR;\r
-       char           wk3[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char :1;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :3;\r
-                       unsigned char B2:1;\r
-               } BIT;\r
-       } ODR1;\r
-       char           wk4[62];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char :1;\r
-                       unsigned char B5:1;\r
-                       unsigned char :1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PCR;\r
-       char           wk5[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :5;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } DSCR;\r
-};\r
-\r
-struct st_port1 {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PDR;\r
-       char           wk0[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PODR;\r
-       char           wk1[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PIDR;\r
-       char           wk2[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PMR;\r
-       char           wk3[32];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char :1;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char :1;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR1;\r
-       char           wk4[61];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PCR;\r
-};\r
-\r
-struct st_port2 {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PDR;\r
-       char           wk0[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PODR;\r
-       char           wk1[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PIDR;\r
-       char           wk2[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PMR;\r
-       char           wk3[33];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char :1;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char :1;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR1;\r
-       char           wk4[60];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PCR;\r
-       char           wk5[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-               } BIT;\r
-       } DSCR;\r
-};\r
-\r
-struct st_port3 {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PDR;\r
-       char           wk0[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PODR;\r
-       char           wk1[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PIDR;\r
-       char           wk2[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PMR;\r
-       char           wk3[34];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char :1;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char :1;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR1;\r
-       char           wk4[59];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PCR;\r
-};\r
-\r
-struct st_port4 {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PDR;\r
-       char           wk0[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PODR;\r
-       char           wk1[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PIDR;\r
-       char           wk2[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PMR;\r
-       char           wk3[35];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char :1;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char :1;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR1;\r
-       char           wk4[58];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PCR;\r
-};\r
-\r
-struct st_port5 {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PDR;\r
-       char           wk0[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PODR;\r
-       char           wk1[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PIDR;\r
-       char           wk2[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PMR;\r
-       char           wk3[36];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char :1;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char :1;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR1;\r
-       char           wk4[57];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PCR;\r
-       char           wk5[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :3;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } DSCR;\r
-};\r
-\r
-struct st_port6 {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PDR;\r
-       char           wk0[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PODR;\r
-       char           wk1[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PIDR;\r
-       char           wk2[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PMR;\r
-       char           wk3[37];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char :1;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char :1;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR1;\r
-       char           wk4[56];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PCR;\r
-};\r
-\r
-struct st_port7 {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PDR;\r
-       char           wk0[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PODR;\r
-       char           wk1[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PIDR;\r
-       char           wk2[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PMR;\r
-       char           wk3[38];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char :1;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char :1;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR1;\r
-       char           wk4[55];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PCR;\r
-};\r
-\r
-struct st_port8 {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PDR;\r
-       char           wk0[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PODR;\r
-       char           wk1[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PIDR;\r
-       char           wk2[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PMR;\r
-       char           wk3[39];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char :1;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char :1;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR1;\r
-       char           wk4[54];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PCR;\r
-};\r
-\r
-struct st_port9 {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PDR;\r
-       char           wk0[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PODR;\r
-       char           wk1[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PIDR;\r
-       char           wk2[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PMR;\r
-       char           wk3[40];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char :1;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char :1;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR1;\r
-       char           wk4[53];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PCR;\r
-       char           wk5[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } DSCR;\r
-};\r
-\r
-struct st_porta {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PDR;\r
-       char           wk0[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PODR;\r
-       char           wk1[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PIDR;\r
-       char           wk2[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PMR;\r
-       char           wk3[41];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char :1;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char :1;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR1;\r
-       char           wk4[52];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PCR;\r
-       char           wk5[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } DSCR;\r
-};\r
-\r
-struct st_portb {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PDR;\r
-       char           wk0[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PODR;\r
-       char           wk1[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PIDR;\r
-       char           wk2[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PMR;\r
-       char           wk3[42];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char :1;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char :1;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR1;\r
-       char           wk4[51];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PCR;\r
-       char           wk5[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } DSCR;\r
-};\r
-\r
-struct st_portc {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PDR;\r
-       char           wk0[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PODR;\r
-       char           wk1[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PIDR;\r
-       char           wk2[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PMR;\r
-       char           wk3[43];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char :1;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char :1;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR1;\r
-       char           wk4[50];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PCR;\r
-       char           wk5[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } DSCR;\r
-};\r
-\r
-struct st_portd {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PDR;\r
-       char           wk0[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PODR;\r
-       char           wk1[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PIDR;\r
-       char           wk2[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PMR;\r
-       char           wk3[44];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char :1;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char :1;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR1;\r
-       char           wk4[49];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PCR;\r
-       char           wk5[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } DSCR;\r
-};\r
-\r
-struct st_porte {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PDR;\r
-       char           wk0[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PODR;\r
-       char           wk1[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PIDR;\r
-       char           wk2[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PMR;\r
-       char           wk3[45];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char :1;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR1;\r
-       char           wk4[48];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PCR;\r
-       char           wk5[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } DSCR;\r
-};\r
-\r
-struct st_portf {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PDR;\r
-       char           wk0[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PODR;\r
-       char           wk1[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PIDR;\r
-       char           wk2[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PMR;\r
-       char           wk3[46];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char :1;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :5;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR1;\r
-       char           wk4[47];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PCR;\r
-};\r
-\r
-struct st_portg {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PDR;\r
-       char           wk0[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PODR;\r
-       char           wk1[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PIDR;\r
-       char           wk2[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PMR;\r
-       char           wk3[47];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char :1;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char :1;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR1;\r
-       char           wk4[46];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PCR;\r
-       char           wk5[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :6;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } DSCR;\r
-};\r
-\r
-struct st_porth {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PCR;\r
-};\r
-\r
-struct st_portj {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char B5:1;\r
-                       unsigned char :1;\r
-                       unsigned char B3:1;\r
-               } BIT;\r
-       } PDR;\r
-       char           wk0[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char B5:1;\r
-                       unsigned char :1;\r
-                       unsigned char B3:1;\r
-               } BIT;\r
-       } PODR;\r
-       char           wk1[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char B5:1;\r
-                       unsigned char :1;\r
-                       unsigned char B3:1;\r
-               } BIT;\r
-       } PIDR;\r
-       char           wk2[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char B5:1;\r
-                       unsigned char :1;\r
-                       unsigned char B3:1;\r
-               } BIT;\r
-       } PMR;\r
-       char           wk3[49];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-               } BIT;\r
-       } ODR0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :5;\r
-                       unsigned char B2:1;\r
-               } BIT;\r
-       } ODR1;\r
-       char           wk4[44];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char B5:1;\r
-                       unsigned char :1;\r
-                       unsigned char B3:1;\r
-               } BIT;\r
-       } PCR;\r
-};\r
-\r
-struct st_ppg0 {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char G3CMS:2;\r
-                       unsigned char G2CMS:2;\r
-                       unsigned char G1CMS:2;\r
-                       unsigned char G0CMS:2;\r
-               } BIT;\r
-       } PCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char G3INV:1;\r
-                       unsigned char G2INV:1;\r
-                       unsigned char G1INV:1;\r
-                       unsigned char G0INV:1;\r
-                       unsigned char G3NOV:1;\r
-                       unsigned char G2NOV:1;\r
-                       unsigned char G1NOV:1;\r
-                       unsigned char G0NOV:1;\r
-               } BIT;\r
-       } PMR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char NDER15:1;\r
-                       unsigned char NDER14:1;\r
-                       unsigned char NDER13:1;\r
-                       unsigned char NDER12:1;\r
-                       unsigned char NDER11:1;\r
-                       unsigned char NDER10:1;\r
-                       unsigned char NDER9:1;\r
-                       unsigned char NDER8:1;\r
-               } BIT;\r
-       } NDERH;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char NDER7:1;\r
-                       unsigned char NDER6:1;\r
-                       unsigned char NDER5:1;\r
-                       unsigned char NDER4:1;\r
-                       unsigned char NDER3:1;\r
-                       unsigned char NDER2:1;\r
-                       unsigned char NDER1:1;\r
-                       unsigned char NDER0:1;\r
-               } BIT;\r
-       } NDERL;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char POD15:1;\r
-                       unsigned char POD14:1;\r
-                       unsigned char POD13:1;\r
-                       unsigned char POD12:1;\r
-                       unsigned char POD11:1;\r
-                       unsigned char POD10:1;\r
-                       unsigned char POD9:1;\r
-                       unsigned char POD8:1;\r
-               } BIT;\r
-       } PODRH;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char POD7:1;\r
-                       unsigned char POD6:1;\r
-                       unsigned char POD5:1;\r
-                       unsigned char POD4:1;\r
-                       unsigned char POD3:1;\r
-                       unsigned char POD2:1;\r
-                       unsigned char POD1:1;\r
-                       unsigned char POD0:1;\r
-               } BIT;\r
-       } PODRL;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char NDR15:1;\r
-                       unsigned char NDR14:1;\r
-                       unsigned char NDR13:1;\r
-                       unsigned char NDR12:1;\r
-                       unsigned char NDR11:1;\r
-                       unsigned char NDR10:1;\r
-                       unsigned char NDR9:1;\r
-                       unsigned char NDR8:1;\r
-               } BIT;\r
-       } NDRH;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char NDR7:1;\r
-                       unsigned char NDR6:1;\r
-                       unsigned char NDR5:1;\r
-                       unsigned char NDR4:1;\r
-                       unsigned char NDR3:1;\r
-                       unsigned char NDR2:1;\r
-                       unsigned char NDR1:1;\r
-                       unsigned char NDR0:1;\r
-               } BIT;\r
-       } NDRL;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :4;\r
-                       unsigned char NDR11:1;\r
-                       unsigned char NDR10:1;\r
-                       unsigned char NDR9:1;\r
-                       unsigned char NDR8:1;\r
-               } BIT;\r
-       } NDRH2;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :4;\r
-                       unsigned char NDR3:1;\r
-                       unsigned char NDR2:1;\r
-                       unsigned char NDR1:1;\r
-                       unsigned char NDR0:1;\r
-               } BIT;\r
-       } NDRL2;\r
-};\r
-\r
-struct st_ppg1 {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char PTRSL:1;\r
-               } BIT;\r
-       } PTRSLR;\r
-       char           wk0[5];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char G3CMS:2;\r
-                       unsigned char G2CMS:2;\r
-                       unsigned char G1CMS:2;\r
-                       unsigned char G0CMS:2;\r
-               } BIT;\r
-       } PCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char G3INV:1;\r
-                       unsigned char G2INV:1;\r
-                       unsigned char G1INV:1;\r
-                       unsigned char G0INV:1;\r
-                       unsigned char G3NOV:1;\r
-                       unsigned char G2NOV:1;\r
-                       unsigned char G1NOV:1;\r
-                       unsigned char G0NOV:1;\r
-               } BIT;\r
-       } PMR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char NDER31:1;\r
-                       unsigned char NDER30:1;\r
-                       unsigned char NDER29:1;\r
-                       unsigned char NDER28:1;\r
-                       unsigned char NDER27:1;\r
-                       unsigned char NDER26:1;\r
-                       unsigned char NDER25:1;\r
-                       unsigned char NDER24:1;\r
-               } BIT;\r
-       } NDERH;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char NDER23:1;\r
-                       unsigned char NDER22:1;\r
-                       unsigned char NDER21:1;\r
-                       unsigned char NDER20:1;\r
-                       unsigned char NDER19:1;\r
-                       unsigned char NDER18:1;\r
-                       unsigned char NDER17:1;\r
-                       unsigned char NDER16:1;\r
-               } BIT;\r
-       } NDERL;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char POD31:1;\r
-                       unsigned char POD30:1;\r
-                       unsigned char POD29:1;\r
-                       unsigned char POD28:1;\r
-                       unsigned char POD27:1;\r
-                       unsigned char POD26:1;\r
-                       unsigned char POD25:1;\r
-                       unsigned char POD24:1;\r
-               } BIT;\r
-       } PODRH;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char POD23:1;\r
-                       unsigned char POD22:1;\r
-                       unsigned char POD21:1;\r
-                       unsigned char POD20:1;\r
-                       unsigned char POD19:1;\r
-                       unsigned char POD18:1;\r
-                       unsigned char POD17:1;\r
-                       unsigned char POD16:1;\r
-               } BIT;\r
-       } PODRL;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char NDR31:1;\r
-                       unsigned char NDR30:1;\r
-                       unsigned char NDR29:1;\r
-                       unsigned char NDR28:1;\r
-                       unsigned char NDR27:1;\r
-                       unsigned char NDR26:1;\r
-                       unsigned char NDR25:1;\r
-                       unsigned char NDR24:1;\r
-               } BIT;\r
-       } NDRH;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char NDR23:1;\r
-                       unsigned char NDR22:1;\r
-                       unsigned char NDR21:1;\r
-                       unsigned char NDR20:1;\r
-                       unsigned char NDR19:1;\r
-                       unsigned char NDR18:1;\r
-                       unsigned char NDR17:1;\r
-                       unsigned char NDR16:1;\r
-               } BIT;\r
-       } NDRL;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :4;\r
-                       unsigned char NDR27:1;\r
-                       unsigned char NDR26:1;\r
-                       unsigned char NDR25:1;\r
-                       unsigned char NDR24:1;\r
-               } BIT;\r
-       } NDRH2;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :4;\r
-                       unsigned char NDR19:1;\r
-                       unsigned char NDR18:1;\r
-                       unsigned char NDR17:1;\r
-                       unsigned char NDR16:1;\r
-               } BIT;\r
-       } NDRL2;\r
-};\r
-\r
-struct st_riic0 {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ICE:1;\r
-                       unsigned char IICRST:1;\r
-                       unsigned char CLO:1;\r
-                       unsigned char SOWP:1;\r
-                       unsigned char SCLO:1;\r
-                       unsigned char SDAO:1;\r
-                       unsigned char SCLI:1;\r
-                       unsigned char SDAI:1;\r
-               } BIT;\r
-       } ICCR1;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char BBSY:1;\r
-                       unsigned char MST:1;\r
-                       unsigned char TRS:1;\r
-                       unsigned char :1;\r
-                       unsigned char SP:1;\r
-                       unsigned char RS:1;\r
-                       unsigned char ST:1;\r
-               } BIT;\r
-       } ICCR2;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char MTWP:1;\r
-                       unsigned char CKS:3;\r
-                       unsigned char BCWP:1;\r
-                       unsigned char BC:3;\r
-               } BIT;\r
-       } ICMR1;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char DLCS:1;\r
-                       unsigned char SDDL:3;\r
-                       unsigned char :1;\r
-                       unsigned char TMOH:1;\r
-                       unsigned char TMOL:1;\r
-                       unsigned char TMOS:1;\r
-               } BIT;\r
-       } ICMR2;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char SMBS:1;\r
-                       unsigned char WAIT:1;\r
-                       unsigned char RDRFS:1;\r
-                       unsigned char ACKWP:1;\r
-                       unsigned char ACKBT:1;\r
-                       unsigned char ACKBR:1;\r
-                       unsigned char NF:2;\r
-               } BIT;\r
-       } ICMR3;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char FMPE:1;\r
-                       unsigned char SCLE:1;\r
-                       unsigned char NFE:1;\r
-                       unsigned char NACKE:1;\r
-                       unsigned char SALE:1;\r
-                       unsigned char NALE:1;\r
-                       unsigned char MALE:1;\r
-                       unsigned char TMOE:1;\r
-               } BIT;\r
-       } ICFER;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char HOAE:1;\r
-                       unsigned char :1;\r
-                       unsigned char DIDE:1;\r
-                       unsigned char :1;\r
-                       unsigned char GCAE:1;\r
-                       unsigned char SAR2E:1;\r
-                       unsigned char SAR1E:1;\r
-                       unsigned char SAR0E:1;\r
-               } BIT;\r
-       } ICSER;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TIE:1;\r
-                       unsigned char TEIE:1;\r
-                       unsigned char RIE:1;\r
-                       unsigned char NAKIE:1;\r
-                       unsigned char SPIE:1;\r
-                       unsigned char STIE:1;\r
-                       unsigned char ALIE:1;\r
-                       unsigned char TMOIE:1;\r
-               } BIT;\r
-       } ICIER;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char HOA:1;\r
-                       unsigned char :1;\r
-                       unsigned char DID:1;\r
-                       unsigned char :1;\r
-                       unsigned char GCA:1;\r
-                       unsigned char AAS2:1;\r
-                       unsigned char AAS1:1;\r
-                       unsigned char AAS0:1;\r
-               } BIT;\r
-       } ICSR1;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TDRE:1;\r
-                       unsigned char TEND:1;\r
-                       unsigned char RDRF:1;\r
-                       unsigned char NACKF:1;\r
-                       unsigned char STOP:1;\r
-                       unsigned char START:1;\r
-                       unsigned char AL:1;\r
-                       unsigned char TMOF:1;\r
-               } BIT;\r
-       } ICSR2;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char SVA:7;\r
-                       unsigned char SVA0:1;\r
-               } BIT;\r
-       } SARL0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :5;\r
-                       unsigned char SVA:2;\r
-                       unsigned char FS:1;\r
-               } BIT;\r
-       } SARU0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char SVA:7;\r
-                       unsigned char SVA0:1;\r
-               } BIT;\r
-       } SARL1;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :5;\r
-                       unsigned char SVA:2;\r
-                       unsigned char FS:1;\r
-               } BIT;\r
-       } SARU1;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char SVA:7;\r
-                       unsigned char SVA0:1;\r
-               } BIT;\r
-       } SARL2;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :5;\r
-                       unsigned char SVA:2;\r
-                       unsigned char FS:1;\r
-               } BIT;\r
-       } SARU2;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char BRL:5;\r
-               } BIT;\r
-       } ICBRL;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char BRH:5;\r
-               } BIT;\r
-       } ICBRH;\r
-       unsigned char  ICDRT;\r
-       unsigned char  ICDRR;\r
-};\r
-\r
-struct st_riic1 {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ICE:1;\r
-                       unsigned char IICRST:1;\r
-                       unsigned char CLO:1;\r
-                       unsigned char SOWP:1;\r
-                       unsigned char SCLO:1;\r
-                       unsigned char SDAO:1;\r
-                       unsigned char SCLI:1;\r
-                       unsigned char SDAI:1;\r
-               } BIT;\r
-       } ICCR1;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char BBSY:1;\r
-                       unsigned char MST:1;\r
-                       unsigned char TRS:1;\r
-                       unsigned char :1;\r
-                       unsigned char SP:1;\r
-                       unsigned char RS:1;\r
-                       unsigned char ST:1;\r
-               } BIT;\r
-       } ICCR2;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char MTWP:1;\r
-                       unsigned char CKS:3;\r
-                       unsigned char BCWP:1;\r
-                       unsigned char BC:3;\r
-               } BIT;\r
-       } ICMR1;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char DLCS:1;\r
-                       unsigned char SDDL:3;\r
-                       unsigned char :1;\r
-                       unsigned char TMOH:1;\r
-                       unsigned char TMOL:1;\r
-                       unsigned char TMOS:1;\r
-               } BIT;\r
-       } ICMR2;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char SMBS:1;\r
-                       unsigned char WAIT:1;\r
-                       unsigned char RDRFS:1;\r
-                       unsigned char ACKWP:1;\r
-                       unsigned char ACKBT:1;\r
-                       unsigned char ACKBR:1;\r
-                       unsigned char NF:2;\r
-               } BIT;\r
-       } ICMR3;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char SCLE:1;\r
-                       unsigned char NFE:1;\r
-                       unsigned char NACKE:1;\r
-                       unsigned char SALE:1;\r
-                       unsigned char NALE:1;\r
-                       unsigned char MALE:1;\r
-                       unsigned char TMOE:1;\r
-               } BIT;\r
-       } ICFER;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char HOAE:1;\r
-                       unsigned char :1;\r
-                       unsigned char DIDE:1;\r
-                       unsigned char :1;\r
-                       unsigned char GCAE:1;\r
-                       unsigned char SAR2E:1;\r
-                       unsigned char SAR1E:1;\r
-                       unsigned char SAR0E:1;\r
-               } BIT;\r
-       } ICSER;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TIE:1;\r
-                       unsigned char TEIE:1;\r
-                       unsigned char RIE:1;\r
-                       unsigned char NAKIE:1;\r
-                       unsigned char SPIE:1;\r
-                       unsigned char STIE:1;\r
-                       unsigned char ALIE:1;\r
-                       unsigned char TMOIE:1;\r
-               } BIT;\r
-       } ICIER;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char HOA:1;\r
-                       unsigned char :1;\r
-                       unsigned char DID:1;\r
-                       unsigned char :1;\r
-                       unsigned char GCA:1;\r
-                       unsigned char AAS2:1;\r
-                       unsigned char AAS1:1;\r
-                       unsigned char AAS0:1;\r
-               } BIT;\r
-       } ICSR1;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TDRE:1;\r
-                       unsigned char TEND:1;\r
-                       unsigned char RDRF:1;\r
-                       unsigned char NACKF:1;\r
-                       unsigned char STOP:1;\r
-                       unsigned char START:1;\r
-                       unsigned char AL:1;\r
-                       unsigned char TMOF:1;\r
-               } BIT;\r
-       } ICSR2;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char SVA:7;\r
-                       unsigned char SVA0:1;\r
-               } BIT;\r
-       } SARL0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :5;\r
-                       unsigned char SVA:2;\r
-                       unsigned char FS:1;\r
-               } BIT;\r
-       } SARU0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char SVA:7;\r
-                       unsigned char SVA0:1;\r
-               } BIT;\r
-       } SARL1;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :5;\r
-                       unsigned char SVA:2;\r
-                       unsigned char FS:1;\r
-               } BIT;\r
-       } SARU1;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char SVA:7;\r
-                       unsigned char SVA0:1;\r
-               } BIT;\r
-       } SARL2;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :5;\r
-                       unsigned char SVA:2;\r
-                       unsigned char FS:1;\r
-               } BIT;\r
-       } SARU2;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char BRL:5;\r
-               } BIT;\r
-       } ICBRL;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char BRH:5;\r
-               } BIT;\r
-       } ICBRH;\r
-       unsigned char  ICDRT;\r
-       unsigned char  ICDRR;\r
-};\r
-\r
-struct st_rspi {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char SPRIE:1;\r
-                       unsigned char SPE:1;\r
-                       unsigned char SPTIE:1;\r
-                       unsigned char SPEIE:1;\r
-                       unsigned char MSTR:1;\r
-                       unsigned char MODFEN:1;\r
-                       unsigned char TXMD:1;\r
-                       unsigned char SPMS:1;\r
-               } BIT;\r
-       } SPCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :4;\r
-                       unsigned char SSL3P:1;\r
-                       unsigned char SSL2P:1;\r
-                       unsigned char SSL1P:1;\r
-                       unsigned char SSL0P:1;\r
-               } BIT;\r
-       } SSLP;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char MOIFE:1;\r
-                       unsigned char MOIFV:1;\r
-                       unsigned char :1;\r
-                       unsigned char SPOM:1;\r
-                       unsigned char SPLP2:1;\r
-                       unsigned char SPLP:1;\r
-               } BIT;\r
-       } SPPCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :4;\r
-                       unsigned char PERF:1;\r
-                       unsigned char MODF:1;\r
-                       unsigned char IDLNF:1;\r
-                       unsigned char OVRF:1;\r
-               } BIT;\r
-       } SPSR;\r
-       //unsigned long  SPDR;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned short H;\r
-                       unsigned short L;\r
-               } WORD;\r
-       } SPDR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :5;\r
-                       unsigned char SPSLN:3;\r
-               } BIT;\r
-       } SPSCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char SPECM:3;\r
-                       unsigned char :1;\r
-                       unsigned char SPCP:3;\r
-               } BIT;\r
-       } SPSSR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char SPR7:1;\r
-                       unsigned char SPR6:1;\r
-                       unsigned char SPR5:1;\r
-                       unsigned char SPR4:1;\r
-                       unsigned char SPR3:1;\r
-                       unsigned char SPR2:1;\r
-                       unsigned char SPR1:1;\r
-                       unsigned char SPR0:1;\r
-               } BIT;\r
-       } SPBR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char SPLW:1;\r
-                       unsigned char SPRDTD:1;\r
-                       unsigned char SLSEL:2;\r
-                       unsigned char SPFC:2;\r
-               } BIT;\r
-       } SPDCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :5;\r
-                       unsigned char SCKDL:3;\r
-               } BIT;\r
-       } SPCKD;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :5;\r
-                       unsigned char SLNDL:3;\r
-               } BIT;\r
-       } SSLND;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :5;\r
-                       unsigned char SPNDL:3;\r
-               } BIT;\r
-       } SPND;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :4;\r
-                       unsigned char PTE:1;\r
-                       unsigned char SPIIE:1;\r
-                       unsigned char SPOE:1;\r
-                       unsigned char SPPE:1;\r
-               } BIT;\r
-       } SPCR2;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short SCKDEN:1;\r
-                       unsigned short SLNDEN:1;\r
-                       unsigned short SPNDEN:1;\r
-                       unsigned short LSBF:1;\r
-                       unsigned short SPB:4;\r
-                       unsigned short SSLKP:1;\r
-                       unsigned short SSLA:3;\r
-                       unsigned short BRDV:2;\r
-                       unsigned short CPOL:1;\r
-                       unsigned short CPHA:1;\r
-               } BIT;\r
-       } SPCMD0;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short SCKDEN:1;\r
-                       unsigned short SLNDEN:1;\r
-                       unsigned short SPNDEN:1;\r
-                       unsigned short LSBF:1;\r
-                       unsigned short SPB:4;\r
-                       unsigned short SSLKP:1;\r
-                       unsigned short SSLA:3;\r
-                       unsigned short BRDV:2;\r
-                       unsigned short CPOL:1;\r
-                       unsigned short CPHA:1;\r
-               } BIT;\r
-       } SPCMD1;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short SCKDEN:1;\r
-                       unsigned short SLNDEN:1;\r
-                       unsigned short SPNDEN:1;\r
-                       unsigned short LSBF:1;\r
-                       unsigned short SPB:4;\r
-                       unsigned short SSLKP:1;\r
-                       unsigned short SSLA:3;\r
-                       unsigned short BRDV:2;\r
-                       unsigned short CPOL:1;\r
-                       unsigned short CPHA:1;\r
-               } BIT;\r
-       } SPCMD2;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short SCKDEN:1;\r
-                       unsigned short SLNDEN:1;\r
-                       unsigned short SPNDEN:1;\r
-                       unsigned short LSBF:1;\r
-                       unsigned short SPB:4;\r
-                       unsigned short SSLKP:1;\r
-                       unsigned short SSLA:3;\r
-                       unsigned short BRDV:2;\r
-                       unsigned short CPOL:1;\r
-                       unsigned short CPHA:1;\r
-               } BIT;\r
-       } SPCMD3;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short SCKDEN:1;\r
-                       unsigned short SLNDEN:1;\r
-                       unsigned short SPNDEN:1;\r
-                       unsigned short LSBF:1;\r
-                       unsigned short SPB:4;\r
-                       unsigned short SSLKP:1;\r
-                       unsigned short SSLA:3;\r
-                       unsigned short BRDV:2;\r
-                       unsigned short CPOL:1;\r
-                       unsigned short CPHA:1;\r
-               } BIT;\r
-       } SPCMD4;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short SCKDEN:1;\r
-                       unsigned short SLNDEN:1;\r
-                       unsigned short SPNDEN:1;\r
-                       unsigned short LSBF:1;\r
-                       unsigned short SPB:4;\r
-                       unsigned short SSLKP:1;\r
-                       unsigned short SSLA:3;\r
-                       unsigned short BRDV:2;\r
-                       unsigned short CPOL:1;\r
-                       unsigned short CPHA:1;\r
-               } BIT;\r
-       } SPCMD5;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short SCKDEN:1;\r
-                       unsigned short SLNDEN:1;\r
-                       unsigned short SPNDEN:1;\r
-                       unsigned short LSBF:1;\r
-                       unsigned short SPB:4;\r
-                       unsigned short SSLKP:1;\r
-                       unsigned short SSLA:3;\r
-                       unsigned short BRDV:2;\r
-                       unsigned short CPOL:1;\r
-                       unsigned short CPHA:1;\r
-               } BIT;\r
-       } SPCMD6;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short SCKDEN:1;\r
-                       unsigned short SLNDEN:1;\r
-                       unsigned short SPNDEN:1;\r
-                       unsigned short LSBF:1;\r
-                       unsigned short SPB:4;\r
-                       unsigned short SSLKP:1;\r
-                       unsigned short SSLA:3;\r
-                       unsigned short BRDV:2;\r
-                       unsigned short CPOL:1;\r
-                       unsigned short CPHA:1;\r
-               } BIT;\r
-       } SPCMD7;\r
-};\r
-\r
-struct st_rtc {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char F1HZ:1;\r
-                       unsigned char F2HZ:1;\r
-                       unsigned char F4HZ:1;\r
-                       unsigned char F8HZ:1;\r
-                       unsigned char F16HZ:1;\r
-                       unsigned char F32HZ:1;\r
-                       unsigned char F64HZ:1;\r
-               } BIT;\r
-       } R64CNT;\r
-       char           wk0[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char SEC10:3;\r
-                       unsigned char SEC1:4;\r
-               } BIT;\r
-       } RSECCNT;\r
-       char           wk1[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char MIN10:3;\r
-                       unsigned char MIN1:4;\r
-               } BIT;\r
-       } RMINCNT;\r
-       char           wk2[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char PM:1;\r
-                       unsigned char HR10:2;\r
-                       unsigned char HR1:4;\r
-               } BIT;\r
-       } RHRCNT;\r
-       char           wk3[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :5;\r
-                       unsigned char DAYW:3;\r
-               } BIT;\r
-       } RWKCNT;\r
-       char           wk4[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char DATE10:2;\r
-                       unsigned char DATE1:4;\r
-               } BIT;\r
-       } RDAYCNT;\r
-       char           wk5[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char MON10:1;\r
-                       unsigned char MON1:4;\r
-               } BIT;\r
-       } RMONCNT;\r
-       char           wk6[1];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :8;\r
-                       unsigned short YR10:4;\r
-                       unsigned short YR1:4;\r
-               } BIT;\r
-       } RYRCNT;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ENB:1;\r
-                       unsigned char SEC10:3;\r
-                       unsigned char SEC1:4;\r
-               } BIT;\r
-       } RSECAR;\r
-       char           wk7[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ENB:1;\r
-                       unsigned char MIN10:3;\r
-                       unsigned char MIN1:4;\r
-               } BIT;\r
-       } RMINAR;\r
-       char           wk8[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ENB:1;\r
-                       unsigned char PM:1;\r
-                       unsigned char HR10:2;\r
-                       unsigned char HR1:4;\r
-               } BIT;\r
-       } RHRAR;\r
-       char           wk9[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ENB:1;\r
-                       unsigned char :4;\r
-                       unsigned char DAYW:3;\r
-               } BIT;\r
-       } RWKAR;\r
-       char           wk10[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ENB:1;\r
-                       unsigned char :1;\r
-                       unsigned char DATE10:2;\r
-                       unsigned char DATE1:4;\r
-               } BIT;\r
-       } RDAYAR;\r
-       char           wk11[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ENB:1;\r
-                       unsigned char :2;\r
-                       unsigned char MON10:1;\r
-                       unsigned char MON1:4;\r
-               } BIT;\r
-       } RMONAR;\r
-       char           wk12[1];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :8;\r
-                       unsigned short YR10:4;\r
-                       unsigned short YR1:4;\r
-               } BIT;\r
-       } RYRAR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ENB:1;\r
-               } BIT;\r
-       } RYRAREN;\r
-       char           wk13[3];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char PES:4;\r
-                       unsigned char :1;\r
-                       unsigned char PIE:1;\r
-                       unsigned char CIE:1;\r
-                       unsigned char AIE:1;\r
-               } BIT;\r
-       } RCR1;\r
-       char           wk14[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char HR24:1;\r
-                       unsigned char AADJP:1;\r
-                       unsigned char AADJE:1;\r
-                       unsigned char RTCOE:1;\r
-                       unsigned char ADJ30:1;\r
-                       unsigned char RESET:1;\r
-                       unsigned char START:1;\r
-               } BIT;\r
-       } RCR2;\r
-       char           wk15[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char RTCEN:1;\r
-               } BIT;\r
-       } RCR3;\r
-       char           wk16[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char RCKSEL:1;\r
-               } BIT;\r
-       } RCR4;\r
-       char           wk17[1];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :15;\r
-                       unsigned short RFC:1;\r
-               } BIT;\r
-       } RFRH;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short RFC:16;\r
-               } BIT;\r
-       } RFRL;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char PMADJ:2;\r
-                       unsigned char ADJ:6;\r
-               } BIT;\r
-       } RADJ;\r
-       char           wk18[17];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TCEN:1;\r
-                       unsigned char :1;\r
-                       unsigned char TCNF:2;\r
-                       unsigned char :1;\r
-                       unsigned char TCST:1;\r
-                       unsigned char TCCT:2;\r
-               } BIT;\r
-       } RTCCR0;\r
-       char           wk19[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TCEN:1;\r
-                       unsigned char :1;\r
-                       unsigned char TCNF:2;\r
-                       unsigned char :1;\r
-                       unsigned char TCST:1;\r
-                       unsigned char TCCT:2;\r
-               } BIT;\r
-       } RTCCR1;\r
-       char           wk20[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TCEN:1;\r
-                       unsigned char :1;\r
-                       unsigned char TCNF:2;\r
-                       unsigned char :1;\r
-                       unsigned char TCST:1;\r
-                       unsigned char TCCT:2;\r
-               } BIT;\r
-       } RTCCR2;\r
-       char           wk21[13];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char SEC10:3;\r
-                       unsigned char SEC1:4;\r
-               } BIT;\r
-       } RSECCP0;\r
-       char           wk22[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char MIN10:3;\r
-                       unsigned char MIN1:4;\r
-               } BIT;\r
-       } RMINCP0;\r
-       char           wk23[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char PM:1;\r
-                       unsigned char HR10:2;\r
-                       unsigned char HR1:4;\r
-               } BIT;\r
-       } RHRCP0;\r
-       char           wk24[3];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char DATE10:3;\r
-                       unsigned char DATE1:4;\r
-               } BIT;\r
-       } RDAYCP0;\r
-       char           wk25[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char MON10:1;\r
-                       unsigned char MON1:4;\r
-               } BIT;\r
-       } RMONCP0;\r
-       char           wk26[5];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char SEC10:3;\r
-                       unsigned char SEC1:4;\r
-               } BIT;\r
-       } RSECCP1;\r
-       char           wk27[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char MIN10:3;\r
-                       unsigned char MIN1:4;\r
-               } BIT;\r
-       } RMINCP1;\r
-       char           wk28[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char PM:1;\r
-                       unsigned char HR10:2;\r
-                       unsigned char HR1:4;\r
-               } BIT;\r
-       } RHRCP1;\r
-       char           wk29[3];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char DATE10:3;\r
-                       unsigned char DATE1:4;\r
-               } BIT;\r
-       } RDAYCP1;\r
-       char           wk30[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char MON10:1;\r
-                       unsigned char MON1:4;\r
-               } BIT;\r
-       } RMONCP1;\r
-       char           wk31[5];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char SEC10:3;\r
-                       unsigned char SEC1:4;\r
-               } BIT;\r
-       } RSECCP2;\r
-       char           wk32[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char MIN10:3;\r
-                       unsigned char MIN1:4;\r
-               } BIT;\r
-       } RMINCP2;\r
-       char           wk33[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char PM:1;\r
-                       unsigned char HR10:2;\r
-                       unsigned char HR1:4;\r
-               } BIT;\r
-       } RHRCP2;\r
-       char           wk34[3];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char DATE10:3;\r
-                       unsigned char DATE1:4;\r
-               } BIT;\r
-       } RDAYCP2;\r
-       char           wk35[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char MON10:1;\r
-                       unsigned char MON1:4;\r
-               } BIT;\r
-       } RMONCP2;\r
-};\r
-\r
-struct st_s12ad {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ADST:1;\r
-                       unsigned char ADCS:1;\r
-                       unsigned char :1;\r
-                       unsigned char ADIE:1;\r
-                       unsigned char CKS:2;\r
-                       unsigned char TRGE:1;\r
-                       unsigned char EXTRG:1;\r
-               } BIT;\r
-       } ADCSR;\r
-       char           wk0[3];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short ANS0:16;\r
-               } BIT;\r
-       } ADANS0;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :11;\r
-                       unsigned short ANS1:5;\r
-               } BIT;\r
-       } ADANS1;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short ADS0:16;\r
-               } BIT;\r
-       } ADADS0;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :11;\r
-                       unsigned short ADS1:5;\r
-               } BIT;\r
-       } ADADS1;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :6;\r
-                       unsigned char ADC:2;\r
-               } BIT;\r
-       } ADADC;\r
-       char           wk1[1];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short ADRFMT:1;\r
-                       unsigned short :9;\r
-                       unsigned short ACE:1;\r
-               } BIT;\r
-       } ADCER;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :4;\r
-                       unsigned char ADSTRS:4;\r
-               } BIT;\r
-       } ADSTRGR;\r
-       char           wk2[1];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :6;\r
-                       unsigned short OCS:1;\r
-                       unsigned short TSS:1;\r
-                       unsigned short :6;\r
-                       unsigned short OCSAD:1;\r
-                       unsigned short TSSAD:1;\r
-               } BIT;\r
-       } ADEXICR;\r
-       char           wk3[6];\r
-       unsigned short ADTSDR;\r
-       unsigned short ADOCDR;\r
-       char           wk4[2];\r
-       unsigned short ADDR0;\r
-       unsigned short ADDR1;\r
-       unsigned short ADDR2;\r
-       unsigned short ADDR3;\r
-       unsigned short ADDR4;\r
-       unsigned short ADDR5;\r
-       unsigned short ADDR6;\r
-       unsigned short ADDR7;\r
-       unsigned short ADDR8;\r
-       unsigned short ADDR9;\r
-       unsigned short ADDR10;\r
-       unsigned short ADDR11;\r
-       unsigned short ADDR12;\r
-       unsigned short ADDR13;\r
-       unsigned short ADDR14;\r
-       unsigned short ADDR15;\r
-       unsigned short ADDR16;\r
-       unsigned short ADDR17;\r
-       unsigned short ADDR18;\r
-       unsigned short ADDR19;\r
-       unsigned short ADDR20;\r
-       char           wk5[38];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short SST2:8;\r
-               } BIT;\r
-       } ADSSTR23;\r
-};\r
-\r
-struct st_sci0 {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char CM:1;\r
-                       unsigned char CHR:1;\r
-                       unsigned char PE:1;\r
-                       unsigned char PM:1;\r
-                       unsigned char STOP:1;\r
-                       unsigned char MP:1;\r
-                       unsigned char CKS:2;\r
-               } BIT;\r
-       } SMR;\r
-       unsigned char  BRR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TIE:1;\r
-                       unsigned char RIE:1;\r
-                       unsigned char TE:1;\r
-                       unsigned char RE:1;\r
-                       unsigned char MPIE:1;\r
-                       unsigned char TEIE:1;\r
-                       unsigned char CKE:2;\r
-               } BIT;\r
-       } SCR;\r
-       unsigned char  TDR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char ORER:1;\r
-                       unsigned char FER:1;\r
-                       unsigned char PER:1;\r
-                       unsigned char TEND:1;\r
-                       unsigned char MPB:1;\r
-                       unsigned char MPBT:1;\r
-               } BIT;\r
-       } SSR;\r
-       unsigned char  RDR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char BCP2:1;\r
-                       unsigned char :3;\r
-                       unsigned char SDIR:1;\r
-                       unsigned char SINV:1;\r
-                       unsigned char :1;\r
-                       unsigned char SMIF:1;\r
-               } BIT;\r
-       } SCMR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char NFEN:1;\r
-                       unsigned char ABCS:1;\r
-                       unsigned char :3;\r
-                       unsigned char ACS0:1;\r
-               } BIT;\r
-       } SEMR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :5;\r
-                       unsigned char NFCS:3;\r
-               } BIT;\r
-       } SNFR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char IICDL:5;\r
-                       unsigned char :2;\r
-                       unsigned char IICM:1;\r
-               } BIT;\r
-       } SIMR1;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char IICACKT:1;\r
-                       unsigned char :3;\r
-                       unsigned char IICCSC:1;\r
-                       unsigned char IICINTM:1;\r
-               } BIT;\r
-       } SIMR2;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char IICSCLS:2;\r
-                       unsigned char IICSDAS:2;\r
-                       unsigned char IICSTIF:1;\r
-                       unsigned char IICSTPREQ:1;\r
-                       unsigned char IICRSTAREQ:1;\r
-                       unsigned char IICSTAREQ:1;\r
-               } BIT;\r
-       } SIMR3;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char IICACKR:1;\r
-               } BIT;\r
-       } SISR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char CKPH:1;\r
-                       unsigned char CKPOL:1;\r
-                       unsigned char :1;\r
-                       unsigned char MFF:1;\r
-                       unsigned char :1;\r
-                       unsigned char MSS:1;\r
-                       unsigned char CTSE:1;\r
-                       unsigned char SSE:1;\r
-               } BIT;\r
-       } SPMR;\r
-};\r
-\r
-struct st_sci7 {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char CM:1;\r
-                       unsigned char CHR:1;\r
-                       unsigned char PE:1;\r
-                       unsigned char PM:1;\r
-                       unsigned char STOP:1;\r
-                       unsigned char MP:1;\r
-                       unsigned char CKS:2;\r
-               } BIT;\r
-       } SMR;\r
-       unsigned char  BRR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TIE:1;\r
-                       unsigned char RIE:1;\r
-                       unsigned char TE:1;\r
-                       unsigned char RE:1;\r
-                       unsigned char MPIE:1;\r
-                       unsigned char TEIE:1;\r
-                       unsigned char CKE:2;\r
-               } BIT;\r
-       } SCR;\r
-       unsigned char  TDR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char ORER:1;\r
-                       unsigned char FER:1;\r
-                       unsigned char PER:1;\r
-                       unsigned char TEND:1;\r
-                       unsigned char MPB:1;\r
-                       unsigned char MPBT:1;\r
-               } BIT;\r
-       } SSR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :6;\r
-                       unsigned char MPB:1;\r
-                       unsigned char MPBT:1;\r
-               } BIT;\r
-       } RDR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char BCP2:1;\r
-                       unsigned char :3;\r
-                       unsigned char SDIR:1;\r
-                       unsigned char SINV:1;\r
-                       unsigned char :1;\r
-                       unsigned char SMIF:1;\r
-               } BIT;\r
-       } SCMR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char NFEN:1;\r
-                       unsigned char ABCS:1;\r
-                       unsigned char :3;\r
-                       unsigned char ACS0:1;\r
-               } BIT;\r
-       } SEMR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :5;\r
-                       unsigned char NFCS:3;\r
-               } BIT;\r
-       } SNFR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char IICDL:5;\r
-                       unsigned char :2;\r
-                       unsigned char IICM:1;\r
-               } BIT;\r
-       } SIMR1;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char IICACKT:1;\r
-                       unsigned char :3;\r
-                       unsigned char IICCSC:1;\r
-                       unsigned char IICINTM:1;\r
-               } BIT;\r
-       } SIMR2;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char IICSCLS:2;\r
-                       unsigned char IICSDAS:2;\r
-                       unsigned char IICSTIF:1;\r
-                       unsigned char IICSTPREQ:1;\r
-                       unsigned char IICRSTAREQ:1;\r
-                       unsigned char IICSTAREQ:1;\r
-               } BIT;\r
-       } SIMR3;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char IICACKR:1;\r
-               } BIT;\r
-       } SISR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char CKPH:1;\r
-                       unsigned char CKPOL:1;\r
-                       unsigned char :1;\r
-                       unsigned char MFF:1;\r
-                       unsigned char :1;\r
-                       unsigned char MSS:1;\r
-                       unsigned char CTSE:1;\r
-                       unsigned char SSE:1;\r
-               } BIT;\r
-       } SPMR;\r
-};\r
-\r
-struct st_sci12 {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char CM:1;\r
-                       unsigned char CHR:1;\r
-                       unsigned char PE:1;\r
-                       unsigned char PM:1;\r
-                       unsigned char STOP:1;\r
-                       unsigned char MP:1;\r
-                       unsigned char CKS:2;\r
-               } BIT;\r
-       } SMR;\r
-       unsigned char  BRR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TIE:1;\r
-                       unsigned char RIE:1;\r
-                       unsigned char TE:1;\r
-                       unsigned char RE:1;\r
-                       unsigned char MPIE:1;\r
-                       unsigned char TEIE:1;\r
-                       unsigned char CKE:2;\r
-               } BIT;\r
-       } SCR;\r
-       unsigned char  TDR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char ORER:1;\r
-                       unsigned char FER:1;\r
-                       unsigned char PER:1;\r
-                       unsigned char TEND:1;\r
-                       unsigned char MPB:1;\r
-                       unsigned char MPBT:1;\r
-               } BIT;\r
-       } SSR;\r
-       unsigned char  RDR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char BCP2:1;\r
-                       unsigned char :3;\r
-                       unsigned char SDIR:1;\r
-                       unsigned char SINV:1;\r
-                       unsigned char :1;\r
-                       unsigned char SMIF:1;\r
-               } BIT;\r
-       } SCMR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char NFEN:1;\r
-                       unsigned char ABCS:1;\r
-                       unsigned char :3;\r
-                       unsigned char ACS0:1;\r
-               } BIT;\r
-       } SEMR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :5;\r
-                       unsigned char NFCS:3;\r
-               } BIT;\r
-       } SNFR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char IICDL:5;\r
-                       unsigned char :2;\r
-                       unsigned char IICM:1;\r
-               } BIT;\r
-       } SIMR1;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char IICACKT:1;\r
-                       unsigned char :3;\r
-                       unsigned char IICCSC:1;\r
-                       unsigned char IICINTM:1;\r
-               } BIT;\r
-       } SIMR2;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char IICSCLS:2;\r
-                       unsigned char IICSDAS:2;\r
-                       unsigned char IICSTIF:1;\r
-                       unsigned char IICSTPREQ:1;\r
-                       unsigned char IICRSTAREQ:1;\r
-                       unsigned char IICSTAREQ:1;\r
-               } BIT;\r
-       } SIMR3;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char IICACKR:1;\r
-               } BIT;\r
-       } SISR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char CKPH:1;\r
-                       unsigned char CKPOL:1;\r
-                       unsigned char :1;\r
-                       unsigned char MFF:1;\r
-                       unsigned char :1;\r
-                       unsigned char MSS:1;\r
-                       unsigned char CTSE:1;\r
-                       unsigned char SSE:1;\r
-               } BIT;\r
-       } SPMR;\r
-       char           wk0[18];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char ESME:1;\r
-               } BIT;\r
-       } ESMER;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :4;\r
-                       unsigned char BRME:1;\r
-                       unsigned char RXDSF:1;\r
-                       unsigned char SFSF:1;\r
-               } BIT;\r
-       } CR0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char PIBS:3;\r
-                       unsigned char PIBE:1;\r
-                       unsigned char CF1DS:2;\r
-                       unsigned char CF0RE:1;\r
-                       unsigned char BFE:1;\r
-               } BIT;\r
-       } CR1;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char RTS:2;\r
-                       unsigned char BCCS:2;\r
-                       unsigned char :1;\r
-                       unsigned char DFCS:3;\r
-               } BIT;\r
-       } CR2;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char SDST:1;\r
-               } BIT;\r
-       } CR3;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char SHARPS:1;\r
-                       unsigned char :2;\r
-                       unsigned char RXDXPS:1;\r
-                       unsigned char TXDXPS:1;\r
-               } BIT;\r
-       } PCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char AEDIE:1;\r
-                       unsigned char BCDIE:1;\r
-                       unsigned char PIBDIE:1;\r
-                       unsigned char CF1MIE:1;\r
-                       unsigned char CF0MIE:1;\r
-                       unsigned char BFDIE:1;\r
-               } BIT;\r
-       } ICR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char AEDF:1;\r
-                       unsigned char BCDF:1;\r
-                       unsigned char PIBDF:1;\r
-                       unsigned char CF1MF:1;\r
-                       unsigned char CF0MF:1;\r
-                       unsigned char BFDF:1;\r
-               } BIT;\r
-       } STR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char AEDCL:1;\r
-                       unsigned char BCDCL:1;\r
-                       unsigned char PIBDCL:1;\r
-                       unsigned char CF1MCL:1;\r
-                       unsigned char CF0MCL:1;\r
-                       unsigned char BFDCL:1;\r
-               } BIT;\r
-       } STCR;\r
-       unsigned char  CF0DR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char CF0CE7:1;\r
-                       unsigned char CF0CE6:1;\r
-                       unsigned char CF0CE5:1;\r
-                       unsigned char CF0CE4:1;\r
-                       unsigned char CF0CE3:1;\r
-                       unsigned char CF0CE2:1;\r
-                       unsigned char CF0CE1:1;\r
-                       unsigned char CF0CE0:1;\r
-               } BIT;\r
-       } CF0CR;\r
-       unsigned char  CF0RR;\r
-       unsigned char  PCF1DR;\r
-       unsigned char  SCF1DR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char CF1CE7:1;\r
-                       unsigned char CF1CE6:1;\r
-                       unsigned char CF1CE5:1;\r
-                       unsigned char CF1CE4:1;\r
-                       unsigned char CF1CE3:1;\r
-                       unsigned char CF1CE2:1;\r
-                       unsigned char CF1CE1:1;\r
-                       unsigned char CF1CE0:1;\r
-               } BIT;\r
-       } CF1CR;\r
-       unsigned char  CF1RR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char TCST:1;\r
-               } BIT;\r
-       } TCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char TCSS:3;\r
-                       unsigned char TWRC:1;\r
-                       unsigned char :1;\r
-                       unsigned char TOMS:2;\r
-               } BIT;\r
-       } TMR;\r
-       unsigned char  TPRE;\r
-       unsigned char  TCNT;\r
-};\r
-\r
-struct st_smci0 {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char GM:1;\r
-                       unsigned char BCLK:1;\r
-                       unsigned char PE:1;\r
-                       unsigned char PM:1;\r
-                       unsigned char BCP:2;\r
-                       unsigned char CKS:2;\r
-               } BIT;\r
-       } SMR;\r
-       unsigned char  BRR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TIE:1;\r
-                       unsigned char RIE:1;\r
-                       unsigned char TE:1;\r
-                       unsigned char RE:1;\r
-                       unsigned char MPIE:1;\r
-                       unsigned char TEIE:1;\r
-                       unsigned char CKE:2;\r
-               } BIT;\r
-       } SCR;\r
-       unsigned char  TDR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char ORER:1;\r
-                       unsigned char ERS:1;\r
-                       unsigned char PER:1;\r
-                       unsigned char TEND:1;\r
-                       unsigned char MPB:1;\r
-                       unsigned char MPBT:1;\r
-               } BIT;\r
-       } SSR;\r
-       unsigned char  RDR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char BCP2:1;\r
-                       unsigned char :3;\r
-                       unsigned char SDIR:1;\r
-                       unsigned char SINV:1;\r
-                       unsigned char :1;\r
-                       unsigned char SMIF:1;\r
-               } BIT;\r
-       } SCMR;\r
-};\r
-\r
-struct st_smci7 {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char GM:1;\r
-                       unsigned char BCLK:1;\r
-                       unsigned char PE:1;\r
-                       unsigned char PM:1;\r
-                       unsigned char BCP:2;\r
-                       unsigned char CKS:2;\r
-               } BIT;\r
-       } SMR;\r
-       unsigned char  BRR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TIE:1;\r
-                       unsigned char RIE:1;\r
-                       unsigned char TE:1;\r
-                       unsigned char RE:1;\r
-                       unsigned char MPIE:1;\r
-                       unsigned char TEIE:1;\r
-                       unsigned char CKE:2;\r
-               } BIT;\r
-       } SCR;\r
-       unsigned char  TDR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char ORER:1;\r
-                       unsigned char ERS:1;\r
-                       unsigned char PER:1;\r
-                       unsigned char TEND:1;\r
-               } BIT;\r
-       } SSR;\r
-       unsigned char  RDR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char BCP2:1;\r
-                       unsigned char :3;\r
-                       unsigned char SDIR:1;\r
-                       unsigned char SINV:1;\r
-                       unsigned char :1;\r
-                       unsigned char SMIF:1;\r
-               } BIT;\r
-       } SCMR;\r
-};\r
-\r
-struct st_system {\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :15;\r
-                       unsigned short MD:1;\r
-               } BIT;\r
-       } MDMONR;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :10;\r
-                       unsigned short UBTS:1;\r
-                       unsigned short BOTS:1;\r
-                       unsigned short :2;\r
-                       unsigned short EXB:1;\r
-                       unsigned short IROM:1;\r
-               } BIT;\r
-       } MDSR;\r
-       char           wk0[2];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short KEY:8;\r
-                       unsigned short :6;\r
-                       unsigned short EXBE:1;\r
-                       unsigned short ROME:1;\r
-               } BIT;\r
-       } SYSCR0;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :15;\r
-                       unsigned short RAME:1;\r
-               } BIT;\r
-       } SYSCR1;\r
-       char           wk1[2];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short SSBY:1;\r
-                       unsigned short OPE:1;\r
-               } BIT;\r
-       } SBYCR;\r
-       char           wk2[2];\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long ACSE:1;\r
-                       unsigned long :1;\r
-                       unsigned long MSTPA29:1;\r
-                       unsigned long MSTPA28:1;\r
-                       unsigned long MSTPA27:1;\r
-                       unsigned long :2;\r
-                       unsigned long MSTPA24:1;\r
-                       unsigned long MSTPA23:1;\r
-                       unsigned long :3;\r
-                       unsigned long MSTPA19:1;\r
-                       unsigned long :1;\r
-                       unsigned long MSTPA17:1;\r
-                       unsigned long :1;\r
-                       unsigned long MSTPA15:1;\r
-                       unsigned long MSTPA14:1;\r
-                       unsigned long MSTPA13:1;\r
-                       unsigned long MSTPA12:1;\r
-                       unsigned long MSTPA11:1;\r
-                       unsigned long MSTPA10:1;\r
-                       unsigned long MSTPA9:1;\r
-                       unsigned long :3;\r
-                       unsigned long MSTPA5:1;\r
-                       unsigned long MSTPA4:1;\r
-               } BIT;\r
-       } MSTPCRA;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long MSTPB31:1;\r
-                       unsigned long MSTPB30:1;\r
-                       unsigned long MSTPB29:1;\r
-                       unsigned long MSTPB28:1;\r
-                       unsigned long MSTPB27:1;\r
-                       unsigned long MSTPB26:1;\r
-                       unsigned long MSTPB25:1;\r
-                       unsigned long MSTPB24:1;\r
-                       unsigned long MSTPB23:1;\r
-                       unsigned long :1;\r
-                       unsigned long MSTPB21:1;\r
-                       unsigned long MSTPB20:1;\r
-                       unsigned long MSTPB19:1;\r
-                       unsigned long MSTPB18:1;\r
-                       unsigned long MSTPB17:1;\r
-                       unsigned long MSTPB16:1;\r
-                       unsigned long MSTPB15:1;\r
-                       unsigned long :6;\r
-                       unsigned long MSTPB8:1;\r
-                       unsigned long :3;\r
-                       unsigned long MSTPB4:1;\r
-                       unsigned long :1;\r
-                       unsigned long MSTPB2:1;\r
-                       unsigned long MSTPB1:1;\r
-                       unsigned long MSTPB0:1;\r
-               } BIT;\r
-       } MSTPCRB;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :4;\r
-                       unsigned long MSTPC27:1;\r
-                       unsigned long MSTPC26:1;\r
-                       unsigned long MSTPC25:1;\r
-                       unsigned long MSTPC24:1;\r
-                       unsigned long :1;\r
-                       unsigned long MSTPC22:1;\r
-                       unsigned long :2;\r
-                       unsigned long MSTPC19:1;\r
-                       unsigned long MSTPC18:1;\r
-                       unsigned long MSTPC17:1;\r
-                       unsigned long MSTPC16:1;\r
-                       unsigned long :14;\r
-                       unsigned long MSTPC1:1;\r
-                       unsigned long MSTPC0:1;\r
-               } BIT;\r
-       } MSTPCRC;\r
-       char           wk3[4];\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long FCK:4;\r
-                       unsigned long ICK:4;\r
-                       unsigned long PSTOP1:1;\r
-                       unsigned long PSTOP0:1;\r
-                       unsigned long :2;\r
-                       unsigned long BCK:4;\r
-                       unsigned long PCKA:4;\r
-                       unsigned long PCKB:4;\r
-               } BIT;\r
-       } SCKCR;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :8;\r
-                       unsigned short UCK:4;\r
-                       unsigned short IEBCK:4;\r
-               } BIT;\r
-       } SCKCR2;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :5;\r
-                       unsigned short CKSEL:3;\r
-               } BIT;\r
-       } SCKCR3;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :2;\r
-                       unsigned short STC:6;\r
-                       unsigned short :6;\r
-                       unsigned short PLIDIV:2;\r
-               } BIT;\r
-       } PLLCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char PLLEN:1;\r
-               } BIT;\r
-       } PLLCR2;\r
-       char           wk4[5];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char BCLKDIV:1;\r
-               } BIT;\r
-       } BCKCR;\r
-       char           wk5[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char MOSTP:1;\r
-               } BIT;\r
-       } MOSCCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char SOSTP:1;\r
-               } BIT;\r
-       } SOSCCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char LCSTP:1;\r
-               } BIT;\r
-       } LOCOCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char ILCSTP:1;\r
-               } BIT;\r
-       } ILOCOCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char HCSTP:1;\r
-               } BIT;\r
-       } HOCOCR;\r
-       char           wk6[9];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char OSTDE:1;\r
-                       unsigned char :6;\r
-                       unsigned char OSTDIE:1;\r
-               } BIT;\r
-       } OSTDCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char OSTDF:1;\r
-               } BIT;\r
-       } OSTDSR;\r
-       char           wk7[94];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char OPCMTSF:1;\r
-                       unsigned char :1;\r
-                       unsigned char OPCM:3;\r
-               } BIT;\r
-       } OPCCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char RSTCKEN:1;\r
-                       unsigned char :4;\r
-                       unsigned char RSTCKSEL:3;\r
-               } BIT;\r
-       } RSTCKCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char MSTS:5;\r
-               } BIT;\r
-       } MOSCWTCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char SSTS:5;\r
-               } BIT;\r
-       } SOSCWTCR;\r
-       char           wk8[2];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSTS:5;\r
-               } BIT;\r
-       } PLLWTCR;\r
-       char           wk9[25];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :5;\r
-                       unsigned char SWRF:1;\r
-                       unsigned char WDTRF:1;\r
-                       unsigned char IWTDRF:1;\r
-               } BIT;\r
-       } RSTSR2;\r
-       char           wk10[1];\r
-       unsigned short SWRR;\r
-       char           wk11[28];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :6;\r
-                       unsigned char LVD1IDTSEL:2;\r
-               } BIT;\r
-       } LVD1CR1;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :6;\r
-                       unsigned char LVD1MON:1;\r
-                       unsigned char LVD1DET:1;\r
-               } BIT;\r
-       } LVD1SR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :6;\r
-                       unsigned char LVD2IDTSEL:2;\r
-               } BIT;\r
-       } LVD2CR1;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :6;\r
-                       unsigned char LVD2MON:1;\r
-                       unsigned char LVD2DET:1;\r
-               } BIT;\r
-       } LVD2SR;\r
-       char           wk12[794];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short PRKEY:8;\r
-                       unsigned short :4;\r
-                       unsigned short PRC3:1;\r
-                       unsigned short :1;\r
-                       unsigned short PRC1:1;\r
-                       unsigned short PRC0:1;\r
-               } BIT;\r
-       } PRCR;\r
-       char           wk13[48768];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char DPSBY:1;\r
-                       unsigned char IOKEEP:1;\r
-                       unsigned char :4;\r
-                       unsigned char DEEPCUT:2;\r
-               } BIT;\r
-       } DPSBYCR;\r
-       char           wk14[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char DIRQ7E:1;\r
-                       unsigned char DIRQ6E:1;\r
-                       unsigned char DIRQ5E:1;\r
-                       unsigned char DIRQ4E:1;\r
-                       unsigned char DIRQ3E:1;\r
-                       unsigned char DIRQ2E:1;\r
-                       unsigned char DIRQ1E:1;\r
-                       unsigned char DIRQ0E:1;\r
-               } BIT;\r
-       } DPSIER0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char DIRQ15E:1;\r
-                       unsigned char DIRQ14E:1;\r
-                       unsigned char DIRQ13E:1;\r
-                       unsigned char DIRQ12E:1;\r
-                       unsigned char DIRQ11E:1;\r
-                       unsigned char DIRQ10E:1;\r
-                       unsigned char DIRQ9E:1;\r
-                       unsigned char DIRQ8E:1;\r
-               } BIT;\r
-       } DPSIER1;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char DUSBIE:1;\r
-                       unsigned char DIICCIE:1;\r
-                       unsigned char DIICDIE:1;\r
-                       unsigned char DNMIE:1;\r
-                       unsigned char DRTCAIE:1;\r
-                       unsigned char DRTCIIE:1;\r
-                       unsigned char DLVD2IE:1;\r
-                       unsigned char DLVD1IE:1;\r
-               } BIT;\r
-       } DPSIER2;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char DCANIE:1;\r
-               } BIT;\r
-       } DPSIER3;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char DIRQ7F:1;\r
-                       unsigned char DIRQ6F:1;\r
-                       unsigned char DIRQ5F:1;\r
-                       unsigned char DIRQ4F:1;\r
-                       unsigned char DIRQ3F:1;\r
-                       unsigned char DIRQ2F:1;\r
-                       unsigned char DIRQ1F:1;\r
-                       unsigned char DIRQ0F:1;\r
-               } BIT;\r
-       } DPSIFR0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char DIRQ15F:1;\r
-                       unsigned char DIRQ14F:1;\r
-                       unsigned char DIRQ13F:1;\r
-                       unsigned char DIRQ12F:1;\r
-                       unsigned char DIRQ11F:1;\r
-                       unsigned char DIRQ10F:1;\r
-                       unsigned char DIRQ9F:1;\r
-                       unsigned char DIRQ8F:1;\r
-               } BIT;\r
-       } DPSIFR1;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char DUSBIF:1;\r
-                       unsigned char DIICCIF:1;\r
-                       unsigned char DIICDIF:1;\r
-                       unsigned char DNMIF:1;\r
-                       unsigned char DRTCAIF:1;\r
-                       unsigned char DRTCIIF:1;\r
-                       unsigned char DLVD2IF:1;\r
-                       unsigned char DLVD1IF:1;\r
-               } BIT;\r
-       } DPSIFR2;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char DCANIF:1;\r
-               } BIT;\r
-       } DPSIFR3;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char DIRQ7EG:1;\r
-                       unsigned char DIRQ6EG:1;\r
-                       unsigned char DIRQ5EG:1;\r
-                       unsigned char DIRQ4EG:1;\r
-                       unsigned char DIRQ3EG:1;\r
-                       unsigned char DIRQ2EG:1;\r
-                       unsigned char DIRQ1EG:1;\r
-                       unsigned char DIRQ0EG:1;\r
-               } BIT;\r
-       } DPSIEGR0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char DIRQ15EG:1;\r
-                       unsigned char DIRQ14EG:1;\r
-                       unsigned char DIRQ13EG:1;\r
-                       unsigned char DIRQ12EG:1;\r
-                       unsigned char DIRQ11EG:1;\r
-                       unsigned char DIRQ10EG:1;\r
-                       unsigned char DIRQ9EG:1;\r
-                       unsigned char DIRQ8EG:1;\r
-               } BIT;\r
-       } DPSIEGR1;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char DIICCEG:1;\r
-                       unsigned char DIICDEG:1;\r
-                       unsigned char DNMIEG:1;\r
-                       unsigned char :2;\r
-                       unsigned char DLVD2EG:1;\r
-                       unsigned char DLVD1EG:1;\r
-               } BIT;\r
-       } DPSIEGR2;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char DCANIEG:1;\r
-               } BIT;\r
-       } DPSIEGR3;\r
-       char           wk15[2];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char DPSRSTF:1;\r
-                       unsigned char :3;\r
-                       unsigned char LVD2RF:1;\r
-                       unsigned char LVD1RF:1;\r
-                       unsigned char LVD0RF:1;\r
-                       unsigned char PORF:1;\r
-               } BIT;\r
-       } RSTSR0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char CWSF:1;\r
-               } BIT;\r
-       } RSTSR1;\r
-       char           wk16[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char MOFXIN:1;\r
-               } BIT;\r
-       } MOFCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char HOCOPCNT:1;\r
-               } BIT;\r
-       } HOCOPCR;\r
-       char           wk17[2];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char LVD2E:1;\r
-                       unsigned char LVD1E:1;\r
-               } BIT;\r
-       } LVCMPCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char LVD2LVL:4;\r
-                       unsigned char LVD1LVL:4;\r
-               } BIT;\r
-       } LVDLVLR;\r
-       char           wk18[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char LVD1RN:1;\r
-                       unsigned char LVD1RI:1;\r
-                       unsigned char LVD1FSAMP:2;\r
-                       unsigned char :1;\r
-                       unsigned char LVD1CMPE:1;\r
-                       unsigned char LVD1DFDIS:1;\r
-                       unsigned char LVD1RIE:1;\r
-               } BIT;\r
-       } LVD1CR0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char LVD2RN:1;\r
-                       unsigned char LVD2RI:1;\r
-                       unsigned char LVD2FSAMP:2;\r
-                       unsigned char :1;\r
-                       unsigned char LVD2CMPE:1;\r
-                       unsigned char LVD2DFDIS:1;\r
-                       unsigned char LVD2RIE:1;\r
-               } BIT;\r
-       } LVD2CR0;\r
-       char           wk19[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char VBATTMNSEL:1;\r
-               } BIT;\r
-       } VBATTMNSELR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char VBATTMON:1;\r
-               } BIT;\r
-       } VBATTMONR;\r
-       char           wk20[1];\r
-       unsigned char  DPSBKR[32];\r
-       char           wk21[1472];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :6;\r
-                       unsigned char SCK:2;\r
-               } BIT;\r
-       } SCK1;\r
-       char           wk22[15];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :6;\r
-                       unsigned char SCK:2;\r
-               } BIT;\r
-       } SCK2;\r
-};\r
-\r
-struct st_temps {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TSEN:1;\r
-                       unsigned char :2;\r
-                       unsigned char TSOE:1;\r
-               } BIT;\r
-       } TSCR;\r
-};\r
-\r
-struct st_tmr0 {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char CMIEB:1;\r
-                       unsigned char CMIEA:1;\r
-                       unsigned char OVIE:1;\r
-                       unsigned char CCLR:2;\r
-               } BIT;\r
-       } TCR;\r
-       char           wk0[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char ADTE:1;\r
-                       unsigned char OSB:2;\r
-                       unsigned char OSA:2;\r
-               } BIT;\r
-       } TCSR;\r
-       char           wk1[1];\r
-       unsigned char  TCORA;\r
-       char           wk2[1];\r
-       unsigned char  TCORB;\r
-       char           wk3[1];\r
-       unsigned char  TCNT;\r
-       char           wk4[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TMRIS:1;\r
-                       unsigned char :2;\r
-                       unsigned char CSS:2;\r
-                       unsigned char CKS:3;\r
-               } BIT;\r
-       } TCCR;\r
-};\r
-\r
-struct st_tmr1 {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char CMIEB:1;\r
-                       unsigned char CMIEA:1;\r
-                       unsigned char OVIE:1;\r
-                       unsigned char CCLR:2;\r
-               } BIT;\r
-       } TCR;\r
-       char           wk0[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :4;\r
-                       unsigned char OSB:2;\r
-                       unsigned char OSA:2;\r
-               } BIT;\r
-       } TCSR;\r
-       char           wk1[1];\r
-       unsigned char  TCORA;\r
-       char           wk2[1];\r
-       unsigned char  TCORB;\r
-       char           wk3[1];\r
-       unsigned char  TCNT;\r
-       char           wk4[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TMRIS:1;\r
-                       unsigned char :2;\r
-                       unsigned char CSS:2;\r
-                       unsigned char CKS:3;\r
-               } BIT;\r
-       } TCCR;\r
-};\r
-\r
-struct st_tmr01 {\r
-       unsigned short TCORA;\r
-       unsigned short TCORB;\r
-       unsigned short TCNT;\r
-       unsigned short TCCR;\r
-};\r
-\r
-struct st_tpu0 {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char NFCS:2;\r
-                       unsigned char NFDEN:1;\r
-                       unsigned char NFCEN:1;\r
-                       unsigned char NFBEN:1;\r
-                       unsigned char NFAEN:1;\r
-               } BIT;\r
-       } NFCR;\r
-       char           wk0[7];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char CCLR:3;\r
-                       unsigned char CKEG:2;\r
-                       unsigned char TPSC:3;\r
-               } BIT;\r
-       } TCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ICSELD:1;\r
-                       unsigned char ICSELB:1;\r
-                       unsigned char BFB:1;\r
-                       unsigned char BFA:1;\r
-                       unsigned char MD:4;\r
-               } BIT;\r
-       } TMDR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char IOB:4;\r
-                       unsigned char IOA:4;\r
-               } BIT;\r
-       } TIORH;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char IOD:4;\r
-                       unsigned char IOC:4;\r
-               } BIT;\r
-       } TIORL;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TTGE:1;\r
-                       unsigned char :1;\r
-                       unsigned char TCIEU:1;\r
-                       unsigned char TCIEV:1;\r
-                       unsigned char TGIED:1;\r
-                       unsigned char TGIEC:1;\r
-                       unsigned char TGIEB:1;\r
-                       unsigned char TGIEA:1;\r
-               } BIT;\r
-       } TIER;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TCFD:1;\r
-                       unsigned char :1;\r
-                       unsigned char TCFU:1;\r
-                       unsigned char TCFV:1;\r
-                       unsigned char TGFD:1;\r
-                       unsigned char TGFC:1;\r
-                       unsigned char TGFB:1;\r
-                       unsigned char TGFA:1;\r
-               } BIT;\r
-       } TSR;\r
-       unsigned short TCNT;\r
-       unsigned short TGRA;\r
-       unsigned short TGRB;\r
-       unsigned short TGRC;\r
-       unsigned short TGRD;\r
-};\r
-\r
-struct st_tpu1 {\r
-       char           wk0[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char NFCS:2;\r
-                       unsigned char NFDEN:1;\r
-                       unsigned char NFCEN:1;\r
-                       unsigned char NFBEN:1;\r
-                       unsigned char NFAEN:1;\r
-               } BIT;\r
-       } NFCR;\r
-       char           wk1[22];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char CCLR:3;\r
-                       unsigned char CKEG:2;\r
-                       unsigned char TPSC:3;\r
-               } BIT;\r
-       } TCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ICSELD:1;\r
-                       unsigned char ICSELB:1;\r
-                       unsigned char BFB:1;\r
-                       unsigned char BFA:1;\r
-                       unsigned char MD:4;\r
-               } BIT;\r
-       } TMDR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char IOB:4;\r
-                       unsigned char IOA:4;\r
-               } BIT;\r
-       } TIOR;\r
-       char           wk2[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TTGE:1;\r
-                       unsigned char :1;\r
-                       unsigned char TCIEU:1;\r
-                       unsigned char TCIEV:1;\r
-                       unsigned char TGIED:1;\r
-                       unsigned char TGIEC:1;\r
-                       unsigned char TGIEB:1;\r
-                       unsigned char TGIEA:1;\r
-               } BIT;\r
-       } TIER;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TCFD:1;\r
-                       unsigned char :1;\r
-                       unsigned char TCFU:1;\r
-                       unsigned char TCFV:1;\r
-                       unsigned char TGFD:1;\r
-                       unsigned char TGFC:1;\r
-                       unsigned char TGFB:1;\r
-                       unsigned char TGFA:1;\r
-               } BIT;\r
-       } TSR;\r
-       unsigned short TCNT;\r
-       unsigned short TGRA;\r
-       unsigned short TGRB;\r
-};\r
-\r
-struct st_tpu2 {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char NFCS:2;\r
-                       unsigned char NFDEN:1;\r
-                       unsigned char NFCEN:1;\r
-                       unsigned char NFBEN:1;\r
-                       unsigned char NFAEN:1;\r
-               } BIT;\r
-       } NFCR;\r
-       char           wk0[37];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char CCLR:3;\r
-                       unsigned char CKEG:2;\r
-                       unsigned char TPSC:3;\r
-               } BIT;\r
-       } TCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ICSELD:1;\r
-                       unsigned char ICSELB:1;\r
-                       unsigned char BFB:1;\r
-                       unsigned char BFA:1;\r
-                       unsigned char MD:4;\r
-               } BIT;\r
-       } TMDR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char IOB:4;\r
-                       unsigned char IOA:4;\r
-               } BIT;\r
-       } TIOR;\r
-       char           wk1[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TTGE:1;\r
-                       unsigned char :1;\r
-                       unsigned char TCIEU:1;\r
-                       unsigned char TCIEV:1;\r
-                       unsigned char TGIED:1;\r
-                       unsigned char TGIEC:1;\r
-                       unsigned char TGIEB:1;\r
-                       unsigned char TGIEA:1;\r
-               } BIT;\r
-       } TIER;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TCFD:1;\r
-                       unsigned char :1;\r
-                       unsigned char TCFU:1;\r
-                       unsigned char TCFV:1;\r
-                       unsigned char TGFD:1;\r
-                       unsigned char TGFC:1;\r
-                       unsigned char TGFB:1;\r
-                       unsigned char TGFA:1;\r
-               } BIT;\r
-       } TSR;\r
-       unsigned short TCNT;\r
-       unsigned short TGRA;\r
-       unsigned short TGRB;\r
-};\r
-\r
-struct st_tpu3 {\r
-       char           wk0[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char NFCS:2;\r
-                       unsigned char NFDEN:1;\r
-                       unsigned char NFCEN:1;\r
-                       unsigned char NFBEN:1;\r
-                       unsigned char NFAEN:1;\r
-               } BIT;\r
-       } NFCR;\r
-       char           wk1[52];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char CCLR:3;\r
-                       unsigned char CKEG:2;\r
-                       unsigned char TPSC:3;\r
-               } BIT;\r
-       } TCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ICSELD:1;\r
-                       unsigned char ICSELB:1;\r
-                       unsigned char BFB:1;\r
-                       unsigned char BFA:1;\r
-                       unsigned char MD:4;\r
-               } BIT;\r
-       } TMDR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char IOB:4;\r
-                       unsigned char IOA:4;\r
-               } BIT;\r
-       } TIORH;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char IOD:4;\r
-                       unsigned char IOC:4;\r
-               } BIT;\r
-       } TIORL;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TTGE:1;\r
-                       unsigned char :1;\r
-                       unsigned char TCIEU:1;\r
-                       unsigned char TCIEV:1;\r
-                       unsigned char TGIED:1;\r
-                       unsigned char TGIEC:1;\r
-                       unsigned char TGIEB:1;\r
-                       unsigned char TGIEA:1;\r
-               } BIT;\r
-       } TIER;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TCFD:1;\r
-                       unsigned char :1;\r
-                       unsigned char TCFU:1;\r
-                       unsigned char TCFV:1;\r
-                       unsigned char TGFD:1;\r
-                       unsigned char TGFC:1;\r
-                       unsigned char TGFB:1;\r
-                       unsigned char TGFA:1;\r
-               } BIT;\r
-       } TSR;\r
-       unsigned short TCNT;\r
-       unsigned short TGRA;\r
-       unsigned short TGRB;\r
-       unsigned short TGRC;\r
-       unsigned short TGRD;\r
-};\r
-\r
-struct st_tpu4 {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char NFCS:2;\r
-                       unsigned char NFDEN:1;\r
-                       unsigned char NFCEN:1;\r
-                       unsigned char NFBEN:1;\r
-                       unsigned char NFAEN:1;\r
-               } BIT;\r
-       } NFCR;\r
-       char           wk0[67];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char CCLR:3;\r
-                       unsigned char CKEG:2;\r
-                       unsigned char TPSC:3;\r
-               } BIT;\r
-       } TCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ICSELD:1;\r
-                       unsigned char ICSELB:1;\r
-                       unsigned char BFB:1;\r
-                       unsigned char BFA:1;\r
-                       unsigned char MD:4;\r
-               } BIT;\r
-       } TMDR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char IOB:4;\r
-                       unsigned char IOA:4;\r
-               } BIT;\r
-       } TIOR;\r
-       char           wk1[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TTGE:1;\r
-                       unsigned char :1;\r
-                       unsigned char TCIEU:1;\r
-                       unsigned char TCIEV:1;\r
-                       unsigned char TGIED:1;\r
-                       unsigned char TGIEC:1;\r
-                       unsigned char TGIEB:1;\r
-                       unsigned char TGIEA:1;\r
-               } BIT;\r
-       } TIER;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TCFD:1;\r
-                       unsigned char :1;\r
-                       unsigned char TCFU:1;\r
-                       unsigned char TCFV:1;\r
-                       unsigned char TGFD:1;\r
-                       unsigned char TGFC:1;\r
-                       unsigned char TGFB:1;\r
-                       unsigned char TGFA:1;\r
-               } BIT;\r
-       } TSR;\r
-       unsigned short TCNT;\r
-       unsigned short TGRA;\r
-       unsigned short TGRB;\r
-};\r
-\r
-struct st_tpu5 {\r
-       char           wk0[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char NFCS:2;\r
-                       unsigned char NFDEN:1;\r
-                       unsigned char NFCEN:1;\r
-                       unsigned char NFBEN:1;\r
-                       unsigned char NFAEN:1;\r
-               } BIT;\r
-       } NFCR;\r
-       char           wk1[82];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char CCLR:3;\r
-                       unsigned char CKEG:2;\r
-                       unsigned char TPSC:3;\r
-               } BIT;\r
-       } TCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ICSELD:1;\r
-                       unsigned char ICSELB:1;\r
-                       unsigned char BFB:1;\r
-                       unsigned char BFA:1;\r
-                       unsigned char MD:4;\r
-               } BIT;\r
-       } TMDR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char IOB:4;\r
-                       unsigned char IOA:4;\r
-               } BIT;\r
-       } TIOR;\r
-       char           wk2[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TTGE:1;\r
-                       unsigned char :1;\r
-                       unsigned char TCIEU:1;\r
-                       unsigned char TCIEV:1;\r
-                       unsigned char TGIED:1;\r
-                       unsigned char TGIEC:1;\r
-                       unsigned char TGIEB:1;\r
-                       unsigned char TGIEA:1;\r
-               } BIT;\r
-       } TIER;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TCFD:1;\r
-                       unsigned char :1;\r
-                       unsigned char TCFU:1;\r
-                       unsigned char TCFV:1;\r
-                       unsigned char TGFD:1;\r
-                       unsigned char TGFC:1;\r
-                       unsigned char TGFB:1;\r
-                       unsigned char TGFA:1;\r
-               } BIT;\r
-       } TSR;\r
-       unsigned short TCNT;\r
-       unsigned short TGRA;\r
-       unsigned short TGRB;\r
-};\r
-\r
-struct st_tpua {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char CST5:1;\r
-                       unsigned char CST4:1;\r
-                       unsigned char CST3:1;\r
-                       unsigned char CST2:1;\r
-                       unsigned char CST1:1;\r
-                       unsigned char CST0:1;\r
-               } BIT;\r
-       } TSTR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char SYNC5:1;\r
-                       unsigned char SYNC4:1;\r
-                       unsigned char SYNC3:1;\r
-                       unsigned char SYNC2:1;\r
-                       unsigned char SYNC1:1;\r
-                       unsigned char SYNC0:1;\r
-               } BIT;\r
-       } TSYR;\r
-};\r
-\r
-struct st_tpub {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char CST11:1;\r
-                       unsigned char CST10:1;\r
-                       unsigned char CST9:1;\r
-                       unsigned char CST8:1;\r
-                       unsigned char CST7:1;\r
-                       unsigned char CST6:1;\r
-               } BIT;\r
-       } TSTR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char SYNC11:1;\r
-                       unsigned char SYNC10:1;\r
-                       unsigned char SYNC9:1;\r
-                       unsigned char SYNC8:1;\r
-                       unsigned char SYNC7:1;\r
-                       unsigned char SYNC6:1;\r
-               } BIT;\r
-       } TSYR;\r
-};\r
-\r
-struct st_usb {\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long DVSTS1:1;\r
-                       unsigned long :5;\r
-                       unsigned long DM1:1;\r
-                       unsigned long DP1:1;\r
-                       unsigned long DVBSTS0:1;\r
-                       unsigned long :1;\r
-                       unsigned long DOVCB0:1;\r
-                       unsigned long DOVCA0:1;\r
-                       unsigned long :2;\r
-                       unsigned long DM0:1;\r
-                       unsigned long DP0:1;\r
-                       unsigned long :3;\r
-                       unsigned long FIXPHY1:1;\r
-                       unsigned long :3;\r
-                       unsigned long SRPC1:1;\r
-                       unsigned long :3;\r
-                       unsigned long FIXPHY0:1;\r
-                       unsigned long :3;\r
-                       unsigned long SRPC0:1;\r
-               } BIT;\r
-       } DPUSR0R;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long DVBINT1:1;\r
-                       unsigned long :5;\r
-                       unsigned long DMINT1:1;\r
-                       unsigned long DPINT1:1;\r
-                       unsigned long DVBINT0:1;\r
-                       unsigned long :1;\r
-                       unsigned long DOVRCRB0:1;\r
-                       unsigned long DOVRCRA0:1;\r
-                       unsigned long :2;\r
-                       unsigned long DMINT0:1;\r
-                       unsigned long DPINT0:1;\r
-                       unsigned long DVBSE1:1;\r
-                       unsigned long :5;\r
-                       unsigned long DMINTE1:1;\r
-                       unsigned long DPINTE1:1;\r
-                       unsigned long DVBSE0:1;\r
-                       unsigned long :1;\r
-                       unsigned long DOVRCRBE0:1;\r
-                       unsigned long DOVRCRAE0:1;\r
-                       unsigned long :2;\r
-                       unsigned long DMINTE0:1;\r
-                       unsigned long DPINTE0:1;\r
-               } BIT;\r
-       } DPUSR1R;\r
-};\r
-\r
-struct st_usb0 {\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :5;\r
-                       unsigned short SCKE:1;\r
-                       unsigned short :3;\r
-                       unsigned short DCFM:1;\r
-                       unsigned short DRPD:1;\r
-                       unsigned short DPRPU:1;\r
-                       unsigned short :3;\r
-                       unsigned short USBE:1;\r
-               } BIT;\r
-       } SYSCFG;\r
-       char           wk0[2];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short OVCMON:2;\r
-                       unsigned short :7;\r
-                       unsigned short HTACT:1;\r
-                       unsigned short :3;\r
-                       unsigned short IDMON:1;\r
-                       unsigned short LNST:2;\r
-               } BIT;\r
-       } SYSSTS0;\r
-       char           wk1[2];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :4;\r
-                       unsigned short HNPBTOA:1;\r
-                       unsigned short EXICEN:1;\r
-                       unsigned short VBUSEN:1;\r
-                       unsigned short WKUP:1;\r
-                       unsigned short RWUPE:1;\r
-                       unsigned short USBRST:1;\r
-                       unsigned short RESUME:1;\r
-                       unsigned short UACT:1;\r
-                       unsigned short :1;\r
-                       unsigned short RHST:3;\r
-               } BIT;\r
-       } DVSTCTR0;\r
-       char           wk2[10];\r
-       //ORIG: unsigned short CFIFO;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned char L;\r
-                       unsigned char H;\r
-               } BYTE;\r
-       } CFIFO;\r
-    //ENDORIG\r
-       char           wk3[2];\r
-       //ORIG: unsigned short D0FIFO;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned char L;\r
-                       unsigned char H;\r
-               } BYTE;\r
-       } D0FIFO;\r
-    //ENDORIG\r
-       char           wk4[2];\r
-       //ORIG: unsigned short D1FIFO;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned char L;\r
-                       unsigned char H;\r
-               } BYTE;\r
-       } D1FIFO;\r
-    //ENDORIG\r
-       char           wk5[2];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short RCNT:1;\r
-                       unsigned short REW:1;\r
-                       unsigned short :3;\r
-                       unsigned short MBW:1;\r
-                       unsigned short :1;\r
-                       unsigned short BIGEND:1;\r
-                       unsigned short :2;\r
-                       unsigned short ISEL:1;\r
-                       unsigned short :1;\r
-                       unsigned short CURPIPE:4;\r
-               } BIT;\r
-       } CFIFOSEL;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short BVAL:1;\r
-                       unsigned short BCLR:1;\r
-                       unsigned short FRDY:1;\r
-                       unsigned short :4;\r
-                       unsigned short DTLN:9;\r
-               } BIT;\r
-       } CFIFOCTR;\r
-       char           wk6[4];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short RCNT:1;\r
-                       unsigned short REW:1;\r
-                       unsigned short DCLRM:1;\r
-                       unsigned short DREQE:1;\r
-                       unsigned short :1;\r
-                       unsigned short MBW:1;\r
-                       unsigned short :1;\r
-                       unsigned short BIGEND:1;\r
-                       unsigned short :4;\r
-                       unsigned short CURPIPE:4;\r
-               } BIT;\r
-       } D0FIFOSEL;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short BVAL:1;\r
-                       unsigned short BCLR:1;\r
-                       unsigned short FRDY:1;\r
-                       unsigned short :4;\r
-                       unsigned short DTLN:9;\r
-               } BIT;\r
-       } D0FIFOCTR;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short RCNT:1;\r
-                       unsigned short REW:1;\r
-                       unsigned short DCLRM:1;\r
-                       unsigned short DREQE:1;\r
-                       unsigned short :1;\r
-                       unsigned short MBW:1;\r
-                       unsigned short :1;\r
-                       unsigned short BIGEND:1;\r
-                       unsigned short :4;\r
-                       unsigned short CURPIPE:4;\r
-               } BIT;\r
-       } D1FIFOSEL;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short BVAL:1;\r
-                       unsigned short BCLR:1;\r
-                       unsigned short FRDY:1;\r
-                       unsigned short :4;\r
-                       unsigned short DTLN:9;\r
-               } BIT;\r
-       } D1FIFOCTR;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short VBSE:1;\r
-                       unsigned short RSME:1;\r
-                       unsigned short SOFE:1;\r
-                       unsigned short DVSE:1;\r
-                       unsigned short CTRE:1;\r
-                       unsigned short BEMPE:1;\r
-                       unsigned short NRDYE:1;\r
-                       unsigned short BRDYE:1;\r
-               } BIT;\r
-       } INTENB0;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short OVRCRE:1;\r
-                       unsigned short BCHGE:1;\r
-                       unsigned short :1;\r
-                       unsigned short DTCHE:1;\r
-                       unsigned short ATTCHE:1;\r
-                       unsigned short :4;\r
-                       unsigned short EOFERRE:1;\r
-                       unsigned short SIGNE:1;\r
-                       unsigned short SACKE:1;\r
-               } BIT;\r
-       } INTENB1;\r
-       char           wk7[2];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :6;\r
-                       unsigned short PIPE9BRDYE:1;\r
-                       unsigned short PIPE8BRDYE:1;\r
-                       unsigned short PIPE7BRDYE:1;\r
-                       unsigned short PIPE6BRDYE:1;\r
-                       unsigned short PIPE5BRDYE:1;\r
-                       unsigned short PIPE4BRDYE:1;\r
-                       unsigned short PIPE3BRDYE:1;\r
-                       unsigned short PIPE2BRDYE:1;\r
-                       unsigned short PIPE1BRDYE:1;\r
-                       unsigned short PIPE0BRDYE:1;\r
-               } BIT;\r
-       } BRDYENB;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :6;\r
-                       unsigned short PIPE9NRDYE:1;\r
-                       unsigned short PIPE8NRDYE:1;\r
-                       unsigned short PIPE7NRDYE:1;\r
-                       unsigned short PIPE6NRDYE:1;\r
-                       unsigned short PIPE5NRDYE:1;\r
-                       unsigned short PIPE4NRDYE:1;\r
-                       unsigned short PIPE3NRDYE:1;\r
-                       unsigned short PIPE2NRDYE:1;\r
-                       unsigned short PIPE1NRDYE:1;\r
-                       unsigned short PIPE0NRDYE:1;\r
-               } BIT;\r
-       } NRDYENB;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :6;\r
-                       unsigned short PIPE9BEMPE:1;\r
-                       unsigned short PIPE8BEMPE:1;\r
-                       unsigned short PIPE7BEMPE:1;\r
-                       unsigned short PIPE6BEMPE:1;\r
-                       unsigned short PIPE5BEMPE:1;\r
-                       unsigned short PIPE4BEMPE:1;\r
-                       unsigned short PIPE3BEMPE:1;\r
-                       unsigned short PIPE2BEMPE:1;\r
-                       unsigned short PIPE1BEMPE:1;\r
-                       unsigned short PIPE0BEMPE:1;\r
-               } BIT;\r
-       } BEMPENB;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :7;\r
-                       unsigned short TRNENSEL:1;\r
-                       unsigned short :1;\r
-                       unsigned short BRDYM:1;\r
-                       unsigned short :1;\r
-                       unsigned short EDGESTS:1;\r
-               } BIT;\r
-       } SOFCFG;\r
-       char           wk8[2];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short VBINT:1;\r
-                       unsigned short RESM:1;\r
-                       unsigned short SOFR:1;\r
-                       unsigned short DVST:1;\r
-                       unsigned short CTRT:1;\r
-                       unsigned short BEMP:1;\r
-                       unsigned short NRDY:1;\r
-                       unsigned short BRDY:1;\r
-                       unsigned short VBSTS:1;\r
-                       unsigned short DVSQ:3;\r
-                       unsigned short VALID:1;\r
-                       unsigned short CTSQ:3;\r
-               } BIT;\r
-       } INTSTS0;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short OVRCR:1;\r
-                       unsigned short BCHG:1;\r
-                       unsigned short :1;\r
-                       unsigned short DTCH:1;\r
-                       unsigned short ATTCH:1;\r
-                       unsigned short :4;\r
-                       unsigned short EOFERR:1;\r
-                       unsigned short SIGN:1;\r
-                       unsigned short SACK:1;\r
-               } BIT;\r
-       } INTSTS1;\r
-       char           wk9[2];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :6;\r
-                       unsigned short PIPE9BRDY:1;\r
-                       unsigned short PIPE8BRDY:1;\r
-                       unsigned short PIPE7BRDY:1;\r
-                       unsigned short PIPE6BRDY:1;\r
-                       unsigned short PIPE5BRDY:1;\r
-                       unsigned short PIPE4BRDY:1;\r
-                       unsigned short PIPE3BRDY:1;\r
-                       unsigned short PIPE2BRDY:1;\r
-                       unsigned short PIPE1BRDY:1;\r
-                       unsigned short PIPE0BRDY:1;\r
-               } BIT;\r
-       } BRDYSTS;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :6;\r
-                       unsigned short PIPE9NRDYE:1;\r
-                       unsigned short PIPE8NRDYE:1;\r
-                       unsigned short PIPE7NRDYE:1;\r
-                       unsigned short PIPE6NRDYE:1;\r
-                       unsigned short PIPE5NRDYE:1;\r
-                       unsigned short PIPE4NRDYE:1;\r
-                       unsigned short PIPE3NRDYE:1;\r
-                       unsigned short PIPE2NRDYE:1;\r
-                       unsigned short PIPE1NRDYE:1;\r
-                       unsigned short PIPE0NRDYE:1;\r
-               } BIT;\r
-       } NRDYSTS;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :6;\r
-                       unsigned short PIPE9BEMPE:1;\r
-                       unsigned short PIPE8BEMPE:1;\r
-                       unsigned short PIPE7BENP:1;\r
-                       unsigned short PIPE6BENP:1;\r
-                       unsigned short PIPE5BENP:1;\r
-                       unsigned short PIPE4BENP:1;\r
-                       unsigned short PIPE3BENP:1;\r
-                       unsigned short PIPE2BENP:1;\r
-                       unsigned short PIPE1BENP:1;\r
-                       unsigned short PIPE0BENP:1;\r
-               } BIT;\r
-       } BEMPSTS;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short OVRN:1;\r
-                       unsigned short CRCE:1;\r
-                       unsigned short :3;\r
-                       unsigned short FRNM:11;\r
-               } BIT;\r
-       } FRMNUM;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short DVCHG:1;\r
-               } BIT;\r
-       } DVCHGR;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :4;\r
-                       unsigned short STSRECOV:4;\r
-                       unsigned short :1;\r
-                       unsigned short USBADDR:7;\r
-               } BIT;\r
-       } USBADDR;\r
-       char           wk10[2];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short BREQUEST:8;\r
-                       unsigned short BMREQUESTTYPE:8;\r
-               } BIT;\r
-       } USBREQ;\r
-       unsigned short USBVAL;\r
-       unsigned short USBINDX;\r
-       unsigned short USBLENG;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :8;\r
-                       unsigned short SHTNAK:1;\r
-                       unsigned short :2;\r
-                       unsigned short DIR:1;\r
-               } BIT;\r
-       } DCPCFG;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short DEVSEL:4;\r
-                       unsigned short :5;\r
-                       unsigned short MXPS:7;\r
-               } BIT;\r
-       } DCPMAXP;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short BSTS:1;\r
-                       unsigned short SUREQ:1;\r
-                       unsigned short :2;\r
-                       unsigned short SUREQCLR:1;\r
-                       unsigned short :2;\r
-                       unsigned short SQCLR:1;\r
-                       unsigned short SQSET:1;\r
-                       unsigned short SQMON:1;\r
-                       unsigned short PBUSY:1;\r
-                       unsigned short :2;\r
-                       unsigned short CCPL:1;\r
-                       unsigned short PID:2;\r
-               } BIT;\r
-       } DCPCTR;\r
-       char           wk11[2];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :12;\r
-                       unsigned short PIPESEL:4;\r
-               } BIT;\r
-       } PIPESEL;\r
-       char           wk12[2];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short TYPE:2;\r
-                       unsigned short :3;\r
-                       unsigned short BFRE:1;\r
-                       unsigned short DBLB:1;\r
-                       unsigned short :1;\r
-                       unsigned short SHTNAK:1;\r
-                       unsigned short :2;\r
-                       unsigned short DIR:1;\r
-                       unsigned short EPNUM:4;\r
-               } BIT;\r
-       } PIPECFG;\r
-       char           wk13[2];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short DEVSEL:4;\r
-                       unsigned short :3;\r
-                       unsigned short MXPS:9;\r
-               } BIT;\r
-       } PIPEMAXP;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :3;\r
-                       unsigned short IFIS:1;\r
-                       unsigned short :9;\r
-                       unsigned short IITV:3;\r
-               } BIT;\r
-       } PIPEPERI;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short BSTS:1;\r
-                       unsigned short INBUFM:1;\r
-                       unsigned short :3;\r
-                       unsigned short ATREPM:1;\r
-                       unsigned short ACLRM:1;\r
-                       unsigned short SQCLR:1;\r
-                       unsigned short SQSET:1;\r
-                       unsigned short SQMON:1;\r
-                       unsigned short PBUSY:1;\r
-                       unsigned short :3;\r
-                       unsigned short PID:2;\r
-               } BIT;\r
-       } PIPE1CTR;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short BSTS:1;\r
-                       unsigned short INBUFM:1;\r
-                       unsigned short :3;\r
-                       unsigned short ATREPM:1;\r
-                       unsigned short ACLRM:1;\r
-                       unsigned short SQCLR:1;\r
-                       unsigned short SQSET:1;\r
-                       unsigned short SQMON:1;\r
-                       unsigned short PBUSY:1;\r
-                       unsigned short :3;\r
-                       unsigned short PID:2;\r
-               } BIT;\r
-       } PIPE2CTR;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short BSTS:1;\r
-                       unsigned short INBUFM:1;\r
-                       unsigned short :3;\r
-                       unsigned short ATREPM:1;\r
-                       unsigned short ACLRM:1;\r
-                       unsigned short SQCLR:1;\r
-                       unsigned short SQSET:1;\r
-                       unsigned short SQMON:1;\r
-                       unsigned short PBUSY:1;\r
-                       unsigned short :3;\r
-                       unsigned short PID:2;\r
-               } BIT;\r
-       } PIPE3CTR;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short BSTS:1;\r
-                       unsigned short INBUFM:1;\r
-                       unsigned short :3;\r
-                       unsigned short ATREPM:1;\r
-                       unsigned short ACLRM:1;\r
-                       unsigned short SQCLR:1;\r
-                       unsigned short SQSET:1;\r
-                       unsigned short SQMON:1;\r
-                       unsigned short PBUSY:1;\r
-                       unsigned short :3;\r
-                       unsigned short PID:2;\r
-               } BIT;\r
-       } PIPE4CTR;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short BSTS:1;\r
-                       unsigned short INBUFM:1;\r
-                       unsigned short :3;\r
-                       unsigned short ATREPM:1;\r
-                       unsigned short ACLRM:1;\r
-                       unsigned short SQCLR:1;\r
-                       unsigned short SQSET:1;\r
-                       unsigned short SQMON:1;\r
-                       unsigned short PBUSY:1;\r
-                       unsigned short :3;\r
-                       unsigned short PID:2;\r
-               } BIT;\r
-       } PIPE5CTR;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short BSTS:1;\r
-                       unsigned short :5;\r
-                       unsigned short ACLRM:1;\r
-                       unsigned short SQCLR:1;\r
-                       unsigned short SQSET:1;\r
-                       unsigned short SQMON:1;\r
-                       unsigned short PBUSY:1;\r
-                       unsigned short :3;\r
-                       unsigned short PID:2;\r
-               } BIT;\r
-       } PIPE6CTR;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short BSTS:1;\r
-                       unsigned short :5;\r
-                       unsigned short ACLRM:1;\r
-                       unsigned short SQCLR:1;\r
-                       unsigned short SQSET:1;\r
-                       unsigned short SQMON:1;\r
-                       unsigned short PBUSY:1;\r
-                       unsigned short :3;\r
-                       unsigned short PID:2;\r
-               } BIT;\r
-       } PIPE7CTR;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short BSTS:1;\r
-                       unsigned short :5;\r
-                       unsigned short ACLRM:1;\r
-                       unsigned short SQCLR:1;\r
-                       unsigned short SQSET:1;\r
-                       unsigned short SQMON:1;\r
-                       unsigned short PBUSY:1;\r
-                       unsigned short :3;\r
-                       unsigned short PID:2;\r
-               } BIT;\r
-       } PIPE8CTR;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short BSTS:1;\r
-                       unsigned short :5;\r
-                       unsigned short ACLRM:1;\r
-                       unsigned short SQCLR:1;\r
-                       unsigned short SQSET:1;\r
-                       unsigned short SQMON:1;\r
-                       unsigned short PBUSY:1;\r
-                       unsigned short :3;\r
-                       unsigned short PID:2;\r
-               } BIT;\r
-       } PIPE9CTR;\r
-       char           wk14[14];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :6;\r
-                       unsigned short TRENB:1;\r
-                       unsigned short TRCLR:1;\r
-               } BIT;\r
-       } PIPE1TRE;\r
-       unsigned short PIPE1TRN;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :6;\r
-                       unsigned short TRENB:1;\r
-                       unsigned short TRCLR:1;\r
-               } BIT;\r
-       } PIPE2TRE;\r
-       unsigned short PIPE2TRN;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :6;\r
-                       unsigned short TRENB:1;\r
-                       unsigned short TRCLR:1;\r
-               } BIT;\r
-       } PIPE3TRE;\r
-       unsigned short PIPE3TRN;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :6;\r
-                       unsigned short TRENB:1;\r
-                       unsigned short TRCLR:1;\r
-               } BIT;\r
-       } PIPE4TRE;\r
-       unsigned short PIPE4TRN;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :6;\r
-                       unsigned short TRENB:1;\r
-                       unsigned short TRCLR:1;\r
-               } BIT;\r
-       } PIPE5TRE;\r
-       unsigned short PIPE5TRN;\r
-       char           wk15[44];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :8;\r
-                       unsigned short USBSPD:2;\r
-               } BIT;\r
-       } DEVADD0;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :8;\r
-                       unsigned short USBSPD:2;\r
-               } BIT;\r
-       } DEVADD1;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :8;\r
-                       unsigned short USBSPD:2;\r
-               } BIT;\r
-       } DEVADD2;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :8;\r
-                       unsigned short USBSPD:2;\r
-               } BIT;\r
-       } DEVADD3;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :8;\r
-                       unsigned short USBSPD:2;\r
-               } BIT;\r
-       } DEVADD4;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :8;\r
-                       unsigned short USBSPD:2;\r
-               } BIT;\r
-       } DEVADD5;\r
-};\r
-\r
-struct st_usb1 {\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :5;\r
-                       unsigned short SCKE:1;\r
-                       unsigned short :3;\r
-                       unsigned short DCFM:1;\r
-                       unsigned short DRPD:1;\r
-                       unsigned short DPRPU:1;\r
-                       unsigned short :3;\r
-                       unsigned short USBE:1;\r
-               } BIT;\r
-       } SYSCFG;\r
-       char           wk0[2];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short OVCMON:2;\r
-                       unsigned short :7;\r
-                       unsigned short HTACT:1;\r
-                       unsigned short :3;\r
-                       unsigned short IDMON:1;\r
-                       unsigned short LNST:2;\r
-               } BIT;\r
-       } SYSSTS0;\r
-       char           wk1[2];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :4;\r
-                       unsigned short HNPBTOA:1;\r
-                       unsigned short EXICEN:1;\r
-                       unsigned short VBUSEN:1;\r
-                       unsigned short WKUP:1;\r
-                       unsigned short RWUPE:1;\r
-                       unsigned short USBRST:1;\r
-                       unsigned short RESUME:1;\r
-                       unsigned short UACT:1;\r
-                       unsigned short :1;\r
-                       unsigned short RHST:3;\r
-               } BIT;\r
-       } DVSTCTR0;\r
-       char           wk2[10];\r
-       unsigned short CFIFO;\r
-       char           wk3[2];\r
-       unsigned short D0FIFO;\r
-       char           wk4[2];\r
-       unsigned short D1FIFO;\r
-       char           wk5[2];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short RCNT:1;\r
-                       unsigned short REW:1;\r
-                       unsigned short :3;\r
-                       unsigned short MBW:1;\r
-                       unsigned short :1;\r
-                       unsigned short BIGEND:1;\r
-                       unsigned short :2;\r
-                       unsigned short ISEL:1;\r
-                       unsigned short :1;\r
-                       unsigned short CURPIPE:4;\r
-               } BIT;\r
-       } CFIFOSEL;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short BVAL:1;\r
-                       unsigned short BCLR:1;\r
-                       unsigned short FRDY:1;\r
-                       unsigned short :4;\r
-                       unsigned short DTLN:9;\r
-               } BIT;\r
-       } CFIFOCTR;\r
-       char           wk6[4];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short RCNT:1;\r
-                       unsigned short REW:1;\r
-                       unsigned short DCLRM:1;\r
-                       unsigned short DREQE:1;\r
-                       unsigned short :1;\r
-                       unsigned short MBW:1;\r
-                       unsigned short :1;\r
-                       unsigned short BIGEND:1;\r
-                       unsigned short :4;\r
-                       unsigned short CURPIPE:4;\r
-               } BIT;\r
-       } D0FIFOSEL;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short BVAL:1;\r
-                       unsigned short BCLR:1;\r
-                       unsigned short FRDY:1;\r
-                       unsigned short :4;\r
-                       unsigned short DTLN:9;\r
-               } BIT;\r
-       } D0FIFOCTR;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short RCNT:1;\r
-                       unsigned short REW:1;\r
-                       unsigned short DCLRM:1;\r
-                       unsigned short DREQE:1;\r
-                       unsigned short :1;\r
-                       unsigned short MBW:1;\r
-                       unsigned short :1;\r
-                       unsigned short BIGEND:1;\r
-                       unsigned short :4;\r
-                       unsigned short CURPIPE:4;\r
-               } BIT;\r
-       } D1FIFOSEL;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short BVAL:1;\r
-                       unsigned short BCLR:1;\r
-                       unsigned short FRDY:1;\r
-                       unsigned short :4;\r
-                       unsigned short DTLN:9;\r
-               } BIT;\r
-       } D1FIFOCTR;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short VBSE:1;\r
-                       unsigned short RSME:1;\r
-                       unsigned short SOFE:1;\r
-                       unsigned short DVSE:1;\r
-                       unsigned short CTRE:1;\r
-                       unsigned short BEMPE:1;\r
-                       unsigned short NRDYE:1;\r
-                       unsigned short BRDYE:1;\r
-               } BIT;\r
-       } INTENB0;\r
-       char           wk7[4];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :6;\r
-                       unsigned short PIPE9BRDYE:1;\r
-                       unsigned short PIPE8BRDYE:1;\r
-                       unsigned short PIPE7BRDYE:1;\r
-                       unsigned short PIPE6BRDYE:1;\r
-                       unsigned short PIPE5BRDYE:1;\r
-                       unsigned short PIPE4BRDYE:1;\r
-                       unsigned short PIPE3BRDYE:1;\r
-                       unsigned short PIPE2BRDYE:1;\r
-                       unsigned short PIPE1BRDYE:1;\r
-                       unsigned short PIPE0BRDYE:1;\r
-               } BIT;\r
-       } BRDYENB;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :6;\r
-                       unsigned short PIPE9NRDYE:1;\r
-                       unsigned short PIPE8NRDYE:1;\r
-                       unsigned short PIPE7NRDYE:1;\r
-                       unsigned short PIPE6NRDYE:1;\r
-                       unsigned short PIPE5NRDYE:1;\r
-                       unsigned short PIPE4NRDYE:1;\r
-                       unsigned short PIPE3NRDYE:1;\r
-                       unsigned short PIPE2NRDYE:1;\r
-                       unsigned short PIPE1NRDYE:1;\r
-                       unsigned short PIPE0NRDYE:1;\r
-               } BIT;\r
-       } NRDYENB;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :6;\r
-                       unsigned short PIPE9BEMPE:1;\r
-                       unsigned short PIPE8BEMPE:1;\r
-                       unsigned short PIPE7BEMPE:1;\r
-                       unsigned short PIPE6BEMPE:1;\r
-                       unsigned short PIPE5BEMPE:1;\r
-                       unsigned short PIPE4BEMPE:1;\r
-                       unsigned short PIPE3BEMPE:1;\r
-                       unsigned short PIPE2BEMPE:1;\r
-                       unsigned short PIPE1BEMPE:1;\r
-                       unsigned short PIPE0BEMPE:1;\r
-               } BIT;\r
-       } BEMPENB;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :9;\r
-                       unsigned short BRDYM:1;\r
-                       unsigned short :1;\r
-                       unsigned short EDGESTS:1;\r
-               } BIT;\r
-       } SOFCFG;\r
-       char           wk8[2];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short VBINT:1;\r
-                       unsigned short RESM:1;\r
-                       unsigned short SOFR:1;\r
-                       unsigned short DVST:1;\r
-                       unsigned short CTRT:1;\r
-                       unsigned short BEMP:1;\r
-                       unsigned short NRDY:1;\r
-                       unsigned short BRDY:1;\r
-                       unsigned short VBSTS:1;\r
-                       unsigned short DVSQ:3;\r
-                       unsigned short VALID:1;\r
-                       unsigned short CTSQ:3;\r
-               } BIT;\r
-       } INTSTS0;\r
-       char           wk9[4];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :6;\r
-                       unsigned short PIPE9BRDY:1;\r
-                       unsigned short PIPE8BRDY:1;\r
-                       unsigned short PIPE7BRDY:1;\r
-                       unsigned short PIPE6BRDY:1;\r
-                       unsigned short PIPE5BRDY:1;\r
-                       unsigned short PIPE4BRDY:1;\r
-                       unsigned short PIPE3BRDY:1;\r
-                       unsigned short PIPE2BRDY:1;\r
-                       unsigned short PIPE1BRDY:1;\r
-                       unsigned short PIPE0BRDY:1;\r
-               } BIT;\r
-       } BRDYSTS;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :6;\r
-                       unsigned short PIPE9NRDYE:1;\r
-                       unsigned short PIPE8NRDYE:1;\r
-                       unsigned short PIPE7NRDYE:1;\r
-                       unsigned short PIPE6NRDYE:1;\r
-                       unsigned short PIPE5NRDYE:1;\r
-                       unsigned short PIPE4NRDYE:1;\r
-                       unsigned short PIPE3NRDYE:1;\r
-                       unsigned short PIPE2NRDYE:1;\r
-                       unsigned short PIPE1NRDYE:1;\r
-                       unsigned short PIPE0NRDYE:1;\r
-               } BIT;\r
-       } NRDYSTS;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :6;\r
-                       unsigned short PIPE9BEMPE:1;\r
-                       unsigned short PIPE8BEMPE:1;\r
-                       unsigned short PIPE7BENP:1;\r
-                       unsigned short PIPE6BENP:1;\r
-                       unsigned short PIPE5BENP:1;\r
-                       unsigned short PIPE4BENP:1;\r
-                       unsigned short PIPE3BENP:1;\r
-                       unsigned short PIPE2BENP:1;\r
-                       unsigned short PIPE1BENP:1;\r
-                       unsigned short PIPE0BENP:1;\r
-               } BIT;\r
-       } BEMPSTS;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short OVRN:1;\r
-                       unsigned short CRCE:1;\r
-                       unsigned short :3;\r
-                       unsigned short FRNM:11;\r
-               } BIT;\r
-       } FRMNUM;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short DVCHG:1;\r
-               } BIT;\r
-       } DVCHGR;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :4;\r
-                       unsigned short STSRECOV:4;\r
-                       unsigned short :1;\r
-                       unsigned short USBADDR:7;\r
-               } BIT;\r
-       } USBADDR;\r
-       char           wk10[2];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short BREQUEST:8;\r
-                       unsigned short BMREQUESTTYPE:8;\r
-               } BIT;\r
-       } USBREQ;\r
-       unsigned short USBVAL;\r
-       unsigned short USBINDX;\r
-       unsigned short USBLENG;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :8;\r
-                       unsigned short SHTNAK:1;\r
-                       unsigned short :2;\r
-                       unsigned short DIR:1;\r
-               } BIT;\r
-       } DCPCFG;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short DEVSEL:4;\r
-                       unsigned short :5;\r
-                       unsigned short MXPS:7;\r
-               } BIT;\r
-       } DCPMAXP;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short BSTS:1;\r
-                       unsigned short SUREQ:1;\r
-                       unsigned short :2;\r
-                       unsigned short SUREQCLR:1;\r
-                       unsigned short :2;\r
-                       unsigned short SQCLR:1;\r
-                       unsigned short SQSET:1;\r
-                       unsigned short SQMON:1;\r
-                       unsigned short PBUSY:1;\r
-                       unsigned short :2;\r
-                       unsigned short CCPL:1;\r
-                       unsigned short PID:2;\r
-               } BIT;\r
-       } DCPCTR;\r
-       char           wk11[2];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :12;\r
-                       unsigned short PIPESEL:4;\r
-               } BIT;\r
-       } PIPESEL;\r
-       char           wk12[2];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short TYPE:2;\r
-                       unsigned short :3;\r
-                       unsigned short BFRE:1;\r
-                       unsigned short DBLB:1;\r
-                       unsigned short :1;\r
-                       unsigned short SHTNAK:1;\r
-                       unsigned short :2;\r
-                       unsigned short DIR:1;\r
-                       unsigned short EPNUM:4;\r
-               } BIT;\r
-       } PIPECFG;\r
-       char           wk13[2];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short DEVSEL:4;\r
-                       unsigned short :3;\r
-                       unsigned short MXPS:9;\r
-               } BIT;\r
-       } PIPEMAXP;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :3;\r
-                       unsigned short IFIS:1;\r
-                       unsigned short :9;\r
-                       unsigned short IITV:3;\r
-               } BIT;\r
-       } PIPEPERI;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short BSTS:1;\r
-                       unsigned short INBUFM:1;\r
-                       unsigned short :3;\r
-                       unsigned short ATREPM:1;\r
-                       unsigned short ACLRM:1;\r
-                       unsigned short SQCLR:1;\r
-                       unsigned short SQSET:1;\r
-                       unsigned short SQMON:1;\r
-                       unsigned short PBUSY:1;\r
-                       unsigned short :3;\r
-                       unsigned short PID:2;\r
-               } BIT;\r
-       } PIPE1CTR;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short BSTS:1;\r
-                       unsigned short INBUFM:1;\r
-                       unsigned short :3;\r
-                       unsigned short ATREPM:1;\r
-                       unsigned short ACLRM:1;\r
-                       unsigned short SQCLR:1;\r
-                       unsigned short SQSET:1;\r
-                       unsigned short SQMON:1;\r
-                       unsigned short PBUSY:1;\r
-                       unsigned short :3;\r
-                       unsigned short PID:2;\r
-               } BIT;\r
-       } PIPE2CTR;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short BSTS:1;\r
-                       unsigned short INBUFM:1;\r
-                       unsigned short :3;\r
-                       unsigned short ATREPM:1;\r
-                       unsigned short ACLRM:1;\r
-                       unsigned short SQCLR:1;\r
-                       unsigned short SQSET:1;\r
-                       unsigned short SQMON:1;\r
-                       unsigned short PBUSY:1;\r
-                       unsigned short :3;\r
-                       unsigned short PID:2;\r
-               } BIT;\r
-       } PIPE3CTR;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short BSTS:1;\r
-                       unsigned short INBUFM:1;\r
-                       unsigned short :3;\r
-                       unsigned short ATREPM:1;\r
-                       unsigned short ACLRM:1;\r
-                       unsigned short SQCLR:1;\r
-                       unsigned short SQSET:1;\r
-                       unsigned short SQMON:1;\r
-                       unsigned short PBUSY:1;\r
-                       unsigned short :3;\r
-                       unsigned short PID:2;\r
-               } BIT;\r
-       } PIPE4CTR;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short BSTS:1;\r
-                       unsigned short INBUFM:1;\r
-                       unsigned short :3;\r
-                       unsigned short ATREPM:1;\r
-                       unsigned short ACLRM:1;\r
-                       unsigned short SQCLR:1;\r
-                       unsigned short SQSET:1;\r
-                       unsigned short SQMON:1;\r
-                       unsigned short PBUSY:1;\r
-                       unsigned short :3;\r
-                       unsigned short PID:2;\r
-               } BIT;\r
-       } PIPE5CTR;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short BSTS:1;\r
-                       unsigned short :5;\r
-                       unsigned short ACLRM:1;\r
-                       unsigned short SQCLR:1;\r
-                       unsigned short SQSET:1;\r
-                       unsigned short SQMON:1;\r
-                       unsigned short PBUSY:1;\r
-                       unsigned short :3;\r
-                       unsigned short PID:2;\r
-               } BIT;\r
-       } PIPE6CTR;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short BSTS:1;\r
-                       unsigned short :5;\r
-                       unsigned short ACLRM:1;\r
-                       unsigned short SQCLR:1;\r
-                       unsigned short SQSET:1;\r
-                       unsigned short SQMON:1;\r
-                       unsigned short PBUSY:1;\r
-                       unsigned short :3;\r
-                       unsigned short PID:2;\r
-               } BIT;\r
-       } PIPE7CTR;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short BSTS:1;\r
-                       unsigned short :5;\r
-                       unsigned short ACLRM:1;\r
-                       unsigned short SQCLR:1;\r
-                       unsigned short SQSET:1;\r
-                       unsigned short SQMON:1;\r
-                       unsigned short PBUSY:1;\r
-                       unsigned short :3;\r
-                       unsigned short PID:2;\r
-               } BIT;\r
-       } PIPE8CTR;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short BSTS:1;\r
-                       unsigned short :5;\r
-                       unsigned short ACLRM:1;\r
-                       unsigned short SQCLR:1;\r
-                       unsigned short SQSET:1;\r
-                       unsigned short SQMON:1;\r
-                       unsigned short PBUSY:1;\r
-                       unsigned short :3;\r
-                       unsigned short PID:2;\r
-               } BIT;\r
-       } PIPE9CTR;\r
-       char           wk14[14];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :6;\r
-                       unsigned short TRENB:1;\r
-                       unsigned short TRCLR:1;\r
-               } BIT;\r
-       } PIPE1TRE;\r
-       unsigned short PIPE1TRN;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :6;\r
-                       unsigned short TRENB:1;\r
-                       unsigned short TRCLR:1;\r
-               } BIT;\r
-       } PIPE2TRE;\r
-       unsigned short PIPE2TRN;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :6;\r
-                       unsigned short TRENB:1;\r
-                       unsigned short TRCLR:1;\r
-               } BIT;\r
-       } PIPE3TRE;\r
-       unsigned short PIPE3TRN;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :6;\r
-                       unsigned short TRENB:1;\r
-                       unsigned short TRCLR:1;\r
-               } BIT;\r
-       } PIPE4TRE;\r
-       unsigned short PIPE4TRN;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :6;\r
-                       unsigned short TRENB:1;\r
-                       unsigned short TRCLR:1;\r
-               } BIT;\r
-       } PIPE5TRE;\r
-       unsigned short PIPE5TRN;\r
-       char           wk15[44];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :8;\r
-                       unsigned short USBSPD:2;\r
-               } BIT;\r
-       } DEVADD0;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :8;\r
-                       unsigned short USBSPD:2;\r
-               } BIT;\r
-       } DEVADD1;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :8;\r
-                       unsigned short USBSPD:2;\r
-               } BIT;\r
-       } DEVADD2;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :8;\r
-                       unsigned short USBSPD:2;\r
-               } BIT;\r
-       } DEVADD3;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :8;\r
-                       unsigned short USBSPD:2;\r
-               } BIT;\r
-       } DEVADD4;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :8;\r
-                       unsigned short USBSPD:2;\r
-               } BIT;\r
-       } DEVADD5;\r
-};\r
-\r
-struct st_wdt {\r
-       unsigned char  WDTRR;\r
-       char           wk0[1];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :2;\r
-                       unsigned short RPSS:2;\r
-                       unsigned short :2;\r
-                       unsigned short RPES:2;\r
-                       unsigned short CKS:4;\r
-                       unsigned short :2;\r
-                       unsigned short TOPS:2;\r
-               } BIT;\r
-       } WDTCR;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short REFEF:1;\r
-                       unsigned short UNDFF:1;\r
-                       unsigned short CNTVAL:14;\r
-               } BIT;\r
-       } WDTSR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char RSTIRQS:1;\r
-               } BIT;\r
-       } WDTRCR;\r
-};\r
-\r
-enum enum_ir {\r
-IR_BSC_BUSERR=16,IR_FCU_FIFERR=21,\r
-IR_ICU_SWINT=27,\r
-IR_CMT0_CMI0,\r
-IR_CMT1_CMI1,\r
-IR_CMT2_CMI2,\r
-IR_CMT3_CMI3,\r
-IR_ETHER_EINT,\r
-IR_USB0_D0FIFO0,IR_USB0_D1FIFO0,IR_USB0_USBI0,\r
-IR_USB1_D0FIFO1,IR_USB1_D1FIFO1,IR_USB1_USBI1,\r
-IR_RSPI0_SPRI0,IR_RSPI0_SPTI0,IR_RSPI0_SPII0,\r
-IR_RSPI1_SPRI1,IR_RSPI1_SPTI1,IR_RSPI1_SPII1,\r
-IR_RSPI2_SPRI2,IR_RSPI2_SPTI2,IR_RSPI2_SPII2,\r
-IR_CAN0_RXF0,IR_CAN0_TXF0,IR_CAN0_RXM0,IR_CAN0_TXM0,\r
-IR_CAN1_RXF1,IR_CAN1_TXF1,IR_CAN1_RXM1,IR_CAN1_TXM1,\r
-IR_CAN2_RXF2,IR_CAN2_TXF2,IR_CAN2_RXM2,IR_CAN2_TXM2,\r
-IR_RTC_COUNTUP=62,\r
-IR_ICU_IRQ0=64,IR_ICU_IRQ1,IR_ICU_IRQ2,IR_ICU_IRQ3,IR_ICU_IRQ4,IR_ICU_IRQ5,IR_ICU_IRQ6,IR_ICU_IRQ7,IR_ICU_IRQ8,IR_ICU_IRQ9,IR_ICU_IRQ10,IR_ICU_IRQ11,IR_ICU_IRQ12,IR_ICU_IRQ13,IR_ICU_IRQ14,IR_ICU_IRQ15,\r
-IR_USB_USBR0=90,IR_USB_USBR1,\r
-IR_RTC_ALARM,IR_RTC_PRD,\r
-IR_AD0_ADI0=98,\r
-IR_S12AD0_S12ADI0=102,\r
-IR_ICU_GROUPE0=106,IR_ICU_GROUPE1,IR_ICU_GROUPE2,IR_ICU_GROUPE3,IR_ICU_GROUPE4,IR_ICU_GROUPE5,IR_ICU_GROUPE6,IR_ICU_GROUPL0=114,\r
-IR_SCIX_SCIX0=122,IR_SCIX_SCIX1,IR_SCIX_SCIX2,IR_SCIX_SCIX3,\r
-IR_TPU0_TGI0A,IR_TPU0_TGI0B,IR_TPU0_TGI0C,IR_TPU0_TGI0D,\r
-IR_TPU1_TGI1A,IR_TPU1_TGI1B,\r
-IR_TPU2_TGI2A,IR_TPU2_TGI2B,\r
-IR_TPU3_TGI3A,IR_TPU3_TGI3B,IR_TPU3_TGI3C,IR_TPU3_TGI3D,\r
-IR_TPU4_TGI4A,IR_TPU4_TGI4B,\r
-IR_TPU5_TGI5A,IR_TPU5_TGI5B,\r
-IR_TPU6_TGI6A,IR_TPU6_TGI6B,IR_TPU6_TGI6C,IR_TPU6_TGI6D,\r
-IR_MTU0_TGIA0=142,IR_MTU0_TGIB0,IR_MTU0_TGIC0,IR_MTU0_TGID0,IR_MTU0_TGIE0,IR_MTU0_TGIF0,\r
-IR_TPU7_TGI7A,IR_TPU7_TGI7B,\r
-IR_MTU1_TGIA1=148,IR_MTU1_TGIB1,\r
-IR_TPU8_TGI8A,IR_TPU8_TGI8B,\r
-IR_MTU2_TGIA2=150,IR_MTU2_TGIB2,\r
-IR_TPU9_TGI9A,IR_TPU9_TGI9B,IR_TPU9_TGI9C,IR_TPU9_TGI9D,\r
-IR_MTU3_TGIA3=152,IR_MTU3_TGIB3,IR_MTU3_TGIC3,IR_MTU3_TGID3,\r
-IR_TPU10_TGI10A,IR_TPU10_TGI10B,\r
-IR_MTU4_TGIA4=156,IR_MTU4_TGIB4,IR_MTU4_TGIC4,IR_MTU4_TGID4,IR_MTU4_TCIV4,\r
-IR_MTU5_TGIU5,IR_MTU5_TGIV5,IR_MTU5_TGIW5,\r
-IR_TPU11_TGI11A,IR_TPU11_TGI11B,\r
-IR_POE_OEI1,IR_POE_OEI2,\r
-IR_TMR0_CMIA0=170,IR_TMR0_CMIB0,IR_TMR0_OVI0,\r
-IR_TMR1_CMIA1,IR_TMR1_CMIB1,IR_TMR1_OVI1,\r
-IR_TMR2_CMIA2,IR_TMR2_CMIB2,IR_TMR2_OVI2,\r
-IR_TMR3_CMIA3,IR_TMR3_CMIB3,IR_TMR3_OVI3,\r
-IR_RIIC0_EEI0,IR_RIIC0_RXI0,IR_RIIC0_TXI0,IR_RIIC0_TEI0,\r
-IR_RIIC1_EEI1,IR_RIIC1_RXI1,IR_RIIC1_TXI1,IR_RIIC1_TEI1,\r
-IR_RIIC2_EEI2,IR_RIIC2_RXI2,IR_RIIC2_TXI2,IR_RIIC2_TEI2,\r
-IR_RIIC3_EEI3,IR_RIIC3_RXI3,IR_RIIC3_TXI3,IR_RIIC3_TEI3,\r
-IR_DMAC_DMAC0I,IR_DMAC_DMAC1I,IR_DMAC_DMAC2I,IR_DMAC_DMAC3I,\r
-IR_EXDMAC_EXDMAC0I,IR_EXDMAC_EXDMAC1I,\r
-IR_SCI0_RXI0=214,IR_SCI0_TXI0,IR_SCI0_TEI0,\r
-IR_SCI1_RXI1,IR_SCI1_TXI1,IR_SCI1_TEI1,\r
-IR_SCI2_RXI2,IR_SCI2_TXI2,IR_SCI2_TEI2,\r
-IR_SCI3_RXI3,IR_SCI3_TXI3,IR_SCI3_TEI3,\r
-IR_SCI4_RXI4,IR_SCI4_TXI4,IR_SCI4_TEI4,\r
-IR_SCI5_RXI5,IR_SCI5_TXI5,IR_SCI5_TEI5,\r
-IR_SCI6_RXI6,IR_SCI6_TXI6,IR_SCI6_TEI6,\r
-IR_SCI7_RXI7,IR_SCI7_TXI7,IR_SCI7_TEI7,\r
-IR_SCI8_RXI8,IR_SCI8_TXI8,IR_SCI8_TEI8,\r
-IR_SCI9_RXI9,IR_SCI9_TXI9,IR_SCI9_TEI9,\r
-IR_SCI10_RXI10,IR_SCI10_TXI10,IR_SCI10_TEI10,\r
-IR_SCI11_RXI11,IR_SCI11_TXI11,IR_SCI11_TEI11,\r
-IR_SCI12_RXI12,IR_SCI12_TXI12,IR_SCI12_TEI12,\r
-IR_IEB_IEBINT\r
-};\r
-\r
-enum enum_dtce {\r
-DTCE_ICU_SWINT=27,\r
-DTCE_CMT0_CMI0,\r
-DTCE_CMT1_CMI1,\r
-DTCE_CMT2_CMI2,\r
-DTCE_CMT3_CMI3,\r
-DTCE_USB0_D0FIFO0=33,DTCE_USB0_D1FIFO0,\r
-DTCE_USB1_D0FIFO1=36,DTCE_USB1_D1FIFO1,\r
-DTCE_RSPI0_SPRI0=39,DTCE_RSPI0_SPTI0,\r
-DTCE_RSPI1_SPRI1=42,DTCE_RSPI1_SPTI1,\r
-DTCE_RSPI2_SPRI2=45,DTCE_RSPI2_SPTI2,\r
-DTCE_ICU_IRQ0=64,DTCE_ICU_IRQ1,DTCE_ICU_IRQ2,DTCE_ICU_IRQ3,DTCE_ICU_IRQ4,DTCE_ICU_IRQ5,DTCE_ICU_IRQ6,DTCE_ICU_IRQ7,DTCE_ICU_IRQ8,DTCE_ICU_IRQ9,DTCE_ICU_IRQ10,DTCE_ICU_IRQ11,DTCE_ICU_IRQ12,DTCE_ICU_IRQ13,DTCE_ICU_IRQ14,DTCE_ICU_IRQ15,\r
-DTCE_AD0_ADI0=98,\r
-DTCE_S12AD0_S12ADI0=102,\r
-DTCE_TPU0_TGI0A=126,DTCE_TPU0_TGI0B,DTCE_TPU0_TGI0C,DTCE_TPU0_TGI0D,\r
-DTCE_TPU1_TGI1A,DTCE_TPU1_TGI1B,\r
-DTCE_TPU2_TGI2A,DTCE_TPU2_TGI2B,\r
-DTCE_TPU3_TGI3A,DTCE_TPU3_TGI3B,DTCE_TPU3_TGI3C,DTCE_TPU3_TGI3D,\r
-DTCE_TPU4_TGI4A,DTCE_TPU4_TGI4B,\r
-DTCE_TPU5_TGI5A,DTCE_TPU5_TGI5B,\r
-DTCE_TPU6_TGI6A,DTCE_TPU6_TGI6B,DTCE_TPU6_TGI6C,DTCE_TPU6_TGI6D,\r
-DTCE_MTU0_TGIA0=142,DTCE_MTU0_TGIB0,DTCE_MTU0_TGIC0,DTCE_MTU0_TGID0,\r
-DTCE_TPU7_TGI7A=148,DTCE_TPU7_TGI7B,\r
-DTCE_MTU1_TGIA1=148,DTCE_MTU1_TGIB1,\r
-DTCE_TPU8_TGI8A,DTCE_TPU8_TGI8B,\r
-DTCE_MTU2_TGIA2=150,DTCE_MTU2_TGIB2,\r
-DTCE_TPU9_TGI9A,DTCE_TPU9_TGI9B,DTCE_TPU9_TGI9C,DTCE_TPU9_TGI9D,\r
-DTCE_MTU3_TGIA3=152,DTCE_MTU3_TGIB3,DTCE_MTU3_TGIC3,DTCE_MTU3_TGID3,\r
-DTCE_TPU10_TGI10A,DTCE_TPU10_TGI10B,\r
-DTCE_MTU4_TGIA4=156,DTCE_MTU4_TGIB4,DTCE_MTU4_TGIC4,DTCE_MTU4_TGID4,DTCE_MTU4_TCIV4,\r
-DTCE_MTU5_TGIU5,DTCE_MTU5_TGIV5,DTCE_MTU5_TGIW5,\r
-DTCE_TPU11_TGI11A,DTCE_TPU11_TGI11B,\r
-DTCE_TMR0_CMIA0=170,DTCE_TMR0_CMIB0,\r
-DTCE_TMR1_CMIA1=173,DTCE_TMR1_CMIB1,\r
-DTCE_TMR2_CMIA2=176,DTCE_TMR2_CMIB2,\r
-DTCE_TMR3_CMIA3=179,DTCE_TMR3_CMIB3,\r
-DTCE_RIIC0_RXI0=183,DTCE_RIIC0_TXI0,\r
-DTCE_RIIC1_RXI1=187,DTCE_RIIC1_TXI1,\r
-DTCE_RIIC2_RXI2=191,DTCE_RIIC2_TXI2,\r
-DTCE_RIIC3_RXI3=195,DTCE_RIIC3_TXI3,\r
-DTCE_DMAC_DMAC0I=198,DTCE_DMAC_DMAC1I,DTCE_DMAC_DMAC2I,DTCE_DMAC_DMAC3I,\r
-DTCE_EXDMAC_EXDMAC0I,DTCE_EXDMAC_EXDMAC1I,\r
-DTCE_SCI0_RXI0=214,DTCE_SCI0_TXI0,\r
-DTCE_SCI1_RXI1=217,DTCE_SCI1_TXI1,\r
-DTCE_SCI2_RXI2=220,DTCE_SCI2_TXI2,\r
-DTCE_SCI3_RXI3=223,DTCE_SCI3_TXI3,\r
-DTCE_SCI4_RXI4=226,DTCE_SCI4_TXI4,\r
-DTCE_SCI5_RXI5=229,DTCE_SCI5_TXI5,\r
-DTCE_SCI6_RXI6=232,DTCE_SCI6_TXI6,\r
-DTCE_SCI7_RXI7=235,DTCE_SCI7_TXI7,\r
-DTCE_SCI8_RXI8=238,DTCE_SCI8_TXI8,\r
-DTCE_SCI9_RXI9=241,DTCE_SCI9_TXI9,\r
-DTCE_SCI10_RXI10=244,DTCE_SCI10_TXI10,\r
-DTCE_SCI11_RXI11=247,DTCE_SCI11_TXI11,\r
-DTCE_SCI12_RXI12=250,DTCE_SCI12_TXI12\r
-};\r
-\r
-enum enum_ier {\r
-IER_BSC_BUSERR=0x02,\r
-IER_FCU_FIFERR=0x02,IER_FCU_FRDYI=0x02,\r
-IER_ICU_SWINT=0x03,\r
-IER_CMT0_CMI0=0x03,\r
-IER_CMT1_CMI1=0x03,\r
-IER_CMT2_CMI2=0x03,\r
-IER_CMT3_CMI3=0x03,\r
-IER_ETHER_EINT=0x04,\r
-IER_USB0_D0FIFO0=0x04,IER_USB0_D1FIFO0=0x04,IER_USB0_USBI0=0x04,\r
-IER_USB1_D0FIFO1=0x04,IER_USB1_D1FIFO1=0x04,IER_USB1_USBI1=0x04,\r
-IER_RSPI0_SPRI0=0x04,IER_RSPI0_SPTI0=0x05,IER_RSPI0_SPII0=0x05,\r
-IER_RSPI1_SPRI1=0x05,IER_RSPI1_SPTI1=0x05,IER_RSPI1_SPII1=0x05,\r
-IER_RSPI2_SPRI2=0x05,IER_RSPI2_SPTI2=0x05,IER_RSPI2_SPII2=0x05,\r
-IER_CAN0_RXF0=0x06,IER_CAN0_TXF0=0x06,IER_CAN0_RXM0=0x06,IER_CAN0_TXM0=0x06,\r
-IER_CAN1_RXF1=0x06,IER_CAN1_TXF1=0x06,IER_CAN1_RXM1=0x06,IER_CAN1_TXM1=0x06,\r
-IER_CAN2_RXF2=0x07,IER_CAN2_TXF2=0x07,IER_CAN2_RXM2=0x07,IER_CAN2_TXM2=0x07,\r
-IER_RTC_COUNTUP=0x07,\r
-IER_ICU_IRQ0=0x08,IER_ICU_IRQ1=0x08,IER_ICU_IRQ2=0x08,IER_ICU_IRQ3=0x08,IER_ICU_IRQ4=0x08,IER_ICU_IRQ5=0x08,IER_ICU_IRQ6=0x08,IER_ICU_IRQ7=0x08,IER_ICU_IRQ8=0x09,IER_ICU_IRQ9=0x09,IER_ICU_IRQ10=0x09,IER_ICU_IRQ11=0x09,IER_ICU_IRQ12=0x09,IER_ICU_IRQ13=0x09,IER_ICU_IRQ14=0x09,IER_ICU_IRQ15=0x09,\r
-IER_USB_USBR0=0x0B,IER_USB_USBR1=0x0B,\r
-IER_RTC_ALARM=0x0B,IER_RTC_PRD=0x0B,\r
-IER_AD0_ADI0=0x0C,\r
-IER_S12AD0_S12ADI0=0x0C,\r
-IER_ICU_GROUPE0=0x0D,IER_ICU_GROUPE1=0x0D,IER_ICU_GROUPE2=0x0D,IER_ICU_GROUPE3=0x0D,IER_ICU_GROUPE4=0x0D,IER_ICU_GROUPE5=0x0D,IER_ICU_GROUPE6=0x0E,IER_ICU_GROUPL0=0x0E,\r
-IER_SCIX_SCIX0=0x0F,IER_SCIX_SCIX1=0x0F,IER_SCIX_SCIX2=0x0F,IER_SCIX_SCIX3=0x0F,\r
-IER_TPU0_TGI0A=0x0F,IER_TPU0_TGI0B=0x0F,IER_TPU0_TGI0C=0x10,IER_TPU0_TGI0D=0x10,\r
-IER_TPU1_TGI1A=0x10,IER_TPU1_TGI1B=0x10,\r
-IER_TPU2_TGI2A=0x10,IER_TPU2_TGI2B=0x10,\r
-IER_TPU3_TGI3A=0x10,IER_TPU3_TGI3B=0x10,IER_TPU3_TGI3C=0x11,IER_TPU3_TGI3D=0x11,\r
-IER_TPU4_TGI4A=0x11,IER_TPU4_TGI4B=0x11,\r
-IER_TPU5_TGI5A=0x11,IER_TPU5_TGI5B=0x11,\r
-IER_TPU6_TGI6A=0x11,IER_TPU6_TGI6B=0x11,IER_TPU6_TGI6C=0x12,IER_TPU6_TGI6D=0x12,\r
-IER_MTU0_TGIA0=0x11,IER_MTU0_TGIB0=0x11,IER_MTU0_TGIC0=0x12,IER_MTU0_TGID0=0x12,IER_MTU0_TGIE0=0x12,IER_MTU0_TGIF0=0x12,\r
-IER_TPU7_TGI7A=0x12,IER_TPU7_TGI7B=0x12,\r
-IER_MTU1_TGIA1=0x12,IER_MTU1_TGIB1=0x12,\r
-IER_TPU8_TGI8A=0x12,IER_TPU8_TGI8B=0x12,\r
-IER_MTU2_TGIA2=0x12,IER_MTU2_TGIB2=0x12,\r
-IER_TPU9_TGI9A=0x13,IER_TPU9_TGI9B=0x13,IER_TPU9_TGI9C=0x13,IER_TPU9_TGI9D=0x13,\r
-IER_MTU3_TGIA3=0x13,IER_MTU3_TGIB3=0x13,IER_MTU3_TGIC3=0x13,IER_MTU3_TGID3=0x13,\r
-IER_TPU10_TGI10A=0x13,IER_TPU10_TGI10B=0x13,\r
-IER_MTU4_TGIA4=0x13,IER_MTU4_TGIB4=0x13,IER_MTU4_TGIC4=0x13,IER_MTU4_TGID4=0x13,IER_MTU4_TCIV4=0x14,\r
-IER_MTU5_TGIU5=0x14,IER_MTU5_TGIV5=0x14,IER_MTU5_TGIW5=0x14,\r
-IER_TPU11_TGI11A=0x14,IER_TPU11_TGI11B=0x14,\r
-IER_POE_OEI1=0x14,IER_POE_OEI2=0x14,\r
-IER_TMR0_CMIA0=0x15,IER_TMR0_CMIB0=0x15,IER_TMR0_OVI0=0x15,\r
-IER_TMR1_CMIA1=0x15,IER_TMR1_CMIB1=0x15,IER_TMR1_OVI1=0x15,\r
-IER_TMR2_CMIA2=0x16,IER_TMR2_CMIB2=0x16,IER_TMR2_OVI2=0x16,\r
-IER_TMR3_CMIA3=0x16,IER_TMR3_CMIB3=0x16,IER_TMR3_OVI3=0x16,\r
-IER_RIIC0_EEI0=0x16,IER_RIIC0_RXI0=0x16,IER_RIIC0_TXI0=0x17,IER_RIIC0_TEI0=0x17,\r
-IER_RIIC1_EEI1=0x17,IER_RIIC1_RXI1=0x17,IER_RIIC1_TXI1=0x17,IER_RIIC1_TEI1=0x17,\r
-IER_RIIC2_EEI2=0x17,IER_RIIC2_RXI2=0x17,IER_RIIC2_TXI2=0x18,IER_RIIC2_TEI2=0x18,\r
-IER_RIIC3_EEI3=0x18,IER_RIIC3_RXI3=0x18,IER_RIIC3_TXI3=0x18,IER_RIIC3_TEI3=0x18,\r
-IER_DMAC_DMAC0I=0x18,IER_DMAC_DMAC1I=0x18,IER_DMAC_DMAC2I=0x19,IER_DMAC_DMAC3I=0x19,\r
-IER_EXDMAC_EXDMAC0I=0x19,IER_EXDMAC_EXDMAC1I=0x19,\r
-IER_SCI0_RXI0=0x1A,IER_SCI0_TXI0=0x1A,IER_SCI0_TEI0=0x1B,\r
-IER_SCI1_RXI1=0x1B,IER_SCI1_TXI1=0x1B,IER_SCI1_TEI1=0x1B,\r
-IER_SCI2_RXI2=0x1B,IER_SCI2_TXI2=0x1B,IER_SCI2_TEI2=0x1B,\r
-IER_SCI3_RXI3=0x1B,IER_SCI3_TXI3=0x1C,IER_SCI3_TEI3=0x1C,\r
-IER_SCI4_RXI4=0x1C,IER_SCI4_TXI4=0x1C,IER_SCI4_TEI4=0x1C,\r
-IER_SCI5_RXI5=0x1C,IER_SCI5_TXI5=0x1C,IER_SCI5_TEI5=0x1C,\r
-IER_SCI6_RXI6=0x1D,IER_SCI6_TXI6=0x1D,IER_SCI6_TEI6=0x1D,\r
-IER_SCI7_RXI7=0x1D,IER_SCI7_TXI7=0x1D,IER_SCI7_TEI7=0x1D,\r
-IER_SCI8_RXI8=0x1D,IER_SCI8_TXI8=0x1D,IER_SCI8_TEI8=0x1E,\r
-IER_SCI9_RXI9=0x1E,IER_SCI9_TXI9=0x1E,IER_SCI9_TEI9=0x1E,\r
-IER_SCI10_RXI10=0x1E,IER_SCI10_TXI10=0x1E,IER_SCI10_TEI10=0x1E,\r
-IER_SCI11_RXI11=0x1E,IER_SCI11_TXI11=0x1F,IER_SCI11_TEI11=0x1F,\r
-IER_SCI12_RXI12=0x1F,IER_SCI12_TXI12=0x1F,IER_SCI12_TEI12=0x1F,\r
-IER_IEB_IEBINT=0x1F\r
-};\r
-\r
-enum enum_ipr {\r
-IPR_BSC_BUSERR=0,\r
-IPR_FCU_FIFERR=1,IPR_FCU_FRDYI=2,\r
-IPR_ICU_SWINT=3,\r
-IPR_CMT0_CMI0=4,\r
-IPR_CMT1_CMI1=5,\r
-IPR_CMT2_CMI2=6,\r
-IPR_CMT3_CMI3=7,\r
-IPR_ETHER_EINT=32,\r
-IPR_USB0_D0FIFO0=33,IPR_USB0_D1FIFO0=34,IPR_USB0_USBI0=35,\r
-IPR_USB1_D0FIFO1=36,IPR_USB1_D1FIFO1=37,IPR_USB1_USBI1=38,\r
-IPR_RSPI0_SPRI0=39,IPR_RSPI0_SPTI0=39,IPR_RSPI0_SPII0=39,\r
-IPR_RSPI1_SPRI1=42,IPR_RSPI1_SPTI1=42,IPR_RSPI1_SPII1=42,\r
-IPR_RSPI2_SPRI2=45,IPR_RSPI2_SPTI2=45,IPR_RSPI2_SPII2=45,\r
-IPR_CAN0_RXF0=48,IPR_CAN0_TXF0=48,IPR_CAN0_RXM0=48,IPR_CAN0_TXM0=48,\r
-IPR_CAN1_RXF1=52,IPR_CAN1_TXF1=52,IPR_CAN1_RXM1=52,IPR_CAN1_TXM1=52,\r
-IPR_CAN2_RXF2=56,IPR_CAN2_TXF2=56,IPR_CAN2_RXM2=56,IPR_CAN2_TXM2=56,\r
-IPR_RTC_COUNTUP=62,\r
-IPR_ICU_IRQ0=64,IPR_ICU_IRQ1=65,IPR_ICU_IRQ2=66,IPR_ICU_IRQ3=67,IPR_ICU_IRQ4=68,IPR_ICU_IRQ5=69,IPR_ICU_IRQ6=70,IPR_ICU_IRQ7=71,IPR_ICU_IRQ8=72,IPR_ICU_IRQ9=73,IPR_ICU_IRQ10=74,IPR_ICU_IRQ11=75,IPR_ICU_IRQ12=76,IPR_ICU_IRQ13=77,IPR_ICU_IRQ14=78,IPR_ICU_IRQ15=79,\r
-IPR_USB_USBR0=90,IPR_USB_USBR1=91,\r
-IPR_RTC_ALARM=92,IPR_RTC_PRD=93,\r
-IPR_AD0_ADI0=98,\r
-IPR_S12AD0_S12ADI0=102,\r
-IPR_ICU_GROUPE0=106,IPR_ICU_GROUPE1=107,IPR_ICU_GROUPE2=108,IPR_ICU_GROUPE3=109,IPR_ICU_GROUPE4=110,IPR_ICU_GROUPE5=111,IPR_ICU_GROUPE6=112,IPR_ICU_GROUPL0=114,\r
-IPR_SCIX_SCIX0=122,IPR_SCIX_SCIX1=122,IPR_SCIX_SCIX2=122,IPR_SCIX_SCIX3=122,\r
-IPR_TPU0_TGI0A=126,IPR_TPU0_TGI0B=126,IPR_TPU0_TGI0C=126,IPR_TPU0_TGI0D=126,\r
-IPR_TPU1_TGI1A=130,IPR_TPU1_TGI1B=130,\r
-IPR_TPU2_TGI2A=132,IPR_TPU2_TGI2B=132,\r
-IPR_TPU3_TGI3A=134,IPR_TPU3_TGI3B=134,IPR_TPU3_TGI3C=134,IPR_TPU3_TGI3D=134,\r
-IPR_TPU4_TGI4A=138,IPR_TPU4_TGI4B=138,\r
-IPR_TPU5_TGI5A=140,IPR_TPU5_TGI5B=140,\r
-IPR_TPU6_TGI6A=142,IPR_TPU6_TGI6B=142,IPR_TPU6_TGI6C=142,IPR_TPU6_TGI6D=142,\r
-IPR_MTU0_TGIA0=142,IPR_MTU0_TGIB0=142,IPR_MTU0_TGIC0=142,IPR_MTU0_TGID0=142,IPR_MTU0_TGIE0=146,IPR_MTU0_TGIF0=146,\r
-IPR_TPU7_TGI7A=148,IPR_TPU7_TGI7B=148,\r
-IPR_MTU1_TGIA1=148,IPR_MTU1_TGIB1=148,\r
-IPR_TPU8_TGI8A=150,IPR_TPU8_TGI8B=150,\r
-IPR_MTU2_TGIA2=150,IPR_MTU2_TGIB2=150,\r
-IPR_TPU9_TGI9A=152,IPR_TPU9_TGI9B=152,IPR_TPU9_TGI9C=152,IPR_TPU9_TGI9D=152,\r
-IPR_MTU3_TGIA3=152,IPR_MTU3_TGIB3=152,IPR_MTU3_TGIC3=152,IPR_MTU3_TGID3=152,\r
-IPR_TPU10_TGI10A=156,IPR_TPU10_TGI10B=156,\r
-IPR_MTU4_TGIA4=156,IPR_MTU4_TGIB4=156,IPR_MTU4_TGIC4=156,IPR_MTU4_TGID4=156,IPR_MTU4_TCIV4=160,\r
-IPR_MTU5_TGIU5=161,IPR_MTU5_TGIV5=161,IPR_MTU5_TGIW5=161,\r
-IPR_TPU11_TGI11A=164,IPR_TPU11_TGI11B=164,\r
-IPR_POE_OEI1=166,IPR_POE_OEI2=166,\r
-IPR_TMR0_CMIA0=170,IPR_TMR0_CMIB0=170,IPR_TMR0_OVI0=170,\r
-IPR_TMR1_CMIA1=173,IPR_TMR1_CMIB1=173,IPR_TMR1_OVI1=173,\r
-IPR_TMR2_CMIA2=176,IPR_TMR2_CMIB2=176,IPR_TMR2_OVI2=176,\r
-IPR_TMR3_CMIA3=179,IPR_TMR3_CMIB3=179,IPR_TMR3_OVI3=179,\r
-IPR_RIIC0_EEI0=182,IPR_RIIC0_RXI0=183,IPR_RIIC0_TXI0=184,IPR_RIIC0_TEI0=185,\r
-IPR_RIIC1_EEI1=186,IPR_RIIC1_RXI1=187,IPR_RIIC1_TXI1=188,IPR_RIIC1_TEI1=189,\r
-IPR_RIIC2_EEI2=190,IPR_RIIC2_RXI2=191,IPR_RIIC2_TXI2=192,IPR_RIIC2_TEI2=193,\r
-IPR_RIIC3_EEI3=194,IPR_RIIC3_RXI3=195,IPR_RIIC3_TXI3=196,IPR_RIIC3_TEI3=197,\r
-IPR_DMAC_DMAC0I=198,IPR_DMAC_DMAC1I=199,IPR_DMAC_DMAC2I=200,IPR_DMAC_DMAC3I=201,\r
-IPR_EXDMAC_EXDMAC0I=202,IPR_EXDMAC_EXDMAC1I=203,\r
-IPR_SCI0_RXI0=214,IPR_SCI0_TXI0=214,IPR_SCI0_TEI0=214,\r
-IPR_SCI1_RXI1=217,IPR_SCI1_TXI1=217,IPR_SCI1_TEI1=217,\r
-IPR_SCI2_RXI2=220,IPR_SCI2_TXI2=220,IPR_SCI2_TEI2=220,\r
-IPR_SCI3_RXI3=223,IPR_SCI3_TXI3=223,IPR_SCI3_TEI3=223,\r
-IPR_SCI4_RXI4=226,IPR_SCI4_TXI4=226,IPR_SCI4_TEI4=226,\r
-IPR_SCI5_RXI5=229,IPR_SCI5_TXI5=229,IPR_SCI5_TEI5=229,\r
-IPR_SCI6_RXI6=232,IPR_SCI6_TXI6=232,IPR_SCI6_TEI6=232,\r
-IPR_SCI7_RXI7=235,IPR_SCI7_TXI7=235,IPR_SCI7_TEI7=235,\r
-IPR_SCI8_RXI8=238,IPR_SCI8_TXI8=238,IPR_SCI8_TEI8=238,\r
-IPR_SCI9_RXI9=241,IPR_SCI9_TXI9=241,IPR_SCI9_TEI9=241,\r
-IPR_SCI10_RXI10=244,IPR_SCI10_TXI10=244,IPR_SCI10_TEI10=244,\r
-IPR_SCI11_RXI11=247,IPR_SCI11_TXI11=247,IPR_SCI11_TEI11=247,\r
-IPR_SCI12_RXI12=250,IPR_SCI12_TXI12=250,IPR_SCI12_TEI12=250,\r
-IPR_IEB_IEBINT=253,\r
-IPR_BSC_=0,\r
-IPR_CMT0_=4,\r
-IPR_CMT1_=5,\r
-IPR_CMT2_=6,\r
-IPR_CMT3_=7,\r
-IPR_ETHER_=32,\r
-IPR_RSPI0_=39,\r
-IPR_RSPI1_=42,\r
-IPR_RSPI2_=45,\r
-IPR_CAN0_=48,\r
-IPR_CAN1_=52,\r
-IPR_CAN2_=56,\r
-IPR_AD0_=98,\r
-IPR_S12AD0_=102,\r
-IPR_SCIX_=122,\r
-IPR_SCIX_SCI=122,\r
-IPR_TPU0_=126,\r
-IPR_TPU0_TGI=126,\r
-IPR_TPU1_=130,\r
-IPR_TPU1_TGI=130,\r
-IPR_TPU2_=132,\r
-IPR_TPU2_TGI=132,\r
-IPR_TPU3_=134,\r
-IPR_TPU3_TGI=134,\r
-IPR_TPU4_=138,\r
-IPR_TPU4_TGI=138,\r
-IPR_TPU5_=140,\r
-IPR_TPU5_TGI=140,\r
-IPR_MTU5_=161,\r
-IPR_MTU5_TGI=161,\r
-IPR_TPU11_=164,\r
-IPR_TPU11_TGI=164,\r
-IPR_POE_=166,\r
-IPR_POE_OEI=166,\r
-IPR_TMR0_=170,\r
-IPR_TMR1_=173,\r
-IPR_TMR2_=176,\r
-IPR_TMR3_=179,\r
-IPR_SCI0_=214,\r
-IPR_SCI1_=217,\r
-IPR_SCI2_=220,\r
-IPR_SCI3_=223,\r
-IPR_SCI4_=226,\r
-IPR_SCI5_=229,\r
-IPR_SCI6_=232,\r
-IPR_SCI7_=235,\r
-IPR_SCI8_=238,\r
-IPR_SCI9_=241,\r
-IPR_SCI10_=244,\r
-IPR_SCI11_=247,\r
-IPR_SCI12_=250,\r
-IPR_IEB_=253\r
-};\r
-\r
-enum enum_grp {\r
-GRP_CAN0_ERS0=0,GRP_CAN1_ERS1=0,GRP_CAN2_ERS2=0,\r
-GRP_MTU0_TCIV0=1,GRP_MTU1_TCIV1=1,GRP_MTU1_TCIU1=1,\r
-GRP_MTU2_TCIV2=2,GRP_MTU2_TCIU2=2,GRP_MTU3_TCIV3=2,\r
-GRP_TPU0_TCI0V=3,GRP_TPU1_TCI1V=3,GRP_TPU1_TCI1U=3,GRP_TPU5_TCI5V=3,GRP_TPU5_TCI5U=3,\r
-GRP_TPU2_TCI2V=4,GRP_TPU2_TCI2U=4,GRP_TPU3_TCI3V=4,GRP_TPU4_TCI4V=4,GRP_TPU4_TCI4U=4,\r
-GRP_TPU6_TCI6V=5,GRP_TPU7_TCI7V=5,GRP_TPU7_TCI7U=5,GRP_TPU11_TCI11V=5,GRP_TPU11_TCI11U=5,\r
-GRP_TPU8_TCI8V=6,GRP_TPU8_TCI8U=6,GRP_TPU9_TCI9V=6,GRP_TPU10_TCI10V=6,GRP_TPU10_TCI10U=6,\r
-GRP_SCI0_ERI0=12,GRP_SCI1_ERI1=12,GRP_SCI2_ERI2=12,GRP_SCI3_ERI3=12,GRP_SCI4_ERI4=12,GRP_SCI5_ERI5=12,GRP_SCI6_ERI6=12,\r
-GRP_SCI7_ERI7=12,GRP_SCI8_ERI8=12,GRP_SCI9_ERI9=12,GRP_SCI10_ERI10=12,GRP_SCI11_ERI11=12,GRP_SCI12_ERI12=12,\r
-GRP_RSPI0_SPEI0=12,GRP_RSPI1_SPEI1=12,GRP_RSPI2_SPEI2=12\r
-};\r
-\r
-enum enum_gen {\r
-GEN_CAN0_ERS0=0,GEN_CAN1_ERS1=0,GEN_CAN2_ERS2=0,\r
-GEN_MTU0_TCIV0=1,GEN_MTU1_TCIV1=1,GEN_MTU1_TCIU1=1,\r
-GEN_MTU2_TCIV2=2,GEN_MTU2_TCIU2=2,GEN_MTU3_TCIV3=2,\r
-GEN_TPU0_TCI0V=3,GEN_TPU1_TCI1V=3,GEN_TPU1_TCI1U=3,GEN_TPU5_TCI5V=3,GEN_TPU5_TCI5U=3,\r
-GEN_TPU2_TCI2V=4,GEN_TPU2_TCI2U=4,GEN_TPU3_TCI3V=4,GEN_TPU4_TCI4V=4,GEN_TPU4_TCI4U=4,\r
-GEN_TPU6_TCI6V=5,GEN_TPU7_TCI7V=5,GEN_TPU7_TCI7U=5,GEN_TPU11_TCI11V=5,GEN_TPU11_TCI11U=5,\r
-GEN_TPU8_TCI8V=6,GEN_TPU8_TCI8U=6,GEN_TPU9_TCI9V=6,GEN_TPU10_TCI10V=6,GEN_TPU10_TCI10U=6,\r
-GEN_SCI0_ERI0=12,GEN_SCI1_ERI1=12,GEN_SCI2_ERI2=12,GEN_SCI3_ERI3=12,GEN_SCI4_ERI4=12,GEN_SCI5_ERI5=12,GEN_SCI6_ERI6=12,\r
-GEN_SCI7_ERI7=12,GEN_SCI8_ERI8=12,GEN_SCI9_ERI9=12,GEN_SCI10_ERI10=12,GEN_SCI11_ERI11=12,GEN_SCI12_ERI12=12,\r
-GEN_RSPI0_SPEI0=12,GEN_RSPI1_SPEI1=12,GEN_RSPI2_SPEI2=12\r
-};\r
-\r
-enum enum_gcr {\r
-GCR_CAN0_ERS0=0,GCR_CAN1_ERS1=0,GCR_CAN2_ERS2=0,\r
-GCR_MTU0_TCIV0=1,GCR_MTU1_TCIV1=1,GCR_MTU1_TCIU1=1,\r
-GCR_MTU2_TCIV2=2,GCR_MTU2_TCIU2=2,GCR_MTU3_TCIV3=2,\r
-GCR_TPU0_TCI0V=3,GCR_TPU1_TCI1V=3,GCR_TPU1_TCI1U=3,GCR_TPU5_TCI5V=3,GCR_TPU5_TCI5U=3,\r
-GCR_TPU2_TCI2V=4,GCR_TPU2_TCI2U=4,GCR_TPU3_TCI3V=4,GCR_TPU4_TCI4V=4,GCR_TPU4_TCI4U=4,\r
-GCR_TPU6_TCI6V=5,GCR_TPU7_TCI7V=5,GCR_TPU7_TCI7U=5,GCR_TPU11_TCI11V=5,GCR_TPU11_TCI11U=5,\r
-GCR_TPU8_TCI8V=6,GCR_TPU8_TCI8U=6,GCR_TPU9_TCI9V=6,GCR_TPU10_TCI10V=6,GCR_TPU10_TCI10U=6,\r
-GCR_SCI0_ERI0=12,GCR_SCI1_ERI1=12,GCR_SCI2_ERI2=12,GCR_SCI3_ERI3=12,GCR_SCI4_ERI4=12,GCR_SCI5_ERI5=12,GCR_SCI6_ERI6=12,\r
-GCR_SCI7_ERI7=12,GCR_SCI8_ERI8=12,GCR_SCI9_ERI9=12,GCR_SCI10_ERI10=12,GCR_SCI11_ERI11=12,GCR_SCI12_ERI12=12,\r
-GCR_RSPI0_SPEI0=12,GCR_RSPI1_SPEI1=12,GCR_RSPI2_SPEI2=12\r
-};\r
-\r
-#define        IEN_BSC_BUSERR          IEN0\r
-#define        IEN_FCU_FIFERR          IEN5\r
-#define        IEN_FCU_FRDYI           IEN7\r
-#define        IEN_ICU_SWINT           IEN3\r
-#define        IEN_CMT0_CMI0           IEN4\r
-#define        IEN_CMT1_CMI1           IEN5\r
-#define        IEN_CMT2_CMI2           IEN6\r
-#define        IEN_CMT3_CMI3           IEN7\r
-#define        IEN_ETHER_EINT          IEN0\r
-#define        IEN_USB0_D0FIFO0        IEN1\r
-#define        IEN_USB0_D1FIFO0        IEN2\r
-#define        IEN_USB0_USBI0          IEN3\r
-#define        IEN_USB1_D0FIFO1        IEN4\r
-#define        IEN_USB1_D1FIFO1        IEN5\r
-#define        IEN_USB1_USBI1          IEN6\r
-#define        IEN_RSPI0_SPRI0         IEN7\r
-#define        IEN_RSPI0_SPTI0         IEN0\r
-#define        IEN_RSPI0_SPII0         IEN1\r
-#define        IEN_RSPI1_SPRI1         IEN2\r
-#define        IEN_RSPI1_SPTI1         IEN3\r
-#define        IEN_RSPI1_SPII1         IEN4\r
-#define        IEN_RSPI2_SPRI2         IEN5\r
-#define        IEN_RSPI2_SPTI2         IEN6\r
-#define        IEN_RSPI2_SPII2         IEN7\r
-#define        IEN_CAN0_RXF0           IEN0\r
-#define        IEN_CAN0_TXF0           IEN1\r
-#define        IEN_CAN0_RXM0           IEN2\r
-#define        IEN_CAN0_TXM0           IEN3\r
-#define        IEN_CAN1_RXF1           IEN4\r
-#define        IEN_CAN1_TXF1           IEN5\r
-#define        IEN_CAN1_RXM1           IEN6\r
-#define        IEN_CAN1_TXM1           IEN7\r
-#define        IEN_CAN2_RXF2           IEN0\r
-#define        IEN_CAN2_TXF2           IEN1\r
-#define        IEN_CAN2_RXM2           IEN2\r
-#define        IEN_CAN2_TXM2           IEN3\r
-#define        IEN_RTC_COUNTUP         IEN6\r
-#define        IEN_ICU_IRQ0            IEN0\r
-#define        IEN_ICU_IRQ1            IEN1\r
-#define        IEN_ICU_IRQ2            IEN2\r
-#define        IEN_ICU_IRQ3            IEN3\r
-#define        IEN_ICU_IRQ4            IEN4\r
-#define        IEN_ICU_IRQ5            IEN5\r
-#define        IEN_ICU_IRQ6            IEN6\r
-#define        IEN_ICU_IRQ7            IEN7\r
-#define        IEN_ICU_IRQ8            IEN0\r
-#define        IEN_ICU_IRQ9            IEN1\r
-#define        IEN_ICU_IRQ10           IEN2\r
-#define        IEN_ICU_IRQ11           IEN3\r
-#define        IEN_ICU_IRQ12           IEN4\r
-#define        IEN_ICU_IRQ13           IEN5\r
-#define        IEN_ICU_IRQ14           IEN6\r
-#define        IEN_ICU_IRQ15           IEN7\r
-#define        IEN_USB_USBR0           IEN2\r
-#define        IEN_USB_USBR1           IEN3\r
-#define        IEN_RTC_ALARM           IEN4\r
-#define        IEN_RTC_PRD                     IEN5\r
-#define        IEN_AD0_ADI0            IEN2\r
-#define        IEN_S12AD0_S12ADI0      IEN6\r
-#define        IEN_ICU_GROUPE0         IEN2\r
-#define        IEN_ICU_GROUPE1         IEN3\r
-#define        IEN_ICU_GROUPE2         IEN4\r
-#define        IEN_ICU_GROUPE3         IEN5\r
-#define        IEN_ICU_GROUPE4         IEN6\r
-#define        IEN_ICU_GROUPE5         IEN7\r
-#define        IEN_ICU_GROUPE6         IEN0\r
-#define        IEN_ICU_GROUPL0         IEN2\r
-#define        IEN_SCIX_SCIX0          IEN2\r
-#define        IEN_SCIX_SCIX1          IEN3\r
-#define        IEN_SCIX_SCIX2          IEN4\r
-#define        IEN_SCIX_SCIX3          IEN5\r
-#define        IEN_TPU0_TGI0A          IEN6\r
-#define        IEN_TPU0_TGI0B          IEN7\r
-#define        IEN_TPU0_TGI0C          IEN0\r
-#define        IEN_TPU0_TGI0D          IEN1\r
-#define        IEN_TPU1_TGI1A          IEN2\r
-#define        IEN_TPU1_TGI1B          IEN3\r
-#define        IEN_TPU2_TGI2A          IEN4\r
-#define        IEN_TPU2_TGI2B          IEN5\r
-#define        IEN_TPU3_TGI3A          IEN6\r
-#define        IEN_TPU3_TGI3B          IEN7\r
-#define        IEN_TPU3_TGI3C          IEN0\r
-#define        IEN_TPU3_TGI3D          IEN1\r
-#define        IEN_TPU4_TGI4A          IEN2\r
-#define        IEN_TPU4_TGI4B          IEN3\r
-#define        IEN_TPU5_TGI5A          IEN4\r
-#define        IEN_TPU5_TGI5B          IEN5\r
-#define        IEN_TPU6_TGI6A          IEN6\r
-#define        IEN_TPU6_TGI6B          IEN7\r
-#define        IEN_TPU6_TGI6C          IEN0\r
-#define        IEN_TPU6_TGI6D          IEN1\r
-#define        IEN_MTU0_TGIA0          IEN6\r
-#define        IEN_MTU0_TGIB0          IEN7\r
-#define        IEN_MTU0_TGIC0          IEN0\r
-#define        IEN_MTU0_TGID0          IEN1\r
-#define        IEN_MTU0_TGIE0          IEN2\r
-#define        IEN_MTU0_TGIF0          IEN3\r
-#define        IEN_TPU7_TGI7A          IEN4\r
-#define        IEN_TPU7_TGI7B          IEN5\r
-#define        IEN_MTU1_TGIA1          IEN4\r
-#define        IEN_MTU1_TGIB1          IEN5\r
-#define        IEN_TPU8_TGI8A          IEN6\r
-#define        IEN_TPU8_TGI8B          IEN7\r
-#define        IEN_MTU2_TGIA2          IEN6\r
-#define        IEN_MTU2_TGIB2          IEN7\r
-#define        IEN_TPU9_TGI9A          IEN0\r
-#define        IEN_TPU9_TGI9B          IEN1\r
-#define        IEN_TPU9_TGI9C          IEN2\r
-#define        IEN_TPU9_TGI9D          IEN3\r
-#define        IEN_MTU3_TGIA3          IEN0\r
-#define        IEN_MTU3_TGIB3          IEN1\r
-#define        IEN_MTU3_TGIC3          IEN2\r
-#define        IEN_MTU3_TGID3          IEN3\r
-#define        IEN_TPU10_TGI10A        IEN4\r
-#define        IEN_TPU10_TGI10B        IEN5\r
-#define        IEN_MTU4_TGIA4          IEN4\r
-#define        IEN_MTU4_TGIB4          IEN5\r
-#define        IEN_MTU4_TGIC4          IEN6\r
-#define        IEN_MTU4_TGID4          IEN7\r
-#define        IEN_MTU4_TCIV4          IEN0\r
-#define        IEN_MTU5_TGIU5          IEN1\r
-#define        IEN_MTU5_TGIV5          IEN2\r
-#define        IEN_MTU5_TGIW5          IEN3\r
-#define        IEN_TPU11_TGI11A        IEN4\r
-#define        IEN_TPU11_TGI11B        IEN5\r
-#define        IEN_POE_OEI1            IEN6\r
-#define        IEN_POE_OEI2            IEN7\r
-#define        IEN_TMR0_CMIA0          IEN2\r
-#define        IEN_TMR0_CMIB0          IEN3\r
-#define        IEN_TMR0_OVI0           IEN4\r
-#define        IEN_TMR1_CMIA1          IEN5\r
-#define        IEN_TMR1_CMIB1          IEN6\r
-#define        IEN_TMR1_OVI1           IEN7\r
-#define        IEN_TMR2_CMIA2          IEN0\r
-#define        IEN_TMR2_CMIB2          IEN1\r
-#define        IEN_TMR2_OVI2           IEN2\r
-#define        IEN_TMR3_CMIA3          IEN3\r
-#define        IEN_TMR3_CMIB3          IEN4\r
-#define        IEN_TMR3_OVI3           IEN5\r
-#define        IEN_RIIC0_EEI0          IEN6\r
-#define        IEN_RIIC0_RXI0          IEN7\r
-#define        IEN_RIIC0_TXI0          IEN0\r
-#define        IEN_RIIC0_TEI0          IEN1\r
-#define        IEN_RIIC1_EEI1          IEN2\r
-#define        IEN_RIIC1_RXI1          IEN3\r
-#define        IEN_RIIC1_TXI1          IEN4\r
-#define        IEN_RIIC1_TEI1          IEN5\r
-#define        IEN_RIIC2_EEI2          IEN6\r
-#define        IEN_RIIC2_RXI2          IEN7\r
-#define        IEN_RIIC2_TXI2          IEN0\r
-#define        IEN_RIIC2_TEI2          IEN1\r
-#define        IEN_RIIC3_EEI3          IEN2\r
-#define        IEN_RIIC3_RXI3          IEN3\r
-#define        IEN_RIIC3_TXI3          IEN4\r
-#define        IEN_RIIC3_TEI3          IEN5\r
-#define        IEN_DMAC_DMAC0I         IEN6\r
-#define        IEN_DMAC_DMAC1I         IEN7\r
-#define        IEN_DMAC_DMAC2I         IEN0\r
-#define        IEN_DMAC_DMAC3I         IEN1\r
-#define        IEN_EXDMAC_EXDMAC0I     IEN2\r
-#define        IEN_EXDMAC_EXDMAC1I     IEN3\r
-#define        IEN_SCI0_RXI0           IEN6\r
-#define        IEN_SCI0_TXI0           IEN7\r
-#define        IEN_SCI0_TEI0           IEN0\r
-#define        IEN_SCI1_RXI1           IEN1\r
-#define        IEN_SCI1_TXI1           IEN2\r
-#define        IEN_SCI1_TEI1           IEN3\r
-#define        IEN_SCI2_RXI2           IEN4\r
-#define        IEN_SCI2_TXI2           IEN5\r
-#define        IEN_SCI2_TEI2           IEN6\r
-#define        IEN_SCI3_RXI3           IEN7\r
-#define        IEN_SCI3_TXI3           IEN0\r
-#define        IEN_SCI3_TEI3           IEN1\r
-#define        IEN_SCI4_RXI4           IEN2\r
-#define        IEN_SCI4_TXI4           IEN3\r
-#define        IEN_SCI4_TEI4           IEN4\r
-#define        IEN_SCI5_RXI5           IEN5\r
-#define        IEN_SCI5_TXI5           IEN6\r
-#define        IEN_SCI5_TEI5           IEN7\r
-#define        IEN_SCI6_RXI6           IEN0\r
-#define        IEN_SCI6_TXI6           IEN1\r
-#define        IEN_SCI6_TEI6           IEN2\r
-#define        IEN_SCI7_RXI7           IEN3\r
-#define        IEN_SCI7_TXI7           IEN4\r
-#define        IEN_SCI7_TEI7           IEN5\r
-#define        IEN_SCI8_RXI8           IEN6\r
-#define        IEN_SCI8_TXI8           IEN7\r
-#define        IEN_SCI8_TEI8           IEN0\r
-#define        IEN_SCI9_RXI9           IEN1\r
-#define        IEN_SCI9_TXI9           IEN2\r
-#define        IEN_SCI9_TEI9           IEN3\r
-#define        IEN_SCI10_RXI10         IEN4\r
-#define        IEN_SCI10_TXI10         IEN5\r
-#define        IEN_SCI10_TEI10         IEN6\r
-#define        IEN_SCI11_RXI11         IEN7\r
-#define        IEN_SCI11_TXI11         IEN0\r
-#define        IEN_SCI11_TEI11         IEN1\r
-#define        IEN_SCI12_RXI12         IEN2\r
-#define        IEN_SCI12_TXI12         IEN3\r
-#define        IEN_SCI12_TEI12         IEN4\r
-#define        IEN_IEB_IEBINT          IEN5\r
-\r
-#define        VECT_BSC_BUSERR         16\r
-#define        VECT_FCU_FIFERR         21\r
-#define        VECT_FCU_FRDYI          23\r
-#define        VECT_ICU_SWINT          27\r
-#define        VECT_CMT0_CMI0          28\r
-#define        VECT_CMT1_CMI1          29\r
-#define        VECT_CMT2_CMI2          30\r
-#define        VECT_CMT3_CMI3          31\r
-#define        VECT_ETHER_EINT         32\r
-#define        VECT_USB0_D0FIFO0       33\r
-#define        VECT_USB0_D1FIFO0       34\r
-#define        VECT_USB0_USBI0         35\r
-#define        VECT_USB1_D0FIFO1       36\r
-#define        VECT_USB1_D1FIFO1       37\r
-#define        VECT_USB1_USBI1         38\r
-#define        VECT_RSPI0_SPRI0        39\r
-#define        VECT_RSPI0_SPTI0        40\r
-#define        VECT_RSPI0_SPII0        41\r
-#define        VECT_RSPI1_SPRI1        42\r
-#define        VECT_RSPI1_SPTI1        43\r
-#define        VECT_RSPI1_SPII1        44\r
-#define        VECT_RSPI2_SPRI2        45\r
-#define        VECT_RSPI2_SPTI2        46\r
-#define        VECT_RSPI2_SPII2        47\r
-#define        VECT_CAN0_RXF0          48\r
-#define        VECT_CAN0_TXF0          49\r
-#define        VECT_CAN0_RXM0          50\r
-#define        VECT_CAN0_TXM0          51\r
-#define        VECT_CAN1_RXF1          52\r
-#define        VECT_CAN1_TXF1          53\r
-#define        VECT_CAN1_RXM1          54\r
-#define        VECT_CAN1_TXM1          55\r
-#define        VECT_CAN2_RXF2          56\r
-#define        VECT_CAN2_TXF2          57\r
-#define        VECT_CAN2_RXM2          58\r
-#define        VECT_CAN2_TXM2          59\r
-#define        VECT_RTC_COUNTUP        62\r
-#define        VECT_ICU_IRQ0           64\r
-#define        VECT_ICU_IRQ1           65\r
-#define        VECT_ICU_IRQ2           66\r
-#define        VECT_ICU_IRQ3           67\r
-#define        VECT_ICU_IRQ4           68\r
-#define        VECT_ICU_IRQ5           69\r
-#define        VECT_ICU_IRQ6           70\r
-#define        VECT_ICU_IRQ7           71\r
-#define        VECT_ICU_IRQ8           72\r
-#define        VECT_ICU_IRQ9           73\r
-#define        VECT_ICU_IRQ10          74\r
-#define        VECT_ICU_IRQ11          75\r
-#define        VECT_ICU_IRQ12          76\r
-#define        VECT_ICU_IRQ13          77\r
-#define        VECT_ICU_IRQ14          78\r
-#define        VECT_ICU_IRQ15          79\r
-#define        VECT_USB_USBR0          90\r
-#define        VECT_USB_USBR1          91\r
-#define        VECT_RTC_ALARM          92\r
-#define        VECT_RTC_PRD            93\r
-#define        VECT_AD0_ADI0           98\r
-#define        VECT_S12AD0_S12ADI0     102\r
-#define        VECT_ICU_GROUPE0        106\r
-#define        VECT_ICU_GROUPE1        107\r
-#define        VECT_ICU_GROUPE2        108\r
-#define        VECT_ICU_GROUPE3        109\r
-#define        VECT_ICU_GROUPE4        110\r
-#define        VECT_ICU_GROUPE5        111\r
-#define        VECT_ICU_GROUPE6        112\r
-#define        VECT_ICU_GROUPL0        114\r
-#define        VECT_SCIX_SCIX0         122\r
-#define        VECT_SCIX_SCIX1         123\r
-#define        VECT_SCIX_SCIX2         124\r
-#define        VECT_SCIX_SCIX3         125\r
-#define        VECT_TPU0_TGI0A         126\r
-#define        VECT_TPU0_TGI0B         127\r
-#define        VECT_TPU0_TGI0C         128\r
-#define        VECT_TPU0_TGI0D         129\r
-#define        VECT_TPU1_TGI1A         130\r
-#define        VECT_TPU1_TGI1B         131\r
-#define        VECT_TPU2_TGI2A         132\r
-#define        VECT_TPU2_TGI2B         133\r
-#define        VECT_TPU3_TGI3A         134\r
-#define        VECT_TPU3_TGI3B         135\r
-#define        VECT_TPU3_TGI3C         136\r
-#define        VECT_TPU3_TGI3D         137\r
-#define        VECT_TPU4_TGI4A         138\r
-#define        VECT_TPU4_TGI4B         139\r
-#define        VECT_TPU5_TGI5A         140\r
-#define        VECT_TPU5_TGI5B         141\r
-#define        VECT_TPU6_TGI6A         142\r
-#define        VECT_TPU6_TGI6B         143\r
-#define        VECT_TPU6_TGI6C         144\r
-#define        VECT_TPU6_TGI6D         145\r
-#define        VECT_MTU0_TGIA0         142\r
-#define        VECT_MTU0_TGIB0         143\r
-#define        VECT_MTU0_TGIC0         144\r
-#define        VECT_MTU0_TGID0         145\r
-#define        VECT_MTU0_TGIE0         146\r
-#define        VECT_MTU0_TGIF0         147\r
-#define        VECT_TPU7_TGI7A         148\r
-#define        VECT_TPU7_TGI7B         149\r
-#define        VECT_MTU1_TGIA1         148\r
-#define        VECT_MTU1_TGIB1         149\r
-#define        VECT_TPU8_TGI8A         150\r
-#define        VECT_TPU8_TGI8B         151\r
-#define        VECT_MTU2_TGIA2         150\r
-#define        VECT_MTU2_TGIB2         151\r
-#define        VECT_TPU9_TGI9A         152\r
-#define        VECT_TPU9_TGI9B         153\r
-#define        VECT_TPU9_TGI9C         154\r
-#define        VECT_TPU9_TGI9D         155\r
-#define        VECT_MTU3_TGIA3         152\r
-#define        VECT_MTU3_TGIB3         153\r
-#define        VECT_MTU3_TGIC3         154\r
-#define        VECT_MTU3_TGID3         155\r
-#define        VECT_TPU10_TGI10A       156\r
-#define        VECT_TPU10_TGI10B       157\r
-#define        VECT_MTU4_TGIA4         156\r
-#define        VECT_MTU4_TGIB4         157\r
-#define        VECT_MTU4_TGIC4         158\r
-#define        VECT_MTU4_TGID4         159\r
-#define        VECT_MTU4_TCIV4         160\r
-#define        VECT_MTU5_TGIU5         161\r
-#define        VECT_MTU5_TGIV5         162\r
-#define        VECT_MTU5_TGIW5         163\r
-#define        VECT_TPU11_TGI11A       164\r
-#define        VECT_TPU11_TGI11B       165\r
-#define        VECT_POE_OEI1           166\r
-#define        VECT_POE_OEI2           167\r
-#define        VECT_TMR0_CMIA0         170\r
-#define        VECT_TMR0_CMIB0         171\r
-#define        VECT_TMR0_OVI0          172\r
-#define        VECT_TMR1_CMIA1         173\r
-#define        VECT_TMR1_CMIB1         174\r
-#define        VECT_TMR1_OVI1          175\r
-#define        VECT_TMR2_CMIA2         176\r
-#define        VECT_TMR2_CMIB2         177\r
-#define        VECT_TMR2_OVI2          178\r
-#define        VECT_TMR3_CMIA3         179\r
-#define        VECT_TMR3_CMIB3         180\r
-#define        VECT_TMR3_OVI3          181\r
-#define        VECT_RIIC0_EEI0         182\r
-#define        VECT_RIIC0_RXI0         183\r
-#define        VECT_RIIC0_TXI0         184\r
-#define        VECT_RIIC0_TEI0         185\r
-#define        VECT_RIIC1_EEI1         186\r
-#define        VECT_RIIC1_RXI1         187\r
-#define        VECT_RIIC1_TXI1         188\r
-#define        VECT_RIIC1_TEI1         189\r
-#define        VECT_RIIC2_EEI2         190\r
-#define        VECT_RIIC2_RXI2         191\r
-#define        VECT_RIIC2_TXI2         192\r
-#define        VECT_RIIC2_TEI2         193\r
-#define        VECT_RIIC3_EEI3         194\r
-#define        VECT_RIIC3_RXI3         195\r
-#define        VECT_RIIC3_TXI3         196\r
-#define        VECT_RIIC3_TEI3         197\r
-#define        VECT_DMAC_DMAC0I        198\r
-#define        VECT_DMAC_DMAC1I        199\r
-#define        VECT_DMAC_DMAC2I        200\r
-#define        VECT_DMAC_DMAC3I        201\r
-#define        VECT_EXDMAC_EXDMAC0I    202\r
-#define        VECT_EXDMAC_EXDMAC1I    203\r
-#define        VECT_SCI0_RXI0          214\r
-#define        VECT_SCI0_TXI0          215\r
-#define        VECT_SCI0_TEI0          216\r
-#define        VECT_SCI1_RXI1          217\r
-#define        VECT_SCI1_TXI1          218\r
-#define        VECT_SCI1_TEI1          219\r
-#define        VECT_SCI2_RXI2          220\r
-#define        VECT_SCI2_TXI2          221\r
-#define        VECT_SCI2_TEI2          222\r
-#define        VECT_SCI3_RXI3          223\r
-#define        VECT_SCI3_TXI3          224\r
-#define        VECT_SCI3_TEI3          225\r
-#define        VECT_SCI4_RXI4          226\r
-#define        VECT_SCI4_TXI4          227\r
-#define        VECT_SCI4_TEI4          228\r
-#define        VECT_SCI5_RXI5          229\r
-#define        VECT_SCI5_TXI5          230\r
-#define        VECT_SCI5_TEI5          231\r
-#define        VECT_SCI6_RXI6          232\r
-#define        VECT_SCI6_TXI6          233\r
-#define        VECT_SCI6_TEI6          234\r
-#define        VECT_SCI7_RXI7          235\r
-#define        VECT_SCI7_TXI7          236\r
-#define        VECT_SCI7_TEI7          237\r
-#define        VECT_SCI8_RXI8          238\r
-#define        VECT_SCI8_TXI8          239\r
-#define        VECT_SCI8_TEI8          240\r
-#define        VECT_SCI9_RXI9          241\r
-#define        VECT_SCI9_TXI9          242\r
-#define        VECT_SCI9_TEI9          243\r
-#define        VECT_SCI10_RXI10        244\r
-#define        VECT_SCI10_TXI10        245\r
-#define        VECT_SCI10_TEI10        246\r
-#define        VECT_SCI11_RXI11        247\r
-#define        VECT_SCI11_TXI11        248\r
-#define        VECT_SCI11_TEI11        249\r
-#define        VECT_SCI12_RXI12        250\r
-#define        VECT_SCI12_TXI12        251\r
-#define        VECT_SCI12_TEI12        252\r
-#define        VECT_IEB_IEBINT         253\r
-\r
-#define        MSTP_DMAC       SYSTEM.MSTPCRA.BIT.MSTPA28\r
-#define        MSTP_DMAC0      SYSTEM.MSTPCRA.BIT.MSTPA28\r
-#define        MSTP_DMAC1      SYSTEM.MSTPCRA.BIT.MSTPA28\r
-#define        MSTP_DMAC2      SYSTEM.MSTPCRA.BIT.MSTPA28\r
-#define        MSTP_DMAC3      SYSTEM.MSTPCRA.BIT.MSTPA28\r
-#define        MSTP_DTC        SYSTEM.MSTPCRA.BIT.MSTPA28\r
-#define        MSTP_AD         SYSTEM.MSTPCRA.BIT.MSTPA23\r
-#define        MSTP_DA         SYSTEM.MSTPCRA.BIT.MSTPA19\r
-#define        MSTP_S12AD      SYSTEM.MSTPCRA.BIT.MSTPA17\r
-#define        MSTP_CMT0       SYSTEM.MSTPCRA.BIT.MSTPA15\r
-#define        MSTP_CMT1       SYSTEM.MSTPCRA.BIT.MSTPA15\r
-#define        MSTP_CMT2       SYSTEM.MSTPCRA.BIT.MSTPA14\r
-#define        MSTP_CMT3       SYSTEM.MSTPCRA.BIT.MSTPA14\r
-#define        MSTP_TPU0       SYSTEM.MSTPCRA.BIT.MSTPA13\r
-#define        MSTP_TPU1       SYSTEM.MSTPCRA.BIT.MSTPA13\r
-#define        MSTP_TPU2       SYSTEM.MSTPCRA.BIT.MSTPA13\r
-#define        MSTP_TPU3       SYSTEM.MSTPCRA.BIT.MSTPA13\r
-#define        MSTP_TPU4       SYSTEM.MSTPCRA.BIT.MSTPA13\r
-#define        MSTP_TPU5       SYSTEM.MSTPCRA.BIT.MSTPA13\r
-#define        MSTP_TPU6       SYSTEM.MSTPCRA.BIT.MSTPA12\r
-#define        MSTP_TPU7       SYSTEM.MSTPCRA.BIT.MSTPA12\r
-#define        MSTP_TPU8       SYSTEM.MSTPCRA.BIT.MSTPA12\r
-#define        MSTP_TPU9       SYSTEM.MSTPCRA.BIT.MSTPA12\r
-#define        MSTP_TPU10      SYSTEM.MSTPCRA.BIT.MSTPA12\r
-#define        MSTP_TPU11      SYSTEM.MSTPCRA.BIT.MSTPA12\r
-#define        MSTP_PPG0       SYSTEM.MSTPCRA.BIT.MSTPA11\r
-#define        MSTP_PPG1       SYSTEM.MSTPCRA.BIT.MSTPA10\r
-#define        MSTP_MTU        SYSTEM.MSTPCRA.BIT.MSTPA9\r
-#define        MSTP_MTU0       SYSTEM.MSTPCRA.BIT.MSTPA9\r
-#define        MSTP_MTU1       SYSTEM.MSTPCRA.BIT.MSTPA9\r
-#define        MSTP_MTU2       SYSTEM.MSTPCRA.BIT.MSTPA9\r
-#define        MSTP_MTU3       SYSTEM.MSTPCRA.BIT.MSTPA9\r
-#define        MSTP_MTU4       SYSTEM.MSTPCRA.BIT.MSTPA9\r
-#define        MSTP_MTU5       SYSTEM.MSTPCRA.BIT.MSTPA9\r
-#define        MSTP_TMR0       SYSTEM.MSTPCRA.BIT.MSTPA5\r
-#define        MSTP_TMR1       SYSTEM.MSTPCRA.BIT.MSTPA5\r
-#define        MSTP_TMR01      SYSTEM.MSTPCRA.BIT.MSTPA5\r
-#define        MSTP_TMR2       SYSTEM.MSTPCRA.BIT.MSTPA4\r
-#define        MSTP_TMR3       SYSTEM.MSTPCRA.BIT.MSTPA4\r
-#define        MSTP_TMR23      SYSTEM.MSTPCRA.BIT.MSTPA4\r
-#define        MSTP_SCI0       SYSTEM.MSTPCRB.BIT.MSTPB31\r
-#define        MSTP_SMCI0      SYSTEM.MSTPCRB.BIT.MSTPB31\r
-#define        MSTP_SCI1       SYSTEM.MSTPCRB.BIT.MSTPB30\r
-#define        MSTP_SMCI1      SYSTEM.MSTPCRB.BIT.MSTPB30\r
-#define        MSTP_SCI2       SYSTEM.MSTPCRB.BIT.MSTPB29\r
-#define        MSTP_SMCI2      SYSTEM.MSTPCRB.BIT.MSTPB29\r
-#define        MSTP_SCI3       SYSTEM.MSTPCRB.BIT.MSTPB28\r
-#define        MSTP_SMCI3      SYSTEM.MSTPCRB.BIT.MSTPB28\r
-#define        MSTP_SCI4       SYSTEM.MSTPCRB.BIT.MSTPB27\r
-#define        MSTP_SMCI4      SYSTEM.MSTPCRB.BIT.MSTPB27\r
-#define        MSTP_SCI5       SYSTEM.MSTPCRB.BIT.MSTPB26\r
-#define        MSTP_SMCI5      SYSTEM.MSTPCRB.BIT.MSTPB26\r
-#define        MSTP_SCI6       SYSTEM.MSTPCRB.BIT.MSTPB25\r
-#define        MSTP_SMCI6      SYSTEM.MSTPCRB.BIT.MSTPB25\r
-#define        MSTP_SCI7       SYSTEM.MSTPCRB.BIT.MSTPB24\r
-#define        MSTP_SMCI7      SYSTEM.MSTPCRB.BIT.MSTPB24\r
-#define        MSTP_CRC        SYSTEM.MSTPCRB.BIT.MSTPB23\r
-#define        MSTP_RIIC0      SYSTEM.MSTPCRB.BIT.MSTPB21\r
-#define        MSTP_RIIC1      SYSTEM.MSTPCRB.BIT.MSTPB20\r
-#define        MSTP_USB0       SYSTEM.MSTPCRB.BIT.MSTPB19\r
-#define        MSTP_RSPI0      SYSTEM.MSTPCRB.BIT.MSTPB17\r
-#define        MSTP_RSPI1      SYSTEM.MSTPCRB.BIT.MSTPB16\r
-#define        MSTP_EDMAC  SYSTEM.MSTPCRB.BIT.MSTPB15\r
-#define        MSTP_TEMPS      SYSTEM.MSTPCRB.BIT.MSTPB8\r
-#define        MSTP_SCI12      SYSTEM.MSTPCRB.BIT.MSTPB4\r
-#define        MSTP_SMCI12     SYSTEM.MSTPCRB.BIT.MSTPB4\r
-#define        MSTP_CAN2       SYSTEM.MSTPCRB.BIT.MSTPB2\r
-#define        MSTP_CAN1       SYSTEM.MSTPCRB.BIT.MSTPB1\r
-#define        MSTP_CAN0       SYSTEM.MSTPCRB.BIT.MSTPB0\r
-#define        MSTP_SCI8       SYSTEM.MSTPCRC.BIT.MSTPC27\r
-#define        MSTP_SMCI8      SYSTEM.MSTPCRC.BIT.MSTPC27\r
-#define        MSTP_SCI9       SYSTEM.MSTPCRC.BIT.MSTPC26\r
-#define        MSTP_SMCI9      SYSTEM.MSTPCRC.BIT.MSTPC26\r
-#define        MSTP_SCI10      SYSTEM.MSTPCRC.BIT.MSTPC25\r
-#define        MSTP_SMCI10     SYSTEM.MSTPCRC.BIT.MSTPC25\r
-#define        MSTP_SCI11      SYSTEM.MSTPCRC.BIT.MSTPC24\r
-#define        MSTP_SMCI11     SYSTEM.MSTPCRC.BIT.MSTPC24\r
-#define        MSTP_RSPI2      SYSTEM.MSTPCRC.BIT.MSTPC22\r
-#define        MSTP_LVD        SYSTEM.MSTPCRC.BIT.MSTPC20\r
-#define        MSTP_IEB        SYSTEM.MSTPCRC.BIT.MSTPC18\r
-#define        MSTP_RIIC2      SYSTEM.MSTPCRC.BIT.MSTPC17\r
-#define        MSTP_RIIC3      SYSTEM.MSTPCRC.BIT.MSTPC16\r
-#define        MSTP_RAM1       SYSTEM.MSTPCRC.BIT.MSTPC1\r
-#define        MSTP_RAM0       SYSTEM.MSTPCRC.BIT.MSTPC0\r
-\r
-#define        IS_CAN0_ERS0            IS0\r
-#define        IS_CAN1_ERS1            IS1\r
-#define        IS_CAN2_ERS2            IS2\r
-#define        IS_MTU0_TCIV0           IS0\r
-#define        IS_MTU1_TCIV1           IS1\r
-#define        IS_MTU1_TCIU1           IS2\r
-#define        IS_MTU2_TCIV2           IS0\r
-#define        IS_MTU2_TCIU2           IS1\r
-#define        IS_MTU3_TCIV3           IS2\r
-#define        IS_TPU0_TCI0V           IS0\r
-#define        IS_TPU1_TCI1V           IS1\r
-#define        IS_TPU1_TCI1U           IS2\r
-#define        IS_TPU5_TCI5V           IS3\r
-#define        IS_TPU5_TCI5U           IS4\r
-#define        IS_TPU2_TCI2V           IS0\r
-#define        IS_TPU2_TCI2U           IS1\r
-#define        IS_TPU3_TCI3V           IS2\r
-#define        IS_TPU4_TCI4V           IS3\r
-#define        IS_TPU4_TCI4U           IS4\r
-#define        IS_TPU6_TCI6V           IS0\r
-#define        IS_TPU7_TCI7V           IS1\r
-#define        IS_TPU7_TCI7U           IS2\r
-#define        IS_TPU11_TCI11V         IS3\r
-#define        IS_TPU11_TCI11U         IS4\r
-#define        IS_TPU8_TCI8V           IS0\r
-#define        IS_TPU8_TCI8U           IS1\r
-#define        IS_TPU9_TCI9V           IS2\r
-#define        IS_TPU10_TCI10V         IS3\r
-#define        IS_TPU10_TCI10U         IS4\r
-#define        IS_SCI0_ERI0            IS0\r
-#define        IS_SCI1_ERI1            IS1\r
-#define        IS_SCI2_ERI2            IS2\r
-#define        IS_SCI3_ERI3            IS3\r
-#define        IS_SCI4_ERI4            IS4\r
-#define        IS_SCI5_ERI5            IS5\r
-#define        IS_SCI6_ERI6            IS6\r
-#define        IS_SCI7_ERI7            IS7\r
-#define        IS_SCI8_ERI8            IS8\r
-#define        IS_SCI9_ERI9            IS9\r
-#define        IS_SCI10_ERI10          IS10\r
-#define        IS_SCI11_ERI11          IS11\r
-#define        IS_SCI12_ERI12          IS12\r
-#define        IS_RSPI0_SPEI0          IS13\r
-#define        IS_RSPI1_SPEI1          IS14\r
-#define        IS_RSPI2_SPEI2          IS15\r
-\r
-#define        EN_CAN0_ERS0            EN0\r
-#define        EN_CAN1_ERS1            EN1\r
-#define        EN_CAN2_ERS2            EN2\r
-#define        EN_MTU0_TCIV0           EN0\r
-#define        EN_MTU1_TCIV1           EN1\r
-#define        EN_MTU1_TCIU1           EN2\r
-#define        EN_MTU2_TCIV2           EN0\r
-#define        EN_MTU2_TCIU2           EN1\r
-#define        EN_MTU3_TCIV3           EN2\r
-#define        EN_TPU0_TCI0V           EN0\r
-#define        EN_TPU1_TCI1V           EN1\r
-#define        EN_TPU1_TCI1U           EN2\r
-#define        EN_TPU5_TCI5V           EN3\r
-#define        EN_TPU5_TCI5U           EN4\r
-#define        EN_TPU2_TCI2V           EN0\r
-#define        EN_TPU2_TCI2U           EN1\r
-#define        EN_TPU3_TCI3V           EN2\r
-#define        EN_TPU4_TCI4V           EN3\r
-#define        EN_TPU4_TCI4U           EN4\r
-#define        EN_TPU6_TCI6V           EN0\r
-#define        EN_TPU7_TCI7V           EN1\r
-#define        EN_TPU7_TCI7U           EN2\r
-#define        EN_TPU11_TCI11V         EN3\r
-#define        EN_TPU11_TCI11U         EN4\r
-#define        EN_TPU8_TCI8V           EN0\r
-#define        EN_TPU8_TCI8U           EN1\r
-#define        EN_TPU9_TCI9V           EN2\r
-#define        EN_TPU10_TCI10V         EN3\r
-#define        EN_TPU10_TCI10U         EN4\r
-#define        EN_SCI0_ERI0            EN0\r
-#define        EN_SCI1_ERI1            EN1\r
-#define        EN_SCI2_ERI2            EN2\r
-#define        EN_SCI3_ERI3            EN3\r
-#define        EN_SCI4_ERI4            EN4\r
-#define        EN_SCI5_ERI5            EN5\r
-#define        EN_SCI6_ERI6            EN6\r
-#define        EN_SCI7_ERI7            EN7\r
-#define        EN_SCI8_ERI8            EN8\r
-#define        EN_SCI9_ERI9            EN9\r
-#define        EN_SCI10_ERI10          EN10\r
-#define        EN_SCI11_ERI11          EN11\r
-#define        EN_SCI12_ERI12          EN12\r
-#define        EN_RSPI0_SPEI0          EN13\r
-#define        EN_RSPI1_SPEI1          EN14\r
-#define        EN_RSPI2_SPEI2          EN15\r
-\r
-#define        CLR_CAN0_ERS0           CLR0\r
-#define        CLR_CAN1_ERS1           CLR1\r
-#define        CLR_CAN2_ERS2           CLR2\r
-#define        CLR_MTU0_TCIV0          CLR0\r
-#define        CLR_MTU1_TCIV1          CLR1\r
-#define        CLR_MTU1_TCIU1          CLR2\r
-#define        CLR_MTU2_TCIV2          CLR0\r
-#define        CLR_MTU2_TCIU2          CLR1\r
-#define        CLR_MTU3_TCIV3          CLR2\r
-#define        CLR_TPU0_TCI0V          CLR0\r
-#define        CLR_TPU1_TCI1V          CLR1\r
-#define        CLR_TPU1_TCI1U          CLR2\r
-#define        CLR_TPU5_TCI5V          CLR3\r
-#define        CLR_TPU5_TCI5U          CLR4\r
-#define        CLR_TPU2_TCI2V          CLR0\r
-#define        CLR_TPU2_TCI2U          CLR1\r
-#define        CLR_TPU3_TCI3V          CLR2\r
-#define        CLR_TPU4_TCI4V          CLR3\r
-#define        CLR_TPU4_TCI4U          CLR4\r
-#define        CLR_TPU6_TCI6V          CLR0\r
-#define        CLR_TPU7_TCI7V          CLR1\r
-#define        CLR_TPU7_TCI7U          CLR2\r
-#define        CLR_TPU11_TCI11V        CLR3\r
-#define        CLR_TPU11_TCI11U        CLR4\r
-#define        CLR_TPU8_TCI8V          CLR0\r
-#define        CLR_TPU8_TCI8U          CLR1\r
-#define        CLR_TPU9_TCI9V          CLR2\r
-#define        CLR_TPU10_TCI10V        CLR3\r
-#define        CLR_TPU10_TCI10U        CLR4\r
-#define        CLR_SCI0_ERI0           CLR0\r
-#define        CLR_SCI1_ERI1           CLR1\r
-#define        CLR_SCI2_ERI2           CLR2\r
-#define        CLR_SCI3_ERI3           CLR3\r
-#define        CLR_SCI4_ERI4           CLR4\r
-#define        CLR_SCI5_ERI5           CLR5\r
-#define        CLR_SCI6_ERI6           CLR6\r
-#define        CLR_SCI7_ERI7           CLR7\r
-#define        CLR_SCI8_ERI8           CLR8\r
-#define        CLR_SCI9_ERI9           CLR9\r
-#define        CLR_SCI10_ERI10         CLR10\r
-#define        CLR_SCI11_ERI11         CLR11\r
-#define        CLR_SCI12_ERI12         CLR12\r
-#define        CLR_RSPI0_SPEI0         CLR13\r
-#define        CLR_RSPI1_SPEI1         CLR14\r
-#define        CLR_RSPI2_SPEI2         CLR15\r
-\r
-#define        CN_TPU6_TGI6A           CN0\r
-#define        CN_TPU6_TGI6B           CN0\r
-#define        CN_TPU6_TGI6C           CN0\r
-#define        CN_TPU6_TGI6D           CN0\r
-#define        CN_MTU0_TGIA0           CN0\r
-#define        CN_MTU0_TGIB0           CN0\r
-#define        CN_MTU0_TGIC0           CN0\r
-#define        CN_MTU0_TGID0           CN0\r
-#define        CN_MTU0_TGIE0           CN0\r
-#define        CN_MTU0_TGIF0           CN0\r
-#define        CN_TPU7_TGI7A           CN1\r
-#define        CN_TPU7_TGI7B           CN1\r
-#define        CN_MTU1_TGIA1           CN1\r
-#define        CN_MTU1_TGIB1           CN1\r
-#define        CN_TPU8_TGI8A           CN2\r
-#define        CN_TPU8_TGI8B           CN2\r
-#define        CN_MTU2_TGIA2           CN2\r
-#define        CN_MTU2_TGIB2           CN2\r
-#define        CN_TPU9_TGI9A           CN3\r
-#define        CN_TPU9_TGI9B           CN3\r
-#define        CN_TPU9_TGI9C           CN3\r
-#define        CN_TPU9_TGI9D           CN3\r
-#define        CN_MTU3_TGIA3           CN3\r
-#define        CN_MTU3_TGIB3           CN3\r
-#define        CN_MTU3_TGIC3           CN3\r
-#define        CN_MTU3_TGID3           CN3\r
-#define        CN_TPU10_TGI10A         CN4\r
-#define        CN_TPU10_TGI10B         CN4\r
-#define        CN_MTU4_TGIA4           CN4\r
-#define        CN_MTU4_TGIB4           CN4\r
-#define        CN_MTU4_TGIC4           CN4\r
-#define        CN_MTU4_TGID4           CN4\r
-#define        CN_MTU4_TGIV4           CN4\r
-#define        CN_TPU11_TGI11A         CN5\r
-#define        CN_TPU11_TGI11B         CN5\r
-#define        CN_MTU5_TGIU5           CN5\r
-#define        CN_MTU5_TGIV5           CN5\r
-#define        CN_MTU5_TGIW5           CN5\r
-#define        CN_TPU6_                        CN0\r
-#define        CN_MTU0_                        CN0\r
-#define        CN_TPU7_                        CN1\r
-#define        CN_MTU1_                        CN1\r
-#define        CN_TPU8_                        CN2\r
-#define        CN_MTU2_                        CN2\r
-#define        CN_TPU9_                        CN3\r
-#define        CN_MTU3_                        CN3\r
-#define        CN_TPU10_                       CN4\r
-#define        CN_MTU4_                        CN4\r
-#define        CN_TPU11_                       CN5\r
-#define        CN_MTU5_                        CN5\r
-\r
-#define        __IR( x )               ICU.IR[ IR ## x ].BIT.IR\r
-#define         _IR( x )               __IR( x )\r
-#define          IR( x , y )   _IR( _ ## x ## _ ## y )\r
-#define        __DTCE( x )             ICU.DTCER[ DTCE ## x ].BIT.DTCE\r
-#define         _DTCE( x )             __DTCE( x )\r
-#define          DTCE( x , y ) _DTCE( _ ## x ## _ ## y )\r
-#define        __IEN( x )              ICU.IER[ IER ## x ].BIT.IEN ## x\r
-#define         _IEN( x )              __IEN( x )\r
-#define          IEN( x , y )  _IEN( _ ## x ## _ ## y )\r
-#define        __IPR( x )              ICU.IPR[ IPR ## x ].BIT.IPR\r
-#define         _IPR( x )              __IPR( x )\r
-#define          IPR( x , y )  _IPR( _ ## x ## _ ## y )\r
-#define        __VECT( x )             VECT ## x\r
-#define         _VECT( x )             __VECT( x )\r
-#define          VECT( x , y ) _VECT( _ ## x ## _ ## y )\r
-#define        __MSTP( x )             MSTP ## x\r
-#define         _MSTP( x )             __MSTP( x )\r
-#define          MSTP( x )             _MSTP( _ ## x )\r
-\r
-#define        __IS( x )               ICU.GRP[ GRP ## x ].BIT.IS ## x\r
-#define         _IS( x )               __IS( x )\r
-#define          IS( x , y )   _IS( _ ## x ## _ ## y )\r
-#define        __EN( x )               ICU.GEN[ GEN ## x ].BIT.EN ## x\r
-#define         _EN( x )               __EN( x )\r
-#define          EN( x , y )   _EN( _ ## x ## _ ## y )\r
-#define        __CLR( x )              ICU.GCR[ GCR ## x ].BIT.CLR ## x\r
-#define         _CLR( x )              __CLR( x )\r
-#define          CLR( x , y )  _CLR( _ ## x ## _ ## y )\r
-#define        __CN( x )               ICU.SEL.BIT.CN ## x\r
-#define         _CN( x )               __CN( x )\r
-#define          CN( x , y )   _CN( _ ## x ## _ ## y )\r
-\r
-#define        AD              (*(volatile struct st_ad      __evenaccess *)0x89800)\r
-#define        BSC             (*(volatile struct st_bsc     __evenaccess *)0x81300)\r
-#define        CAN0    (*(volatile struct st_can     __evenaccess *)0x90200)\r
-#define        CAN1    (*(volatile struct st_can     __evenaccess *)0x91200)\r
-#define        CAN2    (*(volatile struct st_can     __evenaccess *)0x92200)\r
-#define        CMT             (*(volatile struct st_cmt     __evenaccess *)0x88000)\r
-#define        CMT0    (*(volatile struct st_cmt0    __evenaccess *)0x88002)\r
-#define        CMT1    (*(volatile struct st_cmt0    __evenaccess *)0x88008)\r
-#define        CMT2    (*(volatile struct st_cmt0    __evenaccess *)0x88012)\r
-#define        CMT3    (*(volatile struct st_cmt0    __evenaccess *)0x88018)\r
-#define        CRC             (*(volatile struct st_crc     __evenaccess *)0x88280)\r
-#define        DA              (*(volatile struct st_da      __evenaccess *)0x880C0)\r
-#define        DMAC    (*(volatile struct st_dmac    __evenaccess *)0x82200)\r
-#define        DMAC0   (*(volatile struct st_dmac0   __evenaccess *)0x82000)\r
-#define        DMAC1   (*(volatile struct st_dmac1   __evenaccess *)0x82040)\r
-#define        DMAC2   (*(volatile struct st_dmac1   __evenaccess *)0x82080)\r
-#define        DMAC3   (*(volatile struct st_dmac1   __evenaccess *)0x820C0)\r
-#define        DTC             (*(volatile struct st_dtc     __evenaccess *)0x82400)\r
-#define        EDMAC   (*(volatile struct st_edmac   __evenaccess *)0xC0000)\r
-#define        ETHERC  (*(volatile struct st_etherc  __evenaccess *)0xC0100)\r
-#define        EXDMAC  (*(volatile struct st_exdmac  __evenaccess *)0x82A00)\r
-#define        EXDMAC0 (*(volatile struct st_exdmac0 __evenaccess *)0x82800)\r
-#define        EXDMAC1 (*(volatile struct st_exdmac1 __evenaccess *)0x82840)\r
-#define        FLASH   (*(volatile struct st_flash   __evenaccess *)0x8C296)\r
-#define        ICU             (*(volatile struct st_icu     __evenaccess *)0x87000)\r
-#define        IEB             (*(volatile struct st_ieb     __evenaccess *)0x8A800)\r
-#define        IWDT    (*(volatile struct st_iwdt    __evenaccess *)0x88030)\r
-#define        MPC             (*(volatile struct st_mpc     __evenaccess *)0x8C100)\r
-#define        MTU             (*(volatile struct st_mtu     __evenaccess *)0x8860A)\r
-#define        MTU0    (*(volatile struct st_mtu0    __evenaccess *)0x88690)\r
-#define        MTU1    (*(volatile struct st_mtu1    __evenaccess *)0x88690)\r
-#define        MTU2    (*(volatile struct st_mtu2    __evenaccess *)0x88692)\r
-#define        MTU3    (*(volatile struct st_mtu3    __evenaccess *)0x88600)\r
-#define        MTU4    (*(volatile struct st_mtu4    __evenaccess *)0x88600)\r
-#define        MTU5    (*(volatile struct st_mtu5    __evenaccess *)0x88694)\r
-#define        POE             (*(volatile struct st_poe     __evenaccess *)0x88900)\r
-#define        PORT0   (*(volatile struct st_port0   __evenaccess *)0x8C000)\r
-#define        PORT1   (*(volatile struct st_port1   __evenaccess *)0x8C001)\r
-#define        PORT2   (*(volatile struct st_port2   __evenaccess *)0x8C002)\r
-#define        PORT3   (*(volatile struct st_port3   __evenaccess *)0x8C003)\r
-#define        PORT4   (*(volatile struct st_port4   __evenaccess *)0x8C004)\r
-#define        PORT5   (*(volatile struct st_port5   __evenaccess *)0x8C005)\r
-#define        PORT6   (*(volatile struct st_port6   __evenaccess *)0x8C006)\r
-#define        PORT7   (*(volatile struct st_port7   __evenaccess *)0x8C007)\r
-#define        PORT8   (*(volatile struct st_port8   __evenaccess *)0x8C008)\r
-#define        PORT9   (*(volatile struct st_port9   __evenaccess *)0x8C009)\r
-#define        PORTA   (*(volatile struct st_porta   __evenaccess *)0x8C00A)\r
-#define        PORTB   (*(volatile struct st_portb   __evenaccess *)0x8C00B)\r
-#define        PORTC   (*(volatile struct st_portc   __evenaccess *)0x8C00C)\r
-#define        PORTD   (*(volatile struct st_portd   __evenaccess *)0x8C00D)\r
-#define        PORTE   (*(volatile struct st_porte   __evenaccess *)0x8C00E)\r
-#define        PORTF   (*(volatile struct st_portf   __evenaccess *)0x8C00F)\r
-#define        PORTG   (*(volatile struct st_portg   __evenaccess *)0x8C010)\r
-#define        PORTH   (*(volatile struct st_porth   __evenaccess *)0x8C0D1)\r
-#define        PORTJ   (*(volatile struct st_portj   __evenaccess *)0x8C012)\r
-#define        PPG0    (*(volatile struct st_ppg0    __evenaccess *)0x881E6)\r
-#define        PPG1    (*(volatile struct st_ppg1    __evenaccess *)0x881F0)\r
-#define        RIIC0   (*(volatile struct st_riic0   __evenaccess *)0x88300)\r
-#define        RIIC1   (*(volatile struct st_riic1   __evenaccess *)0x88320)\r
-#define        RIIC2   (*(volatile struct st_riic1   __evenaccess *)0x88340)\r
-#define        RIIC3   (*(volatile struct st_riic1   __evenaccess *)0x88360)\r
-#define        RSPI0   (*(volatile struct st_rspi    __evenaccess *)0x88380)\r
-#define        RSPI1   (*(volatile struct st_rspi    __evenaccess *)0x883A0)\r
-#define        RSPI2   (*(volatile struct st_rspi    __evenaccess *)0x883C0)\r
-#define        RTC             (*(volatile struct st_rtc     __evenaccess *)0x8C400)\r
-#define        S12AD   (*(volatile struct st_s12ad   __evenaccess *)0x89000)\r
-#define        SCI0    (*(volatile struct st_sci0    __evenaccess *)0x8A000)\r
-#define        SCI1    (*(volatile struct st_sci0    __evenaccess *)0x8A020)\r
-#define        SCI2    (*(volatile struct st_sci0    __evenaccess *)0x8A040)\r
-#define        SCI3    (*(volatile struct st_sci0    __evenaccess *)0x8A060)\r
-#define        SCI4    (*(volatile struct st_sci0    __evenaccess *)0x8A080)\r
-#define        SCI5    (*(volatile struct st_sci0    __evenaccess *)0x8A0A0)\r
-#define        SCI6    (*(volatile struct st_sci0    __evenaccess *)0x8A0C0)\r
-#define        SCI7    (*(volatile struct st_sci7    __evenaccess *)0x8A0E0)\r
-#define        SCI8    (*(volatile struct st_sci0    __evenaccess *)0x8A100)\r
-#define        SCI9    (*(volatile struct st_sci0    __evenaccess *)0x8A120)\r
-#define        SCI10   (*(volatile struct st_sci0    __evenaccess *)0x8A140)\r
-#define        SCI11   (*(volatile struct st_sci0    __evenaccess *)0x8A160)\r
-#define        SCI12   (*(volatile struct st_sci12   __evenaccess *)0x8B300)\r
-#define        SMCI0   (*(volatile struct st_smci0   __evenaccess *)0x8A000)\r
-#define        SMCI1   (*(volatile struct st_smci0   __evenaccess *)0x8A020)\r
-#define        SMCI2   (*(volatile struct st_smci0   __evenaccess *)0x8A040)\r
-#define        SMCI3   (*(volatile struct st_smci0   __evenaccess *)0x8A060)\r
-#define        SMCI4   (*(volatile struct st_smci0   __evenaccess *)0x8A080)\r
-#define        SMCI5   (*(volatile struct st_smci0   __evenaccess *)0x8A0A0)\r
-#define        SMCI6   (*(volatile struct st_smci0   __evenaccess *)0x8A0C0)\r
-#define        SMCI7   (*(volatile struct st_smci7   __evenaccess *)0x8A0E0)\r
-#define        SMCI8   (*(volatile struct st_smci0   __evenaccess *)0x8A100)\r
-#define        SMCI9   (*(volatile struct st_smci0   __evenaccess *)0x8A120)\r
-#define        SMCI10  (*(volatile struct st_smci0   __evenaccess *)0x8A140)\r
-#define        SMCI11  (*(volatile struct st_smci0   __evenaccess *)0x8A160)\r
-#define        SMCI12  (*(volatile struct st_smci0   __evenaccess *)0x8B300)\r
-#define        SYSTEM  (*(volatile struct st_system  __evenaccess *)0x80000)\r
-#define        TEMPS   (*(volatile struct st_temps   __evenaccess *)0x8C500)\r
-#define        TMR0    (*(volatile struct st_tmr0    __evenaccess *)0x88200)\r
-#define        TMR1    (*(volatile struct st_tmr1    __evenaccess *)0x88201)\r
-#define        TMR2    (*(volatile struct st_tmr0    __evenaccess *)0x88210)\r
-#define        TMR3    (*(volatile struct st_tmr1    __evenaccess *)0x88211)\r
-#define        TMR01   (*(volatile struct st_tmr01   __evenaccess *)0x88204)\r
-#define        TMR23   (*(volatile struct st_tmr01   __evenaccess *)0x88214)\r
-#define        TPU0    (*(volatile struct st_tpu0    __evenaccess *)0x88108)\r
-#define        TPU1    (*(volatile struct st_tpu1    __evenaccess *)0x88108)\r
-#define        TPU2    (*(volatile struct st_tpu2    __evenaccess *)0x8810A)\r
-#define        TPU3    (*(volatile struct st_tpu3    __evenaccess *)0x8810A)\r
-#define        TPU4    (*(volatile struct st_tpu4    __evenaccess *)0x8810C)\r
-#define        TPU5    (*(volatile struct st_tpu5    __evenaccess *)0x8810C)\r
-#define        TPU6    (*(volatile struct st_tpu0    __evenaccess *)0x88178)\r
-#define        TPU7    (*(volatile struct st_tpu1    __evenaccess *)0x88178)\r
-#define        TPU8    (*(volatile struct st_tpu2    __evenaccess *)0x8817A)\r
-#define        TPU9    (*(volatile struct st_tpu3    __evenaccess *)0x8817A)\r
-#define        TPU10   (*(volatile struct st_tpu4    __evenaccess *)0x8817C)\r
-#define        TPU11   (*(volatile struct st_tpu5    __evenaccess *)0x8817C)\r
-#define        TPUA    (*(volatile struct st_tpua    __evenaccess *)0x88100)\r
-#define        TPUB    (*(volatile struct st_tpub    __evenaccess *)0x88170)\r
-#define        USB             (*(volatile struct st_usb     __evenaccess *)0xA0400)\r
-#define        USB0    (*(volatile struct st_usb0    __evenaccess *)0xA0000)\r
-#define        USB1    (*(volatile struct st_usb1    __evenaccess *)0xA0200)\r
-#define        WDT             (*(volatile struct st_wdt     __evenaccess *)0x88020)\r
-#pragma bit_order\r
-#pragma packoption\r
-#endif\r
diff --git a/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/Renesas-Files/mcu/rx63n/iodefine.h_from_toolchain b/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/Renesas-Files/mcu/rx63n/iodefine.h_from_toolchain
deleted file mode 100644 (file)
index d1f3cfc..0000000
+++ /dev/null
@@ -1,12063 +0,0 @@
-/************************************************************************\r
-*\r
-* Device     : RX/RX600/RX63N\r
-*\r
-* File Name  : ioedfine.h\r
-*\r
-* Abstract   : Definition of I/O Register.\r
-*\r
-* History    : 0.50  (2011-03-28)  [Hardware Manual Revision : 0.50]\r
-*            : 0.02  (2010-11-01)  [Hardware Manual Revision : 0.01]\r
-*\r
-* NOTE       : THIS IS A TYPICAL EXAMPLE.\r
-*\r
-* Copyright (C) 2010(2011) Renesas Electronics Corporation\r
-* and Renesas Solutions Corp.\r
-*\r
-************************************************************************/\r
-/********************************************************************************/\r
-/*                                                                              */\r
-/*  DESCRIPTION : Definition of ICU Register                                    */\r
-/*  CPU TYPE    : RX63N                                                         */\r
-/*                                                                              */\r
-/*  Usage : IR,DTCER,IER,IPR of ICU Register                                    */\r
-/*     The following IR, DTCE, IEN, IPR macro functions simplify usage.         */\r
-/*     The bit access operation is "Bit_Name(interrupt source,name)".           */\r
-/*     A part of the name can be omitted.                                       */\r
-/*     for example :                                                            */\r
-/*       IR(TPU0,TGI0A) = 0;     expands to :                                   */\r
-/*         ICU.IR[126].BIT.IR = 0;                                              */\r
-/*                                                                              */\r
-/*       DTCE(ICU,IRQ0) = 1;     expands to :                                   */\r
-/*         ICU.DTCER[64].BIT.DTCE = 1;                                          */\r
-/*                                                                              */\r
-/*       IEN(CMT0,CMI0) = 1;     expands to :                                   */\r
-/*         ICU.IER[0x03].BIT.IEN4 = 1;                                          */\r
-/*                                                                              */\r
-/*       IPR(TPU0,TGI0A) = 2;    expands to :                                   */\r
-/*       IPR(TPU0,TGI  ) = 2;    // TGI0A,TGI0B,TGI0C,TGI0D share IPR level.    */\r
-/*         ICU.IPR[126].BIT.IPR = 2;                                            */\r
-/*                                                                              */\r
-/*       IPR(SCI0,RXI0) = 3;     expands to :                                   */\r
-/*       IPR(SCI0,    ) = 3;     // SCI0 uses single IPR for all sources.       */\r
-/*         ICU.IPR[214].BIT.IPR = 3;                                            */\r
-/*                                                                              */\r
-/*  Usage : #pragma interrupt Function_Identifier(vect=**)                      */\r
-/*     The number of vector is "(interrupt source, name)".                      */\r
-/*     for example :                                                            */\r
-/*       #pragma interrupt INT_IRQ0(vect=VECT(ICU,IRQ0))          expands to :  */\r
-/*         #pragma interrupt INT_IRQ0(vect=64)                                  */\r
-/*       #pragma interrupt INT_CMT0_CMI0(vect=VECT(CMT0,CMI0))    expands to :  */\r
-/*         #pragma interrupt INT_CMT0_CMI0(vect=28)                             */\r
-/*       #pragma interrupt INT_MTU0_TGIA0(vect=VECT(MTU0,TGIA0))  expands to :  */\r
-/*         #pragma interrupt INT_MTU0_TGIA0(vect=142)                           */\r
-/*       #pragma interrupt INT_TPU0_TGI0A(vect=VECT(TPU0,TGI0A))  expands to :  */\r
-/*         #pragma interrupt INT_TPU0_TGI0A(vect=126)                           */\r
-/*                                                                              */\r
-/*  Usage : MSTPCRA,MSTPCRB,MSTPCRC of SYSTEM Register                          */\r
-/*     The bit access operation is "MSTP(name)".                                */\r
-/*     The name that can be used is a macro name defined with "iodefine.h".     */\r
-/*     for example :                                                            */\r
-/*       MSTP(TMR2) = 0;    // TMR2,TMR3,TMR23                    expands to :  */\r
-/*         SYSTEM.MSTPCRA.BIT.MSTPA4  = 0;                                      */\r
-/*       MSTP(SCI0) = 0;    // SCI0,SMCI0                         expands to :  */\r
-/*         SYSTEM.MSTPCRB.BIT.MSTPB31 = 0;                                      */\r
-/*       MSTP(MTU4) = 0;    // MTU,MTU0,MTU1,MTU2,MTU3,MTU4,MTU5  expands to :  */\r
-/*         SYSTEM.MSTPCRA.BIT.MSTPA9  = 0;                                      */\r
-/*       MSTP(TPU4) = 0;    // TPU0,TPU1,TPU2,TPU3,TPU4,TPU5      expands to :  */\r
-/*         SYSTEM.MSTPCRA.BIT.MSTPA13 = 0;                                      */\r
-/*       MSTP(CMT3) = 0;    // CMT2,CMT3                          expands to :  */\r
-/*         SYSTEM.MSTPCRA.BIT.MSTPA14 = 0;                                      */\r
-/*                                                                              */\r
-/*                                                                              */\r
-/********************************************************************************/\r
-#ifndef __RX63NIODEFINE_HEADER__\r
-#define __RX63NIODEFINE_HEADER__\r
-#pragma bit_order left\r
-#pragma unpack\r
-struct st_ad {\r
-       unsigned short ADDRA;\r
-       unsigned short ADDRB;\r
-       unsigned short ADDRC;\r
-       unsigned short ADDRD;\r
-       unsigned short ADDRE;\r
-       unsigned short ADDRF;\r
-       unsigned short ADDRG;\r
-       unsigned short ADDRH;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char ADIE:1;\r
-                       unsigned char ADST:1;\r
-                       unsigned char :2;\r
-                       unsigned char CH:3;\r
-               } BIT;\r
-       } ADCSR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TRGS:3;\r
-                       unsigned char :1;\r
-                       unsigned char CKS:2;\r
-                       unsigned char MODE:2;\r
-               } BIT;\r
-       } ADCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char DPSEL:1;\r
-                       unsigned char EXOEN:1;\r
-                       unsigned char EXSEL:2;\r
-               } BIT;\r
-       } ADCR2;\r
-       unsigned char  ADSSTR;\r
-       char           wk0[11];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :6;\r
-                       unsigned char DIAG:2;\r
-               } BIT;\r
-       } ADDIAGR;\r
-};\r
-\r
-struct st_bsc {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char STSCLR:1;\r
-               } BIT;\r
-       } BERCLR;\r
-       char           wk0[3];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :6;\r
-                       unsigned char TOEN:1;\r
-                       unsigned char IGAEN:1;\r
-               } BIT;\r
-       } BEREN;\r
-       char           wk1[3];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char MST:3;\r
-                       unsigned char :2;\r
-                       unsigned char TO:1;\r
-                       unsigned char IA:1;\r
-               } BIT;\r
-       } BERSR1;\r
-       char           wk2[1];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short ADDR:13;\r
-               } BIT;\r
-       } BERSR2;\r
-       char           wk3[4];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :2;\r
-                       unsigned short BPEB:2;\r
-                       unsigned short BPFB:2;\r
-                       unsigned short BPHB:2;\r
-                       unsigned short BPGB:2;\r
-                       unsigned short BPIB:2;\r
-                       unsigned short BPRO:2;\r
-                       unsigned short BPRA:2;\r
-               } BIT;\r
-       } BUSPRI;\r
-       char           wk4[7408];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short PRMOD:1;\r
-                       unsigned short :5;\r
-                       unsigned short PWENB:1;\r
-                       unsigned short PRENB:1;\r
-                       unsigned short :4;\r
-                       unsigned short EWENB:1;\r
-                       unsigned short :2;\r
-                       unsigned short WRMOD:1;\r
-               } BIT;\r
-       } CS0MOD;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :3;\r
-                       unsigned long CSRWAIT:5;\r
-                       unsigned long :3;\r
-                       unsigned long CSWWAIT:5;\r
-                       unsigned long :5;\r
-                       unsigned long CSPRWAIT:3;\r
-                       unsigned long :5;\r
-                       unsigned long CSPWWAIT:3;\r
-               } BIT;\r
-       } CS0WCR1;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :1;\r
-                       unsigned long CSON:3;\r
-                       unsigned long :1;\r
-                       unsigned long WDON:3;\r
-                       unsigned long :1;\r
-                       unsigned long WRON:3;\r
-                       unsigned long :1;\r
-                       unsigned long RDON:3;\r
-                       unsigned long :2;\r
-                       unsigned long AWAIT:2;\r
-                       unsigned long :1;\r
-                       unsigned long WDOFF:3;\r
-                       unsigned long :1;\r
-                       unsigned long CSWOFF:3;\r
-                       unsigned long :1;\r
-                       unsigned long CSROFF:3;\r
-               } BIT;\r
-       } CS0WCR2;\r
-       char           wk5[6];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short PRMOD:1;\r
-                       unsigned short :5;\r
-                       unsigned short PWENB:1;\r
-                       unsigned short PRENB:1;\r
-                       unsigned short :4;\r
-                       unsigned short EWENB:1;\r
-                       unsigned short :2;\r
-                       unsigned short WRMOD:1;\r
-               } BIT;\r
-       } CS1MOD;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :3;\r
-                       unsigned long CSRWAIT:5;\r
-                       unsigned long :3;\r
-                       unsigned long CSWWAIT:5;\r
-                       unsigned long :5;\r
-                       unsigned long CSPRWAIT:3;\r
-                       unsigned long :5;\r
-                       unsigned long CSPWWAIT:3;\r
-               } BIT;\r
-       } CS1WCR1;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :1;\r
-                       unsigned long CSON:3;\r
-                       unsigned long :1;\r
-                       unsigned long WDON:3;\r
-                       unsigned long :1;\r
-                       unsigned long WRON:3;\r
-                       unsigned long :1;\r
-                       unsigned long RDON:3;\r
-                       unsigned long :2;\r
-                       unsigned long AWAIT:2;\r
-                       unsigned long :1;\r
-                       unsigned long WDOFF:3;\r
-                       unsigned long :1;\r
-                       unsigned long CSWOFF:3;\r
-                       unsigned long :1;\r
-                       unsigned long CSROFF:3;\r
-               } BIT;\r
-       } CS1WCR2;\r
-       char           wk6[6];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short PRMOD:1;\r
-                       unsigned short :5;\r
-                       unsigned short PWENB:1;\r
-                       unsigned short PRENB:1;\r
-                       unsigned short :4;\r
-                       unsigned short EWENB:1;\r
-                       unsigned short :2;\r
-                       unsigned short WRMOD:1;\r
-               } BIT;\r
-       } CS2MOD;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :3;\r
-                       unsigned long CSRWAIT:5;\r
-                       unsigned long :3;\r
-                       unsigned long CSWWAIT:5;\r
-                       unsigned long :5;\r
-                       unsigned long CSPRWAIT:3;\r
-                       unsigned long :5;\r
-                       unsigned long CSPWWAIT:3;\r
-               } BIT;\r
-       } CS2WCR1;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :1;\r
-                       unsigned long CSON:3;\r
-                       unsigned long :1;\r
-                       unsigned long WDON:3;\r
-                       unsigned long :1;\r
-                       unsigned long WRON:3;\r
-                       unsigned long :1;\r
-                       unsigned long RDON:3;\r
-                       unsigned long :2;\r
-                       unsigned long AWAIT:2;\r
-                       unsigned long :1;\r
-                       unsigned long WDOFF:3;\r
-                       unsigned long :1;\r
-                       unsigned long CSWOFF:3;\r
-                       unsigned long :1;\r
-                       unsigned long CSROFF:3;\r
-               } BIT;\r
-       } CS2WCR2;\r
-       char           wk7[6];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short PRMOD:1;\r
-                       unsigned short :5;\r
-                       unsigned short PWENB:1;\r
-                       unsigned short PRENB:1;\r
-                       unsigned short :4;\r
-                       unsigned short EWENB:1;\r
-                       unsigned short :2;\r
-                       unsigned short WRMOD:1;\r
-               } BIT;\r
-       } CS3MOD;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :3;\r
-                       unsigned long CSRWAIT:5;\r
-                       unsigned long :3;\r
-                       unsigned long CSWWAIT:5;\r
-                       unsigned long :5;\r
-                       unsigned long CSPRWAIT:3;\r
-                       unsigned long :5;\r
-                       unsigned long CSPWWAIT:3;\r
-               } BIT;\r
-       } CS3WCR1;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :1;\r
-                       unsigned long CSON:3;\r
-                       unsigned long :1;\r
-                       unsigned long WDON:3;\r
-                       unsigned long :1;\r
-                       unsigned long WRON:3;\r
-                       unsigned long :1;\r
-                       unsigned long RDON:3;\r
-                       unsigned long :2;\r
-                       unsigned long AWAIT:2;\r
-                       unsigned long :1;\r
-                       unsigned long WDOFF:3;\r
-                       unsigned long :1;\r
-                       unsigned long CSWOFF:3;\r
-                       unsigned long :1;\r
-                       unsigned long CSROFF:3;\r
-               } BIT;\r
-       } CS3WCR2;\r
-       char           wk8[6];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short PRMOD:1;\r
-                       unsigned short :5;\r
-                       unsigned short PWENB:1;\r
-                       unsigned short PRENB:1;\r
-                       unsigned short :4;\r
-                       unsigned short EWENB:1;\r
-                       unsigned short :2;\r
-                       unsigned short WRMOD:1;\r
-               } BIT;\r
-       } CS4MOD;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :3;\r
-                       unsigned long CSRWAIT:5;\r
-                       unsigned long :3;\r
-                       unsigned long CSWWAIT:5;\r
-                       unsigned long :5;\r
-                       unsigned long CSPRWAIT:3;\r
-                       unsigned long :5;\r
-                       unsigned long CSPWWAIT:3;\r
-               } BIT;\r
-       } CS4WCR1;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :1;\r
-                       unsigned long CSON:3;\r
-                       unsigned long :1;\r
-                       unsigned long WDON:3;\r
-                       unsigned long :1;\r
-                       unsigned long WRON:3;\r
-                       unsigned long :1;\r
-                       unsigned long RDON:3;\r
-                       unsigned long :2;\r
-                       unsigned long AWAIT:2;\r
-                       unsigned long :1;\r
-                       unsigned long WDOFF:3;\r
-                       unsigned long :1;\r
-                       unsigned long CSWOFF:3;\r
-                       unsigned long :1;\r
-                       unsigned long CSROFF:3;\r
-               } BIT;\r
-       } CS4WCR2;\r
-       char           wk9[6];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short PRMOD:1;\r
-                       unsigned short :5;\r
-                       unsigned short PWENB:1;\r
-                       unsigned short PRENB:1;\r
-                       unsigned short :4;\r
-                       unsigned short EWENB:1;\r
-                       unsigned short :2;\r
-                       unsigned short WRMOD:1;\r
-               } BIT;\r
-       } CS5MOD;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :3;\r
-                       unsigned long CSRWAIT:5;\r
-                       unsigned long :3;\r
-                       unsigned long CSWWAIT:5;\r
-                       unsigned long :5;\r
-                       unsigned long CSPRWAIT:3;\r
-                       unsigned long :5;\r
-                       unsigned long CSPWWAIT:3;\r
-               } BIT;\r
-       } CS5WCR1;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :1;\r
-                       unsigned long CSON:3;\r
-                       unsigned long :1;\r
-                       unsigned long WDON:3;\r
-                       unsigned long :1;\r
-                       unsigned long WRON:3;\r
-                       unsigned long :1;\r
-                       unsigned long RDON:3;\r
-                       unsigned long :2;\r
-                       unsigned long AWAIT:2;\r
-                       unsigned long :1;\r
-                       unsigned long WDOFF:3;\r
-                       unsigned long :1;\r
-                       unsigned long CSWOFF:3;\r
-                       unsigned long :1;\r
-                       unsigned long CSROFF:3;\r
-               } BIT;\r
-       } CS5WCR2;\r
-       char           wk10[6];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short PRMOD:1;\r
-                       unsigned short :5;\r
-                       unsigned short PWENB:1;\r
-                       unsigned short PRENB:1;\r
-                       unsigned short :4;\r
-                       unsigned short EWENB:1;\r
-                       unsigned short :2;\r
-                       unsigned short WRMOD:1;\r
-               } BIT;\r
-       } CS6MOD;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :3;\r
-                       unsigned long CSRWAIT:5;\r
-                       unsigned long :3;\r
-                       unsigned long CSWWAIT:5;\r
-                       unsigned long :5;\r
-                       unsigned long CSPRWAIT:3;\r
-                       unsigned long :5;\r
-                       unsigned long CSPWWAIT:3;\r
-               } BIT;\r
-       } CS6WCR1;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :1;\r
-                       unsigned long CSON:3;\r
-                       unsigned long :1;\r
-                       unsigned long WDON:3;\r
-                       unsigned long :1;\r
-                       unsigned long WRON:3;\r
-                       unsigned long :1;\r
-                       unsigned long RDON:3;\r
-                       unsigned long :2;\r
-                       unsigned long AWAIT:2;\r
-                       unsigned long :1;\r
-                       unsigned long WDOFF:3;\r
-                       unsigned long :1;\r
-                       unsigned long CSWOFF:3;\r
-                       unsigned long :1;\r
-                       unsigned long CSROFF:3;\r
-               } BIT;\r
-       } CS6WCR2;\r
-       char           wk11[6];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short PRMOD:1;\r
-                       unsigned short :5;\r
-                       unsigned short PWENB:1;\r
-                       unsigned short PRENB:1;\r
-                       unsigned short :4;\r
-                       unsigned short EWENB:1;\r
-                       unsigned short :2;\r
-                       unsigned short WRMOD:1;\r
-               } BIT;\r
-       } CS7MOD;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :3;\r
-                       unsigned long CSRWAIT:5;\r
-                       unsigned long :3;\r
-                       unsigned long CSWWAIT:5;\r
-                       unsigned long :5;\r
-                       unsigned long CSPRWAIT:3;\r
-                       unsigned long :5;\r
-                       unsigned long CSPWWAIT:3;\r
-               } BIT;\r
-       } CS7WCR1;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :1;\r
-                       unsigned long CSON:3;\r
-                       unsigned long :1;\r
-                       unsigned long WDON:3;\r
-                       unsigned long :1;\r
-                       unsigned long WRON:3;\r
-                       unsigned long :1;\r
-                       unsigned long RDON:3;\r
-                       unsigned long :2;\r
-                       unsigned long AWAIT:2;\r
-                       unsigned long :1;\r
-                       unsigned long WDOFF:3;\r
-                       unsigned long :1;\r
-                       unsigned long CSWOFF:3;\r
-                       unsigned long :1;\r
-                       unsigned long CSROFF:3;\r
-               } BIT;\r
-       } CS7WCR2;\r
-       char           wk12[1926];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :3;\r
-                       unsigned short MPXEN:1;\r
-                       unsigned short :3;\r
-                       unsigned short EMODE:1;\r
-                       unsigned short :2;\r
-                       unsigned short BSIZE:2;\r
-                       unsigned short :3;\r
-                       unsigned short EXENB:1;\r
-               } BIT;\r
-       } CS0CR;\r
-       char           wk13[6];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :4;\r
-                       unsigned short WRCV:4;\r
-                       unsigned short :4;\r
-                       unsigned short RRCV:4;\r
-               } BIT;\r
-       } CS0REC;\r
-       char           wk14[6];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :3;\r
-                       unsigned short MPXEN:1;\r
-                       unsigned short :3;\r
-                       unsigned short EMODE:1;\r
-                       unsigned short :2;\r
-                       unsigned short BSIZE:2;\r
-                       unsigned short :3;\r
-                       unsigned short EXENB:1;\r
-               } BIT;\r
-       } CS1CR;\r
-       char           wk15[6];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :4;\r
-                       unsigned short WRCV:4;\r
-                       unsigned short :4;\r
-                       unsigned short RRCV:4;\r
-               } BIT;\r
-       } CS1REC;\r
-       char           wk16[6];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :3;\r
-                       unsigned short MPXEN:1;\r
-                       unsigned short :3;\r
-                       unsigned short EMODE:1;\r
-                       unsigned short :2;\r
-                       unsigned short BSIZE:2;\r
-                       unsigned short :3;\r
-                       unsigned short EXENB:1;\r
-               } BIT;\r
-       } CS2CR;\r
-       char           wk17[6];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :4;\r
-                       unsigned short WRCV:4;\r
-                       unsigned short :4;\r
-                       unsigned short RRCV:4;\r
-               } BIT;\r
-       } CS2REC;\r
-       char           wk18[6];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :3;\r
-                       unsigned short MPXEN:1;\r
-                       unsigned short :3;\r
-                       unsigned short EMODE:1;\r
-                       unsigned short :2;\r
-                       unsigned short BSIZE:2;\r
-                       unsigned short :3;\r
-                       unsigned short EXENB:1;\r
-               } BIT;\r
-       } CS3CR;\r
-       char           wk19[6];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :4;\r
-                       unsigned short WRCV:4;\r
-                       unsigned short :4;\r
-                       unsigned short RRCV:4;\r
-               } BIT;\r
-       } CS3REC;\r
-       char           wk20[6];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :3;\r
-                       unsigned short MPXEN:1;\r
-                       unsigned short :3;\r
-                       unsigned short EMODE:1;\r
-                       unsigned short :2;\r
-                       unsigned short BSIZE:2;\r
-                       unsigned short :3;\r
-                       unsigned short EXENB:1;\r
-               } BIT;\r
-       } CS4CR;\r
-       char           wk21[6];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :4;\r
-                       unsigned short WRCV:4;\r
-                       unsigned short :4;\r
-                       unsigned short RRCV:4;\r
-               } BIT;\r
-       } CS4REC;\r
-       char           wk22[6];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :3;\r
-                       unsigned short MPXEN:1;\r
-                       unsigned short :3;\r
-                       unsigned short EMODE:1;\r
-                       unsigned short :2;\r
-                       unsigned short BSIZE:2;\r
-                       unsigned short :3;\r
-                       unsigned short EXENB:1;\r
-               } BIT;\r
-       } CS5CR;\r
-       char           wk23[6];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :4;\r
-                       unsigned short WRCV:4;\r
-                       unsigned short :4;\r
-                       unsigned short RRCV:4;\r
-               } BIT;\r
-       } CS5REC;\r
-       char           wk24[6];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :3;\r
-                       unsigned short MPXEN:1;\r
-                       unsigned short :3;\r
-                       unsigned short EMODE:1;\r
-                       unsigned short :2;\r
-                       unsigned short BSIZE:2;\r
-                       unsigned short :3;\r
-                       unsigned short EXENB:1;\r
-               } BIT;\r
-       } CS6CR;\r
-       char           wk25[6];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :4;\r
-                       unsigned short WRCV:4;\r
-                       unsigned short :4;\r
-                       unsigned short RRCV:4;\r
-               } BIT;\r
-       } CS6REC;\r
-       char           wk26[6];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :3;\r
-                       unsigned short MPXEN:1;\r
-                       unsigned short :3;\r
-                       unsigned short EMODE:1;\r
-                       unsigned short :2;\r
-                       unsigned short BSIZE:2;\r
-                       unsigned short :3;\r
-                       unsigned short EXENB:1;\r
-               } BIT;\r
-       } CS7CR;\r
-       char           wk27[6];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :4;\r
-                       unsigned short WRCV:4;\r
-                       unsigned short :4;\r
-                       unsigned short RRCV:4;\r
-               } BIT;\r
-       } CS7REC;\r
-       char           wk28[4];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short RCVENM7:1;\r
-                       unsigned short RCVENM6:1;\r
-                       unsigned short RCVENM5:1;\r
-                       unsigned short RCVENM4:1;\r
-                       unsigned short RCVENM3:1;\r
-                       unsigned short RCVENM2:1;\r
-                       unsigned short RCVENM1:1;\r
-                       unsigned short RCVENM0:1;\r
-                       unsigned short RCVEN7:1;\r
-                       unsigned short RCVEN6:1;\r
-                       unsigned short RCVEN5:1;\r
-                       unsigned short RCVEN4:1;\r
-                       unsigned short RCVEN3:1;\r
-                       unsigned short RCVEN2:1;\r
-                       unsigned short RCVEN1:1;\r
-                       unsigned short RCVEN0:1;\r
-               } BIT;\r
-       } CSRECEN;\r
-       char           wk29[894];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char BSIZE:2;\r
-                       unsigned char :3;\r
-                       unsigned char EXENB:1;\r
-               } BIT;\r
-       } SDCCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char EMODE:1;\r
-               } BIT;\r
-       } SDCMOD;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char BE:1;\r
-               } BIT;\r
-       } SDAMOD;\r
-       char           wk30[13];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char SFEN:1;\r
-               } BIT;\r
-       } SDSELF;\r
-       char           wk31[3];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short REFW:4;\r
-                       unsigned short RFC:12;\r
-               } BIT;\r
-       } SDRFCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char RFEN:1;\r
-               } BIT;\r
-       } SDRFEN;\r
-       char           wk32[9];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char INIRQ:1;\r
-               } BIT;\r
-       } SDICR;\r
-       char           wk33[3];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :5;\r
-                       unsigned short PRC:3;\r
-                       unsigned short ARFC:4;\r
-                       unsigned short ARFI:4;\r
-               } BIT;\r
-       } SDIR;\r
-       char           wk34[26];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :6;\r
-                       unsigned char MXC:2;\r
-               } BIT;\r
-       } SDADR;\r
-       char           wk35[3];\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :13;\r
-                       unsigned long RAS:3;\r
-                       unsigned long :2;\r
-                       unsigned long RCD:2;\r
-                       unsigned long RP:3;\r
-                       unsigned long WR:1;\r
-                       unsigned long :5;\r
-                       unsigned long CL:3;\r
-               } BIT;\r
-       } SDTR;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :1;\r
-                       unsigned short MR:15;\r
-               } BIT;\r
-       } SDMOD;\r
-       char           wk36[6];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char SRFST:1;\r
-                       unsigned char INIST:1;\r
-                       unsigned char :2;\r
-                       unsigned char MRSST:1;\r
-               } BIT;\r
-       } SDSR;\r
-};\r
-\r
-struct st_can {\r
-       struct {\r
-               union {\r
-                       unsigned long LONG;\r
-                       struct {\r
-                               unsigned short H;\r
-                               unsigned short L;\r
-                       } WORD;\r
-                       struct {\r
-                               unsigned char HH;\r
-                               unsigned char HL;\r
-                               unsigned char LH;\r
-                               unsigned char LL;\r
-                       } BYTE;\r
-                       struct {\r
-                               unsigned long IDE:1;\r
-                               unsigned long RTR:1;\r
-                               unsigned long :1;\r
-                               unsigned long SID:11;\r
-                               unsigned long EID:18;\r
-                       } BIT;\r
-               } ID;\r
-               unsigned short DLC;\r
-               unsigned char  DATA[8];\r
-               unsigned short TS;\r
-       } MB[32];\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned short H;\r
-                       unsigned short L;\r
-               } WORD;\r
-               struct {\r
-                       unsigned char HH;\r
-                       unsigned char HL;\r
-                       unsigned char LH;\r
-                       unsigned char LL;\r
-               } BYTE;\r
-               struct {\r
-                       unsigned long :3;\r
-                       unsigned long SID:11;\r
-                       unsigned long EID:18;\r
-               } BIT;\r
-       } MKR[8];\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned short H;\r
-                       unsigned short L;\r
-               } WORD;\r
-               struct {\r
-                       unsigned char HH;\r
-                       unsigned char HL;\r
-                       unsigned char LH;\r
-                       unsigned char LL;\r
-               } BYTE;\r
-               struct {\r
-                       unsigned long IDE:1;\r
-                       unsigned long RTR:1;\r
-                       unsigned long :1;\r
-                       unsigned long SID:11;\r
-                       unsigned long EID:18;\r
-               } BIT;\r
-       } FIDCR0;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned short H;\r
-                       unsigned short L;\r
-               } WORD;\r
-               struct {\r
-                       unsigned char HH;\r
-                       unsigned char HL;\r
-                       unsigned char LH;\r
-                       unsigned char LL;\r
-               } BYTE;\r
-               struct {\r
-                       unsigned long IDE:1;\r
-                       unsigned long RTR:1;\r
-                       unsigned long :1;\r
-                       unsigned long SID:11;\r
-                       unsigned long EID:18;\r
-               } BIT;\r
-       } FIDCR1;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned short H;\r
-                       unsigned short L;\r
-               } WORD;\r
-               struct {\r
-                       unsigned char HH;\r
-                       unsigned char HL;\r
-                       unsigned char LH;\r
-                       unsigned char LL;\r
-               } BYTE;\r
-               struct {\r
-                       unsigned char MB31:1;\r
-                       unsigned char MB30:1;\r
-                       unsigned char MB29:1;\r
-                       unsigned char MB28:1;\r
-                       unsigned char MB27:1;\r
-                       unsigned char MB26:1;\r
-                       unsigned char MB25:1;\r
-                       unsigned char MB24:1;\r
-                       unsigned char MB23:1;\r
-                       unsigned char MB22:1;\r
-                       unsigned char MB21:1;\r
-                       unsigned char MB20:1;\r
-                       unsigned char MB19:1;\r
-                       unsigned char MB18:1;\r
-                       unsigned char MB17:1;\r
-                       unsigned char MB16:1;\r
-                       unsigned char MB15:1;\r
-                       unsigned char MB14:1;\r
-                       unsigned char MB13:1;\r
-                       unsigned char MB12:1;\r
-                       unsigned char MB11:1;\r
-                       unsigned char MB10:1;\r
-                       unsigned char MB9:1;\r
-                       unsigned char MB8:1;\r
-                       unsigned char MB7:1;\r
-                       unsigned char MB6:1;\r
-                       unsigned char MB5:1;\r
-                       unsigned char MB4:1;\r
-                       unsigned char MB3:1;\r
-                       unsigned char MB2:1;\r
-                       unsigned char MB1:1;\r
-                       unsigned char MB0:1;\r
-               } BIT;\r
-       } MKIVLR;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned short H;\r
-                       unsigned short L;\r
-               } WORD;\r
-               struct {\r
-                       unsigned char HH;\r
-                       unsigned char HL;\r
-                       unsigned char LH;\r
-                       unsigned char LL;\r
-               } BYTE;\r
-               struct {\r
-                       unsigned char MB31:1;\r
-                       unsigned char MB30:1;\r
-                       unsigned char MB29:1;\r
-                       unsigned char MB28:1;\r
-                       unsigned char MB27:1;\r
-                       unsigned char MB26:1;\r
-                       unsigned char MB25:1;\r
-                       unsigned char MB24:1;\r
-                       unsigned char MB23:1;\r
-                       unsigned char MB22:1;\r
-                       unsigned char MB21:1;\r
-                       unsigned char MB20:1;\r
-                       unsigned char MB19:1;\r
-                       unsigned char MB18:1;\r
-                       unsigned char MB17:1;\r
-                       unsigned char MB16:1;\r
-                       unsigned char MB15:1;\r
-                       unsigned char MB14:1;\r
-                       unsigned char MB13:1;\r
-                       unsigned char MB12:1;\r
-                       unsigned char MB11:1;\r
-                       unsigned char MB10:1;\r
-                       unsigned char MB9:1;\r
-                       unsigned char MB8:1;\r
-                       unsigned char MB7:1;\r
-                       unsigned char MB6:1;\r
-                       unsigned char MB5:1;\r
-                       unsigned char MB4:1;\r
-                       unsigned char MB3:1;\r
-                       unsigned char MB2:1;\r
-                       unsigned char MB1:1;\r
-                       unsigned char MB0:1;\r
-               } BIT;\r
-       } MIER;\r
-       char           wk0[1008];\r
-       union {\r
-               unsigned char BYTE;\r
-               union {\r
-                       struct {\r
-                               unsigned char TRMREQ:1;\r
-                               unsigned char RECREQ:1;\r
-                               unsigned char :1;\r
-                               unsigned char ONESHOT:1;\r
-                               unsigned char :1;\r
-                               unsigned char TRMABT:1;\r
-                               unsigned char TRMACTIVE:1;\r
-                               unsigned char SENTDATA:1;\r
-                       } TX;\r
-                       struct {\r
-                               unsigned char TRMREQ:1;\r
-                               unsigned char RECREQ:1;\r
-                               unsigned char :1;\r
-                               unsigned char ONESHOT:1;\r
-                               unsigned char :1;\r
-                               unsigned char MSGLOST:1;\r
-                               unsigned char INVALDATA:1;\r
-                               unsigned char NEWDATA:1;\r
-                       } RX;\r
-               } BIT;\r
-       } MCTL[32];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned char H;\r
-                       unsigned char L;\r
-               } BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char RBOC:1;\r
-                       unsigned char BOM:2;\r
-                       unsigned char SLPM:1;\r
-                       unsigned char CANM:2;\r
-                       unsigned char TSPS:2;\r
-                       unsigned char TSRC:1;\r
-                       unsigned char TPM:1;\r
-                       unsigned char MLM:1;\r
-                       unsigned char IDFM:2;\r
-                       unsigned char MBM:1;\r
-               } BIT;\r
-       } CTLR;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned char H;\r
-                       unsigned char L;\r
-               } BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char RECST:1;\r
-                       unsigned char TRMST:1;\r
-                       unsigned char BOST:1;\r
-                       unsigned char EPST:1;\r
-                       unsigned char SLPST:1;\r
-                       unsigned char HLTST:1;\r
-                       unsigned char RSTST:1;\r
-                       unsigned char EST:1;\r
-                       unsigned char TABST:1;\r
-                       unsigned char FMLST:1;\r
-                       unsigned char NMLST:1;\r
-                       unsigned char TFST:1;\r
-                       unsigned char RFST:1;\r
-                       unsigned char SDST:1;\r
-                       unsigned char NDST:1;\r
-               } BIT;\r
-       } STR;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned short H;\r
-                       unsigned short L;\r
-               } WORD;\r
-               struct {\r
-                       unsigned char HH;\r
-                       unsigned char HL;\r
-                       unsigned char LH;\r
-                       unsigned char LL;\r
-               } BYTE;\r
-               struct {\r
-                       unsigned long TSEG1:4;\r
-                       unsigned long :2;\r
-                       unsigned long BRP:10;\r
-                       unsigned long :2;\r
-                       unsigned long SJW:2;\r
-                       unsigned long :1;\r
-                       unsigned long TSEG2:3;\r
-                       unsigned long :7;\r
-                       unsigned long CCLKS:1;\r
-               } BIT;\r
-       } BCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char RFEST:1;\r
-                       unsigned char RFWST:1;\r
-                       unsigned char RFFST:1;\r
-                       unsigned char RFMLF:1;\r
-                       unsigned char RFUST:3;\r
-                       unsigned char RFE:1;\r
-               } BIT;\r
-       } RFCR;\r
-       unsigned char  RFPCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TFEST:1;\r
-                       unsigned char TFFST:1;\r
-                       unsigned char :2;\r
-                       unsigned char TFUST:3;\r
-                       unsigned char TFE:1;\r
-               } BIT;\r
-       } TFCR;\r
-       unsigned char  TFPCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char BLIE:1;\r
-                       unsigned char OLIE:1;\r
-                       unsigned char ORIE:1;\r
-                       unsigned char BORIE:1;\r
-                       unsigned char BOEIE:1;\r
-                       unsigned char EPIE:1;\r
-                       unsigned char EWIE:1;\r
-                       unsigned char BEIE:1;\r
-               } BIT;\r
-       } EIER;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char BLIF:1;\r
-                       unsigned char OLIF:1;\r
-                       unsigned char ORIF:1;\r
-                       unsigned char BORIF:1;\r
-                       unsigned char BOEIF:1;\r
-                       unsigned char EPIF:1;\r
-                       unsigned char EWIF:1;\r
-                       unsigned char BEIF:1;\r
-               } BIT;\r
-       } EIFR;\r
-       unsigned char  RECR;\r
-       unsigned char  TECR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char EDPM:1;\r
-                       unsigned char ADEF:1;\r
-                       unsigned char BE0F:1;\r
-                       unsigned char BE1F:1;\r
-                       unsigned char CEF:1;\r
-                       unsigned char AEF:1;\r
-                       unsigned char FEF:1;\r
-                       unsigned char SEF:1;\r
-               } BIT;\r
-       } ECSR;\r
-       unsigned char  CSSR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char SEST:1;\r
-                       unsigned char :2;\r
-                       unsigned char MBNST:5;\r
-               } BIT;\r
-       } MSSR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :6;\r
-                       unsigned char MBSM:2;\r
-               } BIT;\r
-       } MSMR;\r
-       unsigned short TSR;\r
-       unsigned short AFSR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :5;\r
-                       unsigned char TSTM:2;\r
-                       unsigned char TSTE:1;\r
-               } BIT;\r
-       } TCR;\r
-};\r
-\r
-struct st_cmt {\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :14;\r
-                       unsigned short STR1:1;\r
-                       unsigned short STR0:1;\r
-               } BIT;\r
-       } CMSTR0;\r
-       char           wk0[14];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :14;\r
-                       unsigned short STR3:1;\r
-                       unsigned short STR2:1;\r
-               } BIT;\r
-       } CMSTR1;\r
-};\r
-\r
-struct st_cmt0 {\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :9;\r
-                       unsigned short CMIE:1;\r
-                       unsigned short :4;\r
-                       unsigned short CKS:2;\r
-               } BIT;\r
-       } CMCR;\r
-       unsigned short CMCNT;\r
-       unsigned short CMCOR;\r
-};\r
-\r
-struct st_crc {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char DORCLR:1;\r
-                       unsigned char :4;\r
-                       unsigned char LMS:1;\r
-                       unsigned char GPS:2;\r
-               } BIT;\r
-       } CRCCR;\r
-       unsigned char  CRCDIR;\r
-       unsigned short CRCDOR;\r
-};\r
-\r
-struct st_da {\r
-       unsigned short DADR0;\r
-       unsigned short DADR1;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char DAOE1:1;\r
-                       unsigned char DAOE0:1;\r
-                       unsigned char DAE:1;\r
-               } BIT;\r
-       } DACR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char DPSEL:1;\r
-               } BIT;\r
-       } DADPR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char DAADST:1;\r
-               } BIT;\r
-       } DAADSCR;\r
-};\r
-\r
-struct st_dmac {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char DMST:1;\r
-               } BIT;\r
-       } DMAST;\r
-};\r
-\r
-struct st_dmac0 {\r
-       unsigned long  DMSAR;\r
-       unsigned long  DMDAR;\r
-       unsigned long  DMCRA;\r
-       unsigned short DMCRB;\r
-       char           wk0[2];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short MD:2;\r
-                       unsigned short DTS:2;\r
-                       unsigned short :2;\r
-                       unsigned short SZ:2;\r
-                       unsigned short :6;\r
-                       unsigned short DCTG:2;\r
-               } BIT;\r
-       } DMTMD;\r
-       char           wk1[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char DTIE:1;\r
-                       unsigned char ESIE:1;\r
-                       unsigned char RPTIE:1;\r
-                       unsigned char SARIE:1;\r
-                       unsigned char DARIE:1;\r
-               } BIT;\r
-       } DMINT;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short SM:2;\r
-                       unsigned short :1;\r
-                       unsigned short SARA:5;\r
-                       unsigned short DM:2;\r
-                       unsigned short :1;\r
-                       unsigned short DARA:5;\r
-               } BIT;\r
-       } DMAMD;\r
-       char           wk2[2];\r
-       unsigned long  DMOFR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char DTE:1;\r
-               } BIT;\r
-       } DMCNT;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char CLRS:1;\r
-                       unsigned char :3;\r
-                       unsigned char SWREQ:1;\r
-               } BIT;\r
-       } DMREQ;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ACT:1;\r
-                       unsigned char :2;\r
-                       unsigned char DTIF:1;\r
-                       unsigned char :3;\r
-                       unsigned char ESIF:1;\r
-               } BIT;\r
-       } DMSTS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char DISEL:1;\r
-               } BIT;\r
-       } DMCSL;\r
-};\r
-\r
-struct st_dmac1 {\r
-       unsigned long  DMSAR;\r
-       unsigned long  DMDAR;\r
-       unsigned long  DMCRA;\r
-       unsigned short DMCRB;\r
-       char           wk0[2];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short MD:2;\r
-                       unsigned short DTS:2;\r
-                       unsigned short :2;\r
-                       unsigned short SZ:2;\r
-                       unsigned short :6;\r
-                       unsigned short DCTG:2;\r
-               } BIT;\r
-       } DMTMD;\r
-       char           wk1[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char DTIE:1;\r
-                       unsigned char ESIE:1;\r
-                       unsigned char RPTIE:1;\r
-                       unsigned char SARIE:1;\r
-                       unsigned char DARIE:1;\r
-               } BIT;\r
-       } DMINT;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short SM:2;\r
-                       unsigned short :1;\r
-                       unsigned short SARA:5;\r
-                       unsigned short DM:2;\r
-                       unsigned short :1;\r
-                       unsigned short DARA:5;\r
-               } BIT;\r
-       } DMAMD;\r
-       char           wk2[6];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char DTE:1;\r
-               } BIT;\r
-       } DMCNT;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char CLRS:1;\r
-                       unsigned char :3;\r
-                       unsigned char SWREQ:1;\r
-               } BIT;\r
-       } DMREQ;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ACT:1;\r
-                       unsigned char :2;\r
-                       unsigned char DTIF:1;\r
-                       unsigned char :3;\r
-                       unsigned char ESIF:1;\r
-               } BIT;\r
-       } DMSTS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char DISEL:1;\r
-               } BIT;\r
-       } DMCSL;\r
-};\r
-\r
-struct st_dtc {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char RRS:1;\r
-               } BIT;\r
-       } DTCCR;\r
-       char           wk0[3];\r
-       unsigned long  DTCVBR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char SHORT:1;\r
-               } BIT;\r
-       } DTCADMOD;\r
-       char           wk1[3];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char DTCST:1;\r
-               } BIT;\r
-       } DTCST;\r
-       char           wk2[1];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short ACT:1;\r
-                       unsigned short :7;\r
-                       unsigned short VECN:8;\r
-               } BIT;\r
-       } DTCSTS;\r
-};\r
-\r
-struct st_edmac {\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :25;\r
-                       unsigned long DE:1;\r
-                       unsigned long DL:2;\r
-                       unsigned long :3;\r
-                       unsigned long SWR:1;\r
-               } BIT;\r
-       } EDMR;\r
-       char           wk0[4];\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :31;\r
-                       unsigned long TR:1;\r
-               } BIT;\r
-       } EDTRR;\r
-       char           wk1[4];\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :31;\r
-                       unsigned long RR:1;\r
-               } BIT;\r
-       } EDRRR;\r
-       char           wk2[4];\r
-       unsigned long  TDLAR;\r
-       char           wk3[4];\r
-       unsigned long  RDLAR;\r
-       char           wk4[4];\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :1;\r
-                       unsigned long TWB:1;\r
-                       unsigned long :3;\r
-                       unsigned long TABT:1;\r
-                       unsigned long RABT:1;\r
-                       unsigned long RFCOF:1;\r
-                       unsigned long ADE:1;\r
-                       unsigned long ECI:1;\r
-                       unsigned long TC:1;\r
-                       unsigned long TDE:1;\r
-                       unsigned long TFUF:1;\r
-                       unsigned long FR:1;\r
-                       unsigned long RDE:1;\r
-                       unsigned long RFOF:1;\r
-                       unsigned long :4;\r
-                       unsigned long CND:1;\r
-                       unsigned long DLC:1;\r
-                       unsigned long CD:1;\r
-                       unsigned long TRO:1;\r
-                       unsigned long RMAF:1;\r
-                       unsigned long :2;\r
-                       unsigned long RRF:1;\r
-                       unsigned long RTLF:1;\r
-                       unsigned long RTSF:1;\r
-                       unsigned long PRE:1;\r
-                       unsigned long CERF:1;\r
-               } BIT;\r
-       } EESR;\r
-       char           wk5[4];\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :1;\r
-                       unsigned long TWBIP:1;\r
-                       unsigned long :3;\r
-                       unsigned long TABTIP:1;\r
-                       unsigned long RABTIP:1;\r
-                       unsigned long RFCOFIP:1;\r
-                       unsigned long ADEIP:1;\r
-                       unsigned long ECIIP:1;\r
-                       unsigned long TCIP:1;\r
-                       unsigned long TDEIP:1;\r
-                       unsigned long TFUFIP:1;\r
-                       unsigned long FRIP:1;\r
-                       unsigned long RDEIP:1;\r
-                       unsigned long RFOFIP:1;\r
-                       unsigned long :4;\r
-                       unsigned long CNDIP:1;\r
-                       unsigned long DLCIP:1;\r
-                       unsigned long CDIP:1;\r
-                       unsigned long TROIP:1;\r
-                       unsigned long RMAFIP:1;\r
-                       unsigned long :2;\r
-                       unsigned long RRFIP:1;\r
-                       unsigned long RTLFIP:1;\r
-                       unsigned long RTSFIP:1;\r
-                       unsigned long PREIP:1;\r
-                       unsigned long CERFIP:1;\r
-               } BIT;\r
-       } EESIPR;\r
-       char           wk6[4];\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :20;\r
-                       unsigned long CNDCE:1;\r
-                       unsigned long DLCCE:1;\r
-                       unsigned long CDCE:1;\r
-                       unsigned long TROCE:1;\r
-                       unsigned long RMAFCE:1;\r
-                       unsigned long :2;\r
-                       unsigned long RRFCE:1;\r
-                       unsigned long RTLFCE:1;\r
-                       unsigned long RTSFCE:1;\r
-                       unsigned long PRECE:1;\r
-                       unsigned long CERFCE:1;\r
-               } BIT;\r
-       } TRSCER;\r
-       char           wk7[4];\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :16;\r
-                       unsigned long MFC:16;\r
-               } BIT;\r
-       } RMFCR;\r
-       char           wk8[4];\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :21;\r
-                       unsigned long TFT:11;\r
-               } BIT;\r
-       } TFTR;\r
-       char           wk9[4];\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :19;\r
-                       unsigned long TFD:5;\r
-                       unsigned long :3;\r
-                       unsigned long RFD:5;\r
-               } BIT;\r
-       } FDR;\r
-       char           wk10[4];\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :30;\r
-                       unsigned long RNC:1;\r
-                       unsigned long RNR:1;\r
-               } BIT;\r
-       } RMCR;\r
-       char           wk11[8];\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :16;\r
-                       unsigned long UNDER:16;\r
-               } BIT;\r
-       } TFUCR;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :16;\r
-                       unsigned long OVER:16;\r
-               } BIT;\r
-       } RFOCR;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :31;\r
-                       unsigned long ELB:1;\r
-               } BIT;\r
-       } IOSR;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :13;\r
-                       unsigned long RFFO:3;\r
-                       unsigned long :13;\r
-                       unsigned long RFDO:3;\r
-               } BIT;\r
-       } FCFTR;\r
-       char           wk12[4];\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :14;\r
-                       unsigned long PADS:2;\r
-                       unsigned long :10;\r
-                       unsigned long PADR:6;\r
-               } BIT;\r
-       } RPADIR;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :27;\r
-                       unsigned long TIM:1;\r
-                       unsigned long :3;\r
-                       unsigned long TIS:1;\r
-               } BIT;\r
-       } TRIMD;\r
-       char           wk13[72];\r
-       unsigned long  RBWAR;\r
-       unsigned long  RDFAR;\r
-       char           wk14[4];\r
-       unsigned long  TBRAR;\r
-       unsigned long  TDFAR;\r
-};\r
-\r
-struct st_etherc {\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :11;\r
-                       unsigned long TPC:1;\r
-                       unsigned long ZPE:1;\r
-                       unsigned long PFR:1;\r
-                       unsigned long RXF:1;\r
-                       unsigned long TXF:1;\r
-                       unsigned long :3;\r
-                       unsigned long PRCEF:1;\r
-                       unsigned long :2;\r
-                       unsigned long MPDE:1;\r
-                       unsigned long :2;\r
-                       unsigned long RE:1;\r
-                       unsigned long TE:1;\r
-                       unsigned long :1;\r
-                       unsigned long ILB:1;\r
-                       unsigned long RTM:1;\r
-                       unsigned long DM:1;\r
-                       unsigned long PRM:1;\r
-               } BIT;\r
-       } ECMR;\r
-       char           wk0[4];\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :20;\r
-                       unsigned long RFL:12;\r
-               } BIT;\r
-       } RFLR;\r
-       char           wk1[4];\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :26;\r
-                       unsigned long BFR:1;\r
-                       unsigned long PSRTO:1;\r
-                       unsigned long :1;\r
-                       unsigned long LCHNG:1;\r
-                       unsigned long MPD:1;\r
-                       unsigned long ICD:1;\r
-               } BIT;\r
-       } ECSR;\r
-       char           wk2[4];\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :26;\r
-                       unsigned long BFSIPR:1;\r
-                       unsigned long PSRTOIP:1;\r
-                       unsigned long :1;\r
-                       unsigned long LCHNGIP:1;\r
-                       unsigned long MPDIP:1;\r
-                       unsigned long ICDIP:1;\r
-               } BIT;\r
-       } ECSIPR;\r
-       char           wk3[4];\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :28;\r
-                       unsigned long MDI:1;\r
-                       unsigned long MDO:1;\r
-                       unsigned long MMD:1;\r
-                       unsigned long MDC:1;\r
-               } BIT;\r
-       } PIR;\r
-       char           wk4[4];\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :31;\r
-                       unsigned long LMON:1;\r
-               } BIT;\r
-       } PSR;\r
-       char           wk5[20];\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :12;\r
-                       unsigned long RMD:20;\r
-               } BIT;\r
-       } RDMLR;\r
-       char           wk6[12];\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :27;\r
-                       unsigned long IPG:5;\r
-               } BIT;\r
-       } IPGR;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :16;\r
-                       unsigned long AP:16;\r
-               } BIT;\r
-       } APR;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :16;\r
-                       unsigned long MP:16;\r
-               } BIT;\r
-       } MPR;\r
-       char           wk7[4];\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :24;\r
-                       unsigned long RPAUSE:8;\r
-               } BIT;\r
-       } RFCF;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :16;\r
-                       unsigned long TPAUSE:16;\r
-               } BIT;\r
-       } TPAUSER;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :24;\r
-                       unsigned long TXP:8;\r
-               } BIT;\r
-       } TPAUSECR;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :16;\r
-                       unsigned long BCF:16;\r
-               } BIT;\r
-       } BCFRR;\r
-       char           wk8[80];\r
-       unsigned long  MAHR;\r
-       char           wk9[4];\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :16;\r
-                       unsigned long MA:16;\r
-               } BIT;\r
-       } MALR;\r
-       char           wk10[4];\r
-       unsigned long  TROCR;\r
-       unsigned long  CDCR;\r
-       unsigned long  LCCR;\r
-       unsigned long  CNDCR;\r
-       char           wk11[4];\r
-       unsigned long  CEFCR;\r
-       unsigned long  FRECR;\r
-       unsigned long  TSFRCR;\r
-       unsigned long  TLFRCR;\r
-       unsigned long  RFCR;\r
-       unsigned long  MAFCR;\r
-};\r
-\r
-struct st_exdmac {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char DMST:1;\r
-               } BIT;\r
-       } EDMAST;\r
-       char           wk0[479];\r
-       unsigned long  CLSBR0;\r
-       unsigned long  CLSBR1;\r
-       unsigned long  CLSBR2;\r
-       unsigned long  CLSBR3;\r
-       unsigned long  CLSBR4;\r
-       unsigned long  CLSBR5;\r
-       unsigned long  CLSBR6;\r
-       unsigned long  CLSBR7;\r
-};\r
-\r
-struct st_exdmac0 {\r
-       unsigned long  EDMSAR;\r
-       unsigned long  EDMDAR;\r
-       unsigned long  EDMCRA;\r
-       unsigned short EDMCRB;\r
-       char           wk0[2];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short MD:2;\r
-                       unsigned short DTS:2;\r
-                       unsigned short :2;\r
-                       unsigned short SZ:2;\r
-                       unsigned short :6;\r
-                       unsigned short DCTG:2;\r
-               } BIT;\r
-       } EDMTMD;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :4;\r
-                       unsigned char DACKS:1;\r
-                       unsigned char DACKE:1;\r
-                       unsigned char DACKW:1;\r
-               } BIT;\r
-       } EDMOMD;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char DTIE:1;\r
-                       unsigned char ESIE:1;\r
-                       unsigned char RPTIE:1;\r
-                       unsigned char SARIE:1;\r
-                       unsigned char DARIE:1;\r
-               } BIT;\r
-       } EDMINT;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :14;\r
-                       unsigned long AMS:1;\r
-                       unsigned long DIR:1;\r
-                       unsigned long SM:2;\r
-                       unsigned long :1;\r
-                       unsigned long SARA:5;\r
-                       unsigned long DM:2;\r
-                       unsigned long :1;\r
-                       unsigned long DARA:5;\r
-               } BIT;\r
-       } EDMAMD;\r
-       unsigned long  EDMOFR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char DTE:1;\r
-               } BIT;\r
-       } EDMCNT;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char CLRS:1;\r
-                       unsigned char :3;\r
-                       unsigned char SWREQ:1;\r
-               } BIT;\r
-       } EDMREQ;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ACT:1;\r
-                       unsigned char :2;\r
-                       unsigned char DTIF:1;\r
-                       unsigned char :3;\r
-                       unsigned char ESIF:1;\r
-               } BIT;\r
-       } EDMSTS;\r
-       char           wk1[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :6;\r
-                       unsigned char DREQS:2;\r
-               } BIT;\r
-       } EDMRMD;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char EREQ:1;\r
-               } BIT;\r
-       } EDMERF;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char PREQ:1;\r
-               } BIT;\r
-       } EDMPRF;\r
-};\r
-\r
-struct st_exdmac1 {\r
-       unsigned long  EDMSAR;\r
-       unsigned long  EDMDAR;\r
-       unsigned long  EDMCRA;\r
-       unsigned short EDMCRB;\r
-       char           wk0[2];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short MD:2;\r
-                       unsigned short DTS:2;\r
-                       unsigned short :2;\r
-                       unsigned short SZ:2;\r
-                       unsigned short :6;\r
-                       unsigned short DCTG:2;\r
-               } BIT;\r
-       } EDMTMD;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :4;\r
-                       unsigned char DACKS:1;\r
-                       unsigned char DACKE:1;\r
-                       unsigned char DACKW:1;\r
-               } BIT;\r
-       } EDMOMD;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char DTIE:1;\r
-                       unsigned char ESIE:1;\r
-                       unsigned char RPTIE:1;\r
-                       unsigned char SARIE:1;\r
-                       unsigned char DARIE:1;\r
-               } BIT;\r
-       } EDMINT;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :14;\r
-                       unsigned long AMS:1;\r
-                       unsigned long DIR:1;\r
-                       unsigned long SM:2;\r
-                       unsigned long :1;\r
-                       unsigned long SARA:5;\r
-                       unsigned long DM:2;\r
-                       unsigned long :1;\r
-                       unsigned long DARA:5;\r
-               } BIT;\r
-       } EDMAMD;\r
-       char           wk1[4];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char DTE:1;\r
-               } BIT;\r
-       } EDMCNT;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char CLRS:1;\r
-                       unsigned char :3;\r
-                       unsigned char SWREQ:1;\r
-               } BIT;\r
-       } EDMREQ;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ACT:1;\r
-                       unsigned char :2;\r
-                       unsigned char DTIF:1;\r
-                       unsigned char :3;\r
-                       unsigned char ESIF:1;\r
-               } BIT;\r
-       } EDMSTS;\r
-       char           wk2[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :6;\r
-                       unsigned char DREQS:2;\r
-               } BIT;\r
-       } EDMRMD;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char EREQ:1;\r
-               } BIT;\r
-       } EDMERF;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char PREQ:1;\r
-               } BIT;\r
-       } EDMPRF;\r
-};\r
-\r
-struct st_flash {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :6;\r
-                       unsigned char FLWE:2;\r
-               } BIT;\r
-       } FWEPROR;\r
-       char           wk0[7799147];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char FRDMD:1;\r
-               } BIT;\r
-       } FMODR;\r
-       char           wk1[13];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ROMAE:1;\r
-                       unsigned char :2;\r
-                       unsigned char CMDLK:1;\r
-                       unsigned char DFLAE:1;\r
-                       unsigned char :1;\r
-                       unsigned char DFLRPE:1;\r
-                       unsigned char DFLWPE:1;\r
-               } BIT;\r
-       } FASTAT;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ROMAEIE:1;\r
-                       unsigned char :2;\r
-                       unsigned char CMDLKIE:1;\r
-                       unsigned char DFLAEIE:1;\r
-                       unsigned char :1;\r
-                       unsigned char DFLRPEIE:1;\r
-                       unsigned char DFLWPEIE:1;\r
-               } BIT;\r
-       } FAEINT;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char FRDYIE:1;\r
-               } BIT;\r
-       } FRDYIE;\r
-       char           wk2[45];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short KEY:8;\r
-                       unsigned short DBRE07:1;\r
-                       unsigned short DBRE06:1;\r
-                       unsigned short DBRE05:1;\r
-                       unsigned short DBRE04:1;\r
-                       unsigned short DBRE03:1;\r
-                       unsigned short DBRE02:1;\r
-                       unsigned short DBRE01:1;\r
-                       unsigned short DBRE00:1;\r
-               } BIT;\r
-       } DFLRE0;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short KEY:8;\r
-                       unsigned short DBRE15:1;\r
-                       unsigned short DBRE14:1;\r
-                       unsigned short DBRE13:1;\r
-                       unsigned short DBRE12:1;\r
-                       unsigned short DBRE11:1;\r
-                       unsigned short DBRE10:1;\r
-                       unsigned short DBRE09:1;\r
-                       unsigned short DBRE08:1;\r
-               } BIT;\r
-       } DFLRE1;\r
-       char           wk3[12];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short KEY:8;\r
-                       unsigned short DBWE07:1;\r
-                       unsigned short DBW006:1;\r
-                       unsigned short DBWE05:1;\r
-                       unsigned short DBWE04:1;\r
-                       unsigned short DBWE03:1;\r
-                       unsigned short DBWE02:1;\r
-                       unsigned short DBWE01:1;\r
-                       unsigned short DBWE00:1;\r
-               } BIT;\r
-       } DFLWE0;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short KEY:8;\r
-                       unsigned short DBWE15:1;\r
-                       unsigned short DBWE14:1;\r
-                       unsigned short DBWE13:1;\r
-                       unsigned short DBWE12:1;\r
-                       unsigned short DBWE11:1;\r
-                       unsigned short DBWE10:1;\r
-                       unsigned short DBWE09:1;\r
-                       unsigned short DBWE08:1;\r
-               } BIT;\r
-       } DFLWE1;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short KEY:8;\r
-                       unsigned short :7;\r
-                       unsigned short FCRME:1;\r
-               } BIT;\r
-       } FCURAME;\r
-       char           wk4[15194];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char FRDY:1;\r
-                       unsigned char ILGLERR:1;\r
-                       unsigned char ERSERR:1;\r
-                       unsigned char PRGERR:1;\r
-                       unsigned char SUSRDY:1;\r
-                       unsigned char :1;\r
-                       unsigned char ERSSPD:1;\r
-                       unsigned char PRGSPD:1;\r
-               } BIT;\r
-       } FSTATR0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char FCUERR:1;\r
-                       unsigned char :2;\r
-                       unsigned char FLOCKST:1;\r
-               } BIT;\r
-       } FSTATR1;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short FEKEY:8;\r
-                       unsigned short FENTRYD:1;\r
-                       unsigned short :3;\r
-                       unsigned short FENTRY3:1;\r
-                       unsigned short FENTRY2:1;\r
-                       unsigned short FENTRY1:1;\r
-                       unsigned short FENTRY0:1;\r
-               } BIT;\r
-       } FENTRYR;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short FPKEY:8;\r
-                       unsigned short :7;\r
-                       unsigned short FPROTCN:1;\r
-               } BIT;\r
-       } FPROTR;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short FRKEY:8;\r
-                       unsigned short :7;\r
-                       unsigned short FRESET:1;\r
-               } BIT;\r
-       } FRESETR;\r
-       char           wk5[2];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short CMDR:8;\r
-                       unsigned short PCMDR:8;\r
-               } BIT;\r
-       } FCMDR;\r
-       char           wk6[12];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :15;\r
-                       unsigned short ESUSPMD:1;\r
-               } BIT;\r
-       } FCPSR;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short BCSIZE:1;\r
-                       unsigned short :4;\r
-                       unsigned short BCADR:11;\r
-               } BIT;\r
-       } DFLBCCNT;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :8;\r
-                       unsigned short PEERRST:8;\r
-               } BIT;\r
-       } FPESTAT;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :15;\r
-                       unsigned short BCST:1;\r
-               } BIT;\r
-       } DFLBCSTAT;\r
-       char           wk7[24];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :8;\r
-                       unsigned short PCKA:8;\r
-               } BIT;\r
-       } PCKAR;\r
-};\r
-\r
-struct st_icu {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char IR:1;\r
-               } BIT;\r
-       } IR[254];\r
-       char           wk0[2];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char DTCE:1;\r
-               } BIT;\r
-       } DTCER[252];\r
-       char           wk1[4];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char IEN7:1;\r
-                       unsigned char IEN6:1;\r
-                       unsigned char IEN5:1;\r
-                       unsigned char IEN4:1;\r
-                       unsigned char IEN3:1;\r
-                       unsigned char IEN2:1;\r
-                       unsigned char IEN1:1;\r
-                       unsigned char IEN0:1;\r
-               } BIT;\r
-       } IER[32];\r
-       char           wk2[192];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char SWINT:1;\r
-               } BIT;\r
-       } SWINTR;\r
-       char           wk3[15];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short FIEN:1;\r
-                       unsigned short :7;\r
-                       unsigned short FVCT:8;\r
-               } BIT;\r
-       } FIR;\r
-       char           wk4[14];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :4;\r
-                       unsigned char IPR:4;\r
-               } BIT;\r
-       } IPR[254];\r
-       char           wk5[2];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char DMRS:8;\r
-               } BIT;\r
-       } DMRSR0;\r
-       char           wk6[3];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char DMRS:8;\r
-               } BIT;\r
-       } DMRSR1;\r
-       char           wk7[3];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char DMRS:8;\r
-               } BIT;\r
-       } DMRSR2;\r
-       char           wk8[3];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char DMRS:8;\r
-               } BIT;\r
-       } DMRSR3;\r
-       char           wk9[243];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :4;\r
-                       unsigned char IRQMD:2;\r
-               } BIT;\r
-       } IRQCR[16];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char FLTEN7:1;\r
-                       unsigned char FLTEN6:1;\r
-                       unsigned char FLTEN5:1;\r
-                       unsigned char FLTEN4:1;\r
-                       unsigned char FLTEN3:1;\r
-                       unsigned char FLTEN2:1;\r
-                       unsigned char FLTEN1:1;\r
-                       unsigned char FLTEN0:1;\r
-               } BIT;\r
-       } IRQFLTE0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char FLTEN15:1;\r
-                       unsigned char FLTEN14:1;\r
-                       unsigned char FLTEN13:1;\r
-                       unsigned char FLTEN12:1;\r
-                       unsigned char FLTEN11:1;\r
-                       unsigned char FLTEN10:1;\r
-                       unsigned char FLTEN9:1;\r
-                       unsigned char FLTEN8:1;\r
-               } BIT;\r
-       } IRQFLTE1;\r
-       char           wk10[2];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short FCLKSEL7:2;\r
-                       unsigned short FCLKSEL6:2;\r
-                       unsigned short FCLKSEL5:2;\r
-                       unsigned short FCLKSEL4:2;\r
-                       unsigned short FCLKSEL3:2;\r
-                       unsigned short FCLKSEL2:2;\r
-                       unsigned short FCLKSEL1:2;\r
-                       unsigned short FCLKSEL0:2;\r
-               } BIT;\r
-       } IRQFLTC0;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short FCLKSEL15:2;\r
-                       unsigned short FCLKSEL14:2;\r
-                       unsigned short FCLKSEL13:2;\r
-                       unsigned short FCLKSEL12:2;\r
-                       unsigned short FCLKSEL11:2;\r
-                       unsigned short FCLKSEL10:2;\r
-                       unsigned short FCLKSEL9:2;\r
-                       unsigned short FCLKSEL8:2;\r
-               } BIT;\r
-       } IRQFLTC1;\r
-       char           wk11[104];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char LVD2ST:1;\r
-                       unsigned char LVD1ST:1;\r
-                       unsigned char IWDTST:1;\r
-                       unsigned char WDTST:1;\r
-                       unsigned char OSTST:1;\r
-                       unsigned char NMIST:1;\r
-               } BIT;\r
-       } NMISR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char LVD2EN:1;\r
-                       unsigned char LVD1EN:1;\r
-                       unsigned char IWDTEN:1;\r
-                       unsigned char WDTEN:1;\r
-                       unsigned char OSTEN:1;\r
-                       unsigned char NMIEN:1;\r
-               } BIT;\r
-       } NMIER;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char LVD2CLR:1;\r
-                       unsigned char LVD1CLR:1;\r
-                       unsigned char IWDTCLR:1;\r
-                       unsigned char WDTCLR:1;\r
-                       unsigned char OSTCLR:1;\r
-                       unsigned char NMICLR:1;\r
-               } BIT;\r
-       } NMICLR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :4;\r
-                       unsigned char NMIMD:1;\r
-               } BIT;\r
-       } NMICR;\r
-       char           wk12[12];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char NFLTEN:1;\r
-               } BIT;\r
-       } NMIFLTE;\r
-       char           wk13[3];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :6;\r
-                       unsigned char NFCLKSEL:2;\r
-               } BIT;\r
-       } NMIFLTC;\r
-       char           wk14[19819];\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :16;\r
-                       unsigned long IS15:1;\r
-                       unsigned long IS14:1;\r
-                       unsigned long IS13:1;\r
-                       unsigned long IS12:1;\r
-                       unsigned long IS11:1;\r
-                       unsigned long IS10:1;\r
-                       unsigned long IS9:1;\r
-                       unsigned long IS8:1;\r
-                       unsigned long IS7:1;\r
-                       unsigned long IS6:1;\r
-                       unsigned long IS5:1;\r
-                       unsigned long IS4:1;\r
-                       unsigned long IS3:1;\r
-                       unsigned long IS2:1;\r
-                       unsigned long IS1:1;\r
-                       unsigned long IS0:1;\r
-               } BIT;\r
-       } GRP[13];\r
-       char           wk15[12];\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :16;\r
-                       unsigned long EN15:1;\r
-                       unsigned long EN14:1;\r
-                       unsigned long EN13:1;\r
-                       unsigned long EN12:1;\r
-                       unsigned long EN11:1;\r
-                       unsigned long EN10:1;\r
-                       unsigned long EN9:1;\r
-                       unsigned long EN8:1;\r
-                       unsigned long EN7:1;\r
-                       unsigned long EN6:1;\r
-                       unsigned long EN5:1;\r
-                       unsigned long EN4:1;\r
-                       unsigned long EN3:1;\r
-                       unsigned long EN2:1;\r
-                       unsigned long EN1:1;\r
-                       unsigned long EN0:1;\r
-               } BIT;\r
-       } GEN[13];\r
-       char           wk16[12];\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :16;\r
-                       unsigned long CLR15:1;\r
-                       unsigned long CLR14:1;\r
-                       unsigned long CLR13:1;\r
-                       unsigned long CLR12:1;\r
-                       unsigned long CLR11:1;\r
-                       unsigned long CLR10:1;\r
-                       unsigned long CLR9:1;\r
-                       unsigned long CLR8:1;\r
-                       unsigned long CLR7:1;\r
-                       unsigned long CLR6:1;\r
-                       unsigned long CLR5:1;\r
-                       unsigned long CLR4:1;\r
-                       unsigned long CLR3:1;\r
-                       unsigned long CLR2:1;\r
-                       unsigned long CLR1:1;\r
-                       unsigned long CLR0:1;\r
-               } BIT;\r
-       } GCR[13];\r
-       char           wk17[12];\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :26;\r
-                       unsigned long CN5:1;\r
-                       unsigned long CN4:1;\r
-                       unsigned long CN3:1;\r
-                       unsigned long CN2:1;\r
-                       unsigned long CN1:1;\r
-                       unsigned long CN0:1;\r
-               } BIT;\r
-       } SEL;\r
-};\r
-\r
-struct st_ieb {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char IOL:1;\r
-                       unsigned char DEE:1;\r
-                       unsigned char :1;\r
-                       unsigned char RE:1;\r
-               } BIT;\r
-       } IECTR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :5;\r
-                       unsigned char CMD:3;\r
-               } BIT;\r
-       } IECMR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char SS:1;\r
-                       unsigned char RN:3;\r
-                       unsigned char CTL:4;\r
-               } BIT;\r
-       } IEMCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char IARL4:4;\r
-                       unsigned char IMD:2;\r
-                       unsigned char :1;\r
-                       unsigned char STE:1;\r
-               } BIT;\r
-       } IEAR1;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char IARU8:8;\r
-               } BIT;\r
-       } IEAR2;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ISAL4:4;\r
-               } BIT;\r
-       } IESA1;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ISAU8:8;\r
-               } BIT;\r
-       } IESA2;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char IBFL:8;\r
-               } BIT;\r
-       } IETBFL;\r
-       char           wk0[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ISAL4:4;\r
-               } BIT;\r
-       } IEMA1;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char IMAU8:8;\r
-               } BIT;\r
-       } IEMA2;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :4;\r
-                       unsigned char RCTL:4;\r
-               } BIT;\r
-       } IERCTL;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char RBFL:8;\r
-               } BIT;\r
-       } IERBFL;\r
-       char           wk1[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ILAL8:8;\r
-               } BIT;\r
-       } IELA1;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :4;\r
-                       unsigned char ILAU4:4;\r
-               } BIT;\r
-       } IELA2;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char CMX:1;\r
-                       unsigned char MRQ:1;\r
-                       unsigned char SRQ:1;\r
-                       unsigned char SRE:1;\r
-                       unsigned char LCK:1;\r
-                       unsigned char :1;\r
-                       unsigned char RSS:1;\r
-                       unsigned char GG:1;\r
-               } BIT;\r
-       } IEFLG;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char TXS:1;\r
-                       unsigned char TXF:1;\r
-                       unsigned char :1;\r
-                       unsigned char TXEAL:1;\r
-                       unsigned char TXETTME:1;\r
-                       unsigned char TXERO:1;\r
-                       unsigned char TXEACK:1;\r
-               } BIT;\r
-       } IETSR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char TXSE:1;\r
-                       unsigned char TXFE:1;\r
-                       unsigned char :1;\r
-                       unsigned char TXEALE:1;\r
-                       unsigned char TXETTMEE:1;\r
-                       unsigned char TXEROE:1;\r
-                       unsigned char TXEACKE:1;\r
-               } BIT;\r
-       } IEIET;\r
-       char           wk2[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char RXBSY:1;\r
-                       unsigned char RXS:1;\r
-                       unsigned char RXF:1;\r
-                       unsigned char RXEDE:1;\r
-                       unsigned char RXEOVE:1;\r
-                       unsigned char RXERTME:1;\r
-                       unsigned char RXEDLE:1;\r
-                       unsigned char RXEPE:1;\r
-               } BIT;\r
-       } IERSR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char RXBSYE:1;\r
-                       unsigned char RXSE:1;\r
-                       unsigned char RXFE:1;\r
-                       unsigned char RXEDEE:1;\r
-                       unsigned char RXEOVEE:1;\r
-                       unsigned char RXERTMEE:1;\r
-                       unsigned char RXEDLEE:1;\r
-                       unsigned char RXEPEE:1;\r
-               } BIT;\r
-       } IEIER;\r
-       char           wk3[2];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char FLT:1;\r
-                       unsigned char FCKS:2;\r
-                       unsigned char CKS3:1;\r
-                       unsigned char SRSTP:1;\r
-                       unsigned char CKS:3;\r
-               } BIT;\r
-       } IECKSR;\r
-       char           wk4[230];\r
-       unsigned char  IETB[33];\r
-       char           wk5[223];\r
-       unsigned char  IERB[33];\r
-};\r
-\r
-struct st_iwdt {\r
-       unsigned char  IWDTRR;\r
-       char           wk0[1];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :2;\r
-                       unsigned short RPSS:2;\r
-                       unsigned short :2;\r
-                       unsigned short RPES:2;\r
-                       unsigned short CKS:4;\r
-                       unsigned short :2;\r
-                       unsigned short TOPS:2;\r
-               } BIT;\r
-       } IWDTCR;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short REFEF:1;\r
-                       unsigned short UNDFF:1;\r
-                       unsigned short CNTVAL:14;\r
-               } BIT;\r
-       } IWDTSR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char RSTIRQS:1;\r
-               } BIT;\r
-       } IWDTRCR;\r
-       char           wk1[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char SLCSTP:1;\r
-               } BIT;\r
-       } IWDTCSTPR;\r
-};\r
-\r
-struct st_mpc {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char CS7E:1;\r
-                       unsigned char CS6E:1;\r
-                       unsigned char CS5E:1;\r
-                       unsigned char CS4E:1;\r
-                       unsigned char CS3E:1;\r
-                       unsigned char CS2E:1;\r
-                       unsigned char CS1E:1;\r
-                       unsigned char CS0E:1;\r
-               } BIT;\r
-       } PFCSE;\r
-       char           wk0[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char CS3S:2;\r
-                       unsigned char CS2S:2;\r
-                       unsigned char CS1S:2;\r
-                       unsigned char :1;\r
-                       unsigned char CS0S:1;\r
-               } BIT;\r
-       } PFCSS0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char CS7S:2;\r
-                       unsigned char CS6S:2;\r
-                       unsigned char CS5S:2;\r
-                       unsigned char CS4S:2;\r
-               } BIT;\r
-       } PFCSS1;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char A15E:1;\r
-                       unsigned char A14E:1;\r
-                       unsigned char A13E:1;\r
-                       unsigned char A12E:1;\r
-                       unsigned char A11E:1;\r
-                       unsigned char A10E:1;\r
-                       unsigned char A9E:1;\r
-                       unsigned char A8E:1;\r
-               } BIT;\r
-       } PFAOE0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char A23E:1;\r
-                       unsigned char A22E:1;\r
-                       unsigned char A21E:1;\r
-                       unsigned char A20E:1;\r
-                       unsigned char A19E:1;\r
-                       unsigned char A18E:1;\r
-                       unsigned char A17E:1;\r
-                       unsigned char A16E:1;\r
-               } BIT;\r
-       } PFAOE1;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char WR32BC32E:1;\r
-                       unsigned char WR1BC1E:1;\r
-                       unsigned char DH32E:1;\r
-                       unsigned char DHE:1;\r
-                       unsigned char :2;\r
-                       unsigned char ADRHMS:1;\r
-                       unsigned char ADRLE:1;\r
-               } BIT;\r
-       } PFBCR0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char SDCLKE:1;\r
-                       unsigned char DQM1E:1;\r
-                       unsigned char :1;\r
-                       unsigned char MDSDE:1;\r
-                       unsigned char :1;\r
-                       unsigned char ALEOE:1;\r
-                       unsigned char WAITS:2;\r
-               } BIT;\r
-       } PFBCR1;\r
-       char           wk1[6];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PHYMODE:1;\r
-               } BIT;\r
-       } PFENET;\r
-       char           wk2[5];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :5;\r
-                       unsigned char PUPHZS:1;\r
-               } BIT;\r
-       } PFUSB0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :5;\r
-                       unsigned char PUPHZS:1;\r
-               } BIT;\r
-       } PFUSB1;\r
-       char           wk3[9];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B0WI:1;\r
-                       unsigned char PFSWE:1;\r
-               } BIT;\r
-       } PWPR;\r
-       char           wk4[32];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P00PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P01PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P02PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P03PFS;\r
-       char           wk5[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P05PFS;\r
-       char           wk6[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P07PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P10PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P11PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P12PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P13PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P14PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P15PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P16PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P17PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P20PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P21PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P22PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P23PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P24PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P25PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P26PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P27PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P30PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P31PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P32PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P33PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P34PFS;\r
-       char           wk7[3];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char ISEL:1;\r
-               } BIT;\r
-       } P40PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char ISEL:1;\r
-               } BIT;\r
-       } P41PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char ISEL:1;\r
-               } BIT;\r
-       } P42PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char ISEL:1;\r
-               } BIT;\r
-       } P43PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char ISEL:1;\r
-               } BIT;\r
-       } P44PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char ISEL:1;\r
-               } BIT;\r
-       } P45PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char ISEL:1;\r
-               } BIT;\r
-       } P46PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char ISEL:1;\r
-               } BIT;\r
-       } P47PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P50PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P51PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P52PFS;\r
-       char           wk8[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P54PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P55PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P56PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P57PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P60PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P61PFS;\r
-       char           wk9[4];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P66PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P67PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P70PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P71PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P72PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P73PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P74PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P75PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P76PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P77PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P80PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P81PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P82PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P83PFS;\r
-       char           wk10[2];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P86PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P87PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char :2;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P90PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char :2;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P91PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char :2;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P92PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char :2;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } P93PFS;\r
-       char           wk11[4];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PA0PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PA1PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PA2PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PA3PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PA4PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PA5PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PA6PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PA7PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PB0PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PB1PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PB2PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PB3PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PB4PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PB5PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PB6PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PB7PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PC0PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PC1PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PC2PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PC3PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PC4PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PC5PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PC6PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PC7PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PD0PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PD1PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PD2PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PD3PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PD4PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PD5PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PD6PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PD7PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char :2;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PE0PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char :2;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PE1PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PE2PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char :2;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PE3PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char :2;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PE4PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PE5PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PE6PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ASEL:1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PE7PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PF0PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PF1PFS;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PF2PFS;\r
-       char           wk12[2];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char ISEL:1;\r
-                       unsigned char :1;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PF5PFS;\r
-       char           wk13[21];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSEL:5;\r
-               } BIT;\r
-       } PJ3PFS;\r
-};\r
-\r
-struct st_mtu {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char OE4D:1;\r
-                       unsigned char OE4C:1;\r
-                       unsigned char OE3D:1;\r
-                       unsigned char OE4B:1;\r
-                       unsigned char OE4A:1;\r
-                       unsigned char OE3B:1;\r
-               } BIT;\r
-       } TOER;\r
-       char           wk0[2];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char BDC:1;\r
-                       unsigned char N:1;\r
-                       unsigned char P:1;\r
-                       unsigned char FB:1;\r
-                       unsigned char WF:1;\r
-                       unsigned char VF:1;\r
-                       unsigned char UF:1;\r
-               } BIT;\r
-       } TGCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char PSYE:1;\r
-                       unsigned char :2;\r
-                       unsigned char TOCL:1;\r
-                       unsigned char TOCS:1;\r
-                       unsigned char OLSN:1;\r
-                       unsigned char OLSP:1;\r
-               } BIT;\r
-       } TOCR1;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char BF:2;\r
-                       unsigned char OLS3N:1;\r
-                       unsigned char OLS3P:1;\r
-                       unsigned char OLS2N:1;\r
-                       unsigned char OLS2P:1;\r
-                       unsigned char OLS1N:1;\r
-                       unsigned char OLS1P:1;\r
-               } BIT;\r
-       } TOCR2;\r
-       char           wk1[4];\r
-       unsigned short TCDR;\r
-       unsigned short TDDR;\r
-       char           wk2[8];\r
-       unsigned short TCNTS;\r
-       unsigned short TCBR;\r
-       char           wk3[12];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char T3AEN:1;\r
-                       unsigned char T3ACOR:3;\r
-                       unsigned char T4VEN:1;\r
-                       unsigned char T4VCOR:3;\r
-               } BIT;\r
-       } TITCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char T3ACNT:3;\r
-                       unsigned char :1;\r
-                       unsigned char T4VCNT:3;\r
-               } BIT;\r
-       } TITCNT;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :6;\r
-                       unsigned char BTE:2;\r
-               } BIT;\r
-       } TBTER;\r
-       char           wk4[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char TDER:1;\r
-               } BIT;\r
-       } TDER;\r
-       char           wk5[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char OLS3N:1;\r
-                       unsigned char OLS3P:1;\r
-                       unsigned char OLS2N:1;\r
-                       unsigned char OLS2P:1;\r
-                       unsigned char OLS1N:1;\r
-                       unsigned char OLS1P:1;\r
-               } BIT;\r
-       } TOLBR;\r
-       char           wk6[41];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char CCE:1;\r
-                       unsigned char :6;\r
-                       unsigned char WRE:1;\r
-               } BIT;\r
-       } TWCR;\r
-       char           wk7[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char CST4:1;\r
-                       unsigned char CST3:1;\r
-                       unsigned char :3;\r
-                       unsigned char CST2:1;\r
-                       unsigned char CST1:1;\r
-                       unsigned char CST0:1;\r
-               } BIT;\r
-       } TSTR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char SYNC4:1;\r
-                       unsigned char SYNC3:1;\r
-                       unsigned char :3;\r
-                       unsigned char SYNC2:1;\r
-                       unsigned char SYNC1:1;\r
-                       unsigned char SYNC0:1;\r
-               } BIT;\r
-       } TSYR;\r
-       char           wk8[2];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char RWE:1;\r
-               } BIT;\r
-       } TRWER;\r
-};\r
-\r
-struct st_mtu0 {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char NFCS:2;\r
-                       unsigned char NFDEN:1;\r
-                       unsigned char NFCEN:1;\r
-                       unsigned char NFBEN:1;\r
-                       unsigned char NFAEN:1;\r
-               } BIT;\r
-       } NFCR;\r
-       char           wk0[111];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char CCLR:3;\r
-                       unsigned char CKEG:2;\r
-                       unsigned char TPSC:3;\r
-               } BIT;\r
-       } TCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char BFE:1;\r
-                       unsigned char BFB:1;\r
-                       unsigned char BFA:1;\r
-                       unsigned char MD:4;\r
-               } BIT;\r
-       } TMDR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char IOB:4;\r
-                       unsigned char IOA:4;\r
-               } BIT;\r
-       } TIORH;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char IOD:4;\r
-                       unsigned char IOC:4;\r
-               } BIT;\r
-       } TIORL;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TTGE:1;\r
-                       unsigned char :2;\r
-                       unsigned char TCIEV:1;\r
-                       unsigned char TGIED:1;\r
-                       unsigned char TGIEC:1;\r
-                       unsigned char TGIEB:1;\r
-                       unsigned char TGIEA:1;\r
-               } BIT;\r
-       } TIER;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TCFD:1;\r
-               } BIT;\r
-       } TSR;\r
-       unsigned short TCNT;\r
-       unsigned short TGRA;\r
-       unsigned short TGRB;\r
-       unsigned short TGRC;\r
-       unsigned short TGRD;\r
-       char           wk1[16];\r
-       unsigned short TGRE;\r
-       unsigned short TGRF;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :6;\r
-                       unsigned char TGIEF:1;\r
-                       unsigned char TGIEE:1;\r
-               } BIT;\r
-       } TIER2;\r
-       char           wk2[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :5;\r
-                       unsigned char TTSE:1;\r
-                       unsigned char TTSB:1;\r
-                       unsigned char TTSA:1;\r
-               } BIT;\r
-       } TBTM;\r
-};\r
-\r
-struct st_mtu1 {\r
-       char           wk0[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char NFCS:2;\r
-                       unsigned char NFDEN:1;\r
-                       unsigned char NFCEN:1;\r
-                       unsigned char NFBEN:1;\r
-                       unsigned char NFAEN:1;\r
-               } BIT;\r
-       } NFCR;\r
-       char           wk1[238];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char CCLR:2;\r
-                       unsigned char CKEG:2;\r
-                       unsigned char TPSC:3;\r
-               } BIT;\r
-       } TCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :4;\r
-                       unsigned char MD:4;\r
-               } BIT;\r
-       } TMDR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char IOB:4;\r
-                       unsigned char IOA:4;\r
-               } BIT;\r
-       } TIOR;\r
-       char           wk2[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TTGE:1;\r
-                       unsigned char :1;\r
-                       unsigned char TCIEU:1;\r
-                       unsigned char TCIEV:1;\r
-                       unsigned char :2;\r
-                       unsigned char TGIEB:1;\r
-                       unsigned char TGIEA:1;\r
-               } BIT;\r
-       } TIER;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TCFD:1;\r
-               } BIT;\r
-       } TSR;\r
-       unsigned short TCNT;\r
-       unsigned short TGRA;\r
-       unsigned short TGRB;\r
-       char           wk3[4];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :4;\r
-                       unsigned char I2BE:1;\r
-                       unsigned char I2AE:1;\r
-                       unsigned char I1BE:1;\r
-                       unsigned char I1AE:1;\r
-               } BIT;\r
-       } TICCR;\r
-};\r
-\r
-struct st_mtu2 {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char NFCS:2;\r
-                       unsigned char NFDEN:1;\r
-                       unsigned char NFCEN:1;\r
-                       unsigned char NFBEN:1;\r
-                       unsigned char NFAEN:1;\r
-               } BIT;\r
-       } NFCR;\r
-       char           wk0[365];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char CCLR:2;\r
-                       unsigned char CKEG:2;\r
-                       unsigned char TPSC:3;\r
-               } BIT;\r
-       } TCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :4;\r
-                       unsigned char MD:4;\r
-               } BIT;\r
-       } TMDR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char IOB:4;\r
-                       unsigned char IOA:4;\r
-               } BIT;\r
-       } TIOR;\r
-       char           wk1[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TTGE:1;\r
-                       unsigned char :1;\r
-                       unsigned char TCIEU:1;\r
-                       unsigned char TCIEV:1;\r
-                       unsigned char :2;\r
-                       unsigned char TGIEB:1;\r
-                       unsigned char TGIEA:1;\r
-               } BIT;\r
-       } TIER;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TCFD:1;\r
-               } BIT;\r
-       } TSR;\r
-       unsigned short TCNT;\r
-       unsigned short TGRA;\r
-       unsigned short TGRB;\r
-};\r
-\r
-struct st_mtu3 {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char CCLR:3;\r
-                       unsigned char CKEG:2;\r
-                       unsigned char TPSC:3;\r
-               } BIT;\r
-       } TCR;\r
-       char           wk0[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char BFB:1;\r
-                       unsigned char BFA:1;\r
-                       unsigned char MD:4;\r
-               } BIT;\r
-       } TMDR;\r
-       char           wk1[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char IOB:4;\r
-                       unsigned char IOA:4;\r
-               } BIT;\r
-       } TIORH;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char IOD:4;\r
-                       unsigned char IOC:4;\r
-               } BIT;\r
-       } TIORL;\r
-       char           wk2[2];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TTGE:1;\r
-                       unsigned char :2;\r
-                       unsigned char TCIEV:1;\r
-                       unsigned char TGIED:1;\r
-                       unsigned char TGIEC:1;\r
-                       unsigned char TGIEB:1;\r
-                       unsigned char TGIEA:1;\r
-               } BIT;\r
-       } TIER;\r
-       char           wk3[7];\r
-       unsigned short TCNT;\r
-       char           wk4[6];\r
-       unsigned short TGRA;\r
-       unsigned short TGRB;\r
-       char           wk5[8];\r
-       unsigned short TGRC;\r
-       unsigned short TGRD;\r
-       char           wk6[4];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TCFD:1;\r
-               } BIT;\r
-       } TSR;\r
-       char           wk7[11];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :5;\r
-                       unsigned char TTSE:1;\r
-                       unsigned char TTSB:1;\r
-                       unsigned char TTSA:1;\r
-               } BIT;\r
-       } TBTM;\r
-       char           wk8[90];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char NFCS:2;\r
-                       unsigned char NFDEN:1;\r
-                       unsigned char NFCEN:1;\r
-                       unsigned char NFBEN:1;\r
-                       unsigned char NFAEN:1;\r
-               } BIT;\r
-       } NFCR;\r
-};\r
-\r
-struct st_mtu4 {\r
-       char           wk0[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char CCLR:3;\r
-                       unsigned char CKEG:2;\r
-                       unsigned char TPSC:3;\r
-               } BIT;\r
-       } TCR;\r
-       char           wk1[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char BFB:1;\r
-                       unsigned char BFA:1;\r
-                       unsigned char MD:4;\r
-               } BIT;\r
-       } TMDR;\r
-       char           wk2[2];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char IOB:4;\r
-                       unsigned char IOA:4;\r
-               } BIT;\r
-       } TIORH;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char IOD:4;\r
-                       unsigned char IOC:4;\r
-               } BIT;\r
-       } TIORL;\r
-       char           wk3[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TTGE:1;\r
-                       unsigned char TTGE2:1;\r
-                       unsigned char :1;\r
-                       unsigned char TCIEV:1;\r
-                       unsigned char TGIED:1;\r
-                       unsigned char TGIEC:1;\r
-                       unsigned char TGIEB:1;\r
-                       unsigned char TGIEA:1;\r
-               } BIT;\r
-       } TIER;\r
-       char           wk4[8];\r
-       unsigned short TCNT;\r
-       char           wk5[8];\r
-       unsigned short TGRA;\r
-       unsigned short TGRB;\r
-       char           wk6[8];\r
-       unsigned short TGRC;\r
-       unsigned short TGRD;\r
-       char           wk7[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TCFD:1;\r
-               } BIT;\r
-       } TSR;\r
-       char           wk8[11];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :5;\r
-                       unsigned char TTSE:1;\r
-                       unsigned char TTSB:1;\r
-                       unsigned char TTSA:1;\r
-               } BIT;\r
-       } TBTM;\r
-       char           wk9[6];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short BF:2;\r
-                       unsigned short :6;\r
-                       unsigned short UT4AE:1;\r
-                       unsigned short DT4AE:1;\r
-                       unsigned short UT4BE:1;\r
-                       unsigned short DT4BE:1;\r
-                       unsigned short ITA3AE:1;\r
-                       unsigned short ITA4VE:1;\r
-                       unsigned short ITB3AE:1;\r
-                       unsigned short ITB4VE:1;\r
-               } BIT;\r
-       } TADCR;\r
-       char           wk10[2];\r
-       unsigned short TADCORA;\r
-       unsigned short TADCORB;\r
-       unsigned short TADCOBRA;\r
-       unsigned short TADCOBRB;\r
-       char           wk11[72];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char NFCS:2;\r
-                       unsigned char NFDEN:1;\r
-                       unsigned char NFCEN:1;\r
-                       unsigned char NFBEN:1;\r
-                       unsigned char NFAEN:1;\r
-               } BIT;\r
-       } NFCR;\r
-};\r
-\r
-struct st_mtu5 {\r
-       char           wk0[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char NFCS:2;\r
-                       unsigned char :1;\r
-                       unsigned char NFWEN:1;\r
-                       unsigned char NFVEN:1;\r
-                       unsigned char NFUEN:1;\r
-               } BIT;\r
-       } NFCR;\r
-       char           wk1[490];\r
-       unsigned short TCNTU;\r
-       unsigned short TGRU;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :6;\r
-                       unsigned char TPSC:2;\r
-               } BIT;\r
-       } TCRU;\r
-       char           wk2[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char IOC:5;\r
-               } BIT;\r
-       } TIORU;\r
-       char           wk3[9];\r
-       unsigned short TCNTV;\r
-       unsigned short TGRV;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :6;\r
-                       unsigned char TPSC:2;\r
-               } BIT;\r
-       } TCRV;\r
-       char           wk4[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char IOC:5;\r
-               } BIT;\r
-       } TIORV;\r
-       char           wk5[9];\r
-       unsigned short TCNTW;\r
-       unsigned short TGRW;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :6;\r
-                       unsigned char TPSC:2;\r
-               } BIT;\r
-       } TCRW;\r
-       char           wk6[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char IOC:5;\r
-               } BIT;\r
-       } TIORW;\r
-       char           wk7[11];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :5;\r
-                       unsigned char TGIE5U:1;\r
-                       unsigned char TGIE5V:1;\r
-                       unsigned char TGIE5W:1;\r
-               } BIT;\r
-       } TIER;\r
-       char           wk8[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :5;\r
-                       unsigned char CSTU5:1;\r
-                       unsigned char CSTV5:1;\r
-                       unsigned char CSTW5:1;\r
-               } BIT;\r
-       } TSTR;\r
-       char           wk9[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :5;\r
-                       unsigned char CMPCLR5U:1;\r
-                       unsigned char CMPCLR5V:1;\r
-                       unsigned char CMPCLR5W:1;\r
-               } BIT;\r
-       } TCNTCMPCLR;\r
-};\r
-\r
-struct st_poe {\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short POE3F:1;\r
-                       unsigned short POE2F:1;\r
-                       unsigned short POE1F:1;\r
-                       unsigned short POE0F:1;\r
-                       unsigned short :3;\r
-                       unsigned short PIE1:1;\r
-                       unsigned short POE3M:2;\r
-                       unsigned short POE2M:2;\r
-                       unsigned short POE1M:2;\r
-                       unsigned short POE0M:2;\r
-               } BIT;\r
-       } ICSR1;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short OSF1:1;\r
-                       unsigned short :5;\r
-                       unsigned short OCE1:1;\r
-                       unsigned short OIE1:1;\r
-               } BIT;\r
-       } OCSR1;\r
-       char           wk0[4];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :3;\r
-                       unsigned short POE8F:1;\r
-                       unsigned short :2;\r
-                       unsigned short POE8E:1;\r
-                       unsigned short PIE2:1;\r
-                       unsigned short :6;\r
-                       unsigned short POE8M:2;\r
-               } BIT;\r
-       } ICSR2;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :6;\r
-                       unsigned char CH0HIZ:1;\r
-                       unsigned char CH34HIZ:1;\r
-               } BIT;\r
-       } SPOER;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :4;\r
-                       unsigned char PE3ZE:1;\r
-                       unsigned char PE2ZE:1;\r
-                       unsigned char PE1ZE:1;\r
-                       unsigned char PE0ZE:1;\r
-               } BIT;\r
-       } POECR1;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char P1CZEA:1;\r
-                       unsigned char P2CZEA:1;\r
-                       unsigned char P3CZEA:1;\r
-               } BIT;\r
-       } POECR2;\r
-       char           wk1[1];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :3;\r
-                       unsigned short OSTSTF:1;\r
-                       unsigned short :2;\r
-                       unsigned short OSTSTE:1;\r
-               } BIT;\r
-       } ICSR3;\r
-};\r
-\r
-struct st_port0 {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char :1;\r
-                       unsigned char B5:1;\r
-                       unsigned char :1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PDR;\r
-       char           wk0[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char :1;\r
-                       unsigned char B5:1;\r
-                       unsigned char :1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PODR;\r
-       char           wk1[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char :1;\r
-                       unsigned char B5:1;\r
-                       unsigned char :1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PIDR;\r
-       char           wk2[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char :1;\r
-                       unsigned char B5:1;\r
-                       unsigned char :1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PMR;\r
-       char           wk3[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char :1;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :3;\r
-                       unsigned char B2:1;\r
-               } BIT;\r
-       } ODR1;\r
-       char           wk4[62];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char :1;\r
-                       unsigned char B5:1;\r
-                       unsigned char :1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PCR;\r
-       char           wk5[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :5;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } DSCR;\r
-};\r
-\r
-struct st_port1 {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PDR;\r
-       char           wk0[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PODR;\r
-       char           wk1[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PIDR;\r
-       char           wk2[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PMR;\r
-       char           wk3[32];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char :1;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char :1;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR1;\r
-       char           wk4[61];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PCR;\r
-};\r
-\r
-struct st_port2 {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PDR;\r
-       char           wk0[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PODR;\r
-       char           wk1[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PIDR;\r
-       char           wk2[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PMR;\r
-       char           wk3[33];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char :1;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char :1;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR1;\r
-       char           wk4[60];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PCR;\r
-       char           wk5[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-               } BIT;\r
-       } DSCR;\r
-};\r
-\r
-struct st_port3 {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PDR;\r
-       char           wk0[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PODR;\r
-       char           wk1[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PIDR;\r
-       char           wk2[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PMR;\r
-       char           wk3[34];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char :1;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char :1;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR1;\r
-       char           wk4[59];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PCR;\r
-};\r
-\r
-struct st_port4 {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PDR;\r
-       char           wk0[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PODR;\r
-       char           wk1[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PIDR;\r
-       char           wk2[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PMR;\r
-       char           wk3[35];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char :1;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char :1;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR1;\r
-       char           wk4[58];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PCR;\r
-};\r
-\r
-struct st_port5 {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PDR;\r
-       char           wk0[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PODR;\r
-       char           wk1[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PIDR;\r
-       char           wk2[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PMR;\r
-       char           wk3[36];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char :1;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char :1;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR1;\r
-       char           wk4[57];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PCR;\r
-       char           wk5[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :3;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } DSCR;\r
-};\r
-\r
-struct st_port6 {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PDR;\r
-       char           wk0[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PODR;\r
-       char           wk1[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PIDR;\r
-       char           wk2[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PMR;\r
-       char           wk3[37];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char :1;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char :1;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR1;\r
-       char           wk4[56];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PCR;\r
-};\r
-\r
-struct st_port7 {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PDR;\r
-       char           wk0[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PODR;\r
-       char           wk1[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PIDR;\r
-       char           wk2[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PMR;\r
-       char           wk3[38];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char :1;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char :1;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR1;\r
-       char           wk4[55];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PCR;\r
-};\r
-\r
-struct st_port8 {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PDR;\r
-       char           wk0[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PODR;\r
-       char           wk1[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PIDR;\r
-       char           wk2[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PMR;\r
-       char           wk3[39];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char :1;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char :1;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR1;\r
-       char           wk4[54];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PCR;\r
-};\r
-\r
-struct st_port9 {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PDR;\r
-       char           wk0[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PODR;\r
-       char           wk1[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PIDR;\r
-       char           wk2[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PMR;\r
-       char           wk3[40];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char :1;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char :1;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR1;\r
-       char           wk4[53];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PCR;\r
-       char           wk5[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } DSCR;\r
-};\r
-\r
-struct st_porta {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PDR;\r
-       char           wk0[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PODR;\r
-       char           wk1[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PIDR;\r
-       char           wk2[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PMR;\r
-       char           wk3[41];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char :1;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char :1;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR1;\r
-       char           wk4[52];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PCR;\r
-       char           wk5[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } DSCR;\r
-};\r
-\r
-struct st_portb {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PDR;\r
-       char           wk0[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PODR;\r
-       char           wk1[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PIDR;\r
-       char           wk2[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PMR;\r
-       char           wk3[42];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char :1;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char :1;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR1;\r
-       char           wk4[51];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PCR;\r
-       char           wk5[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } DSCR;\r
-};\r
-\r
-struct st_portc {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PDR;\r
-       char           wk0[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PODR;\r
-       char           wk1[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PIDR;\r
-       char           wk2[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PMR;\r
-       char           wk3[43];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char :1;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char :1;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR1;\r
-       char           wk4[50];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PCR;\r
-       char           wk5[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } DSCR;\r
-};\r
-\r
-struct st_portd {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PDR;\r
-       char           wk0[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PODR;\r
-       char           wk1[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PIDR;\r
-       char           wk2[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PMR;\r
-       char           wk3[44];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char :1;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char :1;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR1;\r
-       char           wk4[49];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PCR;\r
-       char           wk5[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } DSCR;\r
-};\r
-\r
-struct st_porte {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PDR;\r
-       char           wk0[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PODR;\r
-       char           wk1[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PIDR;\r
-       char           wk2[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PMR;\r
-       char           wk3[45];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char :1;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR1;\r
-       char           wk4[48];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PCR;\r
-       char           wk5[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } DSCR;\r
-};\r
-\r
-struct st_portf {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PDR;\r
-       char           wk0[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PODR;\r
-       char           wk1[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PIDR;\r
-       char           wk2[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PMR;\r
-       char           wk3[46];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char :1;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :5;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR1;\r
-       char           wk4[47];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PCR;\r
-};\r
-\r
-struct st_portg {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PDR;\r
-       char           wk0[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PODR;\r
-       char           wk1[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PIDR;\r
-       char           wk2[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PMR;\r
-       char           wk3[47];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char :1;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-                       unsigned char :1;\r
-                       unsigned char B4:1;\r
-                       unsigned char :1;\r
-                       unsigned char B2:1;\r
-                       unsigned char :1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } ODR1;\r
-       char           wk4[46];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PCR;\r
-       char           wk5[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :6;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } DSCR;\r
-};\r
-\r
-struct st_porth {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char B7:1;\r
-                       unsigned char B6:1;\r
-                       unsigned char B5:1;\r
-                       unsigned char B4:1;\r
-                       unsigned char B3:1;\r
-                       unsigned char B2:1;\r
-                       unsigned char B1:1;\r
-                       unsigned char B0:1;\r
-               } BIT;\r
-       } PCR;\r
-};\r
-\r
-struct st_portj {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char B5:1;\r
-                       unsigned char :1;\r
-                       unsigned char B3:1;\r
-               } BIT;\r
-       } PDR;\r
-       char           wk0[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char B5:1;\r
-                       unsigned char :1;\r
-                       unsigned char B3:1;\r
-               } BIT;\r
-       } PODR;\r
-       char           wk1[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char B5:1;\r
-                       unsigned char :1;\r
-                       unsigned char B3:1;\r
-               } BIT;\r
-       } PIDR;\r
-       char           wk2[31];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char B5:1;\r
-                       unsigned char :1;\r
-                       unsigned char B3:1;\r
-               } BIT;\r
-       } PMR;\r
-       char           wk3[49];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char B6:1;\r
-               } BIT;\r
-       } ODR0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :5;\r
-                       unsigned char B2:1;\r
-               } BIT;\r
-       } ODR1;\r
-       char           wk4[44];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char B5:1;\r
-                       unsigned char :1;\r
-                       unsigned char B3:1;\r
-               } BIT;\r
-       } PCR;\r
-};\r
-\r
-struct st_ppg0 {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char G3CMS:2;\r
-                       unsigned char G2CMS:2;\r
-                       unsigned char G1CMS:2;\r
-                       unsigned char G0CMS:2;\r
-               } BIT;\r
-       } PCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char G3INV:1;\r
-                       unsigned char G2INV:1;\r
-                       unsigned char G1INV:1;\r
-                       unsigned char G0INV:1;\r
-                       unsigned char G3NOV:1;\r
-                       unsigned char G2NOV:1;\r
-                       unsigned char G1NOV:1;\r
-                       unsigned char G0NOV:1;\r
-               } BIT;\r
-       } PMR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char NDER15:1;\r
-                       unsigned char NDER14:1;\r
-                       unsigned char NDER13:1;\r
-                       unsigned char NDER12:1;\r
-                       unsigned char NDER11:1;\r
-                       unsigned char NDER10:1;\r
-                       unsigned char NDER9:1;\r
-                       unsigned char NDER8:1;\r
-               } BIT;\r
-       } NDERH;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char NDER7:1;\r
-                       unsigned char NDER6:1;\r
-                       unsigned char NDER5:1;\r
-                       unsigned char NDER4:1;\r
-                       unsigned char NDER3:1;\r
-                       unsigned char NDER2:1;\r
-                       unsigned char NDER1:1;\r
-                       unsigned char NDER0:1;\r
-               } BIT;\r
-       } NDERL;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char POD15:1;\r
-                       unsigned char POD14:1;\r
-                       unsigned char POD13:1;\r
-                       unsigned char POD12:1;\r
-                       unsigned char POD11:1;\r
-                       unsigned char POD10:1;\r
-                       unsigned char POD9:1;\r
-                       unsigned char POD8:1;\r
-               } BIT;\r
-       } PODRH;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char POD7:1;\r
-                       unsigned char POD6:1;\r
-                       unsigned char POD5:1;\r
-                       unsigned char POD4:1;\r
-                       unsigned char POD3:1;\r
-                       unsigned char POD2:1;\r
-                       unsigned char POD1:1;\r
-                       unsigned char POD0:1;\r
-               } BIT;\r
-       } PODRL;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char NDR15:1;\r
-                       unsigned char NDR14:1;\r
-                       unsigned char NDR13:1;\r
-                       unsigned char NDR12:1;\r
-                       unsigned char NDR11:1;\r
-                       unsigned char NDR10:1;\r
-                       unsigned char NDR9:1;\r
-                       unsigned char NDR8:1;\r
-               } BIT;\r
-       } NDRH;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char NDR7:1;\r
-                       unsigned char NDR6:1;\r
-                       unsigned char NDR5:1;\r
-                       unsigned char NDR4:1;\r
-                       unsigned char NDR3:1;\r
-                       unsigned char NDR2:1;\r
-                       unsigned char NDR1:1;\r
-                       unsigned char NDR0:1;\r
-               } BIT;\r
-       } NDRL;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :4;\r
-                       unsigned char NDR11:1;\r
-                       unsigned char NDR10:1;\r
-                       unsigned char NDR9:1;\r
-                       unsigned char NDR8:1;\r
-               } BIT;\r
-       } NDRH2;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :4;\r
-                       unsigned char NDR3:1;\r
-                       unsigned char NDR2:1;\r
-                       unsigned char NDR1:1;\r
-                       unsigned char NDR0:1;\r
-               } BIT;\r
-       } NDRL2;\r
-};\r
-\r
-struct st_ppg1 {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char PTRSL:1;\r
-               } BIT;\r
-       } PTRSLR;\r
-       char           wk0[5];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char G3CMS:2;\r
-                       unsigned char G2CMS:2;\r
-                       unsigned char G1CMS:2;\r
-                       unsigned char G0CMS:2;\r
-               } BIT;\r
-       } PCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char G3INV:1;\r
-                       unsigned char G2INV:1;\r
-                       unsigned char G1INV:1;\r
-                       unsigned char G0INV:1;\r
-                       unsigned char G3NOV:1;\r
-                       unsigned char G2NOV:1;\r
-                       unsigned char G1NOV:1;\r
-                       unsigned char G0NOV:1;\r
-               } BIT;\r
-       } PMR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char NDER31:1;\r
-                       unsigned char NDER30:1;\r
-                       unsigned char NDER29:1;\r
-                       unsigned char NDER28:1;\r
-                       unsigned char NDER27:1;\r
-                       unsigned char NDER26:1;\r
-                       unsigned char NDER25:1;\r
-                       unsigned char NDER24:1;\r
-               } BIT;\r
-       } NDERH;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char NDER23:1;\r
-                       unsigned char NDER22:1;\r
-                       unsigned char NDER21:1;\r
-                       unsigned char NDER20:1;\r
-                       unsigned char NDER19:1;\r
-                       unsigned char NDER18:1;\r
-                       unsigned char NDER17:1;\r
-                       unsigned char NDER16:1;\r
-               } BIT;\r
-       } NDERL;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char POD31:1;\r
-                       unsigned char POD30:1;\r
-                       unsigned char POD29:1;\r
-                       unsigned char POD28:1;\r
-                       unsigned char POD27:1;\r
-                       unsigned char POD26:1;\r
-                       unsigned char POD25:1;\r
-                       unsigned char POD24:1;\r
-               } BIT;\r
-       } PODRH;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char POD23:1;\r
-                       unsigned char POD22:1;\r
-                       unsigned char POD21:1;\r
-                       unsigned char POD20:1;\r
-                       unsigned char POD19:1;\r
-                       unsigned char POD18:1;\r
-                       unsigned char POD17:1;\r
-                       unsigned char POD16:1;\r
-               } BIT;\r
-       } PODRL;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char NDR31:1;\r
-                       unsigned char NDR30:1;\r
-                       unsigned char NDR29:1;\r
-                       unsigned char NDR28:1;\r
-                       unsigned char NDR27:1;\r
-                       unsigned char NDR26:1;\r
-                       unsigned char NDR25:1;\r
-                       unsigned char NDR24:1;\r
-               } BIT;\r
-       } NDRH;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char NDR23:1;\r
-                       unsigned char NDR22:1;\r
-                       unsigned char NDR21:1;\r
-                       unsigned char NDR20:1;\r
-                       unsigned char NDR19:1;\r
-                       unsigned char NDR18:1;\r
-                       unsigned char NDR17:1;\r
-                       unsigned char NDR16:1;\r
-               } BIT;\r
-       } NDRL;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :4;\r
-                       unsigned char NDR27:1;\r
-                       unsigned char NDR26:1;\r
-                       unsigned char NDR25:1;\r
-                       unsigned char NDR24:1;\r
-               } BIT;\r
-       } NDRH2;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :4;\r
-                       unsigned char NDR19:1;\r
-                       unsigned char NDR18:1;\r
-                       unsigned char NDR17:1;\r
-                       unsigned char NDR16:1;\r
-               } BIT;\r
-       } NDRL2;\r
-};\r
-\r
-struct st_riic0 {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ICE:1;\r
-                       unsigned char IICRST:1;\r
-                       unsigned char CLO:1;\r
-                       unsigned char SOWP:1;\r
-                       unsigned char SCLO:1;\r
-                       unsigned char SDAO:1;\r
-                       unsigned char SCLI:1;\r
-                       unsigned char SDAI:1;\r
-               } BIT;\r
-       } ICCR1;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char BBSY:1;\r
-                       unsigned char MST:1;\r
-                       unsigned char TRS:1;\r
-                       unsigned char :1;\r
-                       unsigned char SP:1;\r
-                       unsigned char RS:1;\r
-                       unsigned char ST:1;\r
-               } BIT;\r
-       } ICCR2;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char MTWP:1;\r
-                       unsigned char CKS:3;\r
-                       unsigned char BCWP:1;\r
-                       unsigned char BC:3;\r
-               } BIT;\r
-       } ICMR1;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char DLCS:1;\r
-                       unsigned char SDDL:3;\r
-                       unsigned char :1;\r
-                       unsigned char TMOH:1;\r
-                       unsigned char TMOL:1;\r
-                       unsigned char TMOS:1;\r
-               } BIT;\r
-       } ICMR2;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char SMBS:1;\r
-                       unsigned char WAIT:1;\r
-                       unsigned char RDRFS:1;\r
-                       unsigned char ACKWP:1;\r
-                       unsigned char ACKBT:1;\r
-                       unsigned char ACKBR:1;\r
-                       unsigned char NF:2;\r
-               } BIT;\r
-       } ICMR3;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char FMPE:1;\r
-                       unsigned char SCLE:1;\r
-                       unsigned char NFE:1;\r
-                       unsigned char NACKE:1;\r
-                       unsigned char SALE:1;\r
-                       unsigned char NALE:1;\r
-                       unsigned char MALE:1;\r
-                       unsigned char TMOE:1;\r
-               } BIT;\r
-       } ICFER;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char HOAE:1;\r
-                       unsigned char :1;\r
-                       unsigned char DIDE:1;\r
-                       unsigned char :1;\r
-                       unsigned char GCAE:1;\r
-                       unsigned char SAR2E:1;\r
-                       unsigned char SAR1E:1;\r
-                       unsigned char SAR0E:1;\r
-               } BIT;\r
-       } ICSER;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TIE:1;\r
-                       unsigned char TEIE:1;\r
-                       unsigned char RIE:1;\r
-                       unsigned char NAKIE:1;\r
-                       unsigned char SPIE:1;\r
-                       unsigned char STIE:1;\r
-                       unsigned char ALIE:1;\r
-                       unsigned char TMOIE:1;\r
-               } BIT;\r
-       } ICIER;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char HOA:1;\r
-                       unsigned char :1;\r
-                       unsigned char DID:1;\r
-                       unsigned char :1;\r
-                       unsigned char GCA:1;\r
-                       unsigned char AAS2:1;\r
-                       unsigned char AAS1:1;\r
-                       unsigned char AAS0:1;\r
-               } BIT;\r
-       } ICSR1;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TDRE:1;\r
-                       unsigned char TEND:1;\r
-                       unsigned char RDRF:1;\r
-                       unsigned char NACKF:1;\r
-                       unsigned char STOP:1;\r
-                       unsigned char START:1;\r
-                       unsigned char AL:1;\r
-                       unsigned char TMOF:1;\r
-               } BIT;\r
-       } ICSR2;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char SVA:7;\r
-                       unsigned char SVA0:1;\r
-               } BIT;\r
-       } SARL0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :5;\r
-                       unsigned char SVA:2;\r
-                       unsigned char FS:1;\r
-               } BIT;\r
-       } SARU0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char SVA:7;\r
-                       unsigned char SVA0:1;\r
-               } BIT;\r
-       } SARL1;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :5;\r
-                       unsigned char SVA:2;\r
-                       unsigned char FS:1;\r
-               } BIT;\r
-       } SARU1;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char SVA:7;\r
-                       unsigned char SVA0:1;\r
-               } BIT;\r
-       } SARL2;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :5;\r
-                       unsigned char SVA:2;\r
-                       unsigned char FS:1;\r
-               } BIT;\r
-       } SARU2;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char BRL:5;\r
-               } BIT;\r
-       } ICBRL;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char BRH:5;\r
-               } BIT;\r
-       } ICBRH;\r
-       unsigned char  ICDRT;\r
-       unsigned char  ICDRR;\r
-};\r
-\r
-struct st_riic1 {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ICE:1;\r
-                       unsigned char IICRST:1;\r
-                       unsigned char CLO:1;\r
-                       unsigned char SOWP:1;\r
-                       unsigned char SCLO:1;\r
-                       unsigned char SDAO:1;\r
-                       unsigned char SCLI:1;\r
-                       unsigned char SDAI:1;\r
-               } BIT;\r
-       } ICCR1;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char BBSY:1;\r
-                       unsigned char MST:1;\r
-                       unsigned char TRS:1;\r
-                       unsigned char :1;\r
-                       unsigned char SP:1;\r
-                       unsigned char RS:1;\r
-                       unsigned char ST:1;\r
-               } BIT;\r
-       } ICCR2;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char MTWP:1;\r
-                       unsigned char CKS:3;\r
-                       unsigned char BCWP:1;\r
-                       unsigned char BC:3;\r
-               } BIT;\r
-       } ICMR1;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char DLCS:1;\r
-                       unsigned char SDDL:3;\r
-                       unsigned char :1;\r
-                       unsigned char TMOH:1;\r
-                       unsigned char TMOL:1;\r
-                       unsigned char TMOS:1;\r
-               } BIT;\r
-       } ICMR2;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char SMBS:1;\r
-                       unsigned char WAIT:1;\r
-                       unsigned char RDRFS:1;\r
-                       unsigned char ACKWP:1;\r
-                       unsigned char ACKBT:1;\r
-                       unsigned char ACKBR:1;\r
-                       unsigned char NF:2;\r
-               } BIT;\r
-       } ICMR3;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char SCLE:1;\r
-                       unsigned char NFE:1;\r
-                       unsigned char NACKE:1;\r
-                       unsigned char SALE:1;\r
-                       unsigned char NALE:1;\r
-                       unsigned char MALE:1;\r
-                       unsigned char TMOE:1;\r
-               } BIT;\r
-       } ICFER;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char HOAE:1;\r
-                       unsigned char :1;\r
-                       unsigned char DIDE:1;\r
-                       unsigned char :1;\r
-                       unsigned char GCAE:1;\r
-                       unsigned char SAR2E:1;\r
-                       unsigned char SAR1E:1;\r
-                       unsigned char SAR0E:1;\r
-               } BIT;\r
-       } ICSER;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TIE:1;\r
-                       unsigned char TEIE:1;\r
-                       unsigned char RIE:1;\r
-                       unsigned char NAKIE:1;\r
-                       unsigned char SPIE:1;\r
-                       unsigned char STIE:1;\r
-                       unsigned char ALIE:1;\r
-                       unsigned char TMOIE:1;\r
-               } BIT;\r
-       } ICIER;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char HOA:1;\r
-                       unsigned char :1;\r
-                       unsigned char DID:1;\r
-                       unsigned char :1;\r
-                       unsigned char GCA:1;\r
-                       unsigned char AAS2:1;\r
-                       unsigned char AAS1:1;\r
-                       unsigned char AAS0:1;\r
-               } BIT;\r
-       } ICSR1;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TDRE:1;\r
-                       unsigned char TEND:1;\r
-                       unsigned char RDRF:1;\r
-                       unsigned char NACKF:1;\r
-                       unsigned char STOP:1;\r
-                       unsigned char START:1;\r
-                       unsigned char AL:1;\r
-                       unsigned char TMOF:1;\r
-               } BIT;\r
-       } ICSR2;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char SVA:7;\r
-                       unsigned char SVA0:1;\r
-               } BIT;\r
-       } SARL0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :5;\r
-                       unsigned char SVA:2;\r
-                       unsigned char FS:1;\r
-               } BIT;\r
-       } SARU0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char SVA:7;\r
-                       unsigned char SVA0:1;\r
-               } BIT;\r
-       } SARL1;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :5;\r
-                       unsigned char SVA:2;\r
-                       unsigned char FS:1;\r
-               } BIT;\r
-       } SARU1;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char SVA:7;\r
-                       unsigned char SVA0:1;\r
-               } BIT;\r
-       } SARL2;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :5;\r
-                       unsigned char SVA:2;\r
-                       unsigned char FS:1;\r
-               } BIT;\r
-       } SARU2;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char BRL:5;\r
-               } BIT;\r
-       } ICBRL;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char BRH:5;\r
-               } BIT;\r
-       } ICBRH;\r
-       unsigned char  ICDRT;\r
-       unsigned char  ICDRR;\r
-};\r
-\r
-struct st_rspi {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char SPRIE:1;\r
-                       unsigned char SPE:1;\r
-                       unsigned char SPTIE:1;\r
-                       unsigned char SPEIE:1;\r
-                       unsigned char MSTR:1;\r
-                       unsigned char MODFEN:1;\r
-                       unsigned char TXMD:1;\r
-                       unsigned char SPMS:1;\r
-               } BIT;\r
-       } SPCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :4;\r
-                       unsigned char SSL3P:1;\r
-                       unsigned char SSL2P:1;\r
-                       unsigned char SSL1P:1;\r
-                       unsigned char SSL0P:1;\r
-               } BIT;\r
-       } SSLP;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char MOIFE:1;\r
-                       unsigned char MOIFV:1;\r
-                       unsigned char :1;\r
-                       unsigned char SPOM:1;\r
-                       unsigned char SPLP2:1;\r
-                       unsigned char SPLP:1;\r
-               } BIT;\r
-       } SPPCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :4;\r
-                       unsigned char PERF:1;\r
-                       unsigned char MODF:1;\r
-                       unsigned char IDLNF:1;\r
-                       unsigned char OVRF:1;\r
-               } BIT;\r
-       } SPSR;\r
-       unsigned long  SPDR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :5;\r
-                       unsigned char SPSLN:3;\r
-               } BIT;\r
-       } SPSCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char SPECM:3;\r
-                       unsigned char :1;\r
-                       unsigned char SPCP:3;\r
-               } BIT;\r
-       } SPSSR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char SPR7:1;\r
-                       unsigned char SPR6:1;\r
-                       unsigned char SPR5:1;\r
-                       unsigned char SPR4:1;\r
-                       unsigned char SPR3:1;\r
-                       unsigned char SPR2:1;\r
-                       unsigned char SPR1:1;\r
-                       unsigned char SPR0:1;\r
-               } BIT;\r
-       } SPBR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char SPLW:1;\r
-                       unsigned char SPRDTD:1;\r
-                       unsigned char SLSEL:2;\r
-                       unsigned char SPFC:2;\r
-               } BIT;\r
-       } SPDCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :5;\r
-                       unsigned char SCKDL:3;\r
-               } BIT;\r
-       } SPCKD;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :5;\r
-                       unsigned char SLNDL:3;\r
-               } BIT;\r
-       } SSLND;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :5;\r
-                       unsigned char SPNDL:3;\r
-               } BIT;\r
-       } SPND;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :4;\r
-                       unsigned char PTE:1;\r
-                       unsigned char SPIIE:1;\r
-                       unsigned char SPOE:1;\r
-                       unsigned char SPPE:1;\r
-               } BIT;\r
-       } SPCR2;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short SCKDEN:1;\r
-                       unsigned short SLNDEN:1;\r
-                       unsigned short SPNDEN:1;\r
-                       unsigned short LSBF:1;\r
-                       unsigned short SPB:4;\r
-                       unsigned short SSLKP:1;\r
-                       unsigned short SSLA:3;\r
-                       unsigned short BRDV:2;\r
-                       unsigned short CPOL:1;\r
-                       unsigned short CPHA:1;\r
-               } BIT;\r
-       } SPCMD0;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short SCKDEN:1;\r
-                       unsigned short SLNDEN:1;\r
-                       unsigned short SPNDEN:1;\r
-                       unsigned short LSBF:1;\r
-                       unsigned short SPB:4;\r
-                       unsigned short SSLKP:1;\r
-                       unsigned short SSLA:3;\r
-                       unsigned short BRDV:2;\r
-                       unsigned short CPOL:1;\r
-                       unsigned short CPHA:1;\r
-               } BIT;\r
-       } SPCMD1;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short SCKDEN:1;\r
-                       unsigned short SLNDEN:1;\r
-                       unsigned short SPNDEN:1;\r
-                       unsigned short LSBF:1;\r
-                       unsigned short SPB:4;\r
-                       unsigned short SSLKP:1;\r
-                       unsigned short SSLA:3;\r
-                       unsigned short BRDV:2;\r
-                       unsigned short CPOL:1;\r
-                       unsigned short CPHA:1;\r
-               } BIT;\r
-       } SPCMD2;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short SCKDEN:1;\r
-                       unsigned short SLNDEN:1;\r
-                       unsigned short SPNDEN:1;\r
-                       unsigned short LSBF:1;\r
-                       unsigned short SPB:4;\r
-                       unsigned short SSLKP:1;\r
-                       unsigned short SSLA:3;\r
-                       unsigned short BRDV:2;\r
-                       unsigned short CPOL:1;\r
-                       unsigned short CPHA:1;\r
-               } BIT;\r
-       } SPCMD3;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short SCKDEN:1;\r
-                       unsigned short SLNDEN:1;\r
-                       unsigned short SPNDEN:1;\r
-                       unsigned short LSBF:1;\r
-                       unsigned short SPB:4;\r
-                       unsigned short SSLKP:1;\r
-                       unsigned short SSLA:3;\r
-                       unsigned short BRDV:2;\r
-                       unsigned short CPOL:1;\r
-                       unsigned short CPHA:1;\r
-               } BIT;\r
-       } SPCMD4;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short SCKDEN:1;\r
-                       unsigned short SLNDEN:1;\r
-                       unsigned short SPNDEN:1;\r
-                       unsigned short LSBF:1;\r
-                       unsigned short SPB:4;\r
-                       unsigned short SSLKP:1;\r
-                       unsigned short SSLA:3;\r
-                       unsigned short BRDV:2;\r
-                       unsigned short CPOL:1;\r
-                       unsigned short CPHA:1;\r
-               } BIT;\r
-       } SPCMD5;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short SCKDEN:1;\r
-                       unsigned short SLNDEN:1;\r
-                       unsigned short SPNDEN:1;\r
-                       unsigned short LSBF:1;\r
-                       unsigned short SPB:4;\r
-                       unsigned short SSLKP:1;\r
-                       unsigned short SSLA:3;\r
-                       unsigned short BRDV:2;\r
-                       unsigned short CPOL:1;\r
-                       unsigned short CPHA:1;\r
-               } BIT;\r
-       } SPCMD6;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short SCKDEN:1;\r
-                       unsigned short SLNDEN:1;\r
-                       unsigned short SPNDEN:1;\r
-                       unsigned short LSBF:1;\r
-                       unsigned short SPB:4;\r
-                       unsigned short SSLKP:1;\r
-                       unsigned short SSLA:3;\r
-                       unsigned short BRDV:2;\r
-                       unsigned short CPOL:1;\r
-                       unsigned short CPHA:1;\r
-               } BIT;\r
-       } SPCMD7;\r
-};\r
-\r
-struct st_rtc {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char F1HZ:1;\r
-                       unsigned char F2HZ:1;\r
-                       unsigned char F4HZ:1;\r
-                       unsigned char F8HZ:1;\r
-                       unsigned char F16HZ:1;\r
-                       unsigned char F32HZ:1;\r
-                       unsigned char F64HZ:1;\r
-               } BIT;\r
-       } R64CNT;\r
-       char           wk0[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char SEC10:3;\r
-                       unsigned char SEC1:4;\r
-               } BIT;\r
-       } RSECCNT;\r
-       char           wk1[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char MIN10:3;\r
-                       unsigned char MIN1:4;\r
-               } BIT;\r
-       } RMINCNT;\r
-       char           wk2[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char PM:1;\r
-                       unsigned char HR10:2;\r
-                       unsigned char HR1:4;\r
-               } BIT;\r
-       } RHRCNT;\r
-       char           wk3[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :5;\r
-                       unsigned char DAYW:3;\r
-               } BIT;\r
-       } RWKCNT;\r
-       char           wk4[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char DATE10:2;\r
-                       unsigned char DATE1:4;\r
-               } BIT;\r
-       } RDAYCNT;\r
-       char           wk5[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char MON10:1;\r
-                       unsigned char MON1:4;\r
-               } BIT;\r
-       } RMONCNT;\r
-       char           wk6[1];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :8;\r
-                       unsigned short YR10:4;\r
-                       unsigned short YR1:4;\r
-               } BIT;\r
-       } RYRCNT;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ENB:1;\r
-                       unsigned char SEC10:3;\r
-                       unsigned char SEC1:4;\r
-               } BIT;\r
-       } RSECAR;\r
-       char           wk7[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ENB:1;\r
-                       unsigned char MIN10:3;\r
-                       unsigned char MIN1:4;\r
-               } BIT;\r
-       } RMINAR;\r
-       char           wk8[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ENB:1;\r
-                       unsigned char PM:1;\r
-                       unsigned char HR10:2;\r
-                       unsigned char HR1:4;\r
-               } BIT;\r
-       } RHRAR;\r
-       char           wk9[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ENB:1;\r
-                       unsigned char :4;\r
-                       unsigned char DAYW:3;\r
-               } BIT;\r
-       } RWKAR;\r
-       char           wk10[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ENB:1;\r
-                       unsigned char :1;\r
-                       unsigned char DATE10:2;\r
-                       unsigned char DATE1:4;\r
-               } BIT;\r
-       } RDAYAR;\r
-       char           wk11[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ENB:1;\r
-                       unsigned char :2;\r
-                       unsigned char MON10:1;\r
-                       unsigned char MON1:4;\r
-               } BIT;\r
-       } RMONAR;\r
-       char           wk12[1];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :8;\r
-                       unsigned short YR10:4;\r
-                       unsigned short YR1:4;\r
-               } BIT;\r
-       } RYRAR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ENB:1;\r
-               } BIT;\r
-       } RYRAREN;\r
-       char           wk13[3];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char PES:4;\r
-                       unsigned char :1;\r
-                       unsigned char PIE:1;\r
-                       unsigned char CIE:1;\r
-                       unsigned char AIE:1;\r
-               } BIT;\r
-       } RCR1;\r
-       char           wk14[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char HR24:1;\r
-                       unsigned char AADJP:1;\r
-                       unsigned char AADJE:1;\r
-                       unsigned char RTCOE:1;\r
-                       unsigned char ADJ30:1;\r
-                       unsigned char RESET:1;\r
-                       unsigned char START:1;\r
-               } BIT;\r
-       } RCR2;\r
-       char           wk15[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char RTCEN:1;\r
-               } BIT;\r
-       } RCR3;\r
-       char           wk16[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char RCKSEL:1;\r
-               } BIT;\r
-       } RCR4;\r
-       char           wk17[1];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :15;\r
-                       unsigned short RFC:1;\r
-               } BIT;\r
-       } RFRH;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short RFC:16;\r
-               } BIT;\r
-       } RFRL;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char PMADJ:2;\r
-                       unsigned char ADJ:6;\r
-               } BIT;\r
-       } RADJ;\r
-       char           wk18[17];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TCEN:1;\r
-                       unsigned char :1;\r
-                       unsigned char TCNF:2;\r
-                       unsigned char :1;\r
-                       unsigned char TCST:1;\r
-                       unsigned char TCCT:2;\r
-               } BIT;\r
-       } RTCCR0;\r
-       char           wk19[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TCEN:1;\r
-                       unsigned char :1;\r
-                       unsigned char TCNF:2;\r
-                       unsigned char :1;\r
-                       unsigned char TCST:1;\r
-                       unsigned char TCCT:2;\r
-               } BIT;\r
-       } RTCCR1;\r
-       char           wk20[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TCEN:1;\r
-                       unsigned char :1;\r
-                       unsigned char TCNF:2;\r
-                       unsigned char :1;\r
-                       unsigned char TCST:1;\r
-                       unsigned char TCCT:2;\r
-               } BIT;\r
-       } RTCCR2;\r
-       char           wk21[13];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char SEC10:3;\r
-                       unsigned char SEC1:4;\r
-               } BIT;\r
-       } RSECCP0;\r
-       char           wk22[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char MIN10:3;\r
-                       unsigned char MIN1:4;\r
-               } BIT;\r
-       } RMINCP0;\r
-       char           wk23[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char PM:1;\r
-                       unsigned char HR10:2;\r
-                       unsigned char HR1:4;\r
-               } BIT;\r
-       } RHRCP0;\r
-       char           wk24[3];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char DATE10:3;\r
-                       unsigned char DATE1:4;\r
-               } BIT;\r
-       } RDAYCP0;\r
-       char           wk25[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char MON10:1;\r
-                       unsigned char MON1:4;\r
-               } BIT;\r
-       } RMONCP0;\r
-       char           wk26[5];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char SEC10:3;\r
-                       unsigned char SEC1:4;\r
-               } BIT;\r
-       } RSECCP1;\r
-       char           wk27[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char MIN10:3;\r
-                       unsigned char MIN1:4;\r
-               } BIT;\r
-       } RMINCP1;\r
-       char           wk28[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char PM:1;\r
-                       unsigned char HR10:2;\r
-                       unsigned char HR1:4;\r
-               } BIT;\r
-       } RHRCP1;\r
-       char           wk29[3];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char DATE10:3;\r
-                       unsigned char DATE1:4;\r
-               } BIT;\r
-       } RDAYCP1;\r
-       char           wk30[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char MON10:1;\r
-                       unsigned char MON1:4;\r
-               } BIT;\r
-       } RMONCP1;\r
-       char           wk31[5];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char SEC10:3;\r
-                       unsigned char SEC1:4;\r
-               } BIT;\r
-       } RSECCP2;\r
-       char           wk32[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char MIN10:3;\r
-                       unsigned char MIN1:4;\r
-               } BIT;\r
-       } RMINCP2;\r
-       char           wk33[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char PM:1;\r
-                       unsigned char HR10:2;\r
-                       unsigned char HR1:4;\r
-               } BIT;\r
-       } RHRCP2;\r
-       char           wk34[3];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char DATE10:3;\r
-                       unsigned char DATE1:4;\r
-               } BIT;\r
-       } RDAYCP2;\r
-       char           wk35[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char MON10:1;\r
-                       unsigned char MON1:4;\r
-               } BIT;\r
-       } RMONCP2;\r
-};\r
-\r
-struct st_s12ad {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ADST:1;\r
-                       unsigned char ADCS:1;\r
-                       unsigned char :1;\r
-                       unsigned char ADIE:1;\r
-                       unsigned char CKS:2;\r
-                       unsigned char TRGE:1;\r
-                       unsigned char EXTRG:1;\r
-               } BIT;\r
-       } ADCSR;\r
-       char           wk0[3];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short ANS0:16;\r
-               } BIT;\r
-       } ADANS0;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :11;\r
-                       unsigned short ANS1:5;\r
-               } BIT;\r
-       } ADANS1;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short ADS0:16;\r
-               } BIT;\r
-       } ADADS0;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :11;\r
-                       unsigned short ADS1:5;\r
-               } BIT;\r
-       } ADADS1;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :6;\r
-                       unsigned char ADC:2;\r
-               } BIT;\r
-       } ADADC;\r
-       char           wk1[1];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short ADRFMT:1;\r
-                       unsigned short :9;\r
-                       unsigned short ACE:1;\r
-               } BIT;\r
-       } ADCER;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :4;\r
-                       unsigned char ADSTRS:4;\r
-               } BIT;\r
-       } ADSTRGR;\r
-       char           wk2[1];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :6;\r
-                       unsigned short OCS:1;\r
-                       unsigned short TSS:1;\r
-                       unsigned short :6;\r
-                       unsigned short OCSAD:1;\r
-                       unsigned short TSSAD:1;\r
-               } BIT;\r
-       } ADEXICR;\r
-       char           wk3[6];\r
-       unsigned short ADTSDR;\r
-       unsigned short ADOCDR;\r
-       char           wk4[2];\r
-       unsigned short ADDR0;\r
-       unsigned short ADDR1;\r
-       unsigned short ADDR2;\r
-       unsigned short ADDR3;\r
-       unsigned short ADDR4;\r
-       unsigned short ADDR5;\r
-       unsigned short ADDR6;\r
-       unsigned short ADDR7;\r
-       unsigned short ADDR8;\r
-       unsigned short ADDR9;\r
-       unsigned short ADDR10;\r
-       unsigned short ADDR11;\r
-       unsigned short ADDR12;\r
-       unsigned short ADDR13;\r
-       unsigned short ADDR14;\r
-       unsigned short ADDR15;\r
-       unsigned short ADDR16;\r
-       unsigned short ADDR17;\r
-       unsigned short ADDR18;\r
-       unsigned short ADDR19;\r
-       unsigned short ADDR20;\r
-       char           wk5[38];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short SST2:8;\r
-               } BIT;\r
-       } ADSSTR23;\r
-};\r
-\r
-struct st_sci0 {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char CM:1;\r
-                       unsigned char CHR:1;\r
-                       unsigned char PE:1;\r
-                       unsigned char PM:1;\r
-                       unsigned char STOP:1;\r
-                       unsigned char MP:1;\r
-                       unsigned char CKS:2;\r
-               } BIT;\r
-       } SMR;\r
-       unsigned char  BRR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TIE:1;\r
-                       unsigned char RIE:1;\r
-                       unsigned char TE:1;\r
-                       unsigned char RE:1;\r
-                       unsigned char MPIE:1;\r
-                       unsigned char TEIE:1;\r
-                       unsigned char CKE:2;\r
-               } BIT;\r
-       } SCR;\r
-       unsigned char  TDR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char ORER:1;\r
-                       unsigned char FER:1;\r
-                       unsigned char PER:1;\r
-                       unsigned char TEND:1;\r
-                       unsigned char MPB:1;\r
-                       unsigned char MPBT:1;\r
-               } BIT;\r
-       } SSR;\r
-       unsigned char  RDR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char BCP2:1;\r
-                       unsigned char :3;\r
-                       unsigned char SDIR:1;\r
-                       unsigned char SINV:1;\r
-                       unsigned char :1;\r
-                       unsigned char SMIF:1;\r
-               } BIT;\r
-       } SCMR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char NFEN:1;\r
-                       unsigned char ABCS:1;\r
-                       unsigned char :3;\r
-                       unsigned char ACS0:1;\r
-               } BIT;\r
-       } SEMR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :5;\r
-                       unsigned char NFCS:3;\r
-               } BIT;\r
-       } SNFR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char IICDL:5;\r
-                       unsigned char :2;\r
-                       unsigned char IICM:1;\r
-               } BIT;\r
-       } SIMR1;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char IICACKT:1;\r
-                       unsigned char :3;\r
-                       unsigned char IICCSC:1;\r
-                       unsigned char IICINTM:1;\r
-               } BIT;\r
-       } SIMR2;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char IICSCLS:2;\r
-                       unsigned char IICSDAS:2;\r
-                       unsigned char IICSTIF:1;\r
-                       unsigned char IICSTPREQ:1;\r
-                       unsigned char IICRSTAREQ:1;\r
-                       unsigned char IICSTAREQ:1;\r
-               } BIT;\r
-       } SIMR3;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char IICACKR:1;\r
-               } BIT;\r
-       } SISR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char CKPH:1;\r
-                       unsigned char CKPOL:1;\r
-                       unsigned char :1;\r
-                       unsigned char MFF:1;\r
-                       unsigned char :1;\r
-                       unsigned char MSS:1;\r
-                       unsigned char CTSE:1;\r
-                       unsigned char SSE:1;\r
-               } BIT;\r
-       } SPMR;\r
-};\r
-\r
-struct st_sci7 {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char CM:1;\r
-                       unsigned char CHR:1;\r
-                       unsigned char PE:1;\r
-                       unsigned char PM:1;\r
-                       unsigned char STOP:1;\r
-                       unsigned char MP:1;\r
-                       unsigned char CKS:2;\r
-               } BIT;\r
-       } SMR;\r
-       unsigned char  BRR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TIE:1;\r
-                       unsigned char RIE:1;\r
-                       unsigned char TE:1;\r
-                       unsigned char RE:1;\r
-                       unsigned char MPIE:1;\r
-                       unsigned char TEIE:1;\r
-                       unsigned char CKE:2;\r
-               } BIT;\r
-       } SCR;\r
-       unsigned char  TDR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char ORER:1;\r
-                       unsigned char FER:1;\r
-                       unsigned char PER:1;\r
-                       unsigned char TEND:1;\r
-                       unsigned char MPB:1;\r
-                       unsigned char MPBT:1;\r
-               } BIT;\r
-       } SSR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :6;\r
-                       unsigned char MPB:1;\r
-                       unsigned char MPBT:1;\r
-               } BIT;\r
-       } RDR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char BCP2:1;\r
-                       unsigned char :3;\r
-                       unsigned char SDIR:1;\r
-                       unsigned char SINV:1;\r
-                       unsigned char :1;\r
-                       unsigned char SMIF:1;\r
-               } BIT;\r
-       } SCMR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char NFEN:1;\r
-                       unsigned char ABCS:1;\r
-                       unsigned char :3;\r
-                       unsigned char ACS0:1;\r
-               } BIT;\r
-       } SEMR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :5;\r
-                       unsigned char NFCS:3;\r
-               } BIT;\r
-       } SNFR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char IICDL:5;\r
-                       unsigned char :2;\r
-                       unsigned char IICM:1;\r
-               } BIT;\r
-       } SIMR1;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char IICACKT:1;\r
-                       unsigned char :3;\r
-                       unsigned char IICCSC:1;\r
-                       unsigned char IICINTM:1;\r
-               } BIT;\r
-       } SIMR2;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char IICSCLS:2;\r
-                       unsigned char IICSDAS:2;\r
-                       unsigned char IICSTIF:1;\r
-                       unsigned char IICSTPREQ:1;\r
-                       unsigned char IICRSTAREQ:1;\r
-                       unsigned char IICSTAREQ:1;\r
-               } BIT;\r
-       } SIMR3;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char IICACKR:1;\r
-               } BIT;\r
-       } SISR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char CKPH:1;\r
-                       unsigned char CKPOL:1;\r
-                       unsigned char :1;\r
-                       unsigned char MFF:1;\r
-                       unsigned char :1;\r
-                       unsigned char MSS:1;\r
-                       unsigned char CTSE:1;\r
-                       unsigned char SSE:1;\r
-               } BIT;\r
-       } SPMR;\r
-};\r
-\r
-struct st_sci12 {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char CM:1;\r
-                       unsigned char CHR:1;\r
-                       unsigned char PE:1;\r
-                       unsigned char PM:1;\r
-                       unsigned char STOP:1;\r
-                       unsigned char MP:1;\r
-                       unsigned char CKS:2;\r
-               } BIT;\r
-       } SMR;\r
-       unsigned char  BRR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TIE:1;\r
-                       unsigned char RIE:1;\r
-                       unsigned char TE:1;\r
-                       unsigned char RE:1;\r
-                       unsigned char MPIE:1;\r
-                       unsigned char TEIE:1;\r
-                       unsigned char CKE:2;\r
-               } BIT;\r
-       } SCR;\r
-       unsigned char  TDR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char ORER:1;\r
-                       unsigned char FER:1;\r
-                       unsigned char PER:1;\r
-                       unsigned char TEND:1;\r
-                       unsigned char MPB:1;\r
-                       unsigned char MPBT:1;\r
-               } BIT;\r
-       } SSR;\r
-       unsigned char  RDR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char BCP2:1;\r
-                       unsigned char :3;\r
-                       unsigned char SDIR:1;\r
-                       unsigned char SINV:1;\r
-                       unsigned char :1;\r
-                       unsigned char SMIF:1;\r
-               } BIT;\r
-       } SCMR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char NFEN:1;\r
-                       unsigned char ABCS:1;\r
-                       unsigned char :3;\r
-                       unsigned char ACS0:1;\r
-               } BIT;\r
-       } SEMR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :5;\r
-                       unsigned char NFCS:3;\r
-               } BIT;\r
-       } SNFR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char IICDL:5;\r
-                       unsigned char :2;\r
-                       unsigned char IICM:1;\r
-               } BIT;\r
-       } SIMR1;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char IICACKT:1;\r
-                       unsigned char :3;\r
-                       unsigned char IICCSC:1;\r
-                       unsigned char IICINTM:1;\r
-               } BIT;\r
-       } SIMR2;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char IICSCLS:2;\r
-                       unsigned char IICSDAS:2;\r
-                       unsigned char IICSTIF:1;\r
-                       unsigned char IICSTPREQ:1;\r
-                       unsigned char IICRSTAREQ:1;\r
-                       unsigned char IICSTAREQ:1;\r
-               } BIT;\r
-       } SIMR3;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char IICACKR:1;\r
-               } BIT;\r
-       } SISR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char CKPH:1;\r
-                       unsigned char CKPOL:1;\r
-                       unsigned char :1;\r
-                       unsigned char MFF:1;\r
-                       unsigned char :1;\r
-                       unsigned char MSS:1;\r
-                       unsigned char CTSE:1;\r
-                       unsigned char SSE:1;\r
-               } BIT;\r
-       } SPMR;\r
-       char           wk0[18];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char ESME:1;\r
-               } BIT;\r
-       } ESMER;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :4;\r
-                       unsigned char BRME:1;\r
-                       unsigned char RXDSF:1;\r
-                       unsigned char SFSF:1;\r
-               } BIT;\r
-       } CR0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char PIBS:3;\r
-                       unsigned char PIBE:1;\r
-                       unsigned char CF1DS:2;\r
-                       unsigned char CF0RE:1;\r
-                       unsigned char BFE:1;\r
-               } BIT;\r
-       } CR1;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char RTS:2;\r
-                       unsigned char BCCS:2;\r
-                       unsigned char :1;\r
-                       unsigned char DFCS:3;\r
-               } BIT;\r
-       } CR2;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char SDST:1;\r
-               } BIT;\r
-       } CR3;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char SHARPS:1;\r
-                       unsigned char :2;\r
-                       unsigned char RXDXPS:1;\r
-                       unsigned char TXDXPS:1;\r
-               } BIT;\r
-       } PCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char AEDIE:1;\r
-                       unsigned char BCDIE:1;\r
-                       unsigned char PIBDIE:1;\r
-                       unsigned char CF1MIE:1;\r
-                       unsigned char CF0MIE:1;\r
-                       unsigned char BFDIE:1;\r
-               } BIT;\r
-       } ICR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char AEDF:1;\r
-                       unsigned char BCDF:1;\r
-                       unsigned char PIBDF:1;\r
-                       unsigned char CF1MF:1;\r
-                       unsigned char CF0MF:1;\r
-                       unsigned char BFDF:1;\r
-               } BIT;\r
-       } STR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char AEDCL:1;\r
-                       unsigned char BCDCL:1;\r
-                       unsigned char PIBDCL:1;\r
-                       unsigned char CF1MCL:1;\r
-                       unsigned char CF0MCL:1;\r
-                       unsigned char BFDCL:1;\r
-               } BIT;\r
-       } STCR;\r
-       unsigned char  CF0DR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char CF0CE7:1;\r
-                       unsigned char CF0CE6:1;\r
-                       unsigned char CF0CE5:1;\r
-                       unsigned char CF0CE4:1;\r
-                       unsigned char CF0CE3:1;\r
-                       unsigned char CF0CE2:1;\r
-                       unsigned char CF0CE1:1;\r
-                       unsigned char CF0CE0:1;\r
-               } BIT;\r
-       } CF0CR;\r
-       unsigned char  CF0RR;\r
-       unsigned char  PCF1DR;\r
-       unsigned char  SCF1DR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char CF1CE7:1;\r
-                       unsigned char CF1CE6:1;\r
-                       unsigned char CF1CE5:1;\r
-                       unsigned char CF1CE4:1;\r
-                       unsigned char CF1CE3:1;\r
-                       unsigned char CF1CE2:1;\r
-                       unsigned char CF1CE1:1;\r
-                       unsigned char CF1CE0:1;\r
-               } BIT;\r
-       } CF1CR;\r
-       unsigned char  CF1RR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char TCST:1;\r
-               } BIT;\r
-       } TCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char TCSS:3;\r
-                       unsigned char TWRC:1;\r
-                       unsigned char :1;\r
-                       unsigned char TOMS:2;\r
-               } BIT;\r
-       } TMR;\r
-       unsigned char  TPRE;\r
-       unsigned char  TCNT;\r
-};\r
-\r
-struct st_smci0 {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char GM:1;\r
-                       unsigned char BCLK:1;\r
-                       unsigned char PE:1;\r
-                       unsigned char PM:1;\r
-                       unsigned char BCP:2;\r
-                       unsigned char CKS:2;\r
-               } BIT;\r
-       } SMR;\r
-       unsigned char  BRR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TIE:1;\r
-                       unsigned char RIE:1;\r
-                       unsigned char TE:1;\r
-                       unsigned char RE:1;\r
-                       unsigned char MPIE:1;\r
-                       unsigned char TEIE:1;\r
-                       unsigned char CKE:2;\r
-               } BIT;\r
-       } SCR;\r
-       unsigned char  TDR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char ORER:1;\r
-                       unsigned char ERS:1;\r
-                       unsigned char PER:1;\r
-                       unsigned char TEND:1;\r
-                       unsigned char MPB:1;\r
-                       unsigned char MPBT:1;\r
-               } BIT;\r
-       } SSR;\r
-       unsigned char  RDR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char BCP2:1;\r
-                       unsigned char :3;\r
-                       unsigned char SDIR:1;\r
-                       unsigned char SINV:1;\r
-                       unsigned char :1;\r
-                       unsigned char SMIF:1;\r
-               } BIT;\r
-       } SCMR;\r
-};\r
-\r
-struct st_smci7 {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char GM:1;\r
-                       unsigned char BCLK:1;\r
-                       unsigned char PE:1;\r
-                       unsigned char PM:1;\r
-                       unsigned char BCP:2;\r
-                       unsigned char CKS:2;\r
-               } BIT;\r
-       } SMR;\r
-       unsigned char  BRR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TIE:1;\r
-                       unsigned char RIE:1;\r
-                       unsigned char TE:1;\r
-                       unsigned char RE:1;\r
-                       unsigned char MPIE:1;\r
-                       unsigned char TEIE:1;\r
-                       unsigned char CKE:2;\r
-               } BIT;\r
-       } SCR;\r
-       unsigned char  TDR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char ORER:1;\r
-                       unsigned char ERS:1;\r
-                       unsigned char PER:1;\r
-                       unsigned char TEND:1;\r
-               } BIT;\r
-       } SSR;\r
-       unsigned char  RDR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char BCP2:1;\r
-                       unsigned char :3;\r
-                       unsigned char SDIR:1;\r
-                       unsigned char SINV:1;\r
-                       unsigned char :1;\r
-                       unsigned char SMIF:1;\r
-               } BIT;\r
-       } SCMR;\r
-};\r
-\r
-struct st_system {\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :15;\r
-                       unsigned short MD:1;\r
-               } BIT;\r
-       } MDMONR;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :10;\r
-                       unsigned short UBTS:1;\r
-                       unsigned short BOTS:1;\r
-                       unsigned short :2;\r
-                       unsigned short EXB:1;\r
-                       unsigned short IROM:1;\r
-               } BIT;\r
-       } MDSR;\r
-       char           wk0[2];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short KEY:8;\r
-                       unsigned short :6;\r
-                       unsigned short EXBE:1;\r
-                       unsigned short ROME:1;\r
-               } BIT;\r
-       } SYSCR0;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :15;\r
-                       unsigned short RAME:1;\r
-               } BIT;\r
-       } SYSCR1;\r
-       char           wk1[2];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short SSBY:1;\r
-                       unsigned short OPE:1;\r
-               } BIT;\r
-       } SBYCR;\r
-       char           wk2[2];\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long ACSE:1;\r
-                       unsigned long :1;\r
-                       unsigned long MSTPA29:1;\r
-                       unsigned long MSTPA28:1;\r
-                       unsigned long MSTPA27:1;\r
-                       unsigned long :2;\r
-                       unsigned long MSTPA24:1;\r
-                       unsigned long MSTPA23:1;\r
-                       unsigned long :3;\r
-                       unsigned long MSTPA19:1;\r
-                       unsigned long :1;\r
-                       unsigned long MSTPA17:1;\r
-                       unsigned long :1;\r
-                       unsigned long MSTPA15:1;\r
-                       unsigned long MSTPA14:1;\r
-                       unsigned long MSTPA13:1;\r
-                       unsigned long MSTPA12:1;\r
-                       unsigned long MSTPA11:1;\r
-                       unsigned long MSTPA10:1;\r
-                       unsigned long MSTPA9:1;\r
-                       unsigned long :3;\r
-                       unsigned long MSTPA5:1;\r
-                       unsigned long MSTPA4:1;\r
-               } BIT;\r
-       } MSTPCRA;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long MSTPB31:1;\r
-                       unsigned long MSTPB30:1;\r
-                       unsigned long MSTPB29:1;\r
-                       unsigned long MSTPB28:1;\r
-                       unsigned long MSTPB27:1;\r
-                       unsigned long MSTPB26:1;\r
-                       unsigned long MSTPB25:1;\r
-                       unsigned long MSTPB24:1;\r
-                       unsigned long MSTPB23:1;\r
-                       unsigned long :1;\r
-                       unsigned long MSTPB21:1;\r
-                       unsigned long MSTPB20:1;\r
-                       unsigned long MSTPB19:1;\r
-                       unsigned long MSTPB18:1;\r
-                       unsigned long MSTPB17:1;\r
-                       unsigned long MSTPB16:1;\r
-                       unsigned long MSTPB15:1;\r
-                       unsigned long :6;\r
-                       unsigned long MSTPB8:1;\r
-                       unsigned long :3;\r
-                       unsigned long MSTPB4:1;\r
-                       unsigned long :1;\r
-                       unsigned long MSTPB2:1;\r
-                       unsigned long MSTPB1:1;\r
-                       unsigned long MSTPB0:1;\r
-               } BIT;\r
-       } MSTPCRB;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long :4;\r
-                       unsigned long MSTPC27:1;\r
-                       unsigned long MSTPC26:1;\r
-                       unsigned long MSTPC25:1;\r
-                       unsigned long MSTPC24:1;\r
-                       unsigned long :1;\r
-                       unsigned long MSTPC22:1;\r
-                       unsigned long :2;\r
-                       unsigned long MSTPC19:1;\r
-                       unsigned long MSTPC18:1;\r
-                       unsigned long MSTPC17:1;\r
-                       unsigned long MSTPC16:1;\r
-                       unsigned long :14;\r
-                       unsigned long MSTPC1:1;\r
-                       unsigned long MSTPC0:1;\r
-               } BIT;\r
-       } MSTPCRC;\r
-       char           wk3[4];\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long FCK:4;\r
-                       unsigned long ICK:4;\r
-                       unsigned long PSTOP1:1;\r
-                       unsigned long PSTOP0:1;\r
-                       unsigned long :2;\r
-                       unsigned long BCK:4;\r
-                       unsigned long PCKA:4;\r
-                       unsigned long PCKB:4;\r
-               } BIT;\r
-       } SCKCR;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :8;\r
-                       unsigned short UCK:4;\r
-                       unsigned short IEBCK:4;\r
-               } BIT;\r
-       } SCKCR2;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :5;\r
-                       unsigned short CKSEL:3;\r
-               } BIT;\r
-       } SCKCR3;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :2;\r
-                       unsigned short STC:6;\r
-                       unsigned short :6;\r
-                       unsigned short PLIDIV:2;\r
-               } BIT;\r
-       } PLLCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char PLLEN:1;\r
-               } BIT;\r
-       } PLLCR2;\r
-       char           wk4[5];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char BCLKDIV:1;\r
-               } BIT;\r
-       } BCKCR;\r
-       char           wk5[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char MOSTP:1;\r
-               } BIT;\r
-       } MOSCCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char SOSTP:1;\r
-               } BIT;\r
-       } SOSCCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char LCSTP:1;\r
-               } BIT;\r
-       } LOCOCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char ILCSTP:1;\r
-               } BIT;\r
-       } ILOCOCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char HCSTP:1;\r
-               } BIT;\r
-       } HOCOCR;\r
-       char           wk6[9];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char OSTDE:1;\r
-                       unsigned char :6;\r
-                       unsigned char OSTDIE:1;\r
-               } BIT;\r
-       } OSTDCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char OSTDF:1;\r
-               } BIT;\r
-       } OSTDSR;\r
-       char           wk7[94];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char OPCMTSF:1;\r
-                       unsigned char :1;\r
-                       unsigned char OPCM:3;\r
-               } BIT;\r
-       } OPCCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char RSTCKEN:1;\r
-                       unsigned char :4;\r
-                       unsigned char RSTCKSEL:3;\r
-               } BIT;\r
-       } RSTCKCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char MSTS:5;\r
-               } BIT;\r
-       } MOSCWTCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char SSTS:5;\r
-               } BIT;\r
-       } SOSCWTCR;\r
-       char           wk8[2];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char PSTS:5;\r
-               } BIT;\r
-       } PLLWTCR;\r
-       char           wk9[25];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :5;\r
-                       unsigned char SWRF:1;\r
-                       unsigned char WDTRF:1;\r
-                       unsigned char IWTDRF:1;\r
-               } BIT;\r
-       } RSTSR2;\r
-       char           wk10[1];\r
-       unsigned short SWRR;\r
-       char           wk11[28];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :6;\r
-                       unsigned char LVD1IDTSEL:2;\r
-               } BIT;\r
-       } LVD1CR1;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :6;\r
-                       unsigned char LVD1MON:1;\r
-                       unsigned char LVD1DET:1;\r
-               } BIT;\r
-       } LVD1SR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :6;\r
-                       unsigned char LVD2IDTSEL:2;\r
-               } BIT;\r
-       } LVD2CR1;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :6;\r
-                       unsigned char LVD2MON:1;\r
-                       unsigned char LVD2DET:1;\r
-               } BIT;\r
-       } LVD2SR;\r
-       char           wk12[794];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short PRKEY:8;\r
-                       unsigned short :4;\r
-                       unsigned short PRC3:1;\r
-                       unsigned short :1;\r
-                       unsigned short PRC1:1;\r
-                       unsigned short PRC0:1;\r
-               } BIT;\r
-       } PRCR;\r
-       char           wk13[48768];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char DPSBY:1;\r
-                       unsigned char IOKEEP:1;\r
-                       unsigned char :4;\r
-                       unsigned char DEEPCUT:2;\r
-               } BIT;\r
-       } DPSBYCR;\r
-       char           wk14[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char DIRQ7E:1;\r
-                       unsigned char DIRQ6E:1;\r
-                       unsigned char DIRQ5E:1;\r
-                       unsigned char DIRQ4E:1;\r
-                       unsigned char DIRQ3E:1;\r
-                       unsigned char DIRQ2E:1;\r
-                       unsigned char DIRQ1E:1;\r
-                       unsigned char DIRQ0E:1;\r
-               } BIT;\r
-       } DPSIER0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char DIRQ15E:1;\r
-                       unsigned char DIRQ14E:1;\r
-                       unsigned char DIRQ13E:1;\r
-                       unsigned char DIRQ12E:1;\r
-                       unsigned char DIRQ11E:1;\r
-                       unsigned char DIRQ10E:1;\r
-                       unsigned char DIRQ9E:1;\r
-                       unsigned char DIRQ8E:1;\r
-               } BIT;\r
-       } DPSIER1;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char DUSBIE:1;\r
-                       unsigned char DIICCIE:1;\r
-                       unsigned char DIICDIE:1;\r
-                       unsigned char DNMIE:1;\r
-                       unsigned char DRTCAIE:1;\r
-                       unsigned char DRTCIIE:1;\r
-                       unsigned char DLVD2IE:1;\r
-                       unsigned char DLVD1IE:1;\r
-               } BIT;\r
-       } DPSIER2;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char DCANIE:1;\r
-               } BIT;\r
-       } DPSIER3;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char DIRQ7F:1;\r
-                       unsigned char DIRQ6F:1;\r
-                       unsigned char DIRQ5F:1;\r
-                       unsigned char DIRQ4F:1;\r
-                       unsigned char DIRQ3F:1;\r
-                       unsigned char DIRQ2F:1;\r
-                       unsigned char DIRQ1F:1;\r
-                       unsigned char DIRQ0F:1;\r
-               } BIT;\r
-       } DPSIFR0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char DIRQ15F:1;\r
-                       unsigned char DIRQ14F:1;\r
-                       unsigned char DIRQ13F:1;\r
-                       unsigned char DIRQ12F:1;\r
-                       unsigned char DIRQ11F:1;\r
-                       unsigned char DIRQ10F:1;\r
-                       unsigned char DIRQ9F:1;\r
-                       unsigned char DIRQ8F:1;\r
-               } BIT;\r
-       } DPSIFR1;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char DUSBIF:1;\r
-                       unsigned char DIICCIF:1;\r
-                       unsigned char DIICDIF:1;\r
-                       unsigned char DNMIF:1;\r
-                       unsigned char DRTCAIF:1;\r
-                       unsigned char DRTCIIF:1;\r
-                       unsigned char DLVD2IF:1;\r
-                       unsigned char DLVD1IF:1;\r
-               } BIT;\r
-       } DPSIFR2;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char DCANIF:1;\r
-               } BIT;\r
-       } DPSIFR3;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char DIRQ7EG:1;\r
-                       unsigned char DIRQ6EG:1;\r
-                       unsigned char DIRQ5EG:1;\r
-                       unsigned char DIRQ4EG:1;\r
-                       unsigned char DIRQ3EG:1;\r
-                       unsigned char DIRQ2EG:1;\r
-                       unsigned char DIRQ1EG:1;\r
-                       unsigned char DIRQ0EG:1;\r
-               } BIT;\r
-       } DPSIEGR0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char DIRQ15EG:1;\r
-                       unsigned char DIRQ14EG:1;\r
-                       unsigned char DIRQ13EG:1;\r
-                       unsigned char DIRQ12EG:1;\r
-                       unsigned char DIRQ11EG:1;\r
-                       unsigned char DIRQ10EG:1;\r
-                       unsigned char DIRQ9EG:1;\r
-                       unsigned char DIRQ8EG:1;\r
-               } BIT;\r
-       } DPSIEGR1;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char DIICCEG:1;\r
-                       unsigned char DIICDEG:1;\r
-                       unsigned char DNMIEG:1;\r
-                       unsigned char :2;\r
-                       unsigned char DLVD2EG:1;\r
-                       unsigned char DLVD1EG:1;\r
-               } BIT;\r
-       } DPSIEGR2;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char DCANIEG:1;\r
-               } BIT;\r
-       } DPSIEGR3;\r
-       char           wk15[2];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char DPSRSTF:1;\r
-                       unsigned char :3;\r
-                       unsigned char LVD2RF:1;\r
-                       unsigned char LVD1RF:1;\r
-                       unsigned char LVD0RF:1;\r
-                       unsigned char PORF:1;\r
-               } BIT;\r
-       } RSTSR0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char CWSF:1;\r
-               } BIT;\r
-       } RSTSR1;\r
-       char           wk16[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char MOFXIN:1;\r
-               } BIT;\r
-       } MOFCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char HOCOPCNT:1;\r
-               } BIT;\r
-       } HOCOPCR;\r
-       char           wk17[2];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :1;\r
-                       unsigned char LVD2E:1;\r
-                       unsigned char LVD1E:1;\r
-               } BIT;\r
-       } LVCMPCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char LVD2LVL:4;\r
-                       unsigned char LVD1LVL:4;\r
-               } BIT;\r
-       } LVDLVLR;\r
-       char           wk18[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char LVD1RN:1;\r
-                       unsigned char LVD1RI:1;\r
-                       unsigned char LVD1FSAMP:2;\r
-                       unsigned char :1;\r
-                       unsigned char LVD1CMPE:1;\r
-                       unsigned char LVD1DFDIS:1;\r
-                       unsigned char LVD1RIE:1;\r
-               } BIT;\r
-       } LVD1CR0;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char LVD2RN:1;\r
-                       unsigned char LVD2RI:1;\r
-                       unsigned char LVD2FSAMP:2;\r
-                       unsigned char :1;\r
-                       unsigned char LVD2CMPE:1;\r
-                       unsigned char LVD2DFDIS:1;\r
-                       unsigned char LVD2RIE:1;\r
-               } BIT;\r
-       } LVD2CR0;\r
-       char           wk19[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char VBATTMNSEL:1;\r
-               } BIT;\r
-       } VBATTMNSELR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :7;\r
-                       unsigned char VBATTMON:1;\r
-               } BIT;\r
-       } VBATTMONR;\r
-       char           wk20[1];\r
-       unsigned char  DPSBKR[32];\r
-       char           wk21[1472];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :6;\r
-                       unsigned char SCK:2;\r
-               } BIT;\r
-       } SCK1;\r
-       char           wk22[15];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :6;\r
-                       unsigned char SCK:2;\r
-               } BIT;\r
-       } SCK2;\r
-};\r
-\r
-struct st_temps {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TSEN:1;\r
-                       unsigned char :2;\r
-                       unsigned char TSOE:1;\r
-               } BIT;\r
-       } TSCR;\r
-};\r
-\r
-struct st_tmr0 {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char CMIEB:1;\r
-                       unsigned char CMIEA:1;\r
-                       unsigned char OVIE:1;\r
-                       unsigned char CCLR:2;\r
-               } BIT;\r
-       } TCR;\r
-       char           wk0[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :3;\r
-                       unsigned char ADTE:1;\r
-                       unsigned char OSB:2;\r
-                       unsigned char OSA:2;\r
-               } BIT;\r
-       } TCSR;\r
-       char           wk1[1];\r
-       unsigned char  TCORA;\r
-       char           wk2[1];\r
-       unsigned char  TCORB;\r
-       char           wk3[1];\r
-       unsigned char  TCNT;\r
-       char           wk4[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TMRIS:1;\r
-                       unsigned char :2;\r
-                       unsigned char CSS:2;\r
-                       unsigned char CKS:3;\r
-               } BIT;\r
-       } TCCR;\r
-};\r
-\r
-struct st_tmr1 {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char CMIEB:1;\r
-                       unsigned char CMIEA:1;\r
-                       unsigned char OVIE:1;\r
-                       unsigned char CCLR:2;\r
-               } BIT;\r
-       } TCR;\r
-       char           wk0[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :4;\r
-                       unsigned char OSB:2;\r
-                       unsigned char OSA:2;\r
-               } BIT;\r
-       } TCSR;\r
-       char           wk1[1];\r
-       unsigned char  TCORA;\r
-       char           wk2[1];\r
-       unsigned char  TCORB;\r
-       char           wk3[1];\r
-       unsigned char  TCNT;\r
-       char           wk4[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TMRIS:1;\r
-                       unsigned char :2;\r
-                       unsigned char CSS:2;\r
-                       unsigned char CKS:3;\r
-               } BIT;\r
-       } TCCR;\r
-};\r
-\r
-struct st_tmr01 {\r
-       unsigned short TCORA;\r
-       unsigned short TCORB;\r
-       unsigned short TCNT;\r
-       unsigned short TCCR;\r
-};\r
-\r
-struct st_tpu0 {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char NFCS:2;\r
-                       unsigned char NFDEN:1;\r
-                       unsigned char NFCEN:1;\r
-                       unsigned char NFBEN:1;\r
-                       unsigned char NFAEN:1;\r
-               } BIT;\r
-       } NFCR;\r
-       char           wk0[7];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char CCLR:3;\r
-                       unsigned char CKEG:2;\r
-                       unsigned char TPSC:3;\r
-               } BIT;\r
-       } TCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ICSELD:1;\r
-                       unsigned char ICSELB:1;\r
-                       unsigned char BFB:1;\r
-                       unsigned char BFA:1;\r
-                       unsigned char MD:4;\r
-               } BIT;\r
-       } TMDR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char IOB:4;\r
-                       unsigned char IOA:4;\r
-               } BIT;\r
-       } TIORH;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char IOD:4;\r
-                       unsigned char IOC:4;\r
-               } BIT;\r
-       } TIORL;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TTGE:1;\r
-                       unsigned char :1;\r
-                       unsigned char TCIEU:1;\r
-                       unsigned char TCIEV:1;\r
-                       unsigned char TGIED:1;\r
-                       unsigned char TGIEC:1;\r
-                       unsigned char TGIEB:1;\r
-                       unsigned char TGIEA:1;\r
-               } BIT;\r
-       } TIER;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TCFD:1;\r
-                       unsigned char :1;\r
-                       unsigned char TCFU:1;\r
-                       unsigned char TCFV:1;\r
-                       unsigned char TGFD:1;\r
-                       unsigned char TGFC:1;\r
-                       unsigned char TGFB:1;\r
-                       unsigned char TGFA:1;\r
-               } BIT;\r
-       } TSR;\r
-       unsigned short TCNT;\r
-       unsigned short TGRA;\r
-       unsigned short TGRB;\r
-       unsigned short TGRC;\r
-       unsigned short TGRD;\r
-};\r
-\r
-struct st_tpu1 {\r
-       char           wk0[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char NFCS:2;\r
-                       unsigned char NFDEN:1;\r
-                       unsigned char NFCEN:1;\r
-                       unsigned char NFBEN:1;\r
-                       unsigned char NFAEN:1;\r
-               } BIT;\r
-       } NFCR;\r
-       char           wk1[22];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char CCLR:3;\r
-                       unsigned char CKEG:2;\r
-                       unsigned char TPSC:3;\r
-               } BIT;\r
-       } TCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ICSELD:1;\r
-                       unsigned char ICSELB:1;\r
-                       unsigned char BFB:1;\r
-                       unsigned char BFA:1;\r
-                       unsigned char MD:4;\r
-               } BIT;\r
-       } TMDR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char IOB:4;\r
-                       unsigned char IOA:4;\r
-               } BIT;\r
-       } TIOR;\r
-       char           wk2[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TTGE:1;\r
-                       unsigned char :1;\r
-                       unsigned char TCIEU:1;\r
-                       unsigned char TCIEV:1;\r
-                       unsigned char TGIED:1;\r
-                       unsigned char TGIEC:1;\r
-                       unsigned char TGIEB:1;\r
-                       unsigned char TGIEA:1;\r
-               } BIT;\r
-       } TIER;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TCFD:1;\r
-                       unsigned char :1;\r
-                       unsigned char TCFU:1;\r
-                       unsigned char TCFV:1;\r
-                       unsigned char TGFD:1;\r
-                       unsigned char TGFC:1;\r
-                       unsigned char TGFB:1;\r
-                       unsigned char TGFA:1;\r
-               } BIT;\r
-       } TSR;\r
-       unsigned short TCNT;\r
-       unsigned short TGRA;\r
-       unsigned short TGRB;\r
-};\r
-\r
-struct st_tpu2 {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char NFCS:2;\r
-                       unsigned char NFDEN:1;\r
-                       unsigned char NFCEN:1;\r
-                       unsigned char NFBEN:1;\r
-                       unsigned char NFAEN:1;\r
-               } BIT;\r
-       } NFCR;\r
-       char           wk0[37];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char CCLR:3;\r
-                       unsigned char CKEG:2;\r
-                       unsigned char TPSC:3;\r
-               } BIT;\r
-       } TCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ICSELD:1;\r
-                       unsigned char ICSELB:1;\r
-                       unsigned char BFB:1;\r
-                       unsigned char BFA:1;\r
-                       unsigned char MD:4;\r
-               } BIT;\r
-       } TMDR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char IOB:4;\r
-                       unsigned char IOA:4;\r
-               } BIT;\r
-       } TIOR;\r
-       char           wk1[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TTGE:1;\r
-                       unsigned char :1;\r
-                       unsigned char TCIEU:1;\r
-                       unsigned char TCIEV:1;\r
-                       unsigned char TGIED:1;\r
-                       unsigned char TGIEC:1;\r
-                       unsigned char TGIEB:1;\r
-                       unsigned char TGIEA:1;\r
-               } BIT;\r
-       } TIER;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TCFD:1;\r
-                       unsigned char :1;\r
-                       unsigned char TCFU:1;\r
-                       unsigned char TCFV:1;\r
-                       unsigned char TGFD:1;\r
-                       unsigned char TGFC:1;\r
-                       unsigned char TGFB:1;\r
-                       unsigned char TGFA:1;\r
-               } BIT;\r
-       } TSR;\r
-       unsigned short TCNT;\r
-       unsigned short TGRA;\r
-       unsigned short TGRB;\r
-};\r
-\r
-struct st_tpu3 {\r
-       char           wk0[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char NFCS:2;\r
-                       unsigned char NFDEN:1;\r
-                       unsigned char NFCEN:1;\r
-                       unsigned char NFBEN:1;\r
-                       unsigned char NFAEN:1;\r
-               } BIT;\r
-       } NFCR;\r
-       char           wk1[52];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char CCLR:3;\r
-                       unsigned char CKEG:2;\r
-                       unsigned char TPSC:3;\r
-               } BIT;\r
-       } TCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ICSELD:1;\r
-                       unsigned char ICSELB:1;\r
-                       unsigned char BFB:1;\r
-                       unsigned char BFA:1;\r
-                       unsigned char MD:4;\r
-               } BIT;\r
-       } TMDR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char IOB:4;\r
-                       unsigned char IOA:4;\r
-               } BIT;\r
-       } TIORH;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char IOD:4;\r
-                       unsigned char IOC:4;\r
-               } BIT;\r
-       } TIORL;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TTGE:1;\r
-                       unsigned char :1;\r
-                       unsigned char TCIEU:1;\r
-                       unsigned char TCIEV:1;\r
-                       unsigned char TGIED:1;\r
-                       unsigned char TGIEC:1;\r
-                       unsigned char TGIEB:1;\r
-                       unsigned char TGIEA:1;\r
-               } BIT;\r
-       } TIER;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TCFD:1;\r
-                       unsigned char :1;\r
-                       unsigned char TCFU:1;\r
-                       unsigned char TCFV:1;\r
-                       unsigned char TGFD:1;\r
-                       unsigned char TGFC:1;\r
-                       unsigned char TGFB:1;\r
-                       unsigned char TGFA:1;\r
-               } BIT;\r
-       } TSR;\r
-       unsigned short TCNT;\r
-       unsigned short TGRA;\r
-       unsigned short TGRB;\r
-       unsigned short TGRC;\r
-       unsigned short TGRD;\r
-};\r
-\r
-struct st_tpu4 {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char NFCS:2;\r
-                       unsigned char NFDEN:1;\r
-                       unsigned char NFCEN:1;\r
-                       unsigned char NFBEN:1;\r
-                       unsigned char NFAEN:1;\r
-               } BIT;\r
-       } NFCR;\r
-       char           wk0[67];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char CCLR:3;\r
-                       unsigned char CKEG:2;\r
-                       unsigned char TPSC:3;\r
-               } BIT;\r
-       } TCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ICSELD:1;\r
-                       unsigned char ICSELB:1;\r
-                       unsigned char BFB:1;\r
-                       unsigned char BFA:1;\r
-                       unsigned char MD:4;\r
-               } BIT;\r
-       } TMDR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char IOB:4;\r
-                       unsigned char IOA:4;\r
-               } BIT;\r
-       } TIOR;\r
-       char           wk1[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TTGE:1;\r
-                       unsigned char :1;\r
-                       unsigned char TCIEU:1;\r
-                       unsigned char TCIEV:1;\r
-                       unsigned char TGIED:1;\r
-                       unsigned char TGIEC:1;\r
-                       unsigned char TGIEB:1;\r
-                       unsigned char TGIEA:1;\r
-               } BIT;\r
-       } TIER;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TCFD:1;\r
-                       unsigned char :1;\r
-                       unsigned char TCFU:1;\r
-                       unsigned char TCFV:1;\r
-                       unsigned char TGFD:1;\r
-                       unsigned char TGFC:1;\r
-                       unsigned char TGFB:1;\r
-                       unsigned char TGFA:1;\r
-               } BIT;\r
-       } TSR;\r
-       unsigned short TCNT;\r
-       unsigned short TGRA;\r
-       unsigned short TGRB;\r
-};\r
-\r
-struct st_tpu5 {\r
-       char           wk0[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char NFCS:2;\r
-                       unsigned char NFDEN:1;\r
-                       unsigned char NFCEN:1;\r
-                       unsigned char NFBEN:1;\r
-                       unsigned char NFAEN:1;\r
-               } BIT;\r
-       } NFCR;\r
-       char           wk1[82];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char CCLR:3;\r
-                       unsigned char CKEG:2;\r
-                       unsigned char TPSC:3;\r
-               } BIT;\r
-       } TCR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char ICSELD:1;\r
-                       unsigned char ICSELB:1;\r
-                       unsigned char BFB:1;\r
-                       unsigned char BFA:1;\r
-                       unsigned char MD:4;\r
-               } BIT;\r
-       } TMDR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char IOB:4;\r
-                       unsigned char IOA:4;\r
-               } BIT;\r
-       } TIOR;\r
-       char           wk2[1];\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TTGE:1;\r
-                       unsigned char :1;\r
-                       unsigned char TCIEU:1;\r
-                       unsigned char TCIEV:1;\r
-                       unsigned char TGIED:1;\r
-                       unsigned char TGIEC:1;\r
-                       unsigned char TGIEB:1;\r
-                       unsigned char TGIEA:1;\r
-               } BIT;\r
-       } TIER;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char TCFD:1;\r
-                       unsigned char :1;\r
-                       unsigned char TCFU:1;\r
-                       unsigned char TCFV:1;\r
-                       unsigned char TGFD:1;\r
-                       unsigned char TGFC:1;\r
-                       unsigned char TGFB:1;\r
-                       unsigned char TGFA:1;\r
-               } BIT;\r
-       } TSR;\r
-       unsigned short TCNT;\r
-       unsigned short TGRA;\r
-       unsigned short TGRB;\r
-};\r
-\r
-struct st_tpua {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char CST5:1;\r
-                       unsigned char CST4:1;\r
-                       unsigned char CST3:1;\r
-                       unsigned char CST2:1;\r
-                       unsigned char CST1:1;\r
-                       unsigned char CST0:1;\r
-               } BIT;\r
-       } TSTR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char SYNC5:1;\r
-                       unsigned char SYNC4:1;\r
-                       unsigned char SYNC3:1;\r
-                       unsigned char SYNC2:1;\r
-                       unsigned char SYNC1:1;\r
-                       unsigned char SYNC0:1;\r
-               } BIT;\r
-       } TSYR;\r
-};\r
-\r
-struct st_tpub {\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char CST11:1;\r
-                       unsigned char CST10:1;\r
-                       unsigned char CST9:1;\r
-                       unsigned char CST8:1;\r
-                       unsigned char CST7:1;\r
-                       unsigned char CST6:1;\r
-               } BIT;\r
-       } TSTR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char :2;\r
-                       unsigned char SYNC11:1;\r
-                       unsigned char SYNC10:1;\r
-                       unsigned char SYNC9:1;\r
-                       unsigned char SYNC8:1;\r
-                       unsigned char SYNC7:1;\r
-                       unsigned char SYNC6:1;\r
-               } BIT;\r
-       } TSYR;\r
-};\r
-\r
-struct st_usb {\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long DVSTS1:1;\r
-                       unsigned long :5;\r
-                       unsigned long DM1:1;\r
-                       unsigned long DP1:1;\r
-                       unsigned long DVBSTS0:1;\r
-                       unsigned long :1;\r
-                       unsigned long DOVCB0:1;\r
-                       unsigned long DOVCA0:1;\r
-                       unsigned long :2;\r
-                       unsigned long DM0:1;\r
-                       unsigned long DP0:1;\r
-                       unsigned long :3;\r
-                       unsigned long FIXPHY1:1;\r
-                       unsigned long :3;\r
-                       unsigned long SRPC1:1;\r
-                       unsigned long :3;\r
-                       unsigned long FIXPHY0:1;\r
-                       unsigned long :3;\r
-                       unsigned long SRPC0:1;\r
-               } BIT;\r
-       } DPUSR0R;\r
-       union {\r
-               unsigned long LONG;\r
-               struct {\r
-                       unsigned long DVBINT1:1;\r
-                       unsigned long :5;\r
-                       unsigned long DMINT1:1;\r
-                       unsigned long DPINT1:1;\r
-                       unsigned long DVBINT0:1;\r
-                       unsigned long :1;\r
-                       unsigned long DOVRCRB0:1;\r
-                       unsigned long DOVRCRA0:1;\r
-                       unsigned long :2;\r
-                       unsigned long DMINT0:1;\r
-                       unsigned long DPINT0:1;\r
-                       unsigned long DVBSE1:1;\r
-                       unsigned long :5;\r
-                       unsigned long DMINTE1:1;\r
-                       unsigned long DPINTE1:1;\r
-                       unsigned long DVBSE0:1;\r
-                       unsigned long :1;\r
-                       unsigned long DOVRCRBE0:1;\r
-                       unsigned long DOVRCRAE0:1;\r
-                       unsigned long :2;\r
-                       unsigned long DMINTE0:1;\r
-                       unsigned long DPINTE0:1;\r
-               } BIT;\r
-       } DPUSR1R;\r
-};\r
-\r
-struct st_usb0 {\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :5;\r
-                       unsigned short SCKE:1;\r
-                       unsigned short :3;\r
-                       unsigned short DCFM:1;\r
-                       unsigned short DRPD:1;\r
-                       unsigned short DPRPU:1;\r
-                       unsigned short :3;\r
-                       unsigned short USBE:1;\r
-               } BIT;\r
-       } SYSCFG;\r
-       char           wk0[2];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short OVCMON:2;\r
-                       unsigned short :7;\r
-                       unsigned short HTACT:1;\r
-                       unsigned short :3;\r
-                       unsigned short IDMON:1;\r
-                       unsigned short LNST:2;\r
-               } BIT;\r
-       } SYSSTS0;\r
-       char           wk1[2];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :4;\r
-                       unsigned short HNPBTOA:1;\r
-                       unsigned short EXICEN:1;\r
-                       unsigned short VBUSEN:1;\r
-                       unsigned short WKUP:1;\r
-                       unsigned short RWUPE:1;\r
-                       unsigned short USBRST:1;\r
-                       unsigned short RESUME:1;\r
-                       unsigned short UACT:1;\r
-                       unsigned short :1;\r
-                       unsigned short RHST:3;\r
-               } BIT;\r
-       } DVSTCTR0;\r
-       char           wk2[10];\r
-       unsigned short CFIFO;\r
-       char           wk3[2];\r
-       unsigned short D0FIFO;\r
-       char           wk4[2];\r
-       unsigned short D1FIFO;\r
-       char           wk5[2];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short RCNT:1;\r
-                       unsigned short REW:1;\r
-                       unsigned short :3;\r
-                       unsigned short MBW:1;\r
-                       unsigned short :1;\r
-                       unsigned short BIGEND:1;\r
-                       unsigned short :2;\r
-                       unsigned short ISEL:1;\r
-                       unsigned short :1;\r
-                       unsigned short CURPIPE:4;\r
-               } BIT;\r
-       } CFIFOSEL;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short BVAL:1;\r
-                       unsigned short BCLR:1;\r
-                       unsigned short FRDY:1;\r
-                       unsigned short :4;\r
-                       unsigned short DTLN:9;\r
-               } BIT;\r
-       } CFIFOCTR;\r
-       char           wk6[4];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short RCNT:1;\r
-                       unsigned short REW:1;\r
-                       unsigned short DCLRM:1;\r
-                       unsigned short DREQE:1;\r
-                       unsigned short :1;\r
-                       unsigned short MBW:1;\r
-                       unsigned short :1;\r
-                       unsigned short BIGEND:1;\r
-                       unsigned short :4;\r
-                       unsigned short CURPIPE:4;\r
-               } BIT;\r
-       } D0FIFOSEL;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short BVAL:1;\r
-                       unsigned short BCLR:1;\r
-                       unsigned short FRDY:1;\r
-                       unsigned short :4;\r
-                       unsigned short DTLN:9;\r
-               } BIT;\r
-       } D0FIFOCTR;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short RCNT:1;\r
-                       unsigned short REW:1;\r
-                       unsigned short DCLRM:1;\r
-                       unsigned short DREQE:1;\r
-                       unsigned short :1;\r
-                       unsigned short MBW:1;\r
-                       unsigned short :1;\r
-                       unsigned short BIGEND:1;\r
-                       unsigned short :4;\r
-                       unsigned short CURPIPE:4;\r
-               } BIT;\r
-       } D1FIFOSEL;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short BVAL:1;\r
-                       unsigned short BCLR:1;\r
-                       unsigned short FRDY:1;\r
-                       unsigned short :4;\r
-                       unsigned short DTLN:9;\r
-               } BIT;\r
-       } D1FIFOCTR;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short VBSE:1;\r
-                       unsigned short RSME:1;\r
-                       unsigned short SOFE:1;\r
-                       unsigned short DVSE:1;\r
-                       unsigned short CTRE:1;\r
-                       unsigned short BEMPE:1;\r
-                       unsigned short NRDYE:1;\r
-                       unsigned short BRDYE:1;\r
-               } BIT;\r
-       } INTENB0;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short OVRCRE:1;\r
-                       unsigned short BCHGE:1;\r
-                       unsigned short :1;\r
-                       unsigned short DTCHE:1;\r
-                       unsigned short ATTCHE:1;\r
-                       unsigned short :4;\r
-                       unsigned short EOFERRE:1;\r
-                       unsigned short SIGNE:1;\r
-                       unsigned short SACKE:1;\r
-               } BIT;\r
-       } INTENB1;\r
-       char           wk7[2];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :6;\r
-                       unsigned short PIPE9BRDYE:1;\r
-                       unsigned short PIPE8BRDYE:1;\r
-                       unsigned short PIPE7BRDYE:1;\r
-                       unsigned short PIPE6BRDYE:1;\r
-                       unsigned short PIPE5BRDYE:1;\r
-                       unsigned short PIPE4BRDYE:1;\r
-                       unsigned short PIPE3BRDYE:1;\r
-                       unsigned short PIPE2BRDYE:1;\r
-                       unsigned short PIPE1BRDYE:1;\r
-                       unsigned short PIPE0BRDYE:1;\r
-               } BIT;\r
-       } BRDYENB;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :6;\r
-                       unsigned short PIPE9NRDYE:1;\r
-                       unsigned short PIPE8NRDYE:1;\r
-                       unsigned short PIPE7NRDYE:1;\r
-                       unsigned short PIPE6NRDYE:1;\r
-                       unsigned short PIPE5NRDYE:1;\r
-                       unsigned short PIPE4NRDYE:1;\r
-                       unsigned short PIPE3NRDYE:1;\r
-                       unsigned short PIPE2NRDYE:1;\r
-                       unsigned short PIPE1NRDYE:1;\r
-                       unsigned short PIPE0NRDYE:1;\r
-               } BIT;\r
-       } NRDYENB;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :6;\r
-                       unsigned short PIPE9BEMPE:1;\r
-                       unsigned short PIPE8BEMPE:1;\r
-                       unsigned short PIPE7BEMPE:1;\r
-                       unsigned short PIPE6BEMPE:1;\r
-                       unsigned short PIPE5BEMPE:1;\r
-                       unsigned short PIPE4BEMPE:1;\r
-                       unsigned short PIPE3BEMPE:1;\r
-                       unsigned short PIPE2BEMPE:1;\r
-                       unsigned short PIPE1BEMPE:1;\r
-                       unsigned short PIPE0BEMPE:1;\r
-               } BIT;\r
-       } BEMPENB;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :7;\r
-                       unsigned short TRNENSEL:1;\r
-                       unsigned short :1;\r
-                       unsigned short BRDYM:1;\r
-                       unsigned short :1;\r
-                       unsigned short EDGESTS:1;\r
-               } BIT;\r
-       } SOFCFG;\r
-       char           wk8[2];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short VBINT:1;\r
-                       unsigned short RESM:1;\r
-                       unsigned short SOFR:1;\r
-                       unsigned short DVST:1;\r
-                       unsigned short CTRT:1;\r
-                       unsigned short BEMP:1;\r
-                       unsigned short NRDY:1;\r
-                       unsigned short BRDY:1;\r
-                       unsigned short VBSTS:1;\r
-                       unsigned short DVSQ:3;\r
-                       unsigned short VALID:1;\r
-                       unsigned short CTSQ:3;\r
-               } BIT;\r
-       } INTSTS0;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short OVRCR:1;\r
-                       unsigned short BCHG:1;\r
-                       unsigned short :1;\r
-                       unsigned short DTCH:1;\r
-                       unsigned short ATTCH:1;\r
-                       unsigned short :4;\r
-                       unsigned short EOFERR:1;\r
-                       unsigned short SIGN:1;\r
-                       unsigned short SACK:1;\r
-               } BIT;\r
-       } INTSTS1;\r
-       char           wk9[2];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :6;\r
-                       unsigned short PIPE9BRDY:1;\r
-                       unsigned short PIPE8BRDY:1;\r
-                       unsigned short PIPE7BRDY:1;\r
-                       unsigned short PIPE6BRDY:1;\r
-                       unsigned short PIPE5BRDY:1;\r
-                       unsigned short PIPE4BRDY:1;\r
-                       unsigned short PIPE3BRDY:1;\r
-                       unsigned short PIPE2BRDY:1;\r
-                       unsigned short PIPE1BRDY:1;\r
-                       unsigned short PIPE0BRDY:1;\r
-               } BIT;\r
-       } BRDYSTS;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :6;\r
-                       unsigned short PIPE9NRDYE:1;\r
-                       unsigned short PIPE8NRDYE:1;\r
-                       unsigned short PIPE7NRDYE:1;\r
-                       unsigned short PIPE6NRDYE:1;\r
-                       unsigned short PIPE5NRDYE:1;\r
-                       unsigned short PIPE4NRDYE:1;\r
-                       unsigned short PIPE3NRDYE:1;\r
-                       unsigned short PIPE2NRDYE:1;\r
-                       unsigned short PIPE1NRDYE:1;\r
-                       unsigned short PIPE0NRDYE:1;\r
-               } BIT;\r
-       } NRDYSTS;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :6;\r
-                       unsigned short PIPE9BEMPE:1;\r
-                       unsigned short PIPE8BEMPE:1;\r
-                       unsigned short PIPE7BENP:1;\r
-                       unsigned short PIPE6BENP:1;\r
-                       unsigned short PIPE5BENP:1;\r
-                       unsigned short PIPE4BENP:1;\r
-                       unsigned short PIPE3BENP:1;\r
-                       unsigned short PIPE2BENP:1;\r
-                       unsigned short PIPE1BENP:1;\r
-                       unsigned short PIPE0BENP:1;\r
-               } BIT;\r
-       } BEMPSTS;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short OVRN:1;\r
-                       unsigned short CRCE:1;\r
-                       unsigned short :3;\r
-                       unsigned short FRNM:11;\r
-               } BIT;\r
-       } FRMNUM;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short DVCHG:1;\r
-               } BIT;\r
-       } DVCHGR;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :4;\r
-                       unsigned short STSRECOV:4;\r
-                       unsigned short :1;\r
-                       unsigned short USBADDR:7;\r
-               } BIT;\r
-       } USBADDR;\r
-       char           wk10[2];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short BREQUEST:8;\r
-                       unsigned short BMREQUESTTYPE:8;\r
-               } BIT;\r
-       } USBREQ;\r
-       unsigned short USBVAL;\r
-       unsigned short USBINDX;\r
-       unsigned short USBLENG;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :8;\r
-                       unsigned short SHTNAK:1;\r
-                       unsigned short :2;\r
-                       unsigned short DIR:1;\r
-               } BIT;\r
-       } DCPCFG;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short DEVSEL:4;\r
-                       unsigned short :5;\r
-                       unsigned short MXPS:7;\r
-               } BIT;\r
-       } DCPMAXP;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short BSTS:1;\r
-                       unsigned short SUREQ:1;\r
-                       unsigned short :2;\r
-                       unsigned short SUREQCLR:1;\r
-                       unsigned short :2;\r
-                       unsigned short SQCLR:1;\r
-                       unsigned short SQSET:1;\r
-                       unsigned short SQMON:1;\r
-                       unsigned short PBUSY:1;\r
-                       unsigned short :2;\r
-                       unsigned short CCPL:1;\r
-                       unsigned short PID:2;\r
-               } BIT;\r
-       } DCPCTR;\r
-       char           wk11[2];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :12;\r
-                       unsigned short PIPESEL:4;\r
-               } BIT;\r
-       } PIPESEL;\r
-       char           wk12[2];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short TYPE:2;\r
-                       unsigned short :3;\r
-                       unsigned short BFRE:1;\r
-                       unsigned short DBLB:1;\r
-                       unsigned short :1;\r
-                       unsigned short SHTNAK:1;\r
-                       unsigned short :2;\r
-                       unsigned short DIR:1;\r
-                       unsigned short EPNUM:4;\r
-               } BIT;\r
-       } PIPECFG;\r
-       char           wk13[2];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short DEVSEL:4;\r
-                       unsigned short :3;\r
-                       unsigned short MXPS:9;\r
-               } BIT;\r
-       } PIPEMAXP;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :3;\r
-                       unsigned short IFIS:1;\r
-                       unsigned short :9;\r
-                       unsigned short IITV:3;\r
-               } BIT;\r
-       } PIPEPERI;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short BSTS:1;\r
-                       unsigned short INBUFM:1;\r
-                       unsigned short :3;\r
-                       unsigned short ATREPM:1;\r
-                       unsigned short ACLRM:1;\r
-                       unsigned short SQCLR:1;\r
-                       unsigned short SQSET:1;\r
-                       unsigned short SQMON:1;\r
-                       unsigned short PBUSY:1;\r
-                       unsigned short :3;\r
-                       unsigned short PID:2;\r
-               } BIT;\r
-       } PIPE1CTR;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short BSTS:1;\r
-                       unsigned short INBUFM:1;\r
-                       unsigned short :3;\r
-                       unsigned short ATREPM:1;\r
-                       unsigned short ACLRM:1;\r
-                       unsigned short SQCLR:1;\r
-                       unsigned short SQSET:1;\r
-                       unsigned short SQMON:1;\r
-                       unsigned short PBUSY:1;\r
-                       unsigned short :3;\r
-                       unsigned short PID:2;\r
-               } BIT;\r
-       } PIPE2CTR;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short BSTS:1;\r
-                       unsigned short INBUFM:1;\r
-                       unsigned short :3;\r
-                       unsigned short ATREPM:1;\r
-                       unsigned short ACLRM:1;\r
-                       unsigned short SQCLR:1;\r
-                       unsigned short SQSET:1;\r
-                       unsigned short SQMON:1;\r
-                       unsigned short PBUSY:1;\r
-                       unsigned short :3;\r
-                       unsigned short PID:2;\r
-               } BIT;\r
-       } PIPE3CTR;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short BSTS:1;\r
-                       unsigned short INBUFM:1;\r
-                       unsigned short :3;\r
-                       unsigned short ATREPM:1;\r
-                       unsigned short ACLRM:1;\r
-                       unsigned short SQCLR:1;\r
-                       unsigned short SQSET:1;\r
-                       unsigned short SQMON:1;\r
-                       unsigned short PBUSY:1;\r
-                       unsigned short :3;\r
-                       unsigned short PID:2;\r
-               } BIT;\r
-       } PIPE4CTR;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short BSTS:1;\r
-                       unsigned short INBUFM:1;\r
-                       unsigned short :3;\r
-                       unsigned short ATREPM:1;\r
-                       unsigned short ACLRM:1;\r
-                       unsigned short SQCLR:1;\r
-                       unsigned short SQSET:1;\r
-                       unsigned short SQMON:1;\r
-                       unsigned short PBUSY:1;\r
-                       unsigned short :3;\r
-                       unsigned short PID:2;\r
-               } BIT;\r
-       } PIPE5CTR;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short BSTS:1;\r
-                       unsigned short :5;\r
-                       unsigned short ACLRM:1;\r
-                       unsigned short SQCLR:1;\r
-                       unsigned short SQSET:1;\r
-                       unsigned short SQMON:1;\r
-                       unsigned short PBUSY:1;\r
-                       unsigned short :3;\r
-                       unsigned short PID:2;\r
-               } BIT;\r
-       } PIPE6CTR;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short BSTS:1;\r
-                       unsigned short :5;\r
-                       unsigned short ACLRM:1;\r
-                       unsigned short SQCLR:1;\r
-                       unsigned short SQSET:1;\r
-                       unsigned short SQMON:1;\r
-                       unsigned short PBUSY:1;\r
-                       unsigned short :3;\r
-                       unsigned short PID:2;\r
-               } BIT;\r
-       } PIPE7CTR;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short BSTS:1;\r
-                       unsigned short :5;\r
-                       unsigned short ACLRM:1;\r
-                       unsigned short SQCLR:1;\r
-                       unsigned short SQSET:1;\r
-                       unsigned short SQMON:1;\r
-                       unsigned short PBUSY:1;\r
-                       unsigned short :3;\r
-                       unsigned short PID:2;\r
-               } BIT;\r
-       } PIPE8CTR;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short BSTS:1;\r
-                       unsigned short :5;\r
-                       unsigned short ACLRM:1;\r
-                       unsigned short SQCLR:1;\r
-                       unsigned short SQSET:1;\r
-                       unsigned short SQMON:1;\r
-                       unsigned short PBUSY:1;\r
-                       unsigned short :3;\r
-                       unsigned short PID:2;\r
-               } BIT;\r
-       } PIPE9CTR;\r
-       char           wk14[14];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :6;\r
-                       unsigned short TRENB:1;\r
-                       unsigned short TRCLR:1;\r
-               } BIT;\r
-       } PIPE1TRE;\r
-       unsigned short PIPE1TRN;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :6;\r
-                       unsigned short TRENB:1;\r
-                       unsigned short TRCLR:1;\r
-               } BIT;\r
-       } PIPE2TRE;\r
-       unsigned short PIPE2TRN;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :6;\r
-                       unsigned short TRENB:1;\r
-                       unsigned short TRCLR:1;\r
-               } BIT;\r
-       } PIPE3TRE;\r
-       unsigned short PIPE3TRN;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :6;\r
-                       unsigned short TRENB:1;\r
-                       unsigned short TRCLR:1;\r
-               } BIT;\r
-       } PIPE4TRE;\r
-       unsigned short PIPE4TRN;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :6;\r
-                       unsigned short TRENB:1;\r
-                       unsigned short TRCLR:1;\r
-               } BIT;\r
-       } PIPE5TRE;\r
-       unsigned short PIPE5TRN;\r
-       char           wk15[44];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :8;\r
-                       unsigned short USBSPD:2;\r
-               } BIT;\r
-       } DEVADD0;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :8;\r
-                       unsigned short USBSPD:2;\r
-               } BIT;\r
-       } DEVADD1;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :8;\r
-                       unsigned short USBSPD:2;\r
-               } BIT;\r
-       } DEVADD2;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :8;\r
-                       unsigned short USBSPD:2;\r
-               } BIT;\r
-       } DEVADD3;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :8;\r
-                       unsigned short USBSPD:2;\r
-               } BIT;\r
-       } DEVADD4;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :8;\r
-                       unsigned short USBSPD:2;\r
-               } BIT;\r
-       } DEVADD5;\r
-};\r
-\r
-struct st_usb1 {\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :5;\r
-                       unsigned short SCKE:1;\r
-                       unsigned short :3;\r
-                       unsigned short DCFM:1;\r
-                       unsigned short DRPD:1;\r
-                       unsigned short DPRPU:1;\r
-                       unsigned short :3;\r
-                       unsigned short USBE:1;\r
-               } BIT;\r
-       } SYSCFG;\r
-       char           wk0[2];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short OVCMON:2;\r
-                       unsigned short :7;\r
-                       unsigned short HTACT:1;\r
-                       unsigned short :3;\r
-                       unsigned short IDMON:1;\r
-                       unsigned short LNST:2;\r
-               } BIT;\r
-       } SYSSTS0;\r
-       char           wk1[2];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :4;\r
-                       unsigned short HNPBTOA:1;\r
-                       unsigned short EXICEN:1;\r
-                       unsigned short VBUSEN:1;\r
-                       unsigned short WKUP:1;\r
-                       unsigned short RWUPE:1;\r
-                       unsigned short USBRST:1;\r
-                       unsigned short RESUME:1;\r
-                       unsigned short UACT:1;\r
-                       unsigned short :1;\r
-                       unsigned short RHST:3;\r
-               } BIT;\r
-       } DVSTCTR0;\r
-       char           wk2[10];\r
-       unsigned short CFIFO;\r
-       char           wk3[2];\r
-       unsigned short D0FIFO;\r
-       char           wk4[2];\r
-       unsigned short D1FIFO;\r
-       char           wk5[2];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short RCNT:1;\r
-                       unsigned short REW:1;\r
-                       unsigned short :3;\r
-                       unsigned short MBW:1;\r
-                       unsigned short :1;\r
-                       unsigned short BIGEND:1;\r
-                       unsigned short :2;\r
-                       unsigned short ISEL:1;\r
-                       unsigned short :1;\r
-                       unsigned short CURPIPE:4;\r
-               } BIT;\r
-       } CFIFOSEL;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short BVAL:1;\r
-                       unsigned short BCLR:1;\r
-                       unsigned short FRDY:1;\r
-                       unsigned short :4;\r
-                       unsigned short DTLN:9;\r
-               } BIT;\r
-       } CFIFOCTR;\r
-       char           wk6[4];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short RCNT:1;\r
-                       unsigned short REW:1;\r
-                       unsigned short DCLRM:1;\r
-                       unsigned short DREQE:1;\r
-                       unsigned short :1;\r
-                       unsigned short MBW:1;\r
-                       unsigned short :1;\r
-                       unsigned short BIGEND:1;\r
-                       unsigned short :4;\r
-                       unsigned short CURPIPE:4;\r
-               } BIT;\r
-       } D0FIFOSEL;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short BVAL:1;\r
-                       unsigned short BCLR:1;\r
-                       unsigned short FRDY:1;\r
-                       unsigned short :4;\r
-                       unsigned short DTLN:9;\r
-               } BIT;\r
-       } D0FIFOCTR;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short RCNT:1;\r
-                       unsigned short REW:1;\r
-                       unsigned short DCLRM:1;\r
-                       unsigned short DREQE:1;\r
-                       unsigned short :1;\r
-                       unsigned short MBW:1;\r
-                       unsigned short :1;\r
-                       unsigned short BIGEND:1;\r
-                       unsigned short :4;\r
-                       unsigned short CURPIPE:4;\r
-               } BIT;\r
-       } D1FIFOSEL;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short BVAL:1;\r
-                       unsigned short BCLR:1;\r
-                       unsigned short FRDY:1;\r
-                       unsigned short :4;\r
-                       unsigned short DTLN:9;\r
-               } BIT;\r
-       } D1FIFOCTR;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short VBSE:1;\r
-                       unsigned short RSME:1;\r
-                       unsigned short SOFE:1;\r
-                       unsigned short DVSE:1;\r
-                       unsigned short CTRE:1;\r
-                       unsigned short BEMPE:1;\r
-                       unsigned short NRDYE:1;\r
-                       unsigned short BRDYE:1;\r
-               } BIT;\r
-       } INTENB0;\r
-       char           wk7[4];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :6;\r
-                       unsigned short PIPE9BRDYE:1;\r
-                       unsigned short PIPE8BRDYE:1;\r
-                       unsigned short PIPE7BRDYE:1;\r
-                       unsigned short PIPE6BRDYE:1;\r
-                       unsigned short PIPE5BRDYE:1;\r
-                       unsigned short PIPE4BRDYE:1;\r
-                       unsigned short PIPE3BRDYE:1;\r
-                       unsigned short PIPE2BRDYE:1;\r
-                       unsigned short PIPE1BRDYE:1;\r
-                       unsigned short PIPE0BRDYE:1;\r
-               } BIT;\r
-       } BRDYENB;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :6;\r
-                       unsigned short PIPE9NRDYE:1;\r
-                       unsigned short PIPE8NRDYE:1;\r
-                       unsigned short PIPE7NRDYE:1;\r
-                       unsigned short PIPE6NRDYE:1;\r
-                       unsigned short PIPE5NRDYE:1;\r
-                       unsigned short PIPE4NRDYE:1;\r
-                       unsigned short PIPE3NRDYE:1;\r
-                       unsigned short PIPE2NRDYE:1;\r
-                       unsigned short PIPE1NRDYE:1;\r
-                       unsigned short PIPE0NRDYE:1;\r
-               } BIT;\r
-       } NRDYENB;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :6;\r
-                       unsigned short PIPE9BEMPE:1;\r
-                       unsigned short PIPE8BEMPE:1;\r
-                       unsigned short PIPE7BEMPE:1;\r
-                       unsigned short PIPE6BEMPE:1;\r
-                       unsigned short PIPE5BEMPE:1;\r
-                       unsigned short PIPE4BEMPE:1;\r
-                       unsigned short PIPE3BEMPE:1;\r
-                       unsigned short PIPE2BEMPE:1;\r
-                       unsigned short PIPE1BEMPE:1;\r
-                       unsigned short PIPE0BEMPE:1;\r
-               } BIT;\r
-       } BEMPENB;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :9;\r
-                       unsigned short BRDYM:1;\r
-                       unsigned short :1;\r
-                       unsigned short EDGESTS:1;\r
-               } BIT;\r
-       } SOFCFG;\r
-       char           wk8[2];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short VBINT:1;\r
-                       unsigned short RESM:1;\r
-                       unsigned short SOFR:1;\r
-                       unsigned short DVST:1;\r
-                       unsigned short CTRT:1;\r
-                       unsigned short BEMP:1;\r
-                       unsigned short NRDY:1;\r
-                       unsigned short BRDY:1;\r
-                       unsigned short VBSTS:1;\r
-                       unsigned short DVSQ:3;\r
-                       unsigned short VALID:1;\r
-                       unsigned short CTSQ:3;\r
-               } BIT;\r
-       } INTSTS0;\r
-       char           wk9[4];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :6;\r
-                       unsigned short PIPE9BRDY:1;\r
-                       unsigned short PIPE8BRDY:1;\r
-                       unsigned short PIPE7BRDY:1;\r
-                       unsigned short PIPE6BRDY:1;\r
-                       unsigned short PIPE5BRDY:1;\r
-                       unsigned short PIPE4BRDY:1;\r
-                       unsigned short PIPE3BRDY:1;\r
-                       unsigned short PIPE2BRDY:1;\r
-                       unsigned short PIPE1BRDY:1;\r
-                       unsigned short PIPE0BRDY:1;\r
-               } BIT;\r
-       } BRDYSTS;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :6;\r
-                       unsigned short PIPE9NRDYE:1;\r
-                       unsigned short PIPE8NRDYE:1;\r
-                       unsigned short PIPE7NRDYE:1;\r
-                       unsigned short PIPE6NRDYE:1;\r
-                       unsigned short PIPE5NRDYE:1;\r
-                       unsigned short PIPE4NRDYE:1;\r
-                       unsigned short PIPE3NRDYE:1;\r
-                       unsigned short PIPE2NRDYE:1;\r
-                       unsigned short PIPE1NRDYE:1;\r
-                       unsigned short PIPE0NRDYE:1;\r
-               } BIT;\r
-       } NRDYSTS;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :6;\r
-                       unsigned short PIPE9BEMPE:1;\r
-                       unsigned short PIPE8BEMPE:1;\r
-                       unsigned short PIPE7BENP:1;\r
-                       unsigned short PIPE6BENP:1;\r
-                       unsigned short PIPE5BENP:1;\r
-                       unsigned short PIPE4BENP:1;\r
-                       unsigned short PIPE3BENP:1;\r
-                       unsigned short PIPE2BENP:1;\r
-                       unsigned short PIPE1BENP:1;\r
-                       unsigned short PIPE0BENP:1;\r
-               } BIT;\r
-       } BEMPSTS;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short OVRN:1;\r
-                       unsigned short CRCE:1;\r
-                       unsigned short :3;\r
-                       unsigned short FRNM:11;\r
-               } BIT;\r
-       } FRMNUM;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short DVCHG:1;\r
-               } BIT;\r
-       } DVCHGR;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :4;\r
-                       unsigned short STSRECOV:4;\r
-                       unsigned short :1;\r
-                       unsigned short USBADDR:7;\r
-               } BIT;\r
-       } USBADDR;\r
-       char           wk10[2];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short BREQUEST:8;\r
-                       unsigned short BMREQUESTTYPE:8;\r
-               } BIT;\r
-       } USBREQ;\r
-       unsigned short USBVAL;\r
-       unsigned short USBINDX;\r
-       unsigned short USBLENG;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :8;\r
-                       unsigned short SHTNAK:1;\r
-                       unsigned short :2;\r
-                       unsigned short DIR:1;\r
-               } BIT;\r
-       } DCPCFG;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short DEVSEL:4;\r
-                       unsigned short :5;\r
-                       unsigned short MXPS:7;\r
-               } BIT;\r
-       } DCPMAXP;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short BSTS:1;\r
-                       unsigned short SUREQ:1;\r
-                       unsigned short :2;\r
-                       unsigned short SUREQCLR:1;\r
-                       unsigned short :2;\r
-                       unsigned short SQCLR:1;\r
-                       unsigned short SQSET:1;\r
-                       unsigned short SQMON:1;\r
-                       unsigned short PBUSY:1;\r
-                       unsigned short :2;\r
-                       unsigned short CCPL:1;\r
-                       unsigned short PID:2;\r
-               } BIT;\r
-       } DCPCTR;\r
-       char           wk11[2];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :12;\r
-                       unsigned short PIPESEL:4;\r
-               } BIT;\r
-       } PIPESEL;\r
-       char           wk12[2];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short TYPE:2;\r
-                       unsigned short :3;\r
-                       unsigned short BFRE:1;\r
-                       unsigned short DBLB:1;\r
-                       unsigned short :1;\r
-                       unsigned short SHTNAK:1;\r
-                       unsigned short :2;\r
-                       unsigned short DIR:1;\r
-                       unsigned short EPNUM:4;\r
-               } BIT;\r
-       } PIPECFG;\r
-       char           wk13[2];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short DEVSEL:4;\r
-                       unsigned short :3;\r
-                       unsigned short MXPS:9;\r
-               } BIT;\r
-       } PIPEMAXP;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :3;\r
-                       unsigned short IFIS:1;\r
-                       unsigned short :9;\r
-                       unsigned short IITV:3;\r
-               } BIT;\r
-       } PIPEPERI;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short BSTS:1;\r
-                       unsigned short INBUFM:1;\r
-                       unsigned short :3;\r
-                       unsigned short ATREPM:1;\r
-                       unsigned short ACLRM:1;\r
-                       unsigned short SQCLR:1;\r
-                       unsigned short SQSET:1;\r
-                       unsigned short SQMON:1;\r
-                       unsigned short PBUSY:1;\r
-                       unsigned short :3;\r
-                       unsigned short PID:2;\r
-               } BIT;\r
-       } PIPE1CTR;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short BSTS:1;\r
-                       unsigned short INBUFM:1;\r
-                       unsigned short :3;\r
-                       unsigned short ATREPM:1;\r
-                       unsigned short ACLRM:1;\r
-                       unsigned short SQCLR:1;\r
-                       unsigned short SQSET:1;\r
-                       unsigned short SQMON:1;\r
-                       unsigned short PBUSY:1;\r
-                       unsigned short :3;\r
-                       unsigned short PID:2;\r
-               } BIT;\r
-       } PIPE2CTR;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short BSTS:1;\r
-                       unsigned short INBUFM:1;\r
-                       unsigned short :3;\r
-                       unsigned short ATREPM:1;\r
-                       unsigned short ACLRM:1;\r
-                       unsigned short SQCLR:1;\r
-                       unsigned short SQSET:1;\r
-                       unsigned short SQMON:1;\r
-                       unsigned short PBUSY:1;\r
-                       unsigned short :3;\r
-                       unsigned short PID:2;\r
-               } BIT;\r
-       } PIPE3CTR;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short BSTS:1;\r
-                       unsigned short INBUFM:1;\r
-                       unsigned short :3;\r
-                       unsigned short ATREPM:1;\r
-                       unsigned short ACLRM:1;\r
-                       unsigned short SQCLR:1;\r
-                       unsigned short SQSET:1;\r
-                       unsigned short SQMON:1;\r
-                       unsigned short PBUSY:1;\r
-                       unsigned short :3;\r
-                       unsigned short PID:2;\r
-               } BIT;\r
-       } PIPE4CTR;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short BSTS:1;\r
-                       unsigned short INBUFM:1;\r
-                       unsigned short :3;\r
-                       unsigned short ATREPM:1;\r
-                       unsigned short ACLRM:1;\r
-                       unsigned short SQCLR:1;\r
-                       unsigned short SQSET:1;\r
-                       unsigned short SQMON:1;\r
-                       unsigned short PBUSY:1;\r
-                       unsigned short :3;\r
-                       unsigned short PID:2;\r
-               } BIT;\r
-       } PIPE5CTR;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short BSTS:1;\r
-                       unsigned short :5;\r
-                       unsigned short ACLRM:1;\r
-                       unsigned short SQCLR:1;\r
-                       unsigned short SQSET:1;\r
-                       unsigned short SQMON:1;\r
-                       unsigned short PBUSY:1;\r
-                       unsigned short :3;\r
-                       unsigned short PID:2;\r
-               } BIT;\r
-       } PIPE6CTR;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short BSTS:1;\r
-                       unsigned short :5;\r
-                       unsigned short ACLRM:1;\r
-                       unsigned short SQCLR:1;\r
-                       unsigned short SQSET:1;\r
-                       unsigned short SQMON:1;\r
-                       unsigned short PBUSY:1;\r
-                       unsigned short :3;\r
-                       unsigned short PID:2;\r
-               } BIT;\r
-       } PIPE7CTR;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short BSTS:1;\r
-                       unsigned short :5;\r
-                       unsigned short ACLRM:1;\r
-                       unsigned short SQCLR:1;\r
-                       unsigned short SQSET:1;\r
-                       unsigned short SQMON:1;\r
-                       unsigned short PBUSY:1;\r
-                       unsigned short :3;\r
-                       unsigned short PID:2;\r
-               } BIT;\r
-       } PIPE8CTR;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short BSTS:1;\r
-                       unsigned short :5;\r
-                       unsigned short ACLRM:1;\r
-                       unsigned short SQCLR:1;\r
-                       unsigned short SQSET:1;\r
-                       unsigned short SQMON:1;\r
-                       unsigned short PBUSY:1;\r
-                       unsigned short :3;\r
-                       unsigned short PID:2;\r
-               } BIT;\r
-       } PIPE9CTR;\r
-       char           wk14[14];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :6;\r
-                       unsigned short TRENB:1;\r
-                       unsigned short TRCLR:1;\r
-               } BIT;\r
-       } PIPE1TRE;\r
-       unsigned short PIPE1TRN;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :6;\r
-                       unsigned short TRENB:1;\r
-                       unsigned short TRCLR:1;\r
-               } BIT;\r
-       } PIPE2TRE;\r
-       unsigned short PIPE2TRN;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :6;\r
-                       unsigned short TRENB:1;\r
-                       unsigned short TRCLR:1;\r
-               } BIT;\r
-       } PIPE3TRE;\r
-       unsigned short PIPE3TRN;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :6;\r
-                       unsigned short TRENB:1;\r
-                       unsigned short TRCLR:1;\r
-               } BIT;\r
-       } PIPE4TRE;\r
-       unsigned short PIPE4TRN;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :6;\r
-                       unsigned short TRENB:1;\r
-                       unsigned short TRCLR:1;\r
-               } BIT;\r
-       } PIPE5TRE;\r
-       unsigned short PIPE5TRN;\r
-       char           wk15[44];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :8;\r
-                       unsigned short USBSPD:2;\r
-               } BIT;\r
-       } DEVADD0;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :8;\r
-                       unsigned short USBSPD:2;\r
-               } BIT;\r
-       } DEVADD1;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :8;\r
-                       unsigned short USBSPD:2;\r
-               } BIT;\r
-       } DEVADD2;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :8;\r
-                       unsigned short USBSPD:2;\r
-               } BIT;\r
-       } DEVADD3;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :8;\r
-                       unsigned short USBSPD:2;\r
-               } BIT;\r
-       } DEVADD4;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :8;\r
-                       unsigned short USBSPD:2;\r
-               } BIT;\r
-       } DEVADD5;\r
-};\r
-\r
-struct st_wdt {\r
-       unsigned char  WDTRR;\r
-       char           wk0[1];\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short :2;\r
-                       unsigned short RPSS:2;\r
-                       unsigned short :2;\r
-                       unsigned short RPES:2;\r
-                       unsigned short CKS:4;\r
-                       unsigned short :2;\r
-                       unsigned short TOPS:2;\r
-               } BIT;\r
-       } WDTCR;\r
-       union {\r
-               unsigned short WORD;\r
-               struct {\r
-                       unsigned short REFEF:1;\r
-                       unsigned short UNDFF:1;\r
-                       unsigned short CNTVAL:14;\r
-               } BIT;\r
-       } WDTSR;\r
-       union {\r
-               unsigned char BYTE;\r
-               struct {\r
-                       unsigned char RSTIRQS:1;\r
-               } BIT;\r
-       } WDTRCR;\r
-};\r
-\r
-enum enum_ir {\r
-IR_BSC_BUSERR=16,IR_FCU_FIFERR=21,\r
-IR_ICU_SWINT=27,\r
-IR_CMT0_CMI0,\r
-IR_CMT1_CMI1,\r
-IR_CMT2_CMI2,\r
-IR_CMT3_CMI3,\r
-IR_ETHER_EINT,\r
-IR_USB0_D0FIFO0,IR_USB0_D1FIFO0,IR_USB0_USBI0,\r
-IR_USB1_D0FIFO1,IR_USB1_D1FIFO1,IR_USB1_USBI1,\r
-IR_RSPI0_SPRI0,IR_RSPI0_SPTI0,IR_RSPI0_SPII0,\r
-IR_RSPI1_SPRI1,IR_RSPI1_SPTI1,IR_RSPI1_SPII1,\r
-IR_RSPI2_SPRI2,IR_RSPI2_SPTI2,IR_RSPI2_SPII2,\r
-IR_CAN0_RXF0,IR_CAN0_TXF0,IR_CAN0_RXM0,IR_CAN0_TXM0,\r
-IR_CAN1_RXF1,IR_CAN1_TXF1,IR_CAN1_RXM1,IR_CAN1_TXM1,\r
-IR_CAN2_RXF2,IR_CAN2_TXF2,IR_CAN2_RXM2,IR_CAN2_TXM2,\r
-IR_RTC_COUNTUP=62,\r
-IR_ICU_IRQ0=64,IR_ICU_IRQ1,IR_ICU_IRQ2,IR_ICU_IRQ3,IR_ICU_IRQ4,IR_ICU_IRQ5,IR_ICU_IRQ6,IR_ICU_IRQ7,IR_ICU_IRQ8,IR_ICU_IRQ9,IR_ICU_IRQ10,IR_ICU_IRQ11,IR_ICU_IRQ12,IR_ICU_IRQ13,IR_ICU_IRQ14,IR_ICU_IRQ15,\r
-IR_USB_USBR0=90,IR_USB_USBR1,\r
-IR_RTC_ALARM,IR_RTC_PRD,\r
-IR_AD0_ADI0=98,\r
-IR_S12AD0_S12ADI0=102,\r
-IR_ICU_GROUPE0=106,IR_ICU_GROUPE1,IR_ICU_GROUPE2,IR_ICU_GROUPE3,IR_ICU_GROUPE4,IR_ICU_GROUPE5,IR_ICU_GROUPE6,IR_ICU_GROUPL0=114,\r
-IR_SCIX_SCIX0=122,IR_SCIX_SCIX1,IR_SCIX_SCIX2,IR_SCIX_SCIX3,\r
-IR_TPU0_TGI0A,IR_TPU0_TGI0B,IR_TPU0_TGI0C,IR_TPU0_TGI0D,\r
-IR_TPU1_TGI1A,IR_TPU1_TGI1B,\r
-IR_TPU2_TGI2A,IR_TPU2_TGI2B,\r
-IR_TPU3_TGI3A,IR_TPU3_TGI3B,IR_TPU3_TGI3C,IR_TPU3_TGI3D,\r
-IR_TPU4_TGI4A,IR_TPU4_TGI4B,\r
-IR_TPU5_TGI5A,IR_TPU5_TGI5B,\r
-IR_TPU6_TGI6A,IR_TPU6_TGI6B,IR_TPU6_TGI6C,IR_TPU6_TGI6D,\r
-IR_MTU0_TGIA0=142,IR_MTU0_TGIB0,IR_MTU0_TGIC0,IR_MTU0_TGID0,IR_MTU0_TGIE0,IR_MTU0_TGIF0,\r
-IR_TPU7_TGI7A,IR_TPU7_TGI7B,\r
-IR_MTU1_TGIA1=148,IR_MTU1_TGIB1,\r
-IR_TPU8_TGI8A,IR_TPU8_TGI8B,\r
-IR_MTU2_TGIA2=150,IR_MTU2_TGIB2,\r
-IR_TPU9_TGI9A,IR_TPU9_TGI9B,IR_TPU9_TGI9C,IR_TPU9_TGI9D,\r
-IR_MTU3_TGIA3=152,IR_MTU3_TGIB3,IR_MTU3_TGIC3,IR_MTU3_TGID3,\r
-IR_TPU10_TGI10A,IR_TPU10_TGI10B,\r
-IR_MTU4_TGIA4=156,IR_MTU4_TGIB4,IR_MTU4_TGIC4,IR_MTU4_TGID4,IR_MTU4_TCIV4,\r
-IR_MTU5_TGIU5,IR_MTU5_TGIV5,IR_MTU5_TGIW5,\r
-IR_TPU11_TGI11A,IR_TPU11_TGI11B,\r
-IR_POE_OEI1,IR_POE_OEI2,\r
-IR_TMR0_CMIA0=170,IR_TMR0_CMIB0,IR_TMR0_OVI0,\r
-IR_TMR1_CMIA1,IR_TMR1_CMIB1,IR_TMR1_OVI1,\r
-IR_TMR2_CMIA2,IR_TMR2_CMIB2,IR_TMR2_OVI2,\r
-IR_TMR3_CMIA3,IR_TMR3_CMIB3,IR_TMR3_OVI3,\r
-IR_RIIC0_EEI0,IR_RIIC0_RXI0,IR_RIIC0_TXI0,IR_RIIC0_TEI0,\r
-IR_RIIC1_EEI1,IR_RIIC1_RXI1,IR_RIIC1_TXI1,IR_RIIC1_TEI1,\r
-IR_RIIC2_EEI2,IR_RIIC2_RXI2,IR_RIIC2_TXI2,IR_RIIC2_TEI2,\r
-IR_RIIC3_EEI3,IR_RIIC3_RXI3,IR_RIIC3_TXI3,IR_RIIC3_TEI3,\r
-IR_DMAC_DMAC0I,IR_DMAC_DMAC1I,IR_DMAC_DMAC2I,IR_DMAC_DMAC3I,\r
-IR_EXDMAC_EXDMAC0I,IR_EXDMAC_EXDMAC1I,\r
-IR_SCI0_RXI0=214,IR_SCI0_TXI0,IR_SCI0_TEI0,\r
-IR_SCI1_RXI1,IR_SCI1_TXI1,IR_SCI1_TEI1,\r
-IR_SCI2_RXI2,IR_SCI2_TXI2,IR_SCI2_TEI2,\r
-IR_SCI3_RXI3,IR_SCI3_TXI3,IR_SCI3_TEI3,\r
-IR_SCI4_RXI4,IR_SCI4_TXI4,IR_SCI4_TEI4,\r
-IR_SCI5_RXI5,IR_SCI5_TXI5,IR_SCI5_TEI5,\r
-IR_SCI6_RXI6,IR_SCI6_TXI6,IR_SCI6_TEI6,\r
-IR_SCI7_RXI7,IR_SCI7_TXI7,IR_SCI7_TEI7,\r
-IR_SCI8_RXI8,IR_SCI8_TXI8,IR_SCI8_TEI8,\r
-IR_SCI9_RXI9,IR_SCI9_TXI9,IR_SCI9_TEI9,\r
-IR_SCI10_RXI10,IR_SCI10_TXI10,IR_SCI10_TEI10,\r
-IR_SCI11_RXI11,IR_SCI11_TXI11,IR_SCI11_TEI11,\r
-IR_SCI12_RXI12,IR_SCI12_TXI12,IR_SCI12_TEI12,\r
-IR_IEB_IEBINT\r
-};\r
-\r
-enum enum_dtce {\r
-DTCE_ICU_SWINT=27,\r
-DTCE_CMT0_CMI0,\r
-DTCE_CMT1_CMI1,\r
-DTCE_CMT2_CMI2,\r
-DTCE_CMT3_CMI3,\r
-DTCE_USB0_D0FIFO0=33,DTCE_USB0_D1FIFO0,\r
-DTCE_USB1_D0FIFO1=36,DTCE_USB1_D1FIFO1,\r
-DTCE_RSPI0_SPRI0=39,DTCE_RSPI0_SPTI0,\r
-DTCE_RSPI1_SPRI1=42,DTCE_RSPI1_SPTI1,\r
-DTCE_RSPI2_SPRI2=45,DTCE_RSPI2_SPTI2,\r
-DTCE_ICU_IRQ0=64,DTCE_ICU_IRQ1,DTCE_ICU_IRQ2,DTCE_ICU_IRQ3,DTCE_ICU_IRQ4,DTCE_ICU_IRQ5,DTCE_ICU_IRQ6,DTCE_ICU_IRQ7,DTCE_ICU_IRQ8,DTCE_ICU_IRQ9,DTCE_ICU_IRQ10,DTCE_ICU_IRQ11,DTCE_ICU_IRQ12,DTCE_ICU_IRQ13,DTCE_ICU_IRQ14,DTCE_ICU_IRQ15,\r
-DTCE_AD0_ADI0=98,\r
-DTCE_S12AD0_S12ADI0=102,\r
-DTCE_TPU0_TGI0A=126,DTCE_TPU0_TGI0B,DTCE_TPU0_TGI0C,DTCE_TPU0_TGI0D,\r
-DTCE_TPU1_TGI1A,DTCE_TPU1_TGI1B,\r
-DTCE_TPU2_TGI2A,DTCE_TPU2_TGI2B,\r
-DTCE_TPU3_TGI3A,DTCE_TPU3_TGI3B,DTCE_TPU3_TGI3C,DTCE_TPU3_TGI3D,\r
-DTCE_TPU4_TGI4A,DTCE_TPU4_TGI4B,\r
-DTCE_TPU5_TGI5A,DTCE_TPU5_TGI5B,\r
-DTCE_TPU6_TGI6A,DTCE_TPU6_TGI6B,DTCE_TPU6_TGI6C,DTCE_TPU6_TGI6D,\r
-DTCE_MTU0_TGIA0=142,DTCE_MTU0_TGIB0,DTCE_MTU0_TGIC0,DTCE_MTU0_TGID0,\r
-DTCE_TPU7_TGI7A=148,DTCE_TPU7_TGI7B,\r
-DTCE_MTU1_TGIA1=148,DTCE_MTU1_TGIB1,\r
-DTCE_TPU8_TGI8A,DTCE_TPU8_TGI8B,\r
-DTCE_MTU2_TGIA2=150,DTCE_MTU2_TGIB2,\r
-DTCE_TPU9_TGI9A,DTCE_TPU9_TGI9B,DTCE_TPU9_TGI9C,DTCE_TPU9_TGI9D,\r
-DTCE_MTU3_TGIA3=152,DTCE_MTU3_TGIB3,DTCE_MTU3_TGIC3,DTCE_MTU3_TGID3,\r
-DTCE_TPU10_TGI10A,DTCE_TPU10_TGI10B,\r
-DTCE_MTU4_TGIA4=156,DTCE_MTU4_TGIB4,DTCE_MTU4_TGIC4,DTCE_MTU4_TGID4,DTCE_MTU4_TCIV4,\r
-DTCE_MTU5_TGIU5,DTCE_MTU5_TGIV5,DTCE_MTU5_TGIW5,\r
-DTCE_TPU11_TGI11A,DTCE_TPU11_TGI11B,\r
-DTCE_TMR0_CMIA0=170,DTCE_TMR0_CMIB0,\r
-DTCE_TMR1_CMIA1=173,DTCE_TMR1_CMIB1,\r
-DTCE_TMR2_CMIA2=176,DTCE_TMR2_CMIB2,\r
-DTCE_TMR3_CMIA3=179,DTCE_TMR3_CMIB3,\r
-DTCE_RIIC0_RXI0=183,DTCE_RIIC0_TXI0,\r
-DTCE_RIIC1_RXI1=187,DTCE_RIIC1_TXI1,\r
-DTCE_RIIC2_RXI2=191,DTCE_RIIC2_TXI2,\r
-DTCE_RIIC3_RXI3=195,DTCE_RIIC3_TXI3,\r
-DTCE_DMAC_DMAC0I=198,DTCE_DMAC_DMAC1I,DTCE_DMAC_DMAC2I,DTCE_DMAC_DMAC3I,\r
-DTCE_EXDMAC_EXDMAC0I,DTCE_EXDMAC_EXDMAC1I,\r
-DTCE_SCI0_RXI0=214,DTCE_SCI0_TXI0,\r
-DTCE_SCI1_RXI1=217,DTCE_SCI1_TXI1,\r
-DTCE_SCI2_RXI2=220,DTCE_SCI2_TXI2,\r
-DTCE_SCI3_RXI3=223,DTCE_SCI3_TXI3,\r
-DTCE_SCI4_RXI4=226,DTCE_SCI4_TXI4,\r
-DTCE_SCI5_RXI5=229,DTCE_SCI5_TXI5,\r
-DTCE_SCI6_RXI6=232,DTCE_SCI6_TXI6,\r
-DTCE_SCI7_RXI7=235,DTCE_SCI7_TXI7,\r
-DTCE_SCI8_RXI8=238,DTCE_SCI8_TXI8,\r
-DTCE_SCI9_RXI9=241,DTCE_SCI9_TXI9,\r
-DTCE_SCI10_RXI10=244,DTCE_SCI10_TXI10,\r
-DTCE_SCI11_RXI11=247,DTCE_SCI11_TXI11,\r
-DTCE_SCI12_RXI12=250,DTCE_SCI12_TXI12\r
-};\r
-\r
-enum enum_ier {\r
-IER_BSC_BUSERR=0x02,\r
-IER_FCU_FIFERR=0x02,IER_FCU_FRDYI=0x02,\r
-IER_ICU_SWINT=0x03,\r
-IER_CMT0_CMI0=0x03,\r
-IER_CMT1_CMI1=0x03,\r
-IER_CMT2_CMI2=0x03,\r
-IER_CMT3_CMI3=0x03,\r
-IER_ETHER_EINT=0x04,\r
-IER_USB0_D0FIFO0=0x04,IER_USB0_D1FIFO0=0x04,IER_USB0_USBI0=0x04,\r
-IER_USB1_D0FIFO1=0x04,IER_USB1_D1FIFO1=0x04,IER_USB1_USBI1=0x04,\r
-IER_RSPI0_SPRI0=0x04,IER_RSPI0_SPTI0=0x05,IER_RSPI0_SPII0=0x05,\r
-IER_RSPI1_SPRI1=0x05,IER_RSPI1_SPTI1=0x05,IER_RSPI1_SPII1=0x05,\r
-IER_RSPI2_SPRI2=0x05,IER_RSPI2_SPTI2=0x05,IER_RSPI2_SPII2=0x05,\r
-IER_CAN0_RXF0=0x06,IER_CAN0_TXF0=0x06,IER_CAN0_RXM0=0x06,IER_CAN0_TXM0=0x06,\r
-IER_CAN1_RXF1=0x06,IER_CAN1_TXF1=0x06,IER_CAN1_RXM1=0x06,IER_CAN1_TXM1=0x06,\r
-IER_CAN2_RXF2=0x07,IER_CAN2_TXF2=0x07,IER_CAN2_RXM2=0x07,IER_CAN2_TXM2=0x07,\r
-IER_RTC_COUNTUP=0x07,\r
-IER_ICU_IRQ0=0x08,IER_ICU_IRQ1=0x08,IER_ICU_IRQ2=0x08,IER_ICU_IRQ3=0x08,IER_ICU_IRQ4=0x08,IER_ICU_IRQ5=0x08,IER_ICU_IRQ6=0x08,IER_ICU_IRQ7=0x08,IER_ICU_IRQ8=0x09,IER_ICU_IRQ9=0x09,IER_ICU_IRQ10=0x09,IER_ICU_IRQ11=0x09,IER_ICU_IRQ12=0x09,IER_ICU_IRQ13=0x09,IER_ICU_IRQ14=0x09,IER_ICU_IRQ15=0x09,\r
-IER_USB_USBR0=0x0B,IER_USB_USBR1=0x0B,\r
-IER_RTC_ALARM=0x0B,IER_RTC_PRD=0x0B,\r
-IER_AD0_ADI0=0x0C,\r
-IER_S12AD0_S12ADI0=0x0C,\r
-IER_ICU_GROUPE0=0x0D,IER_ICU_GROUPE1=0x0D,IER_ICU_GROUPE2=0x0D,IER_ICU_GROUPE3=0x0D,IER_ICU_GROUPE4=0x0D,IER_ICU_GROUPE5=0x0D,IER_ICU_GROUPE6=0x0E,IER_ICU_GROUPL0=0x0E,\r
-IER_SCIX_SCIX0=0x0F,IER_SCIX_SCIX1=0x0F,IER_SCIX_SCIX2=0x0F,IER_SCIX_SCIX3=0x0F,\r
-IER_TPU0_TGI0A=0x0F,IER_TPU0_TGI0B=0x0F,IER_TPU0_TGI0C=0x10,IER_TPU0_TGI0D=0x10,\r
-IER_TPU1_TGI1A=0x10,IER_TPU1_TGI1B=0x10,\r
-IER_TPU2_TGI2A=0x10,IER_TPU2_TGI2B=0x10,\r
-IER_TPU3_TGI3A=0x10,IER_TPU3_TGI3B=0x10,IER_TPU3_TGI3C=0x11,IER_TPU3_TGI3D=0x11,\r
-IER_TPU4_TGI4A=0x11,IER_TPU4_TGI4B=0x11,\r
-IER_TPU5_TGI5A=0x11,IER_TPU5_TGI5B=0x11,\r
-IER_TPU6_TGI6A=0x11,IER_TPU6_TGI6B=0x11,IER_TPU6_TGI6C=0x12,IER_TPU6_TGI6D=0x12,\r
-IER_MTU0_TGIA0=0x11,IER_MTU0_TGIB0=0x11,IER_MTU0_TGIC0=0x12,IER_MTU0_TGID0=0x12,IER_MTU0_TGIE0=0x12,IER_MTU0_TGIF0=0x12,\r
-IER_TPU7_TGI7A=0x12,IER_TPU7_TGI7B=0x12,\r
-IER_MTU1_TGIA1=0x12,IER_MTU1_TGIB1=0x12,\r
-IER_TPU8_TGI8A=0x12,IER_TPU8_TGI8B=0x12,\r
-IER_MTU2_TGIA2=0x12,IER_MTU2_TGIB2=0x12,\r
-IER_TPU9_TGI9A=0x13,IER_TPU9_TGI9B=0x13,IER_TPU9_TGI9C=0x13,IER_TPU9_TGI9D=0x13,\r
-IER_MTU3_TGIA3=0x13,IER_MTU3_TGIB3=0x13,IER_MTU3_TGIC3=0x13,IER_MTU3_TGID3=0x13,\r
-IER_TPU10_TGI10A=0x13,IER_TPU10_TGI10B=0x13,\r
-IER_MTU4_TGIA4=0x13,IER_MTU4_TGIB4=0x13,IER_MTU4_TGIC4=0x13,IER_MTU4_TGID4=0x13,IER_MTU4_TCIV4=0x14,\r
-IER_MTU5_TGIU5=0x14,IER_MTU5_TGIV5=0x14,IER_MTU5_TGIW5=0x14,\r
-IER_TPU11_TGI11A=0x14,IER_TPU11_TGI11B=0x14,\r
-IER_POE_OEI1=0x14,IER_POE_OEI2=0x14,\r
-IER_TMR0_CMIA0=0x15,IER_TMR0_CMIB0=0x15,IER_TMR0_OVI0=0x15,\r
-IER_TMR1_CMIA1=0x15,IER_TMR1_CMIB1=0x15,IER_TMR1_OVI1=0x15,\r
-IER_TMR2_CMIA2=0x16,IER_TMR2_CMIB2=0x16,IER_TMR2_OVI2=0x16,\r
-IER_TMR3_CMIA3=0x16,IER_TMR3_CMIB3=0x16,IER_TMR3_OVI3=0x16,\r
-IER_RIIC0_EEI0=0x16,IER_RIIC0_RXI0=0x16,IER_RIIC0_TXI0=0x17,IER_RIIC0_TEI0=0x17,\r
-IER_RIIC1_EEI1=0x17,IER_RIIC1_RXI1=0x17,IER_RIIC1_TXI1=0x17,IER_RIIC1_TEI1=0x17,\r
-IER_RIIC2_EEI2=0x17,IER_RIIC2_RXI2=0x17,IER_RIIC2_TXI2=0x18,IER_RIIC2_TEI2=0x18,\r
-IER_RIIC3_EEI3=0x18,IER_RIIC3_RXI3=0x18,IER_RIIC3_TXI3=0x18,IER_RIIC3_TEI3=0x18,\r
-IER_DMAC_DMAC0I=0x18,IER_DMAC_DMAC1I=0x18,IER_DMAC_DMAC2I=0x19,IER_DMAC_DMAC3I=0x19,\r
-IER_EXDMAC_EXDMAC0I=0x19,IER_EXDMAC_EXDMAC1I=0x19,\r
-IER_SCI0_RXI0=0x1A,IER_SCI0_TXI0=0x1A,IER_SCI0_TEI0=0x1B,\r
-IER_SCI1_RXI1=0x1B,IER_SCI1_TXI1=0x1B,IER_SCI1_TEI1=0x1B,\r
-IER_SCI2_RXI2=0x1B,IER_SCI2_TXI2=0x1B,IER_SCI2_TEI2=0x1B,\r
-IER_SCI3_RXI3=0x1B,IER_SCI3_TXI3=0x1C,IER_SCI3_TEI3=0x1C,\r
-IER_SCI4_RXI4=0x1C,IER_SCI4_TXI4=0x1C,IER_SCI4_TEI4=0x1C,\r
-IER_SCI5_RXI5=0x1C,IER_SCI5_TXI5=0x1C,IER_SCI5_TEI5=0x1C,\r
-IER_SCI6_RXI6=0x1D,IER_SCI6_TXI6=0x1D,IER_SCI6_TEI6=0x1D,\r
-IER_SCI7_RXI7=0x1D,IER_SCI7_TXI7=0x1D,IER_SCI7_TEI7=0x1D,\r
-IER_SCI8_RXI8=0x1D,IER_SCI8_TXI8=0x1D,IER_SCI8_TEI8=0x1E,\r
-IER_SCI9_RXI9=0x1E,IER_SCI9_TXI9=0x1E,IER_SCI9_TEI9=0x1E,\r
-IER_SCI10_RXI10=0x1E,IER_SCI10_TXI10=0x1E,IER_SCI10_TEI10=0x1E,\r
-IER_SCI11_RXI11=0x1E,IER_SCI11_TXI11=0x1F,IER_SCI11_TEI11=0x1F,\r
-IER_SCI12_RXI12=0x1F,IER_SCI12_TXI12=0x1F,IER_SCI12_TEI12=0x1F,\r
-IER_IEB_IEBINT=0x1F\r
-};\r
-\r
-enum enum_ipr {\r
-IPR_BSC_BUSERR=0,\r
-IPR_FCU_FIFERR=1,IPR_FCU_FRDYI=2,\r
-IPR_ICU_SWINT=3,\r
-IPR_CMT0_CMI0=4,\r
-IPR_CMT1_CMI1=5,\r
-IPR_CMT2_CMI2=6,\r
-IPR_CMT3_CMI3=7,\r
-IPR_ETHER_EINT=32,\r
-IPR_USB0_D0FIFO0=33,IPR_USB0_D1FIFO0=34,IPR_USB0_USBI0=35,\r
-IPR_USB1_D0FIFO1=36,IPR_USB1_D1FIFO1=37,IPR_USB1_USBI1=38,\r
-IPR_RSPI0_SPRI0=39,IPR_RSPI0_SPTI0=39,IPR_RSPI0_SPII0=39,\r
-IPR_RSPI1_SPRI1=42,IPR_RSPI1_SPTI1=42,IPR_RSPI1_SPII1=42,\r
-IPR_RSPI2_SPRI2=45,IPR_RSPI2_SPTI2=45,IPR_RSPI2_SPII2=45,\r
-IPR_CAN0_RXF0=48,IPR_CAN0_TXF0=48,IPR_CAN0_RXM0=48,IPR_CAN0_TXM0=48,\r
-IPR_CAN1_RXF1=52,IPR_CAN1_TXF1=52,IPR_CAN1_RXM1=52,IPR_CAN1_TXM1=52,\r
-IPR_CAN2_RXF2=56,IPR_CAN2_TXF2=56,IPR_CAN2_RXM2=56,IPR_CAN2_TXM2=56,\r
-IPR_RTC_COUNTUP=62,\r
-IPR_ICU_IRQ0=64,IPR_ICU_IRQ1=65,IPR_ICU_IRQ2=66,IPR_ICU_IRQ3=67,IPR_ICU_IRQ4=68,IPR_ICU_IRQ5=69,IPR_ICU_IRQ6=70,IPR_ICU_IRQ7=71,IPR_ICU_IRQ8=72,IPR_ICU_IRQ9=73,IPR_ICU_IRQ10=74,IPR_ICU_IRQ11=75,IPR_ICU_IRQ12=76,IPR_ICU_IRQ13=77,IPR_ICU_IRQ14=78,IPR_ICU_IRQ15=79,\r
-IPR_USB_USBR0=90,IPR_USB_USBR1=91,\r
-IPR_RTC_ALARM=92,IPR_RTC_PRD=93,\r
-IPR_AD0_ADI0=98,\r
-IPR_S12AD0_S12ADI0=102,\r
-IPR_ICU_GROUPE0=106,IPR_ICU_GROUPE1=107,IPR_ICU_GROUPE2=108,IPR_ICU_GROUPE3=109,IPR_ICU_GROUPE4=110,IPR_ICU_GROUPE5=111,IPR_ICU_GROUPE6=112,IPR_ICU_GROUPL0=114,\r
-IPR_SCIX_SCIX0=122,IPR_SCIX_SCIX1=122,IPR_SCIX_SCIX2=122,IPR_SCIX_SCIX3=122,\r
-IPR_TPU0_TGI0A=126,IPR_TPU0_TGI0B=126,IPR_TPU0_TGI0C=126,IPR_TPU0_TGI0D=126,\r
-IPR_TPU1_TGI1A=130,IPR_TPU1_TGI1B=130,\r
-IPR_TPU2_TGI2A=132,IPR_TPU2_TGI2B=132,\r
-IPR_TPU3_TGI3A=134,IPR_TPU3_TGI3B=134,IPR_TPU3_TGI3C=134,IPR_TPU3_TGI3D=134,\r
-IPR_TPU4_TGI4A=138,IPR_TPU4_TGI4B=138,\r
-IPR_TPU5_TGI5A=140,IPR_TPU5_TGI5B=140,\r
-IPR_TPU6_TGI6A=142,IPR_TPU6_TGI6B=142,IPR_TPU6_TGI6C=142,IPR_TPU6_TGI6D=142,\r
-IPR_MTU0_TGIA0=142,IPR_MTU0_TGIB0=142,IPR_MTU0_TGIC0=142,IPR_MTU0_TGID0=142,IPR_MTU0_TGIE0=146,IPR_MTU0_TGIF0=146,\r
-IPR_TPU7_TGI7A=148,IPR_TPU7_TGI7B=148,\r
-IPR_MTU1_TGIA1=148,IPR_MTU1_TGIB1=148,\r
-IPR_TPU8_TGI8A=150,IPR_TPU8_TGI8B=150,\r
-IPR_MTU2_TGIA2=150,IPR_MTU2_TGIB2=150,\r
-IPR_TPU9_TGI9A=152,IPR_TPU9_TGI9B=152,IPR_TPU9_TGI9C=152,IPR_TPU9_TGI9D=152,\r
-IPR_MTU3_TGIA3=152,IPR_MTU3_TGIB3=152,IPR_MTU3_TGIC3=152,IPR_MTU3_TGID3=152,\r
-IPR_TPU10_TGI10A=156,IPR_TPU10_TGI10B=156,\r
-IPR_MTU4_TGIA4=156,IPR_MTU4_TGIB4=156,IPR_MTU4_TGIC4=156,IPR_MTU4_TGID4=156,IPR_MTU4_TCIV4=160,\r
-IPR_MTU5_TGIU5=161,IPR_MTU5_TGIV5=161,IPR_MTU5_TGIW5=161,\r
-IPR_TPU11_TGI11A=164,IPR_TPU11_TGI11B=164,\r
-IPR_POE_OEI1=166,IPR_POE_OEI2=166,\r
-IPR_TMR0_CMIA0=170,IPR_TMR0_CMIB0=170,IPR_TMR0_OVI0=170,\r
-IPR_TMR1_CMIA1=173,IPR_TMR1_CMIB1=173,IPR_TMR1_OVI1=173,\r
-IPR_TMR2_CMIA2=176,IPR_TMR2_CMIB2=176,IPR_TMR2_OVI2=176,\r
-IPR_TMR3_CMIA3=179,IPR_TMR3_CMIB3=179,IPR_TMR3_OVI3=179,\r
-IPR_RIIC0_EEI0=182,IPR_RIIC0_RXI0=183,IPR_RIIC0_TXI0=184,IPR_RIIC0_TEI0=185,\r
-IPR_RIIC1_EEI1=186,IPR_RIIC1_RXI1=187,IPR_RIIC1_TXI1=188,IPR_RIIC1_TEI1=189,\r
-IPR_RIIC2_EEI2=190,IPR_RIIC2_RXI2=191,IPR_RIIC2_TXI2=192,IPR_RIIC2_TEI2=193,\r
-IPR_RIIC3_EEI3=194,IPR_RIIC3_RXI3=195,IPR_RIIC3_TXI3=196,IPR_RIIC3_TEI3=197,\r
-IPR_DMAC_DMAC0I=198,IPR_DMAC_DMAC1I=199,IPR_DMAC_DMAC2I=200,IPR_DMAC_DMAC3I=201,\r
-IPR_EXDMAC_EXDMAC0I=202,IPR_EXDMAC_EXDMAC1I=203,\r
-IPR_SCI0_RXI0=214,IPR_SCI0_TXI0=214,IPR_SCI0_TEI0=214,\r
-IPR_SCI1_RXI1=217,IPR_SCI1_TXI1=217,IPR_SCI1_TEI1=217,\r
-IPR_SCI2_RXI2=220,IPR_SCI2_TXI2=220,IPR_SCI2_TEI2=220,\r
-IPR_SCI3_RXI3=223,IPR_SCI3_TXI3=223,IPR_SCI3_TEI3=223,\r
-IPR_SCI4_RXI4=226,IPR_SCI4_TXI4=226,IPR_SCI4_TEI4=226,\r
-IPR_SCI5_RXI5=229,IPR_SCI5_TXI5=229,IPR_SCI5_TEI5=229,\r
-IPR_SCI6_RXI6=232,IPR_SCI6_TXI6=232,IPR_SCI6_TEI6=232,\r
-IPR_SCI7_RXI7=235,IPR_SCI7_TXI7=235,IPR_SCI7_TEI7=235,\r
-IPR_SCI8_RXI8=238,IPR_SCI8_TXI8=238,IPR_SCI8_TEI8=238,\r
-IPR_SCI9_RXI9=241,IPR_SCI9_TXI9=241,IPR_SCI9_TEI9=241,\r
-IPR_SCI10_RXI10=244,IPR_SCI10_TXI10=244,IPR_SCI10_TEI10=244,\r
-IPR_SCI11_RXI11=247,IPR_SCI11_TXI11=247,IPR_SCI11_TEI11=247,\r
-IPR_SCI12_RXI12=250,IPR_SCI12_TXI12=250,IPR_SCI12_TEI12=250,\r
-IPR_IEB_IEBINT=253,\r
-IPR_BSC_=0,\r
-IPR_CMT0_=4,\r
-IPR_CMT1_=5,\r
-IPR_CMT2_=6,\r
-IPR_CMT3_=7,\r
-IPR_ETHER_=32,\r
-IPR_RSPI0_=39,\r
-IPR_RSPI1_=42,\r
-IPR_RSPI2_=45,\r
-IPR_CAN0_=48,\r
-IPR_CAN1_=52,\r
-IPR_CAN2_=56,\r
-IPR_AD0_=98,\r
-IPR_S12AD0_=102,\r
-IPR_SCIX_=122,\r
-IPR_SCIX_SCI=122,\r
-IPR_TPU0_=126,\r
-IPR_TPU0_TGI=126,\r
-IPR_TPU1_=130,\r
-IPR_TPU1_TGI=130,\r
-IPR_TPU2_=132,\r
-IPR_TPU2_TGI=132,\r
-IPR_TPU3_=134,\r
-IPR_TPU3_TGI=134,\r
-IPR_TPU4_=138,\r
-IPR_TPU4_TGI=138,\r
-IPR_TPU5_=140,\r
-IPR_TPU5_TGI=140,\r
-IPR_MTU5_=161,\r
-IPR_MTU5_TGI=161,\r
-IPR_TPU11_=164,\r
-IPR_TPU11_TGI=164,\r
-IPR_POE_=166,\r
-IPR_POE_OEI=166,\r
-IPR_TMR0_=170,\r
-IPR_TMR1_=173,\r
-IPR_TMR2_=176,\r
-IPR_TMR3_=179,\r
-IPR_SCI0_=214,\r
-IPR_SCI1_=217,\r
-IPR_SCI2_=220,\r
-IPR_SCI3_=223,\r
-IPR_SCI4_=226,\r
-IPR_SCI5_=229,\r
-IPR_SCI6_=232,\r
-IPR_SCI7_=235,\r
-IPR_SCI8_=238,\r
-IPR_SCI9_=241,\r
-IPR_SCI10_=244,\r
-IPR_SCI11_=247,\r
-IPR_SCI12_=250,\r
-IPR_IEB_=253\r
-};\r
-\r
-enum enum_grp {\r
-GRP_CAN0_ERS0=0,GRP_CAN1_ERS1=0,GRP_CAN2_ERS2=0,\r
-GRP_MTU0_TCIV0=1,GRP_MTU1_TCIV1=1,GRP_MTU1_TCIU1=1,\r
-GRP_MTU2_TCIV2=2,GRP_MTU2_TCIU2=2,GRP_MTU3_TCIV3=2,\r
-GRP_TPU0_TCI0V=3,GRP_TPU1_TCI1V=3,GRP_TPU1_TCI1U=3,GRP_TPU5_TCI5V=3,GRP_TPU5_TCI5U=3,\r
-GRP_TPU2_TCI2V=4,GRP_TPU2_TCI2U=4,GRP_TPU3_TCI3V=4,GRP_TPU4_TCI4V=4,GRP_TPU4_TCI4U=4,\r
-GRP_TPU6_TCI6V=5,GRP_TPU7_TCI7V=5,GRP_TPU7_TCI7U=5,GRP_TPU11_TCI11V=5,GRP_TPU11_TCI11U=5,\r
-GRP_TPU8_TCI8V=6,GRP_TPU8_TCI8U=6,GRP_TPU9_TCI9V=6,GRP_TPU10_TCI10V=6,GRP_TPU10_TCI10U=6,\r
-GRP_SCI0_ERI0=12,GRP_SCI1_ERI1=12,GRP_SCI2_ERI2=12,GRP_SCI3_ERI3=12,GRP_SCI4_ERI4=12,GRP_SCI5_ERI5=12,GRP_SCI6_ERI6=12,\r
-GRP_SCI7_ERI7=12,GRP_SCI8_ERI8=12,GRP_SCI9_ERI9=12,GRP_SCI10_ERI10=12,GRP_SCI11_ERI11=12,GRP_SCI12_ERI12=12,\r
-GRP_RSPI0_SPEI0=12,GRP_RSPI1_SPEI1=12,GRP_RSPI2_SPEI2=12\r
-};\r
-\r
-enum enum_gen {\r
-GEN_CAN0_ERS0=0,GEN_CAN1_ERS1=0,GEN_CAN2_ERS2=0,\r
-GEN_MTU0_TCIV0=1,GEN_MTU1_TCIV1=1,GEN_MTU1_TCIU1=1,\r
-GEN_MTU2_TCIV2=2,GEN_MTU2_TCIU2=2,GEN_MTU3_TCIV3=2,\r
-GEN_TPU0_TCI0V=3,GEN_TPU1_TCI1V=3,GEN_TPU1_TCI1U=3,GEN_TPU5_TCI5V=3,GEN_TPU5_TCI5U=3,\r
-GEN_TPU2_TCI2V=4,GEN_TPU2_TCI2U=4,GEN_TPU3_TCI3V=4,GEN_TPU4_TCI4V=4,GEN_TPU4_TCI4U=4,\r
-GEN_TPU6_TCI6V=5,GEN_TPU7_TCI7V=5,GEN_TPU7_TCI7U=5,GEN_TPU11_TCI11V=5,GEN_TPU11_TCI11U=5,\r
-GEN_TPU8_TCI8V=6,GEN_TPU8_TCI8U=6,GEN_TPU9_TCI9V=6,GEN_TPU10_TCI10V=6,GEN_TPU10_TCI10U=6,\r
-GEN_SCI0_ERI0=12,GEN_SCI1_ERI1=12,GEN_SCI2_ERI2=12,GEN_SCI3_ERI3=12,GEN_SCI4_ERI4=12,GEN_SCI5_ERI5=12,GEN_SCI6_ERI6=12,\r
-GEN_SCI7_ERI7=12,GEN_SCI8_ERI8=12,GEN_SCI9_ERI9=12,GEN_SCI10_ERI10=12,GEN_SCI11_ERI11=12,GEN_SCI12_ERI12=12,\r
-GEN_RSPI0_SPEI0=12,GEN_RSPI1_SPEI1=12,GEN_RSPI2_SPEI2=12\r
-};\r
-\r
-enum enum_gcr {\r
-GCR_CAN0_ERS0=0,GCR_CAN1_ERS1=0,GCR_CAN2_ERS2=0,\r
-GCR_MTU0_TCIV0=1,GCR_MTU1_TCIV1=1,GCR_MTU1_TCIU1=1,\r
-GCR_MTU2_TCIV2=2,GCR_MTU2_TCIU2=2,GCR_MTU3_TCIV3=2,\r
-GCR_TPU0_TCI0V=3,GCR_TPU1_TCI1V=3,GCR_TPU1_TCI1U=3,GCR_TPU5_TCI5V=3,GCR_TPU5_TCI5U=3,\r
-GCR_TPU2_TCI2V=4,GCR_TPU2_TCI2U=4,GCR_TPU3_TCI3V=4,GCR_TPU4_TCI4V=4,GCR_TPU4_TCI4U=4,\r
-GCR_TPU6_TCI6V=5,GCR_TPU7_TCI7V=5,GCR_TPU7_TCI7U=5,GCR_TPU11_TCI11V=5,GCR_TPU11_TCI11U=5,\r
-GCR_TPU8_TCI8V=6,GCR_TPU8_TCI8U=6,GCR_TPU9_TCI9V=6,GCR_TPU10_TCI10V=6,GCR_TPU10_TCI10U=6,\r
-GCR_SCI0_ERI0=12,GCR_SCI1_ERI1=12,GCR_SCI2_ERI2=12,GCR_SCI3_ERI3=12,GCR_SCI4_ERI4=12,GCR_SCI5_ERI5=12,GCR_SCI6_ERI6=12,\r
-GCR_SCI7_ERI7=12,GCR_SCI8_ERI8=12,GCR_SCI9_ERI9=12,GCR_SCI10_ERI10=12,GCR_SCI11_ERI11=12,GCR_SCI12_ERI12=12,\r
-GCR_RSPI0_SPEI0=12,GCR_RSPI1_SPEI1=12,GCR_RSPI2_SPEI2=12\r
-};\r
-\r
-#define        IEN_BSC_BUSERR          IEN0\r
-#define        IEN_FCU_FIFERR          IEN5\r
-#define        IEN_FCU_FRDYI           IEN7\r
-#define        IEN_ICU_SWINT           IEN3\r
-#define        IEN_CMT0_CMI0           IEN4\r
-#define        IEN_CMT1_CMI1           IEN5\r
-#define        IEN_CMT2_CMI2           IEN6\r
-#define        IEN_CMT3_CMI3           IEN7\r
-#define        IEN_ETHER_EINT          IEN0\r
-#define        IEN_USB0_D0FIFO0        IEN1\r
-#define        IEN_USB0_D1FIFO0        IEN2\r
-#define        IEN_USB0_USBI0          IEN3\r
-#define        IEN_USB1_D0FIFO1        IEN4\r
-#define        IEN_USB1_D1FIFO1        IEN5\r
-#define        IEN_USB1_USBI1          IEN6\r
-#define        IEN_RSPI0_SPRI0         IEN7\r
-#define        IEN_RSPI0_SPTI0         IEN0\r
-#define        IEN_RSPI0_SPII0         IEN1\r
-#define        IEN_RSPI1_SPRI1         IEN2\r
-#define        IEN_RSPI1_SPTI1         IEN3\r
-#define        IEN_RSPI1_SPII1         IEN4\r
-#define        IEN_RSPI2_SPRI2         IEN5\r
-#define        IEN_RSPI2_SPTI2         IEN6\r
-#define        IEN_RSPI2_SPII2         IEN7\r
-#define        IEN_CAN0_RXF0           IEN0\r
-#define        IEN_CAN0_TXF0           IEN1\r
-#define        IEN_CAN0_RXM0           IEN2\r
-#define        IEN_CAN0_TXM0           IEN3\r
-#define        IEN_CAN1_RXF1           IEN4\r
-#define        IEN_CAN1_TXF1           IEN5\r
-#define        IEN_CAN1_RXM1           IEN6\r
-#define        IEN_CAN1_TXM1           IEN7\r
-#define        IEN_CAN2_RXF2           IEN0\r
-#define        IEN_CAN2_TXF2           IEN1\r
-#define        IEN_CAN2_RXM2           IEN2\r
-#define        IEN_CAN2_TXM2           IEN3\r
-#define        IEN_RTC_COUNTUP         IEN6\r
-#define        IEN_ICU_IRQ0            IEN0\r
-#define        IEN_ICU_IRQ1            IEN1\r
-#define        IEN_ICU_IRQ2            IEN2\r
-#define        IEN_ICU_IRQ3            IEN3\r
-#define        IEN_ICU_IRQ4            IEN4\r
-#define        IEN_ICU_IRQ5            IEN5\r
-#define        IEN_ICU_IRQ6            IEN6\r
-#define        IEN_ICU_IRQ7            IEN7\r
-#define        IEN_ICU_IRQ8            IEN0\r
-#define        IEN_ICU_IRQ9            IEN1\r
-#define        IEN_ICU_IRQ10           IEN2\r
-#define        IEN_ICU_IRQ11           IEN3\r
-#define        IEN_ICU_IRQ12           IEN4\r
-#define        IEN_ICU_IRQ13           IEN5\r
-#define        IEN_ICU_IRQ14           IEN6\r
-#define        IEN_ICU_IRQ15           IEN7\r
-#define        IEN_USB_USBR0           IEN2\r
-#define        IEN_USB_USBR1           IEN3\r
-#define        IEN_RTC_ALARM           IEN4\r
-#define        IEN_RTC_PRD                     IEN5\r
-#define        IEN_AD0_ADI0            IEN2\r
-#define        IEN_S12AD0_S12ADI0      IEN6\r
-#define        IEN_ICU_GROUPE0         IEN2\r
-#define        IEN_ICU_GROUPE1         IEN3\r
-#define        IEN_ICU_GROUPE2         IEN4\r
-#define        IEN_ICU_GROUPE3         IEN5\r
-#define        IEN_ICU_GROUPE4         IEN6\r
-#define        IEN_ICU_GROUPE5         IEN7\r
-#define        IEN_ICU_GROUPE6         IEN0\r
-#define        IEN_ICU_GROUPL0         IEN2\r
-#define        IEN_SCIX_SCIX0          IEN2\r
-#define        IEN_SCIX_SCIX1          IEN3\r
-#define        IEN_SCIX_SCIX2          IEN4\r
-#define        IEN_SCIX_SCIX3          IEN5\r
-#define        IEN_TPU0_TGI0A          IEN6\r
-#define        IEN_TPU0_TGI0B          IEN7\r
-#define        IEN_TPU0_TGI0C          IEN0\r
-#define        IEN_TPU0_TGI0D          IEN1\r
-#define        IEN_TPU1_TGI1A          IEN2\r
-#define        IEN_TPU1_TGI1B          IEN3\r
-#define        IEN_TPU2_TGI2A          IEN4\r
-#define        IEN_TPU2_TGI2B          IEN5\r
-#define        IEN_TPU3_TGI3A          IEN6\r
-#define        IEN_TPU3_TGI3B          IEN7\r
-#define        IEN_TPU3_TGI3C          IEN0\r
-#define        IEN_TPU3_TGI3D          IEN1\r
-#define        IEN_TPU4_TGI4A          IEN2\r
-#define        IEN_TPU4_TGI4B          IEN3\r
-#define        IEN_TPU5_TGI5A          IEN4\r
-#define        IEN_TPU5_TGI5B          IEN5\r
-#define        IEN_TPU6_TGI6A          IEN6\r
-#define        IEN_TPU6_TGI6B          IEN7\r
-#define        IEN_TPU6_TGI6C          IEN0\r
-#define        IEN_TPU6_TGI6D          IEN1\r
-#define        IEN_MTU0_TGIA0          IEN6\r
-#define        IEN_MTU0_TGIB0          IEN7\r
-#define        IEN_MTU0_TGIC0          IEN0\r
-#define        IEN_MTU0_TGID0          IEN1\r
-#define        IEN_MTU0_TGIE0          IEN2\r
-#define        IEN_MTU0_TGIF0          IEN3\r
-#define        IEN_TPU7_TGI7A          IEN4\r
-#define        IEN_TPU7_TGI7B          IEN5\r
-#define        IEN_MTU1_TGIA1          IEN4\r
-#define        IEN_MTU1_TGIB1          IEN5\r
-#define        IEN_TPU8_TGI8A          IEN6\r
-#define        IEN_TPU8_TGI8B          IEN7\r
-#define        IEN_MTU2_TGIA2          IEN6\r
-#define        IEN_MTU2_TGIB2          IEN7\r
-#define        IEN_TPU9_TGI9A          IEN0\r
-#define        IEN_TPU9_TGI9B          IEN1\r
-#define        IEN_TPU9_TGI9C          IEN2\r
-#define        IEN_TPU9_TGI9D          IEN3\r
-#define        IEN_MTU3_TGIA3          IEN0\r
-#define        IEN_MTU3_TGIB3          IEN1\r
-#define        IEN_MTU3_TGIC3          IEN2\r
-#define        IEN_MTU3_TGID3          IEN3\r
-#define        IEN_TPU10_TGI10A        IEN4\r
-#define        IEN_TPU10_TGI10B        IEN5\r
-#define        IEN_MTU4_TGIA4          IEN4\r
-#define        IEN_MTU4_TGIB4          IEN5\r
-#define        IEN_MTU4_TGIC4          IEN6\r
-#define        IEN_MTU4_TGID4          IEN7\r
-#define        IEN_MTU4_TCIV4          IEN0\r
-#define        IEN_MTU5_TGIU5          IEN1\r
-#define        IEN_MTU5_TGIV5          IEN2\r
-#define        IEN_MTU5_TGIW5          IEN3\r
-#define        IEN_TPU11_TGI11A        IEN4\r
-#define        IEN_TPU11_TGI11B        IEN5\r
-#define        IEN_POE_OEI1            IEN6\r
-#define        IEN_POE_OEI2            IEN7\r
-#define        IEN_TMR0_CMIA0          IEN2\r
-#define        IEN_TMR0_CMIB0          IEN3\r
-#define        IEN_TMR0_OVI0           IEN4\r
-#define        IEN_TMR1_CMIA1          IEN5\r
-#define        IEN_TMR1_CMIB1          IEN6\r
-#define        IEN_TMR1_OVI1           IEN7\r
-#define        IEN_TMR2_CMIA2          IEN0\r
-#define        IEN_TMR2_CMIB2          IEN1\r
-#define        IEN_TMR2_OVI2           IEN2\r
-#define        IEN_TMR3_CMIA3          IEN3\r
-#define        IEN_TMR3_CMIB3          IEN4\r
-#define        IEN_TMR3_OVI3           IEN5\r
-#define        IEN_RIIC0_EEI0          IEN6\r
-#define        IEN_RIIC0_RXI0          IEN7\r
-#define        IEN_RIIC0_TXI0          IEN0\r
-#define        IEN_RIIC0_TEI0          IEN1\r
-#define        IEN_RIIC1_EEI1          IEN2\r
-#define        IEN_RIIC1_RXI1          IEN3\r
-#define        IEN_RIIC1_TXI1          IEN4\r
-#define        IEN_RIIC1_TEI1          IEN5\r
-#define        IEN_RIIC2_EEI2          IEN6\r
-#define        IEN_RIIC2_RXI2          IEN7\r
-#define        IEN_RIIC2_TXI2          IEN0\r
-#define        IEN_RIIC2_TEI2          IEN1\r
-#define        IEN_RIIC3_EEI3          IEN2\r
-#define        IEN_RIIC3_RXI3          IEN3\r
-#define        IEN_RIIC3_TXI3          IEN4\r
-#define        IEN_RIIC3_TEI3          IEN5\r
-#define        IEN_DMAC_DMAC0I         IEN6\r
-#define        IEN_DMAC_DMAC1I         IEN7\r
-#define        IEN_DMAC_DMAC2I         IEN0\r
-#define        IEN_DMAC_DMAC3I         IEN1\r
-#define        IEN_EXDMAC_EXDMAC0I     IEN2\r
-#define        IEN_EXDMAC_EXDMAC1I     IEN3\r
-#define        IEN_SCI0_RXI0           IEN6\r
-#define        IEN_SCI0_TXI0           IEN7\r
-#define        IEN_SCI0_TEI0           IEN0\r
-#define        IEN_SCI1_RXI1           IEN1\r
-#define        IEN_SCI1_TXI1           IEN2\r
-#define        IEN_SCI1_TEI1           IEN3\r
-#define        IEN_SCI2_RXI2           IEN4\r
-#define        IEN_SCI2_TXI2           IEN5\r
-#define        IEN_SCI2_TEI2           IEN6\r
-#define        IEN_SCI3_RXI3           IEN7\r
-#define        IEN_SCI3_TXI3           IEN0\r
-#define        IEN_SCI3_TEI3           IEN1\r
-#define        IEN_SCI4_RXI4           IEN2\r
-#define        IEN_SCI4_TXI4           IEN3\r
-#define        IEN_SCI4_TEI4           IEN4\r
-#define        IEN_SCI5_RXI5           IEN5\r
-#define        IEN_SCI5_TXI5           IEN6\r
-#define        IEN_SCI5_TEI5           IEN7\r
-#define        IEN_SCI6_RXI6           IEN0\r
-#define        IEN_SCI6_TXI6           IEN1\r
-#define        IEN_SCI6_TEI6           IEN2\r
-#define        IEN_SCI7_RXI7           IEN3\r
-#define        IEN_SCI7_TXI7           IEN4\r
-#define        IEN_SCI7_TEI7           IEN5\r
-#define        IEN_SCI8_RXI8           IEN6\r
-#define        IEN_SCI8_TXI8           IEN7\r
-#define        IEN_SCI8_TEI8           IEN0\r
-#define        IEN_SCI9_RXI9           IEN1\r
-#define        IEN_SCI9_TXI9           IEN2\r
-#define        IEN_SCI9_TEI9           IEN3\r
-#define        IEN_SCI10_RXI10         IEN4\r
-#define        IEN_SCI10_TXI10         IEN5\r
-#define        IEN_SCI10_TEI10         IEN6\r
-#define        IEN_SCI11_RXI11         IEN7\r
-#define        IEN_SCI11_TXI11         IEN0\r
-#define        IEN_SCI11_TEI11         IEN1\r
-#define        IEN_SCI12_RXI12         IEN2\r
-#define        IEN_SCI12_TXI12         IEN3\r
-#define        IEN_SCI12_TEI12         IEN4\r
-#define        IEN_IEB_IEBINT          IEN5\r
-\r
-#define        VECT_BSC_BUSERR         16\r
-#define        VECT_FCU_FIFERR         21\r
-#define        VECT_FCU_FRDYI          23\r
-#define        VECT_ICU_SWINT          27\r
-#define        VECT_CMT0_CMI0          28\r
-#define        VECT_CMT1_CMI1          29\r
-#define        VECT_CMT2_CMI2          30\r
-#define        VECT_CMT3_CMI3          31\r
-#define        VECT_ETHER_EINT         32\r
-#define        VECT_USB0_D0FIFO0       33\r
-#define        VECT_USB0_D1FIFO0       34\r
-#define        VECT_USB0_USBI0         35\r
-#define        VECT_USB1_D0FIFO1       36\r
-#define        VECT_USB1_D1FIFO1       37\r
-#define        VECT_USB1_USBI1         38\r
-#define        VECT_RSPI0_SPRI0        39\r
-#define        VECT_RSPI0_SPTI0        40\r
-#define        VECT_RSPI0_SPII0        41\r
-#define        VECT_RSPI1_SPRI1        42\r
-#define        VECT_RSPI1_SPTI1        43\r
-#define        VECT_RSPI1_SPII1        44\r
-#define        VECT_RSPI2_SPRI2        45\r
-#define        VECT_RSPI2_SPTI2        46\r
-#define        VECT_RSPI2_SPII2        47\r
-#define        VECT_CAN0_RXF0          48\r
-#define        VECT_CAN0_TXF0          49\r
-#define        VECT_CAN0_RXM0          50\r
-#define        VECT_CAN0_TXM0          51\r
-#define        VECT_CAN1_RXF1          52\r
-#define        VECT_CAN1_TXF1          53\r
-#define        VECT_CAN1_RXM1          54\r
-#define        VECT_CAN1_TXM1          55\r
-#define        VECT_CAN2_RXF2          56\r
-#define        VECT_CAN2_TXF2          57\r
-#define        VECT_CAN2_RXM2          58\r
-#define        VECT_CAN2_TXM2          59\r
-#define        VECT_RTC_COUNTUP        62\r
-#define        VECT_ICU_IRQ0           64\r
-#define        VECT_ICU_IRQ1           65\r
-#define        VECT_ICU_IRQ2           66\r
-#define        VECT_ICU_IRQ3           67\r
-#define        VECT_ICU_IRQ4           68\r
-#define        VECT_ICU_IRQ5           69\r
-#define        VECT_ICU_IRQ6           70\r
-#define        VECT_ICU_IRQ7           71\r
-#define        VECT_ICU_IRQ8           72\r
-#define        VECT_ICU_IRQ9           73\r
-#define        VECT_ICU_IRQ10          74\r
-#define        VECT_ICU_IRQ11          75\r
-#define        VECT_ICU_IRQ12          76\r
-#define        VECT_ICU_IRQ13          77\r
-#define        VECT_ICU_IRQ14          78\r
-#define        VECT_ICU_IRQ15          79\r
-#define        VECT_USB_USBR0          90\r
-#define        VECT_USB_USBR1          91\r
-#define        VECT_RTC_ALARM          92\r
-#define        VECT_RTC_PRD            93\r
-#define        VECT_AD0_ADI0           98\r
-#define        VECT_S12AD0_S12ADI0     102\r
-#define        VECT_ICU_GROUPE0        106\r
-#define        VECT_ICU_GROUPE1        107\r
-#define        VECT_ICU_GROUPE2        108\r
-#define        VECT_ICU_GROUPE3        109\r
-#define        VECT_ICU_GROUPE4        110\r
-#define        VECT_ICU_GROUPE5        111\r
-#define        VECT_ICU_GROUPE6        112\r
-#define        VECT_ICU_GROUPL0        114\r
-#define        VECT_SCIX_SCIX0         122\r
-#define        VECT_SCIX_SCIX1         123\r
-#define        VECT_SCIX_SCIX2         124\r
-#define        VECT_SCIX_SCIX3         125\r
-#define        VECT_TPU0_TGI0A         126\r
-#define        VECT_TPU0_TGI0B         127\r
-#define        VECT_TPU0_TGI0C         128\r
-#define        VECT_TPU0_TGI0D         129\r
-#define        VECT_TPU1_TGI1A         130\r
-#define        VECT_TPU1_TGI1B         131\r
-#define        VECT_TPU2_TGI2A         132\r
-#define        VECT_TPU2_TGI2B         133\r
-#define        VECT_TPU3_TGI3A         134\r
-#define        VECT_TPU3_TGI3B         135\r
-#define        VECT_TPU3_TGI3C         136\r
-#define        VECT_TPU3_TGI3D         137\r
-#define        VECT_TPU4_TGI4A         138\r
-#define        VECT_TPU4_TGI4B         139\r
-#define        VECT_TPU5_TGI5A         140\r
-#define        VECT_TPU5_TGI5B         141\r
-#define        VECT_TPU6_TGI6A         142\r
-#define        VECT_TPU6_TGI6B         143\r
-#define        VECT_TPU6_TGI6C         144\r
-#define        VECT_TPU6_TGI6D         145\r
-#define        VECT_MTU0_TGIA0         142\r
-#define        VECT_MTU0_TGIB0         143\r
-#define        VECT_MTU0_TGIC0         144\r
-#define        VECT_MTU0_TGID0         145\r
-#define        VECT_MTU0_TGIE0         146\r
-#define        VECT_MTU0_TGIF0         147\r
-#define        VECT_TPU7_TGI7A         148\r
-#define        VECT_TPU7_TGI7B         149\r
-#define        VECT_MTU1_TGIA1         148\r
-#define        VECT_MTU1_TGIB1         149\r
-#define        VECT_TPU8_TGI8A         150\r
-#define        VECT_TPU8_TGI8B         151\r
-#define        VECT_MTU2_TGIA2         150\r
-#define        VECT_MTU2_TGIB2         151\r
-#define        VECT_TPU9_TGI9A         152\r
-#define        VECT_TPU9_TGI9B         153\r
-#define        VECT_TPU9_TGI9C         154\r
-#define        VECT_TPU9_TGI9D         155\r
-#define        VECT_MTU3_TGIA3         152\r
-#define        VECT_MTU3_TGIB3         153\r
-#define        VECT_MTU3_TGIC3         154\r
-#define        VECT_MTU3_TGID3         155\r
-#define        VECT_TPU10_TGI10A       156\r
-#define        VECT_TPU10_TGI10B       157\r
-#define        VECT_MTU4_TGIA4         156\r
-#define        VECT_MTU4_TGIB4         157\r
-#define        VECT_MTU4_TGIC4         158\r
-#define        VECT_MTU4_TGID4         159\r
-#define        VECT_MTU4_TCIV4         160\r
-#define        VECT_MTU5_TGIU5         161\r
-#define        VECT_MTU5_TGIV5         162\r
-#define        VECT_MTU5_TGIW5         163\r
-#define        VECT_TPU11_TGI11A       164\r
-#define        VECT_TPU11_TGI11B       165\r
-#define        VECT_POE_OEI1           166\r
-#define        VECT_POE_OEI2           167\r
-#define        VECT_TMR0_CMIA0         170\r
-#define        VECT_TMR0_CMIB0         171\r
-#define        VECT_TMR0_OVI0          172\r
-#define        VECT_TMR1_CMIA1         173\r
-#define        VECT_TMR1_CMIB1         174\r
-#define        VECT_TMR1_OVI1          175\r
-#define        VECT_TMR2_CMIA2         176\r
-#define        VECT_TMR2_CMIB2         177\r
-#define        VECT_TMR2_OVI2          178\r
-#define        VECT_TMR3_CMIA3         179\r
-#define        VECT_TMR3_CMIB3         180\r
-#define        VECT_TMR3_OVI3          181\r
-#define        VECT_RIIC0_EEI0         182\r
-#define        VECT_RIIC0_RXI0         183\r
-#define        VECT_RIIC0_TXI0         184\r
-#define        VECT_RIIC0_TEI0         185\r
-#define        VECT_RIIC1_EEI1         186\r
-#define        VECT_RIIC1_RXI1         187\r
-#define        VECT_RIIC1_TXI1         188\r
-#define        VECT_RIIC1_TEI1         189\r
-#define        VECT_RIIC2_EEI2         190\r
-#define        VECT_RIIC2_RXI2         191\r
-#define        VECT_RIIC2_TXI2         192\r
-#define        VECT_RIIC2_TEI2         193\r
-#define        VECT_RIIC3_EEI3         194\r
-#define        VECT_RIIC3_RXI3         195\r
-#define        VECT_RIIC3_TXI3         196\r
-#define        VECT_RIIC3_TEI3         197\r
-#define        VECT_DMAC_DMAC0I        198\r
-#define        VECT_DMAC_DMAC1I        199\r
-#define        VECT_DMAC_DMAC2I        200\r
-#define        VECT_DMAC_DMAC3I        201\r
-#define        VECT_EXDMAC_EXDMAC0I    202\r
-#define        VECT_EXDMAC_EXDMAC1I    203\r
-#define        VECT_SCI0_RXI0          214\r
-#define        VECT_SCI0_TXI0          215\r
-#define        VECT_SCI0_TEI0          216\r
-#define        VECT_SCI1_RXI1          217\r
-#define        VECT_SCI1_TXI1          218\r
-#define        VECT_SCI1_TEI1          219\r
-#define        VECT_SCI2_RXI2          220\r
-#define        VECT_SCI2_TXI2          221\r
-#define        VECT_SCI2_TEI2          222\r
-#define        VECT_SCI3_RXI3          223\r
-#define        VECT_SCI3_TXI3          224\r
-#define        VECT_SCI3_TEI3          225\r
-#define        VECT_SCI4_RXI4          226\r
-#define        VECT_SCI4_TXI4          227\r
-#define        VECT_SCI4_TEI4          228\r
-#define        VECT_SCI5_RXI5          229\r
-#define        VECT_SCI5_TXI5          230\r
-#define        VECT_SCI5_TEI5          231\r
-#define        VECT_SCI6_RXI6          232\r
-#define        VECT_SCI6_TXI6          233\r
-#define        VECT_SCI6_TEI6          234\r
-#define        VECT_SCI7_RXI7          235\r
-#define        VECT_SCI7_TXI7          236\r
-#define        VECT_SCI7_TEI7          237\r
-#define        VECT_SCI8_RXI8          238\r
-#define        VECT_SCI8_TXI8          239\r
-#define        VECT_SCI8_TEI8          240\r
-#define        VECT_SCI9_RXI9          241\r
-#define        VECT_SCI9_TXI9          242\r
-#define        VECT_SCI9_TEI9          243\r
-#define        VECT_SCI10_RXI10        244\r
-#define        VECT_SCI10_TXI10        245\r
-#define        VECT_SCI10_TEI10        246\r
-#define        VECT_SCI11_RXI11        247\r
-#define        VECT_SCI11_TXI11        248\r
-#define        VECT_SCI11_TEI11        249\r
-#define        VECT_SCI12_RXI12        250\r
-#define        VECT_SCI12_TXI12        251\r
-#define        VECT_SCI12_TEI12        252\r
-#define        VECT_IEB_IEBINT         253\r
-\r
-#define        MSTP_DMAC       SYSTEM.MSTPCRA.BIT.MSTPA28\r
-#define        MSTP_DMAC0      SYSTEM.MSTPCRA.BIT.MSTPA28\r
-#define        MSTP_DMAC1      SYSTEM.MSTPCRA.BIT.MSTPA28\r
-#define        MSTP_DMAC2      SYSTEM.MSTPCRA.BIT.MSTPA28\r
-#define        MSTP_DMAC3      SYSTEM.MSTPCRA.BIT.MSTPA28\r
-#define        MSTP_DTC        SYSTEM.MSTPCRA.BIT.MSTPA28\r
-#define        MSTP_AD         SYSTEM.MSTPCRA.BIT.MSTPA23\r
-#define        MSTP_DA         SYSTEM.MSTPCRA.BIT.MSTPA19\r
-#define        MSTP_S12AD      SYSTEM.MSTPCRA.BIT.MSTPA17\r
-#define        MSTP_CMT0       SYSTEM.MSTPCRA.BIT.MSTPA15\r
-#define        MSTP_CMT1       SYSTEM.MSTPCRA.BIT.MSTPA15\r
-#define        MSTP_CMT2       SYSTEM.MSTPCRA.BIT.MSTPA14\r
-#define        MSTP_CMT3       SYSTEM.MSTPCRA.BIT.MSTPA14\r
-#define        MSTP_TPU0       SYSTEM.MSTPCRA.BIT.MSTPA13\r
-#define        MSTP_TPU1       SYSTEM.MSTPCRA.BIT.MSTPA13\r
-#define        MSTP_TPU2       SYSTEM.MSTPCRA.BIT.MSTPA13\r
-#define        MSTP_TPU3       SYSTEM.MSTPCRA.BIT.MSTPA13\r
-#define        MSTP_TPU4       SYSTEM.MSTPCRA.BIT.MSTPA13\r
-#define        MSTP_TPU5       SYSTEM.MSTPCRA.BIT.MSTPA13\r
-#define        MSTP_TPU6       SYSTEM.MSTPCRA.BIT.MSTPA12\r
-#define        MSTP_TPU7       SYSTEM.MSTPCRA.BIT.MSTPA12\r
-#define        MSTP_TPU8       SYSTEM.MSTPCRA.BIT.MSTPA12\r
-#define        MSTP_TPU9       SYSTEM.MSTPCRA.BIT.MSTPA12\r
-#define        MSTP_TPU10      SYSTEM.MSTPCRA.BIT.MSTPA12\r
-#define        MSTP_TPU11      SYSTEM.MSTPCRA.BIT.MSTPA12\r
-#define        MSTP_PPG0       SYSTEM.MSTPCRA.BIT.MSTPA11\r
-#define        MSTP_PPG1       SYSTEM.MSTPCRA.BIT.MSTPA10\r
-#define        MSTP_MTU        SYSTEM.MSTPCRA.BIT.MSTPA9\r
-#define        MSTP_MTU0       SYSTEM.MSTPCRA.BIT.MSTPA9\r
-#define        MSTP_MTU1       SYSTEM.MSTPCRA.BIT.MSTPA9\r
-#define        MSTP_MTU2       SYSTEM.MSTPCRA.BIT.MSTPA9\r
-#define        MSTP_MTU3       SYSTEM.MSTPCRA.BIT.MSTPA9\r
-#define        MSTP_MTU4       SYSTEM.MSTPCRA.BIT.MSTPA9\r
-#define        MSTP_MTU5       SYSTEM.MSTPCRA.BIT.MSTPA9\r
-#define        MSTP_TMR0       SYSTEM.MSTPCRA.BIT.MSTPA5\r
-#define        MSTP_TMR1       SYSTEM.MSTPCRA.BIT.MSTPA5\r
-#define        MSTP_TMR01      SYSTEM.MSTPCRA.BIT.MSTPA5\r
-#define        MSTP_TMR2       SYSTEM.MSTPCRA.BIT.MSTPA4\r
-#define        MSTP_TMR3       SYSTEM.MSTPCRA.BIT.MSTPA4\r
-#define        MSTP_TMR23      SYSTEM.MSTPCRA.BIT.MSTPA4\r
-#define        MSTP_SCI0       SYSTEM.MSTPCRB.BIT.MSTPB31\r
-#define        MSTP_SMCI0      SYSTEM.MSTPCRB.BIT.MSTPB31\r
-#define        MSTP_SCI1       SYSTEM.MSTPCRB.BIT.MSTPB30\r
-#define        MSTP_SMCI1      SYSTEM.MSTPCRB.BIT.MSTPB30\r
-#define        MSTP_SCI2       SYSTEM.MSTPCRB.BIT.MSTPB29\r
-#define        MSTP_SMCI2      SYSTEM.MSTPCRB.BIT.MSTPB29\r
-#define        MSTP_SCI3       SYSTEM.MSTPCRB.BIT.MSTPB28\r
-#define        MSTP_SMCI3      SYSTEM.MSTPCRB.BIT.MSTPB28\r
-#define        MSTP_SCI4       SYSTEM.MSTPCRB.BIT.MSTPB27\r
-#define        MSTP_SMCI4      SYSTEM.MSTPCRB.BIT.MSTPB27\r
-#define        MSTP_SCI5       SYSTEM.MSTPCRB.BIT.MSTPB26\r
-#define        MSTP_SMCI5      SYSTEM.MSTPCRB.BIT.MSTPB26\r
-#define        MSTP_SCI6       SYSTEM.MSTPCRB.BIT.MSTPB25\r
-#define        MSTP_SMCI6      SYSTEM.MSTPCRB.BIT.MSTPB25\r
-#define        MSTP_SCI7       SYSTEM.MSTPCRB.BIT.MSTPB24\r
-#define        MSTP_SMCI7      SYSTEM.MSTPCRB.BIT.MSTPB24\r
-#define        MSTP_CRC        SYSTEM.MSTPCRB.BIT.MSTPB23\r
-#define        MSTP_RIIC0      SYSTEM.MSTPCRB.BIT.MSTPB21\r
-#define        MSTP_RIIC1      SYSTEM.MSTPCRB.BIT.MSTPB20\r
-#define        MSTP_USB0       SYSTEM.MSTPCRB.BIT.MSTPB19\r
-#define        MSTP_RSPI0      SYSTEM.MSTPCRB.BIT.MSTPB17\r
-#define        MSTP_RSPI1      SYSTEM.MSTPCRB.BIT.MSTPB16\r
-#define        MSTP_TEMPS      SYSTEM.MSTPCRB.BIT.MSTPB8\r
-#define        MSTP_SCI12      SYSTEM.MSTPCRB.BIT.MSTPB4\r
-#define        MSTP_SMCI12     SYSTEM.MSTPCRB.BIT.MSTPB4\r
-#define        MSTP_CAN2       SYSTEM.MSTPCRB.BIT.MSTPB2\r
-#define        MSTP_CAN1       SYSTEM.MSTPCRB.BIT.MSTPB1\r
-#define        MSTP_CAN0       SYSTEM.MSTPCRB.BIT.MSTPB0\r
-#define        MSTP_SCI8       SYSTEM.MSTPCRC.BIT.MSTPC27\r
-#define        MSTP_SMCI8      SYSTEM.MSTPCRC.BIT.MSTPC27\r
-#define        MSTP_SCI9       SYSTEM.MSTPCRC.BIT.MSTPC26\r
-#define        MSTP_SMCI9      SYSTEM.MSTPCRC.BIT.MSTPC26\r
-#define        MSTP_SCI10      SYSTEM.MSTPCRC.BIT.MSTPC25\r
-#define        MSTP_SMCI10     SYSTEM.MSTPCRC.BIT.MSTPC25\r
-#define        MSTP_SCI11      SYSTEM.MSTPCRC.BIT.MSTPC24\r
-#define        MSTP_SMCI11     SYSTEM.MSTPCRC.BIT.MSTPC24\r
-#define        MSTP_RSPI2      SYSTEM.MSTPCRC.BIT.MSTPC22\r
-#define        MSTP_LVD        SYSTEM.MSTPCRC.BIT.MSTPC20\r
-#define        MSTP_IEB        SYSTEM.MSTPCRC.BIT.MSTPC18\r
-#define        MSTP_RIIC2      SYSTEM.MSTPCRC.BIT.MSTPC17\r
-#define        MSTP_RIIC3      SYSTEM.MSTPCRC.BIT.MSTPC16\r
-#define        MSTP_RAM1       SYSTEM.MSTPCRC.BIT.MSTPC1\r
-#define        MSTP_RAM0       SYSTEM.MSTPCRC.BIT.MSTPC0\r
-\r
-#define        IS_CAN0_ERS0            IS0\r
-#define        IS_CAN1_ERS1            IS1\r
-#define        IS_CAN2_ERS2            IS2\r
-#define        IS_MTU0_TCIV0           IS0\r
-#define        IS_MTU1_TCIV1           IS1\r
-#define        IS_MTU1_TCIU1           IS2\r
-#define        IS_MTU2_TCIV2           IS0\r
-#define        IS_MTU2_TCIU2           IS1\r
-#define        IS_MTU3_TCIV3           IS2\r
-#define        IS_TPU0_TCI0V           IS0\r
-#define        IS_TPU1_TCI1V           IS1\r
-#define        IS_TPU1_TCI1U           IS2\r
-#define        IS_TPU5_TCI5V           IS3\r
-#define        IS_TPU5_TCI5U           IS4\r
-#define        IS_TPU2_TCI2V           IS0\r
-#define        IS_TPU2_TCI2U           IS1\r
-#define        IS_TPU3_TCI3V           IS2\r
-#define        IS_TPU4_TCI4V           IS3\r
-#define        IS_TPU4_TCI4U           IS4\r
-#define        IS_TPU6_TCI6V           IS0\r
-#define        IS_TPU7_TCI7V           IS1\r
-#define        IS_TPU7_TCI7U           IS2\r
-#define        IS_TPU11_TCI11V         IS3\r
-#define        IS_TPU11_TCI11U         IS4\r
-#define        IS_TPU8_TCI8V           IS0\r
-#define        IS_TPU8_TCI8U           IS1\r
-#define        IS_TPU9_TCI9V           IS2\r
-#define        IS_TPU10_TCI10V         IS3\r
-#define        IS_TPU10_TCI10U         IS4\r
-#define        IS_SCI0_ERI0            IS0\r
-#define        IS_SCI1_ERI1            IS1\r
-#define        IS_SCI2_ERI2            IS2\r
-#define        IS_SCI3_ERI3            IS3\r
-#define        IS_SCI4_ERI4            IS4\r
-#define        IS_SCI5_ERI5            IS5\r
-#define        IS_SCI6_ERI6            IS6\r
-#define        IS_SCI7_ERI7            IS7\r
-#define        IS_SCI8_ERI8            IS8\r
-#define        IS_SCI9_ERI9            IS9\r
-#define        IS_SCI10_ERI10          IS10\r
-#define        IS_SCI11_ERI11          IS11\r
-#define        IS_SCI12_ERI12          IS12\r
-#define        IS_RSPI0_SPEI0          IS13\r
-#define        IS_RSPI1_SPEI1          IS14\r
-#define        IS_RSPI2_SPEI2          IS15\r
-\r
-#define        EN_CAN0_ERS0            EN0\r
-#define        EN_CAN1_ERS1            EN1\r
-#define        EN_CAN2_ERS2            EN2\r
-#define        EN_MTU0_TCIV0           EN0\r
-#define        EN_MTU1_TCIV1           EN1\r
-#define        EN_MTU1_TCIU1           EN2\r
-#define        EN_MTU2_TCIV2           EN0\r
-#define        EN_MTU2_TCIU2           EN1\r
-#define        EN_MTU3_TCIV3           EN2\r
-#define        EN_TPU0_TCI0V           EN0\r
-#define        EN_TPU1_TCI1V           EN1\r
-#define        EN_TPU1_TCI1U           EN2\r
-#define        EN_TPU5_TCI5V           EN3\r
-#define        EN_TPU5_TCI5U           EN4\r
-#define        EN_TPU2_TCI2V           EN0\r
-#define        EN_TPU2_TCI2U           EN1\r
-#define        EN_TPU3_TCI3V           EN2\r
-#define        EN_TPU4_TCI4V           EN3\r
-#define        EN_TPU4_TCI4U           EN4\r
-#define        EN_TPU6_TCI6V           EN0\r
-#define        EN_TPU7_TCI7V           EN1\r
-#define        EN_TPU7_TCI7U           EN2\r
-#define        EN_TPU11_TCI11V         EN3\r
-#define        EN_TPU11_TCI11U         EN4\r
-#define        EN_TPU8_TCI8V           EN0\r
-#define        EN_TPU8_TCI8U           EN1\r
-#define        EN_TPU9_TCI9V           EN2\r
-#define        EN_TPU10_TCI10V         EN3\r
-#define        EN_TPU10_TCI10U         EN4\r
-#define        EN_SCI0_ERI0            EN0\r
-#define        EN_SCI1_ERI1            EN1\r
-#define        EN_SCI2_ERI2            EN2\r
-#define        EN_SCI3_ERI3            EN3\r
-#define        EN_SCI4_ERI4            EN4\r
-#define        EN_SCI5_ERI5            EN5\r
-#define        EN_SCI6_ERI6            EN6\r
-#define        EN_SCI7_ERI7            EN7\r
-#define        EN_SCI8_ERI8            EN8\r
-#define        EN_SCI9_ERI9            EN9\r
-#define        EN_SCI10_ERI10          EN10\r
-#define        EN_SCI11_ERI11          EN11\r
-#define        EN_SCI12_ERI12          EN12\r
-#define        EN_RSPI0_SPEI0          EN13\r
-#define        EN_RSPI1_SPEI1          EN14\r
-#define        EN_RSPI2_SPEI2          EN15\r
-\r
-#define        CLR_CAN0_ERS0           CLR0\r
-#define        CLR_CAN1_ERS1           CLR1\r
-#define        CLR_CAN2_ERS2           CLR2\r
-#define        CLR_MTU0_TCIV0          CLR0\r
-#define        CLR_MTU1_TCIV1          CLR1\r
-#define        CLR_MTU1_TCIU1          CLR2\r
-#define        CLR_MTU2_TCIV2          CLR0\r
-#define        CLR_MTU2_TCIU2          CLR1\r
-#define        CLR_MTU3_TCIV3          CLR2\r
-#define        CLR_TPU0_TCI0V          CLR0\r
-#define        CLR_TPU1_TCI1V          CLR1\r
-#define        CLR_TPU1_TCI1U          CLR2\r
-#define        CLR_TPU5_TCI5V          CLR3\r
-#define        CLR_TPU5_TCI5U          CLR4\r
-#define        CLR_TPU2_TCI2V          CLR0\r
-#define        CLR_TPU2_TCI2U          CLR1\r
-#define        CLR_TPU3_TCI3V          CLR2\r
-#define        CLR_TPU4_TCI4V          CLR3\r
-#define        CLR_TPU4_TCI4U          CLR4\r
-#define        CLR_TPU6_TCI6V          CLR0\r
-#define        CLR_TPU7_TCI7V          CLR1\r
-#define        CLR_TPU7_TCI7U          CLR2\r
-#define        CLR_TPU11_TCI11V        CLR3\r
-#define        CLR_TPU11_TCI11U        CLR4\r
-#define        CLR_TPU8_TCI8V          CLR0\r
-#define        CLR_TPU8_TCI8U          CLR1\r
-#define        CLR_TPU9_TCI9V          CLR2\r
-#define        CLR_TPU10_TCI10V        CLR3\r
-#define        CLR_TPU10_TCI10U        CLR4\r
-#define        CLR_SCI0_ERI0           CLR0\r
-#define        CLR_SCI1_ERI1           CLR1\r
-#define        CLR_SCI2_ERI2           CLR2\r
-#define        CLR_SCI3_ERI3           CLR3\r
-#define        CLR_SCI4_ERI4           CLR4\r
-#define        CLR_SCI5_ERI5           CLR5\r
-#define        CLR_SCI6_ERI6           CLR6\r
-#define        CLR_SCI7_ERI7           CLR7\r
-#define        CLR_SCI8_ERI8           CLR8\r
-#define        CLR_SCI9_ERI9           CLR9\r
-#define        CLR_SCI10_ERI10         CLR10\r
-#define        CLR_SCI11_ERI11         CLR11\r
-#define        CLR_SCI12_ERI12         CLR12\r
-#define        CLR_RSPI0_SPEI0         CLR13\r
-#define        CLR_RSPI1_SPEI1         CLR14\r
-#define        CLR_RSPI2_SPEI2         CLR15\r
-\r
-#define        CN_TPU6_TGI6A           CN0\r
-#define        CN_TPU6_TGI6B           CN0\r
-#define        CN_TPU6_TGI6C           CN0\r
-#define        CN_TPU6_TGI6D           CN0\r
-#define        CN_MTU0_TGIA0           CN0\r
-#define        CN_MTU0_TGIB0           CN0\r
-#define        CN_MTU0_TGIC0           CN0\r
-#define        CN_MTU0_TGID0           CN0\r
-#define        CN_MTU0_TGIE0           CN0\r
-#define        CN_MTU0_TGIF0           CN0\r
-#define        CN_TPU7_TGI7A           CN1\r
-#define        CN_TPU7_TGI7B           CN1\r
-#define        CN_MTU1_TGIA1           CN1\r
-#define        CN_MTU1_TGIB1           CN1\r
-#define        CN_TPU8_TGI8A           CN2\r
-#define        CN_TPU8_TGI8B           CN2\r
-#define        CN_MTU2_TGIA2           CN2\r
-#define        CN_MTU2_TGIB2           CN2\r
-#define        CN_TPU9_TGI9A           CN3\r
-#define        CN_TPU9_TGI9B           CN3\r
-#define        CN_TPU9_TGI9C           CN3\r
-#define        CN_TPU9_TGI9D           CN3\r
-#define        CN_MTU3_TGIA3           CN3\r
-#define        CN_MTU3_TGIB3           CN3\r
-#define        CN_MTU3_TGIC3           CN3\r
-#define        CN_MTU3_TGID3           CN3\r
-#define        CN_TPU10_TGI10A         CN4\r
-#define        CN_TPU10_TGI10B         CN4\r
-#define        CN_MTU4_TGIA4           CN4\r
-#define        CN_MTU4_TGIB4           CN4\r
-#define        CN_MTU4_TGIC4           CN4\r
-#define        CN_MTU4_TGID4           CN4\r
-#define        CN_MTU4_TGIV4           CN4\r
-#define        CN_TPU11_TGI11A         CN5\r
-#define        CN_TPU11_TGI11B         CN5\r
-#define        CN_MTU5_TGIU5           CN5\r
-#define        CN_MTU5_TGIV5           CN5\r
-#define        CN_MTU5_TGIW5           CN5\r
-#define        CN_TPU6_                        CN0\r
-#define        CN_MTU0_                        CN0\r
-#define        CN_TPU7_                        CN1\r
-#define        CN_MTU1_                        CN1\r
-#define        CN_TPU8_                        CN2\r
-#define        CN_MTU2_                        CN2\r
-#define        CN_TPU9_                        CN3\r
-#define        CN_MTU3_                        CN3\r
-#define        CN_TPU10_                       CN4\r
-#define        CN_MTU4_                        CN4\r
-#define        CN_TPU11_                       CN5\r
-#define        CN_MTU5_                        CN5\r
-\r
-#define        __IR( x )               ICU.IR[ IR ## x ].BIT.IR\r
-#define         _IR( x )               __IR( x )\r
-#define          IR( x , y )   _IR( _ ## x ## _ ## y )\r
-#define        __DTCE( x )             ICU.DTCER[ DTCE ## x ].BIT.DTCE\r
-#define         _DTCE( x )             __DTCE( x )\r
-#define          DTCE( x , y ) _DTCE( _ ## x ## _ ## y )\r
-#define        __IEN( x )              ICU.IER[ IER ## x ].BIT.IEN ## x\r
-#define         _IEN( x )              __IEN( x )\r
-#define          IEN( x , y )  _IEN( _ ## x ## _ ## y )\r
-#define        __IPR( x )              ICU.IPR[ IPR ## x ].BIT.IPR\r
-#define         _IPR( x )              __IPR( x )\r
-#define          IPR( x , y )  _IPR( _ ## x ## _ ## y )\r
-#define        __VECT( x )             VECT ## x\r
-#define         _VECT( x )             __VECT( x )\r
-#define          VECT( x , y ) _VECT( _ ## x ## _ ## y )\r
-#define        __MSTP( x )             MSTP ## x\r
-#define         _MSTP( x )             __MSTP( x )\r
-#define          MSTP( x )             _MSTP( _ ## x )\r
-\r
-#define        __IS( x )               ICU.GRP[ GRP ## x ].BIT.IS ## x\r
-#define         _IS( x )               __IS( x )\r
-#define          IS( x , y )   _IS( _ ## x ## _ ## y )\r
-#define        __EN( x )               ICU.GEN[ GEN ## x ].BIT.EN ## x\r
-#define         _EN( x )               __EN( x )\r
-#define          EN( x , y )   _EN( _ ## x ## _ ## y )\r
-#define        __CLR( x )              ICU.GCR[ GCR ## x ].BIT.CLR ## x\r
-#define         _CLR( x )              __CLR( x )\r
-#define          CLR( x , y )  _CLR( _ ## x ## _ ## y )\r
-#define        __CN( x )               ICU.SEL.BIT.CN ## x\r
-#define         _CN( x )               __CN( x )\r
-#define          CN( x , y )   _CN( _ ## x ## _ ## y )\r
-\r
-#define        AD              (*(volatile struct st_ad      __evenaccess *)0x89800)\r
-#define        BSC             (*(volatile struct st_bsc     __evenaccess *)0x81300)\r
-#define        CAN0    (*(volatile struct st_can     __evenaccess *)0x90200)\r
-#define        CAN1    (*(volatile struct st_can     __evenaccess *)0x91200)\r
-#define        CAN2    (*(volatile struct st_can     __evenaccess *)0x92200)\r
-#define        CMT             (*(volatile struct st_cmt     __evenaccess *)0x88000)\r
-#define        CMT0    (*(volatile struct st_cmt0    __evenaccess *)0x88002)\r
-#define        CMT1    (*(volatile struct st_cmt0    __evenaccess *)0x88008)\r
-#define        CMT2    (*(volatile struct st_cmt0    __evenaccess *)0x88012)\r
-#define        CMT3    (*(volatile struct st_cmt0    __evenaccess *)0x88018)\r
-#define        CRC             (*(volatile struct st_crc     __evenaccess *)0x88280)\r
-#define        DA              (*(volatile struct st_da      __evenaccess *)0x880C0)\r
-#define        DMAC    (*(volatile struct st_dmac    __evenaccess *)0x82200)\r
-#define        DMAC0   (*(volatile struct st_dmac0   __evenaccess *)0x82000)\r
-#define        DMAC1   (*(volatile struct st_dmac1   __evenaccess *)0x82040)\r
-#define        DMAC2   (*(volatile struct st_dmac1   __evenaccess *)0x82080)\r
-#define        DMAC3   (*(volatile struct st_dmac1   __evenaccess *)0x820C0)\r
-#define        DTC             (*(volatile struct st_dtc     __evenaccess *)0x82400)\r
-#define        EDMAC   (*(volatile struct st_edmac   __evenaccess *)0xC0000)\r
-#define        ETHERC  (*(volatile struct st_etherc  __evenaccess *)0xC0100)\r
-#define        EXDMAC  (*(volatile struct st_exdmac  __evenaccess *)0x82A00)\r
-#define        EXDMAC0 (*(volatile struct st_exdmac0 __evenaccess *)0x82800)\r
-#define        EXDMAC1 (*(volatile struct st_exdmac1 __evenaccess *)0x82840)\r
-#define        FLASH   (*(volatile struct st_flash   __evenaccess *)0x8C296)\r
-#define        ICU             (*(volatile struct st_icu     __evenaccess *)0x87000)\r
-#define        IEB             (*(volatile struct st_ieb     __evenaccess *)0x8A800)\r
-#define        IWDT    (*(volatile struct st_iwdt    __evenaccess *)0x88030)\r
-#define        MPC             (*(volatile struct st_mpc     __evenaccess *)0x8C100)\r
-#define        MTU             (*(volatile struct st_mtu     __evenaccess *)0x8860A)\r
-#define        MTU0    (*(volatile struct st_mtu0    __evenaccess *)0x88690)\r
-#define        MTU1    (*(volatile struct st_mtu1    __evenaccess *)0x88690)\r
-#define        MTU2    (*(volatile struct st_mtu2    __evenaccess *)0x88692)\r
-#define        MTU3    (*(volatile struct st_mtu3    __evenaccess *)0x88600)\r
-#define        MTU4    (*(volatile struct st_mtu4    __evenaccess *)0x88600)\r
-#define        MTU5    (*(volatile struct st_mtu5    __evenaccess *)0x88694)\r
-#define        POE             (*(volatile struct st_poe     __evenaccess *)0x88900)\r
-#define        PORT0   (*(volatile struct st_port0   __evenaccess *)0x8C000)\r
-#define        PORT1   (*(volatile struct st_port1   __evenaccess *)0x8C001)\r
-#define        PORT2   (*(volatile struct st_port2   __evenaccess *)0x8C002)\r
-#define        PORT3   (*(volatile struct st_port3   __evenaccess *)0x8C003)\r
-#define        PORT4   (*(volatile struct st_port4   __evenaccess *)0x8C004)\r
-#define        PORT5   (*(volatile struct st_port5   __evenaccess *)0x8C005)\r
-#define        PORT6   (*(volatile struct st_port6   __evenaccess *)0x8C006)\r
-#define        PORT7   (*(volatile struct st_port7   __evenaccess *)0x8C007)\r
-#define        PORT8   (*(volatile struct st_port8   __evenaccess *)0x8C008)\r
-#define        PORT9   (*(volatile struct st_port9   __evenaccess *)0x8C009)\r
-#define        PORTA   (*(volatile struct st_porta   __evenaccess *)0x8C00A)\r
-#define        PORTB   (*(volatile struct st_portb   __evenaccess *)0x8C00B)\r
-#define        PORTC   (*(volatile struct st_portc   __evenaccess *)0x8C00C)\r
-#define        PORTD   (*(volatile struct st_portd   __evenaccess *)0x8C00D)\r
-#define        PORTE   (*(volatile struct st_porte   __evenaccess *)0x8C00E)\r
-#define        PORTF   (*(volatile struct st_portf   __evenaccess *)0x8C00F)\r
-#define        PORTG   (*(volatile struct st_portg   __evenaccess *)0x8C010)\r
-#define        PORTH   (*(volatile struct st_porth   __evenaccess *)0x8C0D1)\r
-#define        PORTJ   (*(volatile struct st_portj   __evenaccess *)0x8C012)\r
-#define        PPG0    (*(volatile struct st_ppg0    __evenaccess *)0x881E6)\r
-#define        PPG1    (*(volatile struct st_ppg1    __evenaccess *)0x881F0)\r
-#define        RIIC0   (*(volatile struct st_riic0   __evenaccess *)0x88300)\r
-#define        RIIC1   (*(volatile struct st_riic1   __evenaccess *)0x88320)\r
-#define        RIIC2   (*(volatile struct st_riic1   __evenaccess *)0x88340)\r
-#define        RIIC3   (*(volatile struct st_riic1   __evenaccess *)0x88360)\r
-#define        RSPI0   (*(volatile struct st_rspi    __evenaccess *)0x88380)\r
-#define        RSPI1   (*(volatile struct st_rspi    __evenaccess *)0x883A0)\r
-#define        RSPI2   (*(volatile struct st_rspi    __evenaccess *)0x883C0)\r
-#define        RTC             (*(volatile struct st_rtc     __evenaccess *)0x8C400)\r
-#define        S12AD   (*(volatile struct st_s12ad   __evenaccess *)0x89000)\r
-#define        SCI0    (*(volatile struct st_sci0    __evenaccess *)0x8A000)\r
-#define        SCI1    (*(volatile struct st_sci0    __evenaccess *)0x8A020)\r
-#define        SCI2    (*(volatile struct st_sci0    __evenaccess *)0x8A040)\r
-#define        SCI3    (*(volatile struct st_sci0    __evenaccess *)0x8A060)\r
-#define        SCI4    (*(volatile struct st_sci0    __evenaccess *)0x8A080)\r
-#define        SCI5    (*(volatile struct st_sci0    __evenaccess *)0x8A0A0)\r
-#define        SCI6    (*(volatile struct st_sci0    __evenaccess *)0x8A0C0)\r
-#define        SCI7    (*(volatile struct st_sci7    __evenaccess *)0x8A0E0)\r
-#define        SCI8    (*(volatile struct st_sci0    __evenaccess *)0x8A100)\r
-#define        SCI9    (*(volatile struct st_sci0    __evenaccess *)0x8A120)\r
-#define        SCI10   (*(volatile struct st_sci0    __evenaccess *)0x8A140)\r
-#define        SCI11   (*(volatile struct st_sci0    __evenaccess *)0x8A160)\r
-#define        SCI12   (*(volatile struct st_sci12   __evenaccess *)0x8B300)\r
-#define        SMCI0   (*(volatile struct st_smci0   __evenaccess *)0x8A000)\r
-#define        SMCI1   (*(volatile struct st_smci0   __evenaccess *)0x8A020)\r
-#define        SMCI2   (*(volatile struct st_smci0   __evenaccess *)0x8A040)\r
-#define        SMCI3   (*(volatile struct st_smci0   __evenaccess *)0x8A060)\r
-#define        SMCI4   (*(volatile struct st_smci0   __evenaccess *)0x8A080)\r
-#define        SMCI5   (*(volatile struct st_smci0   __evenaccess *)0x8A0A0)\r
-#define        SMCI6   (*(volatile struct st_smci0   __evenaccess *)0x8A0C0)\r
-#define        SMCI7   (*(volatile struct st_smci7   __evenaccess *)0x8A0E0)\r
-#define        SMCI8   (*(volatile struct st_smci0   __evenaccess *)0x8A100)\r
-#define        SMCI9   (*(volatile struct st_smci0   __evenaccess *)0x8A120)\r
-#define        SMCI10  (*(volatile struct st_smci0   __evenaccess *)0x8A140)\r
-#define        SMCI11  (*(volatile struct st_smci0   __evenaccess *)0x8A160)\r
-#define        SMCI12  (*(volatile struct st_smci0   __evenaccess *)0x8B300)\r
-#define        SYSTEM  (*(volatile struct st_system  __evenaccess *)0x80000)\r
-#define        TEMPS   (*(volatile struct st_temps   __evenaccess *)0x8C500)\r
-#define        TMR0    (*(volatile struct st_tmr0    __evenaccess *)0x88200)\r
-#define        TMR1    (*(volatile struct st_tmr1    __evenaccess *)0x88201)\r
-#define        TMR2    (*(volatile struct st_tmr0    __evenaccess *)0x88210)\r
-#define        TMR3    (*(volatile struct st_tmr1    __evenaccess *)0x88211)\r
-#define        TMR01   (*(volatile struct st_tmr01   __evenaccess *)0x88204)\r
-#define        TMR23   (*(volatile struct st_tmr01   __evenaccess *)0x88214)\r
-#define        TPU0    (*(volatile struct st_tpu0    __evenaccess *)0x88108)\r
-#define        TPU1    (*(volatile struct st_tpu1    __evenaccess *)0x88108)\r
-#define        TPU2    (*(volatile struct st_tpu2    __evenaccess *)0x8810A)\r
-#define        TPU3    (*(volatile struct st_tpu3    __evenaccess *)0x8810A)\r
-#define        TPU4    (*(volatile struct st_tpu4    __evenaccess *)0x8810C)\r
-#define        TPU5    (*(volatile struct st_tpu5    __evenaccess *)0x8810C)\r
-#define        TPU6    (*(volatile struct st_tpu0    __evenaccess *)0x88178)\r
-#define        TPU7    (*(volatile struct st_tpu1    __evenaccess *)0x88178)\r
-#define        TPU8    (*(volatile struct st_tpu2    __evenaccess *)0x8817A)\r
-#define        TPU9    (*(volatile struct st_tpu3    __evenaccess *)0x8817A)\r
-#define        TPU10   (*(volatile struct st_tpu4    __evenaccess *)0x8817C)\r
-#define        TPU11   (*(volatile struct st_tpu5    __evenaccess *)0x8817C)\r
-#define        TPUA    (*(volatile struct st_tpua    __evenaccess *)0x88100)\r
-#define        TPUB    (*(volatile struct st_tpub    __evenaccess *)0x88170)\r
-#define        USB             (*(volatile struct st_usb     __evenaccess *)0xA0400)\r
-#define        USB0    (*(volatile struct st_usb0    __evenaccess *)0xA0000)\r
-#define        USB1    (*(volatile struct st_usb1    __evenaccess *)0xA0200)\r
-#define        WDT             (*(volatile struct st_wdt     __evenaccess *)0x88020)\r
-#pragma bit_order\r
-#pragma packoption\r
-#endif\r
diff --git a/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/Renesas-Files/platform.h b/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/Renesas-Files/platform.h
deleted file mode 100644 (file)
index 1851bfb..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-/***********************************************************************************************************************\r
-* DISCLAIMER\r
-* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No \r
-* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all \r
-* applicable laws, including copyright laws. \r
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING\r
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, \r
-* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM \r
-* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES \r
-* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS \r
-* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\r
-* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of \r
-* this software. By using this software, you agree to the additional terms and conditions found by accessing the \r
-* following link:\r
-* http://www.renesas.com/disclaimer \r
-*\r
-* Copyright (C) 2012 Renesas Electronics Corporation. All rights reserved.    \r
-***********************************************************************************************************************/\r
-/***********************************************************************************************************************\r
-* File Name       : platform.h\r
-* Version      : 1.20 \r
-* Description  : The user chooses which MCU and board they are developing for in this file. If the board you are using\r
-*                is not listed below, please add your own or use the default 'User Board'.\r
-***********************************************************************************************************************/\r
-/***********************************************************************************************************************\r
-* History : DD.MM.YYYY Version  Description\r
-*         : 30.11.2011 1.00     First Release\r
-*         : 13.01.2012 1.10     Moved from having platform defined using macro defintion, to having platform defined\r
-*                               by choosing an include path. This makes this file simpler and cleans up the issue\r
-*                               where HEW shows all header files for all platforms under 'Dependencies'.\r
-*         : 14.02.2012 1.20     Added RX210 BSP.\r
-***********************************************************************************************************************/\r
-\r
-#ifndef _PLATFORM_H_\r
-#define _PLATFORM_H_\r
-\r
-/***********************************************************************************************************************\r
-DEFINE YOUR SYSTEM - UNCOMMENT THE INCLUDE PATH FOR THE PLATFORM YOU ARE USING.\r
-***********************************************************************************************************************/\r
-/* RSKRX610 */\r
-//#include "./board/rskrx610/r_bsp.h"\r
-\r
-/* RSKRX62N */\r
-//#include "./board/rskrx62n/r_bsp.h"\r
-\r
-/* RSKRX62T */\r
-//#include "./board/rskrx62t/r_bsp.h"\r
-\r
-/* RDKRX62N */\r
-//#include "./board/rdkrx62n/r_bsp.h"\r
-\r
-/* RSKRX630 */\r
-//#include "./board/rskrx630/r_bsp.h"\r
-\r
-/* RSKRX63N */\r
-#include "./board/rskrx63n/r_bsp.h"\r
-\r
-/* RDKRX63N */\r
-//#include "./board/rdkrx63n/r_bsp.h"\r
-\r
-/* RSKRX210 */\r
-//#include "./board/rskrx210/r_bsp.h"\r
-\r
-/* User Board - Define your own board here. */\r
-//#include "./board/user/r_bsp.h"\r
-\r
-/***********************************************************************************************************************\r
-MAKE SURE AT LEAST ONE PLATFORM WAS DEFINED - DO NOT EDIT BELOW THIS POINT\r
-***********************************************************************************************************************/\r
-#ifndef PLATFORM_DEFINED\r
-#error  "Error - No platform defined in platform.h!"\r
-#endif\r
-\r
-#endif /* _PLATFORM_H_ */\r
-\r
diff --git a/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/SessionRX600_E1_E20_SYSTEM.hsf b/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/SessionRX600_E1_E20_SYSTEM.hsf
deleted file mode 100644 (file)
index 498235f..0000000
+++ /dev/null
@@ -1,584 +0,0 @@
-[HIMDBVersion]\r
-2.0\r
-[DATABASE_VERSION]\r
-"2.3" \r
-[SESSION_DETAILS]\r
-"" \r
-[INFORMATION]\r
-"" \r
-[GENERAL_DATA]\r
-"FIRST_CONNECTION_TAG" "NO" \r
-"MRULABELS_DATAMANAGER_KEY" "00000000|FFFFFFFF|2a94|f|108a|1054|fff8cd9e|1050|fff8c484|88218|000870B4|000870AE|88204|88208|18b8" \r
-"RESET_CPU_AFTER_DOWNLOAD_TAG" "VARIANT_TRUE_STORE_TAG" \r
-"{228DB593-0AB2-4EBE-A098-A2CABF094E46}RamMonitorCtrlViews" "0" \r
-"{287A8023-99B5-49E1-A54E-4DDCA43D7959}MapCtrlECX_MAP_FIND_SYMBOL_LIST" "" \r
-"{287A8023-99B5-49E1-A54E-4DDCA43D7959}MapCtrlViews" "0" \r
-"{2BA6A3EE-6488-11D5-80D4-00C04F68EAD7}ECXLABEL_ADDDLG_ADDR" "" \r
-"{2BA6A3EE-6488-11D5-80D4-00C04F68EAD7}LabelCtrlSymbolFileDir" "" \r
-"{2BA6A3EE-6488-11D5-80D4-00C04F68EAD7}LabelCtrlSymbolFileName" "" \r
-"{2BA6A3EE-6488-11D5-80D4-00C04F68EAD7}LabelCtrlViews" "0" \r
-"{2BA6A3EF-6488-11D5-80D4-00C04F68EAD7}StatusCtrlViews" "0" \r
-"{313F4FC1-6566-11D5-8BBE-0004E2013C71}CmdLineCtrlBatchFileName" "" \r
-"{313F4FC1-6566-11D5-8BBE-0004E2013C71}CmdLineCtrlBreakpointFlag" "-1 " \r
-"{313F4FC1-6566-11D5-8BBE-0004E2013C71}CmdLineCtrlBreakpointStatus" "-1 " \r
-"{313F4FC1-6566-11D5-8BBE-0004E2013C71}CmdLineCtrlBrowseDirectory" "" \r
-"{313F4FC1-6566-11D5-8BBE-0004E2013C71}CmdLineCtrlLogFileName" "" \r
-"{313F4FC1-6566-11D5-8BBE-0004E2013C71}CmdLineCtrlSplitterPosition" "242" \r
-"{313F4FC1-6566-11D5-8BBE-0004E2013C71}CmdLineCtrlViews" "1" \r
-"{313F4FC1-6566-11D5-8BBE-0004E2013C71}CmdLineCtrlWindowProperties" "17" \r
-"{313F4FC1-6566-11D5-8BBE-0004E2013C71}CmdLineWndInstanceKey0" "{WK_00000001_CmdLine}" \r
-"{313F4FC1-6566-11D5-8BBE-0004E2013C71}TclTkCtrlLogFileName" "" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}ECX_MEMORY_COMPARE_END_ADDRESS" "" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}ECX_MEMORY_COMPARE_START_ADDRESS" "" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}ECX_MEMORY_DISPLAY_DEST_ADDRESS" "2a94" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}ECX_MEMORY_DISPLAY_END_ADDRESS" "FFFFFFFF" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}ECX_MEMORY_DISPLAY_START_ADDRESS" "00000000" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}ECX_MEMORY_FILL_END_ADDRESS" "" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}ECX_MEMORY_FILL_START_ADDRESS" "" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}ECX_MEMORY_MOVE_END_ADDRESS" "" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}ECX_MEMORY_MOVE_START_ADDRESS" "" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}ECX_MEMORY_SEARCH_END_ADDRESS" "" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}ECX_MEMORY_SEARCH_START_ADDRESS" "" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}ECX_MEMORY_SET_DEST_ADDRESS" "000870B4" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}ECX_MEMORY_TEST_END_ADDRESS" "" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}ECX_MEMORY_TEST_START_ADDRESS" "" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}MemoryCtrlViews" "0" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}MemoryWndViewA0AutoRefreshEnableTopPane" "0" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}MemoryWndViewA0AutoRefreshIntervalTopPane" "100" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}MemoryWndViewA0DataLength" "4" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}MemoryWndViewA0DispAddressTopPane" "4180" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}MemoryWndViewA0DispCode" "42208" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}MemoryWndViewA0DispColumnCount" "4" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}MemoryWndViewA0IsDispCode" "1" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}MemoryWndViewA0IsDispFloat" "0" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}MemoryWndViewA0IsDispLabel" "0" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}MemoryWndViewA0IsDispRegister" "0" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}MemoryWndViewA0IsRegFollowEnableTopPane" "0" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}MemoryWndViewA0LabelWidth" "96" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}MemoryWndViewA0Radix" "16" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}MemoryWndViewA0RegFollowRegTblIDTopPane" "0" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}MemoryWndViewA0RegisterWidth" "96" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}MemoryWndViewA0ScrollEndAddress" "-1" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}MemoryWndViewA0ScrollStartAddress" "0" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}MemoryWndViewA0StartUpSymbolTopPane" "" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}MemoryWndViewAInstanceKey0" "{WK_00000001_MEMORY}RTOSDemoSessionRX600_E1_E20_SYSTEM" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}MemoryWndViewB0AutoRefreshEnableTopPane" "0" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}MemoryWndViewB0AutoRefreshIntervalTopPane" "100" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}MemoryWndViewB0DataLength" "4" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}MemoryWndViewB0DispAddressTopPane" "4180" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}MemoryWndViewB0DispCode" "42208" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}MemoryWndViewB0DispColumnCount" "4" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}MemoryWndViewB0IsDispCode" "1" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}MemoryWndViewB0IsDispFloat" "0" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}MemoryWndViewB0IsDispLabel" "0" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}MemoryWndViewB0IsDispRegister" "0" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}MemoryWndViewB0IsRegFollowEnableTopPane" "0" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}MemoryWndViewB0LabelWidth" "96" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}MemoryWndViewB0Radix" "16" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}MemoryWndViewB0RegFollowRegTblIDTopPane" "0" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}MemoryWndViewB0RegisterWidth" "96" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}MemoryWndViewB0ScrollEndAddress" "-1" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}MemoryWndViewB0ScrollStartAddress" "0" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}MemoryWndViewB0StartUpSymbolTopPane" "" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}MemoryWndViewBInstanceKey0" "{WK_00000001_MEMORY}RTOSDemoSessionRX600_E1_E20_SYSTEMViewB" \r
-"{4F025ABC-BE66-4CB6-9CEE-06C61418278E}Trace2CtrlSaveFileDir" "" \r
-"{4F025ABC-BE66-4CB6-9CEE-06C61418278E}Trace2CtrlSaveFileName" "" \r
-"{4F025ABC-BE66-4CB6-9CEE-06C61418278E}Trace2CtrlViews" "0" \r
-"{5F75FDA0-6FF0-11D5-B7CE-00E029352378}PACtrlSaveFileDir" "" \r
-"{5F75FDA0-6FF0-11D5-B7CE-00E029352378}PACtrlSaveFileName" "" \r
-"{5F75FDA0-6FF0-11D5-B7CE-00E029352378}PACtrlViews" "0" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_EVAL_DENORMAL_MODE" "16777216" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_EVAL_ROUND_MODE" "768" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_0" "0000000000001E28" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_1" "0000000000000000" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_10" "00000000A5A5A5A5" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_11" "00000000A5A5A5A5" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_12" "00000000A5A5A5A5" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_13" "00000000A5A5A5A5" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_14" "000000000000DEA0" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_15" "00000000A5A5A5A5" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_16" "0000000000001E28" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_17" "0000000000000400" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_18" "0000000000030003" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_19" "00000000FFF839D3" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_2" "000000000000DD44" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_20" "00000000FFF803C8" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_21" "0000000000000000" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_22" "0000000000000000" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_23" "0000000000000000" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_24" "0000000000000100" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_25" "1234567887650000" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_3" "0000000000000001" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_4" "0000000000000001" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_5" "000000000000DD44" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_6" "00000000A5A5A5A5" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_7" "00000000A5A5A5A5" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_8" "00000000A5A5A5A5" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_9" "00000000A5A5A5A5" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_COUNT" "26" \r
-"{6C4D5B81-FD67-46A9-A089-EA44DCDE47FD}RAMMonitorManagerCtrlBlockInfoFileDir" "" \r
-"{6C4D5B81-FD67-46A9-A089-EA44DCDE47FD}RAMMonitorManagerCtrlBlockInfoFileName" "" \r
-"{743E9BC2-6B9D-44A5-A5B6-F8C3FF2C1CAD}GraphCtrlViews" "0" \r
-"{743E9BC2-6B9D-44A5-A5B6-F8C3FF2C1CAD}GraphWnd_Close_Count" "0" \r
-"{743E9BC2-6B9D-44A5-A5B6-F8C3FF2C1CAD}GraphWnd_Mode" "1" \r
-"{743E9BC2-6B9D-44A5-A5B6-F8C3FF2C1CAD}GraphWnd_Trace_Mode" "0" \r
-"{7943C44E-7D44-422A-9140-4CF55C88F7D3}DifferenceCtrlViews" "0" \r
-"{855C64C3-E49C-4450-9BCA-C9822566D214}OSObjectCtrlViews" "0" \r
-"{8A898260-6F1D-11D5-8EB6-00004CC34E9D}ECX_WAVE" "00000000,00000000,0,0" \r
-"{8A898260-6F1D-11D5-8EB6-00004CC34E9D}ECX_WAVE_ADDRESS_NAME" "" \r
-"{8A898260-6F1D-11D5-8EB6-00004CC34E9D}ECX_WAVE_COMB_ADDRESS" ",,,," \r
-"{8A898260-6F1D-11D5-8EB6-00004CC34E9D}ECX_WAVE_COMB_BUFFER" ",,,," \r
-"{8A898260-6F1D-11D5-8EB6-00004CC34E9D}ECX_WAVE_SAMPLING_RATE" "1000" \r
-"{8A898260-6F1D-11D5-8EB6-00004CC34E9D}WaveformCtrlViews" "0" \r
-"{95A081A1-7001-11D5-B1FD-00A0C9E23A58}RegistersCtrlViews" "0" \r
-"{95A081A1-7001-11D5-B1FD-00A0C9E23A58}RegistersWnd0ColumnWidth" "47,153,35" \r
-"{95A081A1-7001-11D5-B1FD-00A0C9E23A58}RegistersWnd0ECX_REGISTER_COUNT" "33" \r
-"{95A081A1-7001-11D5-B1FD-00A0C9E23A58}RegistersWnd0ECX_REGISTER_DISPLAYED" "1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1" \r
-"{95A081A1-7001-11D5-B1FD-00A0C9E23A58}RegistersWnd0HideFLAGs" "0" \r
-"{95A081A1-7001-11D5-B1FD-00A0C9E23A58}RegistersWnd0HideRadix" "0" \r
-"{95A081A1-7001-11D5-B1FD-00A0C9E23A58}RegistersWnd0LastFileName" "" \r
-"{95A081A1-7001-11D5-B1FD-00A0C9E23A58}RegistersWnd0RadixList" "16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,2,16,16,16,16,16,16,16," \r
-"{95A081A1-7001-11D5-B1FD-00A0C9E23A58}RegistersWndInstanceKey0" "{WK_00000001_REGISTERS}RTOSDemoSessionRX600_E1_E20_SYSTEM" \r
-"{95A081A1-7001-11D5-B1FD-00A0C9E23A58}RegistersWndViewB0ColumnWidth" "47,153,35" \r
-"{95A081A1-7001-11D5-B1FD-00A0C9E23A58}RegistersWndViewB0ECX_REGISTER_COUNT" "33" \r
-"{95A081A1-7001-11D5-B1FD-00A0C9E23A58}RegistersWndViewB0ECX_REGISTER_DISPLAYED" "1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1" \r
-"{95A081A1-7001-11D5-B1FD-00A0C9E23A58}RegistersWndViewB0HideFLAGs" "0" \r
-"{95A081A1-7001-11D5-B1FD-00A0C9E23A58}RegistersWndViewB0HideRadix" "0" \r
-"{95A081A1-7001-11D5-B1FD-00A0C9E23A58}RegistersWndViewB0LastFileName" "" \r
-"{95A081A1-7001-11D5-B1FD-00A0C9E23A58}RegistersWndViewB0RadixList" "16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,2,16,16,16,16,16,16,16," \r
-"{95A081A1-7001-11D5-B1FD-00A0C9E23A58}RegistersWndViewBInstanceKey0" "{WK_00000001_REGISTERS}RTOSDemoSessionRX600_E1_E20_SYSTEMViewB" \r
-"{AC411480-6F0A-11D5-8EB6-00004CC34E9D}ECX_IMAGE_ADDRESS_NAME" "" \r
-"{AC411480-6F0A-11D5-8EB6-00004CC34E9D}ECX_IMAGE_BUFFER" "00000000,00000000,0,0" \r
-"{AC411480-6F0A-11D5-8EB6-00004CC34E9D}ECX_IMAGE_COLOR" "0,0,0,0" \r
-"{AC411480-6F0A-11D5-8EB6-00004CC34E9D}ECX_IMAGE_COMB_ADDRESS" ",,,," \r
-"{AC411480-6F0A-11D5-8EB6-00004CC34E9D}ECX_IMAGE_COMB_PALETTE" ",,,," \r
-"{AC411480-6F0A-11D5-8EB6-00004CC34E9D}ECX_IMAGE_PALETTE_NAME" "" \r
-"{AC411480-6F0A-11D5-8EB6-00004CC34E9D}ECX_IMAGE_REDRAW_CONTINUOUSLY" "0,2" \r
-"{AC411480-6F0A-11D5-8EB6-00004CC34E9D}ECX_IMAGE_SAMPLEING_RATE" "1000" \r
-"{AC411480-6F0A-11D5-8EB6-00004CC34E9D}ECX_IMAGE_VIEW" "0,0,0,0,0,0" \r
-"{AC411480-6F0A-11D5-8EB6-00004CC34E9D}ImageCtrlViews" "0" \r
-"{B266D880-6FA1-11D5-8613-00A024591A38}WatchCtrlViews" "4" \r
-"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd0ColWidth0" "207" \r
-"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd0ColWidth1" "234" \r
-"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd0ColWidth12" "116" \r
-"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd0ColWidth2" "127" \r
-"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd0ColWidth3" "200" \r
-"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd0ECX_WATCH_ITEM0000" "xTickCount, 2, 0, P, Col, Hex, MN" \r
-"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd0ECX_WATCH_ITEM0000_SCOPE" "Unit,C:\E\Dev\FreeRTOS\WorkingCopy\Source\tasks.c:RTOSDemo.abs" \r
-"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd0ECX_WATCH_ITEM0001" "pcStatusMessage, 4, 0, P, Col, Hex, MN" \r
-"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd0ECX_WATCH_ITEM0001_SCOPE" "Current Scope," \r
-"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd0ECX_WATCH_ITEM0002" "SwitchQueue, 4, 0, P, Col, Hex, MN" \r
-"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd0ECX_WATCH_ITEM0002_SCOPE" "Current Scope," \r
-"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd0ECX_WATCH_ITEM0003" "CurrentCount, 10, 0, P, Col, Hex, N" \r
-"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd0ECX_WATCH_ITEM0003_SCOPE" "Current Scope," \r
-"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd0ECX_WATCH_ITEM0004" "pos, 10, 0, P, Col, Hex, N" \r
-"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd0ECX_WATCH_ITEM0004_SCOPE" "Current Scope," \r
-"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd0ECX_WATCH_ITEM0005" "datastring, 6, 0, P, Col, Hex, MN" \r
-"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd0ECX_WATCH_ITEM0005_SCOPE" "Current Scope," \r
-"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd0ECX_WATCH_ITEM0006" "next, 4, 0, C0001, Col, Hex, MN" \r
-"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd0ECX_WATCH_ITEMCnt" "0" \r
-"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd1ColWidth0" "120" \r
-"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd1ColWidth1" "150" \r
-"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd1ColWidth12" "200" \r
-"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd1ColWidth2" "120" \r
-"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd1ColWidth3" "200" \r
-"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd1ECX_WATCH_ITEMCnt" "0" \r
-"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd2ColWidth0" "120" \r
-"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd2ColWidth1" "150" \r
-"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd2ColWidth12" "200" \r
-"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd2ColWidth2" "120" \r
-"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd2ColWidth3" "200" \r
-"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd2ECX_WATCH_ITEMCnt" "0" \r
-"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd3ColWidth0" "120" \r
-"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd3ColWidth1" "150" \r
-"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd3ColWidth12" "200" \r
-"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd3ColWidth2" "120" \r
-"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd3ColWidth3" "200" \r
-"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd3ECX_WATCH_ITEMCnt" "0" \r
-"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWndInitial_Radix" "0" \r
-"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWndInstanceKey0" "{WK_00000001_WATCH}RTOSDemoSessionRX600_E1_E20_SYSTEM" \r
-"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWndRecentFile_WatchRecord" "" \r
-"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWndRecentFile_WatchSave" "" \r
-"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWndUpdate_Interval" "100" \r
-"{B39CE26B-928D-4241-BF8F-E15980C81200}DebugConsoleCtrlDCEnable" "1" \r
-"{B39CE26B-928D-4241-BF8F-E15980C81200}DebugConsoleCtrlLocalEchoEnable" "0" \r
-"{B39CE26B-928D-4241-BF8F-E15980C81200}DebugConsoleCtrlLogFileName" "" \r
-"{B39CE26B-928D-4241-BF8F-E15980C81200}DebugConsoleCtrlPortBaudIndex" "0" \r
-"{B39CE26B-928D-4241-BF8F-E15980C81200}DebugConsoleCtrlPortName" "" \r
-"{B39CE26B-928D-4241-BF8F-E15980C81200}DebugConsoleCtrlSendDataTimeout" "50" \r
-"{B39CE26B-928D-4241-BF8F-E15980C81200}DebugConsoleCtrlViews" "1" \r
-"{B39CE26B-928D-4241-BF8F-E15980C81200}DebugConsoleWndInstanceKey0" "{WK_00000001_DEBUGCONSOLE}RTOSDemoSessionRX600_E1_E20_SYSTEM" \r
-"{B6AE2E1F-5221-4A44-91C2-8C3097B41A69}StartStopCheckAfter" "0" \r
-"{B6AE2E1F-5221-4A44-91C2-8C3097B41A69}StartStopCheckBefore" "0" \r
-"{B6AE2E1F-5221-4A44-91C2-8C3097B41A69}StartStopExpAfter" "" \r
-"{B6AE2E1F-5221-4A44-91C2-8C3097B41A69}StartStopExpBefore" "" \r
-"{B6AE2E1F-5221-4A44-91C2-8C3097B41A69}T_SESSION_IS_SAVED" "YES" \r
-"{CBEBB610-1516-11D4-8F2D-00409545B67B}ElfDwarf2Objects" "1" \r
-"{CBEBB610-1516-11D4-8F2D-00409545B67B}LoadModule0OBJ_ELFDWARF2_ARRAY_EXPAND_LIMIT" "-1" \r
-"{CBEBB610-1516-11D4-8F2D-00409545B67B}LoadModule0OBJ_ELFDWARF2_STATIC_MEM_EXPAND" "1" \r
-"{EEDC9300-6FBE-11D5-8613-00A024591A38}LocalsCtrlViews" "0" \r
-"{EEDC9301-6FBE-11D5-8613-00A024591A38}StackTraceCtrlViews" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOCtrlIOFile" "" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOCtrlSaveFileDir" "$(CONFIGDIR)" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOCtrlSaveFileName" "" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOCtrlViews" "1" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOSelection IOWnd0" "" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0ColWidth0" "200" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0ColWidth1" "100" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0ColWidth2" "108" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0ColWidth3" "100" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp0" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp1" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp10" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp100" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp101" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp102" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp103" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp104" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp105" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp106" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp107" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp108" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp109" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp11" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp110" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp111" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp112" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp113" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp114" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp115" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp116" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp117" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp118" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp119" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp12" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp120" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp121" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp122" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp123" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp124" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp125" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp126" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp127" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp128" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp129" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp13" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp130" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp131" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp132" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp133" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp134" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp135" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp136" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp137" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp138" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp139" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp14" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp140" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp141" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp142" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp143" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp144" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp145" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp146" "1" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp147" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp148" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp149" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp15" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp150" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp151" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp152" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp153" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp154" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp155" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp156" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp157" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp158" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp159" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp16" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp160" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp161" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp162" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp163" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp164" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp165" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp166" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp167" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp168" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp169" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp17" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp170" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp171" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp172" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp173" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp174" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp175" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp176" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp177" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp178" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp179" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp18" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp180" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp181" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp182" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp183" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp184" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp185" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp186" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp187" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp188" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp189" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp19" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp190" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp191" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp192" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp193" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp194" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp195" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp196" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp197" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp198" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp199" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp2" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp20" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp200" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp201" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp202" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp203" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp204" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp205" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp206" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp207" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp208" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp209" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp21" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp210" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp211" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp212" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp213" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp214" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp215" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp216" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp217" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp218" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp219" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp22" "1" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp220" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp221" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp222" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp223" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp224" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp225" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp226" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp227" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp228" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp229" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp23" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp230" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp231" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp232" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp233" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp234" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp24" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp25" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp26" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp27" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp28" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp29" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp3" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp30" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp31" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp32" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp33" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp34" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp35" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp36" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp37" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp38" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp39" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp4" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp40" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp41" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp42" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp43" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp44" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp45" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp46" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp47" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp48" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp49" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp5" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp50" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp51" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp52" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp53" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp54" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp55" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp56" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp57" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp58" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp59" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp6" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp60" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp61" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp62" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp63" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp64" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp65" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp66" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp67" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp68" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp69" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp7" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp70" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp71" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp72" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp73" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp74" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp75" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp76" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp77" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp78" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp79" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp8" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp80" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp81" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp82" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp83" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp84" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp85" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp86" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp87" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp88" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp89" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp9" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp90" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp91" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp92" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp93" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp94" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp95" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp96" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp97" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp98" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0Exp99" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0ScrollHorz" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd0ScrollVert" "22" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd1ColWidth0" "200" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd1ColWidth1" "100" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd1ColWidth2" "100" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd1ColWidth3" "100" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd1ScrollHorz" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOWnd1ScrollVert" "0" \r
-"{F923CED3-3318-4B43-B931-0AE76B289176}TaskTraceCtrlAnalyzeViews" "0" \r
-"{F923CED3-3318-4B43-B931-0AE76B289176}TaskTraceCtrlFileSaveDirectory" "" \r
-"{F923CED3-3318-4B43-B931-0AE76B289176}TaskTraceCtrlTraceViews" "0" \r
-[LANGUAGE]\r
-"English" \r
-[CONFIG_INFO_VD1]\r
-1 \r
-[CONFIG_INFO_VD2]\r
-0 \r
-[CONFIG_INFO_VD3]\r
-0 \r
-[CONFIG_INFO_VD4]\r
-0 \r
-[WINDOW_POSITION_STATE_DATA_VD1]\r
-"Help" "TOOLBAR 0" 59419 1 5 "0.00" 0 0 0 0 0 17 0 "" "0.0" \r
-"QzROM" "TOOLBAR 0" 59419 4 1 "0.00" 0 0 0 0 0 17 0 "" "0.0" \r
-"{WK_00000001_CmdLine}ADC_Single_DTC_MTUDefaultSession" "WINDOW" 59422 0 1 "0.50" 230 0 0 350 200 17 0 "32771|32772|32778|<<separator>>|32773|32774|<<separator>>|32820|<<separator>>|32801|32824" "0.0" \r
-"{WK_00000001_CmdLine}" "WINDOW" 59422 0 2 "0.10" 187 0 0 350 200 17 0 "32771|32772|32778|<<separator>>|32773|32774|<<separator>>|32820|<<separator>>|32801|32824" "0.0" \r
-"{WK_00000001_DEBUGCONSOLE}RTOSDemoSessionRX600_E1_E20_SYSTEM" "WINDOW" 59421 0 1 "1.00" 386 0 0 350 200 17 0 "57634|57637|57633|<<separator>>|32781|32782|<<separator>>|32780|32785|32787" "0.0" \r
-"{WK_00000001_DISASSEMBLY}" "WINDOW" 0 0 0 "0.00" 0 176 176 1120 448 9 0 "" "0.0" \r
-"{WK_00000001_IO}RTOSDemoSessionRX600_E1_E20_SYSTEM" "WINDOW" 59422 0 1 "0.50" 187 0 0 869 657 17 0 "32817|32826|32819|32820|32821" "0.0" \r
-"{WK_00000001_MEMORY}RTOSDemoSessionRX600_E1_E20_SYSTEM" "WINDOW" 59422 0 0 "1.00" 219 1452 519 1033 219 2053 0 "42202|42203|42204|42233|<<separator>>|42206|42205|42230|42229|42207|<<separator>>|42208|42209|42210|49076|42228|42227|<<separator>>|42231|42232|42234|42235|<<separator>>|42211|<<separator>>" "0.0" \r
-"{WK_00000001_OUTPUT}" "WINDOW" 59422 0 0 "1.00" 187 560 340 350 200 18 0 "36756|36757|36758|36759|<<separator>>|36746|36747|<<separator>>|39531|<<separator>>|39500|39534|<<separator>>|36687" "0.0" \r
-"{WK_00000001_REGISTERS}RTOSDemoSessionRX600_E1_E20_SYSTEM" "WINDOW" 59421 0 1 "1.00" 300 0 0 350 200 2065 0 "" "0.0" \r
-"{WK_00000001_STACKTRACE}RTOSDemoSessionRX600_E1_E20_SYSTEM" "WINDOW" 59422 0 0 "0.50" 277 0 0 350 200 2065 0 "" "0.0" \r
-"{WK_00000001_WATCH}RTOSDemoSessionRX600_E1_E20_SYSTEM" "WINDOW" 59421 0 0 "1.00" 386 0 0 1040 307 17 0 "32781|32783|<<separator>>|32771|32829|32772|32827|32773|<<separator>>|32786|<<separator>>|32810|32811" "0.0" \r
-"{WK_00000002_WORKSPACE}" "WINDOW" 59420 0 0 "1.00" 330 560 340 350 200 18 0 "" "0.0" \r
-"{WK_TB00000001_STANDARD}" "TOOLBAR 0" 59419 0 3 "0.00" 0 0 0 0 0 18 0 "" "0.0" \r
-"{WK_TB00000002_EDITOR}" "TOOLBAR 0" 59419 0 0 "0.00" 0 0 0 0 0 18 0 "" "0.0" \r
-"{WK_TB00000003_BOOKMARKS}" "TOOLBAR 0" 59419 1 1 "0.00" 0 0 0 0 0 17 0 "" "0.0" \r
-"{WK_TB00000004_TEMPLATES}" "TOOLBAR 0" 59419 1 0 "0.00" 0 0 0 0 0 17 0 "" "0.0" \r
-"{WK_TB00000005_SEARCH}" "TOOLBAR 0" 59419 0 2 "0.00" 0 0 0 0 0 18 0 "" "0.0" \r
-"{WK_TB00000007_DEBUG}" "TOOLBAR 0" 59419 0 1 "0.00" 0 914 231 0 0 18 0 "" "0.0" \r
-"{WK_TB00000008_DEBUGRUN}" "TOOLBAR 0" 59419 3 0 "0.00" 0 298 189 0 0 18 0 "" "0.0" \r
-"{WK_TB00000009_VERSIONCONTROL}" "TOOLBAR 0" 59419 1 3 "0.00" 0 0 0 0 0 17 0 "" "0.0" \r
-"{WK_TB00000011_CPU}" "TOOLBAR 0" 0 0 0 "0.00" 0 427 225 0 0 5 0 "" "0.0" \r
-"{WK_TB00000012_MAP}" "TOOLBAR 0" 59419 1 4 "0.00" 0 0 0 0 0 17 0 "" "0.0" \r
-"{WK_TB00000013_SYMBOL}" "TOOLBAR 0" 0 0 0 "0.00" 0 800 233 0 0 5 0 "" "0.0" \r
-"{WK_TB00000014_CODE}" "TOOLBAR 0" 59419 2 3 "0.00" 0 0 0 0 0 17 0 "" "0.0" \r
-"{WK_TB00000015_PERFORMANCE}" "TOOLBAR 0" 59419 2 4 "0.00" 0 0 0 0 0 17 0 "" "0.0" \r
-"{WK_TB00000016_GRAPHIC}" "TOOLBAR 0" 59419 2 2 "0.00" 0 0 0 0 0 17 0 "" "0.0" \r
-"{WK_TB00000017_FDT}" "TOOLBAR 0" 59419 4 0 "0.00" 0 0 0 0 0 17 0 "" "0.0" \r
-"{WK_TB00000018_DEFAULTWINDOW}" "TOOLBAR 0" 59419 1 2 "0.00" 0 0 0 0 0 17 0 "" "0.0" \r
-"{WK_TB00000023_RTOS}" "TOOLBAR 0" 59419 2 5 "0.00" 0 0 0 0 0 17 0 "" "0.0" \r
-"{WK_TB00000025_HELPSYSTEMTOOL}" "TOOLBAR 0" 59419 0 0 "0.00" 0 788 192 0 0 5 0 "" "0.0" \r
-"{WK_TB00000026_MACRO}" "TOOLBAR 0" 59419 1 6 "0.00" 0 0 0 0 0 17 0 "" "0.0" \r
-"{WK_TB00000027_EVENT}" "TOOLBAR 0" 59419 2 1 "0.00" 0 0 0 0 0 17 0 "" "0.0" \r
-"{WK_TB00000028_RTOSDEBUG}" "TOOLBAR 0" 59419 0 0 "0.00" 0 559 254 0 0 5 0 "" "0.0" \r
-"{WK_TB00000029_SYSTEMTOOL}" "TOOLBAR 0" 59419 2 0 "0.00" 0 0 0 0 0 17 0 "" "0.0" \r
-[WINDOW_POSITION_STATE_DATA_VD2]\r
-[WINDOW_POSITION_STATE_DATA_VD3]\r
-[WINDOW_POSITION_STATE_DATA_VD4]\r
-[WINDOW_Z_ORDER]\r
-"{WK_TB00000028_RTOSDEBUG} TOOLBAR 0" \r
-"{WK_TB00000013_SYMBOL} TOOLBAR 0" \r
-"{WK_TB00000011_CPU} TOOLBAR 0" \r
-"{WK_TB00000025_HELPSYSTEMTOOL} TOOLBAR 0" \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\main-blinky.c" \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX63N-RSK_Renesas\RTOSDemo\main-full.c" \r
-[TARGET_NAME]\r
-"RX E1/E20 SYSTEM" "" 0 \r
-[STATUSBAR_STATEINFO_VD1]\r
-"MasterShowState" 1 \r
-"ApplicationShowState" 1 \r
-"DebuggerShowState" 1 \r
-[STATUSBAR_STATEINFO_VD2]\r
-"MasterShowState" 1 \r
-"ApplicationShowState" 1 \r
-"DebuggerShowState" 1 \r
-[STATUSBAR_STATEINFO_VD3]\r
-"MasterShowState" 1 \r
-"ApplicationShowState" 1 \r
-"DebuggerShowState" 1 \r
-[STATUSBAR_STATEINFO_VD4]\r
-"MasterShowState" 1 \r
-"ApplicationShowState" 1 \r
-"DebuggerShowState" 1 \r
-[STATUSBAR_DEBUGGER_PANESTATE_VD1]\r
-"SBK_TAR_EMUE100|Exception" 1 \r
-"SBK_TAR_EMUE100|BreakCondition" 1 \r
-"SBK_TAR_EMUE100|TaskID" 1 \r
-"SBK_TAR_EMUE100|ExecutionTime" 1 \r
-"SBK_TAR_EMUE100|PC" 1 \r
-[STATUSBAR_DEBUGGER_PANESTATE_VD2]\r
-[STATUSBAR_DEBUGGER_PANESTATE_VD3]\r
-[STATUSBAR_DEBUGGER_PANESTATE_VD4]\r
-[DEBUGGER_OPTIONS]\r
-"" \r
-[DOWNLOAD_MODULES]\r
-"$(CONFIGDIR)\$(PROJECTNAME).abs" 0 "Elf/Dwarf2" 0 0 1 0 \r
-[CONNECT_ON_GO]\r
-"FALSE" \r
-[DOWNLOAD_MODULES_AFTER_BUILD]\r
-"TRUE" \r
-[REMOVE_BREAKPOINTS_ON_DOWNLOAD]\r
-"FALSE" \r
-[DISABLE_MEMORY_ACCESS_PRIOR_TO_COMMAND_FILE_EXECUTION]\r
-"FALSE" \r
-[LIMIT_DISASSEMBLY_MEMORY_ACCESS]\r
-"FALSE" \r
-[DISABLE_MEMORY_ACCESS_DURING_EXECUTION]\r
-"FALSE" \r
-[DEBUGGER_OPTIONS_PROPERTIES]\r
-"1" \r
-[COMMAND_FILES]\r
-[DEFAULT_DEBUG_FORMAT]\r
-"Elf/Dwarf2" \r
-[FLASH_DETAILS]\r
-"0.000000" 0 0 "" 0 "" 0 0 "" 1 1 0 0 0 0 0 "" "" "" "" "" \r
-[BREAKPOINTS]\r
-"c:\e\dev\freertos\workingcopy\demo\rx600_rx63n-rsk_renesas\rtosdemo\renesas-files\resetprg.c" 137 0 1 "{00000000-0000-0000-C000-000000000046}" "" \r
-[END]\r
diff --git a/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/SessionRX600_E1_E20_SYSTEM.ini b/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/SessionRX600_E1_E20_SYSTEM.ini
deleted file mode 100644 (file)
index 90ed86b..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-[Init_DeviceSetting]\r
-DebugMode=0\r
-PowerOut=0\r
-ResetRelease=0\r
-EmulatorSerial=E1:_9KM000237\r
-McuGroup=RX63N Group\r
-Device=R5F563NB_WS2\r
-McuFileDir=RX63NGr\r
-SupplyVoltage=0\r
-[Init_CommunicationClock]\r
-JtagClock=16.5\r
-JtagClockValue=10\r
-CommunicatonIF=1\r
-FineClock=2000000\r
-FineClockValue=2000000\r
-[Init_EmulatorSetting]\r
-FirstStartUp=0\r
-HideNext=0\r
-ConnectionDlgAutoClose=1\r
-FirstStartUpV10200=0\r
-[CFG_MCU]\r
-PrevDevice=R5F563NB_WS2\r
-ProcessorMode=0\r
-EXTAL=12.0000\r
-WorkRam=3000\r
-LittleEndian=1\r
-EnableClockChange=1\r
-UseEXTAL=1\r
-OperatingMode=0\r
-[CFG_SYSTEM]\r
-CpuReWrite=0\r
-PerfCounterUser=0\r
-TraceDebugAs=0\r
-DataFlashReWrite=0\r
-[CFG_FLASHCLEAR_R5F562N8_00]\r
-BlockCount=54\r
-BlockData=000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\r
-[Config_Property]\r
-HideNext=0\r
-[CFG_FLASHCLEAR_R5F52108_00]\r
-AreaCount=0\r
-[CFG_FLASHCLEAR_R5F563NB_00]\r
-AreaCount=0\r
-[CFG_FLASHCLEAR_R5F563NB_WS2_00]\r
-AreaCount=0\r
diff --git a/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/SimSessionRX600.hsf b/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/SimSessionRX600.hsf
deleted file mode 100644 (file)
index fc1ca03..0000000
+++ /dev/null
@@ -1,290 +0,0 @@
-[HIMDBVersion]\r
-2.0\r
-[DATABASE_VERSION]\r
-"2.3" \r
-[SESSION_DETAILS]\r
-"" \r
-[INFORMATION]\r
-"" \r
-[GENERAL_DATA]\r
-"FIRST_CONNECTION_TAG" "NO" \r
-"RESET_CPU_AFTER_DOWNLOAD_TAG" "VARIANT_FALSE_STORE_TAG" \r
-"{287A8023-99B5-49E1-A54E-4DDCA43D7959}MapCtrlECX_MAP_FIND_SYMBOL_LIST" "" \r
-"{287A8023-99B5-49E1-A54E-4DDCA43D7959}MapCtrlViews" "0" \r
-"{2BA6A3EE-6488-11D5-80D4-00C04F68EAD7}ECXLABEL_ADDDLG_ADDR" "" \r
-"{2BA6A3EE-6488-11D5-80D4-00C04F68EAD7}LabelCtrlSymbolFileDir" "" \r
-"{2BA6A3EE-6488-11D5-80D4-00C04F68EAD7}LabelCtrlSymbolFileName" "" \r
-"{2BA6A3EE-6488-11D5-80D4-00C04F68EAD7}LabelCtrlViews" "0" \r
-"{2BA6A3EF-6488-11D5-80D4-00C04F68EAD7}StatusCtrlViews" "0" \r
-"{313F4FC1-6566-11D5-8BBE-0004E2013C71}CmdLineCtrlBatchFileName" "" \r
-"{313F4FC1-6566-11D5-8BBE-0004E2013C71}CmdLineCtrlBreakpointFlag" "-1 " \r
-"{313F4FC1-6566-11D5-8BBE-0004E2013C71}CmdLineCtrlBreakpointStatus" "-1 " \r
-"{313F4FC1-6566-11D5-8BBE-0004E2013C71}CmdLineCtrlBrowseDirectory" "" \r
-"{313F4FC1-6566-11D5-8BBE-0004E2013C71}CmdLineCtrlLogFileName" "" \r
-"{313F4FC1-6566-11D5-8BBE-0004E2013C71}CmdLineCtrlSplitterPosition" "242" \r
-"{313F4FC1-6566-11D5-8BBE-0004E2013C71}CmdLineCtrlViews" "1" \r
-"{313F4FC1-6566-11D5-8BBE-0004E2013C71}CmdLineCtrlWindowProperties" "17" \r
-"{313F4FC1-6566-11D5-8BBE-0004E2013C71}CmdLineWndInstanceKey0" "{WK_00000001_CmdLine}" \r
-"{313F4FC1-6566-11D5-8BBE-0004E2013C71}TclTkCtrlLogFileName" "" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}ECX_MEMORY_COMPARE_END_ADDRESS" "" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}ECX_MEMORY_COMPARE_START_ADDRESS" "" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}ECX_MEMORY_DISPLAY_DEST_ADDRESS" "" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}ECX_MEMORY_DISPLAY_END_ADDRESS" "" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}ECX_MEMORY_DISPLAY_START_ADDRESS" "" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}ECX_MEMORY_FILL_END_ADDRESS" "" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}ECX_MEMORY_FILL_START_ADDRESS" "" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}ECX_MEMORY_MOVE_END_ADDRESS" "" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}ECX_MEMORY_MOVE_START_ADDRESS" "" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}ECX_MEMORY_SEARCH_END_ADDRESS" "" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}ECX_MEMORY_SEARCH_START_ADDRESS" "" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}ECX_MEMORY_SET_DEST_ADDRESS" "" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}ECX_MEMORY_TEST_END_ADDRESS" "" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}ECX_MEMORY_TEST_START_ADDRESS" "" \r
-"{313F4FC2-6566-11D5-8BBE-0004E2013C71}MemoryCtrlViews" "0" \r
-"{3575AD59-64F7-49AB-BD50-52BB206A6DDE}T_BREAK_BREAK_ACCESS_COUNT" "0" \r
-"{3575AD59-64F7-49AB-BD50-52BB206A6DDE}T_BREAK_BREAK_CYCLE_COUNT" "0" \r
-"{3575AD59-64F7-49AB-BD50-52BB206A6DDE}T_BREAK_BREAK_DATA_COUNT" "0" \r
-"{3575AD59-64F7-49AB-BD50-52BB206A6DDE}T_BREAK_BREAK_REGISTER_COUNT" "0" \r
-"{3575AD59-64F7-49AB-BD50-52BB206A6DDE}T_BREAK_BREAK_SEQUENCE_COUNT" "0" \r
-"{3575AD59-64F7-49AB-BD50-52BB206A6DDE}T_BREAK_PC_BREAK_COUNT" "0" \r
-"{3575AD59-64F7-49AB-BD50-52BB206A6DDE}T_BUSCYCLEOCCUR_COUNT" "0" \r
-"{3575AD59-64F7-49AB-BD50-52BB206A6DDE}T_CONFIG_CPU_FREQUENCY" "100000" \r
-"{3575AD59-64F7-49AB-BD50-52BB206A6DDE}T_CONFIG_ENDIAN" "LITTLE" \r
-"{3575AD59-64F7-49AB-BD50-52BB206A6DDE}T_CONFIG_PCLOCKRATE" "1" \r
-"{3575AD59-64F7-49AB-BD50-52BB206A6DDE}T_CONFIG_ROUND" "RM_NEAR" \r
-"{3575AD59-64F7-49AB-BD50-52BB206A6DDE}T_EXEC_EXEC_MODE" "STOP" \r
-"{3575AD59-64F7-49AB-BD50-52BB206A6DDE}T_EXEC_STEP_RATE" "40000" \r
-"{3575AD59-64F7-49AB-BD50-52BB206A6DDE}T_FILEIOPORT_COUNT" "0" \r
-"{3575AD59-64F7-49AB-BD50-52BB206A6DDE}T_FILEIOVARIALBE_COUNT" "0" \r
-"{3575AD59-64F7-49AB-BD50-52BB206A6DDE}T_INST_DECODE_CACHE_ENABLE_FLAG" "OFF" \r
-"{3575AD59-64F7-49AB-BD50-52BB206A6DDE}T_IODLL_COUNT" "0" \r
-"{3575AD59-64F7-49AB-BD50-52BB206A6DDE}T_MEMORY_AUTO_ALLOC_RESOURCE" "1" \r
-"{3575AD59-64F7-49AB-BD50-52BB206A6DDE}T_MEMORY_MAP_BUS_WIDTH" "32" \r
-"{3575AD59-64F7-49AB-BD50-52BB206A6DDE}T_MEMORY_MAP_MAP0" "0x00000000,0x0001FFFF,32, 1,RAM" \r
-"{3575AD59-64F7-49AB-BD50-52BB206A6DDE}T_MEMORY_MAP_MAP0_ENDIAN" "2" \r
-"{3575AD59-64F7-49AB-BD50-52BB206A6DDE}T_MEMORY_MAP_MAP0_WRITE_STATE" "1" \r
-"{3575AD59-64F7-49AB-BD50-52BB206A6DDE}T_MEMORY_MAP_MAP1" "0x00080000,0x000FFFFF,32, 1,I/O" \r
-"{3575AD59-64F7-49AB-BD50-52BB206A6DDE}T_MEMORY_MAP_MAP1_ENDIAN" "0" \r
-"{3575AD59-64F7-49AB-BD50-52BB206A6DDE}T_MEMORY_MAP_MAP1_WRITE_STATE" "1" \r
-"{3575AD59-64F7-49AB-BD50-52BB206A6DDE}T_MEMORY_MAP_MAP2" "0x00100000,0x00107FFF,32, 1,ROM" \r
-"{3575AD59-64F7-49AB-BD50-52BB206A6DDE}T_MEMORY_MAP_MAP2_ENDIAN" "2" \r
-"{3575AD59-64F7-49AB-BD50-52BB206A6DDE}T_MEMORY_MAP_MAP2_WRITE_STATE" "1" \r
-"{3575AD59-64F7-49AB-BD50-52BB206A6DDE}T_MEMORY_MAP_MAP3" "0x007F8000,0x007F9FFF,32, 1,RAM" \r
-"{3575AD59-64F7-49AB-BD50-52BB206A6DDE}T_MEMORY_MAP_MAP3_ENDIAN" "2" \r
-"{3575AD59-64F7-49AB-BD50-52BB206A6DDE}T_MEMORY_MAP_MAP3_WRITE_STATE" "1" \r
-"{3575AD59-64F7-49AB-BD50-52BB206A6DDE}T_MEMORY_MAP_MAP4" "0x007FC000,0x007FC4FF,32, 1,I/O" \r
-"{3575AD59-64F7-49AB-BD50-52BB206A6DDE}T_MEMORY_MAP_MAP4_ENDIAN" "0" \r
-"{3575AD59-64F7-49AB-BD50-52BB206A6DDE}T_MEMORY_MAP_MAP4_WRITE_STATE" "1" \r
-"{3575AD59-64F7-49AB-BD50-52BB206A6DDE}T_MEMORY_MAP_MAP5" "0x007FFC00,0x007FFFFF,32, 1,I/O" \r
-"{3575AD59-64F7-49AB-BD50-52BB206A6DDE}T_MEMORY_MAP_MAP5_ENDIAN" "0" \r
-"{3575AD59-64F7-49AB-BD50-52BB206A6DDE}T_MEMORY_MAP_MAP5_WRITE_STATE" "1" \r
-"{3575AD59-64F7-49AB-BD50-52BB206A6DDE}T_MEMORY_MAP_MAP6" "0x00E00000,0x00FFFFFF,32, 1,ROM" \r
-"{3575AD59-64F7-49AB-BD50-52BB206A6DDE}T_MEMORY_MAP_MAP6_ENDIAN" "2" \r
-"{3575AD59-64F7-49AB-BD50-52BB206A6DDE}T_MEMORY_MAP_MAP6_WRITE_STATE" "1" \r
-"{3575AD59-64F7-49AB-BD50-52BB206A6DDE}T_MEMORY_MAP_MAP7" "0xFEFFE000,0xFEFFFFFF,32, 1,ROM" \r
-"{3575AD59-64F7-49AB-BD50-52BB206A6DDE}T_MEMORY_MAP_MAP7_ENDIAN" "2" \r
-"{3575AD59-64F7-49AB-BD50-52BB206A6DDE}T_MEMORY_MAP_MAP7_WRITE_STATE" "1" \r
-"{3575AD59-64F7-49AB-BD50-52BB206A6DDE}T_MEMORY_MAP_MAP8" "0xFF7FC000,0xFF7FFFFF,32, 1,ROM" \r
-"{3575AD59-64F7-49AB-BD50-52BB206A6DDE}T_MEMORY_MAP_MAP8_ENDIAN" "2" \r
-"{3575AD59-64F7-49AB-BD50-52BB206A6DDE}T_MEMORY_MAP_MAP8_WRITE_STATE" "1" \r
-"{3575AD59-64F7-49AB-BD50-52BB206A6DDE}T_MEMORY_MAP_MAP9" "0xFFE00000,0xFFFFFFFF,32, 1,ROM" \r
-"{3575AD59-64F7-49AB-BD50-52BB206A6DDE}T_MEMORY_MAP_MAP9_ENDIAN" "2" \r
-"{3575AD59-64F7-49AB-BD50-52BB206A6DDE}T_MEMORY_MAP_MAP9_WRITE_STATE" "1" \r
-"{3575AD59-64F7-49AB-BD50-52BB206A6DDE}T_MEMORY_MAP_MEMORY_MAP_COUNT" "10" \r
-"{3575AD59-64F7-49AB-BD50-52BB206A6DDE}T_MEMORY_MAP_MEMORY_MODE" "0" \r
-"{3575AD59-64F7-49AB-BD50-52BB206A6DDE}T_MEMORY_MAP_PRG_WIDTH" "-1" \r
-"{3575AD59-64F7-49AB-BD50-52BB206A6DDE}T_MEMORY_RESOURCE_MEMORY_RESOURCE_COUNT" "5" \r
-"{3575AD59-64F7-49AB-BD50-52BB206A6DDE}T_MEMORY_RESOURCE_MEMRES0" "0x00000000,0x0001FFFF,3" \r
-"{3575AD59-64F7-49AB-BD50-52BB206A6DDE}T_MEMORY_RESOURCE_MEMRES1" "0x00080000,0x000FFFFF,3" \r
-"{3575AD59-64F7-49AB-BD50-52BB206A6DDE}T_MEMORY_RESOURCE_MEMRES2" "0x007FC000,0x007FC4FF,3" \r
-"{3575AD59-64F7-49AB-BD50-52BB206A6DDE}T_MEMORY_RESOURCE_MEMRES3" "0x007FFC00,0x007FFFFF,3" \r
-"{3575AD59-64F7-49AB-BD50-52BB206A6DDE}T_MEMORY_RESOURCE_MEMRES4" "0xFFFF8000,0xFFFFFFFF,3" \r
-"{3575AD59-64F7-49AB-BD50-52BB206A6DDE}T_SESSION_IS_SAVED" "YES" \r
-"{3575AD59-64F7-49AB-BD50-52BB206A6DDE}T_SYSTEM_CALL_Interrupt_Exception" "1" \r
-"{3575AD59-64F7-49AB-BD50-52BB206A6DDE}T_SYSTEM_CALL_SYSTEM_CALL_ADDRESS" "0x00000000" \r
-"{3575AD59-64F7-49AB-BD50-52BB206A6DDE}T_SYSTEM_CALL_SYSTEM_CALL_FLAG" "OFF" \r
-"{3575AD59-64F7-49AB-BD50-52BB206A6DDE}T_TRACE2_TRACE2_ACQUISITION" "0,65536,0,0" \r
-"{48FF5DA0-6FFA-11D5-B7CE-00E029352378}CoverageCtrlViews" "0" \r
-"{48FF5DA0-6FFA-11D5-B7CE-00E029352378}CoverageCtrlViewsFromDiffFile" "0" \r
-"{48FF5DA0-6FFA-11D5-B7CE-00E029352378}CoverageFileName" "0" \r
-"{48FF5DA0-6FFA-11D5-B7CE-00E029352378}EcxCov_Cov_SL" "" \r
-"{48FF5DA0-6FFA-11D5-B7CE-00E029352378}EcxCov_Open_End" "" \r
-"{48FF5DA0-6FFA-11D5-B7CE-00E029352378}EcxCov_Open_Start" "" \r
-"{48FF5DA0-6FFA-11D5-B7CE-00E029352378}EcxCov_Src_Open" "" \r
-"{4F025ABC-BE66-4CB6-9CEE-06C61418278E}Trace2CtrlSaveFileDir" "" \r
-"{4F025ABC-BE66-4CB6-9CEE-06C61418278E}Trace2CtrlSaveFileName" "" \r
-"{4F025ABC-BE66-4CB6-9CEE-06C61418278E}Trace2CtrlViews" "0" \r
-"{5F75FDA0-6FF0-11D5-B7CE-00E029352378}PACtrlPAState" "0" \r
-"{5F75FDA0-6FF0-11D5-B7CE-00E029352378}PACtrlSaveFileDir" "" \r
-"{5F75FDA0-6FF0-11D5-B7CE-00E029352378}PACtrlSaveFileName" "" \r
-"{5F75FDA0-6FF0-11D5-B7CE-00E029352378}PACtrlViews" "0" \r
-"{633553C0-6FE9-11D5-B7CE-00E029352378}ProfileCtrlChartMultiOpen" "0" \r
-"{633553C0-6FE9-11D5-B7CE-00E029352378}ProfileCtrlEnable" "0" \r
-"{633553C0-6FE9-11D5-B7CE-00E029352378}ProfileCtrlSaveListFileDir" "" \r
-"{633553C0-6FE9-11D5-B7CE-00E029352378}ProfileCtrlSaveListFileName" "" \r
-"{633553C0-6FE9-11D5-B7CE-00E029352378}ProfileCtrlSaveTreeFileDir" "" \r
-"{633553C0-6FE9-11D5-B7CE-00E029352378}ProfileCtrlSaveTreeFileName" "" \r
-"{633553C0-6FE9-11D5-B7CE-00E029352378}ProfileCtrlViews" "0" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_EVAL_DENORMAL_MODE" "0" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_EVAL_ROUND_MODE" "0" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_0" "0000000000000000" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_1" "0000000000000000" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_10" "0000000000000000" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_11" "0000000000000000" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_12" "0000000000000000" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_13" "0000000000000000" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_14" "0000000000000000" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_15" "0000000000000000" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_16" "0000000000000000" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_17" "0000000000000000" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_18" "0000000000000000" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_19" "0000000000000000" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_2" "0000000000000000" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_20" "0000000000000000" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_21" "0000000000000000" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_22" "0000000000000000" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_23" "0000000000000000" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_24" "0000000000000100" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_25" "0000000000000000" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_3" "0000000000000000" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_4" "0000000000000000" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_5" "0000000000000000" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_6" "0000000000000000" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_7" "0000000000000000" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_8" "0000000000000000" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_9" "0000000000000000" \r
-"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_COUNT" "26" \r
-"{6C4D5B81-FD67-46A9-A089-EA44DCDE47FD}RAMMonitorManagerCtrlBlockInfoFileDir" "" \r
-"{6C4D5B81-FD67-46A9-A089-EA44DCDE47FD}RAMMonitorManagerCtrlBlockInfoFileName" "" \r
-"{7943C44E-7D44-422A-9140-4CF55C88F7D3}DifferenceCtrlViews" "0" \r
-"{7FA2E460-7EC0-11D5-8EB6-00004CC34E9D}SimIOCtrlViews" "0" \r
-"{855C64C3-E49C-4450-9BCA-C9822566D214}OSObjectCtrlViews" "0" \r
-"{85AC95E0-0CE6-11D6-8EB6-00004CC34E9D}TriggerCtrlViews" "0" \r
-"{8A898260-6F1D-11D5-8EB6-00004CC34E9D}ECX_WAVE" "00000000,00000000,0,0" \r
-"{8A898260-6F1D-11D5-8EB6-00004CC34E9D}ECX_WAVE_ADDRESS_NAME" "" \r
-"{8A898260-6F1D-11D5-8EB6-00004CC34E9D}ECX_WAVE_COMB_ADDRESS" ",,,," \r
-"{8A898260-6F1D-11D5-8EB6-00004CC34E9D}ECX_WAVE_COMB_BUFFER" ",,,," \r
-"{8A898260-6F1D-11D5-8EB6-00004CC34E9D}ECX_WAVE_SAMPLING_RATE" "1000" \r
-"{8A898260-6F1D-11D5-8EB6-00004CC34E9D}WaveformCtrlViews" "0" \r
-"{95A081A1-7001-11D5-B1FD-00A0C9E23A58}RegistersCtrlViews" "0" \r
-"{99F424FE-E727-45AE-AE1F-11E29DEF272C}ECX_GuiIO_SAMPLING_RATE" "1000" \r
-"{99F424FE-E727-45AE-AE1F-11E29DEF272C}PDGuiIOCtrlPDGuiIOLastSaveDirectory" "" \r
-"{99F424FE-E727-45AE-AE1F-11E29DEF272C}PDGuiIOCtrlViews" "0" \r
-"{AC411480-6F0A-11D5-8EB6-00004CC34E9D}ECX_IMAGE_ADDRESS_NAME" "" \r
-"{AC411480-6F0A-11D5-8EB6-00004CC34E9D}ECX_IMAGE_BUFFER" "00000000,00000000,0,0" \r
-"{AC411480-6F0A-11D5-8EB6-00004CC34E9D}ECX_IMAGE_COLOR" "0,0,0,0" \r
-"{AC411480-6F0A-11D5-8EB6-00004CC34E9D}ECX_IMAGE_COMB_ADDRESS" ",,,," \r
-"{AC411480-6F0A-11D5-8EB6-00004CC34E9D}ECX_IMAGE_COMB_PALETTE" ",,,," \r
-"{AC411480-6F0A-11D5-8EB6-00004CC34E9D}ECX_IMAGE_PALETTE_NAME" "" \r
-"{AC411480-6F0A-11D5-8EB6-00004CC34E9D}ECX_IMAGE_REDRAW_CONTINUOUSLY" "0,2" \r
-"{AC411480-6F0A-11D5-8EB6-00004CC34E9D}ECX_IMAGE_SAMPLEING_RATE" "1000" \r
-"{AC411480-6F0A-11D5-8EB6-00004CC34E9D}ECX_IMAGE_VIEW" "0,0,0,0,0,0" \r
-"{AC411480-6F0A-11D5-8EB6-00004CC34E9D}ImageCtrlViews" "0" \r
-"{B266D880-6FA1-11D5-8613-00A024591A38}WatchCtrlViews" "0" \r
-"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWndInitial_Radix" "0" \r
-"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWndRecentFile_WatchRecord" "" \r
-"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWndRecentFile_WatchSave" "" \r
-"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWndUpdate_Interval" "100" \r
-"{CBEBB610-1516-11D4-8F2D-00409545B67B}ElfDwarf2Objects" "1" \r
-"{CBEBB610-1516-11D4-8F2D-00409545B67B}LoadModule0OBJ_ELFDWARF2_ARRAY_EXPAND_LIMIT" "-1" \r
-"{CBEBB610-1516-11D4-8F2D-00409545B67B}LoadModule0OBJ_ELFDWARF2_STATIC_MEM_EXPAND" "1" \r
-"{D595F9C0-EF22-11D5-B7DB-0000E10B3DA9}EventCtrlViews" "0" \r
-"{EEDC9300-6FBE-11D5-8613-00A024591A38}LocalsCtrlViews" "0" \r
-"{EEDC9301-6FBE-11D5-8613-00A024591A38}StackTraceCtrlViews" "0" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOCtrlIOFile" "" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOCtrlSaveFileDir" "$(CONFIGDIR)" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOCtrlSaveFileName" "" \r
-"{F866DB60-6186-11D5-8BBE-0004E2013C71}IOCtrlViews" "0" \r
-"{F923CED3-3318-4B43-B931-0AE76B289176}TaskTraceCtrlAnalyzeViews" "0" \r
-"{F923CED3-3318-4B43-B931-0AE76B289176}TaskTraceCtrlFileSaveDirectory" "" \r
-"{F923CED3-3318-4B43-B931-0AE76B289176}TaskTraceCtrlTraceViews" "0" \r
-[LANGUAGE]\r
-"English" \r
-[CONFIG_INFO_VD1]\r
-1 \r
-[CONFIG_INFO_VD2]\r
-0 \r
-[CONFIG_INFO_VD3]\r
-0 \r
-[CONFIG_INFO_VD4]\r
-0 \r
-[WINDOW_POSITION_STATE_DATA_VD1]\r
-"Help" "TOOLBAR 0" 59419 1 5 "0.00" 0 0 0 0 0 17 0 "" "0.0" \r
-"{WK_00000001_CmdLine}" "WINDOW" 59422 0 1 "0.07" 228 0 0 350 200 17 0 "32771|32772|32778|<<separator>>|32773|32774|<<separator>>|32820|<<separator>>|32801|32824" "0.0" \r
-"{WK_00000001_OUTPUT}" "WINDOW" 59422 0 0 "1.00" 228 560 340 350 200 18 0 "36756|36757|36758|36759|<<separator>>|36746|36747|<<separator>>|39531|<<separator>>|39500|39534|<<separator>>|36687" "0.0" \r
-"{WK_00000002_WORKSPACE}" "WINDOW" 59420 0 0 "1.00" 346 560 340 350 200 18 0 "" "0.0" \r
-"{WK_TB00000001_STANDARD}" "TOOLBAR 0" 59419 0 2 "0.00" 0 0 0 0 0 18 0 "" "0.0" \r
-"{WK_TB00000002_EDITOR}" "TOOLBAR 0" 59419 0 0 "0.00" 0 0 0 0 0 18 0 "" "0.0" \r
-"{WK_TB00000003_BOOKMARKS}" "TOOLBAR 0" 59419 1 1 "0.00" 0 0 0 0 0 17 0 "" "0.0" \r
-"{WK_TB00000004_TEMPLATES}" "TOOLBAR 0" 59419 1 0 "0.00" 0 0 0 0 0 17 0 "" "0.0" \r
-"{WK_TB00000005_SEARCH}" "TOOLBAR 0" 59419 0 1 "0.00" 0 0 0 0 0 18 0 "" "0.0" \r
-"{WK_TB00000007_DEBUG}" "TOOLBAR 0" 59419 0 0 "0.00" 0 914 231 0 0 6 0 "" "0.0" \r
-"{WK_TB00000008_DEBUGRUN}" "TOOLBAR 0" 59419 0 3 "0.00" 0 298 189 0 0 18 0 "" "0.0" \r
-"{WK_TB00000009_VERSIONCONTROL}" "TOOLBAR 0" 59419 1 3 "0.00" 0 0 0 0 0 17 0 "" "0.0" \r
-"{WK_TB00000011_CPU}" "TOOLBAR 0" 59419 2 1 "0.00" 0 0 0 0 0 18 0 "" "0.0" \r
-"{WK_TB00000012_MAP}" "TOOLBAR 0" 59419 1 4 "0.00" 0 0 0 0 0 17 0 "" "0.0" \r
-"{WK_TB00000013_SYMBOL}" "TOOLBAR 0" 59419 2 2 "0.00" 0 0 0 0 0 18 0 "" "0.0" \r
-"{WK_TB00000014_CODE}" "TOOLBAR 0" 59419 2 4 "0.00" 0 0 0 0 0 17 0 "" "0.0" \r
-"{WK_TB00000015_PERFORMANCE}" "TOOLBAR 0" 59419 2 5 "0.00" 0 0 0 0 0 17 0 "" "0.0" \r
-"{WK_TB00000016_GRAPHIC}" "TOOLBAR 0" 59419 2 3 "0.00" 0 0 0 0 0 17 0 "" "0.0" \r
-"{WK_TB00000018_DEFAULTWINDOW}" "TOOLBAR 0" 59419 1 2 "0.00" 0 0 0 0 0 17 0 "" "0.0" \r
-"{WK_TB00000023_RTOS}" "TOOLBAR 0" 59419 2 6 "0.00" 0 0 0 0 0 17 0 "" "0.0" \r
-"{WK_TB00000025_HELPSYSTEMTOOL}" "TOOLBAR 0" 59419 0 0 "0.00" 0 788 192 0 0 5 0 "" "0.0" \r
-"{WK_TB00000026_MACRO}" "TOOLBAR 0" 59419 1 6 "0.00" 0 0 0 0 0 17 0 "" "0.0" \r
-"{WK_TB00000028_RTOSDEBUG}" "TOOLBAR 0" 59419 0 0 "0.00" 0 559 254 0 0 5 0 "" "0.0" \r
-"{WK_TB00000029_SYSTEMTOOL}" "TOOLBAR 0" 59419 2 0 "0.00" 0 0 0 0 0 17 0 "" "0.0" \r
-[WINDOW_POSITION_STATE_DATA_VD2]\r
-[WINDOW_POSITION_STATE_DATA_VD3]\r
-[WINDOW_POSITION_STATE_DATA_VD4]\r
-[WINDOW_Z_ORDER]\r
-"{WK_TB00000007_DEBUG} TOOLBAR 0" \r
-"{WK_TB00000028_RTOSDEBUG} TOOLBAR 0" \r
-"{WK_TB00000025_HELPSYSTEMTOOL} TOOLBAR 0" \r
-"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\RX600_RX62N-MDK_Renesas\RTOSDemo\main-full.c" \r
-[TARGET_NAME]\r
-"RX600 Simulator" "" 0 \r
-[STATUSBAR_STATEINFO_VD1]\r
-"MasterShowState" 1 \r
-"ApplicationShowState" 1 \r
-"DebuggerShowState" 1 \r
-[STATUSBAR_STATEINFO_VD2]\r
-"MasterShowState" 1 \r
-"ApplicationShowState" 1 \r
-"DebuggerShowState" 1 \r
-[STATUSBAR_STATEINFO_VD3]\r
-"MasterShowState" 1 \r
-"ApplicationShowState" 1 \r
-"DebuggerShowState" 1 \r
-[STATUSBAR_STATEINFO_VD4]\r
-"MasterShowState" 1 \r
-"ApplicationShowState" 1 \r
-"DebuggerShowState" 1 \r
-[STATUSBAR_DEBUGGER_PANESTATE_VD1]\r
-[STATUSBAR_DEBUGGER_PANESTATE_VD2]\r
-[STATUSBAR_DEBUGGER_PANESTATE_VD3]\r
-[STATUSBAR_DEBUGGER_PANESTATE_VD4]\r
-[DEBUGGER_OPTIONS]\r
-"[V|VERSION|1] [S|MAP|^"0x00000000,0x0001FFFF,RAM,32,101 0x00080000,0x000FFFFF,I/O,32,101 0x00100000,0x00107FFF,ROM,32,101 0x007F8000,0x007F9FFF,RAM,32,101 0x007FC000,0x007FC4FF,I/O,32,101 0x007FFC00,0x007FFFFF,I/O,32,101 0x00E00000,0x00FFFFFF,ROM,32,101 0xFEFFE000,0xFEFFFFFF,ROM,32,101 0xFF7FC000,0xFF7FFFFF,ROM,32,101 0xFFE00000,0xFFFFFFFF,ROM,32,101^"] [S|RESOURCE|^"0x00000000,0x0001FFFF,R/W 0x00080000,0x000FFFFF,R/W 0x007FC000,0x007FC4FF,R/W 0x007FFC00,0x007FFFFF,R/W 0xFFFF8000,0xFFFFFFFF,R/W^"] [B|SIMIOF|0] [I|SIMIOADR|0x00000000] [I|BUS_MODE|0] [S|ENDIAN|^"LITTLE^"] [S|PATCH|^"OFF^"] [S|ROM_MODE|^"^"]" \r
-[DOWNLOAD_MODULES]\r
-"$(CONFIGDIR)\$(PROJECTNAME).abs" 0 "Elf/Dwarf2" 0 0 1 0 \r
-[CONNECT_ON_GO]\r
-"FALSE" \r
-[DOWNLOAD_MODULES_AFTER_BUILD]\r
-"TRUE" \r
-[REMOVE_BREAKPOINTS_ON_DOWNLOAD]\r
-"FALSE" \r
-[DISABLE_MEMORY_ACCESS_PRIOR_TO_COMMAND_FILE_EXECUTION]\r
-"FALSE" \r
-[LIMIT_DISASSEMBLY_MEMORY_ACCESS]\r
-"FALSE" \r
-[DISABLE_MEMORY_ACCESS_DURING_EXECUTION]\r
-"FALSE" \r
-[DEBUGGER_OPTIONS_PROPERTIES]\r
-"1" \r
-[COMMAND_FILES]\r
-[DEFAULT_DEBUG_FORMAT]\r
-"Elf/Dwarf2" \r
-[FLASH_DETAILS]\r
-"0.000000" 0 0 "" 0 "" 0 0 "" 1 1 0 0 0 0 0 "" "" "" "" "" \r
-[BREAKPOINTS]\r
-[END]\r
diff --git a/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/main-blinky.c b/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/main-blinky.c
deleted file mode 100644 (file)
index f6fd5f4..0000000
+++ /dev/null
@@ -1,238 +0,0 @@
-/*\r
- * FreeRTOS Kernel V10.1.0\r
- * Copyright (C) 2018 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
- * This is a very simple demo that creates two tasks, one queue, and one \r
- * software timer.  For a much more complete and complex example select either \r
- * the Debug or Debug_with_optimisation build configurations within the HEW,\r
- * which build main_full.c in place of this file.\r
- * \r
- * One task (the queue receive task) blocks on the queue to wait for data to \r
- * arrive, toggling LED0 each time '100' is received.  The other task (the \r
- * queue send task) repeatedly blocks for a fixed period before sending '100' \r
- * to the queue (causing the first task to toggle the LED). \r
- *\r
- * The software timer is configured to auto-reload.  The timer callback \r
- * function periodically toggles LED1.\r
- */\r
-\r
-/* Hardware specific includes. */\r
-#include "iodefine.h"\r
-\r
-/* Kernel includes. */\r
-#include "FreeRTOS.h"\r
-#include "task.h"\r
-#include "timers.h"\r
-#include "queue.h"\r
-\r
-/* Priorities at which the tasks are created. */\r
-#define configQUEUE_RECEIVE_TASK_PRIORITY      ( tskIDLE_PRIORITY + 1 )\r
-#define        configQUEUE_SEND_TASK_PRIORITY          ( tskIDLE_PRIORITY + 2 )\r
-\r
-/* The rate at which data is sent to the queue, specified in milliseconds. */\r
-#define mainQUEUE_SEND_PERIOD_MS                       ( 500 / portTICK_PERIOD_MS )\r
-\r
-/* The period of the software timer, specified in milliseconds. */\r
-#define mainSOFTWARE_TIMER_PERIOD_MS           ( 150 / portTICK_PERIOD_MS )\r
-\r
-/* The number of items the queue can hold.  This is 1 as the receive task\r
-will remove items as they are added so the send task should always find the\r
-queue empty. */\r
-#define mainQUEUE_LENGTH                                       ( 1 )\r
-\r
-/* The LEDs toggle by the task and timer respectively. */\r
-#define mainTASK_LED                                           ( 0 )\r
-#define mainTIMER_LED                                          ( 1 )\r
-\r
-/*\r
- * The tasks as defined at the top of this file.\r
- */\r
-static void prvQueueReceiveTask( void *pvParameters );\r
-static void prvQueueSendTask( void *pvParameters );\r
-\r
-/*\r
- * The callback function used by the software timer.\r
- */\r
-static void prvBlinkyTimerCallback( TimerHandle_t xTimer );\r
-\r
-/* The queue used by both tasks. */\r
-static QueueHandle_t xQueue = NULL;\r
-\r
-/* This variable is not used by this simple Blinky example.  It is defined \r
-purely to allow the project to link as it is used by the full project. */\r
-volatile unsigned long ulHighFrequencyTickCount = 0UL;\r
-/*-----------------------------------------------------------*/\r
-\r
-void main(void)\r
-{\r
-TimerHandle_t xTimer;\r
-\r
-       /* Turn all LEDs off. */\r
-       vParTestInitialise();\r
-       \r
-       /* Create the queue. */\r
-       xQueue = xQueueCreate( mainQUEUE_LENGTH, sizeof( unsigned long ) );\r
-\r
-       /* Create the software timer, as described at the top of this file. */\r
-       xTimer = xTimerCreate( "BlinkyTimer",                                   /* Just a text name to make debugging easier - not used by the scheduler. */\r
-                                                       mainSOFTWARE_TIMER_PERIOD_MS,   /* The timer period. */\r
-                                                       pdTRUE,                                                 /* Set to pdTRUE for periodic timer, or pdFALSE for one-shot timer. */\r
-                                                       NULL,                                                   /* The timer ID is not required. */\r
-                                                       prvBlinkyTimerCallback );               /* The function executed when the timer expires. */\r
-                                                       \r
-       if( xTimer != NULL )\r
-       {\r
-               /* Start the timer - it will not actually start running until the\r
-               scheduler has started.  The block time is set to 0, although, because\r
-               xTimerStart() is being called before the scheduler has been started,\r
-               the any block time specified would be ignored anyway. */\r
-               xTimerStart( xTimer, 0UL );\r
-       }\r
-       \r
-       if( xQueue != NULL )\r
-       {\r
-               /* Start the two tasks as described at the top of this file. */\r
-               xTaskCreate( prvQueueReceiveTask,                                       /* The function that implements the task. */\r
-                                        "Rx",                                                                  /* Just a text name to make debugging easier - not used by the scheduler. */\r
-                                        configMINIMAL_STACK_SIZE,                              /* The size of the task stack, in words. */\r
-                                        NULL,                                                                  /* The task parameter is not used. */\r
-                                        configQUEUE_RECEIVE_TASK_PRIORITY,     /* The priority assigned to the task when it is created. */\r
-                                        NULL );                                                                /* The task handle is not used. */\r
-                                        \r
-               xTaskCreate( prvQueueSendTask, "TX", configMINIMAL_STACK_SIZE, NULL, configQUEUE_SEND_TASK_PRIORITY, NULL );\r
-\r
-               /* Start the tasks running. */\r
-               vTaskStartScheduler();\r
-       }\r
-       \r
-       /* If all is well we will never reach here as the scheduler will now be\r
-       running.  If we do reach here then it is likely that there was insufficient\r
-       heap available for the idle task to be created. */\r
-       for( ;; );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvQueueSendTask( void *pvParameters )\r
-{\r
-TickType_t xNextWakeTime;\r
-const unsigned long ulValueToSend = 100UL;\r
-\r
-       /* Initialise xNextWakeTime - this only needs to be done once. */\r
-       xNextWakeTime = xTaskGetTickCount();\r
-\r
-       for( ;; )\r
-       {\r
-               /* Place this task in the blocked state until it is time to run again. \r
-               The block state is specified in ticks, the constant used converts ticks\r
-               to ms. */\r
-               vTaskDelayUntil( &xNextWakeTime, mainQUEUE_SEND_PERIOD_MS );\r
-\r
-               /* Send to the queue - causing the queue receive task to flash its LED.  0\r
-               is used so the send does not block - it shouldn't need to as the queue\r
-               should always be empty here. */\r
-               xQueueSend( xQueue, &ulValueToSend, 0 );\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvQueueReceiveTask( void *pvParameters )\r
-{\r
-unsigned long ulReceivedValue;\r
-\r
-       for( ;; )\r
-       {\r
-               /* Wait until something arives in the queue - this will block \r
-               indefinitely provided INCLUDE_vTaskSuspend is set to 1 in\r
-               FreeRTOSConfig.h. */\r
-               xQueueReceive( xQueue, &ulReceivedValue, portMAX_DELAY );\r
-\r
-               /*  To get here something must have arrived, but is it the expected\r
-               value?  If it is, toggle the LED. */\r
-               if( ulReceivedValue == 100UL )\r
-               {\r
-                       vParTestToggleLED( mainTASK_LED );\r
-               }\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvBlinkyTimerCallback( TimerHandle_t xTimer )\r
-{\r
-       /* The software timer does nothing but toggle an LED. */\r
-       vParTestToggleLED( mainTIMER_LED );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-void vApplicationSetupTimerInterrupt( void )\r
-{\r
-       /* Enable compare match timer 0. */\r
-       MSTP( CMT0 ) = 0;\r
-       \r
-       /* Interrupt on compare match. */\r
-       CMT0.CMCR.BIT.CMIE = 1;\r
-       \r
-       /* Set the compare match value. */\r
-       CMT0.CMCOR = ( unsigned short ) ( ( ( configPERIPHERAL_CLOCK_HZ / configTICK_RATE_HZ ) -1 ) / 8 );\r
-       \r
-       /* Divide the PCLK by 8. */\r
-       CMT0.CMCR.BIT.CKS = 0;\r
-       \r
-       /* Enable the interrupt... */\r
-       _IEN( _CMT0_CMI0 ) = 1;\r
-       \r
-       /* ...and set its priority to the application defined kernel priority. */\r
-       _IPR( _CMT0_CMI0 ) = configKERNEL_INTERRUPT_PRIORITY;\r
-       \r
-       /* Start the timer. */\r
-       CMT.CMSTR0.BIT.STR0 = 1;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-/* This function is explained by the comments above its prototype at the top\r
-of this file. */\r
-void vApplicationMallocFailedHook( void )\r
-{\r
-       for( ;; );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-/* This function is explained by the comments above its prototype at the top\r
-of this file. */\r
-void vApplicationStackOverflowHook( TaskHandle_t pxTask, char *pcTaskName )\r
-{\r
-       for( ;; );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-/* This function is explained by the comments above its prototype at the top\r
-of this file. */\r
-void vApplicationIdleHook( void )\r
-{\r
-       /* Just to prevent the variable getting optimised away. */\r
-       ( void ) ulHighFrequencyTickCount;\r
-}\r
-/*-----------------------------------------------------------*/\r
diff --git a/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/main-full.c b/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/main-full.c
deleted file mode 100644 (file)
index ebb9024..0000000
+++ /dev/null
@@ -1,675 +0,0 @@
-/*\r
- * FreeRTOS Kernel V10.1.0\r
- * Copyright (C) 2018 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
- * This project includes a lot of tasks and tests and is therefore complex.\r
- * If you would prefer a much simpler project to get started with then select\r
- * the 'Blinky' build configuration within the HEW IDE.  The Blinky \r
- * configuration builds main-blinky.c in place of this file.\r
- * ****************************************************************************\r
- *\r
- * Creates all the demo application tasks, then starts the scheduler.  The web\r
- * documentation provides more details of the standard demo application tasks,\r
- * which provide no particular functionality but do provide a good example of\r
- * how to use the FreeRTOS API.  The tasks defined in flop.c are included in the\r
- * set of standard demo tasks to ensure the floating point unit gets some\r
- * exercise.\r
- *\r
- * In addition to the standard demo tasks, the following tasks and tests are\r
- * defined and/or created within this file:\r
- *\r
- * Webserver ("uIP") task - This serves a number of dynamically generated WEB\r
- * pages to a standard WEB browser.  The IP and MAC addresses are configured by\r
- * constants defined at the bottom of FreeRTOSConfig.h.  Use either a standard\r
- * Ethernet cable to connect through a hug, or a cross over (point to point)\r
- * cable to connect directly.  Ensure the IP address used is compatible with the\r
- * IP address of the machine running the browser - the easiest way to achieve\r
- * this is to ensure the first three octets of the IP addresses are the same.\r
- *\r
- * "Reg test" tasks - These fill the registers with known values, then check\r
- * that each register still contains its expected value.  Each task uses\r
- * different values.  The tasks run with very low priority so get preempted\r
- * very frequently.  A check variable is incremented on each iteration of the\r
- * test loop.  A register containing an unexpected value is indicative of an\r
- * error in the context switching mechanism and will result in a branch to a\r
- * null loop - which in turn will prevent the check variable from incrementing\r
- * any further and allow the check task (described below) to determine that an\r
- * error has occurred.  The nature of the reg test tasks necessitates that they\r
- * are written in assembly code.\r
- *\r
- * "Check" timer - The check software timer period is initially set to five\r
- * seconds.  The callback function associated with the check software timer\r
- * checks that all the standard demo tasks, and the register check tasks, are\r
- * not only still executing, but are executing without reporting any errors.  If\r
- * the check software timer discovers that a task has either stalled, or\r
- * reported an error, then it changes its own execution period from the initial\r
- * five seconds, to just 200ms.  The check software timer callback function\r
- * also toggles LED3 each time it is called.  This provides a visual indication \r
- * of the system status:  If LED3 toggles every five seconds, then no issues \r
- * have been discovered.  If the LED toggles every 200ms, then an issue has been \r
- * discovered with at least one task.\r
- *\r
- * "High frequency timer test" - A high frequency periodic interrupt is\r
- * generated using a timer - the interrupt is assigned a priority above\r
- * configMAX_SYSCALL_INTERRUPT_PRIORITY so should not be effected by anything\r
- * the kernel is doing.  The frequency and priority of the interrupt, in\r
- * combination with other standard tests executed in this demo, should result\r
- * in interrupts nesting at least 3 and probably 4 deep.  This test is only\r
- * included in build configurations that have the optimiser switched on.  In\r
- * optimised builds the count of high frequency ticks is used as the time base\r
- * for the run time stats.\r
- *\r
- * *NOTE 1* If LED3 is toggling every 5 seconds then all the demo application\r
- * tasks are executing as expected and no errors have been reported in any\r
- * tasks.  The toggle rate increasing to 200ms indicates that at least one task\r
- * has reported unexpected behaviour.\r
- *\r
- * *NOTE 2* vApplicationSetupTimerInterrupt() is called by the kernel to let\r
- * the application set up a timer to generate the tick interrupt.  In this\r
- * example a compare match timer is used for this purpose.\r
- *\r
- * *NOTE 3* The CPU must be in Supervisor mode when the scheduler is started.\r
- * The PowerON_Reset_PC() supplied in resetprg.c with this demo has\r
- * Change_PSW_PM_to_UserMode() commented out to ensure this is the case.\r
- *\r
- * *NOTE 4* The IntQueue common demo tasks test interrupt nesting and make use\r
- * of all the 8bit timers (as two cascaded 16bit units).\r
- *\r
- */\r
-\r
-#include <string.h>\r
-\r
-/* Hardware specific includes. */\r
-#include "iodefine.h"\r
-\r
-/* Kernel includes. */\r
-#include "FreeRTOS.h"\r
-#include "task.h"\r
-#include "timers.h"\r
-#include "semphr.h"\r
-\r
-/* Standard demo includes. */\r
-#include "partest.h"\r
-#include "flash_timer.h"\r
-#include "IntQueue.h"\r
-#include "BlockQ.h"\r
-#include "death.h"\r
-#include "integer.h"\r
-#include "blocktim.h"\r
-#include "semtest.h"\r
-#include "PollQ.h"\r
-#include "GenQTest.h"\r
-#include "QPeek.h"\r
-#include "recmutex.h"\r
-#include "flop.h"\r
-\r
-/* Values that are passed into the reg test tasks using the task parameter.  The\r
-tasks check that the values are passed in correctly. */\r
-#define mainREG_TEST_1_PARAMETER       ( 0x12121212UL )\r
-#define mainREG_TEST_2_PARAMETER       ( 0x12345678UL )\r
-\r
-/* Priorities at which the tasks are created. */\r
-#define mainCHECK_TASK_PRIORITY                ( configMAX_PRIORITIES - 1 )\r
-#define mainQUEUE_POLL_PRIORITY                ( tskIDLE_PRIORITY + 1 )\r
-#define mainSEM_TEST_PRIORITY          ( tskIDLE_PRIORITY + 1 )\r
-#define mainBLOCK_Q_PRIORITY           ( tskIDLE_PRIORITY + 2 )\r
-#define mainCREATOR_TASK_PRIORITY   ( tskIDLE_PRIORITY + 3 )\r
-#define mainuIP_TASK_PRIORITY          ( tskIDLE_PRIORITY + 2 )\r
-#define mainINTEGER_TASK_PRIORITY   ( tskIDLE_PRIORITY )\r
-#define mainGEN_QUEUE_TASK_PRIORITY    ( tskIDLE_PRIORITY )\r
-#define mainFLOP_TASK_PRIORITY         ( tskIDLE_PRIORITY )\r
-\r
-/* The WEB server uses string handling functions, which in turn use a bit more\r
-stack than most of the other tasks. */\r
-#define mainuIP_STACK_SIZE                     ( configMINIMAL_STACK_SIZE * 3 )\r
-\r
-/* The LED toggled by the check timer. */\r
-#define mainCHECK_LED                          ( 3 )\r
-\r
-/* The rate at which mainCHECK_LED will toggle when all the tasks are running\r
-without error.  Controlled by the check timer as described at the top of this\r
-file. */\r
-#define mainNO_ERROR_CHECK_TIMER_PERIOD_MS     ( 5000 / portTICK_PERIOD_MS )\r
-\r
-/* The rate at which mainCHECK_LED will toggle when an error has been reported\r
-by at least one task.  Controlled by the check timer as described at the top of\r
-this file. */\r
-#define mainERROR_CHECK_TIMER_PERIOD_MS                ( 200 / portTICK_PERIOD_MS )\r
-\r
-/* A block time of zero simply means "don't block". */\r
-#define mainDONT_BLOCK ( 0UL )\r
-\r
-/* A set of timers are created, each of which toggles and LED.  This specifies\r
-the number of timers to create. */\r
-#define mainNUMBER_OF_LEDS_TO_FLASH            ( 3 )\r
-\r
-/*\r
- * vApplicationMallocFailedHook() will only be called if\r
- * configUSE_MALLOC_FAILED_HOOK is set to 1 in FreeRTOSConfig.h.  It is a hook\r
- * function that will execute if a call to pvPortMalloc() fails.\r
- * pvPortMalloc() is called internally by the kernel whenever a task, queue or\r
- * semaphore is created.  It is also called by various parts of the demo\r
- * application.\r
- */\r
-void vApplicationMallocFailedHook( void );\r
-\r
-/*\r
- * vApplicationIdleHook() will only be called if configUSE_IDLE_HOOK is set to 1\r
- * in FreeRTOSConfig.h.  It is a hook function that is called on each iteration\r
- * of the idle task.  It is essential that code added to this hook function\r
- * never attempts to block in any way (for example, call xQueueReceive() with\r
- * a block time specified).  If the application makes use of the vTaskDelete()\r
- * API function (as this demo application does) then it is also important that\r
- * vApplicationIdleHook() is permitted to return to its calling function because\r
- * it is the responsibility of the idle task to clean up memory allocated by the\r
- * kernel to any task that has since been deleted.\r
- */\r
-void vApplicationIdleHook( void );\r
-\r
-/*\r
- * vApplicationStackOverflowHook() will only be called if\r
- * configCHECK_FOR_STACK_OVERFLOW is set to a non-zero value.  The handle and\r
- * name of the offending task should be passed in the function parameters, but\r
- * it is possible that the stack overflow will have corrupted these - in which\r
- * case pxCurrentTCB can be inspected to find the same information.\r
- */\r
-void vApplicationStackOverflowHook( TaskHandle_t pxTask, char *pcTaskName );\r
-\r
-/*\r
- * The reg test tasks as described at the top of this file.\r
- */\r
-static void prvRegTest1Task( void *pvParameters );\r
-static void prvRegTest2Task( void *pvParameters );\r
-\r
-/*\r
- * The actual implementation of the reg test functionality, which, because of\r
- * the direct register access, have to be in assembly.\r
- */\r
-static void prvRegTest1Implementation( void );\r
-static void prvRegTest2Implementation( void );\r
-\r
-/*\r
- * The check timer callback function, as described at the top of this file.\r
- */\r
-static void prvCheckTimerCallback( TimerHandle_t xTimer );\r
-\r
-/*\r
- * Contains the implementation of the WEB server.\r
- */\r
-extern void vuIP_Task( void *pvParameters );\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-/* Variables that are incremented on each iteration of the reg test tasks -\r
-provided the tasks have not reported any errors.  The check task inspects these\r
-variables to ensure they are still incrementing as expected.  If a variable\r
-stops incrementing then it is likely that its associate task has stalled. */\r
-unsigned long ulRegTest1CycleCount = 0UL, ulRegTest2CycleCount = 0UL;\r
-\r
-/* The status message that is displayed at the bottom of the "task stats" web\r
-page, which is served by the uIP task.  This will report any errors picked up\r
-by the reg test task. */\r
-const char *pcStatusMessage = "All tasks executing without error.";\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-void main(void)\r
-{\r
-TimerHandle_t xCheckTimer;\r
-extern void HardwareSetup( void );\r
-\r
-       /* Turn all LEDs off. */\r
-       vParTestInitialise();\r
-\r
-       /* Start the reg test tasks which test the context switching mechanism. */\r
-       xTaskCreate( prvRegTest1Task, "RegTst1", configMINIMAL_STACK_SIZE, ( void * ) mainREG_TEST_1_PARAMETER, tskIDLE_PRIORITY, NULL );\r
-       xTaskCreate( prvRegTest2Task, "RegTst2", configMINIMAL_STACK_SIZE, ( void * ) mainREG_TEST_2_PARAMETER, tskIDLE_PRIORITY, NULL );\r
-\r
-       /* The web server task.  NOTE: COMMENTED OUT AS THE ETHERNET PORT IS NOT\r
-       YET BEING CONFIGURED IN hwsetup.c. */\r
-       //xTaskCreate( vuIP_Task, "uIP", mainuIP_STACK_SIZE, NULL, mainuIP_TASK_PRIORITY, NULL );\r
-\r
-       /* Create the standard demo tasks. */\r
-       vStartBlockingQueueTasks( mainBLOCK_Q_PRIORITY );\r
-       vCreateBlockTimeTasks();\r
-       vStartSemaphoreTasks( mainSEM_TEST_PRIORITY );\r
-       vStartPolledQueueTasks( mainQUEUE_POLL_PRIORITY );\r
-       vStartIntegerMathTasks( mainINTEGER_TASK_PRIORITY );\r
-       vStartGenericQueueTasks( mainGEN_QUEUE_TASK_PRIORITY ); \r
-       vStartQueuePeekTasks();\r
-       vStartRecursiveMutexTasks();\r
-       vStartInterruptQueueTasks();\r
-       vStartMathTasks( mainFLOP_TASK_PRIORITY );\r
-\r
-       /* Create the timers used to toggle the LEDs. */\r
-       vStartLEDFlashTimers( mainNUMBER_OF_LEDS_TO_FLASH );\r
-\r
-       /* Create the software timer that performs the 'check' functionality,\r
-       as described at the top of this file. */\r
-       xCheckTimer = xTimerCreate( "CheckTimer",                                                       /* A text name, purely to help debugging. */\r
-                                                               ( mainNO_ERROR_CHECK_TIMER_PERIOD_MS ), /* The timer period, in this case 5000ms (5s). */\r
-                                                               pdTRUE,                                                                 /* This is an auto-reload timer, so xAutoReload is set to pdTRUE. */\r
-                                                               ( void * ) 0,                                                   /* The ID is not used, so can be set to anything. */\r
-                                                               prvCheckTimerCallback                                   /* The callback function that inspects the status of all the other tasks. */\r
-                                                         );    \r
-       \r
-       if( xCheckTimer != NULL )\r
-       {\r
-               xTimerStart( xCheckTimer, mainDONT_BLOCK );\r
-       }\r
-\r
-       /* The suicide tasks must be created last as they need to know how many\r
-       tasks were running prior to their creation in order to ascertain whether\r
-       or not the correct/expected number of tasks are running at any given time. */\r
-       vCreateSuicidalTasks( mainCREATOR_TASK_PRIORITY );\r
-\r
-       /* Start the tasks running. */\r
-       vTaskStartScheduler();\r
-\r
-       /* If all is well, the scheduler will now be running, and the following line\r
-       will never be reached.  If the following line does execute, then there was\r
-       insufficient FreeRTOS heap memory available for the idle and/or timer tasks\r
-       to be created.  See the memory management section on the FreeRTOS web site\r
-       for more details. */\r
-       for( ;; );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvCheckTimerCallback( TimerHandle_t xTimer )\r
-{\r
-static long lChangedTimerPeriodAlready = pdFALSE;\r
-static unsigned long ulLastRegTest1CycleCount = 0, ulLastRegTest2CycleCount = 0;\r
-long lErrorFound = pdFALSE;\r
-\r
-       /* If this is being executed then the kernel has been started.  Start the \r
-       high frequency timer test as described at the top of this file.  This is \r
-       only included in the optimised build configuration - otherwise it takes up \r
-       too much CPU time and can disrupt other tests. */\r
-       #ifdef INCLUDE_HIGH_FREQUENCY_TIMER_TEST\r
-               vSetupHighFrequencyTimer();\r
-       #endif\r
-\r
-       /* Check the standard demo tasks are running without error. */\r
-       if( xAreGenericQueueTasksStillRunning() != pdTRUE )\r
-       {\r
-               lErrorFound = pdTRUE;\r
-               pcStatusMessage = "Error: GenQueue";\r
-       }\r
-       else if( xAreQueuePeekTasksStillRunning() != pdTRUE )\r
-       {\r
-               lErrorFound = pdTRUE;\r
-               pcStatusMessage = "Error: QueuePeek";\r
-       }\r
-       else if( xAreBlockingQueuesStillRunning() != pdTRUE )\r
-       {\r
-               lErrorFound = pdTRUE;\r
-               pcStatusMessage = "Error: BlockQueue";\r
-       }\r
-       else if( xAreBlockTimeTestTasksStillRunning() != pdTRUE )\r
-       {\r
-               lErrorFound = pdTRUE;\r
-               pcStatusMessage = "Error: BlockTime";\r
-       }\r
-       else if( xAreSemaphoreTasksStillRunning() != pdTRUE )\r
-       {\r
-               lErrorFound = pdTRUE;\r
-               pcStatusMessage = "Error: SemTest";\r
-       }\r
-       else if( xArePollingQueuesStillRunning() != pdTRUE )\r
-       {\r
-               lErrorFound = pdTRUE;\r
-               pcStatusMessage = "Error: PollQueue";\r
-       }\r
-       else if( xIsCreateTaskStillRunning() != pdTRUE )\r
-       {\r
-               lErrorFound = pdTRUE;\r
-               pcStatusMessage = "Error: Death";\r
-       }\r
-       else if( xAreIntegerMathsTaskStillRunning() != pdTRUE )\r
-       {\r
-               lErrorFound = pdTRUE;\r
-               pcStatusMessage = "Error: IntMath";\r
-       }\r
-       else if( xAreRecursiveMutexTasksStillRunning() != pdTRUE )\r
-       {\r
-               lErrorFound = pdTRUE;\r
-               pcStatusMessage = "Error: RecMutex";\r
-       }\r
-       else if( xAreIntQueueTasksStillRunning() != pdPASS )\r
-       {\r
-               lErrorFound = pdTRUE;\r
-               pcStatusMessage = "Error: IntQueue";\r
-       }\r
-       else if( xAreMathsTaskStillRunning() != pdPASS )\r
-       {\r
-               lErrorFound = pdTRUE;\r
-               pcStatusMessage = "Error: Flop";\r
-       }\r
-\r
-       /* Check the reg test tasks are still cycling.  They will stop incrementing\r
-       their loop counters if they encounter an error. */\r
-       if( ulRegTest1CycleCount == ulLastRegTest1CycleCount )\r
-       {\r
-               lErrorFound = pdTRUE;\r
-               pcStatusMessage = "Error: RegTest1";\r
-       }\r
-\r
-       if( ulRegTest2CycleCount == ulLastRegTest2CycleCount )\r
-       {\r
-               lErrorFound = pdTRUE;\r
-               pcStatusMessage = "Error: RegTest2";\r
-       }\r
-\r
-       ulLastRegTest1CycleCount = ulRegTest1CycleCount;\r
-       ulLastRegTest2CycleCount = ulRegTest2CycleCount;\r
-\r
-       /* Toggle the check LED to give an indication of the system status.  If\r
-       the LED toggles every mainNO_ERROR_CHECK_TIMER_PERIOD_MS milliseconds then\r
-       everything is ok.  A faster toggle indicates an error. */\r
-       vParTestToggleLED( mainCHECK_LED );     \r
-       \r
-       /* Have any errors been latch in lErrorFound?  If so, shorten the\r
-       period of the check timer to mainERROR_CHECK_TIMER_PERIOD_MS milliseconds.\r
-       This will result in an increase in the rate at which mainCHECK_LED\r
-       toggles. */\r
-       if( lErrorFound != pdFALSE )\r
-       {\r
-               if( lChangedTimerPeriodAlready == pdFALSE )\r
-               {\r
-                       lChangedTimerPeriodAlready = pdTRUE;\r
-                       \r
-                       /* This call to xTimerChangePeriod() uses a zero block time.\r
-                       Functions called from inside of a timer callback function must\r
-                       *never* attempt to block. */\r
-                       xTimerChangePeriod( xTimer, ( mainERROR_CHECK_TIMER_PERIOD_MS ), mainDONT_BLOCK );\r
-               }\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-/* The RX port uses this callback function to configure its tick interrupt.\r
-This allows the application to choose the tick interrupt source. */\r
-void vApplicationSetupTimerInterrupt( void )\r
-{\r
-       /* Enable compare match timer 0. */\r
-       MSTP( CMT0 ) = 0;\r
-\r
-       /* Interrupt on compare match. */\r
-       CMT0.CMCR.BIT.CMIE = 1;\r
-\r
-       /* Set the compare match value. */\r
-       CMT0.CMCOR = ( unsigned short ) ( ( ( configPERIPHERAL_CLOCK_HZ / configTICK_RATE_HZ ) -1 ) / 8 );\r
-\r
-       /* Divide the PCLK by 8. */\r
-       CMT0.CMCR.BIT.CKS = 0;\r
-\r
-       /* Enable the interrupt... */\r
-       _IEN( _CMT0_CMI0 ) = 1;\r
-\r
-       /* ...and set its priority to the application defined kernel priority. */\r
-       _IPR( _CMT0_CMI0 ) = configKERNEL_INTERRUPT_PRIORITY;\r
-\r
-       /* Start the timer. */\r
-       CMT.CMSTR0.BIT.STR0 = 1;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-/* This function is explained by the comments above its prototype at the top\r
-of this file. */\r
-void vApplicationMallocFailedHook( void )\r
-{\r
-       for( ;; );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-/* This function is explained by the comments above its prototype at the top\r
-of this file. */\r
-void vApplicationStackOverflowHook( TaskHandle_t pxTask, char *pcTaskName )\r
-{\r
-       for( ;; );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-/* This function is explained by the comments above its prototype at the top\r
-of this file. */\r
-void vApplicationIdleHook( void )\r
-{\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-/* This function is explained in the comments at the top of this file. */\r
-static void prvRegTest1Task( void *pvParameters )\r
-{\r
-       if( ( ( unsigned long ) pvParameters ) != mainREG_TEST_1_PARAMETER )\r
-       {\r
-               /* The parameter did not contain the expected value. */\r
-               for( ;; )\r
-               {\r
-                       /* Stop the tick interrupt so its obvious something has gone wrong. */\r
-                       taskDISABLE_INTERRUPTS();\r
-               }\r
-       }\r
-\r
-       /* This is an inline asm function that never returns. */\r
-       prvRegTest1Implementation();\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-/* This function is explained in the comments at the top of this file. */\r
-static void prvRegTest2Task( void *pvParameters )\r
-{\r
-       if( ( ( unsigned long ) pvParameters ) != mainREG_TEST_2_PARAMETER )\r
-       {\r
-               /* The parameter did not contain the expected value. */\r
-               for( ;; )\r
-               {\r
-                       /* Stop the tick interrupt so its obvious something has gone wrong. */\r
-                       taskDISABLE_INTERRUPTS();\r
-               }\r
-       }\r
-\r
-       /* This is an inline asm function that never returns. */\r
-       prvRegTest2Implementation();\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-/* This function is explained in the comments at the top of this file. */\r
-#pragma inline_asm prvRegTest1Implementation\r
-static void prvRegTest1Implementation( void )\r
-{\r
-       ; Put a known value in each register.\r
-       MOV.L   #1, R1\r
-       MOV.L   #2, R2\r
-       MOV.L   #3, R3\r
-       MOV.L   #4, R4\r
-       MOV.L   #5, R5\r
-       MOV.L   #6, R6\r
-       MOV.L   #7, R7\r
-       MOV.L   #8, R8\r
-       MOV.L   #9, R9\r
-       MOV.L   #10, R10\r
-       MOV.L   #11, R11\r
-       MOV.L   #12, R12\r
-       MOV.L   #13, R13\r
-       MOV.L   #14, R14\r
-       MOV.L   #15, R15\r
-\r
-       ; Loop, checking each iteration that each register still contains the\r
-       ; expected value.\r
-TestLoop1:\r
-\r
-       ; Push the registers that are going to get clobbered.\r
-       PUSHM   R14-R15\r
-\r
-       ; Increment the loop counter to show this task is still getting CPU time.\r
-       MOV.L   #_ulRegTest1CycleCount, R14\r
-       MOV.L   [ R14 ], R15\r
-       ADD             #1, R15\r
-       MOV.L   R15, [ R14 ]\r
-\r
-       ; Yield to extend the text coverage.  Set the bit in the ITU SWINTR register.\r
-       MOV.L   #1, R14\r
-       MOV.L   #0872E0H, R15\r
-       MOV.B   R14, [R15]\r
-       NOP\r
-       NOP\r
-\r
-       ; Restore the clobbered registers.\r
-       POPM    R14-R15\r
-\r
-       ; Now compare each register to ensure it still contains the value that was\r
-       ; set before this loop was entered.\r
-       CMP             #1, R1\r
-       BNE             RegTest1Error\r
-       CMP             #2, R2\r
-       BNE             RegTest1Error\r
-       CMP             #3, R3\r
-       BNE             RegTest1Error\r
-       CMP             #4, R4\r
-       BNE             RegTest1Error\r
-       CMP             #5, R5\r
-       BNE             RegTest1Error\r
-       CMP             #6, R6\r
-       BNE             RegTest1Error\r
-       CMP             #7, R7\r
-       BNE             RegTest1Error\r
-       CMP             #8, R8\r
-       BNE             RegTest1Error\r
-       CMP             #9, R9\r
-       BNE             RegTest1Error\r
-       CMP             #10, R10\r
-       BNE             RegTest1Error\r
-       CMP             #11, R11\r
-       BNE             RegTest1Error\r
-       CMP             #12, R12\r
-       BNE             RegTest1Error\r
-       CMP             #13, R13\r
-       BNE             RegTest1Error\r
-       CMP             #14, R14\r
-       BNE             RegTest1Error\r
-       CMP             #15, R15\r
-       BNE             RegTest1Error\r
-\r
-       ; All comparisons passed, start a new itteratio of this loop.\r
-       BRA             TestLoop1\r
-\r
-RegTest1Error:\r
-       ; A compare failed, just loop here so the loop counter stops incrementing\r
-       ; causing the check task to indicate the error.\r
-       BRA RegTest1Error\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-/* This function is explained in the comments at the top of this file. */\r
-#pragma inline_asm prvRegTest2Implementation\r
-static void prvRegTest2Implementation( void )\r
-{\r
-       ; Put a known value in each register.\r
-       MOV.L   #10, R1\r
-       MOV.L   #20, R2\r
-       MOV.L   #30, R3\r
-       MOV.L   #40, R4\r
-       MOV.L   #50, R5\r
-       MOV.L   #60, R6\r
-       MOV.L   #70, R7\r
-       MOV.L   #80, R8\r
-       MOV.L   #90, R9\r
-       MOV.L   #100, R10\r
-       MOV.L   #110, R11\r
-       MOV.L   #120, R12\r
-       MOV.L   #130, R13\r
-       MOV.L   #140, R14\r
-       MOV.L   #150, R15\r
-\r
-       ; Loop, checking on each iteration that each register still contains the\r
-       ; expected value.\r
-TestLoop2:\r
-\r
-       ; Push the registers that are going to get clobbered.\r
-       PUSHM   R14-R15\r
-\r
-       ; Increment the loop counter to show this task is still getting CPU time.\r
-       MOV.L   #_ulRegTest2CycleCount, R14\r
-       MOV.L   [ R14 ], R15\r
-       ADD             #1, R15\r
-       MOV.L   R15, [ R14 ]\r
-\r
-       ; Restore the clobbered registers.\r
-       POPM    R14-R15\r
-\r
-       CMP             #10, R1\r
-       BNE             RegTest2Error\r
-       CMP             #20, R2\r
-       BNE             RegTest2Error\r
-       CMP             #30, R3\r
-       BNE             RegTest2Error\r
-       CMP             #40, R4\r
-       BNE             RegTest2Error\r
-       CMP             #50, R5\r
-       BNE             RegTest2Error\r
-       CMP             #60, R6\r
-       BNE             RegTest2Error\r
-       CMP             #70, R7\r
-       BNE             RegTest2Error\r
-       CMP             #80, R8\r
-       BNE             RegTest2Error\r
-       CMP             #90, R9\r
-       BNE             RegTest2Error\r
-       CMP             #100, R10\r
-       BNE             RegTest2Error\r
-       CMP             #110, R11\r
-       BNE             RegTest2Error\r
-       CMP             #120, R12\r
-       BNE             RegTest2Error\r
-       CMP             #130, R13\r
-       BNE             RegTest2Error\r
-       CMP             #140, R14\r
-       BNE             RegTest2Error\r
-       CMP             #150, R15\r
-       BNE             RegTest2Error\r
-\r
-       ; All comparisons passed, start a new itteratio of this loop.\r
-       BRA             TestLoop2\r
-\r
-RegTest2Error:\r
-       ; A compare failed, just loop here so the loop counter stops incrementing\r
-       ; - causing the check task to indicate the error.\r
-       BRA RegTest2Error\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-char *pcGetTaskStatusMessage( void )\r
-{\r
-       /* Not bothered about a critical section here although technically because of\r
-       the task priorities the pointer could change it will be atomic if not near\r
-       atomic and its not critical. */\r
-       return ( char * ) pcStatusMessage;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-\r
-\r
diff --git a/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/r_bsp_config.h b/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/r_bsp_config.h
deleted file mode 100644 (file)
index 1ddbb9d..0000000
+++ /dev/null
@@ -1,149 +0,0 @@
-/***********************************************************************************************************************\r
-* DISCLAIMER\r
-* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No \r
-* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all \r
-* applicable laws, including copyright laws. \r
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING\r
-* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, \r
-* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM \r
-* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES \r
-* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS \r
-* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\r
-* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of \r
-* this software. By using this software, you agree to the additional terms and conditions found by accessing the \r
-* following link:\r
-* http://www.renesas.com/disclaimer \r
-*\r
-* Copyright (C) 2012 Renesas Electronics Corporation. All rights reserved.    \r
-***********************************************************************************************************************/\r
-/***********************************************************************************************************************\r
-* File Name    : r_bsp_config_reference.c\r
-* Device(s)    : RX63x\r
-* Description  : The file r_bsp_config.h is used to configure your BSP. r_bsp_config.h should be included\r
-*                somewhere in your package so that the r_bsp code has access to it. This file (r_bsp_config_reference.h)\r
-*                is just a reference file that the user can use to make their own r_bsp_config.h file.\r
-************************************************************************************************************************\r
-* History : DD.MM.YYYY Version Description           \r
-*         : 13.03.2012 1.00    First Release            \r
-***********************************************************************************************************************/\r
-#ifndef R_BSP_CONFIG_REF_HEADER_FILE\r
-#define R_BSP_CONFIG_REF_HEADER_FILE\r
-\r
-/***********************************************************************************************************************\r
-Configuration Options\r
-***********************************************************************************************************************/\r
-/* The 'BSP_DECLARE_STACK' macro is checked so that the stack is only declared in one place (resetprg.c). Every time a \r
-   '#pragma stacksize' is encountered, the stack size is increased. This prevents multiplication of stack size. */\r
-#if defined(BSP_DECLARE_STACK)\r
-/* User Stack size in bytes. The Renesas RX toolchain sets the stack size using the #pragma stacksize directive. */\r
-#pragma stacksize su=0x1000\r
-/* Interrupt Stack size in bytes. The Renesas RX toolchain sets the stack size using the #pragma stacksize directive. */\r
-#pragma stacksize si=0x400\r
-#endif\r
-\r
-/* Heap size in bytes. */\r
-#define HEAP_BYTES              (0x4)\r
-\r
-/* After reset MCU will operate in Supervisor mode. To switch to User mode, set this macro to '1'. For more information\r
-   on the differences between these 2 modes see the CPU >> Processor Mode section of your MCU's hardware manual.\r
-   0 = Stay in Supervisor mode.\r
-   1 = Switch to User mode.\r
-*/\r
-#define RUN_IN_USER_MODE        (0)\r
-\r
-/* To get into User Boot Mode the user must control some pins on the MCU and also set some values in ROM. These values\r
-   in ROM are described in the Option-Setting Memory section of the hardware manual. This macro sets these values so \r
-   that User Boot Mode can be used. The user is still responsible for setting the MCU pins appropriately.\r
-   0 = Single-Chip or USB Boot Mode\r
-   1 = User Boot Mode\r
-*/\r
-#define USER_BOOT_ENABLE        (0)\r
-\r
-/* Set your desired ID code. NOTE, leave at the default (all 0xFF's) if you do not wish to use an ID code. If you set \r
-   this value and program it into the MCU then you will need to remember the ID code because the debugger will ask for \r
-   it when trying to connect. Note that the E1/E20 will ignore the ID code when programming the MCU during debugging.\r
-   If you set this value and then forget it then you can clear the ID code by connecting up in serial boot mode using \r
-   FDT. The ID Code is 16 bytes long. The macro below define the ID Code in 4-byte sections. */\r
-/* Lowest 4-byte section, address 0xFFFFFFA0. From MSB to LSB: Control Code, ID code 1, ID code 2, ID code 3. */\r
-#define ID_CODE_LONG_1          (0xFFFFFFFF)\r
-/* 2nd ID Code section, address 0xFFFFFFA4. From MSB to LSB: ID code 4, ID code 5, ID code 6, ID code 7. */\r
-#define ID_CODE_LONG_2          (0xFFFFFFFF)\r
-/* 3rd ID Code section, address 0xFFFFFFA8. From MSB to LSB: ID code 8, ID code 9, ID code 10, ID code 11. */\r
-#define ID_CODE_LONG_3          (0xFFFFFFFF)\r
-/* 4th ID Code section, address 0xFFFFFFAC. From MSB to LSB: ID code 12, ID code 13, ID code 14, ID code 15. */\r
-#define ID_CODE_LONG_4          (0xFFFFFFFF)\r
-\r
-/* This macro lets other modules no if a RTOS is being used.\r
-   0 = RTOS is not used. \r
-   1 = RTOS is used.\r
-*/\r
-#define RTOS_USED               (0)\r
-\r
-/* Clock source select (CKSEL).\r
-   0 = Low Speed On-Chip Oscillator  (LOCO)\r
-   1 = High Speed On-Chip Oscillator (HOCO)\r
-   2 = Main Clock Oscillator  \r
-   3 = Sub-Clock Oscillator\r
-   4 = PLL Circuit\r
-*/ \r
-#define CLOCK_SOURCE            (4)\r
-\r
-/* Clock configuration options.\r
-   The input clock frequency is specified and then the system clocks are set by specifying the multipliers used. The\r
-   multiplier settings are used to set the clock registers in resetprg.c. If a 12MHz clock is used and the \r
-   ICLK is 96MHz, PCLKA is 48MHz, PCLKB is 48MHz, FCLK is 48MHz, USB Clock is 48MHz, and BCLK is 12MHz then the \r
-   settings would be:\r
-\r
-   XTAL_HZ = 12000000\r
-   PLL_DIV = 1  (no division)\r
-   PLL_MUL = 16 (12MHz x 16 = 192MHz)\r
-   ICK_DIV =  2      : System Clock (ICLK)        = (((XTAL_HZ/PLL_DIV) * PLL_MUL) / ICK_DIV)  = 96MHz\r
-   PCKA_DIV = 4      : Peripheral Clock A (PCLKA) = (((XTAL_HZ/PLL_DIV) * PLL_MUL) / PCKA_DIV) = 48MHz\r
-   PCKB_DIV = 4      : Peripheral Clock B (PCLKB) = (((XTAL_HZ/PLL_DIV) * PLL_MUL) / PCKB_DIV) = 48MHz\r
-   FCK_DIV =  4      : Flash IF Clock (FCLK)      = (((XTAL_HZ/PLL_DIV) * PLL_MUL) / FCK_DIV)  = 48MHz\r
-   BCK_DIV =  8      : External Bus Clock (BCK)   = (((XTAL_HZ/PLL_DIV) * PLL_MUL) / BCK_DIV)  = 24MHz\r
-   UCK_DIV =  4      : USB Clock (UCLK)           = (((XTAL_HZ/PLL_DIV) * PLL_MUL) / UCK_DIV)  = 48MHz\r
-*/\r
-/* XTAL - Input clock frequency in Hz */\r
-#define XTAL_HZ                 (12000000)\r
-/* PLL Input Frequency Divider Select (PLIDIV). \r
-   Available divisors = /1 (no division), /2, /4\r
-*/\r
-#define PLL_DIV                 (1)\r
-/* PLL Frequency Multiplication Factor Select (STC). \r
-   Available multipliers = x8, x10, x12, x16, x20, x24, x25, x50\r
-*/\r
-#define PLL_MUL                 (16)\r
-/* System Clock Divider (ICK).\r
-   Available divisors = /1 (no division), /2, /4, /8, /16, /32, /64\r
-*/\r
-#define ICK_DIV                 (2)\r
-/* Peripheral Module Clock A Divider (PCKA). \r
-   Available divisors = /1 (no division), /2, /4, /8, /16, /32, /64\r
-*/\r
-#define PCKA_DIV                (4)\r
-/* Peripheral Module Clock B Divider (PCKB). \r
-   Available divisors = /1 (no division), /2, /4, /8, /16, /32, /64\r
-*/\r
-#define PCKB_DIV                (4)\r
-/* External Bus Clock Divider (BCK). \r
-   Available divisors = /1 (no division), /2, /4, /8, /16, /32, /64\r
-*/\r
-#define BCK_DIV                 (8)\r
-/* Flash IF Clock Divider (FCK). \r
-   Available divisors = /1 (no division), /2, /4, /8, /16, /32, /64\r
-*/\r
-#define FCK_DIV                 (4)\r
-/* IEBUS Clock Divider Select. \r
-   Available divisors = /1 (no division), /2, /4, /6, /8, /16, /32, /64\r
-*/\r
-#define IEBCK_DIV               (8)\r
-/* USB Clock Divider Select. \r
-   Available divisors = /3, /4\r
-*/\r
-#define UCK_DIV                 (4)\r
-\r
-#endif /* R_BSP_CONFIG_REF_HEADER_FILE */\r
-\r
-\r
-\r
diff --git a/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/uIP_Task.c b/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/uIP_Task.c
deleted file mode 100644 (file)
index 844630d..0000000
+++ /dev/null
@@ -1,319 +0,0 @@
-/*\r
- * FreeRTOS Kernel V10.1.0\r
- * Copyright (C) 2018 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
-/* Standard includes. */\r
-#include <string.h>\r
-\r
-/* Scheduler includes. */\r
-#include "FreeRTOS.h"\r
-#include "task.h"\r
-#include "timers.h"\r
-#include "queue.h"\r
-\r
-/* uip includes. */\r
-#include "net/uip.h"\r
-#include "net/uip_arp.h"\r
-#include "apps/httpd/httpd.h"\r
-#include "sys/timer.h"\r
-#include "net/clock-arch.h"\r
-#include "r_ether.h"\r
-\r
-/* Demo includes. */\r
-#include "ParTest.h"\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-/* How long to wait before attempting to connect the MAC again. */\r
-#define uipINIT_WAIT    ( 100 / portTICK_PERIOD_MS )\r
-\r
-/* Shortcut to the header within the Rx buffer. */\r
-#define xHeader ((struct uip_eth_hdr *) &uip_buf[ 0 ])\r
-\r
-/* Standard constant. */\r
-#define uipTOTAL_FRAME_HEADER_SIZE     54\r
-\r
-/* The ARP timer and the periodic timer share a callback function, so the\r
-respective timer IDs are used to determine which timer actually expired.  These\r
-constants are assigned to the timer IDs. */\r
-#define uipARP_TIMER                           0\r
-#define uipPERIODIC_TIMER                      1\r
-\r
-/* A block time of zero ticks simply means, "don't block". */\r
-#define uipDONT_BLOCK                          0UL\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-/*\r
- * Setup the MAC address in the MAC itself, and in the uIP stack.\r
- */\r
-static void prvSetMACAddress( void );\r
-\r
-/*\r
- * Perform any uIP initialisation necessary.\r
- */\r
-static void prvInitialise_uIP( void );\r
-\r
-/*\r
- * The callback function that is assigned to both the periodic timer and the\r
- * ARP timer.\r
- */\r
-static void prvUIPTimerCallback( TimerHandle_t xTimer );\r
-\r
-/*\r
- * Port functions required by the uIP stack.\r
- */\r
-clock_time_t clock_time( void );\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-/* The queue used to send TCP/IP events to the uIP stack. */\r
-QueueHandle_t xEMACEventQueue = NULL;\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-clock_time_t clock_time( void )\r
-{\r
-       return xTaskGetTickCount();\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-void vuIP_Task( void *pvParameters )\r
-{\r
-portBASE_TYPE i;\r
-unsigned long ulNewEvent = 0UL;\r
-unsigned long ulUIP_Events = 0UL;\r
-\r
-       ( void ) pvParameters;\r
-\r
-       /* Initialise the uIP stack. */\r
-       prvInitialise_uIP();\r
-\r
-       /* Initialise the MAC. */\r
-       vInitEmac();\r
-\r
-       while( lEMACWaitForLink() != pdPASS )\r
-    {\r
-        vTaskDelay( uipINIT_WAIT );\r
-    }\r
-\r
-       for( ;; )\r
-       {\r
-               if( ( ulUIP_Events & uipETHERNET_RX_EVENT ) != 0UL )\r
-               {\r
-                       /* Is there received data ready to be processed? */\r
-                       uip_len = ( unsigned short ) ulEMACRead();\r
-\r
-                       if( ( uip_len > 0 ) && ( uip_buf != NULL ) )\r
-                       {\r
-                               /* Standard uIP loop taken from the uIP manual. */\r
-                               if( xHeader->type == htons( UIP_ETHTYPE_IP ) )\r
-                               {\r
-                                       uip_arp_ipin();\r
-                                       uip_input();\r
-\r
-                                       /* If the above function invocation resulted in data that\r
-                                       should be sent out on the network, the global variable\r
-                                       uip_len is set to a value > 0. */\r
-                                       if( uip_len > 0 )\r
-                                       {\r
-                                               uip_arp_out();\r
-                                               vEMACWrite();\r
-                                       }\r
-                               }\r
-                               else if( xHeader->type == htons( UIP_ETHTYPE_ARP ) )\r
-                               {\r
-                                       uip_arp_arpin();\r
-\r
-                                       /* If the above function invocation resulted in data that\r
-                                       should be sent out on the network, the global variable\r
-                                       uip_len is set to a value > 0. */\r
-                                       if( uip_len > 0 )\r
-                                       {\r
-                                               vEMACWrite();\r
-                                       }\r
-                               }\r
-                       }\r
-                       else\r
-                       {\r
-                               ulUIP_Events &= ~uipETHERNET_RX_EVENT;\r
-                       }\r
-               }\r
-\r
-               if( ( ulUIP_Events & uipPERIODIC_TIMER_EVENT ) != 0UL )\r
-               {\r
-                       ulUIP_Events &= ~uipPERIODIC_TIMER_EVENT;\r
-\r
-                       for( i = 0; i < UIP_CONNS; i++ )\r
-                       {\r
-                               uip_periodic( i );\r
-\r
-                               /* If the above function invocation resulted in data that\r
-                               should be sent out on the network, the global variable\r
-                               uip_len is set to a value > 0. */\r
-                               if( uip_len > 0 )\r
-                               {\r
-                                       uip_arp_out();\r
-                                       vEMACWrite();\r
-                               }\r
-                       }\r
-               }\r
-\r
-               /* Call the ARP timer function every 10 seconds. */\r
-               if( ( ulUIP_Events & uipARP_TIMER_EVENT ) != 0 )\r
-               {\r
-                       ulUIP_Events &= ~uipARP_TIMER_EVENT;\r
-                       uip_arp_timer();\r
-               }\r
-\r
-               if( ulUIP_Events == pdFALSE )\r
-               {\r
-                       xQueueReceive( xEMACEventQueue, &ulNewEvent, portMAX_DELAY );\r
-                       ulUIP_Events |= ulNewEvent;\r
-               }\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvInitialise_uIP( void )\r
-{\r
-TimerHandle_t xARPTimer, xPeriodicTimer;\r
-uip_ipaddr_t xIPAddr;\r
-const unsigned long ul_uIPEventQueueLength = 10UL;\r
-\r
-       /* Initialise the uIP stack. */\r
-       uip_init();\r
-       uip_ipaddr( &xIPAddr, configIP_ADDR0, configIP_ADDR1, configIP_ADDR2, configIP_ADDR3 );\r
-       uip_sethostaddr( &xIPAddr );\r
-       uip_ipaddr( &xIPAddr, configNET_MASK0, configNET_MASK1, configNET_MASK2, configNET_MASK3 );\r
-       uip_setnetmask( &xIPAddr );\r
-       prvSetMACAddress();\r
-       httpd_init();\r
-\r
-       /* Create the queue used to sent TCP/IP events to the uIP stack. */\r
-       xEMACEventQueue = xQueueCreate( ul_uIPEventQueueLength, sizeof( unsigned long ) );\r
-\r
-       /* Create and start the uIP timers. */\r
-       xARPTimer = xTimerCreate(       "ARPTimer", /* Just a name that is helpful for debugging, not used by the kernel. */\r
-                                                               ( 10000UL / portTICK_PERIOD_MS ), /* Timer period. */\r
-                                                               pdTRUE, /* Autor-reload. */\r
-                                                               ( void * ) uipARP_TIMER,\r
-                                                               prvUIPTimerCallback\r
-                                                       );\r
-\r
-       xPeriodicTimer = xTimerCreate(  "PeriodicTimer",\r
-                                                                       ( 50 / portTICK_PERIOD_MS ),\r
-                                                                       pdTRUE, /* Autor-reload. */\r
-                                                                       ( void * ) uipPERIODIC_TIMER,\r
-                                                                       prvUIPTimerCallback\r
-                                                               );\r
-\r
-       configASSERT( xARPTimer );\r
-       configASSERT( xPeriodicTimer );\r
-\r
-       xTimerStart( xARPTimer, portMAX_DELAY );\r
-       xTimerStart( xPeriodicTimer, portMAX_DELAY );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvUIPTimerCallback( TimerHandle_t xTimer )\r
-{\r
-static const unsigned long ulARPTimerExpired = uipARP_TIMER_EVENT;\r
-static const unsigned long ulPeriodicTimerExpired = uipPERIODIC_TIMER_EVENT;\r
-\r
-       /* This is a time callback, so calls to xQueueSend() must not attempt to\r
-       block. */\r
-       switch( ( int ) pvTimerGetTimerID( xTimer ) )\r
-       {\r
-               case uipARP_TIMER               :       xQueueSend( xEMACEventQueue, &ulARPTimerExpired, uipDONT_BLOCK );\r
-                                                                       break;\r
-\r
-               case uipPERIODIC_TIMER  :       xQueueSend( xEMACEventQueue, &ulPeriodicTimerExpired, uipDONT_BLOCK );\r
-                                                                       break;\r
-\r
-               default                                 :       /* Should not get here. */\r
-                                                                       break;\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvSetMACAddress( void )\r
-{\r
-struct uip_eth_addr xAddr;\r
-\r
-       /* Configure the MAC address in the uIP stack. */\r
-       xAddr.addr[ 0 ] = configMAC_ADDR0;\r
-       xAddr.addr[ 1 ] = configMAC_ADDR1;\r
-       xAddr.addr[ 2 ] = configMAC_ADDR2;\r
-       xAddr.addr[ 3 ] = configMAC_ADDR3;\r
-       xAddr.addr[ 4 ] = configMAC_ADDR4;\r
-       xAddr.addr[ 5 ] = configMAC_ADDR5;\r
-       uip_setethaddr( xAddr );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-void vApplicationProcessFormInput( char *pcInputString )\r
-{\r
-char *c;\r
-\r
-       /* Only interested in processing form input if this is the IO page. */\r
-       c = strstr( pcInputString, "io.shtml" );\r
-\r
-       if( c )\r
-       {\r
-               /* Is there a command in the string? */\r
-               c = strstr( pcInputString, "?" );\r
-           if( c )\r
-           {\r
-                       /* Turn the LED's on or off in accordance with the check box status. */\r
-                       if( strstr( c, "LED0=1" ) != NULL )\r
-                       {\r
-                               /* Turn the LEDs on. */\r
-                               vParTestSetLED( 7, 1 );\r
-                               vParTestSetLED( 8, 1 );\r
-                               vParTestSetLED( 9, 1 );\r
-                               vParTestSetLED( 10, 1 );\r
-                       }\r
-                       else\r
-                       {\r
-                               /* Turn the LEDs off. */\r
-                               vParTestSetLED( 7, 0 );\r
-                               vParTestSetLED( 8, 0 );\r
-                               vParTestSetLED( 9, 0 );\r
-                               vParTestSetLED( 10, 0 );\r
-                       }\r
-           }\r
-               else\r
-               {\r
-                       /* Commands to turn LEDs off are not always explicit. */\r
-                       vParTestSetLED( 7, 0 );\r
-                       vParTestSetLED( 8, 0 );\r
-                       vParTestSetLED( 9, 0 );\r
-                       vParTestSetLED( 10, 0 );\r
-               }\r
-       }\r
-}\r
-\r
diff --git a/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/webserver/EMAC.c b/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/webserver/EMAC.c
deleted file mode 100644 (file)
index 63c92a7..0000000
+++ /dev/null
@@ -1,535 +0,0 @@
-/*\r
- * FreeRTOS Kernel V10.1.0\r
- * Copyright (C) 2018 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
-/* Hardware specific includes. */\r
-#include "platform.h"\r
-#include "r_ether.h"\r
-#include "phy.h"\r
-\r
-/* FreeRTOS includes. */\r
-#include "FreeRTOS.h"\r
-#include "task.h"\r
-#include "semphr.h"\r
-\r
-/* uIP includes. */\r
-#include "net/uip.h"\r
-\r
-/* The time to wait between attempts to obtain a free buffer. */\r
-#define emacBUFFER_WAIT_DELAY_ms               ( 3 / portTICK_PERIOD_MS )\r
-\r
-/* The number of times emacBUFFER_WAIT_DELAY_ms should be waited before giving\r
-up on attempting to obtain a free buffer all together. */\r
-#define emacBUFFER_WAIT_ATTEMPTS       ( 30 )\r
-\r
-/* The number of Rx descriptors. */\r
-#define emacNUM_RX_DESCRIPTORS 8\r
-\r
-/* The number of Tx descriptors.  When using uIP there is not point in having\r
-more than two. */\r
-#define emacNUM_TX_BUFFERS     2\r
-\r
-/* The total number of EMAC buffers to allocate. */\r
-#define emacNUM_BUFFERS                ( emacNUM_RX_DESCRIPTORS + emacNUM_TX_BUFFERS )\r
-\r
-/* The time to wait for the Tx descriptor to become free. */\r
-#define emacTX_WAIT_DELAY_ms ( 10 / portTICK_PERIOD_MS )\r
-\r
-/* The total number of times to wait emacTX_WAIT_DELAY_ms for the Tx descriptor to\r
-become free. */\r
-#define emacTX_WAIT_ATTEMPTS ( 50 )\r
-\r
-/* Only Rx end and Tx end interrupts are used by this driver. */\r
-#define emacTX_END_INTERRUPT   ( 1UL << 21UL )\r
-#define emacRX_END_INTERRUPT   ( 1UL << 18UL )\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-/* The buffers and descriptors themselves.  */\r
-#pragma section _RX_DESC\r
-       volatile ethfifo xRxDescriptors[ emacNUM_RX_DESCRIPTORS ];\r
-#pragma section _TX_DESC\r
-       volatile ethfifo xTxDescriptors[ emacNUM_TX_BUFFERS ];\r
-#pragma section _ETHERNET_BUFFERS\r
-       struct\r
-       {\r
-               unsigned long ulAlignmentVariable;\r
-               char cBuffer[ emacNUM_BUFFERS ][ UIP_BUFSIZE ];\r
-       } xEthernetBuffers;\r
-#pragma section\r
-\r
-\r
-\r
-\r
-/* Used to indicate which buffers are free and which are in use.  If an index\r
-contains 0 then the corresponding buffer in xEthernetBuffers is free, otherwise \r
-the buffer is in use or about to be used. */\r
-static unsigned char ucBufferInUse[ emacNUM_BUFFERS ];\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-/*\r
- * Initialise both the Rx and Tx descriptors.\r
- */\r
-static void prvInitialiseDescriptors( void );\r
-\r
-/*\r
- * Return a pointer to a free buffer within xEthernetBuffers.\r
- */\r
-static unsigned char *prvGetNextBuffer( void );\r
-\r
-/*\r
- * Return a buffer to the list of free buffers.\r
- */\r
-static void prvReturnBuffer( unsigned char *pucBuffer );\r
-\r
-/*\r
- * Examine the status of the next Rx FIFO to see if it contains new data.\r
- */\r
-static unsigned long prvCheckRxFifoStatus( void );\r
-\r
-/*\r
- * Setup the microcontroller for communication with the PHY.\r
- */\r
-static void prvResetMAC( void );\r
-\r
-/*\r
- * Configure the Ethernet interface peripherals.\r
- */\r
-static void prvConfigureEtherCAndEDMAC( void );\r
-\r
-/*\r
- * Something has gone wrong with the descriptor usage.  Reset all the buffers\r
- * and descriptors.\r
- */\r
-static void prvResetEverything( void );\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-/* Points to the Rx descriptor currently in use. */\r
-static ethfifo *pxCurrentRxDesc = NULL;\r
-\r
-/* The buffer used by the uIP stack to both receive and send.  This points to\r
-one of the Ethernet buffers when its actually in use. */\r
-unsigned char *uip_buf = NULL;\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-void vInitEmac( void )\r
-{\r
-       /* Software reset. */\r
-       prvResetMAC();\r
-       \r
-       /* Set the Rx and Tx descriptors into their initial state. */\r
-       prvInitialiseDescriptors();\r
-\r
-       /* Set the MAC address into the ETHERC */\r
-       ETHERC.MAHR =   ( ( unsigned long ) configMAC_ADDR0 << 24UL ) | \r
-                                       ( ( unsigned long ) configMAC_ADDR1 << 16UL ) | \r
-                                       ( ( unsigned long ) configMAC_ADDR2 << 8UL ) | \r
-                                       ( unsigned long ) configMAC_ADDR3;\r
-                                       \r
-       ETHERC.MALR.BIT.MA = ( ( unsigned long ) configMAC_ADDR4 << 8UL ) |\r
-                                                ( unsigned long ) configMAC_ADDR5;\r
-\r
-       /* Perform rest of interface hardware configuration. */\r
-       prvConfigureEtherCAndEDMAC();\r
-       \r
-       /* Nothing received yet, so uip_buf points nowhere. */\r
-       uip_buf = NULL;\r
-\r
-       /* Initialize the PHY */\r
-       phy_init();\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-void vEMACWrite( void )\r
-{\r
-long x;\r
-\r
-       /* Wait until the second transmission of the last packet has completed. */\r
-       for( x = 0; x < emacTX_WAIT_ATTEMPTS; x++ )\r
-       {\r
-               if( ( xTxDescriptors[ 1 ].status & ACT ) != 0 )\r
-               {\r
-                       /* Descriptor is still active. */\r
-                       vTaskDelay( emacTX_WAIT_DELAY_ms );\r
-               }\r
-               else\r
-               {\r
-                       break;\r
-               }\r
-       }\r
-       \r
-       /* Is the descriptor free after waiting for it? */\r
-       if( ( xTxDescriptors[ 1 ].status & ACT ) != 0 )\r
-       {\r
-               /* Something has gone wrong. */\r
-               prvResetEverything();\r
-       }\r
-       \r
-       /* Setup both descriptors to transmit the frame. */\r
-       xTxDescriptors[ 0 ].buf_p = ( char * ) uip_buf;\r
-       xTxDescriptors[ 0 ].bufsize = uip_len;  \r
-       xTxDescriptors[ 1 ].buf_p = ( char * ) uip_buf;\r
-       xTxDescriptors[ 1 ].bufsize = uip_len;\r
-\r
-       /* uip_buf is being sent by the Tx descriptor.  Allocate a new buffer\r
-       for use by the stack. */\r
-       uip_buf = prvGetNextBuffer();\r
-\r
-       /* Clear previous settings and go. */\r
-       xTxDescriptors[0].status &= ~( FP1 | FP0 );\r
-       xTxDescriptors[0].status |= ( FP1 | FP0 | ACT );\r
-       xTxDescriptors[1].status &= ~( FP1 | FP0 );\r
-       xTxDescriptors[1].status |= ( FP1 | FP0 | ACT );\r
-\r
-       EDMAC.EDTRR.LONG = 0x00000001;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-unsigned long ulEMACRead( void )\r
-{\r
-unsigned long ulBytesReceived;\r
-\r
-       ulBytesReceived = prvCheckRxFifoStatus();\r
-\r
-       if( ulBytesReceived > 0 )\r
-       {\r
-               /* Mark the pxDescriptor buffer as free as uip_buf is going to be set to\r
-               the buffer that contains the received data. */\r
-               prvReturnBuffer( uip_buf );\r
-\r
-               /* Point uip_buf to the data about ot be processed. */\r
-               uip_buf = ( void * ) pxCurrentRxDesc->buf_p;\r
-               \r
-               /* Allocate a new buffer to the descriptor, as uip_buf is now using it's\r
-               old descriptor. */\r
-               pxCurrentRxDesc->buf_p = prvGetNextBuffer();\r
-\r
-               /* Prepare the descriptor to go again. */\r
-               pxCurrentRxDesc->status &= ~( FP1 | FP0 );\r
-               pxCurrentRxDesc->status |= ACT;\r
-\r
-               /* Move onto the next buffer in the ring. */\r
-               pxCurrentRxDesc = pxCurrentRxDesc->next;\r
-               \r
-               if( EDMAC.EDRRR.LONG == 0x00000000L )\r
-               {\r
-                       /* Restart Ethernet if it has stopped */\r
-                       EDMAC.EDRRR.LONG = 0x00000001L;\r
-               }\r
-       }\r
-\r
-       return ulBytesReceived;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-long lEMACWaitForLink( void )\r
-{\r
-long lReturn;\r
-\r
-       /* Set the link status. */\r
-       switch( phy_set_autonegotiate() )\r
-       {\r
-               /* Half duplex link */\r
-               case PHY_LINK_100H:\r
-                                                               ETHERC.ECMR.BIT.DM = 0;\r
-                                                               ETHERC.ECMR.BIT.RTM = 1;\r
-                                                               lReturn = pdPASS;\r
-                                                               break;\r
-\r
-               case PHY_LINK_10H:\r
-                                                               ETHERC.ECMR.BIT.DM = 0;\r
-                                                               ETHERC.ECMR.BIT.RTM = 0;\r
-                                                               lReturn = pdPASS;\r
-                                                               break;\r
-\r
-\r
-               /* Full duplex link */\r
-               case PHY_LINK_100F:\r
-                                                               ETHERC.ECMR.BIT.DM = 1;\r
-                                                               ETHERC.ECMR.BIT.RTM = 1;\r
-                                                               lReturn = pdPASS;\r
-                                                               break;\r
-               \r
-               case PHY_LINK_10F:\r
-                                                               ETHERC.ECMR.BIT.DM = 1;\r
-                                                               ETHERC.ECMR.BIT.RTM = 0;\r
-                                                               lReturn = pdPASS;\r
-                                                               break;\r
-\r
-               default:\r
-                                                               lReturn = pdFAIL;\r
-                                                               break;\r
-       }\r
-\r
-       if( lReturn == pdPASS )\r
-       {\r
-               /* Enable receive and transmit. */\r
-               ETHERC.ECMR.BIT.RE = 1;\r
-               ETHERC.ECMR.BIT.TE = 1;\r
-\r
-               /* Enable EDMAC receive */\r
-               EDMAC.EDRRR.LONG = 0x1;\r
-       }\r
-       \r
-       return lReturn;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvInitialiseDescriptors( void )\r
-{\r
-ethfifo *pxDescriptor;\r
-long x;\r
-\r
-       for( x = 0; x < emacNUM_BUFFERS; x++ )\r
-       {\r
-               /* Ensure none of the buffers are shown as in use at the start. */\r
-               ucBufferInUse[ x ] = pdFALSE;\r
-       }\r
-\r
-       /* Initialise the Rx descriptors. */\r
-       for( x = 0; x < emacNUM_RX_DESCRIPTORS; x++ )\r
-       {\r
-               pxDescriptor = &( xRxDescriptors[ x ] );\r
-               pxDescriptor->buf_p = &( xEthernetBuffers.cBuffer[ x ][ 0 ] );\r
-\r
-               pxDescriptor->bufsize = UIP_BUFSIZE;\r
-               pxDescriptor->size = 0;\r
-               pxDescriptor->status = ACT;\r
-               pxDescriptor->next = &xRxDescriptors[ x + 1 ];  \r
-               \r
-               /* Mark this buffer as in use. */\r
-               ucBufferInUse[ x ] = pdTRUE;\r
-       }\r
-\r
-       /* The last descriptor points back to the start. */\r
-       pxDescriptor->status |= DL;\r
-       pxDescriptor->next = &xRxDescriptors[ 0 ];\r
-       \r
-       /* Initialise the Tx descriptors. */\r
-       for( x = 0; x < emacNUM_TX_BUFFERS; x++ )\r
-       {\r
-               pxDescriptor = &( xTxDescriptors[ x ] );\r
-               \r
-               /* A buffer is not allocated to the Tx descriptor until a send is\r
-               actually required. */\r
-               pxDescriptor->buf_p = NULL;\r
-\r
-               pxDescriptor->bufsize = UIP_BUFSIZE;\r
-               pxDescriptor->size = 0;\r
-               pxDescriptor->status = 0;\r
-               pxDescriptor->next = &xTxDescriptors[ x + 1 ];  \r
-       }\r
-\r
-       /* The last descriptor points back to the start. */\r
-       pxDescriptor->status |= DL;\r
-       pxDescriptor->next = &( xTxDescriptors[ 0 ] );\r
-       \r
-       /* Use the first Rx descriptor to start with. */\r
-       pxCurrentRxDesc = &( xRxDescriptors[ 0 ] );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static unsigned char *prvGetNextBuffer( void )\r
-{\r
-long x;\r
-unsigned char *pucReturn = NULL;\r
-unsigned long ulAttempts = 0;\r
-\r
-       while( pucReturn == NULL )\r
-       {\r
-               /* Look through the buffers to find one that is not in use by\r
-               anything else. */\r
-               for( x = 0; x < emacNUM_BUFFERS; x++ )\r
-               {\r
-                       if( ucBufferInUse[ x ] == pdFALSE )\r
-                       {\r
-                               ucBufferInUse[ x ] = pdTRUE;\r
-                               pucReturn = ( unsigned char * ) &( xEthernetBuffers.cBuffer[ x ][ 0 ] );\r
-                               break;\r
-                       }\r
-               }\r
-\r
-               /* Was a buffer found? */\r
-               if( pucReturn == NULL )\r
-               {\r
-                       ulAttempts++;\r
-\r
-                       if( ulAttempts >= emacBUFFER_WAIT_ATTEMPTS )\r
-                       {\r
-                               break;\r
-                       }\r
-\r
-                       /* Wait then look again. */\r
-                       vTaskDelay( emacBUFFER_WAIT_DELAY_ms );\r
-               }\r
-       }\r
-\r
-       return pucReturn;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvReturnBuffer( unsigned char *pucBuffer )\r
-{\r
-unsigned long ul;\r
-\r
-       /* Return a buffer to the pool of free buffers. */\r
-       for( ul = 0; ul < emacNUM_BUFFERS; ul++ )\r
-       {\r
-               if( &( xEthernetBuffers.cBuffer[ ul ][ 0 ] ) == ( void * ) pucBuffer )\r
-               {\r
-                       ucBufferInUse[ ul ] = pdFALSE;\r
-                       break;\r
-               }\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvResetEverything( void )\r
-{\r
-       /* Temporary code just to see if this gets called.  This function has not\r
-       been implemented. */\r
-       portDISABLE_INTERRUPTS();\r
-       for( ;; );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static unsigned long prvCheckRxFifoStatus( void )\r
-{\r
-unsigned long ulReturn = 0;\r
-\r
-       if( ( pxCurrentRxDesc->status & ACT ) != 0 )\r
-       {\r
-               /* Current descriptor is still active. */\r
-       }\r
-       else if( ( pxCurrentRxDesc->status & FE ) != 0 )\r
-       {\r
-               /* Frame error.  Clear the error. */\r
-               pxCurrentRxDesc->status &= ~( FP1 | FP0 | FE );\r
-               pxCurrentRxDesc->status &= ~( RMAF | RRF | RTLF | RTSF | PRE | CERF );\r
-               pxCurrentRxDesc->status |= ACT;\r
-               pxCurrentRxDesc = pxCurrentRxDesc->next;\r
-\r
-               if( EDMAC.EDRRR.LONG == 0x00000000UL )\r
-               {\r
-                       /* Restart Ethernet if it has stopped. */\r
-                       EDMAC.EDRRR.LONG = 0x00000001UL;\r
-               }       \r
-       }\r
-       else\r
-       {\r
-               /* The descriptor contains a frame.  Because of the size of the buffers\r
-               the frame should always be complete. */\r
-               if( ( pxCurrentRxDesc->status & FP0 ) == FP0 )\r
-               {\r
-                       ulReturn = pxCurrentRxDesc->size;\r
-               }\r
-               else\r
-               {\r
-                       /* Do not expect to get here. */\r
-                       prvResetEverything();\r
-               }\r
-       }\r
-       \r
-       return ulReturn;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvResetMAC( void )\r
-{\r
-       /* Ensure the EtherC and EDMAC are enabled. */\r
-       SYSTEM.MSTPCRB.BIT.MSTPB15 = 0;\r
-       vTaskDelay( 100 / portTICK_PERIOD_MS );\r
-       \r
-       EDMAC.EDMR.BIT.SWR = 1; \r
-       \r
-       /* Crude wait for reset to complete. */\r
-       vTaskDelay( 500 / portTICK_PERIOD_MS ); \r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvConfigureEtherCAndEDMAC( void )\r
-{\r
-       /* Initialisation code taken from Renesas example project. */\r
-       \r
-       /* TODO:    Check   bit 5   */\r
-       ETHERC.ECSR.LONG = 0x00000037;                          /* Clear all ETHERC statuS BFR, PSRTO, LCHNG, MPD, ICD */\r
-\r
-       /* Set the EDMAC interrupt priority. */\r
-       _IPR( _ETHER_EINT ) = configKERNEL_INTERRUPT_PRIORITY;\r
-\r
-       /* TODO:    Check   bit 5   */\r
-       /* Enable interrupts of interest only. */\r
-       EDMAC.EESIPR.LONG = emacTX_END_INTERRUPT | emacRX_END_INTERRUPT;\r
-       ETHERC.RFLR.LONG = 1518;                                        /* Ether payload is 1500+ CRC */\r
-       ETHERC.IPGR.LONG = 0x00000014;                          /* Intergap is 96-bit time */\r
-\r
-       /* EDMAC */\r
-       EDMAC.EESR.LONG = 0x47FF0F9F;                           /* Clear all ETHERC and EDMAC status bits */\r
-       #ifdef __LIT\r
-               EDMAC.EDMR.BIT.DE = 1;\r
-       #endif\r
-       EDMAC.RDLAR = ( void * ) pxCurrentRxDesc;       /* Initialaize Rx Descriptor List Address */\r
-       EDMAC.TDLAR = &( xTxDescriptors[ 0 ] );         /* Initialaize Tx Descriptor List Address */\r
-       EDMAC.TRSCER.LONG = 0x00000000;                         /* Copy-back status is RFE & TFE only   */\r
-       EDMAC.TFTR.LONG = 0x00000000;                           /* Threshold of Tx_FIFO */\r
-       EDMAC.FDR.LONG = 0x00000000;                            /* Transmit fifo & receive fifo is 256 bytes */\r
-       EDMAC.RMCR.LONG = 0x00000003;                           /* Receive function is normal mode(continued) */\r
-       ETHERC.ECMR.BIT.PRM = 0;                                        /* Ensure promiscuous mode is off. */\r
-               \r
-       /* Enable the interrupt... */\r
-       _IEN( _ETHER_EINT ) = 1;        \r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-#pragma interrupt ( vEMAC_ISR_Handler( vect = VECT_ETHER_EINT, enable ) )\r
-void vEMAC_ISR_Handler( void )\r
-{\r
-unsigned long ul = EDMAC.EESR.LONG;\r
-long lHigherPriorityTaskWoken = pdFALSE;\r
-extern QueueHandle_t xEMACEventQueue;\r
-const unsigned long ulRxEvent = uipETHERNET_RX_EVENT;\r
-\r
-       /* Has a Tx end occurred? */\r
-       if( ul & emacTX_END_INTERRUPT )\r
-       {\r
-               /* Only return the buffer to the pool once both Txes have completed. */\r
-               prvReturnBuffer( ( void * ) xTxDescriptors[ 0 ].buf_p );\r
-               EDMAC.EESR.LONG = emacTX_END_INTERRUPT;\r
-       }\r
-\r
-       /* Has an Rx end occurred? */\r
-       if( ul & emacRX_END_INTERRUPT )\r
-       {\r
-               /* Make sure the Ethernet task is not blocked waiting for a packet. */\r
-               xQueueSendFromISR( xEMACEventQueue, &ulRxEvent, &lHigherPriorityTaskWoken );\r
-               portYIELD_FROM_ISR( lHigherPriorityTaskWoken );\r
-               EDMAC.EESR.LONG = emacRX_END_INTERRUPT;\r
-       }\r
-}\r
-\r
diff --git a/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/webserver/httpd-cgi.c b/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/webserver/httpd-cgi.c
deleted file mode 100644 (file)
index 016644a..0000000
+++ /dev/null
@@ -1,277 +0,0 @@
-/**\r
- * \addtogroup httpd\r
- * @{\r
- */\r
-\r
-/**\r
- * \file\r
- *         Web server script interface\r
- * \author\r
- *         Adam Dunkels <adam@sics.se>\r
- *\r
- */\r
-\r
-/*\r
- * Copyright (c) 2001-2006, Adam Dunkels.\r
- * All rights reserved.\r
- *\r
- * Redistribution and use in source and binary forms, with or without\r
- * modification, are permitted provided that the following conditions\r
- * are met:\r
- * 1. Redistributions of source code must retain the above copyright\r
- *    notice, this list of conditions and the following disclaimer.\r
- * 2. Redistributions in binary form must reproduce the above copyright\r
- *    notice, this list of conditions and the following disclaimer in the\r
- *    documentation and/or other materials provided with the distribution.\r
- * 3. The name of the author may not be used to endorse or promote\r
- *    products derived from this software without specific prior\r
- *    written permission.\r
- *\r
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\r
- * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\r
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE\r
- * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
- *\r
- * This file is part of the uIP TCP/IP stack.\r
- *\r
- * $Id: httpd-cgi.c,v 1.2 2006/06/11 21:46:37 adam Exp $\r
- *\r
- */\r
-#include "net/uip.h"\r
-#include "net/psock.h"\r
-#include "apps/httpd/httpd.h"\r
-#include "apps/httpd/httpd-cgi.h"\r
-#include "apps/httpd/httpd-fs.h"\r
-\r
-#include <stdio.h>\r
-#include <string.h>\r
-\r
-#include "FreeRTOS.h"\r
-#include "task.h"\r
-\r
-HTTPD_CGI_CALL( file, "file-stats", file_stats );\r
-HTTPD_CGI_CALL( tcp, "tcp-connections", tcp_stats );\r
-HTTPD_CGI_CALL( net, "net-stats", net_stats );\r
-HTTPD_CGI_CALL( rtos, "rtos-stats", rtos_stats );\r
-HTTPD_CGI_CALL( run, "run-time", run_time );\r
-HTTPD_CGI_CALL( io, "led-io", led_io );\r
-\r
-static const struct httpd_cgi_call     *calls[] = { &file, &tcp, &net, &rtos, &run, &io, NULL };\r
-\r
-/*---------------------------------------------------------------------------*/\r
-static PT_THREAD( nullfunction ( struct httpd_state *s, char *ptr ) )\r
-{\r
-       PSOCK_BEGIN( &s->sout );\r
-       ( void ) ptr;\r
-       ( void ) PT_YIELD_FLAG;\r
-       PSOCK_END( &s->sout );\r
-}\r
-\r
-/*---------------------------------------------------------------------------*/\r
-httpd_cgifunction httpd_cgi( char *name )\r
-{\r
-       const struct httpd_cgi_call **f;\r
-\r
-       /* Find the matching name in the table, return the function. */\r
-       for( f = calls; *f != NULL; ++f )\r
-       {\r
-               if( strncmp((*f)->name, name, strlen((*f)->name)) == 0 )\r
-               {\r
-                       return( *f )->function;\r
-               }\r
-       }\r
-\r
-       return nullfunction;\r
-}\r
-\r
-/*---------------------------------------------------------------------------*/\r
-static unsigned short generate_file_stats( void *arg )\r
-{\r
-       char    *f = ( char * ) arg;\r
-       return sprintf( ( char * ) uip_appdata, "%5u", httpd_fs_count(f) );\r
-}\r
-\r
-/*---------------------------------------------------------------------------*/\r
-static PT_THREAD( file_stats ( struct httpd_state *s, char *ptr ) )\r
-{\r
-       PSOCK_BEGIN( &s->sout );\r
-\r
-       ( void ) PT_YIELD_FLAG;\r
-\r
-       PSOCK_GENERATOR_SEND( &s->sout, generate_file_stats, strchr(ptr, ' ') + 1 );\r
-\r
-       PSOCK_END( &s->sout );\r
-}\r
-\r
-/*---------------------------------------------------------------------------*/\r
-static const char      closed[] = /*  "CLOSED",*/ { 0x43, 0x4c, 0x4f, 0x53, 0x45, 0x44, 0 };\r
-static const char      syn_rcvd[] = /*  "SYN-RCVD",*/ { 0x53, 0x59, 0x4e, 0x2d, 0x52, 0x43, 0x56, 0x44, 0 };\r
-static const char      syn_sent[] = /*  "SYN-SENT",*/ { 0x53, 0x59, 0x4e, 0x2d, 0x53, 0x45, 0x4e, 0x54, 0 };\r
-static const char      established[] = /*  "ESTABLISHED",*/ { 0x45, 0x53, 0x54, 0x41, 0x42, 0x4c, 0x49, 0x53, 0x48, 0x45, 0x44, 0 };\r
-static const char      fin_wait_1[] = /*  "FIN-WAIT-1",*/ { 0x46, 0x49, 0x4e, 0x2d, 0x57, 0x41, 0x49, 0x54, 0x2d, 0x31, 0 };\r
-static const char      fin_wait_2[] = /*  "FIN-WAIT-2",*/ { 0x46, 0x49, 0x4e, 0x2d, 0x57, 0x41, 0x49, 0x54, 0x2d, 0x32, 0 };\r
-static const char      closing[] = /*  "CLOSING",*/ { 0x43, 0x4c, 0x4f, 0x53, 0x49, 0x4e, 0x47, 0 };\r
-static const char      time_wait[] = /*  "TIME-WAIT,"*/ { 0x54, 0x49, 0x4d, 0x45, 0x2d, 0x57, 0x41, 0x49, 0x54, 0 };\r
-static const char      last_ack[] = /*  "LAST-ACK"*/ { 0x4c, 0x41, 0x53, 0x54, 0x2d, 0x41, 0x43, 0x4b, 0 };\r
-\r
-static const char      *states[] = { closed, syn_rcvd, syn_sent, established, fin_wait_1, fin_wait_2, closing, time_wait, last_ack };\r
-\r
-static unsigned short generate_tcp_stats( void *arg )\r
-{\r
-       struct uip_conn         *conn;\r
-       struct httpd_state      *s = ( struct httpd_state * ) arg;\r
-\r
-       conn = &uip_conns[s->count];\r
-       return sprintf( ( char * ) uip_appdata,\r
-                                        "<tr><td>%d</td><td>%u.%u.%u.%u:%u</td><td>%s</td><td>%u</td><td>%u</td><td>%c %c</td></tr>\r\n", htons(conn->lport),\r
-                                        htons(conn->ripaddr.u16[0]) >> 8, htons(conn->ripaddr.u16[0]) & 0xff, htons(conn->ripaddr.u16[1]) >> 8,\r
-                                        htons(conn->ripaddr.u16[1]) & 0xff, htons(conn->rport), states[conn->tcpstateflags & UIP_TS_MASK], conn->nrtx, conn->timer,\r
-                                        (uip_outstanding(conn)) ? '*' : ' ', (uip_stopped(conn)) ? '!' : ' ' );\r
-}\r
-\r
-/*---------------------------------------------------------------------------*/\r
-static PT_THREAD( tcp_stats ( struct httpd_state *s, char *ptr ) )\r
-{\r
-       PSOCK_BEGIN( &s->sout );\r
-       ( void ) ptr;\r
-       ( void ) PT_YIELD_FLAG;\r
-       for( s->count = 0; s->count < UIP_CONNS; ++s->count )\r
-       {\r
-               if( (uip_conns[s->count].tcpstateflags & UIP_TS_MASK) != UIP_CLOSED )\r
-               {\r
-                       PSOCK_GENERATOR_SEND( &s->sout, generate_tcp_stats, s );\r
-               }\r
-       }\r
-\r
-       PSOCK_END( &s->sout );\r
-}\r
-\r
-/*---------------------------------------------------------------------------*/\r
-static unsigned short generate_net_stats( void *arg )\r
-{\r
-       struct httpd_state      *s = ( struct httpd_state * ) arg;\r
-       return sprintf( ( char * ) uip_appdata, "%5u\n", (( uip_stats_t * ) &uip_stat)[s->count] );\r
-}\r
-\r
-static PT_THREAD( net_stats ( struct httpd_state *s, char *ptr ) )\r
-{\r
-       PSOCK_BEGIN( &s->sout );\r
-       ( void ) ptr;\r
-       ( void ) PT_YIELD_FLAG;\r
-#if UIP_STATISTICS\r
-       for( s->count = 0; s->count < sizeof(uip_stat) / sizeof(uip_stats_t); ++s->count )\r
-       {\r
-               PSOCK_GENERATOR_SEND( &s->sout, generate_net_stats, s );\r
-       }\r
-\r
-#endif /* UIP_STATISTICS */\r
-\r
-       PSOCK_END( &s->sout );\r
-}\r
-\r
-/*---------------------------------------------------------------------------*/\r
-extern void vTaskList( char *pcWriteBuffer );\r
-extern char *pcGetTaskStatusMessage( void );\r
-static char cCountBuf[128];\r
-long           lRefreshCount = 0;\r
-static unsigned short generate_rtos_stats( void *arg )\r
-{\r
-       ( void ) arg;\r
-       lRefreshCount++;\r
-       sprintf( cCountBuf, "<p><br>Refresh count = %d<p><br>%s", ( int ) lRefreshCount, pcGetTaskStatusMessage() );\r
-       vTaskList( ( char * ) uip_appdata );\r
-       strcat( uip_appdata, cCountBuf );\r
-\r
-       return strlen( uip_appdata );\r
-}\r
-\r
-/*---------------------------------------------------------------------------*/\r
-static PT_THREAD( rtos_stats ( struct httpd_state *s, char *ptr ) )\r
-{\r
-       PSOCK_BEGIN( &s->sout );\r
-       ( void ) ptr;\r
-       ( void ) PT_YIELD_FLAG;\r
-       PSOCK_GENERATOR_SEND( &s->sout, generate_rtos_stats, NULL );\r
-       PSOCK_END( &s->sout );\r
-}\r
-\r
-/*---------------------------------------------------------------------------*/\r
-char                   *pcStatus;\r
-unsigned long  ulString;\r
-\r
-static unsigned short generate_io_state( void *arg )\r
-{\r
-       extern long lParTestGetLEDState( unsigned long ulLED );\r
-       ( void ) arg;\r
-\r
-       /* Are the dynamically setable LEDs currently on or off? */\r
-       if( lParTestGetLEDState( 3 ) )\r
-       {\r
-               pcStatus = "checked";\r
-       }\r
-       else\r
-       {\r
-               pcStatus = "";\r
-       }\r
-\r
-       sprintf( uip_appdata, "<input type=\"checkbox\" name=\"LED0\" value=\"1\" %s>LED<p><p>", pcStatus );\r
-\r
-       return strlen( uip_appdata );\r
-}\r
-\r
-/*---------------------------------------------------------------------------*/\r
-extern void vTaskGetRunTimeStats( char *pcWriteBuffer );\r
-extern unsigned short usMaxJitter;\r
-static char cJitterBuffer[ 200 ];\r
-static unsigned short generate_runtime_stats( void *arg )\r
-{\r
-       ( void ) arg;\r
-       lRefreshCount++;\r
-       sprintf( cCountBuf, "<p><br>Refresh count = %d", ( int ) lRefreshCount );\r
-\r
-       #ifdef INCLUDE_HIGH_FREQUENCY_TIMER_TEST\r
-       {\r
-               sprintf( cJitterBuffer, "<p><br>Max high frequency timer jitter = %d peripheral clock periods.<p><br>", ( int ) usMaxJitter );\r
-               vTaskGetRunTimeStats( ( char * ) uip_appdata );\r
-               strcat( uip_appdata, cJitterBuffer );\r
-       }\r
-       #else\r
-       {\r
-               ( void ) cJitterBuffer;\r
-               strcpy( uip_appdata, "<p>Run time stats are only available in the debug_with_optimisation build configuration.<p>" );\r
-       }\r
-       #endif\r
-\r
-       strcat( uip_appdata, cCountBuf );\r
-\r
-       return strlen( uip_appdata );\r
-}\r
-\r
-/*---------------------------------------------------------------------------*/\r
-static PT_THREAD( run_time ( struct httpd_state *s, char *ptr ) )\r
-{\r
-       PSOCK_BEGIN( &s->sout );\r
-       ( void ) ptr;\r
-       ( void ) PT_YIELD_FLAG;\r
-       PSOCK_GENERATOR_SEND( &s->sout, generate_runtime_stats, NULL );\r
-       PSOCK_END( &s->sout );\r
-}\r
-\r
-/*---------------------------------------------------------------------------*/\r
-static PT_THREAD( led_io ( struct httpd_state *s, char *ptr ) )\r
-{\r
-       PSOCK_BEGIN( &s->sout );\r
-       ( void ) ptr;\r
-       ( void ) PT_YIELD_FLAG;\r
-       PSOCK_GENERATOR_SEND( &s->sout, generate_io_state, NULL );\r
-       PSOCK_END( &s->sout );\r
-}\r
-\r
-/** @} */\r
diff --git a/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/webserver/httpd-fs/404.html b/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/webserver/httpd-fs/404.html
deleted file mode 100644 (file)
index 43e7f4c..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-<html>\r
-  <body bgcolor="white">\r
-    <center>\r
-      <h1>404 - file not found</h1>\r
-      <h3>Go <a href="/">here</a> instead.</h3>\r
-    </center>\r
-  </body>\r
-</html>
\ No newline at end of file
diff --git a/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/webserver/httpd-fs/index.html b/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/webserver/httpd-fs/index.html
deleted file mode 100644 (file)
index 4937dc6..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
-<html>\r
-  <head>\r
-    <title>FreeRTOS.org uIP WEB server demo</title>\r
-  </head>\r
-  <BODY onLoad="window.setTimeout(&quot;location.href='index.shtml'&quot;,100)">\r
-<font face="arial">\r
-Loading index.shtml.  Click <a href="index.shtml">here</a> if not automatically redirected.\r
-</font>\r
-</font>\r
-</body>\r
-</html>\r
-\r
diff --git a/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/webserver/httpd-fs/index.shtml b/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/webserver/httpd-fs/index.shtml
deleted file mode 100644 (file)
index 882d085..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
-<html>\r
-  <head>\r
-    <title>FreeRTOS.org uIP WEB server demo</title>\r
-  </head>\r
-  <BODY onLoad="window.setTimeout(&quot;location.href='index.shtml'&quot;,2000)">\r
-<font face="arial">\r
-<a href="index.shtml">Task Stats</a> <b>|</b> <a href="runtime.shtml">Run Time Stats</a> <b>|</b> <a href="stats.shtml">TCP Stats</a> <b>|</b> <a href="tcp.shtml">Connections</a> <b>|</b> <a href="http://www.freertos.org/">FreeRTOS Homepage</a> <b>|</b> <a href="io.shtml">IO</a> <b>|</b> <a href="logo.jpg">37K jpg</a>\r
-<br><p>\r
-<hr>\r
-<br><p>\r
-<h2>Task statistics</h2>\r
-Page will refresh every 2 seconds.<p>\r
-<font face="courier"><pre>Task          State  Priority  Stack #<br>************************************************<br>\r
-%! rtos-stats\r
-</pre></font>\r
-</font>\r
-</body>\r
-</html>\r
-\r
diff --git a/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/webserver/httpd-fs/io.shtml b/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/webserver/httpd-fs/io.shtml
deleted file mode 100644 (file)
index 819e2d3..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
-<html>\r
-  <head>\r
-    <title>FreeRTOS.org uIP WEB server demo</title>\r
-  </head>\r
-  <BODY>\r
-<font face="arial">\r
-<a href="index.shtml">Task Stats</a> <b>|</b> <a href="runtime.shtml">Run Time Stats</a> <b>|</b> <a href="stats.shtml">TCP Stats</a> <b>|</b> <a href="tcp.shtml">Connections</a> <b>|</b> <a href="http://www.freertos.org/">FreeRTOS Homepage</a> <b>|</b> <a href="io.shtml">IO</a> <b>|</b> <a href="logo.jpg">37K jpg</a>\r
-<br><p>\r
-<hr>\r
-<b>LED and LCD IO</b><br>\r
-\r
-<p>\r
-\r
-Use the check box to turn on or off LED 4, then click "Update IO".\r
-\r
-\r
-<p>\r
-<form name="aForm" action="/io.shtml" method="get">\r
-%! led-io\r
-<p>\r
-<input type="submit" value="Update IO">\r
-</form>\r
-<br><p>\r
-</font>\r
-</body>\r
-</html>\r
-\r
diff --git a/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/webserver/httpd-fs/runtime.shtml b/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/webserver/httpd-fs/runtime.shtml
deleted file mode 100644 (file)
index 3464fd4..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
-<html>\r
-  <head>\r
-    <title>FreeRTOS.org uIP WEB server demo</title>\r
-  </head>\r
-  <BODY onLoad="window.setTimeout(&quot;location.href='runtime.shtml'&quot;,2000)">\r
-<font face="arial">\r
-<a href="index.shtml">Task Stats</a> <b>|</b> <a href="runtime.shtml">Run Time Stats</a> <b>|</b> <a href="stats.shtml">TCP Stats</a> <b>|</b> <a href="tcp.shtml">Connections</a> <b>|</b> <a href="http://www.freertos.org/">FreeRTOS Homepage</a> <b>|</b> <a href="io.shtml">IO</a> <b>|</b> <a href="logo.jpg">37K jpg</a>\r
-<br><p>\r
-<hr>\r
-<br><p>\r
-<h2>Run-time statistics</h2>\r
-Page will refresh every 2 seconds.<p>\r
-<font face="courier"><pre>Task            Abs Time      % Time<br>****************************************<br>\r
-%! run-time\r
-</pre></font>\r
-</font>\r
-</body>\r
-</html>\r
-\r
diff --git a/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/webserver/httpd-fs/stats.shtml b/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/webserver/httpd-fs/stats.shtml
deleted file mode 100644 (file)
index f541186..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
-<html>\r
-  <head>\r
-    <title>FreeRTOS.org uIP WEB server demo</title>\r
-  </head>\r
-  <BODY>\r
-<font face="arial">\r
-<a href="index.shtml">Task Stats</a> <b>|</b> <a href="runtime.shtml">Run Time Stats</a> <b>|</b> <a href="stats.shtml">TCP Stats</a> <b>|</b> <a href="tcp.shtml">Connections</a> <b>|</b> <a href="http://www.freertos.org/">FreeRTOS Homepage</a> <b>|</b> <a href="io.shtml">IO</a> <b>|</b> <a href="logo.jpg">37K jpg</a>\r
-<br><p>\r
-<hr>\r
-<br><p>\r
-<h2>Network statistics</h2>\r
-<table width="300" border="0">\r
-<tr><td align="left"><font face="courier"><pre>\r
-IP           Packets received\r
-             Packets sent\r
-             Forwaded\r
-             Dropped\r
-IP errors    IP version/header length\r
-             IP length, high byte\r
-             IP length, low byte\r
-             IP fragments\r
-             Header checksum\r
-             Wrong protocol\r
-ICMP        Packets received\r
-             Packets sent\r
-             Packets dropped\r
-             Type errors\r
-             Checksum errors\r
-TCP          Packets received\r
-             Packets sent\r
-             Packets dropped\r
-             Checksum errors\r
-             Data packets without ACKs\r
-             Resets\r
-             Retransmissionsa\r
-             Syn to closed port\r
-UDP          Packets dropped\r
-             Packets received\r
-             Packets sent\r
-             Packets chkerr\r
-            No connection avaliable\r
-</pre></font></td><td><font face="courier"><pre>%! net-stats\r
-</pre></font></td></table>\r
-</font>\r
-</body>\r
-</html>\r
diff --git a/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/webserver/httpd-fs/tcp.shtml b/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/webserver/httpd-fs/tcp.shtml
deleted file mode 100644 (file)
index 23dcdca..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
-<html>\r
-  <head>\r
-    <title>FreeRTOS.org uIP WEB server demo</title>\r
-  </head>\r
-  <BODY>\r
-<font face="arial">\r
-<a href="index.shtml">Task Stats</a> <b>|</b> <a href="runtime.shtml">Run Time Stats</a> <b>|</b> <a href="stats.shtml">TCP Stats</a> <b>|</b> <a href="tcp.shtml">Connections</a> <b>|</b> <a href="http://www.freertos.org/">FreeRTOS Homepage</a> <b>|</b> <a href="io.shtml">IO</a> <b>|</b> <a href="logo.jpg">37K jpg</a>\r
-<br><p>\r
-<hr>\r
-<br>\r
-<h2>Network connections</h2>\r
-<p>\r
-<table>\r
-<tr><th>Local</th><th>Remote</th><th>State</th><th>Retransmissions</th><th>Timer</th><th>Flags</th></tr>\r
-%! tcp-connections\r
-</pre></font>\r
-</font>\r
-</body>\r
-</html>\r
-\r
diff --git a/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/webserver/httpd-fsdata.c b/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/webserver/httpd-fsdata.c
deleted file mode 100644 (file)
index 47823d1..0000000
+++ /dev/null
@@ -1,3871 +0,0 @@
-static const char data_404_html[] = {\r
-       /* /404.html */\r
-       0x2f, 0x34, 0x30, 0x34, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0,\r
-       0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0xd, 0xa, 0x20, 0x20, \r
-       0x3c, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x62, 0x67, 0x63, 0x6f, \r
-       0x6c, 0x6f, 0x72, 0x3d, 0x22, 0x77, 0x68, 0x69, 0x74, 0x65, \r
-       0x22, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x63, \r
-       0x65, 0x6e, 0x74, 0x65, 0x72, 0x3e, 0xd, 0xa, 0x20, 0x20, \r
-       0x20, 0x20, 0x20, 0x20, 0x3c, 0x68, 0x31, 0x3e, 0x34, 0x30, \r
-       0x34, 0x20, 0x2d, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x6e, \r
-       0x6f, 0x74, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x3c, 0x2f, \r
-       0x68, 0x31, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, \r
-       0x20, 0x3c, 0x68, 0x33, 0x3e, 0x47, 0x6f, 0x20, 0x3c, 0x61, \r
-       0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x2f, 0x22, 0x3e, \r
-       0x68, 0x65, 0x72, 0x65, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x69, \r
-       0x6e, 0x73, 0x74, 0x65, 0x61, 0x64, 0x2e, 0x3c, 0x2f, 0x68, \r
-       0x33, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, \r
-       0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x3e, 0xd, 0xa, 0x20, \r
-       0x20, 0x3c, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0xd, 0xa, \r
-       0x3c, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0};\r
-\r
-static const char data_index_html[] = {\r
-       /* /index.html */\r
-       0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0,\r
-       0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, 0x45, 0x20, \r
-       0x48, 0x54, 0x4d, 0x4c, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, \r
-       0x43, 0x20, 0x22, 0x2d, 0x2f, 0x2f, 0x57, 0x33, 0x43, 0x2f, \r
-       0x2f, 0x44, 0x54, 0x44, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x20, \r
-       0x34, 0x2e, 0x30, 0x31, 0x20, 0x54, 0x72, 0x61, 0x6e, 0x73, \r
-       0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x2f, 0x45, \r
-       0x4e, 0x22, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, \r
-       0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, \r
-       0x67, 0x2f, 0x54, 0x52, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x34, \r
-       0x2f, 0x6c, 0x6f, 0x6f, 0x73, 0x65, 0x2e, 0x64, 0x74, 0x64, \r
-       0x22, 0x3e, 0xd, 0xa, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, \r
-       0xd, 0xa, 0x20, 0x20, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, \r
-       0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x74, \r
-       0x6c, 0x65, 0x3e, 0x46, 0x72, 0x65, 0x65, 0x52, 0x54, 0x4f, \r
-       0x53, 0x2e, 0x6f, 0x72, 0x67, 0x20, 0x75, 0x49, 0x50, 0x20, \r
-       0x57, 0x45, 0x42, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, \r
-       0x20, 0x64, 0x65, 0x6d, 0x6f, 0x3c, 0x2f, 0x74, 0x69, 0x74, \r
-       0x6c, 0x65, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x3c, 0x2f, 0x68, \r
-       0x65, 0x61, 0x64, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x3c, 0x42, \r
-       0x4f, 0x44, 0x59, 0x20, 0x6f, 0x6e, 0x4c, 0x6f, 0x61, 0x64, \r
-       0x3d, 0x22, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x2e, 0x73, \r
-       0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x28, \r
-       0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x6c, 0x6f, 0x63, 0x61, \r
-       0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x68, 0x72, 0x65, 0x66, 0x3d, \r
-       0x27, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x73, 0x68, 0x74, \r
-       0x6d, 0x6c, 0x27, 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x2c, \r
-       0x31, 0x30, 0x30, 0x29, 0x22, 0x3e, 0xd, 0xa, 0x3c, 0x66, \r
-       0x6f, 0x6e, 0x74, 0x20, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, \r
-       0x61, 0x72, 0x69, 0x61, 0x6c, 0x22, 0x3e, 0xd, 0xa, 0x4c, \r
-       0x6f, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6e, 0x64, \r
-       0x65, 0x78, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x2e, 0x20, \r
-       0x20, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x20, 0x3c, 0x61, 0x20, \r
-       0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x69, 0x6e, 0x64, 0x65, \r
-       0x78, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x68, \r
-       0x65, 0x72, 0x65, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x69, 0x66, \r
-       0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x6d, \r
-       0x61, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x72, \r
-       0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x65, 0x64, 0x2e, \r
-       0xd, 0xa, 0x3c, 0x2f, 0x66, 0x6f, 0x6e, 0x74, 0x3e, 0xd, \r
-       0xa, 0x3c, 0x2f, 0x66, 0x6f, 0x6e, 0x74, 0x3e, 0xd, 0xa, \r
-       0x3c, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0xd, 0xa, 0x3c, \r
-       0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0xd, 0xa, 0xd, 0xa, \r
-0};\r
-\r
-static const char data_index_shtml[] = {\r
-       /* /index.shtml */\r
-       0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0,\r
-       0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, 0x45, 0x20, \r
-       0x48, 0x54, 0x4d, 0x4c, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, \r
-       0x43, 0x20, 0x22, 0x2d, 0x2f, 0x2f, 0x57, 0x33, 0x43, 0x2f, \r
-       0x2f, 0x44, 0x54, 0x44, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x20, \r
-       0x34, 0x2e, 0x30, 0x31, 0x20, 0x54, 0x72, 0x61, 0x6e, 0x73, \r
-       0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x2f, 0x45, \r
-       0x4e, 0x22, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, \r
-       0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, \r
-       0x67, 0x2f, 0x54, 0x52, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x34, \r
-       0x2f, 0x6c, 0x6f, 0x6f, 0x73, 0x65, 0x2e, 0x64, 0x74, 0x64, \r
-       0x22, 0x3e, 0xd, 0xa, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, \r
-       0xd, 0xa, 0x20, 0x20, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, \r
-       0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x74, \r
-       0x6c, 0x65, 0x3e, 0x46, 0x72, 0x65, 0x65, 0x52, 0x54, 0x4f, \r
-       0x53, 0x2e, 0x6f, 0x72, 0x67, 0x20, 0x75, 0x49, 0x50, 0x20, \r
-       0x57, 0x45, 0x42, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, \r
-       0x20, 0x64, 0x65, 0x6d, 0x6f, 0x3c, 0x2f, 0x74, 0x69, 0x74, \r
-       0x6c, 0x65, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x3c, 0x2f, 0x68, \r
-       0x65, 0x61, 0x64, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x3c, 0x42, \r
-       0x4f, 0x44, 0x59, 0x20, 0x6f, 0x6e, 0x4c, 0x6f, 0x61, 0x64, \r
-       0x3d, 0x22, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x2e, 0x73, \r
-       0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x28, \r
-       0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x6c, 0x6f, 0x63, 0x61, \r
-       0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x68, 0x72, 0x65, 0x66, 0x3d, \r
-       0x27, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x73, 0x68, 0x74, \r
-       0x6d, 0x6c, 0x27, 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x2c, \r
-       0x32, 0x30, 0x30, 0x30, 0x29, 0x22, 0x3e, 0xd, 0xa, 0x3c, \r
-       0x66, 0x6f, 0x6e, 0x74, 0x20, 0x66, 0x61, 0x63, 0x65, 0x3d, \r
-       0x22, 0x61, 0x72, 0x69, 0x61, 0x6c, 0x22, 0x3e, 0xd, 0xa, \r
-       0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x69, \r
-       0x6e, 0x64, 0x65, 0x78, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, \r
-       0x22, 0x3e, 0x54, 0x61, 0x73, 0x6b, 0x20, 0x53, 0x74, 0x61, \r
-       0x74, 0x73, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x3c, 0x62, 0x3e, \r
-       0x7c, 0x3c, 0x2f, 0x62, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, \r
-       0x72, 0x65, 0x66, 0x3d, 0x22, 0x72, 0x75, 0x6e, 0x74, 0x69, \r
-       0x6d, 0x65, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, \r
-       0x52, 0x75, 0x6e, 0x20, 0x54, 0x69, 0x6d, 0x65, 0x20, 0x53, \r
-       0x74, 0x61, 0x74, 0x73, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x3c, \r
-       0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, 0x20, 0x3c, 0x61, \r
-       0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x73, 0x74, 0x61, \r
-       0x74, 0x73, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, \r
-       0x54, 0x43, 0x50, 0x20, 0x53, 0x74, 0x61, 0x74, 0x73, 0x3c, \r
-       0x2f, 0x61, 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, \r
-       0x62, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, \r
-       0x3d, 0x22, 0x74, 0x63, 0x70, 0x2e, 0x73, 0x68, 0x74, 0x6d, \r
-       0x6c, 0x22, 0x3e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, \r
-       0x69, 0x6f, 0x6e, 0x73, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x3c, \r
-       0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, 0x20, 0x3c, 0x61, \r
-       0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, \r
-       0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x66, 0x72, \r
-       0x65, 0x65, 0x72, 0x74, 0x6f, 0x73, 0x2e, 0x6f, 0x72, 0x67, \r
-       0x2f, 0x22, 0x3e, 0x46, 0x72, 0x65, 0x65, 0x52, 0x54, 0x4f, \r
-       0x53, 0x20, 0x48, 0x6f, 0x6d, 0x65, 0x70, 0x61, 0x67, 0x65, \r
-       0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, \r
-       0x2f, 0x62, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, \r
-       0x66, 0x3d, 0x22, 0x69, 0x6f, 0x2e, 0x73, 0x68, 0x74, 0x6d, \r
-       0x6c, 0x22, 0x3e, 0x49, 0x4f, 0x3c, 0x2f, 0x61, 0x3e, 0x20, \r
-       0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, 0x20, 0x3c, \r
-       0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x6c, 0x6f, \r
-       0x67, 0x6f, 0x2e, 0x6a, 0x70, 0x67, 0x22, 0x3e, 0x33, 0x37, \r
-       0x4b, 0x20, 0x6a, 0x70, 0x67, 0x3c, 0x2f, 0x61, 0x3e, 0xd, \r
-       0xa, 0x3c, 0x62, 0x72, 0x3e, 0x3c, 0x70, 0x3e, 0xd, 0xa, \r
-       0x3c, 0x68, 0x72, 0x3e, 0xd, 0xa, 0x3c, 0x62, 0x72, 0x3e, \r
-       0x3c, 0x70, 0x3e, 0xd, 0xa, 0x3c, 0x68, 0x32, 0x3e, 0x54, \r
-       0x61, 0x73, 0x6b, 0x20, 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, \r
-       0x74, 0x69, 0x63, 0x73, 0x3c, 0x2f, 0x68, 0x32, 0x3e, 0xd, \r
-       0xa, 0x50, 0x61, 0x67, 0x65, 0x20, 0x77, 0x69, 0x6c, 0x6c, \r
-       0x20, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x20, 0x65, \r
-       0x76, 0x65, 0x72, 0x79, 0x20, 0x32, 0x20, 0x73, 0x65, 0x63, \r
-       0x6f, 0x6e, 0x64, 0x73, 0x2e, 0x3c, 0x70, 0x3e, 0xd, 0xa, \r
-       0x3c, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x66, 0x61, 0x63, 0x65, \r
-       0x3d, 0x22, 0x63, 0x6f, 0x75, 0x72, 0x69, 0x65, 0x72, 0x22, \r
-       0x3e, 0x3c, 0x70, 0x72, 0x65, 0x3e, 0x54, 0x61, 0x73, 0x6b, \r
-       0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, \r
-       0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x20, 0x50, 0x72, 0x69, \r
-       0x6f, 0x72, 0x69, 0x74, 0x79, 0x20, 0x20, 0x53, 0x74, 0x61, \r
-       0x63, 0x6b, 0x9, 0x23, 0x3c, 0x62, 0x72, 0x3e, 0x2a, 0x2a, \r
-       0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, \r
-       0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, \r
-       0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, \r
-       0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, \r
-       0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x3c, 0x62, 0x72, 0x3e, \r
-       0xd, 0xa, 0x25, 0x21, 0x20, 0x72, 0x74, 0x6f, 0x73, 0x2d, \r
-       0x73, 0x74, 0x61, 0x74, 0x73, 0xd, 0xa, 0x3c, 0x2f, 0x70, \r
-       0x72, 0x65, 0x3e, 0x3c, 0x2f, 0x66, 0x6f, 0x6e, 0x74, 0x3e, \r
-       0xd, 0xa, 0x3c, 0x2f, 0x66, 0x6f, 0x6e, 0x74, 0x3e, 0xd, \r
-       0xa, 0x3c, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0xd, 0xa, \r
-       0x3c, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0xd, 0xa, 0xd, \r
-       0xa, 0};\r
-\r
-static const char data_io_shtml[] = {\r
-       /* /io.shtml */\r
-       0x2f, 0x69, 0x6f, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0,\r
-       0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, 0x45, 0x20, \r
-       0x48, 0x54, 0x4d, 0x4c, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, \r
-       0x43, 0x20, 0x22, 0x2d, 0x2f, 0x2f, 0x57, 0x33, 0x43, 0x2f, \r
-       0x2f, 0x44, 0x54, 0x44, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x20, \r
-       0x34, 0x2e, 0x30, 0x31, 0x20, 0x54, 0x72, 0x61, 0x6e, 0x73, \r
-       0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x2f, 0x45, \r
-       0x4e, 0x22, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, \r
-       0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, \r
-       0x67, 0x2f, 0x54, 0x52, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x34, \r
-       0x2f, 0x6c, 0x6f, 0x6f, 0x73, 0x65, 0x2e, 0x64, 0x74, 0x64, \r
-       0x22, 0x3e, 0xd, 0xa, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, \r
-       0xd, 0xa, 0x20, 0x20, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, \r
-       0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x74, \r
-       0x6c, 0x65, 0x3e, 0x46, 0x72, 0x65, 0x65, 0x52, 0x54, 0x4f, \r
-       0x53, 0x2e, 0x6f, 0x72, 0x67, 0x20, 0x75, 0x49, 0x50, 0x20, \r
-       0x57, 0x45, 0x42, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, \r
-       0x20, 0x64, 0x65, 0x6d, 0x6f, 0x3c, 0x2f, 0x74, 0x69, 0x74, \r
-       0x6c, 0x65, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x3c, 0x2f, 0x68, \r
-       0x65, 0x61, 0x64, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x3c, 0x42, \r
-       0x4f, 0x44, 0x59, 0x3e, 0xd, 0xa, 0x3c, 0x66, 0x6f, 0x6e, \r
-       0x74, 0x20, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x61, 0x72, \r
-       0x69, 0x61, 0x6c, 0x22, 0x3e, 0xd, 0xa, 0x3c, 0x61, 0x20, \r
-       0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x69, 0x6e, 0x64, 0x65, \r
-       0x78, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x54, \r
-       0x61, 0x73, 0x6b, 0x20, 0x53, 0x74, 0x61, 0x74, 0x73, 0x3c, \r
-       0x2f, 0x61, 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, \r
-       0x62, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, \r
-       0x3d, 0x22, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, \r
-       0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x52, 0x75, 0x6e, \r
-       0x20, 0x54, 0x69, 0x6d, 0x65, 0x20, 0x53, 0x74, 0x61, 0x74, \r
-       0x73, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, \r
-       0x3c, 0x2f, 0x62, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, \r
-       0x65, 0x66, 0x3d, 0x22, 0x73, 0x74, 0x61, 0x74, 0x73, 0x2e, \r
-       0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x54, 0x43, 0x50, \r
-       0x20, 0x53, 0x74, 0x61, 0x74, 0x73, 0x3c, 0x2f, 0x61, 0x3e, \r
-       0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, 0x20, \r
-       0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x74, \r
-       0x63, 0x70, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, \r
-       0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, \r
-       0x73, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, \r
-       0x3c, 0x2f, 0x62, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, \r
-       0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, \r
-       0x2f, 0x77, 0x77, 0x77, 0x2e, 0x66, 0x72, 0x65, 0x65, 0x72, \r
-       0x74, 0x6f, 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x22, 0x3e, \r
-       0x46, 0x72, 0x65, 0x65, 0x52, 0x54, 0x4f, 0x53, 0x20, 0x48, \r
-       0x6f, 0x6d, 0x65, 0x70, 0x61, 0x67, 0x65, 0x3c, 0x2f, 0x61, \r
-       0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, \r
-       0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, \r
-       0x69, 0x6f, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, \r
-       0x49, 0x4f, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x3c, 0x62, 0x3e, \r
-       0x7c, 0x3c, 0x2f, 0x62, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, \r
-       0x72, 0x65, 0x66, 0x3d, 0x22, 0x6c, 0x6f, 0x67, 0x6f, 0x2e, \r
-       0x6a, 0x70, 0x67, 0x22, 0x3e, 0x33, 0x37, 0x4b, 0x20, 0x6a, \r
-       0x70, 0x67, 0x3c, 0x2f, 0x61, 0x3e, 0xd, 0xa, 0x3c, 0x62, \r
-       0x72, 0x3e, 0x3c, 0x70, 0x3e, 0xd, 0xa, 0x3c, 0x68, 0x72, \r
-       0x3e, 0xd, 0xa, 0x3c, 0x62, 0x3e, 0x4c, 0x45, 0x44, 0x20, \r
-       0x61, 0x6e, 0x64, 0x20, 0x4c, 0x43, 0x44, 0x20, 0x49, 0x4f, \r
-       0x3c, 0x2f, 0x62, 0x3e, 0x3c, 0x62, 0x72, 0x3e, 0xd, 0xa, \r
-       0xd, 0xa, 0x3c, 0x70, 0x3e, 0xd, 0xa, 0xd, 0xa, 0x55, \r
-       0x73, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x68, 0x65, \r
-       0x63, 0x6b, 0x20, 0x62, 0x6f, 0x78, 0x20, 0x74, 0x6f, 0x20, \r
-       0x74, 0x75, 0x72, 0x6e, 0x20, 0x6f, 0x6e, 0x20, 0x6f, 0x72, \r
-       0x20, 0x6f, 0x66, 0x66, 0x20, 0x4c, 0x45, 0x44, 0x20, 0x34, \r
-       0x2c, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x63, 0x6c, 0x69, \r
-       0x63, 0x6b, 0x20, 0x22, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, \r
-       0x20, 0x49, 0x4f, 0x22, 0x2e, 0xd, 0xa, 0xd, 0xa, 0xd, \r
-       0xa, 0x3c, 0x70, 0x3e, 0xd, 0xa, 0x3c, 0x66, 0x6f, 0x72, \r
-       0x6d, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x61, 0x46, \r
-       0x6f, 0x72, 0x6d, 0x22, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, \r
-       0x6e, 0x3d, 0x22, 0x2f, 0x69, 0x6f, 0x2e, 0x73, 0x68, 0x74, \r
-       0x6d, 0x6c, 0x22, 0x20, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, \r
-       0x3d, 0x22, 0x67, 0x65, 0x74, 0x22, 0x3e, 0xd, 0xa, 0x25, \r
-       0x21, 0x20, 0x6c, 0x65, 0x64, 0x2d, 0x69, 0x6f, 0xd, 0xa, \r
-       0x3c, 0x70, 0x3e, 0xd, 0xa, 0x3c, 0x69, 0x6e, 0x70, 0x75, \r
-       0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x73, 0x75, \r
-       0x62, 0x6d, 0x69, 0x74, 0x22, 0x20, 0x76, 0x61, 0x6c, 0x75, \r
-       0x65, 0x3d, 0x22, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, \r
-       0x49, 0x4f, 0x22, 0x3e, 0xd, 0xa, 0x3c, 0x2f, 0x66, 0x6f, \r
-       0x72, 0x6d, 0x3e, 0xd, 0xa, 0x3c, 0x62, 0x72, 0x3e, 0x3c, \r
-       0x70, 0x3e, 0xd, 0xa, 0x3c, 0x2f, 0x66, 0x6f, 0x6e, 0x74, \r
-       0x3e, 0xd, 0xa, 0x3c, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, \r
-       0xd, 0xa, 0x3c, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0xd, \r
-       0xa, 0xd, 0xa, 0};\r
-\r
-static const char data_logo_jpg[] = {\r
-       /* /logo.jpg */\r
-       0x2f, 0x6c, 0x6f, 0x67, 0x6f, 0x2e, 0x6a, 0x70, 0x67, 0,\r
-       0xff, 0xd8, 0xff, 0xe0, 00, 0x10, 0x4a, 0x46, 0x49, 0x46, \r
-       00, 0x1, 0x1, 00, 00, 0x1, 00, 0x1, 00, 00, \r
-       0xff, 0xdb, 00, 0x43, 00, 0x3, 0x2, 0x2, 0x3, 0x2, \r
-       0x2, 0x3, 0x3, 0x3, 0x3, 0x4, 0x3, 0x3, 0x4, 0x5, \r
-       0x8, 0x5, 0x5, 0x4, 0x4, 0x5, 0xa, 0x7, 0x7, 0x6, \r
-       0x8, 0xc, 0xa, 0xc, 0xc, 0xb, 0xa, 0xb, 0xb, 0xd, \r
-       0xe, 0x12, 0x10, 0xd, 0xe, 0x11, 0xe, 0xb, 0xb, 0x10, \r
-       0x16, 0x10, 0x11, 0x13, 0x14, 0x15, 0x15, 0x15, 0xc, 0xf, \r
-       0x17, 0x18, 0x16, 0x14, 0x18, 0x12, 0x14, 0x15, 0x14, 0xff, \r
-       0xdb, 00, 0x43, 0x1, 0x3, 0x4, 0x4, 0x5, 0x4, 0x5, \r
-       0x9, 0x5, 0x5, 0x9, 0x14, 0xd, 0xb, 0xd, 0x14, 0x14, \r
-       0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, \r
-       0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, \r
-       0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, \r
-       0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, \r
-       0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0xff, 0xc0, \r
-       00, 0x11, 0x8, 0x1, 0x8, 0x2, 0xc2, 0x3, 0x1, 0x22, \r
-       00, 0x2, 0x11, 0x1, 0x3, 0x11, 0x1, 0xff, 0xc4, 00, \r
-       0x1f, 00, 00, 0x1, 0x5, 0x1, 0x1, 0x1, 0x1, 0x1, \r
-       0x1, 00, 00, 00, 00, 00, 00, 00, 00, 0x1, \r
-       0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb, \r
-       0xff, 0xc4, 00, 0xb5, 0x10, 00, 0x2, 0x1, 0x3, 0x3, \r
-       0x2, 0x4, 0x3, 0x5, 0x5, 0x4, 0x4, 00, 00, 0x1, \r
-       0x7d, 0x1, 0x2, 0x3, 00, 0x4, 0x11, 0x5, 0x12, 0x21, \r
-       0x31, 0x41, 0x6, 0x13, 0x51, 0x61, 0x7, 0x22, 0x71, 0x14, \r
-       0x32, 0x81, 0x91, 0xa1, 0x8, 0x23, 0x42, 0xb1, 0xc1, 0x15, \r
-       0x52, 0xd1, 0xf0, 0x24, 0x33, 0x62, 0x72, 0x82, 0x9, 0xa, \r
-       0x16, 0x17, 0x18, 0x19, 0x1a, 0x25, 0x26, 0x27, 0x28, 0x29, \r
-       0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x43, 0x44, \r
-       0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, \r
-       0x57, 0x58, 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, \r
-       0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, \r
-       0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x92, 0x93, \r
-       0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, \r
-       0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, \r
-       0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, \r
-       0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, \r
-       0xd8, 0xd9, 0xda, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, \r
-       0xe8, 0xe9, 0xea, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, \r
-       0xf8, 0xf9, 0xfa, 0xff, 0xc4, 00, 0x1f, 0x1, 00, 0x3, \r
-       0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 00, \r
-       00, 00, 00, 00, 00, 0x1, 0x2, 0x3, 0x4, 0x5, \r
-       0x6, 0x7, 0x8, 0x9, 0xa, 0xb, 0xff, 0xc4, 00, 0xb5, \r
-       0x11, 00, 0x2, 0x1, 0x2, 0x4, 0x4, 0x3, 0x4, 0x7, \r
-       0x5, 0x4, 0x4, 00, 0x1, 0x2, 0x77, 00, 0x1, 0x2, \r
-       0x3, 0x11, 0x4, 0x5, 0x21, 0x31, 0x6, 0x12, 0x41, 0x51, \r
-       0x7, 0x61, 0x71, 0x13, 0x22, 0x32, 0x81, 0x8, 0x14, 0x42, \r
-       0x91, 0xa1, 0xb1, 0xc1, 0x9, 0x23, 0x33, 0x52, 0xf0, 0x15, \r
-       0x62, 0x72, 0xd1, 0xa, 0x16, 0x24, 0x34, 0xe1, 0x25, 0xf1, \r
-       0x17, 0x18, 0x19, 0x1a, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x35, \r
-       0x36, 0x37, 0x38, 0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, \r
-       0x48, 0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, \r
-       0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x73, \r
-       0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x82, 0x83, 0x84, \r
-       0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, \r
-       0x96, 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, \r
-       0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, \r
-       0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, \r
-       0xc9, 0xca, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, \r
-       0xda, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, \r
-       0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xff, \r
-       0xda, 00, 0xc, 0x3, 0x1, 00, 0x2, 0x11, 0x3, 0x11, \r
-       00, 0x3f, 00, 0xfd, 0x53, 0xa2, 0x8a, 0x28, 00, 0xa2, \r
-       0x8a, 0x28, 00, 0xa2, 0x8a, 0x28, 00, 0xa2, 0x8a, 0x28, \r
-       00, 0xaa, 0xf7, 0xfa, 0x85, 0xb6, 0x95, 0x67, 0x2d, 0xd5, \r
-       0xe4, 0xf1, 0xdb, 0x5b, 0x44, 0xa5, 0x9e, 0x59, 0x58, 0x2a, \r
-       0xa8, 0x1e, 0xf5, 0xc6, 0x7c, 0x4e, 0xf8, 0xb3, 0xa6, 0xfc, \r
-       0x39, 0xb4, 0x48, 0xb0, 0xb7, 0xda, 0xd5, 0xc6, 0x5, 0xb6, \r
-       0x9e, 0x8d, 0x86, 0x72, 0x4e, 0x37, 0x37, 0xf7, 0x57, 0xf9, \r
-       0xf6, 0xaa, 0x16, 0x5f, 0xd, 0x9f, 0xc6, 0xd0, 0xc5, 0xa9, \r
-       0xf8, 0xc6, 0xe1, 0xef, 0xa6, 0x99, 0x3, 0xa6, 0x9e, 0x84, \r
-       0xad, 0xbd, 0xb6, 0x7b, 0x2a, 0xf7, 0x3e, 0xe7, 0x9a, 0xe0, \r
-       0xa9, 0x89, 0xbc, 0xdd, 0x1a, 0xb, 0x9a, 0x6b, 0x7e, 0xcb, \r
-       0xd5, 0xfe, 0x9b, 0x9c, 0xb2, 0xaf, 0x79, 0x3a, 0x74, 0xb5, \r
-       0x92, 0xdf, 0xb2, 0xf5, 0xff, 00, 0x23, 0x93, 0xf1, 0xa7, \r
-       0xed, 0x5f, 0xa1, 0x69, 0x1b, 0xa1, 0xd0, 0x2d, 0x64, 0xd6, \r
-       0x2e, 0x1, 0xc7, 0x9b, 0x26, 0x62, 0x84, 0x7d, 0xf, 0x53, \r
-       0xf9, 0x57, 0x91, 0x6b, 0x5f, 0xb5, 0xf, 0x8e, 0x35, 0x49, \r
-       0x9, 0xb7, 0xba, 0xb7, 0xd3, 0x23, 0xec, 0x96, 0xd0, 0x29, \r
-       0xfd, 0x5b, 0x26, 0xbe, 0x92, 0x7f, 0x81, 0x1e, 0xb, 0x7f, \r
-       0xf9, 0x84, 0x46, 0x3e, 0x95, 0xb, 0xfe, 0xcf, 0xfe, 0xa, \r
-       0x93, 0xae, 0x96, 0xa3, 0xe8, 0x6b, 0xc2, 0xaf, 0x84, 0xcd, \r
-       0xab, 0xbb, 0xba, 0xa9, 0x2e, 0xc9, 0xb5, 0xfa, 0x5c, 0xf0, \r
-       0xb1, 0x18, 0x4c, 0xce, 0xbb, 0xd2, 0xb2, 0x8a, 0xec, 0xb4, \r
-       0xff, 00, 0x82, 0x7c, 0x91, 0x3f, 0xc6, 0xf, 0x19, 0x5c, \r
-       0x48, 0x5d, 0xfc, 0x45, 0x7e, 0x58, 0xf5, 0xc4, 0xb8, 0x1f, \r
-       0x90, 0xa7, 0x27, 0xc6, 0x5f, 0x1a, 0x46, 0xca, 0x57, 0xc4, \r
-       0x57, 0xc0, 0xaf, 0x23, 0xf7, 0x99, 0xfe, 0x95, 0xf5, 0x73, \r
-       0xfe, 0xce, 0x9e, 0x9, 0x7f, 0xf9, 0x87, 0x15, 0xfa, 0x35, \r
-       0x43, 0x27, 0xec, 0xd7, 0xe0, 0xa7, 0xe9, 0x67, 0x2a, 0xfd, \r
-       0x1e, 0xbc, 0xcf, 0xec, 0x7c, 0xc5, 0x3b, 0xa9, 0xff, 00, \r
-       0xe4, 0xcc, 0xf3, 0x3f, 0xb1, 0xf3, 0x1d, 0xd5, 0x6f, 0xc5, \r
-       0x9f, 0x31, 0x2f, 0xc7, 0x9f, 0x1e, 0x29, 0xcf, 0xfc, 0x24, \r
-       0x77, 0x47, 0xea, 0x10, 0xff, 00, 0x4a, 0x9e, 0x2f, 0xda, \r
-       0x17, 0xc7, 0xd1, 0xc, 0xf, 0x10, 0xcc, 0x7b, 0xfc, 0xd0, \r
-       0xc6, 0x7f, 0x9a, 0xd7, 0xd1, 0xed, 0xfb, 0x31, 0xf8, 0x34, \r
-       0xe7, 0x10, 0xce, 0x7, 0xfb, 0xff, 00, 0xfd, 0x6a, 0x81, \r
-       0xff, 00, 0x65, 0xcf, 0x8, 0x37, 0x4f, 0xb4, 0x83, 0xfe, \r
-       0xf0, 0xa7, 0xfd, 0x99, 0x9a, 0xad, 0xaa, 0x7f, 0xe4, 0xcc, \r
-       0x3f, 0xb2, 0xf3, 0x45, 0xb5, 0x6f, 0xc5, 0x9f, 0x3d, 0xff, \r
-       00, 0xc3, 0x46, 0x7c, 0x40, 0xff, 00, 0xa0, 0xfb, 0xff, \r
-       00, 0xe0, 0x3c, 0x5f, 0xfc, 0x4d, 0x48, 0xbf, 0xb4, 0x8f, \r
-       0x8f, 0xd4, 0xe7, 0xfb, 0x6f, 0x3e, 0xc6, 0xda, 0x2f, 0xfe, \r
-       0x26, 0xbd, 0xe9, 0xff, 00, 0x65, 0x6f, 0x9, 0xb6, 0x71, \r
-       0x25, 0xd0, 0xff, 00, 0x81, 0xa, 0x85, 0xff, 00, 0x64, \r
-       0xff, 00, 0xb, 0x30, 0xe2, 0xe6, 0xed, 0x4f, 0xd4, 0x51, \r
-       0xfd, 0x9d, 0x9b, 0x2f, 0xb6, 0xff, 00, 0xf0, 0x26, 0x1f, \r
-       0xd9, 0xd9, 0xb2, 0xda, 0xb7, 0xfe, 0x4c, 0xcf, 0x11, 0x5f, \r
-       0xda, 0x63, 0xc7, 0xca, 0x79, 0xd5, 0xa3, 0x6f, 0x63, 0x6b, \r
-       0x1f, 0xf8, 0x54, 0xcb, 0xfb, 0x50, 0x78, 0xf1, 0x40, 0x1f, \r
-       0x6f, 0xb6, 0x3e, 0xe6, 0xd5, 0x2b, 0xd8, 0x5b, 0xf6, 0x49, \r
-       0xf0, 0xd1, 0xe9, 0x7f, 0x76, 0xbe, 0xdc, 0x54, 0xf, 0xfb, \r
-       0x22, 0xe8, 0x24, 0x7c, 0xba, 0xa5, 0xd0, 0x3f, 0xee, 0x8a, \r
-       0x5f, 0x52, 0xce, 0x17, 0xda, 0x7f, 0xf8, 0x17, 0xfc, 0x10, \r
-       0xfa, 0x8e, 0x70, 0xbf, 0xe5, 0xef, 0xfe, 0x4c, 0x79, 0x7a, \r
-       0xfe, 0xd5, 0x9e, 0x38, 0x4, 0x66, 0x4d, 0x3d, 0xb1, 0xd8, \r
-       0xda, 0xf5, 0xfd, 0x6a, 0x55, 0xfd, 0xac, 0x7c, 0x6a, 0xbd, \r
-       0x53, 0x4c, 0x6f, 0xad, 0xb3, 0x7f, 0xf1, 0x55, 0xe8, 0xcf, \r
-       0xfb, 0x21, 0x68, 0xe7, 0xee, 0xea, 0xd7, 0x3, 0xea, 0xa2, \r
-       0xa0, 0x7f, 0xd9, 0x3, 0x4e, 0x39, 0xdb, 0xac, 0x4c, 0x3e, \r
-       0xa8, 0x29, 0xfd, 0x5b, 0x39, 0x5f, 0x69, 0xff, 00, 0xe0, \r
-       0x48, 0x3e, 0xa9, 0x9d, 0x2f, 0xf9, 0x79, 0xf8, 0x9c, 0x18, \r
-       0xfd, 0xad, 0x3c, 0x67, 0xff, 00, 0x3c, 0x74, 0xbf, 0xfc, \r
-       0x7, 0x6f, 0xfe, 0x2e, 0x9e, 0x3f, 0x6b, 0x6f, 0x18, 0x77, \r
-       0xb6, 0xd2, 0xcf, 0xfd, 0xb0, 0x7f, 0xfe, 0x2e, 0xbb, 0x37, \r
-       0xfd, 0x8f, 0xac, 0xff, 00, 0x87, 0x5a, 0x93, 0xf1, 0x41, \r
-       0x50, 0xbf, 0xec, 0x7b, 0x11, 0xfb, 0xba, 0xe3, 0xf, 0xac, \r
-       0x74, 0x7b, 0x1c, 0xe9, 0x75, 0x7f, 0x7a, 0x17, 0xd5, 0xf3, \r
-       0xb5, 0xf6, 0xff, 00, 0x14, 0x72, 0xc9, 0xfb, 0x5d, 0x78, \r
-       0xb1, 0x4f, 0xcd, 0x63, 0xa5, 0xb0, 0xf4, 0xf2, 0x9c, 0x7f, \r
-       0xec, 0xd5, 0x62, 0x2f, 0xda, 0xff, 00, 0xc4, 0x8a, 0xb8, \r
-       0x7d, 0x27, 0x4d, 0x73, 0xea, 0x3, 0x8f, 0xfd, 0x9a, 0xb6, \r
-       0x9f, 0xf6, 0x3d, 0x71, 0x8d, 0x9a, 0xd8, 0x3f, 0x58, 0xea, \r
-       0x17, 0xfd, 0x8f, 0xee, 0x81, 0x3b, 0x75, 0x98, 0xcf, 0xa6, \r
-       0x52, 0xa7, 0x93, 0x3a, 0x5f, 0xcd, 0xf7, 0xa0, 0xf6, 0x79, \r
-       0xe2, 0xfb, 0x5f, 0x91, 0x4d, 0x7f, 0x6c, 0x4d, 0x6c, 0x1, \r
-       0xbb, 0x42, 0xb0, 0x27, 0xb9, 0xe, 0xe3, 0x35, 0x3a, 0x7e, \r
-       0xd8, 0xda, 0x98, 0x3f, 0x37, 0x87, 0x6d, 0x8, 0xf6, 0xb8, \r
-       0x61, 0xfd, 0x29, 0xad, 0xfb, 0x21, 0x6a, 0x40, 0x71, 0xaa, \r
-       0xc2, 0x4f, 0xa6, 0xda, 0x85, 0xff, 00, 0x64, 0x4d, 0x60, \r
-       0x1f, 0x97, 0x53, 0x80, 0xfe, 0x14, 0xef, 0x9d, 0xae, 0xff, \r
-       00, 0x80, 0x7f, 0xc2, 0xe2, 0xeb, 0xf9, 0x17, 0x7, 0xed, \r
-       0x8f, 0x7b, 0xdf, 0xc3, 0x56, 0xdf, 0x85, 0xd3, 0x7f, 0xf1, \r
-       0x35, 0x22, 0xfe, 0xd8, 0xf7, 0x3c, 0x6e, 0xf0, 0xd4, 0x3e, \r
-       0xf8, 0xba, 0x3f, 0xfc, 0x4d, 0x64, 0x37, 0xec, 0x8f, 0xaf, \r
-       0x1, 0xf2, 0xdf, 0xdb, 0x93, 0xe8, 0x6a, 0x16, 0xfd, 0x92, \r
-       0xfc, 0x48, 0xf, 0xcb, 0x75, 0x6c, 0x47, 0xae, 0xea, 0x4e, \r
-       0xae, 0x74, 0xbf, 0x9b, 0xee, 0x42, 0xe7, 0xcf, 0x17, 0xfc, \r
-       0x32, 0x3a, 0x45, 0xfd, 0xb1, 0xf9, 0xf9, 0xbc, 0x32, 0x31, \r
-       0xed, 0x77, 0xff, 00, 0xd8, 0xd4, 0xf1, 0xfe, 0xd8, 0xf6, \r
-       0xd8, 0x3b, 0xfc, 0x37, 0x26, 0x7b, 0x6d, 0xba, 0x1f, 0xfc, \r
-       0x4d, 0x71, 0x6f, 0xfb, 0x29, 0x78, 0xa9, 0x46, 0x43, 0xdb, \r
-       0x93, 0xe9, 0xbc, 0x54, 0x2f, 0xfb, 0x2c, 0x78, 0xb5, 0x71, \r
-       0x81, 0x9, 0xfa, 0x38, 0xa5, 0xf5, 0x9c, 0xe5, 0x74, 0x97, \r
-       0xfe, 0x2, 0xbf, 0xc8, 0x7e, 0xdf, 0x3b, 0x5f, 0x67, 0xf0, \r
-       0x47, 0xa2, 0x45, 0xfb, 0x62, 0xe9, 0x45, 0x7, 0x99, 0xe1, \r
-       0xeb, 0xb0, 0xfe, 0x8b, 0x3a, 0x11, 0xfc, 0xaa, 0xc2, 0x7e, \r
-       0xd8, 0x3a, 0x1, 0xc6, 0xfd, 0xf, 0x50, 0x5f, 0x5c, 0x3a, \r
-       0x1f, 0xeb, 0x5e, 0x58, 0xff, 00, 0xb2, 0xff, 00, 0x8c, \r
-       0x57, 0x38, 0x82, 0x26, 0xc7, 0xfb, 0x62, 0xa2, 0x6f, 0xd9, \r
-       0x97, 0xc6, 0x63, 0x18, 0xb4, 0x43, 0xf4, 0x71, 0x4f, 0xeb, \r
-       0xb9, 0xc2, 0xfb, 0x2f, 0xff, 00, 0x1, 0xff, 00, 0x80, \r
-       0x1f, 0x5a, 0xce, 0x97, 0xd8, 0xfc, 0x11, 0xeb, 0xa3, 0xf6, \r
-       0xbe, 0xf0, 0xd7, 0x7d, 0x23, 0x53, 0x1f, 0xf7, 0xef, 0xff, \r
-       00, 0x8a, 0xa7, 0xaf, 0xed, 0x79, 0xe1, 0x72, 0x39, 0xd2, \r
-       0xf5, 0x31, 0xff, 00, 0x1, 0x4f, 0xfe, 0x2a, 0xbc, 0x61, \r
-       0xff, 00, 0x66, 0xcf, 0x1a, 0xa6, 0x71, 0xa7, 0x86, 0xc7, \r
-       0xa3, 0x8a, 0x85, 0xff, 00, 0x67, 0x5f, 0x1b, 0xa0, 0xcf, \r
-       0xf6, 0x53, 0x1f, 0xa3, 0xa, 0x3f, 0xb4, 0x33, 0x65, 0xf6, \r
-       0x5f, 0xfe, 0x3, 0xff, 00, 00, 0x5f, 0x5e, 0xce, 0x56, \r
-       0xf4, 0xff, 00, 0x3, 0xdc, 0x47, 0xed, 0x71, 0xe1, 0x42, \r
-       0x46, 0x74, 0xfd, 0x4c, 0xf, 0xf7, 0x13, 0xff, 00, 0x8a, \r
-       0xa9, 0xe3, 0xfd, 0xac, 0xfc, 0x1e, 0xc4, 0xee, 0xb6, 0xd4, \r
-       0x90, 0x7f, 0xd7, 0x15, 0x3f, 0xfb, 0x35, 0x78, 0x3, 0x7e, \r
-       0xcf, 0xfe, 0x36, 0x52, 0x47, 0xf6, 0x3c, 0x9f, 0x81, 0x15, \r
-       0xb, 0xfc, 0x9, 0xf1, 0xa2, 0xc, 0xff, 00, 0x63, 0x4c, \r
-       0x7e, 0x98, 0xa5, 0xfd, 0xa7, 0x9a, 0x2d, 0xe2, 0xff, 00, \r
-       0xf0, 0x16, 0x1f, 0xda, 0x39, 0xba, 0xde, 0x9f, 0xe0, 0x7d, \r
-       0x19, 0x1f, 0xed, 0x59, 0xe0, 0x97, 0x5c, 0xb7, 0xf6, 0x8a, \r
-       0x1f, 0x43, 0x6c, 0xf, 0xfe, 0xcd, 0x53, 0xaf, 0xed, 0x4b, \r
-       0xe0, 0x43, 0x8c, 0xdc, 0x5e, 0x8f, 0xad, 0xab, 0x71, 0x5f, \r
-       0x33, 0xb7, 0xc1, 0x2f, 0x19, 0x29, 0xff, 00, 0x90, 0x2d, \r
-       0xc7, 0xe5, 0x50, 0x37, 0xc1, 0xcf, 0x18, 0x20, 0xc9, 0xd1, \r
-       0x2e, 0x71, 0xec, 0xb5, 0x5f, 0xda, 0xf9, 0x92, 0xde, 0x1f, \r
-       0xf9, 0x2b, 0xf, 0xed, 0x5c, 0xd5, 0x6f, 0x4b, 0xf0, 0x7f, \r
-       0xe6, 0x7d, 0x48, 0x3f, 0x69, 0xff, 00, 0x1, 0x1f, 0xf9, \r
-       0x7f, 0xba, 0x1f, 0xf6, 0xe8, 0xff, 00, 0xe1, 0x4e, 0x1f, \r
-       0xb4, 0xe7, 0x80, 0x4f, 0xfc, 0xc4, 0x6e, 0x7, 0xd6, 0xd1, \r
-       0xff, 00, 0xc2, 0xbe, 0x54, 0x7f, 0x84, 0xde, 0x2d, 0x8f, \r
-       0xae, 0x87, 0x77, 0xf8, 0x25, 0x40, 0xdf, 0xc, 0xfc, 0x50, \r
-       0xa0, 0x93, 0xa3, 0x5d, 0xf1, 0xff, 00, 0x4c, 0xcd, 0x27, \r
-       0x9d, 0x66, 0xb, 0xec, 0x2f, 0xfc, 0x5, 0xff, 00, 0x98, \r
-       0xbf, 0xb6, 0x33, 0x35, 0xbd, 0x2f, 0xc1, 0xff, 00, 0x99, \r
-       0xf5, 0xa8, 0xfd, 0xa5, 0xfc, 0x2, 0x46, 0x7f, 0xb5, 0x26, \r
-       0x1f, 0x5b, 0x57, 0xff, 00, 0xa, 0x9d, 0x3f, 0x68, 0xdf, \r
-       00, 0xb9, 0xc7, 0xf6, 0xd1, 0x5f, 0x76, 0xb7, 0x93, 0xff, \r
-       00, 0x89, 0xaf, 0x8f, 0x9b, 0xe1, 0xe7, 0x89, 0x13, 0x19, \r
-       0xd2, 0x2e, 0xc6, 0x7f, 0xe9, 0x99, 0xa8, 0xdb, 0xc0, 0xbe, \r
-       0x20, 0x4c, 0xe7, 0x4a, 0xbb, 0x18, 0xeb, 0xfb, 0xb3, 0x4b, \r
-       0xfb, 0x73, 0x1c, 0xb7, 0x82, 0xfb, 0x9f, 0xf9, 0x87, 0xf6, \r
-       0xd6, 0x60, 0xb7, 0xa5, 0xf8, 0x3f, 0xf3, 0x3e, 0xcc, 0x8f, \r
-       0xf6, 0x84, 0xf0, 0xc, 0x99, 0xff, 00, 0x89, 0xfc, 0x6b, \r
-       0x8f, 0xef, 0x43, 0x20, 0xff, 00, 0xd9, 0x6a, 0x75, 0xf8, \r
-       0xf1, 0xe0, 0x26, 0x50, 0x47, 0x88, 0xed, 0xb9, 0xf5, 0x57, \r
-       0x1f, 0xd2, 0xbe, 0x27, 0x6f, 0x7, 0x6b, 0x8b, 0xd7, 0x4c, \r
-       0xba, 0x1f, 0xf6, 0xcc, 0xd4, 0x6d, 0xe1, 0x6d, 0x65, 0x9, \r
-       0x7, 0x4e, 0xba, 0x18, 0xff, 00, 0xa6, 0x66, 0x9f, 0xf6, \r
-       0xfe, 0x2d, 0x6f, 0x5, 0xf7, 0x3f, 0xf3, 0x1f, 0xf6, 0xee, \r
-       0x35, 0x6f, 0x47, 0xf0, 0x67, 0xdc, 0x23, 0xe3, 0x87, 0x81, \r
-       0xf, 0xfc, 0xcc, 0xd6, 0x5f, 0x99, 0xff, 00, 0xa, 0x92, \r
-       0x3f, 0x8d, 0x3e, 0x7, 0x90, 0x90, 0xbe, 0x26, 0xb0, 0xe3, \r
-       0xd6, 0x4c, 0x7f, 0x4a, 0xf8, 0x54, 0xe8, 0x1a, 0xa2, 0x8c, \r
-       0x9b, 0x1b, 0x80, 0x3f, 0xeb, 0x99, 0xa6, 0x1d, 0x1b, 0x51, \r
-       0x5e, 0xb6, 0x93, 0x8f, 0xf8, 0x1, 0xa7, 0xfe, 0xb0, 0xe2, \r
-       0x7f, 0x92, 0x3f, 0x8f, 0xf9, 0x87, 0xf6, 0xfe, 0x2f, 0xad, \r
-       0x1f, 0xcc, 0xfb, 0xc9, 0x7e, 0x2f, 0x78, 0x2d, 0x86, 0x47, \r
-       0x89, 0x74, 0xec, 0x7f, 0xd7, 0x61, 0x53, 0x47, 0xf1, 0x4f, \r
-       0xc2, 0x12, 0x90, 0x17, 0xc4, 0x7a, 0x71, 0x27, 0xa7, 0xfa, \r
-       0x42, 0xd7, 0xc0, 0xa7, 0x4b, 0xbe, 0x1d, 0x6d, 0xa5, 0x1f, \r
-       0xf0, 0x3, 0x4d, 0x3a, 0x7d, 0xe2, 0xf5, 0xb7, 0x97, 0xfe, \r
-       0xf8, 0x34, 0x7f, 0xac, 0x55, 0xfa, 0xc2, 0x3f, 0x88, 0xff, \r
-       00, 0xd6, 0x1c, 0x42, 0xde, 0x8f, 0xe6, 0x7e, 0x82, 0xc3, \r
-       0xf1, 0xb, 0xc3, 0x17, 0xd, 0xb6, 0x3f, 0x10, 0x69, 0xac, \r
-       0x7a, 0xe3, 0xed, 0x28, 0x3f, 0xad, 0x5a, 0x4f, 0x17, 0xe8, \r
-       0x52, 0x2e, 0x53, 0x59, 0xb0, 0x61, 0xea, 0x2e, 0x50, 0xff, \r
-       00, 0x5a, 0xfc, 0xee, 0x36, 0xb7, 0x23, 0xac, 0x2e, 0x3f, \r
-       0xe0, 0x26, 0x9a, 0x61, 0x98, 0x7f, 0xcb, 0x36, 0xfc, 0xaa, \r
-       0xd7, 0x12, 0x54, 0xeb, 0x4d, 0x7d, 0xe5, 0x2e, 0x23, 0xab, \r
-       0xd6, 0x8f, 0xe3, 0xff, 00, 00, 0xfd, 0x1c, 0x1a, 0xee, \r
-       0x9a, 0x71, 0x8d, 0x42, 0xd4, 0xe7, 0xfe, 0x9b, 0x2f, 0xf8, \r
-       0xd3, 0x86, 0xb3, 0xa7, 0x9e, 0x97, 0xd6, 0xc7, 0xfe, 0xdb, \r
-       0x2f, 0xf8, 0xd7, 0xe7, 0x6, 0xc9, 0x47, 0xf0, 0x37, 0xe5, \r
-       0x47, 0xef, 0x57, 0xb3, 0xa, 0xd3, 0xfd, 0x64, 0x97, 0xfc, \r
-       0xfa, 0x5f, 0x7f, 0xfc, 0x1, 0xff, 00, 0xac, 0x92, 0xff, \r
-       00, 0x9f, 0x3f, 0x8f, 0xfc, 0x3, 0xf4, 0x84, 0x6a, 0xb6, \r
-       0x47, 0xa5, 0xe4, 0x7, 0xe9, 0x2a, 0xff, 00, 0x8d, 0x38, \r
-       0x6a, 0x16, 0xad, 0x8c, 0x5c, 0xc2, 0x73, 0xe9, 0x20, 0xaf, \r
-       0xcd, 0xc1, 0x24, 0xc3, 0xa1, 0x61, 0xf9, 0xd3, 0x85, 0xcd, \r
-       0xc2, 0xf4, 0x77, 0x18, 0xff, 00, 0x68, 0xd3, 0x5c, 0x48, \r
-       0xff, 00, 0xe7, 0xd7, 0xe3, 0xff, 00, 00, 0x7f, 0xeb, \r
-       0x2f, 0x7a, 0x5f, 0x8f, 0xfc, 0x3, 0xf4, 0x95, 0x67, 0x8d, \r
-       0xce, 0x16, 0x44, 0x63, 0xe8, 0x18, 0x1a, 0x7e, 0x47, 0xad, \r
-       0x7e, 0x6d, 0xae, 0xa7, 0x7a, 0x87, 0x2b, 0x73, 0x32, 0x9f, \r
-       0x51, 0x21, 0x1f, 0xd6, 0xa4, 0x1a, 0xe6, 0xa2, 0xbd, 0x2f, \r
-       0x6e, 0x47, 0xd2, 0x66, 0xff, 00, 0x1a, 0xa5, 0xc4, 0x9d, \r
-       0xe9, 0x7e, 0x3f, 0xf0, 0xa, 0xff, 00, 0x59, 0x63, 0xff, \r
-       00, 0x3e, 0xbf, 0x1f, 0xf8, 0x7, 0xe9, 0x6, 0x45, 0x19, \r
-       0xaf, 0xce, 0x31, 0xe2, 0x4d, 0x58, 0xc, 0xd, 0x4a, 0xf0, \r
-       0xf, 0x69, 0xdf, 0xfc, 0x69, 0xc3, 0xc5, 0x3a, 0xc8, 0x3c, \r
-       0x6a, 0x97, 0xc0, 0xff, 00, 0xd7, 0xc3, 0xff, 00, 0x8d, \r
-       0x5f, 0xfa, 0xc7, 0x1f, 0xf9, 0xf5, 0xf8, 0xff, 00, 0xc0, \r
-       0x1f, 0xfa, 0xcb, 0x4f, 0xfe, 0x7d, 0x3f, 0xbf, 0xfe, 0x1, \r
-       0xfa, 0x35, 0x9a, 0x5a, 0xfc, 0xe8, 0x5f, 0x18, 0xeb, 0xb1, \r
-       0xe4, 0x2e, 0xb1, 0x7e, 0xb9, 0xeb, 0x8b, 0x97, 0xe7, 0xf5, \r
-       0xa9, 0x53, 0xc7, 0x7e, 0x22, 0x89, 0x76, 0xae, 0xb9, 0xa9, \r
-       0x28, 0xf4, 0x17, 0x6f, 0xfe, 0x34, 0x7f, 0xac, 0x71, 0xff, \r
-       00, 0x9f, 0x5f, 0x8f, 0xfc, 0x2, 0x97, 0x12, 0xd2, 0xeb, \r
-       0x4d, 0xfd, 0xe7, 0xe8, 0x95, 0x15, 0xf9, 0xe8, 0x9f, 0x12, \r
-       0xbc, 0x55, 0x19, 0x5, 0x7c, 0x43, 0xaa, 0x2, 0x3a, 0x7f, \r
-       0xa5, 0xbf, 0xf8, 0xd4, 0xf1, 0xfc, 0x57, 0xf1, 0x84, 0x59, \r
-       0xdb, 0xe2, 0x5d, 0x50, 0x67, 0xfe, 0x9e, 0x9f, 0xfc, 0x6a, \r
-       0xd7, 0x11, 0xd3, 0xeb, 0x4d, 0xfd, 0xe8, 0xb5, 0xc4, 0x94, \r
-       0x3a, 0xc1, 0xfe, 0x7, 0xe8, 0x25, 0x15, 0xf0, 00, 0xf8, \r
-       0xc3, 0xe3, 0x40, 0x38, 0xf1, 0x3e, 0xa9, 0xff, 00, 0x81, \r
-       0xd, 0x4f, 0x1f, 0x19, 0xbc, 0x6c, 0xe, 0x7f, 0xe1, 0x26, \r
-       0xd4, 0x7f, 0xef, 0xf1, 0xaa, 0xff, 00, 0x58, 0xa8, 0xff, \r
-       00, 0xcf, 0xb7, 0xf8, 0xf, 0xfd, 0x64, 0xc3, 0xff, 00, \r
-       0x23, 0xfc, 0xf, 0xbf, 0x28, 0xaf, 0x82, 0x57, 0xe3, 0x8f, \r
-       0x8e, 0x54, 0xe4, 0x78, 0x92, 0xf8, 0xfd, 0x5c, 0x7f, 0x85, \r
-       0x4a, 0x9f, 0x1e, 0x3c, 0x74, 0x99, 0xc7, 0x88, 0xae, 0xcf, \r
-       0xd7, 0x7, 0xfa, 0x53, 0xff, 00, 0x58, 0xa8, 0x7f, 0xcf, \r
-       0xb9, 0x7e, 0x1f, 0xe6, 0x5a, 0xe2, 0x3c, 0x2f, 0xf2, 0xbf, \r
-       0xc3, 0xfc, 0xcf, 0xbc, 0x68, 0xaf, 0x86, 0x23, 0xfd, 0xa1, \r
-       0xfc, 0x7b, 0x18, 0x51, 0xfd, 0xbd, 0x23, 0x6d, 0xfe, 0xf4, \r
-       0x48, 0x73, 0xf5, 0xe2, 0xac, 0xc7, 0xfb, 0x4a, 0xf8, 0xf6, \r
-       0x37, 0xdd, 0xfd, 0xae, 0x8d, 0xec, 0xd6, 0xd1, 0x91, 0xfc, \r
-       0xaa, 0xd7, 0x10, 0xe1, 0xba, 0xc2, 0x5f, 0x87, 0xf9, 0x96, \r
-       0xb8, 0x8b, 0x9, 0xd9, 0xfd, 0xcb, 0xfc, 0xcf, 0xb7, 0xa8, \r
-       0xaf, 0x8a, 0x17, 0xf6, 0x9f, 0xf1, 0xe8, 0x1c, 0xea, 0x36, \r
-       0xed, 0xf5, 0xb4, 0x4f, 0xf0, 0xa7, 0x8f, 0xda, 0x8b, 0xc7, \r
-       0x7f, 0xf3, 0xfb, 0x69, 0xff, 00, 0x80, 0xab, 0x57, 0xfe, \r
-       0xb0, 0x61, 0x7b, 0x4b, 0xee, 0x5f, 0xe6, 0x57, 0xfa, 0xc3, \r
-       0x83, 0xf3, 0xfb, 0xbf, 0xe0, 0x9f, 0x6a, 0x51, 0x5f, 0x17, \r
-       0xaf, 0xed, 0x4f, 0xe3, 0x90, 0x46, 0x6e, 0x2c, 0xdb, 0xd8, \r
-       0xdb, 0xa, 0x9e, 0x2f, 0xda, 0xb7, 0xc6, 0xb1, 0xb1, 0x2c, \r
-       0x74, 0xf9, 0x6, 0x3a, 0x35, 0xb9, 0xfe, 0x86, 0x9f, 0xfa, \r
-       0xc1, 0x84, 0xed, 0x2f, 0xbb, 0xfe, 0x9, 0x4b, 0x88, 0x30, \r
-       0x5d, 0xdf, 0xdc, 0x7d, 0x93, 0x45, 0x7c, 0x7e, 0xbf, 0xb5, \r
-       0xbf, 0x8b, 0x82, 0x80, 0x6d, 0x34, 0xb6, 0x3e, 0xbe, 0x4b, \r
-       0xff, 00, 0xf1, 0x55, 0x3a, 0x7e, 0xd7, 0x9e, 0x29, 0xc, \r
-       0xb, 0x69, 0xba, 0x5b, 0xe, 0xe3, 0x63, 0x8f, 0xfd, 0x9a, \r
-       0xad, 0x67, 0xd8, 0x3f, 0x3f, 0xb8, 0xb5, 0x9f, 0x60, 0x7f, \r
-       0x99, 0xfd, 0xc7, 0xd7, 0x34, 0x57, 0xc9, 0xab, 0xfb, 0x60, \r
-       0xf8, 0x88, 0x67, 0x76, 0x8d, 0xa6, 0x1f, 0xa1, 0x90, 0x7f, \r
-       0xec, 0xd4, 0xf1, 0xfb, 0x61, 0xeb, 0xdd, 0xf4, 0x3d, 0x37, \r
-       0xfe, 0xfa, 0x93, 0xfc, 0x6a, 0xbf, 0xb7, 0x70, 0x5f, 0xcc, \r
-       0xfe, 0xe6, 0x57, 0xf6, 0xee, 0x7, 0xf9, 0x9f, 0xdc, 0xcf, \r
-       0xab, 0xe8, 0xaf, 0x94, 0xd7, 0xf6, 0xc4, 0xd6, 0xf8, 0xce, \r
-       0x85, 0xa7, 0x9f, 0xa4, 0x8f, 0xfe, 0x35, 0x22, 0xfe, 0xd8, \r
-       0x9a, 0xb6, 0x79, 0xd0, 0x2c, 0x88, 0xf6, 0x99, 0xe9, 0xff, \r
-       00, 0x6e, 0x60, 0xbf, 0x99, 0xfd, 0xcc, 0x7f, 0xdb, 0x98, \r
-       0x1f, 0xe7, 0xfc, 0x19, 0xf5, 0x45, 0x15, 0xf2, 0xf4, 0x7f, \r
-       0xb6, 0x35, 0xe8, 0x5f, 0x9f, 0xc3, 0x76, 0xe5, 0xbd, 0x56, \r
-       0xe9, 0x80, 0xff, 00, 0xd0, 0x6a, 0x65, 0xfd, 0xb2, 0x26, \r
-       0xe3, 0x3e, 0x18, 0x8f, 0xdf, 0x17, 0x87, 0xff, 00, 0x88, \r
-       0xaa, 0x59, 0xde, 0x7, 0xf9, 0xff, 00, 0x7, 0xfe, 0x45, \r
-       0x2c, 0xeb, 0x2, 0xff, 00, 0xe5, 0xe7, 0xe0, 0xff, 00, \r
-       0xc8, 0xfa, 0x6e, 0x8a, 0xf9, 0xba, 0x3f, 0xdb, 0x22, 0xc, \r
-       0xfc, 0xfe, 0x17, 0x90, 0xf, 0xf6, 0x6f, 0x47, 0xff, 00, \r
-       0x11, 0x5b, 0xda, 0x47, 0xed, 0x6f, 0xe1, 0x6b, 0xb8, 0xd7, \r
-       0xed, 0xf6, 0x37, 0xf6, 0x12, 0x13, 0x82, 0x15, 0x56, 0x55, \r
-       0x3, 0xd7, 0x20, 0x83, 0xfa, 0x56, 0xb0, 0xcd, 0xf0, 0x33, \r
-       0x76, 0x55, 0x3f, 0x35, 0xf9, 0xa3, 0x58, 0x66, 0xd8, 0x29, \r
-       0xbb, 0x2a, 0x8b, 0xf1, 0x5f, 0x99, 0xee, 0x74, 0x57, 0x31, \r
-       0xe1, 0xaf, 0x89, 0x9e, 0x17, 0xf1, 0x7b, 0x4, 0xd2, 0x75, \r
-       0xbb, 0x4b, 0xb9, 0x8f, 0x3e, 0x4e, 0xfd, 0xb2, 0x7f, 0xdf, \r
-       0x2d, 0x83, 0xfa, 0x57, 0x4f, 0x5e, 0xac, 0x2a, 0x42, 0xa2, \r
-       0xe6, 0x83, 0xba, 0xf2, 0x3d, 0x48, 0x4e, 0x15, 0x17, 0x34, \r
-       0x1d, 0xd7, 0x90, 0x51, 0x45, 0x15, 0x65, 0x85, 0x14, 0x51, \r
-       0x40, 0x5, 0x14, 0x51, 0x40, 0x5, 0x14, 0x51, 0x40, 0x5, \r
-       0x14, 0x51, 0x40, 0x5, 0x70, 0x7f, 0x18, 0x7e, 0x28, 0xdb, \r
-       0x7c, 0x2f, 0xf0, 0xc3, 0xdd, 0xfe, 0xee, 0x7d, 0x4e, 0x73, \r
-       0xe5, 0xda, 0x5a, 0xbb, 0x63, 0x7b, 0x77, 0x62, 0x3a, 0xed, \r
-       0x1d, 0x4f, 0xe0, 0x3b, 0xd7, 0x75, 0x24, 0x8b, 0x12, 0x33, \r
-       0xbb, 0x5, 0x45, 0x4, 0x96, 0x3d, 00, 0xaf, 0x82, 0x7e, \r
-       0x32, 0x7c, 0x40, 0x7f, 0x88, 0xde, 0x3a, 0xbd, 0xbf, 0x57, \r
-       0x26, 0xc2, 0x13, 0xf6, 0x7b, 0x34, 0xcf, 0x2, 0x35, 0x3d, \r
-       0x7f, 0xe0, 0x47, 0x27, 0xf1, 0xaf, 0x17, 0x35, 0xc6, 0xbc, \r
-       0x1d, 0xf, 0x73, 0xe2, 0x96, 0x8b, 0xfc, 0xcf, 0xf, 0x37, \r
-       0xc7, 0xfd, 0x46, 0x87, 0xb9, 0xf1, 0xcb, 0x45, 0xfe, 0x7f, \r
-       0x23, 0xa3, 0xf8, 0x39, 0xa7, 0xea, 0x1f, 0x13, 0x7e, 0x2a, \r
-       0xc5, 0xa9, 0x6a, 0x92, 0xbd, 0xe3, 0xac, 0x86, 0xe2, 0x79, \r
-       0x24, 0x39, 0xfa, 0xf, 0x61, 0xe8, 0x2b, 0xed, 0x40, 0x2, \r
-       0x80, 0x7, 00, 0x57, 0x83, 0xfe, 0xca, 0x7e, 0x10, 0xfe, \r
-       0xcc, 0xf0, 0xd5, 0xce, 0xb1, 0x34, 0x78, 0x9a, 0xe9, 0xf6, \r
-       0xa1, 0x23, 0xf8, 0x45, 0x7b, 0xcd, 0x63, 0x92, 0x50, 0x74, \r
-       0xb0, 0xbe, 0xd2, 0x5b, 0xcd, 0xdf, 0xfc, 0x83, 0x27, 0xa0, \r
-       0xe9, 0x61, 0x54, 0xa7, 0xf1, 0x4b, 0x56, 0x14, 0x51, 0x45, \r
-       0x7d, 0x1, 0xee, 0x5, 0x14, 0x51, 0x40, 0x5, 0x14, 0x84, \r
-       0x64, 0x70, 0x71, 0xef, 0x40, 0x18, 0x1c, 0x92, 0x7e, 0xb4, \r
-       00, 0xb4, 0x53, 0x2, 0xed, 0x39, 0xde, 0x48, 0xf4, 0x3d, \r
-       0x29, 0xc0, 0x83, 0xd0, 0xe6, 0x80, 0x16, 0x8a, 0x28, 0xa0, \r
-       0x2, 0x8a, 0x28, 0xa0, 0x2, 0x8a, 0x28, 0xa0, 0x2, 0x8a, \r
-       0x28, 0xa0, 0x2, 0x8a, 0x28, 0xa0, 0x2, 0x8a, 0x28, 0xa0, \r
-       0x2, 0x8a, 0x28, 0xa0, 0x2, 0x8a, 0x28, 0xa0, 0x2, 0x8a, \r
-       0x28, 0xa0, 0x2, 0x8a, 0x28, 0xa0, 0x2, 0x93, 0x2, 0x96, \r
-       0x8a, 00, 0x4c, 0xf, 0x4a, 0x4d, 0x8a, 0x7b, 0xf, 0xca, \r
-       0x9d, 0x45, 00, 0x37, 0xca, 0x43, 0xfc, 0xb, 0xf9, 0x53, \r
-       0x4c, 0x11, 0x1e, 0xb1, 0xa7, 0xfd, 0xf2, 0x2a, 0x4a, 0x29, \r
-       0x58, 0x8, 0xbe, 0xcb, 0xf, 0xfc, 0xf1, 0x8f, 0xfe, 0xf9, \r
-       0x14, 0xd3, 0x65, 0x6e, 0x7a, 0xc1, 0x17, 0xfd, 0xf0, 0x2a, \r
-       0x7a, 0x28, 0xb2, 0x15, 0x91, 0x59, 0xb4, 0xeb, 0x46, 0xeb, \r
-       0x6b, 0x9, 0xfa, 0xc6, 0x29, 0x87, 0x47, 0xb1, 0x6e, 0xb6, \r
-       0x70, 0x1f, 0xac, 0x63, 0xfc, 0x2a, 0xe5, 0x14, 0xb9, 0x63, \r
-       0xd8, 0x2c, 0xbb, 0x19, 0xe7, 0x40, 0xd3, 0x1b, 0xad, 0x85, \r
-       0xb1, 0xff, 00, 0xb6, 0x4b, 0xfe, 0x14, 0xc6, 0xf0, 0xce, \r
-       0x92, 0xdd, 0x74, 0xdb, 0x53, 0xff, 00, 0x6c, 0x85, 0x69, \r
-       0xd1, 0x4b, 0xd9, 0xc3, 0xb2, 0x17, 0x2c, 0x7b, 0x19, 0x7, \r
-       0xc2, 0x3a, 0x2b, 0x75, 0xd2, 0xed, 0x4f, 0xfd, 0xb2, 0x15, \r
-       0x1b, 0x78, 0x2b, 0x41, 0x73, 0x93, 0xa4, 0x59, 0x93, 0xef, \r
-       0xa, 0xd6, 0xdd, 0x15, 0x3e, 0xca, 0x9b, 0xfb, 0x2b, 0xee, \r
-       0x17, 0x24, 0x3b, 0x1c, 0xf3, 0x7c, 0x3f, 0xf0, 0xe3, 0x75, \r
-       0xd1, 0xed, 0x3f, 0xef, 0xd0, 0xa8, 0x9b, 0xe1, 0xaf, 0x86, \r
-       0x1f, 0xae, 0x8b, 0x69, 0xff, 00, 0x7e, 0xc5, 0x74, 0xd4, \r
-       0x54, 0xfd, 0x5e, 0x8b, 0xfb, 0xb, 0xee, 0x44, 0xfb, 0x2a, \r
-       0x6f, 0xec, 0xaf, 0xb8, 0xe4, 0xdf, 0xe1, 0x5f, 0x85, 0x5f, \r
-       0x39, 0xd1, 0x6d, 0xb9, 0xff, 00, 0x60, 0x54, 0x2d, 0xf0, \r
-       0x87, 0xc2, 0x4f, 0xd7, 0x45, 0xb7, 0xff, 00, 0xbe, 0x6b, \r
-       0xb2, 0xa2, 0xa3, 0xea, 0xb4, 0x1f, 0xd8, 0x5f, 0x72, 0x17, \r
-       0xb0, 0xa5, 0xfc, 0xab, 0xee, 0x38, 0x76, 0xf8, 0x2f, 0xe0, \r
-       0xf7, 0xeb, 0xa3, 0x41, 0xf9, 0x54, 0x2f, 0xf0, 0x2f, 0xc1, \r
-       0x8f, 0xff, 00, 0x30, 0x78, 0xc7, 0xd2, 0xbb, 0xea, 0x2a, \r
-       0x5e, 0xb, 0xc, 0xf7, 0xa6, 0xbe, 0xe4, 0x4f, 0xd5, 0xa8, \r
-       0xbf, 0xb0, 0xbe, 0xe3, 0xce, 0x9f, 0xe0, 0x17, 0x83, 0x1f, \r
-       0xfe, 0x61, 0x6a, 0x3e, 0x86, 0xa0, 0x7f, 0xd9, 0xe3, 0xc1, \r
-       0x8f, 0xff, 00, 0x2e, 0x4, 0x7d, 0xd, 0x7a, 0x65, 0x15, \r
-       0xf, 0x1, 0x84, 0x7f, 0xf2, 0xe9, 0x7d, 0xc8, 0x9f, 0xaa, \r
-       0x50, 0x7f, 0x61, 0x7d, 0xc7, 0x96, 0xbf, 0xec, 0xe1, 0xe0, \r
-       0xd7, 0xff, 00, 0x97, 0x37, 0x1f, 0xf0, 0x2a, 0x81, 0xff, \r
-       00, 0x66, 0x7f, 0x7, 0x37, 0xfc, 0xb0, 0x94, 0x7d, 0x1a, \r
-       0xbd, 0x66, 0x8a, 0x9f, 0xec, 0xdc, 0x1b, 0xff, 00, 0x97, \r
-       0x4b, 0xee, 0x23, 0xea, 0x58, 0x67, 0xff, 00, 0x2e, 0xd7, \r
-       0xdc, 0x79, 0x3, 0xfe, 0xcb, 0xfe, 0xf, 0x7f, 0xe0, 0xb8, \r
-       0x5f, 0xa3, 0xd4, 0xd, 0xfb, 0x2c, 0x78, 0x4c, 0xf4, 0x7b, \r
-       0x81, 0xf8, 0x8a, 0xf6, 0x6a, 0x2a, 0x1e, 0x57, 0x82, 0x7f, \r
-       0xf2, 0xe9, 0x12, 0xf0, 0x18, 0x57, 0xff, 00, 0x2e, 0xd7, \r
-       0xdc, 0x78, 0x9b, 0xfe, 0xca, 0x7e, 0x16, 0x6e, 0x97, 0x17, \r
-       0x23, 0xf1, 0x15, 0xb, 0xfe, 0xc9, 0xbe, 0x1b, 0x6f, 0xbb, \r
-       0x79, 0x72, 0x3f, 0x2a, 0xf7, 0x2a, 0x2a, 0x7f, 0xb2, 0x70, \r
-       0x3f, 0xf3, 0xe9, 0x12, 0xf2, 0xec, 0x23, 0xff, 00, 0x97, \r
-       0x68, 0xf0, 0x76, 0xfd, 0x92, 0x74, 0x3, 0xd3, 0x50, 0xb9, \r
-       0x1f, 0x80, 0xa8, 0x5b, 0xf6, 0x45, 0xd1, 0xf, 0x4d, 0x52, \r
-       0xe0, 0x7f, 0xc0, 0x45, 0x7b, 0xf5, 0x15, 0x3f, 0xd9, 0x18, \r
-       0x1f, 0xf9, 0xf7, 0xf9, 0x90, 0xf2, 0xbc, 0x1b, 0xff, 00, \r
-       0x97, 0x68, 0xf9, 0xe9, 0xff, 00, 0x64, 0x2d, 0x2c, 0xfd, \r
-       0xdd, 0x62, 0x7f, 0xc5, 0x5, 0x40, 0xff, 00, 0xb2, 0x5, \r
-       0x97, 0xf0, 0xeb, 0x12, 0x7e, 0x28, 0x2b, 0xe8, 0xca, 0x2a, \r
-       0x3f, 0xb1, 0xb0, 0x3f, 0xf3, 0xef, 0xf1, 0x7f, 0xe6, 0x4b, \r
-       0xca, 0x70, 0x4f, 0xfe, 0x5d, 0xa3, 0xe6, 0xd6, 0xfd, 0x90, \r
-       0x21, 0xfe, 0x1d, 0x65, 0xbf, 0x14, 0xa8, 0x5f, 0xf6, 0x40, \r
-       0x3f, 0xc3, 0xac, 0x7e, 0x69, 0x5f, 0x4c, 0x51, 0x53, 0xfd, \r
-       0x89, 0x81, 0xfe, 0x4f, 0xc5, 0x91, 0xfd, 0x91, 0x82, 0xff, \r
-       00, 0x9f, 0x67, 0xcc, 0xf, 0xfb, 0x20, 0x4f, 0xfc, 0x3a, \r
-       0xba, 0xfe, 0x2b, 0x50, 0xbf, 0xec, 0x83, 0x7e, 0x3e, 0xee, \r
-       0xaf, 0x11, 0xfa, 0xad, 0x7d, 0x4b, 0x45, 0x4f, 0xf6, 0x1e, \r
-       0x7, 0xf9, 0x5f, 0xde, 0xc9, 0x79, 0x36, 0x5, 0xfd, 0x83, \r
-       0xe5, 0x37, 0xfd, 0x91, 0x35, 0x51, 0xd3, 0x53, 0x84, 0xfe, \r
-       0x15, 0x3, 0xfe, 0xc9, 0x1a, 0xd8, 0xe9, 0x7d, 0xb, 0x57, \r
-       0xd6, 0x74, 0x54, 0xbc, 0x87, 0x5, 0xd9, 0xfd, 0xec, 0x87, \r
-       0x92, 0x60, 0x7f, 0x93, 0xf1, 0x3e, 0x46, 0x7f, 0xd9, 0x33, \r
-       0xc4, 0x23, 0xa5, 0xd4, 0x7, 0xf1, 0xa8, 0x1f, 0xf6, 0x51, \r
-       0xf1, 0x28, 0xfb, 0xb2, 0xc2, 0x7f, 0x1a, 0xfb, 0x2, 0x8a, \r
-       0x8f, 0xec, 0xc, 0x1f, 0x9f, 0xde, 0x4f, 0xf6, 0x16, 0xb, \r
-       0xf9, 0x7f, 0x13, 0xe3, 0x87, 0xfd, 0x95, 0x7c, 0x54, 0x3e, \r
-       0xe9, 0x85, 0xbf, 0xe0, 0x42, 0xa1, 0x7f, 0xd9, 0x6f, 0xc5, \r
-       0xeb, 0xd2, 0x38, 0x8f, 0xd1, 0xc5, 0x7d, 0x9b, 0x45, 0x4f, \r
-       0xfa, 0xbf, 0x84, 0xee, 0xfe, 0xff, 00, 0xf8, 0x4, 0xff, \r
-       00, 0x60, 0xe0, 0xbb, 0x3f, 0xbc, 0xf8, 0xad, 0xff, 00, \r
-       0x66, 0x3f, 0x18, 0xaf, 0x4b, 0x64, 0x3f, 0xf0, 0x31, 0x50, \r
-       0xbf, 0xec, 0xd7, 0xe3, 0x35, 0xff, 00, 0x97, 0x20, 0x7f, \r
-       0xe0, 0x42, 0xbe, 0xda, 0xa2, 0xa7, 0xfd, 0x5e, 0xc3, 0x7f, \r
-       0x34, 0xbf, 0xf, 0xf2, 0x23, 0xfd, 0x5f, 0xc1, 0xf9, 0xfd, \r
-       0xe7, 0xc3, 0xcd, 0xfb, 0x39, 0xf8, 0xd1, 0x7f, 0xe6, 0x1a, \r
-       0x4f, 0xfc, 0x8, 0x54, 0x2f, 0xfb, 0x3d, 0xf8, 0xd1, 0x7f, \r
-       0xe6, 0x14, 0xe7, 0xf1, 0x15, 0xf7, 0x3d, 0x15, 0x3f, 0xea, \r
-       0xee, 0x1f, 0xf9, 0xe5, 0xf8, 0x7f, 0x91, 0x3f, 0xea, 0xf6, \r
-       0x13, 0xcf, 0xef, 0x3e, 0x12, 0x3f, 0x1, 0xbc, 0x6d, 0xb, \r
-       0x6, 0x5d, 0x22, 0x60, 0xc3, 0xa3, 0x29, 0xc1, 0x15, 0xde, \r
-       0x78, 0x43, 0xc6, 0xbf, 0x14, 0xfe, 0x15, 0x6c, 0x5d, 0x57, \r
-       0x4c, 0xbc, 0xd7, 0x34, 0x55, 0xfb, 0xf0, 0x5d, 0x12, 0xd2, \r
-       0xa2, 0xff, 00, 0xb1, 0x27, 0x5f, 0xc0, 0xe4, 0x7d, 0x2b, \r
-       0xeb, 0x1a, 0x82, 0xf2, 0xde, 0x2b, 0x9b, 0x69, 0x12, 0x64, \r
-       0x59, 0x10, 0xa9, 0xc8, 0x61, 0x5a, 0xd2, 0xc9, 0x56, 0x19, \r
-       0xf3, 0xd0, 0xab, 0x24, 0xfe, 0x45, 0x53, 0xc8, 0xe9, 0xd0, \r
-       0x7c, 0xf8, 0x7a, 0x92, 0x8b, 0xfe, 0xb7, 0xee, 0x73, 0xbe, \r
-       00, 0xf8, 0x91, 0xa2, 0x7c, 0x48, 0xd2, 0x8d, 0xe6, 0x91, \r
-       0x73, 0xba, 0x58, 0xf0, 0x2e, 0x2d, 0x24, 0xf9, 0x66, 0xb7, \r
-       0x63, 0xfc, 0x2e, 0xbd, 0xbe, 0xbd, 0xd, 0x75, 0x35, 0xf1, \r
-       0x7, 0xc4, 0x6d, 0x72, 0xff, 00, 0xe1, 0x4f, 0xc4, 0x43, \r
-       0xae, 0x78, 0x66, 0x63, 0x69, 0x74, 0x24, 0xfd, 0xfc, 0x20, \r
-       0xfe, 0xee, 0xe1, 0x1, 0xc9, 0x8d, 0xc7, 0x70, 0x7f, 0x31, \r
-       0xda, 0xbe, 0xae, 0xf8, 0x4f, 0xf1, 0x3b, 0x4d, 0xf8, 0xb7, \r
-       0xe0, 0xcb, 0x5d, 0x7f, 0x4d, 0x47, 0x80, 0x3b, 0x34, 0x53, \r
-       0xda, 0xca, 0x46, 0xf8, 0x25, 0x5e, 0x19, 0xf, 0xaf, 0xa8, \r
-       0x3d, 0xc1, 0x6, 0xbd, 0xc, 0xe, 0x35, 0x62, 0x79, 0xa9, \r
-       0xcb, 0xe2, 0x8e, 0x8c, 0xe8, 0xc0, 0x66, 0x4a, 0xbd, 0x59, \r
-       0x61, 0x6a, 0xe9, 0x52, 0x3f, 0x73, 0x5d, 0xd7, 0xea, 0x8e, \r
-       0xc6, 0x8a, 0x28, 0xaf, 0x54, 0xf7, 0x42, 0x8a, 0x28, 0xa0, \r
-       0x2, 0x8a, 0x28, 0xa0, 0x2, 0x8a, 0x28, 0xa0, 0xf, 0x37, \r
-       0xfd, 0xa0, 0x7c, 0x6a, 0x3c, 0x17, 0xf0, 0xd7, 0x51, 0x74, \r
-       0x72, 0x97, 0x97, 0xe3, 0xec, 0x56, 0xfb, 0x4e, 0x8, 0x67, \r
-       0x7, 0x24, 0x7d, 0x17, 0x26, 0xbe, 0x25, 0xd0, 0xb4, 0xb9, \r
-       0x35, 0x8d, 0x56, 0xd2, 0xca, 0x15, 0xdc, 0xf3, 0x48, 0x10, \r
-       0x1, 0x5e, 0xd3, 0xfb, 0x5a, 0xf8, 0xcb, 0xfb, 0x5b, 0xc6, \r
-       0x16, 0x7e, 0x1f, 0x85, 0xf3, 0x6, 0x97, 0x1f, 0x99, 0x28, \r
-       0x7, 0x83, 0x33, 0x8c, 0xfe, 0x8b, 0x8f, 0xfb, 0xe8, 0xd6, \r
-       0x77, 0xec, 0xc3, 0xe1, 0x1, 0xaf, 0x78, 0xd8, 0x5f, 0x4d, \r
-       0x1e, 0xeb, 0x7b, 0x25, 0x2f, 0x93, 0xd3, 0x77, 0x6a, 0xfc, \r
-       0xf7, 0x33, 0x93, 0xc7, 0x63, 0xd6, 0x1e, 0x3b, 0x2d, 0x3f, \r
-       0xcc, 0xfc, 0xef, 0x1e, 0xde, 0x63, 0x9a, 0x2a, 0x11, 0xda, \r
-       0x3a, 0x7f, 0x9f, 0xf5, 0xe4, 0x7d, 0x67, 0xe1, 0x3d, 0x12, \r
-       0x3f, 0xe, 0xf8, 0x72, 0xc3, 0x4f, 0x8d, 0x42, 0x88, 0x22, \r
-       0x55, 0x38, 0xf5, 0xc7, 0x35, 0xaf, 0x45, 0x15, 0xfa, 0x4, \r
-       0x62, 0xa1, 0x15, 0x18, 0xec, 0x8f, 0xd0, 0xa2, 0x94, 0x52, \r
-       0x48, 0x28, 0xa2, 0x8a, 0xa2, 0x82, 0x8a, 0x2b, 0xcd, 0xbf, \r
-       0x68, 0xaf, 0x8d, 0xda, 0x47, 0xec, 0xf1, 0xf0, 0x83, 0xc4, \r
-       0x1e, 0x39, 0xd6, 0xe, 0xe8, 0xf4, 0xf8, 0x71, 0x6d, 0x6e, \r
-       0x3e, 0xf5, 0xc5, 0xc3, 0x7c, 0xb1, 0x44, 0x3e, 0xac, 0x46, \r
-       0x7d, 0x6, 0x4f, 0x6a, 00, 0xe7, 0x3f, 0x69, 0x9f, 0xda, \r
-       0xf3, 0xe1, 0xf7, 0xec, 0xaf, 0xa0, 0x47, 0x79, 0xe2, 0xcb, \r
-       0xe7, 0x9f, 0x55, 0xba, 0x52, 0xd6, 0x3a, 0x25, 0x88, 0xf, \r
-       0x77, 0x73, 0x8e, 0xe0, 0x67, 0xa, 0x99, 0xfe, 0x36, 0x20, \r
-       0x7d, 0x4f, 0x15, 0xf9, 0x5d, 0xf1, 0x87, 0xfe, 0xa, 0xd5, \r
-       0xf1, 0x9b, 0xe2, 0x5, 0xc5, 0xdd, 0xbf, 0x85, 0xe5, 0xb1, \r
-       0xf0, 0x1e, 0x90, 0xec, 0x44, 0x4b, 0xa7, 0xc2, 0x26, 0xbb, \r
-       0x9, 0x9e, 0x37, 0x4d, 0x26, 0x46, 0x71, 0xfd, 0xd5, 0x5a, \r
-       0xf9, 0xb3, 0x5d, 0xd7, 0xfc, 0x7d, 0xfb, 0x57, 0x7c, 0x67, \r
-       0x4b, 0x8b, 0xc9, 0x2e, 0x3c, 0x4b, 0xe3, 0x3f, 0x11, 0xdd, \r
-       0xac, 0x10, 0x44, 0xf, 00, 0x93, 0xf2, 0xc6, 0x83, 0xa2, \r
-       0x46, 0xa3, 0x3c, 0x74, 00, 0x13, 0xea, 0x6b, 0xf4, 0x67, \r
-       0xc1, 0x1f, 0xf0, 0x48, 0xaf, 0x87, 0xff, 00, 0xf, 0x7e, \r
-       0x1c, 0xdf, 0x78, 0x9b, 0xe2, 0xf7, 0x8b, 0x75, 0x1b, 0xeb, \r
-       0x9d, 0x3e, 0xca, 0x4b, 0xeb, 0xe8, 0x74, 0x69, 0x56, 0xda, \r
-       0xd6, 0xd9, 0x11, 0xb, 0xb0, 0xe, 0xca, 0x59, 0xf0, 0x1, \r
-       0xe7, 0xe5, 0xcf, 0xa5, 0x32, 0x6e, 0xde, 0xc7, 0xe7, 0x17, \r
-       0x88, 0x7f, 0x68, 0xbf, 0x8a, 0x7e, 0x2b, 0xb9, 0x92, 0x7d, \r
-       0x5b, 0xe2, 0x37, 0x8a, 0x2f, 0x64, 0x90, 0xe5, 0x83, 0xea, \r
-       0xf3, 0x85, 0x27, 0xfd, 0xd0, 0xc0, 0xf, 0xca, 0xbf, 0x5a, \r
-       0xbf, 0xe0, 0x92, 0x3e, 0xb, 0xd6, 0xed, 0xfe, 0x3, 0xea, \r
-       0x3e, 0x39, 0xf1, 0x6, 0xad, 0xa9, 0x6a, 0xb7, 0x9e, 0x23, \r
-       0xbe, 0x74, 0xb3, 0x17, 0xf7, 0x52, 0x4c, 0x22, 0xb6, 0x80, \r
-       0x94, 0x1b, 0x43, 0x13, 0x8d, 0xd2, 0x79, 0x84, 0x91, 0xd4, \r
-       0x5, 0xaf, 0xc7, 0x4d, 0x1b, 0xc3, 0x7f, 0xf0, 0x9e, 0xfc, \r
-       0x44, 0xb2, 0xd0, 0x7c, 0x39, 0x6f, 0x24, 0x4b, 0xac, 0x6a, \r
-       0x89, 0x67, 0xa7, 0xc1, 0x2b, 0x6f, 0x64, 0x12, 0xca, 0x16, \r
-       0x30, 0xcd, 0x8e, 0x70, 0x18, 0x64, 0xfb, 0x13, 0x5f, 0xd1, \r
-       0xcf, 0x86, 0xb4, 0x4d, 0x3, 0xf6, 0x7b, 0xf8, 0x2d, 0x65, \r
-       0xa6, 0xc6, 0x52, 0xcf, 0xc3, 0xfe, 0x13, 0xd1, 0xc0, 0x67, \r
-       0x3c, 0x1, 0x1c, 0x31, 0xe5, 0xdc, 0xfb, 0x9c, 0x12, 0x7d, \r
-       0xcd, 0xc, 0x48, 0xf8, 0xf, 0xc4, 0x7f, 0xf0, 0x59, 0xa9, \r
-       0xfc, 0x25, 0xe2, 0xcd, 0x6b, 0x42, 0xd4, 0x3e, 0x14, 0xab, \r
-       0xcd, 0xa6, 0x5e, 0xcf, 0x65, 0x24, 0x90, 0x6b, 0x7c, 0x33, \r
-       0x47, 0x23, 0x21, 0x20, 0x18, 0x7d, 0x56, 0xbe, 0xec, 0xfd, \r
-       0x9c, 0x3e, 0x34, 0x47, 0xfb, 0x42, 0x7c, 0x1b, 0xf0, 0xff, \r
-       00, 0x8f, 0x62, 0xd2, 0xdf, 0x46, 0x4d, 0x59, 0x24, 0x61, \r
-       0x64, 0xf2, 0xf9, 0xa6, 0x3d, 0xb2, 0x32, 0x7d, 0xec, 0xc, \r
-       0xe7, 0x6e, 0x7a, 0x77, 0xaf, 0xe7, 0x2f, 0xc6, 0x7a, 0xf9, \r
-       0xf1, 0x5f, 0x8b, 0xf5, 0xdd, 0x6d, 0x86, 0xd6, 0xd4, 0xaf, \r
-       0xe7, 0xbd, 0x23, 0xd0, 0xc9, 0x23, 0x3f, 0xfe, 0xcd, 0x5f, \r
-       0xd1, 0x27, 0xec, 0x91, 0xf0, 0xfe, 0x4f, 0x85, 0xff, 00, \r
-       0xb3, 0x57, 0xc3, 0x9f, 0xd, 0xce, 0x9e, 0x5d, 0xdd, 0xae, \r
-       0x8d, 0x3, 0xdc, 0xaf, 0xa4, 0xd2, 0x2f, 0x99, 0x27, 0xfe, \r
-       0x3c, 0xe6, 0x81, 0xa7, 0x73, 0xd6, 0xc9, 0xc0, 0xc9, 0xe0, \r
-       0x57, 0xce, 0xda, 0xff, 00, 0xed, 0xf, 0xae, 0x43, 0xae, \r
-       0x5f, 0x47, 0xa6, 0xc7, 0x64, 0xda, 0x7a, 0x4a, 0xcb, 0x9, \r
-       0x96, 0x26, 0x2c, 0x54, 0x1c, 0x64, 0x9d, 0xc3, 0xaf, 0x5f, \r
-       0xc6, 0xbd, 0x7b, 0xe2, 0x97, 0x89, 0x47, 0x85, 0xbc, 0x11, \r
-       0xa9, 0x5d, 0xab, 0x6d, 0x9d, 0xd3, 0xc8, 0x87, 0xfd, 0xf7, \r
-       0xe0, 0x7e, 0x5c, 0x9f, 0xc2, 0xbe, 0x40, 0xaf, 0x86, 0xe2, \r
-       0x2c, 0xca, 0xae, 0x1a, 0x70, 0xa3, 0x42, 0x5c, 0xaf, 0x77, \r
-       0x6f, 0xc3, 0xf5, 0x3c, 0x9c, 0x75, 0x79, 0x53, 0x6a, 0x10, \r
-       0x76, 0x3d, 0x5d, 0x3f, 0x69, 0xf, 0x12, 0xaf, 0xde, 0xb3, \r
-       0xd3, 0x9b, 0xfe, 0xd9, 0xb8, 0xff, 00, 0xd9, 0xaa, 0x74, \r
-       0xfd, 0xa5, 0x75, 0xe1, 0xf7, 0xb4, 0xdd, 0x3d, 0xbe, 0x81, \r
-       0xc7, 0xfe, 0xcd, 0x5e, 0x43, 0x45, 0x7c, 0x82, 0xce, 0x73, \r
-       0x5, 0xff, 00, 0x2f, 0x5f, 0xe0, 0x79, 0x9f, 0x5a, 0xad, \r
-       0xfc, 0xc7, 0xb3, 0x47, 0xfb, 0x4c, 0xea, 0x83, 0xef, 0xe8, \r
-       0xb6, 0x8d, 0xfe, 0xec, 0xac, 0x3f, 0xc6, 0xa7, 0x4f, 0xda, \r
-       0x72, 0xef, 0xf8, 0xbc, 0x3f, 0x9, 0xfa, 0x5d, 0x11, 0xff, \r
-       00, 0xb2, 0xd7, 0x89, 0x51, 0x5a, 0x2c, 0xf3, 0x31, 0x5f, \r
-       0xf2, 0xf7, 0xf0, 0x5f, 0xe4, 0x57, 0xd7, 0x2b, 0xff, 00, \r
-       0x31, 0xee, 0xd1, 0x7e, 0xd3, 0x83, 0xfe, 0x5a, 0x78, 0x7f, \r
-       0x1f, 0xee, 0xdd, 0x7f, 0xf6, 0x35, 0x66, 0x3f, 0xda, 0x6e, \r
-       0xc8, 0xfd, 0xfd, 0xa, 0x71, 0xfe, 0xec, 0xea, 0x7f, 0xa5, \r
-       0x78, 0x5, 0x15, 0xaa, 0xe2, 0xc, 0xc5, 0x7f, 0xcb, 0xcf, \r
-       0xc1, 0x7f, 0x91, 0x5f, 0x5d, 0xaf, 0xfc, 0xdf, 0x91, 0xf4, \r
-       0x3c, 0x7f, 0xb4, 0xc6, 0x90, 0x7e, 0xfe, 0x91, 0x7a, 0xbf, \r
-       0xee, 0xb2, 0x1f, 0xeb, 0x5a, 0x56, 0x7f, 0xb4, 0x5f, 0x85, \r
-       0xee, 0x8, 0x13, 0x45, 0x7f, 0x6b, 0xee, 0xf0, 0x86, 0x1f, \r
-       0xf8, 0xeb, 0x1a, 0xf9, 0x9a, 0x8a, 0xd6, 0x3c, 0x47, 0x8f, \r
-       0x8e, 0xed, 0x3f, 0x97, 0xf9, 0x14, 0xb1, 0xf5, 0x97, 0x53, \r
-       0xec, 0x4d, 0x7, 0xe2, 0x67, 0x86, 0x7c, 0x48, 0xeb, 0x1d, \r
-       0x8e, 0xaf, 0x3, 0x4c, 0xdd, 0x22, 0x97, 0x31, 0xb9, 0xfa, \r
-       0x6, 0xc6, 0x7f, 0xa, 0xe9, 0xeb, 0xe1, 0x4a, 0xed, 0x7c, \r
-       0x17, 0xf1, 0x6b, 0x5f, 0xf0, 0x6c, 0xa8, 0x89, 0x72, 0xd7, \r
-       0xd6, 00, 0xfc, 0xd6, 0x97, 0x2c, 0x59, 0x71, 0xfe, 0xc9, \r
-       0xea, 0xbf, 0x87, 0x1e, 0xd5, 0xed, 0xe1, 0x38, 0xa1, 0x36, \r
-       0xa3, 0x8a, 0x85, 0xbc, 0xd7, 0xf9, 0x7f, 0xc1, 0x3a, 0xe9, \r
-       0x66, 0x37, 0x76, 0xa8, 0xbe, 0xe3, 0xeb, 0x6a, 0x2b, 0x13, \r
-       0xc2, 0x1e, 0x2f, 0xd3, 0xfc, 0x6b, 0xa3, 0xa6, 0xa1, 0xa7, \r
-       0xc8, 0x4a, 0x13, 0xb6, 0x48, 0xdb, 0x86, 0x8d, 0xfb, 0xa9, \r
-       0x15, 0xb7, 0x5f, 0x75, 0x4e, 0xa4, 0x6a, 0xc5, 0x4e, 0xe, \r
-       0xe9, 0x9e, 0xc4, 0x64, 0xa4, 0xae, 0xb6, 0xa, 0xc0, 0xf1, \r
-       0x17, 0x8e, 0xb4, 0x2f, 0x9, 0xdc, 0x43, 0x6, 0xab, 0xa8, \r
-       0x25, 0xa4, 0xb3, 0x29, 0x74, 0x56, 0x56, 0x39, 00, 0xe3, \r
-       0x3c, 0x3, 0x5b, 0xf5, 0xf2, 0x87, 0xc6, 0xed, 0x74, 0x6b, \r
-       0x9f, 0x10, 0xaf, 0xc2, 0x36, 0xe8, 0xac, 0xc2, 0xda, 0xa7, \r
-       0xfc, 0x7, 0xef, 0x7f, 0xe3, 0xc5, 0xab, 0xc8, 0xcd, 0xf3, \r
-       0x7, 0x97, 0x61, 0xd5, 0x48, 0x24, 0xe4, 0xdd, 0x95, 0xce, \r
-       0x5c, 0x55, 0x77, 0x42, 0x1c, 0xcb, 0x73, 0xe8, 0x4, 0xf8, \r
-       0xb9, 0xe0, 0xf7, 0xe9, 0xaf, 0x5b, 0xf, 0xf7, 0xb7, 0xf, \r
-       0xe6, 0x2a, 0x74, 0xf8, 0xa1, 0xe1, 0x37, 0xe9, 0xe2, 0xb, \r
-       0x1f, 0xc6, 0x50, 0x2b, 0xe3, 0xca, 0x2b, 0xe3, 0x97, 0x14, \r
-       0xe2, 0x7a, 0xd3, 0x8f, 0xe3, 0xfe, 0x67, 0x97, 0xfd, 0xa3, \r
-       0x53, 0xb2, 0x3e, 0xca, 0x8f, 0xe2, 0x17, 0x86, 0x25, 0xfb, \r
-       0xba, 0xfe, 0x9c, 0x7f, 0xed, 0xe5, 0x3f, 0xc6, 0xad, 0x47, \r
-       0xe3, 0xd, 0xa, 0x6f, 0xb9, 0xac, 0xd8, 0x37, 0xd2, 0xe5, \r
-       0x3f, 0xc6, 0xbe, 0x2b, 0xa2, 0xb5, 0x5c, 0x55, 0x5b, 0xad, \r
-       0x25, 0xf7, 0xb2, 0xbf, 0xb4, 0x67, 0xd6, 0x27, 0xdb, 0x89, \r
-       0xaf, 0x69, 0x92, 0x7d, 0xdd, 0x46, 0xd1, 0xbe, 0x93, 0xaf, \r
-       0xf8, 0xd4, 0xc9, 0xa9, 0x5a, 0x49, 0xf7, 0x2e, 0xa0, 0x6f, \r
-       0xa4, 0x80, 0xff, 00, 0x5a, 0xf8, 0x76, 0x8c, 0x91, 0x5a, \r
-       0x2e, 0x2b, 0x97, 0x5a, 0x3f, 0x8f, 0xfc, 0x2, 0xbf, 0xb4, \r
-       0x9f, 0xf2, 0xfe, 0x27, 0xdd, 0xb, 0x2a, 0x37, 0xdd, 0x75, \r
-       0x3f, 0x43, 0x4e, 0xdc, 0x3d, 0x45, 0x7c, 0x30, 0x25, 0x75, \r
-       0xe8, 0xec, 0x3e, 0x86, 0xa4, 0x4b, 0xeb, 0x98, 0xfe, 0xed, \r
-       0xc4, 0xab, 0xf4, 0x72, 0x2b, 0x45, 0xc5, 0x6b, 0xad, 0x1f, \r
-       0xfc, 0x9b, 0xfe, 0x1, 0x5f, 0xda, 0x5f, 0xdc, 0xfc, 0x7f, \r
-       0xe0, 0x1f, 0x72, 0x51, 0x5f, 0x10, 0xa6, 0xb9, 0xa9, 0x47, \r
-       0xf7, 0x75, 0xb, 0xa5, 0xfa, 0x4c, 0xdf, 0xe3, 0x52, 0xaf, \r
-       0x89, 0xb5, 0x84, 0xfb, 0xba, 0xad, 0xf2, 0xfd, 0x2e, 0x5c, \r
-       0x7f, 0x5a, 0xd1, 0x71, 0x5d, 0x3e, 0xb4, 0x5f, 0xdf, 0xff, \r
-       00, 00, 0x7f, 0xda, 0x4b, 0xf9, 0x7f, 0x13, 0xed, 0x9a, \r
-       0x2b, 0xe2, 0xc4, 0xf1, 0x96, 0xbf, 0x1f, 0xdd, 0xd7, 0x35, \r
-       0x25, 0xfa, 0x5d, 0xc9, 0xfe, 0x35, 0xda, 0x7c, 0x25, 0xf1, \r
-       0x7, 0x88, 0x75, 0xff, 00, 0x1e, 0xe9, 0x76, 0x93, 0x6b, \r
-       0x3a, 0x84, 0xf6, 0xc1, 0xda, 0x59, 0x52, 0x4b, 0x97, 0x65, \r
-       0x2a, 0xaa, 0x4e, 0x8, 0x27, 0xa6, 0x70, 0x3f, 0x1a, 0xe9, \r
-       0xa1, 0xc4, 0xb4, 0xab, 0xd5, 0x8d, 0x25, 0x49, 0xde, 0x4d, \r
-       0x2d, 0xd7, 0x53, 0x48, 0x63, 0xe3, 0x39, 0x28, 0xa8, 0xee, \r
-       0x7d, 0x3f, 0x45, 0x14, 0x57, 0xd9, 0x1e, 0xa8, 0x51, 0x45, \r
-       0x14, 00, 0x51, 0x5c, 0xf7, 0x88, 0xfc, 0x7f, 0xa0, 0x78, \r
-       0x4f, 0x8d, 0x4f, 0x52, 0x86, 0x9, 0x7f, 0xe7, 0x8a, 0xe5, \r
-       0xe4, 0xff, 00, 0xbe, 0x57, 0x26, 0xbc, 0xef, 0x5b, 0xfd, \r
-       0xa5, 0x74, 0xcb, 0x70, 0xcb, 0xa5, 0xe9, 0x97, 0x17, 0x6f, \r
-       0xd9, 0xee, 0x18, 0x44, 0xbf, 0x90, 0xc9, 0xfe, 0x55, 0xe6, \r
-       0xe2, 0x33, 0x2c, 0x26, 0x17, 0x4a, 0xb5, 0x12, 0x7d, 0xb7, \r
-       0x7f, 0x72, 0x39, 0xe7, 0x5e, 0x95, 0x3f, 0x8a, 0x47, 0xb2, \r
-       0xd1, 0x5f, 0x34, 0x5f, 0x7e, 0xd1, 0x9e, 0x26, 0xb8, 0x63, \r
-       0xf6, 0x78, 0x2c, 0x2d, 0x13, 0xb6, 0x22, 0x67, 0x23, 0xf1, \r
-       0x2d, 0x8f, 0xd2, 0xb1, 0xae, 0x3e, 0x37, 0xf8, 0xce, 0x72, \r
-       0x7f, 0xe2, 0x6d, 0xe5, 0x3, 0xda, 0x38, 0x23, 0x18, 0xff, \r
-       00, 0xc7, 0x6b, 0xc5, 0x9f, 0x13, 0x60, 0x63, 0xf0, 0xa9, \r
-       0x3f, 0x97, 0xf9, 0xb4, 0x72, 0x3c, 0xc2, 0x8a, 0xda, 0xec, \r
-       0xfa, 0xbc, 0x8c, 0xd2, 0x79, 0x63, 0xdf, 0xf3, 0x35, 0xf2, \r
-       0x2b, 0x7c, 0x5d, 0xf1, 0x83, 0x1c, 0x9d, 0x76, 0xe4, 0x7d, \r
-       0x2, 0x8f, 0xe9, 0x52, 0x45, 0xf1, 0x8b, 0xc6, 0x31, 0x1c, \r
-       0x8d, 0x72, 0x63, 0xfe, 0xf4, 0x68, 0xdf, 0xcd, 0x6b, 0xf, \r
-       0xf5, 0xa3, 0x9, 0xfc, 0x92, 0xfc, 0x3f, 0xcc, 0x9f, 0xed, \r
-       0x1a, 0x7d, 0x99, 0xf5, 0xc5, 0x15, 0xf2, 0xb5, 0xb7, 0xc7, \r
-       0x9f, 0x18, 0xdb, 0xfd, 0xeb, 0xf8, 0x6e, 0x3f, 0xeb, 0xad, \r
-       0xba, 0x7f, 0x40, 0x2b, 0x7f, 0x4d, 0xfd, 0xa5, 0x75, 0xa8, \r
-       0x58, 0xb, 0xed, 0x32, 0xce, 0xe9, 0x7b, 0xf9, 0x25, 0xa2, \r
-       0x3f, 0xa9, 0x61, 0x5d, 0x54, 0xf8, 0x93, 0x1, 0x3f, 0x8a, \r
-       0xeb, 0xd5, 0x7f, 0x95, 0xcd, 0x16, 0x3e, 0x8b, 0xde, 0xe8, \r
-       0xfa, 0x2a, 0x8a, 0xf2, 0xdd, 0x17, 0xf6, 0x87, 0xf0, 0xd6, \r
-       0xa3, 0xb5, 0x6f, 0x52, 0xeb, 0x4c, 0x90, 0xf5, 0x32, 0x26, \r
-       0xf4, 0xfc, 0xd7, 0x27, 0xf4, 0xaf, 0x45, 0xd2, 0xb5, 0x9b, \r
-       0x1d, 0x72, 0xd5, 0x6e, 0x74, 0xfb, 0xb8, 0x6f, 0x20, 0x6e, \r
-       0x8f, 0xb, 0x86, 0x1f, 0x8f, 0xa5, 0x7b, 0x98, 0x7c, 0x6e, \r
-       0x1f, 0x15, 0xfc, 0x19, 0xa9, 0x7e, 0x7f, 0x76, 0xe7, 0x64, \r
-       0x2a, 0xd3, 0xa9, 0xf0, 0x3b, 0x97, 0x68, 0xa2, 0x8a, 0xed, \r
-       0x35, 0xa, 0x28, 0xa2, 0x80, 0xa, 0x28, 0xa2, 0x80, 0xa, \r
-       0x28, 0xa2, 0x80, 0xa, 0x28, 0xa6, 0xbc, 0x8b, 0x12, 0x96, \r
-       0x76, 0x8, 0xa3, 0xa9, 0x63, 0x81, 0x40, 0xe, 0xa2, 0xb0, \r
-       0xb5, 0xf, 0x1d, 0xf8, 0x77, 0x4b, 0x24, 0x5d, 0x6b, 0x56, \r
-       0x30, 0xb0, 0xea, 0xa6, 0x75, 0x27, 0xf2, 0x7, 0x35, 0x8b, \r
-       0x71, 0xf1, 0xa7, 0xc1, 0xb6, 0xe7, 0x7, 0x5a, 0x47, 0xff, \r
-       00, 0xae, 0x70, 0xc8, 0xff, 00, 0xc9, 0x6b, 0x92, 0x78, \r
-       0xbc, 0x35, 0x3d, 0x27, 0x52, 0x2b, 0xd5, 0xa3, 0x27, 0x56, \r
-       0x9c, 0x77, 0x92, 0xfb, 0xce, 0xde, 0x98, 0x5d, 0xb3, 0xf7, \r
-       0xf, 0xe6, 0x2b, 0x82, 0x3f, 0x1d, 0xfc, 0x18, 0xf, 0xfc, \r
-       0x84, 0xe4, 0x3f, 0xf6, 0xed, 0x2f, 0xff, 00, 0x13, 0x4a, \r
-       0xbf, 0x1d, 0x7c, 0x18, 0xc7, 0xfe, 0x42, 0x8e, 0x3e, 0xb6, \r
-       0xb2, 0xff, 00, 0xf1, 0x35, 0x8f, 0xf6, 0x8e, 0xb, 0xfe, \r
-       0x7f, 0x47, 0xff, 00, 0x2, 0x44, 0xfb, 0x7a, 0x5f, 0xce, \r
-       0xbe, 0xf3, 0xbe, 0xc9, 0xc7, 0x4a, 0x4d, 0xc7, 0xfb, 0xa7, \r
-       0xf4, 0xae, 0x3e, 0xdf, 0xe3, 0xf, 0x83, 0xae, 0x7e, 0xee, \r
-       0xb9, 0x2, 0x7f, 0xd7, 0x45, 0x74, 0xfe, 0x60, 0x56, 0xcd, \r
-       0x8f, 0x8c, 0xb4, 0x1d, 0x4f, 0x1f, 0x65, 0xd6, 0x2c, 0x67, \r
-       0x27, 0xa0, 0x59, 0xd7, 0x3f, 0x96, 0x6b, 0x78, 0x62, 0xb0, \r
-       0xf5, 0x3e, 0xa, 0x89, 0xfa, 0x34, 0x5a, 0xa9, 0x9, 0x6d, \r
-       0x24, 0x6c, 0xd1, 0x4d, 0x47, 0x59, 0x17, 0x2a, 0xc1, 0x87, \r
-       0xa8, 0x39, 0xa7, 0x57, 0x51, 0xa0, 0x51, 0x45, 0x30, 0x31, \r
-       0xf3, 0x4a, 0x9e, 0x98, 0xc8, 0x34, 00, 0xfa, 0x28, 0xa2, \r
-       0x80, 0xa, 0x82, 0xf5, 0xfc, 0xbb, 0x39, 0xdb, 0xd1, 0x9, \r
-       0xfd, 0x2a, 0x7a, 0xa3, 0xad, 0xbf, 0x97, 0xa4, 0x5d, 0xb1, \r
-       0x38, 0xc4, 0x66, 0xa6, 0x4e, 0xc9, 0xb1, 0x3d, 0x13, 0x3e, \r
-       0x1c, 0xf8, 0xdf, 0x37, 0xda, 0x3c, 0x49, 0x28, 0xeb, 0x82, \r
-       0x6b, 0x2f, 0xf6, 0x63, 0xf8, 0x99, 0x27, 0xc3, 0x6f, 0x8d, \r
-       0x16, 0xba, 0x44, 0xf2, 0x95, 0xd1, 0x3c, 0x4a, 0x45, 0xa4, \r
-       0x88, 0x71, 0x84, 0xb8, 0x19, 0xf2, 0x9f, 0xdb, 0xba, 0x9f, \r
-       0xf7, 0x85, 0x49, 0xf1, 0x56, 0x7f, 0x3f, 0xc4, 0xd7, 0x3d, \r
-       0xf0, 0x4d, 0x78, 0x7, 0xc5, 0x7b, 0x89, 0x2c, 0xb4, 0xe1, \r
-       0x75, 0x6e, 0xed, 0x15, 0xcd, 0xbb, 0x9, 0xa2, 0x91, 0x4e, \r
-       0xa, 0xba, 0x9c, 0xa9, 0x1f, 0x88, 0xaf, 0xce, 0x32, 0xfa, \r
-       0xce, 0x38, 0xc9, 0x49, 0x77, 0x67, 0xe3, 0x98, 0xbc, 0x4c, \r
-       0xb0, 0xd9, 0xac, 0x31, 0x11, 0xe9, 0x24, 0xbe, 0x4f, 0x46, \r
-       0x7e, 0xc0, 0x51, 0x5c, 0x1f, 0x80, 0xfe, 0x28, 0xe9, 0x5e, \r
-       0x21, 0xf0, 0x37, 0x87, 0x75, 0x59, 0x2e, 0xcb, 0x49, 0x7d, \r
-       0xa7, 0x5b, 0x5c, 0xb1, 0x2a, 0x72, 0x4b, 0xc4, 0xac, 0x7f, \r
-       0x9d, 0x15, 0xfa, 0x45, 0xcf, 0xd8, 0xee, 0x99, 0xde, 0x51, \r
-       0x45, 0x14, 0xc6, 0x14, 0x51, 0x45, 00, 0x15, 0x53, 0x56, \r
-       0xd4, 0xed, 0xf4, 0x5d, 0x2e, 0xee, 0xfe, 0xea, 0x41, 0x15, \r
-       0xb5, 0xb4, 0x4d, 0x2c, 0x8e, 0x7b, 0x2a, 0x8c, 0x9a, 0xb7, \r
-       0x5e, 0x2b, 0xfb, 0x55, 0x78, 0xc4, 0x68, 0x1f, 0xf, 0x86, \r
-       0x93, 0x13, 0xe2, 0xeb, 0x58, 0x93, 0xca, 0xc0, 0xff, 00, \r
-       0x9e, 0x4b, 0x86, 0x73, 0xff, 00, 0xa0, 0x8f, 0xc6, 0xb9, \r
-       0xb1, 0x35, 0x96, 0x1e, 0x8c, 0xaa, 0xbe, 0x88, 0xe4, 0xc5, \r
-       0xd7, 0x58, 0x5a, 0x13, 0xac, 0xfa, 0x2f, 0xf8, 0x63, 0xe4, \r
-       0xcf, 0x12, 0xeb, 0x93, 0xf8, 0xa7, 0xc4, 0x7a, 0x8e, 0xad, \r
-       0x71, 0x8f, 0x3e, 0xfa, 0xe1, 0xe6, 0x60, 0x3a, 0xc, 0x9e, \r
-       00, 0xf6, 0x3, 0x2, 0xbe, 0xc2, 0xfd, 0x9b, 0x3c, 0x23, \r
-       0xff, 00, 0x8, 0xe7, 0x80, 0xa3, 0xb9, 0x91, 0x36, 0xdc, \r
-       0x5e, 0xb1, 0x90, 0xe4, 0x73, 0xb7, 0xb5, 0x7c, 0x91, 0xe0, \r
-       0x6f, 0xf, 0xc9, 0xe2, 0x6f, 0x14, 0x69, 0xda, 0x7c, 0x6a, \r
-       0x5b, 0xcd, 0x95, 0x41, 0xc7, 0xa6, 0x79, 0xaf, 0xd0, 0x8d, \r
-       0x32, 0xc2, 0x2d, 0x2f, 0x4f, 0xb7, 0xb4, 0x85, 0x42, 0x47, \r
-       0xa, 0x4, 0x50, 0x3d, 0x85, 0x7c, 0x6e, 0x43, 0x45, 0xd6, \r
-       0xaf, 0x3c, 0x4c, 0xfa, 0x7e, 0x6c, 0xf8, 0xfe, 0x1d, 0xa0, \r
-       0xea, 0x4e, 0x78, 0xa9, 0xef, 0xfa, 0xbd, 0xcb, 0x54, 0x51, \r
-       0x45, 0x7d, 0xd9, 0xf7, 0x61, 0x45, 0x14, 0x50, 0x1, 0x5f, \r
-       0x98, 0xbf, 0xf0, 0x5b, 0x2f, 0x1d, 0xdc, 0x5a, 0xf8, 0x77, \r
-       0xe1, 0xaf, 0x83, 0x62, 0x25, 0x6d, 0xaf, 0x6e, 0x6e, 0xb5, \r
-       0x59, 0xf0, 0x48, 0xc9, 0x89, 0x52, 0x34, 0x7, 0xd4, 0x7e, \r
-       0xf9, 0xcf, 0xe1, 0x5f, 0xa7, 0x55, 0xf9, 0xe5, 0xff, 00, \r
-       0x5, 0x88, 0xf8, 0x15, 0xab, 0x78, 0xf7, 0xe1, 0x97, 0x86, \r
-       0x3c, 0x79, 0xa2, 0x59, 0xcd, 0x7f, 0x2f, 0x85, 0xa6, 0x9a, \r
-       0x2b, 0xf8, 0x60, 0x42, 0xcc, 0x96, 0x93, 0x5, 0x26, 0x5c, \r
-       0xe, 0x70, 0x8f, 0x1a, 0xe7, 0xd0, 0x31, 0x3d, 0xa8, 0x13, \r
-       0xd8, 0xf8, 0x57, 0xfe, 0x9, 0xbb, 0xf1, 0x4b, 0xc1, 0xff, \r
-       00, 0x8, 0x7f, 0x6a, 0x4d, 0x1f, 0x5d, 0xf1, 0xb5, 0xec, \r
-       0x1a, 0x5e, 0x92, 0xf6, 0x37, 0x36, 0x91, 0xea, 0x17, 0x23, \r
-       0xf7, 0x56, 0xd3, 0xc8, 0xa0, 0x23, 0xb1, 0xfe, 0x10, 0x40, \r
-       0x65, 0xdd, 0xdb, 0x77, 0x3c, 0x57, 0xe8, 0x87, 0xfc, 0x15, \r
-       0x1f, 0xf6, 0x8d, 0xd2, 0x7c, 0x31, 0xfb, 0x2e, 0x36, 0x8b, \r
-       0xe1, 0xed, 0x62, 0xcf, 0x51, 0xbb, 0xf1, 0xb4, 0xc2, 0xc2, \r
-       0x29, 0x6c, 0xae, 0x16, 0x55, 0xfb, 0x2a, 0xe1, 0xe7, 0x70, \r
-       0x54, 0x91, 0x82, 0x36, 0xa7, 0xfd, 0xb4, 0xaf, 0xc4, 0xea, \r
-       0x37, 0x12, 00, 0xc9, 0xc0, 0xe8, 0x2a, 0xac, 0x45, 0xcf, \r
-       0xb5, 0x7f, 0xe0, 0x94, 0x9f, 0xc, 0xb4, 0xcf, 0x13, 0xfe, \r
-       0xd0, 0x57, 0x3e, 0x35, 0xd7, 0xee, 0x6d, 0xac, 0xf4, 0x4f, \r
-       0x5, 0x59, 0x1b, 0xe3, 0x3d, 0xe4, 0x8b, 0x1c, 0x42, 0xe6, \r
-       0x4c, 0xa4, 0x59, 0x66, 0xc0, 0xe0, 0x79, 0x8d, 0xf5, 0x51, \r
-       0x5e, 0xd9, 0xff, 00, 0x5, 0x2f, 0xff, 00, 0x82, 0x80, \r
-       0xf8, 0x77, 0xc6, 0x7e, 0x11, 0xbb, 0xf8, 0x4f, 0xf0, 0xd7, \r
-       0x53, 0x8f, 0x59, 0xb6, 0xbe, 0x64, 0x3a, 0xd6, 0xbd, 0x65, \r
-       0x29, 0x30, 0x6c, 0x56, 0xd, 0xf6, 0x78, 0x98, 0x7d, 0xfc, \r
-       0x90, 0x37, 0x30, 0xf9, 0x71, 0xc7, 0x39, 0x38, 0xfc, 0xc0, \r
-       0x12, 0xba, 0xc6, 0xd1, 0x87, 0x61, 0x1b, 0x10, 0x59, 0x1, \r
-       0xe0, 0x91, 0xd3, 0x22, 0xbd, 0x33, 0xe0, 0x1f, 0xec, 0xe5, \r
-       0xe3, 0x9f, 0xda, 0x43, 0xc6, 0x50, 0x78, 0x7f, 0xc1, 0xba, \r
-       0x4c, 0x97, 0x44, 0xb7, 0xfa, 0x4e, 0xa3, 0x2a, 0x95, 0xb4, \r
-       0xb3, 0x4e, 0xed, 0x2c, 0x98, 0xc0, 0xf6, 0x1d, 0x4f, 0x60, \r
-       0x68, 0xb, 0xf4, 0x3b, 0xbf, 0xd8, 0x3f, 0xf6, 0x70, 0x9f, \r
-       0xf6, 0x92, 0xf8, 0xff, 00, 0xa3, 0x69, 0x33, 0xc2, 0xe7, \r
-       0xc3, 0x7a, 0x53, 0x2e, 0xa7, 0xac, 0x4e, 0x17, 0x2a, 0x21, \r
-       0x46, 0x5, 0x62, 0xcf, 0x4c, 0xc8, 0xd8, 0x5c, 0x7a, 0x16, \r
-       0x3d, 0xab, 0xfa, 0xd, 0x44, 0x58, 0x91, 0x51, 0x14, 0x2a, \r
-       0xa8, 0xc0, 0x3, 0xa0, 0x15, 0xe2, 0xff, 00, 0xb2, 0x8f, \r
-       0xec, 0xb7, 0xe1, 0xaf, 0xd9, 0x53, 0xe1, 0xa4, 0x3e, 0x1b, \r
-       0xd1, 0x7f, 0xd3, 0x35, 0x3b, 0x82, 0x27, 0xd5, 0x75, 0x67, \r
-       0x5c, 0x49, 0x79, 0x3e, 0x31, 0x9f, 0x64, 0x1d, 0x15, 0x7b, \r
-       0xf, 0x72, 0x4d, 0x7b, 0x43, 0xba, 0xc6, 0x8c, 0xec, 0x42, \r
-       0xaa, 0x8c, 0x92, 0x7b, 0xa, 0x96, 0xcb, 0x4a, 0xc7, 0x81, \r
-       0xfe, 0xd2, 0x9e, 0x23, 0x13, 0x5e, 0xe9, 0x9a, 0x24, 0x6f, \r
-       0x91, 0x8, 0x37, 0x33, 0x1, 0xfd, 0xe3, 0xc2, 0x8f, 0xcb, \r
-       0x77, 0xe7, 0x5e, 0x25, 0x5b, 0xbe, 0x39, 0xd7, 0xcf, 0x8a, \r
-       0x3c, 0x5b, 0xaa, 0x6a, 0x79, 0x26, 0x39, 0xa6, 0x3e, 0x5e, \r
-       0x7f, 0xb8, 0x3e, 0x55, 0xfd, 00, 0xac, 0x2a, 0xfc, 0x4b, \r
-       0x33, 0xc4, 0xfd, 0x6f, 0x17, 0x52, 0xaf, 0x4b, 0xe9, 0xe8, \r
-       0xb4, 0x47, 0xc9, 0x62, 0x2a, 0x7b, 0x5a, 0xb2, 0x90, 0x51, \r
-       0x45, 0x15, 0xe6, 0x18, 0x16, 0xec, 0x74, 0x8b, 0xed, 0x50, \r
-       0x39, 0xb3, 0xb2, 0xb8, 0xbb, 0x9, 0x8d, 0xde, 0x44, 0x4c, \r
-       0xfb, 0x73, 0xd3, 0x38, 0x1c, 0x54, 0xd2, 0x78, 0x6f, 0x57, \r
-       0x88, 0x65, 0xf4, 0xab, 0xd4, 0x1e, 0xad, 0x6c, 0xe3, 0xfa, \r
-       0x57, 0xd2, 0x1f, 00, 0x74, 0xf, 0xec, 0x8f, 0x2, 0x47, \r
-       0x74, 0xe9, 0xb6, 0x6d, 0x42, 0x56, 0x9c, 0x92, 0x39, 0xd8, \r
-       0x3e, 0x55, 0xfd, 0x1, 0x3f, 0x8d, 0x7a, 0x55, 0x7d, 0xd6, \r
-       0x13, 0x86, 0xa3, 0x88, 0xc3, 0xc2, 0xac, 0xea, 0x34, 0xe4, \r
-       0xaf, 0x6b, 0x77, 0x3d, 0x8a, 0x58, 0x5, 0x38, 0x29, 0x39, \r
-       0x5a, 0xe7, 0xc3, 0x12, 0xc1, 0x2c, 0x7, 0x12, 0xc6, 0xf1, \r
-       0x9f, 0x47, 0x52, 0x2a, 0x3a, 0xfb, 0x96, 0xe2, 0xce, 0xde, \r
-       0xed, 0xa, 0x4f, 0x4, 0x73, 0x21, 0xfe, 0x19, 0x10, 0x30, \r
-       0xfd, 0x6b, 0x8c, 0xf1, 0x3f, 0xc1, 0xaf, 0xc, 0xf8, 0x8e, \r
-       0xde, 0x40, 0x96, 0x11, 0xe9, 0xb7, 0x44, 0x1d, 0xb7, 0x16, \r
-       0x6a, 0x10, 0x83, 0xee, 0xa3, 0x83, 0xf9, 0x54, 0xd6, 0xe1, \r
-       0x6a, 0xb1, 0x57, 0xa3, 0x51, 0x3f, 0x26, 0xad, 0xfe, 0x62, \r
-       0x9e, 0x5d, 0x24, 0xbd, 0xd9, 0x5c, 0xf9, 0x36, 0x8a, 0xd4, \r
-       0xf1, 0x3f, 0x87, 0xae, 0x7c, 0x2b, 0xaf, 0x5e, 0x69, 0x57, \r
-       0x78, 0x33, 0x5b, 0x3e, 0xd2, 0xcb, 0xd1, 0x81, 0x19, 0xc, \r
-       0x3e, 0xa0, 0x83, 0x59, 0x75, 0xf1, 0x53, 0x84, 0xa9, 0xc9, \r
-       0xc2, 0x4a, 0xcd, 0x68, 0x79, 0x2d, 0x34, 0xec, 0xc2, 0x8a, \r
-       0x28, 0xa8, 0x11, 0xe9, 0xbf, 00, 0x3c, 0x49, 0x36, 0x93, \r
-       0xe3, 0x68, 0xf4, 0xed, 0xc7, 0xec, 0xba, 0x8a, 0x32, 0x32, \r
-       0x76, 0xe, 0xa0, 0xb2, 0x9f, 0xd0, 0x8f, 0xc6, 0xbe, 0x9e, \r
-       0xaf, 0x92, 0xbe, 0xb, 0xda, 0x3d, 0xdf, 0xc4, 0xad, 0x1b, \r
-       0x68, 0x24, 0x46, 0xcf, 0x23, 0x11, 0xd8, 0x4, 0x6f, 0xfe, \r
-       0xb5, 0x7d, 0x6b, 0x5f, 0xa9, 0xf0, 0xcc, 0xe7, 0x2c, 0x13, \r
-       0x52, 0xd9, 0x49, 0xdb, 0xee, 0x4c, 0xfa, 0x2c, 0xbd, 0xb7, \r
-       0x49, 0xa7, 0xdc, 0xa5, 0xad, 0xea, 0x71, 0xe8, 0xda, 0x3d, \r
-       0xed, 0xfc, 0xa7, 0x11, 0xdb, 0x42, 0xf2, 0x9c, 0xff, 00, \r
-       0xb2, 0x9, 0xaf, 0x89, 0xae, 0xae, 0x64, 0xbd, 0xb9, 0x9a, \r
-       0xe2, 0x56, 0xdd, 0x2c, 0xae, 0x64, 0x76, 0xf5, 0x24, 0xe4, \r
-       0xd7, 0xda, 0x3e, 0x28, 0xf0, 0xf4, 0x3e, 0x2a, 0xd0, 0xee, \r
-       0x74, 0xbb, 0x89, 0xa6, 0x82, 0xb, 0x80, 0x3, 0xbc, 0x4, \r
-       0x6, 0xc0, 0x20, 0xe3, 0x90, 0x7d, 0x2b, 0xcd, 0xa4, 0xfd, \r
-       0x9a, 0xb4, 0x16, 0xfb, 0x9a, 0x9e, 0xa0, 0xbf, 0x52, 0x87, \r
-       0xff, 00, 0x65, 0xa8, 0xcf, 0x72, 0xfc, 0x5e, 0x61, 0x28, \r
-       0x2a, 0x9, 0x72, 0xc6, 0xfd, 0x7a, 0xb1, 0x63, 0x28, 0x55, \r
-       0xac, 0xd7, 0x22, 0xd1, 0x1f, 0x39, 0x51, 0x5f, 0x42, 0x49, \r
-       0xfb, 0x33, 0x69, 0x87, 0xee, 0x6b, 0x57, 0x6b, 0xfe, 0xf4, \r
-       0x6a, 0x6a, 0xb4, 0x9f, 0xb3, 0x1c, 0x7, 0xee, 0x6b, 0xf2, \r
-       0xf, 0xf7, 0xad, 0x81, 0xff, 00, 0xd9, 0xab, 0xe4, 0x9f, \r
-       0xf, 0xe6, 0x2b, 0xec, 0x7e, 0x2b, 0xfc, 0xcf, 0x33, 0xea, \r
-       0x55, 0xfb, 0x7e, 0x27, 0x82, 0x51, 0x5e, 0x9b, 0xf1, 0x17, \r
-       0xe0, 0xd2, 0x78, 0x3, 0x42, 0x1a, 0x8b, 0x6b, 0x3f, 0x6b, \r
-       0x2f, 0x32, 0xc2, 0x90, 0xfd, 0x9f, 0x61, 0x62, 0x72, 0x7a, \r
-       0xee, 0x3d, 00, 0x3d, 0xab, 0xcc, 0xab, 0xc7, 0xc4, 0xe1, \r
-       0x6b, 0x60, 0xea, 0x7b, 0x2a, 0xca, 0xcf, 0xe4, 0xff, 00, \r
-       0x23, 0x96, 0xa5, 0x39, 0x52, 0x97, 0x2c, 0xd6, 0xa1, 0x45, \r
-       0x14, 0x57, 0x21, 0x98, 0x51, 0x45, 0x7a, 0x44, 0x1f, 00, \r
-       0x7c, 0x55, 0x73, 0x6b, 0xd, 0xc4, 0x6b, 0x66, 0x56, 0x54, \r
-       0x59, 0x2, 0x99, 0xc8, 0x20, 0x11, 0x9c, 0x1e, 0x3a, 0xd7, \r
-       0x55, 0xc, 0x2d, 0x7c, 0x4d, 0xfd, 0x8c, 0x1c, 0xad, 0xbd, \r
-       0x8d, 0x21, 0x4e, 0x75, 0x3e, 0x5, 0x73, 0xcd, 0xe8, 0xaf, \r
-       0x46, 0x93, 0xe0, 0xf, 0x8c, 0x13, 0xa5, 0xa5, 0xb3, 0xff, \r
-       00, 0xbb, 0x72, 0xb5, 0x56, 0x5f, 0x81, 0xfe, 0x32, 0x8b, \r
-       0xa6, 0x94, 0x1f, 0xfd, 0xcb, 0x88, 0xff, 00, 0xf8, 0xaa, \r
-       0xe8, 0x79, 0x6e, 0x35, 0x6f, 0x46, 0x5f, 0x73, 0x2f, 0xd8, \r
-       0x55, 0x5f, 0x65, 0xfd, 0xc7, 0x7, 0x5e, 0xd3, 0xfb, 0x34, \r
-       0x69, 0x3e, 0x6e, 0xaf, 0xab, 0xea, 0x4c, 0xbc, 0x43, 0xa, \r
-       0xc0, 0x8d, 0xee, 0xc7, 0x27, 0xf4, 0x51, 0xf9, 0xd7, 0x12, \r
-       0xff, 00, 0x7, 0x3c, 0x64, 0x9d, 0x74, 0x29, 0x8f, 0xfb, \r
-       0xb2, 0x46, 0x7f, 0xf6, 0x6a, 0xf7, 0x9f, 0x82, 0x9e, 0x12, \r
-       0xb9, 0xf0, 0x9f, 0x83, 0x84, 0x77, 0xd0, 0x1b, 0x6b, 0xeb, \r
-       0x89, 0x9e, 0x59, 0x63, 0x6e, 0xab, 0xfc, 0x2a, 0xf, 0xe0, \r
-       0x33, 0xf8, 0xd7, 0xb7, 0x91, 0xe0, 0x2b, 0xac, 0x74, 0x67, \r
-       0x56, 0xd, 0x28, 0xdd, 0xea, 0x9a, 0xf2, 0xfd, 0x4e, 0xbc, \r
-       0x1d, 0x19, 0xfb, 0x64, 0xe4, 0xad, 0x63, 0xbf, 0xa2, 0x8a, \r
-       0xf3, 0x4f, 0x8a, 0xff, 00, 0x17, 0xa0, 0xf0, 0x54, 0x6d, \r
-       0xa7, 0x69, 0xfb, 0x6e, 0x35, 0xa7, 0x5c, 0xf3, 0xca, 0x40, \r
-       0xf, 0x76, 0xf5, 0x3e, 0x83, 0xf3, 0xf7, 0xfd, 0x27, 0x13, \r
-       0x89, 0xa5, 0x84, 0xa4, 0xea, 0xd6, 0x76, 0x48, 0xf7, 0xea, \r
-       0x54, 0x8d, 0x28, 0xf3, 0x49, 0xe8, 0x74, 0xde, 0x33, 0xf8, \r
-       0x83, 0xa3, 0xf8, 0x1a, 0xd3, 0xcc, 0xd4, 0x2e, 0x33, 0x70, \r
-       0xcb, 0x98, 0xad, 0x63, 0xe6, 0x59, 0x3e, 0x83, 0xb0, 0xf7, \r
-       0x3c, 0x57, 0xcf, 0xde, 0x32, 0xf8, 0xe3, 0xaf, 0xf8, 0xa3, \r
-       0x7c, 0x36, 0xaf, 0xfd, 0x91, 0x62, 0x4f, 0xfa, 0xbb, 0x66, \r
-       0x3e, 0x63, 0xf, 0xf6, 0x9f, 0xaf, 0xe5, 0x8a, 0xe1, 0x35, \r
-       0x3d, 0x4e, 0xef, 0x59, 0xbd, 0x96, 0xf2, 0xfa, 0xe2, 0x4b, \r
-       0xab, 0x99, 0x4e, 0x5e, 0x49, 0xe, 0x49, 0xff, 00, 0x3e, \r
-       0x95, 0x56, 0xbf, 0x2f, 0xcc, 0x33, 0xec, 0x46, 0x31, 0xb8, \r
-       0x53, 0x7c, 0x90, 0xec, 0xb7, 0x7e, 0xac, 0xf9, 0xda, 0xf8, \r
-       0xca, 0x95, 0x74, 0x8e, 0x88, 0x57, 0x76, 0x91, 0x8b, 0x33, \r
-       0x16, 0x62, 0x72, 0x49, 0x39, 0x26, 0x92, 0x8a, 0x2b, 0xe6, \r
-       0x4e, 00, 0xa2, 0x8a, 0x96, 0xde, 0xd2, 0x7b, 0xc7, 0xd9, \r
-       0x4, 0x32, 0x4e, 0xdf, 0xdd, 0x8d, 0xb, 0x1f, 0xd2, 0x9a, \r
-       0x4d, 0xbb, 0x20, 0x22, 0xa2, 0xb5, 0x47, 0x84, 0xb5, 0xc2, \r
-       0x32, 0x34, 0x5d, 0x47, 0x1e, 0xbf, 0x64, 0x93, 0xfc, 0x2a, \r
-       0x95, 0xd6, 0x9f, 0x75, 0x62, 0x71, 0x73, 0x6d, 0x35, 0xb9, \r
-       0xf4, 0x96, 0x32, 0xbf, 0xce, 0xae, 0x54, 0xe7, 0x15, 0x79, \r
-       0x45, 0xaf, 0x90, 0xdc, 0x5a, 0xdd, 0x15, 0xe8, 0xa2, 0x8a, \r
-       0xcc, 0x41, 0x57, 0x34, 0xad, 0x66, 0xfb, 0x43, 0xba, 0x5b, \r
-       0x9d, 0x3e, 0xee, 0x6b, 0x39, 0xd4, 0xe7, 0x7c, 0x2e, 0x57, \r
-       0x3f, 0x5f, 0x5f, 0xa1, 0xaa, 0x74, 0x55, 0x46, 0x4e, 0x2f, \r
-       0x9a, 0x2e, 0xcc, 0x13, 0x6b, 0x54, 0x7b, 0xef, 0xc3, 0xef, \r
-       0xda, 0x9, 0x2e, 0xe5, 0x8e, 0xc7, 0xc4, 0xc1, 0x20, 0x73, \r
-       0x85, 0x5b, 0xf8, 0xc6, 0x14, 0x9f, 0xf6, 0xc7, 0x6f, 0xa8, \r
-       0xe3, 0xd8, 0x57, 0xb6, 0x47, 0x22, 0x4d, 0x1a, 0xc9, 0x1b, \r
-       0x7, 0x46, 0x19, 0x56, 0x53, 0x90, 0x47, 0xa8, 0x35, 0xf0, \r
-       0xb5, 0x7a, 0xc7, 0xc1, 0x9f, 0x8b, 0x12, 0x78, 0x76, 0xf2, \r
-       0x1d, 0x17, 0x55, 0x98, 0xbe, 0x93, 0x2b, 0x6d, 0x8a, 0x47, \r
-       0x3f, 0xf1, 0xee, 0xc7, 0xa7, 0x3f, 0xdd, 0x3f, 0xa7, 0xe7, \r
-       0x5f, 0x77, 0x94, 0x67, 0xf2, 0xe6, 0x58, 0x7c, 0x63, 0xba, \r
-       0x7b, 0x4b, 0xfc, 0xff, 00, 0xcf, 0xef, 0x3d, 0x9c, 0x2e, \r
-       0x35, 0xdd, 0x42, 0xaf, 0xde, 0x7d, 0x27, 0x45, 0x20, 0x20, \r
-       0x8c, 0x8e, 0x41, 0xa5, 0xaf, 0xd0, 0xcf, 0x70, 0x28, 0xa2, \r
-       0xaa, 0xea, 0x7a, 0x9d, 0xb6, 0x8d, 0xa7, 0xcf, 0x7b, 0x79, \r
-       0x32, 0xc1, 0x6d, 0x2, 0x17, 0x92, 0x46, 0xe8, 00, 0xa4, \r
-       0xda, 0x8a, 0xbb, 0xd8, 0x4d, 0xdb, 0x56, 0x59, 0x66, 0x8, \r
-       0xa5, 0x98, 0x80, 0x7, 0x24, 0x9e, 0xd5, 0xe6, 0xfe, 0x30, \r
-       0xf8, 0xed, 0xa0, 0x78, 0x6f, 0x7c, 0x36, 0x4d, 0xfd, 0xb1, \r
-       0x7a, 0x38, 0xd9, 0x6e, 0xd8, 0x8d, 0x4f, 0xbb, 0xf4, 0xfc, \r
-       0xb3, 0x5e, 0x45, 0xf1, 0x27, 0xe3, 0x16, 0xa1, 0xe3, 0x29, \r
-       0xe5, 0xb4, 0xb1, 0x79, 0x2c, 0x34, 0x60, 0x70, 0x22, 0x53, \r
-       0x87, 0x98, 0x7a, 0xb9, 0x1d, 0xbf, 0xd9, 0xe9, 0xf5, 0xaf, \r
-       0x3a, 0xaf, 0x80, 0xcc, 0x78, 0x95, 0xa6, 0xe9, 0xe0, 0xd7, \r
-       0xfd, 0xbc, 0xff, 00, 0x45, 0xfe, 0x7f, 0x71, 0xe2, 0xd7, \r
-       0xc7, 0xbb, 0xf2, 0xd2, 0xfb, 0xcf, 0x47, 0xf1, 0x7, 0xc7, \r
-       0xbf, 0x14, 0x6b, 0x3b, 0x92, 0xda, 0x68, 0xb4, 0xa8, 0x4f, \r
-       0xf0, 0xda, 0xaf, 0xcd, 0xff, 00, 0x7d, 0x36, 0x4f, 0xe5, \r
-       0x8a, 0xe1, 0x6f, 0xf5, 0xad, 0x43, 0x54, 0x62, 0xd7, 0x97, \r
-       0xd7, 0x37, 0x64, 0xf7, 0x9a, 0x56, 0x7f, 0xe6, 0x6a, 0x95, \r
-       0x15, 0xf1, 0x75, 0xf1, 0x98, 0x8c, 0x4b, 0xbd, 0x69, 0xb7, \r
-       0xf3, 0xfd, 0xf, 0x26, 0x75, 0x67, 0x53, 0xe2, 0x77, 0xa, \r
-       0x28, 0xa2, 0xb8, 0xcc, 0xc2, 0x8a, 0x28, 0xa0, 0x2, 0x8a, \r
-       0x28, 0xa0, 0xb, 0x76, 0x7a, 0xbd, 0xf6, 0x9c, 0xc1, 0xad, \r
-       0x6f, 0x6e, 0x2d, 0x88, 0xef, 0xc, 0xac, 0x9f, 0xc8, 0xd7, \r
-       0x5b, 0xa2, 0x7c, 0x68, 0xf1, 0x6e, 0x8a, 0x55, 0x57, 0x53, \r
-       0x6b, 0xd8, 0xc7, 0x1e, 0x5d, 0xe2, 0x89, 0x33, 0xf8, 0xfd, \r
-       0xef, 0xd6, 0xb8, 0x7a, 0xdb, 0xf0, 0x4e, 0x96, 0x75, 0xaf, \r
-       0x17, 0x68, 0xf6, 0x41, 0x77, 0x9, 0x6e, 0xa3, 0xc, 0x3f, \r
-       0xd9, 0x7, 0x2d, 0xfa, 0x3, 0x5d, 0xd8, 0x6a, 0xf8, 0x88, \r
-       0x54, 0x8c, 0x68, 0xcd, 0xa6, 0xdd, 0xb4, 0x66, 0xb4, 0xe7, \r
-       0x35, 0x24, 0xa0, 0xec, 0x7d, 0x8d, 0xa5, 0xcb, 0x71, 0x3e, \r
-       0x9b, 0x6b, 0x25, 0xda, 0xaa, 0x5d, 0x3c, 0x4a, 0xd2, 0xaa, \r
-       0xc, 00, 0xc4, 0xc, 0x81, 0xf8, 0xd5, 0x9c, 0x73, 0x9a, \r
-       0x5a, 0x2b, 0xf7, 0x14, 0xac, 0x92, 0x3e, 0xbd, 0x5, 0x14, \r
-       0x51, 0x4c, 0x61, 0x58, 0xfe, 0x2e, 0x97, 0xca, 0xf0, 0xed, \r
-       0xeb, 0x74, 0xf9, 0xd, 0x6c, 0x57, 0x33, 0xf1, 0x12, 0x6f, \r
-       0x27, 0xc2, 0xb7, 0x7d, 0xb2, 0x31, 0x58, 0xd6, 0x7c, 0xb4, \r
-       0xe4, 0xfc, 0x8c, 0xea, 0x3b, 0x41, 0xb3, 0xe1, 0x4f, 0x88, \r
-       0x13, 0x79, 0xde, 0x22, 0xbb, 0x6f, 0xf6, 0x8d, 0x78, 0x7, \r
-       0xc6, 0x8b, 0x8f, 0x2f, 0x47, 0x9b, 0x9f, 0xe1, 0x35, 0xee, \r
-       0x5e, 0x2e, 0x97, 0xcd, 0xd6, 0x6f, 0x1b, 0xfd, 0xb3, 0x5f, \r
-       0x3c, 0x7c, 0x78, 0xb9, 0xf2, 0xb4, 0x6b, 0x9f, 0x68, 0xcf, \r
-       0xf2, 0xaf, 0xcd, 0xb2, 0xc5, 0xcd, 0x5e, 0xfe, 0xa7, 0xe2, \r
-       0x18, 0xbf, 0xde, 0xe3, 0xe9, 0xc7, 0xbc, 0xd7, 0xe6, 0x7e, \r
-       0x94, 0xfc, 0xc, 0xf0, 0x98, 0x5f, 0x82, 0x7f, 0xf, 0x84, \r
-       0x90, 0xb0, 0x90, 0x78, 0x7b, 0x4f, 0xd, 0x91, 0xce, 0x7e, \r
-       0xcd, 0x1e, 0x68, 0xaf, 0x59, 0xf8, 0x75, 0x66, 0x2c, 0xfe, \r
-       0x1f, 0x78, 0x62, 0xdc, 0xc6, 0x10, 0xc5, 0xa5, 0xda, 0xc7, \r
-       0xb7, 0x1d, 0x31, 0x12, 0x8c, 0x51, 0x5f, 0xa6, 0x24, 0x7e, \r
-       0xe0, 0xa3, 0xa1, 0xd1, 0xd1, 0x45, 0x15, 0x65, 0x85, 0x14, \r
-       0x51, 0x40, 0x5, 0x7c, 0x4d, 0xfb, 0x4b, 0xf8, 0xc4, 0xf8, \r
-       0xa3, 0xe2, 0x65, 0xcd, 0xac, 0x6e, 0x1a, 0xd3, 0x49, 0x51, \r
-       0x69, 0x1e, 0x31, 0x8d, 0xfd, 0x5c, 0xe4, 0x7b, 0x9c, 0x7e, \r
-       0x15, 0xf5, 0xdf, 0x8e, 0xfc, 0x51, 0xf, 0x82, 0xfc, 0x21, \r
-       0xaa, 0xeb, 0x33, 0x9f, 0x96, 0xd2, 0x6, 0x75, 0x5c, 0xe3, \r
-       0x73, 0xe3, 0xa, 0xa3, 0xdc, 0x9c, 0x57, 0xe7, 0x9b, 0xcb, \r
-       0x3e, 0xa5, 0x7a, 0xf3, 0x4c, 0xc6, 0x5b, 0x9b, 0x89, 0xb, \r
-       0xbb, 0x1e, 0xac, 0xcc, 0x72, 0x4f, 0xe6, 0x6b, 0xe4, 0x78, \r
-       0x83, 0x13, 0xcb, 0x4e, 0x34, 0x17, 0x5d, 0x5f, 0xa2, 0x3e, \r
-       0x33, 0x88, 0xf1, 0x36, 0x84, 0x30, 0xd1, 0xde, 0x5a, 0xbf, \r
-       0x45, 0xb7, 0xe3, 0xf9, 0x1e, 0xfb, 0xfb, 0x27, 0x78, 0x3f, \r
-       0xed, 0xba, 0xdd, 0xe6, 0xb5, 0x32, 0xe6, 0x3b, 0x65, 0xdb, \r
-       0x1e, 0x47, 0xf1, 0x1a, 0xfa, 0xb6, 0xbc, 0xff, 00, 0xe0, \r
-       0x77, 0x85, 0x7, 0x85, 0x7e, 0x1f, 0xe9, 0xf1, 0x32, 0x6d, \r
-       0x9e, 0x75, 0xf3, 0xa4, 0xfa, 0x9a, 0xf4, 0xa, 0xf5, 0xf2, \r
-       0xac, 0x3f, 0xd5, 0xb0, 0x90, 0x8b, 0xdd, 0xea, 0xfe, 0x67, \r
-       0xd0, 0x65, 0xb8, 0x7f, 0xaa, 0xe1, 0x61, 0xe, 0xbb, 0xbf, \r
-       0x98, 0x51, 0x45, 0x15, 0xeb, 0x9e, 0x98, 0x51, 0x45, 0x14, \r
-       00, 0x53, 0x26, 0x86, 0x3b, 0x98, 0x64, 0x86, 0x68, 0xd6, \r
-       0x58, 0xa4, 0x52, 0xae, 0x8e, 0x32, 0xac, 0xf, 0x4, 0x11, \r
-       0xdc, 0x56, 0x5f, 0x8a, 0xfc, 0x5b, 0xa3, 0x78, 0x1b, 0xc3, \r
-       0xf7, 0xba, 0xe7, 0x88, 0x35, 0x3b, 0x5d, 0x1f, 0x48, 0xb2, \r
-       0x8c, 0xcb, 0x71, 0x7b, 0x79, 0x20, 0x8e, 0x38, 0xd4, 0x77, \r
-       0x24, 0xd7, 0xe7, 0xf7, 0xc6, 0xdf, 0xf8, 0x2c, 0x9f, 0x82, \r
-       0xfc, 0x31, 0x3c, 0xd6, 0x1f, 0xd, 0xbc, 0x39, 0x73, 0xe3, \r
-       0xb, 0x84, 0x3b, 0x7f, 0xb4, 0xb5, 0x16, 0x36, 0x96, 0x9f, \r
-       0x55, 0x5c, 0x19, 0x1f, 0xf1, 0xb, 0x40, 0x1e, 0x85, 0xf1, \r
-       0x93, 0xfe, 0x9, 0x37, 0xf0, 0x6b, 0xe2, 0x76, 0xa3, 0x73, \r
-       0xa9, 0xe8, 0x9f, 0xda, 0x3e, 0x3, 0xd4, 0x6e, 0x1c, 0xc9, \r
-       0x20, 0xd2, 0x1d, 0x5e, 0xd4, 0xb1, 0xeb, 0xfb, 0x97, 0x4, \r
-       0x2f, 0xd1, 0xa, 0x8a, 0xf0, 0xd9, 0xbf, 0xe0, 0x88, 0xb0, \r
-       0xfd, 0xb3, 0x31, 0x7c, 0x58, 0x90, 0x5a, 0x67, 0xa3, 0xe8, \r
-       0xa0, 0xc9, 0x8f, 0xa8, 0x9b, 0x15, 0xe2, 0x1a, 0xa7, 0xfc, \r
-       0x16, 0xf, 0xe3, 0xc5, 0xf4, 0xcc, 0xd6, 0xd0, 0x78, 0x57, \r
-       0x4e, 0x8c, 0xfd, 0xd4, 0x87, 0x4c, 0x76, 0xc7, 0xe2, 0xf2, \r
-       0xb6, 0x6b, 0xed, 0xf, 0xf8, 0x26, 0xc7, 0xed, 0x35, 0xf1, \r
-       0x77, 0xf6, 0xa3, 0x93, 0xc5, 0xba, 0xcf, 0x8e, 0x2e, 0xb4, \r
-       0xb6, 0xf0, 0xde, 0x91, 0xe5, 0x5a, 0x5b, 0x8b, 0x1b, 0x11, \r
-       0xb, 0xcb, 0x74, 0xff, 00, 0x33, 0x65, 0xb2, 0x78, 0x54, \r
-       0x3, 0x81, 0xfd, 0xf1, 0x4f, 0x52, 0x74, 0x65, 0xf, 0x87, \r
-       0x1f, 0xf0, 0x47, 0x3f, 0x84, 0x5e, 0x16, 0xb8, 0x4b, 0x8f, \r
-       0x13, 0xeb, 0x1a, 0xef, 0x8c, 0xa4, 0x52, 0xf, 0x91, 0x2c, \r
-       0xab, 0x67, 0x6e, 0x48, 0xf5, 0x58, 0xfe, 0x7f, 0xfc, 0x7e, \r
-       0xbe, 0xd5, 0xf0, 0x27, 0xc3, 0xef, 0xd, 0xfc, 0x31, 0xf0, \r
-       0xe5, 0xb6, 0x81, 0xe1, 0x4d, 0x12, 0xcb, 0x40, 0xd1, 0xed, \r
-       0x86, 0x23, 0xb4, 0xb1, 0x88, 0x46, 0x83, 0xd4, 0x9c, 0x75, \r
-       0x27, 0xb9, 0x39, 0x26, 0xbc, 0x43, 0xc5, 0x7f, 0xf0, 0x50, \r
-       0xef, 0x80, 0xbe, 0x6, 0xf1, 0x76, 0xaf, 0xe1, 0x8d, 0x7b, \r
-       0xc6, 0xaf, 0xa6, 0x6b, 0x5a, 0x55, 0xd4, 0x96, 0x77, 0x96, \r
-       0xd2, 0xe9, 0x77, 0x67, 0xcb, 0x95, 0x1b, 0x6b, 0xd, 0xc2, \r
-       0x22, 0xa7, 0x91, 0xd4, 0x1c, 0x1a, 0xf5, 0xbf, 0x84, 0xbf, \r
-       0x19, 0xbc, 0x1d, 0xf1, 0xcf, 0xc2, 0xed, 0xe2, 0x2f, 0x3, \r
-       0xeb, 0x51, 0xeb, 0xba, 0x3a, 0xdc, 0x35, 0xab, 0x5c, 0xc7, \r
-       0x1b, 0xc6, 0x4, 0x8a, 0x1, 0x65, 0xc3, 0xa8, 0x3c, 0x6, \r
-       0x1d, 0xbb, 0xd2, 0x19, 0xda, 0xd7, 0x11, 0xf1, 0x93, 0xc4, \r
-       0x43, 0xc3, 0xbe, 0x1, 0xd4, 0x59, 0x5f, 0x6c, 0xf7, 0x4b, \r
-       0xf6, 0x58, 0xb9, 0xe7, 0x2f, 0xc1, 0xfc, 0x97, 0x71, 0xae, \r
-       0xde, 0xbe, 0x76, 0xfd, 0xa4, 0x7c, 0x43, 0xf6, 0xcd, 0x7e, \r
-       0xc3, 0x48, 0x8d, 0xf2, 0x96, 0x91, 0x19, 0x64, 0x3, 0xfb, \r
-       0xef, 0xd3, 0xf2, 00, 0x7e, 0x75, 0xe2, 0xe7, 0x18, 0x9f, \r
-       0xaa, 0xe0, 0xa7, 0x35, 0xbb, 0xd1, 0x7a, 0xbf, 0xea, 0xe7, \r
-       0x2e, 0x2a, 0xa7, 0xb3, 0xa4, 0xdf, 0xc8, 0xf1, 0xda, 0x28, \r
-       0xa2, 0xbf, 0x19, 0x3e, 0x54, 0x2a, 0xe6, 0x8f, 0xa6, 0x49, \r
-       0xac, 0xea, 0xd6, 0x76, 0x10, 0x82, 0x65, 0xb9, 0x99, 0x22, \r
-       0x5c, 0x76, 0xdc, 0x40, 0xcd, 0x53, 0xaf, 0x44, 0xf8, 0x18, \r
-       0x9a, 0x64, 0x3e, 0x33, 0xfb, 0x7e, 0xa9, 0x79, 0x6d, 0x67, \r
-       0x15, 0x9c, 0x4c, 0xf1, 0x1b, 0x89, 0x42, 0x6, 0x90, 0xfc, \r
-       0xa3, 0x19, 0xeb, 0x80, 0x58, 0xfe, 0x55, 0xd7, 0x84, 0xa2, \r
-       0xb1, 0x18, 0x88, 0x52, 0x6e, 0xc9, 0xbd, 0x7d, 0x3a, 0x9a, \r
-       0x52, 0x8f, 0x3c, 0xd4, 0x59, 0xf4, 0xfe, 0x9f, 0x63, 0x16, \r
-       0x99, 0x61, 0x6f, 0x69, 0x2, 0xec, 0x86, 0x8, 0xd6, 0x24, \r
-       0x51, 0xd8, 0x1, 0x81, 0x56, 0x2b, 0x2a, 0x3f, 0x16, 0x68, \r
-       0x93, 0x7d, 0xcd, 0x5e, 0xc5, 0xff, 00, 0xdd, 0xb9, 0x43, \r
-       0xfd, 0x6a, 0x43, 0xe2, 0x4d, 0x25, 0x46, 0x4e, 0xa9, 0x66, \r
-       0x7, 0xaf, 0x9e, 0x9f, 0xe3, 0x5f, 0xb7, 0xc6, 0xa5, 0x24, \r
-       0xac, 0xa4, 0xad, 0xea, 0x7d, 0x72, 0x94, 0x6d, 0xa3, 0x34, \r
-       0x69, 0x9, 0xa, 0x9, 0x27, 00, 0x72, 0x49, 0xae, 0x5b, \r
-       0x55, 0xf8, 0xa5, 0xe1, 0x5d, 0x1a, 0x36, 0x69, 0xf5, 0xbb, \r
-       0x57, 0x23, 0xf8, 0x20, 0x7f, 0x35, 0xbf, 0x25, 0xcd, 0x78, \r
-       0xf7, 0xc4, 0x9f, 0x8f, 0x12, 0x6b, 0xf6, 0xb2, 0xe9, 0x9a, \r
-       0xa, 0x49, 0x69, 0x67, 0x20, 0x29, 0x2d, 0xd4, 0x9c, 0x49, \r
-       0x22, 0x9e, 0xa1, 0x47, 0xf0, 0x8f, 0x7e, 0xbf, 0x4a, 0xf3, \r
-       0x71, 0x99, 0xb6, 0x13, 0x7, 0x6, 0xe5, 0x34, 0xdf, 0x64, \r
-       0xee, 0xcc, 0x2a, 0xe2, 0x69, 0xd2, 0x57, 0x6e, 0xec, 0xe2, \r
-       0x3e, 0x27, 0x78, 0x82, 0x2f, 0x13, 0xf8, 0xe7, 0x55, 0xbf, \r
-       0x80, 0x83, 0x6e, 0xd2, 0x8, 0xe3, 0x61, 0xfc, 0x4a, 0x80, \r
-       0x28, 0x3f, 0x8e, 0x33, 0xf8, 0xd7, 0x2d, 0x45, 0x15, 0xf8, \r
-       0xed, 0x6a, 0xb2, 0xaf, 0x52, 0x55, 0x65, 0xbc, 0x9b, 0x7f, \r
-       0x79, 0xf2, 0xd2, 0x93, 0x9c, 0x9c, 0x9f, 0x50, 0xa2, 0x8a, \r
-       0xe9, 0x3c, 0x7, 0xe0, 0x6b, 0xdf, 0x1e, 0x6b, 0x69, 0x65, \r
-       0x6a, 0xc, 0x70, 0x2f, 0xcd, 0x3d, 0xc1, 0x1f, 0x2c, 0x49, \r
-       0xfe, 0x27, 0xb0, 0xa5, 0x4a, 0x94, 0xeb, 0xcd, 0x53, 0xa6, \r
-       0xae, 0xd8, 0x46, 0x2e, 0x6d, 0x46, 0x3b, 0x9e, 0xab, 0xfb, \r
-       0x36, 0xf8, 0x58, 0xa4, 0x57, 0xfa, 0xfc, 0xc8, 0x41, 0x7f, \r
-       0xf4, 0x6b, 0x72, 0x47, 0x51, 0xc1, 0x72, 0x3f, 0x1c, 0xf, \r
-       0xc0, 0xd7, 0xb9, 0x55, 0x3d, 0x23, 0x4a, 0xb6, 0xd0, 0xf4, \r
-       0xcb, 0x6b, 0xb, 0x38, 0xc4, 0x56, 0xd6, 0xf1, 0x88, 0xd1, \r
-       0x47, 0xa0, 0xfe, 0xb5, 0x72, 0xbf, 0x6a, 0xcb, 0xf0, 0x8b, \r
-       0x3, 0x86, 0x85, 0x5, 0xba, 0xdf, 0xd7, 0xa9, 0xf5, 0x94, \r
-       0x29, 0x7b, 0x1a, 0x6a, 0x1, 0x45, 0x14, 0x57, 0xa2, 0x6e, \r
-       0x14, 0x51, 0x45, 00, 0x7c, 0xf7, 0xfb, 0x4a, 0xeb, 0xa6, \r
-       0x7d, 0x67, 0x4c, 0xd2, 0x11, 0xbe, 0x4b, 0x78, 0x8d, 0xc3, \r
-       0x8f, 0xf6, 0x98, 0xe0, 0x7e, 0x41, 0x4f, 0xe7, 0x5e, 0x31, \r
-       0x5d, 0x3f, 0xc4, 0xcd, 0x77, 0xfe, 0x12, 0x3f, 0x1c, 0xea, \r
-       0xf7, 0x81, 0xb7, 0x45, 0xe7, 0x18, 0xa3, 0x3f, 0xec, 0x27, \r
-       0xca, 0x3f, 0x96, 0x7f, 0x1a, 0xe6, 0x2b, 0xf1, 0x3c, 0xcf, \r
-       0x11, 0xf5, 0x9c, 0x65, 0x4a, 0x8b, 0x6b, 0xe9, 0xe8, 0xb4, \r
-       0x47, 0xc9, 0x62, 0x27, 0xed, 0x2a, 0xca, 0x41, 0x45, 0x14, \r
-       0x57, 0x96, 0x73, 0x9b, 0x3e, 0xd, 0xd0, 0xcf, 0x89, 0x3c, \r
-       0x55, 0xa5, 0xe9, 0xb8, 0xca, 0xdc, 0x4e, 0xaa, 0xff, 00, \r
-       0xee, 0xe, 0x5b, 0xf4, 0x6, 0xbe, 0xd1, 0x55, 0xa, 0xa0, \r
-       0x1, 0x80, 0x6, 00, 0xaf, 0x9a, 0xff, 00, 0x67, 0x4d, \r
-       0x18, 0xdf, 0x78, 0xce, 0x7b, 0xf6, 0x5c, 0xc7, 0x63, 0x6e, \r
-       0xc4, 0x1f, 0xf6, 0xdf, 0xe5, 0x1f, 0xa6, 0xea, 0xfa, 0x56, \r
-       0xbf, 0x50, 0xe1, 0x8a, 0x1e, 0xcf, 0xb, 0x2a, 0xaf, 0x79, \r
-       0x3f, 0xc1, 0x7f, 0xc1, 0xb9, 0xf4, 0x19, 0x7c, 0x2d, 0x4d, \r
-       0xcb, 0xb8, 0x51, 0x45, 0x15, 0xf6, 0x7, 0xaa, 0x14, 0x51, \r
-       0x55, 0xb5, 0x1d, 0x42, 0xd, 0x2a, 0xc2, 0xe2, 0xf6, 0xe5, \r
-       0xc4, 0x76, 0xf6, 0xf1, 0xb4, 0xb2, 0x39, 0xec, 0xa0, 0x64, \r
-       0xd2, 0x6d, 0x45, 0x5d, 0x83, 0x76, 0xd4, 0xe3, 0x3e, 0x2d, \r
-       0x7c, 0x47, 0x4f, 0x1, 0x68, 0xaa, 0xb6, 0xfb, 0x5f, 0x55, \r
-       0xba, 0x5, 0x60, 0x43, 0xce, 0xc1, 0xdd, 0xc8, 0xf4, 0x1d, \r
-       0xbd, 0x4d, 0x7c, 0xab, 0x73, 0x73, 0x2d, 0xe5, 0xc4, 0xb3, \r
-       0xcf, 0x23, 0x4b, 0x34, 0xac, 0x5d, 0xe4, 0x73, 0x92, 0xc4, \r
-       0xf5, 0x26, 0xb6, 0x3c, 0x6d, 0xe2, 0xa9, 0xfc, 0x65, 0xe2, \r
-       0x4b, 0xcd, 0x52, 0x72, 0x42, 0xc8, 0xdb, 0x62, 0x8c, 0xff, \r
-       00, 0xcb, 0x38, 0xc7, 0xdd, 0x5f, 0xcb, 0xf5, 0x26, 0xb0, \r
-       0xab, 0xf1, 0xdc, 0xdf, 0x32, 0x96, 0x61, 0x5d, 0xb4, 0xfd, \r
-       0xc5, 0xb2, 0xfd, 0x7e, 0x67, 0xcb, 0x62, 0x6b, 0xba, 0xf3, \r
-       0xf2, 0x5b, 0x5, 0x14, 0x51, 0x5e, 0x11, 0xc6, 0x15, 0xa7, \r
-       0xe1, 0xdf, 0xe, 0x6a, 0x1e, 0x2a, 0xd5, 0x22, 0xb0, 0xd3, \r
-       0x6d, 0xda, 0x79, 0xdc, 0xf6, 0xfb, 0xa8, 0x3f, 0xbc, 0xc7, \r
-       0xb0, 0xf7, 0xa8, 0x34, 0x7d, 0x22, 0xeb, 0x5e, 0xd4, 0xed, \r
-       0xb4, 0xfb, 0x28, 0x8c, 0xd7, 0x57, 0xe, 0x11, 0x10, 0x7a, \r
-       0xfb, 0xfb, 0xe, 0xb5, 0xf5, 0xc7, 0xc3, 0xff, 00, 0x1, \r
-       0xd9, 0x78, 0xb, 0x45, 0x5b, 0x4b, 0x71, 0xbe, 0xe6, 0x40, \r
-       0x1a, 0xe6, 0xe0, 0xf5, 0x91, 0xf1, 0xfa, 0x1, 0xd8, 0x57, \r
-       0xbf, 0x94, 0xe5, 0x52, 0xcc, 0xaa, 0x5d, 0xe9, 0x5, 0xbb, \r
-       0xfd, 0x17, 0xf5, 0xa1, 0xdb, 0x86, 0xc3, 0x3a, 0xf2, 0xd7, \r
-       0x64, 0x71, 0xde, 0xf, 0xfd, 0x9f, 0x34, 0x6d, 0x26, 0x28, \r
-       0xe6, 0xd6, 0x98, 0xea, 0xd7, 0x9d, 0x4c, 0x79, 0x2b, 0xa, \r
-       0x9f, 0x4c, 0x75, 0x6f, 0xc7, 0xf2, 0xaf, 0x50, 0xb2, 0xd3, \r
-       0xed, 0x74, 0xd8, 0x16, 0x1b, 0x4b, 0x68, 0xad, 0xa2, 0x51, \r
-       0x80, 0x91, 0x20, 0x50, 0x3f, 0x1, 0x56, 0x28, 0xaf, 0xd5, \r
-       0x30, 0xd8, 0x2c, 0x3e, 0x12, 0x3c, 0xb4, 0x60, 0x97, 0xe7, \r
-       0xf7, 0x9f, 0x45, 0x4e, 0x94, 0x29, 0x2b, 0x41, 0x58, 0x2a, \r
-       0x2b, 0x8b, 0x58, 0x6e, 0xe2, 0x68, 0xe7, 0x89, 0x26, 0x8d, \r
-       0x86, 0xa, 0x48, 0xa1, 0x81, 0xfc, 0xd, 0x4b, 0x45, 0x76, \r
-       0x34, 0x9e, 0x8c, 0xd8, 0xf2, 0xef, 0x1a, 0xfc, 0x5, 0xd1, \r
-       0x75, 0xe8, 0x65, 0x9f, 0x49, 0x51, 0xa4, 0xea, 0x7, 0x2c, \r
-       0x2, 0x67, 0xc9, 0x73, 0xe8, 0x57, 0xb7, 0xd4, 0x7e, 0x46, \r
-       0xbe, 0x72, 0xd6, 0x74, 0x6b, 0xcf, 0xf, 0xea, 0x73, 0xd8, \r
-       0x5f, 0xc0, 0xd6, 0xf7, 0x50, 0xb6, 0xd7, 0x46, 0xfe, 0x63, \r
-       0xd4, 0x1f, 0x5a, 0xfb, 0x7a, 0xbc, 0x83, 0xf6, 0x87, 0xf0, \r
-       0x7c, 0x5a, 0x87, 0x87, 0xd3, 0x5e, 0x89, 0x31, 0x77, 0x64, \r
-       0x55, 0x25, 0x61, 0xfc, 0x51, 0x31, 0xc7, 0x3f, 0x42, 0x47, \r
-       0xe6, 0x6b, 0xe2, 0xf3, 0xcc, 0x9a, 0x94, 0xa8, 0xcb, 0x13, \r
-       0x87, 0x8f, 0x2c, 0xa3, 0xab, 0x4b, 0x66, 0xba, 0xfc, 0xcf, \r
-       0x23, 0x19, 0x85, 0x8b, 0x8b, 0xa9, 0x5, 0x66, 0x8f, 0x9c, \r
-       0xe8, 0xa2, 0x8a, 0xfc, 0xd0, 0xf0, 0x42, 0x8a, 0x28, 0xa0, \r
-       0xf, 0xa8, 0x7e, 0x5, 0x78, 0xd2, 0x4f, 0x14, 0x78, 0x54, \r
-       0xd9, 0xdd, 0x3e, 0xfb, 0xcd, 0x34, 0xac, 0x25, 0x89, 0xe5, \r
-       0xe3, 0xc7, 0xc8, 0x4f, 0xbf, 0x4, 0x7e, 0x15, 0xe9, 0x55, \r
-       0xf2, 0xd7, 0xc0, 0x5d, 0x71, 0xf4, 0x9f, 0x88, 0x16, 0xd6, \r
-       0xfb, 0xb1, 0xd, 0xfa, 0x34, 0xe, 0x3b, 0x67, 0x1b, 0x94, \r
-       0xfe, 0x63, 0x1f, 0x8d, 0x7d, 0x4b, 0x5f, 0xb0, 0x64, 0x58, \r
-       0xb7, 0x8b, 0xc1, 0x45, 0xc9, 0xeb, 0x1d, 0x1f, 0xcb, 0x6f, \r
-       0xc0, 0xfa, 0x7c, 0x1d, 0x47, 0x52, 0x92, 0xbe, 0xeb, 0x40, \r
-       0xaf, 0x9c, 0x7e, 0x3f, 0xf8, 0xf1, 0xf5, 0x6d, 0x67, 0xfb, \r
-       0x2, 0xd2, 0x42, 0x2c, 0xac, 0x88, 0x33, 0xed, 0x3c, 0x49, \r
-       0x2f, 0xa7, 0xd1, 0x7f, 0x9e, 0x7d, 0x2b, 0xe8, 0x6d, 0x42, \r
-       0xf1, 0x34, 0xfb, 0xb, 0x9b, 0xa9, 0xe, 0x12, 0x8, 0x9a, \r
-       0x46, 0xfa, 00, 0x4f, 0xf4, 0xaf, 0x88, 0xef, 0xef, 0x24, \r
-       0xd4, 0x6f, 0xae, 0x2e, 0xe6, 0x39, 0x96, 0x79, 0x1a, 0x57, \r
-       0x3e, 0xec, 0x72, 0x7f, 0x9d, 0x79, 0x9c, 0x4d, 0x8b, 0x95, \r
-       0x1a, 0x11, 0xa1, 0x7, 0xf1, 0xef, 0xe8, 0x8e, 0x7c, 0xc2, \r
-       0xab, 0x8c, 0x14, 0x17, 0x52, 0xa, 0x28, 0xa2, 0xbf, 0x32, \r
-       0x3c, 00, 0xa2, 0x8a, 0x96, 0xd2, 0xdd, 0xae, 0xee, 0xa1, \r
-       0x81, 0x8, 0xf, 0x2b, 0xac, 0x60, 0x9e, 0x99, 0x27, 0x14, \r
-       0xd2, 0x6d, 0xd9, 0x1, 0x7f, 0x40, 0xf0, 0xc6, 0xab, 0xe2, \r
-       0x8b, 0xaf, 0xb3, 0xe9, 0x76, 0x33, 0x5e, 0x48, 0x3e, 0xf7, \r
-       0x96, 0xbf, 0x2a, 0xff, 00, 0xbc, 0xdd, 0x7, 0xe3, 0x5e, \r
-       0x8d, 0xa7, 0x7e, 0xcd, 0xfe, 0x20, 0xb9, 0x40, 0xd7, 0x57, \r
-       0xb6, 0x56, 0x79, 0xfe, 0x1d, 0xcd, 0x23, 0xf, 0xc8, 0x63, \r
-       0xf5, 0xaf, 0x7a, 0xf0, 0xb7, 0x86, 0xac, 0xfc, 0x27, 0xa1, \r
-       0xda, 0xe9, 0xb6, 0x51, 0x85, 0x8e, 0x25, 0x1, 0x9b, 0x1c, \r
-       0xc8, 0xdd, 0xd8, 0xfb, 0x93, 0x5a, 0xf5, 0xfa, 0x5e, 0x13, \r
-       0x86, 0x70, 0xf0, 0x82, 0x78, 0x96, 0xe5, 0x2f, 0xb9, 0x7f, \r
-       0x99, 0xef, 0xd2, 0xcb, 0xe0, 0x95, 0xea, 0x6a, 0xcf, 0x2, \r
-       0x5f, 0xd9, 0x8e, 0xeb, 0x1f, 0x36, 0xbf, 0x8, 0x3e, 0xd6, \r
-       0xc4, 0xff, 00, 0xec, 0xd4, 0xd7, 0xfd, 0x98, 0xef, 00, \r
-       0xf9, 0x35, 0xe8, 0x9, 0xff, 00, 0x6a, 0xd9, 0x87, 0xfe, \r
-       0xcd, 0x5e, 0xff, 00, 0x45, 0x7a, 0x5f, 0xea, 0xfe, 0x5d, \r
-       0xff, 00, 0x3e, 0xff, 00, 0x17, 0xfe, 0x67, 0x47, 0xd4, \r
-       0xa8, 0x76, 0xfc, 0x59, 0xf3, 0x8d, 0xd7, 0xec, 0xd7, 0xaf, \r
-       0x44, 0x9, 0x83, 0x51, 0xb0, 0x9f, 0xd9, 0x8b, 0xa1, 0xff, \r
-       00, 0xd0, 0x4d, 0x73, 0x3a, 0xb7, 0xc1, 0x7f, 0x17, 0x69, \r
-       0x21, 0x99, 0xb4, 0xa6, 0xba, 0x41, 0xfc, 0x56, 0x8e, 0x24, \r
-       0xfd, 0x7, 0x3f, 0xa5, 0x7d, 0x69, 0x45, 0x73, 0x54, 0xe1, \r
-       0xac, 0xc, 0xd7, 0xb9, 0x78, 0xfc, 0xff, 00, 0xcc, 0xce, \r
-       0x59, 0x7d, 0x17, 0xb5, 0xd1, 0xf0, 0xe5, 0xee, 0x9d, 0x77, \r
-       0xa6, 0xc9, 0xe5, 0xdd, 0xda, 0xcd, 0x6b, 0x27, 0xf7, 0x66, \r
-       0x8c, 0xa1, 0xfc, 0x8d, 0x7a, 0x5f, 0xec, 0xed, 0xa3, 0xb, \r
-       0xff, 00, 0x1b, 0xcb, 0x78, 0xe3, 0x2b, 0x63, 0x6e, 0xce, \r
-       0xa7, 0xd1, 0x9b, 0xe5, 0x1f, 0xa1, 0x6a, 0xfa, 0x3e, 0xff, \r
-       00, 0x4d, 0xb4, 0xd5, 0x6d, 0xda, 0xb, 0xcb, 0x68, 0xae, \r
-       0xa1, 0x61, 0x83, 0x1c, 0xc8, 0x18, 0x1f, 0xc0, 0xd6, 0x4f, \r
-       0x86, 0xfc, 0xd, 0xa3, 0x78, 0x46, 0xea, 0xf6, 0x7d, 0x26, \r
-       0xd3, 0xec, 0x8d, 0x77, 0xb7, 0xcc, 0x55, 0x62, 0x57, 0xe5, \r
-       0xce, 0x30, 0xf, 0x4e, 0xa7, 0xa5, 0x71, 0x61, 0xb8, 0x71, \r
-       0xe1, 0x71, 0x74, 0xeb, 0x29, 0xa9, 0x45, 0x3b, 0xeb, 0xa3, \r
-       0xf2, 0xfc, 0x4c, 0x69, 0xe0, 0x1d, 0x3a, 0x91, 0x95, 0xee, \r
-       0x91, 0xbf, 0x45, 0x14, 0x57, 0xdc, 0x1e, 0xc0, 0x51, 0x45, \r
-       0x14, 00, 0x57, 0x13, 0xf1, 0x6e, 0xe3, 0xc8, 0xf0, 0xa4, \r
-       0xe3, 0xfb, 0xc0, 0xd7, 0x6d, 0x5e, 0x6b, 0xf1, 0xca, 0xe3, \r
-       0xc9, 0xf0, 0xbb, 0xc, 0xe3, 0x2a, 0xd5, 0xc5, 0x8d, 0x97, \r
-       0x2e, 0x1e, 0x6f, 0xc8, 0xe7, 0xc4, 0x3b, 0x52, 0x93, 0xf2, \r
-       0x3e, 0x20, 0xf1, 0x4, 0xbe, 0x65, 0xfd, 0xd3, 0x7a, 0xb9, \r
-       0xaf, 0x9e, 0xfe, 0x34, 0xc4, 0x75, 0x29, 0x6d, 0xec, 0x14, \r
-       0xe0, 0xdd, 0x4f, 0x1c, 00, 0xff, 00, 0xbc, 0xc1, 0x7f, \r
-       0xad, 0x7b, 0xe6, 0xae, 0xfb, 0xa5, 0x98, 0xfa, 0xb1, 0xaf, \r
-       0x12, 0xf1, 0x1d, 0xa7, 0xf6, 0xd7, 0xc5, 0x2f, 0x6, 0xe9, \r
-       0xa3, 0xfe, 0x5e, 0xb5, 0xdb, 0x18, 0x78, 0xf7, 0x9d, 0x5, \r
-       0x7c, 0x1e, 0x4d, 0x1b, 0xd4, 0x47, 0xe2, 0xf4, 0xd7, 0xb4, \r
-       0xcd, 0x28, 0xaf, 0xef, 0x1f, 0xb2, 0xba, 0x6c, 0x1f, 0x65, \r
-       0xd3, 0xed, 0x61, 0xff, 00, 0x9e, 0x71, 0x2a, 0x7e, 0x40, \r
-       0xa, 0x2a, 0xcd, 0x15, 0xfa, 0x49, 0xfb, 0x80, 0x51, 0x45, \r
-       0x14, 00, 0x51, 0x45, 0x21, 0x21, 0x41, 0x24, 0xe0, 0xe, \r
-       0x49, 0xa0, 0xf, 0x9d, 0x7f, 0x6b, 0xdf, 0x1a, 0x2d, 0xb6, \r
-       0x93, 0xa6, 0x78, 0x5e, 0x16, 0x6, 0x5b, 0xa7, 0xfb, 0x5d, \r
-       0xc0, 0xd, 0xc8, 0x45, 0x38, 0x50, 0x47, 0xbb, 0x64, 0xff, \r
-       00, 0xc0, 0x6b, 0xc3, 0xbe, 0x10, 0xf8, 0x59, 0xbc, 0x59, \r
-       0xe3, 0xad, 0x36, 0xcf, 0x69, 0x68, 0x84, 0x81, 0xdf, 0x3, \r
-       0xb0, 0xe6, 0x9d, 0xf1, 0xa3, 0xc6, 0x63, 0xc7, 0x7f, 0x11, \r
-       0xf5, 0x5d, 0x46, 0x27, 0xdf, 0x67, 0x1b, 0x7d, 0x9a, 0xd8, \r
-       0x83, 0x91, 0xe5, 0xa7, 00, 0x8f, 0x62, 0x77, 0x37, 0xe3, \r
-       0x5e, 0xd3, 0xfb, 0x25, 0xf8, 0x3f, 0xca, 0xb7, 0xbe, 0xd7, \r
-       0x66, 0x8c, 0x65, 0x8f, 0x95, 0x13, 0x11, 0xf9, 0xd7, 0xe7, \r
-       0x55, 0x3f, 0xe1, 0x4f, 0x33, 0x51, 0x5a, 0xc6, 0xff, 00, \r
-       0x82, 0xff, 00, 0x3f, 0xd4, 0xfc, 0xe6, 0x2f, 0xfb, 0x53, \r
-       0x35, 0x72, 0xde, 0x29, 0xfe, 0xb, 0xfc, 0xcf, 0xa3, 0x60, \r
-       0x85, 0x6d, 0xe1, 0x8e, 0x24, 0x18, 0x44, 0x50, 0xa0, 0x7b, \r
-       0xa, 0x92, 0x8a, 0x2b, 0xf4, 0x5d, 0x8f, 0xd1, 0x82, 0x8a, \r
-       0x28, 0xa0, 0x2, 0xb3, 0x3c, 0x4d, 0xe2, 0x4d, 0x33, 0xc1, \r
-       0xde, 0x1e, 0xd4, 0x75, 0xcd, 0x66, 0xf2, 0x2d, 0x3f, 0x4a, \r
-       0xd3, 0xe0, 0x7b, 0x9b, 0xab, 0xa9, 0x9b, 0x6a, 0x45, 0x1a, \r
-       0x8c, 0xb3, 0x13, 0xf4, 0x15, 0xa7, 0x5f, 0x1, 0xff, 00, \r
-       0xc1, 0x62, 0x3e, 0x30, 0xc9, 0xe0, 0xdf, 0x81, 0x1a, 0x3f, \r
-       0x82, 0x2c, 0xa7, 0x31, 0xde, 0x78, 0xae, 0xfb, 0xfd, 0x20, \r
-       0x2b, 0x60, 0xfd, 0x92, 0xc, 0x3b, 0xf, 0xa1, 0x73, 0x10, \r
-       0xfa, 0x3, 0x40, 0x1f, 0x9e, 0x9f, 0xb6, 0x97, 0xed, 0x9b, \r
-       0xe2, 0x4f, 0xda, 0xaf, 0xc7, 0x93, 0xb7, 0x9f, 0x36, 0x9b, \r
-       0xe0, 0x8b, 0x9, 0x5e, 0x3d, 0x2b, 0x47, 0x8e, 0x42, 0x11, \r
-       0x90, 0x37, 0x13, 0xcc, 0x3a, 0x34, 0x8c, 00, 0x3c, 0xfd, \r
-       0xde, 0x83, 0xb9, 0x3a, 0x7f, 0x7, 0xbf, 0xe0, 0x9b, 0x1f, \r
-       0x1c, 0x7e, 0x32, 0x68, 0x56, 0xfa, 0xdd, 0x9e, 0x81, 0x6b, \r
-       0xe1, 0xdd, 0x1e, 0xe6, 0x31, 0x35, 0xbd, 0xd7, 0x88, 0x2e, \r
-       0x7e, 0xcc, 0x66, 0x43, 0xc8, 0x65, 0x8c, 0x6, 0x7c, 0x63, \r
-       0x9c, 0x95, 00, 0xd6, 0x6f, 0xfc, 0x13, 0xbb, 0xe1, 0xbe, \r
-       0x87, 0xf1, 0x4b, 0xf6, 0xb4, 0xf0, 0x66, 0x93, 0xe2, 0x25, \r
-       0x82, 0x7d, 0x32, 0xdc, 0xcd, 0xa8, 0x1b, 0x4b, 0x90, 0xa, \r
-       0x5d, 0x3c, 0x31, 0x97, 0x48, 0xf0, 0x7a, 0xfc, 0xc0, 0x36, \r
-       0x3b, 0x85, 0x35, 0xfb, 0x39, 0xfb, 0x62, 0x7c, 0x66, 0xb7, \r
-       0xf8, 0x5, 0xfb, 0x39, 0x78, 0xc3, 0xc5, 0x2, 0x45, 0x86, \r
-       0xf9, 0x2c, 0xcd, 0x96, 0x9a, 0x83, 0x8d, 0xd7, 0x52, 0x8d, \r
-       0x91, 00, 0x3d, 0x89, 0xdd, 0xf4, 0x53, 0x4c, 0x84, 0xaf, \r
-       0xab, 0x3f, 0x9e, 0x6f, 0x16, 0x78, 0x7d, 0xbc, 0x27, 0xe2, \r
-       0x7d, 0x5b, 0x45, 0x7b, 0xcb, 0x6d, 0x41, 0xf4, 0xeb, 0xa9, \r
-       0x2d, 0x5a, 0xea, 0xcd, 0x8b, 0x43, 0x29, 0x46, 0x2a, 0x59, \r
-       0x9, 00, 0x95, 0x24, 0x70, 0x70, 0x2b, 0xf7, 0xe7, 0xf6, \r
-       0x3, 0xf8, 0x22, 0x3e, 0x5, 0x7e, 0xcc, 0x3e, 0x14, 0xd2, \r
-       0x67, 0x8b, 0xcb, 0xd6, 0x35, 0x38, 0xbf, 0xb6, 0x35, 0x1c, \r
-       0x8f, 0x9b, 0xce, 0x9c, 0x6, 0xda, 0x7f, 0xdd, 0x4d, 0x89, \r
-       0xff, 00, 0x1, 0xaf, 0xc5, 0x9f, 0xd8, 0xf3, 0xe0, 0xb4, \r
-       0xbf, 0xb4, 0xf, 0xed, 0x17, 0xe1, 0xf, 0xa, 0x3a, 0x79, \r
-       0xb6, 0x12, 0x5d, 0xb, 0xdd, 0x49, 0x98, 0x64, 0xb, 0x58, \r
-       0xbf, 0x79, 0x2e, 0x7f, 0xde, 00, 0x27, 0xd5, 0xc5, 0x7e, \r
-       0xd9, 0xfe, 0xd9, 0x7f, 0xb4, 0x8e, 0x8d, 0xfb, 0x30, 0x7c, \r
-       0xf, 0xd5, 0xf5, 0x56, 0xbb, 0x82, 0x1f, 0x11, 0x5d, 0x5b, \r
-       0x3d, 0x9e, 0x83, 0xa7, 0xe4, 0x6f, 0x9a, 0xe0, 0xae, 0xd5, \r
-       0x60, 0xbd, 0x76, 0x26, 0x43, 0x31, 0xec, 0x6, 0x3a, 0x91, \r
-       0x43, 0x5, 0xdc, 0xfc, 0x4a, 0xfd, 0xb3, 0x75, 0xfb, 0x5f, \r
-       0x13, 0x7e, 0xd5, 0x7f, 0x14, 0xf5, 0x1b, 0x26, 0x57, 0xb5, \r
-       0x93, 0x5e, 0xb9, 0x44, 0x74, 0xe8, 0xdb, 0x1b, 0x61, 0x3f, \r
-       0x89, 0x52, 0x6b, 0xf5, 0x7f, 0xfe, 0x9, 0x19, 0xa1, 0x49, \r
-       0xa4, 0xfe, 0xc8, 0x36, 0x77, 0x72, 0x2e, 0xdf, 0xed, 0x3d, \r
-       0x66, 0xf6, 0xe5, 0x33, 0xdd, 0x43, 0x2c, 0x59, 0xfc, 0xe3, \r
-       0x6a, 0xfc, 0x50, 0xd1, 0xf4, 0x9d, 0x57, 0xc7, 0x5e, 0x2a, \r
-       0xb3, 0xd3, 0x6c, 0xd2, 0x4d, 0x43, 0x5a, 0xd5, 0xef, 0x12, \r
-       0x8, 0x97, 0xab, 0xcd, 0x3c, 0xaf, 0x81, 0xf8, 0x96, 0x6a, \r
-       0xfe, 0x91, 0x3e, 0x2, 0xfc, 0x2c, 0xb5, 0xf8, 0x27, 0xf0, \r
-       0x73, 0xc2, 0x3e, 0x8, 0xb4, 0xda, 0x53, 0x46, 0xd3, 0xe3, \r
-       0xb7, 0x92, 0x45, 0x1c, 0x49, 0x2e, 0x37, 0x4a, 0xff, 00, \r
-       0xf0, 0x27, 0x2c, 0x7f, 0x1a, 0x18, 0x2d, 0xee, 0x77, 0x53, \r
-       0xcc, 0x96, 0xd0, 0xc9, 0x34, 0x8c, 0x12, 0x38, 0xd4, 0xb3, \r
-       0x31, 0xe8, 00, 0x19, 0x26, 0xbe, 0x2c, 0xf1, 0x46, 0xb5, \r
-       0x27, 0x88, 0xfc, 0x45, 0xa8, 0xea, 0x52, 0x12, 0x4d, 0xcc, \r
-       0xed, 0x20, 0xcf, 0x65, 0xcf, 0xca, 0x3f, 0x1, 0x81, 0x5f, \r
-       0x4a, 0xfc, 0x73, 0xf1, 0x11, 0xd0, 0x7c, 0x3, 0x75, 0x1c, \r
-       0x6f, 0xb2, 0xe2, 0xf9, 0x85, 0xaa, 0x63, 0xae, 0xf, 0x2f, \r
-       0xff, 00, 0x8e, 0x82, 0x3f, 0x1a, 0xf9, 0x5a, 0xbf, 0x38, \r
-       0xe2, 0x8c, 0x4f, 0x35, 0x48, 0x61, 0x97, 0x4d, 0x5f, 0xcf, \r
-       0x6f, 0xeb, 0xcc, 0xf1, 0x33, 0x1a, 0x97, 0x92, 0xa6, 0xba, \r
-       0x5, 0x14, 0x51, 0x5f, 0xa, 0x79, 0x1, 0x45, 0x14, 0x50, \r
-       0x1, 0x46, 0x28, 0xa2, 0x80, 0xa, 0x28, 0xa2, 0x80, 0xa, \r
-       0x7c, 0x10, 0x49, 0x73, 0x32, 0xc5, 0xc, 0x6f, 0x2c, 0xae, \r
-       0x70, 0xa8, 0x8a, 0x59, 0x89, 0xf6, 0x2, 0xb4, 0x3c, 0x3f, \r
-       0xa9, 0xd9, 0xe9, 0x5a, 0x82, 0xcd, 0x7d, 0xa5, 0xc3, 0xab, \r
-       0x5b, 0xff, 00, 0x14, 0x12, 0xc8, 0xc9, 0xf9, 0x15, 0x3d, \r
-       0x7e, 0xb9, 0xaf, 0xa9, 0xbe, 0x1a, 0x5c, 0xf8, 0x5f, 0x58, \r
-       0xd1, 0x56, 0xff, 00, 0xc3, 0xda, 0x7d, 0xbd, 0x90, 0xce, \r
-       0xc9, 0x63, 0x58, 0x82, 0xc9, 0x1b, 0xe3, 0xee, 0xb1, 0xea, \r
-       0x7e, 0xb9, 0xe6, 0xbd, 0xdc, 0xb3, 0x2c, 0x8e, 0x63, 0x2e, \r
-       0x5f, 0x6a, 0xa2, 0xfb, 0x6b, 0x7f, 0xf2, 0xfc, 0x4e, 0xbc, \r
-       0x3e, 0x1d, 0x57, 0x76, 0xe6, 0xb1, 0xe2, 0xbe, 0x9, 0xf8, \r
-       0xd, 0xad, 0x78, 0x86, 0x54, 0x9b, 0x55, 0x56, 0xd1, 0xec, \r
-       0x3a, 0x9f, 0x30, 0x7e, 0xf9, 0xc7, 0xa0, 0x5e, 0xdf, 0x53, \r
-       0xf9, 0x1a, 0xfa, 0x1f, 0xc3, 0x5e, 0x18, 0xd3, 0xbc, 0x25, \r
-       0xa5, 0xc7, 0x61, 0xa6, 0xc0, 0x20, 0x81, 0x79, 0x27, 0xab, \r
-       0x39, 0xee, 0xcc, 0x7b, 0x9a, 0xd5, 0xa2, 0xbf, 0x4b, 0xc0, \r
-       0x65, 0x58, 0x6c, 0xbd, 0x5e, 0x92, 0xbc, 0xbb, 0xbd, 0xff, \r
-       00, 0xe0, 0x1f, 0x41, 0x47, 0xd, 0x4e, 0x87, 0xc3, 0xbf, \r
-       0x70, 0xa2, 0x8a, 0x2b, 0xd8, 0x3a, 0x82, 0x8a, 0x28, 0xa0, \r
-       0x2, 0xb1, 0x3c, 0x69, 0xac, 0xaf, 0x87, 0xbc, 0x27, 0xaa, \r
-       0xea, 0x5, 0xb6, 0x98, 0x2d, 0xdc, 0xa7, 0xfb, 0xe4, 0x61, \r
-       0x47, 0xe6, 0x45, 0x6d, 0xd7, 0x91, 0xfe, 0xd1, 0xfa, 0xd9, \r
-       0xb2, 0xf0, 0xa5, 0x9e, 0x9c, 0x8d, 0x87, 0xbd, 0xb8, 0xcb, \r
-       0xf, 0x54, 0x41, 0x93, 0xff, 00, 0x8f, 0x15, 0xaf, 0x3f, \r
-       0x30, 0xaf, 0xf5, 0x5c, 0x2d, 0x4a, 0xdd, 0x97, 0xe3, 0xd3, \r
-       0xf1, 0x30, 0xaf, 0x3f, 0x67, 0x4e, 0x52, 0x3e, 0x70, 0x24, \r
-       0x93, 0x93, 0xc9, 0xa2, 0x8a, 0x2b, 0xf0, 0xf3, 0xe4, 0x42, \r
-       0x8a, 0x29, 0x42, 0x96, 0x20, 0x1, 0x92, 0x78, 0x2, 0x80, \r
-       0x3e, 0x93, 0xfd, 0x9c, 0xf4, 0x71, 0x65, 0xe0, 0xcb, 0x8b, \r
-       0xe6, 0x5c, 0x49, 0x7b, 0x72, 0xc4, 0x1f, 0xf6, 0x13, 0xe5, \r
-       0x1f, 0xae, 0xea, 0xf5, 0x7a, 0xc4, 0xf0, 0x5e, 0x88, 0x3c, \r
-       0x39, 0xe1, 0x4d, 0x2f, 0x4e, 00, 0x6, 0x82, 0x5, 0xf, \r
-       0x8e, 0xec, 0x79, 0x63, 0xf9, 0x93, 0x5b, 0x75, 0xfb, 0x8e, \r
-       0x2, 0x87, 0xd5, 0xb0, 0xb4, 0xe9, 0x76, 0x4b, 0xef, 0xeb, \r
-       0xf8, 0x9f, 0x5d, 0x42, 0x1e, 0xce, 0x9c, 0x62, 0x14, 0x51, \r
-       0x45, 0x77, 0x9b, 0x85, 0x79, 0x1f, 0xed, 0x15, 0xe2, 0x86, \r
-       0xd3, 0x3c, 0x35, 0x6d, 0xa4, 0x42, 0xfb, 0x65, 0xd4, 0x1f, \r
-       0x32, 0x1, 0xd7, 0xca, 0x5c, 0x13, 0xf9, 0x9c, 0x7e, 0x46, \r
-       0xbd, 0x72, 0xbe, 0x51, 0xf8, 0xdd, 0xae, 0xb6, 0xb7, 0xf1, \r
-       0xb, 0x50, 0x4d, 0xdb, 0xa1, 0xb3, 0xc5, 0xac, 0x63, 0x3d, \r
-       0x36, 0x8f, 0x9b, 0xff, 00, 0x1e, 0x2d, 0x5f, 0x37, 0x9f, \r
-       0xe2, 0x9e, 0x1b, 0x5, 0x25, 0x1d, 0xe5, 0xa7, 0xf9, 0xfe, \r
-       0x7, 0x6, 0x36, 0xa7, 0x25, 0x16, 0x97, 0x5d, 0xe, 0xa, \r
-       0x8a, 0x28, 0xaf, 0xc8, 0xcf, 0x99, 0xa, 0x28, 0xa9, 0x2d, \r
-       0xe0, 0x7b, 0xab, 0x88, 0xa1, 0x88, 0x6e, 0x92, 0x46, 0x8, \r
-       0xab, 0xea, 0x49, 0xc0, 0x14, 0xd2, 0xbe, 0x88, 0xf, 0x79, \r
-       0xfd, 0x9c, 0xfc, 0x18, 0xb1, 0x5a, 0x5c, 0x78, 0x92, 0xe1, \r
-       0x33, 0x24, 0xa5, 0xa0, 0xb6, 0xc8, 0xe8, 0xa3, 0xef, 0x30, \r
-       0xfa, 0x9e, 0x3f, 0x3, 0xeb, 0x5e, 0xdd, 0x59, 0xbe, 0x1b, \r
-       0xd1, 0x62, 0xf0, 0xee, 0x83, 0x61, 0xa6, 0xc2, 00, 0x4b, \r
-       0x68, 0x56, 0x3c, 0x8e, 0xe4, 0xe, 0x4f, 0xe2, 0x72, 0x7f, \r
-       0x1a, 0xd2, 0xaf, 0xdb, 0xb2, 0xfc, 0x2a, 0xc1, 0x61, 0xa1, \r
-       0x45, 0x6e, 0x96, 0xbe, 0xbd, 0x4f, 0xae, 0xa1, 0x4d, 0x52, \r
-       0xa6, 0xa2, 0x14, 0x51, 0x45, 0x7a, 0x26, 0xe1, 0x45, 0x14, \r
-       0x50, 0x1, 0x59, 0x1e, 0x2e, 0xd3, 0xd7, 0x56, 0xf0, 0xb6, \r
-       0xad, 0x66, 0xe3, 0x2b, 0x35, 0xac, 0x8b, 0xf8, 0xed, 0x38, \r
-       0xfd, 0x6b, 0x5e, 0xaa, 0x6a, 0xf2, 0x88, 0x34, 0x9b, 0xd9, \r
-       0x1b, 0xee, 0xa4, 0xe, 0xc7, 0xf0, 0x53, 0x59, 0xd5, 0x4a, \r
-       0x50, 0x92, 0x7b, 0x59, 0x93, 0x25, 0x78, 0xb4, 0xcf, 0x87, \r
-       0xe8, 0xa2, 0x8a, 0xfc, 0xc, 0xf8, 0xc0, 0xa2, 0x8a, 0x28, \r
-       0x3, 0x7b, 0xc0, 0x57, 0x26, 0xd3, 0xc6, 0xda, 0x14, 0xa0, \r
-       0xe3, 0x17, 0xb0, 0x8f, 0xc0, 0xb8, 0x7, 0xf9, 0xd7, 0xd9, \r
-       0xb5, 0xf1, 0x67, 0x83, 0x62, 0x33, 0x78, 0xbb, 0x44, 0x45, \r
-       0xea, 0xd7, 0xb0, 0x8f, 0xfc, 0x7c, 0x57, 0xda, 0x75, 0xfa, \r
-       0x47, 0xa, 0xb7, 0xec, 0x6a, 0xae, 0x97, 0x5f, 0x91, 0xee, \r
-       0xe5, 0xbf, 0xc, 0x8c, 0x3f, 0x1c, 0x86, 0x6f, 0x5, 0xeb, \r
-       0xa1, 0x33, 0xbb, 0xec, 0x33, 0x63, 0x1f, 0xee, 0x1a, 0xf8, \r
-       0xc2, 0xbe, 0xe6, 0xb9, 0xb7, 0x4b, 0xbb, 0x69, 0x60, 0x90, \r
-       0x6e, 0x8e, 0x54, 0x28, 0xc0, 0xf7, 0x4, 0x60, 0xd7, 0xc5, \r
-       0x9e, 0x25, 0xd0, 0xa7, 0xf0, 0xd6, 0xbd, 0x7d, 0xa6, 0x5c, \r
-       0x29, 0x59, 0x2d, 0xe5, 0x28, 0x9, 0x1f, 0x79, 0x7f, 0x85, \r
-       0xbf, 0x11, 0x83, 0xf8, 0xd7, 0x37, 0x15, 0x52, 0x95, 0xe9, \r
-       0x55, 0xe9, 0xaa, 0x23, 0x32, 0x8b, 0xbc, 0x64, 0x66, 0x51, \r
-       0x45, 0x15, 0xf0, 0x7, 0x8a, 0x14, 0xaa, 0xc5, 0x18, 0x32, \r
-       0x92, 0x18, 0x1c, 0x82, 0x3b, 0x52, 0x51, 0x40, 0x1f, 0x49, \r
-       0xfc, 0x39, 0xf8, 0xe5, 0xa6, 0x6b, 0x16, 0x30, 0x59, 0x6b, \r
-       0x93, 0xae, 0x9f, 0xa9, 0x46, 0xa1, 0xc, 0xf2, 0x9c, 0x45, \r
-       0x37, 0x6c, 0xe7, 0xf8, 0x4f, 0xa8, 0x3f, 0x85, 0x7a, 0xac, \r
-       0x53, 0x47, 0x3c, 0x6b, 0x24, 0x4e, 0xb2, 0x46, 0xc3, 0x21, \r
-       0x90, 0xe4, 0x11, 0xf5, 0xaf, 0x85, 0xeb, 0x63, 0x43, 0xf1, \r
-       0x86, 0xb7, 0xe1, 0xa3, 0xff, 00, 0x12, 0xcd, 0x4e, 0xe6, \r
-       0xd1, 0x7f, 0xe7, 0x9a, 0x3e, 0x50, 0xff, 00, 0xc0, 0x4f, \r
-       0x1f, 0xa5, 0x7d, 0xbe, 0xb, 0x89, 0xaa, 0x52, 0x8a, 0x86, \r
-       0x26, 0x3c, 0xd6, 0xea, 0xb7, 0xff, 00, 0x83, 0xf8, 0x1e, \r
-       0xbd, 0x2c, 0xc2, 0x51, 0x56, 0xa8, 0xae, 0x7d, 0xa7, 0x45, \r
-       0x7c, 0xdf, 0xa0, 0xfe, 0xd1, 0xda, 0xed, 0x8e, 0xd4, 0xd4, \r
-       0xed, 0x2d, 0xf5, 0x38, 0xc7, 0x56, 0x5f, 0xdd, 0x49, 0xf9, \r
-       0x8c, 0x8f, 0xd2, 0xbb, 0xed, 0x13, 0xf6, 0x87, 0xf0, 0xd6, \r
-       0xa4, 0xc1, 0x2f, 0x52, 0xe7, 0x4b, 0x73, 0xfc, 0x52, 0xa6, \r
-       0xf4, 0xfc, 0xd7, 0x27, 0xf3, 0x15, 0xf5, 0x74, 0x33, 0xcc, \r
-       0x5, 0x7f, 0xf9, 0x79, 0xca, 0xfc, 0xf4, 0xff, 00, 0x81, \r
-       0xf8, 0x9e, 0x8c, 0x31, 0x94, 0x67, 0xd6, 0xde, 0xa7, 0xa9, \r
-       0x51, 0x59, 0xba, 0x3f, 0x89, 0x34, 0xaf, 0x10, 0x45, 0xe6, \r
-       0x69, 0xba, 0x85, 0xbd, 0xea, 0xf7, 0xf2, 0x64, 0xc, 0x47, \r
-       0xd4, 0x75, 0x15, 0xa5, 0x5e, 0xe4, 0x65, 0x19, 0xae, 0x68, \r
-       0xbb, 0xa3, 0xb1, 0x34, 0xd5, 0xd0, 0x51, 0x45, 0x15, 0x43, \r
-       0xa, 0x28, 0xa2, 0x80, 0xa, 0x28, 0xa2, 0x80, 0xa, 0xf2, \r
-       0xf, 0xda, 0x1e, 0xeb, 0xca, 0xd0, 0x36, 0xe7, 0xfe, 0x59, \r
-       0x9a, 0xf5, 0xfa, 0xf0, 0x6f, 0xda, 0x5e, 0xf8, 0x47, 0x61, \r
-       0xe5, 0x67, 0x91, 0x1d, 0x79, 0x19, 0xb4, 0xb9, 0x30, 0x75, \r
-       0x1f, 0x91, 0xc1, 0x8e, 0x97, 0x2e, 0x1e, 0x4c, 0xf9, 0x7, \r
-       0x53, 0x6f, 0x95, 0xcf, 0xb9, 0xaf, 0x34, 0xf0, 0x2d, 0x92, \r
-       0xeb, 0x9f, 0xb5, 0x7, 0xc3, 0x3b, 0x26, 0x1b, 0x81, 0xd7, \r
-       0xad, 0xe4, 0xc7, 0xfb, 0x84, 0xbf, 0xfe, 0xcb, 0x5e, 0x8d, \r
-       0xaa, 0x36, 0x22, 0x63, 0xec, 0x6b, 0x94, 0xfd, 0x9b, 0xec, \r
-       0xff, 00, 0xb6, 0x3f, 0x6c, 0xbf, 0x87, 0xf1, 0xe3, 0x70, \r
-       0x86, 0x7b, 0x9b, 0x93, 0xed, 0xb2, 0xda, 0x53, 0x9f, 0xcf, \r
-       0x15, 0xf2, 0xd9, 0x24, 0x7d, 0xf3, 0xf2, 0x3c, 0xb1, 0x7b, \r
-       0x4c, 0xe2, 0x97, 0x95, 0xd9, 0xfa, 0xcf, 0x45, 0x14, 0x57, \r
-       0xe8, 0x7, 0xed, 0x61, 0x45, 0x14, 0x50, 0x1, 0x5c, 0x3f, \r
-       0xc6, 0x8f, 0x18, 0xf, 0x4, 0x7c, 0x37, 0xd6, 0x35, 0x5, \r
-       0x62, 0xb7, 0xf, 0x17, 0xd9, 0xad, 0xf6, 0xf5, 0xf3, 0x1f, \r
-       0xe5, 0x53, 0xf8, 0x64, 0x9f, 0xc2, 0xbb, 0x8a, 0xf9, 0x5f, \r
-       0xf6, 0xbf, 0xf1, 0x87, 0xda, 0xb5, 0x6d, 0x2b, 0xc3, 0x31, \r
-       0x1f, 0x92, 0xd9, 0x3e, 0xd9, 0x39, 0xe7, 0xef, 0x36, 0x42, \r
-       0x8f, 0xcb, 0x27, 0xf1, 0xaf, 0x37, 0x31, 0xc4, 0x7d, 0x5b, \r
-       0xd, 0x39, 0xf5, 0xd9, 0x7a, 0xb3, 0xca, 0xcd, 0x31, 0x3f, \r
-       0x54, 0xc2, 0x4e, 0xa2, 0xdf, 0x65, 0xea, 0xff, 00, 0xab, \r
-       0x9f, 0x3e, 0x58, 0x5a, 0xbd, 0xe5, 0xd4, 0x30, 0x46, 0x37, \r
-       0x3b, 0xb0, 0x50, 0x7, 0xa9, 0xaf, 0xd0, 0x3f, 0x86, 0x9e, \r
-       0x19, 0x8f, 0xc2, 0x7e, 0xc, 0xd3, 0x6c, 0x11, 0x2, 0xb8, \r
-       0x88, 0x34, 0x9e, 0xec, 0x47, 0x35, 0xf2, 0x27, 0xec, 0xf7, \r
-       0xe1, 0x13, 0xe2, 0x9f, 0x1f, 0x5a, 0x97, 0x5c, 0xdb, 0xdb, \r
-       0x7e, 0xf5, 0xcf, 0xd3, 0xa5, 0x7d, 0xc4, 0xa0, 0x28, 00, \r
-       0x70, 0x7, 0x15, 0xf3, 0xdc, 0x3d, 0x87, 0xd2, 0x78, 0x87, \r
-       0xe8, 0xbf, 0x53, 0xc2, 0xe1, 0xcc, 0x37, 0x25, 0x39, 0x57, \r
-       0x7d, 0x74, 0x42, 0xd1, 0x45, 0x15, 0xf6, 0x67, 0xd9, 0x5, \r
-       0x14, 0x51, 0x40, 0x5, 0x7e, 0x55, 0x7f, 0xc1, 0x6d, 0x3c, \r
-       0x2b, 0xa8, 0x36, 0xa3, 0xf0, 0xc7, 0xc4, 0x81, 0x19, 0xb4, \r
-       0xa5, 0x8a, 0xef, 0x4f, 0x67, 0x1d, 0x12, 0x62, 0x52, 0x40, \r
-       0xf, 0xd5, 0x43, 0x7f, 0xdf, 0x26, 0xbf, 0x52, 0xb5, 0x4d, \r
-       0x5e, 0xc7, 0x43, 0xb3, 0x6b, 0xbd, 0x46, 0xf6, 0xde, 0xc2, \r
-       0xd5, 0x48, 0x56, 0x9e, 0xea, 0x55, 0x8d, 0x1, 0x27, 00, \r
-       0x16, 0x62, 0x7, 0x24, 0x81, 0x5e, 0x73, 0xf1, 0xc7, 0xe1, \r
-       0xf, 0x82, 0xff, 00, 0x69, 0xef, 0x86, 0x1a, 0x8f, 0x83, \r
-       0x35, 0xeb, 0x98, 0xee, 0xf4, 0xeb, 0xbd, 0xb2, 0xc5, 0x73, \r
-       0x63, 0x3a, 0x99, 0x6d, 0xa6, 0x5e, 0x52, 0x54, 0x23, 0x3c, \r
-       0x83, 0xdb, 0xa1, 0x4, 0x83, 0xc1, 0xa0, 0x4f, 0x53, 0xf9, \r
-       0xcd, 0xf0, 0xaf, 0x8a, 0xb5, 0x8f, 0x3, 0xf8, 0x8b, 0x4f, \r
-       0xd7, 0xb4, 0xd, 0x46, 0xe3, 0x49, 0xd6, 0x74, 0xf9, 0x44, \r
-       0xf6, 0xb7, 0xb6, 0xaf, 0xb6, 0x48, 0x9c, 0x74, 0x20, 0xfe, \r
-       0x9e, 0xe0, 0x90, 0x6b, 0xd8, 0x7e, 0x39, 0x7e, 0xda, 0xdf, \r
-       0x14, 0xbf, 0x68, 0xbf, 0x1, 0x68, 0xfe, 0x13, 0xf1, 0xce, \r
-       0xa9, 0x69, 0xa9, 0x58, 0x69, 0x97, 0x42, 0xf1, 0x27, 0x86, \r
-       0xd1, 0x60, 0x9a, 0x69, 0x2, 0x32, 0x3, 0x29, 0x5c, 0x2b, \r
-       0x60, 0x33, 0x74, 0x51, 0xc9, 0xaf, 0x44, 0xf8, 0xd9, 0xff, \r
-       00, 0x4, 0xbf, 0xf8, 0xd9, 0xf0, 0xa2, 0xfa, 0xea, 0x5d, \r
-       0x27, 0x44, 0x1e, 0x39, 0xd0, 0x91, 0xd8, 0xc5, 0x7d, 0xa1, \r
-       0xb6, 0xf9, 0x76, 0x67, 0x82, 0xf0, 0x1c, 0x38, 0x6c, 0x76, \r
-       0x50, 0xc3, 0xde, 0xbe, 0x79, 0xb8, 0xf8, 0x25, 0xf1, 0x12, \r
-       0xd2, 0xe4, 0xdb, 0xcd, 0xe0, 0x3f, 0x12, 0xc5, 0x38, 0x38, \r
-       0xf2, 0xdb, 0x48, 0xb8, 0xd, 0x9f, 0xa6, 0xca, 0xa2, 0x35, \r
-       0x3a, 0x5f, 0xd9, 0xdb, 0xf6, 0x95, 0xf1, 0x47, 0xec, 0xc5, \r
-       0xe2, 0xd, 0x5f, 0x5f, 0xf0, 0x7d, 0xa6, 0x96, 0xfa, 0xe5, \r
-       0xfd, 0x9f, 0xd8, 0x56, 0xf7, 0x51, 0xb7, 0x33, 0x1b, 0x68, \r
-       0xcb, 0x6, 0x6f, 0x2c, 0x6e, 0x3, 0x2c, 0x55, 0x73, 0x9c, \r
-       0xfd, 0xd1, 0x5c, 0xdf, 0xc5, 0x9f, 0x8d, 0x1e, 0x35, 0xf8, \r
-       0xe5, 0xe2, 0x63, 0xaf, 0xf8, 0xe3, 0xc4, 0x37, 0x7e, 0x20, \r
-       0xd4, 0x82, 0x94, 0x8d, 0xee, 0x8, 0x9, 0xa, 0x67, 0x3b, \r
-       0x23, 0x45, 0x1, 0x51, 0x7d, 0x94, 0xa, 0xf4, 0xdf, 0x86, \r
-       0x7f, 0xb0, 0x3f, 0xc7, 0x6f, 0x8a, 0x97, 0x31, 0x2e, 0x99, \r
-       0xe0, 0xd, 0x47, 0x4c, 0xb5, 0x7e, 0xb7, 0xba, 0xda, 0xfd, \r
-       0x86, 0x15, 0x1e, 0xa7, 0xcc, 0xc3, 0x1f, 0xc1, 0x4d, 0x7e, \r
-       0x8b, 0xfe, 0xc9, 0xff, 00, 0xf0, 0x4a, 0xf, 0xb, 0xfc, \r
-       0x27, 0xbd, 0xb2, 0xf1, 0x37, 0xc4, 0xbb, 0xb8, 0x3c, 0x65, \r
-       0xe2, 0x6b, 0x79, 0x16, 0x6b, 0x7d, 0x3e, 0x10, 0x46, 0x9d, \r
-       0x6a, 0xe3, 0x90, 0x48, 0x60, 0xc, 0xcc, 0xf, 0x76, 0x1, \r
-       0x78, 0x1f, 0x2f, 0x7a, 0x2, 0xcc, 0xf3, 0xaf, 0xf8, 0x25, \r
-       0x8f, 0xec, 0x3b, 0x79, 0xa4, 0xdd, 0xda, 0xfc, 0x65, 0xf1, \r
-       0xde, 0x9b, 0xf6, 0x79, 0xc, 0x64, 0xf8, 0x73, 0x4d, 0xba, \r
-       0x8c, 0x89, 0x13, 0x3c, 0x1b, 0xb7, 0x53, 0xd3, 0x23, 0x21, \r
-       0x7, 0x5e, 0x4b, 0x7a, 0x57, 0xea, 0x25, 0x22, 0xa8, 0x45, \r
-       0xa, 0xa0, 0x2a, 0x81, 0x80, 00, 0xc0, 0x2, 0xa2, 0xbc, \r
-       0xbb, 0x8e, 0xc6, 0xd2, 0x6b, 0x99, 0x9b, 0x64, 0x30, 0xa1, \r
-       0x91, 0xd8, 0xf6, 00, 0x64, 0xd4, 0xb7, 0x6d, 0x59, 0x7b, \r
-       0x23, 0xe7, 0x5f, 0xda, 0x33, 0xc4, 0x23, 0x50, 0xf1, 0x4d, \r
-       0xae, 0x97, 0x1b, 0xe6, 0x3b, 0x8, 0xb2, 0xe0, 0x1e, 0x3c, \r
-       0xc7, 0xe4, 0xff, 00, 0xe3, 0xa1, 0x7f, 0x3a, 0xf2, 0x4a, \r
-       0xbf, 0xaf, 0x6a, 0xb2, 0x6b, 0xba, 0xd5, 0xf6, 0xa1, 0x29, \r
-       0x26, 0x4b, 0x99, 0x9e, 0x53, 0x9e, 0xd9, 0x39, 0x3, 0xf0, \r
-       0x1c, 0x55, 0xa, 0xfc, 0x3b, 0x1f, 0x89, 0x78, 0xbc, 0x4c, \r
-       0xeb, 0x77, 0x7f, 0x87, 0x4f, 0xc0, 0xf9, 0x1a, 0xd5, 0x3d, \r
-       0xad, 0x47, 0x3e, 0xe1, 0x45, 0x14, 0x57, 0x1, 0x89, 0xdd, \r
-       0x7c, 0x28, 0xf8, 0x72, 0x9f, 0x10, 0xf5, 0x4b, 0xc8, 0xae, \r
-       0x66, 0x96, 0xda, 0xce, 0xda, 0x20, 0xcd, 0x24, 0x20, 0x67, \r
-       0x79, 0x3f, 0x28, 0xe4, 0x63, 0xb3, 0x7e, 0x55, 0xe8, 0xf3, \r
-       0x7e, 0xcc, 0x96, 0x4, 0x1f, 0x27, 0x5c, 0xb9, 0x43, 0xdb, \r
-       0x7c, 0x2a, 0xdf, 0xc8, 0x8a, 0xde, 0xf8, 0x1, 0xe1, 0xd6, \r
-       0xd1, 0xbc, 0xe, 0x2e, 0xe5, 0x5d, 0xb3, 0x6a, 0x32, 0x99, \r
-       0xf9, 0xeb, 0xb0, 0x70, 0xbf, 0xc8, 0x9f, 0xc6, 0xbd, 0x32, \r
-       0xbf, 0x50, 0xcb, 0x32, 0x5c, 0x2c, 0xf0, 0x70, 0x96, 0x22, \r
-       0x9d, 0xe4, 0xf5, 0xeb, 0xd7, 0x6f, 0xc0, 0xfa, 0x1c, 0x3e, \r
-       0x12, 0x9b, 0xa4, 0x9c, 0xd6, 0xac, 0xf9, 0xa7, 0xc5, 0x1f, \r
-       0xb3, 0xd6, 0xb7, 0xa2, 0x59, 0xc9, 0x75, 0xa7, 0xdc, 0xc7, \r
-       0xab, 0xa4, 0x63, 0x2d, 0x14, 0x68, 0x52, 0x5c, 0x7b, 0x2e, \r
-       0x48, 0x3f, 0x9e, 0x6b, 0xca, 0xd9, 0x4a, 0xb1, 0x56, 0x4, \r
-       0x10, 0x70, 0x41, 0xea, 0x2b, 0xee, 0xaa, 0xf9, 0x77, 0xe3, \r
-       0xd7, 0x85, 0xe2, 0xf0, 0xff, 00, 0x8d, 0x3e, 0xd3, 0x6c, \r
-       0x81, 0x20, 0xd4, 0x63, 0xfb, 0x41, 0x51, 0xd0, 0x49, 0x92, \r
-       0x1f, 0x1f, 0xa1, 0xfc, 0x6b, 0xc5, 0xcf, 0x32, 0x5a, 0x58, \r
-       0x3a, 0x4b, 0x11, 0x87, 0xd1, 0x6c, 0xd6, 0xff, 00, 0x33, \r
-       0x93, 0x17, 0x84, 0x8d, 0x28, 0xf3, 0xc3, 0x63, 0xcd, 0xa8, \r
-       0xa2, 0x8a, 0xf8, 0x93, 0xc9, 0xa, 0xf5, 0xdf, 0xd9, 0xbf, \r
-       0x5b, 0x7b, 0x5f, 0x14, 0xde, 0xe9, 0x85, 0xbf, 0x73, 0x77, \r
-       0x6f, 0xe6, 0x5, 0xff, 00, 0x6d, 0xf, 0x1f, 0xa1, 0x6a, \r
-       0xf2, 0x2a, 0xed, 0xbe, 0xc, 0x5d, 0x7d, 0x93, 0xe2, 0x5e, \r
-       0x8a, 0x73, 0x80, 0xee, 0xf1, 0x9f, 0xc5, 0x18, 0xf, 0xd7, \r
-       0x15, 0xea, 0x65, 0x75, 0x5d, 0x1c, 0x6d, 0x29, 0x2e, 0xe9, \r
-       0x7d, 0xfa, 0x1d, 0x18, 0x79, 0x72, 0xd6, 0x8b, 0xf3, 0x3e, \r
-       0xb5, 0xa2, 0x8a, 0x2b, 0xf6, 0xc3, 0xeb, 0x42, 0x8a, 0x28, \r
-       0xa0, 0x2, 0x8a, 0x28, 0xa0, 0x2, 0xbe, 0x61, 0xfd, 0xa0, \r
-       0xb5, 0xef, 0xed, 0x5f, 0x1d, 0x1b, 0x35, 0x6c, 0xc5, 0xa7, \r
-       0xc2, 0xb1, 0x63, 0xfd, 0xb6, 0xf9, 0x9b, 0xf9, 0xa8, 0xfc, \r
-       0x2b, 0xe9, 0xa9, 0xe7, 0x4b, 0x68, 0x24, 0x9a, 0x43, 0xb6, \r
-       0x38, 0xd4, 0xbb, 0x13, 0xd8, 0x1, 0x93, 0x5f, 0x14, 0xf8, \r
-       0x8f, 0x57, 0x6d, 0x7b, 0x5e, 0xd4, 0x35, 0x17, 0xce, 0x6e, \r
-       0xa7, 0x79, 0x70, 0x7b, 0x2, 0x78, 0x1f, 0x96, 0x2b, 0xe3, \r
-       0x38, 0x9f, 0x11, 0xc9, 0x86, 0x85, 0x15, 0xf6, 0x9f, 0xe0, \r
-       0xbf, 0xe0, 0xd8, 0xf2, 0x73, 0x19, 0xda, 0xa, 0x1d, 0xcc, \r
-       0xea, 0x28, 0xa2, 0xbf, 0x32, 0x3c, 00, 0xae, 0x8f, 0xe1, \r
-       0xd6, 0x8c, 0x75, 0xff, 00, 0x1b, 0xe8, 0xd6, 0x7b, 0x77, \r
-       0x23, 0x5c, 0x2b, 0xb8, 0xc7, 0xf0, 0x2f, 0xcc, 0xdf, 0xa0, \r
-       0x35, 0xce, 0x57, 0xb0, 0x7e, 0xcd, 0x9a, 0x3f, 0xda, 0x7c, \r
-       0x49, 0xa9, 0x6a, 0x2c, 0x32, 0xb6, 0xb6, 0xe2, 0x35, 0x3f, \r
-       0xed, 0x39, 0xff, 00, 0x5, 0x3f, 0x9d, 0x7a, 0x59, 0x6d, \r
-       0xf, 0xac, 0xe3, 0x29, 0xd2, 0xee, 0xff, 00, 0x5, 0xab, \r
-       0x37, 0xa1, 0xf, 0x69, 0x56, 0x31, 0x3e, 0x8b, 0xa2, 0x8a, \r
-       0x2b, 0xf6, 0xe3, 0xeb, 0x82, 0x8a, 0x28, 0xa0, 0x8, 0xee, \r
-       0x26, 0x5b, 0x6b, 0x79, 0x65, 0x73, 0x84, 0x8d, 0x4b, 0x13, \r
-       0xec, 0x6, 0x6b, 0xe2, 0x2d, 0x52, 0xf9, 0xf5, 0x3d, 0x4e, \r
-       0xee, 0xf2, 0x43, 0x97, 0xb8, 0x95, 0xe5, 0x6f, 0xab, 0x12, \r
-       0x7f, 0xad, 0x7d, 0x89, 0xe3, 0xa9, 0xda, 0xd7, 0xc1, 0x5a, \r
-       0xf4, 0xa8, 0x70, 0xc9, 0x63, 0x31, 0x7, 0xdf, 0x61, 0xaf, \r
-       0x8c, 0x6b, 0xf3, 0xce, 0x2a, 0xa8, 0xf9, 0xa9, 0x53, 0xf5, \r
-       0x7f, 0x91, 0xe1, 0xe6, 0x52, 0xd6, 0x31, 0xa, 0x28, 0xa2, \r
-       0xbe, 0x8, 0xf1, 0x82, 0xba, 0xbf, 0x85, 0x9a, 0x60, 0xd5, \r
-       0xbe, 0x20, 0xe8, 0x70, 0x30, 0xca, 0x2d, 0xc0, 0x95, 0xbe, \r
-       0x88, 0xb, 0x7f, 0xec, 0xb5, 0xca, 0x57, 0xa2, 0x7c, 0x4, \r
-       0x50, 0x7e, 0x24, 0xd9, 0x13, 0xd4, 0x45, 0x29, 0x1f, 0xf7, \r
-       0xc1, 0xaf, 0x43, 0x2f, 0x82, 0xa9, 0x8b, 0xa5, 0x17, 0xd6, \r
-       0x4b, 0xf3, 0x36, 0xa2, 0xb9, 0xaa, 0xc5, 0x79, 0xa3, 0xea, \r
-       0x7a, 0x28, 0xa2, 0xbf, 0x70, 0x3e, 0xbc, 0x28, 0xa2, 0x8a, \r
-       00, 0x28, 0xa2, 0x8a, 00, 0x2b, 0x95, 0xf8, 0xa3, 0xaa, \r
-       0xd, 0x1f, 0xe1, 0xfe, 0xb9, 0x71, 0x9c, 0x31, 0xb7, 0x68, \r
-       0x97, 0xfd, 0xe7, 0xf9, 0x47, 0xf3, 0xae, 0xaa, 0xbc, 0x67, \r
-       0xf6, 0x92, 0xf1, 0x1a, 0xdb, 0x68, 0xb6, 0x1a, 0x2a, 0x37, \r
-       0xef, 0x6e, 0xa4, 0xf3, 0xe4, 0x1e, 0x88, 0xbd, 0x3f, 0x36, \r
-       0x3f, 0xf8, 0xed, 0x79, 0x99, 0x9d, 0x75, 0x86, 0xc1, 0xd4, \r
-       0xa8, 0xfb, 0x69, 0xea, 0xf4, 0x47, 0x3e, 0x22, 0x7e, 0xce, \r
-       0x94, 0xa4, 0x7c, 0xf5, 0x45, 0x14, 0x57, 0xe2, 0x47, 0xc9, \r
-       0x5, 0x14, 0x51, 0x40, 0x1d, 0x6f, 0xc2, 0x7b, 0x3f, 0xb7, \r
-       0x7c, 0x45, 0xd0, 0xa3, 0xc6, 0x42, 0xdc, 0x9, 0xf, 0xfc, \r
-       0x4, 0x16, 0xfe, 0x95, 0xf5, 0xf5, 0x7c, 0xe3, 0xfb, 0x37, \r
-       0xe8, 0x7f, 0x6c, 0xf1, 0x45, 0xee, 0xa6, 0xcb, 0x94, 0xb2, \r
-       0x83, 0x62, 0x9f, 0xf6, 0xdc, 0xe3, 0xf9, 0x6, 0xfc, 0xeb, \r
-       0xe8, 0xea, 0xfd, 0x4f, 0x86, 0x68, 0xba, 0x78, 0x27, 0x37, \r
-       0xf6, 0x9b, 0x7f, 0x76, 0x87, 0xd1, 0x65, 0xf1, 0xb5, 0x2b, \r
-       0xf7, 0x61, 0x5e, 0x6b, 0xf1, 0x7f, 0xe1, 0x58, 0xf1, 0xbd, \r
-       0xa2, 0xdf, 0xd8, 0x5, 0x8f, 0x58, 0xb7, 0x42, 00, 0x3c, \r
-       0x9, 0xd7, 0xfb, 0xa4, 0xfa, 0xfa, 0x1f, 0xc3, 0xe9, 0xe9, \r
-       0x54, 0x57, 0xd1, 0xe2, 0x70, 0xd4, 0xf1, 0x74, 0x9d, 0x1a, \r
-       0xaa, 0xe9, 0x9d, 0xf5, 0x29, 0xc6, 0xac, 0x5c, 0x65, 0xb1, \r
-       0xf0, 0xdd, 0xed, 0x8d, 0xc6, 0x9b, 0x75, 0x25, 0xb5, 0xd4, \r
-       0x32, 0x5b, 0xdc, 0x46, 0x76, 0xbc, 0x52, 0x2e, 0xd6, 0x53, \r
-       0xee, 0x2a, 0xa, 0xfb, 0x17, 0xc6, 0x3f, 0xf, 0x34, 0x4f, \r
-       0x1c, 0x42, 0xa3, 0x52, 0xb6, 0xfd, 0xfa, 0xc, 0x25, 0xcc, \r
-       0x47, 0x6c, 0x8b, 0xf8, 0xf7, 0x1e, 0xc7, 0x22, 0xbc, 0x3f, \r
-       0xc5, 0x3f, 0xb3, 0xde, 0xbb, 0xa4, 0x34, 0x92, 0xe9, 0x4f, \r
-       0x1e, 0xaf, 0x6a, 0x39, 0xa, 0xe, 0xc9, 0x80, 0xff, 00, \r
-       0x74, 0xf0, 0x7f, 0x3, 0xf8, 0x57, 0xe6, 0x38, 0xee, 0x1f, \r
-       0xc5, 0x61, 0x5b, 0x95, 0x25, 0xcf, 0x1f, 0x2d, 0xfe, 0x6b, \r
-       0xfc, 0x8f, 0x9e, 0xad, 0x82, 0xa9, 0x4f, 0x58, 0xea, 0x8f, \r
-       0x2a, 0xa2, 0xac, 0x5f, 0x69, 0xf7, 0x5a, 0x65, 0xc3, 0x41, \r
-       0x79, 0x6f, 0x2d, 0xac, 0xcb, 0xd6, 0x39, 0x90, 0xab, 0xf, \r
-       0xc0, 0xd5, 0x7a, 0xf9, 0x86, 0x9c, 0x5d, 0x99, 0xe7, 0xec, \r
-       0x14, 0x51, 0x45, 0x20, 0xa, 0x28, 0xa2, 0x80, 0x25, 0xb5, \r
-       0xbb, 0x9e, 0xc6, 0x75, 0x9a, 0xda, 0x69, 0x2d, 0xe6, 0x5e, \r
-       0x56, 0x48, 0x9c, 0xab, 0xf, 0xa1, 0x15, 0xe9, 0x5e, 0x11, \r
-       0xf8, 0xfb, 0xaf, 0x68, 0x6e, 0x91, 0x6a, 0x64, 0x6b, 0x36, \r
-       0x9d, 0xf, 0x98, 0x42, 0xca, 0xbf, 0x46, 0xc7, 0x3f, 0x8e, \r
-       0x7e, 0xb5, 0xe6, 0x14, 0x57, 0x66, 0x1b, 0x19, 0x5f, 0x9, \r
-       0x2e, 0x6a, 0x13, 0x6b, 0xf2, 0xfb, 0xb6, 0x35, 0xa7, 0x56, \r
-       0x74, 0x9d, 0xe0, 0xec, 0x7d, 0x8f, 0xe0, 0xdf, 0x1f, 0xe8, \r
-       0xfe, 0x38, 0xb4, 0xf3, 0x74, 0xeb, 0x8f, 0xdf, 0x28, 0xfd, \r
-       0xe5, 0xb4, 0xbf, 0x2c, 0xa9, 0xf5, 0x1d, 0xc7, 0xb8, 0xe2, \r
-       0xba, 0x4a, 0xf8, 0x7b, 0x4b, 0xd5, 0x2e, 0xf4, 0x5d, 0x42, \r
-       0xb, 0xdb, 0x19, 0xda, 0xde, 0xea, 0x16, 0xdc, 0x92, 0x27, \r
-       0x50, 0x7f, 0xcf, 0x6a, 0xfa, 0xa3, 0xe1, 0x4f, 0xc4, 0x88, \r
-       0xbc, 0x7d, 0xa3, 0x91, 0x36, 0x23, 0xd5, 0x6d, 0x80, 0x17, \r
-       0x31, 0x81, 0x85, 0x6c, 0xf4, 0x75, 0xf6, 0x38, 0xfc, 0xf, \r
-       0xe1, 0x5f, 0xa4, 0xe5, 0x19, 0xdc, 0x71, 0xcf, 0xd8, 0xd6, \r
-       0x56, 0x9f, 0xe0, 0xff, 00, 0xe0, 0xf9, 0x1e, 0xf6, 0x17, \r
-       0x16, 0xab, 0x7b, 0x93, 0xd1, 0xfe, 0x67, 0x73, 0x45, 0x14, \r
-       0x57, 0xd5, 0x9e, 0x90, 0x51, 0x45, 0x14, 00, 0x57, 0xcc, \r
-       0xff, 00, 0xb4, 0xf5, 0xdf, 0xef, 0xd9, 0x33, 0xd1, 0x71, \r
-       0x5f, 0x4c, 0x57, 0xc9, 0xbf, 0xb4, 0xbd, 0xd1, 0x7d, 0x52, \r
-       0x55, 0xcf, 0xf1, 0x1a, 0xf9, 0xdc, 0xf6, 0x56, 0xc1, 0xb5, \r
-       0xdc, 0xf1, 0xb3, 0x69, 0x72, 0xe1, 0x64, 0x7c, 0xdf, 0xac, \r
-       0x36, 0xdb, 0x77, 0x3e, 0xd5, 0x4f, 0xf6, 0x27, 0xb6, 0xfe, \r
-       0xd1, 0xfd, 0xb2, 0xf4, 0xc7, 0x20, 0x37, 0xd9, 0x34, 0xab, \r
-       0xe9, 0xf9, 0xed, 0x95, 0x54, 0xcf, 0xfe, 0x3f, 0x53, 0x78, \r
-       0x81, 0xf6, 0xd9, 0xc8, 0x7f, 0xd9, 0x35, 0x77, 0xfe, 0x9, \r
-       0xe7, 0x69, 0xf6, 0xef, 0xda, 0xbb, 0x5c, 0xb9, 0xea, 0x2d, \r
-       0x3c, 0x3b, 0x3f, 0xe6, 0xd3, 0xc2, 0x3f, 0xa1, 0xaf, 0x27, \r
-       0x23, 0x8e, 0xb7, 0x3f, 0x34, 0xc8, 0x23, 0xcf, 0x9b, 0xa7, \r
-       0xd9, 0x33, 0xf4, 0xee, 0x8a, 0x28, 0xaf, 0xb8, 0x3f, 0x64, \r
-       0xa, 0x28, 0xa2, 0x80, 0x23, 0xb9, 0xb8, 0x8e, 0xd2, 0xde, \r
-       0x59, 0xe5, 0x60, 0x91, 0x44, 0xa5, 0xdd, 0x8f, 0x40, 00, \r
-       0xc9, 0x35, 0xf9, 0xe1, 0xe3, 0xcf, 0x13, 0xc9, 0xe3, 0x3f, \r
-       0x19, 0xea, 0xfa, 0xcb, 0x9c, 0x8b, 0xbb, 0x86, 0x68, 0xfd, \r
-       0xa3, 0x1c, 0x20, 0xff, 00, 0xbe, 0x40, 0xaf, 0xaf, 0x3f, \r
-       0x69, 0x7f, 0x18, 0x9f, 0xa, 0x7c, 0x33, 0xbb, 0x82, 0x17, \r
-       0xdb, 0x77, 0xaa, 0xb7, 0xd8, 0xa3, 0xf5, 0xda, 0xc0, 0x97, \r
-       0x3f, 0xf7, 0xc8, 0x3f, 0x98, 0xaf, 0x8d, 0x7c, 0x3d, 0xa5, \r
-       0x3e, 0xb3, 0xac, 0xd9, 0xd9, 0x46, 0x9, 0x69, 0xa4, 0x54, \r
-       00, 0x7b, 0x9a, 0xf8, 0x7e, 0x20, 0xc4, 0x39, 0x4e, 0x18, \r
-       0x78, 0xf4, 0xd7, 0xe6, 0xf6, 0x3e, 0xb, 0x88, 0x6b, 0xba, \r
-       0xb5, 0xa9, 0xe1, 0x21, 0xd3, 0x57, 0xea, 0xf6, 0xfe, 0xbc, \r
-       0xcf, 0xab, 0x3f, 0x65, 0x6f, 0x8, 0x7f, 0x65, 0x78, 0x5a, \r
-       0x6d, 0x5e, 0x58, 0xf6, 0xcd, 0x76, 0xc5, 0x54, 0x91, 0xfc, \r
-       0x22, 0xbd, 0xd6, 0xb2, 0xbc, 0x2d, 0xa2, 0xc7, 0xe1, 0xef, \r
-       0xf, 0xd8, 0xe9, 0xf1, 0x28, 0x55, 0x82, 0x20, 0xbc, 0xe, \r
-       0xfd, 0xeb, 0x56, 0xbe, 0xab, 0x5, 0x87, 0x58, 0x5c, 0x3c, \r
-       0x29, 0x76, 0x5f, 0x8f, 0x53, 0xec, 0xb0, 0x94, 0x16, 0x1e, \r
-       0x84, 0x69, 0x2e, 0x88, 0x28, 0xa2, 0x8a, 0xee, 0x3a, 0xc2, \r
-       0x8a, 0x28, 0xa0, 0xf, 0xcb, 0xbf, 0xf8, 0x2d, 0x1f, 0xc6, \r
-       0x4b, 0xfb, 0x3b, 0x6f, 0x5, 0xfc, 0x31, 0xb3, 0x73, 0x15, \r
-       0x8d, 0xea, 0x36, 0xb5, 0xa8, 0x60, 0x90, 0x65, 0xda, 0xc6, \r
-       0x38, 0x50, 0xf6, 0x20, 0x1d, 0xed, 0xf5, 0xb, 0xe9, 0x5f, \r
-       0x9b, 0x5f, 0xb, 0x34, 0xfd, 0x7b, 0xc5, 0x3e, 0x3e, 0xf0, \r
-       0xe7, 0x86, 0xb4, 0x3d, 0x52, 0xf3, 0x4f, 0xbc, 0xd5, 0xf5, \r
-       0x8, 0x2c, 0x22, 0x92, 0xda, 0x77, 0x8f, 0x61, 0x92, 0x40, \r
-       0x9b, 0xbe, 0x52, 0x3a, 0x67, 0x3f, 0x85, 0x7e, 0x9a, 0xff, \r
-       00, 0xc1, 0x49, 0xec, 0xfe, 0xd, 0xfe, 0xd2, 0xba, 0x1d, \r
-       0xa6, 0xa7, 0xe1, 0xbf, 0x8a, 0xfe, 0x12, 0xb7, 0xf8, 0x87, \r
-       0xe1, 0x7f, 0x36, 0xd9, 0x74, 0xfb, 0xbd, 0x52, 0x28, 0x56, \r
-       0xee, 0x2d, 0xdf, 0x3c, 0x5, 0x98, 0x80, 0xae, 0xac, 0x9, \r
-       0x5c, 0x9c, 0x64, 0xb0, 0x38, 0xce, 0x47, 0xe5, 0xa7, 0x85, \r
-       0xfc, 0x47, 0xa8, 0x78, 0xb, 0xc5, 0xfa, 0x56, 0xb9, 0xa6, \r
-       0xca, 0xb1, 0xea, 0x9a, 0x3d, 0xec, 0x77, 0x70, 0x48, 0xac, \r
-       0x1d, 0x44, 0x91, 0x38, 0x65, 0xe4, 0x1c, 0x30, 0xca, 0xf6, \r
-       0x38, 0x22, 0xa9, 0x10, 0xf7, 0x3f, 0xa6, 0x8f, 0x9, 0x78, \r
-       0x6a, 0xd7, 0xc1, 0xde, 0x17, 0xd2, 0xb4, 0x2b, 0x22, 0xe6, \r
-       0xd7, 0x4e, 0xb6, 0x8e, 0xd6, 0x36, 0x91, 0x8b, 0x3b, 0x4, \r
-       0x50, 0x37, 0x31, 0x3c, 0x92, 0x71, 0x92, 0x4f, 0x52, 0x6b, \r
-       0x5e, 0xbe, 0x30, 0xf8, 0x1b, 0xff, 00, 0x5, 0x54, 0xf8, \r
-       0x37, 0xf1, 0x2b, 0x43, 0xb4, 0x5f, 0x15, 0xea, 0xa7, 0xc0, \r
-       0x3e, 0x22, 0xd8, 0x5, 0xc5, 0xa6, 0xa6, 0x8c, 0xd6, 0xc5, \r
-       0xf1, 0xc9, 0x8e, 0x75, 0x5, 0x76, 0xfa, 0x6e, 0xda, 0x7d, \r
-       0xab, 0xd9, 0xad, 0x7f, 0x6d, 0x3f, 0x80, 0xf7, 0x87, 0x11, \r
-       0xfc, 0x5b, 0xf0, 0x88, 0x3f, 0xf4, 0xd3, 0x55, 0x89, 0x3f, \r
-       0xf4, 0x22, 0x2a, 0x4b, 0x3d, 0xa6, 0x8a, 0xf3, 0x1d, 0x3f, \r
-       0xf6, 0xa0, 0xf8, 0x3d, 0xab, 0x48, 0x12, 0xcb, 0xe2, 0x97, \r
-       0x83, 0xee, 0x9c, 0xf4, 0x58, 0xb5, 0xcb, 0x66, 0x3f, 0xfa, \r
-       0x1d, 0x77, 0x7a, 0xf, 0x89, 0xb4, 0x8f, 0x14, 0xda, 0x35, \r
-       0xd6, 0x8d, 0xaa, 0xd9, 0x6a, 0xd6, 0xaa, 0xdb, 0xc, 0xd6, \r
-       0x37, 0x9, 0x32, 0x6, 0xc6, 0x70, 0x4a, 0x92, 0x33, 0x82, \r
-       0x3f, 0x3a, 00, 0xd3, 0xaf, 0x36, 0xf8, 0xf9, 0xe2, 0x1f, \r
-       0xec, 0x6f, 0x2, 0x4b, 0x6b, 0x1c, 0x9b, 0x27, 0xd4, 0x24, \r
-       0x10, 00, 0xf, 0x3b, 0x3a, 0xbf, 0xe8, 0x31, 0xff, 00, \r
-       0x2, 0xaf, 0x49, 0xaf, 0x98, 0xff, 00, 0x68, 0x3f, 0x10, \r
-       0x7f, 0x6a, 0xf8, 0xdf, 0xec, 0x28, 0xfb, 0xa0, 0xd3, 0xe2, \r
-       0x11, 0xe0, 0x74, 0xde, 0xdf, 0x33, 0x7f, 0xec, 0xa3, 0xf0, \r
-       0xaf, 0x3, 0x3c, 0xc5, 0x7d, 0x57, 0x3, 0x36, 0xb7, 0x96, \r
-       0x8b, 0xe7, 0xff, 00, 0x2, 0xe7, 0x16, 0x32, 0xa7, 0xb3, \r
-       0xa2, 0xfc, 0xf4, 0x3c, 0xc2, 0x8a, 0x28, 0xaf, 0xc7, 0x8f, \r
-       0x97, 0xa, 0xb7, 0xa4, 0xe9, 0xb3, 0x6b, 0x3a, 0xa5, 0xa5, \r
-       0x8c, 00, 0xb4, 0xd7, 0x32, 0xac, 0x4a, 00, 0xee, 0x4e, \r
-       0x2a, 0xa5, 0x7a, 0x8f, 0xec, 0xf3, 0xa0, 0x1d, 0x4f, 0xc6, \r
-       0xad, 0x7e, 0xe9, 0x98, 0x74, 0xf8, 0x4b, 0xee, 0x23, 0x8f, \r
-       0x31, 0xbe, 0x55, 0x1f, 0x96, 0xe3, 0xf8, 0x57, 0x6e, 0xb, \r
-       0xe, 0xf1, 0x58, 0x98, 0x51, 0x5d, 0x5f, 0xe1, 0xd7, 0xf0, \r
-       0x35, 0xa5, 0xf, 0x69, 0x35, 0xe, 0xe7, 0xd2, 0x3a, 0x75, \r
-       0x8c, 0x7a, 0x66, 0x9f, 0x6d, 0x69, 0x8, 0xdb, 0x14, 0x11, \r
-       0xac, 0x48, 0x3d, 0x80, 0xc0, 0xfe, 0x55, 0x66, 0x8a, 0x2b, \r
-       0xf7, 0x24, 0x94, 0x55, 0x91, 0xf6, 0x9, 0x5b, 0x40, 0xaf, \r
-       0x11, 0xfd, 0xa6, 0xec, 0x43, 0x58, 0x68, 0x57, 0x9d, 0xd2, \r
-       0x59, 0x62, 0x3f, 0xf0, 0x20, 0xf, 0xfe, 0xcb, 0x5e, 0xdd, \r
-       0x5e, 0x4f, 0xfb, 0x48, 0xc3, 0xe6, 0x78, 0x26, 0xce, 0x4c, \r
-       0x7f, 0xab, 0xbe, 0x43, 0xf9, 0xa3, 0x8a, 0xf1, 0xb3, 0xa8, \r
-       0x73, 0xe5, 0xf5, 0x57, 0x95, 0xfe, 0xe7, 0x73, 0x93, 0x16, \r
-       0xaf, 0x42, 0x47, 0xcd, 0x94, 0x51, 0x45, 0x7e, 0x32, 0x7c, \r
-       0xa8, 0x56, 0xc7, 0x83, 0x6f, 0x8e, 0x9b, 0xe2, 0xdd, 0x1a, \r
-       0xe8, 0x1c, 0x79, 0x57, 0x71, 0x31, 0x3e, 0xdb, 0x86, 0x7f, \r
-       0x4a, 0xc7, 0xa7, 0x47, 0x21, 0x86, 0x45, 0x91, 0x7e, 0xf2, \r
-       0x90, 0xc3, 0xf0, 0xad, 0x29, 0xcf, 0xd9, 0xce, 0x33, 0x5d, \r
-       0x1d, 0xc7, 0x17, 0x66, 0x99, 0xf7, 0x4d, 0x15, 0x5b, 0x4c, \r
-       0xb9, 0x17, 0xba, 0x75, 0xad, 0xc0, 0xe9, 0x2c, 0x49, 0x20, \r
-       0xfc, 0x40, 0x35, 0x66, 0xbf, 0x7b, 0x4e, 0xe9, 0x34, 0x7d, \r
-       0x9a, 0xd4, 0x28, 0xa2, 0x8a, 0x63, 0xa, 0x28, 0xa2, 0x80, \r
-       0x38, 0xbf, 0x8c, 0x3a, 0xc8, 0xd1, 0x3e, 0x1e, 0x6a, 0xd2, \r
-       0x6, 0xdb, 0x24, 0xf1, 0xfd, 0x99, 0x30, 0x79, 0x25, 0xce, \r
-       0xe, 0x3f, 0xc, 0x9f, 0xc2, 0xbe, 0x48, 0xaf, 0x75, 0xfd, \r
-       0xa6, 0x35, 0xa3, 0x9d, 0x1f, 0x49, 0x46, 0xf9, 0x7e, 0x7b, \r
-       0x99, 0x14, 0x7f, 0xdf, 0x2b, 0xff, 00, 0xb3, 0x57, 0x85, \r
-       0x57, 0xe5, 0x1c, 0x47, 0x88, 0xf6, 0xd8, 0xde, 0x45, 0xb4, \r
-       0x12, 0x5f, 0xaf, 0xea, 0x7c, 0xde, 0x3e, 0x7c, 0xd5, 0xad, \r
-       0xd8, 0x28, 0xa2, 0x8a, 0xf9, 0x63, 0xce, 0xa, 0xfa, 0x7b, \r
-       0xf6, 0x7d, 0xd0, 0xff, 00, 0xb2, 0xfc, 0x8, 0x2e, 0xd9, \r
-       0x71, 0x2d, 0xfc, 0xcd, 0x2e, 0x48, 0xe7, 0x68, 0xf9, 0x57, \r
-       0xf9, 0x13, 0xf8, 0xd7, 0xcc, 0x71, 0x44, 0xd3, 0x4a, 0x91, \r
-       0xa0, 0x2c, 0xee, 0x42, 0xa8, 0x1d, 0xc9, 0xe9, 0x5f, 0x6b, \r
-       0x78, 0x67, 0x49, 0x5d, 0xb, 0xc3, 0xda, 0x6e, 0x9c, 0xbf, \r
-       0xf2, 0xed, 0x6e, 0x91, 0x1f, 0x72, 0x14, 0x64, 0xfe, 0x75, \r
-       0xf6, 0x9c, 0x2f, 0x43, 0x9f, 0x11, 0x3a, 0xcf, 0xec, 0xaf, \r
-       0xc5, 0xff, 00, 0xc0, 0x3d, 0x5c, 0xbe, 0x17, 0xa8, 0xe5, \r
-       0xd8, 0xd3, 0xa2, 0x8a, 0x2b, 0xf4, 0xc3, 0xe8, 0x2, 0x8a, \r
-       0x28, 0xa0, 0xc, 0x3f, 0x1c, 0xdb, 0xb5, 0xd7, 0x82, 0xf5, \r
-       0xd8, 0x50, 0x65, 0xde, 0xc6, 0x65, 00, 0x7a, 0xec, 0x35, \r
-       0xf1, 0x87, 0x5a, 0xfb, 0xa2, 0x58, 0x96, 0x78, 0x9e, 0x37, \r
-       0x19, 0x47, 0x52, 0xa4, 0x1e, 0xe0, 0xd7, 0xc4, 0xfe, 0x21, \r
-       0xd2, 0x5f, 0x42, 0xd7, 0x75, 0xd, 0x3a, 0x40, 0x77, 0x5b, \r
-       0x4e, 0xf1, 0x73, 0xdc, 0x3, 0xc1, 0xfc, 0x46, 0xd, 0x7e, \r
-       0x7d, 0xc5, 0x54, 0x9d, 0xe9, 0x55, 0xe9, 0xaa, 0xfd, 0x4f, \r
-       0x13, 0x32, 0x8e, 0xb1, 0x91, 0x9f, 0x45, 0x14, 0x57, 0xc0, \r
-       0x1e, 0x28, 0x57, 0x5f, 0xf0, 0x97, 0x55, 0x5d, 0x1f, 0xe2, \r
-       0x1e, 0x8b, 0x33, 0x9c, 0x23, 0xcd, 0xe4, 0x31, 0x3f, 0xed, \r
-       0x82, 0xa3, 0xf5, 0x22, 0xb9, 0xa, 0x74, 0x52, 0xbc, 0x32, \r
-       0xa4, 0x91, 0xb1, 0x57, 0x42, 0x19, 0x58, 0x75, 0x4, 0x74, \r
-       0x35, 0xbd, 0xa, 0xae, 0x85, 0x58, 0x55, 0x5f, 0x65, 0xa7, \r
-       0xf7, 0x15, 0x9, 0x72, 0x49, 0x4b, 0xb1, 0xf7, 0x4d, 0x15, \r
-       0xcb, 0x7c, 0x38, 0xf1, 0xb4, 0x1e, 0x39, 0xf0, 0xcd, 0xbd, \r
-       0xea, 0xb2, 0xad, 0xda, 0xf, 0x2e, 0xe6, 0x10, 0x79, 0x47, \r
-       0x1f, 0xd0, 0xf5, 0x1f, 0x5a, 0xea, 0x6b, 0xf7, 0x3a, 0x35, \r
-       0x61, 0x5e, 0x9c, 0x6a, 0xd3, 0x77, 0x4f, 0x53, 0xec, 0x63, \r
-       0x25, 0x38, 0xa9, 0x47, 0x66, 0x14, 0x51, 0x45, 0x6c, 0x50, \r
-       0x51, 0x45, 0x23, 0x30, 0x45, 0x2c, 0xc4, 0x2a, 0x81, 0x92, \r
-       0x4f, 0x41, 0x40, 0x11, 0xdd, 0x5d, 0x45, 0x63, 0x6d, 0x2d, \r
-       0xc4, 0xf2, 0x2c, 0x50, 0x44, 0x85, 0xdd, 0xd8, 0xe0, 0x2a, \r
-       0x81, 0x92, 0x4d, 0x7c, 0x79, 0xf1, 0x7, 0xc5, 0xaf, 0xe3, \r
-       0x5f, 0x15, 0x5e, 0x6a, 0x64, 0x15, 0x85, 0x8f, 0x97, 0x2, \r
-       0x1f, 0xe1, 0x8d, 0x78, 0x5f, 0xcf, 0xaf, 0xd4, 0x9a, 0xef, \r
-       0xfe, 0x36, 0x7c, 0x58, 0x4d, 0x74, 0xbe, 0x83, 0xa3, 0xcd, \r
-       0xba, 0xc1, 0x1b, 0xfd, 0x22, 0xe5, 0x1b, 0x89, 0x88, 0xfe, \r
-       0x11, 0xfe, 0xc8, 0xf5, 0xee, 0x7d, 0xba, 0xf8, 0xed, 0x7e, \r
-       0x63, 0xc4, 0x39, 0x9c, 0x71, 0x33, 0x58, 0x6a, 0x2e, 0xf1, \r
-       0x8e, 0xef, 0xbb, 0xff, 00, 0x80, 0x7c, 0xf6, 0x3b, 0x10, \r
-       0xaa, 0x3f, 0x67, 0x1d, 0x90, 0x51, 0x45, 0x15, 0xf1, 0xa7, \r
-       0x96, 0x14, 0x51, 0x5d, 0x67, 0xc3, 0x2f, 0x6, 0x3f, 0x8d, \r
-       0xfc, 0x57, 0x6d, 0x66, 0xca, 0xdf, 0x63, 0x8f, 0xf7, 0xd7, \r
-       0x2e, 0x7, 0x44, 0x1d, 0xbf, 0x13, 0x81, 0xf8, 0xfb, 0x56, \r
-       0xd4, 0x68, 0xcf, 0x11, 0x52, 0x34, 0xa9, 0xad, 0x5b, 0xb1, \r
-       0x51, 0x8b, 0x9c, 0x94, 0x56, 0xec, 0xf7, 0xbf, 0x81, 0x7e, \r
-       0x17, 0x6f, 0xe, 0xf8, 0x1e, 0x19, 0xa6, 0x5d, 0xb7, 0x3a, \r
-       0x83, 0x7d, 0xa9, 0x81, 0x1c, 0x85, 0x20, 0x4, 0x1f, 0x90, \r
-       0xcf, 0xe3, 0x5e, 0x89, 0x4d, 0x8e, 0x35, 0x8a, 0x35, 0x44, \r
-       0x50, 0xa8, 0xa0, 0x28, 0x51, 0xd0, 0xa, 0x75, 0x7e, 0xe3, \r
-       0x86, 0xa1, 0x1c, 0x2d, 0x18, 0x51, 0x8e, 0xd1, 0x56, 0x3e, \r
-       0xbe, 0x9c, 0x15, 0x38, 0x28, 0x2e, 0x81, 0x45, 0x14, 0x57, \r
-       0x49, 0xa0, 0x51, 0x45, 0x14, 0x1, 0x53, 0x51, 0xd2, 0x2c, \r
-       0x75, 0x78, 0x4c, 0x37, 0xd6, 0x70, 0x5e, 0x44, 0x7a, 0xa4, \r
-       0xf1, 0x87, 0x1f, 0xad, 0x79, 0xf6, 0xbf, 0xfb, 0x3f, 0xf8, \r
-       0x63, 0x57, 0x2d, 0x25, 0xa2, 0xcf, 0xa5, 0x4a, 0x7f, 0xe7, \r
-       0xdd, 0xf2, 0x99, 0xff, 00, 0x75, 0xb3, 0xfa, 0x11, 0x5e, \r
-       0x99, 0x45, 0x72, 0x57, 0xc1, 0xe1, 0xf1, 0x2a, 0xd5, 0xa0, \r
-       0xa5, 0xfd, 0x77, 0x32, 0x9d, 0x28, 0x54, 0xf8, 0xd5, 0xcf, \r
-       0x9b, 0x3c, 0x45, 0xfb, 0x3a, 0xeb, 0xba, 0x68, 0x69, 0x34, \r
-       0xbb, 0x88, 0x75, 0x58, 0x87, 0x44, 0xff, 00, 0x55, 0x26, \r
-       0x3e, 0x84, 0xe0, 0xfe, 0x75, 0xe6, 0xba, 0xb6, 0x87, 0xa8, \r
-       0x68, 0x37, 0x3f, 0x67, 0xd4, 0x6c, 0xa7, 0xb2, 0x9b, 0xfb, \r
-       0xb3, 0x21, 0x5c, 0xfd, 0x3d, 0x7f, 0xa, 0xfb, 0x76, 0xa9, \r
-       0xea, 0x9a, 0x45, 0x96, 0xb7, 0x68, 0xf6, 0xb7, 0xf6, 0xb1, \r
-       0x5d, 0xdb, 0xb7, 0x58, 0xe5, 0x50, 0xc3, 0xff, 00, 0xad, \r
-       0x5f, 0x2f, 0x8a, 0xe1, 0x8c, 0x3d, 0x4b, 0xbc, 0x3c, 0x9c, \r
-       0x5f, 0x6d, 0xd7, 0xf9, 0x9e, 0x75, 0x4c, 0xbe, 0x12, 0xd6, \r
-       0xe, 0xc7, 0xc4, 0x14, 0x57, 0xa5, 0x7c, 0x60, 0xf8, 0x56, \r
-       0xbe, 0x5, 0xb8, 0x8a, 0xfb, 0x4f, 0x2f, 0x26, 0x93, 0x72, \r
-       0xe5, 0x70, 0xfc, 0x98, 0x5f, 0xa8, 0x5c, 0xf7, 0x4, 0x67, \r
-       0x7, 0xda, 0xbc, 0xd6, 0xbf, 0x3c, 0xc5, 0x61, 0xaa, 0xe0, \r
-       0xea, 0xba, 0x35, 0x55, 0x9a, 0x3c, 0x4a, 0x94, 0xe5, 0x4a, \r
-       0x4e, 0x32, 0xdc, 0x28, 0xa2, 0x8a, 0xe5, 0x33, 0xa, 0xea, \r
-       0x7e, 0x19, 0x78, 0x96, 0x5f, 0xb, 0x78, 0xd3, 0x4d, 0xba, \r
-       0x46, 0x22, 0x19, 0x25, 0x10, 0x4e, 0xb9, 0xe1, 0xa3, 0x62, \r
-       0x1, 0xcf, 0xd3, 0x83, 0xf8, 0x57, 0x2d, 0x4a, 0xac, 0x55, \r
-       0x81, 0x7, 0x4, 0x1c, 0x82, 0x2b, 0x6a, 0x35, 0x65, 0x42, \r
-       0xac, 0x6a, 0xc7, 0x74, 0xee, 0x54, 0x24, 0xe1, 0x25, 0x25, \r
-       0xd0, 0xfb, 0xaa, 0x8a, 0x82, 0xc5, 0xda, 0x5b, 0x2b, 0x77, \r
-       0x6e, 0x19, 0xa3, 0x52, 0x7e, 0xb8, 0xa9, 0xeb, 0xf7, 0x94, \r
-       0xee, 0xae, 0x7d, 0x9a, 0xd4, 0x28, 0xa2, 0x8a, 0x60, 0x21, \r
-       0x38, 0x15, 0xf1, 0xaf, 0xed, 0xf, 0x77, 0xe7, 0x6b, 0xb2, \r
-       0x8f, 0x57, 0x3f, 0xce, 0xbe, 0xc8, 0x94, 0xed, 0x89, 0xcf, \r
-       0xa2, 0x93, 0x5f, 0x10, 0x7c, 0x73, 0xb9, 0xf3, 0xbc, 0x45, \r
-       0x2f, 0xfb, 0xed, 0xfc, 0xeb, 0xe5, 0x78, 0x86, 0x56, 0xc3, \r
-       0xc6, 0x3d, 0xd9, 0xf3, 0xb9, 0xec, 0xb9, 0x70, 0xac, 0xf1, \r
-       0x1f, 0x14, 0xc9, 0xb2, 0xc2, 0x6f, 0xf7, 0x4d, 0x76, 0x9f, \r
-       0xf0, 0x4c, 0x9d, 0x3c, 0x5d, 0x7c, 0x65, 0xf8, 0x91, 0xa9, \r
-       0x11, 0x9f, 0xb3, 0xe9, 0x96, 0xd6, 0xe1, 0xb1, 0xfd, 0xf9, \r
-       0x59, 0x8f, 0xfe, 0x81, 0x5c, 0xf, 0x8d, 0x25, 0xd9, 0xa6, \r
-       0x4d, 0xf4, 0x35, 0xeb, 0xff, 00, 0xf0, 0x4b, 0x2b, 0xd, \r
-       0xf7, 0x3f, 0x15, 0x35, 0x22, 0x3e, 0xfd, 0xcd, 0x95, 0xba, \r
-       0x9f, 0xf7, 0x52, 0x46, 0x3f, 0xfa, 0x10, 0xac, 0x72, 0x38, \r
-       0xe9, 0x73, 0xe1, 0xb8, 0x5e, 0x3c, 0xd9, 0x95, 0x49, 0x76, \r
-       0x47, 0xdf, 0x74, 0x51, 0x45, 0x7d, 0x81, 0xfa, 0xd8, 0x51, \r
-       0x45, 0x66, 0x78, 0x9b, 0x5d, 0x83, 0xc3, 0x1e, 0x1e, 0xd4, \r
-       0x75, 0x6b, 0x93, 0x88, 0x6c, 0xe0, 0x79, 0xd8, 0x67, 0x19, \r
-       0xda, 0x33, 0x8f, 0xa9, 0xe9, 0x4a, 0x4d, 0x45, 0x36, 0xfa, \r
-       0x13, 0x29, 0x28, 0xa7, 0x27, 0xb2, 0x3e, 0x49, 0xfd, 0xaa, \r
-       0xfc, 0x62, 0xda, 0xef, 0xc4, 0x25, 0xd1, 0xe3, 0x72, 0x6d, \r
-       0x34, 0x88, 0x82, 0x15, 0xc8, 0x20, 0xca, 0xe0, 0x33, 0x1f, \r
-       0xcb, 0x68, 0xfc, 0xd, 0x27, 0xec, 0xc1, 0xe1, 0xf, 0xed, \r
-       0xcf, 0x1b, 0xad, 0xfc, 0xd1, 0xee, 0xb7, 0xb2, 0x52, 0xf9, \r
-       0x23, 0x8d, 0xdd, 0xab, 0xc8, 0xf5, 0x6d, 0x52, 0xe3, 0x5e, \r
-       0xd5, 0xef, 0x35, 0x1b, 0xa7, 0x32, 0x5c, 0xdd, 0xcc, 0xd3, \r
-       0x48, 0xc7, 0xd5, 0x8e, 0x6b, 0xec, 0x9f, 0xd9, 0xaf, 0xc2, \r
-       0x3f, 0xf0, 0x8f, 0x78, 0x12, 0x3b, 0xb9, 0x13, 0x6d, 0xc5, \r
-       0xe3, 0x17, 0x39, 0xfe, 0xef, 0x6a, 0xfc, 0xef, 0x8, 0x9e, \r
-       0x63, 0x99, 0x7b, 0x49, 0x6d, 0x7b, 0xfc, 0x96, 0xdf, 0xa1, \r
-       0xf9, 0xd6, 0x5c, 0x9e, 0x63, 0x99, 0x4b, 0x11, 0x2d, 0x93, \r
-       0xbf, 0xf9, 0x1e, 0xbb, 0x45, 0x14, 0x57, 0xe8, 0xa7, 0xe8, \r
-       0xe1, 0x45, 0x79, 0xef, 0xed, 0x1, 0xf1, 0x6a, 0xcb, 0xe0, \r
-       0x67, 0xc1, 0xbf, 0x15, 0xf8, 0xde, 0xf9, 0x94, 0x2e, 0x93, \r
-       0x62, 0xf2, 0xc2, 0x8d, 0xd2, 0x59, 0xc8, 0xdb, 0xa, 0x7f, \r
-       0xc0, 0x9c, 0xa8, 0xfc, 0x6b, 0xf2, 0x66, 0xc3, 0xfe, 0xb, \r
-       0x29, 0xf1, 0xba, 0xdd, 0x97, 0xed, 0x5a, 0x2f, 0x83, 0xae, \r
-       0xd0, 0x75, 0x2, 0xc2, 0xe2, 0x32, 0x7f, 0x11, 0x39, 0xfe, \r
-       0x54, 0xa, 0xf6, 0x3f, 0x6a, 0x2b, 0xc7, 0x7f, 0x6b, 0xaf, \r
-       0x8c, 0xf0, 0x7c, 0x4, 0xfd, 0x9e, 0xbc, 0x63, 0xe2, 0xe7, \r
-       0x90, 0x2d, 0xe4, 0x36, 0x8d, 0x6d, 0x60, 0xb9, 0xc1, 0x7b, \r
-       0xa9, 0x7f, 0x77, 0x10, 0x1f, 0x46, 0x6d, 0xc7, 0xd9, 0x4d, \r
-       0x5f, 0xfd, 0x98, 0xbe, 0x21, 0x78, 0xaf, 0xe2, 0xc7, 0xc1, \r
-       0x1f, 0xc, 0xf8, 0xc3, 0xc6, 0x5a, 0x5d, 0x96, 0x8b, 0xac, \r
-       0x6b, 0x50, 0x7d, 0xb1, 0x6c, 0x6c, 0x43, 0xec, 0x8e, 0x6, \r
-       0x3f, 0xba, 0x27, 0x79, 0x27, 0x2c, 0xb8, 0x6f, 0xf8, 0x10, \r
-       0x15, 0x6f, 0xe3, 0x9f, 0xec, 0xf9, 0xe0, 0xaf, 0xda, 0x37, \r
-       0xc3, 0x16, 0x9e, 0x1e, 0xf1, 0xd5, 0x85, 0xce, 0xa5, 0xa4, \r
-       0xdb, 0x5c, 0x8b, 0xc8, 0xe0, 0xb7, 0xbc, 0x96, 0xdf, 0xf7, \r
-       0xa1, 0x59, 0x43, 0x13, 0x1b, 0x2, 0x70, 0x19, 0xb8, 0x3c, \r
-       0x73, 0x40, 0xcf, 0xe6, 0xc6, 0x59, 0x5e, 0x79, 0x5e, 0x49, \r
-       0x18, 0xbc, 0x8e, 0x4b, 0x33, 0x31, 0xc9, 0x24, 0xf5, 0x26, \r
-       0x9b, 0x5f, 0xba, 0x57, 0x5f, 0xf0, 0x49, 0xbf, 0xd9, 0xda, \r
-       0xe1, 0x8, 0x8f, 0x40, 0xd6, 0x2d, 0x4f, 0xf7, 0xa2, 0xd6, \r
-       0x67, 0x27, 0xff, 00, 0x1e, 0x26, 0xb0, 0x6f, 0x7f, 0xe0, \r
-       0x8f, 0x3f, 0x2, 0x6e, 0x3, 0x79, 0x17, 0x5e, 0x2a, 0xb4, \r
-       0x27, 0xa6, 0xdd, 0x4a, 0x36, 0x3, 0xf3, 0x8a, 0xaa, 0xe4, \r
-       0x72, 0xb3, 0xf1, 0x2e, 0x8a, 0xfd, 0x8a, 0xd4, 0x7f, 0xe0, \r
-       0x8b, 0x1f, 0xc, 0x27, 0x2c, 0x6c, 0xfc, 0x6d, 0xe2, 0xab, \r
-       0x4f, 0x40, 0xff, 00, 0x67, 0x90, 0xf, 0xfc, 0x86, 0xd, \r
-       0x72, 0xf7, 0xdf, 0xf0, 0x44, 0x8d, 0x5, 0xd9, 0xbe, 0xc5, \r
-       0xf1, 0x4b, 0x51, 0x88, 0x76, 0x13, 0xe9, 0x51, 0xbf, 0xf2, \r
-       0x91, 0x68, 0xb8, 0xb9, 0x59, 0xf9, 0x39, 0x8f, 0x6a, 0xfe, \r
-       0x88, 0x7f, 0x62, 0xf, 0x82, 0xb1, 0xfc, 0x7, 0xfd, 0x9a, \r
-       0xbc, 0x1f, 0xe1, 0xd6, 0x89, 0x53, 0x53, 0xb8, 0xb6, 0x1a, \r
-       0x96, 0xa2, 0xc0, 0x60, 0xb5, 0xcc, 0xe0, 0x3b, 0x3, 0xfe, \r
-       0xe8, 0x2a, 0x9f, 0x45, 0x15, 0xf1, 0xe7, 0x83, 0xff, 00, \r
-       0xe0, 0x8b, 0xe9, 0xe1, 0xcf, 0x1e, 0x68, 0x3a, 0xad, 0xff, \r
-       00, 0xc4, 0x68, 0x75, 0x8d, 0x16, 0xc6, 0xfa, 0x1b, 0x9b, \r
-       0xab, 0x6, 0xd2, 0x8c, 0x4f, 0x71, 0x1a, 0x38, 0x63, 0x1e, \r
-       0xef, 0x34, 0x81, 0xbb, 0x18, 0xe9, 0xde, 0xbf, 0x4e, 0x95, \r
-       0x42, 0x28, 0x55, 0x1, 0x54, 0xc, 00, 0x3a, 0x1, 0x49, \r
-       0x94, 0x95, 0x8a, 0x9a, 0xbe, 0xa5, 0x16, 0x8f, 0xa5, 0x5d, \r
-       0xdf, 0x4c, 0x40, 0x8a, 0xda, 0x26, 0x95, 0x89, 0xf4, 0x3, \r
-       0x35, 0xf1, 0x4e, 0xa5, 0xa8, 0x4d, 0xaa, 0xea, 0x17, 0x37, \r
-       0xb7, 0xd, 0xbe, 0x7b, 0x89, 0x1a, 0x57, 0x3e, 0xe4, 0xe4, \r
-       0xd7, 0xd6, 0x7f, 0x14, 0xf4, 0xd, 0x5f, 0xc5, 0x1e, 0x13, \r
-       0x97, 0x4b, 0xd1, 0xcc, 0x2b, 0x2d, 0xc4, 0x8a, 0x25, 0x33, \r
-       0x39, 0x51, 0xe5, 0x8e, 0x48, 0x1c, 0x1e, 0xa4, 0xf, 0xd6, \r
-       0xbc, 0x32, 0x4f, 0xd9, 0xfb, 0xc5, 0xc8, 0x38, 0x82, 0xd2, \r
-       0x4f, 0xf7, 0x6e, 0x7, 0xf5, 0xc5, 0x7c, 0x17, 0x11, 0x51, \r
-       0xc5, 0x62, 0xaa, 0x42, 0x9d, 0x1a, 0x6d, 0xc6, 0x2a, 0xfa, \r
-       0x2e, 0xaf, 0xfc, 0x8f, 0x23, 0x1d, 0x1a, 0x95, 0x24, 0x94, \r
-       0x62, 0xda, 0x47, 0x9b, 0x51, 0x5d, 0xec, 0xdf, 0x3, 0x7c, \r
-       0x67, 0xf, 0xfc, 0xc2, 0x84, 0x9f, 0xee, 0x5c, 0x46, 0x7f, \r
-       0xf6, 0x6a, 0xa5, 0x2f, 0xc2, 0x2f, 0x18, 0x43, 0xf7, 0xb4, \r
-       0x2b, 0x83, 0xfe, 0xe9, 0x56, 0xfe, 0x46, 0xbe, 0x2a, 0x58, \r
-       0xc, 0x5c, 0x77, 0xa5, 0x2f, 0xb9, 0x9e, 0x4b, 0xa3, 0x55, \r
-       0x7d, 0x97, 0xf7, 0x1c, 0x7d, 0x7d, 0x3f, 0xfb, 0x3f, 0xe8, \r
-       0x1f, 0xd9, 0x3e, 0x4, 0x4b, 0xb7, 0x4d, 0xb3, 0x6a, 0x12, \r
-       0xb4, 0xc4, 0x91, 0xce, 0xc1, 0xf2, 0xaf, 0xf2, 0x27, 0xf1, \r
-       0xaf, 0x9, 0xb7, 0xf8, 0x63, 0xe2, 0x79, 0x6f, 0x60, 0xb7, \r
-       0x93, 0x44, 0xbd, 0x84, 0x49, 0x22, 0xa1, 0x91, 0xa1, 0x3b, \r
-       0x57, 0x27, 0x19, 0x27, 0xd0, 0x57, 0xd7, 0x3a, 0x75, 0x8c, \r
-       0x5a, 0x5d, 0x85, 0xb5, 0x9c, 0xb, 0xb6, 0x18, 0x23, 0x58, \r
-       0x90, 0x7a, 00, 0x30, 0x2b, 0xeb, 0x38, 0x6b, 0x5, 0x38, \r
-       0xd7, 0x9d, 0x7a, 0xb1, 0x6b, 0x95, 0x59, 0x5d, 0x5b, 0x57, \r
-       0xff, 00, 0x3, 0xf3, 0x3d, 0x2c, 0x5, 0x26, 0xa6, 0xe7, \r
-       0x25, 0xb1, 0x66, 0x8a, 0x28, 0xaf, 0xd1, 0x4f, 0x74, 0x2b, \r
-       0xcd, 0x7f, 0x68, 0x38, 0xbc, 0xcf, 0x87, 0x53, 0x36, 0x3e, \r
-       0xe5, 0xcc, 0x4d, 0xfa, 0xe3, 0xfa, 0xd7, 0xa5, 0x57, 0x3, \r
-       0xf1, 0xce, 0x2f, 0x37, 0xe1, 0x9e, 0xa8, 0x7f, 0xb8, 0xd1, \r
-       0x37, 0xfe, 0x44, 0x5f, 0xf1, 0xaf, 0x37, 0x32, 0x5c, 0xd8, \r
-       0x2a, 0xcb, 0xfb, 0xaf, 0xf2, 0x39, 0xf1, 0xa, 0xf4, 0xa5, \r
-       0xe8, 0x7c, 0xa5, 0x45, 0x14, 0x57, 0xe2, 0x27, 0xc9, 0x5, \r
-       0x14, 0x51, 0x40, 0x1f, 0x64, 0x7c, 0x3a, 0xba, 0xfb, 0x67, \r
-       0x80, 0xf4, 0x9, 0x49, 0xc9, 0x36, 0x51, 0x3, 0xf5, 0xa, \r
-       0x7, 0xf4, 0xae, 0x8e, 0xb8, 0x4f, 0x82, 0x17, 0x86, 0xf3, \r
-       0xe1, 0xa6, 0x95, 0x93, 0x93, 0x17, 0x99, 0x11, 0xfc, 0x1d, \r
-       0xb1, 0xfa, 0x62, 0xbb, 0xba, 0xfd, 0xd3, 0x5, 0x3f, 0x69, \r
-       0x86, 0xa5, 0x3e, 0xf1, 0x5f, 0x91, 0xf6, 0x14, 0x5f, 0x35, \r
-       0x38, 0xbf, 0x24, 0x14, 0x51, 0x45, 0x76, 0x1a, 0x85, 0x14, \r
-       0x56, 0x7f, 0x88, 0x35, 0x68, 0xf4, 0x1d, 0xe, 0xff, 00, \r
-       0x51, 0x97, 0xee, 0x5a, 0xc2, 0xf2, 0x9f, 0x7c, 0xe, 0x5, \r
-       0x4c, 0xa4, 0xa1, 0x17, 0x29, 0x6c, 0x84, 0xdd, 0x95, 0xd9, \r
-       0xf2, 0xbf, 0xc6, 0xd, 0x78, 0xf8, 0x83, 0xe2, 0x6, 0xa9, \r
-       0x20, 0x6d, 0xd0, 0xdb, 0xbf, 0xd9, 0x63, 0xfa, 0x27, 0x7, \r
-       0xff, 00, 0x1e, 0xdc, 0x7f, 0x1a, 0xe3, 0x2a, 0x4b, 0x89, \r
-       0xde, 0xea, 0x79, 0x66, 0x90, 0xee, 0x92, 0x46, 0x2e, 0xc7, \r
-       0xd4, 0x93, 0x93, 0x51, 0xd7, 0xe1, 0x38, 0x8a, 0xcf, 0x11, \r
-       0x5a, 0x75, 0x65, 0xf6, 0x9b, 0x67, 0xc7, 0x4e, 0x4e, 0x72, \r
-       0x72, 0x7d, 0x42, 0x8a, 0x28, 0xae, 0x72, 0xe, 0xb7, 0xe1, \r
-       0x46, 0x8f, 0xfd, 0xb7, 0xf1, 0x7, 0x46, 0x81, 0x97, 0x7c, \r
-       0x69, 0x37, 0x9e, 0xe3, 0xb6, 0x10, 0x16, 0xfe, 0x60, 0x57, \r
-       0xd7, 0xd5, 0xf3, 0xdf, 0xec, 0xd1, 0xa3, 0xf9, 0xfa, 0xd6, \r
-       0xad, 0xa9, 0xb2, 0xf1, 0x6f, 0xa, 0xc0, 0x87, 0xdd, 0xce, \r
-       0x4f, 0xe8, 0xbf, 0xad, 0x7d, 0x9, 0x5f, 0xaa, 0xf0, 0xd5, \r
-       0xf, 0x67, 0x82, 0xf6, 0x8f, 0x79, 0x36, 0xfe, 0x4b, 0x43, \r
-       0xe8, 0xf0, 0x10, 0xe5, 0xa5, 0xcd, 0xdc, 0x28, 0xa2, 0x8a, \r
-       0xfa, 0xb3, 0xd2, 0xa, 0x28, 0xa2, 0x80, 0xa, 0xf9, 0xdb, \r
-       0xf6, 0x88, 0xf0, 0x69, 0xd3, 0xf5, 0x98, 0x7c, 0x41, 0x6e, \r
-       0x9f, 0xe8, 0xf7, 0x98, 0x8e, 0x7c, 0xf, 0xbb, 0x28, 0x1c, \r
-       0x1f, 0xc4, 0xf, 0xfc, 0x77, 0xde, 0xbe, 0x89, 0xac, 0xdf, \r
-       0x10, 0xe8, 0x36, 0x9e, 0x27, 0xd1, 0xae, 0xb4, 0xcb, 0xd4, \r
-       0xdf, 0x6f, 0x70, 0xbb, 0x5b, 0x1d, 0x54, 0xf5, 0x4, 0x7b, \r
-       0x83, 0xcd, 0x79, 0x59, 0x9e, 0x9, 0x63, 0xf0, 0xd2, 0xa3, \r
-       0xd7, 0x75, 0xeb, 0xfd, 0x68, 0x73, 0x62, 0x28, 0xfb, 0x6a, \r
-       0x6e, 0x3d, 0x4f, 0x89, 0xa8, 0xae, 0x8b, 0xc7, 0x1e, 0x8, \r
-       0xbf, 0xf0, 0x2e, 0xb5, 0x25, 0x95, 0xe2, 0x16, 0x88, 0x92, \r
-       0x60, 0xb8, 0x3, 0xe5, 0x95, 0x3d, 0x47, 0xbf, 0xa8, 0xed, \r
-       0x5c, 0xed, 0x7e, 0x33, 0x56, 0x94, 0xe8, 0xcd, 0xd3, 0xa8, \r
-       0xac, 0xd1, 0xf2, 0xb2, 0x8b, 0x8b, 0xe5, 0x96, 0xe1, 0x45, \r
-       0x14, 0x56, 0x44, 0x9b, 0x7e, 0x12, 0xf1, 0x86, 0xa7, 0xe0, \r
-       0xbd, 0x51, 0x6f, 0xb4, 0xd9, 0xb6, 0x3f, 0xdd, 0x92, 0x36, \r
-       0xe5, 0x25, 0x5f, 0x46, 0x15, 0xf4, 0x1f, 0x85, 0x3e, 0x3e, \r
-       0x78, 0x7b, 0x5d, 0x44, 0x8f, 0x50, 0x66, 0xd1, 0xee, 0xb8, \r
-       0x4, 0x4f, 0xcc, 0x44, 0xfb, 0x38, 0xe9, 0xf8, 0xe2, 0xbe, \r
-       0x61, 0xa2, 0xbd, 0xac, 0x6, 0x6d, 0x89, 0xcb, 0xfd, 0xda, \r
-       0x6e, 0xf1, 0xec, 0xf6, 0xff, 00, 0x80, 0x75, 0x51, 0xc4, \r
-       0xd4, 0xa1, 0xa4, 0x76, 0xec, 0x7d, 0xb7, 0x69, 0xe2, 0xd, \r
-       0x2e, 0xfd, 0x3, 0x5b, 0x6a, 0x36, 0x97, 0xa, 0x46, 0x73, \r
-       0x1c, 0xea, 0xdf, 0xc8, 0xd4, 0xb3, 0x6a, 0xf6, 0x36, 0xeb, \r
-       0xba, 0x5b, 0xdb, 0x78, 0x97, 0xd5, 0xe5, 0x50, 0x3f, 0x9d, \r
-       0x7c, 0x3f, 0x8a, 0x31, 0x5f, 0x46, 0xb8, 0xae, 0x76, 0xd6, \r
-       0x8e, 0xbe, 0xbf, 0xf0, 0xe, 0xff, 00, 0xed, 0x27, 0xfc, \r
-       0xbf, 0x89, 0xf5, 0x9f, 0x88, 0xbe, 0x32, 0xf8, 0x5b, 0xc3, \r
-       0xb1, 0x9c, 0xea, 0x2b, 0x7f, 0x38, 0xe9, 0xd, 0x96, 0x24, \r
-       0x3f, 0x98, 0xe0, 0x7e, 0x26, 0xbc, 0x47, 0xe2, 0x7, 0xc6, \r
-       0xad, 0x5b, 0xc6, 0x4b, 0x25, 0xa5, 0xa8, 0x3a, 0x66, 0x96, \r
-       0xc0, 0xab, 0x43, 0x1b, 0x65, 0xe5, 0x1f, 0xed, 0xb7, 0xa7, \r
-       0xb0, 0xe3, 0xeb, 0x5e, 0x75, 0x45, 0x78, 0x98, 0xdc, 0xf7, \r
-       0x17, 0x8c, 0x8b, 0x85, 0xf9, 0x62, 0xfa, 0x2f, 0xf3, 0x39, \r
-       0x2a, 0xe3, 0x2a, 0xd5, 0x56, 0xd9, 0x5, 0x14, 0x51, 0x5f, \r
-       0x3a, 0x70, 0x85, 0x14, 0x55, 0x8b, 0xd, 0x3e, 0xe7, 0x55, \r
-       0xbc, 0x86, 0xd2, 0xd2, 0x17, 0xb8, 0xb9, 0x95, 0x82, 0xa4, \r
-       0x68, 0x32, 0x58, 0xd3, 0x49, 0xc9, 0xd9, 0x6e, 0x1b, 0x89, \r
-       0x65, 0x65, 0x3e, 0xa3, 0x77, 0xd, 0xad, 0xb4, 0x4d, 0x35, \r
-       0xc4, 0xcc, 0x11, 0x23, 0x41, 0x92, 0xc4, 0xf6, 0xaf, 0xad, \r
-       0x3e, 0x18, 0xf8, 0x6, 0x2f, 00, 0xf8, 0x7d, 0x6d, 0xdb, \r
-       0x64, 0x9a, 0x84, 0xe7, 0xcc, 0xb9, 0x99, 0x7b, 0xb7, 0x65, \r
-       0x1e, 0xc3, 0xfc, 0x4f, 0x7a, 0xc6, 0xf8, 0x4b, 0xf0, 0x9a, \r
-       0x2f, 0x4, 0x5b, 0xfd, 0xbf, 0x50, 0x9, 0x36, 0xb5, 0x2a, \r
-       0xe0, 0x95, 0x39, 0x58, 0x14, 0xff, 00, 0xa, 0xfb, 0xfa, \r
-       0x9f, 0xc3, 0xeb, 0xe9, 0x35, 0xfa, 0x86, 0x47, 0x94, 0x3c, \r
-       0x1a, 0xfa, 0xc5, 0x75, 0xef, 0xbd, 0x97, 0x65, 0xfe, 0x67, \r
-       0xd0, 0xe0, 0xf0, 0xbe, 0xcb, 0xdf, 0x9e, 0xff, 00, 0x90, \r
-       0x51, 0x45, 0x23, 0x30, 0x55, 0x24, 0x9c, 0x1, 0xc9, 0x35, \r
-       0xf5, 0xe7, 0xa8, 0x71, 0xba, 0xef, 0xc5, 0x8d, 0xf, 0xc3, \r
-       0x5e, 0x29, 0xfe, 0xc4, 0xd4, 0x64, 0x7b, 0x77, 0xf2, 0x96, \r
-       0x43, 0x73, 0xb7, 0x31, 0xa9, 0x39, 0xf9, 0x5b, 0x1c, 0x8e, \r
-       0x30, 0x73, 0x8c, 0x73, 0x5d, 0x55, 0x8e, 0xa3, 0x6b, 0xaa, \r
-       0x40, 0xb3, 0xd9, 0xdc, 0xc5, 0x75, 0xb, 0x72, 0x24, 0x85, \r
-       0xc3, 0x29, 0xfc, 0x45, 0x7c, 0x75, 0xe3, 0x8d, 0x78, 0xf8, \r
-       0x9b, 0xc5, 0xba, 0xa6, 0xa5, 0x9c, 0xa4, 0xd3, 0xb7, 0x97, \r
-       0xfe, 0xe0, 0xe1, 0x7f, 0x40, 0x2a, 0x86, 0x93, 0xae, 0x6a, \r
-       0x1a, 0xd, 0xc8, 0xb8, 0xd3, 0xaf, 0x67, 0xb2, 0x97, 0xfb, \r
-       0xd0, 0xb9, 0x5c, 0xfd, 0x7d, 0x7f, 0x1a, 0xfc, 0xf5, 0x71, \r
-       0x3c, 0xa9, 0xd7, 0x9c, 0x67, 0xe, 0x68, 0x5d, 0xda, 0xda, \r
-       0x3b, 0x7e, 0xbf, 0x81, 0xe1, 0xac, 0xc1, 0xa9, 0xb4, 0xd5, \r
-       0xd1, 0xf6, 0xed, 0x15, 0xf3, 0x26, 0x8d, 0xfb, 0x43, 0x78, \r
-       0x9f, 0x4e, 0xda, 0xb7, 0x82, 0xd7, 0x53, 0x8c, 0x75, 0xf3, \r
-       0x63, 0xd8, 0xe7, 0xf1, 0x5c, 0xf, 0xd2, 0xbb, 0x6d, 0x2f, \r
-       0xf6, 0x96, 0xd2, 0xa6, 0x55, 0x1a, 0x86, 0x95, 0x77, 0x6c, \r
-       0xdd, 0xcc, 0xc, 0xb2, 0x2f, 0xeb, 0xb4, 0xd7, 0xd0, 0x51, \r
-       0xcf, 0xf0, 0x15, 0xb7, 0x9f, 0x2b, 0xf3, 0x5f, 0xd2, 0x3b, \r
-       0x61, 0x8d, 0xa3, 0x2e, 0xb6, 0x3d, 0x96, 0x8a, 0xf3, 0xcb, \r
-       0x5f, 0x8f, 0x5e, 0xe, 0xb8, 0xc6, 0xeb, 0xe9, 0xad, 0xcf, \r
-       0xa4, 0xb6, 0xef, 0xfd, 0x1, 0xad, 0x8, 0xbe, 0x31, 0x78, \r
-       0x3a, 0x51, 0xc6, 0xb9, 0x2, 0xff, 00, 0xbc, 0xae, 0x3f, \r
-       0x98, 0xaf, 0x4a, 0x39, 0x86, 0xe, 0x7f, 0xd, 0x58, 0xfd, \r
-       0xe8, 0xe8, 0x55, 0xe9, 0x3d, 0xa4, 0xbe, 0xf3, 0xb3, 0xa2, \r
-       0xb8, 0xa9, 0xfe, 0x32, 0xf8, 0x36, 0x1, 0x93, 0xad, 0xc4, \r
-       0xff, 00, 0xf5, 0xce, 0x37, 0x6f, 0xe4, 0x2b, 0x9b, 0xd7, \r
-       0x7f, 0x68, 0xcd, 0x2, 0xca, 0x16, 0x1a, 0x65, 0xbd, 0xce, \r
-       0xa3, 0x3f, 0xf0, 0xee, 0x5f, 0x2a, 0x3f, 0xc4, 0x9e, 0x7f, \r
-       0x4a, 0x8a, 0x99, 0x9e, 0xa, 0x92, 0xbc, 0xaa, 0xc7, 0xef, \r
-       0xbf, 0xe4, 0x29, 0x62, 0x29, 0x45, 0x5d, 0xc9, 0x16, 0xbf, \r
-       0x68, 0x6d, 0x4a, 0xde, 0xd7, 0xc0, 0x46, 0xd6, 0x42, 0x3e, \r
-       0xd1, 0x75, 0x71, 0x18, 0x89, 0x7b, 0xfc, 0xa7, 0x73, 0x1f, \r
-       0xc8, 0x63, 0xf1, 0xaf, 0x98, 0xeb, 0x7b, 0xc6, 0x3e, 0x35, \r
-       0xd4, 0xfc, 0x71, 0xaa, 0x7d, 0xb7, 0x52, 0x90, 0x12, 0xa3, \r
-       0x6c, 0x50, 0xc6, 0x30, 0x91, 0xaf, 0xa0, 0x1f, 0xd7, 0xad, \r
-       0x60, 0xd7, 0xe5, 0x99, 0xbe, 0x3a, 0x38, 0xfc, 0x53, 0xab, \r
-       0x5, 0xee, 0xa5, 0x64, 0x7c, 0xe6, 0x26, 0xb2, 0xad, 0x53, \r
-       0x99, 0x6c, 0x14, 0x51, 0x45, 0x78, 0xa7, 0x28, 0x55, 0xcd, \r
-       0x1e, 0xc5, 0xb5, 0x3d, 0x5e, 0xca, 0xcd, 0x46, 0x5a, 0xe2, \r
-       0x74, 0x88, 0x1, 0xfe, 0xd3, 0x1, 0xfd, 0x6a, 0x9d, 0x7a, \r
-       0x77, 0xc0, 0x1f, 0xa, 0x9d, 0x73, 0xc6, 0x1f, 0xda, 0x12, \r
-       0xa9, 0x36, 0xda, 0x6a, 0xf9, 0xb9, 0xec, 0x64, 0x3c, 0x20, \r
-       0xfe, 0x67, 0xf0, 0x15, 0xdb, 0x82, 0xc3, 0xcb, 0x15, 0x88, \r
-       0x85, 0x18, 0xf5, 0x7f, 0x87, 0x5f, 0xc0, 0xd6, 0x94, 0x1d, \r
-       0x49, 0xa8, 0xae, 0xa7, 0xd3, 0x68, 0xa1, 0x14, 0x28, 0xe8, \r
-       0x6, 0x29, 0xd4, 0x51, 0x5f, 0xb9, 0x9f, 0x60, 0x14, 0x51, \r
-       0x45, 00, 0x56, 0xd4, 0x5f, 0xcb, 0xb0, 0xb8, 0x6e, 0x98, \r
-       0x43, 0xfc, 0xab, 0xe1, 0x1f, 0x8b, 0xd7, 0x1e, 0x77, 0x88, \r
-       0xe5, 0xef, 0xf3, 0x1f, 0xe7, 0x5f, 0x72, 0xf8, 0x92, 0x5f, \r
-       0x27, 0x43, 0xbc, 0x6e, 0x98, 0x8c, 0xd7, 0xc1, 0x5f, 0x12, \r
-       0xa6, 0xf3, 0xbc, 0x45, 0x3f, 0xb3, 0x1a, 0xf8, 0xce, 0x22, \r
-       0x97, 0xbb, 0x4e, 0x3e, 0x67, 0xc9, 0xf1, 0xc, 0xad, 0x41, \r
-       0x23, 0xc8, 0x3e, 0x20, 0x4b, 0xb3, 0x4a, 0x9b, 0xe8, 0x6b, \r
-       0xe9, 0x1f, 0xf8, 0x25, 0xa6, 0x9e, 0x23, 0xf8, 0x57, 0xe3, \r
-       0x5b, 0xfc, 0x7c, 0xd7, 0x5e, 0x20, 0x64, 0xcf, 0xb2, 0x41, \r
-       0x1f, 0xff, 00, 0x14, 0x6b, 0xe6, 0x1f, 0x89, 0x93, 0x6c, \r
-       0xd2, 0x65, 0xfa, 0x1f, 0xe5, 0x5f, 0x60, 0x7f, 0xc1, 0x32, \r
-       0x6c, 0x3e, 0xcd, 0xfb, 0x35, 0x1b, 0xad, 0xb8, 0x37, 0xba, \r
-       0xe5, 0xec, 0xd9, 0xf5, 00, 0xaa, 0x7f, 0xec, 0x95, 0xd9, \r
-       0x92, 0xc6, 0xd4, 0xcf, 0x99, 0xe1, 0x18, 0xdf, 0x13, 0x5e, \r
-       0x7e, 0x87, 0xd6, 0x74, 0x51, 0x45, 0x7d, 0x39, 0xfa, 0x90, \r
-       0x57, 0x82, 0xfe, 0xd6, 0xde, 0x35, 0x3a, 0x3f, 0x84, 0x6d, \r
-       0x3c, 0x3f, 0x3, 0x62, 0x7d, 0x56, 0x4d, 0xd2, 0xe0, 0xf2, \r
-       0x22, 0x42, 0xf, 0xea, 0xd8, 0x1f, 0x81, 0xaf, 0x7a, 0xaf, \r
-       0x85, 0xbf, 0x68, 0x3f, 0x1a, 0x1f, 0x1a, 0x7c, 0x4b, 0xd4, \r
-       0x1a, 0x29, 0x4, 0x96, 0x5a, 0x79, 0xfb, 0x15, 0xbe, 0xd2, \r
-       0x70, 0x42, 0x9f, 0x98, 0xfe, 0x2d, 0x9f, 0xc8, 0x57, 0x85, \r
-       0x9c, 0xe2, 0x3d, 0x86, 0x15, 0xa5, 0xbc, 0xb4, 0xff, 00, \r
-       0x33, 0xe7, 0xb3, 0xdc, 0x4f, 0xd5, 0xf0, 0x6e, 0x29, 0xeb, \r
-       0x2d, 0x3f, 0xcf, 0xf0, 0x39, 0x5f, 0x2, 0xf8, 0x7e, 0x4f, \r
-       0x12, 0xf8, 0xa3, 0x4f, 0xd3, 0xe3, 0x5d, 0xde, 0x6c, 0xaa, \r
-       0xf, 0xd3, 0x3c, 0xd7, 0xe8, 0x46, 0x95, 0xa7, 0xc7, 0xa5, \r
-       0x69, 0xd6, 0xf6, 0x91, 00, 0xb1, 0xc2, 0x81, 00, 0x1e, \r
-       0xd5, 0xf2, 0xef, 0xec, 0x9d, 0xe0, 0xff, 00, 0xb6, 0x6b, \r
-       0x77, 0x7a, 0xd4, 0xc9, 0x98, 0xed, 0xd3, 0x6c, 0x64, 0x8e, \r
-       0x37, 0x1a, 0xfa, 0xb6, 0xb8, 0xb8, 0x7f, 0xf, 0xc9, 0x46, \r
-       0x55, 0xde, 0xf2, 0xfc, 0x91, 0x87, 0xf, 0xe1, 0xbd, 0x8e, \r
-       0x1b, 0xda, 0x3d, 0xe5, 0xf9, 0x5, 0x14, 0x51, 0x5f, 0x54, \r
-       0x7d, 0x41, 0xf9, 0x87, 0xff, 00, 0x5, 0x9e, 0xf8, 0xdd, \r
-       0x1d, 0xb6, 0x8b, 0xe1, 0x2f, 0x85, 0x76, 0x17, 0x2c, 0x2e, \r
-       0x2e, 0x65, 0xfe, 0xda, 0xd4, 0xe3, 0x46, 0xc0, 0xf2, 0x97, \r
-       0x72, 0x40, 0x8d, 0xeb, 0x96, 0xde, 0xd8, 0xff, 00, 0x61, \r
-       0x4d, 0x7e, 0x72, 0xfe, 0xcf, 0x7f, 0xa, 0xe5, 0xf8, 0xdb, \r
-       0xf1, 0xb3, 0xc1, 0xbe, 0x7, 0x89, 0xfc, 0xb5, 0xd6, 0x75, \r
-       0x8, 0xe0, 0x99, 0xf3, 0x8d, 0xb0, 0x8c, 0xbc, 0xa4, 0x7b, \r
-       0x88, 0xd5, 0xc8, 0xf7, 0xaf, 0x55, 0xff, 00, 0x82, 0x90, \r
-       0x6b, 0xf7, 0x9a, 0xff, 00, 0xed, 0x9f, 0xf1, 0x1c, 0xdd, \r
-       0xc8, 0xce, 0xb6, 0x77, 0x30, 0x59, 0x40, 0xac, 0x73, 0xb2, \r
-       0x34, 0xb7, 0x8c, 00, 0x3d, 0xb2, 0x58, 0xff, 00, 0xc0, \r
-       0x8d, 0x7c, 0xfb, 0xe1, 0x5f, 0x15, 0x6a, 0xfe, 0x7, 0xf1, \r
-       0x1e, 0x9d, 0xaf, 0xe8, 0x3a, 0x84, 0xfa, 0x56, 0xb3, 0xa7, \r
-       0xcc, 0xb7, 0x16, 0xb7, 0x96, 0xcd, 0xb6, 0x48, 0x9c, 0x74, \r
-       0x20, 0xff, 00, 0x9c, 0xf4, 0xaa, 0x33, 0x6f, 0x53, 0xfa, \r
-       0x71, 0x51, 0xa7, 0xf8, 0x4b, 0xc3, 0xc0, 0x7c, 0x96, 0x7a, \r
-       0x5e, 0x99, 0x6b, 0x8f, 0x45, 0x8a, 0x18, 0xd3, 0xf9, 0x5, \r
-       0x5f, 0xd2, 0xbf, 0xe, 0xbe, 0x24, 0x7f, 0xc1, 0x4e, 0x7e, \r
-       0x37, 0x6a, 0x3f, 0x13, 0x7c, 0x4b, 0xa8, 0xf8, 0x57, 0xc6, \r
-       0xd3, 0xe9, 0x9e, 0x1a, 0x9a, 0xfe, 0x66, 0xd3, 0x74, 0xe3, \r
-       0x67, 0x6e, 0xe9, 0xd, 0xbe, 0xe2, 0x23, 0x1f, 0x34, 0x64, \r
-       0xe7, 0x68, 0x4, 0xe4, 0x9e, 0x49, 0xa8, 0x3c, 0x61, 0xff, \r
-       00, 0x5, 0x45, 0xf8, 0xd9, 0xe3, 0xcf, 0x86, 0xda, 0xd7, \r
-       0x83, 0x35, 0x89, 0xf4, 0x49, 0xac, 0xf5, 0x6b, 0x17, 0xb0, \r
-       0xb9, 0xbe, 0x86, 0xc5, 0xa2, 0xba, 0xf2, 0xdd, 0x76, 0xb1, \r
-       0xc, 0xae, 0x14, 0x31, 0x19, 0x19, 0xdb, 0xdc, 0xd7, 0xc8, \r
-       0xb4, 0x92, 0x1b, 0x7d, 0x8f, 0xdf, 0x7f, 0xf8, 0x27, 0x7f, \r
-       0xc4, 0x8f, 0x88, 0xff, 00, 0x18, 0xbe, 0x1, 0x47, 0xe3, \r
-       0x6f, 0x88, 0xfa, 0xc2, 0xea, 0xb7, 0x7a, 0xad, 0xf4, 0xa3, \r
-       0x4f, 0x9, 0x69, 0x1d, 0xb8, 0x8e, 0xda, 0x33, 0xe5, 0xe4, \r
-       0x84, 0x51, 0x92, 0xce, 0xae, 0x72, 0x7b, 0x1, 0x5f, 0x50, \r
-       0xd7, 0xe3, 0xaf, 0xc3, 0xf, 0xf8, 0x2b, 0xf6, 0xa3, 0xf0, \r
-       0xbf, 0xc0, 0xfa, 0x7, 0x85, 0x34, 0xff, 00, 0x84, 0xda, \r
-       0x50, 0xd2, 0xb4, 0x6b, 0x38, 0xac, 0xa0, 0x58, 0x75, 0x69, \r
-       0x23, 0x25, 0x51, 0x40, 0xc9, 0xfd, 0xd1, 0xe4, 0xf2, 0x4f, \r
-       0xb9, 0x35, 0xe8, 0x5a, 0x7f, 0xfc, 0x16, 0xee, 0x16, 0x61, \r
-       0xf6, 0xef, 0x84, 0xb2, 0x46, 0xbd, 0xcd, 0xbe, 0xb8, 0x1f, \r
-       0xf9, 0xc0, 0x28, 0xb1, 0x57, 0x47, 0xea, 0x45, 0x15, 0xf9, \r
-       0xbd, 0x65, 0xff, 00, 0x5, 0xb1, 0xf0, 0x3c, 0x85, 0x7e, \r
-       0xd7, 0xf0, 0xe3, 0xc4, 0x10, 0xe, 0xe6, 0x1b, 0xc8, 0x24, \r
-       0xc7, 0xe7, 0xb6, 0xba, 0xed, 0x3, 0xfe, 0xb, 0x19, 0xf0, \r
-       0x8b, 0x5c, 0xbd, 0xb6, 0xb3, 0x3e, 0x19, 0xf1, 0x84, 0x17, \r
-       0x57, 0x12, 0x2c, 0x51, 0xc6, 0x2d, 0x20, 0x93, 0x73, 0xb1, \r
-       0xc0, 0x51, 0xb6, 0x6e, 0x72, 0x48, 0xed, 0x48, 0x2e, 0x8f, \r
-       0xbc, 0xe8, 0xa8, 0xad, 0xa6, 0x37, 0x16, 0xd1, 0x4a, 0x63, \r
-       0x78, 0x4b, 0xa0, 0x63, 0x1c, 0x98, 0xdc, 0xb9, 0x19, 0xc1, \r
-       0xc7, 0x71, 0x59, 0x1e, 0x36, 0xf1, 0xae, 0x89, 0xf0, 0xe7, \r
-       0xc2, 0x9a, 0x9f, 0x89, 0x7c, 0x47, 0x7f, 0x1e, 0x97, 0xa2, \r
-       0x69, 0xb0, 0x99, 0xee, 0xee, 0xe5, 0x4, 0xac, 0x48, 0x3b, \r
-       0xe0, 0x2, 0x4f, 0x5e, 0x80, 0x50, 0x33, 0x72, 0x8a, 0xf0, \r
-       0x2b, 0xf, 0xdb, 0xdb, 0xf6, 0x7d, 0xd4, 0x63, 0xf, 0x1f, \r
-       0xc5, 0x6f, 0xf, 0xc6, 0xf, 0x6b, 0x89, 0x9a, 0x23, 0xf9, \r
-       0x32, 0x8a, 0xdc, 0xb1, 0xfd, 0xb1, 0x7e, 0x6, 0xea, 0x3f, \r
-       0xea, 0x3e, 0x2d, 0x78, 0x40, 0xff, 00, 0xbf, 0xac, 0x42, \r
-       0x9f, 0xfa, 0x13, 0xa, 00, 0xf6, 0x1a, 0x2b, 0x82, 0xd2, \r
-       0x7e, 0x3e, 0x7c, 0x33, 0xd7, 0xbf, 0xe4, 0x1d, 0xf1, 0xb, \r
-       0xc2, 0xf7, 0xdf, 0xf5, 0xc3, 0x58, 0xb7, 0x7f, 0xe4, 0xf5, \r
-       0xd1, 0xd9, 0x78, 0xd7, 0xc3, 0xda, 0x91, 0x2, 0xd3, 0x5e, \r
-       0xd3, 0x2e, 0x89, 0xe8, 0x21, 0xbc, 0x8d, 0xf3, 0xf9, 0x35, \r
-       00, 0x6d, 0x51, 0x51, 0xa5, 0xc4, 0x52, 0x7d, 0xc9, 0x51, \r
-       0xbf, 0xdd, 0x60, 0x6a, 0x4a, 00, 0x28, 0xa2, 0x8a, 00, \r
-       0x2a, 0xbd, 0xfe, 0x9f, 0x6d, 0xaa, 0x5a, 0x49, 0x6b, 0x79, \r
-       0x6f, 0x1d, 0xd5, 0xb4, 0x98, 0xdf, 0x14, 0xca, 0x19, 0x5b, \r
-       0x9c, 0xf2, 0xf, 0xbd, 0x58, 0xa2, 0x93, 0x49, 0xab, 0x30, \r
-       0x6a, 0xfa, 0x33, 0x96, 0x9b, 0xe1, 0x77, 0x84, 0xe7, 0x1f, \r
-       0x36, 0x81, 0x62, 0x3f, 0xdc, 0x8b, 0x6f, 0xf2, 0xaa, 0x53, \r
-       0x7c, 0x17, 0xf0, 0x6c, 0xfd, 0x74, 0x54, 0x5f, 0xf7, 0x25, \r
-       0x91, 0x7f, 0x93, 0x57, 0x6d, 0x45, 0x72, 0x4b, 0x5, 0x85, \r
-       0x96, 0xf4, 0xa3, 0xf7, 0x23, 0x27, 0x46, 0x9b, 0xde, 0x2b, \r
-       0xee, 0x3c, 0xf6, 0x4f, 0x80, 0xde, 0xc, 0x7e, 0x9a, 0x74, \r
-       0xa9, 0xfe, 0xed, 0xd4, 0x9f, 0xd5, 0xaa, 0xac, 0x9f, 0xb3, \r
-       0xd7, 0x84, 0x9f, 0xee, 0xa5, 0xe4, 0x7f, 0xee, 0xdc, 0x7f, \r
-       0x88, 0xaf, 0x4c, 0xa2, 0xb0, 0x79, 0x66, 0x9, 0xef, 0x46, \r
-       0x3f, 0x72, 0x23, 0xea, 0xf4, 0x7f, 0x95, 0x18, 0x7e, 0xf, \r
-       0xf0, 0x85, 0x97, 0x82, 0x74, 0x93, 0xa7, 0x58, 0x3c, 0xcf, \r
-       0x6f, 0xe6, 0x34, 0xa3, 0xcf, 0x60, 0xc4, 0x13, 0x8c, 0x8c, \r
-       0x80, 0x38, 0xe2, 0xb7, 0x28, 0xa2, 0xbb, 0xe9, 0xd3, 0x8d, \r
-       0x28, 0xa8, 0x41, 0x59, 0x23, 0x68, 0xc5, 0x45, 0x59, 0x6c, \r
-       0x14, 0x51, 0x45, 0x68, 0x50, 0x57, 0x25, 0xf1, 0x4b, 0xc3, \r
-       0xfa, 0x9f, 0x8a, 0x7c, 0x1f, 0x73, 0xa5, 0xe9, 0x46, 0x21, \r
-       0x3c, 0xee, 0x81, 0xcc, 0xce, 0x50, 0x6c, 0x7, 0x27, 0x9c, \r
-       0x1f, 0x41, 0x5d, 0x6d, 0x15, 0x8d, 0x6a, 0x51, 0xaf, 0x4e, \r
-       0x54, 0xa5, 0xb3, 0x56, 0x22, 0x71, 0x53, 0x8b, 0x8b, 0xea, \r
-       0x7c, 0xb5, 0x2f, 0xc0, 0xf, 0x18, 0x47, 0xd2, 0xd6, 0xda, \r
-       0x4f, 0xf7, 0x2e, 0x17, 0xfa, 0xe2, 0xa9, 0xcb, 0xf0, 0x47, \r
-       0xc6, 0x71, 0xff, 00, 0xcc, 0x1f, 0x7f, 0xfb, 0xb3, 0xc7, \r
-       0xff, 00, 0xc5, 0x57, 0xd6, 0x34, 0x57, 0xcb, 0xcb, 0x86, \r
-       0x30, 0x4f, 0x69, 0x49, 0x7c, 0xd7, 0xf9, 0x1e, 0x7b, 0xcb, \r
-       0xe9, 0x77, 0x67, 0xc8, 0x53, 0x7c, 0x25, 0xf1, 0x7c, 0x7, \r
-       0xe6, 0xd0, 0x6e, 0x8f, 0xfb, 0x9b, 0x5b, 0xf9, 0x1a, 0xa3, \r
-       0x3f, 0xc3, 0xef, 0x13, 0x5b, 0xff, 00, 0xac, 0xd0, 0x75, \r
-       0x1, 0xf4, 0xb7, 0x63, 0xfc, 0x85, 0x7d, 0x97, 0x45, 0x61, \r
-       0x2e, 0x16, 0xc3, 0x7d, 0x9a, 0x92, 0xfc, 0x3f, 0xc8, 0x87, \r
-       0x97, 0x43, 0xa4, 0x99, 0xe7, 0xdf, 0x3, 0xbc, 0x37, 0x2f, \r
-       0x87, 0x7c, 0xb, 0xf, 0xda, 0x61, 0x78, 0x2e, 0xee, 0xe5, \r
-       0x79, 0xe4, 0x49, 0x14, 0xab, 0x2f, 0x3b, 0x54, 0x10, 0x7a, \r
-       0x70, 0xa0, 0xfe, 0x35, 0xe8, 0x34, 0x51, 0x5f, 0x59, 0x86, \r
-       0xa1, 0x1c, 0x35, 0x18, 0xd1, 0x8e, 0xd1, 0x56, 0x3d, 0x2a, \r
-       0x70, 0x54, 0xe0, 0xa0, 0xba, 0x5, 0x14, 0x51, 0x5d, 0x26, \r
-       0x81, 0x45, 0x14, 0x50, 0x1, 0x45, 0x14, 0x50, 0x6, 0x57, \r
-       0x88, 0xfc, 0x33, 0xa6, 0xf8, 0xb3, 0x4d, 0x7b, 0x1d, 0x4e, \r
-       0xd9, 0x6e, 0x20, 0x6e, 0x46, 0x78, 0x64, 0x3e, 0xaa, 0x7a, \r
-       0x83, 0x5f, 0x3a, 0xf8, 0xef, 0xe0, 0x66, 0xb1, 0xe1, 0x97, \r
-       0x96, 0xe7, 0x4d, 0x56, 0xd5, 0xb4, 0xd1, 0xc8, 0x31, 0x8c, \r
-       0xcc, 0x83, 0xfd, 0xa5, 0x1d, 0x7e, 0xa3, 0xf2, 0x15, 0xf4, \r
-       0xfd, 0x15, 0xe3, 0xe3, 0xf2, 0xac, 0x3e, 0x60, 0xbf, 0x78, \r
-       0xad, 0x2e, 0xeb, 0x7f, 0xf8, 0x27, 0x2d, 0x6c, 0x34, 0x2b, \r
-       0xfc, 0x5b, 0xf7, 0x3e, 0x15, 0x20, 0xa9, 0x20, 0x8c, 0x11, \r
-       0xc1, 0x7, 0xb5, 0x25, 0x7d, 0x89, 0xe2, 0x7f, 0x86, 0xde, \r
-       0x1e, 0xf1, 0x70, 0x63, 0x7f, 0xa7, 0x47, 0xe7, 0x9f, 0xf9, \r
-       0x78, 0x87, 0xe4, 0x90, 0x7e, 0x23, 0xaf, 0xe3, 0x9a, 0xf3, \r
-       0x2d, 0x6b, 0xf6, 0x66, 0x53, 0xb9, 0xb4, 0x9d, 0x64, 0x8f, \r
-       0x48, 0xaf, 0x23, 0xcf, 0xfe, 0x3c, 0xbf, 0xe1, 0x5f, 0x5, \r
-       0x89, 0xe1, 0xbc, 0x65, 0x17, 0x7a, 0x56, 0x9a, 0xfb, 0x9f, \r
-       0xdc, 0xff, 00, 0xcc, 0xf1, 0xaa, 0x60, 0x2a, 0xc7, 0xe1, \r
-       0xd4, 0xf0, 0x8a, 0x2b, 0xd0, 0x35, 0x3f, 0x81, 0x5e, 0x30, \r
-       0xd3, 0xdc, 0x84, 0xb0, 0x8e, 0xf5, 0x7, 0xf1, 0xdb, 0x4c, \r
-       0xa7, 0xf4, 0x62, 0xf, 0xe9, 0x58, 0x57, 0x3f, 0xe, 0x3c, \r
-       0x53, 0x68, 0x71, 0x26, 0x81, 0x7f, 0xff, 00, 00, 0x81, \r
-       0x9c, 0x7e, 0x99, 0xaf, 0xa, 0xa6, 0x7, 0x15, 0x49, 0xda, \r
-       0x74, 0xa4, 0xbe, 0x4c, 0xe2, 0x74, 0x6a, 0x47, 0x78, 0xb3, \r
-       0x9c, 0xa2, 0xb4, 0xe4, 0xf0, 0xc6, 0xb3, 0x11, 0xc3, 0xe9, \r
-       0x37, 0xca, 0x7d, 0xd, 0xb3, 0xff, 00, 0x85, 0x35, 0x7c, \r
-       0x39, 0xab, 0x31, 0xc0, 0xd2, 0xaf, 0x4f, 0xd2, 0xd9, 0xff, \r
-       00, 0xc2, 0xb9, 0xbd, 0x95, 0x4f, 0xe5, 0x7f, 0x71, 0x1c, \r
-       0xb2, 0xec, 0x67, 0x51, 0x5b, 0xf6, 0xfe, 00, 0xf1, 0x2d, \r
-       0xd1, 0x1e, 0x56, 0x83, 0xa8, 0xb6, 0x7a, 0x13, 0x6c, 0xe0, \r
-       0x7e, 0x64, 0x56, 0xe6, 0x9d, 0xf0, 0x47, 0xc6, 0x3a, 0x83, \r
-       0xa8, 0x3a, 0x5f, 0xd9, 0x50, 0xff, 00, 0x1d, 0xc4, 0xa8, \r
-       0xa0, 0x7e, 0x19, 0x27, 0xf4, 0xae, 0x88, 0x60, 0xb1, 0x35, \r
-       0x3e, 0xa, 0x52, 0x7f, 0x26, 0x5a, 0xa5, 0x52, 0x5b, 0x45, \r
-       0x9c, 0x25, 0x15, 0xee, 0x3a, 0x2f, 0xec, 0xcf, 0x2b, 0x6d, \r
-       0x6d, 0x5b, 0x58, 0x54, 0xf5, 0x8a, 0xce, 0x3c, 0x9f, 0xfb, \r
-       0xe9, 0xbf, 0xc2, 0xbd, 0x2f, 0xc3, 0x1f, 0xa, 0x7c, 0x35, \r
-       0xe1, 0x4d, 0xaf, 0x6b, 0xa7, 0xac, 0xf7, 0x2b, 0xff, 00, \r
-       0x2f, 0x17, 0x5f, 0xbc, 0x7f, 0xc3, 0x3c, 0xf, 0xc0, 0xa, \r
-       0xf7, 0x30, 0xdc, 0x39, 0x8d, 0xac, 0xef, 0x51, 0x28, 0x2f, \r
-       0x3d, 0x5f, 0xdc, 0xbf, 0xe0, 0x1d, 0x94, 0xf0, 0x35, 0x67, \r
-       0xf1, 0x68, 0x7c, 0xfd, 0xe0, 0xbf, 0x83, 0x9a, 0xff, 00, \r
-       0x8c, 0xc, 0x73, 0x18, 0x7f, 0xb3, 0xb4, 0xf6, 0x23, 0x37, \r
-       0x37, 0x20, 0x82, 0x47, 0xaa, 0xaf, 0x56, 0xfd, 0x7, 0xbd, \r
-       0x7d, 0xf, 0xe0, 0x9f, 0x87, 0x3a, 0x37, 0x81, 0x6d, 0xb6, \r
-       0xd8, 0xc1, 0xe6, 0x5d, 0x32, 0xe2, 0x5b, 0xb9, 0x79, 0x91, \r
-       0xff, 00, 0xc0, 0x7b, 0xa, 0xea, 0x68, 0xaf, 0xba, 0xc0, \r
-       0x64, 0xd8, 0x6c, 0x7, 0xbd, 0x15, 0xcd, 0x2e, 0xef, 0xf4, \r
-       0xec, 0x7b, 0x14, 0x30, 0xb4, 0xe8, 0xea, 0xb5, 0x7d, 0xc2, \r
-       0x8a, 0x28, 0xaf, 0x74, 0xec, 0xa, 0xe5, 0x7e, 0x28, 0x6b, \r
-       0xe3, 0xc3, 0x7e, 0x5, 0xd5, 0xae, 0xc3, 0x6d, 0x95, 0xa2, \r
-       0x30, 0xc4, 0x7b, 0xef, 0x7f, 0x94, 0x7e, 0x59, 0xcf, 0xe1, \r
-       0x5d, 0x55, 0x78, 0xc7, 0xed, 0x29, 0x71, 0x76, 0xfa, 0x46, \r
-       0x95, 0x69, 0xd, 0xbc, 0xcf, 0x6d, 0xe6, 0xb4, 0xf3, 0x4a, \r
-       0x88, 0x4a, 0x29, 0x3, 0xa, 0x9, 0xe9, 0xfc, 0x4d, 0xf9, \r
-       0x57, 0x99, 0x99, 0xd7, 0x78, 0x7c, 0x1d, 0x4a, 0x91, 0xde, \r
-       0xda, 0x7c, 0xf4, 0x39, 0xf1, 0x13, 0x70, 0xa5, 0x29, 0x23, \r
-       0xe7, 0xba, 0x28, 0xa2, 0xbf, 0x12, 0x3e, 0x48, 0x28, 0xa2, \r
-       0x8a, 00, 0x28, 0xa2, 0x8a, 00, 0x28, 0xa2, 0x8a, 00, \r
-       0x28, 0xa2, 0x8a, 00, 0x28, 0xa2, 0xbb, 0x3f, 0x5, 0x7c, \r
-       0x27, 0xd7, 0xbc, 0x69, 0x2c, 0x4f, 0x15, 0xbb, 0x59, 0x69, \r
-       0xed, 0xc9, 0xbd, 0xb8, 0x5c, 0x2e, 0x3f, 0xd9, 0x1d, 0x5b, \r
-       0xf0, 0xe3, 0xde, 0xb7, 0xa3, 0x42, 0xae, 0x22, 0x6a, 0x9d, \r
-       0x18, 0xb6, 0xfc, 0x8b, 0x84, 0x25, 0x37, 0x68, 0xab, 0xb3, \r
-       0x9c, 0xd0, 0x34, 0x1b, 0xdf, 0x13, 0x6a, 0xd6, 0xfa, 0x76, \r
-       0x9f, 0x17, 0x9d, 0x73, 0x33, 0x60, 0xe, 0xca, 0x3b, 0xb1, \r
-       0x3d, 0x80, 0xf5, 0xaf, 0xae, 0xbc, 0xb, 0xe0, 0xeb, 0x5f, \r
-       0x3, 0xf8, 0x7a, 0xd, 0x3a, 0xdc, 0x6, 0x90, 0xd, 0xf3, \r
-       0xcc, 0x6, 0xc, 0xb2, 0x1e, 0xa7, 0xfa, 0xf, 0x6a, 0x87, \r
-       0xc0, 0xdf, 0xf, 0xb4, 0xbf, 0x1, 0x58, 0x18, 0x2c, 0x50, \r
-       0xc9, 0x71, 0x26, 0x3c, 0xeb, 0xa9, 00, 0xdf, 0x21, 0xfe, \r
-       0x83, 0xd8, 0x57, 0x4f, 0x5f, 0xa9, 0x64, 0xd9, 0x3a, 0xcb, \r
-       0xe3, 0xed, 0x6a, 0xeb, 0x51, 0xfe, 0xb, 0xb7, 0xf9, 0x9f, \r
-       0x43, 0x85, 0xc2, 0xfb, 0x5, 0xcd, 0x2f, 0x88, 0x28, 0xa2, \r
-       0x8a, 0xfa, 0x73, 0xd1, 0xa, 0x28, 0xa2, 0x80, 0x30, 0x7c, \r
-       0x73, 0x37, 0x91, 0xe1, 0x8b, 0xd6, 0xe9, 0xf2, 0xe2, 0xbe, \r
-       0x8, 0xf1, 0xc4, 0xbe, 0x66, 0xbd, 0x72, 0x73, 0xfc, 0x46, \r
-       0xbe, 0xe8, 0xf8, 0x9f, 0x37, 0x93, 0xe1, 0x2b, 0xa3, 0x9a, \r
-       0xf8, 0x2f, 0xc5, 0xd, 0xbf, 0x55, 0xba, 0x6c, 0xff, 00, \r
-       0x11, 0xaf, 0x84, 0xe2, 0x19, 0x7e, 0xfa, 0x9c, 0x4f, 0x88, \r
-       0xe2, 0x49, 0x7b, 0x91, 0x47, 0x8f, 0x7c, 0x59, 0x9f, 0xcb, \r
-       0xd2, 0x64, 0xe7, 0xb1, 0xfe, 0x55, 0xf7, 0x67, 0xfc, 0x13, \r
-       0xa2, 0xc9, 0xad, 0x3f, 0x64, 0xaf, 0x8, 0xbb, 0xc, 0x1b, \r
-       0x89, 0xaf, 0x67, 0xfc, 0xd, 0xd4, 0xa3, 0xfa, 0x57, 0xc0, \r
-       0x5f, 0x19, 0xa6, 0xf2, 0xf4, 0xa9, 0x79, 0xe3, 0x69, 0xaf, \r
-       0xd2, 0x7f, 0xd8, 0xaf, 0x4a, 0x1a, 0x3f, 0xec, 0xaf, 0xf0, \r
-       0xda, 00, 0x41, 0xdf, 0xa5, 0x25, 0xc1, 0xc7, 0xac, 0x8c, \r
-       0xd2, 0x7f, 0xec, 0xd5, 0xed, 0xe5, 0xa, 0xd4, 0x91, 0xe6, \r
-       0xf0, 0x74, 0x7d, 0xda, 0xf3, 0xf3, 0x3d, 0xb2, 0x8a, 0x28, \r
-       0xaf, 0xa0, 0x3f, 0x49, 0x39, 0x5f, 0x8a, 0x1e, 0x30, 0x4f, \r
-       0x2, 0x78, 0x13, 0x56, 0xd6, 0x18, 0xfe, 0xf2, 0x18, 0xb6, \r
-       0xc2, 0x3d, 0x65, 0x6f, 0x95, 0x7, 0xe6, 0x45, 0x7e, 0x7e, \r
-       0xa7, 0x99, 0x77, 0x71, 0x96, 0x26, 0x49, 0xa5, 0x6c, 0xb3, \r
-       0x1e, 0x4b, 0x31, 0x3c, 0x9f, 0xce, 0xbe, 0x93, 0xfd, 0xaf, \r
-       0xfc, 0x64, 0xf, 0xf6, 0x4f, 0x85, 0xa1, 0x3c, 0xff, 00, \r
-       0xc7, 0xf5, 0xc1, 0xf6, 0xe5, 0x50, 0x7f, 0xe8, 0x47, 0xf0, \r
-       0x15, 0xe3, 0xbf, 0x8, 0x3c, 0x2a, 0xde, 0x2d, 0xf1, 0xd6, \r
-       0x9b, 0x69, 0xb4, 0xb4, 0x42, 0x40, 0xf2, 0x7b, 0x28, 0xe6, \r
-       0xbf, 0x3e, 0xce, 0xab, 0x4b, 0x13, 0x8b, 0x8e, 0x1e, 0x1d, \r
-       0x34, 0xf9, 0xb3, 0xf3, 0xbc, 0xe2, 0xa3, 0xc6, 0xe3, 0xe3, \r
-       0x86, 0x86, 0xd1, 0xd3, 0xe6, 0xf7, 0xfd, 0xf, 0xae, 0xfe, \r
-       0x7, 0x78, 0x51, 0x7c, 0x2b, 0xf0, 0xff, 00, 0x4f, 0x8c, \r
-       0xa8, 0x59, 0xe7, 0x5f, 0x36, 0x43, 0x8e, 0xe6, 0xbd, 0x2, \r
-       0xa3, 0xb7, 0x81, 0x2d, 0xa0, 0x8e, 0x14, 0x1b, 0x51, 0x14, \r
-       0x28, 0x3, 0xd0, 0x54, 0x95, 0xf7, 0x54, 0x29, 0x2a, 0x14, \r
-       0xa3, 0x4a, 0x3b, 0x25, 0x63, 0xef, 0xe9, 0x53, 0x54, 0xa1, \r
-       0x18, 0x47, 0x64, 0x14, 0x51, 0x45, 0x6e, 0x6a, 0x7e, 0x70, \r
-       0xff, 00, 0xc1, 0x43, 0xbf, 0xe0, 0x9c, 0x3a, 0xf7, 0xc6, \r
-       0x5f, 0x19, 0x5d, 0x7c, 0x4c, 0xf8, 0x6b, 0xf6, 0x7b, 0x8d, \r
-       0x7a, 0xea, 0x24, 0x1a, 0xae, 0x87, 0x33, 0x88, 0x9a, 0xe9, \r
-       0xd1, 0x42, 0xac, 0xb1, 0x39, 0xf9, 0x77, 0x95, 0x55, 0x52, \r
-       0xad, 0x8c, 0xed, 0x4, 0x1e, 0xb5, 0xf9, 0x9d, 0xe2, 0x4f, \r
-       0xd9, 0xa7, 0xe2, 0xcf, 0x84, 0x2e, 0xe4, 0xb6, 0xd5, 0xfe, \r
-       0x1b, 0x78, 0xaa, 0xce, 0x54, 0xfb, 0xc4, 0xe9, 0x13, 0xba, \r
-       0x7e, 0xe, 0xaa, 0x54, 0xfe, 0x6, 0xbf, 0xa4, 0xfa, 0xe7, \r
-       0xbe, 0x21, 0x78, 0xca, 0xdb, 0xe1, 0xe7, 0x81, 0xb5, 0xef, \r
-       0x13, 0x5e, 0x47, 0x24, 0xd6, 0xfa, 0x55, 0x9c, 0xb7, 0x6d, \r
-       0x14, 0x2a, 0x59, 0xe4, 0xda, 0xa4, 0x84, 0x50, 0x39, 0x2c, \r
-       0xc7, 00, 0x1, 0xdc, 0xd3, 0xb9, 0x2d, 0x5c, 0xfe, 0x63, \r
-       0xef, 0xac, 0x6e, 0x74, 0xcb, 0xb9, 0x6d, 0x6f, 0x2d, 0xe5, \r
-       0xb4, 0xba, 0x85, 0xb6, 0x49, 0x4, 0xe8, 0x51, 0xd1, 0xbd, \r
-       0xa, 0x9e, 0x41, 0xfa, 0xd5, 0x7a, 0xeb, 0x3e, 0x21, 0x5c, \r
-       0x78, 0x93, 0xc5, 0xbe, 0x32, 0xd7, 0x7c, 0x49, 0xae, 0x69, \r
-       0xb7, 0xb0, 0xea, 0x1a, 0xb5, 0xf4, 0xd7, 0xf7, 0x6, 0x68, \r
-       0x1d, 0x70, 0xf2, 0x39, 0x72, 0x39, 0x1d, 0x1, 0x38, 0xaf, \r
-       0xd9, 0xef, 0xf8, 0x27, 0x3f, 0xec, 0xbd, 0xe1, 0xaf, 0x8, \r
-       0x7e, 0xcb, 0x5e, 0x1e, 0xbd, 0xf1, 0x2f, 0x86, 0xf4, 0xcd, \r
-       0x5b, 0x58, 0xf1, 0x29, 0x3a, 0xcc, 0xe7, 0x52, 0xb1, 0x49, \r
-       0x9a, 0x38, 0xe4, 00, 0x42, 0x9f, 0x38, 0x38, 0xc4, 0x6a, \r
-       0xa7, 0x1e, 0xac, 0x69, 0xdc, 0x9b, 0x5c, 0xfc, 0x36, 0xa2, \r
-       0xbf, 0xa4, 0x3d, 0x67, 0xf6, 0x53, 0xf8, 0x37, 0xe2, 0x2, \r
-       0x7f, 0xb4, 0x3e, 0x17, 0xf8, 0x52, 0xe7, 0x3e, 0xba, 0x4c, \r
-       0x23, 0xf9, 0x28, 0xae, 0x53, 0x54, 0xfd, 0x81, 0x7f, 0x67, \r
-       0xbd, 0x5c, 0x62, 0x6f, 0x85, 0x5a, 0xc, 0x5f, 0xf5, 0xeb, \r
-       0x1b, 0xc1, 0xff, 00, 0xa0, 0x30, 0xa5, 0x71, 0xf2, 0x9f, \r
-       0xcf, 0x3d, 0x7d, 0x3f, 0xff, 00, 0x4, 0xe1, 0xf8, 0x2a, \r
-       0x7e, 0x34, 0x7e, 0xd4, 0xfe, 0x18, 0x8e, 0xe2, 0x3, 0x2e, \r
-       0x8f, 0xe1, 0xf6, 0xfe, 0xdc, 0xbe, 0xc8, 0x3b, 0x71, 0x9, \r
-       0x6, 0x25, 0x27, 0xde, 0x53, 0x1f, 0xe0, 0xd, 0x7e, 0xa9, \r
-       0x6a, 0x5f, 0xf0, 0x4c, 0x4f, 0xd9, 0xc3, 0x51, 0x18, 0xff, \r
-       00, 0x84, 00, 0xda, 0xfb, 0xdb, 0x6a, 0x97, 0x69, 0xff, \r
-       00, 0xb5, 0x6b, 0xd0, 0x3e, 00, 0xfe, 0xc8, 0x5f, 0xc, \r
-       0xbf, 0x66, 0x6d, 0x43, 0x59, 0xbd, 0xf0, 0xe, 0x8d, 0x71, \r
-       0xa6, 0xdc, 0xea, 0xd1, 0xc7, 0xd, 0xd3, 0xdc, 0x5e, 0xcb, \r
-       0x72, 0x4a, 0x21, 0x62, 0xa1, 0x7c, 0xc2, 0x76, 0x8c, 0xb1, \r
-       0xce, 0x3a, 0xf1, 0xe9, 0x45, 0xc3, 0x94, 0xf6, 0x7a, 0xfc, \r
-       0xf8, 0xff, 00, 0x82, 0xc6, 0xfc, 0x66, 0x3e, 0x11, 0xf8, \r
-       0x31, 0xa1, 0x7c, 0x3f, 0xb3, 0x98, 0xa5, 0xef, 0x8a, 0x6e, \r
-       0xfc, 0xeb, 0x90, 0xa7, 0x9f, 0xb2, 0x5b, 0x95, 0x62, 0xf, \r
-       0xd6, 0x46, 0x8f, 0xfe, 0xf9, 0x35, 0xfa, 0xf, 0x5f, 0x23, \r
-       0xfe, 0xd6, 0x9f, 0xf0, 0x4f, 0x2d, 0x1b, 0xf6, 0xb2, 0xf1, \r
-       0xd5, 0xaf, 0x8a, 0x35, 0x7f, 0x1c, 0x6b, 0x1a, 0x34, 0xf6, \r
-       0x96, 0x6b, 0x65, 0x6d, 0x65, 0x6f, 0x6f, 0x14, 0x90, 0x44, \r
-       0x80, 0x96, 0x24, 0x3, 0x83, 0x96, 0x66, 0x24, 0xf3, 0xd8, \r
-       0x7a, 0x52, 0x29, 0x9f, 0x83, 0xf4, 0x57, 0xea, 0x9e, 0xa5, \r
-       0xff, 00, 0x4, 0x45, 0xb5, 0x20, 0xfd, 0x83, 0xe2, 0xc4, \r
-       0xca, 0x7b, 0xb, 0x9d, 0x10, 0x1f, 0xd5, 0x66, 0x15, 0xcf, \r
-       0x5d, 0xff, 00, 0xc1, 0x11, 0xbc, 0x42, 0xaa, 0x4d, 0xaf, \r
-       0xc5, 0x6d, 0x32, 0x46, 0xec, 0x26, 0xd1, 0xe4, 0x41, 0xf9, \r
-       0x89, 0x4f, 0xf2, 0xaa, 0xb9, 0x16, 0x67, 0xe6, 0x66, 0x7, \r
-       0xa5, 0x49, 0x14, 0xf2, 0x42, 0x7f, 0x77, 0x23, 0xc7, 0xfe, \r
-       0xeb, 0x11, 0x5f, 0xa2, 0x1a, 0x87, 0xfc, 0x11, 0x57, 0xe2, \r
-       0x44, 0x8, 0x4d, 0x9f, 0x8f, 0x3c, 0x31, 0x74, 0x7b, 0x2c, \r
-       0x91, 0xdc, 0x47, 0xff, 00, 0xb2, 0x1a, 0xe3, 0xf5, 0x4f, \r
-       0xf8, 0x23, 0xd7, 0xc7, 0x5b, 0x32, 0xdf, 0x65, 0xb9, 0xf0, \r
-       0xb5, 0xfa, 0x8e, 0x9e, 0x5e, 0xa4, 0xe8, 0x4f, 0xfd, 0xf5, \r
-       0x10, 0xa2, 0xe1, 0x66, 0x7c, 0x69, 0xa6, 0xf8, 0xcf, 0xc4, \r
-       0x1a, 0x3b, 0x87, 0xb0, 0xd7, 0x75, 0x3b, 0x17, 0x1d, 0x1a, \r
-       0xda, 0xf2, 0x48, 0xcf, 0xe8, 0xc2, 0xba, 0x9d, 0x3f, 0xf6, \r
-       0x87, 0xf8, 0xa7, 0xa5, 0x38, 0x6b, 0x4f, 0x89, 0x1e, 0x2c, \r
-       0x84, 0x8e, 0x9b, 0x75, 0xab, 0x9c, 0xf, 0xc3, 0x7d, 0x7b, \r
-       0xce, 0xa5, 0xff, 00, 0x4, 0xab, 0xfd, 0xa2, 0x74, 0xf0, \r
-       0x4a, 0x78, 0x5b, 0x4f, 0xbd, 0x3, 0xfe, 0x7d, 0x75, 0x68, \r
-       0xe, 0x7f, 0xef, 0xa6, 0x15, 0xc9, 0xea, 0x7f, 0xf0, 0x4e, \r
-       0xbf, 0xda, 0x27, 0x4a, 0x4, 0xbf, 0xc3, 0x2d, 0x46, 0x75, \r
-       0x1d, 0xed, 0xae, 0x2d, 0xe5, 0xfd, 0x16, 0x4c, 0xd0, 0x16, \r
-       0x67, 0x33, 0x61, 0xfb, 0x69, 0x7c, 0x76, 0xd3, 0x48, 0xf2, \r
-       0x3e, 0x2b, 0xf8, 0xa7, 0x8e, 0x82, 0x4d, 0x41, 0xe4, 0x1f, \r
-       0xf8, 0xf6, 0x6b, 0xa1, 0xb4, 0xff, 00, 0x82, 0x86, 0xfe, \r
-       0xd1, 0x56, 0x61, 0x44, 0x7f, 0x14, 0xb5, 0x56, 0x3, 0xfe, \r
-       0x7a, 0xc1, 0x6f, 0x27, 0xfe, 0x85, 0x19, 0xae, 0x67, 0x53, \r
-       0xfd, 0x8d, 0xfe, 0x39, 0x69, 0x19, 0xfb, 0x4f, 0xc2, 0x9f, \r
-       0x15, 0xe0, 0x75, 0x31, 0x69, 0x92, 0x4b, 0xff, 00, 0xa0, \r
-       0x3, 0x5c, 0xdd, 0xd7, 0xec, 0xf7, 0xf1, 0x4a, 0xc7, 0x3f, \r
-       0x68, 0xf8, 0x6f, 0xe2, 0xd8, 0x71, 0xd7, 0x7e, 0x87, 0x72, \r
-       0x3f, 0xf6, 0x4a, 0x3, 0x53, 0xda, 0x2c, 0xbf, 0xe0, 0xa7, \r
-       0x9f, 0xb4, 0x7d, 0x96, 0x3f, 0xe2, 0xbf, 0x17, 00, 0x76, \r
-       0x9f, 0x4a, 0xb4, 0x6c, 0xff, 00, 0xe4, 0x2a, 0xea, 0x34, \r
-       0xff, 00, 0xf8, 0x2b, 0x87, 0xed, 0x5, 0x64, 0x81, 0x65, \r
-       0xd4, 0x3c, 0x3f, 0x7d, 0x8e, 0xf7, 0x1a, 0x4a, 0x82, 0x7f, \r
-       0xef, 0x96, 0x5a, 0xf9, 0x4e, 0xf7, 0xe1, 0xaf, 0x8b, 0xf4, \r
-       0xd0, 0x4d, 0xdf, 0x85, 0x75, 0xbb, 0x50, 0x3a, 0xf9, 0xfa, \r
-       0x74, 0xc9, 0x8f, 0xcd, 0x6b, 0xe, 0xeb, 0x4f, 0xba, 0xb2, \r
-       0x38, 0xb8, 0xb6, 0x9a, 0x3, 0xe9, 0x2c, 0x65, 0x7f, 0x9d, \r
-       0x1, 0x76, 0x7d, 0xe7, 0xa5, 0x7f, 0xc1, 0x66, 0x3e, 0x30, \r
-       0xda, 0x15, 0xfb, 0x6f, 0x87, 0x7c, 0x2b, 0x7e, 0x7, 0x5f, \r
-       0xf4, 0x79, 0xa2, 0xcf, 0xe5, 0x25, 0x75, 0x76, 0x1f, 0xf0, \r
-       0x5b, 0x3f, 0x18, 0xc5, 0x8f, 0xb6, 0xfc, 0x33, 0xd0, 0xee, \r
-       0x3d, 0x7c, 0x8d, 0x42, 0x68, 0xbf, 0x9a, 0xb5, 0x7e, 0x6c, \r
-       0xe4, 0x52, 0xd1, 0x60, 0xbb, 0x3f, 0x53, 0x74, 0xef, 0xf8, \r
-       0x2d, 0xd0, 0x38, 0xfb, 0x7f, 0xc2, 0x82, 0xbe, 0xbf, 0x66, \r
-       0xd6, 0xb3, 0xfc, 0xe1, 0x15, 0xd2, 0xd9, 0xff, 00, 0xc1, \r
-       0x6c, 0xfc, 0x1a, 0xe0, 0x7d, 0xaf, 0xe1, 0xae, 0xbb, 0x11, \r
-       0xef, 0xe4, 0xdf, 0x42, 0xff, 00, 0xcc, 0x2d, 0x7e, 0x46, \r
-       0xd1, 0x45, 0x82, 0xec, 0xfd, 0x8f, 0xb1, 0xff, 00, 0x82, \r
-       0xd2, 0xfc, 0x29, 0x9b, 0x2, 0xe7, 0xc1, 0x9e, 0x2e, 0xb6, \r
-       0xf5, 0x2b, 0x1d, 0xb3, 0x8f, 0xfd, 0x1c, 0x2b, 0xa4, 0xd3, \r
-       0xbf, 0xe0, 0xb0, 0xff, 00, 0x2, 0xef, 0x31, 0xf6, 0x9b, \r
-       0x5f, 0x14, 0xd8, 0x13, 0xff, 00, 0x3d, 0x74, 0xd4, 0x70, \r
-       0x3f, 0xef, 0x89, 0xd, 0x7e, 0x26, 0x51, 0x45, 0x87, 0xcc, \r
-       0xcf, 0xdd, 0xdd, 0x3f, 0xfe, 0xa, 0xad, 0xfb, 0x3a, 0x5f, \r
-       0x85, 0xdd, 0xe2, 0xbb, 0xfb, 0x46, 0x3f, 0xc3, 0x71, 0xa3, \r
-       0xdc, 0x8c, 0x7e, 0x21, 0x8, 0xae, 0xb7, 0x4b, 0xff, 00, \r
-       0x82, 0x89, 0x7e, 0xce, 0xfa, 0xaa, 0x6, 0x4f, 0x89, 0xba, \r
-       0x6d, 0xb9, 0x3f, 0xc3, 0x75, 0xc, 0xd1, 0x1f, 0xd5, 0x2b, \r
-       0xf9, 0xf5, 0xa2, 0x8b, 0x7, 0x31, 0xfd, 0x18, 0x69, 0xdf, \r
-       0xb6, 0x8f, 0xc0, 0x8d, 0x51, 0x41, 0x83, 0xe2, 0xcf, 0x84, \r
-       0xf9, 0xe8, 0x25, 0xd4, 0xe3, 0x88, 0xfe, 0x4e, 0x41, 0xae, \r
-       0xa3, 0x4a, 0xfd, 0xa0, 0xbe, 0x18, 0x6b, 0x60, 0x7d, 0x83, \r
-       0xe2, 0x1f, 0x85, 0xee, 0xf3, 0xff, 00, 0x3c, 0xb5, 0x7b, \r
-       0x73, 0xff, 00, 0xb3, 0xd7, 0xf3, 0x4f, 0x45, 0x2b, 0x7, \r
-       0x31, 0xfd, 0x3c, 0xd9, 0xf8, 0xff, 00, 0xc2, 0xfa, 0x81, \r
-       0xc5, 0xaf, 0x89, 0x34, 0x8b, 0x92, 0x7b, 0x43, 0x7d, 0x13, \r
-       0xff, 00, 0x26, 0xad, 0x58, 0x75, 0x5b, 0x2b, 0x83, 0x88, \r
-       0xaf, 0x2d, 0xe4, 0x3e, 0x89, 0x2a, 0x9f, 0xeb, 0x5f, 0xcb, \r
-       0x86, 0x7, 0xa5, 0x5a, 0xb4, 0xd5, 0x2f, 0x34, 0xf6, 0x6, \r
-       0xd6, 0xee, 0x7b, 0x62, 0x3a, 0x18, 0x65, 0x64, 0xfe, 0x46, \r
-       0x8b, 0xf, 0x98, 0xfe, 0xa3, 0x83, 0x3, 0xd0, 0x83, 0x4b, \r
-       0x5f, 0xcc, 0x86, 0x9f, 0xf1, 0x5b, 0xc6, 0xda, 0x49, 0x6, \r
-       0xc7, 0xc6, 0x3a, 0xfd, 0x91, 0x1d, 0xd, 0xbe, 0xa9, 0x3c, \r
-       0x7f, 0xc9, 0xeb, 0xa8, 0xd2, 0xff, 00, 0x6a, 0x6f, 0x8c, \r
-       0x5a, 0x2c, 0x8a, 0xf6, 0x9f, 0x14, 0x3c, 0x5a, 0x85, 0x7a, \r
-       0x6f, 0xd6, 0x27, 0x90, 0x7e, 0x4c, 0xc4, 0x51, 0x60, 0xe6, \r
-       0x3f, 0xa4, 0x7a, 0x2b, 0xf9, 0xe6, 0xb3, 0xfd, 0xbf, 0x3f, \r
-       0x68, 0x4b, 0x12, 0xbe, 0x5f, 0xc5, 0x5d, 0x71, 0xb6, 0xf4, \r
-       0x12, 0x98, 0xe4, 0x1f, 0xf8, 0xf2, 0x1a, 0xe8, 0xec, 0x7f, \r
-       0xe0, 0xa6, 0x9f, 0xb4, 0x7d, 0x96, 0xd1, 0xff, 00, 0xb, \r
-       0xd, 0xee, 0x15, 0x7b, 0x4f, 0xa6, 0x5a, 0x36, 0x7e, 0xa7, \r
-       0xca, 0xcd, 0x16, 0xe, 0x64, 0x7e, 0xfb, 0x51, 0x5f, 0x86, \r
-       0x76, 0x3f, 0xf0, 0x56, 0xcf, 0xda, 0x12, 0xce, 0x35, 0x57, \r
-       0xd5, 0x34, 0x2b, 0xbc, 0x7f, 0x14, 0xfa, 0x42, 0x64, 0xff, \r
-       00, 0xdf, 0x24, 0x56, 0xdd, 0x97, 0xfc, 0x16, 0x33, 0xe3, \r
-       0xad, 0xb6, 0x4, 0xda, 0x7f, 0x84, 0x2e, 0xfd, 0xe4, 0xd3, \r
-       0x66, 0x53, 0xff, 00, 0x8e, 0xce, 0x28, 0xb0, 0x5d, 0x1f, \r
-       0xb6, 0x34, 0x57, 0xe3, 0xb6, 0x9d, 0xff, 00, 0x5, 0xa8, \r
-       0xf8, 0x9b, 0x2, 0xa8, 0xbd, 0xf0, 0x3f, 0x85, 0xee, 0xdb, \r
-       0xb9, 0x8d, 0xae, 0x22, 0xcf, 0xfe, 0x3e, 0x6b, 0xa5, 0xd3, \r
-       0xff, 00, 0xe0, 0xb7, 0x1a, 0xfc, 0x78, 0xfb, 0x77, 0xc2, \r
-       0xbd, 0x36, 0x7f, 0xfa, 0xf7, 0xd5, 0xe4, 0x8f, 0xf9, 0xc4, \r
-       0xd4, 0x58, 0x77, 0x47, 0xeb, 0x25, 0x15, 0xf9, 0x8b, 0xa5, \r
-       0x7f, 0xc1, 0x6e, 0x34, 0x77, 0x51, 0xfd, 0xa5, 0xf0, 0xae, \r
-       0xfa, 0x16, 0xef, 0xf6, 0x5d, 0x5d, 0x24, 0x1f, 0xf8, 0xf4, \r
-       0x6b, 0x5d, 0xd, 0xaf, 0xfc, 0x16, 0xbf, 0xe1, 0xe3, 0x91, \r
-       0xf6, 0x9f, 0x87, 0xbe, 0x27, 0x88, 0x7a, 0xc5, 0x35, 0xb3, \r
-       0xff, 00, 0x37, 0x5a, 0x2, 0xe8, 0xfd, 0x19, 0xa2, 0xbe, \r
-       0x1, 0xd3, 0x7f, 0xe0, 0xb3, 0xbf, 0x7, 0xae, 0xdc, 0xb, \r
-       0xaf, 0xc, 0x78, 0xc2, 0xc4, 0x7f, 0x79, 0xed, 0xad, 0x9c, \r
-       0x7f, 0xe3, 0xb3, 0x1a, 0xeb, 0x74, 0xef, 0xf8, 0x2b, 0x87, \r
-       0xec, 0xfb, 0x79, 0x8f, 0x3b, 0x50, 0xd7, 0xac, 0x49, 0xff, \r
-       00, 0x9e, 0xfa, 0x4b, 0x9c, 0x7f, 0xdf, 0x24, 0xd2, 0xb, \r
-       0xa3, 0xed, 0x1a, 0x2b, 0xe5, 0x5d, 0x33, 0xfe, 0xa, 0x7d, \r
-       0xfb, 0x39, 0xea, 0x78, 0x1f, 0xf0, 0x9d, 0x3d, 0xa1, 0x3d, \r
-       0xae, 0xb4, 0xcb, 0x94, 0xfd, 0x7c, 0xbc, 0x57, 0x57, 0xa6, \r
-       0xfe, 0xdf, 0x1f, 0xb3, 0xee, 0xa8, 0x7, 0x95, 0xf1, 0x4f, \r
-       0x42, 0x8c, 0x9e, 0xd7, 0x12, 0x3c, 0x47, 0xff, 00, 0x1e, \r
-       0x51, 0x40, 0xcf, 0x7f, 0xa2, 0xbc, 0x9b, 0x4e, 0xfd, 0xad, \r
-       0x7e, 0xb, 0x6a, 0xc4, 0xb, 0x5f, 0x8a, 0x7e, 0x13, 0x90, \r
-       0x9e, 0xcd, 0xab, 0xc2, 0xa7, 0xf5, 0x61, 0x5d, 0x4d, 0x87, \r
-       0xc6, 0x4f, 00, 0xea, 0xb8, 0xfb, 0x17, 0x8d, 0xbc, 0x3b, \r
-       0x77, 0x9e, 0x9e, 0x4e, 0xab, 0x3, 0x67, 0xf2, 0x7a, 00, \r
-       0xec, 0x28, 0xac, 0x9b, 0x7f, 0x17, 0x68, 0x57, 0x78, 0xf2, \r
-       0x35, 0xad, 0x3a, 0x6c, 0xff, 00, 0xcf, 0x3b, 0xa8, 0xdb, \r
-       0xf9, 0x1a, 0xd0, 0x8a, 0xf2, 0x9, 0xff, 00, 0xd5, 0xcf, \r
-       0x1c, 0x9f, 0xee, 0xb8, 0x34, 0x1, 0x35, 0x14, 0x51, 0x40, \r
-       0x5, 0x14, 0x51, 0x40, 0x5, 0x14, 0x51, 0x40, 0x5, 0x14, \r
-       0x51, 0x40, 0x5, 0x23, 0x28, 0x60, 0x41, 00, 0x83, 0xd4, \r
-       0x1a, 0x5a, 0x28, 0x3, 0x97, 0xd5, 0xbe, 0x19, 0x78, 0x5b, \r
-       0x5b, 0x2c, 0xd7, 0x5a, 0x25, 0xae, 0xf6, 0xeb, 0x24, 0x4b, \r
-       0xe5, 0x31, 0xfc, 0x57, 0x15, 0xc5, 0xea, 0xff, 00, 0xb3, \r
-       0x7e, 0x83, 0x76, 0x4b, 0x58, 0x5e, 0xdd, 0xd8, 0x1e, 0xca, \r
-       0xc4, 0x4a, 0xbf, 0xae, 0xf, 0xeb, 0x5e, 0xb9, 0x45, 0x79, \r
-       0xd5, 0xb2, 0xec, 0x1e, 0x23, 0xf8, 0x94, 0x93, 0xf9, 0x59, \r
-       0xfd, 0xe8, 0xc2, 0x74, 0x29, 0x4f, 0xe2, 0x8a, 0x3e, 0x7b, \r
-       0xbd, 0xfd, 0x99, 0xb5, 0x38, 0xf2, 0x6d, 0x35, 0x9b, 0x59, \r
-       0x87, 0x61, 0x34, 0x4d, 0x1f, 0xf2, 0xdd, 0x58, 0x17, 0xbf, \r
-       0xb3, 0xff, 00, 0x8b, 0xad, 0x9, 0xf2, 0xe0, 0xb5, 0xbb, \r
-       0x3, 0xbc, 0x33, 0x8f, 0xfd, 0x9b, 0x15, 0xf5, 0x1d, 0x15, \r
-       0xe4, 0x54, 0xe1, 0xcc, 0x4, 0xfe, 0x14, 0xd7, 0xa3, 0xff, \r
-       00, 0x3b, 0x9c, 0xb2, 0xc0, 0x51, 0x7b, 0x68, 0x7c, 0x87, \r
-       0x3f, 0xc2, 0x3f, 0x18, 0x5b, 0xe7, 0x76, 0x83, 0x72, 0xc3, \r
-       0xd5, 0xa, 0xb7, 0xf2, 0x35, 0x49, 0xfe, 0x1d, 0x78, 0xa2, \r
-       0x33, 0xcf, 0x87, 0xf5, 0x1f, 0xc2, 0xd9, 0xcf, 0xf4, 0xaf, \r
-       0xb2, 0x68, 0xae, 0x27, 0xc2, 0xd8, 0x6e, 0x95, 0x25, 0xf8, \r
-       0x7f, 0x91, 0x93, 0xcb, 0xa1, 0xd2, 0x4c, 0xf8, 0xd0, 0x7c, \r
-       0x3d, 0xf1, 0x3b, 0x1e, 0x3c, 0x3f, 0xa9, 0x7f, 0xe0, 0x2b, \r
-       0xff, 00, 0x85, 0x5c, 0xb7, 0xf8, 0x53, 0xe2, 0xeb, 0xaf, \r
-       0xb9, 0xa0, 0x5d, 0x8f, 0xfa, 0xe8, 0x2, 0x7f, 0xe8, 0x44, \r
-       0x57, 0xd7, 0xf4, 0x50, 0xb8, 0x5b, 0xf, 0xd6, 0xa4, 0xbf, \r
-       0xf, 0xf2, 0x5, 0x97, 0x43, 0xac, 0x99, 0xf2, 0xe6, 0x9f, \r
-       0xf0, 0x3, 0xc5, 0xb7, 0xa4, 0x79, 0xb0, 0x5b, 0x59, 0x2f, \r
-       0xac, 0xf3, 0x83, 0xfa, 0x2e, 0x6b, 0xa9, 0xd2, 0xbf, 0x66, \r
-       0x59, 0x4b, 0x2b, 0x6a, 0x5a, 0xda, 0x2a, 0xf7, 0x4b, 0x58, \r
-       0x72, 0x7f, 0xef, 0xa6, 0x3f, 0xd2, 0xbd, 0xea, 0x8a, 0xef, \r
-       0xa5, 0xc3, 0xb8, 0xa, 0x7a, 0xca, 0x2e, 0x5e, 0xaf, 0xfc, \r
-       0xac, 0x6d, 0x1c, 0xd, 0x18, 0xee, 0xae, 0x71, 0x5e, 0x1e, \r
-       0xf8, 0x3d, 0xe1, 0x6f, 0xe, 0xec, 0x78, 0xf4, 0xd5, 0xbc, \r
-       0xb8, 0x5e, 0x7c, 0xeb, 0xc3, 0xe6, 0x1c, 0xfa, 0xe0, 0xf0, \r
-       0x3f, 0x1, 0x5d, 0xa0, 0x1, 0x40, 00, 0x60, 0xe, 0x80, \r
-       0x52, 0xd1, 0x5e, 0xfd, 0x1a, 0x14, 0xb0, 0xf1, 0xe5, 0xa5, \r
-       0x15, 0x15, 0xe4, 0x8e, 0xd8, 0xc2, 0x30, 0x56, 0x8a, 0xb0, \r
-       0x51, 0x45, 0x15, 0xb9, 0x61, 0x45, 0x14, 0x50, 0x1, 0x45, \r
-       0x14, 0x50, 0x7, 0x1, 0xf1, 0xa6, 0xef, 0xec, 0xde, 0x11, \r
-       0x7f, 0x73, 0x5f, 0xa, 0x6b, 0x72, 0x79, 0x97, 0x97, 0xc, \r
-       0x7b, 0xb1, 0xaf, 0xb5, 0x7f, 0x68, 0x1b, 0x9f, 0x27, 0xc3, \r
-       0x8, 0x9e, 0xb9, 0x35, 0xf1, 0x1e, 0xa8, 0xfb, 0xa4, 0x94, \r
-       0xfa, 0xb1, 0xaf, 0xce, 0xf3, 0xd9, 0x73, 0x63, 0x23, 0x1e, \r
-       0xc8, 0xfc, 0xfb, 0x89, 0x67, 0xef, 0x24, 0x78, 0x67, 0xc7, \r
-       0x2b, 0x8d, 0x9a, 0x5c, 0xe3, 0xfd, 0x93, 0xfc, 0xab, 0xf5, \r
-       0x97, 0xf6, 0x7f, 0xd2, 0x46, 0x85, 0xf0, 0x37, 0xc0, 0x16, \r
-       0xb, 0x9c, 0x41, 0xa1, 0x59, 0xaf, 0x3e, 0xbe, 0x4a, 0xe6, \r
-       0xbf, 0x22, 0xfe, 0x38, 0x39, 0x9a, 0x23, 0xa, 0xe5, 0x9a, \r
-       0x46, 0x8, 00, 0xea, 0x49, 0xe2, 0xbf, 0x68, 0x3c, 0x33, \r
-       0x62, 0x9a, 0x5f, 0x86, 0xf4, 0xab, 0x38, 0xc6, 0xd4, 0xb7, \r
-       0xb4, 0x8a, 0x25, 0x7, 0xb0, 0x54, 0x3, 0xfa, 0x57, 0xd5, \r
-       0xe5, 0x6a, 0xd4, 0x51, 0x5c, 0x1d, 0x1b, 0x61, 0x27, 0x2e, \r
-       0xf2, 0x66, 0x9d, 0x14, 0x51, 0x5e, 0xc9, 0xf7, 0xe7, 0xe7, \r
-       0xef, 0xc5, 0xdf, 0x13, 0x3f, 0x8b, 0x3e, 0x26, 0xf8, 0x82, \r
-       0xf9, 0xf8, 0xb, 0x72, 0x6d, 0x90, 0x7a, 0x2c, 0x7f, 0x20, \r
-       0xff, 00, 0xd0, 0x49, 0xfc, 0x6b, 0xdc, 0xbf, 0x64, 0xbf, \r
-       0x8, 0xf9, 0x76, 0xd7, 0xda, 0xe4, 0xa9, 0xc9, 0x3e, 0x54, \r
-       0x44, 0xfe, 0xb5, 0xf3, 0x7d, 0xfc, 0x6f, 0xa9, 0xf8, 0xdf, \r
-       0x58, 0x86, 0x31, 0xba, 0x49, 0x35, 0x3b, 0x85, 00, 0x7a, \r
-       0xf9, 0xad, 0x5f, 0x7c, 0x7c, 0x35, 0xf0, 0xd2, 0x78, 0x53, \r
-       0xc1, 0x9a, 0x6d, 0x82, 0xa0, 0x46, 0x58, 0x83, 0x3f, 0xfb, \r
-       0xc4, 0x57, 0xc1, 0x65, 0x94, 0x25, 0x5f, 0x30, 0x95, 0x59, \r
-       0xfd, 0x9b, 0xbf, 0x9b, 0x3f, 0x39, 0xe1, 0xfa, 0x6f, 0x17, \r
-       0x89, 0x9e, 0x2a, 0x7d, 0x2e, 0xfe, 0x6c, 0xea, 0x28, 0xa2, \r
-       0x8a, 0xfb, 0xd3, 0xf4, 0x60, 0xa2, 0x8a, 0x28, 00, 0xa2, \r
-       0x9a, 0xe8, 0x1c, 0x60, 0xe7, 0xd7, 0x83, 0x8a, 0x5c, 0x7b, \r
-       0x9a, 00, 0xaf, 0x73, 0xa6, 0xda, 0x5e, 0x29, 0x17, 0x16, \r
-       0xb0, 0xce, 0xf, 0x69, 0x23, 0xd, 0xfc, 0xc5, 0x4f, 0x1c, \r
-       0x49, 0xc, 0x6b, 0x1c, 0x68, 0xb1, 0xc6, 0x80, 0x2a, 0xaa, \r
-       0x8c, 00, 0x7, 0x40, 0x5, 0x3a, 0x8a, 00, 0x28, 0xa2, \r
-       0x8a, 00, 0x28, 0xa2, 0x8a, 00, 0x28, 0xa2, 0x8a, 00, \r
-       0x28, 0xa2, 0x8a, 00, 0x28, 0xa2, 0x8a, 00, 0x28, 0xa2, \r
-       0x8a, 00, 0x28, 0xa2, 0x8a, 00, 0x46, 0x50, 0xc3, 0x4, \r
-       0x2, 0x3d, 0xd, 0x67, 0x5e, 0x78, 0x6b, 0x48, 0xd4, 0x3f, \r
-       0xe3, 0xeb, 0x4a, 0xb2, 0xb9, 0xff, 00, 0xae, 0xd6, 0xe8, \r
-       0xff, 00, 0xcc, 0x56, 0x95, 0x14, 0x1, 0xc5, 0x6a, 0x9f, \r
-       0x4, 0xfe, 0x1e, 0xeb, 0x60, 0x8d, 0x43, 0xc0, 0xde, 0x1c, \r
-       0xbd, 0xdd, 0xd7, 0xcf, 0xd2, 0xa0, 0x7c, 0xfe, 0x6b, 0x5c, \r
-       0xa6, 0xa7, 0xfb, 0x1f, 0x7c, 0x10, 0xd6, 0x14, 0x8b, 0xbf, \r
-       0x85, 0x5e, 0x13, 0x70, 0x7a, 0xec, 0xd2, 0xa2, 0x4f, 0xfd, \r
-       0x4, 0xa, 0xf6, 0xa, 0x28, 0x3, 0xe7, 0x4d, 0x57, 0xfe, \r
-       0x9, 0xe5, 0xfb, 0x3c, 0x6a, 0xe0, 0x89, 0x7e, 0x18, 0x69, \r
-       0x50, 0xe7, 0xfe, 0x7d, 0x64, 0x9a, 0xf, 0xfd, 0x1, 0xc5, \r
-       0x72, 0xb7, 0x9f, 0xf0, 0x4a, 0xff, 00, 0xd9, 0xbe, 0xe8, \r
-       0xb1, 0x5f, 0x5, 0xdd, 0xdb, 0x13, 0xff, 00, 0x3c, 0x75, \r
-       0xab, 0xce, 0x3f, 0x3, 0x29, 0x15, 0xf5, 0xad, 0x14, 0x1, \r
-       0xf1, 0x76, 0xa3, 0xff, 00, 0x4, 0x8e, 0xfd, 0x9f, 0x6f, \r
-       0x50, 0xac, 0x1a, 0x7e, 0xbf, 0xa7, 0x9f, 0xef, 0x41, 0xab, \r
-       0xbb, 0x1f, 0xfc, 0x7c, 0x35, 0x72, 0xba, 0x97, 0xfc, 0x11, \r
-       0x97, 0xe0, 0xe5, 0xca, 0x9f, 0xb1, 0x78, 0x93, 0xc5, 0xd6, \r
-       0x4d, 0xfe, 0xd5, 0xd5, 0xbc, 0x80, 0x7e, 0x70, 0x8a, 0xfb, \r
-       0xee, 0x8a, 0x5, 0x64, 0x7e, 0x6d, 0xea, 0x1f, 0xf0, 0x44, \r
-       0xdf, 0x5, 0xbc, 0x6d, 0xf6, 0x1f, 0x89, 0x1a, 0xf4, 0x2f, \r
-       0xfc, 0x3f, 0x68, 0xb3, 0x82, 0x40, 0x3f, 0x2d, 0xb5, 0xc8, \r
-       0xea, 0x1f, 0xf0, 0x44, 0x5b, 0x80, 0x18, 0xd8, 0xfc, 0x58, \r
-       0x8c, 0x9f, 0xe1, 0x5b, 0x8d, 0x10, 0x8f, 0xcc, 0x89, 0xbf, \r
-       0xa5, 0x7e, 0xa9, 0x51, 0x4c, 0x2c, 0x8f, 0xc8, 0x5b, 0xff, \r
-       00, 0xf8, 0x22, 0x7f, 0x8e, 0xe2, 0xc, 0x6c, 0xfe, 0x22, \r
-       0xf8, 0x7e, 0xe3, 0xfb, 0xa2, 0x6b, 0x49, 0xe3, 0xcf, 0xe5, \r
-       0xba, 0xb9, 0x1d, 0x43, 0xfe, 0x8, 0xd9, 0xf1, 0xba, 0xd9, \r
-       0x9b, 0xec, 0xba, 0xcf, 0x83, 0xef, 0x10, 0x74, 0xcd, 0xfc, \r
-       0xf1, 0xb1, 0xfc, 0xc, 0x18, 0xfd, 0x6b, 0xf6, 0xa2, 0x8a, \r
-       0x2e, 0x16, 0x47, 0xe1, 0xd5, 0xd7, 0xfc, 0x12, 0x2b, 0xf6, \r
-       0x81, 0xb7, 0x56, 0x29, 0x69, 0xe1, 0xcb, 0x9c, 0x76, 0x8b, \r
-       0x56, 0x19, 0x3f, 0xf7, 0xd2, 0xa, 0xe6, 0x35, 0x1f, 0xf8, \r
-       0x25, 0xef, 0xed, 0x1b, 0x60, 0x5b, 0x6f, 0x81, 0xa2, 0xbc, \r
-       0xb, 0xde, 0xdb, 0x55, 0xb5, 0x39, 0xfa, 0x66, 0x40, 0x6b, \r
-       0xf7, 0xb2, 0x8a, 0x2e, 0x2e, 0x54, 0x7f, 0x3d, 0x77, 0xdf, \r
-       0xf0, 0x4f, 0xdf, 0xda, 0x1b, 0x4f, 0x24, 0x49, 0xf0, 0xb3, \r
-       0x59, 0x7c, 0x77, 0x80, 0xc5, 0x2f, 0xfe, 0x82, 0xe6, 0xb9, \r
-       0x2d, 0x53, 0xf6, 0x4e, 0xf8, 0xd1, 0xa3, 0xbb, 0x25, 0xd7, \r
-       0xc2, 0xdf, 0x16, 0x23, 0x2f, 0x5f, 0x2f, 0x48, 0x9a, 0x4f, \r
-       0xfd, 0x5, 0x4d, 0x7f, 0x48, 0x34, 0x51, 0x70, 0xe5, 0x3f, \r
-       0x99, 0x4d, 0x47, 0xe1, 0xf, 0x8e, 0xf4, 0x76, 0x2b, 0x7d, \r
-       0xe0, 0xaf, 0x11, 0x59, 0xb0, 0xea, 0x27, 0xd2, 0xa7, 0x4c, \r
-       0x7e, 0x69, 0x5c, 0xf5, 0xe6, 0x8d, 0xa8, 0x69, 0xcc, 0x56, \r
-       0xee, 0xc6, 0xe6, 0xd4, 0x8e, 0xa2, 0x68, 0x59, 0x3f, 0x98, \r
-       0xaf, 0xea, 0x2c, 0x80, 0x7a, 0x8a, 0xad, 0x71, 0xa5, 0x59, \r
-       0x5d, 0xff, 00, 0xaf, 0xb3, 0xb7, 0x9b, 0xfe, 0xba, 0x44, \r
-       0xad, 0xfc, 0xc5, 0x17, 0xe, 0x53, 0xf9, 0x70, 0xc8, 0xf5, \r
-       0xa5, 0xaf, 0xe9, 0xe6, 0xeb, 0xe1, 0xf7, 0x85, 0xaf, 0xb3, \r
-       0xf6, 0x9f, 0xd, 0x69, 0x17, 0x19, 0xeb, 0xe6, 0xd8, 0x44, \r
-       0xd9, 0xfc, 0xd6, 0xb9, 0xcd, 0x4f, 0xf6, 0x78, 0xf8, 0x5b, \r
-       0xac, 0xe7, 0xed, 0xdf, 0xe, 0xbc, 0x2d, 0x73, 0x9e, 0xbe, \r
-       0x66, 0x91, 0x1, 0xcf, 0xfe, 0x39, 0x45, 0xc5, 0xca, 0x7f, \r
-       0x35, 0x34, 0x57, 0xf4, 0x53, 0xa8, 0xfe, 0xc4, 0x7f, 0x1, \r
-       0x75, 0x56, 0x2d, 0x3f, 0xc2, 0x7f, 0xb, 0x86, 0x3d, 0x4c, \r
-       0x36, 0xb, 0x17, 0xfe, 0x83, 0x8a, 0xe5, 0xb5, 0x3f, 0xf8, \r
-       0x26, 0xf7, 0xec, 0xeb, 0xaa, 0x67, 0x77, 0xc3, 0x8b, 0x4b, \r
-       0x62, 0x7f, 0xe7, 0xd6, 0xee, 0xe2, 0x2f, 0xe5, 0x25, 0x17, \r
-       0xe, 0x53, 0xf9, 0xff, 00, 0xa2, 0xbf, 0x75, 0x35, 0x5f, \r
-       0xf8, 0x24, 0xf7, 0xec, 0xf1, 0xa8, 0xee, 0x31, 0x78, 0x7f, \r
-       0x56, 0xd3, 0xc9, 0xef, 0x6b, 0xab, 0xcd, 0xc7, 0xe0, 0xe5, \r
-       0xab, 0x91, 0xd4, 0x3f, 0xe0, 0x8d, 0x9f, 0x5, 0x2e, 0x77, \r
-       0x7d, 0x9b, 0x5a, 0xf1, 0x75, 0x91, 0x3d, 0x36, 0xdf, 0x42, \r
-       0xe0, 0x7f, 0xdf, 0x50, 0xd3, 0xb8, 0x72, 0x9f, 0x8b, 0x34, \r
-       0x57, 0xec, 0x35, 0xd7, 0xfc, 0x11, 0x53, 0xe1, 0x9b, 0x83, \r
-       0xf6, 0x7f, 0x1e, 0x78, 0xae, 0x13, 0xdb, 0xcc, 0x5b, 0x67, \r
-       0x3, 0xf2, 0x8c, 0x57, 0x3f, 0xa8, 0x7f, 0xc1, 0x12, 0x7c, \r
-       0x3a, 0xc0, 0xfd, 0x87, 0xe2, 0x8e, 0xa9, 0x19, 0xec, 0x2e, \r
-       0x34, 0xb8, 0xdf, 0xf5, 0xe, 0x28, 0xb8, 0xac, 0xcf, 0xc9, \r
-       0x9a, 0x2b, 0xf4, 0xeb, 0x51, 0xff, 00, 0x82, 0x23, 0x6a, \r
-       0xe1, 0x98, 0xd8, 0x7c, 0x56, 0xb2, 0x65, 0xec, 0xb7, 0x1a, \r
-       0x33, 0x83, 0xf9, 0x89, 0x4f, 0xf2, 0xae, 0x5b, 0x52, 0xff, \r
-       00, 0x82, 0x2b, 0x7c, 0x4a, 0x81, 0x8f, 0xd8, 0x7c, 0x75, \r
-       0xe1, 0x8b, 0xb5, 0x1d, 0x3c, 0xe4, 0xb8, 0x88, 0x9f, 0xc9, \r
-       0x1a, 0x8b, 0x85, 0x99, 0xf9, 0xdd, 0x49, 0x5f, 0x73, 0xea, \r
-       0x7f, 0xf0, 0x47, 0x7f, 0x8e, 0x76, 0x84, 0xfd, 0x92, 0xf7, \r
-       0xc2, 0xb7, 0xeb, 0xfe, 0xce, 0xa3, 0x22, 0x1f, 0xfc, 0x7a, \r
-       0x2a, 0xe3, 0xb5, 0x4f, 0xf8, 0x25, 0x87, 0xed, 0x1b, 0xa7, \r
-       0x48, 0x56, 0x2f, 0x7, 0xd9, 0xea, 00, 0x7f, 0x1d, 0xae, \r
-       0xaf, 0x6d, 0x83, 0xff, 00, 0x7d, 0xba, 0x9a, 0x2e, 0x16, \r
-       0x67, 0xc9, 0x40, 0xed, 0x39, 0x1c, 0x1f, 0x51, 0x5a, 0xda, \r
-       0x77, 0x8b, 0xb5, 0xdd, 0x1d, 0x81, 0xb0, 0xd6, 0xb5, 0x1b, \r
-       0x12, 0x3a, 0x1b, 0x6b, 0xb9, 0x23, 0xc7, 0xe4, 0x45, 0x7b, \r
-       0xe5, 0xdf, 0xfc, 0x13, 0x8f, 0xf6, 0x8e, 0xb3, 0x7d, 0xad, \r
-       0xf0, 0xc2, 0xfe, 0x4f, 0x78, 0x6f, 0x2d, 0x5c, 0x7e, 0x92, \r
-       0xd6, 0xe, 0xa3, 0xfb, 0xc, 0x7c, 0x7e, 0xd2, 0x89, 0x13, \r
-       0xfc, 0x28, 0xf1, 0x23, 0x63, 0xbc, 0x16, 0xbe, 0x70, 0xfc, \r
-       0xd0, 0x9a, 0x3, 0x53, 0x85, 0xb0, 0xf8, 0xf3, 0xf1, 0x2f, \r
-       0x4b, 0x60, 0xd6, 0x9f, 0x10, 0x7c, 0x53, 0x6e, 0x47, 0x4d, \r
-       0x9a, 0xcd, 0xc0, 0xc7, 0xfe, 0x3f, 0x5d, 0x4e, 0x9f, 0xfb, \r
-       0x63, 0xfc, 0x71, 0xd2, 0xd9, 0x4d, 0xbf, 0xc5, 0x5f, 0x15, \r
-       0x64, 0x74, 0xf3, 0x75, 0x29, 0x25, 0x1f, 0x93, 0x13, 0x58, \r
-       0xfa, 0xaf, 0xec, 0xcb, 0xf1, 0x73, 0x44, 0x24, 0x5e, 0xfc, \r
-       0x32, 0xf1, 0x64, 0x4, 0x7a, 0xe8, 0xd7, 0x7, 0xf9, 0x25, \r
-       0x73, 0x1a, 0x9f, 0xc3, 0x3f, 0x18, 0x68, 0x80, 0x9d, 0x47, \r
-       0xc2, 0x7a, 0xe5, 0x80, 0x1d, 0x4d, 0xd6, 0x9b, 0x34, 0x7f, \r
-       0xfa, 0x12, 0x8a, 0x3, 0x53, 0xda, 0x6c, 0x7f, 0xe0, 0xa2, \r
-       0x5f, 0xb4, 0x55, 0x86, 0xd0, 0xbf, 0x13, 0xf5, 0x39, 0x40, \r
-       0xed, 0x3c, 0x16, 0xf2, 0x7f, 0x38, 0xeb, 0xa8, 0xd3, 0xbf, \r
-       0xe0, 0xa9, 0xdf, 0xb4, 0x66, 0x9e, 0x81, 0x4f, 0x8c, 0x6d, \r
-       0x2e, 0xc0, 0xff, 00, 0x9f, 0x8d, 0x22, 0xd5, 0x89, 0xfc, \r
-       0x42, 0x3, 0x5f, 0x28, 0x4f, 0x65, 0x71, 0x6a, 0x71, 0x34, \r
-       0x12, 0xc2, 0x7f, 0xe9, 0xa2, 0x15, 0xfe, 0x75, 0x6, 0x47, \r
-       0xad, 0x1, 0x76, 0x7d, 0xb1, 0x67, 0xff, 00, 0x5, 0x79, \r
-       0xf8, 0xff, 00, 0x6a, 0xa0, 0x49, 0x37, 0x86, 0xae, 0xcf, \r
-       0xf7, 0xa6, 0xd2, 0x70, 0x4f, 0xfd, 0xf2, 0xeb, 0x5b, 0x96, \r
-       0x3f, 0xf0, 0x59, 0x6f, 0x8d, 0x76, 0xe0, 0xb, 0x8d, 0x7, \r
-       0xc1, 0xb7, 0x63, 0xb9, 0x36, 0x37, 0x8, 0x4f, 0xe5, 0x3d, \r
-       0x7c, 0x19, 0x45, 0x16, 0xb, 0xb3, 0xf4, 0x7f, 0x4a, 0xff, \r
-       00, 0x82, 0xd8, 0x78, 0xe6, 0x8, 0xf1, 0xa8, 0xfc, 0x39, \r
-       0xd0, 0x2f, 0x1f, 0xfb, 0xd6, 0xf7, 0x93, 0x40, 0x3f, 0x22, \r
-       0x1e, 0xba, 0x8d, 0x27, 0xfe, 0xb, 0x73, 0x37, 0xfc, 0xc4, \r
-       0xfe, 0x14, 0x47, 0xff, 00, 0x6e, 0x9a, 0xc9, 0xff, 00, \r
-       0xd9, 0xa1, 0xaf, 0xcb, 0x8a, 0x28, 0xb0, 0x5d, 0x9f, 0xad, \r
-       0xfa, 0x5f, 0xfc, 0x16, 0xcf, 0xc2, 0x12, 0x11, 0xfd, 0xa3, \r
-       0xf0, 0xd3, 0x5b, 0xb7, 0x1d, 0xcd, 0xad, 0xf4, 0x32, 0xff, \r
-       00, 0xe8, 0x41, 0x6b, 0xa8, 0xd3, 0x3f, 0xe0, 0xb3, 0xdf, \r
-       0x8, 0xae, 0xdc, 0xb, 0xbf, 0xa, 0xf8, 0xb6, 0xc4, 0x7f, \r
-       0x78, 0xc1, 0x6f, 0x27, 0xf2, 0x96, 0xbf, 0x1a, 0x28, 0xa2, \r
-       0xc1, 0xcc, 0xcf, 0xdc, 0x3b, 0x1f, 0xf8, 0x2b, 0xb7, 0xec, \r
-       0xff, 00, 0x76, 0x47, 0x9d, 0x75, 0xe2, 0x3b, 0x2f, 0x79, \r
-       0xb4, 0x92, 0x7f, 0xf4, 0x6, 0x6a, 0xdc, 0xb3, 0xff, 00, \r
-       0x82, 0xaa, 0x7e, 0xce, 0x57, 0x6c, 0x14, 0xf8, 0xbe, 0xfa, \r
-       0xdf, 0x3d, 0xe6, 0xd1, 0xae, 0x80, 0x1f, 0x94, 0x66, 0xbf, \r
-       0x8, 0x28, 0xa2, 0xc3, 0xe6, 0x3f, 0xa0, 0xd, 0x3f, 0xfe, \r
-       0xa, 0x47, 0xfb, 0x39, 0x6a, 0x2c, 0x15, 0x3e, 0x25, 0x5a, \r
-       0x42, 0x4f, 0xfc, 0xfc, 0x59, 0x5d, 0x44, 0x3f, 0x36, 0x88, \r
-       0xa, 0xea, 0x6c, 0x3f, 0x6d, 0xef, 0x80, 0x9a, 0x88, 0x5f, \r
-       0x27, 0xe2, 0xcf, 0x85, 0x81, 0x6e, 0x82, 0x5d, 0x41, 0x63, \r
-       0x3f, 0x93, 0x62, 0xbf, 0x9d, 0x6a, 0x29, 0x58, 0x39, 0x8f, \r
-       0xe9, 0x53, 0x4e, 0xfd, 0xa2, 0xfe, 0x16, 0x6a, 0xca, 0xd, \r
-       0x9f, 0xc4, 0x6f, 0xb, 0x4e, 0xf, 0x4d, 0xba, 0xc4, 0x1c, \r
-       0xff, 00, 0xe3, 0xf5, 0xd3, 0xd8, 0x78, 0xf3, 0xc3, 0x5a, \r
-       0xa8, 0x6, 0xcb, 0xc4, 0x3a, 0x55, 0xd8, 0x3d, 0xc, 0x17, \r
-       0xb1, 0xbe, 0x7f, 0x26, 0xaf, 0xe6, 0x12, 0x95, 0x58, 0xa9, \r
-       0xc8, 0x24, 0x1f, 0x6a, 0x2c, 0x1c, 0xc7, 0xf5, 0x23, 0xd, \r
-       0xed, 0xbd, 0xc8, 0x6, 0x29, 0xe2, 0x94, 0x1f, 0xee, 0x38, \r
-       0x3f, 0xca, 0xa6, 0xaf, 0xe5, 0xf2, 0xc7, 0xc5, 0x9a, 0xde, \r
-       0x96, 00, 0xb3, 0xd6, 0x75, 0xb, 0x40, 0x3a, 0x79, 0x17, \r
-       0x4e, 0x98, 0xfc, 0x8d, 0x6e, 0x5a, 0xfc, 0x66, 0xf8, 0x83, \r
-       0x63, 0x8f, 0xb3, 0x78, 0xef, 0xc4, 0xd6, 0xf8, 0xe9, 0xe5, \r
-       0x6b, 0x17, 0xb, 0xfc, 0x9e, 0x8b, 0xf, 0x98, 0xfe, 0x99, \r
-       0xe8, 0xaf, 0xe6, 0xd6, 0xc7, 0xf6, 0xa0, 0xf8, 0xc1, 0xa6, \r
-       0xe3, 0xec, 0xff, 00, 0x14, 0x3c, 0x5c, 0x98, 0xe9, 0x9d, \r
-       0x6a, 0xe1, 0xbf, 0x9b, 0x9a, 0xe9, 0xb4, 0xef, 0xdb, 0x9f, \r
-       0xe3, 0xf6, 0x96, 00, 0x83, 0xe2, 0xbf, 0x88, 0xc8, 0x1d, \r
-       0xa6, 0xb9, 0x12, 0xff, 00, 0xe8, 0x60, 0xd1, 0x60, 0xe6, \r
-       0x3f, 0xa2, 0x4a, 0x2b, 0xf0, 0x7, 0x4d, 0xff, 00, 0x82, \r
-       0x94, 0x7e, 0xd1, 0xba, 0x6e, 0x31, 0xf1, 0x1e, 0xe2, 0xe8, \r
-       0xe, 0xd7, 0x36, 0x36, 0xaf, 0xfa, 0xf9, 0x79, 0xae, 0xb7, \r
-       0x4c, 0xff, 00, 0x82, 0xb2, 0x7e, 0xd0, 0xba, 0x78, 0x51, \r
-       0x2e, 0xb5, 0xa3, 0x5f, 0x81, 0xff, 00, 0x3f, 0x3a, 0x4c, \r
-       0x79, 0x3f, 0xf7, 0xce, 0xda, 0x2c, 0x1c, 0xc8, 0xfd, 0xd1, \r
-       0xa2, 0xbf, 0x16, 0x74, 0xdf, 0xf8, 0x2c, 0x9f, 0xc6, 0xbb, \r
-       0x45, 0xb, 0x75, 0xa2, 0x78, 0x46, 0xfb, 0x1d, 0x59, 0xac, \r
-       0xa7, 0x42, 0x7f, 0xef, 0x99, 0xb1, 0xfa, 0x57, 0xeb, 0x5f, \r
-       0xc0, 0x9f, 0x1c, 0x6a, 0x7f, 0x13, 0x3e, 0xc, 0xf8, 0x2b, \r
-       0xc5, 0xba, 0xcd, 0xb4, 0x16, 0x5a, 0xa6, 0xb7, 0xa4, 0xdb, \r
-       0x6a, 0x17, 0x16, 0xf6, 0xc0, 0x88, 0xe3, 0x79, 0x23, 0xe, \r
-       0x55, 0x72, 0x49, 0xc0, 0xcf, 0x73, 0x48, 0x77, 0xb9, 0xdd, \r
-       0xd1, 0x45, 0x14, 0xc, 0x28, 0xa2, 0x8a, 00, 0xf1, 0x4f, \r
-       0xda, 0x4e, 0xe7, 0xcb, 0xd1, 0xa1, 0x4c, 0xff, 00, 0x9, \r
-       0x35, 0xf1, 0xa6, 0xa0, 0xdc, 0x39, 0xf5, 0x26, 0xbe, 0xb3, \r
-       0xfd, 0xa7, 0x6e, 0xb6, 0xc0, 0x89, 0x9e, 0x89, 0x8a, 0xf9, \r
-       0x23, 0x51, 0x6c, 0x46, 0xdf, 0x8d, 0x7e, 0x69, 0x9b, 0x3e, \r
-       0x7c, 0xc2, 0x5e, 0x56, 0x3f, 0x31, 0xe2, 0x59, 0xfe, 0xf4, \r
-       0xf0, 0xdf, 0x1d, 0xc4, 0xda, 0x9f, 0x8e, 0x3c, 0x39, 0x62, \r
-       0x83, 0x73, 0xdc, 0xea, 0xd6, 0xb0, 0x85, 0xf5, 0x2d, 0x2a, \r
-       0xc, 0x7e, 0xb5, 0xfb, 0x56, 00, 00, 0x1, 0xd0, 0x57, \r
-       0xe3, 0x1d, 0x9d, 0xa3, 0xeb, 0x5f, 0xb4, 0x7, 0xc3, 0x8b, \r
-       0x18, 0xcf, 0xcf, 0x2f, 0x89, 0x6c, 0x3f, 0x49, 0xd1, 0x8f, \r
-       0xf2, 0xaf, 0xd9, 0xda, 0xfb, 0x8c, 0xbd, 0x5a, 0x8a, 0x3d, \r
-       0xae, 0x13, 0x8f, 0x2e, 0x5a, 0x9f, 0x76, 0xc2, 0x8a, 0x28, \r
-       0xaf, 0x4c, 0xfb, 0x43, 0xf3, 0xa6, 0xf6, 0x59, 0x3e, 0x1f, \r
-       0x7c, 0x74, 0xd7, 0xac, 0xb5, 0x48, 0xb6, 0xc9, 0x6d, 0xa9, \r
-       0xc9, 0x72, 0x23, 0x27, 0x21, 0x92, 0x43, 0xe6, 0x21, 0xfc, \r
-       0x98, 0x57, 0xd7, 0x5a, 0x47, 0xed, 0x13, 0xe1, 0xdb, 0x8b, \r
-       0x48, 0x7c, 0xd9, 0x15, 0x1f, 0x68, 0xc8, 0xd, 0xd3, 0x8a, \r
-       0xf0, 0x9f, 0xdb, 0xc7, 0xe1, 0x85, 0xed, 0x86, 0xa5, 0xa7, \r
-       0x7c, 0x48, 0xd2, 0xd5, 0x9e, 0x25, 0x44, 0xb1, 0xd4, 0x63, \r
-       0x41, 0xf7, 0x70, 0x4f, 0x97, 0x21, 0xf6, 0xe7, 0x69, 0x3f, \r
-       0xee, 0xd7, 0xce, 0xfe, 0x1f, 0xf1, 0x7c, 0x37, 0xf1, 0x28, \r
-       0xf3, 0x36, 0xc9, 0xdd, 0x49, 0xaf, 0x8a, 0xaf, 0xf5, 0x9c, \r
-       0xb6, 0xac, 0xe5, 0x87, 0xd5, 0x33, 0xf2, 0x6f, 0xaf, 0xd5, \r
-       0xe1, 0xcc, 0x55, 0x5c, 0x2b, 0x8f, 0xb8, 0xdd, 0xd3, 0xf2, \r
-       0x67, 0xe8, 0xc4, 0x3f, 0x1c, 0x7c, 0x33, 0x2f, 0xfc, 0xbd, \r
-       0x1, 0xff, 00, 0x2, 0x15, 0xa1, 0x7, 0xc5, 0x9f, 0xe, \r
-       0x4f, 0xd2, 0xf5, 0x47, 0xe3, 0x5f, 0x9f, 0xb0, 0xea, 0x21, \r
-       0xc6, 0x44, 0xa4, 0x7e, 0x35, 0x65, 0x35, 0x29, 0xd7, 0xee, \r
-       0xdc, 0xb8, 0xfa, 0x35, 0x72, 0x2c, 0xff, 00, 0x15, 0x1f, \r
-       0x8a, 0x8, 0xf6, 0x21, 0xc4, 0xf2, 0x7f, 0x65, 0x1f, 0xa0, \r
-       0xd0, 0xfc, 0x44, 0xd0, 0x26, 0xc6, 0x2f, 0xe3, 0xe7, 0xde, \r
-       0xae, 0x47, 0xe2, 0xfd, 0x1e, 0x50, 0xa, 0xdf, 0xc2, 0x73, \r
-       0xfe, 0xd5, 0x7e, 0x7a, 0x26, 0xb9, 0x7d, 0x18, 0xf9, 0x6f, \r
-       0x25, 0x1f, 0xf0, 0x3a, 0xb5, 0x1f, 0x8b, 0x35, 0x68, 0xbe, \r
-       0xed, 0xfc, 0xdf, 0xf7, 0xd5, 0x6c, 0xb8, 0x8a, 0xaa, 0xf8, \r
-       0xa9, 0xaf, 0xbc, 0xea, 0x8f, 0x12, 0xc7, 0xac, 0xf, 0xd0, \r
-       0xa4, 0xd7, 0xf4, 0xe9, 0x3e, 0xed, 0xe4, 0x27, 0xfe, 0x5, \r
-       0x53, 0xae, 0xa3, 0x6a, 0xdd, 0x2e, 0x22, 0x3f, 0x47, 0x15, \r
-       0xf9, 0xf3, 0x17, 0x8f, 0xf5, 0xd8, 0x47, 0xcb, 0x7f, 0x2f, \r
-       0xe2, 0x6a, 0xf4, 0x3f, 0x15, 0x3c, 0x45, 0xf, 0x4b, 0xe7, \r
-       0x3f, 0x8d, 0x6e, 0xb8, 0x8d, 0x7d, 0xaa, 0x7f, 0x89, 0xd1, \r
-       0x1e, 0x23, 0xa0, 0xf7, 0x8b, 0x3e, 0xfd, 0x59, 0xe3, 0x6e, \r
-       0x92, 0x29, 0xfa, 0x30, 0xa7, 0xee, 0x1e, 0xa2, 0xbe, 0xf, \r
-       0xb7, 0xf8, 0xd9, 0xe2, 0x48, 0x31, 0xfe, 0x92, 0xcd, 0xf5, \r
-       0x35, 0xa3, 0x6f, 0xfb, 0x40, 0xf8, 0x8a, 0x12, 0x33, 0x33, \r
-       0x1c, 0x7a, 0x35, 0x6e, 0xb8, 0x8a, 0x8f, 0x58, 0x33, 0xa2, \r
-       0x3c, 0x41, 0x85, 0x7b, 0xdc, 0xfb, 0x82, 0x8a, 0xf8, 0xd2, \r
-       0xdb, 0xf6, 0x97, 0xd7, 0x62, 0x18, 0x62, 0xed, 0xff, 00, \r
-       0x2, 0xad, 0x3b, 0x6f, 0xda, 0x93, 0x54, 0x4f, 0xbe, 0xae, \r
-       0x7f, 0x1c, 0xd6, 0xeb, 0x3f, 0xc2, 0x3d, 0xee, 0xbe, 0x46, \r
-       0xf1, 0xcf, 0x30, 0x72, 0xfb, 0x47, 0xd7, 0x14, 0x57, 0xcb, \r
-       0x96, 0xff, 00, 0xb5, 0x64, 0xe0, 00, 0xf1, 0x37, 0xe4, \r
-       0x2b, 0x52, 0xd7, 0xf6, 0xab, 0x84, 0xe3, 0xcd, 0x8b, 0xf3, \r
-       0x15, 0xbc, 0x73, 0xbc, 0x13, 0xfb, 0x5f, 0x81, 0xd1, 0x1c, \r
-       0xdb, 0x7, 0x2f, 0xb6, 0x7d, 0x1f, 0x45, 0x78, 0x34, 0x1f, \r
-       0xb5, 0x2e, 0x9a, 0xff, 00, 0x7a, 0x35, 0x15, 0xab, 0x6b, \r
-       0xfb, 0x4a, 0x68, 0x72, 0x91, 0xb8, 0x28, 0xff, 00, 0x81, \r
-       0x62, 0xb7, 0x8e, 0x6d, 0x82, 0x97, 0xfc, 0xbc, 0x47, 0x44, \r
-       0x73, 0xc, 0x34, 0xb6, 0x9a, 0x3d, 0x92, 0x8a, 0xf2, 0xdb, \r
-       0x7f, 0xda, 0x7, 0xc3, 0xf3, 0x11, 0xf3, 0x81, 0xff, 00, \r
-       0x3, 0x15, 0xa7, 0x7, 0xc6, 0xaf, 0xe, 0xcc, 0x33, 0xe7, \r
-       0x81, 0xff, 00, 0x2, 0x15, 0xd1, 0x1c, 0x7e, 0x16, 0x5b, \r
-       0x54, 0x46, 0xcb, 0x15, 0x46, 0x5b, 0x49, 0x1d, 0xfd, 0x15, \r
-       0xc7, 0xc1, 0xf1, 0x53, 0xc3, 0xf3, 0x8e, 0x2e, 0xc0, 0xfa, \r
-       0x91, 0x57, 0xe2, 0xf1, 0xee, 0x89, 0x30, 0x4, 0x5e, 0xa7, \r
-       0xe7, 0x5b, 0xac, 0x45, 0x19, 0x6d, 0x35, 0xf7, 0x9a, 0xaa, \r
-       0xb4, 0xde, 0xd2, 0x47, 0x43, 0x45, 0x64, 0xc7, 0xe2, 0xad, \r
-       0x2a, 0x51, 0xf2, 0xde, 0xc5, 0xff, 00, 0x7d, 0x55, 0x95, \r
-       0xd6, 0xac, 0x1f, 0xa5, 0xdc, 0x27, 0xfe, 0x6, 0x2b, 0x55, \r
-       0x38, 0x3d, 0x99, 0x6a, 0x51, 0x7d, 0x4b, 0xb4, 0x54, 0x9, \r
-       0x7d, 0x6f, 0x27, 0xdd, 0x9e, 0x33, 0xf4, 0x61, 0x52, 0x9, \r
-       0xa3, 0x3d, 0x1d, 0x4f, 0xd0, 0xd5, 0x5d, 0xe, 0xe3, 0xe8, \r
-       0xa4, 0x4, 0x1e, 0x87, 0x34, 0xb4, 0xc6, 0x14, 0x51, 0x45, \r
-       00, 0x14, 0x51, 0x45, 00, 0x14, 0x51, 0x45, 00, 0x14, \r
-       0x51, 0x45, 00, 0x14, 0x51, 0x45, 00, 0x14, 0x51, 0x45, \r
-       00, 0x14, 0x51, 0x45, 00, 0x14, 0x51, 0x45, 00, 0x14, \r
-       0x51, 0x45, 00, 0x14, 0x51, 0x45, 00, 0x14, 0x51, 0x45, \r
-       00, 0x14, 0x51, 0x45, 00, 0x14, 0x51, 0x45, 00, 0x14, \r
-       0x51, 0x45, 00, 0x14, 0x51, 0x45, 00, 0x14, 0xc7, 0x89, \r
-       0x24, 0xfb, 0xe8, 0xad, 0xfe, 0xf0, 0xcd, 0x3e, 0x8a, 00, \r
-       0xcb, 0xbc, 0xf0, 0xbe, 0x8d, 0xa8, 0x9c, 0xdd, 0xe9, 0x16, \r
-       0x37, 0x47, 0xd6, 0x6b, 0x64, 0x7f, 0xe6, 0x2b, 0x9a, 0xd5, \r
-       0xfe, 0x5, 0xfc, 0x38, 0xd7, 0xc1, 0xfe, 0xd2, 0xf0, 0x17, \r
-       0x86, 0xaf, 0xb3, 0xd7, 0xed, 0x1a, 0x4c, 0xf, 0xfc, 0xd2, \r
-       0xbb, 0x9a, 0x28, 0x3, 0xc7, 0x6f, 0x7f, 0x63, 0x9f, 0x81, \r
-       0x9a, 0x89, 0x26, 0x7f, 0x84, 0x9e, 0xe, 0x24, 0xf7, 0x4d, \r
-       0x1a, 0x4, 0x3f, 0xf8, 0xea, 0x8a, 0xc5, 0xd4, 0x3f, 0x60, \r
-       0xaf, 0xd9, 0xf7, 0x52, 0x42, 0x92, 0xfc, 0x29, 0xf0, 0xfc, \r
-       0x60, 0xf7, 0xb7, 0x85, 0xa1, 0x3f, 0x9a, 0x30, 0xaf, 0x7c, \r
-       0xa2, 0x80, 0x3e, 0x5a, 0xd4, 0xff, 00, 0xe0, 0x99, 0x3f, \r
-       0xb3, 0x96, 0xa4, 0xf, 0xfc, 0x5b, 0xf1, 0x68, 0x4f, 0xf1, \r
-       0x5b, 0x6a, 0x57, 0x49, 0xff, 00, 0xb5, 0x48, 0xae, 0x4b, \r
-       0x52, 0xff, 00, 0x82, 0x47, 0x7e, 0xcf, 0xf7, 0xa0, 0xf9, \r
-       0x16, 0x1a, 0xf5, 0x81, 0xf5, 0x83, 0x56, 0x76, 0xff, 00, \r
-       0xd0, 0xc1, 0xaf, 0xb4, 0xa8, 0xa0, 0x56, 0x3e, 0x1, 0xd5, \r
-       0x7f, 0xe0, 0x8c, 0x9f, 0x8, 0x6e, 0xb2, 0x6c, 0xbc, 0x4d, \r
-       0xe2, 0xcb, 0x3, 0xe8, 0x67, 0x82, 0x50, 0x3f, 0x38, 0xbf, \r
-       0xad, 0x72, 0x9a, 0x9f, 0xfc, 0x11, 0x33, 0xc2, 0x32, 0x3, \r
-       0xfd, 0x9f, 0xf1, 0x2f, 0x5a, 0x80, 0xf6, 0x17, 0x36, 0x10, \r
-       0xc8, 0x3f, 0x42, 0xb5, 0xfa, 0x53, 0x45, 0x1, 0x64, 0x7e, \r
-       0x56, 0x6a, 0x1f, 0xf0, 0x44, 0x4b, 0x92, 0x49, 0xb1, 0xf8, \r
-       0xb7, 0x10, 0x1d, 0x85, 0xc6, 0x84, 0x4f, 0xea, 0x27, 0xac, \r
-       0x2b, 0xcf, 0xf8, 0x22, 0x57, 0x8b, 0xa3, 0x52, 0x6d, 0x7e, \r
-       0x27, 0x68, 0xb3, 0x9e, 0xc2, 0x5d, 0x36, 0x68, 0xf3, 0xf9, \r
-       0x3b, 0x57, 0xeb, 0x85, 0x14, 0xee, 0x16, 0x47, 0xe3, 0x4e, \r
-       0xa7, 0xff, 00, 0x4, 0x60, 0xf8, 0xb5, 0x6e, 0x9, 0xb1, \r
-       0xf1, 0x5f, 0x85, 0x2f, 0x71, 0xd0, 0x3c, 0xb7, 0x11, 0x67, \r
-       0xff, 00, 0x21, 0x1a, 0xe4, 0xf5, 0xf, 0xf8, 0x24, 0x47, \r
-       0xc7, 0xfb, 0x36, 0x22, 0xb, 0x6f, 0xe, 0x5f, 0x1, 0xde, \r
-       0xd, 0x58, 0x2e, 0x7f, 0xef, 0xb4, 0x5a, 0xfd, 0xc2, 0xa2, \r
-       0x8b, 0x8a, 0xc8, 0xfc, 0x14, 0xd5, 0x3f, 0xe0, 0x97, 0x9f, \r
-       0xb4, 0x76, 0x9a, 0x7e, 0x4f, 0x3, 0x45, 0x7d, 0xef, 0x6b, \r
-       0xaa, 0xda, 0x9f, 0xfd, 0xa, 0x41, 0x5c, 0xed, 0xe7, 0xfc, \r
-       0x13, 0xbf, 0xf6, 0x8b, 0xb1, 0xcf, 0x99, 0xf0, 0xb7, 0x54, \r
-       0x7c, 0x7f, 0xcf, 0x1b, 0x8b, 0x69, 0x3f, 0xf4, 0x19, 0x4d, \r
-       0x7f, 0x41, 0xb4, 0x51, 0x70, 0xe5, 0x47, 0xf3, 0xa5, 0xa9, \r
-       0xfe, 0xc5, 0x3f, 0x1d, 0xf4, 0x8c, 0xfd, 0xa7, 0xe1, 0x4f, \r
-       0x89, 0xf8, 0xff, 00, 0x9e, 0x36, 0x2d, 0x2f, 0xfe, 0x81, \r
-       0x9a, 0xe5, 0xf5, 0x1f, 0xd9, 0xd7, 0xe2, 0xa6, 0x90, 0x9, \r
-       0xbd, 0xf8, 0x6d, 0xe2, 0xcb, 0x60, 0x3a, 0x99, 0x34, 0x5b, \r
-       0x91, 0xff, 00, 0xb2, 0x57, 0xf4, 0xab, 0x45, 0x17, 0xe, \r
-       0x53, 0xf9, 0x81, 0xd4, 0xfc, 0x11, 0xe2, 0x3d, 0x10, 0x13, \r
-       0xa8, 0xe8, 0x1a, 0xa5, 0x80, 0x1d, 0x7e, 0xd5, 0x65, 0x24, \r
-       0x78, 0xff, 00, 0xbe, 0x94, 0x56, 0x29, 0xf9, 0x4e, 0xf, \r
-       0x7, 0xd0, 0xd7, 0xf5, 0x25, 0x3d, 0x9c, 0x17, 0x23, 0x13, \r
-       0x41, 0x1c, 0xbf, 0xef, 0xa0, 0x3f, 0xce, 0xb2, 0xb5, 0xf, \r
-       0x3, 0xf8, 0x73, 0x57, 0x4d, 0xb7, 0xde, 0x1f, 0xd2, 0xef, \r
-       0x57, 0xd2, 0xe2, 0xca, 0x39, 0x7, 0xea, 0xb4, 0x5c, 0x39, \r
-       0x4f, 0xe6, 0xa, 0x8a, 0xfe, 0x95, 0xf5, 0x2f, 0xd9, 0xe7, \r
-       0xe1, 0x6e, 0xae, 0x85, 0x2f, 0x7e, 0x1c, 0xf8, 0x56, 0xe5, \r
-       0x4f, 0x50, 0xfa, 0x35, 0xb9, 0xff, 00, 0xd9, 0x2b, 0x99, \r
-       0xbc, 0xfd, 0x8b, 0xfe, 0x4, 0x5f, 0x82, 0x25, 0xf8, 0x49, \r
-       0xe1, 0x1e, 0x7a, 0x98, 0xf4, 0x98, 0xa3, 0x3f, 0x9a, 0x81, \r
-       0x45, 0xc5, 0xca, 0x7f, 0x3a, 0x30, 0xc0, 0xf7, 0x33, 0x47, \r
-       0xc, 0x4a, 0x5e, 0x49, 0x18, 0x22, 0xa8, 0xea, 0x49, 0x38, \r
-       0x2, 0xbf, 0xa7, 0xf, 0x86, 0x5e, 0x1f, 0x1e, 0x14, 0xf8, \r
-       0x6f, 0xe1, 0x5d, 0x10, 0x74, 0xd3, 0xb4, 0xab, 0x5b, 0x4e, \r
-       0x98, 0xfb, 0x91, 0x2a, 0xff, 00, 0x4a, 0xf2, 0x56, 0xfd, \r
-       0x81, 0xbf, 0x67, 0xef, 0x3e, 0x29, 0xe3, 0xf8, 0x5d, 0xa3, \r
-       0x5b, 0xcd, 0x13, 0x89, 0x12, 0x4b, 0x7f, 0x32, 0x32, 0xac, \r
-       0xe, 0x41, 0x1b, 0x5c, 0x77, 0xaf, 0x7e, 00, 0x28, 00, \r
-       0x70, 0x5, 0x5, 0x25, 0x61, 0x68, 0xa2, 0x8a, 0x43, 0xa, \r
-       0x28, 0xa2, 0x80, 0x3e, 0x65, 0xfd, 0xa7, 0xae, 0xf3, 0x74, \r
-       0xc9, 0x9e, 0x80, 0xa, 0xf9, 0x6f, 0x55, 0x6c, 0x40, 0xdf, \r
-       0x4a, 0xfa, 0x2b, 0xf6, 0x96, 0xbb, 0xdf, 0xab, 0xca, 0xb9, \r
-       0xe8, 0xd8, 0xaf, 0x9b, 0xf5, 0xa7, 0xdb, 0x6c, 0xe7, 0xfd, \r
-       0x93, 0x5f, 0x97, 0x63, 0x5f, 0x3e, 0x61, 0x37, 0xe6, 0x7e, \r
-       0x49, 0xc4, 0x93, 0xbd, 0x59, 0x1c, 0x17, 0xc1, 0x6b, 0x21, \r
-       0xad, 0xfe, 0xd7, 0xdf, 0xc, 0x2d, 0x58, 0xf0, 0xba, 0xbf, \r
-       0xda, 0x3f, 0x18, 0xe2, 0x79, 0x7, 0xfe, 0x81, 0x5f, 0xb0, \r
-       0x35, 0xf9, 0x3d, 0xfb, 0x20, 0x69, 0x8b, 0xad, 0xfe, 0xd9, \r
-       0xde, 0x16, 0x2c, 0x37, 0xb, 0x1b, 0x7b, 0xcb, 0xb1, 0xec, \r
-       0x44, 0x25, 0x41, 0xff, 00, 0xc7, 0xeb, 0xf5, 0x86, 0xbf, \r
-       0x44, 0xc1, 0xab, 0x52, 0x47, 0xda, 0x70, 0xdc, 0x39, 0x32, \r
-       0xca, 0x41, 0x45, 0x14, 0x57, 0x69, 0xf4, 0xe5, 0x1d, 0x6b, \r
-       0x45, 0xb1, 0xf1, 0x1e, 0x93, 0x75, 0xa6, 0x6a, 0x56, 0xb1, \r
-       0xde, 0xd8, 0x5d, 0x46, 0x62, 0x9a, 0x9, 0x57, 0x2a, 0xea, \r
-       0x7a, 0x83, 0x5f, 0x9e, 0x3f, 0x1f, 0x3f, 0x63, 0x7d, 0x73, \r
-       0xe1, 0xc6, 0xa7, 0x73, 0xac, 0x78, 0x5c, 0x4b, 0xa8, 0xf8, \r
-       0x71, 0x98, 0xba, 0x94, 0x3b, 0xa5, 0xb5, 0x1f, 0xdd, 0x71, \r
-       0xdc, 0xf, 0xef, 0x7e, 0x78, 0xaf, 0xd1, 0xca, 0x42, 0x3, \r
-       0x2, 0x8, 0xc8, 0x3d, 0x41, 0xae, 0x6a, 0xd4, 0x15, 0x65, \r
-       0xd9, 0x9e, 0x2e, 0x67, 0x94, 0xd0, 0xcd, 0x29, 0xa8, 0xd5, \r
-       0xd1, 0xad, 0x9a, 0xe9, 0xfe, 0x6b, 0xc8, 0xfc, 0x79, 0x4f, \r
-       0xf8, 0x49, 0xb4, 0xae, 0x1e, 0x13, 0x22, 0x8e, 0x3a, 0x73, \r
-       0x52, 0xf, 0x16, 0x6a, 0xb0, 0xff, 00, 0xac, 0xb4, 0x90, \r
-       0x7f, 0xc0, 0x4d, 0x7e, 0xa5, 0x78, 0xa7, 0xe0, 0xb7, 0x84, \r
-       0x3c, 0x5b, 0xbd, 0xaf, 0x34, 0x88, 0xa1, 0x99, 0x8e, 0x4c, \r
-       0xd6, 0xa0, 0x46, 0xc4, 0xfa, 0x9c, 0x70, 0x7f, 0x11, 0x5e, \r
-       0x7f, 0x7f, 0xfb, 0x1e, 0xf8, 0x4a, 0xe9, 0xcb, 0x45, 0x77, \r
-       0x77, 0x8, 0x3d, 0x1, 0x54, 0x6c, 0x7e, 0x82, 0xbc, 0xa, \r
-       0x99, 0x75, 0x5b, 0xfc, 0x29, 0xfe, 0x7, 0xc4, 0xcf, 0x84, \r
-       0x9c, 0x3e, 0x1d, 0x7d, 0x1d, 0xbf, 0x3, 0xf3, 0xe5, 0x7c, \r
-       0x79, 0x75, 0x1f, 0xdf, 0xb7, 0x71, 0xf5, 0x6, 0xa6, 0x4f, \r
-       0x88, 0xc4, 0x70, 0xc8, 0xc3, 0xf0, 0xaf, 0xb9, 0x6e, 0xff, \r
-       00, 0x62, 0x6d, 0x12, 0x40, 0x7c, 0x9d, 0x65, 0xd4, 0xff, \r
-       00, 0xb7, 0x6c, 0xf, 0xfe, 0xcd, 0x58, 0x57, 0x9f, 0xb0, \r
-       0xcc, 0x4e, 0xf, 0x93, 0xac, 0xdb, 0x39, 0xf4, 0x78, 0xa, \r
-       0x8f, 0xeb, 0x5c, 0xaf, 0x2e, 0x9f, 0x5a, 0x5f, 0x8a, 0xff, \r
-       00, 0x33, 0x96, 0x5c, 0x2f, 0x5e, 0x3b, 0x29, 0x7d, 0xeb, \r
-       0xfc, 0xcf, 0x8f, 0xe3, 0xf8, 0x8f, 0x9, 0xeb, 0xb8, 0x55, \r
-       0xa8, 0xfe, 0x22, 0x5b, 0x37, 0xf1, 0xd7, 0xd2, 0x97, 0xff, \r
-       00, 0xb0, 0xbe, 0xa6, 0xa7, 0xf7, 0x33, 0x69, 0xd3, 0x8f, \r
-       0x5d, 0xc5, 0x7f, 0x9a, 0xd7, 0x3f, 0x7f, 0xfb, 0xe, 0x78, \r
-       0x89, 0xf, 0xee, 0xec, 0x6d, 0xa7, 0xf7, 0x8e, 0x64, 0x1f, \r
-       0xcc, 0x8a, 0xe7, 0x96, 0x5f, 0xde, 0x93, 0x39, 0xa5, 0xc3, \r
-       0xf8, 0xa8, 0xec, 0xe5, 0xf7, 0x5c, 0xf1, 0x48, 0xfc, 0x79, \r
-       0x6a, 0xd8, 0xfd, 0xe0, 0xfc, 0x45, 0x59, 0x8f, 0xc6, 0x96, \r
-       0x8d, 0xff, 00, 0x2d, 0x56, 0xbd, 0xe, 0xf3, 0xf6, 0x2d, \r
-       0xf1, 0x44, 0x4c, 0x40, 0xd1, 0x25, 0x6c, 0x77, 0x49, 0x10, \r
-       0xff, 00, 0x26, 0xac, 0x2b, 0xcf, 0xd9, 0x13, 0xc5, 0x96, \r
-       0xec, 0x47, 0xf6, 0x16, 0xa3, 0xc7, 0xfc, 0xf3, 0x89, 0x9b, \r
-       0xf9, 0x56, 0x2f, 0x3, 0x4f, 0xac, 0x24, 0xbe, 0x47, 0x3b, \r
-       0xc9, 0xf1, 0x91, 0xfb, 0x4f, 0xe7, 0x16, 0x60, 0xa7, 0x8a, \r
-       0xed, 0x1f, 0xfe, 0x5a, 0xa7, 0xe7, 0x56, 0x13, 0xc4, 0x56, \r
-       0xcc, 0x3e, 0xfa, 0xfe, 0x75, 0x5e, 0xf7, 0xf6, 0x6c, 0xf1, \r
-       0x2d, 0x96, 0xe2, 0xfa, 0x6e, 0xa7, 0x10, 0x1d, 0xda, 0x16, \r
-       00, 0x7e, 0x95, 0x87, 0x71, 0xf0, 0x6f, 0x5a, 0xb5, 0x62, \r
-       0x18, 0xdc, 0x21, 0x1d, 0x99, 0x6b, 0x9d, 0xe0, 0xa8, 0xf7, \r
-       0x68, 0xe7, 0x78, 0xc, 0x64, 0x7e, 0xda, 0xf9, 0xa3, 0xa9, \r
-       0x5d, 0x66, 0xdd, 0xbf, 0x88, 0x54, 0x83, 0x53, 0x80, 0xff, \r
-       00, 0x10, 0xae, 0x16, 0x4f, 0x86, 0xfa, 0xec, 0x1f, 0x76, \r
-       0x49, 0x4f, 0xd5, 0x6a, 0xbb, 0xf8, 0x43, 0xc4, 0x56, 0xfd, \r
-       0x1d, 0x8f, 0xd4, 0x1a, 0xcf, 0xea, 0x34, 0x9e, 0xd3, 0x32, \r
-       0xfa, 0xbe, 0x35, 0x7f, 0x2b, 0x3d, 0x18, 0x5f, 0x42, 0x7f, \r
-       0x88, 0x53, 0x85, 0xd4, 0x47, 0xa3, 0xd7, 0x98, 0x9d, 0x2b, \r
-       0xc4, 0xb0, 0xff, 00, 0xb, 0x37, 0xe3, 0x4d, 0xdf, 0xe2, \r
-       0x38, 0x3a, 0xc0, 0xc7, 0xf1, 0xa9, 0xfe, 0xcf, 0x8b, 0xda, \r
-       0x62, 0xf6, 0x78, 0xd5, 0xf6, 0x13, 0xf9, 0x9e, 0xa6, 0xb7, \r
-       0x2b, 0xd9, 0xff, 00, 0x5a, 0x91, 0x6e, 0xd8, 0x74, 0x94, \r
-       0xfe, 0x75, 0xe5, 0x3, 0x59, 0xd7, 0xa1, 0xfb, 0xd6, 0x92, \r
-       0x1f, 0xc2, 0x9c, 0x3c, 0x59, 0xaa, 0xc5, 0xf7, 0xed, 0x24, \r
-       0x1f, 0x81, 0xa8, 0x79, 0x6b, 0x7b, 0x34, 0x2e, 0x6c, 0x5c, \r
-       0x77, 0xa4, 0xfe, 0xf3, 0xd6, 0xd3, 0x52, 0xb8, 0x4f, 0xbb, \r
-       0x70, 0xe3, 0xe8, 0xd5, 0x62, 0x3d, 0x7f, 0x50, 0x8f, 0xee, \r
-       0xdd, 0xc8, 0x3f, 0xe0, 0x55, 0xe4, 0xb, 0xe3, 0xbb, 0xb8, \r
-       0xfe, 0xfd, 0xbb, 0x8f, 0xc0, 0xd4, 0xc9, 0xf1, 0xc, 0xaf, \r
-       0xde, 0x8d, 0x87, 0xe7, 0x59, 0xbc, 0xba, 0xa2, 0xda, 0xc3, \r
-       0xfa, 0xd6, 0x26, 0x1b, 0xc2, 0x48, 0xf6, 0x38, 0xbc, 0x63, \r
-       0xac, 0x43, 0x8d, 0x97, 0xb2, 0xc, 0x7b, 0xd5, 0xb8, 0xbe, \r
-       0x22, 0x6b, 0xb0, 0x9e, 0x2f, 0x58, 0xfd, 0x6b, 0xc6, 0x63, \r
-       0xf8, 0x8d, 0x17, 0x7c, 0x8f, 0xc6, 0xac, 0xc7, 0xf1, 0xe, \r
-       0xd8, 0xf5, 0x7a, 0x5f, 0x52, 0xc4, 0x47, 0x6f, 0xcc, 0xb5, \r
-       0x99, 0xd6, 0x8e, 0xfc, 0xcb, 0xef, 0x3d, 0xb2, 0xf, 0x8b, \r
-       0x7e, 0x21, 0x83, 0xa5, 0xd6, 0x7e, 0xb5, 0xa1, 0x6f, 0xf1, \r
-       0xc3, 0xc4, 0x50, 0x11, 0x99, 0xb7, 0x62, 0xbc, 0x36, 0x3f, \r
-       0x1e, 0xda, 0x37, 0xfc, 0xb5, 0x15, 0x66, 0x3f, 0x1a, 0xda, \r
-       0x37, 0xfc, 0xb5, 0x5a, 0x7e, 0xcb, 0x17, 0x1d, 0x9b, 0xfb, \r
-       0xd9, 0xb4, 0x73, 0xba, 0xb1, 0xfb, 0x6d, 0x1e, 0xf9, 0x6f, \r
-       0xfb, 0x43, 0x78, 0x82, 0x10, 0x1, 0x73, 0xf9, 0xd6, 0xa5, \r
-       0xaf, 0xed, 0x2f, 0xac, 0xc5, 0xf7, 0xb2, 0x6b, 0xe7, 0x74, \r
-       0xf1, 0x6d, 0xa3, 0x7f, 0xcb, 0x54, 0xfc, 0xea, 0x74, 0xf1, \r
-       0x25, 0xab, 0xff, 00, 0x1a, 0xfe, 0x75, 0x4a, 0xae, 0x3a, \r
-       0x1b, 0x4e, 0x47, 0x4c, 0x78, 0x86, 0xaa, 0xff, 00, 0x97, \r
-       0xa7, 0xd2, 0xd0, 0x7e, 0xd4, 0xfa, 0x82, 0xe3, 0x7a, 0xb6, \r
-       0x3e, 0x95, 0xab, 0x6b, 0xfb, 0x55, 0xb8, 0xc7, 0x98, 0x9f, \r
-       0x9a, 0xd7, 0xcb, 0x4b, 0xad, 0xdb, 0xb7, 0xf1, 0x8f, 0xce, \r
-       0xa5, 0x5d, 0x56, 0x3, 0xfc, 0x43, 0xf3, 0xab, 0x58, 0xec, \r
-       0x7c, 0x7e, 0xdb, 0x3a, 0xe3, 0xc4, 0x75, 0xff, 00, 0xe7, \r
-       0xe2, 0x3e, 0xb4, 0xb6, 0xfd, 0xaa, 0xad, 0x9c, 0xfc, 0xe8, \r
-       0xa3, 0xfe, 0x3, 0x5a, 0xb6, 0xdf, 0xb4, 0xfe, 0x94, 0xf8, \r
-       0xde, 0x13, 0xf2, 0x22, 0xbe, 0x39, 0x17, 0xf0, 0xb7, 0xf1, \r
-       0xa, 0x78, 0xbb, 0x88, 0xf4, 0x71, 0x5a, 0xac, 0xdb, 0x1f, \r
-       0x1f, 0xb5, 0xf8, 0x1d, 0x91, 0xe2, 0x4a, 0xfd, 0xd3, 0x3e, \r
-       0xd6, 0xb6, 0xfd, 0xa4, 0x34, 0x29, 0xb1, 0xb8, 0xa8, 0xfc, \r
-       0x6b, 0x52, 0xf, 0x8f, 0x5e, 0x1d, 0x94, 0xc, 0xca, 0x6, \r
-       0x7d, 0xd, 0x7c, 0x2e, 0x2e, 0x53, 0xb3, 0xfe, 0xb5, 0x22, \r
-       0xdd, 0x63, 0xa4, 0xa7, 0xf0, 0x35, 0xaa, 0xcf, 0x31, 0xb1, \r
-       0xde, 0xcf, 0xe4, 0x75, 0x47, 0x89, 0x6a, 0xf5, 0x8a, 0x3e, \r
-       0xf5, 0xb7, 0xf8, 0xcb, 0xe1, 0xd9, 0xff, 00, 0xe5, 0xe3, \r
-       0x15, 0xa1, 0x17, 0xc4, 0xed, 0x2, 0x5e, 0x97, 0x80, 0x7d, \r
-       0x6b, 0xf3, 0xf9, 0x2f, 0x65, 0x5f, 0xbb, 0x3b, 0x8f, 0xa3, \r
-       0x54, 0xc9, 0xab, 0xdd, 0xc7, 0xf7, 0x6e, 0xa4, 0x1f, 0xf0, \r
-       0x23, 0x5b, 0xae, 0x20, 0xc4, 0x2d, 0xe0, 0x8e, 0x98, 0xf1, \r
-       0x2c, 0xba, 0xc0, 0xfd, 0x7, 0x8b, 0xc7, 0x3a, 0x2c, 0xdf, \r
-       0x76, 0xf5, 0x3f, 0x1a, 0xb4, 0x9e, 0x28, 0xd2, 0xe4, 0xfb, \r
-       0xb7, 0xb1, 0x9f, 0xc6, 0xbf, 0x3d, 0xa3, 0xf1, 0x2e, 0xa7, \r
-       0x1f, 0xdd, 0xbd, 0x97, 0xfe, 0xfa, 0x35, 0x6a, 0x2f, 0x1b, \r
-       0x6b, 0x30, 0x91, 0xb6, 0xf6, 0x4e, 0x3d, 0x58, 0xd6, 0xcb, \r
-       0x88, 0xa7, 0xd6, 0x9f, 0xe2, 0x74, 0x2e, 0x24, 0x87, 0x58, \r
-       0x1f, 0xa1, 0x11, 0xea, 0xf6, 0x52, 0xfd, 0xdb, 0x98, 0xcf, \r
-       0xfc, 0xa, 0xa6, 0x5b, 0xc8, 0x1b, 0xa4, 0xc8, 0x7e, 0x8c, \r
-       0x2b, 0xf3, 0xfa, 0x1f, 0x89, 0x7a, 0xf4, 0x23, 0x8b, 0xc7, \r
-       0xfc, 0xcd, 0x5e, 0x83, 0xe3, 0x7, 0x88, 0x20, 0xc6, 0x2e, \r
-       0x58, 0xe3, 0xfd, 0xa3, 0x5b, 0xc7, 0x88, 0xa3, 0xd6, 0x9b, \r
-       0x3a, 0x23, 0xc4, 0x58, 0x77, 0xba, 0x67, 0xde, 0xe2, 0x45, \r
-       0x6e, 0x8c, 0xf, 0xd0, 0xd2, 0xe6, 0xbe, 0x18, 0x87, 0xe3, \r
-       0xb7, 0x88, 0x22, 0xc0, 0xf3, 0xf, 0xfd, 0xf4, 0x6b, 0x4e, \r
-       0xdf, 0xf6, 0x8a, 0xd7, 0x21, 0x23, 0x3b, 0x8e, 0x3f, 0xda, \r
-       0x35, 0xba, 0xe2, 0x1a, 0x1d, 0x62, 0xce, 0x88, 0xe7, 0xf8, \r
-       0x47, 0xbb, 0x3e, 0xd5, 0xa2, 0xbe, 0x3e, 0x83, 0xf6, 0x9c, \r
-       0xd5, 0xd0, 0x8d, 0xe1, 0xb1, 0xfe, 0xf1, 0xad, 0x5b, 0x5f, \r
-       0xda, 0x9a, 0xed, 0x71, 0xbd, 0xf, 0x15, 0xbc, 0x73, 0xec, \r
-       0x23, 0xde, 0xeb, 0xe4, 0x74, 0x47, 0x3a, 0xc1, 0xcb, 0xed, \r
-       0x1f, 0x56, 0x51, 0x5f, 0x33, 0xdb, 0x7e, 0xd5, 0x44, 0x91, \r
-       0xe6, 0x20, 0x1f, 0x51, 0x5a, 0xd6, 0xff, 00, 0xb5, 0x35, \r
-       0x91, 0x3, 0x7a, 0xa7, 0xe4, 0x6b, 0xa2, 0x39, 0xd6, 0xa, \r
-       0x5f, 0x6c, 0xe8, 0x8e, 0x69, 0x84, 0x96, 0xd3, 0x47, 0xd0, \r
-       0x54, 0x57, 0x88, 0xdb, 0x7e, 0xd3, 0x5a, 0x4c, 0xa4, 0x6f, \r
-       0x11, 0x8f, 0xc4, 0xd6, 0x9c, 0x1f, 0xb4, 0x56, 0x83, 0x26, \r
-       0x32, 0xf1, 0xe7, 0xd9, 0xeb, 0x78, 0xe6, 0xb8, 0x39, 0x6d, \r
-       0x51, 0x1b, 0xac, 0x76, 0x1e, 0x5b, 0x4d, 0x1e, 0xb7, 0x45, \r
-       0x79, 0xbd, 0xbf, 0xc7, 0x4f, 0xf, 0xcf, 0xff, 00, 0x2d, \r
-       0x94, 0x7f, 0xc0, 0xeb, 0x46, 0x1f, 0x8b, 0xfe, 0x1e, 0x9b, \r
-       0x3, 0xed, 0x40, 0x1f, 0xad, 0x74, 0x47, 0x1b, 0x86, 0x96, \r
-       0xd5, 0x17, 0xde, 0x6c, 0xb1, 0x14, 0x5e, 0xd2, 0x47, 0x6f, \r
-       0x45, 0x72, 0xf0, 0x7c, 0x49, 0xd0, 0x67, 0xe9, 0x7a, 0x83, \r
-       0xea, 0x6a, 0xdc, 0x7e, 0x36, 0xd1, 0x65, 0xfb, 0xb7, 0xf1, \r
-       0x9f, 0xc6, 0xb6, 0x55, 0xe9, 0x3d, 0xa4, 0xbe, 0xf2, 0xd5, \r
-       0x58, 0x3d, 0xa4, 0x8d, 0xda, 0x2b, 0x32, 0x3f, 0x12, 0x69, \r
-       0x92, 0xfd, 0xdb, 0xd8, 0xbf, 0xef, 0xaa, 0x9d, 0x35, 0x7b, \r
-       0x29, 0x3e, 0xed, 0xd4, 0x47, 0xfe, 0x4, 0x2b, 0x45, 0x38, \r
-       0xbd, 0x99, 0x7c, 0xd1, 0xee, 0x5c, 0xa2, 0xa1, 0x5b, 0xb8, \r
-       0x1f, 0xee, 0xca, 0x87, 0xfe, 0x4, 0x2a, 0x41, 0x22, 0x37, \r
-       0x46, 0x53, 0xf4, 0x35, 0x57, 0x45, 0xe, 0xa2, 0x93, 0x39, \r
-       0xa5, 0xa6, 0x1, 0x45, 0x14, 0x50, 0x1, 0x45, 0x14, 0x50, \r
-       0x1, 0x45, 0x14, 0x50, 0x1, 0x45, 0x14, 0x50, 0x1, 0x45, \r
-       0x14, 0x50, 0x1, 0x45, 0x14, 0x50, 0x1, 0x45, 0x14, 0x50, \r
-       0x1, 0x45, 0x14, 0x50, 0x1, 0x45, 0x14, 0x50, 0x1, 0x45, \r
-       0x14, 0x50, 0x1, 0x45, 0x14, 0x50, 0x1, 0x45, 0x14, 0x50, \r
-       0x1, 0x45, 0x14, 0x50, 0x1, 0x48, 0x78, 0x14, 0xb4, 0xc9, \r
-       0x5b, 0x64, 0x4e, 0xde, 0x80, 0x9a, 00, 0xf8, 0xdb, 0xf6, \r
-       0x85, 0xba, 0xf3, 0x75, 0xd9, 0x87, 0xfb, 0x67, 0xf9, 0xd7, \r
-       0x80, 0x78, 0x89, 0xf6, 0x59, 0x4d, 0xfe, 0xe9, 0xaf, 0x68, \r
-       0xf8, 0xe1, 0x73, 0xe6, 0xf8, 0x82, 0x50, 0x4f, 0xf1, 0x93, \r
-       0xfa, 0xd7, 0x84, 0x78, 0xc6, 0xf0, 0x41, 0xa7, 0x4c, 0x72, \r
-       0x7, 0xca, 0x6b, 0xf2, 0xb7, 0xfb, 0xcc, 0x6c, 0xdf, 0x99, \r
-       0xf8, 0xb7, 0x10, 0xce, 0xf5, 0x66, 0x6f, 0x7f, 0xc1, 0x3d, \r
-       0xac, 0x1b, 0x50, 0xfd, 0xab, 0x75, 0x8b, 0xbd, 0xb9, 0x8e, \r
-       0xcb, 0xc3, 0xf7, 0x4, 0x9f, 0x46, 0x79, 0xa1, 0x51, 0xfa, \r
-       0x66, 0xbf, 0x4f, 0x2b, 0xf3, 0x97, 0xfe, 0x9, 0x81, 0x68, \r
-       0x6f, 0xfe, 0x2d, 0x7c, 0x4d, 0xd5, 0xa, 0x9d, 0xb6, 0xfa, \r
-       0x75, 0xa5, 0xb0, 0x6c, 0x71, 0x99, 0x25, 0x91, 0x88, 0xcf, \r
-       0xfd, 0xb3, 0x15, 0xfa, 0x35, 0x5f, 0xa5, 0xe1, 0xd5, 0xa9, \r
-       0xa3, 0xf5, 0xc, 0x9e, 0x1e, 0xcf, 0x1, 0x4a, 0x3e, 0x48, \r
-       0x28, 0xa2, 0x8a, 0xe9, 0x3d, 0x90, 0xa2, 0x8a, 0x28, 00, \r
-       0xa2, 0x8a, 0x28, 00, 0xa2, 0x8a, 0x28, 00, 0xa2, 0x8a, \r
-       0x28, 00, 0xa2, 0x8a, 0x28, 00, 0xa8, 0xe4, 0x82, 0x29, \r
-       0x46, 0x1e, 0x34, 0x71, 0xe8, 0xca, 0xd, 0x49, 0x45, 00, \r
-       0x50, 0x9f, 0x41, 0xd3, 0x2e, 0x46, 0x26, 0xd3, 0xad, 0x25, \r
-       0x1e, 0x8f, 0x2, 0x9f, 0xe6, 0x2b, 0x3e, 0xe3, 0xc0, 0x1e, \r
-       0x19, 0xbb, 0xff, 00, 0x5b, 0xa0, 0x69, 0xad, 0xff, 00, \r
-       0x6e, 0xa8, 0x3f, 0x90, 0xad, 0xfa, 0x2a, 0x1c, 0x20, 0xf7, \r
-       0x46, 0x6e, 0x9c, 0x25, 0xbc, 0x51, 0xc5, 0xdd, 0xfc, 0x19, \r
-       0xf0, 0x55, 0xe9, 0xcc, 0x9e, 0x1e, 0xb4, 0x1f, 0xf5, 0xcc, \r
-       0x14, 0xfe, 0x44, 0x56, 0x45, 0xdf, 0xec, 0xe9, 0xe0, 0x4b, \r
-       0xbc, 0xff, 00, 0xc4, 0xa0, 0xc3, 0x9f, 0xf9, 0xe7, 0x33, \r
-       0x71, 0xf9, 0x93, 0x5e, 0x97, 0x45, 0x62, 0xf0, 0xd4, 0x65, \r
-       0xbc, 0x17, 0xdc, 0x63, 0x2c, 0x26, 0x1e, 0x5b, 0xd3, 0x5f, \r
-       0x72, 0x3c, 0x66, 0xef, 0xf6, 0x51, 0xf0, 0x4d, 0xce, 0x76, \r
-       0x8b, 0xc8, 0x73, 0xfd, 0xd9, 0x10, 0xff, 00, 0x35, 0xac, \r
-       0x9b, 0xaf, 0xd8, 0xeb, 0xc2, 0x93, 0x3, 0xe5, 0xdf, 0x5d, \r
-       0xc6, 0x7f, 0xda, 0x54, 0x6f, 0xe8, 0x2b, 0xdf, 0x28, 0xac, \r
-       0x9e, 0xb, 0xe, 0xfe, 0xc2, 0x30, 0x79, 0x76, 0x11, 0xff, \r
-       00, 0xcb, 0xb4, 0x7c, 0xd5, 0x79, 0xfb, 0x13, 0xe8, 0xd2, \r
-       0xff, 00, 0xa9, 0xd6, 0x9d, 0x7d, 0x9e, 0xd8, 0x1f, 0xfd, \r
-       0x9a, 0xb0, 0xaf, 0x7f, 0x61, 0xa4, 0x6c, 0xf9, 0x1a, 0xbd, \r
-       0xb3, 0xff, 00, 0xd7, 0x48, 0x4a, 0xff, 00, 0x8d, 0x7d, \r
-       0x65, 0x45, 0x66, 0xf2, 0xfc, 0x3b, 0xfb, 0x3f, 0x8b, 0x32, \r
-       0x79, 0x56, 0x11, 0xfd, 0x9f, 0xc5, 0xff, 00, 0x99, 0xf1, \r
-       0x6d, 0xef, 0xec, 0x2f, 0xa9, 0xe0, 0x98, 0xee, 0x34, 0xe9, \r
-       0x7d, 0x83, 0x11, 0xfc, 0xd6, 0xb9, 0xeb, 0xdf, 0xd8, 0x7f, \r
-       0xc4, 0x28, 0xe, 0xcb, 0xb, 0x79, 0x7f, 0xdc, 0x99, 0x3f, \r
-       0xa9, 0x15, 0xf7, 0x9d, 0x15, 0x9b, 0xcb, 0x68, 0xf4, 0x6d, \r
-       0x7c, 0xcc, 0x25, 0x93, 0x61, 0x9e, 0xd7, 0x5f, 0x33, 0xf3, \r
-       0xb6, 0xf3, 0xf6, 0x2d, 0xf1, 0x4c, 0x4a, 0x48, 0xd0, 0xe4, \r
-       0x3f, 0xf5, 0xce, 0x44, 0x6f, 0xe4, 0xd5, 0x87, 0x7d, 0xfb, \r
-       0x22, 0x78, 0xae, 0xd7, 0x27, 0xfb, 0xb, 0x50, 0xff, 00, \r
-       0x80, 0x46, 0xcd, 0xfc, 0xab, 0xf4, 0xba, 0x8a, 0x8f, 0xec, \r
-       0xc8, 0xf4, 0x9b, 0xfc, 0xe, 0x79, 0x64, 0x54, 0x1e, 0xd2, \r
-       0x7f, 0x87, 0xf9, 0x1f, 0x96, 0x37, 0xbf, 0xb3, 0x77, 0x88, \r
-       0xec, 0x98, 0xac, 0x9a, 0x6e, 0xa5, 0xb, 0x7a, 0x34, 0x2c, \r
-       0x3f, 0xa5, 0x62, 0xdd, 0x7c, 0x18, 0xd6, 0xad, 0x1b, 0x69, \r
-       0x17, 0x31, 0x91, 0xd9, 0x97, 0x15, 0xfa, 0xd1, 0x51, 0xbd, \r
-       0xbc, 0x52, 0xe7, 0x7c, 0x48, 0xf9, 0xfe, 0xf2, 0x83, 0x50, \r
-       0xf2, 0xd9, 0x74, 0xa9, 0xf8, 0x7f, 0xc1, 0x39, 0x65, 0xc3, \r
-       0xb4, 0xa5, 0xf6, 0x97, 0xfe, 0x3, 0xff, 00, 0x4, 0xfc, \r
-       0x8c, 0x97, 0xe1, 0xa6, 0xb9, 0x7, 0xdd, 0x92, 0x5f, 0xc5, \r
-       0x4d, 0x57, 0x7f, 0x6, 0xf8, 0x86, 0xe, 0x8e, 0xdc, 0x7a, \r
-       0x82, 0x2b, 0xf5, 0xae, 0x7f, 0xb, 0xe8, 0xd7, 0x24, 0x99, \r
-       0xb4, 0x9b, 0x19, 0x49, 0xea, 0x5e, 0xdd, 0xf, 0xf4, 0xac, \r
-       0xd9, 0xbe, 0x19, 0xf8, 0x4e, 0xe0, 0x93, 0x27, 0x87, 0x74, \r
-       0xd2, 0x4f, 0x53, 0xf6, 0x65, 0x1f, 0xd2, 0xb3, 0x79, 0x75, \r
-       0x6e, 0x93, 0x5f, 0x71, 0xc7, 0x3e, 0x18, 0xa6, 0xff, 00, \r
-       0x97, 0xee, 0x3f, 0x28, 0xe, 0x8f, 0xe2, 0x38, 0x3d, 0x4f, \r
-       0xe2, 0x69, 0x9f, 0xf1, 0x51, 0xc1, 0xd6, 0x26, 0x6f, 0xc6, \r
-       0xbf, 0x54, 0x67, 0xf8, 0x29, 0xe0, 0x8b, 0x90, 0x43, 0xf8, \r
-       0x76, 0xd0, 0x67, 0xba, 0xee, 0x5f, 0xe4, 0x6b, 0x1e, 0xef, \r
-       0xf6, 0x6e, 0xf0, 0xd, 0xd0, 0xe3, 0x48, 0x68, 0x4f, 0xac, \r
-       0x73, 0xbf, 0xf5, 0x26, 0xb2, 0x79, 0x75, 0x7f, 0xee, 0xbf, \r
-       0xeb, 0xd0, 0xe4, 0x9f, 0xa, 0x45, 0xed, 0x18, 0xfd, 0xef, \r
-       0xfc, 0x8f, 0xcc, 0x7f, 0xed, 0x6d, 0x7a, 0x1f, 0xbd, 0x6c, \r
-       0xe6, 0x94, 0x78, 0xa7, 0x56, 0x8b, 0xef, 0xda, 0xc9, 0xff, \r
-       00, 0x7c, 0x9a, 0xfd, 0x1f, 0xbc, 0xfd, 0x93, 0xbc, 0xf, \r
-       0x73, 0xfe, 0xad, 0x2f, 0x20, 0xff, 00, 0x76, 0x45, 0x3f, \r
-       0xcd, 0x6b, 0x12, 0xf7, 0xf6, 0x35, 0xf0, 0xbc, 0xf9, 0xf2, \r
-       0x35, 0xb, 0x98, 0xbf, 0xdf, 0x8d, 0x5b, 0xf9, 0x62, 0xb1, \r
-       0x96, 0x5f, 0x5b, 0xf9, 0x13, 0x38, 0xe5, 0xc2, 0x8d, 0x6d, \r
-       0x1f, 0xba, 0x47, 0xe7, 0xf0, 0xf1, 0xcd, 0xe4, 0x63, 0xe7, \r
-       0xb7, 0x71, 0xf5, 0x6, 0xa6, 0x4f, 0x88, 0x4e, 0xbf, 0x7a, \r
-       0x32, 0x3f, 0x3a, 0xfb, 0x82, 0xef, 0xf6, 0x24, 0xd3, 0x64, \r
-       0x3f, 0xb9, 0xd6, 0x94, 0xf, 0xf6, 0xed, 0x7f, 0xfb, 0x2a, \r
-       0xc5, 0xbd, 0xfd, 0x86, 0x4b, 0x67, 0xc9, 0xd5, 0xac, 0xe4, \r
-       0xf4, 0xf3, 0x22, 0x65, 0xff, 00, 0x1a, 0xc1, 0xe0, 0x2a, \r
-       0x75, 0xa3, 0xf8, 0xaf, 0xf3, 0x39, 0x65, 0xc3, 0x15, 0x56, \r
-       0xd1, 0x97, 0xde, 0xbf, 0xcc, 0xf9, 0x6, 0x3f, 0x88, 0xa9, \r
-       0xfc, 0x40, 0x8a, 0xb5, 0x1f, 0xc4, 0x4b, 0x73, 0xd5, 0xb1, \r
-       0xf8, 0xd7, 0xd2, 0xb7, 0xbf, 0xb0, 0xae, 0xaa, 0x1, 0xf2, \r
-       0xa7, 0xd3, 0x26, 0xff, 00, 0x81, 0x11, 0xfc, 0xd6, 0xb9, \r
-       0xfb, 0xef, 0xd8, 0x77, 0xc4, 0x71, 0x3, 0xb2, 0xc2, 0xd6, \r
-       0x6f, 0xfa, 0xe7, 0x32, 0xff, 00, 0x52, 0x2b, 0x9, 0x60, \r
-       0x7b, 0xd2, 0x67, 0x3c, 0xb8, 0x7b, 0x13, 0x1d, 0x9c, 0xfe, \r
-       0xeb, 0x9e, 0x27, 0x1f, 0x8f, 0xad, 0x5b, 0x1f, 0xbc, 0xc5, \r
-       0x59, 0x4f, 0x1b, 0x5a, 0xb7, 0xfc, 0xb5, 0x5f, 0xc6, 0xbd, \r
-       0xe, 0xff, 00, 0xf6, 0x31, 0xf1, 0x4d, 0xbe, 0x4f, 0xf6, \r
-       0x1c, 0x8c, 0x3d, 0x63, 0x60, 0xdf, 0xc8, 0xd7, 0x3f, 0x7b, \r
-       0xfb, 0x28, 0xf8, 0x9a, 0xd4, 0x9c, 0xe8, 0x5a, 0x8a, 0xfb, \r
-       0xac, 0xe, 0x7f, 0xa5, 0x61, 0x2c, 0x15, 0x35, 0xbc, 0x1a, \r
-       0xf9, 0x1c, 0xd2, 0xc9, 0xb1, 0x70, 0xfb, 0x6f, 0xe7, 0x16, \r
-       0x62, 0x27, 0x8b, 0xed, 0x5b, 0xfe, 0x5a, 0xa7, 0xe7, 0x53, \r
-       0xa7, 0x89, 0xad, 0x9f, 0xa4, 0x89, 0xf9, 0xd5, 0x7b, 0xcf, \r
-       0xd9, 0xd7, 0xc4, 0x36, 0x79, 0x2f, 0xa7, 0xea, 0x11, 0x1, \r
-       0xfd, 0xe8, 0x58, 0x7f, 0x4a, 0xc6, 0xb8, 0xf8, 0x3b, 0xac, \r
-       0xdb, 0x67, 0xfe, 0x3e, 0x13, 0x1f, 0xde, 0x43, 0x58, 0x3c, \r
-       0x1d, 0xf, 0x34, 0x60, 0xf2, 0xfc, 0x64, 0x7e, 0xda, 0xf9, \r
-       0xa3, 0xa8, 0x5d, 0x7a, 0xdd, 0xbf, 0x8d, 0x7f, 0x3a, 0x95, \r
-       0x75, 0x78, 0xf, 0xf1, 0xa, 0xe1, 0x24, 0xf8, 0x6f, 0xad, \r
-       0xc3, 0x9d, 0xb2, 0xc9, 0xf8, 0xa1, 0xaa, 0xef, 0xe0, 0xfd, \r
-       0x7e, 0xe, 0x92, 0x31, 0xfc, 0xd, 0x47, 0xd4, 0xa8, 0xbd, \r
-       0xa4, 0x67, 0xf5, 0x5c, 0x6a, 0xeb, 0x16, 0x7a, 0x38, 0xd4, \r
-       0xa1, 0x6f, 0xe2, 0x14, 0xe1, 0x7d, 0x9, 0xfe, 0x31, 0x5e, \r
-       0x62, 0xda, 0x47, 0x88, 0xa0, 0xe8, 0x49, 0xfc, 0x4d, 0x34, \r
-       0xff, 00, 0xc2, 0x43, 0x7, 0x58, 0xd9, 0xbf, 0x1a, 0x87, \r
-       0x97, 0xc7, 0xa4, 0x89, 0xf6, 0x58, 0xe5, 0xf6, 0x13, 0xf9, \r
-       0x9e, 0xa6, 0x2e, 0xa3, 0x3f, 0xc4, 0x29, 0xc2, 0xe1, 0x4f, \r
-       0x47, 0xfd, 0x6b, 0xca, 0x7f, 0xb5, 0xb5, 0xd8, 0x7e, 0xf5, \r
-       0xb4, 0x87, 0xf0, 0xa7, 0xf, 0x14, 0xea, 0xb1, 0x7d, 0xeb, \r
-       0x69, 0x3f, 0xef, 0x9a, 0x97, 0x97, 0x3e, 0x92, 0x44, 0xff, \r
-       00, 0xb5, 0xc7, 0x7a, 0x47, 0xab, 0x8b, 0x93, 0xda, 0x53, \r
-       0xf9, 0xd4, 0x89, 0x7d, 0x32, 0xfd, 0xd9, 0xd8, 0x7f, 0xc0, \r
-       0xab, 0xc9, 0xd7, 0xc7, 0x17, 0x91, 0xfd, 0xfb, 0x77, 0x1f, \r
-       0x81, 0xa9, 0x93, 0xe2, 0x13, 0xaf, 0xde, 0x8d, 0x85, 0x64, \r
-       0xf2, 0xd9, 0xf4, 0xb0, 0x7b, 0x7c, 0x44, 0x77, 0xa7, 0x23, \r
-       0xd6, 0x53, 0x58, 0xbd, 0x4f, 0xbb, 0x75, 0x28, 0xff, 00, \r
-       0x81, 0x1a, 0xb1, 0x1f, 0x89, 0xb5, 0x38, 0xbe, 0xed, 0xe4, \r
-       0xa3, 0xfe, 0x4, 0x6b, 0xc9, 0xa3, 0xf8, 0x88, 0x9d, 0xc3, \r
-       0xf, 0xc6, 0xac, 0xc7, 0xf1, 0xa, 0x3, 0xfc, 0x44, 0x54, \r
-       0x7f, 0x67, 0xd6, 0x5b, 0x21, 0xac, 0xc2, 0xac, 0x77, 0x52, \r
-       0x5f, 0x79, 0xeb, 0x71, 0xf8, 0xe3, 0x5a, 0x8b, 0xa5, 0xf4, \r
-       0x9f, 0xf7, 0xd5, 0x5c, 0x83, 0xe2, 0x6e, 0xbd, 0x6, 0x31, \r
-       0x74, 0xc7, 0xea, 0x4d, 0x79, 0x14, 0x7e, 0x3e, 0xb6, 0x6e, \r
-       0xaf, 0x8a, 0xb3, 0x1f, 0x8d, 0xad, 0x5b, 0xfe, 0x5a, 0x8a, \r
-       0x5f, 0x55, 0xc4, 0x47, 0x6b, 0xfd, 0xec, 0xd5, 0x66, 0xf3, \r
-       0x8f, 0xdb, 0x92, 0x3d, 0x8e, 0x1f, 0x8c, 0x3e, 0x20, 0x8b, \r
-       0x1f, 0xe9, 0x4, 0xe3, 0xdc, 0xd6, 0x8d, 0xbf, 0xc7, 0x7d, \r
-       0x7a, 0x1c, 0x7c, 0xe4, 0xff, 00, 0xc0, 0x8d, 0x78, 0x9a, \r
-       0x78, 0xbe, 0xd5, 0xbf, 0xe5, 0xaa, 0xfe, 0x75, 0x3a, 0x78, \r
-       0x9e, 0xd9, 0xff, 00, 0xe5, 0xa2, 0xfe, 0x74, 0x72, 0xe2, \r
-       0xe1, 0xb3, 0x7f, 0x7b, 0x3a, 0x23, 0x9e, 0x54, 0x5f, 0xf2, \r
-       0xf5, 0x9e, 0xef, 0x6f, 0xfb, 0x45, 0x6b, 0x71, 0x63, 0x73, \r
-       0x31, 0xff, 00, 0x81, 0x1a, 0xd6, 0xb6, 0xfd, 0xa6, 0xf5, \r
-       0x48, 0xb1, 0xb8, 0x39, 0xff, 00, 0x81, 0x57, 0xcf, 0x29, \r
-       0xaf, 0xdb, 0xb7, 0xf1, 0xaf, 0xe7, 0x52, 0xae, 0xb1, 0x3, \r
-       0x7f, 0x10, 0xfc, 0xea, 0xd6, 0x23, 0x1b, 0xd, 0xa6, 0xce, \r
-       0xb8, 0x71, 0x5, 0x65, 0xb5, 0x53, 0xe9, 0x4b, 0x6f, 0xda, \r
-       0x92, 0xec, 0x7f, 0xac, 0xdd, 0x5a, 0xd6, 0xdf, 0xb5, 0x42, \r
-       0xf1, 0xbd, 0x41, 0xfa, 0x8a, 0xf9, 0x65, 0x75, 0x38, 0x4f, \r
-       0xf1, 0xf, 0xce, 0x9e, 0x2f, 0xa1, 0x6f, 0xe2, 0x15, 0xa2, \r
-       0xcc, 0x71, 0xf1, 0xfb, 0x6c, 0xeb, 0x8f, 0x11, 0x62, 0x3f, \r
-       0x9d, 0x1f, 0x5b, 0xdb, 0x7e, 0xd4, 0x56, 0x6f, 0x8f, 0x30, \r
-       0x20, 0xfc, 0x2b, 0x56, 0xf, 0xda, 0x63, 0x49, 0x93, 0x19, \r
-       0xf2, 0xfe, 0xb9, 0x22, 0xbe, 0x35, 0x17, 0x31, 0x1f, 0xe2, \r
-       0x14, 0xf1, 0x3a, 0x1e, 0x8f, 0xfa, 0xd6, 0xcb, 0x38, 0xc7, \r
-       0x47, 0xed, 0x7e, 0x7, 0x5c, 0x78, 0x8f, 0x11, 0xe4, 0xcf, \r
-       0xb6, 0xad, 0xff, 00, 0x68, 0x6d, 0xe, 0x5c, 0x6e, 0x78, \r
-       0xc7, 0xfc, 0xa, 0xb4, 0xa0, 0xf8, 0xe7, 0xe1, 0xf9, 0xb1, \r
-       0x89, 0x57, 0xfe, 0xfa, 0xaf, 0x85, 0x44, 0xe3, 0xb3, 0xfe, \r
-       0xb4, 0xf5, 0xba, 0x91, 0x7a, 0x4a, 0xc3, 0xe8, 0xd5, 0xb2, \r
-       0xcf, 0x71, 0x8b, 0x74, 0x8e, 0xa8, 0xf1, 0x25, 0x5e, 0xb1, \r
-       0x3e, 0xf8, 0xb7, 0xf8, 0xb9, 0xa0, 0x4c, 0x1, 0xfb, 0x48, \r
-       0x1f, 0x8d, 0x5d, 0x8b, 0xe2, 0x4e, 0x83, 0x37, 0xdd, 0xbc, \r
-       0x5a, 0xfc, 0xff, 00, 0x5d, 0x46, 0xe5, 0x7a, 0x5c, 0x3f, \r
-       0xfd, 0xf5, 0x53, 0xc7, 0xae, 0xea, 0x11, 0xfd, 0xdb, 0xb9, \r
-       0x7, 0xd1, 0xab, 0x75, 0xc4, 0x35, 0xd6, 0xf0, 0x47, 0x44, \r
-       0x78, 0x91, 0xf5, 0x81, 0xfa, 0xd, 0x1f, 0x8d, 0x74, 0x69, \r
-       0x7a, 0x5f, 0x46, 0x3e, 0xa6, 0xac, 0xc7, 0xe2, 0x5d, 0x32, \r
-       0x5f, 0xbb, 0x7b, 0x11, 0xfc, 0x6b, 0xf3, 0xe5, 0x3c, 0x5b, \r
-       0xab, 0x47, 0x8c, 0x5e, 0xcb, 0xff, 00, 0x7d, 0x55, 0xb8, \r
-       0x7c, 0x7f, 0xad, 0xc3, 0xf7, 0x6f, 0x5f, 0xf1, 0x35, 0xb2, \r
-       0xe2, 0x29, 0x7d, 0xaa, 0x7f, 0x89, 0xd1, 0x1e, 0x24, 0xa6, \r
-       0xf7, 0x89, 0xfa, 0x6, 0x9a, 0xb5, 0x9b, 0xfd, 0xdb, 0xa8, \r
-       0x8f, 0xfc, 0x8, 0x54, 0xa9, 0x79, 0x3, 0xfd, 0xd9, 0x91, \r
-       0xbe, 0x8c, 0x2b, 0xe0, 0x48, 0x7e, 0x29, 0xeb, 0xf1, 0x1f, \r
-       0xf8, 0xfb, 0x73, 0xf8, 0xd6, 0x84, 0x1f, 0x1a, 0x7c, 0x41, \r
-       0x7, 0xfc, 0xb7, 0x27, 0xf1, 0xad, 0xe3, 0xc4, 0x50, 0xeb, \r
-       0x4d, 0xfe, 0x7, 0x44, 0x78, 0x87, 0xe, 0xf7, 0x4c, 0xfb, \r
-       0xbc, 0x3a, 0x9e, 0x8c, 0xf, 0xe3, 0x4b, 0x90, 0x7b, 0xd7, \r
-       0xc3, 0xf6, 0xff, 00, 0x1f, 0x35, 0xc8, 0xb1, 0xba, 0x47, \r
-       0x6f, 0xf8, 0x15, 0x6a, 0x5b, 0xfe, 0xd2, 0x1a, 0xc4, 0x3d, \r
-       0x4b, 0xff, 00, 0xdf, 0x55, 0xd1, 0x1e, 0x21, 0xc3, 0xbd, \r
-       0xe2, 0xd1, 0xd1, 0x1c, 0xfb, 0x8, 0xfa, 0x9f, 0x66, 0xd1, \r
-       0x5f, 0x22, 0xdb, 0x7e, 0xd3, 0xba, 0x8a, 0xe3, 0xcc, 0x32, \r
-       0x1f, 0x6c, 0xd6, 0xad, 0xbf, 0xed, 0x4d, 0x38, 0xc6, 0xe0, \r
-       0xdf, 0x8e, 0x2b, 0x68, 0xe7, 0xd8, 0x37, 0xbb, 0x6b, 0xe4, \r
-       0x6f, 0x1c, 0xe7, 0x7, 0x2f, 0xb4, 0x7d, 0x4b, 0x45, 0x7c, \r
-       0xdf, 0x6b, 0xfb, 0x52, 0x46, 0x71, 0xe6, 0x7e, 0xa2, 0xb5, \r
-       0x2d, 0xff, 00, 0x69, 0xfb, 0x17, 0xc0, 0x65, 0x5f, 0xa9, \r
-       0xad, 0xe3, 0x9d, 0x60, 0xa5, 0xf6, 0xce, 0x88, 0xe6, 0x78, \r
-       0x59, 0x6d, 0x33, 0xdf, 0x28, 0xaf, 0x18, 0xb7, 0xfd, 0xa4, \r
-       0x74, 0x87, 0xc6, 0xf3, 0x18, 0xff, 00, 0x81, 0x56, 0x9d, \r
-       0xbf, 0xed, 0x3, 0xa1, 0xcd, 0x8e, 0x57, 0xfe, 0xfb, 0xae, \r
-       0x88, 0xe6, 0x78, 0x39, 0x6d, 0x51, 0x1b, 0xac, 0x6e, 0x1e, \r
-       0x5b, 0x4d, 0x1e, 0xa9, 0x45, 0x79, 0xec, 0x1f, 0x1a, 0xf4, \r
-       0x9, 0x40, 0xcc, 0xa0, 0x7f, 0xc0, 0x85, 0x5f, 0x83, 0xe2, \r
-       0xc6, 0x83, 0x39, 0xe2, 0xe3, 0x1f, 0x88, 0xae, 0x85, 0x8c, \r
-       0xc3, 0xcb, 0x69, 0xa3, 0x55, 0x88, 0xa4, 0xf6, 0x92, 0x3b, \r
-       0x3a, 0x2b, 0x9a, 0x8f, 0xe2, 0x16, 0x87, 0x27, 0xfc, 0xbe, \r
-       0x28, 0xfc, 0x6a, 0xdc, 0x5e, 0x32, 0xd2, 0x26, 0x3f, 0x2d, \r
-       0xec, 0x7f, 0x9d, 0x6c, 0xab, 0x52, 0x7b, 0x49, 0x1a, 0x2a, \r
-       0x90, 0x7d, 0x4d, 0xaa, 0x2b, 0x39, 0x3c, 0x41, 0xa7, 0x3f, \r
-       0x4b, 0xc8, 0xbf, 0xef, 0xaa, 0x9d, 0x35, 0x4b, 0x49, 0x3e, \r
-       0xed, 0xcc, 0x67, 0xfe, 0x4, 0x2a, 0xd4, 0xe2, 0xf6, 0x65, \r
-       0x73, 0x27, 0xd4, 0xb5, 0x55, 0xb5, 0x27, 0xf2, 0xac, 0x2e, \r
-       0x1b, 0xd1, 0x9, 0xfd, 0x2a, 0x41, 0x73, 0xb, 0x74, 0x95, \r
-       0xf, 0xfc, 0x8, 0x56, 0x4f, 0x8b, 0xb5, 0x58, 0x34, 0xef, \r
-       0xf, 0x5e, 0xcd, 0x24, 0xaa, 0x2, 0xc6, 0x7f, 0x88, 0x52, \r
-       0x9c, 0x92, 0x8b, 0x62, 0x94, 0x92, 0x8b, 0x67, 0xc3, 0xff, \r
-       00, 0x18, 0xef, 0x47, 0xf6, 0xe4, 0xc4, 0x9f, 0xe2, 0x3f, \r
-       0xce, 0xbe, 0x6a, 0xf8, 0x9d, 0xe2, 0x25, 0x8a, 0xdd, 0xe2, \r
-       0x57, 0xc1, 0xc1, 0xef, 0x5e, 0xa7, 0xf1, 0xaf, 0xc6, 0xf0, \r
-       0x7f, 0x69, 0x5c, 0x4a, 0xae, 0x32, 0x58, 0xe0, 0x66, 0xbe, \r
-       0x67, 0xbe, 0x87, 0x53, 0xf8, 0x83, 0xe2, 0x5b, 0x1d, 0x13, \r
-       0x4b, 0x89, 0xee, 0x75, 0x2d, 0x4a, 0xe1, 0x6d, 0xad, 0xe2, \r
-       0x5e, 0x4b, 0x33, 0x1c, 0xa, 0xf8, 0x3c, 0xbf, 0xc, 0xe5, \r
-       0x39, 0x56, 0x7d, 0x5b, 0xb1, 0xf8, 0x9d, 0x78, 0x4b, 0x33, \r
-       0xcc, 0xb9, 0x21, 0xf0, 0xa6, 0x7e, 0x80, 0x7f, 0xc1, 0x2d, \r
-       0xbc, 0x19, 0x36, 0x97, 0xf0, 0xa3, 0xc5, 0x3e, 0x28, 0xb8, \r
-       0x8c, 0xab, 0x6b, 0xda, 0xb6, 0xd8, 0x58, 0xff, 00, 0x14, \r
-       0x30, 0x26, 0xc0, 0x7f, 0xef, 0xb6, 0x93, 0xf2, 0xaf, 0xb5, \r
-       0x6b, 0x88, 0xf8, 0x27, 0xf0, 0xda, 0xdf, 0xe1, 0xf, 0xc2, \r
-       0x9f, 0xc, 0xf8, 0x42, 0xdc, 0xab, 0x8d, 0x2e, 0xcd, 0x22, \r
-       0x92, 0x45, 0x18, 0xf3, 0x25, 0x3f, 0x34, 0x8d, 0xf8, 0xb1, \r
-       0x63, 0x5d, 0xbd, 0x7d, 0xec, 0x23, 0xcb, 0x14, 0x8f, 0xda, \r
-       0x68, 0xc3, 0xd9, 0x53, 0x8c, 0x3b, 0x20, 0xa2, 0x8a, 0x2a, \r
-       0xcd, 0x82, 0x8a, 0x28, 0xa0, 0x2, 0x8a, 0x28, 0xa0, 0x2, \r
-       0x8a, 0x28, 0xa0, 0x2, 0x8a, 0x28, 0xa0, 0x2, 0x8a, 0x28, \r
-       0xa0, 0x2, 0x8a, 0x28, 0xa0, 0x2, 0x8a, 0x28, 0xa0, 0x2, \r
-       0x8a, 0x28, 0xa0, 0x2, 0x8a, 0x28, 0xa0, 0x2, 0x8a, 0x28, \r
-       0xa0, 0x2, 0x8a, 0x28, 0xa0, 0x2, 0x8a, 0x28, 0xa0, 0x2, \r
-       0x8a, 0x28, 0xa0, 0x2, 0x8a, 0x28, 0xa0, 0x2, 0x8a, 0x28, \r
-       0xa0, 0x2, 0x8a, 0x28, 0xa0, 0x2, 0x8a, 0x28, 0xa0, 0x2, \r
-       0x8a, 0x28, 0xa0, 0x2, 0x8a, 0x28, 0xa0, 0x2, 0xa3, 0x92, \r
-       0xde, 0x29, 0x86, 0x24, 0x89, 0x1c, 0x7f, 0xb4, 0xa0, 0xd4, \r
-       0x94, 0x51, 0xb8, 0x19, 0x97, 0x3e, 0x19, 0xd1, 0xef, 0x41, \r
-       0x17, 0x1a, 0x55, 0x94, 0xc0, 0xf6, 0x92, 0xdd, 0xf, 0xf3, \r
-       0x15, 0x97, 0x75, 0xf0, 0xcb, 0xc2, 0x77, 0x83, 0x12, 0xf8, \r
-       0x7b, 0x4f, 0x3f, 0xee, 0xc0, 0xab, 0xfc, 0xb1, 0x5d, 0x3d, \r
-       0x15, 0x9b, 0xa7, 0x9, 0x6f, 0x14, 0x64, 0xe9, 0x53, 0x97, \r
-       0xc5, 0x14, 0xfe, 0x47, 0x5, 0x75, 0xf0, 0x2b, 0xc0, 0xd7, \r
-       0x9f, 0x7f, 0x40, 0x85, 0x7f, 0xdc, 0x91, 0xd7, 0xf9, 0x35, \r
-       0x64, 0xdc, 0x7e, 0xcd, 0x1e, 0x2, 0xb8, 0x24, 0xff, 00, \r
-       0x65, 0xcb, 0x1e, 0x7b, 0x24, 0xed, 0xfd, 0x73, 0x5e, 0xa7, \r
-       0x45, 0x62, 0xf0, 0xb4, 0x1e, 0xf0, 0x5f, 0x71, 0x83, 0xc1, \r
-       0xe1, 0xa5, 0xbd, 0x35, 0xf7, 0x23, 0xc5, 0xae, 0x7f, 0x64, \r
-       0xbf, 0x3, 0x5c, 0x64, 0xa8, 0xbe, 0x8b, 0x3d, 0x2, 0xca, \r
-       0xa4, 0xf, 0xcd, 0x6b, 0x16, 0xeb, 0xf6, 0x32, 0xf0, 0xb4, \r
-       0xa1, 0xbc, 0xad, 0x46, 0xee, 0x33, 0xdb, 0x72, 0x29, 0xff, \r
-       00, 0xa, 0xfa, 0xe, 0x8a, 0xcd, 0xe0, 0x70, 0xef, 0xec, \r
-       0x19, 0x3c, 0xbb, 0x8, 0xff, 00, 0xe5, 0xda, 0x3e, 0x61, \r
-       0xbb, 0xfd, 0x88, 0xb4, 0xe7, 0x53, 0xe4, 0xeb, 0x99, 0x3d, \r
-       0x83, 0xdb, 0x60, 0x7f, 0xe8, 0x55, 0xcf, 0xdf, 0x7e, 0xc3, \r
-       0x77, 0x27, 0xfd, 0x46, 0xa5, 0x63, 0x2f, 0xfb, 0xe1, 0x97, \r
-       0xff, 00, 0x65, 0x35, 0xf5, 0xf5, 0x15, 0x93, 0xcb, 0xb0, \r
-       0xef, 0x64, 0xd7, 0xcd, 0x98, 0xbc, 0xab, 0x8, 0xfe, 0xcd, \r
-       0xbe, 0x6c, 0xf8, 0x92, 0xf7, 0xf6, 0x18, 0xd6, 0xb9, 0xf2, \r
-       0xdb, 0x4e, 0x97, 0xfd, 0xd9, 0x48, 0xfe, 0x6a, 0x2b, 0x6, \r
-       0xfb, 0xf6, 0x1e, 0xf1, 0x2c, 0x64, 0xec, 0xd3, 0xad, 0xa6, \r
-       0xf7, 0x4b, 0x84, 0xfe, 0xa4, 0x57, 0xdf, 0x34, 0x54, 0x3c, \r
-       0xb2, 0x8f, 0x46, 0xfe, 0xf3, 0x7, 0x93, 0x61, 0x9f, 0x57, \r
-       0xf7, 0xff, 00, 0xc0, 0x3f, 0x39, 0xaf, 0x7f, 0x63, 0x1f, \r
-       0x15, 0xdb, 0x92, 0x3f, 0xb0, 0x65, 0x6f, 0xfa, 0xe7, 0x22, \r
-       0xb7, 0xf2, 0x26, 0xb0, 0x2f, 0x7f, 0x65, 0xf, 0x14, 0x5a, \r
-       0x12, 0xe, 0x83, 0xa8, 0xae, 0x3f, 0xbb, 0x13, 0x37, 0xf2, \r
-       0x15, 0xfa, 0x71, 0x45, 0x43, 0xcb, 0x23, 0xd2, 0x6c, 0xc2, \r
-       0x59, 0x15, 0x7, 0xb4, 0x9f, 0xe1, 0xfe, 0x47, 0xe5, 0x3d, \r
-       0xef, 0xec, 0xfd, 0xad, 0xd9, 0x13, 0xe6, 0x59, 0x5e, 0xc3, \r
-       0xfe, 0xfa, 0x11, 0xfc, 0xc5, 0x64, 0x4f, 0xf0, 0x8f, 0x56, \r
-       0xb7, 0x24, 0x3, 0x32, 0xff, 00, 0xbc, 0x2b, 0xf5, 0xb8, \r
-       0xa8, 0x3d, 0x40, 0x35, 0xc, 0x96, 0x16, 0xd3, 0xc, 0x49, \r
-       0x6f, 0x14, 0x83, 0xfd, 0xa4, 0x6, 0xb3, 0x79, 0x6c, 0xfa, \r
-       0x54, 0xfc, 0x3f, 0xe0, 0x9c, 0x92, 0xe1, 0xda, 0x72, 0xfb, \r
-       0x4b, 0xff, 00, 0x1, 0xff, 00, 0x82, 0x7e, 0x45, 0xc9, \r
-       0xf0, 0xeb, 0x5a, 0x83, 0xa4, 0x8f, 0xf8, 0xa9, 0xaa, 0xcf, \r
-       0xe1, 0x1d, 0x7e, 0x1e, 0x8f, 0xf9, 0xe4, 0x57, 0xeb, 0x7c, \r
-       0xfe, 0x15, 0xd1, 0x6e, 0xbf, 0xd7, 0x69, 0x16, 0x32, 0xff, \r
-       00, 0xbf, 0x6c, 0x87, 0xfa, 0x56, 0x65, 0xcf, 0xc3, 0xf, \r
-       0x9, 0x5d, 0xff, 00, 0xad, 0xf0, 0xee, 0x9c, 0x7d, 0xc5, \r
-       0xba, 0xaf, 0xf2, 0xa8, 0x79, 0x75, 0x6e, 0x93, 0x4f, 0xe4, \r
-       0x72, 0x4f, 0x86, 0x29, 0xbd, 0xb9, 0x7e, 0xe3, 0xf2, 0x7c, \r
-       0xe9, 0x3e, 0x22, 0x83, 0xa7, 0x3f, 0xf0, 0x23, 0x4d, 0xff, \r
-       00, 0x8a, 0x8a, 0x1f, 0xf9, 0x66, 0x5b, 0x1e, 0xf5, 0xfa, \r
-       0x9b, 0x75, 0xf0, 0x2b, 0xc0, 0xb7, 0x79, 0xdf, 0xe1, 0xeb, \r
-       0x75, 0xcf, 0xfc, 0xf3, 0x77, 0x5f, 0xe4, 0x6b, 0x26, 0xe7, \r
-       0xf6, 0x67, 0xf0, 0x5, 0xc0, 0x23, 0xfb, 0x2a, 0x48, 0xb3, \r
-       0xdd, 0x27, 0x6f, 0xeb, 0x9a, 0xc9, 0xe5, 0xf5, 0xff, 00, \r
-       0xba, 0xff, 00, 0xaf, 0x43, 0x8e, 0x7c, 0x29, 0x17, 0xf6, \r
-       0x63, 0xf7, 0xbf, 0xf2, 0x3f, 0x32, 0x3f, 0xb5, 0xb5, 0xc8, \r
-       0x4f, 0xcd, 0x6e, 0xe7, 0xf0, 0xcd, 0x28, 0xf1, 0x46, 0xab, \r
-       0x17, 0xdf, 0xb7, 0x7f, 0xfb, 0xe6, 0xbf, 0x48, 0x2e, 0xff, \r
-       00, 0x64, 0xbf, 0x2, 0xdc, 0x8f, 0x91, 0x2f, 0x61, 0xff, \r
-       00, 0x76, 0x55, 0x3f, 0xcd, 0x6b, 0x1e, 0xf3, 0xf6, 0x33, \r
-       0xf0, 0xa4, 0xc3, 0xf7, 0x1a, 0x85, 0xe4, 0x47, 0xfd, 0xb5, \r
-       0x56, 0xff, 00, 0xa, 0xc9, 0xe0, 0x2b, 0x7f, 0x22, 0x67, \r
-       0x24, 0xb8, 0x51, 0xad, 0xa1, 0xf7, 0x48, 0xfc, 0xfa, 0x5f, \r
-       0x1c, 0x5d, 0xc7, 0xf7, 0xe1, 0x61, 0xff, 00, 0x1, 0x35, \r
-       0x32, 0x7c, 0x41, 0x71, 0xf7, 0x90, 0x8f, 0xce, 0xbe, 0xe2, \r
-       0xbd, 0xfd, 0x88, 0x74, 0xc9, 0x3f, 0xe3, 0xdf, 0x5b, 0xc0, \r
-       0xff, 00, 0xa6, 0x96, 0xdf, 0xe0, 0xd5, 0x81, 0x79, 0xfb, \r
-       0xc, 0x4e, 0xcc, 0x7c, 0x9d, 0x52, 0xc5, 0xd7, 0xb6, 0xf5, \r
-       0x65, 0x3f, 0xfa, 0x9, 0xac, 0x1e, 0x2, 0xa7, 0x5a, 0x5f, \r
-       0x91, 0xcb, 0x2e, 0x17, 0xab, 0x1d, 0xa3, 0x2f, 0xbd, 0x7f, \r
-       0x99, 0xf2, 0x24, 0x7f, 0x11, 0x13, 0xbe, 0x6a, 0xd4, 0x7f, \r
-       0x10, 0xa0, 0x38, 0xcb, 0x11, 0x5f, 0x4a, 0x5d, 0xfe, 0xc2, \r
-       0xfa, 0xcf, 0x3e, 0x5b, 0xe9, 0xb2, 0xe, 0xd8, 0x90, 0x8f, \r
-       0xe6, 0xb5, 0x83, 0x79, 0xfb, 0xe, 0xf8, 0x99, 0x41, 0x29, \r
-       0xa7, 0xdb, 0x49, 0xfe, 0xe5, 0xc2, 0xf, 0xeb, 0x58, 0x3c, \r
-       0xf, 0x7a, 0x4c, 0xe6, 0x97, 0xe, 0xe2, 0x23, 0xb7, 0x3f, \r
-       0xdd, 0x73, 0xc4, 0xa3, 0xf1, 0xed, 0xb3, 0x7f, 0xcb, 0x4f, \r
-       0xd2, 0xac, 0xc7, 0xe3, 0x7b, 0x66, 0xff, 00, 0x96, 0xa2, \r
-       0xbd, 0x16, 0xf7, 0xf6, 0x2e, 0xf1, 0x64, 0xa, 0xcd, 0xfd, \r
-       0x83, 0x23, 0x1, 0xff, 00, 0x3c, 0xe5, 0x56, 0xfd, 0x3, \r
-       0x57, 0x3f, 0x7d, 0xfb, 0x28, 0x78, 0xa6, 0xd0, 0x16, 0x7d, \r
-       0x3, 0x51, 0x50, 0x3b, 0xac, 0x4c, 0x7f, 0xa5, 0x60, 0xf0, \r
-       0x54, 0xd6, 0xf0, 0x6b, 0xe4, 0x73, 0xcb, 0x25, 0xc5, 0xc3, \r
-       0xed, 0xc9, 0x7a, 0xa6, 0x61, 0x27, 0x8c, 0x2d, 0x5b, 0xfe, \r
-       0x5a, 0xad, 0x58, 0x4f, 0x14, 0x5b, 0x3f, 0xfc, 0xb4, 0x5f, \r
-       0xce, 0xaa, 0x5f, 0x7e, 0xcf, 0xda, 0xe5, 0x8e, 0x7c, 0xdb, \r
-       0x1b, 0xf8, 0xf, 0xfb, 0x71, 0xb0, 0xfe, 0x62, 0xb2, 0x27, \r
-       0xf8, 0x47, 0xaa, 0xdb, 0xe7, 0x99, 0xd7, 0xea, 0xb5, 0x83, \r
-       0xc2, 0x50, 0xf4, 0x39, 0xde, 0x5f, 0x8b, 0x8f, 0xfc, 0xbc, \r
-       0x5f, 0x34, 0x75, 0x2b, 0xaf, 0xdb, 0xb7, 0xf1, 0x8f, 0xce, \r
-       0xa5, 0x5d, 0x62, 0x16, 0xee, 0x2b, 0x83, 0x93, 0xe1, 0xd6, \r
-       0xb3, 0xf, 0xdd, 0x95, 0xc7, 0xd5, 0x6a, 0xbb, 0xf8, 0x3f, \r
-       0x5e, 0x83, 0xa4, 0x9f, 0xce, 0xb3, 0xfa, 0x95, 0x17, 0xb4, \r
-       0x88, 0xfa, 0xae, 0x35, 0x6d, 0x28, 0xb3, 0xd2, 0x6, 0xa9, \r
-       0x9, 0xfe, 0x2a, 0x78, 0xbf, 0x84, 0xff, 00, 0x10, 0xaf, \r
-       0x2f, 0x3a, 0x37, 0x88, 0x61, 0xe8, 0x73, 0xff, 00, 0x2, \r
-       0xa6, 0x95, 0xf1, 0xc, 0x3d, 0x50, 0x9f, 0xa3, 0x54, 0xbc, \r
-       0xbe, 0x1d, 0x24, 0x4f, 0xb1, 0xc7, 0x2f, 0xb2, 0x9f, 0xcc, \r
-       0xf5, 0x51, 0x77, 0x11, 0xfe, 0x2a, 0x70, 0x9e, 0x33, 0xfc, \r
-       0x55, 0xe5, 0x3, 0x52, 0xd7, 0xa1, 0xfb, 0xd0, 0x39, 0xa7, \r
-       0x7f, 0xc2, 0x4d, 0xaa, 0xc5, 0xf7, 0xe0, 0x93, 0xfe, 0xf9, \r
-       0xa9, 0x79, 0x77, 0x69, 0x12, 0xd6, 0x32, 0x3b, 0xd2, 0x3d, \r
-       0x58, 0x4c, 0xbd, 0x9a, 0x9e, 0xb3, 0x11, 0xd2, 0x43, 0xf9, \r
-       0xd7, 0x94, 0x2f, 0x8d, 0x6f, 0x53, 0xef, 0x42, 0xff, 00, \r
-       0x8a, 0x9a, 0x95, 0x3e, 0x20, 0x4a, 0xbf, 0x79, 0x18, 0x7e, \r
-       0x6, 0xb3, 0x79, 0x6c, 0xfa, 0x32, 0x7d, 0xae, 0x22, 0x3b, \r
-       0xd2, 0x67, 0xaa, 0xad, 0xd4, 0x8b, 0xd2, 0x56, 0x1f, 0x8d, \r
-       0x4c, 0x9a, 0xa5, 0xda, 0x7d, 0xdb, 0x89, 0x7, 0xd1, 0xab, \r
-       0xcb, 0x23, 0xf8, 0x88, 0xbd, 0xc1, 0x15, 0x66, 0x3f, 0x88, \r
-       0x50, 0x9e, 0xac, 0x6b, 0x37, 0x97, 0x55, 0x5d, 0x3, 0xeb, \r
-       0xb5, 0x23, 0xbc, 0x64, 0x8f, 0x51, 0x8f, 0xc4, 0x3a, 0x8c, \r
-       0x47, 0x2b, 0x75, 0x27, 0xfd, 0xf4, 0x6a, 0xdc, 0x5e, 0x33, \r
-       0xd6, 0x22, 0xfb, 0xb7, 0x8e, 0x3f, 0x1a, 0xf2, 0xd8, 0xfc, \r
-       0x7d, 0x6e, 0x7f, 0x8c, 0xd4, 0xeb, 0xe3, 0xab, 0x6c, 0x64, \r
-       0xcb, 0x8a, 0xcf, 0xea, 0x35, 0xa3, 0xb2, 0x34, 0x59, 0xa4, \r
-       0xa3, 0xd6, 0x4b, 0xef, 0x3d, 0x56, 0x1f, 0x88, 0x9a, 0xe4, \r
-       0x3d, 0x2e, 0xd8, 0xfd, 0x4d, 0x5e, 0x8f, 0xe2, 0xe6, 0xbd, \r
-       0x7, 0xfc, 0xbc, 0xd7, 0x8b, 0x5c, 0x7c, 0x42, 0xb4, 0x88, \r
-       0x1f, 0xde, 0xd6, 0x16, 0xa7, 0xf1, 0x4e, 0xde, 0x30, 0x76, \r
-       0x36, 0xe3, 0x5d, 0x14, 0xf0, 0x78, 0xa7, 0xb3, 0x6b, 0xe6, \r
-       0xcd, 0x16, 0x73, 0x5f, 0x6a, 0x6e, 0x4c, 0xfa, 0x2f, 0xfe, \r
-       0x17, 0xe6, 0xb1, 0x62, 0x32, 0xd3, 0xee, 0x23, 0xde, 0xb8, \r
-       0x5f, 0x88, 0x3f, 0xb4, 0xad, 0xfd, 0xed, 0x94, 0xd0, 0xbd, \r
-       0xe3, 0x7c, 0xc3, 0x5, 0x1, 0xe2, 0xbe, 0x7b, 0xd6, 0x7e, \r
-       0x22, 0xde, 0x5f, 0x16, 0x58, 0x89, 0x55, 0x35, 0x99, 0xe1, \r
-       0xdf, 0xb, 0xf8, 0x87, 0xe2, 0x26, 0xbb, 0x6f, 0xa5, 0xe8, \r
-       0xd6, 0x17, 0x3a, 0xae, 0xa3, 0x70, 0xdb, 0x63, 0x82, 0x4, \r
-       0x2c, 0x4f, 0xf8, 0x1, 0xea, 0x78, 0x15, 0xed, 0xd0, 0xc0, \r
-       0xd4, 0x4a, 0xd5, 0x66, 0xdf, 0x95, 0xcd, 0xe3, 0x8b, 0xcc, \r
-       0x71, 0x5e, 0xe5, 0x49, 0xf2, 0xc5, 0xf4, 0xea, 0xc8, 0x7c, \r
-       0x53, 0xe2, 0xcb, 0x9f, 0x10, 0x5d, 0x33, 0xb3, 0x33, 0x64, \r
-       0xf0, 0x7, 0x7a, 0xfb, 0xf3, 0xf6, 0x15, 0xfd, 0x91, 0x66, \r
-       0xf0, 0x1a, 0x45, 0xf1, 0xf, 0xc6, 0x76, 0x5e, 0x5f, 0x88, \r
-       0xee, 0x13, 0x3a, 0x5d, 0x94, 0x87, 0x26, 0xce, 0x26, 0x5e, \r
-       0x64, 0x71, 0xda, 0x46, 0x7, 0xa7, 0xf0, 0x8f, 0x73, 0xc6, \r
-       0xcf, 0xec, 0xb3, 0xfb, 0xb, 0xe9, 0xff, 00, 0xc, 0x65, \r
-       0xb7, 0xf1, 0x37, 0x8d, 0xd2, 0xdf, 0x57, 0xf1, 0x3a, 0x10, \r
-       0xf6, 0xd6, 0x6a, 0x7c, 0xcb, 0x7b, 0x2e, 0x3a, 0x9c, 0x8c, \r
-       0x3c, 0x9e, 0xfd, 0x7, 0x6c, 0xf5, 0xaf, 0xae, 0xab, 0xe9, \r
-       0xf0, 0xf8, 0x75, 0x4, 0x9b, 0x5e, 0x88, 0xfd, 0xf, 0x26, \r
-       0xca, 0x56, 0x12, 0x2a, 0xa5, 0x45, 0x67, 0xd1, 0x7f, 0x9f, \r
-       0x98, 0x51, 0x45, 0x15, 0xe8, 0x1f, 0x58, 0x14, 0x51, 0x45, \r
-       00, 0x14, 0x51, 0x45, 00, 0x14, 0x51, 0x45, 00, 0x14, \r
-       0x51, 0x45, 00, 0x14, 0x51, 0x45, 00, 0x14, 0x51, 0x45, \r
-       00, 0x14, 0x51, 0x45, 00, 0x14, 0x51, 0x45, 00, 0x14, \r
-       0x51, 0x45, 00, 0x14, 0x51, 0x45, 00, 0x14, 0x51, 0x45, \r
-       00, 0x14, 0x51, 0x45, 00, 0x14, 0x51, 0x45, 00, 0x14, \r
-       0x51, 0x45, 00, 0x14, 0x51, 0x45, 00, 0x14, 0x51, 0x45, \r
-       00, 0x14, 0x51, 0x45, 00, 0x14, 0x51, 0x45, 00, 0x14, \r
-       0x51, 0x45, 00, 0x14, 0x51, 0x45, 00, 0x14, 0x51, 0x45, \r
-       00, 0x14, 0x51, 0x45, 00, 0x14, 0x51, 0x45, 00, 0x14, \r
-       0x51, 0x45, 00, 0x14, 0x51, 0x45, 00, 0x14, 0x51, 0x45, \r
-       00, 0x14, 0x51, 0x45, 00, 0x14, 0x51, 0x45, 00, 0x14, \r
-       0x51, 0x45, 00, 0x14, 0x51, 0x45, 00, 0x14, 0x51, 0x45, \r
-       00, 0x14, 0x51, 0x45, 00, 0x14, 0x51, 0x45, 00, 0x14, \r
-       0x51, 0x45, 00, 0x21, 00, 0xf5, 0xa8, 0xa5, 0xb3, 0xb7, \r
-       0x9b, 0xfd, 0x64, 0x11, 0xc9, 0xfe, 0xf2, 0x3, 0x45, 0x14, \r
-       0xad, 0x71, 0x5a, 0xe5, 0x19, 0xfc, 0x2d, 0xa3, 0x5c, 0x92, \r
-       0x66, 0xd2, 0x2c, 0x65, 0x27, 0xbb, 0xdb, 0x21, 0xfe, 0x95, \r
-       0x9b, 0x71, 0xf0, 0xcf, 0xc2, 0x77, 0x44, 0x99, 0x7c, 0x3b, \r
-       0xa6, 0xb1, 0x3f, 0xf4, 0xec, 0xa3, 0xf9, 0xa, 0x28, 0xa8, \r
-       0x74, 0xe0, 0xf7, 0x8a, 0x33, 0x74, 0xa9, 0xcb, 0x78, 0xaf, \r
-       0xb8, 0xc7, 0xbb, 0xf8, 0x13, 0xe0, 0x5b, 0xdc, 0xef, 0xf0, \r
-       0xfd, 0xba, 0x93, 0xde, 0x36, 0x65, 0xfe, 0x46, 0xb1, 0xee, \r
-       0xff, 00, 0x66, 0x4f, 0x1, 0x5d, 0x74, 0xd3, 0xa5, 0x87, \r
-       0xfe, 0xb9, 0xcc, 0x7f, 0xae, 0x68, 0xa2, 0xb1, 0x78, 0x5a, \r
-       0xf, 0x78, 0x2f, 0xb8, 0xc2, 0x58, 0x3c, 0x34, 0xb7, 0xa6, \r
-       0xbe, 0xe4, 0x63, 0x5d, 0x7e, 0xc8, 0xbe, 0xa, 0x9f, 0xee, \r
-       0x49, 0x7d, 0x17, 0xb0, 0x74, 0x3f, 0xfb, 0x2d, 0x64, 0x5d, \r
-       0x7e, 0xc6, 0x1e, 0x19, 0x97, 0x3e, 0x4e, 0xa9, 0x77, 0x17, \r
-       0xfb, 0xd1, 0xab, 0x7f, 0x85, 0x14, 0x56, 0x6f, 0x3, 0x86, \r
-       0x7f, 0x60, 0xc5, 0xe5, 0xd8, 0x47, 0xff, 00, 0x2e, 0xd1, \r
-       0x8b, 0x7b, 0xfb, 0x10, 0x69, 0xd2, 0x3, 0xe4, 0x6b, 0xdc, \r
-       0xf6, 0x12, 0x5a, 0xff, 00, 0x83, 0x56, 0xd, 0xf7, 0xec, \r
-       0x31, 0x71, 0x83, 0xf6, 0x7d, 0x5a, 0xca, 0x53, 0xd8, 0x49, \r
-       0x1b, 0x2f, 0xf4, 0x34, 0x51, 0x59, 0xbc, 0xbb, 0xe, 0xf6, \r
-       0x56, 0xf9, 0xb3, 0x27, 0x95, 0x61, 0x1f, 0xd9, 0xb7, 0xcd, \r
-       0x98, 0x17, 0xdf, 0xb0, 0xce, 0xb8, 0xa0, 0xf9, 0x6d, 0xa7, \r
-       0x4f, 0xec, 0xb2, 0x63, 0xf9, 0xa8, 0xae, 0x7e, 0xff, 00, \r
-       0xf6, 0x24, 0xf1, 0x44, 0x59, 0xd9, 0xa5, 0xc1, 0x37, 0xbc, \r
-       0x73, 0x47, 0xfd, 0x5a, 0x8a, 0x2b, 0x29, 0x65, 0xb4, 0xba, \r
-       0x37, 0xf7, 0xff, 00, 0xc0, 0x39, 0xe5, 0x93, 0x61, 0xba, \r
-       0x37, 0xf7, 0xff, 00, 0xc0, 0x30, 0x2f, 0x3f, 0x63, 0x6f, \r
-       0x16, 0x43, 0xff, 00, 0x32, 0xfc, 0xed, 0xff, 00, 0x5c, \r
-       0xd9, 0x5b, 0xf9, 0x1a, 0xc1, 0xbf, 0xfd, 0x94, 0x3c, 0x55, \r
-       0x6d, 0x90, 0x7c, 0x3f, 0xa9, 0x8f, 0x75, 0x85, 0x98, 0x7e, \r
-       0x82, 0x8a, 0x2b, 0x86, 0xa6, 0x16, 0x34, 0xf6, 0x93, 0xfe, \r
-       0xbe, 0x47, 0x97, 0x5f, 0x2c, 0xa3, 0x4d, 0x68, 0xdf, 0xe1, \r
-       0xfe, 0x46, 0xb, 0x7e, 0xcc, 0x1e, 0x23, 0xb9, 0x9f, 0xcb, \r
-       0x5d, 0x1e, 0xfc, 0xbe, 0x7a, 0x1b, 0x77, 0x3f, 0xd2, 0xb4, \r
-       0x34, 0xff, 00, 0xd8, 0x8f, 0xc7, 0x7a, 0xc4, 0xaa, 0xb0, \r
-       0xe8, 0x57, 0x10, 0x8c, 0xfd, 0xfb, 0x8c, 0x44, 0xb8, 0xf5, \r
-       0xf9, 0x88, 0xa2, 0x8a, 0x58, 0x7a, 0x4e, 0xa4, 0xac, 0xe4, \r
-       0xff, 00, 0xf, 0xf2, 0x38, 0x68, 0x65, 0x54, 0x31, 0x4e, \r
-       0xd3, 0x6d, 0x7a, 0x5b, 0xfc, 0x8f, 0x62, 0xf8, 0x79, 0xff, \r
-       00, 0x4, 0xdc, 0x88, 0x3a, 0x5c, 0x78, 0xc3, 0x5c, 0x8, \r
-       0xa0, 0x83, 0xf6, 0x3d, 0x34, 0x6e, 0x63, 0xec, 0x64, 0x61, \r
-       0x81, 0xf8, 0x3, 0xf5, 0xaf, 0xae, 0x3e, 0x1d, 0xfc, 0x27, \r
-       0xf0, 0xaf, 0xc2, 0xad, 0x29, 0x6c, 0x3c, 0x33, 0xa3, 0xdb, \r
-       0xe9, 0xc9, 0x8c, 0x3c, 0xca, 0xbb, 0xa6, 0x97, 0xdd, 0xdc, \r
-       0xf2, 0x68, 0xa2, 0xbe, 0x82, 0x14, 0x61, 0x4f, 0x6d, 0xcf, \r
-       0xac, 0xc1, 0xe5, 0x98, 0x5c, 0xe, 0xb4, 0x61, 0xaf, 0x77, \r
-       0xab, 0xfb, 0xff, 00, 0xc8, 0xeb, 0xa8, 0xa2, 0x8a, 0xd8, \r
-       0xf5, 0x42, 0x8a, 0x28, 0xa0, 0x2, 0x8a, 0x28, 0xa0, 0xf, \r
-       0xff, 0xd9, 0};\r
-\r
-static const char data_runtime_shtml[] = {\r
-       /* /runtime.shtml */\r
-       0x2f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0,\r
-       0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, 0x45, 0x20, \r
-       0x48, 0x54, 0x4d, 0x4c, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, \r
-       0x43, 0x20, 0x22, 0x2d, 0x2f, 0x2f, 0x57, 0x33, 0x43, 0x2f, \r
-       0x2f, 0x44, 0x54, 0x44, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x20, \r
-       0x34, 0x2e, 0x30, 0x31, 0x20, 0x54, 0x72, 0x61, 0x6e, 0x73, \r
-       0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x2f, 0x45, \r
-       0x4e, 0x22, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, \r
-       0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, \r
-       0x67, 0x2f, 0x54, 0x52, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x34, \r
-       0x2f, 0x6c, 0x6f, 0x6f, 0x73, 0x65, 0x2e, 0x64, 0x74, 0x64, \r
-       0x22, 0x3e, 0xd, 0xa, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, \r
-       0xd, 0xa, 0x20, 0x20, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, \r
-       0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x74, \r
-       0x6c, 0x65, 0x3e, 0x46, 0x72, 0x65, 0x65, 0x52, 0x54, 0x4f, \r
-       0x53, 0x2e, 0x6f, 0x72, 0x67, 0x20, 0x75, 0x49, 0x50, 0x20, \r
-       0x57, 0x45, 0x42, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, \r
-       0x20, 0x64, 0x65, 0x6d, 0x6f, 0x3c, 0x2f, 0x74, 0x69, 0x74, \r
-       0x6c, 0x65, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x3c, 0x2f, 0x68, \r
-       0x65, 0x61, 0x64, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x3c, 0x42, \r
-       0x4f, 0x44, 0x59, 0x20, 0x6f, 0x6e, 0x4c, 0x6f, 0x61, 0x64, \r
-       0x3d, 0x22, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x2e, 0x73, \r
-       0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x28, \r
-       0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x6c, 0x6f, 0x63, 0x61, \r
-       0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x68, 0x72, 0x65, 0x66, 0x3d, \r
-       0x27, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x73, \r
-       0x68, 0x74, 0x6d, 0x6c, 0x27, 0x26, 0x71, 0x75, 0x6f, 0x74, \r
-       0x3b, 0x2c, 0x32, 0x30, 0x30, 0x30, 0x29, 0x22, 0x3e, 0xd, \r
-       0xa, 0x3c, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x66, 0x61, 0x63, \r
-       0x65, 0x3d, 0x22, 0x61, 0x72, 0x69, 0x61, 0x6c, 0x22, 0x3e, \r
-       0xd, 0xa, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, \r
-       0x22, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x73, 0x68, 0x74, \r
-       0x6d, 0x6c, 0x22, 0x3e, 0x54, 0x61, 0x73, 0x6b, 0x20, 0x53, \r
-       0x74, 0x61, 0x74, 0x73, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x3c, \r
-       0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, 0x20, 0x3c, 0x61, \r
-       0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x72, 0x75, 0x6e, \r
-       0x74, 0x69, 0x6d, 0x65, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, \r
-       0x22, 0x3e, 0x52, 0x75, 0x6e, 0x20, 0x54, 0x69, 0x6d, 0x65, \r
-       0x20, 0x53, 0x74, 0x61, 0x74, 0x73, 0x3c, 0x2f, 0x61, 0x3e, \r
-       0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, 0x20, \r
-       0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x73, \r
-       0x74, 0x61, 0x74, 0x73, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, \r
-       0x22, 0x3e, 0x54, 0x43, 0x50, 0x20, 0x53, 0x74, 0x61, 0x74, \r
-       0x73, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, \r
-       0x3c, 0x2f, 0x62, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, \r
-       0x65, 0x66, 0x3d, 0x22, 0x74, 0x63, 0x70, 0x2e, 0x73, 0x68, \r
-       0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, \r
-       0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3c, 0x2f, 0x61, 0x3e, \r
-       0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, 0x20, \r
-       0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, \r
-       0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, \r
-       0x66, 0x72, 0x65, 0x65, 0x72, 0x74, 0x6f, 0x73, 0x2e, 0x6f, \r
-       0x72, 0x67, 0x2f, 0x22, 0x3e, 0x46, 0x72, 0x65, 0x65, 0x52, \r
-       0x54, 0x4f, 0x53, 0x20, 0x48, 0x6f, 0x6d, 0x65, 0x70, 0x61, \r
-       0x67, 0x65, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x3c, 0x62, 0x3e, \r
-       0x7c, 0x3c, 0x2f, 0x62, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, \r
-       0x72, 0x65, 0x66, 0x3d, 0x22, 0x69, 0x6f, 0x2e, 0x73, 0x68, \r
-       0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x49, 0x4f, 0x3c, 0x2f, 0x61, \r
-       0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, \r
-       0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, \r
-       0x6c, 0x6f, 0x67, 0x6f, 0x2e, 0x6a, 0x70, 0x67, 0x22, 0x3e, \r
-       0x33, 0x37, 0x4b, 0x20, 0x6a, 0x70, 0x67, 0x3c, 0x2f, 0x61, \r
-       0x3e, 0xd, 0xa, 0x3c, 0x62, 0x72, 0x3e, 0x3c, 0x70, 0x3e, \r
-       0xd, 0xa, 0x3c, 0x68, 0x72, 0x3e, 0xd, 0xa, 0x3c, 0x62, \r
-       0x72, 0x3e, 0x3c, 0x70, 0x3e, 0xd, 0xa, 0x3c, 0x68, 0x32, \r
-       0x3e, 0x52, 0x75, 0x6e, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x20, \r
-       0x73, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, \r
-       0x3c, 0x2f, 0x68, 0x32, 0x3e, 0xd, 0xa, 0x50, 0x61, 0x67, \r
-       0x65, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x72, 0x65, 0x66, \r
-       0x72, 0x65, 0x73, 0x68, 0x20, 0x65, 0x76, 0x65, 0x72, 0x79, \r
-       0x20, 0x32, 0x20, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, \r
-       0x2e, 0x3c, 0x70, 0x3e, 0xd, 0xa, 0x3c, 0x66, 0x6f, 0x6e, \r
-       0x74, 0x20, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x63, 0x6f, \r
-       0x75, 0x72, 0x69, 0x65, 0x72, 0x22, 0x3e, 0x3c, 0x70, 0x72, \r
-       0x65, 0x3e, 0x54, 0x61, 0x73, 0x6b, 0x20, 0x20, 0x20, 0x20, \r
-       0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x41, 0x62, \r
-       0x73, 0x20, 0x54, 0x69, 0x6d, 0x65, 0x20, 0x20, 0x20, 0x20, \r
-       0x20, 0x20, 0x25, 0x20, 0x54, 0x69, 0x6d, 0x65, 0x3c, 0x62, \r
-       0x72, 0x3e, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, \r
-       0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, \r
-       0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, \r
-       0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, \r
-       0x2a, 0x2a, 0x3c, 0x62, 0x72, 0x3e, 0xd, 0xa, 0x25, 0x21, \r
-       0x20, 0x72, 0x75, 0x6e, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0xd, \r
-       0xa, 0x3c, 0x2f, 0x70, 0x72, 0x65, 0x3e, 0x3c, 0x2f, 0x66, \r
-       0x6f, 0x6e, 0x74, 0x3e, 0xd, 0xa, 0x3c, 0x2f, 0x66, 0x6f, \r
-       0x6e, 0x74, 0x3e, 0xd, 0xa, 0x3c, 0x2f, 0x62, 0x6f, 0x64, \r
-       0x79, 0x3e, 0xd, 0xa, 0x3c, 0x2f, 0x68, 0x74, 0x6d, 0x6c, \r
-       0x3e, 0xd, 0xa, 0xd, 0xa, 0};\r
-\r
-static const char data_stats_shtml[] = {\r
-       /* /stats.shtml */\r
-       0x2f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0,\r
-       0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, 0x45, 0x20, \r
-       0x48, 0x54, 0x4d, 0x4c, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, \r
-       0x43, 0x20, 0x22, 0x2d, 0x2f, 0x2f, 0x57, 0x33, 0x43, 0x2f, \r
-       0x2f, 0x44, 0x54, 0x44, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x20, \r
-       0x34, 0x2e, 0x30, 0x31, 0x20, 0x54, 0x72, 0x61, 0x6e, 0x73, \r
-       0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x2f, 0x45, \r
-       0x4e, 0x22, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, \r
-       0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, \r
-       0x67, 0x2f, 0x54, 0x52, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x34, \r
-       0x2f, 0x6c, 0x6f, 0x6f, 0x73, 0x65, 0x2e, 0x64, 0x74, 0x64, \r
-       0x22, 0x3e, 0xd, 0xa, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, \r
-       0xd, 0xa, 0x20, 0x20, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, \r
-       0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x74, \r
-       0x6c, 0x65, 0x3e, 0x46, 0x72, 0x65, 0x65, 0x52, 0x54, 0x4f, \r
-       0x53, 0x2e, 0x6f, 0x72, 0x67, 0x20, 0x75, 0x49, 0x50, 0x20, \r
-       0x57, 0x45, 0x42, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, \r
-       0x20, 0x64, 0x65, 0x6d, 0x6f, 0x3c, 0x2f, 0x74, 0x69, 0x74, \r
-       0x6c, 0x65, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x3c, 0x2f, 0x68, \r
-       0x65, 0x61, 0x64, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x3c, 0x42, \r
-       0x4f, 0x44, 0x59, 0x3e, 0xd, 0xa, 0x3c, 0x66, 0x6f, 0x6e, \r
-       0x74, 0x20, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x61, 0x72, \r
-       0x69, 0x61, 0x6c, 0x22, 0x3e, 0xd, 0xa, 0x3c, 0x61, 0x20, \r
-       0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x69, 0x6e, 0x64, 0x65, \r
-       0x78, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x54, \r
-       0x61, 0x73, 0x6b, 0x20, 0x53, 0x74, 0x61, 0x74, 0x73, 0x3c, \r
-       0x2f, 0x61, 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, \r
-       0x62, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, \r
-       0x3d, 0x22, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, \r
-       0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x52, 0x75, 0x6e, \r
-       0x20, 0x54, 0x69, 0x6d, 0x65, 0x20, 0x53, 0x74, 0x61, 0x74, \r
-       0x73, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, \r
-       0x3c, 0x2f, 0x62, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, \r
-       0x65, 0x66, 0x3d, 0x22, 0x73, 0x74, 0x61, 0x74, 0x73, 0x2e, \r
-       0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x54, 0x43, 0x50, \r
-       0x20, 0x53, 0x74, 0x61, 0x74, 0x73, 0x3c, 0x2f, 0x61, 0x3e, \r
-       0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, 0x20, \r
-       0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x74, \r
-       0x63, 0x70, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, \r
-       0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, \r
-       0x73, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, \r
-       0x3c, 0x2f, 0x62, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, \r
-       0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, \r
-       0x2f, 0x77, 0x77, 0x77, 0x2e, 0x66, 0x72, 0x65, 0x65, 0x72, \r
-       0x74, 0x6f, 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x22, 0x3e, \r
-       0x46, 0x72, 0x65, 0x65, 0x52, 0x54, 0x4f, 0x53, 0x20, 0x48, \r
-       0x6f, 0x6d, 0x65, 0x70, 0x61, 0x67, 0x65, 0x3c, 0x2f, 0x61, \r
-       0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, \r
-       0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, \r
-       0x69, 0x6f, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, \r
-       0x49, 0x4f, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x3c, 0x62, 0x3e, \r
-       0x7c, 0x3c, 0x2f, 0x62, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, \r
-       0x72, 0x65, 0x66, 0x3d, 0x22, 0x6c, 0x6f, 0x67, 0x6f, 0x2e, \r
-       0x6a, 0x70, 0x67, 0x22, 0x3e, 0x33, 0x37, 0x4b, 0x20, 0x6a, \r
-       0x70, 0x67, 0x3c, 0x2f, 0x61, 0x3e, 0xd, 0xa, 0x3c, 0x62, \r
-       0x72, 0x3e, 0x3c, 0x70, 0x3e, 0xd, 0xa, 0x3c, 0x68, 0x72, \r
-       0x3e, 0xd, 0xa, 0x3c, 0x62, 0x72, 0x3e, 0x3c, 0x70, 0x3e, \r
-       0xd, 0xa, 0x3c, 0x68, 0x32, 0x3e, 0x4e, 0x65, 0x74, 0x77, \r
-       0x6f, 0x72, 0x6b, 0x20, 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, \r
-       0x74, 0x69, 0x63, 0x73, 0x3c, 0x2f, 0x68, 0x32, 0x3e, 0xd, \r
-       0xa, 0x3c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x77, 0x69, \r
-       0x64, 0x74, 0x68, 0x3d, 0x22, 0x33, 0x30, 0x30, 0x22, 0x20, \r
-       0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x3d, 0x22, 0x30, 0x22, \r
-       0x3e, 0xd, 0xa, 0x3c, 0x74, 0x72, 0x3e, 0x3c, 0x74, 0x64, \r
-       0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x6c, 0x65, \r
-       0x66, 0x74, 0x22, 0x3e, 0x3c, 0x66, 0x6f, 0x6e, 0x74, 0x20, \r
-       0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x63, 0x6f, 0x75, 0x72, \r
-       0x69, 0x65, 0x72, 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x65, 0x3e, \r
-       0xd, 0xa, 0x49, 0x50, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, \r
-       0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x61, 0x63, 0x6b, 0x65, \r
-       0x74, 0x73, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, \r
-       0x64, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, \r
-       0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x61, 0x63, 0x6b, \r
-       0x65, 0x74, 0x73, 0x20, 0x73, 0x65, 0x6e, 0x74, 0xd, 0xa, \r
-       0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, \r
-       0x20, 0x20, 0x20, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x64, 0x65, \r
-       0x64, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, \r
-       0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x44, 0x72, 0x6f, 0x70, \r
-       0x70, 0x65, 0x64, 0xd, 0xa, 0x49, 0x50, 0x20, 0x65, 0x72, \r
-       0x72, 0x6f, 0x72, 0x73, 0x20, 0x20, 0x20, 0x20, 0x49, 0x50, \r
-       0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x2f, 0x68, \r
-       0x65, 0x61, 0x64, 0x65, 0x72, 0x20, 0x6c, 0x65, 0x6e, 0x67, \r
-       0x74, 0x68, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, \r
-       0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x49, 0x50, 0x20, \r
-       0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x2c, 0x20, 0x68, 0x69, \r
-       0x67, 0x68, 0x20, 0x62, 0x79, 0x74, 0x65, 0xd, 0xa, 0x20, \r
-       0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, \r
-       0x20, 0x20, 0x49, 0x50, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, \r
-       0x68, 0x2c, 0x20, 0x6c, 0x6f, 0x77, 0x20, 0x62, 0x79, 0x74, \r
-       0x65, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, \r
-       0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x49, 0x50, 0x20, 0x66, \r
-       0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0xd, 0xa, \r
-       0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, \r
-       0x20, 0x20, 0x20, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x20, \r
-       0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0xd, 0xa, \r
-       0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, \r
-       0x20, 0x20, 0x20, 0x57, 0x72, 0x6f, 0x6e, 0x67, 0x20, 0x70, \r
-       0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0xd, 0xa, 0x49, \r
-       0x43, 0x4d, 0x50, 0x9, 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, \r
-       0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x20, 0x72, 0x65, 0x63, \r
-       0x65, 0x69, 0x76, 0x65, 0x64, 0xd, 0xa, 0x20, 0x20, 0x20, \r
-       0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, \r
-       0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x20, 0x73, 0x65, \r
-       0x6e, 0x74, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, \r
-       0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x61, 0x63, \r
-       0x6b, 0x65, 0x74, 0x73, 0x20, 0x64, 0x72, 0x6f, 0x70, 0x70, \r
-       0x65, 0x64, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, \r
-       0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x54, 0x79, 0x70, \r
-       0x65, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0xd, 0xa, \r
-       0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, \r
-       0x20, 0x20, 0x20, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, \r
-       0x6d, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0xd, 0xa, \r
-       0x54, 0x43, 0x50, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, \r
-       0x20, 0x20, 0x20, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, \r
-       0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0xd, \r
-       0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, \r
-       0x20, 0x20, 0x20, 0x20, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, \r
-       0x73, 0x20, 0x73, 0x65, 0x6e, 0x74, 0xd, 0xa, 0x20, 0x20, \r
-       0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, \r
-       0x20, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x20, 0x64, \r
-       0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0xd, 0xa, 0x20, 0x20, \r
-       0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, \r
-       0x20, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x20, \r
-       0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0xd, 0xa, 0x20, 0x20, \r
-       0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, \r
-       0x20, 0x44, 0x61, 0x74, 0x61, 0x20, 0x70, 0x61, 0x63, 0x6b, \r
-       0x65, 0x74, 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, \r
-       0x74, 0x20, 0x41, 0x43, 0x4b, 0x73, 0xd, 0xa, 0x20, 0x20, \r
-       0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, \r
-       0x20, 0x52, 0x65, 0x73, 0x65, 0x74, 0x73, 0xd, 0xa, 0x20, \r
-       0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, \r
-       0x20, 0x20, 0x52, 0x65, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, \r
-       0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x61, 0xd, 0xa, \r
-       0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, \r
-       0x20, 0x20, 0x20, 0x53, 0x79, 0x6e, 0x20, 0x74, 0x6f, 0x20, \r
-       0x63, 0x6c, 0x6f, 0x73, 0x65, 0x64, 0x20, 0x70, 0x6f, 0x72, \r
-       0x74, 0xd, 0xa, 0x55, 0x44, 0x50, 0x20, 0x20, 0x20, 0x20, \r
-       0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x61, 0x63, 0x6b, \r
-       0x65, 0x74, 0x73, 0x20, 0x64, 0x72, 0x6f, 0x70, 0x70, 0x65, \r
-       0x64, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, \r
-       0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x61, 0x63, 0x6b, \r
-       0x65, 0x74, 0x73, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, \r
-       0x65, 0x64, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, \r
-       0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x61, 0x63, \r
-       0x6b, 0x65, 0x74, 0x73, 0x20, 0x73, 0x65, 0x6e, 0x74, 0xd, \r
-       0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, \r
-       0x20, 0x20, 0x20, 0x20, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, \r
-       0x73, 0x20, 0x63, 0x68, 0x6b, 0x65, 0x72, 0x72, 0xd, 0xa, \r
-       0x9, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4e, 0x6f, 0x20, 0x63, \r
-       0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, \r
-       0x61, 0x76, 0x61, 0x6c, 0x69, 0x61, 0x62, 0x6c, 0x65, 0xd, \r
-       0xa, 0x3c, 0x2f, 0x70, 0x72, 0x65, 0x3e, 0x3c, 0x2f, 0x66, \r
-       0x6f, 0x6e, 0x74, 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x3c, \r
-       0x74, 0x64, 0x3e, 0x3c, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x66, \r
-       0x61, 0x63, 0x65, 0x3d, 0x22, 0x63, 0x6f, 0x75, 0x72, 0x69, \r
-       0x65, 0x72, 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x65, 0x3e, 0x25, \r
-       0x21, 0x20, 0x6e, 0x65, 0x74, 0x2d, 0x73, 0x74, 0x61, 0x74, \r
-       0x73, 0xd, 0xa, 0x3c, 0x2f, 0x70, 0x72, 0x65, 0x3e, 0x3c, \r
-       0x2f, 0x66, 0x6f, 0x6e, 0x74, 0x3e, 0x3c, 0x2f, 0x74, 0x64, \r
-       0x3e, 0x3c, 0x2f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x3e, 0xd, \r
-       0xa, 0x3c, 0x2f, 0x66, 0x6f, 0x6e, 0x74, 0x3e, 0xd, 0xa, \r
-       0x3c, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0xd, 0xa, 0x3c, \r
-       0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0xd, 0xa, 0};\r
-\r
-static const char data_tcp_shtml[] = {\r
-       /* /tcp.shtml */\r
-       0x2f, 0x74, 0x63, 0x70, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0,\r
-       0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, 0x45, 0x20, \r
-       0x48, 0x54, 0x4d, 0x4c, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, \r
-       0x43, 0x20, 0x22, 0x2d, 0x2f, 0x2f, 0x57, 0x33, 0x43, 0x2f, \r
-       0x2f, 0x44, 0x54, 0x44, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x20, \r
-       0x34, 0x2e, 0x30, 0x31, 0x20, 0x54, 0x72, 0x61, 0x6e, 0x73, \r
-       0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x2f, 0x45, \r
-       0x4e, 0x22, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, \r
-       0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, \r
-       0x67, 0x2f, 0x54, 0x52, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x34, \r
-       0x2f, 0x6c, 0x6f, 0x6f, 0x73, 0x65, 0x2e, 0x64, 0x74, 0x64, \r
-       0x22, 0x3e, 0xd, 0xa, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, \r
-       0xd, 0xa, 0x20, 0x20, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, \r
-       0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x74, \r
-       0x6c, 0x65, 0x3e, 0x46, 0x72, 0x65, 0x65, 0x52, 0x54, 0x4f, \r
-       0x53, 0x2e, 0x6f, 0x72, 0x67, 0x20, 0x75, 0x49, 0x50, 0x20, \r
-       0x57, 0x45, 0x42, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, \r
-       0x20, 0x64, 0x65, 0x6d, 0x6f, 0x3c, 0x2f, 0x74, 0x69, 0x74, \r
-       0x6c, 0x65, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x3c, 0x2f, 0x68, \r
-       0x65, 0x61, 0x64, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x3c, 0x42, \r
-       0x4f, 0x44, 0x59, 0x3e, 0xd, 0xa, 0x3c, 0x66, 0x6f, 0x6e, \r
-       0x74, 0x20, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x61, 0x72, \r
-       0x69, 0x61, 0x6c, 0x22, 0x3e, 0xd, 0xa, 0x3c, 0x61, 0x20, \r
-       0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x69, 0x6e, 0x64, 0x65, \r
-       0x78, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x54, \r
-       0x61, 0x73, 0x6b, 0x20, 0x53, 0x74, 0x61, 0x74, 0x73, 0x3c, \r
-       0x2f, 0x61, 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, \r
-       0x62, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, \r
-       0x3d, 0x22, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, \r
-       0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x52, 0x75, 0x6e, \r
-       0x20, 0x54, 0x69, 0x6d, 0x65, 0x20, 0x53, 0x74, 0x61, 0x74, \r
-       0x73, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, \r
-       0x3c, 0x2f, 0x62, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, \r
-       0x65, 0x66, 0x3d, 0x22, 0x73, 0x74, 0x61, 0x74, 0x73, 0x2e, \r
-       0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x54, 0x43, 0x50, \r
-       0x20, 0x53, 0x74, 0x61, 0x74, 0x73, 0x3c, 0x2f, 0x61, 0x3e, \r
-       0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, 0x20, \r
-       0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x74, \r
-       0x63, 0x70, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, \r
-       0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, \r
-       0x73, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, \r
-       0x3c, 0x2f, 0x62, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, \r
-       0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, \r
-       0x2f, 0x77, 0x77, 0x77, 0x2e, 0x66, 0x72, 0x65, 0x65, 0x72, \r
-       0x74, 0x6f, 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x22, 0x3e, \r
-       0x46, 0x72, 0x65, 0x65, 0x52, 0x54, 0x4f, 0x53, 0x20, 0x48, \r
-       0x6f, 0x6d, 0x65, 0x70, 0x61, 0x67, 0x65, 0x3c, 0x2f, 0x61, \r
-       0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, \r
-       0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, \r
-       0x69, 0x6f, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, \r
-       0x49, 0x4f, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x3c, 0x62, 0x3e, \r
-       0x7c, 0x3c, 0x2f, 0x62, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, \r
-       0x72, 0x65, 0x66, 0x3d, 0x22, 0x6c, 0x6f, 0x67, 0x6f, 0x2e, \r
-       0x6a, 0x70, 0x67, 0x22, 0x3e, 0x33, 0x37, 0x4b, 0x20, 0x6a, \r
-       0x70, 0x67, 0x3c, 0x2f, 0x61, 0x3e, 0xd, 0xa, 0x3c, 0x62, \r
-       0x72, 0x3e, 0x3c, 0x70, 0x3e, 0xd, 0xa, 0x3c, 0x68, 0x72, \r
-       0x3e, 0xd, 0xa, 0x3c, 0x62, 0x72, 0x3e, 0xd, 0xa, 0x3c, \r
-       0x68, 0x32, 0x3e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, \r
-       0x20, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, \r
-       0x6e, 0x73, 0x3c, 0x2f, 0x68, 0x32, 0x3e, 0xd, 0xa, 0x3c, \r
-       0x70, 0x3e, 0xd, 0xa, 0x3c, 0x74, 0x61, 0x62, 0x6c, 0x65, \r
-       0x3e, 0xd, 0xa, 0x3c, 0x74, 0x72, 0x3e, 0x3c, 0x74, 0x68, \r
-       0x3e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x2f, 0x74, 0x68, \r
-       0x3e, 0x3c, 0x74, 0x68, 0x3e, 0x52, 0x65, 0x6d, 0x6f, 0x74, \r
-       0x65, 0x3c, 0x2f, 0x74, 0x68, 0x3e, 0x3c, 0x74, 0x68, 0x3e, \r
-       0x53, 0x74, 0x61, 0x74, 0x65, 0x3c, 0x2f, 0x74, 0x68, 0x3e, \r
-       0x3c, 0x74, 0x68, 0x3e, 0x52, 0x65, 0x74, 0x72, 0x61, 0x6e, \r
-       0x73, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x3c, \r
-       0x2f, 0x74, 0x68, 0x3e, 0x3c, 0x74, 0x68, 0x3e, 0x54, 0x69, \r
-       0x6d, 0x65, 0x72, 0x3c, 0x2f, 0x74, 0x68, 0x3e, 0x3c, 0x74, \r
-       0x68, 0x3e, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x3c, 0x2f, 0x74, \r
-       0x68, 0x3e, 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0xd, 0xa, 0x25, \r
-       0x21, 0x20, 0x74, 0x63, 0x70, 0x2d, 0x63, 0x6f, 0x6e, 0x6e, \r
-       0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0xd, 0xa, 0x3c, \r
-       0x2f, 0x70, 0x72, 0x65, 0x3e, 0x3c, 0x2f, 0x66, 0x6f, 0x6e, \r
-       0x74, 0x3e, 0xd, 0xa, 0x3c, 0x2f, 0x66, 0x6f, 0x6e, 0x74, \r
-       0x3e, 0xd, 0xa, 0x3c, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, \r
-       0xd, 0xa, 0x3c, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0xd, \r
-       0xa, 0xd, 0xa, 0};\r
-\r
-const struct httpd_fsdata_file file_404_html[] = {{NULL, data_404_html, data_404_html + 10, sizeof(data_404_html) - 10}};\r
-\r
-const struct httpd_fsdata_file file_index_html[] = {{file_404_html, data_index_html, data_index_html + 12, sizeof(data_index_html) - 12}};\r
-\r
-const struct httpd_fsdata_file file_index_shtml[] = {{file_index_html, data_index_shtml, data_index_shtml + 13, sizeof(data_index_shtml) - 13}};\r
-\r
-const struct httpd_fsdata_file file_io_shtml[] = {{file_index_shtml, data_io_shtml, data_io_shtml + 10, sizeof(data_io_shtml) - 10}};\r
-\r
-const struct httpd_fsdata_file file_logo_jpg[] = {{file_io_shtml, data_logo_jpg, data_logo_jpg + 10, sizeof(data_logo_jpg) - 10}};\r
-\r
-const struct httpd_fsdata_file file_runtime_shtml[] = {{file_logo_jpg, data_runtime_shtml, data_runtime_shtml + 15, sizeof(data_runtime_shtml) - 15}};\r
-\r
-const struct httpd_fsdata_file file_stats_shtml[] = {{file_runtime_shtml, data_stats_shtml, data_stats_shtml + 13, sizeof(data_stats_shtml) - 13}};\r
-\r
-const struct httpd_fsdata_file file_tcp_shtml[] = {{file_stats_shtml, data_tcp_shtml, data_tcp_shtml + 11, sizeof(data_tcp_shtml) - 11}};\r
-\r
-#define HTTPD_FS_ROOT file_tcp_shtml\r
-\r
-#define HTTPD_FS_NUMFILES 8\r
diff --git a/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/webserver/makefsdata b/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/webserver/makefsdata
deleted file mode 100644 (file)
index a953cdd..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-#!/usr/bin/perl\r
-\r
-open(OUTPUT, "> httpd-fsdata.c");\r
-\r
-chdir("httpd-fs");\r
-\r
-opendir(DIR, ".");\r
-@files =  grep { !/^\./ && !/(CVS|~)/ } readdir(DIR);\r
-closedir(DIR);\r
-\r
-foreach $file (@files) {  \r
-   \r
-    if(-d $file && $file !~ /^\./) {\r
-       print "Processing directory $file\n";\r
-       opendir(DIR, $file);\r
-       @newfiles =  grep { !/^\./ && !/(CVS|~)/ } readdir(DIR);\r
-       closedir(DIR);\r
-       printf "Adding files @newfiles\n";\r
-       @files = (@files, map { $_ = "$file/$_" } @newfiles);\r
-       next;\r
-    }\r
-}\r
-\r
-foreach $file (@files) {\r
-    if(-f $file) {\r
-       \r
-       print "Adding file $file\n";\r
-       \r
-       open(FILE, $file) || die "Could not open file $file\n";\r
-       binmode FILE;\r
-\r
-       $file =~ s-^-/-;\r
-       $fvar = $file;\r
-       $fvar =~ s-/-_-g;\r
-       $fvar =~ s-\.-_-g;\r
-       # for AVR, add PROGMEM here\r
-       print(OUTPUT "static const char data".$fvar."[] = {\n");\r
-       print(OUTPUT "\t/* $file */\n\t");\r
-       for($j = 0; $j < length($file); $j++) {\r
-           printf(OUTPUT "%#02x, ", unpack("C", substr($file, $j, 1)));\r
-       }\r
-       printf(OUTPUT "0,\n");\r
-       \r
-       \r
-       $i = 0;        \r
-       while(read(FILE, $data, 1)) {\r
-           if($i == 0) {\r
-               print(OUTPUT "\t");\r
-           }\r
-           printf(OUTPUT "%#02x, ", unpack("C", $data));\r
-           $i++;\r
-           if($i == 10) {\r
-               print(OUTPUT "\n");\r
-               $i = 0;\r
-           }\r
-       }\r
-       print(OUTPUT "0};\n\n");\r
-       close(FILE);\r
-       push(@fvars, $fvar);\r
-       push(@pfiles, $file);\r
-    }\r
-}\r
-\r
-for($i = 0; $i < @fvars; $i++) {\r
-    $file = $pfiles[$i];\r
-    $fvar = $fvars[$i];\r
-\r
-    if($i == 0) {\r
-        $prevfile = "NULL";\r
-    } else {\r
-        $prevfile = "file" . $fvars[$i - 1];\r
-    }\r
-    print(OUTPUT "const struct httpd_fsdata_file file".$fvar."[] = {{$prevfile, data$fvar, ");\r
-    print(OUTPUT "data$fvar + ". (length($file) + 1) .", ");\r
-    print(OUTPUT "sizeof(data$fvar) - ". (length($file) + 1) ."}};\n\n");\r
-}\r
-\r
-print(OUTPUT "#define HTTPD_FS_ROOT file$fvars[$i - 1]\n\n");\r
-print(OUTPUT "#define HTTPD_FS_NUMFILES $i\n");\r
diff --git a/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/webserver/phy.c b/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/webserver/phy.c
deleted file mode 100644 (file)
index 8002fcb..0000000
+++ /dev/null
@@ -1,468 +0,0 @@
-/******************************************************************************\r
-* DISCLAIMER\r
-\r
-* This software is supplied by Renesas Technology Corp. and is only \r
-* intended for use with Renesas products. No other uses are authorized.\r
-\r
-* This software is owned by Renesas Technology Corp. and is protected under \r
-* all applicable laws, including copyright laws.\r
-\r
-* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES\r
-* REGARDING THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, \r
-* INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A \r
-* PARTICULAR PURPOSE AND NON-INFRINGEMENT.  ALL SUCH WARRANTIES ARE EXPRESSLY \r
-* DISCLAIMED.\r
-\r
-* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS \r
-* TECHNOLOGY CORP. NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE \r
-* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES \r
-* FOR ANY REASON RELATED TO THE THIS SOFTWARE, EVEN IF RENESAS OR ITS \r
-* AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\r
-\r
-* Renesas reserves the right, without notice, to make changes to this \r
-* software and to discontinue the availability of this software.  \r
-* By using this software, you agree to the additional terms and \r
-* conditions found by accessing the following link:\r
-* http://www.renesas.com/disclaimer\r
-******************************************************************************\r
-* Copyright (C) 2008. Renesas Technology Corp., All Rights Reserved.\r
-*******************************************************************************        \r
-* File Name    : phy.c\r
-* Version      : 1.01\r
-* Description  : Ethernet PHY device driver\r
-******************************************************************************\r
-* History : DD.MM.YYYY Version Description\r
-*         : 15.02.2010 1.00    First Release\r
-*         : 06.04.2010 1.01    RX62N changes\r
-******************************************************************************/\r
-\r
-\r
-/******************************************************************************\r
-Includes   <System Includes> , "Project Includes"\r
-******************************************************************************/\r
-#include "iodefine.h"\r
-#include "r_ether.h"\r
-#include "phy.h"\r
-\r
-#include "FreeRTOS.h"\r
-#include "task.h"\r
-/******************************************************************************\r
-Typedef definitions\r
-******************************************************************************/\r
-\r
-/******************************************************************************\r
-Macro definitions\r
-******************************************************************************/\r
-\r
-/******************************************************************************\r
-Imported global variables and functions (from other files)\r
-******************************************************************************/\r
-\r
-/******************************************************************************\r
-Exported global variables and functions (to be accessed by other files)\r
-******************************************************************************/\r
-\r
-/******************************************************************************\r
-Private global variables and functions\r
-******************************************************************************/\r
-uint16_t  _phy_read( uint16_t reg_addr );\r
-void  _phy_write( uint16_t reg_addr, uint16_t data );\r
-void  _phy_preamble( void );\r
-void  _phy_reg_set( uint16_t reg_addr, int32_t option );\r
-void  _phy_reg_read( uint16_t *data );\r
-void  _phy_reg_write( uint16_t data );\r
-void  _phy_ta_z0( void );\r
-void  _phy_ta_10( void );\r
-void  _phy_mii_write_1( void );\r
-void  _phy_mii_write_0( void );\r
-\r
-/**\r
- * External functions\r
- */\r
-\r
-/******************************************************************************\r
-* Function Name: phy_init\r
-* Description  : Resets Ethernet PHY device\r
-* Arguments    : none\r
-* Return Value : none\r
-******************************************************************************/\r
-int16_t  phy_init( void )\r
-{\r
-  uint16_t reg;\r
-  uint32_t count;\r
-\r
-  /* Reset PHY */\r
-  _phy_write(BASIC_MODE_CONTROL_REG, 0x8000);\r
-\r
-  count = 0;\r
-\r
-  do\r
-  {\r
-         vTaskDelay( 2 / portTICK_PERIOD_MS );\r
-      reg = _phy_read(BASIC_MODE_CONTROL_REG);\r
-         count++;\r
-  } while (reg & 0x8000 && count < PHY_RESET_WAIT);\r
-\r
-  if( count < PHY_RESET_WAIT )\r
-  {      \r
-       return R_PHY_OK;\r
-  }\r
-  \r
-  return R_PHY_ERROR;\r
-}\r
-\r
-/******************************************************************************\r
-* Function Name: phy_set_100full\r
-* Description  : Set Ethernet PHY device to 100 Mbps full duplex\r
-* Arguments    : none\r
-* Return Value : none\r
-******************************************************************************/\r
-void phy_set_100full( void )\r
-{\r
-       _phy_write(BASIC_MODE_CONTROL_REG, 0x2100);\r
-}\r
-\r
-/******************************************************************************\r
-* Function Name: phy_set_10half\r
-* Description  : Sets Ethernet PHY device to 10 Mbps half duplexR\r
-* Arguments    : none\r
-* Return Value : none\r
-******************************************************************************/\r
-void phy_set_10half( void )\r
-{\r
-       _phy_write(BASIC_MODE_CONTROL_REG, 0x0000);\r
-}\r
-\r
-/******************************************************************************\r
-* Function Name: phy_set_autonegotiate\r
-* Description  : Starts autonegotiate and reports the other side's \r
-*              : physical capability\r
-* Arguments    : none\r
-* Return Value : bit 8 - Full duplex 100 mbps\r
-*              : bit 7 - Half duplex 100 mbps\r
-*              : bit 6 - Full duplex 10 mbps\r
-*              : bit 5 - Half duplex 10 mbps\r
-*              : bit 4:0 - Always set to 00001 (IEEE 802.3)\r
-*              : -1 if error\r
-******************************************************************************/\r
-int16_t phy_set_autonegotiate( void )\r
-{\r
-  uint16_t reg;\r
-  uint32_t count;\r
-\r
-  _phy_write(AN_ADVERTISEMENT_REG, 0x01E1);\r
-  _phy_write(BASIC_MODE_CONTROL_REG, 0x1200);\r
-  \r
-  count = 0;\r
-\r
-  do\r
-  {\r
-      reg = _phy_read(BASIC_MODE_STATUS_REG);\r
-      count++;\r
-         vTaskDelay( 100 / portTICK_PERIOD_MS );\r
-         \r
-         /* Make sure we don't break out if reg just contains 0xffff. */\r
-         if( reg == 0xffff )\r
-         {\r
-               reg = 0;\r
-         }\r
-         \r
-  } while (!(reg & 0x0020) && (count < PHY_AUTO_NEGOTIATON_WAIT));\r
-\r
-  if (count >= PHY_AUTO_NEGOTIATON_WAIT)\r
-  {\r
-      return R_PHY_ERROR;\r
-  }\r
-  else\r
-  {\r
-      /* Get the link partner response */\r
-         reg = (int16_t)_phy_read(AN_LINK_PARTNER_ABILITY_REG);\r
-         \r
-         if (reg & ( 1 << 8 ) )\r
-         {\r
-                 return PHY_LINK_100F;\r
-         }\r
-         if (reg & ( 1 << 7 ) )\r
-         {\r
-                 return PHY_LINK_100H;\r
-         }\r
-         if (reg & ( 1 << 6 ) )\r
-         {\r
-                 return PHY_LINK_10F;\r
-         }\r
-         if (reg & 1 << 5 )\r
-         {\r
-                 return PHY_LINK_10H;\r
-         }       \r
-\r
-         return (-1);\r
-  }\r
-}\r
-\r
-\r
-/**\r
- * Internal functions\r
- */\r
-\r
-/******************************************************************************\r
-* Function Name: _phy_read\r
-* Description  : Reads a PHY register\r
-* Arguments    : reg_addr - address of the PHY register\r
-* Return Value : read value\r
-******************************************************************************/\r
-uint16_t _phy_read( uint16_t reg_addr )\r
-{\r
-  uint16_t data;\r
-\r
-  _phy_preamble();\r
-  _phy_reg_set( reg_addr, PHY_READ );\r
-  _phy_ta_z0();\r
-  _phy_reg_read( &data );\r
-  _phy_ta_z0();\r
-\r
-  return( data );\r
-}\r
-\r
-/******************************************************************************\r
-* Function Name: _phy_write\r
-* Description  : Writes to a PHY register\r
-* Arguments    : reg_addr - address of the PHY register\r
-*              : data - value\r
-* Return Value : none\r
-******************************************************************************/\r
-void  _phy_write( uint16_t reg_addr, uint16_t data )\r
-{\r
-  _phy_preamble();\r
-  _phy_reg_set( reg_addr, PHY_WRITE );\r
-  _phy_ta_10();\r
-  _phy_reg_write( data );\r
-  _phy_ta_z0();\r
-}\r
-\r
-/******************************************************************************\r
-* Function Name: _phy_preamble\r
-* Description  : As preliminary preparation for access to the PHY module register,\r
-*                "1" is output via the MII management interface.                  \r
-* Arguments    : none\r
-* Return Value : none\r
-******************************************************************************/\r
-void  _phy_preamble( void )\r
-{\r
-  int16_t i;\r
-\r
-  i = 32;\r
-  while( i > 0 )\r
-  {\r
-    _phy_mii_write_1();\r
-    i--;\r
-  }\r
-}\r
-\r
-/******************************************************************************\r
-* Function Name: _phy_reg_set\r
-* Description  : Sets a PHY device to read or write mode\r
-* Arguments    : reg_addr - address of the PHY register\r
-*              : option - mode\r
-* Return Value : none\r
-******************************************************************************/\r
-void  _phy_reg_set( uint16_t reg_addr, int32_t option )\r
-{\r
-  int32_t    i;\r
-  uint16_t data;\r
-\r
-  data = 0;\r
-  data = (PHY_ST << 14);        /* ST code    */\r
-\r
-  if( option == PHY_READ )\r
-  {\r
-    data |= (PHY_READ << 12);  /* OP code(RD)  */\r
-  }\r
-  else\r
-  {\r
-    data |= (PHY_WRITE << 12);  /* OP code(WT)  */\r
-  }\r
-\r
-  data |= (PHY_ADDR << 7);    /* PHY Address  */\r
-  data |= (reg_addr << 2);    /* Reg Address  */\r
-\r
-  i = 14;\r
-  while( i > 0 )\r
-  {\r
-    if( (data & 0x8000) == 0 )\r
-    {\r
-      _phy_mii_write_0();\r
-    }\r
-    else\r
-    {\r
-      _phy_mii_write_1();\r
-    }\r
-    data <<= 1;\r
-    i--;\r
-  }\r
-}\r
-\r
-/******************************************************************************\r
-* Function Name: _phy_reg_read\r
-* Description  : Reads PHY register through MII interface\r
-* Arguments    : data - pointer to store the data read\r
-* Return Value : none\r
-******************************************************************************/\r
-void  _phy_reg_read( uint16_t *data )\r
-{\r
-  int32_t      i, j;\r
-  uint16_t   reg_data;\r
-\r
-  reg_data = 0;\r
-  i = 16;\r
-  while( i > 0 )\r
-  {\r
-    for(j = MDC_WAIT; j > 0; j--)\r
-       {\r
-        ETHERC.PIR.LONG = 0x00000000;\r
-    }\r
-    for(j = MDC_WAIT; j > 0; j--)\r
-       {\r
-        ETHERC.PIR.LONG = 0x00000001;\r
-    }\r
-    \r
-       reg_data <<= 1;\r
-    reg_data |= (uint16_t)((ETHERC.PIR.LONG & 0x00000008) >> 3);  /* MDI read  */\r
-\r
-    for(j = MDC_WAIT; j > 0; j--)\r
-       {\r
-        ETHERC.PIR.LONG = 0x00000001;\r
-    }\r
-    for(j = MDC_WAIT; j > 0; j--)\r
-       {\r
-        ETHERC.PIR.LONG = 0x00000000;\r
-    }\r
-    i--;\r
-  }\r
-  *data = reg_data;\r
-}\r
-\r
-/******************************************************************************\r
-* Function Name: _phy_reg_write\r
-* Description  : Writes to PHY register through MII interface\r
-* Arguments    : data - value to write\r
-* Return Value : none\r
-******************************************************************************/\r
-void  _phy_reg_write( uint16_t data )\r
-{\r
-  int32_t  i;\r
-\r
-  i = 16;\r
-  while( i > 0 )\r
-  {\r
-    if( (data & 0x8000) == 0 )\r
-    {\r
-      _phy_mii_write_0();\r
-    }\r
-    else\r
-    {\r
-      _phy_mii_write_1();\r
-    }\r
-    i--;\r
-    data <<= 1;\r
-  }\r
-}\r
-\r
-/******************************************************************************\r
-* Function Name: _phy_ta_z0\r
-* Description  : Performs bus release so that PHY can drive data\r
-*              : for read operation \r
-* Arguments    : none\r
-* Return Value : none\r
-******************************************************************************/\r
-void  _phy_ta_z0( void )\r
-{\r
-    int32_t j;\r
-\r
-    for(j = MDC_WAIT; j > 0; j--)\r
-       {\r
-        ETHERC.PIR.LONG = 0x00000000;\r
-    }\r
-    for(j = MDC_WAIT; j > 0; j--)\r
-       {\r
-        ETHERC.PIR.LONG = 0x00000001;\r
-    }\r
-    for(j = MDC_WAIT; j > 0; j--)\r
-       {\r
-        ETHERC.PIR.LONG = 0x00000001;\r
-    }\r
-    for(j = MDC_WAIT; j > 0; j--)\r
-       {\r
-        ETHERC.PIR.LONG = 0x00000000;\r
-    }\r
-}\r
-\r
-/******************************************************************************\r
-* Function Name: _phy_ta_10\r
-* Description  : Switches data bus so MII interface can drive data\r
-*              : for write operation \r
-* Arguments    : none\r
-* Return Value : none\r
-******************************************************************************/\r
-void _phy_ta_10(void)\r
-{\r
-    _phy_mii_write_1();\r
-    _phy_mii_write_0();\r
-}\r
-\r
-/******************************************************************************\r
-* Function Name: _phy_mii_write_1\r
-* Description  : Outputs 1 to the MII interface \r
-* Arguments    : none\r
-* Return Value : none\r
-******************************************************************************/\r
-void  _phy_mii_write_1( void )\r
-{\r
-    int32_t j;\r
-\r
-    for(j = MDC_WAIT; j > 0; j--)\r
-       {\r
-        ETHERC.PIR.LONG = 0x00000006;\r
-    }\r
-    for(j = MDC_WAIT; j > 0; j--)\r
-       {\r
-        ETHERC.PIR.LONG = 0x00000007;\r
-    }\r
-    for(j = MDC_WAIT; j > 0; j--)\r
-       {\r
-        ETHERC.PIR.LONG = 0x00000007;\r
-    }\r
-    for(j = MDC_WAIT; j > 0; j--)\r
-       {\r
-        ETHERC.PIR.LONG = 0x00000006;\r
-    }\r
-}\r
-\r
-/******************************************************************************\r
-* Function Name: _phy_mii_write_0\r
-* Description  : Outputs 0 to the MII interface \r
-* Arguments    : none\r
-* Return Value : none\r
-******************************************************************************/\r
-void  _phy_mii_write_0( void )\r
-{\r
-    int32_t j;\r
-\r
-    for(j = MDC_WAIT; j > 0; j--)\r
-       {\r
-        ETHERC.PIR.LONG = 0x00000002;\r
-    }\r
-    for(j = MDC_WAIT; j > 0; j--)\r
-       {\r
-        ETHERC.PIR.LONG = 0x00000003;\r
-    }\r
-    for(j = MDC_WAIT; j > 0; j--)\r
-       {\r
-        ETHERC.PIR.LONG = 0x00000003;\r
-    }\r
-    for(j = MDC_WAIT; j > 0; j--)\r
-       {\r
-        ETHERC.PIR.LONG = 0x00000002;\r
-    }\r
-}\r
-\r
-\r
diff --git a/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/webserver/phy.h b/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/webserver/phy.h
deleted file mode 100644 (file)
index 50415a7..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-/******************************************************************************\r
-* DISCLAIMER\r
-* Please refer to http://www.renesas.com/disclaimer\r
-******************************************************************************\r
-  Copyright (C) 2008. Renesas Technology Corp., All Rights Reserved.\r
-*******************************************************************************\r
-* File Name    : phy.h\r
-* Version      : 1.02\r
-* Description  : Ethernet PHY device driver\r
-******************************************************************************\r
-* History : DD.MM.YYYY Version Description\r
-*         : 15.02.2010 1.00    First Release\r
-*         : 17.03.2010 1.01    Modification of macro definitions for access timing\r
-*         : 06.04.2010 1.02    RX62N changes\r
-******************************************************************************/\r
-\r
-#ifndef        PHY_H\r
-#define        PHY_H\r
-\r
-/******************************************************************************\r
-Includes   <System Includes> , "Project Includes"\r
-******************************************************************************/\r
-#include <stdint.h>\r
-\r
-/******************************************************************************\r
-Typedef definitions\r
-******************************************************************************/\r
-\r
-/******************************************************************************\r
-Macro definitions\r
-******************************************************************************/\r
-/* Standard PHY Registers */\r
-#define        BASIC_MODE_CONTROL_REG          0       \r
-#define        BASIC_MODE_STATUS_REG           1       \r
-#define        PHY_IDENTIFIER1_REG                 2       \r
-#define        PHY_IDENTIFIER2_REG                 3       \r
-#define        AN_ADVERTISEMENT_REG            4       \r
-#define        AN_LINK_PARTNER_ABILITY_REG     5       \r
-#define        AN_EXPANSION_REG                    6\r
-\r
-/* Media Independent Interface */\r
-#define  PHY_ST    1\r
-#define  PHY_READ  2\r
-#define  PHY_WRITE 1\r
-#define  PHY_ADDR  0x1F\r
-\r
-#define  MDC_WAIT  2\r
-\r
-/* PHY return definitions */\r
-#define R_PHY_OK     0\r
-#define R_PHY_ERROR -1\r
-\r
-/* Auto-Negotiation Link Partner Status */\r
-#define PHY_AN_LINK_PARTNER_100BASE    0x0180\r
-#define PHY_AN_LINK_PARTNER_FULL       0x0140\r
-#define PHY_AN_COMPLETE                                ( 1 << 5 )\r
-\r
-/*\r
- *     Wait counter definitions of PHY-LSI initialization\r
- *     ICLK = 96MHz\r
-*/\r
-#define PHY_RESET_WAIT                         0x00000020L\r
-#define PHY_AUTO_NEGOTIATON_WAIT       75\r
-\r
-#define PHY_AN_ENABLE                          0x1200\r
-#define PHY_AN_10_100_F_H                      0xde1\r
-\r
-/******************************************************************************\r
-Variable Externs\r
-******************************************************************************/\r
-\r
-/******************************************************************************\r
-Functions Prototypes\r
-******************************************************************************/\r
-/**\r
- * External prototypes\r
- **/\r
-int16_t        phy_init( void );\r
-void   phy_set_100full( void );\r
-void   phy_set_10half( void );\r
-int16_t        phy_set_autonegotiate( void );\r
-\r
-#endif /* PHY_H */\r
-\r
diff --git a/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/webserver/r_ether.h b/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/webserver/r_ether.h
deleted file mode 100644 (file)
index 13157ab..0000000
+++ /dev/null
@@ -1,185 +0,0 @@
-/******************************************************************************\r
-* DISCLAIMER\r
-* Please refer to http://www.renesas.com/disclaimer\r
-******************************************************************************\r
-  Copyright (C) 2008. Renesas Technology Corp., All Rights Reserved.\r
-*******************************************************************************\r
-* File Name    : r_ether.h\r
-* Version      : 1.02\r
-* Description  : Ethernet module device driver\r
-******************************************************************************\r
-* History : DD.MM.YYYY Version Description\r
-*         : 15.02.2010 1.00    First Release\r
-*         : 03.03.2010 1.01    Buffer size is aligned on the 32-byte boundary.\r
-*         : 04.06.2010 1.02    RX62N changes\r
-******************************************************************************/\r
-\r
-#ifndef        R_ETHER_H\r
-#define        R_ETHER_H\r
-\r
-/******************************************************************************\r
-Includes   <System Includes> , "Project Includes"\r
-******************************************************************************/\r
-#include <stdint.h>\r
-\r
-/******************************************************************************\r
-Typedef definitions\r
-******************************************************************************/\r
-struct Descriptor\r
-{\r
-       __evenaccess uint32_t   status;\r
-#if __LIT                               \r
-/* Little endian */\r
-       __evenaccess uint16_t   size;\r
-       __evenaccess uint16_t   bufsize;\r
-#else                                   \r
-/* Big endian */\r
-       __evenaccess uint16_t   bufsize;\r
-       __evenaccess uint16_t   size;\r
-\r
-#endif\r
-       int8_t                                  *buf_p;\r
-       struct Descriptor               *next;\r
-};\r
-\r
-typedef struct Descriptor ethfifo;\r
-\r
-typedef enum _NETLNK\r
-{\r
-    PHY_NO_LINK = 0,\r
-    PHY_LINK_10H,\r
-    PHY_LINK_10F,\r
-    PHY_LINK_100H,\r
-    PHY_LINK_100F\r
-    \r
-} NETLNK;\r
-\r
-/******************************************************************************\r
-Macro definitions\r
-******************************************************************************/\r
-#define        BUFSIZE   256                   /* Must be 32-bit aligned */\r
-#define ENTRY     8                     /* Number of RX and TX buffers */\r
-\r
-#define  ACT      0x80000000\r
-#define  DL       0x40000000\r
-#define  FP1      0x20000000\r
-#define  FP0      0x10000000\r
-#define  FE       0x08000000\r
-\r
-#define  RFOVER   0x00000200\r
-#define  RAD      0x00000100\r
-#define  RMAF     0x00000080\r
-#define  RRF      0x00000010\r
-#define  RTLF     0x00000008\r
-#define  RTSF     0x00000004\r
-#define  PRE      0x00000002\r
-#define  CERF     0x00000001\r
-\r
-#define  TAD      0x00000100\r
-#define  CND      0x00000008\r
-#define  DLC      0x00000004\r
-#define  CD       0x00000002\r
-#define  TRO      0x00000001\r
-\r
-/** \r
- * Renesas Ethernet API return defines\r
- **/\r
-#define R_ETHER_OK          0\r
-#define R_ETHER_ERROR       -1\r
-\r
-/*     Ether Interface definitions     */\r
-#define ETH_RMII_MODE  0\r
-#define ETH_MII_MODE   1\r
-/*     Select Ether Interface Mode     */\r
-#define ETH_MODE_SEL   ETH_MII_MODE\r
-\r
-/******************************************************************************\r
-Variable Externs\r
-******************************************************************************/\r
-\r
-/******************************************************************************\r
-Functions Prototypes\r
-******************************************************************************/\r
-/** \r
- * Renesas Ethernet API prototypes\r
- **/\r
-int32_t R_Ether_Open(uint32_t ch, uint8_t mac_addr[]);\r
-int32_t R_Ether_Close(uint32_t ch);\r
-int32_t R_Ether_Write(uint32_t ch, void *buf, uint32_t len);\r
-int32_t R_Ether_Read(uint32_t ch, void *buf);\r
-\r
-/**\r
- * FreeRTOS Ethernet API prototypes.\r
- */\r
-\r
-/*\r
- * Configure all the ethernet components (MAC, DMA, PHY) ready for communication.\r
- */\r
-void vInitEmac( void );\r
-\r
-/*\r
- * Auto negotiate the link, returning pass or fail depending on whether a link\r
- * was established or not.\r
- */\r
-long lEMACWaitForLink( void );\r
-\r
-/*\r
- * Check the Rx status, and return the number of bytes received if any.\r
- */\r
-unsigned long ulEMACRead( void );\r
-\r
-/*\r
- * Send uip_len bytes from uip_buf to the Tx descriptors and initiate a Tx.\r
- */\r
-void vEMACWrite( void );\r
-\r
-\r
-\r
-\r
-/****************************************************/\r
-/* Ethernet statistic collection data */\r
-struct enet_stats\r
-{\r
-  uint32_t  rx_packets;      /* total packets received    */\r
-  uint32_t  tx_packets;      /* total packets transmitted  */\r
-  uint32_t  rx_errors;       /* bad packets received      */\r
-  uint32_t  tx_errors;       /* packet transmit problems    */\r
-  uint32_t  rx_dropped;      /* no space in buffers      */\r
-  uint32_t  tx_dropped;      /* no space available      */\r
-  uint32_t  multicast;       /* multicast packets received  */\r
-  uint32_t  collisions;\r
-\r
-  /* detailed rx_errors: */\r
-  uint32_t  rx_length_errors;\r
-  uint32_t  rx_over_errors;    /* receiver ring buffer overflow  */\r
-  uint32_t  rx_crc_errors;     /* recved pkt with crc error  */\r
-  uint32_t  rx_frame_errors;   /* recv'd frame alignment error  */\r
-  uint32_t  rx_fifo_errors;    /* recv'r fifo overrun      */\r
-  uint32_t  rx_missed_errors;  /* receiver missed packet    */\r
-\r
-  /* detailed tx_errors */\r
-  uint32_t  tx_aborted_errors;\r
-  uint32_t  tx_carrier_errors;\r
-  uint32_t  tx_fifo_errors;\r
-  uint32_t  tx_heartbeat_errors;\r
-  uint32_t  tx_window_errors;\r
-};\r
-\r
-struct ei_device\r
-{\r
-  const int8_t      *name;\r
-  uint8_t           open;\r
-  uint8_t           Tx_act;\r
-  uint8_t           Rx_act;\r
-  uint8_t           txing;        /* Transmit Active */\r
-  uint8_t           irqlock;      /* EDMAC's interrupt disabled when '1'. */\r
-  uint8_t           dmaing;       /* EDMAC Active */\r
-  ethfifo           *rxcurrent;   /* current receive discripter */\r
-  ethfifo           *txcurrent;   /* current transmit discripter */\r
-  uint8_t           save_irq;     /* Original dev->irq value. */\r
-  struct enet_stats stat;\r
-  uint8_t           mac_addr[6];\r
-};\r
-\r
-#endif /* R_ETHER_H */\r
-\r
diff --git a/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/webserver/uip-conf.h b/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/webserver/uip-conf.h
deleted file mode 100644 (file)
index 00f7396..0000000
+++ /dev/null
@@ -1,167 +0,0 @@
-/**\r
- * \addtogroup uipopt\r
- * @{\r
- */\r
-\r
-/**\r
- * \name Project-specific configuration options\r
- * @{\r
- *\r
- * uIP has a number of configuration options that can be overridden\r
- * for each project. These are kept in a project-specific uip-conf.h\r
- * file and all configuration names have the prefix UIP_CONF.\r
- */\r
-\r
-/*\r
- * Copyright (c) 2006, Swedish Institute of Computer Science.\r
- * All rights reserved.\r
- *\r
- * Redistribution and use in source and binary forms, with or without\r
- * modification, are permitted provided that the following conditions\r
- * are met:\r
- * 1. Redistributions of source code must retain the above copyright\r
- *    notice, this list of conditions and the following disclaimer.\r
- * 2. Redistributions in binary form must reproduce the above copyright\r
- *    notice, this list of conditions and the following disclaimer in the\r
- *    documentation and/or other materials provided with the distribution.\r
- * 3. Neither the name of the Institute nor the names of its contributors\r
- *    may be used to endorse or promote products derived from this software\r
- *    without specific prior written permission.\r
- *\r
- * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND\r
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE\r
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\r
- * SUCH DAMAGE.\r
- *\r
- * This file is part of the uIP TCP/IP stack\r
- *\r
- * $Id: uip-conf.h,v 1.6 2006/06/12 08:00:31 adam Exp $\r
- */\r
-\r
-/**\r
- * \file\r
- *         An example uIP configuration file\r
- * \author\r
- *         Adam Dunkels <adam@sics.se>\r
- */\r
-\r
-#ifndef __UIP_CONF_H__\r
-#define __UIP_CONF_H__\r
-\r
-#define UIP_CONF_EXTERNAL_BUFFER\r
-#define UIP_CONF_PROCESS_HTTPD_FORMS 1\r
-\r
-/**\r
- * 8 bit datatype\r
- *\r
- * This typedef defines the 8-bit type used throughout uIP.\r
- *\r
- * \hideinitializer\r
- */\r
-typedef unsigned char u8_t;\r
-\r
-/**\r
- * 16 bit datatype\r
- *\r
- * This typedef defines the 16-bit type used throughout uIP.\r
- *\r
- * \hideinitializer\r
- */\r
-typedef unsigned short u16_t;\r
-\r
-typedef unsigned long u32_t;\r
-\r
-/**\r
- * Statistics datatype\r
- *\r
- * This typedef defines the dataype used for keeping statistics in\r
- * uIP.\r
- *\r
- * \hideinitializer\r
- */\r
-typedef unsigned short uip_stats_t;\r
-\r
-/**\r
- * Maximum number of TCP connections.\r
- *\r
- * \hideinitializer\r
- */\r
-#define UIP_CONF_MAX_CONNECTIONS 40\r
-\r
-/**\r
- * Maximum number of listening TCP ports.\r
- *\r
- * \hideinitializer\r
- */\r
-#define UIP_CONF_MAX_LISTENPORTS 40\r
-\r
-/**\r
- * uIP buffer size.\r
- *\r
- * \hideinitializer\r
- */\r
-#define UIP_CONF_BUFFER_SIZE     1480\r
-\r
-/**\r
- * CPU byte order.\r
- *\r
- * \hideinitializer\r
- */\r
-#ifdef __LIT\r
-#define UIP_CONF_BYTE_ORDER      UIP_LITTLE_ENDIAN\r
-#else\r
-#define UIP_CONF_BYTE_ORDER      UIP_BIG_ENDIAN\r
-#endif\r
-\r
-/**\r
- * Logging on or off\r
- *\r
- * \hideinitializer\r
- */\r
-#define UIP_CONF_LOGGING         0\r
-\r
-/**\r
- * UDP support on or off\r
- *\r
- * \hideinitializer\r
- */\r
-#define UIP_CONF_UDP             0\r
-\r
-/**\r
- * UDP checksums on or off\r
- *\r
- * \hideinitializer\r
- */\r
-#define UIP_CONF_UDP_CHECKSUMS   1\r
-\r
-/**\r
- * uIP statistics on or off\r
- *\r
- * \hideinitializer\r
- */\r
-#define UIP_CONF_STATISTICS      1\r
-\r
-/* Here we include the header file for the application(s) we use in\r
-   our project. */\r
-/*#include "smtp.h"*/\r
-/*#include "hello-world.h"*/\r
-/*#include "telnetd.h"*/\r
-#include "webserver.h"\r
-/*#include "dhcpc.h"*/\r
-/*#include "resolv.h"*/\r
-/*#include "webclient.h"*/\r
-\r
-#define CCIF\r
-#define CC_REGISTER_ARG\r
-\r
-#endif /* __UIP_CONF_H__ */\r
-\r
-/** @} */\r
-/** @} */\r
diff --git a/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/webserver/webserver.h b/FreeRTOS/Demo/RX600_RX63N-RSK_Renesas/RTOSDemo/webserver/webserver.h
deleted file mode 100644 (file)
index 5267f05..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/*\r
- * Copyright (c) 2002, Adam Dunkels.\r
- * All rights reserved.\r
- *\r
- * Redistribution and use in source and binary forms, with or without\r
- * modification, are permitted provided that the following conditions\r
- * are met:\r
- * 1. Redistributions of source code must retain the above copyright\r
- *    notice, this list of conditions and the following disclaimer.\r
- * 2. Redistributions in binary form must reproduce the above\r
- *    copyright notice, this list of conditions and the following\r
- *    disclaimer in the documentation and/or other materials provided\r
- *    with the distribution.\r
- * 3. The name of the author may not be used to endorse or promote\r
- *    products derived from this software without specific prior\r
- *    written permission.\r
- *\r
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\r
- * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\r
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE\r
- * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
- *\r
- * This file is part of the uIP TCP/IP stack\r
- *\r
- * $Id: webserver.h,v 1.2 2006/06/11 21:46:38 adam Exp $\r
- *\r
- */\r
-#ifndef __WEBSERVER_H__\r
-#define __WEBSERVER_H__\r
-\r
-#include "apps/httpd/httpd.h"\r
-\r
-typedef struct httpd_state uip_tcp_appstate_t;\r
-/* UIP_APPCALL: the name of the application function. This function\r
-   must return void and take no arguments (i.e., C type "void\r
-   appfunc(void)"). */\r
-#define UIP_APPCALL     httpd_appcall\r
-\r
-\r
-#endif /* __WEBSERVER_H__ */\r
index 84545e5b8c8396cfa962521b5d892a38c89a4fd9..ce09cda75b7fc0b4f47b74a55920ebb08067fc66 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index bc4f93e264c2d9c7e102da2dde8a3fa6f36ad7dc..47abfb1280e6ff17b13940ba24f500aa4fadea0a 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d26057f9a6dff07dfb1cd8bc23d07eeee199a3e7..6d56a462f18157c5cd669ad2ea6aa7f0d6e25f70 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 48cc680ecfaca42c71c488c914da0da828e14f49..4d44294ce1c8323aff14db02ce4908673791fcba 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 72e477d18d77de1ca32dcf70b87f3b514bf90047..1cb6bec04679d98a593b86d7ec5e84a547ac6200 100644 (file)
@@ -1,6 +1,6 @@
 ;/*\r
-; * FreeRTOS Kernel V10.2.1\r
-; * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+; * FreeRTOS Kernel V10.3.0\r
+; * Copyright (C) 2020 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
index 41a4d6746bbec15b66662a4beedf888740f01757..697e3047263063c3075f1b8ed663eff3c60a3335 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 1b622377713327a8cd6af875d7423b7d3e6c56e1..b4060575ff182f795f2ce7edf86c28c2c6e87926 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index b1f06c8efe84eb30560c01388596846c051e97fa..4cd30869d7e6c13c400be59bf1636564be8d7d0b 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 84545e5b8c8396cfa962521b5d892a38c89a4fd9..ce09cda75b7fc0b4f47b74a55920ebb08067fc66 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 2e68a7364d39f19844353a1b63bac1e84687e023..a6949541a61a85a7f6871d0ceb6ee86d2a65ee05 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d26057f9a6dff07dfb1cd8bc23d07eeee199a3e7..6d56a462f18157c5cd669ad2ea6aa7f0d6e25f70 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 254632deefde9e8840313cd2cfe6664426d94bfe..f4b8a33aa4e70bb2dc43f6ce6857599ac5327729 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 3129412c9d4daf299d6b23227c38b9f9006e1e0a..44ff353772fe68d17a511a3b0fb02b30da2e5253 100644 (file)
@@ -1,6 +1,6 @@
 ;/*\r
-; * FreeRTOS Kernel V10.2.1\r
-; * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+; * FreeRTOS Kernel V10.3.0\r
+; * Copyright (C) 2020 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
index 886f2980791ac134f207544078a6f498824a5d73..12ac3b07f44a918d9d119446a4a7f9fafeb66db4 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 1b622377713327a8cd6af875d7423b7d3e6c56e1..b4060575ff182f795f2ce7edf86c28c2c6e87926 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index cf2bf9d27f8846c2c05dcf10c29292802563033c..55f60ad17fcb00386966d4f4a771ab925c228893 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 7af648f0677fd7c3722efc3b194e9ebaa6ae9c59..937a5a47335a9d0627ffd3b0cbf23c9867451d58 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 8c19fbe9ab9e1fac9d7dd0be070cab6d7a2f0e2b..a61ff25a51ca6b9b0d7e6a6b86e332ebef03d638 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index bd91466faeed7c50eddfd1da34b0caefce4d1f81..26b6fefdb2bf1ec91ba09187aba396e95ec84b23 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c42b95499b2428f5fd250891a01e59ea0a9f5505..349ae52d7b1118e037fffcf9c5a4f1af55a4f228 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 72e477d18d77de1ca32dcf70b87f3b514bf90047..1cb6bec04679d98a593b86d7ec5e84a547ac6200 100644 (file)
@@ -1,6 +1,6 @@
 ;/*\r
-; * FreeRTOS Kernel V10.2.1\r
-; * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+; * FreeRTOS Kernel V10.3.0\r
+; * Copyright (C) 2020 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
index 475239aebf68f3595ba49299cbd9452d4f7085a4..813677822fbaac8b22f7d4d636bd71e807b2e36e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index cdb58ab86398f090f59049c8b4666fb2d2b72cad..5198469a91647e458e5688dfb769a7fbc130574c 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index cc63ff5fea66ae611581a2cdbf3e2ce5e7ff81f5..7d3872083c25e6444525e6181cdcf00fc905f300 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 5ad5c694be9185c24decb6959aff104d68bb0e67..2c03faf505a10d10ed25311e29c0174e06fde63d 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 7af648f0677fd7c3722efc3b194e9ebaa6ae9c59..937a5a47335a9d0627ffd3b0cbf23c9867451d58 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index eeccb1c1798b976de3cbbbfdaa4394755593ee10..e8a9f7f35ea01d14e279bf04fdc1767a0a15be17 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d1632617b9795c2562fa289fddbc3d9b6f0bb807..c61922f455f831d438d26279cc0ad2964552484d 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c42b95499b2428f5fd250891a01e59ea0a9f5505..349ae52d7b1118e037fffcf9c5a4f1af55a4f228 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 615e3125572b2f5e8b39b8aac4648eb710017eae..19b4da04d8cac99142c31b4ba05e8dc7c1673360 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 58f3197a107cbbceb7270b8db75730b9137f76df..f89ee7e91713c313b155fdd022b1a8e01123f520 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 3850ec184df0a7453d44db6b925076975e2087c3..1c30ae531f57226ba387d00eba1a14d57216baca 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c16da15b015235f90e4566700a676f98eeb81574..79d024856fc1dee734cd0e8763d26abcaa2d550a 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index aab91f6fba21626bf826ba5910539ed7ea508876..ee54571f5593f5143883606542d4799eb05698f6 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 334e6a51fec618c2a689602020d06805fc4d1684..8a9ea39cb1d1bc3f8f6cc392a56b26c85fd00eaa 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 0f2c0ba82483a357fb84e9e2be0f4d007392788b..f7558ce24ad5a579df45cb1799f43873e5411a1e 100644 (file)
@@ -1,6 +1,6 @@
 ;/*\r
-; * FreeRTOS Kernel V10.2.1\r
-; * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+; * FreeRTOS Kernel V10.3.0\r
+; * Copyright (C) 2020 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
index 34282819a3af9e5d6ec51b0ac6f6e7d69ba87a2a..f7df3984f5a88b55ace9e9575ad0d19b7cd82ac2 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index ad77ad6adfc4b8cf2ec383dece1ccfaaf0956253..5f0fdca75c27f9a1d45de260be7e6b77cb68a379 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 7f5e6f0a9710e229c14fee26cf9a1410a0120a6a..d9a2133e2a9d9f9df9a143bffb9677e6a475eb6c 100644 (file)
@@ -1,6 +1,6 @@
 ;/*\r
-; * FreeRTOS Kernel V10.2.1\r
-; * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+; * FreeRTOS Kernel V10.3.0\r
+; * Copyright (C) 2020 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
index ace104cd232ba44fe6baad5e43da9c92703ebe3c..3d38130345af5e1a6b775b68036f7d942f6c86db 100644 (file)
-/*
- * FreeRTOS Kernel V10.2.1
- * Copyright (C) 2019 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://www.FreeRTOS.org
- * http://aws.amazon.com/freertos
- *
- * 1 tab == 4 spaces!
- */
-
-#ifndef FREERTOS_CONFIG_H
-#define FREERTOS_CONFIG_H
-#include "stdio.h"
-/*-----------------------------------------------------------
- * Application specific definitions.
- *
- * These definitions should be adjusted for your particular hardware and
- * application requirements.
- *
- * THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE
- * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.
- *
- * See http://www.freertos.org/a00110.html.
- *----------------------------------------------------------*/
-
-#define configUSE_PREEMPTION        1
-#define configUSE_IDLE_HOOK         0
-#define configUSE_TICK_HOOK         0
-#define configCPU_CLOCK_HZ          ( ( unsigned long ) 24000000 )
-#define configTICK_RATE_HZ          ( ( portTickType ) 1000 )
-#define configMINIMAL_STACK_SIZE    ( ( unsigned short ) (256) )
-#define configTOTAL_HEAP_SIZE       ( ( size_t ) 16384 )
-#define configMAX_TASK_NAME_LEN     ( 12 )
-#define configUSE_TRACE_FACILITY    0
-#define configUSE_16_BIT_TICKS      0
-#define configIDLE_SHOULD_YIELD     1
-#define configUSE_CO_ROUTINES       0
-#define configUSE_MUTEXES           1
-#define configCHECK_FOR_STACK_OVERFLOW  1
-#define configUSE_RECURSIVE_MUTEXES     0
-#define configQUEUE_REGISTRY_SIZE       10
-#define configUSE_MALLOC_FAILED_HOOK    1
-#define configUSE_STATS_FORMATTING_FUNCTIONS    1
-#define configUSE_TIMERS    1
-#define configTIMER_TASK_PRIORITY    1
-#define configTIMER_QUEUE_LENGTH    36
-#define configTIMER_TASK_STACK_DEPTH    1024
-#define configUSE_TIME_SLICING    1
-#define configUSE_COUNTING_SEMAPHORES    1
-
-#define portCRITICAL_NESTING_IN_TCB             0
-
-
-
-
-/*#define configGENERATE_RUN_TIME_STATS 1*/
-
-#define configMAX_PRIORITIES        ( 200 )
-#define configMAX_CO_ROUTINE_PRIORITIES ( 2 )
-
-/* Set the following definitions to 1 to include the API function, or zero
-to exclude the API function. */
-
-#define INCLUDE_vTaskPrioritySet        1
-#define INCLUDE_uxTaskPriorityGet       1
-#define INCLUDE_vTaskDelete             1
-#define INCLUDE_vTaskCleanUpResources   0
-#define INCLUDE_vTaskSuspend            1
-#define INCLUDE_vTaskDelayUntil         1
-#define INCLUDE_vTaskDelay              1
-
-#define configASSERT( a )   do {if ((a)==0){printf("Assert : %s %d\r\n", __FILE__, __LINE__);while(1);}}while(0)
-
-#define configKERNEL_INTERRUPT_PRIORITY         ( ( unsigned char ) 7 << ( unsigned char ) 5 )  /* Priority 7, or 255 as only the top three bits are implemented.  This is the lowest priority. */
-#define configMAX_SYSCALL_INTERRUPT_PRIORITY    ( ( unsigned char ) 5 << ( unsigned char ) 5 )  /* Priority 5, or 160 as only the top three bits are implemented. */
-
-extern volatile unsigned long ulHighFrequencyTimerTicks;
-/* There is already a high frequency timer running - just reset its count back
-to zero. */
-/*
-#define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() ( ulHighFrequencyTimerTicks = 0UL )
-#define portGET_RUN_TIME_COUNTER_VALUE()    ulHighFrequencyTimerTicks
-*/
-#endif /* FREERTOS_CONFIG_H */
+/*\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
+#ifndef FREERTOS_CONFIG_H\r
+#define FREERTOS_CONFIG_H\r
+#include "stdio.h"\r
+/*-----------------------------------------------------------\r
+ * Application specific definitions.\r
+ *\r
+ * These definitions should be adjusted for your particular hardware and\r
+ * application requirements.\r
+ *\r
+ * THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
+ * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.\r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
+ *----------------------------------------------------------*/\r
+\r
+#define configUSE_PREEMPTION        1\r
+#define configUSE_IDLE_HOOK         0\r
+#define configUSE_TICK_HOOK         0\r
+#define configCPU_CLOCK_HZ          ( ( unsigned long ) 24000000 )\r
+#define configTICK_RATE_HZ          ( ( portTickType ) 1000 )\r
+#define configMINIMAL_STACK_SIZE    ( ( unsigned short ) (256) )\r
+#define configTOTAL_HEAP_SIZE       ( ( size_t ) 16384 )\r
+#define configMAX_TASK_NAME_LEN     ( 12 )\r
+#define configUSE_TRACE_FACILITY    0\r
+#define configUSE_16_BIT_TICKS      0\r
+#define configIDLE_SHOULD_YIELD     1\r
+#define configUSE_CO_ROUTINES       0\r
+#define configUSE_MUTEXES           1\r
+#define configCHECK_FOR_STACK_OVERFLOW  1\r
+#define configUSE_RECURSIVE_MUTEXES     0\r
+#define configQUEUE_REGISTRY_SIZE       10\r
+#define configUSE_MALLOC_FAILED_HOOK    1\r
+#define configUSE_STATS_FORMATTING_FUNCTIONS    1\r
+#define configUSE_TIMERS    1\r
+#define configTIMER_TASK_PRIORITY    1\r
+#define configTIMER_QUEUE_LENGTH    36\r
+#define configTIMER_TASK_STACK_DEPTH    1024\r
+#define configUSE_TIME_SLICING    1\r
+#define configUSE_COUNTING_SEMAPHORES    1\r
+\r
+#define portCRITICAL_NESTING_IN_TCB             0\r
+\r
+\r
+\r
+\r
+/*#define configGENERATE_RUN_TIME_STATS 1*/\r
+\r
+#define configMAX_PRIORITIES        ( 200 )\r
+#define configMAX_CO_ROUTINE_PRIORITIES ( 2 )\r
+\r
+/* Set the following definitions to 1 to include the API function, or zero\r
+to exclude the API function. */\r
+\r
+#define INCLUDE_vTaskPrioritySet        1\r
+#define INCLUDE_uxTaskPriorityGet       1\r
+#define INCLUDE_vTaskDelete             1\r
+#define INCLUDE_vTaskCleanUpResources   0\r
+#define INCLUDE_vTaskSuspend            1\r
+#define INCLUDE_vTaskDelayUntil         1\r
+#define INCLUDE_vTaskDelay              1\r
+\r
+#define configASSERT( a )   do {if ((a)==0){printf("Assert : %s %d\r\n", __FILE__, __LINE__);while(1);}}while(0)\r
+\r
+#define configKERNEL_INTERRUPT_PRIORITY         ( ( unsigned char ) 7 << ( unsigned char ) 5 )  /* Priority 7, or 255 as only the top three bits are implemented.  This is the lowest priority. */\r
+#define configMAX_SYSCALL_INTERRUPT_PRIORITY    ( ( unsigned char ) 5 << ( unsigned char ) 5 )  /* Priority 5, or 160 as only the top three bits are implemented. */\r
+\r
+extern volatile unsigned long ulHighFrequencyTimerTicks;\r
+/* There is already a high frequency timer running - just reset its count back\r
+to zero. */\r
+/*\r
+#define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() ( ulHighFrequencyTimerTicks = 0UL )\r
+#define portGET_RUN_TIME_COUNTER_VALUE()    ulHighFrequencyTimerTicks\r
+*/\r
+#endif /* FREERTOS_CONFIG_H */\r
index 42edfe6ecf18f5a9855d60fa8311878ab5934727..e1a630d3ba4134a10a0dce28b8532dc31f80eef9 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
  * FreeRTOS Kernel V10.0.0\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * Copyright (C) 2020 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
index 5245d484c6a6047f3698575c35181557cf959e45..807064ddf44199f10c569b89adcce90f971af71b 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
  * FreeRTOS Kernel V10.0.0\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * Copyright (C) 2020 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
index 3e47328cc1dc607f93d923b19c54432a5c73ecaf..3eeb70026bb4c74ec2c75cf0be5e8475ee90ca7d 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 6fbd8a563d54593d7c5feb811913fadcc186ea0e..e273b7fef0b1b001fb743d78e0d86e99e7757bee 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 0256daf5b6e8a522bf76bd001682c4c5d50cfbf4..371ebd3b66023912ae23157f2a4149a2c9e45988 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 27883a20c388944cd274ccccb3caed350cf7a933..5288a9b168cc261635b0be5f54b07e8187c542ec 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index b3e73871179034792de8616a3856e0f10c522915..1debe3bdc31844b4062d38d7f4ff93c463baf1ac 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 18a4347170d85ab7bb6b7d2f2b1942262245ee41..15ba7f51bf06902f8b7b60566736f4f236568c26 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index dfc17063d561cf7466e6e1441920cca6e8def877..b4ef55f10cfac363b694824de76f23f57a950d1e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 156d58b8d3021fdc7efa4ac02d5d2180e041e528..551b72bf0db59c66199675c721c4711a09733f61 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 51848e202d5eaca68310b0718a80035bf920b929..aa6ac04883a26a18e834d55d8c9a5bcad72283a0 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 5cce56f98e4013babbf4b757d7e6bef2605e20c8..aca52423bbf8d3ecea40291a89a03eaa4db657c7 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index b711cc62b9b5aff84ade95f929c1531e0aad9bd3..281ddae12e9e1d14541c3ef039b54e6ba71e12c5 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
diff --git a/FreeRTOS/Demo/WIN32-MSVC-lwIP/FreeRTOSConfig.h b/FreeRTOS/Demo/WIN32-MSVC-lwIP/FreeRTOSConfig.h
deleted file mode 100644 (file)
index 8c96911..0000000
+++ /dev/null
@@ -1,139 +0,0 @@
-/*\r
- * FreeRTOS Kernel V10.1.0\r
- * Copyright (C) 2018 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
-#ifndef FREERTOS_CONFIG_H\r
-#define FREERTOS_CONFIG_H\r
-\r
-/*-----------------------------------------------------------\r
- * Application specific definitions.\r
- *\r
- * These definitions should be adjusted for your particular hardware and\r
- * application requirements.\r
- *\r
- * THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
- * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.\r
- *----------------------------------------------------------*/\r
-\r
-#define configUSE_PREEMPTION                   1\r
-#define configUSE_IDLE_HOOK                            1\r
-#define configUSE_TICK_HOOK                            0\r
-#define configTICK_RATE_HZ                             ( 1000 ) /* In this non-real time simulated environment the tick frequency has to be at least a multiple of the Win32 tick frequency, and therefore very slow. */\r
-#define configMINIMAL_STACK_SIZE               ( ( unsigned short ) 60 ) /* In this simulated case, the stack only has to hold one small structure as the real stack is part of the win32 thread. */\r
-#define configTOTAL_HEAP_SIZE                  ( ( size_t ) 0 ) /* This parameter has no effect when heap_3.c is included in the project. */\r
-#define configMAX_TASK_NAME_LEN                        ( 7 )\r
-#define configUSE_TRACE_FACILITY               1\r
-#define configUSE_16_BIT_TICKS                 0\r
-#define configIDLE_SHOULD_YIELD                        1\r
-#define configUSE_CO_ROUTINES                  0\r
-#define configUSE_MUTEXES                              1\r
-#define configCHECK_FOR_STACK_OVERFLOW 0\r
-#define configUSE_RECURSIVE_MUTEXES            1\r
-#define configQUEUE_REGISTRY_SIZE              0\r
-#define configUSE_MALLOC_FAILED_HOOK   1\r
-#define configUSE_APPLICATION_TASK_TAG 0\r
-#define configUSE_COUNTING_SEMAPHORES  1\r
-#define configUSE_ALTERNATIVE_API              0\r
-\r
-#define configUSE_TIMERS                               1\r
-#define configTIMER_TASK_PRIORITY              2\r
-#define configTIMER_QUEUE_LENGTH               20\r
-#define configTIMER_TASK_STACK_DEPTH   ( configMINIMAL_STACK_SIZE * 2 )\r
-\r
-#define configMAX_PRIORITIES                   ( 7 )\r
-#define configMAX_CO_ROUTINE_PRIORITIES ( 2 )\r
-\r
-\r
-/* Co-routine definitions. */\r
-#define configUSE_CO_ROUTINES          0\r
-#define configMAX_CO_ROUTINE_PRIORITIES ( 2 )\r
-\r
-/* Set the following definitions to 1 to include the API function, or zero\r
-to exclude the API function. */\r
-\r
-#define INCLUDE_vTaskPrioritySet                       1\r
-#define INCLUDE_uxTaskPriorityGet                      1\r
-#define INCLUDE_vTaskDelete                                    1\r
-#define INCLUDE_vTaskCleanUpResources          0\r
-#define INCLUDE_vTaskSuspend                           1\r
-#define INCLUDE_vTaskDelayUntil                                1\r
-#define INCLUDE_vTaskDelay                                     1\r
-#define INCLUDE_uxTaskGetStackHighWaterMark    1\r
-#define INCLUDE_xTaskGetSchedulerState         1\r
-\r
-/* This demo makes use of one or more example stats formatting functions.  These\r
-format the raw data provided by the xTaskGetSystemState() function in to human\r
-readable ASCII form.  See the notes in the implementation of vTaskList() within\r
-FreeRTOS/Source/tasks.c for limitations. */\r
-#define configINCLUDE_STATS_FORMATTING_FUNCTIONS       1\r
-\r
-/* Run time stats gathering definitions. */\r
-unsigned long ulMainGetRunTimeCounterValue( void );\r
-void vMainConfigureTimerForRunTimeStats( void );\r
-#define configGENERATE_RUN_TIME_STATS  1\r
-#define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() vMainConfigureTimerForRunTimeStats()\r
-#define portGET_RUN_TIME_COUNTER_VALUE() ulMainGetRunTimeCounterValue()\r
-\r
-\r
-extern void vAssertCalled( void );\r
-#define configASSERT( x ) if( ( x ) == 0 ) vAssertCalled()\r
-\r
-#define configNETWORK_INTERFACE_TO_USE 2L\r
-\r
-#define configMAC_ISR_SIMULATOR_PRIORITY       ( 6 )\r
-#define configLWIP_TASK_PRIORITY                       ( 5 )\r
-\r
-/* MAC address configuration. */\r
-#define configMAC_ADDR0        0x00\r
-#define configMAC_ADDR1        0x13\r
-#define configMAC_ADDR2        0x14\r
-#define configMAC_ADDR3        0x15\r
-#define configMAC_ADDR4        0x15\r
-#define configMAC_ADDR5        0x16\r
-\r
-/* IP address configuration. */\r
-#define configIP_ADDR0         172\r
-#define configIP_ADDR1         25\r
-#define configIP_ADDR2         218\r
-#define configIP_ADDR3         200\r
-\r
-/* Netmask configuration. */\r
-#define configNET_MASK0                255\r
-#define configNET_MASK1                255\r
-#define configNET_MASK2                255\r
-#define configNET_MASK3                0\r
-\r
-/* The size of the global output buffer that is available for use when there\r
-are multiple command interpreters running at once (for example, one on a UART\r
-and one on TCP/IP).  This is done to prevent an output buffer being defined by\r
-each implementation - which would waste RAM.  In this case, there is only one\r
-command interpreter running, and it has its own local output buffer, so the\r
-global buffer is just set to be one byte long as it is not used and should not\r
-take up unnecessary RAM. */\r
-#define configCOMMAND_INT_MAX_OUTPUT_SIZE 1\r
-\r
-#endif /* FREERTOS_CONFIG_H */\r
diff --git a/FreeRTOS/Demo/WIN32-MSVC-lwIP/WIN32.sln b/FreeRTOS/Demo/WIN32-MSVC-lwIP/WIN32.sln
deleted file mode 100644 (file)
index 3f819af..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-\r
-Microsoft Visual Studio Solution File, Format Version 11.00\r
-# Visual C++ Express 2010\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WIN32", "WIN32.vcxproj", "{C686325E-3261-42F7-AEB1-DDE5280E1CEB}"\r
-EndProject\r
-Global\r
-       GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
-               Debug|Win32 = Debug|Win32\r
-               Release|Win32 = Release|Win32\r
-       EndGlobalSection\r
-       GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
-               {C686325E-3261-42F7-AEB1-DDE5280E1CEB}.Debug|Win32.ActiveCfg = Debug|Win32\r
-               {C686325E-3261-42F7-AEB1-DDE5280E1CEB}.Debug|Win32.Build.0 = Debug|Win32\r
-               {C686325E-3261-42F7-AEB1-DDE5280E1CEB}.Release|Win32.ActiveCfg = Release|Win32\r
-               {C686325E-3261-42F7-AEB1-DDE5280E1CEB}.Release|Win32.Build.0 = Release|Win32\r
-       EndGlobalSection\r
-       GlobalSection(SolutionProperties) = preSolution\r
-               HideSolutionNode = FALSE\r
-       EndGlobalSection\r
-EndGlobal\r
diff --git a/FreeRTOS/Demo/WIN32-MSVC-lwIP/WIN32.vcxproj b/FreeRTOS/Demo/WIN32-MSVC-lwIP/WIN32.vcxproj
deleted file mode 100644 (file)
index c0a3422..0000000
+++ /dev/null
@@ -1,275 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup Label="ProjectConfigurations">\r
-    <ProjectConfiguration Include="Debug|Win32">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|Win32">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-  </ItemGroup>\r
-  <PropertyGroup Label="Globals">\r
-    <ProjectGuid>{C686325E-3261-42F7-AEB1-DDE5280E1CEB}</ProjectGuid>\r
-    <ProjectName>RTOSDemo</ProjectName>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <UseOfMfc>false</UseOfMfc>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v142</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <UseOfMfc>false</UseOfMfc>\r
-    <CharacterSet>MultiByte</CharacterSet>\r
-    <PlatformToolset>v142</PlatformToolset>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
-  <ImportGroup Label="ExtensionSettings">\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props" />\r
-  </ImportGroup>\r
-  <PropertyGroup Label="UserMacros" />\r
-  <PropertyGroup>\r
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\Debug\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\Debug\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>\r
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\Release\</OutDir>\r
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\Release\</IntDir>\r
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
-  </PropertyGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
-    <Midl>\r
-      <TypeLibraryName>.\Debug/WIN32.tlb</TypeLibraryName>\r
-      <HeaderFileName>\r
-      </HeaderFileName>\r
-    </Midl>\r
-    <ClCompile>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>..\Common\Utils;..\Common\ethernet\lwip-1.4.0\ports\win32\WinPCap;..\Common\ethernet\lwip-1.4.0\src\include\ipv4;..\Common\ethernet\lwip-1.4.0\src\include;..\..\Source\include;..\..\Source\portable\MSVC-MingW;..\Common\ethernet\lwip-1.4.0\ports\win32\include;..\Common\Include;.\lwIP_Apps;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_WINSOCKAPI_;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;WINVER=0x400;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\r
-      <PrecompiledHeaderOutputFile>.\Debug/WIN32.pch</PrecompiledHeaderOutputFile>\r
-      <AssemblerListingLocation>.\Debug/</AssemblerListingLocation>\r
-      <ObjectFileName>.\Debug/</ObjectFileName>\r
-      <ProgramDataBaseFileName>.\Debug/</ProgramDataBaseFileName>\r
-      <WarningLevel>Level4</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <DisableLanguageExtensions>false</DisableLanguageExtensions>\r
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
-    </ClCompile>\r
-    <ResourceCompile>\r
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <Culture>0x0c09</Culture>\r
-    </ResourceCompile>\r
-    <Link>\r
-      <OutputFile>.\Debug/RTOSDemo.exe</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <ProgramDatabaseFile>.\Debug/WIN32.pdb</ProgramDatabaseFile>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <AdditionalDependencies>wpcap.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-      <AdditionalLibraryDirectories>..\Common\ethernet\lwip-1.4.0\ports\win32\WinPCap</AdditionalLibraryDirectories>\r
-    </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>.\Debug/WIN32.bsc</OutputFile>\r
-    </Bscmake>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
-    <Midl>\r
-      <TypeLibraryName>.\Release/WIN32.tlb</TypeLibraryName>\r
-      <HeaderFileName>\r
-      </HeaderFileName>\r
-    </Midl>\r
-    <ClCompile>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
-      <PreprocessorDefinitions>_WINSOCKAPI_;WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <StringPooling>true</StringPooling>\r
-      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <PrecompiledHeaderOutputFile>.\Release/WIN32.pch</PrecompiledHeaderOutputFile>\r
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>\r
-      <ObjectFileName>.\Release/</ObjectFileName>\r
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <AdditionalIncludeDirectories>..\Common\Utils;..\Common\ethernet\lwip-1.4.0\ports\win32\WinPCap;..\Common\ethernet\lwip-1.4.0\src\include\ipv4;..\Common\ethernet\lwip-1.4.0\src\include;..\..\Source\include;..\..\Source\portable\MSVC-MingW;..\Common\ethernet\lwip-1.4.0\ports\win32\include;..\Common\Include;.\lwIP_Apps;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-    </ClCompile>\r
-    <ResourceCompile>\r
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <Culture>0x0c09</Culture>\r
-    </ResourceCompile>\r
-    <Link>\r
-      <OutputFile>.\Release/RTOSDemo.exe</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <ProgramDatabaseFile>.\Release/WIN32.pdb</ProgramDatabaseFile>\r
-      <SubSystem>Console</SubSystem>\r
-      <TargetMachine>MachineX86</TargetMachine>\r
-      <AdditionalLibraryDirectories>..\Common\ethernet\lwip-1.4.0\ports\win32\WinPCap</AdditionalLibraryDirectories>\r
-      <AdditionalDependencies>wpcap.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
-    </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>.\Release/WIN32.bsc</OutputFile>\r
-    </Bscmake>\r
-  </ItemDefinitionGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\Source\portable\MemMang\heap_3.c" />\r
-    <ClCompile Include="..\..\Source\timers.c" />\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\ports\win32\ethernetif.c" />\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\ports\win32\sys_arch.c" />\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\api\api_lib.c" />\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\api\api_msg.c" />\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\api\err.c" />\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\api\netbuf.c" />\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\api\netdb.c" />\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\api\netifapi.c" />\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\api\sockets.c" />\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\api\tcpip.c" />\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\core\def.c" />\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\core\dhcp.c" />\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\core\dns.c" />\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\core\init.c" />\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\core\ipv4\autoip.c" />\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\core\ipv4\icmp.c" />\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\core\ipv4\igmp.c" />\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\core\ipv4\inet.c" />\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\core\ipv4\inet_chksum.c" />\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\core\ipv4\ip.c" />\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\core\ipv4\ip_addr.c" />\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\core\ipv4\ip_frag.c" />\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\core\lwip_timers.c" />\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\core\mem.c" />\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\core\memp.c" />\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\core\netif.c" />\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\core\pbuf.c" />\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\core\raw.c" />\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\core\snmp\asn1_dec.c" />\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\core\snmp\asn1_enc.c" />\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\core\snmp\mib2.c" />\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\core\snmp\mib_structs.c" />\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\core\snmp\msg_in.c" />\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\core\snmp\msg_out.c" />\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\core\stats.c" />\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\core\sys.c" />\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\core\tcp.c" />\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\core\tcp_in.c" />\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\core\tcp_out.c" />\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\core\udp.c" />\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\netif\etharp.c" />\r
-    <ClCompile Include="..\Common\Minimal\GenQTest.c" />\r
-    <ClCompile Include="..\Common\Utils\CommandInterpreter.c" />\r
-    <ClCompile Include="lwIP_Apps\apps\BasicSocketCommandServer\BasicSocketCommandServer.c" />\r
-    <ClCompile Include="lwIP_Apps\apps\httpserver_raw_from_lwIP_download\fs.c" />\r
-    <ClCompile Include="lwIP_Apps\apps\httpserver_raw_from_lwIP_download\httpd.c" />\r
-    <ClCompile Include="lwIP_Apps\lwIP_Apps.c" />\r
-    <ClCompile Include="main.c">\r
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\Source\list.c">\r
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\Source\portable\MSVC-MingW\port.c">\r
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\Source\queue.c">\r
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\Source\tasks.c">\r
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-    </ClCompile>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\Source\include\timers.h" />\r
-    <ClInclude Include="..\..\Source\include\timer_test.h" />\r
-    <ClInclude Include="..\..\Source\portable\MSVC-MingW\portmacro.h" />\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\ports\win32\include\arch\bpstruct.h" />\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\ports\win32\include\arch\cc.h" />\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\ports\win32\include\arch\epstruct.h" />\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\ports\win32\include\arch\perf.h" />\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\ports\win32\include\arch\sys_arch.h" />\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\ports\win32\include\lwipopts.h" />\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\ports\win32\lwipcfg_msvc.h" />\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\ports\win32\lwippools.h" />\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\ipv4\lwip\autoip.h" />\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\ipv4\lwip\icmp.h" />\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\ipv4\lwip\igmp.h" />\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\ipv4\lwip\inet.h" />\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\ipv4\lwip\inet_chksum.h" />\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\ipv4\lwip\ip.h" />\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\ipv4\lwip\ip_addr.h" />\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\ipv4\lwip\ip_frag.h" />\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\lwip\api.h" />\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\lwip\api_msg.h" />\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\lwip\arch.h" />\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\lwip\debug.h" />\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\lwip\def.h" />\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\lwip\dhcp.h" />\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\lwip\dns.h" />\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\lwip\err.h" />\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\lwip\init.h" />\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\lwip\mem.h" />\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\lwip\memp.h" />\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\lwip\memp_std.h" />\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\lwip\netbuf.h" />\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\lwip\netdb.h" />\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\lwip\netif.h" />\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\lwip\netifapi.h" />\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\lwip\opt.h" />\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\lwip\pbuf.h" />\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\lwip\raw.h" />\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\lwip\sio.h" />\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\lwip\snmp.h" />\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\lwip\snmp_asn1.h" />\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\lwip\snmp_msg.h" />\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\lwip\snmp_structs.h" />\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\lwip\sockets.h" />\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\lwip\stats.h" />\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\lwip\sys.h" />\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\lwip\tcp.h" />\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\lwip\tcpip.h" />\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\lwip\tcp_impl.h" />\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\lwip\timers.h" />\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\lwip\udp.h" />\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\netif\etharp.h" />\r
-    <ClInclude Include="FreeRTOSConfig.h" />\r
-    <ClInclude Include="..\..\Source\include\croutine.h" />\r
-    <ClInclude Include="..\..\Source\include\FreeRTOS.h" />\r
-    <ClInclude Include="..\..\Source\include\list.h" />\r
-    <ClInclude Include="..\..\Source\include\portable.h" />\r
-    <ClInclude Include="..\..\Source\include\projdefs.h" />\r
-    <ClInclude Include="..\..\Source\include\queue.h" />\r
-    <ClInclude Include="..\..\Source\include\semphr.h" />\r
-    <ClInclude Include="..\..\Source\include\task.h" />\r
-    <ClInclude Include="lwIP_Apps\lwipcfg_msvc.h" />\r
-    <ClInclude Include="lwIP_Apps\lwipopts.h" />\r
-  </ItemGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
-  <ImportGroup Label="ExtensionTargets">\r
-  </ImportGroup>\r
-</Project>
\ No newline at end of file
diff --git a/FreeRTOS/Demo/WIN32-MSVC-lwIP/WIN32.vcxproj.filters b/FreeRTOS/Demo/WIN32-MSVC-lwIP/WIN32.vcxproj.filters
deleted file mode 100644 (file)
index 6914b10..0000000
+++ /dev/null
@@ -1,436 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup>\r
-    <Filter Include="Resource Files">\r
-      <UniqueIdentifier>{38712199-cebf-4124-bf15-398f7c3419ea}</UniqueIdentifier>\r
-      <Extensions>ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe</Extensions>\r
-    </Filter>\r
-    <Filter Include="FreeRTOS Source">\r
-      <UniqueIdentifier>{af3445a1-4908-4170-89ed-39345d90d30c}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="FreeRTOS Source\Source">\r
-      <UniqueIdentifier>{f32be356-4763-4cae-9020-974a2638cb08}</UniqueIdentifier>\r
-      <Extensions>*.c</Extensions>\r
-    </Filter>\r
-    <Filter Include="FreeRTOS Source\Include">\r
-      <UniqueIdentifier>{a60060e3-3949-4f60-b025-cb84164ae9ed}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="Demo App Source">\r
-      <UniqueIdentifier>{34567deb-d5ab-4a56-8640-0aaec609521a}</UniqueIdentifier>\r
-      <Extensions>cpp;c;cxx;rc;def;r;odl;idl;hpj;bat</Extensions>\r
-    </Filter>\r
-    <Filter Include="Demo App Source\Common Demo Tasks">\r
-      <UniqueIdentifier>{2d4a700c-06e3-4dd2-afbe-ab1be71ebe2a}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="FreeRTOS Source\Source\Portable">\r
-      <UniqueIdentifier>{88f409e6-d396-4ac5-94bd-7a99c914be46}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="Configuration Files">\r
-      <UniqueIdentifier>{19ff1a34-36de-4c48-9d10-3fb1fa0d1fa4}</UniqueIdentifier>\r
-      <Extensions>h;hpp;hxx;hm;inl</Extensions>\r
-    </Filter>\r
-    <Filter Include="lwIP">\r
-      <UniqueIdentifier>{f1895f21-b338-4923-bec6-c20eba7b48af}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="lwIP\Arch">\r
-      <UniqueIdentifier>{2d5e204f-7bfe-467c-b8fc-daf0120b3380}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="lwIP\Source">\r
-      <UniqueIdentifier>{ac8f3f6f-979d-4405-9b5d-d22ddab77efe}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="lwIP\Source\API">\r
-      <UniqueIdentifier>{d0f66056-3a9d-4160-986b-6c770c5c05b6}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="lwIP\Source\Include">\r
-      <UniqueIdentifier>{2c08d348-4005-406d-9941-735524db4bef}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="lwIP\Source\Core">\r
-      <UniqueIdentifier>{c791a789-07eb-46aa-9934-23684669793b}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="lwIP\Source\NetIf">\r
-      <UniqueIdentifier>{d7b51b46-8083-4d4e-ba8b-03e7c96a79ae}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="lwIP\Source\Core\IPv4">\r
-      <UniqueIdentifier>{268723e7-d189-420d-ba66-26c24054b16b}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="lwIP\Source\Include\IPv4">\r
-      <UniqueIdentifier>{ae3a6e4d-2101-4d1d-be3a-c19a72fe0ed0}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="lwIP\Source\Include\netif">\r
-      <UniqueIdentifier>{aef10a28-c761-43f8-aad6-adc6e4963cef}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="lwIP\Source\Include\lwIP">\r
-      <UniqueIdentifier>{2a415654-7006-4079-b071-86fe1b73e811}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="lwIP\Source\Include\IPv4\lwIP">\r
-      <UniqueIdentifier>{cc0c5b7c-cd80-4573-bdc1-122b1c9f685a}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="lwIP\Source\Core\SNMP">\r
-      <UniqueIdentifier>{a8022720-9bfe-4681-b4ef-4785c87a815e}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="lwIP_Apps">\r
-      <UniqueIdentifier>{c3366d35-95df-4c03-a752-3ae631ec6bba}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="lwIP_Apps\BasicSocketCommandServer">\r
-      <UniqueIdentifier>{92b32a46-5658-4c53-b5de-3b174955a777}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="lwIP_Apps\httpd_raw_from_lwIP_download">\r
-      <UniqueIdentifier>{6c4a261d-ca37-4528-ad50-8f04032898cb}</UniqueIdentifier>\r
-    </Filter>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="main.c">\r
-      <Filter>Demo App Source</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\Source\list.c">\r
-      <Filter>FreeRTOS Source\Source</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\Source\queue.c">\r
-      <Filter>FreeRTOS Source\Source</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\Source\tasks.c">\r
-      <Filter>FreeRTOS Source\Source</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\Source\portable\MemMang\heap_3.c">\r
-      <Filter>FreeRTOS Source\Source</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\Source\portable\MSVC-MingW\port.c">\r
-      <Filter>FreeRTOS Source\Source\Portable</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\Common\Minimal\GenQTest.c">\r
-      <Filter>Demo App Source\Common Demo Tasks</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\Source\timers.c">\r
-      <Filter>FreeRTOS Source\Source</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\api\tcpip.c">\r
-      <Filter>lwIP\Source\API</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\api\api_lib.c">\r
-      <Filter>lwIP\Source\API</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\api\api_msg.c">\r
-      <Filter>lwIP\Source\API</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\api\err.c">\r
-      <Filter>lwIP\Source\API</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\api\netbuf.c">\r
-      <Filter>lwIP\Source\API</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\api\netdb.c">\r
-      <Filter>lwIP\Source\API</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\api\netifapi.c">\r
-      <Filter>lwIP\Source\API</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\api\sockets.c">\r
-      <Filter>lwIP\Source\API</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\core\ipv4\ip_frag.c">\r
-      <Filter>lwIP\Source\Core\IPv4</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\core\ipv4\autoip.c">\r
-      <Filter>lwIP\Source\Core\IPv4</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\core\ipv4\icmp.c">\r
-      <Filter>lwIP\Source\Core\IPv4</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\core\ipv4\igmp.c">\r
-      <Filter>lwIP\Source\Core\IPv4</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\core\ipv4\inet.c">\r
-      <Filter>lwIP\Source\Core\IPv4</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\core\ipv4\inet_chksum.c">\r
-      <Filter>lwIP\Source\Core\IPv4</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\core\ipv4\ip.c">\r
-      <Filter>lwIP\Source\Core\IPv4</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\core\ipv4\ip_addr.c">\r
-      <Filter>lwIP\Source\Core\IPv4</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\core\udp.c">\r
-      <Filter>lwIP\Source\Core</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\core\def.c">\r
-      <Filter>lwIP\Source\Core</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\core\dhcp.c">\r
-      <Filter>lwIP\Source\Core</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\core\dns.c">\r
-      <Filter>lwIP\Source\Core</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\core\init.c">\r
-      <Filter>lwIP\Source\Core</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\core\mem.c">\r
-      <Filter>lwIP\Source\Core</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\core\memp.c">\r
-      <Filter>lwIP\Source\Core</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\core\netif.c">\r
-      <Filter>lwIP\Source\Core</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\core\pbuf.c">\r
-      <Filter>lwIP\Source\Core</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\core\raw.c">\r
-      <Filter>lwIP\Source\Core</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\core\stats.c">\r
-      <Filter>lwIP\Source\Core</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\core\sys.c">\r
-      <Filter>lwIP\Source\Core</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\core\tcp.c">\r
-      <Filter>lwIP\Source\Core</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\core\tcp_in.c">\r
-      <Filter>lwIP\Source\Core</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\core\tcp_out.c">\r
-      <Filter>lwIP\Source\Core</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\ports\win32\sys_arch.c">\r
-      <Filter>lwIP\Arch</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\core\lwip_timers.c">\r
-      <Filter>lwIP\Source\Core</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\netif\etharp.c">\r
-      <Filter>lwIP\Source\NetIf</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\ports\win32\ethernetif.c">\r
-      <Filter>lwIP\Source\NetIf</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\core\snmp\msg_out.c">\r
-      <Filter>lwIP\Source\Core\SNMP</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\core\snmp\asn1_dec.c">\r
-      <Filter>lwIP\Source\Core\SNMP</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\core\snmp\asn1_enc.c">\r
-      <Filter>lwIP\Source\Core\SNMP</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\core\snmp\mib2.c">\r
-      <Filter>lwIP\Source\Core\SNMP</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\core\snmp\mib_structs.c">\r
-      <Filter>lwIP\Source\Core\SNMP</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\Common\ethernet\lwip-1.4.0\src\core\snmp\msg_in.c">\r
-      <Filter>lwIP\Source\Core\SNMP</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="lwIP_Apps\lwIP_Apps.c">\r
-      <Filter>lwIP_Apps</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\Common\Utils\CommandInterpreter.c">\r
-      <Filter>Demo App Source</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="lwIP_Apps\apps\BasicSocketCommandServer\BasicSocketCommandServer.c">\r
-      <Filter>lwIP_Apps\BasicSocketCommandServer</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="lwIP_Apps\apps\httpserver_raw_from_lwIP_download\httpd.c">\r
-      <Filter>lwIP_Apps\httpd_raw_from_lwIP_download</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="lwIP_Apps\apps\httpserver_raw_from_lwIP_download\fs.c">\r
-      <Filter>lwIP_Apps\httpd_raw_from_lwIP_download</Filter>\r
-    </ClCompile>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="FreeRTOSConfig.h">\r
-      <Filter>Configuration Files</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\Source\include\croutine.h">\r
-      <Filter>FreeRTOS Source\Include</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\Source\include\FreeRTOS.h">\r
-      <Filter>FreeRTOS Source\Include</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\Source\include\list.h">\r
-      <Filter>FreeRTOS Source\Include</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\Source\include\portable.h">\r
-      <Filter>FreeRTOS Source\Include</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\Source\include\projdefs.h">\r
-      <Filter>FreeRTOS Source\Include</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\Source\include\queue.h">\r
-      <Filter>FreeRTOS Source\Include</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\Source\include\semphr.h">\r
-      <Filter>FreeRTOS Source\Include</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\Source\include\task.h">\r
-      <Filter>FreeRTOS Source\Include</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\Source\portable\MSVC-MingW\portmacro.h">\r
-      <Filter>FreeRTOS Source\Include</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\Source\include\timers.h">\r
-      <Filter>FreeRTOS Source\Include</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\Source\include\timer_test.h">\r
-      <Filter>FreeRTOS Source\Include</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\ipv4\lwip\ip_frag.h">\r
-      <Filter>lwIP\Source\Include\IPv4\lwIP</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\ipv4\lwip\autoip.h">\r
-      <Filter>lwIP\Source\Include\IPv4\lwIP</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\ipv4\lwip\icmp.h">\r
-      <Filter>lwIP\Source\Include\IPv4\lwIP</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\ipv4\lwip\igmp.h">\r
-      <Filter>lwIP\Source\Include\IPv4\lwIP</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\ipv4\lwip\inet.h">\r
-      <Filter>lwIP\Source\Include\IPv4\lwIP</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\ipv4\lwip\inet_chksum.h">\r
-      <Filter>lwIP\Source\Include\IPv4\lwIP</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\ipv4\lwip\ip.h">\r
-      <Filter>lwIP\Source\Include\IPv4\lwIP</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\ipv4\lwip\ip_addr.h">\r
-      <Filter>lwIP\Source\Include\IPv4\lwIP</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\netif\etharp.h">\r
-      <Filter>lwIP\Source\Include\netif</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\lwip\udp.h">\r
-      <Filter>lwIP\Source\Include\lwIP</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\lwip\api.h">\r
-      <Filter>lwIP\Source\Include\lwIP</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\lwip\api_msg.h">\r
-      <Filter>lwIP\Source\Include\lwIP</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\lwip\arch.h">\r
-      <Filter>lwIP\Source\Include\lwIP</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\lwip\debug.h">\r
-      <Filter>lwIP\Source\Include\lwIP</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\lwip\def.h">\r
-      <Filter>lwIP\Source\Include\lwIP</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\lwip\dhcp.h">\r
-      <Filter>lwIP\Source\Include\lwIP</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\lwip\dns.h">\r
-      <Filter>lwIP\Source\Include\lwIP</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\lwip\err.h">\r
-      <Filter>lwIP\Source\Include\lwIP</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\lwip\init.h">\r
-      <Filter>lwIP\Source\Include\lwIP</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\lwip\mem.h">\r
-      <Filter>lwIP\Source\Include\lwIP</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\lwip\memp.h">\r
-      <Filter>lwIP\Source\Include\lwIP</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\lwip\memp_std.h">\r
-      <Filter>lwIP\Source\Include\lwIP</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\lwip\netbuf.h">\r
-      <Filter>lwIP\Source\Include\lwIP</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\lwip\netdb.h">\r
-      <Filter>lwIP\Source\Include\lwIP</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\lwip\netif.h">\r
-      <Filter>lwIP\Source\Include\lwIP</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\lwip\netifapi.h">\r
-      <Filter>lwIP\Source\Include\lwIP</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\lwip\opt.h">\r
-      <Filter>lwIP\Source\Include\lwIP</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\lwip\pbuf.h">\r
-      <Filter>lwIP\Source\Include\lwIP</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\lwip\raw.h">\r
-      <Filter>lwIP\Source\Include\lwIP</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\lwip\sio.h">\r
-      <Filter>lwIP\Source\Include\lwIP</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\lwip\snmp.h">\r
-      <Filter>lwIP\Source\Include\lwIP</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\lwip\snmp_asn1.h">\r
-      <Filter>lwIP\Source\Include\lwIP</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\lwip\snmp_msg.h">\r
-      <Filter>lwIP\Source\Include\lwIP</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\lwip\snmp_structs.h">\r
-      <Filter>lwIP\Source\Include\lwIP</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\lwip\sockets.h">\r
-      <Filter>lwIP\Source\Include\lwIP</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\lwip\stats.h">\r
-      <Filter>lwIP\Source\Include\lwIP</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\lwip\sys.h">\r
-      <Filter>lwIP\Source\Include\lwIP</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\lwip\tcp.h">\r
-      <Filter>lwIP\Source\Include\lwIP</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\lwip\tcp_impl.h">\r
-      <Filter>lwIP\Source\Include\lwIP</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\lwip\tcpip.h">\r
-      <Filter>lwIP\Source\Include\lwIP</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\src\include\lwip\timers.h">\r
-      <Filter>lwIP\Source\Include\lwIP</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\ports\win32\include\arch\sys_arch.h">\r
-      <Filter>lwIP\Arch</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\ports\win32\include\arch\bpstruct.h">\r
-      <Filter>lwIP\Arch</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\ports\win32\include\arch\cc.h">\r
-      <Filter>lwIP\Arch</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\ports\win32\include\arch\epstruct.h">\r
-      <Filter>lwIP\Arch</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\ports\win32\include\arch\perf.h">\r
-      <Filter>lwIP\Arch</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\ports\win32\include\lwipopts.h">\r
-      <Filter>lwIP\Arch</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\ports\win32\lwippools.h">\r
-      <Filter>lwIP\Arch</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\Common\ethernet\lwip-1.4.0\ports\win32\lwipcfg_msvc.h">\r
-      <Filter>lwIP\Arch</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="lwIP_Apps\lwipcfg_msvc.h">\r
-      <Filter>Configuration Files</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="lwIP_Apps\lwipopts.h">\r
-      <Filter>Configuration Files</Filter>\r
-    </ClInclude>\r
-  </ItemGroup>\r
-</Project>
\ No newline at end of file
diff --git a/FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/BasicSocketCommandServer/BasicSocketCommandServer.c b/FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/BasicSocketCommandServer/BasicSocketCommandServer.c
deleted file mode 100644 (file)
index ee9ecf9..0000000
+++ /dev/null
@@ -1,170 +0,0 @@
-/*\r
- * FreeRTOS Kernel V10.1.0\r
- * Copyright (C) 2018 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
-/* Standard includes. */\r
-#include "stdlib.h"\r
-\r
-/* lwIP core includes */\r
-#include "lwip/opt.h"\r
-#include "lwip/sockets.h"\r
-\r
-/* FreeRTOS includes. */\r
-#include "FreeRTOS.h"\r
-#include "task.h"\r
-\r
-/* Utils includes. */\r
-#include "CommandInterpreter.h"\r
-\r
-/* Dimensions the buffer into which input characters are placed. */\r
-#define cmdMAX_INPUT_SIZE      20\r
-\r
-/* Dimensions the buffer into which string outputs can be placed. */\r
-#define cmdMAX_OUTPUT_SIZE     1024\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-void vBasicSocketsCommandInterpreterTask( void *pvParameters )\r
-{\r
-long lSocket, lClientFd, lBytes, lAddrLen = sizeof( struct sockaddr_in );\r
-struct sockaddr_in sLocalAddr;\r
-struct sockaddr_in client_addr;\r
-const signed char *pcWelcomeMessage = "FreeRTOS command server - connection accepted.\r\nType Help to view a list of registered commands.\r\n\r\n>";\r
-signed char cInChar, cInputIndex;\r
-static signed char cInputString[ cmdMAX_INPUT_SIZE ], cOutputString[ cmdMAX_OUTPUT_SIZE ];\r
-portBASE_TYPE xReturned;\r
-\r
-       ( void ) pvParameters;\r
-\r
-       lSocket = lwip_socket(AF_INET, SOCK_STREAM, 0);\r
-\r
-       if( lSocket >= 0 )\r
-       {\r
-               memset((char *)&sLocalAddr, 0, sizeof(sLocalAddr));\r
-               sLocalAddr.sin_family = AF_INET;\r
-               sLocalAddr.sin_len = sizeof(sLocalAddr);\r
-               sLocalAddr.sin_addr.s_addr = htonl(INADDR_ANY);\r
-               sLocalAddr.sin_port = ntohs( ( ( unsigned short ) 23 ) );\r
-\r
-               if( lwip_bind( lSocket, ( struct sockaddr *) &sLocalAddr, sizeof( sLocalAddr ) ) < 0 ) \r
-               {\r
-                       lwip_close( lSocket );\r
-                       vTaskDelete( NULL );\r
-               }\r
-\r
-               if( lwip_listen( lSocket, 20 ) != 0 )\r
-               {\r
-                       lwip_close( lSocket );\r
-                       vTaskDelete( NULL );\r
-               }\r
-\r
-               for( ;; )\r
-               {\r
-\r
-                       lClientFd = lwip_accept(lSocket, ( struct sockaddr * ) &client_addr, ( u32_t * ) &lAddrLen );\r
-\r
-                       if( lClientFd > 0L )\r
-                       {\r
-                               lwip_send( lClientFd, pcWelcomeMessage, strlen( ( const char * ) pcWelcomeMessage ), 0 );\r
-\r
-                               cInputIndex = 0;\r
-                               memset( cInputString, 0x00, cmdMAX_INPUT_SIZE );\r
-\r
-                               do\r
-                               {                                       \r
-                                       lBytes = lwip_recv( lClientFd, &cInChar, sizeof( cInChar ), 0 );\r
-\r
-                                       if( lBytes > 0L ) \r
-                                       {\r
-                                               if( cInChar == '\n' )\r
-                                               {\r
-                                                       /* The input string has been terminated.  Was the \r
-                                                       input a quit command? */\r
-                                                       if( strcmp( "quit", ( const char * ) cInputString ) == 0 )\r
-                                                       {\r
-                                                               /* Set lBytes to 0 to close the connection. */\r
-                                                               lBytes = 0L;\r
-                                                       }\r
-                                                       else\r
-                                                       {\r
-                                                               /* The input string was not a quit command.  \r
-                                                               Pass the string to the command interpreter. */\r
-                                                               do\r
-                                                               {\r
-                                                                       xReturned = xCmdIntProcessCommand( cInputString, cOutputString, cmdMAX_OUTPUT_SIZE );\r
-                                                                       lwip_send( lClientFd, cOutputString, strlen( ( const char * ) cOutputString ), 0 );\r
-\r
-                                                               } while( xReturned != pdFALSE );\r
-\r
-                                                               /* All the strings generated by the input \r
-                                                               command have been sent.  Clear the input\r
-                                                               string ready to receive the next command. */\r
-                                                               cInputIndex = 0;\r
-                                                               memset( cInputString, 0x00, cmdMAX_INPUT_SIZE );\r
-                                                               lwip_send( lClientFd, "\r\n>", strlen( "\r\n>" ), 0 );\r
-                                                       }\r
-                                               }\r
-                                               else\r
-                                               {\r
-                                                       if( cInChar == '\r' )\r
-                                                       {\r
-                                                               /* Ignore the character. */\r
-                                                       }\r
-                                                       else if( cInChar == '\b' )\r
-                                                       {\r
-                                                               /* Backspace was pressed.  Erase the last \r
-                                                               character in the string - if any. */\r
-                                                               if( cInputIndex > 0 )\r
-                                                               {\r
-                                                                       cInputIndex--;\r
-                                                                       cInputString[ cInputIndex ] = '\0';\r
-                                                               }\r
-                                                       }\r
-                                                       else\r
-                                                       {\r
-                                                               /* A character was entered.  Add it to the string\r
-                                                               entered so far.  When a \n is entered the complete\r
-                                                               string will be passed to the command interpreter. */\r
-                                                               if( cInputIndex < cmdMAX_INPUT_SIZE )\r
-                                                               {\r
-                                                                       cInputString[ cInputIndex ] = cInChar;\r
-                                                                       cInputIndex++;\r
-                                                               }\r
-                                                       }\r
-                                               }\r
-                                       }\r
-\r
-                               } while( lBytes > 0L );\r
-\r
-                                lwip_close( lClientFd );\r
-                       }\r
-               } \r
-       }\r
-\r
-       /* Will only get here if a listening socket could not be created. */\r
-       vTaskDelete( NULL );\r
-}\r
-\r
diff --git a/FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/fs.c b/FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/fs.c
deleted file mode 100644 (file)
index 993fffc..0000000
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- * Copyright (c) 2001-2003 Swedish Institute of Computer Science.
- * All rights reserved. 
- * 
- * Redistribution and use in source and binary forms, with or without modification, 
- * are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- *    this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- *    this list of conditions and the following disclaimer in the documentation
- *    and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission. 
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT 
- * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT 
- * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 
- * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY 
- * OF SUCH DAMAGE.
- *
- * This file is part of the lwIP TCP/IP stack.
- * 
- * Author: Adam Dunkels <adam@sics.se>
- *
- */
-#include "lwip/opt.h"
-#include "lwip/def.h"
-#include "fs.h"
-#include "fsdata.h"
-#include <string.h>
-
-/** Set this to 1 to include "fsdata_custom.c" instead of "fsdata.c" for the
- * file system (to prevent changing the file included in CVS) */
-#ifndef HTTPD_USE_CUSTUM_FSDATA
-#define HTTPD_USE_CUSTUM_FSDATA 0
-#endif
-
-#if HTTPD_USE_CUSTUM_FSDATA
-#include "fsdata_custom.c"
-#else /* HTTPD_USE_CUSTUM_FSDATA */
-#include "fsdata.c"
-#endif /* HTTPD_USE_CUSTUM_FSDATA */
-
-/*-----------------------------------------------------------------------------------*/
-/* Define the number of open files that we can support. */
-#ifndef LWIP_MAX_OPEN_FILES
-#define LWIP_MAX_OPEN_FILES     10
-#endif
-
-/* Define the file system memory allocation structure. */
-struct fs_table {
-  struct fs_file file;
-  u8_t inuse;
-};
-
-/* Allocate file system memory */
-struct fs_table fs_memory[LWIP_MAX_OPEN_FILES];
-
-#if LWIP_HTTPD_CUSTOM_FILES
-int fs_open_custom(struct fs_file *file, const char *name);
-void fs_close_custom(struct fs_file *file);
-#endif /* LWIP_HTTPD_CUSTOM_FILES */
-
-/*-----------------------------------------------------------------------------------*/
-static struct fs_file *
-fs_malloc(void)
-{
-  int i;
-  for(i = 0; i < LWIP_MAX_OPEN_FILES; i++) {
-    if(fs_memory[i].inuse == 0) {
-      fs_memory[i].inuse = 1;
-      return(&fs_memory[i].file);
-    }
-  }
-  return(NULL);
-}
-
-/*-----------------------------------------------------------------------------------*/
-static void
-fs_free(struct fs_file *file)
-{
-  int i;
-  for(i = 0; i < LWIP_MAX_OPEN_FILES; i++) {
-    if(&fs_memory[i].file == file) {
-      fs_memory[i].inuse = 0;
-      break;
-    }
-  }
-  return;
-}
-
-/*-----------------------------------------------------------------------------------*/
-struct fs_file *
-fs_open(const char *name)
-{
-  struct fs_file *file;
-  const struct fsdata_file *f;
-
-  file = fs_malloc();
-  if(file == NULL) {
-    return NULL;
-  }
-
-#if LWIP_HTTPD_CUSTOM_FILES
-  if(fs_open_custom(file, name)) {
-    file->is_custom_file = 1;
-    return file;
-  }
-  file->is_custom_file = 0;
-#endif /* LWIP_HTTPD_CUSTOM_FILES */
-
-  for(f = FS_ROOT; f != NULL; f = f->next) {
-    if (!strcmp(name, (char *)f->name)) {
-      file->data = (const char *)f->data;
-      file->len = f->len;
-      file->index = f->len;
-      file->pextension = NULL;
-      file->http_header_included = f->http_header_included;
-#if HTTPD_PRECALCULATED_CHECKSUM
-      file->chksum_count = f->chksum_count;
-      file->chksum = f->chksum;
-#endif /* HTTPD_PRECALCULATED_CHECKSUM */
-#if LWIP_HTTPD_FILE_STATE
-      file->state = fs_state_init(file, name);
-#endif /* #if LWIP_HTTPD_FILE_STATE */
-      return file;
-    }
-  }
-  fs_free(file);
-  return NULL;
-}
-
-/*-----------------------------------------------------------------------------------*/
-void
-fs_close(struct fs_file *file)
-{
-#if LWIP_HTTPD_CUSTOM_FILES
-  if (file->is_custom_file) {
-    fs_close_custom(file);
-  }
-#endif /* LWIP_HTTPD_CUSTOM_FILES */
-#if LWIP_HTTPD_FILE_STATE
-  fs_state_free(file, file->state);
-#endif /* #if LWIP_HTTPD_FILE_STATE */
-  fs_free(file);
-}
-/*-----------------------------------------------------------------------------------*/
-int
-fs_read(struct fs_file *file, char *buffer, int count)
-{
-  int read;
-
-  if(file->index == file->len) {
-    return -1;
-  }
-
-  read = file->len - file->index;
-  if(read > count) {
-    read = count;
-  }
-
-  MEMCPY(buffer, (file->data + file->index), read);
-  file->index += read;
-
-  return(read);
-}
-/*-----------------------------------------------------------------------------------*/
-int fs_bytes_left(struct fs_file *file)
-{
-  return file->len - file->index;
-}
diff --git a/FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/fs.h b/FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/fs.h
deleted file mode 100644 (file)
index cd76759..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright (c) 2001-2003 Swedish Institute of Computer Science.
- * All rights reserved. 
- * 
- * Redistribution and use in source and binary forms, with or without modification, 
- * are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- *    this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- *    this list of conditions and the following disclaimer in the documentation
- *    and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission. 
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT 
- * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT 
- * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 
- * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY 
- * OF SUCH DAMAGE.
- *
- * This file is part of the lwIP TCP/IP stack.
- * 
- * Author: Adam Dunkels <adam@sics.se>
- *
- */
-#ifndef __FS_H__
-#define __FS_H__
-
-#include "lwip/opt.h"
-
-/** Set this to 1 and provide the functions:
- * - "int fs_open_custom(struct fs_file *file, const char *name)"
- *    Called first for every opened file to allow opening files
- *    that are not included in fsdata(_custom).c
- * - "void fs_close_custom(struct fs_file *file)"
- *    Called to free resources allocated by fs_open_custom().
- */
-#ifndef LWIP_HTTPD_CUSTOM_FILES
-#define LWIP_HTTPD_CUSTOM_FILES       0
-#endif
-
-/** Set this to 1 to include an application state argument per file
- * that is opened. This allows to keep a state per connection/file.
- */
-#ifndef LWIP_HTTPD_FILE_STATE
-#define LWIP_HTTPD_FILE_STATE         0
-#endif
-
-/** HTTPD_PRECALCULATED_CHECKSUM==1: include precompiled checksums for
- * predefined (MSS-sized) chunks of the files to prevent having to calculate
- * the checksums at runtime. */
-#ifndef HTTPD_PRECALCULATED_CHECKSUM
-#define HTTPD_PRECALCULATED_CHECKSUM  0
-#endif
-
-#if HTTPD_PRECALCULATED_CHECKSUM
-struct fsdata_chksum {
-  u32_t offset;
-  u16_t chksum;
-  u16_t len;
-};
-#endif /* HTTPD_PRECALCULATED_CHECKSUM */
-
-struct fs_file {
-  const char *data;
-  int len;
-  int index;
-  void *pextension;
-#if HTTPD_PRECALCULATED_CHECKSUM
-  const struct fsdata_chksum *chksum;
-  u16_t chksum_count;
-#endif /* HTTPD_PRECALCULATED_CHECKSUM */
-  u8_t http_header_included;
-#if LWIP_HTTPD_CUSTOM_FILES
-  u8_t is_custom_file;
-#endif /* LWIP_HTTPD_CUSTOM_FILES */
-#if LWIP_HTTPD_FILE_STATE
-  void *state;
-#endif /* LWIP_HTTPD_FILE_STATE */
-};
-
-struct fs_file *fs_open(const char *name);
-void fs_close(struct fs_file *file);
-int fs_read(struct fs_file *file, char *buffer, int count);
-int fs_bytes_left(struct fs_file *file);
-
-#if LWIP_HTTPD_FILE_STATE
-/** This user-defined function is called when a file is opened. */
-void *fs_state_init(struct fs_file *file, const char *name);
-/** This user-defined function is called when a file is closed. */
-void fs_state_free(struct fs_file *file, void *state);
-#endif /* #if LWIP_HTTPD_FILE_STATE */
-
-#endif /* __FS_H__ */
diff --git a/FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/fsdata.c b/FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/fsdata.c
deleted file mode 100644 (file)
index f2ddfd9..0000000
+++ /dev/null
@@ -1,2068 +0,0 @@
-#include "fs.h"\r
-#include "lwip/def.h"\r
-#include "fsdata.h"\r
-\r
-\r
-#define file_NULL (struct fsdata_file *) NULL\r
-\r
-\r
-static const unsigned int dummy_align__404_html = 0;\r
-static const unsigned char data__404_html[] = {\r
-/* /404.html (10 chars) */\r
-0x2f,0x34,0x30,0x34,0x2e,0x68,0x74,0x6d,0x6c,0x00,0x00,0x00,\r
-\r
-/* HTTP header */\r
-/* "HTTP/1.0 404 File not found\r
-" (29 bytes) */\r
-0x48,0x54,0x54,0x50,0x2f,0x31,0x2e,0x30,0x20,0x34,0x30,0x34,0x20,0x46,0x69,0x6c,\r
-0x65,0x20,0x6e,0x6f,0x74,0x20,0x66,0x6f,0x75,0x6e,0x64,0x0d,0x0a,\r
-/* "Server: lwIP/1.3.1 (http://savannah.nongnu.org/projects/lwip)\r
-" (63 bytes) */\r
-0x53,0x65,0x72,0x76,0x65,0x72,0x3a,0x20,0x6c,0x77,0x49,0x50,0x2f,0x31,0x2e,0x33,\r
-0x2e,0x31,0x20,0x28,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x73,0x61,0x76,0x61,0x6e,\r
-0x6e,0x61,0x68,0x2e,0x6e,0x6f,0x6e,0x67,0x6e,0x75,0x2e,0x6f,0x72,0x67,0x2f,0x70,\r
-0x72,0x6f,0x6a,0x65,0x63,0x74,0x73,0x2f,0x6c,0x77,0x69,0x70,0x29,0x0d,0x0a,\r
-/* "Content-type: text/html\r
-\r
-" (27 bytes) */\r
-0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x74,0x79,0x70,0x65,0x3a,0x20,0x74,0x65,\r
-0x78,0x74,0x2f,0x68,0x74,0x6d,0x6c,0x0d,0x0a,0x0d,0x0a,\r
-/* raw file data (544 bytes) */\r
-0x3c,0x68,0x74,0x6d,0x6c,0x3e,0x0a,0x3c,0x68,0x65,0x61,0x64,0x3e,0x3c,0x74,0x69,\r
-0x74,0x6c,0x65,0x3e,0x6c,0x77,0x49,0x50,0x20,0x2d,0x20,0x41,0x20,0x4c,0x69,0x67,\r
-0x68,0x74,0x77,0x65,0x69,0x67,0x68,0x74,0x20,0x54,0x43,0x50,0x2f,0x49,0x50,0x20,\r
-0x53,0x74,0x61,0x63,0x6b,0x3c,0x2f,0x74,0x69,0x74,0x6c,0x65,0x3e,0x3c,0x2f,0x68,\r
-0x65,0x61,0x64,0x3e,0x0a,0x3c,0x62,0x6f,0x64,0x79,0x20,0x62,0x67,0x63,0x6f,0x6c,\r
-0x6f,0x72,0x3d,0x22,0x77,0x68,0x69,0x74,0x65,0x22,0x20,0x74,0x65,0x78,0x74,0x3d,\r
-0x22,0x62,0x6c,0x61,0x63,0x6b,0x22,0x3e,0x0a,0x0a,0x20,0x20,0x20,0x20,0x3c,0x74,\r
-0x61,0x62,0x6c,0x65,0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x31,0x30,0x30,0x25,\r
-0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x74,0x72,0x20,0x76,0x61,0x6c,\r
-0x69,0x67,0x6e,0x3d,0x22,0x74,0x6f,0x70,0x22,0x3e,0x3c,0x74,0x64,0x20,0x77,0x69,\r
-0x64,0x74,0x68,0x3d,0x22,0x38,0x30,0x22,0x3e,0x09,0x20,0x20,0x0a,0x09,0x20,0x20,\r
-0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,\r
-0x77,0x77,0x77,0x2e,0x73,0x69,0x63,0x73,0x2e,0x73,0x65,0x2f,0x22,0x3e,0x3c,0x69,\r
-0x6d,0x67,0x20,0x73,0x72,0x63,0x3d,0x22,0x2f,0x69,0x6d,0x67,0x2f,0x73,0x69,0x63,\r
-0x73,0x2e,0x67,0x69,0x66,0x22,0x0a,0x09,0x20,0x20,0x62,0x6f,0x72,0x64,0x65,0x72,\r
-0x3d,0x22,0x30,0x22,0x20,0x61,0x6c,0x74,0x3d,0x22,0x53,0x49,0x43,0x53,0x20,0x6c,\r
-0x6f,0x67,0x6f,0x22,0x20,0x74,0x69,0x74,0x6c,0x65,0x3d,0x22,0x53,0x49,0x43,0x53,\r
-0x20,0x6c,0x6f,0x67,0x6f,0x22,0x3e,0x3c,0x2f,0x61,0x3e,0x0a,0x09,0x3c,0x2f,0x74,\r
-0x64,0x3e,0x3c,0x74,0x64,0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x35,0x30,0x30,\r
-0x22,0x3e,0x09,0x20,0x20,0x0a,0x09,0x20,0x20,0x3c,0x68,0x31,0x3e,0x6c,0x77,0x49,\r
-0x50,0x20,0x2d,0x20,0x41,0x20,0x4c,0x69,0x67,0x68,0x74,0x77,0x65,0x69,0x67,0x68,\r
-0x74,0x20,0x54,0x43,0x50,0x2f,0x49,0x50,0x20,0x53,0x74,0x61,0x63,0x6b,0x3c,0x2f,\r
-0x68,0x31,0x3e,0x0a,0x09,0x20,0x20,0x3c,0x68,0x32,0x3e,0x34,0x30,0x34,0x20,0x2d,\r
-0x20,0x50,0x61,0x67,0x65,0x20,0x6e,0x6f,0x74,0x20,0x66,0x6f,0x75,0x6e,0x64,0x3c,\r
-0x2f,0x68,0x32,0x3e,0x0a,0x09,0x20,0x20,0x3c,0x70,0x3e,0x0a,0x09,0x20,0x20,0x20,\r
-0x20,0x53,0x6f,0x72,0x72,0x79,0x2c,0x20,0x74,0x68,0x65,0x20,0x70,0x61,0x67,0x65,\r
-0x20,0x79,0x6f,0x75,0x20,0x61,0x72,0x65,0x20,0x72,0x65,0x71,0x75,0x65,0x73,0x74,\r
-0x69,0x6e,0x67,0x20,0x77,0x61,0x73,0x20,0x6e,0x6f,0x74,0x20,0x66,0x6f,0x75,0x6e,\r
-0x64,0x20,0x6f,0x6e,0x20,0x74,0x68,0x69,0x73,0x0a,0x09,0x20,0x20,0x20,0x20,0x73,\r
-0x65,0x72,0x76,0x65,0x72,0x2e,0x20,0x0a,0x09,0x20,0x20,0x3c,0x2f,0x70,0x3e,0x0a,\r
-0x09,0x3c,0x2f,0x74,0x64,0x3e,0x3c,0x74,0x64,0x3e,0x0a,0x09,0x20,0x20,0x26,0x6e,\r
-0x62,0x73,0x70,0x3b,0x0a,0x09,0x3c,0x2f,0x74,0x64,0x3e,0x3c,0x2f,0x74,0x72,0x3e,\r
-0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x74,0x61,0x62,0x6c,0x65,0x3e,0x0a,\r
-0x3c,0x2f,0x62,0x6f,0x64,0x79,0x3e,0x0a,0x3c,0x2f,0x68,0x74,0x6d,0x6c,0x3e,0x0a,\r
-};\r
-\r
-static const unsigned int dummy_align__index_shtml = 1;\r
-static const unsigned char data__index_shtml[] = {\r
-/* /index.shtml (13 chars) */\r
-0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x73,0x68,0x74,0x6d,0x6c,0x00,0x00,0x00,0x00,\r
-\r
-/* HTTP header */\r
-/* "HTTP/1.0 200 OK\r
-" (17 bytes) */\r
-0x48,0x54,0x54,0x50,0x2f,0x31,0x2e,0x30,0x20,0x32,0x30,0x30,0x20,0x4f,0x4b,0x0d,\r
-0x0a,\r
-/* "Server: lwIP/1.3.1 (http://savannah.nongnu.org/projects/lwip)\r
-" (63 bytes) */\r
-0x53,0x65,0x72,0x76,0x65,0x72,0x3a,0x20,0x6c,0x77,0x49,0x50,0x2f,0x31,0x2e,0x33,\r
-0x2e,0x31,0x20,0x28,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x73,0x61,0x76,0x61,0x6e,\r
-0x6e,0x61,0x68,0x2e,0x6e,0x6f,0x6e,0x67,0x6e,0x75,0x2e,0x6f,0x72,0x67,0x2f,0x70,\r
-0x72,0x6f,0x6a,0x65,0x63,0x74,0x73,0x2f,0x6c,0x77,0x69,0x70,0x29,0x0d,0x0a,\r
-/* "Content-type: text/html\r
-Expires: Fri, 10 Apr 2008 14:00:00 GMT\r
-Pragma: no-cache\r
-\r
-" (85 bytes) */\r
-0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x74,0x79,0x70,0x65,0x3a,0x20,0x74,0x65,\r
-0x78,0x74,0x2f,0x68,0x74,0x6d,0x6c,0x0d,0x0a,0x45,0x78,0x70,0x69,0x72,0x65,0x73,\r
-0x3a,0x20,0x46,0x72,0x69,0x2c,0x20,0x31,0x30,0x20,0x41,0x70,0x72,0x20,0x32,0x30,\r
-0x30,0x38,0x20,0x31,0x34,0x3a,0x30,0x30,0x3a,0x30,0x30,0x20,0x47,0x4d,0x54,0x0d,\r
-0x0a,0x50,0x72,0x61,0x67,0x6d,0x61,0x3a,0x20,0x6e,0x6f,0x2d,0x63,0x61,0x63,0x68,\r
-0x65,0x0d,0x0a,0x0d,0x0a,\r
-/* raw file data (762 bytes) */\r
-0x3c,0x21,0x44,0x4f,0x43,0x54,0x59,0x50,0x45,0x20,0x48,0x54,0x4d,0x4c,0x20,0x50,\r
-0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,\r
-0x54,0x44,0x20,0x48,0x54,0x4d,0x4c,0x20,0x34,0x2e,0x30,0x31,0x20,0x54,0x72,0x61,\r
-0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x61,0x6c,0x2f,0x2f,0x45,0x4e,0x22,0x20,0x22,\r
-0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,\r
-0x67,0x2f,0x54,0x52,0x2f,0x68,0x74,0x6d,0x6c,0x34,0x2f,0x6c,0x6f,0x6f,0x73,0x65,\r
-0x2e,0x64,0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x68,0x74,0x6d,0x6c,0x3e,0x0d,0x0a,\r
-0x20,0x20,0x3c,0x68,0x65,0x61,0x64,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x74,\r
-0x69,0x74,0x6c,0x65,0x3e,0x46,0x72,0x65,0x65,0x52,0x54,0x4f,0x53,0x2e,0x6f,0x72,\r
-0x67,0x20,0x6c,0x77,0x49,0x50,0x20,0x57,0x45,0x42,0x20,0x73,0x65,0x72,0x76,0x65,\r
-0x72,0x20,0x64,0x65,0x6d,0x6f,0x3c,0x2f,0x74,0x69,0x74,0x6c,0x65,0x3e,0x0d,0x0a,\r
-0x20,0x20,0x3c,0x2f,0x68,0x65,0x61,0x64,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x42,0x4f,\r
-0x44,0x59,0x20,0x6f,0x6e,0x4c,0x6f,0x61,0x64,0x3d,0x22,0x77,0x69,0x6e,0x64,0x6f,\r
-0x77,0x2e,0x73,0x65,0x74,0x54,0x69,0x6d,0x65,0x6f,0x75,0x74,0x28,0x26,0x71,0x75,\r
-0x6f,0x74,0x3b,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x2e,0x68,0x72,0x65,0x66,\r
-0x3d,0x27,0x69,0x6e,0x64,0x65,0x78,0x2e,0x73,0x68,0x74,0x6d,0x6c,0x27,0x26,0x71,\r
-0x75,0x6f,0x74,0x3b,0x2c,0x32,0x30,0x30,0x30,0x29,0x22,0x3e,0x0d,0x0a,0x3c,0x66,\r
-0x6f,0x6e,0x74,0x20,0x66,0x61,0x63,0x65,0x3d,0x22,0x61,0x72,0x69,0x61,0x6c,0x22,\r
-0x3e,0x0d,0x0a,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x69,0x6e,0x64,0x65,\r
-0x78,0x2e,0x73,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x54,0x61,0x73,0x6b,0x20,0x53,0x74,\r
-0x61,0x74,0x73,0x3c,0x2f,0x61,0x3e,0x20,0x3c,0x62,0x3e,0x7c,0x3c,0x2f,0x62,0x3e,\r
-0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x72,0x75,0x6e,0x74,0x69,0x6d,\r
-0x65,0x2e,0x73,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x52,0x75,0x6e,0x20,0x54,0x69,0x6d,\r
-0x65,0x20,0x53,0x74,0x61,0x74,0x73,0x3c,0x2f,0x61,0x3e,0x20,0x3c,0x62,0x3e,0x7c,\r
-0x3c,0x2f,0x62,0x3e,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x68,0x74,\r
-0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x66,0x72,0x65,0x65,0x72,0x74,0x6f,\r
-0x73,0x2e,0x6f,0x72,0x67,0x2f,0x22,0x3e,0x46,0x72,0x65,0x65,0x52,0x54,0x4f,0x53,\r
-0x20,0x48,0x6f,0x6d,0x65,0x70,0x61,0x67,0x65,0x3c,0x2f,0x61,0x3e,0x20,0x3c,0x62,\r
-0x3e,0x7c,0x3c,0x2f,0x62,0x3e,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,\r
-0x6c,0x6f,0x67,0x6f,0x2e,0x6a,0x70,0x67,0x22,0x3e,0x33,0x37,0x4b,0x20,0x6a,0x70,\r
-0x67,0x3c,0x2f,0x61,0x3e,0x0d,0x0a,0x3c,0x62,0x72,0x3e,0x3c,0x70,0x3e,0x0d,0x0a,\r
-0x3c,0x68,0x72,0x3e,0x0d,0x0a,0x3c,0x62,0x72,0x3e,0x3c,0x70,0x3e,0x0d,0x0a,0x3c,\r
-0x68,0x32,0x3e,0x54,0x61,0x73,0x6b,0x20,0x73,0x74,0x61,0x74,0x69,0x73,0x74,0x69,\r
-0x63,0x73,0x3c,0x2f,0x68,0x32,0x3e,0x0d,0x0a,0x50,0x61,0x67,0x65,0x20,0x77,0x69,\r
-0x6c,0x6c,0x20,0x72,0x65,0x66,0x72,0x65,0x73,0x68,0x20,0x65,0x76,0x65,0x72,0x79,\r
-0x20,0x32,0x20,0x73,0x65,0x63,0x6f,0x6e,0x64,0x73,0x2e,0x3c,0x70,0x3e,0x0d,0x0a,\r
-0x3c,0x66,0x6f,0x6e,0x74,0x20,0x66,0x61,0x63,0x65,0x3d,0x22,0x63,0x6f,0x75,0x72,\r
-0x69,0x65,0x72,0x22,0x3e,0x3c,0x70,0x72,0x65,0x3e,0x54,0x61,0x73,0x6b,0x20,0x20,\r
-0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x53,0x74,0x61,0x74,0x65,0x20,0x20,0x50,\r
-0x72,0x69,0x6f,0x72,0x69,0x74,0x79,0x20,0x20,0x53,0x74,0x61,0x63,0x6b,0x09,0x23,\r
-0x3c,0x62,0x72,0x3e,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,\r
-0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,\r
-0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,\r
-0x2a,0x2a,0x2a,0x2a,0x3c,0x62,0x72,0x3e,0x0d,0x0a,0x3c,0x21,0x2d,0x2d,0x23,0x72,\r
-0x74,0x6f,0x73,0x5f,0x73,0x74,0x61,0x74,0x73,0x2d,0x2d,0x3e,0x0d,0x0a,0x3c,0x2f,\r
-0x70,0x72,0x65,0x3e,0x3c,0x2f,0x66,0x6f,0x6e,0x74,0x3e,0x0d,0x0a,0x3c,0x2f,0x66,\r
-0x6f,0x6e,0x74,0x3e,0x0d,0x0a,0x3c,0x2f,0x62,0x6f,0x64,0x79,0x3e,0x0d,0x0a,0x3c,\r
-0x2f,0x68,0x74,0x6d,0x6c,0x3e,0x0d,0x0a,0x0d,0x0a,};\r
-\r
-static const unsigned int dummy_align__logo_jpg = 2;\r
-static const unsigned char data__logo_jpg[] = {\r
-/* /logo.jpg (10 chars) */\r
-0x2f,0x6c,0x6f,0x67,0x6f,0x2e,0x6a,0x70,0x67,0x00,0x00,0x00,\r
-\r
-/* HTTP header */\r
-/* "HTTP/1.0 200 OK\r
-" (17 bytes) */\r
-0x48,0x54,0x54,0x50,0x2f,0x31,0x2e,0x30,0x20,0x32,0x30,0x30,0x20,0x4f,0x4b,0x0d,\r
-0x0a,\r
-/* "Server: lwIP/1.3.1 (http://savannah.nongnu.org/projects/lwip)\r
-" (63 bytes) */\r
-0x53,0x65,0x72,0x76,0x65,0x72,0x3a,0x20,0x6c,0x77,0x49,0x50,0x2f,0x31,0x2e,0x33,\r
-0x2e,0x31,0x20,0x28,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x73,0x61,0x76,0x61,0x6e,\r
-0x6e,0x61,0x68,0x2e,0x6e,0x6f,0x6e,0x67,0x6e,0x75,0x2e,0x6f,0x72,0x67,0x2f,0x70,\r
-0x72,0x6f,0x6a,0x65,0x63,0x74,0x73,0x2f,0x6c,0x77,0x69,0x70,0x29,0x0d,0x0a,\r
-/* "Content-type: image/jpeg\r
-\r
-" (28 bytes) */\r
-0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x74,0x79,0x70,0x65,0x3a,0x20,0x69,0x6d,\r
-0x61,0x67,0x65,0x2f,0x6a,0x70,0x65,0x67,0x0d,0x0a,0x0d,0x0a,\r
-/* raw file data (28602 bytes) */\r
-0xff,0xd8,0xff,0xe0,0x00,0x10,0x4a,0x46,0x49,0x46,0x00,0x01,0x01,0x00,0x00,0x01,\r
-0x00,0x01,0x00,0x00,0xff,0xdb,0x00,0x43,0x00,0x03,0x02,0x02,0x03,0x02,0x02,0x03,\r
-0x03,0x03,0x03,0x04,0x03,0x03,0x04,0x05,0x08,0x05,0x05,0x04,0x04,0x05,0x0a,0x07,\r
-0x07,0x06,0x08,0x0c,0x0a,0x0c,0x0c,0x0b,0x0a,0x0b,0x0b,0x0d,0x0e,0x12,0x10,0x0d,\r
-0x0e,0x11,0x0e,0x0b,0x0b,0x10,0x16,0x10,0x11,0x13,0x14,0x15,0x15,0x15,0x0c,0x0f,\r
-0x17,0x18,0x16,0x14,0x18,0x12,0x14,0x15,0x14,0xff,0xdb,0x00,0x43,0x01,0x03,0x04,\r
-0x04,0x05,0x04,0x05,0x09,0x05,0x05,0x09,0x14,0x0d,0x0b,0x0d,0x14,0x14,0x14,0x14,\r
-0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,\r
-0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,\r
-0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0xff,0xc0,\r
-0x00,0x11,0x08,0x00,0xea,0x02,0x71,0x03,0x01,0x22,0x00,0x02,0x11,0x01,0x03,0x11,\r
-0x01,0xff,0xc4,0x00,0x1f,0x00,0x00,0x01,0x05,0x01,0x01,0x01,0x01,0x01,0x01,0x00,\r
-0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,\r
-0x0a,0x0b,0xff,0xc4,0x00,0xb5,0x10,0x00,0x02,0x01,0x03,0x03,0x02,0x04,0x03,0x05,\r
-0x05,0x04,0x04,0x00,0x00,0x01,0x7d,0x01,0x02,0x03,0x00,0x04,0x11,0x05,0x12,0x21,\r
-0x31,0x41,0x06,0x13,0x51,0x61,0x07,0x22,0x71,0x14,0x32,0x81,0x91,0xa1,0x08,0x23,\r
-0x42,0xb1,0xc1,0x15,0x52,0xd1,0xf0,0x24,0x33,0x62,0x72,0x82,0x09,0x0a,0x16,0x17,\r
-0x18,0x19,0x1a,0x25,0x26,0x27,0x28,0x29,0x2a,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,\r
-0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,\r
-0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,\r
-0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,\r
-0x9a,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,\r
-0xb8,0xb9,0xba,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xd2,0xd3,0xd4,0xd5,\r
-0xd6,0xd7,0xd8,0xd9,0xda,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xf1,\r
-0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xff,0xc4,0x00,0x1f,0x01,0x00,0x03,\r
-0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,\r
-0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0xff,0xc4,0x00,0xb5,0x11,0x00,\r
-0x02,0x01,0x02,0x04,0x04,0x03,0x04,0x07,0x05,0x04,0x04,0x00,0x01,0x02,0x77,0x00,\r
-0x01,0x02,0x03,0x11,0x04,0x05,0x21,0x31,0x06,0x12,0x41,0x51,0x07,0x61,0x71,0x13,\r
-0x22,0x32,0x81,0x08,0x14,0x42,0x91,0xa1,0xb1,0xc1,0x09,0x23,0x33,0x52,0xf0,0x15,\r
-0x62,0x72,0xd1,0x0a,0x16,0x24,0x34,0xe1,0x25,0xf1,0x17,0x18,0x19,0x1a,0x26,0x27,\r
-0x28,0x29,0x2a,0x35,0x36,0x37,0x38,0x39,0x3a,0x43,0x44,0x45,0x46,0x47,0x48,0x49,\r
-0x4a,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x63,0x64,0x65,0x66,0x67,0x68,0x69,\r
-0x6a,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x82,0x83,0x84,0x85,0x86,0x87,0x88,\r
-0x89,0x8a,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0xa2,0xa3,0xa4,0xa5,0xa6,\r
-0xa7,0xa8,0xa9,0xaa,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xc2,0xc3,0xc4,\r
-0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xe2,\r
-0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,\r
-0xfa,0xff,0xda,0x00,0x0c,0x03,0x01,0x00,0x02,0x11,0x03,0x11,0x00,0x3f,0x00,0xfd,\r
-0x53,0xa2,0x8a,0x28,0x00,0xa2,0x8a,0x28,0x00,0xa2,0x8a,0x28,0x00,0xa4,0x34,0x8e,\r
-0x70,0x09,0xaf,0x0b,0xf1,0xbf,0xc6,0x4b,0x8f,0x13,0x78,0xc2,0xdb,0xc1,0x7e,0x0f,\r
-0xb8,0x2b,0x24,0x93,0x08,0xae,0xf5,0x48,0x88,0x3b,0x47,0xf1,0x2c,0x7f,0x4e,0x72,\r
-0xdf,0x97,0xad,0x72,0x62,0x71,0x54,0xf0,0xb1,0xe6,0x9e,0xef,0x44,0xba,0xb6,0x73,\r
-0x57,0xc4,0x43,0x0e,0x93,0x9e,0xef,0x44,0xba,0xb6,0x77,0xbe,0x3b,0xf8,0xb9,0xa1,\r
-0xf8,0x16,0x39,0x23,0x9d,0xe4,0xd4,0x35,0x05,0x1c,0x58,0x59,0x2e,0xf9,0x3d,0xb7,\r
-0x76,0x51,0xf5,0xfc,0x8d,0x78,0x07,0x8a,0xff,0x00,0x69,0x3f,0x1b,0x6a,0xb3,0x3a,\r
-0x69,0x3a,0x7f,0xf6,0x2d,0xb7,0xf0,0x81,0x09,0x96,0x5f,0xc5,0x98,0x63,0xf2,0x15,\r
-0xf4,0xde,0x83,0xe0,0xdd,0x27,0xc3,0xf6,0x62,0x0b,0x6b,0x38,0xc9,0x3f,0x33,0xcb,\r
-0x20,0xde,0xf2,0x37,0x76,0x66,0x3c,0x92,0x6b,0x40,0xe9,0x16,0x47,0xad,0x9c,0x1f,\r
-0xf7,0xec,0x57,0x9d,0x88,0xc2,0xe3,0x31,0x2b,0xf8,0xbc,0x8b,0xb2,0x5f,0xad,0xce,\r
-0x3c,0x46,0x1b,0x13,0x88,0x56,0x8d,0x5e,0x45,0xe4,0xbf,0x53,0xe0,0x8d,0x4f,0xc6,\r
-0xfe,0x33,0xd5,0x18,0x9b,0xcd,0x5f,0x56,0x90,0x93,0x9c,0x19,0xa4,0x0b,0xf9,0x0e,\r
-0x2b,0x35,0x75,0xff,0x00,0x10,0xc7,0x9c,0x6a,0x3a,0x82,0xfa,0xfe,0xfa,0x41,0xfd,\r
-0x6b,0xf4,0x19,0xb4,0x2d,0x39,0xba,0xd8,0x5b,0x7f,0xdf,0xa1,0xfe,0x15,0x19,0xf0,\r
-0xce,0x94,0xff,0x00,0x7b,0x4d,0xb5,0x3f,0xf6,0xc5,0x7f,0xc2,0xbc,0x79,0x64,0x15,\r
-0xa4,0xef,0xed,0xaf,0xf2,0x7f,0xe6,0x78,0x72,0xc8,0x6a,0x49,0xdd,0xd7,0x7f,0xd7,\r
-0xcc,0xf8,0x0d,0x3c,0x5f,0xe2,0x68,0x94,0x05,0xd6,0x35,0x45,0x03,0xa0,0x17,0x32,\r
-0x0f,0xeb,0x53,0x27,0x8f,0xbc,0x59,0x11,0x25,0x75,0xfd,0x59,0x33,0xe9,0x77,0x28,\r
-0xfe,0xb5,0xf7,0x8b,0x78,0x3b,0x44,0x7e,0xba,0x4d,0x99,0xff,0x00,0xb6,0x2b,0x51,\r
-0x37,0x81,0x7c,0x3c,0xf9,0xce,0x8d,0x66,0x73,0xff,0x00,0x4c,0x56,0xa5,0x64,0x58,\r
-0x85,0xb5,0x6f,0xcc,0x9f,0xec,0x2a,0xeb,0x6a,0xef,0xf1,0xff,0x00,0x33,0xe1,0x6f,\r
-0xf8,0x59,0x3e,0x2f,0x5f,0xf9,0x98,0xb5,0x7f,0xfc,0x0c,0x93,0xfc,0x69,0xeb,0xf1,\r
-0x4f,0xc6,0x51,0x9c,0xaf,0x89,0x35,0x5c,0xfb,0xdd,0x3f,0xf8,0xd7,0xdc,0x0d,0xf0,\r
-0xf3,0xc3,0x6f,0xd7,0x44,0xb2,0x3f,0xf6,0xc8,0x54,0x4f,0xf0,0xcb,0xc2,0xaf,0xf7,\r
-0xb4,0x2b,0x23,0xff,0x00,0x6c,0x85,0x2f,0xec,0x4c,0x5f,0xfc,0xfe,0xfc,0xc5,0xfd,\r
-0x89,0x8a,0x5b,0x57,0x7f,0x89,0xf1,0x54,0x7f,0x17,0xfc,0x6b,0x1f,0xfc,0xcc,0x9a,\r
-0x99,0xfa,0xdc,0x35,0x58,0x8b,0xe3,0x87,0x8e,0xe1,0x6c,0xaf,0x89,0x2f,0x73,0xd3,\r
-0xe6,0x21,0x87,0xe4,0x45,0x7d,0x8e,0xff,0x00,0x09,0x7c,0x20,0xfd,0x74,0x0b,0x3f,\r
-0xc2,0x3c,0x54,0x2f,0xf0,0x6b,0xc1,0xaf,0xd7,0x41,0xb5,0x1f,0x45,0xa4,0xb2,0x7c,\r
-0x72,0xda,0xb7,0xe2,0xc7,0xfd,0x8f,0x8d,0x5b,0x62,0x1f,0xe2,0x7c,0x8a,0x9f,0x1f,\r
-0xbc,0x7e,0x83,0x1f,0xf0,0x91,0x5c,0x7d,0x4c,0x71,0x9f,0xfd,0x96,0xa6,0x1f,0xb4,\r
-0x37,0x8f,0xc7,0xfc,0xcc,0x12,0xfe,0x30,0x45,0xff,0x00,0xc4,0x57,0xd5,0xaf,0xf0,\r
-0x43,0xc1,0x4e,0x0f,0xfc,0x48,0xa0,0x1f,0x4a,0x89,0xbe,0x03,0xf8,0x21,0xf3,0xff,\r
-0x00,0x12,0x48,0x86,0x7d,0x09,0xa7,0xfd,0x95,0x98,0xad,0xab,0x7e,0x2c,0x3f,0xb2,\r
-0xb3,0x15,0xb6,0x21,0xfd,0xec,0xf9,0x69,0x7f,0x68,0xaf,0x1f,0x8f,0xf9,0x8f,0x39,\r
-0xfa,0xdb,0xc5,0xff,0x00,0xc4,0xd4,0x89,0xfb,0x48,0x78,0xf9,0x08,0x3f,0xdb,0x59,\r
-0xc7,0xad,0xb4,0x47,0xff,0x00,0x65,0xaf,0xa6,0x9f,0xf6,0x7d,0xf0,0x33,0x8e,0x74,\r
-0x75,0x1e,0xe1,0x8d,0x42,0xff,0x00,0xb3,0x9f,0x81,0x9c,0x7f,0xc8,0x2d,0x97,0xe9,\r
-0x21,0xa3,0xfb,0x33,0x34,0x5b,0x56,0xff,0x00,0xc9,0x98,0xbf,0xb3,0x33,0x35,0xb5,\r
-0x7f,0xc5,0x9f,0x39,0xc7,0xfb,0x4d,0xf8,0xf1,0x17,0x07,0x52,0x85,0xcf,0xab,0x5a,\r
-0xa6,0x7f,0x95,0x58,0x4f,0xda,0x9b,0xc7,0x49,0x8f,0xf4,0x9b,0x36,0xc7,0xad,0xaa,\r
-0xf3,0xfa,0xd7,0xbe,0xbf,0xec,0xd5,0xe0,0x86,0xc9,0x16,0x32,0xaf,0xd2,0x43,0x50,\r
-0x3f,0xec,0xc5,0xe0,0xa6,0xe9,0x6f,0x3a,0xff,0x00,0xdb,0x4a,0x5f,0xd9,0xf9,0xb2,\r
-0xda,0xaf,0xfe,0x4c,0xc3,0xfb,0x3f,0x36,0x5b,0x57,0xfc,0x59,0xe2,0x0b,0xfb,0x57,\r
-0x78,0xdd,0x7a,0x9d,0x39,0xbe,0xb6,0xc7,0xfa,0x35,0x3d,0x7f,0x6b,0x0f,0x1a,0x82,\r
-0x32,0x9a,0x61,0xff,0x00,0xb7,0x66,0xff,0x00,0xe2,0xeb,0xd9,0xdb,0xf6,0x5a,0xf0,\r
-0x63,0x0e,0x12,0xe5,0x7f,0xed,0xa5,0x42,0xff,0x00,0xb2,0xa7,0x83,0xcf,0x47,0xbb,\r
-0x5f,0xfb,0x69,0x43,0xc1,0xe7,0x0b,0x6a,0x9f,0xf9,0x30,0x7d,0x4b,0x37,0x5b,0x56,\r
-0xfc,0x4f,0x23,0x5f,0xda,0xd7,0xc6,0x43,0xad,0xbe,0x96,0xdf,0xf6,0xc1,0xff,0x00,\r
-0xf8,0xba,0x91,0x3f,0x6b,0x8f,0x16,0x82,0x37,0x59,0x69,0x6d,0xeb,0xfb,0xa7,0xff,\r
-0x00,0xe2,0xeb,0xd4,0x24,0xfd,0x93,0xbc,0x2a,0xd8,0xdb,0x75,0x78,0xbf,0xf0,0x20,\r
-0x6a,0x07,0xfd,0x92,0x3c,0x34,0x73,0x8b,0xfb,0xb5,0xf4,0xe9,0x4b,0xea,0xb9,0xca,\r
-0xfb,0x7f,0x88,0x7d,0x53,0x39,0x5b,0x55,0xfc,0x4f,0x3d,0x8b,0xf6,0xbe,0xf1,0x32,\r
-0xe7,0xcc,0xd2,0xb4,0xc7,0xf4,0xc2,0xc8,0x3f,0xf6,0x6a,0xb0,0x9f,0xb6,0x16,0xbc,\r
-0x31,0xbb,0x43,0xd3,0x5b,0xd7,0x0d,0x20,0xfe,0xb5,0xda,0xc9,0xfb,0x22,0xe8,0x19,\r
-0xf9,0x75,0x3b,0xa0,0x3d,0xd4,0x54,0x0f,0xfb,0x21,0x68,0xe4,0x7c,0xba,0xbd,0xcf,\r
-0xe2,0x82,0x9f,0xb1,0xce,0x97,0xda,0xfc,0x50,0x7b,0x0c,0xe9,0x7d,0xbf,0xc8,0xe6,\r
-0x07,0xed,0x89,0xaa,0xf7,0xf0,0xf5,0x99,0xfa,0x4e,0xdf,0xe1,0x4f,0x5f,0xdb,0x1b,\r
-0x50,0x1f,0x7b,0xc3,0x96,0xa7,0xe9,0x72,0xdf,0xfc,0x4d,0x6f,0x3f,0xec,0x7f,0xa6,\r
-0x1c,0xed,0xd6,0xe7,0x5f,0xac,0x60,0xd4,0x12,0x7e,0xc7,0xb6,0x99,0x1b,0x35,0xd9,\r
-0x31,0xef,0x17,0xff,0x00,0x5e,0x8e,0x4c,0xed,0x75,0xfc,0x85,0xec,0xf3,0xb5,0xf6,\r
-0xbf,0x23,0x35,0x7f,0x6c,0x7b,0xc3,0xf7,0xbc,0x35,0x01,0x1e,0xd7,0x67,0xff,0x00,\r
-0x89,0xa9,0x93,0xf6,0xc8,0x70,0x06,0xef,0x0b,0xa9,0x3d,0xf1,0x7b,0xff,0x00,0xd8,\r
-0x54,0xaf,0xfb,0x1e,0xa0,0x5f,0x97,0x5d,0xe7,0xde,0x2a,0x85,0xbf,0x63,0xe9,0x32,\r
-0x76,0xeb,0xa9,0xed,0x98,0x8d,0x2f,0xf8,0x5b,0x5d,0xff,0x00,0xf2,0x50,0xb6,0x76,\r
-0xba,0xfe,0x44,0xeb,0xfb,0x64,0xc4,0x7e,0xf7,0x85,0xdf,0x1e,0xd7,0xa3,0xff,0x00,\r
-0x8d,0xd4,0xcb,0xfb,0x63,0xda,0x63,0xe6,0xf0,0xcc,0xc0,0xfb,0x5e,0x03,0xff,0x00,\r
-0xb2,0x56,0x63,0xfe,0xc7,0xd7,0x7d,0xb5,0xc8,0x4f,0xd5,0x0d,0x40,0xff,0x00,0xb2,\r
-0x06,0xa6,0x01,0xdb,0xad,0x5b,0x13,0xee,0x84,0x53,0xf6,0x99,0xda,0xe8,0xfe,0xe8,\r
-0x87,0x3e,0x78,0xbf,0xa4,0x6f,0x27,0xed,0x8b,0xa7,0x13,0xcf,0x87,0x2e,0x40,0xff,\r
-0x00,0xaf,0x95,0x3f,0xfb,0x2d,0x48,0x3f,0x6c,0x3d,0x27,0x1f,0x37,0x87,0xaf,0x01,\r
-0xf6,0x9d,0x0f,0xf4,0xae,0x59,0xbf,0x64,0x2d,0x68,0x1e,0x35,0x6b,0x53,0xef,0x83,\r
-0x50,0x37,0xec,0x8d,0xe2,0x11,0xf7,0x75,0x0b,0x46,0xfc,0x4d,0x4f,0xb7,0xce,0x97,\r
-0xd9,0x7f,0x72,0x17,0xb5,0xce,0xd7,0xd9,0xfc,0x11,0xdd,0x45,0xfb,0x5f,0xf8,0x74,\r
-0xb7,0xcf,0xa3,0x6a,0x4a,0x3d,0x54,0xc6,0x7f,0xf6,0x6a,0xb3,0x1f,0xed,0x75,0xe1,\r
-0x36,0x5c,0xbe,0x9b,0xab,0x2b,0x7a,0x08,0xe3,0x3f,0xfb,0x3d,0x79,0xb4,0x9f,0xb2,\r
-0x67,0x89,0x54,0x1c,0x5e,0x5a,0x13,0xfe,0xf1,0xa8,0x1b,0xf6,0x50,0xf1,0x5f,0x69,\r
-0xad,0x1b,0xfe,0x07,0x42,0xc5,0x67,0x0b,0xec,0x3f,0xb9,0x0f,0xeb,0x39,0xd2,0xfb,\r
-0x1f,0x82,0x3d,0x54,0x7e,0xd6,0xfe,0x0e,0xce,0x0d,0x96,0xae,0x07,0xaf,0x93,0x1f,\r
-0xff,0x00,0x17,0x4f,0x1f,0xb5,0xaf,0x83,0x31,0xff,0x00,0x1e,0xba,0xb7,0xfd,0xf8,\r
-0x4f,0xfe,0x2e,0xbc,0x85,0xbf,0x65,0x4f,0x18,0x0f,0xbb,0xf6,0x46,0xff,0x00,0xb6,\r
-0xb5,0x03,0xfe,0xcb,0xbe,0x34,0x4c,0xe2,0x0b,0x76,0x03,0xd2,0x51,0x43,0xc7,0x66,\r
-0xeb,0x7a,0x7f,0xf9,0x28,0x7d,0x73,0x39,0x5f,0xf2,0xeb,0xf0,0x3d,0xa9,0x7f,0x6a,\r
-0xff,0x00,0x05,0x36,0x3f,0x75,0xa9,0xaf,0xd6,0xdd,0x7f,0xf8,0xaa,0x91,0x7f,0x6a,\r
-0xaf,0x04,0x11,0xc9,0xd4,0x53,0xeb,0x6c,0x3f,0xf8,0xaa,0xf0,0xb6,0xfd,0x99,0x7c,\r
-0x6c,0xbd,0x2c,0xe2,0x3f,0x49,0x45,0x42,0xff,0x00,0xb3,0x67,0x8d,0xd4,0x7f,0xc8,\r
-0x3d,0x4f,0xd1,0xc5,0x2f,0xed,0x1c,0xd5,0x7f,0xcb,0xbf,0xfc,0x95,0x8b,0xeb,0xf9,\r
-0xba,0xff,0x00,0x97,0x5f,0x87,0xfc,0x13,0xe8,0x48,0xbf,0x69,0xef,0x01,0xc8,0xe0,\r
-0x1b,0xeb,0xa8,0xc1,0xfe,0x26,0xb5,0x6c,0x0f,0xca,0xad,0x2f,0xed,0x27,0xf0,0xfd,\r
-0x81,0x3f,0xdb,0x2e,0xbe,0xc6,0xd6,0x5f,0xfe,0x26,0xbe,0x6b,0x6f,0xd9,0xd7,0xc7,\r
-0x0a,0x78,0xd2,0xc9,0xc7,0xa3,0x8a,0x81,0xff,0x00,0x67,0xef,0x1c,0xa9,0xff,0x00,\r
-0x90,0x34,0x87,0xe8,0xc0,0xff,0x00,0x5a,0x7f,0xda,0x99,0x9c,0x77,0xa5,0xff,0x00,\r
-0x92,0xb0,0xfe,0xd2,0xcd,0x56,0xf4,0x7f,0x06,0x7d,0x42,0x3f,0x68,0x9f,0x87,0xcd,\r
-0xff,0x00,0x33,0x02,0x8f,0xad,0xb4,0xdf,0xfc,0x45,0x38,0x7e,0xd0,0x9f,0x0f,0xcf,\r
-0x4f,0x11,0x47,0xff,0x00,0x80,0xf2,0x8f,0xfd,0x92,0xbe,0x55,0x6f,0x81,0x3e,0x37,\r
-0x43,0xce,0x89,0x37,0xe1,0x51,0x3f,0xc1,0x4f,0x1a,0x27,0x5d,0x0e,0xe7,0x8f,0x6a,\r
-0x6f,0x38,0xcc,0x16,0xf4,0xbf,0xf2,0x59,0x07,0xf6,0xae,0x64,0xb7,0xa1,0xf8,0x3f,\r
-0xf3,0x3e,0xb2,0x1f,0x1f,0xfc,0x00,0xd8,0xff,0x00,0x8a,0x8e,0x1e,0x7d,0x62,0x93,\r
-0xff,0x00,0x89,0xa9,0xd3,0xe3,0xaf,0x80,0xdc,0x64,0x78,0x92,0xd4,0x7d,0x43,0x8f,\r
-0xe9,0x5f,0x1f,0xbf,0xc1,0xff,0x00,0x18,0xa0,0xe7,0x42,0xba,0xe7,0xfd,0x9a,0x85,\r
-0xbe,0x14,0xf8,0xb9,0x3a,0xe8,0x77,0x7f,0xf7,0xc5,0x2f,0xed,0xac,0x72,0xff,0x00,\r
-0x97,0x4b,0xee,0x62,0xfe,0xd8,0xc7,0xad,0xe8,0x7e,0x0c,0xfb,0x3d,0x3e,0x32,0xf8,\r
-0x21,0xc0,0xc7,0x89,0xb4,0xfe,0x7d,0x65,0xc5,0x48,0x9f,0x17,0x7c,0x14,0xf9,0xc7,\r
-0x89,0xf4,0xce,0x3d,0x6e,0x14,0x57,0xc4,0xef,0xf0,0xd3,0xc5,0x51,0x9f,0x9b,0x44,\r
-0xbd,0x1f,0xf6,0xc8,0xd4,0x0d,0xe0,0x0f,0x12,0x27,0x5d,0x1e,0xf0,0x7f,0xdb,0x23,\r
-0x47,0xf6,0xee,0x29,0x6f,0x49,0x7e,0x23,0xfe,0xdb,0xc6,0x2d,0xe8,0x7e,0x67,0xdc,\r
-0x63,0xe2,0xbf,0x83,0x4f,0x4f,0x13,0xe9,0x7f,0xf8,0x16,0x9f,0xe3,0x52,0x2f,0xc4,\r
-0xef,0x09,0x36,0x71,0xe2,0x5d,0x2f,0x8f,0xfa,0x7b,0x4f,0xf1,0xaf,0x85,0x1b,0xc1,\r
-0x5e,0x20,0x5e,0xba,0x55,0xd0,0xff,0x00,0xb6,0x46,0xa2,0x6f,0x0a,0x6b,0x69,0xd7,\r
-0x4c,0xba,0x1f,0xf6,0xc8,0xd1,0xfd,0xbf,0x89,0xeb,0x49,0x7e,0x22,0xfe,0xdd,0xc5,\r
-0x2d,0xe8,0x7e,0x67,0xde,0xc9,0xf1,0x07,0xc2,0xf2,0x80,0x57,0xc4,0x3a,0x59,0x07,\r
-0xa7,0xfa,0x64,0x7f,0xe3,0x56,0x13,0xc6,0x5a,0x04,0x9f,0x77,0x5a,0xd3,0x9b,0x1e,\r
-0x97,0x49,0xfe,0x35,0xf9,0xfa,0xde,0x1c,0xd5,0xd7,0xae,0x9f,0x72,0x3f,0xed,0x91,\r
-0xa8,0xce,0x89,0xa9,0x27,0x06,0xca,0xe0,0x7d,0x63,0x34,0xd7,0x10,0xd6,0x5b,0xd3,\r
-0x5f,0x8f,0xf9,0x0f,0xfb,0x7e,0xbf,0x5a,0x1f,0x99,0xfa,0x1a,0x9e,0x23,0xd2,0x64,\r
-0x50,0x57,0x54,0xb3,0x60,0x7a,0x62,0xe1,0x3f,0xc6,0x9f,0xfd,0xbb,0xa6,0x9e,0x9a,\r
-0x8d,0xa9,0xff,0x00,0xb6,0xeb,0xfe,0x35,0xf9,0xd8,0x74,0xbb,0xe1,0xd6,0xd6,0x61,\r
-0xff,0x00,0x00,0x34,0xc3,0x61,0x78,0xbd,0x60,0x90,0x7d,0x54,0xd3,0xff,0x00,0x58,\r
-0xe7,0xd6,0x97,0xe3,0xff,0x00,0x00,0x7f,0xeb,0x0d,0x45,0xff,0x00,0x2e,0x7f,0x1f,\r
-0xf8,0x07,0xe8,0xca,0x6a,0xf6,0x2e,0x32,0x2f,0x2d,0xd8,0x7a,0x89,0x54,0xff,0x00,\r
-0x5a,0x78,0xd4,0x6d,0x49,0xe2,0xe6,0x03,0xf4,0x90,0x7f,0x8d,0x7e,0x71,0x7d,0x9e,\r
-0xed,0x7f,0xe5,0x9c,0xa3,0xf0,0x34,0xb9,0xbb,0x43,0xff,0x00,0x2d,0x47,0xe7,0x47,\r
-0xfa,0xc7,0x2f,0xf9,0xf5,0xf8,0xff,0x00,0xc0,0x0f,0xf5,0x8a,0x56,0xd6,0x8b,0xfb,\r
-0xff,0x00,0xe0,0x1f,0xa4,0x0b,0x75,0x13,0x8c,0xac,0xa8,0xc3,0xd4,0x30,0x34,0xf1,\r
-0x20,0x3d,0xc1,0xfc,0x6b,0xf3,0x78,0x5e,0x5e,0xa7,0x49,0x66,0x51,0xec,0xcd,0x53,\r
-0x2e,0xb5,0xaa,0xc6,0xc0,0xad,0xf5,0xda,0x9f,0x51,0x33,0x83,0xfc,0xea,0xd7,0x11,\r
-0xf7,0xa5,0xf8,0xff,0x00,0xc0,0x29,0x71,0x1a,0xeb,0x49,0xfd,0xff,0x00,0xf0,0x0f,\r
-0xd1,0xb0,0xc3,0xd6,0x97,0x75,0x7e,0x74,0x0f,0x13,0x6b,0x4a,0x30,0x35,0x4b,0xe5,\r
-0xfa,0x5c,0x3f,0xf8,0xd2,0x8f,0x16,0x6b,0x8a,0x72,0x35,0x7d,0x40,0x1f,0xfa,0xfa,\r
-0x93,0xfc,0x6a,0xff,0x00,0xd6,0x38,0xff,0x00,0xcf,0xbf,0xc7,0xfe,0x00,0xff,0x00,\r
-0xd6,0x48,0x75,0xa4,0xfe,0xf3,0xf4,0x58,0x36,0x69,0x6b,0xf3,0xb1,0x7c,0x6b,0xe2,\r
-0x04,0x04,0x0d,0x6b,0x51,0x1f,0xf6,0xf5,0x27,0xf8,0xd5,0x88,0xfe,0x23,0x78,0xa2,\r
-0x10,0x36,0x78,0x83,0x54,0x5c,0x70,0x31,0x79,0x27,0xf8,0xd3,0x5c,0x45,0x0e,0xb4,\r
-0xdf,0xde,0x52,0xe2,0x4a,0x5d,0x69,0xb3,0xf4,0x32,0x8a,0xfc,0xf9,0x5f,0x8a,0x5e,\r
-0x2e,0x41,0x81,0xe2,0x4d,0x54,0x0f,0xfa,0xfb,0x73,0xfd,0x6a,0xc2,0x7c,0x62,0xf1,\r
-0xaa,0x63,0x1e,0x26,0xd4,0xb8,0xe9,0xfb,0xf2,0x6a,0xd7,0x11,0x52,0xeb,0x4d,0xfe,\r
-0x05,0x7f,0xac,0x94,0x3a,0xc1,0xfe,0x07,0xdf,0xd4,0x57,0xc0,0xa3,0xe3,0x57,0x8d,\r
-0xd7,0xfe,0x66,0x6d,0x43,0xf1,0x97,0xff,0x00,0xad,0x4f,0x4f,0x8d,0xfe,0x38,0x5c,\r
-0x7f,0xc5,0x4b,0x7c,0x71,0xea,0xe0,0xff,0x00,0x4a,0xaf,0xf5,0x8a,0x87,0xf2,0x3f,\r
-0xc0,0xaf,0xf5,0x8f,0x0d,0xfc,0x8f,0xf0,0x3e,0xf7,0xa2,0xbe,0x0c,0x5f,0x8e,0xde,\r
-0x3a,0x5e,0x9e,0x24,0xbc,0xfc,0x76,0x9f,0xe9,0x56,0x53,0xf6,0x84,0xf1,0xea,0x63,\r
-0xfe,0x2a,0x19,0x8e,0x3d,0x61,0x8c,0xff,0x00,0xec,0xb4,0xd7,0x11,0x61,0xdf,0xd8,\r
-0x97,0xe1,0xfe,0x65,0x2e,0x22,0xc2,0xf5,0x8c,0xbf,0x0f,0xf3,0x3e,0xea,0xa2,0xbe,\r
-0x1c,0x8b,0xf6,0x8e,0xf1,0xf4,0x44,0x9f,0xed,0xc2,0xd9,0xfe,0xf5,0xbc,0x47,0xff,\r
-0x00,0x65,0xab,0xf6,0x3f,0xb5,0x17,0x8e,0xed,0x26,0x57,0x96,0xee,0xd2,0xed,0x07,\r
-0x54,0x9a,0xd5,0x40,0x3f,0xf7,0xce,0x0d,0x68,0xb8,0x83,0x0a,0xf7,0x4f,0xf0,0xff,\r
-0x00,0x32,0xd7,0x10,0xe0,0xde,0xe9,0xaf,0x97,0xfc,0x13,0xed,0x4a,0x2b,0xe6,0x2f,\r
-0x0c,0xfe,0xd8,0x52,0x06,0x58,0xfc,0x41,0xa1,0x86,0x5e,0xf3,0xe9,0xcf,0x83,0xed,\r
-0xf2,0x39,0xff,0x00,0xd9,0xab,0xda,0xbc,0x15,0xf1,0x6f,0xc2,0xfe,0x3f,0x5d,0xba,\r
-0x46,0xa9,0x1c,0x97,0x40,0x65,0xad,0x26,0xfd,0xdc,0xcb,0xff,0x00,0x01,0x3d,0x7e,\r
-0xa3,0x22,0xbd,0x6c,0x3e,0x63,0x86,0xc4,0xe9,0x4e,0x7a,0xf6,0xd9,0x9e,0xa6,0x1f,\r
-0x32,0xc2,0xe2,0x9d,0xa9,0xcd,0x5f,0xb6,0xcc,0xec,0xe8,0xa6,0xa9,0xcd,0x3a,0xbd,\r
-0x13,0xd3,0x0a,0x28,0xa2,0x80,0x0a,0x28,0xa2,0x80,0x0a,0x28,0xa2,0x80,0x0a,0x42,\r
-0x69,0x6a,0xbd,0xe5,0xd4,0x56,0x56,0xd3,0x5c,0x4f,0x22,0xc5,0x04,0x48,0x5d,0xdd,\r
-0xce,0x02,0xa8,0x19,0x24,0x9a,0x4f,0x45,0x71,0x37,0x65,0x76,0x78,0x6f,0xed,0x35,\r
-0xf1,0x65,0xfc,0x33,0xa6,0x2f,0x86,0xb4,0xb9,0xb6,0x6a,0x57,0xd1,0xee,0xb8,0x95,\r
-0x1b,0x0d,0x0c,0x3d,0x30,0x3d,0x0b,0x72,0x3e,0x80,0xfa,0x8a,0xe4,0xbf,0x64,0xbf,\r
-0x08,0xfd,0xa7,0x55,0xbe,0xd7,0x66,0x43,0xb6,0xdd,0x7c,0xa8,0x8f,0x6d,0xc7,0xad,\r
-0x78,0x9f,0x8c,0xbc,0x4d,0x71,0xe3,0x9f,0x17,0xea,0x3a,0xbc,0xdb,0x8b,0xde,0x4e,\r
-0x5a,0x34,0x3d,0x51,0x33,0x84,0x5f,0xc0,0x00,0x2b,0xed,0x7f,0x82,0x9e,0x13,0x1e,\r
-0x11,0xf8,0x7d,0xa6,0xdb,0x15,0xdb,0x3c,0xa9,0xe7,0xcb,0x91,0x83,0xb9,0xb9,0xaf,\r
-0x89,0xc3,0x4e,0x59,0x96,0x64,0xea,0xbf,0x86,0x1b,0x7e,0x9f,0xe6,0x7c,0x56,0x0a,\r
-0xa4,0xb3,0x3c,0xc1,0xd7,0x97,0xc3,0x0d,0xbf,0x4f,0xf3,0x3b,0xb0,0x31,0x4b,0x45,\r
-0x15,0xf6,0xe7,0xdb,0x09,0x4b,0x45,0x14,0x00,0x53,0x43,0x83,0xd2,0x9d,0x5e,0x0f,\r
-0xf1,0xcb,0xf6,0xdc,0xf8,0x3b,0xfb,0x3e,0x5c,0xc9,0x61,0xe2,0xaf,0x16,0xc2,0xfa,\r
-0xda,0x02,0x7f,0xb1,0xf4,0xc4,0x6b,0xbb,0xa0,0x47,0x66,0x54,0xc8,0x8c,0x9e,0xde,\r
-0x61,0x5c,0xd0,0x07,0xba,0x89,0x01,0x6d,0xbc,0xe7,0xdc,0x1a,0x7d,0x7e,0x71,0xeb,\r
-0xdf,0xf0,0x5a,0xdf,0x00,0x5b,0xb3,0x0d,0x1b,0xe1,0xf7,0x89,0x2f,0x80,0xe8,0xd7,\r
-0xd3,0xdb,0xdb,0xe7,0xf0,0x56,0x92,0xbe,0x9f,0xfd,0x94,0x7f,0x6a,0xb8,0xbf,0x69,\r
-0x8f,0x85,0xfa,0xaf,0x8f,0x2e,0x7c,0x36,0xfe,0x0b,0xd0,0xac,0xae,0x64,0xb7,0x59,\r
-0xef,0xef,0x92,0x44,0x91,0x63,0x40,0xd2,0xca,0x5b,0x6a,0x85,0x45,0xce,0x32,0x7d,\r
-0x1b,0xa6,0x28,0x11,0xef,0xb4,0x57,0x17,0x6d,0xf1,0xb3,0xe1,0xe5,0xeb,0x2a,0xdb,\r
-0xf8,0xf3,0xc3,0x33,0xb3,0x1c,0x05,0x8b,0x58,0xb7,0x62,0x4f,0xe0,0xf5,0xd9,0x83,\r
-0x9e,0x94,0x0c,0x5a,0x2b,0x33,0x5f,0xf1,0x1e,0x9f,0xe1,0x7d,0x3d,0xaf,0xb5,0x3b,\r
-0x91,0x6b,0x6a,0xac,0x14,0xb9,0x52,0xdc,0x93,0x80,0x30,0x01,0x35,0x81,0x17,0xc5,\r
-0xff,0x00,0x07,0xcd,0xd3,0x5d,0x80,0x7f,0xbe,0xae,0xbf,0xcc,0x57,0x34,0xf1,0x34,\r
-0x69,0x4b,0x96,0xa4,0xd2,0x7e,0x6d,0x22,0x1c,0xe1,0x17,0x66,0xd2,0x3b,0x1a,0x31,\r
-0x5c,0xcc,0x7f,0x12,0xfc,0x2b,0x26,0x31,0xe2,0x0b,0x01,0x9f,0xef,0x4e,0xa3,0xf9,\r
-0xd4,0xc3,0xe2,0x0f,0x86,0x0f,0x4f,0x10,0xe9,0x9f,0xf8,0x16,0x9f,0xe3,0x49,0x62,\r
-0xb0,0xef,0x6a,0x8b,0xef,0x42,0xf6,0x90,0xfe,0x64,0x74,0x34,0x56,0x12,0xf8,0xe7,\r
-0xc3,0x8e,0x78,0xd7,0xf4,0xc3,0xff,0x00,0x6f,0x91,0xff,0x00,0x8d,0x58,0x8b,0xc5,\r
-0x3a,0x34,0xe3,0xf7,0x7a,0xb5,0x8c,0x9f,0xee,0xdc,0x21,0xfe,0xb5,0xa2,0xad,0x4d,\r
-0xed,0x25,0xf7,0x8f,0x9a,0x2f,0x66,0x6a,0xd1,0x55,0x13,0x55,0xb2,0x97,0x95,0xbb,\r
-0x81,0xbf,0xdd,0x95,0x4f,0xf5,0xa9,0x96,0x78,0xa4,0xfb,0xb2,0x2b,0x7d,0x1a,0xaf,\r
-0x9e,0x2f,0x66,0x55,0xd1,0x2d,0x14,0xdd,0xdd,0xc1,0xa5,0x07,0x35,0x43,0x16,0x8a,\r
-0x28,0xa6,0x01,0x45,0x21,0xe9,0x49,0x9a,0x00,0x75,0x26,0x29,0x32,0x3d,0x69,0x73,\r
-0x48,0x05,0xa4,0xc5,0x18,0xf7,0xa5,0xa6,0x02,0x62,0x96,0x8a,0x28,0x00,0xa2,0x8a,\r
-0x28,0x01,0x29,0x68,0xa2,0x80,0x12,0x8c,0x52,0xd1,0x40,0x05,0x14,0x51,0x40,0x05,\r
-0x26,0x29,0x68,0xa0,0x04,0xc5,0x18,0x1e,0x94,0xb4,0x50,0x02,0x6d,0x1e,0x82,0x93,\r
-0xcb,0x53,0xfc,0x23,0xf2,0xa0,0x92,0x3f,0x87,0x3f,0x8d,0x28,0xcf,0x71,0x8a,0x00,\r
-0x69,0x82,0x33,0xd6,0x35,0x3f,0x80,0xa6,0x9b,0x58,0x5b,0xac,0x48,0x7f,0xe0,0x22,\r
-0xa5,0xa2,0x95,0x97,0x61,0x59,0x10,0x1b,0x1b,0x73,0xd6,0x08,0xff,0x00,0xef,0x91,\r
-0x4d,0x3a,0x6d,0xa3,0x75,0xb6,0x84,0xfd,0x50,0x55,0x9a,0x29,0x72,0xc7,0xb0,0x59,\r
-0x14,0x9b,0x46,0xb0,0x6e,0xb6,0x56,0xe7,0xfe,0xd9,0x8f,0xf0,0xa8,0xdb,0xc3,0xba,\r
-0x5b,0x75,0xd3,0xed,0x8f,0xfd,0xb2,0x5f,0xf0,0xad,0x1a,0x29,0x7b,0x38,0x76,0x17,\r
-0x2a,0xec,0x64,0xb7,0x85,0x74,0x76,0xeb,0xa6,0x5a,0x9f,0xfb,0x64,0xbf,0xe1,0x51,\r
-0xb7,0x83,0x74,0x36,0xeb,0xa4,0xda,0x1f,0xac,0x23,0xfc,0x2b,0x6a,0x8a,0x9f,0x65,\r
-0x4f,0xf9,0x57,0xdc,0x2e,0x48,0x76,0x30,0x1f,0xc0,0x9e,0x1e,0x93,0xef,0x68,0xd6,\r
-0x67,0xfe,0xd8,0x8a,0x89,0xbe,0x1c,0xf8,0x65,0xba,0xe8,0x96,0x7f,0xf7,0xec,0x57,\r
-0x49,0x45,0x4b,0xc3,0xd2,0x7b,0xc1,0x7d,0xc4,0xfb,0x28,0x3f,0xb2,0x8e,0x55,0xbe,\r
-0x17,0xf8,0x55,0xfa,0xe8,0x96,0x9f,0xf7,0xc5,0x42,0xdf,0x09,0x3c,0x22,0xdd,0x74,\r
-0x3b,0x5f,0xfb,0xe6,0xba,0xfa,0x5a,0x8f,0xaa,0xd0,0xfe,0x45,0xf7,0x21,0x7b,0x1a,\r
-0x5f,0xca,0xbe,0xe3,0x89,0x7f,0x83,0x7e,0x0e,0x7e,0xba,0x1d,0xb7,0xe5,0x50,0x3f,\r
-0xc0,0xff,0x00,0x05,0x3f,0xfc,0xc0,0xe0,0x1f,0x4c,0xd7,0x7b,0x45,0x4b,0xc1,0xe1,\r
-0xdf,0xfc,0xbb,0x5f,0x72,0x27,0xea,0xf4,0x7f,0x91,0x7d,0xc7,0x9e,0x3f,0xc0,0x5f,\r
-0x04,0xbf,0xfc,0xc1,0xa3,0x1f,0x46,0x35,0x0b,0xfe,0xcf,0x7e,0x09,0x7f,0xf9,0x85,\r
-0x63,0xe8,0xe6,0xbd,0x23,0x34,0x64,0x7a,0xd4,0x7d,0x47,0x0b,0xff,0x00,0x3e,0xd7,\r
-0xdc,0x88,0xfa,0xa5,0x0f,0xe4,0x5f,0x71,0xe6,0x0f,0xfb,0x39,0x78,0x25,0xff,0x00,\r
-0xe6,0x1c,0xc3,0xe8,0xf5,0x0b,0xfe,0xcd,0x5e,0x09,0x7f,0xf9,0x72,0x90,0x7d,0x24,\r
-0xaf,0x55,0xa2,0xa7,0xfb,0x3f,0x08,0xff,0x00,0xe5,0xda,0xfb,0x89,0xfa,0x96,0x19,\r
-0xef,0x4d,0x7d,0xc7,0x92,0x3f,0xec,0xc5,0xe0,0xb6,0xe9,0x05,0xc2,0xff,0x00,0xdb,\r
-0x4a,0x81,0xff,0x00,0x65,0xcf,0x07,0xb7,0x41,0x72,0xbf,0xf6,0xd2,0xbd,0x8e,0x8a,\r
-0x9f,0xec,0xcc,0x1b,0xff,0x00,0x97,0x4b,0xee,0x27,0xea,0x18,0x57,0xff,0x00,0x2e,\r
-0xd7,0xdc,0x78,0xb3,0xfe,0xca,0xbe,0x12,0x6e,0x92,0x5d,0x2f,0xfc,0x08,0x54,0x2f,\r
-0xfb,0x27,0xf8,0x5d,0xba,0x5c,0xdd,0x0f,0xc4,0x57,0xb7,0xd1,0x51,0xfd,0x95,0x82,\r
-0xff,0x00,0x9f,0x48,0x97,0x97,0x61,0x1f,0xfc,0xbb,0x47,0x84,0xbf,0xec,0x95,0xe1,\r
-0xb6,0xe9,0x7d,0x76,0x3f,0x2a,0xa5,0x77,0xfb,0x24,0x69,0xd0,0x95,0x9f,0x4e,0xd6,\r
-0x6e,0xed,0xae,0xe3,0x21,0xe2,0x90,0x60,0x15,0x61,0xd0,0x82,0x39,0x06,0xbe,0x83,\r
-0xa4,0x3d,0x29,0x7f,0x64,0xe0,0xf7,0x54,0xed,0xf7,0x99,0xbc,0xaf,0x07,0x2f,0xf9,\r
-0x76,0x8f,0x01,0xf0,0x97,0xc6,0x3d,0x4f,0xe1,0xff,0x00,0x89,0xd3,0xc2,0x5e,0x3e,\r
-0xb9,0x59,0xa1,0x77,0x10,0xda,0x6b,0xa4,0x6d,0xcb,0x67,0x01,0x66,0xed,0xcf,0x1f,\r
-0x3f,0xe7,0xeb,0x5e,0xfa,0x8c,0x18,0x70,0x72,0x3d,0x6b,0xe3,0x1f,0xda,0x88,0xa5,\r
-0xee,0xbb,0x24,0x4c,0x01,0x05,0x88,0xc7,0xad,0x77,0x1f,0xb1,0xff,0x00,0xc6,0x49,\r
-0xbc,0x47,0x65,0x79,0xe0,0x6d,0x66,0xe9,0xa6,0xd5,0xf4,0xa8,0x84,0xd6,0x53,0x4a,\r
-0xd9,0x79,0xed,0x72,0x06,0x09,0xee,0x63,0x25,0x47,0xd1,0x97,0xd2,0xb9,0x70,0x18,\r
-0xde,0x6a,0xd3,0xc3,0x4d,0xdf,0x95,0xe8,0xcf,0x23,0x07,0x98,0xfb,0x2c,0x6b,0xcb,\r
-0xea,0xbb,0xaf,0xb2,0xdf,0xe4,0xff,0x00,0x43,0xe9,0x8a,0x29,0x9b,0xbd,0xff,0x00,\r
-0x5a,0x2b,0xe8,0x8f,0xaa,0xe6,0x43,0xe8,0xa2,0x8a,0x45,0x05,0x14,0x51,0x40,0x05,\r
-0x79,0x0f,0xed,0x3d,0xe2,0xdf,0xf8,0x46,0xfe,0x1a,0xdc,0x5a,0x45,0x26,0xcb,0xad,\r
-0x55,0xc5,0xa2,0x60,0xf3,0xb3,0xac,0x9f,0xf8,0xe8,0x23,0xfe,0x05,0x5e,0xb8,0x49,\r
-0xed,0x5f,0x1b,0x7e,0xd4,0xbe,0x30,0x3a,0xff,0x00,0xc4,0x4f,0xec,0xb8,0xdf,0x75,\r
-0xae,0x93,0x10,0x8b,0x00,0x82,0x0c,0xad,0x86,0x73,0xf8,0x0d,0xa3,0xea,0x0d,0x78,\r
-0xf9,0xb6,0x23,0xea,0xf8,0x59,0x35,0xbb,0xd1,0x7c,0xcf,0x13,0x38,0xc4,0xfd,0x5b,\r
-0x07,0x26,0xb7,0x96,0x8b,0xe6,0x72,0x5f,0x06,0x7c,0x26,0x7c,0x5d,0xe3,0xed,0x32,\r
-0xd3,0x6e,0xe8,0x52,0x41,0x2c,0xb9,0xfe,0xe8,0xe6,0xbe,0xf6,0x8d,0x04,0x68,0xa8,\r
-0xa3,0x0a,0xa3,0x00,0x0f,0x4a,0xf9,0xd3,0xf6,0x49,0xf0,0x8f,0xd9,0xf4,0xfb,0xfd,\r
-0x7a,0x68,0xfe,0x79,0x4f,0x93,0x13,0x1f,0x4e,0xf5,0xf4,0x60,0xae,0x3c,0x8b,0x0f,\r
-0xec,0xb0,0xde,0xd1,0xef,0x2d,0x7e,0x5d,0x0c,0x32,0x2c,0x37,0xb0,0xc2,0x29,0x3d,\r
-0xe5,0xa8,0xb4,0x51,0x45,0x7d,0x21,0xf4,0x41,0x48,0x4e,0x29,0x6b,0x95,0xf8,0xad,\r
-0xe3,0x88,0x3e,0x19,0xfc,0x32,0xf1,0x5f,0x8b,0x6e,0x81,0x68,0x34,0x4d,0x2e,0xe7,\r
-0x50,0x65,0x03,0x39,0xf2,0xa3,0x67,0xc7,0xe3,0x8a,0x00,0xfc,0xfb,0xff,0x00,0x82,\r
-0x96,0x7f,0xc1,0x41,0x75,0x2f,0x01,0x6a,0xd7,0xbf,0x09,0xbe,0x1b,0x6a,0x06,0xcf,\r
-0x59,0x8e,0x30,0x35,0xcd,0x72,0x03,0x87,0xb6,0xdc,0x33,0xf6,0x68,0x5b,0xb3,0xed,\r
-0x20,0xb3,0x8f,0xbb,0xb8,0x01,0xce,0xec,0x7c,0x27,0xf0,0x53,0xf6,0x29,0xf8,0xcd,\r
-0xfb,0x4a,0x59,0xcb,0xaf,0x78,0x6b,0xc3,0xb2,0x4d,0xa4,0xc9,0x21,0x27,0x5a,0xd5,\r
-0xee,0x45,0xbc,0x33,0xbe,0x4e,0xe2,0xae,0xe7,0x32,0x1c,0x83,0x92,0xa0,0xe0,0xf5,\r
-0x35,0xe5,0x9a,0x76,0xab,0x1f,0x8f,0xbe,0x29,0xda,0x6a,0x3e,0x2e,0xbf,0x2b,0x0e,\r
-0xb3,0xac,0xa4,0xfa,0xb5,0xfb,0xb6,0xd2,0xa9,0x2c,0xe0,0xcf,0x21,0x3d,0xb0,0x19,\r
-0x8f,0xb5,0x7f,0x40,0x9f,0x1c,0x3e,0x24,0xe8,0x3f,0xb3,0x97,0xec,0xbf,0xae,0xf8,\r
-0x9b,0x43,0x5b,0x5b,0x7d,0x2b,0x46,0xd1,0x44,0x7a,0x34,0x36,0xa5,0x44,0x4c,0xcc,\r
-0xa2,0x3b,0x61,0x1e,0x38,0x20,0xb3,0x27,0x4e,0xdc,0xd3,0x25,0x6a,0x7f,0x3e,0x1e,\r
-0x2f,0xf0,0x4e,0xa1,0xe0,0xef,0x1d,0x6a,0xbe,0x13,0x9d,0xa1,0xbe,0xd5,0x74,0xeb,\r
-0xe7,0xd3,0xa4,0xfb,0x03,0x99,0x63,0x92,0x64,0x7d,0x85,0x50,0xe0,0x6e,0xf9,0x81,\r
-0x03,0x8e,0x71,0x5f,0xbd,0xbe,0x1c,0xf8,0x6b,0xa7,0x7e,0xce,0x7f,0xb0,0xcd,0xef,\r
-0x86,0x2e,0x84,0x51,0xc7,0xa3,0x78,0x42,0xed,0xf5,0x07,0xc6,0x16,0x4b,0x86,0xb7,\r
-0x91,0xe7,0x27,0xeb,0x23,0x30,0xfc,0xab,0xf2,0x6b,0xfe,0x09,0xd5,0xf0,0x92,0x7f,\r
-0x8e,0x9f,0xb5,0xbf,0x87,0xae,0x75,0x24,0x6b,0xed,0x3f,0x45,0x95,0xfc,0x45,0xa9,\r
-0xcb,0x29,0xfb,0xcd,0x11,0x06,0x32,0x4f,0x72,0xd3,0xb4,0x59,0xf5,0x19,0xaf,0xb2,\r
-0xff,0x00,0xe0,0xac,0x1f,0xb6,0x06,0x8d,0xa5,0x78,0x12,0xe7,0xe0,0xdf,0x85,0xb5,\r
-0x38,0x6f,0xf5,0xfd,0x52,0x44,0xfe,0xde,0x6b,0x67,0x0e,0xb6,0x56,0xc8,0x43,0x08,\r
-0x19,0x81,0xe2,0x47,0x60,0x99,0x5e,0x48,0x50,0x72,0x06,0xe1,0x40,0x2d,0x35,0x3f,\r
-0x2c,0xfe,0x17,0x78,0x72,0xe3,0xc6,0x1f,0x12,0xfc,0x27,0xa0,0xd9,0x0c,0xdd,0xea,\r
-0x7a,0xb5,0xa5,0x9c,0x5c,0xe3,0xe6,0x92,0x64,0x51,0xfc,0xeb,0xfa,0x6e,0x8d,0x3c,\r
-0xb4,0x55,0xeb,0x80,0x06,0x6b,0xf1,0x1f,0xfe,0x09,0x3f,0xf0,0x0e,0xe3,0xe2,0x67,\r
-0xed,0x0b,0x17,0x8c,0xaf,0x2d,0x0b,0xf8,0x7b,0xc1,0xa9,0xf6,0xb6,0x92,0x45,0x3b,\r
-0x1e,0xf1,0x81,0x10,0x20,0x3e,0xaa,0x73,0x27,0xb6,0xc1,0xeb,0x5f,0xb7,0x2c,0xc1,\r
-0x14,0x92,0x70,0x00,0xcd,0x0c,0x16,0xc7,0x81,0xfe,0xd2,0x7e,0x22,0x12,0xdd,0x69,\r
-0x9a,0x24,0x6d,0x91,0x18,0x37,0x52,0x8f,0x73,0x95,0x4f,0xd3,0x77,0xe6,0x2b,0xc4,\r
-0xab,0x7b,0xc7,0x5e,0x20,0x3e,0x28,0xf1,0x6e,0xa7,0xa9,0x64,0x98,0xe5,0x98,0x88,\r
-0xb3,0xd9,0x07,0x0b,0xfa,0x01,0x58,0x35,0xf8,0x96,0x67,0x89,0xfa,0xde,0x2e,0x75,\r
-0x56,0xd7,0xb2,0xf4,0x5a,0x1f,0x29,0x88,0xa9,0xed,0x6a,0xb9,0x06,0x68,0xa2,0x8c,\r
-0xd7,0x98,0x73,0x85,0x14,0x51,0x48,0x00,0x71,0x4e,0x49,0x5e,0x33,0x95,0x76,0x52,\r
-0x3b,0x83,0x8a,0x6d,0x14,0xd3,0x6b,0x60,0xb9,0xb5,0xa6,0xf8,0xd7,0x5f,0xd2,0x0a,\r
-0xfd,0x93,0x58,0xbd,0x84,0x2f,0x45,0x13,0x31,0x5f,0xc8,0xf1,0x5e,0x89,0xe1,0x6f,\r
-0xda,0x2b,0x56,0xb0,0x91,0x22,0xd6,0xed,0xd3,0x51,0xb7,0xef,0x2c,0x2a,0x12,0x51,\r
-0xf8,0x7d,0xd3,0xfa,0x7d,0x6b,0xc8,0x68,0xaf,0x43,0x0f,0x98,0xe2,0xb0,0xb2,0xbd,\r
-0x2a,0x8f,0xf4,0xfb,0x8d,0xe1,0x5e,0xa5,0x37,0x78,0xc8,0xfb,0x57,0xc3,0x5e,0x28,\r
-0xd3,0xbc,0x59,0xa6,0xa5,0xf6,0x9b,0x72,0xb7,0x10,0x31,0xc1,0xec,0xc8,0xdd,0xd5,\r
-0x87,0x63,0x5a,0xd5,0xf2,0x47,0xc2,0x6f,0x18,0x4f,0xe1,0x2f,0x17,0xda,0x10,0xe7,\r
-0xec,0x57,0x6e,0xb0,0x5c,0xc7,0x9e,0x08,0x27,0x01,0xbe,0xaa,0x4e,0x7f,0x3f,0x5a,\r
-0xfa,0xd9,0x4e,0x46,0x6b,0xf5,0x3c,0xa7,0x31,0x59,0x8d,0x0e,0x76,0xad,0x25,0xa3,\r
-0x3e,0x8b,0x0d,0x5f,0xdb,0xc2,0xfd,0x50,0x37,0x00,0xd7,0xcd,0x1f,0x15,0x3e,0x26,\r
-0xeb,0x51,0x78,0xeb,0x51,0xb7,0xd2,0xf5,0x5b,0x9b,0x5b,0x4b,0x56,0x10,0x04,0x89,\r
-0xf0,0xa5,0x94,0x7c,0xc7,0x1f,0xef,0x64,0x7e,0x15,0xf4,0x4e,0xbb,0xaa,0xc7,0xa1,\r
-0xe8,0xd7,0xda,0x84,0xdc,0xc5,0x6b,0x0b,0xcc,0xc0,0x75,0x21,0x41,0x38,0xfd,0x2b,\r
-0xe2,0x8b,0xbb,0xa9,0x2f,0x6e,0xa6,0xb8,0x95,0xb7,0xcb,0x33,0xb4,0x8e,0xc7,0xbb,\r
-0x13,0x92,0x6b,0xc6,0xe2,0x5c,0x64,0xe8,0xd3,0xa7,0x4a,0x9c,0xac,0xdb,0xbe,0x9d,\r
-0x8e,0x6c,0x7d,0x57,0x08,0xa8,0xc5,0xd8,0xea,0x13,0xe2,0xc7,0x8b,0xa3,0xe9,0xae,\r
-0xdd,0x7e,0x3b,0x4f,0xf3,0x15,0x32,0x7c,0x64,0xf1,0x94,0x7d,0x35,0xb9,0x0f,0xfb,\r
-0xd1,0x46,0x7f,0xf6,0x5a,0xe3,0x28,0xaf,0x82,0x58,0xec,0x52,0xda,0xac,0xbe,0xf6,\r
-0x78,0x9e,0xda,0xa7,0xf3,0x3f,0xbc,0xef,0x13,0xe3,0x8f,0x8c,0xd3,0xfe,0x62,0xc1,\r
-0xbf,0xde,0xb7,0x8b,0xff,0x00,0x89,0xab,0x09,0xf1,0xef,0xc6,0x0b,0xd6,0xf6,0x06,\r
-0xfa,0xdb,0xaf,0xf8,0x57,0x9d,0xd1,0x5a,0x2c,0xcb,0x1a,0xb6,0xad,0x2f,0xbd,0x97,\r
-0xf5,0x8a,0xbf,0xcc,0xcf,0x4a,0x5f,0xda,0x0b,0xc5,0xca,0x79,0x96,0xd1,0xff,0x00,\r
-0xde,0xb7,0xff,0x00,0x03,0x53,0xa7,0xed,0x17,0xe2,0xa4,0xeb,0x16,0x9c,0xff,0x00,\r
-0x58,0x1b,0xff,0x00,0x8b,0xaf,0x2e,0xa2,0xb4,0x59,0xb6,0x39,0x6d,0x59,0xfd,0xe3,\r
-0x58,0x9a,0xcb,0xed,0x33,0xd6,0x23,0xfd,0xa4,0xbc,0x48,0xbf,0x7a,0xcb,0x4e,0x6f,\r
-0xfb,0x66,0xe3,0xff,0x00,0x67,0xab,0x09,0xfb,0x4b,0x6b,0x60,0x7c,0xda,0x5d,0x8b,\r
-0x1f,0x6d,0xe3,0xfa,0xd7,0x8f,0xd1,0x56,0xb3,0x9c,0x7a,0xff,0x00,0x97,0xac,0x7f,\r
-0x5a,0xaf,0xfc,0xc7,0xb3,0x27,0xed,0x33,0xaa,0x0f,0xbd,0xa2,0xda,0xb7,0xd2,0x56,\r
-0x1f,0xd2,0xa7,0x5f,0xda,0x6e,0xef,0xf8,0xb4,0x08,0x7f,0x0b,0xa3,0xff,0x00,0xc4,\r
-0xd7,0x89,0x51,0xfa,0xd6,0xab,0x3c,0xcc,0x3a,0x55,0xfc,0x17,0xf9,0x14,0xb1,0x95,\r
-0xff,0x00,0x98,0xfb,0x1b,0xe1,0xef,0x8b,0x26,0xf1,0xb7,0x86,0x61,0xd5,0xa5,0xb3,\r
-0x16,0x42,0x67,0x75,0x48,0xc3,0xee,0xc8,0x52,0x57,0x39,0xc0,0xee,0x0d,0x74,0xb5,\r
-0x89,0xe0,0xad,0x23,0xfb,0x03,0xc2,0x9a,0x56,0x9e,0x7e,0xf4,0x16,0xe8,0xaf,0xee,\r
-0xd8,0xcb,0x1f,0xcf,0x35,0xb4,0x6b,0xf5,0xac,0x3f,0x3f,0xb1,0x87,0xb5,0x77,0x95,\r
-0x95,0xfd,0x4f,0xa5,0x85,0xf9,0x17,0x36,0xe2,0xd2,0x13,0x8a,0xaf,0x7b,0x7f,0x6f,\r
-0xa7,0x5a,0x49,0x73,0x75,0x3c,0x76,0xf6,0xf1,0x8d,0xcf,0x2c,0xac,0x15,0x54,0x7a,\r
-0x92,0x6b,0xc7,0x3c,0x65,0xfb,0x45,0xdb,0xda,0xb3,0xdb,0x78,0x7a,0xdf,0xed,0x72,\r
-0x0e,0x3e,0xd9,0x70,0x08,0x8f,0xea,0xab,0xd4,0xfe,0x38,0xfc,0x6b,0x0c,0x5e,0x3b,\r
-0x0f,0x82,0x8f,0x35,0x69,0x5b,0xcb,0xaf,0xdc,0x4d,0x5a,0xd0,0xa4,0xaf,0x36,0x7b,\r
-0x51,0x70,0xa3,0x24,0xe0,0x7a,0x9a,0xe5,0xf5,0x8f,0x8a,0x3e,0x16,0xd0,0xb7,0x0b,\r
-0x9d,0x6a,0xd8,0xba,0x9c,0x18,0xe0,0x6f,0x39,0x81,0xf7,0x09,0x92,0x2b,0xe5,0xbf,\r
-0x10,0xf8,0xe3,0x5d,0xf1,0x4c,0x8c,0xda,0x96,0xa5,0x34,0xe8,0x4e,0x7c,0xa0,0xdb,\r
-0x63,0x1f,0x45,0x18,0x15,0x85,0xd2,0xbe,0x33,0x11,0xc5,0x2f,0x6c,0x3d,0x3f,0x9b,\r
-0xff,0x00,0x25,0xfe,0x67,0x95,0x3c,0xc7,0xf9,0x23,0xf7,0x9f,0x4b,0xdf,0xfe,0xd1,\r
-0x7e,0x19,0xb6,0x72,0xb0,0x45,0x7d,0x79,0xe8,0xd1,0xc4,0x15,0x7f,0xf1,0xe6,0x07,\r
-0xf4,0xac,0xb9,0xbf,0x69,0x9d,0x31,0x4f,0xee,0x74,0x6b,0xb7,0x1f,0xed,0xc8,0xab,\r
-0xfc,0xb3,0x5f,0x3e,0x51,0x5e,0x44,0xb8,0x8f,0x1f,0x2d,0x9a,0x5f,0x2f,0xf3,0x39,\r
-0x5e,0x3a,0xb3,0xea,0x7b,0xfa,0xfe,0xd3,0x76,0x64,0xfc,0xda,0x14,0xe0,0x7b,0x4e,\r
-0xa7,0xfa,0x55,0xb8,0xbf,0x69,0x6d,0x10,0xe3,0xcc,0xd2,0xf5,0x04,0xf5,0xda,0x23,\r
-0x6f,0xfd,0x98,0x57,0xce,0xb4,0x54,0xae,0x21,0xcc,0x17,0xda,0x4f,0xe4,0x84,0xb1,\r
-0xd5,0xfb,0x9f,0x53,0x58,0x7c,0x7b,0xf0,0x85,0xe8,0x4f,0x32,0xf2,0x6b,0x36,0x6f,\r
-0xe1,0x9e,0xdd,0xb8,0xfa,0x95,0x04,0x7e,0xb5,0xd8,0xe9,0x3e,0x25,0xd2,0xb5,0xe0,\r
-0x4e,0x9d,0xa9,0x5a,0xde,0xe0,0x64,0x88,0x25,0x56,0x23,0xea,0x07,0x4a,0xf8,0xa2,\r
-0x9d,0x14,0xaf,0x04,0x8a,0xf1,0xbb,0x46,0xeb,0xca,0xb2,0x1c,0x11,0xf4,0x22,0xbd,\r
-0x0a,0x3c,0x51,0x88,0x8b,0xfd,0xf4,0x13,0x5e,0x5a,0x3f,0xd4,0xde,0x19,0x8c,0xd7,\r
-0xc4,0xae,0x7d,0xcf,0x9c,0x9e,0xb4,0xb5,0xf2,0xcf,0x84,0xfe,0x39,0x78,0x8b,0xc3,\r
-0xae,0x91,0xdd,0x4d,0xfd,0xaf,0x68,0x3a,0xc7,0x72,0x7e,0x70,0x3d,0x9f,0xaf,0xe7,\r
-0x9a,0xf7,0xbf,0x04,0x7c,0x49,0xd1,0xfc,0x75,0x6e,0x4d,0x94,0xde,0x55,0xda,0x0c,\r
-0xc9,0x69,0x36,0x04,0x8b,0xee,0x3d,0x47,0xb8,0xaf,0xaf,0xc0,0xe7,0x18,0x5c,0x73,\r
-0xe5,0x83,0xb4,0xbb,0x3f,0xd0,0xf4,0xe8,0xe2,0xa9,0xd6,0xd1,0x3b,0x33,0xac,0xa2,\r
-0x90,0x1c,0x8a,0x5a,0xf7,0x0e,0xc0,0xa2,0x8a,0x28,0x00,0xa2,0x90,0x9c,0x57,0x3b,\r
-0xe2,0x9f,0x88,0x1a,0x1f,0x83,0x93,0x3a,0x9d,0xfc,0x71,0x4a,0x46,0x44,0x09,0xf3,\r
-0xc8,0xdf,0xf0,0x11,0xce,0x3d,0xcf,0x15,0x95,0x4a,0xb0,0xa5,0x1e,0x6a,0x92,0xb2,\r
-0xf3,0x26,0x52,0x51,0x57,0x93,0x3a,0x3a,0x4c,0xd7,0x84,0x6b,0xdf,0xb4,0xb3,0x1d,\r
-0xc9,0xa3,0xe9,0x20,0x0e,0xd2,0xde,0x3f,0x3f,0xf7,0xc2,0xff,0x00,0xf1,0x55,0xc3,\r
-0xea,0x7f,0x1b,0x7c,0x5f,0xa9,0x13,0xff,0x00,0x13,0x31,0x68,0xa7,0xf8,0x6d,0xa2,\r
-0x55,0xc7,0xe3,0x82,0x7f,0x5a,0xf9,0xca,0xfc,0x45,0x81,0xa5,0xa4,0x5b,0x97,0xa2,\r
-0xff,0x00,0x33,0x82,0x78,0xea,0x31,0xd1,0x6a,0x7d,0x5d,0x9f,0xca,0x8d,0xc3,0xd6,\r
-0xbe,0x30,0xba,0xf1,0xaf,0x88,0x2f,0x73,0xe7,0xeb,0x7a,0x84,0x80,0xf5,0x06,0xe5,\r
-0xf1,0xf9,0x66,0xb3,0x1e,0xfa,0xe6,0x43,0x96,0xb8,0x95,0x89,0xee,0xce,0x4d,0x79,\r
-0x92,0xe2,0xaa,0x6b,0xe1,0xa4,0xfe,0xff,0x00,0xf8,0x07,0x3b,0xcc,0xa3,0xd2,0x27,\r
-0xdc,0x04,0x2b,0x1f,0x9b,0x69,0xfa,0xd3,0x86,0xd0,0x30,0x00,0xfc,0x2b,0xe1,0xbf,\r
-0xb5,0xcf,0xff,0x00,0x3d,0xa4,0xff,0x00,0xbe,0x8d,0x58,0xb6,0xd7,0x35,0x2b,0x33,\r
-0x9b,0x7d,0x42,0xea,0x03,0xeb,0x1c,0xcc,0xbf,0xc8,0xd4,0xae,0x2a,0x87,0x5a,0x3f,\r
-0x8f,0xfc,0x01,0x7f,0x69,0x2e,0xb1,0xfc,0x4f,0xb6,0xb6,0xa9,0x3d,0x06,0x69,0xd9,\r
-0xe3,0x8a,0xf8,0xe6,0xd3,0xe2,0x37,0x8a,0x2c,0xbf,0xd5,0x6b,0xd7,0xff,0x00,0x47,\r
-0x9d,0x9c,0x7f,0xe3,0xd9,0xae,0x82,0xc3,0xe3,0xcf,0x8b,0xec,0x48,0xdf,0x75,0x05,\r
-0xea,0x8e,0xd3,0xc0,0xbf,0xcd,0x71,0x5d,0x74,0xf8,0x9f,0x0b,0x2f,0x8e,0x2d,0x7d,\r
-0xcc,0xda,0x39,0x85,0x37,0xba,0x68,0xfa,0xa2,0x90,0xf1,0x5e,0x27,0xe1,0x2f,0xda,\r
-0x22,0x6d,0x5f,0x53,0xb3,0xd3,0xef,0xb4,0x61,0xe6,0xdc,0xca,0x90,0xac,0x96,0xb2,\r
-0x7f,0x13,0x10,0x07,0xca,0xdf,0x5f,0x5a,0xf6,0xc1,0xc8,0x15,0xf4,0x78,0x4c,0x75,\r
-0x0c,0x74,0x5c,0xa8,0x4a,0xf6,0x3b,0xa9,0x56,0x85,0x65,0x78,0x30,0x56,0x0e,0xa0,\r
-0x8e,0x86,0x96,0x9a,0xab,0xb4,0x60,0x74,0xa7,0x57,0x79,0xb0,0x53,0x5c,0xe1,0x49,\r
-0xf4,0x14,0xea,0x8a,0xe9,0xfc,0xbb,0x69,0x5b,0xd1,0x09,0xfd,0x29,0x3d,0x80,0xf8,\r
-0x93,0xf6,0x80,0xb9,0xfb,0x47,0x8a,0xe4,0x5c,0xe7,0x04,0xd7,0x87,0xe8,0xfe,0x3c,\r
-0x97,0xe1,0x5f,0xc5,0x4f,0x09,0x78,0xaa,0x10,0x0a,0x5a,0x5f,0x24,0x57,0x0a,0x4e,\r
-0x03,0x41,0x27,0xee,0xe4,0x07,0xfe,0x02,0xc4,0x8f,0x70,0x3d,0x2b,0xd6,0xbe,0x33,\r
-0x5c,0x79,0xde,0x2d,0xb8,0x39,0xce,0x33,0x5f,0x2e,0x7c,0x77,0xba,0x30,0xe8,0x72,\r
-0xed,0x38,0x60,0xa4,0x8c,0x7a,0xd7,0xe7,0x18,0x29,0x37,0x8e,0x94,0x97,0x76,0x7e,\r
-0x39,0x8f,0xa9,0x25,0x9a,0x53,0x9c,0x77,0xe7,0x47,0xec,0x77,0xdb,0x61,0xff,0x00,\r
-0x9e,0xc9,0xf9,0xd1,0x5e,0x03,0xfd,0x91,0x7b,0xff,0x00,0x3f,0x72,0xff,0x00,0xdf,\r
-0x46,0x8a,0xfd,0x0f,0x9d,0x9f,0xaf,0x73,0x79,0x1f,0x44,0xd1,0x45,0x15,0xa9,0xa8,\r
-0x51,0x45,0x14,0x01,0x93,0xe2,0x9d,0x7a,0x1f,0x0b,0xf8,0x77,0x53,0xd5,0xae,0x48,\r
-0xf2,0x6c,0xed,0xde,0x76,0x1e,0xbb,0x41,0x38,0xfc,0x4f,0x15,0xf9,0xe8,0xf3,0x5d,\r
-0x78,0x97,0x5b,0x92,0x79,0x4b,0x4d,0x79,0x7d,0x39,0x76,0x3d,0x49,0x66,0x6c,0xff,\r
-0x00,0x5a,0xfa,0x97,0xf6,0xb9,0xf1,0x6b,0x69,0x9e,0x11,0xb1,0xd0,0xa0,0x90,0x2c,\r
-0xba,0x9c,0xdb,0xe5,0x51,0x8c,0xf9,0x51,0xf3,0xfa,0xb1,0x5f,0xc8,0xd7,0x8e,0x7e,\r
-0xce,0xde,0x11,0xff,0x00,0x84,0xa3,0xe2,0x15,0xa3,0xc8,0xbb,0xad,0xac,0xff,0x00,\r
-0x7e,0xfc,0x71,0xc7,0x41,0xf9,0xd7,0xc3,0xe7,0x33,0x78,0xac,0x54,0x30,0x90,0xfe,\r
-0x9b,0xff,0x00,0x80,0x7c,0x26,0x6f,0x27,0x8c,0xc7,0x53,0xc2,0x47,0x65,0xbf,0xab,\r
-0xff,0x00,0x80,0x7d,0x75,0xf0,0xeb,0xc3,0x51,0xf8,0x4f,0xc1,0xba,0x5e,0x9a,0x8b,\r
-0xb5,0xa2,0x84,0x17,0xf7,0x62,0x32,0x6b,0xa4,0x03,0x14,0x2f,0x02,0x96,0xbe,0xd2,\r
-0x9c,0x15,0x38,0x28,0x47,0x64,0x7d,0xc4,0x22,0xa1,0x15,0x15,0xb2,0x0a,0x28,0xa2,\r
-0xb4,0x2c,0x2b,0x88,0xf8,0xe1,0xe0,0x17,0xf8,0xa9,0xf0,0x77,0xc6,0xbe,0x0f,0x8e,\r
-0x5f,0x22,0x5d,0x73,0x48,0xba,0xb0,0x8e,0x53,0xfc,0x0f,0x24,0x4c,0xaa,0x7f,0x02,\r
-0x45,0x76,0xf4,0x84,0x66,0x80,0x3f,0x97,0xbf,0x12,0xf8,0x6f,0x53,0xf0,0x77,0x88,\r
-0x75,0x2d,0x0f,0x59,0xb3,0x97,0x4f,0xd5,0x74,0xeb,0x87,0xb5,0xba,0xb5,0x9d,0x70,\r
-0xf1,0x48,0xa4,0x86,0x52,0x3e,0xa2,0xb4,0xa7,0xf8,0x99,0xe2,0xdb,0x9f,0x06,0x0f,\r
-0x08,0x4d,0xe2,0x5d,0x56,0x6f,0x0b,0x09,0x56,0x71,0xa3,0x49,0x79,0x23,0x5a,0xac,\r
-0x8b,0x9d,0xac,0x23,0x27,0x68,0x23,0x27,0xa0,0xef,0x5f,0xbd,0xff,0x00,0xb4,0x67,\r
-0xec,0x2b,0xf0,0x9f,0xf6,0x99,0xb8,0x6d,0x4b,0xc4,0xba,0x3c,0xba,0x77,0x88,0xf6,\r
-0x04,0x1a,0xee,0x8f,0x20,0x82,0xe9,0x80,0x18,0x01,0xf8,0x29,0x26,0x07,0x03,0x7a,\r
-0x92,0x07,0x00,0x81,0x5f,0x2a,0x6a,0xbf,0xf0,0x44,0xcf,0x0c,0x49,0x76,0x0e,0x99,\r
-0xf1,0x3b,0x56,0xb6,0xb5,0xef,0x1d,0xde,0x9b,0x14,0xcf,0x8f,0xf7,0x95,0x90,0x7e,\r
-0x95,0x57,0x22,0xcf,0xa1,0xf9,0x77,0xe0,0xff,0x00,0x89,0x7e,0x2c,0xf8,0x7d,0x0e,\r
-0xa7,0x17,0x86,0x3c,0x45,0xa9,0x78,0x7d,0x75,0x38,0x84,0x17,0x9f,0xd9,0xb7,0x2f,\r
-0x03,0x4f,0x18,0x24,0x84,0x62,0xa4,0x12,0x32,0x4f,0x15,0xdb,0xfe,0xcf,0x3f,0xb3,\r
-0x4f,0x8e,0xff,0x00,0x6a,0x2f,0x1c,0x47,0xa3,0x78,0x5a,0xc6,0x49,0x63,0xf3,0x03,\r
-0x6a,0x1a,0xcd,0xc8,0x3f,0x66,0xb3,0x42,0x79,0x79,0x1f,0xb9,0xeb,0x85,0x19,0x66,\r
-0x3d,0x2b,0xf5,0x27,0xe1,0xef,0xfc,0x11,0xd7,0xe0,0xf7,0x86,0x2f,0xe1,0xbb,0xf1,\r
-0x1e,0xad,0xe2,0x0f,0x18,0x98,0xf9,0x36,0x97,0x17,0x0b,0x6b,0x6e,0xc7,0xdc,0x44,\r
-0xa1,0xff,0x00,0x0d,0xf5,0xf6,0xa7,0x82,0x3c,0x03,0xe1,0xcf,0x86,0xbe,0x1e,0xb6,\r
-0xd0,0x7c,0x2b,0xa2,0x58,0xf8,0x7f,0x47,0xb7,0x1f,0xbb,0xb3,0xd3,0xe0,0x58,0xa3,\r
-0x07,0xb9,0x20,0x0e,0x58,0xf7,0x63,0xc9,0xee,0x69,0x5c,0x12,0xee,0x71,0xdf,0xb3,\r
-0x97,0xec,0xfd,0xe1,0xbf,0xd9,0xab,0xe1,0x7e,0x9d,0xe0,0xcf,0x0d,0xc6,0x5a,0x38,\r
-0x7f,0x7b,0x77,0x7d,0x22,0x81,0x35,0xed,0xc3,0x01,0xbe,0x67,0x3e,0xa7,0x00,0x01,\r
-0xd8,0x00,0x07,0x02,0xb6,0x7e,0x30,0xf8,0x8c,0x78,0x6f,0xc0,0x7a,0x8c,0x8a,0xc1,\r
-0x6e,0x2e,0x57,0xec,0xb0,0xf3,0x83,0xb9,0xf8,0x24,0x7b,0x85,0xdc,0x7f,0x0a,0xed,\r
-0xeb,0xe7,0x8f,0xda,0x43,0xc4,0x5f,0x6b,0xd6,0x6c,0x34,0x68,0xdf,0x29,0x6b,0x19,\r
-0x9e,0x50,0x3a,0x6f,0x6e,0x07,0xe4,0x07,0xfe,0x3d,0x5e,0x2e,0x6f,0x89,0xfa,0xae,\r
-0x0e,0x73,0x5b,0xbd,0x17,0xab,0xd0,0xe7,0xc5,0x54,0xf6,0x74,0x9b,0x3c,0x6e,0x8a,\r
-0x28,0xaf,0xc6,0x0f,0x95,0x0a,0xf6,0xff,0x00,0xd9,0xcf,0xc2,0x90,0x5e,0xc5,0xaa,\r
-0xea,0xf7,0x76,0xf1,0x4e,0x99,0x16,0xd1,0x09,0x50,0x30,0xc8,0xf9,0x98,0xe0,0xfd,\r
-0x57,0xf5,0xaf,0x10,0xaf,0xb0,0xbe,0x1a,0x78,0x74,0xf8,0x63,0xc1,0x1a,0x4d,0x8b,\r
-0xa9,0x59,0xc4,0x5e,0x64,0xc0,0x8c,0x10,0xee,0x77,0x30,0xfc,0x09,0xc7,0xe1,0x5f,\r
-0x57,0xc3,0xb8,0x5f,0x6f,0x8b,0xf6,0x92,0x5a,0x45,0x7e,0x2f,0x44,0x7a,0x58,0x0a,\r
-0x7c,0xf5,0x79,0x9f,0x43,0x4e,0x4f,0x09,0xe8,0x93,0x0f,0xde,0x69,0x16,0x2f,0xf5,\r
-0xb6,0x43,0xfd,0x2b,0x36,0xf3,0xe1,0x87,0x85,0x2f,0x91,0x96,0x4d,0x02,0xc5,0x41,\r
-0xea,0x62,0x84,0x46,0x7f,0x35,0xc1,0xae,0x9c,0x0c,0x51,0x5f,0xa6,0xcb,0x0f,0x46,\r
-0x5f,0x14,0x13,0xf9,0x23,0xe8,0x1d,0x38,0x3d,0xd2,0x3c,0x33,0xe2,0x17,0xc0,0x1b,\r
-0x3b,0x6d,0x3a,0xe3,0x50,0xf0,0xf3,0xcb,0x1c,0x90,0xa1,0x76,0xb3,0x95,0xb7,0x87,\r
-0x03,0x93,0xb5,0x8f,0x39,0xfa,0x93,0x9f,0x6a,0xf0,0x8a,0xfb,0x2b,0xc7,0x7e,0x21,\r
-0x83,0xc3,0x3e,0x14,0xd4,0x6f,0xe6,0x20,0x6c,0x89,0x95,0x14,0xff,0x00,0x1b,0x91,\r
-0x85,0x1f,0x99,0xaf,0x8d,0x40,0xc0,0x02,0xbf,0x34,0xe2,0x2c,0x2e,0x1b,0x0d,0x5a,\r
-0x1e,0xc1,0x59,0xb5,0xaa,0x5f,0x81,0xe0,0x63,0xa9,0xc2,0x9c,0xd7,0x26,0x81,0x45,\r
-0x14,0x57,0xc9,0x1e,0x61,0x6f,0x49,0xb5,0x7b,0xed,0x56,0xce,0xde,0x21,0x99,0x25,\r
-0x99,0x23,0x5c,0x7a,0x96,0x00,0x7f,0x3a,0xfb,0x79,0x38,0x50,0x2b,0xe5,0xdf,0x81,\r
-0x3e,0x13,0x6f,0x10,0x78,0xce,0x2b,0xc9,0x13,0x75,0xa6,0x9a,0x3c,0xf7,0x24,0x70,\r
-0x64,0xe8,0x83,0xeb,0x9f,0x9b,0xfe,0x03,0x5f,0x51,0x81,0x5f,0xa5,0xf0,0xc5,0x09,\r
-0x53,0xc3,0xce,0xab,0xfb,0x4f,0x4f,0x91,0xef,0xe5,0xd0,0x71,0x83,0x93,0xea,0x61,\r
-0x78,0xdb,0xc3,0x4f,0xe2,0xff,0x00,0x0e,0x5d,0xe9,0x2b,0x78,0xf6,0x22,0xe3,0x68,\r
-0x69,0x91,0x37,0x10,0x03,0x02,0x46,0x32,0x3a,0xe3,0x15,0xe4,0xf2,0x7e,0xcc,0x63,\r
-0xf8,0x3c,0x40,0x7f,0xe0,0x56,0x9f,0xfd,0x9d,0x7b,0xb5,0x26,0x2b,0xe8,0x71,0x59,\r
-0x6e,0x17,0x19,0x25,0x3a,0xf0,0xbb,0xf5,0x67,0x75,0x4c,0x3d,0x3a,0xae,0xf3,0x57,\r
-0x3c,0x09,0xff,0x00,0x66,0x4b,0xaf,0xe0,0xd7,0xa1,0x3f,0xef,0x5b,0x11,0xff,0x00,\r
-0xb3,0x55,0x77,0xfd,0x99,0xf5,0x31,0xf7,0x35,0xab,0x46,0xfa,0xc4,0xc2,0xbe,0x85,\r
-0xc5,0x52,0xd6,0x35,0x38,0xb4,0x7d,0x2a,0xf2,0xfa,0x63,0x88,0xad,0xa2,0x79,0x58,\r
-0xfb,0x28,0x26,0xbc,0xe9,0xe4,0x39,0x72,0x4d,0xb8,0x5b,0xe6,0xff,0x00,0xcc,0xc1,\r
-0xe0,0xa8,0x2d,0x6c,0x7c,0x65,0xe2,0x0d,0x20,0xe8,0x1a,0xdd,0xee,0x9a,0xd7,0x11,\r
-0xdc,0xbd,0xac,0x86,0x26,0x92,0x20,0x42,0x96,0x1d,0x40,0xcf,0xa1,0xc8,0xfc,0x2b,\r
-0x3e,0xa6,0xbc,0xba,0x96,0xfe,0xee,0x6b,0x99,0xdb,0x7c,0xf3,0x3b,0x49,0x23,0x7a,\r
-0xb1,0x39,0x27,0xf3,0x35,0x0d,0x7e,0x51,0x53,0x95,0xcd,0xb8,0x2d,0x2f,0xa1,0xf3,\r
-0x4e,0xd7,0x76,0x0a,0x28,0xad,0x2f,0x0d,0xe9,0x2d,0xaf,0x78,0x83,0x4d,0xd3,0xd4,\r
-0x13,0xf6,0x9b,0x84,0x8c,0xe3,0xb2,0x93,0xc9,0xfc,0xb3,0x4a,0x10,0x75,0x24,0xa0,\r
-0xb7,0x6e,0xc1,0x15,0x76,0x91,0xd2,0xda,0xfc,0x17,0xf1,0x7d,0xe5,0xa4,0x37,0x30,\r
-0xe9,0x41,0xe2,0x99,0x04,0x88,0x7c,0xf8,0xc1,0xc1,0x19,0x19,0x05,0xb8,0xa4,0x93,\r
-0xe0,0xb7,0x8c,0xe3,0xeb,0xa2,0x39,0xff,0x00,0x76,0x68,0x8f,0xfe,0xcd,0x5f,0x59,\r
-0x43,0x1a,0xc5,0x12,0x22,0x8d,0xaa,0xa0,0x00,0x07,0x61,0x4e,0xc7,0xbd,0x7e,0x99,\r
-0xfe,0xac,0x61,0x1a,0x5e,0xf4,0xaf,0xea,0xbf,0xc8,0xf7,0xff,0x00,0xb3,0xa9,0xf7,\r
-0x67,0xc8,0x12,0x7c,0x2a,0xf1,0x6c,0x47,0xe6,0xd0,0x6e,0xcf,0xfb,0xaa,0x0f,0xf2,\r
-0x35,0xa1,0xe1,0x2f,0x86,0x1e,0x20,0x9b,0xc5,0x3a,0x52,0x5e,0xe8,0xb7,0x50,0x5a,\r
-0x7d,0xa5,0x1a,0x67,0x9a,0x22,0x10,0x20,0x39,0x6c,0x9f,0x70,0x31,0x5f,0x57,0x8a,\r
-0x31,0x44,0x38,0x67,0x0d,0x09,0xa9,0x29,0xbd,0x3d,0x06,0xb2,0xfa,0x69,0xde,0xec,\r
-0x07,0x02,0xb1,0x7c,0x59,0xe2,0xed,0x3f,0xc1,0xba,0x3c,0x9a,0x86,0xa1,0x2e,0xc8,\r
-0xc7,0xca,0x91,0xaf,0xdf,0x95,0xbb,0x2a,0x8e,0xe7,0xf9,0x75,0x35,0x7f,0x56,0xd5,\r
-0x6d,0xb4,0x4d,0x36,0xe6,0xfa,0xf2,0x51,0x0d,0xb4,0x08,0x64,0x91,0xcf,0x60,0x3f,\r
-0xcf,0x4a,0xf9,0x1b,0xe2,0x07,0x8e,0x6e,0xfc,0x77,0xae,0xbd,0xe4,0xe5,0xa3,0xb6,\r
-0x8c,0x95,0xb6,0xb7,0xcf,0x11,0x27,0xf8,0x9e,0xe7,0xfa,0x62,0xbd,0x1c,0xdb,0x34,\r
-0x8e,0x5d,0x4a,0xd1,0xd6,0x6f,0x65,0xfa,0xb3,0x7c,0x4e,0x21,0x50,0x8e,0x9b,0xb2,\r
-0x6f,0x1e,0x7c,0x48,0xd5,0x3c,0x79,0x78,0x5a,0xe5,0xcd,0xbd,0x8a,0x1c,0xc5,0x67,\r
-0x1b,0x1d,0x8b,0xe8,0x4f,0xf7,0x9b,0xdc,0xfe,0x18,0xae,0x4e,0x8a,0x2b,0xf2,0x5a,\r
-0xd5,0xaa,0x62,0x26,0xea,0x55,0x77,0x6c,0xf9,0x99,0x4e,0x53,0x7c,0xd2,0x7a,0x85,\r
-0x14,0x57,0x5d,0xe0,0x0f,0x86,0x9a,0xa7,0x8f,0xae,0x8f,0xd9,0x80,0xb7,0xb1,0x8d,\r
-0xb1,0x2d,0xe4,0x83,0xe5,0x1f,0xec,0x81,0xfc,0x4d,0xed,0xf9,0xd3,0xa3,0x46,0xa6,\r
-0x22,0x6a,0x9d,0x25,0x76,0xc7,0x08,0x4a,0xa4,0xb9,0x62,0xae,0xce,0x46,0xa7,0xb7,\r
-0xb1,0xb9,0xbc,0xff,0x00,0x51,0x6f,0x2c,0xf8,0xeb,0xe5,0xa1,0x6f,0xe5,0x5f,0x55,\r
-0xf8,0x5f,0xe0,0xe7,0x86,0x7c,0x35,0x12,0x11,0x60,0x97,0xf7,0x23,0x19,0x9e,0xf0,\r
-0x09,0x0e,0x7d,0x40,0x3f,0x28,0xfc,0x05,0x76,0xc9,0x0a,0x46,0x00,0x55,0x0a,0x07,\r
-0x18,0x03,0x02,0xbe,0xce,0x87,0x0b,0x54,0x94,0x6f,0x5a,0xa2,0x4f,0xb2,0x57,0xfc,\r
-0x74,0x3d,0x58,0x65,0xd2,0x7f,0x1c,0xac,0x7c,0x3f,0x71,0xa7,0x5d,0xda,0x0c,0xcf,\r
-0x6b,0x34,0x23,0xd6,0x48,0xca,0xff,0x00,0x31,0x55,0xeb,0xee,0x96,0x8d,0x5d,0x48,\r
-0x60,0x08,0x3d,0x8d,0x71,0xde,0x29,0xf8,0x4d,0xe1,0xcf,0x15,0x42,0xfe,0x6d,0x8a,\r
-0x59,0xdd,0x31,0x2c,0x2e,0xad,0x00,0x8d,0xf7,0x7a,0x9c,0x70,0xdf,0x88,0x34,0xeb,\r
-0xf0,0xb5,0x48,0xc6,0xf4,0x6a,0x5d,0xf6,0x6a,0xc1,0x3c,0xb9,0xa5,0xee,0x4a,0xe7,\r
-0xc8,0xf4,0x57,0x4b,0xe3,0xbf,0x02,0x5f,0xf8,0x0f,0x56,0xfb,0x25,0xd8,0xf3,0x61,\r
-0x93,0x2d,0x05,0xca,0x8c,0x2c,0x8b,0xfd,0x08,0xee,0x3d,0xeb,0x9a,0xaf,0x89,0xab,\r
-0x4a,0x74,0x26,0xe9,0xd4,0x56,0x68,0xf2,0x65,0x17,0x07,0xcb,0x2d,0xc2,0xac,0x69,\r
-0xfa,0x85,0xce,0x95,0x7b,0x0d,0xdd,0x9c,0xef,0x6d,0x73,0x0b,0x6e,0x8e,0x58,0xdb,\r
-0x05,0x4d,0x57,0xa2,0xb3,0x4d,0xc5,0xa7,0x1d,0x1a,0x25,0x3b,0x6a,0x8f,0xaa,0xfe,\r
-0x13,0xfc,0x4d,0x8f,0xc7,0x9a,0x61,0x86,0xe3,0x6c,0x5a,0xb5,0xb2,0x8f,0x3a,0x31,\r
-0xc0,0x91,0x7f,0xbe,0xbe,0xde,0xa3,0xb1,0xfa,0x8a,0xef,0xc5,0x7c,0x59,0xe1,0x3f,\r
-0x12,0xdc,0x78,0x47,0xc4,0x16,0x7a,0xad,0xb1,0x25,0xe0,0x6f,0x99,0x33,0xfe,0xb1,\r
-0x0f,0xde,0x53,0xf5,0x19,0xaf,0xb2,0xf4,0xeb,0xd8,0x75,0x2b,0x0b,0x7b,0xbb,0x77,\r
-0x12,0x41,0x3c,0x6b,0x24,0x6c,0x3a,0x15,0x23,0x20,0xd7,0xeb,0x39,0x16,0x64,0xf1,\r
-0xd4,0x5c,0x2a,0x3f,0x7e,0x3b,0xf9,0xae,0x8c,0xfa,0x5c,0x1d,0x77,0x5a,0x16,0x96,\r
-0xe8,0xb3,0x48,0x4e,0xd1,0x93,0x41,0xaf,0x29,0xf8,0xf9,0xe3,0x99,0x3c,0x3f,0xa2,\r
-0x45,0xa4,0xd9,0xc8,0x52,0xf3,0x50,0x07,0x7b,0x29,0xe5,0x22,0x1d,0x7f,0x3e,0x9f,\r
-0x4c,0xd7,0xb5,0x8b,0xc4,0xc3,0x07,0x46,0x55,0xa7,0xb2,0x3a,0xea,0xd4,0x54,0xa0,\r
-0xe6,0xfa,0x1c,0xff,0x00,0xc5,0x1f,0x8e,0xb2,0x2c,0xb3,0x69,0x5e,0x1b,0x94,0x2e,\r
-0xdc,0xa4,0xba,0x82,0xf3,0xcf,0x71,0x1f,0xff,0x00,0x15,0xf9,0x7a,0xd7,0x87,0x4f,\r
-0x3c,0xb7,0x33,0x3c,0xb3,0x48,0xf2,0xca,0xec,0x59,0x9d,0xd8,0xb3,0x31,0x3d,0x49,\r
-0x26,0x99,0x45,0x7e,0x39,0x8d,0xc7,0xd7,0xc7,0xd4,0xe7,0xaa,0xfd,0x17,0x44,0x7c,\r
-0xb5,0x5a,0xd3,0xac,0xef,0x20,0xa2,0x8a,0x2b,0xce,0x30,0x0a,0x2b,0xba,0xf0,0xbf,\r
-0xc1,0x8f,0x13,0x78,0xa2,0x14,0xb8,0x4b,0x64,0xb0,0xb5,0x7e,0x56,0x5b,0xc6,0x29,\r
-0xb8,0x7a,0x85,0x00,0x9f,0xd2,0xbb,0x28,0x3f,0x66,0x5b,0xb6,0x51,0xe7,0xeb,0xd1,\r
-0x21,0xee,0x23,0xb6,0x2d,0xfa,0x96,0x15,0xeb,0xd1,0xca,0x31,0xd5,0xd7,0x34,0x29,\r
-0xbb,0x79,0xe9,0xf9,0x9d,0x31,0xc3,0x56,0x9a,0xba,0x89,0xe2,0x74,0x57,0xb9,0x37,\r
-0xec,0xc6,0xf8,0xf9,0x7c,0x42,0x3f,0x1b,0x4f,0xfe,0xce,0xaa,0x5c,0x7e,0xcc,0xfa,\r
-0x8a,0xa9,0xf2,0x35,0xab,0x59,0x0f,0x61,0x24,0x2c,0x9f,0xc8,0x9a,0xdd,0xe4,0x59,\r
-0x82,0xff,0x00,0x97,0x7f,0x8a,0xff,0x00,0x32,0xfe,0xa7,0x5d,0x7d,0x93,0xc6,0x28,\r
-0xaf,0x47,0xd4,0xbe,0x01,0x78,0xb2,0xc4,0x33,0x43,0x05,0xb5,0xf2,0x8f,0xf9,0xe1,\r
-0x38,0xcf,0xe4,0xc0,0x57,0x15,0xac,0x78,0x6b,0x56,0xf0,0xfb,0xed,0xd4,0xb4,0xdb,\r
-0x9b,0x2e,0x70,0x1a,0x68,0xc8,0x53,0xf4,0x3d,0x0d,0x79,0xd5,0xb0,0x58,0x9c,0x3e,\r
-0xb5,0x69,0xb5,0xf2,0x30,0x95,0x2a,0x90,0xf8,0xa3,0x63,0xac,0xf8,0x1d,0xa4,0x0d,\r
-0x57,0xe2,0x25,0x83,0x32,0x6e,0x8e,0xd5,0x5e,0xe1,0xbd,0xb0,0x30,0xa7,0xfe,0xfa,\r
-0x65,0xaf,0xab,0x07,0x4a,0xf0,0x8f,0xd9,0x9f,0x48,0x05,0xb5,0x9d,0x51,0x97,0xfb,\r
-0x96,0xc8,0x7f,0xf1,0xe6,0xff,0x00,0xd9,0x6b,0xde,0x2b,0xf4,0xce,0x1d,0xa3,0xec,\r
-0xb0,0x2a,0x5f,0xcc,0xdb,0xfd,0x3f,0x43,0xe8,0x30,0x30,0xe5,0xa3,0x7e,0xe1,0x45,\r
-0x14,0x57,0xd3,0x9e,0x80,0x55,0x2d,0x66,0x4f,0x2b,0x4a,0xbb,0x6f,0x48,0xcd,0x5d,\r
-0xac,0x7f,0x16,0xcb,0xe4,0x78,0x7a,0xf9,0xff,0x00,0xe9,0x99,0xac,0xea,0x3b,0x41,\r
-0xb2,0x64,0xed,0x16,0xcf,0x83,0x7e,0x27,0xcf,0xe7,0x78,0xa6,0xf4,0x83,0x9c,0x12,\r
-0x3f,0x5a,0xf9,0xc3,0xe2,0xbc,0x5f,0xda,0x1a,0xa6,0x95,0x65,0xb7,0x79,0xb8,0xbd,\r
-0x82,0x1d,0x9d,0x77,0x6e,0x91,0x57,0x1f,0xad,0x7d,0x01,0xe3,0xa9,0xbc,0xdd,0x7a,\r
-0xf5,0xb3,0x9f,0x9c,0x8a,0xf1,0x3b,0xa8,0x3f,0xb4,0xfe,0x36,0xfc,0x3b,0xb2,0xed,\r
-0x37,0x88,0xf4,0xe4,0xfa,0x8f,0xb4,0xc7,0xfe,0x15,0xf9,0xde,0x54,0xb9,0xb1,0x2d,\r
-0xf9,0xfe,0xa7,0xe3,0x33,0x5e,0xd7,0x36,0xa4,0xbf,0xbc,0x7e,0xb6,0xff,0x00,0x61,\r
-0x5a,0xff,0x00,0xcf,0xba,0xfe,0x54,0x56,0xad,0x15,0xfa,0x2f,0x2a,0x3f,0x66,0xb2,\r
-0x1f,0x45,0x14,0x55,0x94,0x14,0xd2,0x69,0xd5,0xc8,0xfc,0x55,0xf1,0x6f,0xfc,0x21,\r
-0x1e,0x01,0xd6,0xb5,0x75,0x60,0xb3,0xc3,0x09,0x48,0x33,0x8f,0xf5,0xad,0xf2,0xa7,\r
-0x07,0xaf,0x24,0x1c,0x7b,0x56,0x75,0x26,0xa9,0xc1,0xce,0x5b,0x23,0x3a,0x93,0x54,\r
-0xa0,0xe7,0x2d,0x96,0xa7,0xc8,0x5f,0x1f,0xbc,0x5f,0xff,0x00,0x09,0x8f,0xc4,0xfd,\r
-0x4e,0x48,0xa4,0x2f,0x69,0x64,0x45,0x94,0x18,0x24,0x8c,0x26,0x77,0x11,0xf5,0x62,\r
-0xdf,0xa5,0x7b,0xc7,0xec,0xaf,0xe1,0x1f,0xec,0x7f,0x08,0x4d,0xab,0x4a,0x98,0x9a,\r
-0xf9,0xfe,0x52,0x47,0x3b,0x05,0x7c,0xa9,0xa0,0x69,0x73,0xf8,0x83,0x5d,0xb5,0xb3,\r
-0x8c,0x19,0x66,0xb9,0x98,0x2f,0xa9,0x24,0x9e,0x4d,0x7e,0x85,0x78,0x67,0x45,0x8b,\r
-0xc3,0xfa,0x0d,0x8e,0x9f,0x12,0x85,0x4b,0x78,0x95,0x30,0x3d,0x40,0xe6,0xbe,0x27,\r
-0x28,0x83,0xc5,0xe3,0x27,0x8a,0x9f,0x4f,0xcd,0xff,0x00,0xc0,0x3e,0x27,0x23,0x84,\r
-0xb1,0x58,0x9a,0x98,0xc9,0xff,0x00,0x57,0x34,0xc5,0x2d,0x14,0x57,0xdd,0x1f,0x74,\r
-0x14,0x51,0x45,0x00,0x32,0x49,0x16,0x18,0xd9,0xdd,0x82,0x22,0x82,0x59,0x98,0xe0,\r
-0x01,0xea,0x6b,0xe0,0x7f,0xda,0x6b,0xfe,0x0a,0xd3,0xe0,0xaf,0x85,0x9a,0x95,0xe7,\r
-0x87,0xbe,0x1e,0x69,0xc9,0xe3,0xcd,0x72,0xdd,0x8c,0x73,0x5f,0xb4,0xa6,0x3d,0x36,\r
-0x17,0x07,0x95,0x0e,0x3e,0x69,0x88,0xff,0x00,0x67,0x0b,0xfe,0xd7,0x5a,0xe2,0xbf,\r
-0xe0,0xad,0x3f,0xb5,0xed,0xe7,0x84,0xed,0x62,0xf8,0x37,0xe1,0x3b,0xf6,0xb6,0xbe,\r
-0xd4,0x2d,0xc5,0xc7,0x88,0x6e,0xa0,0x7c,0x3c,0x76,0xef,0xfe,0xae,0xd8,0x10,0x78,\r
-0x2e,0x3e,0x66,0xff,0x00,0x64,0xa8,0xe8,0xc6,0xbe,0x5a,0xfd,0x8a,0x7f,0xe0,0x9d,\r
-0x9a,0xff,0x00,0xed,0x53,0xa7,0xc9,0xe2,0x9d,0x5f,0x55,0x3e,0x15,0xf0,0x3c,0x53,\r
-0x18,0x12,0xed,0x21,0xf3,0x2e,0x6f,0x5d,0x71,0xb9,0x61,0x52,0x40,0x0a,0xbd,0x0b,\r
-0xb6,0x46,0x78,0x00,0xe0,0xe1,0x92,0xfc,0x8c,0xef,0x1a,0xff,0x00,0xc1,0x51,0x7f,\r
-0x68,0x5f,0x17,0xcd,0x37,0x91,0xe2,0xeb,0x7f,0x0e,0xdb,0x3b,0x16,0x5b,0x7d,0x1b,\r
-0x4f,0x86,0x30,0x83,0xb0,0x0e,0xea,0xcf,0xf9,0xb5,0x7d,0x1d,0xff,0x00,0x04,0xc4,\r
-0xf8,0xc5,0xf1,0xb7,0xf6,0x81,0xf8,0xe3,0x7d,0x71,0xe2,0x9f,0x88,0x1a,0xe6,0xad,\r
-0xe0,0xff,0x00,0x0f,0xd8,0xbd,0xd5,0xe5,0xb5,0xc3,0x29,0x86,0x79,0xe4,0xcc,0x70,\r
-0xc4,0xc7,0x6e,0x47,0x57,0x93,0x03,0xfe,0x79,0x57,0xc9,0xbf,0xb7,0x6f,0xc0,0x4f,\r
-0x01,0xfe,0xcd,0x7f,0x18,0x6d,0xbc,0x0b,0xe0,0x8d,0x57,0x58,0xd5,0xde,0xd7,0x4f,\r
-0x8e,0xe3,0x53,0x9f,0x57,0x9e,0x29,0x19,0x27,0x90,0x96,0x58,0xc0,0x8e,0x34,0x0b,\r
-0x88,0xf6,0x31,0xce,0x7f,0xd6,0x0e,0x98,0xaf,0xd3,0xef,0xf8,0x25,0x5f,0xc1,0x81,\r
-0xf0,0xbf,0xf6,0x5f,0xb1,0xd7,0x2e,0xad,0xfc,0xad,0x5f,0xc5,0xf3,0x9d,0x56,0x56,\r
-0x3f,0x7b,0xec,0xff,0x00,0x72,0xdd,0x7d,0x86,0xd0,0x5b,0xfe,0xda,0x50,0x08,0x8f,\r
-0xe3,0x97,0xfc,0x15,0x17,0xc0,0x9f,0x00,0x7e,0x2c,0xeb,0xfe,0x01,0xd7,0xfc,0x21,\r
-0xe2,0x5b,0xbd,0x43,0x48,0x92,0x34,0x92,0xea,0xc4,0x5b,0xb4,0x32,0x07,0x89,0x24,\r
-0x56,0x5d,0xd2,0x29,0xe8,0xe3,0xb7,0x50,0x6b,0xe8,0x3f,0xd9,0xdb,0xe3,0xe6,0x87,\r
-0xfb,0x4a,0xfc,0x30,0xb3,0xf1,0xc7,0x87,0x6c,0xef,0xac,0x34,0xcb,0x99,0xe5,0xb7,\r
-0x58,0x35,0x15,0x45,0x98,0x34,0x6d,0xb5,0xb2,0x15,0x98,0x63,0x3d,0x39,0xaf,0xc2,\r
-0xdf,0xdb,0xb3,0xc7,0x76,0x9f,0x11,0xbf,0x6b,0x6f,0x89,0x5a,0xcd,0x84,0xbe,0x75,\r
-0x90,0xd4,0xbe,0xc5,0x13,0x8e,0x84,0x5b,0xc6,0x90,0x12,0x3d,0x8b,0x46,0xc7,0xf1,\r
-0xaf,0xd8,0xaf,0xf8,0x27,0x2f,0x81,0x67,0xf0,0x0f,0xec,0x75,0xf0,0xfa,0xd2,0xe5,\r
-0x59,0x2e,0x2f,0xed,0xa4,0xd5,0x59,0x58,0x60,0x81,0x71,0x2b,0x4a,0x9f,0xf8,0xe3,\r
-0x2d,0x03,0x4f,0x53,0xe9,0x19,0xa7,0x5b,0x78,0x9e,0x49,0x18,0x24,0x68,0xa5,0x99,\r
-0x98,0xe0,0x00,0x3b,0xd7,0xc5,0xfe,0x2d,0xd7,0x5f,0xc4,0xde,0x25,0xd4,0x75,0x37,\r
-0x27,0xfd,0x22,0x66,0x65,0x07,0xb2,0x74,0x51,0xf8,0x00,0x05,0x7d,0x29,0xf1,0xbf,\r
-0xc4,0x5f,0xd8,0x1e,0x01,0xbc,0x54,0x70,0xb7,0x17,0xc4,0x5a,0x46,0x3d,0x43,0x7d,\r
-0xff,0x00,0xfc,0x74,0x37,0xe9,0x5f,0x2a,0x57,0xe7,0x1c,0x51,0x8a,0xe6,0x9c,0x30,\r
-0xeb,0xa6,0xaf,0xe7,0xb1,0xe1,0xe6,0x15,0x2f,0x25,0x4f,0xe6,0x14,0x51,0x45,0x7c,\r
-0x29,0xe3,0x9a,0x5e,0x1a,0x92,0xc6,0x2d,0x7f,0x4f,0x93,0x52,0x25,0x6c,0x23,0x99,\r
-0x5e,0x6d,0xab,0xb8,0x95,0x07,0x24,0x60,0x7a,0xe3,0x1f,0x8d,0x7d,0x2b,0x1f,0xc7,\r
-0x9f,0x06,0xb0,0x03,0xed,0xf2,0xaf,0xd6,0xda,0x4f,0xf0,0xaf,0x96,0x28,0xaf,0x6b,\r
-0x01,0x9b,0x56,0xcb,0xa3,0x28,0xd2,0x49,0xdf,0xbf,0xfc,0x39,0xd7,0x47,0x13,0x3a,\r
-0x09,0xa8,0xad,0xcf,0xaa,0xcf,0xc7,0x5f,0x06,0x81,0x9f,0xed,0x37,0xff,0x00,0xc0,\r
-0x69,0x3f,0xf8,0x9a,0xc7,0xd6,0x3f,0x68,0xcf,0x0e,0xda,0x44,0xc2,0xc6,0xde,0xef,\r
-0x50,0x97,0xb0,0xd9,0xe5,0xaf,0xe2,0x4f,0x3f,0xa5,0x7c,0xd9,0x45,0x7a,0x53,0xe2,\r
-0x6c,0x6c,0x95,0x92,0x8a,0xf9,0x7f,0xc1,0x37,0x79,0x85,0x67,0xb5,0x8e,0xa7,0xc7,\r
-0x5f,0x11,0x35,0x5f,0x1e,0xdd,0xab,0xde,0x32,0xc3,0x69,0x19,0x26,0x1b,0x48,0xbe,\r
-0xe2,0x7b,0x9f,0x53,0xee,0x7f,0x0c,0x57,0x2d,0x45,0x6b,0xe9,0x1e,0x12,0xd6,0xb5,\r
-0xed,0xa7,0x4f,0xd2,0xee,0xae,0x91,0xba,0x3c,0x71,0x1d,0x9f,0xf7,0xd7,0x4f,0xd6,\r
-0xbe,0x72,0x73,0xad,0x8b,0xa8,0xe5,0x2b,0xca,0x4f,0xe6,0x70,0xc9,0xce,0xac,0xae,\r
-0xf5,0x66,0x45,0x69,0x78,0x7b,0xc3,0xb7,0xfe,0x29,0xd5,0x21,0xd3,0xf4,0xe8,0x0c,\r
-0xd7,0x12,0x1f,0xf8,0x0a,0x0e,0xec,0xc7,0xb0,0x15,0xe9,0x5e,0x18,0xfd,0x9d,0x75,\r
-0x7d,0x45,0xd2,0x4d,0x66,0xe2,0x3d,0x36,0x0e,0x09,0x8a,0x32,0x24,0x94,0x8f,0x4e,\r
-0x38,0x1f,0x99,0xfa,0x57,0xb9,0x78,0x4f,0xc1,0x7a,0x57,0x82,0xec,0x3e,0xcb,0xa6,\r
-0x5b,0x08,0xb3,0x83,0x24,0xad,0xcc,0x92,0x1f,0x56,0x6e,0xff,0x00,0x4e,0x83,0xb0,\r
-0x15,0xf4,0x79,0x7f,0x0f,0xe2,0x31,0x12,0x52,0xc4,0x2e,0x48,0xfe,0x2f,0xfa,0xf3,\r
-0x3b,0xa8,0x60,0xa7,0x37,0x79,0xe8,0x8a,0xfe,0x01,0xf0,0x5d,0xaf,0x81,0xbc,0x3f,\r
-0x0e,0x9f,0x6e,0x7c,0xc9,0x4f,0xcf,0x3c,0xf8,0xc1,0x95,0xcf,0x53,0xf4,0xec,0x3d,\r
-0x85,0x74,0xb4,0x94,0xb5,0xfa,0x7d,0x2a,0x51,0xa3,0x05,0x4e,0x0a,0xc9,0x1f,0x43,\r
-0x18,0xa8,0xa5,0x15,0xb0,0x51,0x45,0x15,0xa9,0x41,0x5e,0x6f,0xf1,0xeb,0x5c,0xfe,\r
-0xc9,0xf0,0x05,0xc4,0x0a,0xdb,0x65,0xbe,0x91,0x6d,0xd7,0x1e,0x99,0xdc,0xdf,0xa0,\r
-0x23,0xf1,0xaf,0x47,0x3d,0x2b,0xe7,0x8f,0xda,0x4f,0x5b,0xfb,0x4e,0xbd,0xa6,0x69,\r
-0x68,0xdf,0x25,0xac,0x26,0x67,0x03,0xfb,0xce,0x70,0x3f,0x20,0xbf,0xad,0x78,0x79,\r
-0xd5,0x7f,0xab,0xe0,0x6a,0x49,0x6e,0xf4,0xfb,0xce,0x4c,0x5c,0xf9,0x28,0xc9,0x9e,\r
-0x39,0x45,0x14,0x57,0xe3,0x67,0xca,0x85,0x7a,0x67,0xec,0xfb,0xa2,0xff,0x00,0x69,\r
-0x78,0xec,0x5d,0xba,0x93,0x1d,0x84,0x0d,0x2e,0x7b,0x07,0x6f,0x95,0x41,0xfc,0x0b,\r
-0x1f,0xc2,0xbc,0xce,0xbe,0x89,0xfd,0x9b,0x74,0x41,0x6b,0xe1,0xdd,0x47,0x54,0x65,\r
-0x22,0x4b,0xc9,0xc4,0x4a,0x4f,0x42,0x91,0x8e,0x08,0xfc,0x59,0x87,0xe1,0x5e,0xf6,\r
-0x47,0x43,0xdb,0xe3,0xe0,0x9e,0xcb,0x5f,0xbb,0xfe,0x09,0xd9,0x84,0x87,0x3d,0x68,\r
-0xf9,0x6a,0x7b,0x08,0xe9,0x4b,0x45,0x15,0xfb,0x11,0xf5,0x21,0x48,0x4e,0x29,0x6a,\r
-0x9e,0xad,0xa8,0xc5,0xa4,0xe9,0xb7,0x57,0xb3,0x9c,0x43,0x6f,0x13,0x4a,0xe7,0xd9,\r
-0x41,0x27,0xf9,0x54,0xc9,0xa8,0xa6,0xde,0xc2,0x6e,0xda,0xb3,0xc3,0x3f,0x68,0x9f,\r
-0x1b,0xb5,0xc5,0xdc,0x3e,0x1b,0xb5,0x90,0x88,0xa2,0x02,0x6b,0xbd,0xa7,0xef,0x31,\r
-0xe5,0x50,0xfd,0x07,0xcd,0x8f,0x71,0xe9,0x5e,0x27,0x57,0x35,0x9d,0x52,0x7d,0x6f,\r
-0x55,0xbb,0xd4,0x2e,0x4e,0x67,0xb9,0x95,0xa5,0x7f,0xa9,0x39,0xc7,0xd0,0x74,0xfc,\r
-0x2a,0x9d,0x7e,0x25,0x98,0x62,0xe5,0x8d,0xc4,0xca,0xb3,0xdb,0xa7,0xa7,0x43,0xe4,\r
-0xab,0xd5,0x75,0xaa,0x39,0x30,0xa2,0x8a,0x2b,0xce,0x30,0x3a,0x5f,0x87,0xde,0x0a,\r
-0x9f,0xc7,0x5e,0x22,0x86,0xc2,0x32,0x63,0xb7,0x5f,0xde,0x5c,0x4c,0x07,0xdc,0x8f,\r
-0xbf,0xe2,0x7a,0x0f,0xfe,0xb5,0x7d,0x71,0xa3,0x69,0x16,0x9a,0x16,0x9b,0x05,0x8d,\r
-0x8c,0x2b,0x6f,0x6b,0x02,0xed,0x48,0xd0,0x71,0xf5,0x3e,0xa4,0xf5,0x27,0xa9,0xae,\r
-0x13,0xe0,0x4f,0x84,0xd7,0xc3,0xde,0x0d,0x8a,0xf2,0x44,0x02,0xf3,0x52,0xc5,0xc3,\r
-0x92,0x39,0x11,0xff,0x00,0xcb,0x31,0xf9,0x73,0xf5,0x63,0x5e,0x93,0x5f,0xad,0x64,\r
-0x59,0x7c,0x70,0x98,0x75,0x52,0x4b,0xdf,0x9e,0xaf,0xc9,0x74,0x47,0xd2,0xe0,0xe8,\r
-0x2a,0x54,0xd4,0x9e,0xec,0x4a,0x5a,0x28,0xaf,0xa6,0x3d,0x00,0xa2,0x8a,0x28,0x03,\r
-0x8c,0xf8,0xb1,0xe1,0x58,0xbc,0x55,0xe0,0xbb,0xe8,0x76,0x03,0x75,0x6e,0x86,0xe2,\r
-0xdd,0xb1,0xc8,0x75,0x19,0xc0,0xfa,0x8c,0x8f,0xc6,0xbe,0x47,0xaf,0xb9,0xe4,0x50,\r
-0xe8,0x54,0x8c,0x82,0x30,0x6b,0xe2,0x0d,0x46,0x11,0x6f,0xa8,0xdd,0x42,0x3a,0x47,\r
-0x2b,0xa0,0xfc,0x09,0x15,0xf9,0xd7,0x14,0xd0,0x8c,0x67,0x4e,0xb2,0xdd,0xdd,0x3f,\r
-0x91,0xe1,0x66,0x30,0x49,0xc6,0x5d,0xca,0xf4,0x51,0x45,0x7c,0x21,0xe3,0x85,0x7d,\r
-0x49,0xf0,0x17,0x5a,0x6d,0x57,0xe1,0xf5,0xb4,0x4e,0xe5,0xe4,0xb2,0x95,0xed,0xc9,\r
-0x3e,0x83,0xe6,0x51,0xf8,0x2b,0x01,0xf8,0x57,0xcb,0x75,0xf4,0x27,0xec,0xcf,0x29,\r
-0x3a,0x0e,0xb3,0x1f,0x65,0xba,0x56,0xfc,0xd3,0x1f,0xd2,0xbe,0xa7,0x86,0xea,0x38,\r
-0x63,0x94,0x57,0x54,0xff,0x00,0xcc,0xf4,0x70,0x12,0x6a,0xb5,0xbb,0x9e,0xcc,0x6b,\r
-0xe5,0x2f,0x8e,0x1a,0x9b,0xea,0x3f,0x11,0xb5,0x14,0x66,0x2d,0x1d,0xa8,0x48,0x23,\r
-0x1e,0x80,0x28,0x27,0xff,0x00,0x1e,0x66,0xaf,0xab,0x3b,0x57,0xc8,0xdf,0x17,0x6d,\r
-0x5a,0xd3,0xe2,0x3e,0xb8,0xad,0xd5,0xa6,0x12,0x0f,0xa3,0x28,0x23,0xf9,0xd7,0xd3,\r
-0x71,0x3c,0xa4,0xb0,0x91,0x4b,0x67,0x2f,0xd1,0x9d,0xf9,0x83,0xfd,0xd2,0xf5,0x38,\r
-0xfa,0x28,0xa2,0xbf,0x30,0x3e,0x7c,0x2b,0xb7,0xf8,0x35,0xa3,0xd9,0xeb,0x5e,0x3f,\r
-0xb0,0x8a,0xf7,0x6b,0x45,0x18,0x69,0x96,0x37,0xe4,0x48,0xca,0x32,0xa3,0xf3,0xe7,\r
-0xf0,0xae,0x22,0xac,0xe9,0xba,0x8d,0xce,0x91,0x7f,0x05,0xed,0xa4,0xcd,0x05,0xcc,\r
-0x0e,0x1e,0x39,0x13,0xaa,0x91,0x5d,0x38,0x6a,0x91,0xa3,0x5e,0x15,0x26,0xae,0x93,\r
-0x4e,0xc5,0xd3,0x92,0x8c,0xd4,0x9e,0xc7,0xdb,0xea,0x38,0xc5,0x3b,0x15,0xe2,0xbe,\r
-0x10,0xfd,0xa3,0x2c,0xe7,0x8d,0x21,0xf1,0x0d,0xb3,0xda,0xcc,0x38,0x37,0x56,0xeb,\r
-0xba,0x33,0xee,0x57,0xa8,0xfc,0x33,0x5e,0xa7,0xa3,0x78,0xbb,0x46,0xf1,0x0a,0x06,\r
-0xd3,0xb5,0x2b,0x6b,0xbf,0x55,0x8e,0x41,0xb8,0x7d,0x57,0xa8,0xaf,0xd9,0x70,0xb9,\r
-0x86,0x17,0x16,0x93,0xa5,0x35,0xe9,0xd7,0xee,0x3e,0xae,0x9d,0x7a,0x75,0x7e,0x16,\r
-0x6b,0xe2,0x82,0x29,0x37,0x52,0xe6,0xbd,0x23,0x70,0xc7,0xe3,0x4c,0x9e,0xde,0x3b,\r
-0x98,0xda,0x39,0x51,0x64,0x8d,0x86,0x19,0x1d,0x72,0x08,0xf4,0x22,0xa4,0xa2,0x95,\r
-0x93,0xdc,0x2c,0x50,0xd2,0x74,0x2b,0x0d,0x06,0x29,0x62,0xd3,0xed,0x21,0xb3,0x8a,\r
-0x49,0x0c,0xad,0x1c,0x08,0x15,0x4b,0x10,0x01,0x38,0x1f,0x41,0x57,0xe8,0xa2,0x94,\r
-0x62,0xa2,0xad,0x15,0x64,0x24,0x92,0xd1,0x05,0x14,0x51,0x54,0x30,0xae,0x67,0xe2,\r
-0x24,0xfe,0x47,0x85,0x2f,0x5b,0xa1,0xdb,0x8a,0xe9,0xab,0x88,0xf8,0xbd,0x71,0xf6,\r
-0x7f,0x07,0xdc,0x1c,0xe3,0x3f,0xe1,0x5c,0xb8,0xa9,0x72,0xd0,0x9b,0xf2,0x66,0x35,\r
-0x9d,0xa9,0xc9,0x9f,0x08,0x78,0xa6,0x5d,0xfa,0x9d,0xe3,0x67,0xf8,0xcd,0x79,0xb7,\r
-0xc3,0x9b,0x15,0xd7,0x3f,0x6a,0xdf,0x86,0x16,0x6f,0xc8,0x1a,0xd4,0x73,0xe3,0xde,\r
-0x25,0x69,0x47,0xea,0x95,0xdf,0x6b,0xaf,0xba,0x7b,0x86,0xf5,0x63,0x5c,0x9f,0xec,\r
-0xe3,0x0b,0xea,0x3f,0xb6,0xaf,0xc3,0xb4,0x0b,0xb9,0x21,0x96,0xf6,0x66,0xf6,0x0b,\r
-0x67,0x3e,0x0f,0xe6,0x45,0x7c,0x36,0x48,0xaf,0x56,0xe7,0xe4,0x38,0x15,0xed,0x33,\r
-0x9a,0x5e,0xad,0x9f,0xab,0x7b,0x68,0xa5,0xcd,0x15,0xfa,0x21,0xfb,0x08,0xb4,0x51,\r
-0x45,0x22,0xc4,0xcd,0x7c,0xcb,0xfb,0x60,0xf8,0xbc,0xee,0xd1,0xfc,0x33,0x0b,0xe0,\r
-0x1c,0xdf,0x5c,0x80,0x4f,0xba,0xc6,0x3e,0x9f,0x7c,0xfe,0x02,0xbe,0x97,0x95,0xc4,\r
-0x68,0xce,0xc4,0x2a,0xa8,0x24,0x92,0x70,0x00,0xaf,0xcf,0xaf,0x89,0xbe,0x2c,0x93,\r
-0xc6,0xfe,0x3c,0xd6,0x35,0x56,0x72,0xf1,0x4b,0x39,0x8e,0x01,0x9c,0x85,0x89,0x7e,\r
-0x54,0xc7,0xe0,0x33,0xf8,0xd7,0xce,0x67,0x98,0x8f,0x63,0x86,0xf6,0x6b,0x79,0x69,\r
-0xf2,0xea,0x7c,0xc7,0x10,0x62,0x7d,0x96,0x17,0xd9,0x47,0x79,0xbb,0x7c,0xba,0x9e,\r
-0x89,0xfb,0x2d,0x78,0x47,0xfb,0x6b,0xc6,0x8d,0xa9,0xcb,0x1e,0xe8,0x2c,0x17,0x70,\r
-0x27,0xa6,0xf3,0xd2,0xbe,0xc4,0x1d,0x2b,0xca,0x3f,0x67,0x0f,0x08,0xff,0x00,0xc2,\r
-0x37,0xf0,0xfe,0x09,0xe4,0x4d,0xb7,0x17,0xc7,0xce,0x62,0x47,0x38,0xed,0x5e,0xaf,\r
-0x5d,0x19,0x3e,0x1f,0xd8,0x61,0x63,0x7d,0xe5,0xab,0xf9,0xff,0x00,0xc0,0x3d,0x0c,\r
-0xab,0x0d,0xf5,0x6c,0x24,0x62,0xf7,0x7a,0xb1,0x68,0xa2,0x8a,0xf6,0xcf,0x5c,0x29,\r
-0x09,0xa5,0xa4,0xc5,0x00,0x7f,0x37,0xdf,0xb5,0x6f,0x8c,0xaf,0x3c,0x7d,0xfb,0x4a,\r
-0x7c,0x4c,0xd6,0xef,0x9c,0xc9,0x34,0xda,0xfd,0xe4,0x28,0x4f,0x55,0x8a,0x29,0x4c,\r
-0x51,0x2f,0xe1,0x1c,0x68,0x3f,0x0a,0xfd,0x53,0xfd,0x82,0x7f,0x6c,0xcf,0x83,0xf6,\r
-0x1f,0xb3,0x47,0x85,0xfc,0x31,0xa9,0xf8,0xa7,0x4c,0xf0,0xae,0xbb,0xe1,0xbb,0x13,\r
-0x6f,0x77,0xa7,0x6a,0x93,0xad,0xb1,0x99,0x94,0xb3,0x19,0x62,0x67,0x20,0x49,0xbf,\r
-0x24,0xe0,0x1c,0xe4,0x90,0x47,0x4a,0xf8,0x47,0xfe,0x0a,0x39,0xfb,0x2b,0x78,0x83,\r
-0xe0,0x87,0xc7,0x0f,0x10,0xf8,0xa2,0x1d,0x3e,0x69,0xfc,0x11,0xe2,0x7b,0xf9,0x75,\r
-0x1b,0x2d,0x4a,0x35,0xdd,0x1c,0x32,0xca,0xdb,0xe5,0x82,0x4c,0x0f,0x91,0x83,0xb3,\r
-0x6d,0xcf,0x55,0x23,0x07,0x39,0x03,0xe4,0x43,0xc7,0x19,0xaa,0x22,0xf6,0x67,0xaf,\r
-0x6b,0x7a,0xcd,0xcf,0xed,0x4b,0xfb,0x51,0x5c,0xea,0x1a,0x95,0xf2,0x58,0x0f,0x17,\r
-0x78,0x83,0x32,0x5d,0x5d,0xca,0xa8,0xb6,0x76,0xaf,0x20,0x03,0x73,0x36,0x00,0x11,\r
-0xc2,0x00,0xe7,0xfb,0x95,0xfa,0x69,0xfb,0x5b,0xff,0x00,0xc1,0x44,0x3e,0x1f,0x7c,\r
-0x15,0xf8,0x50,0xfe,0x01,0xf8,0x43,0xac,0xda,0x78,0x83,0xc4,0xc7,0x4f,0x5d,0x32,\r
-0xd2,0xe7,0x49,0x71,0x2d,0xa6,0x95,0x08,0x4f,0x2c,0x48,0x65,0x19,0x57,0x90,0x28,\r
-0xf9,0x55,0x49,0xc1,0xc1,0x38,0xc6,0x0f,0xe3,0x6f,0x5a,0xf5,0x3f,0x80,0xff,0x00,\r
-0xb3,0x47,0xc4,0x3f,0xda,0x3b,0xc4,0x91,0x69,0x3e,0x0b,0xd0,0x66,0xbc,0x8b,0x78,\r
-0x17,0x3a,0x9c,0xe0,0xc7,0x65,0x6a,0x33,0xcb,0x4b,0x2e,0x30,0x31,0x9f,0xba,0x32,\r
-0xc7,0xb0,0x34,0x09,0x17,0x3f,0x65,0xcf,0x80,0x7a,0xc7,0xed,0x37,0xf1,0xb7,0x43,\r
-0xf0,0x8d,0x92,0xcc,0x6d,0x27,0x9b,0xed,0x3a,0xb5,0xf8,0xc9,0xfb,0x35,0xa2,0x90,\r
-0x65,0x90,0x9e,0x79,0x3f,0x75,0x73,0xd5,0x99,0x6b,0xfa,0x2e,0xd2,0xb4,0xcb,0x6d,\r
-0x13,0x4b,0xb4,0xd3,0xec,0xa2,0x58,0x2c,0xed,0x21,0x48,0x21,0x89,0x06,0x02,0x22,\r
-0xa8,0x55,0x03,0xe8,0x00,0xaf,0x0f,0xfd,0x90,0xff,0x00,0x64,0x5f,0x0d,0x7e,0xc9,\r
-0xbe,0x00,0x1a,0x4e,0x98,0xcb,0xaa,0x78,0x86,0xfb,0x6c,0x9a,0xb6,0xb6,0xf1,0xed,\r
-0x7b,0x99,0x00,0xe1,0x50,0x73,0xb2,0x35,0xe7,0x6a,0xe4,0xf5,0x24,0x92,0x6b,0xdd,\r
-0x2f,0x6f,0x22,0xb0,0xb4,0x9e,0xe6,0x76,0xd9,0x0c,0x31,0xb4,0x8e,0xc7,0xb2,0x81,\r
-0x92,0x7f,0x2a,0x87,0x24,0x95,0xd9,0x5b,0x23,0xe7,0x6f,0xda,0x2f,0xc4,0x7f,0xda,\r
-0x1e,0x26,0xb5,0xd2,0xa3,0x6c,0xc7,0x61,0x16,0xe7,0x19,0xe3,0xcc,0x7c,0x1f,0xd1,\r
-0x42,0xfe,0x75,0xe4,0x95,0xa1,0xe2,0x0d,0x62,0x4f,0x10,0x6b,0x97,0xfa,0x94,0xbf,\r
-0x7e,0xea,0x66,0x97,0x1e,0x80,0x9e,0x07,0xe0,0x30,0x3f,0x0a,0xcf,0xaf,0xc4,0x31,\r
-0xf8,0x87,0x8a,0xc5,0x4e,0xb7,0x77,0xf8,0x74,0x3e,0x4a,0xb5,0x4f,0x6b,0x51,0xcc,\r
-0x28,0xa2,0xba,0x5f,0x87,0x1e,0x1f,0xff,0x00,0x84,0x9f,0xc6,0xba,0x5d,0x8b,0x2e,\r
-0xe8,0x4c,0xa2,0x49,0x81,0xe9,0xb1,0x7e,0x66,0x07,0xeb,0x8c,0x7e,0x35,0xcb,0x46,\r
-0x94,0xab,0x54,0x8d,0x28,0xef,0x27,0x6f,0xbc,0xce,0x31,0x73,0x92,0x8a,0xea,0x61,\r
-0x49,0xa7,0xdd,0x43,0xfe,0xb2,0xda,0x64,0xff,0x00,0x7a,0x32,0x2a,0xb9,0x18,0x35,\r
-0xf7,0x40,0x41,0x80,0x36,0x8c,0x56,0x37,0x88,0x3c,0x17,0xa3,0x78,0x9e,0xd9,0xe1,\r
-0xd4,0x34,0xe8,0x27,0xdc,0x31,0xe6,0x6c,0x02,0x45,0xf7,0x0c,0x39,0x15,0xf7,0x15,\r
-0x38,0x56,0x49,0x5e,0x9d,0x5b,0xbf,0x35,0xff,0x00,0x04,0xf5,0xe5,0x97,0x3b,0x7b,\r
-0xb2,0x3e,0x30,0xa2,0xba,0x4f,0x88,0x3e,0x0e,0x97,0xc0,0xfe,0x26,0xb8,0xd3,0x5d,\r
-0x8c,0x90,0xe0,0x4b,0x04,0xad,0xd5,0xe3,0x3d,0x09,0xf7,0x18,0x20,0xfb,0x8a,0xe6,\r
-0xeb,0xe1,0xaa,0xd2,0x9d,0x1a,0x8e,0x9c,0xd5,0x9a,0xd0,0xf2,0x25,0x17,0x06,0xe2,\r
-0xfa,0x05,0x74,0x7e,0x0d,0xf1,0xde,0xab,0xe0,0x9d,0x4a,0x3b,0x8b,0x2b,0x87,0x36,\r
-0xfb,0x81,0x96,0xd5,0x98,0xf9,0x72,0xaf,0x70,0x47,0x63,0xef,0xd4,0x57,0x39,0x45,\r
-0x14,0xaa,0xce,0x8c,0xd5,0x4a,0x6e,0xcd,0x04,0x64,0xe0,0xf9,0xa3,0xb9,0xf7,0x06,\r
-0x95,0xa8,0xc3,0xab,0xe9,0xb6,0xd7,0xb6,0xed,0xba,0x0b,0x88,0xd6,0x54,0x3e,0xc4,\r
-0x64,0x7f,0x3a,0xb7,0x5c,0x27,0xc1,0x2b,0xef,0xb7,0x7c,0x37,0xd2,0x49,0x39,0x68,\r
-0x83,0xc2,0x7f,0xe0,0x2e,0x40,0xfd,0x31,0x5d,0xdd,0x7e,0xe5,0x86,0xab,0xed,0xe8,\r
-0x42,0xaf,0x74,0x9f,0xde,0x8f,0xaf,0xa7,0x2e,0x78,0x29,0x77,0x0a,0x28,0xa2,0xba,\r
-0x4d,0x02,0x8a,0x28,0xa0,0x04,0x27,0x00,0xd7,0xc7,0x1f,0x11,0x35,0xcf,0xf8,0x48,\r
-0xbc,0x6d,0xac,0x5f,0x2b,0x07,0x8d,0xa7,0x64,0x8c,0x8e,0x85,0x17,0xe5,0x53,0xf8,\r
-0x80,0x0f,0xe3,0x5f,0x54,0x78,0xf7,0x5d,0xff,0x00,0x84,0x73,0xc1,0xfa,0xb6,0xa0,\r
-0xae,0x12,0x48,0xad,0xdb,0xcb,0x2d,0xd3,0x79,0x18,0x4f,0xfc,0x78,0x8a,0xf8,0xcc,\r
-0x0c,0x0c,0x57,0xc0,0x71,0x4d,0x7d,0x29,0xd0,0x5e,0xaf,0xf2,0x5f,0xa9,0xe2,0xe6,\r
-0x33,0xf8,0x60,0x2d,0x14,0x51,0x5f,0x9f,0x1e,0x20,0x57,0xd8,0xdf,0x0e,0xb4,0x4f,\r
-0xec,0x0f,0x04,0xe8,0xf6,0x44,0x61,0xd6,0xdd,0x5d,0xc7,0xfb,0x4d,0xf3,0x37,0xea,\r
-0xc6,0xbe,0x53,0xf0,0x5e,0x91,0xfd,0xbf,0xe2,0xcd,0x27,0x4f,0xc6,0x56,0x7b,0x94,\r
-0x0e,0x3f,0xd9,0x07,0x2d,0xfa,0x03,0x5f,0x68,0x28,0x01,0x40,0x1c,0x01,0x5f,0x7f,\r
-0xc2,0xd4,0x3f,0x89,0x5d,0xfa,0x7e,0xaf,0xf4,0x3d,0xac,0xba,0x1f,0x14,0xfe,0x41,\r
-0x4b,0x45,0x15,0xfa,0x09,0xed,0x85,0x79,0xb7,0xc7,0xed,0x63,0xfb,0x2f,0xe1,0xfc,\r
-0xf0,0xa9,0x2b,0x25,0xf4,0xc9,0x6e,0xa4,0x7a,0x67,0x73,0x7e,0x88,0x47,0xe3,0x5e,\r
-0x93,0x5e,0x17,0xfb,0x4e,0x6a,0x0e,0xb1,0xe8,0x36,0x4a,0x7e,0x46,0x32,0xcc,0xc3,\r
-0xdc,0x6d,0x03,0xf9,0xb5,0x78,0xd9,0xc5,0x57,0x47,0x01,0x56,0x4b,0xb5,0xbe,0xfd,\r
-0x0e,0x5c,0x54,0xb9,0x28,0xc9,0x9e,0x11,0x45,0x14,0x57,0xe3,0x07,0xca,0x05,0x5e,\r
-0xd0,0xb4,0xc6,0xd6,0xb5,0xab,0x0d,0x3d,0x0e,0x1a,0xea,0x74,0x87,0x3e,0x9b,0x88,\r
-0x19,0xaa,0x35,0xda,0x7c,0x1b,0xb4,0x5b,0xdf,0x89,0x3a,0x2a,0x3f,0xdd,0x57,0x79,\r
-0x3f,0x15,0x8d,0x88,0xfd,0x40,0xae,0xac,0x2d,0x3f,0x6d,0x5e,0x14,0xdf,0x56,0x97,\r
-0xe2,0x69,0x4e,0x3c,0xd3,0x8c,0x7c,0xcf,0xac,0xad,0xa0,0x8e,0xd6,0xde,0x28,0x62,\r
-0x50,0x91,0x46,0xa1,0x11,0x47,0x40,0x00,0xc0,0x02,0xa5,0xa4,0x14,0xb5,0xfb,0xaa,\r
-0x49,0x2b,0x23,0xec,0x42,0x8a,0x28,0xa6,0x01,0x45,0x14,0x50,0x04,0x73,0x38,0x86,\r
-0x27,0x76,0x38,0x55,0x04,0x93,0xf8,0x57,0xc3,0xd7,0x93,0x7d,0xa6,0xf2,0x79,0xbf,\r
-0xe7,0xa4,0x8c,0xff,0x00,0x99,0xcd,0x7d,0x79,0xf1,0x37,0x5a,0x5d,0x07,0xc0,0xba,\r
-0xc5,0xd1,0x38,0x73,0x01,0x8a,0x3c,0x1e,0x77,0x3f,0xca,0x3f,0x9e,0x7f,0x0a,0xf8,\r
-0xf6,0xbf,0x3a,0xe2,0x9a,0xa9,0xce,0x95,0x25,0xd1,0x36,0x78,0x59,0x8c,0xb5,0x8c,\r
-0x42,0x8a,0x28,0xaf,0x84,0x3c,0x70,0xaf,0xa1,0xff,0x00,0x66,0x98,0x36,0xf8,0x6b,\r
-0x56,0x97,0x04,0x6f,0xbb,0x0b,0x9f,0xa2,0x0f,0xf1,0xaf,0x9e,0x3a,0xd7,0xd5,0x5f,\r
-0x02,0xf4,0xa6,0xd3,0x3e,0x1d,0x58,0x3b,0xae,0xd9,0x2e,0x9d,0xee,0x08,0xf6,0x27,\r
-0x0b,0xff,0x00,0x8e,0x81,0x5f,0x55,0xc3,0x74,0xdc,0xf1,0xdc,0xdd,0x93,0xff,0x00,\r
-0x23,0xd1,0xc0,0x46,0xf5,0xaf,0xd9,0x1e,0x81,0x8e,0x2b,0xc3,0xbf,0x68,0x6f,0x02,\r
-0xcd,0x71,0xe4,0xf8,0x8e,0xce,0x33,0x20,0x89,0x04,0x57,0x61,0x47,0x21,0x73,0xf2,\r
-0xbf,0xe1,0x9c,0x1f,0xc3,0xde,0xbd,0xc4,0x53,0x66,0x85,0x27,0x8d,0xa3,0x91,0x16,\r
-0x44,0x71,0xb5,0x95,0x86,0x41,0x1e,0x86,0xbf,0x46,0xc7,0x60,0xe1,0x8e,0xa1,0x2a,\r
-0x33,0xeb,0xf8,0x33,0xdd,0xad,0x49,0x56,0x83,0x83,0x3e,0x17,0xa2,0xbd,0xc7,0xe2,\r
-0x1f,0xec,0xff,0x00,0x20,0x96,0x5b,0xff,0x00,0x0d,0x60,0xa3,0x65,0x9b,0x4f,0x76,\r
-0xc1,0x53,0xff,0x00,0x4c,0xd8,0xff,0x00,0x23,0xef,0xcf,0x41,0x5e,0x2d,0x7f,0xa7,\r
-0x5d,0x69,0x57,0x2f,0x6f,0x79,0x6f,0x2d,0xac,0xe9,0xf7,0xa3,0x95,0x0a,0xb0,0xfc,\r
-0x0d,0x7e,0x43,0x8c,0xcb,0xf1,0x18,0x19,0xb8,0xd5,0x8e,0x9d,0xfa,0x33,0xe6,0x2a,\r
-0xd0,0x9d,0x17,0x69,0x22,0xbd,0x14,0x51,0x5e,0x69,0x80,0x52,0xab,0x14,0x60,0xca,\r
-0x4a,0xb0,0x39,0x04,0x1c,0x11,0x49,0x45,0x34,0xed,0xaa,0x03,0xab,0xd1,0xbe,0x29,\r
-0xf8,0xa7,0x41,0xda,0xb6,0xba,0xcd,0xc3,0x46,0x08,0xfd,0xdd,0xc1,0xf3,0x94,0x8f,\r
-0x4f,0x9b,0x24,0x0f,0xa6,0x2b,0xd1,0x34,0x0f,0xda,0x56,0x65,0x65,0x4d,0x6b,0x4a,\r
-0x57,0x52,0x79,0x9a,0xc9,0x88,0x20,0x7f,0xb8,0xc7,0x9f,0xfb,0xe8,0x57,0x88,0x51,\r
-0x5e,0xae,0x1f,0x35,0xc6,0x61,0xbf,0x87,0x51,0xdb,0xb3,0xd5,0x7e,0x27,0x4c,0x31,\r
-0x35,0x69,0xfc,0x32,0x3e,0xc3,0xf0,0xc7,0xc4,0x9f,0x0f,0xf8,0xb8,0x2a,0xe9,0xf7,\r
-0xe8,0x6e,0x08,0xcf,0xd9,0xa5,0xf9,0x25,0x1f,0xf0,0x13,0xd7,0xf0,0xcd,0x74,0xf9,\r
-0xaf,0x85,0x91,0xda,0x37,0x57,0x46,0x2a,0xca,0x72,0x18,0x1c,0x10,0x6b,0xd6,0x7e,\r
-0x1c,0xfc,0x75,0xbe,0xd1,0x25,0x8a,0xc7,0x5e,0x77,0xbf,0xd3,0xce,0x14,0x5c,0x9e,\r
-0x66,0x8b,0xeb,0xfd,0xe1,0xf5,0xe7,0xeb,0xd2,0xbe,0xcb,0x01,0xc4,0xb0,0xaa,0xd5,\r
-0x3c,0x52,0xe5,0x7d,0xd6,0xdf,0x3e,0xc7,0xab,0x47,0x1e,0xa4,0xf9,0x6a,0x2b,0x1f,\r
-0x48,0xd1,0x50,0x59,0x5e,0xc1,0xa8,0x5a,0xc5,0x73,0x6d,0x2a,0xcf,0x6f,0x2a,0x87,\r
-0x8e,0x44,0x39,0x56,0x53,0xd0,0x83,0x53,0xd7,0xdb,0xa6,0x9a,0xba,0x3d,0x7d,0xc2,\r
-0x8a,0x28,0xa6,0x01,0x5e,0x5f,0xf1,0xfa,0xf4,0xda,0xf8,0x48,0xa8,0xfe,0x2c,0xd7,\r
-0xa8,0x57,0x8a,0xfe,0xd2,0xd7,0x5e,0x57,0x87,0xe3,0x4c,0xff,0x00,0x09,0x38,0xaf,\r
-0x2f,0x33,0x97,0x2e,0x12,0xa3,0xf2,0x38,0xb1,0xb2,0xe5,0xc3,0xcd,0xf9,0x1f,0x18,\r
-0x6b,0x32,0x65,0x65,0x6e,0xe4,0x93,0x55,0xff,0x00,0x62,0x7b,0x51,0xaa,0x7e,0xd9,\r
-0x36,0xcf,0x8c,0x8b,0x2d,0x16,0xfa,0xe7,0xe8,0x49,0x8a,0x3c,0xff,0x00,0xe4,0x43,\r
-0xf9,0xd1,0xad,0xbe,0xdb,0x69,0x0f,0xb1,0xad,0x6f,0xf8,0x27,0x95,0x9f,0xdb,0x3f,\r
-0x6a,0x3f,0x15,0x5e,0xe3,0x22,0xd7,0xc3,0x72,0xc5,0xbb,0xd0,0xc9,0x73,0x01,0xff,\r
-0x00,0xda,0x66,0xbe,0x63,0x21,0x8f,0xbd,0x73,0xf2,0xcc,0x8d,0x73,0xe7,0x09,0xf6,\r
-0x4c,0xfd,0x29,0xdb,0x45,0x1c,0xd1,0x5f,0x79,0x73,0xf5,0xeb,0x21,0xd4,0x51,0x49,\r
-0x48,0xa3,0xcd,0x3f,0x68,0x5f,0x18,0x9f,0x07,0xfc,0x31,0xd4,0xa4,0x85,0xf6,0x5d,\r
-0xdf,0x62,0xc6,0x03,0xe8,0x5f,0x3b,0x8f,0xe0,0x81,0x8f,0xd4,0x0a,0xf8,0xeb,0xc0,\r
-0x3e,0x1d,0x93,0xc5,0x3e,0x2c,0xd3,0x74,0xd8,0xd7,0x3e,0x6c,0xca,0x1b,0xd8,0x67,\r
-0x9a,0xf5,0x7f,0xda,0xdb,0xc6,0x1f,0xda,0xbe,0x30,0xb2,0xd0,0x61,0x7c,0xc1,0xa6,\r
-0xc3,0xe6,0x4a,0x01,0xe0,0xca,0xfe,0xbe,0xe1,0x40,0xff,0x00,0xbe,0xab,0x43,0xf6,\r
-0x4b,0xf0,0x7f,0xda,0xb5,0x7b,0xdd,0x76,0x64,0xca,0x5b,0x2f,0x97,0x11,0x3f,0xde,\r
-0x3d,0x6b,0xe0,0xb1,0xcd,0xe6,0x19,0x8c,0x68,0x2d,0x96,0x9f,0xe6,0x7c,0x06,0x2d,\r
-0xbc,0xc7,0x35,0x54,0x57,0xc3,0x1d,0x3e,0xed,0x59,0xf5,0x0e,0x9f,0x65,0x1e,0x9d,\r
-0x63,0x6f,0x6d,0x12,0x85,0x8e,0x14,0x08,0xa0,0x7a,0x01,0x8a,0xb3,0x48,0x3a,0x52,\r
-0xd7,0xde,0x24,0x92,0xb2,0x3e,0xf9,0x2b,0x2b,0x20,0xa2,0x8a,0x29,0x8c,0x2b,0xf2,\r
-0xdf,0xf6,0xd7,0xff,0x00,0x82,0x9b,0x78,0xf3,0xe1,0x1f,0xed,0x0d,0xa9,0xf8,0x43,\r
-0xe1,0xcc,0x9a,0x4b,0xe8,0xfa,0x0c,0x49,0x69,0x7d,0xfd,0xa1,0x69,0xf6,0x81,0x3d,\r
-0xe6,0x37,0x49,0x82,0x19,0x59,0x42,0x6e,0x09,0x80,0x7a,0xab,0x57,0xea,0x2c,0xb2,\r
-0xa4,0x31,0xb3,0xc8,0xea,0x88,0xa0,0x96,0x66,0x38,0x00,0x7a,0x93,0x5f,0x84,0x3f,\r
-0xf0,0x51,0x9f,0xd9,0xb7,0xc4,0x9f,0x0a,0xbe,0x3b,0xf8,0xa7,0xc5,0xe2,0xde,0x4d,\r
-0x4b,0xc1,0xbe,0x27,0xd4,0x65,0xd4,0xad,0x75,0x8b,0x71,0xbe,0x28,0xe5,0x99,0x8b,\r
-0xc9,0x04,0x84,0x67,0x63,0x2b,0xb3,0x63,0x38,0xdc,0xb8,0x23,0xb8,0x0d,0x09,0x9f,\r
-0x6d,0x7e,0xc1,0xff,0x00,0xb5,0xcf,0xc4,0xef,0xdb,0x5b,0xc4,0xde,0x24,0xd0,0xbc,\r
-0x73,0xe1,0x9f,0x07,0xcf,0xe0,0x9d,0x2e,0xc5,0x5f,0x51,0x78,0x74,0xf9,0x77,0x4d,\r
-0x2c,0x84,0x88,0x62,0xdb,0x24,0xce,0x9c,0xec,0x91,0x89,0xdb,0xc0,0x4c,0x63,0x90,\r
-0x47,0xb1,0xf8,0xbf,0xfe,0x09,0x9f,0xfb,0x3c,0xf8,0xc2,0xe9,0xae,0x64,0xf0,0x2a,\r
-0xe9,0x13,0x39,0x25,0x8e,0x91,0x79,0x35,0xb2,0x1c,0xff,0x00,0xb0,0x1b,0x68,0xfc,\r
-0x00,0xaf,0x84,0xbf,0xe0,0x93,0xbf,0xb5,0x1f,0x82,0x3e,0x09,0xea,0xfe,0x2e,0xf0,\r
-0x97,0x8d,0xb5,0x2b,0x7f,0x0f,0x45,0xe2,0x09,0x2d,0xee,0x2c,0xb5,0x6b,0xaf,0x92,\r
-0x01,0x24,0x61,0xd5,0xa2,0x96,0x4e,0x88,0x08,0x60,0x54,0x9e,0x33,0xbf,0x24,0x64,\r
-0x67,0xf5,0xef,0x4a,0xf1,0x66,0x89,0xad,0xdb,0x47,0x71,0xa7,0xeb,0x36,0x17,0xf0,\r
-0x48,0x01,0x49,0x6d,0xae,0x92,0x45,0x61,0xec,0x54,0x90,0x68,0x04,0x7c,0xe9,0xe1,\r
-0x0f,0xf8,0x26,0x9f,0xec,0xf1,0xe0,0xeb,0x85,0xb8,0x8f,0xc0,0x51,0xea,0xf3,0x29,\r
-0x05,0x5b,0x58,0xbc,0x9a,0xe5,0x47,0xfc,0x01,0x9f,0x69,0xfc,0x41,0xaf,0xa4,0x34,\r
-0x2f,0x0f,0x69,0x7e,0x18,0xd2,0xe0,0xd3,0x74,0x7d,0x3a,0xd7,0x4a,0xd3,0xe0,0x1b,\r
-0x62,0xb4,0xb2,0x85,0x61,0x89,0x07,0xa0,0x55,0x00,0x0a,0xd0,0x0c,0x18,0x02,0x08,\r
-0x20,0xf7,0x14,0x64,0x1a,0x43,0x16,0xbc,0xdb,0xe3,0xcf,0x88,0xff,0x00,0xb1,0x3c,\r
-0x0d,0x35,0xb4,0x6d,0x89,0xf5,0x17,0x16,0xeb,0x83,0xc8,0x5e,0xae,0x7e,0x98,0x18,\r
-0xff,0x00,0x81,0x0a,0xf4,0x83,0xc0,0xaf,0x99,0x7f,0x68,0x4f,0x10,0x9d,0x5f,0xc6,\r
-0x69,0xa7,0xa3,0x66,0x1d,0x3a,0x30,0x84,0x7f,0xd3,0x46,0xc3,0x37,0xe9,0xb4,0x7e,\r
-0x15,0xe0,0xe7,0x78,0x9f,0xaa,0xe0,0xa6,0xd6,0xf2,0xd1,0x7c,0xff,0x00,0xe0,0x1c,\r
-0x58,0xba,0x9e,0xce,0x93,0xf3,0x3c,0xbe,0x8a,0x28,0xaf,0xc7,0x4f,0x97,0x0a,0xf7,\r
-0x2f,0xd9,0xaf,0xc3,0xd9,0x93,0x55,0xd6,0xa4,0x5c,0xe3,0x16,0xb1,0x1f,0xfc,0x79,\r
-0xff,0x00,0xf6,0x5a,0xf0,0xda,0xfa,0xff,0x00,0xe1,0x77,0x87,0x8f,0x86,0x7c,0x0f,\r
-0xa5,0x5a,0x32,0x14,0x99,0xa2,0x13,0x4c,0x0f,0x50,0xef,0xf3,0x10,0x7e,0x99,0xc7,\r
-0xe1,0x5f,0x55,0xc3,0x98,0x6f,0x6d,0x8c,0xf6,0x8f,0x68,0x2b,0xfc,0xf6,0x47,0xa3,\r
-0x80,0xa7,0xcf,0x57,0x9b,0xb1,0xd6,0x51,0x49,0x4b,0x5f,0xab,0x1f,0x48,0x78,0x4f,\r
-0xed,0x35,0xa7,0x28,0x3a,0x1d,0xfa,0xaf,0xcc,0x7c,0xd8,0x5d,0xbd,0x7e,0xe9,0x5f,\r
-0xfd,0x9b,0xf3,0xaf,0x0a,0xaf,0xa3,0xff,0x00,0x69,0x38,0x03,0xf8,0x3a,0xc2,0x5c,\r
-0x72,0x97,0xca,0x33,0xec,0x63,0x7f,0xf0,0x15,0xf3,0x85,0x7e,0x47,0xc4,0x30,0x50,\r
-0xcc,0x26,0xd7,0x54,0x9f,0xe0,0x7c,0xce,0x39,0x5a,0xbb,0x0a,0x28,0xa2,0xbe,0x6c,\r
-0xe0,0x3e,0x92,0xfd,0x9b,0xef,0x84,0xfe,0x0c,0xbc,0xb6,0xce,0x5a,0x0b,0xc6,0xe3,\r
-0xd1,0x59,0x54,0x8f,0xd7,0x35,0xeb,0x35,0xe1,0x1f,0xb3,0x1d,0xd0,0x0d,0xe2,0x0b,\r
-0x62,0xdc,0x91,0x0c,0x8a,0xbf,0xf7,0xd8,0x27,0xf9,0x57,0xbb,0x66,0xbf,0x64,0xc9,\r
-0x6a,0x7b,0x4c,0x05,0x27,0xd9,0x5b,0xee,0x76,0x3e,0xa7,0x09,0x2e,0x6a,0x11,0x16,\r
-0x8a,0x28,0xaf,0x70,0xec,0x0a,0x28,0xa4,0x3d,0x28,0x03,0xc8,0x3f,0x69,0x0d,0x6f,\r
-0xec,0x9e,0x19,0xb1,0xd3,0x11,0x80,0x7b,0xd9,0xf7,0xb0,0xf5,0x44,0xe7,0xff,0x00,\r
-0x42,0x2b,0xf9,0x57,0xce,0x95,0xe9,0x7f,0xb4,0x06,0xb8,0x75,0x4f,0x1e,0x3d,0xa0,\r
-0x20,0xc5,0x61,0x0a,0xc2,0x30,0x73,0xf3,0x1f,0x99,0xbf,0xf4,0x20,0x3f,0x0a,0xf3,\r
-0x4a,0xfc,0x77,0x3b,0xaf,0xf5,0x8c,0x74,0xda,0xd9,0x69,0xf7,0x7f,0xc1,0x3e,0x5b,\r
-0x19,0x3e,0x7a,0xcf,0xcb,0x40,0xa2,0x8a,0x2b,0xc1,0x38,0xcf,0x55,0xfd,0x9d,0x74,\r
-0x53,0x7f,0xe3,0x2b,0x8b,0xf6,0x40,0x62,0xb1,0xb7,0x24,0x37,0xa3,0xb9,0xda,0x3f,\r
-0x40,0xf5,0xf4,0xb5,0x79,0x2f,0xec,0xe7,0xa2,0x7d,0x87,0xc1,0xf7,0x3a,0x83,0xc6,\r
-0x04,0x97,0xd7,0x07,0x6b,0xf7,0x31,0xa7,0xca,0x07,0xfd,0xf5,0xbf,0xf3,0xaf,0x5a,\r
-0xaf,0xd8,0x32,0x2a,0x1e,0xc3,0x01,0x0b,0xef,0x2d,0x7e,0xff,0x00,0xf8,0x16,0x3e,\r
-0xa3,0x07,0x0e,0x4a,0x2b,0xcf,0x50,0xa2,0x8a,0x2b,0xe8,0x0e,0xd0,0xaf,0x00,0xfd,\r
-0xa6,0xc6,0x35,0x3d,0x04,0xf6,0x30,0xcb,0xfc,0xd6,0xbd,0xfe,0xbc,0x67,0xf6,0x97,\r
-0xd2,0xbc,0xed,0x0f,0x49,0xd4,0x42,0x92,0x6d,0xe7,0x68,0x4e,0x07,0x00,0x3a,0xe7,\r
-0x27,0xf1,0x41,0xf9,0xd7,0x81,0x9e,0xc1,0xcf,0x2f,0xa8,0x97,0x93,0xfc,0x4e,0x2c,\r
-0x62,0xbd,0x09,0x1f,0x3d,0x51,0x45,0x15,0xf8,0xf1,0xf2,0xe1,0x5d,0xa7,0xc1,0xcb,\r
-0xc4,0xb1,0xf8,0x93,0xa2,0xbb,0x9c,0x2b,0xc8,0xf1,0x7e,0x2c,0x8c,0xa3,0xf5,0x22,\r
-0xb8,0xba,0xb1,0xa7,0xdf,0x4d,0xa5,0xdf,0xdb,0x5e,0x5b,0xb6,0xd9,0xed,0xe4,0x59,\r
-0x50,0xfa,0x32,0x9c,0x8f,0xe5,0x5d,0x38,0x6a,0xbe,0xc2,0xbc,0x2a,0xbf,0xb2,0xd3,\r
-0xfb,0x99,0x74,0xe5,0xc9,0x35,0x2e,0xcc,0xfb,0x88,0x52,0xd6,0x4f,0x86,0x3c,0x43,\r
-0x6d,0xe2,0x9d,0x0e,0xcf,0x53,0xb4,0x6c,0xc5,0x70,0x81,0xb6,0xe7,0x25,0x1b,0xba,\r
-0x9f,0x70,0x72,0x3f,0x0a,0xd6,0xaf,0xdd,0x21,0x38,0xce,0x2a,0x71,0x77,0x4c,0xfb,\r
-0x14,0xd3,0x57,0x41,0x45,0x14,0x55,0x8c,0x28,0xa4,0xc8,0xae,0x4f,0xe2,0x2f,0x8f,\r
-0xed,0x3c,0x07,0xa2,0xb5,0xcc,0x84,0x4b,0x7b,0x28,0x2b,0x6d,0x6d,0x9e,0x5d,0xbd,\r
-0x4f,0xfb,0x23,0xb9,0xff,0x00,0x1a,0xc6,0xb5,0x68,0x50,0xa6,0xea,0xd4,0x76,0x48,\r
-0x89,0x49,0x41,0x39,0x4b,0x63,0xcb,0x7f,0x68,0xdf,0x17,0x2d,0xc5,0xcd,0x9f,0x87,\r
-0xad,0xdf,0x3e,0x41,0x17,0x37,0x38,0xec,0xc4,0x10,0x8b,0xf9,0x12,0x7f,0x11,0x5e,\r
-0x27,0x56,0x75,0x2d,0x46,0xe3,0x56,0xbf,0x9e,0xf6,0xee,0x53,0x35,0xcc,0xee,0x64,\r
-0x91,0xcf,0x72,0x6a,0xb5,0x7e,0x2d,0x98,0x62,0xde,0x3b,0x13,0x2a,0xcf,0xae,0xde,\r
-0x9d,0x0f,0x94,0xaf,0x55,0xd6,0x9b,0x98,0x51,0x45,0x15,0xe7,0x18,0x16,0x74,0xcd,\r
-0x3e,0x6d,0x5b,0x51,0xb5,0xb2,0xb6,0x5d,0xf7,0x17,0x32,0x2c,0x51,0xa9,0xe8,0x59,\r
-0x8e,0x07,0xf3,0xaf,0xb5,0xb4,0x7d,0x3a,0x2d,0x1f,0x4a,0xb4,0xb1,0x80,0x62,0x1b,\r
-0x68,0x96,0x14,0x1e,0xca,0x00,0x1f,0xca,0xbc,0x03,0xf6,0x78,0xf0,0x69,0xd4,0x75,\r
-0xa9,0xb5,0xfb,0x84,0xff,0x00,0x47,0xb2,0x06,0x38,0x32,0x3e,0xf4,0xa4,0x72,0x7f,\r
-0x05,0x3f,0x99,0xf6,0xaf,0xa2,0x87,0x4a,0xfd,0x3b,0x86,0xb0,0x8e,0x8d,0x09,0x62,\r
-0x24,0xb5,0x9e,0xde,0x88,0xfa,0x0c,0xbe,0x97,0x2c,0x1c,0xdf,0x51,0x68,0xa4,0xcd,\r
-0x2d,0x7d,0x91,0xea,0x88,0x46,0x6b,0x33,0x5b,0xf0,0xd6,0x97,0xe2,0x2b,0x63,0x06,\r
-0xa5,0x61,0x05,0xec,0x7d,0x84,0xa8,0x09,0x1f,0x43,0xd4,0x7e,0x15,0xa9,0x45,0x4c,\r
-0xa1,0x19,0xae,0x59,0x2b,0xa1,0x34,0x9a,0xb3,0x3c,0x7b,0x5f,0xfd,0x9b,0xf4,0x8b,\r
-0xd6,0x32,0x69,0x57,0xd3,0xe9,0xac,0x4e,0x7c,0xb9,0x07,0x9d,0x18,0x1e,0x83,0x90,\r
-0x47,0xe6,0x6b,0xce,0x35,0xdf,0x81,0x3e,0x2a,0xd1,0x81,0x78,0xad,0xa2,0xd4,0xe2,\r
-0x19,0xf9,0xad,0x1f,0x2d,0x8e,0xdf,0x29,0xc1,0xfc,0xb3,0x5f,0x54,0x52,0x11,0x5f,\r
-0x3d,0x88,0xc8,0x30,0x35,0xf5,0x51,0xe5,0x7e,0x5f,0xe5,0xb1,0xc3,0x3c,0x15,0x19,\r
-0xf4,0xb7,0xa1,0xf0,0xe5,0xed,0x85,0xd6,0x9b,0x39,0x86,0xee,0xda,0x5b,0x59,0x87,\r
-0x58,0xe6,0x42,0x8d,0xf9,0x1a,0x82,0xbe,0xdb,0xd5,0xf4,0x1d,0x3f,0x5d,0xb6,0x36,\r
-0xfa,0x85,0x9c,0x37,0xb0,0x9f,0xe1,0x99,0x03,0x63,0xdc,0x7a,0x57,0x8b,0xfc,0x45,\r
-0xf8,0x03,0x1d,0xbd,0xb4,0xda,0x8f,0x86,0xb7,0xe5,0x32,0xef,0x60,0xe7,0x76,0x47,\r
-0x7d,0x84,0xf3,0x9f,0x63,0x9c,0xfa,0xf6,0xaf,0x91,0xc6,0xf0,0xe5,0x7a,0x11,0x75,\r
-0x28,0x4b,0x9d,0x2e,0x9b,0x3f,0xf8,0x27,0x9b,0x57,0x01,0x38,0x2e,0x68,0x3b,0xa3,\r
-0xc3,0x28,0xa0,0x8c,0x1c,0x74,0xa2,0xbe,0x40,0xf2,0xc2,0x8a,0x28,0xa0,0x0f,0x6f,\r
-0xfd,0x9d,0xbc,0x6b,0x22,0xdc,0xcf,0xe1,0xcb,0x99,0x0b,0x46,0xca,0x67,0xb5,0xdc,\r
-0x7e,0xe9,0x1f,0x79,0x07,0xb1,0xeb,0xf8,0x1a,0xf7,0xba,0xf8,0xf7,0xe1,0x7d,0xe3,\r
-0xd8,0xfc,0x41,0xd0,0x64,0x8c,0xe0,0xb5,0xd2,0xc6,0x7e,0x8d,0xf2,0x9f,0xd1,0x8d,\r
-0x7d,0x84,0x2b,0xf5,0x6e,0x1c,0xc4,0x4a,0xb6,0x13,0x92,0x6f,0xe1,0x76,0xf9,0x1f,\r
-0x47,0x80,0xa8,0xe7,0x4a,0xcf,0xa0,0xb4,0x51,0x45,0x7d,0x51,0xe9,0x08,0x78,0xaf,\r
-0x9f,0xbf,0x6a,0x3b,0xbd,0x96,0x51,0xc7,0x9e,0x89,0xd2,0xbe,0x81,0x35,0xf3,0x27,\r
-0xed,0x4f,0x77,0xfe,0x90,0x23,0x07,0xf8,0x45,0x78,0x59,0xd4,0xb9,0x70,0x53,0x3c,\r
-0xac,0xce,0x5c,0xb8,0x59,0xb3,0xe5,0x3f,0x11,0x3e,0xdb,0x19,0x4f,0xfb,0x26,0xbb,\r
-0xef,0xf8,0x26,0x55,0x81,0xb9,0xf8,0x97,0xf1,0x53,0x53,0xed,0x0d,0xa5,0x8d,0xb0,\r
-0x3f,0xef,0xbc,0xcd,0xff,0x00,0xb2,0x0a,0xf3,0x8f,0x16,0xc9,0xe5,0xe9,0xb3,0x9f,\r
-0x45,0xaf,0x63,0xff,0x00,0x82,0x5b,0xdb,0x16,0xb7,0xf8,0xab,0x7d,0xb7,0x89,0x35,\r
-0x1b,0x38,0x43,0x7a,0xec,0x8a,0x42,0x7f,0xf4,0x3a,0xf2,0xb2,0x28,0xe8,0xd9,0xf9,\r
-0xdf,0x0d,0x47,0x9b,0x33,0x9c,0xbb,0x44,0xfb,0xb3,0x9a,0x29,0xd4,0x57,0xd9,0x1f,\r
-0xac,0x85,0x52,0xd5,0xb5,0x28,0x74,0x9d,0x36,0xee,0xfa,0xe0,0xed,0x82,0xda,0x26,\r
-0x99,0xcf,0xfb,0x2a,0x32,0x6a,0xed,0x78,0xaf,0xed,0x53,0xe3,0x0f,0xec,0x0f,0x87,\r
-0xab,0xa5,0xc3,0x26,0xdb,0xad,0x5e,0x61,0x09,0x00,0xe0,0xf9,0x4b,0xf3,0x48,0x7e,\r
-0x9f,0x75,0x7f,0xe0,0x55,0xcd,0x89,0xac,0xb0,0xf4,0x65,0x55,0xf4,0x47,0x26,0x2e,\r
-0xba,0xc2,0xd0,0x9d,0x67,0xd1,0x1f,0x26,0x78,0x83,0x5a,0xb8,0xf1,0x6f,0x89,0x2f,\r
-0xf5,0x4b,0x8c,0xb5,0xc5,0xf5,0xc3,0x4a,0x47,0xa6,0x4f,0x03,0xf0,0x18,0x1f,0x85,\r
-0x7d,0xbd,0xf0,0x4b,0xc2,0x63,0xc2,0x3f,0x0f,0xf4,0xeb,0x76,0x4d,0xb3,0xcc,0x82,\r
-0x69,0x78,0xc7,0x26,0xbe,0x43,0xf8,0x3b,0xe1,0x46,0xf1,0x77,0x8f,0x74,0xcb,0x3d,\r
-0xbb,0xa1,0x59,0x04,0x92,0x9f,0x45,0x1c,0xd7,0xde,0xf0,0xc4,0xb0,0xc2,0x91,0xa0,\r
-0xda,0xaa,0x00,0x03,0xda,0xbe,0x4f,0x21,0xa2,0xea,0x54,0xa9,0x89,0x9f,0xa7,0xdf,\r
-0xab,0x3e,0x57,0x87,0xa8,0x39,0x73,0xe2,0xa7,0xbb,0xfe,0x99,0x25,0x14,0x56,0x47,\r
-0x8b,0xfc,0x53,0xa7,0x78,0x1f,0xc2,0x9a,0xcf,0x88,0xb5,0x79,0xbe,0xcf,0xa5,0xe9,\r
-0x36,0x73,0x5f,0x5d,0x4b,0x8c,0xec,0x8a,0x34,0x2e,0xe7,0x1d,0xf8,0x53,0x5f,0x6a,\r
-0x7d,0xa9,0xaf,0x45,0x7e,0x2d,0xcd,0xff,0x00,0x05,0x91,0xf8,0xd2,0x35,0x2b,0x86,\r
-0xb6,0xd1,0x7c,0x20,0xd6,0x2d,0x2b,0x18,0x22,0x9e,0xc2,0x7f,0x31,0x63,0x2c,0x76,\r
-0xab,0x30,0x9c,0x02,0x40,0xc0,0xce,0x2b,0xf5,0x5f,0xf6,0x6a,0xf1,0xbf,0x8a,0xfe,\r
-0x25,0x7c,0x0e,0xf0,0x8f,0x8a,0xfc,0x6b,0x65,0x63,0xa6,0xf8,0x83,0x5a,0xb3,0x5b,\r
-0xf9,0x2d,0x34,0xe4,0x74,0x8a,0x38,0xa4,0x25,0xa1,0xe1,0xd9,0x8e,0x4c,0x65,0x09,\r
-0xc9,0xea,0x48,0xa0,0x49,0xdc,0xf9,0xef,0xfe,0x0a,0xb9,0xf1,0xa3,0xfe,0x15,0x97,\r
-0xec,0xc9,0x73,0xe1,0xfb,0x39,0x8c,0x7a,0xb7,0x8c,0x6e,0x06,0x96,0x81,0x7a,0x8b,\r
-0x60,0x37,0xdc,0x1f,0xa1,0x50,0x13,0xfe,0xda,0x57,0xe2,0x00,0xd4,0x6e,0xc5,0xab,\r
-0xdb,0x0b,0xa9,0x85,0xb3,0xfd,0xe8,0x44,0x87,0x63,0x73,0x9e,0x47,0x4e,0xa2,0xbf,\r
-0xa2,0x9f,0x8f,0x5f,0xb2,0x2f,0xc3,0x3f,0xda,0x5e,0xfb,0x4b,0xbc,0xf1,0xf6,0x95,\r
-0x77,0xaa,0xcd,0xa6,0x44,0xf0,0xda,0x79,0x3a,0x8c,0xd6,0xeb,0x12,0xb1,0xcb,0x7c,\r
-0xa8,0xc0,0x12,0x48,0x19,0x24,0x67,0x81,0xe9,0x5e,0x33,0x7d,0xff,0x00,0x04,0x93,\r
-0xfd,0x9e,0xae,0xff,0x00,0xd5,0x69,0x5a,0xed,0x97,0xfd,0x70,0xd6,0x24,0x3f,0xfa,\r
-0x1e,0xea,0x62,0x6a,0xe7,0xe1,0xa7,0x34,0xf8,0x66,0x92,0xde,0x41,0x24,0x4e,0xd1,\r
-0x48,0x3a,0x32,0x1c,0x11,0xf8,0xd7,0xed,0x36,0xa9,0xff,0x00,0x04,0x70,0xf8,0x23,\r
-0x78,0xa7,0xec,0x9a,0xb7,0x8b,0xb4,0xf2,0x7b,0xa5,0xfc,0x2f,0x8f,0xfb,0xea,0x13,\r
-0x5c,0x9d,0xff,0x00,0xfc,0x11,0x47,0xe1,0xf4,0xad,0xfe,0x85,0xf1,0x0f,0xc4,0xd6,\r
-0xe3,0xd2,0xe2,0xde,0xde,0x5f,0xe4,0xab,0x4e,0xe2,0xb3,0x3f,0x28,0xad,0x3e,0x21,\r
-0xf8,0xaa,0xc3,0x02,0xd7,0xc4,0xda,0xc5,0xb6,0x3a,0x08,0x6f,0xe5,0x4c,0x7e,0x4d,\r
-0x5f,0xb1,0x9f,0xf0,0x49,0x2f,0x0c,0x78,0x9e,0x4f,0x82,0x3a,0xbf,0x8e,0x7c,0x53,\r
-0xae,0xea,0xda,0xcc,0xbe,0x20,0xbe,0xf2,0x74,0xf4,0xd4,0xef,0x25,0x9c,0x43,0x6d,\r
-0x06,0x54,0xb2,0x07,0x63,0x8d,0xf2,0x17,0xe9,0xd7,0x60,0xaf,0x36,0xbe,0xff,0x00,\r
-0x82,0x23,0xe8,0x0e,0xa7,0xec,0x9f,0x15,0xb5,0x28,0x4f,0xfd,0x36,0xd1,0xa3,0x93,\r
-0xf9,0x4c,0xb5,0xfa,0x0f,0xf0,0x97,0xe1,0xbe,0x9f,0xf0,0x87,0xe1,0x9f,0x86,0x7c,\r
-0x19,0xa5,0xb6,0xfb,0x1d,0x12,0xc2,0x2b,0x28,0xe5,0x2b,0xb4,0xc9,0xb5,0x70,0xce,\r
-0x47,0x38,0x2c,0xd9,0x63,0xcf,0x52,0x69,0x31,0xa4,0xce,0x8f,0x55,0xd4,0x62,0xd2,\r
-0x74,0xdb,0xab,0xd9,0xdb,0x6c,0x36,0xf1,0x34,0xae,0x7d,0x94,0x64,0xd7,0xc5,0x5a,\r
-0xb6,0xa5,0x2e,0xb1,0xaa,0x5d,0xdf,0x4e,0x73,0x35,0xcc,0xad,0x2b,0x7d,0x49,0xcd,\r
-0x7d,0x6b,0xf1,0x2b,0xc3,0xba,0x97,0x8a,0xfc,0x29,0x73,0xa5,0x69,0x93,0x41,0x04,\r
-0xd7,0x0c,0xa1,0xde,0x76,0x65,0x1b,0x01,0xc9,0x03,0x00,0xf2,0x70,0x07,0xd0,0x9a,\r
-0xf1,0x39,0x7f,0x67,0x2f,0x13,0xa2,0x92,0xb7,0x3a,0x6c,0x87,0xd1,0x66,0x70,0x7f,\r
-0x54,0xaf,0x85,0xe2,0x1a,0x18,0xbc,0x5c,0xe1,0x0a,0x34,0xdb,0x8a,0xd7,0x4e,0xe7,\r
-0x93,0x8e,0x85,0x5a,0x8d,0x46,0x11,0xba,0x47,0x95,0xd1,0x5e,0x87,0x3f,0xc0,0x5f,\r
-0x18,0xc2,0x7e,0x5b,0x18,0x26,0xf7,0x4b,0x84,0xfe,0xa4,0x55,0x39,0x3e,0x0a,0x78,\r
-0xd2,0x3c,0x9f,0xec,0x46,0x61,0xfe,0xcd,0xc4,0x47,0xff,0x00,0x66,0xaf,0x89,0x79,\r
-0x6e,0x36,0x3b,0xd2,0x97,0xdc,0xcf,0x25,0xd0,0xaa,0xbe,0xcb,0x32,0xfe,0x1d,0xf8,\r
-0x7b,0xfe,0x12,0x8f,0x19,0xe9,0x76,0x0c,0x81,0xe1,0x69,0x44,0x92,0x83,0xd3,0xcb,\r
-0x5f,0x99,0x87,0xe2,0x06,0x3f,0x1a,0xfb,0x1c,0x70,0x05,0x78,0xcf,0xc0,0xaf,0x87,\r
-0x5a,0x9f,0x86,0x75,0x2d,0x47,0x51,0xd6,0x2c,0x9a,0xd2,0x7d,0x82,0x08,0x55,0xc8,\r
-0x24,0x82,0x72,0xc7,0x82,0x7d,0x14,0x7e,0x75,0xec,0xd5,0xfa,0x37,0x0f,0x61,0x25,\r
-0x86,0xc2,0xb9,0x54,0x56,0x94,0x9f,0xe5,0xa2,0x3d,0xdc,0x0d,0x27,0x4e,0x9d,0xda,\r
-0xd5,0x8b,0x45,0x14,0x57,0xd4,0x9e,0x89,0xe6,0x1f,0xb4,0x3c,0x7e,0x67,0xc3,0xfc,\r
-0xff,0x00,0x72,0xee,0x36,0xfd,0x18,0x7f,0x5a,0xf9,0x8e,0xbe,0xa7,0xf8,0xf7,0x1e,\r
-0xff,0x00,0x86,0xb7,0xed,0xfd,0xc9,0x61,0x6f,0xfc,0x88,0x07,0xf5,0xaf,0x96,0x33,\r
-0x5f,0x96,0x71,0x32,0xb6,0x35,0x3f,0xee,0xaf,0xcd,0x9f,0x3b,0x98,0x2f,0xde,0xdf,\r
-0xc8,0x28,0xa2,0x8a,0xf9,0x23,0xcc,0x3d,0x5f,0xf6,0x6f,0xb9,0x31,0xf8,0xd6,0xf2,\r
-0x1c,0xe1,0x64,0xb1,0x63,0x8f,0x52,0x1d,0x3f,0xc4,0xd7,0xd2,0x63,0xad,0x7c,0xa1,\r
-0xf0,0x42,0xf1,0xad,0x3e,0x25,0x69,0x4a,0xa7,0x0b,0x30,0x96,0x26,0xfa,0x79,0x6c,\r
-0x7f,0x98,0x15,0xf5,0x78,0xaf,0xd5,0x38,0x6a,0x7c,0xd8,0x2e,0x5e,0xcd,0xff,0x00,\r
-0x99,0xf4,0x78,0x07,0x7a,0x36,0xec,0xc5,0xa2,0x8a,0x2b,0xeb,0x0f,0x48,0x2a,0x3b,\r
-0x89,0xd2,0xda,0x09,0x25,0x91,0x82,0x47,0x1a,0x96,0x66,0x27,0x80,0x00,0xe4,0xd3,\r
-0xcd,0x70,0xff,0x00,0x19,0xb5,0xcf,0xec,0x4f,0x87,0xba,0xa1,0x5c,0x79,0xb7,0x4a,\r
-0x2d,0x14,0x1e,0xfb,0xf8,0x6f,0xfc,0x77,0x71,0xfc,0x2b,0x9f,0x11,0x59,0x50,0xa3,\r
-0x3a,0xaf,0xa2,0x6c,0x89,0xcb,0x92,0x2e,0x5d,0x8f,0x96,0xb5,0xbd,0x56,0x4d,0x73,\r
-0x59,0xbe,0xd4,0x65,0x1b,0x64,0xba,0x9d,0xe6,0x2b,0xfd,0xdd,0xc4,0x9c,0x7e,0x15,\r
-0x4a,0x8a,0x2b,0xf0,0x99,0xc9,0xce,0x4e,0x4f,0x76,0x7c,0x73,0x77,0x77,0x61,0x40,\r
-0x04,0x90,0x07,0x24,0xd1,0x5d,0x17,0xc3,0xcd,0x1b,0xfb,0x7f,0xc6,0xda,0x3d,0x91,\r
-0x5d,0xc8,0xf7,0x0a,0xee,0x3d,0x51,0x7e,0x66,0xfd,0x14,0xd5,0xd1,0xa6,0xeb,0x54,\r
-0x8d,0x35,0xbb,0x69,0x0e,0x31,0x72,0x92,0x8a,0xea,0x7d,0x59,0xe0,0x9d,0x10,0x78,\r
-0x77,0xc2,0x7a,0x56,0x9e,0x17,0x6b,0x43,0x6e,0x81,0xc7,0xfb,0x64,0x65,0xbf,0x52,\r
-0x6b,0x76,0x90,0x74,0x18,0xe9,0x4b,0x5f,0xbb,0xd3,0x82,0xa7,0x05,0x05,0xb2,0x56,\r
-0x3e,0xc6,0x2b,0x95,0x24,0x82,0x8a,0x28,0xad,0x0a,0x0a,0xc0,0xf1,0xcf,0x86,0x93,\r
-0xc5,0xde,0x16,0xd4,0x34,0xb6,0x21,0x5a,0x78,0xff,0x00,0x76,0xc7,0xa2,0xc8,0x0e,\r
-0x54,0x9f,0x6c,0x81,0x5b,0xf4,0x86,0xb3,0xa9,0x08,0xd5,0x83,0x84,0xb6,0x7a,0x0a,\r
-0x49,0x49,0x38,0xbe,0xa7,0xc3,0x57,0x56,0xb2,0xd9,0x5c,0xcb,0x6f,0x3c,0x6d,0x14,\r
-0xd1,0x39,0x8d,0xd1,0x86,0x0a,0xb0,0x38,0x20,0xd4,0x55,0xf4,0x07,0xc6,0xef,0x85,\r
-0x32,0xea,0x8c,0xfe,0x20,0xd1,0xe1,0x32,0x5d,0x01,0x9b,0xab,0x64,0x1c,0xc8,0x07,\r
-0xf1,0xa8,0xee,0x40,0xea,0x3b,0x8f,0x7e,0xbf,0x3f,0xd7,0xe2,0xd9,0x86,0x06,0xa6,\r
-0x02,0xb3,0xa7,0x3d,0xba,0x3e,0xeb,0xfa,0xdc,0xf9,0x3a,0xf4,0x65,0x46,0x7c,0xac,\r
-0x28,0xa2,0x8a,0xf3,0x0e,0x73,0xb3,0xf8,0x73,0xf1,0x3a,0xfb,0xe1,0xf5,0xe3,0x04,\r
-0x43,0x77,0xa7,0x4a,0x73,0x35,0xab,0x1c,0x73,0xfd,0xe5,0x3d,0x8f,0xf3,0xfc,0xb1,\r
-0xf4,0x3f,0x86,0xbe,0x2b,0xf8,0x67,0xc4,0xd1,0x21,0x87,0x52,0x8a,0xd6,0x72,0x39,\r
-0xb7,0xbb,0x61,0x13,0x83,0xe9,0xc9,0xc1,0xfc,0x09,0xaf,0x91,0x68,0xaf,0xa1,0xcb,\r
-0xf3,0xbc,0x46,0x02,0x3e,0xcd,0x7b,0xd1,0xec,0xfa,0x7a,0x33,0xba,0x8e,0x2e,0xa5,\r
-0x15,0xcb,0xba,0x3e,0xe7,0x8e,0xe2,0x29,0x90,0x3c,0x72,0x23,0xa1,0xe8,0xca,0xc0,\r
-0x83,0x54,0xf5,0x0d,0x7f,0x4c,0xd2,0x50,0xb5,0xee,0xa1,0x6b,0x68,0xa3,0xbc,0xd3,\r
-0x2a,0xff,0x00,0x33,0x5f,0x13,0x2c,0x8e,0x83,0x0a,0xcc,0xa3,0xd8,0xe2,0x9a,0x79,\r
-0x39,0x27,0x27,0xde,0xbd,0xd7,0xc5,0x52,0xb7,0xbb,0x47,0x5f,0x5f,0xf8,0x07,0x67,\r
-0xf6,0x93,0xe9,0x1f,0xc7,0xfe,0x01,0xf4,0x6f,0x8c,0x7f,0x68,0x5d,0x2b,0x4c,0x89,\r
-0xe1,0xd0,0xe3,0x3a,0xa5,0xd9,0xc8,0x13,0x30,0x29,0x0a,0x7e,0x7c,0xb7,0xe1,0xc1,\r
-0xf5,0xaf,0x03,0xd7,0xbc,0x41,0x7f,0xe2,0x6d,0x4a,0x5b,0xfd,0x46,0xe1,0xae,0x6e,\r
-0x64,0xea,0xcd,0xd0,0x0e,0xc0,0x0e,0xc0,0x7a,0x0a,0xce,0xa2,0xbe,0x5f,0x1d,0x9a,\r
-0x62,0x71,0xef,0xf7,0xaf,0x4e,0xcb,0x63,0xce,0xad,0x88,0xa9,0x5b,0xe2,0xd8,0x28,\r
-0xa2,0x8a,0xf2,0x4e,0x60,0xad,0x8f,0x09,0xf8,0x5e,0xf7,0xc6,0x1a,0xe5,0xbe,0x9b,\r
-0x62,0x84,0xc9,0x21,0xcb,0xc8,0x47,0xcb,0x1a,0x7f,0x13,0x1f,0x61,0xfa,0x9c,0x0e,\r
-0xf4,0x78,0x5f,0xc2,0x9a,0x97,0x8c,0x35,0x44,0xb1,0xd3,0x60,0x32,0xc8,0x7e,0xfb,\r
-0x9c,0x84,0x89,0x7f,0xbc,0xc7,0xb0,0xfd,0x7d,0x33,0x5f,0x54,0x7c,0x3e,0xf8,0x7f,\r
-0x63,0xe0,0x2d,0x24,0x41,0x6e,0x04,0xd7,0x72,0x00,0x6e,0x2e,0x98,0x61,0xa4,0x3f,\r
-0xd0,0x0e,0xc2,0xbe,0x8b,0x29,0xca,0x67,0x8f,0xa8,0xa7,0x35,0x6a,0x6b,0x77,0xdf,\r
-0xc9,0x1d,0xb8,0x6c,0x34,0xab,0xca,0xef,0xe1,0x35,0xbc,0x35,0xe1,0xeb,0x5f,0x0b,\r
-0x68,0xb6,0xba,0x65,0x92,0x95,0x82,0x04,0xda,0x09,0xea,0xc7,0xbb,0x1f,0x72,0x72,\r
-0x7f,0x1a,0xd4,0x14,0x52,0xd7,0xeb,0x70,0x84,0x69,0xc5,0x46,0x2a,0xc9,0x1f,0x4e,\r
-0x92,0x4a,0xc8,0xc7,0xf1,0x4f,0x8a,0x6c,0x7c,0x21,0xa5,0x9d,0x43,0x51,0x76,0x4b,\r
-0x60,0xe9,0x19,0x28,0xbb,0x8e,0x58,0xe3,0xa7,0xb7,0x5e,0x39,0xc0,0xa9,0x74,0x3f,\r
-0x12,0x69,0x9e,0x23,0xb5,0x17,0x1a,0x6d,0xf4,0x37,0x91,0x11,0x92,0x62,0x6c,0x95,\r
-0xfa,0x8e,0xa0,0xfb,0x1a,0xf1,0xdf,0xda,0x5f,0x5d,0xf9,0x74,0x8d,0x1d,0x1b,0xae,\r
-0xeb,0xa9,0x00,0x3f,0xf0,0x15,0xff,0x00,0xd9,0xab,0xc4,0x2c,0xaf,0xee,0x74,0xeb,\r
-0x85,0x9e,0xd2,0xe2,0x5b,0x69,0xd7,0xee,0xc9,0x0b,0x94,0x61,0xf8,0x8a,0xf8,0xec,\r
-0x77,0x10,0x3c,0x16,0x32,0x54,0x79,0x79,0xa2,0xad,0xeb,0x73,0xcb,0xad,0x8d,0xf6,\r
-0x55,0x5c,0x6d,0x74,0x7d,0xc7,0x9a,0x5a,0xf9,0x63,0x44,0xf8,0xf1,0xe2,0xbd,0x1c,\r
-0x2a,0x4d,0x71,0x16,0xa7,0x10,0xfe,0x1b,0xa8,0xf2,0xd8,0xff,0x00,0x79,0x70,0x7f,\r
-0x3c,0xd7,0x6f,0xa6,0x7e,0xd3,0x36,0xcc,0x48,0xd4,0x34,0x39,0xa2,0x03,0xf8,0xad,\r
-0xa6,0x0f,0x93,0xf4,0x60,0xbf,0xce,0xbb,0xe8,0xf1,0x0e,0x06,0xaa,0xf7,0xa4,0xe2,\r
-0xfc,0xd7,0xf9,0x5c,0xda,0x18,0xea,0x32,0xdd,0xd8,0xf6,0xfc,0xd1,0x9a,0xf3,0x1b,\r
-0x0f,0xda,0x1f,0xc2,0xb7,0x6a,0x0c,0xdf,0x6d,0xb1,0x3e,0x93,0x41,0x9f,0xfd,0x00,\r
-0xb5,0x5f,0x5f,0x8e,0xbe,0x0b,0x23,0xfe,0x42,0xce,0x3e,0xb6,0xb2,0xff,0x00,0xf1,\r
-0x35,0xe9,0x47,0x33,0xc1,0x4b,0x6a,0xb1,0xfb,0xcd,0xd6,0x22,0x93,0xda,0x48,0xef,\r
-0xe9,0x1d,0x82,0xa1,0x24,0x80,0x31,0xce,0x6b,0xcd,0xaf,0xff,0x00,0x68,0x1f,0x09,\r
-0x5a,0xc2,0xcd,0x0c,0xd7,0x37,0xcc,0x3f,0x82,0x1b,0x76,0x52,0x7f,0xef,0xbd,0xa3,\r
-0xf5,0xaf,0x35,0xf1,0xe7,0xc7,0xab,0xef,0x12,0x5a,0x4d,0xa7,0xe9,0x36,0xe7,0x4c,\r
-0xb2,0x94,0x15,0x92,0x56,0x6c,0xcc,0xeb,0xe9,0xc7,0x0b,0xef,0x8c,0xfd,0x6b,0x93,\r
-0x13,0x9d,0xe0,0xa8,0x41,0xb5,0x35,0x27,0xd9,0x6a,0x67,0x53,0x17,0x4a,0x0a,0xf7,\r
-0xb9,0xe7,0xbe,0x28,0x96,0x0b,0x8f,0x12,0xea,0xd2,0xda,0xe3,0xec,0xcf,0x77,0x2b,\r
-0x45,0xb7,0xa6,0xd2,0xe4,0x8c,0x7e,0x15,0x97,0x45,0x15,0xf9,0x04,0xe5,0xcf,0x37,\r
-0x2e,0xee,0xe7,0xcb,0xb7,0x77,0x70,0xa2,0x8a,0x2a,0x04,0x75,0xff,0x00,0x08,0xf4,\r
-0xf6,0xd4,0xbe,0x22,0xe8,0x88,0x01,0xc4,0x73,0x79,0xc4,0x8e,0xc1,0x14,0xb7,0xf4,\r
-0xaf,0xae,0xc7,0x4a,0xf0,0x7f,0xd9,0xbf,0xc2,0xac,0x64,0xbe,0xf1,0x04,0xc9,0x85,\r
-0xdb,0xf6,0x6b,0x72,0x47,0x5e,0xee,0x7f,0x40,0x3f,0x3a,0xf7,0x81,0xd2,0xbf,0x57,\r
-0xe1,0xcc,0x3b,0xa3,0x82,0xe7,0x97,0xda,0x77,0xf9,0x74,0x3e,0x93,0x03,0x07,0x1a,\r
-0x57,0x7d,0x45,0xa2,0x8a,0x2b,0xea,0x4f,0x44,0x69,0xaf,0x92,0xff,0x00,0x69,0xfb,\r
-0xbf,0x33,0x5a,0x74,0xce,0x70,0xd5,0xf5,0xab,0x74,0xaf,0x8c,0x7f,0x68,0xdb,0xbf,\r
-0x3b,0xc4,0xb2,0x8c,0xff,0x00,0x19,0xaf,0x99,0xcf,0xdd,0xb0,0xb6,0xee,0xd1,0xe0,\r
-0x67,0x72,0xe5,0xc2,0x48,0xf9,0xcb,0xc7,0x32,0xec,0xd2,0x67,0x3d,0x3e,0x5a,0xfa,\r
-0x47,0xfe,0x09,0x79,0xa6,0x88,0x7e,0x0f,0xf8,0xbb,0x50,0xc7,0xcd,0x77,0xe2,0x39,\r
-0x57,0x38,0xec,0x90,0x42,0x07,0xea,0x4d,0x7c,0xc3,0xf1,0x1e,0x5f,0x2f,0x46,0x9c,\r
-0xe7,0xb1,0xfe,0x55,0xf5,0xff,0x00,0xfc,0x13,0x53,0x4f,0x36,0x9f,0xb3,0x2c,0x17,\r
-0x24,0x63,0xed,0xda,0xcd,0xf5,0xc0,0x3e,0xb8,0x93,0xcb,0xff,0x00,0xda,0x75,0x9e,\r
-0x47,0x1b,0x53,0xb9,0xf1,0xbc,0x27,0x1b,0xe2,0xeb,0xcf,0xc9,0x1f,0x55,0x51,0x45,\r
-0x15,0xf5,0x47,0xea,0x21,0x5f,0x13,0x7e,0xd3,0x3e,0x2f,0x3e,0x27,0xf8,0x9b,0x71,\r
-0x68,0x8e,0x4d,0xa6,0x92,0x9f,0x64,0x41,0xdb,0x7f,0x59,0x0f,0xe7,0x81,0xff,0x00,\r
-0x01,0xaf,0xae,0xbc,0x73,0xe2,0x68,0x7c,0x1d,0xe1,0x2d,0x57,0x59,0x9b,0x1b,0x6c,\r
-0xe0,0x69,0x14,0x1f,0xe2,0x7c,0x61,0x57,0xf1,0x62,0x07,0xe3,0x5f,0x9f,0x28,0x2e,\r
-0x75,0xcd,0x57,0x74,0x8c,0xd3,0x5d,0x5d,0xcc,0x59,0x98,0xf2,0x59,0xd9,0xb2,0x4f,\r
-0xe6,0x6b,0xe4,0xb8,0x83,0x11,0xcb,0x4e,0x34,0x23,0xbb,0xd7,0xfa,0xf9,0x9f,0x1b,\r
-0xc4,0x58,0x87,0xc9,0x0c,0x34,0x77,0x93,0xbb,0xf4,0xff,0x00,0x87,0x3e,0x96,0xfd,\r
-0x92,0x7c,0x1f,0xe4,0xd9,0xdf,0x6b,0xf2,0xa6,0x0c,0x87,0xc9,0x88,0x91,0xdb,0xb9,\r
-0xaf,0xa3,0xeb,0x97,0xf8,0x6f,0xe1,0xa4,0xf0,0x97,0x83,0x74,0xcd,0x39,0x54,0x2b,\r
-0x47,0x10,0x2f,0x8e,0xec,0x7a,0xd7,0x51,0x5e,0xde,0x5d,0x87,0xfa,0xb6,0x1a,0x14,\r
-0xfa,0xf5,0xf5,0x3e,0x8f,0x03,0x87,0x58,0x5c,0x3c,0x29,0x76,0x41,0x5f,0x0c,0x7f,\r
-0xc1,0x5c,0xbe,0x35,0x9f,0x87,0x7f,0xb3,0xbc,0x3e,0x0f,0xb2,0x9b,0xcb,0xd5,0x3c,\r
-0x65,0x75,0xf6,0x56,0xda,0xd8,0x65,0xb4,0x88,0xac,0x93,0x1f,0x70,0xc7,0xcb,0x42,\r
-0x3b,0x87,0x6f,0x4a,0xfb,0x9e,0xbf,0x23,0xff,0x00,0xe0,0xb6,0x56,0x5a,0x90,0xf8,\r
-0x89,0xf0,0xd6,0xf2,0x48,0xdc,0xe9,0x07,0x4a,0xb9,0x8a,0x17,0xc7,0xc8,0x26,0x13,\r
-0x29,0x90,0x7d,0x76,0x98,0xff,0x00,0x2a,0xf4,0xd1,0xdc,0xcf,0x86,0xbf,0x67,0xbf,\r
-0x04,0xe9,0xbf,0x12,0x7e,0x39,0x78,0x17,0xc3,0x3a,0xcd,0xe4,0x76,0x1a,0x56,0xa9,\r
-0xac,0x5b,0xdb,0x5d,0x4f,0x2b,0x05,0x51,0x19,0x71,0xb8,0x64,0xf7,0x61,0xf2,0x8f,\r
-0x72,0x2b,0xfa,0x16,0xf8,0xcd,0xf1,0x1b,0x4e,0xf8,0x1d,0xf0,0x6f,0xc5,0x1e,0x2e,\r
-0x9e,0x38,0xe3,0xb4,0xd0,0x34,0xc9,0x27,0x86,0xd9,0x70,0x81,0xdd,0x53,0x11,0x44,\r
-0xbd,0x86,0xe6,0xda,0xa0,0x7b,0xd7,0xf3,0x4e,0xac,0x51,0x83,0x29,0x2a,0xc0,0xe4,\r
-0x11,0xd4,0x57,0x5f,0xaa,0xfc,0x62,0xf1,0xde,0xbb,0xe1,0x97,0xf0,0xee,0xa7,0xe3,\r
-0x2d,0x7b,0x51,0xd0,0x5f,0x6e,0xed,0x32,0xeb,0x52,0x9a,0x5b,0x73,0xb4,0x86,0x5c,\r
-0xc6,0xcc,0x47,0x04,0x02,0x38,0xe3,0x14,0xc8,0x4e,0xc7,0x77,0xe1,0x9f,0xda,0x7f,\r
-0xe3,0xb6,0xb5,0xe2,0xab,0x6b,0x5d,0x23,0xe2,0x6f,0x8b,0x5b,0x55,0xd5,0x2f,0x16,\r
-0x28,0xa1,0x4d,0x5a,0x72,0xad,0x2c,0x8f,0x85,0x01,0x4b,0x60,0x0c,0xb7,0x40,0x31,\r
-0x5f,0xd0,0x5f,0xc3,0xcd,0x07,0x50,0xf0,0xbf,0x81,0x74,0x0d,0x27,0x55,0xd4,0xae,\r
-0x35,0x9d,0x52,0xce,0xc6,0x18,0x6f,0x35,0x0b,0xa9,0x0c,0x92,0x5c,0xcc,0x10,0x79,\r
-0x92,0x33,0x1e,0x4e,0x5b,0x26,0xbf,0x99,0xff,0x00,0x09,0xf8,0xaf,0x55,0xf0,0x37,\r
-0x89,0x34,0xed,0x7f,0x43,0xbc,0x6d,0x3f,0x58,0xd3,0xa7,0x5b,0x9b,0x5b,0xa4,0x55,\r
-0x66,0x8a,0x45,0x39,0x56,0x01,0x81,0x19,0x1e,0xe2,0xbe,0x84,0xd3,0x3f,0xe0,0xa5,\r
-0x1f,0xb4,0x76,0x95,0xf7,0x3e,0x24,0x5c,0x4e,0x3d,0x2e,0xb4,0xfb,0x49,0x7f,0xf4,\r
-0x28,0x8d,0x0c,0x69,0x9f,0xbf,0xd4,0x57,0xe1,0x66,0x99,0xff,0x00,0x05,0x62,0xfd,\r
-0xa1,0xec,0x17,0x12,0xeb,0xda,0x46,0xa1,0xef,0x73,0xa4,0x42,0x3f,0xf4,0x00,0xb5,\r
-0xbf,0x63,0xff,0x00,0x05,0x87,0xf8,0xed,0x6b,0x81,0x35,0x9f,0x84,0xaf,0x3f,0xeb,\r
-0xae,0x99,0x2a,0x9f,0xfc,0x76,0x61,0x4a,0xc5,0x5d,0x1f,0xb6,0x94,0x57,0x86,0xfe,\r
-0xc6,0x7f,0x16,0x3c,0x69,0xf1,0xc7,0xe0,0x3e,0x8b,0xe3,0x8f,0x1c,0x58,0xe9,0xba,\r
-0x6e,0xa3,0xac,0x49,0x2c,0xd6,0xb6,0xfa,0x64,0x4f,0x1c,0x7f,0x66,0x0d,0xb5,0x18,\r
-0x87,0x76,0x39,0x62,0xac,0x7a,0xe3,0x05,0x7f,0x1f,0x4a,0xf8,0xa1,0xe3,0xfd,0x3f,\r
-0xe1,0x67,0xc3,0xbf,0x12,0x78,0xbf,0x54,0x60,0x2c,0x34,0x4b,0x09,0xaf,0xa5,0x05,\r
-0xb1,0xbf,0x62,0x92,0x14,0x7b,0xb1,0xc2,0x8f,0x72,0x29,0x0c,0xea,0x28,0xaf,0xcb,\r
-0xad,0x3b,0xfe,0x0b,0x77,0x64,0x42,0x8b,0xef,0x84,0xd3,0xab,0x77,0xfb,0x3e,0xb8,\r
-0x0f,0xf3,0x80,0x57,0x61,0xa5,0x7f,0xc1,0x6a,0xfe,0x1b,0xcb,0x1e,0x75,0x2f,0x00,\r
-0x78,0xa6,0xd2,0x4f,0xee,0xda,0xbd,0xb4,0xe3,0xf3,0x69,0x13,0xf9,0x53,0xb0,0xae,\r
-0x8f,0xd1,0x5a,0x2b,0xe0,0x5b,0x4f,0xf8,0x2c,0xef,0xc1,0x89,0xb1,0xe7,0x78,0x6b,\r
-0xc6,0xb6,0xe7,0xd3,0xec,0x56,0xad,0xfc,0xae,0x2b,0xab,0xd1,0xbf,0xe0,0xad,0xdf,\r
-0xb3,0xe6,0xa6,0xa0,0xdd,0x6a,0x9a,0xee,0x90,0x7d,0x2f,0x34,0x89,0x1b,0x1f,0xf7,\r
-0xe8,0xbd,0x01,0x74,0x7d,0x9f,0x45,0x7c,0xa7,0x69,0xff,0x00,0x05,0x44,0xfd,0x9b,\r
-0x6e,0x80,0x27,0xe2,0x04,0x90,0x67,0xfe,0x7a,0xe8,0xb7,0xe3,0xf9,0x42,0x6b,0xa6,\r
-0xd2,0xff,0x00,0xe0,0xa0,0xbf,0xb3,0xce,0xae,0x14,0xc3,0xf1,0x4f,0x46,0x8b,0x77,\r
-0x41,0x74,0xb3,0x40,0x7f,0xf1,0xf4,0x14,0x87,0x73,0xe8,0x6a,0x2b,0xc9,0xf4,0xff,\r
-0x00,0xda,0xcb,0xe0,0xb6,0xa8,0xa1,0xad,0xfe,0x2b,0xf8,0x35,0x81,0xec,0xfa,0xe5,\r
-0xba,0x1f,0xc9,0x9c,0x56,0xfd,0x97,0xc7,0x5f,0x86,0xda,0x96,0x3e,0xc9,0xf1,0x07,\r
-0xc2,0xd7,0x39,0xe9,0xe5,0x6b,0x56,0xcd,0x9f,0xc9,0xe8,0x03,0xb4,0x9a,0x08,0xe7,\r
-0x52,0x92,0x22,0xc8,0x87,0xaa,0xb0,0xc8,0x3f,0x85,0x50,0x9f,0xc3,0x3a,0x3d,0xcf,\r
-0xfa,0xed,0x2e,0xce,0x5f,0xf7,0xed,0xd0,0xff,0x00,0x4a,0x76,0x9f,0xe2,0x4d,0x27,\r
-0x56,0x8c,0x49,0x63,0xa9,0xd9,0x5e,0xc6,0x79,0x0d,0x6f,0x70,0x92,0x03,0xf9,0x13,\r
-0x5a,0x0a,0xe1,0x86,0x41,0x04,0x7a,0x83,0x51,0x28,0x46,0x5f,0x12,0xb8,0x9a,0x4f,\r
-0x74,0x73,0xf3,0x7c,0x3c,0xf0,0xc5,0xc7,0x32,0x78,0x7f,0x4e,0x3f,0xf6,0xea,0x83,\r
-0xfa,0x55,0x49,0x7e,0x15,0x78,0x46,0x51,0xce,0x81,0x66,0xbf,0xee,0x47,0xb7,0xf9,\r
-0x57,0x59,0x9a,0x5a,0xc2,0x58,0x5a,0x12,0xde,0x0b,0xee,0x44,0x3a,0x70,0x7b,0xc5,\r
-0x1c,0x8e,0x9d,0xf0,0xaf,0xc2,0xfa,0x4e,0xa5,0x6f,0x7f,0x65,0xa5,0xad,0xbd,0xd4,\r
-0x0d,0xba,0x37,0x49,0x5f,0x83,0xd3,0xa6,0x71,0x5d,0x68,0xeb,0x4b,0x45,0x69,0x4e,\r
-0x8d,0x3a,0x2a,0xd4,0xe2,0x92,0xf2,0x2a,0x31,0x8c,0x34,0x8a,0xb0,0x51,0x45,0x15,\r
-0xb1,0x42,0x1a,0xe2,0x7e,0x28,0x7c,0x3c,0x9b,0xe2,0x1d,0x85,0x9d,0xaa,0x6a,0x22,\r
-0xc2,0x3b,0x79,0x0c,0xa5,0x4c,0x3e,0x66,0xf6,0xc6,0x07,0xf1,0x0c,0x63,0x27,0xd7,\r
-0xad,0x76,0xf4,0x56,0x15,0xe8,0x43,0x13,0x4d,0xd2,0xa8,0xaf,0x17,0xb9,0x13,0x82,\r
-0xa9,0x17,0x19,0x6c,0x7c,0xf5,0x37,0xec,0xcd,0xaa,0x2e,0x7c,0x9d,0x66,0xd1,0xff,\r
-0x00,0xdf,0x8d,0x97,0xfc,0x6a,0x93,0xfe,0xcd,0xbe,0x23,0x19,0xd9,0x7d,0xa6,0xb7,\r
-0xd6,0x49,0x07,0xfe,0xc9,0x5f,0x49,0x51,0x5e,0x0b,0xe1,0xdc,0xbd,0xfd,0x97,0xf7,\r
-0xb3,0x8d,0xe0,0x68,0xbe,0x9f,0x89,0xf3,0x1c,0xff,0x00,0xb3,0xbf,0x8a,0xa2,0x52,\r
-0x55,0xf4,0xf9,0x88,0xfe,0x14,0x9c,0x8f,0xe6,0xa2,0xbb,0x0f,0x83,0x7f,0x0a,0xb5,\r
-0x8f,0x0a,0x78,0x9a,0x7d,0x4b,0x57,0x82,0x38,0x55,0x20,0x31,0xc3,0xb6,0x45,0x7d,\r
-0xcc,0xc4,0x64,0xf0,0x78,0xc0,0x18,0xfc,0x6b,0xdb,0x28,0xaa,0xa1,0x90,0xe1,0x30,\r
-0xd5,0x63,0x5a,0x17,0xbc,0x7c,0xc2,0x18,0x2a,0x54,0xe4,0xa4,0xaf,0xa0,0x51,0x45,\r
-0x15,0xf4,0x67,0x78,0x51,0x45,0x14,0x00,0x51,0x45,0x14,0x00,0x87,0x9a,0xf2,0xef,\r
-0x88,0x7f,0x03,0xac,0x3c,0x55,0x24,0x97,0xda,0x63,0xa6,0x9b,0xa9,0xb6,0x59,0xb8,\r
-0xfd,0xd4,0xc7,0xd5,0x80,0xe8,0x7d,0xc7,0xe4,0x6b,0xd4,0xa8,0xae,0x4c,0x4e,0x16,\r
-0x8e,0x2e,0x1e,0xce,0xb4,0x6e,0x8c,0xea,0x53,0x8d,0x55,0xcb,0x35,0x73,0xe3,0x1f,\r
-0x13,0x78,0x1f,0x5b,0xf0,0x84,0xc5,0x35,0x4b,0x09,0x20,0x8f,0x38,0x13,0xaf,0xcd,\r
-0x13,0x7d,0x18,0x71,0xf8,0x75,0xf6,0xac,0x2a,0xfb,0x9e,0x68,0x52,0x78,0xca,0x48,\r
-0xaa,0xe8,0x78,0x2a,0xc3,0x20,0xd7,0x15,0xae,0x7c,0x18,0xf0,0x9e,0xb8,0x59,0xdf,\r
-0x4d,0x5b,0x49,0x4f,0xfc,0xb4,0xb3,0x6f,0x2b,0xf4,0x1f,0x2f,0xe9,0x5f,0x0f,0x8a,\r
-0xe1,0x79,0x5e,0xf8,0x69,0xfc,0x9f,0xf9,0xa3,0xc7,0xa9,0x97,0x3d,0xe9,0xbf,0xbc,\r
-0xf9,0x36,0x8a,0xf7,0xed,0x43,0xf6,0x65,0xb2,0x91,0x89,0xb0,0xd6,0xe7,0x85,0x7b,\r
-0x2d,0xc4,0x2b,0x27,0xea,0x0a,0xd6,0x0d,0xcf,0xec,0xd5,0xad,0x23,0x91,0x06,0xa9,\r
-0x63,0x2a,0xf6,0x32,0x07,0x43,0xfa,0x03,0x5e,0x0c,0xf2,0x2c,0xc2,0x0f,0xf8,0x77,\r
-0xf4,0x68,0xe3,0x78,0x3a,0xeb,0xec,0x9e,0x3f,0x45,0x7a,0xb1,0xfd,0x9b,0xfc,0x4b,\r
-0xda,0xf7,0x4b,0x3f,0xf6,0xd6,0x4f,0xfe,0x22,0x9e,0x9f,0xb3,0x6f,0x88,0xc9,0xf9,\r
-0xef,0xb4,0xd5,0x1e,0xd2,0x48,0x7f,0xf6,0x4a,0xc1,0x64,0xf8,0xf7,0xff,0x00,0x2e,\r
-0x99,0x1f,0x55,0xad,0xfc,0xac,0xf2,0x6a,0x2b,0xdb,0x74,0xff,0x00,0xd9,0x9a,0xe9,\r
-0xb9,0xbd,0xd7,0x22,0x8f,0xd5,0x60,0xb7,0x2f,0xfa,0x92,0x3f,0x95,0x75,0x9a,0x3f,\r
-0xec,0xf3,0xe1,0x9b,0x0c,0x35,0xdb,0x5d,0x6a,0x4c,0x3b,0x4b,0x26,0xc4,0xfc,0x97,\r
-0x07,0xf5,0xae,0xda,0x5c,0x3d,0x8f,0xa8,0xf5,0x8a,0x8f,0xab,0xff,0x00,0x2b,0x9a,\r
-0xc7,0x03,0x5a,0x5b,0xab,0x1f,0x36,0x59,0xd9,0x5c,0x6a,0x17,0x09,0x05,0xac,0x12,\r
-0xdc,0xcc,0xe7,0x0b,0x1c,0x28,0x59,0x8f,0xd0,0x0a,0xf5,0x5f,0x05,0xfe,0xcf,0x9a,\r
-0x9e,0xaa,0xd1,0xdc,0xeb,0xb2,0x7f,0x66,0x5a,0x13,0x9f,0x21,0x08,0x69,0xd8,0x7e,\r
-0xa1,0x7f,0x1c,0x9f,0x6a,0xf7,0xdd,0x1f,0xc3,0xba,0x6f,0x87,0xe1,0x31,0x69,0xd6,\r
-0x36,0xf6,0x51,0x9e,0xa2,0x18,0xc2,0xe7,0xeb,0xeb,0x5a,0x75,0xf4,0xd8,0x3e,0x19,\r
-0xa3,0x49,0xa9,0xe2,0x25,0xcc,0xfb,0x6c,0xbf,0xcd,0x9e,0x85,0x2c,0xbe,0x31,0xd6,\r
-0xa3,0xb9,0x93,0xe1,0xdf,0x0c,0xe9,0xbe,0x15,0xd3,0xd6,0xcf,0x4c,0xb5,0x4b,0x58,\r
-0x47,0x5d,0xbf,0x79,0xcf,0xab,0x1e,0xa4,0xfd,0x6b,0x54,0x74,0xa5,0xa2,0xbe,0xca,\r
-0x10,0x8d,0x38,0xa8,0xc1,0x59,0x23,0xd5,0x49,0x45,0x59,0x05,0x35,0xba,0x73,0x4e,\r
-0xa8,0x2f,0x56,0x66,0xb5,0x98,0x40,0x50,0x4f,0xb0,0xf9,0x65,0xfe,0xee,0xec,0x71,\r
-0x9f,0x6c,0xd5,0x3d,0x15,0xc6,0x7c,0x99,0xf1,0x6f,0x5d,0xfe,0xdf,0xf1,0xfe,0xab,\r
-0x32,0xb6,0xe8,0xa1,0x93,0xec,0xd1,0xf3,0x9e,0x13,0x83,0x8f,0xab,0x6e,0x3f,0x8d,\r
-0x71,0xd5,0xdd,0x6b,0xff,0x00,0x06,0x7c,0x5b,0xa3,0xb4,0x92,0x35,0x81,0xd4,0x50,\r
-0x1c,0x99,0xac,0xdb,0xcc,0x2d,0xef,0xb7,0xef,0x7e,0x95,0xc5,0xde,0xd9,0x5c,0x69,\r
-0xb3,0x18,0x6e,0xed,0xe5,0xb5,0x98,0x75,0x8e,0x64,0x28,0xdf,0x91,0xe6,0xbf,0x11,\r
-0xc6,0xd2,0xc4,0x2a,0xd3,0xa9,0x5e,0x0d,0x36,0xdb,0xd5,0x1f,0x23,0x5a,0x33,0xe7,\r
-0x72,0x92,0xdc,0x86,0x8a,0x28,0xaf,0x38,0xc0,0x28,0xa2,0x8a,0x00,0x28,0xa2,0x8a,\r
-0x00,0x28,0xa2,0xae,0xe9,0x5a,0x26,0xa1,0xae,0xcf,0xe4,0xe9,0xd6,0x53,0xde,0xcb,\r
-0xdd,0x60,0x42,0xd8,0xf7,0x38,0xe9,0xf8,0xd5,0x46,0x32,0x9b,0xe5,0x8a,0xbb,0x1a,\r
-0x4d,0xe8,0x8a,0x55,0xd4,0x78,0x03,0xc0,0x17,0xfe,0x3d,0xd5,0xd6,0xde,0xdd,0x5a,\r
-0x2b,0x38,0xc8,0x37,0x17,0x44,0x7c,0xb1,0xaf,0xa0,0xf5,0x63,0xd8,0x7f,0x4a,0xef,\r
-0xbc,0x1b,0xfb,0x3b,0xde,0xdd,0xba,0x5c,0x78,0x86,0x71,0x67,0x00,0xe4,0xda,0x40,\r
-0xc1,0xa4,0x6f,0x62,0xc3,0x81,0xf8,0x67,0xf0,0xaf,0x76,0xd1,0x74,0x5b,0x1f,0x0f,\r
-0xd8,0x47,0x65,0xa7,0xdb,0x25,0xad,0xb4,0x63,0xe5,0x44,0x1f,0xa9,0xf5,0x3e,0xe6,\r
-0xbe,0xc3,0x2c,0xe1,0xfa,0xb5,0xa4,0xaa,0x62,0x97,0x2c,0x7b,0x75,0x7f,0xe4,0x7a,\r
-0x98,0x7c,0x14,0xa4,0xd4,0xaa,0x68,0x83,0x45,0xd1,0xad,0x74,0x0d,0x32,0xdb,0x4f,\r
-0xb2,0x8c,0x45,0x6d,0x02,0x04,0x45,0xf6,0xf5,0x3e,0xa4,0xfa,0xd5,0xe1,0x4b,0x45,\r
-0x7e,0x99,0x18,0xa8,0x25,0x18,0xec,0x8f,0x7d,0x24,0x95,0x90,0x51,0x45,0x15,0x43,\r
-0x1b,0x21,0xdb,0x1b,0x1f,0x40,0x4d,0x7c,0x35,0xf1,0xd6,0xeb,0xcf,0xf1,0x4c,0xbc,\r
-0xe7,0xe6,0x26,0xbe,0xe0,0xbe,0x7f,0x2e,0xce,0x76,0x3d,0x90,0x9f,0xd2,0xbe,0x0b,\r
-0xf8,0xbb,0x38,0x9f,0xc5,0x13,0xfd,0x4f,0xf3,0xaf,0x91,0xe2,0x19,0x5a,0x9d,0x38,\r
-0xf7,0x67,0xcb,0x71,0x0c,0xad,0x86,0xb1,0xe0,0x5f,0x15,0xe7,0xf2,0xb4,0x59,0xb9,\r
-0xec,0x7f,0x95,0x7d,0xeb,0xfb,0x03,0x69,0xbf,0xd9,0xdf,0xb2,0x7f,0x81,0x7d,0x6e,\r
-0x23,0xb8,0xb9,0x38,0xff,0x00,0x6e,0xe2,0x53,0x5f,0x9f,0x7f,0x19,0x26,0x11,0xe8,\r
-0x92,0xf3,0x8f,0x94,0xff,0x00,0x2a,0xfd,0x29,0xfd,0x90,0xec,0x06,0x9b,0xfb,0x31,\r
-0x7c,0x33,0x84,0x2e,0xdc,0xe8,0x76,0xd2,0x90,0x7d,0x5d,0x77,0x9f,0xd5,0xab,0xb3,\r
-0x26,0x56,0xa2,0x78,0x1c,0x1f,0x1b,0xfb,0x79,0xf9,0xa3,0xd7,0xa8,0xa2,0x8a,0xfa,\r
-0x23,0xf4,0x83,0xe7,0x5f,0xda,0xf7,0xc6,0x0d,0x69,0xa2,0xe9,0x5e,0x1c,0x81,0xf0,\r
-0x6f,0x64,0x37,0x37,0x00,0x7f,0x71,0x3e,0xe8,0x3f,0x56,0x39,0xff,0x00,0x80,0xd7,\r
-0x94,0x7e,0xcf,0x3e,0x12,0xff,0x00,0x84,0xa3,0xe2,0x15,0xa3,0x3a,0x6e,0xb7,0xb3,\r
-0xfd,0xfb,0xfa,0x71,0xd2,0xb2,0x7e,0x36,0xf8,0xb1,0xbc,0x65,0xf1,0x33,0x5a,0xbb,\r
-0x0f,0xbe,0xda,0xde,0x53,0x67,0x6f,0xce,0x40,0x48,0xf2,0x38,0xfa,0xb6,0xe3,0xf8,\r
-0xd7,0xd0,0x7f,0xb2,0xb7,0x84,0x46,0x93,0xe1,0x29,0xf5,0x79,0x53,0x13,0xde,0xbe,\r
-0x14,0x91,0xfc,0x03,0xff,0x00,0xaf,0x5f,0x01,0xff,0x00,0x23,0x1c,0xd3,0xfb,0xa9,\r
-0xfe,0x0b,0xfc,0xd9,0xf9,0xfd,0x2f,0xf8,0x52,0xcd,0x5c,0xf7,0x8c,0x7f,0x25,0xff,\r
-0x00,0x04,0xf7,0x30,0x30,0x00,0xe9,0x4b,0x48,0x29,0x6b,0xef,0xcf,0xd0,0x02,0xbc,\r
-0xff,0x00,0xe3,0x67,0xc0,0x9f,0x05,0xfe,0xd0,0x9e,0x0c,0x97,0xc3,0x1e,0x37,0xd1,\r
-0xe3,0xd5,0xb4,0xd2,0xe2,0x58,0x9b,0x71,0x49,0xad,0xe5,0x00,0x81,0x24,0x4e,0x39,\r
-0x46,0xc1,0x23,0x8e,0xa0,0x90,0x72,0x09,0x15,0xe8,0x14,0x50,0x07,0xe6,0x47,0x8d,\r
-0x3f,0xe0,0x89,0xda,0x1d,0xc5,0xc3,0x4b,0xe1,0x5f,0x89,0xb7,0xfa,0x7c,0x1c,0x9f,\r
-0x23,0x57,0xd3,0x92,0xe5,0x87,0xfd,0xb4,0x47,0x8f,0xff,0x00,0x41,0xaf,0xcb,0x8f,\r
-0x1b,0x68,0x56,0x5e,0x17,0xf1,0x86,0xb5,0xa3,0xe9,0xda,0xb4,0x7a,0xf5,0x8e,0x9f,\r
-0x79,0x2d,0xac,0x3a,0x9c,0x31,0x98,0xe3,0xba,0x54,0x72,0xa2,0x55,0x52,0x49,0x0a,\r
-0xd8,0xc8,0xe7,0xa1,0xaf,0xe9,0x9b,0xc6,0x1a,0x1d,0xc7,0x89,0x7c,0x2b,0xac,0x69,\r
-0x16,0x9a,0x94,0xba,0x35,0xcd,0xfd,0x9c,0xb6,0xb1,0xea,0x10,0x20,0x69,0x2d,0x99,\r
-0xd0,0xa8,0x91,0x01,0xe0,0xb2,0xe7,0x23,0x3c,0x64,0x0a,0xfc,0xdd,0xd4,0x3f,0xe0,\r
-0x89,0x1a,0x41,0x95,0x5a,0xc7,0xe2,0x9d,0xea,0xc6,0x18,0x12,0x97,0x3a,0x42,0x31,\r
-0x23,0xb8,0xca,0xca,0x3f,0x95,0x3b,0x92,0xd1,0xf2,0x97,0xc2,0x7f,0xf8,0x26,0x5f,\r
-0xc6,0x3f,0x8c,0xbf,0x0d,0x34,0x4f,0x1b,0xe8,0x03,0x41,0x87,0x4b,0xd5,0xe2,0x69,\r
-0xad,0xed,0xf5,0x0b,0xd7,0x86,0xe3,0x60,0x76,0x50,0xc5,0x7c,0xb2,0x30,0xdb,0x77,\r
-0x0e,0x79,0x04,0x1a,0xd3,0xbc,0xff,0x00,0x82,0x4e,0x7e,0xd1,0x16,0xa4,0x88,0xf4,\r
-0x0d,0x1e,0xe8,0x0e,0xf0,0xeb,0x30,0x8c,0xff,0x00,0xdf,0x44,0x57,0xed,0xff,0x00,\r
-0x85,0x7c,0x35,0x63,0xe0,0xdf,0x0c,0xe9,0x3a,0x06,0x99,0x17,0x91,0xa6,0xe9,0x76,\r
-0x91,0x59,0x5a,0xc5,0x9c,0xec,0x8a,0x34,0x08,0x83,0xf2,0x51,0x5a,0xb4,0x5c,0x2c,\r
-0x8f,0xc0,0x4d,0x47,0xfe,0x09,0xa7,0xfb,0x47,0x69,0xcc,0xc0,0xfc,0x38,0x9a,0xe5,\r
-0x57,0xf8,0xad,0xb5,0x1b,0x47,0x07,0xe9,0xfb,0xdc,0x9a,0xc6,0xd1,0xbf,0x60,0x7f,\r
-0x8e,0xf7,0xde,0x25,0xd3,0x34,0xbb,0xcf,0x86,0x7e,0x20,0xb0,0x86,0xea,0xee,0x2b,\r
-0x79,0x6f,0x5e,0xd7,0x74,0x50,0x2b,0x38,0x53,0x23,0x32,0x92,0x02,0xa8,0x39,0x27,\r
-0x3d,0x05,0x7f,0x42,0x78,0xa0,0x80,0x7b,0x51,0x70,0xe5,0x46,0x2f,0x82,0xfc,0x29,\r
-0x63,0xe0,0x5f,0x07,0x68,0x9e,0x1c,0xd3,0x23,0x58,0xb4,0xfd,0x26,0xce,0x1b,0x28,\r
-0x11,0x46,0x00,0x48,0xd0,0x28,0xfd,0x05,0x7c,0x4f,0xff,0x00,0x05,0x7d,0xf8,0xb1,\r
-0x73,0xe1,0x4f,0x80,0x9a,0x6f,0x82,0x34,0xd5,0xb8,0x6b,0xef,0x15,0xde,0xff,0x00,\r
-0xa4,0x98,0x63,0x2c,0xa2,0xce,0xdf,0x6b,0xb8,0x62,0x3a,0x66,0x46,0x84,0x0f,0x50,\r
-0x1b,0xd2,0xbe,0xf3,0xa6,0xb2,0x2b,0x75,0x00,0xfd,0x45,0x22,0x8f,0xe5,0xad,0xa3,\r
-0x64,0x24,0x32,0xb2,0xe3,0xfb,0xc3,0x14,0xd1,0xcf,0x4e,0x6b,0xfa,0x8b,0xbc,0xd1,\r
-0x74,0xfd,0x42,0x33,0x1d,0xd5,0x85,0xb5,0xca,0x1e,0xab,0x34,0x2a,0xe0,0xfe,0x04,\r
-0x57,0x2d,0xab,0xfc,0x11,0xf8,0x77,0xaf,0xa9,0x5d,0x4b,0xc0,0x7e,0x19,0xbf,0x53,\r
-0xd4,0x5c,0xe9,0x16,0xf2,0x67,0xf3,0x4a,0x77,0x23,0x94,0xfe,0x67,0x71,0x9a,0x2b,\r
-0xfa,0x3a,0xba,0xfd,0x90,0x3e,0x07,0x5e,0xe7,0xcd,0xf8,0x43,0xe0,0x9c,0x9e,0xa5,\r
-0x34,0x1b,0x64,0x3f,0x98,0x41,0x5c,0xbe,0xad,0xff,0x00,0x04,0xfb,0xfd,0x9e,0xb5,\r
-0x9c,0xf9,0xdf,0x0b,0x74,0x58,0x73,0xff,0x00,0x3e,0x7e,0x6d,0xbf,0xfe,0x8b,0x75,\r
-0xc5,0x3b,0x87,0x29,0xfc,0xf6,0xd1,0x5f,0xbd,0x17,0x5f,0xf0,0x4b,0x8f,0xd9,0xb2,\r
-0xe9,0xcb,0x0f,0x01,0xcd,0x01,0x3f,0xf3,0xcb,0x5b,0xbe,0x03,0xf2,0xf3,0xab,0x9f,\r
-0xd5,0x3f,0xe0,0x92,0x1f,0xb3,0xed,0xfe,0xef,0xb3,0xe9,0xba,0xf6,0x9b,0x9e,0x9f,\r
-0x66,0xd5,0xdd,0xb1,0xff,0x00,0x7f,0x03,0x51,0x70,0xe5,0x3f,0x0d,0xe8,0xaf,0xd9,\r
-0xab,0xef,0xf8,0x23,0x0f,0xc1,0xdb,0x87,0x63,0x6d,0xe2,0x8f,0x19,0x5a,0x03,0xd1,\r
-0x7e,0xd5,0x6c,0xe0,0x7e,0x70,0x56,0x05,0xff,0x00,0xfc,0x11,0x43,0xc0,0x32,0x03,\r
-0xf6,0x2f,0x88,0x9e,0x24,0xb7,0x3d,0xbe,0xd1,0x6f,0x6f,0x2e,0x3f,0x25,0x5a,0x2e,\r
-0x1c,0xac,0xfc,0x89,0x8a,0xee,0x68,0x71,0xe5,0xcd,0x24,0x78,0xfe,0xeb,0x11,0x5a,\r
-0xf6,0x3e,0x3b,0xf1,0x2e,0x98,0x41,0xb3,0xf1,0x0e,0xab,0x69,0x8e,0x9e,0x45,0xec,\r
-0xa9,0xfc,0x9a,0xbf,0x4c,0x35,0x5f,0xf8,0x22,0x28,0x24,0xff,0x00,0x66,0x7c,0x59,\r
-0xd8,0x3b,0x0b,0xbd,0x13,0x71,0xff,0x00,0xc7,0x67,0x15,0xcd,0xde,0xff,0x00,0xc1,\r
-0x12,0xbc,0x5d,0x19,0x3f,0x64,0xf8,0x9d,0xa2,0x4e,0x3b,0x79,0xda,0x6c,0xd1,0xff,\r
-0x00,0x27,0x6a,0x05,0x66,0x7c,0x2f,0xa6,0xfe,0xd0,0x9f,0x14,0x34,0x62,0x0d,0x8f,\r
-0xc4,0x5f,0x15,0x5a,0xe3,0xa7,0x95,0xac,0xdc,0x2f,0xfe,0xcf,0x5d,0x56,0x9f,0xfb,\r
-0x6a,0xfc,0x77,0xd2,0xc0,0x16,0xff,0x00,0x15,0xfc,0x53,0x81,0xda,0x5d,0x45,0xe4,\r
-0xff,0x00,0xd0,0xb3,0x5f,0x4c,0x6a,0xdf,0xf0,0x46,0x1f,0x8b,0x96,0xc7,0xfe,0x25,\r
-0xfe,0x2c,0xf0,0x85,0xf0,0xff,0x00,0xa6,0xb3,0x5c,0xc2,0x7f,0xf4,0x4b,0x57,0x29,\r
-0x7d,0xff,0x00,0x04,0x87,0xf8,0xfd,0x68,0x48,0x8a,0x1f,0x0d,0x5e,0x81,0xde,0x1d,\r
-0x57,0x19,0xff,0x00,0xbe,0xd1,0x68,0x1d,0x99,0xe6,0x56,0x1f,0xf0,0x50,0xcf,0xda,\r
-0x23,0x4f,0x60,0x53,0xe2,0x86,0xab,0x28,0x1d,0xae,0x22,0x82,0x5f,0xfd,0x0a,0x33,\r
-0x5d,0x4e,0x9b,0xff,0x00,0x05,0x4c,0xfd,0xa3,0x34,0xec,0x67,0xc6,0x36,0x97,0x80,\r
-0x76,0xb9,0xd2,0x2d,0x9b,0x3f,0x92,0x03,0x4b,0xa9,0xff,0x00,0xc1,0x2c,0x7f,0x68,\r
-0xdd,0x3c,0x9d,0x9e,0x0d,0xb4,0xbd,0x03,0xbd,0xb6,0xb1,0x68,0x73,0xf8,0x34,0x8a,\r
-0x6b,0x8d,0xbf,0xff,0x00,0x82,0x7f,0xfe,0xd0,0xba,0x73,0xb2,0xc9,0xf0,0xb3,0x5a,\r
-0x93,0x6f,0x7b,0x7f,0x2a,0x50,0x7e,0x9b,0x5c,0xe6,0x8d,0x03,0x53,0xd5,0xac,0x7f,\r
-0xe0,0xaf,0x7f,0x1f,0x6d,0x14,0x09,0x64,0xf0,0xcd,0xe7,0xfb,0x53,0x69,0x44,0x1f,\r
-0xfc,0x72,0x45,0xae,0x9f,0x4b,0xff,0x00,0x82,0xce,0xfc,0x5e,0xb4,0x50,0x2f,0x7c,\r
-0x2f,0xe1,0x1b,0xff,0x00,0x53,0xf6,0x7b,0x88,0xcf,0xe9,0x35,0x7c,0xc5,0x7b,0xfb,\r
-0x1b,0xfc,0x73,0xd3,0xf7,0x79,0xff,0x00,0x09,0xbc,0x5c,0x02,0x8c,0x92,0x9a,0x4c,\r
-0xce,0x07,0xe2,0xaa,0x6b,0x90,0xd4,0x7e,0x0a,0xfc,0x42,0xd1,0xd9,0x96,0xfb,0xc0,\r
-0x9e,0x25,0xb4,0x2b,0xf7,0xbc,0xed,0x22,0xe1,0x71,0xf9,0xa5,0x1a,0x05,0xd9,0xf7,\r
-0xa6,0x9f,0xff,0x00,0x05,0xb3,0xf1,0x7c,0x48,0x3e,0xdd,0xf0,0xcb,0x44,0xb8,0x7f,\r
-0x5b,0x7d,0x46,0x68,0x87,0xe4,0x55,0xab,0x7f,0x4f,0xff,0x00,0x82,0xdd,0xce,0x31,\r
-0xf6,0xef,0x84,0x91,0xb7,0xa9,0xb7,0xd7,0x88,0xfd,0x0c,0x06,0xbf,0x32,0xee,0x7c,\r
-0x31,0xac,0x59,0x92,0x27,0xd2,0xaf,0x61,0x23,0xaf,0x99,0x6c,0xeb,0x8f,0xcc,0x56,\r
-0x73,0xa1,0x8d,0xb6,0xb0,0x2a,0xde,0x87,0x8a,0x34,0x0b,0xb3,0xf5,0xc7,0x4a,0xff,\r
-0x00,0x82,0xd8,0xf8,0x36,0x54,0xce,0xa5,0xf0,0xd7,0x5d,0xb6,0x6e,0xe2,0xd2,0xfa,\r
-0x19,0x87,0xfe,0x3c,0x12,0xba,0x0b,0x2f,0xf8,0x2d,0x17,0xc2,0x59,0x71,0xf6,0x9f,\r
-0x06,0xf8,0xc6,0xdc,0xfa,0xa4,0x36,0xae,0x3f,0xf4,0x78,0xaf,0xc6,0xdc,0xe7,0xbd,\r
-0x18,0x34,0x58,0x2e,0xcf,0xdb,0xbd,0x37,0xfe,0x0a,0xfd,0xf0,0x16,0xf5,0x03,0x5c,\r
-0x7f,0xc2,0x4d,0x60,0x4f,0x69,0xb4,0xb0,0xf8,0xff,0x00,0xbe,0x24,0x6a,0xe9,0xec,\r
-0xbf,0xe0,0xaa,0x5f,0xb3,0x75,0xdc,0x41,0xe4,0xf1,0xb5,0xdd,0xa3,0x1f,0xe0,0x9b,\r
-0x44,0xbd,0x24,0x7e,0x2b,0x11,0x1f,0xad,0x7e,0x0e,0xe2,0x8a,0x2c,0x1c,0xc7,0xf4,\r
-0x01,0x63,0xff,0x00,0x05,0x23,0xfd,0x9c,0x6f,0xc0,0xd9,0xf1,0x32,0xce,0x2c,0xf6,\r
-0x9e,0xc6,0xee,0x3f,0xfd,0x0a,0x21,0x5d,0x6e,0x99,0xfb,0x6a,0xfc,0x06,0xd5,0xe3,\r
-0x0f,0x07,0xc5,0xcf,0x08,0xc6,0x0f,0x6b,0xad,0x56,0x2b,0x73,0xf9,0x48,0x54,0xd7,\r
-0xf3,0xa5,0x9a,0x29,0x58,0x39,0x8f,0xe9,0x32,0xcf,0xf6,0x9c,0xf8,0x3f,0xa8,0x15,\r
-0x16,0xdf,0x15,0x3c,0x17,0x39,0x6e,0x82,0x3f,0x10,0x5a,0x1c,0xff,0x00,0xe4,0x4a,\r
-0xeb,0xb4,0xdf,0x1f,0x78,0x63,0x59,0x50,0xd6,0x1e,0x22,0xd2,0x6f,0x94,0xf2,0x0d,\r
-0xb5,0xf4,0x52,0x03,0xf9,0x31,0xaf,0xe6,0x16,0x9c,0xb2,0x32,0x10,0x55,0x8a,0x91,\r
-0xdc,0x1a,0x2c,0x1c,0xc7,0xf5,0x25,0x14,0xf1,0xcc,0x9b,0xe3,0x75,0x75,0xf5,0x52,\r
-0x08,0xa7,0xe6,0xbf,0x97,0x8b,0x7f,0x10,0xea,0xb6,0x98,0xf2,0x35,0x3b,0xc8,0x71,\r
-0xd3,0xcb,0xb8,0x75,0xc7,0xe4,0x6b,0x7b,0x4f,0xf8,0xc3,0xe3,0xcd,0x2b,0x1f,0x62,\r
-0xf1,0xb7,0x88,0xad,0x31,0xd3,0xc9,0xd5,0x67,0x4c,0x7e,0x4f,0x45,0x87,0xcc,0x7f,\r
-0x4d,0x39,0xa5,0xaf,0xe7,0x07,0x4e,0xfd,0xae,0x3e,0x35,0xe9,0x48,0xa9,0x69,0xf1,\r
-0x5b,0xc5,0xf0,0xa2,0xf0,0x17,0xfb,0x66,0x72,0x3f,0x22,0xd5,0xd1,0xe9,0xff,0x00,\r
-0xb7,0xbf,0xed,0x07,0xa6,0xe3,0xca,0xf8,0xab,0xaf,0xc9,0x8e,0xd7,0x12,0x24,0xdf,\r
-0xfa,0x1a,0x9a,0x2c,0x1c,0xc8,0xfe,0x86,0xe8,0xaf,0xc0,0xed,0x33,0xfe,0x0a,0x75,\r
-0xfb,0x46,0xe9,0x7d,0x3c,0x7c,0x2e,0x87,0xa5,0xd6,0x99,0x69,0x27,0xf3,0x8f,0x35,\r
-0xd2,0xd9,0x7f,0xc1,0x5b,0x3f,0x68,0x4b,0x5c,0x79,0xba,0xae,0x85,0x79,0xff,0x00,\r
-0x5d,0xb4,0x88,0xc6,0x7f,0xef,0x82,0xb4,0x58,0x77,0x47,0xee,0x65,0x15,0xf8,0xa9,\r
-0xa6,0xff,0x00,0xc1,0x63,0xbe,0x37,0x5a,0x11,0xf6,0xad,0x2f,0xc2,0x77,0xc3,0xbe,\r
-0xeb,0x09,0x90,0xff,0x00,0xe3,0xb3,0x0a,0xea,0xf4,0xff,0x00,0xf8,0x2d,0x67,0xc4,\r
-0x28,0x71,0xf6,0xdf,0x87,0xfe,0x1b,0xb9,0xff,0x00,0xae,0x33,0xdc,0x45,0xfc,0xd9,\r
-0xa8,0xb0,0x5d,0x1f,0xb0,0x14,0x57,0xe4,0xf5,0x8f,0xfc,0x16,0xe7,0x5b,0x56,0x1f,\r
-0x6c,0xf8,0x51,0x60,0xeb,0xdc,0xc1,0xad,0x3a,0x9f,0xd6,0x13,0x5d,0x66,0x99,0xff,\r
-0x00,0x05,0xb7,0xd0,0x5d,0x07,0xf6,0x8f,0xc2,0xdd,0x4a,0x27,0xef,0xf6,0x5d,0x56,\r
-0x37,0x1f,0xf8,0xf4,0x62,0x8b,0x05,0xd1,0xfa,0x6b,0x45,0x7e,0x77,0xd8,0xff,0x00,\r
-0xc1,0x6a,0x7e,0x18,0xc8,0x83,0xed,0x7e,0x06,0xf1,0x6c,0x12,0x1e,0xa2,0x1f,0xb2,\r
-0xc8,0x07,0xe2,0x65,0x5f,0xe5,0x5d,0x16,0x9b,0xff,0x00,0x05,0x8e,0xf8,0x23,0x76,\r
-0x07,0xda,0x74,0xaf,0x17,0x58,0x9e,0xfb,0xec,0x21,0x7c,0x7f,0xdf,0x33,0x1a,0x56,\r
-0x0b,0xa3,0xee,0xea,0x2b,0xe3,0xdd,0x33,0xfe,0x0a,0xbd,0xfb,0x3a,0xdf,0x45,0xbe,\r
-0x7f,0x12,0x6a,0xba,0x71,0xfe,0xe5,0xce,0x8d,0x72,0xc7,0xff,0x00,0x21,0xab,0x0a,\r
-0xdd,0xb2,0xff,0x00,0x82,0x9c,0x7e,0xcd,0xd7,0xcc,0x14,0x7c,0x43,0x10,0x93,0xff,\r
-0x00,0x3d,0xb4,0xab,0xd4,0xfe,0x70,0xd0,0x3b,0x9f,0x52,0xd1,0x5e,0x13,0xa6,0xfe,\r
-0xdd,0x5f,0x00,0x35,0x58,0x95,0xe2,0xf8,0xb1,0xe1,0xa8,0x81,0xed,0x75,0x77,0xe4,\r
-0x1f,0xc9,0xc0,0x35,0xbd,0x6b,0xfb,0x59,0x7c,0x14,0xbd,0x0a,0x61,0xf8,0xb5,0xe0,\r
-0xa6,0xdd,0xd0,0x1d,0x7e,0xd4,0x13,0xf8,0x17,0xa0,0x0f,0x58,0xa2,0xb8,0xed,0x33,\r
-0xe3,0x27,0x80,0xb5,0xa4,0x56,0xd3,0xfc,0x6d,0xe1,0xdb,0xd5,0x6e,0x86,0xdf,0x55,\r
-0x81,0xf3,0xf9,0x3d,0x74,0xd6,0x9a,0xb5,0x8d,0xfc,0x61,0xed,0xaf,0x2d,0xee,0x10,\r
-0xf4,0x68,0xa5,0x56,0x07,0xf1,0x06,0x80,0x2d,0xd4,0x17,0x56,0x70,0x5e,0x46,0x63,\r
-0x9e,0x08,0xe7,0x8c,0xf5,0x59,0x14,0x30,0x3f,0x81,0xa9,0x43,0x82,0x32,0x0e,0x7e,\r
-0x94,0xb9,0xa4,0xd2,0x6a,0xcc,0x37,0x39,0x4b,0xff,0x00,0x85,0x9e,0x14,0xd4,0x41,\r
-0x12,0xe8,0x56,0x6a,0x4f,0x56,0x85,0x3c,0xa3,0xf9,0xae,0x2b,0x02,0xf3,0xf6,0x7d,\r
-0xf0,0x95,0xc6,0x7c,0xb8,0x6e,0xad,0x73,0xff,0x00,0x3c,0xae,0x09,0xff,0x00,0xd0,\r
-0xb3,0x5e,0x95,0x9a,0x2b,0x86,0xa6,0x5f,0x84,0xab,0xf1,0xd2,0x8b,0xf9,0x23,0x07,\r
-0x42,0x9c,0xb7,0x8a,0x3c,0x7e,0x6f,0xd9,0xa7,0x44,0x63,0xfb,0xad,0x57,0x50,0x4f,\r
-0xf7,0xbc,0xb6,0xff,0x00,0xd9,0x45,0x56,0x6f,0xd9,0x9b,0x4f,0xcf,0xcb,0xad,0x5c,\r
-0x8f,0xac,0x4a,0x7f,0xad,0x7b,0x55,0x26,0x2b,0x8d,0xe4,0xb9,0x7b,0xff,0x00,0x97,\r
-0x4b,0xf1,0xff,0x00,0x33,0x3f,0xaa,0x50,0xfe,0x53,0xc6,0x13,0xf6,0x66,0xd3,0x54,\r
-0xfc,0xda,0xcd,0xd1,0xff,0x00,0x76,0x35,0x15,0x7e,0xd3,0xf6,0x70,0xf0,0xdc,0x0c,\r
-0x0c,0xd7,0x7a,0x85,0xcf,0xb3,0x48,0x8a,0x3f,0x45,0xaf,0x58,0xc5,0x2d,0x38,0xe4,\r
-0xd8,0x08,0xed,0x49,0x02,0xc2,0xd1,0x5f,0x64,0xe2,0x74,0xcf,0x83,0x7e,0x11,0xd2,\r
-0x88,0x29,0xa3,0xc5,0x3b,0x7a,0xdc,0xb3,0x4b,0xfa,0x31,0x22,0xba,0xfb,0x4b,0x2b,\r
-0x7b,0x08,0x56,0x1b,0x68,0x23,0x82,0x25,0xe0,0x24,0x48,0x14,0x0f,0xc0,0x54,0xf4,\r
-0x57,0xa5,0x4b,0x0f,0x46,0x82,0xb5,0x28,0x25,0xe8,0x8e,0x88,0xc2,0x30,0xf8,0x55,\r
-0x82,0x8a,0x28,0xae,0x82,0xc2,0x8a,0x28,0xa0,0x02,0x8a,0x28,0xa0,0x0c,0xef,0x10,\r
-0xcb,0xe4,0xe8,0x97,0xaf,0xe9,0x13,0x7f,0x2a,0xf8,0x0b,0xe2,0x14,0xe6,0x7f,0x11,\r
-0x5d,0x31,0xe7,0xe6,0x35,0xf7,0x7f,0x8e,0x66,0xf2,0x3c,0x2d,0xa8,0x36,0x71,0xfb,\r
-0xb2,0x2b,0xe0,0x2f,0x18,0x4b,0xe6,0xeb,0x37,0x6d,0xfe,0xd1,0xaf,0x88,0xe2,0x29,\r
-0x7b,0xf4,0xa3,0xea,0x7c,0x67,0x12,0x4a,0xd4,0xa2,0x8f,0x00,0xf8,0xed,0x75,0xe5,\r
-0x68,0x93,0x8c,0xf4,0x42,0x7f,0x4a,0xfd,0x6a,0xf8,0x37,0xa6,0xff,0x00,0x63,0x7c,\r
-0x24,0xf0,0x55,0x81,0x50,0x86,0xdb,0x45,0xb3,0x88,0xa8,0x18,0xc1,0x10,0xa0,0xaf,\r
-0xc8,0x7f,0x8e,0xbf,0xe9,0x36,0x82,0xd8,0x13,0x99,0x59,0x63,0xe3,0xfd,0xa3,0x8f,\r
-0xeb,0x5f,0xb3,0x7a,0x25,0xa8,0xb1,0xd1,0xec,0x6d,0x87,0x48,0x60,0x8e,0x31,0xf8,\r
-0x28,0x1f,0xd2,0xbd,0xcc,0xa9,0x5a,0x82,0x38,0xf8,0x3e,0x3f,0xec,0xd5,0x27,0xde,\r
-0x45,0xea,0x28,0xa2,0xbd,0xb3,0xef,0xcf,0xcd,0xfd,0x0b,0x4e,0x93,0xc4,0x1e,0x25,\r
-0x8e,0xce,0x20,0x5a,0x4b,0x8b,0x92,0xbf,0x9b,0x1a,0xfd,0x0a,0xf0,0xbe,0x8b,0x17,\r
-0x87,0xb4,0x1b,0x1d,0x3a,0x15,0xc2,0x41,0x12,0xa7,0xe3,0x8e,0x6b,0xe1,0x7f,0x80,\r
-0x9a,0xce,0x9f,0xa2,0x7c,0x4f,0x67,0xd6,0x07,0x96,0x6c,0xae,0x65,0x88,0xa3,0x8e,\r
-0x56,0x40,0xe4,0x73,0x9f,0xa5,0x7d,0xb5,0x6f,0xf1,0x0b,0x40,0xb8,0x50,0x57,0x51,\r
-0x8b,0xf1,0x35,0xf2,0x19,0x34,0x29,0xd1,0x9d,0x59,0xce,0x49,0x4a,0xf6,0xf9,0x1f,\r
-0x11,0xc3,0x2a,0x9a,0xc3,0xca,0xa4,0x9f,0xbc,0xdd,0xbe,0xe3,0xa4,0xa2,0xb1,0xe3,\r
-0xf1,0x6e,0x91,0x2f,0xdd,0xbf,0x84,0xff,0x00,0xc0,0xaa,0xd2,0x6b,0x76,0x12,0x7d,\r
-0xdb,0xc8,0x4f,0xfc,0x0c,0x57,0xd5,0xaa,0x90,0x7b,0x34,0x7d,0xaa,0x94,0x5f,0x52,\r
-0xf5,0x23,0x67,0x1c,0x75,0xf7,0xa8,0x12,0xf6,0xde,0x5f,0xb9,0x3c,0x6d,0xf4,0x61,\r
-0x52,0x89,0x50,0xf4,0x70,0x7f,0x1a,0xbb,0xa6,0x3b,0x8e,0x19,0xc0,0xc8,0xe6,0x8a,\r
-0x40,0xd9,0x1d,0x69,0x73,0x4c,0x62,0xd1,0x49,0x45,0x00,0x2d,0x14,0x51,0x40,0x05,\r
-0x14,0x51,0x40,0x05,0x14,0x51,0x40,0x05,0x14,0x51,0x40,0x09,0x8a,0x5a,0x28,0xa0,\r
-0x02,0x8a,0x28,0xa0,0x02,0x92,0x96,0x8a,0x00,0x4c,0x0f,0x4a,0x31,0x4b,0x45,0x00,\r
-0x25,0x2d,0x14,0x50,0x01,0x45,0x14,0x50,0x03,0x1e,0x24,0x91,0x4a,0xba,0x2b,0x29,\r
-0xea,0x08,0xc8,0xac,0x4d,0x5b,0xc0,0x5e,0x19,0xd7,0xa2,0x31,0xea,0x7e,0x1d,0xd2,\r
-0x75,0x18,0xcf,0x54,0xba,0xb1,0x8a,0x50,0x7f,0x06,0x53,0x5b,0xd4,0x50,0x07,0x98,\r
-0xdf,0x7e,0xcb,0xdf,0x07,0x35,0x26,0x66,0xba,0xf8,0x51,0xe0,0xa9,0xd9,0xba,0xb3,\r
-0xf8,0x7e,0xd0,0x93,0xf8,0xf9,0x75,0x85,0xa9,0xfe,0xc5,0x1f,0x01,0xb5,0x58,0xca,\r
-0x4d,0xf0,0x8f,0xc2,0x31,0x8f,0x5b,0x6d,0x2a,0x28,0x0f,0xe7,0x18,0x53,0x5e,0xd7,\r
-0x45,0x00,0x7c,0xcb,0xa9,0x7f,0xc1,0x35,0xff,0x00,0x67,0x0d,0x53,0x3e,0x67,0xc3,\r
-0x4b,0x58,0x49,0xef,0x6d,0xa8,0x5d,0xc3,0xff,0x00,0xa0,0xca,0x2b,0x9e,0xbe,0xff,\r
-0x00,0x82,0x54,0x7e,0xce,0x37,0x6b,0x88,0xbc,0x21,0x7f,0x64,0x7f,0xbd,0x06,0xb7,\r
-0x78,0x4f,0xfe,0x3f,0x23,0x57,0xd7,0x74,0x50,0x16,0x3e,0x1b,0xd6,0x3f,0xe0,0x8f,\r
-0x5f,0x02,0xb5,0x01,0xfe,0x89,0x71,0xe2,0x9d,0x2c,0xff,0x00,0xd3,0xbe,0xa4,0x8f,\r
-0xff,0x00,0xa3,0x23,0x6a,0xe5,0xae,0xbf,0xe0,0x8a,0xff,0x00,0x0b,0x1c,0x9f,0xb3,\r
-0xf8,0xe3,0xc6,0x10,0xe7,0xa7,0x98,0xd6,0xaf,0x8f,0xca,0x11,0x5f,0xa1,0xb4,0x50,\r
-0x2b,0x23,0xf3,0x37,0x55,0xff,0x00,0x82,0x25,0x78,0x72,0x40,0xdf,0xd9,0x9f,0x14,\r
-0x35,0x4b,0x73,0xdb,0xed,0x7a,0x5c,0x72,0xe3,0xfe,0xf9,0x75,0xae,0x4e,0xef,0xfe,\r
-0x08,0x8b,0xab,0xab,0x1f,0xb2,0xfc,0x59,0xb1,0x91,0x7b,0x09,0xb4,0x37,0x53,0xf8,\r
-0xe2,0x73,0x5f,0xab,0xd4,0x50,0x16,0x47,0xe4,0x0e,0xa5,0xff,0x00,0x04,0x51,0xf8,\r
-0x81,0x10,0x3f,0x60,0xf8,0x85,0xe1,0xbb,0xa3,0xdb,0xcf,0xb7,0x9e,0x1c,0xfe,0x41,\r
-0xab,0x8f,0xd4,0xff,0x00,0xe0,0x8e,0x7f,0x1c,0x2d,0x1b,0x16,0xba,0x97,0x84,0xaf,\r
-0xc7,0xaa,0xea,0x12,0xa7,0xe8,0xd0,0xd7,0xed,0x6d,0x18,0xa7,0x70,0xb2,0x3f,0x0c,\r
-0x35,0x0f,0xf8,0x24,0xc7,0xed,0x0d,0x65,0x9f,0x2b,0x45,0xd1,0x6f,0xb1,0xff,0x00,\r
-0x3e,0xfa,0xc4,0x43,0x3f,0xf7,0xde,0xda,0xe5,0x35,0x6f,0xf8,0x26,0x9f,0xed,0x1d,\r
-0xa4,0xb1,0x07,0xe1,0xcc,0xd7,0x60,0x75,0x6b,0x5d,0x42,0xd2,0x41,0xff,0x00,0xa3,\r
-0x6b,0xf7,0xeb,0x14,0x62,0x8b,0x85,0x91,0xfc,0xf0,0x5e,0xfe,0xc2,0x3f,0xb4,0x05,\r
-0x81,0x22,0x5f,0x85,0x1e,0x22,0x6c,0x7f,0xcf,0x1b,0x71,0x2f,0xfe,0x80,0x4d,0x72,\r
-0xfa,0xa7,0xec,0xb7,0xf1,0x8b,0x46,0x62,0xb7,0x9f,0x0b,0x7c,0x5f,0x16,0x3a,0x91,\r
-0xa2,0x5c,0x38,0x1f,0x8a,0xa1,0x15,0xfd,0x23,0xd1,0x8a,0x2e,0x2b,0x1f,0xcc,0x7d,\r
-0xff,0x00,0xc2,0xef,0x19,0xe9,0x4c,0x56,0xf7,0xc2,0x5a,0xed,0x99,0x1d,0x44,0xfa,\r
-0x6c,0xc9,0x8f,0xcd,0x6b,0x02,0xe7,0x4e,0xbb,0xb3,0x62,0xb3,0xda,0xcd,0x03,0x0e,\r
-0xa2,0x48,0xca,0x91,0xf9,0x8a,0xfe,0xa3,0xf0,0x2a,0xbd,0xc6,0x99,0x67,0x76,0x8c,\r
-0x93,0xda,0xc1,0x32,0xb7,0x05,0x64,0x8c,0x30,0x3f,0x98,0xa2,0xe1,0xca,0x7f,0x2e,\r
-0x18,0xa2,0xbf,0xa6,0x6d,0x43,0xe0,0xc7,0xc3,0xed,0x58,0xb1,0xbe,0xf0,0x2f,0x86,\r
-0xaf,0x0b,0x72,0xc6,0x7d,0x22,0xdd,0xc9,0xfa,0xe5,0x2b,0x9e,0xbd,0xfd,0x95,0xbe,\r
-0x0c,0xea,0x0a,0xcb,0x3f,0xc2,0x8f,0x06,0x3e,0xee,0xa4,0x68,0x36,0xca,0x7f,0x30,\r
-0x80,0xd1,0x71,0x72,0x9f,0xcd,0xd5,0x18,0x3d,0x6b,0xfa,0x1a,0xd5,0x7f,0x60,0x8f,\r
-0xd9,0xf7,0x58,0x56,0x13,0xfc,0x29,0xd0,0x23,0xdd,0xd4,0xda,0xc4,0xd0,0x1f,0xcd,\r
-0x18,0x57,0x23,0x77,0xff,0x00,0x04,0xbb,0xfd,0x9b,0x2e,0xd9,0x9b,0xfe,0x15,0xfc,\r
-0x90,0x33,0x73,0x98,0x75,0xbb,0xf1,0xfa,0x79,0xf8,0x1f,0x95,0x3b,0x87,0x29,0xf8,\r
-0x27,0x45,0x7e,0xe5,0xeb,0x3f,0xf0,0x49,0x4f,0xd9,0xef,0x53,0x8c,0xad,0xae,0x91,\r
-0xad,0xe9,0x07,0xb3,0x5a,0x6b,0x12,0xb9,0x1f,0xf7,0xf7,0x7d,0x71,0xd7,0xbf,0xf0,\r
-0x46,0x0f,0x83,0x73,0xb9,0x6b,0x7f,0x14,0xf8,0xd6,0xdb,0x3f,0xc3,0xf6,0xcb,0x47,\r
-0x03,0xf3,0xb6,0xcf,0xeb,0x45,0xc3,0x94,0xfc,0x65,0xa2,0xbf,0x5f,0xb5,0x5f,0xf8,\r
-0x22,0x97,0xc3,0xc9,0x50,0x0d,0x37,0xe2,0x0f,0x89,0xed,0x5f,0xd6,0xea,0x1b,0x79,\r
-0xc7,0xe4,0xa8,0x95,0xc8,0xea,0x7f,0xf0,0x44,0x58,0x49,0x3f,0xd9,0xdf,0x16,0x9d,\r
-0x7d,0x05,0xd6,0x85,0x9f,0xd5,0x67,0x14,0x5c,0x56,0x67,0xe5,0x7d,0x48,0x97,0x33,\r
-0x45,0xf7,0x25,0x74,0xff,0x00,0x75,0x88,0xaf,0xd2,0x8b,0xef,0xf8,0x22,0x57,0x8a,\r
-0x63,0xcf,0xd8,0xfe,0x28,0xe9,0x13,0xfa,0x79,0xfa,0x54,0xb1,0x67,0xf2,0x91,0xab,\r
-0x95,0xd4,0xff,0x00,0xe0,0x8c,0x1f,0x16,0xad,0xc9,0xfb,0x0f,0x8b,0x3c,0x27,0x7a,\r
-0x07,0x4f,0x32,0x6b,0x88,0x89,0xff,0x00,0xc8,0x46,0x80,0xb3,0x3e,0x19,0xd3,0xfc,\r
-0x77,0xe2,0x5d,0x25,0x95,0xac,0x7c,0x43,0xaa,0xd9,0x95,0xe4,0x1b,0x7b,0xd9,0x13,\r
-0x1f,0x93,0x57,0x63,0xa7,0x7e,0xd3,0xbf,0x17,0xf4,0x95,0x55,0xb3,0xf8,0xa1,0xe2,\r
-0xfb,0x74,0x5e,0x8a,0x9a,0xdd,0xc8,0x03,0xf0,0xdf,0x5f,0x47,0x5e,0x7f,0xc1,0x20,\r
-0x7e,0x3e,0x5b,0x13,0xe5,0x8f,0x0b,0xdd,0x81,0xd3,0xc9,0xd5,0x58,0x67,0xfe,0xfa,\r
-0x8c,0x57,0x35,0xa9,0xff,0x00,0xc1,0x2b,0xff,0x00,0x68,0xcd,0x3c,0x31,0x8f,0xc2,\r
-0x16,0x77,0xd8,0xff,0x00,0x9f,0x5d,0x5e,0xd8,0xe7,0xe9,0xb9,0xd6,0x80,0xd4,0xf3,\r
-0x8b,0x4f,0xdb,0x7b,0xe3,0xdd,0x96,0x3c,0xaf,0x8b,0x3e,0x29,0x38,0xe9,0xe6,0xdf,\r
-0xb4,0x9f,0xfa,0x16,0x6b,0xa5,0xd3,0x7f,0xe0,0xa3,0xbf,0xb4,0x5e,0x99,0x81,0x1f,\r
-0xc4,0xbb,0xd9,0x80,0xed,0x73,0x69,0x6d,0x2e,0x7f,0xef,0xa8,0xcd,0x56,0xbf,0xff,\r
-0x00,0x82,0x78,0x7e,0xd1,0x3a,0x71,0x3e,0x67,0xc2,0xed,0x52,0x4c,0x7f,0xcf,0x09,\r
-0xed,0xe5,0xff,0x00,0xd0,0x64,0x35,0xcd,0x6a,0x5f,0xb1,0x97,0xc7,0x4d,0x28,0x91,\r
-0x71,0xf0,0x9f,0xc5,0x9c,0x75,0x30,0xe9,0x92,0x4a,0x3f,0x34,0x06,0x80,0xd4,0xf5,\r
-0x8b,0x2f,0xf8,0x2a,0xd7,0xed,0x17,0x68,0xa0,0x3f,0x8a,0x34,0xdb,0xac,0x77,0x9f,\r
-0x46,0xb7,0xe7,0xfe,0xf9,0x51,0x5b,0xf6,0x1f,0xf0,0x57,0xff,0x00,0x8f,0x56,0xa4,\r
-0x79,0xeb,0xe1,0x8b,0xc0,0x3a,0xf9,0xba,0x5b,0x29,0x3f,0xf7,0xcc,0x82,0xbe,0x5b,\r
-0xd4,0xfe,0x04,0xfc,0x49,0xd1,0x5c,0xa5,0xf7,0xc3,0xff,0x00,0x14,0x5a,0x30,0xea,\r
-0x25,0xd1,0xee,0x17,0xff,0x00,0x64,0xae,0x7e,0xf3,0xc1,0x5e,0x21,0xd3,0xce,0x2e,\r
-0xb4,0x1d,0x4e,0xd8,0xff,0x00,0xd3,0x6b,0x39,0x13,0xf9,0xad,0x03,0xd4,0xfb,0xcb,\r
-0x4d,0xff,0x00,0x82,0xd2,0xfc,0x51,0xb7,0x50,0x2f,0x7c,0x15,0xe1,0x5b,0xcf,0x52,\r
-0x82,0xe2,0x23,0xff,0x00,0xa3,0x0d,0x74,0x56,0x5f,0xf0,0x5b,0x5f,0x14,0x2e,0x05,\r
-0xdf,0xc3,0x0d,0x22,0x5f,0x53,0x06,0xa7,0x2a,0x7f,0x34,0x35,0xf9,0xab,0x34,0x12,\r
-0xdb,0xb6,0xd9,0x63,0x78,0x9b,0xd1,0xd4,0x83,0x4c,0xa3,0x40,0xbb,0x3f,0x54,0x74,\r
-0xbf,0xf8,0x2d,0xcd,0xbe,0x40,0xd4,0x7e,0x14,0x4a,0x07,0x73,0x6b,0xad,0x03,0xfa,\r
-0x34,0x35,0xd4,0x58,0xff,0x00,0xc1,0x6b,0xfc,0x07,0x20,0x1f,0x6c,0xf8,0x77,0xe2,\r
-0x38,0x0f,0xfd,0x30,0xb9,0xb7,0x93,0xf9,0x95,0xaf,0xc8,0x6c,0x51,0x45,0x85,0xcc,\r
-0xcf,0xd9,0x9d,0x3b,0xfe,0x0b,0x39,0xf0,0x82,0xe4,0x81,0x77,0xe1,0x8f,0x17,0xd9,\r
-0x67,0xf8,0xbe,0xcd,0x6f,0x20,0x1f,0x94,0xd5,0xd7,0x69,0xdf,0xf0,0x56,0xff,0x00,\r
-0xd9,0xf6,0xf2,0x20,0xd7,0x1a,0x96,0xbd,0xa7,0xb1,0xfe,0x19,0xf4,0x99,0x18,0x8f,\r
-0xfb,0xe0,0xb0,0xaf,0xc3,0x8a,0xb5,0xa4,0xd8,0xbe,0xa7,0xaa,0xd9,0xd9,0xc4,0xbb,\r
-0xa5,0xb8,0x99,0x21,0x50,0x3b,0x96,0x60,0x07,0xf3,0xa2,0xc3,0xb9,0xfd,0x3f,0xe8,\r
-0x3a,0xd5,0xb7,0x88,0xf4,0x4d,0x3f,0x56,0xb3,0x2e,0x6c,0xef,0xed,0xe3,0xba,0x84,\r
-0xc8,0xa5,0x58,0xa3,0xa8,0x65,0xca,0x9e,0x41,0xc1,0x1c,0x1a,0xbf,0x55,0x34,0xab,\r
-0x18,0xf4,0xcd,0x32,0xd2,0xce,0x14,0x11,0xc5,0x6f,0x0a,0x44,0x88,0x3a,0x28,0x55,\r
-0x00,0x0f,0xd2,0xad,0xd4,0x96,0x14,0x51,0x45,0x00,0x72,0x3f,0x14,0xe7,0xfb,0x3f,\r
-0x83,0x6f,0x4f,0xa8,0xc5,0x7c,0x0d,0xe2,0x29,0x37,0xdf,0xdd,0x37,0xab,0x9a,0xfb,\r
-0x9b,0xe3,0x65,0xcf,0x91,0xe0,0xc9,0x87,0xf7,0x8e,0x3f,0x4a,0xf8,0x43,0x5a,0x7d,\r
-0xd3,0x4e,0xde,0xac,0x6b,0xe0,0x33,0xe7,0x7c,0x54,0x23,0xd9,0x1f,0x01,0xc4,0xf3,\r
-0xb2,0x48,0xf1,0x4f,0x1a,0x42,0x35,0x2f,0x88,0x9e,0x12,0xb1,0x64,0xf3,0x16,0xe7,\r
-0x5a,0xb2,0x84,0xa6,0x33,0xb8,0x34,0xe8,0x08,0xfc,0x8d,0x7e,0xcc,0xa0,0x0a,0xa1,\r
-0x40,0xc0,0x1c,0x57,0xe3,0xef,0x87,0xac,0x9f,0x5c,0xfd,0xa4,0xfe,0x19,0x59,0x2f,\r
-0x3b,0xbc,0x47,0x67,0x26,0x3d,0x92,0x40,0xe7,0xff,0x00,0x40,0xaf,0xd8,0x31,0x5f,\r
-0x57,0x97,0x46,0xd4,0x11,0xd7,0xc2,0x71,0xe5,0xcb,0xef,0xdd,0xb1,0x68,0xa2,0x8a,\r
-0xf5,0x0f,0xb4,0x3f,0x3c,0xbf,0x6b,0x4f,0x07,0xde,0xfc,0x28,0xf8,0xc1,0x3e,0xbf,\r
-0x6f,0x19,0x5d,0x0b,0xc4,0x4d,0xf6,0x95,0x78,0xc6,0x04,0x73,0x80,0x04,0xaa,0x7d,\r
-0xc9,0xf9,0xff,0x00,0xe0,0x47,0xd2,0xb9,0x0d,0x2b,0xc6,0x12,0x5d,0xc4,0xaf,0x15,\r
-0xeb,0xe0,0x8e,0xcf,0x5f,0xa1,0xbf,0x13,0xfe,0x1a,0x68,0xdf,0x15,0xfc,0x21,0x77,\r
-0xe1,0xfd,0x6e,0x0f,0x36,0xda,0x61,0xba,0x39,0x57,0x1b,0xe0,0x90,0x0f,0x96,0x44,\r
-0x3d,0x88,0xcf,0xe3,0xc8,0x3c,0x1a,0xfc,0xed,0xf8,0x9f,0xfb,0x2e,0xf8,0xe3,0xe1,\r
-0x16,0xa9,0x33,0xdb,0xac,0x97,0xda,0x46,0xec,0xc3,0x7f,0x6e,0xa4,0xc6,0xc3,0x3c,\r
-0x06,0x1f,0xc2,0x7d,0x8f,0xe1,0x9a,0xf9,0x3c,0xcb,0x2d,0x84,0xe4,0xea,0x6c,0x7e,\r
-0x4f,0x9d,0xe5,0x78,0x9c,0x16,0x22,0x58,0xac,0x22,0x6e,0x13,0x77,0x69,0x74,0x66,\r
-0xfc,0x3e,0x28,0xd4,0x23,0xe6,0x3b,0xf9,0x47,0xfc,0x0e,0xaf,0x43,0xe3,0x9d,0x6e,\r
-0x1f,0xbb,0xa9,0x4b,0xf8,0xb5,0x78,0xb9,0xb9,0xf1,0x3e,0x9f,0xf2,0x4d,0x68,0x5c,\r
-0x8e,0xf8,0xe4,0xd2,0x8f,0x15,0xeb,0x11,0x7d,0xfb,0x09,0x3f,0x23,0x5f,0x35,0xf5,\r
-0x19,0xaf,0x86,0x4b,0xef,0x3c,0x48,0xe2,0x71,0xd1,0x5f,0x0c,0xbe,0xf3,0xdd,0x21,\r
-0xf8,0x9f,0xe2,0x38,0x0f,0xcb,0xa8,0xb9,0xad,0x1b,0x7f,0x8c,0xfe,0x26,0xb7,0xe9,\r
-0x7a,0xcd,0xf5,0xaf,0x9f,0x57,0xc7,0x97,0x91,0xfd,0xfb,0x49,0x57,0xf0,0x35,0x22,\r
-0x7c,0x46,0x2b,0xf7,0xe2,0x90,0x1f,0x71,0x4d,0x61,0x71,0x31,0xf8,0x64,0xfe,0xf3,\r
-0x55,0x99,0x63,0x61,0xba,0x91,0xf4,0x94,0x1f,0xb4,0x1f,0x8a,0x21,0xc7,0xef,0xf3,\r
-0xf8,0xd6,0xa5,0xbf,0xed,0x33,0xe2,0x38,0xb1,0xbc,0x96,0xc7,0xbd,0x7c,0xc2,0x9f,\r
-0x12,0x60,0xfe,0x2d,0xc3,0xf0,0xab,0x31,0xfc,0x44,0xb4,0x60,0x32,0xff,0x00,0xa5,\r
-0x5a,0x58,0xf8,0xed,0x37,0xf7,0x9b,0x47,0x3c,0xc5,0x43,0x79,0x4b,0xee,0x3e,0xa8,\r
-0xb5,0xfd,0xaa,0x75,0x98,0x88,0xf3,0x22,0xdc,0x3f,0x3a,0xd5,0xb7,0xfd,0xac,0xae,\r
-0x86,0x3c,0xcb,0x6c,0xfa,0xfc,0xa2,0xbe,0x4c,0x8f,0xc7,0x96,0x4d,0xff,0x00,0x2d,\r
-0x16,0xac,0xa7,0x8c,0xac,0x9f,0x1f,0xbd,0x43,0xf8,0xd5,0xac,0x46,0x63,0x0f,0xb4,\r
-0xcd,0xe3,0xc4,0x98,0x88,0xef,0x3f,0xc0,0xfa,0xfe,0xd7,0xf6,0xb2,0x84,0xe3,0xce,\r
-0xb6,0xff,0x00,0xc7,0x6b,0x52,0xdb,0xf6,0xab,0xd2,0xe4,0x23,0xcc,0x80,0x0f,0xc0,\r
-0xd7,0xc6,0x69,0xe2,0x8b,0x37,0xe9,0x2a,0xfe,0x06,0xa7,0x4d,0x7a,0xd5,0xfa,0x38,\r
-0x3f,0x8d,0x52,0xcc,0x73,0x18,0x6e,0xff,0x00,0x03,0xaa,0x3c,0x51,0x5b,0xf9,0x91,\r
-0xf6,0xdd,0xbf,0xed,0x3b,0xe1,0xe9,0x00,0xde,0x30,0x4f,0xfb,0x55,0xa9,0x6d,0xfb,\r
-0x43,0xf8,0x66,0x7c,0x66,0x5d,0xbf,0xf0,0x21,0x5f,0x0a,0xae,0xad,0x6e,0xdd,0x1c,\r
-0x54,0x83,0x50,0x84,0xf4,0x93,0xf5,0xad,0x16,0x73,0x8f,0x8e,0xf6,0xfb,0x8e,0xb8,\r
-0x71,0x45,0x4e,0xb6,0x3e,0xf8,0xb7,0xf8,0xdf,0xe1,0x99,0xc8,0xc5,0xd0,0x1f,0x88,\r
-0xad,0x28,0x3e,0x2a,0xf8,0x72,0x71,0x91,0x7e,0xa3,0xf2,0xaf,0xcf,0xa5,0xbf,0x51,\r
-0xf7,0x66,0x23,0xe8,0x6a,0x64,0xd4,0xe4,0x5f,0xbb,0x70,0xc3,0xfe,0x05,0x5a,0xac,\r
-0xfb,0x14,0xbe,0x28,0x2f,0xc4,0xeb,0x8f,0x13,0xcb,0xac,0x51,0xfa,0x19,0x17,0x8f,\r
-0xb4,0x29,0xbe,0xee,0xa1,0x1f,0xe7,0x57,0x23,0xf1,0x4e,0x95,0x2f,0xdd,0xbe,0x84,\r
-0xff,0x00,0xc0,0xab,0xf3,0xbe,0x3d,0x6e,0xf1,0x3e,0xe5,0xe4,0xa3,0xe8,0xf5,0x66,\r
-0x3f,0x15,0xea,0xb1,0x11,0xb7,0x50,0x9b,0xfe,0xfb,0x35,0xb2,0xe2,0x1a,0x8b,0xe2,\r
-0xa7,0xf8,0x9d,0x51,0xe2,0x58,0x3d,0xe0,0x7e,0x88,0xa6,0xb1,0x63,0x27,0xdd,0xbb,\r
-0x88,0xff,0x00,0xc0,0xc5,0x4a,0xb7,0x90,0x3f,0xdd,0x99,0x0f,0xd1,0x85,0x7e,0x7b,\r
-0x43,0xe3,0xfd,0x7a,0x2f,0xbb,0xa8,0xcb,0xf9,0xd5,0xf8,0x3e,0x2b,0x78,0x8e,0x0c,\r
-0x62,0xf9,0xcf,0xd4,0xd6,0xeb,0x88,0xa3,0xf6,0xa9,0xbf,0xbc,0xe8,0x8f,0x11,0xd0,\r
-0x7b,0xc5,0x9f,0x7f,0x09,0x14,0xff,0x00,0x10,0xfc,0xe9,0x73,0xef,0x5f,0x08,0xc1,\r
-0xf1,0xbf,0xc4,0xd0,0x7f,0xcb,0xd1,0x6f,0xc4,0xd6,0x9d,0xb7,0xed,0x11,0xe2,0x58,\r
-0x3a,0xcb,0x9f,0xf8,0x11,0xad,0xe3,0xc4,0x34,0x1e,0xf0,0x67,0x44,0x78,0x83,0x0a,\r
-0xf7,0xb9,0xf6,0xe0,0x34,0x66,0xbe,0x37,0xb6,0xfd,0xa7,0x35,0xf8,0x71,0xbf,0x2d,\r
-0xf8,0xd6,0xad,0xbf,0xed,0x57,0xaa,0x2f,0xfa,0xc8,0x49,0x1f,0x85,0x6d,0x1c,0xfb,\r
-0x08,0xf7,0xbf,0xdc,0x6f,0x1c,0xf3,0x06,0xfe,0xd1,0xf5,0x9e,0x68,0x07,0x35,0xf3,\r
-0x0d,0xbf,0xed,0x65,0x28,0xff,0x00,0x59,0x6f,0x9f,0xf8,0x0e,0x6b,0x52,0xdb,0xf6,\r
-0xb1,0xb5,0x38,0xf3,0x6d,0xc0,0xfc,0x2b,0xa2,0x39,0xd6,0x09,0xfd,0xaf,0xc0,0xe9,\r
-0x8e,0x6d,0x83,0x97,0xdb,0x3e,0x8b,0xa2,0xbc,0x26,0x0f,0xda,0xa3,0x47,0x7c,0x07,\r
-0x88,0x03,0xdf,0xad,0x6a,0x5b,0x7e,0xd2,0xde,0x1e,0x98,0x0d,0xe4,0x2f,0xfc,0x0a,\r
-0xb7,0x8e,0x6b,0x83,0x97,0xfc,0xbc,0x46,0xf1,0xc7,0xe1,0xa5,0xb4,0xd1,0xec,0x54,\r
-0x57,0x98,0xdb,0xfe,0xd0,0x3e,0x19,0x9f,0xfe,0x5b,0x05,0xff,0x00,0x81,0x56,0x9c,\r
-0x1f,0x19,0xfc,0x35,0x36,0x3f,0xd3,0x00,0xfc,0x45,0x74,0x47,0x1d,0x86,0x96,0xd5,\r
-0x17,0xde,0x6e,0xb1,0x34,0x65,0xb4,0xd1,0xdd,0xd1,0x5c,0xa4,0x1f,0x13,0xfc,0x3d,\r
-0x38,0x18,0xbe,0x41,0xf5,0x35,0x76,0x2f,0x1c,0xe8,0x93,0x7d,0xdb,0xf8,0x8f,0xe3,\r
-0x5b,0x2c,0x45,0x29,0x6d,0x25,0xf7,0x9a,0x2a,0xb4,0xde,0xd2,0x46,0xf5,0x15,0x97,\r
-0x1f,0x89,0x74,0xc9,0x47,0xcb,0x7d,0x09,0xff,0x00,0x81,0x55,0x94,0xd5,0xac,0xe4,\r
-0xfb,0xb7,0x51,0x1f,0xf8,0x10,0xad,0x54,0xe2,0xf6,0x65,0xa9,0x27,0xb3,0x2d,0xd1,\r
-0x51,0x0b,0xa8,0x5b,0xa4,0xa8,0x7f,0xe0,0x42,0x9e,0x1d,0x58,0x64,0x10,0x7e,0x86,\r
-0xaa,0xe8,0xab,0x8e,0xa2,0x93,0x34,0x66,0x98,0x0b,0x45,0x26,0x45,0x19,0xa0,0x05,\r
-0xa2,0x93,0x34,0xb4,0x00,0x51,0x45,0x14,0x00,0x51,0x45,0x14,0x00,0x51,0x45,0x14,\r
-0x00,0x51,0x45,0x14,0x00,0x51,0x45,0x14,0x00,0x51,0x45,0x14,0x00,0x51,0x45,0x14,\r
-0x00,0x51,0x45,0x14,0x00,0x94,0x6d,0x06,0x96,0x8a,0x00,0x4c,0x51,0x8a,0x5a,0x28,\r
-0x01,0x31,0x4d,0x31,0xa1,0x04,0x15,0x04,0x1e,0xb9,0x14,0xfa,0x28,0x03,0x1e,0xfb,\r
-0xc1,0xba,0x06,0xa9,0x9f,0xb6,0x68,0x7a,0x6d,0xde,0x7a,0xf9,0xf6,0x91,0xbe,0x7f,\r
-0x31,0x5c,0xe5,0xf7,0xc0,0x6f,0x86,0x7a,0x9e,0xef,0xb5,0xfc,0x3c,0xf0,0xad,0xc9,\r
-0x6e,0xa6,0x5d,0x16,0xd9,0x89,0xfc,0x4a,0x57,0x77,0x45,0x00,0x78,0xd6,0xa9,0xfb,\r
-0x1a,0x7c,0x0b,0xd6,0x15,0xc5,0xcf,0xc2,0x6f,0x09,0x12,0xfd,0x5a,0x2d,0x2a,0x28,\r
-0x9b,0xfe,0xfa,0x40,0x08,0xae,0x2e,0xfb,0xfe,0x09,0xb1,0xfb,0x37,0x5f,0xbb,0xb4,\r
-0x9f,0x0c,0xad,0x23,0x2d,0xd7,0xc8,0xd4,0x6f,0x22,0x03,0xe8,0x16,0x60,0x05,0x7d,\r
-0x33,0x45,0x00,0x7c,0x97,0x7f,0xff,0x00,0x04,0xb0,0xfd,0x9b,0xaf,0x22,0x65,0x8f,\r
-0xc1,0x17,0x56,0x6c,0x7f,0x8e,0x0d,0x6e,0xf4,0x91,0xff,0x00,0x7d,0x4a,0xc3,0xf4,\r
-0xac,0x5d,0x0f,0xfe,0x09,0x3f,0xf0,0x43,0xc3,0x5e,0x2b,0xd2,0x3c,0x41,0xa7,0x37,\r
-0x89,0x21,0xba,0xd2,0xef,0x61,0xbe,0x86,0x17,0xd4,0x52,0x48,0x59,0xe3,0x70,0xe1,\r
-0x58,0x34,0x44,0x95,0x25,0x40,0x23,0x3d,0x3b,0xd7,0xd9,0xd4,0x50,0x2b,0x05,0x14,\r
-0x51,0x40,0xc2,0x8a,0x28,0xa0,0x0f,0x29,0xfd,0xa1,0x2e,0x7c,0x9f,0x0a,0x05,0xce,\r
-0x32,0x58,0xfe,0x95,0xf0,0xf6,0xaa,0xfc,0x48,0x7d,0xcd,0x7d,0x97,0xfb,0x4b,0xdc,\r
-0xf9,0x7a,0x24,0x29,0x9f,0xe1,0x3c,0x57,0xc5,0xda,0xb3,0xe2,0x27,0x3f,0x5a,0xfc,\r
-0xeb,0x38,0x7c,0xd8,0xfb,0x76,0x48,0xfc,0xd3,0x8a,0x27,0xef,0xdb,0xc8,0xe4,0x3e,\r
-0x04,0xda,0x0d,0x63,0xf6,0xc8,0xf8,0x6d,0x01,0xc9,0xf2,0xaf,0xe6,0xb9,0xe3,0xfe,\r
-0x99,0xdb,0xca,0xc3,0xf9,0x57,0xeb,0x58,0xaf,0xcb,0x1f,0xd8,0xe7,0x4f,0x6d,0x5f,\r
-0xf6,0xce,0xd0,0xa5,0x03,0x29,0x61,0xa7,0xdf,0x5d,0x37,0xb0,0xf2,0xbc,0xb1,0xfa,\r
-0xc8,0x2b,0xf5,0x38,0x77,0xaf,0xb7,0xc1,0xab,0x51,0x47,0xd1,0xf0,0xd4,0x39,0x32,\r
-0xca,0x7e,0x62,0xd1,0x45,0x15,0xdc,0x7d,0x40,0x98,0xa6,0xc9,0x0a,0x4a,0xa5,0x5d,\r
-0x43,0xa1,0xe0,0xab,0x0c,0x83,0x4f,0xa2,0x80,0x38,0xad,0x6b,0xe0,0xcf,0x83,0x35,\r
-0xf9,0x1a,0x4b,0xbd,0x02,0xd7,0xcc,0x61,0x82,0xd0,0x83,0x17,0xe8,0xa4,0x0a,0xe5,\r
-0xaf,0x7f,0x65,0x8f,0x01,0x5d,0x9c,0xad,0x95,0xc5,0xbf,0xb4,0x53,0x7f,0xf1,0x40,\r
-0xd7,0xaf,0x51,0x5c,0xd2,0xc3,0x51,0x96,0xf0,0x47,0x24,0xb0,0x98,0x79,0xbb,0xca,\r
-0x9a,0xfb,0x8f,0x09,0xba,0xfd,0x8f,0x3c,0x13,0x36,0x4a,0x4d,0xa8,0x46,0x7d,0xdd,\r
-0x08,0xff,0x00,0xd0,0x2b,0x02,0xff,0x00,0xf6,0x26,0xd0,0x27,0xcf,0xd9,0xf5,0x69,\r
-0x22,0x3f,0xf4,0xd2,0xdc,0x3f,0xf2,0x61,0x5f,0x4a,0x51,0xf8,0xd6,0x4f,0x03,0x87,\r
-0x7f,0x60,0xe7,0x79,0x6e,0x16,0x5f,0x63,0xf3,0x3e,0x50,0xbc,0xfd,0x84,0xec,0x64,\r
-0xe6,0x2d,0x6a,0x17,0x3f,0xed,0xda,0x95,0xff,0x00,0xd9,0x8d,0x73,0xd7,0xdf,0xb0,\r
-0x65,0xd9,0x62,0x20,0xbb,0xd3,0x5c,0x76,0x2c,0x59,0x4f,0xfe,0x81,0x5f,0x68,0x62,\r
-0x8c,0x56,0x4f,0x2e,0xa0,0xfa,0x3f,0xbd,0x98,0xbc,0xa7,0x0a,0xfe,0xcb,0xfb,0xd9,\r
-0xf0,0x8d,0xe7,0xec,0x1d,0xae,0x2a,0xb1,0x8d,0x6c,0x65,0x3d,0x82,0x4d,0x8c,0xfe,\r
-0x78,0xae,0x7a,0xfb,0xf6,0x20,0xf1,0x54,0x07,0xe4,0xd3,0x0b,0x0f,0xfa,0x67,0x70,\r
-0x87,0xff,0x00,0x66,0xaf,0xd0,0xfc,0x51,0x8a,0x87,0x96,0xd3,0xe9,0x27,0xf7,0x9c,\r
-0xf2,0xc8,0xf0,0xb2,0xef,0xf8,0x7f,0x91,0xf9,0xa7,0x7b,0xfb,0x1f,0x78,0xc6,0xd4,\r
-0x90,0xba,0x46,0xa0,0x4f,0xfb,0x1f,0x30,0xfd,0x2b,0x0a,0xef,0xf6,0x69,0xf1,0x85,\r
-0x91,0x3b,0xb4,0xed,0x4e,0x3c,0x7a,0xdb,0xb7,0xf8,0x57,0xea,0x4e,0x29,0x0a,0xe6,\r
-0xa1,0xe5,0xab,0xa4,0xdf,0xe0,0x72,0xcb,0x87,0x70,0xd2,0xeb,0xf8,0x23,0xf2,0x7a,\r
-0xef,0xe0,0xd7,0x8a,0x6c,0x72,0x59,0x6e,0xa3,0x03,0xfb,0xf1,0x11,0x59,0xef,0xe0,\r
-0x3f,0x13,0xdb,0x74,0x91,0xce,0x3d,0x54,0xd7,0xeb,0x83,0x44,0xae,0x30,0xc0,0x11,\r
-0xe8,0x45,0x55,0x9f,0x45,0xb0,0xba,0xff,0x00,0x5d,0x65,0x6f,0x30,0xff,0x00,0x6e,\r
-0x25,0x3f,0xd2,0xb2,0x79,0x6c,0xba,0x4f,0xf0,0x38,0xe5,0xc2,0xf8,0x79,0x76,0xfb,\r
-0xbf,0xe0,0x9f,0x92,0x6d,0xa0,0x78,0xaa,0xdf,0xdf,0xeb,0x9a,0x88,0xa7,0x8a,0x2d,\r
-0xfe,0xf4,0x3b,0xbe,0x86,0xbf,0x57,0xee,0x3c,0x03,0xe1,0xbb,0xa0,0x7c,0xdd,0x07,\r
-0x4d,0x7c,0xf7,0x36,0xa9,0xfe,0x15,0x97,0x73,0xf0,0x6f,0xc1,0x77,0x79,0xf3,0x3c,\r
-0x3b,0x67,0xff,0x00,0x00,0x52,0x9f,0xc8,0x8a,0xc9,0xe5,0xb5,0x3b,0xa6,0x72,0x4b,\r
-0x84,0xe9,0x74,0xb7,0xe2,0x8f,0xcb,0x31,0xaa,0xf8,0x8a,0x0f,0xbf,0x68,0xc6,0x94,\r
-0x78,0xab,0x58,0x8b,0xef,0xd8,0xcb,0xc7,0xfb,0x26,0xbf,0x4d,0xae,0x7f,0x67,0x8f,\r
-0x00,0xdd,0x67,0x3a,0x12,0x46,0x4f,0x74,0x99,0xff,0x00,0xf8,0xaa,0xc5,0xbb,0xfd,\r
-0x94,0xfc,0x09,0x75,0x9d,0xb6,0xf7,0x70,0x67,0xfe,0x79,0xca,0xbf,0xd5,0x4d,0x63,\r
-0x2c,0xb2,0xa7,0xf2,0xc5,0x9c,0xb2,0xe1,0x37,0xd3,0xff,0x00,0x4a,0x67,0xe7,0x32,\r
-0xf8,0xee,0xf6,0x3f,0xbf,0x6b,0x28,0xfc,0x0d,0x4c,0x9f,0x11,0x4a,0x9f,0x9e,0x17,\r
-0x1f,0x85,0x7d,0xf7,0x79,0xfb,0x1c,0x78,0x36,0x7f,0xf5,0x37,0x57,0xd1,0x1f,0xf6,\r
-0x8a,0x37,0xfe,0xca,0x2b,0x02,0xf3,0xf6,0x22,0xd1,0x26,0x72,0x62,0xd6,0x9d,0x17,\r
-0xd1,0xed,0x43,0x1f,0xcf,0x78,0xac,0x1e,0x59,0x3e,0xb4,0x97,0xde,0x73,0x4b,0x85,\r
-0xab,0xaf,0x86,0xff,0x00,0x7a,0x3e,0x2b,0x4f,0x89,0x10,0xff,0x00,0x10,0x65,0xfa,\r
-0x8a,0xb1,0x1f,0xc4,0x4b,0x46,0xea,0xf8,0xaf,0xac,0x2f,0x7f,0x61,0x2b,0x49,0x01,\r
-0xf2,0x35,0x88,0x1d,0xbb,0x09,0x2d,0x8a,0xff,0x00,0x53,0x5c,0xf5,0xe7,0xec,0x19,\r
-0xa8,0x1f,0xf5,0x77,0x5a,0x63,0x8f,0xf7,0x98,0x7f,0xec,0xb5,0x83,0xcb,0x5f,0x5a,\r
-0x4c,0xe7,0x97,0x0e,0xe2,0xe3,0xb3,0x97,0xe0,0xcf,0x9e,0xa3,0xf1,0xed,0x9b,0xff,\r
-0x00,0xcb,0x45,0x15,0x66,0x3f,0x19,0xd9,0x3f,0xfc,0xb5,0x4f,0xce,0xbd,0x7a,0xfb,\r
-0xf6,0x11,0xd7,0xe3,0x62,0x23,0x86,0xce,0x61,0xeb,0x1c,0xc0,0x67,0xf3,0xc5,0x73,\r
-0xf7,0x9f,0xb1,0x27,0x8b,0x21,0xdd,0xb3,0x4a,0x76,0x03,0xfe,0x79,0xdc,0x21,0xff,\r
-0x00,0xd9,0xab,0x09,0x65,0xb1,0x5b,0xd3,0x92,0xf9,0x1c,0xd2,0xc9,0x31,0xd1,0xea,\r
-0xff,0x00,0xf0,0x13,0x89,0x4f,0x14,0xd9,0xbf,0xfc,0xb5,0x4f,0xfb,0xea,0xa7,0x4d,\r
-0x7e,0xd5,0xff,0x00,0x8d,0x4f,0xe2,0x2b,0x4a,0xf7,0xf6,0x43,0xf1,0x8d,0xa0,0x2d,\r
-0xfd,0x8f,0xa8,0x81,0xe9,0x1a,0x16,0xfe,0x42,0xb0,0xef,0x7f,0x66,0xdf,0x17,0x58,\r
-0xf2,0xda,0x76,0xa7,0x17,0xfb,0xf6,0xed,0xfe,0x15,0xcf,0x2c,0xbe,0x9a,0xee,0xbe,\r
-0x47,0x3c,0xb2,0xdc,0x74,0x3a,0xfe,0x0c,0xbe,0xba,0xb5,0xbb,0x7f,0x18,0xa9,0x17,\r
-0x51,0x80,0xff,0x00,0x18,0xae,0x46,0xe7,0xe1,0x07,0x89,0xac,0x8e,0x1b,0xed,0x28,\r
-0x47,0x67,0x88,0xd5,0x17,0xf0,0x2f,0x89,0xad,0x8f,0x12,0x3f,0x1e,0xaa,0x6b,0x17,\r
-0x81,0xa5,0xd2,0x46,0x2f,0x0d,0x8d,0x8f,0x63,0xd0,0x16,0xfa,0x23,0xd2,0x4f,0xd6,\r
-0xa5,0x5b,0xdc,0x7d,0xd9,0x88,0xfc,0x6b,0xcc,0xdb,0x42,0xf1,0x4d,0xbe,0x79,0x27,\r
-0xeb,0x9a,0x66,0xcf,0x13,0x41,0xf7,0xa2,0x2d,0x8f,0x43,0x51,0xfd,0x9f,0x17,0xb4,\r
-0x85,0xc9,0x8d,0x8f,0xd8,0xfc,0x4f,0x55,0x4d,0x52,0x74,0xfb,0xb7,0x4e,0x3e,0x8d,\r
-0x56,0x23,0xd7,0xef,0xe3,0xfb,0x97,0xb2,0x8f,0xa3,0x1a,0xf2,0x1f,0xed,0x5f,0x10,\r
-0xc2,0x3e,0x6b,0x47,0x3f,0x4a,0x51,0xe2,0x9d,0x62,0x3f,0xbf,0x67,0x27,0xfd,0xf3,\r
-0x51,0xfd,0x9d,0x2e,0x92,0x41,0xed,0x31,0xb0,0xde,0x9b,0xfb,0xcf,0x67,0x8f,0xc6,\r
-0x1a,0xc4,0x5f,0x77,0x50,0x97,0xfe,0xfa,0xab,0xb0,0x7c,0x44,0xd7,0xe0,0xfb,0xba,\r
-0x84,0x9f,0x8d,0x78,0x7a,0xf8,0xea,0xf2,0x3f,0xf5,0x96,0xb2,0x8f,0xf8,0x09,0xa9,\r
-0x53,0xe2,0x29,0x5f,0xbf,0x14,0x8b,0xf5,0x14,0x96,0x06,0xbc,0x7e,0x17,0xf8,0x94,\r
-0xb1,0xd8,0xb8,0x6f,0x19,0x23,0xde,0x60,0xf8,0xb7,0xe2,0x48,0x3f,0xe5,0xf4,0x9f,\r
-0xad,0x69,0x43,0xf1,0xd7,0xc4,0xd0,0x81,0x8b,0x8c,0xe3,0xdc,0xd7,0xcf,0x91,0xfc,\r
-0x48,0x87,0xb8,0x65,0xfc,0x2a,0xcc,0x7f,0x11,0x2d,0x5b,0xab,0xe3,0xea,0x2a,0x95,\r
-0x0c,0x5c,0x7e,0x19,0x3f,0xbc,0xd5,0x67,0x18,0x98,0x6e,0xe4,0xbe,0x47,0xd1,0xb6,\r
-0xbf,0xb4,0x67,0x88,0xe0,0x00,0x17,0xcf,0xd0,0xd6,0xa5,0xbf,0xed,0x3f,0xae,0x46,\r
-0x7e,0x70,0xc7,0xf1,0xaf,0x99,0xe3,0xf1,0xed,0x9b,0x7f,0xcb,0x41,0xf8,0xd5,0x98,\r
-0xfc,0x69,0x66,0xf8,0xfd,0xea,0x7e,0x75,0x4a,0x58,0xf8,0x6d,0x26,0x6f,0x1e,0x20,\r
-0xaf,0x1f,0xb6,0xfe,0xe3,0xea,0x5b,0x7f,0xda,0xb3,0x50,0x4c,0x6f,0x84,0x93,0xf4,\r
-0x15,0xa9,0x6b,0xfb,0x58,0x37,0x1e,0x6c,0x39,0xff,0x00,0x80,0xd7,0xc9,0xd1,0xf8,\r
-0xae,0xd1,0xff,0x00,0xe5,0xa2,0x7e,0x75,0x3a,0x78,0x86,0xd5,0xfa,0x3a,0xfe,0x75,\r
-0x6b,0x19,0x98,0xc3,0xed,0x33,0xa6,0x3c,0x4d,0x59,0x7f,0xcb,0xc4,0x7d,0x7f,0x6f,\r
-0xfb,0x56,0xd9,0x39,0xc3,0xc2,0x07,0xd4,0x56,0xad,0xb7,0xed,0x45,0xa2,0xc9,0x8f,\r
-0x31,0x00,0xfc,0x6b,0xe3,0x15,0xd6,0x2d,0xdb,0xf8,0x87,0xe7,0x52,0x2e,0xa5,0x03,\r
-0x7f,0x1e,0x2b,0x45,0x9a,0xe6,0x11,0xdd,0xfe,0x07,0x5c,0x38,0x9a,0xb7,0xf3,0x26,\r
-0x7d,0xbb,0x6d,0xfb,0x48,0x78,0x7a,0x7c,0x6e,0x60,0xbf,0xf0,0x2a,0xd4,0x83,0xe3,\r
-0xdf,0x86,0x66,0xc7,0xef,0xc0,0xff,0x00,0x81,0x0a,0xf8,0x48,0x5f,0x44,0x7a,0x3f,\r
-0xeb,0x4f,0x5b,0xc5,0xea,0x25,0xc7,0xe3,0x5a,0x2c,0xef,0x1b,0x1d,0xd2,0xfb,0x8e,\r
-0xc8,0xf1,0x35,0x5e,0xa9,0x33,0xef,0xd8,0x3e,0x30,0xf8,0x6e,0x7c,0x62,0xec,0x0f,\r
-0xc4,0x55,0xe8,0x7e,0x25,0x78,0x7e,0x7c,0x6d,0xbe,0x4f,0xc6,0xbf,0x3e,0x56,0xf9,\r
-0x86,0x31,0x3b,0x7f,0xdf,0x55,0x3a,0x6a,0xd7,0x51,0xfd,0xcb,0xb9,0x07,0xd1,0xab,\r
-0x65,0xc4,0x18,0x85,0xbc,0x11,0xd5,0x1e,0x25,0x7d,0x60,0x7e,0x86,0x47,0xe3,0x4d,\r
-0x16,0x5c,0x62,0xfe,0x2f,0xc4,0xd5,0xa8,0xfc,0x45,0xa6,0xcb,0xf7,0x6f,0x61,0x3f,\r
-0xf0,0x2a,0xfc,0xf1,0x8f,0xc4,0x7a,0x8c,0x7f,0x76,0xf6,0x51,0xff,0x00,0x02,0xab,\r
-0x91,0x78,0xdf,0x5a,0x87,0xee,0xea,0x12,0x7e,0x75,0xb2,0xe2,0x29,0xaf,0x8a,0x9f,\r
-0xe2,0x74,0x47,0x89,0x21,0xd6,0x07,0xe8,0x52,0xea,0x96,0x8f,0xf7,0x6e,0x62,0x3f,\r
-0x46,0x15,0x2a,0xdc,0x44,0xdd,0x24,0x43,0xf4,0x22,0xbf,0x3f,0x20,0xf8,0x97,0xe2,\r
-0x08,0x08,0xdb,0x7c,0xe7,0xeb,0x57,0xe1,0xf8,0xc5,0xe2,0x48,0x7f,0xe5,0xec,0x9a,\r
-0xde,0x3c,0x45,0x0f,0xb5,0x4d,0x9d,0x31,0xe2,0x2c,0x3b,0xde,0x2c,0xfb,0xdc,0x3a,\r
-0x9e,0x8c,0x0f,0xe3,0x4b,0x9a,0xf8,0x66,0xdf,0xe3,0xdf,0x89,0x2d,0xff,0x00,0xe5,\r
-0xb6,0x7f,0x13,0x5a,0x96,0xdf,0xb4,0x87,0x88,0x21,0xc6,0xe6,0x2d,0xf8,0x9a,0xdd,\r
-0x71,0x0e,0x1d,0xef,0x16,0x8d,0xe3,0x9f,0xe1,0x1e,0xec,0xfb,0x4b,0x38,0xa3,0x22,\r
-0xbe,0x42,0xb7,0xfd,0xa8,0xb5,0x98,0xf1,0xb9,0x0f,0xe7,0x9a,0xd4,0xb5,0xfd,0xab,\r
-0x2e,0xd7,0x1e,0x64,0x44,0xfe,0x15,0xba,0xcf,0xb0,0x8f,0x7b,0xfd,0xc7,0x44,0x73,\r
-0xac,0x1c,0xbe,0xd1,0xf5,0x4e,0x45,0x15,0xf3,0x55,0xb7,0xed,0x5c,0xac,0x47,0x99,\r
-0x00,0x03,0xfd,0xda,0xd5,0xb7,0xfd,0xaa,0x74,0xe6,0xc6,0xf8,0x97,0xf2,0x35,0xbc,\r
-0x73,0x9c,0x14,0xbe,0xd9,0xd1,0x1c,0xd3,0x09,0x2d,0xa6,0x8f,0xa0,0x33,0x4b,0x5e,\r
-0x25,0x6b,0xfb,0x4e,0x68,0xb2,0xfd,0xf0,0x8b,0xf8,0x9a,0xd5,0xb7,0xfd,0xa2,0xfc,\r
-0x3b,0x36,0x01,0x60,0x0f,0xfb,0xd5,0xd1,0x1c,0xcf,0x07,0x2d,0xaa,0x23,0x75,0x8e,\r
-0xc3,0xcb,0x69,0xa3,0xd6,0x28,0xaf,0x3a,0x83,0xe3,0x9f,0x86,0xe6,0xc7,0xfa,0x40,\r
-0x5c,0xff,0x00,0xb4,0x2b,0x46,0xdf,0xe2,0xdf,0x87,0x6e,0x31,0x8b,0xb5,0x1f,0x52,\r
-0x2b,0x75,0x8d,0xc3,0x4b,0x6a,0x8b,0xef,0x36,0x58,0x8a,0x2f,0x69,0x23,0xb4,0xa2,\r
-0xb9,0xa8,0xfe,0x22,0xe8,0x12,0xfd,0xdb,0xf4,0xcd,0x5b,0x8b,0xc6,0x1a,0x44,0xdf,\r
-0x76,0xfa,0x2f,0xc4,0xd6,0xca,0xbd,0x29,0x6d,0x25,0xf7,0x9a,0x2a,0x90,0x7b,0x33,\r
-0x6a,0x8a,0xce,0x4f,0x10,0x69,0xd2,0x7d,0xdb,0xc8,0x5b,0xfe,0x05,0x56,0x13,0x51,\r
-0xb6,0x7e,0x97,0x11,0x1f,0xf8,0x18,0xad,0x14,0xe2,0xf6,0x65,0x73,0x2e,0xe5,0x9a,\r
-0x2a,0x35,0xb8,0x89,0xfe,0xec,0x88,0x7e,0x8d,0x4f,0xdc,0x3d,0x45,0x55,0xca,0x16,\r
-0x8a,0x29,0x33,0x4c,0x05,0xa2,0x93,0x34,0x66,0x80,0x16,0x8a,0x4a,0x33,0x40,0x0b,\r
-0x45,0x14,0x94,0x01,0xf3,0xdf,0xed,0x45,0x77,0xb6,0xde,0x38,0xf3,0xd2,0x3c,0x57,\r
-0xc7,0x5e,0x24,0xbc,0x5b,0x7b,0x39,0x58,0x9c,0x61,0x4d,0x7d,0x53,0xfb,0x54,0x5f,\r
-0x88,0xee,0x4a,0x93,0x8c,0x28,0x02,0xbe,0x1a,0xf8,0x97,0xe2,0x95,0xb6,0xb3,0x78,\r
-0x95,0xf2,0xc4,0x73,0xcd,0x7e,0x79,0x88,0xa6,0xeb,0xe6,0x53,0xf2,0xb1,0xf9,0x1f,\r
-0x13,0xd4,0x73,0xc4,0xaa,0x31,0xdd,0x9e,0xad,0xff,0x00,0x04,0xe8,0xd3,0xe6,0xd6,\r
-0x3f,0x69,0x8f,0x14,0xea,0xe1,0x37,0xda,0x69,0xfe,0x1f,0x92,0x06,0x7c,0xfd,0xd9,\r
-0x25,0xb8,0x8b,0x60,0xfc,0x44,0x4f,0xf9,0x57,0xe9,0x78,0xaf,0x87,0x7f,0xe0,0x96,\r
-0xbe,0x07,0x96,0xcb,0xc1,0x1e,0x34,0xf1,0xa4,0xe0,0x8f,0xed,0xcd,0x42,0x3b,0x3b,\r
-0x70,0xc3,0xac,0x56,0xca,0xd9,0x61,0xf5,0x69,0x98,0x7f,0xc0,0x2b,0xee,0x3a,0xfb,\r
-0xba,0x11,0xe5,0xa6,0x91,0xfa,0x46,0x59,0x43,0xea,0xf8,0x3a,0x74,0xfb,0x20,0xa2,\r
-0x8a,0x2b,0xa0,0xf5,0x02,0x8a,0x28,0xa0,0x02,0x8a,0x28,0xa0,0x02,0x8a,0x28,0xa0,\r
-0x02,0x8a,0x28,0xa0,0x02,0x8a,0x28,0xa0,0x02,0x8a,0x28,0xa0,0x02,0x8a,0x28,0xa0,\r
-0x02,0x8a,0x28,0xa0,0x02,0x8a,0x28,0xa0,0x02,0x93,0x14,0xb4,0x50,0x02,0x62,0x8c,\r
-0x52,0xd1,0x40,0x0d,0x23,0xd2,0x94,0x0a,0x5a,0x28,0x01,0x31,0x46,0xd1,0x4b,0x45,\r
-0x00,0x46,0xd0,0xa3,0x82,0x19,0x15,0x81,0xec,0x45,0x54,0x9b,0x40,0xd3,0x6e,0x46,\r
-0x26,0xd3,0xed,0x65,0x1f,0xed,0xc2,0xa7,0xfa,0x55,0xfa,0x2a,0x5c,0x53,0xdd,0x12,\r
-0xe2,0x9e,0xe8,0xe7,0x6e,0x7e,0x1e,0x78,0x62,0xf3,0xfd,0x76,0x81,0xa7,0x3f,0xfd,\r
-0xbb,0x20,0xfe,0x42,0xb2,0xee,0x7e,0x0b,0xf8,0x26,0xef,0x3e,0x67,0x87,0x2c,0xc6,\r
-0x7f,0xb8,0xa5,0x3f,0x91,0x15,0xdb,0x51,0x59,0xba,0x34,0x9e,0xf1,0x5f,0x71,0x93,\r
-0xa1,0x4a,0x5b,0xc1,0x7d,0xc8,0xf3,0x2b,0xbf,0xd9,0xc7,0xc0,0x37,0x60,0x8f,0xec,\r
-0x51,0x1f,0xba,0x4c,0xff,0x00,0xd4,0x9a,0xc7,0xba,0xfd,0x93,0xfc,0x09,0x70,0x72,\r
-0xb0,0xdd,0xc3,0xec,0x92,0xaf,0xf5,0x53,0x5e,0xcb,0x45,0x64,0xf0,0x94,0x1f,0xd8,\r
-0x46,0x0f,0x03,0x86,0x7b,0xd3,0x5f,0x71,0xe0,0x37,0xbf,0xb1,0xaf,0x84,0x27,0xcf,\r
-0x91,0x77,0x79,0x11,0x3f,0xdf,0xd8,0xf8,0xfd,0x05,0x61,0x5d,0x7e,0xc3,0xba,0x2c,\r
-0xb9,0xf2,0xf5,0xc6,0x5f,0x4d,0xd6,0x80,0xff,0x00,0xec,0xf5,0xf4,0xdd,0x15,0x9b,\r
-0xc0,0xe1,0xdf,0xd9,0xfc,0xcc,0x9e,0x5b,0x84,0x7f,0x63,0xf3,0x3e,0x46,0xd4,0x3f,\r
-0x61,0x38,0x98,0x9f,0xb3,0x6a,0xd6,0x92,0x0f,0xfa,0x69,0x01,0x4f,0xe5,0x9a,0xe7,\r
-0xef,0x3f,0x60,0xcd,0x49,0x89,0xf2,0xee,0xb4,0xb7,0x1d,0xbe,0x77,0x07,0xff,0x00,\r
-0x40,0xaf,0xb6,0x31,0x46,0x2b,0x37,0x97,0x50,0xe9,0x75,0xf3,0x31,0x79,0x46,0x15,\r
-0xf4,0x7f,0x79,0xf0,0x45,0xff,0x00,0xec,0x29,0xe2,0x18,0x81,0x31,0x5b,0x5a,0x4d,\r
-0x8e,0xd1,0xdc,0x00,0x4f,0xe7,0x8a,0xc0,0xba,0xfd,0x89,0xbc,0x5d,0x10,0x24,0x69,\r
-0x12,0x71,0xfd,0xcb,0x84,0x3f,0xc9,0xab,0xf4,0x5b,0x14,0x98,0x35,0x1f,0xd9,0xb4,\r
-0xfa,0x49,0x9c,0xf2,0xc8,0xf0,0xd2,0xea,0xff,0x00,0x0f,0xf2,0x3f,0x33,0x2f,0xbf,\r
-0x64,0xaf,0x18,0x59,0x96,0x1f,0xd8,0xda,0x96,0x47,0xfc,0xf3,0x8d,0x98,0x7e,0x60,\r
-0x56,0x15,0xdf,0xec,0xe7,0xe2,0xcb,0x30,0x49,0xd3,0xf5,0x38,0xc0,0xea,0x5a,0xdd,\r
-0xb1,0xfc,0xab,0xf5,0x47,0x14,0x9b,0x73,0xd6,0xb3,0x79,0x6f,0x6a,0x8c,0xe5,0x97,\r
-0x0e,0xe1,0xe5,0xd7,0xf0,0x47,0xe4,0xbd,0xcf,0xc2,0x3f,0x11,0xd9,0x83,0x93,0x70,\r
-0x9f,0xef,0x46,0x45,0x51,0x93,0xc0,0xfe,0x25,0xb7,0xe9,0x23,0xf1,0xea,0xa6,0xbf,\r
-0x5c,0xde,0xde,0x39,0x06,0x19,0x15,0x87,0xa3,0x0c,0xd5,0x3b,0x8f,0x0f,0x69,0x77,\r
-0x9f,0xeb,0xf4,0xeb,0x49,0xbf,0xdf,0x81,0x5b,0xf9,0x8a,0xcd,0xe5,0xd3,0xe9,0x3f,\r
-0xc0,0xe3,0x9f,0x0b,0xd0,0x97,0x6f,0xbb,0xfe,0x09,0xf9,0x24,0xda,0x1f,0x8a,0x2d,\r
-0xfb,0x96,0xc7,0xd6,0xa3,0x2b,0xe2,0x58,0x3a,0xc5,0xbb,0xe8,0x6b,0xf5,0x7a,0xe3,\r
-0xe1,0xb7,0x85,0x6e,0xb3,0xe6,0xf8,0x7b,0x4d,0x6c,0xf5,0x3f,0x66,0x40,0x7f,0x41,\r
-0x59,0x57,0x5f,0x04,0x7c,0x0f,0x77,0xf7,0xfc,0x3b,0x68,0x3d,0x76,0xee,0x5f,0xe4,\r
-0x6b,0x27,0x96,0xd5,0xee,0x99,0xc7,0x2e,0x14,0xa6,0xf6,0xb7,0xe2,0x7e,0x5a,0xff,\r
-0x00,0x6a,0xf8,0x86,0x1f,0xbd,0x6a,0xc7,0x1e,0x94,0xe1,0xe2,0x9d,0x62,0x2f,0xbf,\r
-0x67,0x27,0xfd,0xf3,0x5f,0xa6,0x37,0x7f,0xb3,0x5f,0x80,0x2e,0xff,0x00,0xe6,0x0c,\r
-0x61,0xff,0x00,0xae,0x73,0x3f,0xf5,0x26,0xb1,0xee,0xbf,0x64,0xbf,0x01,0xdc,0x92,\r
-0x56,0x1b,0xd8,0x7d,0x92,0x65,0xfe,0xaa,0x6b,0x17,0x96,0xd5,0xfe,0x58,0x9c,0xb2,\r
-0xe1,0x3e,0xcb,0xf1,0x7f,0xe4,0x7e,0x74,0x8f,0x1c,0xde,0xc6,0x7e,0x7b,0x59,0x07,\r
-0xe0,0x6a,0x54,0xf8,0x88,0xeb,0xf7,0xe2,0x71,0xf9,0xd7,0xde,0xd7,0xbf,0xb1,0x87,\r
-0x85,0x27,0xcf,0x91,0x7f,0x79,0x0f,0xfb,0xea,0xaf,0xfe,0x15,0x89,0x75,0xfb,0x0e,\r
-0x68,0xf2,0x92,0x63,0xd7,0x18,0x7b,0x35,0xa0,0x3f,0xfb,0x3d,0x61,0x2c,0xb6,0xa7,\r
-0x5a,0x6b,0xef,0x39,0xa5,0xc2,0xd5,0x97,0xc3,0x7f,0xbd,0x1f,0x16,0xc7,0xf1,0x1e,\r
-0x2e,0xe0,0x8a,0xb3,0x1f,0xc4,0x4b,0x66,0xea,0xf5,0xf5,0x5e,0xa1,0xfb,0x08,0x29,\r
-0xcf,0xd9,0xb5,0x6b,0x39,0x07,0x6f,0x36,0x16,0x5f,0xe5,0x9a,0xe7,0xee,0xff,0x00,\r
-0x60,0xbd,0x4c,0x82,0x52,0xe7,0x4a,0x7f,0x6d,0xce,0x3f,0xf6,0x4a,0xc2,0x59,0x6b,\r
-0xeb,0x49,0x9c,0xd2,0xe1,0xcc,0x5c,0x76,0x72,0xfc,0x19,0xf3,0xec,0x7e,0x3d,0xb4,\r
-0x7c,0x66,0x40,0x3e,0xb5,0x66,0x3f,0x1a,0xd9,0xbe,0x3f,0x7a,0xb5,0xea,0xfa,0x87,\r
-0xec,0x2f,0xe2,0x58,0x58,0x88,0xac,0x6d,0xe7,0x03,0xbc,0x57,0x0a,0x07,0xea,0x45,\r
-0x61,0x5e,0x7e,0xc5,0x3e,0x2f,0x81,0x49,0x1a,0x3c,0xa7,0x1f,0xf3,0xce,0x74,0x6f,\r
-0xe4,0xd5,0x83,0xcb,0xa3,0xd6,0x9c,0x97,0xc8,0xe7,0x96,0x49,0x8e,0x8e,0xd2,0x7f,\r
-0xf8,0x09,0xc6,0xc7,0xe2,0xcb,0x47,0xc7,0xef,0x53,0xf3,0xa9,0xd3,0xc4,0x76,0xaf,\r
-0xd2,0x45,0x3f,0x8d,0x5d,0xbc,0xfd,0x93,0x7c,0x61,0x66,0x0b,0x7f,0x62,0xea,0x60,\r
-0x7f,0xb1,0x13,0x37,0xf2,0x15,0x87,0x79,0xfb,0x3b,0xf8,0xb2,0xc7,0xef,0xe9,0xfa,\r
-0x9c,0x5f,0xef,0xdb,0xb0,0xfe,0x95,0xce,0xf0,0x14,0x97,0x46,0xbe,0x47,0x3c,0xb2,\r
-0xec,0x74,0x3e,0xd7,0xe0,0xcd,0x55,0xd6,0xad,0xdb,0xf8,0x87,0xe7,0x52,0x0d,0x4e,\r
-0x06,0xfe,0x31,0x5c,0x6d,0xc7,0xc2,0x9f,0x10,0xda,0x31,0x52,0xd3,0xa1,0x07,0x18,\r
-0x68,0xc8,0xaa,0x72,0x78,0x23,0xc4,0x96,0xfd,0x24,0x63,0x8f,0xf6,0x4d,0x66,0xf0,\r
-0x34,0xba,0x48,0xc1,0xe1,0x71,0xb1,0xec,0xcf,0x41,0x17,0xf0,0xff,0x00,0x7a,0x9e,\r
-0xb7,0x91,0xf6,0x7f,0xd6,0xbc,0xd1,0xb4,0x4f,0x13,0x41,0xdc,0x9f,0x6e,0x69,0xa4,\r
-0x78,0x96,0x0e,0xb1,0x16,0xfc,0x6b,0x37,0x97,0xc5,0xed,0x22,0x7d,0x9e,0x35,0x7d,\r
-0x84,0xfe,0x67,0xa8,0xad,0xe0,0x1d,0x25,0x23,0xf1,0xa9,0x93,0x50,0x95,0x7e,0xed,\r
-0xc3,0x8f,0xa3,0x57,0x93,0xff,0x00,0x6a,0xf8,0x82,0x1f,0xbd,0x6a,0xc7,0x1e,0x94,\r
-0xa3,0xc5,0x3a,0xbc,0x5f,0x7e,0xd2,0x4f,0xfb,0xe6,0xa1,0xe5,0xcf,0xa4,0x90,0x73,\r
-0x62,0xe3,0xbd,0x37,0xf7,0x9e,0xbd,0x1e,0xb5,0x7b,0x11,0xf9,0x2e,0xe4,0x1f,0x47,\r
-0x35,0x65,0x3c,0x55,0xaa,0xc7,0xf7,0x6f,0xa5,0xff,0x00,0xbe,0x8d,0x78,0xe0,0xf1,\r
-0xcd,0xe4,0x7f,0x7e,0xda,0x41,0xff,0x00,0x01,0x35,0x2a,0x7c,0x44,0x61,0xf7,0xa2,\r
-0x71,0x51,0xfd,0x9f,0x55,0x6c,0xff,0x00,0x11,0xac,0x5e,0x26,0x3b,0xc2,0x47,0xb4,\r
-0xc3,0xe3,0xcd,0x72,0x0f,0xbb,0x7d,0x27,0xe2,0x6a,0xec,0x3f,0x14,0x7c,0x43,0x0e,\r
-0x31,0x7a,0xe7,0xea,0x6b,0xc4,0x13,0xe2,0x3c,0x47,0x19,0xdd,0x56,0xa3,0xf8,0x89,\r
-0x6c,0x71,0x97,0x22,0x8f,0xa9,0xe2,0x63,0xb5,0xfe,0xf3,0x45,0x9a,0x57,0x86,0xfc,\r
-0xcb,0xef,0x3d,0xda,0xdf,0xe3,0x4f,0x89,0x20,0xc6,0x2e,0x4f,0xe6,0x6b,0x46,0xdb,\r
-0xe3,0xff,0x00,0x88,0xa0,0xc6,0x64,0x2c,0x7d,0x77,0x57,0x81,0x47,0xe3,0xdb,0x46,\r
-0xff,0x00,0x96,0x95,0x66,0x3f,0x1a,0xda,0x37,0xfc,0xb5,0x5a,0x7c,0x98,0xc8,0x6d,\r
-0x27,0xf7,0x9b,0x47,0x3c,0xad,0x1f,0xb6,0xfe,0xe3,0xe8,0x8b,0x7f,0xda,0x53,0x5f,\r
-0x8b,0x86,0x27,0x1e,0xcd,0x5a,0x96,0xdf,0xb5,0x26,0xab,0x10,0x1b,0xe3,0x63,0xf5,\r
-0x35,0xf3,0x5c,0x7e,0x2d,0xb4,0x7e,0x92,0xaf,0xe7,0x53,0xaf,0x88,0xed,0x5f,0xa3,\r
-0xaf,0xe7,0x56,0xab,0xe3,0xe1,0xb4,0xd9,0xd3,0x1e,0x22,0xac,0xbf,0xe5,0xe1,0xf5,\r
-0x0d,0xb7,0xed,0x59,0x73,0x91,0xe6,0xa1,0xff,0x00,0xbe,0x45,0x6b,0x5b,0x7e,0xd5,\r
-0xb0,0xb6,0x03,0xc2,0x3e,0xa4,0x57,0xc9,0xc9,0xad,0xdb,0xbf,0xf1,0x8f,0xce,0xa5,\r
-0x5d,0x52,0x06,0xfe,0x2a,0xb5,0x98,0x66,0x10,0xfb,0x6f,0xee,0x3a,0xe1,0xc4,0x95,\r
-0x97,0xdb,0x47,0xd8,0x16,0xbf,0xb5,0x26,0x9a,0xc3,0xf7,0xa8,0xbf,0x91,0xad,0x4b,\r
-0x6f,0xda,0x5b,0x44,0x9b,0x19,0x0a,0x3f,0x1a,0xf8,0xb4,0x6a,0x30,0x9e,0x77,0x0a,\r
-0x6b,0xea,0xb0,0x20,0x3f,0x3f,0xeb,0x5b,0x47,0x36,0xc7,0xad,0x2f,0x7f,0x91,0xd4,\r
-0xb8,0x9e,0xac,0x77,0x68,0xfb,0xa2,0xdf,0xf6,0x84,0xf0,0xec,0xa0,0x66,0x50,0x0f,\r
-0xb3,0x0a,0xb7,0x37,0xc7,0x8f,0x0d,0x43,0x6e,0x65,0x7b,0x8c,0x01,0xdb,0x70,0xcd,\r
-0x7e,0x7b,0xdf,0xf8,0xce,0xd6,0xc9,0x09,0x33,0x85,0xc7,0xfb,0x55,0xc0,0x78,0x93,\r
-0xe2,0xcc,0x80,0x34,0x76,0x92,0xb1,0x27,0xbe,0x6b,0xd5,0xa1,0x8f,0xcc,0x2a,0xbd,\r
-0x52,0x17,0xfa,0xd9,0x56,0x4f,0x96,0x9d,0x3e,0x66,0x7b,0xb7,0xed,0x37,0xf1,0xc6,\r
-0xcf,0x5f,0xd5,0xee,0xe4,0xb5,0x93,0x31,0x74,0x8c,0x1e,0xb5,0xf2,0xd7,0x87,0x3c,\r
-0x2b,0xaf,0xfc,0x6d,0xf1,0xe6,0x9f,0xe1,0x8d,0x0a,0x16,0xb8,0xd4,0x35,0x09,0x76,\r
-0x6e,0xfe,0x08,0x63,0xcf,0xcd,0x23,0x9e,0xca,0xa3,0x24,0x9f,0x6f,0x5a,0x93,0xc2,\r
-0xbe,0x13,0xf1,0x57,0xc6,0x6f,0x16,0x41,0xa3,0x68,0x36,0x13,0x6a,0xba,0x95,0xc3,\r
-0x70,0x89,0xf7,0x51,0x7b,0xbb,0xb1,0xe1,0x54,0x77,0x27,0xfa,0x8a,0xfd,0x46,0xfd,\r
-0x97,0x3f,0x65,0xdd,0x1b,0xf6,0x79,0xf0,0xdb,0x39,0x31,0xea,0x5e,0x2b,0xbe,0x41,\r
-0xfd,0xa1,0xa9,0xe3,0x8c,0x75,0xf2,0xa2,0xcf,0x21,0x01,0xfc,0x58,0xf2,0x7b,0x01,\r
-0xe9,0x61,0x70,0xaf,0x99,0xce,0x5b,0xbd,0x5b,0x34,0xcb,0x30,0x15,0x73,0x1c,0x53,\r
-0xc6,0x62,0x3f,0xe0,0x7a,0x23,0xd2,0xfe,0x17,0x7c,0x3e,0xd3,0x7e,0x15,0xf8,0x03,\r
-0x44,0xf0,0xa6,0x92,0x81,0x6c,0x74,0xbb,0x65,0x81,0x5b,0x1c,0xbb,0x75,0x67,0x3e,\r
-0xec,0xc4,0x93,0xf5,0xae,0xaa,0x90,0x0c,0x52,0xd7,0xd0,0x25,0x6d,0x0f,0xd2,0xd2,\r
-0xb2,0xb2,0x0a,0x28,0xa2,0x81,0x85,0x14,0x51,0x40,0x05,0x14,0x51,0x40,0x05,0x14,\r
-0x51,0x40,0x05,0x14,0x51,0x40,0x05,0x14,0x51,0x40,0x05,0x14,0x51,0x40,0x05,0x14,\r
-0x51,0x40,0x05,0x14,0x51,0x40,0x05,0x14,0x51,0x40,0x05,0x14,0x51,0x40,0x05,0x14,\r
-0x51,0x40,0x05,0x14,0x51,0x40,0x05,0x14,0x51,0x40,0x05,0x14,0x51,0x40,0x05,0x14,\r
-0x51,0x40,0x05,0x14,0x51,0x40,0x05,0x14,0x51,0x40,0x05,0x14,0x51,0x40,0x05,0x14,\r
-0x51,0x40,0x05,0x14,0x51,0x40,0x05,0x14,0x51,0x40,0x05,0x14,0x51,0x40,0x05,0x14,\r
-0x51,0x40,0x05,0x14,0x51,0x40,0x09,0x46,0x29,0x68,0xa0,0x04,0xc5,0x18,0xa5,0xa2,\r
-0x80,0x13,0x6d,0x26,0xda,0x75,0x14,0x01,0x13,0xda,0xc3,0x26,0x77,0xc4,0x8d,0x9e,\r
-0xb9,0x50,0x6a,0x8d,0xc7,0x86,0xb4,0x9b,0xa0,0x44,0xda,0x5d,0x9c,0xca,0x7a,0x89,\r
-0x20,0x43,0xfd,0x2b,0x4e,0x8a,0x97,0x18,0xbd,0xd1,0x2e,0x31,0x7b,0xa3,0x98,0xb9,\r
-0xf8,0x65,0xe1,0x3b,0xb1,0xfb,0xdf,0x0e,0xe9,0xa7,0xe9,0x6c,0x8b,0xfc,0x85,0x65,\r
-0xdd,0x7c,0x0e,0xf0,0x35,0xd9,0x26,0x4f,0x0e,0x5a,0x0f,0xf7,0x37,0x27,0xf2,0x22,\r
-0xbb,0xba,0x2b,0x37,0x42,0x93,0xde,0x2b,0xee,0x31,0x78,0x7a,0x32,0xde,0x0b,0xee,\r
-0x47,0x96,0x5d,0xfe,0xcc,0xfe,0x00,0xbb,0x24,0xff,0x00,0x64,0x34,0x24,0xff,0x00,\r
-0xcf,0x39,0x9b,0x8f,0xcc,0x9a,0xc7,0xba,0xfd,0x91,0xfc,0x0b,0x71,0xf7,0x12,0xf6,\r
-0x13,0xfe,0xcc,0xaa,0x7f,0x9a,0xd7,0xb5,0xd1,0x59,0x3c,0x25,0x07,0xf6,0x11,0x8b,\r
-0xc0,0xe1,0x9f,0xfc,0xbb,0x47,0xcf,0x37,0xbf,0xb1,0x77,0x85,0x67,0x27,0xc8,0xd4,\r
-0x2e,0xe1,0x1e,0x8e,0x88,0xff,0x00,0xcb,0x15,0x8b,0x75,0xfb,0x0d,0x69,0x12,0xe7,\r
-0xcb,0xd7,0x58,0x7a,0x6f,0xb4,0x07,0xff,0x00,0x66,0xaf,0xa8,0x28,0xac,0xde,0x07,\r
-0x0e,0xfe,0xcf,0xe6,0x64,0xf2,0xcc,0x2b,0xfb,0x1f,0x8b,0x3e,0x3e,0xbf,0xfd,0x84,\r
-0x1c,0x93,0xf6,0x7d,0x56,0xc6,0x40,0x7f,0xe7,0xac,0x4c,0xbf,0xc8,0x1a,0xc1,0xbd,\r
-0xfd,0x83,0x35,0x65,0xc9,0x8e,0xe7,0x4b,0x97,0xe8,0xee,0x0f,0xea,0xa2,0xbe,0xdf,\r
-0xa4,0x6e,0x95,0x93,0xcb,0xa8,0x74,0xbf,0xde,0x60,0xf2,0x8c,0x2b,0xe8,0xfe,0xf3,\r
-0xe0,0x0b,0xef,0xd8,0x67,0xc4,0xd1,0x93,0xe5,0xe9,0xf0,0x4c,0x3f,0xe9,0x95,0xc2,\r
-0x0f,0xe6,0x45,0x61,0x5e,0x7e,0xc5,0x7e,0x30,0xb7,0x04,0x8d,0x16,0x63,0xff,0x00,\r
-0x5c,0xe7,0x46,0xfe,0x4c,0x6b,0xf4,0x6c,0x75,0xa0,0x75,0xac,0xde,0x5d,0x4f,0xa4,\r
-0x99,0xcf,0x2c,0x8f,0x0c,0xfa,0xbf,0xc3,0xfc,0x8f,0xcc,0x3b,0xcf,0xd9,0x53,0xc5,\r
-0xd6,0x8c,0x41,0xd1,0x35,0x51,0x8f,0xee,0xc0,0xec,0x3f,0x30,0x2b,0x16,0xfb,0xf6,\r
-0x7b,0xf1,0x56,0x9e,0xa5,0xa4,0xb1,0xd4,0xa1,0x03,0xbb,0xc0,0xc3,0xfa,0x57,0xea,\r
-0xb8,0xe9,0x4d,0x3c,0xd4,0x3c,0xbb,0xb4,0xd9,0xcb,0x2e,0x1d,0xc3,0xbe,0xbf,0x82,\r
-0x3f,0x24,0x67,0xf8,0x59,0xaf,0xda,0x9c,0x16,0x99,0x7f,0xde,0x42,0x2a,0xa3,0xf8,\r
-0x2b,0xc4,0x50,0x1e,0x25,0x6f,0xc4,0x1a,0xfd,0x75,0x96,0xd6,0x19,0x57,0xe7,0x89,\r
-0x1f,0xfd,0xe5,0x06,0xb3,0x2f,0x3c,0x37,0xa4,0x5d,0xff,0x00,0xaf,0xd2,0xec,0xa6,\r
-0xff,0x00,0xae,0x96,0xe8,0xdf,0xcc,0x57,0x34,0xf0,0x72,0x8f,0xdb,0xfc,0x3f,0xe0,\r
-0x9e,0x65,0x5e,0x1d,0xc3,0xc7,0xb7,0xdd,0xff,0x00,0x04,0xfc,0x94,0x9b,0x44,0xf1,\r
-0x2c,0x2b,0xc3,0x13,0xf4,0xcd,0x64,0x5d,0xe8,0x9e,0x28,0x94,0x13,0x99,0x31,0xec,\r
-0x09,0xaf,0xd4,0x6f,0x14,0x78,0x37,0x40,0x44,0x98,0xae,0x87,0xa6,0x83,0x8e,0xa2,\r
-0xd2,0x3f,0xf0,0xac,0x0f,0x06,0xf8,0x4b,0x43,0x9e,0xf1,0xd6,0x5d,0x1b,0x4f,0x91,\r
-0x72,0x38,0x7b,0x54,0x23,0xf9,0x57,0x1c,0x63,0x25,0x2b,0x2b,0x7d,0xc7,0x8f,0x2c,\r
-0x97,0x0c,0xa5,0xca,0x92,0xfb,0x8f,0xcc,0x9b,0x2f,0x86,0x9e,0x2d,0xf1,0x2d,0xd8,\r
-0xb7,0xb3,0xd3,0xef,0x75,0x19,0xd8,0xf1,0x15,0xbc,0x4c,0xed,0xcf,0xb0,0x15,0xf4,\r
-0x27,0xc2,0x4f,0xf8,0x27,0x6f,0x8a,0x7c,0x4d,0x3c,0x37,0x7e,0x31,0xb9,0x5f,0x0d,\r
-0xe9,0x99,0x05,0xa0,0x52,0x24,0xba,0x71,0xd7,0x85,0x1f,0x2a,0xfd,0x58,0xe4,0x7f,\r
-0x76,0xbf,0x46,0x74,0xed,0x2e,0xcf,0x4c,0xb7,0x58,0xac,0xed,0x20,0xb4,0x8c,0x0e,\r
-0x12,0x08,0xd5,0x00,0xfc,0x00,0xab,0x8b,0x5e,0xfd,0x1c,0x3d,0xd2,0x94,0xdd,0xcf,\r
-0xa2,0xc0,0xf0,0xed,0x18,0x5a,0x75,0x26,0xe4,0xbb,0x5a,0xc8,0xe2,0x7e,0x16,0xfc,\r
-0x1b,0xf0,0xa7,0xc1,0xcd,0x0c,0x69,0x9e,0x18,0xd2,0xe3,0xb3,0x46,0x03,0xce,0xb8,\r
-0x6f,0x9a,0x79,0xc8,0xef,0x23,0xf5,0x3f,0x4e,0x83,0xb0,0x15,0xdb,0x8e,0x28,0x1d,\r
-0x29,0x6b,0xd0,0x49,0x25,0x64,0x7d,0x8c,0x29,0xc6,0x9c,0x54,0x20,0xac,0x90,0x51,\r
-0x45,0x14,0xcd,0x02,0x8a,0x28,0xa0,0x0f,0xff,0xd9,};\r
-\r
-static const unsigned int dummy_align__runtime_shtml = 3;\r
-static const unsigned char data__runtime_shtml[] = {\r
-/* /runtime.shtml (15 chars) */\r
-0x2f,0x72,0x75,0x6e,0x74,0x69,0x6d,0x65,0x2e,0x73,0x68,0x74,0x6d,0x6c,0x00,0x00,\r
-\r
-/* HTTP header */\r
-/* "HTTP/1.0 200 OK\r
-" (17 bytes) */\r
-0x48,0x54,0x54,0x50,0x2f,0x31,0x2e,0x30,0x20,0x32,0x30,0x30,0x20,0x4f,0x4b,0x0d,\r
-0x0a,\r
-/* "Server: lwIP/1.3.1 (http://savannah.nongnu.org/projects/lwip)\r
-" (63 bytes) */\r
-0x53,0x65,0x72,0x76,0x65,0x72,0x3a,0x20,0x6c,0x77,0x49,0x50,0x2f,0x31,0x2e,0x33,\r
-0x2e,0x31,0x20,0x28,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x73,0x61,0x76,0x61,0x6e,\r
-0x6e,0x61,0x68,0x2e,0x6e,0x6f,0x6e,0x67,0x6e,0x75,0x2e,0x6f,0x72,0x67,0x2f,0x70,\r
-0x72,0x6f,0x6a,0x65,0x63,0x74,0x73,0x2f,0x6c,0x77,0x69,0x70,0x29,0x0d,0x0a,\r
-/* "Content-type: text/html\r
-Expires: Fri, 10 Apr 2008 14:00:00 GMT\r
-Pragma: no-cache\r
-\r
-" (85 bytes) */\r
-0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x74,0x79,0x70,0x65,0x3a,0x20,0x74,0x65,\r
-0x78,0x74,0x2f,0x68,0x74,0x6d,0x6c,0x0d,0x0a,0x45,0x78,0x70,0x69,0x72,0x65,0x73,\r
-0x3a,0x20,0x46,0x72,0x69,0x2c,0x20,0x31,0x30,0x20,0x41,0x70,0x72,0x20,0x32,0x30,\r
-0x30,0x38,0x20,0x31,0x34,0x3a,0x30,0x30,0x3a,0x30,0x30,0x20,0x47,0x4d,0x54,0x0d,\r
-0x0a,0x50,0x72,0x61,0x67,0x6d,0x61,0x3a,0x20,0x6e,0x6f,0x2d,0x63,0x61,0x63,0x68,\r
-0x65,0x0d,0x0a,0x0d,0x0a,\r
-/* raw file data (758 bytes) */\r
-0x3c,0x21,0x44,0x4f,0x43,0x54,0x59,0x50,0x45,0x20,0x48,0x54,0x4d,0x4c,0x20,0x50,\r
-0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,\r
-0x54,0x44,0x20,0x48,0x54,0x4d,0x4c,0x20,0x34,0x2e,0x30,0x31,0x20,0x54,0x72,0x61,\r
-0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x61,0x6c,0x2f,0x2f,0x45,0x4e,0x22,0x20,0x22,\r
-0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,\r
-0x67,0x2f,0x54,0x52,0x2f,0x68,0x74,0x6d,0x6c,0x34,0x2f,0x6c,0x6f,0x6f,0x73,0x65,\r
-0x2e,0x64,0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x68,0x74,0x6d,0x6c,0x3e,0x0d,0x0a,\r
-0x20,0x20,0x3c,0x68,0x65,0x61,0x64,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x74,\r
-0x69,0x74,0x6c,0x65,0x3e,0x46,0x72,0x65,0x65,0x52,0x54,0x4f,0x53,0x2e,0x6f,0x72,\r
-0x67,0x20,0x6c,0x77,0x49,0x50,0x20,0x57,0x45,0x42,0x20,0x73,0x65,0x72,0x76,0x65,\r
-0x72,0x20,0x64,0x65,0x6d,0x6f,0x3c,0x2f,0x74,0x69,0x74,0x6c,0x65,0x3e,0x0d,0x0a,\r
-0x20,0x20,0x3c,0x2f,0x68,0x65,0x61,0x64,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x42,0x4f,\r
-0x44,0x59,0x20,0x6f,0x6e,0x4c,0x6f,0x61,0x64,0x3d,0x22,0x77,0x69,0x6e,0x64,0x6f,\r
-0x77,0x2e,0x73,0x65,0x74,0x54,0x69,0x6d,0x65,0x6f,0x75,0x74,0x28,0x26,0x71,0x75,\r
-0x6f,0x74,0x3b,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x2e,0x68,0x72,0x65,0x66,\r
-0x3d,0x27,0x72,0x75,0x6e,0x74,0x69,0x6d,0x65,0x2e,0x73,0x68,0x74,0x6d,0x6c,0x27,\r
-0x26,0x71,0x75,0x6f,0x74,0x3b,0x2c,0x32,0x30,0x30,0x30,0x29,0x22,0x3e,0x0d,0x0a,\r
-0x3c,0x66,0x6f,0x6e,0x74,0x20,0x66,0x61,0x63,0x65,0x3d,0x22,0x61,0x72,0x69,0x61,\r
-0x6c,0x22,0x3e,0x0d,0x0a,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x69,0x6e,\r
-0x64,0x65,0x78,0x2e,0x73,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x54,0x61,0x73,0x6b,0x20,\r
-0x53,0x74,0x61,0x74,0x73,0x3c,0x2f,0x61,0x3e,0x20,0x3c,0x62,0x3e,0x7c,0x3c,0x2f,\r
-0x62,0x3e,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x72,0x75,0x6e,0x74,\r
-0x69,0x6d,0x65,0x2e,0x73,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x52,0x75,0x6e,0x20,0x54,\r
-0x69,0x6d,0x65,0x20,0x53,0x74,0x61,0x74,0x73,0x3c,0x2f,0x61,0x3e,0x20,0x3c,0x62,\r
-0x3e,0x7c,0x3c,0x2f,0x62,0x3e,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,\r
-0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x66,0x72,0x65,0x65,0x72,\r
-0x74,0x6f,0x73,0x2e,0x6f,0x72,0x67,0x2f,0x22,0x3e,0x46,0x72,0x65,0x65,0x52,0x54,\r
-0x4f,0x53,0x20,0x48,0x6f,0x6d,0x65,0x70,0x61,0x67,0x65,0x3c,0x2f,0x61,0x3e,0x20,\r
-0x3c,0x62,0x3e,0x7c,0x3c,0x2f,0x62,0x3e,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,\r
-0x3d,0x22,0x6c,0x6f,0x67,0x6f,0x2e,0x6a,0x70,0x67,0x22,0x3e,0x33,0x37,0x4b,0x20,\r
-0x6a,0x70,0x67,0x3c,0x2f,0x61,0x3e,0x0d,0x0a,0x3c,0x62,0x72,0x3e,0x3c,0x70,0x3e,\r
-0x0d,0x0a,0x3c,0x68,0x72,0x3e,0x0d,0x0a,0x3c,0x62,0x72,0x3e,0x3c,0x70,0x3e,0x0d,\r
-0x0a,0x3c,0x68,0x32,0x3e,0x52,0x75,0x6e,0x2d,0x74,0x69,0x6d,0x65,0x20,0x73,0x74,\r
-0x61,0x74,0x69,0x73,0x74,0x69,0x63,0x73,0x3c,0x2f,0x68,0x32,0x3e,0x0d,0x0a,0x50,\r
-0x61,0x67,0x65,0x20,0x77,0x69,0x6c,0x6c,0x20,0x72,0x65,0x66,0x72,0x65,0x73,0x68,\r
-0x20,0x65,0x76,0x65,0x72,0x79,0x20,0x32,0x20,0x73,0x65,0x63,0x6f,0x6e,0x64,0x73,\r
-0x2e,0x3c,0x70,0x3e,0x0d,0x0a,0x3c,0x66,0x6f,0x6e,0x74,0x20,0x66,0x61,0x63,0x65,\r
-0x3d,0x22,0x63,0x6f,0x75,0x72,0x69,0x65,0x72,0x22,0x3e,0x3c,0x70,0x72,0x65,0x3e,\r
-0x54,0x61,0x73,0x6b,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,\r
-0x41,0x62,0x73,0x20,0x54,0x69,0x6d,0x65,0x20,0x20,0x20,0x20,0x20,0x20,0x25,0x20,\r
-0x54,0x69,0x6d,0x65,0x3c,0x62,0x72,0x3e,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,\r
-0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,\r
-0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,\r
-0x3c,0x62,0x72,0x3e,0x0d,0x0a,0x3c,0x21,0x2d,0x2d,0x23,0x72,0x75,0x6e,0x5f,0x73,\r
-0x74,0x61,0x74,0x73,0x2d,0x2d,0x3e,0x0d,0x0d,0x0a,0x3c,0x2f,0x70,0x72,0x65,0x3e,\r
-0x3c,0x2f,0x66,0x6f,0x6e,0x74,0x3e,0x0d,0x0a,0x3c,0x2f,0x66,0x6f,0x6e,0x74,0x3e,\r
-0x0d,0x0a,0x3c,0x2f,0x62,0x6f,0x64,0x79,0x3e,0x0d,0x0a,0x3c,0x2f,0x68,0x74,0x6d,\r
-0x6c,0x3e,0x0d,0x0a,0x0d,0x0a,};\r
-\r
-\r
-\r
-const struct fsdata_file file__404_html[] = { {\r
-file_NULL,\r
-data__404_html,\r
-data__404_html + 12,\r
-sizeof(data__404_html) - 12,\r
-1,\r
-}};\r
-\r
-const struct fsdata_file file__index_shtml[] = { {\r
-file__404_html,\r
-data__index_shtml,\r
-data__index_shtml + 16,\r
-sizeof(data__index_shtml) - 16,\r
-1,\r
-}};\r
-\r
-const struct fsdata_file file__logo_jpg[] = { {\r
-file__index_shtml,\r
-data__logo_jpg,\r
-data__logo_jpg + 12,\r
-sizeof(data__logo_jpg) - 12,\r
-1,\r
-}};\r
-\r
-const struct fsdata_file file__runtime_shtml[] = { {\r
-file__logo_jpg,\r
-data__runtime_shtml,\r
-data__runtime_shtml + 16,\r
-sizeof(data__runtime_shtml) - 16,\r
-1,\r
-}};\r
-\r
-#define FS_ROOT file__runtime_shtml\r
-#define FS_NUMFILES 4\r
-\r
diff --git a/FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/fsdata.h b/FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/fsdata.h
deleted file mode 100644 (file)
index 6f6c557..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (c) 2001-2003 Swedish Institute of Computer Science.
- * All rights reserved. 
- * 
- * Redistribution and use in source and binary forms, with or without modification, 
- * are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- *    this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- *    this list of conditions and the following disclaimer in the documentation
- *    and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission. 
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT 
- * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT 
- * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 
- * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY 
- * OF SUCH DAMAGE.
- *
- * This file is part of the lwIP TCP/IP stack.
- * 
- * Author: Adam Dunkels <adam@sics.se>
- *
- */
-#ifndef __FSDATA_H__
-#define __FSDATA_H__
-
-#include "lwip/opt.h"
-#include "fs.h"
-
-struct fsdata_file {
-  const struct fsdata_file *next;
-  const unsigned char *name;
-  const unsigned char *data;
-  int len;
-  u8_t http_header_included;
-#if HTTPD_PRECALCULATED_CHECKSUM
-  u16_t chksum_count;
-  const struct fsdata_chksum *chksum;
-#endif /* HTTPD_PRECALCULATED_CHECKSUM */
-};
-
-#endif /* __FSDATA_H__ */
diff --git a/FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/httpd.c b/FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/httpd.c
deleted file mode 100644 (file)
index 6f1132c..0000000
+++ /dev/null
@@ -1,2184 +0,0 @@
-/*
- * Copyright (c) 2001-2003 Swedish Institute of Computer Science.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- *    this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- *    this list of conditions and the following disclaimer in the documentation
- *    and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
- * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
- * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
- * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
- * OF SUCH DAMAGE.
- *
- * This file is part of the lwIP TCP/IP stack.
- *
- * Author: Adam Dunkels <adam@sics.se>
- *
- */
-
-/* This httpd supports for a
- * rudimentary server-side-include facility which will replace tags of the form
- * <!--#tag--> in any file whose extension is .shtml, .shtm or .ssi with
- * strings provided by an include handler whose pointer is provided to the
- * module via function http_set_ssi_handler().
- * Additionally, a simple common
- * gateway interface (CGI) handling mechanism has been added to allow clients
- * to hook functions to particular request URIs.
- *
- * To enable SSI support, define label LWIP_HTTPD_SSI in lwipopts.h.
- * To enable CGI support, define label LWIP_HTTPD_CGI in lwipopts.h.
- *
- * By default, the server assumes that HTTP headers are already present in
- * each file stored in the file system.  By defining LWIP_HTTPD_DYNAMIC_HEADERS in
- * lwipopts.h, this behavior can be changed such that the server inserts the
- * headers automatically based on the extension of the file being served.  If
- * this mode is used, be careful to ensure that the file system image used
- * does not already contain the header information.
- *
- * File system images without headers can be created using the makefsfile
- * tool with the -h command line option.
- *
- *
- * Notes about valid SSI tags
- * --------------------------
- *
- * The following assumptions are made about tags used in SSI markers:
- *
- * 1. No tag may contain '-' or whitespace characters within the tag name.
- * 2. Whitespace is allowed between the tag leadin "<!--#" and the start of
- *    the tag name and between the tag name and the leadout string "-->".
- * 3. The maximum tag name length is LWIP_HTTPD_MAX_TAG_NAME_LEN, currently 8 characters.
- *
- * Notes on CGI usage
- * ------------------
- *
- * The simple CGI support offered here works with GET method requests only
- * and can handle up to 16 parameters encoded into the URI. The handler
- * function may not write directly to the HTTP output but must return a
- * filename that the HTTP server will send to the browser as a response to
- * the incoming CGI request.
- *
- * @todo:
- * - don't use mem_malloc() (for SSI/dynamic headers)
- * - split too long functions into multiple smaller functions?
- * - support more file types?
- */
-#include "lwip/debug.h"
-#include "lwip/stats.h"
-#include "httpd.h"
-#include "httpd_structs.h"
-#include "lwip/tcp.h"
-#include "fs.h"
-
-#include <string.h>
-#include <stdlib.h>
-
-#if LWIP_TCP
-
-#ifndef HTTPD_DEBUG
-#define HTTPD_DEBUG         LWIP_DBG_OFF
-#endif
-
-/** Set this to 1 and add the next line to lwippools.h to use a memp pool
- * for allocating struct http_state instead of the heap:
- *
- * LWIP_MEMPOOL(HTTPD_STATE, 20, 100, "HTTPD_STATE")
- */
-#ifndef HTTPD_USE_MEM_POOL
-#define HTTPD_USE_MEM_POOL  0
-#endif
-
-/** The server port for HTTPD to use */
-#ifndef HTTPD_SERVER_PORT
-#define HTTPD_SERVER_PORT                   80
-#endif
-
-/** Maximum retries before the connection is aborted/closed.
- * - number of times pcb->poll is called -> default is 4*500ms = 2s;
- * - reset when pcb->sent is called
- */
-#ifndef HTTPD_MAX_RETRIES
-#define HTTPD_MAX_RETRIES                   4
-#endif
-
-/** The poll delay is X*500ms */
-#ifndef HTTPD_POLL_INTERVAL
-#define HTTPD_POLL_INTERVAL                 4
-#endif
-
-/** Priority for tcp pcbs created by HTTPD (very low by default).
- *  Lower priorities get killed first when running out of memroy.
- */
-#ifndef HTTPD_TCP_PRIO
-#define HTTPD_TCP_PRIO                      TCP_PRIO_MIN
-#endif
-
-/** Set this to 1 to enabled timing each file sent */
-#ifndef LWIP_HTTPD_TIMING
-#define LWIP_HTTPD_TIMING                   0
-#endif
-#ifndef HTTPD_DEBUG_TIMING
-#define HTTPD_DEBUG_TIMING                  LWIP_DBG_OFF
-#endif
-
-/** Set this to 1 on platforms where strnstr is not available */
-#ifndef LWIP_HTTPD_STRNSTR_PRIVATE
-#define LWIP_HTTPD_STRNSTR_PRIVATE          1
-#endif
-
-/** Set this to one to show error pages when parsing a request fails instead
-    of simply closing the connection. */
-#ifndef LWIP_HTTPD_SUPPORT_EXTSTATUS
-#define LWIP_HTTPD_SUPPORT_EXTSTATUS        0
-#endif
-
-/** Set this to 0 to drop support for HTTP/0.9 clients (to save some bytes) */
-#ifndef LWIP_HTTPD_SUPPORT_V09
-#define LWIP_HTTPD_SUPPORT_V09              1
-#endif
-
-/** Set this to 1 to support HTTP request coming in in multiple packets/pbufs */
-#ifndef LWIP_HTTPD_SUPPORT_REQUESTLIST
-#define LWIP_HTTPD_SUPPORT_REQUESTLIST      0
-#endif
-
-#if LWIP_HTTPD_SUPPORT_REQUESTLIST
-/** Number of rx pbufs to enqueue to parse an incoming request (up to the first
-    newline) */
-#ifndef LWIP_HTTPD_REQ_QUEUELEN
-#define LWIP_HTTPD_REQ_QUEUELEN             10
-#endif
-
-/** Number of (TCP payload-) bytes (in pbufs) to enqueue to parse and incoming
-    request (up to the first double-newline) */
-#ifndef LWIP_HTTPD_REQ_BUFSIZE
-#define LWIP_HTTPD_REQ_BUFSIZE              LWIP_HTTPD_MAX_REQ_LENGTH
-#endif
-
-/** Defines the maximum length of a HTTP request line (up to the first CRLF,
-    copied from pbuf into this a global buffer when pbuf- or packet-queues
-    are received - otherwise the input pbuf is used directly) */
-#ifndef LWIP_HTTPD_MAX_REQ_LENGTH
-#define LWIP_HTTPD_MAX_REQ_LENGTH           1023
-#endif
-#endif /* LWIP_HTTPD_SUPPORT_REQUESTLIST */
-
-/** Maximum length of the filename to send as response to a POST request,
- * filled in by the application when a POST is finished.
- */
-#ifndef LWIP_HTTPD_POST_MAX_RESPONSE_URI_LEN
-#define LWIP_HTTPD_POST_MAX_RESPONSE_URI_LEN 63
-#endif
-
-/** Set this to 0 to not send the SSI tag (default is on, so the tag will
- * be sent in the HTML page */
-#ifndef LWIP_HTTPD_SSI_INCLUDE_TAG
-#define LWIP_HTTPD_SSI_INCLUDE_TAG           1
-#endif
-
-/** Set this to 1 to call tcp_abort when tcp_close fails with memory error.
- * This can be used to prevent consuming all memory in situations where the
- * HTTP server has low priority compared to other communication. */
-#ifndef LWIP_HTTPD_ABORT_ON_CLOSE_MEM_ERROR
-#define LWIP_HTTPD_ABORT_ON_CLOSE_MEM_ERROR  0
-#endif
-
-#ifndef true
-#define true ((u8_t)1)
-#endif
-
-#ifndef false
-#define false ((u8_t)0)
-#endif
-
-/** Minimum length for a valid HTTP/0.9 request: "GET /\r\n" -> 7 bytes */
-#define MIN_REQ_LEN   7
-
-#define CRLF "\r\n"
-
-/** These defines check whether tcp_write has to copy data or not */
-
-/** This was TI's check whether to let TCP copy data or not
-#define HTTP_IS_DATA_VOLATILE(hs) ((hs->file < (char *)0x20000000) ? 0 : TCP_WRITE_FLAG_COPY)*/
-#ifndef HTTP_IS_DATA_VOLATILE
-#if LWIP_HTTPD_SSI
-/* Copy for SSI files, no copy for non-SSI files */
-#define HTTP_IS_DATA_VOLATILE(hs)   ((hs)->tag_check ? TCP_WRITE_FLAG_COPY : 0)
-#else /* LWIP_HTTPD_SSI */
-/** Default: don't copy if the data is sent from file-system directly */
-#define HTTP_IS_DATA_VOLATILE(hs) (((hs->file != NULL) && (hs->handle != NULL) && (hs->file == \
-                                   (char*)hs->handle->data + hs->handle->len - hs->left)) \
-                                   ? 0 : TCP_WRITE_FLAG_COPY)
-#endif /* LWIP_HTTPD_SSI */
-#endif
-
-/** Default: headers are sent from ROM */
-#ifndef HTTP_IS_HDR_VOLATILE
-#define HTTP_IS_HDR_VOLATILE(hs, ptr) 0
-#endif
-
-#if LWIP_HTTPD_SSI
-/** Default: Tags are sent from struct http_state and are therefore volatile */
-#ifndef HTTP_IS_TAG_VOLATILE
-#define HTTP_IS_TAG_VOLATILE(ptr) TCP_WRITE_FLAG_COPY
-#endif
-#endif /* LWIP_HTTPD_SSI */
-
-typedef struct
-{
-  const char *name;
-  u8_t shtml;
-} default_filename;
-
-const default_filename g_psDefaultFilenames[] = {
-  {"/index.shtml", true },
-  {"/index.ssi", true },
-  {"/index.shtm", true },
-  {"/index.html", false },
-  {"/index.htm", false }
-};
-
-#define NUM_DEFAULT_FILENAMES (sizeof(g_psDefaultFilenames) /   \
-                               sizeof(default_filename))
-
-#if LWIP_HTTPD_SUPPORT_REQUESTLIST
-/** HTTP request is copied here from pbufs for simple parsing */
-static char httpd_req_buf[LWIP_HTTPD_MAX_REQ_LENGTH+1];
-#endif /* LWIP_HTTPD_SUPPORT_REQUESTLIST */
-
-#if LWIP_HTTPD_SUPPORT_POST
-/** Filename for response file to send when POST is finished */
-static char http_post_response_filename[LWIP_HTTPD_POST_MAX_RESPONSE_URI_LEN+1];
-#endif /* LWIP_HTTPD_SUPPORT_POST */
-
-#if LWIP_HTTPD_DYNAMIC_HEADERS
-/* The number of individual strings that comprise the headers sent before each
- * requested file.
- */
-#define NUM_FILE_HDR_STRINGS 3
-#endif /* LWIP_HTTPD_DYNAMIC_HEADERS */
-
-#if LWIP_HTTPD_SSI
-
-#define HTTPD_LAST_TAG_PART 0xFFFF
-
-const char * const g_pcSSIExtensions[] = {
-  ".shtml", ".shtm", ".ssi", ".xml"
-};
-
-#define NUM_SHTML_EXTENSIONS (sizeof(g_pcSSIExtensions) / sizeof(const char *))
-
-enum tag_check_state {
-  TAG_NONE,       /* Not processing an SSI tag */
-  TAG_LEADIN,     /* Tag lead in "<!--#" being processed */
-  TAG_FOUND,      /* Tag name being read, looking for lead-out start */
-  TAG_LEADOUT,    /* Tag lead out "-->" being processed */
-  TAG_SENDING     /* Sending tag replacement string */
-};
-#endif /* LWIP_HTTPD_SSI */
-
-struct http_state {
-  struct fs_file *handle;
-  char *file;       /* Pointer to first unsent byte in buf. */
-
-#if LWIP_HTTPD_SUPPORT_REQUESTLIST
-  struct pbuf *req;
-#endif /* LWIP_HTTPD_SUPPORT_REQUESTLIST */
-
-#if LWIP_HTTPD_SSI || LWIP_HTTPD_DYNAMIC_HEADERS
-  char *buf;        /* File read buffer. */
-  int buf_len;      /* Size of file read buffer, buf. */
-#endif /* LWIP_HTTPD_SSI || LWIP_HTTPD_DYNAMIC_HEADERS */
-  u32_t left;       /* Number of unsent bytes in buf. */
-  u8_t retries;
-#if LWIP_HTTPD_SSI
-  const char *parsed;     /* Pointer to the first unparsed byte in buf. */
-#if !LWIP_HTTPD_SSI_INCLUDE_TAG
-  const char *tag_started;/* Poitner to the first opening '<' of the tag. */
-#endif /* !LWIP_HTTPD_SSI_INCLUDE_TAG */
-  const char *tag_end;    /* Pointer to char after the closing '>' of the tag. */
-  u32_t parse_left; /* Number of unparsed bytes in buf. */
-  u16_t tag_index;   /* Counter used by tag parsing state machine */
-  u16_t tag_insert_len; /* Length of insert in string tag_insert */
-#if LWIP_HTTPD_SSI_MULTIPART
-  u16_t tag_part; /* Counter passed to and changed by tag insertion function to insert multiple times */
-#endif /* LWIP_HTTPD_SSI_MULTIPART */
-  u8_t tag_check;   /* true if we are processing a .shtml file else false */
-  u8_t tag_name_len; /* Length of the tag name in string tag_name */
-  char tag_name[LWIP_HTTPD_MAX_TAG_NAME_LEN + 1]; /* Last tag name extracted */
-  char tag_insert[LWIP_HTTPD_MAX_TAG_INSERT_LEN + 1]; /* Insert string for tag_name */
-  enum tag_check_state tag_state; /* State of the tag processor */
-#endif /* LWIP_HTTPD_SSI */
-#if LWIP_HTTPD_CGI
-  char *params[LWIP_HTTPD_MAX_CGI_PARAMETERS]; /* Params extracted from the request URI */
-  char *param_vals[LWIP_HTTPD_MAX_CGI_PARAMETERS]; /* Values for each extracted param */
-#endif /* LWIP_HTTPD_CGI */
-#if LWIP_HTTPD_DYNAMIC_HEADERS
-  const char *hdrs[NUM_FILE_HDR_STRINGS]; /* HTTP headers to be sent. */
-  u16_t hdr_pos;     /* The position of the first unsent header byte in the
-                        current string */
-  u16_t hdr_index;   /* The index of the hdr string currently being sent. */
-#endif /* LWIP_HTTPD_DYNAMIC_HEADERS */
-#if LWIP_HTTPD_TIMING
-  u32_t time_started;
-#endif /* LWIP_HTTPD_TIMING */
-#if LWIP_HTTPD_SUPPORT_POST
-  u32_t post_content_len_left;
-#if LWIP_HTTPD_POST_MANUAL_WND
-  u32_t unrecved_bytes;
-  struct tcp_pcb *pcb;
-  u8_t no_auto_wnd;
-#endif /* LWIP_HTTPD_POST_MANUAL_WND */
-#endif /* LWIP_HTTPD_SUPPORT_POST*/
-};
-
-static err_t http_find_file(struct http_state *hs, const char *uri, int is_09);
-static err_t http_init_file(struct http_state *hs, struct fs_file *file, int is_09, const char *uri);
-static err_t http_poll(void *arg, struct tcp_pcb *pcb);
-
-#if LWIP_HTTPD_SSI
-/* SSI insert handler function pointer. */
-tSSIHandler g_pfnSSIHandler = NULL;
-int g_iNumTags = 0;
-const char **g_ppcTags = NULL;
-
-#define LEN_TAG_LEAD_IN 5
-const char * const g_pcTagLeadIn = "<!--#";
-
-#define LEN_TAG_LEAD_OUT 3
-const char * const g_pcTagLeadOut = "-->";
-#endif /* LWIP_HTTPD_SSI */
-
-#if LWIP_HTTPD_CGI
-/* CGI handler information */
-const tCGI *g_pCGIs;
-int g_iNumCGIs;
-#endif /* LWIP_HTTPD_CGI */
-
-#if LWIP_HTTPD_STRNSTR_PRIVATE
-/** Like strstr but does not need 'buffer' to be NULL-terminated */
-static char*
-strnstr(const char* buffer, const char* token, size_t n)
-{
-  const char* p;
-  int tokenlen = (int)strlen(token);
-  if (tokenlen == 0) {
-    return (char *)buffer;
-  }
-  for (p = buffer; *p && (p + tokenlen <= buffer + n); p++) {
-    if ((*p == *token) && (strncmp(p, token, tokenlen) == 0)) {
-      return (char *)p;
-    }
-  }
-  return NULL;
-} 
-#endif /* LWIP_HTTPD_STRNSTR_PRIVATE */
-
-/** Allocate a struct http_state. */
-static struct http_state*
-http_state_alloc(void)
-{
-  struct http_state *ret;
-#if HTTPD_USE_MEM_POOL
-  ret = (struct http_state *)memp_malloc(MEMP_HTTPD_STATE);
-#else /* HTTPD_USE_MEM_POOL */
-  ret = (struct http_state *)mem_malloc(sizeof(struct http_state));
-#endif /* HTTPD_USE_MEM_POOL */
-  if (ret != NULL) {
-    /* Initialize the structure. */
-    memset(ret, 0, sizeof(struct http_state));
-#if LWIP_HTTPD_DYNAMIC_HEADERS
-    /* Indicate that the headers are not yet valid */
-    ret->hdr_index = NUM_FILE_HDR_STRINGS;
-#endif /* LWIP_HTTPD_DYNAMIC_HEADERS */
-  }
-  return ret;
-}
-
-/** Free a struct http_state.
- * Also frees the file data if dynamic.
- */
-static void
-http_state_free(struct http_state *hs)
-{
-  if (hs != NULL) {
-    if(hs->handle) {
-#if LWIP_HTTPD_TIMING
-      u32_t ms_needed = sys_now() - hs->time_started;
-      u32_t needed = LWIP_MAX(1, (ms_needed/100));
-      LWIP_DEBUGF(HTTPD_DEBUG_TIMING, ("httpd: needed %"U32_F" ms to send file of %d bytes -> %"U32_F" bytes/sec\n",
-        ms_needed, hs->handle->len, ((((u32_t)hs->handle->len) * 10) / needed)));
-#endif /* LWIP_HTTPD_TIMING */
-      fs_close(hs->handle);
-      hs->handle = NULL;
-    }
-#if LWIP_HTTPD_SSI || LWIP_HTTPD_DYNAMIC_HEADERS
-    if (hs->buf != NULL) {
-      mem_free(hs->buf);
-      hs->buf = NULL;
-    }
-#endif /* LWIP_HTTPD_SSI || LWIP_HTTPD_DYNAMIC_HEADERS */
-#if HTTPD_USE_MEM_POOL
-    memp_free(MEMP_HTTPD_STATE, hs);
-#else /* HTTPD_USE_MEM_POOL */
-    mem_free(hs);
-#endif /* HTTPD_USE_MEM_POOL */
-  }
-}
-
-/** Call tcp_write() in a loop trying smaller and smaller length
- *
- * @param pcb tcp_pcb to send
- * @param ptr Data to send
- * @param length Length of data to send (in/out: on return, contains the
- *        amount of data sent)
- * @param apiflags directly passed to tcp_write
- * @return the return value of tcp_write
- */
-static err_t
-http_write(struct tcp_pcb *pcb, const void* ptr, u16_t *length, u8_t apiflags)
-{
-   u16_t len;
-   err_t err;
-   LWIP_ASSERT("length != NULL", length != NULL);
-   len = *length;
-   do {
-     LWIP_DEBUGF(HTTPD_DEBUG | LWIP_DBG_TRACE, ("Trying go send %d bytes\n", len));
-     err = tcp_write(pcb, ptr, len, apiflags);
-     if (err == ERR_MEM) {
-       if ((tcp_sndbuf(pcb) == 0) ||
-           (tcp_sndqueuelen(pcb) >= TCP_SND_QUEUELEN)) {
-         /* no need to try smaller sizes */
-         len = 1;
-       } else {
-         len /= 2;
-       }
-       LWIP_DEBUGF(HTTPD_DEBUG | LWIP_DBG_TRACE, 
-                   ("Send failed, trying less (%d bytes)\n", len));
-     }
-   } while ((err == ERR_MEM) && (len > 1));
-
-   if (err == ERR_OK) {
-     LWIP_DEBUGF(HTTPD_DEBUG | LWIP_DBG_TRACE, ("Sent %d bytes\n", len));
-   } else {
-     LWIP_DEBUGF(HTTPD_DEBUG | LWIP_DBG_TRACE, ("Send failed with err %d (\"%s\")\n", err, lwip_strerr(err)));
-   }
-
-   *length = len;
-   return err;
-}
-
-/**
- * The connection shall be actively closed.
- * Reset the sent- and recv-callbacks.
- *
- * @param pcb the tcp pcb to reset callbacks
- * @param hs connection state to free
- */
-static err_t
-http_close_conn(struct tcp_pcb *pcb, struct http_state *hs)
-{
-  err_t err;
-  LWIP_DEBUGF(HTTPD_DEBUG, ("Closing connection %p\n", (void*)pcb));
-
-#if LWIP_HTTPD_SUPPORT_POST
-  if (hs != NULL) {
-    if ((hs->post_content_len_left != 0)
-#if LWIP_HTTPD_POST_MANUAL_WND
-       || ((hs->no_auto_wnd != 0) && (hs->unrecved_bytes != 0))
-#endif /* LWIP_HTTPD_POST_MANUAL_WND */
-       ) {
-      /* make sure the post code knows that the connection is closed */
-      http_post_response_filename[0] = 0;
-      httpd_post_finished(hs, http_post_response_filename, LWIP_HTTPD_POST_MAX_RESPONSE_URI_LEN);
-    }
-  }
-#endif /* LWIP_HTTPD_SUPPORT_POST*/
-
-
-  tcp_arg(pcb, NULL);
-  tcp_recv(pcb, NULL);
-  tcp_err(pcb, NULL);
-  tcp_poll(pcb, NULL, 0);
-  tcp_sent(pcb, NULL);
-  if(hs != NULL) {
-    http_state_free(hs);
-  }
-
-  err = tcp_close(pcb);
-  if (err != ERR_OK) {
-    LWIP_DEBUGF(HTTPD_DEBUG, ("Error %d closing %p\n", err, (void*)pcb));
-    /* error closing, try again later in poll */
-    tcp_poll(pcb, http_poll, HTTPD_POLL_INTERVAL);
-  }
-  return err;
-}
-#if LWIP_HTTPD_CGI
-/**
- * Extract URI parameters from the parameter-part of an URI in the form
- * "test.cgi?x=y" @todo: better explanation!
- * Pointers to the parameters are stored in hs->param_vals.
- *
- * @param hs http connection state
- * @param params pointer to the NULL-terminated parameter string from the URI
- * @return number of parameters extracted
- */
-static int
-extract_uri_parameters(struct http_state *hs, char *params)
-{
-  char *pair;
-  char *equals;
-  int loop;
-
-  /* If we have no parameters at all, return immediately. */
-  if(!params || (params[0] == '\0')) {
-      return(0);
-  }
-
-  /* Get a pointer to our first parameter */
-  pair = params;
-
-  /* Parse up to LWIP_HTTPD_MAX_CGI_PARAMETERS from the passed string and ignore the
-   * remainder (if any) */
-  for(loop = 0; (loop < LWIP_HTTPD_MAX_CGI_PARAMETERS) && pair; loop++) {
-
-    /* Save the name of the parameter */
-    hs->params[loop] = pair;
-
-    /* Remember the start of this name=value pair */
-    equals = pair;
-
-    /* Find the start of the next name=value pair and replace the delimiter
-     * with a 0 to terminate the previous pair string. */
-    pair = strchr(pair, '&');
-    if(pair) {
-      *pair = '\0';
-      pair++;
-    } else {
-       /* We didn't find a new parameter so find the end of the URI and
-        * replace the space with a '\0' */
-        pair = strchr(equals, ' ');
-        if(pair) {
-            *pair = '\0';
-        }
-
-        /* Revert to NULL so that we exit the loop as expected. */
-        pair = NULL;
-    }
-
-    /* Now find the '=' in the previous pair, replace it with '\0' and save
-     * the parameter value string. */
-    equals = strchr(equals, '=');
-    if(equals) {
-      *equals = '\0';
-      hs->param_vals[loop] = equals + 1;
-    } else {
-      hs->param_vals[loop] = NULL;
-    }
-  }
-
-  return loop;
-}
-#endif /* LWIP_HTTPD_CGI */
-
-#if LWIP_HTTPD_SSI
-/**
- * Insert a tag (found in an shtml in the form of "<!--#tagname-->" into the file.
- * The tag's name is stored in hs->tag_name (NULL-terminated), the replacement
- * should be written to hs->tag_insert (up to a length of LWIP_HTTPD_MAX_TAG_INSERT_LEN).
- * The amount of data written is stored to hs->tag_insert_len.
- *
- * @todo: return tag_insert_len - maybe it can be removed from struct http_state?
- *
- * @param hs http connection state
- */
-static void
-get_tag_insert(struct http_state *hs)
-{
-  int loop;
-  size_t len;
-#if LWIP_HTTPD_SSI_MULTIPART
-  u16_t current_tag_part = hs->tag_part;
-  hs->tag_part = HTTPD_LAST_TAG_PART;
-#endif /* LWIP_HTTPD_SSI_MULTIPART */
-
-  if(g_pfnSSIHandler && g_ppcTags && g_iNumTags) {
-
-    /* Find this tag in the list we have been provided. */
-    for(loop = 0; loop < g_iNumTags; loop++) {
-      if(strcmp(hs->tag_name, g_ppcTags[loop]) == 0) {
-        hs->tag_insert_len = g_pfnSSIHandler(loop, hs->tag_insert,
-           LWIP_HTTPD_MAX_TAG_INSERT_LEN
-#if LWIP_HTTPD_SSI_MULTIPART
-           , current_tag_part, &hs->tag_part
-#endif /* LWIP_HTTPD_SSI_MULTIPART */
-#if LWIP_HTTPD_FILE_STATE
-           , hs->handle->state
-#endif /* LWIP_HTTPD_FILE_STATE */
-           );
-        return;
-      }
-    }
-  }
-
-  /* If we drop out, we were asked to serve a page which contains tags that
-   * we don't have a handler for. Merely echo back the tags with an error
-   * marker. */
-#define UNKNOWN_TAG1_TEXT "<b>***UNKNOWN TAG "
-#define UNKNOWN_TAG1_LEN  18
-#define UNKNOWN_TAG2_TEXT "***</b>"
-#define UNKNOWN_TAG2_LEN  7
-  len = LWIP_MIN(strlen(hs->tag_name),
-    LWIP_HTTPD_MAX_TAG_INSERT_LEN - (UNKNOWN_TAG1_LEN + UNKNOWN_TAG2_LEN));
-  MEMCPY(hs->tag_insert, UNKNOWN_TAG1_TEXT, UNKNOWN_TAG1_LEN);
-  MEMCPY(&hs->tag_insert[UNKNOWN_TAG1_LEN], hs->tag_name, len);
-  MEMCPY(&hs->tag_insert[UNKNOWN_TAG1_LEN + len], UNKNOWN_TAG2_TEXT, UNKNOWN_TAG2_LEN);
-  hs->tag_insert[UNKNOWN_TAG1_LEN + len + UNKNOWN_TAG2_LEN] = 0;
-
-  len = strlen(hs->tag_insert);
-  LWIP_ASSERT("len <= 0xffff", len <= 0xffff);
-  hs->tag_insert_len = (u16_t)len;
-}
-#endif /* LWIP_HTTPD_SSI */
-
-#if LWIP_HTTPD_DYNAMIC_HEADERS
-/**
- * Generate the relevant HTTP headers for the given filename and write
- * them into the supplied buffer.
- */
-static void
-get_http_headers(struct http_state *pState, char *pszURI)
-{
-  unsigned int iLoop;
-  char *pszWork;
-  char *pszExt;
-  char *pszVars;
-
-  /* Ensure that we initialize the loop counter. */
-  iLoop = 0;
-
-  /* In all cases, the second header we send is the server identification
-     so set it here. */
-  pState->hdrs[1] = g_psHTTPHeaderStrings[HTTP_HDR_SERVER];
-
-  /* Is this a normal file or the special case we use to send back the
-     default "404: Page not found" response? */
-  if (pszURI == NULL) {
-    pState->hdrs[0] = g_psHTTPHeaderStrings[HTTP_HDR_NOT_FOUND];
-    pState->hdrs[2] = g_psHTTPHeaderStrings[DEFAULT_404_HTML];
-
-    /* Set up to send the first header string. */
-    pState->hdr_index = 0;
-    pState->hdr_pos = 0;
-    return;
-  } else {
-    /* We are dealing with a particular filename. Look for one other
-       special case.  We assume that any filename with "404" in it must be
-       indicative of a 404 server error whereas all other files require
-       the 200 OK header. */
-    if (strstr(pszURI, "404")) {
-      pState->hdrs[0] = g_psHTTPHeaderStrings[HTTP_HDR_NOT_FOUND];
-    } else if (strstr(pszURI, "400")) {
-      pState->hdrs[0] = g_psHTTPHeaderStrings[HTTP_HDR_BAD_REQUEST];
-    } else if (strstr(pszURI, "501")) {
-      pState->hdrs[0] = g_psHTTPHeaderStrings[HTTP_HDR_NOT_IMPL];
-    } else {
-      pState->hdrs[0] = g_psHTTPHeaderStrings[HTTP_HDR_OK];
-    }
-
-    /* Determine if the URI has any variables and, if so, temporarily remove 
-       them. */
-    pszVars = strchr(pszURI, '?');
-    if(pszVars) {
-      *pszVars = '\0';
-    }
-
-    /* Get a pointer to the file extension.  We find this by looking for the
-       last occurrence of "." in the filename passed. */
-    pszExt = NULL;
-    pszWork = strchr(pszURI, '.');
-    while(pszWork) {
-      pszExt = pszWork + 1;
-      pszWork = strchr(pszExt, '.');
-    }
-
-    /* Now determine the content type and add the relevant header for that. */
-    for(iLoop = 0; (iLoop < NUM_HTTP_HEADERS) && pszExt; iLoop++) {
-      /* Have we found a matching extension? */
-      if(!strcmp(g_psHTTPHeaders[iLoop].extension, pszExt)) {
-        pState->hdrs[2] =
-          g_psHTTPHeaderStrings[g_psHTTPHeaders[iLoop].headerIndex];
-        break;
-      }
-    }
-
-    /* Reinstate the parameter marker if there was one in the original URI. */
-    if(pszVars) {
-      *pszVars = '?';
-    }
-  }
-
-  /* Does the URL passed have any file extension?  If not, we assume it
-     is a special-case URL used for control state notification and we do
-     not send any HTTP headers with the response. */
-  if(!pszExt) {
-    /* Force the header index to a value indicating that all headers
-       have already been sent. */
-    pState->hdr_index = NUM_FILE_HDR_STRINGS;
-  } else {
-    /* Did we find a matching extension? */
-    if(iLoop == NUM_HTTP_HEADERS) {
-      /* No - use the default, plain text file type. */
-      pState->hdrs[2] = g_psHTTPHeaderStrings[HTTP_HDR_DEFAULT_TYPE];
-    }
-
-    /* Set up to send the first header string. */
-    pState->hdr_index = 0;
-    pState->hdr_pos = 0;
-  }
-}
-#endif /* LWIP_HTTPD_DYNAMIC_HEADERS */
-
-/**
- * Try to send more data on this pcb.
- *
- * @param pcb the pcb to send data
- * @param hs connection state
- */
-static u8_t
-http_send_data(struct tcp_pcb *pcb, struct http_state *hs)
-{
-  err_t err;
-  u16_t len;
-  u16_t mss;
-  u8_t data_to_send = false;
-#if LWIP_HTTPD_DYNAMIC_HEADERS
-  u16_t hdrlen, sendlen;
-#endif /* LWIP_HTTPD_DYNAMIC_HEADERS */
-
-  LWIP_DEBUGF(HTTPD_DEBUG | LWIP_DBG_TRACE, ("http_send_data: pcb=%p hs=%p left=%d\n", (void*)pcb,
-    (void*)hs, hs != NULL ? hs->left : 0));
-
-#if LWIP_HTTPD_SUPPORT_POST && LWIP_HTTPD_POST_MANUAL_WND
-  if (hs->unrecved_bytes != 0) {
-    return 0;
-  }
-#endif /* LWIP_HTTPD_SUPPORT_POST && LWIP_HTTPD_POST_MANUAL_WND */
-
-#if LWIP_HTTPD_DYNAMIC_HEADERS
-  /* If we were passed a NULL state structure pointer, ignore the call. */
-  if (hs == NULL) {
-    return 0;
-  }
-
-  /* Assume no error until we find otherwise */
-  err = ERR_OK;
-
-  /* Do we have any more header data to send for this file? */
-  if(hs->hdr_index < NUM_FILE_HDR_STRINGS) {
-    /* How much data can we send? */
-    len = tcp_sndbuf(pcb);
-    sendlen = len;
-
-    while(len && (hs->hdr_index < NUM_FILE_HDR_STRINGS) && sendlen) {
-      const void *ptr;
-      u16_t old_sendlen;
-      /* How much do we have to send from the current header? */
-      hdrlen = (u16_t)strlen(hs->hdrs[hs->hdr_index]);
-
-      /* How much of this can we send? */
-      sendlen = (len < (hdrlen - hs->hdr_pos)) ? len : (hdrlen - hs->hdr_pos);
-
-      /* Send this amount of data or as much as we can given memory
-      * constraints. */
-      ptr = (const void *)(hs->hdrs[hs->hdr_index] + hs->hdr_pos);
-      old_sendlen = sendlen;
-      err = http_write(pcb, ptr, &sendlen, HTTP_IS_HDR_VOLATILE(hs, ptr));
-      if ((err == ERR_OK) && (old_sendlen != sendlen)) {
-        /* Remember that we added some more data to be transmitted. */
-        data_to_send = true;
-      } else if (err != ERR_OK) {
-         /* special case: http_write does not try to send 1 byte */
-        sendlen = 0;
-      }
-
-      /* Fix up the header position for the next time round. */
-      hs->hdr_pos += sendlen;
-      len -= sendlen;
-
-      /* Have we finished sending this string? */
-      if(hs->hdr_pos == hdrlen) {
-        /* Yes - move on to the next one */
-        hs->hdr_index++;
-        hs->hdr_pos = 0;
-      }
-    }
-
-    /* If we get here and there are still header bytes to send, we send
-    * the header information we just wrote immediately.  If there are no
-    * more headers to send, but we do have file data to send, drop through
-    * to try to send some file data too. */
-    if((hs->hdr_index < NUM_FILE_HDR_STRINGS) || !hs->file) {
-      LWIP_DEBUGF(HTTPD_DEBUG, ("tcp_output\n"));
-      return 1;
-    }
-  }
-#else /* LWIP_HTTPD_DYNAMIC_HEADERS */
-  /* Assume no error until we find otherwise */
-  err = ERR_OK;
-#endif /* LWIP_HTTPD_DYNAMIC_HEADERS */
-
-  /* Have we run out of file data to send? If so, we need to read the next
-   * block from the file. */
-  if (hs->left == 0) {
-#if LWIP_HTTPD_SSI || LWIP_HTTPD_DYNAMIC_HEADERS
-    int count;
-#endif /* LWIP_HTTPD_SSI || LWIP_HTTPD_DYNAMIC_HEADERS */
-
-    /* Do we have a valid file handle? */
-    if (hs->handle == NULL) {
-      /* No - close the connection. */
-      http_close_conn(pcb, hs);
-      return 0;
-    }
-    if (fs_bytes_left(hs->handle) <= 0) {
-      /* We reached the end of the file so this request is done.
-       * @todo: don't close here for HTTP/1.1? */
-      LWIP_DEBUGF(HTTPD_DEBUG, ("End of file.\n"));
-      http_close_conn(pcb, hs);
-      return 0;
-    }
-#if LWIP_HTTPD_SSI || LWIP_HTTPD_DYNAMIC_HEADERS
-    /* Do we already have a send buffer allocated? */
-    if(hs->buf) {
-      /* Yes - get the length of the buffer */
-      count = hs->buf_len;
-    } else {
-      /* We don't have a send buffer so allocate one up to 2mss bytes long. */
-      count = 2 * tcp_mss(pcb);
-      do {
-        hs->buf = (char*)mem_malloc((mem_size_t)count);
-        if (hs->buf != NULL) {
-          hs->buf_len = count;
-          break;
-        }
-        count = count / 2;
-      } while (count > 100);
-
-      /* Did we get a send buffer? If not, return immediately. */
-      if (hs->buf == NULL) {
-        LWIP_DEBUGF(HTTPD_DEBUG, ("No buff\n"));
-        return 0;
-      }
-    }
-
-    /* Read a block of data from the file. */
-    LWIP_DEBUGF(HTTPD_DEBUG, ("Trying to read %d bytes.\n", count));
-
-    count = fs_read(hs->handle, hs->buf, count);
-    if(count < 0) {
-      /* We reached the end of the file so this request is done.
-       * @todo: don't close here for HTTP/1.1? */
-      LWIP_DEBUGF(HTTPD_DEBUG, ("End of file.\n"));
-      http_close_conn(pcb, hs);
-      return 1;
-    }
-
-    /* Set up to send the block of data we just read */
-    LWIP_DEBUGF(HTTPD_DEBUG, ("Read %d bytes.\n", count));
-    hs->left = count;
-    hs->file = hs->buf;
-#if LWIP_HTTPD_SSI
-    hs->parse_left = count;
-    hs->parsed = hs->buf;
-#endif /* LWIP_HTTPD_SSI */
-#else /* LWIP_HTTPD_SSI || LWIP_HTTPD_DYNAMIC_HEADERS */
-    LWIP_ASSERT("SSI and DYNAMIC_HEADERS turned off but eof not reached", 0);
-#endif /* LWIP_HTTPD_SSI || LWIP_HTTPD_DYNAMIC_HEADERS */
-  }
-
-#if LWIP_HTTPD_SSI
-  if(!hs->tag_check) {
-#endif /* LWIP_HTTPD_SSI */
-    /* We are not processing an SHTML file so no tag checking is necessary.
-     * Just send the data as we received it from the file. */
-
-    /* We cannot send more data than space available in the send
-       buffer. */
-    if (tcp_sndbuf(pcb) < hs->left) {
-      len = tcp_sndbuf(pcb);
-    } else {
-      len = (u16_t)hs->left;
-      LWIP_ASSERT("hs->left did not fit into u16_t!", (len == hs->left));
-    }
-    mss = tcp_mss(pcb);
-    if(len > (2 * mss)) {
-      len = 2 * mss;
-    }
-
-    err = http_write(pcb, hs->file, &len, HTTP_IS_DATA_VOLATILE(hs));
-    if (err == ERR_OK) {
-      data_to_send = true;
-      hs->file += len;
-      hs->left -= len;
-    }
-#if LWIP_HTTPD_SSI
-  } else {
-    /* We are processing an SHTML file so need to scan for tags and replace
-     * them with insert strings. We need to be careful here since a tag may
-     * straddle the boundary of two blocks read from the file and we may also
-     * have to split the insert string between two tcp_write operations. */
-
-    /* How much data could we send? */
-    len = tcp_sndbuf(pcb);
-
-    /* Do we have remaining data to send before parsing more? */
-    if(hs->parsed > hs->file) {
-      /* We cannot send more data than space available in the send
-         buffer. */
-      if (tcp_sndbuf(pcb) < (hs->parsed - hs->file)) {
-        len = tcp_sndbuf(pcb);
-      } else {
-        LWIP_ASSERT("Data size does not fit into u16_t!",
-                    (hs->parsed - hs->file) <= 0xffff);
-        len = (u16_t)(hs->parsed - hs->file);
-      }
-      mss = tcp_mss(pcb);
-      if(len > (2 * mss)) {
-        len = 2 * mss;
-      }
-
-      err = http_write(pcb, hs->file, &len, HTTP_IS_DATA_VOLATILE(hs));
-      if (err == ERR_OK) {
-        data_to_send = true;
-        hs->file += len;
-        hs->left -= len;
-      }
-
-      /* If the send buffer is full, return now. */
-      if(tcp_sndbuf(pcb) == 0) {
-        return data_to_send;
-      }
-    }
-
-    LWIP_DEBUGF(HTTPD_DEBUG, ("State %d, %d left\n", hs->tag_state, hs->parse_left));
-
-    /* We have sent all the data that was already parsed so continue parsing
-     * the buffer contents looking for SSI tags. */
-    while((hs->parse_left) && (err == ERR_OK)) {
-      /* @todo: somewhere in this loop, 'len' should grow again... */
-      if (len == 0) {
-        return data_to_send;
-      }
-      switch(hs->tag_state) {
-        case TAG_NONE:
-          /* We are not currently processing an SSI tag so scan for the
-           * start of the lead-in marker. */
-          if(*hs->parsed == g_pcTagLeadIn[0]) {
-            /* We found what could be the lead-in for a new tag so change
-             * state appropriately. */
-            hs->tag_state = TAG_LEADIN;
-            hs->tag_index = 1;
-#if !LWIP_HTTPD_SSI_INCLUDE_TAG
-            hs->tag_started = hs->parsed;
-#endif /* !LWIP_HTTPD_SSI_INCLUDE_TAG */
-          }
-
-          /* Move on to the next character in the buffer */
-          hs->parse_left--;
-          hs->parsed++;
-          break;
-
-        case TAG_LEADIN:
-          /* We are processing the lead-in marker, looking for the start of
-           * the tag name. */
-
-          /* Have we reached the end of the leadin? */
-          if(hs->tag_index == LEN_TAG_LEAD_IN) {
-            hs->tag_index = 0;
-            hs->tag_state = TAG_FOUND;
-          } else {
-            /* Have we found the next character we expect for the tag leadin? */
-            if(*hs->parsed == g_pcTagLeadIn[hs->tag_index]) {
-              /* Yes - move to the next one unless we have found the complete
-               * leadin, in which case we start looking for the tag itself */
-              hs->tag_index++;
-            } else {
-              /* We found an unexpected character so this is not a tag. Move
-               * back to idle state. */
-              hs->tag_state = TAG_NONE;
-            }
-
-            /* Move on to the next character in the buffer */
-            hs->parse_left--;
-            hs->parsed++;
-          }
-          break;
-
-        case TAG_FOUND:
-          /* We are reading the tag name, looking for the start of the
-           * lead-out marker and removing any whitespace found. */
-
-          /* Remove leading whitespace between the tag leading and the first
-           * tag name character. */
-          if((hs->tag_index == 0) && ((*hs->parsed == ' ') ||
-             (*hs->parsed == '\t') || (*hs->parsed == '\n') ||
-             (*hs->parsed == '\r'))) {
-            /* Move on to the next character in the buffer */
-            hs->parse_left--;
-            hs->parsed++;
-            break;
-          }
-
-          /* Have we found the end of the tag name? This is signalled by
-           * us finding the first leadout character or whitespace */
-          if((*hs->parsed == g_pcTagLeadOut[0]) ||
-             (*hs->parsed == ' ') || (*hs->parsed == '\t') ||
-             (*hs->parsed == '\n')  || (*hs->parsed == '\r')) {
-
-            if(hs->tag_index == 0) {
-              /* We read a zero length tag so ignore it. */
-              hs->tag_state = TAG_NONE;
-            } else {
-              /* We read a non-empty tag so go ahead and look for the
-               * leadout string. */
-              hs->tag_state = TAG_LEADOUT;
-              LWIP_ASSERT("hs->tag_index <= 0xff", hs->tag_index <= 0xff);
-              hs->tag_name_len = (u8_t)hs->tag_index;
-              hs->tag_name[hs->tag_index] = '\0';
-              if(*hs->parsed == g_pcTagLeadOut[0]) {
-                hs->tag_index = 1;
-              } else {
-                hs->tag_index = 0;
-              }
-            }
-          } else {
-            /* This character is part of the tag name so save it */
-            if(hs->tag_index < LWIP_HTTPD_MAX_TAG_NAME_LEN) {
-              hs->tag_name[hs->tag_index++] = *hs->parsed;
-            } else {
-              /* The tag was too long so ignore it. */
-              hs->tag_state = TAG_NONE;
-            }
-          }
-
-          /* Move on to the next character in the buffer */
-          hs->parse_left--;
-          hs->parsed++;
-
-          break;
-
-        /* We are looking for the end of the lead-out marker. */
-        case TAG_LEADOUT:
-          /* Remove leading whitespace between the tag leading and the first
-           * tag leadout character. */
-          if((hs->tag_index == 0) && ((*hs->parsed == ' ') ||
-             (*hs->parsed == '\t') || (*hs->parsed == '\n') ||
-             (*hs->parsed == '\r'))) {
-            /* Move on to the next character in the buffer */
-            hs->parse_left--;
-            hs->parsed++;
-            break;
-          }
-
-          /* Have we found the next character we expect for the tag leadout? */
-          if(*hs->parsed == g_pcTagLeadOut[hs->tag_index]) {
-            /* Yes - move to the next one unless we have found the complete
-             * leadout, in which case we need to call the client to process
-             * the tag. */
-
-            /* Move on to the next character in the buffer */
-            hs->parse_left--;
-            hs->parsed++;
-
-            if(hs->tag_index == (LEN_TAG_LEAD_OUT - 1)) {
-              /* Call the client to ask for the insert string for the
-               * tag we just found. */
-#if LWIP_HTTPD_SSI_MULTIPART
-              hs->tag_part = 0; /* start with tag part 0 */
-#endif /* LWIP_HTTPD_SSI_MULTIPART */
-              get_tag_insert(hs);
-
-              /* Next time through, we are going to be sending data
-               * immediately, either the end of the block we start
-               * sending here or the insert string. */
-              hs->tag_index = 0;
-              hs->tag_state = TAG_SENDING;
-              hs->tag_end = hs->parsed;
-#if !LWIP_HTTPD_SSI_INCLUDE_TAG
-              hs->parsed = hs->tag_started;
-#endif /* !LWIP_HTTPD_SSI_INCLUDE_TAG*/
-
-              /* If there is any unsent data in the buffer prior to the
-               * tag, we need to send it now. */
-              if (hs->tag_end > hs->file) {
-                /* How much of the data can we send? */
-#if LWIP_HTTPD_SSI_INCLUDE_TAG
-                if(len > hs->tag_end - hs->file) {
-                  len = (u16_t)(hs->tag_end - hs->file);
-                }
-#else /* LWIP_HTTPD_SSI_INCLUDE_TAG*/
-                if(len > hs->tag_started - hs->file) {
-                  /* we would include the tag in sending */
-                  len = (u16_t)(hs->tag_started - hs->file);
-                }
-#endif /* LWIP_HTTPD_SSI_INCLUDE_TAG*/
-
-                err = http_write(pcb, hs->file, &len, HTTP_IS_DATA_VOLATILE(hs));
-                if (err == ERR_OK) {
-                  data_to_send = true;
-#if !LWIP_HTTPD_SSI_INCLUDE_TAG
-                  if(hs->tag_started <= hs->file) {
-                    /* pretend to have sent the tag, too */
-                    len += hs->tag_end - hs->tag_started;
-                  }
-#endif /* !LWIP_HTTPD_SSI_INCLUDE_TAG*/
-                  hs->file += len;
-                  hs->left -= len;
-                }
-              }
-            } else {
-              hs->tag_index++;
-            }
-          } else {
-            /* We found an unexpected character so this is not a tag. Move
-             * back to idle state. */
-            hs->parse_left--;
-            hs->parsed++;
-            hs->tag_state = TAG_NONE;
-          }
-          break;
-
-        /*
-         * We have found a valid tag and are in the process of sending
-         * data as a result of that discovery. We send either remaining data
-         * from the file prior to the insert point or the insert string itself.
-         */
-        case TAG_SENDING:
-          /* Do we have any remaining file data to send from the buffer prior
-           * to the tag? */
-          if(hs->tag_end > hs->file) {
-            /* How much of the data can we send? */
-#if LWIP_HTTPD_SSI_INCLUDE_TAG
-            if(len > hs->tag_end - hs->file) {
-              len = (u16_t)(hs->tag_end - hs->file);
-            }
-#else /* LWIP_HTTPD_SSI_INCLUDE_TAG*/
-            LWIP_ASSERT("hs->started >= hs->file", hs->tag_started >= hs->file);
-            if (len > hs->tag_started - hs->file) {
-              /* we would include the tag in sending */
-              len = (u16_t)(hs->tag_started - hs->file);
-            }
-#endif /* LWIP_HTTPD_SSI_INCLUDE_TAG*/
-            if (len != 0) {
-              err = http_write(pcb, hs->file, &len, HTTP_IS_DATA_VOLATILE(hs));
-            } else {
-              err = ERR_OK;
-            }
-            if (err == ERR_OK) {
-              data_to_send = true;
-#if !LWIP_HTTPD_SSI_INCLUDE_TAG
-              if(hs->tag_started <= hs->file) {
-                /* pretend to have sent the tag, too */
-                len += hs->tag_end - hs->tag_started;
-              }
-#endif /* !LWIP_HTTPD_SSI_INCLUDE_TAG*/
-              hs->file += len;
-              hs->left -= len;
-            }
-          } else {
-#if LWIP_HTTPD_SSI_MULTIPART
-            if(hs->tag_index >= hs->tag_insert_len) {
-              /* Did the last SSIHandler have more to send? */
-              if (hs->tag_part != HTTPD_LAST_TAG_PART) {
-                /* If so, call it again */
-                hs->tag_index = 0;
-                get_tag_insert(hs);
-              }
-            }
-#endif /* LWIP_HTTPD_SSI_MULTIPART */
-
-            /* Do we still have insert data left to send? */
-            if(hs->tag_index < hs->tag_insert_len) {
-              /* We are sending the insert string itself. How much of the
-               * insert can we send? */
-              if(len > (hs->tag_insert_len - hs->tag_index)) {
-                len = (hs->tag_insert_len - hs->tag_index);
-              }
-
-              /* Note that we set the copy flag here since we only have a
-               * single tag insert buffer per connection. If we don't do
-               * this, insert corruption can occur if more than one insert
-               * is processed before we call tcp_output. */
-              err = http_write(pcb, &(hs->tag_insert[hs->tag_index]), &len,
-                               HTTP_IS_TAG_VOLATILE(hs));
-              if (err == ERR_OK) {
-                data_to_send = true;
-                hs->tag_index += len;
-                /* Don't return here: keep on sending data */
-              }
-            } else {
-              /* We have sent all the insert data so go back to looking for
-               * a new tag. */
-              LWIP_DEBUGF(HTTPD_DEBUG, ("Everything sent.\n"));
-              hs->tag_index = 0;
-              hs->tag_state = TAG_NONE;
-#if !LWIP_HTTPD_SSI_INCLUDE_TAG
-              hs->parsed = hs->tag_end;
-#endif /* !LWIP_HTTPD_SSI_INCLUDE_TAG*/
-            }
-            break;
-        }
-      }
-    }
-
-    /* If we drop out of the end of the for loop, this implies we must have
-     * file data to send so send it now. In TAG_SENDING state, we've already
-     * handled this so skip the send if that's the case. */
-    if((hs->tag_state != TAG_SENDING) && (hs->parsed > hs->file)) {
-      /* We cannot send more data than space available in the send
-         buffer. */
-      if (tcp_sndbuf(pcb) < (hs->parsed - hs->file)) {
-        len = tcp_sndbuf(pcb);
-      } else {
-        LWIP_ASSERT("Data size does not fit into u16_t!",
-                    (hs->parsed - hs->file) <= 0xffff);
-        len = (u16_t)(hs->parsed - hs->file);
-      }
-      if(len > (2 * tcp_mss(pcb))) {
-        len = 2 * tcp_mss(pcb);
-      }
-
-      err = http_write(pcb, hs->file, &len, HTTP_IS_DATA_VOLATILE(hs));
-      if (err == ERR_OK) {
-        data_to_send = true;
-        hs->file += len;
-        hs->left -= len;
-      }
-    }
-  }
-#endif /* LWIP_HTTPD_SSI */
-
-  if((hs->left == 0) && (fs_bytes_left(hs->handle) <= 0)) {
-    /* We reached the end of the file so this request is done.
-     * This adds the FIN flag right into the last data segment.
-     * @todo: don't close here for HTTP/1.1? */
-    LWIP_DEBUGF(HTTPD_DEBUG, ("End of file.\n"));
-    http_close_conn(pcb, hs);
-    return 0;
-  }
-  LWIP_DEBUGF(HTTPD_DEBUG | LWIP_DBG_TRACE, ("send_data end.\n"));
-  return data_to_send;
-}
-
-#if LWIP_HTTPD_SUPPORT_EXTSTATUS
-/** Initialize a http connection with a file to send for an error message
- *
- * @param hs http connection state
- * @param error_nr HTTP error number
- * @return ERR_OK if file was found and hs has been initialized correctly
- *         another err_t otherwise
- */
-static err_t
-http_find_error_file(struct http_state *hs, u16_t error_nr)
-{
-  const char *uri1, *uri2, *uri3;
-  struct fs_file *file;
-
-  if (error_nr == 501) {
-    uri1 = "/501.html";
-    uri2 = "/501.htm";
-    uri3 = "/501.shtml";
-  } else {
-    /* 400 (bad request is the default) */
-    uri1 = "/400.html";
-    uri2 = "/400.htm";
-    uri3 = "/400.shtml";
-  }
-  file = fs_open(uri1);
-  if (file == NULL) {
-    file = fs_open(uri2);
-    if (file == NULL) {
-      file = fs_open(uri3);
-      if (file == NULL) {
-        LWIP_DEBUGF(HTTPD_DEBUG, ("Error page for error %"U16_F" not found\n",
-          error_nr));
-        return ERR_ARG;
-      }
-    }
-  }
-  return http_init_file(hs, file, 0, NULL);
-}
-#else /* LWIP_HTTPD_SUPPORT_EXTSTATUS */
-#define http_find_error_file(hs, error_nr) ERR_ARG
-#endif /* LWIP_HTTPD_SUPPORT_EXTSTATUS */
-
-/**
- * Get the file struct for a 404 error page.
- * Tries some file names and returns NULL if none found.
- *
- * @param uri pointer that receives the actual file name URI
- * @return file struct for the error page or NULL no matching file was found
- */
-static struct fs_file *
-http_get_404_file(const char **uri)
-{
-  struct fs_file *file;
-
-  *uri = "/404.html";
-  file = fs_open(*uri);
-  if(file == NULL) {
-    /* 404.html doesn't exist. Try 404.htm instead. */
-    *uri = "/404.htm";
-    file = fs_open(*uri);
-    if(file == NULL) {
-      /* 404.htm doesn't exist either. Try 404.shtml instead. */
-      *uri = "/404.shtml";
-      file = fs_open(*uri);
-      if(file == NULL) {
-        /* 404.htm doesn't exist either. Indicate to the caller that it should
-         * send back a default 404 page.
-         */
-        *uri = NULL;
-      }
-    }
-  }
-
-  return file;
-}
-
-#if LWIP_HTTPD_SUPPORT_POST
-static err_t
-http_handle_post_finished(struct http_state *hs)
-{
-  /* application error or POST finished */
-  /* NULL-terminate the buffer */
-  http_post_response_filename[0] = 0;
-  httpd_post_finished(hs, http_post_response_filename, LWIP_HTTPD_POST_MAX_RESPONSE_URI_LEN);
-  return http_find_file(hs, http_post_response_filename, 0);
-}
-
-/** Pass received POST body data to the application and correctly handle
- * returning a response document or closing the connection.
- * ATTENTION: The application is responsible for the pbuf now, so don't free it!
- *
- * @param hs http connection state
- * @param p pbuf to pass to the application
- * @return ERR_OK if passed successfully, another err_t if the response file
- *         hasn't been found (after POST finished)
- */
-static err_t
-http_post_rxpbuf(struct http_state *hs, struct pbuf *p)
-{
-  err_t err;
-
-  /* adjust remaining Content-Length */
-  if (hs->post_content_len_left < p->tot_len) {
-    hs->post_content_len_left = 0;
-  } else {
-    hs->post_content_len_left -= p->tot_len;
-  }
-  err = httpd_post_receive_data(hs, p);
-  if ((err != ERR_OK) || (hs->post_content_len_left == 0)) {
-#if LWIP_HTTPD_SUPPORT_POST && LWIP_HTTPD_POST_MANUAL_WND
-    if (hs->unrecved_bytes != 0) {
-       return ERR_OK;
-    }
-#endif /* LWIP_HTTPD_SUPPORT_POST && LWIP_HTTPD_POST_MANUAL_WND */
-    /* application error or POST finished */
-    return http_handle_post_finished(hs);
-  }
-
-  return ERR_OK;
-}
-
-/** Handle a post request. Called from http_parse_request when method 'POST'
- * is found.
- *
- * @param pcb The tcp_pcb which received this packet.
- * @param p The input pbuf (containing the POST header and body).
- * @param hs The http connection state.
- * @param data HTTP request (header and part of body) from input pbuf(s).
- * @param data_len Size of 'data'.
- * @param uri The HTTP URI parsed from input pbuf(s).
- * @param uri_end Pointer to the end of 'uri' (here, the rest of the HTTP
- *                header starts).
- * @return ERR_OK: POST correctly parsed and accepted by the application.
- *         ERR_INPROGRESS: POST not completely parsed (no error yet)
- *         another err_t: Error parsing POST or denied by the application
- */
-static err_t
-http_post_request(struct tcp_pcb *pcb, struct pbuf **inp, struct http_state *hs,
-                  char *data, u16_t data_len, char *uri, char *uri_end)
-{
-  err_t err;
-  /* search for end-of-header (first double-CRLF) */
-  char* crlfcrlf = strnstr(uri_end + 1, CRLF CRLF, data_len - (uri_end + 1 - data));
-
-#if LWIP_HTTPD_POST_MANUAL_WND
-  hs->pcb = pcb;
-#else /* LWIP_HTTPD_POST_MANUAL_WND */
-  LWIP_UNUSED_ARG(pcb); /* only used for LWIP_HTTPD_POST_MANUAL_WND */
-#endif /*  LWIP_HTTPD_POST_MANUAL_WND */
-
-  if (crlfcrlf != NULL) {
-    /* search for "Content-Length: " */
-#define HTTP_HDR_CONTENT_LEN                "Content-Length: "
-#define HTTP_HDR_CONTENT_LEN_LEN            16
-#define HTTP_HDR_CONTENT_LEN_DIGIT_MAX_LEN  10
-    char *scontent_len = strnstr(uri_end + 1, HTTP_HDR_CONTENT_LEN, crlfcrlf - (uri_end + 1));
-    if (scontent_len != NULL) {
-      char *scontent_len_end = strnstr(scontent_len + HTTP_HDR_CONTENT_LEN_LEN, CRLF, HTTP_HDR_CONTENT_LEN_DIGIT_MAX_LEN);
-      if (scontent_len_end != NULL) {
-        int content_len;
-        char *conten_len_num = scontent_len + HTTP_HDR_CONTENT_LEN_LEN;
-        *scontent_len_end = 0;
-        content_len = atoi(conten_len_num);
-        if (content_len > 0) {
-          /* adjust length of HTTP header passed to application */
-          const char *hdr_start_after_uri = uri_end + 1;
-          u16_t hdr_len = LWIP_MIN(data_len, crlfcrlf + 4 - data);
-          u16_t hdr_data_len = LWIP_MIN(data_len, crlfcrlf + 4 - hdr_start_after_uri);
-          u8_t post_auto_wnd = 1;
-          http_post_response_filename[0] = 0;
-          err = httpd_post_begin(hs, uri, hdr_start_after_uri, hdr_data_len, content_len,
-            http_post_response_filename, LWIP_HTTPD_POST_MAX_RESPONSE_URI_LEN, &post_auto_wnd);
-          if (err == ERR_OK) {
-            /* try to pass in data of the first pbuf(s) */
-            struct pbuf *q = *inp;
-            u16_t start_offset = hdr_len;
-#if LWIP_HTTPD_POST_MANUAL_WND
-            hs->no_auto_wnd = !post_auto_wnd;
-#endif /* LWIP_HTTPD_POST_MANUAL_WND */
-            /* set the Content-Length to be received for this POST */
-            hs->post_content_len_left = (u32_t)content_len;
-
-            /* get to the pbuf where the body starts */
-            while((q != NULL) && (q->len <= start_offset)) {
-              struct pbuf *head = q;
-              start_offset -= q->len;
-              q = q->next;
-              /* free the head pbuf */
-              head->next = NULL;
-              pbuf_free(head);
-            }
-            *inp = NULL;
-            if (q != NULL) {
-              /* hide the remaining HTTP header */
-              pbuf_header(q, -(s16_t)start_offset);
-#if LWIP_HTTPD_POST_MANUAL_WND
-              if (!post_auto_wnd) {
-                /* already tcp_recved() this data... */
-                hs->unrecved_bytes = q->tot_len;
-              }
-#endif /* LWIP_HTTPD_POST_MANUAL_WND */
-              return http_post_rxpbuf(hs, q);
-            } else {
-              return ERR_OK;
-            }
-          } else {
-            /* return file passed from application */
-            return http_find_file(hs, http_post_response_filename, 0);
-          }
-        } else {
-          LWIP_DEBUGF(HTTPD_DEBUG, ("POST received invalid Content-Length: %s\n",
-            conten_len_num));
-          return ERR_ARG;
-        }
-      }
-    }
-  }
-  /* if we come here, the POST is incomplete */
-#if LWIP_HTTPD_SUPPORT_REQUESTLIST
-  return ERR_INPROGRESS;
-#else /* LWIP_HTTPD_SUPPORT_REQUESTLIST */
-  return ERR_ARG;
-#endif /* LWIP_HTTPD_SUPPORT_REQUESTLIST */
-}
-
-#if LWIP_HTTPD_POST_MANUAL_WND
-/** A POST implementation can call this function to update the TCP window.
- * This can be used to throttle data reception (e.g. when received data is
- * programmed to flash and data is received faster than programmed).
- *
- * @param connection A connection handle passed to httpd_post_begin for which
- *        httpd_post_finished has *NOT* been called yet!
- * @param recved_len Length of data received (for window update)
- */
-void httpd_post_data_recved(void *connection, u16_t recved_len)
-{
-  struct http_state *hs = (struct http_state*)connection;
-  if (hs != NULL) {
-    if (hs->no_auto_wnd) {
-      u16_t len = recved_len;
-      if (hs->unrecved_bytes >= recved_len) {
-        hs->unrecved_bytes -= recved_len;
-      } else {
-        LWIP_DEBUGF(HTTPD_DEBUG | LWIP_DBG_LEVEL_WARNING, ("httpd_post_data_recved: recved_len too big\n"));
-        len = (u16_t)hs->unrecved_bytes;
-        hs->unrecved_bytes = 0;
-      }
-      if (hs->pcb != NULL) {
-        if (len != 0) {
-          tcp_recved(hs->pcb, len);
-        }
-        if ((hs->post_content_len_left == 0) && (hs->unrecved_bytes == 0)) {
-          /* finished handling POST */
-          http_handle_post_finished(hs);
-          http_send_data(hs->pcb, hs);
-        }
-      }
-    }
-  }
-}
-#endif /* LWIP_HTTPD_POST_MANUAL_WND */
-
-#endif /* LWIP_HTTPD_SUPPORT_POST */
-
-/**
- * When data has been received in the correct state, try to parse it
- * as a HTTP request.
- *
- * @param p the received pbuf
- * @param hs the connection state
- * @param pcb the tcp_pcb which received this packet
- * @return ERR_OK if request was OK and hs has been initialized correctly
- *         ERR_INPROGRESS if request was OK so far but not fully received
- *         another err_t otherwise
- */
-static err_t
-http_parse_request(struct pbuf **inp, struct http_state *hs, struct tcp_pcb *pcb)
-{
-  char *data;
-  char *crlf;
-  u16_t data_len;
-  struct pbuf *p = *inp;
-#if LWIP_HTTPD_SUPPORT_REQUESTLIST
-  u16_t clen;
-#endif /* LWIP_HTTPD_SUPPORT_REQUESTLIST */
-#if LWIP_HTTPD_SUPPORT_POST
-  err_t err;
-#endif /* LWIP_HTTPD_SUPPORT_POST */
-
-  LWIP_UNUSED_ARG(pcb); /* only used for post */
-  LWIP_ASSERT("p != NULL", p != NULL);
-  LWIP_ASSERT("hs != NULL", hs != NULL);
-
-  if ((hs->handle != NULL) || (hs->file != NULL)) {
-    LWIP_DEBUGF(HTTPD_DEBUG, ("Received data while sending a file\n"));
-    /* already sending a file */
-    /* @todo: abort? */
-    return ERR_USE;
-  }
-
-#if LWIP_HTTPD_SUPPORT_REQUESTLIST
-
-  LWIP_DEBUGF(HTTPD_DEBUG, ("Received %"U16_F" bytes\n", p->tot_len));
-
-  /* first check allowed characters in this pbuf? */
-
-  /* enqueue the pbuf */
-  if (hs->req == NULL) {
-    LWIP_DEBUGF(HTTPD_DEBUG, ("First pbuf\n"));
-    hs->req = p;
-  } else {
-    LWIP_DEBUGF(HTTPD_DEBUG, ("pbuf enqueued\n"));
-    pbuf_cat(hs->req, p);
-  }
-
-  if (hs->req->next != NULL) {
-    data_len = LWIP_MIN(hs->req->tot_len, LWIP_HTTPD_MAX_REQ_LENGTH);
-    pbuf_copy_partial(hs->req, httpd_req_buf, data_len, 0);
-    data = httpd_req_buf;
-  } else
-#endif /* LWIP_HTTPD_SUPPORT_REQUESTLIST */
-  {
-    data = (char *)p->payload;
-    data_len = p->len;
-    if (p->len != p->tot_len) {
-      LWIP_DEBUGF(HTTPD_DEBUG, ("Warning: incomplete header due to chained pbufs\n"));
-    }
-  }
-
-  /* received enough data for minimal request? */
-  if (data_len >= MIN_REQ_LEN) {
-    /* wait for CRLF before parsing anything */
-    crlf = strnstr(data, CRLF, data_len);
-    if (crlf != NULL) {
-#if LWIP_HTTPD_SUPPORT_POST
-      int is_post = 0;
-#endif /* LWIP_HTTPD_SUPPORT_POST */
-      int is_09 = 0;
-      char *sp1, *sp2;
-      u16_t left_len, uri_len;
-      LWIP_DEBUGF(HTTPD_DEBUG | LWIP_DBG_TRACE, ("CRLF received, parsing request\n"));
-      /* parse method */
-      if (!strncmp(data, "GET ", 4)) {
-        sp1 = data + 3;
-        /* received GET request */
-        LWIP_DEBUGF(HTTPD_DEBUG | LWIP_DBG_TRACE, ("Received GET request\"\n"));
-#if LWIP_HTTPD_SUPPORT_POST
-      } else if (!strncmp(data, "POST ", 5)) {
-        /* store request type */
-        is_post = 1;
-        sp1 = data + 4;
-        /* received GET request */
-        LWIP_DEBUGF(HTTPD_DEBUG | LWIP_DBG_TRACE, ("Received POST request\n"));
-#endif /* LWIP_HTTPD_SUPPORT_POST */
-      } else {
-        /* null-terminate the METHOD (pbuf is freed anyway wen returning) */
-        data[4] = 0;
-        /* unsupported method! */
-        LWIP_DEBUGF(HTTPD_DEBUG, ("Unsupported request method (not implemented): \"%s\"\n",
-          data));
-        return http_find_error_file(hs, 501);
-      }
-      /* if we come here, method is OK, parse URI */
-      left_len = data_len - ((sp1 +1) - data);
-      sp2 = strnstr(sp1 + 1, " ", left_len);
-#if LWIP_HTTPD_SUPPORT_V09
-      if (sp2 == NULL) {
-        /* HTTP 0.9: respond with correct protocol version */
-        sp2 = strnstr(sp1 + 1, CRLF, left_len);
-        is_09 = 1;
-#if LWIP_HTTPD_SUPPORT_POST
-        if (is_post) {
-          /* HTTP/0.9 does not support POST */
-          goto badrequest;
-        }
-#endif /* LWIP_HTTPD_SUPPORT_POST */
-      }
-#endif /* LWIP_HTTPD_SUPPORT_V09 */
-      uri_len = sp2 - (sp1 + 1);
-      if ((sp2 != 0) && (sp2 > sp1)) {
-        char *uri = sp1 + 1;
-        /* null-terminate the METHOD (pbuf is freed anyway wen returning) */
-        *sp1 = 0;
-        uri[uri_len] = 0;
-        LWIP_DEBUGF(HTTPD_DEBUG, ("Received \"%s\" request for URI: \"%s\"\n",
-                    data, uri));
-#if LWIP_HTTPD_SUPPORT_POST
-        if (is_post) {
-#if LWIP_HTTPD_SUPPORT_REQUESTLIST
-          struct pbuf **q = &hs->req;
-#else /* LWIP_HTTPD_SUPPORT_REQUESTLIST */
-          struct pbuf **q = inp;
-#endif /* LWIP_HTTPD_SUPPORT_REQUESTLIST */
-          err = http_post_request(pcb, q, hs, data, data_len, uri, sp2);
-          if (err != ERR_OK) {
-            /* restore header for next try */
-            *sp1 = ' ';
-            *sp2 = ' ';
-            uri[uri_len] = ' ';
-          }
-          if (err == ERR_ARG) {
-            goto badrequest;
-          }
-          return err;
-        } else
-#endif /* LWIP_HTTPD_SUPPORT_POST */
-        {
-          return http_find_file(hs, uri, is_09);
-        }
-      } else {
-        LWIP_DEBUGF(HTTPD_DEBUG, ("invalid URI\n"));
-      }
-    }
-  }
-
-#if LWIP_HTTPD_SUPPORT_REQUESTLIST
-  clen = pbuf_clen(hs->req);
-  if ((hs->req->tot_len <= LWIP_HTTPD_REQ_BUFSIZE) &&
-    (clen <= LWIP_HTTPD_REQ_QUEUELEN)) {
-    /* request not fully received (too short or CRLF is missing) */
-    return ERR_INPROGRESS;
-  } else
-#endif /* LWIP_HTTPD_SUPPORT_REQUESTLIST */
-  {
-#if LWIP_HTTPD_SUPPORT_POST
-badrequest:
-#endif /* LWIP_HTTPD_SUPPORT_POST */
-    LWIP_DEBUGF(HTTPD_DEBUG, ("bad request\n"));
-    /* could not parse request */
-    return http_find_error_file(hs, 400);
-  }
-}
-
-/** Try to find the file specified by uri and, if found, initialize hs
- * accordingly.
- *
- * @param hs the connection state
- * @param uri the HTTP header URI
- * @param is_09 1 if the request is HTTP/0.9 (no HTTP headers in response)
- * @return ERR_OK if file was found and hs has been initialized correctly
- *         another err_t otherwise
- */
-static err_t
-http_find_file(struct http_state *hs, const char *uri, int is_09)
-{
-  size_t loop;
-  struct fs_file *file = NULL;
-  char *params;
-#if LWIP_HTTPD_CGI
-  int i;
-  int count;
-#endif /* LWIP_HTTPD_CGI */
-
-#if LWIP_HTTPD_SSI
-  /*
-   * By default, assume we will not be processing server-side-includes
-   * tags
-   */
-  hs->tag_check = false;
-#endif /* LWIP_HTTPD_SSI */
-
-  /* Have we been asked for the default root file? */
-  if((uri[0] == '/') &&  (uri[1] == 0)) {
-    /* Try each of the configured default filenames until we find one
-       that exists. */
-    for (loop = 0; loop < NUM_DEFAULT_FILENAMES; loop++) {
-      LWIP_DEBUGF(HTTPD_DEBUG | LWIP_DBG_TRACE, ("Looking for %s...\n", g_psDefaultFilenames[loop].name));
-      file = fs_open((char *)g_psDefaultFilenames[loop].name);
-      uri = (char *)g_psDefaultFilenames[loop].name;
-      if(file != NULL) {
-        LWIP_DEBUGF(HTTPD_DEBUG | LWIP_DBG_TRACE, ("Opened.\n"));
-#if LWIP_HTTPD_SSI
-        hs->tag_check = g_psDefaultFilenames[loop].shtml;
-#endif /* LWIP_HTTPD_SSI */
-        break;
-      }
-    }
-    if (file == NULL) {
-      /* None of the default filenames exist so send back a 404 page */
-      file = http_get_404_file(&uri);
-#if LWIP_HTTPD_SSI
-      hs->tag_check = false;
-#endif /* LWIP_HTTPD_SSI */
-    }
-  } else {
-    /* No - we've been asked for a specific file. */
-    /* First, isolate the base URI (without any parameters) */
-    params = (char *)strchr(uri, '?');
-    if (params != NULL) {
-      /* URI contains parameters. NULL-terminate the base URI */
-      *params = '\0';
-      params++;
-    }
-
-#if LWIP_HTTPD_CGI
-    /* Does the base URI we have isolated correspond to a CGI handler? */
-    if (g_iNumCGIs && g_pCGIs) {
-      for (i = 0; i < g_iNumCGIs; i++) {
-        if (strcmp(uri, g_pCGIs[i].pcCGIName) == 0) {
-          /*
-           * We found a CGI that handles this URI so extract the
-           * parameters and call the handler.
-           */
-           count = extract_uri_parameters(hs, params);
-           uri = g_pCGIs[i].pfnCGIHandler(i, count, hs->params,
-                                          hs->param_vals);
-           break;
-        }
-      }
-    }
-#endif /* LWIP_HTTPD_CGI */
-
-    LWIP_DEBUGF(HTTPD_DEBUG | LWIP_DBG_TRACE, ("Opening %s\n", uri));
-
-    file = fs_open(uri);
-    if (file == NULL) {
-      file = http_get_404_file(&uri);
-    }
-#if LWIP_HTTPD_SSI
-    if (file != NULL) {
-      /*
-       * See if we have been asked for an shtml file and, if so,
-       * enable tag checking.
-       */
-      hs->tag_check = false;
-      for (loop = 0; loop < NUM_SHTML_EXTENSIONS; loop++) {
-        if (strstr(uri, g_pcSSIExtensions[loop])) {
-          hs->tag_check = true;
-          break;
-        }
-      }
-    }
-#endif /* LWIP_HTTPD_SSI */
-  }
-  return http_init_file(hs, file, is_09, uri);
-}
-
-/** Initialize a http connection with a file to send (if found).
- * Called by http_find_file and http_find_error_file.
- *
- * @param hs http connection state
- * @param file file structure to send (or NULL if not found)
- * @param is_09 1 if the request is HTTP/0.9 (no HTTP headers in response)
- * @param uri the HTTP header URI
- * @return ERR_OK if file was found and hs has been initialized correctly
- *         another err_t otherwise
- */
-static err_t
-http_init_file(struct http_state *hs, struct fs_file *file, int is_09, const char *uri)
-{
-  if (file != NULL) {
-    /* file opened, initialise struct http_state */
-#if LWIP_HTTPD_SSI
-    hs->tag_index = 0;
-    hs->tag_state = TAG_NONE;
-    hs->parsed = file->data;
-    hs->parse_left = file->len;
-    hs->tag_end = file->data;
-#endif /* LWIP_HTTPD_SSI */
-    hs->handle = file;
-    hs->file = (char*)file->data;
-    LWIP_ASSERT("File length must be positive!", (file->len >= 0));
-    hs->left = file->len;
-    hs->retries = 0;
-#if LWIP_HTTPD_TIMING
-    hs->time_started = sys_now();
-#endif /* LWIP_HTTPD_TIMING */
-#if !LWIP_HTTPD_DYNAMIC_HEADERS
-    LWIP_ASSERT("HTTP headers not included in file system", hs->handle->http_header_included);
-#endif /* !LWIP_HTTPD_DYNAMIC_HEADERS */
-#if LWIP_HTTPD_SUPPORT_V09
-    if (hs->handle->http_header_included && is_09) {
-      /* HTTP/0.9 responses are sent without HTTP header,
-         search for the end of the header. */
-      char *file_start = strnstr(hs->file, CRLF CRLF, hs->left);
-      if (file_start != NULL) {
-        size_t diff = file_start + 4 - hs->file;
-        hs->file += diff;
-        hs->left -= (u32_t)diff;
-      }
-    }
-#endif /* LWIP_HTTPD_SUPPORT_V09*/
-  } else {
-    hs->handle = NULL;
-    hs->file = NULL;
-    hs->left = 0;
-    hs->retries = 0;
-  }
-#if LWIP_HTTPD_DYNAMIC_HEADERS
-    /* Determine the HTTP headers to send based on the file extension of
-   * the requested URI. */
-  if ((hs->handle == NULL) || !hs->handle->http_header_included) {
-    get_http_headers(hs, (char*)uri);
-  }
-#else /* LWIP_HTTPD_DYNAMIC_HEADERS */
-  LWIP_UNUSED_ARG(uri);
-#endif /* LWIP_HTTPD_DYNAMIC_HEADERS */
-  return ERR_OK;
-}
-
-/**
- * The pcb had an error and is already deallocated.
- * The argument might still be valid (if != NULL).
- */
-static void
-http_err(void *arg, err_t err)
-{
-  struct http_state *hs = (struct http_state *)arg;
-  LWIP_UNUSED_ARG(err);
-
-  LWIP_DEBUGF(HTTPD_DEBUG, ("http_err: %s", lwip_strerr(err)));
-
-  if (hs != NULL) {
-    http_state_free(hs);
-  }
-}
-
-/**
- * Data has been sent and acknowledged by the remote host.
- * This means that more data can be sent.
- */
-static err_t
-http_sent(void *arg, struct tcp_pcb *pcb, u16_t len)
-{
-  struct http_state *hs = (struct http_state *)arg;
-
-  LWIP_DEBUGF(HTTPD_DEBUG | LWIP_DBG_TRACE, ("http_sent %p\n", (void*)pcb));
-
-  LWIP_UNUSED_ARG(len);
-
-  if (hs == NULL) {
-    return ERR_OK;
-  }
-
-  hs->retries = 0;
-
-  http_send_data(pcb, hs);
-
-  return ERR_OK;
-}
-
-/**
- * The poll function is called every 2nd second.
- * If there has been no data sent (which resets the retries) in 8 seconds, close.
- * If the last portion of a file has not been sent in 2 seconds, close.
- *
- * This could be increased, but we don't want to waste resources for bad connections.
- */
-static err_t
-http_poll(void *arg, struct tcp_pcb *pcb)
-{
-  struct http_state *hs = (struct http_state *)arg;
-  LWIP_DEBUGF(HTTPD_DEBUG | LWIP_DBG_TRACE, ("http_poll: pcb=%p hs=%p pcb_state=%s\n",
-    (void*)pcb, (void*)hs, tcp_debug_state_str(pcb->state)));
-
-  if (hs == NULL) {
-    err_t closed;
-    /* arg is null, close. */
-    LWIP_DEBUGF(HTTPD_DEBUG, ("http_poll: arg is NULL, close\n"));
-    closed = http_close_conn(pcb, hs);
-    LWIP_UNUSED_ARG(closed);
-#if LWIP_HTTPD_ABORT_ON_CLOSE_MEM_ERROR
-    if (closed == ERR_MEM) {
-       tcp_abort(pcb);
-       return ERR_ABRT;
-    }
-#endif /* LWIP_HTTPD_ABORT_ON_CLOSE_MEM_ERROR */
-    return ERR_OK;
-  } else {
-    hs->retries++;
-    if (hs->retries == HTTPD_MAX_RETRIES) {
-      LWIP_DEBUGF(HTTPD_DEBUG, ("http_poll: too many retries, close\n"));
-      http_close_conn(pcb, hs);
-      return ERR_OK;
-    }
-
-    /* If this connection has a file open, try to send some more data. If
-     * it has not yet received a GET request, don't do this since it will
-     * cause the connection to close immediately. */
-    if(hs && (hs->handle)) {
-      LWIP_DEBUGF(HTTPD_DEBUG | LWIP_DBG_TRACE, ("http_poll: try to send more data\n"));
-      if(http_send_data(pcb, hs)) {
-        /* If we wrote anything to be sent, go ahead and send it now. */
-        LWIP_DEBUGF(HTTPD_DEBUG | LWIP_DBG_TRACE, ("tcp_output\n"));
-        tcp_output(pcb);
-      }
-    }
-  }
-
-  return ERR_OK;
-}
-
-/**
- * Data has been received on this pcb.
- * For HTTP 1.0, this should normally only happen once (if the request fits in one packet).
- */
-static err_t
-http_recv(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err)
-{
-  err_t parsed = ERR_ABRT;
-  struct http_state *hs = (struct http_state *)arg;
-  LWIP_DEBUGF(HTTPD_DEBUG | LWIP_DBG_TRACE, ("http_recv: pcb=%p pbuf=%p err=%s\n", (void*)pcb,
-    (void*)p, lwip_strerr(err)));
-
-  if ((err != ERR_OK) || (p == NULL) || (hs == NULL)) {
-    /* error or closed by other side? */
-    if (p != NULL) {
-      /* Inform TCP that we have taken the data. */
-      tcp_recved(pcb, p->tot_len);
-      pbuf_free(p);
-    }
-    if (hs == NULL) {
-      /* this should not happen, only to be robust */
-      LWIP_DEBUGF(HTTPD_DEBUG, ("Error, http_recv: hs is NULL, close\n"));
-    }
-    http_close_conn(pcb, hs);
-    return ERR_OK;
-  }
-
-#if LWIP_HTTPD_SUPPORT_POST && LWIP_HTTPD_POST_MANUAL_WND
-  if (hs->no_auto_wnd) {
-     hs->unrecved_bytes += p->tot_len;
-  } else
-#endif /* LWIP_HTTPD_SUPPORT_POST && LWIP_HTTPD_POST_MANUAL_WND */
-  {
-    /* Inform TCP that we have taken the data. */
-    tcp_recved(pcb, p->tot_len);
-  }
-
-#if LWIP_HTTPD_SUPPORT_POST
-  if (hs->post_content_len_left > 0) {
-    /* reset idle counter when POST data is received */
-    hs->retries = 0;
-    /* this is data for a POST, pass the complete pbuf to the application */
-    http_post_rxpbuf(hs, p);
-    /* pbuf is passed to the application, don't free it! */
-    if (hs->post_content_len_left == 0) {
-      /* all data received, send response or close connection */
-      http_send_data(pcb, hs);
-    }
-    return ERR_OK;
-  } else
-#endif /* LWIP_HTTPD_SUPPORT_POST */
-  {
-    if (hs->handle == NULL) {
-      parsed = http_parse_request(&p, hs, pcb);
-      LWIP_ASSERT("http_parse_request: unexpected return value", parsed == ERR_OK
-        || parsed == ERR_INPROGRESS ||parsed == ERR_ARG || parsed == ERR_USE);
-    } else {
-      LWIP_DEBUGF(HTTPD_DEBUG, ("http_recv: already sending data\n"));
-    }
-#if LWIP_HTTPD_SUPPORT_REQUESTLIST
-    if (parsed != ERR_INPROGRESS) {
-      /* request fully parsed or error */
-      if (hs->req != NULL) {
-        pbuf_free(hs->req);
-        hs->req = NULL;
-      }
-    }
-#else /* LWIP_HTTPD_SUPPORT_REQUESTLIST */
-    if (p != NULL) {
-      /* pbuf not passed to application, free it now */
-      pbuf_free(p);
-    }
-#endif /* LWIP_HTTPD_SUPPORT_REQUESTLIST */
-    if (parsed == ERR_OK) {
-#if LWIP_HTTPD_SUPPORT_POST
-      if (hs->post_content_len_left == 0)
-#endif /* LWIP_HTTPD_SUPPORT_POST */
-      {
-        LWIP_DEBUGF(HTTPD_DEBUG | LWIP_DBG_TRACE, ("http_recv: data %p len %"S32_F"\n", hs->file, hs->left));
-        http_send_data(pcb, hs);
-      }
-    } else if (parsed == ERR_ARG) {
-      /* @todo: close on ERR_USE? */
-      http_close_conn(pcb, hs);
-    }
-  }
-  return ERR_OK;
-}
-
-/**
- * A new incoming connection has been accepted.
- */
-static err_t
-http_accept(void *arg, struct tcp_pcb *pcb, err_t err)
-{
-  struct http_state *hs;
-  struct tcp_pcb_listen *lpcb = (struct tcp_pcb_listen*)arg;
-  LWIP_UNUSED_ARG(err);
-  LWIP_DEBUGF(HTTPD_DEBUG, ("http_accept %p / %p\n", (void*)pcb, arg));
-
-  /* Decrease the listen backlog counter */
-  tcp_accepted(lpcb);
-  /* Set priority */
-  tcp_setprio(pcb, HTTPD_TCP_PRIO);
-
-  /* Allocate memory for the structure that holds the state of the
-     connection - initialized by that function. */
-  hs = http_state_alloc();
-  if (hs == NULL) {
-    LWIP_DEBUGF(HTTPD_DEBUG, ("http_accept: Out of memory, RST\n"));
-    return ERR_MEM;
-  }
-
-  /* Tell TCP that this is the structure we wish to be passed for our
-     callbacks. */
-  tcp_arg(pcb, hs);
-
-  /* Set up the various callback functions */
-  tcp_recv(pcb, http_recv);
-  tcp_err(pcb, http_err);
-  tcp_poll(pcb, http_poll, HTTPD_POLL_INTERVAL);
-  tcp_sent(pcb, http_sent);
-
-  return ERR_OK;
-}
-
-/**
- * Initialize the httpd with the specified local address.
- */
-static void
-httpd_init_addr(ip_addr_t *local_addr)
-{
-  struct tcp_pcb *pcb;
-  err_t err;
-
-  pcb = tcp_new();
-  LWIP_ASSERT("httpd_init: tcp_new failed", pcb != NULL);
-  tcp_setprio(pcb, HTTPD_TCP_PRIO);
-  /* set SOF_REUSEADDR here to explicitly bind httpd to multiple interfaces */
-  err = tcp_bind(pcb, local_addr, HTTPD_SERVER_PORT);
-  LWIP_ASSERT("httpd_init: tcp_bind failed", err == ERR_OK);
-  pcb = tcp_listen(pcb);
-  LWIP_ASSERT("httpd_init: tcp_listen failed", pcb != NULL);
-  /* initialize callback arg and accept callback */
-  tcp_arg(pcb, pcb);
-  tcp_accept(pcb, http_accept);
-}
-
-/**
- * Initialize the httpd: set up a listening PCB and bind it to the defined port
- */
-void
-httpd_init(void)
-{
-#if HTTPD_USE_MEM_POOL
-  LWIP_ASSERT("memp_sizes[MEMP_HTTPD_STATE] >= sizeof(http_state)",
-     memp_sizes[MEMP_HTTPD_STATE] >= sizeof(http_state));
-#endif
-  LWIP_DEBUGF(HTTPD_DEBUG, ("httpd_init\n"));
-
-  httpd_init_addr(IP_ADDR_ANY);
-}
-
-#if LWIP_HTTPD_SSI
-/**
- * Set the SSI handler function.
- *
- * @param ssi_handler the SSI handler function
- * @param tags an array of SSI tag strings to search for in SSI-enabled files
- * @param num_tags number of tags in the 'tags' array
- */
-void
-http_set_ssi_handler(tSSIHandler ssi_handler, const char **tags, int num_tags)
-{
-  LWIP_DEBUGF(HTTPD_DEBUG, ("http_set_ssi_handler\n"));
-
-  LWIP_ASSERT("no ssi_handler given", ssi_handler != NULL);
-  LWIP_ASSERT("no tags given", tags != NULL);
-  LWIP_ASSERT("invalid number of tags", num_tags > 0);
-
-  g_pfnSSIHandler = ssi_handler;
-  g_ppcTags = tags;
-  g_iNumTags = num_tags;
-}
-#endif /* LWIP_HTTPD_SSI */
-
-#if LWIP_HTTPD_CGI
-/**
- * Set an array of CGI filenames/handler functions
- *
- * @param cgis an array of CGI filenames/handler functions
- * @param num_handlers number of elements in the 'cgis' array
- */
-void
-http_set_cgi_handlers(const tCGI *cgis, int num_handlers)
-{
-  LWIP_ASSERT("no cgis given", cgis != NULL);
-  LWIP_ASSERT("invalid number of handlers", num_handlers > 0);
-  
-  g_pCGIs = cgis;
-  g_iNumCGIs = num_handlers;
-}
-#endif /* LWIP_HTTPD_CGI */
-
-#endif /* LWIP_TCP */
diff --git a/FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/httpd.h b/FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/httpd.h
deleted file mode 100644 (file)
index 8c3c03d..0000000
+++ /dev/null
@@ -1,236 +0,0 @@
-/*
- * Copyright (c) 2001-2003 Swedish Institute of Computer Science.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- *    this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- *    this list of conditions and the following disclaimer in the documentation
- *    and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
- * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
- * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
- * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
- * OF SUCH DAMAGE.
- *
- * This file is part of the lwIP TCP/IP stack.
- *
- * Author: Adam Dunkels <adam@sics.se>
- *
- * This version of the file has been modified by Texas Instruments to offer
- * simple server-side-include (SSI) and Common Gateway Interface (CGI)
- * capability.
- */
-
-#ifndef __HTTPD_H__
-#define __HTTPD_H__
-
-#include "lwip/opt.h"
-#include "lwip/err.h"
-#include "lwip/pbuf.h"
-
-
-/** Set this to 1 to support CGI */
-#ifndef LWIP_HTTPD_CGI
-#define LWIP_HTTPD_CGI            0
-#endif
-
-/** Set this to 1 to support SSI (Server-Side-Includes) */
-#ifndef LWIP_HTTPD_SSI
-#define LWIP_HTTPD_SSI            1     
-#endif
-
-/** Set this to 1 to support HTTP POST */
-#ifndef LWIP_HTTPD_SUPPORT_POST
-#define LWIP_HTTPD_SUPPORT_POST   0
-#endif
-
-
-#if LWIP_HTTPD_CGI
-
-/*
- * Function pointer for a CGI script handler.
- *
- * This function is called each time the HTTPD server is asked for a file
- * whose name was previously registered as a CGI function using a call to
- * http_set_cgi_handler. The iIndex parameter provides the index of the
- * CGI within the ppcURLs array passed to http_set_cgi_handler. Parameters
- * pcParam and pcValue provide access to the parameters provided along with
- * the URI. iNumParams provides a count of the entries in the pcParam and
- * pcValue arrays. Each entry in the pcParam array contains the name of a
- * parameter with the corresponding entry in the pcValue array containing the
- * value for that parameter. Note that pcParam may contain multiple elements
- * with the same name if, for example, a multi-selection list control is used
- * in the form generating the data.
- *
- * The function should return a pointer to a character string which is the
- * path and filename of the response that is to be sent to the connected
- * browser, for example "/thanks.htm" or "/response/error.ssi".
- *
- * The maximum number of parameters that will be passed to this function via
- * iNumParams is defined by LWIP_HTTPD_MAX_CGI_PARAMETERS. Any parameters in the incoming
- * HTTP request above this number will be discarded.
- *
- * Requests intended for use by this CGI mechanism must be sent using the GET
- * method (which encodes all parameters within the URI rather than in a block
- * later in the request). Attempts to use the POST method will result in the
- * request being ignored.
- *
- */
-typedef const char *(*tCGIHandler)(int iIndex, int iNumParams, char *pcParam[],
-                             char *pcValue[]);
-
-/*
- * Structure defining the base filename (URL) of a CGI and the associated
- * function which is to be called when that URL is requested.
- */
-typedef struct
-{
-    const char *pcCGIName;
-    tCGIHandler pfnCGIHandler;
-} tCGI;
-
-void http_set_cgi_handlers(const tCGI *pCGIs, int iNumHandlers);
-
-
-/* The maximum number of parameters that the CGI handler can be sent. */
-#ifndef LWIP_HTTPD_MAX_CGI_PARAMETERS
-#define LWIP_HTTPD_MAX_CGI_PARAMETERS 16
-#endif
-
-#endif /* LWIP_HTTPD_CGI */
-
-#if LWIP_HTTPD_SSI
-
-/** LWIP_HTTPD_SSI_MULTIPART==1: SSI handler function is called with 2 more
- * arguments indicating a counter for insert string that are too long to be
- * inserted at once: the SSI handler function must then set 'next_tag_part'
- * which will be passed back to it in the next call. */
-#ifndef LWIP_HTTPD_SSI_MULTIPART
-#define LWIP_HTTPD_SSI_MULTIPART    0
-#endif
-
-/*
- * Function pointer for the SSI tag handler callback.
- *
- * This function will be called each time the HTTPD server detects a tag of the
- * form <!--#name--> in a .shtml, .ssi or .shtm file where "name" appears as
- * one of the tags supplied to http_set_ssi_handler in the ppcTags array.  The
- * returned insert string, which will be appended after the the string
- * "<!--#name-->" in file sent back to the client,should be written to pointer
- * pcInsert.  iInsertLen contains the size of the buffer pointed to by
- * pcInsert.  The iIndex parameter provides the zero-based index of the tag as
- * found in the ppcTags array and identifies the tag that is to be processed.
- *
- * The handler returns the number of characters written to pcInsert excluding
- * any terminating NULL or a negative number to indicate a failure (tag not
- * recognized, for example).
- *
- * Note that the behavior of this SSI mechanism is somewhat different from the
- * "normal" SSI processing as found in, for example, the Apache web server.  In
- * this case, the inserted text is appended following the SSI tag rather than
- * replacing the tag entirely.  This allows for an implementation that does not
- * require significant additional buffering of output data yet which will still
- * offer usable SSI functionality.  One downside to this approach is when
- * attempting to use SSI within JavaScript.  The SSI tag is structured to
- * resemble an HTML comment but this syntax does not constitute a comment
- * within JavaScript and, hence, leaving the tag in place will result in
- * problems in these cases.  To work around this, any SSI tag which needs to
- * output JavaScript code must do so in an encapsulated way, sending the whole
- * HTML <script>...</script> section as a single include.
- */
-typedef u16_t (*tSSIHandler)(int iIndex, char *pcInsert, int iInsertLen
-#if LWIP_HTTPD_SSI_MULTIPART
-                             , u16_t current_tag_part, u16_t *next_tag_part
-#endif /* LWIP_HTTPD_SSI_MULTIPART */
-#if LWIP_HTTPD_FILE_STATE
-                             , void *connection_state
-#endif /* LWIP_HTTPD_FILE_STATE */
-                             );
-
-void http_set_ssi_handler(tSSIHandler pfnSSIHandler,
-                          const char **ppcTags, int iNumTags);
-
-/* The maximum length of the string comprising the tag name */
-#ifndef LWIP_HTTPD_MAX_TAG_NAME_LEN
-#define LWIP_HTTPD_MAX_TAG_NAME_LEN 8
-#endif
-
-/* The maximum length of string that can be returned to replace any given tag */
-#ifndef LWIP_HTTPD_MAX_TAG_INSERT_LEN
-#define LWIP_HTTPD_MAX_TAG_INSERT_LEN 192
-#endif
-
-#endif /* LWIP_HTTPD_SSI */
-
-#if LWIP_HTTPD_SUPPORT_POST
-
-/* These functions must be implemented by the application */
-
-/** Called when a POST request has been received. The application can decide
- * whether to accept it or not.
- *
- * @param connection Unique connection identifier, valid until httpd_post_end
- *        is called.
- * @param uri The HTTP header URI receiving the POST request.
- * @param http_request The raw HTTP request (the first packet, normally).
- * @param http_request_len Size of 'http_request'.
- * @param content_len Content-Length from HTTP header.
- * @param response_uri Filename of response file, to be filled when denying the
- *        request
- * @param response_uri_len Size of the 'response_uri' buffer.
- * @param post_auto_wnd Set this to 0 to let the callback code handle window
- *        updates by calling 'httpd_post_data_recved' (to throttle rx speed)
- *        default is 1 (httpd handles window updates automatically)
- * @return ERR_OK: Accept the POST request, data may be passed in
- *         another err_t: Deny the POST request, send back 'bad request'.
- */
-err_t httpd_post_begin(void *connection, const char *uri, const char *http_request,
-                       u16_t http_request_len, int content_len, char *response_uri,
-                       u16_t response_uri_len, u8_t *post_auto_wnd);
-
-/** Called for each pbuf of data that has been received for a POST.
- * ATTENTION: The application is responsible for freeing the pbufs passed in!
- *
- * @param connection Unique connection identifier.
- * @param p Received data.
- * @return ERR_OK: Data accepted.
- *         another err_t: Data denied, http_post_get_response_uri will be called.
- */
-err_t httpd_post_receive_data(void *connection, struct pbuf *p);
-
-/** Called when all data is received or when the connection is closed.
- * The application must return the filename/URI of a file to send in response
- * to this POST request. If the response_uri buffer is untouched, a 404
- * response is returned.
- *
- * @param connection Unique connection identifier.
- * @param response_uri Filename of response file, to be filled when denying the request
- * @param response_uri_len Size of the 'response_uri' buffer.
- */
-void httpd_post_finished(void *connection, char *response_uri, u16_t response_uri_len);
-
-#ifndef LWIP_HTTPD_POST_MANUAL_WND
-#define LWIP_HTTPD_POST_MANUAL_WND  0
-#endif
-
-#if LWIP_HTTPD_POST_MANUAL_WND
-void httpd_post_data_recved(void *connection, u16_t recved_len);
-#endif /* LWIP_HTTPD_POST_MANUAL_WND */
-
-#endif /* LWIP_HTTPD_SUPPORT_POST */
-
-void httpd_init(void);
-
-#endif /* __HTTPD_H__ */
diff --git a/FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/httpd_structs.h b/FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/httpd_structs.h
deleted file mode 100644 (file)
index 1080a55..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-#ifndef __HTTPD_STRUCTS_H__
-#define __HTTPD_STRUCTS_H__
-
-#include "httpd.h"
-
-/** This string is passed in the HTTP header as "Server: " */
-#ifndef HTTPD_SERVER_AGENT
-#define HTTPD_SERVER_AGENT "lwIP/1.3.1 (http://savannah.nongnu.org/projects/lwip)"
-#endif
-
-/** Set this to 1 if you want to include code that creates HTTP headers
- * at runtime. Default is off: HTTP headers are then created statically
- * by the makefsdata tool. Static headers mean smaller code size, but
- * the (readonly) fsdata will grow a bit as every file includes the HTTP
- * header. */
-#ifndef LWIP_HTTPD_DYNAMIC_HEADERS
-#define LWIP_HTTPD_DYNAMIC_HEADERS 0
-#endif
-
-
-#if LWIP_HTTPD_DYNAMIC_HEADERS
-/** This struct is used for a list of HTTP header strings for various
- * filename extensions. */
-typedef struct
-{
-  const char *extension;
-  int headerIndex;
-} tHTTPHeader;
-
-/** A list of strings used in HTTP headers */
-static const char * const g_psHTTPHeaderStrings[] =
-{
- "Content-type: text/html\r\n\r\n",
- "Content-type: text/html\r\nExpires: Fri, 10 Apr 2008 14:00:00 GMT\r\nPragma: no-cache\r\n\r\n",
- "Content-type: image/gif\r\n\r\n",
- "Content-type: image/png\r\n\r\n",
- "Content-type: image/jpeg\r\n\r\n",
- "Content-type: image/bmp\r\n\r\n",
- "Content-type: image/x-icon\r\n\r\n",
- "Content-type: application/octet-stream\r\n\r\n",
- "Content-type: application/x-javascript\r\n\r\n",
- "Content-type: application/x-javascript\r\n\r\n",
- "Content-type: text/css\r\n\r\n",
- "Content-type: application/x-shockwave-flash\r\n\r\n",
- "Content-type: text/xml\r\n\r\n",
- "Content-type: text/plain\r\n\r\n",
- "HTTP/1.0 200 OK\r\n",
- "HTTP/1.0 404 File not found\r\n",
- "HTTP/1.0 400 Bad Request\r\n",
- "HTTP/1.0 501 Not Implemented\r\n",
- "HTTP/1.1 200 OK\r\n",
- "HTTP/1.1 404 File not found\r\n",
- "HTTP/1.1 400 Bad Request\r\n",
- "HTTP/1.1 501 Not Implemented\r\n",
- "Content-Length: ",
- "Connection: Close\r\n",
- "Server: "HTTPD_SERVER_AGENT"\r\n",
- "\r\n<html><body><h2>404: The requested file cannot be found.</h2></body></html>\r\n"
-};
-
-/* Indexes into the g_psHTTPHeaderStrings array */
-#define HTTP_HDR_HTML           0  /* text/html */
-#define HTTP_HDR_SSI            1  /* text/html Expires... */
-#define HTTP_HDR_GIF            2  /* image/gif */
-#define HTTP_HDR_PNG            3  /* image/png */
-#define HTTP_HDR_JPG            4  /* image/jpeg */
-#define HTTP_HDR_BMP            5  /* image/bmp */
-#define HTTP_HDR_ICO            6  /* image/x-icon */
-#define HTTP_HDR_APP            7  /* application/octet-stream */
-#define HTTP_HDR_JS             8  /* application/x-javascript */
-#define HTTP_HDR_RA             9  /* application/x-javascript */
-#define HTTP_HDR_CSS            10 /* text/css */
-#define HTTP_HDR_SWF            11 /* application/x-shockwave-flash */
-#define HTTP_HDR_XML            12 /* text/xml */
-#define HTTP_HDR_DEFAULT_TYPE   13 /* text/plain */
-#define HTTP_HDR_OK             14 /* 200 OK */
-#define HTTP_HDR_NOT_FOUND      15 /* 404 File not found */
-#define HTTP_HDR_BAD_REQUEST    16 /* 400 Bad request */
-#define HTTP_HDR_NOT_IMPL       17 /* 501 Not Implemented */
-#define HTTP_HDR_OK_11          18 /* 200 OK */
-#define HTTP_HDR_NOT_FOUND_11   19 /* 404 File not found */
-#define HTTP_HDR_BAD_REQUEST_11 20 /* 400 Bad request */
-#define HTTP_HDR_NOT_IMPL_11    21 /* 501 Not Implemented */
-#define HTTP_HDR_CONTENT_LENGTH 22 /* Content-Length: (HTTP 1.1)*/
-#define HTTP_HDR_CONN_CLOSE     23 /* Connection: Close (HTTP 1.1) */
-#define HTTP_HDR_SERVER         24 /* Server: HTTPD_SERVER_AGENT */
-#define DEFAULT_404_HTML        25 /* default 404 body */
-
-/** A list of extension-to-HTTP header strings */
-const static tHTTPHeader g_psHTTPHeaders[] =
-{
- { "html", HTTP_HDR_HTML},
- { "htm",  HTTP_HDR_HTML},
- { "shtml",HTTP_HDR_SSI},
- { "shtm", HTTP_HDR_SSI},
- { "ssi",  HTTP_HDR_SSI},
- { "gif",  HTTP_HDR_GIF},
- { "png",  HTTP_HDR_PNG},
- { "jpg",  HTTP_HDR_JPG},
- { "bmp",  HTTP_HDR_BMP},
- { "ico",  HTTP_HDR_ICO},
- { "class",HTTP_HDR_APP},
- { "cls",  HTTP_HDR_APP},
- { "js",   HTTP_HDR_JS},
- { "ram",  HTTP_HDR_RA},
- { "css",  HTTP_HDR_CSS},
- { "swf",  HTTP_HDR_SWF},
- { "xml",  HTTP_HDR_XML}
-};
-
-#define NUM_HTTP_HEADERS (sizeof(g_psHTTPHeaders) / sizeof(tHTTPHeader))
-
-#endif /* LWIP_HTTPD_DYNAMIC_HEADERS */
-
-#endif /* __HTTPD_STRUCTS_H__ */
diff --git a/FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/makefsdata/MakeFSData_proj.sln b/FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/makefsdata/MakeFSData_proj.sln
deleted file mode 100644 (file)
index df961bb..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-\r
-Microsoft Visual Studio Solution File, Format Version 11.00\r
-# Visual C++ Express 2010\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MakeFSData_proj", "MakeFSData_proj.vcxproj", "{31A9131E-BD1E-4F2D-8E1F-BC8E679E0368}"\r
-EndProject\r
-Global\r
-       GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
-               Debug|Win32 = Debug|Win32\r
-               Release|Win32 = Release|Win32\r
-       EndGlobalSection\r
-       GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
-               {31A9131E-BD1E-4F2D-8E1F-BC8E679E0368}.Debug|Win32.ActiveCfg = Debug|Win32\r
-               {31A9131E-BD1E-4F2D-8E1F-BC8E679E0368}.Debug|Win32.Build.0 = Debug|Win32\r
-               {31A9131E-BD1E-4F2D-8E1F-BC8E679E0368}.Release|Win32.ActiveCfg = Release|Win32\r
-               {31A9131E-BD1E-4F2D-8E1F-BC8E679E0368}.Release|Win32.Build.0 = Release|Win32\r
-       EndGlobalSection\r
-       GlobalSection(SolutionProperties) = preSolution\r
-               HideSolutionNode = FALSE\r
-       EndGlobalSection\r
-EndGlobal\r
diff --git a/FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/makefsdata/MakeFSData_proj.suo b/FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/makefsdata/MakeFSData_proj.suo
deleted file mode 100644 (file)
index 3b44ee3..0000000
Binary files a/FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/makefsdata/MakeFSData_proj.suo and /dev/null differ
diff --git a/FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/makefsdata/MakeFSData_proj.vcxproj b/FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/makefsdata/MakeFSData_proj.vcxproj
deleted file mode 100644 (file)
index 06914a7..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup Label="ProjectConfigurations">\r
-    <ProjectConfiguration Include="Debug|Win32">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|Win32">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-  </ItemGroup>\r
-  <PropertyGroup Label="Globals">\r
-    <ProjectGuid>{31A9131E-BD1E-4F2D-8E1F-BC8E679E0368}</ProjectGuid>\r
-    <Keyword>Win32Proj</Keyword>\r
-    <RootNamespace>MakeFSData_proj</RootNamespace>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <UseDebugLibraries>true</UseDebugLibraries>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>Application</ConfigurationType>\r
-    <UseDebugLibraries>false</UseDebugLibraries>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <CharacterSet>Unicode</CharacterSet>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
-  <ImportGroup Label="ExtensionSettings">\r
-  </ImportGroup>\r
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-  </ImportGroup>\r
-  <PropertyGroup Label="UserMacros" />\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
-    <LinkIncremental>true</LinkIncremental>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
-    <LinkIncremental>false</LinkIncremental>\r
-  </PropertyGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
-    <ClCompile>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <Optimization>Disabled</Optimization>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <AdditionalIncludeDirectories>$(LWIP_DIR)\src\include;$(LWIP_DIR)\..\contrib-1.4.0\ports\win32\include;$(LWIP_DIR)\src\include\ipv4</AdditionalIncludeDirectories>\r
-    </ClCompile>\r
-    <Link>\r
-      <SubSystem>Console</SubSystem>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
-    <ClCompile>\r
-      <WarningLevel>Level3</WarningLevel>\r
-      <PrecompiledHeader>\r
-      </PrecompiledHeader>\r
-      <Optimization>MaxSpeed</Optimization>\r
-      <FunctionLevelLinking>true</FunctionLevelLinking>\r
-      <IntrinsicFunctions>true</IntrinsicFunctions>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-    </ClCompile>\r
-    <Link>\r
-      <SubSystem>Console</SubSystem>\r
-      <GenerateDebugInformation>true</GenerateDebugInformation>\r
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
-      <OptimizeReferences>true</OptimizeReferences>\r
-    </Link>\r
-  </ItemDefinitionGroup>\r
-  <ItemGroup>\r
-    <None Include="ReadMe.txt" />\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="stdafx.h" />\r
-    <ClInclude Include="targetver.h" />\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="makefsdata.c" />\r
-    <ClCompile Include="stdafx.cpp" />\r
-  </ItemGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
-  <ImportGroup Label="ExtensionTargets">\r
-  </ImportGroup>\r
-</Project>
\ No newline at end of file
diff --git a/FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/makefsdata/MakeFSData_proj.vcxproj.filters b/FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/makefsdata/MakeFSData_proj.vcxproj.filters
deleted file mode 100644 (file)
index c88c739..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup>\r
-    <Filter Include="Source Files">\r
-      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>\r
-      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>\r
-    </Filter>\r
-    <Filter Include="Header Files">\r
-      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>\r
-      <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>\r
-    </Filter>\r
-    <Filter Include="Resource Files">\r
-      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>\r
-      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>\r
-    </Filter>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <None Include="ReadMe.txt" />\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="stdafx.h">\r
-      <Filter>Header Files</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="targetver.h">\r
-      <Filter>Header Files</Filter>\r
-    </ClInclude>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="stdafx.cpp">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="makefsdata.c">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
-  </ItemGroup>\r
-</Project>
\ No newline at end of file
diff --git a/FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/makefsdata/MakeFSData_proj.vcxproj.user b/FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/makefsdata/MakeFSData_proj.vcxproj.user
deleted file mode 100644 (file)
index 695b5c7..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-</Project>
\ No newline at end of file
diff --git a/FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/makefsdata/fs/404.html b/FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/makefsdata/fs/404.html
deleted file mode 100644 (file)
index 40b343a..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-<html>
-<head><title>lwIP - A Lightweight TCP/IP Stack</title></head>
-<body bgcolor="white" text="black">
-
-    <table width="100%">
-      <tr valign="top"><td width="80">   
-         <a href="http://www.sics.se/"><img src="/img/sics.gif"
-         border="0" alt="SICS logo" title="SICS logo"></a>
-       </td><td width="500">     
-         <h1>lwIP - A Lightweight TCP/IP Stack</h1>
-         <h2>404 - Page not found</h2>
-         <p>
-           Sorry, the page you are requesting was not found on this
-           server. 
-         </p>
-       </td><td>
-         &nbsp;
-       </td></tr>
-      </table>
-</body>
-</html>
diff --git a/FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/makefsdata/fs/index.shtml b/FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/makefsdata/fs/index.shtml
deleted file mode 100644 (file)
index 90358d1..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
-<html>\r
-  <head>\r
-    <title>FreeRTOS.org lwIP WEB server demo</title>\r
-  </head>\r
-  <BODY onLoad="window.setTimeout(&quot;location.href='index.shtml'&quot;,2000)">\r
-<font face="arial">\r
-<a href="index.shtml">Task Stats</a> <b>|</b> <a href="runtime.shtml">Run Time Stats</a> <b>|</b> <a href="http://www.freertos.org/">FreeRTOS Homepage</a> <b>|</b> <a href="logo.jpg">37K jpg</a>\r
-<br><p>\r
-<hr>\r
-<br><p>\r
-<h2>Task statistics</h2>\r
-Page will refresh every 2 seconds.<p>\r
-<font face="courier"><pre>Task          State  Priority  Stack #<br>************************************************<br>\r
-<!--#rtos_stats-->\r
-</pre></font>\r
-</font>\r
-</body>\r
-</html>\r
-\r
diff --git a/FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/makefsdata/fs/runtime.shtml b/FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/makefsdata/fs/runtime.shtml
deleted file mode 100644 (file)
index e66202b..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
-<html>\r
-  <head>\r
-    <title>FreeRTOS.org lwIP WEB server demo</title>\r
-  </head>\r
-  <BODY onLoad="window.setTimeout(&quot;location.href='runtime.shtml'&quot;,2000)">\r
-<font face="arial">\r
-<a href="index.shtml">Task Stats</a> <b>|</b> <a href="runtime.shtml">Run Time Stats</a> <b>|</b> <a href="http://www.freertos.org/">FreeRTOS Homepage</a> <b>|</b> <a href="logo.jpg">37K jpg</a>\r
-<br><p>\r
-<hr>\r
-<br><p>\r
-<h2>Run-time statistics</h2>\r
-Page will refresh every 2 seconds.<p>\r
-<font face="courier"><pre>Task            Abs Time      % Time<br>****************************************<br>\r
-<!--#run_stats-->\r\r
-</pre></font>\r
-</font>\r
-</body>\r
-</html>\r
-\r
diff --git a/FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/makefsdata/fsdata.c b/FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/makefsdata/fsdata.c
deleted file mode 100644 (file)
index f2ddfd9..0000000
+++ /dev/null
@@ -1,2068 +0,0 @@
-#include "fs.h"\r
-#include "lwip/def.h"\r
-#include "fsdata.h"\r
-\r
-\r
-#define file_NULL (struct fsdata_file *) NULL\r
-\r
-\r
-static const unsigned int dummy_align__404_html = 0;\r
-static const unsigned char data__404_html[] = {\r
-/* /404.html (10 chars) */\r
-0x2f,0x34,0x30,0x34,0x2e,0x68,0x74,0x6d,0x6c,0x00,0x00,0x00,\r
-\r
-/* HTTP header */\r
-/* "HTTP/1.0 404 File not found\r
-" (29 bytes) */\r
-0x48,0x54,0x54,0x50,0x2f,0x31,0x2e,0x30,0x20,0x34,0x30,0x34,0x20,0x46,0x69,0x6c,\r
-0x65,0x20,0x6e,0x6f,0x74,0x20,0x66,0x6f,0x75,0x6e,0x64,0x0d,0x0a,\r
-/* "Server: lwIP/1.3.1 (http://savannah.nongnu.org/projects/lwip)\r
-" (63 bytes) */\r
-0x53,0x65,0x72,0x76,0x65,0x72,0x3a,0x20,0x6c,0x77,0x49,0x50,0x2f,0x31,0x2e,0x33,\r
-0x2e,0x31,0x20,0x28,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x73,0x61,0x76,0x61,0x6e,\r
-0x6e,0x61,0x68,0x2e,0x6e,0x6f,0x6e,0x67,0x6e,0x75,0x2e,0x6f,0x72,0x67,0x2f,0x70,\r
-0x72,0x6f,0x6a,0x65,0x63,0x74,0x73,0x2f,0x6c,0x77,0x69,0x70,0x29,0x0d,0x0a,\r
-/* "Content-type: text/html\r
-\r
-" (27 bytes) */\r
-0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x74,0x79,0x70,0x65,0x3a,0x20,0x74,0x65,\r
-0x78,0x74,0x2f,0x68,0x74,0x6d,0x6c,0x0d,0x0a,0x0d,0x0a,\r
-/* raw file data (544 bytes) */\r
-0x3c,0x68,0x74,0x6d,0x6c,0x3e,0x0a,0x3c,0x68,0x65,0x61,0x64,0x3e,0x3c,0x74,0x69,\r
-0x74,0x6c,0x65,0x3e,0x6c,0x77,0x49,0x50,0x20,0x2d,0x20,0x41,0x20,0x4c,0x69,0x67,\r
-0x68,0x74,0x77,0x65,0x69,0x67,0x68,0x74,0x20,0x54,0x43,0x50,0x2f,0x49,0x50,0x20,\r
-0x53,0x74,0x61,0x63,0x6b,0x3c,0x2f,0x74,0x69,0x74,0x6c,0x65,0x3e,0x3c,0x2f,0x68,\r
-0x65,0x61,0x64,0x3e,0x0a,0x3c,0x62,0x6f,0x64,0x79,0x20,0x62,0x67,0x63,0x6f,0x6c,\r
-0x6f,0x72,0x3d,0x22,0x77,0x68,0x69,0x74,0x65,0x22,0x20,0x74,0x65,0x78,0x74,0x3d,\r
-0x22,0x62,0x6c,0x61,0x63,0x6b,0x22,0x3e,0x0a,0x0a,0x20,0x20,0x20,0x20,0x3c,0x74,\r
-0x61,0x62,0x6c,0x65,0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x31,0x30,0x30,0x25,\r
-0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x74,0x72,0x20,0x76,0x61,0x6c,\r
-0x69,0x67,0x6e,0x3d,0x22,0x74,0x6f,0x70,0x22,0x3e,0x3c,0x74,0x64,0x20,0x77,0x69,\r
-0x64,0x74,0x68,0x3d,0x22,0x38,0x30,0x22,0x3e,0x09,0x20,0x20,0x0a,0x09,0x20,0x20,\r
-0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,\r
-0x77,0x77,0x77,0x2e,0x73,0x69,0x63,0x73,0x2e,0x73,0x65,0x2f,0x22,0x3e,0x3c,0x69,\r
-0x6d,0x67,0x20,0x73,0x72,0x63,0x3d,0x22,0x2f,0x69,0x6d,0x67,0x2f,0x73,0x69,0x63,\r
-0x73,0x2e,0x67,0x69,0x66,0x22,0x0a,0x09,0x20,0x20,0x62,0x6f,0x72,0x64,0x65,0x72,\r
-0x3d,0x22,0x30,0x22,0x20,0x61,0x6c,0x74,0x3d,0x22,0x53,0x49,0x43,0x53,0x20,0x6c,\r
-0x6f,0x67,0x6f,0x22,0x20,0x74,0x69,0x74,0x6c,0x65,0x3d,0x22,0x53,0x49,0x43,0x53,\r
-0x20,0x6c,0x6f,0x67,0x6f,0x22,0x3e,0x3c,0x2f,0x61,0x3e,0x0a,0x09,0x3c,0x2f,0x74,\r
-0x64,0x3e,0x3c,0x74,0x64,0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x35,0x30,0x30,\r
-0x22,0x3e,0x09,0x20,0x20,0x0a,0x09,0x20,0x20,0x3c,0x68,0x31,0x3e,0x6c,0x77,0x49,\r
-0x50,0x20,0x2d,0x20,0x41,0x20,0x4c,0x69,0x67,0x68,0x74,0x77,0x65,0x69,0x67,0x68,\r
-0x74,0x20,0x54,0x43,0x50,0x2f,0x49,0x50,0x20,0x53,0x74,0x61,0x63,0x6b,0x3c,0x2f,\r
-0x68,0x31,0x3e,0x0a,0x09,0x20,0x20,0x3c,0x68,0x32,0x3e,0x34,0x30,0x34,0x20,0x2d,\r
-0x20,0x50,0x61,0x67,0x65,0x20,0x6e,0x6f,0x74,0x20,0x66,0x6f,0x75,0x6e,0x64,0x3c,\r
-0x2f,0x68,0x32,0x3e,0x0a,0x09,0x20,0x20,0x3c,0x70,0x3e,0x0a,0x09,0x20,0x20,0x20,\r
-0x20,0x53,0x6f,0x72,0x72,0x79,0x2c,0x20,0x74,0x68,0x65,0x20,0x70,0x61,0x67,0x65,\r
-0x20,0x79,0x6f,0x75,0x20,0x61,0x72,0x65,0x20,0x72,0x65,0x71,0x75,0x65,0x73,0x74,\r
-0x69,0x6e,0x67,0x20,0x77,0x61,0x73,0x20,0x6e,0x6f,0x74,0x20,0x66,0x6f,0x75,0x6e,\r
-0x64,0x20,0x6f,0x6e,0x20,0x74,0x68,0x69,0x73,0x0a,0x09,0x20,0x20,0x20,0x20,0x73,\r
-0x65,0x72,0x76,0x65,0x72,0x2e,0x20,0x0a,0x09,0x20,0x20,0x3c,0x2f,0x70,0x3e,0x0a,\r
-0x09,0x3c,0x2f,0x74,0x64,0x3e,0x3c,0x74,0x64,0x3e,0x0a,0x09,0x20,0x20,0x26,0x6e,\r
-0x62,0x73,0x70,0x3b,0x0a,0x09,0x3c,0x2f,0x74,0x64,0x3e,0x3c,0x2f,0x74,0x72,0x3e,\r
-0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x74,0x61,0x62,0x6c,0x65,0x3e,0x0a,\r
-0x3c,0x2f,0x62,0x6f,0x64,0x79,0x3e,0x0a,0x3c,0x2f,0x68,0x74,0x6d,0x6c,0x3e,0x0a,\r
-};\r
-\r
-static const unsigned int dummy_align__index_shtml = 1;\r
-static const unsigned char data__index_shtml[] = {\r
-/* /index.shtml (13 chars) */\r
-0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x73,0x68,0x74,0x6d,0x6c,0x00,0x00,0x00,0x00,\r
-\r
-/* HTTP header */\r
-/* "HTTP/1.0 200 OK\r
-" (17 bytes) */\r
-0x48,0x54,0x54,0x50,0x2f,0x31,0x2e,0x30,0x20,0x32,0x30,0x30,0x20,0x4f,0x4b,0x0d,\r
-0x0a,\r
-/* "Server: lwIP/1.3.1 (http://savannah.nongnu.org/projects/lwip)\r
-" (63 bytes) */\r
-0x53,0x65,0x72,0x76,0x65,0x72,0x3a,0x20,0x6c,0x77,0x49,0x50,0x2f,0x31,0x2e,0x33,\r
-0x2e,0x31,0x20,0x28,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x73,0x61,0x76,0x61,0x6e,\r
-0x6e,0x61,0x68,0x2e,0x6e,0x6f,0x6e,0x67,0x6e,0x75,0x2e,0x6f,0x72,0x67,0x2f,0x70,\r
-0x72,0x6f,0x6a,0x65,0x63,0x74,0x73,0x2f,0x6c,0x77,0x69,0x70,0x29,0x0d,0x0a,\r
-/* "Content-type: text/html\r
-Expires: Fri, 10 Apr 2008 14:00:00 GMT\r
-Pragma: no-cache\r
-\r
-" (85 bytes) */\r
-0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x74,0x79,0x70,0x65,0x3a,0x20,0x74,0x65,\r
-0x78,0x74,0x2f,0x68,0x74,0x6d,0x6c,0x0d,0x0a,0x45,0x78,0x70,0x69,0x72,0x65,0x73,\r
-0x3a,0x20,0x46,0x72,0x69,0x2c,0x20,0x31,0x30,0x20,0x41,0x70,0x72,0x20,0x32,0x30,\r
-0x30,0x38,0x20,0x31,0x34,0x3a,0x30,0x30,0x3a,0x30,0x30,0x20,0x47,0x4d,0x54,0x0d,\r
-0x0a,0x50,0x72,0x61,0x67,0x6d,0x61,0x3a,0x20,0x6e,0x6f,0x2d,0x63,0x61,0x63,0x68,\r
-0x65,0x0d,0x0a,0x0d,0x0a,\r
-/* raw file data (762 bytes) */\r
-0x3c,0x21,0x44,0x4f,0x43,0x54,0x59,0x50,0x45,0x20,0x48,0x54,0x4d,0x4c,0x20,0x50,\r
-0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,\r
-0x54,0x44,0x20,0x48,0x54,0x4d,0x4c,0x20,0x34,0x2e,0x30,0x31,0x20,0x54,0x72,0x61,\r
-0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x61,0x6c,0x2f,0x2f,0x45,0x4e,0x22,0x20,0x22,\r
-0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,\r
-0x67,0x2f,0x54,0x52,0x2f,0x68,0x74,0x6d,0x6c,0x34,0x2f,0x6c,0x6f,0x6f,0x73,0x65,\r
-0x2e,0x64,0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x68,0x74,0x6d,0x6c,0x3e,0x0d,0x0a,\r
-0x20,0x20,0x3c,0x68,0x65,0x61,0x64,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x74,\r
-0x69,0x74,0x6c,0x65,0x3e,0x46,0x72,0x65,0x65,0x52,0x54,0x4f,0x53,0x2e,0x6f,0x72,\r
-0x67,0x20,0x6c,0x77,0x49,0x50,0x20,0x57,0x45,0x42,0x20,0x73,0x65,0x72,0x76,0x65,\r
-0x72,0x20,0x64,0x65,0x6d,0x6f,0x3c,0x2f,0x74,0x69,0x74,0x6c,0x65,0x3e,0x0d,0x0a,\r
-0x20,0x20,0x3c,0x2f,0x68,0x65,0x61,0x64,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x42,0x4f,\r
-0x44,0x59,0x20,0x6f,0x6e,0x4c,0x6f,0x61,0x64,0x3d,0x22,0x77,0x69,0x6e,0x64,0x6f,\r
-0x77,0x2e,0x73,0x65,0x74,0x54,0x69,0x6d,0x65,0x6f,0x75,0x74,0x28,0x26,0x71,0x75,\r
-0x6f,0x74,0x3b,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x2e,0x68,0x72,0x65,0x66,\r
-0x3d,0x27,0x69,0x6e,0x64,0x65,0x78,0x2e,0x73,0x68,0x74,0x6d,0x6c,0x27,0x26,0x71,\r
-0x75,0x6f,0x74,0x3b,0x2c,0x32,0x30,0x30,0x30,0x29,0x22,0x3e,0x0d,0x0a,0x3c,0x66,\r
-0x6f,0x6e,0x74,0x20,0x66,0x61,0x63,0x65,0x3d,0x22,0x61,0x72,0x69,0x61,0x6c,0x22,\r
-0x3e,0x0d,0x0a,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x69,0x6e,0x64,0x65,\r
-0x78,0x2e,0x73,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x54,0x61,0x73,0x6b,0x20,0x53,0x74,\r
-0x61,0x74,0x73,0x3c,0x2f,0x61,0x3e,0x20,0x3c,0x62,0x3e,0x7c,0x3c,0x2f,0x62,0x3e,\r
-0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x72,0x75,0x6e,0x74,0x69,0x6d,\r
-0x65,0x2e,0x73,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x52,0x75,0x6e,0x20,0x54,0x69,0x6d,\r
-0x65,0x20,0x53,0x74,0x61,0x74,0x73,0x3c,0x2f,0x61,0x3e,0x20,0x3c,0x62,0x3e,0x7c,\r
-0x3c,0x2f,0x62,0x3e,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x68,0x74,\r
-0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x66,0x72,0x65,0x65,0x72,0x74,0x6f,\r
-0x73,0x2e,0x6f,0x72,0x67,0x2f,0x22,0x3e,0x46,0x72,0x65,0x65,0x52,0x54,0x4f,0x53,\r
-0x20,0x48,0x6f,0x6d,0x65,0x70,0x61,0x67,0x65,0x3c,0x2f,0x61,0x3e,0x20,0x3c,0x62,\r
-0x3e,0x7c,0x3c,0x2f,0x62,0x3e,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,\r
-0x6c,0x6f,0x67,0x6f,0x2e,0x6a,0x70,0x67,0x22,0x3e,0x33,0x37,0x4b,0x20,0x6a,0x70,\r
-0x67,0x3c,0x2f,0x61,0x3e,0x0d,0x0a,0x3c,0x62,0x72,0x3e,0x3c,0x70,0x3e,0x0d,0x0a,\r
-0x3c,0x68,0x72,0x3e,0x0d,0x0a,0x3c,0x62,0x72,0x3e,0x3c,0x70,0x3e,0x0d,0x0a,0x3c,\r
-0x68,0x32,0x3e,0x54,0x61,0x73,0x6b,0x20,0x73,0x74,0x61,0x74,0x69,0x73,0x74,0x69,\r
-0x63,0x73,0x3c,0x2f,0x68,0x32,0x3e,0x0d,0x0a,0x50,0x61,0x67,0x65,0x20,0x77,0x69,\r
-0x6c,0x6c,0x20,0x72,0x65,0x66,0x72,0x65,0x73,0x68,0x20,0x65,0x76,0x65,0x72,0x79,\r
-0x20,0x32,0x20,0x73,0x65,0x63,0x6f,0x6e,0x64,0x73,0x2e,0x3c,0x70,0x3e,0x0d,0x0a,\r
-0x3c,0x66,0x6f,0x6e,0x74,0x20,0x66,0x61,0x63,0x65,0x3d,0x22,0x63,0x6f,0x75,0x72,\r
-0x69,0x65,0x72,0x22,0x3e,0x3c,0x70,0x72,0x65,0x3e,0x54,0x61,0x73,0x6b,0x20,0x20,\r
-0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x53,0x74,0x61,0x74,0x65,0x20,0x20,0x50,\r
-0x72,0x69,0x6f,0x72,0x69,0x74,0x79,0x20,0x20,0x53,0x74,0x61,0x63,0x6b,0x09,0x23,\r
-0x3c,0x62,0x72,0x3e,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,\r
-0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,\r
-0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,\r
-0x2a,0x2a,0x2a,0x2a,0x3c,0x62,0x72,0x3e,0x0d,0x0a,0x3c,0x21,0x2d,0x2d,0x23,0x72,\r
-0x74,0x6f,0x73,0x5f,0x73,0x74,0x61,0x74,0x73,0x2d,0x2d,0x3e,0x0d,0x0a,0x3c,0x2f,\r
-0x70,0x72,0x65,0x3e,0x3c,0x2f,0x66,0x6f,0x6e,0x74,0x3e,0x0d,0x0a,0x3c,0x2f,0x66,\r
-0x6f,0x6e,0x74,0x3e,0x0d,0x0a,0x3c,0x2f,0x62,0x6f,0x64,0x79,0x3e,0x0d,0x0a,0x3c,\r
-0x2f,0x68,0x74,0x6d,0x6c,0x3e,0x0d,0x0a,0x0d,0x0a,};\r
-\r
-static const unsigned int dummy_align__logo_jpg = 2;\r
-static const unsigned char data__logo_jpg[] = {\r
-/* /logo.jpg (10 chars) */\r
-0x2f,0x6c,0x6f,0x67,0x6f,0x2e,0x6a,0x70,0x67,0x00,0x00,0x00,\r
-\r
-/* HTTP header */\r
-/* "HTTP/1.0 200 OK\r
-" (17 bytes) */\r
-0x48,0x54,0x54,0x50,0x2f,0x31,0x2e,0x30,0x20,0x32,0x30,0x30,0x20,0x4f,0x4b,0x0d,\r
-0x0a,\r
-/* "Server: lwIP/1.3.1 (http://savannah.nongnu.org/projects/lwip)\r
-" (63 bytes) */\r
-0x53,0x65,0x72,0x76,0x65,0x72,0x3a,0x20,0x6c,0x77,0x49,0x50,0x2f,0x31,0x2e,0x33,\r
-0x2e,0x31,0x20,0x28,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x73,0x61,0x76,0x61,0x6e,\r
-0x6e,0x61,0x68,0x2e,0x6e,0x6f,0x6e,0x67,0x6e,0x75,0x2e,0x6f,0x72,0x67,0x2f,0x70,\r
-0x72,0x6f,0x6a,0x65,0x63,0x74,0x73,0x2f,0x6c,0x77,0x69,0x70,0x29,0x0d,0x0a,\r
-/* "Content-type: image/jpeg\r
-\r
-" (28 bytes) */\r
-0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x74,0x79,0x70,0x65,0x3a,0x20,0x69,0x6d,\r
-0x61,0x67,0x65,0x2f,0x6a,0x70,0x65,0x67,0x0d,0x0a,0x0d,0x0a,\r
-/* raw file data (28602 bytes) */\r
-0xff,0xd8,0xff,0xe0,0x00,0x10,0x4a,0x46,0x49,0x46,0x00,0x01,0x01,0x00,0x00,0x01,\r
-0x00,0x01,0x00,0x00,0xff,0xdb,0x00,0x43,0x00,0x03,0x02,0x02,0x03,0x02,0x02,0x03,\r
-0x03,0x03,0x03,0x04,0x03,0x03,0x04,0x05,0x08,0x05,0x05,0x04,0x04,0x05,0x0a,0x07,\r
-0x07,0x06,0x08,0x0c,0x0a,0x0c,0x0c,0x0b,0x0a,0x0b,0x0b,0x0d,0x0e,0x12,0x10,0x0d,\r
-0x0e,0x11,0x0e,0x0b,0x0b,0x10,0x16,0x10,0x11,0x13,0x14,0x15,0x15,0x15,0x0c,0x0f,\r
-0x17,0x18,0x16,0x14,0x18,0x12,0x14,0x15,0x14,0xff,0xdb,0x00,0x43,0x01,0x03,0x04,\r
-0x04,0x05,0x04,0x05,0x09,0x05,0x05,0x09,0x14,0x0d,0x0b,0x0d,0x14,0x14,0x14,0x14,\r
-0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,\r
-0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,\r
-0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0xff,0xc0,\r
-0x00,0x11,0x08,0x00,0xea,0x02,0x71,0x03,0x01,0x22,0x00,0x02,0x11,0x01,0x03,0x11,\r
-0x01,0xff,0xc4,0x00,0x1f,0x00,0x00,0x01,0x05,0x01,0x01,0x01,0x01,0x01,0x01,0x00,\r
-0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,\r
-0x0a,0x0b,0xff,0xc4,0x00,0xb5,0x10,0x00,0x02,0x01,0x03,0x03,0x02,0x04,0x03,0x05,\r
-0x05,0x04,0x04,0x00,0x00,0x01,0x7d,0x01,0x02,0x03,0x00,0x04,0x11,0x05,0x12,0x21,\r
-0x31,0x41,0x06,0x13,0x51,0x61,0x07,0x22,0x71,0x14,0x32,0x81,0x91,0xa1,0x08,0x23,\r
-0x42,0xb1,0xc1,0x15,0x52,0xd1,0xf0,0x24,0x33,0x62,0x72,0x82,0x09,0x0a,0x16,0x17,\r
-0x18,0x19,0x1a,0x25,0x26,0x27,0x28,0x29,0x2a,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,\r
-0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,\r
-0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,\r
-0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,\r
-0x9a,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,\r
-0xb8,0xb9,0xba,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xd2,0xd3,0xd4,0xd5,\r
-0xd6,0xd7,0xd8,0xd9,0xda,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xf1,\r
-0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xff,0xc4,0x00,0x1f,0x01,0x00,0x03,\r
-0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,\r
-0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0xff,0xc4,0x00,0xb5,0x11,0x00,\r
-0x02,0x01,0x02,0x04,0x04,0x03,0x04,0x07,0x05,0x04,0x04,0x00,0x01,0x02,0x77,0x00,\r
-0x01,0x02,0x03,0x11,0x04,0x05,0x21,0x31,0x06,0x12,0x41,0x51,0x07,0x61,0x71,0x13,\r
-0x22,0x32,0x81,0x08,0x14,0x42,0x91,0xa1,0xb1,0xc1,0x09,0x23,0x33,0x52,0xf0,0x15,\r
-0x62,0x72,0xd1,0x0a,0x16,0x24,0x34,0xe1,0x25,0xf1,0x17,0x18,0x19,0x1a,0x26,0x27,\r
-0x28,0x29,0x2a,0x35,0x36,0x37,0x38,0x39,0x3a,0x43,0x44,0x45,0x46,0x47,0x48,0x49,\r
-0x4a,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x63,0x64,0x65,0x66,0x67,0x68,0x69,\r
-0x6a,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x82,0x83,0x84,0x85,0x86,0x87,0x88,\r
-0x89,0x8a,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0xa2,0xa3,0xa4,0xa5,0xa6,\r
-0xa7,0xa8,0xa9,0xaa,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xc2,0xc3,0xc4,\r
-0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xe2,\r
-0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,\r
-0xfa,0xff,0xda,0x00,0x0c,0x03,0x01,0x00,0x02,0x11,0x03,0x11,0x00,0x3f,0x00,0xfd,\r
-0x53,0xa2,0x8a,0x28,0x00,0xa2,0x8a,0x28,0x00,0xa2,0x8a,0x28,0x00,0xa4,0x34,0x8e,\r
-0x70,0x09,0xaf,0x0b,0xf1,0xbf,0xc6,0x4b,0x8f,0x13,0x78,0xc2,0xdb,0xc1,0x7e,0x0f,\r
-0xb8,0x2b,0x24,0x93,0x08,0xae,0xf5,0x48,0x88,0x3b,0x47,0xf1,0x2c,0x7f,0x4e,0x72,\r
-0xdf,0x97,0xad,0x72,0x62,0x71,0x54,0xf0,0xb1,0xe6,0x9e,0xef,0x44,0xba,0xb6,0x73,\r
-0x57,0xc4,0x43,0x0e,0x93,0x9e,0xef,0x44,0xba,0xb6,0x77,0xbe,0x3b,0xf8,0xb9,0xa1,\r
-0xf8,0x16,0x39,0x23,0x9d,0xe4,0xd4,0x35,0x05,0x1c,0x58,0x59,0x2e,0xf9,0x3d,0xb7,\r
-0x76,0x51,0xf5,0xfc,0x8d,0x78,0x07,0x8a,0xff,0x00,0x69,0x3f,0x1b,0x6a,0xb3,0x3a,\r
-0x69,0x3a,0x7f,0xf6,0x2d,0xb7,0xf0,0x81,0x09,0x96,0x5f,0xc5,0x98,0x63,0xf2,0x15,\r
-0xf4,0xde,0x83,0xe0,0xdd,0x27,0xc3,0xf6,0x62,0x0b,0x6b,0x38,0xc9,0x3f,0x33,0xcb,\r
-0x20,0xde,0xf2,0x37,0x76,0x66,0x3c,0x92,0x6b,0x40,0xe9,0x16,0x47,0xad,0x9c,0x1f,\r
-0xf7,0xec,0x57,0x9d,0x88,0xc2,0xe3,0x31,0x2b,0xf8,0xbc,0x8b,0xb2,0x5f,0xad,0xce,\r
-0x3c,0x46,0x1b,0x13,0x88,0x56,0x8d,0x5e,0x45,0xe4,0xbf,0x53,0xe0,0x8d,0x4f,0xc6,\r
-0xfe,0x33,0xd5,0x18,0x9b,0xcd,0x5f,0x56,0x90,0x93,0x9c,0x19,0xa4,0x0b,0xf9,0x0e,\r
-0x2b,0x35,0x75,0xff,0x00,0x10,0xc7,0x9c,0x6a,0x3a,0x82,0xfa,0xfe,0xfa,0x41,0xfd,\r
-0x6b,0xf4,0x19,0xb4,0x2d,0x39,0xba,0xd8,0x5b,0x7f,0xdf,0xa1,0xfe,0x15,0x19,0xf0,\r
-0xce,0x94,0xff,0x00,0x7b,0x4d,0xb5,0x3f,0xf6,0xc5,0x7f,0xc2,0xbc,0x79,0x64,0x15,\r
-0xa4,0xef,0xed,0xaf,0xf2,0x7f,0xe6,0x78,0x72,0xc8,0x6a,0x49,0xdd,0xd7,0x7f,0xd7,\r
-0xcc,0xf8,0x0d,0x3c,0x5f,0xe2,0x68,0x94,0x05,0xd6,0x35,0x45,0x03,0xa0,0x17,0x32,\r
-0x0f,0xeb,0x53,0x27,0x8f,0xbc,0x59,0x11,0x25,0x75,0xfd,0x59,0x33,0xe9,0x77,0x28,\r
-0xfe,0xb5,0xf7,0x8b,0x78,0x3b,0x44,0x7e,0xba,0x4d,0x99,0xff,0x00,0xb6,0x2b,0x51,\r
-0x37,0x81,0x7c,0x3c,0xf9,0xce,0x8d,0x66,0x73,0xff,0x00,0x4c,0x56,0xa5,0x64,0x58,\r
-0x85,0xb5,0x6f,0xcc,0x9f,0xec,0x2a,0xeb,0x6a,0xef,0xf1,0xff,0x00,0x33,0xe1,0x6f,\r
-0xf8,0x59,0x3e,0x2f,0x5f,0xf9,0x98,0xb5,0x7f,0xfc,0x0c,0x93,0xfc,0x69,0xeb,0xf1,\r
-0x4f,0xc6,0x51,0x9c,0xaf,0x89,0x35,0x5c,0xfb,0xdd,0x3f,0xf8,0xd7,0xdc,0x0d,0xf0,\r
-0xf3,0xc3,0x6f,0xd7,0x44,0xb2,0x3f,0xf6,0xc8,0x54,0x4f,0xf0,0xcb,0xc2,0xaf,0xf7,\r
-0xb4,0x2b,0x23,0xff,0x00,0x6c,0x85,0x2f,0xec,0x4c,0x5f,0xfc,0xfe,0xfc,0xc5,0xfd,\r
-0x89,0x8a,0x5b,0x57,0x7f,0x89,0xf1,0x54,0x7f,0x17,0xfc,0x6b,0x1f,0xfc,0xcc,0x9a,\r
-0x99,0xfa,0xdc,0x35,0x58,0x8b,0xe3,0x87,0x8e,0xe1,0x6c,0xaf,0x89,0x2f,0x73,0xd3,\r
-0xe6,0x21,0x87,0xe4,0x45,0x7d,0x8e,0xff,0x00,0x09,0x7c,0x20,0xfd,0x74,0x0b,0x3f,\r
-0xc2,0x3c,0x54,0x2f,0xf0,0x6b,0xc1,0xaf,0xd7,0x41,0xb5,0x1f,0x45,0xa4,0xb2,0x7c,\r
-0x72,0xda,0xb7,0xe2,0xc7,0xfd,0x8f,0x8d,0x5b,0x62,0x1f,0xe2,0x7c,0x8a,0x9f,0x1f,\r
-0xbc,0x7e,0x83,0x1f,0xf0,0x91,0x5c,0x7d,0x4c,0x71,0x9f,0xfd,0x96,0xa6,0x1f,0xb4,\r
-0x37,0x8f,0xc7,0xfc,0xcc,0x12,0xfe,0x30,0x45,0xff,0x00,0xc4,0x57,0xd5,0xaf,0xf0,\r
-0x43,0xc1,0x4e,0x0f,0xfc,0x48,0xa0,0x1f,0x4a,0x89,0xbe,0x03,0xf8,0x21,0xf3,0xff,\r
-0x00,0x12,0x48,0x86,0x7d,0x09,0xa7,0xfd,0x95,0x98,0xad,0xab,0x7e,0x2c,0x3f,0xb2,\r
-0xb3,0x15,0xb6,0x21,0xfd,0xec,0xf9,0x69,0x7f,0x68,0xaf,0x1f,0x8f,0xf9,0x8f,0x39,\r
-0xfa,0xdb,0xc5,0xff,0x00,0xc4,0xd4,0x89,0xfb,0x48,0x78,0xf9,0x08,0x3f,0xdb,0x59,\r
-0xc7,0xad,0xb4,0x47,0xff,0x00,0x65,0xaf,0xa6,0x9f,0xf6,0x7d,0xf0,0x33,0x8e,0x74,\r
-0x75,0x1e,0xe1,0x8d,0x42,0xff,0x00,0xb3,0x9f,0x81,0x9c,0x7f,0xc8,0x2d,0x97,0xe9,\r
-0x21,0xa3,0xfb,0x33,0x34,0x5b,0x56,0xff,0x00,0xc9,0x98,0xbf,0xb3,0x33,0x35,0xb5,\r
-0x7f,0xc5,0x9f,0x39,0xc7,0xfb,0x4d,0xf8,0xf1,0x17,0x07,0x52,0x85,0xcf,0xab,0x5a,\r
-0xa6,0x7f,0x95,0x58,0x4f,0xda,0x9b,0xc7,0x49,0x8f,0xf4,0x9b,0x36,0xc7,0xad,0xaa,\r
-0xf3,0xfa,0xd7,0xbe,0xbf,0xec,0xd5,0xe0,0x86,0xc9,0x16,0x32,0xaf,0xd2,0x43,0x50,\r
-0x3f,0xec,0xc5,0xe0,0xa6,0xe9,0x6f,0x3a,0xff,0x00,0xdb,0x4a,0x5f,0xd9,0xf9,0xb2,\r
-0xda,0xaf,0xfe,0x4c,0xc3,0xfb,0x3f,0x36,0x5b,0x57,0xfc,0x59,0xe2,0x0b,0xfb,0x57,\r
-0x78,0xdd,0x7a,0x9d,0x39,0xbe,0xb6,0xc7,0xfa,0x35,0x3d,0x7f,0x6b,0x0f,0x1a,0x82,\r
-0x32,0x9a,0x61,0xff,0x00,0xb7,0x66,0xff,0x00,0xe2,0xeb,0xd9,0xdb,0xf6,0x5a,0xf0,\r
-0x63,0x0e,0x12,0xe5,0x7f,0xed,0xa5,0x42,0xff,0x00,0xb2,0xa7,0x83,0xcf,0x47,0xbb,\r
-0x5f,0xfb,0x69,0x43,0xc1,0xe7,0x0b,0x6a,0x9f,0xf9,0x30,0x7d,0x4b,0x37,0x5b,0x56,\r
-0xfc,0x4f,0x23,0x5f,0xda,0xd7,0xc6,0x43,0xad,0xbe,0x96,0xdf,0xf6,0xc1,0xff,0x00,\r
-0xf8,0xba,0x91,0x3f,0x6b,0x8f,0x16,0x82,0x37,0x59,0x69,0x6d,0xeb,0xfb,0xa7,0xff,\r
-0x00,0xe2,0xeb,0xd4,0x24,0xfd,0x93,0xbc,0x2a,0xd8,0xdb,0x75,0x78,0xbf,0xf0,0x20,\r
-0x6a,0x07,0xfd,0x92,0x3c,0x34,0x73,0x8b,0xfb,0xb5,0xf4,0xe9,0x4b,0xea,0xb9,0xca,\r
-0xfb,0x7f,0x88,0x7d,0x53,0x39,0x5b,0x55,0xfc,0x4f,0x3d,0x8b,0xf6,0xbe,0xf1,0x32,\r
-0xe7,0xcc,0xd2,0xb4,0xc7,0xf4,0xc2,0xc8,0x3f,0xf6,0x6a,0xb0,0x9f,0xb6,0x16,0xbc,\r
-0x31,0xbb,0x43,0xd3,0x5b,0xd7,0x0d,0x20,0xfe,0xb5,0xda,0xc9,0xfb,0x22,0xe8,0x19,\r
-0xf9,0x75,0x3b,0xa0,0x3d,0xd4,0x54,0x0f,0xfb,0x21,0x68,0xe4,0x7c,0xba,0xbd,0xcf,\r
-0xe2,0x82,0x9f,0xb1,0xce,0x97,0xda,0xfc,0x50,0x7b,0x0c,0xe9,0x7d,0xbf,0xc8,0xe6,\r
-0x07,0xed,0x89,0xaa,0xf7,0xf0,0xf5,0x99,0xfa,0x4e,0xdf,0xe1,0x4f,0x5f,0xdb,0x1b,\r
-0x50,0x1f,0x7b,0xc3,0x96,0xa7,0xe9,0x72,0xdf,0xfc,0x4d,0x6f,0x3f,0xec,0x7f,0xa6,\r
-0x1c,0xed,0xd6,0xe7,0x5f,0xac,0x60,0xd4,0x12,0x7e,0xc7,0xb6,0x99,0x1b,0x35,0xd9,\r
-0x31,0xef,0x17,0xff,0x00,0x5e,0x8e,0x4c,0xed,0x75,0xfc,0x85,0xec,0xf3,0xb5,0xf6,\r
-0xbf,0x23,0x35,0x7f,0x6c,0x7b,0xc3,0xf7,0xbc,0x35,0x01,0x1e,0xd7,0x67,0xff,0x00,\r
-0x89,0xa9,0x93,0xf6,0xc8,0x70,0x06,0xef,0x0b,0xa9,0x3d,0xf1,0x7b,0xff,0x00,0xd8,\r
-0x54,0xaf,0xfb,0x1e,0xa0,0x5f,0x97,0x5d,0xe7,0xde,0x2a,0x85,0xbf,0x63,0xe9,0x32,\r
-0x76,0xeb,0xa9,0xed,0x98,0x8d,0x2f,0xf8,0x5b,0x5d,0xff,0x00,0xf2,0x50,0xb6,0x76,\r
-0xba,0xfe,0x44,0xeb,0xfb,0x64,0xc4,0x7e,0xf7,0x85,0xdf,0x1e,0xd7,0xa3,0xff,0x00,\r
-0x8d,0xd4,0xcb,0xfb,0x63,0xda,0x63,0xe6,0xf0,0xcc,0xc0,0xfb,0x5e,0x03,0xff,0x00,\r
-0xb2,0x56,0x63,0xfe,0xc7,0xd7,0x7d,0xb5,0xc8,0x4f,0xd5,0x0d,0x40,0xff,0x00,0xb2,\r
-0x06,0xa6,0x01,0xdb,0xad,0x5b,0x13,0xee,0x84,0x53,0xf6,0x99,0xda,0xe8,0xfe,0xe8,\r
-0x87,0x3e,0x78,0xbf,0xa4,0x6f,0x27,0xed,0x8b,0xa7,0x13,0xcf,0x87,0x2e,0x40,0xff,\r
-0x00,0xaf,0x95,0x3f,0xfb,0x2d,0x48,0x3f,0x6c,0x3d,0x27,0x1f,0x37,0x87,0xaf,0x01,\r
-0xf6,0x9d,0x0f,0xf4,0xae,0x59,0xbf,0x64,0x2d,0x68,0x1e,0x35,0x6b,0x53,0xef,0x83,\r
-0x50,0x37,0xec,0x8d,0xe2,0x11,0xf7,0x75,0x0b,0x46,0xfc,0x4d,0x4f,0xb7,0xce,0x97,\r
-0xd9,0x7f,0x72,0x17,0xb5,0xce,0xd7,0xd9,0xfc,0x11,0xdd,0x45,0xfb,0x5f,0xf8,0x74,\r
-0xb7,0xcf,0xa3,0x6a,0x4a,0x3d,0x54,0xc6,0x7f,0xf6,0x6a,0xb3,0x1f,0xed,0x75,0xe1,\r
-0x36,0x5c,0xbe,0x9b,0xab,0x2b,0x7a,0x08,0xe3,0x3f,0xfb,0x3d,0x79,0xb4,0x9f,0xb2,\r
-0x67,0x89,0x54,0x1c,0x5e,0x5a,0x13,0xfe,0xf1,0xa8,0x1b,0xf6,0x50,0xf1,0x5f,0x69,\r
-0xad,0x1b,0xfe,0x07,0x42,0xc5,0x67,0x0b,0xec,0x3f,0xb9,0x0f,0xeb,0x39,0xd2,0xfb,\r
-0x1f,0x82,0x3d,0x54,0x7e,0xd6,0xfe,0x0e,0xce,0x0d,0x96,0xae,0x07,0xaf,0x93,0x1f,\r
-0xff,0x00,0x17,0x4f,0x1f,0xb5,0xaf,0x83,0x31,0xff,0x00,0x1e,0xba,0xb7,0xfd,0xf8,\r
-0x4f,0xfe,0x2e,0xbc,0x85,0xbf,0x65,0x4f,0x18,0x0f,0xbb,0xf6,0x46,0xff,0x00,0xb6,\r
-0xb5,0x03,0xfe,0xcb,0xbe,0x34,0x4c,0xe2,0x0b,0x76,0x03,0xd2,0x51,0x43,0xc7,0x66,\r
-0xeb,0x7a,0x7f,0xf9,0x28,0x7d,0x73,0x39,0x5f,0xf2,0xeb,0xf0,0x3d,0xa9,0x7f,0x6a,\r
-0xff,0x00,0x05,0x36,0x3f,0x75,0xa9,0xaf,0xd6,0xdd,0x7f,0xf8,0xaa,0x91,0x7f,0x6a,\r
-0xaf,0x04,0x11,0xc9,0xd4,0x53,0xeb,0x6c,0x3f,0xf8,0xaa,0xf0,0xb6,0xfd,0x99,0x7c,\r
-0x6c,0xbd,0x2c,0xe2,0x3f,0x49,0x45,0x42,0xff,0x00,0xb3,0x67,0x8d,0xd4,0x7f,0xc8,\r
-0x3d,0x4f,0xd1,0xc5,0x2f,0xed,0x1c,0xd5,0x7f,0xcb,0xbf,0xfc,0x95,0x8b,0xeb,0xf9,\r
-0xba,0xff,0x00,0x97,0x5f,0x87,0xfc,0x13,0xe8,0x48,0xbf,0x69,0xef,0x01,0xc8,0xe0,\r
-0x1b,0xeb,0xa8,0xc1,0xfe,0x26,0xb5,0x6c,0x0f,0xca,0xad,0x2f,0xed,0x27,0xf0,0xfd,\r
-0x81,0x3f,0xdb,0x2e,0xbe,0xc6,0xd6,0x5f,0xfe,0x26,0xbe,0x6b,0x6f,0xd9,0xd7,0xc7,\r
-0x0a,0x78,0xd2,0xc9,0xc7,0xa3,0x8a,0x81,0xff,0x00,0x67,0xef,0x1c,0xa9,0xff,0x00,\r
-0x90,0x34,0x87,0xe8,0xc0,0xff,0x00,0x5a,0x7f,0xda,0x99,0x9c,0x77,0xa5,0xff,0x00,\r
-0x92,0xb0,0xfe,0xd2,0xcd,0x56,0xf4,0x7f,0x06,0x7d,0x42,0x3f,0x68,0x9f,0x87,0xcd,\r
-0xff,0x00,0x33,0x02,0x8f,0xad,0xb4,0xdf,0xfc,0x45,0x38,0x7e,0xd0,0x9f,0x0f,0xcf,\r
-0x4f,0x11,0x47,0xff,0x00,0x80,0xf2,0x8f,0xfd,0x92,0xbe,0x55,0x6f,0x81,0x3e,0x37,\r
-0x43,0xce,0x89,0x37,0xe1,0x51,0x3f,0xc1,0x4f,0x1a,0x27,0x5d,0x0e,0xe7,0x8f,0x6a,\r
-0x6f,0x38,0xcc,0x16,0xf4,0xbf,0xf2,0x59,0x07,0xf6,0xae,0x64,0xb7,0xa1,0xf8,0x3f,\r
-0xf3,0x3e,0xb2,0x1f,0x1f,0xfc,0x00,0xd8,0xff,0x00,0x8a,0x8e,0x1e,0x7d,0x62,0x93,\r
-0xff,0x00,0x89,0xa9,0xd3,0xe3,0xaf,0x80,0xdc,0x64,0x78,0x92,0xd4,0x7d,0x43,0x8f,\r
-0xe9,0x5f,0x1f,0xbf,0xc1,0xff,0x00,0x18,0xa0,0xe7,0x42,0xba,0xe7,0xfd,0x9a,0x85,\r
-0xbe,0x14,0xf8,0xb9,0x3a,0xe8,0x77,0x7f,0xf7,0xc5,0x2f,0xed,0xac,0x72,0xff,0x00,\r
-0x97,0x4b,0xee,0x62,0xfe,0xd8,0xc7,0xad,0xe8,0x7e,0x0c,0xfb,0x3d,0x3e,0x32,0xf8,\r
-0x21,0xc0,0xc7,0x89,0xb4,0xfe,0x7d,0x65,0xc5,0x48,0x9f,0x17,0x7c,0x14,0xf9,0xc7,\r
-0x89,0xf4,0xce,0x3d,0x6e,0x14,0x57,0xc4,0xef,0xf0,0xd3,0xc5,0x51,0x9f,0x9b,0x44,\r
-0xbd,0x1f,0xf6,0xc8,0xd4,0x0d,0xe0,0x0f,0x12,0x27,0x5d,0x1e,0xf0,0x7f,0xdb,0x23,\r
-0x47,0xf6,0xee,0x29,0x6f,0x49,0x7e,0x23,0xfe,0xdb,0xc6,0x2d,0xe8,0x7e,0x67,0xdc,\r
-0x63,0xe2,0xbf,0x83,0x4f,0x4f,0x13,0xe9,0x7f,0xf8,0x16,0x9f,0xe3,0x52,0x2f,0xc4,\r
-0xef,0x09,0x36,0x71,0xe2,0x5d,0x2f,0x8f,0xfa,0x7b,0x4f,0xf1,0xaf,0x85,0x1b,0xc1,\r
-0x5e,0x20,0x5e,0xba,0x55,0xd0,0xff,0x00,0xb6,0x46,0xa2,0x6f,0x0a,0x6b,0x69,0xd7,\r
-0x4c,0xba,0x1f,0xf6,0xc8,0xd1,0xfd,0xbf,0x89,0xeb,0x49,0x7e,0x22,0xfe,0xdd,0xc5,\r
-0x2d,0xe8,0x7e,0x67,0xde,0xc9,0xf1,0x07,0xc2,0xf2,0x80,0x57,0xc4,0x3a,0x59,0x07,\r
-0xa7,0xfa,0x64,0x7f,0xe3,0x56,0x13,0xc6,0x5a,0x04,0x9f,0x77,0x5a,0xd3,0x9b,0x1e,\r
-0x97,0x49,0xfe,0x35,0xf9,0xfa,0xde,0x1c,0xd5,0xd7,0xae,0x9f,0x72,0x3f,0xed,0x91,\r
-0xa8,0xce,0x89,0xa9,0x27,0x06,0xca,0xe0,0x7d,0x63,0x34,0xd7,0x10,0xd6,0x5b,0xd3,\r
-0x5f,0x8f,0xf9,0x0f,0xfb,0x7e,0xbf,0x5a,0x1f,0x99,0xfa,0x1a,0x9e,0x23,0xd2,0x64,\r
-0x50,0x57,0x54,0xb3,0x60,0x7a,0x62,0xe1,0x3f,0xc6,0x9f,0xfd,0xbb,0xa6,0x9e,0x9a,\r
-0x8d,0xa9,0xff,0x00,0xb6,0xeb,0xfe,0x35,0xf9,0xd8,0x74,0xbb,0xe1,0xd6,0xd6,0x61,\r
-0xff,0x00,0x00,0x34,0xc3,0x61,0x78,0xbd,0x60,0x90,0x7d,0x54,0xd3,0xff,0x00,0x58,\r
-0xe7,0xd6,0x97,0xe3,0xff,0x00,0x00,0x7f,0xeb,0x0d,0x45,0xff,0x00,0x2e,0x7f,0x1f,\r
-0xf8,0x07,0xe8,0xca,0x6a,0xf6,0x2e,0x32,0x2f,0x2d,0xd8,0x7a,0x89,0x54,0xff,0x00,\r
-0x5a,0x78,0xd4,0x6d,0x49,0xe2,0xe6,0x03,0xf4,0x90,0x7f,0x8d,0x7e,0x71,0x7d,0x9e,\r
-0xed,0x7f,0xe5,0x9c,0xa3,0xf0,0x34,0xb9,0xbb,0x43,0xff,0x00,0x2d,0x47,0xe7,0x47,\r
-0xfa,0xc7,0x2f,0xf9,0xf5,0xf8,0xff,0x00,0xc0,0x0f,0xf5,0x8a,0x56,0xd6,0x8b,0xfb,\r
-0xff,0x00,0xe0,0x1f,0xa4,0x0b,0x75,0x13,0x8c,0xac,0xa8,0xc3,0xd4,0x30,0x34,0xf1,\r
-0x20,0x3d,0xc1,0xfc,0x6b,0xf3,0x78,0x5e,0x5e,0xa7,0x49,0x66,0x51,0xec,0xcd,0x53,\r
-0x2e,0xb5,0xaa,0xc6,0xc0,0xad,0xf5,0xda,0x9f,0x51,0x33,0x83,0xfc,0xea,0xd7,0x11,\r
-0xf7,0xa5,0xf8,0xff,0x00,0xc0,0x29,0x71,0x1a,0xeb,0x49,0xfd,0xff,0x00,0xf0,0x0f,\r
-0xd1,0xb0,0xc3,0xd6,0x97,0x75,0x7e,0x74,0x0f,0x13,0x6b,0x4a,0x30,0x35,0x4b,0xe5,\r
-0xfa,0x5c,0x3f,0xf8,0xd2,0x8f,0x16,0x6b,0x8a,0x72,0x35,0x7d,0x40,0x1f,0xfa,0xfa,\r
-0x93,0xfc,0x6a,0xff,0x00,0xd6,0x38,0xff,0x00,0xcf,0xbf,0xc7,0xfe,0x00,0xff,0x00,\r
-0xd6,0x48,0x75,0xa4,0xfe,0xf3,0xf4,0x58,0x36,0x69,0x6b,0xf3,0xb1,0x7c,0x6b,0xe2,\r
-0x04,0x04,0x0d,0x6b,0x51,0x1f,0xf6,0xf5,0x27,0xf8,0xd5,0x88,0xfe,0x23,0x78,0xa2,\r
-0x10,0x36,0x78,0x83,0x54,0x5c,0x70,0x31,0x79,0x27,0xf8,0xd3,0x5c,0x45,0x0e,0xb4,\r
-0xdf,0xde,0x52,0xe2,0x4a,0x5d,0x69,0xb3,0xf4,0x32,0x8a,0xfc,0xf9,0x5f,0x8a,0x5e,\r
-0x2e,0x41,0x81,0xe2,0x4d,0x54,0x0f,0xfa,0xfb,0x73,0xfd,0x6a,0xc2,0x7c,0x62,0xf1,\r
-0xaa,0x63,0x1e,0x26,0xd4,0xb8,0xe9,0xfb,0xf2,0x6a,0xd7,0x11,0x52,0xeb,0x4d,0xfe,\r
-0x05,0x7f,0xac,0x94,0x3a,0xc1,0xfe,0x07,0xdf,0xd4,0x57,0xc0,0xa3,0xe3,0x57,0x8d,\r
-0xd7,0xfe,0x66,0x6d,0x43,0xf1,0x97,0xff,0x00,0xad,0x4f,0x4f,0x8d,0xfe,0x38,0x5c,\r
-0x7f,0xc5,0x4b,0x7c,0x71,0xea,0xe0,0xff,0x00,0x4a,0xaf,0xf5,0x8a,0x87,0xf2,0x3f,\r
-0xc0,0xaf,0xf5,0x8f,0x0d,0xfc,0x8f,0xf0,0x3e,0xf7,0xa2,0xbe,0x0c,0x5f,0x8e,0xde,\r
-0x3a,0x5e,0x9e,0x24,0xbc,0xfc,0x76,0x9f,0xe9,0x56,0x53,0xf6,0x84,0xf1,0xea,0x63,\r
-0xfe,0x2a,0x19,0x8e,0x3d,0x61,0x8c,0xff,0x00,0xec,0xb4,0xd7,0x11,0x61,0xdf,0xd8,\r
-0x97,0xe1,0xfe,0x65,0x2e,0x22,0xc2,0xf5,0x8c,0xbf,0x0f,0xf3,0x3e,0xea,0xa2,0xbe,\r
-0x1c,0x8b,0xf6,0x8e,0xf1,0xf4,0x44,0x9f,0xed,0xc2,0xd9,0xfe,0xf5,0xbc,0x47,0xff,\r
-0x00,0x65,0xab,0xf6,0x3f,0xb5,0x17,0x8e,0xed,0x26,0x57,0x96,0xee,0xd2,0xed,0x07,\r
-0x54,0x9a,0xd5,0x40,0x3f,0xf7,0xce,0x0d,0x68,0xb8,0x83,0x0a,0xf7,0x4f,0xf0,0xff,\r
-0x00,0x32,0xd7,0x10,0xe0,0xde,0xe9,0xaf,0x97,0xfc,0x13,0xed,0x4a,0x2b,0xe6,0x2f,\r
-0x0c,0xfe,0xd8,0x52,0x06,0x58,0xfc,0x41,0xa1,0x86,0x5e,0xf3,0xe9,0xcf,0x83,0xed,\r
-0xf2,0x39,0xff,0x00,0xd9,0xab,0xda,0xbc,0x15,0xf1,0x6f,0xc2,0xfe,0x3f,0x5d,0xba,\r
-0x46,0xa9,0x1c,0x97,0x40,0x65,0xad,0x26,0xfd,0xdc,0xcb,0xff,0x00,0x01,0x3d,0x7e,\r
-0xa3,0x22,0xbd,0x6c,0x3e,0x63,0x86,0xc4,0xe9,0x4e,0x7a,0xf6,0xd9,0x9e,0xa6,0x1f,\r
-0x32,0xc2,0xe2,0x9d,0xa9,0xcd,0x5f,0xb6,0xcc,0xec,0xe8,0xa6,0xa9,0xcd,0x3a,0xbd,\r
-0x13,0xd3,0x0a,0x28,0xa2,0x80,0x0a,0x28,0xa2,0x80,0x0a,0x28,0xa2,0x80,0x0a,0x42,\r
-0x69,0x6a,0xbd,0xe5,0xd4,0x56,0x56,0xd3,0x5c,0x4f,0x22,0xc5,0x04,0x48,0x5d,0xdd,\r
-0xce,0x02,0xa8,0x19,0x24,0x9a,0x4f,0x45,0x71,0x37,0x65,0x76,0x78,0x6f,0xed,0x35,\r
-0xf1,0x65,0xfc,0x33,0xa6,0x2f,0x86,0xb4,0xb9,0xb6,0x6a,0x57,0xd1,0xee,0xb8,0x95,\r
-0x1b,0x0d,0x0c,0x3d,0x30,0x3d,0x0b,0x72,0x3e,0x80,0xfa,0x8a,0xe4,0xbf,0x64,0xbf,\r
-0x08,0xfd,0xa7,0x55,0xbe,0xd7,0x66,0x43,0xb6,0xdd,0x7c,0xa8,0x8f,0x6d,0xc7,0xad,\r
-0x78,0x9f,0x8c,0xbc,0x4d,0x71,0xe3,0x9f,0x17,0xea,0x3a,0xbc,0xdb,0x8b,0xde,0x4e,\r
-0x5a,0x34,0x3d,0x51,0x33,0x84,0x5f,0xc0,0x00,0x2b,0xed,0x7f,0x82,0x9e,0x13,0x1e,\r
-0x11,0xf8,0x7d,0xa6,0xdb,0x15,0xdb,0x3c,0xa9,0xe7,0xcb,0x91,0x83,0xb9,0xb9,0xaf,\r
-0x89,0xc3,0x4e,0x59,0x96,0x64,0xea,0xbf,0x86,0x1b,0x7e,0x9f,0xe6,0x7c,0x56,0x0a,\r
-0xa4,0xb3,0x3c,0xc1,0xd7,0x97,0xc3,0x0d,0xbf,0x4f,0xf3,0x3b,0xb0,0x31,0x4b,0x45,\r
-0x15,0xf6,0xe7,0xdb,0x09,0x4b,0x45,0x14,0x00,0x53,0x43,0x83,0xd2,0x9d,0x5e,0x0f,\r
-0xf1,0xcb,0xf6,0xdc,0xf8,0x3b,0xfb,0x3e,0x5c,0xc9,0x61,0xe2,0xaf,0x16,0xc2,0xfa,\r
-0xda,0x02,0x7f,0xb1,0xf4,0xc4,0x6b,0xbb,0xa0,0x47,0x66,0x54,0xc8,0x8c,0x9e,0xde,\r
-0x61,0x5c,0xd0,0x07,0xba,0x89,0x01,0x6d,0xbc,0xe7,0xdc,0x1a,0x7d,0x7e,0x71,0xeb,\r
-0xdf,0xf0,0x5a,0xdf,0x00,0x5b,0xb3,0x0d,0x1b,0xe1,0xf7,0x89,0x2f,0x80,0xe8,0xd7,\r
-0xd3,0xdb,0xdb,0xe7,0xf0,0x56,0x92,0xbe,0x9f,0xfd,0x94,0x7f,0x6a,0xb8,0xbf,0x69,\r
-0x8f,0x85,0xfa,0xaf,0x8f,0x2e,0x7c,0x36,0xfe,0x0b,0xd0,0xac,0xae,0x64,0xb7,0x59,\r
-0xef,0xef,0x92,0x44,0x91,0x63,0x40,0xd2,0xca,0x5b,0x6a,0x85,0x45,0xce,0x32,0x7d,\r
-0x1b,0xa6,0x28,0x11,0xef,0xb4,0x57,0x17,0x6d,0xf1,0xb3,0xe1,0xe5,0xeb,0x2a,0xdb,\r
-0xf8,0xf3,0xc3,0x33,0xb3,0x1c,0x05,0x8b,0x58,0xb7,0x62,0x4f,0xe0,0xf5,0xd9,0x83,\r
-0x9e,0x94,0x0c,0x5a,0x2b,0x33,0x5f,0xf1,0x1e,0x9f,0xe1,0x7d,0x3d,0xaf,0xb5,0x3b,\r
-0x91,0x6b,0x6a,0xac,0x14,0xb9,0x52,0xdc,0x93,0x80,0x30,0x01,0x35,0x81,0x17,0xc5,\r
-0xff,0x00,0x07,0xcd,0xd3,0x5d,0x80,0x7f,0xbe,0xae,0xbf,0xcc,0x57,0x34,0xf1,0x34,\r
-0x69,0x4b,0x96,0xa4,0xd2,0x7e,0x6d,0x22,0x1c,0xe1,0x17,0x66,0xd2,0x3b,0x1a,0x31,\r
-0x5c,0xcc,0x7f,0x12,0xfc,0x2b,0x26,0x31,0xe2,0x0b,0x01,0x9f,0xef,0x4e,0xa3,0xf9,\r
-0xd4,0xc3,0xe2,0x0f,0x86,0x0f,0x4f,0x10,0xe9,0x9f,0xf8,0x16,0x9f,0xe3,0x49,0x62,\r
-0xb0,0xef,0x6a,0x8b,0xef,0x42,0xf6,0x90,0xfe,0x64,0x74,0x34,0x56,0x12,0xf8,0xe7,\r
-0xc3,0x8e,0x78,0xd7,0xf4,0xc3,0xff,0x00,0x6f,0x91,0xff,0x00,0x8d,0x58,0x8b,0xc5,\r
-0x3a,0x34,0xe3,0xf7,0x7a,0xb5,0x8c,0x9f,0xee,0xdc,0x21,0xfe,0xb5,0xa2,0xad,0x4d,\r
-0xed,0x25,0xf7,0x8f,0x9a,0x2f,0x66,0x6a,0xd1,0x55,0x13,0x55,0xb2,0x97,0x95,0xbb,\r
-0x81,0xbf,0xdd,0x95,0x4f,0xf5,0xa9,0x96,0x78,0xa4,0xfb,0xb2,0x2b,0x7d,0x1a,0xaf,\r
-0x9e,0x2f,0x66,0x55,0xd1,0x2d,0x14,0xdd,0xdd,0xc1,0xa5,0x07,0x35,0x43,0x16,0x8a,\r
-0x28,0xa6,0x01,0x45,0x21,0xe9,0x49,0x9a,0x00,0x75,0x26,0x29,0x32,0x3d,0x69,0x73,\r
-0x48,0x05,0xa4,0xc5,0x18,0xf7,0xa5,0xa6,0x02,0x62,0x96,0x8a,0x28,0x00,0xa2,0x8a,\r
-0x28,0x01,0x29,0x68,0xa2,0x80,0x12,0x8c,0x52,0xd1,0x40,0x05,0x14,0x51,0x40,0x05,\r
-0x26,0x29,0x68,0xa0,0x04,0xc5,0x18,0x1e,0x94,0xb4,0x50,0x02,0x6d,0x1e,0x82,0x93,\r
-0xcb,0x53,0xfc,0x23,0xf2,0xa0,0x92,0x3f,0x87,0x3f,0x8d,0x28,0xcf,0x71,0x8a,0x00,\r
-0x69,0x82,0x33,0xd6,0x35,0x3f,0x80,0xa6,0x9b,0x58,0x5b,0xac,0x48,0x7f,0xe0,0x22,\r
-0xa5,0xa2,0x95,0x97,0x61,0x59,0x10,0x1b,0x1b,0x73,0xd6,0x08,0xff,0x00,0xef,0x91,\r
-0x4d,0x3a,0x6d,0xa3,0x75,0xb6,0x84,0xfd,0x50,0x55,0x9a,0x29,0x72,0xc7,0xb0,0x59,\r
-0x14,0x9b,0x46,0xb0,0x6e,0xb6,0x56,0xe7,0xfe,0xd9,0x8f,0xf0,0xa8,0xdb,0xc3,0xba,\r
-0x5b,0x75,0xd3,0xed,0x8f,0xfd,0xb2,0x5f,0xf0,0xad,0x1a,0x29,0x7b,0x38,0x76,0x17,\r
-0x2a,0xec,0x64,0xb7,0x85,0x74,0x76,0xeb,0xa6,0x5a,0x9f,0xfb,0x64,0xbf,0xe1,0x51,\r
-0xb7,0x83,0x74,0x36,0xeb,0xa4,0xda,0x1f,0xac,0x23,0xfc,0x2b,0x6a,0x8a,0x9f,0x65,\r
-0x4f,0xf9,0x57,0xdc,0x2e,0x48,0x76,0x30,0x1f,0xc0,0x9e,0x1e,0x93,0xef,0x68,0xd6,\r
-0x67,0xfe,0xd8,0x8a,0x89,0xbe,0x1c,0xf8,0x65,0xba,0xe8,0x96,0x7f,0xf7,0xec,0x57,\r
-0x49,0x45,0x4b,0xc3,0xd2,0x7b,0xc1,0x7d,0xc4,0xfb,0x28,0x3f,0xb2,0x8e,0x55,0xbe,\r
-0x17,0xf8,0x55,0xfa,0xe8,0x96,0x9f,0xf7,0xc5,0x42,0xdf,0x09,0x3c,0x22,0xdd,0x74,\r
-0x3b,0x5f,0xfb,0xe6,0xba,0xfa,0x5a,0x8f,0xaa,0xd0,0xfe,0x45,0xf7,0x21,0x7b,0x1a,\r
-0x5f,0xca,0xbe,0xe3,0x89,0x7f,0x83,0x7e,0x0e,0x7e,0xba,0x1d,0xb7,0xe5,0x50,0x3f,\r
-0xc0,0xff,0x00,0x05,0x3f,0xfc,0xc0,0xe0,0x1f,0x4c,0xd7,0x7b,0x45,0x4b,0xc1,0xe1,\r
-0xdf,0xfc,0xbb,0x5f,0x72,0x27,0xea,0xf4,0x7f,0x91,0x7d,0xc7,0x9e,0x3f,0xc0,0x5f,\r
-0x04,0xbf,0xfc,0xc1,0xa3,0x1f,0x46,0x35,0x0b,0xfe,0xcf,0x7e,0x09,0x7f,0xf9,0x85,\r
-0x63,0xe8,0xe6,0xbd,0x23,0x34,0x64,0x7a,0xd4,0x7d,0x47,0x0b,0xff,0x00,0x3e,0xd7,\r
-0xdc,0x88,0xfa,0xa5,0x0f,0xe4,0x5f,0x71,0xe6,0x0f,0xfb,0x39,0x78,0x25,0xff,0x00,\r
-0xe6,0x1c,0xc3,0xe8,0xf5,0x0b,0xfe,0xcd,0x5e,0x09,0x7f,0xf9,0x72,0x90,0x7d,0x24,\r
-0xaf,0x55,0xa2,0xa7,0xfb,0x3f,0x08,0xff,0x00,0xe5,0xda,0xfb,0x89,0xfa,0x96,0x19,\r
-0xef,0x4d,0x7d,0xc7,0x92,0x3f,0xec,0xc5,0xe0,0xb6,0xe9,0x05,0xc2,0xff,0x00,0xdb,\r
-0x4a,0x81,0xff,0x00,0x65,0xcf,0x07,0xb7,0x41,0x72,0xbf,0xf6,0xd2,0xbd,0x8e,0x8a,\r
-0x9f,0xec,0xcc,0x1b,0xff,0x00,0x97,0x4b,0xee,0x27,0xea,0x18,0x57,0xff,0x00,0x2e,\r
-0xd7,0xdc,0x78,0xb3,0xfe,0xca,0xbe,0x12,0x6e,0x92,0x5d,0x2f,0xfc,0x08,0x54,0x2f,\r
-0xfb,0x27,0xf8,0x5d,0xba,0x5c,0xdd,0x0f,0xc4,0x57,0xb7,0xd1,0x51,0xfd,0x95,0x82,\r
-0xff,0x00,0x9f,0x48,0x97,0x97,0x61,0x1f,0xfc,0xbb,0x47,0x84,0xbf,0xec,0x95,0xe1,\r
-0xb6,0xe9,0x7d,0x76,0x3f,0x2a,0xa5,0x77,0xfb,0x24,0x69,0xd0,0x95,0x9f,0x4e,0xd6,\r
-0x6e,0xed,0xae,0xe3,0x21,0xe2,0x90,0x60,0x15,0x61,0xd0,0x82,0x39,0x06,0xbe,0x83,\r
-0xa4,0x3d,0x29,0x7f,0x64,0xe0,0xf7,0x54,0xed,0xf7,0x99,0xbc,0xaf,0x07,0x2f,0xf9,\r
-0x76,0x8f,0x01,0xf0,0x97,0xc6,0x3d,0x4f,0xe1,0xff,0x00,0x89,0xd3,0xc2,0x5e,0x3e,\r
-0xb9,0x59,0xa1,0x77,0x10,0xda,0x6b,0xa4,0x6d,0xcb,0x67,0x01,0x66,0xed,0xcf,0x1f,\r
-0x3f,0xe7,0xeb,0x5e,0xfa,0x8c,0x18,0x70,0x72,0x3d,0x6b,0xe3,0x1f,0xda,0x88,0xa5,\r
-0xee,0xbb,0x24,0x4c,0x01,0x05,0x88,0xc7,0xad,0x77,0x1f,0xb1,0xff,0x00,0xc6,0x49,\r
-0xbc,0x47,0x65,0x79,0xe0,0x6d,0x66,0xe9,0xa6,0xd5,0xf4,0xa8,0x84,0xd6,0x53,0x4a,\r
-0xd9,0x79,0xed,0x72,0x06,0x09,0xee,0x63,0x25,0x47,0xd1,0x97,0xd2,0xb9,0x70,0x18,\r
-0xde,0x6a,0xd3,0xc3,0x4d,0xdf,0x95,0xe8,0xcf,0x23,0x07,0x98,0xfb,0x2c,0x6b,0xcb,\r
-0xea,0xbb,0xaf,0xb2,0xdf,0xe4,0xff,0x00,0x43,0xe9,0x8a,0x29,0x9b,0xbd,0xff,0x00,\r
-0x5a,0x2b,0xe8,0x8f,0xaa,0xe6,0x43,0xe8,0xa2,0x8a,0x45,0x05,0x14,0x51,0x40,0x05,\r
-0x79,0x0f,0xed,0x3d,0xe2,0xdf,0xf8,0x46,0xfe,0x1a,0xdc,0x5a,0x45,0x26,0xcb,0xad,\r
-0x55,0xc5,0xa2,0x60,0xf3,0xb3,0xac,0x9f,0xf8,0xe8,0x23,0xfe,0x05,0x5e,0xb8,0x49,\r
-0xed,0x5f,0x1b,0x7e,0xd4,0xbe,0x30,0x3a,0xff,0x00,0xc4,0x4f,0xec,0xb8,0xdf,0x75,\r
-0xae,0x93,0x10,0x8b,0x00,0x82,0x0c,0xad,0x86,0x73,0xf8,0x0d,0xa3,0xea,0x0d,0x78,\r
-0xf9,0xb6,0x23,0xea,0xf8,0x59,0x35,0xbb,0xd1,0x7c,0xcf,0x13,0x38,0xc4,0xfd,0x5b,\r
-0x07,0x26,0xb7,0x96,0x8b,0xe6,0x72,0x5f,0x06,0x7c,0x26,0x7c,0x5d,0xe3,0xed,0x32,\r
-0xd3,0x6e,0xe8,0x52,0x41,0x2c,0xb9,0xfe,0xe8,0xe6,0xbe,0xf6,0x8d,0x04,0x68,0xa8,\r
-0xa3,0x0a,0xa3,0x00,0x0f,0x4a,0xf9,0xd3,0xf6,0x49,0xf0,0x8f,0xd9,0xf4,0xfb,0xfd,\r
-0x7a,0x68,0xfe,0x79,0x4f,0x93,0x13,0x1f,0x4e,0xf5,0xf4,0x60,0xae,0x3c,0x8b,0x0f,\r
-0xec,0xb0,0xde,0xd1,0xef,0x2d,0x7e,0x5d,0x0c,0x32,0x2c,0x37,0xb0,0xc2,0x29,0x3d,\r
-0xe5,0xa8,0xb4,0x51,0x45,0x7d,0x21,0xf4,0x41,0x48,0x4e,0x29,0x6b,0x95,0xf8,0xad,\r
-0xe3,0x88,0x3e,0x19,0xfc,0x32,0xf1,0x5f,0x8b,0x6e,0x81,0x68,0x34,0x4d,0x2e,0xe7,\r
-0x50,0x65,0x03,0x39,0xf2,0xa3,0x67,0xc7,0xe3,0x8a,0x00,0xfc,0xfb,0xff,0x00,0x82,\r
-0x96,0x7f,0xc1,0x41,0x75,0x2f,0x01,0x6a,0xd7,0xbf,0x09,0xbe,0x1b,0x6a,0x06,0xcf,\r
-0x59,0x8e,0x30,0x35,0xcd,0x72,0x03,0x87,0xb6,0xdc,0x33,0xf6,0x68,0x5b,0xb3,0xed,\r
-0x20,0xb3,0x8f,0xbb,0xb8,0x01,0xce,0xec,0x7c,0x27,0xf0,0x53,0xf6,0x29,0xf8,0xcd,\r
-0xfb,0x4a,0x59,0xcb,0xaf,0x78,0x6b,0xc3,0xb2,0x4d,0xa4,0xc9,0x21,0x27,0x5a,0xd5,\r
-0xee,0x45,0xbc,0x33,0xbe,0x4e,0xe2,0xae,0xe7,0x32,0x1c,0x83,0x92,0xa0,0xe0,0xf5,\r
-0x35,0xe5,0x9a,0x76,0xab,0x1f,0x8f,0xbe,0x29,0xda,0x6a,0x3e,0x2e,0xbf,0x2b,0x0e,\r
-0xb3,0xac,0xa4,0xfa,0xb5,0xfb,0xb6,0xd2,0xa9,0x2c,0xe0,0xcf,0x21,0x3d,0xb0,0x19,\r
-0x8f,0xb5,0x7f,0x40,0x9f,0x1c,0x3e,0x24,0xe8,0x3f,0xb3,0x97,0xec,0xbf,0xae,0xf8,\r
-0x9b,0x43,0x5b,0x5b,0x7d,0x2b,0x46,0xd1,0x44,0x7a,0x34,0x36,0xa5,0x44,0x4c,0xcc,\r
-0xa2,0x3b,0x61,0x1e,0x38,0x20,0xb3,0x27,0x4e,0xdc,0xd3,0x25,0x6a,0x7f,0x3e,0x1e,\r
-0x2f,0xf0,0x4e,0xa1,0xe0,0xef,0x1d,0x6a,0xbe,0x13,0x9d,0xa1,0xbe,0xd5,0x74,0xeb,\r
-0xe7,0xd3,0xa4,0xfb,0x03,0x99,0x63,0x92,0x64,0x7d,0x85,0x50,0xe0,0x6e,0xf9,0x81,\r
-0x03,0x8e,0x71,0x5f,0xbd,0xbe,0x1c,0xf8,0x6b,0xa7,0x7e,0xce,0x7f,0xb0,0xcd,0xef,\r
-0x86,0x2e,0x84,0x51,0xc7,0xa3,0x78,0x42,0xed,0xf5,0x07,0xc6,0x16,0x4b,0x86,0xb7,\r
-0x91,0xe7,0x27,0xeb,0x23,0x30,0xfc,0xab,0xf2,0x6b,0xfe,0x09,0xd5,0xf0,0x92,0x7f,\r
-0x8e,0x9f,0xb5,0xbf,0x87,0xae,0x75,0x24,0x6b,0xed,0x3f,0x45,0x95,0xfc,0x45,0xa9,\r
-0xcb,0x29,0xfb,0xcd,0x11,0x06,0x32,0x4f,0x72,0xd3,0xb4,0x59,0xf5,0x19,0xaf,0xb2,\r
-0xff,0x00,0xe0,0xac,0x1f,0xb6,0x06,0x8d,0xa5,0x78,0x12,0xe7,0xe0,0xdf,0x85,0xb5,\r
-0x38,0x6f,0xf5,0xfd,0x52,0x44,0xfe,0xde,0x6b,0x67,0x0e,0xb6,0x56,0xc8,0x43,0x08,\r
-0x19,0x81,0xe2,0x47,0x60,0x99,0x5e,0x48,0x50,0x72,0x06,0xe1,0x40,0x2d,0x35,0x3f,\r
-0x2c,0xfe,0x17,0x78,0x72,0xe3,0xc6,0x1f,0x12,0xfc,0x27,0xa0,0xd9,0x0c,0xdd,0xea,\r
-0x7a,0xb5,0xa5,0x9c,0x5c,0xe3,0xe6,0x92,0x64,0x51,0xfc,0xeb,0xfa,0x6e,0x8d,0x3c,\r
-0xb4,0x55,0xeb,0x80,0x06,0x6b,0xf1,0x1f,0xfe,0x09,0x3f,0xf0,0x0e,0xe3,0xe2,0x67,\r
-0xed,0x0b,0x17,0x8c,0xaf,0x2d,0x0b,0xf8,0x7b,0xc1,0xa9,0xf6,0xb6,0x92,0x45,0x3b,\r
-0x1e,0xf1,0x81,0x10,0x20,0x3e,0xaa,0x73,0x27,0xb6,0xc1,0xeb,0x5f,0xb7,0x2c,0xc1,\r
-0x14,0x92,0x70,0x00,0xcd,0x0c,0x16,0xc7,0x81,0xfe,0xd2,0x7e,0x22,0x12,0xdd,0x69,\r
-0x9a,0x24,0x6d,0x91,0x18,0x37,0x52,0x8f,0x73,0x95,0x4f,0xd3,0x77,0xe6,0x2b,0xc4,\r
-0xab,0x7b,0xc7,0x5e,0x20,0x3e,0x28,0xf1,0x6e,0xa7,0xa9,0x64,0x98,0xe5,0x98,0x88,\r
-0xb3,0xd9,0x07,0x0b,0xfa,0x01,0x58,0x35,0xf8,0x96,0x67,0x89,0xfa,0xde,0x2e,0x75,\r
-0x56,0xd7,0xb2,0xf4,0x5a,0x1f,0x29,0x88,0xa9,0xed,0x6a,0xb9,0x06,0x68,0xa2,0x8c,\r
-0xd7,0x98,0x73,0x85,0x14,0x51,0x48,0x00,0x71,0x4e,0x49,0x5e,0x33,0x95,0x76,0x52,\r
-0x3b,0x83,0x8a,0x6d,0x14,0xd3,0x6b,0x60,0xb9,0xb5,0xa6,0xf8,0xd7,0x5f,0xd2,0x0a,\r
-0xfd,0x93,0x58,0xbd,0x84,0x2f,0x45,0x13,0x31,0x5f,0xc8,0xf1,0x5e,0x89,0xe1,0x6f,\r
-0xda,0x2b,0x56,0xb0,0x91,0x22,0xd6,0xed,0xd3,0x51,0xb7,0xef,0x2c,0x2a,0x12,0x51,\r
-0xf8,0x7d,0xd3,0xfa,0x7d,0x6b,0xc8,0x68,0xaf,0x43,0x0f,0x98,0xe2,0xb0,0xb2,0xbd,\r
-0x2a,0x8f,0xf4,0xfb,0x8d,0xe1,0x5e,0xa5,0x37,0x78,0xc8,0xfb,0x57,0xc3,0x5e,0x28,\r
-0xd3,0xbc,0x59,0xa6,0xa5,0xf6,0x9b,0x72,0xb7,0x10,0x31,0xc1,0xec,0xc8,0xdd,0xd5,\r
-0x87,0x63,0x5a,0xd5,0xf2,0x47,0xc2,0x6f,0x18,0x4f,0xe1,0x2f,0x17,0xda,0x10,0xe7,\r
-0xec,0x57,0x6e,0xb0,0x5c,0xc7,0x9e,0x08,0x27,0x01,0xbe,0xaa,0x4e,0x7f,0x3f,0x5a,\r
-0xfa,0xd9,0x4e,0x46,0x6b,0xf5,0x3c,0xa7,0x31,0x59,0x8d,0x0e,0x76,0xad,0x25,0xa3,\r
-0x3e,0x8b,0x0d,0x5f,0xdb,0xc2,0xfd,0x50,0x37,0x00,0xd7,0xcd,0x1f,0x15,0x3e,0x26,\r
-0xeb,0x51,0x78,0xeb,0x51,0xb7,0xd2,0xf5,0x5b,0x9b,0x5b,0x4b,0x56,0x10,0x04,0x89,\r
-0xf0,0xa5,0x94,0x7c,0xc7,0x1f,0xef,0x64,0x7e,0x15,0xf4,0x4e,0xbb,0xaa,0xc7,0xa1,\r
-0xe8,0xd7,0xda,0x84,0xdc,0xc5,0x6b,0x0b,0xcc,0xc0,0x75,0x21,0x41,0x38,0xfd,0x2b,\r
-0xe2,0x8b,0xbb,0xa9,0x2f,0x6e,0xa6,0xb8,0x95,0xb7,0xcb,0x33,0xb4,0x8e,0xc7,0xbb,\r
-0x13,0x92,0x6b,0xc6,0xe2,0x5c,0x64,0xe8,0xd3,0xa7,0x4a,0x9c,0xac,0xdb,0xbe,0x9d,\r
-0x8e,0x6c,0x7d,0x57,0x08,0xa8,0xc5,0xd8,0xea,0x13,0xe2,0xc7,0x8b,0xa3,0xe9,0xae,\r
-0xdd,0x7e,0x3b,0x4f,0xf3,0x15,0x32,0x7c,0x64,0xf1,0x94,0x7d,0x35,0xb9,0x0f,0xfb,\r
-0xd1,0x46,0x7f,0xf6,0x5a,0xe3,0x28,0xaf,0x82,0x58,0xec,0x52,0xda,0xac,0xbe,0xf6,\r
-0x78,0x9e,0xda,0xa7,0xf3,0x3f,0xbc,0xef,0x13,0xe3,0x8f,0x8c,0xd3,0xfe,0x62,0xc1,\r
-0xbf,0xde,0xb7,0x8b,0xff,0x00,0x89,0xab,0x09,0xf1,0xef,0xc6,0x0b,0xd6,0xf6,0x06,\r
-0xfa,0xdb,0xaf,0xf8,0x57,0x9d,0xd1,0x5a,0x2c,0xcb,0x1a,0xb6,0xad,0x2f,0xbd,0x97,\r
-0xf5,0x8a,0xbf,0xcc,0xcf,0x4a,0x5f,0xda,0x0b,0xc5,0xca,0x79,0x96,0xd1,0xff,0x00,\r
-0xde,0xb7,0xff,0x00,0x03,0x53,0xa7,0xed,0x17,0xe2,0xa4,0xeb,0x16,0x9c,0xff,0x00,\r
-0x58,0x1b,0xff,0x00,0x8b,0xaf,0x2e,0xa2,0xb4,0x59,0xb6,0x39,0x6d,0x59,0xfd,0xe3,\r
-0x58,0x9a,0xcb,0xed,0x33,0xd6,0x23,0xfd,0xa4,0xbc,0x48,0xbf,0x7a,0xcb,0x4e,0x6f,\r
-0xfb,0x66,0xe3,0xff,0x00,0x67,0xab,0x09,0xfb,0x4b,0x6b,0x60,0x7c,0xda,0x5d,0x8b,\r
-0x1f,0x6d,0xe3,0xfa,0xd7,0x8f,0xd1,0x56,0xb3,0x9c,0x7a,0xff,0x00,0x97,0xac,0x7f,\r
-0x5a,0xaf,0xfc,0xc7,0xb3,0x27,0xed,0x33,0xaa,0x0f,0xbd,0xa2,0xda,0xb7,0xd2,0x56,\r
-0x1f,0xd2,0xa7,0x5f,0xda,0x6e,0xef,0xf8,0xb4,0x08,0x7f,0x0b,0xa3,0xff,0x00,0xc4,\r
-0xd7,0x89,0x51,0xfa,0xd6,0xab,0x3c,0xcc,0x3a,0x55,0xfc,0x17,0xf9,0x14,0xb1,0x95,\r
-0xff,0x00,0x98,0xfb,0x1b,0xe1,0xef,0x8b,0x26,0xf1,0xb7,0x86,0x61,0xd5,0xa5,0xb3,\r
-0x16,0x42,0x67,0x75,0x48,0xc3,0xee,0xc8,0x52,0x57,0x39,0xc0,0xee,0x0d,0x74,0xb5,\r
-0x89,0xe0,0xad,0x23,0xfb,0x03,0xc2,0x9a,0x56,0x9e,0x7e,0xf4,0x16,0xe8,0xaf,0xee,\r
-0xd8,0xcb,0x1f,0xcf,0x35,0xb4,0x6b,0xf5,0xac,0x3f,0x3f,0xb1,0x87,0xb5,0x77,0x95,\r
-0x95,0xfd,0x4f,0xa5,0x85,0xf9,0x17,0x36,0xe2,0xd2,0x13,0x8a,0xaf,0x7b,0x7f,0x6f,\r
-0xa7,0x5a,0x49,0x73,0x75,0x3c,0x76,0xf6,0xf1,0x8d,0xcf,0x2c,0xac,0x15,0x54,0x7a,\r
-0x92,0x6b,0xc7,0x3c,0x65,0xfb,0x45,0xdb,0xda,0xb3,0xdb,0x78,0x7a,0xdf,0xed,0x72,\r
-0x0e,0x3e,0xd9,0x70,0x08,0x8f,0xea,0xab,0xd4,0xfe,0x38,0xfc,0x6b,0x0c,0x5e,0x3b,\r
-0x0f,0x82,0x8f,0x35,0x69,0x5b,0xcb,0xaf,0xdc,0x4d,0x5a,0xd0,0xa4,0xaf,0x36,0x7b,\r
-0x51,0x70,0xa3,0x24,0xe0,0x7a,0x9a,0xe5,0xf5,0x8f,0x8a,0x3e,0x16,0xd0,0xb7,0x0b,\r
-0x9d,0x6a,0xd8,0xba,0x9c,0x18,0xe0,0x6f,0x39,0x81,0xf7,0x09,0x92,0x2b,0xe5,0xbf,\r
-0x10,0xf8,0xe3,0x5d,0xf1,0x4c,0x8c,0xda,0x96,0xa5,0x34,0xe8,0x4e,0x7c,0xa0,0xdb,\r
-0x63,0x1f,0x45,0x18,0x15,0x85,0xd2,0xbe,0x33,0x11,0xc5,0x2f,0x6c,0x3d,0x3f,0x9b,\r
-0xff,0x00,0x25,0xfe,0x67,0x95,0x3c,0xc7,0xf9,0x23,0xf7,0x9f,0x4b,0xdf,0xfe,0xd1,\r
-0x7e,0x19,0xb6,0x72,0xb0,0x45,0x7d,0x79,0xe8,0xd1,0xc4,0x15,0x7f,0xf1,0xe6,0x07,\r
-0xf4,0xac,0xb9,0xbf,0x69,0x9d,0x31,0x4f,0xee,0x74,0x6b,0xb7,0x1f,0xed,0xc8,0xab,\r
-0xfc,0xb3,0x5f,0x3e,0x51,0x5e,0x44,0xb8,0x8f,0x1f,0x2d,0x9a,0x5f,0x2f,0xf3,0x39,\r
-0x5e,0x3a,0xb3,0xea,0x7b,0xfa,0xfe,0xd3,0x76,0x64,0xfc,0xda,0x14,0xe0,0x7b,0x4e,\r
-0xa7,0xfa,0x55,0xb8,0xbf,0x69,0x6d,0x10,0xe3,0xcc,0xd2,0xf5,0x04,0xf5,0xda,0x23,\r
-0x6f,0xfd,0x98,0x57,0xce,0xb4,0x54,0xae,0x21,0xcc,0x17,0xda,0x4f,0xe4,0x84,0xb1,\r
-0xd5,0xfb,0x9f,0x53,0x58,0x7c,0x7b,0xf0,0x85,0xe8,0x4f,0x32,0xf2,0x6b,0x36,0x6f,\r
-0xe1,0x9e,0xdd,0xb8,0xfa,0x95,0x04,0x7e,0xb5,0xd8,0xe9,0x3e,0x25,0xd2,0xb5,0xe0,\r
-0x4e,0x9d,0xa9,0x5a,0xde,0xe0,0x64,0x88,0x25,0x56,0x23,0xea,0x07,0x4a,0xf8,0xa2,\r
-0x9d,0x14,0xaf,0x04,0x8a,0xf1,0xbb,0x46,0xeb,0xca,0xb2,0x1c,0x11,0xf4,0x22,0xbd,\r
-0x0a,0x3c,0x51,0x88,0x8b,0xfd,0xf4,0x13,0x5e,0x5a,0x3f,0xd4,0xde,0x19,0x8c,0xd7,\r
-0xc4,0xae,0x7d,0xcf,0x9c,0x9e,0xb4,0xb5,0xf2,0xcf,0x84,0xfe,0x39,0x78,0x8b,0xc3,\r
-0xae,0x91,0xdd,0x4d,0xfd,0xaf,0x68,0x3a,0xc7,0x72,0x7e,0x70,0x3d,0x9f,0xaf,0xe7,\r
-0x9a,0xf7,0xbf,0x04,0x7c,0x49,0xd1,0xfc,0x75,0x6e,0x4d,0x94,0xde,0x55,0xda,0x0c,\r
-0xc9,0x69,0x36,0x04,0x8b,0xee,0x3d,0x47,0xb8,0xaf,0xaf,0xc0,0xe7,0x18,0x5c,0x73,\r
-0xe5,0x83,0xb4,0xbb,0x3f,0xd0,0xf4,0xe8,0xe2,0xa9,0xd6,0xd1,0x3b,0x33,0xac,0xa2,\r
-0x90,0x1c,0x8a,0x5a,0xf7,0x0e,0xc0,0xa2,0x8a,0x28,0x00,0xa2,0x90,0x9c,0x57,0x3b,\r
-0xe2,0x9f,0x88,0x1a,0x1f,0x83,0x93,0x3a,0x9d,0xfc,0x71,0x4a,0x46,0x44,0x09,0xf3,\r
-0xc8,0xdf,0xf0,0x11,0xce,0x3d,0xcf,0x15,0x95,0x4a,0xb0,0xa5,0x1e,0x6a,0x92,0xb2,\r
-0xf3,0x26,0x52,0x51,0x57,0x93,0x3a,0x3a,0x4c,0xd7,0x84,0x6b,0xdf,0xb4,0xb3,0x1d,\r
-0xc9,0xa3,0xe9,0x20,0x0e,0xd2,0xde,0x3f,0x3f,0xf7,0xc2,0xff,0x00,0xf1,0x55,0xc3,\r
-0xea,0x7f,0x1b,0x7c,0x5f,0xa9,0x13,0xff,0x00,0x13,0x31,0x68,0xa7,0xf8,0x6d,0xa2,\r
-0x55,0xc7,0xe3,0x82,0x7f,0x5a,0xf9,0xca,0xfc,0x45,0x81,0xa5,0xa4,0x5b,0x97,0xa2,\r
-0xff,0x00,0x33,0x82,0x78,0xea,0x31,0xd1,0x6a,0x7d,0x5d,0x9f,0xca,0x8d,0xc3,0xd6,\r
-0xbe,0x30,0xba,0xf1,0xaf,0x88,0x2f,0x73,0xe7,0xeb,0x7a,0x84,0x80,0xf5,0x06,0xe5,\r
-0xf1,0xf9,0x66,0xb3,0x1e,0xfa,0xe6,0x43,0x96,0xb8,0x95,0x89,0xee,0xce,0x4d,0x79,\r
-0x92,0xe2,0xaa,0x6b,0xe1,0xa4,0xfe,0xff,0x00,0xf8,0x07,0x3b,0xcc,0xa3,0xd2,0x27,\r
-0xdc,0x04,0x2b,0x1f,0x9b,0x69,0xfa,0xd3,0x86,0xd0,0x30,0x00,0xfc,0x2b,0xe1,0xbf,\r
-0xb5,0xcf,0xff,0x00,0x3d,0xa4,0xff,0x00,0xbe,0x8d,0x58,0xb6,0xd7,0x35,0x2b,0x33,\r
-0x9b,0x7d,0x42,0xea,0x03,0xeb,0x1c,0xcc,0xbf,0xc8,0xd4,0xae,0x2a,0x87,0x5a,0x3f,\r
-0x8f,0xfc,0x01,0x7f,0x69,0x2e,0xb1,0xfc,0x4f,0xb6,0xb6,0xa9,0x3d,0x06,0x69,0xd9,\r
-0xe3,0x8a,0xf8,0xe6,0xd3,0xe2,0x37,0x8a,0x2c,0xbf,0xd5,0x6b,0xd7,0xff,0x00,0x47,\r
-0x9d,0x9c,0x7f,0xe3,0xd9,0xae,0x82,0xc3,0xe3,0xcf,0x8b,0xec,0x48,0xdf,0x75,0x05,\r
-0xea,0x8e,0xd3,0xc0,0xbf,0xcd,0x71,0x5d,0x74,0xf8,0x9f,0x0b,0x2f,0x8e,0x2d,0x7d,\r
-0xcc,0xda,0x39,0x85,0x37,0xba,0x68,0xfa,0xa2,0x90,0xf1,0x5e,0x27,0xe1,0x2f,0xda,\r
-0x22,0x6d,0x5f,0x53,0xb3,0xd3,0xef,0xb4,0x61,0xe6,0xdc,0xca,0x90,0xac,0x96,0xb2,\r
-0x7f,0x13,0x10,0x07,0xca,0xdf,0x5f,0x5a,0xf6,0xc1,0xc8,0x15,0xf4,0x78,0x4c,0x75,\r
-0x0c,0x74,0x5c,0xa8,0x4a,0xf6,0x3b,0xa9,0x56,0x85,0x65,0x78,0x30,0x56,0x0e,0xa0,\r
-0x8e,0x86,0x96,0x9a,0xab,0xb4,0x60,0x74,0xa7,0x57,0x79,0xb0,0x53,0x5c,0xe1,0x49,\r
-0xf4,0x14,0xea,0x8a,0xe9,0xfc,0xbb,0x69,0x5b,0xd1,0x09,0xfd,0x29,0x3d,0x80,0xf8,\r
-0x93,0xf6,0x80,0xb9,0xfb,0x47,0x8a,0xe4,0x5c,0xe7,0x04,0xd7,0x87,0xe8,0xfe,0x3c,\r
-0x97,0xe1,0x5f,0xc5,0x4f,0x09,0x78,0xaa,0x10,0x0a,0x5a,0x5f,0x24,0x57,0x0a,0x4e,\r
-0x03,0x41,0x27,0xee,0xe4,0x07,0xfe,0x02,0xc4,0x8f,0x70,0x3d,0x2b,0xd6,0xbe,0x33,\r
-0x5c,0x79,0xde,0x2d,0xb8,0x39,0xce,0x33,0x5f,0x2e,0x7c,0x77,0xba,0x30,0xe8,0x72,\r
-0xed,0x38,0x60,0xa4,0x8c,0x7a,0xd7,0xe7,0x18,0x29,0x37,0x8e,0x94,0x97,0x76,0x7e,\r
-0x39,0x8f,0xa9,0x25,0x9a,0x53,0x9c,0x77,0xe7,0x47,0xec,0x77,0xdb,0x61,0xff,0x00,\r
-0x9e,0xc9,0xf9,0xd1,0x5e,0x03,0xfd,0x91,0x7b,0xff,0x00,0x3f,0x72,0xff,0x00,0xdf,\r
-0x46,0x8a,0xfd,0x0f,0x9d,0x9f,0xaf,0x73,0x79,0x1f,0x44,0xd1,0x45,0x15,0xa9,0xa8,\r
-0x51,0x45,0x14,0x01,0x93,0xe2,0x9d,0x7a,0x1f,0x0b,0xf8,0x77,0x53,0xd5,0xae,0x48,\r
-0xf2,0x6c,0xed,0xde,0x76,0x1e,0xbb,0x41,0x38,0xfc,0x4f,0x15,0xf9,0xe8,0xf3,0x5d,\r
-0x78,0x97,0x5b,0x92,0x79,0x4b,0x4d,0x79,0x7d,0x39,0x76,0x3d,0x49,0x66,0x6c,0xff,\r
-0x00,0x5a,0xfa,0x97,0xf6,0xb9,0xf1,0x6b,0x69,0x9e,0x11,0xb1,0xd0,0xa0,0x90,0x2c,\r
-0xba,0x9c,0xdb,0xe5,0x51,0x8c,0xf9,0x51,0xf3,0xfa,0xb1,0x5f,0xc8,0xd7,0x8e,0x7e,\r
-0xce,0xde,0x11,0xff,0x00,0x84,0xa3,0xe2,0x15,0xa3,0xc8,0xbb,0xad,0xac,0xff,0x00,\r
-0x7e,0xfc,0x71,0xc7,0x41,0xf9,0xd7,0xc3,0xe7,0x33,0x78,0xac,0x54,0x30,0x90,0xfe,\r
-0x9b,0xff,0x00,0x80,0x7c,0x26,0x6f,0x27,0x8c,0xc7,0x53,0xc2,0x47,0x65,0xbf,0xab,\r
-0xff,0x00,0x80,0x7d,0x75,0xf0,0xeb,0xc3,0x51,0xf8,0x4f,0xc1,0xba,0x5e,0x9a,0x8b,\r
-0xb5,0xa2,0x84,0x17,0xf7,0x62,0x32,0x6b,0xa4,0x03,0x14,0x2f,0x02,0x96,0xbe,0xd2,\r
-0x9c,0x15,0x38,0x28,0x47,0x64,0x7d,0xc4,0x22,0xa1,0x15,0x15,0xb2,0x0a,0x28,0xa2,\r
-0xb4,0x2c,0x2b,0x88,0xf8,0xe1,0xe0,0x17,0xf8,0xa9,0xf0,0x77,0xc6,0xbe,0x0f,0x8e,\r
-0x5f,0x22,0x5d,0x73,0x48,0xba,0xb0,0x8e,0x53,0xfc,0x0f,0x24,0x4c,0xaa,0x7f,0x02,\r
-0x45,0x76,0xf4,0x84,0x66,0x80,0x3f,0x97,0xbf,0x12,0xf8,0x6f,0x53,0xf0,0x77,0x88,\r
-0x75,0x2d,0x0f,0x59,0xb3,0x97,0x4f,0xd5,0x74,0xeb,0x87,0xb5,0xba,0xb5,0x9d,0x70,\r
-0xf1,0x48,0xa4,0x86,0x52,0x3e,0xa2,0xb4,0xa7,0xf8,0x99,0xe2,0xdb,0x9f,0x06,0x0f,\r
-0x08,0x4d,0xe2,0x5d,0x56,0x6f,0x0b,0x09,0x56,0x71,0xa3,0x49,0x79,0x23,0x5a,0xac,\r
-0x8b,0x9d,0xac,0x23,0x27,0x68,0x23,0x27,0xa0,0xef,0x5f,0xbd,0xff,0x00,0xb4,0x67,\r
-0xec,0x2b,0xf0,0x9f,0xf6,0x99,0xb8,0x6d,0x4b,0xc4,0xba,0x3c,0xba,0x77,0x88,0xf6,\r
-0x04,0x1a,0xee,0x8f,0x20,0x82,0xe9,0x80,0x18,0x01,0xf8,0x29,0x26,0x07,0x03,0x7a,\r
-0x92,0x07,0x00,0x81,0x5f,0x2a,0x6a,0xbf,0xf0,0x44,0xcf,0x0c,0x49,0x76,0x0e,0x99,\r
-0xf1,0x3b,0x56,0xb6,0xb5,0xef,0x1d,0xde,0x9b,0x14,0xcf,0x8f,0xf7,0x95,0x90,0x7e,\r
-0x95,0x57,0x22,0xcf,0xa1,0xf9,0x77,0xe0,0xff,0x00,0x89,0x7e,0x2c,0xf8,0x7d,0x0e,\r
-0xa7,0x17,0x86,0x3c,0x45,0xa9,0x78,0x7d,0x75,0x38,0x84,0x17,0x9f,0xd9,0xb7,0x2f,\r
-0x03,0x4f,0x18,0x24,0x84,0x62,0xa4,0x12,0x32,0x4f,0x15,0xdb,0xfe,0xcf,0x3f,0xb3,\r
-0x4f,0x8e,0xff,0x00,0x6a,0x2f,0x1c,0x47,0xa3,0x78,0x5a,0xc6,0x49,0x63,0xf3,0x03,\r
-0x6a,0x1a,0xcd,0xc8,0x3f,0x66,0xb3,0x42,0x79,0x79,0x1f,0xb9,0xeb,0x85,0x19,0x66,\r
-0x3d,0x2b,0xf5,0x27,0xe1,0xef,0xfc,0x11,0xd7,0xe0,0xf7,0x86,0x2f,0xe1,0xbb,0xf1,\r
-0x1e,0xad,0xe2,0x0f,0x18,0x98,0xf9,0x36,0x97,0x17,0x0b,0x6b,0x6e,0xc7,0xdc,0x44,\r
-0xa1,0xff,0x00,0x0d,0xf5,0xf6,0xa7,0x82,0x3c,0x03,0xe1,0xcf,0x86,0xbe,0x1e,0xb6,\r
-0xd0,0x7c,0x2b,0xa2,0x58,0xf8,0x7f,0x47,0xb7,0x1f,0xbb,0xb3,0xd3,0xe0,0x58,0xa3,\r
-0x07,0xb9,0x20,0x0e,0x58,0xf7,0x63,0xc9,0xee,0x69,0x5c,0x12,0xee,0x71,0xdf,0xb3,\r
-0x97,0xec,0xfd,0xe1,0xbf,0xd9,0xab,0xe1,0x7e,0x9d,0xe0,0xcf,0x0d,0xc6,0x5a,0x38,\r
-0x7f,0x7b,0x77,0x7d,0x22,0x81,0x35,0xed,0xc3,0x01,0xbe,0x67,0x3e,0xa7,0x00,0x01,\r
-0xd8,0x00,0x07,0x02,0xb6,0x7e,0x30,0xf8,0x8c,0x78,0x6f,0xc0,0x7a,0x8c,0x8a,0xc1,\r
-0x6e,0x2e,0x57,0xec,0xb0,0xf3,0x83,0xb9,0xf8,0x24,0x7b,0x85,0xdc,0x7f,0x0a,0xed,\r
-0xeb,0xe7,0x8f,0xda,0x43,0xc4,0x5f,0x6b,0xd6,0x6c,0x34,0x68,0xdf,0x29,0x6b,0x19,\r
-0x9e,0x50,0x3a,0x6f,0x6e,0x07,0xe4,0x07,0xfe,0x3d,0x5e,0x2e,0x6f,0x89,0xfa,0xae,\r
-0x0e,0x73,0x5b,0xbd,0x17,0xab,0xd0,0xe7,0xc5,0x54,0xf6,0x74,0x9b,0x3c,0x6e,0x8a,\r
-0x28,0xaf,0xc6,0x0f,0x95,0x0a,0xf6,0xff,0x00,0xd9,0xcf,0xc2,0x90,0x5e,0xc5,0xaa,\r
-0xea,0xf7,0x76,0xf1,0x4e,0x99,0x16,0xd1,0x09,0x50,0x30,0xc8,0xf9,0x98,0xe0,0xfd,\r
-0x57,0xf5,0xaf,0x10,0xaf,0xb0,0xbe,0x1a,0x78,0x74,0xf8,0x63,0xc1,0x1a,0x4d,0x8b,\r
-0xa9,0x59,0xc4,0x5e,0x64,0xc0,0x8c,0x10,0xee,0x77,0x30,0xfc,0x09,0xc7,0xe1,0x5f,\r
-0x57,0xc3,0xb8,0x5f,0x6f,0x8b,0xf6,0x92,0x5a,0x45,0x7e,0x2f,0x44,0x7a,0x58,0x0a,\r
-0x7c,0xf5,0x79,0x9f,0x43,0x4e,0x4f,0x09,0xe8,0x93,0x0f,0xde,0x69,0x16,0x2f,0xf5,\r
-0xb6,0x43,0xfd,0x2b,0x36,0xf3,0xe1,0x87,0x85,0x2f,0x91,0x96,0x4d,0x02,0xc5,0x41,\r
-0xea,0x62,0x84,0x46,0x7f,0x35,0xc1,0xae,0x9c,0x0c,0x51,0x5f,0xa6,0xcb,0x0f,0x46,\r
-0x5f,0x14,0x13,0xf9,0x23,0xe8,0x1d,0x38,0x3d,0xd2,0x3c,0x33,0xe2,0x17,0xc0,0x1b,\r
-0x3b,0x6d,0x3a,0xe3,0x50,0xf0,0xf3,0xcb,0x1c,0x90,0xa1,0x76,0xb3,0x95,0xb7,0x87,\r
-0x03,0x93,0xb5,0x8f,0x39,0xfa,0x93,0x9f,0x6a,0xf0,0x8a,0xfb,0x2b,0xc7,0x7e,0x21,\r
-0x83,0xc3,0x3e,0x14,0xd4,0x6f,0xe6,0x20,0x6c,0x89,0x95,0x14,0xff,0x00,0x1b,0x91,\r
-0x85,0x1f,0x99,0xaf,0x8d,0x40,0xc0,0x02,0xbf,0x34,0xe2,0x2c,0x2e,0x1b,0x0d,0x5a,\r
-0x1e,0xc1,0x59,0xb5,0xaa,0x5f,0x81,0xe0,0x63,0xa9,0xc2,0x9c,0xd7,0x26,0x81,0x45,\r
-0x14,0x57,0xc9,0x1e,0x61,0x6f,0x49,0xb5,0x7b,0xed,0x56,0xce,0xde,0x21,0x99,0x25,\r
-0x99,0x23,0x5c,0x7a,0x96,0x00,0x7f,0x3a,0xfb,0x79,0x38,0x50,0x2b,0xe5,0xdf,0x81,\r
-0x3e,0x13,0x6f,0x10,0x78,0xce,0x2b,0xc9,0x13,0x75,0xa6,0x9a,0x3c,0xf7,0x24,0x70,\r
-0x64,0xe8,0x83,0xeb,0x9f,0x9b,0xfe,0x03,0x5f,0x51,0x81,0x5f,0xa5,0xf0,0xc5,0x09,\r
-0x53,0xc3,0xce,0xab,0xfb,0x4f,0x4f,0x91,0xef,0xe5,0xd0,0x71,0x83,0x93,0xea,0x61,\r
-0x78,0xdb,0xc3,0x4f,0xe2,0xff,0x00,0x0e,0x5d,0xe9,0x2b,0x78,0xf6,0x22,0xe3,0x68,\r
-0x69,0x91,0x37,0x10,0x03,0x02,0x46,0x32,0x3a,0xe3,0x15,0xe4,0xf2,0x7e,0xcc,0x63,\r
-0xf8,0x3c,0x40,0x7f,0xe0,0x56,0x9f,0xfd,0x9d,0x7b,0xb5,0x26,0x2b,0xe8,0x71,0x59,\r
-0x6e,0x17,0x19,0x25,0x3a,0xf0,0xbb,0xf5,0x67,0x75,0x4c,0x3d,0x3a,0xae,0xf3,0x57,\r
-0x3c,0x09,0xff,0x00,0x66,0x4b,0xaf,0xe0,0xd7,0xa1,0x3f,0xef,0x5b,0x11,0xff,0x00,\r
-0xb3,0x55,0x77,0xfd,0x99,0xf5,0x31,0xf7,0x35,0xab,0x46,0xfa,0xc4,0xc2,0xbe,0x85,\r
-0xc5,0x52,0xd6,0x35,0x38,0xb4,0x7d,0x2a,0xf2,0xfa,0x63,0x88,0xad,0xa2,0x79,0x58,\r
-0xfb,0x28,0x26,0xbc,0xe9,0xe4,0x39,0x72,0x4d,0xb8,0x5b,0xe6,0xff,0x00,0xcc,0xc1,\r
-0xe0,0xa8,0x2d,0x6c,0x7c,0x65,0xe2,0x0d,0x20,0xe8,0x1a,0xdd,0xee,0x9a,0xd7,0x11,\r
-0xdc,0xbd,0xac,0x86,0x26,0x92,0x20,0x42,0x96,0x1d,0x40,0xcf,0xa1,0xc8,0xfc,0x2b,\r
-0x3e,0xa6,0xbc,0xba,0x96,0xfe,0xee,0x6b,0x99,0xdb,0x7c,0xf3,0x3b,0x49,0x23,0x7a,\r
-0xb1,0x39,0x27,0xf3,0x35,0x0d,0x7e,0x51,0x53,0x95,0xcd,0xb8,0x2d,0x2f,0xa1,0xf3,\r
-0x4e,0xd7,0x76,0x0a,0x28,0xad,0x2f,0x0d,0xe9,0x2d,0xaf,0x78,0x83,0x4d,0xd3,0xd4,\r
-0x13,0xf6,0x9b,0x84,0x8c,0xe3,0xb2,0x93,0xc9,0xfc,0xb3,0x4a,0x10,0x75,0x24,0xa0,\r
-0xb7,0x6e,0xc1,0x15,0x76,0x91,0xd2,0xda,0xfc,0x17,0xf1,0x7d,0xe5,0xa4,0x37,0x30,\r
-0xe9,0x41,0xe2,0x99,0x04,0x88,0x7c,0xf8,0xc1,0xc1,0x19,0x19,0x05,0xb8,0xa4,0x93,\r
-0xe0,0xb7,0x8c,0xe3,0xeb,0xa2,0x39,0xff,0x00,0x76,0x68,0x8f,0xfe,0xcd,0x5f,0x59,\r
-0x43,0x1a,0xc5,0x12,0x22,0x8d,0xaa,0xa0,0x00,0x07,0x61,0x4e,0xc7,0xbd,0x7e,0x99,\r
-0xfe,0xac,0x61,0x1a,0x5e,0xf4,0xaf,0xea,0xbf,0xc8,0xf7,0xff,0x00,0xb3,0xa9,0xf7,\r
-0x67,0xc8,0x12,0x7c,0x2a,0xf1,0x6c,0x47,0xe6,0xd0,0x6e,0xcf,0xfb,0xaa,0x0f,0xf2,\r
-0x35,0xa1,0xe1,0x2f,0x86,0x1e,0x20,0x9b,0xc5,0x3a,0x52,0x5e,0xe8,0xb7,0x50,0x5a,\r
-0x7d,0xa5,0x1a,0x67,0x9a,0x22,0x10,0x20,0x39,0x6c,0x9f,0x70,0x31,0x5f,0x57,0x8a,\r
-0x31,0x44,0x38,0x67,0x0d,0x09,0xa9,0x29,0xbd,0x3d,0x06,0xb2,0xfa,0x69,0xde,0xec,\r
-0x07,0x02,0xb1,0x7c,0x59,0xe2,0xed,0x3f,0xc1,0xba,0x3c,0x9a,0x86,0xa1,0x2e,0xc8,\r
-0xc7,0xca,0x91,0xaf,0xdf,0x95,0xbb,0x2a,0x8e,0xe7,0xf9,0x75,0x35,0x7f,0x56,0xd5,\r
-0x6d,0xb4,0x4d,0x36,0xe6,0xfa,0xf2,0x51,0x0d,0xb4,0x08,0x64,0x91,0xcf,0x60,0x3f,\r
-0xcf,0x4a,0xf9,0x1b,0xe2,0x07,0x8e,0x6e,0xfc,0x77,0xae,0xbd,0xe4,0xe5,0xa3,0xb6,\r
-0x8c,0x95,0xb6,0xb7,0xcf,0x11,0x27,0xf8,0x9e,0xe7,0xfa,0x62,0xbd,0x1c,0xdb,0x34,\r
-0x8e,0x5d,0x4a,0xd1,0xd6,0x6f,0x65,0xfa,0xb3,0x7c,0x4e,0x21,0x50,0x8e,0x9b,0xb2,\r
-0x6f,0x1e,0x7c,0x48,0xd5,0x3c,0x79,0x78,0x5a,0xe5,0xcd,0xbd,0x8a,0x1c,0xc5,0x67,\r
-0x1b,0x1d,0x8b,0xe8,0x4f,0xf7,0x9b,0xdc,0xfe,0x18,0xae,0x4e,0x8a,0x2b,0xf2,0x5a,\r
-0xd5,0xaa,0x62,0x26,0xea,0x55,0x77,0x6c,0xf9,0x99,0x4e,0x53,0x7c,0xd2,0x7a,0x85,\r
-0x14,0x57,0x5d,0xe0,0x0f,0x86,0x9a,0xa7,0x8f,0xae,0x8f,0xd9,0x80,0xb7,0xb1,0x8d,\r
-0xb1,0x2d,0xe4,0x83,0xe5,0x1f,0xec,0x81,0xfc,0x4d,0xed,0xf9,0xd3,0xa3,0x46,0xa6,\r
-0x22,0x6a,0x9d,0x25,0x76,0xc7,0x08,0x4a,0xa4,0xb9,0x62,0xae,0xce,0x46,0xa7,0xb7,\r
-0xb1,0xb9,0xbc,0xff,0x00,0x51,0x6f,0x2c,0xf8,0xeb,0xe5,0xa1,0x6f,0xe5,0x5f,0x55,\r
-0xf8,0x5f,0xe0,0xe7,0x86,0x7c,0x35,0x12,0x11,0x60,0x97,0xf7,0x23,0x19,0x9e,0xf0,\r
-0x09,0x0e,0x7d,0x40,0x3f,0x28,0xfc,0x05,0x76,0xc9,0x0a,0x46,0x00,0x55,0x0a,0x07,\r
-0x18,0x03,0x02,0xbe,0xce,0x87,0x0b,0x54,0x94,0x6f,0x5a,0xa2,0x4f,0xb2,0x57,0xfc,\r
-0x74,0x3d,0x58,0x65,0xd2,0x7f,0x1c,0xac,0x7c,0x3f,0x71,0xa7,0x5d,0xda,0x0c,0xcf,\r
-0x6b,0x34,0x23,0xd6,0x48,0xca,0xff,0x00,0x31,0x55,0xeb,0xee,0x96,0x8d,0x5d,0x48,\r
-0x60,0x08,0x3d,0x8d,0x71,0xde,0x29,0xf8,0x4d,0xe1,0xcf,0x15,0x42,0xfe,0x6d,0x8a,\r
-0x59,0xdd,0x31,0x2c,0x2e,0xad,0x00,0x8d,0xf7,0x7a,0x9c,0x70,0xdf,0x88,0x34,0xeb,\r
-0xf0,0xb5,0x48,0xc6,0xf4,0x6a,0x5d,0xf6,0x6a,0xc1,0x3c,0xb9,0xa5,0xee,0x4a,0xe7,\r
-0xc8,0xf4,0x57,0x4b,0xe3,0xbf,0x02,0x5f,0xf8,0x0f,0x56,0xfb,0x25,0xd8,0xf3,0x61,\r
-0x93,0x2d,0x05,0xca,0x8c,0x2c,0x8b,0xfd,0x08,0xee,0x3d,0xeb,0x9a,0xaf,0x89,0xab,\r
-0x4a,0x74,0x26,0xe9,0xd4,0x56,0x68,0xf2,0x65,0x17,0x07,0xcb,0x2d,0xc2,0xac,0x69,\r
-0xfa,0x85,0xce,0x95,0x7b,0x0d,0xdd,0x9c,0xef,0x6d,0x73,0x0b,0x6e,0x8e,0x58,0xdb,\r
-0x05,0x4d,0x57,0xa2,0xb3,0x4d,0xc5,0xa7,0x1d,0x1a,0x25,0x3b,0x6a,0x8f,0xaa,0xfe,\r
-0x13,0xfc,0x4d,0x8f,0xc7,0x9a,0x61,0x86,0xe3,0x6c,0x5a,0xb5,0xb2,0x8f,0x3a,0x31,\r
-0xc0,0x91,0x7f,0xbe,0xbe,0xde,0xa3,0xb1,0xfa,0x8a,0xef,0xc5,0x7c,0x59,0xe1,0x3f,\r
-0x12,0xdc,0x78,0x47,0xc4,0x16,0x7a,0xad,0xb1,0x25,0xe0,0x6f,0x99,0x33,0xfe,0xb1,\r
-0x0f,0xde,0x53,0xf5,0x19,0xaf,0xb2,0xf4,0xeb,0xd8,0x75,0x2b,0x0b,0x7b,0xbb,0x77,\r
-0x12,0x41,0x3c,0x6b,0x24,0x6c,0x3a,0x15,0x23,0x20,0xd7,0xeb,0x39,0x16,0x64,0xf1,\r
-0xd4,0x5c,0x2a,0x3f,0x7e,0x3b,0xf9,0xae,0x8c,0xfa,0x5c,0x1d,0x77,0x5a,0x16,0x96,\r
-0xe8,0xb3,0x48,0x4e,0xd1,0x93,0x41,0xaf,0x29,0xf8,0xf9,0xe3,0x99,0x3c,0x3f,0xa2,\r
-0x45,0xa4,0xd9,0xc8,0x52,0xf3,0x50,0x07,0x7b,0x29,0xe5,0x22,0x1d,0x7f,0x3e,0x9f,\r
-0x4c,0xd7,0xb5,0x8b,0xc4,0xc3,0x07,0x46,0x55,0xa7,0xb2,0x3a,0xea,0xd4,0x54,0xa0,\r
-0xe6,0xfa,0x1c,0xff,0x00,0xc5,0x1f,0x8e,0xb2,0x2c,0xb3,0x69,0x5e,0x1b,0x94,0x2e,\r
-0xdc,0xa4,0xba,0x82,0xf3,0xcf,0x71,0x1f,0xff,0x00,0x15,0xf9,0x7a,0xd7,0x87,0x4f,\r
-0x3c,0xb7,0x33,0x3c,0xb3,0x48,0xf2,0xca,0xec,0x59,0x9d,0xd8,0xb3,0x31,0x3d,0x49,\r
-0x26,0x99,0x45,0x7e,0x39,0x8d,0xc7,0xd7,0xc7,0xd4,0xe7,0xaa,0xfd,0x17,0x44,0x7c,\r
-0xb5,0x5a,0xd3,0xac,0xef,0x20,0xa2,0x8a,0x2b,0xce,0x30,0x0a,0x2b,0xba,0xf0,0xbf,\r
-0xc1,0x8f,0x13,0x78,0xa2,0x14,0xb8,0x4b,0x64,0xb0,0xb5,0x7e,0x56,0x5b,0xc6,0x29,\r
-0xb8,0x7a,0x85,0x00,0x9f,0xd2,0xbb,0x28,0x3f,0x66,0x5b,0xb6,0x51,0xe7,0xeb,0xd1,\r
-0x21,0xee,0x23,0xb6,0x2d,0xfa,0x96,0x15,0xeb,0xd1,0xca,0x31,0xd5,0xd7,0x34,0x29,\r
-0xbb,0x79,0xe9,0xf9,0x9d,0x31,0xc3,0x56,0x9a,0xba,0x89,0xe2,0x74,0x57,0xb9,0x37,\r
-0xec,0xc6,0xf8,0xf9,0x7c,0x42,0x3f,0x1b,0x4f,0xfe,0xce,0xaa,0x5c,0x7e,0xcc,0xfa,\r
-0x8a,0xa9,0xf2,0x35,0xab,0x59,0x0f,0x61,0x24,0x2c,0x9f,0xc8,0x9a,0xdd,0xe4,0x59,\r
-0x82,0xff,0x00,0x97,0x7f,0x8a,0xff,0x00,0x32,0xfe,0xa7,0x5d,0x7d,0x93,0xc6,0x28,\r
-0xaf,0x47,0xd4,0xbe,0x01,0x78,0xb2,0xc4,0x33,0x43,0x05,0xb5,0xf2,0x8f,0xf9,0xe1,\r
-0x38,0xcf,0xe4,0xc0,0x57,0x15,0xac,0x78,0x6b,0x56,0xf0,0xfb,0xed,0xd4,0xb4,0xdb,\r
-0x9b,0x2e,0x70,0x1a,0x68,0xc8,0x53,0xf4,0x3d,0x0d,0x79,0xd5,0xb0,0x58,0x9c,0x3e,\r
-0xb5,0x69,0xb5,0xf2,0x30,0x95,0x2a,0x90,0xf8,0xa3,0x63,0xac,0xf8,0x1d,0xa4,0x0d,\r
-0x57,0xe2,0x25,0x83,0x32,0x6e,0x8e,0xd5,0x5e,0xe1,0xbd,0xb0,0x30,0xa7,0xfe,0xfa,\r
-0x65,0xaf,0xab,0x07,0x4a,0xf0,0x8f,0xd9,0x9f,0x48,0x05,0xb5,0x9d,0x51,0x97,0xfb,\r
-0x96,0xc8,0x7f,0xf1,0xe6,0xff,0x00,0xd9,0x6b,0xde,0x2b,0xf4,0xce,0x1d,0xa3,0xec,\r
-0xb0,0x2a,0x5f,0xcc,0xdb,0xfd,0x3f,0x43,0xe8,0x30,0x30,0xe5,0xa3,0x7e,0xe1,0x45,\r
-0x14,0x57,0xd3,0x9e,0x80,0x55,0x2d,0x66,0x4f,0x2b,0x4a,0xbb,0x6f,0x48,0xcd,0x5d,\r
-0xac,0x7f,0x16,0xcb,0xe4,0x78,0x7a,0xf9,0xff,0x00,0xe9,0x99,0xac,0xea,0x3b,0x41,\r
-0xb2,0x64,0xed,0x16,0xcf,0x83,0x7e,0x27,0xcf,0xe7,0x78,0xa6,0xf4,0x83,0x9c,0x12,\r
-0x3f,0x5a,0xf9,0xc3,0xe2,0xbc,0x5f,0xda,0x1a,0xa6,0x95,0x65,0xb7,0x79,0xb8,0xbd,\r
-0x82,0x1d,0x9d,0x77,0x6e,0x91,0x57,0x1f,0xad,0x7d,0x01,0xe3,0xa9,0xbc,0xdd,0x7a,\r
-0xf5,0xb3,0x9f,0x9c,0x8a,0xf1,0x3b,0xa8,0x3f,0xb4,0xfe,0x36,0xfc,0x3b,0xb2,0xed,\r
-0x37,0x88,0xf4,0xe4,0xfa,0x8f,0xb4,0xc7,0xfe,0x15,0xf9,0xde,0x54,0xb9,0xb1,0x2d,\r
-0xf9,0xfe,0xa7,0xe3,0x33,0x5e,0xd7,0x36,0xa4,0xbf,0xbc,0x7e,0xb6,0xff,0x00,0x61,\r
-0x5a,0xff,0x00,0xcf,0xba,0xfe,0x54,0x56,0xad,0x15,0xfa,0x2f,0x2a,0x3f,0x66,0xb2,\r
-0x1f,0x45,0x14,0x55,0x94,0x14,0xd2,0x69,0xd5,0xc8,0xfc,0x55,0xf1,0x6f,0xfc,0x21,\r
-0x1e,0x01,0xd6,0xb5,0x75,0x60,0xb3,0xc3,0x09,0x48,0x33,0x8f,0xf5,0xad,0xf2,0xa7,\r
-0x07,0xaf,0x24,0x1c,0x7b,0x56,0x75,0x26,0xa9,0xc1,0xce,0x5b,0x23,0x3a,0x93,0x54,\r
-0xa0,0xe7,0x2d,0x96,0xa7,0xc8,0x5f,0x1f,0xbc,0x5f,0xff,0x00,0x09,0x8f,0xc4,0xfd,\r
-0x4e,0x48,0xa4,0x2f,0x69,0x64,0x45,0x94,0x18,0x24,0x8c,0x26,0x77,0x11,0xf5,0x62,\r
-0xdf,0xa5,0x7b,0xc7,0xec,0xaf,0xe1,0x1f,0xec,0x7f,0x08,0x4d,0xab,0x4a,0x98,0x9a,\r
-0xf9,0xfe,0x52,0x47,0x3b,0x05,0x7c,0xa9,0xa0,0x69,0x73,0xf8,0x83,0x5d,0xb5,0xb3,\r
-0x8c,0x19,0x66,0xb9,0x98,0x2f,0xa9,0x24,0x9e,0x4d,0x7e,0x85,0x78,0x67,0x45,0x8b,\r
-0xc3,0xfa,0x0d,0x8e,0x9f,0x12,0x85,0x4b,0x78,0x95,0x30,0x3d,0x40,0xe6,0xbe,0x27,\r
-0x28,0x83,0xc5,0xe3,0x27,0x8a,0x9f,0x4f,0xcd,0xff,0x00,0xc0,0x3e,0x27,0x23,0x84,\r
-0xb1,0x58,0x9a,0x98,0xc9,0xff,0x00,0x57,0x34,0xc5,0x2d,0x14,0x57,0xdd,0x1f,0x74,\r
-0x14,0x51,0x45,0x00,0x32,0x49,0x16,0x18,0xd9,0xdd,0x82,0x22,0x82,0x59,0x98,0xe0,\r
-0x01,0xea,0x6b,0xe0,0x7f,0xda,0x6b,0xfe,0x0a,0xd3,0xe0,0xaf,0x85,0x9a,0x95,0xe7,\r
-0x87,0xbe,0x1e,0x69,0xc9,0xe3,0xcd,0x72,0xdd,0x8c,0x73,0x5f,0xb4,0xa6,0x3d,0x36,\r
-0x17,0x07,0x95,0x0e,0x3e,0x69,0x88,0xff,0x00,0x67,0x0b,0xfe,0xd7,0x5a,0xe2,0xbf,\r
-0xe0,0xad,0x3f,0xb5,0xed,0xe7,0x84,0xed,0x62,0xf8,0x37,0xe1,0x3b,0xf6,0xb6,0xbe,\r
-0xd4,0x2d,0xc5,0xc7,0x88,0x6e,0xa0,0x7c,0x3c,0x76,0xef,0xfe,0xae,0xd8,0x10,0x78,\r
-0x2e,0x3e,0x66,0xff,0x00,0x64,0xa8,0xe8,0xc6,0xbe,0x5a,0xfd,0x8a,0x7f,0xe0,0x9d,\r
-0x9a,0xff,0x00,0xed,0x53,0xa7,0xc9,0xe2,0x9d,0x5f,0x55,0x3e,0x15,0xf0,0x3c,0x53,\r
-0x18,0x12,0xed,0x21,0xf3,0x2e,0x6f,0x5d,0x71,0xb9,0x61,0x52,0x40,0x0a,0xbd,0x0b,\r
-0xb6,0x46,0x78,0x00,0xe0,0xe1,0x92,0xfc,0x8c,0xef,0x1a,0xff,0x00,0xc1,0x51,0x7f,\r
-0x68,0x5f,0x17,0xcd,0x37,0x91,0xe2,0xeb,0x7f,0x0e,0xdb,0x3b,0x16,0x5b,0x7d,0x1b,\r
-0x4f,0x86,0x30,0x83,0xb0,0x0e,0xea,0xcf,0xf9,0xb5,0x7d,0x1d,0xff,0x00,0x04,0xc4,\r
-0xf8,0xc5,0xf1,0xb7,0xf6,0x81,0xf8,0xe3,0x7d,0x71,0xe2,0x9f,0x88,0x1a,0xe6,0xad,\r
-0xe0,0xff,0x00,0x0f,0xd8,0xbd,0xd5,0xe5,0xb5,0xc3,0x29,0x86,0x79,0xe4,0xcc,0x70,\r
-0xc4,0xc7,0x6e,0x47,0x57,0x93,0x03,0xfe,0x79,0x57,0xc9,0xbf,0xb7,0x6f,0xc0,0x4f,\r
-0x01,0xfe,0xcd,0x7f,0x18,0x6d,0xbc,0x0b,0xe0,0x8d,0x57,0x58,0xd5,0xde,0xd7,0x4f,\r
-0x8e,0xe3,0x53,0x9f,0x57,0x9e,0x29,0x19,0x27,0x90,0x96,0x58,0xc0,0x8e,0x34,0x0b,\r
-0x88,0xf6,0x31,0xce,0x7f,0xd6,0x0e,0x98,0xaf,0xd3,0xef,0xf8,0x25,0x5f,0xc1,0x81,\r
-0xf0,0xbf,0xf6,0x5f,0xb1,0xd7,0x2e,0xad,0xfc,0xad,0x5f,0xc5,0xf3,0x9d,0x56,0x56,\r
-0x3f,0x7b,0xec,0xff,0x00,0x72,0xdd,0x7d,0x86,0xd0,0x5b,0xfe,0xda,0x50,0x08,0x8f,\r
-0xe3,0x97,0xfc,0x15,0x17,0xc0,0x9f,0x00,0x7e,0x2c,0xeb,0xfe,0x01,0xd7,0xfc,0x21,\r
-0xe2,0x5b,0xbd,0x43,0x48,0x92,0x34,0x92,0xea,0xc4,0x5b,0xb4,0x32,0x07,0x89,0x24,\r
-0x56,0x5d,0xd2,0x29,0xe8,0xe3,0xb7,0x50,0x6b,0xe8,0x3f,0xd9,0xdb,0xe3,0xe6,0x87,\r
-0xfb,0x4a,0xfc,0x30,0xb3,0xf1,0xc7,0x87,0x6c,0xef,0xac,0x34,0xcb,0x99,0xe5,0xb7,\r
-0x58,0x35,0x15,0x45,0x98,0x34,0x6d,0xb5,0xb2,0x15,0x98,0x63,0x3d,0x39,0xaf,0xc2,\r
-0xdf,0xdb,0xb3,0xc7,0x76,0x9f,0x11,0xbf,0x6b,0x6f,0x89,0x5a,0xcd,0x84,0xbe,0x75,\r
-0x90,0xd4,0xbe,0xc5,0x13,0x8e,0x84,0x5b,0xc6,0x90,0x12,0x3d,0x8b,0x46,0xc7,0xf1,\r
-0xaf,0xd8,0xaf,0xf8,0x27,0x2f,0x81,0x67,0xf0,0x0f,0xec,0x75,0xf0,0xfa,0xd2,0xe5,\r
-0x59,0x2e,0x2f,0xed,0xa4,0xd5,0x59,0x58,0x60,0x81,0x71,0x2b,0x4a,0x9f,0xf8,0xe3,\r
-0x2d,0x03,0x4f,0x53,0xe9,0x19,0xa7,0x5b,0x78,0x9e,0x49,0x18,0x24,0x68,0xa5,0x99,\r
-0x98,0xe0,0x00,0x3b,0xd7,0xc5,0xfe,0x2d,0xd7,0x5f,0xc4,0xde,0x25,0xd4,0x75,0x37,\r
-0x27,0xfd,0x22,0x66,0x65,0x07,0xb2,0x74,0x51,0xf8,0x00,0x05,0x7d,0x29,0xf1,0xbf,\r
-0xc4,0x5f,0xd8,0x1e,0x01,0xbc,0x54,0x70,0xb7,0x17,0xc4,0x5a,0x46,0x3d,0x43,0x7d,\r
-0xff,0x00,0xfc,0x74,0x37,0xe9,0x5f,0x2a,0x57,0xe7,0x1c,0x51,0x8a,0xe6,0x9c,0x30,\r
-0xeb,0xa6,0xaf,0xe7,0xb1,0xe1,0xe6,0x15,0x2f,0x25,0x4f,0xe6,0x14,0x51,0x45,0x7c,\r
-0x29,0xe3,0x9a,0x5e,0x1a,0x92,0xc6,0x2d,0x7f,0x4f,0x93,0x52,0x25,0x6c,0x23,0x99,\r
-0x5e,0x6d,0xab,0xb8,0x95,0x07,0x24,0x60,0x7a,0xe3,0x1f,0x8d,0x7d,0x2b,0x1f,0xc7,\r
-0x9f,0x06,0xb0,0x03,0xed,0xf2,0xaf,0xd6,0xda,0x4f,0xf0,0xaf,0x96,0x28,0xaf,0x6b,\r
-0x01,0x9b,0x56,0xcb,0xa3,0x28,0xd2,0x49,0xdf,0xbf,0xfc,0x39,0xd7,0x47,0x13,0x3a,\r
-0x09,0xa8,0xad,0xcf,0xaa,0xcf,0xc7,0x5f,0x06,0x81,0x9f,0xed,0x37,0xff,0x00,0xc0,\r
-0x69,0x3f,0xf8,0x9a,0xc7,0xd6,0x3f,0x68,0xcf,0x0e,0xda,0x44,0xc2,0xc6,0xde,0xef,\r
-0x50,0x97,0xb0,0xd9,0xe5,0xaf,0xe2,0x4f,0x3f,0xa5,0x7c,0xd9,0x45,0x7a,0x53,0xe2,\r
-0x6c,0x6c,0x95,0x92,0x8a,0xf9,0x7f,0xc1,0x37,0x79,0x85,0x67,0xb5,0x8e,0xa7,0xc7,\r
-0x5f,0x11,0x35,0x5f,0x1e,0xdd,0xab,0xde,0x32,0xc3,0x69,0x19,0x26,0x1b,0x48,0xbe,\r
-0xe2,0x7b,0x9f,0x53,0xee,0x7f,0x0c,0x57,0x2d,0x45,0x6b,0xe9,0x1e,0x12,0xd6,0xb5,\r
-0xed,0xa7,0x4f,0xd2,0xee,0xae,0x91,0xba,0x3c,0x71,0x1d,0x9f,0xf7,0xd7,0x4f,0xd6,\r
-0xbe,0x72,0x73,0xad,0x8b,0xa8,0xe5,0x2b,0xca,0x4f,0xe6,0x70,0xc9,0xce,0xac,0xae,\r
-0xf5,0x66,0x45,0x69,0x78,0x7b,0xc3,0xb7,0xfe,0x29,0xd5,0x21,0xd3,0xf4,0xe8,0x0c,\r
-0xd7,0x12,0x1f,0xf8,0x0a,0x0e,0xec,0xc7,0xb0,0x15,0xe9,0x5e,0x18,0xfd,0x9d,0x75,\r
-0x7d,0x45,0xd2,0x4d,0x66,0xe2,0x3d,0x36,0x0e,0x09,0x8a,0x32,0x24,0x94,0x8f,0x4e,\r
-0x38,0x1f,0x99,0xfa,0x57,0xb9,0x78,0x4f,0xc1,0x7a,0x57,0x82,0xec,0x3e,0xcb,0xa6,\r
-0x5b,0x08,0xb3,0x83,0x24,0xad,0xcc,0x92,0x1f,0x56,0x6e,0xff,0x00,0x4e,0x83,0xb0,\r
-0x15,0xf4,0x79,0x7f,0x0f,0xe2,0x31,0x12,0x52,0xc4,0x2e,0x48,0xfe,0x2f,0xfa,0xf3,\r
-0x3b,0xa8,0x60,0xa7,0x37,0x79,0xe8,0x8a,0xfe,0x01,0xf0,0x5d,0xaf,0x81,0xbc,0x3f,\r
-0x0e,0x9f,0x6e,0x7c,0xc9,0x4f,0xcf,0x3c,0xf8,0xc1,0x95,0xcf,0x53,0xf4,0xec,0x3d,\r
-0x85,0x74,0xb4,0x94,0xb5,0xfa,0x7d,0x2a,0x51,0xa3,0x05,0x4e,0x0a,0xc9,0x1f,0x43,\r
-0x18,0xa8,0xa5,0x15,0xb0,0x51,0x45,0x15,0xa9,0x41,0x5e,0x6f,0xf1,0xeb,0x5c,0xfe,\r
-0xc9,0xf0,0x05,0xc4,0x0a,0xdb,0x65,0xbe,0x91,0x6d,0xd7,0x1e,0x99,0xdc,0xdf,0xa0,\r
-0x23,0xf1,0xaf,0x47,0x3d,0x2b,0xe7,0x8f,0xda,0x4f,0x5b,0xfb,0x4e,0xbd,0xa6,0x69,\r
-0x68,0xdf,0x25,0xac,0x26,0x67,0x03,0xfb,0xce,0x70,0x3f,0x20,0xbf,0xad,0x78,0x79,\r
-0xd5,0x7f,0xab,0xe0,0x6a,0x49,0x6e,0xf4,0xfb,0xce,0x4c,0x5c,0xf9,0x28,0xc9,0x9e,\r
-0x39,0x45,0x14,0x57,0xe3,0x67,0xca,0x85,0x7a,0x67,0xec,0xfb,0xa2,0xff,0x00,0x69,\r
-0x78,0xec,0x5d,0xba,0x93,0x1d,0x84,0x0d,0x2e,0x7b,0x07,0x6f,0x95,0x41,0xfc,0x0b,\r
-0x1f,0xc2,0xbc,0xce,0xbe,0x89,0xfd,0x9b,0x74,0x41,0x6b,0xe1,0xdd,0x47,0x54,0x65,\r
-0x22,0x4b,0xc9,0xc4,0x4a,0x4f,0x42,0x91,0x8e,0x08,0xfc,0x59,0x87,0xe1,0x5e,0xf6,\r
-0x47,0x43,0xdb,0xe3,0xe0,0x9e,0xcb,0x5f,0xbb,0xfe,0x09,0xd9,0x84,0x87,0x3d,0x68,\r
-0xf9,0x6a,0x7b,0x08,0xe9,0x4b,0x45,0x15,0xfb,0x11,0xf5,0x21,0x48,0x4e,0x29,0x6a,\r
-0x9e,0xad,0xa8,0xc5,0xa4,0xe9,0xb7,0x57,0xb3,0x9c,0x43,0x6f,0x13,0x4a,0xe7,0xd9,\r
-0x41,0x27,0xf9,0x54,0xc9,0xa8,0xa6,0xde,0xc2,0x6e,0xda,0xb3,0xc3,0x3f,0x68,0x9f,\r
-0x1b,0xb5,0xc5,0xdc,0x3e,0x1b,0xb5,0x90,0x88,0xa2,0x02,0x6b,0xbd,0xa7,0xef,0x31,\r
-0xe5,0x50,0xfd,0x07,0xcd,0x8f,0x71,0xe9,0x5e,0x27,0x57,0x35,0x9d,0x52,0x7d,0x6f,\r
-0x55,0xbb,0xd4,0x2e,0x4e,0x67,0xb9,0x95,0xa5,0x7f,0xa9,0x39,0xc7,0xd0,0x74,0xfc,\r
-0x2a,0x9d,0x7e,0x25,0x98,0x62,0xe5,0x8d,0xc4,0xca,0xb3,0xdb,0xa7,0xa7,0x43,0xe4,\r
-0xab,0xd5,0x75,0xaa,0x39,0x30,0xa2,0x8a,0x2b,0xce,0x30,0x3a,0x5f,0x87,0xde,0x0a,\r
-0x9f,0xc7,0x5e,0x22,0x86,0xc2,0x32,0x63,0xb7,0x5f,0xde,0x5c,0x4c,0x07,0xdc,0x8f,\r
-0xbf,0xe2,0x7a,0x0f,0xfe,0xb5,0x7d,0x71,0xa3,0x69,0x16,0x9a,0x16,0x9b,0x05,0x8d,\r
-0x8c,0x2b,0x6f,0x6b,0x02,0xed,0x48,0xd0,0x71,0xf5,0x3e,0xa4,0xf5,0x27,0xa9,0xae,\r
-0x13,0xe0,0x4f,0x84,0xd7,0xc3,0xde,0x0d,0x8a,0xf2,0x44,0x02,0xf3,0x52,0xc5,0xc3,\r
-0x92,0x39,0x11,0xff,0x00,0xcb,0x31,0xf9,0x73,0xf5,0x63,0x5e,0x93,0x5f,0xad,0x64,\r
-0x59,0x7c,0x70,0x98,0x75,0x52,0x4b,0xdf,0x9e,0xaf,0xc9,0x74,0x47,0xd2,0xe0,0xe8,\r
-0x2a,0x54,0xd4,0x9e,0xec,0x4a,0x5a,0x28,0xaf,0xa6,0x3d,0x00,0xa2,0x8a,0x28,0x03,\r
-0x8c,0xf8,0xb1,0xe1,0x58,0xbc,0x55,0xe0,0xbb,0xe8,0x76,0x03,0x75,0x6e,0x86,0xe2,\r
-0xdd,0xb1,0xc8,0x75,0x19,0xc0,0xfa,0x8c,0x8f,0xc6,0xbe,0x47,0xaf,0xb9,0xe4,0x50,\r
-0xe8,0x54,0x8c,0x82,0x30,0x6b,0xe2,0x0d,0x46,0x11,0x6f,0xa8,0xdd,0x42,0x3a,0x47,\r
-0x2b,0xa0,0xfc,0x09,0x15,0xf9,0xd7,0x14,0xd0,0x8c,0x67,0x4e,0xb2,0xdd,0xdd,0x3f,\r
-0x91,0xe1,0x66,0x30,0x49,0xc6,0x5d,0xca,0xf4,0x51,0x45,0x7c,0x21,0xe3,0x85,0x7d,\r
-0x49,0xf0,0x17,0x5a,0x6d,0x57,0xe1,0xf5,0xb4,0x4e,0xe5,0xe4,0xb2,0x95,0xed,0xc9,\r
-0x3e,0x83,0xe6,0x51,0xf8,0x2b,0x01,0xf8,0x57,0xcb,0x75,0xf4,0x27,0xec,0xcf,0x29,\r
-0x3a,0x0e,0xb3,0x1f,0x65,0xba,0x56,0xfc,0xd3,0x1f,0xd2,0xbe,0xa7,0x86,0xea,0x38,\r
-0x63,0x94,0x57,0x54,0xff,0x00,0xcc,0xf4,0x70,0x12,0x6a,0xb5,0xbb,0x9e,0xcc,0x6b,\r
-0xe5,0x2f,0x8e,0x1a,0x9b,0xea,0x3f,0x11,0xb5,0x14,0x66,0x2d,0x1d,0xa8,0x48,0x23,\r
-0x1e,0x80,0x28,0x27,0xff,0x00,0x1e,0x66,0xaf,0xab,0x3b,0x57,0xc8,0xdf,0x17,0x6d,\r
-0x5a,0xd3,0xe2,0x3e,0xb8,0xad,0xd5,0xa6,0x12,0x0f,0xa3,0x28,0x23,0xf9,0xd7,0xd3,\r
-0x71,0x3c,0xa4,0xb0,0x91,0x4b,0x67,0x2f,0xd1,0x9d,0xf9,0x83,0xfd,0xd2,0xf5,0x38,\r
-0xfa,0x28,0xa2,0xbf,0x30,0x3e,0x7c,0x2b,0xb7,0xf8,0x35,0xa3,0xd9,0xeb,0x5e,0x3f,\r
-0xb0,0x8a,0xf7,0x6b,0x45,0x18,0x69,0x96,0x37,0xe4,0x48,0xca,0x32,0xa3,0xf3,0xe7,\r
-0xf0,0xae,0x22,0xac,0xe9,0xba,0x8d,0xce,0x91,0x7f,0x05,0xed,0xa4,0xcd,0x05,0xcc,\r
-0x0e,0x1e,0x39,0x13,0xaa,0x91,0x5d,0x38,0x6a,0x91,0xa3,0x5e,0x15,0x26,0xae,0x93,\r
-0x4e,0xc5,0xd3,0x92,0x8c,0xd4,0x9e,0xc7,0xdb,0xea,0x38,0xc5,0x3b,0x15,0xe2,0xbe,\r
-0x10,0xfd,0xa3,0x2c,0xe7,0x8d,0x21,0xf1,0x0d,0xb3,0xda,0xcc,0x38,0x37,0x56,0xeb,\r
-0xba,0x33,0xee,0x57,0xa8,0xfc,0x33,0x5e,0xa7,0xa3,0x78,0xbb,0x46,0xf1,0x0a,0x06,\r
-0xd3,0xb5,0x2b,0x6b,0xbf,0x55,0x8e,0x41,0xb8,0x7d,0x57,0xa8,0xaf,0xd9,0x70,0xb9,\r
-0x86,0x17,0x16,0x93,0xa5,0x35,0xe9,0xd7,0xee,0x3e,0xae,0x9d,0x7a,0x75,0x7e,0x16,\r
-0x6b,0xe2,0x82,0x29,0x37,0x52,0xe6,0xbd,0x23,0x70,0xc7,0xe3,0x4c,0x9e,0xde,0x3b,\r
-0x98,0xda,0x39,0x51,0x64,0x8d,0x86,0x19,0x1d,0x72,0x08,0xf4,0x22,0xa4,0xa2,0x95,\r
-0x93,0xdc,0x2c,0x50,0xd2,0x74,0x2b,0x0d,0x06,0x29,0x62,0xd3,0xed,0x21,0xb3,0x8a,\r
-0x49,0x0c,0xad,0x1c,0x08,0x15,0x4b,0x10,0x01,0x38,0x1f,0x41,0x57,0xe8,0xa2,0x94,\r
-0x62,0xa2,0xad,0x15,0x64,0x24,0x92,0xd1,0x05,0x14,0x51,0x54,0x30,0xae,0x67,0xe2,\r
-0x24,0xfe,0x47,0x85,0x2f,0x5b,0xa1,0xdb,0x8a,0xe9,0xab,0x88,0xf8,0xbd,0x71,0xf6,\r
-0x7f,0x07,0xdc,0x1c,0xe3,0x3f,0xe1,0x5c,0xb8,0xa9,0x72,0xd0,0x9b,0xf2,0x66,0x35,\r
-0x9d,0xa9,0xc9,0x9f,0x08,0x78,0xa6,0x5d,0xfa,0x9d,0xe3,0x67,0xf8,0xcd,0x79,0xb7,\r
-0xc3,0x9b,0x15,0xd7,0x3f,0x6a,0xdf,0x86,0x16,0x6f,0xc8,0x1a,0xd4,0x73,0xe3,0xde,\r
-0x25,0x69,0x47,0xea,0x95,0xdf,0x6b,0xaf,0xba,0x7b,0x86,0xf5,0x63,0x5c,0x9f,0xec,\r
-0xe3,0x0b,0xea,0x3f,0xb6,0xaf,0xc3,0xb4,0x0b,0xb9,0x21,0x96,0xf6,0x66,0xf6,0x0b,\r
-0x67,0x3e,0x0f,0xe6,0x45,0x7c,0x36,0x48,0xaf,0x56,0xe7,0xe4,0x38,0x15,0xed,0x33,\r
-0x9a,0x5e,0xad,0x9f,0xab,0x7b,0x68,0xa5,0xcd,0x15,0xfa,0x21,0xfb,0x08,0xb4,0x51,\r
-0x45,0x22,0xc4,0xcd,0x7c,0xcb,0xfb,0x60,0xf8,0xbc,0xee,0xd1,0xfc,0x33,0x0b,0xe0,\r
-0x1c,0xdf,0x5c,0x80,0x4f,0xba,0xc6,0x3e,0x9f,0x7c,0xfe,0x02,0xbe,0x97,0x95,0xc4,\r
-0x68,0xce,0xc4,0x2a,0xa8,0x24,0x92,0x70,0x00,0xaf,0xcf,0xaf,0x89,0xbe,0x2c,0x93,\r
-0xc6,0xfe,0x3c,0xd6,0x35,0x56,0x72,0xf1,0x4b,0x39,0x8e,0x01,0x9c,0x85,0x89,0x7e,\r
-0x54,0xc7,0xe0,0x33,0xf8,0xd7,0xce,0x67,0x98,0x8f,0x63,0x86,0xf6,0x6b,0x79,0x69,\r
-0xf2,0xea,0x7c,0xc7,0x10,0x62,0x7d,0x96,0x17,0xd9,0x47,0x79,0xbb,0x7c,0xba,0x9e,\r
-0x89,0xfb,0x2d,0x78,0x47,0xfb,0x6b,0xc6,0x8d,0xa9,0xcb,0x1e,0xe8,0x2c,0x17,0x70,\r
-0x27,0xa6,0xf3,0xd2,0xbe,0xc4,0x1d,0x2b,0xca,0x3f,0x67,0x0f,0x08,0xff,0x00,0xc2,\r
-0x37,0xf0,0xfe,0x09,0xe4,0x4d,0xb7,0x17,0xc7,0xce,0x62,0x47,0x38,0xed,0x5e,0xaf,\r
-0x5d,0x19,0x3e,0x1f,0xd8,0x61,0x63,0x7d,0xe5,0xab,0xf9,0xff,0x00,0xc0,0x3d,0x0c,\r
-0xab,0x0d,0xf5,0x6c,0x24,0x62,0xf7,0x7a,0xb1,0x68,0xa2,0x8a,0xf6,0xcf,0x5c,0x29,\r
-0x09,0xa5,0xa4,0xc5,0x00,0x7f,0x37,0xdf,0xb5,0x6f,0x8c,0xaf,0x3c,0x7d,0xfb,0x4a,\r
-0x7c,0x4c,0xd6,0xef,0x9c,0xc9,0x34,0xda,0xfd,0xe4,0x28,0x4f,0x55,0x8a,0x29,0x4c,\r
-0x51,0x2f,0xe1,0x1c,0x68,0x3f,0x0a,0xfd,0x53,0xfd,0x82,0x7f,0x6c,0xcf,0x83,0xf6,\r
-0x1f,0xb3,0x47,0x85,0xfc,0x31,0xa9,0xf8,0xa7,0x4c,0xf0,0xae,0xbb,0xe1,0xbb,0x13,\r
-0x6f,0x77,0xa7,0x6a,0x93,0xad,0xb1,0x99,0x94,0xb3,0x19,0x62,0x67,0x20,0x49,0xbf,\r
-0x24,0xe0,0x1c,0xe4,0x90,0x47,0x4a,0xf8,0x47,0xfe,0x0a,0x39,0xfb,0x2b,0x78,0x83,\r
-0xe0,0x87,0xc7,0x0f,0x10,0xf8,0xa2,0x1d,0x3e,0x69,0xfc,0x11,0xe2,0x7b,0xf9,0x75,\r
-0x1b,0x2d,0x4a,0x35,0xdd,0x1c,0x32,0xca,0xdb,0xe5,0x82,0x4c,0x0f,0x91,0x83,0xb3,\r
-0x6d,0xcf,0x55,0x23,0x07,0x39,0x03,0xe4,0x43,0xc7,0x19,0xaa,0x22,0xf6,0x67,0xaf,\r
-0x6b,0x7a,0xcd,0xcf,0xed,0x4b,0xfb,0x51,0x5c,0xea,0x1a,0x95,0xf2,0x58,0x0f,0x17,\r
-0x78,0x83,0x32,0x5d,0x5d,0xca,0xa8,0xb6,0x76,0xaf,0x20,0x03,0x73,0x36,0x00,0x11,\r
-0xc2,0x00,0xe7,0xfb,0x95,0xfa,0x69,0xfb,0x5b,0xff,0x00,0xc1,0x44,0x3e,0x1f,0x7c,\r
-0x15,0xf8,0x50,0xfe,0x01,0xf8,0x43,0xac,0xda,0x78,0x83,0xc4,0xc7,0x4f,0x5d,0x32,\r
-0xd2,0xe7,0x49,0x71,0x2d,0xa6,0x95,0x08,0x4f,0x2c,0x48,0x65,0x19,0x57,0x90,0x28,\r
-0xf9,0x55,0x49,0xc1,0xc1,0x38,0xc6,0x0f,0xe3,0x6f,0x5a,0xf5,0x3f,0x80,0xff,0x00,\r
-0xb3,0x47,0xc4,0x3f,0xda,0x3b,0xc4,0x91,0x69,0x3e,0x0b,0xd0,0x66,0xbc,0x8b,0x78,\r
-0x17,0x3a,0x9c,0xe0,0xc7,0x65,0x6a,0x33,0xcb,0x4b,0x2e,0x30,0x31,0x9f,0xba,0x32,\r
-0xc7,0xb0,0x34,0x09,0x17,0x3f,0x65,0xcf,0x80,0x7a,0xc7,0xed,0x37,0xf1,0xb7,0x43,\r
-0xf0,0x8d,0x92,0xcc,0x6d,0x27,0x9b,0xed,0x3a,0xb5,0xf8,0xc9,0xfb,0x35,0xa2,0x90,\r
-0x65,0x90,0x9e,0x79,0x3f,0x75,0x73,0xd5,0x99,0x6b,0xfa,0x2e,0xd2,0xb4,0xcb,0x6d,\r
-0x13,0x4b,0xb4,0xd3,0xec,0xa2,0x58,0x2c,0xed,0x21,0x48,0x21,0x89,0x06,0x02,0x22,\r
-0xa8,0x55,0x03,0xe8,0x00,0xaf,0x0f,0xfd,0x90,0xff,0x00,0x64,0x5f,0x0d,0x7e,0xc9,\r
-0xbe,0x00,0x1a,0x4e,0x98,0xcb,0xaa,0x78,0x86,0xfb,0x6c,0x9a,0xb6,0xb6,0xf1,0xed,\r
-0x7b,0x99,0x00,0xe1,0x50,0x73,0xb2,0x35,0xe7,0x6a,0xe4,0xf5,0x24,0x92,0x6b,0xdd,\r
-0x2f,0x6f,0x22,0xb0,0xb4,0x9e,0xe6,0x76,0xd9,0x0c,0x31,0xb4,0x8e,0xc7,0xb2,0x81,\r
-0x92,0x7f,0x2a,0x87,0x24,0x95,0xd9,0x5b,0x23,0xe7,0x6f,0xda,0x2f,0xc4,0x7f,0xda,\r
-0x1e,0x26,0xb5,0xd2,0xa3,0x6c,0xc7,0x61,0x16,0xe7,0x19,0xe3,0xcc,0x7c,0x1f,0xd1,\r
-0x42,0xfe,0x75,0xe4,0x95,0xa1,0xe2,0x0d,0x62,0x4f,0x10,0x6b,0x97,0xfa,0x94,0xbf,\r
-0x7e,0xea,0x66,0x97,0x1e,0x80,0x9e,0x07,0xe0,0x30,0x3f,0x0a,0xcf,0xaf,0xc4,0x31,\r
-0xf8,0x87,0x8a,0xc5,0x4e,0xb7,0x77,0xf8,0x74,0x3e,0x4a,0xb5,0x4f,0x6b,0x51,0xcc,\r
-0x28,0xa2,0xba,0x5f,0x87,0x1e,0x1f,0xff,0x00,0x84,0x9f,0xc6,0xba,0x5d,0x8b,0x2e,\r
-0xe8,0x4c,0xa2,0x49,0x81,0xe9,0xb1,0x7e,0x66,0x07,0xeb,0x8c,0x7e,0x35,0xcb,0x46,\r
-0x94,0xab,0x54,0x8d,0x28,0xef,0x27,0x6f,0xbc,0xce,0x31,0x73,0x92,0x8a,0xea,0x61,\r
-0x49,0xa7,0xdd,0x43,0xfe,0xb2,0xda,0x64,0xff,0x00,0x7a,0x32,0x2a,0xb9,0x18,0x35,\r
-0xf7,0x40,0x41,0x80,0x36,0x8c,0x56,0x37,0x88,0x3c,0x17,0xa3,0x78,0x9e,0xd9,0xe1,\r
-0xd4,0x34,0xe8,0x27,0xdc,0x31,0xe6,0x6c,0x02,0x45,0xf7,0x0c,0x39,0x15,0xf7,0x15,\r
-0x38,0x56,0x49,0x5e,0x9d,0x5b,0xbf,0x35,0xff,0x00,0x04,0xf5,0xe5,0x97,0x3b,0x7b,\r
-0xb2,0x3e,0x30,0xa2,0xba,0x4f,0x88,0x3e,0x0e,0x97,0xc0,0xfe,0x26,0xb8,0xd3,0x5d,\r
-0x8c,0x90,0xe0,0x4b,0x04,0xad,0xd5,0xe3,0x3d,0x09,0xf7,0x18,0x20,0xfb,0x8a,0xe6,\r
-0xeb,0xe1,0xaa,0xd2,0x9d,0x1a,0x8e,0x9c,0xd5,0x9a,0xd0,0xf2,0x25,0x17,0x06,0xe2,\r
-0xfa,0x05,0x74,0x7e,0x0d,0xf1,0xde,0xab,0xe0,0x9d,0x4a,0x3b,0x8b,0x2b,0x87,0x36,\r
-0xfb,0x81,0x96,0xd5,0x98,0xf9,0x72,0xaf,0x70,0x47,0x63,0xef,0xd4,0x57,0x39,0x45,\r
-0x14,0xaa,0xce,0x8c,0xd5,0x4a,0x6e,0xcd,0x04,0x64,0xe0,0xf9,0xa3,0xb9,0xf7,0x06,\r
-0x95,0xa8,0xc3,0xab,0xe9,0xb6,0xd7,0xb6,0xed,0xba,0x0b,0x88,0xd6,0x54,0x3e,0xc4,\r
-0x64,0x7f,0x3a,0xb7,0x5c,0x27,0xc1,0x2b,0xef,0xb7,0x7c,0x37,0xd2,0x49,0x39,0x68,\r
-0x83,0xc2,0x7f,0xe0,0x2e,0x40,0xfd,0x31,0x5d,0xdd,0x7e,0xe5,0x86,0xab,0xed,0xe8,\r
-0x42,0xaf,0x74,0x9f,0xde,0x8f,0xaf,0xa7,0x2e,0x78,0x29,0x77,0x0a,0x28,0xa2,0xba,\r
-0x4d,0x02,0x8a,0x28,0xa0,0x04,0x27,0x00,0xd7,0xc7,0x1f,0x11,0x35,0xcf,0xf8,0x48,\r
-0xbc,0x6d,0xac,0x5f,0x2b,0x07,0x8d,0xa7,0x64,0x8c,0x8e,0x85,0x17,0xe5,0x53,0xf8,\r
-0x80,0x0f,0xe3,0x5f,0x54,0x78,0xf7,0x5d,0xff,0x00,0x84,0x73,0xc1,0xfa,0xb6,0xa0,\r
-0xae,0x12,0x48,0xad,0xdb,0xcb,0x2d,0xd3,0x79,0x18,0x4f,0xfc,0x78,0x8a,0xf8,0xcc,\r
-0x0c,0x0c,0x57,0xc0,0x71,0x4d,0x7d,0x29,0xd0,0x5e,0xaf,0xf2,0x5f,0xa9,0xe2,0xe6,\r
-0x33,0xf8,0x60,0x2d,0x14,0x51,0x5f,0x9f,0x1e,0x20,0x57,0xd8,0xdf,0x0e,0xb4,0x4f,\r
-0xec,0x0f,0x04,0xe8,0xf6,0x44,0x61,0xd6,0xdd,0x5d,0xc7,0xfb,0x4d,0xf3,0x37,0xea,\r
-0xc6,0xbe,0x53,0xf0,0x5e,0x91,0xfd,0xbf,0xe2,0xcd,0x27,0x4f,0xc6,0x56,0x7b,0x94,\r
-0x0e,0x3f,0xd9,0x07,0x2d,0xfa,0x03,0x5f,0x68,0x28,0x01,0x40,0x1c,0x01,0x5f,0x7f,\r
-0xc2,0xd4,0x3f,0x89,0x5d,0xfa,0x7e,0xaf,0xf4,0x3d,0xac,0xba,0x1f,0x14,0xfe,0x41,\r
-0x4b,0x45,0x15,0xfa,0x09,0xed,0x85,0x79,0xb7,0xc7,0xed,0x63,0xfb,0x2f,0xe1,0xfc,\r
-0xf0,0xa9,0x2b,0x25,0xf4,0xc9,0x6e,0xa4,0x7a,0x67,0x73,0x7e,0x88,0x47,0xe3,0x5e,\r
-0x93,0x5e,0x17,0xfb,0x4e,0x6a,0x0e,0xb1,0xe8,0x36,0x4a,0x7e,0x46,0x32,0xcc,0xc3,\r
-0xdc,0x6d,0x03,0xf9,0xb5,0x78,0xd9,0xc5,0x57,0x47,0x01,0x56,0x4b,0xb5,0xbe,0xfd,\r
-0x0e,0x5c,0x54,0xb9,0x28,0xc9,0x9e,0x11,0x45,0x14,0x57,0xe3,0x07,0xca,0x05,0x5e,\r
-0xd0,0xb4,0xc6,0xd6,0xb5,0xab,0x0d,0x3d,0x0e,0x1a,0xea,0x74,0x87,0x3e,0x9b,0x88,\r
-0x19,0xaa,0x35,0xda,0x7c,0x1b,0xb4,0x5b,0xdf,0x89,0x3a,0x2a,0x3f,0xdd,0x57,0x79,\r
-0x3f,0x15,0x8d,0x88,0xfd,0x40,0xae,0xac,0x2d,0x3f,0x6d,0x5e,0x14,0xdf,0x56,0x97,\r
-0xe2,0x69,0x4e,0x3c,0xd3,0x8c,0x7c,0xcf,0xac,0xad,0xa0,0x8e,0xd6,0xde,0x28,0x62,\r
-0x50,0x91,0x46,0xa1,0x11,0x47,0x40,0x00,0xc0,0x02,0xa5,0xa4,0x14,0xb5,0xfb,0xaa,\r
-0x49,0x2b,0x23,0xec,0x42,0x8a,0x28,0xa6,0x01,0x45,0x14,0x50,0x04,0x73,0x38,0x86,\r
-0x27,0x76,0x38,0x55,0x04,0x93,0xf8,0x57,0xc3,0xd7,0x93,0x7d,0xa6,0xf2,0x79,0xbf,\r
-0xe7,0xa4,0x8c,0xff,0x00,0x99,0xcd,0x7d,0x79,0xf1,0x37,0x5a,0x5d,0x07,0xc0,0xba,\r
-0xc5,0xd1,0x38,0x73,0x01,0x8a,0x3c,0x1e,0x77,0x3f,0xca,0x3f,0x9e,0x7f,0x0a,0xf8,\r
-0xf6,0xbf,0x3a,0xe2,0x9a,0xa9,0xce,0x95,0x25,0xd1,0x36,0x78,0x59,0x8c,0xb5,0x8c,\r
-0x42,0x8a,0x28,0xaf,0x84,0x3c,0x70,0xaf,0xa1,0xff,0x00,0x66,0x98,0x36,0xf8,0x6b,\r
-0x56,0x97,0x04,0x6f,0xbb,0x0b,0x9f,0xa2,0x0f,0xf1,0xaf,0x9e,0x3a,0xd7,0xd5,0x5f,\r
-0x02,0xf4,0xa6,0xd3,0x3e,0x1d,0x58,0x3b,0xae,0xd9,0x2e,0x9d,0xee,0x08,0xf6,0x27,\r
-0x0b,0xff,0x00,0x8e,0x81,0x5f,0x55,0xc3,0x74,0xdc,0xf1,0xdc,0xdd,0x93,0xff,0x00,\r
-0x23,0xd1,0xc0,0x46,0xf5,0xaf,0xd9,0x1e,0x81,0x8e,0x2b,0xc3,0xbf,0x68,0x6f,0x02,\r
-0xcd,0x71,0xe4,0xf8,0x8e,0xce,0x33,0x20,0x89,0x04,0x57,0x61,0x47,0x21,0x73,0xf2,\r
-0xbf,0xe1,0x9c,0x1f,0xc3,0xde,0xbd,0xc4,0x53,0x66,0x85,0x27,0x8d,0xa3,0x91,0x16,\r
-0x44,0x71,0xb5,0x95,0x86,0x41,0x1e,0x86,0xbf,0x46,0xc7,0x60,0xe1,0x8e,0xa1,0x2a,\r
-0x33,0xeb,0xf8,0x33,0xdd,0xad,0x49,0x56,0x83,0x83,0x3e,0x17,0xa2,0xbd,0xc7,0xe2,\r
-0x1f,0xec,0xff,0x00,0x20,0x96,0x5b,0xff,0x00,0x0d,0x60,0xa3,0x65,0x9b,0x4f,0x76,\r
-0xc1,0x53,0xff,0x00,0x4c,0xd8,0xff,0x00,0x23,0xef,0xcf,0x41,0x5e,0x2d,0x7f,0xa7,\r
-0x5d,0x69,0x57,0x2f,0x6f,0x79,0x6f,0x2d,0xac,0xe9,0xf7,0xa3,0x95,0x0a,0xb0,0xfc,\r
-0x0d,0x7e,0x43,0x8c,0xcb,0xf1,0x18,0x19,0xb8,0xd5,0x8e,0x9d,0xfa,0x33,0xe6,0x2a,\r
-0xd0,0x9d,0x17,0x69,0x22,0xbd,0x14,0x51,0x5e,0x69,0x80,0x52,0xab,0x14,0x60,0xca,\r
-0x4a,0xb0,0x39,0x04,0x1c,0x11,0x49,0x45,0x34,0xed,0xaa,0x03,0xab,0xd1,0xbe,0x29,\r
-0xf8,0xa7,0x41,0xda,0xb6,0xba,0xcd,0xc3,0x46,0x08,0xfd,0xdd,0xc1,0xf3,0x94,0x8f,\r
-0x4f,0x9b,0x24,0x0f,0xa6,0x2b,0xd1,0x34,0x0f,0xda,0x56,0x65,0x65,0x4d,0x6b,0x4a,\r
-0x57,0x52,0x79,0x9a,0xc9,0x88,0x20,0x7f,0xb8,0xc7,0x9f,0xfb,0xe8,0x57,0x88,0x51,\r
-0x5e,0xae,0x1f,0x35,0xc6,0x61,0xbf,0x87,0x51,0xdb,0xb3,0xd5,0x7e,0x27,0x4c,0x31,\r
-0x35,0x69,0xfc,0x32,0x3e,0xc3,0xf0,0xc7,0xc4,0x9f,0x0f,0xf8,0xb8,0x2a,0xe9,0xf7,\r
-0xe8,0x6e,0x08,0xcf,0xd9,0xa5,0xf9,0x25,0x1f,0xf0,0x13,0xd7,0xf0,0xcd,0x74,0xf9,\r
-0xaf,0x85,0x91,0xda,0x37,0x57,0x46,0x2a,0xca,0x72,0x18,0x1c,0x10,0x6b,0xd6,0x7e,\r
-0x1c,0xfc,0x75,0xbe,0xd1,0x25,0x8a,0xc7,0x5e,0x77,0xbf,0xd3,0xce,0x14,0x5c,0x9e,\r
-0x66,0x8b,0xeb,0xfd,0xe1,0xf5,0xe7,0xeb,0xd2,0xbe,0xcb,0x01,0xc4,0xb0,0xaa,0xd5,\r
-0x3c,0x52,0xe5,0x7d,0xd6,0xdf,0x3e,0xc7,0xab,0x47,0x1e,0xa4,0xf9,0x6a,0x2b,0x1f,\r
-0x48,0xd1,0x50,0x59,0x5e,0xc1,0xa8,0x5a,0xc5,0x73,0x6d,0x2a,0xcf,0x6f,0x2a,0x87,\r
-0x8e,0x44,0x39,0x56,0x53,0xd0,0x83,0x53,0xd7,0xdb,0xa6,0x9a,0xba,0x3d,0x7d,0xc2,\r
-0x8a,0x28,0xa6,0x01,0x5e,0x5f,0xf1,0xfa,0xf4,0xda,0xf8,0x48,0xa8,0xfe,0x2c,0xd7,\r
-0xa8,0x57,0x8a,0xfe,0xd2,0xd7,0x5e,0x57,0x87,0xe3,0x4c,0xff,0x00,0x09,0x38,0xaf,\r
-0x2f,0x33,0x97,0x2e,0x12,0xa3,0xf2,0x38,0xb1,0xb2,0xe5,0xc3,0xcd,0xf9,0x1f,0x18,\r
-0x6b,0x32,0x65,0x65,0x6e,0xe4,0x93,0x55,0xff,0x00,0x62,0x7b,0x51,0xaa,0x7e,0xd9,\r
-0x36,0xcf,0x8c,0x8b,0x2d,0x16,0xfa,0xe7,0xe8,0x49,0x8a,0x3c,0xff,0x00,0xe4,0x43,\r
-0xf9,0xd1,0xad,0xbe,0xdb,0x69,0x0f,0xb1,0xad,0x6f,0xf8,0x27,0x95,0x9f,0xdb,0x3f,\r
-0x6a,0x3f,0x15,0x5e,0xe3,0x22,0xd7,0xc3,0x72,0xc5,0xbb,0xd0,0xc9,0x73,0x01,0xff,\r
-0x00,0xda,0x66,0xbe,0x63,0x21,0x8f,0xbd,0x73,0xf2,0xcc,0x8d,0x73,0xe7,0x09,0xf6,\r
-0x4c,0xfd,0x29,0xdb,0x45,0x1c,0xd1,0x5f,0x79,0x73,0xf5,0xeb,0x21,0xd4,0x51,0x49,\r
-0x48,0xa3,0xcd,0x3f,0x68,0x5f,0x18,0x9f,0x07,0xfc,0x31,0xd4,0xa4,0x85,0xf6,0x5d,\r
-0xdf,0x62,0xc6,0x03,0xe8,0x5f,0x3b,0x8f,0xe0,0x81,0x8f,0xd4,0x0a,0xf8,0xeb,0xc0,\r
-0x3e,0x1d,0x93,0xc5,0x3e,0x2c,0xd3,0x74,0xd8,0xd7,0x3e,0x6c,0xca,0x1b,0xd8,0x67,\r
-0x9a,0xf5,0x7f,0xda,0xdb,0xc6,0x1f,0xda,0xbe,0x30,0xb2,0xd0,0x61,0x7c,0xc1,0xa6,\r
-0xc3,0xe6,0x4a,0x01,0xe0,0xca,0xfe,0xbe,0xe1,0x40,0xff,0x00,0xbe,0xab,0x43,0xf6,\r
-0x4b,0xf0,0x7f,0xda,0xb5,0x7b,0xdd,0x76,0x64,0xca,0x5b,0x2f,0x97,0x11,0x3f,0xde,\r
-0x3d,0x6b,0xe0,0xb1,0xcd,0xe6,0x19,0x8c,0x68,0x2d,0x96,0x9f,0xe6,0x7c,0x06,0x2d,\r
-0xbc,0xc7,0x35,0x54,0x57,0xc3,0x1d,0x3e,0xed,0x59,0xf5,0x0e,0x9f,0x65,0x1e,0x9d,\r
-0x63,0x6f,0x6d,0x12,0x85,0x8e,0x14,0x08,0xa0,0x7a,0x01,0x8a,0xb3,0x48,0x3a,0x52,\r
-0xd7,0xde,0x24,0x92,0xb2,0x3e,0xf9,0x2b,0x2b,0x20,0xa2,0x8a,0x29,0x8c,0x2b,0xf2,\r
-0xdf,0xf6,0xd7,0xff,0x00,0x82,0x9b,0x78,0xf3,0xe1,0x1f,0xed,0x0d,0xa9,0xf8,0x43,\r
-0xe1,0xcc,0x9a,0x4b,0xe8,0xfa,0x0c,0x49,0x69,0x7d,0xfd,0xa1,0x69,0xf6,0x81,0x3d,\r
-0xe6,0x37,0x49,0x82,0x19,0x59,0x42,0x6e,0x09,0x80,0x7a,0xab,0x57,0xea,0x2c,0xb2,\r
-0xa4,0x31,0xb3,0xc8,0xea,0x88,0xa0,0x96,0x66,0x38,0x00,0x7a,0x93,0x5f,0x84,0x3f,\r
-0xf0,0x51,0x9f,0xd9,0xb7,0xc4,0x9f,0x0a,0xbe,0x3b,0xf8,0xa7,0xc5,0xe2,0xde,0x4d,\r
-0x4b,0xc1,0xbe,0x27,0xd4,0x65,0xd4,0xad,0x75,0x8b,0x71,0xbe,0x28,0xe5,0x99,0x8b,\r
-0xc9,0x04,0x84,0x67,0x63,0x2b,0xb3,0x63,0x38,0xdc,0xb8,0x23,0xb8,0x0d,0x09,0x9f,\r
-0x6d,0x7e,0xc1,0xff,0x00,0xb5,0xcf,0xc4,0xef,0xdb,0x5b,0xc4,0xde,0x24,0xd0,0xbc,\r
-0x73,0xe1,0x9f,0x07,0xcf,0xe0,0x9d,0x2e,0xc5,0x5f,0x51,0x78,0x74,0xf9,0x77,0x4d,\r
-0x2c,0x84,0x88,0x62,0xdb,0x24,0xce,0x9c,0xec,0x91,0x89,0xdb,0xc0,0x4c,0x63,0x90,\r
-0x47,0xb1,0xf8,0xbf,0xfe,0x09,0x9f,0xfb,0x3c,0xf8,0xc2,0xe9,0xae,0x64,0xf0,0x2a,\r
-0xe9,0x13,0x39,0x25,0x8e,0x91,0x79,0x35,0xb2,0x1c,0xff,0x00,0xb0,0x1b,0x68,0xfc,\r
-0x00,0xaf,0x84,0xbf,0xe0,0x93,0xbf,0xb5,0x1f,0x82,0x3e,0x09,0xea,0xfe,0x2e,0xf0,\r
-0x97,0x8d,0xb5,0x2b,0x7f,0x0f,0x45,0xe2,0x09,0x2d,0xee,0x2c,0xb5,0x6b,0xaf,0x92,\r
-0x01,0x24,0x61,0xd5,0xa2,0x96,0x4e,0x88,0x08,0x60,0x54,0x9e,0x33,0xbf,0x24,0x64,\r
-0x67,0xf5,0xef,0x4a,0xf1,0x66,0x89,0xad,0xdb,0x47,0x71,0xa7,0xeb,0x36,0x17,0xf0,\r
-0x48,0x01,0x49,0x6d,0xae,0x92,0x45,0x61,0xec,0x54,0x90,0x68,0x04,0x7c,0xe9,0xe1,\r
-0x0f,0xf8,0x26,0x9f,0xec,0xf1,0xe0,0xeb,0x85,0xb8,0x8f,0xc0,0x51,0xea,0xf3,0x29,\r
-0x05,0x5b,0x58,0xbc,0x9a,0xe5,0x47,0xfc,0x01,0x9f,0x69,0xfc,0x41,0xaf,0xa4,0x34,\r
-0x2f,0x0f,0x69,0x7e,0x18,0xd2,0xe0,0xd3,0x74,0x7d,0x3a,0xd7,0x4a,0xd3,0xe0,0x1b,\r
-0x62,0xb4,0xb2,0x85,0x61,0x89,0x07,0xa0,0x55,0x00,0x0a,0xd0,0x0c,0x18,0x02,0x08,\r
-0x20,0xf7,0x14,0x64,0x1a,0x43,0x16,0xbc,0xdb,0xe3,0xcf,0x88,0xff,0x00,0xb1,0x3c,\r
-0x0d,0x35,0xb4,0x6d,0x89,0xf5,0x17,0x16,0xeb,0x83,0xc8,0x5e,0xae,0x7e,0x98,0x18,\r
-0xff,0x00,0x81,0x0a,0xf4,0x83,0xc0,0xaf,0x99,0x7f,0x68,0x4f,0x10,0x9d,0x5f,0xc6,\r
-0x69,0xa7,0xa3,0x66,0x1d,0x3a,0x30,0x84,0x7f,0xd3,0x46,0xc3,0x37,0xe9,0xb4,0x7e,\r
-0x15,0xe0,0xe7,0x78,0x9f,0xaa,0xe0,0xa6,0xd6,0xf2,0xd1,0x7c,0xff,0x00,0xe0,0x1c,\r
-0x58,0xba,0x9e,0xce,0x93,0xf3,0x3c,0xbe,0x8a,0x28,0xaf,0xc7,0x4f,0x97,0x0a,0xf7,\r
-0x2f,0xd9,0xaf,0xc3,0xd9,0x93,0x55,0xd6,0xa4,0x5c,0xe3,0x16,0xb1,0x1f,0xfc,0x79,\r
-0xff,0x00,0xf6,0x5a,0xf0,0xda,0xfa,0xff,0x00,0xe1,0x77,0x87,0x8f,0x86,0x7c,0x0f,\r
-0xa5,0x5a,0x32,0x14,0x99,0xa2,0x13,0x4c,0x0f,0x50,0xef,0xf3,0x10,0x7e,0x99,0xc7,\r
-0xe1,0x5f,0x55,0xc3,0x98,0x6f,0x6d,0x8c,0xf6,0x8f,0x68,0x2b,0xfc,0xf6,0x47,0xa3,\r
-0x80,0xa7,0xcf,0x57,0x9b,0xb1,0xd6,0x51,0x49,0x4b,0x5f,0xab,0x1f,0x48,0x78,0x4f,\r
-0xed,0x35,0xa7,0x28,0x3a,0x1d,0xfa,0xaf,0xcc,0x7c,0xd8,0x5d,0xbd,0x7e,0xe9,0x5f,\r
-0xfd,0x9b,0xf3,0xaf,0x0a,0xaf,0xa3,0xff,0x00,0x69,0x38,0x03,0xf8,0x3a,0xc2,0x5c,\r
-0x72,0x97,0xca,0x33,0xec,0x63,0x7f,0xf0,0x15,0xf3,0x85,0x7e,0x47,0xc4,0x30,0x50,\r
-0xcc,0x26,0xd7,0x54,0x9f,0xe0,0x7c,0xce,0x39,0x5a,0xbb,0x0a,0x28,0xa2,0xbe,0x6c,\r
-0xe0,0x3e,0x92,0xfd,0x9b,0xef,0x84,0xfe,0x0c,0xbc,0xb6,0xce,0x5a,0x0b,0xc6,0xe3,\r
-0xd1,0x59,0x54,0x8f,0xd7,0x35,0xeb,0x35,0xe1,0x1f,0xb3,0x1d,0xd0,0x0d,0xe2,0x0b,\r
-0x62,0xdc,0x91,0x0c,0x8a,0xbf,0xf7,0xd8,0x27,0xf9,0x57,0xbb,0x66,0xbf,0x64,0xc9,\r
-0x6a,0x7b,0x4c,0x05,0x27,0xd9,0x5b,0xee,0x76,0x3e,0xa7,0x09,0x2e,0x6a,0x11,0x16,\r
-0x8a,0x28,0xaf,0x70,0xec,0x0a,0x28,0xa4,0x3d,0x28,0x03,0xc8,0x3f,0x69,0x0d,0x6f,\r
-0xec,0x9e,0x19,0xb1,0xd3,0x11,0x80,0x7b,0xd9,0xf7,0xb0,0xf5,0x44,0xe7,0xff,0x00,\r
-0x42,0x2b,0xf9,0x57,0xce,0x95,0xe9,0x7f,0xb4,0x06,0xb8,0x75,0x4f,0x1e,0x3d,0xa0,\r
-0x20,0xc5,0x61,0x0a,0xc2,0x30,0x73,0xf3,0x1f,0x99,0xbf,0xf4,0x20,0x3f,0x0a,0xf3,\r
-0x4a,0xfc,0x77,0x3b,0xaf,0xf5,0x8c,0x74,0xda,0xd9,0x69,0xf7,0x7f,0xc1,0x3e,0x5b,\r
-0x19,0x3e,0x7a,0xcf,0xcb,0x40,0xa2,0x8a,0x2b,0xc1,0x38,0xcf,0x55,0xfd,0x9d,0x74,\r
-0x53,0x7f,0xe3,0x2b,0x8b,0xf6,0x40,0x62,0xb1,0xb7,0x24,0x37,0xa3,0xb9,0xda,0x3f,\r
-0x40,0xf5,0xf4,0xb5,0x79,0x2f,0xec,0xe7,0xa2,0x7d,0x87,0xc1,0xf7,0x3a,0x83,0xc6,\r
-0x04,0x97,0xd7,0x07,0x6b,0xf7,0x31,0xa7,0xca,0x07,0xfd,0xf5,0xbf,0xf3,0xaf,0x5a,\r
-0xaf,0xd8,0x32,0x2a,0x1e,0xc3,0x01,0x0b,0xef,0x2d,0x7e,0xff,0x00,0xf8,0x16,0x3e,\r
-0xa3,0x07,0x0e,0x4a,0x2b,0xcf,0x50,0xa2,0x8a,0x2b,0xe8,0x0e,0xd0,0xaf,0x00,0xfd,\r
-0xa6,0xc6,0x35,0x3d,0x04,0xf6,0x30,0xcb,0xfc,0xd6,0xbd,0xfe,0xbc,0x67,0xf6,0x97,\r
-0xd2,0xbc,0xed,0x0f,0x49,0xd4,0x42,0x92,0x6d,0xe7,0x68,0x4e,0x07,0x00,0x3a,0xe7,\r
-0x27,0xf1,0x41,0xf9,0xd7,0x81,0x9e,0xc1,0xcf,0x2f,0xa8,0x97,0x93,0xfc,0x4e,0x2c,\r
-0x62,0xbd,0x09,0x1f,0x3d,0x51,0x45,0x15,0xf8,0xf1,0xf2,0xe1,0x5d,0xa7,0xc1,0xcb,\r
-0xc4,0xb1,0xf8,0x93,0xa2,0xbb,0x9c,0x2b,0xc8,0xf1,0x7e,0x2c,0x8c,0xa3,0xf5,0x22,\r
-0xb8,0xba,0xb1,0xa7,0xdf,0x4d,0xa5,0xdf,0xdb,0x5e,0x5b,0xb6,0xd9,0xed,0xe4,0x59,\r
-0x50,0xfa,0x32,0x9c,0x8f,0xe5,0x5d,0x38,0x6a,0xbe,0xc2,0xbc,0x2a,0xbf,0xb2,0xd3,\r
-0xfb,0x99,0x74,0xe5,0xc9,0x35,0x2e,0xcc,0xfb,0x88,0x52,0xd6,0x4f,0x86,0x3c,0x43,\r
-0x6d,0xe2,0x9d,0x0e,0xcf,0x53,0xb4,0x6c,0xc5,0x70,0x81,0xb6,0xe7,0x25,0x1b,0xba,\r
-0x9f,0x70,0x72,0x3f,0x0a,0xd6,0xaf,0xdd,0x21,0x38,0xce,0x2a,0x71,0x77,0x4c,0xfb,\r
-0x14,0xd3,0x57,0x41,0x45,0x14,0x55,0x8c,0x28,0xa4,0xc8,0xae,0x4f,0xe2,0x2f,0x8f,\r
-0xed,0x3c,0x07,0xa2,0xb5,0xcc,0x84,0x4b,0x7b,0x28,0x2b,0x6d,0x6d,0x9e,0x5d,0xbd,\r
-0x4f,0xfb,0x23,0xb9,0xff,0x00,0x1a,0xc6,0xb5,0x68,0x50,0xa6,0xea,0xd4,0x76,0x48,\r
-0x89,0x49,0x41,0x39,0x4b,0x63,0xcb,0x7f,0x68,0xdf,0x17,0x2d,0xc5,0xcd,0x9f,0x87,\r
-0xad,0xdf,0x3e,0x41,0x17,0x37,0x38,0xec,0xc4,0x10,0x8b,0xf9,0x12,0x7f,0x11,0x5e,\r
-0x27,0x56,0x75,0x2d,0x46,0xe3,0x56,0xbf,0x9e,0xf6,0xee,0x53,0x35,0xcc,0xee,0x64,\r
-0x91,0xcf,0x72,0x6a,0xb5,0x7e,0x2d,0x98,0x62,0xde,0x3b,0x13,0x2a,0xcf,0xae,0xde,\r
-0x9d,0x0f,0x94,0xaf,0x55,0xd6,0x9b,0x98,0x51,0x45,0x15,0xe7,0x18,0x16,0x74,0xcd,\r
-0x3e,0x6d,0x5b,0x51,0xb5,0xb2,0xb6,0x5d,0xf7,0x17,0x32,0x2c,0x51,0xa9,0xe8,0x59,\r
-0x8e,0x07,0xf3,0xaf,0xb5,0xb4,0x7d,0x3a,0x2d,0x1f,0x4a,0xb4,0xb1,0x80,0x62,0x1b,\r
-0x68,0x96,0x14,0x1e,0xca,0x00,0x1f,0xca,0xbc,0x03,0xf6,0x78,0xf0,0x69,0xd4,0x75,\r
-0xa9,0xb5,0xfb,0x84,0xff,0x00,0x47,0xb2,0x06,0x38,0x32,0x3e,0xf4,0xa4,0x72,0x7f,\r
-0x05,0x3f,0x99,0xf6,0xaf,0xa2,0x87,0x4a,0xfd,0x3b,0x86,0xb0,0x8e,0x8d,0x09,0x62,\r
-0x24,0xb5,0x9e,0xde,0x88,0xfa,0x0c,0xbe,0x97,0x2c,0x1c,0xdf,0x51,0x68,0xa4,0xcd,\r
-0x2d,0x7d,0x91,0xea,0x88,0x46,0x6b,0x33,0x5b,0xf0,0xd6,0x97,0xe2,0x2b,0x63,0x06,\r
-0xa5,0x61,0x05,0xec,0x7d,0x84,0xa8,0x09,0x1f,0x43,0xd4,0x7e,0x15,0xa9,0x45,0x4c,\r
-0xa1,0x19,0xae,0x59,0x2b,0xa1,0x34,0x9a,0xb3,0x3c,0x7b,0x5f,0xfd,0x9b,0xf4,0x8b,\r
-0xd6,0x32,0x69,0x57,0xd3,0xe9,0xac,0x4e,0x7c,0xb9,0x07,0x9d,0x18,0x1e,0x83,0x90,\r
-0x47,0xe6,0x6b,0xce,0x35,0xdf,0x81,0x3e,0x2a,0xd1,0x81,0x78,0xad,0xa2,0xd4,0xe2,\r
-0x19,0xf9,0xad,0x1f,0x2d,0x8e,0xdf,0x29,0xc1,0xfc,0xb3,0x5f,0x54,0x52,0x11,0x5f,\r
-0x3d,0x88,0xc8,0x30,0x35,0xf5,0x51,0xe5,0x7e,0x5f,0xe5,0xb1,0xc3,0x3c,0x15,0x19,\r
-0xf4,0xb7,0xa1,0xf0,0xe5,0xed,0x85,0xd6,0x9b,0x39,0x86,0xee,0xda,0x5b,0x59,0x87,\r
-0x58,0xe6,0x42,0x8d,0xf9,0x1a,0x82,0xbe,0xdb,0xd5,0xf4,0x1d,0x3f,0x5d,0xb6,0x36,\r
-0xfa,0x85,0x9c,0x37,0xb0,0x9f,0xe1,0x99,0x03,0x63,0xdc,0x7a,0x57,0x8b,0xfc,0x45,\r
-0xf8,0x03,0x1d,0xbd,0xb4,0xda,0x8f,0x86,0xb7,0xe5,0x32,0xef,0x60,0xe7,0x76,0x47,\r
-0x7d,0x84,0xf3,0x9f,0x63,0x9c,0xfa,0xf6,0xaf,0x91,0xc6,0xf0,0xe5,0x7a,0x11,0x75,\r
-0x28,0x4b,0x9d,0x2e,0x9b,0x3f,0xf8,0x27,0x9b,0x57,0x01,0x38,0x2e,0x68,0x3b,0xa3,\r
-0xc3,0x28,0xa0,0x8c,0x1c,0x74,0xa2,0xbe,0x40,0xf2,0xc2,0x8a,0x28,0xa0,0x0f,0x6f,\r
-0xfd,0x9d,0xbc,0x6b,0x22,0xdc,0xcf,0xe1,0xcb,0x99,0x0b,0x46,0xca,0x67,0xb5,0xdc,\r
-0x7e,0xe9,0x1f,0x79,0x07,0xb1,0xeb,0xf8,0x1a,0xf7,0xba,0xf8,0xf7,0xe1,0x7d,0xe3,\r
-0xd8,0xfc,0x41,0xd0,0x64,0x8c,0xe0,0xb5,0xd2,0xc6,0x7e,0x8d,0xf2,0x9f,0xd1,0x8d,\r
-0x7d,0x84,0x2b,0xf5,0x6e,0x1c,0xc4,0x4a,0xb6,0x13,0x92,0x6f,0xe1,0x76,0xf9,0x1f,\r
-0x47,0x80,0xa8,0xe7,0x4a,0xcf,0xa0,0xb4,0x51,0x45,0x7d,0x51,0xe9,0x08,0x78,0xaf,\r
-0x9f,0xbf,0x6a,0x3b,0xbd,0x96,0x51,0xc7,0x9e,0x89,0xd2,0xbe,0x81,0x35,0xf3,0x27,\r
-0xed,0x4f,0x77,0xfe,0x90,0x23,0x07,0xf8,0x45,0x78,0x59,0xd4,0xb9,0x70,0x53,0x3c,\r
-0xac,0xce,0x5c,0xb8,0x59,0xb3,0xe5,0x3f,0x11,0x3e,0xdb,0x19,0x4f,0xfb,0x26,0xbb,\r
-0xef,0xf8,0x26,0x55,0x81,0xb9,0xf8,0x97,0xf1,0x53,0x53,0xed,0x0d,0xa5,0x8d,0xb0,\r
-0x3f,0xef,0xbc,0xcd,0xff,0x00,0xb2,0x0a,0xf3,0x8f,0x16,0xc9,0xe5,0xe9,0xb3,0x9f,\r
-0x45,0xaf,0x63,0xff,0x00,0x82,0x5b,0xdb,0x16,0xb7,0xf8,0xab,0x7d,0xb7,0x89,0x35,\r
-0x1b,0x38,0x43,0x7a,0xec,0x8a,0x42,0x7f,0xf4,0x3a,0xf2,0xb2,0x28,0xe8,0xd9,0xf9,\r
-0xdf,0x0d,0x47,0x9b,0x33,0x9c,0xbb,0x44,0xfb,0xb3,0x9a,0x29,0xd4,0x57,0xd9,0x1f,\r
-0xac,0x85,0x52,0xd5,0xb5,0x28,0x74,0x9d,0x36,0xee,0xfa,0xe0,0xed,0x82,0xda,0x26,\r
-0x99,0xcf,0xfb,0x2a,0x32,0x6a,0xed,0x78,0xaf,0xed,0x53,0xe3,0x0f,0xec,0x0f,0x87,\r
-0xab,0xa5,0xc3,0x26,0xdb,0xad,0x5e,0x61,0x09,0x00,0xe0,0xf9,0x4b,0xf3,0x48,0x7e,\r
-0x9f,0x75,0x7f,0xe0,0x55,0xcd,0x89,0xac,0xb0,0xf4,0x65,0x55,0xf4,0x47,0x26,0x2e,\r
-0xba,0xc2,0xd0,0x9d,0x67,0xd1,0x1f,0x26,0x78,0x83,0x5a,0xb8,0xf1,0x6f,0x89,0x2f,\r
-0xf5,0x4b,0x8c,0xb5,0xc5,0xf5,0xc3,0x4a,0x47,0xa6,0x4f,0x03,0xf0,0x18,0x1f,0x85,\r
-0x7d,0xbd,0xf0,0x4b,0xc2,0x63,0xc2,0x3f,0x0f,0xf4,0xeb,0x76,0x4d,0xb3,0xcc,0x82,\r
-0x69,0x78,0xc7,0x26,0xbe,0x43,0xf8,0x3b,0xe1,0x46,0xf1,0x77,0x8f,0x74,0xcb,0x3d,\r
-0xbb,0xa1,0x59,0x04,0x92,0x9f,0x45,0x1c,0xd7,0xde,0xf0,0xc4,0xb0,0xc2,0x91,0xa0,\r
-0xda,0xaa,0x00,0x03,0xda,0xbe,0x4f,0x21,0xa2,0xea,0x54,0xa9,0x89,0x9f,0xa7,0xdf,\r
-0xab,0x3e,0x57,0x87,0xa8,0x39,0x73,0xe2,0xa7,0xbb,0xfe,0x99,0x25,0x14,0x56,0x47,\r
-0x8b,0xfc,0x53,0xa7,0x78,0x1f,0xc2,0x9a,0xcf,0x88,0xb5,0x79,0xbe,0xcf,0xa5,0xe9,\r
-0x36,0x73,0x5f,0x5d,0x4b,0x8c,0xec,0x8a,0x34,0x2e,0xe7,0x1d,0xf8,0x53,0x5f,0x6a,\r
-0x7d,0xa9,0xaf,0x45,0x7e,0x2d,0xcd,0xff,0x00,0x05,0x91,0xf8,0xd2,0x35,0x2b,0x86,\r
-0xb6,0xd1,0x7c,0x20,0xd6,0x2d,0x2b,0x18,0x22,0x9e,0xc2,0x7f,0x31,0x63,0x2c,0x76,\r
-0xab,0x30,0x9c,0x02,0x40,0xc0,0xce,0x2b,0xf5,0x5f,0xf6,0x6a,0xf1,0xbf,0x8a,0xfe,\r
-0x25,0x7c,0x0e,0xf0,0x8f,0x8a,0xfc,0x6b,0x65,0x63,0xa6,0xf8,0x83,0x5a,0xb3,0x5b,\r
-0xf9,0x2d,0x34,0xe4,0x74,0x8a,0x38,0xa4,0x25,0xa1,0xe1,0xd9,0x8e,0x4c,0x65,0x09,\r
-0xc9,0xea,0x48,0xa0,0x49,0xdc,0xf9,0xef,0xfe,0x0a,0xb9,0xf1,0xa3,0xfe,0x15,0x97,\r
-0xec,0xc9,0x73,0xe1,0xfb,0x39,0x8c,0x7a,0xb7,0x8c,0x6e,0x06,0x96,0x81,0x7a,0x8b,\r
-0x60,0x37,0xdc,0x1f,0xa1,0x50,0x13,0xfe,0xda,0x57,0xe2,0x00,0xd4,0x6e,0xc5,0xab,\r
-0xdb,0x0b,0xa9,0x85,0xb3,0xfd,0xe8,0x44,0x87,0x63,0x73,0x9e,0x47,0x4e,0xa2,0xbf,\r
-0xa2,0x9f,0x8f,0x5f,0xb2,0x2f,0xc3,0x3f,0xda,0x5e,0xfb,0x4b,0xbc,0xf1,0xf6,0x95,\r
-0x77,0xaa,0xcd,0xa6,0x44,0xf0,0xda,0x79,0x3a,0x8c,0xd6,0xeb,0x12,0xb1,0xcb,0x7c,\r
-0xa8,0xc0,0x12,0x48,0x19,0x24,0x67,0x81,0xe9,0x5e,0x33,0x7d,0xff,0x00,0x04,0x93,\r
-0xfd,0x9e,0xae,0xff,0x00,0xd5,0x69,0x5a,0xed,0x97,0xfd,0x70,0xd6,0x24,0x3f,0xfa,\r
-0x1e,0xea,0x62,0x6a,0xe7,0xe1,0xa7,0x34,0xf8,0x66,0x92,0xde,0x41,0x24,0x4e,0xd1,\r
-0x48,0x3a,0x32,0x1c,0x11,0xf8,0xd7,0xed,0x36,0xa9,0xff,0x00,0x04,0x70,0xf8,0x23,\r
-0x78,0xa7,0xec,0x9a,0xb7,0x8b,0xb4,0xf2,0x7b,0xa5,0xfc,0x2f,0x8f,0xfb,0xea,0x13,\r
-0x5c,0x9d,0xff,0x00,0xfc,0x11,0x47,0xe1,0xf4,0xad,0xfe,0x85,0xf1,0x0f,0xc4,0xd6,\r
-0xe3,0xd2,0xe2,0xde,0xde,0x5f,0xe4,0xab,0x4e,0xe2,0xb3,0x3f,0x28,0xad,0x3e,0x21,\r
-0xf8,0xaa,0xc3,0x02,0xd7,0xc4,0xda,0xc5,0xb6,0x3a,0x08,0x6f,0xe5,0x4c,0x7e,0x4d,\r
-0x5f,0xb1,0x9f,0xf0,0x49,0x2f,0x0c,0x78,0x9e,0x4f,0x82,0x3a,0xbf,0x8e,0x7c,0x53,\r
-0xae,0xea,0xda,0xcc,0xbe,0x20,0xbe,0xf2,0x74,0xf4,0xd4,0xef,0x25,0x9c,0x43,0x6d,\r
-0x06,0x54,0xb2,0x07,0x63,0x8d,0xf2,0x17,0xe9,0xd7,0x60,0xaf,0x36,0xbe,0xff,0x00,\r
-0x82,0x23,0xe8,0x0e,0xa7,0xec,0x9f,0x15,0xb5,0x28,0x4f,0xfd,0x36,0xd1,0xa3,0x93,\r
-0xf9,0x4c,0xb5,0xfa,0x0f,0xf0,0x97,0xe1,0xbe,0x9f,0xf0,0x87,0xe1,0x9f,0x86,0x7c,\r
-0x19,0xa5,0xb6,0xfb,0x1d,0x12,0xc2,0x2b,0x28,0xe5,0x2b,0xb4,0xc9,0xb5,0x70,0xce,\r
-0x47,0x38,0x2c,0xd9,0x63,0xcf,0x52,0x69,0x31,0xa4,0xce,0x8f,0x55,0xd4,0x62,0xd2,\r
-0x74,0xdb,0xab,0xd9,0xdb,0x6c,0x36,0xf1,0x34,0xae,0x7d,0x94,0x64,0xd7,0xc5,0x5a,\r
-0xb6,0xa5,0x2e,0xb1,0xaa,0x5d,0xdf,0x4e,0x73,0x35,0xcc,0xad,0x2b,0x7d,0x49,0xcd,\r
-0x7d,0x6b,0xf1,0x2b,0xc3,0xba,0x97,0x8a,0xfc,0x29,0x73,0xa5,0x69,0x93,0x41,0x04,\r
-0xd7,0x0c,0xa1,0xde,0x76,0x65,0x1b,0x01,0xc9,0x03,0x00,0xf2,0x70,0x07,0xd0,0x9a,\r
-0xf1,0x39,0x7f,0x67,0x2f,0x13,0xa2,0x92,0xb7,0x3a,0x6c,0x87,0xd1,0x66,0x70,0x7f,\r
-0x54,0xaf,0x85,0xe2,0x1a,0x18,0xbc,0x5c,0xe1,0x0a,0x34,0xdb,0x8a,0xd7,0x4e,0xe7,\r
-0x93,0x8e,0x85,0x5a,0x8d,0x46,0x11,0xba,0x47,0x95,0xd1,0x5e,0x87,0x3f,0xc0,0x5f,\r
-0x18,0xc2,0x7e,0x5b,0x18,0x26,0xf7,0x4b,0x84,0xfe,0xa4,0x55,0x39,0x3e,0x0a,0x78,\r
-0xd2,0x3c,0x9f,0xec,0x46,0x61,0xfe,0xcd,0xc4,0x47,0xff,0x00,0x66,0xaf,0x89,0x79,\r
-0x6e,0x36,0x3b,0xd2,0x97,0xdc,0xcf,0x25,0xd0,0xaa,0xbe,0xcb,0x32,0xfe,0x1d,0xf8,\r
-0x7b,0xfe,0x12,0x8f,0x19,0xe9,0x76,0x0c,0x81,0xe1,0x69,0x44,0x92,0x83,0xd3,0xcb,\r
-0x5f,0x99,0x87,0xe2,0x06,0x3f,0x1a,0xfb,0x1c,0x70,0x05,0x78,0xcf,0xc0,0xaf,0x87,\r
-0x5a,0x9f,0x86,0x75,0x2d,0x47,0x51,0xd6,0x2c,0x9a,0xd2,0x7d,0x82,0x08,0x55,0xc8,\r
-0x24,0x82,0x72,0xc7,0x82,0x7d,0x14,0x7e,0x75,0xec,0xd5,0xfa,0x37,0x0f,0x61,0x25,\r
-0x86,0xc2,0xb9,0x54,0x56,0x94,0x9f,0xe5,0xa2,0x3d,0xdc,0x0d,0x27,0x4e,0x9d,0xda,\r
-0xd5,0x8b,0x45,0x14,0x57,0xd4,0x9e,0x89,0xe6,0x1f,0xb4,0x3c,0x7e,0x67,0xc3,0xfc,\r
-0xff,0x00,0x72,0xee,0x36,0xfd,0x18,0x7f,0x5a,0xf9,0x8e,0xbe,0xa7,0xf8,0xf7,0x1e,\r
-0xff,0x00,0x86,0xb7,0xed,0xfd,0xc9,0x61,0x6f,0xfc,0x88,0x07,0xf5,0xaf,0x96,0x33,\r
-0x5f,0x96,0x71,0x32,0xb6,0x35,0x3f,0xee,0xaf,0xcd,0x9f,0x3b,0x98,0x2f,0xde,0xdf,\r
-0xc8,0x28,0xa2,0x8a,0xf9,0x23,0xcc,0x3d,0x5f,0xf6,0x6f,0xb9,0x31,0xf8,0xd6,0xf2,\r
-0x1c,0xe1,0x64,0xb1,0x63,0x8f,0x52,0x1d,0x3f,0xc4,0xd7,0xd2,0x63,0xad,0x7c,0xa1,\r
-0xf0,0x42,0xf1,0xad,0x3e,0x25,0x69,0x4a,0xa7,0x0b,0x30,0x96,0x26,0xfa,0x79,0x6c,\r
-0x7f,0x98,0x15,0xf5,0x78,0xaf,0xd5,0x38,0x6a,0x7c,0xd8,0x2e,0x5e,0xcd,0xff,0x00,\r
-0x99,0xf4,0x78,0x07,0x7a,0x36,0xec,0xc5,0xa2,0x8a,0x2b,0xeb,0x0f,0x48,0x2a,0x3b,\r
-0x89,0xd2,0xda,0x09,0x25,0x91,0x82,0x47,0x1a,0x96,0x66,0x27,0x80,0x00,0xe4,0xd3,\r
-0xcd,0x70,0xff,0x00,0x19,0xb5,0xcf,0xec,0x4f,0x87,0xba,0xa1,0x5c,0x79,0xb7,0x4a,\r
-0x2d,0x14,0x1e,0xfb,0xf8,0x6f,0xfc,0x77,0x71,0xfc,0x2b,0x9f,0x11,0x59,0x50,0xa3,\r
-0x3a,0xaf,0xa2,0x6c,0x89,0xcb,0x92,0x2e,0x5d,0x8f,0x96,0xb5,0xbd,0x56,0x4d,0x73,\r
-0x59,0xbe,0xd4,0x65,0x1b,0x64,0xba,0x9d,0xe6,0x2b,0xfd,0xdd,0xc4,0x9c,0x7e,0x15,\r
-0x4a,0x8a,0x2b,0xf0,0x99,0xc9,0xce,0x4e,0x4f,0x76,0x7c,0x73,0x77,0x77,0x61,0x40,\r
-0x04,0x90,0x07,0x24,0xd1,0x5d,0x17,0xc3,0xcd,0x1b,0xfb,0x7f,0xc6,0xda,0x3d,0x91,\r
-0x5d,0xc8,0xf7,0x0a,0xee,0x3d,0x51,0x7e,0x66,0xfd,0x14,0xd5,0xd1,0xa6,0xeb,0x54,\r
-0x8d,0x35,0xbb,0x69,0x0e,0x31,0x72,0x92,0x8a,0xea,0x7d,0x59,0xe0,0x9d,0x10,0x78,\r
-0x77,0xc2,0x7a,0x56,0x9e,0x17,0x6b,0x43,0x6e,0x81,0xc7,0xfb,0x64,0x65,0xbf,0x52,\r
-0x6b,0x76,0x90,0x74,0x18,0xe9,0x4b,0x5f,0xbb,0xd3,0x82,0xa7,0x05,0x05,0xb2,0x56,\r
-0x3e,0xc6,0x2b,0x95,0x24,0x82,0x8a,0x28,0xad,0x0a,0x0a,0xc0,0xf1,0xcf,0x86,0x93,\r
-0xc5,0xde,0x16,0xd4,0x34,0xb6,0x21,0x5a,0x78,0xff,0x00,0x76,0xc7,0xa2,0xc8,0x0e,\r
-0x54,0x9f,0x6c,0x81,0x5b,0xf4,0x86,0xb3,0xa9,0x08,0xd5,0x83,0x84,0xb6,0x7a,0x0a,\r
-0x49,0x49,0x38,0xbe,0xa7,0xc3,0x57,0x56,0xb2,0xd9,0x5c,0xcb,0x6f,0x3c,0x6d,0x14,\r
-0xd1,0x39,0x8d,0xd1,0x86,0x0a,0xb0,0x38,0x20,0xd4,0x55,0xf4,0x07,0xc6,0xef,0x85,\r
-0x32,0xea,0x8c,0xfe,0x20,0xd1,0xe1,0x32,0x5d,0x01,0x9b,0xab,0x64,0x1c,0xc8,0x07,\r
-0xf1,0xa8,0xee,0x40,0xea,0x3b,0x8f,0x7e,0xbf,0x3f,0xd7,0xe2,0xd9,0x86,0x06,0xa6,\r
-0x02,0xb3,0xa7,0x3d,0xba,0x3e,0xeb,0xfa,0xdc,0xf9,0x3a,0xf4,0x65,0x46,0x7c,0xac,\r
-0x28,0xa2,0x8a,0xf3,0x0e,0x73,0xb3,0xf8,0x73,0xf1,0x3a,0xfb,0xe1,0xf5,0xe3,0x04,\r
-0x43,0x77,0xa7,0x4a,0x73,0x35,0xab,0x1c,0x73,0xfd,0xe5,0x3d,0x8f,0xf3,0xfc,0xb1,\r
-0xf4,0x3f,0x86,0xbe,0x2b,0xf8,0x67,0xc4,0xd1,0x21,0x87,0x52,0x8a,0xd6,0x72,0x39,\r
-0xb7,0xbb,0x61,0x13,0x83,0xe9,0xc9,0xc1,0xfc,0x09,0xaf,0x91,0x68,0xaf,0xa1,0xcb,\r
-0xf3,0xbc,0x46,0x02,0x3e,0xcd,0x7b,0xd1,0xec,0xfa,0x7a,0x33,0xba,0x8e,0x2e,0xa5,\r
-0x15,0xcb,0xba,0x3e,0xe7,0x8e,0xe2,0x29,0x90,0x3c,0x72,0x23,0xa1,0xe8,0xca,0xc0,\r
-0x83,0x54,0xf5,0x0d,0x7f,0x4c,0xd2,0x50,0xb5,0xee,0xa1,0x6b,0x68,0xa3,0xbc,0xd3,\r
-0x2a,0xff,0x00,0x33,0x5f,0x13,0x2c,0x8e,0x83,0x0a,0xcc,0xa3,0xd8,0xe2,0x9a,0x79,\r
-0x39,0x27,0x27,0xde,0xbd,0xd7,0xc5,0x52,0xb7,0xbb,0x47,0x5f,0x5f,0xf8,0x07,0x67,\r
-0xf6,0x93,0xe9,0x1f,0xc7,0xfe,0x01,0xf4,0x6f,0x8c,0x7f,0x68,0x5d,0x2b,0x4c,0x89,\r
-0xe1,0xd0,0xe3,0x3a,0xa5,0xd9,0xc8,0x13,0x30,0x29,0x0a,0x7e,0x7c,0xb7,0xe1,0xc1,\r
-0xf5,0xaf,0x03,0xd7,0xbc,0x41,0x7f,0xe2,0x6d,0x4a,0x5b,0xfd,0x46,0xe1,0xae,0x6e,\r
-0x64,0xea,0xcd,0xd0,0x0e,0xc0,0x0e,0xc0,0x7a,0x0a,0xce,0xa2,0xbe,0x5f,0x1d,0x9a,\r
-0x62,0x71,0xef,0xf7,0xaf,0x4e,0xcb,0x63,0xce,0xad,0x88,0xa9,0x5b,0xe2,0xd8,0x28,\r
-0xa2,0x8a,0xf2,0x4e,0x60,0xad,0x8f,0x09,0xf8,0x5e,0xf7,0xc6,0x1a,0xe5,0xbe,0x9b,\r
-0x62,0x84,0xc9,0x21,0xcb,0xc8,0x47,0xcb,0x1a,0x7f,0x13,0x1f,0x61,0xfa,0x9c,0x0e,\r
-0xf4,0x78,0x5f,0xc2,0x9a,0x97,0x8c,0x35,0x44,0xb1,0xd3,0x60,0x32,0xc8,0x7e,0xfb,\r
-0x9c,0x84,0x89,0x7f,0xbc,0xc7,0xb0,0xfd,0x7d,0x33,0x5f,0x54,0x7c,0x3e,0xf8,0x7f,\r
-0x63,0xe0,0x2d,0x24,0x41,0x6e,0x04,0xd7,0x72,0x00,0x6e,0x2e,0x98,0x61,0xa4,0x3f,\r
-0xd0,0x0e,0xc2,0xbe,0x8b,0x29,0xca,0x67,0x8f,0xa8,0xa7,0x35,0x6a,0x6b,0x77,0xdf,\r
-0xc9,0x1d,0xb8,0x6c,0x34,0xab,0xca,0xef,0xe1,0x35,0xbc,0x35,0xe1,0xeb,0x5f,0x0b,\r
-0x68,0xb6,0xba,0x65,0x92,0x95,0x82,0x04,0xda,0x09,0xea,0xc7,0xbb,0x1f,0x72,0x72,\r
-0x7f,0x1a,0xd4,0x14,0x52,0xd7,0xeb,0x70,0x84,0x69,0xc5,0x46,0x2a,0xc9,0x1f,0x4e,\r
-0x92,0x4a,0xc8,0xc7,0xf1,0x4f,0x8a,0x6c,0x7c,0x21,0xa5,0x9d,0x43,0x51,0x76,0x4b,\r
-0x60,0xe9,0x19,0x28,0xbb,0x8e,0x58,0xe3,0xa7,0xb7,0x5e,0x39,0xc0,0xa9,0x74,0x3f,\r
-0x12,0x69,0x9e,0x23,0xb5,0x17,0x1a,0x6d,0xf4,0x37,0x91,0x11,0x92,0x62,0x6c,0x95,\r
-0xfa,0x8e,0xa0,0xfb,0x1a,0xf1,0xdf,0xda,0x5f,0x5d,0xf9,0x74,0x8d,0x1d,0x1b,0xae,\r
-0xeb,0xa9,0x00,0x3f,0xf0,0x15,0xff,0x00,0xd9,0xab,0xc4,0x2c,0xaf,0xee,0x74,0xeb,\r
-0x85,0x9e,0xd2,0xe2,0x5b,0x69,0xd7,0xee,0xc9,0x0b,0x94,0x61,0xf8,0x8a,0xf8,0xec,\r
-0x77,0x10,0x3c,0x16,0x32,0x54,0x79,0x79,0xa2,0xad,0xeb,0x73,0xcb,0xad,0x8d,0xf6,\r
-0x55,0x5c,0x6d,0x74,0x7d,0xc7,0x9a,0x5a,0xf9,0x63,0x44,0xf8,0xf1,0xe2,0xbd,0x1c,\r
-0x2a,0x4d,0x71,0x16,0xa7,0x10,0xfe,0x1b,0xa8,0xf2,0xd8,0xff,0x00,0x79,0x70,0x7f,\r
-0x3c,0xd7,0x6f,0xa6,0x7e,0xd3,0x36,0xcc,0x48,0xd4,0x34,0x39,0xa2,0x03,0xf8,0xad,\r
-0xa6,0x0f,0x93,0xf4,0x60,0xbf,0xce,0xbb,0xe8,0xf1,0x0e,0x06,0xaa,0xf7,0xa4,0xe2,\r
-0xfc,0xd7,0xf9,0x5c,0xda,0x18,0xea,0x32,0xdd,0xd8,0xf6,0xfc,0xd1,0x9a,0xf3,0x1b,\r
-0x0f,0xda,0x1f,0xc2,0xb7,0x6a,0x0c,0xdf,0x6d,0xb1,0x3e,0x93,0x41,0x9f,0xfd,0x00,\r
-0xb5,0x5f,0x5f,0x8e,0xbe,0x0b,0x23,0xfe,0x42,0xce,0x3e,0xb6,0xb2,0xff,0x00,0xf1,\r
-0x35,0xe9,0x47,0x33,0xc1,0x4b,0x6a,0xb1,0xfb,0xcd,0xd6,0x22,0x93,0xda,0x48,0xef,\r
-0xe9,0x1d,0x82,0xa1,0x24,0x80,0x31,0xce,0x6b,0xcd,0xaf,0xff,0x00,0x68,0x1f,0x09,\r
-0x5a,0xc2,0xcd,0x0c,0xd7,0x37,0xcc,0x3f,0x82,0x1b,0x76,0x52,0x7f,0xef,0xbd,0xa3,\r
-0xf5,0xaf,0x35,0xf1,0xe7,0xc7,0xab,0xef,0x12,0x5a,0x4d,0xa7,0xe9,0x36,0xe7,0x4c,\r
-0xb2,0x94,0x15,0x92,0x56,0x6c,0xcc,0xeb,0xe9,0xc7,0x0b,0xef,0x8c,0xfd,0x6b,0x93,\r
-0x13,0x9d,0xe0,0xa8,0x41,0xb5,0x35,0x27,0xd9,0x6a,0x67,0x53,0x17,0x4a,0x0a,0xf7,\r
-0xb9,0xe7,0xbe,0x28,0x96,0x0b,0x8f,0x12,0xea,0xd2,0xda,0xe3,0xec,0xcf,0x77,0x2b,\r
-0x45,0xb7,0xa6,0xd2,0xe4,0x8c,0x7e,0x15,0x97,0x45,0x15,0xf9,0x04,0xe5,0xcf,0x37,\r
-0x2e,0xee,0xe7,0xcb,0xb7,0x77,0x70,0xa2,0x8a,0x2a,0x04,0x75,0xff,0x00,0x08,0xf4,\r
-0xf6,0xd4,0xbe,0x22,0xe8,0x88,0x01,0xc4,0x73,0x79,0xc4,0x8e,0xc1,0x14,0xb7,0xf4,\r
-0xaf,0xae,0xc7,0x4a,0xf0,0x7f,0xd9,0xbf,0xc2,0xac,0x64,0xbe,0xf1,0x04,0xc9,0x85,\r
-0xdb,0xf6,0x6b,0x72,0x47,0x5e,0xee,0x7f,0x40,0x3f,0x3a,0xf7,0x81,0xd2,0xbf,0x57,\r
-0xe1,0xcc,0x3b,0xa3,0x82,0xe7,0x97,0xda,0x77,0xf9,0x74,0x3e,0x93,0x03,0x07,0x1a,\r
-0x57,0x7d,0x45,0xa2,0x8a,0x2b,0xea,0x4f,0x44,0x69,0xaf,0x92,0xff,0x00,0x69,0xfb,\r
-0xbf,0x33,0x5a,0x74,0xce,0x70,0xd5,0xf5,0xab,0x74,0xaf,0x8c,0x7f,0x68,0xdb,0xbf,\r
-0x3b,0xc4,0xb2,0x8c,0xff,0x00,0x19,0xaf,0x99,0xcf,0xdd,0xb0,0xb6,0xee,0xd1,0xe0,\r
-0x67,0x72,0xe5,0xc2,0x48,0xf9,0xcb,0xc7,0x32,0xec,0xd2,0x67,0x3d,0x3e,0x5a,0xfa,\r
-0x47,0xfe,0x09,0x79,0xa6,0x88,0x7e,0x0f,0xf8,0xbb,0x50,0xc7,0xcd,0x77,0xe2,0x39,\r
-0x57,0x38,0xec,0x90,0x42,0x07,0xea,0x4d,0x7c,0xc3,0xf1,0x1e,0x5f,0x2f,0x46,0x9c,\r
-0xe7,0xb1,0xfe,0x55,0xf5,0xff,0x00,0xfc,0x13,0x53,0x4f,0x36,0x9f,0xb3,0x2c,0x17,\r
-0x24,0x63,0xed,0xda,0xcd,0xf5,0xc0,0x3e,0xb8,0x93,0xcb,0xff,0x00,0xda,0x75,0x9e,\r
-0x47,0x1b,0x53,0xb9,0xf1,0xbc,0x27,0x1b,0xe2,0xeb,0xcf,0xc9,0x1f,0x55,0x51,0x45,\r
-0x15,0xf5,0x47,0xea,0x21,0x5f,0x13,0x7e,0xd3,0x3e,0x2f,0x3e,0x27,0xf8,0x9b,0x71,\r
-0x68,0x8e,0x4d,0xa6,0x92,0x9f,0x64,0x41,0xdb,0x7f,0x59,0x0f,0xe7,0x81,0xff,0x00,\r
-0x01,0xaf,0xae,0xbc,0x73,0xe2,0x68,0x7c,0x1d,0xe1,0x2d,0x57,0x59,0x9b,0x1b,0x6c,\r
-0xe0,0x69,0x14,0x1f,0xe2,0x7c,0x61,0x57,0xf1,0x62,0x07,0xe3,0x5f,0x9f,0x28,0x2e,\r
-0x75,0xcd,0x57,0x74,0x8c,0xd3,0x5d,0x5d,0xcc,0x59,0x98,0xf2,0x59,0xd9,0xb2,0x4f,\r
-0xe6,0x6b,0xe4,0xb8,0x83,0x11,0xcb,0x4e,0x34,0x23,0xbb,0xd7,0xfa,0xf9,0x9f,0x1b,\r
-0xc4,0x58,0x87,0xc9,0x0c,0x34,0x77,0x93,0xbb,0xf4,0xff,0x00,0x87,0x3e,0x96,0xfd,\r
-0x92,0x7c,0x1f,0xe4,0xd9,0xdf,0x6b,0xf2,0xa6,0x0c,0x87,0xc9,0x88,0x91,0xdb,0xb9,\r
-0xaf,0xa3,0xeb,0x97,0xf8,0x6f,0xe1,0xa4,0xf0,0x97,0x83,0x74,0xcd,0x39,0x54,0x2b,\r
-0x47,0x10,0x2f,0x8e,0xec,0x7a,0xd7,0x51,0x5e,0xde,0x5d,0x87,0xfa,0xb6,0x1a,0x14,\r
-0xfa,0xf5,0xf5,0x3e,0x8f,0x03,0x87,0x58,0x5c,0x3c,0x29,0x76,0x41,0x5f,0x0c,0x7f,\r
-0xc1,0x5c,0xbe,0x35,0x9f,0x87,0x7f,0xb3,0xbc,0x3e,0x0f,0xb2,0x9b,0xcb,0xd5,0x3c,\r
-0x65,0x75,0xf6,0x56,0xda,0xd8,0x65,0xb4,0x88,0xac,0x93,0x1f,0x70,0xc7,0xcb,0x42,\r
-0x3b,0x87,0x6f,0x4a,0xfb,0x9e,0xbf,0x23,0xff,0x00,0xe0,0xb6,0x56,0x5a,0x90,0xf8,\r
-0x89,0xf0,0xd6,0xf2,0x48,0xdc,0xe9,0x07,0x4a,0xb9,0x8a,0x17,0xc7,0xc8,0x26,0x13,\r
-0x29,0x90,0x7d,0x76,0x98,0xff,0x00,0x2a,0xf4,0xd1,0xdc,0xcf,0x86,0xbf,0x67,0xbf,\r
-0x04,0xe9,0xbf,0x12,0x7e,0x39,0x78,0x17,0xc3,0x3a,0xcd,0xe4,0x76,0x1a,0x56,0xa9,\r
-0xac,0x5b,0xdb,0x5d,0x4f,0x2b,0x05,0x51,0x19,0x71,0xb8,0x64,0xf7,0x61,0xf2,0x8f,\r
-0x72,0x2b,0xfa,0x16,0xf8,0xcd,0xf1,0x1b,0x4e,0xf8,0x1d,0xf0,0x6f,0xc5,0x1e,0x2e,\r
-0x9e,0x38,0xe3,0xb4,0xd0,0x34,0xc9,0x27,0x86,0xd9,0x70,0x81,0xdd,0x53,0x11,0x44,\r
-0xbd,0x86,0xe6,0xda,0xa0,0x7b,0xd7,0xf3,0x4e,0xac,0x51,0x83,0x29,0x2a,0xc0,0xe4,\r
-0x11,0xd4,0x57,0x5f,0xaa,0xfc,0x62,0xf1,0xde,0xbb,0xe1,0x97,0xf0,0xee,0xa7,0xe3,\r
-0x2d,0x7b,0x51,0xd0,0x5f,0x6e,0xed,0x32,0xeb,0x52,0x9a,0x5b,0x73,0xb4,0x86,0x5c,\r
-0xc6,0xcc,0x47,0x04,0x02,0x38,0xe3,0x14,0xc8,0x4e,0xc7,0x77,0xe1,0x9f,0xda,0x7f,\r
-0xe3,0xb6,0xb5,0xe2,0xab,0x6b,0x5d,0x23,0xe2,0x6f,0x8b,0x5b,0x55,0xd5,0x2f,0x16,\r
-0x28,0xa1,0x4d,0x5a,0x72,0xad,0x2c,0x8f,0x85,0x01,0x4b,0x60,0x0c,0xb7,0x40,0x31,\r
-0x5f,0xd0,0x5f,0xc3,0xcd,0x07,0x50,0xf0,0xbf,0x81,0x74,0x0d,0x27,0x55,0xd4,0xae,\r
-0x35,0x9d,0x52,0xce,0xc6,0x18,0x6f,0x35,0x0b,0xa9,0x0c,0x92,0x5c,0xcc,0x10,0x79,\r
-0x92,0x33,0x1e,0x4e,0x5b,0x26,0xbf,0x99,0xff,0x00,0x09,0xf8,0xaf,0x55,0xf0,0x37,\r
-0x89,0x34,0xed,0x7f,0x43,0xbc,0x6d,0x3f,0x58,0xd3,0xa7,0x5b,0x9b,0x5b,0xa4,0x55,\r
-0x66,0x8a,0x45,0x39,0x56,0x01,0x81,0x19,0x1e,0xe2,0xbe,0x84,0xd3,0x3f,0xe0,0xa5,\r
-0x1f,0xb4,0x76,0x95,0xf7,0x3e,0x24,0x5c,0x4e,0x3d,0x2e,0xb4,0xfb,0x49,0x7f,0xf4,\r
-0x28,0x8d,0x0c,0x69,0x9f,0xbf,0xd4,0x57,0xe1,0x66,0x99,0xff,0x00,0x05,0x62,0xfd,\r
-0xa1,0xec,0x17,0x12,0xeb,0xda,0x46,0xa1,0xef,0x73,0xa4,0x42,0x3f,0xf4,0x00,0xb5,\r
-0xbf,0x63,0xff,0x00,0x05,0x87,0xf8,0xed,0x6b,0x81,0x35,0x9f,0x84,0xaf,0x3f,0xeb,\r
-0xae,0x99,0x2a,0x9f,0xfc,0x76,0x61,0x4a,0xc5,0x5d,0x1f,0xb6,0x94,0x57,0x86,0xfe,\r
-0xc6,0x7f,0x16,0x3c,0x69,0xf1,0xc7,0xe0,0x3e,0x8b,0xe3,0x8f,0x1c,0x58,0xe9,0xba,\r
-0x6e,0xa3,0xac,0x49,0x2c,0xd6,0xb6,0xfa,0x64,0x4f,0x1c,0x7f,0x66,0x0d,0xb5,0x18,\r
-0x87,0x76,0x39,0x62,0xac,0x7a,0xe3,0x05,0x7f,0x1f,0x4a,0xf8,0xa1,0xe3,0xfd,0x3f,\r
-0xe1,0x67,0xc3,0xbf,0x12,0x78,0xbf,0x54,0x60,0x2c,0x34,0x4b,0x09,0xaf,0xa5,0x05,\r
-0xb1,0xbf,0x62,0x92,0x14,0x7b,0xb1,0xc2,0x8f,0x72,0x29,0x0c,0xea,0x28,0xaf,0xcb,\r
-0xad,0x3b,0xfe,0x0b,0x77,0x64,0x42,0x8b,0xef,0x84,0xd3,0xab,0x77,0xfb,0x3e,0xb8,\r
-0x0f,0xf3,0x80,0x57,0x61,0xa5,0x7f,0xc1,0x6a,0xfe,0x1b,0xcb,0x1e,0x75,0x2f,0x00,\r
-0x78,0xa6,0xd2,0x4f,0xee,0xda,0xbd,0xb4,0xe3,0xf3,0x69,0x13,0xf9,0x53,0xb0,0xae,\r
-0x8f,0xd1,0x5a,0x2b,0xe0,0x5b,0x4f,0xf8,0x2c,0xef,0xc1,0x89,0xb1,0xe7,0x78,0x6b,\r
-0xc6,0xb6,0xe7,0xd3,0xec,0x56,0xad,0xfc,0xae,0x2b,0xab,0xd1,0xbf,0xe0,0xad,0xdf,\r
-0xb3,0xe6,0xa6,0xa0,0xdd,0x6a,0x9a,0xee,0x90,0x7d,0x2f,0x34,0x89,0x1b,0x1f,0xf7,\r
-0xe8,0xbd,0x01,0x74,0x7d,0x9f,0x45,0x7c,0xa7,0x69,0xff,0x00,0x05,0x44,0xfd,0x9b,\r
-0x6e,0x80,0x27,0xe2,0x04,0x90,0x67,0xfe,0x7a,0xe8,0xb7,0xe3,0xf9,0x42,0x6b,0xa6,\r
-0xd2,0xff,0x00,0xe0,0xa0,0xbf,0xb3,0xce,0xae,0x14,0xc3,0xf1,0x4f,0x46,0x8b,0x77,\r
-0x41,0x74,0xb3,0x40,0x7f,0xf1,0xf4,0x14,0x87,0x73,0xe8,0x6a,0x2b,0xc9,0xf4,0xff,\r
-0x00,0xda,0xcb,0xe0,0xb6,0xa8,0xa1,0xad,0xfe,0x2b,0xf8,0x35,0x81,0xec,0xfa,0xe5,\r
-0xba,0x1f,0xc9,0x9c,0x56,0xfd,0x97,0xc7,0x5f,0x86,0xda,0x96,0x3e,0xc9,0xf1,0x07,\r
-0xc2,0xd7,0x39,0xe9,0xe5,0x6b,0x56,0xcd,0x9f,0xc9,0xe8,0x03,0xb4,0x9a,0x08,0xe7,\r
-0x52,0x92,0x22,0xc8,0x87,0xaa,0xb0,0xc8,0x3f,0x85,0x50,0x9f,0xc3,0x3a,0x3d,0xcf,\r
-0xfa,0xed,0x2e,0xce,0x5f,0xf7,0xed,0xd0,0xff,0x00,0x4a,0x76,0x9f,0xe2,0x4d,0x27,\r
-0x56,0x8c,0x49,0x63,0xa9,0xd9,0x5e,0xc6,0x79,0x0d,0x6f,0x70,0x92,0x03,0xf9,0x13,\r
-0x5a,0x0a,0xe1,0x86,0x41,0x04,0x7a,0x83,0x51,0x28,0x46,0x5f,0x12,0xb8,0x9a,0x4f,\r
-0x74,0x73,0xf3,0x7c,0x3c,0xf0,0xc5,0xc7,0x32,0x78,0x7f,0x4e,0x3f,0xf6,0xea,0x83,\r
-0xfa,0x55,0x49,0x7e,0x15,0x78,0x46,0x51,0xce,0x81,0x66,0xbf,0xee,0x47,0xb7,0xf9,\r
-0x57,0x59,0x9a,0x5a,0xc2,0x58,0x5a,0x12,0xde,0x0b,0xee,0x44,0x3a,0x70,0x7b,0xc5,\r
-0x1c,0x8e,0x9d,0xf0,0xaf,0xc2,0xfa,0x4e,0xa5,0x6f,0x7f,0x65,0xa5,0xad,0xbd,0xd4,\r
-0x0d,0xba,0x37,0x49,0x5f,0x83,0xd3,0xa6,0x71,0x5d,0x68,0xeb,0x4b,0x45,0x69,0x4e,\r
-0x8d,0x3a,0x2a,0xd4,0xe2,0x92,0xf2,0x2a,0x31,0x8c,0x34,0x8a,0xb0,0x51,0x45,0x15,\r
-0xb1,0x42,0x1a,0xe2,0x7e,0x28,0x7c,0x3c,0x9b,0xe2,0x1d,0x85,0x9d,0xaa,0x6a,0x22,\r
-0xc2,0x3b,0x79,0x0c,0xa5,0x4c,0x3e,0x66,0xf6,0xc6,0x07,0xf1,0x0c,0x63,0x27,0xd7,\r
-0xad,0x76,0xf4,0x56,0x15,0xe8,0x43,0x13,0x4d,0xd2,0xa8,0xaf,0x17,0xb9,0x13,0x82,\r
-0xa9,0x17,0x19,0x6c,0x7c,0xf5,0x37,0xec,0xcd,0xaa,0x2e,0x7c,0x9d,0x66,0xd1,0xff,\r
-0x00,0xdf,0x8d,0x97,0xfc,0x6a,0x93,0xfe,0xcd,0xbe,0x23,0x19,0xd9,0x7d,0xa6,0xb7,\r
-0xd6,0x49,0x07,0xfe,0xc9,0x5f,0x49,0x51,0x5e,0x0b,0xe1,0xdc,0xbd,0xfd,0x97,0xf7,\r
-0xb3,0x8d,0xe0,0x68,0xbe,0x9f,0x89,0xf3,0x1c,0xff,0x00,0xb3,0xbf,0x8a,0xa2,0x52,\r
-0x55,0xf4,0xf9,0x88,0xfe,0x14,0x9c,0x8f,0xe6,0xa2,0xbb,0x0f,0x83,0x7f,0x0a,0xb5,\r
-0x8f,0x0a,0x78,0x9a,0x7d,0x4b,0x57,0x82,0x38,0x55,0x20,0x31,0xc3,0xb6,0x45,0x7d,\r
-0xcc,0xc4,0x64,0xf0,0x78,0xc0,0x18,0xfc,0x6b,0xdb,0x28,0xaa,0xa1,0x90,0xe1,0x30,\r
-0xd5,0x63,0x5a,0x17,0xbc,0x7c,0xc2,0x18,0x2a,0x54,0xe4,0xa4,0xaf,0xa0,0x51,0x45,\r
-0x15,0xf4,0x67,0x78,0x51,0x45,0x14,0x00,0x51,0x45,0x14,0x00,0x87,0x9a,0xf2,0xef,\r
-0x88,0x7f,0x03,0xac,0x3c,0x55,0x24,0x97,0xda,0x63,0xa6,0x9b,0xa9,0xb6,0x59,0xb8,\r
-0xfd,0xd4,0xc7,0xd5,0x80,0xe8,0x7d,0xc7,0xe4,0x6b,0xd4,0xa8,0xae,0x4c,0x4e,0x16,\r
-0x8e,0x2e,0x1e,0xce,0xb4,0x6e,0x8c,0xea,0x53,0x8d,0x55,0xcb,0x35,0x73,0xe3,0x1f,\r
-0x13,0x78,0x1f,0x5b,0xf0,0x84,0xc5,0x35,0x4b,0x09,0x20,0x8f,0x38,0x13,0xaf,0xcd,\r
-0x13,0x7d,0x18,0x71,0xf8,0x75,0xf6,0xac,0x2a,0xfb,0x9e,0x68,0x52,0x78,0xca,0x48,\r
-0xaa,0xe8,0x78,0x2a,0xc3,0x20,0xd7,0x15,0xae,0x7c,0x18,0xf0,0x9e,0xb8,0x59,0xdf,\r
-0x4d,0x5b,0x49,0x4f,0xfc,0xb4,0xb3,0x6f,0x2b,0xf4,0x1f,0x2f,0xe9,0x5f,0x0f,0x8a,\r
-0xe1,0x79,0x5e,0xf8,0x69,0xfc,0x9f,0xf9,0xa3,0xc7,0xa9,0x97,0x3d,0xe9,0xbf,0xbc,\r
-0xf9,0x36,0x8a,0xf7,0xed,0x43,0xf6,0x65,0xb2,0x91,0x89,0xb0,0xd6,0xe7,0x85,0x7b,\r
-0x2d,0xc4,0x2b,0x27,0xea,0x0a,0xd6,0x0d,0xcf,0xec,0xd5,0xad,0x23,0x91,0x06,0xa9,\r
-0x63,0x2a,0xf6,0x32,0x07,0x43,0xfa,0x03,0x5e,0x0c,0xf2,0x2c,0xc2,0x0f,0xf8,0x77,\r
-0xf4,0x68,0xe3,0x78,0x3a,0xeb,0xec,0x9e,0x3f,0x45,0x7a,0xb1,0xfd,0x9b,0xfc,0x4b,\r
-0xda,0xf7,0x4b,0x3f,0xf6,0xd6,0x4f,0xfe,0x22,0x9e,0x9f,0xb3,0x6f,0x88,0xc9,0xf9,\r
-0xef,0xb4,0xd5,0x1e,0xd2,0x48,0x7f,0xf6,0x4a,0xc1,0x64,0xf8,0xf7,0xff,0x00,0x2e,\r
-0x99,0x1f,0x55,0xad,0xfc,0xac,0xf2,0x6a,0x2b,0xdb,0x74,0xff,0x00,0xd9,0x9a,0xe9,\r
-0xb9,0xbd,0xd7,0x22,0x8f,0xd5,0x60,0xb7,0x2f,0xfa,0x92,0x3f,0x95,0x75,0x9a,0x3f,\r
-0xec,0xf3,0xe1,0x9b,0x0c,0x35,0xdb,0x5d,0x6a,0x4c,0x3b,0x4b,0x26,0xc4,0xfc,0x97,\r
-0x07,0xf5,0xae,0xda,0x5c,0x3d,0x8f,0xa8,0xf5,0x8a,0x8f,0xab,0xff,0x00,0x2b,0x9a,\r
-0xc7,0x03,0x5a,0x5b,0xab,0x1f,0x36,0x59,0xd9,0x5c,0x6a,0x17,0x09,0x05,0xac,0x12,\r
-0xdc,0xcc,0xe7,0x0b,0x1c,0x28,0x59,0x8f,0xd0,0x0a,0xf5,0x5f,0x05,0xfe,0xcf,0x9a,\r
-0x9e,0xaa,0xd1,0xdc,0xeb,0xb2,0x7f,0x66,0x5a,0x13,0x9f,0x21,0x08,0x69,0xd8,0x7e,\r
-0xa1,0x7f,0x1c,0x9f,0x6a,0xf7,0xdd,0x1f,0xc3,0xba,0x6f,0x87,0xe1,0x31,0x69,0xd6,\r
-0x36,0xf6,0x51,0x9e,0xa2,0x18,0xc2,0xe7,0xeb,0xeb,0x5a,0x75,0xf4,0xd8,0x3e,0x19,\r
-0xa3,0x49,0xa9,0xe2,0x25,0xcc,0xfb,0x6c,0xbf,0xcd,0x9e,0x85,0x2c,0xbe,0x31,0xd6,\r
-0xa3,0xb9,0x93,0xe1,0xdf,0x0c,0xe9,0xbe,0x15,0xd3,0xd6,0xcf,0x4c,0xb5,0x4b,0x58,\r
-0x47,0x5d,0xbf,0x79,0xcf,0xab,0x1e,0xa4,0xfd,0x6b,0x54,0x74,0xa5,0xa2,0xbe,0xca,\r
-0x10,0x8d,0x38,0xa8,0xc1,0x59,0x23,0xd5,0x49,0x45,0x59,0x05,0x35,0xba,0x73,0x4e,\r
-0xa8,0x2f,0x56,0x66,0xb5,0x98,0x40,0x50,0x4f,0xb0,0xf9,0x65,0xfe,0xee,0xec,0x71,\r
-0x9f,0x6c,0xd5,0x3d,0x15,0xc6,0x7c,0x99,0xf1,0x6f,0x5d,0xfe,0xdf,0xf1,0xfe,0xab,\r
-0x32,0xb6,0xe8,0xa1,0x93,0xec,0xd1,0xf3,0x9e,0x13,0x83,0x8f,0xab,0x6e,0x3f,0x8d,\r
-0x71,0xd5,0xdd,0x6b,0xff,0x00,0x06,0x7c,0x5b,0xa3,0xb4,0x92,0x35,0x81,0xd4,0x50,\r
-0x1c,0x99,0xac,0xdb,0xcc,0x2d,0xef,0xb7,0xef,0x7e,0x95,0xc5,0xde,0xd9,0x5c,0x69,\r
-0xb3,0x18,0x6e,0xed,0xe5,0xb5,0x98,0x75,0x8e,0x64,0x28,0xdf,0x91,0xe6,0xbf,0x11,\r
-0xc6,0xd2,0xc4,0x2a,0xd3,0xa9,0x5e,0x0d,0x36,0xdb,0xd5,0x1f,0x23,0x5a,0x33,0xe7,\r
-0x72,0x92,0xdc,0x86,0x8a,0x28,0xaf,0x38,0xc0,0x28,0xa2,0x8a,0x00,0x28,0xa2,0x8a,\r
-0x00,0x28,0xa2,0xae,0xe9,0x5a,0x26,0xa1,0xae,0xcf,0xe4,0xe9,0xd6,0x53,0xde,0xcb,\r
-0xdd,0x60,0x42,0xd8,0xf7,0x38,0xe9,0xf8,0xd5,0x46,0x32,0x9b,0xe5,0x8a,0xbb,0x1a,\r
-0x4d,0xe8,0x8a,0x55,0xd4,0x78,0x03,0xc0,0x17,0xfe,0x3d,0xd5,0xd6,0xde,0xdd,0x5a,\r
-0x2b,0x38,0xc8,0x37,0x17,0x44,0x7c,0xb1,0xaf,0xa0,0xf5,0x63,0xd8,0x7f,0x4a,0xef,\r
-0xbc,0x1b,0xfb,0x3b,0xde,0xdd,0xba,0x5c,0x78,0x86,0x71,0x67,0x00,0xe4,0xda,0x40,\r
-0xc1,0xa4,0x6f,0x62,0xc3,0x81,0xf8,0x67,0xf0,0xaf,0x76,0xd1,0x74,0x5b,0x1f,0x0f,\r
-0xd8,0x47,0x65,0xa7,0xdb,0x25,0xad,0xb4,0x63,0xe5,0x44,0x1f,0xa9,0xf5,0x3e,0xe6,\r
-0xbe,0xc3,0x2c,0xe1,0xfa,0xb5,0xa4,0xaa,0x62,0x97,0x2c,0x7b,0x75,0x7f,0xe4,0x7a,\r
-0x98,0x7c,0x14,0xa4,0xd4,0xaa,0x68,0x83,0x45,0xd1,0xad,0x74,0x0d,0x32,0xdb,0x4f,\r
-0xb2,0x8c,0x45,0x6d,0x02,0x04,0x45,0xf6,0xf5,0x3e,0xa4,0xfa,0xd5,0xe1,0x4b,0x45,\r
-0x7e,0x99,0x18,0xa8,0x25,0x18,0xec,0x8f,0x7d,0x24,0x95,0x90,0x51,0x45,0x15,0x43,\r
-0x1b,0x21,0xdb,0x1b,0x1f,0x40,0x4d,0x7c,0x35,0xf1,0xd6,0xeb,0xcf,0xf1,0x4c,0xbc,\r
-0xe7,0xe6,0x26,0xbe,0xe0,0xbe,0x7f,0x2e,0xce,0x76,0x3d,0x90,0x9f,0xd2,0xbe,0x0b,\r
-0xf8,0xbb,0x38,0x9f,0xc5,0x13,0xfd,0x4f,0xf3,0xaf,0x91,0xe2,0x19,0x5a,0x9d,0x38,\r
-0xf7,0x67,0xcb,0x71,0x0c,0xad,0x86,0xb1,0xe0,0x5f,0x15,0xe7,0xf2,0xb4,0x59,0xb9,\r
-0xec,0x7f,0x95,0x7d,0xeb,0xfb,0x03,0x69,0xbf,0xd9,0xdf,0xb2,0x7f,0x81,0x7d,0x6e,\r
-0x23,0xb8,0xb9,0x38,0xff,0x00,0x6e,0xe2,0x53,0x5f,0x9f,0x7f,0x19,0x26,0x11,0xe8,\r
-0x92,0xf3,0x8f,0x94,0xff,0x00,0x2a,0xfd,0x29,0xfd,0x90,0xec,0x06,0x9b,0xfb,0x31,\r
-0x7c,0x33,0x84,0x2e,0xdc,0xe8,0x76,0xd2,0x90,0x7d,0x5d,0x77,0x9f,0xd5,0xab,0xb3,\r
-0x26,0x56,0xa2,0x78,0x1c,0x1f,0x1b,0xfb,0x79,0xf9,0xa3,0xd7,0xa8,0xa2,0x8a,0xfa,\r
-0x23,0xf4,0x83,0xe7,0x5f,0xda,0xf7,0xc6,0x0d,0x69,0xa2,0xe9,0x5e,0x1c,0x81,0xf0,\r
-0x6f,0x64,0x37,0x37,0x00,0x7f,0x71,0x3e,0xe8,0x3f,0x56,0x39,0xff,0x00,0x80,0xd7,\r
-0x94,0x7e,0xcf,0x3e,0x12,0xff,0x00,0x84,0xa3,0xe2,0x15,0xa3,0x3a,0x6e,0xb7,0xb3,\r
-0xfd,0xfb,0xfa,0x71,0xd2,0xb2,0x7e,0x36,0xf8,0xb1,0xbc,0x65,0xf1,0x33,0x5a,0xbb,\r
-0x0f,0xbe,0xda,0xde,0x53,0x67,0x6f,0xce,0x40,0x48,0xf2,0x38,0xfa,0xb6,0xe3,0xf8,\r
-0xd7,0xd0,0x7f,0xb2,0xb7,0x84,0x46,0x93,0xe1,0x29,0xf5,0x79,0x53,0x13,0xde,0xbe,\r
-0x14,0x91,0xfc,0x03,0xff,0x00,0xaf,0x5f,0x01,0xff,0x00,0x23,0x1c,0xd3,0xfb,0xa9,\r
-0xfe,0x0b,0xfc,0xd9,0xf9,0xfd,0x2f,0xf8,0x52,0xcd,0x5c,0xf7,0x8c,0x7f,0x25,0xff,\r
-0x00,0x04,0xf7,0x30,0x30,0x00,0xe9,0x4b,0x48,0x29,0x6b,0xef,0xcf,0xd0,0x02,0xbc,\r
-0xff,0x00,0xe3,0x67,0xc0,0x9f,0x05,0xfe,0xd0,0x9e,0x0c,0x97,0xc3,0x1e,0x37,0xd1,\r
-0xe3,0xd5,0xb4,0xd2,0xe2,0x58,0x9b,0x71,0x49,0xad,0xe5,0x00,0x81,0x24,0x4e,0x39,\r
-0x46,0xc1,0x23,0x8e,0xa0,0x90,0x72,0x09,0x15,0xe8,0x14,0x50,0x07,0xe6,0x47,0x8d,\r
-0x3f,0xe0,0x89,0xda,0x1d,0xc5,0xc3,0x4b,0xe1,0x5f,0x89,0xb7,0xfa,0x7c,0x1c,0x9f,\r
-0x23,0x57,0xd3,0x92,0xe5,0x87,0xfd,0xb4,0x47,0x8f,0xff,0x00,0x41,0xaf,0xcb,0x8f,\r
-0x1b,0x68,0x56,0x5e,0x17,0xf1,0x86,0xb5,0xa3,0xe9,0xda,0xb4,0x7a,0xf5,0x8e,0x9f,\r
-0x79,0x2d,0xac,0x3a,0x9c,0x31,0x98,0xe3,0xba,0x54,0x72,0xa2,0x55,0x52,0x49,0x0a,\r
-0xd8,0xc8,0xe7,0xa1,0xaf,0xe9,0x9b,0xc6,0x1a,0x1d,0xc7,0x89,0x7c,0x2b,0xac,0x69,\r
-0x16,0x9a,0x94,0xba,0x35,0xcd,0xfd,0x9c,0xb6,0xb1,0xea,0x10,0x20,0x69,0x2d,0x99,\r
-0xd0,0xa8,0x91,0x01,0xe0,0xb2,0xe7,0x23,0x3c,0x64,0x0a,0xfc,0xdd,0xd4,0x3f,0xe0,\r
-0x89,0x1a,0x41,0x95,0x5a,0xc7,0xe2,0x9d,0xea,0xc6,0x18,0x12,0x97,0x3a,0x42,0x31,\r
-0x23,0xb8,0xca,0xca,0x3f,0x95,0x3b,0x92,0xd1,0xf2,0x97,0xc2,0x7f,0xf8,0x26,0x5f,\r
-0xc6,0x3f,0x8c,0xbf,0x0d,0x34,0x4f,0x1b,0xe8,0x03,0x41,0x87,0x4b,0xd5,0xe2,0x69,\r
-0xad,0xed,0xf5,0x0b,0xd7,0x86,0xe3,0x60,0x76,0x50,0xc5,0x7c,0xb2,0x30,0xdb,0x77,\r
-0x0e,0x79,0x04,0x1a,0xd3,0xbc,0xff,0x00,0x82,0x4e,0x7e,0xd1,0x16,0xa4,0x88,0xf4,\r
-0x0d,0x1e,0xe8,0x0e,0xf0,0xeb,0x30,0x8c,0xff,0x00,0xdf,0x44,0x57,0xed,0xff,0x00,\r
-0x85,0x7c,0x35,0x63,0xe0,0xdf,0x0c,0xe9,0x3a,0x06,0x99,0x17,0x91,0xa6,0xe9,0x76,\r
-0x91,0x59,0x5a,0xc5,0x9c,0xec,0x8a,0x34,0x08,0x83,0xf2,0x51,0x5a,0xb4,0x5c,0x2c,\r
-0x8f,0xc0,0x4d,0x47,0xfe,0x09,0xa7,0xfb,0x47,0x69,0xcc,0xc0,0xfc,0x38,0x9a,0xe5,\r
-0x57,0xf8,0xad,0xb5,0x1b,0x47,0x07,0xe9,0xfb,0xdc,0x9a,0xc6,0xd1,0xbf,0x60,0x7f,\r
-0x8e,0xf7,0xde,0x25,0xd3,0x34,0xbb,0xcf,0x86,0x7e,0x20,0xb0,0x86,0xea,0xee,0x2b,\r
-0x79,0x6f,0x5e,0xd7,0x74,0x50,0x2b,0x38,0x53,0x23,0x32,0x92,0x02,0xa8,0x39,0x27,\r
-0x3d,0x05,0x7f,0x42,0x78,0xa0,0x80,0x7b,0x51,0x70,0xe5,0x46,0x2f,0x82,0xfc,0x29,\r
-0x63,0xe0,0x5f,0x07,0x68,0x9e,0x1c,0xd3,0x23,0x58,0xb4,0xfd,0x26,0xce,0x1b,0x28,\r
-0x11,0x46,0x00,0x48,0xd0,0x28,0xfd,0x05,0x7c,0x4f,0xff,0x00,0x05,0x7d,0xf8,0xb1,\r
-0x73,0xe1,0x4f,0x80,0x9a,0x6f,0x82,0x34,0xd5,0xb8,0x6b,0xef,0x15,0xde,0xff,0x00,\r
-0xa4,0x98,0x63,0x2c,0xa2,0xce,0xdf,0x6b,0xb8,0x62,0x3a,0x66,0x46,0x84,0x0f,0x50,\r
-0x1b,0xd2,0xbe,0xf3,0xa6,0xb2,0x2b,0x75,0x00,0xfd,0x45,0x22,0x8f,0xe5,0xad,0xa3,\r
-0x64,0x24,0x32,0xb2,0xe3,0xfb,0xc3,0x14,0xd1,0xcf,0x4e,0x6b,0xfa,0x8b,0xbc,0xd1,\r
-0x74,0xfd,0x42,0x33,0x1d,0xd5,0x85,0xb5,0xca,0x1e,0xab,0x34,0x2a,0xe0,0xfe,0x04,\r
-0x57,0x2d,0xab,0xfc,0x11,0xf8,0x77,0xaf,0xa9,0x5d,0x4b,0xc0,0x7e,0x19,0xbf,0x53,\r
-0xd4,0x5c,0xe9,0x16,0xf2,0x67,0xf3,0x4a,0x77,0x23,0x94,0xfe,0x67,0x71,0x9a,0x2b,\r
-0xfa,0x3a,0xba,0xfd,0x90,0x3e,0x07,0x5e,0xe7,0xcd,0xf8,0x43,0xe0,0x9c,0x9e,0xa5,\r
-0x34,0x1b,0x64,0x3f,0x98,0x41,0x5c,0xbe,0xad,0xff,0x00,0x04,0xfb,0xfd,0x9e,0xb5,\r
-0x9c,0xf9,0xdf,0x0b,0x74,0x58,0x73,0xff,0x00,0x3e,0x7e,0x6d,0xbf,0xfe,0x8b,0x75,\r
-0xc5,0x3b,0x87,0x29,0xfc,0xf6,0xd1,0x5f,0xbd,0x17,0x5f,0xf0,0x4b,0x8f,0xd9,0xb2,\r
-0xe9,0xcb,0x0f,0x01,0xcd,0x01,0x3f,0xf3,0xcb,0x5b,0xbe,0x03,0xf2,0xf3,0xab,0x9f,\r
-0xd5,0x3f,0xe0,0x92,0x1f,0xb3,0xed,0xfe,0xef,0xb3,0xe9,0xba,0xf6,0x9b,0x9e,0x9f,\r
-0x66,0xd5,0xdd,0xb1,0xff,0x00,0x7f,0x03,0x51,0x70,0xe5,0x3f,0x0d,0xe8,0xaf,0xd9,\r
-0xab,0xef,0xf8,0x23,0x0f,0xc1,0xdb,0x87,0x63,0x6d,0xe2,0x8f,0x19,0x5a,0x03,0xd1,\r
-0x7e,0xd5,0x6c,0xe0,0x7e,0x70,0x56,0x05,0xff,0x00,0xfc,0x11,0x43,0xc0,0x32,0x03,\r
-0xf6,0x2f,0x88,0x9e,0x24,0xb7,0x3d,0xbe,0xd1,0x6f,0x6f,0x2e,0x3f,0x25,0x5a,0x2e,\r
-0x1c,0xac,0xfc,0x89,0x8a,0xee,0x68,0x71,0xe5,0xcd,0x24,0x78,0xfe,0xeb,0x11,0x5a,\r
-0xf6,0x3e,0x3b,0xf1,0x2e,0x98,0x41,0xb3,0xf1,0x0e,0xab,0x69,0x8e,0x9e,0x45,0xec,\r
-0xa9,0xfc,0x9a,0xbf,0x4c,0x35,0x5f,0xf8,0x22,0x28,0x24,0xff,0x00,0x66,0x7c,0x59,\r
-0xd8,0x3b,0x0b,0xbd,0x13,0x71,0xff,0x00,0xc7,0x67,0x15,0xcd,0xde,0xff,0x00,0xc1,\r
-0x12,0xbc,0x5d,0x19,0x3f,0x64,0xf8,0x9d,0xa2,0x4e,0x3b,0x79,0xda,0x6c,0xd1,0xff,\r
-0x00,0x27,0x6a,0x05,0x66,0x7c,0x2f,0xa6,0xfe,0xd0,0x9f,0x14,0x34,0x62,0x0d,0x8f,\r
-0xc4,0x5f,0x15,0x5a,0xe3,0xa7,0x95,0xac,0xdc,0x2f,0xfe,0xcf,0x5d,0x56,0x9f,0xfb,\r
-0x6a,0xfc,0x77,0xd2,0xc0,0x16,0xff,0x00,0x15,0xfc,0x53,0x81,0xda,0x5d,0x45,0xe4,\r
-0xff,0x00,0xd0,0xb3,0x5f,0x4c,0x6a,0xdf,0xf0,0x46,0x1f,0x8b,0x96,0xc7,0xfe,0x25,\r
-0xfe,0x2c,0xf0,0x85,0xf0,0xff,0x00,0xa6,0xb3,0x5c,0xc2,0x7f,0xf4,0x4b,0x57,0x29,\r
-0x7d,0xff,0x00,0x04,0x87,0xf8,0xfd,0x68,0x48,0x8a,0x1f,0x0d,0x5e,0x81,0xde,0x1d,\r
-0x57,0x19,0xff,0x00,0xbe,0xd1,0x68,0x1d,0x99,0xe6,0x56,0x1f,0xf0,0x50,0xcf,0xda,\r
-0x23,0x4f,0x60,0x53,0xe2,0x86,0xab,0x28,0x1d,0xae,0x22,0x82,0x5f,0xfd,0x0a,0x33,\r
-0x5d,0x4e,0x9b,0xff,0x00,0x05,0x4c,0xfd,0xa3,0x34,0xec,0x67,0xc6,0x36,0x97,0x80,\r
-0x76,0xb9,0xd2,0x2d,0x9b,0x3f,0x92,0x03,0x4b,0xa9,0xff,0x00,0xc1,0x2c,0x7f,0x68,\r
-0xdd,0x3c,0x9d,0x9e,0x0d,0xb4,0xbd,0x03,0xbd,0xb6,0xb1,0x68,0x73,0xf8,0x34,0x8a,\r
-0x6b,0x8d,0xbf,0xff,0x00,0x82,0x7f,0xfe,0xd0,0xba,0x73,0xb2,0xc9,0xf0,0xb3,0x5a,\r
-0x93,0x6f,0x7b,0x7f,0x2a,0x50,0x7e,0x9b,0x5c,0xe6,0x8d,0x03,0x53,0xd5,0xac,0x7f,\r
-0xe0,0xaf,0x7f,0x1f,0x6d,0x14,0x09,0x64,0xf0,0xcd,0xe7,0xfb,0x53,0x69,0x44,0x1f,\r
-0xfc,0x72,0x45,0xae,0x9f,0x4b,0xff,0x00,0x82,0xce,0xfc,0x5e,0xb4,0x50,0x2f,0x7c,\r
-0x2f,0xe1,0x1b,0xff,0x00,0x53,0xf6,0x7b,0x88,0xcf,0xe9,0x35,0x7c,0xc5,0x7b,0xfb,\r
-0x1b,0xfc,0x73,0xd3,0xf7,0x79,0xff,0x00,0x09,0xbc,0x5c,0x02,0x8c,0x92,0x9a,0x4c,\r
-0xce,0x07,0xe2,0xaa,0x6b,0x90,0xd4,0x7e,0x0a,0xfc,0x42,0xd1,0xd9,0x96,0xfb,0xc0,\r
-0x9e,0x25,0xb4,0x2b,0xf7,0xbc,0xed,0x22,0xe1,0x71,0xf9,0xa5,0x1a,0x05,0xd9,0xf7,\r
-0xa6,0x9f,0xff,0x00,0x05,0xb3,0xf1,0x7c,0x48,0x3e,0xdd,0xf0,0xcb,0x44,0xb8,0x7f,\r
-0x5b,0x7d,0x46,0x68,0x87,0xe4,0x55,0xab,0x7f,0x4f,0xff,0x00,0x82,0xdd,0xce,0x31,\r
-0xf6,0xef,0x84,0x91,0xb7,0xa9,0xb7,0xd7,0x88,0xfd,0x0c,0x06,0xbf,0x32,0xee,0x7c,\r
-0x31,0xac,0x59,0x92,0x27,0xd2,0xaf,0x61,0x23,0xaf,0x99,0x6c,0xeb,0x8f,0xcc,0x56,\r
-0x73,0xa1,0x8d,0xb6,0xb0,0x2a,0xde,0x87,0x8a,0x34,0x0b,0xb3,0xf5,0xc7,0x4a,0xff,\r
-0x00,0x82,0xd8,0xf8,0x36,0x54,0xce,0xa5,0xf0,0xd7,0x5d,0xb6,0x6e,0xe2,0xd2,0xfa,\r
-0x19,0x87,0xfe,0x3c,0x12,0xba,0x0b,0x2f,0xf8,0x2d,0x17,0xc2,0x59,0x71,0xf6,0x9f,\r
-0x06,0xf8,0xc6,0xdc,0xfa,0xa4,0x36,0xae,0x3f,0xf4,0x78,0xaf,0xc6,0xdc,0xe7,0xbd,\r
-0x18,0x34,0x58,0x2e,0xcf,0xdb,0xbd,0x37,0xfe,0x0a,0xfd,0xf0,0x16,0xf5,0x03,0x5c,\r
-0x7f,0xc2,0x4d,0x60,0x4f,0x69,0xb4,0xb0,0xf8,0xff,0x00,0xbe,0x24,0x6a,0xe9,0xec,\r
-0xbf,0xe0,0xaa,0x5f,0xb3,0x75,0xdc,0x41,0xe4,0xf1,0xb5,0xdd,0xa3,0x1f,0xe0,0x9b,\r
-0x44,0xbd,0x24,0x7e,0x2b,0x11,0x1f,0xad,0x7e,0x0e,0xe2,0x8a,0x2c,0x1c,0xc7,0xf4,\r
-0x01,0x63,0xff,0x00,0x05,0x23,0xfd,0x9c,0x6f,0xc0,0xd9,0xf1,0x32,0xce,0x2c,0xf6,\r
-0x9e,0xc6,0xee,0x3f,0xfd,0x0a,0x21,0x5d,0x6e,0x99,0xfb,0x6a,0xfc,0x06,0xd5,0xe3,\r
-0x0f,0x07,0xc5,0xcf,0x08,0xc6,0x0f,0x6b,0xad,0x56,0x2b,0x73,0xf9,0x48,0x54,0xd7,\r
-0xf3,0xa5,0x9a,0x29,0x58,0x39,0x8f,0xe9,0x32,0xcf,0xf6,0x9c,0xf8,0x3f,0xa8,0x15,\r
-0x16,0xdf,0x15,0x3c,0x17,0x39,0x6e,0x82,0x3f,0x10,0x5a,0x1c,0xff,0x00,0xe4,0x4a,\r
-0xeb,0xb4,0xdf,0x1f,0x78,0x63,0x59,0x50,0xd6,0x1e,0x22,0xd2,0x6f,0x94,0xf2,0x0d,\r
-0xb5,0xf4,0x52,0x03,0xf9,0x31,0xaf,0xe6,0x16,0x9c,0xb2,0x32,0x10,0x55,0x8a,0x91,\r
-0xdc,0x1a,0x2c,0x1c,0xc7,0xf5,0x25,0x14,0xf1,0xcc,0x9b,0xe3,0x75,0x75,0xf5,0x52,\r
-0x08,0xa7,0xe6,0xbf,0x97,0x8b,0x7f,0x10,0xea,0xb6,0x98,0xf2,0x35,0x3b,0xc8,0x71,\r
-0xd3,0xcb,0xb8,0x75,0xc7,0xe4,0x6b,0x7b,0x4f,0xf8,0xc3,0xe3,0xcd,0x2b,0x1f,0x62,\r
-0xf1,0xb7,0x88,0xad,0x31,0xd3,0xc9,0xd5,0x67,0x4c,0x7e,0x4f,0x45,0x87,0xcc,0x7f,\r
-0x4d,0x39,0xa5,0xaf,0xe7,0x07,0x4e,0xfd,0xae,0x3e,0x35,0xe9,0x48,0xa9,0x69,0xf1,\r
-0x5b,0xc5,0xf0,0xa2,0xf0,0x17,0xfb,0x66,0x72,0x3f,0x22,0xd5,0xd1,0xe9,0xff,0x00,\r
-0xb7,0xbf,0xed,0x07,0xa6,0xe3,0xca,0xf8,0xab,0xaf,0xc9,0x8e,0xd7,0x12,0x24,0xdf,\r
-0xfa,0x1a,0x9a,0x2c,0x1c,0xc8,0xfe,0x86,0xe8,0xaf,0xc0,0xed,0x33,0xfe,0x0a,0x75,\r
-0xfb,0x46,0xe9,0x7d,0x3c,0x7c,0x2e,0x87,0xa5,0xd6,0x99,0x69,0x27,0xf3,0x8f,0x35,\r
-0xd2,0xd9,0x7f,0xc1,0x5b,0x3f,0x68,0x4b,0x5c,0x79,0xba,0xae,0x85,0x79,0xff,0x00,\r
-0x5d,0xb4,0x88,0xc6,0x7f,0xef,0x82,0xb4,0x58,0x77,0x47,0xee,0x65,0x15,0xf8,0xa9,\r
-0xa6,0xff,0x00,0xc1,0x63,0xbe,0x37,0x5a,0x11,0xf6,0xad,0x2f,0xc2,0x77,0xc3,0xbe,\r
-0xeb,0x09,0x90,0xff,0x00,0xe3,0xb3,0x0a,0xea,0xf4,0xff,0x00,0xf8,0x2d,0x67,0xc4,\r
-0x28,0x71,0xf6,0xdf,0x87,0xfe,0x1b,0xb9,0xff,0x00,0xae,0x33,0xdc,0x45,0xfc,0xd9,\r
-0xa8,0xb0,0x5d,0x1f,0xb0,0x14,0x57,0xe4,0xf5,0x8f,0xfc,0x16,0xe7,0x5b,0x56,0x1f,\r
-0x6c,0xf8,0x51,0x60,0xeb,0xdc,0xc1,0xad,0x3a,0x9f,0xd6,0x13,0x5d,0x66,0x99,0xff,\r
-0x00,0x05,0xb7,0xd0,0x5d,0x07,0xf6,0x8f,0xc2,0xdd,0x4a,0x27,0xef,0xf6,0x5d,0x56,\r
-0x37,0x1f,0xf8,0xf4,0x62,0x8b,0x05,0xd1,0xfa,0x6b,0x45,0x7e,0x77,0xd8,0xff,0x00,\r
-0xc1,0x6a,0x7e,0x18,0xc8,0x83,0xed,0x7e,0x06,0xf1,0x6c,0x12,0x1e,0xa2,0x1f,0xb2,\r
-0xc8,0x07,0xe2,0x65,0x5f,0xe5,0x5d,0x16,0x9b,0xff,0x00,0x05,0x8e,0xf8,0x23,0x76,\r
-0x07,0xda,0x74,0xaf,0x17,0x58,0x9e,0xfb,0xec,0x21,0x7c,0x7f,0xdf,0x33,0x1a,0x56,\r
-0x0b,0xa3,0xee,0xea,0x2b,0xe3,0xdd,0x33,0xfe,0x0a,0xbd,0xfb,0x3a,0xdf,0x45,0xbe,\r
-0x7f,0x12,0x6a,0xba,0x71,0xfe,0xe5,0xce,0x8d,0x72,0xc7,0xff,0x00,0x21,0xab,0x0a,\r
-0xdd,0xb2,0xff,0x00,0x82,0x9c,0x7e,0xcd,0xd7,0xcc,0x14,0x7c,0x43,0x10,0x93,0xff,\r
-0x00,0x3d,0xb4,0xab,0xd4,0xfe,0x70,0xd0,0x3b,0x9f,0x52,0xd1,0x5e,0x13,0xa6,0xfe,\r
-0xdd,0x5f,0x00,0x35,0x58,0x95,0xe2,0xf8,0xb1,0xe1,0xa8,0x81,0xed,0x75,0x77,0xe4,\r
-0x1f,0xc9,0xc0,0x35,0xbd,0x6b,0xfb,0x59,0x7c,0x14,0xbd,0x0a,0x61,0xf8,0xb5,0xe0,\r
-0xa6,0xdd,0xd0,0x1d,0x7e,0xd4,0x13,0xf8,0x17,0xa0,0x0f,0x58,0xa2,0xb8,0xed,0x33,\r
-0xe3,0x27,0x80,0xb5,0xa4,0x56,0xd3,0xfc,0x6d,0xe1,0xdb,0xd5,0x6e,0x86,0xdf,0x55,\r
-0x81,0xf3,0xf9,0x3d,0x74,0xd6,0x9a,0xb5,0x8d,0xfc,0x61,0xed,0xaf,0x2d,0xee,0x10,\r
-0xf4,0x68,0xa5,0x56,0x07,0xf1,0x06,0x80,0x2d,0xd4,0x17,0x56,0x70,0x5e,0x46,0x63,\r
-0x9e,0x08,0xe7,0x8c,0xf5,0x59,0x14,0x30,0x3f,0x81,0xa9,0x43,0x82,0x32,0x0e,0x7e,\r
-0x94,0xb9,0xa4,0xd2,0x6a,0xcc,0x37,0x39,0x4b,0xff,0x00,0x85,0x9e,0x14,0xd4,0x41,\r
-0x12,0xe8,0x56,0x6a,0x4f,0x56,0x85,0x3c,0xa3,0xf9,0xae,0x2b,0x02,0xf3,0xf6,0x7d,\r
-0xf0,0x95,0xc6,0x7c,0xb8,0x6e,0xad,0x73,0xff,0x00,0x3c,0xae,0x09,0xff,0x00,0xd0,\r
-0xb3,0x5e,0x95,0x9a,0x2b,0x86,0xa6,0x5f,0x84,0xab,0xf1,0xd2,0x8b,0xf9,0x23,0x07,\r
-0x42,0x9c,0xb7,0x8a,0x3c,0x7e,0x6f,0xd9,0xa7,0x44,0x63,0xfb,0xad,0x57,0x50,0x4f,\r
-0xf7,0xbc,0xb6,0xff,0x00,0xd9,0x45,0x56,0x6f,0xd9,0x9b,0x4f,0xcf,0xcb,0xad,0x5c,\r
-0x8f,0xac,0x4a,0x7f,0xad,0x7b,0x55,0x26,0x2b,0x8d,0xe4,0xb9,0x7b,0xff,0x00,0x97,\r
-0x4b,0xf1,0xff,0x00,0x33,0x3f,0xaa,0x50,0xfe,0x53,0xc6,0x13,0xf6,0x66,0xd3,0x54,\r
-0xfc,0xda,0xcd,0xd1,0xff,0x00,0x76,0x35,0x15,0x7e,0xd3,0xf6,0x70,0xf0,0xdc,0x0c,\r
-0x0c,0xd7,0x7a,0x85,0xcf,0xb3,0x48,0x8a,0x3f,0x45,0xaf,0x58,0xc5,0x2d,0x38,0xe4,\r
-0xd8,0x08,0xed,0x49,0x02,0xc2,0xd1,0x5f,0x64,0xe2,0x74,0xcf,0x83,0x7e,0x11,0xd2,\r
-0x88,0x29,0xa3,0xc5,0x3b,0x7a,0xdc,0xb3,0x4b,0xfa,0x31,0x22,0xba,0xfb,0x4b,0x2b,\r
-0x7b,0x08,0x56,0x1b,0x68,0x23,0x82,0x25,0xe0,0x24,0x48,0x14,0x0f,0xc0,0x54,0xf4,\r
-0x57,0xa5,0x4b,0x0f,0x46,0x82,0xb5,0x28,0x25,0xe8,0x8e,0x88,0xc2,0x30,0xf8,0x55,\r
-0x82,0x8a,0x28,0xae,0x82,0xc2,0x8a,0x28,0xa0,0x02,0x8a,0x28,0xa0,0x0c,0xef,0x10,\r
-0xcb,0xe4,0xe8,0x97,0xaf,0xe9,0x13,0x7f,0x2a,0xf8,0x0b,0xe2,0x14,0xe6,0x7f,0x11,\r
-0x5d,0x31,0xe7,0xe6,0x35,0xf7,0x7f,0x8e,0x66,0xf2,0x3c,0x2d,0xa8,0x36,0x71,0xfb,\r
-0xb2,0x2b,0xe0,0x2f,0x18,0x4b,0xe6,0xeb,0x37,0x6d,0xfe,0xd1,0xaf,0x88,0xe2,0x29,\r
-0x7b,0xf4,0xa3,0xea,0x7c,0x67,0x12,0x4a,0xd4,0xa2,0x8f,0x00,0xf8,0xed,0x75,0xe5,\r
-0x68,0x93,0x8c,0xf4,0x42,0x7f,0x4a,0xfd,0x6a,0xf8,0x37,0xa6,0xff,0x00,0x63,0x7c,\r
-0x24,0xf0,0x55,0x81,0x50,0x86,0xdb,0x45,0xb3,0x88,0xa8,0x18,0xc1,0x10,0xa0,0xaf,\r
-0xc8,0x7f,0x8e,0xbf,0xe9,0x36,0x82,0xd8,0x13,0x99,0x59,0x63,0xe3,0xfd,0xa3,0x8f,\r
-0xeb,0x5f,0xb3,0x7a,0x25,0xa8,0xb1,0xd1,0xec,0x6d,0x87,0x48,0x60,0x8e,0x31,0xf8,\r
-0x28,0x1f,0xd2,0xbd,0xcc,0xa9,0x5a,0x82,0x38,0xf8,0x3e,0x3f,0xec,0xd5,0x27,0xde,\r
-0x45,0xea,0x28,0xa2,0xbd,0xb3,0xef,0xcf,0xcd,0xfd,0x0b,0x4e,0x93,0xc4,0x1e,0x25,\r
-0x8e,0xce,0x20,0x5a,0x4b,0x8b,0x92,0xbf,0x9b,0x1a,0xfd,0x0a,0xf0,0xbe,0x8b,0x17,\r
-0x87,0xb4,0x1b,0x1d,0x3a,0x15,0xc2,0x41,0x12,0xa7,0xe3,0x8e,0x6b,0xe1,0x7f,0x80,\r
-0x9a,0xce,0x9f,0xa2,0x7c,0x4f,0x67,0xd6,0x07,0x96,0x6c,0xae,0x65,0x88,0xa3,0x8e,\r
-0x56,0x40,0xe4,0x73,0x9f,0xa5,0x7d,0xb5,0x6f,0xf1,0x0b,0x40,0xb8,0x50,0x57,0x51,\r
-0x8b,0xf1,0x35,0xf2,0x19,0x34,0x29,0xd1,0x9d,0x59,0xce,0x49,0x4a,0xf6,0xf9,0x1f,\r
-0x11,0xc3,0x2a,0x9a,0xc3,0xca,0xa4,0x9f,0xbc,0xdd,0xbe,0xe3,0xa4,0xa2,0xb1,0xe3,\r
-0xf1,0x6e,0x91,0x2f,0xdd,0xbf,0x84,0xff,0x00,0xc0,0xaa,0xd2,0x6b,0x76,0x12,0x7d,\r
-0xdb,0xc8,0x4f,0xfc,0x0c,0x57,0xd5,0xaa,0x90,0x7b,0x34,0x7d,0xaa,0x94,0x5f,0x52,\r
-0xf5,0x23,0x67,0x1c,0x75,0xf7,0xa8,0x12,0xf6,0xde,0x5f,0xb9,0x3c,0x6d,0xf4,0x61,\r
-0x52,0x89,0x50,0xf4,0x70,0x7f,0x1a,0xbb,0xa6,0x3b,0x8e,0x19,0xc0,0xc8,0xe6,0x8a,\r
-0x40,0xd9,0x1d,0x69,0x73,0x4c,0x62,0xd1,0x49,0x45,0x00,0x2d,0x14,0x51,0x40,0x05,\r
-0x14,0x51,0x40,0x05,0x14,0x51,0x40,0x05,0x14,0x51,0x40,0x09,0x8a,0x5a,0x28,0xa0,\r
-0x02,0x8a,0x28,0xa0,0x02,0x92,0x96,0x8a,0x00,0x4c,0x0f,0x4a,0x31,0x4b,0x45,0x00,\r
-0x25,0x2d,0x14,0x50,0x01,0x45,0x14,0x50,0x03,0x1e,0x24,0x91,0x4a,0xba,0x2b,0x29,\r
-0xea,0x08,0xc8,0xac,0x4d,0x5b,0xc0,0x5e,0x19,0xd7,0xa2,0x31,0xea,0x7e,0x1d,0xd2,\r
-0x75,0x18,0xcf,0x54,0xba,0xb1,0x8a,0x50,0x7f,0x06,0x53,0x5b,0xd4,0x50,0x07,0x98,\r
-0xdf,0x7e,0xcb,0xdf,0x07,0x35,0x26,0x66,0xba,0xf8,0x51,0xe0,0xa9,0xd9,0xba,0xb3,\r
-0xf8,0x7e,0xd0,0x93,0xf8,0xf9,0x75,0x85,0xa9,0xfe,0xc5,0x1f,0x01,0xb5,0x58,0xca,\r
-0x4d,0xf0,0x8f,0xc2,0x31,0x8f,0x5b,0x6d,0x2a,0x28,0x0f,0xe7,0x18,0x53,0x5e,0xd7,\r
-0x45,0x00,0x7c,0xcb,0xa9,0x7f,0xc1,0x35,0xff,0x00,0x67,0x0d,0x53,0x3e,0x67,0xc3,\r
-0x4b,0x58,0x49,0xef,0x6d,0xa8,0x5d,0xc3,0xff,0x00,0xa0,0xca,0x2b,0x9e,0xbe,0xff,\r
-0x00,0x82,0x54,0x7e,0xce,0x37,0x6b,0x88,0xbc,0x21,0x7f,0x64,0x7f,0xbd,0x06,0xb7,\r
-0x78,0x4f,0xfe,0x3f,0x23,0x57,0xd7,0x74,0x50,0x16,0x3e,0x1b,0xd6,0x3f,0xe0,0x8f,\r
-0x5f,0x02,0xb5,0x01,0xfe,0x89,0x71,0xe2,0x9d,0x2c,0xff,0x00,0xd3,0xbe,0xa4,0x8f,\r
-0xff,0x00,0xa3,0x23,0x6a,0xe5,0xae,0xbf,0xe0,0x8a,0xff,0x00,0x0b,0x1c,0x9f,0xb3,\r
-0xf8,0xe3,0xc6,0x10,0xe7,0xa7,0x98,0xd6,0xaf,0x8f,0xca,0x11,0x5f,0xa1,0xb4,0x50,\r
-0x2b,0x23,0xf3,0x37,0x55,0xff,0x00,0x82,0x25,0x78,0x72,0x40,0xdf,0xd9,0x9f,0x14,\r
-0x35,0x4b,0x73,0xdb,0xed,0x7a,0x5c,0x72,0xe3,0xfe,0xf9,0x75,0xae,0x4e,0xef,0xfe,\r
-0x08,0x8b,0xab,0xab,0x1f,0xb2,0xfc,0x59,0xb1,0x91,0x7b,0x09,0xb4,0x37,0x53,0xf8,\r
-0xe2,0x73,0x5f,0xab,0xd4,0x50,0x16,0x47,0xe4,0x0e,0xa5,0xff,0x00,0x04,0x51,0xf8,\r
-0x81,0x10,0x3f,0x60,0xf8,0x85,0xe1,0xbb,0xa3,0xdb,0xcf,0xb7,0x9e,0x1c,0xfe,0x41,\r
-0xab,0x8f,0xd4,0xff,0x00,0xe0,0x8e,0x7f,0x1c,0x2d,0x1b,0x16,0xba,0x97,0x84,0xaf,\r
-0xc7,0xaa,0xea,0x12,0xa7,0xe8,0xd0,0xd7,0xed,0x6d,0x18,0xa7,0x70,0xb2,0x3f,0x0c,\r
-0x35,0x0f,0xf8,0x24,0xc7,0xed,0x0d,0x65,0x9f,0x2b,0x45,0xd1,0x6f,0xb1,0xff,0x00,\r
-0x3e,0xfa,0xc4,0x43,0x3f,0xf7,0xde,0xda,0xe5,0x35,0x6f,0xf8,0x26,0x9f,0xed,0x1d,\r
-0xa4,0xb1,0x07,0xe1,0xcc,0xd7,0x60,0x75,0x6b,0x5d,0x42,0xd2,0x41,0xff,0x00,0xa3,\r
-0x6b,0xf7,0xeb,0x14,0x62,0x8b,0x85,0x91,0xfc,0xf0,0x5e,0xfe,0xc2,0x3f,0xb4,0x05,\r
-0x81,0x22,0x5f,0x85,0x1e,0x22,0x6c,0x7f,0xcf,0x1b,0x71,0x2f,0xfe,0x80,0x4d,0x72,\r
-0xfa,0xa7,0xec,0xb7,0xf1,0x8b,0x46,0x62,0xb7,0x9f,0x0b,0x7c,0x5f,0x16,0x3a,0x91,\r
-0xa2,0x5c,0x38,0x1f,0x8a,0xa1,0x15,0xfd,0x23,0xd1,0x8a,0x2e,0x2b,0x1f,0xcc,0x7d,\r
-0xff,0x00,0xc2,0xef,0x19,0xe9,0x4c,0x56,0xf7,0xc2,0x5a,0xed,0x99,0x1d,0x44,0xfa,\r
-0x6c,0xc9,0x8f,0xcd,0x6b,0x02,0xe7,0x4e,0xbb,0xb3,0x62,0xb3,0xda,0xcd,0x03,0x0e,\r
-0xa2,0x48,0xca,0x91,0xf9,0x8a,0xfe,0xa3,0xf0,0x2a,0xbd,0xc6,0x99,0x67,0x76,0x8c,\r
-0x93,0xda,0xc1,0x32,0xb7,0x05,0x64,0x8c,0x30,0x3f,0x98,0xa2,0xe1,0xca,0x7f,0x2e,\r
-0x18,0xa2,0xbf,0xa6,0x6d,0x43,0xe0,0xc7,0xc3,0xed,0x58,0xb1,0xbe,0xf0,0x2f,0x86,\r
-0xaf,0x0b,0x72,0xc6,0x7d,0x22,0xdd,0xc9,0xfa,0xe5,0x2b,0x9e,0xbd,0xfd,0x95,0xbe,\r
-0x0c,0xea,0x0a,0xcb,0x3f,0xc2,0x8f,0x06,0x3e,0xee,0xa4,0x68,0x36,0xca,0x7f,0x30,\r
-0x80,0xd1,0x71,0x72,0x9f,0xcd,0xd5,0x18,0x3d,0x6b,0xfa,0x1a,0xd5,0x7f,0x60,0x8f,\r
-0xd9,0xf7,0x58,0x56,0x13,0xfc,0x29,0xd0,0x23,0xdd,0xd4,0xda,0xc4,0xd0,0x1f,0xcd,\r
-0x18,0x57,0x23,0x77,0xff,0x00,0x04,0xbb,0xfd,0x9b,0x2e,0xd9,0x9b,0xfe,0x15,0xfc,\r
-0x90,0x33,0x73,0x98,0x75,0xbb,0xf1,0xfa,0x79,0xf8,0x1f,0x95,0x3b,0x87,0x29,0xf8,\r
-0x27,0x45,0x7e,0xe5,0xeb,0x3f,0xf0,0x49,0x4f,0xd9,0xef,0x53,0x8c,0xad,0xae,0x91,\r
-0xad,0xe9,0x07,0xb3,0x5a,0x6b,0x12,0xb9,0x1f,0xf7,0xf7,0x7d,0x71,0xd7,0xbf,0xf0,\r
-0x46,0x0f,0x83,0x73,0xb9,0x6b,0x7f,0x14,0xf8,0xd6,0xdb,0x3f,0xc3,0xf6,0xcb,0x47,\r
-0x03,0xf3,0xb6,0xcf,0xeb,0x45,0xc3,0x94,0xfc,0x65,0xa2,0xbf,0x5f,0xb5,0x5f,0xf8,\r
-0x22,0x97,0xc3,0xc9,0x50,0x0d,0x37,0xe2,0x0f,0x89,0xed,0x5f,0xd6,0xea,0x1b,0x79,\r
-0xc7,0xe4,0xa8,0x95,0xc8,0xea,0x7f,0xf0,0x44,0x58,0x49,0x3f,0xd9,0xdf,0x16,0x9d,\r
-0x7d,0x05,0xd6,0x85,0x9f,0xd5,0x67,0x14,0x5c,0x56,0x67,0xe5,0x7d,0x48,0x97,0x33,\r
-0x45,0xf7,0x25,0x74,0xff,0x00,0x75,0x88,0xaf,0xd2,0x8b,0xef,0xf8,0x22,0x57,0x8a,\r
-0x63,0xcf,0xd8,0xfe,0x28,0xe9,0x13,0xfa,0x79,0xfa,0x54,0xb1,0x67,0xf2,0x91,0xab,\r
-0x95,0xd4,0xff,0x00,0xe0,0x8c,0x1f,0x16,0xad,0xc9,0xfb,0x0f,0x8b,0x3c,0x27,0x7a,\r
-0x07,0x4f,0x32,0x6b,0x88,0x89,0xff,0x00,0xc8,0x46,0x80,0xb3,0x3e,0x19,0xd3,0xfc,\r
-0x77,0xe2,0x5d,0x25,0x95,0xac,0x7c,0x43,0xaa,0xd9,0x95,0xe4,0x1b,0x7b,0xd9,0x13,\r
-0x1f,0x93,0x57,0x63,0xa7,0x7e,0xd3,0xbf,0x17,0xf4,0x95,0x55,0xb3,0xf8,0xa1,0xe2,\r
-0xfb,0x74,0x5e,0x8a,0x9a,0xdd,0xc8,0x03,0xf0,0xdf,0x5f,0x47,0x5e,0x7f,0xc1,0x20,\r
-0x7e,0x3e,0x5b,0x13,0xe5,0x8f,0x0b,0xdd,0x81,0xd3,0xc9,0xd5,0x58,0x67,0xfe,0xfa,\r
-0x8c,0x57,0x35,0xa9,0xff,0x00,0xc1,0x2b,0xff,0x00,0x68,0xcd,0x3c,0x31,0x8f,0xc2,\r
-0x16,0x77,0xd8,0xff,0x00,0x9f,0x5d,0x5e,0xd8,0xe7,0xe9,0xb9,0xd6,0x80,0xd4,0xf3,\r
-0x8b,0x4f,0xdb,0x7b,0xe3,0xdd,0x96,0x3c,0xaf,0x8b,0x3e,0x29,0x38,0xe9,0xe6,0xdf,\r
-0xb4,0x9f,0xfa,0x16,0x6b,0xa5,0xd3,0x7f,0xe0,0xa3,0xbf,0xb4,0x5e,0x99,0x81,0x1f,\r
-0xc4,0xbb,0xd9,0x80,0xed,0x73,0x69,0x6d,0x2e,0x7f,0xef,0xa8,0xcd,0x56,0xbf,0xff,\r
-0x00,0x82,0x78,0x7e,0xd1,0x3a,0x71,0x3e,0x67,0xc2,0xed,0x52,0x4c,0x7f,0xcf,0x09,\r
-0xed,0xe5,0xff,0x00,0xd0,0x64,0x35,0xcd,0x6a,0x5f,0xb1,0x97,0xc7,0x4d,0x28,0x91,\r
-0x71,0xf0,0x9f,0xc5,0x9c,0x75,0x30,0xe9,0x92,0x4a,0x3f,0x34,0x06,0x80,0xd4,0xf5,\r
-0x8b,0x2f,0xf8,0x2a,0xd7,0xed,0x17,0x68,0xa0,0x3f,0x8a,0x34,0xdb,0xac,0x77,0x9f,\r
-0x46,0xb7,0xe7,0xfe,0xf9,0x51,0x5b,0xf6,0x1f,0xf0,0x57,0xff,0x00,0x8f,0x56,0xa4,\r
-0x79,0xeb,0xe1,0x8b,0xc0,0x3a,0xf9,0xba,0x5b,0x29,0x3f,0xf7,0xcc,0x82,0xbe,0x5b,\r
-0xd4,0xfe,0x04,0xfc,0x49,0xd1,0x5c,0xa5,0xf7,0xc3,0xff,0x00,0x14,0x5a,0x30,0xea,\r
-0x25,0xd1,0xee,0x17,0xff,0x00,0x64,0xae,0x7e,0xf3,0xc1,0x5e,0x21,0xd3,0xce,0x2e,\r
-0xb4,0x1d,0x4e,0xd8,0xff,0x00,0xd3,0x6b,0x39,0x13,0xf9,0xad,0x03,0xd4,0xfb,0xcb,\r
-0x4d,0xff,0x00,0x82,0xd2,0xfc,0x51,0xb7,0x50,0x2f,0x7c,0x15,0xe1,0x5b,0xcf,0x52,\r
-0x82,0xe2,0x23,0xff,0x00,0xa3,0x0d,0x74,0x56,0x5f,0xf0,0x5b,0x5f,0x14,0x2e,0x05,\r
-0xdf,0xc3,0x0d,0x22,0x5f,0x53,0x06,0xa7,0x2a,0x7f,0x34,0x35,0xf9,0xab,0x34,0x12,\r
-0xdb,0xb6,0xd9,0x63,0x78,0x9b,0xd1,0xd4,0x83,0x4c,0xa3,0x40,0xbb,0x3f,0x54,0x74,\r
-0xbf,0xf8,0x2d,0xcd,0xbe,0x40,0xd4,0x7e,0x14,0x4a,0x07,0x73,0x6b,0xad,0x03,0xfa,\r
-0x34,0x35,0xd4,0x58,0xff,0x00,0xc1,0x6b,0xfc,0x07,0x20,0x1f,0x6c,0xf8,0x77,0xe2,\r
-0x38,0x0f,0xfd,0x30,0xb9,0xb7,0x93,0xf9,0x95,0xaf,0xc8,0x6c,0x51,0x45,0x85,0xcc,\r
-0xcf,0xd9,0x9d,0x3b,0xfe,0x0b,0x39,0xf0,0x82,0xe4,0x81,0x77,0xe1,0x8f,0x17,0xd9,\r
-0x67,0xf8,0xbe,0xcd,0x6f,0x20,0x1f,0x94,0xd5,0xd7,0x69,0xdf,0xf0,0x56,0xff,0x00,\r
-0xd9,0xf6,0xf2,0x20,0xd7,0x1a,0x96,0xbd,0xa7,0xb1,0xfe,0x19,0xf4,0x99,0x18,0x8f,\r
-0xfb,0xe0,0xb0,0xaf,0xc3,0x8a,0xb5,0xa4,0xd8,0xbe,0xa7,0xaa,0xd9,0xd9,0xc4,0xbb,\r
-0xa5,0xb8,0x99,0x21,0x50,0x3b,0x96,0x60,0x07,0xf3,0xa2,0xc3,0xb9,0xfd,0x3f,0xe8,\r
-0x3a,0xd5,0xb7,0x88,0xf4,0x4d,0x3f,0x56,0xb3,0x2e,0x6c,0xef,0xed,0xe3,0xba,0x84,\r
-0xc8,0xa5,0x58,0xa3,0xa8,0x65,0xca,0x9e,0x41,0xc1,0x1c,0x1a,0xbf,0x55,0x34,0xab,\r
-0x18,0xf4,0xcd,0x32,0xd2,0xce,0x14,0x11,0xc5,0x6f,0x0a,0x44,0x88,0x3a,0x28,0x55,\r
-0x00,0x0f,0xd2,0xad,0xd4,0x96,0x14,0x51,0x45,0x00,0x72,0x3f,0x14,0xe7,0xfb,0x3f,\r
-0x83,0x6f,0x4f,0xa8,0xc5,0x7c,0x0d,0xe2,0x29,0x37,0xdf,0xdd,0x37,0xab,0x9a,0xfb,\r
-0x9b,0xe3,0x65,0xcf,0x91,0xe0,0xc9,0x87,0xf7,0x8e,0x3f,0x4a,0xf8,0x43,0x5a,0x7d,\r
-0xd3,0x4e,0xde,0xac,0x6b,0xe0,0x33,0xe7,0x7c,0x54,0x23,0xd9,0x1f,0x01,0xc4,0xf3,\r
-0xb2,0x48,0xf1,0x4f,0x1a,0x42,0x35,0x2f,0x88,0x9e,0x12,0xb1,0x64,0xf3,0x16,0xe7,\r
-0x5a,0xb2,0x84,0xa6,0x33,0xb8,0x34,0xe8,0x08,0xfc,0x8d,0x7e,0xcc,0xa0,0x0a,0xa1,\r
-0x40,0xc0,0x1c,0x57,0xe3,0xef,0x87,0xac,0x9f,0x5c,0xfd,0xa4,0xfe,0x19,0x59,0x2f,\r
-0x3b,0xbc,0x47,0x67,0x26,0x3d,0x92,0x40,0xe7,0xff,0x00,0x40,0xaf,0xd8,0x31,0x5f,\r
-0x57,0x97,0x46,0xd4,0x11,0xd7,0xc2,0x71,0xe5,0xcb,0xef,0xdd,0xb1,0x68,0xa2,0x8a,\r
-0xf5,0x0f,0xb4,0x3f,0x3c,0xbf,0x6b,0x4f,0x07,0xde,0xfc,0x28,0xf8,0xc1,0x3e,0xbf,\r
-0x6f,0x19,0x5d,0x0b,0xc4,0x4d,0xf6,0x95,0x78,0xc6,0x04,0x73,0x80,0x04,0xaa,0x7d,\r
-0xc9,0xf9,0xff,0x00,0xe0,0x47,0xd2,0xb9,0x0d,0x2b,0xc6,0x12,0x5d,0xc4,0xaf,0x15,\r
-0xeb,0xe0,0x8e,0xcf,0x5f,0xa1,0xbf,0x13,0xfe,0x1a,0x68,0xdf,0x15,0xfc,0x21,0x77,\r
-0xe1,0xfd,0x6e,0x0f,0x36,0xda,0x61,0xba,0x39,0x57,0x1b,0xe0,0x90,0x0f,0x96,0x44,\r
-0x3d,0x88,0xcf,0xe3,0xc8,0x3c,0x1a,0xfc,0xed,0xf8,0x9f,0xfb,0x2e,0xf8,0xe3,0xe1,\r
-0x16,0xa9,0x33,0xdb,0xac,0x97,0xda,0x46,0xec,0xc3,0x7f,0x6e,0xa4,0xc6,0xc3,0x3c,\r
-0x06,0x1f,0xc2,0x7d,0x8f,0xe1,0x9a,0xf9,0x3c,0xcb,0x2d,0x84,0xe4,0xea,0x6c,0x7e,\r
-0x4f,0x9d,0xe5,0x78,0x9c,0x16,0x22,0x58,0xac,0x22,0x6e,0x13,0x77,0x69,0x74,0x66,\r
-0xfc,0x3e,0x28,0xd4,0x23,0xe6,0x3b,0xf9,0x47,0xfc,0x0e,0xaf,0x43,0xe3,0x9d,0x6e,\r
-0x1f,0xbb,0xa9,0x4b,0xf8,0xb5,0x78,0xb9,0xb9,0xf1,0x3e,0x9f,0xf2,0x4d,0x68,0x5c,\r
-0x8e,0xf8,0xe4,0xd2,0x8f,0x15,0xeb,0x11,0x7d,0xfb,0x09,0x3f,0x23,0x5f,0x35,0xf5,\r
-0x19,0xaf,0x86,0x4b,0xef,0x3c,0x48,0xe2,0x71,0xd1,0x5f,0x0c,0xbe,0xf3,0xdd,0x21,\r
-0xf8,0x9f,0xe2,0x38,0x0f,0xcb,0xa8,0xb9,0xad,0x1b,0x7f,0x8c,0xfe,0x26,0xb7,0xe9,\r
-0x7a,0xcd,0xf5,0xaf,0x9f,0x57,0xc7,0x97,0x91,0xfd,0xfb,0x49,0x57,0xf0,0x35,0x22,\r
-0x7c,0x46,0x2b,0xf7,0xe2,0x90,0x1f,0x71,0x4d,0x61,0x71,0x31,0xf8,0x64,0xfe,0xf3,\r
-0x55,0x99,0x63,0x61,0xba,0x91,0xf4,0x94,0x1f,0xb4,0x1f,0x8a,0x21,0xc7,0xef,0xf3,\r
-0xf8,0xd6,0xa5,0xbf,0xed,0x33,0xe2,0x38,0xb1,0xbc,0x96,0xc7,0xbd,0x7c,0xc2,0x9f,\r
-0x12,0x60,0xfe,0x2d,0xc3,0xf0,0xab,0x31,0xfc,0x44,0xb4,0x60,0x32,0xff,0x00,0xa5,\r
-0x5a,0x58,0xf8,0xed,0x37,0xf7,0x9b,0x47,0x3c,0xc5,0x43,0x79,0x4b,0xee,0x3e,0xa8,\r
-0xb5,0xfd,0xaa,0x75,0x98,0x88,0xf3,0x22,0xdc,0x3f,0x3a,0xd5,0xb7,0xfd,0xac,0xae,\r
-0x86,0x3c,0xcb,0x6c,0xfa,0xfc,0xa2,0xbe,0x4c,0x8f,0xc7,0x96,0x4d,0xff,0x00,0x2d,\r
-0x16,0xac,0xa7,0x8c,0xac,0x9f,0x1f,0xbd,0x43,0xf8,0xd5,0xac,0x46,0x63,0x0f,0xb4,\r
-0xcd,0xe3,0xc4,0x98,0x88,0xef,0x3f,0xc0,0xfa,0xfe,0xd7,0xf6,0xb2,0x84,0xe3,0xce,\r
-0xb6,0xff,0x00,0xc7,0x6b,0x52,0xdb,0xf6,0xab,0xd2,0xe4,0x23,0xcc,0x80,0x0f,0xc0,\r
-0xd7,0xc6,0x69,0xe2,0x8b,0x37,0xe9,0x2a,0xfe,0x06,0xa7,0x4d,0x7a,0xd5,0xfa,0x38,\r
-0x3f,0x8d,0x52,0xcc,0x73,0x18,0x6e,0xff,0x00,0x03,0xaa,0x3c,0x51,0x5b,0xf9,0x91,\r
-0xf6,0xdd,0xbf,0xed,0x3b,0xe1,0xe9,0x00,0xde,0x30,0x4f,0xfb,0x55,0xa9,0x6d,0xfb,\r
-0x43,0xf8,0x66,0x7c,0x66,0x5d,0xbf,0xf0,0x21,0x5f,0x0a,0xae,0xad,0x6e,0xdd,0x1c,\r
-0x54,0x83,0x50,0x84,0xf4,0x93,0xf5,0xad,0x16,0x73,0x8f,0x8e,0xf6,0xfb,0x8e,0xb8,\r
-0x71,0x45,0x4e,0xb6,0x3e,0xf8,0xb7,0xf8,0xdf,0xe1,0x99,0xc8,0xc5,0xd0,0x1f,0x88,\r
-0xad,0x28,0x3e,0x2a,0xf8,0x72,0x71,0x91,0x7e,0xa3,0xf2,0xaf,0xcf,0xa5,0xbf,0x51,\r
-0xf7,0x66,0x23,0xe8,0x6a,0x64,0xd4,0xe4,0x5f,0xbb,0x70,0xc3,0xfe,0x05,0x5a,0xac,\r
-0xfb,0x14,0xbe,0x28,0x2f,0xc4,0xeb,0x8f,0x13,0xcb,0xac,0x51,0xfa,0x19,0x17,0x8f,\r
-0xb4,0x29,0xbe,0xee,0xa1,0x1f,0xe7,0x57,0x23,0xf1,0x4e,0x95,0x2f,0xdd,0xbe,0x84,\r
-0xff,0x00,0xc0,0xab,0xf3,0xbe,0x3d,0x6e,0xf1,0x3e,0xe5,0xe4,0xa3,0xe8,0xf5,0x66,\r
-0x3f,0x15,0xea,0xb1,0x11,0xb7,0x50,0x9b,0xfe,0xfb,0x35,0xb2,0xe2,0x1a,0x8b,0xe2,\r
-0xa7,0xf8,0x9d,0x51,0xe2,0x58,0x3d,0xe0,0x7e,0x88,0xa6,0xb1,0x63,0x27,0xdd,0xbb,\r
-0x88,0xff,0x00,0xc0,0xc5,0x4a,0xb7,0x90,0x3f,0xdd,0x99,0x0f,0xd1,0x85,0x7e,0x7b,\r
-0x43,0xe3,0xfd,0x7a,0x2f,0xbb,0xa8,0xcb,0xf9,0xd5,0xf8,0x3e,0x2b,0x78,0x8e,0x0c,\r
-0x62,0xf9,0xcf,0xd4,0xd6,0xeb,0x88,0xa3,0xf6,0xa9,0xbf,0xbc,0xe8,0x8f,0x11,0xd0,\r
-0x7b,0xc5,0x9f,0x7f,0x09,0x14,0xff,0x00,0x10,0xfc,0xe9,0x73,0xef,0x5f,0x08,0xc1,\r
-0xf1,0xbf,0xc4,0xd0,0x7f,0xcb,0xd1,0x6f,0xc4,0xd6,0x9d,0xb7,0xed,0x11,0xe2,0x58,\r
-0x3a,0xcb,0x9f,0xf8,0x11,0xad,0xe3,0xc4,0x34,0x1e,0xf0,0x67,0x44,0x78,0x83,0x0a,\r
-0xf7,0xb9,0xf6,0xe0,0x34,0x66,0xbe,0x37,0xb6,0xfd,0xa7,0x35,0xf8,0x71,0xbf,0x2d,\r
-0xf8,0xd6,0xad,0xbf,0xed,0x57,0xaa,0x2f,0xfa,0xc8,0x49,0x1f,0x85,0x6d,0x1c,0xfb,\r
-0x08,0xf7,0xbf,0xdc,0x6f,0x1c,0xf3,0x06,0xfe,0xd1,0xf5,0x9e,0x68,0x07,0x35,0xf3,\r
-0x0d,0xbf,0xed,0x65,0x28,0xff,0x00,0x59,0x6f,0x9f,0xf8,0x0e,0x6b,0x52,0xdb,0xf6,\r
-0xb1,0xb5,0x38,0xf3,0x6d,0xc0,0xfc,0x2b,0xa2,0x39,0xd6,0x09,0xfd,0xaf,0xc0,0xe9,\r
-0x8e,0x6d,0x83,0x97,0xdb,0x3e,0x8b,0xa2,0xbc,0x26,0x0f,0xda,0xa3,0x47,0x7c,0x07,\r
-0x88,0x03,0xdf,0xad,0x6a,0x5b,0x7e,0xd2,0xde,0x1e,0x98,0x0d,0xe4,0x2f,0xfc,0x0a,\r
-0xb7,0x8e,0x6b,0x83,0x97,0xfc,0xbc,0x46,0xf1,0xc7,0xe1,0xa5,0xb4,0xd1,0xec,0x54,\r
-0x57,0x98,0xdb,0xfe,0xd0,0x3e,0x19,0x9f,0xfe,0x5b,0x05,0xff,0x00,0x81,0x56,0x9c,\r
-0x1f,0x19,0xfc,0x35,0x36,0x3f,0xd3,0x00,0xfc,0x45,0x74,0x47,0x1d,0x86,0x96,0xd5,\r
-0x17,0xde,0x6e,0xb1,0x34,0x65,0xb4,0xd1,0xdd,0xd1,0x5c,0xa4,0x1f,0x13,0xfc,0x3d,\r
-0x38,0x18,0xbe,0x41,0xf5,0x35,0x76,0x2f,0x1c,0xe8,0x93,0x7d,0xdb,0xf8,0x8f,0xe3,\r
-0x5b,0x2c,0x45,0x29,0x6d,0x25,0xf7,0x9a,0x2a,0xb4,0xde,0xd2,0x46,0xf5,0x15,0x97,\r
-0x1f,0x89,0x74,0xc9,0x47,0xcb,0x7d,0x09,0xff,0x00,0x81,0x55,0x94,0xd5,0xac,0xe4,\r
-0xfb,0xb7,0x51,0x1f,0xf8,0x10,0xad,0x54,0xe2,0xf6,0x65,0xa9,0x27,0xb3,0x2d,0xd1,\r
-0x51,0x0b,0xa8,0x5b,0xa4,0xa8,0x7f,0xe0,0x42,0x9e,0x1d,0x58,0x64,0x10,0x7e,0x86,\r
-0xaa,0xe8,0xab,0x8e,0xa2,0x93,0x34,0x66,0x98,0x0b,0x45,0x26,0x45,0x19,0xa0,0x05,\r
-0xa2,0x93,0x34,0xb4,0x00,0x51,0x45,0x14,0x00,0x51,0x45,0x14,0x00,0x51,0x45,0x14,\r
-0x00,0x51,0x45,0x14,0x00,0x51,0x45,0x14,0x00,0x51,0x45,0x14,0x00,0x51,0x45,0x14,\r
-0x00,0x51,0x45,0x14,0x00,0x94,0x6d,0x06,0x96,0x8a,0x00,0x4c,0x51,0x8a,0x5a,0x28,\r
-0x01,0x31,0x4d,0x31,0xa1,0x04,0x15,0x04,0x1e,0xb9,0x14,0xfa,0x28,0x03,0x1e,0xfb,\r
-0xc1,0xba,0x06,0xa9,0x9f,0xb6,0x68,0x7a,0x6d,0xde,0x7a,0xf9,0xf6,0x91,0xbe,0x7f,\r
-0x31,0x5c,0xe5,0xf7,0xc0,0x6f,0x86,0x7a,0x9e,0xef,0xb5,0xfc,0x3c,0xf0,0xad,0xc9,\r
-0x6e,0xa6,0x5d,0x16,0xd9,0x89,0xfc,0x4a,0x57,0x77,0x45,0x00,0x78,0xd6,0xa9,0xfb,\r
-0x1a,0x7c,0x0b,0xd6,0x15,0xc5,0xcf,0xc2,0x6f,0x09,0x12,0xfd,0x5a,0x2d,0x2a,0x28,\r
-0x9b,0xfe,0xfa,0x40,0x08,0xae,0x2e,0xfb,0xfe,0x09,0xb1,0xfb,0x37,0x5f,0xbb,0xb4,\r
-0x9f,0x0c,0xad,0x23,0x2d,0xd7,0xc8,0xd4,0x6f,0x22,0x03,0xe8,0x16,0x60,0x05,0x7d,\r
-0x33,0x45,0x00,0x7c,0x97,0x7f,0xff,0x00,0x04,0xb0,0xfd,0x9b,0xaf,0x22,0x65,0x8f,\r
-0xc1,0x17,0x56,0x6c,0x7f,0x8e,0x0d,0x6e,0xf4,0x91,0xff,0x00,0x7d,0x4a,0xc3,0xf4,\r
-0xac,0x5d,0x0f,0xfe,0x09,0x3f,0xf0,0x43,0xc3,0x5e,0x2b,0xd2,0x3c,0x41,0xa7,0x37,\r
-0x89,0x21,0xba,0xd2,0xef,0x61,0xbe,0x86,0x17,0xd4,0x52,0x48,0x59,0xe3,0x70,0xe1,\r
-0x58,0x34,0x44,0x95,0x25,0x40,0x23,0x3d,0x3b,0xd7,0xd9,0xd4,0x50,0x2b,0x05,0x14,\r
-0x51,0x40,0xc2,0x8a,0x28,0xa0,0x0f,0x29,0xfd,0xa1,0x2e,0x7c,0x9f,0x0a,0x05,0xce,\r
-0x32,0x58,0xfe,0x95,0xf0,0xf6,0xaa,0xfc,0x48,0x7d,0xcd,0x7d,0x97,0xfb,0x4b,0xdc,\r
-0xf9,0x7a,0x24,0x29,0x9f,0xe1,0x3c,0x57,0xc5,0xda,0xb3,0xe2,0x27,0x3f,0x5a,0xfc,\r
-0xeb,0x38,0x7c,0xd8,0xfb,0x76,0x48,0xfc,0xd3,0x8a,0x27,0xef,0xdb,0xc8,0xe4,0x3e,\r
-0x04,0xda,0x0d,0x63,0xf6,0xc8,0xf8,0x6d,0x01,0xc9,0xf2,0xaf,0xe6,0xb9,0xe3,0xfe,\r
-0x99,0xdb,0xca,0xc3,0xf9,0x57,0xeb,0x58,0xaf,0xcb,0x1f,0xd8,0xe7,0x4f,0x6d,0x5f,\r
-0xf6,0xce,0xd0,0xa5,0x03,0x29,0x61,0xa7,0xdf,0x5d,0x37,0xb0,0xf2,0xbc,0xb1,0xfa,\r
-0xc8,0x2b,0xf5,0x38,0x77,0xaf,0xb7,0xc1,0xab,0x51,0x47,0xd1,0xf0,0xd4,0x39,0x32,\r
-0xca,0x7e,0x62,0xd1,0x45,0x15,0xdc,0x7d,0x40,0x98,0xa6,0xc9,0x0a,0x4a,0xa5,0x5d,\r
-0x43,0xa1,0xe0,0xab,0x0c,0x83,0x4f,0xa2,0x80,0x38,0xad,0x6b,0xe0,0xcf,0x83,0x35,\r
-0xf9,0x1a,0x4b,0xbd,0x02,0xd7,0xcc,0x61,0x82,0xd0,0x83,0x17,0xe8,0xa4,0x0a,0xe5,\r
-0xaf,0x7f,0x65,0x8f,0x01,0x5d,0x9c,0xad,0x95,0xc5,0xbf,0xb4,0x53,0x7f,0xf1,0x40,\r
-0xd7,0xaf,0x51,0x5c,0xd2,0xc3,0x51,0x96,0xf0,0x47,0x24,0xb0,0x98,0x79,0xbb,0xca,\r
-0x9a,0xfb,0x8f,0x09,0xba,0xfd,0x8f,0x3c,0x13,0x36,0x4a,0x4d,0xa8,0x46,0x7d,0xdd,\r
-0x08,0xff,0x00,0xd0,0x2b,0x02,0xff,0x00,0xf6,0x26,0xd0,0x27,0xcf,0xd9,0xf5,0x69,\r
-0x22,0x3f,0xf4,0xd2,0xdc,0x3f,0xf2,0x61,0x5f,0x4a,0x51,0xf8,0xd6,0x4f,0x03,0x87,\r
-0x7f,0x60,0xe7,0x79,0x6e,0x16,0x5f,0x63,0xf3,0x3e,0x50,0xbc,0xfd,0x84,0xec,0x64,\r
-0xe6,0x2d,0x6a,0x17,0x3f,0xed,0xda,0x95,0xff,0x00,0xd9,0x8d,0x73,0xd7,0xdf,0xb0,\r
-0x65,0xd9,0x62,0x20,0xbb,0xd3,0x5c,0x76,0x2c,0x59,0x4f,0xfe,0x81,0x5f,0x68,0x62,\r
-0x8c,0x56,0x4f,0x2e,0xa0,0xfa,0x3f,0xbd,0x98,0xbc,0xa7,0x0a,0xfe,0xcb,0xfb,0xd9,\r
-0xf0,0x8d,0xe7,0xec,0x1d,0xae,0x2a,0xb1,0x8d,0x6c,0x65,0x3d,0x82,0x4d,0x8c,0xfe,\r
-0x78,0xae,0x7a,0xfb,0xf6,0x20,0xf1,0x54,0x07,0xe4,0xd3,0x0b,0x0f,0xfa,0x67,0x70,\r
-0x87,0xff,0x00,0x66,0xaf,0xd0,0xfc,0x51,0x8a,0x87,0x96,0xd3,0xe9,0x27,0xf7,0x9c,\r
-0xf2,0xc8,0xf0,0xb2,0xef,0xf8,0x7f,0x91,0xf9,0xa7,0x7b,0xfb,0x1f,0x78,0xc6,0xd4,\r
-0x90,0xba,0x46,0xa0,0x4f,0xfb,0x1f,0x30,0xfd,0x2b,0x0a,0xef,0xf6,0x69,0xf1,0x85,\r
-0x91,0x3b,0xb4,0xed,0x4e,0x3c,0x7a,0xdb,0xb7,0xf8,0x57,0xea,0x4e,0x29,0x0a,0xe6,\r
-0xa1,0xe5,0xab,0xa4,0xdf,0xe0,0x72,0xcb,0x87,0x70,0xd2,0xeb,0xf8,0x23,0xf2,0x7a,\r
-0xef,0xe0,0xd7,0x8a,0x6c,0x72,0x59,0x6e,0xa3,0x03,0xfb,0xf1,0x11,0x59,0xef,0xe0,\r
-0x3f,0x13,0xdb,0x74,0x91,0xce,0x3d,0x54,0xd7,0xeb,0x83,0x44,0xae,0x30,0xc0,0x11,\r
-0xe8,0x45,0x55,0x9f,0x45,0xb0,0xba,0xff,0x00,0x5d,0x65,0x6f,0x30,0xff,0x00,0x6e,\r
-0x25,0x3f,0xd2,0xb2,0x79,0x6c,0xba,0x4f,0xf0,0x38,0xe5,0xc2,0xf8,0x79,0x76,0xfb,\r
-0xbf,0xe0,0x9f,0x92,0x6d,0xa0,0x78,0xaa,0xdf,0xdf,0xeb,0x9a,0x88,0xa7,0x8a,0x2d,\r
-0xfe,0xf4,0x3b,0xbe,0x86,0xbf,0x57,0xee,0x3c,0x03,0xe1,0xbb,0xa0,0x7c,0xdd,0x07,\r
-0x4d,0x7c,0xf7,0x36,0xa9,0xfe,0x15,0x97,0x73,0xf0,0x6f,0xc1,0x77,0x79,0xf3,0x3c,\r
-0x3b,0x67,0xff,0x00,0x00,0x52,0x9f,0xc8,0x8a,0xc9,0xe5,0xb5,0x3b,0xa6,0x72,0x4b,\r
-0x84,0xe9,0x74,0xb7,0xe2,0x8f,0xcb,0x31,0xaa,0xf8,0x8a,0x0f,0xbf,0x68,0xc6,0x94,\r
-0x78,0xab,0x58,0x8b,0xef,0xd8,0xcb,0xc7,0xfb,0x26,0xbf,0x4d,0xae,0x7f,0x67,0x8f,\r
-0x00,0xdd,0x67,0x3a,0x12,0x46,0x4f,0x74,0x99,0xff,0x00,0xf8,0xaa,0xc5,0xbb,0xfd,\r
-0x94,0xfc,0x09,0x75,0x9d,0xb6,0xf7,0x70,0x67,0xfe,0x79,0xca,0xbf,0xd5,0x4d,0x63,\r
-0x2c,0xb2,0xa7,0xf2,0xc5,0x9c,0xb2,0xe1,0x37,0xd3,0xff,0x00,0x4a,0x67,0xe7,0x32,\r
-0xf8,0xee,0xf6,0x3f,0xbf,0x6b,0x28,0xfc,0x0d,0x4c,0x9f,0x11,0x4a,0x9f,0x9e,0x17,\r
-0x1f,0x85,0x7d,0xf7,0x79,0xfb,0x1c,0x78,0x36,0x7f,0xf5,0x37,0x57,0xd1,0x1f,0xf6,\r
-0x8a,0x37,0xfe,0xca,0x2b,0x02,0xf3,0xf6,0x22,0xd1,0x26,0x72,0x62,0xd6,0x9d,0x17,\r
-0xd1,0xed,0x43,0x1f,0xcf,0x78,0xac,0x1e,0x59,0x3e,0xb4,0x97,0xde,0x73,0x4b,0x85,\r
-0xab,0xaf,0x86,0xff,0x00,0x7a,0x3e,0x2b,0x4f,0x89,0x10,0xff,0x00,0x10,0x65,0xfa,\r
-0x8a,0xb1,0x1f,0xc4,0x4b,0x46,0xea,0xf8,0xaf,0xac,0x2f,0x7f,0x61,0x2b,0x49,0x01,\r
-0xf2,0x35,0x88,0x1d,0xbb,0x09,0x2d,0x8a,0xff,0x00,0x53,0x5c,0xf5,0xe7,0xec,0x19,\r
-0xa8,0x1f,0xf5,0x77,0x5a,0x63,0x8f,0xf7,0x98,0x7f,0xec,0xb5,0x83,0xcb,0x5f,0x5a,\r
-0x4c,0xe7,0x97,0x0e,0xe2,0xe3,0xb3,0x97,0xe0,0xcf,0x9e,0xa3,0xf1,0xed,0x9b,0xff,\r
-0x00,0xcb,0x45,0x15,0x66,0x3f,0x19,0xd9,0x3f,0xfc,0xb5,0x4f,0xce,0xbd,0x7a,0xfb,\r
-0xf6,0x11,0xd7,0xe3,0x62,0x23,0x86,0xce,0x61,0xeb,0x1c,0xc0,0x67,0xf3,0xc5,0x73,\r
-0xf7,0x9f,0xb1,0x27,0x8b,0x21,0xdd,0xb3,0x4a,0x76,0x03,0xfe,0x79,0xdc,0x21,0xff,\r
-0x00,0xd9,0xab,0x09,0x65,0xb1,0x5b,0xd3,0x92,0xf9,0x1c,0xd2,0xc9,0x31,0xd1,0xea,\r
-0xff,0x00,0xf0,0x13,0x89,0x4f,0x14,0xd9,0xbf,0xfc,0xb5,0x4f,0xfb,0xea,0xa7,0x4d,\r
-0x7e,0xd5,0xff,0x00,0x8d,0x4f,0xe2,0x2b,0x4a,0xf7,0xf6,0x43,0xf1,0x8d,0xa0,0x2d,\r
-0xfd,0x8f,0xa8,0x81,0xe9,0x1a,0x16,0xfe,0x42,0xb0,0xef,0x7f,0x66,0xdf,0x17,0x58,\r
-0xf2,0xda,0x76,0xa7,0x17,0xfb,0xf6,0xed,0xfe,0x15,0xcf,0x2c,0xbe,0x9a,0xee,0xbe,\r
-0x47,0x3c,0xb2,0xdc,0x74,0x3a,0xfe,0x0c,0xbe,0xba,0xb5,0xbb,0x7f,0x18,0xa9,0x17,\r
-0x51,0x80,0xff,0x00,0x18,0xae,0x46,0xe7,0xe1,0x07,0x89,0xac,0x8e,0x1b,0xed,0x28,\r
-0x47,0x67,0x88,0xd5,0x17,0xf0,0x2f,0x89,0xad,0x8f,0x12,0x3f,0x1e,0xaa,0x6b,0x17,\r
-0x81,0xa5,0xd2,0x46,0x2f,0x0d,0x8d,0x8f,0x63,0xd0,0x16,0xfa,0x23,0xd2,0x4f,0xd6,\r
-0xa5,0x5b,0xdc,0x7d,0xd9,0x88,0xfc,0x6b,0xcc,0xdb,0x42,0xf1,0x4d,0xbe,0x79,0x27,\r
-0xeb,0x9a,0x66,0xcf,0x13,0x41,0xf7,0xa2,0x2d,0x8f,0x43,0x51,0xfd,0x9f,0x17,0xb4,\r
-0x85,0xc9,0x8d,0x8f,0xd8,0xfc,0x4f,0x55,0x4d,0x52,0x74,0xfb,0xb7,0x4e,0x3e,0x8d,\r
-0x56,0x23,0xd7,0xef,0xe3,0xfb,0x97,0xb2,0x8f,0xa3,0x1a,0xf2,0x1f,0xed,0x5f,0x10,\r
-0xc2,0x3e,0x6b,0x47,0x3f,0x4a,0x51,0xe2,0x9d,0x62,0x3f,0xbf,0x67,0x27,0xfd,0xf3,\r
-0x51,0xfd,0x9d,0x2e,0x92,0x41,0xed,0x31,0xb0,0xde,0x9b,0xfb,0xcf,0x67,0x8f,0xc6,\r
-0x1a,0xc4,0x5f,0x77,0x50,0x97,0xfe,0xfa,0xab,0xb0,0x7c,0x44,0xd7,0xe0,0xfb,0xba,\r
-0x84,0x9f,0x8d,0x78,0x7a,0xf8,0xea,0xf2,0x3f,0xf5,0x96,0xb2,0x8f,0xf8,0x09,0xa9,\r
-0x53,0xe2,0x29,0x5f,0xbf,0x14,0x8b,0xf5,0x14,0x96,0x06,0xbc,0x7e,0x17,0xf8,0x94,\r
-0xb1,0xd8,0xb8,0x6f,0x19,0x23,0xde,0x60,0xf8,0xb7,0xe2,0x48,0x3f,0xe5,0xf4,0x9f,\r
-0xad,0x69,0x43,0xf1,0xd7,0xc4,0xd0,0x81,0x8b,0x8c,0xe3,0xdc,0xd7,0xcf,0x91,0xfc,\r
-0x48,0x87,0xb8,0x65,0xfc,0x2a,0xcc,0x7f,0x11,0x2d,0x5b,0xab,0xe3,0xea,0x2a,0x95,\r
-0x0c,0x5c,0x7e,0x19,0x3f,0xbc,0xd5,0x67,0x18,0x98,0x6e,0xe4,0xbe,0x47,0xd1,0xb6,\r
-0xbf,0xb4,0x67,0x88,0xe0,0x00,0x17,0xcf,0xd0,0xd6,0xa5,0xbf,0xed,0x3f,0xae,0x46,\r
-0x7e,0x70,0xc7,0xf1,0xaf,0x99,0xe3,0xf1,0xed,0x9b,0x7f,0xcb,0x41,0xf8,0xd5,0x98,\r
-0xfc,0x69,0x66,0xf8,0xfd,0xea,0x7e,0x75,0x4a,0x58,0xf8,0x6d,0x26,0x6f,0x1e,0x20,\r
-0xaf,0x1f,0xb6,0xfe,0xe3,0xea,0x5b,0x7f,0xda,0xb3,0x50,0x4c,0x6f,0x84,0x93,0xf4,\r
-0x15,0xa9,0x6b,0xfb,0x58,0x37,0x1e,0x6c,0x39,0xff,0x00,0x80,0xd7,0xc9,0xd1,0xf8,\r
-0xae,0xd1,0xff,0x00,0xe5,0xa2,0x7e,0x75,0x3a,0x78,0x86,0xd5,0xfa,0x3a,0xfe,0x75,\r
-0x6b,0x19,0x98,0xc3,0xed,0x33,0xa6,0x3c,0x4d,0x59,0x7f,0xcb,0xc4,0x7d,0x7f,0x6f,\r
-0xfb,0x56,0xd9,0x39,0xc3,0xc2,0x07,0xd4,0x56,0xad,0xb7,0xed,0x45,0xa2,0xc9,0x8f,\r
-0x31,0x00,0xfc,0x6b,0xe3,0x15,0xd6,0x2d,0xdb,0xf8,0x87,0xe7,0x52,0x2e,0xa5,0x03,\r
-0x7f,0x1e,0x2b,0x45,0x9a,0xe6,0x11,0xdd,0xfe,0x07,0x5c,0x38,0x9a,0xb7,0xf3,0x26,\r
-0x7d,0xbb,0x6d,0xfb,0x48,0x78,0x7a,0x7c,0x6e,0x60,0xbf,0xf0,0x2a,0xd4,0x83,0xe3,\r
-0xdf,0x86,0x66,0xc7,0xef,0xc0,0xff,0x00,0x81,0x0a,0xf8,0x48,0x5f,0x44,0x7a,0x3f,\r
-0xeb,0x4f,0x5b,0xc5,0xea,0x25,0xc7,0xe3,0x5a,0x2c,0xef,0x1b,0x1d,0xd2,0xfb,0x8e,\r
-0xc8,0xf1,0x35,0x5e,0xa9,0x33,0xef,0xd8,0x3e,0x30,0xf8,0x6e,0x7c,0x62,0xec,0x0f,\r
-0xc4,0x55,0xe8,0x7e,0x25,0x78,0x7e,0x7c,0x6d,0xbe,0x4f,0xc6,0xbf,0x3e,0x56,0xf9,\r
-0x86,0x31,0x3b,0x7f,0xdf,0x55,0x3a,0x6a,0xd7,0x51,0xfd,0xcb,0xb9,0x07,0xd1,0xab,\r
-0x65,0xc4,0x18,0x85,0xbc,0x11,0xd5,0x1e,0x25,0x7d,0x60,0x7e,0x86,0x47,0xe3,0x4d,\r
-0x16,0x5c,0x62,0xfe,0x2f,0xc4,0xd5,0xa8,0xfc,0x45,0xa6,0xcb,0xf7,0x6f,0x61,0x3f,\r
-0xf0,0x2a,0xfc,0xf1,0x8f,0xc4,0x7a,0x8c,0x7f,0x76,0xf6,0x51,0xff,0x00,0x02,0xab,\r
-0x91,0x78,0xdf,0x5a,0x87,0xee,0xea,0x12,0x7e,0x75,0xb2,0xe2,0x29,0xaf,0x8a,0x9f,\r
-0xe2,0x74,0x47,0x89,0x21,0xd6,0x07,0xe8,0x52,0xea,0x96,0x8f,0xf7,0x6e,0x62,0x3f,\r
-0x46,0x15,0x2a,0xdc,0x44,0xdd,0x24,0x43,0xf4,0x22,0xbf,0x3f,0x20,0xf8,0x97,0xe2,\r
-0x08,0x08,0xdb,0x7c,0xe7,0xeb,0x57,0xe1,0xf8,0xc5,0xe2,0x48,0x7f,0xe5,0xec,0x9a,\r
-0xde,0x3c,0x45,0x0f,0xb5,0x4d,0x9d,0x31,0xe2,0x2c,0x3b,0xde,0x2c,0xfb,0xdc,0x3a,\r
-0x9e,0x8c,0x0f,0xe3,0x4b,0x9a,0xf8,0x66,0xdf,0xe3,0xdf,0x89,0x2d,0xff,0x00,0xe5,\r
-0xb6,0x7f,0x13,0x5a,0x96,0xdf,0xb4,0x87,0x88,0x21,0xc6,0xe6,0x2d,0xf8,0x9a,0xdd,\r
-0x71,0x0e,0x1d,0xef,0x16,0x8d,0xe3,0x9f,0xe1,0x1e,0xec,0xfb,0x4b,0x38,0xa3,0x22,\r
-0xbe,0x42,0xb7,0xfd,0xa8,0xb5,0x98,0xf1,0xb9,0x0f,0xe7,0x9a,0xd4,0xb5,0xfd,0xab,\r
-0x2e,0xd7,0x1e,0x64,0x44,0xfe,0x15,0xba,0xcf,0xb0,0x8f,0x7b,0xfd,0xc7,0x44,0x73,\r
-0xac,0x1c,0xbe,0xd1,0xf5,0x4e,0x45,0x15,0xf3,0x55,0xb7,0xed,0x5c,0xac,0x47,0x99,\r
-0x00,0x03,0xfd,0xda,0xd5,0xb7,0xfd,0xaa,0x74,0xe6,0xc6,0xf8,0x97,0xf2,0x35,0xbc,\r
-0x73,0x9c,0x14,0xbe,0xd9,0xd1,0x1c,0xd3,0x09,0x2d,0xa6,0x8f,0xa0,0x33,0x4b,0x5e,\r
-0x25,0x6b,0xfb,0x4e,0x68,0xb2,0xfd,0xf0,0x8b,0xf8,0x9a,0xd5,0xb7,0xfd,0xa2,0xfc,\r
-0x3b,0x36,0x01,0x60,0x0f,0xfb,0xd5,0xd1,0x1c,0xcf,0x07,0x2d,0xaa,0x23,0x75,0x8e,\r
-0xc3,0xcb,0x69,0xa3,0xd6,0x28,0xaf,0x3a,0x83,0xe3,0x9f,0x86,0xe6,0xc7,0xfa,0x40,\r
-0x5c,0xff,0x00,0xb4,0x2b,0x46,0xdf,0xe2,0xdf,0x87,0x6e,0x31,0x8b,0xb5,0x1f,0x52,\r
-0x2b,0x75,0x8d,0xc3,0x4b,0x6a,0x8b,0xef,0x36,0x58,0x8a,0x2f,0x69,0x23,0xb4,0xa2,\r
-0xb9,0xa8,0xfe,0x22,0xe8,0x12,0xfd,0xdb,0xf4,0xcd,0x5b,0x8b,0xc6,0x1a,0x44,0xdf,\r
-0x76,0xfa,0x2f,0xc4,0xd6,0xca,0xbd,0x29,0x6d,0x25,0xf7,0x9a,0x2a,0x90,0x7b,0x33,\r
-0x6a,0x8a,0xce,0x4f,0x10,0x69,0xd2,0x7d,0xdb,0xc8,0x5b,0xfe,0x05,0x56,0x13,0x51,\r
-0xb6,0x7e,0x97,0x11,0x1f,0xf8,0x18,0xad,0x14,0xe2,0xf6,0x65,0x73,0x2e,0xe5,0x9a,\r
-0x2a,0x35,0xb8,0x89,0xfe,0xec,0x88,0x7e,0x8d,0x4f,0xdc,0x3d,0x45,0x55,0xca,0x16,\r
-0x8a,0x29,0x33,0x4c,0x05,0xa2,0x93,0x34,0x66,0x80,0x16,0x8a,0x4a,0x33,0x40,0x0b,\r
-0x45,0x14,0x94,0x01,0xf3,0xdf,0xed,0x45,0x77,0xb6,0xde,0x38,0xf3,0xd2,0x3c,0x57,\r
-0xc7,0x5e,0x24,0xbc,0x5b,0x7b,0x39,0x58,0x9c,0x61,0x4d,0x7d,0x53,0xfb,0x54,0x5f,\r
-0x88,0xee,0x4a,0x93,0x8c,0x28,0x02,0xbe,0x1a,0xf8,0x97,0xe2,0x95,0xb6,0xb3,0x78,\r
-0x95,0xf2,0xc4,0x73,0xcd,0x7e,0x79,0x88,0xa6,0xeb,0xe6,0x53,0xf2,0xb1,0xf9,0x1f,\r
-0x13,0xd4,0x73,0xc4,0xaa,0x31,0xdd,0x9e,0xad,0xff,0x00,0x04,0xe8,0xd3,0xe6,0xd6,\r
-0x3f,0x69,0x8f,0x14,0xea,0xe1,0x37,0xda,0x69,0xfe,0x1f,0x92,0x06,0x7c,0xfd,0xd9,\r
-0x25,0xb8,0x8b,0x60,0xfc,0x44,0x4f,0xf9,0x57,0xe9,0x78,0xaf,0x87,0x7f,0xe0,0x96,\r
-0xbe,0x07,0x96,0xcb,0xc1,0x1e,0x34,0xf1,0xa4,0xe0,0x8f,0xed,0xcd,0x42,0x3b,0x3b,\r
-0x70,0xc3,0xac,0x56,0xca,0xd9,0x61,0xf5,0x69,0x98,0x7f,0xc0,0x2b,0xee,0x3a,0xfb,\r
-0xba,0x11,0xe5,0xa6,0x91,0xfa,0x46,0x59,0x43,0xea,0xf8,0x3a,0x74,0xfb,0x20,0xa2,\r
-0x8a,0x2b,0xa0,0xf5,0x02,0x8a,0x28,0xa0,0x02,0x8a,0x28,0xa0,0x02,0x8a,0x28,0xa0,\r
-0x02,0x8a,0x28,0xa0,0x02,0x8a,0x28,0xa0,0x02,0x8a,0x28,0xa0,0x02,0x8a,0x28,0xa0,\r
-0x02,0x8a,0x28,0xa0,0x02,0x8a,0x28,0xa0,0x02,0x93,0x14,0xb4,0x50,0x02,0x62,0x8c,\r
-0x52,0xd1,0x40,0x0d,0x23,0xd2,0x94,0x0a,0x5a,0x28,0x01,0x31,0x46,0xd1,0x4b,0x45,\r
-0x00,0x46,0xd0,0xa3,0x82,0x19,0x15,0x81,0xec,0x45,0x54,0x9b,0x40,0xd3,0x6e,0x46,\r
-0x26,0xd3,0xed,0x65,0x1f,0xed,0xc2,0xa7,0xfa,0x55,0xfa,0x2a,0x5c,0x53,0xdd,0x12,\r
-0xe2,0x9e,0xe8,0xe7,0x6e,0x7e,0x1e,0x78,0x62,0xf3,0xfd,0x76,0x81,0xa7,0x3f,0xfd,\r
-0xbb,0x20,0xfe,0x42,0xb2,0xee,0x7e,0x0b,0xf8,0x26,0xef,0x3e,0x67,0x87,0x2c,0xc6,\r
-0x7f,0xb8,0xa5,0x3f,0x91,0x15,0xdb,0x51,0x59,0xba,0x34,0x9e,0xf1,0x5f,0x71,0x93,\r
-0xa1,0x4a,0x5b,0xc1,0x7d,0xc8,0xf3,0x2b,0xbf,0xd9,0xc7,0xc0,0x37,0x60,0x8f,0xec,\r
-0x51,0x1f,0xba,0x4c,0xff,0x00,0xd4,0x9a,0xc7,0xba,0xfd,0x93,0xfc,0x09,0x70,0x72,\r
-0xb0,0xdd,0xc3,0xec,0x92,0xaf,0xf5,0x53,0x5e,0xcb,0x45,0x64,0xf0,0x94,0x1f,0xd8,\r
-0x46,0x0f,0x03,0x86,0x7b,0xd3,0x5f,0x71,0xe0,0x37,0xbf,0xb1,0xaf,0x84,0x27,0xcf,\r
-0x91,0x77,0x79,0x11,0x3f,0xdf,0xd8,0xf8,0xfd,0x05,0x61,0x5d,0x7e,0xc3,0xba,0x2c,\r
-0xb9,0xf2,0xf5,0xc6,0x5f,0x4d,0xd6,0x80,0xff,0x00,0xec,0xf5,0xf4,0xdd,0x15,0x9b,\r
-0xc0,0xe1,0xdf,0xd9,0xfc,0xcc,0x9e,0x5b,0x84,0x7f,0x63,0xf3,0x3e,0x46,0xd4,0x3f,\r
-0x61,0x38,0x98,0x9f,0xb3,0x6a,0xd6,0x92,0x0f,0xfa,0x69,0x01,0x4f,0xe5,0x9a,0xe7,\r
-0xef,0x3f,0x60,0xcd,0x49,0x89,0xf2,0xee,0xb4,0xb7,0x1d,0xbe,0x77,0x07,0xff,0x00,\r
-0x40,0xaf,0xb6,0x31,0x46,0x2b,0x37,0x97,0x50,0xe9,0x75,0xf3,0x31,0x79,0x46,0x15,\r
-0xf4,0x7f,0x79,0xf0,0x45,0xff,0x00,0xec,0x29,0xe2,0x18,0x81,0x31,0x5b,0x5a,0x4d,\r
-0x8e,0xd1,0xdc,0x00,0x4f,0xe7,0x8a,0xc0,0xba,0xfd,0x89,0xbc,0x5d,0x10,0x24,0x69,\r
-0x12,0x71,0xfd,0xcb,0x84,0x3f,0xc9,0xab,0xf4,0x5b,0x14,0x98,0x35,0x1f,0xd9,0xb4,\r
-0xfa,0x49,0x9c,0xf2,0xc8,0xf0,0xd2,0xea,0xff,0x00,0x0f,0xf2,0x3f,0x33,0x2f,0xbf,\r
-0x64,0xaf,0x18,0x59,0x96,0x1f,0xd8,0xda,0x96,0x47,0xfc,0xf3,0x8d,0x98,0x7e,0x60,\r
-0x56,0x15,0xdf,0xec,0xe7,0xe2,0xcb,0x30,0x49,0xd3,0xf5,0x38,0xc0,0xea,0x5a,0xdd,\r
-0xb1,0xfc,0xab,0xf5,0x47,0x14,0x9b,0x73,0xd6,0xb3,0x79,0x6f,0x6a,0x8c,0xe5,0x97,\r
-0x0e,0xe1,0xe5,0xd7,0xf0,0x47,0xe4,0xbd,0xcf,0xc2,0x3f,0x11,0xd9,0x83,0x93,0x70,\r
-0x9f,0xef,0x46,0x45,0x51,0x93,0xc0,0xfe,0x25,0xb7,0xe9,0x23,0xf1,0xea,0xa6,0xbf,\r
-0x5c,0xde,0xde,0x39,0x06,0x19,0x15,0x87,0xa3,0x0c,0xd5,0x3b,0x8f,0x0f,0x69,0x77,\r
-0x9f,0xeb,0xf4,0xeb,0x49,0xbf,0xdf,0x81,0x5b,0xf9,0x8a,0xcd,0xe5,0xd3,0xe9,0x3f,\r
-0xc0,0xe3,0x9f,0x0b,0xd0,0x97,0x6f,0xbb,0xfe,0x09,0xf9,0x24,0xda,0x1f,0x8a,0x2d,\r
-0xfb,0x96,0xc7,0xd6,0xa3,0x2b,0xe2,0x58,0x3a,0xc5,0xbb,0xe8,0x6b,0xf5,0x7a,0xe3,\r
-0xe1,0xb7,0x85,0x6e,0xb3,0xe6,0xf8,0x7b,0x4d,0x6c,0xf5,0x3f,0x66,0x40,0x7f,0x41,\r
-0x59,0x57,0x5f,0x04,0x7c,0x0f,0x77,0xf7,0xfc,0x3b,0x68,0x3d,0x76,0xee,0x5f,0xe4,\r
-0x6b,0x27,0x96,0xd5,0xee,0x99,0xc7,0x2e,0x14,0xa6,0xf6,0xb7,0xe2,0x7e,0x5a,0xff,\r
-0x00,0x6a,0xf8,0x86,0x1f,0xbd,0x6a,0xc7,0x1e,0x94,0xe1,0xe2,0x9d,0x62,0x2f,0xbf,\r
-0x67,0x27,0xfd,0xf3,0x5f,0xa6,0x37,0x7f,0xb3,0x5f,0x80,0x2e,0xff,0x00,0xe6,0x0c,\r
-0x61,0xff,0x00,0xae,0x73,0x3f,0xf5,0x26,0xb1,0xee,0xbf,0x64,0xbf,0x01,0xdc,0x92,\r
-0x56,0x1b,0xd8,0x7d,0x92,0x65,0xfe,0xaa,0x6b,0x17,0x96,0xd5,0xfe,0x58,0x9c,0xb2,\r
-0xe1,0x3e,0xcb,0xf1,0x7f,0xe4,0x7e,0x74,0x8f,0x1c,0xde,0xc6,0x7e,0x7b,0x59,0x07,\r
-0xe0,0x6a,0x54,0xf8,0x88,0xeb,0xf7,0xe2,0x71,0xf9,0xd7,0xde,0xd7,0xbf,0xb1,0x87,\r
-0x85,0x27,0xcf,0x91,0x7f,0x79,0x0f,0xfb,0xea,0xaf,0xfe,0x15,0x89,0x75,0xfb,0x0e,\r
-0x68,0xf2,0x92,0x63,0xd7,0x18,0x7b,0x35,0xa0,0x3f,0xfb,0x3d,0x61,0x2c,0xb6,0xa7,\r
-0x5a,0x6b,0xef,0x39,0xa5,0xc2,0xd5,0x97,0xc3,0x7f,0xbd,0x1f,0x16,0xc7,0xf1,0x1e,\r
-0x2e,0xe0,0x8a,0xb3,0x1f,0xc4,0x4b,0x66,0xea,0xf5,0xf5,0x5e,0xa1,0xfb,0x08,0x29,\r
-0xcf,0xd9,0xb5,0x6b,0x39,0x07,0x6f,0x36,0x16,0x5f,0xe5,0x9a,0xe7,0xee,0xff,0x00,\r
-0x60,0xbd,0x4c,0x82,0x52,0xe7,0x4a,0x7f,0x6d,0xce,0x3f,0xf6,0x4a,0xc2,0x59,0x6b,\r
-0xeb,0x49,0x9c,0xd2,0xe1,0xcc,0x5c,0x76,0x72,0xfc,0x19,0xf3,0xec,0x7e,0x3d,0xb4,\r
-0x7c,0x66,0x40,0x3e,0xb5,0x66,0x3f,0x1a,0xd9,0xbe,0x3f,0x7a,0xb5,0xea,0xfa,0x87,\r
-0xec,0x2f,0xe2,0x58,0x58,0x88,0xac,0x6d,0xe7,0x03,0xbc,0x57,0x0a,0x07,0xea,0x45,\r
-0x61,0x5e,0x7e,0xc5,0x3e,0x2f,0x81,0x49,0x1a,0x3c,0xa7,0x1f,0xf3,0xce,0x74,0x6f,\r
-0xe4,0xd5,0x83,0xcb,0xa3,0xd6,0x9c,0x97,0xc8,0xe7,0x96,0x49,0x8e,0x8e,0xd2,0x7f,\r
-0xf8,0x09,0xc6,0xc7,0xe2,0xcb,0x47,0xc7,0xef,0x53,0xf3,0xa9,0xd3,0xc4,0x76,0xaf,\r
-0xd2,0x45,0x3f,0x8d,0x5d,0xbc,0xfd,0x93,0x7c,0x61,0x66,0x0b,0x7f,0x62,0xea,0x60,\r
-0x7f,0xb1,0x13,0x37,0xf2,0x15,0x87,0x79,0xfb,0x3b,0xf8,0xb2,0xc7,0xef,0xe9,0xfa,\r
-0x9c,0x5f,0xef,0xdb,0xb0,0xfe,0x95,0xce,0xf0,0x14,0x97,0x46,0xbe,0x47,0x3c,0xb2,\r
-0xec,0x74,0x3e,0xd7,0xe0,0xcd,0x55,0xd6,0xad,0xdb,0xf8,0x87,0xe7,0x52,0x0d,0x4e,\r
-0x06,0xfe,0x31,0x5c,0x6d,0xc7,0xc2,0x9f,0x10,0xda,0x31,0x52,0xd3,0xa1,0x07,0x18,\r
-0x68,0xc8,0xaa,0x72,0x78,0x23,0xc4,0x96,0xfd,0x24,0x63,0x8f,0xf6,0x4d,0x66,0xf0,\r
-0x34,0xba,0x48,0xc1,0xe1,0x71,0xb1,0xec,0xcf,0x41,0x17,0xf0,0xff,0x00,0x7a,0x9e,\r
-0xb7,0x91,0xf6,0x7f,0xd6,0xbc,0xd1,0xb4,0x4f,0x13,0x41,0xdc,0x9f,0x6e,0x69,0xa4,\r
-0x78,0x96,0x0e,0xb1,0x16,0xfc,0x6b,0x37,0x97,0xc5,0xed,0x22,0x7d,0x9e,0x35,0x7d,\r
-0x84,0xfe,0x67,0xa8,0xad,0xe0,0x1d,0x25,0x23,0xf1,0xa9,0x93,0x50,0x95,0x7e,0xed,\r
-0xc3,0x8f,0xa3,0x57,0x93,0xff,0x00,0x6a,0xf8,0x82,0x1f,0xbd,0x6a,0xc7,0x1e,0x94,\r
-0xa3,0xc5,0x3a,0xbc,0x5f,0x7e,0xd2,0x4f,0xfb,0xe6,0xa1,0xe5,0xcf,0xa4,0x90,0x73,\r
-0x62,0xe3,0xbd,0x37,0xf7,0x9e,0xbd,0x1e,0xb5,0x7b,0x11,0xf9,0x2e,0xe4,0x1f,0x47,\r
-0x35,0x65,0x3c,0x55,0xaa,0xc7,0xf7,0x6f,0xa5,0xff,0x00,0xbe,0x8d,0x78,0xe0,0xf1,\r
-0xcd,0xe4,0x7f,0x7e,0xda,0x41,0xff,0x00,0x01,0x35,0x2a,0x7c,0x44,0x61,0xf7,0xa2,\r
-0x71,0x51,0xfd,0x9f,0x55,0x6c,0xff,0x00,0x11,0xac,0x5e,0x26,0x3b,0xc2,0x47,0xb4,\r
-0xc3,0xe3,0xcd,0x72,0x0f,0xbb,0x7d,0x27,0xe2,0x6a,0xec,0x3f,0x14,0x7c,0x43,0x0e,\r
-0x31,0x7a,0xe7,0xea,0x6b,0xc4,0x13,0xe2,0x3c,0x47,0x19,0xdd,0x56,0xa3,0xf8,0x89,\r
-0x6c,0x71,0x97,0x22,0x8f,0xa9,0xe2,0x63,0xb5,0xfe,0xf3,0x45,0x9a,0x57,0x86,0xfc,\r
-0xcb,0xef,0x3d,0xda,0xdf,0xe3,0x4f,0x89,0x20,0xc6,0x2e,0x4f,0xe6,0x6b,0x46,0xdb,\r
-0xe3,0xff,0x00,0x88,0xa0,0xc6,0x64,0x2c,0x7d,0x77,0x57,0x81,0x47,0xe3,0xdb,0x46,\r
-0xff,0x00,0x96,0x95,0x66,0x3f,0x1a,0xda,0x37,0xfc,0xb5,0x5a,0x7c,0x98,0xc8,0x6d,\r
-0x27,0xf7,0x9b,0x47,0x3c,0xad,0x1f,0xb6,0xfe,0xe3,0xe8,0x8b,0x7f,0xda,0x53,0x5f,\r
-0x8b,0x86,0x27,0x1e,0xcd,0x5a,0x96,0xdf,0xb5,0x26,0xab,0x10,0x1b,0xe3,0x63,0xf5,\r
-0x35,0xf3,0x5c,0x7e,0x2d,0xb4,0x7e,0x92,0xaf,0xe7,0x53,0xaf,0x88,0xed,0x5f,0xa3,\r
-0xaf,0xe7,0x56,0xab,0xe3,0xe1,0xb4,0xd9,0xd3,0x1e,0x22,0xac,0xbf,0xe5,0xe1,0xf5,\r
-0x0d,0xb7,0xed,0x59,0x73,0x91,0xe6,0xa1,0xff,0x00,0xbe,0x45,0x6b,0x5b,0x7e,0xd5,\r
-0xb0,0xb6,0x03,0xc2,0x3e,0xa4,0x57,0xc9,0xc9,0xad,0xdb,0xbf,0xf1,0x8f,0xce,0xa5,\r
-0x5d,0x52,0x06,0xfe,0x2a,0xb5,0x98,0x66,0x10,0xfb,0x6f,0xee,0x3a,0xe1,0xc4,0x95,\r
-0x97,0xdb,0x47,0xd8,0x16,0xbf,0xb5,0x26,0x9a,0xc3,0xf7,0xa8,0xbf,0x91,0xad,0x4b,\r
-0x6f,0xda,0x5b,0x44,0x9b,0x19,0x0a,0x3f,0x1a,0xf8,0xb4,0x6a,0x30,0x9e,0x77,0x0a,\r
-0x6b,0xea,0xb0,0x20,0x3f,0x3f,0xeb,0x5b,0x47,0x36,0xc7,0xad,0x2f,0x7f,0x91,0xd4,\r
-0xb8,0x9e,0xac,0x77,0x68,0xfb,0xa2,0xdf,0xf6,0x84,0xf0,0xec,0xa0,0x66,0x50,0x0f,\r
-0xb3,0x0a,0xb7,0x37,0xc7,0x8f,0x0d,0x43,0x6e,0x65,0x7b,0x8c,0x01,0xdb,0x70,0xcd,\r
-0x7e,0x7b,0xdf,0xf8,0xce,0xd6,0xc9,0x09,0x33,0x85,0xc7,0xfb,0x55,0xc0,0x78,0x93,\r
-0xe2,0xcc,0x80,0x34,0x76,0x92,0xb1,0x27,0xbe,0x6b,0xd5,0xa1,0x8f,0xcc,0x2a,0xbd,\r
-0x52,0x17,0xfa,0xd9,0x56,0x4f,0x96,0x9d,0x3e,0x66,0x7b,0xb7,0xed,0x37,0xf1,0xc6,\r
-0xcf,0x5f,0xd5,0xee,0xe4,0xb5,0x93,0x31,0x74,0x8c,0x1e,0xb5,0xf2,0xd7,0x87,0x3c,\r
-0x2b,0xaf,0xfc,0x6d,0xf1,0xe6,0x9f,0xe1,0x8d,0x0a,0x16,0xb8,0xd4,0x35,0x09,0x76,\r
-0x6e,0xfe,0x08,0x63,0xcf,0xcd,0x23,0x9e,0xca,0xa3,0x24,0x9f,0x6f,0x5a,0x93,0xc2,\r
-0xbe,0x13,0xf1,0x57,0xc6,0x6f,0x16,0x41,0xa3,0x68,0x36,0x13,0x6a,0xba,0x95,0xc3,\r
-0x70,0x89,0xf7,0x51,0x7b,0xbb,0xb1,0xe1,0x54,0x77,0x27,0xfa,0x8a,0xfd,0x46,0xfd,\r
-0x97,0x3f,0x65,0xdd,0x1b,0xf6,0x79,0xf0,0xdb,0x39,0x31,0xea,0x5e,0x2b,0xbe,0x41,\r
-0xfd,0xa1,0xa9,0xe3,0x8c,0x75,0xf2,0xa2,0xcf,0x21,0x01,0xfc,0x58,0xf2,0x7b,0x01,\r
-0xe9,0x61,0x70,0xaf,0x99,0xce,0x5b,0xbd,0x5b,0x34,0xcb,0x30,0x15,0x73,0x1c,0x53,\r
-0xc6,0x62,0x3f,0xe0,0x7a,0x23,0xd2,0xfe,0x17,0x7c,0x3e,0xd3,0x7e,0x15,0xf8,0x03,\r
-0x44,0xf0,0xa6,0x92,0x81,0x6c,0x74,0xbb,0x65,0x81,0x5b,0x1c,0xbb,0x75,0x67,0x3e,\r
-0xec,0xc4,0x93,0xf5,0xae,0xaa,0x90,0x0c,0x52,0xd7,0xd0,0x25,0x6d,0x0f,0xd2,0xd2,\r
-0xb2,0xb2,0x0a,0x28,0xa2,0x81,0x85,0x14,0x51,0x40,0x05,0x14,0x51,0x40,0x05,0x14,\r
-0x51,0x40,0x05,0x14,0x51,0x40,0x05,0x14,0x51,0x40,0x05,0x14,0x51,0x40,0x05,0x14,\r
-0x51,0x40,0x05,0x14,0x51,0x40,0x05,0x14,0x51,0x40,0x05,0x14,0x51,0x40,0x05,0x14,\r
-0x51,0x40,0x05,0x14,0x51,0x40,0x05,0x14,0x51,0x40,0x05,0x14,0x51,0x40,0x05,0x14,\r
-0x51,0x40,0x05,0x14,0x51,0x40,0x05,0x14,0x51,0x40,0x05,0x14,0x51,0x40,0x05,0x14,\r
-0x51,0x40,0x05,0x14,0x51,0x40,0x05,0x14,0x51,0x40,0x05,0x14,0x51,0x40,0x05,0x14,\r
-0x51,0x40,0x05,0x14,0x51,0x40,0x09,0x46,0x29,0x68,0xa0,0x04,0xc5,0x18,0xa5,0xa2,\r
-0x80,0x13,0x6d,0x26,0xda,0x75,0x14,0x01,0x13,0xda,0xc3,0x26,0x77,0xc4,0x8d,0x9e,\r
-0xb9,0x50,0x6a,0x8d,0xc7,0x86,0xb4,0x9b,0xa0,0x44,0xda,0x5d,0x9c,0xca,0x7a,0x89,\r
-0x20,0x43,0xfd,0x2b,0x4e,0x8a,0x97,0x18,0xbd,0xd1,0x2e,0x31,0x7b,0xa3,0x98,0xb9,\r
-0xf8,0x65,0xe1,0x3b,0xb1,0xfb,0xdf,0x0e,0xe9,0xa7,0xe9,0x6c,0x8b,0xfc,0x85,0x65,\r
-0xdd,0x7c,0x0e,0xf0,0x35,0xd9,0x26,0x4f,0x0e,0x5a,0x0f,0xf7,0x37,0x27,0xf2,0x22,\r
-0xbb,0xba,0x2b,0x37,0x42,0x93,0xde,0x2b,0xee,0x31,0x78,0x7a,0x32,0xde,0x0b,0xee,\r
-0x47,0x96,0x5d,0xfe,0xcc,0xfe,0x00,0xbb,0x24,0xff,0x00,0x64,0x34,0x24,0xff,0x00,\r
-0xcf,0x39,0x9b,0x8f,0xcc,0x9a,0xc7,0xba,0xfd,0x91,0xfc,0x0b,0x71,0xf7,0x12,0xf6,\r
-0x13,0xfe,0xcc,0xaa,0x7f,0x9a,0xd7,0xb5,0xd1,0x59,0x3c,0x25,0x07,0xf6,0x11,0x8b,\r
-0xc0,0xe1,0x9f,0xfc,0xbb,0x47,0xcf,0x37,0xbf,0xb1,0x77,0x85,0x67,0x27,0xc8,0xd4,\r
-0x2e,0xe1,0x1e,0x8e,0x88,0xff,0x00,0xcb,0x15,0x8b,0x75,0xfb,0x0d,0x69,0x12,0xe7,\r
-0xcb,0xd7,0x58,0x7a,0x6f,0xb4,0x07,0xff,0x00,0x66,0xaf,0xa8,0x28,0xac,0xde,0x07,\r
-0x0e,0xfe,0xcf,0xe6,0x64,0xf2,0xcc,0x2b,0xfb,0x1f,0x8b,0x3e,0x3e,0xbf,0xfd,0x84,\r
-0x1c,0x93,0xf6,0x7d,0x56,0xc6,0x40,0x7f,0xe7,0xac,0x4c,0xbf,0xc8,0x1a,0xc1,0xbd,\r
-0xfd,0x83,0x35,0x65,0xc9,0x8e,0xe7,0x4b,0x97,0xe8,0xee,0x0f,0xea,0xa2,0xbe,0xdf,\r
-0xa4,0x6e,0x95,0x93,0xcb,0xa8,0x74,0xbf,0xde,0x60,0xf2,0x8c,0x2b,0xe8,0xfe,0xf3,\r
-0xe0,0x0b,0xef,0xd8,0x67,0xc4,0xd1,0x93,0xe5,0xe9,0xf0,0x4c,0x3f,0xe9,0x95,0xc2,\r
-0x0f,0xe6,0x45,0x61,0x5e,0x7e,0xc5,0x7e,0x30,0xb7,0x04,0x8d,0x16,0x63,0xff,0x00,\r
-0x5c,0xe7,0x46,0xfe,0x4c,0x6b,0xf4,0x6c,0x75,0xa0,0x75,0xac,0xde,0x5d,0x4f,0xa4,\r
-0x99,0xcf,0x2c,0x8f,0x0c,0xfa,0xbf,0xc3,0xfc,0x8f,0xcc,0x3b,0xcf,0xd9,0x53,0xc5,\r
-0xd6,0x8c,0x41,0xd1,0x35,0x51,0x8f,0xee,0xc0,0xec,0x3f,0x30,0x2b,0x16,0xfb,0xf6,\r
-0x7b,0xf1,0x56,0x9e,0xa5,0xa4,0xb1,0xd4,0xa1,0x03,0xbb,0xc0,0xc3,0xfa,0x57,0xea,\r
-0xb8,0xe9,0x4d,0x3c,0xd4,0x3c,0xbb,0xb4,0xd9,0xcb,0x2e,0x1d,0xc3,0xbe,0xbf,0x82,\r
-0x3f,0x24,0x67,0xf8,0x59,0xaf,0xda,0x9c,0x16,0x99,0x7f,0xde,0x42,0x2a,0xa3,0xf8,\r
-0x2b,0xc4,0x50,0x1e,0x25,0x6f,0xc4,0x1a,0xfd,0x75,0x96,0xd6,0x19,0x57,0xe7,0x89,\r
-0x1f,0xfd,0xe5,0x06,0xb3,0x2f,0x3c,0x37,0xa4,0x5d,0xff,0x00,0xaf,0xd2,0xec,0xa6,\r
-0xff,0x00,0xae,0x96,0xe8,0xdf,0xcc,0x57,0x34,0xf0,0x72,0x8f,0xdb,0xfc,0x3f,0xe0,\r
-0x9e,0x65,0x5e,0x1d,0xc3,0xc7,0xb7,0xdd,0xff,0x00,0x04,0xfc,0x94,0x9b,0x44,0xf1,\r
-0x2c,0x2b,0xc3,0x13,0xf4,0xcd,0x64,0x5d,0xe8,0x9e,0x28,0x94,0x13,0x99,0x31,0xec,\r
-0x09,0xaf,0xd4,0x6f,0x14,0x78,0x37,0x40,0x44,0x98,0xae,0x87,0xa6,0x83,0x8e,0xa2,\r
-0xd2,0x3f,0xf0,0xac,0x0f,0x06,0xf8,0x4b,0x43,0x9e,0xf1,0xd6,0x5d,0x1b,0x4f,0x91,\r
-0x72,0x38,0x7b,0x54,0x23,0xf9,0x57,0x1c,0x63,0x25,0x2b,0x2b,0x7d,0xc7,0x8f,0x2c,\r
-0x97,0x0c,0xa5,0xca,0x92,0xfb,0x8f,0xcc,0x9b,0x2f,0x86,0x9e,0x2d,0xf1,0x2d,0xd8,\r
-0xb7,0xb3,0xd3,0xef,0x75,0x19,0xd8,0xf1,0x15,0xbc,0x4c,0xed,0xcf,0xb0,0x15,0xf4,\r
-0x27,0xc2,0x4f,0xf8,0x27,0x6f,0x8a,0x7c,0x4d,0x3c,0x37,0x7e,0x31,0xb9,0x5f,0x0d,\r
-0xe9,0x99,0x05,0xa0,0x52,0x24,0xba,0x71,0xd7,0x85,0x1f,0x2a,0xfd,0x58,0xe4,0x7f,\r
-0x76,0xbf,0x46,0x74,0xed,0x2e,0xcf,0x4c,0xb7,0x58,0xac,0xed,0x20,0xb4,0x8c,0x0e,\r
-0x12,0x08,0xd5,0x00,0xfc,0x00,0xab,0x8b,0x5e,0xfd,0x1c,0x3d,0xd2,0x94,0xdd,0xcf,\r
-0xa2,0xc0,0xf0,0xed,0x18,0x5a,0x75,0x26,0xe4,0xbb,0x5a,0xc8,0xe2,0x7e,0x16,0xfc,\r
-0x1b,0xf0,0xa7,0xc1,0xcd,0x0c,0x69,0x9e,0x18,0xd2,0xe3,0xb3,0x46,0x03,0xce,0xb8,\r
-0x6f,0x9a,0x79,0xc8,0xef,0x23,0xf5,0x3f,0x4e,0x83,0xb0,0x15,0xdb,0x8e,0x28,0x1d,\r
-0x29,0x6b,0xd0,0x49,0x25,0x64,0x7d,0x8c,0x29,0xc6,0x9c,0x54,0x20,0xac,0x90,0x51,\r
-0x45,0x14,0xcd,0x02,0x8a,0x28,0xa0,0x0f,0xff,0xd9,};\r
-\r
-static const unsigned int dummy_align__runtime_shtml = 3;\r
-static const unsigned char data__runtime_shtml[] = {\r
-/* /runtime.shtml (15 chars) */\r
-0x2f,0x72,0x75,0x6e,0x74,0x69,0x6d,0x65,0x2e,0x73,0x68,0x74,0x6d,0x6c,0x00,0x00,\r
-\r
-/* HTTP header */\r
-/* "HTTP/1.0 200 OK\r
-" (17 bytes) */\r
-0x48,0x54,0x54,0x50,0x2f,0x31,0x2e,0x30,0x20,0x32,0x30,0x30,0x20,0x4f,0x4b,0x0d,\r
-0x0a,\r
-/* "Server: lwIP/1.3.1 (http://savannah.nongnu.org/projects/lwip)\r
-" (63 bytes) */\r
-0x53,0x65,0x72,0x76,0x65,0x72,0x3a,0x20,0x6c,0x77,0x49,0x50,0x2f,0x31,0x2e,0x33,\r
-0x2e,0x31,0x20,0x28,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x73,0x61,0x76,0x61,0x6e,\r
-0x6e,0x61,0x68,0x2e,0x6e,0x6f,0x6e,0x67,0x6e,0x75,0x2e,0x6f,0x72,0x67,0x2f,0x70,\r
-0x72,0x6f,0x6a,0x65,0x63,0x74,0x73,0x2f,0x6c,0x77,0x69,0x70,0x29,0x0d,0x0a,\r
-/* "Content-type: text/html\r
-Expires: Fri, 10 Apr 2008 14:00:00 GMT\r
-Pragma: no-cache\r
-\r
-" (85 bytes) */\r
-0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x74,0x79,0x70,0x65,0x3a,0x20,0x74,0x65,\r
-0x78,0x74,0x2f,0x68,0x74,0x6d,0x6c,0x0d,0x0a,0x45,0x78,0x70,0x69,0x72,0x65,0x73,\r
-0x3a,0x20,0x46,0x72,0x69,0x2c,0x20,0x31,0x30,0x20,0x41,0x70,0x72,0x20,0x32,0x30,\r
-0x30,0x38,0x20,0x31,0x34,0x3a,0x30,0x30,0x3a,0x30,0x30,0x20,0x47,0x4d,0x54,0x0d,\r
-0x0a,0x50,0x72,0x61,0x67,0x6d,0x61,0x3a,0x20,0x6e,0x6f,0x2d,0x63,0x61,0x63,0x68,\r
-0x65,0x0d,0x0a,0x0d,0x0a,\r
-/* raw file data (758 bytes) */\r
-0x3c,0x21,0x44,0x4f,0x43,0x54,0x59,0x50,0x45,0x20,0x48,0x54,0x4d,0x4c,0x20,0x50,\r
-0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,\r
-0x54,0x44,0x20,0x48,0x54,0x4d,0x4c,0x20,0x34,0x2e,0x30,0x31,0x20,0x54,0x72,0x61,\r
-0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x61,0x6c,0x2f,0x2f,0x45,0x4e,0x22,0x20,0x22,\r
-0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,\r
-0x67,0x2f,0x54,0x52,0x2f,0x68,0x74,0x6d,0x6c,0x34,0x2f,0x6c,0x6f,0x6f,0x73,0x65,\r
-0x2e,0x64,0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x68,0x74,0x6d,0x6c,0x3e,0x0d,0x0a,\r
-0x20,0x20,0x3c,0x68,0x65,0x61,0x64,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x74,\r
-0x69,0x74,0x6c,0x65,0x3e,0x46,0x72,0x65,0x65,0x52,0x54,0x4f,0x53,0x2e,0x6f,0x72,\r
-0x67,0x20,0x6c,0x77,0x49,0x50,0x20,0x57,0x45,0x42,0x20,0x73,0x65,0x72,0x76,0x65,\r
-0x72,0x20,0x64,0x65,0x6d,0x6f,0x3c,0x2f,0x74,0x69,0x74,0x6c,0x65,0x3e,0x0d,0x0a,\r
-0x20,0x20,0x3c,0x2f,0x68,0x65,0x61,0x64,0x3e,0x0d,0x0a,0x20,0x20,0x3c,0x42,0x4f,\r
-0x44,0x59,0x20,0x6f,0x6e,0x4c,0x6f,0x61,0x64,0x3d,0x22,0x77,0x69,0x6e,0x64,0x6f,\r
-0x77,0x2e,0x73,0x65,0x74,0x54,0x69,0x6d,0x65,0x6f,0x75,0x74,0x28,0x26,0x71,0x75,\r
-0x6f,0x74,0x3b,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x2e,0x68,0x72,0x65,0x66,\r
-0x3d,0x27,0x72,0x75,0x6e,0x74,0x69,0x6d,0x65,0x2e,0x73,0x68,0x74,0x6d,0x6c,0x27,\r
-0x26,0x71,0x75,0x6f,0x74,0x3b,0x2c,0x32,0x30,0x30,0x30,0x29,0x22,0x3e,0x0d,0x0a,\r
-0x3c,0x66,0x6f,0x6e,0x74,0x20,0x66,0x61,0x63,0x65,0x3d,0x22,0x61,0x72,0x69,0x61,\r
-0x6c,0x22,0x3e,0x0d,0x0a,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x69,0x6e,\r
-0x64,0x65,0x78,0x2e,0x73,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x54,0x61,0x73,0x6b,0x20,\r
-0x53,0x74,0x61,0x74,0x73,0x3c,0x2f,0x61,0x3e,0x20,0x3c,0x62,0x3e,0x7c,0x3c,0x2f,\r
-0x62,0x3e,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x72,0x75,0x6e,0x74,\r
-0x69,0x6d,0x65,0x2e,0x73,0x68,0x74,0x6d,0x6c,0x22,0x3e,0x52,0x75,0x6e,0x20,0x54,\r
-0x69,0x6d,0x65,0x20,0x53,0x74,0x61,0x74,0x73,0x3c,0x2f,0x61,0x3e,0x20,0x3c,0x62,\r
-0x3e,0x7c,0x3c,0x2f,0x62,0x3e,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,\r
-0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x66,0x72,0x65,0x65,0x72,\r
-0x74,0x6f,0x73,0x2e,0x6f,0x72,0x67,0x2f,0x22,0x3e,0x46,0x72,0x65,0x65,0x52,0x54,\r
-0x4f,0x53,0x20,0x48,0x6f,0x6d,0x65,0x70,0x61,0x67,0x65,0x3c,0x2f,0x61,0x3e,0x20,\r
-0x3c,0x62,0x3e,0x7c,0x3c,0x2f,0x62,0x3e,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,\r
-0x3d,0x22,0x6c,0x6f,0x67,0x6f,0x2e,0x6a,0x70,0x67,0x22,0x3e,0x33,0x37,0x4b,0x20,\r
-0x6a,0x70,0x67,0x3c,0x2f,0x61,0x3e,0x0d,0x0a,0x3c,0x62,0x72,0x3e,0x3c,0x70,0x3e,\r
-0x0d,0x0a,0x3c,0x68,0x72,0x3e,0x0d,0x0a,0x3c,0x62,0x72,0x3e,0x3c,0x70,0x3e,0x0d,\r
-0x0a,0x3c,0x68,0x32,0x3e,0x52,0x75,0x6e,0x2d,0x74,0x69,0x6d,0x65,0x20,0x73,0x74,\r
-0x61,0x74,0x69,0x73,0x74,0x69,0x63,0x73,0x3c,0x2f,0x68,0x32,0x3e,0x0d,0x0a,0x50,\r
-0x61,0x67,0x65,0x20,0x77,0x69,0x6c,0x6c,0x20,0x72,0x65,0x66,0x72,0x65,0x73,0x68,\r
-0x20,0x65,0x76,0x65,0x72,0x79,0x20,0x32,0x20,0x73,0x65,0x63,0x6f,0x6e,0x64,0x73,\r
-0x2e,0x3c,0x70,0x3e,0x0d,0x0a,0x3c,0x66,0x6f,0x6e,0x74,0x20,0x66,0x61,0x63,0x65,\r
-0x3d,0x22,0x63,0x6f,0x75,0x72,0x69,0x65,0x72,0x22,0x3e,0x3c,0x70,0x72,0x65,0x3e,\r
-0x54,0x61,0x73,0x6b,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,\r
-0x41,0x62,0x73,0x20,0x54,0x69,0x6d,0x65,0x20,0x20,0x20,0x20,0x20,0x20,0x25,0x20,\r
-0x54,0x69,0x6d,0x65,0x3c,0x62,0x72,0x3e,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,\r
-0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,\r
-0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,\r
-0x3c,0x62,0x72,0x3e,0x0d,0x0a,0x3c,0x21,0x2d,0x2d,0x23,0x72,0x75,0x6e,0x5f,0x73,\r
-0x74,0x61,0x74,0x73,0x2d,0x2d,0x3e,0x0d,0x0d,0x0a,0x3c,0x2f,0x70,0x72,0x65,0x3e,\r
-0x3c,0x2f,0x66,0x6f,0x6e,0x74,0x3e,0x0d,0x0a,0x3c,0x2f,0x66,0x6f,0x6e,0x74,0x3e,\r
-0x0d,0x0a,0x3c,0x2f,0x62,0x6f,0x64,0x79,0x3e,0x0d,0x0a,0x3c,0x2f,0x68,0x74,0x6d,\r
-0x6c,0x3e,0x0d,0x0a,0x0d,0x0a,};\r
-\r
-\r
-\r
-const struct fsdata_file file__404_html[] = { {\r
-file_NULL,\r
-data__404_html,\r
-data__404_html + 12,\r
-sizeof(data__404_html) - 12,\r
-1,\r
-}};\r
-\r
-const struct fsdata_file file__index_shtml[] = { {\r
-file__404_html,\r
-data__index_shtml,\r
-data__index_shtml + 16,\r
-sizeof(data__index_shtml) - 16,\r
-1,\r
-}};\r
-\r
-const struct fsdata_file file__logo_jpg[] = { {\r
-file__index_shtml,\r
-data__logo_jpg,\r
-data__logo_jpg + 12,\r
-sizeof(data__logo_jpg) - 12,\r
-1,\r
-}};\r
-\r
-const struct fsdata_file file__runtime_shtml[] = { {\r
-file__logo_jpg,\r
-data__runtime_shtml,\r
-data__runtime_shtml + 16,\r
-sizeof(data__runtime_shtml) - 16,\r
-1,\r
-}};\r
-\r
-#define FS_ROOT file__runtime_shtml\r
-#define FS_NUMFILES 4\r
-\r
diff --git a/FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/makefsdata/makefsdata b/FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/makefsdata/makefsdata
deleted file mode 100644 (file)
index 37b4203..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-#!/usr/bin/perl
-
-open(OUTPUT, "> fsdata.c");
-
-chdir("fs");
-open(FILES, "find . -type f |");
-
-while($file = <FILES>) {
-
-    # Do not include files in CVS directories nor backup files.
-    if($file =~ /(CVS|~)/) {
-       next;
-    }
-    
-    chop($file);
-    
-    open(HEADER, "> /tmp/header") || die $!;
-    if($file =~ /404/) {
-       print(HEADER "HTTP/1.0 404 File not found\r\n");
-    } else {
-       print(HEADER "HTTP/1.0 200 OK\r\n");
-    }
-    print(HEADER "Server: lwIP/pre-0.6 (http://www.sics.se/~adam/lwip/)\r\n");
-    if($file =~ /\.html$/) {
-       print(HEADER "Content-type: text/html\r\n");
-    } elsif($file =~ /\.gif$/) {
-       print(HEADER "Content-type: image/gif\r\n");
-    } elsif($file =~ /\.png$/) {
-       print(HEADER "Content-type: image/png\r\n");
-    } elsif($file =~ /\.jpg$/) {
-       print(HEADER "Content-type: image/jpeg\r\n");
-    } elsif($file =~ /\.class$/) {
-       print(HEADER "Content-type: application/octet-stream\r\n");
-    } elsif($file =~ /\.ram$/) {
-       print(HEADER "Content-type: audio/x-pn-realaudio\r\n");    
-    } else {
-       print(HEADER "Content-type: text/plain\r\n");
-    }
-    print(HEADER "\r\n");
-    close(HEADER);
-
-    unless($file =~ /\.plain$/ || $file =~ /cgi/) {
-       system("cat /tmp/header $file > /tmp/file");
-    } else {
-       system("cp $file /tmp/file");
-    }
-    
-    open(FILE, "/tmp/file");
-    unlink("/tmp/file");
-    unlink("/tmp/header");
-
-    $file =~ s/\.//;
-    $fvar = $file;
-    $fvar =~ s-/-_-g;
-    $fvar =~ s-\.-_-g;
-    print(OUTPUT "static const unsigned char data".$fvar."[] = {\n");
-    print(OUTPUT "\t/* $file */\n\t");
-    for($j = 0; $j < length($file); $j++) {
-       printf(OUTPUT "%#02x, ", unpack("C", substr($file, $j, 1)));
-    }
-    printf(OUTPUT "0,\n");
-    
-    
-    $i = 0;
-    while(read(FILE, $data, 1)) {
-        if($i == 0) {
-            print(OUTPUT "\t");
-        }
-        printf(OUTPUT "%#02x, ", unpack("C", $data));
-        $i++;
-        if($i == 10) {
-            print(OUTPUT "\n");
-            $i = 0;
-        }
-    }
-    print(OUTPUT "};\n\n");
-    close(FILE);
-    push(@fvars, $fvar);
-    push(@files, $file);
-}
-
-for($i = 0; $i < @fvars; $i++) {
-    $file = $files[$i];
-    $fvar = $fvars[$i];
-
-    if($i == 0) {
-        $prevfile = "NULL";
-    } else {
-        $prevfile = "file" . $fvars[$i - 1];
-    }
-    print(OUTPUT "const struct fsdata_file file".$fvar."[] = {{$prevfile, data$fvar, ");
-    print(OUTPUT "data$fvar + ". (length($file) + 1) .", ");
-    print(OUTPUT "sizeof(data$fvar) - ". (length($file) + 1) ."}};\n\n");
-}
-
-print(OUTPUT "#define FS_ROOT file$fvars[$i - 1]\n\n");
-print(OUTPUT "#define FS_NUMFILES $i\n");
diff --git a/FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/makefsdata/makefsdata.c b/FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/makefsdata/makefsdata.c
deleted file mode 100644 (file)
index b065caa..0000000
+++ /dev/null
@@ -1,610 +0,0 @@
-/**
- * makefsdata: Converts a directory structure for use with the lwIP httpd.
- *
- * This file is part of the lwIP TCP/IP stack.
- * 
- * Author: Jim Pettinato
- *         Simon Goldschmidt
- *
- * @todo:
- * - take TCP_MSS, LWIP_TCP_TIMESTAMPS and
- *   PAYLOAD_ALIGN_TYPE/PAYLOAD_ALIGNMENT as arguments
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#ifdef WIN32
-#define WIN32_LEAN_AND_MEAN
-#include "windows.h"
-#else
-#include <dir.h>
-#endif
-#include <dos.h>
-#include <string.h>
-
-/* Compatibility defines Win32 vs. DOS */
-#ifdef WIN32
-
-#define FIND_T                        WIN32_FIND_DATAA
-#define FIND_T_FILENAME(fInfo)        (fInfo.cFileName)
-#define FIND_T_IS_DIR(fInfo)          ((fInfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0)
-#define FIND_T_IS_FILE(fInfo)         ((fInfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0)
-#define FIND_RET_T                    HANDLE
-#define FINDFIRST_FILE(path, result)  FindFirstFileA(path, result)
-#define FINDFIRST_DIR(path, result)   FindFirstFileA(path, result)
-#define FINDNEXT(ff_res, result)      FindNextFileA(ff_res, result)
-#define FINDFIRST_SUCCEEDED(ret)      (ret != INVALID_HANDLE_VALUE)
-#define FINDNEXT_SUCCEEDED(ret)       (ret == TRUE)
-
-#define GETCWD(path, len)             GetCurrentDirectoryA(len, path)
-#define CHDIR(path)                   SetCurrentDirectoryA(path)
-
-#define NEWLINE     "\r\n"
-#define NEWLINE_LEN 2
-
-#else
-
-#define FIND_T                        struct fflbk
-#define FIND_T_FILENAME(fInfo)        (fInfo.ff_name)
-#define FIND_T_IS_DIR(fInfo)          ((fInfo.ff_attrib & FA_DIREC) == FA_DIREC)
-#define FIND_T_IS_FILE(fInfo)         (1)
-#define FIND_RET_T                    int
-#define FINDFIRST_FILE(path, result)  findfirst(path, result, FA_ARCH)
-#define FINDFIRST_DIR(path, result)   findfirst(path, result, FA_DIREC)
-#define FINDNEXT(ff_res, result)      FindNextFileA(ff_res, result)
-#define FINDFIRST_SUCCEEDED(ret)      (ret == 0)
-#define FINDNEXT_SUCCEEDED(ret)       (ret == 0)
-
-#define GETCWD(path, len)             getcwd(path, len)
-#define CHDIR(path)                   chdir(path)
-
-#endif
-
-/* define this to get the header variables we use to build HTTP headers */
-#define LWIP_HTTPD_DYNAMIC_HEADERS 1
-#include "../httpd_structs.h"
-
-#include "../../../lwip-1.4.0/src/core/ipv4/inet_chksum.c"
-#include "../../../lwip-1.4.0/src/core/def.c"
-
-/** (Your server name here) */
-const char *serverID = "Server: "HTTPD_SERVER_AGENT"\r\n";
-
-/* change this to suit your MEM_ALIGNMENT */
-#define PAYLOAD_ALIGNMENT 4
-/* set this to 0 to prevent aligning payload */
-#define ALIGN_PAYLOAD 1
-/* define this to a type that has the required alignment */
-#define PAYLOAD_ALIGN_TYPE "unsigned int"
-static int payload_alingment_dummy_counter = 0;
-
-#define HEX_BYTES_PER_LINE 16
-
-#define MAX_PATH_LEN 256
-
-#define COPY_BUFSIZE 10240
-
-int process_sub(FILE *data_file, FILE *struct_file);
-int process_file(FILE *data_file, FILE *struct_file, const char *filename);
-int file_write_http_header(FILE *data_file, const char *filename, int file_size,
-                           u16_t *http_hdr_len, u16_t *http_hdr_chksum);
-int file_put_ascii(FILE *file, const char *ascii_string, int len, int *i);
-int s_put_ascii(char *buf, const char *ascii_string, int len, int *i);
-void concat_files(const char *file1, const char *file2, const char *targetfile);
-
-static unsigned char file_buffer_raw[COPY_BUFSIZE];
-/* 5 bytes per char + 3 bytes per line */
-static char file_buffer_c[COPY_BUFSIZE * 5 + ((COPY_BUFSIZE / HEX_BYTES_PER_LINE) * 3)];
-
-char curSubdir[MAX_PATH_LEN];
-char lastFileVar[MAX_PATH_LEN];
-char hdr_buf[4096];
-
-unsigned char processSubs = 1;
-unsigned char includeHttpHeader = 1;
-unsigned char useHttp11 = 0;
-unsigned char precalcChksum = 0;
-
-int main(int argc, char *argv[])
-{
-  FIND_T fInfo;
-  FIND_RET_T fret;
-  char path[MAX_PATH_LEN];
-  char appPath[MAX_PATH_LEN];
-  FILE *data_file;
-  FILE *struct_file;
-  int filesProcessed;
-  int i;
-  char targetfile[MAX_PATH_LEN];
-  strcpy(targetfile, "fsdata.c");
-
-  memset(path, 0, sizeof(path));
-  memset(appPath, 0, sizeof(appPath));
-
-  printf(NEWLINE " makefsdata - HTML to C source converter" NEWLINE);
-  printf("     by Jim Pettinato               - circa 2003 " NEWLINE);
-  printf("     extended by Simon Goldschmidt  - 2009 " NEWLINE NEWLINE);
-
-  strcpy(path, "fs");
-  for(i = 1; i < argc; i++) {
-    if (argv[i][0] == '-') {
-      if (strstr(argv[i], "-s")) {
-        processSubs = 0;
-      } else if (strstr(argv[i], "-e")) {
-        includeHttpHeader = 0;
-      } else if (strstr(argv[i], "-11")) {
-        useHttp11 = 1;
-      } else if (strstr(argv[i], "-c")) {
-        precalcChksum = 1;
-      } else if((argv[i][1] == 'f') && (argv[i][2] == ':')) {
-        strcpy(targetfile, &argv[i][3]);
-        printf("Writing to file \"%s\"\n", targetfile);
-      }
-    } else {
-      strcpy(path, argv[i]);
-    }
-  }
-
-  /* if command line param or subdir named 'fs' not found spout usage verbiage */
-  fret = FINDFIRST_DIR(path, &fInfo);
-  if (!FINDFIRST_SUCCEEDED(fret)) {
-    /* if no subdir named 'fs' (or the one which was given) exists, spout usage verbiage */
-    printf(" Failed to open directory \"%s\"." NEWLINE NEWLINE, path);
-    printf(" Usage: htmlgen [targetdir] [-s] [-i] [-f:<filename>]" NEWLINE NEWLINE);
-    printf("   targetdir: relative or absolute path to files to convert" NEWLINE);
-    printf("   switch -s: toggle processing of subdirectories (default is on)" NEWLINE);
-    printf("   switch -e: exclude HTTP header from file (header is created at runtime, default is off)" NEWLINE);
-    printf("   switch -11: include HTTP 1.1 header (1.0 is default)" NEWLINE);
-    printf("   switch -c: precalculate checksums for all pages (default is off)" NEWLINE);
-    printf("   switch -f: target filename (default is \"fsdata.c\")" NEWLINE);
-    printf("   if targetdir not specified, htmlgen will attempt to" NEWLINE);
-    printf("   process files in subdirectory 'fs'" NEWLINE);
-    exit(-1);
-  }
-
-  printf("HTTP %sheader will %s statically included." NEWLINE,
-    (includeHttpHeader ? (useHttp11 ? "1.1 " : "1.0 ") : ""),
-    (includeHttpHeader ? "be" : "not be"));
-
-  sprintf(curSubdir, "");  /* start off in web page's root directory - relative paths */
-  printf("  Processing all files in directory %s", path);
-  if (processSubs) {
-    printf(" and subdirectories..." NEWLINE NEWLINE);
-  } else {
-    printf("..." NEWLINE NEWLINE);
-  }
-
-  GETCWD(appPath, MAX_PATH_LEN);
-  data_file = fopen("fsdata.tmp", "wb");
-  if (data_file == NULL) {
-    printf("Failed to create file \"fsdata.tmp\"\n");
-    exit(-1);
-  }
-  struct_file = fopen("fshdr.tmp", "wb");
-  if (struct_file == NULL) {
-    printf("Failed to create file \"fshdr.tmp\"\n");
-    exit(-1);
-  }
-
-  CHDIR(path);
-
-  fprintf(data_file, "#include \"fs.h\"" NEWLINE);
-  fprintf(data_file, "#include \"lwip/def.h\"" NEWLINE);
-  fprintf(data_file, "#include \"fsdata.h\"" NEWLINE NEWLINE NEWLINE);
-
-  fprintf(data_file, "#define file_NULL (struct fsdata_file *) NULL" NEWLINE NEWLINE NEWLINE);
-
-  sprintf(lastFileVar, "NULL");
-
-  filesProcessed = process_sub(data_file, struct_file);
-
-  /* data_file now contains all of the raw data.. now append linked list of
-   * file header structs to allow embedded app to search for a file name */
-  fprintf(data_file, NEWLINE NEWLINE);
-  fprintf(struct_file, "#define FS_ROOT file_%s" NEWLINE, lastFileVar);
-  fprintf(struct_file, "#define FS_NUMFILES %d" NEWLINE NEWLINE, filesProcessed);
-
-  fclose(data_file);
-  fclose(struct_file);
-
-  CHDIR(appPath);
-  /* append struct_file to data_file */
-  printf(NEWLINE "Creating target file..." NEWLINE NEWLINE);
-  concat_files("fsdata.tmp", "fshdr.tmp", targetfile);
-
-  /* if succeeded, delete the temporary files */
-  remove("fsdata.tmp");
-  remove("fshdr.tmp"); 
-
-  printf(NEWLINE "Processed %d files - done." NEWLINE NEWLINE, filesProcessed);
-
-  return 0;
-}
-
-static void copy_file(const char *filename_in, FILE *fout)
-{
-  FILE *fin;
-  size_t len;
-  fin = fopen(filename_in, "rb");
-  if (fin == NULL) {
-    printf("Failed to open file \"%s\"\n", filename_in);
-    exit(-1);
-  }
-
-  while((len = fread(file_buffer_raw, 1, COPY_BUFSIZE, fin)) > 0)
-  {
-    fwrite(file_buffer_raw, 1, len, fout);
-  }
-  fclose(fin);
-}
-
-void concat_files(const char *file1, const char *file2, const char *targetfile)
-{
-  FILE *fout;
-  fout = fopen(targetfile, "wb");
-  if (fout == NULL) {
-    printf("Failed to open file \"%s\"\n", targetfile);
-    exit(-1);
-  }
-  copy_file(file1, fout);
-  copy_file(file2, fout);
-  fclose(fout);
-}
-
-int process_sub(FILE *data_file, FILE *struct_file)
-{
-  FIND_T fInfo;
-  FIND_RET_T fret;
-  int filesProcessed = 0;
-  char oldSubdir[MAX_PATH_LEN];
-
-  if (processSubs) {
-    /* process subs recursively */
-    strcpy(oldSubdir, curSubdir);
-    fret = FINDFIRST_DIR("*", &fInfo);
-    if (FINDFIRST_SUCCEEDED(fret)) {
-      do {
-        const char *curName = FIND_T_FILENAME(fInfo);
-        if (curName == NULL) continue;
-        if (curName[0] == '.') continue;
-        if (strcmp(curName, "CVS") == 0) continue;
-        if (!FIND_T_IS_DIR(fInfo)) continue;
-        CHDIR(curName);
-        strcat(curSubdir, "/");
-        strcat(curSubdir, curName);
-        printf(NEWLINE "processing subdirectory %s/..." NEWLINE, curSubdir);
-        filesProcessed += process_sub(data_file, struct_file);
-        CHDIR("..");
-        strcpy(curSubdir, oldSubdir);
-      } while (FINDNEXT_SUCCEEDED(FINDNEXT(fret, &fInfo)));
-    }
-  }
-
-  fret = FINDFIRST_FILE("*.*", &fInfo);
-  if (FINDFIRST_SUCCEEDED(fret)) {
-    /* at least one file in directory */
-    do {
-      if (FIND_T_IS_FILE(fInfo)) {
-        const char *curName = FIND_T_FILENAME(fInfo);
-        printf("processing %s/%s..." NEWLINE, curSubdir, curName);
-        if (process_file(data_file, struct_file, curName) < 0) {
-          printf(NEWLINE "Error... aborting" NEWLINE);
-          return -1;
-        }
-        filesProcessed++;
-      }
-    } while (FINDNEXT_SUCCEEDED(FINDNEXT(fret, &fInfo)));
-  }
-  return filesProcessed;
-}
-
-int get_file_size(const char* filename)
-{
-  FILE *inFile;
-  int file_size = -1;
-  inFile = fopen(filename, "rb");
-  if (inFile == NULL) {
-    printf("Failed to open file \"%s\"\n", filename);
-    exit(-1);
-  }
-  fseek(inFile, 0, SEEK_END);
-  file_size = ftell(inFile);
-  fclose(inFile);
-  return file_size;
-}
-
-void process_file_data(const char *filename, FILE *data_file)
-{
-  FILE *source_file;
-  size_t len, written, i, src_off=0;
-
-  source_file = fopen(filename, "rb");
-
-  do {
-    size_t off = 0;
-    len = fread(file_buffer_raw, 1, COPY_BUFSIZE, source_file);
-    if (len > 0) {
-      for (i = 0; i < len; i++) {
-        sprintf(&file_buffer_c[off], "0x%02.2x,", file_buffer_raw[i]);
-        off += 5;
-        if ((++src_off % HEX_BYTES_PER_LINE) == 0) {
-          memcpy(&file_buffer_c[off], NEWLINE, NEWLINE_LEN);
-          off += NEWLINE_LEN;
-        }
-      }
-      written = fwrite(file_buffer_c, 1, off, data_file);
-    }
-  } while(len > 0);
-  fclose(source_file);
-}
-
-int write_checksums(FILE *struct_file, const char *filename, const char *varname,
-                    u16_t hdr_len, u16_t hdr_chksum)
-{
-  int chunk_size = TCP_MSS;
-  int offset;
-  size_t len;
-  int i = 0;
-  FILE *f;
-#if LWIP_TCP_TIMESTAMPS
-  /* when timestamps are used, usable space is 12 bytes less per segment */
-  chunk_size -= 12;
-#endif
-
-  fprintf(struct_file, "#if HTTPD_PRECALCULATED_CHECKSUM" NEWLINE);
-  fprintf(struct_file, "const struct fsdata_chksum chksums_%s[] = {" NEWLINE, varname);
-
-  memset(file_buffer_raw, 0xab, sizeof(file_buffer_raw));
-  f = fopen(filename, "rb");
-  if (f == INVALID_HANDLE_VALUE) {
-    printf("Failed to open file \"%s\"\n", filename);
-    exit(-1);
-  }
-  if (hdr_len > 0) {
-    /* add checksum for HTTP header */
-    fprintf(struct_file, "{%d, 0x%04x, %d}," NEWLINE, 0, hdr_chksum, hdr_len);
-    i++;
-  }
-  for (offset = hdr_len; ; offset += len) {
-    unsigned short chksum;
-    len = fread(file_buffer_raw, 1, chunk_size, f);
-    if (len == 0) {
-      break;
-    }
-    chksum = ~inet_chksum(file_buffer_raw, (u16_t)len);
-    /* add checksum for data */
-    fprintf(struct_file, "{%d, 0x%04x, %d}," NEWLINE, offset, chksum, len);
-    i++;
-  }
-  fclose(f);
-  fprintf(struct_file, "};" NEWLINE);
-  fprintf(struct_file, "#endif /* HTTPD_PRECALCULATED_CHECKSUM */" NEWLINE);
-  return i;
-}
-
-int process_file(FILE *data_file, FILE *struct_file, const char *filename)
-{
-  char *pch;
-  char varname[MAX_PATH_LEN];
-  int i = 0;
-  char qualifiedName[MAX_PATH_LEN];
-  int file_size;
-  u16_t http_hdr_chksum = 0;
-  u16_t http_hdr_len = 0;
-  int chksum_count = 0;
-
-  /* create qualified name (TODO: prepend slash or not?) */
-  sprintf(qualifiedName,"%s/%s", curSubdir, filename);
-  /* create C variable name */
-  strcpy(varname, qualifiedName);
-  /* convert slashes & dots to underscores */
-  while ((pch = strpbrk(varname, "./\\")) != NULL) {
-    *pch = '_';
-  }
-#if ALIGN_PAYLOAD
-  /* to force even alignment of array */
-  fprintf(data_file, "static const " PAYLOAD_ALIGN_TYPE " dummy_align_%s = %d;" NEWLINE, varname, payload_alingment_dummy_counter++);
-#endif /* ALIGN_PAYLOAD */
-  fprintf(data_file, "static const unsigned char data_%s[] = {" NEWLINE, varname);
-  /* encode source file name (used by file system, not returned to browser) */
-  fprintf(data_file, "/* %s (%d chars) */" NEWLINE, qualifiedName, strlen(qualifiedName)+1);
-  file_put_ascii(data_file, qualifiedName, strlen(qualifiedName)+1, &i);
-#if ALIGN_PAYLOAD
-  /* pad to even number of bytes to assure payload is on aligned boundary */
-  while(i % PAYLOAD_ALIGNMENT != 0) {
-    fprintf(data_file, "0x%02.2x,", 0);
-    i++;
-  }
-#endif /* ALIGN_PAYLOAD */
-  fprintf(data_file, NEWLINE);
-
-  file_size = get_file_size(filename);
-  if (includeHttpHeader) {
-    file_write_http_header(data_file, filename, file_size, &http_hdr_len, &http_hdr_chksum);
-  }
-  if (precalcChksum) {
-    chksum_count = write_checksums(struct_file, filename, varname, http_hdr_len, http_hdr_chksum);
-  }
-
-  /* build declaration of struct fsdata_file in temp file */
-  fprintf(struct_file, "const struct fsdata_file file_%s[] = { {" NEWLINE, varname);
-  fprintf(struct_file, "file_%s," NEWLINE, lastFileVar);
-  fprintf(struct_file, "data_%s," NEWLINE, varname);
-  fprintf(struct_file, "data_%s + %d," NEWLINE, varname, i);
-  fprintf(struct_file, "sizeof(data_%s) - %d," NEWLINE, varname, i);
-  fprintf(struct_file, "%d," NEWLINE, includeHttpHeader);
-  if (precalcChksum) {
-    fprintf(struct_file, "#if HTTPD_PRECALCULATED_CHECKSUM" NEWLINE);
-    fprintf(struct_file, "%d, chksums_%s," NEWLINE, chksum_count, varname);
-    fprintf(struct_file, "#endif /* HTTPD_PRECALCULATED_CHECKSUM */" NEWLINE);
-  }
-  fprintf(struct_file, "}};" NEWLINE NEWLINE);
-  strcpy(lastFileVar, varname);
-
-  /* write actual file contents */
-  i = 0;
-  fprintf(data_file, NEWLINE "/* raw file data (%d bytes) */" NEWLINE, file_size);
-  process_file_data(filename, data_file);
-  fprintf(data_file, "};" NEWLINE NEWLINE);
-
-  return 0;
-}
-
-int file_write_http_header(FILE *data_file, const char *filename, int file_size,
-                           u16_t *http_hdr_len, u16_t *http_hdr_chksum)
-{
-  int i = 0;
-  int response_type = HTTP_HDR_OK;
-  int file_type = HTTP_HDR_DEFAULT_TYPE;
-  const char *cur_string;
-  size_t cur_len;
-  int written = 0;
-  size_t hdr_len = 0;
-  u16_t acc;
-  const char *file_ext;
-  int j;
-
-  memset(hdr_buf, 0, sizeof(hdr_buf));
-  
-  if (useHttp11) {
-    response_type = HTTP_HDR_OK_11;
-  }
-
-  fprintf(data_file, NEWLINE "/* HTTP header */");
-  if (strstr(filename, "404") == filename) {
-    response_type = HTTP_HDR_NOT_FOUND;
-    if (useHttp11) {
-      response_type = HTTP_HDR_NOT_FOUND_11;
-    }
-  } else if (strstr(filename, "400") == filename) {
-    response_type = HTTP_HDR_BAD_REQUEST;
-    if (useHttp11) {
-      response_type = HTTP_HDR_BAD_REQUEST_11;
-    }
-  } else if (strstr(filename, "501") == filename) {
-    response_type = HTTP_HDR_NOT_IMPL;
-    if (useHttp11) {
-      response_type = HTTP_HDR_NOT_IMPL_11;
-    }
-  }
-  cur_string = g_psHTTPHeaderStrings[response_type];
-  cur_len = strlen(cur_string);
-  fprintf(data_file, NEWLINE "/* \"%s\" (%d bytes) */" NEWLINE, cur_string, cur_len);
-  written += file_put_ascii(data_file, cur_string, cur_len, &i);
-  i = 0;
-  if (precalcChksum) {
-    memcpy(&hdr_buf[hdr_len], cur_string, cur_len);
-    hdr_len += cur_len;
-  }
-
-  cur_string = serverID;
-  cur_len = strlen(cur_string);
-  fprintf(data_file, NEWLINE "/* \"%s\" (%d bytes) */" NEWLINE, cur_string, cur_len);
-  written += file_put_ascii(data_file, cur_string, cur_len, &i);
-  i = 0;
-  if (precalcChksum) {
-    memcpy(&hdr_buf[hdr_len], cur_string, cur_len);
-    hdr_len += cur_len;
-  }
-
-  file_ext = filename;
-  while(strstr(file_ext, ".") != NULL) {
-    file_ext = strstr(file_ext, ".");
-    file_ext++;
-  }
-  if((file_ext == NULL) || (*file_ext == 0)) {
-    printf("failed to get extension for file \"%s\", using default.\n", filename);
-  } else {
-    for(j = 0; j < NUM_HTTP_HEADERS; j++) {
-      if(!strcmp(file_ext, g_psHTTPHeaders[j].extension)) {
-        file_type = g_psHTTPHeaders[j].headerIndex;
-        break;
-      }
-    }
-    if (j >= NUM_HTTP_HEADERS) {
-      printf("failed to get file type for extension \"%s\", using default.\n", file_ext);
-      file_type = HTTP_HDR_DEFAULT_TYPE;
-    }
-  }
-
-  if (useHttp11) {
-    char intbuf[MAX_PATH_LEN];
-    memset(intbuf, 0, sizeof(intbuf));
-
-    cur_string = g_psHTTPHeaderStrings[HTTP_HDR_CONTENT_LENGTH];
-    cur_len = strlen(cur_string);
-    fprintf(data_file, NEWLINE "/* \"%s%d\r\n\" (%d+ bytes) */" NEWLINE, cur_string, file_size, cur_len+2);
-    written += file_put_ascii(data_file, cur_string, cur_len, &i);
-    if (precalcChksum) {
-      memcpy(&hdr_buf[hdr_len], cur_string, cur_len);
-      hdr_len += cur_len;
-    }
-
-    _itoa(file_size, intbuf, 10);
-    strcat(intbuf, "\r\n");
-    cur_len = strlen(intbuf);
-    written += file_put_ascii(data_file, intbuf, cur_len, &i);
-    i = 0;
-    if (precalcChksum) {
-      memcpy(&hdr_buf[hdr_len], intbuf, cur_len);
-      hdr_len += cur_len;
-    }
-
-    cur_string = g_psHTTPHeaderStrings[HTTP_HDR_CONN_CLOSE];
-    cur_len = strlen(cur_string);
-    fprintf(data_file, NEWLINE "/* \"%s\" (%d bytes) */" NEWLINE, cur_string, cur_len);
-    written += file_put_ascii(data_file, cur_string, cur_len, &i);
-    i = 0;
-    if (precalcChksum) {
-      memcpy(&hdr_buf[hdr_len], cur_string, cur_len);
-      hdr_len += cur_len;
-    }
-  }
-
-  cur_string = g_psHTTPHeaderStrings[file_type];
-  cur_len = strlen(cur_string);
-  fprintf(data_file, NEWLINE "/* \"%s\" (%d bytes) */" NEWLINE, cur_string, cur_len);
-  written += file_put_ascii(data_file, cur_string, cur_len, &i);
-  i = 0;
-  if (precalcChksum) {
-    memcpy(&hdr_buf[hdr_len], cur_string, cur_len);
-    hdr_len += cur_len;
-
-    LWIP_ASSERT("hdr_len <= 0xffff", hdr_len <= 0xffff);
-    LWIP_ASSERT("strlen(hdr_buf) == hdr_len", strlen(hdr_buf) == hdr_len);
-    acc = ~inet_chksum(hdr_buf, (u16_t)hdr_len);
-    *http_hdr_len = (u16_t)hdr_len;
-    *http_hdr_chksum = acc;
-  }
-
-  return written;
-}
-
-int file_put_ascii(FILE *file, const char* ascii_string, int len, int *i)
-{
-  int x;
-  for(x = 0; x < len; x++) {
-    unsigned char cur = ascii_string[x];
-    fprintf(file, "0x%02.2x,", cur);
-    if ((++(*i) % HEX_BYTES_PER_LINE) == 0) {
-      fprintf(file, NEWLINE);
-    }
-  }
-  return len;
-}
-
-int s_put_ascii(char *buf, const char *ascii_string, int len, int *i)
-{
-  int x;
-  int idx = 0;
-  for(x = 0; x < len; x++) {
-    unsigned char cur = ascii_string[x];
-    sprintf(&buf[idx], "0x%02.2x,", cur);
-    idx += 5;
-    if ((++(*i) % HEX_BYTES_PER_LINE) == 0) {
-      sprintf(&buf[idx], NEWLINE);
-      idx += NEWLINE_LEN;
-    }
-  }
-  return len;
-}
diff --git a/FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/makefsdata/makefsdata.exe b/FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/makefsdata/makefsdata.exe
deleted file mode 100644 (file)
index 7d4271d..0000000
Binary files a/FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/makefsdata/makefsdata.exe and /dev/null differ
diff --git a/FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/makefsdata/stdafx.cpp b/FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/makefsdata/stdafx.cpp
deleted file mode 100644 (file)
index fbc3eae..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-// stdafx.cpp : source file that includes just the standard includes\r
-// MakeFSData_proj.pch will be the pre-compiled header\r
-// stdafx.obj will contain the pre-compiled type information\r
-\r
-#include "stdafx.h"\r
-\r
-// TODO: reference any additional headers you need in STDAFX.H\r
-// and not in this file\r
diff --git a/FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/makefsdata/stdafx.h b/FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/makefsdata/stdafx.h
deleted file mode 100644 (file)
index 47a0d02..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-// stdafx.h : include file for standard system include files,\r
-// or project specific include files that are used frequently, but\r
-// are changed infrequently\r
-//\r
-\r
-#pragma once\r
-\r
-#include "targetver.h"\r
-\r
-#include <stdio.h>\r
-#include <tchar.h>\r
-\r
-\r
-\r
-// TODO: reference additional headers your program requires here\r
diff --git a/FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/makefsdata/targetver.h b/FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/apps/httpserver_raw_from_lwIP_download/makefsdata/targetver.h
deleted file mode 100644 (file)
index 90e767b..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-#pragma once\r
-\r
-// Including SDKDDKVer.h defines the highest available Windows platform.\r
-\r
-// If you wish to build your application for a previous Windows platform, include WinSDKVer.h and\r
-// set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h.\r
-\r
-#include <SDKDDKVer.h>\r
diff --git a/FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/lwIP_Apps.c b/FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/lwIP_Apps.c
deleted file mode 100644 (file)
index 7dafcd4..0000000
+++ /dev/null
@@ -1,196 +0,0 @@
-/*\r
- * FreeRTOS Kernel V10.1.0\r
- * Copyright (C) 2018 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
-#include "FreeRTOS.h"\r
-#include "task.h"\r
-#include "semphr.h"\r
-\r
-/* lwIP core includes */\r
-#include "lwip/opt.h"\r
-#include "lwip/tcpip.h"\r
-\r
-/* applications includes */\r
-#include "apps/httpserver_raw_from_lwIP_download/httpd.h"\r
-\r
-/* include the port-dependent configuration */\r
-#include "lwipcfg_msvc.h"\r
-\r
-/* Dimensions the cTxBuffer array - which is itself used to hold replies from\r
-command line commands.  cTxBuffer is a shared buffer, so protected by the\r
-xTxBufferMutex mutex. */\r
-#define lwipappsTX_BUFFER_SIZE 1024\r
-\r
-/* The maximum time to block waiting to obtain the xTxBufferMutex to become\r
-available. */\r
-#define lwipappsMAX_TIME_TO_WAIT_FOR_TX_BUFFER_MS      ( 100 / portTICK_PERIOD_MS )\r
-\r
-/* Definitions of the various SSI callback functions within the pccSSITags\r
-array.  If pccSSITags is updated, then these definitions must also be updated. */\r
-#define ssiTASK_STATS_INDEX                    0\r
-#define ssiRUN_TIME_STATS_INDEX                1\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-/*\r
- * The function that implements the lwIP based sockets command interpreter\r
- * server.\r
- */\r
-extern void vBasicSocketsCommandInterpreterTask( void *pvParameters );\r
-\r
-/*\r
- * The SSI handler callback function passed to lwIP.\r
- */\r
-static unsigned short uslwIPAppsSSIHandler( int iIndex, char *pcBuffer, int iBufferLength );\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-/* The SSI strings that are embedded in the served html files.  If this array\r
-is changed, then the index position defined by the #defines such as\r
-ssiTASK_STATS_INDEX above must also be updated. */\r
-static const char *pccSSITags[] =\r
-{\r
-       "rtos_stats",\r
-       "run_stats"\r
-};\r
-\r
-/* Semaphore used to guard the Tx buffer. */\r
-static SemaphoreHandle_t xTxBufferMutex = NULL;\r
-\r
-/* The Tx buffer itself.  This is used to hold the text generated by the\r
-execution of command line commands, and (hopefully) the execution of\r
-server side include callbacks.  It is a shared buffer so protected by the\r
-xTxBufferMutex mutex.  pcLwipAppsBlockingGetTxBuffer() and\r
-vLwipAppsReleaseTxBuffer() are provided to obtain and release the\r
-xTxBufferMutex respectively.  pcLwipAppsBlockingGetTxBuffer() must be used with\r
-caution as it has the potential to block. */\r
-static signed char cTxBuffer[ lwipappsTX_BUFFER_SIZE ];\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-\r
-/* Called from the TCP/IP thread. */\r
-void lwIPAppsInit( void *pvArgument )\r
-{\r
-ip_addr_t xIPAddr, xNetMask, xGateway;\r
-extern err_t ethernetif_init( struct netif *xNetIf );\r
-static struct netif xNetIf;\r
-\r
-       ( void ) pvArgument;\r
-\r
-       /* Set up the network interface. */\r
-       ip_addr_set_zero( &xGateway );\r
-       ip_addr_set_zero( &xIPAddr );\r
-       ip_addr_set_zero( &xNetMask );\r
-\r
-       LWIP_PORT_INIT_GW(&xGateway);\r
-       LWIP_PORT_INIT_IPADDR(&xIPAddr);\r
-       LWIP_PORT_INIT_NETMASK(&xNetMask);\r
-       printf("Starting lwIP, local interface IP is %s\n", ip_ntoa(&xIPAddr));\r
-\r
-       netif_set_default( netif_add( &xNetIf, &xIPAddr, &xNetMask, &xGateway, NULL, ethernetif_init, tcpip_input ) );\r
-       netif_set_up( &xNetIf );\r
-\r
-       /* Install the server side include handler. */\r
-       http_set_ssi_handler( uslwIPAppsSSIHandler, pccSSITags, sizeof( pccSSITags ) / sizeof( char * ) );\r
-\r
-       /* Create the mutex used to ensure mutual exclusive access to the Tx\r
-       buffer. */\r
-       xTxBufferMutex = xSemaphoreCreateMutex();\r
-       configASSERT( xTxBufferMutex );\r
-\r
-       /* Create the httpd server from the standard lwIP code.  This demonstrates\r
-       use of the lwIP raw API. */\r
-       httpd_init();\r
-\r
-       /* Create the FreeRTOS defined basic command server.  This demonstrates use\r
-       of the lwIP sockets API. */\r
-       xTaskCreate( vBasicSocketsCommandInterpreterTask, "CmdInt", configMINIMAL_STACK_SIZE * 10, NULL, configMAX_PRIORITIES - 2, NULL );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static unsigned short uslwIPAppsSSIHandler( int iIndex, char *pcBuffer, int iBufferLength )\r
-{\r
-static unsigned int uiUpdateCount = 0;\r
-static char cUpdateString[ 200 ];\r
-extern char *pcMainGetTaskStatusMessage( void );\r
-\r
-       /* Unused parameter. */\r
-       ( void ) iBufferLength;\r
-\r
-       /* The SSI handler function that generates text depending on the index of\r
-       the SSI tag encountered. */\r
-\r
-       switch( iIndex )\r
-       {\r
-               case ssiTASK_STATS_INDEX :\r
-                       vTaskList( pcBuffer );\r
-                       break;\r
-\r
-               case ssiRUN_TIME_STATS_INDEX :\r
-                       vTaskGetRunTimeStats( pcBuffer );\r
-                       break;\r
-       }\r
-\r
-       /* Include a count of the number of times an SSI function has been executed\r
-       in the returned string. */\r
-       uiUpdateCount++;\r
-       sprintf( cUpdateString, "\r\n\r\n%u\r\nStatus - %s", uiUpdateCount, pcMainGetTaskStatusMessage() );\r
-       strcat( pcBuffer, cUpdateString );\r
-\r
-       return strlen( pcBuffer );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-signed char *pcLwipAppsBlockingGetTxBuffer( void )\r
-{\r
-signed char *pcReturn;\r
-\r
-       /* Attempt to obtain the semaphore that guards the Tx buffer. */\r
-       if( xSemaphoreTakeRecursive( xTxBufferMutex, lwipappsMAX_TIME_TO_WAIT_FOR_TX_BUFFER_MS ) == pdFAIL )\r
-       {\r
-               /* The semaphore could not be obtained before timing out. */\r
-               pcReturn = NULL;\r
-       }\r
-       else\r
-       {\r
-               /* The semaphore was obtained successfully.  Return a pointer to the\r
-               Tx buffer. */\r
-               pcReturn = cTxBuffer;\r
-       }\r
-\r
-       return pcReturn;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-void vLwipAppsReleaseTxBuffer( void )\r
-{\r
-       /* Finished with the Tx buffer.  Return the mutex. */\r
-       xSemaphoreGiveRecursive( xTxBufferMutex );\r
-}\r
-\r
-\r
-\r
diff --git a/FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/lwIP_Apps.h b/FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/lwIP_Apps.h
deleted file mode 100644 (file)
index 07b4d2a..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-/*\r
- * FreeRTOS Kernel V10.1.0\r
- * Copyright (C) 2018 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
-#ifndef LWIP_APPS_H\r
-#define LWIP_APPS_H\r
-\r
-/* Functions used to obtain and release exclusive access to the Tx buffer.  The\r
-Get function will block if the Tx buffer is not available - use with care! */\r
-signed char *pcLwipAppsBlockingGetTxBuffer( void );\r
-void vLwipAppsReleaseTxBuffer( void );\r
-\r
-#endif /* LWIP_APPS_H */\r
-\r
diff --git a/FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/lwipcfg_msvc.h b/FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/lwipcfg_msvc.h
deleted file mode 100644 (file)
index fa35c3c..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
- * Additional settings for the win32 port.
- * Copy this to lwipcfg_msvc.h and make the config changes you need.
- */
-
-/* configuration for this port */
-#define PPP_USERNAME  "Admin"
-#define PPP_PASSWORD  "pass"
-
-
-/** Define this to the GUID of the windows network adapter to use
- * or NOT define this if you want PACKET_LIB_ADAPTER_NR to be used */ 
-/*#define PACKET_LIB_ADAPTER_GUID       "00000000-0000-0000-0000-000000000000"*/
-/*#define PACKET_LIB_GET_ADAPTER_NETADDRESS(addr) IP4_ADDR((addr), 192,168,1,0)*/
-/*#define PACKET_LIB_QUIET*/
-
-#define LWIP_PORT_INIT_IPADDR(addr)   IP4_ADDR((addr), configIP_ADDR0,configIP_ADDR1,configIP_ADDR2,configIP_ADDR3)
-#define LWIP_PORT_INIT_GW(addr)       IP4_ADDR((addr), 192,168,0,3)
-#define LWIP_PORT_INIT_NETMASK(addr)  IP4_ADDR((addr), 255,255,255,0)
-
-/* remember to change this MAC address to suit your needs!
-   the last octet will be increased by netif->num for each netif */
-#define LWIP_MAC_ADDR_BASE            {0x00,0x01,0x02,0x03,0x04,0x05}
-
-/* configuration for applications */
-
-#define LWIP_CHARGEN_APP              0
-#define LWIP_DNS_APP                  0
-#define LWIP_HTTPD_APP                1
-/* Set this to 1 to use the netconn http server,
- * otherwise the raw api server will be used. */
-/*#define LWIP_HTTPD_APP_NETCONN     */
-#define LWIP_NETBIOS_APP              0
-#define LWIP_NETIO_APP                0
-#define LWIP_PING_APP                 0
-#define LWIP_RTP_APP                  0
-#define LWIP_SHELL_APP                0
-#define LWIP_SNTP_APP                 0
-#define LWIP_SOCKET_EXAMPLES_APP      0
-#define LWIP_TCPECHO_APP              0
-/* Set this to 1 to use the netconn tcpecho server,
- * otherwise the raw api server will be used. */
-/*#define LWIP_TCPECHO_APP_NETCONN   */
-#define LWIP_UDPECHO_APP              0
-
-
diff --git a/FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/lwipopts.h b/FreeRTOS/Demo/WIN32-MSVC-lwIP/lwIP_Apps/lwipopts.h
deleted file mode 100644 (file)
index fb6adcc..0000000
+++ /dev/null
@@ -1,302 +0,0 @@
-/*
- * Copyright (c) 2001-2003 Swedish Institute of Computer Science.
- * All rights reserved. 
- * 
- * Redistribution and use in source and binary forms, with or without modification, 
- * are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- *    this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- *    this list of conditions and the following disclaimer in the documentation
- *    and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission. 
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT 
- * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT 
- * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 
- * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY 
- * OF SUCH DAMAGE.
- *
- * This file is part of the lwIP TCP/IP stack.
- * 
- * Author: Adam Dunkels <adam@sics.se>
- *
- */
-#ifndef __LWIPOPTS_H__
-#define __LWIPOPTS_H__
-
-/* Functions used to obtain and release exclusive access to the Tx buffer.  The
-Get function will block if the Tx buffer is not available - use with care! */
-signed char *pcLwipBlockingGetTxBuffer( void );
-void vLwipAppsReleaseTxBuffer( void );
-
-
-/* SSI options. */
-#define TCPIP_THREAD_NAME              "tcpip"
-#define LWIP_HTTPD_MAX_TAG_NAME_LEN 20
-#define LWIP_HTTPD_MAX_TAG_INSERT_LEN 1024
-#define TCPIP_THREAD_PRIO configLWIP_TASK_PRIORITY
-#define TCPIP_THREAD_STACKSIZE configMINIMAL_STACK_SIZE * 3
-
-#define DEFAULT_TCP_RECVMBOX_SIZE 5
-#define DEFAULT_ACCEPTMBOX_SIZE 5
-#define TCPIP_MBOX_SIZE                                        10
-
-#define NO_SYS                                                 0
-#define LWIP_SOCKET                                            (NO_SYS==0)
-#define LWIP_NETCONN                           1
-
-#define LWIP_SNMP                                              0
-#define LWIP_IGMP                                              0
-#define LWIP_ICMP                                              1
-
-/* DNS is not going to be used as this is a simple local example. */
-#define LWIP_DNS                                               0
-
-#define LWIP_HAVE_LOOPIF                               0
-#define TCP_LISTEN_BACKLOG                             0
-#define LWIP_SO_RCVTIMEO                               1
-#define LWIP_SO_RCVBUF                                 1
-
-#ifdef LWIP_DEBUG
-
-#define LWIP_DBG_MIN_LEVEL         0
-#define PPP_DEBUG                  LWIP_DBG_ON
-#define MEM_DEBUG                  LWIP_DBG_ON
-#define MEMP_DEBUG                 LWIP_DBG_ON
-#define PBUF_DEBUG                 LWIP_DBG_ON
-#define API_LIB_DEBUG              LWIP_DBG_ON
-#define API_MSG_DEBUG              LWIP_DBG_ON
-#define TCPIP_DEBUG                LWIP_DBG_ON
-#define NETIF_DEBUG                LWIP_DBG_ON
-#define SOCKETS_DEBUG              LWIP_DBG_ON
-#define DNS_DEBUG                  LWIP_DBG_ON
-#define AUTOIP_DEBUG               LWIP_DBG_ON
-#define DHCP_DEBUG                 LWIP_DBG_ON
-#define IP_DEBUG                   LWIP_DBG_ON
-#define IP_REASS_DEBUG             LWIP_DBG_ON
-#define ICMP_DEBUG                 LWIP_DBG_ON
-#define IGMP_DEBUG                 LWIP_DBG_ON
-#define UDP_DEBUG                  LWIP_DBG_ON
-#define TCP_DEBUG                  LWIP_DBG_ON
-#define TCP_INPUT_DEBUG            LWIP_DBG_ON
-#define TCP_OUTPUT_DEBUG           LWIP_DBG_ON
-#define TCP_RTO_DEBUG              LWIP_DBG_ON
-#define TCP_CWND_DEBUG             LWIP_DBG_ON
-#define TCP_WND_DEBUG              LWIP_DBG_ON
-#define TCP_FR_DEBUG               LWIP_DBG_ON
-#define TCP_QLEN_DEBUG             LWIP_DBG_ON
-#define TCP_RST_DEBUG              LWIP_DBG_ON
-#endif
-
-#define LWIP_DBG_TYPES_ON         (LWIP_DBG_ON|LWIP_DBG_TRACE|LWIP_DBG_STATE|LWIP_DBG_FRESH|LWIP_DBG_HALT)
-
-
-
-/* ---------- Memory options ---------- */
-/* MEM_ALIGNMENT: should be set to the alignment of the CPU for which
-   lwIP is compiled. 4 byte alignment -> define MEM_ALIGNMENT to 4, 2
-   byte alignment -> define MEM_ALIGNMENT to 2. */
-/* MSVC port: intel processors don't need 4-byte alignment,
-   but are faster that way! */
-#define MEM_ALIGNMENT                  4
-
-/* MEM_SIZE: the size of the heap memory. If the application will send
-a lot of data that needs to be copied, this should be set high. */
-#define MEM_SIZE                               10240
-
-/* MEMP_NUM_PBUF: the number of memp struct pbufs. If the application
-   sends a lot of data out of ROM (or other static memory), this
-   should be set high. */
-#define MEMP_NUM_PBUF                  10
-
-/* MEMP_NUM_RAW_PCB: the number of UDP protocol control blocks. One
-   per active RAW "connection". */
-#define LWIP_RAW                               0
-#define MEMP_NUM_RAW_PCB               0
-
-/* MEMP_NUM_UDP_PCB: the number of UDP protocol control blocks. One
-   per active UDP "connection". */
-#define MEMP_NUM_UDP_PCB               2
-
-/* MEMP_NUM_TCP_PCB: the number of simulatenously active TCP
-   connections. */
-#define MEMP_NUM_TCP_PCB               30
-
-/* MEMP_NUM_TCP_PCB_LISTEN: the number of listening TCP
-   connections. */
-#define MEMP_NUM_TCP_PCB_LISTEN 2
-
-/* MEMP_NUM_TCP_SEG: the number of simultaneously queued TCP
-   segments. */
-#define MEMP_NUM_TCP_SEG               10
-
-/* MEMP_NUM_SYS_TIMEOUT: the number of simulateously active
-   timeouts. */
-#define MEMP_NUM_SYS_TIMEOUT   15
-
-/* The following four are used only with the sequential API and can be
-   set to 0 if the application only will use the raw API. */
-/* MEMP_NUM_NETBUF: the number of struct netbufs. */
-#define MEMP_NUM_NETBUF         0
-
-/* MEMP_NUM_NETCONN: the number of struct netconns. */
-#define MEMP_NUM_NETCONN        10
-
-/* MEMP_NUM_TCPIP_MSG_*: the number of struct tcpip_msg, which is used
-   for sequential API communication and incoming packets. Used in
-   src/api/tcpip.c. */
-#define MEMP_NUM_TCPIP_MSG_API   4
-#define MEMP_NUM_TCPIP_MSG_INPKT 4
-
-#define MEMP_NUM_ARP_QUEUE             5
-
-/* ---------- Pbuf options ---------- */
-/* PBUF_POOL_SIZE: the number of buffers in the pbuf pool. */
-#define PBUF_POOL_SIZE                 10
-
-/* PBUF_POOL_BUFSIZE: the size of each pbuf in the pbuf pool. */
-#define PBUF_POOL_BUFSIZE              375
-
-/* PBUF_LINK_HLEN: the number of bytes that should be allocated for a
-   link level header. */
-#define PBUF_LINK_HLEN                 16
-
-/** SYS_LIGHTWEIGHT_PROT
- * define SYS_LIGHTWEIGHT_PROT in lwipopts.h if you want inter-task protection
- * for certain critical regions during buffer allocation, deallocation and memory
- * allocation and deallocation.
- */
-#define SYS_LIGHTWEIGHT_PROT   (NO_SYS==0)
-
-
-/* ---------- TCP options ---------- */
-#define LWIP_TCP                               1
-#define TCP_TTL                                        255
-
-/* Controls if TCP should queue segments that arrive out of
-   order. Define to 0 if your device is low on memory. */
-#define TCP_QUEUE_OOSEQ                        1
-
-/* TCP Maximum segment size. */
-#define TCP_MSS                                        1460
-
-/* TCP sender buffer space (bytes). */
-#define TCP_SND_BUF                            ( TCP_MSS * 2 )
-
-/* TCP sender buffer space (pbufs). This must be at least = 2 *
-   TCP_SND_BUF/TCP_MSS for things to work. */
-#define TCP_SND_QUEUELEN               (4 * TCP_SND_BUF/TCP_MSS)
-
-/* TCP writable space (bytes). This must be less than or equal
-   to TCP_SND_BUF. It is the amount of space which must be
-   available in the tcp snd_buf for select to return writable */
-#define TCP_SNDLOWAT                   (TCP_SND_BUF/2)
-
-/* TCP receive window. */
-#define TCP_WND                                        ( PBUF_POOL_SIZE * PBUF_POOL_BUFSIZE )
-
-/* Maximum number of retransmissions of data segments. */
-#define TCP_MAXRTX                             12
-
-/* Maximum number of retransmissions of SYN segments. */
-#define TCP_SYNMAXRTX                  4
-
-
-/* ---------- ARP options ---------- */
-#define LWIP_ARP                               1
-#define ARP_TABLE_SIZE                 10
-#define ARP_QUEUEING                   1
-
-
-/* ---------- IP options ---------- */
-/* Define IP_FORWARD to 1 if you wish to have the ability to forward
-   IP packets across network interfaces. If you are going to run lwIP
-   on a device with only one network interface, define this to 0. */
-#define IP_FORWARD                             0
-
-/* IP reassembly and segmentation.These are orthogonal even
- * if they both deal with IP fragments */
-#define IP_REASSEMBLY                  0
-#define IP_REASS_MAX_PBUFS             10
-#define MEMP_NUM_REASSDATA             10
-#define IP_FRAG                                        0
-
-
-/* ---------- ICMP options ---------- */
-#define ICMP_TTL                               255
-
-
-/* ---------- DHCP options ---------- */
-/* Define LWIP_DHCP to 1 if you want DHCP configuration of
-   interfaces. */
-#define LWIP_DHCP                              0
-
-/* 1 if you want to do an ARP check on the offered address
-   (recommended). */
-#define DHCP_DOES_ARP_CHECK            (LWIP_DHCP)
-
-
-/* ---------- AUTOIP options ------- */
-#define LWIP_AUTOIP                            0
-#define LWIP_DHCP_AUTOIP_COOP  (LWIP_DHCP && LWIP_AUTOIP)
-
-
-/* ---------- UDP options ---------- */
-#define LWIP_UDP                               1
-#define LWIP_UDPLITE                   1
-#define UDP_TTL                                        255
-
-
-/* ---------- Statistics options ---------- */
-
-#define LWIP_STATS                             1
-#define LWIP_STATS_DISPLAY             0
-
-#if LWIP_STATS
-       #define LINK_STATS                              1
-       #define IP_STATS                                1
-       #define ICMP_STATS                              0
-       #define IGMP_STATS                              0
-       #define IPFRAG_STATS                    0
-       #define UDP_STATS                               1
-       #define TCP_STATS                               1
-       #define MEM_STATS                               1
-       #define MEMP_STATS                              1
-       #define PBUF_STATS                              1
-       #define SYS_STATS                               1
-#endif /* LWIP_STATS */
-
-
-/* ---------- PPP options ---------- */
-
-#define PPP_SUPPORT                     0        /* Set > 0 for PPP */
-
-#if PPP_SUPPORT
-
-       #define NUM_PPP                                 1         /* Max PPP sessions. */
-
-       /* Select modules to enable.  Ideally these would be set in the makefile but
-        * we're limited by the command line length so you need to modify the settings
-        * in this file.
-        */
-       #define PPPOE_SUPPORT                   1
-       #define PPPOS_SUPPORT                   1
-       #define PAP_SUPPORT                             1         /* Set > 0 for PAP. */
-       #define CHAP_SUPPORT                    1         /* Set > 0 for CHAP. */
-       #define MSCHAP_SUPPORT                  0         /* Set > 0 for MSCHAP (NOT FUNCTIONAL!) */
-       #define CBCP_SUPPORT                    0         /* Set > 0 for CBCP (NOT FUNCTIONAL!) */
-       #define CCP_SUPPORT                             0         /* Set > 0 for CCP (NOT FUNCTIONAL!) */
-       #define VJ_SUPPORT                              1         /* Set > 0 for VJ header compression. */
-       #define MD5_SUPPORT                             1         /* Set > 0 for MD5 (see also CHAP) */
-
-#endif /* PPP_SUPPORT */
-
-#endif /* __LWIPOPTS_H__ */
diff --git a/FreeRTOS/Demo/WIN32-MSVC-lwIP/main.c b/FreeRTOS/Demo/WIN32-MSVC-lwIP/main.c
deleted file mode 100644 (file)
index 8fc2a27..0000000
+++ /dev/null
@@ -1,336 +0,0 @@
-/*\r
- * FreeRTOS Kernel V10.1.0\r
- * Copyright (C) 2018 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
- *******************************************************************************\r
- * -NOTE- The Win32 port is a simulation (or is that emulation?) only!  Do not\r
- * expect to get real time behaviour from the Win32 port or this demo\r
- * application.  It is provided as a convenient development and demonstration\r
- * test bed only.  This was tested using Windows XP on a dual core laptop.\r
- *\r
- * - READ THE WEB DOCUMENTATION FOR THIS PORT FOR MORE INFORMATION ON USING IT -\r
- * - http://www.freertos.org/FreeRTOS-Windows-Simulator-Emulator-for-Visual-Studio-and-Eclipse-MingW.html\r
- * - Note that the above linked page describes the simulator environment.  It\r
- * - is not the correct page to view for information on using this lwIP demo.\r
- *******************************************************************************\r
- *\r
- * This project demonstrates use of the lwIP stack.  The lwIP raw API is\r
- * demonstrated by a simple http server that comes as part of the lwIP\r
- * distribution - and executes in the tcpip task.  The lwIP sockets API\r
- * is demonstrated by a simple command line interpreter interface, which\r
- * executes in its own task.\r
- *\r
- * Both the http and command line server can be used to view task stats, and\r
- * run time stats.  Task stats give a snapshot of the state of each task in\r
- * the system.  Run time stats show how much processing time has been allocated\r
- * to each task.  A few of the standard demo tasks are created, just to ensure\r
- * there is some data to be viewed.\r
- *\r
- * Finally, a check timer is created.  The check timer is a software timer that\r
- * inspects the few standard demo tasks that are created to ensure they are\r
- * executing as expected.  It maintains a status string that can be viewed on\r
- * the "task stats" page served by the web server.\r
- *\r
- * More information about this demo, including details of how to set up the\r
- * network interface, and the command line commands that are available, is\r
- * available on the documentation page for this demo on the\r
- * http://www.FreeRTOS.org web site.\r
- *\r
- */\r
-\r
-\r
-/* Standard includes. */\r
-#include <stdio.h>\r
-\r
-/* Kernel includes. */\r
-#include <FreeRTOS.h>\r
-#include "task.h"\r
-#include "timers.h"\r
-\r
-/* Standard demo includes. */\r
-#include "GenQTest.h"\r
-\r
-/* lwIP includes. */\r
-#include "lwip/tcpip.h"\r
-#include "lwIP_Apps.h"\r
-\r
-/* Utils includes. */\r
-#include "CommandInterpreter.h"\r
-\r
-/* Priorities at which the tasks are created. */\r
-#define mainGEN_QUEUE_TASK_PRIORITY    ( tskIDLE_PRIORITY )\r
-\r
-/* The period at which the check timer will expire, in ms, provided no errors\r
-have been reported by any of the standard demo tasks.  ms are converted to the\r
-equivalent in ticks using the portTICK_PERIOD_MS constant. */\r
-#define mainCHECK_TIMER_PERIOD_MS                      ( 3000UL / portTICK_PERIOD_MS )\r
-\r
-/* Check timer callback function. */\r
-static void prvCheckTimerCallback( TimerHandle_t xTimer );\r
-\r
-/* Defined in lwIPApps.c. */\r
-extern void lwIPAppsInit( void *pvArguments );\r
-\r
-/* Callbacks to handle the command line commands defined by the xTaskStats and\r
-xRunTimeStats command definitions respectively.  These functions are not\r
-necessarily reentrant!  They must be used from one task only - or at least by\r
-only one task at a time. */\r
-static portBASE_TYPE prvTaskStatsCommand( signed char *pcWriteBuffer, size_t xWriteBufferLen, const signed char * pcCommandString );\r
-static portBASE_TYPE prvRunTimeStatsCommand( signed char *pcWriteBuffer, size_t xWriteBufferLen, const signed char * pcCommandString );\r
-\r
-/* The string that latches the current demo status. */\r
-static char *pcStatusMessage = "All tasks running without error";\r
-\r
-/* Variables used in the creation of the run time stats time base.  Run time\r
-stats record how much time each task spends in the Running state. */\r
-long long llInitialRunTimeCounterValue = 0LL, llRunTimeStatsDivisor = 0LL;\r
-\r
-/* The check timer.  This uses prvCheckTimerCallback() as its callback\r
-function. */\r
-static TimerHandle_t xCheckTimer = NULL;\r
-\r
-/* Structure that defines the "run-time-stats" command line command. */\r
-static const xCommandLineInput xRunTimeStats =\r
-{\r
-       "run-time-stats",\r
-       "run-time-stats: Displays a table showing how much processing time each FreeRTOS task has used\r\n",\r
-       prvRunTimeStatsCommand,\r
-       0\r
-};\r
-\r
-/* Structure that defines the "task-stats" command line command. */\r
-static const xCommandLineInput xTaskStats =\r
-{\r
-       "task-stats",\r
-       "task-stats: Displays a table showing the state of each FreeRTOS task\r\n",\r
-       prvTaskStatsCommand,\r
-       0\r
-};\r
-\r
-/*-----------------------------------------------------------*/\r
-\r
-int main( void )\r
-{\r
-const unsigned long ulLongTime_ms = 1000UL;\r
-\r
-       /* This call creates the TCP/IP thread. */\r
-       tcpip_init( lwIPAppsInit, NULL );\r
-\r
-       /* Create and start the check timer, as described at the top of this file. */\r
-       xCheckTimer = xTimerCreate( "CheckTimer",/* A text name, purely to help debugging. */\r
-                                                               ( mainCHECK_TIMER_PERIOD_MS ),          /* The timer period, in this case 3000ms (3s). */\r
-                                                               pdTRUE,                                                         /* This is an auto-reload timer, so xAutoReload is set to pdTRUE. */\r
-                                                               ( void * ) 0,                                           /* The ID is not used, so can be set to anything. */\r
-                                                               prvCheckTimerCallback                           /* The callback function that inspects the status of all the other tasks. */\r
-                                                         );\r
-\r
-       /* Sanity check that the timer was created. */\r
-       configASSERT( xCheckTimer );\r
-\r
-       /* Start the check timer. */\r
-       xTimerStart( xCheckTimer, 0UL );\r
-\r
-       /* Create a few standard demo tasks, just so there are tasks running to\r
-       view on the web server and via the command line command interpreter. */\r
-       vStartGenericQueueTasks( mainGEN_QUEUE_TASK_PRIORITY );\r
-\r
-       /* Register two command line commands to show task stats and run time stats\r
-       respectively. */\r
-       xCmdIntRegisterCommand( &xTaskStats );\r
-       xCmdIntRegisterCommand( &xRunTimeStats );\r
-\r
-       /* Start the scheduler itself. */\r
-       vTaskStartScheduler();\r
-\r
-       /* This line should never be reached.  If it does execute then there was\r
-       insufficient FreeRTOS heap memory available for the idle and/or timer\r
-       tasks to be created. */\r
-       for( ;; )\r
-       {\r
-               Sleep( ulLongTime_ms );\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvCheckTimerCallback( TimerHandle_t xTimer )\r
-{\r
-       /* The parameter is not used in this case. */\r
-       ( void ) xTimer;\r
-\r
-       /* Check the standard demo tasks are running without error.   Latch the\r
-       latest reported error in the pcStatusMessage character pointer.  The latched\r
-       string can be viewed using the embedded web server and the command line\r
-       interpreter.  This project is really to demonstrate the lwIP stack - so very\r
-       few tasks are created - and those that are created are created purely so\r
-       there is something to view. */\r
-       if( xAreGenericQueueTasksStillRunning() != pdTRUE )\r
-       {\r
-               pcStatusMessage = "Error: The GenQueue test reported an error.";\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-void vApplicationIdleHook( void )\r
-{\r
-const unsigned long ulMSToSleep = 5;\r
-\r
-       /* Sleep to reduce CPU load, but don't sleep indefinitely in case there are\r
-       tasks waiting to be terminated by the idle task. */\r
-       Sleep( ulMSToSleep );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-void vApplicationMallocFailedHook( void )\r
-{\r
-const unsigned long ulLongSleep = 1000UL;\r
-\r
-       /* Can be implemented if required, but probably not required in this\r
-       environment and running this demo. */\r
-       taskDISABLE_INTERRUPTS();\r
-       for( ;; )\r
-       {\r
-               Sleep( ulLongSleep );\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-void vApplicationStackOverflowHook( void )\r
-{\r
-const unsigned long ulLongSleep = 1000UL;\r
-\r
-       /* Can be implemented if required, but probably not required in this\r
-       environment and running this demo. */\r
-       taskDISABLE_INTERRUPTS();\r
-       for( ;; )\r
-       {\r
-               Sleep( ulLongSleep );\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-void vAssertCalled( void )\r
-{\r
-const unsigned long ulLongSleep = 1000UL;\r
-\r
-       taskDISABLE_INTERRUPTS();\r
-       for( ;; )\r
-       {\r
-               Sleep( ulLongSleep );\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-char *pcMainGetTaskStatusMessage( void )\r
-{\r
-       return pcStatusMessage;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-void vMainConfigureTimerForRunTimeStats( void )\r
-{\r
-LARGE_INTEGER liPerformanceCounterFrequency, liInitialRunTimeValue;\r
-\r
-       /* Initialise the variables used to create the run time stats time base.\r
-       Run time stats record how much time each task spends in the Running\r
-       state. */\r
-\r
-       if( QueryPerformanceFrequency( &liPerformanceCounterFrequency ) == 0 )\r
-       {\r
-               llRunTimeStatsDivisor = 1;\r
-       }\r
-       else\r
-       {\r
-               /* How many times does the performance counter increment in 10ms? */\r
-               llRunTimeStatsDivisor = liPerformanceCounterFrequency.QuadPart / 1000LL;\r
-\r
-               /* What is the performance counter value now, this will be subtracted\r
-               from readings taken at run time. */\r
-               QueryPerformanceCounter( &liInitialRunTimeValue );\r
-               llInitialRunTimeCounterValue = liInitialRunTimeValue.QuadPart;\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-unsigned long ulMainGetRunTimeCounterValue( void )\r
-{\r
-LARGE_INTEGER liCurrentCount;\r
-unsigned long ulReturn;\r
-\r
-       /* What is the performance counter value now? */\r
-       QueryPerformanceCounter( &liCurrentCount );\r
-\r
-       /* Subtract the performance counter value reading taken when the\r
-       application started to get a count from that reference point, then\r
-       scale to a 32 bit number. */\r
-       ulReturn = ( unsigned long ) ( ( liCurrentCount.QuadPart - llInitialRunTimeCounterValue ) / llRunTimeStatsDivisor );\r
-\r
-       return ulReturn;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static portBASE_TYPE prvTaskStatsCommand( signed char *pcWriteBuffer, size_t xWriteBufferLen, const signed char * pcCommandString )\r
-{\r
-const char *const pcHeader = "Task          State  Priority  Stack     #\r\n************************************************\r\n";\r
-\r
-       configASSERT( pcWriteBuffer );\r
-\r
-       /* This function assumes the buffer length is adequate and does not look\r
-       for parameters. */\r
-       ( void ) xWriteBufferLen;\r
-       ( void ) pcCommandString;\r
-\r
-       /* Generate a table of task stats. */\r
-       strcpy( pcWriteBuffer, pcHeader );\r
-       vTaskList( pcWriteBuffer + strlen( pcHeader ) );\r
-\r
-       /* There is no more data to return after this single string, so return\r
-       pdFALSE. */\r
-       return pdFALSE;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static portBASE_TYPE prvRunTimeStatsCommand( signed char *pcWriteBuffer, size_t xWriteBufferLen, const signed char * pcCommandString )\r
-{\r
-const char * const pcHeader = "Task            Abs Time      % Time\r\n****************************************\r\n";\r
-\r
-       configASSERT( pcWriteBuffer );\r
-\r
-       /* This function assumes the buffer length is adequate and does not look\r
-       for parameters. */\r
-       ( void ) xWriteBufferLen;\r
-       ( void ) pcCommandString;\r
-\r
-       /* Generate a table of task stats. */\r
-       strcpy( pcWriteBuffer, pcHeader );\r
-       vTaskGetRunTimeStats( ( char * ) pcWriteBuffer + strlen( pcHeader ) );\r
-\r
-       /* There is no more data to return after this single string, so return\r
-       pdFALSE. */\r
-       return pdFALSE;\r
-}\r
-\r
-\r
index 2dca61617bfaf59be28b5301c14e7ddfc7d52a88..ff78188fdc855c9b4e7f9414f15463d9f9b078a6 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d9b7a593dcaf560f16f5d02f6b35199145b55475..bda52a958ae7d7ba7bbdfc200a000573e5d3705e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index ee8219744999c866d763cad852b4b2da58a90fb4..c26b641dd221908f4958fd210afd99f30a34c677 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e9ef5fb307bde514fb3d35644ef24aa9025c1173..c23eeeb241ddef7dc5a2fc34b8ae7f9693375553 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index fddd40303bbf4b528daef36a5da5519ada688845..a73e6459e6e79943181893e5465be3e29ed2ba71 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d02fb1668b58c0ef7b2de0709f2f6a532b608950..2fddfe251ea7b1b09845dacf5d9d057dd205ee73 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 076c72c62514ceebade4daa5758cd742acfc3e83..3daa2ccbb6c6befc125db33fbe45c63904ad74d2 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index bab4ce6ebaf79060c3505a962303b3804769d512..44848e823e7dce9b0dd36401cb1ced66af8048b9 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 82ae7d4c60d7961a59ff104d28b74d224018590e..97d30a96c4b32ba602ba6624cbe31977f8f6f355 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 2ccf29ac715c111a7c5bead7c69b0e7675df8973..bd136f6287dba4734acfed82162fe20c322c858a 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 5b91bfe752dcfc9a8cea154a7b5b81dfe0f2a378..4d3c60ddb5dad3ebfd0eb883f16c754558ec5b21 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d444d51e0f6087647070407b39375407a248a9f6..e24aacb474aa47b86c62a0cabc9e20c33d1067ec 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 506ea089905bf5a79ffb237f3e82e29d60113fe8..d29471f51f1a4250631101506c99395a26777a17 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 6e19c2fda129caf91ca6558045abafd4f18258bf..6a09ec907f15ec842bc3497873f4874b6b422690 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c7d384f54bae835db535b84bdf75d50cf128efe6..027a505cfedcd7d53db4a0a2764aa536290c072d 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 19b1933092f59fae82cbd574faa7e516c1d2f446..9f863a1c4e8f43849427dc22a2db81560d1c71f7 100644 (file)
@@ -1,6 +1,6 @@
 #/*\r
-# * FreeRTOS Kernel V10.2.1\r
-# * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+# * FreeRTOS Kernel V10.3.0\r
+# * Copyright (C) 2020 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
index 6f46e875d572c408cc62639c5261a8a66177c4f3..06feb7956ad0be4d56f686591eab9eac4fede407 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 3f4112044afa39d450d980405690ec9b876ee73d..be98287c450216de1886a5be95fae693b3b97607 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 055b8bc0214c04dccdfa63dac01702a2defc1ca3..05e2fcbee3abb9f66bff8fced0da857b369ee877 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 458c4e43070866125e75d287c1897690e3dad140..5ec7ddb0daad08c0df9ca011af33f9ad6a2d639e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index bfcb4ab2c1ebc2ad21be447b7e525406b614aaf0..395b73dc184d6837ed189649484430ff491a7ffe 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index ead034353b8e48d60c6e0943b56ff61a83814b1e..733e3ad6358cdb9f0fd3f9a92637f349891cf764 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 7bcc85ce319e97cfd21662b3da0f85c43a6000e2..9b28354d80ea02bcafaaadde2460214b0106bace 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 8f53f9f218d76c7e2b7cbef6c1520d9e93d1b84f..a9d9a216872dd4dacdd9b328b8a1c766fa386129 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 1acb0ad37f7d3731006b8b2fa37b22821ec1a14f..b91f4b7fefe316f7392001a830dd12faa9d6c7c5 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 1183466e87fda5cf882f34e883e563b636d128de..eb9a1fa4042b1858eb531f7293c367a22a5dac24 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 92ed408de0652f3435ff86694f8ca427b2c569b0..097e6f3eecc29cfcce5e5a5bb37d013dfff7b612 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index a856fb7bf96577ad85f3239db5704619eff2e53f..5ad3c8987e48bc0ba663db48672f9ab0ed093630 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e0fabd6ee648016c25c8edec7120260aa5398d5c..0b22bff2af5af87dbaf04d7ae4f0c418a67ad482 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 766baaf151288c2c19dc7a6d501db917f8e8170d..48517a775913d1a151c2feedc22123f7134e709c 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 04ecf28325508da697ae566eab1cd0762c74bea7..cb4720cd00ebbb5ab2d504bf879ecacb534e0878 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f9267b45433fe615ce6b8bd41b69274142ab5d4b..21a431ae0d90fa2569e42d5318abc4f1319c5fa9 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 99a5379628fe36daee85ef3ba7bd179cb62735f0..ace730eff306637cc003fb343c2d4f41fa6b6b78 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 4626064684051e5bfd9ff11aa2ae270961770c94..0b269766cacc10a0797589155bb1e4a8368bb204 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 6d1d4646c2979a530b0ef97e6e8e7d3bbb10a423..c63482f6a959f7b48d0ae911a86f47e623f9f6b9 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 5fa0950ebe58c5624e50de2d1d7d1d22b321cb80..8b49715fa51ee6da566ab947504d6b085bbb9fde 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 98ffa08ebbcfe51e401bb09287897ac3ae47ae92..f552114d7b9c96742c6b84cf9c819defc87cb591 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 1ca5dfccf8fc71348f0487013397cb8977135d00..767ee0654e3e74ff5f778ebcdcde69d6a6f317e4 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index de921ce7915d6322d597ead5f5d712a8f18ce5d5..70e04d5b0072f558740e1dce6683dfe5104a69db 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 64aa90d9401fc59ecc6da832b95d1918d70d930b..e8142d8e436f26713d0f41c7bd502cc8e1da94e3 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 3f88d789b7c7ae04632cf8705a1602b19193114f..f5751f5fd80c111ef82a4c8b8aebebecf316a1e8 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 1967c0d66de50e4ca226d47c5477bd0066f36aa4..1451f9bae0674ffc197d0f99f9e2f49ac85eff7a 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index bc104d0966658efe8423f58e6acab6798ceb6cc4..b7e371fca6dc45ff540435c6ca8243fa0ac9b379 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f3b7ecbc23ed396e5afba88129fd363075416227..f9e159e6eb0fd8eb396555ad888d79190a570916 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d2ada04994f981bf538d52ee4d12df0bca1f1174..e5831f830a35d6b27f99343e8445b1af8e363e0d 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index fe70c0201a43eaeda70c49553f160e9829d0e9e8..60d626035b22b907b12e3f976a5c1ec36f9e7608 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 2f904d36a48c875e47c345cd6b6ca767d1206ed0..72ecda855b9f33020d405d5ffbce0a19fad4925a 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 969930a0546f3eb59e3e85892094a8283256ea77..3ec9b9e98074ae477484e178d673062d7a3db360 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 1479acd3c68b1eb30a19140808c5313f3ba8b5dd..e73fa9be535c27cef7540cd5d9648926ad43559e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 2c4858cc3dd4d3a7b011b31c145613ca67adc5ec..6e77d57b34b4539a7a2ded29aac620556e3cd093 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c4d2972f310c212d5003646af850f226d6d5a5e1..a75362f2b5ff1e1af3cf8acc8f686b138be2fbf4 100644 (file)
@@ -1,6 +1,6 @@
 #/*\r
-# * FreeRTOS Kernel V10.2.1\r
-# * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+# * FreeRTOS Kernel V10.3.0\r
+# * Copyright (C) 2020 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
index 9287f5cbcb192e348f7b3be63cc01ada2e32bd1a..a9cf9f64bed8722991b96b6b4ebebc32d64e0b96 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 564829dd70ff947d51e438a735d7ff2bde4add8c..5feaaae2793a0d87391b5634cc12c8e61204f8c9 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index a27d2c731bd75d5670a2af283073d183181dd50a..e3d4743d9748bfcafba9920eb8781c7b4686e04c 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c2cdb7b648704462ede631832470ad0f27db06a7..e90aee7ab88e88250c8e33f27fd8894111ad54f5 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index fa6c7dbdb482263c77944da54d8c9d33ba54906c..b7417e4efaf41ad8707b80e7543afdcb45d8b821 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 0496120dfee77a0da6fa3060710912c0c30f7dce..db601dd60d09b115779dfe447832695fea73d8e5 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c8848a290de6b88dfbc44a4abe875d2af6c8dedc..16b318acd4be44408b1587355bf68279c4a6d24b 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index bed2fe183c6694e3995aaebbdf0cb51005b6b70d..5567c593b8ac4c581fc421b2ede360308cb51183 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index eed65e8c08b7723bf2108c1215cfa33b07571839..7351116f592e4df7119a0c63d8ca33187e4f3e09 100644 (file)
@@ -1,6 +1,6 @@
 #/*\r
-# * FreeRTOS Kernel V10.2.1\r
-# * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+# * FreeRTOS Kernel V10.3.0\r
+# * Copyright (C) 2020 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
index 81796b329411ecf51d76536afba324d53136b4fc..5029ca282578261e0dc2af40daab04d7fbd44bd2 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index edab55cae3ea3badff71f9034a79f60cb46574ef..53af8809a348c71b01946dbddd7aa454acf97f7e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 564829dd70ff947d51e438a735d7ff2bde4add8c..5feaaae2793a0d87391b5634cc12c8e61204f8c9 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 6c3510593c4a52a0cb778010aaf9f56e7f9778ba..41efa05636c422b13eccd02f82c566f84cab260c 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 32867fccb697e3733f153169860b43089c611e27..e65cf0b5f5661a75d2d2c950ab60000a74eead69 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 871e47d18d35d1d3d5b16c67b1ef02573a4a1f41..8c0214acfe54a970e67408b687fd3e656f33be74 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 3a22164f5ccf0b4d8ed15bd0e393560cb74dc70d..566db43d7373d05b00beef86cefef15f532a022b 100644 (file)
@@ -1,47 +1,55 @@
 Documentation and download available at http://www.FreeRTOS.org/\r
 \r
-Changes since the last release:\r
-       + Added xTaskCatchUpTicks() which corrects the tick count value after the\r
-         application code has held interrupts disabled for an extended period.\r
-       + Updated the xTaskResumeAll() implementation so it uses the new\r
-         xTaskCatchUpTicks() function mentioned above to unwind ticks that were\r
-         pended while the scheduler was suspended.\r
+Changes between FreeRTOS V10.2.1 and FreeRTOS V10.3.0 released TBD\r
+\r
+       See http://www.FreeRTOS.org/FreeRTOS-V10.3.x.html\r
+\r
+       New and updated kernel ports:\r
+\r
+       + Added RISC-V port for the IAR compiler.\r
        + Update the Windows simulator port to use a synchronous object to prevent\r
          a user reported error whereby a task continues to run for a short time\r
          after being moved to the Blocked state.  Note we were not able to\r
-         replicate the reported error.\r
-       + Added the vPortGetHeapStats() API function which returns information on\r
-         the heap_4 and heap_5 state.\r
-       + Change type of uxPendedTicks from UBaseType_t to TickType_t to ensure it\r
-         has same type as variables it is compared to, and therefore also rename\r
-         the variable xPendingTicks.\r
+         replicate the reported issue and it likely depends on your CPU model.\r
        + Correct alignment of stack top in RISC-V port when\r
-         configISR_STACK_SIZE_WORDS is defined to a non zero value.\r
-       + RISC-V port updates:  The machine timer compare register can now be for\r
-         any HART, and correct the sequence used to update the 64-bit machine timer\r
-         compare register on 32-bit cores.\r
-       + Update Keil projects that use the MPU so memory regions come from linker\r
-         script (scatter file) variables instead of being hard coded.\r
+         configISR_STACK_SIZE_WORDS is defined to a non zero value, which causes\r
+         the interrupt stack to be statically allocated.\r
+       + The RISC-V machine timer compare register can now be for any HART, whereas\r
+         previously it was always assumed FreeRTOS was running on HART 0.\r
+       + Update the sequence used to update the 64-bit machine timer\r
+         compare register on 32-bit cores to match that suggested in RISC-V\r
+         documentation.\r
        + Added tickless low power modes into the ARM, IAR and GCC Cortex-M0 compiler\r
          ports.\r
        + Updated the behaviour of the ARMv7-M MPU (Memory Protection Unit) ports to\r
          match that of the ARMv8-M ports whereby privilege escalations can only\r
          originate from within the kernel's own memory segment.  Added\r
          configENFORCE_SYSTEM_CALLS_FROM_KERNEL_ONLY configuration constant.\r
-       +  Update existing MPU ports to correctly disable the MPU before it is\r
-          updated.\r
-       + Added LPC51U68 Cortex-M0+ port for GCC (MCUXpresso), Keil and IAR\r
+       + Update existing MPU ports to correctly disable the MPU before it is\r
+         updated.\r
+       + Added contributed port and demo application for a T-Head (formally C-SKY)\r
+         microcontroller.\r
+\r
+       New API functions:\r
+\r
+       + Added the vPortGetHeapStats() API function which returns information on\r
+         the heap_4 and heap_5 state.\r
+       + Added xTaskCatchUpTicks(), which corrects the tick count value after the\r
+         application code has held interrupts disabled for an extended period.\r
+       + Added xTaskNotifyValueClear() API function.\r
+       + Added uxTimerGetReloadMode() API function.\r
+\r
+       Other miscellaneous changes:\r
+       + Change type of uxPendedTicks from UBaseType_t to TickType_t to ensure it\r
+         has the same type as variables with which it is compared to, and therefore\r
+         also renamed the variable xPendingTicks.\r
+       + Update Keil projects that use the MPU so memory regions come from linker\r
+         script (scatter file) variables instead of being hard coded.\r
+       + Added LPC51U68 Cortex-M0+ demos for GCC (MCUXpresso), Keil and IAR\r
          compilers.\r
        + Added CORTEX_MPU_STM32L4_Discovery_Keil_STM32Cube demo.\r
-       + Added xTaskNotifyValueClear() API function.\r
-       + Improve timing accuracy (reduce clock slippage when compared to real time)\r
-         in the Windows simulator port by using a waitable timer to determine the\r
-         next time slice in place of calls to sleep().\r
-       + Added T-Head demo.\r
        + Added LPC54018 MPU demo.\r
-       + Added uxTimerGetReloadMode() API function.\r
        + Rename xTaskGetIdleRunTimeCounter() to ulTaskGetIdleRunTimeCounter().\r
-       + Added RISC-V port for IAR compiler.\r
 \r
 \r
 Changes between FreeRTOS V10.2.1 and FreeRTOS V10.2.0 released May 13 2019:\r
index 9c59050c5d8fef23900d3c03452e8f4b2d2f5145..4b899b24a9fd5b9b888de3154f67516721d55041 100644 (file)
@@ -17,7 +17,7 @@ source file.
 License text:\r
 -------------\r
 \r
-Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+Copyright (C) 2020 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\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
index 565691b4913185f914c94f26047fb666b0aad245..69bf614abcff86e645a5982778cef5d1f72feda9 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 81c1965f92e6e24f4b8c8bccd8abec31dcc1c33d..03cef5bd3bbf86f878116039406db2299866497e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 4df39db39cbf4db6a969c7fa9b1e409cab332d47..a621f8a3b369c0f11a0a7f238b812fbf89a04867 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 000d8665c88e99997f216d5f25408bb370492290..63efd4d46a7e85c524ca7c78b1ee7782257e0976 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e0d0af3a4f38922c0c06fafd1be47ef2e87500f3..d6009f6756082a1fbf2929c638ae3ad9e4c0209e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 97366e1a3f9ca675a8904225c0c1fa3cc93ebaaf..9bdf8a08f49bf5bf740737c403d079d255409bc0 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 4d0ce01137fe270ab33ee2418b640439047684d9..e5cb48478b3629a19c647e4d0128adbba8783c82 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 522b0b6c6bb3de6699fe26b1750fee89801b15a4..70989b0e41053df771145eb62c2ac1e290fbe04e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f6b66baef2afb803dd7bc1c25c41a0423b9de2e5..51322f216dba286ad3a1c001cbe6efce756d4a9d 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 745f0b6135fa12dae51f1acb1d16c75cfe9ed7af..9923b330bf377f99a88efc614557acc8343507ad 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c1fd2b01123c1d3c508f8eb3a50e84b1bebbd904..ca876326936f0db1f467f6afcf0fb899a8d01e4c 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index b131042adbb99a8e0117244e3d72a5aa9094a5a4..55a0ba333870b1ea1dadac82ff1bf3d68814308a 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d2baf14a4cfe9c0937c2bd5c58843fd25e0a4e30..a9cb726dc30902353845886ce5d878cd6b5520ad 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index dbcf9bb463d7b5ff89c3ed85129c35c2285b2187..19a6b8f3e6f4d04827a1fe9bbae543395ea42f9a 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index b8b6f028ffdf5957d19886b101700949aeeec189..a0439c5204014a5e74e3e109e01a74bc7e13d7b0 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 32b4e5ec091d28ef092a4d474d4877f5ba757067..0f01948c7569710fac8b24f46e0773ab3265b1ab 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index fb5ed155c3605c88d582c78c9515fd4201f6fe54..4f6f5cac52470793e6d8bcf70771526e5d402a88 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 72fa2d33a789e50a87a95df35ac94034ea7f15e9..50c782ae5de99c8c3ddadaaedb626a3e0a6505f2 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 1ee178ad97037cabe7e230a0276f1e64a92eb1dc..286c5f221252c431a73f0b3ef6474a3d073e8119 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 831f389ee78070f6ad597b3b27a922d799c1c916..91483846792ed3e93f795e5cb7628ba6379d1393 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 9875b90c93fe83aedfb559f4e9c5935dfa2f16b5..86b3eced2e14195cbe7868568b3c5d81b706d484 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e99c1b1e671b0c9611f45bcaeb0300b09537642d..dbe7f06a468383d2eef890a7fb4b71ca0a5c40d7 100644 (file)
@@ -1,6 +1,6 @@
 #/*\r
-# * FreeRTOS Kernel V10.2.1\r
-# * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+# * FreeRTOS Kernel V10.3.0\r
+# * Copyright (C) 2020 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
index 6ffab561ff8ea320abbb1c3839b38e2cc4e649e7..108eb52dcc80efd90ce0925cf5d2d0d10161b4ed 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f94dcd3476a905da5a359e2fb9d13708e22c7afa..97ce87f94f360f405da7c613b6f0daaab515312a 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index a7357013763b4ad29e34d42b2a1ac9f5d5e7db08..ace80ee88af82f819888ff2c393129cec0dd68bc 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 8dee923e3a757d87e23dc1d403bf06cc73987336..e05e5942d553885b6e136c469bb633c2fc0aaee7 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index a7357013763b4ad29e34d42b2a1ac9f5d5e7db08..ace80ee88af82f819888ff2c393129cec0dd68bc 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 2aadacc799b839366e36c713ad047ed894093d81..ea216bde578c9da2a41d777787aeeb26dbfe4ab6 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 5ac934cd80d88d107619796d4e75665eec56b36b..0280956f9bdf8038658ea5e668bd55bdd09fd466 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index dc5179fb3502a7eb7eef59a003668aa79f09ae60..2a9f21483cb634f4337a3119d2222ee2aaafad30 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c582ecfb361b7f75b92acb37b2e6121796e88aff..9a7ed8b42adadf20976897a7ceac52eec39e6ef7 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 8ac94fd33157327f1d119723362ab76cedc0dfef..3565ccf42717ff0c2b83e2a5705d468a16ff48ee 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 14cb37f863b108bb047e21cb9a0c2fe60971fc67..17e5a6941ca90b947fba42cae5f79151bbd8ff8e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d6a8cb844981a2905f617a943a697d01fd78243c..5a6377a032e10ad1bde682464c4a3a7bc4720e2c 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 14cb37f863b108bb047e21cb9a0c2fe60971fc67..17e5a6941ca90b947fba42cae5f79151bbd8ff8e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e3b590be98207b3bd000f7cd624dff81d33afb64..2514d8ae7be88cf5b4545b16ad9d845c54f0fbab 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c5fb74b6dd032ee12b8ebb3d041af33d52600ab3..04d1cd628c71e2cfdbfeec4544b117383ffb7bc1 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index aa65b946f5601a793c159a0643f1332bb27d683a..2a7529d115e23f37707d27f1285831d7577c7d4d 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c5fb74b6dd032ee12b8ebb3d041af33d52600ab3..04d1cd628c71e2cfdbfeec4544b117383ffb7bc1 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 8fc58eab26ecfb050291512edfe90e3f27a98511..cc2562f279679e7d4f6394266f87c1870830eef4 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 4e63dd36bb16628496b087bf8ebe42133232398e..71db598ae24d88159cc7fd52f7b80d169f81348e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 245adff796cfe040909501e94e1e2b3773b91f4e..8d9c8c6c682a6aa3e63b03d758c765ab0c472e4f 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 6df620d5f67b809dcddf354a5a5bcd7cc1f57ea4..4ef68b78a222b0e484e21c1eab12ce8a486bd8fe 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 947e70adf70503b40acab50ef65239d5eb23c8ff..669b5b0b2c0f54a4c91fc4603d7d760e87b5e005 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 6df620d5f67b809dcddf354a5a5bcd7cc1f57ea4..4ef68b78a222b0e484e21c1eab12ce8a486bd8fe 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 759a21fa8eb97c3a63a4b3bc233ec4ddab2c8189..a27e5d4df028bbee04c4739109ab9ae59124032e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 8a422309c0d45bcb45f07da4c05fec3fc51b3df6..586e1339f13d3d521d0029a6c6a01f8577535b5c 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index a98a7d08fdd85338eb186a52ce5698a62cb77589..77db8b6c4cbbea215eb24569c396ea1b9640d49d 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c4f613fc57d6239ae5da0615f9d25de25fe80244..ab167ab751f419150573e7298e0bb4cd92b8a471 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index aae5cfced8e5a552d61a8ea2a7fe4b6f87dd2664..6a8452b9884e76eb57cb647e97246231ba32f96c 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 60ef1e822fb50beb3d780caad1e600c30f6304d2..d46a9365a9e80b5e1e85b5f1da02e38b611b9d68 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 3954e13d51ccdffbd08c4ede6f09ca2e566a1684..a8c2090b3a276914f8037940eb174d6e357fdb85 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f392537e3a813f7ada4c53d7035fb59890c6c1b0..40e186479cbea55beaf61c5d2128524f8abe4666 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index fc8cca0f5dc8056bd605971c2604a6b03946cc64..e9d3106226c7f8b4095af231163a64e1fd3bd62b 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 834ea3d71581733ceaaffd0e73b91f65e86ab93d..fe0c356eb411fcdd897c5aae681edb2e9a73318a 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 3a70695009758054ccab0fbb8f954c71c5c73a9c..18e24355d5de31f899e9becc53744c3d1ae639d2 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 67fd78c5e2c143621ce1c55b9563f07b8c10b225..b5ba252ad451fc6c858afd871a80048f3b428255 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index ca4d44c55bdcab1e7904faaa9767ec7bd41e39fb..f6260902850550e54815709ce24ae4f4a2116e3c 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f4d20527c5ca88122decc408b12b4a7fd94b62db..7fbf38dec4fc60af7bda50f5d58cfbd5016817ab 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 57bc6d128f72c3885aa91f0215a1e91d3dd8891d..74c51b8105174f76db9a1068dae3035959031a5a 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f792963027aa5769f146521b63bfe0d29f2f6627..df3818a5a77b1b2d8b5af38ce9b9f1a0ed58e556 100644 (file)
@@ -1,6 +1,6 @@
 ;/*\r
-; * FreeRTOS Kernel V10.2.1\r
-; * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+; * FreeRTOS Kernel V10.3.0\r
+; * Copyright (C) 2020 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
index a73c5eb85316abc78692c4001c50cdcf7bdfa26b..f25a529eef78253218a9f58ec251be7d28a11ad2 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index fb0f72774e8717d01a0cd6e39c2ea84bfb3d683e..9b8768fc89ffaac5818070646ad8ef59b95e532e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 347fe84bfce316bcd915bbee4af5475d3e4415a8..8068af6073c4cdecfc7e15f1eaf6593ee75ac6d1 100644 (file)
@@ -1,6 +1,6 @@
 ;/*\r
-; * FreeRTOS Kernel V10.2.1\r
-; * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+; * FreeRTOS Kernel V10.3.0\r
+; * Copyright (C) 2020 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
index a94ec7d867b355bbaaa4fe072803d930686a230a..88c65329ac4f7b1c8389b52ca868e92560e948a8 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 31904d4a2d58330457fd2e974df74e1d32018fea..2e6195e44990d60a6358046a4bae26ae90006af7 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index fa13b18b128bc38df843182db88d3e40f08bc237..768f4e42798f7d6e673856b18713756570215397 100644 (file)
@@ -1,6 +1,6 @@
 ;/*\r
-; * FreeRTOS Kernel V10.2.1\r
-; * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+; * FreeRTOS Kernel V10.3.0\r
+; * Copyright (C) 2020 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
index 1257b7d3847c1e61449c9e986722c39a8e759fa2..2b36d5cbf7b406b125b0a9a3cf05bb732ba23449 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 018a4b00921ae4c5b9eddba2afc98d3287f6fc3f..d45720c82a0058b78e7493e76b06c7e9a37497ea 100644 (file)
@@ -1,6 +1,6 @@
 ;/*\r
-; * FreeRTOS Kernel V10.2.1\r
-; * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+; * FreeRTOS Kernel V10.3.0\r
+; * Copyright (C) 2020 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
index c9087ff824148abb08c0623cefc4b31923890508..b4b9b9e3c001fe6d876e7d693a12f042bfbfaf18 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 9e29a5d95d6d4ce147552c3ffda1ce07b6c1d06d..918b7385bd4109d3f96f2cb93bb15c5f6680f8b6 100644 (file)
@@ -1,6 +1,6 @@
 ;/*\r
-; * FreeRTOS Kernel V10.2.1\r
-; * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+; * FreeRTOS Kernel V10.3.0\r
+; * Copyright (C) 2020 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
index 3a46b018aad866d483cf3736493a1c5af10366e8..767df262c6ec7b306531ae93ae023ad14e6130a4 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 4d261bcc0b92ca8d5cc228aa5befa0834c2cb294..48bfbd74df09ecf48023a9cde97c8ac4a40416a5 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index b05e20ec4921f1e8321d55c78d2cf83f38a73573..ff702faf90ce40b578d79d918124b082765b1f1c 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 0a18bc7c88c55e5f20f376f2c087871fb4b9e7d4..804a5050a21df349f7f19a533823bc3a2d2fa914 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 605975632a92292c613e95d17ff6422516b206fc..878c886e252bdad9585c2957b77c13b39742d162 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c20204e18cd8858d069cfb600a5b2bd0564f1abd..82581dde118cd45a8e7630c5552ad7e70ec8f787 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index a2092cf662081effdb1839d18efc23d1c639dbdb..8ff35df1a0d92ecd798088d0129c6bc702281b36 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index b27341cda3dc2fa5a2380f96d461afc269a148fd..24d5dfe2388fc793478bb0427fda9b8fe41dd833 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e28d78870f88bf9d056a29077eccbcdc47d2b79a..5dc85750b28dd73f0c470c65d6e43226fb79a3c2 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d183e903b859be01c161ea76aab1a01a7c63f81a..98922cb5707c4aac65b7a76861b15a6c153ea253 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 00c694c1dd443e65e3b8df9d41e6e81489fbfab0..37c09a6bbe677fb065ab007bbe18885035a02598 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index ac1e40f846669ebe8f651a5276c47e550b9fdc2c..9041fe3fd02bde7400fd3f7ea43a455ef2c22837 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 6f656658b35a6cfdd7c5b65abd11b4703e06b04f..4d20e2877d391d97c129a1bbe6e639039fedcb20 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 426318d446b9ed69b0a71503f53537161a1e7e16..55d5e1b427cb40e84941ea3c442f99a6df900e6e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index bbd5bde4cb319d194afb2271d86ac2ebbfea6d4d..a2613939c1f923afa2362db21c48700e7c1b3662 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 12117d4350b2b397b7da48a12124ecddc8f75de0..67c105780dd314003ef8255c883b29df00cc8227 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 826c7c256657b2d29bdc72b5d4626221af06b311..800498a27e755b8f309728ce0ddd795441cf94b0 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index ab02033b19b5f418a4f5244a85f2597026d50303..40b61689e919047c9caade57f4276582376ed5cb 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 758bc3688a930c940346f9ffa7ff2610e42d0e12..7d0d0efd14bd644f913199f6947e9873cf7bdb2f 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 49307669b9ad79ce259e7e79681114cb7d43bfcf..b2b70ec527b3e616cf16219bc4fe96da5720d4fa 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 74b5228dc59bd6e0f4f4ce1c6e19a4c181d306a8..ad2e4485cc5d0f9dee3c4117391c80597a06c39a 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 34838f95cd914a774c3f35755c4499c0f7dd802c..99a1e3f74bff44e19b14651622e60926894c54c0 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index fdfae40ef277b3d97405867c7bdb86b0b26b5c30..c29aa1ed6eb552010036b6f90ad3540dc81dad0c 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 1b1609a8478cb2903fb7f31a0e87ba3969a0ea42..f26ad9d4fd030567d622b61b60aacc1cf4eb5d5b 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 50d154aaf5c4ba2f6e10276da1a697193d4b276d..c16449976e58f8624adad6185250550be92d7c32 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f8c9572dfc0705b18182ee473d7da88d79d37816..92cb2df915bf42ba4366c7811742f97105752786 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f005084d973f8d048db98d75faecb7bf7f7e6599..a7aba3e6b93768e4810d99e7ed663ed6e03e1100 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 6b50588ff32acdbde04d3745465e8f7e87d32978..85fca6838a7bb1fa353afae062de3a3f408f05dc 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 15a5795efc2eca81852d56690c9052451f254fff..f5aed42ecf4ed7daeaa9db2a7cfde8c053924689 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 9ad565518c84457a11e2aea744456a78379877d8..63fa8a56c803a518ffe4509536bd3313cf0f0b4a 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 6ffab561ff8ea320abbb1c3839b38e2cc4e649e7..108eb52dcc80efd90ce0925cf5d2d0d10161b4ed 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f94dcd3476a905da5a359e2fb9d13708e22c7afa..97ce87f94f360f405da7c613b6f0daaab515312a 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 8fc58eab26ecfb050291512edfe90e3f27a98511..cc2562f279679e7d4f6394266f87c1870830eef4 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index a7357013763b4ad29e34d42b2a1ac9f5d5e7db08..ace80ee88af82f819888ff2c393129cec0dd68bc 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 8a422309c0d45bcb45f07da4c05fec3fc51b3df6..586e1339f13d3d521d0029a6c6a01f8577535b5c 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index a98a7d08fdd85338eb186a52ce5698a62cb77589..77db8b6c4cbbea215eb24569c396ea1b9640d49d 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 4e63dd36bb16628496b087bf8ebe42133232398e..71db598ae24d88159cc7fd52f7b80d169f81348e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c4f613fc57d6239ae5da0615f9d25de25fe80244..ab167ab751f419150573e7298e0bb4cd92b8a471 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index aae5cfced8e5a552d61a8ea2a7fe4b6f87dd2664..6a8452b9884e76eb57cb647e97246231ba32f96c 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 60ef1e822fb50beb3d780caad1e600c30f6304d2..d46a9365a9e80b5e1e85b5f1da02e38b611b9d68 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 3954e13d51ccdffbd08c4ede6f09ca2e566a1684..a8c2090b3a276914f8037940eb174d6e357fdb85 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f392537e3a813f7ada4c53d7035fb59890c6c1b0..40e186479cbea55beaf61c5d2128524f8abe4666 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 6ffab561ff8ea320abbb1c3839b38e2cc4e649e7..108eb52dcc80efd90ce0925cf5d2d0d10161b4ed 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 8dee923e3a757d87e23dc1d403bf06cc73987336..e05e5942d553885b6e136c469bb633c2fc0aaee7 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 8fc58eab26ecfb050291512edfe90e3f27a98511..cc2562f279679e7d4f6394266f87c1870830eef4 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index a7357013763b4ad29e34d42b2a1ac9f5d5e7db08..ace80ee88af82f819888ff2c393129cec0dd68bc 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index abab6c0492608d92e5aca149b1a287edd449a37b..505c67cb6b415f91b85cf2678325923cfb06ab66 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index dae91427ba8295077c67546c18ea9b7faa75e0a2..df322022aad2713200316c1ce4c260d10db3f4b1 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 6ffab561ff8ea320abbb1c3839b38e2cc4e649e7..108eb52dcc80efd90ce0925cf5d2d0d10161b4ed 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 2aadacc799b839366e36c713ad047ed894093d81..ea216bde578c9da2a41d777787aeeb26dbfe4ab6 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 8fc58eab26ecfb050291512edfe90e3f27a98511..cc2562f279679e7d4f6394266f87c1870830eef4 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 5ac934cd80d88d107619796d4e75665eec56b36b..0280956f9bdf8038658ea5e668bd55bdd09fd466 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 8a422309c0d45bcb45f07da4c05fec3fc51b3df6..586e1339f13d3d521d0029a6c6a01f8577535b5c 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index a98a7d08fdd85338eb186a52ce5698a62cb77589..77db8b6c4cbbea215eb24569c396ea1b9640d49d 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 245adff796cfe040909501e94e1e2b3773b91f4e..8d9c8c6c682a6aa3e63b03d758c765ab0c472e4f 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c4f613fc57d6239ae5da0615f9d25de25fe80244..ab167ab751f419150573e7298e0bb4cd92b8a471 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index aae5cfced8e5a552d61a8ea2a7fe4b6f87dd2664..6a8452b9884e76eb57cb647e97246231ba32f96c 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 60ef1e822fb50beb3d780caad1e600c30f6304d2..d46a9365a9e80b5e1e85b5f1da02e38b611b9d68 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 3954e13d51ccdffbd08c4ede6f09ca2e566a1684..a8c2090b3a276914f8037940eb174d6e357fdb85 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f392537e3a813f7ada4c53d7035fb59890c6c1b0..40e186479cbea55beaf61c5d2128524f8abe4666 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 6ffab561ff8ea320abbb1c3839b38e2cc4e649e7..108eb52dcc80efd90ce0925cf5d2d0d10161b4ed 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index dc5179fb3502a7eb7eef59a003668aa79f09ae60..2a9f21483cb634f4337a3119d2222ee2aaafad30 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 8fc58eab26ecfb050291512edfe90e3f27a98511..cc2562f279679e7d4f6394266f87c1870830eef4 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c582ecfb361b7f75b92acb37b2e6121796e88aff..9a7ed8b42adadf20976897a7ceac52eec39e6ef7 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 31250095085122ab99db19d5796af93ce7364c64..6917addcadabe73ec7350925692530ba24e3348f 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 54f37e0e127fa89a34ff2b2825c9183da282cb1b..1b6c9b002c072b55a1fd9591568092cc5b373f67 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 15e28df5744de658614de859bdd439b3c385efc0..eca9a3c3324213d6079a4dff2fd957a2c6a64fa3 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 868d384cacb0182bf770c94efc44d36451b72c71..2a5ca140f6883de302fd5868ac969b5045926977 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 8f9119c2ceaeceffe2965fb542ef0d97ce239e84..4b7492b33dbda85a8e4bdea1d5a66fdadc5de3f7 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 54f37e0e127fa89a34ff2b2825c9183da282cb1b..1b6c9b002c072b55a1fd9591568092cc5b373f67 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 9806a879a9e49a46ea21b2fb495a578137acff12..0d08f234d87b8ad86533e1b5f90a873e4824e96f 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 1d7d6537df7dd6809067eb5b4e791f858ff1188f..d73c5e352a4266b79bb1fc98c2c787ff38dedbed 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 62695682373967c4e5223b4d131700577cb1ca94..40805e7a26d31fa5aff32fdb6bbdf189aa65a996 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 8f37686b07d0a73f1a2002ee92f5fc69b7451700..c3dbb9cbec2aedd4a0ceaad9747e35da58ed6e9f 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index bcb638bea4027811bb429ee4cf40ecfb28cf2a53..3d30a51706c49e7e25e3381b178a14cca978c8ed 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index facc5a80a0bf1034de198e03c0b3dd37536727fb..ef457bace479c0e69aa0881814dc381971185841 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d5f022217d79d078cdeaf9508689d5a444d51831..07fe3bd1d424edba2505c6cf4db2b903742cac5f 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 9056b0d59d886049db46e64f4f6b3a8e4f508cfa..442187420860af3fb20f49e4b66ada821b121ac0 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 6220ef0218b8a628402344c2974d460fa77acf90..e8a4aaa498e0e162e0d06435da1b6fc4ea65c0b9 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index a29841f58d5634f57ef3090add408d1b68f5d631..9d319c01ccdaef83e06f2287c4fa5fc4eed59f5d 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 36a6e262561756ed9c395353c82eaca88a12e87f..71eea04d0258167c06eea7b993f8e45625257bed 100644 (file)
@@ -13,8 +13,8 @@
  *****************************************************************************/\r
 \r
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index fc51cb284b9de8b54e932351e93d14eec28b3e9d..08b25914ed324446700bae3d19ac10292c1471aa 100644 (file)
@@ -13,8 +13,8 @@
  *****************************************************************************/\r
 \r
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index ca6adf1acf0377e02d6708aa362a27ac7318b6b0..4d7eec7541952d3a9f6bf27cee7f1c92b4ca6910 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f6419973234db12526ece77133dd7f172bbd10d5..b596eb8d5532a8094c4b85c2911c5992c836c81e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 995c6d98c149248d5c17f33f86d806b94c087f42..ba37c5aaea19df865efd043b9cac38eb3cb48a1d 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index a11608f419150f6133fd7f0bfc8ecd0711dbed5c..d39ec73d4f0d279e51e58693b28c0d7c7843e859 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 550281f7c05e6691d93da81e65a0921dce008948..3a32a4c4a741803a746761df15d8c5de57ce2bda 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 88295f9cbed02ae2fda3f9b96873a9179538da12..0493974a226a6dfb48efaf22cbd4d40bb623a510 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 147616c461de287f19c4e8c3ec7a2ccfdb99962b..4a1dc577dc3b113f76031859e3bbeb9a1f8844bc 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index bc3f60dadac2c62507baebdd007b6341fa5ccc9e..5394eedc132ce69dd63faadbfc2ed122f378a31d 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 66e9a182144ba65a88672fe5db2e183ea68f7156..bb373620dc7c915464877a00f2f857a49c69d4c4 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e45c2748edc8402a6b1fa9b94edb4680f825e662..610df345878ede839ad49895520ee092321a9ce0 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 56c0b4cf7ef9a5b3b487ba579fb03334ff5ba1f9..fe8ed90b263205a4c3c9a659a04631ff1f006839 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 10394b03872d44180dc628789ac89815b4cf2fb0..031bc8696de984cc6def0db1bd4157cd9e392a21 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index eabeeeee3f30d8e69e7191ede79ac5d88049324d..c7002b6f9ce9114f61fcfd3e38d3fb6f14ab37d9 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d84bf9f6a5f5068d378a7c980be0b128f5d07976..c6358ded83a0ff31b52c19cabfa0033c31aab645 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 9b5d224f70b34a6c9780c8c8edcb776a744ac324..6fc4da985934bc88708941ed7917833b200f212f 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 632bbd32df6a48478c9b743fc4a775559ca8fc2f..2d6c6184361a3f0ca79b56084b8c3df218e750b6 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 67cf22c8c9ac892206a48c8fae0ee5fd94b5b0ce..f6f7e3fa0c70d5b914854203881226c62cb75221 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d6af7a4a20dc2fa10cccac6a4258da30cf3488ad..74782499e265ca69372ab29024fa54d2f0e8a8b9 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index ec35a4391e5aff5d24eaea832aa2f924a0e9e874..1d0e4289aa2487b0bdece4829c1e069c99ce0fce 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 33380c75ab03fc98d3c8225d26a5f0c1b740574f..08474a95933328c6afd47ad05531f4e5111df08f 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 5d6b4b886315a6e8d0e5b9d05b44138fa1ad0a59..99f5c9cf3beb87998288efd379f19372ca116ee3 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f0e6dcf331ea8fecd94d7f2e4119231fa92aeda6..14c400c25b8216850ae1bf2126d883ec9eef2c76 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 62d3bb151247856d107912130f3db537e32f05c3..821421c6a7a04896462708653bd298d5cdada291 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 33380c75ab03fc98d3c8225d26a5f0c1b740574f..08474a95933328c6afd47ad05531f4e5111df08f 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 5d6b4b886315a6e8d0e5b9d05b44138fa1ad0a59..99f5c9cf3beb87998288efd379f19372ca116ee3 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f0e6dcf331ea8fecd94d7f2e4119231fa92aeda6..14c400c25b8216850ae1bf2126d883ec9eef2c76 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index ed6d11ae313934216a7828dad826caf5773f6e54..4bb0f124924658a8b6145deaf11d3b03d6ec79e8 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e8691c578baa15970caca7a1f894d8a49f815463..467dd25e1741d64b11e5e7747bd7320007d5b559 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 9e988ad1c9e76262738986833171181b4072ce1f..368a043cfbc7d0e8486d514f9801ace461384ff7 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index cc99ceea3b9ae6179bb197847425930d1afeb149..ce0ea5afd7296ecef489d49cdc752d23f193e8ad 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index dd113aea09b1b4bb5f29de31cc6925264565a300..3e3788d98e526e9fa3ee00987b9ba20574fe26f6 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index dd855a19ef6f21be27568ccd759dbc4f18f4f0b4..36fc33203bba66d579df86f502abcff5fb4a6ba5 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 7986f2e317ff0628475054296d6d13e710c5ce09..b0b5e17f6ea8a77d6ecd43047791fb9aad4c04b7 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index cc99ceea3b9ae6179bb197847425930d1afeb149..ce0ea5afd7296ecef489d49cdc752d23f193e8ad 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 260ccb915d7d5a320455c92bb7f6f0329c3fb5f4..404b72d67105d6aa5bb11bb97235c929bd40e92b 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index dd855a19ef6f21be27568ccd759dbc4f18f4f0b4..36fc33203bba66d579df86f502abcff5fb4a6ba5 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 7986f2e317ff0628475054296d6d13e710c5ce09..b0b5e17f6ea8a77d6ecd43047791fb9aad4c04b7 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f3559b3a9b1b237cfd6377325332694c407b5877..901581199c3c68882120ec37dcd545993da66d00 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 995ec79379f055ffd77469351dab84107fc92756..e4c9b60504ea2ce20cf040d8d19bab8c36ba4db8 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 89b468e997192e5ddf503d46b7bf152261410d5c..0b8a286e497b51c51ed10eaf61014403b454870c 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index fe142dfc96cac63ade87364c73b59fbc81474e1f..fb9825bd626d9c5b28b4b3785d32a26f50ff4577 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index db8bcbf2cb9b27b3813960a7dadf80d0e08b030c..b4f34817171b49b87617509a9d0cb11ae1134f4c 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 3265b1894effdd11e8b9b9f11f6b21e6fdddefac..39be6c9a9c8972a27cb2b43cd14c7e90e2c24100 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 3fb8d1234ce175ee95ae16731f9849f86c6c57c4..f501be40d9500276a1dba4a973323263e64c5b40 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 275f6b932fae46a86727b3ec59318f231c7da698..0f4d9e91a09c097a322b0cf653808e21b005bffd 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d2231efeaa91aff2468e92afc8e0fd1888a820d3..9043129e24686bcb37dc2af89760690088c068f1 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 6fd49c80424ad756e14af1d20946b681d9808917..d5d218747c93d60ba43442a90a80d770730f59fa 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 97bed4a2949747a85c38af7411f9c6a324741cd2..ae1af62647eb785a7d87ea3e7adba1bbd0304753 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index bafb47f3830a377d8a0b32150cc79c1cfecc0b45..4d81f288e7ce8e51a9ae89de392c96498cc5ec97 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 0bafa1e2993ac90466f7439fa1fe0bc6a7f7f759..f03e8ad786ddcd6ee69fa227c4f1d1292bc52663 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 809a194d7234886fe5dadf2f50874351f8588039..d15c393761e02db51c5a01f1e7cb151e4fd142b9 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 0bafa1e2993ac90466f7439fa1fe0bc6a7f7f759..f03e8ad786ddcd6ee69fa227c4f1d1292bc52663 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 175f359b5b095c53f11c59624f4883b881a99ded..86d4deb1edb6e5cf08a5c17a906fe9cd8ec175e4 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 748830702c3fddd1d73f9d83fb69de7592f55b06..9c6b4e99df63fa316bd11ddfdfb7e117b1394426 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 219aac92cd7f4d406f1ceab375a8488ec85b50b1..b03bed1c346000ef7720fc459d08a1f03771a9ed 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 686129a84c21ca9535d76ba0066924c4a6a3537e..26eb6902e8646b9a86e9b6a2add68a926f8aa97a 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f47e84e27c3da8438e9bd85911f28a5246808cde..df0ada57ac053aac541a3d2ce5529f817f510158 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 672edc046cc875132bd3b18541d981a89dea0333..736f5e62a8eb36b6849050e0ab9102acb7433d94 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 4d322f3310b108a0b3dd76f534615bde0a08897f..b05182b814b1b53a205e089b3ee2cb2a212630d4 100644 (file)
@@ -1,6 +1,6 @@
 ;/*\r
-; * FreeRTOS Kernel V10.2.1\r
-; * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+; * FreeRTOS Kernel V10.3.0\r
+; * Copyright (C) 2020 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
index 18fc494c37eaa401065a0c8c3cdbdf57e214ed50..ea09bdb8556d838750352d767f661fea3b0e1ba6 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index aa49f1a6587e900aa3661a9990a0d0838771b9ce..69f958a4883b46662cc44dfb07a8876826cd6e91 100644 (file)
@@ -1,6 +1,6 @@
 ;/*\r
-; * FreeRTOS Kernel V10.2.1\r
-; * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+; * FreeRTOS Kernel V10.3.0\r
+; * Copyright (C) 2020 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
index 4267246c507e1f6df8dfe5918e54d103e673b712..3914b532337a44daee0b8c690bfce94a127540e3 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 1171f8a24f2a8f00a043568ceb03b76679c09868..700df68469427b694f9eaa9bcc29df7bdf7c32b3 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d079fc05fb25362c856497f563aaa6dfa2210db0..a82dbe7555a68fada0cec2e0ec0aaf25cd7c43ce 100644 (file)
@@ -1,6 +1,6 @@
 ;/*\r
-; * FreeRTOS Kernel V10.2.1\r
-; * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+; * FreeRTOS Kernel V10.3.0\r
+; * Copyright (C) 2020 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
index 674049c1909017c4c789f42345c6df937cff1b70..9a489052bab1bc100906592873302b18365b3055 100644 (file)
@@ -1,6 +1,6 @@
 ;/*\r
-; * FreeRTOS Kernel V10.2.1\r
-; * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+; * FreeRTOS Kernel V10.3.0\r
+; * Copyright (C) 2020 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
index f5ae8532148537b2e70d4e4d19530f2a90ff9b05..6c60c5bee53b4d60a7d9e4854ebb5eab6d22a4ca 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 69d8723ad6c2d95c62dcbed603629ea461b45f2f..372f8d65f6cf611ec2ef6f1b6b0dbd26d0151b3d 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 7c15091d36d85f6981271651e3f1e5a71762ca77..adc1d563679c2422c286050d2e0c8aebe1f3b527 100644 (file)
@@ -1,6 +1,6 @@
 ;/*\r
-; * FreeRTOS Kernel V10.2.1\r
-; * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+; * FreeRTOS Kernel V10.3.0\r
+; * Copyright (C) 2020 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
index d50e561b78883a40ead1c3821eaea843839bd405..8dd55248f3d7145f3139031442879b398bb6c470 100644 (file)
@@ -1,6 +1,6 @@
 ;/*\r
-; * FreeRTOS Kernel V10.2.1\r
-; * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+; * FreeRTOS Kernel V10.3.0\r
+; * Copyright (C) 2020 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
index 4f6c3038f26e54c0f297356be9a3b65063ae1696..d0937313611cc2649a2173b6f164a834892bd2f6 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 08b59f3d4fc347cd2502b89719af0a4f876ede96..6aa408dd3e9480f7adae1982d83d45669c0327d5 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 76f48c4b2ee19c8185ca45387b40a8f795e17896..9afd906988e31c008df6fbf0a014bf6453ba243d 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 8103f9cc180cbabd35f70746a98a88fe92d0ddb3..b01d1bbbc94e6d73289c81cfdc7227f5665fdc9b 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 6ffab561ff8ea320abbb1c3839b38e2cc4e649e7..108eb52dcc80efd90ce0925cf5d2d0d10161b4ed 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 8fc58eab26ecfb050291512edfe90e3f27a98511..cc2562f279679e7d4f6394266f87c1870830eef4 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 8ac94fd33157327f1d119723362ab76cedc0dfef..3565ccf42717ff0c2b83e2a5705d468a16ff48ee 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 14cb37f863b108bb047e21cb9a0c2fe60971fc67..17e5a6941ca90b947fba42cae5f79151bbd8ff8e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 8a422309c0d45bcb45f07da4c05fec3fc51b3df6..586e1339f13d3d521d0029a6c6a01f8577535b5c 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index a98a7d08fdd85338eb186a52ce5698a62cb77589..77db8b6c4cbbea215eb24569c396ea1b9640d49d 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 6df620d5f67b809dcddf354a5a5bcd7cc1f57ea4..4ef68b78a222b0e484e21c1eab12ce8a486bd8fe 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 947e70adf70503b40acab50ef65239d5eb23c8ff..669b5b0b2c0f54a4c91fc4603d7d760e87b5e005 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c4f613fc57d6239ae5da0615f9d25de25fe80244..ab167ab751f419150573e7298e0bb4cd92b8a471 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index aae5cfced8e5a552d61a8ea2a7fe4b6f87dd2664..6a8452b9884e76eb57cb647e97246231ba32f96c 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 60ef1e822fb50beb3d780caad1e600c30f6304d2..d46a9365a9e80b5e1e85b5f1da02e38b611b9d68 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 3954e13d51ccdffbd08c4ede6f09ca2e566a1684..a8c2090b3a276914f8037940eb174d6e357fdb85 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f392537e3a813f7ada4c53d7035fb59890c6c1b0..40e186479cbea55beaf61c5d2128524f8abe4666 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 6ffab561ff8ea320abbb1c3839b38e2cc4e649e7..108eb52dcc80efd90ce0925cf5d2d0d10161b4ed 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 8fc58eab26ecfb050291512edfe90e3f27a98511..cc2562f279679e7d4f6394266f87c1870830eef4 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d6a8cb844981a2905f617a943a697d01fd78243c..5a6377a032e10ad1bde682464c4a3a7bc4720e2c 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 14cb37f863b108bb047e21cb9a0c2fe60971fc67..17e5a6941ca90b947fba42cae5f79151bbd8ff8e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c8f2a59fb280effd0b0d15ecff2abb2b9d81755b..67fa5dd183fcad0c95b051b1e771ebdab7fd01c7 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f91e1a6d96ed793d347e6494cf31e87f224e7a01..2040a96168e81e4d52b2cd2e2b430c43da7e8c3d 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 23510e17c65044950092194fffd311fccc7c6e0d..70380763d64a87e090d4bf2f99141db9718667f9 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 6ffab561ff8ea320abbb1c3839b38e2cc4e649e7..108eb52dcc80efd90ce0925cf5d2d0d10161b4ed 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 8fc58eab26ecfb050291512edfe90e3f27a98511..cc2562f279679e7d4f6394266f87c1870830eef4 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index a134120f05122ecfc9c2ad6be779fd3fb0014efb..bffed0e93c6ea4cdff849a9c1119721e817fe6ec 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c5fb74b6dd032ee12b8ebb3d041af33d52600ab3..04d1cd628c71e2cfdbfeec4544b117383ffb7bc1 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 8a422309c0d45bcb45f07da4c05fec3fc51b3df6..586e1339f13d3d521d0029a6c6a01f8577535b5c 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index a98a7d08fdd85338eb186a52ce5698a62cb77589..77db8b6c4cbbea215eb24569c396ea1b9640d49d 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 6df620d5f67b809dcddf354a5a5bcd7cc1f57ea4..4ef68b78a222b0e484e21c1eab12ce8a486bd8fe 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 759a21fa8eb97c3a63a4b3bc233ec4ddab2c8189..a27e5d4df028bbee04c4739109ab9ae59124032e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c4f613fc57d6239ae5da0615f9d25de25fe80244..ab167ab751f419150573e7298e0bb4cd92b8a471 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index aae5cfced8e5a552d61a8ea2a7fe4b6f87dd2664..6a8452b9884e76eb57cb647e97246231ba32f96c 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 60ef1e822fb50beb3d780caad1e600c30f6304d2..d46a9365a9e80b5e1e85b5f1da02e38b611b9d68 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 3954e13d51ccdffbd08c4ede6f09ca2e566a1684..a8c2090b3a276914f8037940eb174d6e357fdb85 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f392537e3a813f7ada4c53d7035fb59890c6c1b0..40e186479cbea55beaf61c5d2128524f8abe4666 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 6ffab561ff8ea320abbb1c3839b38e2cc4e649e7..108eb52dcc80efd90ce0925cf5d2d0d10161b4ed 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 8fc58eab26ecfb050291512edfe90e3f27a98511..cc2562f279679e7d4f6394266f87c1870830eef4 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e7c888e7c01ac00d42fbd22f5c483fbb1c3e34c4..ad5e0f86a4b62369e3b1882a3b489530d1235d96 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c5fb74b6dd032ee12b8ebb3d041af33d52600ab3..04d1cd628c71e2cfdbfeec4544b117383ffb7bc1 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 2a2b66e6602c67542875a347176cbb624e345531..89d5691b62c9578805a111bb107a1ac83095a942 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 8f37baa488e1f64c4e9635e32ddafee5762a4584..df7e614a5b2f7ed9b7a8ec28107c50bc39b15c21 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 1d442a8f7b3e990f299df97871fb304950f17b18..b2fea955b8016a114594e9964e980a5d052ef320 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index b4cc0b53ca0d2bc8fcbd13038594d9a80536d7be..c5380285d5f70a415c61e3e1b5d0b1cd4bc65c68 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d223de62b9df2d21b46260bc3edd6e31b9a0191c..000fb6d6dbf065cb59c671d3a4ac5ebb59fd08aa 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f0e759fec3c6bc45901be98c3284bb61ae61d68f..4df3372c8617e5d7abd0257ab67483846eb2d3cb 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 9bff8ed7da2c9dc2703331ef372029e76d4401e4..30d9f70649bca6e661b5399665e6624d6431fc2e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 37ac1a7c35658e3d960ac4a7173bce731c9421a4..410e6df4d3c181daccdd8919bea6ccf9ca412bcd 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d98d67a2a378b3d99767794c2ad9985a2e625f71..14d46cc12dd70d76384a6f135057a3296fd53f1a 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 85ce365d901da55570c8d98e6dcac55e3f6eaf44..3328fdabb012205ada4e6a212ccd1d2843a3bc2f 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 5c9add72c255b34bacb0f5071d085a42bee10561..120c1d306b7a8fd80849162f0b619e6baac8ec56 100644 (file)
@@ -1,6 +1,6 @@
 ;/*\r
-; * FreeRTOS Kernel V10.2.1\r
-; * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+; * FreeRTOS Kernel V10.3.0\r
+; * Copyright (C) 2020 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
index b6c075ce2e108ce34409cfff6a47a7813b281f6d..d8ee4596c4807472971baa23781fd5b8e401f3e5 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 0914f40c75c93d2a77ca16b5df0b0ddb99bdfb13..2a7dc18d6a52cb477e7caff9929cea6877705eef 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 20acd2c06d61c7229ba8642646a849930e1c1297..c4a526e506a4fd0a4ef697572272333b1d490ae3 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 6e33f484ba69e0a89665e2e0ea7048c8dcbf5b08..8d34de973aae940181c548811752273651aaf313 100644 (file)
@@ -1,6 +1,6 @@
 ;/*\r
-; * FreeRTOS Kernel V10.2.1\r
-; * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+; * FreeRTOS Kernel V10.3.0\r
+; * Copyright (C) 2020 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
index 61f941e5b1e204517e328bb6f315e92747dfe7dd..683413814c58d09fd15a92b14636e6217b9666c9 100644 (file)
@@ -13,8 +13,8 @@
  *****************************************************************************/\r
 \r
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index de74a38ab0fbb18a07c8f326e6e3061a28e2253b..d93c6af45fe274cccabe29328023f5d06c6639ae 100644 (file)
@@ -13,8 +13,8 @@
  *****************************************************************************/\r
 \r
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 18e0b3bf034ededd13002c887671542c58aab158..cb259739ba268bdab8d7f6a17e8d9df88b752e84 100644 (file)
@@ -1,6 +1,6 @@
 ;/*\r
-; * FreeRTOS Kernel V10.2.1\r
-; * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+; * FreeRTOS Kernel V10.3.0\r
+; * Copyright (C) 2020 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
index 56842e4328d220ad8e38a423c1e46e356d4f6de4..1e6bdb640e7c95d3072ea7dc2311301b9e42c447 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 9af364fb0f5604556f22824e6c5f70a98ac7c092..d54dc60c541a25505f9ae13b925da9cea9a4c8ca 100644 (file)
@@ -1,6 +1,6 @@
 ;/*\r
-; * FreeRTOS Kernel V10.2.1\r
-; * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+; * FreeRTOS Kernel V10.3.0\r
+; * Copyright (C) 2020 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
index 5fdf4f2ad8ebbefd768e11c6477143f8956e9971..f8a350997bfbf935d340575fc893a0f575b62938 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 54361b987c3a5ac6e357a11255ad875c6344a69c..da9447733ea289a2fff48a649c7e82acf664edc6 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 7fe236dd504b9cd950eeb2aa57da92219eb58da0..e62170fc6b76250eab5090a7735bfe15e0e29a68 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 18e0b3bf034ededd13002c887671542c58aab158..cb259739ba268bdab8d7f6a17e8d9df88b752e84 100644 (file)
@@ -1,6 +1,6 @@
 ;/*\r
-; * FreeRTOS Kernel V10.2.1\r
-; * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+; * FreeRTOS Kernel V10.3.0\r
+; * Copyright (C) 2020 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
index 371a74a8063f4c1bf46f76cd0e6dd9194159e5d6..0dee06690db6d787b1fd8cd139d6b9e89c193203 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 6036e3ed1beb6ec5846e1ddc3ac475ea54f3773d..be27d041d68b1dae25de888c4108c125e6c9e955 100644 (file)
@@ -1,6 +1,6 @@
 ;/*\r
-; * FreeRTOS Kernel V10.2.1\r
-; * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+; * FreeRTOS Kernel V10.3.0\r
+; * Copyright (C) 2020 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
index 7ebcbe89e547b9bb78b47c06df45e7861b90621e..9261b873b5e03f38c6fedb5f837d59e40dffd8dc 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 605c7c7059c3b6b89796cbfb6b77306d24a41b56..84de5e8441235e6e8180031a7671bf826a516941 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index bb5da676ccc5e75154bce422c714c08a9f96ed12..eaeb0090e11fc34fec76601242742f50fcc3f633 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index ace7e5cd3ad7472393cbfc96564ff4fe114d4bc4..8585b9d983e21778a379eb2cc50624dd342eafe8 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 728c17dd4d93947f00936bd00198090645f5cb37..c0a8156366e672c84eccd22aa36e7e846b24500e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e03a16bfa11817b7467fb2f1817604e24ae3a694..b9ee5bdaab8c6a68635259c6614ecf1f369436a7 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c8d63dae1cf1c93ff1308736f2d5be939c02c52f..90eeb70b642f3ccbf9aa916f217a7e19608db6a3 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index eef44545c3b19f927f26ddc94fd6cdd079178727..57fe370378d337fad5a28b3b6ecfe941096c6db8 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d5719fe18fd76d1f469a78844c7795ed6bbf61fe..423a4013c9f5cdfa54b86305f2893f723c888989 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index dda6f3f6d1dcd0eb8e72db209f6b05898c69a291..3445be151ff9c4fef23337ca9e1e8b907f95de03 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 985c9f0998cd8dc02819a4b5ac85af1b4beb8e07..f100b5e8d653f2a1dffc7969123aeff9e384a3ce 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 473725fa31515975ff725972270699e3d56dd9f6..cfc3a63bd1ef1f14c64be1b0bcb67cba5d021a6e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 19116dbc025c623eddf3fd0332c0b7bbdaf494fb..5ab4629b32eff5e6a187e787c9b075b15fbf2d4c 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index d9aeb95887bc6e57c4301ae02176c71cc98df0f8..4e73aa99b8d50ed775f5a173b7fb91c6a650d460 100644 (file)
@@ -1,6 +1,6 @@
 ;/*\r
-; * FreeRTOS Kernel V10.2.1\r
-; * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+; * FreeRTOS Kernel V10.3.0\r
+; * Copyright (C) 2020 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
index 84bfabd03653e2c2529803282d5c7bfb560391b0..60906171ddc001dc0a69b66a1b8acf4748aba5a7 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 8e30f01e55c92632de08c5880f71b832390112a0..2ab0844c1dbf402ba992ac63e30e056e1863e951 100644 (file)
@@ -1,6 +1,6 @@
 ;/*\r
-; * FreeRTOS Kernel V10.2.1\r
-; * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+; * FreeRTOS Kernel V10.3.0\r
+; * Copyright (C) 2020 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
index 9261badf19eb1df28d589a4b4a898a1eb66f80a8..1ab3fadc4385e787a0ff38aa268336ce9356e643 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f9e9dbc70c4fa20a86dd7dd5188886a2a4154238..de76a4863ffcaa705024f17f2ddb08c42bfde710 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 69d3178b0b417b52b547cfb021251970c693a9b3..7c8b519fb0ec7449b29b549793a66c2b1c0869f9 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 324e98889917a0ca102d6e0feddcb67eb82f0b9c..6a24c47fb3d3dcef85f7181dfac0f6018b2fb2f1 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 7f8f4ccb1b59328bc05a521443772fa884aec473..14f53919d07d6fa8cbd7c2cdeb2f764adacd8f8b 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c66e99ec37577d1daa5917e7d8ba576e776457b3..5734f7f77d0925fec46699a4532dd7d150510652 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e8696006a4042f6fcc47c91332c61e7507cd2b2d..1ffcd733f9c74e9ff3fa459327fbdbe9767980bf 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 484d71a2ba84dfb9811089e081625739cda40043..7bd4994b0575b8328bf592bb12b923cac4596884 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 3c4ef17c27608d8c4baab68d691d0167e9e04e02..dcc624e6a4ced5bf304cac8301ebf92e9144300f 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f260ab47d10ba0b49401b14f239e6276f7417134..9d4649795a24436db13d5eaf9fd729e93718ba80 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 18e0b3bf034ededd13002c887671542c58aab158..cb259739ba268bdab8d7f6a17e8d9df88b752e84 100644 (file)
@@ -1,6 +1,6 @@
 ;/*\r
-; * FreeRTOS Kernel V10.2.1\r
-; * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+; * FreeRTOS Kernel V10.3.0\r
+; * Copyright (C) 2020 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
index ed06217d5dd129c62e3fe86c438d875254db8183..8945cb3077c2f0c3c47ac71a38690c4dcaf20e82 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 59afb026d901351138e8f329f54786faa7867003..184ab43ad73f4efa6a0e758a248853ab1bc2eb61 100644 (file)
@@ -1,6 +1,6 @@
 ;/*\r
-; * FreeRTOS Kernel V10.2.1\r
-; * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+; * FreeRTOS Kernel V10.3.0\r
+; * Copyright (C) 2020 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
index 2cf720faa295234275728169ccf3e28aca03b727..347320be0185a66524b5e7a64153b752b1762682 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 18e0b3bf034ededd13002c887671542c58aab158..cb259739ba268bdab8d7f6a17e8d9df88b752e84 100644 (file)
@@ -1,6 +1,6 @@
 ;/*\r
-; * FreeRTOS Kernel V10.2.1\r
-; * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+; * FreeRTOS Kernel V10.3.0\r
+; * Copyright (C) 2020 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
index 0d68bcc3c7f2541f235501fb082128ff23131969..39cbdc95963fb4eff66a406f05b85f24fac2cd96 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index eac9c4b983ff6cb59d78dece79a9a899a65bdae4..fb6d0f36a7935996aaa5a15b3f7060d075850c72 100644 (file)
@@ -1,6 +1,6 @@
 ;/*\r
-; * FreeRTOS Kernel V10.2.1\r
-; * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+; * FreeRTOS Kernel V10.3.0\r
+; * Copyright (C) 2020 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
index 4a20cf139088707e9e1477ace160253a2165dfcd..fa991da63b84bc044d2bdaa8428adde7a3855bd0 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f9a64662c72f729b1a7b44293ab9e252c0db1335..6b2e7db8fe09c649d4c19ff1dc553852b06d9aa9 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 2a4c44e8105fe7606873abe88c05cc863d35ec69..45d3d1948ab1c577abed325c1f98bd1969a46f71 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 8ee30f73c04252ec008f09b01adafaf532bcb47f..74582a6672db6c4389ac7d37328f9b3bde828aaa 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index ba63916084fa1c51f3a2857f91b47787e07b5c2c..d55378df8a69f6a2ca8d0b63ba3a3988d77b045d 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 8ee843a43b254bdb7bdf148eee7ef1f2c101a688..eff83e419fb70dd5abb9460102c04e8f218ea562 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index b6e75806c7f5dba6be84fbdbe6367bce60e6d040..d4c12314195a860c0e8661a1a88ff543f5ab0d75 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f1393b38c665659bff765eb0e740ac38f52ae519..7512da089f9d659dc07c26223785c9393933d871 100644 (file)
@@ -1,6 +1,6 @@
 ;/*\r
-; * FreeRTOS Kernel V10.2.1\r
-; * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+; * FreeRTOS Kernel V10.3.0\r
+; * Copyright (C) 2020 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
index 62cf09fdcfd69deff2c337b4b8410c7e9102375e..4bb2cef183b70fbce13924ae874b1a2fd6fe0818 100644 (file)
@@ -1,6 +1,6 @@
 ;/*\r
-; * FreeRTOS Kernel V10.2.1\r
-; * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+; * FreeRTOS Kernel V10.3.0\r
+; * Copyright (C) 2020 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
index 4be6fb3179e689bbe62975073b1671bf2ee99049..5436afe89b9d001d3d5e425f7c0bbf53fba7d60b 100644 (file)
@@ -1,6 +1,6 @@
 ;/*\r
-; * FreeRTOS Kernel V10.2.1\r
-; * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+; * FreeRTOS Kernel V10.3.0\r
+; * Copyright (C) 2020 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
index 5a976243e1120c8ecb4676b8f75852e547292f84..8a9d9d0969d2be2ad9657df009f5448be8e58998 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 8a2919d7cff6207d5116a10e0615f95b1fdb0e42..5bd805575e1f8697476fa96b566a7384925989c5 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e238b8f05f350688861d3f08d1feae156d2e02d1..09ae9f9125f4b4712f78b682d56043acb75deb6a 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 386197530c87c865db8f24efde70eeb42501c8f2..b161d76e02db447d550f19ca4ebbe15d47e4d491 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 83b58033f12fa185de670c3b477f6a520be403c0..01bc3cc52ef20e71dc31e28f3a1f477e92371340 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e1fc2edd48c10744fcf8f5b18cb3abee30b0d952..b4dd1d408a177c807c2a3f3ce21ee6f85fb6d4f3 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 7605e1b270ae29581770b02238d9e4853691f077..3d70c54fbf1dd6a6580023c1e3cf1c22157b2847 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 8b69cb639252114a54248ed9574976b617d27256..609a7aa551635978c5a6dfc31cd567a4f9db5979 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 261fb6982a8ebc8df258d0636f4253b7bf8fdf4e..7afb23d1443799ce0bc8b6f86001339d1f918969 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 15c55f4f447e8259eeb2b25a26dbc012660afadd..213b7a48568ae99c545fb23d8f28406626d17e2b 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 179165b8f5fddbff6b4621f7a87a5ae7fab74da9..c2122f2ffada14e672432c68b93342421dcedd8a 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 043a6fcd95b59353f5267a10a75d959da5a03891..09f43b52dac761cd9724753e64d1d7cbd1f8f387 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 75e1a12a2b72f0c58fbd9894beebc6efc1589c0c..65d23842c45d46118f05803f1ccde69f2120aa30 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index f47b1b22f898277514fb2dc16dafed5f524d502d..c9ba467be9f882287fd7ad8c5e20c9f02afd35b1 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index b53fd649daa6b3266cd79f886ff260bf943fd55f..3bf8c85ce0ea456db1a97aa6516651b258427c78 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 9a570bb3f40a9ad867e106f46af34393e8bda2f7..f60c8dbc6b7d6c3c25b6be1d1e59ec0ceb6bb3d1 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 3e1f6552ef5c74d1ee5422e2d4c48397316556a9..e2241499f8e9292f53cd9060ec5a1a1d18892aff 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 58d8e40652463ff77884e1120653a21dc4b2a99b..1e41c12666acd26271112337eded302c1e01a636 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 061b901af34c6288ed7f497490bfc00e9b34c582..a66e074881986c21f36f64388f9e9d7f9bd1afbd 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index ec2341748b8539e909cabb25ec0c1c69153941b2..bd5f7d5f4261174bc834c03f3a4ec313f4d5ae78 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
@@ -456,8 +456,8 @@ CONTEXT xContext;
 \r
                                /* Ensure the thread is actually suspended by performing a\r
                                synchronous operation that can only complete when the thread is\r
-                               actually suspended.  The code below asks for dummy register\r
-                               data. Experimentation shows that these two lines don't appear\r
+                               actually suspended.  The below code asks for dummy register\r
+                               data.  Experimentation shows that these two lines don't appear\r
                                to do anything now, but according to\r
                                https://devblogs.microsoft.com/oldnewthing/20150205-00/?p=44743\r
                                they do - so as they do not harm (slight run-time hit). */\r
index 51b96f2fcc250f2d45adb330ab13049cf74987e4..eab64499a32098a9c4688da88aefd0af0a1ed8cd 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 137733ade0743be62247abb1199a10c4687261ef..89e86dd769ec7efa12c1356ed129b3573705c091 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 2c5ceb8ed938d532c88f6493149ae69a85bd948f..561425506d1452e5ca2dbdcca63912bb988a2873 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c391d463e31d29d86239b365e8eb7da5e8501dea..c81924bc49fa9351babe4bc23dd3118c8ba52ba9 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index b1d8fc894e67b587cd36e3e34477091b318e1918..911d4f9a597e5a1a36a3eaee211f0d2a16ba637b 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index cf814d116afec2e5401fa030facc3f9bf0b8db21..196021b3fa84797ce2db2b33451c2c53fa138b67 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index bd9e1e5745482f5b666ad14871a3bcdb886dea29..4af7f35a3b50948cf60686c2820bb709bd6f295e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 2931cbcadf0a2c9cd95e45b2c65ee7af69555c27..10a0898d68c89827f94cfe59c15021c698f7b350 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 442af3334c4d2ef2f4aeb4377f6b69d61a3860be..b5783ba6f07c22ee0402b0094a0e3b0c5a4fccb9 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e19fc83653108e04594bbd262269b2088dbf2750..4d3f58dc4c90fec7a87bd54b1c5868cf55351c55 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 4b0f367d6f960cd7e8f221a7e0eb8e0c33d84aa9..75d352ea7e730ae2b03fd668b8b93159349b5400 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e28b3cabe0b9432e28242737775e4ae2f5317d0a..cefe48de1d6e00d1ad98ff015ec14c55263dc0fd 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 723cc21314b3118e926ef9aa5e3ff82d671fb476..5b2cc794811cadab2e1753b288663c220e138fb4 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 79231c0063879c067835f2f6f052393478093abf..4d3070019debd8e51258205a1158686d7237173f 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 4705771247a89b3fc01cf67ff5e4c04b80a5db41..c51f81feac48e0c0320cfd1d04298e011cab9fa6 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index dadcafa1fb276de3a947f36792d2850b596f04af..87ba9af5ac0c5c1a9648f40391d15889210c9de9 100644 (file)
@@ -1,6 +1,6 @@
 ;/*\r
-; * FreeRTOS Kernel V10.2.1\r
-; * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+; * FreeRTOS Kernel V10.3.0\r
+; * Copyright (C) 2020 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
index 44bb6014a1bcfe8a360981ba5039ef9a00ca26ba..b6a749e3261aa4e9c31ab692ef93d308ed9852aa 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 268a024cca5e3c844ec9071aa1e98b2f1cd691d4..dd999d3866bcf577152003ea7886df4a6bad58f6 100644 (file)
@@ -1,6 +1,6 @@
 ;/*\r
-; * FreeRTOS Kernel V10.2.1\r
-; * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+; * FreeRTOS Kernel V10.3.0\r
+; * Copyright (C) 2020 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
index c68d4bd732528ccc9ae00efb7c47fc93fb7a5317..75ae7249962794967a924cb2d0f92050a8932d6f 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 84ff0d6dbd6c33b36d91444b71a3c3c106b99b65..d949291e7e20a53536097ea17eccebd1bc2b67ef 100644 (file)
@@ -1,6 +1,6 @@
 ;/*\r
-; * FreeRTOS Kernel V10.2.1\r
-; * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+; * FreeRTOS Kernel V10.3.0\r
+; * Copyright (C) 2020 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
index cf75bdc3aafae8d9f83b2dbbb38d76fe8610fe12..be6f9f96d0b04df58ede4fb4cadde658861710d4 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index eb7840114951c262aa1e274b2e9c748713bbbbf8..251e7e2f2e369abadb359c3df2ff9f4aaa1df160 100644 (file)
@@ -1,6 +1,6 @@
 ;/*\r
-; * FreeRTOS Kernel V10.2.1\r
-; * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+; * FreeRTOS Kernel V10.3.0\r
+; * Copyright (C) 2020 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
index 79e8b4d46334aa17de5ac82c69a4a46879ab1033..b40d6cb21124c88576495b4b6cc1358d88868be4 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 5f3b9f44edbd283570e22d18892bd633d1582f33..77f9dd27171768dce2dc0b93e1dfc7ccc24dcc50 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 6e4e77f977cd3e8f7b5000e15a7e49927018c7ac..f300002910aaea057e3218f19f7d0a3bf004fc77 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 90173ee9da021a1fa17d242319b5455e3078df4a..b82efa9336f2ef605e3b9b75af88d23227f2559c 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 99ffeaa39680156c11f88db2966a66c2e7e660f9..067715d4a4ae62a4ee35da63d44ee87aa0a23895 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 90173ee9da021a1fa17d242319b5455e3078df4a..b82efa9336f2ef605e3b9b75af88d23227f2559c 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 0d92e0b314957fb87b20cd963a9ca9cade1420e3..d031d9d06b6fcaf653d025009107dba0d4b0eb14 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 431ea4c31862b2c9e53ee04ad5739eb47c721723..44be29807ccbc9ea6e816bd7ac9fca0a20face74 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index fa63025a2dbd1b15529cf6b39b2c935a6ac3f9d3..348ee0fe855c41470fca12d68d9cd3063eda89f4 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 30ef19f479ba74d149cf04da81fa111e77a45e49..cff1068435c9a3c428092e2850de951316fde78f 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 67cea4de0bb72a30b3deb3ff3b58b1db2ce81537..344453a0f0bbb0b0f136eb3b6470c42bc28f1dee 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 6a154ea4176cd214060d5d44449041b69aaacff0..1041e2d7dbc679ec00026b515a238af997814f25 100644 (file)
@@ -1,6 +1,6 @@
 ;/*\r
-; * FreeRTOS Kernel V10.2.1\r
-; * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+; * FreeRTOS Kernel V10.3.0\r
+; * Copyright (C) 2020 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
index fd0f1979cfc8365a9e93fd49efce1b4f779a0abe..9319e6f1d36bfd8f30a4ca5e8eda5055a756699d 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e3f24bd19dc7f3cab4f4cd8c39cd7cbcad146566..f35d757bc0ecae2ba4449751bdfc888f71e0d256 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 6a154ea4176cd214060d5d44449041b69aaacff0..1041e2d7dbc679ec00026b515a238af997814f25 100644 (file)
@@ -1,6 +1,6 @@
 ;/*\r
-; * FreeRTOS Kernel V10.2.1\r
-; * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+; * FreeRTOS Kernel V10.3.0\r
+; * Copyright (C) 2020 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
index 84ab8c3cc6d836bb6d48bea79f8f5d8aebe35e4d..8c670f22adfe8cfbef1fd4d67bba15dd258662a6 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 1ffdd2d0cba91226c4e40aab6764e4b1bdb81b70..eb01763715b34fdeb4ed6f185a8492491ea00f16 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 6a154ea4176cd214060d5d44449041b69aaacff0..1041e2d7dbc679ec00026b515a238af997814f25 100644 (file)
@@ -1,6 +1,6 @@
 ;/*\r
-; * FreeRTOS Kernel V10.2.1\r
-; * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+; * FreeRTOS Kernel V10.3.0\r
+; * Copyright (C) 2020 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
index 1d6414b37f4f20b21456db47f03250a39febc49a..c6d134330a5c33c81e58ea63b703a2f202b956ff 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 64fbf837ef754c4e0ebcde7d4de682938d8c30e2..c94ecbbf6c090e24211f2865f78aa3fc111cc036 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c0bc9e235e0d2e0f00d87edb125a5d117d7d4aaa..e13a84ff37cb2471b4b5088baf3358b22a658dac 100644 (file)
@@ -1,6 +1,6 @@
 ;/*\r
-; * FreeRTOS Kernel V10.2.1\r
-; * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+; * FreeRTOS Kernel V10.3.0\r
+; * Copyright (C) 2020 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
index 6d143142b53b0f68380e51bb32935bd90abbdba5..78596b61a834a2440f51c314358e824ff5ef7453 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e0a5996c2d07a864266aa4b402bb0421bcd0366a..e216a07c88aadb1bcd85c86a0b88bec31438221e 100644 (file)
@@ -1,6 +1,6 @@
 ;/*\r
-; * FreeRTOS Kernel V10.2.1\r
-; * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+; * FreeRTOS Kernel V10.3.0\r
+; * Copyright (C) 2020 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
index 8c4d50a972f81764170a1b64fdb6436ba8088abe..2178e349c3872125d5565dd1816a3283a933e09f 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 3bcdb5f28b3aafafacd91987bffd7ef71b257a66..9bf7e1dae890eb44475378486d86bf929da8885f 100644 (file)
@@ -1,6 +1,6 @@
 ;/*\r
-; * FreeRTOS Kernel V10.2.1\r
-; * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+; * FreeRTOS Kernel V10.3.0\r
+; * Copyright (C) 2020 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
index 009f2b0fdd9ea71a50fdc1e46e7afcd04a3b5434..18d9b87f0b351a1fa7456351b53926f1ae70f53f 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 6c0fdddcdf584912b6da6df5fd9430ed3ff289c3..92ff29dc6f35bcd3f767e0f0186cdd4a533a8a32 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 129847b9412f2d35ede30936e291634e8eafa6be..6c7a45eccface534b2749c9b0bb4c3f795514d25 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index b4792d1d88bd03c48765561f7e2467480eb1e344..3dfdef9a9267faf0597d3f036ec558c0e612b6a0 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 52eebf91f2c35c7352233cb91af5ad46fc72bb5c..c93e154c4f0a97bc9c76cf269ba9e3cb3cbcde42 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index eb1a08e3682fe8acef92ee3865f98dc770959c1e..05134aaec21ef68e7ec8873d65f2453c04a6ded1 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 45197f84e15780da31cbc40c6f951201ca41050d..e595ed1f374735709a022e932de49dc9defd3d4d 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 424610691412391203eb76ca864fd9782bc0a8ce..629e6a17e7ec21239524b1617d81008693612945 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index ed2ac6724912147587fb943c3d7acc796568ceb4..54a520b1a148c5381c13408f7293a3275ae04375 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 8ceabc5f15748ca06add4015859087a202006705..49b444a6443e410c1d75948851188de6cdc9d609 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 2e14db8276387dc1fd685d4f854494e0aae2851c..407c39065f77ee3ff63ba2442b5fa97f9d4abe71 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index a141d33773367b1668dd55c4b09a9b4b5c219b93..2aa1ab71b8263c62bae225f5a32a1367a28c8798 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c8204b88ea6cdc885c2b1e0f1d6308c2f18b6e54..6b47555fa85bc29dc568564fcc25f14c5d5a25bf 100644 (file)
@@ -1,6 +1,6 @@
 ;/*\r
-; * FreeRTOS Kernel V10.2.1\r
-; * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+; * FreeRTOS Kernel V10.3.0\r
+; * Copyright (C) 2020 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
index a2d421ca9e6b80661a00bc20d6cd58c3139437da..a45b26880bb661fe2d3fa21b94979182951377e5 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index a7e937bd2bc71e637ac194a95d43012072fa7ab5..a7930b3f04ac232e675f40ada61b4c309f1a605d 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 29b7d04e2888e3661477d7a8f02132fb4e4f9bdf..4b4bb30ad5baf76594f7459eb7149b123a73080e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 02729db3951da400fbe007b1c77ecf79f48790ab..f9e17896fc5431e295c294f5a7db813d74f0435e 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index c999f8729ca00f4bbef0376fa6628c9ded6c1efc..549bd57cce27d078d07cafee0a19b18050dd3b0d 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index da73925abdec159c0a828e48a4d89b34d53db016..521148a8f26e20feebbd0d90d2c484085c8688a2 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 18e88bcc9b8bd15944e4042dd94078cc265ee6a0..a598ed0a02857bf8bf20f32abeb22260dd015793 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 59a36ccd13d2ce7f5151e2e4858be2c14c8ab21f..ebd04edf9072b348e9941e760508fc8567bb4e2c 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 4f9410f83aa82ff5d9d1757acb17891682bade10..27f30d3af473f2b515e7d8a7f9a91128e5507577 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 5e3af2cc71a6e8a3269d7717232b036426f59014..3684e02e342e8276b7052b690564c6fd7fe21dca 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 864f910376cdd4e477bf4f3dc51440472fffd8fc..8e03df17f3ca03373fc907425ad16b693003929f 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 81f810851c6103e35aad78bab356ce33ad76061f..787843cd5dbc3234eca4319e9195dd8277d9b31c 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index eacc69c3fbf075af6d30b36772341d5f439c1dca..474fd34628b02b0183973f3cd5b47bd3a2929d15 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 8cda238d3d38f47368be07ddb42b6d399b5e55b0..ec7b3e36559e9f81eaa9cfd9022f554f8264e20d 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index e6efe7f8b4462c10dfe4f33db9c07ffa2f184d3f..f426a6faa516818acb21b2cbe8874841dfd3507b 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
index 12a2f4e9b6a6213d1befd75a5a3fa61d6e076390..bfcc4eaffc69d6d3009d5eb9b23d09e2ce3282f5 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 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
diff --git a/Upgrading to FreeRTOS V10.3.0.url b/Upgrading to FreeRTOS V10.3.0.url
deleted file mode 100644 (file)
index a30f018..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-[{000214A0-0000-0000-C000-000000000046}]\r
-Prop3=19,11\r
-[InternetShortcut]\r
-IDList=\r
-URL=https://www.freertos.org/FreeRTOS-V10.3.x.html\r