From 1f1f3a6cd505169f4b49f8e6db38808a4389d1c2 Mon Sep 17 00:00:00 2001 From: richardbarry Date: Sat, 13 Feb 2010 18:57:15 +0000 Subject: [PATCH] Update SuperH port to include WEB server. git-svn-id: https://svn.code.sf.net/p/freertos/code/trunk@974 1d2547de-c912-0410-9cb9-b8ca96c0e9e2 --- Demo/SuperH_SH7216_Renesas/RTOSDemo.tws | 2 - .../RTOSDemo/FreeRTOSConfig.h | 34 +- .../RTOSDemo/ParTest/ParTest.c | 8 + .../RTOSDemo/RTOSDemo.hwp | 87 ++- .../RTOSDemo/RTOSDemo.nav | Bin 66234 -> 113407 bytes .../RTOSDemo/RTOSDemo.tps | 2 +- .../RTOSDemo/RenesasCode/compiler.h | 94 +++ .../RTOSDemo/RenesasCode/hwEthernet.h | 152 +++++ .../RTOSDemo/RenesasCode/hwEthernetPhy.h | 91 +++ .../RenesasCode/hwEthernetPhyRTL8201.c | 435 ++++++++++++++ .../RTOSDemo/RenesasCode/rsk7216def.h | 106 ++++ .../RTOSDemo/RenesasCode/trace.h | 104 ++++ .../RTOSDemo/RenesasCode/types.h | 476 +++++++++++++++ .../SessionSH7216_E10A-USB_SYSTEM__SH.hsf | 161 +++-- Demo/SuperH_SH7216_Renesas/RTOSDemo/main.c | 24 +- .../RTOSDemo/regtest.src | 17 +- .../SuperH_SH7216_Renesas/RTOSDemo/uIP_Task.c | 26 +- Demo/SuperH_SH7216_Renesas/RTOSDemo/vecttbl.c | 3 +- .../RTOSDemo/webserver/EMAC.c | 555 +++++++++++++++++ .../RTOSDemo/webserver/EMAC_ISR.src | 123 ++++ .../RTOSDemo/webserver/httpd-cgi.c | 254 ++++++++ .../RTOSDemo/webserver/httpd-fs/404.html | 8 + .../RTOSDemo/webserver/httpd-fs/index.html | 13 + .../RTOSDemo/webserver/httpd-fs/index.shtml | 20 + .../RTOSDemo/webserver/httpd-fs/io.shtml | 28 + .../RTOSDemo/webserver/httpd-fs/runtime.shtml | 20 + .../RTOSDemo/webserver/httpd-fs/stats.shtml | 41 ++ .../RTOSDemo/webserver/httpd-fs/tcp.shtml | 21 + .../RTOSDemo/webserver/httpd-fsdata.c | 557 ++++++++++++++++++ .../RTOSDemo/webserver/makefsdata | 78 +++ .../RTOSDemo/webserver/uip-conf.h | 162 +++++ .../RTOSDemo/webserver/webserver.h | 47 ++ 32 files changed, 3612 insertions(+), 137 deletions(-) create mode 100644 Demo/SuperH_SH7216_Renesas/RTOSDemo/RenesasCode/compiler.h create mode 100644 Demo/SuperH_SH7216_Renesas/RTOSDemo/RenesasCode/hwEthernet.h create mode 100644 Demo/SuperH_SH7216_Renesas/RTOSDemo/RenesasCode/hwEthernetPhy.h create mode 100644 Demo/SuperH_SH7216_Renesas/RTOSDemo/RenesasCode/hwEthernetPhyRTL8201.c create mode 100644 Demo/SuperH_SH7216_Renesas/RTOSDemo/RenesasCode/rsk7216def.h create mode 100644 Demo/SuperH_SH7216_Renesas/RTOSDemo/RenesasCode/trace.h create mode 100644 Demo/SuperH_SH7216_Renesas/RTOSDemo/RenesasCode/types.h create mode 100644 Demo/SuperH_SH7216_Renesas/RTOSDemo/webserver/EMAC.c create mode 100644 Demo/SuperH_SH7216_Renesas/RTOSDemo/webserver/EMAC_ISR.src create mode 100644 Demo/SuperH_SH7216_Renesas/RTOSDemo/webserver/httpd-cgi.c create mode 100644 Demo/SuperH_SH7216_Renesas/RTOSDemo/webserver/httpd-fs/404.html create mode 100644 Demo/SuperH_SH7216_Renesas/RTOSDemo/webserver/httpd-fs/index.html create mode 100644 Demo/SuperH_SH7216_Renesas/RTOSDemo/webserver/httpd-fs/index.shtml create mode 100644 Demo/SuperH_SH7216_Renesas/RTOSDemo/webserver/httpd-fs/io.shtml create mode 100644 Demo/SuperH_SH7216_Renesas/RTOSDemo/webserver/httpd-fs/runtime.shtml create mode 100644 Demo/SuperH_SH7216_Renesas/RTOSDemo/webserver/httpd-fs/stats.shtml create mode 100644 Demo/SuperH_SH7216_Renesas/RTOSDemo/webserver/httpd-fs/tcp.shtml create mode 100644 Demo/SuperH_SH7216_Renesas/RTOSDemo/webserver/httpd-fsdata.c create mode 100644 Demo/SuperH_SH7216_Renesas/RTOSDemo/webserver/makefsdata create mode 100644 Demo/SuperH_SH7216_Renesas/RTOSDemo/webserver/uip-conf.h create mode 100644 Demo/SuperH_SH7216_Renesas/RTOSDemo/webserver/webserver.h diff --git a/Demo/SuperH_SH7216_Renesas/RTOSDemo.tws b/Demo/SuperH_SH7216_Renesas/RTOSDemo.tws index 751a3f911..ef666fddb 100644 --- a/Demo/SuperH_SH7216_Renesas/RTOSDemo.tws +++ b/Demo/SuperH_SH7216_Renesas/RTOSDemo.tws @@ -7,9 +7,7 @@ [GENERAL_DATA] [BREAKPOINTS] [OPEN_WORKSPACE_FILES] -"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\SuperH_SH7216_Renesas\RTOSDemo\main.c" [WORKSPACE_FILE_STATES] -"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\SuperH_SH7216_Renesas\RTOSDemo\main.c" -4 -23 1316 658 1 0 [LOADED_PROJECTS] "RTOSDemo" [END] diff --git a/Demo/SuperH_SH7216_Renesas/RTOSDemo/FreeRTOSConfig.h b/Demo/SuperH_SH7216_Renesas/RTOSDemo/FreeRTOSConfig.h index bebfcf62b..8417f08e5 100644 --- a/Demo/SuperH_SH7216_Renesas/RTOSDemo/FreeRTOSConfig.h +++ b/Demo/SuperH_SH7216_Renesas/RTOSDemo/FreeRTOSConfig.h @@ -75,17 +75,17 @@ #define configPERIPHERAL_CLOCK_HZ ( 50000000UL ) #define configTICK_RATE_HZ ( ( portTickType ) 1000 ) #define configMINIMAL_STACK_SIZE ( ( unsigned short ) 140 ) -#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 32 * 1024 ) ) +#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 36 * 1024 ) ) #define configMAX_TASK_NAME_LEN ( 12 ) -#define configUSE_TRACE_FACILITY 0 +#define configUSE_TRACE_FACILITY 1 #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 0 +#define configGENERATE_RUN_TIME_STATS 1 +#define configCHECK_FOR_STACK_OVERFLOW 2 #define configUSE_RECURSIVE_MUTEXES 1 #define configQUEUE_REGISTRY_SIZE 0 -#define configGENERATE_RUN_TIME_STATS 0 #define configUSE_MALLOC_FAILED_HOOK 1 #define configUSE_APPLICATION_TASK_TAG 1 /* Must be set to one for floating point support in this port. */ @@ -105,5 +105,31 @@ to exclude the API function. */ #define INCLUDE_uxTaskGetStackHighWaterMark 1 #define INCLUDE_xTaskGetSchedulerState 1 +#define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() +#define portGET_RUN_TIME_COUNTER_VALUE() 0 + +/*----------------------------------------------------------- + * Ethernet configuration. + *-----------------------------------------------------------*/ + +/* MAC address configuration. */ +#define configMAC_ADDR0 0x00 +#define configMAC_ADDR1 0x12 +#define configMAC_ADDR2 0x13 +#define configMAC_ADDR3 0x10 +#define configMAC_ADDR4 0x15 +#define configMAC_ADDR5 0x11 + +/* IP address configuration. */ +#define configIP_ADDR0 192 +#define configIP_ADDR1 168 +#define configIP_ADDR2 0 +#define configIP_ADDR3 201 + +/* Netmask configuration. */ +#define configNET_MASK0 255 +#define configNET_MASK1 255 +#define configNET_MASK2 255 +#define configNET_MASK3 0 #endif /* FREERTOS_CONFIG_H */ diff --git a/Demo/SuperH_SH7216_Renesas/RTOSDemo/ParTest/ParTest.c b/Demo/SuperH_SH7216_Renesas/RTOSDemo/ParTest/ParTest.c index 39ff50ed0..09bc7ed99 100644 --- a/Demo/SuperH_SH7216_Renesas/RTOSDemo/ParTest/ParTest.c +++ b/Demo/SuperH_SH7216_Renesas/RTOSDemo/ParTest/ParTest.c @@ -125,7 +125,15 @@ void vParTestToggleLED( unsigned portBASE_TYPE uxLED ) taskEXIT_CRITICAL(); } } +/*-----------------------------------------------------------*/ +long lParTestGetLEDState( void ) +{ + /* Returns the state of the fifth LED. */ + return PE.DR.WORD & usLEDMasks[ 4 ]; +} +/*-----------------------------------------------------------*/ + diff --git a/Demo/SuperH_SH7216_Renesas/RTOSDemo/RTOSDemo.hwp b/Demo/SuperH_SH7216_Renesas/RTOSDemo/RTOSDemo.hwp index 54ad154e8..5dc931ba2 100644 --- a/Demo/SuperH_SH7216_Renesas/RTOSDemo/RTOSDemo.hwp +++ b/Demo/SuperH_SH7216_Renesas/RTOSDemo/RTOSDemo.hwp @@ -127,14 +127,27 @@ "C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\integer.c" "User" "C source file|Standard Demo Tasks" 2 "C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\recmutex.c" "User" "C source file|Standard Demo Tasks" 2 "C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\semtest.c" "User" "C source file|Standard Demo Tasks" 2 +"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\apps\httpd\http-strings.c" "User" "C source file|FreeTCPIP" 2 +"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\apps\httpd\httpd-fs.c" "User" "C source file|FreeTCPIP" 2 +"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\apps\httpd\httpd.c" "User" "C source file|FreeTCPIP" 2 +"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\psock.c" "User" "C source file|FreeTCPIP" 2 +"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\timer.c" "User" "C source file|FreeTCPIP" 2 +"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\uip.c" "User" "C source file|FreeTCPIP" 2 +"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\uip_arp.c" "User" "C source file|FreeTCPIP" 2 "C:\E\Dev\FreeRTOS\WorkingCopy\Demo\SuperH_SH7216_Renesas\RTOSDemo\ParTest\ParTest.c" "User" "C source file" 2 +"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\SuperH_SH7216_Renesas\RTOSDemo\RenesasCode\hwEthernetPhyRTL8201.c" "User" "C source file|RenesasCode" 2 "C:\E\Dev\FreeRTOS\WorkingCopy\Demo\SuperH_SH7216_Renesas\RTOSDemo\dbsct.c" "User" "C source file" 2 "C:\E\Dev\FreeRTOS\WorkingCopy\Demo\SuperH_SH7216_Renesas\RTOSDemo\flop.c" "User" "C source file|Standard Demo Tasks" 2 "C:\E\Dev\FreeRTOS\WorkingCopy\Demo\SuperH_SH7216_Renesas\RTOSDemo\intprg.c" "User" "C source file" 2 "C:\E\Dev\FreeRTOS\WorkingCopy\Demo\SuperH_SH7216_Renesas\RTOSDemo\main.c" "User" "C source file" 2 +"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\SuperH_SH7216_Renesas\RTOSDemo\printf-stdarg.c" "User" "C source file" 2 "C:\E\Dev\FreeRTOS\WorkingCopy\Demo\SuperH_SH7216_Renesas\RTOSDemo\regtest.src" "User" "Assembly source file" 2 "C:\E\Dev\FreeRTOS\WorkingCopy\Demo\SuperH_SH7216_Renesas\RTOSDemo\resetprg.c" "User" "C source file" 2 +"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\SuperH_SH7216_Renesas\RTOSDemo\uIP_Task.c" "User" "C source file" 2 "C:\E\Dev\FreeRTOS\WorkingCopy\Demo\SuperH_SH7216_Renesas\RTOSDemo\vecttbl.c" "User" "C source file" 2 +"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\SuperH_SH7216_Renesas\RTOSDemo\webserver\EMAC.c" "User" "C source file" 2 +"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\SuperH_SH7216_Renesas\RTOSDemo\webserver\EMAC_ISR.src" "User" "Assembly source file" 2 +"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\SuperH_SH7216_Renesas\RTOSDemo\webserver\httpd-cgi.c" "User" "C source file|FreeTCPIP" 2 "C:\E\Dev\FreeRTOS\WorkingCopy\Source\list.c" "User" "C source file|FreeRTOS" 2 "C:\E\Dev\FreeRTOS\WorkingCopy\Source\portable\MemMang\heap_2.c" "User" "C source file|FreeRTOS" 2 "C:\E\Dev\FreeRTOS\WorkingCopy\Source\portable\Renesas\SH2A_FPU\port.c" "User" "C source file|FreeRTOS" 2 @@ -143,8 +156,11 @@ "C:\E\Dev\FreeRTOS\WorkingCopy\Source\tasks.c" "User" "C source file|FreeRTOS" 2 [FOLDER] "Assembly source file" "Assembly source file" +"C header file" "C header file" "C source file" "C source file" "C source file|FreeRTOS" "" +"C source file|FreeTCPIP" "" +"C source file|RenesasCode" "" "C source file|Standard Demo Tasks" "" [GENERAL_DATA_PROJECT] "USE_CUSTOM_LINKAGE_ORDER" "0" @@ -154,48 +170,61 @@ "SessionSH7216_E10A-USB_SYSTEM__SH" "C:\E\Dev\FreeRTOS\WorkingCopy\Demo\SuperH_SH7216_Renesas\RTOSDemo\SessionSH7216_E10A-USB_SYSTEM__SH.hsf" 0 [GENERAL_DATA_SESSION_SessionSH7216_E10A-USB_SYSTEM__SH] [OPTIONS_Debug_SH7216_E10A-USB_SYSTEM__SH_Renesas OptLinker] -"Single Shot" "019be9f9fe69ac10" 4 +"Single Shot" "02ce8974bdcaac10" 4 [OPTIONS_Debug_SH7216_E10A-USB_SYSTEM__SH_Renesas SH Assembler] "Assembly source file" "05db08d6f178ac10" 3 "C:\E\Dev\FreeRTOS\WorkingCopy\Demo\SuperH_SH7216_Renesas\RTOSDemo\regtest.src" "0fd8e3b27059ac10" 3 +"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\SuperH_SH7216_Renesas\RTOSDemo\webserver\EMAC_ISR.src" "044f1e9ce4aaac10" 3 "C:\E\Dev\FreeRTOS\WorkingCopy\Source\portable\Renesas\SH2A_FPU\portasm.src" "0cc802940e29ac10" 3 "Linkage symbol file" "05db08d6f178ac10" 3 [OPTIONS_Debug_SH7216_E10A-USB_SYSTEM__SH_Renesas SH C/C++ Compiler] -"C source file" "0ebee3d62979ac10" 2 -"C++ source file" "0ebee3d62979ac10" 2 -"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\BlockQ.c" "0ebee3d62979ac10" 2 -"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\GenQTest.c" "0ebee3d62979ac10" 2 -"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\PollQ.c" "0ebee3d62979ac10" 2 -"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\QPeek.c" "0ebee3d62979ac10" 2 -"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\blocktim.c" "0ebee3d62979ac10" 2 -"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\death.c" "0ebee3d62979ac10" 2 -"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\flash.c" "0ebee3d62979ac10" 2 -"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\integer.c" "0ebee3d62979ac10" 2 -"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\recmutex.c" "0ebee3d62979ac10" 2 -"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\semtest.c" "0ebee3d62979ac10" 2 -"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\SuperH_SH7216_Renesas\RTOSDemo\ParTest\ParTest.c" "0ebee3d62979ac10" 2 -"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\SuperH_SH7216_Renesas\RTOSDemo\dbsct.c" "0ebee3d62979ac10" 2 -"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\SuperH_SH7216_Renesas\RTOSDemo\flop.c" "0ebee3d62979ac10" 2 -"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\SuperH_SH7216_Renesas\RTOSDemo\intprg.c" "0ebee3d62979ac10" 2 -"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\SuperH_SH7216_Renesas\RTOSDemo\main.c" "0ebee3d62979ac10" 2 -"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\SuperH_SH7216_Renesas\RTOSDemo\resetprg.c" "0ebee3d62979ac10" 2 -"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\SuperH_SH7216_Renesas\RTOSDemo\vecttbl.c" "0ebee3d62979ac10" 2 -"C:\E\Dev\FreeRTOS\WorkingCopy\Source\list.c" "0ebee3d62979ac10" 2 -"C:\E\Dev\FreeRTOS\WorkingCopy\Source\portable\MemMang\heap_2.c" "0ebee3d62979ac10" 2 -"C:\E\Dev\FreeRTOS\WorkingCopy\Source\portable\Renesas\SH2A_FPU\port.c" "0ebee3d62979ac10" 2 -"C:\E\Dev\FreeRTOS\WorkingCopy\Source\queue.c" "0ebee3d62979ac10" 2 -"C:\E\Dev\FreeRTOS\WorkingCopy\Source\tasks.c" "0ebee3d62979ac10" 2 +"C source file" "0dde9772c28aac10" 2 +"C++ source file" "0dde9772c28aac10" 2 +"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\BlockQ.c" "0dde9772c28aac10" 2 +"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\GenQTest.c" "0dde9772c28aac10" 2 +"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\PollQ.c" "0dde9772c28aac10" 2 +"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\QPeek.c" "0dde9772c28aac10" 2 +"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\blocktim.c" "0dde9772c28aac10" 2 +"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\death.c" "0dde9772c28aac10" 2 +"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\flash.c" "0dde9772c28aac10" 2 +"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\integer.c" "0dde9772c28aac10" 2 +"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\recmutex.c" "0dde9772c28aac10" 2 +"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\Minimal\semtest.c" "0dde9772c28aac10" 2 +"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\apps\httpd\http-strings.c" "0dde9772c28aac10" 2 +"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\apps\httpd\httpd-fs.c" "0dde9772c28aac10" 2 +"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\apps\httpd\httpd.c" "0dde9772c28aac10" 2 +"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\psock.c" "0dde9772c28aac10" 2 +"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\timer.c" "0dde9772c28aac10" 2 +"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\uip.c" "0dde9772c28aac10" 2 +"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\Common\ethernet\FreeTCPIP\uip_arp.c" "0dde9772c28aac10" 2 +"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\SuperH_SH7216_Renesas\RTOSDemo\ParTest\ParTest.c" "0dde9772c28aac10" 2 +"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\SuperH_SH7216_Renesas\RTOSDemo\RenesasCode\hwEthernetPhyRTL8201.c" "0dde9772c28aac10" 2 +"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\SuperH_SH7216_Renesas\RTOSDemo\dbsct.c" "0dde9772c28aac10" 2 +"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\SuperH_SH7216_Renesas\RTOSDemo\flop.c" "0dde9772c28aac10" 2 +"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\SuperH_SH7216_Renesas\RTOSDemo\intprg.c" "0dde9772c28aac10" 2 +"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\SuperH_SH7216_Renesas\RTOSDemo\main.c" "0dde9772c28aac10" 2 +"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\SuperH_SH7216_Renesas\RTOSDemo\printf-stdarg.c" "0dde9772c28aac10" 2 +"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\SuperH_SH7216_Renesas\RTOSDemo\resetprg.c" "0dde9772c28aac10" 2 +"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\SuperH_SH7216_Renesas\RTOSDemo\uIP_Task.c" "0dde9772c28aac10" 2 +"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\SuperH_SH7216_Renesas\RTOSDemo\vecttbl.c" "0dde9772c28aac10" 2 +"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\SuperH_SH7216_Renesas\RTOSDemo\webserver\EMAC.c" "03f4f874bdcaac10" 2 +"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\SuperH_SH7216_Renesas\RTOSDemo\webserver\httpd-cgi.c" "0dde9772c28aac10" 2 +"C:\E\Dev\FreeRTOS\WorkingCopy\Source\list.c" "0dde9772c28aac10" 2 +"C:\E\Dev\FreeRTOS\WorkingCopy\Source\portable\MemMang\heap_2.c" "0dde9772c28aac10" 2 +"C:\E\Dev\FreeRTOS\WorkingCopy\Source\portable\Renesas\SH2A_FPU\port.c" "0dde9772c28aac10" 2 +"C:\E\Dev\FreeRTOS\WorkingCopy\Source\queue.c" "0dde9772c28aac10" 2 +"C:\E\Dev\FreeRTOS\WorkingCopy\Source\tasks.c" "0dde9772c28aac10" 2 [OPTIONS_Debug_SH7216_E10A-USB_SYSTEM__SH_Renesas SH C/C++ Library Generator] -"Single Shot" "05db08d6f178ac10" 1 +"Single Shot" "0a60f44dc2baac10" 1 [OPTIONS_Debug_SH7216_E10A-USB_SYSTEM__SH] "" 0 "[V|VERSION|1] [B|DEBUG|1] [S|OUTPUTPATH|^"$(CONFIGDIR)\$(FILELEAF).obj^"] [S|LITERAL|POOL|BRANCH|JUMP|RETURN] [S|DISPSIZE|12] [I|TAB|8] [B|ERRORPATH|1] [B|CHGINCPATH|1] [S|CPU|SH2AFPU] [S|ENDIAN|BIG] [S|ROUND|NEAREST] [B|DENORMALIZE|0] [B|SKIPDEPENDENCY|1] " 3 -"[V|VERSION|6] [S|FORM|STYPE] [S|BYTE_COUNT_VALUE|FF] [B|DEBUG|1] [S|ROM|(D,R)] [S|CRC|NONE|00000000] [B|LIST|1] [S|LIST|^"$(CONFIGDIR)\$(PROJECTNAME).map^"] [S|SHOW|METHODCUSTOM|] [S|OUTPUT|^"$(CONFIGDIR)\$(PROJECTNAME).mot^"] [I|SPACE|^"FF^"] [B|OPTIMIZE|0] [I|CACHESIZE|000000008] [I|CACHELINE|000000020] [S|START|DVECTTBL,DINTTBL(00)|PResetPRG,PIntPRG(0800)|P,C,C$BSEC,C$DSEC,D(01000)|B,R(0FFF80000)|S(0FFFBFC00)] [B|SKIPDEPENDENCY|1] +"[V|VERSION|6] [S|FORM|STYPE] [S|BYTE_COUNT_VALUE|FF] [B|DEBUG|1] [S|ROM|(D,R)] [S|CRC|NONE|00000000] [B|LIST|1] [S|LIST|^"$(CONFIGDIR)\$(PROJECTNAME).map^"] [S|SHOW|METHODCUSTOM|] [S|OUTPUT|^"$(CONFIGDIR)\$(PROJECTNAME).mot^"] [I|SPACE|^"FF^"] [B|OPTIMIZE|0] [I|CACHESIZE|000000008] [I|CACHELINE|000000020] [S|START|DVECTTBL,DINTTBL(00)|PResetPRG,PIntPRG(0800)|P,C,C$BSEC,C$DSEC,D(01000)|B,R(0FFF80000)|BTX_DESCR(0FFF91100)|BRX_DESCR(0FFF91200)|B_ETHERNET_BUFFERS(0FFF93100)|S(0FFF9FC00)] [B|SKIPDEPENDENCY|1] " 4 -"[V|VERSION|7] [S|INCLUDE|^"$(PROJDIR)\..\..\..\Source\portable\Renesas\SH2A_FPU^"|^"$(PROJDIR)\..\..\..\Source\include^"|^"$(PROJDIR)\.^"|^"$(PROJDIR)\..\..\Common\include^"] [S|NOMESSAGE|6|8|17] [S|OUTPUTPATH|^"$(CONFIGDIR)\$(FILELEAF).obj^"] [B|DEBUG|1] [S|ALIGN4|ALL] [S|ASSEMBLY|^"[V|VERSION|1]] [S|OUTPUTPATH|^"^"$(CONFIGDIR)\$(FILELEAF).obj^"^"]] [S|LITERAL|POOL|BRANCH|JUMP|RETURN]] [S|DISPSIZE|12]] [I|TAB|8]] [B|CHGINCPATH|1]] [S|CPU|SH2AFPU]] [S|ENDIAN|BIG]] [S|ROUND|NEAREST]] [B|DENORMALIZE|0]]^"] [B|TBR|0] [B|STUFF|0] [S|BSS_ORDER|DECLARATION] [S|MXGEN_MEM0|00000000] [S|MXGEN_MEM1|00000000] [B|LIST|0] [S|GBR|AUTO] [S|INLINE|DEFAULT] [I|INLINE|20] [S|MISRA2004_CHECK_RULE|ALL] [S|MISRA2004_RULE|1.1|3.4|4.1|5.2|5.3|5.4|5.5|5.6|5.7|6.1|6.2|6.3|6.4|6.5|7.1|8.1|8.2|8.3|8.5|8.6|8.7|8.8|8.11|8.12|9.2|9.3|10.1|10.2|10.3|10.4|10.5|10.6|11.1|11.2|11.3|11.4|11.5|12.1|12.2|12.3|12.4|12.5|12.6|12.7|12.8|12.9|12.10|12.11|12.12|12.13|13.1|13.2|13.3|13.4|13.7|14.1|14.2|14.3|14.4|14.5|14.6|14.7|14.8|14.9|14.10|15.1|15.2|15.3|15.4|15.5|16.1|16.2|16.3|16.4|16.5|16.6|16.8|16.9|17.3|17.4|17.5|17.6|18.1|18.2|18.4|19.1|20.2|20.4|20.5|20.7|20.8|20.9|20.10|20.11|20.12] [S|MISRA1998_CHECK_RULE|ALL] [S|MISRA1998_RULE|1|5|8|12|13|14|17|18|19|20|21|22|24|28|29|31|32|33|34|35|36|37|38|39|40|42|43|44|45|46|48|49|50|51|53|54|55|56|57|58|59|60|61|62|63|64|65|68|69|70|71|72|73|74|75|76|77|78|79|80|82|83|84|85|99|101|102|103|104|105|106|108|110|111|112|113|115|118|119|121|122|123|124|125|126|127] [S|MISRA_GROUP_FILE_PATH|^"$(PROJDIR)\$(PROJECTNAME).rde^"] [S|OPT_RANGE|ALL] [I|MAX_UNROLL|1] [S|FPSCR|SAFE] [S|CPU|SH2AFPU] [S|ROUND|NEAREST] [B|CHGINCPATH|1] [B|SKIPDEPENDENCY|1] [N|DEPENDSCAN|1] +"[V|VERSION|7] [S|INCLUDE|^"$(PROJDIR)\..\..\..\Source\portable\Renesas\SH2A_FPU^"|^"$(PROJDIR)\..\..\..\Source\include^"|^"$(PROJDIR)\.^"|^"$(PROJDIR)\..\..\Common\include^"|^"$(PROJDIR)\..\..\Common\ethernet\FreeTCPIP^"|^"$(PROJDIR)\webserver^"|^"$(PROJDIR)\RenesasCode^"] [S|DEFINE|PACK_STRUCT_END=UNPACK] [S|NOMESSAGE|6|8] [S|OUTPUTPATH|^"$(CONFIGDIR)\$(FILELEAF).obj^"] [B|DEBUG|1] [S|ALIGN4|ALL] [S|ASSEMBLY|^"[V|VERSION|1]] [S|OUTPUTPATH|^"^"$(CONFIGDIR)\$(FILELEAF).obj^"^"]] [S|LITERAL|POOL|BRANCH|JUMP|RETURN]] [S|DISPSIZE|12]] [I|TAB|8]] [B|CHGINCPATH|1]] [S|CPU|SH2AFPU]] [S|ENDIAN|BIG]] [S|ROUND|NEAREST]] [B|DENORMALIZE|0]]^"] [B|TBR|0] [B|STUFF|0] [S|BSS_ORDER|DECLARATION] [S|MXGEN_MEM0|00000000] [S|MXGEN_MEM1|00000000] [B|LIST|0] [B|OPTIMIZE|0] [S|GBR|AUTO] [S|INLINE|DEFAULT] [I|INLINE|20] [S|MISRA2004_CHECK_RULE|ALL] [S|MISRA2004_RULE|1.1|3.4|4.1|5.2|5.3|5.4|5.5|5.6|5.7|6.1|6.2|6.3|6.4|6.5|7.1|8.1|8.2|8.3|8.5|8.6|8.7|8.8|8.11|8.12|9.2|9.3|10.1|10.2|10.3|10.4|10.5|10.6|11.1|11.2|11.3|11.4|11.5|12.1|12.2|12.3|12.4|12.5|12.6|12.7|12.8|12.9|12.10|12.11|12.12|12.13|13.1|13.2|13.3|13.4|13.7|14.1|14.2|14.3|14.4|14.5|14.6|14.7|14.8|14.9|14.10|15.1|15.2|15.3|15.4|15.5|16.1|16.2|16.3|16.4|16.5|16.6|16.8|16.9|17.3|17.4|17.5|17.6|18.1|18.2|18.4|19.1|20.2|20.4|20.5|20.7|20.8|20.9|20.10|20.11|20.12] [S|MISRA1998_CHECK_RULE|ALL] [S|MISRA1998_RULE|1|5|8|12|13|14|17|18|19|20|21|22|24|28|29|31|32|33|34|35|36|37|38|39|40|42|43|44|45|46|48|49|50|51|53|54|55|56|57|58|59|60|61|62|63|64|65|68|69|70|71|72|73|74|75|76|77|78|79|80|82|83|84|85|99|101|102|103|104|105|106|108|110|111|112|113|115|118|119|121|122|123|124|125|126|127] [S|MISRA_GROUP_FILE_PATH|^"$(PROJDIR)\$(PROJECTNAME).rde^"] [S|OPT_RANGE|ALL] [I|MAX_UNROLL|1] [S|FPSCR|SAFE] [S|CPU|SH2AFPU] [S|ROUND|NEAREST] [B|CHGINCPATH|1] [B|SKIPDEPENDENCY|1] [N|DEPENDSCAN|1] " 2 -"[V|VERSION|7] [S|MODE|BUILD/CHANGED] [S|EXISTOUTPUTPATH|^"$(CONFIGDIR)\$(PROJECTNAME).lib^"] [B|RUNTIME|1] [B|STDLIB|1] [B|STRING|1] [S|OUTPUTPATH|^"$(CONFIGDIR)\$(PROJECTNAME).lib^"] [S|ALIGN4|ALL] [B|STUFF|0] [S|BSS_ORDER|DECLARATION] [S|GBR|AUTO] [S|INLINE|DEFAULT] [I|INLINE|20] [S|OPT_RANGE|ALL] [I|MAX_UNROLL|1] [B|SAVE_CONT_REG|1] [S|CPU|SH2AFPU] [S|ROUND|NEAREST] [B|SKIPDEPENDENCY|1] +"[V|VERSION|7] [S|MODE|BUILD/CHANGED] [S|EXISTOUTPUTPATH|^"$(CONFIGDIR)\$(PROJECTNAME).lib^"] [B|RUNTIME|1] [B|STDARG|1] [B|STDLIB|1] [B|STRING|1] [S|OUTPUTPATH|^"$(CONFIGDIR)\$(PROJECTNAME).lib^"] [B|REENT|1] [S|ALIGN4|ALL] [B|STUFF|0] [S|BSS_ORDER|DECLARATION] [S|GBR|AUTO] [S|INLINE|DEFAULT] [I|INLINE|20] [S|OPT_RANGE|ALL] [I|MAX_UNROLL|1] [B|SAVE_CONT_REG|1] [S|CPU|SH2AFPU] [S|ROUND|NEAREST] [B|SKIPDEPENDENCY|1] " 1 [EXCLUDED_FILES_Debug_SH7216_E10A-USB_SYSTEM__SH] [LINKAGE_ORDER_Debug_SH7216_E10A-USB_SYSTEM__SH] diff --git a/Demo/SuperH_SH7216_Renesas/RTOSDemo/RTOSDemo.nav b/Demo/SuperH_SH7216_Renesas/RTOSDemo/RTOSDemo.nav index 9d86fcc730cb7af34f746ca5a22339a766962236..d59ee5f08cfc30eff393472e5558ce4f6af2b52c 100644 GIT binary patch literal 113407 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

