]> git.sur5r.net Git - freertos/commitdiff
Add LPC2368 demo.
authorrichardbarry <richardbarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Thu, 5 Apr 2007 13:47:25 +0000 (13:47 +0000)
committerrichardbarry <richardbarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Thu, 5 Apr 2007 13:47:25 +0000 (13:47 +0000)
git-svn-id: https://svn.code.sf.net/p/freertos/code/trunk@79 1d2547de-c912-0410-9cb9-b8ca96c0e9e2

43 files changed:
Demo/ARM7_LPC2368_Rowley/FreeRTOSConfig.h [new file with mode: 0644]
Demo/ARM7_LPC2368_Rowley/LCD/portlcd.c [new file with mode: 0644]
Demo/ARM7_LPC2368_Rowley/LCD/portlcd.h [new file with mode: 0644]
Demo/ARM7_LPC2368_Rowley/ParTest/ParTest.c [new file with mode: 0644]
Demo/ARM7_LPC2368_Rowley/RTOSDemo.hzp [new file with mode: 0644]
Demo/ARM7_LPC2368_Rowley/RTOSDemo.hzs [new file with mode: 0644]
Demo/ARM7_LPC2368_Rowley/main.c [new file with mode: 0644]
Demo/ARM7_LPC2368_Rowley/webserver/EMAC_ISR.c [new file with mode: 0644]
Demo/ARM7_LPC2368_Rowley/webserver/clock-arch.h [new file with mode: 0644]
Demo/ARM7_LPC2368_Rowley/webserver/emac.c [new file with mode: 0644]
Demo/ARM7_LPC2368_Rowley/webserver/emac.h [new file with mode: 0644]
Demo/ARM7_LPC2368_Rowley/webserver/http-strings [new file with mode: 0644]
Demo/ARM7_LPC2368_Rowley/webserver/http-strings.c [new file with mode: 0644]
Demo/ARM7_LPC2368_Rowley/webserver/http-strings.h [new file with mode: 0644]
Demo/ARM7_LPC2368_Rowley/webserver/httpd-cgi.c [new file with mode: 0644]
Demo/ARM7_LPC2368_Rowley/webserver/httpd-cgi.h [new file with mode: 0644]
Demo/ARM7_LPC2368_Rowley/webserver/httpd-fs.c [new file with mode: 0644]
Demo/ARM7_LPC2368_Rowley/webserver/httpd-fs.h [new file with mode: 0644]
Demo/ARM7_LPC2368_Rowley/webserver/httpd-fs/404.html [new file with mode: 0644]
Demo/ARM7_LPC2368_Rowley/webserver/httpd-fs/index.html [new file with mode: 0644]
Demo/ARM7_LPC2368_Rowley/webserver/httpd-fs/index.shtml [new file with mode: 0644]
Demo/ARM7_LPC2368_Rowley/webserver/httpd-fs/io.shtml [new file with mode: 0644]
Demo/ARM7_LPC2368_Rowley/webserver/httpd-fs/stats.shtml [new file with mode: 0644]
Demo/ARM7_LPC2368_Rowley/webserver/httpd-fs/tcp.shtml [new file with mode: 0644]
Demo/ARM7_LPC2368_Rowley/webserver/httpd-fsdata.c [new file with mode: 0644]
Demo/ARM7_LPC2368_Rowley/webserver/httpd-fsdata.h [new file with mode: 0644]
Demo/ARM7_LPC2368_Rowley/webserver/httpd.c [new file with mode: 0644]
Demo/ARM7_LPC2368_Rowley/webserver/httpd.h [new file with mode: 0644]
Demo/ARM7_LPC2368_Rowley/webserver/makefsdata [new file with mode: 0644]
Demo/ARM7_LPC2368_Rowley/webserver/makestrings [new file with mode: 0644]
Demo/ARM7_LPC2368_Rowley/webserver/uIP_Task.c [new file with mode: 0644]
Demo/ARM7_LPC2368_Rowley/webserver/uip-conf.h [new file with mode: 0644]
Demo/ARM7_LPC2368_Rowley/webserver/webserver.h [new file with mode: 0644]
Demo/ARM9_STR91X_IAR/RTOSDemo.dep [deleted file]
Demo/ARM9_STR91X_IAR/RTOSDemo.ewp
Demo/Common/ethernet/uIP/uip-1.0/uip/uip-fw.c
Demo/Common/ethernet/uIP/uip-1.0/uip/uip.c
Demo/Common/ethernet/uIP/uip-1.0/uip/uip.h
Demo/Common/ethernet/uIP/uip-1.0/uip/uip_arp.c
Demo/Common/ethernet/uIP/uip-1.0/uip/uip_arp.h
Source/portable/GCC/ARM7_LPC23xx/port.c [new file with mode: 0644]
Source/portable/GCC/ARM7_LPC23xx/portISR.c [new file with mode: 0644]
Source/portable/GCC/ARM7_LPC23xx/portmacro.h [new file with mode: 0644]

