Browse Source

add lcd driver; add gui routine

git-svn-id: https://rt-thread.googlecode.com/svn/trunk@105 bbd45198-f89e-11dd-88c7-29a3b14d5316
bernard.xiong 15 years ago
parent
commit
d3c6a6abb6

+ 35 - 35
bsp/stm32_radio/application.c

@@ -22,6 +22,8 @@
 
 #include <stm32f10x.h>
 #include "board.h"
+#include "netbuffer.h"
+#include "lcd.h"
 
 #ifdef RT_USING_DFS
 /* dfs init */
@@ -39,6 +41,11 @@
 #include <lwip/api.h>
 #endif
 
+#ifdef RT_USING_RTGUI
+#include <rtgui/rtgui.h>
+#include <rtgui/rtgui_system.h>
+#endif
+
 /*
 key_enter   PA0
 key_down    PA1
@@ -77,41 +84,6 @@ void rt_key_entry(void *parameter)
     }
 }
 
-extern rt_err_t lcd_hw_init(void);
-void rt_lcd_entry(void *parameter)
-{
-    rt_device_t device;
-    unsigned int i,k;
-    unsigned short color[]={0xf800,0x07e0,0x001f,0xffe0,0x0000,0xffff,0x07ff,0xf81f};
-
-    lcd_hw_init();
-
-    device = rt_device_find("lcd");
-
-    rt_kprintf("Now test the LCD......\r\n");
-    while (1)
-    {
-        for (k=0;k<8;k++)
-        {
-            for (i=0;i<320*240;i++)
-            {
-                device->write(device,i*2,&color[k],2);
-            }
-            rt_thread_delay(RT_TICK_PER_SECOND);
-        }
-    }
-}
-
-void lcd_test()
-{
-    rt_thread_t lcd_tid;
-    lcd_tid = rt_thread_create("lcd",
-                               rt_lcd_entry, RT_NULL,
-                               1024, 30, 5);
-    if (lcd_tid != RT_NULL) rt_thread_startup(lcd_tid);
-}
-FINSH_FUNCTION_EXPORT(lcd_test, test lcd)
-
 /* thread phase init */
 void rt_init_thread_entry(void *parameter)
 {
@@ -146,12 +118,40 @@ void rt_init_thread_entry(void *parameter)
 	/* init netbuf worker */
 	net_buf_init(320 * 1024);
 #endif
+
+	/* RTGUI Initialization */
+#ifdef RT_USING_RTGUI
+	{
+		rtgui_rect_t rect;
+
+		rtgui_system_server_init();
+
+		/* register dock panel */
+		rect.x1 = 0;
+		rect.y1 = 0;
+		rect.x2 = 240;
+		rect.y2 = 25;
+
+		rtgui_panel_register("info", &rect);
+
+		/* register main panel */
+		rect.x1 = 0;
+		rect.y1 = 25;
+		rect.x2 = 240;
+		rect.y2 = 320;
+		rtgui_panel_register("main", &rect);
+
+		rt_hw_lcd_init();
+	}
+#endif
 }
 
 int rt_application_init()
 {
     rt_thread_t init_thread;
 
+	rt_hw_lcd_init();
+
 #if (RT_THREAD_PRIORITY_MAX == 32)
     init_thread = rt_thread_create("init",
                                    rt_init_thread_entry, RT_NULL,

+ 41 - 9
bsp/stm32_radio/board.c

@@ -178,6 +178,31 @@ void rt_hw_board_init()
     }
 }
 
+#if STM32_CONSOLE_USART == 1
+#define CONSOLE_RX_PIN	GPIO_Pin_9
+#define CONSOLE_TX_PIN	GPIO_Pin_10
+#define CONSOLE_GPIO	GPIOA
+#define CONSOLE_USART	USART1
+#elif STM32_CONSOLE_USART == 2
+
+#if defined(STM32_LD) || defined(STM32_MD)
+	#define CONSOLE_RX_PIN	GPIO_Pin_6
+	#define CONSOLE_TX_PIN	GPIO_Pin_5
+	#define CONSOLE_GPIO	GPIOD
+#elif defined(STM32_HD)
+	#define CONSOLE_RX_PIN	GPIO_Pin_3
+	#define CONSOLE_TX_PIN	GPIO_Pin_2
+	#define CONSOLE_GPIO	GPIOA
+#endif
+
+#define CONSOLE_USART	USART2
+#elif STM32_CONSOLE_USART == 2
+#define CONSOLE_RX_PIN	GPIO_Pin_11
+#define CONSOLE_TX_PIN	GPIO_Pin_10
+#define CONSOLE_GPIO	GPIOB
+#define CONSOLE_USART	USART3
+#endif
+
 /* init console to support rt_kprintf */
 static void rt_hw_console_init()
 {
@@ -186,27 +211,29 @@ static void rt_hw_console_init()
                            | RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOC
                            | RCC_APB2Periph_GPIOF, ENABLE);
 
+#if STM32_CONSOLE_USART == 0
+#else
     /* GPIO configuration */
     {
         GPIO_InitTypeDef GPIO_InitStructure;
 
         /* Configure USART1 Tx (PA.09) as alternate function push-pull */
-        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
+        GPIO_InitStructure.GPIO_Pin = CONSOLE_RX_PIN;
         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
-        GPIO_Init(GPIOA, &GPIO_InitStructure);
+        GPIO_Init(CONSOLE_GPIO, &GPIO_InitStructure);
 
         /* Configure USART1 Rx (PA.10) as input floating */
-        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
+        GPIO_InitStructure.GPIO_Pin = CONSOLE_TX_PIN;
         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
-        GPIO_Init(GPIOA, &GPIO_InitStructure);
+        GPIO_Init(CONSOLE_GPIO, &GPIO_InitStructure);
     }
 
     /* USART configuration */
     {
         USART_InitTypeDef USART_InitStructure;
 
-        /* USART1 configured as follow:
+        /* USART configured as follow:
             - BaudRate = 115200 baud
             - Word Length = 8 Bits
             - One Stop Bit
@@ -225,10 +252,11 @@ static void rt_hw_console_init()
         USART_InitStructure.USART_Parity = USART_Parity_No;
         USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
         USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
-        USART_Init(USART1, &USART_InitStructure);
+        USART_Init(CONSOLE_USART, &USART_InitStructure);
         /* Enable USART1 */
-        USART_Cmd(USART1, ENABLE);
+        USART_Cmd(CONSOLE_USART, ENABLE);
     }
+#endif
 }
 
 /* write one character to serial, must not trigger interrupt */
@@ -240,8 +268,8 @@ static void rt_hw_console_putc(const char c)
     */
     if (c=='\n')rt_hw_console_putc('\r');
 
-    while (!(USART1->SR & USART_FLAG_TXE));
-    USART1->DR = (c & 0x1FF);
+    while (!(CONSOLE_USART->SR & USART_FLAG_TXE));
+    CONSOLE_USART->DR = (c & 0x1FF);
 }
 
 /**
@@ -251,10 +279,14 @@ static void rt_hw_console_putc(const char c)
  */
 void rt_hw_console_output(const char* str)
 {
+#if STM32_CONSOLE_USART == 0
+	/* no console */
+#else
     while (*str)
     {
         rt_hw_console_putc (*str++);
     }
+#endif
 }
 
 /*@}*/

+ 4 - 0
bsp/stm32_radio/board.h

@@ -37,6 +37,10 @@
 //	<i>Default: 64
 #define STM32_SRAM_SIZE         64
 #define STM32_SRAM_END          (0x20000000 + STM32_SRAM_SIZE * 1024)
+
+// <o> Console on USART: <0=> no console <1=>USART 1 <2=>USART 2 <3=> USART 3
+// 	<i>Default: 1
+#define STM32_CONSOLE_USART			1
 
 void rt_hw_board_led_on(int n);
 void rt_hw_board_led_off(int n);

+ 1 - 1
bsp/stm32_radio/fmt0371/fmt0371.h

@@ -13,8 +13,8 @@
 #define LCD_ADDR              (*((volatile unsigned char *) 0x64000000)) // RS = 0
 #define LCD_DATA              (*((volatile unsigned char *) 0x64000004)) // RS = 1
 
-
 #define LCD_DATA16(a)         LCD_DATA = (unsigned char)(a>>8);LCD_DATA = (unsigned char)a // RS = 1 & WIDHT = 16