#S4XRn$ooYqiaEdb`4_zUi*S|Q&Dd!{w@z%A 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 diff --git a/Demo/SuperH_SH7216_Renesas/RTOSDemo/RTOSDemo.tps b/Demo/SuperH_SH7216_Renesas/RTOSDemo/RTOSDemo.tps index 804f6fa50..750d5a659 100644 --- a/Demo/SuperH_SH7216_Renesas/RTOSDemo/RTOSDemo.tps +++ b/Demo/SuperH_SH7216_Renesas/RTOSDemo/RTOSDemo.tps @@ -12,7 +12,7 @@ "SessionSH7216_E10A-USB_SYSTEM__SH" [GENERAL_DATA_PROJECT] [GENERAL_DATA_CONFIGURATION_Debug_SH7216_E10A-USB_SYSTEM__SH] -"PROJECT_FILES_MODIFIED_DATA_TAG" "FALSE" +"PROJECT_FILES_MODIFIED_DATA_TAG" "TRUE" [SESSIONS_Debug_SH7216_E10A-USB_SYSTEM__SH] "SessionSH7216_E10A-USB_SYSTEM__SH" [GENERAL_DATA_SESSION_SessionSH7216_E10A-USB_SYSTEM__SH] diff --git a/Demo/SuperH_SH7216_Renesas/RTOSDemo/RenesasCode/compiler.h b/Demo/SuperH_SH7216_Renesas/RTOSDemo/RenesasCode/compiler.h new file mode 100644 index 000000000..99ea877b9 --- /dev/null +++ b/Demo/SuperH_SH7216_Renesas/RTOSDemo/RenesasCode/compiler.h @@ -0,0 +1,94 @@ +/****************************************************************************** +* File Name : compiler.h +* Version : 1.0 +* Device(s) : Renesas +* Tool-Chain : Renesas SH2A V9+ +* OS : None +* H/W Platform : SH2A +* Description : Compiler specific defines for abstraction +******************************************************************************* +* History : DD.MM.YYYY Ver. Description +* : 01.08.2009 1.00 MAB First Release +******************************************************************************/ + +/****************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Technology Corp. and is only +* intended for use with Renesas products. No other uses are authorized. +* This software is owned by Renesas Technology Corp. 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 +* TECHNOLOGY CORP. NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE +* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES +* FOR ANY REASON RELATED TO THE 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) 2008. Renesas Technology Corp., All Rights Reserved. */ +/* Copyright (C) 2009. Renesas Technology Europe Ltd., All Rights Reserved. */ +/*****************************************************************************/ + +#ifndef COMPILER_H_INCLUDED +#define COMPILER_H_INCLUDED + +/****************************************************************************** +Defines +******************************************************************************/ + +/* Embedded CPU data type definitions */ + +/* Set a few #defines for potential compilers used */ +#define MCS 0 /* Hitachi */ +#define GNU 1 /* Hitachi + many other devices */ +#define IAR 2 /* Hitachi + some other devices */ +#define MSV 3 /* Microsoft Visual C */ + +/* Test the compiler intrinisic defs */ +#ifdef __GNUC__ /* GNU compiler - C mode */ +#define COMPILER GNU + +#elif defined(__GNUG__) /* GNU compiler - C++ mode */ +#define COMPILER GNU + +#elif defined __IAR_SYSTEMS_ICC /* IAR compiler */ +#define COMPILER IAR + +#elif defined _MSC_VER /* Microsoft c compiler */ +#define COMPILER MSV +#else + +#define COMPILER MCS /* MCS compiler */ + /* MCS compiler has MSB first even in little + endian mode unless #pragma or command + line switch used to change it */ +#define _BITFIELDS_MSB_FIRST_ +#endif + +/****************************************************************************** +Pragma macros +******************************************************************************/ + /* Visual Cpp */ +#if COMPILER == MSV +#define PACK1 pack(1) +#define UNPACK pack() +#else + /* MCS SH & H8S series recently got unified + pragma syntax */ +#define PACK1 # ## pragma pack 1 +#define UNPACK # ## pragma unpack +#endif + +#endif /* COMPILER_H_INCLUDED */ + +/****************************************************************************** +End Of File +******************************************************************************/ diff --git a/Demo/SuperH_SH7216_Renesas/RTOSDemo/RenesasCode/hwEthernet.h b/Demo/SuperH_SH7216_Renesas/RTOSDemo/RenesasCode/hwEthernet.h new file mode 100644 index 000000000..11075f83b --- /dev/null +++ b/Demo/SuperH_SH7216_Renesas/RTOSDemo/RenesasCode/hwEthernet.h @@ -0,0 +1,152 @@ +/****************************************************************************** +* DISCLAIMER +* Please refer to http://www.renesas.com/disclaimer +****************************************************************************** + Copyright (C) 2008. Renesas Technology Corp., All Rights Reserved. +******************************************************************************* +* File Name : hwEthernet.h +* Version : 1.00 +* Description : Ethernet module device driver +****************************************************************************** +* History : DD.MM.YYYY Version Description +* : 06.10.2009 1.00 First Release +******************************************************************************/ + +#ifndef HWETHERNET_H_INCLUDED +#define HWETHERNET_H_INCLUDED + +/****************************************************************************** +Includes , "Project Includes" +******************************************************************************/ + +#include "typedefine.h" + +/****************************************************************************** +Typedef definitions +******************************************************************************/ +typedef struct Discript +{ + uint32_t status; + ushort16_t bufsize; + ushort16_t size; + char8_t *buf_p; + struct Discript *next; +} ethfifo; + +/****************************************************************************** +Macro definitions +******************************************************************************/ +#define BUFSIZE 256 +#define ENTRY 8 + +#define ACT 0x80000000 +#define DL 0x40000000 +#define FP1 0x20000000 +#define FP0 0x10000000 +#define FE 0x08000000 + +#define RFOVER 0x00000200 +#define RMAF 0x00000080 +#define RRF 0x00000010 +#define RTLF 0x00000008 +#define RTSF 0x00000004 +#define PRE 0x00000002 +#define CERF 0x00000001 + +#define ITF 0x00000010 +#define CND 0x00000008 +#define DLC 0x00000004 +#define CD 0x00000002 +#define TRO 0x00000001 + +/** + * Renesas Ethernet API return defines + **/ +#define R_ETHER_OK 0 +#define R_ETHER_ERROR -1 + + +/****************************************************************************** +Variable Externs +******************************************************************************/ + +/****************************************************************************** +Functions Prototypes +******************************************************************************/ +/** + * Renesas Ethernet API prototypes + **/ + +#ifdef __cplusplus +extern "C" { +#endif + +extern int32_t R_Ether_Open(uint32_t ch, uint8_t mac_addr[]); +extern int32_t R_Ether_Close(uint32_t ch); +extern int32_t R_Ether_Write(uint32_t ch, void *buf, uint32_t len); +extern int32_t R_Ether_Read(uint32_t ch, void *buf); + +/* Added for the FreeRTOS demo project. */ +unsigned long ulEMACRead( void ); +void vEMACWrite( void ); +void vInitEmac( void ); +long lEMACWaitForLink( void ); + +/* Extension of the API functions added to allow PnP link */ + +/* R_Ether_OpenEx opens irrispective of link status */ +extern int32_t R_Ether_OpenEx(uint32_t ch, uint8_t mac_addr[]); +/* Enables/disables operation for the current link */ +extern int32_t R_Ether_EnableEx(uint32_t ch, int iEnable); + +#ifdef __cplusplus +} +#endif + +/****************************************************/ +/* Ethernet statistic collection data */ +struct enet_stats +{ + uint32_t rx_packets; /* total packets received */ + uint32_t tx_packets; /* total packets transmitted */ + uint32_t rx_errors; /* bad packets received */ + uint32_t tx_errors; /* packet transmit problems */ + uint32_t rx_dropped; /* no space in buffers */ + uint32_t tx_dropped; /* no space available */ + uint32_t multicast; /* multicast packets received */ + uint32_t collisions; + + /* detailed rx_errors: */ + uint32_t rx_length_errors; + uint32_t rx_over_errors; /* receiver ring buffer overflow */ + uint32_t rx_crc_errors; /* recved pkt with crc error */ + uint32_t rx_frame_errors; /* recv'd frame alignment error */ + uint32_t rx_fifo_errors; /* recv'r fifo overrun */ + uint32_t rx_missed_errors; /* receiver missed packet */ + + /* detailed tx_errors */ + uint32_t tx_aborted_errors; + uint32_t tx_carrier_errors; + uint32_t tx_fifo_errors; + uint32_t tx_heartbeat_errors; + uint32_t tx_window_errors; +}; + +struct ei_device +{ + const char8_t *name; + uchar8_t open; + uchar8_t Tx_act; + uchar8_t Rx_act; + uchar8_t txing; /* Transmit Active */ + uchar8_t irqlock; /* EDMAC's interrupt disabled when '1'. */ + uchar8_t dmaing; /* EDMAC Active */ + ethfifo *rxcurrent; /* current receive discriptor */ + ethfifo *txcurrent; /* current transmit discriptor */ + uchar8_t save_irq; /* Original dev->irq value. */ + struct enet_stats stat; + uchar8_t mac_addr[6]; +}; + +#endif /* HWETHERNET_H_INCLUDED */ + diff --git a/Demo/SuperH_SH7216_Renesas/RTOSDemo/RenesasCode/hwEthernetPhy.h b/Demo/SuperH_SH7216_Renesas/RTOSDemo/RenesasCode/hwEthernetPhy.h new file mode 100644 index 000000000..d3255ee36 --- /dev/null +++ b/Demo/SuperH_SH7216_Renesas/RTOSDemo/RenesasCode/hwEthernetPhy.h @@ -0,0 +1,91 @@ +/****************************************************************************** +* File Name : hwEthernetPhy.h +* Version : 1.0 +* Device(s) : Renesas +* Tool-Chain : Renesas SH2A V9+ +* OS : None +* H/W Platform : SH2A +* Description : Hardware driver for the LAN8700 PHY +******************************************************************************* +* History : DD.MM.YYYY Ver. Description +* : 01.08.2009 1.00 MAB First Release +******************************************************************************/ + +/****************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Technology Corp. and is only +* intended for use with Renesas products. No other uses are authorized. +* This software is owned by Renesas Technology Corp. 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 +* TECHNOLOGY CORP. NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE +* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES +* FOR ANY REASON RELATED TO THE 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) 2008. Renesas Technology Corp., All Rights Reserved. */ +/* Copyright (C) 2009. Renesas Technology Europe Ltd., All Rights Reserved. */ +/*****************************************************************************/ + +#ifndef HWETHERNETPHY_H_INCLUDED +#define HWETHERNETPHY_H_INCLUDED + +/***************************************************************************** +Enumerated Types +******************************************************************************/ + +typedef enum _NETLNK +{ + PHY_NO_LINK = 0, + PHY_LINK_10H, + PHY_LINK_10F, + PHY_LINK_100H, + PHY_LINK_100F + +} NETLNK; + +/***************************************************************************** +Public Functions +******************************************************************************/ + +#ifdef __cplusplus +extern "C" { +#endif + +/***************************************************************************** +Function Name: phyReset +Description: Executes software reset of PHY and sets to auto negotiate link +Parameters: None +Return value: 0 for success -1 on error +******************************************************************************/ + +extern int phyReset(void); + +/***************************************************************************** +Function Name: phyStatus +Description: Function to reurn the type of physical link +Parameters: none +Return value: The link type +*****************************************************************************/ + +extern NETLNK phyStatus(void); + +#ifdef __cplusplus +} +#endif + +#endif /* HWETHERNETPHY_H_INCLUDED */ + +/***************************************************************************** +End Of File +******************************************************************************/ \ No newline at end of file diff --git a/Demo/SuperH_SH7216_Renesas/RTOSDemo/RenesasCode/hwEthernetPhyRTL8201.c b/Demo/SuperH_SH7216_Renesas/RTOSDemo/RenesasCode/hwEthernetPhyRTL8201.c new file mode 100644 index 000000000..8422ced48 --- /dev/null +++ b/Demo/SuperH_SH7216_Renesas/RTOSDemo/RenesasCode/hwEthernetPhyRTL8201.c @@ -0,0 +1,435 @@ +/****************************************************************************** +* File Name : hwEthernetPhy.c +* Version : 1.0 +* Device(s) : Renesas +* Tool-Chain : Renesas SH2A V9+ +* OS : None +* H/W Platform : SH2A +* Description : Hardware driver for the LAN8700 PHY +******************************************************************************* +* History : DD.MM.YYYY Ver. Description +* : 01.08.2009 1.00 MAB First Release +******************************************************************************/ + +/****************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Technology Corp. and is only +* intended for use with Renesas products. No other uses are authorized. +* This software is owned by Renesas Technology Corp. 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 +* TECHNOLOGY CORP. NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE +* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES +* FOR ANY REASON RELATED TO THE 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) 2008. Renesas Technology Corp., All Rights Reserved. */ +/* Copyright (C) 2009. Renesas Technology Europe Ltd., All Rights Reserved. */ +/*****************************************************************************/ + +/***************************************************************************** +System Includes +******************************************************************************/ + +#include +/* Header file for sleep() and nop() functions */ +#include + +/***************************************************************************** +User Includes +******************************************************************************/ + +/* Defines for I/O registers */ +#include "iodefine.h" +/* rsk7216def.h provides common defines for widely used items. */ +#include "rsk7216def.h" +/* Physical layer functions */ +#include "hwEthernetPhy.h" +#include "Trace.h" + +#include "FreeRTOS.h" +#include "task.h" + +/***************************************************************************** +Constant Macros +******************************************************************************/ + +/* Preamble */ +#define PHY_ST 0x0001 +/* Operation to be executed on PHY registers */ +#define PHY_READ 0x0002 +#define PHY_WRITE 0x0001 +/* Physical address of PHY device */ +#define PHY_ADDR 0x001F + +/* Description of PHY data registers */ +#define PHY_BASIC_MODE_CONTROL 0x0000 +#define PHY_BASIC_MODE_STATUS 0x0001 +#define PHY_IDENTIFIER1 0x0002 +#define PHY_IDENTIFIER2 0x0003 +#define PHY_AN_ADVERTISEMENT 0x0004 +#define PHY_AN_LINK_PARTNER_ABILITY 0x0005 + +/* Definitions of some configuration bits */ +#define PHY_RESET 0x8000 +#define PHY_AN_ENABLE 0x1200 +/* Bits for auto negotiation for 100, 10 half and full duplex set */ +#define PHY_AN_10_100_F_H 0xDE1 +/* Link partner ability register bits for establising the result of the + auto negotiation */ +#define PHY_AN_100F BIT_8 +#define PHY_AN_100H BIT_7 +#define PHY_AN_10F BIT_6 +#define PHY_AN_10H BIT_5 + +/***************************************************************************** +Function Prototypes +******************************************************************************/ + +static USHORT phyReadReg(USHORT usRegAddr); +static void phyWriteReg(USHORT usRegAddr, USHORT usData); +static void phyPreamble(void); +static void phyMiiWrite1(void); +static void phyMiiWrite0(void); +static void phyRegSet(USHORT usRegAddr, long lOption); +static void phyRegRead(PUSHORT pusData); +static void phyRegWrite(USHORT usData); +static void phyTaZ0(void); +static void phyTa10(void); +static void phyDelay(void); + +/***************************************************************************** +Public Functions +******************************************************************************/ + +/***************************************************************************** +Function Name: phyReset +Description: Executes software reset of PHY and sets to auto negotiate link +Parameters: None +Return value: 0 for success -1 on error +******************************************************************************/ +int phyReset(void) +{ + /* One second of attempting to reset the PHY */ + int iCount = 1000; + /* Set software reset */ + phyWriteReg(PHY_BASIC_MODE_CONTROL, PHY_RESET); + while (iCount--) + { + USHORT usData; + + vTaskDelay( 2 / portTICK_RATE_MS ); + + /* Read the status of the PHY */ + usData = phyReadReg(PHY_BASIC_MODE_CONTROL); + /* Wait for the reset flag to be cleared */ + if ((usData & PHY_RESET) == 0) + { + /* Set auto negoatiation for 10,100 full and half duplex */ + phyWriteReg(PHY_AN_ADVERTISEMENT, PHY_AN_10_100_F_H); + /* Set auto negotiate and restart auto negotiate bits */ + phyWriteReg(PHY_BASIC_MODE_CONTROL, PHY_AN_ENABLE); + + /* Auto negotiation will now take place wait for two seconds */ + vTaskDelay( 2000 / portTICK_RATE_MS ); + + /* Success */ + return 0; + } + } + /* Phy did not respond to software reset */ + return -1; +} +/***************************************************************************** +End of function phyReset + ******************************************************************************/ + +/***************************************************************************** +Function Name: phyStatus +Description: Function to reurn the type of physical link +Parameters: none +Return value: The link type +*****************************************************************************/ +NETLNK phyStatus(void) +{ + /* The state of this flag depens on the hardware connection to the MAC */ + if (!EtherC.PSR.BIT.LMON) + { + /* Read the auto negotiation link partner ability register to establish + the type of link */ + USHORT usData = phyReadReg(PHY_AN_LINK_PARTNER_ABILITY); + if (usData & PHY_AN_100F) + { + return PHY_LINK_100F; + } + if (usData & PHY_AN_100H) + { + return PHY_LINK_100H; + } + if (usData & PHY_AN_10F) + { + return PHY_LINK_10F; + } + if (usData & PHY_AN_10H) + { + return PHY_LINK_10H; + } + } + return PHY_NO_LINK; +} +/***************************************************************************** +End of function phyStatus +******************************************************************************/ + +/***************************************************************************** +Private Functions +******************************************************************************/ + +/***************************************************************************** +Function Name: phyReadReg +Description: Reads data from a register with the address usRegAddr +Parameters: (USHORT) usRegAddr - address to be read; +Return value: (USHORT) - value from read register; +******************************************************************************/ +static USHORT phyReadReg(USHORT usRegAddr) +{ + USHORT usData; + phyPreamble(); + phyRegSet(usRegAddr, PHY_READ); + phyTaZ0(); + phyRegRead(&usData); + phyTaZ0(); + return usData; +} +/***************************************************************************** +End of function phyReadReg +******************************************************************************/ + +/***************************************************************************** +Function Name: phyWriteReg +Description: Write data to register with the address usRegAddr +Parameters: (USHORT) usRegAddr - address of register where to be written; + (USHORT) usData - value to write; +Return value: None +******************************************************************************/ +static void phyWriteReg(USHORT usRegAddr, USHORT usData) +{ + phyPreamble(); + phyRegSet(usRegAddr, PHY_WRITE); + phyTa10(); + phyRegWrite(usData); + phyTaZ0(); +} +/***************************************************************************** +End of function phyWriteReg +******************************************************************************/ + +/***************************************************************************** +Function Name: phyPreamble +Description: Writing 32 bits of '1' +Parameters: None +Return value: None +******************************************************************************/ +static void phyPreamble(void) +{ + int iCount = 32; + while (iCount--) + { + phyMiiWrite1(); + } +} +/***************************************************************************** +End of function phyPreamble +******************************************************************************/ + +/***************************************************************************** +Function Name: phyRegSet +Description: Sets the address of register +Parameters: (USHORT) usRegAddr - address to be set; + (long) lOption - PHY_READ or PHY_WRITE; +Return value: None +******************************************************************************/ +static void phyRegSet(USHORT usRegAddr, long lOption) +{ + int iBit = 14; + USHORT usData; + + /* Format of PHY Address Set Transmission */ + /* ST R/W PAddress Address */ + /* 1 10 11111 xxxx 00 */ //Read + /* 1 01 11111 xxxx 00 */ //Write + + usData = 0; + /* ST code */ + usData = (PHY_ST << 14); + if (lOption == PHY_READ) + { + /* Option code (RD) */ + usData |= (PHY_READ << 12); + } + else + { + /* Option code (WT) */ + usData |= (PHY_WRITE << 12); + } + /* PHY Address */ + usData |= ((BYTE)PHY_ADDR << 7); + /* Reg Address */ + usData |= (USHORT)(usRegAddr << 2); + + while (iBit--) + { + if ((usData & 0x8000) == 0) + { + phyMiiWrite0(); + } + else + { + phyMiiWrite1(); + } + usData <<= 1; + } +} +/***************************************************************************** +End of function phyRegSet +******************************************************************************/ + +/***************************************************************************** +Function Name: phyRegRead +Description: Read data from register +Parameters: IN pusDest - value to be read; +Return value: None +******************************************************************************/ +static void phyRegRead(PUSHORT pusDest) +{ + USHORT usData = 0; + int iBit = 16; + while (iBit--) + { + EtherC.PIR.LONG = 0x00UL; + EtherC.PIR.LONG = 0x01UL; + usData <<= 1; + + /* MDI read */ + usData |= (USHORT)((EtherC.PIR.LONG & 0x08UL) >> 3); + + EtherC.PIR.LONG = 0x01UL; + EtherC.PIR.LONG = 0x00UL; + } + *pusDest = usData; +} +/***************************************************************************** +End of function phyRegRead +******************************************************************************/ + +/***************************************************************************** +Function Name: phyRegWrite +Description: Write 2 bytes (16 bit) to MII +Parameters: IN usData - value to be written; +Return value: None +******************************************************************************/ +static void phyRegWrite(USHORT usData) +{ + int iBit = 16; + while (iBit--) + { + if ((usData & 0x8000) == 0) + { + phyMiiWrite0(); + } + else + { + phyMiiWrite1(); + } + usData <<= 1; + } +} +/***************************************************************************** +End of function phyRegWrite +******************************************************************************/ + +/***************************************************************************** +Function Name: phyTaZ0 +Description: Set bus to high Z +Parameters: None +Return value: None +******************************************************************************/ +static void phyTaZ0(void) +{ + EtherC.PIR.LONG = 0x00UL; + EtherC.PIR.LONG = 0x01UL; + EtherC.PIR.LONG = 0x01UL; + EtherC.PIR.LONG = 0x00UL; +} +/***************************************************************************** +End of function phyTaZ0 +******************************************************************************/ + +/***************************************************************************** +Function Name: phyTa10 +Description: Set bus to output +Parameters: None +Return value: None +******************************************************************************/ +static void phyTa10(void) +{ + EtherC.PIR.LONG = 0x06UL; + EtherC.PIR.LONG = 0x07UL; + EtherC.PIR.LONG = 0x07UL; + EtherC.PIR.LONG = 0x06UL; + EtherC.PIR.LONG = 0x02UL; + EtherC.PIR.LONG = 0x03UL; + EtherC.PIR.LONG = 0x03UL; + EtherC.PIR.LONG = 0x02UL; +} +/***************************************************************************** +End of function phyTa10 +******************************************************************************/ + +/***************************************************************************** +Function Name: phyMiiWrite1 +Description: Write 1 to MII +Parameters: None +Return value: None +******************************************************************************/ +static void phyMiiWrite1(void) +{ + EtherC.PIR.LONG = 0x06UL; + EtherC.PIR.LONG = 0x07UL; + EtherC.PIR.LONG = 0x07UL; + EtherC.PIR.LONG = 0x06UL; +} +/***************************************************************************** +End of function phyMiiWrite1 +******************************************************************************/ + +/***************************************************************************** +Function Name: phyMiiWrite0 +Description: Write 0 to MII +Parameters: None +Return value: None +******************************************************************************/ +static void phyMiiWrite0(void) +{ + EtherC.PIR.LONG = 0x02UL; + EtherC.PIR.LONG = 0x03UL; + EtherC.PIR.LONG = 0x03UL; + EtherC.PIR.LONG = 0x02UL; +} +/***************************************************************************** +End of function phyMiiWrite0 +******************************************************************************/ + +/***************************************************************************** +End Of File +******************************************************************************/ diff --git a/Demo/SuperH_SH7216_Renesas/RTOSDemo/RenesasCode/rsk7216def.h b/Demo/SuperH_SH7216_Renesas/RTOSDemo/RenesasCode/rsk7216def.h new file mode 100644 index 000000000..e827b288d --- /dev/null +++ b/Demo/SuperH_SH7216_Renesas/RTOSDemo/RenesasCode/rsk7216def.h @@ -0,0 +1,106 @@ +/****************************************************************************** +* File Name : rsk7670def.h +* Version : 1.0 +* Device(s) : SH2A/7670 +* Tool-Chain : Renesas SH2A V9+ +* OS : None +* H/W Platform : RSK+SH7670 +* Description : Defines for RSK2+SH7670 kit. +******************************************************************************* +* History : DD.MM.YYYY Ver. Description +* : 01.08.2009 1.00 MAB First Release +******************************************************************************/ + +/****************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Technology Corp. and is only +* intended for use with Renesas products. No other uses are authorized. +* This software is owned by Renesas Technology Corp. 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 +* TECHNOLOGY CORP. NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE +* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES +* FOR ANY REASON RELATED TO THE 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) 2008. Renesas Technology Corp., All Rights Reserved. */ +/* Copyright (C) 2009. Renesas Technology Europe Ltd., All Rights Reserved. */ +/*****************************************************************************/ + +#ifndef RSK7216DEF_H +#define RSK7216DEF_H + +/****************************************************************************** +Macro Defines +******************************************************************************/ + +/* General Values */ +#define LED_ON (1) +#define LED_OFF (0) +#define SET_BIT_HIGH (1) +#define SET_BIT_LOW (0) +#define SET_BYTE_HIGH (0xFF) +#define SET_BYTE_LOW (0x00) + +/* Define switches to be polled if not available as interrupts */ +#define SW_ACTIVE FALSE + +#define SW1 PORT.PDDRL.BIT.PD16DR //"IRQ0" PD16 +#define SW2 PORT.PADRL.BIT.PA20DR //"IRQ6" PA20 + + +/* LEDs */ +#define LED0 PE.DR.BIT.B9 +#define LED1 PE.DR.BIT.B11 +#define LED2 PE.DR.BIT.B12 +#define LED3 PE.DR.BIT.B13 +#define LED4 PE.DR.BIT.B14 +#define LED5 PE.DR.BIT.B15 + +#define ID_LED1 1 +#define ID_LED2 2 +#define ID_LED3 4 +#define ID_LED4 8 +#define ID_LED5 16 +#define ID_LED6 32 +#define ID_LED_ALL (ID_LED1 | ID_LED2 | ID_LED3 | ID_LED4 | ID_LED5 | ID_LED6) + +#define PERIPHERAL_CLOCK_FREQUENCY 50000000UL + +/****************************************************************************** +Constant Macros +******************************************************************************/ + +#define BOARD_NAME "SH7216 CPU BOARD" + +/****************************************************************************** +Public Functions +******************************************************************************/ + +#ifdef __cplusplus +extern "C" { +#endif + +extern void led_init(void); +extern void led_on(unsigned short ledno); +extern void led_off(unsigned short ledno); + +#ifdef __cplusplus +} +#endif + +#endif /* RSK7216DEF_H */ + +/****************************************************************************** +End Of File +******************************************************************************/ \ No newline at end of file diff --git a/Demo/SuperH_SH7216_Renesas/RTOSDemo/RenesasCode/trace.h b/Demo/SuperH_SH7216_Renesas/RTOSDemo/RenesasCode/trace.h new file mode 100644 index 000000000..2a2998bc1 --- /dev/null +++ b/Demo/SuperH_SH7216_Renesas/RTOSDemo/RenesasCode/trace.h @@ -0,0 +1,104 @@ +/****************************************************************************** +* File Name : trace.h +* Version : 1.0 +* Device(s) : Renesas +* Tool-Chain : Renesas SH2A V9+ +* OS : None +* H/W Platform : SH2A +* Description : Debug formatted output routine +* TRACE print function enabled with define _TRACE_ON_ +******************************************************************************* +* History : DD.MM.YYYY Ver. Description +* : 01.08.2009 1.00 MAB First Release +******************************************************************************/ + +/****************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Technology Corp. and is only +* intended for use with Renesas products. No other uses are authorized. +* This software is owned by Renesas Technology Corp. 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 +* TECHNOLOGY CORP. NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE +* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES +* FOR ANY REASON RELATED TO THE 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) 2008. Renesas Technology Corp., All Rights Reserved. */ +/* Copyright (C) 2009. Renesas Technology Europe Ltd., All Rights Reserved. */ +/*****************************************************************************/ + +#ifndef TRACE_H_INCLUDED +#define TRACE_H_INCLUDED + +/****************************************************************************** +User Includes +******************************************************************************/ + +#include "types.h" + +/****************************************************************************** +Function Macros +******************************************************************************/ + +/* Some function macros for TRACE output + NOTE: debugging TRACE statements require double braces + so the debug strings can be removed from the output load module: + TRACE(("My Variable = %u\r\n", uiMyVariable)); + See ANSI C formatted output for more detail on the format specifiers */ + +#ifdef _TRACE_ON_ /* Trace ON */ +#define TRACE(_x_) Trace _x_ +#else /* _NO_TRACE_ON_ */ +#define TRACE(_x_) /* TRACE REMOVED */ +#endif /* _TRACE_ON_ */ + +/****************************************************************************** +Public Functions +******************************************************************************/ + +#ifdef __cplusplus +extern "C" { +#endif + +/****************************************************************************** +Function Name: Trace +Description: Function to perform a formatted print output for debugging +Parameters: IN pszFormat - Pointer to a null terminated format string + I/O ... - The parameters +Return value: The number of chars output +******************************************************************************/ +#ifdef _TRACE_ON_ /* Trace ON */ +extern int Trace(const char *pszFormat, ...); +#endif + +/****************************************************************************** +Function Name: dbgPrintBuffer +Description: Function to print a data buffer in hex format +Parameters: IN pbyBuffer - Pointer to the buffer + IN stLength - The length of the buffer +Return value: none +******************************************************************************/ +#ifdef _TRACE_ON_ /* Trace ON */ +extern void dbgPrintBuffer(PBYTE pbyBuffer, size_t stLength); +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* TRACE_H_INCLUDED */ + +/****************************************************************************** +End Of File +******************************************************************************/ \ No newline at end of file diff --git a/Demo/SuperH_SH7216_Renesas/RTOSDemo/RenesasCode/types.h b/Demo/SuperH_SH7216_Renesas/RTOSDemo/RenesasCode/types.h new file mode 100644 index 000000000..0d76ab53a --- /dev/null +++ b/Demo/SuperH_SH7216_Renesas/RTOSDemo/RenesasCode/types.h @@ -0,0 +1,476 @@ +/****************************************************************************** +* File Name : types.h +* Version : 1.0 +* Device(s) : Renesas +* Tool-Chain : Renesas SH2A V9+ +* OS : None +* H/W Platform : SH2A +* Description : User Defined Type Definition File +******************************************************************************* +* History : DD.MM.YYYY Ver. Description +* : 01.08.2009 1.00 MAB First Release +******************************************************************************/ + +/****************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Technology Corp. and is only +* intended for use with Renesas products. No other uses are authorized. +* This software is owned by Renesas Technology Corp. 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 +* TECHNOLOGY CORP. NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE +* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES +* FOR ANY REASON RELATED TO THE 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) 2008. Renesas Technology Corp., All Rights Reserved. */ +/* Copyright (C) 2009. Renesas Technology Europe Ltd., All Rights Reserved. */ +/*****************************************************************************/ + +#ifndef TYPES_H_INCLUDED +#define TYPES_H_INCLUDED + +/****************************************************************************** +User Includes +******************************************************************************/ + +#include "Compiler.h" + +/****************************************************************************** +Function Macros +******************************************************************************/ + +#ifndef SWAPWORD +#define SWAPWORD(x) (WORD)((((x) & 0xFF) << 8) | (((x) >> 8) & 0xFF)) +#endif + +#ifndef LOBYTE +#define LOBYTE(x) (BYTE)(x) +#endif + +#ifndef HIBYTE +#define HIBYTE(x) (BYTE)((x) >> 8) +#endif + +#ifndef MAKEWORD +#define MAKEWORD(a, b) ((WORD) (((BYTE) (a)) |\ + ((WORD) ((BYTE) (b))) << 8)) +#endif + +/****************************************************************************** +Typedefs +******************************************************************************/ + +/* Generic definitions */ +#ifndef NULL /* set null ((void *)0) */ +#define NULL 0 +#endif + +#ifndef PNULL +#define PNULL ((PVOID)0) +#endif + +#ifndef BIT_0 /* set bits */ +#define BIT_0 0x1 +#define BIT_1 0x2 +#define BIT_2 0x4 +#define BIT_3 0x8 +#define BIT_4 0x10 +#define BIT_5 0x20 +#define BIT_6 0x40 +#define BIT_7 0x80 + +#define BIT_8 0x100 +#define BIT_9 0x200 +#define BIT_10 0x400 +#define BIT_11 0x800 +#define BIT_12 0x1000 +#define BIT_13 0x2000 +#define BIT_14 0x4000 +#define BIT_15 0x8000 + +#define BIT_16 0x10000L +#define BIT_17 0x20000L +#define BIT_18 0x40000L +#define BIT_19 0x80000L +#define BIT_20 0x100000L +#define BIT_21 0x200000L +#define BIT_22 0x400000L +#define BIT_23 0x800000L + +#define BIT_24 0x1000000L +#define BIT_25 0x2000000L +#define BIT_26 0x4000000L +#define BIT_27 0x8000000L +#define BIT_28 0x10000000L +#define BIT_29 0x20000000L +#define BIT_30 0x40000000L +#define BIT_31 0x80000000L +#endif + +#ifndef TRUE /* true and false */ +#define TRUE (BOOL)1 +#endif + +#ifndef FALSE +#define FALSE (BOOL)0 +#endif + +#if defined(WIN32_SH4) && defined(__cplusplus) +#define _SIZE_T +#else +#ifndef _SIZE_T +#define _SIZE_T +typedef unsigned long size_t; +#endif +#endif + +#ifndef BOOL +#define BOOL BOOL +typedef unsigned char BOOL; +#endif + +#ifndef PBOOL +#define PBOOL PBOOL +typedef unsigned char *PBOOL; +#endif + +#ifndef TCHAR +#define TCHAR TCHAR +typedef char TCHAR; +#endif + +#ifndef PTCHAR +#define PTCHAR PTCHAR +typedef char *PTCHAR; +#endif + +#ifndef PCTCHAR +#define PCTCHAR PCTCHAR +typedef char *const PCTCHAR; +#endif + +#ifndef CPCTCHAR +#define CPCTCHAR CPCTCHAR +typedef const char *const CPCTCHAR; +#endif + +#ifndef CHAR +#define CHAR CHAR +typedef char CHAR; +#endif + +#ifndef CCHAR +#define CCHAR CCHAR +typedef const char CCHAR; +#endif + +#ifndef PCHAR +#define PCHAR PCHAR +typedef char *PCHAR; +#endif + +#ifndef CPCHAR +#define CPCHAR CPCHAR +typedef const char *CPCHAR; +#endif + +#ifndef PCCHAR +#define PCCHAR PCCHAR +typedef char *const PCCHAR; +#endif + +#ifndef CPCCHAR +#define CPCCHAR CPCCHAR +typedef const char *const CPCCHAR; +#endif + +#ifndef PTSTR +#define PTSTR PTSTR +typedef const char *PTSTR; +#endif + +#ifndef PCTSTR +#define PCTSTR PCTSTR +typedef char *const PCTSTR; +#endif + +#ifndef PCTSTR +#define PCTSTR PCTSTR +typedef const char *PCTSTR; +#endif + +#ifndef PTSTR +#define PTSTR PTSTR +typedef char *PTSTR; +#endif + +#ifndef BYTE +#define BYTE BYTE +typedef unsigned char BYTE; +#endif + +#ifndef PBYTE +#define PBYTE PBYTE +typedef unsigned char *PBYTE; +#endif + +#ifndef PCBYTE +#define PCBYTE PCBYTE +typedef unsigned char *const PCBYTE; +#endif + +#ifndef CPBYTE +#define CPBYTE CPBYTE +typedef const unsigned char *CPBYTE; +#endif + +#ifndef SHORT +#define SHORT SHORT +typedef short SHORT; +#endif + +#ifndef PSHORT +#define PSHORT PSHORT +typedef short *PSHORT; +#endif + +#ifndef PCSHORT +#define PCSHORT PCSHORT +typedef short *const PCSHORT; +#endif + +#ifndef CPSHORT +#define CPSHORT CPSHORT +typedef const short *CPSHORT; +#endif + +#ifndef USHORT +#define USHORT USHORT +typedef unsigned short USHORT; +#endif + +#ifndef PUSHORT +#define PUSHORT PUSHORT +typedef unsigned short *PUSHORT; +#endif + +#ifndef PCUSHORT +#define PCUSHORT PCUSHORT +typedef unsigned short *const PCUSHORT; +#endif + +#ifndef CPUSHORT +#define CPUSHORT CPUSHORT +typedef const unsigned short *CPUSHORT; +#endif + +#ifndef WORD +#define WORD WORD +typedef unsigned short WORD; +#endif + +#ifndef PWORD +#define PWORD PWORD +typedef unsigned short *PWORD; +#endif + +#ifndef PCWORD +#define PCWORD PCWORD +typedef unsigned short *const PCWORD; +#endif + +#ifndef INT +#define INT INT +typedef int INT; +#endif + +#ifndef CINT +#define CINT CINT +typedef const int CINT; +#endif + +#ifndef PINT +#define PINT PINT +typedef int *PINT; +#endif + +#ifndef PCINT +#define PCINT PCINT +typedef int *const PCINT; +#endif + +#ifndef CPINT +#define CPINT CPINT +typedef const int *CPINT; +#endif + +#ifndef UINT +#define UINT UINT +typedef unsigned int UINT; +#endif + +#ifndef PUINT +#define PUINT PUINT +typedef unsigned int *PUINT; +#endif + +#ifndef PCUINT +#define PCUINT PCUINT +typedef unsigned int *const PCUINT; +#endif + +#ifndef CPUINT +#define CPUINT CPUINT +typedef const unsigned int *CPUINT; +#endif + +#ifndef DWORD +#define DWORD DWORD +typedef unsigned long DWORD; +#endif + +#ifndef PDWORD +#define PDWORD PDWORD +typedef unsigned long *PDWORD; +#endif + +#ifndef PCDWORD +#define PCDWORD PCDWORD +typedef unsigned long *const PCDWORD; +#endif + +#ifndef CPDWORD +#define CPDWORD CPDWORD +typedef const unsigned long *CPDWORD; +#endif + +#ifndef LONG +#define LONG LONG +typedef long LONG; +#endif + +#ifndef PLONG +#define PLONG PLONG +typedef long *PLONG; +#endif + +#ifndef PCLONG +#define PCLONG PCLONG +typedef long *const PCLONG; +#endif + +#ifndef CPLONG +#define CPLONG CPLONG +typedef const long *CPLONG; +#endif + +#ifndef ULONG +#define ULONG ULONG +typedef unsigned long ULONG; +#endif + +#ifndef PULONG +#define PULONG PULONG +typedef unsigned long *PULONG; +#endif + +#ifndef PCULONG +#define PCULONG PCULONG +typedef unsigned long *const PCULONG; +#endif + +#ifndef CPULONG +#define CPULONG CPULONG +typedef const unsigned long *CPULONG; +#endif + +#ifndef FLOAT +#define FLOAT FLOAT +typedef float FLOAT; +#endif + +#ifndef DOUBLE +#define DOUBLE DOUBLE +typedef long double DOUBLE; +#endif + +#ifndef PDOUBLE +#define PDOUBLE PDOUBLE +typedef long double *PDOUBLE; +#endif + +#ifndef CPDOUBLE +#define CPDOUBLE CPDOUBLE +typedef const long double *CPDOUBLE; +#endif + +#ifndef PCDOUBLE +#define PCDOUBLE PCDOUBLE +typedef long double *const PCDOUBLE; +#endif + +#ifndef PVOID +#define PVOID PVOID +typedef void *PVOID; +#endif + +#ifndef VOID +#define VOID VOID +typedef void VOID; +#endif + +#ifndef IOID +#define IOID IOID +typedef unsigned short IOID; +#endif + +#ifndef PIOID +#define PIOID PIOID +typedef unsigned short *PIOID; +#endif + +#ifndef BBYTE +#define BBYTE BBYTE +typedef union { + unsigned char BYTE; /*lint -e46 */ + /* this is correct */ + struct { + #ifdef _BITFIELDS_MSB_FIRST_ + unsigned char B7:1; + unsigned char B6:1; + unsigned char B5:1; + unsigned char B4:1; + unsigned char B3:1; + unsigned char B2:1; + unsigned char B1:1; + unsigned char B0:1; + #else + unsigned char B0:1; + unsigned char B1:1; + unsigned char B2:1; + unsigned char B3:1; + unsigned char B4:1; + unsigned char B5:1; + unsigned char B6:1; + unsigned char B7:1; + #endif + } BIT; +} BBYTE; +#endif + +#endif /* TYPES_H_INCLUDED */ + +/****************************************************************************** +End Of File +******************************************************************************/ diff --git a/Demo/SuperH_SH7216_Renesas/RTOSDemo/SessionSH7216_E10A-USB_SYSTEM__SH.hsf b/Demo/SuperH_SH7216_Renesas/RTOSDemo/SessionSH7216_E10A-USB_SYSTEM__SH.hsf index 63430238a..657f77a7b 100644 --- a/Demo/SuperH_SH7216_Renesas/RTOSDemo/SessionSH7216_E10A-USB_SYSTEM__SH.hsf +++ b/Demo/SuperH_SH7216_Renesas/RTOSDemo/SessionSH7216_E10A-USB_SYSTEM__SH.hsf @@ -8,13 +8,45 @@ "" [GENERAL_DATA] "FIRST_CONNECTION_TAG" "NO" -"MRULABELS_DATAMANAGER_KEY" "FFFFFFFF|00000000|fff80688" +"MRULABELS_DATAMANAGER_KEY" "FFFFFFFF|00000000|fff80300|fff80688" "RESET_CPU_AFTER_DOWNLOAD_TAG" "VARIANT_FALSE_STORE_TAG" "{08009853-4189-4ADA-848F-0F1A84AFE443}MonitorCtrlLabelAddress" "" "{08009853-4189-4ADA-848F-0F1A84AFE443}MonitorCtrlMonitorLastSaveLogDirectory" "" "{08009853-4189-4ADA-848F-0F1A84AFE443}MonitorCtrlViews" "0" "{287A8023-99B5-49E1-A54E-4DDCA43D7959}MapCtrlECX_MAP_FIND_SYMBOL_LIST" "" "{287A8023-99B5-49E1-A54E-4DDCA43D7959}MapCtrlViews" "0" +"{287A8023-99B5-49E1-A54E-4DDCA43D7959}MapCtrlViewsSCT" "1" +"{287A8023-99B5-49E1-A54E-4DDCA43D7959}MapCtrlViewsSYM" "0" +"{287A8023-99B5-49E1-A54E-4DDCA43D7959}MapSctListWnd0ColWidth0" "124" +"{287A8023-99B5-49E1-A54E-4DDCA43D7959}MapSctListWnd0ColWidth1" "156" +"{287A8023-99B5-49E1-A54E-4DDCA43D7959}MapSctListWnd0ColWidth2" "132" +"{287A8023-99B5-49E1-A54E-4DDCA43D7959}MapSctListWnd0ColWidth3" "129" +"{287A8023-99B5-49E1-A54E-4DDCA43D7959}MapSctListWnd0ColWidth4" "84" +"{287A8023-99B5-49E1-A54E-4DDCA43D7959}MapSctSetTreeWnd0Exp0" "1" +"{287A8023-99B5-49E1-A54E-4DDCA43D7959}MapSctSetTreeWnd0Exp1" "1" +"{287A8023-99B5-49E1-A54E-4DDCA43D7959}MapSctSetTreeWnd0Exp10" "0" +"{287A8023-99B5-49E1-A54E-4DDCA43D7959}MapSctSetTreeWnd0Exp11" "1" +"{287A8023-99B5-49E1-A54E-4DDCA43D7959}MapSctSetTreeWnd0Exp12" "0" +"{287A8023-99B5-49E1-A54E-4DDCA43D7959}MapSctSetTreeWnd0Exp13" "1" +"{287A8023-99B5-49E1-A54E-4DDCA43D7959}MapSctSetTreeWnd0Exp14" "0" +"{287A8023-99B5-49E1-A54E-4DDCA43D7959}MapSctSetTreeWnd0Exp15" "1" +"{287A8023-99B5-49E1-A54E-4DDCA43D7959}MapSctSetTreeWnd0Exp16" "0" +"{287A8023-99B5-49E1-A54E-4DDCA43D7959}MapSctSetTreeWnd0Exp17" "1" +"{287A8023-99B5-49E1-A54E-4DDCA43D7959}MapSctSetTreeWnd0Exp18" "0" +"{287A8023-99B5-49E1-A54E-4DDCA43D7959}MapSctSetTreeWnd0Exp19" "0" +"{287A8023-99B5-49E1-A54E-4DDCA43D7959}MapSctSetTreeWnd0Exp2" "0" +"{287A8023-99B5-49E1-A54E-4DDCA43D7959}MapSctSetTreeWnd0Exp20" "1" +"{287A8023-99B5-49E1-A54E-4DDCA43D7959}MapSctSetTreeWnd0Exp21" "0" +"{287A8023-99B5-49E1-A54E-4DDCA43D7959}MapSctSetTreeWnd0Exp3" "1" +"{287A8023-99B5-49E1-A54E-4DDCA43D7959}MapSctSetTreeWnd0Exp4" "0" +"{287A8023-99B5-49E1-A54E-4DDCA43D7959}MapSctSetTreeWnd0Exp5" "1" +"{287A8023-99B5-49E1-A54E-4DDCA43D7959}MapSctSetTreeWnd0Exp6" "0" +"{287A8023-99B5-49E1-A54E-4DDCA43D7959}MapSctSetTreeWnd0Exp7" "1" +"{287A8023-99B5-49E1-A54E-4DDCA43D7959}MapSctSetTreeWnd0Exp8" "0" +"{287A8023-99B5-49E1-A54E-4DDCA43D7959}MapSctSetTreeWnd0Exp9" "1" +"{287A8023-99B5-49E1-A54E-4DDCA43D7959}MapSctSetTreeWnd0ScrollHorz" "0" +"{287A8023-99B5-49E1-A54E-4DDCA43D7959}MapSctSetTreeWnd0ScrollVert" "0" +"{287A8023-99B5-49E1-A54E-4DDCA43D7959}MapSctSetTreeWndInstanceKey0" "{WK_00000001_MAPSCT}RTOSDemoSessionSH7216_E10A-USB_SYSTEM__SH" "{2BA6A3EE-6488-11D5-80D4-00C04F68EAD7}ECXLABEL_ADDDLG_ADDR" "" "{2BA6A3EE-6488-11D5-80D4-00C04F68EAD7}LabelCtrlSymbolFileDir" "" "{2BA6A3EE-6488-11D5-80D4-00C04F68EAD7}LabelCtrlSymbolFileName" "" @@ -43,11 +75,11 @@ "{313F4FC1-6566-11D5-8BBE-0004E2013C71}CmdLineCtrlSplitterPosition" "242" "{313F4FC1-6566-11D5-8BBE-0004E2013C71}CmdLineCtrlViews" "1" "{313F4FC1-6566-11D5-8BBE-0004E2013C71}CmdLineCtrlWindowProperties" "17" -"{313F4FC1-6566-11D5-8BBE-0004E2013C71}CmdLineWndInstanceKey0" "{WK_00000001_CmdLine}RTOSDemoSessionSH7216_E10A-USB_SYSTEM__SH" +"{313F4FC1-6566-11D5-8BBE-0004E2013C71}CmdLineWndInstanceKey0" "{WK_00000001_CmdLine}" "{313F4FC1-6566-11D5-8BBE-0004E2013C71}TclTkCtrlLogFileName" "" "{313F4FC2-6566-11D5-8BBE-0004E2013C71}ECX_MEMORY_COMPARE_END_ADDRESS" "" "{313F4FC2-6566-11D5-8BBE-0004E2013C71}ECX_MEMORY_COMPARE_START_ADDRESS" "" -"{313F4FC2-6566-11D5-8BBE-0004E2013C71}ECX_MEMORY_DISPLAY_DEST_ADDRESS" "fff80688" +"{313F4FC2-6566-11D5-8BBE-0004E2013C71}ECX_MEMORY_DISPLAY_DEST_ADDRESS" "fff80300" "{313F4FC2-6566-11D5-8BBE-0004E2013C71}ECX_MEMORY_DISPLAY_END_ADDRESS" "FFFFFFFF" "{313F4FC2-6566-11D5-8BBE-0004E2013C71}ECX_MEMORY_DISPLAY_START_ADDRESS" "00000000" "{313F4FC2-6566-11D5-8BBE-0004E2013C71}ECX_MEMORY_FILL_END_ADDRESS" "" @@ -80,8 +112,8 @@ "{8A898260-6F1D-11D5-8EB6-00004CC34E9D}ECX_WAVE_COMB_BUFFER" ",,,," "{8A898260-6F1D-11D5-8EB6-00004CC34E9D}ECX_WAVE_SAMPLING_RATE" "1000" "{8A898260-6F1D-11D5-8EB6-00004CC34E9D}WaveformCtrlViews" "0" -"{95A081A1-7001-11D5-B1FD-00A0C9E23A58}RegistersCtrlViews" "1" -"{95A081A1-7001-11D5-B1FD-00A0C9E23A58}RegistersWnd0ColumnWidth" "50,456,35" +"{95A081A1-7001-11D5-B1FD-00A0C9E23A58}RegistersCtrlViews" "0" +"{95A081A1-7001-11D5-B1FD-00A0C9E23A58}RegistersWnd0ColumnWidth" "50,171,144" "{95A081A1-7001-11D5-B1FD-00A0C9E23A58}RegistersWnd0ECX_REGISTER_COUNT" "82" "{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,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,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1" "{95A081A1-7001-11D5-B1FD-00A0C9E23A58}RegistersWnd0HideFLAGs" "1" @@ -108,24 +140,29 @@ "{AC411480-6F0A-11D5-8EB6-00004CC34E9D}ECX_IMAGE_VIEW" "0,0,0,0,0,0" "{AC411480-6F0A-11D5-8EB6-00004CC34E9D}ImageCtrlViews" "0" "{B266D880-6FA1-11D5-8613-00A024591A38}WatchCtrlViews" "4" -"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd0ColWidth0" "198" -"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd0ColWidth1" "150" +"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd0ColWidth0" "175" +"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd0ColWidth1" "341" "{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd0ColWidth12" "150" "{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd0ColWidth2" "120" "{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd0ColWidth3" "200" "{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd0ECX_WATCH_ITEM0000" "pxCurrentTCB, 4, 0, P, Col, Hex, MN" "{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd0ECX_WATCH_ITEM0000_SCOPE" "Current Scope," -"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd0ECX_WATCH_ITEM0001" "*pulFlopBuffer, 10, 0, P, Col, Hex, N" +"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd0ECX_WATCH_ITEM0001" "xCurrentRxDesc, 10, 0, P, Col, Hex, N" "{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd0ECX_WATCH_ITEM0001_SCOPE" "Current Scope," -"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd0ECX_WATCH_ITEM0002" "*pusTaskCheckVariable, 10, 0, P, Col, Hex, N" +"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd0ECX_WATCH_ITEM0002" "uip_len, 2, 0, P, Col, Hex, MN" "{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd0ECX_WATCH_ITEM0002_SCOPE" "Current Scope," -"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd0ECX_WATCH_ITEM0003" "xGenericListItem, 11, 0, C0001, Col, Hex, N" -"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd0ECX_WATCH_ITEM0004" "xEventListItem, 11, 0, C0001, Col, Hex, N" -"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd0ECX_WATCH_ITEM0005" "uxPriority, 2, 0, C0001, Col, Hex, N" -"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd0ECX_WATCH_ITEM0006" "pxStack, 4, 0, C0001, Col, Hex, N" -"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd0ECX_WATCH_ITEM0007" "pcTaskName, 6, 0, C0001, Col, Hex, N" -"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd0ECX_WATCH_ITEM0008" "uxCriticalNesting, 2, 0, C0001, Col, Hex, N" -"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd0ECX_WATCH_ITEMCnt" "3" +"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd0ECX_WATCH_ITEM0003" "uip_buf[21], 2, 0, P, Col, Hex, MN" +"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd0ECX_WATCH_ITEM0003_SCOPE" "Current Scope," +"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd0ECX_WATCH_ITEM0004" "xEventListItem, 11, 0, C0001, Col, Hex, MN" +"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd0ECX_WATCH_ITEM0005" "uxPriority, 2, 0, C0001, Col, Hex, MN" +"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd0ECX_WATCH_ITEM0006" "pxStack, 4, 0, C0001, Col, Hex, MN" +"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd0ECX_WATCH_ITEM0007" "pcTaskName, 6, 0, C0001, Col, Hex, MN" +"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd0ECX_WATCH_ITEM0008" "uxCriticalNesting, 2, 0, C0001, Col, Hex, MN" +"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd0ECX_WATCH_ITEM0009" "uxTCBNumber, 2, 0, C0001, Col, Hex, MN" +"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd0ECX_WATCH_ITEM0010" "uxBasePriority, 2, 0, C0001, Col, Hex, MN" +"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd0ECX_WATCH_ITEM0011" "pxTaskTag, 9, 0, C0001, Col, Hex, N" +"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd0ECX_WATCH_ITEM0012" "ulRunTimeCounter, 2, 0, C0001, Col, Hex, MN" +"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd0ECX_WATCH_ITEMCnt" "0" "{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd1ColWidth0" "120" "{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd1ColWidth1" "150" "{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd1ColWidth12" "150" @@ -150,7 +187,7 @@ "{B266D880-6FA1-11D5-8613-00A024591A38}WatchWndRecentFile_WatchSave" "" "{B266D880-6FA1-11D5-8613-00A024591A38}WatchWndUpdate_Interval" "100" "{CBEBB610-1516-11D4-8F2D-00409545B67B}ElfDwarf2Objects" "1" -"{CBEBB610-1516-11D4-8F2D-00409545B67B}LoadModule0OBJ_ELFDWARF2_ARRAY_EXPAND_LIMIT" "1000" +"{CBEBB610-1516-11D4-8F2D-00409545B67B}LoadModule0OBJ_ELFDWARF2_ARRAY_EXPAND_LIMIT" "-1" "{CBEBB610-1516-11D4-8F2D-00409545B67B}LoadModule0OBJ_ELFDWARF2_STATIC_MEM_EXPAND" "1" "{D293FA15-461F-4D9F-B9C9-64724B3409F9}T_COLUMN_BC0_1" "0,0,0,0,0,0," "{D293FA15-461F-4D9F-B9C9-64724B3409F9}T_COLUMN_BC0_2" "" @@ -242,54 +279,54 @@ "{D293FA15-461F-4D9F-B9C9-64724B3409F9}T_TRACE_TRACE_ACQUISITION2" "1,0,1,1,1,1,1,0,0,0,0,0,0" "{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_EVAL_DENORMAL_MODE" "16777216" "{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_EVAL_ROUND_MODE" "768" -"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_0" "0000000000000020" -"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_1" "00000000000C0001" +"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_0" "000000000000003C" +"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_1" "00000000FFE7FFFF" "{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_10" "000000000000000A" "{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_11" "000000000000000B" -"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_12" "000000000000000C" -"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_13" "00000000FFE7FFFF" -"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_14" "0000000000000000" -"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_15" "00000000FFF869AC" -"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_16" "0000000000001ABA" -"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_17" "0000000000000001" -"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_18" "0000000000000075" +"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_12" "00000000FFF8B38E" +"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_13" "0000000000000000" +"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_14" "000000000000000A" +"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_15" "00000000FFF87AAC" +"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_16" "00000000000027B2" +"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_17" "0000000000000000" +"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_18" "0000000000000012" "{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_19" "0000000000000000" -"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_2" "0000000000004EB8" +"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_2" "0000000000000007" "{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_20" "0000000000000000" "{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_21" "0000000000000011" "{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_22" "0000000000000010" -"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_23" "000000000000000F" -"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_24" "0000000000000000" -"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_25" "00000000000C1005" +"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_23" "00000000000026A8" +"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_24" "0000000000000009" +"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_25" "0000000000041005" "{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_26" "0000000000000000" "{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_27" "0000000000000000" -"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_28" "00000000C0000034" -"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_29" "00000000CCCCCCCD" -"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_3" "00000000000C0005" -"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_30" "00000000C0785614" -"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_31" "000000007AE147AE" -"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_32" "0000000040DFBC8C" -"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_33" "00000000CCCCCCCD" -"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_34" "00000000BF8889CD" -"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_35" "00000000574CE48D" +"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_28" "00000000406FD2A7" +"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_29" "00000000EF9DB22B" +"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_3" "00000000000073A6" +"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_30" "0000000000000000" +"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_31" "0000000000000000" +"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_32" "0000000040283EF9" +"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_33" "00000000DB22D0E5" +"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_34" "000000004055371A" +"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_35" "000000009FBE76C8" "{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_36" "0000000000000000" "{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_37" "0000000000000000" -"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_38" "00000000C0000034" -"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_39" "000000006DC5D639" -"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_4" "00000000FFF88166" -"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_40" "000000003F50624D" -"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_41" "00000000D2F1A9FC" +"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_38" "0000000000000000" +"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_39" "0000000000000000" +"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_4" "00000000FFF88334" +"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_40" "0000000000000000" +"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_41" "0000000000000000" "{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_42" "0000000000000000" -"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_43" "C0000034CCCCCCCD" -"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_44" "C07856147AE147AE" -"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_45" "40DFBC8CCCCCCCCD" -"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_46" "BF8889CD574CE48D" +"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_43" "406FD2A7EF9DB22B" +"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_44" "0000000000000000" +"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_45" "40283EF9DB22D0E5" +"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_46" "4055371A9FBE76C8" "{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_47" "0000000000000000" -"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_48" "C00000346DC5D639" -"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_49" "3F50624DD2F1A9FC" -"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_5" "0000000000041005" -"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_6" "0000000000080000" -"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_7" "0000000000040005" +"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_48" "0000000000000000" +"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_49" "0000000000000000" +"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_5" "0000000000000009" +"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_6" "0000000000041005" +"{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_7" "00000000FFF8785C" "{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_8" "0000000000000008" "{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_9" "0000000000000009" "{D34C8080-5A99-11D5-B1FD-00A0C9E23A58}C_REGISTER_REG_COUNT" "50" @@ -404,15 +441,17 @@ [WINDOW_POSITION_STATE_DATA_VD1] "Help" "TOOLBAR 0" 59419 1 5 "0.00" 0 0 0 0 0 17 0 "" "0.0" "{WK_00000001_CmdLine}RTOSDemoSessionSH7216_E10A-USB_SYSTEM__SH" "WINDOW" 59422 0 0 "0.23" 220 0 0 350 200 17 0 "32771|32772|32778|<>|32773|32774|<>|32820|<>|32801|32824" "0.0" +"{WK_00000001_CmdLine}" "WINDOW" 59422 0 1 "0.08" 361 0 0 350 200 17 0 "32771|32772|32778|<>|32773|32774|<>|32820|<>|32801|32824" "0.0" "{WK_00000001_DISASSEMBLY}" "WINDOW" 0 0 0 "0.00" 0 -4 -23 892 659 9 0 "" "0.0" "{WK_00000001_EVENT}RTOSDemoSessionSH7216_E10A-USB_SYSTEM__SH" "WINDOW" 59422 0 0 "0.50" 292 0 0 350 200 2065 0 "32774|32775|32777|<>|32780|<>" "0.0" -"{WK_00000001_IO}RTOSDemoSessionSH7216_E10A-USB_SYSTEM__SH" "WINDOW" 59422 0 3 "0.31" 220 0 0 350 200 17 0 "32817|32826|32819|32820|32821" "0.0" -"{WK_00000001_MEMORY}RTOSDemoSessionSH7216_E10A-USB_SYSTEM__SH" "WINDOW" 59422 0 0 "0.60" 219 0 0 350 200 2065 0 "42202|42203|42204|42233|<>|42206|42205|42230|42229|42207|<>|42208|42209|42210|49076|42228|42227|<>|42231|42232|42234|42235|<>|42211|<>" "0.0" -"{WK_00000001_OUTPUT}" "WINDOW" 59422 0 1 "1.00" 220 560 340 350 200 18 0 "36756|36757|36758|36759|<>|36746|36747|<>|39531|<>|39500|39534|<>|36687" "0.0" -"{WK_00000001_REGISTERS}RTOSDemoSessionSH7216_E10A-USB_SYSTEM__SH" "WINDOW" 59421 0 0 "1.00" 374 0 0 350 200 18 0 "" "0.0" +"{WK_00000001_IO}RTOSDemoSessionSH7216_E10A-USB_SYSTEM__SH" "WINDOW" 59422 0 3 "0.31" 361 0 0 350 200 17 0 "32817|32826|32819|32820|32821" "0.0" +"{WK_00000001_MAPSCT}RTOSDemoSessionSH7216_E10A-USB_SYSTEM__SH" "WINDOW" 59422 0 0 "0.86" 316 0 0 350 200 2065 0 "32812|<>|32813|32814|<>|32816|<>|32822|32821|<>|32796|32797|<>|32833|<>|32825|32829|<>|32852" "31.7" +"{WK_00000001_MEMORY}RTOSDemoSessionSH7216_E10A-USB_SYSTEM__SH" "WINDOW" 59422 0 0 "0.46" 322 0 0 350 200 2065 0 "42202|42203|42204|42233|<>|42206|42205|42230|42229|42207|<>|42208|42209|42210|49076|42228|42227|<>|42231|42232|42234|42235|<>|42211|<>" "0.0" +"{WK_00000001_OUTPUT}" "WINDOW" 59422 0 2 "0.69" 361 560 340 350 200 18 0 "36756|36757|36758|36759|<>|36746|36747|<>|39531|<>|39500|39534|<>|36687" "0.0" +"{WK_00000001_REGISTERS}RTOSDemoSessionSH7216_E10A-USB_SYSTEM__SH" "WINDOW" 59421 0 0 "1.00" 360 0 0 350 200 2065 0 "" "0.0" "{WK_00000001_STACKTRACE}RTOSDemoSessionSH7216_E10A-USB_SYSTEM__SH" "WINDOW" 59422 0 0 "0.50" 219 0 0 350 200 2065 0 "" "0.0" -"{WK_00000001_STATUS}RTOSDemoSessionSH7216_E10A-USB_SYSTEM__SH" "WINDOW" 59422 0 4 "0.50" 220 0 0 350 200 17 0 "" "0.0" -"{WK_00000001_WATCH}RTOSDemoSessionSH7216_E10A-USB_SYSTEM__SH" "WINDOW" 59422 0 0 "0.27" 220 0 0 350 200 18 0 "32781|32783|<>|32771|32829|32772|32827|32773|<>|32786|<>|32810|32811|32831" "0.0" +"{WK_00000001_STATUS}RTOSDemoSessionSH7216_E10A-USB_SYSTEM__SH" "WINDOW" 59422 0 4 "0.50" 361 0 0 350 200 17 0 "" "0.0" +"{WK_00000001_WATCH}RTOSDemoSessionSH7216_E10A-USB_SYSTEM__SH" "WINDOW" 59422 0 0 "0.31" 361 0 0 350 200 18 0 "32781|32783|<>|32771|32829|32772|32827|32773|<>|32786|<>|32810|32811|32831" "0.0" "{WK_00000002_WORKSPACE}" "WINDOW" 59420 0 0 "1.00" 340 560 340 350 200 18 0 "" "0.0" "{WK_TB00000001_STANDARD}" "TOOLBAR 0" 59419 0 2 "0.00" 0 0 0 0 0 18 0 "" "0.0" "{WK_TB00000002_EDITOR}" "TOOLBAR 0" 59419 0 0 "0.00" 0 0 0 0 0 18 0 "" "0.0" @@ -432,12 +471,11 @@ "{WK_TB00000023_RTOS}" "TOOLBAR 0" 59419 2 9 "0.00" 0 0 0 0 0 17 0 "" "0.0" "{WK_TB00000026_MACRO}" "TOOLBAR 0" 59419 1 6 "0.00" 0 0 0 0 0 17 0 "" "0.0" "{WK_TB00000028_RTOSDEBUG}" "TOOLBAR 0" 59419 2 2 "0.00" 0 0 0 0 0 17 0 "" "0.0" -"{WK_TB00000029_SYSTEMTOOL}" "TOOLBAR 0" 59419 2 3 "0.00" 0 0 0 0 0 17 0 "" "0.0" +"{WK_TB00000029_SYSTEMTOOL}" "TOOLBAR 0" 59419 2 4 "0.00" 0 0 0 0 0 17 0 "" "0.0" [WINDOW_POSITION_STATE_DATA_VD2] [WINDOW_POSITION_STATE_DATA_VD3] [WINDOW_POSITION_STATE_DATA_VD4] [WINDOW_Z_ORDER] -"C:\E\Dev\FreeRTOS\WorkingCopy\Demo\SuperH_SH7216_Renesas\RTOSDemo\main.c" [TARGET_NAME] "SH7216 E10A-USB SYSTEM (SH2A-FPU)" "" 0 [STATUSBAR_STATEINFO_VD1] @@ -484,4 +522,5 @@ [FLASH_DETAILS] "" 0 0 "" 0 "" 0 0 "" 0 0 0 0 0 0 0 "" "" "" "" "" [BREAKPOINTS] +"c:\e\dev\freertos\workingcopy\demo\superh_sh7216_renesas\rtosdemo\main.c" 211 18016 1 "{00000000-0000-0000-C000-000000000046}" "" [END] diff --git a/Demo/SuperH_SH7216_Renesas/RTOSDemo/main.c b/Demo/SuperH_SH7216_Renesas/RTOSDemo/main.c index 151489e87..115c204ee 100644 --- a/Demo/SuperH_SH7216_Renesas/RTOSDemo/main.c +++ b/Demo/SuperH_SH7216_Renesas/RTOSDemo/main.c @@ -132,10 +132,13 @@ #define mainBLOCK_Q_PRIORITY ( tskIDLE_PRIORITY + 2 ) #define mainCREATOR_TASK_PRIORITY ( tskIDLE_PRIORITY + 3 ) #define mainFLASH_TASK_PRIORITY ( tskIDLE_PRIORITY + 1 ) +#define mainuIP_TASK_PRIORITY ( tskIDLE_PRIORITY + 2 ) #define mainINTEGER_TASK_PRIORITY ( tskIDLE_PRIORITY ) #define mainGEN_QUEUE_TASK_PRIORITY ( tskIDLE_PRIORITY ) #define mainFLOP_TASK_PRIORITY ( tskIDLE_PRIORITY ) +#define mainuIP_STACK_SIZE ( configMINIMAL_STACK_SIZE * 3 ) + /* The LED toggle by the check task. */ #define mainCHECK_LED ( 5 ) @@ -186,6 +189,8 @@ static void prvCheckTask( void *pvParameters ); extern void vRegTest1Task( void *pvParameters ); extern void vRegTest2Task( void *pvParameters ); +extern void vuIP_Task( void *pvParameters ); + /*-----------------------------------------------------------*/ /* Variables that are incremented on each iteration of the reg test tasks - @@ -206,12 +211,14 @@ xTaskHandle xCreatedTask; prvSetupHardware(); /* Start the reg test tasks which test the context switching mechanism. */ - xTaskCreate( vRegTest1Task, "RegTest1", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, &xCreatedTask ); + xTaskCreate( vRegTest1Task, "RegTst1", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, &xCreatedTask ); xPortUsesFloatingPoint( xCreatedTask ); - xTaskCreate( vRegTest2Task, "RegTest2", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, &xCreatedTask ); + xTaskCreate( vRegTest2Task, "RegTst2", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, &xCreatedTask ); xPortUsesFloatingPoint( xCreatedTask ); + xTaskCreate( vuIP_Task, "uIP", mainuIP_STACK_SIZE, NULL, mainuIP_TASK_PRIORITY, NULL ); + /* Start the check task as described at the top of this file. */ xTaskCreate( prvCheckTask, "Check", configMINIMAL_STACK_SIZE, NULL, mainCHECK_TASK_PRIORITY, NULL ); @@ -225,7 +232,7 @@ xTaskHandle xCreatedTask; vStartGenericQueueTasks( mainGEN_QUEUE_TASK_PRIORITY ); vStartLEDFlashTasks( mainFLASH_TASK_PRIORITY ); vStartQueuePeekTasks(); - vStartRecursiveMutexTasks(); + vStartRecursiveMutexTasks(); /* Start the math tasks as described at the top of this file. */ vStartMathTasks( mainFLOP_TASK_PRIORITY ); @@ -355,6 +362,7 @@ void vApplicationStackOverflowHook( xTaskHandle *pxTask, signed char *pcTaskName ( void ) pxTask; ( void ) pcTaskName; + taskDISABLE_INTERRUPTS(); for( ;; ); } /*-----------------------------------------------------------*/ @@ -371,9 +379,9 @@ volatile unsigned long ul; { nop(); } - + /* Initialise the ports used to toggle LEDs. */ - vParTestInitialise(); + vParTestInitialise(); } /*-----------------------------------------------------------*/ @@ -419,3 +427,9 @@ void vApplicationTickHook( void ) } /*-----------------------------------------------------------*/ +char *pcGetTaskStatusMessage( void ) +{ + /* Not bothered about a critical section here. */ + return "Need to implement status message!"; +} +/*-----------------------------------------------------------*/ diff --git a/Demo/SuperH_SH7216_Renesas/RTOSDemo/regtest.src b/Demo/SuperH_SH7216_Renesas/RTOSDemo/regtest.src index 7c6d42285..4a7be3f53 100644 --- a/Demo/SuperH_SH7216_Renesas/RTOSDemo/regtest.src +++ b/Demo/SuperH_SH7216_Renesas/RTOSDemo/regtest.src @@ -51,10 +51,9 @@ ; licensing and training services. ;*/ - .import _pxCurrentTCB - .import _vTaskSwitchContext .import _ulRegTest1CycleCount .import _ulRegTest2CycleCount + .import _vPortYield .export _vRegTest1Task .export _vRegTest2Task @@ -120,18 +119,6 @@ _vRegTest1Task: _vRegTest1Loop: - ; Set FPUL to a known value before the yield. - mov #123, r0 - lds r0, fpul - - ; Perform a yield, just for extra test coverage. - trapa #33 - - ; Check fpul still contains the expected value. - sts fpul, r1 - cmp/eq r0, r1 - bf _vRegTest1Error - ; Reset r1 which was used in the tests. mov #2, r1 @@ -338,7 +325,7 @@ _vRegTest2Task: fsts fpul, fr13 lds r14, fpul fsts fpul, fr14 - + _vRegTest2Loop: ; Reset r1 which was used in the tests. diff --git a/Demo/SuperH_SH7216_Renesas/RTOSDemo/uIP_Task.c b/Demo/SuperH_SH7216_Renesas/RTOSDemo/uIP_Task.c index d1c14971a..684664fda 100644 --- a/Demo/SuperH_SH7216_Renesas/RTOSDemo/uIP_Task.c +++ b/Demo/SuperH_SH7216_Renesas/RTOSDemo/uIP_Task.c @@ -101,13 +101,6 @@ clock_time_t clock_time( void ); /* The semaphore used by the ISR to wake the uIP task. */ xSemaphoreHandle xEMACSemaphore = NULL; -const struct uip_eth_addr xMACAddress = { configMAC_ADDR0, configMAC_ADDR1, configMAC_ADDR2, - configMAC_ADDR3, configMAC_ADDR4, configMAC_ADDR5 }; - -//_RB_ this should be made into a no copy driver. -unsigned char uip_buf[ UIP_BUFSIZE + 2 ]; -//unsigned char* uip_buf = &( uip_buf_array[ 0 ] ); - /*-----------------------------------------------------------*/ void clock_init(void) @@ -146,20 +139,18 @@ extern void ( vEMAC_ISR_Wrapper )( void ); vSemaphoreCreateBinary( xEMACSemaphore ); /* Initialise the MAC. */ - R_Ether_Open( 0, ( void * ) &xMACAddress ); + vInitEmac(); - while( !phyStatus() ) + while( lEMACWaitForLink() != pdPASS ) { vTaskDelay( uipINIT_WAIT ); } - R_Ether_EnableEx(0, 1); - for( ;; ) { /* Is there received data ready to be processed? */ - uip_len = R_Ether_Read( 0, uip_buf ); - + uip_len = ( unsigned short ) ulEMACRead(); + if( ( uip_len > 0 ) && ( uip_buf != NULL ) ) { /* Standard uIP loop taken from the uIP manual. */ @@ -174,8 +165,7 @@ extern void ( vEMAC_ISR_Wrapper )( void ); if( uip_len > 0 ) { uip_arp_out(); - R_Ether_Write( 0, uip_buf, uip_len ); - R_Ether_Write( 0, uip_buf, uip_len ); + vEMACWrite(); } } else if( xHeader->type == htons( UIP_ETHTYPE_ARP ) ) @@ -187,8 +177,7 @@ extern void ( vEMAC_ISR_Wrapper )( void ); uip_len is set to a value > 0. */ if( uip_len > 0 ) { - R_Ether_Write( 0, uip_buf, uip_len ); - R_Ether_Write( 0, uip_buf, uip_len ); + vEMACWrite(); } } } @@ -207,8 +196,7 @@ extern void ( vEMAC_ISR_Wrapper )( void ); if( uip_len > 0 ) { uip_arp_out(); - R_Ether_Write( 0, uip_buf, uip_len ); - R_Ether_Write( 0, uip_buf, uip_len ); + vEMACWrite(); } } diff --git a/Demo/SuperH_SH7216_Renesas/RTOSDemo/vecttbl.c b/Demo/SuperH_SH7216_Renesas/RTOSDemo/vecttbl.c index a5f1f43a4..6416f072a 100644 --- a/Demo/SuperH_SH7216_Renesas/RTOSDemo/vecttbl.c +++ b/Demo/SuperH_SH7216_Renesas/RTOSDemo/vecttbl.c @@ -16,6 +16,7 @@ extern void vPortStartFirstTask( void ); extern void vPortYieldHandler( void ); extern void vPortPreemptiveTick( void ); +extern void vEMAC_ISR_Wrapper( void ); #pragma section VECTTBL @@ -338,7 +339,7 @@ void *INT_Vectors[] = { // 152 WDT ITI (void*) INT_WDT_ITI, // 153 E-DMAC EINT0 - (void*) INT_EDMAC_EINT0, + (void*) vEMAC_ISR_Wrapper, // 154 USB EP1FULL (void*) INT_USB_EP1FULL, // 155 USB EP2EMPTY diff --git a/Demo/SuperH_SH7216_Renesas/RTOSDemo/webserver/EMAC.c b/Demo/SuperH_SH7216_Renesas/RTOSDemo/webserver/EMAC.c new file mode 100644 index 000000000..0d1e1243d --- /dev/null +++ b/Demo/SuperH_SH7216_Renesas/RTOSDemo/webserver/EMAC.c @@ -0,0 +1,555 @@ +/* + FreeRTOS V6.0.2 - Copyright (C) 2010 Real Time Engineers Ltd. + + *************************************************************************** + * * + * If you are: * + * * + * + New to FreeRTOS, * + * + Wanting to learn FreeRTOS or multitasking in general quickly * + * + Looking for basic training, * + * + Wanting to improve your FreeRTOS skills and productivity * + * * + * then take a look at the FreeRTOS eBook * + * * + * "Using the FreeRTOS Real Time Kernel - a Practical Guide" * + * http://www.FreeRTOS.org/Documentation * + * * + * A pdf reference manual is also available. Both are usually delivered * + * to your inbox within 20 minutes to two hours when purchased between 8am * + * and 8pm GMT (although please allow up to 24 hours in case of * + * exceptional circumstances). Thank you for your support! * + * * + *************************************************************************** + + This file is part of the FreeRTOS distribution. + + FreeRTOS is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License (version 2) as published by the + Free Software Foundation AND MODIFIED BY the FreeRTOS exception. + ***NOTE*** The exception to the GPL is included to allow you to distribute + a combined work that includes FreeRTOS without being obliged to provide the + source code for proprietary components outside of the FreeRTOS kernel. + FreeRTOS is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. You should have received a copy of the GNU General Public + License and the FreeRTOS license exception along with FreeRTOS; if not it + can be viewed here: http://www.freertos.org/a00114.html and also obtained + by writing to Richard Barry, contact details for whom are available on the + FreeRTOS WEB site. + + 1 tab == 4 spaces! + + http://www.FreeRTOS.org - Documentation, latest information, license and + contact details. + + http://www.SafeRTOS.com - A version that is certified for use in safety + critical systems. + + http://www.OpenRTOS.com - Commercial support, development, porting, + licensing and training services. +*/ + +/* Hardware specific includes. */ +#include "iodefine.h" +#include "hwEthernet.h" +#include "hwEthernetPhy.h" + +/* FreeRTOS includes. */ +#include "FreeRTOS.h" +#include "task.h" +#include "semphr.h" + +/* uIP includes. */ +#include "net/uip.h" + +/* The time to wait between attempts to obtain a free buffer. */ +#define emacBUFFER_WAIT_DELAY_ms ( 3 / portTICK_RATE_MS ) + +/* The number of times emacBUFFER_WAIT_DELAY_ms should be waited before giving +up on attempting to obtain a free buffer all together. */ +#define emacBUFFER_WAIT_ATTEMPTS ( 30 ) + +/* The number of Rx descriptors. */ +#define emacNUM_RX_DESCRIPTORS 3 + +/* The number of Tx descriptors. When using uIP there is not point in having +more than two. */ +#define emacNUM_TX_BUFFERS 2 + +/* The total number of EMAC buffers to allocate. */ +#define emacNUM_BUFFERS ( emacNUM_RX_DESCRIPTORS + emacNUM_TX_BUFFERS ) + +/* The time to wait for the Tx descriptor to become free. */ +#define emacTX_WAIT_DELAY_ms ( 10 / portTICK_RATE_MS ) + +/* The total number of times to wait emacTX_WAIT_DELAY_ms for the Tx descriptor to +become free. */ +#define emacTX_WAIT_ATTEMPTS ( 5 ) + +/* Only Rx end and Tx end interrupts are used by this driver. */ +#define emacTX_END_INTERRUPT ( 1UL << 21UL ) +#define emacRX_END_INTERRUPT ( 1UL << 18UL ) + +/*-----------------------------------------------------------*/ + +/* The buffers and descriptors themselves. */ +#pragma section RX_DESCR + ethfifo xRxDescriptors[ emacNUM_RX_DESCRIPTORS ]; +#pragma section TX_DESCR + ethfifo xTxDescriptors[ emacNUM_TX_BUFFERS ]; +#pragma section _ETHERNET_BUFFERS + char xEthernetBuffers[ emacNUM_BUFFERS ][ UIP_BUFSIZE ]; +#pragma section + +/* Used to indicate which buffers are free and which are in use. If an index +contains 0 then the corresponding buffer in xEthernetBuffers is free, otherwise +the buffer is in use or about to be used. */ +static unsigned char ucBufferInUse[ emacNUM_BUFFERS ]; + +/*-----------------------------------------------------------*/ + +/* + * Initialise both the Rx and Tx descriptors. + */ +static void prvInitialiseDescriptors( void ); + +/* + * Return a pointer to a free buffer within xEthernetBuffers. + */ +static unsigned char *prvGetNextBuffer( void ); + +/* + * Return a buffer to the list of free buffers. + */ +static void prvReturnBuffer( unsigned char *pucBuffer ); + +/* + * Examine the status of the next Rx FIFO to see if it contains new data. + */ +static unsigned long prvCheckRxFifoStatus( void ); + +/* + * Setup the microcontroller for communication with the PHY. + */ +static void prvSetupPortPinsAndReset( void ); + +/* + * Configure the Ethernet interface peripherals. + */ +static void prvConfigureEtherCAndEDMAC( void ); + +/* + * Something has gone wrong with the descriptor usage. Reset all the buffers + * and descriptors. + */ +static void prvResetEverything( void ); + +/*-----------------------------------------------------------*/ + +/* Points to the Rx descriptor currently in use. */ +static ethfifo *xCurrentRxDesc = NULL; + +/* The buffer used by the uIP stack to both receive and send. This points to +one of the Ethernet buffers when its actually in use. */ +unsigned char *uip_buf = NULL; + +/*-----------------------------------------------------------*/ + +void vInitEmac( void ) +{ + /* Setup the SH hardware for MII communications. */ + prvSetupPortPinsAndReset(); + + /* Set the Rx and Tx descriptors into their initial state. */ + prvInitialiseDescriptors(); + + /* Set the MAC address into the ETHERC */ + EtherC.MAHR = ( ( unsigned long ) configMAC_ADDR0 << 24UL ) | + ( ( unsigned long ) configMAC_ADDR1 << 16UL ) | + ( ( unsigned long ) configMAC_ADDR2 << 8UL ) | + ( unsigned long ) configMAC_ADDR3; + + EtherC.MALR.BIT.MA = ( ( unsigned long ) configMAC_ADDR4 << 8UL ) | + ( unsigned long ) configMAC_ADDR5; + + /* Perform rest of interface hardware configuration. */ + prvConfigureEtherCAndEDMAC(); + + /* Nothing received yet, so uip_buf points nowhere. */ + uip_buf = NULL; + + /* Initialize the PHY */ + phyReset(); +} +/*-----------------------------------------------------------*/ + +void vEMACWrite( void ) +{ +long x; + + /* Wait until the second transmission of the last packet has completed. */ + for( x = 0; x < emacTX_WAIT_ATTEMPTS; x++ ) + { + if( ( xTxDescriptors[ 1 ].status & ACT ) != 0 ) + { + /* Descriptor is still active. */ + vTaskDelay( emacTX_WAIT_DELAY_ms ); + } + else + { + break; + } + } + + /* Is the descriptor free after waiting for it? */ + if( ( xTxDescriptors[ 1 ].status & ACT ) != 0 ) + { + /* Something has gone wrong. */ + prvResetEverything(); + } + + /* Setup both descriptors to transmit the frame. */ + xTxDescriptors[ 0 ].buf_p = uip_buf; + xTxDescriptors[ 0 ].bufsize = uip_len; + xTxDescriptors[ 1 ].buf_p = uip_buf; + xTxDescriptors[ 1 ].bufsize = uip_len; + + /* uip_buf is being sent by the Tx descriptor. Allocate a new buffer + for use by the stack. */ + uip_buf = prvGetNextBuffer(); + + /* Clear previous settings and go. */ + xTxDescriptors[0].status &= ~( FP1 | FP0 ); + xTxDescriptors[0].status |= ( FP1 | FP0 | ACT ); + xTxDescriptors[1].status &= ~( FP1 | FP0 ); + xTxDescriptors[1].status |= ( FP1 | FP0 | ACT ); + + EDMAC.EDTRR.LONG = 0x00000001; +} +/*-----------------------------------------------------------*/ + +unsigned long ulEMACRead( void ) +{ +unsigned long ulBytesReceived; + + ulBytesReceived = prvCheckRxFifoStatus(); + + if( ulBytesReceived > 0 ) + { + xCurrentRxDesc->status &= ~( FP1 | FP0 ); + xCurrentRxDesc->status |= ACT; + + if( EDMAC.EDRRR.LONG == 0x00000000L ) + { + /* Restart Ethernet if it has stopped */ + EDMAC.EDRRR.LONG = 0x00000001L; + } + + /* Mark the pxDescriptor buffer as free as uip_buf is going to be set to + the buffer that contains the received data. */ + prvReturnBuffer( uip_buf ); + + uip_buf = ( void * ) xCurrentRxDesc->buf_p; + + /* Move onto the next buffer in the ring. */ + xCurrentRxDesc = xCurrentRxDesc->next; + } + + return ulBytesReceived; +} +/*-----------------------------------------------------------*/ + +long lEMACWaitForLink( void ) +{ +long lReturn; + + /* Set the link status. */ + switch( phyStatus() ) + { + /* Half duplex link */ + case PHY_LINK_100H: + case PHY_LINK_10H: + EtherC.ECMR.BIT.DM = 0; + lReturn = pdPASS; + break; + + /* Full duplex link */ + case PHY_LINK_100F: + case PHY_LINK_10F: + EtherC.ECMR.BIT.DM = 1; + lReturn = pdPASS; + break; + + default: + lReturn = pdFAIL; + break; + } + + if( lReturn == pdPASS ) + { + /* Enable receive and transmit. */ + EtherC.ECMR.BIT.RE = 1; + EtherC.ECMR.BIT.TE = 1; + + /* Enable EDMAC receive */ + EDMAC.EDRRR.LONG = 0x1; + } +} +/*-----------------------------------------------------------*/ + +static void prvInitialiseDescriptors( void ) +{ +ethfifo *pxDescriptor; +long x; + + for( x = 0; x < emacNUM_BUFFERS; x++ ) + { + /* Ensure none of the buffers are shown as in use at the start. */ + ucBufferInUse[ x ] = pdFALSE; + } + + /* Initialise the Rx descriptors. */ + for( x = 0; x < emacNUM_RX_DESCRIPTORS; x++ ) + { + pxDescriptor = &xRxDescriptors[ x ]; + pxDescriptor->buf_p = &( xEthernetBuffers[ x ][ 0 ] ); + + pxDescriptor->bufsize = UIP_BUFSIZE; + pxDescriptor->size = 0; + pxDescriptor->status = ACT; + pxDescriptor->next = &xRxDescriptors[ x + 1 ]; + + /* Mark this buffer as in use. */ + ucBufferInUse[ x ] = pdTRUE; + } + + /* The last descriptor points back to the start. */ + pxDescriptor->status |= DL; + pxDescriptor->next = &xRxDescriptors[ 0 ]; + + /* Initialise the Tx descriptors. */ + for( x = 0; x < emacNUM_TX_BUFFERS; x++ ) + { + pxDescriptor = &( xTxDescriptors[ x ] ); + + /* A buffer is not allocated to the Tx descriptor until a send is + actually required. */ + pxDescriptor->buf_p = NULL; + + pxDescriptor->bufsize = UIP_BUFSIZE; + pxDescriptor->size = 0; + pxDescriptor->status = 0; + pxDescriptor->next = &xTxDescriptors[ x + 1 ]; + } + + /* The last descriptor points back to the start. */ + pxDescriptor->status |= DL; + pxDescriptor->next = &( xTxDescriptors[ 0 ] ); + + /* Use the first Rx descriptor to start with. */ + xCurrentRxDesc = &( xRxDescriptors[ 0 ] ); +} +/*-----------------------------------------------------------*/ + +static unsigned char *prvGetNextBuffer( void ) +{ +long x; +unsigned char *pucReturn = NULL; +unsigned long ulAttempts = 0; + + while( pucReturn == NULL ) + { + /* Look through the buffers to find one that is not in use by + anything else. */ + for( x = 0; x < emacNUM_BUFFERS; x++ ) + { + if( ucBufferInUse[ x ] == pdFALSE ) + { + ucBufferInUse[ x ] = pdTRUE; + pucReturn = ( unsigned char * ) &( xEthernetBuffers[ x ][ 0 ] ); + break; + } + } + + /* Was a buffer found? */ + if( pucReturn == NULL ) + { + ulAttempts++; + + if( ulAttempts >= emacBUFFER_WAIT_ATTEMPTS ) + { + break; + } + + /* Wait then look again. */ + vTaskDelay( emacBUFFER_WAIT_DELAY_ms ); + } + } + + return pucReturn; +} +/*-----------------------------------------------------------*/ + +static void prvReturnBuffer( unsigned char *pucBuffer ) +{ +unsigned long ul; + + /* Return a buffer to the pool of free buffers. */ + for( ul = 0; ul < emacNUM_BUFFERS; ul++ ) + { + if( &( xEthernetBuffers[ ul ][ 0 ] ) == ( void * ) pucBuffer ) + { + ucBufferInUse[ ul ] = pdFALSE; + break; + } + } +} +/*-----------------------------------------------------------*/ + +static void prvResetEverything( void ) +{ + /* Temporary code just to see if this gets called. This function has not + been implemented. */ + portDISABLE_INTERRUPTS(); + for( ;; ); +} +/*-----------------------------------------------------------*/ + +static unsigned long prvCheckRxFifoStatus( void ) +{ +unsigned long ulReturn = 0; + + if( ( xCurrentRxDesc->status & ACT ) != 0 ) + { + /* Current descriptor is still active. */ + } + else if( ( xCurrentRxDesc->status & FE ) != 0 ) + { + /* Frame error. Clear the error. */ + xCurrentRxDesc->status &= ~( FP1 | FP0 | FE ); + xCurrentRxDesc->status &= ~( RMAF | RRF | RTLF | RTSF | PRE | CERF ); + xCurrentRxDesc->status |= ACT; + xCurrentRxDesc = xCurrentRxDesc->next; + + if( EDMAC.EDRRR.LONG == 0x00000000UL ) + { + /* Restart Ethernet if it has stopped. */ + EDMAC.EDRRR.LONG = 0x00000001UL; + } + } + else + { + /* The descriptor contains a frame. Because of the size of the buffers + the frame should always be complete. */ + if( (xCurrentRxDesc->status & FP0) == FP0 ) + { + ulReturn = xCurrentRxDesc->size; + } + else + { + /* Do not expect to get here. */ + prvResetEverything(); + } + } + + return ulReturn; +} +/*-----------------------------------------------------------*/ + +static void prvSetupPortPinsAndReset( void ) +{ + /* Initialisation code taken from Renesas example project. */ + + PFC.PACRL4.BIT.PA12MD = 0x7; /* Set TX_CLK input (EtherC) */ + PFC.PACRL3.BIT.PA11MD = 0x7; /* Set TX_EN output (EtherC) */ + PFC.PACRL3.BIT.PA10MD = 0x7; /* Set MII_TXD0 output (EtherC) */ + PFC.PACRL3.BIT.PA9MD = 0x7; /* Set MII_TXD1 output (EtherC) */ + PFC.PACRL3.BIT.PA8MD = 0x7; /* Set MII_TXD2 output (EtherC) */ + PFC.PACRL2.BIT.PA7MD = 0x7; /* Set MII_TXD3 output (EtherC) */ + PFC.PACRL2.BIT.PA6MD = 0x7; /* Set TX_ER output (EtherC) */ + PFC.PDCRH4.BIT.PD31MD = 0x7; /* Set RX_DV input (EtherC) */ + PFC.PDCRH4.BIT.PD30MD = 0x7; /* Set RX_ER input (EtherC) */ + PFC.PDCRH4.BIT.PD29MD = 0x7; /* Set MII_RXD3 input (EtherC) */ + PFC.PDCRH4.BIT.PD28MD = 0x7; /* Set MII_RXD2 input (EtherC) */ + PFC.PDCRH3.BIT.PD27MD = 0x7; /* Set MII_RXD1 input (EtherC) */ + PFC.PDCRH3.BIT.PD26MD = 0x7; /* Set MII_RXD0 input (EtherC) */ + PFC.PDCRH3.BIT.PD25MD = 0x7; /* Set RX_CLK input (EtherC) */ + PFC.PDCRH3.BIT.PD24MD = 0x7; /* Set CRS input (EtherC) */ + PFC.PDCRH2.BIT.PD23MD = 0x7; /* Set COL input (EtherC) */ + PFC.PDCRH2.BIT.PD22MD = 0x7; /* Set WOL output (EtherC) */ + PFC.PDCRH2.BIT.PD21MD = 0x7; /* Set EXOUT output (EtherC) */ + PFC.PDCRH2.BIT.PD20MD = 0x7; /* Set MDC output (EtherC) */ + PFC.PDCRH1.BIT.PD19MD = 0x7; /* Set LINKSTA input (EtherC) */ + PFC.PDCRH1.BIT.PD18MD = 0x7; /* Set MDIO input/output (EtherC) */ + + STB.CR4.BIT._ETHER = 0x0; + EDMAC.EDMR.BIT.SWR = 1; + + /* Crude wait for reset to complete. */ + vTaskDelay( 500 / portTICK_RATE_MS ); +} +/*-----------------------------------------------------------*/ + +static void prvConfigureEtherCAndEDMAC( void ) +{ + /* Initialisation code taken from Renesas example project. */ + + /* TODO: Check bit 5 */ + EtherC.ECSR.LONG = 0x00000037; /* Clear all EtherC statuS BFR, PSRTO, LCHNG, MPD, ICD */ + + /* TODO: Check bit 5 */ + EtherC.ECSIPR.LONG = 0x00000020; /* Disable EtherC status change interrupt */ + EtherC.RFLR.LONG = 1518; /* Ether payload is 1500+ CRC */ + EtherC.IPGR.LONG = 0x00000014; /* Intergap is 96-bit time */ + + /* EDMAC */ + EDMAC.EESR.LONG = 0x47FF0F9F; /* Clear all EtherC and EDMAC status bits */ + EDMAC.RDLAR = ( void * ) xCurrentRxDesc; /* Initialaize Rx Descriptor List Address */ + EDMAC.TDLAR = &( xTxDescriptors[ 0 ] ); /* Initialaize Tx Descriptor List Address */ + EDMAC.TRSCER.LONG = 0x00000000; /* Copy-back status is RFE & TFE only */ + EDMAC.TFTR.LONG = 0x00000000; /* Threshold of Tx_FIFO */ + EDMAC.FDR.LONG = 0x00000000; /* Transmit fifo & receive fifo is 256 bytes */ + EDMAC.RMCR.LONG = 0x00000003; /* Receive function is normal mode(continued) */ + + /* Set the EDMAC interrupt priority - the interrupt priority must be + configKERNEL_INTERRUPT_PRIORITY no matter which peripheral is used to + generate the tick interrupt. */ + INTC.IPR19.BIT._EDMAC = portKERNEL_INTERRUPT_PRIORITY; + EDMAC.EESIPR.LONG = emacTX_END_INTERRUPT | emacRX_END_INTERRUPT; /* Enable Rx and Tx end interrupts. */ + + /* Clear the interrupt flag. */ + CMT0.CMCSR.BIT.CMF = 0; +} +/*-----------------------------------------------------------*/ + +void vEMAC_ISR_Handler( void ) +{ +unsigned long ul = EDMAC.EESR.LONG; +long lHigherPriorityTaskWoken = pdFALSE; +extern xSemaphoreHandle xEMACSemaphore; +static long ulTxEndInts = 0; + + /* Has a Tx end occurred? */ + if( ul & emacTX_END_INTERRUPT ) + { + ++ulTxEndInts; + if( ulTxEndInts >= 2 ) + { + /* Only return the buffer to the pool once both Txes have completed. */ + prvReturnBuffer( ( void * ) xTxDescriptors[ 0 ].buf_p ); + ulTxEndInts = 0; + } + EDMAC.EESR.LONG = emacTX_END_INTERRUPT; + } + + /* Has an Rx end occurred? */ + if( ul & emacRX_END_INTERRUPT ) + { + /* Make sure the Ethernet task is not blocked waiting for a packet. */ + xSemaphoreGiveFromISR( xEMACSemaphore, &lHigherPriorityTaskWoken ); + portYIELD_FROM_ISR( lHigherPriorityTaskWoken ); + EDMAC.EESR.LONG = emacRX_END_INTERRUPT; + } +} diff --git a/Demo/SuperH_SH7216_Renesas/RTOSDemo/webserver/EMAC_ISR.src b/Demo/SuperH_SH7216_Renesas/RTOSDemo/webserver/EMAC_ISR.src new file mode 100644 index 000000000..3bcc7185e --- /dev/null +++ b/Demo/SuperH_SH7216_Renesas/RTOSDemo/webserver/EMAC_ISR.src @@ -0,0 +1,123 @@ +;/* +; FreeRTOS V6.0.2 - Copyright (C) 2009 Real Time Engineers Ltd. +; +; *************************************************************************** +; * * +; * If you are: * +; * * +; * + New to FreeRTOS, * +; * + Wanting to learn FreeRTOS or multitasking in general quickly * +; * + Looking for basic training, * +; * + Wanting to improve your FreeRTOS skills and productivity * +; * * +; * then take a look at the FreeRTOS eBook * +; * * +; * "Using the FreeRTOS Real Time Kernel - a Practical Guide" * +; * http://www.FreeRTOS.org/Documentation * +; * * +; * A pdf reference manual is also available. Both are usually delivered * +; * to your inbox within 20 minutes to two hours when purchased between 8am * +; * and 8pm GMT (although please allow up to 24 hours in case of * +; * exceptional circumstances). Thank you for your support! * +; * * +; *************************************************************************** +; +; This file is part of the FreeRTOS distribution. +; +; FreeRTOS is free software; you can redistribute it and/or modify it under +; the terms of the GNU General Public License (version 2) as published by the +; Free Software Foundation AND MODIFIED BY the FreeRTOS exception. +; ***NOTE*** The exception to the GPL is included to allow you to distribute +; a combined work that includes FreeRTOS without being obliged to provide the +; source code for proprietary components outside of the FreeRTOS kernel. +; FreeRTOS is distributed in the hope that it will be useful, but WITHOUT +; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +; FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +; more details. You should have received a copy of the GNU General Public +; License and the FreeRTOS license exception along with FreeRTOS; if not it +; can be viewed here: http://www.freertos.org/a00114.html and also obtained +; by writing to Richard Barry, contact details for whom are available on the +; FreeRTOS WEB site. +; +; 1 tab == 4 spaces! +; +; http://www.FreeRTOS.org - Documentation, latest information, license and +; contact details. +; +; http://www.SafeRTOS.com - A version that is certified for use in safety +; critical systems. +; +; http://www.OpenRTOS.com - Commercial support, development, porting, +; licensing and training services. +;*/ + + .import _vEMAC_ISR_Handler + .import _pxCurrentTCB + .export _vEMAC_ISR_Wrapper + + .section P + + .macro portSAVE_CONTEXT + + ; Save r0 to r14 and pr. + movml.l r15, @-r15 + + ; Save mac1, mach and gbr + sts.l macl, @-r15 + sts.l mach, @-r15 + stc.l gbr, @-r15 + + ; Get the address of pxCurrentTCB + mov.l #_pxCurrentTCB, r0 + + ; Get the address of pxTopOfStack from the TCB. + mov.l @r0, r0 + + ; Save the stack pointer in pxTopOfStack. + mov.l r15, @r0 + + .endm + +;----------------------------------------------------------- + + .macro portRESTORE_CONTEXT + + ; Get the address of the pxCurrentTCB variable. + mov.l #_pxCurrentTCB, r0 + + ; Get the address of the task stack from pxCurrentTCB. + mov.l @r0, r0 + + ; Get the task stack itself into the stack pointer. + mov.l @r0, r15 + + ; Restore system registers. + ldc.l @r15+, gbr + lds.l @r15+, mach + lds.l @r15+, macl + + ; Restore r0 to r14 and PR + movml.l @r15+, r15 + + ; Pop the SR and PC to jump to the start of the task. + rte + nop + + .endm +;----------------------------------------------------------- + +_vEMAC_ISR_Wrapper: + + portSAVE_CONTEXT + + mov.l #_vEMAC_ISR_Handler, r0 + jsr @r0 + nop + + portRESTORE_CONTEXT + +;----------------------------------------------------------- + + + .end + diff --git a/Demo/SuperH_SH7216_Renesas/RTOSDemo/webserver/httpd-cgi.c b/Demo/SuperH_SH7216_Renesas/RTOSDemo/webserver/httpd-cgi.c new file mode 100644 index 000000000..f840171ed --- /dev/null +++ b/Demo/SuperH_SH7216_Renesas/RTOSDemo/webserver/httpd-cgi.c @@ -0,0 +1,254 @@ +/** + * \addtogroup httpd + * @{ + */ + +/** + * \file + * Web server script interface + * \author + * Adam Dunkels + * + */ + +/* + * Copyright (c) 2001-2006, Adam Dunkels. + * 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 uIP TCP/IP stack. + * + * $Id: httpd-cgi.c,v 1.2 2006/06/11 21:46:37 adam Exp $ + * + */ +#include "net/uip.h" +#include "net/psock.h" +#include "apps/httpd/httpd.h" +#include "apps/httpd/httpd-cgi.h" +#include "apps/httpd/httpd-fs.h" + +#include +#include + +#include "FreeRTOS.h" +#include "task.h" + +HTTPD_CGI_CALL( file, "file-stats", file_stats ); +HTTPD_CGI_CALL( tcp, "tcp-connections", tcp_stats ); +HTTPD_CGI_CALL( net, "net-stats", net_stats ); +HTTPD_CGI_CALL( rtos, "rtos-stats", rtos_stats ); +HTTPD_CGI_CALL( run, "run-time", run_time ); +HTTPD_CGI_CALL( io, "led-io", led_io ); + +static const struct httpd_cgi_call *calls[] = { &file, &tcp, &net, &rtos, &run, &io, NULL }; + +/*---------------------------------------------------------------------------*/ +static PT_THREAD( nullfunction ( struct httpd_state *s, char *ptr ) ) +{ + PSOCK_BEGIN( &s->sout ); + ( void ) ptr; + PSOCK_END( &s->sout ); +} + +/*---------------------------------------------------------------------------*/ +httpd_cgifunction httpd_cgi( char *name ) +{ + const struct httpd_cgi_call **f; + + /* Find the matching name in the table, return the function. */ + for( f = calls; *f != NULL; ++f ) + { + if( strncmp((*f)->name, name, strlen((*f)->name)) == 0 ) + { + return( *f )->function; + } + } + + return nullfunction; +} + +/*---------------------------------------------------------------------------*/ +static unsigned short generate_file_stats( void *arg ) +{ + char *f = ( char * ) arg; + return sprintf( ( char * ) uip_appdata, "%5u", httpd_fs_count(f) ); +} + +/*---------------------------------------------------------------------------*/ +static PT_THREAD( file_stats ( struct httpd_state *s, char *ptr ) ) +{ + PSOCK_BEGIN( &s->sout ); + + PSOCK_GENERATOR_SEND( &s->sout, generate_file_stats, strchr(ptr, ' ') + 1 ); + + PSOCK_END( &s->sout ); +} + +/*---------------------------------------------------------------------------*/ +static const char closed[] = /* "CLOSED",*/ { 0x43, 0x4c, 0x4f, 0x53, 0x45, 0x44, 0 }; +static const char syn_rcvd[] = /* "SYN-RCVD",*/ { 0x53, 0x59, 0x4e, 0x2d, 0x52, 0x43, 0x56, 0x44, 0 }; +static const char syn_sent[] = /* "SYN-SENT",*/ { 0x53, 0x59, 0x4e, 0x2d, 0x53, 0x45, 0x4e, 0x54, 0 }; +static const char established[] = /* "ESTABLISHED",*/ { 0x45, 0x53, 0x54, 0x41, 0x42, 0x4c, 0x49, 0x53, 0x48, 0x45, 0x44, 0 }; +static const char fin_wait_1[] = /* "FIN-WAIT-1",*/ { 0x46, 0x49, 0x4e, 0x2d, 0x57, 0x41, 0x49, 0x54, 0x2d, 0x31, 0 }; +static const char fin_wait_2[] = /* "FIN-WAIT-2",*/ { 0x46, 0x49, 0x4e, 0x2d, 0x57, 0x41, 0x49, 0x54, 0x2d, 0x32, 0 }; +static const char closing[] = /* "CLOSING",*/ { 0x43, 0x4c, 0x4f, 0x53, 0x49, 0x4e, 0x47, 0 }; +static const char time_wait[] = /* "TIME-WAIT,"*/ { 0x54, 0x49, 0x4d, 0x45, 0x2d, 0x57, 0x41, 0x49, 0x54, 0 }; +static const char last_ack[] = /* "LAST-ACK"*/ { 0x4c, 0x41, 0x53, 0x54, 0x2d, 0x41, 0x43, 0x4b, 0 }; + +static const char *states[] = { closed, syn_rcvd, syn_sent, established, fin_wait_1, fin_wait_2, closing, time_wait, last_ack }; + +static unsigned short generate_tcp_stats( void *arg ) +{ + struct uip_conn *conn; + struct httpd_state *s = ( struct httpd_state * ) arg; + + conn = &uip_conns[s->count]; + return sprintf( ( char * ) uip_appdata, + "%d%u.%u.%u.%u:%u%s%u%u%c %c\r\n", htons(conn->lport), + htons(conn->ripaddr.u16[0]) >> 8, htons(conn->ripaddr.u16[0]) & 0xff, htons(conn->ripaddr.u16[1]) >> 8, + htons(conn->ripaddr.u16[1]) & 0xff, htons(conn->rport), states[conn->tcpstateflags & UIP_TS_MASK], conn->nrtx, conn->timer, + (uip_outstanding(conn)) ? '*' : ' ', (uip_stopped(conn)) ? '!' : ' ' ); +} + +/*---------------------------------------------------------------------------*/ +static PT_THREAD( tcp_stats ( struct httpd_state *s, char *ptr ) ) +{ + PSOCK_BEGIN( &s->sout ); + ( void ) ptr; + for( s->count = 0; s->count < UIP_CONNS; ++s->count ) + { + if( (uip_conns[s->count].tcpstateflags & UIP_TS_MASK) != UIP_CLOSED ) + { + PSOCK_GENERATOR_SEND( &s->sout, generate_tcp_stats, s ); + } + } + + PSOCK_END( &s->sout ); +} + +/*---------------------------------------------------------------------------*/ +static unsigned short generate_net_stats( void *arg ) +{ + struct httpd_state *s = ( struct httpd_state * ) arg; + return sprintf( ( char * ) uip_appdata, "%5u\n", (( uip_stats_t * ) &uip_stat)[s->count] ); +} + +static PT_THREAD( net_stats ( struct httpd_state *s, char *ptr ) ) +{ + PSOCK_BEGIN( &s->sout ); + ( void ) ptr; +#if UIP_STATISTICS + for( s->count = 0; s->count < sizeof(uip_stat) / sizeof(uip_stats_t); ++s->count ) + { + PSOCK_GENERATOR_SEND( &s->sout, generate_net_stats, s ); + } + +#endif /* UIP_STATISTICS */ + + PSOCK_END( &s->sout ); +} + +/*---------------------------------------------------------------------------*/ +extern void vTaskList( signed char *pcWriteBuffer ); +extern char *pcGetTaskStatusMessage( void ); +static char cCountBuf[128]; +long lRefreshCount = 0; +static unsigned short generate_rtos_stats( void *arg ) +{ + ( void ) arg; + lRefreshCount++; + sprintf( cCountBuf, "