diff --git a/Demo/ARM7_LPC2368_Rowley/FreeRTOSConfig.h b/Demo/ARM7_LPC2368_Rowley/FreeRTOSConfig.h
new file mode 100644 (file)
index 0000000..80547d9
--- /dev/null
@@ -0,0 +1,111 @@
+/*\r
+       FreeRTOS V3.2.3 - Copyright (C) 2003-2005 Richard Barry.\r
+\r
+       This file is part of the FreeRTOS distribution.\r
+\r
+       FreeRTOS is free software; you can redistribute it and/or modify\r
+       it under the terms of the GNU General Public License as published by\r
+       the Free Software Foundation; either version 2 of the License, or\r
+       (at your option) any later version.\r
+\r
+       FreeRTOS is distributed in the hope that it will be useful,\r
+       but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+       GNU General Public License for more details.\r
+\r
+       You should have received a copy of the GNU General Public License\r
+       along with FreeRTOS; if not, write to the Free Software\r
+       Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\r
+\r
+       A special exception to the GPL can be applied should you wish to distribute\r
+       a combined work that includes FreeRTOS, without being obliged to provide\r
+       the source code for any proprietary components.  See the licensing section \r
+       of http://www.FreeRTOS.org for full details of how and when the exception\r
+       can be applied.\r
+\r
+       ***************************************************************************\r
+       See http://www.FreeRTOS.org for documentation, latest information, license \r
+       and contact details.  Please ensure to read the configuration and relevant \r
+       port sections of the online documentation.\r
+       ***************************************************************************\r
+*/\r
+\r
+#ifndef FREERTOS_CONFIG_H\r
+#define FREERTOS_CONFIG_H\r
+\r
+#include <stdio.h>\r
+#include <targets/LPC2368.h>\r
+#define vPortYieldProcessor swi_handler\r
+/*-----------------------------------------------------------\r
+ * Application specific definitions.\r
+ *\r
+ * These definitions should be adjusted for your particular hardware and\r
+ * application requirements.\r
+ *\r
+ * THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
+ * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. \r
+ *----------------------------------------------------------*/\r
+\r
+#define configUSE_PREEMPTION           1\r
+#define configUSE_IDLE_HOOK         0\r
+#define configUSE_TICK_HOOK         0\r
+#define configCPU_CLOCK_HZ          ( ( unsigned portLONG ) 57600000 ) /* =12Mhz xtal multiplied by 5 using the PLL. */\r
+#define configTICK_RATE_HZ          ( ( portTickType ) 1000 )\r
+#define configMAX_PRIORITIES           ( ( unsigned portBASE_TYPE ) 4 )\r
+#define configMINIMAL_STACK_SIZE       ( ( unsigned portSHORT ) 120 )\r
+#define configTOTAL_HEAP_SIZE          ( ( size_t ) ( 18 * 1024 ) )\r
+#define configMAX_TASK_NAME_LEN                ( 16 )\r
+#define configUSE_TRACE_FACILITY       1\r
+#define configUSE_16_BIT_TICKS         0\r
+#define configIDLE_SHOULD_YIELD                1\r
+\r
+/* Co-routine definitions. */\r
+#define configUSE_CO_ROUTINES          0\r
+#define configMAX_CO_ROUTINE_PRIORITIES ( 2 )\r
+\r
+\r
+/* Set the following definitions to 1 to include the API function, or zero\r
+to exclude the API function. */\r
+\r
+#define INCLUDE_vTaskPrioritySet            1\r
+#define INCLUDE_uxTaskPriorityGet           1\r
+#define INCLUDE_vTaskDelete                 1\r
+#define INCLUDE_vTaskCleanUpResources       0\r
+#define INCLUDE_vTaskSuspend                1\r
+#define INCLUDE_vTaskDelayUntil             1\r
+#define INCLUDE_vTaskDelay                  1\r
+#define INCLUDE_xTaskGetCurrentTaskHandle      1\r
+\r
+\r
+#endif /* FREERTOS_CONFIG_H */\r
+\r
+\r
+#ifndef sbi\r
+#define sbi(x,y)       x|=(1 << (y))\r
+#endif\r
+\r
+#ifndef cbi \r
+#define cbi(x,y)       x&=~(1 << (y))\r
+#endif\r
+\r
+#ifndef tstb\r
+#define tstb(x,y)      (x & (1 << (y)) ? 1 : 0)\r
+#endif\r
+\r
+#ifndef toggle \r
+#define toggle(x,y)    x^=(1 << (y))\r
+#endif\r
+\r
+#ifndef BIT\r
+#define BIT(x) (1 << (x))\r
+\r
+\r
+#define VICVectAddr    VICAddress\r
+\r
+typedef struct\r
+{\r
+       long xColumn;\r
+       signed char *pcMessage;\r
+} xLCDMessage;\r
+\r
+#endif\r
diff --git a/Demo/ARM7_LPC2368_Rowley/LCD/portlcd.c b/Demo/ARM7_LPC2368_Rowley/LCD/portlcd.c
new file mode 100644 (file)
index 0000000..77219ff
--- /dev/null
@@ -0,0 +1,392 @@
+/*****************************************************************************\r
+ *\r
+ * Project          : lwIP Web\r
+ * Subproject       : \r
+ * Name             : portlcd.c\r
+ * Function         : Routines for LCD\r
+ * Designer         : K. Sterckx\r
+ * Creation date    : 22/01/2007\r
+ * Compiler         : GNU ARM\r
+ * Processor        : LPC2368\r
+ * Last update      :\r
+ * Last updated by  :\r
+ * History          : \r
+ *  based on example code from NXP\r
+ *\r
+ ************************************************************************\r
+ *\r
+ *  This code is used to place text on the LCD.\r
+ *\r
+ ************************************************************************/\r
+\r
+#include <targets/LPC2368.h>\r
+#include "portlcd.h"\r
+#include "FreeRTOS.h"\r
+#include "Task.h"\r
+\r
+/* Please note, on old MCB2300 board, the LCD_E bit is p1.30, on the new board\r
+it's p1.31, please check the schematic carefully, and change LCD_CTRL and LCD_E \r
+accordingly if you have a different board. */\r
+\r
+/* LCD IO definitions */\r
+#define LCD_E     0x80000000            /* Enable control pin                */\r
+#define LCD_RW    0x20000000            /* Read/Write control pin            */\r
+#define LCD_RS    0x10000000            /* Data/Instruction control          */\r
+#define LCD_CTRL  0xB0000000            /* Control lines mask                */\r
+#define LCD_DATA  0x0F000000            /* Data lines mask                   */\r
+\r
+/* Local variables */\r
+static unsigned int lcd_ptr;\r
+\r
+/* 8 user defined characters to be loaded into CGRAM (used for bargraph) */\r
+static const unsigned char UserFont[8][8] = {\r
+       { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },\r
+       { 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10 },\r
+       { 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18 },\r
+       { 0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C },\r
+       { 0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E },\r
+       { 0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F },\r
+       { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },\r
+       { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }\r
+};\r
+\r
+/* Local Function Prototypes */\r
+static void     lcd_write( unsigned int c );\r
+static void     lcd_write_4bit( unsigned int c );\r
+static unsigned int lcd_read_stat( void );\r
+static void     lcd_write_cmd( unsigned int c );\r
+static void     lcd_write_data( unsigned int d );\r
+static void     lcd_wait_busy( void );\r
+\r
+\r
+/******************************************************************************\r
+** Function name:  lcd_write_4bit\r
+**\r
+** Descriptions:\r
+**\r
+** parameters:     four bits to write\r
+** Returned value: None\r
+** \r
+******************************************************************************/\r
+static void lcd_write_4bit(unsigned int c)\r
+{\r
+       /* Write a 4-bit command to LCD controller. */\r
+       FIO1DIR |= LCD_DATA | LCD_CTRL;\r
+       FIO1CLR  = LCD_RW   | LCD_DATA;\r
+       FIO1SET  = (c & 0xF) << 24;\r
+       FIO1SET  = LCD_E;\r
+       vTaskDelay(0);\r
+       FIO1CLR  = LCD_E;\r
+       vTaskDelay(0);\r
+       return;\r
+}\r
+\r
+/******************************************************************************\r
+** Function name: lcd_write\r
+**\r
+** Descriptions:\r
+**\r
+** parameters:     word to write\r
+** Returned value: None\r
+** \r
+******************************************************************************/\r
+static void lcd_write(unsigned int c)\r
+{\r
+       /* Write data/command to LCD controller. */\r
+       lcd_write_4bit (c >> 4);\r
+       lcd_write_4bit (c);\r
+       return;\r
+}\r
+\r
+/******************************************************************************\r
+** Function name: lcd_read_stat\r
+**\r
+** Descriptions:\r
+**\r
+** parameters:     None\r
+** Returned value: status\r
+** \r
+******************************************************************************/\r
+static unsigned int lcd_read_stat(void)\r
+{\r
+       /* Read status of LCD controller (ST7066) */\r
+       unsigned int stat;\r
+\r
+       FIO1DIR &= ~LCD_DATA;\r
+       FIO1CLR  = LCD_RS;\r
+       FIO1SET  = LCD_RW;\r
+       vTaskDelay( 0 );\r
+       FIO1SET  = LCD_E;\r
+       vTaskDelay( 0 );\r
+       stat    = (FIO1PIN >> 20) & 0xF0;\r
+       FIO1CLR  = LCD_E;\r
+       vTaskDelay( 0 );\r
+       FIO1SET  = LCD_E;\r
+       vTaskDelay( 0 );\r
+       stat   |= (FIO1PIN >> 24) & 0xF;\r
+       FIO1CLR  = LCD_E;\r
+       return (stat);\r
+}\r
+\r
+/******************************************************************************\r
+** Function name: lcd_wait_busy\r
+**\r
+** Descriptions:\r
+**\r
+** parameters:     None\r
+** Returned value: None\r
+** \r
+******************************************************************************/\r
+static void lcd_wait_busy(void)\r
+{\r
+       /* Wait until LCD controller (ST7066) is busy. */\r
+       unsigned int stat;\r
+\r
+       do\r
+       {\r
+               stat = lcd_read_stat();\r
+       }\r
+       while (stat & 0x80); /* Wait for busy flag */\r
+\r
+       return;\r
+}\r
+\r
+/******************************************************************************\r
+** Function name: lcd_write_cmd\r
+**\r
+** Descriptions:\r
+**\r
+** parameters:     command word\r
+** Returned value: None\r
+** \r
+******************************************************************************/\r
+static void lcd_write_cmd(unsigned int c)\r
+{\r
+       /* Write command to LCD controller. */\r
+       lcd_wait_busy();\r
+       FIO1CLR = LCD_RS;\r
+       lcd_write(c);\r
+       return;\r
+}\r
+\r
+/******************************************************************************\r
+** Function name: lcd_write_data\r
+**\r
+** Descriptions:\r
+**\r
+** parameters:     data word\r
+** Returned value: None\r
+** \r
+******************************************************************************/\r
+static void lcd_write_data(unsigned int d)\r
+{\r
+       /* Write data to LCD controller. */\r
+       lcd_wait_busy();\r
+       FIO1SET = LCD_RS;\r
+       lcd_write(d);\r
+       return;\r
+}\r
+\r
+/******************************************************************************\r
+** Function name: LCD_init\r
+**\r
+** Descriptions:\r
+**\r
+** parameters:     None\r
+** Returned value: None\r
+** \r
+******************************************************************************/\r
+void LCD_init(void)\r
+{\r
+       /* Initialize the ST7066 LCD controller to 4-bit mode. */\r
+       PINSEL3 = 0x00000000;\r
+#if USE_FIO\r
+       SCS |= 0x00000001;/* set GPIOx to use Fast I/O */\r
+#endif\r
+       FIO1DIR |= LCD_CTRL | LCD_DATA;\r
+       FIO1CLR  = LCD_RW   | LCD_RS   | LCD_DATA;\r
+\r
+       lcd_write_4bit(0x3);                /* Select 4-bit interface            */\r
+       vTaskDelay(100);\r
+       lcd_write_4bit(0x3);\r
+       vTaskDelay(100);\r
+       lcd_write_4bit(0x3);\r
+       lcd_write_4bit(0x2);\r
+\r
+       lcd_write_cmd(0x28);                /* 2 lines, 5x8 character matrix     */\r
+       lcd_write_cmd(0x0e);                /* Display ctrl:Disp/Curs/Blnk=ON    */\r
+       lcd_write_cmd(0x06);                /* Entry mode: Move right, no shift  */\r
+\r
+       LCD_load( (unsigned char *)&UserFont, sizeof (UserFont) );\r
+       LCD_cls();\r
+       return;\r
+}\r
+\r
+/******************************************************************************\r
+** Function name: LCD_load\r
+**\r
+** Descriptions:\r
+**\r
+** parameters:     pointer to the buffer and counter\r
+** Returned value: None\r
+** \r
+******************************************************************************/\r
+void LCD_load(unsigned char *fp, unsigned int cnt)\r
+{\r
+       /* Load user-specific characters into CGRAM */\r
+       unsigned int i;\r
+\r
+       lcd_write_cmd( 0x40 );                /* Set CGRAM address counter to 0    */\r
+       for (i = 0; i < cnt; i++, fp++)  \r
+       {\r
+               lcd_write_data( *fp );\r
+       }\r
+       return;\r
+}\r
+\r
+/******************************************************************************\r
+** Function name: LCD_gotoxy\r
+**\r
+** Descriptions:\r
+**\r
+** parameters:     pixel X and Y\r
+** Returned value: None\r
+** \r
+******************************************************************************/\r
+void LCD_gotoxy(unsigned int x, unsigned int y)\r
+{\r
+       /* Set cursor position on LCD display. Left corner: 1,1, right: 16,2 */\r
+       unsigned int c;\r
+\r
+       c = --x;\r
+       if (--y) \r
+       {\r
+               c |= 0x40;\r
+       }\r
+       lcd_write_cmd (c | 0x80);\r
+       lcd_ptr = y*16 + x;\r
+       return;\r
+}\r
+\r
+/******************************************************************************\r
+** Function name: LCD_cls\r
+**\r
+** Descriptions:\r
+**\r
+** parameters:     None\r
+** Returned value: None\r
+** \r
+******************************************************************************/\r
+void LCD_cls(void)\r
+{\r
+       /* Clear LCD display, move cursor to home position. */\r
+       lcd_write_cmd (0x01);\r
+       LCD_gotoxy (1,1);\r
+       return;\r
+}\r
+\r
+/******************************************************************************\r
+** Function name: LCD_cur_off\r
+**\r
+** Descriptions:\r
+**\r
+** parameters:     None\r
+** Returned value: None\r
+** \r
+******************************************************************************/\r
+void LCD_cur_off(void)\r
+{\r
+       /* Switch off LCD cursor. */\r
+       lcd_write_cmd(0x0c);\r
+       return;\r
+}\r
+\r
+\r
+/******************************************************************************\r
+** Function name: LCD_on\r
+**\r
+** Descriptions:\r
+**\r
+** parameters:     None\r
+** Returned value: None\r
+** \r
+******************************************************************************/\r
+void LCD_on(void)\r
+{\r
+       /* Switch on LCD and enable cursor. */\r
+       lcd_write_cmd (0x0e);\r
+       return;\r
+}\r
+\r
+/******************************************************************************\r
+** Function name: LCD_putc\r
+**\r
+** Descriptions:\r
+**\r
+** parameters:     unsigned char character\r
+** Returned value: None\r
+** \r
+******************************************************************************/\r
+void LCD_putc(unsigned char c)\r
+{ \r
+       /* Print a character to LCD at current cursor position. */\r
+       if (lcd_ptr == 16) \r
+       {\r
+               lcd_write_cmd (0xc0);\r
+       }\r
+       lcd_write_data(c);\r
+       lcd_ptr++;\r
+       return;\r
+}\r
+\r
+/******************************************************************************\r
+** Function name: LCD_puts\r
+**\r
+** Descriptions:\r
+**\r
+** parameters:     pointer to the buffer\r
+** Returned value: None\r
+** \r
+******************************************************************************/\r
+void LCD_puts(unsigned char *sp)\r
+{\r
+       /* Print a string to LCD display. */\r
+       while (*sp) \r
+       {\r
+               LCD_putc (*sp++);\r
+       }\r
+       return;\r
+}\r
+\r
+/******************************************************************************\r
+** Function name: LCD_bargraph\r
+**\r
+** Descriptions:\r
+**\r
+** parameters:     value and size\r
+** Returned value: None\r
+** \r
+******************************************************************************/\r
+void LCD_bargraph(unsigned int val, unsigned int size)\r
+{\r
+       /* Print a bargraph to LCD display.  */\r
+       /* - val:  value 0..100 %            */\r
+       /* - size: size of bargraph 1..16    */\r
+       unsigned int i;\r
+\r
+       val = val * size / 20;               /* Display matrix 5 x 8 pixels       */\r
+       for (i = 0; i < size; i++) \r
+       {\r
+               if (val > 5) \r
+               {\r
+                       LCD_putc(5);\r
+                       val -= 5;\r
+               }\r
+               else\r
+               {\r
+                       LCD_putc(val);\r
+                       break;\r
+               }\r
+       }\r
+       return;\r
+}\r
diff --git a/Demo/ARM7_LPC2368_Rowley/LCD/portlcd.h b/Demo/ARM7_LPC2368_Rowley/LCD/portlcd.h
new file mode 100644 (file)
index 0000000..4742e44
--- /dev/null
@@ -0,0 +1,31 @@
+/*****************************************************************************\r
+ *   rtc.h:  Header file for NXP LPC23xx/24xx Family Microprocessors\r
+ *\r
+ *   Copyright(C) 2006, NXP Semiconductor\r
+ *   All rights reserved.\r
+ *\r
+ *   History\r
+ *   2006.07.13  ver 1.00    Prelimnary version, first Release\r
+ *\r
+******************************************************************************/\r
+#ifndef __PORTLCD_H \r
+#define __PORTLCD_H\r
+\r
+extern void LCD_init(void);\r
+extern void LCD_load(unsigned char *fp, unsigned int cnt);\r
+extern void LCD_gotoxy(unsigned int x, unsigned int y);\r
+extern void LCD_cls(void);\r
+extern void LCD_cur_off(void);\r
+extern void LCD_on(void);\r
+extern void LCD_putc(unsigned char c);\r
+extern void LCD_puts(unsigned char *sp);\r
+extern void LCD_bargraph(unsigned int val, unsigned int size);\r
+\r
+extern void LCD_putnibble(unsigned char nibble);\r
+extern void LCD_puthexbyte(unsigned char abyte);\r
+\r
+\r
+#endif /* end __PORTLCD_H */\r
+/*****************************************************************************\r
+**                            End Of File\r
+******************************************************************************/\r
diff --git a/Demo/ARM7_LPC2368_Rowley/ParTest/ParTest.c b/Demo/ARM7_LPC2368_Rowley/ParTest/ParTest.c
new file mode 100644 (file)
index 0000000..181618a
--- /dev/null
@@ -0,0 +1,114 @@
+/*\r
+       FreeRTOS.org V4.2.1 - Copyright (C) 2003-2007 Richard Barry.\r
+\r
+       This file is part of the FreeRTOS.org distribution.\r
+\r
+       FreeRTOS.org is free software; you can redistribute it and/or modify\r
+       it under the terms of the GNU General Public License as published by\r
+       the Free Software Foundation; either version 2 of the License, or\r
+       (at your option) any later version.\r
+\r
+       FreeRTOS.org is distributed in the hope that it will be useful,\r
+       but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+       GNU General Public License for more details.\r
+\r
+       You should have received a copy of the GNU General Public License\r
+       along with FreeRTOS.org; if not, write to the Free Software\r
+       Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\r
+\r
+       A special exception to the GPL can be applied should you wish to distribute\r
+       a combined work that includes FreeRTOS.org, without being obliged to provide\r
+       the source code for any proprietary components.  See the licensing section \r
+       of http://www.FreeRTOS.org for full details of how and when the exception\r
+       can be applied.\r
+\r
+       ***************************************************************************\r
+       See http://www.FreeRTOS.org for documentation, latest information, license \r
+       and contact details.  Please ensure to read the configuration and relevant \r
+       port sections of the online documentation.\r
+       ***************************************************************************\r
+*/\r
+\r
+/* FreeRTOS.org includes. */\r
+#include "FreeRTOS.h"\r
+\r
+/* Demo application includes. */\r
+#include "partest.h"\r
+\r
+#define partstFIRST_IO                 ( ( unsigned portLONG ) 0x01 )\r
+#define partstNUM_LEDS                 ( 8 )\r
+#define partstALL_OUTPUTS_OFF  ( ( unsigned portLONG ) 0xff )\r
+\r
+/*-----------------------------------------------------------\r
+ * Simple parallel port IO routines.\r
+ *-----------------------------------------------------------*/\r
+\r
+void vParTestInitialise( void )\r
+{\r
+       PINSEL10 = 0;\r
+       FIO2DIR  = 0x000000FF;\r
+       FIO2MASK = 0x00000000;\r
+       FIO2CLR  = 0xFF;\r
+       SCS |= (1<<0); //fast mode for port 0 and 1\r
+\r
+    FIO2CLR = partstALL_OUTPUTS_OFF;\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+void vParTestSetLED( unsigned portBASE_TYPE uxLED, signed portBASE_TYPE xValue )\r
+{\r
+unsigned portLONG ulLED = partstFIRST_IO;\r
+\r
+       if( uxLED < partstNUM_LEDS )\r
+       {\r
+               /* Rotate to the wanted bit of port */\r
+               ulLED <<= ( unsigned portLONG ) uxLED;\r
+\r
+               /* Set of clear the output. */\r
+               if( xValue )\r
+               {\r
+                       FIO2CLR = ulLED;\r
+               }\r
+               else\r
+               {\r
+                       FIO2SET = ulLED;\r
+               }\r
+       }\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+void vParTestToggleLED( unsigned portBASE_TYPE uxLED )\r
+{\r
+unsigned portLONG ulLED = partstFIRST_IO, ulCurrentState;\r
+\r
+       if( uxLED < partstNUM_LEDS )\r
+       {\r
+               /* Rotate to the wanted bit of port 0.  Only P10 to P13 have an LED\r
+               attached. */\r
+               ulLED <<= ( unsigned portLONG ) uxLED;\r
+\r
+               /* If this bit is already set, clear it, and visa versa. */\r
+               ulCurrentState = FIO2PIN;\r
+               if( ulCurrentState & ulLED )\r
+               {\r
+                       FIO2CLR = ulLED;\r
+               }\r
+               else\r
+               {\r
+                       FIO2SET = ulLED;                        \r
+               }\r
+       }       \r
+}\r
+\r
+/*-----------------------------------------------------------*/\r
+unsigned portBASE_TYPE uxParTextGetLED( unsigned portBASE_TYPE uxLED )\r
+{\r
+unsigned portLONG ulLED = partstFIRST_IO;\r
+    \r
+    ulLED <<= ( unsigned portLONG ) uxLED;\r
+\r
+    return ( FIO2PIN & ulLED );\r
+}\r
+\r
+\r
diff --git a/Demo/ARM7_LPC2368_Rowley/RTOSDemo.hzp b/Demo/ARM7_LPC2368_Rowley/RTOSDemo.hzp
new file mode 100644 (file)
index 0000000..ab0dc7b
--- /dev/null
@@ -0,0 +1,103 @@
+<!DOCTYPE CrossStudio_Project_File>
+<solution version="1" Name="RTOSDemo" >
+  <project Name="RTOSDemo" >
+    <configuration arm_target_loader_parameter="12000000" Target="LPC2368" arm_target_flash_loader_file_path="$(StudioDir)/targets/Philips_LPC210X/Release/Loader_lpc2300.elf" arm_simulator_memory_simulation_parameter="LPC23;0x80000;0x8000;0x10000;0x10000" property_groups_file_path="$(StudioDir)/targets/Philips_LPC210X/propertyGroups23xx.xml" oscillator_frequency="12MHz" linker_memory_map_file="$(StudioDir)/targets/Philips_LPC210X/Philips_LPC2368_MemoryMap.xml" gcc_entry_point="reset_handler" build_remove_unused_symbols="No" c_preprocessor_definitions="GCC_ARM7;SUPERVISOR_START;VECTORED_IRQ_INTERRUPTS;PACK_STRUCT_END=__attribute__((packed));ALIGN_STRUCT_END=__attribute__((aligned(4)))" arm_architecture="v4T" linker_additional_files="$(StudioDir)/lib/liblpc2000$(LibExt)$(LIB)" c_user_include_directories=".;$(ProjectDir)\\..\\..\\Source\\include;$(ProjectDir)\\..\\..\\Source\\GCC\\ARM7_LPC2000;$(ProjectDir)\\..\\Common\\Include;$(ProjectDir)\\LCD;$(ProjectDir)\\webserver;$(ProjectDir)\\..\\Common\\ethernet\\uIP\\uip-1.0\\uip" project_directory="" link_include_startup_code="No" gcc_optimization_level="Level 1" arm_target_flash_loader_type="LIBMEM RPC Loader" project_type="Executable" c_additional_options="" linker_printf_fmt_level="long" arm_linker_stack_size="10" Name="Common" c_system_include_directories="$(StudioDir)\include" arm_target_debug_interface_type="ARM7TDI" arm_core_type="ARM7TDMI-S" arm_simulator_memory_simulation_filename="$(StudioDir)/targets/Philips_LPC210X/LPC2000SimulatorMemory.dll" arm_linker_svc_stack_size="1024" />
+    <configuration linker_section_placement_file="$(StudioDir)/targets/sram_placement.xml" target_reset_script="SRAMReset()" Name="RAM" Placement="RAM" />
+    <configuration arm_target_flash_loader_file_path="$(StudioDir)/targets/Philips_LPC210X/Release/Loader_lpc2300.elf" linker_section_placement_file="$(StudioDir)/targets/flash_placement.xml" target_reset_script="FLASHReset()" arm_target_flash_loader_type="LIBMEM RPC Loader" Name="Flash" Placement="Flash" />
+    <folder Name="Demo Source" >
+      <configuration filter="c;cpp;cxx;cc;h;s;asm;inc" Name="Common" />
+      <file file_name="main.c" Name="main.c" />
+      <file file_name="LCD/portlcd.c" Name="portlcd.c" >
+        <configuration build_exclude_from_build="No" Name="ARM Flash Debug" />
+      </file>
+      <file file_name="../Common/Minimal/blocktim.c" Name="blocktim.c" >
+        <configuration build_exclude_from_build="No" Name="ARM Flash Debug" />
+      </file>
+      <file file_name="../Common/Minimal/integer.c" Name="integer.c" >
+        <configuration build_exclude_from_build="No" Name="ARM Flash Debug" />
+      </file>
+      <file file_name="../Common/Minimal/BlockQ.c" Name="BlockQ.c" >
+        <configuration build_exclude_from_build="No" Name="ARM Flash Debug" />
+      </file>
+      <file file_name="ParTest/ParTest.c" Name="ParTest.c" >
+        <configuration build_exclude_from_build="No" Name="ARM Flash Debug" />
+      </file>
+      <file file_name="../Common/Minimal/flash.c" Name="flash.c" >
+        <configuration build_exclude_from_build="No" Name="ARM Flash Debug" />
+      </file>
+      <file file_name="webserver/EMAC_ISR.c" Name="EMAC_ISR.c" >
+        <configuration arm_instruction_set="ARM" Name="THUMB" />
+        <configuration build_exclude_from_build="No" Name="ARM Flash Debug" />
+      </file>
+      <file file_name="webserver/emac.c" Name="emac.c" >
+        <configuration build_exclude_from_build="No" Name="ARM Flash Debug" />
+        <configuration asm_additional_options="" Name="Common" />
+      </file>
+      <file file_name="../Common/Minimal/death.c" Name="death.c" />
+      <file file_name="../Common/Minimal/PollQ.c" Name="PollQ.c" />
+      <file file_name="../Common/Minimal/semtest.c" Name="semtest.c" />
+    </folder>
+    <folder Name="System Files" >
+      <file file_name="$(StudioDir)/source/crt0.s" Name="crt0.s" />
+      <file file_name="$(StudioDir)/targets/Philips_LPC210X/Philips_LPC230X_Startup.s" Name="Philips_LPC230X_Startup.s" />
+      <file file_name="$(StudioDir)/targets/Philips_LPC210X/LPC230x.c" Name="LPC230x.c" />
+      <file file_name="$(StudioDir)/targets/Philips_LPC210X/Philips_LPC210X_Target.js" Name="Philips_LPC210X_Target.js" >
+        <configuration Name="Common" file_type="Reset Script" />
+      </file>
+      <file file_name="$(StudioDir)/targets/Philips_LPC210X/VIC_PL192.c" Name="VIC_PL192.c" />
+      <file file_name="$(StudioDir)/targets/Philips_LPC210X/VIC_PL192_irq_handler.s" Name="VIC_PL192_irq_handler.s" />
+    </folder>
+    <folder Name="FreeRTOS.org Source" >
+      <file file_name="../../Source/tasks.c" Name="tasks.c" />
+      <file file_name="../../Source/list.c" Name="list.c" />
+      <file file_name="../../Source/queue.c" Name="queue.c" />
+      <file file_name="../../Source/portable/GCC/ARM7_LPC23xx/port.c" Name="port.c" />
+      <file file_name="../../Source/portable/GCC/ARM7_LPC23xx/portISR.c" Name="portISR.c" >
+        <configuration arm_instruction_set="ARM" Name="Common" />
+      </file>
+      <file file_name="../../Source/portable/MemMang/heap_2.c" Name="heap_2.c" />
+    </folder>
+    <configuration linker_scanf_fmt_level="int" linker_keep_symbols="_vectors" c_preprocessor_definitions="" gcc_optimization_level="Level 1" arm_target_flash_loader_type="LIBMEM RPC Loader" linker_scanf_character_group_matching_enabled="No" linker_printf_fmt_level="int" Name="ARM Flash Debug" />
+    <folder Name="uIP Source" >
+      <file file_name="webserver/uIP_Task.c" Name="uIP_Task.c" >
+        <configuration build_exclude_from_build="No" Name="ARM Flash Debug" />
+      </file>
+      <file file_name="webserver/httpd.c" Name="httpd.c" >
+        <configuration build_exclude_from_build="No" Name="ARM Flash Debug" />
+      </file>
+      <file file_name="webserver/httpd-cgi.c" Name="httpd-cgi.c" >
+        <configuration build_exclude_from_build="No" Name="ARM Flash Debug" />
+      </file>
+      <file file_name="webserver/httpd-fs.c" Name="httpd-fs.c" >
+        <configuration build_exclude_from_build="No" Name="ARM Flash Debug" />
+      </file>
+      <file file_name="webserver/http-strings.c" Name="http-strings.c" >
+        <configuration build_exclude_from_build="No" Name="ARM Flash Debug" />
+      </file>
+      <file file_name="../Common/ethernet/uIP/uip-1.0/uip/uip_arp.c" Name="uip_arp.c" >
+        <configuration build_exclude_from_build="No" Name="ARM Flash Debug" />
+      </file>
+      <file file_name="../Common/ethernet/uIP/uip-1.0/uip/psock.c" Name="psock.c" >
+        <configuration build_exclude_from_build="No" Name="ARM Flash Debug" />
+      </file>
+      <file file_name="../Common/ethernet/uIP/uip-1.0/uip/timer.c" Name="timer.c" >
+        <configuration build_exclude_from_build="No" Name="ARM Flash Debug" />
+      </file>
+      <file file_name="../Common/ethernet/uIP/uip-1.0/uip/uip.c" Name="uip.c" >
+        <configuration build_exclude_from_build="No" Name="ARM Flash Debug" />
+      </file>
+    </folder>
+    <configuration c_preprocessor_definitions="THUMB_INTERWORK" Name="THUMB" />
+    <configuration c_preprocessor_definitions="STARTUP_FROM_RESET" gcc_optimization_level="Optimize For Size" Name="ARM Flash Release" />
+    <configuration arm_linker_fiq_stack_size="0" arm_linker_stack_size="0" Name="THUMB Flash Debug" arm_linker_svc_stack_size="512" arm_linker_heap_size="0" />
+  </project>
+  <configuration inherited_configurations="ARM;Flash;Debug" Name="ARM Flash Debug" />
+  <configuration arm_library_instruction_set="ARM" c_preprocessor_definitions="__ARM" arm_instruction_set="ARM" hidden="Yes" Name="ARM" />
+  <configuration c_preprocessor_definitions="__FLASH_BUILD" hidden="Yes" Name="Flash" />
+  <configuration c_preprocessor_definitions="DEBUG" link_include_startup_code="No" gcc_optimization_level="None" build_debug_information="Yes" hidden="Yes" Name="Debug" />
+  <configuration inherited_configurations="ARM;Flash;Release" Name="ARM Flash Release" />
+  <configuration c_preprocessor_definitions="NDEBUG" link_include_startup_code="No" gcc_optimization_level="Level 1" build_debug_information="No" hidden="Yes" Name="Release" />
+  <configuration inherited_configurations="THUMB;Flash;Debug" Name="THUMB Flash Debug" />
+  <configuration arm_library_instruction_set="THUMB" c_preprocessor_definitions="__THUMB" arm_instruction_set="THUMB" hidden="Yes" Name="THUMB" />
+  <configuration arm_linker_stack_size="256" Name="Common" />
+</solution>
diff --git a/Demo/ARM7_LPC2368_Rowley/RTOSDemo.hzs b/Demo/ARM7_LPC2368_Rowley/RTOSDemo.hzs
new file mode 100644 (file)
index 0000000..2a058a2
--- /dev/null
@@ -0,0 +1,74 @@
+<!DOCTYPE CrossStudio_for_ARM_Session_File>
+<session>
+ <Autos>
+  <Watches active="0" />
+ </Autos>
+ <Bookmarks/>
+ <Breakpoints>
+  <BreakpointListItem actiontype="0" chainFrom="" line="-1" length="0" triggertype="0" useHWbreakpoint="false" group="ARM Exceptions" breakdatatype="5" value="0" name="unnamed" counter="0" state="2" mask="0" comparison="0" expression="D_Abort" filename="" />
+  <BreakpointListItem actiontype="0" chainFrom="" line="-1" length="0" triggertype="0" useHWbreakpoint="false" group="ARM Exceptions" breakdatatype="5" value="0" name="unnamed" counter="0" state="3" mask="0" comparison="0" expression="FIQ" filename="" />
+  <BreakpointListItem actiontype="0" chainFrom="" line="-1" length="0" triggertype="0" useHWbreakpoint="false" group="ARM Exceptions" breakdatatype="5" value="0" name="unnamed" counter="0" state="3" mask="0" comparison="0" expression="IRQ" filename="" />
+  <BreakpointListItem actiontype="0" chainFrom="" line="-1" length="0" triggertype="0" useHWbreakpoint="false" group="ARM Exceptions" breakdatatype="5" value="0" name="unnamed" counter="0" state="2" mask="0" comparison="0" expression="P_Abort" filename="" />
+  <BreakpointListItem actiontype="0" chainFrom="" line="-1" length="0" triggertype="0" useHWbreakpoint="false" group="ARM Exceptions" breakdatatype="5" value="0" name="unnamed" counter="0" state="3" mask="0" comparison="0" expression="Reset" filename="" />
+  <BreakpointListItem actiontype="0" chainFrom="" line="-1" length="0" triggertype="0" useHWbreakpoint="false" group="ARM Exceptions" breakdatatype="5" value="0" name="unnamed" counter="0" state="3" mask="0" comparison="0" expression="SWI" filename="" />
+  <BreakpointListItem actiontype="0" chainFrom="" line="-1" length="0" triggertype="0" useHWbreakpoint="false" group="ARM Exceptions" breakdatatype="5" value="0" name="unnamed" counter="0" state="2" mask="0" comparison="0" expression="Undef" filename="" />
+  <BreakpointListItem actiontype="0" chainFrom="" line="-1" length="0" triggertype="0" useHWbreakpoint="false" group="Cortex-M3 Exceptions" breakdatatype="5" value="0" name="unnamed" counter="0" state="2" mask="0" comparison="0" expression="BusFault" filename="" />
+  <BreakpointListItem actiontype="0" chainFrom="" line="-1" length="0" triggertype="0" useHWbreakpoint="false" group="Cortex-M3 Exceptions" breakdatatype="5" value="0" name="unnamed" counter="0" state="2" mask="0" comparison="0" expression="ExceptionEntryReturnFault" filename="" />
+  <BreakpointListItem actiontype="0" chainFrom="" line="-1" length="0" triggertype="0" useHWbreakpoint="false" group="Cortex-M3 Exceptions" breakdatatype="5" value="0" name="unnamed" counter="0" state="2" mask="0" comparison="0" expression="HardFault" filename="" />
+  <BreakpointListItem actiontype="0" chainFrom="" line="-1" length="0" triggertype="0" useHWbreakpoint="false" group="Cortex-M3 Exceptions" breakdatatype="5" value="0" name="unnamed" counter="0" state="2" mask="0" comparison="0" expression="MemManage" filename="" />
+  <BreakpointListItem actiontype="0" chainFrom="" line="-1" length="0" triggertype="0" useHWbreakpoint="false" group="Cortex-M3 Exceptions" breakdatatype="5" value="0" name="unnamed" counter="0" state="3" mask="0" comparison="0" expression="Reset" filename="" />
+  <BreakpointListItem actiontype="0" chainFrom="" line="-1" length="0" triggertype="0" useHWbreakpoint="false" group="Cortex-M3 Exceptions" breakdatatype="5" value="0" name="unnamed" counter="0" state="2" mask="0" comparison="0" expression="UsageFault_CheckingError" filename="" />
+  <BreakpointListItem actiontype="0" chainFrom="" line="-1" length="0" triggertype="0" useHWbreakpoint="false" group="Cortex-M3 Exceptions" breakdatatype="5" value="0" name="unnamed" counter="0" state="2" mask="0" comparison="0" expression="UsageFault_Coprocessor" filename="" />
+  <BreakpointListItem actiontype="0" chainFrom="" line="-1" length="0" triggertype="0" useHWbreakpoint="false" group="Cortex-M3 Exceptions" breakdatatype="5" value="0" name="unnamed" counter="0" state="2" mask="0" comparison="0" expression="UsageFault_StateError" filename="" />
+ </Breakpoints>
+ <ExecutionCountWindow/>
+ <Memory1>
+  <MemoryWindow autoEvaluate="0" addressText="0x4000592c" numColumns="8" sizeText="2000" dataSize="1" radix="16" addressSpace="" />
+ </Memory1>
+ <Memory2>
+  <MemoryWindow autoEvaluate="0" addressText="" numColumns="8" sizeText="" dataSize="1" radix="16" addressSpace="" />
+ </Memory2>
+ <Memory3>
+  <MemoryWindow autoEvaluate="0" addressText="" numColumns="8" sizeText="" dataSize="1" radix="16" addressSpace="" />
+ </Memory3>
+ <Memory4>
+  <MemoryWindow autoEvaluate="0" addressText="" numColumns="8" sizeText="" dataSize="1" radix="16" addressSpace="" />
+ </Memory4>
+ <Project>
+  <ProjectSessionItem path="RTOSDemo" name="unnamed" />
+  <ProjectSessionItem path="RTOSDemo;RTOSDemo" name="unnamed" />
+  <ProjectSessionItem path="RTOSDemo;RTOSDemo;Demo Source" name="unnamed" />
+ </Project>
+ <Register1>
+  <RegisterWindow unsignedDisplays="" asciiDisplays="" octalDisplays="" openGroups="CPU - Current Mode" visibleGroups="CPU - Current Mode" decimalDisplays="" binaryDisplays="" />
+ </Register1>
+ <Register2>
+  <RegisterWindow unsignedDisplays="" asciiDisplays="" octalDisplays="" openGroups="CPU - Current Mode" visibleGroups="CPU - Current Mode" decimalDisplays="" binaryDisplays="" />
+ </Register2>
+ <Register3>
+  <RegisterWindow unsignedDisplays="" asciiDisplays="" octalDisplays="" openGroups="" visibleGroups="" decimalDisplays="" binaryDisplays="" />
+ </Register3>
+ <Register4>
+  <RegisterWindow unsignedDisplays="" asciiDisplays="" octalDisplays="" openGroups="" visibleGroups="" decimalDisplays="" binaryDisplays="" />
+ </Register4>
+ <SourceNavigatorWindow/>
+ <TraceWindow>
+  <Trace wrap="Yes" type="1" enabled="Yes" />
+ </TraceWindow>
+ <Watch1>
+  <Watches active="0" />
+ </Watch1>
+ <Watch2>
+  <Watches active="0" />
+ </Watch2>
+ <Watch3>
+  <Watches active="0" />
+ </Watch3>
+ <Watch4>
+  <Watches active="1" >
+   <Watchpoint linenumber="0" radix="-1" name="xStart" expression="xStart" filename="" />
+  </Watches>
+ </Watch4>
+ <Files/>
+ <ARMCrossStudioWindow activeProject="RTOSDemo" autoConnectTarget="/USB CrossConnect for ARM" debugSearchFileMap="" fileDialogInitialDirectory="C:\E\Dev\FreeRTOS\Demo\ARM7_LPC2368_Rowley\webserver" fileDialogDefaultFilter="*.cpp;*.cxx;*.cc;*.c;*.h" autoConnectCapabilities="1407" debugSearchPath="" buildConfiguration="ARM Flash Debug" />
+</session>
diff --git a/Demo/ARM7_LPC2368_Rowley/main.c b/Demo/ARM7_LPC2368_Rowley/main.c
new file mode 100644 (file)
index 0000000..168c1a7
--- /dev/null
@@ -0,0 +1,235 @@
+/*\r
+       FreeRTOS.org V4.2.1 - Copyright (C) 2003-2007 Richard Barry.\r
+\r
+       This file is part of the FreeRTOS.org distribution.\r
+\r
+       FreeRTOS.org is free software; you can redistribute it and/or modify\r
+       it under the terms of the GNU General Public License as published by\r
+       the Free Software Foundation; either version 2 of the License, or\r
+       (at your option) any later version.\r
+\r
+       FreeRTOS.org is distributed in the hope that it will be useful,\r
+       but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+       GNU General Public License for more details.\r
+\r
+       You should have received a copy of the GNU General Public License\r
+       along with FreeRTOS.org; if not, write to the Free Software\r
+       Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\r
+\r
+       A special exception to the GPL can be applied should you wish to distribute\r
+       a combined work that includes FreeRTOS.org, without being obliged to provide\r
+       the source code for any proprietary components.  See the licensing section \r
+       of http://www.FreeRTOS.org for full details of how and when the exception\r
+       can be applied.\r
+\r
+       ***************************************************************************\r
+       See http://www.FreeRTOS.org for documentation, latest information, license \r
+       and contact details.  Please ensure to read the configuration and relevant \r
+       port sections of the online documentation.\r
+       ***************************************************************************\r
+*/\r
+\r
+/* Environment includes. */\r
+#include <targets/LPC2368.h>\r
+\r
+/* Scheduler includes. */\r
+#include "FreeRTOS.h"\r
+#include "Task.h"\r
+#include "queue.h"\r
+#include "semphr.h"\r
+\r
+/* Demo app includes. */\r
+#include "BlockQ.h"\r
+#include "death.h"\r
+#include "integer.h"\r
+#include "blocktim.h"\r
+#include "portlcd.h"\r
+#include "flash.h"\r
+#include "partest.h"\r
+#include "semtest.h"\r
+#include "pollq.h"\r
+\r
+/* Demo application definitions. */\r
+#define mainQUEUE_SIZE                                         ( 3 )\r
+#define mainCHECK_DELAY                                                ( ( portTickType ) 5000 / portTICK_RATE_MS )\r
+#define mainBASIC_WEB_STACK_SIZE            ( configMINIMAL_STACK_SIZE * 2 )\r
+\r
+/* Task priorities. */\r
+#define mainQUEUE_POLL_PRIORITY                                ( tskIDLE_PRIORITY + 2 )\r
+#define mainCHECK_TASK_PRIORITY                                ( tskIDLE_PRIORITY + 3 )\r
+#define mainSEM_TEST_PRIORITY                          ( tskIDLE_PRIORITY + 1 )\r
+#define mainBLOCK_Q_PRIORITY                           ( tskIDLE_PRIORITY + 2 )\r
+#define mainFLASH_PRIORITY                  ( tskIDLE_PRIORITY + 2 )\r
+#define mainCREATOR_TASK_PRIORITY           ( tskIDLE_PRIORITY + 3 )\r
+#define mainINTEGER_TASK_PRIORITY           ( tskIDLE_PRIORITY )\r
+\r
+\r
+/*\r
+ * Checks the status of all the demo tasks then prints a message to the\r
+ * CrossStudio terminal IO windows.  The message will be either PASS or FAIL\r
+ * depending on the status of the demo applications tasks.  A FAIL status will\r
+ * be latched.\r
+ *\r
+ * Messages are not written directly to the terminal, but passed to vPrintTask\r
+ * via a queue.\r
+ */\r
+static void vCheckTask( void *pvParameters );\r
+\r
+/* \r
+ * The task that handles the uIP stack.  All TCP/IP processing is performed in\r
+ * this task.\r
+ */\r
+extern void vuIP_Task( void *pvParameters );\r
+\r
+/*\r
+ * The LCD is written two by more than one task so is controlled by a \r
+ * 'gatekeeper' task.  This is the only task that is actually permitted to \r
+ * access the LCD directly.  Other tasks wanting to display a message send\r
+ * the message to the gatekeeper.\r
+ */\r
+static void vLCDTask( void *pvParameters );\r
+\r
+/* The queue used to send messages to the LCD task. */\r
+xQueueHandle xLCDQueue;\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+int main (void)\r
+{\r
+       /* Setup the led's on the MCB2300 board */\r
+       vParTestInitialise();\r
+\r
+       /* Create the queue used by the LCD task.  Messages for display on the LCD\r
+       are received via this queue. */\r
+       xLCDQueue = xQueueCreate( mainQUEUE_SIZE, sizeof( xLCDMessage ) );\r
+\r
+       /* Create the lwIP task.  This uses the lwIP RTOS abstraction layer.*/\r
+    xTaskCreate( vuIP_Task, ( signed portCHAR * ) "uIP", mainBASIC_WEB_STACK_SIZE, NULL, mainCHECK_TASK_PRIORITY - 1, NULL );\r
+\r
+       /* Start the standard demo tasks. */\r
+       vStartBlockingQueueTasks( mainBLOCK_Q_PRIORITY );\r
+    vCreateBlockTimeTasks();\r
+    vStartLEDFlashTasks( mainFLASH_PRIORITY );\r
+    vStartSemaphoreTasks( mainSEM_TEST_PRIORITY );\r
+    vStartPolledQueueTasks( mainQUEUE_POLL_PRIORITY );\r
+    vStartIntegerMathTasks( mainINTEGER_TASK_PRIORITY );\r
+\r
+       /* Start the tasks defined within this file/specific to this demo. */\r
+    xTaskCreate( vCheckTask, ( signed portCHAR * ) "Check", configMINIMAL_STACK_SIZE, NULL, mainCHECK_TASK_PRIORITY, NULL );\r
+       xTaskCreate( vLCDTask, ( signed portCHAR * ) "LCD", configMINIMAL_STACK_SIZE, NULL, mainCHECK_TASK_PRIORITY - 1, NULL );\r
+\r
+       /* The suicide tasks must be created last as they need to know how many\r
+       tasks were running prior to their creation in order to ascertain whether\r
+       or not the correct/expected number of tasks are running at any given time. */\r
+    vCreateSuicidalTasks( mainCREATOR_TASK_PRIORITY );\r
+\r
+       /* Start the scheduler. */\r
+       vTaskStartScheduler();\r
+\r
+    /* Will only get here if there was insufficient memory to create the idle\r
+    task. */\r
+       return 0; \r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+static void vCheckTask( void *pvParameters )\r
+{\r
+portBASE_TYPE xErrorOccurred = pdFALSE;\r
+portTickType xLastExecutionTime;\r
+unsigned portBASE_TYPE uxColumn = 0;\r
+xLCDMessage xMessage;\r
+\r
+       xLastExecutionTime = xTaskGetTickCount();\r
+\r
+       xMessage.xColumn = 0;\r
+       xMessage.pcMessage = "PASS";\r
+\r
+    for( ;; )\r
+       {\r
+               /* Perform this check every mainCHECK_DELAY milliseconds. */\r
+               vTaskDelayUntil( &xLastExecutionTime, mainCHECK_DELAY );\r
+\r
+               /* Has an error been found in any task? */\r
+\r
+        if( xAreBlockingQueuesStillRunning() != pdTRUE )\r
+               {\r
+                       xErrorOccurred = pdTRUE;\r
+               }\r
+\r
+               if( xAreBlockTimeTestTasksStillRunning() != pdTRUE )\r
+               {\r
+                       xErrorOccurred = pdTRUE;\r
+               }\r
+\r
+        if( xAreSemaphoreTasksStillRunning() != pdTRUE )\r
+        {\r
+            xErrorOccurred = pdTRUE;\r
+        }\r
+\r
+        if( xArePollingQueuesStillRunning() != pdTRUE )\r
+        {\r
+            xErrorOccurred = pdTRUE;\r
+        }\r
+\r
+        if( xIsCreateTaskStillRunning() != pdTRUE )\r
+        {\r
+            xErrorOccurred = pdTRUE;\r
+        }\r
+\r
+        if( xAreIntegerMathsTaskStillRunning() != pdTRUE )\r
+        {\r
+            xErrorOccurred = pdTRUE;\r
+        }\r
+\r
+        LCD_cls();\r
+        xMessage.xColumn++;\r
+        LCD_gotoxy( ( uxColumn & 0x07 ) + 1, ( uxColumn & 0x01 ) + 1 );\r
+\r
+        if( xErrorOccurred == pdTRUE )\r
+        {\r
+            xMessage.pcMessage = "FAIL";\r
+        }\r
+\r
+               /* Send the message to the LCD gatekeeper for display. */\r
+               xQueueSend( xLCDQueue, &xMessage, portMAX_DELAY );\r
+       }\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+void vLCDTask( void *pvParameters )\r
+{\r
+xLCDMessage xMessage;\r
+\r
+       /* Initialise the LCD and display a startup message. */\r
+       LCD_init();\r
+       LCD_cur_off();\r
+    LCD_cls();    \r
+    LCD_gotoxy( 1, 1 );\r
+    LCD_puts( ( signed portCHAR * ) "www.FreeRTOS.org" );\r
+\r
+       for( ;; )\r
+       {\r
+               /* Wait for a message to arrive that requires displaying. */\r
+               while( xQueueReceive( xLCDQueue, &xMessage, portMAX_DELAY ) != pdPASS );\r
+               \r
+               /* Display the message.  Print each message to a different position. */\r
+               LCD_cls();\r
+               LCD_gotoxy( ( xMessage.xColumn & 0x07 ) + 1, ( xMessage.xColumn & 0x01 ) + 1 );\r
+               LCD_puts( xMessage.pcMessage );\r
+       }\r
+\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+/* Keep the compiler quiet. */\r
+#include <stdio.h>\r
+int __putchar( int c )\r
+{\r
+    return EOF;\r
+}\r
+\r
+\r
+\r
+\r
+\r
diff --git a/Demo/ARM7_LPC2368_Rowley/webserver/EMAC_ISR.c b/Demo/ARM7_LPC2368_Rowley/webserver/EMAC_ISR.c
new file mode 100644 (file)
index 0000000..32c7c1d
--- /dev/null
@@ -0,0 +1,29 @@
+#include "FreeRTOS.h"\r
+#include "Semphr.h"\r
+#include "Task.h"\r
+\r
+void vEMAC_ISR( void ) __attribute__((naked));\r
+\r
+extern xSemaphoreHandle xEMACSemaphore;\r
+\r
+void vEMAC_ISR( void )\r
+{\r
+    portENTER_SWITCHING_ISR();\r
+\r
+    portBASE_TYPE xSwitchRequired = pdFALSE;\r
+\r
+    /* Clear the interrupt. */\r
+    IntClear = 0xffff;\r
+    VICVectAddr = 0;\r
+\r
+    /* Ensure the uIP task is not blocked as data has arrived. */\r
+    if( xSemaphoreGiveFromISR( xEMACSemaphore, pdFALSE ) )\r
+    {\r
+        xSwitchRequired = pdTRUE;\r
+    }\r
+\r
+    /* Switch to the uIP task. */\r
+    portEXIT_SWITCHING_ISR( xSwitchRequired );\r
+}\r
+\r
+\r
diff --git a/Demo/ARM7_LPC2368_Rowley/webserver/clock-arch.h b/Demo/ARM7_LPC2368_Rowley/webserver/clock-arch.h
new file mode 100644 (file)
index 0000000..cde657b
--- /dev/null
@@ -0,0 +1,42 @@
+/*\r
+ * Copyright (c) 2006, Swedish Institute of Computer Science.\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions\r
+ * are met:\r
+ * 1. Redistributions of source code must retain the above copyright\r
+ *    notice, this list of conditions and the following disclaimer.\r
+ * 2. Redistributions in binary form must reproduce the above copyright\r
+ *    notice, this list of conditions and the following disclaimer in the\r
+ *    documentation and/or other materials provided with the distribution.\r
+ * 3. Neither the name of the Institute nor the names of its contributors\r
+ *    may be used to endorse or promote products derived from this software\r
+ *    without specific prior written permission.\r
+ *\r
+ * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND\r
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE\r
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\r
+ * SUCH DAMAGE.\r
+ *\r
+ * This file is part of the uIP TCP/IP stack\r
+ *\r
+ * $Id: clock-arch.h,v 1.2 2006/06/12 08:00:31 adam Exp $\r
+ */\r
+\r
+#ifndef __CLOCK_ARCH_H__\r
+#define __CLOCK_ARCH_H__\r
+\r
+#include "FreeRTOS.h"\r
+\r
+typedef unsigned long clock_time_t;\r
+#define CLOCK_CONF_SECOND configTICK_RATE_HZ\r
+\r
+#endif /* __CLOCK_ARCH_H__ */\r
diff --git a/Demo/ARM7_LPC2368_Rowley/webserver/emac.c b/Demo/ARM7_LPC2368_Rowley/webserver/emac.c
new file mode 100644 (file)
index 0000000..ea57c65
--- /dev/null
@@ -0,0 +1,412 @@
+/******************************************************************\r
+ *****                                                        *****\r
+ *****  Name: cs8900.c                                        *****\r
+ *****  Ver.: 1.0                                             *****\r
+ *****  Date: 07/05/2001                                      *****\r
+ *****  Auth: Andreas Dannenberg                              *****\r
+ *****        HTWK Leipzig                                    *****\r
+ *****        university of applied sciences                  *****\r
+ *****        Germany                                         *****\r
+ *****  Func: ethernet packet-driver for use with LAN-        *****\r
+ *****        controller CS8900 from Crystal/Cirrus Logic     *****\r
+ *****                                                        *****\r
+ *****  Keil: Module modified for use with Philips            *****\r
+ *****        LPC2378 EMAC Ethernet controller                *****\r
+ *****                                                        *****\r
+ ******************************************************************/\r
+\r
+/* Adapted from file originally written by Andreas Dannenberg.  Supplied with permission. */\r
+\r
+#include "FreeRTOS.h"\r
+#include "Semphr.h" \r
+#include "task.h"\r
+#include "EMAC.h"\r
+\r
+/* The semaphore used to wake the uIP task when data arives. */\r
+xSemaphoreHandle xEMACSemaphore = NULL;\r
+\r
+static unsigned short *rptr;\r
+static unsigned short *tptr;\r
+\r
+// easyWEB internal function\r
+// help function to swap the byte order of a WORD\r
+\r
+static unsigned short SwapBytes(unsigned short Data)\r
+{\r
+  return (Data >> 8) | (Data << 8);\r
+}\r
+\r
+// Keil: function added to write PHY\r
+void write_PHY (int PhyReg, int Value)\r
+{\r
+  unsigned int tout;\r
+\r
+  MADR = DP83848C_DEF_ADR | PhyReg;\r
+  MWTD = Value;\r
+\r
+  /* Wait utill operation completed */\r
+  tout = 0;\r
+  for (tout = 0; tout < MII_WR_TOUT; tout++) {\r
+    if ((MIND & MIND_BUSY) == 0) {\r
+      break;\r
+    }\r
+  }\r
+}\r
+\r
+\r
+// Keil: function added to read PHY\r
+unsigned short read_PHY (unsigned char PhyReg) \r
+{\r
+  unsigned int tout;\r
+\r
+  MADR = DP83848C_DEF_ADR | PhyReg;\r
+  MCMD = MCMD_READ;\r
+\r
+  /* Wait until operation completed */\r
+  tout = 0;\r
+  for (tout = 0; tout < MII_RD_TOUT; tout++) {\r
+    if ((MIND & MIND_BUSY) == 0) {\r
+      break;\r
+    }\r
+  }\r
+  MCMD = 0;\r
+  return (MRDD);\r
+}\r
+\r
+\r
+// Keil: function added to initialize Rx Descriptors\r
+void rx_descr_init (void)\r
+{\r
+  unsigned int i;\r
+\r
+  for (i = 0; i < NUM_RX_FRAG; i++) {\r
+    RX_DESC_PACKET(i)  = RX_BUF(i);\r
+    RX_DESC_CTRL(i)    = RCTRL_INT | (ETH_FRAG_SIZE-1);\r
+    RX_STAT_INFO(i)    = 0;\r
+    RX_STAT_HASHCRC(i) = 0;\r
+  }\r
+\r
+  /* Set EMAC Receive Descriptor Registers. */\r
+  RxDescriptor    = RX_DESC_BASE;\r
+  RxStatus        = RX_STAT_BASE;\r
+  RxDescriptorNumber = NUM_RX_FRAG-1;\r
+\r
+  /* Rx Descriptors Point to 0 */\r
+  RxConsumeIndex  = 0;\r
+}\r
+\r
+\r
+// Keil: function added to initialize Tx Descriptors\r
+void tx_descr_init (void) {\r
+  unsigned int i;\r
+\r
+  for (i = 0; i < NUM_TX_FRAG; i++) {\r
+    TX_DESC_PACKET(i) = TX_BUF(i);\r
+    TX_DESC_CTRL(i)   = 0;\r
+    TX_STAT_INFO(i)   = 0;\r
+  }\r
+\r
+  /* Set EMAC Transmit Descriptor Registers. */\r
+  TxDescriptor    = TX_DESC_BASE;\r
+  TxStatus        = TX_STAT_BASE;\r
+  TxDescriptorNumber = NUM_TX_FRAG-1;\r
+\r
+  /* Tx Descriptors Point to 0 */\r
+  TxProduceIndex  = 0;\r
+}\r
+\r
+\r
+// configure port-pins for use with LAN-controller,\r
+// reset it and send the configuration-sequence\r
+\r
+portBASE_TYPE Init_EMAC(void)\r
+{\r
+portBASE_TYPE xReturn = pdPASS;\r
+static portBASE_TYPE xAttempt = 0;\r
+// Keil: function modified to access the EMAC\r
+// Initializes the EMAC ethernet controller\r
+  volatile unsigned int regv,tout,id1,id2;\r
+\r
+  /* Enable P1 Ethernet Pins. */\r
+  PINSEL2 = 0x55555555;\r
+  PINSEL3 = (PINSEL3 & ~0x0000000F) | 0x00000005;\r
+\r
+  /* Power Up the EMAC controller. */\r
+  PCONP |= 0x40000000;\r
+  vTaskDelay( 1 );\r
+\r
+  /* Reset all EMAC internal modules. */\r
+  MAC1 = MAC1_RES_TX | MAC1_RES_MCS_TX | MAC1_RES_RX | MAC1_RES_MCS_RX |\r
+             MAC1_SIM_RES | MAC1_SOFT_RES;\r
+  Command = CR_REG_RES | CR_TX_RES | CR_RX_RES;\r
+\r
+  /* A short delay after reset. */\r
+  vTaskDelay( 1 );\r
+\r
+  /* Initialize MAC control registers. */\r
+  MAC1 = MAC1_PASS_ALL;\r
+  MAC2 = MAC2_CRC_EN | MAC2_PAD_EN;\r
+  MAXF = ETH_MAX_FLEN;\r
+  CLRT = CLRT_DEF;\r
+  IPGR = IPGR_DEF;\r
+\r
+  /* Enable Reduced MII interface. */\r
+  Command = CR_RMII | CR_PASS_RUNT_FRM;\r
+\r
+  /* Reset Reduced MII Logic. */\r
+  SUPP = SUPP_RES_RMII;\r
+  SUPP = 0;\r
+\r
+  /* Put the DP83848C in reset mode */\r
+  write_PHY (PHY_REG_BMCR, 0x8000);\r
+  write_PHY (PHY_REG_BMCR, 0x8000);\r
+\r
+  /* Wait for hardware reset to end. */\r
+  for (tout = 0; tout < 100; tout++) {\r
+    vTaskDelay( 10 );\r
+    regv = read_PHY (PHY_REG_BMCR);\r
+    if (!(regv & 0x8000)) {\r
+      /* Reset complete */\r
+      break;\r
+    }\r
+  }\r
+\r
+  /* Check if this is a DP83848C PHY. */\r
+  id1 = read_PHY (PHY_REG_IDR1);\r
+  id2 = read_PHY (PHY_REG_IDR2);\r
+  if (((id1 << 16) | (id2 & 0xFFF0)) == DP83848C_ID) {\r
+    /* Configure the PHY device */\r
+\r
+    /* Use autonegotiation about the link speed. */\r
+    write_PHY (PHY_REG_BMCR, PHY_AUTO_NEG);\r
+    /* Wait to complete Auto_Negotiation. */\r
+    for (tout = 0; tout < 10; tout++) {\r
+      vTaskDelay( 100 );\r
+      regv = read_PHY (PHY_REG_BMSR);\r
+      if (regv & 0x0020) {\r
+        /* Autonegotiation Complete. */\r
+        break;\r
+      }\r
+    }\r
+  }\r
+  else\r
+  {\r
+    xReturn = pdFAIL;\r
+  }\r
+\r
+  /* Check the link status. */\r
+  if( xReturn == pdPASS )\r
+  {\r
+    xReturn = pdFAIL;\r
+    for (tout = 0; tout < 10; tout++) {\r
+      vTaskDelay( 100 );\r
+      regv = read_PHY (PHY_REG_STS);\r
+      if (regv & 0x0001) {\r
+        /* Link is on. */\r
+        xReturn = pdPASS;\r
+        break;\r
+      }\r
+    }\r
+  }\r
+\r
+  if( xReturn == pdPASS )\r
+  {\r
+    /* Configure Full/Half Duplex mode. */\r
+    if (regv & 0x0004) {\r
+      /* Full duplex is enabled. */\r
+      MAC2    |= MAC2_FULL_DUP;\r
+      Command |= CR_FULL_DUP;\r
+      IPGT     = IPGT_FULL_DUP;\r
+    }\r
+    else {\r
+      /* Half duplex mode. */\r
+      IPGT = IPGT_HALF_DUP;\r
+    }\r
+\r
+    /* Configure 100MBit/10MBit mode. */\r
+    if (regv & 0x0002) {\r
+      /* 10MBit mode. */\r
+      SUPP = 0;\r
+    }\r
+    else {\r
+      /* 100MBit mode. */\r
+      SUPP = SUPP_SPEED;\r
+    }\r
+\r
+    /* Set the Ethernet MAC Address registers */\r
+    SA0 = (emacETHADDR0 << 8) | emacETHADDR1;\r
+    SA1 = (emacETHADDR2 << 8) | emacETHADDR3;\r
+    SA2 = (emacETHADDR4 << 8) | emacETHADDR5;\r
+\r
+    /* Initialize Tx and Rx DMA Descriptors */\r
+    rx_descr_init ();\r
+    tx_descr_init ();\r
+\r
+    /* Receive Broadcast and Perfect Match Packets */\r
+    RxFilterCtrl = RFC_UCAST_EN | RFC_BCAST_EN | RFC_PERFECT_EN;\r
+\r
+    /* Create the semaphore used ot wake the uIP task. */\r
+    vSemaphoreCreateBinary( xEMACSemaphore );\r
+\r
+    /* Reset all interrupts */\r
+    IntClear  = 0xFFFF;\r
+\r
+    /* Enable receive and transmit mode of MAC Ethernet core */\r
+    Command  |= (CR_RX_EN | CR_TX_EN);\r
+    MAC1     |= MAC1_REC_EN;\r
+  }\r
+\r
+  return xReturn;\r
+}\r
+\r
+\r
+// reads a word in little-endian byte order from RX_BUFFER\r
+\r
+unsigned short ReadFrame_EMAC(void)\r
+{\r
+  return (*rptr++);\r
+}\r
+\r
+// reads a word in big-endian byte order from RX_FRAME_PORT\r
+// (useful to avoid permanent byte-swapping while reading\r
+// TCP/IP-data)\r
+\r
+unsigned short ReadFrameBE_EMAC(void)\r
+{\r
+  unsigned short ReturnValue;\r
+\r
+  ReturnValue = SwapBytes (*rptr++);\r
+  return (ReturnValue);\r
+}\r
+\r
+\r
+// copies bytes from frame port to MCU-memory\r
+// NOTES: * an odd number of byte may only be transfered\r
+//          if the frame is read to the end!\r
+//        * MCU-memory MUST start at word-boundary\r
+\r
+void CopyFromFrame_EMAC(void *Dest, unsigned short Size)\r
+{\r
+  unsigned short * piDest;                       // Keil: Pointer added to correct expression\r
+\r
+  piDest = Dest;                                 // Keil: Line added\r
+  while (Size > 1) {\r
+    *piDest++ = ReadFrame_EMAC();\r
+    Size -= 2;\r
+  }\r
+  \r
+  if (Size) {                                         // check for leftover byte...\r
+    *(unsigned char *)piDest = (char)ReadFrame_EMAC();// the LAN-Controller will return 0\r
+  }                                                   // for the highbyte\r
+}\r
+\r
+// does a dummy read on frame-I/O-port\r
+// NOTE: only an even number of bytes is read!\r
+\r
+void DummyReadFrame_EMAC(unsigned short Size)    // discards an EVEN number of bytes\r
+{                                                // from RX-fifo\r
+  while (Size > 1) {\r
+    ReadFrame_EMAC();\r
+    Size -= 2;\r
+  }\r
+}\r
+\r
+// Reads the length of the received ethernet frame and checks if the \r
+// destination address is a broadcast message or not\r
+// returns the frame length\r
+unsigned short StartReadFrame(void) {\r
+  unsigned short RxLen;\r
+  unsigned int idx;\r
+\r
+  idx = RxConsumeIndex;\r
+  RxLen = (RX_STAT_INFO(idx) & RINFO_SIZE) - 3;\r
+  rptr = (unsigned short *)RX_DESC_PACKET(idx);\r
+  return(RxLen);\r
+}\r
+\r
+void EndReadFrame(void) {\r
+  unsigned int idx;\r
+\r
+  /* DMA free packet. */\r
+  idx = RxConsumeIndex;\r
+\r
+  if (++idx == NUM_RX_FRAG)\r
+    idx = 0;\r
+\r
+  RxConsumeIndex = idx;\r
+}\r
+\r
+unsigned int CheckFrameReceived(void) {             // Packet received ?\r
+\r
+  if (RxProduceIndex != RxConsumeIndex)     // more packets received ?\r
+    return(1);\r
+  else \r
+    return(0);\r
+}\r
+\r
+unsigned int uiGetEMACRxData( unsigned char *ucBuffer )\r
+{\r
+unsigned int uiLen = 0;\r
+\r
+    if( RxProduceIndex != RxConsumeIndex )\r
+    {\r
+        uiLen = StartReadFrame();\r
+        CopyFromFrame_EMAC( ucBuffer, uiLen );\r
+        EndReadFrame();\r
+    }\r
+\r
+    return uiLen;\r
+}\r
+\r
+// requests space in EMAC memory for storing an outgoing frame\r
+\r
+void RequestSend(void)\r
+{\r
+  unsigned int idx;\r
+\r
+  idx  = TxProduceIndex;\r
+  tptr = (unsigned short *)TX_DESC_PACKET(idx);\r
+}\r
+\r
+// check if ethernet controller is ready to accept the\r
+// frame we want to send\r
+\r
+unsigned int Rdy4Tx(void)\r
+{\r
+  return (1);   // the ethernet controller transmits much faster\r
+}               // than the CPU can load its buffers\r
+\r
+\r
+// writes a word in little-endian byte order to TX_BUFFER\r
+void WriteFrame_EMAC(unsigned short Data)\r
+{\r
+  *tptr++ = Data;\r
+}\r
+\r
+// copies bytes from MCU-memory to frame port\r
+// NOTES: * an odd number of byte may only be transfered\r
+//          if the frame is written to the end!\r
+//        * MCU-memory MUST start at word-boundary\r
+\r
+void CopyToFrame_EMAC(void *Source, unsigned int Size)\r
+{\r
+  unsigned short * piSource;\r
+\r
+  piSource = Source;\r
+  Size = (Size + 1) & 0xFFFE;    // round Size up to next even number\r
+  while (Size > 0) {\r
+    WriteFrame_EMAC(*piSource++);\r
+    Size -= 2;\r
+  }\r
+}\r
+\r
+void DoSend_EMAC(unsigned short FrameSize)\r
+{\r
+  unsigned int idx;\r
+\r
+  idx = TxProduceIndex;\r
+  TX_DESC_CTRL(idx) = FrameSize | TCTRL_LAST;\r
+  if (++idx == NUM_TX_FRAG) idx = 0;\r
+  TxProduceIndex = idx;\r
+}\r
+\r
diff --git a/Demo/ARM7_LPC2368_Rowley/webserver/emac.h b/Demo/ARM7_LPC2368_Rowley/webserver/emac.h
new file mode 100644 (file)
index 0000000..c363421
--- /dev/null
@@ -0,0 +1,322 @@
+/*----------------------------------------------------------------------------\r
+ *      LPC2378 Ethernet Definitions\r
+ *----------------------------------------------------------------------------\r
+ *      Name:    EMAC.H\r
+ *      Purpose: Philips LPC2378 EMAC hardware definitions\r
+ *----------------------------------------------------------------------------\r
+ *      Copyright (c) 2006 KEIL - An ARM Company. All rights reserved.\r
+ *---------------------------------------------------------------------------*/\r
+#ifndef __EMAC_H\r
+#define __EMAC_H\r
+\r
+/* MAC address definition.  The MAC address must be unique on the network. */\r
+#define emacETHADDR0 0\r
+#define emacETHADDR1 0xbd\r
+#define emacETHADDR2 0x33\r
+#define emacETHADDR3 0x02\r
+#define emacETHADDR4 0x64\r
+#define emacETHADDR5 0x24\r
+\r
+\r
+/* EMAC Memory Buffer configuration for 16K Ethernet RAM. */\r
+#define NUM_RX_FRAG         4           /* Num.of RX Fragments 4*1536= 6.0kB */\r
+#define NUM_TX_FRAG         2           /* Num.of TX Fragments 2*1536= 3.0kB */\r
+#define ETH_FRAG_SIZE       1536        /* Packet Fragment size 1536 Bytes   */\r
+\r
+#define ETH_MAX_FLEN        1536        /* Max. Ethernet Frame Size          */\r
+\r
+/* EMAC variables located in 16K Ethernet SRAM */\r
+#define RX_DESC_BASE        0x7FE00000\r
+#define RX_STAT_BASE        (RX_DESC_BASE + NUM_RX_FRAG*8)\r
+#define TX_DESC_BASE        (RX_STAT_BASE + NUM_RX_FRAG*8)\r
+#define TX_STAT_BASE        (TX_DESC_BASE + NUM_TX_FRAG*8)\r
+#define RX_BUF_BASE         (TX_STAT_BASE + NUM_TX_FRAG*4)\r
+#define TX_BUF_BASE         (RX_BUF_BASE  + NUM_RX_FRAG*ETH_FRAG_SIZE)\r
+\r
+/* RX and TX descriptor and status definitions. */\r
+#define RX_DESC_PACKET(i)   (*(unsigned int *)(RX_DESC_BASE   + 8*i))\r
+#define RX_DESC_CTRL(i)     (*(unsigned int *)(RX_DESC_BASE+4 + 8*i))\r
+#define RX_STAT_INFO(i)     (*(unsigned int *)(RX_STAT_BASE   + 8*i))\r
+#define RX_STAT_HASHCRC(i)  (*(unsigned int *)(RX_STAT_BASE+4 + 8*i))\r
+#define TX_DESC_PACKET(i)   (*(unsigned int *)(TX_DESC_BASE   + 8*i))\r
+#define TX_DESC_CTRL(i)     (*(unsigned int *)(TX_DESC_BASE+4 + 8*i))\r
+#define TX_STAT_INFO(i)     (*(unsigned int *)(TX_STAT_BASE   + 4*i))\r
+#define RX_BUF(i)           (RX_BUF_BASE + ETH_FRAG_SIZE*i)\r
+#define TX_BUF(i)           (TX_BUF_BASE + ETH_FRAG_SIZE*i)\r
+\r
+/* MAC Configuration Register 1 */\r
+#define MAC1_REC_EN         0x00000001  /* Receive Enable                    */\r
+#define MAC1_PASS_ALL       0x00000002  /* Pass All Receive Frames           */\r
+#define MAC1_RX_FLOWC       0x00000004  /* RX Flow Control                   */\r
+#define MAC1_TX_FLOWC       0x00000008  /* TX Flow Control                   */\r
+#define MAC1_LOOPB          0x00000010  /* Loop Back Mode                    */\r
+#define MAC1_RES_TX         0x00000100  /* Reset TX Logic                    */\r
+#define MAC1_RES_MCS_TX     0x00000200  /* Reset MAC TX Control Sublayer     */\r
+#define MAC1_RES_RX         0x00000400  /* Reset RX Logic                    */\r
+#define MAC1_RES_MCS_RX     0x00000800  /* Reset MAC RX Control Sublayer     */\r
+#define MAC1_SIM_RES        0x00004000  /* Simulation Reset                  */\r
+#define MAC1_SOFT_RES       0x00008000  /* Soft Reset MAC                    */\r
+\r
+/* MAC Configuration Register 2 */\r
+#define MAC2_FULL_DUP       0x00000001  /* Full Duplex Mode                  */\r
+#define MAC2_FRM_LEN_CHK    0x00000002  /* Frame Length Checking             */\r
+#define MAC2_HUGE_FRM_EN    0x00000004  /* Huge Frame Enable                 */\r
+#define MAC2_DLY_CRC        0x00000008  /* Delayed CRC Mode                  */\r
+#define MAC2_CRC_EN         0x00000010  /* Append CRC to every Frame         */\r
+#define MAC2_PAD_EN         0x00000020  /* Pad all Short Frames              */\r
+#define MAC2_VLAN_PAD_EN    0x00000040  /* VLAN Pad Enable                   */\r
+#define MAC2_ADET_PAD_EN    0x00000080  /* Auto Detect Pad Enable            */\r
+#define MAC2_PPREAM_ENF     0x00000100  /* Pure Preamble Enforcement         */\r
+#define MAC2_LPREAM_ENF     0x00000200  /* Long Preamble Enforcement         */\r
+#undef  MAC2_NO_BACKOFF /* Remove compiler warning. */\r
+#define MAC2_NO_BACKOFF     0x00001000  /* No Backoff Algorithm              */\r
+#define MAC2_BACK_PRESSURE  0x00002000  /* Backoff Presurre / No Backoff     */\r
+#define MAC2_EXCESS_DEF     0x00004000  /* Excess Defer                      */\r
+\r
+/* Back-to-Back Inter-Packet-Gap Register */\r
+#define IPGT_FULL_DUP       0x00000015  /* Recommended value for Full Duplex */\r
+#define IPGT_HALF_DUP       0x00000012  /* Recommended value for Half Duplex */\r
+\r
+/* Non Back-to-Back Inter-Packet-Gap Register */\r
+#define IPGR_DEF            0x00000012  /* Recommended value                 */\r
+\r
+/* Collision Window/Retry Register */\r
+#define CLRT_DEF            0x0000370F  /* Default value                     */\r
+\r
+/* PHY Support Register */\r
+#undef SUPP_SPEED   /* Remove compiler warning. */\r
+#define SUPP_SPEED          0x00000100  /* Reduced MII Logic Current Speed   */\r
+#define SUPP_RES_RMII       0x00000800  /* Reset Reduced MII Logic           */\r
+\r
+/* Test Register */\r
+#define TEST_SHCUT_PQUANTA  0x00000001  /* Shortcut Pause Quanta             */\r
+#define TEST_TST_PAUSE      0x00000002  /* Test Pause                        */\r
+#define TEST_TST_BACKP      0x00000004  /* Test Back Pressure                */\r
+\r
+/* MII Management Configuration Register */\r
+#define MCFG_SCAN_INC       0x00000001  /* Scan Increment PHY Address        */\r
+#define MCFG_SUPP_PREAM     0x00000002  /* Suppress Preamble                 */\r
+#define MCFG_CLK_SEL        0x0000001C  /* Clock Select Mask                 */\r
+#define MCFG_RES_MII        0x00008000  /* Reset MII Management Hardware     */\r
+\r
+/* MII Management Command Register */\r
+#undef MCMD_READ   /* Remove compiler warning. */\r
+#define MCMD_READ           0x00000001  /* MII Read                          */\r
+#undef MCMD_SCAN /* Remove compiler warning. */\r
+#define MCMD_SCAN           0x00000002  /* MII Scan continuously             */\r
+\r
+#define MII_WR_TOUT         0x00050000  /* MII Write timeout count           */\r
+#define MII_RD_TOUT         0x00050000  /* MII Read timeout count            */\r
+\r
+/* MII Management Address Register */\r
+#define MADR_REG_ADR        0x0000001F  /* MII Register Address Mask         */\r
+#define MADR_PHY_ADR        0x00001F00  /* PHY Address Mask                  */\r
+\r
+/* MII Management Indicators Register */\r
+#undef MIND_BUSY   /* Remove compiler warning. */\r
+#define MIND_BUSY           0x00000001  /* MII is Busy                       */\r
+#define MIND_SCAN           0x00000002  /* MII Scanning in Progress          */\r
+#define MIND_NOT_VAL        0x00000004  /* MII Read Data not valid           */\r
+#define MIND_MII_LINK_FAIL  0x00000008  /* MII Link Failed                   */\r
+\r
+/* Command Register */\r
+#define CR_RX_EN            0x00000001  /* Enable Receive                    */\r
+#define CR_TX_EN            0x00000002  /* Enable Transmit                   */\r
+#define CR_REG_RES          0x00000008  /* Reset Host Registers              */\r
+#define CR_TX_RES           0x00000010  /* Reset Transmit Datapath           */\r
+#define CR_RX_RES           0x00000020  /* Reset Receive Datapath            */\r
+#define CR_PASS_RUNT_FRM    0x00000040  /* Pass Runt Frames                  */\r
+#define CR_PASS_RX_FILT     0x00000080  /* Pass RX Filter                    */\r
+#define CR_TX_FLOW_CTRL     0x00000100  /* TX Flow Control                   */\r
+#define CR_RMII             0x00000200  /* Reduced MII Interface             */\r
+#define CR_FULL_DUP         0x00000400  /* Full Duplex                       */\r
+\r
+/* Status Register */\r
+#define SR_RX_EN            0x00000001  /* Enable Receive                    */\r
+#define SR_TX_EN            0x00000002  /* Enable Transmit                   */\r
+\r
+/* Transmit Status Vector 0 Register */\r
+#define TSV0_CRC_ERR        0x00000001  /* CRC error                         */\r
+#define TSV0_LEN_CHKERR     0x00000002  /* Length Check Error                */\r
+#define TSV0_LEN_OUTRNG     0x00000004  /* Length Out of Range               */\r
+#define TSV0_DONE           0x00000008  /* Tramsmission Completed            */\r
+#define TSV0_MCAST          0x00000010  /* Multicast Destination             */\r
+#define TSV0_BCAST          0x00000020  /* Broadcast Destination             */\r
+#define TSV0_PKT_DEFER      0x00000040  /* Packet Deferred                   */\r
+#define TSV0_EXC_DEFER      0x00000080  /* Excessive Packet Deferral         */\r
+#define TSV0_EXC_COLL       0x00000100  /* Excessive Collision               */\r
+#define TSV0_LATE_COLL      0x00000200  /* Late Collision Occured            */\r
+#define TSV0_GIANT          0x00000400  /* Giant Frame                       */\r
+#define TSV0_UNDERRUN       0x00000800  /* Buffer Underrun                   */\r
+#define TSV0_BYTES          0x0FFFF000  /* Total Bytes Transferred           */\r
+#define TSV0_CTRL_FRAME     0x10000000  /* Control Frame                     */\r
+#define TSV0_PAUSE          0x20000000  /* Pause Frame                       */\r
+#define TSV0_BACK_PRESS     0x40000000  /* Backpressure Method Applied       */\r
+#define TSV0_VLAN           0x80000000  /* VLAN Frame                        */\r
+\r
+/* Transmit Status Vector 1 Register */\r
+#define TSV1_BYTE_CNT       0x0000FFFF  /* Transmit Byte Count               */\r
+#define TSV1_COLL_CNT       0x000F0000  /* Transmit Collision Count          */\r
+\r
+/* Receive Status Vector Register */\r
+#define RSV_BYTE_CNT        0x0000FFFF  /* Receive Byte Count                */\r
+#define RSV_PKT_IGNORED     0x00010000  /* Packet Previously Ignored         */\r
+#define RSV_RXDV_SEEN       0x00020000  /* RXDV Event Previously Seen        */\r
+#define RSV_CARR_SEEN       0x00040000  /* Carrier Event Previously Seen     */\r
+#define RSV_REC_CODEV       0x00080000  /* Receive Code Violation            */\r
+#define RSV_CRC_ERR         0x00100000  /* CRC Error                         */\r
+#define RSV_LEN_CHKERR      0x00200000  /* Length Check Error                */\r
+#define RSV_LEN_OUTRNG      0x00400000  /* Length Out of Range               */\r
+#define RSV_REC_OK          0x00800000  /* Frame Received OK                 */\r
+#define RSV_MCAST           0x01000000  /* Multicast Frame                   */\r
+#define RSV_BCAST           0x02000000  /* Broadcast Frame                   */\r
+#define RSV_DRIB_NIBB       0x04000000  /* Dribble Nibble                    */\r
+#define RSV_CTRL_FRAME      0x08000000  /* Control Frame                     */\r
+#define RSV_PAUSE           0x10000000  /* Pause Frame                       */\r
+#define RSV_UNSUPP_OPC      0x20000000  /* Unsupported Opcode                */\r
+#define RSV_VLAN            0x40000000  /* VLAN Frame                        */\r
+\r
+/* Flow Control Counter Register */\r
+#define FCC_MIRR_CNT        0x0000FFFF  /* Mirror Counter                    */\r
+#define FCC_PAUSE_TIM       0xFFFF0000  /* Pause Timer                       */\r
+\r
+/* Flow Control Status Register */\r
+#define FCS_MIRR_CNT        0x0000FFFF  /* Mirror Counter Current            */\r
+\r
+/* Receive Filter Control Register */\r
+#define RFC_UCAST_EN        0x00000001  /* Accept Unicast Frames Enable      */\r
+#define RFC_BCAST_EN        0x00000002  /* Accept Broadcast Frames Enable    */\r
+#define RFC_MCAST_EN        0x00000004  /* Accept Multicast Frames Enable    */\r
+#define RFC_UCAST_HASH_EN   0x00000008  /* Accept Unicast Hash Filter Frames */\r
+#define RFC_MCAST_HASH_EN   0x00000010  /* Accept Multicast Hash Filter Fram.*/\r
+#define RFC_PERFECT_EN      0x00000020  /* Accept Perfect Match Enable       */\r
+#define RFC_MAGP_WOL_EN     0x00001000  /* Magic Packet Filter WoL Enable    */\r
+#define RFC_PFILT_WOL_EN    0x00002000  /* Perfect Filter WoL Enable         */\r
+\r
+/* Receive Filter WoL Status/Clear Registers */\r
+#define WOL_UCAST           0x00000001  /* Unicast Frame caused WoL          */\r
+#define WOL_BCAST           0x00000002  /* Broadcast Frame caused WoL        */\r
+#define WOL_MCAST           0x00000004  /* Multicast Frame caused WoL        */\r
+#define WOL_UCAST_HASH      0x00000008  /* Unicast Hash Filter Frame WoL     */\r
+#define WOL_MCAST_HASH      0x00000010  /* Multicast Hash Filter Frame WoL   */\r
+#define WOL_PERFECT         0x00000020  /* Perfect Filter WoL                */\r
+#define WOL_RX_FILTER       0x00000080  /* RX Filter caused WoL              */\r
+#define WOL_MAG_PACKET      0x00000100  /* Magic Packet Filter caused WoL    */\r
+\r
+/* Interrupt Status/Enable/Clear/Set Registers */\r
+#define INT_RX_OVERRUN      0x00000001  /* Overrun Error in RX Queue         */\r
+#define INT_RX_ERR          0x00000002  /* Receive Error                     */\r
+#define INT_RX_FIN          0x00000004  /* RX Finished Process Descriptors   */\r
+#define INT_RX_DONE         0x00000008  /* Receive Done                      */\r
+#define INT_TX_UNDERRUN     0x00000010  /* Transmit Underrun                 */\r
+#define INT_TX_ERR          0x00000020  /* Transmit Error                    */\r
+#define INT_TX_FIN          0x00000040  /* TX Finished Process Descriptors   */\r
+#define INT_TX_DONE         0x00000080  /* Transmit Done                     */\r
+#define INT_SOFT_INT        0x00001000  /* Software Triggered Interrupt      */\r
+#define INT_WAKEUP          0x00002000  /* Wakeup Event Interrupt            */\r
+\r
+/* Power Down Register */\r
+#define PD_POWER_DOWN       0x80000000  /* Power Down MAC                    */\r
+\r
+/* RX Descriptor Control Word */\r
+#define RCTRL_SIZE          0x000007FF  /* Buffer size mask                  */\r
+#define RCTRL_INT           0x80000000  /* Generate RxDone Interrupt         */\r
+\r
+/* RX Status Hash CRC Word */\r
+#define RHASH_SA            0x000001FF  /* Hash CRC for Source Address       */\r
+#define RHASH_DA            0x001FF000  /* Hash CRC for Destination Address  */\r
+\r
+/* RX Status Information Word */\r
+#define RINFO_SIZE          0x000007FF  /* Data size in bytes                */\r
+#define RINFO_CTRL_FRAME    0x00040000  /* Control Frame                     */\r
+#define RINFO_VLAN          0x00080000  /* VLAN Frame                        */\r
+#define RINFO_FAIL_FILT     0x00100000  /* RX Filter Failed                  */\r
+#define RINFO_MCAST         0x00200000  /* Multicast Frame                   */\r
+#define RINFO_BCAST         0x00400000  /* Broadcast Frame                   */\r
+#define RINFO_CRC_ERR       0x00800000  /* CRC Error in Frame                */\r
+#define RINFO_SYM_ERR       0x01000000  /* Symbol Error from PHY             */\r
+#define RINFO_LEN_ERR       0x02000000  /* Length Error                      */\r
+#define RINFO_RANGE_ERR     0x04000000  /* Range Error (exceeded max. size)  */\r
+#define RINFO_ALIGN_ERR     0x08000000  /* Alignment Error                   */\r
+#define RINFO_OVERRUN       0x10000000  /* Receive overrun                   */\r
+#define RINFO_NO_DESCR      0x20000000  /* No new Descriptor available       */\r
+#define RINFO_LAST_FLAG     0x40000000  /* Last Fragment in Frame            */\r
+#define RINFO_ERR           0x80000000  /* Error Occured (OR of all errors)  */\r
+\r
+#define RINFO_ERR_MASK     (RINFO_FAIL_FILT | RINFO_CRC_ERR   | RINFO_SYM_ERR | \\r
+                            RINFO_LEN_ERR   | RINFO_ALIGN_ERR | RINFO_OVERRUN)\r
+\r
+/* TX Descriptor Control Word */\r
+#define TCTRL_SIZE          0x000007FF  /* Size of data buffer in bytes      */\r
+#define TCTRL_OVERRIDE      0x04000000  /* Override Default MAC Registers    */\r
+#define TCTRL_HUGE          0x08000000  /* Enable Huge Frame                 */\r
+#define TCTRL_PAD           0x10000000  /* Pad short Frames to 64 bytes      */\r
+#define TCTRL_CRC           0x20000000  /* Append a hardware CRC to Frame    */\r
+#define TCTRL_LAST          0x40000000  /* Last Descriptor for TX Frame      */\r
+#define TCTRL_INT           0x80000000  /* Generate TxDone Interrupt         */\r
+\r
+/* TX Status Information Word */\r
+#define TINFO_COL_CNT       0x01E00000  /* Collision Count                   */\r
+#define TINFO_DEFER         0x02000000  /* Packet Deferred (not an error)    */\r
+#define TINFO_EXCESS_DEF    0x04000000  /* Excessive Deferral                */\r
+#define TINFO_EXCESS_COL    0x08000000  /* Excessive Collision               */\r
+#define TINFO_LATE_COL      0x10000000  /* Late Collision Occured            */\r
+#define TINFO_UNDERRUN      0x20000000  /* Transmit Underrun                 */\r
+#define TINFO_NO_DESCR      0x40000000  /* No new Descriptor available       */\r
+#define TINFO_ERR           0x80000000  /* Error Occured (OR of all errors)  */\r
+\r
+/* DP83848C PHY Registers */\r
+#define PHY_REG_BMCR        0x00        /* Basic Mode Control Register       */\r
+#define PHY_REG_BMSR        0x01        /* Basic Mode Status Register        */\r
+#define PHY_REG_IDR1        0x02        /* PHY Identifier 1                  */\r
+#define PHY_REG_IDR2        0x03        /* PHY Identifier 2                  */\r
+#define PHY_REG_ANAR        0x04        /* Auto-Negotiation Advertisement    */\r
+#define PHY_REG_ANLPAR      0x05        /* Auto-Neg. Link Partner Abitily    */\r
+#define PHY_REG_ANER        0x06        /* Auto-Neg. Expansion Register      */\r
+#define PHY_REG_ANNPTR      0x07        /* Auto-Neg. Next Page TX            */\r
+\r
+/* PHY Extended Registers */\r
+#define PHY_REG_STS         0x10        /* Status Register                   */\r
+#define PHY_REG_MICR        0x11        /* MII Interrupt Control Register    */\r
+#define PHY_REG_MISR        0x12        /* MII Interrupt Status Register     */\r
+#define PHY_REG_FCSCR       0x14        /* False Carrier Sense Counter       */\r
+#define PHY_REG_RECR        0x15        /* Receive Error Counter             */\r
+#define PHY_REG_PCSR        0x16        /* PCS Sublayer Config. and Status   */\r
+#define PHY_REG_RBR         0x17        /* RMII and Bypass Register          */\r
+#define PHY_REG_LEDCR       0x18        /* LED Direct Control Register       */\r
+#define PHY_REG_PHYCR       0x19        /* PHY Control Register              */\r
+#define PHY_REG_10BTSCR     0x1A        /* 10Base-T Status/Control Register  */\r
+#define PHY_REG_CDCTRL1     0x1B        /* CD Test Control and BIST Extens.  */\r
+#define PHY_REG_EDCR        0x1D        /* Energy Detect Control Register    */\r
+\r
+#define PHY_FULLD_100M      0x2100      /* Full Duplex 100Mbit               */\r
+#define PHY_HALFD_100M      0x2000      /* Half Duplex 100Mbit               */\r
+#define PHY_FULLD_10M       0x0100      /* Full Duplex 10Mbit                */\r
+#define PHY_HALFD_10M       0x0000      /* Half Duplex 10MBit                */\r
+#define PHY_AUTO_NEG        0x3000      /* Select Auto Negotiation           */\r
+\r
+#define DP83848C_DEF_ADR    0x0100      /* Default PHY device address        */\r
+#define DP83848C_ID         0x20005C90  /* PHY Identifier                    */\r
+\r
+// prototypes\r
+portBASE_TYPE           Init_EMAC(void);\r
+unsigned short ReadFrameBE_EMAC(void);\r
+void           CopyToFrame_EMAC(void *Source, unsigned int Size);\r
+void           CopyFromFrame_EMAC(void *Dest, unsigned short Size);\r
+void           DummyReadFrame_EMAC(unsigned short Size);\r
+unsigned short StartReadFrame(void);\r
+void           EndReadFrame(void);\r
+unsigned int   CheckFrameReceived(void);\r
+void           RequestSend(void);\r
+unsigned int   Rdy4Tx(void);\r
+void           DoSend_EMAC(unsigned short FrameSize);\r
+void vEMACWaitForInput( void );\r
+unsigned int uiGetEMACRxData( unsigned char *ucBuffer );\r
+\r
+\r
+#endif\r
+\r
+/*----------------------------------------------------------------------------\r
+ * end of file\r
+ *---------------------------------------------------------------------------*/\r
+\r
diff --git a/Demo/ARM7_LPC2368_Rowley/webserver/http-strings b/Demo/ARM7_LPC2368_Rowley/webserver/http-strings
new file mode 100644 (file)
index 0000000..0d3c30c
--- /dev/null
@@ -0,0 +1,35 @@
+http_http "http://"\r
+http_200 "200 "\r
+http_301 "301 "\r
+http_302 "302 "\r
+http_get "GET "\r
+http_10 "HTTP/1.0"\r
+http_11 "HTTP/1.1"\r
+http_content_type "content-type: "\r
+http_texthtml "text/html"\r
+http_location "location: "\r
+http_host "host: "\r
+http_crnl "\r\n"\r
+http_index_html "/index.html"\r
+http_404_html "/404.html"\r
+http_referer "Referer:"\r
+http_header_200 "HTTP/1.0 200 OK\r\nServer: uIP/1.0 http://www.sics.se/~adam/uip/\r\nConnection: close\r\n"\r
+http_header_404 "HTTP/1.0 404 Not found\r\nServer: uIP/1.0 http://www.sics.se/~adam/uip/\r\nConnection: close\r\n"\r
+http_content_type_plain "Content-type: text/plain\r\n\r\n"\r
+http_content_type_html "Content-type: text/html\r\n\r\n"\r
+http_content_type_css  "Content-type: text/css\r\n\r\n"\r
+http_content_type_text "Content-type: text/text\r\n\r\n"\r
+http_content_type_png  "Content-type: image/png\r\n\r\n"\r
+http_content_type_gif  "Content-type: image/gif\r\n\r\n"\r
+http_content_type_jpg  "Content-type: image/jpeg\r\n\r\n"\r
+http_content_type_binary "Content-type: application/octet-stream\r\n\r\n"\r
+http_html ".html"\r
+http_shtml ".shtml"\r
+http_htm ".htm"\r
+http_css ".css"\r
+http_png ".png"\r
+http_gif ".gif"\r
+http_jpg ".jpg"\r
+http_text ".txt"\r
+http_txt ".txt"\r
+\r
diff --git a/Demo/ARM7_LPC2368_Rowley/webserver/http-strings.c b/Demo/ARM7_LPC2368_Rowley/webserver/http-strings.c
new file mode 100644 (file)
index 0000000..ef7a41c
--- /dev/null
@@ -0,0 +1,102 @@
+const char http_http[8] = \r
+/* "http://" */\r
+{0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, };\r
+const char http_200[5] = \r
+/* "200 " */\r
+{0x32, 0x30, 0x30, 0x20, };\r
+const char http_301[5] = \r
+/* "301 " */\r
+{0x33, 0x30, 0x31, 0x20, };\r
+const char http_302[5] = \r
+/* "302 " */\r
+{0x33, 0x30, 0x32, 0x20, };\r
+const char http_get[5] = \r
+/* "GET " */\r
+{0x47, 0x45, 0x54, 0x20, };\r
+const char http_10[9] = \r
+/* "HTTP/1.0" */\r
+{0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x30, };\r
+const char http_11[9] = \r
+/* "HTTP/1.1" */\r
+{0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x31, };\r
+const char http_content_type[15] = \r
+/* "content-type: " */\r
+{0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, };\r
+const char http_texthtml[10] = \r
+/* "text/html" */\r
+{0x74, 0x65, 0x78, 0x74, 0x2f, 0x68, 0x74, 0x6d, 0x6c, };\r
+const char http_location[11] = \r
+/* "location: " */\r
+{0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, };\r
+const char http_host[7] = \r
+/* "host: " */\r
+{0x68, 0x6f, 0x73, 0x74, 0x3a, 0x20, };\r
+const char http_crnl[3] = \r
+/* "\r\n" */\r
+{0xd, 0xa, };\r
+const char http_index_html[12] = \r
+/* "/index.html" */\r
+{0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x68, 0x74, 0x6d, 0x6c, };\r
+const char http_404_html[10] = \r
+/* "/404.html" */\r
+{0x2f, 0x34, 0x30, 0x34, 0x2e, 0x68, 0x74, 0x6d, 0x6c, };\r
+const char http_referer[9] = \r
+/* "Referer:" */\r
+{0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x72, 0x3a, };\r
+const char http_header_200[84] = \r
+/* "HTTP/1.0 200 OK\r\nServer: uIP/1.0 http://www.sics.se/~adam/uip/\r\nConnection: close\r\n" */\r
+{0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x30, 0x20, 0x32, 0x30, 0x30, 0x20, 0x4f, 0x4b, 0xd, 0xa, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x3a, 0x20, 0x75, 0x49, 0x50, 0x2f, 0x31, 0x2e, 0x30, 0x20, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x73, 0x69, 0x63, 0x73, 0x2e, 0x73, 0x65, 0x2f, 0x7e, 0x61, 0x64, 0x61, 0x6d, 0x2f, 0x75, 0x69, 0x70, 0x2f, 0xd, 0xa, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0xd, 0xa, };\r
+const char http_header_404[91] = \r
+/* "HTTP/1.0 404 Not found\r\nServer: uIP/1.0 http://www.sics.se/~adam/uip/\r\nConnection: close\r\n" */\r
+{0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x30, 0x20, 0x34, 0x30, 0x34, 0x20, 0x4e, 0x6f, 0x74, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0xd, 0xa, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x3a, 0x20, 0x75, 0x49, 0x50, 0x2f, 0x31, 0x2e, 0x30, 0x20, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x73, 0x69, 0x63, 0x73, 0x2e, 0x73, 0x65, 0x2f, 0x7e, 0x61, 0x64, 0x61, 0x6d, 0x2f, 0x75, 0x69, 0x70, 0x2f, 0xd, 0xa, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0xd, 0xa, };\r
+const char http_content_type_plain[29] = \r
+/* "Content-type: text/plain\r\n\r\n" */\r
+{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0xd, 0xa, 0xd, 0xa, };\r
+const char http_content_type_html[28] = \r
+/* "Content-type: text/html\r\n\r\n" */\r
+{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0xd, 0xa, 0xd, 0xa, };\r
+const char http_content_type_css [27] = \r
+/* "Content-type: text/css\r\n\r\n" */\r
+{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x63, 0x73, 0x73, 0xd, 0xa, 0xd, 0xa, };\r
+const char http_content_type_text[28] = \r
+/* "Content-type: text/text\r\n\r\n" */\r
+{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x74, 0x65, 0x78, 0x74, 0xd, 0xa, 0xd, 0xa, };\r
+const char http_content_type_png [28] = \r
+/* "Content-type: image/png\r\n\r\n" */\r
+{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x70, 0x6e, 0x67, 0xd, 0xa, 0xd, 0xa, };\r
+const char http_content_type_gif [28] = \r
+/* "Content-type: image/gif\r\n\r\n" */\r
+{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x67, 0x69, 0x66, 0xd, 0xa, 0xd, 0xa, };\r
+const char http_content_type_jpg [29] = \r
+/* "Content-type: image/jpeg\r\n\r\n" */\r
+{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x6a, 0x70, 0x65, 0x67, 0xd, 0xa, 0xd, 0xa, };\r
+const char http_content_type_binary[43] = \r
+/* "Content-type: application/octet-stream\r\n\r\n" */\r
+{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6f, 0x63, 0x74, 0x65, 0x74, 0x2d, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0xd, 0xa, 0xd, 0xa, };\r
+const char http_html[6] = \r
+/* ".html" */\r
+{0x2e, 0x68, 0x74, 0x6d, 0x6c, };\r
+const char http_shtml[7] = \r
+/* ".shtml" */\r
+{0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, };\r
+const char http_htm[5] = \r
+/* ".htm" */\r
+{0x2e, 0x68, 0x74, 0x6d, };\r
+const char http_css[5] = \r
+/* ".css" */\r
+{0x2e, 0x63, 0x73, 0x73, };\r
+const char http_png[5] = \r
+/* ".png" */\r
+{0x2e, 0x70, 0x6e, 0x67, };\r
+const char http_gif[5] = \r
+/* ".gif" */\r
+{0x2e, 0x67, 0x69, 0x66, };\r
+const char http_jpg[5] = \r
+/* ".jpg" */\r
+{0x2e, 0x6a, 0x70, 0x67, };\r
+const char http_text[5] = \r
+/* ".txt" */\r
+{0x2e, 0x74, 0x78, 0x74, };\r
+const char http_txt[5] = \r
+/* ".txt" */\r
+{0x2e, 0x74, 0x78, 0x74, };\r
diff --git a/Demo/ARM7_LPC2368_Rowley/webserver/http-strings.h b/Demo/ARM7_LPC2368_Rowley/webserver/http-strings.h
new file mode 100644 (file)
index 0000000..acbe7e1
--- /dev/null
@@ -0,0 +1,34 @@
+extern const char http_http[8];\r
+extern const char http_200[5];\r
+extern const char http_301[5];\r
+extern const char http_302[5];\r
+extern const char http_get[5];\r
+extern const char http_10[9];\r
+extern const char http_11[9];\r
+extern const char http_content_type[15];\r
+extern const char http_texthtml[10];\r
+extern const char http_location[11];\r
+extern const char http_host[7];\r
+extern const char http_crnl[3];\r
+extern const char http_index_html[12];\r
+extern const char http_404_html[10];\r
+extern const char http_referer[9];\r
+extern const char http_header_200[84];\r
+extern const char http_header_404[91];\r
+extern const char http_content_type_plain[29];\r
+extern const char http_content_type_html[28];\r
+extern const char http_content_type_css [27];\r
+extern const char http_content_type_text[28];\r
+extern const char http_content_type_png [28];\r
+extern const char http_content_type_gif [28];\r
+extern const char http_content_type_jpg [29];\r
+extern const char http_content_type_binary[43];\r
+extern const char http_html[6];\r
+extern const char http_shtml[7];\r
+extern const char http_htm[5];\r
+extern const char http_css[5];\r
+extern const char http_png[5];\r
+extern const char http_gif[5];\r
+extern const char http_jpg[5];\r
+extern const char http_text[5];\r
+extern const char http_txt[5];\r
diff --git a/Demo/ARM7_LPC2368_Rowley/webserver/httpd-cgi.c b/Demo/ARM7_LPC2368_Rowley/webserver/httpd-cgi.c
new file mode 100644 (file)
index 0000000..fb87c47
--- /dev/null
@@ -0,0 +1,276 @@
+/**\r
+ * \addtogroup httpd\r
+ * @{\r
+ */\r
+\r
+/**\r
+ * \file\r
+ *         Web server script interface\r
+ * \author\r
+ *         Adam Dunkels <adam@sics.se>\r
+ *\r
+ */\r
+\r
+/*\r
+ * Copyright (c) 2001-2006, Adam Dunkels.\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions\r
+ * are met:\r
+ * 1. Redistributions of source code must retain the above copyright\r
+ *    notice, this list of conditions and the following disclaimer.\r
+ * 2. Redistributions in binary form must reproduce the above copyright\r
+ *    notice, this list of conditions and the following disclaimer in the\r
+ *    documentation and/or other materials provided with the distribution.\r
+ * 3. The name of the author may not be used to endorse or promote\r
+ *    products derived from this software without specific prior\r
+ *    written permission.\r
+ *\r
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\r
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\r
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE\r
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ *\r
+ * This file is part of the uIP TCP/IP stack.\r
+ *\r
+ * $Id: httpd-cgi.c,v 1.2 2006/06/11 21:46:37 adam Exp $\r
+ *\r
+ */\r
+\r
+#include "uip.h"\r
+#include "psock.h"\r
+#include "httpd.h"\r
+#include "httpd-cgi.h"\r
+#include "httpd-fs.h"\r
+\r
+#include <stdio.h>\r
+#include <string.h>\r
+\r
+HTTPD_CGI_CALL(file, "file-stats", file_stats);\r
+HTTPD_CGI_CALL(tcp, "tcp-connections", tcp_stats);\r
+HTTPD_CGI_CALL(net, "net-stats", net_stats);\r
+HTTPD_CGI_CALL(rtos, "rtos-stats", rtos_stats );\r
+HTTPD_CGI_CALL(io, "led-io", led_io );\r
+\r
+\r
+static const struct httpd_cgi_call *calls[] = { &file, &tcp, &net, &rtos, &io, NULL };\r
+\r
+/*---------------------------------------------------------------------------*/\r
+static\r
+PT_THREAD(nullfunction(struct httpd_state *s, char *ptr))\r
+{\r
+  PSOCK_BEGIN(&s->sout);\r
+  PSOCK_END(&s->sout);\r
+}\r
+/*---------------------------------------------------------------------------*/\r
+httpd_cgifunction\r
+httpd_cgi(char *name)\r
+{\r
+  const struct httpd_cgi_call **f;\r
+\r
+  /* Find the matching name in the table, return the function. */\r
+  for(f = calls; *f != NULL; ++f) {\r
+    if(strncmp((*f)->name, name, strlen((*f)->name)) == 0) {\r
+      return (*f)->function;\r
+    }\r
+  }\r
+  return nullfunction;\r
+}\r
+/*---------------------------------------------------------------------------*/\r
+static unsigned short\r
+generate_file_stats(void *arg)\r
+{\r
+  char *f = (char *)arg;\r
+  return snprintf((char *)uip_appdata, UIP_APPDATA_SIZE, "%5u", httpd_fs_count(f));\r
+}\r
+/*---------------------------------------------------------------------------*/\r
+static\r
+PT_THREAD(file_stats(struct httpd_state *s, char *ptr))\r
+{\r
+  PSOCK_BEGIN(&s->sout);\r
+\r
+  PSOCK_GENERATOR_SEND(&s->sout, generate_file_stats, strchr(ptr, ' ') + 1);\r
+  \r
+  PSOCK_END(&s->sout);\r
+}\r
+/*---------------------------------------------------------------------------*/\r
+static const char closed[] =   /*  "CLOSED",*/\r
+{0x43, 0x4c, 0x4f, 0x53, 0x45, 0x44, 0};\r
+static const char syn_rcvd[] = /*  "SYN-RCVD",*/\r
+{0x53, 0x59, 0x4e, 0x2d, 0x52, 0x43, 0x56,\r
+ 0x44,  0};\r
+static const char syn_sent[] = /*  "SYN-SENT",*/\r
+{0x53, 0x59, 0x4e, 0x2d, 0x53, 0x45, 0x4e,\r
+ 0x54,  0};\r
+static const char established[] = /*  "ESTABLISHED",*/\r
+{0x45, 0x53, 0x54, 0x41, 0x42, 0x4c, 0x49, 0x53, 0x48,\r
+ 0x45, 0x44, 0};\r
+static const char fin_wait_1[] = /*  "FIN-WAIT-1",*/\r
+{0x46, 0x49, 0x4e, 0x2d, 0x57, 0x41, 0x49,\r
+ 0x54, 0x2d, 0x31, 0};\r
+static const char fin_wait_2[] = /*  "FIN-WAIT-2",*/\r
+{0x46, 0x49, 0x4e, 0x2d, 0x57, 0x41, 0x49,\r
+ 0x54, 0x2d, 0x32, 0};\r
+static const char closing[] = /*  "CLOSING",*/\r
+{0x43, 0x4c, 0x4f, 0x53, 0x49,\r
+ 0x4e, 0x47, 0};\r
+static const char time_wait[] = /*  "TIME-WAIT,"*/\r
+{0x54, 0x49, 0x4d, 0x45, 0x2d, 0x57, 0x41,\r
+ 0x49, 0x54, 0};\r
+static const char last_ack[] = /*  "LAST-ACK"*/\r
+{0x4c, 0x41, 0x53, 0x54, 0x2d, 0x41, 0x43,\r
+ 0x4b, 0};\r
+\r
+static const char *states[] = {\r
+  closed,\r
+  syn_rcvd,\r
+  syn_sent,\r
+  established,\r
+  fin_wait_1,\r
+  fin_wait_2,\r
+  closing,\r
+  time_wait,\r
+  last_ack};\r
+  \r
+\r
+static unsigned short\r
+generate_tcp_stats(void *arg)\r
+{\r
+  struct uip_conn *conn;\r
+  struct httpd_state *s = (struct httpd_state *)arg;\r
+    \r
+  conn = &uip_conns[s->count];\r
+  return snprintf((char *)uip_appdata, UIP_APPDATA_SIZE,\r
+                "<tr><td>%d</td><td>%u.%u.%u.%u:%u</td><td>%s</td><td>%u</td><td>%u</td><td>%c %c</td></tr>\r\n",\r
+                htons(conn->lport),\r
+                htons(conn->ripaddr[0]) >> 8,\r
+                htons(conn->ripaddr[0]) & 0xff,\r
+                htons(conn->ripaddr[1]) >> 8,\r
+                htons(conn->ripaddr[1]) & 0xff,\r
+                htons(conn->rport),\r
+                states[conn->tcpstateflags & UIP_TS_MASK],\r
+                conn->nrtx,\r
+                conn->timer,\r
+                (uip_outstanding(conn))? '*':' ',\r
+                (uip_stopped(conn))? '!':' ');\r
+}\r
+/*---------------------------------------------------------------------------*/\r
+static\r
+PT_THREAD(tcp_stats(struct httpd_state *s, char *ptr))\r
+{\r
+  \r
+  PSOCK_BEGIN(&s->sout);\r
+\r
+  for(s->count = 0; s->count < UIP_CONNS; ++s->count) {\r
+    if((uip_conns[s->count].tcpstateflags & UIP_TS_MASK) != UIP_CLOSED) {\r
+      PSOCK_GENERATOR_SEND(&s->sout, generate_tcp_stats, s);\r
+    }\r
+  }\r
+\r
+  PSOCK_END(&s->sout);\r
+}\r
+/*---------------------------------------------------------------------------*/\r
+static unsigned short\r
+generate_net_stats(void *arg)\r
+{\r
+  struct httpd_state *s = (struct httpd_state *)arg;\r
+  return snprintf((char *)uip_appdata, UIP_APPDATA_SIZE,\r
+                 "%5u\n", ((uip_stats_t *)&uip_stat)[s->count]);\r
+}\r
+\r
+static\r
+PT_THREAD(net_stats(struct httpd_state *s, char *ptr))\r
+{\r
+  PSOCK_BEGIN(&s->sout);\r
+\r
+#if UIP_STATISTICS\r
+\r
+  for(s->count = 0; s->count < sizeof(uip_stat) / sizeof(uip_stats_t);\r
+      ++s->count) {\r
+    PSOCK_GENERATOR_SEND(&s->sout, generate_net_stats, s);\r
+  }\r
+  \r
+#endif /* UIP_STATISTICS */\r
+  \r
+  PSOCK_END(&s->sout);\r
+}\r
+/*---------------------------------------------------------------------------*/\r
+\r
+extern void vTaskList( signed char *pcWriteBuffer );\r
+static char cCountBuf[ 32 ];\r
+long lRefreshCount = 0;\r
+static unsigned short\r
+generate_rtos_stats(void *arg)\r
+{\r
+       lRefreshCount++;\r
+       sprintf( cCountBuf, "<p><br>Refresh count = %d", lRefreshCount );\r
+    vTaskList( uip_appdata );\r
+       strcat( uip_appdata, cCountBuf );\r
+  \r
+       return strlen( uip_appdata );\r
+}\r
+/*---------------------------------------------------------------------------*/\r
+\r
+\r
+static\r
+PT_THREAD(rtos_stats(struct httpd_state *s, char *ptr))\r
+{\r
+  PSOCK_BEGIN(&s->sout);\r
+  PSOCK_GENERATOR_SEND(&s->sout, generate_rtos_stats, NULL);  \r
+  PSOCK_END(&s->sout);\r
+}\r
+/*---------------------------------------------------------------------------*/\r
+\r
+char *pcStatus[ 3 ];\r
+unsigned long ulString;\r
+extern unsigned long uxParTextGetLED( unsigned long uxLED );\r
+\r
+static unsigned short generate_io_state( void *arg )\r
+{\r
+       for( ulString = 0; ulString < 4; ulString++ )\r
+       {\r
+               if( uxParTextGetLED( ulString + 5 ) )\r
+               {\r
+                       pcStatus[ ulString ] = "checked";\r
+               }\r
+               else\r
+               {\r
+                       pcStatus[ ulString ] = "";\r
+               }\r
+       }\r
+\r
+       sprintf( uip_appdata,\r
+               "<input type=\"checkbox\" name=\"LED0\" value=\"1\" %s>LED 2.5,"\\r
+               "<input type=\"checkbox\" name=\"LED1\" value=\"1\" %s>LED 2.6,"\\r
+               "<input type=\"checkbox\" name=\"LED2\" value=\"1\" %s>LED 2.7"\\r
+               "<p>"\\r
+               "<input type=\"text\" name=\"LCD\" value=\"Enter LCD text\" size=\"16\">",\r
+               pcStatus[ 0 ], \r
+               pcStatus[ 1 ], \r
+               pcStatus[ 2 ] );\r
+\r
+       return strlen( uip_appdata );\r
+}\r
+\r
+static PT_THREAD(led_io(struct httpd_state *s, char *ptr))\r
+{\r
+  PSOCK_BEGIN(&s->sout);\r
+  PSOCK_GENERATOR_SEND(&s->sout, generate_io_state, NULL);\r
+  PSOCK_END(&s->sout);\r
+}\r
+\r
+/** @} */\r
+\r
+\r
+\r
+\r
+\r
+\r
diff --git a/Demo/ARM7_LPC2368_Rowley/webserver/httpd-cgi.h b/Demo/ARM7_LPC2368_Rowley/webserver/httpd-cgi.h
new file mode 100644 (file)
index 0000000..7ae9283
--- /dev/null
@@ -0,0 +1,84 @@
+/**\r
+ * \addtogroup httpd\r
+ * @{\r
+ */\r
+\r
+/**\r
+ * \file\r
+ *         Web server script interface header file\r
+ * \author\r
+ *         Adam Dunkels <adam@sics.se>\r
+ *\r
+ */\r
+\r
+\r
+\r
+/*\r
+ * Copyright (c) 2001, Adam Dunkels.\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions\r
+ * are met:\r
+ * 1. Redistributions of source code must retain the above copyright\r
+ *    notice, this list of conditions and the following disclaimer.\r
+ * 2. Redistributions in binary form must reproduce the above copyright\r
+ *    notice, this list of conditions and the following disclaimer in the\r
+ *    documentation and/or other materials provided with the distribution.\r
+ * 3. The name of the author may not be used to endorse or promote\r
+ *    products derived from this software without specific prior\r
+ *    written permission.\r
+ *\r
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\r
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\r
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE\r
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ *\r
+ * This file is part of the uIP TCP/IP stack.\r
+ *\r
+ * $Id: httpd-cgi.h,v 1.2 2006/06/11 21:46:38 adam Exp $\r
+ *\r
+ */\r
+\r
+#ifndef __HTTPD_CGI_H__\r
+#define __HTTPD_CGI_H__\r
+\r
+#include "psock.h"\r
+#include "httpd.h"\r
+\r
+typedef PT_THREAD((* httpd_cgifunction)(struct httpd_state *, char *));\r
+\r
+httpd_cgifunction httpd_cgi(char *name);\r
+\r
+struct httpd_cgi_call {\r
+  const char *name;\r
+  const httpd_cgifunction function;\r
+};\r
+\r
+/**\r
+ * \brief      HTTPD CGI function declaration\r
+ * \param name The C variable name of the function\r
+ * \param str  The string name of the function, used in the script file\r
+ * \param function A pointer to the function that implements it\r
+ *\r
+ *             This macro is used for declaring a HTTPD CGI\r
+ *             function. This function is then added to the list of\r
+ *             HTTPD CGI functions with the httpd_cgi_add() function.\r
+ *\r
+ * \hideinitializer\r
+ */\r
+#define HTTPD_CGI_CALL(name, str, function) \\r
+static PT_THREAD(function(struct httpd_state *, char *)); \\r
+static const struct httpd_cgi_call name = {str, function}\r
+\r
+void httpd_cgi_init(void);\r
+#endif /* __HTTPD_CGI_H__ */\r
+\r
+/** @} */\r
diff --git a/Demo/ARM7_LPC2368_Rowley/webserver/httpd-fs.c b/Demo/ARM7_LPC2368_Rowley/webserver/httpd-fs.c
new file mode 100644 (file)
index 0000000..dc4aef0
--- /dev/null
@@ -0,0 +1,132 @@
+/*\r
+ * Copyright (c) 2001, Swedish Institute of Computer Science.\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions\r
+ * are met:\r
+ * 1. Redistributions of source code must retain the above copyright\r
+ *    notice, this list of conditions and the following disclaimer.\r
+ * 2. Redistributions in binary form must reproduce the above copyright\r
+ *    notice, this list of conditions and the following disclaimer in the\r
+ *    documentation and/or other materials provided with the distribution.\r
+ * 3. Neither the name of the Institute nor the names of its contributors\r
+ *    may be used to endorse or promote products derived from this software\r
+ *    without specific prior written permission.\r
+ *\r
+ * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND\r
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE\r
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\r
+ * SUCH DAMAGE.\r
+ *\r
+ * This file is part of the lwIP TCP/IP stack.\r
+ *\r
+ * Author: Adam Dunkels <adam@sics.se>\r
+ *\r
+ * $Id: httpd-fs.c,v 1.1 2006/06/07 09:13:08 adam Exp $\r
+ */\r
+\r
+#include "httpd.h"\r
+#include "httpd-fs.h"\r
+#include "httpd-fsdata.h"\r
+\r
+#ifndef NULL\r
+#define NULL 0\r
+#endif /* NULL */\r
+\r
+#include "httpd-fsdata.c"\r
+\r
+#if HTTPD_FS_STATISTICS\r
+static u16_t count[HTTPD_FS_NUMFILES];\r
+#endif /* HTTPD_FS_STATISTICS */\r
+\r
+/*-----------------------------------------------------------------------------------*/\r
+static u8_t\r
+httpd_fs_strcmp(const char *str1, const char *str2)\r
+{\r
+  u8_t i;\r
+  i = 0;\r
+ loop:\r
+\r
+  if(str2[i] == 0 ||\r
+     str1[i] == '\r' ||\r
+     str1[i] == '\n') {\r
+    return 0;\r
+  }\r
+\r
+  if(str1[i] != str2[i]) {\r
+    return 1;\r
+  }\r
+\r
+\r
+  ++i;\r
+  goto loop;\r
+}\r
+/*-----------------------------------------------------------------------------------*/\r
+int\r
+httpd_fs_open(const char *name, struct httpd_fs_file *file)\r
+{\r
+#if HTTPD_FS_STATISTICS\r
+  u16_t i = 0;\r
+#endif /* HTTPD_FS_STATISTICS */\r
+  struct httpd_fsdata_file_noconst *f;\r
+\r
+  for(f = (struct httpd_fsdata_file_noconst *)HTTPD_FS_ROOT;\r
+      f != NULL;\r
+      f = (struct httpd_fsdata_file_noconst *)f->next) {\r
+\r
+    if(httpd_fs_strcmp(name, f->name) == 0) {\r
+      file->data = f->data;\r
+      file->len = f->len;\r
+#if HTTPD_FS_STATISTICS\r
+      ++count[i];\r
+#endif /* HTTPD_FS_STATISTICS */\r
+      return 1;\r
+    }\r
+#if HTTPD_FS_STATISTICS\r
+    ++i;\r
+#endif /* HTTPD_FS_STATISTICS */\r
+\r
+  }\r
+  return 0;\r
+}\r
+/*-----------------------------------------------------------------------------------*/\r
+void\r
+httpd_fs_init(void)\r
+{\r
+#if HTTPD_FS_STATISTICS\r
+  u16_t i;\r
+  for(i = 0; i < HTTPD_FS_NUMFILES; i++) {\r
+    count[i] = 0;\r
+  }\r
+#endif /* HTTPD_FS_STATISTICS */\r
+}\r
+/*-----------------------------------------------------------------------------------*/\r
+#if HTTPD_FS_STATISTICS\r
+u16_t httpd_fs_count\r
+(char *name)\r
+{\r
+  struct httpd_fsdata_file_noconst *f;\r
+  u16_t i;\r
+\r
+  i = 0;\r
+  for(f = (struct httpd_fsdata_file_noconst *)HTTPD_FS_ROOT;\r
+      f != NULL;\r
+      f = (struct httpd_fsdata_file_noconst *)f->next) {\r
+\r
+    if(httpd_fs_strcmp(name, f->name) == 0) {\r
+      return count[i];\r
+    }\r
+    ++i;\r
+  }\r
+  return 0;\r
+}\r
+#endif /* HTTPD_FS_STATISTICS */\r
+/*-----------------------------------------------------------------------------------*/\r
diff --git a/Demo/ARM7_LPC2368_Rowley/webserver/httpd-fs.h b/Demo/ARM7_LPC2368_Rowley/webserver/httpd-fs.h
new file mode 100644 (file)
index 0000000..b594eea
--- /dev/null
@@ -0,0 +1,57 @@
+/*\r
+ * Copyright (c) 2001, Swedish Institute of Computer Science.\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions\r
+ * are met:\r
+ * 1. Redistributions of source code must retain the above copyright\r
+ *    notice, this list of conditions and the following disclaimer.\r
+ * 2. Redistributions in binary form must reproduce the above copyright\r
+ *    notice, this list of conditions and the following disclaimer in the\r
+ *    documentation and/or other materials provided with the distribution.\r
+ * 3. Neither the name of the Institute nor the names of its contributors\r
+ *    may be used to endorse or promote products derived from this software\r
+ *    without specific prior written permission.\r
+ *\r
+ * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND\r
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE\r
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\r
+ * SUCH DAMAGE.\r
+ *\r
+ * This file is part of the lwIP TCP/IP stack.\r
+ *\r
+ * Author: Adam Dunkels <adam@sics.se>\r
+ *\r
+ * $Id: httpd-fs.h,v 1.1 2006/06/07 09:13:08 adam Exp $\r
+ */\r
+#ifndef __HTTPD_FS_H__\r
+#define __HTTPD_FS_H__\r
+\r
+#define HTTPD_FS_STATISTICS 1\r
+\r
+struct httpd_fs_file {\r
+  char *data;\r
+  int len;\r
+};\r
+\r
+/* file must be allocated by caller and will be filled in\r
+   by the function. */\r
+int httpd_fs_open(const char *name, struct httpd_fs_file *file);\r
+\r
+#ifdef HTTPD_FS_STATISTICS\r
+#if HTTPD_FS_STATISTICS == 1\r
+u16_t httpd_fs_count(char *name);\r
+#endif /* HTTPD_FS_STATISTICS */\r
+#endif /* HTTPD_FS_STATISTICS */\r
+\r
+void httpd_fs_init(void);\r
+\r
+#endif /* __HTTPD_FS_H__ */\r
diff --git a/Demo/ARM7_LPC2368_Rowley/webserver/httpd-fs/404.html b/Demo/ARM7_LPC2368_Rowley/webserver/httpd-fs/404.html
new file mode 100644 (file)
index 0000000..43e7f4c
--- /dev/null
@@ -0,0 +1,8 @@
+<html>\r
+  <body bgcolor="white">\r
+    <center>\r
+      <h1>404 - file not found</h1>\r
+      <h3>Go <a href="/">here</a> instead.</h3>\r
+    </center>\r
+  </body>\r
+</html>
\ No newline at end of file
diff --git a/Demo/ARM7_LPC2368_Rowley/webserver/httpd-fs/index.html b/Demo/ARM7_LPC2368_Rowley/webserver/httpd-fs/index.html
new file mode 100644 (file)
index 0000000..1d3bbee
--- /dev/null
@@ -0,0 +1,13 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<html>\r
+  <head>\r
+    <title>FreeRTOS.org uIP WEB server demo</title>\r
+  </head>\r
+  <BODY onLoad="window.setTimeout(&quot;location.href='index.shtml'&quot;,100)"bgcolor="#CCCCff">\r
+<font face="arial">\r
+Loading index.shtml.  Click <a href="index.shtml">here</a> if not automatically redirected.\r
+</font>\r
+</font>\r
+</body>\r
+</html>\r
+\r
diff --git a/Demo/ARM7_LPC2368_Rowley/webserver/httpd-fs/index.shtml b/Demo/ARM7_LPC2368_Rowley/webserver/httpd-fs/index.shtml
new file mode 100644 (file)
index 0000000..0ce405b
--- /dev/null
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<html>\r
+  <head>\r
+    <title>FreeRTOS.org uIP WEB server demo</title>\r
+  </head>\r
+  <BODY onLoad="window.setTimeout(&quot;location.href='index.shtml'&quot;,2000)"bgcolor="#CCCCff">\r
+<font face="arial">\r
+<a href="index.shtml">RTOS Stats</a> <b>|</b> <a href="stats.shtml">TCP Stats</a> <b>|</b> <a href="tcp.shtml">Connections</a> <b>|</b> <a href="http://www.freertos.org/">FreeRTOS.org Homepage</a> <b>|</b> <a href="io.shtml">IO</a>\r
+<br><p>\r
+<hr>\r
+<br><p>\r
+<h2>Task statistics</h2>\r
+Page will refresh evey 2 seconds.<p>\r
+<font face="courier"><pre>Task          State  Priority  Stack #<br>************************************************<br>\r
+%! rtos-stats\r
+</pre></font>\r
+</font>\r
+</body>\r
+</html>\r
+\r
diff --git a/Demo/ARM7_LPC2368_Rowley/webserver/httpd-fs/io.shtml b/Demo/ARM7_LPC2368_Rowley/webserver/httpd-fs/io.shtml
new file mode 100644 (file)
index 0000000..0ffdbff
--- /dev/null
@@ -0,0 +1,28 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<html>\r
+  <head>\r
+    <title>FreeRTOS.org uIP WEB server demo</title>\r
+  </head>\r
+  <BODY bgcolor="#CCCCff">\r
+<font face="arial">\r
+<a href="index.shtml">RTOS Stats</a> <b>|</b> <a href="stats.shtml">TCP Stats</a> <b>|</b> <a href="tcp.shtml">Connections</a> <b>|</b> <a href="http://www.freertos.org/">FreeRTOS.org Homepage</a> <b>|</b> <a href="io.shtml">IO</a>\r
+<br><p>\r
+<hr>\r
+<b>LED and LCD IO</b><br>\r
+\r
+<p>\r
+\r
+Use the check boxes to select the LED's to turn on or off, enter text to display on the LCD, then click "Update IO".\r
+\r
+\r
+<p>\r
+<form name="aForm" action="/io.shtml" method="get">\r
+%! led-io\r
+<p>\r
+<input type="submit" value="Update IO">\r
+</form>\r
+<br><p>\r
+</font>\r
+</body>\r
+</html>\r
+\r
diff --git a/Demo/ARM7_LPC2368_Rowley/webserver/httpd-fs/stats.shtml b/Demo/ARM7_LPC2368_Rowley/webserver/httpd-fs/stats.shtml
new file mode 100644 (file)
index 0000000..d762f40
--- /dev/null
@@ -0,0 +1,41 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<html>\r
+  <head>\r
+    <title>FreeRTOS.org uIP WEB server demo</title>\r
+  </head>\r
+  <BODY bgcolor="#CCCCff">\r
+<font face="arial">\r
+<a href="index.shtml">RTOS Stats</a> <b>|</b> <a href="stats.shtml">TCP Stats</a> <b>|</b> <a href="tcp.shtml">Connections</a> <b>|</b> <a href="http://www.freertos.org/">FreeRTOS.org Homepage</a> <b>|</b> <a href="io.shtml">IO</a>\r
+<br><p>\r
+<hr>\r
+<br><p>\r
+<h2>Network statistics</h2>\r
+<table width="300" border="0">\r
+<tr><td align="left"><font face="courier"><pre>\r
+IP           Packets dropped\r
+             Packets received\r
+             Packets sent\r
+IP errors    IP version/header length\r
+             IP length, high byte\r
+             IP length, low byte\r
+             IP fragments\r
+             Header checksum\r
+             Wrong protocol\r
+ICMP        Packets dropped\r
+             Packets received\r
+             Packets sent\r
+             Type errors\r
+TCP          Packets dropped\r
+             Packets received\r
+             Packets sent\r
+             Checksum errors\r
+             Data packets without ACKs\r
+             Resets\r
+             Retransmissions\r
+            No connection avaliable\r
+            Connection attempts to closed ports\r
+</pre></font></td><td><pre>%! net-stats\r
+</pre></table>\r
+</font>\r
+</body>\r
+</html>\r
diff --git a/Demo/ARM7_LPC2368_Rowley/webserver/httpd-fs/tcp.shtml b/Demo/ARM7_LPC2368_Rowley/webserver/httpd-fs/tcp.shtml
new file mode 100644 (file)
index 0000000..654d61f
--- /dev/null
@@ -0,0 +1,21 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
+<html>\r
+  <head>\r
+    <title>FreeRTOS.org uIP WEB server demo</title>\r
+  </head>\r
+  <BODY bgcolor="#CCCCff">\r
+<font face="arial">\r
+<a href="index.shtml">RTOS Stats</a> <b>|</b> <a href="stats.shtml">TCP Stats</a> <b>|</b> <a href="tcp.shtml">Connections</a> <b>|</b> <a href="http://www.freertos.org/">FreeRTOS.org Homepage</a> <b>|</b> <a href="io.shtml">IO</a>\r
+<br><p>\r
+<hr>\r
+<br>\r
+<h2>Network connections</h2>\r
+<p>\r
+<table>\r
+<tr><th>Local</th><th>Remote</th><th>State</th><th>Retransmissions</th><th>Timer</th><th>Flags</th></tr>\r
+%! tcp-connections\r
+</pre></font>\r
+</font>\r
+</body>\r
+</html>\r
+\r
diff --git a/Demo/ARM7_LPC2368_Rowley/webserver/httpd-fsdata.c b/Demo/ARM7_LPC2368_Rowley/webserver/httpd-fsdata.c
new file mode 100644 (file)
index 0000000..ef52b3b
--- /dev/null
@@ -0,0 +1,470 @@
+static const unsigned char data_404_html[] = {
+       /* /404.html */
+       0x2f, 0x34, 0x30, 0x34, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0,
+       0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0xd, 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, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x63, 
+       0x65, 0x6e, 0x74, 0x65, 0x72, 0x3e, 0xd, 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, 0xd, 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, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 
+       0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x3e, 0xd, 0xa, 0x20, 
+       0x20, 0x3c, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0xd, 0xa, 
+       0x3c, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0};
+
+static const unsigned 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, 0xd, 0xa, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 
+       0xd, 0xa, 0x20, 0x20, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 
+       0xd, 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, 0xd, 0xa, 0x20, 0x20, 0x3c, 0x2f, 0x68, 
+       0x65, 0x61, 0x64, 0x3e, 0xd, 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, 0x62, 0x67, 0x63, 0x6f, 0x6c, 
+       0x6f, 0x72, 0x3d, 0x22, 0x23, 0x43, 0x43, 0x43, 0x43, 0x66, 
+       0x66, 0x22, 0x3e, 0xd, 0xa, 0x3c, 0x66, 0x6f, 0x6e, 0x74, 
+       0x20, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x61, 0x72, 0x69, 
+       0x61, 0x6c, 0x22, 0x3e, 0xd, 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, 0xd, 0xa, 0x3c, 
+       0x2f, 0x66, 0x6f, 0x6e, 0x74, 0x3e, 0xd, 0xa, 0x3c, 0x2f, 
+       0x66, 0x6f, 0x6e, 0x74, 0x3e, 0xd, 0xa, 0x3c, 0x2f, 0x62, 
+       0x6f, 0x64, 0x79, 0x3e, 0xd, 0xa, 0x3c, 0x2f, 0x68, 0x74, 
+       0x6d, 0x6c, 0x3e, 0xd, 0xa, 0xd, 0xa, 0};
+
+static const unsigned 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, 0xd, 0xa, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 
+       0xd, 0xa, 0x20, 0x20, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 
+       0xd, 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, 0xd, 0xa, 0x20, 0x20, 0x3c, 0x2f, 0x68, 
+       0x65, 0x61, 0x64, 0x3e, 0xd, 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, 0x62, 0x67, 0x63, 0x6f, 
+       0x6c, 0x6f, 0x72, 0x3d, 0x22, 0x23, 0x43, 0x43, 0x43, 0x43, 
+       0x66, 0x66, 0x22, 0x3e, 0xd, 0xa, 0x3c, 0x66, 0x6f, 0x6e, 
+       0x74, 0x20, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x61, 0x72, 
+       0x69, 0x61, 0x6c, 0x22, 0x3e, 0xd, 0xa, 0x3c, 0x61, 0x20, 
+       0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x69, 0x6e, 0x64, 0x65, 
+       0x78, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x52, 
+       0x54, 0x4f, 0x53, 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, 0xd, 0xa, 
+       0x3c, 0x62, 0x72, 0x3e, 0x3c, 0x70, 0x3e, 0xd, 0xa, 0x3c, 
+       0x68, 0x72, 0x3e, 0xd, 0xa, 0x3c, 0x62, 0x72, 0x3e, 0x3c, 
+       0x70, 0x3e, 0xd, 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, 0xd, 0xa, 
+       0x50, 0x61, 0x67, 0x65, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 
+       0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x20, 0x65, 0x76, 
+       0x65, 0x79, 0x20, 0x32, 0x20, 0x73, 0x65, 0x63, 0x6f, 0x6e, 
+       0x64, 0x73, 0x2e, 0x3c, 0x70, 0x3e, 0xd, 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, 0xd, 0xa, 
+       0x25, 0x21, 0x20, 0x72, 0x74, 0x6f, 0x73, 0x2d, 0x73, 0x74, 
+       0x61, 0x74, 0x73, 0xd, 0xa, 0x3c, 0x2f, 0x70, 0x72, 0x65, 
+       0x3e, 0x3c, 0x2f, 0x66, 0x6f, 0x6e, 0x74, 0x3e, 0xd, 0xa, 
+       0x3c, 0x2f, 0x66, 0x6f, 0x6e, 0x74, 0x3e, 0xd, 0xa, 0x3c, 
+       0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0xd, 0xa, 0x3c, 0x2f, 
+       0x68, 0x74, 0x6d, 0x6c, 0x3e, 0xd, 0xa, 0xd, 0xa, 0};
+
+static const unsigned 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, 0xd, 0xa, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 
+       0xd, 0xa, 0x20, 0x20, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 
+       0xd, 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, 0xd, 0xa, 0x20, 0x20, 0x3c, 0x2f, 0x68, 
+       0x65, 0x61, 0x64, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x3c, 0x42, 
+       0x4f, 0x44, 0x59, 0x20, 0x62, 0x67, 0x63, 0x6f, 0x6c, 0x6f, 
+       0x72, 0x3d, 0x22, 0x23, 0x43, 0x43, 0x43, 0x43, 0x66, 0x66, 
+       0x22, 0x3e, 0xd, 0xa, 0x3c, 0x66, 0x6f, 0x6e, 0x74, 0x20, 
+       0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x61, 0x72, 0x69, 0x61, 
+       0x6c, 0x22, 0x3e, 0xd, 0xa, 0x3c, 0x61, 0x20, 0x68, 0x72, 
+       0x65, 0x66, 0x3d, 0x22, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 
+       0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x52, 0x54, 0x4f, 
+       0x53, 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, 0xd, 0xa, 0x3c, 0x62, 
+       0x72, 0x3e, 0x3c, 0x70, 0x3e, 0xd, 0xa, 0x3c, 0x68, 0x72, 
+       0x3e, 0xd, 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, 0xd, 0xa, 
+       0xd, 0xa, 0x3c, 0x70, 0x3e, 0xd, 0xa, 0xd, 0xa, 0x55, 
+       0x73, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x68, 0x65, 
+       0x63, 0x6b, 0x20, 0x62, 0x6f, 0x78, 0x65, 0x73, 0x20, 0x74, 
+       0x6f, 0x20, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x20, 0x74, 
+       0x68, 0x65, 0x20, 0x4c, 0x45, 0x44, 0x27, 0x73, 0x20, 0x74, 
+       0x6f, 0x20, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6f, 0x6e, 0x20, 
+       0x6f, 0x72, 0x20, 0x6f, 0x66, 0x66, 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, 0x4c, 0x43, 0x44, 
+       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, 0xd, 0xa, 0xd, 0xa, 0xd, 
+       0xa, 0x3c, 0x70, 0x3e, 0xd, 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, 0xd, 0xa, 0x25, 
+       0x21, 0x20, 0x6c, 0x65, 0x64, 0x2d, 0x69, 0x6f, 0xd, 0xa, 
+       0x3c, 0x70, 0x3e, 0xd, 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, 0xd, 0xa, 0x3c, 0x2f, 0x66, 0x6f, 
+       0x72, 0x6d, 0x3e, 0xd, 0xa, 0x3c, 0x62, 0x72, 0x3e, 0x3c, 
+       0x70, 0x3e, 0xd, 0xa, 0x3c, 0x2f, 0x66, 0x6f, 0x6e, 0x74, 
+       0x3e, 0xd, 0xa, 0x3c, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, 
+       0xd, 0xa, 0x3c, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0xd, 
+       0xa, 0xd, 0xa, 0};
+
+static const unsigned 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, 0xd, 0xa, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 
+       0xd, 0xa, 0x20, 0x20, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 
+       0xd, 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, 0xd, 0xa, 0x20, 0x20, 0x3c, 0x2f, 0x68, 
+       0x65, 0x61, 0x64, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x3c, 0x42, 
+       0x4f, 0x44, 0x59, 0x20, 0x62, 0x67, 0x63, 0x6f, 0x6c, 0x6f, 
+       0x72, 0x3d, 0x22, 0x23, 0x43, 0x43, 0x43, 0x43, 0x66, 0x66, 
+       0x22, 0x3e, 0xd, 0xa, 0x3c, 0x66, 0x6f, 0x6e, 0x74, 0x20, 
+       0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x61, 0x72, 0x69, 0x61, 
+       0x6c, 0x22, 0x3e, 0xd, 0xa, 0x3c, 0x61, 0x20, 0x68, 0x72, 
+       0x65, 0x66, 0x3d, 0x22, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 
+       0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x52, 0x54, 0x4f, 
+       0x53, 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, 0xd, 0xa, 0x3c, 0x62, 
+       0x72, 0x3e, 0x3c, 0x70, 0x3e, 0xd, 0xa, 0x3c, 0x68, 0x72, 
+       0x3e, 0xd, 0xa, 0x3c, 0x62, 0x72, 0x3e, 0x3c, 0x70, 0x3e, 
+       0xd, 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, 0xd, 
+       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, 0xd, 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, 
+       0xd, 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, 
+       0xd, 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, 0xd, 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, 0xd, 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, 0xd, 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, 0xd, 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, 0xd, 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, 0xd, 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, 0xd, 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, 0xd, 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, 0xd, 
+       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, 
+       0xd, 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, 0xd, 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, 0xd, 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, 0xd, 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, 0xd, 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, 0xd, 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, 0xd, 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, 0xd, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
+       0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x52, 0x65, 0x73, 0x65, 
+       0x74, 0x73, 0xd, 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, 0xd, 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, 0xd, 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, 0xd, 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, 0xd, 0xa, 0x3c, 
+       0x2f, 0x70, 0x72, 0x65, 0x3e, 0x3c, 0x2f, 0x74, 0x61, 0x62, 
+       0x6c, 0x65, 0x3e, 0xd, 0xa, 0x3c, 0x2f, 0x66, 0x6f, 0x6e, 
+       0x74, 0x3e, 0xd, 0xa, 0x3c, 0x2f, 0x62, 0x6f, 0x64, 0x79, 
+       0x3e, 0xd, 0xa, 0x3c, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 
+       0xd, 0xa, 0};
+
+static const unsigned 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, 0xd, 0xa, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 
+       0xd, 0xa, 0x20, 0x20, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 
+       0xd, 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, 0xd, 0xa, 0x20, 0x20, 0x3c, 0x2f, 0x68, 
+       0x65, 0x61, 0x64, 0x3e, 0xd, 0xa, 0x20, 0x20, 0x3c, 0x42, 
+       0x4f, 0x44, 0x59, 0x20, 0x62, 0x67, 0x63, 0x6f, 0x6c, 0x6f, 
+       0x72, 0x3d, 0x22, 0x23, 0x43, 0x43, 0x43, 0x43, 0x66, 0x66, 
+       0x22, 0x3e, 0xd, 0xa, 0x3c, 0x66, 0x6f, 0x6e, 0x74, 0x20, 
+       0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x61, 0x72, 0x69, 0x61, 
+       0x6c, 0x22, 0x3e, 0xd, 0xa, 0x3c, 0x61, 0x20, 0x68, 0x72, 
+       0x65, 0x66, 0x3d, 0x22, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 
+       0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x52, 0x54, 0x4f, 
+       0x53, 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, 0xd, 0xa, 0x3c, 0x62, 
+       0x72, 0x3e, 0x3c, 0x70, 0x3e, 0xd, 0xa, 0x3c, 0x68, 0x72, 
+       0x3e, 0xd, 0xa, 0x3c, 0x62, 0x72, 0x3e, 0xd, 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, 0xd, 0xa, 0x3c, 
+       0x70, 0x3e, 0xd, 0xa, 0x3c, 0x74, 0x61, 0x62, 0x6c, 0x65, 
+       0x3e, 0xd, 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, 0xd, 0xa, 0x25, 
+       0x21, 0x20, 0x74, 0x63, 0x70, 0x2d, 0x63, 0x6f, 0x6e, 0x6e, 
+       0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0xd, 0xa, 0x3c, 
+       0x2f, 0x70, 0x72, 0x65, 0x3e, 0x3c, 0x2f, 0x66, 0x6f, 0x6e, 
+       0x74, 0x3e, 0xd, 0xa, 0x3c, 0x2f, 0x66, 0x6f, 0x6e, 0x74, 
+       0x3e, 0xd, 0xa, 0x3c, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, 
+       0xd, 0xa, 0x3c, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0xd, 
+       0xa, 0xd, 0xa, 0};
+
+const struct httpd_fsdata_file file_404_html[] = {{NULL, data_404_html, data_404_html + 10, sizeof(data_404_html) - 10}};
+
+const struct httpd_fsdata_file file_index_html[] = {{file_404_html, data_index_html, data_index_html + 12, sizeof(data_index_html) - 12}};
+
+const struct httpd_fsdata_file file_index_shtml[] = {{file_index_html, data_index_shtml, data_index_shtml + 13, sizeof(data_index_shtml) - 13}};
+
+const struct httpd_fsdata_file file_io_shtml[] = {{file_index_shtml, data_io_shtml, data_io_shtml + 10, sizeof(data_io_shtml) - 10}};
+
+const struct httpd_fsdata_file file_stats_shtml[] = {{file_io_shtml, data_stats_shtml, data_stats_shtml + 13, sizeof(data_stats_shtml) - 13}};
+
+const struct httpd_fsdata_file file_tcp_shtml[] = {{file_stats_shtml, data_tcp_shtml, data_tcp_shtml + 11, sizeof(data_tcp_shtml) - 11}};
+
+#define HTTPD_FS_ROOT file_tcp_shtml
+
+#define HTTPD_FS_NUMFILES 6
diff --git a/Demo/ARM7_LPC2368_Rowley/webserver/httpd-fsdata.h b/Demo/ARM7_LPC2368_Rowley/webserver/httpd-fsdata.h
new file mode 100644 (file)
index 0000000..52d35c2
--- /dev/null
@@ -0,0 +1,64 @@
+/*\r
+ * Copyright (c) 2001, Swedish Institute of Computer Science.\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions\r
+ * are met:\r
+ * 1. Redistributions of source code must retain the above copyright\r
+ *    notice, this list of conditions and the following disclaimer.\r
+ * 2. Redistributions in binary form must reproduce the above copyright\r
+ *    notice, this list of conditions and the following disclaimer in the\r
+ *    documentation and/or other materials provided with the distribution.\r
+ * 3. Neither the name of the Institute nor the names of its contributors\r
+ *    may be used to endorse or promote products derived from this software\r
+ *    without specific prior written permission.\r
+ *\r
+ * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND\r
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE\r
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\r
+ * SUCH DAMAGE.\r
+ *\r
+ * This file is part of the lwIP TCP/IP stack.\r
+ *\r
+ * Author: Adam Dunkels <adam@sics.se>\r
+ *\r
+ * $Id: httpd-fsdata.h,v 1.1 2006/06/07 09:13:08 adam Exp $\r
+ */\r
+#ifndef __HTTPD_FSDATA_H__\r
+#define __HTTPD_FSDATA_H__\r
+\r
+#include "uip.h"\r
+\r
+struct httpd_fsdata_file {\r
+  const struct httpd_fsdata_file *next;\r
+  const char *name;\r
+  const char *data;\r
+  const int len;\r
+#ifdef HTTPD_FS_STATISTICS\r
+#if HTTPD_FS_STATISTICS == 1\r
+  u16_t count;\r
+#endif /* HTTPD_FS_STATISTICS */\r
+#endif /* HTTPD_FS_STATISTICS */\r
+};\r
+\r
+struct httpd_fsdata_file_noconst {\r
+  struct httpd_fsdata_file *next;\r
+  char *name;\r
+  char *data;\r
+  int len;\r
+#ifdef HTTPD_FS_STATISTICS\r
+#if HTTPD_FS_STATISTICS == 1\r
+  u16_t count;\r
+#endif /* HTTPD_FS_STATISTICS */\r
+#endif /* HTTPD_FS_STATISTICS */\r
+};\r
+\r
+#endif /* __HTTPD_FSDATA_H__ */\r
diff --git a/Demo/ARM7_LPC2368_Rowley/webserver/httpd.c b/Demo/ARM7_LPC2368_Rowley/webserver/httpd.c
new file mode 100644 (file)
index 0000000..644cf16
--- /dev/null
@@ -0,0 +1,346 @@
+/**\r
+ * \addtogroup apps\r
+ * @{\r
+ */\r
+\r
+/**\r
+ * \defgroup httpd Web server\r
+ * @{\r
+ * The uIP web server is a very simplistic implementation of an HTTP\r
+ * server. It can serve web pages and files from a read-only ROM\r
+ * filesystem, and provides a very small scripting language.\r
+\r
+ */\r
+\r
+/**\r
+ * \file\r
+ *         Web server\r
+ * \author\r
+ *         Adam Dunkels <adam@sics.se>\r
+ */\r
+\r
+\r
+/*\r
+ * Copyright (c) 2004, Adam Dunkels.\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions\r
+ * are met:\r
+ * 1. Redistributions of source code must retain the above copyright\r
+ *    notice, this list of conditions and the following disclaimer.\r
+ * 2. Redistributions in binary form must reproduce the above copyright\r
+ *    notice, this list of conditions and the following disclaimer in the\r
+ *    documentation and/or other materials provided with the distribution.\r
+ * 3. Neither the name of the Institute nor the names of its contributors\r
+ *    may be used to endorse or promote products derived from this software\r
+ *    without specific prior written permission.\r
+ *\r
+ * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND\r
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE\r
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\r
+ * SUCH DAMAGE.\r
+ *\r
+ * This file is part of the uIP TCP/IP stack.\r
+ *\r
+ * Author: Adam Dunkels <adam@sics.se>\r
+ *\r
+ * $Id: httpd.c,v 1.2 2006/06/11 21:46:38 adam Exp $\r
+ */\r
+\r
+#include "uip.h"\r
+#include "httpd.h"\r
+#include "httpd-fs.h"\r
+#include "httpd-cgi.h"\r
+#include "http-strings.h"\r
+\r
+#include <string.h>\r
+\r
+#define STATE_WAITING 0\r
+#define STATE_OUTPUT  1\r
+\r
+#define ISO_nl      0x0a\r
+#define ISO_space   0x20\r
+#define ISO_bang    0x21\r
+#define ISO_percent 0x25\r
+#define ISO_period  0x2e\r
+#define ISO_slash   0x2f\r
+#define ISO_colon   0x3a\r
+\r
+\r
+/*---------------------------------------------------------------------------*/\r
+static unsigned short\r
+generate_part_of_file(void *state)\r
+{\r
+  struct httpd_state *s = (struct httpd_state *)state;\r
+\r
+  if(s->file.len > uip_mss()) {\r
+    s->len = uip_mss();\r
+  } else {\r
+    s->len = s->file.len;\r
+  }\r
+  memcpy(uip_appdata, s->file.data, s->len);\r
+  \r
+  return s->len;\r
+}\r
+/*---------------------------------------------------------------------------*/\r
+static\r
+PT_THREAD(send_file(struct httpd_state *s))\r
+{\r
+  PSOCK_BEGIN(&s->sout);\r
+  \r
+  do {\r
+    PSOCK_GENERATOR_SEND(&s->sout, generate_part_of_file, s);\r
+    s->file.len -= s->len;\r
+    s->file.data += s->len;\r
+  } while(s->file.len > 0);\r
+      \r
+  PSOCK_END(&s->sout);\r
+}\r
+/*---------------------------------------------------------------------------*/\r
+static\r
+PT_THREAD(send_part_of_file(struct httpd_state *s))\r
+{\r
+  PSOCK_BEGIN(&s->sout);\r
+\r
+  PSOCK_SEND(&s->sout, s->file.data, s->len);\r
+  \r
+  PSOCK_END(&s->sout);\r
+}\r
+/*---------------------------------------------------------------------------*/\r
+static void\r
+next_scriptstate(struct httpd_state *s)\r
+{\r
+  char *p;\r
+  p = strchr(s->scriptptr, ISO_nl) + 1;\r
+  s->scriptlen -= (unsigned short)(p - s->scriptptr);\r
+  s->scriptptr = p;\r
+}\r
+/*---------------------------------------------------------------------------*/\r
+static\r
+PT_THREAD(handle_script(struct httpd_state *s))\r
+{\r
+  char *ptr;\r
+  \r
+  PT_BEGIN(&s->scriptpt);\r
+\r
+\r
+  while(s->file.len > 0) {\r
+\r
+    /* Check if we should start executing a script. */\r
+    if(*s->file.data == ISO_percent &&\r
+       *(s->file.data + 1) == ISO_bang) {\r
+      s->scriptptr = s->file.data + 3;\r
+      s->scriptlen = s->file.len - 3;\r
+      if(*(s->scriptptr - 1) == ISO_colon) {\r
+       httpd_fs_open(s->scriptptr + 1, &s->file);\r
+       PT_WAIT_THREAD(&s->scriptpt, send_file(s));\r
+      } else {\r
+       PT_WAIT_THREAD(&s->scriptpt,\r
+                      httpd_cgi(s->scriptptr)(s, s->scriptptr));\r
+      }\r
+      next_scriptstate(s);\r
+      \r
+      /* The script is over, so we reset the pointers and continue\r
+        sending the rest of the file. */\r
+      s->file.data = s->scriptptr;\r
+      s->file.len = s->scriptlen;\r
+    } else {\r
+      /* See if we find the start of script marker in the block of HTML\r
+        to be sent. */\r
+\r
+      if(s->file.len > uip_mss()) {\r
+       s->len = uip_mss();\r
+      } else {\r
+       s->len = s->file.len;\r
+      }\r
+\r
+      if(*s->file.data == ISO_percent) {\r
+       ptr = strchr(s->file.data + 1, ISO_percent);\r
+      } else {\r
+       ptr = strchr(s->file.data, ISO_percent);\r
+      }\r
+      if(ptr != NULL &&\r
+        ptr != s->file.data) {\r
+       s->len = (int)(ptr - s->file.data);\r
+       if(s->len >= uip_mss()) {\r
+         s->len = uip_mss();\r
+       }\r
+      }\r
+      PT_WAIT_THREAD(&s->scriptpt, send_part_of_file(s));\r
+      s->file.data += s->len;\r
+      s->file.len -= s->len;\r
+      \r
+    }\r
+  }\r
+  \r
+  PT_END(&s->scriptpt);\r
+}\r
+/*---------------------------------------------------------------------------*/\r
+static\r
+PT_THREAD(send_headers(struct httpd_state *s, const char *statushdr))\r
+{\r
+  char *ptr;\r
+\r
+  PSOCK_BEGIN(&s->sout);\r
+\r
+  PSOCK_SEND_STR(&s->sout, statushdr);\r
+\r
+  ptr = strrchr(s->filename, ISO_period);\r
+  if(ptr == NULL) {\r
+    PSOCK_SEND_STR(&s->sout, http_content_type_binary);\r
+  } else if(strncmp(http_html, ptr, 5) == 0 ||\r
+           strncmp(http_shtml, ptr, 6) == 0) {\r
+    PSOCK_SEND_STR(&s->sout, http_content_type_html);\r
+  } else if(strncmp(http_css, ptr, 4) == 0) {\r
+    PSOCK_SEND_STR(&s->sout, http_content_type_css);\r
+  } else if(strncmp(http_png, ptr, 4) == 0) {\r
+    PSOCK_SEND_STR(&s->sout, http_content_type_png);\r
+  } else if(strncmp(http_gif, ptr, 4) == 0) {\r
+    PSOCK_SEND_STR(&s->sout, http_content_type_gif);\r
+  } else if(strncmp(http_jpg, ptr, 4) == 0) {\r
+    PSOCK_SEND_STR(&s->sout, http_content_type_jpg);\r
+  } else {\r
+    PSOCK_SEND_STR(&s->sout, http_content_type_plain);\r
+  }\r
+  PSOCK_END(&s->sout);\r
+}\r
+/*---------------------------------------------------------------------------*/\r
+static\r
+PT_THREAD(handle_output(struct httpd_state *s))\r
+{\r
+  char *ptr;\r
+  \r
+  PT_BEGIN(&s->outputpt);\r
\r
+  if(!httpd_fs_open(s->filename, &s->file)) {\r
+    httpd_fs_open(http_404_html, &s->file);\r
+    strcpy(s->filename, http_404_html);\r
+    PT_WAIT_THREAD(&s->outputpt,\r
+                  send_headers(s,\r
+                  http_header_404));\r
+    PT_WAIT_THREAD(&s->outputpt,\r
+                  send_file(s));\r
+  } else {\r
+    PT_WAIT_THREAD(&s->outputpt,\r
+                  send_headers(s,\r
+                  http_header_200));\r
+    ptr = strchr(s->filename, ISO_period);\r
+    if(ptr != NULL && strncmp(ptr, http_shtml, 6) == 0) {\r
+      PT_INIT(&s->scriptpt);\r
+      PT_WAIT_THREAD(&s->outputpt, handle_script(s));\r
+    } else {\r
+      PT_WAIT_THREAD(&s->outputpt,\r
+                    send_file(s));\r
+    }\r
+  }\r
+  PSOCK_CLOSE(&s->sout);\r
+  PT_END(&s->outputpt);\r
+}\r
+/*---------------------------------------------------------------------------*/\r
+static\r
+PT_THREAD(handle_input(struct httpd_state *s))\r
+{\r
+  PSOCK_BEGIN(&s->sin);\r
+\r
+  PSOCK_READTO(&s->sin, ISO_space);\r
+\r
+  \r
+  if(strncmp(s->inputbuf, http_get, 4) != 0) {\r
+    PSOCK_CLOSE_EXIT(&s->sin);\r
+  }\r
+  PSOCK_READTO(&s->sin, ISO_space);\r
+\r
+  if(s->inputbuf[0] != ISO_slash) {\r
+    PSOCK_CLOSE_EXIT(&s->sin);\r
+  }\r
+\r
+  if(s->inputbuf[1] == ISO_space) {\r
+    strncpy(s->filename, http_index_html, sizeof(s->filename));\r
+  } else {\r
+\r
+    s->inputbuf[PSOCK_DATALEN(&s->sin) - 1] = 0;\r
+\r
+    /* Process any form input being sent to the server. */\r
+    {\r
+        extern void vApplicationProcessFormInput( char *pcInputString, long xInputLength );\r
+        vApplicationProcessFormInput( s->inputbuf, PSOCK_DATALEN(&s->sin) );\r
+    }\r
+\r
+    strncpy(s->filename, &s->inputbuf[0], sizeof(s->filename));\r
+  }\r
+\r
+  /*  httpd_log_file(uip_conn->ripaddr, s->filename);*/\r
+  \r
+  s->state = STATE_OUTPUT;\r
+\r
+  while(1) {\r
+    PSOCK_READTO(&s->sin, ISO_nl);\r
+\r
+    if(strncmp(s->inputbuf, http_referer, 8) == 0) {\r
+      s->inputbuf[PSOCK_DATALEN(&s->sin) - 2] = 0;\r
+      /*      httpd_log(&s->inputbuf[9]);*/\r
+    }\r
+  }\r
+  \r
+  PSOCK_END(&s->sin);\r
+}\r
+/*---------------------------------------------------------------------------*/\r
+static void\r
+handle_connection(struct httpd_state *s)\r
+{\r
+  handle_input(s);\r
+  if(s->state == STATE_OUTPUT) {\r
+    handle_output(s);\r
+  }\r
+}\r
+/*---------------------------------------------------------------------------*/\r
+void\r
+httpd_appcall(void)\r
+{\r
+  struct httpd_state *s = (struct httpd_state *)&(uip_conn->appstate);\r
+\r
+  if(uip_closed() || uip_aborted() || uip_timedout()) {\r
+  } else if(uip_connected()) {\r
+    PSOCK_INIT(&s->sin, s->inputbuf, sizeof(s->inputbuf) - 1);\r
+    PSOCK_INIT(&s->sout, s->inputbuf, sizeof(s->inputbuf) - 1);\r
+    PT_INIT(&s->outputpt);\r
+    s->state = STATE_WAITING;\r
+    /*    timer_set(&s->timer, CLOCK_SECOND * 100);*/\r
+    s->timer = 0;\r
+    handle_connection(s);\r
+  } else if(s != NULL) {\r
+    if(uip_poll()) {\r
+      ++s->timer;\r
+      if(s->timer >= 20) {\r
+       uip_abort();\r
+      }\r
+    } else {\r
+      s->timer = 0;\r
+    }\r
+    handle_connection(s);\r
+  } else {\r
+    uip_abort();\r
+  }\r
+}\r
+/*---------------------------------------------------------------------------*/\r
+/**\r
+ * \brief      Initialize the web server\r
+ *\r
+ *             This function initializes the web server and should be\r
+ *             called at system boot-up.\r
+ */\r
+void\r
+httpd_init(void)\r
+{\r
+  uip_listen(HTONS(80));\r
+}\r
+/*---------------------------------------------------------------------------*/\r
+/** @} */\r
diff --git a/Demo/ARM7_LPC2368_Rowley/webserver/httpd.h b/Demo/ARM7_LPC2368_Rowley/webserver/httpd.h
new file mode 100644 (file)
index 0000000..7f7a666
--- /dev/null
@@ -0,0 +1,62 @@
+/*\r
+ * Copyright (c) 2001-2005, Adam Dunkels.\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions\r
+ * are met:\r
+ * 1. Redistributions of source code must retain the above copyright\r
+ *    notice, this list of conditions and the following disclaimer.\r
+ * 2. Redistributions in binary form must reproduce the above copyright\r
+ *    notice, this list of conditions and the following disclaimer in the\r
+ *    documentation and/or other materials provided with the distribution.\r
+ * 3. The name of the author may not be used to endorse or promote\r
+ *    products derived from this software without specific prior\r
+ *    written permission.\r
+ *\r
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\r
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\r
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE\r
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ *\r
+ * This file is part of the uIP TCP/IP stack.\r
+ *\r
+ * $Id: httpd.h,v 1.2 2006/06/11 21:46:38 adam Exp $\r
+ *\r
+ */\r
+\r
+#ifndef __HTTPD_H__\r
+#define __HTTPD_H__\r
+\r
+#include "psock.h"\r
+#include "httpd-fs.h"\r
+\r
+struct httpd_state {\r
+  unsigned char timer;\r
+  struct psock sin, sout;\r
+  struct pt outputpt, scriptpt;\r
+  char inputbuf[50];\r
+  char filename[20];\r
+  char state;\r
+  struct httpd_fs_file file;\r
+  int len;\r
+  char *scriptptr;\r
+  int scriptlen;\r
+  \r
+  unsigned short count;\r
+};\r
+\r
+void httpd_init(void);\r
+void httpd_appcall(void);\r
+\r
+void httpd_log(char *msg);\r
+void httpd_log_file(u16_t *requester, char *file);\r
+\r
+#endif /* __HTTPD_H__ */\r
diff --git a/Demo/ARM7_LPC2368_Rowley/webserver/makefsdata b/Demo/ARM7_LPC2368_Rowley/webserver/makefsdata
new file mode 100644 (file)
index 0000000..8d2715a
--- /dev/null
@@ -0,0 +1,78 @@
+#!/usr/bin/perl\r
+\r
+open(OUTPUT, "> httpd-fsdata.c");\r
+\r
+chdir("httpd-fs");\r
+\r
+opendir(DIR, ".");\r
+@files =  grep { !/^\./ && !/(CVS|~)/ } readdir(DIR);\r
+closedir(DIR);\r
+\r
+foreach $file (@files) {  \r
+   \r
+    if(-d $file && $file !~ /^\./) {\r
+       print "Processing directory $file\n";\r
+       opendir(DIR, $file);\r
+       @newfiles =  grep { !/^\./ && !/(CVS|~)/ } readdir(DIR);\r
+       closedir(DIR);\r
+       printf "Adding files @newfiles\n";\r
+       @files = (@files, map { $_ = "$file/$_" } @newfiles);\r
+       next;\r
+    }\r
+}\r
+\r
+foreach $file (@files) {\r
+    if(-f $file) {\r
+       \r
+       print "Adding file $file\n";\r
+       \r
+       open(FILE, $file) || die "Could not open file $file\n";\r
+\r
+       $file =~ s-^-/-;\r
+       $fvar = $file;\r
+       $fvar =~ s-/-_-g;\r
+       $fvar =~ s-\.-_-g;\r
+       # for AVR, add PROGMEM here\r
+       print(OUTPUT "static const unsigned char data".$fvar."[] = {\n");\r
+       print(OUTPUT "\t/* $file */\n\t");\r
+       for($j = 0; $j < length($file); $j++) {\r
+           printf(OUTPUT "%#02x, ", unpack("C", substr($file, $j, 1)));\r
+       }\r
+       printf(OUTPUT "0,\n");\r
+       \r
+       \r
+       $i = 0;        \r
+       while(read(FILE, $data, 1)) {\r
+           if($i == 0) {\r
+               print(OUTPUT "\t");\r
+           }\r
+           printf(OUTPUT "%#02x, ", unpack("C", $data));\r
+           $i++;\r
+           if($i == 10) {\r
+               print(OUTPUT "\n");\r
+               $i = 0;\r
+           }\r
+       }\r
+       print(OUTPUT "0};\n\n");\r
+       close(FILE);\r
+       push(@fvars, $fvar);\r
+       push(@pfiles, $file);\r
+    }\r
+}\r
+\r
+for($i = 0; $i < @fvars; $i++) {\r
+    $file = $pfiles[$i];\r
+    $fvar = $fvars[$i];\r
+\r
+    if($i == 0) {\r
+        $prevfile = "NULL";\r
+    } else {\r
+        $prevfile = "file" . $fvars[$i - 1];\r
+    }\r
+    print(OUTPUT "const struct httpd_fsdata_file file".$fvar."[] = {{$prevfile, data$fvar, ");\r
+    print(OUTPUT "data$fvar + ". (length($file) + 1) .", ");\r
+    print(OUTPUT "sizeof(data$fvar) - ". (length($file) + 1) ."}};\n\n");\r
+}\r
+\r
+print(OUTPUT "#define HTTPD_FS_ROOT file$fvars[$i - 1]\n\n");\r
+print(OUTPUT "#define HTTPD_FS_NUMFILES $i\n");\r
diff --git a/Demo/ARM7_LPC2368_Rowley/webserver/makestrings b/Demo/ARM7_LPC2368_Rowley/webserver/makestrings
new file mode 100644 (file)
index 0000000..8a13c6d
--- /dev/null
@@ -0,0 +1,40 @@
+#!/usr/bin/perl\r
+\r
+\r
+sub stringify {\r
+  my $name = shift(@_);\r
+  open(OUTPUTC, "> $name.c");\r
+  open(OUTPUTH, "> $name.h");\r
+  \r
+  open(FILE, "$name");\r
+  \r
+  while(<FILE>) {\r
+    if(/(.+) "(.+)"/) {\r
+      $var = $1;\r
+      $data = $2;\r
+      \r
+      $datan = $data;\r
+      $datan =~ s/\\r/\r/g;\r
+      $datan =~ s/\\n/\n/g;\r
+      $datan =~ s/\\01/\01/g;      \r
+      $datan =~ s/\\0/\0/g;\r
+      \r
+      printf(OUTPUTC "const char $var\[%d] = \n", length($datan) + 1);\r
+      printf(OUTPUTC "/* \"$data\" */\n");\r
+      printf(OUTPUTC "{");\r
+      for($j = 0; $j < length($datan); $j++) {\r
+       printf(OUTPUTC "%#02x, ", unpack("C", substr($datan, $j, 1)));\r
+      }\r
+      printf(OUTPUTC "};\n");\r
+      \r
+      printf(OUTPUTH "extern const char $var\[%d];\n", length($datan) + 1);\r
+      \r
+    }\r
+  }\r
+  close(OUTPUTC);\r
+  close(OUTPUTH);\r
+}\r
+stringify("http-strings");\r
+\r
+exit 0;\r
+\r
diff --git a/Demo/ARM7_LPC2368_Rowley/webserver/uIP_Task.c b/Demo/ARM7_LPC2368_Rowley/webserver/uIP_Task.c
new file mode 100644 (file)
index 0000000..10c8851
--- /dev/null
@@ -0,0 +1,320 @@
+/*\r
+       FreeRTOS.org V4.2.1 - Copyright (C) 2003-2007 Richard Barry.\r
+\r
+       This file is part of the FreeRTOS.org distribution.\r
+\r
+       FreeRTOS.org is free software; you can redistribute it and/or modify\r
+       it under the terms of the GNU General Public License as published by\r
+       the Free Software Foundation; either version 2 of the License, or\r
+       (at your option) any later version.\r
+\r
+       FreeRTOS.org is distributed in the hope that it will be useful,\r
+       but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+       GNU General Public License for more details.\r
+\r
+       You should have received a copy of the GNU General Public License\r
+       along with FreeRTOS.org; if not, write to the Free Software\r
+       Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\r
+\r
+       A special exception to the GPL can be applied should you wish to distribute\r
+       a combined work that includes FreeRTOS.org, without being obliged to provide\r
+       the source code for any proprietary components.  See the licensing section\r
+       of http://www.FreeRTOS.org for full details of how and when the exception\r
+       can be applied.\r
+\r
+       ***************************************************************************\r
+       See http://www.FreeRTOS.org for documentation, latest information, license\r
+       and contact details.  Please ensure to read the configuration and relevant\r
+       port sections of the online documentation.\r
+       ***************************************************************************\r
+*/\r
+/* Standard includes. */\r
+#include <string.h>\r
+\r
+/* Scheduler includes. */\r
+#include "FreeRTOS.h"\r
+#include "task.h"\r
+#include "semphr.h"\r
+\r
+/* uip includes. */\r
+#include "uip.h"\r
+#include "uip_arp.h"\r
+#include "httpd.h"\r
+#include "timer.h"\r
+#include "clock-arch.h"\r
+\r
+/* Demo includes. */\r
+#include "emac.h"\r
+#include "partest.h"\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+/* MAC address configuration. */\r
+#define uipMAC_ADDR0   0x00\r
+#define uipMAC_ADDR1   0x12\r
+#define uipMAC_ADDR2   0x13\r
+#define uipMAC_ADDR3   0x10\r
+#define uipMAC_ADDR4   0x15\r
+#define uipMAC_ADDR5   0x11\r
+\r
+/* IP address configuration. */\r
+#define uipIP_ADDR0            172\r
+#define uipIP_ADDR1            25\r
+#define uipIP_ADDR2            218\r
+#define uipIP_ADDR3            9       \r
+\r
+/* How long to wait before attempting to connect the MAC again. */\r
+#define uipINIT_WAIT    100\r
+\r
+/* Shortcut to the header within the Rx buffer. */\r
+#define xHeader ((struct uip_eth_hdr *) &uip_buf[ 0 ])\r
+\r
+/* Standard constant. */\r
+#define uipTOTAL_FRAME_HEADER_SIZE     54\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+/* \r
+ * Send the uIP buffer to the MAC. \r
+ */\r
+static void prvENET_Send(void);\r
+\r
+/*\r
+ * Setup the MAC address in the MAC itself, and in the uIP stack.\r
+ */\r
+static void prvSetMACAddress( void );\r
+\r
+/*\r
+ * Port functions required by the uIP stack.\r
+ */\r
+void clock_init( void );\r
+clock_time_t clock_time( void );\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+/* The semaphore used by the ISR to wake the uIP task. */\r
+extern xSemaphoreHandle xEMACSemaphore;\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+void clock_init(void)\r
+{\r
+       /* This is done when the scheduler starts. */\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+clock_time_t clock_time( void )\r
+{\r
+       return xTaskGetTickCount();\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+void vuIP_Task( void *pvParameters )\r
+{\r
+portBASE_TYPE i;\r
+uip_ipaddr_t xIPAddr;\r
+struct timer periodic_timer, arp_timer;\r
+extern void ( vEMAC_ISR )( void );\r
+\r
+       /* Create the semaphore used by the ISR to wake this task. */\r
+       vSemaphoreCreateBinary( xEMACSemaphore );\r
+       \r
+       /* Initialise the uIP stack. */\r
+       timer_set( &periodic_timer, configTICK_RATE_HZ / 2 );\r
+       timer_set( &arp_timer, configTICK_RATE_HZ * 10 );\r
+       uip_init();\r
+       uip_ipaddr( xIPAddr, uipIP_ADDR0, uipIP_ADDR1, uipIP_ADDR2, uipIP_ADDR3 );\r
+       uip_sethostaddr( xIPAddr );\r
+       httpd_init();\r
+\r
+       /* Initialise the MAC. */\r
+       while( Init_EMAC() != pdPASS )\r
+    {\r
+        vTaskDelay( uipINIT_WAIT );\r
+    }\r
+\r
+       portENTER_CRITICAL();\r
+       {\r
+        IntEnable = INT_RX_DONE;\r
+        VICIntEnable |= 0x00200000;\r
+        VICVectAddr21 = ( portLONG ) vEMAC_ISR;\r
+               prvSetMACAddress();\r
+       }\r
+       portEXIT_CRITICAL();\r
+       \r
+\r
+       for( ;; )\r
+       {\r
+               /* Is there received data ready to be processed? */\r
+               uip_len = uiGetEMACRxData( uip_buf );\r
+               \r
+               if( uip_len > 0 )\r
+               {\r
+                       /* Standard uIP loop taken from the uIP manual. */\r
+                       if( xHeader->type == htons( UIP_ETHTYPE_IP ) )\r
+                       {\r
+                               uip_arp_ipin();\r
+                               uip_input();\r
+\r
+                               /* If the above function invocation resulted in data that \r
+                               should be sent out on the network, the global variable \r
+                               uip_len is set to a value > 0. */\r
+                               if( uip_len > 0 )\r
+                               {\r
+                                       uip_arp_out();\r
+                                       prvENET_Send();\r
+                               }\r
+                       }\r
+                       else if( xHeader->type == htons( UIP_ETHTYPE_ARP ) )\r
+                       {\r
+                               uip_arp_arpin();\r
+\r
+                               /* If the above function invocation resulted in data that \r
+                               should be sent out on the network, the global variable \r
+                               uip_len is set to a value > 0. */\r
+                               if( uip_len > 0 )\r
+                               {\r
+                                       prvENET_Send();\r
+                               }\r
+                       }\r
+               }\r
+               else\r
+               {\r
+                       if( timer_expired( &periodic_timer ) )\r
+                       {\r
+                               timer_reset( &periodic_timer );\r
+                               for( i = 0; i < UIP_CONNS; i++ )\r
+                               {\r
+                                       uip_periodic( i );\r
+       \r
+                                       /* If the above function invocation resulted in data that \r
+                                       should be sent out on the network, the global variable \r
+                                       uip_len is set to a value > 0. */\r
+                                       if( uip_len > 0 )\r
+                                       {\r
+                                               uip_arp_out();\r
+                                               prvENET_Send();\r
+                                       }\r
+                               }       \r
+       \r
+                               /* Call the ARP timer function every 10 seconds. */\r
+                               if( timer_expired( &arp_timer ) )\r
+                               {\r
+                                       timer_reset( &arp_timer );\r
+                                       uip_arp_timer();\r
+                               }\r
+                       }\r
+                       else\r
+                       {                       \r
+                               /* We did not receive a packet, and there was no periodic\r
+                               processing to perform.  Block for a fixed period.  If a packet\r
+                               is received during this period we will be woken by the ISR\r
+                               giving us the Semaphore. */\r
+                               xSemaphoreTake( xEMACSemaphore, configTICK_RATE_HZ / 2 );                       \r
+                       }\r
+               }\r
+       }\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+static void prvENET_Send(void)\r
+{\r
+    RequestSend();\r
+\r
+    /* Copy the header into the Tx buffer. */\r
+    CopyToFrame_EMAC( uip_buf, uipTOTAL_FRAME_HEADER_SIZE );\r
+\r
+    /* If there is room, also copy in the application data if any. */\r
+    if( ( uip_len > uipTOTAL_FRAME_HEADER_SIZE ) && ( uip_len <= ( ETH_FRAG_SIZE - uipTOTAL_FRAME_HEADER_SIZE - 1 ) ) )\r
+    {\r
+        CopyToFrame_EMAC( uip_appdata, ( uip_len - uipTOTAL_FRAME_HEADER_SIZE ) );\r
+    }\r
+\r
+    DoSend_EMAC( uip_len );\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+static void prvSetMACAddress( void )\r
+{\r
+struct uip_eth_addr xAddr;\r
+\r
+       /* Configure the MAC address in the uIP stack. */\r
+       xAddr.addr[ 0 ] = uipMAC_ADDR0;\r
+       xAddr.addr[ 1 ] = uipMAC_ADDR1;\r
+       xAddr.addr[ 2 ] = uipMAC_ADDR2;\r
+       xAddr.addr[ 3 ] = uipMAC_ADDR3;\r
+       xAddr.addr[ 4 ] = uipMAC_ADDR4;\r
+       xAddr.addr[ 5 ] = uipMAC_ADDR5;\r
+       uip_setethaddr( xAddr );\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+void vApplicationProcessFormInput( portCHAR *pcInputString, portBASE_TYPE xInputLength )\r
+{\r
+char *c, *pcText;\r
+static portCHAR cMessageForDisplay[ 32 ];\r
+extern xQueueHandle xLCDQueue;\r
+xLCDMessage xLCDMessage;\r
+\r
+       /* Process the form input sent by the IO page of the served HTML. */\r
+\r
+       c = strstr( pcInputString, "?" );\r
+    if( c )\r
+    {\r
+               /* Turn LED's on or off in accordance with the check box status. */\r
+               if( strstr( c, "LED0=1" ) != NULL )\r
+               {\r
+                       vParTestSetLED( 5, 0 );\r
+               }\r
+               else\r
+               {\r
+                       vParTestSetLED( 5, 1 );\r
+               }               \r
+               \r
+               if( strstr( c, "LED1=1" ) != NULL )\r
+               {\r
+                       vParTestSetLED( 6, 0 );\r
+               }\r
+               else\r
+               {\r
+                       vParTestSetLED( 6, 1 );\r
+               }               \r
+\r
+               if( strstr( c, "LED2=1" ) != NULL )\r
+               {\r
+                       vParTestSetLED( 7, 0 );\r
+               }\r
+               else\r
+               {\r
+                       vParTestSetLED( 7, 1 );\r
+               }\r
+\r
+               /* Find the start of the text to be displayed on the LCD. */\r
+        pcText = strstr( c, "LCD=" );\r
+        pcText += strlen( "LCD=" );\r
+\r
+        /* Terminate the file name for further processing within uIP. */\r
+        *c = 0x00;\r
+\r
+        /* Terminate the LCD string. */\r
+        c = strstr( pcText, " " );\r
+        if( c != NULL )\r
+        {\r
+            *c = 0x00;\r
+        }\r
+\r
+        /* Add required spaces. */\r
+        while( ( c = strstr( pcText, "+" ) ) != NULL )\r
+        {\r
+            *c = ' ';\r
+        }\r
+    \r
+        /* Write the message to the LCD. */\r
+               strcpy( cMessageForDisplay, pcText );\r
+               xLCDMessage.xColumn = 0;\r
+               xLCDMessage.pcMessage = cMessageForDisplay;\r
+        xQueueSend( xLCDQueue, &xLCDMessage, portMAX_DELAY );\r
+    }\r
+}\r
+\r
diff --git a/Demo/ARM7_LPC2368_Rowley/webserver/uip-conf.h b/Demo/ARM7_LPC2368_Rowley/webserver/uip-conf.h
new file mode 100644 (file)
index 0000000..ac5265e
--- /dev/null
@@ -0,0 +1,157 @@
+/**\r
+ * \addtogroup uipopt\r
+ * @{\r
+ */\r
+\r
+/**\r
+ * \name Project-specific configuration options\r
+ * @{\r
+ *\r
+ * uIP has a number of configuration options that can be overridden\r
+ * for each project. These are kept in a project-specific uip-conf.h\r
+ * file and all configuration names have the prefix UIP_CONF.\r
+ */\r
+\r
+/*\r
+ * Copyright (c) 2006, Swedish Institute of Computer Science.\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions\r
+ * are met:\r
+ * 1. Redistributions of source code must retain the above copyright\r
+ *    notice, this list of conditions and the following disclaimer.\r
+ * 2. Redistributions in binary form must reproduce the above copyright\r
+ *    notice, this list of conditions and the following disclaimer in the\r
+ *    documentation and/or other materials provided with the distribution.\r
+ * 3. Neither the name of the Institute nor the names of its contributors\r
+ *    may be used to endorse or promote products derived from this software\r
+ *    without specific prior written permission.\r
+ *\r
+ * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND\r
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE\r
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\r
+ * SUCH DAMAGE.\r
+ *\r
+ * This file is part of the uIP TCP/IP stack\r
+ *\r
+ * $Id: uip-conf.h,v 1.6 2006/06/12 08:00:31 adam Exp $\r
+ */\r
+\r
+/**\r
+ * \file\r
+ *         An example uIP configuration file\r
+ * \author\r
+ *         Adam Dunkels <adam@sics.se>\r
+ */\r
+\r
+#ifndef __UIP_CONF_H__\r
+#define __UIP_CONF_H__\r
+\r
+#include <stdint.h>\r
+\r
+/**\r
+ * 8 bit datatype\r
+ *\r
+ * This typedef defines the 8-bit type used throughout uIP.\r
+ *\r
+ * \hideinitializer\r
+ */\r
+typedef uint8_t u8_t;\r
+\r
+/**\r
+ * 16 bit datatype\r
+ *\r
+ * This typedef defines the 16-bit type used throughout uIP.\r
+ *\r
+ * \hideinitializer\r
+ */\r
+typedef uint16_t u16_t;\r
+\r
+/**\r
+ * Statistics datatype\r
+ *\r
+ * This typedef defines the dataype used for keeping statistics in\r
+ * uIP.\r
+ *\r
+ * \hideinitializer\r
+ */\r
+typedef unsigned short uip_stats_t;\r
+\r
+/**\r
+ * Maximum number of TCP connections.\r
+ *\r
+ * \hideinitializer\r
+ */\r
+#define UIP_CONF_MAX_CONNECTIONS 40\r
+\r
+/**\r
+ * Maximum number of listening TCP ports.\r
+ *\r
+ * \hideinitializer\r
+ */\r
+#define UIP_CONF_MAX_LISTENPORTS 40\r
+\r
+/**\r
+ * uIP buffer size.\r
+ *\r
+ * \hideinitializer\r
+ */\r
+#define UIP_CONF_BUFFER_SIZE     1500\r
+\r
+/**\r
+ * CPU byte order.\r
+ *\r
+ * \hideinitializer\r
+ */\r
+#define UIP_CONF_BYTE_ORDER      LITTLE_ENDIAN\r
+\r
+/**\r
+ * Logging on or off\r
+ *\r
+ * \hideinitializer\r
+ */\r
+#define UIP_CONF_LOGGING         0\r
+\r
+/**\r
+ * UDP support on or off\r
+ *\r
+ * \hideinitializer\r
+ */\r
+#define UIP_CONF_UDP             0\r
+\r
+/**\r
+ * UDP checksums on or off\r
+ *\r
+ * \hideinitializer\r
+ */\r
+#define UIP_CONF_UDP_CHECKSUMS   1\r
+\r
+/**\r
+ * uIP statistics on or off\r
+ *\r
+ * \hideinitializer\r
+ */\r
+#define UIP_CONF_STATISTICS      1\r
+\r
+/* Here we include the header file for the application(s) we use in\r
+   our project. */\r
+/*#include "smtp.h"*/\r
+/*#include "hello-world.h"*/\r
+/*#include "telnetd.h"*/\r
+#include "webserver.h"\r
+/*#include "dhcpc.h"*/\r
+/*#include "resolv.h"*/\r
+/*#include "webclient.h"*/\r
+\r
+#endif /* __UIP_CONF_H__ */\r
+\r
+/** @} */\r
+/** @} */\r
diff --git a/Demo/ARM7_LPC2368_Rowley/webserver/webserver.h b/Demo/ARM7_LPC2368_Rowley/webserver/webserver.h
new file mode 100644 (file)
index 0000000..1acb290
--- /dev/null
@@ -0,0 +1,49 @@
+/*\r
+ * Copyright (c) 2002, Adam Dunkels.\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions\r
+ * are met:\r
+ * 1. Redistributions of source code must retain the above copyright\r
+ *    notice, this list of conditions and the following disclaimer.\r
+ * 2. Redistributions in binary form must reproduce the above\r
+ *    copyright notice, this list of conditions and the following\r
+ *    disclaimer in the documentation and/or other materials provided\r
+ *    with the distribution.\r
+ * 3. The name of the author may not be used to endorse or promote\r
+ *    products derived from this software without specific prior\r
+ *    written permission.\r
+ *\r
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\r
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\r
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE\r
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ *\r
+ * This file is part of the uIP TCP/IP stack\r
+ *\r
+ * $Id: webserver.h,v 1.2 2006/06/11 21:46:38 adam Exp $\r
+ *\r
+ */\r
+#ifndef __WEBSERVER_H__\r
+#define __WEBSERVER_H__\r
+\r
+#include "httpd.h"\r
+\r
+typedef struct httpd_state uip_tcp_appstate_t;\r
+/* UIP_APPCALL: the name of the application function. This function\r
+   must return void and take no arguments (i.e., C type "void\r
+   appfunc(void)"). */\r
+#ifndef UIP_APPCALL\r
+#define UIP_APPCALL     httpd_appcall\r
+#endif\r
+\r
+\r
+#endif /* __WEBSERVER_H__ */\r
diff --git a/Demo/ARM9_STR91X_IAR/RTOSDemo.dep b/Demo/ARM9_STR91X_IAR/RTOSDemo.dep
deleted file mode 100644 (file)
index bb7376f..0000000
+++ /dev/null
@@ -1,2105 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>\r
-\r
-<project>\r
-  <fileVersion>2</fileVersion>\r
-  <configuration>\r
-    <name>ARM</name>\r
-    <outputs>\r
-      <file>$PROJ_DIR$\ARM\Obj\comtest.r79</file>\r
-      <file>$PROJ_DIR$\..\Common\include\BlockQ.h</file>\r
-      <file>$PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\clock.h</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\lcd.r79</file>\r
-      <file>$PROJ_DIR$\Library\include\91x_uart.h</file>\r
-      <file>$TOOLKIT_DIR$\inc\stdio.h</file>\r
-      <file>$TOOLKIT_DIR$\inc\math.h</file>\r
-      <file>$PROJ_DIR$\Library\include\91x_map.h</file>\r
-      <file>$PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\lc.h</file>\r
-      <file>$PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uip.h</file>\r
-      <file>$PROJ_DIR$\..\..\Source\include\FreeRTOS.h</file>\r
-      <file>$PROJ_DIR$\Library\include\91x_lib.h</file>\r
-      <file>$PROJ_DIR$\Library\include\91x_ahbapb.h</file>\r
-      <file>$PROJ_DIR$\Library\include\91x_scu.h</file>\r
-      <file>$PROJ_DIR$\..\..\Source\include\projdefs.h</file>\r
-      <file>$PROJ_DIR$\..\..\Source\include\croutine.h</file>\r
-      <file>$PROJ_DIR$\..\Common\include\flop.h</file>\r
-      <file>$TOOLKIT_DIR$\inc\ymath.h</file>\r
-      <file>$PROJ_DIR$\Library\include\91x_gpio.h</file>\r
-      <file>$PROJ_DIR$\..\Common\include\flash.h</file>\r
-      <file>$PROJ_DIR$\..\..\Source\include\list.h</file>\r
-      <file>$PROJ_DIR$\webserver\httpd-fs.h</file>\r
-      <file>$PROJ_DIR$\..\Common\Minimal\dynamic.c</file>\r
-      <file>$PROJ_DIR$\..\Common\include\integer.h</file>\r
-      <file>$PROJ_DIR$\webserver\uip-conf.h</file>\r
-      <file>$PROJ_DIR$\webserver\httpd-fsdata.c</file>\r
-      <file>$PROJ_DIR$\Library\include\91x_type.h</file>\r
-      <file>$PROJ_DIR$\Library\include\91x_vic.h</file>\r
-      <file>$TOOLKIT_DIR$\inc\intrinsics.h</file>\r
-      <file>$PROJ_DIR$\Library\include\91x_fmi.h</file>\r
-      <file>$TOOLKIT_DIR$\inc\DLib_Product.h</file>\r
-      <file>$PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\pt.h</file>\r
-      <file>$PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uip_arch.h</file>\r
-      <file>$PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uip_arp.h</file>\r
-      <file>$TOOLKIT_DIR$\inc\xencoding_limits.h</file>\r
-      <file>$PROJ_DIR$\..\Common\include\comtest.h</file>\r
-      <file>$PROJ_DIR$\..\Common\include\dynamic.h</file>\r
-      <file>$TOOLKIT_DIR$\inc\yvals.h</file>\r
-      <file>$PROJ_DIR$\webserver\webserver.h</file>\r
-      <file>$PROJ_DIR$\Library\include\91x_enet.h</file>\r
-      <file>$PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\lc-switch.h</file>\r
-      <file>$TOOLKIT_DIR$\inc\stdint.h</file>\r
-      <file>$PROJ_DIR$\Library\include\91x_wdg.h</file>\r
-      <file>$PROJ_DIR$\STCode\lcd.h</file>\r
-      <file>$PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\timer.h</file>\r
-      <file>$PROJ_DIR$\..\Common\include\PollQ.h</file>\r
-      <file>$TOOLKIT_DIR$\inc\ysizet.h</file>\r
-      <file>$TOOLKIT_DIR$\inc\DLib_Threads.h</file>\r
-      <file>$PROJ_DIR$\..\..\Source\include\queue.h</file>\r
-      <file>$PROJ_DIR$\..\Common\include\comtest2.h</file>\r
-      <file>$TOOLKIT_DIR$\inc\inttypes.h</file>\r
-      <file>$PROJ_DIR$\..\..\Source\include\portable.h</file>\r
-      <file>$TOOLKIT_DIR$\inc\intrinsic.h</file>\r
-      <file>$PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uipopt.h</file>\r
-      <file>$PROJ_DIR$\webserver\httpd.h</file>\r
-      <file>$PROJ_DIR$\..\Common\include\serial.h</file>\r
-      <file>$PROJ_DIR$\..\Common\include\partest.h</file>\r
-      <file>$PROJ_DIR$\webserver\httpd-cgi.h</file>\r
-      <file>$PROJ_DIR$\..\Common\include\semtest.h</file>\r
-      <file>$TOOLKIT_DIR$\inc\DLib_Defaults.h</file>\r
-      <file>$PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\psock.h</file>\r
-      <file>$PROJ_DIR$\webserver\clock-arch.h</file>\r
-      <file>$TOOLKIT_DIR$\inc\string.h</file>\r
-      <file>$PROJ_DIR$\..\..\Source\include\semphr.h</file>\r
-      <file>$PROJ_DIR$\..\..\Source\include\task.h</file>\r
-      <file>$TOOLKIT_DIR$\inc\stdlib.h</file>\r
-      <file>$PROJ_DIR$\webserver\http-strings.h</file>\r
-      <file>$TOOLKIT_DIR$\inc\stddef.h</file>\r
-      <file>$PROJ_DIR$\webserver\httpd-fsdata.h</file>\r
-      <file>$PROJ_DIR$\..\..\Source\portable\IAR\STR91x\portmacro.h</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\dynamic.r79</file>\r
-      <file>$PROJ_DIR$\Library\include\91x_it.h</file>\r
-      <file>$PROJ_DIR$\..\Common\Minimal\comtest.c</file>\r
-      <file>$PROJ_DIR$\..\Common\Minimal\BlockQ.c</file>\r
-      <file>$PROJ_DIR$\..\..\Source\portable\MemMang\heap_2.c</file>\r
-      <file>$PROJ_DIR$\..\Common\Minimal\integer.c</file>\r
-      <file>$PROJ_DIR$\STCode\lcd.c</file>\r
-      <file>$PROJ_DIR$\main.c</file>\r
-      <file>$PROJ_DIR$\..\Common\Minimal\semtest.c</file>\r
-      <file>$PROJ_DIR$\..\Common\Minimal\PollQ.c</file>\r
-      <file>$PROJ_DIR$\ParTest\ParTest.c</file>\r
-      <file>$PROJ_DIR$\serial\serial.c</file>\r
-      <file>$PROJ_DIR$\Library\source\91x_enet.c</file>\r
-      <file>$PROJ_DIR$\Library\include\91x_conf.h</file>\r
-      <file>$PROJ_DIR$\webserver\uIP_Task.c</file>\r
-      <file>$PROJ_DIR$\Library\source\91x_wdg.c</file>\r
-      <file>$PROJ_DIR$\..\..\Source\portable\IAR\STR91x\port.c</file>\r
-      <file>$PROJ_DIR$\..\..\Source\queue.c</file>\r
-      <file>$PROJ_DIR$\..\..\Source\portable\IAR\STR91x\portasm.s79</file>\r
-      <file>$PROJ_DIR$\..\..\Source\tasks.c</file>\r
-      <file>$PROJ_DIR$\91x_init_IAR.s</file>\r
-      <file>$PROJ_DIR$\91x_vect_IAR.s</file>\r
-      <file>$PROJ_DIR$\lnkarm_flash.xcl</file>\r
-      <file>$PROJ_DIR$\lnkarm_ram.xcl</file>\r
-      <file>$PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\apps\webserver\http-strings.c</file>\r
-      <file>$PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\psock.c</file>\r
-      <file>$PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uip_arp.c</file>\r
-      <file>$PROJ_DIR$\webserver\httpd-cgi.c</file>\r
-      <file>$PROJ_DIR$\webserver\httpd-fs.c</file>\r
-      <file>$PROJ_DIR$\webserver\httpd.c</file>\r
-      <file>$PROJ_DIR$\..\Common\Minimal\flash.c</file>\r
-      <file>$PROJ_DIR$\..\Common\Minimal\flop.c</file>\r
-      <file>$PROJ_DIR$\FreeRTOSConfig.h</file>\r
-      <file>$PROJ_DIR$\Library\source\91x_gpio.c</file>\r
-      <file>$PROJ_DIR$\Library\source\91x_fmi.c</file>\r
-      <file>$PROJ_DIR$\Library\source\91x_uart.c</file>\r
-      <file>$PROJ_DIR$\Library\source\91x_it.c</file>\r
-      <file>$PROJ_DIR$\Library\source\91x_lib.c</file>\r
-      <file>$PROJ_DIR$\Library\source\91x_scu.c</file>\r
-      <file>$PROJ_DIR$\..\..\Source\list.c</file>\r
-      <file>$PROJ_DIR$\Library\source\91x_vic.c</file>\r
-      <file>$PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\timer.c</file>\r
-      <file>$PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uip.c</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\integer.r79</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\list.r79</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\port.r79</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\ParTest.r79</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\PollQ.r79</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\flash.r79</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\uip_arp.r79</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\portasm.r79</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\91x_init_IAR.r79</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\91x_vect_IAR.r79</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\comtest.pbi</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\dynamic.pbi</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\91x_lib.r79</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\91x_scu.r79</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\91x_uart.r79</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\91x_vic.r79</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\httpd-cgi.r79</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\httpd-fs.r79</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\httpd.r79</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\psock.r79</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\timer.r79</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\flop.pbi</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\flop.r79</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\BlockQ.r79</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\serial.pbi</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\uIP_Task.pbi</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\91x_enet.pbi</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\91x_fmi.pbi</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\91x_gpio.pbi</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\91x_it.pbi</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\91x_lib.pbi</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\91x_scu.pbi</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\91x_uart.pbi</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\91x_vic.pbi</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\91x_wdg.r79</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\uip.r79</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\BlockQ.pbi</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\queue.r79</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\tasks.r79</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\http-strings.r79</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\flash.pbi</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\lcd.pbi</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\heap_2.pbi</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\integer.pbi</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\main.pbi</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\list.pbi</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\ParTest.pbi</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\PollQ.pbi</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\semtest.pbi</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\semtest.r79</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\serial.r79</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\uIP_Task.r79</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\91x_enet.r79</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\91x_fmi.r79</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\91x_gpio.r79</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\91x_it.r79</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\91x_wdg.pbi</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\port.pbi</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\uip.pbi</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\queue.pbi</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\tasks.pbi</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\http-strings.pbi</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\httpd-cgi.pbi</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\httpd-fs.pbi</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\httpd.pbi</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\psock.pbi</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\timer.pbi</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\RTOSDemo.pbd</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\uip_arp.pbi</file>\r
-      <file>$PROJ_DIR$\ARM\Exe\RTOSDemo.d79</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\main.r79</file>\r
-      <file>$PROJ_DIR$\ARM\Obj\heap_2.r79</file>\r
-    </outputs>\r
-    <file>\r
-      <name>$PROJ_DIR$\..\Common\Minimal\dynamic.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 70</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 124</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 65 37 59 30 34 47 46 10 67 14 102 51 69 52 28 64 20 63 48 36</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>[ROOT_NODE]</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>XLINK</name>\r
-          <file> 182</file>\r
-        </tool>\r
-      </outputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\..\Common\Minimal\comtest.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 0</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 123</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 65 37 59 30 34 47 46 10 67 14 102 51 69 52 28 64 20 55 35 56</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\..\Common\Minimal\BlockQ.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 136</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 149</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 65 37 59 30 34 47 46 10 67 14 102 51 69 52 28 64 20 48 1</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\..\..\Source\portable\MemMang\heap_2.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 184</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 155</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 65 37 59 30 34 47 46 10 67 14 102 51 69 52 28 64 20</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\..\Common\Minimal\integer.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 113</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 156</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 65 37 59 30 34 47 46 10 67 14 102 51 69 52 28 64 20 23</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\STCode\lcd.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 3</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 154</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 11 7 83 26 12 29 27 71 18 13 4 42 39 43 10 67 37 59 30 34 47 46 14 102 51 69 52 28 64 20</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\main.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 183</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 157</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 5 37 59 30 34 47 46 11 7 83 26 12 29 27 71 18 13 4 42 39 10 67 14 102 51 69 52 28 64 20 48 43 19 23 45 1 58 36 56 16 49 55</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\..\Common\Minimal\semtest.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 162</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 161</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 65 37 59 30 34 47 46 10 67 14 102 51 69 52 28 64 20 63 48 58</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\..\Common\Minimal\PollQ.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 117</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 160</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 65 37 59 30 34 47 46 10 67 14 102 51 69 52 28 64 20 48 45</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\ParTest\ParTest.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 116</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 159</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 11 7 83 26 12 29 27 71 18 13 4 42 39 10 67 37 59 30 34 47 46 14 102 51 69 52 28 56</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\serial\serial.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 163</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 137</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 11 7 83 26 12 29 27 71 18 13 4 42 39 10 67 37 59 30 34 47 46 14 102 51 69 52 28 48 63 55</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\Library\source\91x_enet.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 165</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 139</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 10 67 37 59 30 34 47 46 14 102 51 69 52 28 64 20 11 7 83 26 12 29 27 71 18 13 4 42 39 62</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\webserver\uIP_Task.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 164</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 138</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 62 37 59 30 34 47 46 11 7 83 26 12 29 27 71 18 13 4 42 39 10 67 14 102 51 69 52 28 64 20 63 48 9 53 24 50 41 38 54 60 31 8 40 21 33 44 2 61</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\Library\source\91x_wdg.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 147</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 169</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 42 7 83 26 13</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\..\..\Source\portable\IAR\STR91x\port.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 115</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 170</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 11 7 83 26 12 29 27 71 18 13 4 42 39 65 37 59 30 34 47 46 10 67 14 102 51 69 52 28 64 20</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\..\..\Source\queue.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 150</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 172</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 65 37 59 30 34 47 46 62 10 67 14 102 51 69 52 28 64 20 15</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\..\..\Source\portable\IAR\STR91x\portasm.s79</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>AARM</name>\r
-          <file> 120</file>\r
-        </tool>\r
-      </outputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\..\..\Source\tasks.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 151</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 173</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 5 37 59 30 34 47 46 65 62 10 67 14 102 51 69 52 28 64 20</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\91x_init_IAR.s</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>AARM</name>\r
-          <file> 121</file>\r
-        </tool>\r
-      </outputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\91x_vect_IAR.s</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>AARM</name>\r
-          <file> 122</file>\r
-        </tool>\r
-      </outputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\apps\webserver\http-strings.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 152</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 174</file>\r
-        </tool>\r
-      </outputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\psock.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 132</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 178</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 5 37 59 30 34 47 46 62 53 24 50 41 38 54 60 31 8 40 21 9</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uip_arp.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 119</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 181</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 33 9 53 24 50 41 37 59 30 34 47 38 54 60 31 8 40 21 62 46</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\webserver\httpd-cgi.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 129</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 175</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 9 53 24 50 41 37 59 30 34 47 38 54 60 31 8 40 21 57 5 46 62</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\webserver\httpd-fs.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 130</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 176</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 54 60 53 24 50 41 37 59 30 34 47 38 31 8 40 21 68 9 25</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\webserver\httpd.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 131</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 177</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 9 53 24 50 41 37 59 30 34 47 38 54 60 31 8 40 21 57 66 62 46</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\..\Common\Minimal\flash.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 118</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 153</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 65 37 59 30 34 47 46 10 67 14 102 51 69 52 28 64 20 56 19</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\..\Common\Minimal\flop.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 135</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 134</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 65 37 59 30 34 47 46 6 17 10 67 14 102 51 69 52 28 64 20 16</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\Library\source\91x_gpio.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 167</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 141</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 18 7 83 26 13</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\Library\source\91x_fmi.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 166</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 140</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 29 7 83 26</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\Library\source\91x_uart.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 127</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 145</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 4 7 83 26 13</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\Library\source\91x_it.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 168</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 142</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 71 11 7 83 26 12 29 27 18 13 4 42 39</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\Library\source\91x_lib.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 125</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 143</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 7 83 26</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\Library\source\91x_scu.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 126</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 144</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 13 7 83 26</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\..\..\Source\list.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 114</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 158</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 65 37 59 30 34 47 46 10 67 14 102 51 69 52 28 20</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\Library\source\91x_vic.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 128</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 146</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 27 7 83 26 71 11 12 29 18 13 4 42 39</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\timer.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 133</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 179</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 2 61 10 67 37 59 30 34 47 46 14 102 51 69 52 28 44</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uip.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 148</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 171</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 9 53 24 50 41 37 59 30 34 47 38 54 60 31 8 40 21 32 62 46</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\ARM\Obj\RTOSDemo.pbd</name>\r
-      <inputs>\r
-        <tool>\r
-          <name>BILINK</name>\r
-          <file> 139 140 141 142 143 144 145 146 169 149 159 160 123 124 153 134 155 174 175 176 177 156 154 158 157 170 178 172 161 137 173 179 138 171 181</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <forcedrebuild>\r
-      <name>$PROJ_DIR$\..\Common\Minimal\dynamic.c</name>\r
-      <tool>ICCARM</tool>\r
-    </forcedrebuild>\r
-    <forcedrebuild>\r
-      <name>$PROJ_DIR$\..\Common\Minimal\comtest.c</name>\r
-      <tool>ICCARM</tool>\r
-    </forcedrebuild>\r
-    <forcedrebuild>\r
-      <name>$PROJ_DIR$\..\Common\Minimal\BlockQ.c</name>\r
-      <tool>ICCARM</tool>\r
-    </forcedrebuild>\r
-    <forcedrebuild>\r
-      <name>$PROJ_DIR$\..\..\Source\portable\MemMang\heap_2.c</name>\r
-      <tool>ICCARM</tool>\r
-    </forcedrebuild>\r
-    <forcedrebuild>\r
-      <name>$PROJ_DIR$\..\Common\Minimal\integer.c</name>\r
-      <tool>ICCARM</tool>\r
-    </forcedrebuild>\r
-    <forcedrebuild>\r
-      <name>$PROJ_DIR$\STCode\lcd.c</name>\r
-      <tool>ICCARM</tool>\r
-    </forcedrebuild>\r
-    <forcedrebuild>\r
-      <name>$PROJ_DIR$\main.c</name>\r
-      <tool>ICCARM</tool>\r
-    </forcedrebuild>\r
-    <forcedrebuild>\r
-      <name>$PROJ_DIR$\..\Common\Minimal\semtest.c</name>\r
-      <tool>ICCARM</tool>\r
-    </forcedrebuild>\r
-    <forcedrebuild>\r
-      <name>$PROJ_DIR$\..\Common\Minimal\PollQ.c</name>\r
-      <tool>ICCARM</tool>\r
-    </forcedrebuild>\r
-    <forcedrebuild>\r
-      <name>$PROJ_DIR$\ParTest\ParTest.c</name>\r
-      <tool>ICCARM</tool>\r
-    </forcedrebuild>\r
-    <forcedrebuild>\r
-      <name>$PROJ_DIR$\serial\serial.c</name>\r
-      <tool>ICCARM</tool>\r
-    </forcedrebuild>\r
-    <forcedrebuild>\r
-      <name>$PROJ_DIR$\Library\source\91x_enet.c</name>\r
-      <tool>ICCARM</tool>\r
-    </forcedrebuild>\r
-    <forcedrebuild>\r
-      <name>$PROJ_DIR$\webserver\uIP_Task.c</name>\r
-      <tool>ICCARM</tool>\r
-    </forcedrebuild>\r
-    <forcedrebuild>\r
-      <name>$PROJ_DIR$\Library\source\91x_wdg.c</name>\r
-      <tool>ICCARM</tool>\r
-    </forcedrebuild>\r
-    <forcedrebuild>\r
-      <name>$PROJ_DIR$\..\..\Source\portable\IAR\STR91x\port.c</name>\r
-      <tool>ICCARM</tool>\r
-    </forcedrebuild>\r
-    <forcedrebuild>\r
-      <name>$PROJ_DIR$\..\..\Source\queue.c</name>\r
-      <tool>ICCARM</tool>\r
-    </forcedrebuild>\r
-    <forcedrebuild>\r
-      <name>$PROJ_DIR$\..\..\Source\tasks.c</name>\r
-      <tool>ICCARM</tool>\r
-    </forcedrebuild>\r
-    <forcedrebuild>\r
-      <name>$PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\apps\webserver\http-strings.c</name>\r
-      <tool>ICCARM</tool>\r
-    </forcedrebuild>\r
-    <forcedrebuild>\r
-      <name>$PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\psock.c</name>\r
-      <tool>ICCARM</tool>\r
-    </forcedrebuild>\r
-    <forcedrebuild>\r
-      <name>$PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uip_arp.c</name>\r
-      <tool>ICCARM</tool>\r
-    </forcedrebuild>\r
-    <forcedrebuild>\r
-      <name>$PROJ_DIR$\webserver\httpd-cgi.c</name>\r
-      <tool>ICCARM</tool>\r
-    </forcedrebuild>\r
-    <forcedrebuild>\r
-      <name>$PROJ_DIR$\webserver\httpd-fs.c</name>\r
-      <tool>ICCARM</tool>\r
-    </forcedrebuild>\r
-    <forcedrebuild>\r
-      <name>$PROJ_DIR$\webserver\httpd.c</name>\r
-      <tool>ICCARM</tool>\r
-    </forcedrebuild>\r
-    <forcedrebuild>\r
-      <name>$PROJ_DIR$\..\Common\Minimal\flash.c</name>\r
-      <tool>ICCARM</tool>\r
-    </forcedrebuild>\r
-    <forcedrebuild>\r
-      <name>$PROJ_DIR$\..\Common\Minimal\flop.c</name>\r
-      <tool>ICCARM</tool>\r
-    </forcedrebuild>\r
-    <forcedrebuild>\r
-      <name>$PROJ_DIR$\Library\source\91x_gpio.c</name>\r
-      <tool>ICCARM</tool>\r
-    </forcedrebuild>\r
-    <forcedrebuild>\r
-      <name>$PROJ_DIR$\Library\source\91x_fmi.c</name>\r
-      <tool>ICCARM</tool>\r
-    </forcedrebuild>\r
-    <forcedrebuild>\r
-      <name>$PROJ_DIR$\Library\source\91x_uart.c</name>\r
-      <tool>ICCARM</tool>\r
-    </forcedrebuild>\r
-    <forcedrebuild>\r
-      <name>$PROJ_DIR$\Library\source\91x_it.c</name>\r
-      <tool>ICCARM</tool>\r
-    </forcedrebuild>\r
-    <forcedrebuild>\r
-      <name>$PROJ_DIR$\Library\source\91x_lib.c</name>\r
-      <tool>ICCARM</tool>\r
-    </forcedrebuild>\r
-    <forcedrebuild>\r
-      <name>$PROJ_DIR$\Library\source\91x_scu.c</name>\r
-      <tool>ICCARM</tool>\r
-    </forcedrebuild>\r
-    <forcedrebuild>\r
-      <name>$PROJ_DIR$\..\..\Source\list.c</name>\r
-      <tool>ICCARM</tool>\r
-    </forcedrebuild>\r
-    <forcedrebuild>\r
-      <name>$PROJ_DIR$\Library\source\91x_vic.c</name>\r
-      <tool>ICCARM</tool>\r
-    </forcedrebuild>\r
-    <forcedrebuild>\r
-      <name>$PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\timer.c</name>\r
-      <tool>ICCARM</tool>\r
-    </forcedrebuild>\r
-    <forcedrebuild>\r
-      <name>$PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uip.c</name>\r
-      <tool>ICCARM</tool>\r
-    </forcedrebuild>\r
-    <forcedrebuild>\r
-      <name>[REBUILD_ALL]</name>\r
-    </forcedrebuild>\r
-  </configuration>\r
-  <configuration>\r
-    <name>THUMB</name>\r
-    <outputs>\r
-      <file>$PROJ_DIR$\..\Common\include\BlockQ.h</file>\r
-      <file>$PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\clock.h</file>\r
-      <file>$PROJ_DIR$\Library\include\91x_uart.h</file>\r
-      <file>$TOOLKIT_DIR$\inc\stdio.h</file>\r
-      <file>$TOOLKIT_DIR$\inc\math.h</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\http-strings.r79</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\91x_vect_IAR.r79</file>\r
-      <file>$PROJ_DIR$\Library\include\91x_map.h</file>\r
-      <file>$PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\lc.h</file>\r
-      <file>$PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uip.h</file>\r
-      <file>$PROJ_DIR$\..\..\Source\include\FreeRTOS.h</file>\r
-      <file>$PROJ_DIR$\Library\include\91x_lib.h</file>\r
-      <file>$PROJ_DIR$\Library\include\91x_ahbapb.h</file>\r
-      <file>$PROJ_DIR$\Library\include\91x_scu.h</file>\r
-      <file>$PROJ_DIR$\..\..\Source\include\projdefs.h</file>\r
-      <file>$PROJ_DIR$\..\..\Source\include\croutine.h</file>\r
-      <file>$PROJ_DIR$\..\Common\include\flop.h</file>\r
-      <file>$TOOLKIT_DIR$\inc\ymath.h</file>\r
-      <file>$PROJ_DIR$\Library\include\91x_gpio.h</file>\r
-      <file>$PROJ_DIR$\..\Common\include\flash.h</file>\r
-      <file>$PROJ_DIR$\..\..\Source\include\list.h</file>\r
-      <file>$PROJ_DIR$\webserver\httpd-fs.h</file>\r
-      <file>$PROJ_DIR$\..\Common\Minimal\dynamic.c</file>\r
-      <file>$PROJ_DIR$\..\Common\include\integer.h</file>\r
-      <file>$PROJ_DIR$\webserver\uip-conf.h</file>\r
-      <file>$PROJ_DIR$\webserver\httpd-fsdata.c</file>\r
-      <file>$PROJ_DIR$\Library\include\91x_type.h</file>\r
-      <file>$PROJ_DIR$\Library\include\91x_vic.h</file>\r
-      <file>$TOOLKIT_DIR$\inc\intrinsics.h</file>\r
-      <file>$PROJ_DIR$\Library\include\91x_fmi.h</file>\r
-      <file>$TOOLKIT_DIR$\inc\DLib_Product.h</file>\r
-      <file>$PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\pt.h</file>\r
-      <file>$PROJ_DIR$\..\..\Source\portable\IAR\STR91x\ISR_Support.h</file>\r
-      <file>$PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uip_arch.h</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\comtest.r79</file>\r
-      <file>$PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uip_arp.h</file>\r
-      <file>$TOOLKIT_DIR$\inc\xencoding_limits.h</file>\r
-      <file>$PROJ_DIR$\..\Common\include\comtest.h</file>\r
-      <file>$PROJ_DIR$\..\Common\include\dynamic.h</file>\r
-      <file>$TOOLKIT_DIR$\inc\yvals.h</file>\r
-      <file>$PROJ_DIR$\webserver\webserver.h</file>\r
-      <file>$PROJ_DIR$\Library\include\91x_enet.h</file>\r
-      <file>$PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\lc-switch.h</file>\r
-      <file>$TOOLKIT_DIR$\inc\stdint.h</file>\r
-      <file>$PROJ_DIR$\Library\include\91x_wdg.h</file>\r
-      <file>$PROJ_DIR$\STCode\lcd.h</file>\r
-      <file>$PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\timer.h</file>\r
-      <file>$PROJ_DIR$\..\Common\include\PollQ.h</file>\r
-      <file>$TOOLKIT_DIR$\inc\ysizet.h</file>\r
-      <file>$TOOLKIT_DIR$\inc\DLib_Threads.h</file>\r
-      <file>$PROJ_DIR$\..\..\Source\include\queue.h</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\BlockQ.r79</file>\r
-      <file>$PROJ_DIR$\..\Common\include\comtest2.h</file>\r
-      <file>$TOOLKIT_DIR$\inc\inttypes.h</file>\r
-      <file>$PROJ_DIR$\..\..\Source\include\portable.h</file>\r
-      <file>$TOOLKIT_DIR$\inc\intrinsic.h</file>\r
-      <file>$PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uipopt.h</file>\r
-      <file>$PROJ_DIR$\webserver\httpd.h</file>\r
-      <file>$PROJ_DIR$\..\Common\include\serial.h</file>\r
-      <file>$PROJ_DIR$\..\Common\include\partest.h</file>\r
-      <file>$PROJ_DIR$\webserver\httpd-cgi.h</file>\r
-      <file>$TOOLKIT_DIR$\lib\dl5tptinl8n.h</file>\r
-      <file>$PROJ_DIR$\..\Common\include\semtest.h</file>\r
-      <file>$TOOLKIT_DIR$\inc\DLib_Defaults.h</file>\r
-      <file>$TOOLKIT_DIR$\lib\dl5tptinl8n.r79</file>\r
-      <file>$PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\psock.h</file>\r
-      <file>$PROJ_DIR$\webserver\clock-arch.h</file>\r
-      <file>$TOOLKIT_DIR$\inc\string.h</file>\r
-      <file>$PROJ_DIR$\..\..\Source\include\semphr.h</file>\r
-      <file>$PROJ_DIR$\..\..\Source\include\task.h</file>\r
-      <file>$TOOLKIT_DIR$\inc\stdlib.h</file>\r
-      <file>$PROJ_DIR$\webserver\http-strings.h</file>\r
-      <file>$TOOLKIT_DIR$\inc\stddef.h</file>\r
-      <file>$PROJ_DIR$\webserver\httpd-fsdata.h</file>\r
-      <file>$PROJ_DIR$\..\..\Source\portable\IAR\STR91x\portmacro.h</file>\r
-      <file>$PROJ_DIR$\Library\include\91x_it.h</file>\r
-      <file>$PROJ_DIR$\..\Common\Minimal\comtest.c</file>\r
-      <file>$PROJ_DIR$\..\Common\Minimal\BlockQ.c</file>\r
-      <file>$PROJ_DIR$\..\..\Source\portable\MemMang\heap_2.c</file>\r
-      <file>$PROJ_DIR$\..\Common\Minimal\integer.c</file>\r
-      <file>$PROJ_DIR$\STCode\lcd.c</file>\r
-      <file>$PROJ_DIR$\main.c</file>\r
-      <file>$PROJ_DIR$\..\Common\Minimal\semtest.c</file>\r
-      <file>$PROJ_DIR$\..\Common\Minimal\PollQ.c</file>\r
-      <file>$PROJ_DIR$\ParTest\ParTest.c</file>\r
-      <file>$PROJ_DIR$\serial\serial.c</file>\r
-      <file>$PROJ_DIR$\Library\source\91x_enet.c</file>\r
-      <file>$PROJ_DIR$\Library\include\91x_conf.h</file>\r
-      <file>$PROJ_DIR$\webserver\uIP_Task.c</file>\r
-      <file>$PROJ_DIR$\Library\source\91x_wdg.c</file>\r
-      <file>$PROJ_DIR$\..\..\Source\portable\IAR\STR91x\port.c</file>\r
-      <file>$PROJ_DIR$\..\..\Source\queue.c</file>\r
-      <file>$PROJ_DIR$\..\..\Source\portable\IAR\STR91x\portasm.s79</file>\r
-      <file>$PROJ_DIR$\..\..\Source\tasks.c</file>\r
-      <file>$PROJ_DIR$\91x_init_IAR.s</file>\r
-      <file>$PROJ_DIR$\91x_vect_IAR.s</file>\r
-      <file>$PROJ_DIR$\lnkarm_flash.xcl</file>\r
-      <file>$PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\apps\webserver\http-strings.c</file>\r
-      <file>$PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\psock.c</file>\r
-      <file>$PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uip_arp.c</file>\r
-      <file>$PROJ_DIR$\webserver\httpd-cgi.c</file>\r
-      <file>$PROJ_DIR$\webserver\httpd-fs.c</file>\r
-      <file>$PROJ_DIR$\webserver\httpd.c</file>\r
-      <file>$PROJ_DIR$\..\Common\Minimal\flash.c</file>\r
-      <file>$PROJ_DIR$\..\Common\Minimal\flop.c</file>\r
-      <file>$PROJ_DIR$\FreeRTOSConfig.h</file>\r
-      <file>$PROJ_DIR$\Library\source\91x_gpio.c</file>\r
-      <file>$PROJ_DIR$\Library\source\91x_fmi.c</file>\r
-      <file>$PROJ_DIR$\Library\source\91x_uart.c</file>\r
-      <file>$PROJ_DIR$\Library\source\91x_it.c</file>\r
-      <file>$PROJ_DIR$\Library\source\91x_lib.c</file>\r
-      <file>$PROJ_DIR$\Library\source\91x_scu.c</file>\r
-      <file>$PROJ_DIR$\..\..\Source\list.c</file>\r
-      <file>$PROJ_DIR$\Library\source\91x_vic.c</file>\r
-      <file>$PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\timer.c</file>\r
-      <file>$PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uip.c</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\lcd.r79</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\main.r79</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\ParTest.r79</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\91x_lib.r79</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\91x_scu.r79</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\91x_uart.r79</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\91x_vic.r79</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\PollQ.r79</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\semtest.r79</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\serial.r79</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\dynamic.r79</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\uip.r79</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\uip_arp.r79</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\portasm.r79</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\http-strings.pbi</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\BlockQ.pbi</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\comtest.pbi</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\heap_2.r79</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\integer.r79</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\uIP_Task.r79</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\91x_enet.r79</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\dynamic.pbi</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\flash.pbi</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\flop.pbi</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\heap_2.pbi</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\integer.pbi</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\lcd.pbi</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\main.pbi</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\ParTest.pbi</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\PollQ.pbi</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\semtest.pbi</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\serial.pbi</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\uIP_Task.pbi</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\91x_enet.pbi</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\91x_fmi.pbi</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\91x_gpio.pbi</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\91x_it.pbi</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\91x_lib.pbi</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\91x_scu.pbi</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\91x_uart.pbi</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\91x_vic.pbi</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\91x_wdg.pbi</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\list.pbi</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\port.pbi</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\queue.pbi</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\tasks.pbi</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\RTOSDemo.pbd</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\httpd-cgi.pbi</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\httpd-fs.pbi</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\httpd.pbi</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\psock.pbi</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\timer.pbi</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\uip.pbi</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\uip_arp.pbi</file>\r
-      <file>$PROJ_DIR$\THUMB\Exe\RTOSDemo.d79</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\flash.r79</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\flop.r79</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\91x_init_IAR.r79</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\httpd-cgi.r79</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\httpd-fs.r79</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\httpd.r79</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\psock.r79</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\timer.r79</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\91x_wdg.r79</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\list.r79</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\port.r79</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\queue.r79</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\tasks.r79</file>\r
-      <file>$PROJ_DIR$\THUMB\Exe\RTOSDemo.sim</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\91x_fmi.r79</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\91x_gpio.r79</file>\r
-      <file>$PROJ_DIR$\THUMB\Obj\91x_it.r79</file>\r
-      <file>$PROJ_DIR$\THUMB\List\RTOSDemo.html</file>\r
-    </outputs>\r
-    <file>\r
-      <name>$PROJ_DIR$\..\Common\Minimal\dynamic.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 126</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 137</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 70 39 63 61 30 36 49 48 10 72 14 105 54 74 55 28 69 20 68 50 38</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 70 39 63 30 36 49 48 10 72 14 105 54 74 55 28 69 20 68 50 38</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>[ROOT_NODE]</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>XLINK</name>\r
-          <file> 170 188 184</file>\r
-        </tool>\r
-      </outputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\..\Common\Minimal\comtest.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 34</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 132</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 70 39 63 61 30 36 49 48 10 72 14 105 54 74 55 28 69 20 58 37 59</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 70 39 63 30 36 49 48 10 72 14 105 54 74 55 28 69 20 58 37 59</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\..\Common\Minimal\BlockQ.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 51</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 131</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 70 39 63 61 30 36 49 48 10 72 14 105 54 74 55 28 69 20 50 0</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 70 39 63 30 36 49 48 10 72 14 105 54 74 55 28 69 20 50 0</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\..\..\Source\portable\MemMang\heap_2.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 133</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 140</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 70 39 63 61 30 36 49 48 10 72 14 105 54 74 55 28 69 20</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 70 39 63 30 36 49 48 10 72 14 105 54 74 55 28 69 20</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\..\Common\Minimal\integer.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 134</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 141</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 70 39 63 61 30 36 49 48 10 72 14 105 54 74 55 28 69 20 23</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 70 39 63 30 36 49 48 10 72 14 105 54 74 55 28 69 20 23</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\STCode\lcd.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 116</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 142</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 11 7 87 26 12 29 27 75 18 13 2 44 41 45 10 72 39 63 61 30 36 49 48 14 105 54 74 55 28 69 20</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 11 7 87 26 12 29 27 75 18 13 2 44 41 45 10 72 39 63 30 36 49 48 14 105 54 74 55 28 69 20</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\main.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 117</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 143</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 3 39 63 61 30 36 49 48 11 7 87 26 12 29 27 75 18 13 2 44 41 10 72 14 105 54 74 55 28 69 20 50 45 19 23 47 0 62 38 59 16 52 58</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 3 39 63 30 36 49 48 11 7 87 26 12 29 27 75 18 13 2 44 41 10 72 14 105 54 74 55 28 69 20 50 45 19 23 47 0 62 38 59 16 52 58</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\..\Common\Minimal\semtest.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 124</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 146</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 70 39 63 61 30 36 49 48 10 72 14 105 54 74 55 28 69 20 68 50 62</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 70 39 63 30 36 49 48 10 72 14 105 54 74 55 28 69 20 68 50 62</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\..\Common\Minimal\PollQ.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 123</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 145</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 70 39 63 61 30 36 49 48 10 72 14 105 54 74 55 28 69 20 50 47</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 70 39 63 30 36 49 48 10 72 14 105 54 74 55 28 69 20 50 47</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\ParTest\ParTest.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 118</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 144</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 11 7 87 26 12 29 27 75 18 13 2 44 41 10 72 39 63 61 30 36 49 48 14 105 54 74 55 28 59</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 11 7 87 26 12 29 27 75 18 13 2 44 41 10 72 39 63 30 36 49 48 14 105 54 74 55 28 59</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\serial\serial.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 125</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 147</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 11 7 87 26 12 29 27 75 18 13 2 44 41 10 72 39 63 61 30 36 49 48 14 105 54 74 55 28 50 68 58</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 11 7 87 26 12 29 27 75 18 13 2 44 41 10 72 39 63 30 36 49 48 14 105 54 74 55 28 50 68 58</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\Library\source\91x_enet.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 136</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 149</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 10 72 39 63 61 30 36 49 48 14 105 54 74 55 28 69 20 11 7 87 26 12 29 27 75 18 13 2 44 41 67</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 10 72 39 63 30 36 49 48 14 105 54 74 55 28 69 20 11 7 87 26 12 29 27 75 18 13 2 44 41 67</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\webserver\uIP_Task.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 135</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 148</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 67 39 63 61 30 36 49 48 11 7 87 26 12 29 27 75 18 13 2 44 41 10 72 14 105 54 74 55 28 69 20 68 50 9 56 24 53 43 40 57 65 31 8 42 21 35 46 1 66</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 67 39 63 30 36 49 48 11 7 87 26 12 29 27 75 18 13 2 44 41 10 72 14 105 54 74 55 28 69 20 68 50 9 56 24 53 43 40 57 65 31 8 42 21 35 46 1 66</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\Library\source\91x_wdg.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 179</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 157</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 44 7 87 26 13</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 44 7 87 26 13</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\..\..\Source\portable\IAR\STR91x\port.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 181</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 159</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 11 7 87 26 12 29 27 75 18 13 2 44 41 70 39 63 61 30 36 49 48 10 72 14 105 54 74 55 28 69 20</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 11 7 87 26 12 29 27 75 18 13 2 44 41 70 39 63 30 36 49 48 10 72 14 105 54 74 55 28 69 20</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\..\..\Source\queue.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 182</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 160</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 70 39 63 61 30 36 49 48 67 10 72 14 105 54 74 55 28 69 20 15</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 70 39 63 30 36 49 48 67 10 72 14 105 54 74 55 28 69 20 15</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\..\..\Source\portable\IAR\STR91x\portasm.s79</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>AARM</name>\r
-          <file> 129</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>AARM</name>\r
-          <file> 32</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\..\..\Source\tasks.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 183</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 161</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 3 39 63 61 30 36 49 48 70 67 10 72 14 105 54 74 55 28 69 20</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 3 39 63 30 36 49 48 70 67 10 72 14 105 54 74 55 28 69 20</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\91x_init_IAR.s</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>AARM</name>\r
-          <file> 173</file>\r
-        </tool>\r
-      </outputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\91x_vect_IAR.s</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>AARM</name>\r
-          <file> 6</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>AARM</name>\r
-          <file> 105 32</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\apps\webserver\http-strings.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 5</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 130</file>\r
-        </tool>\r
-      </outputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\psock.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 177</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 166</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 3 39 63 61 30 36 49 48 67 56 24 53 43 40 57 65 31 8 42 21 9</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 3 39 63 30 36 49 48 67 56 24 53 43 40 57 65 31 8 42 21 9</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uip_arp.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 128</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 169</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 35 9 56 24 53 43 39 63 61 30 36 49 40 57 65 31 8 42 21 67 48</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 35 9 56 24 53 43 39 63 30 36 49 40 57 65 31 8 42 21 67 48</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\webserver\httpd-cgi.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 174</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 163</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 9 56 24 53 43 39 63 61 30 36 49 40 57 65 31 8 42 21 60 3 48 67</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 9 56 24 53 43 39 63 30 36 49 40 57 65 31 8 42 21 60 3 48 67</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\webserver\httpd-fs.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 175</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 164</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 57 65 56 24 53 43 39 63 61 30 36 49 40 31 8 42 21 73 9 25</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 57 65 56 24 53 43 39 63 30 36 49 40 31 8 42 21 73 9 25</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\webserver\httpd.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 176</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 165</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 9 56 24 53 43 39 63 61 30 36 49 40 57 65 31 8 42 21 60 71 67 48</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 9 56 24 53 43 39 63 30 36 49 40 57 65 31 8 42 21 60 71 67 48</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\..\Common\Minimal\flash.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 171</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 138</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 70 39 63 61 30 36 49 48 10 72 14 105 54 74 55 28 69 20 59 19</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 70 39 63 30 36 49 48 10 72 14 105 54 74 55 28 69 20 59 19</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\..\Common\Minimal\flop.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 172</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 139</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 70 39 63 61 30 36 49 48 4 17 10 72 14 105 54 74 55 28 69 20 16</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 70 39 63 30 36 49 48 4 17 10 72 14 105 54 74 55 28 69 20 16</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\Library\source\91x_gpio.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 186</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 151</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 18 7 87 26 13</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 18 7 87 26 13</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\Library\source\91x_fmi.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 185</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 150</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 29 7 87 26</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 29 7 87 26</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\Library\source\91x_uart.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 121</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 155</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 2 7 87 26 13</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 2 7 87 26 13</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\Library\source\91x_it.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 187</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 152</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 75 11 7 87 26 12 29 27 18 13 2 44 41</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 75 11 7 87 26 12 29 27 18 13 2 44 41</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\Library\source\91x_lib.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 119</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 153</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 7 87 26</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 7 87 26</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\Library\source\91x_scu.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 120</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 154</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 13 7 87 26</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 13 7 87 26</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\..\..\Source\list.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 180</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 158</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 70 39 63 61 30 36 49 48 10 72 14 105 54 74 55 28 20</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 70 39 63 30 36 49 48 10 72 14 105 54 74 55 28 20</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\Library\source\91x_vic.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 122</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 156</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 27 7 87 26 75 11 12 29 18 13 2 44 41</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 27 7 87 26 75 11 12 29 18 13 2 44 41</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\timer.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 178</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 167</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 1 66 10 72 39 63 61 30 36 49 48 14 105 54 74 55 28 46</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 1 66 10 72 39 63 30 36 49 48 14 105 54 74 55 28 46</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\..\Common\ethernet\uIP\uip-1.0\uip\uip.c</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 127</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 168</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>ICCARM</name>\r
-          <file> 9 56 24 53 43 39 63 61 30 36 49 40 57 65 31 8 42 21 33 67 48</file>\r
-        </tool>\r
-        <tool>\r
-          <name>BICOMP</name>\r
-          <file> 9 56 24 53 43 39 63 30 36 49 40 57 65 31 8 42 21 33 67 48</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\THUMB\Obj\RTOSDemo.pbd</name>\r
-      <inputs>\r
-        <tool>\r
-          <name>BILINK</name>\r
-          <file> 149 150 151 152 153 154 155 156 157 131 144 145 132 137 138 139 140 130 163 164 165 141 142 158 143 159 166 160 146 147 161 167 148 168 169</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-    <file>\r
-      <name>$PROJ_DIR$\THUMB\Exe\RTOSDemo.d79</name>\r
-      <outputs>\r
-        <tool>\r
-          <name>XLINK</name>\r
-          <file> 188 184</file>\r
-        </tool>\r
-      </outputs>\r
-      <inputs>\r
-        <tool>\r
-          <name>XLINK</name>\r
-          <file> 96 136 185 186 173 187 119 120 121 6 122 179 51 118 123 34 126 171 172 133 5 174 175 176 134 116 180 117 181 129 177 182 124 125 183 178 135 127 128 64</file>\r
-        </tool>\r
-      </inputs>\r
-    </file>\r
-  </configuration>\r
-</project>\r
-\r
-\r
index b53d01e8a76341e65c7631a682d11485e87be937..9ce851c50ef38b322e1a5b1e2e06e87984ded1a4 100644 (file)
         </option>\r
         <option>\r
           <name>OGLastSavedByProductVersion</name>\r
-          <state>4.40A</state>\r
+          <state>4.41A</state>\r
         </option>\r
         <option>\r
           <name>GeneralMisraRules</name>\r
       <name>ICCARM</name>\r
       <archiveVersion>2</archiveVersion>\r
       <data>\r
-        <version>13</version>\r
+        <version>14</version>\r
         <wantNonLocal>1</wantNonLocal>\r
         <debug>1</debug>\r
         <option>\r
           <state>STR91X_IAR</state>\r
           <state>DEBUG</state>\r
           <state>DONT_RUN_TASK_IN_ARM_MODE_</state>\r
+          <state>PACK_STRUCT_END=</state>\r
+          <state>ALIGN_STRUCT_END=</state>\r
         </option>\r
         <option>\r
           <name>CCPreprocFile</name>\r
           <name>CCStdIncludePath</name>\r
           <state>$TOOLKIT_DIR$\INC\</state>\r
         </option>\r
+        <option>\r
+          <name>CCInlineThreshold</name>\r
+          <version>0</version>\r
+          <state>1</state>\r
+        </option>\r
       </data>\r
     </settings>\r
     <settings>\r
         </option>\r
         <option>\r
           <name>RTConfigPath</name>\r
-          <state>$TOOLKIT_DIR$\LIB\dl5tptinl8n.h</state>\r
+          <state>$TOOLKIT_DIR$\LIB\dl5tpainl8n.h</state>\r
         </option>\r
         <option>\r
           <name>RTLibraryPath</name>\r
       <name>ICCARM</name>\r
       <archiveVersion>2</archiveVersion>\r
       <data>\r
-        <version>13</version>\r
+        <version>14</version>\r
         <wantNonLocal>1</wantNonLocal>\r
         <debug>1</debug>\r
         <option>\r
           <state>STR91X_IAR</state>\r
           <state>DEBUG</state>\r
           <state>_RUN_TASK_IN_ARM_MODE_</state>\r
+          <state>PACK_STRUCT_END=</state>\r
+          <state>ALIGN_STRUCT_END=</state>\r
         </option>\r
         <option>\r
           <name>CCPreprocFile</name>\r
           <name>CCStdIncludePath</name>\r
           <state>$TOOLKIT_DIR$\INC\</state>\r
         </option>\r
+        <option>\r
+          <name>CCInlineThreshold</name>\r
+          <version>0</version>\r
+          <state>1</state>\r
+        </option>\r
       </data>\r
     </settings>\r
     <settings>\r
         <settings>\r
           <name>ICCARM</name>\r
           <data>\r
-            <version>13</version>\r
+            <version>14</version>\r
             <wantNonLocal>1</wantNonLocal>\r
             <debug>1</debug>\r
             <option>\r
               <name>CCStdIncludePath</name>\r
               <state>$TOOLKIT_DIR$\INC\</state>\r
             </option>\r
+            <option>\r
+              <name>CCInlineThreshold</name>\r
+              <version>0</version>\r
+              <state>1</state>\r
+            </option>\r
           </data>\r
         </settings>\r
       </configuration>\r
         <settings>\r
           <name>ICCARM</name>\r
           <data>\r
-            <version>13</version>\r
+            <version>14</version>\r
             <wantNonLocal>1</wantNonLocal>\r
             <debug>1</debug>\r
             <option>\r
               <name>CCStdIncludePath</name>\r
               <state>$TOOLKIT_DIR$\INC\</state>\r
             </option>\r
+            <option>\r
+              <name>CCInlineThreshold</name>\r
+              <version>0</version>\r
+              <state>1</state>\r
+            </option>\r
           </data>\r
         </settings>\r
       </configuration>\r
index 33767401b2dbc71819d822782b780dcadfe9c01e..2a85a6d9af84200ea9e8496cc1243bcb3d9f1373 100644 (file)
@@ -93,7 +93,7 @@ struct tcpip_hdr {
   u16_t tcpchksum;\r
   u8_t urgp[2];\r
   u8_t optdata[4];\r
-};\r
+} PACK_STRUCT_END;\r
 \r
 struct icmpip_hdr {\r
   /* IP header. */\r
@@ -112,7 +112,7 @@ struct icmpip_hdr {
   u16_t icmpchksum;\r
   u16_t id, seqno;\r
   u8_t payload[1];\r
-};\r
+} PACK_STRUCT_END;\r
 \r
 /* ICMP ECHO. */\r
 #define ICMP_ECHO 8\r
index 2843539c5e38535b03786ad3595b6e7eab6b1b42..5b7f78ec9b75d337ec69d493be90239962232582 100644 (file)
@@ -135,7 +135,7 @@ struct uip_eth_addr uip_ethaddr = {{0,0,0,0,0,0}};
 #endif\r
 \r
 #ifndef UIP_CONF_EXTERNAL_BUFFER\r
-u8_t uip_buf[UIP_BUFSIZE + 2];   /* The packet buffer that contains\r
+u8_t uip_buf[UIP_BUFSIZE + 2] ALIGN_STRUCT_END; /* The packet buffer that contains\r
                                    incoming packets. */\r
 #endif /* UIP_CONF_EXTERNAL_BUFFER */\r
 \r
index 92f3ff393f7d30563e71fddf2ef43bd5e22971da..8ff9a240c9cbbd01cee6cfd490c107d733f221dd 100644 (file)
@@ -1417,7 +1417,7 @@ struct uip_tcpip_hdr {
   u16_t tcpchksum;\r
   u8_t urgp[2];\r
   u8_t optdata[4];\r
-};\r
+} PACK_STRUCT_END;\r
 \r
 /* The ICMP and IP headers. */\r
 struct uip_icmpip_hdr {\r
@@ -1453,7 +1453,7 @@ struct uip_icmpip_hdr {
   u8_t icmp6data[16];\r
   u8_t options[1];\r
 #endif /* !UIP_CONF_IPV6 */\r
-};\r
+} PACK_STRUCT_END;\r
 \r
 \r
 /* The UDP and IP headers. */\r
@@ -1485,7 +1485,7 @@ struct uip_udpip_hdr {
     destport;\r
   u16_t udplen;\r
   u16_t udpchksum;\r
-};\r
+} PACK_STRUCT_END;\r
 \r
 \r
 \r
@@ -1541,7 +1541,7 @@ extern uip_ipaddr_t uip_hostaddr, uip_netmask, uip_draddr;
  */\r
 struct uip_eth_addr {\r
   u8_t addr[6];\r
-};\r
+} PACK_STRUCT_END;\r
 \r
 /**\r
  * Calculate the Internet checksum over a buffer.\r
index 96cea8bac7112a9d3ef95ba33d7fcb9ba1f5eac0..577d515272a9f50dd4d9200974e5799047fddd5e 100644 (file)
@@ -74,7 +74,7 @@ struct arp_hdr {
   u16_t sipaddr[2];\r
   struct uip_eth_addr dhwaddr;\r
   u16_t dipaddr[2];\r
-};\r
+} PACK_STRUCT_END;\r
 \r
 struct ethip_hdr {\r
   struct uip_eth_hdr ethhdr;\r
@@ -89,7 +89,7 @@ struct ethip_hdr {
   u16_t ipchksum;\r
   u16_t srcipaddr[2],\r
     destipaddr[2];\r
-};\r
+} PACK_STRUCT_END;\r
 \r
 #define ARP_REQUEST 1\r
 #define ARP_REPLY   2\r
@@ -230,7 +230,7 @@ uip_arp_update(u16_t *ipaddr, struct uip_eth_addr *ethaddr)
  * variable uip_len.\r
  */\r
 /*-----------------------------------------------------------------------------------*/\r
-#if 0\r
+#if 1\r
 void\r
 uip_arp_ipin(void)\r
 {\r
index dc829e0622c7c1e5bfe89ea7c4f7bfe968b03ab9..d6bc1fb0e6b53ff0d4d985a297d1ff5053dff439 100644 (file)
@@ -64,7 +64,7 @@ struct uip_eth_hdr {
   struct uip_eth_addr dest;\r
   struct uip_eth_addr src;\r
   u16_t type;\r
-};\r
+}PACK_STRUCT_END;\r
 \r
 #define UIP_ETHTYPE_ARP 0x0806\r
 #define UIP_ETHTYPE_IP  0x0800\r
@@ -80,8 +80,8 @@ void uip_arp_init(void);
    inserts a new mapping if none exists. The function assumes that an\r
    IP packet with an Ethernet header is present in the uip_buf buffer\r
    and that the length of the packet is in the uip_len variable. */\r
-/*void uip_arp_ipin(void);*/\r
-#define uip_arp_ipin()\r
+void uip_arp_ipin(void);\r
+//#define uip_arp_ipin()\r
 \r
 /* The uip_arp_arpin() should be called when an ARP packet is received\r
    by the Ethernet driver. This function also assumes that the\r
diff --git a/Source/portable/GCC/ARM7_LPC23xx/port.c b/Source/portable/GCC/ARM7_LPC23xx/port.c
new file mode 100644 (file)
index 0000000..ea31578
--- /dev/null
@@ -0,0 +1,235 @@
+/*\r
+       FreeRTOS.org V4.2.1 - Copyright (C) 2003-2007 Richard Barry.\r
+\r
+       This file is part of the FreeRTOS.org distribution.\r
+\r
+       FreeRTOS.org is free software; you can redistribute it and/or modify\r
+       it under the terms of the GNU General Public License as published by\r
+       the Free Software Foundation; either version 2 of the License, or\r
+       (at your option) any later version.\r
+\r
+       FreeRTOS.org is distributed in the hope that it will be useful,\r
+       but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+       GNU General Public License for more details.\r
+\r
+       You should have received a copy of the GNU General Public License\r
+       along with FreeRTOS.org; if not, write to the Free Software\r
+       Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\r
+\r
+       A special exception to the GPL can be applied should you wish to distribute\r
+       a combined work that includes FreeRTOS.org, without being obliged to provide\r
+       the source code for any proprietary components.  See the licensing section \r
+       of http://www.FreeRTOS.org for full details of how and when the exception\r
+       can be applied.\r
+\r
+       ***************************************************************************\r
+       See http://www.FreeRTOS.org for documentation, latest information, license \r
+       and contact details.  Please ensure to read the configuration and relevant \r
+       port sections of the online documentation.\r
+       ***************************************************************************\r
+*/\r
+\r
+\r
+/*-----------------------------------------------------------\r
+ * Implementation of functions defined in portable.h for the ARM7 port.\r
+ *\r
+ * Components that can be compiled to either ARM or THUMB mode are\r
+ * contained in this file.  The ISR routines, which can only be compiled\r
+ * to ARM mode are contained in portISR.c.\r
+ *----------------------------------------------------------*/\r
+\r
+\r
+/* Standard includes. */\r
+#include <stdlib.h>\r
+\r
+/* Scheduler includes. */\r
+#include "FreeRTOS.h"\r
+#include "task.h"\r
+\r
+/* Constants required to setup the task context. */\r
+#define portINITIAL_SPSR                               ( ( portSTACK_TYPE ) 0x1f ) /* System mode, ARM mode, interrupts enabled. */\r
+#define portTHUMB_MODE_BIT                             ( ( portSTACK_TYPE ) 0x20 )\r
+#define portINSTRUCTION_SIZE                   ( ( portSTACK_TYPE ) 4 )\r
+#define portNO_CRITICAL_SECTION_NESTING        ( ( portSTACK_TYPE ) 0 )\r
+\r
+/* Constants required to setup the tick ISR. */\r
+#define portENABLE_TIMER                ( ( unsigned portCHAR ) 0x01 )\r
+#define portPRESCALE_VALUE              0x00\r
+#define portINTERRUPT_ON_MATCH          ( ( unsigned portLONG ) 0x01 )\r
+#define portRESET_COUNT_ON_MATCH        ( ( unsigned portLONG ) 0x02 )\r
+\r
+/* Constants required to setup the VIC for the tick ISR. */\r
+#define portTIMER_VIC_CHANNEL           ( ( unsigned portLONG ) 0x0004 )\r
+#define portTIMER_VIC_CHANNEL_BIT       ( ( unsigned portLONG ) 0x0010 )\r
+#define portTIMER_VIC_ENABLE            ( ( unsigned portLONG ) 0x0020 )\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+/* Setup the timer to generate the tick interrupts. */\r
+static void prvSetupTimerInterrupt( void );\r
+\r
+/* \r
+ * The scheduler can only be started from ARM mode, so \r
+ * vPortISRStartFirstSTask() is defined in portISR.c. \r
+ */\r
+extern void vPortISRStartFirstTask( void );\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+/* \r
+ * Initialise the stack of a task to look exactly as if a call to \r
+ * portSAVE_CONTEXT had been called.\r
+ *\r
+ * See header file for description. \r
+ */\r
+portSTACK_TYPE *pxPortInitialiseStack( portSTACK_TYPE *pxTopOfStack, pdTASK_CODE pxCode, void *pvParameters )\r
+{\r
+portSTACK_TYPE *pxOriginalTOS;\r
+\r
+       pxOriginalTOS = pxTopOfStack;\r
+\r
+       /* Setup the initial stack of the task.  The stack is set exactly as \r
+       expected by the portRESTORE_CONTEXT() macro. */\r
+\r
+       /* First on the stack is the return address - which in this case is the\r
+       start of the task.  The offset is added to make the return address appear\r
+       as it would within an IRQ ISR. */\r
+       *pxTopOfStack = ( portSTACK_TYPE ) pxCode + portINSTRUCTION_SIZE;               \r
+       pxTopOfStack--;\r
+\r
+       *pxTopOfStack = ( portSTACK_TYPE ) 0xaaaaaaaa;  /* R14 */\r
+       pxTopOfStack--; \r
+       *pxTopOfStack = ( portSTACK_TYPE ) pxOriginalTOS; /* Stack used when task starts goes in R13. */\r
+       pxTopOfStack--;\r
+       *pxTopOfStack = ( portSTACK_TYPE ) 0x12121212;  /* R12 */\r
+       pxTopOfStack--; \r
+       *pxTopOfStack = ( portSTACK_TYPE ) 0x11111111;  /* R11 */\r
+       pxTopOfStack--; \r
+       *pxTopOfStack = ( portSTACK_TYPE ) 0x10101010;  /* R10 */\r
+       pxTopOfStack--; \r
+       *pxTopOfStack = ( portSTACK_TYPE ) 0x09090909;  /* R9 */\r
+       pxTopOfStack--; \r
+       *pxTopOfStack = ( portSTACK_TYPE ) 0x08080808;  /* R8 */\r
+       pxTopOfStack--; \r
+       *pxTopOfStack = ( portSTACK_TYPE ) 0x07070707;  /* R7 */\r
+       pxTopOfStack--; \r
+       *pxTopOfStack = ( portSTACK_TYPE ) 0x06060606;  /* R6 */\r
+       pxTopOfStack--; \r
+       *pxTopOfStack = ( portSTACK_TYPE ) 0x05050505;  /* R5 */\r
+       pxTopOfStack--; \r
+       *pxTopOfStack = ( portSTACK_TYPE ) 0x04040404;  /* R4 */\r
+       pxTopOfStack--; \r
+       *pxTopOfStack = ( portSTACK_TYPE ) 0x03030303;  /* R3 */\r
+       pxTopOfStack--; \r
+       *pxTopOfStack = ( portSTACK_TYPE ) 0x02020202;  /* R2 */\r
+       pxTopOfStack--; \r
+       *pxTopOfStack = ( portSTACK_TYPE ) 0x01010101;  /* R1 */\r
+       pxTopOfStack--; \r
+\r
+       /* When the task starts is will expect to find the function parameter in\r
+       R0. */\r
+       *pxTopOfStack = ( portSTACK_TYPE ) pvParameters; /* R0 */\r
+       pxTopOfStack--;\r
+\r
+       /* The last thing onto the stack is the status register, which is set for\r
+       system mode, with interrupts enabled. */\r
+       *pxTopOfStack = ( portSTACK_TYPE ) portINITIAL_SPSR;\r
+\r
+       #ifdef THUMB_INTERWORK\r
+       {\r
+               /* We want the task to start in thumb mode. */\r
+               *pxTopOfStack |= portTHUMB_MODE_BIT;\r
+       }\r
+       #endif\r
+\r
+       pxTopOfStack--;\r
+\r
+       /* Some optimisation levels use the stack differently to others.  This \r
+       means the interrupt flags cannot always be stored on the stack and will\r
+       instead be stored in a variable, which is then saved as part of the\r
+       tasks context. */\r
+       *pxTopOfStack = portNO_CRITICAL_SECTION_NESTING;\r
+\r
+       return pxTopOfStack;\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+portBASE_TYPE xPortStartScheduler( void )\r
+{\r
+       /* Start the timer that generates the tick ISR.  Interrupts are disabled\r
+       here already. */\r
+       prvSetupTimerInterrupt();\r
+\r
+       /* Start the first task. */\r
+       vPortISRStartFirstTask();       \r
+\r
+       /* Should not get here! */\r
+       return 0;\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+void vPortEndScheduler( void )\r
+{\r
+       /* It is unlikely that the ARM port will require this function as there\r
+       is nothing to return to.  */\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+/*\r
+ * Setup the timer 0 to generate the tick interrupts at the required frequency.\r
+ */\r
+static void prvSetupTimerInterrupt( void )\r
+{\r
+unsigned portLONG ulCompareMatch;\r
+\r
+       PCLKSEL0 = (PCLKSEL0 & (~(0x3<<2))) | (0x01 << 2);\r
+       T0TCR  = 2;         /* Stop and reset the timer */\r
+       T0CTCR = 0;         /* Timer mode               */\r
+       \r
+       /* A 1ms tick does not require the use of the timer prescale.  This is\r
+       defaulted to zero but can be used if necessary. */\r
+       T0PR = portPRESCALE_VALUE;\r
+\r
+       /* Calculate the match value required for our wanted tick rate. */\r
+       ulCompareMatch = configCPU_CLOCK_HZ / configTICK_RATE_HZ;\r
+\r
+       /* Protect against divide by zero.  Using an if() statement still results\r
+       in a warning - hence the #if. */\r
+       #if portPRESCALE_VALUE != 0\r
+       {\r
+               ulCompareMatch /= ( portPRESCALE_VALUE + 1 );\r
+       }\r
+       #endif\r
+       T0MR1 = ulCompareMatch;\r
+\r
+       /* Generate tick with timer 0 compare match. */\r
+       T0MCR  = (3 << 3);  /* Reset timer on match and generate interrupt */\r
+\r
+       /* Setup the VIC for the timer. */\r
+       VICIntEnable = 0x00000010;\r
+       \r
+       /* The ISR installed depends on whether the preemptive or cooperative\r
+       scheduler is being used. */\r
+       #if configUSE_PREEMPTION == 1\r
+       {\r
+               extern void ( vPreemptiveTick )( void );\r
+               VICVectAddr4 = ( portLONG ) vPreemptiveTick;\r
+       }\r
+       #else\r
+       {\r
+               extern void ( vNonPreemptiveTick )( void );\r
+               VICVectAddr4 = ( portLONG ) vNonPreemptiveTick;\r
+       }\r
+       #endif\r
+\r
+       VICVectPriority4 = 1;\r
+\r
+       /* Start the timer - interrupts are disabled when this function is called\r
+       so it is okay to do this here. */\r
+       T0TCR = portENABLE_TIMER;\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+\r
+\r
diff --git a/Source/portable/GCC/ARM7_LPC23xx/portISR.c b/Source/portable/GCC/ARM7_LPC23xx/portISR.c
new file mode 100644 (file)
index 0000000..c88dcbb
--- /dev/null
@@ -0,0 +1,220 @@
+/*\r
+       FreeRTOS.org V4.2.1 - Copyright (C) 2003-2007 Richard Barry.\r
+\r
+       This file is part of the FreeRTOS.org distribution.\r
+\r
+       FreeRTOS.org is free software; you can redistribute it and/or modify\r
+       it under the terms of the GNU General Public License as published by\r
+       the Free Software Foundation; either version 2 of the License, or\r
+       (at your option) any later version.\r
+\r
+       FreeRTOS.org is distributed in the hope that it will be useful,\r
+       but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+       GNU General Public License for more details.\r
+\r
+       You should have received a copy of the GNU General Public License\r
+       along with FreeRTOS.org; if not, write to the Free Software\r
+       Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\r
+\r
+       A special exception to the GPL can be applied should you wish to distribute\r
+       a combined work that includes FreeRTOS.org, without being obliged to provide\r
+       the source code for any proprietary components.  See the licensing section \r
+       of http://www.FreeRTOS.org for full details of how and when the exception\r
+       can be applied.\r
+\r
+       ***************************************************************************\r
+       See http://www.FreeRTOS.org for documentation, latest information, license \r
+       and contact details.  Please ensure to read the configuration and relevant \r
+       port sections of the online documentation.\r
+       ***************************************************************************\r
+*/\r
+\r
+\r
+/*-----------------------------------------------------------\r
+ * Components that can be compiled to either ARM or THUMB mode are\r
+ * contained in port.c  The ISR routines, which can only be compiled\r
+ * to ARM mode, are contained in this file.\r
+ *----------------------------------------------------------*/\r
+\r
+/* Scheduler includes. */\r
+#include "FreeRTOS.h"\r
+#include "task.h"\r
+\r
+/* Constants required to handle interrupts. */\r
+#define portTIMER_MATCH_ISR_BIT                ( ( unsigned portCHAR ) 0x01 )\r
+#define portCLEAR_VIC_INTERRUPT                ( ( unsigned portLONG ) 0 )\r
+\r
+/* Constants required to handle critical sections. */\r
+#define portNO_CRITICAL_NESTING                ( ( unsigned portLONG ) 0 )\r
+volatile unsigned portLONG ulCriticalNesting = 9999UL;\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+/* ISR to handle manual context switches (from a call to taskYIELD()). */\r
+void vPortYieldProcessor( void ) __attribute__((interrupt("SWI"), naked));\r
+\r
+/* \r
+ * The scheduler can only be started from ARM mode, hence the inclusion of this\r
+ * function here.\r
+ */\r
+void vPortISRStartFirstTask( void );\r
+/*-----------------------------------------------------------*/\r
+\r
+void vPortISRStartFirstTask( void )\r
+{\r
+       /* Simply start the scheduler.  This is included here as it can only be\r
+       called from ARM mode. */\r
+       portRESTORE_CONTEXT();\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+/*\r
+ * Called by portYIELD() or taskYIELD() to manually force a context switch.\r
+ *\r
+ * When a context switch is performed from the task level the saved task \r
+ * context is made to look as if it occurred from within the tick ISR.  This\r
+ * way the same restore context function can be used when restoring the context\r
+ * saved from the ISR or that saved from a call to vPortYieldProcessor.\r
+ */\r
+void vPortYieldProcessor( void )\r
+{\r
+       /* Within an IRQ ISR the link register has an offset from the true return \r
+       address, but an SWI ISR does not.  Add the offset manually so the same \r
+       ISR return code can be used in both cases. */\r
+       asm volatile ( "ADD             LR, LR, #4" );\r
+\r
+       /* Perform the context switch.  First save the context of the current task. */\r
+       portSAVE_CONTEXT();\r
+\r
+       /* Find the highest priority task that is ready to run. */\r
+       vTaskSwitchContext();\r
+\r
+       /* Restore the context of the new task. */\r
+       portRESTORE_CONTEXT();  \r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+/* \r
+ * The ISR used for the scheduler tick depends on whether the cooperative or\r
+ * the preemptive scheduler is being used.\r
+ */\r
+\r
+\r
+#if configUSE_PREEMPTION == 0\r
+\r
+       /* The cooperative scheduler requires a normal IRQ service routine to \r
+       simply increment the system tick. */\r
+       void vNonPreemptiveTick( void ) __attribute__ ((interrupt ("IRQ")));\r
+       void vNonPreemptiveTick( void )\r
+       {       \r
+\r
+               FIO2SET |= (1<<0);\r
+\r
+               vTaskIncrementTick();\r
+               T0IR = 2;\r
+               VICVectAddr = portCLEAR_VIC_INTERRUPT;\r
+       }\r
+\r
+#else\r
+\r
+       /* The preemptive scheduler is defined as "naked" as the full context is\r
+       saved on entry as part of the context switch. */\r
+       void vPreemptiveTick( void ) __attribute__((naked));\r
+       void vPreemptiveTick( void )\r
+       {\r
+               /* Save the context of the interrupted task. */\r
+               portSAVE_CONTEXT();     \r
+\r
+               /* Increment the RTOS tick count, then look for the highest priority \r
+               task that is ready to run. */\r
+               vTaskIncrementTick();\r
+               vTaskSwitchContext();\r
+\r
+               /* Ready for the next interrupt. */\r
+               T0IR = 2;\r
+               VICAddress = portCLEAR_VIC_INTERRUPT;\r
+               \r
+               /* Restore the context of the new task. */\r
+               portRESTORE_CONTEXT();\r
+       }\r
+\r
+#endif\r
+/*-----------------------------------------------------------*/\r
+\r
+/*\r
+ * The interrupt management utilities can only be called from ARM mode.  When\r
+ * THUMB_INTERWORK is defined the utilities are defined as functions here to\r
+ * ensure a switch to ARM mode.  When THUMB_INTERWORK is not defined then\r
+ * the utilities are defined as macros in portmacro.h - as per other ports.\r
+ */\r
+#ifdef THUMB_INTERWORK\r
+\r
+       void vPortDisableInterruptsFromThumb( void ) __attribute__ ((naked));\r
+       void vPortEnableInterruptsFromThumb( void ) __attribute__ ((naked));\r
+\r
+       void vPortDisableInterruptsFromThumb( void )\r
+       {\r
+               asm volatile ( \r
+                       "STMDB  SP!, {R0}               \n\t"   /* Push R0.                                                                     */\r
+                       "MRS    R0, CPSR                \n\t"   /* Get CPSR.                                                            */\r
+                       "ORR    R0, R0, #0xC0   \n\t"   /* Disable IRQ, FIQ.                                            */\r
+                       "MSR    CPSR, R0                \n\t"   /* Write back modified value.                           */\r
+                       "LDMIA  SP!, {R0}               \n\t"   /* Pop R0.                                                                      */\r
+                       "BX             R14" );                                 /* Return back to thumb.                                        */\r
+       }\r
+                       \r
+       void vPortEnableInterruptsFromThumb( void )\r
+       {\r
+               asm volatile ( \r
+                       "STMDB  SP!, {R0}               \n\t"   /* Push R0.                                                                     */      \r
+                       "MRS    R0, CPSR                \n\t"   /* Get CPSR.                                                            */      \r
+                       "BIC    R0, R0, #0xC0   \n\t"   /* Enable IRQ, FIQ.                                                     */      \r
+                       "MSR    CPSR, R0                \n\t"   /* Write back modified value.                           */      \r
+                       "LDMIA  SP!, {R0}               \n\t"   /* Pop R0.                                                                      */\r
+                       "BX             R14" );                                 /* Return back to thumb.                                        */\r
+       }\r
+\r
+#endif /* THUMB_INTERWORK */\r
+\r
+/* The code generated by the GCC compiler uses the stack in different ways at\r
+different optimisation levels.  The interrupt flags can therefore not always\r
+be saved to the stack.  Instead the critical section nesting level is stored\r
+in a variable, which is then saved as part of the stack context. */\r
+void vPortEnterCritical( void )\r
+{\r
+       /* Disable interrupts as per portDISABLE_INTERRUPTS();                                                  */\r
+       asm volatile ( \r
+               "STMDB  SP!, {R0}                       \n\t"   /* Push R0.                                                             */\r
+               "MRS    R0, CPSR                        \n\t"   /* Get CPSR.                                                    */\r
+               "ORR    R0, R0, #0xC0           \n\t"   /* Disable IRQ, FIQ.                                    */\r
+               "MSR    CPSR, R0                        \n\t"   /* Write back modified value.                   */\r
+               "LDMIA  SP!, {R0}" );                           /* Pop R0.                                                              */\r
+\r
+       /* Now interrupts are disabled ulCriticalNesting can be accessed \r
+       directly.  Increment ulCriticalNesting to keep a count of how many times\r
+       portENTER_CRITICAL() has been called. */\r
+       ulCriticalNesting++;\r
+}\r
+\r
+void vPortExitCritical( void )\r
+{\r
+       if( ulCriticalNesting > portNO_CRITICAL_NESTING )\r
+       {\r
+               /* Decrement the nesting count as we are leaving a critical section. */\r
+               ulCriticalNesting--;\r
+\r
+               /* If the nesting level has reached zero then interrupts should be\r
+               re-enabled. */\r
+               if( ulCriticalNesting == portNO_CRITICAL_NESTING )\r
+               {\r
+                       /* Enable interrupts as per portEXIT_CRITICAL().                                        */\r
+                       asm volatile ( \r
+                               "STMDB  SP!, {R0}               \n\t"   /* Push R0.                                             */      \r
+                               "MRS    R0, CPSR                \n\t"   /* Get CPSR.                                    */      \r
+                               "BIC    R0, R0, #0xC0   \n\t"   /* Enable IRQ, FIQ.                             */      \r
+                               "MSR    CPSR, R0                \n\t"   /* Write back modified value.   */      \r
+                               "LDMIA  SP!, {R0}" );                   /* Pop R0.                                              */\r
+               }\r
+       }\r
+}\r
diff --git a/Source/portable/GCC/ARM7_LPC23xx/portmacro.h b/Source/portable/GCC/ARM7_LPC23xx/portmacro.h
new file mode 100644 (file)
index 0000000..beca9cc
--- /dev/null
@@ -0,0 +1,264 @@
+/*\r
+       FreeRTOS.org V4.2.1 - Copyright (C) 2003-2007 Richard Barry.\r
+\r
+       This file is part of the FreeRTOS.org distribution.\r
+\r
+       FreeRTOS.org is free software; you can redistribute it and/or modify\r
+       it under the terms of the GNU General Public License as published by\r
+       the Free Software Foundation; either version 2 of the License, or\r
+       (at your option) any later version.\r
+\r
+       FreeRTOS.org is distributed in the hope that it will be useful,\r
+       but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+       GNU General Public License for more details.\r
+\r
+       You should have received a copy of the GNU General Public License\r
+       along with FreeRTOS.org; if not, write to the Free Software\r
+       Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\r
+\r
+       A special exception to the GPL can be applied should you wish to distribute\r
+       a combined work that includes FreeRTOS.org, without being obliged to provide\r
+       the source code for any proprietary components.  See the licensing section \r
+       of http://www.FreeRTOS.org for full details of how and when the exception\r
+       can be applied.\r
+\r
+       ***************************************************************************\r
+       See http://www.FreeRTOS.org for documentation, latest information, license \r
+       and contact details.  Please ensure to read the configuration and relevant \r
+       port sections of the online documentation.\r
+       ***************************************************************************\r
+*/\r
+\r
+/*\r
+       Changes from V3.2.3\r
+       \r
+       + Modified portENTER_SWITCHING_ISR() to allow use with GCC V4.0.1.\r
+\r
+       Changes from V3.2.4\r
+\r
+       + Removed the use of the %0 parameter within the assembler macros and \r
+         replaced them with hard coded registers.  This will ensure the\r
+         assembler does not select the link register as the temp register as\r
+         was occasionally happening previously.\r
+\r
+       + The assembler statements are now included in a single asm block rather\r
+         than each line having its own asm block.\r
+*/\r
+\r
+#ifndef PORTMACRO_H\r
+#define PORTMACRO_H\r
+\r
+/*-----------------------------------------------------------\r
+ * Port specific definitions.  \r
+ *\r
+ * The settings in this file configure FreeRTOS correctly for the\r
+ * given hardware and compiler.\r
+ *\r
+ * These settings should not be altered.\r
+ *-----------------------------------------------------------\r
+ */\r
+\r
+/* Type definitions. */\r
+#define portCHAR               char\r
+#define portFLOAT              float\r
+#define portDOUBLE             double\r
+#define portLONG               long\r
+#define portSHORT              short\r
+#define portSTACK_TYPE unsigned portLONG\r
+#define portBASE_TYPE  portLONG\r
+\r
+#if( configUSE_16_BIT_TICKS == 1 )\r
+       typedef unsigned portSHORT portTickType;\r
+       #define portMAX_DELAY ( portTickType ) 0xffff\r
+#else\r
+       typedef unsigned portLONG portTickType;\r
+       #define portMAX_DELAY ( portTickType ) 0xffffffff\r
+#endif\r
+/*-----------------------------------------------------------*/        \r
+\r
+/* Architecture specifics. */\r
+#define portSTACK_GROWTH                       ( -1 )\r
+#define portTICK_RATE_MS                       ( ( portTickType ) 1000 / configTICK_RATE_HZ )          \r
+#define portBYTE_ALIGNMENT                     4\r
+#define portNOP()                                      asm volatile ( "NOP" );\r
+/*-----------------------------------------------------------*/        \r
+\r
+\r
+/* Scheduler utilities. */\r
+\r
+/*\r
+ * portRESTORE_CONTEXT, portRESTORE_CONTEXT, portENTER_SWITCHING_ISR\r
+ * and portEXIT_SWITCHING_ISR can only be called from ARM mode, but\r
+ * are included here for efficiency.  An attempt to call one from\r
+ * THUMB mode code will result in a compile time error.\r
+ */\r
+\r
+#define portRESTORE_CONTEXT()                                                                                  \\r
+{                                                                                                                                              \\r
+extern volatile void * volatile pxCurrentTCB;                                                  \\r
+extern volatile unsigned portLONG ulCriticalNesting;                                   \\r
+                                                                                                                                               \\r
+       /* Set the LR to the task stack. */                                                                     \\r
+       asm volatile (                                                                                                          \\r
+       "LDR            R0, =pxCurrentTCB                                                               \n\t"   \\r
+       "LDR            R0, [R0]                                                                                \n\t"   \\r
+       "LDR            LR, [R0]                                                                                \n\t"   \\r
+                                                                                                                                               \\r
+       /* The critical nesting depth is the first item on the stack. */        \\r
+       /* Load it into the ulCriticalNesting variable. */                                      \\r
+       "LDR            R0, =ulCriticalNesting                                                  \n\t"   \\r
+       "LDMFD  LR!, {R1}                                                                                       \n\t"   \\r
+       "STR            R1, [R0]                                                                                \n\t"   \\r
+                                                                                                                                               \\r
+       /* Get the SPSR from the stack. */                                                                      \\r
+       "LDMFD  LR!, {R0}                                                                                       \n\t"   \\r
+       "MSR            SPSR, R0                                                                                \n\t"   \\r
+                                                                                                                                               \\r
+       /* Restore all system mode registers for the task. */                           \\r
+       "LDMFD  LR, {R0-R14}^                                                                           \n\t"   \\r
+       "NOP                                                                                                            \n\t"   \\r
+                                                                                                                                               \\r
+       /* Restore the return address. */                                                                       \\r
+       "LDR            LR, [LR, #+60]                                                                  \n\t"   \\r
+                                                                                                                                               \\r
+       /* And return - correcting the offset in the LR to obtain the */        \\r
+       /* correct address. */                                                                                          \\r
+       "SUBS   PC, LR, #4                                                                                      \n\t"   \\r
+       );                                                                                                                                      \\r
+       ( void ) ulCriticalNesting;                                                                                     \\r
+       ( void ) pxCurrentTCB;                                                                                          \\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+#define portSAVE_CONTEXT()                                                                                             \\r
+{                                                                                                                                              \\r
+extern volatile void * volatile pxCurrentTCB;                                                  \\r
+extern volatile unsigned portLONG ulCriticalNesting;                                   \\r
+                                                                                                                                               \\r
+       /* Push R0 as we are going to use the register. */                                      \\r
+       asm volatile (                                                                                                          \\r
+       "STMDB  SP!, {R0}                                                                                       \n\t"   \\r
+                                                                                                                                               \\r
+       /* Set R0 to point to the task stack pointer. */                                        \\r
+       "STMDB  SP,{SP}^                                                                                        \n\t"   \\r
+       "NOP                                                                                                            \n\t"   \\r
+       "SUB    SP, SP, #4                                                                                      \n\t"   \\r
+       "LDMIA  SP!,{R0}                                                                                        \n\t"   \\r
+                                                                                                                                               \\r
+       /* Push the return address onto the stack. */                                           \\r
+       "STMDB  R0!, {LR}                                                                                       \n\t"   \\r
+                                                                                                                                               \\r
+       /* Now we have saved LR we can use it instead of R0. */                         \\r
+       "MOV    LR, R0                                                                                          \n\t"   \\r
+                                                                                                                                               \\r
+       /* Pop R0 so we can save it onto the system mode stack. */                      \\r
+       "LDMIA  SP!, {R0}                                                                                       \n\t"   \\r
+                                                                                                                                               \\r
+       /* Push all the system mode registers onto the task stack. */           \\r
+       "STMDB  LR,{R0-LR}^                                                                                     \n\t"   \\r
+       "NOP                                                                                                            \n\t"   \\r
+       "SUB    LR, LR, #60                                                                                     \n\t"   \\r
+                                                                                                                                               \\r
+       /* Push the SPSR onto the task stack. */                                                        \\r
+       "MRS    R0, SPSR                                                                                        \n\t"   \\r
+       "STMDB  LR!, {R0}                                                                                       \n\t"   \\r
+                                                                                                                                               \\r
+       "LDR    R0, =ulCriticalNesting                                                          \n\t"   \\r
+       "LDR    R0, [R0]                                                                                        \n\t"   \\r
+       "STMDB  LR!, {R0}                                                                                       \n\t"   \\r
+                                                                                                                                               \\r
+       /* Store the new top of stack for the task. */                                          \\r
+       "LDR    R0, =pxCurrentTCB                                                                       \n\t"   \\r
+       "LDR    R0, [R0]                                                                                        \n\t"   \\r
+       "STR    LR, [R0]                                                                                        \n\t"   \\r
+       );                                                                                                                                      \\r
+       ( void ) ulCriticalNesting;                                                                                     \\r
+       ( void ) pxCurrentTCB;                                                                                          \\r
+}\r
+\r
+\r
+/*-----------------------------------------------------------\r
+ * ISR entry and exit macros.  These are only required if a task switch\r
+ * is required from the ISR.\r
+ *----------------------------------------------------------*/\r
+\r
+\r
+#define portENTER_SWITCHING_ISR()                                                                              \\r
+       /* Save the context of the interrupted task. */                                         \\r
+       portSAVE_CONTEXT();                                                                                                     \\r
+                                                                                                                                               \\r
+       /* We don't know the stack requirements for the ISR, so the frame */\\r
+       /* pointer will be set to the top of the task stack, and the stack*/\\r
+       /* pointer left where it is.  The IRQ stack will get used for any */\\r
+       /* functions calls made by this ISR. */                                                         \\r
+       asm volatile ( "SUB             R11, LR, #4" );                                                 \\r
+       {\r
+\r
+#define portEXIT_SWITCHING_ISR( SwitchRequired )                                               \\r
+               /* If a switch is required then we just need to call */                 \\r
+               /* vTaskSwitchContext() as the context has already been */              \\r
+               /* saved. */                                                                                                    \\r
+               if( SwitchRequired )                                                                                    \\r
+               {                                                                                                                               \\r
+                       vTaskSwitchContext();                                                                           \\r
+               }                                                                                                                               \\r
+       }                                                                                                                                       \\r
+       /* Restore the context of which ever task is now the highest */         \\r
+       /* priority that is ready to run. */                                                            \\r
+       portRESTORE_CONTEXT();\r
+\r
+#define portYIELD()                                    asm volatile ( "SWI" ); \r
+/*-----------------------------------------------------------*/\r
+\r
+\r
+/* Critical section management. */\r
+\r
+/*\r
+ * The interrupt management utilities can only be called from ARM mode.  When\r
+ * THUMB_INTERWORK is defined the utilities are defined as functions in \r
+ * portISR.c to ensure a switch to ARM mode.  When THUMB_INTERWORK is not \r
+ * defined then the utilities are defined as macros here - as per other ports.\r
+ */\r
+\r
+#ifdef THUMB_INTERWORK\r
+\r
+       extern void vPortDisableInterruptsFromThumb( void ) __attribute__ ((naked));\r
+       extern void vPortEnableInterruptsFromThumb( void ) __attribute__ ((naked));\r
+\r
+       #define portDISABLE_INTERRUPTS()        vPortDisableInterruptsFromThumb()\r
+       #define portENABLE_INTERRUPTS()         vPortEnableInterruptsFromThumb()\r
+       \r
+#else\r
+\r
+       #define portDISABLE_INTERRUPTS()                                                                                        \\r
+               asm volatile (                                                                                                                  \\r
+                       "STMDB  SP!, {R0}               \n\t"   /* Push R0.                                             */      \\r
+                       "MRS    R0, CPSR                \n\t"   /* Get CPSR.                                    */      \\r
+                       "ORR    R0, R0, #0xC0   \n\t"   /* Disable IRQ, FIQ.                    */      \\r
+                       "MSR    CPSR, R0                \n\t"   /* Write back modified value.   */      \\r
+                       "LDMIA  SP!, {R0}                       " )     /* Pop R0.                                              */\r
+                       \r
+       #define portENABLE_INTERRUPTS()                                                                                         \\r
+               asm volatile (                                                                                                                  \\r
+                       "STMDB  SP!, {R0}               \n\t"   /* Push R0.                                             */      \\r
+                       "MRS    R0, CPSR                \n\t"   /* Get CPSR.                                    */      \\r
+                       "BIC    R0, R0, #0xC0   \n\t"   /* Enable IRQ, FIQ.                             */      \\r
+                       "MSR    CPSR, R0                \n\t"   /* Write back modified value.   */      \\r
+                       "LDMIA  SP!, {R0}                       " )     /* Pop R0.                                              */\r
+\r
+#endif /* THUMB_INTERWORK */\r
+\r
+extern void vPortEnterCritical( void );\r
+extern void vPortExitCritical( void );\r
+\r
+#define portENTER_CRITICAL()           vPortEnterCritical();\r
+#define portEXIT_CRITICAL()                    vPortExitCritical();\r
+/*-----------------------------------------------------------*/\r
+\r
+/* Task function macros as described on the FreeRTOS.org WEB site. */\r
+#define portTASK_FUNCTION_PROTO( vFunction, pvParameters ) void vFunction( void *pvParameters )\r
+#define portTASK_FUNCTION( vFunction, pvParameters ) void vFunction( void *pvParameters )\r
+\r
+#endif /* PORTMACRO_H */\r
+\r