+#define LCD_DATA16_READ(a)	  do { a = (LCD_DATA << 8) | (LCD_DATA); } while (0)
 #define LCD_WR_CMD(a,b,c)     LCD_ADDR = b;LCD_DATA16(c)
 #define LCD_WR_REG(a)         LCD_ADDR = a
 #define LCD_WR_DATA8(a)       LCD_DATA = a

+ 26 - 0
bsp/stm32_radio/gui.c

@@ -0,0 +1,26 @@
+#include <rtgui/rtgui.h>
+#include <rtgui/widgets/window.h>
+#include <rtgui/widgets/label.h>
+
+#include <finsh.h>
+
+void msg()
+{
+	struct rtgui_win* msgbox;
+	struct rtgui_rect rect = {50, 50, 200, 200};
+
+	msgbox = rtgui_win_create("Information", &rect, RTGUI_WIN_STYLE_DEFAULT);
+	if (msgbox != RT_NULL)
+	{
+		struct rtgui_box* box = rtgui_box_create(RTGUI_VERTICAL, RT_NULL);
+		struct rtgui_label* label = rtgui_label_create("Hello World");
+
+		rtgui_win_set_box(msgbox, box);
+		RTGUI_WIDGET(label)->align = RTGUI_ALIGN_CENTER_HORIZONTAL |
+			RTGUI_ALIGN_CENTER_VERTICAL;
+		rtgui_box_append(box, RTGUI_WIDGET(label));
+
+		rtgui_win_show(msgbox);
+	}
+}
+FINSH_FUNCTION_EXPORT(msg, msg on gui)

+ 128 - 66
bsp/stm32_radio/lcd.c

@@ -1,81 +1,125 @@
 #include "stm32f10x.h"
 #include "rtthread.h"
 #include "fmt0371/FMT0371.h"
+#include <rtgui/rtgui.h>
+#include <rtgui/driver.h>
 
-static rt_err_t lcd_init (rt_device_t dev)
+void rt_hw_lcd_update(rtgui_rect_t *rect);
+rt_uint8_t * rt_hw_lcd_get_framebuffer(void);
+void rt_hw_lcd_set_pixel(rtgui_color_t *c, rt_base_t x, rt_base_t y);
+void rt_hw_lcd_get_pixel(rtgui_color_t *c, rt_base_t x, rt_base_t y);
+void rt_hw_lcd_draw_hline(rtgui_color_t *c, rt_base_t x1, rt_base_t x2, rt_base_t y);
+void rt_hw_lcd_draw_vline(rtgui_color_t *c, rt_base_t x, rt_base_t y1, rt_base_t y2);
+
+struct rtgui_graphic_driver _rtgui_lcd_driver =
 {
-    ftm0371_port_init();
-    ftm0371_init();
-    return RT_EOK;
+	"lcd",
+	2,
+	240,
+	320,
+	rt_hw_lcd_update,
+	rt_hw_lcd_get_framebuffer,
+	rt_hw_lcd_set_pixel,
+	rt_hw_lcd_get_pixel,
+	rt_hw_lcd_draw_hline,
+	rt_hw_lcd_draw_vline
+};
+
+void rt_hw_lcd_update(rtgui_rect_t *rect)
+{
+	/* nothing for none-DMA mode driver */
 }
 
-static rt_err_t lcd_open(rt_device_t dev, rt_uint16_t oflag)
+rt_uint8_t * rt_hw_lcd_get_framebuffer(void)
 {
-    return RT_EOK;
+	return RT_NULL; /* no framebuffer driver */
 }
 
-static rt_err_t lcd_close(rt_device_t dev)
+void rt_hw_lcd_set_pixel(rtgui_color_t *c, rt_base_t x, rt_base_t y)
 {
-    return RT_EOK;
+    unsigned short p;
+
+	/* get color pixel */
+	p = rtgui_color_to_565(*c);
+
+	/* set X point */
+    LCD_ADDR = 0x02;
+    LCD_DATA = x;
+	
+	/* set Y point */
+    LCD_ADDR = 0x03; 
+    LCD_DATA16(y);
+
+	/* write pixel */
+    LCD_ADDR = 0x0E;
+    LCD_DATA16(p);
 }
 
-static rt_err_t lcd_control(rt_device_t dev, rt_uint8_t cmd, void *args)
+void rt_hw_lcd_get_pixel(rtgui_color_t *c, rt_base_t x, rt_base_t y)
 {
-    /* rate control */
-    return RT_EOK;
+	/* set X point */
+    LCD_ADDR = 0x02;
+    LCD_DATA = x;
+
+	/* set Y point */
+    LCD_ADDR = 0x03; 
+    LCD_DATA16( y );
+
+	/* read pixel */
+	LCD_ADDR = 0x0F;
+	LCD_DATA16_READ(*c);
 }
 
-static rt_size_t lcd_write (rt_device_t dev, rt_off_t pos, const void* buffer, rt_size_t size)
+void rt_hw_lcd_draw_hline(rtgui_color_t *c, rt_base_t x1, rt_base_t x2, rt_base_t y)
 {
-    unsigned int i;
-    unsigned short *p;
-    unsigned int x,y;
+    unsigned short p;
 
-    size = size / 2;
-    y = (pos/2) / 240;
-    x = (pos/2)%240;
+	/* get color pixel */
+	p = rtgui_color_to_565p(*c);
 
-    LCD_ADDR = 0x02; // X start point
-    LCD_DATA = x;
+	/* set X point */
+    LCD_ADDR = 0x02;
+    LCD_DATA = x1;
 
-    LCD_ADDR = 0x03; // Y start point
+	/* set Y point */
+    LCD_ADDR = 0x03; 
     LCD_DATA16( y );
 
-    LCD_ADDR = 0x0E; // start write
-    p = (unsigned short *) buffer;
-
-    if (size > (240-x))
-    {
-        for (i=0;i<(240-x);i++)
-        {
-            LCD_DATA16(*p++);
-        }
-        LCD_ADDR = 0x02; // X start point
-        LCD_DATA = 0;
-
-        LCD_ADDR = 0x03; // Y start point
-        LCD_DATA16( y+1 );
-        size -= (x+1);
-
-        while (size--)
-        {
-            LCD_DATA16(*p++);
-        }
-    }
-    else
-    {
-        for (i=0;i<size;i++)
-        {
-            LCD_DATA16(*p++);
-        }
-    }
-
-
-    return RT_EOK;
+	/* write pixel */
+    LCD_ADDR = 0x0E;
+	while (x1 < x2) 
+	{ 
+		LCD_DATA16(p);
+		x1 ++;
+	}
 }
 
-struct rt_device lcd_device;
-rt_err_t lcd_hw_init(void)
+void rt_hw_lcd_draw_vline(rtgui_color_t *c, rt_base_t x, rt_base_t y1, rt_base_t y2)
+{
+    unsigned short p;
+
+	/* get color pixel */
+	p = rtgui_color_to_565p(*c);
+
+	/* set X point */
+    LCD_ADDR = 0x02;
+    LCD_DATA = x;
+
+	while(y1 < y2)
+	{
+		/* set Y point */
+		LCD_ADDR = 0x03; 
+		LCD_DATA16( y1 );
+
+		/* write pixel */
+		LCD_ADDR = 0x0E;
+		LCD_DATA16(p);
+
+		y1 ++;
+	}
+}
+
+rt_err_t rt_hw_lcd_init(void)
 {
     GPIO_InitTypeDef GPIO_InitStructure;
 
@@ -89,16 +133,34 @@ rt_err_t lcd_hw_init(void)
     ftm0371_port_init();
     ftm0371_init();
 
-    lcd_device.type           = RT_Device_Class_Block;
-    lcd_device.rx_indicate 	= RT_NULL;
-    lcd_device.tx_complete 	= RT_NULL;
-    lcd_device.init           = lcd_init;
-    lcd_device.open			= lcd_open;
-    lcd_device.close			= lcd_close;
-    lcd_device.read 			= RT_NULL;
-    lcd_device.write 			= lcd_write;
-    lcd_device.control 		= lcd_control;
-    lcd_device.private		= RT_NULL;
-
-    return rt_device_register(&lcd_device, "lcd",RT_DEVICE_FLAG_RDWR);
+#ifndef DRIVER_TEST
+	/* add lcd driver into graphic driver */
+	rtgui_graphic_driver_add(&_rtgui_lcd_driver);
+#endif
+
+	return RT_EOK;
+}
+
+#include <finsh.h>
+
+void hline(rt_base_t x1, rt_base_t x2, rt_base_t y, rt_uint32_t pixel)
+{
+	rt_hw_lcd_draw_hline(&pixel, x1, x2, y);
+}
+FINSH_FUNCTION_EXPORT(hline, draw a hline);
+
+void vline(int x, int y1, int y2, rt_uint32_t pixel)
+{
+	rt_hw_lcd_draw_vline(&pixel, x, y1, y2);
+}
+FINSH_FUNCTION_EXPORT(vline, draw a vline);
+
+void cls()
+{
+	rt_size_t index;
+	rtgui_color_t white 	= RTGUI_RGB(0xff, 0xff, 0xff);
+
+	for(index = 0; index < 320; index ++)
+		rt_hw_lcd_draw_hline(&white, 0, 240, index);
 }