Refresh count = %d


%s", ( int ) lRefreshCount, pcGetTaskStatusMessage() ); + vTaskList( uip_appdata ); + strcat( uip_appdata, cCountBuf ); + + return strlen( uip_appdata ); +} + +/*---------------------------------------------------------------------------*/ +static PT_THREAD( rtos_stats ( struct httpd_state *s, char *ptr ) ) +{ + PSOCK_BEGIN( &s->sout ); + ( void ) ptr; + PSOCK_GENERATOR_SEND( &s->sout, generate_rtos_stats, NULL ); + PSOCK_END( &s->sout ); +} + +/*---------------------------------------------------------------------------*/ +char *pcStatus; +unsigned long ulString; + +static unsigned short generate_io_state( void *arg ) +{ + extern long lParTestGetLEDState( void ); + ( void ) arg; + + /* Get the state of the LEDs that are on the FIO1 port. */ + if( lParTestGetLEDState() ) + { + pcStatus = ""; + } + else + { + pcStatus = "checked"; + } + + sprintf( uip_appdata, "LED

", pcStatus ); + + return strlen( uip_appdata ); +} + +/*---------------------------------------------------------------------------*/ +extern void vTaskGetRunTimeStats( signed char *pcWriteBuffer ); +static unsigned short generate_runtime_stats( void *arg ) +{ + ( void ) arg; + lRefreshCount++; + sprintf( cCountBuf, "


Refresh count = %d", ( int ) lRefreshCount ); + vTaskGetRunTimeStats( uip_appdata ); + strcat( uip_appdata, cCountBuf ); + + return strlen( uip_appdata ); +} + +/*---------------------------------------------------------------------------*/ +static PT_THREAD( run_time ( struct httpd_state *s, char *ptr ) ) +{ + PSOCK_BEGIN( &s->sout ); + ( void ) ptr; + PSOCK_GENERATOR_SEND( &s->sout, generate_runtime_stats, NULL ); + PSOCK_END( &s->sout ); +} + +/*---------------------------------------------------------------------------*/ +static PT_THREAD( led_io ( struct httpd_state *s, char *ptr ) ) +{ + PSOCK_BEGIN( &s->sout ); + ( void ) ptr; + PSOCK_GENERATOR_SEND( &s->sout, generate_io_state, NULL ); + PSOCK_END( &s->sout ); +} + +/** @} */ diff --git a/Demo/SuperH_SH7216_Renesas/RTOSDemo/webserver/httpd-fs/404.html b/Demo/SuperH_SH7216_Renesas/RTOSDemo/webserver/httpd-fs/404.html new file mode 100644 index 000000000..43e7f4cad --- /dev/null +++ b/Demo/SuperH_SH7216_Renesas/RTOSDemo/webserver/httpd-fs/404.html @@ -0,0 +1,8 @@ + + +