+FINSH_FUNCTION_EXPORT(cls, clear screen);

+ 20 - 0
bsp/stm32_radio/lcd.h

@@ -0,0 +1,20 @@
+/*
+ * File      : lcd.h
+ * This file is part of RT-Thread RTOS
+ * COPYRIGHT (C) 2006 - 2009, RT-Thread Development Team
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rt-thread.org/license/LICENSE
+ *
+ * Change Logs:
+ * Date           Author       Notes
+ * 2009-10-16     Bernard      first version
+ */
+
+#ifndef __LCD_HW_H__
+#define __LCD_HW_H__
+
+rt_err_t rt_hw_lcd_init(void);
+
+#endif

+ 164 - 132
bsp/stm32_radio/project.Opt

@@ -20,12 +20,13 @@ GRPOPT 6,(finsh),0,0,0
 GRPOPT 7,(Filesystem),0,0,0
 GRPOPT 8,(LwIP),0,0,0
 GRPOPT 9,(mp3),0,0,0
+GRPOPT 10,(RTGUI),1,0,0
 
 OPTFFF 1,1,5,469762048,0,0,0,0,<.\rtconfig.h><rtconfig.h> 
-OPTFFF 1,2,5,956301314,0,13,28,0,<.\board.h><board.h> { 44,0,0,0,2,0,0,0,3,0,0,0,255,255,255,255,255,255,255,255,252,255,255,255,226,255,255,255,0,0,0,0,0,0,0,0,86,4,0,0,127,1,0,0 }
+OPTFFF 1,2,5,956301312,0,0,0,0,<.\board.h><board.h> 
 OPTFFF 1,3,5,0,0,0,0,0,<.\stm32f10x_conf.h><stm32f10x_conf.h> 
 OPTFFF 1,4,1,0,0,0,0,0,<.\application.c><application.c> 
-OPTFFF 1,5,1,0,0,0,0,0,<.\board.c><board.c> 
+OPTFFF 1,5,1,83886080,0,0,0,0,<.\board.c><board.c> 
 OPTFFF 1,6,1,0,0,0,0,0,<.\startup.c><startup.c> 
 OPTFFF 1,7,1,0,0,0,0,0,<.\stm32f10x_it.c><stm32f10x_it.c> 
 OPTFFF 1,8,1,0,0,0,0,0,<.\usart.c><usart.c> 
@@ -37,139 +38,171 @@ OPTFFF 1,13,1,0,0,0,0,0,<.\fsmc_nand.c><fsmc_nand.c>
 OPTFFF 1,14,1,0,0,0,0,0,<.\fsmc_sram.c><fsmc_sram.c> 
 OPTFFF 1,15,1,0,0,0,0,0,<.\fmt0371\fmt0371.c><fmt0371.c> 
 OPTFFF 1,16,1,234881024,0,0,0,0,<.\http.c><http.c> 
-OPTFFF 1,17,1,0,0,0,0,0,<.\lcd.c><lcd.c> 
+OPTFFF 1,17,1,520093696,0,0,0,0,<.\lcd.c><lcd.c> 
 OPTFFF 1,18,1,0,0,0,0,0,<..\..\net\apps\tcpecho.c><tcpecho.c> 
 OPTFFF 1,19,1,268435456,0,0,0,0,<..\..\net\apps\udpecho.c><udpecho.c> 
 OPTFFF 1,20,1,620756992,0,0,0,0,<.\mp3.c><mp3.c> 
 OPTFFF 1,21,1,369098752,0,0,0,0,<.\wav.c><wav.c> 
 OPTFFF 1,22,1,620756992,0,0,0,0,<.\netbuffer.c><netbuffer.c> 