+

404 - file not found

+

Go here instead.

+
+ + \ No newline at end of file diff --git a/Demo/SuperH_SH7216_Renesas/RTOSDemo/webserver/httpd-fs/index.html b/Demo/SuperH_SH7216_Renesas/RTOSDemo/webserver/httpd-fs/index.html new file mode 100644 index 000000000..4937dc69a --- /dev/null +++ b/Demo/SuperH_SH7216_Renesas/RTOSDemo/webserver/httpd-fs/index.html @@ -0,0 +1,13 @@ + + + + FreeRTOS.org uIP WEB server demo + + + +Loading index.shtml. Click here if not automatically redirected. + + + + + diff --git a/Demo/SuperH_SH7216_Renesas/RTOSDemo/webserver/httpd-fs/index.shtml b/Demo/SuperH_SH7216_Renesas/RTOSDemo/webserver/httpd-fs/index.shtml new file mode 100644 index 000000000..29d242c05 --- /dev/null +++ b/Demo/SuperH_SH7216_Renesas/RTOSDemo/webserver/httpd-fs/index.shtml @@ -0,0 +1,20 @@ + + + + FreeRTOS.org uIP WEB server demo + + + +Task Stats | Run Time Stats | TCP Stats | Connections | FreeRTOS.org Homepage | IO +

+


+

+

Task statistics

+Page will refresh every 2 seconds.

+

Task          State  Priority  Stack	#
************************************************
+%! rtos-stats +
+
+ + + diff --git a/Demo/SuperH_SH7216_Renesas/RTOSDemo/webserver/httpd-fs/io.shtml b/Demo/SuperH_SH7216_Renesas/RTOSDemo/webserver/httpd-fs/io.shtml new file mode 100644 index 000000000..fd0697d2a --- /dev/null +++ b/Demo/SuperH_SH7216_Renesas/RTOSDemo/webserver/httpd-fs/io.shtml @@ -0,0 +1,28 @@ + + + + FreeRTOS.org uIP WEB server demo + + + +Task Stats | Run Time Stats | TCP Stats | Connections | FreeRTOS.org Homepage | IO +

+


+LED and LCD IO
+ +

+ +Use the check box to turn on or off the LED, enter text to display on the OLED display, then click "Update IO". + + +

+

+%! led-io +

+ +

+

+ + + + diff --git a/Demo/SuperH_SH7216_Renesas/RTOSDemo/webserver/httpd-fs/runtime.shtml b/Demo/SuperH_SH7216_Renesas/RTOSDemo/webserver/httpd-fs/runtime.shtml new file mode 100644 index 000000000..67cae4657 --- /dev/null +++ b/Demo/SuperH_SH7216_Renesas/RTOSDemo/webserver/httpd-fs/runtime.shtml @@ -0,0 +1,20 @@ + + + + FreeRTOS.org uIP WEB server demo + + + +Task Stats | Run Time Stats | TCP Stats | Connections | FreeRTOS.org Homepage | IO +