-OPTFFF 2,23,1,0,0,0,0,0,<..\..\src\clock.c><clock.c> 
-OPTFFF 2,24,1,0,0,0,0,0,<..\..\src\idle.c><idle.c> 
-OPTFFF 2,25,1,0,0,0,0,0,<..\..\src\ipc.c><ipc.c> 
-OPTFFF 2,26,1,0,0,0,0,0,<..\..\src\mempool.c><mempool.c> 
-OPTFFF 2,27,1,0,0,0,0,0,<..\..\src\mem.c><mem.c> 
-OPTFFF 2,28,1,0,0,0,0,0,<..\..\src\object.c><object.c> 
-OPTFFF 2,29,1,0,0,0,0,0,<..\..\src\scheduler.c><scheduler.c> 
-OPTFFF 2,30,1,0,0,0,0,0,<..\..\src\thread.c><thread.c> 
-OPTFFF 2,31,1,0,0,0,0,0,<..\..\src\timer.c><timer.c> 
-OPTFFF 2,32,1,0,0,0,0,0,<..\..\src\irq.c><irq.c> 
-OPTFFF 2,33,1,0,0,0,0,0,<..\..\src\kservice.c><kservice.c> 
-OPTFFF 2,34,1,0,0,0,0,0,<..\..\src\device.c><device.c> 
-OPTFFF 2,35,1,0,0,0,0,0,<..\..\src\slab.c><slab.c> 
-OPTFFF 3,36,1,0,0,0,0,0,<..\..\libcpu\arm\stm32\stack.c><stack.c> 
-OPTFFF 3,37,1,0,0,0,0,0,<..\..\libcpu\arm\stm32\interrupt.c><interrupt.c> 
-OPTFFF 3,38,1,0,0,0,0,0,<..\..\libcpu\arm\stm32\cpu.c><cpu.c> 
-OPTFFF 3,39,1,0,0,0,0,0,<..\..\libcpu\arm\stm32\serial.c><serial.c> 
-OPTFFF 3,40,2,0,0,0,0,0,<..\..\libcpu\arm\stm32\context_rvds.S><context_rvds.S> 
-OPTFFF 3,41,2,335544320,0,0,0,0,<..\..\libcpu\arm\stm32\start_rvds.s><start_rvds.s> 
-OPTFFF 3,42,1,0,0,0,0,0,<..\..\libcpu\arm\stm32\fault.c><fault.c> 
-OPTFFF 3,43,2,0,0,0,0,0,<..\..\libcpu\arm\stm32\fault_rvds.S><fault_rvds.S> 
-OPTFFF 4,44,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\misc.c><misc.c> 
-OPTFFF 4,45,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_adc.c><stm32f10x_adc.c> 
-OPTFFF 4,46,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_bkp.c><stm32f10x_bkp.c> 
-OPTFFF 4,47,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_can.c><stm32f10x_can.c> 
-OPTFFF 4,48,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_crc.c><stm32f10x_crc.c> 
-OPTFFF 4,49,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_dac.c><stm32f10x_dac.c> 
-OPTFFF 4,50,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_dbgmcu.c><stm32f10x_dbgmcu.c> 
-OPTFFF 4,51,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_dma.c><stm32f10x_dma.c> 
-OPTFFF 4,52,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_exti.c><stm32f10x_exti.c> 
-OPTFFF 4,53,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_flash.c><stm32f10x_flash.c> 
-OPTFFF 4,54,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_fsmc.c><stm32f10x_fsmc.c> 
-OPTFFF 4,55,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_gpio.c><stm32f10x_gpio.c> 
-OPTFFF 4,56,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_i2c.c><stm32f10x_i2c.c> 
-OPTFFF 4,57,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_iwdg.c><stm32f10x_iwdg.c> 
-OPTFFF 4,58,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_pwr.c><stm32f10x_pwr.c> 
-OPTFFF 4,59,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_rcc.c><stm32f10x_rcc.c> 
-OPTFFF 4,60,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_rtc.c><stm32f10x_rtc.c> 
-OPTFFF 4,61,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_sdio.c><stm32f10x_sdio.c> 
-OPTFFF 4,62,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_spi.c><stm32f10x_spi.c> 
-OPTFFF 4,63,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_tim.c><stm32f10x_tim.c> 
-OPTFFF 4,64,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_usart.c><stm32f10x_usart.c> 
-OPTFFF 4,65,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_wwdg.c><stm32f10x_wwdg.c> 
-OPTFFF 5,66,1,0,0,0,0,0,<.\Libraries\CMSIS\Core\CM3\core_cm3.c><core_cm3.c> 
-OPTFFF 5,67,1,0,0,0,0,0,<.\Libraries\CMSIS\Core\CM3\system_stm32f10x.c><system_stm32f10x.c> 
-OPTFFF 6,68,1,0,0,0,0,0,<..\..\finsh\finsh_compiler.c><finsh_compiler.c> 
-OPTFFF 6,69,1,0,0,0,0,0,<..\..\finsh\finsh_error.c><finsh_error.c> 
-OPTFFF 6,70,1,0,0,0,0,0,<..\..\finsh\finsh_heap.c><finsh_heap.c> 
-OPTFFF 6,71,1,0,0,0,0,0,<..\..\finsh\finsh_init.c><finsh_init.c> 
-OPTFFF 6,72,1,0,0,0,0,0,<..\..\finsh\finsh_node.c><finsh_node.c> 
-OPTFFF 6,73,1,0,0,0,0,0,<..\..\finsh\finsh_ops.c><finsh_ops.c> 
-OPTFFF 6,74,1,0,0,0,0,0,<..\..\finsh\finsh_parser.c><finsh_parser.c> 
-OPTFFF 6,75,1,0,0,0,0,0,<..\..\finsh\finsh_token.c><finsh_token.c> 
-OPTFFF 6,76,1,0,0,0,0,0,<..\..\finsh\finsh_var.c><finsh_var.c> 
-OPTFFF 6,77,1,0,0,0,0,0,<..\..\finsh\finsh_vm.c><finsh_vm.c> 
-OPTFFF 6,78,1,0,0,0,0,0,<..\..\finsh\shell.c><shell.c> 
-OPTFFF 6,79,1,0,0,0,0,0,<..\..\finsh\symbol.c><symbol.c> 
-OPTFFF 6,80,1,0,0,0,0,0,<..\..\finsh\cmd.c><cmd.c> 
-OPTFFF 7,81,1,0,0,0,0,0,<..\..\filesystem\dfs\src\dfs_init.c><dfs_init.c> 
-OPTFFF 7,82,1,0,0,0,0,0,<..\..\filesystem\dfs\src\dfs_fs.c><dfs_fs.c> 
-OPTFFF 7,83,1,0,0,0,0,0,<..\..\filesystem\dfs\src\dfs_raw.c><dfs_raw.c> 
-OPTFFF 7,84,1,0,0,0,0,0,<..\..\filesystem\dfs\src\dfs_util.c><dfs_util.c> 
-OPTFFF 7,85,1,0,0,0,0,0,<..\..\filesystem\dfs\src\dfs_cache.c><dfs_cache.c> 
-OPTFFF 7,86,1,0,0,0,0,0,<..\..\filesystem\dfs\src\dfs_posix.c><dfs_posix.c> 
-OPTFFF 7,87,1,0,0,0,0,0,<..\..\filesystem\dfs\filesystems\efsl\src\base\efs.c><efs.c> 
-OPTFFF 7,88,1,0,0,0,0,0,<..\..\filesystem\dfs\filesystems\efsl\src\base\extract.c><extract.c> 
-OPTFFF 7,89,1,0,0,0,0,0,<..\..\filesystem\dfs\filesystems\efsl\src\base\partition.c><partition.c> 
-OPTFFF 7,90,1,0,0,0,0,0,<..\..\filesystem\dfs\filesystems\efsl\src\base\plibc.c><plibc.c> 
-OPTFFF 7,91,1,0,0,0,0,0,<..\..\filesystem\dfs\filesystems\efsl\src\fs\vfat\dir.c><dir.c> 
-OPTFFF 7,92,1,0,0,0,0,0,<..\..\filesystem\dfs\filesystems\efsl\src\fs\vfat\fat.c><fat.c> 
-OPTFFF 7,93,1,0,0,0,0,0,<..\..\filesystem\dfs\filesystems\efsl\src\fs\vfat\file.c><file.c> 
-OPTFFF 7,94,1,0,0,0,0,0,<..\..\filesystem\dfs\filesystems\efsl\src\fs\vfat\fs.c><fs.c> 
-OPTFFF 7,95,1,0,0,0,0,0,<..\..\filesystem\dfs\filesystems\efsl\src\fs\vfat\ls.c><ls.c> 
-OPTFFF 7,96,1,0,0,0,0,0,<..\..\filesystem\dfs\filesystems\efsl\src\fs\vfat\time.c><time.c> 
-OPTFFF 7,97,1,0,0,0,0,0,<..\..\filesystem\dfs\filesystems\efsl\src\fs\vfat\ui.c><ui.c> 
-OPTFFF 8,98,1,0,0,0,0,0,<..\..\net\lwip\src\core\dhcp.c><dhcp.c> 
-OPTFFF 8,99,1,0,0,0,0,0,<..\..\net\lwip\src\core\dns.c><dns.c> 
-OPTFFF 8,100,1,0,0,0,0,0,<..\..\net\lwip\src\core\init.c><init.c> 
-OPTFFF 8,101,1,0,0,0,0,0,<..\..\net\lwip\src\core\netif.c><netif.c> 
-OPTFFF 8,102,1,0,0,0,0,0,<..\..\net\lwip\src\core\pbuf.c><pbuf.c> 
-OPTFFF 8,103,1,0,0,0,0,0,<..\..\net\lwip\src\core\raw.c><raw.c> 
-OPTFFF 8,104,1,0,0,0,0,0,<..\..\net\lwip\src\core\stats.c><stats.c> 
-OPTFFF 8,105,1,0,0,0,0,0,<..\..\net\lwip\src\core\sys.c><sys.c> 
-OPTFFF 8,106,1,0,0,0,0,0,<..\..\net\lwip\src\core\tcp.c><tcp.c> 
-OPTFFF 8,107,1,0,0,0,0,0,<..\..\net\lwip\src\core\tcp_in.c><tcp_in.c> 
-OPTFFF 8,108,1,0,0,0,0,0,<..\..\net\lwip\src\core\tcp_out.c><tcp_out.c> 
-OPTFFF 8,109,1,0,0,0,0,0,<..\..\net\lwip\src\core\udp.c><udp.c> 
-OPTFFF 8,110,1,0,0,0,0,0,<..\..\net\lwip\src\core\ipv4\autoip.c><autoip.c> 
-OPTFFF 8,111,1,0,0,0,0,0,<..\..\net\lwip\src\core\ipv4\icmp.c><icmp.c> 
-OPTFFF 8,112,1,0,0,0,0,0,<..\..\net\lwip\src\core\ipv4\igmp.c><igmp.c> 
-OPTFFF 8,113,1,0,0,0,0,0,<..\..\net\lwip\src\core\ipv4\inet.c><inet.c> 
-OPTFFF 8,114,1,0,0,0,0,0,<..\..\net\lwip\src\core\ipv4\inet_chksum.c><inet_chksum.c> 
-OPTFFF 8,115,1,0,0,0,0,0,<..\..\net\lwip\src\core\ipv4\ip.c><ip.c> 
-OPTFFF 8,116,1,0,0,0,0,0,<..\..\net\lwip\src\core\ipv4\ip_addr.c><ip_addr.c> 
-OPTFFF 8,117,1,0,0,0,0,0,<..\..\net\lwip\src\core\ipv4\ip_frag.c><ip_frag.c> 
-OPTFFF 8,118,1,0,0,0,0,0,<..\..\net\lwip\src\core\snmp\msg_in.c><msg_in.c> 
-OPTFFF 8,119,1,0,0,0,0,0,<..\..\net\lwip\src\core\snmp\msg_out.c><msg_out.c> 
-OPTFFF 8,120,1,0,0,0,0,0,<..\..\net\lwip\src\api\api_lib.c><api_lib.c> 
-OPTFFF 8,121,1,0,0,0,0,0,<..\..\net\lwip\src\api\api_msg.c><api_msg.c> 
-OPTFFF 8,122,1,0,0,0,0,0,<..\..\net\lwip\src\api\err.c><err.c> 
-OPTFFF 8,123,1,0,0,0,0,0,<..\..\net\lwip\src\api\netbuf.c><netbuf.c> 
-OPTFFF 8,124,1,0,0,0,0,0,<..\..\net\lwip\src\api\netdb.c><netdb.c> 
-OPTFFF 8,125,1,0,0,0,0,0,<..\..\net\lwip\src\api\netifapi.c><netifapi.c> 
-OPTFFF 8,126,1,0,0,0,0,0,<..\..\net\lwip\src\api\tcpip.c><tcpip.c> 
-OPTFFF 8,127,1,0,0,0,0,0,<..\..\net\lwip\src\netif\etharp.c><etharp.c> 
-OPTFFF 8,128,1,150994944,0,0,0,0,<..\..\net\lwip\src\netif\ethernetif.c><ethernetif.c> 
-OPTFFF 8,129,1,0,0,0,0,0,<..\..\net\lwip\src\netif\loopif.c><loopif.c> 
-OPTFFF 8,130,1,0,0,0,0,0,<..\..\net\lwip\src\arch\sys_arch_init.c><sys_arch_init.c> 
-OPTFFF 8,131,1,0,0,0,0,0,<..\..\net\lwip\src\arch\sys_arch.c><sys_arch.c> 
-OPTFFF 8,132,1,0,0,0,0,0,<..\..\net\lwip\src\api\sockets.c><sockets.c> 
-OPTFFF 8,133,1,0,0,0,0,0,<..\..\net\lwip\src\core\memp_tiny.c><memp_tiny.c> 
-OPTFFF 9,134,1,268435456,0,0,0,0,<.\mp3\mp3dec.c><mp3dec.c> 
-OPTFFF 9,135,1,0,0,0,0,0,<.\mp3\mp3tabs.c><mp3tabs.c> 
-OPTFFF 9,136,1,0,0,0,0,0,<.\mp3\real\bitstream.c><bitstream.c> 
-OPTFFF 9,137,1,83886080,0,0,0,0,<.\mp3\real\buffers.c><buffers.c> 
-OPTFFF 9,138,1,0,0,0,0,0,<.\mp3\real\dct32.c><dct32.c> 
-OPTFFF 9,139,1,0,0,0,0,0,<.\mp3\real\dequant.c><dequant.c> 
-OPTFFF 9,140,1,0,0,0,0,0,<.\mp3\real\dqchan.c><dqchan.c> 
-OPTFFF 9,141,1,0,0,0,0,0,<.\mp3\real\huffman.c><huffman.c> 
-OPTFFF 9,142,1,0,0,0,0,0,<.\mp3\real\hufftabs.c><hufftabs.c> 
-OPTFFF 9,143,1,0,0,0,0,0,<.\mp3\real\imdct.c><imdct.c> 
-OPTFFF 9,144,1,0,0,0,0,0,<.\mp3\real\scalfact.c><scalfact.c> 
-OPTFFF 9,145,1,0,0,0,0,0,<.\mp3\real\stproc.c><stproc.c> 
-OPTFFF 9,146,1,0,0,0,0,0,<.\mp3\real\subband.c><subband.c> 
-OPTFFF 9,147,1,0,0,0,0,0,<.\mp3\real\trigtabs.c><trigtabs.c> 
-OPTFFF 9,148,2,0,0,0,0,0,<.\mp3\real\arm\asmpoly_thumb2.s><asmpoly_thumb2.s> 
-OPTFFF 9,149,2,0,0,0,0,0,<.\mp3\real\arm\asmmisc.s><asmmisc.s> 
+OPTFFF 1,23,1,33554434,0,1,24,0,<.\gui.c><gui.c> { 44,0,0,0,2,0,0,0,3,0,0,0,255,255,255,255,255,255,255,255,252,255,255,255,226,255,255,255,22,0,0,0,29,0,0,0,208,2,0,0,238,0,0,0 }
+OPTFFF 2,24,1,0,0,0,0,0,<..\..\src\clock.c><clock.c> 
+OPTFFF 2,25,1,536870912,0,0,0,0,<..\..\src\idle.c><idle.c> 
+OPTFFF 2,26,1,0,0,0,0,0,<..\..\src\ipc.c><ipc.c> 
+OPTFFF 2,27,1,0,0,0,0,0,<..\..\src\mempool.c><mempool.c> 
+OPTFFF 2,28,1,0,0,0,0,0,<..\..\src\mem.c><mem.c> 
+OPTFFF 2,29,1,0,0,0,0,0,<..\..\src\object.c><object.c> 
+OPTFFF 2,30,1,0,0,0,0,0,<..\..\src\scheduler.c><scheduler.c> 
+OPTFFF 2,31,1,0,0,0,0,0,<..\..\src\thread.c><thread.c> 
+OPTFFF 2,32,1,0,0,0,0,0,<..\..\src\timer.c><timer.c> 
+OPTFFF 2,33,1,0,0,0,0,0,<..\..\src\irq.c><irq.c> 
+OPTFFF 2,34,1,0,0,0,0,0,<..\..\src\kservice.c><kservice.c> 
+OPTFFF 2,35,1,0,0,0,0,0,<..\..\src\device.c><device.c> 
+OPTFFF 2,36,1,0,0,0,0,0,<..\..\src\slab.c><slab.c> 
+OPTFFF 3,37,1,0,0,0,0,0,<..\..\libcpu\arm\stm32\stack.c><stack.c> 
+OPTFFF 3,38,1,0,0,0,0,0,<..\..\libcpu\arm\stm32\interrupt.c><interrupt.c> 
+OPTFFF 3,39,1,0,0,0,0,0,<..\..\libcpu\arm\stm32\cpu.c><cpu.c> 
+OPTFFF 3,40,1,0,0,0,0,0,<..\..\libcpu\arm\stm32\serial.c><serial.c> 
+OPTFFF 3,41,2,0,0,0,0,0,<..\..\libcpu\arm\stm32\context_rvds.S><context_rvds.S> 
+OPTFFF 3,42,2,0,0,0,0,0,<..\..\libcpu\arm\stm32\start_rvds.s><start_rvds.s> 
+OPTFFF 3,43,1,0,0,0,0,0,<..\..\libcpu\arm\stm32\fault.c><fault.c> 
+OPTFFF 3,44,2,0,0,0,0,0,<..\..\libcpu\arm\stm32\fault_rvds.S><fault_rvds.S> 
+OPTFFF 4,45,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\misc.c><misc.c> 
+OPTFFF 4,46,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_adc.c><stm32f10x_adc.c> 
+OPTFFF 4,47,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_bkp.c><stm32f10x_bkp.c> 
+OPTFFF 4,48,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_can.c><stm32f10x_can.c> 
+OPTFFF 4,49,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_crc.c><stm32f10x_crc.c> 
+OPTFFF 4,50,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_dac.c><stm32f10x_dac.c> 
+OPTFFF 4,51,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_dbgmcu.c><stm32f10x_dbgmcu.c> 
+OPTFFF 4,52,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_dma.c><stm32f10x_dma.c> 
+OPTFFF 4,53,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_exti.c><stm32f10x_exti.c> 
+OPTFFF 4,54,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_flash.c><stm32f10x_flash.c> 
+OPTFFF 4,55,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_fsmc.c><stm32f10x_fsmc.c> 
+OPTFFF 4,56,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_gpio.c><stm32f10x_gpio.c> 
+OPTFFF 4,57,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_i2c.c><stm32f10x_i2c.c> 
+OPTFFF 4,58,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_iwdg.c><stm32f10x_iwdg.c> 
+OPTFFF 4,59,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_pwr.c><stm32f10x_pwr.c> 
+OPTFFF 4,60,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_rcc.c><stm32f10x_rcc.c> 
+OPTFFF 4,61,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_rtc.c><stm32f10x_rtc.c> 
+OPTFFF 4,62,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_sdio.c><stm32f10x_sdio.c> 
+OPTFFF 4,63,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_spi.c><stm32f10x_spi.c> 
+OPTFFF 4,64,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_tim.c><stm32f10x_tim.c> 
+OPTFFF 4,65,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_usart.c><stm32f10x_usart.c> 
+OPTFFF 4,66,1,0,0,0,0,0,<.\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_wwdg.c><stm32f10x_wwdg.c> 
+OPTFFF 5,67,1,0,0,0,0,0,<.\Libraries\CMSIS\Core\CM3\core_cm3.c><core_cm3.c> 
+OPTFFF 5,68,1,0,0,0,0,0,<.\Libraries\CMSIS\Core\CM3\system_stm32f10x.c><system_stm32f10x.c> 
+OPTFFF 6,69,1,0,0,0,0,0,<..\..\finsh\finsh_compiler.c><finsh_compiler.c> 
+OPTFFF 6,70,1,0,0,0,0,0,<..\..\finsh\finsh_error.c><finsh_error.c> 
+OPTFFF 6,71,1,0,0,0,0,0,<..\..\finsh\finsh_heap.c><finsh_heap.c> 
+OPTFFF 6,72,1,0,0,0,0,0,<..\..\finsh\finsh_init.c><finsh_init.c> 
+OPTFFF 6,73,1,0,0,0,0,0,<..\..\finsh\finsh_node.c><finsh_node.c> 
+OPTFFF 6,74,1,0,0,0,0,0,<..\..\finsh\finsh_ops.c><finsh_ops.c> 
+OPTFFF 6,75,1,0,0,0,0,0,<..\..\finsh\finsh_parser.c><finsh_parser.c> 
+OPTFFF 6,76,1,0,0,0,0,0,<..\..\finsh\finsh_token.c><finsh_token.c> 
+OPTFFF 6,77,1,0,0,0,0,0,<..\..\finsh\finsh_var.c><finsh_var.c> 
+OPTFFF 6,78,1,0,0,0,0,0,<..\..\finsh\finsh_vm.c><finsh_vm.c> 
+OPTFFF 6,79,1,0,0,0,0,0,<..\..\finsh\shell.c><shell.c> 
+OPTFFF 6,80,1,0,0,0,0,0,<..\..\finsh\symbol.c><symbol.c> 
+OPTFFF 6,81,1,0,0,0,0,0,<..\..\finsh\cmd.c><cmd.c> 
+OPTFFF 7,82,1,0,0,0,0,0,<..\..\filesystem\dfs\src\dfs_init.c><dfs_init.c> 
+OPTFFF 7,83,1,0,0,0,0,0,<..\..\filesystem\dfs\src\dfs_fs.c><dfs_fs.c> 
+OPTFFF 7,84,1,0,0,0,0,0,<..\..\filesystem\dfs\src\dfs_raw.c><dfs_raw.c> 
+OPTFFF 7,85,1,0,0,0,0,0,<..\..\filesystem\dfs\src\dfs_util.c><dfs_util.c> 
+OPTFFF 7,86,1,0,0,0,0,0,<..\..\filesystem\dfs\src\dfs_cache.c><dfs_cache.c> 
+OPTFFF 7,87,1,0,0,0,0,0,<..\..\filesystem\dfs\src\dfs_posix.c><dfs_posix.c> 
+OPTFFF 7,88,1,0,0,0,0,0,<..\..\filesystem\dfs\filesystems\efsl\src\base\efs.c><efs.c> 
+OPTFFF 7,89,1,0,0,0,0,0,<..\..\filesystem\dfs\filesystems\efsl\src\base\extract.c><extract.c> 
+OPTFFF 7,90,1,0,0,0,0,0,<..\..\filesystem\dfs\filesystems\efsl\src\base\partition.c><partition.c> 
+OPTFFF 7,91,1,0,0,0,0,0,<..\..\filesystem\dfs\filesystems\efsl\src\base\plibc.c><plibc.c> 
+OPTFFF 7,92,1,0,0,0,0,0,<..\..\filesystem\dfs\filesystems\efsl\src\fs\vfat\dir.c><dir.c> 
+OPTFFF 7,93,1,0,0,0,0,0,<..\..\filesystem\dfs\filesystems\efsl\src\fs\vfat\fat.c><fat.c> 
+OPTFFF 7,94,1,0,0,0,0,0,<..\..\filesystem\dfs\filesystems\efsl\src\fs\vfat\file.c><file.c> 
+OPTFFF 7,95,1,0,0,0,0,0,<..\..\filesystem\dfs\filesystems\efsl\src\fs\vfat\fs.c><fs.c> 
+OPTFFF 7,96,1,0,0,0,0,0,<..\..\filesystem\dfs\filesystems\efsl\src\fs\vfat\ls.c><ls.c> 
+OPTFFF 7,97,1,0,0,0,0,0,<..\..\filesystem\dfs\filesystems\efsl\src\fs\vfat\time.c><time.c> 
+OPTFFF 7,98,1,0,0,0,0,0,<..\..\filesystem\dfs\filesystems\efsl\src\fs\vfat\ui.c><ui.c> 
+OPTFFF 8,99,1,0,0,0,0,0,<..\..\net\lwip\src\core\dhcp.c><dhcp.c> 
+OPTFFF 8,100,1,0,0,0,0,0,<..\..\net\lwip\src\core\dns.c><dns.c> 
+OPTFFF 8,101,1,0,0,0,0,0,<..\..\net\lwip\src\core\init.c><init.c> 
+OPTFFF 8,102,1,0,0,0,0,0,<..\..\net\lwip\src\core\netif.c><netif.c> 
+OPTFFF 8,103,1,0,0,0,0,0,<..\..\net\lwip\src\core\pbuf.c><pbuf.c> 
+OPTFFF 8,104,1,0,0,0,0,0,<..\..\net\lwip\src\core\raw.c><raw.c> 
+OPTFFF 8,105,1,0,0,0,0,0,<..\..\net\lwip\src\core\stats.c><stats.c> 
+OPTFFF 8,106,1,0,0,0,0,0,<..\..\net\lwip\src\core\sys.c><sys.c> 
+OPTFFF 8,107,1,0,0,0,0,0,<..\..\net\lwip\src\core\tcp.c><tcp.c> 
+OPTFFF 8,108,1,0,0,0,0,0,<..\..\net\lwip\src\core\tcp_in.c><tcp_in.c> 
+OPTFFF 8,109,1,0,0,0,0,0,<..\..\net\lwip\src\core\tcp_out.c><tcp_out.c> 
+OPTFFF 8,110,1,0,0,0,0,0,<..\..\net\lwip\src\core\udp.c><udp.c> 
+OPTFFF 8,111,1,0,0,0,0,0,<..\..\net\lwip\src\core\ipv4\autoip.c><autoip.c> 
+OPTFFF 8,112,1,0,0,0,0,0,<..\..\net\lwip\src\core\ipv4\icmp.c><icmp.c> 
+OPTFFF 8,113,1,0,0,0,0,0,<..\..\net\lwip\src\core\ipv4\igmp.c><igmp.c> 
+OPTFFF 8,114,1,0,0,0,0,0,<..\..\net\lwip\src\core\ipv4\inet.c><inet.c> 
+OPTFFF 8,115,1,0,0,0,0,0,<..\..\net\lwip\src\core\ipv4\inet_chksum.c><inet_chksum.c> 
+OPTFFF 8,116,1,0,0,0,0,0,<..\..\net\lwip\src\core\ipv4\ip.c><ip.c> 
+OPTFFF 8,117,1,0,0,0,0,0,<..\..\net\lwip\src\core\ipv4\ip_addr.c><ip_addr.c> 
+OPTFFF 8,118,1,0,0,0,0,0,<..\..\net\lwip\src\core\ipv4\ip_frag.c><ip_frag.c> 
+OPTFFF 8,119,1,0,0,0,0,0,<..\..\net\lwip\src\core\snmp\msg_in.c><msg_in.c> 
+OPTFFF 8,120,1,0,0,0,0,0,<..\..\net\lwip\src\core\snmp\msg_out.c><msg_out.c> 
+OPTFFF 8,121,1,0,0,0,0,0,<..\..\net\lwip\src\api\api_lib.c><api_lib.c> 
+OPTFFF 8,122,1,0,0,0,0,0,<..\..\net\lwip\src\api\api_msg.c><api_msg.c> 
+OPTFFF 8,123,1,0,0,0,0,0,<..\..\net\lwip\src\api\err.c><err.c> 
+OPTFFF 8,124,1,0,0,0,0,0,<..\..\net\lwip\src\api\netbuf.c><netbuf.c> 
+OPTFFF 8,125,1,0,0,0,0,0,<..\..\net\lwip\src\api\netdb.c><netdb.c> 
+OPTFFF 8,126,1,0,0,0,0,0,<..\..\net\lwip\src\api\netifapi.c><netifapi.c> 
+OPTFFF 8,127,1,0,0,0,0,0,<..\..\net\lwip\src\api\tcpip.c><tcpip.c> 
+OPTFFF 8,128,1,0,0,0,0,0,<..\..\net\lwip\src\netif\etharp.c><etharp.c> 
+OPTFFF 8,129,1,150994944,0,0,0,0,<..\..\net\lwip\src\netif\ethernetif.c><ethernetif.c> 
+OPTFFF 8,130,1,0,0,0,0,0,<..\..\net\lwip\src\netif\loopif.c><loopif.c> 
+OPTFFF 8,131,1,0,0,0,0,0,<..\..\net\lwip\src\arch\sys_arch_init.c><sys_arch_init.c> 
+OPTFFF 8,132,1,0,0,0,0,0,<..\..\net\lwip\src\arch\sys_arch.c><sys_arch.c> 
+OPTFFF 8,133,1,0,0,0,0,0,<..\..\net\lwip\src\api\sockets.c><sockets.c> 
+OPTFFF 8,134,1,0,0,0,0,0,<..\..\net\lwip\src\core\memp_tiny.c><memp_tiny.c> 
+OPTFFF 9,135,1,268435456,0,0,0,0,<.\mp3\mp3dec.c><mp3dec.c> 
+OPTFFF 9,136,1,0,0,0,0,0,<.\mp3\mp3tabs.c><mp3tabs.c> 
+OPTFFF 9,137,1,0,0,0,0,0,<.\mp3\real\bitstream.c><bitstream.c> 
+OPTFFF 9,138,1,83886080,0,0,0,0,<.\mp3\real\buffers.c><buffers.c> 
+OPTFFF 9,139,1,0,0,0,0,0,<.\mp3\real\dct32.c><dct32.c> 
+OPTFFF 9,140,1,0,0,0,0,0,<.\mp3\real\dequant.c><dequant.c> 
+OPTFFF 9,141,1,0,0,0,0,0,<.\mp3\real\dqchan.c><dqchan.c> 
+OPTFFF 9,142,1,0,0,0,0,0,<.\mp3\real\huffman.c><huffman.c> 
+OPTFFF 9,143,1,0,0,0,0,0,<.\mp3\real\hufftabs.c><hufftabs.c> 
+OPTFFF 9,144,1,0,0,0,0,0,<.\mp3\real\imdct.c><imdct.c> 
+OPTFFF 9,145,1,0,0,0,0,0,<.\mp3\real\scalfact.c><scalfact.c> 
+OPTFFF 9,146,1,0,0,0,0,0,<.\mp3\real\stproc.c><stproc.c> 
+OPTFFF 9,147,1,0,0,0,0,0,<.\mp3\real\subband.c><subband.c> 
+OPTFFF 9,148,1,0,0,0,0,0,<.\mp3\real\trigtabs.c><trigtabs.c> 
+OPTFFF 9,149,2,0,0,0,0,0,<.\mp3\real\arm\asmpoly_thumb2.s><asmpoly_thumb2.s> 
+OPTFFF 9,150,2,0,0,0,0,0,<.\mp3\real\arm\asmmisc.s><asmmisc.s> 
+OPTFFF 10,151,1,0,0,0,0,0,<..\..\rtgui\common\rtgui_object.c><rtgui_object.c> 
+OPTFFF 10,152,1,0,0,0,0,0,<..\..\rtgui\common\rtgui_system.c><rtgui_system.c> 
+OPTFFF 10,153,1,335544320,0,0,0,0,<..\..\rtgui\common\rtgui_theme.c><rtgui_theme.c> 
+OPTFFF 10,154,1,0,0,0,0,0,<..\..\rtgui\common\asc12font.c><asc12font.c> 
+OPTFFF 10,155,1,0,0,0,0,0,<..\..\rtgui\common\color.c><color.c> 
+OPTFFF 10,156,1,352321536,0,0,0,0,<..\..\rtgui\common\dc.c><dc.c> 
+OPTFFF 10,157,1,0,0,0,0,0,<..\..\rtgui\common\dc_buffer.c><dc_buffer.c> 
+OPTFFF 10,158,1,0,0,0,0,0,<..\..\rtgui\common\dc_hw.c><dc_hw.c> 
+OPTFFF 10,159,1,0,0,0,0,0,<..\..\rtgui\common\filerw.c><filerw.c> 
+OPTFFF 10,160,1,83886080,0,0,0,0,<..\..\rtgui\common\font.c><font.c> 
+OPTFFF 10,161,1,0,0,0,0,0,<..\..\rtgui\common\image.c><image.c> 
+OPTFFF 10,162,1,0,0,0,0,0,<..\..\rtgui\common\image_xpm.c><image_xpm.c> 
+OPTFFF 10,163,1,0,0,0,0,0,<..\..\rtgui\common\region.c><region.c> 
+OPTFFF 10,164,1,0,0,0,0,0,<..\..\rtgui\server\server.c><server.c> 
+OPTFFF 10,165,1,0,0,0,0,0,<..\..\rtgui\server\driver.c><driver.c> 
+OPTFFF 10,166,1,0,0,0,0,0,<..\..\rtgui\server\panel.c><panel.c> 
+OPTFFF 10,167,1,0,0,0,0,0,<..\..\rtgui\widgets\widget.c><widget.c> 
+OPTFFF 10,168,1,0,0,0,0,0,<..\..\rtgui\widgets\window.c><window.c> 
+OPTFFF 10,169,1,0,0,0,0,0,<..\..\rtgui\widgets\workbench.c><workbench.c> 
+OPTFFF 10,170,1,0,0,0,0,0,<..\..\rtgui\widgets\view.c><view.c> 
+OPTFFF 10,171,1,0,0,0,0,0,<..\..\rtgui\widgets\box.c><box.c> 
+OPTFFF 10,172,1,0,0,0,0,0,<..\..\rtgui\widgets\button.c><button.c> 
+OPTFFF 10,173,1,0,0,0,0,0,<..\..\rtgui\widgets\container.c><container.c> 
+OPTFFF 10,174,1,0,0,0,0,0,<..\..\rtgui\widgets\iconbox.c><iconbox.c> 
+OPTFFF 10,175,1,0,0,0,0,0,<..\..\rtgui\widgets\label.c><label.c> 
+OPTFFF 10,176,1,0,0,0,0,0,<..\..\rtgui\widgets\textbox.c><textbox.c> 
+OPTFFF 10,177,1,0,0,0,0,0,<..\..\rtgui\widgets\title.c><title.c> 
+OPTFFF 10,178,1,0,0,0,0,0,<..\..\rtgui\widgets\toplevel.c><toplevel.c> 
+OPTFFF 10,179,1,0,0,0,0,0,<..\..\rtgui\server\mouse.c><mouse.c> 
+OPTFFF 10,180,1,0,0,0,0,0,<..\..\rtgui\server\topwin.c><topwin.c> 
+OPTFFF 10,181,1,0,0,0,0,0,<..\..\rtgui\common\caret.c><caret.c> 
 
 
 TARGOPT 1, (RT-Thread STM32 Radio)