+


+

+

Run-time statistics

+Page will refresh every 2 seconds.

+

Task            Abs Time      % Time
****************************************
+%! run-time +
+
+ + + diff --git a/Demo/SuperH_SH7216_Renesas/RTOSDemo/webserver/httpd-fs/stats.shtml b/Demo/SuperH_SH7216_Renesas/RTOSDemo/webserver/httpd-fs/stats.shtml new file mode 100644 index 000000000..d95a69340 --- /dev/null +++ b/Demo/SuperH_SH7216_Renesas/RTOSDemo/webserver/httpd-fs/stats.shtml @@ -0,0 +1,41 @@ + + + + FreeRTOS.org uIP WEB server demo + + + +Task Stats | Run Time Stats | TCP Stats | Connections | FreeRTOS.org Homepage | IO +

+


+

+

Network statistics

+ +
+IP           Packets dropped
+             Packets received
+             Packets sent
+IP errors    IP version/header length
+             IP length, high byte
+             IP length, low byte
+             IP fragments
+             Header checksum
+             Wrong protocol
+ICMP	     Packets dropped
+             Packets received
+             Packets sent
+             Type errors
+TCP          Packets dropped
+             Packets received
+             Packets sent
+             Checksum errors
+             Data packets without ACKs
+             Resets
+             Retransmissions
+	     No connection avaliable
+	     Connection attempts to closed ports
+
%! net-stats
+
+
+ + diff --git a/Demo/SuperH_SH7216_Renesas/RTOSDemo/webserver/httpd-fs/tcp.shtml b/Demo/SuperH_SH7216_Renesas/RTOSDemo/webserver/httpd-fs/tcp.shtml new file mode 100644 index 000000000..41053679d --- /dev/null +++ b/Demo/SuperH_SH7216_Renesas/RTOSDemo/webserver/httpd-fs/tcp.shtml @@ -0,0 +1,21 @@ + + + + FreeRTOS.org uIP WEB server demo + + + +Task Stats | Run Time Stats | TCP Stats | Connections | FreeRTOS.org Homepage | IO +

+


+
+

Network connections

+