@@ -187,8 +220,7 @@ TARGOPT 1, (RT-Thread STM32 Radio)
   OPTKEY 0,(DLGTARM)((1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(100=-1,-1,-1,-1,0)(110=-1,-1,-1,-1,0)(111=-1,-1,-1,-1,0)(1011=-1,-1,-1,-1,0)(180=-1,-1,-1,-1,0)(120=-1,-1,-1,-1,0)(121=-1,-1,-1,-1,0)(122=-1,-1,-1,-1,0)(123=-1,-1,-1,-1,0)(124=-1,-1,-1,-1,0)(125=-1,-1,-1,-1,0)(126=-1,-1,-1,-1,0)(140=-1,-1,-1,-1,0)(240=-1,-1,-1,-1,0)(190=-1,-1,-1,-1,0)(200=-1,-1,-1,-1,0)(170=-1,-1,-1,-1,0)(130=-1,-1,-1,-1,0)(131=-1,-1,-1,-1,0)(132=-1,-1,-1,-1,0)(133=-1,-1,-1,-1,0)(160=-1,-1,-1,-1,0)(161=-1,-1,-1,-1,0)(162=-1,-1,-1,-1,0)(210=-1,-1,-1,-1,0)(211=-1,-1,-1,-1,0)(220=-1,-1,-1,-1,0)(221=-1,-1,-1,-1,0)(230=-1,-1,-1,-1,0)(231=-1,-1,-1,-1,0)(232=-1,-1,-1,-1,0)(233=-1,-1,-1,-1,0)(150=-1,-1,-1,-1,0)(151=-1,-1,-1,-1,0))
   OPTKEY 0,(ARMDBGFLAGS)()
   OPTKEY 0,(DLGUARM)((105=-1,-1,-1,-1,0)(106=-1,-1,-1,-1,0)(107=-1,-1,-1,-1,0))
-  OPTKEY 0,(JL2CM3)(-U11111117 -O718 -S8 -C0 -JU1 -JI127.0.0.1 -JP0 -N00("ARM CoreSight SW-DP") -D00(00000000) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO27 -FD20000000 -FC800 -FN1 -FF0STM32F10x_512 -FS08000000 -FL080000)
-  OPTWA 0,1,(addr)
+  OPTKEY 0,(JL2CM3)(-U20090110 -O718 -S8 -C0 -JU1 -JI127.0.0.1 -JP0 -N00("ARM CoreSight SW-DP") -D00(00000000) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO27 -FD20000000 -FC800 -FN1 -FF0STM32F10x_512 -FS08000000 -FL080000)
   OPTMM 1,2,(mp3_fd_buffer)
   OPTMM 2,8,(mimeBuffer)
   OPTDF 0x86

+ 73 - 1
bsp/stm32_radio/project.Uv2

@@ -12,6 +12,7 @@ Group (finsh)
 Group (Filesystem)
 Group (LwIP)
 Group (mp3)
+Group (RTGUI)
 
 File 1,5,<.\rtconfig.h><rtconfig.h>
 File 1,5,<.\board.h><board.h>
@@ -35,6 +36,7 @@ File 1,1,<..\..\net\apps\udpecho.c><udpecho.c>
 File 1,1,<.\mp3.c><mp3.c>
 File 1,1,<.\wav.c><wav.c>
 File 1,1,<.\netbuffer.c><netbuffer.c>
+File 1,1,<.\gui.c><gui.c>
 File 2,1,<..\..\src\clock.c><clock.c>
 File 2,1,<..\..\src\idle.c><idle.c>
 File 2,1,<..\..\src\ipc.c><ipc.c>
@@ -162,6 +164,37 @@ File 9,1,<.\mp3\real\subband.c><subband.c>
 File 9,1,<.\mp3\real\trigtabs.c><trigtabs.c>
 File 9,2,<.\mp3\real\arm\asmpoly_thumb2.s><asmpoly_thumb2.s>
 File 9,2,<.\mp3\real\arm\asmmisc.s><asmmisc.s>
+File 10,1,<..\..\rtgui\common\rtgui_object.c><rtgui_object.c>
+File 10,1,<..\..\rtgui\common\rtgui_system.c><rtgui_system.c>
+File 10,1,<..\..\rtgui\common\rtgui_theme.c><rtgui_theme.c>
+File 10,1,<..\..\rtgui\common\asc12font.c><asc12font.c>
+File 10,1,<..\..\rtgui\common\color.c><color.c>
+File 10,1,<..\..\rtgui\common\dc.c><dc.c>
+File 10,1,<..\..\rtgui\common\dc_buffer.c><dc_buffer.c>
+File 10,1,<..\..\rtgui\common\dc_hw.c><dc_hw.c>
+File 10,1,<..\..\rtgui\common\filerw.c><filerw.c>
+File 10,1,<..\..\rtgui\common\font.c><font.c>
+File 10,1,<..\..\rtgui\common\image.c><image.c>
+File 10,1,<..\..\rtgui\common\image_xpm.c><image_xpm.c>
+File 10,1,<..\..\rtgui\common\region.c><region.c>
+File 10,1,<..\..\rtgui\server\server.c><server.c>
+File 10,1,<..\..\rtgui\server\driver.c><driver.c>
+File 10,1,<..\..\rtgui\server\panel.c><panel.c>
+File 10,1,<..\..\rtgui\widgets\widget.c><widget.c>
+File 10,1,<..\..\rtgui\widgets\window.c><window.c>
+File 10,1,<..\..\rtgui\widgets\workbench.c><workbench.c>
+File 10,1,<..\..\rtgui\widgets\view.c><view.c>
+File 10,1,<..\..\rtgui\widgets\box.c><box.c>
+File 10,1,<..\..\rtgui\widgets\button.c><button.c>
+File 10,1,<..\..\rtgui\widgets\container.c><container.c>
+File 10,1,<..\..\rtgui\widgets\iconbox.c><iconbox.c>
+File 10,1,<..\..\rtgui\widgets\label.c><label.c>
+File 10,1,<..\..\rtgui\widgets\textbox.c><textbox.c>
+File 10,1,<..\..\rtgui\widgets\title.c><title.c>
+File 10,1,<..\..\rtgui\widgets\toplevel.c><toplevel.c>
+File 10,1,<..\..\rtgui\server\mouse.c><mouse.c>
+File 10,1,<..\..\rtgui\server\topwin.c><topwin.c>
+File 10,1,<..\..\rtgui\common\caret.c><caret.c>
 
 
 Options 1,0,0  // Target 'RT-Thread STM32 Radio'
@@ -222,7 +255,7 @@ Options 1,0,0  // Target 'RT-Thread STM32 Radio'
  ADSCMISC ()
  ADSCDEFN (USE_STDPERIPH_DRIVER, STM32F10X_HD,)
  ADSCUDEF ()
- ADSCINCD (.;.\Libraries\STM32F10x_StdPeriph_Driver\inc;.\Libraries\CMSIS\Core\CM3;..\..\include;..\..\libcpu\arm\stm32;..\..\finsh;..\..\net\lwip\src;..\..\net\lwip\src\include;..\..\net\lwip\src\arch\include;..\..\net\lwip\src\include\ipv4;..\..\filesystem\dfs;..\..\filesystem\dfs\include;..\..\filesystem\dfs\filesystems\efsl\src\include;..\..\filesystem\dfs\filesystems\efsl\src\base\include;..\..\filesystem\dfs\filesystems\efsl\src\fs\vfat\include)
+ ADSCINCD (.;.\Libraries\STM32F10x_StdPeriph_Driver\inc;.\Libraries\CMSIS\Core\CM3;..\..\include;..\..\libcpu\arm\stm32;..\..\finsh;..\..\net\lwip\src;..\..\net\lwip\src\include;..\..\net\lwip\src\arch\include;..\..\net\lwip\src\include\ipv4;..\..\filesystem\dfs;..\..\filesystem\dfs\include;..\..\filesystem\dfs\filesystems\efsl\src\include;..\..\filesystem\dfs\filesystems\efsl\src\base\include;..\..\filesystem\dfs\filesystems\efsl\src\fs\vfat\include;..\..\rtgui\include)
  ADSASFLG { 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }
  ADSAMISC ()
  ADSADEFN ()
@@ -276,3 +309,42 @@ Options 1,9,0  // Group 'mp3'
  ADSAINCD ()
 EndOpt
 
+Options 1,10,0  // Group 'RTGUI'
+ PropFld { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }
+ IncBld=2
+ AlwaysBuild=2
+ GenAsm=2
+ AsmAsm=2
+ PublicsOnly=2
+ StopCode=11
+ CustArgs ()
+ LibMods ()
+ ADSCCFLG { 2,84,85,33,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }
+ ADSCMISC (--gnu)
+ ADSCDEFN ()
+ ADSCUDEF ()
+ ADSCINCD ()
+ ADSASFLG { 170,42,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }
+ ADSAMISC ()
+ ADSADEFN ()
+ ADSAUDEF ()
+ ADSAINCD ()
+EndOpt
+
+Options 1,1,23  // File 'gui.c'
+ PropFld { 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }
+ IncBld=2
+ AlwaysBuild=2
+ GenAsm=2
+ AsmAsm=2
+ PublicsOnly=2
+ StopCode=11
+ CustArgs ()
+ LibMods ()
+ ADSCCFLG { 2,84,85,33,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }
+ ADSCMISC (--gnu)
+ ADSCDEFN ()
+ ADSCUDEF ()
+ ADSCINCD ()
+EndOpt
+

+ 1 - 0
bsp/stm32_radio/rtconfig.h

@@ -156,5 +156,6 @@
 #define RT_LWIP_ETHTHREAD_MBOX_SIZE		4
 #define RT_LWIP_ETHTHREAD_STACKSIZE		512
 
+#define RT_USING_RTGUI
 
 #endif