+ + +%! tcp-connections + + + + + diff --git a/Demo/SuperH_SH7216_Renesas/RTOSDemo/webserver/httpd-fsdata.c b/Demo/SuperH_SH7216_Renesas/RTOSDemo/webserver/httpd-fsdata.c new file mode 100644 index 000000000..c8b2a8026 --- /dev/null +++ b/Demo/SuperH_SH7216_Renesas/RTOSDemo/webserver/httpd-fsdata.c @@ -0,0 +1,557 @@ +static const char data_404_html[] = { + /* /404.html */ + 0x2f, 0x34, 0x30, 0x34, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0, + 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0xa, 0x20, 0x20, 0x3c, + 0x62, 0x6f, 0x64, 0x79, 0x20, 0x62, 0x67, 0x63, 0x6f, 0x6c, + 0x6f, 0x72, 0x3d, 0x22, 0x77, 0x68, 0x69, 0x74, 0x65, 0x22, + 0x3e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x63, 0x65, 0x6e, + 0x74, 0x65, 0x72, 0x3e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x68, 0x31, 0x3e, 0x34, 0x30, 0x34, 0x20, 0x2d, + 0x20, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x6e, 0x6f, 0x74, 0x20, + 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x3c, 0x2f, 0x68, 0x31, 0x3e, + 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x68, 0x33, + 0x3e, 0x47, 0x6f, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, + 0x66, 0x3d, 0x22, 0x2f, 0x22, 0x3e, 0x68, 0x65, 0x72, 0x65, + 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x65, + 0x61, 0x64, 0x2e, 0x3c, 0x2f, 0x68, 0x33, 0x3e, 0xa, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x63, 0x65, 0x6e, 0x74, 0x65, + 0x72, 0x3e, 0xa, 0x20, 0x20, 0x3c, 0x2f, 0x62, 0x6f, 0x64, + 0x79, 0x3e, 0xa, 0x3c, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, +0}; + +static const char data_index_html[] = { + /* /index.html */ + 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0, + 0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, 0x45, 0x20, + 0x48, 0x54, 0x4d, 0x4c, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, + 0x43, 0x20, 0x22, 0x2d, 0x2f, 0x2f, 0x57, 0x33, 0x43, 0x2f, + 0x2f, 0x44, 0x54, 0x44, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x20, + 0x34, 0x2e, 0x30, 0x31, 0x20, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x2f, 0x45, + 0x4e, 0x22, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, + 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, + 0x67, 0x2f, 0x54, 0x52, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x34, + 0x2f, 0x6c, 0x6f, 0x6f, 0x73, 0x65, 0x2e, 0x64, 0x74, 0x64, + 0x22, 0x3e, 0xa, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0xa, + 0x20, 0x20, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0xa, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e, + 0x46, 0x72, 0x65, 0x65, 0x52, 0x54, 0x4f, 0x53, 0x2e, 0x6f, + 0x72, 0x67, 0x20, 0x75, 0x49, 0x50, 0x20, 0x57, 0x45, 0x42, + 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x64, 0x65, + 0x6d, 0x6f, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e, + 0xa, 0x20, 0x20, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, + 0xa, 0x20, 0x20, 0x3c, 0x42, 0x4f, 0x44, 0x59, 0x20, 0x6f, + 0x6e, 0x4c, 0x6f, 0x61, 0x64, 0x3d, 0x22, 0x77, 0x69, 0x6e, + 0x64, 0x6f, 0x77, 0x2e, 0x73, 0x65, 0x74, 0x54, 0x69, 0x6d, + 0x65, 0x6f, 0x75, 0x74, 0x28, 0x26, 0x71, 0x75, 0x6f, 0x74, + 0x3b, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x68, 0x72, 0x65, 0x66, 0x3d, 0x27, 0x69, 0x6e, 0x64, 0x65, + 0x78, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x27, 0x26, 0x71, + 0x75, 0x6f, 0x74, 0x3b, 0x2c, 0x31, 0x30, 0x30, 0x29, 0x22, + 0x3e, 0xa, 0x3c, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x66, 0x61, + 0x63, 0x65, 0x3d, 0x22, 0x61, 0x72, 0x69, 0x61, 0x6c, 0x22, + 0x3e, 0xa, 0x4c, 0x6f, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x20, + 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x73, 0x68, 0x74, 0x6d, + 0x6c, 0x2e, 0x20, 0x20, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x20, + 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x69, + 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, + 0x22, 0x3e, 0x68, 0x65, 0x72, 0x65, 0x3c, 0x2f, 0x61, 0x3e, + 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x75, + 0x74, 0x6f, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x6c, + 0x79, 0x20, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, + 0x65, 0x64, 0x2e, 0xa, 0x3c, 0x2f, 0x66, 0x6f, 0x6e, 0x74, + 0x3e, 0xa, 0x3c, 0x2f, 0x66, 0x6f, 0x6e, 0x74, 0x3e, 0xa, + 0x3c, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0xa, 0x3c, 0x2f, + 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0xa, 0xa, 0}; + +static const char data_index_shtml[] = { + /* /index.shtml */ + 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0, + 0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, 0x45, 0x20, + 0x48, 0x54, 0x4d, 0x4c, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, + 0x43, 0x20, 0x22, 0x2d, 0x2f, 0x2f, 0x57, 0x33, 0x43, 0x2f, + 0x2f, 0x44, 0x54, 0x44, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x20, + 0x34, 0x2e, 0x30, 0x31, 0x20, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x2f, 0x45, + 0x4e, 0x22, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, + 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, + 0x67, 0x2f, 0x54, 0x52, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x34, + 0x2f, 0x6c, 0x6f, 0x6f, 0x73, 0x65, 0x2e, 0x64, 0x74, 0x64, + 0x22, 0x3e, 0xa, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0xa, + 0x20, 0x20, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0xa, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e, + 0x46, 0x72, 0x65, 0x65, 0x52, 0x54, 0x4f, 0x53, 0x2e, 0x6f, + 0x72, 0x67, 0x20, 0x75, 0x49, 0x50, 0x20, 0x57, 0x45, 0x42, + 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x64, 0x65, + 0x6d, 0x6f, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e, + 0xa, 0x20, 0x20, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, + 0xa, 0x20, 0x20, 0x3c, 0x42, 0x4f, 0x44, 0x59, 0x20, 0x6f, + 0x6e, 0x4c, 0x6f, 0x61, 0x64, 0x3d, 0x22, 0x77, 0x69, 0x6e, + 0x64, 0x6f, 0x77, 0x2e, 0x73, 0x65, 0x74, 0x54, 0x69, 0x6d, + 0x65, 0x6f, 0x75, 0x74, 0x28, 0x26, 0x71, 0x75, 0x6f, 0x74, + 0x3b, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x68, 0x72, 0x65, 0x66, 0x3d, 0x27, 0x69, 0x6e, 0x64, 0x65, + 0x78, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x27, 0x26, 0x71, + 0x75, 0x6f, 0x74, 0x3b, 0x2c, 0x32, 0x30, 0x30, 0x30, 0x29, + 0x22, 0x3e, 0xa, 0x3c, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x66, + 0x61, 0x63, 0x65, 0x3d, 0x22, 0x61, 0x72, 0x69, 0x61, 0x6c, + 0x22, 0x3e, 0xa, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, + 0x3d, 0x22, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x73, 0x68, + 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x54, 0x61, 0x73, 0x6b, 0x20, + 0x53, 0x74, 0x61, 0x74, 0x73, 0x3c, 0x2f, 0x61, 0x3e, 0x20, + 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, 0x20, 0x3c, + 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x72, 0x75, + 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x73, 0x68, 0x74, 0x6d, + 0x6c, 0x22, 0x3e, 0x52, 0x75, 0x6e, 0x20, 0x54, 0x69, 0x6d, + 0x65, 0x20, 0x53, 0x74, 0x61, 0x74, 0x73, 0x3c, 0x2f, 0x61, + 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, + 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, + 0x73, 0x74, 0x61, 0x74, 0x73, 0x2e, 0x73, 0x68, 0x74, 0x6d, + 0x6c, 0x22, 0x3e, 0x54, 0x43, 0x50, 0x20, 0x53, 0x74, 0x61, + 0x74, 0x73, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x3c, 0x62, 0x3e, + 0x7c, 0x3c, 0x2f, 0x62, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, + 0x72, 0x65, 0x66, 0x3d, 0x22, 0x74, 0x63, 0x70, 0x2e, 0x73, + 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x43, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3c, 0x2f, 0x61, + 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, + 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, + 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, + 0x2e, 0x66, 0x72, 0x65, 0x65, 0x72, 0x74, 0x6f, 0x73, 0x2e, + 0x6f, 0x72, 0x67, 0x2f, 0x22, 0x3e, 0x46, 0x72, 0x65, 0x65, + 0x52, 0x54, 0x4f, 0x53, 0x2e, 0x6f, 0x72, 0x67, 0x20, 0x48, + 0x6f, 0x6d, 0x65, 0x70, 0x61, 0x67, 0x65, 0x3c, 0x2f, 0x61, + 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, + 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, + 0x69, 0x6f, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, + 0x49, 0x4f, 0x3c, 0x2f, 0x61, 0x3e, 0xa, 0x3c, 0x62, 0x72, + 0x3e, 0x3c, 0x70, 0x3e, 0xa, 0x3c, 0x68, 0x72, 0x3e, 0xa, + 0x3c, 0x62, 0x72, 0x3e, 0x3c, 0x70, 0x3e, 0xa, 0x3c, 0x68, + 0x32, 0x3e, 0x54, 0x61, 0x73, 0x6b, 0x20, 0x73, 0x74, 0x61, + 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x3c, 0x2f, 0x68, + 0x32, 0x3e, 0xa, 0x50, 0x61, 0x67, 0x65, 0x20, 0x77, 0x69, + 0x6c, 0x6c, 0x20, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, + 0x20, 0x65, 0x76, 0x65, 0x72, 0x79, 0x20, 0x32, 0x20, 0x73, + 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x2e, 0x3c, 0x70, 0x3e, + 0xa, 0x3c, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x66, 0x61, 0x63, + 0x65, 0x3d, 0x22, 0x63, 0x6f, 0x75, 0x72, 0x69, 0x65, 0x72, + 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x65, 0x3e, 0x54, 0x61, 0x73, + 0x6b, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x20, 0x50, 0x72, + 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x20, 0x20, 0x53, 0x74, + 0x61, 0x63, 0x6b, 0x9, 0x23, 0x3c, 0x62, 0x72, 0x3e, 0x2a, + 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, + 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, + 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, + 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, + 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x3c, 0x62, 0x72, + 0x3e, 0xa, 0x25, 0x21, 0x20, 0x72, 0x74, 0x6f, 0x73, 0x2d, + 0x73, 0x74, 0x61, 0x74, 0x73, 0xa, 0x3c, 0x2f, 0x70, 0x72, + 0x65, 0x3e, 0x3c, 0x2f, 0x66, 0x6f, 0x6e, 0x74, 0x3e, 0xa, + 0x3c, 0x2f, 0x66, 0x6f, 0x6e, 0x74, 0x3e, 0xa, 0x3c, 0x2f, + 0x62, 0x6f, 0x64, 0x79, 0x3e, 0xa, 0x3c, 0x2f, 0x68, 0x74, + 0x6d, 0x6c, 0x3e, 0xa, 0xa, 0}; + +static const char data_io_shtml[] = { + /* /io.shtml */ + 0x2f, 0x69, 0x6f, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0, + 0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, 0x45, 0x20, + 0x48, 0x54, 0x4d, 0x4c, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, + 0x43, 0x20, 0x22, 0x2d, 0x2f, 0x2f, 0x57, 0x33, 0x43, 0x2f, + 0x2f, 0x44, 0x54, 0x44, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x20, + 0x34, 0x2e, 0x30, 0x31, 0x20, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x2f, 0x45, + 0x4e, 0x22, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, + 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, + 0x67, 0x2f, 0x54, 0x52, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x34, + 0x2f, 0x6c, 0x6f, 0x6f, 0x73, 0x65, 0x2e, 0x64, 0x74, 0x64, + 0x22, 0x3e, 0xa, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0xa, + 0x20, 0x20, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0xa, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e, + 0x46, 0x72, 0x65, 0x65, 0x52, 0x54, 0x4f, 0x53, 0x2e, 0x6f, + 0x72, 0x67, 0x20, 0x75, 0x49, 0x50, 0x20, 0x57, 0x45, 0x42, + 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x64, 0x65, + 0x6d, 0x6f, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e, + 0xa, 0x20, 0x20, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, + 0xa, 0x20, 0x20, 0x3c, 0x42, 0x4f, 0x44, 0x59, 0x3e, 0xa, + 0x3c, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x66, 0x61, 0x63, 0x65, + 0x3d, 0x22, 0x61, 0x72, 0x69, 0x61, 0x6c, 0x22, 0x3e, 0xa, + 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x69, + 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, + 0x22, 0x3e, 0x54, 0x61, 0x73, 0x6b, 0x20, 0x53, 0x74, 0x61, + 0x74, 0x73, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x3c, 0x62, 0x3e, + 0x7c, 0x3c, 0x2f, 0x62, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, + 0x72, 0x65, 0x66, 0x3d, 0x22, 0x72, 0x75, 0x6e, 0x74, 0x69, + 0x6d, 0x65, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, + 0x52, 0x75, 0x6e, 0x20, 0x54, 0x69, 0x6d, 0x65, 0x20, 0x53, + 0x74, 0x61, 0x74, 0x73, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x3c, + 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, 0x20, 0x3c, 0x61, + 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x73, 0x74, 0x61, + 0x74, 0x73, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, + 0x54, 0x43, 0x50, 0x20, 0x53, 0x74, 0x61, 0x74, 0x73, 0x3c, + 0x2f, 0x61, 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, + 0x62, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, + 0x3d, 0x22, 0x74, 0x63, 0x70, 0x2e, 0x73, 0x68, 0x74, 0x6d, + 0x6c, 0x22, 0x3e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x3c, + 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, 0x20, 0x3c, 0x61, + 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, + 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x66, 0x72, + 0x65, 0x65, 0x72, 0x74, 0x6f, 0x73, 0x2e, 0x6f, 0x72, 0x67, + 0x2f, 0x22, 0x3e, 0x46, 0x72, 0x65, 0x65, 0x52, 0x54, 0x4f, + 0x53, 0x2e, 0x6f, 0x72, 0x67, 0x20, 0x48, 0x6f, 0x6d, 0x65, + 0x70, 0x61, 0x67, 0x65, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x3c, + 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, 0x20, 0x3c, 0x61, + 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x69, 0x6f, 0x2e, + 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x49, 0x4f, 0x3c, + 0x2f, 0x61, 0x3e, 0xa, 0x3c, 0x62, 0x72, 0x3e, 0x3c, 0x70, + 0x3e, 0xa, 0x3c, 0x68, 0x72, 0x3e, 0xa, 0x3c, 0x62, 0x3e, + 0x4c, 0x45, 0x44, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x4c, 0x43, + 0x44, 0x20, 0x49, 0x4f, 0x3c, 0x2f, 0x62, 0x3e, 0x3c, 0x62, + 0x72, 0x3e, 0xa, 0xa, 0x3c, 0x70, 0x3e, 0xa, 0xa, 0x55, + 0x73, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x68, 0x65, + 0x63, 0x6b, 0x20, 0x62, 0x6f, 0x78, 0x20, 0x74, 0x6f, 0x20, + 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6f, 0x6e, 0x20, 0x6f, 0x72, + 0x20, 0x6f, 0x66, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4c, + 0x45, 0x44, 0x2c, 0x20, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x20, + 0x74, 0x65, 0x78, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x64, 0x69, + 0x73, 0x70, 0x6c, 0x61, 0x79, 0x20, 0x6f, 0x6e, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x4f, 0x4c, 0x45, 0x44, 0x20, 0x64, 0x69, + 0x73, 0x70, 0x6c, 0x61, 0x79, 0x2c, 0x20, 0x74, 0x68, 0x65, + 0x6e, 0x20, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x20, 0x22, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x49, 0x4f, 0x22, 0x2e, + 0xa, 0xa, 0xa, 0x3c, 0x70, 0x3e, 0xa, 0x3c, 0x66, 0x6f, + 0x72, 0x6d, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x61, + 0x46, 0x6f, 0x72, 0x6d, 0x22, 0x20, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x3d, 0x22, 0x2f, 0x69, 0x6f, 0x2e, 0x73, 0x68, + 0x74, 0x6d, 0x6c, 0x22, 0x20, 0x6d, 0x65, 0x74, 0x68, 0x6f, + 0x64, 0x3d, 0x22, 0x67, 0x65, 0x74, 0x22, 0x3e, 0xa, 0x25, + 0x21, 0x20, 0x6c, 0x65, 0x64, 0x2d, 0x69, 0x6f, 0xa, 0x3c, + 0x70, 0x3e, 0xa, 0x3c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, + 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x73, 0x75, 0x62, 0x6d, + 0x69, 0x74, 0x22, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, + 0x22, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x49, 0x4f, + 0x22, 0x3e, 0xa, 0x3c, 0x2f, 0x66, 0x6f, 0x72, 0x6d, 0x3e, + 0xa, 0x3c, 0x62, 0x72, 0x3e, 0x3c, 0x70, 0x3e, 0xa, 0x3c, + 0x2f, 0x66, 0x6f, 0x6e, 0x74, 0x3e, 0xa, 0x3c, 0x2f, 0x62, + 0x6f, 0x64, 0x79, 0x3e, 0xa, 0x3c, 0x2f, 0x68, 0x74, 0x6d, + 0x6c, 0x3e, 0xa, 0xa, 0}; + +static const char data_runtime_shtml[] = { + /* /runtime.shtml */ + 0x2f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0, + 0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, 0x45, 0x20, + 0x48, 0x54, 0x4d, 0x4c, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, + 0x43, 0x20, 0x22, 0x2d, 0x2f, 0x2f, 0x57, 0x33, 0x43, 0x2f, + 0x2f, 0x44, 0x54, 0x44, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x20, + 0x34, 0x2e, 0x30, 0x31, 0x20, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x2f, 0x45, + 0x4e, 0x22, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, + 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, + 0x67, 0x2f, 0x54, 0x52, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x34, + 0x2f, 0x6c, 0x6f, 0x6f, 0x73, 0x65, 0x2e, 0x64, 0x74, 0x64, + 0x22, 0x3e, 0xa, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0xa, + 0x20, 0x20, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0xa, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e, + 0x46, 0x72, 0x65, 0x65, 0x52, 0x54, 0x4f, 0x53, 0x2e, 0x6f, + 0x72, 0x67, 0x20, 0x75, 0x49, 0x50, 0x20, 0x57, 0x45, 0x42, + 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x64, 0x65, + 0x6d, 0x6f, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e, + 0xa, 0x20, 0x20, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, + 0xa, 0x20, 0x20, 0x3c, 0x42, 0x4f, 0x44, 0x59, 0x20, 0x6f, + 0x6e, 0x4c, 0x6f, 0x61, 0x64, 0x3d, 0x22, 0x77, 0x69, 0x6e, + 0x64, 0x6f, 0x77, 0x2e, 0x73, 0x65, 0x74, 0x54, 0x69, 0x6d, + 0x65, 0x6f, 0x75, 0x74, 0x28, 0x26, 0x71, 0x75, 0x6f, 0x74, + 0x3b, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x68, 0x72, 0x65, 0x66, 0x3d, 0x27, 0x72, 0x75, 0x6e, 0x74, + 0x69, 0x6d, 0x65, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x27, + 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x2c, 0x32, 0x30, 0x30, + 0x30, 0x29, 0x22, 0x3e, 0xa, 0x3c, 0x66, 0x6f, 0x6e, 0x74, + 0x20, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x61, 0x72, 0x69, + 0x61, 0x6c, 0x22, 0x3e, 0xa, 0x3c, 0x61, 0x20, 0x68, 0x72, + 0x65, 0x66, 0x3d, 0x22, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, + 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x54, 0x61, 0x73, + 0x6b, 0x20, 0x53, 0x74, 0x61, 0x74, 0x73, 0x3c, 0x2f, 0x61, + 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, + 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, + 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x73, 0x68, + 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x52, 0x75, 0x6e, 0x20, 0x54, + 0x69, 0x6d, 0x65, 0x20, 0x53, 0x74, 0x61, 0x74, 0x73, 0x3c, + 0x2f, 0x61, 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, + 0x62, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, + 0x3d, 0x22, 0x73, 0x74, 0x61, 0x74, 0x73, 0x2e, 0x73, 0x68, + 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x54, 0x43, 0x50, 0x20, 0x53, + 0x74, 0x61, 0x74, 0x73, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x3c, + 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, 0x20, 0x3c, 0x61, + 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x74, 0x63, 0x70, + 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x43, 0x6f, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3c, + 0x2f, 0x61, 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, + 0x62, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, + 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, + 0x77, 0x77, 0x2e, 0x66, 0x72, 0x65, 0x65, 0x72, 0x74, 0x6f, + 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x22, 0x3e, 0x46, 0x72, + 0x65, 0x65, 0x52, 0x54, 0x4f, 0x53, 0x2e, 0x6f, 0x72, 0x67, + 0x20, 0x48, 0x6f, 0x6d, 0x65, 0x70, 0x61, 0x67, 0x65, 0x3c, + 0x2f, 0x61, 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, + 0x62, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, + 0x3d, 0x22, 0x69, 0x6f, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, + 0x22, 0x3e, 0x49, 0x4f, 0x3c, 0x2f, 0x61, 0x3e, 0xa, 0x3c, + 0x62, 0x72, 0x3e, 0x3c, 0x70, 0x3e, 0xa, 0x3c, 0x68, 0x72, + 0x3e, 0xa, 0x3c, 0x62, 0x72, 0x3e, 0x3c, 0x70, 0x3e, 0xa, + 0x3c, 0x68, 0x32, 0x3e, 0x52, 0x75, 0x6e, 0x2d, 0x74, 0x69, + 0x6d, 0x65, 0x20, 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, + 0x69, 0x63, 0x73, 0x3c, 0x2f, 0x68, 0x32, 0x3e, 0xa, 0x50, + 0x61, 0x67, 0x65, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x72, + 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x20, 0x65, 0x76, 0x65, + 0x72, 0x79, 0x20, 0x32, 0x20, 0x73, 0x65, 0x63, 0x6f, 0x6e, + 0x64, 0x73, 0x2e, 0x3c, 0x70, 0x3e, 0xa, 0x3c, 0x66, 0x6f, + 0x6e, 0x74, 0x20, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x63, + 0x6f, 0x75, 0x72, 0x69, 0x65, 0x72, 0x22, 0x3e, 0x3c, 0x70, + 0x72, 0x65, 0x3e, 0x54, 0x61, 0x73, 0x6b, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x41, + 0x62, 0x73, 0x20, 0x54, 0x69, 0x6d, 0x65, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x25, 0x20, 0x54, 0x69, 0x6d, 0x65, 0x3c, + 0x62, 0x72, 0x3e, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, + 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, + 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, + 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, + 0x2a, 0x2a, 0x2a, 0x3c, 0x62, 0x72, 0x3e, 0xa, 0x25, 0x21, + 0x20, 0x72, 0x75, 0x6e, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0xa, + 0x3c, 0x2f, 0x70, 0x72, 0x65, 0x3e, 0x3c, 0x2f, 0x66, 0x6f, + 0x6e, 0x74, 0x3e, 0xa, 0x3c, 0x2f, 0x66, 0x6f, 0x6e, 0x74, + 0x3e, 0xa, 0x3c, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0xa, + 0x3c, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0xa, 0xa, 0}; + +static const char data_stats_shtml[] = { + /* /stats.shtml */ + 0x2f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0, + 0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, 0x45, 0x20, + 0x48, 0x54, 0x4d, 0x4c, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, + 0x43, 0x20, 0x22, 0x2d, 0x2f, 0x2f, 0x57, 0x33, 0x43, 0x2f, + 0x2f, 0x44, 0x54, 0x44, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x20, + 0x34, 0x2e, 0x30, 0x31, 0x20, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x2f, 0x45, + 0x4e, 0x22, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, + 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, + 0x67, 0x2f, 0x54, 0x52, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x34, + 0x2f, 0x6c, 0x6f, 0x6f, 0x73, 0x65, 0x2e, 0x64, 0x74, 0x64, + 0x22, 0x3e, 0xa, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0xa, + 0x20, 0x20, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0xa, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e, + 0x46, 0x72, 0x65, 0x65, 0x52, 0x54, 0x4f, 0x53, 0x2e, 0x6f, + 0x72, 0x67, 0x20, 0x75, 0x49, 0x50, 0x20, 0x57, 0x45, 0x42, + 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x64, 0x65, + 0x6d, 0x6f, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e, + 0xa, 0x20, 0x20, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, + 0xa, 0x20, 0x20, 0x3c, 0x42, 0x4f, 0x44, 0x59, 0x3e, 0xa, + 0x3c, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x66, 0x61, 0x63, 0x65, + 0x3d, 0x22, 0x61, 0x72, 0x69, 0x61, 0x6c, 0x22, 0x3e, 0xa, + 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x69, + 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, + 0x22, 0x3e, 0x54, 0x61, 0x73, 0x6b, 0x20, 0x53, 0x74, 0x61, + 0x74, 0x73, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x3c, 0x62, 0x3e, + 0x7c, 0x3c, 0x2f, 0x62, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, + 0x72, 0x65, 0x66, 0x3d, 0x22, 0x72, 0x75, 0x6e, 0x74, 0x69, + 0x6d, 0x65, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, + 0x52, 0x75, 0x6e, 0x20, 0x54, 0x69, 0x6d, 0x65, 0x20, 0x53, + 0x74, 0x61, 0x74, 0x73, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x3c, + 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, 0x20, 0x3c, 0x61, + 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x73, 0x74, 0x61, + 0x74, 0x73, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, + 0x54, 0x43, 0x50, 0x20, 0x53, 0x74, 0x61, 0x74, 0x73, 0x3c, + 0x2f, 0x61, 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, + 0x62, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, + 0x3d, 0x22, 0x74, 0x63, 0x70, 0x2e, 0x73, 0x68, 0x74, 0x6d, + 0x6c, 0x22, 0x3e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x3c, + 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, 0x20, 0x3c, 0x61, + 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, + 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x66, 0x72, + 0x65, 0x65, 0x72, 0x74, 0x6f, 0x73, 0x2e, 0x6f, 0x72, 0x67, + 0x2f, 0x22, 0x3e, 0x46, 0x72, 0x65, 0x65, 0x52, 0x54, 0x4f, + 0x53, 0x2e, 0x6f, 0x72, 0x67, 0x20, 0x48, 0x6f, 0x6d, 0x65, + 0x70, 0x61, 0x67, 0x65, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x3c, + 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, 0x20, 0x3c, 0x61, + 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x69, 0x6f, 0x2e, + 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x49, 0x4f, 0x3c, + 0x2f, 0x61, 0x3e, 0xa, 0x3c, 0x62, 0x72, 0x3e, 0x3c, 0x70, + 0x3e, 0xa, 0x3c, 0x68, 0x72, 0x3e, 0xa, 0x3c, 0x62, 0x72, + 0x3e, 0x3c, 0x70, 0x3e, 0xa, 0x3c, 0x68, 0x32, 0x3e, 0x4e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x73, 0x74, 0x61, + 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x3c, 0x2f, 0x68, + 0x32, 0x3e, 0xa, 0x3c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, + 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, 0x22, 0x33, 0x30, 0x30, + 0x22, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x3d, 0x22, + 0x30, 0x22, 0x3e, 0xa, 0x3c, 0x74, 0x72, 0x3e, 0x3c, 0x74, + 0x64, 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x6c, + 0x65, 0x66, 0x74, 0x22, 0x3e, 0x3c, 0x66, 0x6f, 0x6e, 0x74, + 0x20, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x63, 0x6f, 0x75, + 0x72, 0x69, 0x65, 0x72, 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x65, + 0x3e, 0xa, 0x49, 0x50, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x61, 0x63, 0x6b, 0x65, + 0x74, 0x73, 0x20, 0x64, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, + 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, + 0x73, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, + 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, + 0x73, 0x20, 0x73, 0x65, 0x6e, 0x74, 0xa, 0x49, 0x50, 0x20, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x20, 0x20, 0x20, 0x20, + 0x49, 0x50, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x2f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x20, 0x6c, 0x65, + 0x6e, 0x67, 0x74, 0x68, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x49, 0x50, + 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x2c, 0x20, 0x68, + 0x69, 0x67, 0x68, 0x20, 0x62, 0x79, 0x74, 0x65, 0xa, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x49, 0x50, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, + 0x68, 0x2c, 0x20, 0x6c, 0x6f, 0x77, 0x20, 0x62, 0x79, 0x74, + 0x65, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x49, 0x50, 0x20, 0x66, 0x72, + 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0xa, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x20, 0x63, 0x68, + 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0xa, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x57, 0x72, 0x6f, 0x6e, 0x67, 0x20, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x63, 0x6f, 0x6c, 0xa, 0x49, 0x43, 0x4d, 0x50, 0x9, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x61, 0x63, 0x6b, 0x65, + 0x74, 0x73, 0x20, 0x64, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, + 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, + 0x73, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, + 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, + 0x73, 0x20, 0x73, 0x65, 0x6e, 0x74, 0xa, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x54, 0x79, 0x70, 0x65, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x73, 0xa, 0x54, 0x43, 0x50, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x61, 0x63, 0x6b, 0x65, + 0x74, 0x73, 0x20, 0x64, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, + 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, + 0x73, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, + 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, + 0x73, 0x20, 0x73, 0x65, 0x6e, 0x74, 0xa, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x20, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x73, 0xa, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x44, + 0x61, 0x74, 0x61, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, + 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x20, + 0x41, 0x43, 0x4b, 0x73, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x52, 0x65, + 0x73, 0x65, 0x74, 0x73, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x52, 0x65, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0xa, 0x9, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x4e, 0x6f, 0x20, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x76, 0x61, 0x6c, 0x69, 0x61, + 0x62, 0x6c, 0x65, 0xa, 0x9, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x20, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x73, 0x20, + 0x74, 0x6f, 0x20, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x64, 0x20, + 0x70, 0x6f, 0x72, 0x74, 0x73, 0xa, 0x3c, 0x2f, 0x70, 0x72, + 0x65, 0x3e, 0x3c, 0x2f, 0x66, 0x6f, 0x6e, 0x74, 0x3e, 0x3c, + 0x2f, 0x74, 0x64, 0x3e, 0x3c, 0x74, 0x64, 0x3e, 0x3c, 0x70, + 0x72, 0x65, 0x3e, 0x25, 0x21, 0x20, 0x6e, 0x65, 0x74, 0x2d, + 0x73, 0x74, 0x61, 0x74, 0x73, 0xa, 0x3c, 0x2f, 0x70, 0x72, + 0x65, 0x3e, 0x3c, 0x2f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x3e, + 0xa, 0x3c, 0x2f, 0x66, 0x6f, 0x6e, 0x74, 0x3e, 0xa, 0x3c, + 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0xa, 0x3c, 0x2f, 0x68, + 0x74, 0x6d, 0x6c, 0x3e, 0xa, 0}; + +static const char data_tcp_shtml[] = { + /* /tcp.shtml */ + 0x2f, 0x74, 0x63, 0x70, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0, + 0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, 0x45, 0x20, + 0x48, 0x54, 0x4d, 0x4c, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, + 0x43, 0x20, 0x22, 0x2d, 0x2f, 0x2f, 0x57, 0x33, 0x43, 0x2f, + 0x2f, 0x44, 0x54, 0x44, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x20, + 0x34, 0x2e, 0x30, 0x31, 0x20, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x2f, 0x45, + 0x4e, 0x22, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, + 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, + 0x67, 0x2f, 0x54, 0x52, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x34, + 0x2f, 0x6c, 0x6f, 0x6f, 0x73, 0x65, 0x2e, 0x64, 0x74, 0x64, + 0x22, 0x3e, 0xa, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0xa, + 0x20, 0x20, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0xa, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e, + 0x46, 0x72, 0x65, 0x65, 0x52, 0x54, 0x4f, 0x53, 0x2e, 0x6f, + 0x72, 0x67, 0x20, 0x75, 0x49, 0x50, 0x20, 0x57, 0x45, 0x42, + 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x64, 0x65, + 0x6d, 0x6f, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e, + 0xa, 0x20, 0x20, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, + 0xa, 0x20, 0x20, 0x3c, 0x42, 0x4f, 0x44, 0x59, 0x3e, 0xa, + 0x3c, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x66, 0x61, 0x63, 0x65, + 0x3d, 0x22, 0x61, 0x72, 0x69, 0x61, 0x6c, 0x22, 0x3e, 0xa, + 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x69, + 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, + 0x22, 0x3e, 0x54, 0x61, 0x73, 0x6b, 0x20, 0x53, 0x74, 0x61, + 0x74, 0x73, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x3c, 0x62, 0x3e, + 0x7c, 0x3c, 0x2f, 0x62, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, + 0x72, 0x65, 0x66, 0x3d, 0x22, 0x72, 0x75, 0x6e, 0x74, 0x69, + 0x6d, 0x65, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, + 0x52, 0x75, 0x6e, 0x20, 0x54, 0x69, 0x6d, 0x65, 0x20, 0x53, + 0x74, 0x61, 0x74, 0x73, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x3c, + 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, 0x20, 0x3c, 0x61, + 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x73, 0x74, 0x61, + 0x74, 0x73, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, + 0x54, 0x43, 0x50, 0x20, 0x53, 0x74, 0x61, 0x74, 0x73, 0x3c, + 0x2f, 0x61, 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, + 0x62, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, + 0x3d, 0x22, 0x74, 0x63, 0x70, 0x2e, 0x73, 0x68, 0x74, 0x6d, + 0x6c, 0x22, 0x3e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x3c, + 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, 0x20, 0x3c, 0x61, + 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, + 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x66, 0x72, + 0x65, 0x65, 0x72, 0x74, 0x6f, 0x73, 0x2e, 0x6f, 0x72, 0x67, + 0x2f, 0x22, 0x3e, 0x46, 0x72, 0x65, 0x65, 0x52, 0x54, 0x4f, + 0x53, 0x2e, 0x6f, 0x72, 0x67, 0x20, 0x48, 0x6f, 0x6d, 0x65, + 0x70, 0x61, 0x67, 0x65, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x3c, + 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, 0x20, 0x3c, 0x61, + 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x69, 0x6f, 0x2e, + 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x49, 0x4f, 0x3c, + 0x2f, 0x61, 0x3e, 0xa, 0x3c, 0x62, 0x72, 0x3e, 0x3c, 0x70, + 0x3e, 0xa, 0x3c, 0x68, 0x72, 0x3e, 0xa, 0x3c, 0x62, 0x72, + 0x3e, 0xa, 0x3c, 0x68, 0x32, 0x3e, 0x4e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x20, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3c, 0x2f, 0x68, 0x32, 0x3e, + 0xa, 0x3c, 0x70, 0x3e, 0xa, 0x3c, 0x74, 0x61, 0x62, 0x6c, + 0x65, 0x3e, 0xa, 0x3c, 0x74, 0x72, 0x3e, 0x3c, 0x74, 0x68, + 0x3e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x2f, 0x74, 0x68, + 0x3e, 0x3c, 0x74, 0x68, 0x3e, 0x52, 0x65, 0x6d, 0x6f, 0x74, + 0x65, 0x3c, 0x2f, 0x74, 0x68, 0x3e, 0x3c, 0x74, 0x68, 0x3e, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x3c, 0x2f, 0x74, 0x68, 0x3e, + 0x3c, 0x74, 0x68, 0x3e, 0x52, 0x65, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x3c, + 0x2f, 0x74, 0x68, 0x3e, 0x3c, 0x74, 0x68, 0x3e, 0x54, 0x69, + 0x6d, 0x65, 0x72, 0x3c, 0x2f, 0x74, 0x68, 0x3e, 0x3c, 0x74, + 0x68, 0x3e, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x3c, 0x2f, 0x74, + 0x68, 0x3e, 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0xa, 0x25, 0x21, + 0x20, 0x74, 0x63, 0x70, 0x2d, 0x63, 0x6f, 0x6e, 0x6e, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0xa, 0x3c, 0x2f, 0x70, + 0x72, 0x65, 0x3e, 0x3c, 0x2f, 0x66, 0x6f, 0x6e, 0x74, 0x3e, + 0xa, 0x3c, 0x2f, 0x66, 0x6f, 0x6e, 0x74, 0x3e, 0xa, 0x3c, + 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0xa, 0x3c, 0x2f, 0x68, + 0x74, 0x6d, 0x6c, 0x3e, 0xa, 0xa, 0}; + +const struct httpd_fsdata_file file_404_html[] = {{NULL, data_404_html, data_404_html + 10, sizeof(data_404_html) - 10, 0}}; + +const struct httpd_fsdata_file file_index_html[] = {{file_404_html, data_index_html, data_index_html + 12, sizeof(data_index_html) - 12, 0}}; + +const struct httpd_fsdata_file file_index_shtml[] = {{file_index_html, data_index_shtml, data_index_shtml + 13, sizeof(data_index_shtml) - 13, 0}}; + +const struct httpd_fsdata_file file_io_shtml[] = {{file_index_shtml, data_io_shtml, data_io_shtml + 10, sizeof(data_io_shtml) - 10, 0}}; + +const struct httpd_fsdata_file file_runtime_shtml[] = {{file_io_shtml, data_runtime_shtml, data_runtime_shtml + 15, sizeof(data_runtime_shtml) - 15, 0}}; + +const struct httpd_fsdata_file file_stats_shtml[] = {{file_runtime_shtml, data_stats_shtml, data_stats_shtml + 13, sizeof(data_stats_shtml) - 13, 0}}; + +const struct httpd_fsdata_file file_tcp_shtml[] = {{file_stats_shtml, data_tcp_shtml, data_tcp_shtml + 11, sizeof(data_tcp_shtml) - 11, 0}}; + +#define HTTPD_FS_ROOT file_tcp_shtml + +#define HTTPD_FS_NUMFILES 7 diff --git a/Demo/SuperH_SH7216_Renesas/RTOSDemo/webserver/makefsdata b/Demo/SuperH_SH7216_Renesas/RTOSDemo/webserver/makefsdata new file mode 100644 index 000000000..8d2715a8a --- /dev/null +++ b/Demo/SuperH_SH7216_Renesas/RTOSDemo/webserver/makefsdata @@ -0,0 +1,78 @@ +#!/usr/bin/perl + +open(OUTPUT, "> httpd-fsdata.c"); + +chdir("httpd-fs"); + +opendir(DIR, "."); +@files = grep { !/^\./ && !/(CVS|~)/ } readdir(DIR); +closedir(DIR); + +foreach $file (@files) { + + if(-d $file && $file !~ /^\./) { + print "Processing directory $file\n"; + opendir(DIR, $file); + @newfiles = grep { !/^\./ && !/(CVS|~)/ } readdir(DIR); + closedir(DIR); + printf "Adding files @newfiles\n"; + @files = (@files, map { $_ = "$file/$_" } @newfiles); + next; + } +} + +foreach $file (@files) { + if(-f $file) { + + print "Adding file $file\n"; + + open(FILE, $file) || die "Could not open file $file\n"; + + $file =~ s-^-/-; + $fvar = $file; + $fvar =~ s-/-_-g; + $fvar =~ s-\.-_-g; + # for AVR, add PROGMEM here + 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 "0};\n\n"); + close(FILE); + push(@fvars, $fvar); + push(@pfiles, $file); + } +} + +for($i = 0; $i < @fvars; $i++) { + $file = $pfiles[$i]; + $fvar = $fvars[$i]; + + if($i == 0) { + $prevfile = "NULL"; + } else { + $prevfile = "file" . $fvars[$i - 1]; + } + print(OUTPUT "const struct httpd_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 HTTPD_FS_ROOT file$fvars[$i - 1]\n\n"); +print(OUTPUT "#define HTTPD_FS_NUMFILES $i\n"); diff --git a/Demo/SuperH_SH7216_Renesas/RTOSDemo/webserver/uip-conf.h b/Demo/SuperH_SH7216_Renesas/RTOSDemo/webserver/uip-conf.h new file mode 100644 index 000000000..e43d8dc53 --- /dev/null +++ b/Demo/SuperH_SH7216_Renesas/RTOSDemo/webserver/uip-conf.h @@ -0,0 +1,162 @@ +/** + * \addtogroup uipopt + * @{ + */ + +/** + * \name Project-specific configuration options + * @{ + * + * uIP has a number of configuration options that can be overridden + * for each project. These are kept in a project-specific uip-conf.h + * file and all configuration names have the prefix UIP_CONF. + */ + +/* + * Copyright (c) 2006, 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. Neither the name of the Institute 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 INSTITUTE 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 INSTITUTE 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. + * + * This file is part of the uIP TCP/IP stack + * + * $Id: uip-conf.h,v 1.6 2006/06/12 08:00:31 adam Exp $ + */ + +/** + * \file + * An example uIP configuration file + * \author + * Adam Dunkels + */ + +#ifndef __UIP_CONF_H__ +#define __UIP_CONF_H__ + +#define UIP_CONF_EXTERNAL_BUFFER + +/** + * 8 bit datatype + * + * This typedef defines the 8-bit type used throughout uIP. + * + * \hideinitializer + */ +typedef unsigned char u8_t; + +/** + * 16 bit datatype + * + * This typedef defines the 16-bit type used throughout uIP. + * + * \hideinitializer + */ +typedef unsigned short u16_t; + +typedef unsigned long u32_t; + +/** + * Statistics datatype + * + * This typedef defines the dataype used for keeping statistics in + * uIP. + * + * \hideinitializer + */ +typedef unsigned short uip_stats_t; + +/** + * Maximum number of TCP connections. + * + * \hideinitializer + */ +#define UIP_CONF_MAX_CONNECTIONS 40 + +/** + * Maximum number of listening TCP ports. + * + * \hideinitializer + */ +#define UIP_CONF_MAX_LISTENPORTS 40 + +/** + * uIP buffer size. + * + * \hideinitializer + */ +#define UIP_CONF_BUFFER_SIZE 1480 + +/** + * CPU byte order. + * + * \hideinitializer + */ +#define UIP_CONF_BYTE_ORDER UIP_BIG_ENDIAN + +/** + * Logging on or off + * + * \hideinitializer + */ +#define UIP_CONF_LOGGING 0 + +/** + * UDP support on or off + * + * \hideinitializer + */ +#define UIP_CONF_UDP 0 + +/** + * UDP checksums on or off + * + * \hideinitializer + */ +#define UIP_CONF_UDP_CHECKSUMS 1 + +/** + * uIP statistics on or off + * + * \hideinitializer + */ +#define UIP_CONF_STATISTICS 1 + +/* Here we include the header file for the application(s) we use in + our project. */ +/*#include "smtp.h"*/ +/*#include "hello-world.h"*/ +/*#include "telnetd.h"*/ +#include "webserver.h" +/*#include "dhcpc.h"*/ +/*#include "resolv.h"*/ +/*#include "webclient.h"*/ + +#define CCIF +#define CC_REGISTER_ARG + +#endif /* __UIP_CONF_H__ */ + +/** @} */ +/** @} */ diff --git a/Demo/SuperH_SH7216_Renesas/RTOSDemo/webserver/webserver.h b/Demo/SuperH_SH7216_Renesas/RTOSDemo/webserver/webserver.h new file mode 100644 index 000000000..5267f0587 --- /dev/null +++ b/Demo/SuperH_SH7216_Renesas/RTOSDemo/webserver/webserver.h @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2002, Adam Dunkels. + * 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 uIP TCP/IP stack + * + * $Id: webserver.h,v 1.2 2006/06/11 21:46:38 adam Exp $ + * + */ +#ifndef __WEBSERVER_H__ +#define __WEBSERVER_H__ + +#include "apps/httpd/httpd.h" + +typedef struct httpd_state uip_tcp_appstate_t; +/* UIP_APPCALL: the name of the application function. This function + must return void and take no arguments (i.e., C type "void + appfunc(void)"). */ +#define UIP_APPCALL httpd_appcall + + +#endif /* __WEBSERVER_H__ */ -- 2.39.5
LocalRemoteStateRetransmissionsTimerFlags