Procházet zdrojové kódy

F427 显示,配置,dhcp问题处理,web接口。

liyi před 1 rokem
rodič
revize
c8c5798533

+ 21 - 0
f427/applications/datadef.h

@@ -192,6 +192,27 @@ typedef struct{
 }menu_net_t;
 
 
+typedef struct {
+	char max_char_1;
+	char max_char_2;
+	uint8_t flash_index;
+	char show_data[16];
+}base_show_val;
+
+typedef struct{
+	int 			zone;
+	uint8_t   lang;
+	uint16_t route;
+	char date[12];
+	char time[12];
+}base_set_t;
+
+
+typedef struct {
+	base_show_val n_show;
+	base_set_t 		n_bak;
+}menu_base_t;
+
 
 typedef struct {
     uint32_t    id;                         //产品ID   

+ 3 - 1
f427/applications/rtconfig.h

@@ -167,6 +167,8 @@
 //#define RT_LWIP_DEBUG
 //#define RT_LWIP_PBUF_DEBUG
 //#define RT_LWIP_TCPIP_DEBUG
+//#define RT_LWIP_DHCP_DEBUG
+//#define RT_LWIP_IP_REASS_DEBUG
 
 
 #define RT_LWIP_TCP
@@ -275,7 +277,7 @@
 
 
 #define NTP_USING_AUTO_SYNC
-#define NETUTILS_NTP_HOSTNAME   "cn.ntp.org.cn"
+#define NETUTILS_NTP_HOSTNAME   "ntp1.aliyun.com"
 //#define NETUTILS_NTP_HOSTNAME2  ""
 //#define NETUTILS_NTP_HOSTNAME3  ""
 

+ 35 - 2
f427/applications/ui/font.c

@@ -400,7 +400,7 @@ static const uint8_t font_en_2412[95][36] =
 };
 
 //新宋体▶→
-static const char *font_cn_str="→输出入通道状态率耗电压流量功率因素温湿度数据版本日期时间地址模式保存退出取消设置开关主从网络自手动掩码门禁传感器浓";
+static const char *font_cn_str="→输出入通道状态率耗电压流量功率因素温湿度数据版本日期时间地址模式保存退出取消设置开关主从网络自手动掩码门禁传感器浓区基旋转语言中文";
 static const uint8_t font_cn_1212[][24] =
 {
 {0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0xA8,0x00,0x70,0x00,0x70,0x00,0x20,0x00,0x20,0x00,0x00,0x00},/*"→",0*/
@@ -464,8 +464,17 @@ static const uint8_t font_cn_1212[][24] =
 {0x20,0x01,0x27,0x0F,0xA5,0x0A,0xA5,0x0A,0x67,0x0E,0x38,0x00,0x67,0x0E,0xA5,0x0A,0xAD,0x0A,0x37,0x0F,0x20,0x01,0x00,0x00},/*"器",2*/
 {0x22,0x04,0x44,0x02,0x00,0x00,0x8C,0x00,0x44,0x00,0xE4,0x0F,0x1C,0x04,0x67,0x00,0x84,0x01,0x44,0x02,0x2C,0x04,0x00,0x00},/*"浓",3*/
 	
-	
+{0x00,0x00,0xFE,0x0F,0x02,0x08,0x0A,0x0A,0x12,0x09,0xA2,0x08,0x42,0x08,0xA2,0x08,0x12,0x09,0x0A,0x0A,0x02,0x08,0x00,0x00},/*"区",0*/
+{0x82,0x0A,0x82,0x09,0xFF,0x0A,0xAA,0x0A,0xAA,0x0A,0xAA,0x0F,0xAA,0x0A,0xAA,0x0A,0xFF,0x0A,0x82,0x09,0x82,0x0A,0x00,0x00},/*"基",1*/
+{0x08,0x08,0xF8,0x07,0x49,0x08,0x4A,0x08,0xD0,0x07,0x08,0x08,0xD7,0x07,0x14,0x08,0xF4,0x0F,0x14,0x09,0x34,0x09,0x00,0x00},/*"旋",2*/
+{0x74,0x02,0x4F,0x02,0xF4,0x0F,0x40,0x01,0x24,0x00,0xE4,0x02,0xBC,0x02,0xA7,0x04,0xA4,0x06,0xA4,0x09,0x20,0x00,0x00,0x00},/*"转",3*/
+
+{0x11,0x00,0xF2,0x07,0x00,0x02,0x21,0x00,0xA5,0x0F,0xBD,0x04,0xA7,0x04,0xA5,0x04,0xA5,0x04,0xBD,0x0F,0x21,0x00,0x00,0x00},/*"语",0*/
+{0x04,0x00,0x54,0x0F,0x54,0x05,0x54,0x05,0x55,0x05,0x56,0x05,0x54,0x05,0x54,0x05,0x54,0x05,0x54,0x0F,0x04,0x00,0x00,0x00},/*"言",1*/
 
+{0x00,0x00,0xF8,0x01,0x88,0x00,0x88,0x00,0x88,0x00,0xFF,0x0F,0x88,0x00,0x88,0x00,0x88,0x00,0xF8,0x01,0x00,0x00,0x00,0x00},/*"中",0*/
+{0x04,0x08,0x04,0x08,0x1C,0x04,0x64,0x04,0x85,0x02,0x06,0x01,0x84,0x02,0x64,0x04,0x1C,0x04,0x04,0x08,0x04,0x08,0x00,0x00},/*"文",1*/
+	
 };
 static const uint8_t font_cn_1616[][32] =
 {
@@ -532,6 +541,19 @@ static const uint8_t font_cn_1616[][32] =
 {0x10,0x04,0x60,0x04,0x02,0x7E,0x8C,0x01,0x20,0x04,0x18,0x02,0x08,0x01,0xC8,0xFF,0x38,0x40,0xCF,0x21,0x08,0x06,0x08,0x0A,0x28,0x11,0x98,0x20,0x00,0x40,0x00,0x00},/*"浓",3*/
 
 
+{0x00,0x00,0xFE,0x7F,0x02,0x40,0x02,0x40,0x02,0x48,0x12,0x44,0x22,0x42,0x42,0x41,0x82,0x40,0x42,0x41,0x22,0x42,0x1A,0x4C,0x02,0x40,0x02,0x40,0x00,0x40,0x00,0x00},/*"区",0*/
+{0x00,0x11,0x04,0x11,0x04,0x89,0x04,0x85,0xFF,0x93,0x54,0x91,0x54,0x91,0x54,0xFD,0x54,0x91,0x54,0x91,0xFF,0x93,0x04,0x85,0x04,0x89,0x04,0x11,0x00,0x11,0x00,0x00},/*"基",1*/
+{0x10,0x80,0x10,0x60,0xF1,0x1F,0x96,0x40,0x90,0x80,0x90,0x7F,0x10,0x80,0x28,0x60,0x27,0x1F,0x24,0x20,0xE4,0x7F,0x24,0x44,0x24,0x44,0xE4,0x44,0x04,0x40,0x00,0x00},/*"旋",2*/
+{0xC8,0x08,0xB8,0x18,0x8F,0x08,0xE8,0xFF,0x88,0x04,0x88,0x04,0x40,0x00,0x48,0x02,0x48,0x0B,0xE8,0x12,0x5F,0x22,0x48,0xD2,0x48,0x0A,0x48,0x06,0x40,0x00,0x00,0x00},/*"转",3*/
+
+
+{0x40,0x00,0x42,0x00,0xCC,0x7F,0x00,0x20,0x00,0x10,0x82,0x00,0x92,0xFC,0x92,0x44,0xF2,0x44,0x9E,0x44,0x92,0x44,0x92,0x44,0xF2,0xFC,0x82,0x00,0x80,0x00,0x00,0x00},/*"语",0*/
+{0x04,0x00,0x04,0x00,0x24,0xF9,0x24,0x49,0x24,0x49,0x24,0x49,0x25,0x49,0x26,0x49,0x24,0x49,0x24,0x49,0x24,0x49,0x24,0x49,0x24,0xF9,0x04,0x00,0x04,0x00,0x00,0x00},/*"言",1*/
+
+{0x00,0x00,0x00,0x00,0xF0,0x0F,0x10,0x04,0x10,0x04,0x10,0x04,0x10,0x04,0xFF,0xFF,0x10,0x04,0x10,0x04,0x10,0x04,0x10,0x04,0xF0,0x0F,0x00,0x00,0x00,0x00,0x00,0x00},/*"中",0*/
+{0x08,0x80,0x08,0x80,0x08,0x40,0x38,0x40,0xC8,0x20,0x08,0x11,0x09,0x0A,0x0E,0x04,0x08,0x0A,0x08,0x11,0xC8,0x20,0x38,0x40,0x08,0x40,0x08,0x80,0x08,0x80,0x00,0x00},/*"文",1*/
+
+	
 };
 static const uint8_t font_cn_2424[][72] =
 {
@@ -597,6 +619,17 @@ static const uint8_t font_cn_2424[][72] =
 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x01,0x00,0x04,0x01,0xFC,0x87,0x40,0xFC,0xC5,0x3F,0x84,0xC4,0x10,0x84,0xA4,0x10,0x84,0x94,0x10,0xFC,0x8D,0x7F,0xF8,0x87,0x3F,0x00,0x07,0x00,0x00,0x05,0x00,0xFC,0x85,0x7F,0xFC,0x8D,0x10,0x84,0x95,0x10,0x84,0xA7,0x10,0x84,0xC6,0x10,0xFC,0xC5,0x7F,0xFC,0xC5,0x3F,0x00,0x86,0x00,0x00,0x84,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"器",2*/
 {0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x03,0x01,0x04,0x0E,0x7F,0x08,0xC0,0x7F,0x38,0x3C,0x04,0x80,0x03,0x02,0x00,0x00,0x01,0x80,0x80,0x00,0xF0,0x60,0x00,0x20,0x38,0x20,0x20,0xFE,0x7F,0xA0,0x13,0x30,0xFC,0x03,0x10,0x2E,0x1C,0x08,0x20,0x60,0x00,0x20,0xE0,0x01,0x20,0x10,0x03,0x20,0x09,0x06,0xE0,0x0C,0x0C,0x70,0x04,0x1C,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00},/*"浓",3*/
 
+{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x7F,0xF8,0xFF,0x3F,0x08,0x00,0x20,0x08,0x00,0x20,0x08,0x00,0x24,0x88,0x00,0x22,0x08,0x01,0x21,0x08,0x82,0x20,0x08,0x44,0x20,0x08,0x38,0x20,0x08,0x38,0x20,0x08,0x6C,0x20,0x08,0xE7,0x20,0xC8,0x81,0x23,0xC8,0x00,0x27,0x08,0x00,0x20,0x0C,0x00,0x20,0x08,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"区",0*/
+{0x00,0x00,0x00,0x00,0x10,0x04,0x10,0x10,0x24,0x10,0x10,0x22,0x10,0x10,0x22,0x10,0x10,0x21,0x10,0x90,0x22,0xFE,0x7F,0x22,0x54,0x32,0x22,0x50,0x12,0x22,0x50,0x12,0x22,0x50,0xF2,0x3F,0x50,0x52,0x22,0x50,0x12,0x22,0x50,0x12,0x22,0xFE,0x7F,0x23,0xFC,0xDF,0x22,0x10,0x90,0x20,0x10,0x10,0x21,0x10,0x10,0x33,0x10,0x18,0x23,0x00,0x10,0x02,0x00,0x00,0x00,0x00,0x00,0x00},/*"基",1*/
+{0x00,0x00,0x00,0x20,0x00,0x40,0x20,0x00,0x30,0x20,0x00,0x0C,0xE2,0xFF,0x03,0xEC,0x3F,0x00,0x38,0x02,0x08,0x20,0x02,0x58,0x20,0xFE,0x2F,0x30,0x02,0x10,0x20,0x02,0x0C,0x80,0xF9,0x03,0x70,0x39,0x03,0x3E,0x01,0x04,0x24,0x01,0x08,0x20,0x01,0x18,0x20,0xFF,0x1F,0x20,0x41,0x30,0x20,0x41,0x20,0x20,0x45,0x20,0x30,0x63,0x60,0x20,0x41,0x20,0x00,0x00,0x00,0x00,0x00,0x00},/*"旋",2*/
+{0x00,0x00,0x00,0x20,0x00,0x02,0x20,0x08,0x02,0x20,0x0F,0x02,0xE0,0x09,0x01,0x3E,0x08,0x01,0x24,0xFF,0x7F,0x20,0x09,0x01,0x20,0x88,0x00,0x20,0x8C,0x00,0x20,0x8C,0x00,0x20,0x04,0x00,0x20,0x24,0x02,0x20,0x7C,0x04,0xA0,0x2F,0x04,0xF8,0x25,0x08,0x2E,0x24,0x1C,0x20,0x24,0x33,0x20,0xE4,0x71,0x20,0x64,0x00,0x30,0x44,0x00,0x20,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"转",3*/
+
+{0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x02,0x00,0x04,0x02,0x00,0x18,0xFE,0x0F,0x30,0xFE,0x0F,0x00,0x00,0x04,0x00,0x08,0x02,0x08,0x08,0x01,0x48,0x08,0x00,0x48,0xC8,0x7F,0x48,0x48,0x10,0xE8,0x4F,0x10,0x78,0x48,0x10,0x48,0x48,0x10,0x48,0x48,0x10,0x48,0x48,0x10,0x48,0x48,0x10,0xC8,0x4F,0x10,0x0C,0xC8,0x3F,0x08,0x08,0x00,0x00,0x0C,0x00,0x00,0x08,0x00,0x00,0x00,0x00},/*"语",0*/
+{0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x20,0x00,0x00,0x20,0x00,0x00,0x20,0x11,0x00,0x20,0x91,0x7F,0x20,0x91,0x10,0x20,0x91,0x10,0x20,0x91,0x10,0x22,0x91,0x10,0x2C,0x91,0x10,0x3C,0x91,0x10,0x20,0x91,0x10,0x20,0x91,0x10,0x20,0x91,0x10,0x20,0x91,0x10,0xA0,0x91,0x7F,0x20,0x91,0x00,0x20,0x00,0x00,0x30,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"言",1*/
+
+{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x00,0xC0,0x7F,0x00,0x40,0x20,0x00,0x40,0x20,0x00,0x40,0x20,0x00,0x40,0x20,0x00,0x40,0x20,0x00,0x40,0x20,0x00,0xFE,0xFF,0x7F,0x44,0x20,0x30,0x40,0x20,0x00,0x40,0x20,0x00,0x40,0x20,0x00,0x40,0x20,0x00,0x40,0x20,0x00,0x40,0x20,0x00,0xC0,0xFF,0x00,0xC0,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"中",0*/
+{0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x40,0x40,0x00,0x40,0x40,0x00,0x20,0x40,0x00,0x20,0x40,0x00,0x10,0xC0,0x01,0x10,0x40,0x0E,0x08,0x40,0x30,0x0C,0x44,0xC0,0x04,0x58,0x00,0x03,0x70,0x80,0x03,0x40,0xE0,0x04,0x40,0x38,0x0C,0xC0,0x0F,0x18,0xC0,0x01,0x18,0x40,0x00,0x30,0x40,0x00,0x30,0x40,0x00,0x30,0x60,0x00,0x60,0x40,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00},/*"文",1*/
+	
 };
 
 static inline int utf8_chrlen(uint8_t *str)

+ 10 - 0
f427/applications/ui/lang.c

@@ -45,6 +45,11 @@ const char *lang_str_pool[2][STR_ID_MAX]={
 				"手动",			//STR_ID_NET_HAND
 				"传感器"	,		//STR_ID_SENSOR
 				"浓度",			//STR_ID_CO2
+				"基本设置",	//STR_ID_BASE_SET
+				"时区",			//STR_ID_ZONE
+				"旋转",			//STR_ID_ROUTE
+				"语言",			//STR_ID_LANG
+				"中文",			//STR_ID_CN
     },
     {
         "Version",  //STR_ID_VERSION
@@ -77,6 +82,11 @@ const char *lang_str_pool[2][STR_ID_MAX]={
 				"STATIC",   //STR_ID_NET_HAND
 				"Sensor",		//STR_ID_SENSOR
 				"Density",	//STR_ID_CO2
+				"Base Set",			//STR_ID_BASE_SET
+				"Zone",			//STR_ID_ZONE
+				"Route",			//STR_ID_ROUTE
+				"Lang",			//STR_ID_LANG
+				"Chinese",			//STR_ID_CN
     },
 };
 

+ 5 - 0
f427/applications/ui/lang.h

@@ -32,6 +32,11 @@ enum {
 		STR_ID_NET_HAND,
 		STR_ID_SENSOR,
 		STR_ID_CO2,
+		STR_ID_BASE_SET,
+		STR_ID_ZONE,
+		STR_ID_ROUTE,
+		STR_ID_LANG,
+		STR_ID_CN,
     STR_ID_MAX,
 };
 

+ 758 - 21
f427/applications/ui/menu.c

@@ -28,7 +28,7 @@ enum {
     MENU_SENSOR,
     MENU_MODBUS,
 		MENU_NET,
-	
+		MENU_BASE_SET,
     MENU_MAX
 };
 enum {
@@ -51,7 +51,16 @@ enum {
 	NET_ITEM_MAX
 };
 
-
+enum{
+	BASE_ITEM_LANG,
+	BASE_ITEM_ROUTE,
+	BASE_ITEM_ZONE,
+	BASE_ITEM_DATE,
+	BASE_ITEM_TIME,
+	BASE_ITEM_SAVE,
+	BASE_ITEM_QUIT,
+	BASE_ITEM_MAX,
+};
 
 
 enum {
@@ -89,7 +98,8 @@ typedef struct {
     int         fliptime;
 
     modbus_data_t mb;
-		menu_net_t    m_net; 
+		menu_net_t    m_net;
+		menu_base_t	  m_base;
 }menu_handle_t;
 static int lang_id=LANG_ID_CHINESE;
 //static int lang_id=LANG_ID_ENGLISH;
@@ -249,14 +259,22 @@ static void menu_input_paint(menu_handle_t *h, int font1, int font2, int item_h,
     sprintf(tmp, "%s:%0.2f", lang_get_str(h->lang, STR_ID_FACTOR), pttl->total[0].factor);
     lcd_draw_string(LCD_WIDTH/2, item_h*2, LCD_WIDTH/2, item_h, tmp, font2, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);
 #else
-    sprintf(tmp, "%s:%0.2f %s:%0.2f", lang_get_str(h->lang, STR_ID_VOLTAGE), pttl->voltage, lang_get_str(h->lang, STR_ID_CURRENT), pttl->current);
-    lcd_draw_string(0, item_h, LCD_WIDTH, item_h, tmp, font2, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);
+    sprintf(tmp, "%s:%0.2f", lang_get_str(h->lang, STR_ID_VOLTAGE), pttl->voltage);
+    lcd_draw_string(5, item_h, LCD_WIDTH, item_h, tmp, font2, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);
+		
+		sprintf(tmp, "%s:%0.2f", lang_get_str(h->lang, STR_ID_CURRENT), pttl->current);
+    lcd_draw_string(5, item_h*2, LCD_WIDTH, item_h, tmp, font2, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);
+		
+		
 
-    sprintf(tmp, "%s:%0.2f %s:%0.2f", lang_get_str(h->lang, STR_ID_POWER), pttl->power, lang_get_str(h->lang, STR_ID_FACTOR), pttl->factor);
-    lcd_draw_string(0, item_h*2, LCD_WIDTH, item_h, tmp, font2, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);
+    sprintf(tmp, "%s:%0.2f", lang_get_str(h->lang, STR_ID_POWER), pttl->power);
+    lcd_draw_string(5, item_h*3, LCD_WIDTH, item_h, tmp, font2, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);
+
+    sprintf(tmp, "%s:%0.2f",lang_get_str(h->lang, STR_ID_FACTOR), pttl->factor);
+    lcd_draw_string(5, item_h*4, LCD_WIDTH, item_h, tmp, font2, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);
 #endif
     sprintf(tmp, "%s:%0.2f", lang_get_str(h->lang, STR_ID_CONSUMP), pttl->consump);
-    lcd_draw_string(0, item_h*3, LCD_WIDTH, item_h, tmp, font2, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);
+    lcd_draw_string(5, item_h*5, LCD_WIDTH, item_h, tmp, font2, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);
 
     //lcd_refresh();
     
@@ -285,7 +303,7 @@ static void menu_output_paint(menu_handle_t *h, int font1, int font2, int item_h
 			lcd_draw_string(0, 0, LCD_WIDTH, item_h, tmp, font1, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_CENTER, VERTICAL_CENTER);
 			sprintf(tmp, "%s:%s  %s:0.00", lang_get_str(h->lang, STR_ID_SWITCH), lang_get_str(h->lang, STR_ID_OFF), lang_get_str(h->lang, STR_ID_CURRENT));
 			lcd_draw_string(0, item_h, LCD_WIDTH, item_h, tmp, font2, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);
-			sprintf(tmp, "%s:.0.00 %s:0.00", lang_get_str(h->lang, STR_ID_POWER), lang_get_str(h->lang, STR_ID_FACTOR));
+			sprintf(tmp, "%s:0.00 %s:0.00", lang_get_str(h->lang, STR_ID_POWER), lang_get_str(h->lang, STR_ID_FACTOR));
 			lcd_draw_string(0, item_h*2, LCD_WIDTH, item_h, tmp, font2, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);
 			sprintf(tmp, "%s:0.00", lang_get_str(h->lang, STR_ID_CONSUMP));
 			lcd_draw_string(0, item_h*3, LCD_WIDTH, item_h, tmp, font2, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);
@@ -307,15 +325,21 @@ static void menu_output_paint(menu_handle_t *h, int font1, int font2, int item_h
     sprintf(tmp, "%s:%0.2f", lang_get_str(h->lang, STR_ID_FACTOR), pwr->factor);
     lcd_draw_string(LCD_WIDTH/2, item_h*2, LCD_WIDTH/2, item_h, tmp, font2, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);
 #else
-    sprintf(tmp, "%s:%s  %s:%0.2f", lang_get_str(h->lang, STR_ID_SWITCH), pon, lang_get_str(h->lang, STR_ID_CURRENT), ((float)all->pch[h->ch_out+1].power[0].current/10.0));
-    lcd_draw_string(0, item_h, LCD_WIDTH, item_h, tmp, font2, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);
+    sprintf(tmp, "%s:%s", lang_get_str(h->lang, STR_ID_SWITCH), pon);
+    lcd_draw_string(5, item_h, LCD_WIDTH, item_h, tmp, font2, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);
+		sprintf(tmp, "%s:%0.2f",lang_get_str(h->lang, STR_ID_CURRENT), ((float)all->pch[h->ch_out+1].power[0].current/10.0));
+    lcd_draw_string(5, item_h*2, LCD_WIDTH, item_h, tmp, font2, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);
 
-    sprintf(tmp, "%s:%0.2f %s:%0.2f", lang_get_str(h->lang, STR_ID_POWER), (((float)all->pch[h->ch_out+1].power[0].power)/1000.0), lang_get_str(h->lang, STR_ID_FACTOR), 
-								(all->pch[h->ch_out+1].power[0].factor)/100.0);
-    lcd_draw_string(0, item_h*2, LCD_WIDTH, item_h, tmp, font2, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);
+
+    sprintf(tmp, "%s:%0.2f", lang_get_str(h->lang, STR_ID_POWER), (((float)all->pch[h->ch_out+1].power[0].power)/1000.0));
+    lcd_draw_string(5, item_h*3, LCD_WIDTH, item_h, tmp, font2, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);
+		
+		
+    sprintf(tmp, "%s:%0.2f", lang_get_str(h->lang, STR_ID_FACTOR),(all->pch[h->ch_out+1].power[0].factor)/100.0);
+    lcd_draw_string(5, item_h*4, LCD_WIDTH, item_h, tmp, font2, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);
 #endif
     sprintf(tmp, "%s:%0.2f", lang_get_str(h->lang, STR_ID_CONSUMP), (all->pch[h->ch_out+1].power[0].consump)/1000.0);
-    lcd_draw_string(0, item_h*3, LCD_WIDTH, item_h, tmp, font2, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);
+    lcd_draw_string(5, item_h*5, LCD_WIDTH, item_h, tmp, font2, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);
 
     //lcd_refresh();
     
@@ -366,6 +390,182 @@ static void menu_sensor_paint(menu_handle_t *h, int font1, int font2, int item_h
     //lcd_refresh();
     
 }
+
+
+static void menu_base_paint(menu_handle_t *h, int font1, int font2, int item_h, key_val_t *kv)
+{
+	int r,font_color=COLOR_WHITE;
+  char tmp[100];
+	uint32_t base = 0;
+	
+	base_set_t *dat = &h->m_base.n_bak;  
+	static uint8_t flash_cnt=0;
+  if(h->uflag&UFLAG_TIMER) {
+        flash_cnt++;
+  }
+	sprintf(tmp, "%s",lang_get_str(h->lang, STR_ID_BASE_SET));
+	lcd_draw_string(0, 0, LCD_WIDTH, item_h, tmp, font1, COLOR_YELLOW, COLOR_BLACK, HORIZONTAL_CENTER, VERTICAL_CENTER);
+
+	//lang
+	if(h->menu.menu_lv && h->menu.page[h->menu.menu_id].item_id==BASE_ITEM_LANG) {
+     if(h->uflag&UFLAG_TIMER && h->menu.menu_lv==2) {
+            font_color = (flash_cnt%2)?COLOR_WHITE:COLOR_BLACK;
+     }
+			sprintf(tmp, ">%s:", lang_get_str(h->lang, STR_ID_LANG));
+	}else{
+			sprintf(tmp, "%s:", lang_get_str(h->lang, STR_ID_LANG));
+	}
+	lcd_draw_string(5, item_h, 84, item_h, tmp, font1, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);
+	sprintf(tmp,"%s",dat->lang ? "English" : lang_get_str(dat->lang, STR_ID_CN) );
+
+	lcd_draw_string(90, item_h, 120, item_h, tmp, font1, font_color, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);
+	//route
+	
+	if(h->menu.menu_lv && h->menu.page[h->menu.menu_id].item_id == BASE_ITEM_ROUTE) {
+     if(h->uflag&UFLAG_TIMER && h->menu.menu_lv==2) {
+            font_color = (flash_cnt%2)?COLOR_WHITE:COLOR_BLACK;
+     }
+		sprintf(tmp, ">%s:",lang_get_str(h->lang, STR_ID_ROUTE));
+	}else
+	{
+		sprintf(tmp, "%s:",lang_get_str(h->lang, STR_ID_ROUTE));
+	}
+	lcd_draw_string(5, (item_h)*2, 84, item_h, tmp, font1, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);
+	sprintf(tmp,"%d",dat->route);
+	if(h->menu.menu_lv && h->menu.page[h->menu.menu_id].item_id == BASE_ITEM_ROUTE) {
+		lcd_draw_string(90, (item_h)*2, 60, item_h, tmp, font1, font_color, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);
+	}else
+	{
+		lcd_draw_string(90, (item_h)*2, 60, item_h, tmp, font1, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);
+	}
+	
+	//zone
+	if(h->menu.menu_lv && h->menu.page[h->menu.menu_id].item_id == BASE_ITEM_ZONE) {
+
+		sprintf(tmp, ">%s:",lang_get_str(h->lang, STR_ID_ZONE));
+	}else
+	{
+		sprintf(tmp, "%s:",lang_get_str(h->lang, STR_ID_ZONE));
+	}	
+	lcd_draw_string(5, (item_h)*3, 84, item_h, tmp, font1, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);	
+	if(h->menu.menu_lv && h->menu.page[h->menu.menu_id].item_id == BASE_ITEM_ZONE) {
+     if(h->uflag&UFLAG_TIMER && h->menu.menu_lv==2) {
+            font_color = (flash_cnt%2)?COLOR_WHITE:COLOR_BLACK;
+     }
+		 for(int i = 0; i < 3;i++)
+		 {
+			 uint32_t _index =90+i*12;
+			 //char data= h->m_base.n_show.show_data[i];
+			 sprintf(tmp, "%c",h->m_base.n_show.show_data[i]);
+			 if(h->m_base.n_show.flash_index == i)
+			 {
+					lcd_draw_string(_index, (item_h)*3, 12, item_h, tmp,font1, font_color, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);
+			 }else
+			 {
+					lcd_draw_string(_index, (item_h)*3, 12, item_h, tmp,font1, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);
+			 }			 
+		 }
+	}else
+	{
+		if(dat->zone > 0)
+			sprintf(tmp, "+%d",dat->zone);
+		else
+			sprintf(tmp, "%d",dat->zone);
+		lcd_draw_string(90, (item_h)*3, 36, item_h, tmp, font1, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);
+	}
+	
+	//date
+	if(h->menu.menu_lv && h->menu.page[h->menu.menu_id].item_id==BASE_ITEM_DATE) {
+     if(h->uflag&UFLAG_TIMER && h->menu.menu_lv==2) {
+            font_color = (flash_cnt%2)?COLOR_WHITE:COLOR_BLACK;
+     }
+			sprintf(tmp, ">%s:", lang_get_str(h->lang, STR_ID_TIME));
+	}else{
+			sprintf(tmp, "%s:", lang_get_str(h->lang, STR_ID_TIME));
+	}
+	lcd_draw_string(5, (item_h)*4, 84, item_h, tmp, font1, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);	
+	if(h->menu.menu_lv && h->menu.page[h->menu.menu_id].item_id == BASE_ITEM_DATE) {
+     if(h->uflag&UFLAG_TIMER && h->menu.menu_lv==2) {
+            font_color = (flash_cnt%2)?COLOR_WHITE:COLOR_BLACK;
+     }
+		 for(int i = 0; i < 10;i++)
+		 {
+			 uint32_t _index =90+i*12;
+			 //char data= h->m_base.n_show.show_data[i];
+			 sprintf(tmp, "%c",h->m_base.n_show.show_data[i]);
+			 if(h->m_base.n_show.flash_index == i)
+			 {
+					lcd_draw_string(_index, (item_h)*4, 12, item_h, tmp,font1, font_color, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);
+			 }else
+			 {
+					lcd_draw_string(_index, (item_h)*4, 12, item_h, tmp,font1, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);
+			 }			 
+		 }
+	}else
+	{
+		sprintf(tmp, "%s",dat->date);
+		lcd_draw_string(90, (item_h)*4, 140, item_h, tmp, font1, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);
+	}	
+	
+	//date
+	if(h->menu.menu_lv && h->menu.page[h->menu.menu_id].item_id==BASE_ITEM_TIME) {
+     if(h->uflag&UFLAG_TIMER && h->menu.menu_lv==2) {
+            font_color = (flash_cnt%2)?COLOR_WHITE:COLOR_BLACK;
+     }
+			sprintf(tmp, ">%s:", lang_get_str(h->lang, STR_ID_DATE));
+	}else{
+			sprintf(tmp, "%s:", lang_get_str(h->lang, STR_ID_DATE));
+	}
+	lcd_draw_string(5, (item_h)*5, 84, item_h, tmp, font1, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);	
+	if(h->menu.menu_lv && h->menu.page[h->menu.menu_id].item_id == BASE_ITEM_TIME) {
+     if(h->uflag&UFLAG_TIMER && h->menu.menu_lv==2) {
+            font_color = (flash_cnt%2)?COLOR_WHITE:COLOR_BLACK;
+     }
+		 for(int i = 0; i < 10;i++)
+		 {
+			 uint32_t _index =90+i*12;
+			 //char data= h->m_base.n_show.show_data[i];
+			 sprintf(tmp, "%c",h->m_base.n_show.show_data[i]);
+			 if(h->m_base.n_show.flash_index == i)
+			 {
+					lcd_draw_string(_index, (item_h)*5, 12, item_h, tmp,font1, font_color, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);
+			 }else
+			 {
+					lcd_draw_string(_index, (item_h)*5, 12, item_h, tmp,font1, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);
+			 }			 
+		 }
+	}else
+	{
+		sprintf(tmp, "%s",dat->time);
+		lcd_draw_string(90, (item_h)*5, 140, item_h, tmp, font1, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);
+	}	
+
+		if(h->menu.menu_lv && h->menu.page[h->menu.menu_id].item_id==BASE_ITEM_SAVE) {
+			sprintf(tmp, ">%s", lang_get_str(h->lang, STR_ID_SAVE));
+        if(h->uflag&UFLAG_TIMER && h->menu.menu_lv==2) {
+            font_color = (flash_cnt%2)?COLOR_WHITE:COLOR_BLACK;
+        }
+		}else
+		{
+			sprintf(tmp, "%s", lang_get_str(h->lang, STR_ID_SAVE));
+		}			
+		
+		lcd_draw_string(0,  (item_h)*6, LCD_WIDTH/2, item_h, tmp, font2, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_CENTER, VERTICAL_CENTER);
+
+		if(h->menu.menu_lv && h->menu.page[h->menu.menu_id].item_id==BASE_ITEM_QUIT) {
+			sprintf(tmp, ">%s", lang_get_str(h->lang, STR_ID_QUIT));
+        if(h->uflag&UFLAG_TIMER && h->menu.menu_lv==2) {
+            font_color = (flash_cnt%2)?COLOR_WHITE:COLOR_BLACK;
+        }
+		}else
+		{
+			sprintf(tmp, "%s", lang_get_str(h->lang, STR_ID_QUIT));
+		}				
+		lcd_draw_string(LCD_WIDTH/2,  (item_h)*6, LCD_WIDTH/2, item_h, tmp, font2, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_CENTER, VERTICAL_CENTER);	
+}
+
+
+
 static void menu_net_paint(menu_handle_t *h, int font1, int font2, int item_h, key_val_t *kv)
 {
     int r,font_color=COLOR_WHITE;
@@ -853,6 +1053,518 @@ static void ip_change(menu_net_t *net,uint8_t key_type)
 
 
 
+static int menu_base_key_handle(menu_handle_t *h, key_val_t *kv)
+{
+	 int r = 0;
+    if(h->menu.menu_lv==0) {
+      //h->m_net.n_bak = paras_get()->netwk;
+			/// get new ip 
+			//net_get_ip(&h->m_net.n_bak);
+			h->m_base.n_bak.route = paras_get()->misc.rotate;
+			h->m_base.n_bak.lang = paras_get()->sys.lang;
+			h->m_base.n_bak.zone = paras_get()->sys.tzone;
+			time_t t=time(NULL);
+			struct tm *tm=localtime(&t);
+			get_date(h->m_base.n_bak.date,sizeof(h->m_base.n_bak.date),tm);
+			get_time(h->m_base.n_bak.time,sizeof(h->m_base.n_bak.time),tm);
+    }	
+		switch(kv->key) 
+		{
+			case KEY_UP:
+			{
+				if(h->menu.menu_lv==0) {
+             if(kv->type==TYPE_SHORT) {
+                 h->menu.menu_id--;
+             }				
+				}else if(h->menu.menu_lv==1)
+				{
+					if(h->menu.page[h->menu.menu_id].item_id > 0) {
+               h->menu.page[h->menu.menu_id].item_id--;
+            }
+            else {
+               h->menu.page[h->menu.menu_id].item_id = BASE_ITEM_QUIT;
+            }
+						switch(h->menu.page[h->menu.menu_id].item_id)
+						{
+							case BASE_ITEM_ZONE:
+							{
+								if(h->m_base.n_bak.zone >= 0)
+								{
+									if(h->m_base.n_bak.zone >= 10)
+									{
+										sprintf(h->m_base.n_show.show_data,"+%d",h->m_base.n_bak.zone);
+									}else
+									{
+										sprintf(h->m_base.n_show.show_data,"+0%d",h->m_base.n_bak.zone);
+									}
+								}else
+								{
+									if(h->m_base.n_bak.zone <= -10)
+									{
+										sprintf(h->m_base.n_show.show_data,"%d",h->m_base.n_bak.zone);
+									}else
+									{
+										sprintf(h->m_base.n_show.show_data,"-0%d",abs(h->m_base.n_bak.zone));
+									}									
+								}	
+							}
+								break;
+							case BASE_ITEM_DATE:
+							{
+								sprintf(h->m_base.n_show.show_data,"%s",h->m_base.n_bak.date);
+							}
+								break;
+							case BASE_ITEM_TIME:
+							{
+								sprintf(h->m_base.n_show.show_data,"%s",h->m_base.n_bak.time);
+							}
+								break;
+							default:
+								break;
+						}
+				}else if(h->menu.menu_lv==2)
+				{
+					switch(h->menu.page[h->menu.menu_id].item_id)
+					{
+						case BASE_ITEM_LANG:
+						{
+							h->m_base.n_bak.lang = h->m_base.n_bak.lang == 0 ? 1 : 0;
+						}
+						break;
+						case BASE_ITEM_ROUTE:
+						{
+							if(h->m_base.n_bak.route == 0)
+							{
+								h->m_base.n_bak.route = 270;
+							}else
+								h->m_base.n_bak.route -= 90;
+						}
+						break;
+						case BASE_ITEM_ZONE:
+						{
+							if(h->m_base.n_show.flash_index == 0)
+							{
+								if(h->m_base.n_show.show_data[h->m_base.n_show.flash_index] == '+')
+								{
+									h->m_base.n_show.show_data[h->m_base.n_show.flash_index] = '-';
+								}else
+								{
+									h->m_base.n_show.show_data[h->m_base.n_show.flash_index] = '+';
+								}
+							}else if(h->m_base.n_show.flash_index == 1)
+							{
+								if(h->m_base.n_show.show_data[h->m_base.n_show.flash_index] == '0')
+								{
+									h->m_base.n_show.show_data[h->m_base.n_show.flash_index] = h->m_base.n_show.max_char_1;
+								}else
+									h->m_base.n_show.show_data[h->m_base.n_show.flash_index]--;
+							}else if(h->m_base.n_show.flash_index == 2)
+							{
+								if(h->m_base.n_show.show_data[h->m_base.n_show.flash_index] == '0')
+								{
+									h->m_base.n_show.show_data[h->m_base.n_show.flash_index] = h->m_base.n_show.max_char_2;
+								}else
+								{
+									h->m_base.n_show.show_data[h->m_base.n_show.flash_index]--;
+								}
+							}
+						}
+							break;
+						case BASE_ITEM_DATE:
+						{
+							if(h->m_base.n_show.flash_index == 5 || h->m_base.n_show.flash_index == 8)
+							{
+								if(h->m_base.n_show.show_data[h->m_base.n_show.flash_index] == '0')
+								{
+									h->m_base.n_show.show_data[h->m_base.n_show.flash_index] = h->m_base.n_show.max_char_1;
+								}else
+								{
+									h->m_base.n_show.show_data[h->m_base.n_show.flash_index] --;
+								}
+							}else if(h->m_base.n_show.flash_index == 6 || h->m_base.n_show.flash_index == 9)
+							{
+								if(h->m_base.n_show.show_data[h->m_base.n_show.flash_index] == '0')
+								{
+									h->m_base.n_show.show_data[h->m_base.n_show.flash_index] = h->m_base.n_show.max_char_2;
+								}else
+								{
+									h->m_base.n_show.show_data[h->m_base.n_show.flash_index] --;
+								}
+							}else
+							{
+								if(h->m_base.n_show.show_data[h->m_base.n_show.flash_index] == '0')
+								{
+									h->m_base.n_show.show_data[h->m_base.n_show.flash_index] = '9';
+								}else
+								{
+									h->m_base.n_show.show_data[h->m_base.n_show.flash_index] --;
+								}
+							}
+						}
+							break;
+						case BASE_ITEM_TIME:
+						{
+							if(h->m_base.n_show.flash_index == 6 || h->m_base.n_show.flash_index == 3)
+							{
+								if(h->m_base.n_show.show_data[h->m_base.n_show.flash_index] == '0')
+								{
+									h->m_base.n_show.show_data[h->m_base.n_show.flash_index] = '5';
+								}else
+									h->m_base.n_show.show_data[h->m_base.n_show.flash_index] --;
+							}
+							if(h->m_base.n_show.flash_index == 7 || h->m_base.n_show.flash_index == 4)
+							{
+								if(h->m_base.n_show.show_data[h->m_base.n_show.flash_index] == '0')
+								{
+									h->m_base.n_show.show_data[h->m_base.n_show.flash_index] = '9';
+								}else
+									h->m_base.n_show.show_data[h->m_base.n_show.flash_index] --;								
+							}
+						}
+							break;
+						default:
+							break;
+					}
+				}
+			}
+				break;
+			case KEY_DOWN:
+			{
+				if(h->menu.menu_lv==0) {
+					h->menu.menu_id = MENU_SYSTEM;
+				}else if(h->menu.menu_lv==1)
+				{
+					  if(h->menu.page[h->menu.menu_id].item_id < BASE_ITEM_QUIT) {
+               h->menu.page[h->menu.menu_id].item_id++;
+            }
+            else {
+               h->menu.page[h->menu.menu_id].item_id = 0;
+            }
+						memset(h->m_base.n_show.show_data,0,16);
+						switch(h->menu.page[h->menu.menu_id].item_id)
+						{
+							case BASE_ITEM_ZONE:
+							{
+								if(h->m_base.n_bak.zone >= 0)
+								{
+									if(h->m_base.n_bak.zone >= 10)
+									{
+										sprintf(h->m_base.n_show.show_data,"+%d",h->m_base.n_bak.zone);
+									}else
+									{
+										sprintf(h->m_base.n_show.show_data,"+0%d",h->m_base.n_bak.zone);
+									}
+								}else
+								{
+									if(h->m_base.n_bak.zone <= -10)
+									{
+										sprintf(h->m_base.n_show.show_data,"%d",h->m_base.n_bak.zone);
+									}else
+									{
+										sprintf(h->m_base.n_show.show_data,"-0%d",abs(h->m_base.n_bak.zone));
+									}									
+								}							
+							}	
+								break;
+							case BASE_ITEM_DATE:
+							{
+								sprintf(h->m_base.n_show.show_data,"%s",h->m_base.n_bak.date);								
+							}
+								break;
+							case BASE_ITEM_TIME:
+							{
+								sprintf(h->m_base.n_show.show_data,"%s",h->m_base.n_bak.time);								
+							}
+								break;
+							default:
+								break;
+						}
+				}else if(h->menu.menu_lv==2)
+				{
+					switch(h->menu.page[h->menu.menu_id].item_id)
+					{
+						case BASE_ITEM_LANG:
+						{
+							h->m_base.n_bak.lang = h->m_base.n_bak.lang == 1 ? 0 : 1;
+						}
+						break;
+						case BASE_ITEM_ROUTE:
+						{
+							if(h->m_base.n_bak.route == 270)
+							{
+								h->m_base.n_bak.route = 0;
+							}else
+								h->m_base.n_bak.route += 90;
+						}
+						break;
+						case BASE_ITEM_ZONE:
+						{
+							if(h->m_base.n_show.flash_index == 0)
+							{
+								if(h->m_base.n_show.show_data[h->m_base.n_show.flash_index] == '+')
+								{
+									h->m_base.n_show.show_data[h->m_base.n_show.flash_index] = '-';
+								}else
+								{
+									h->m_base.n_show.show_data[h->m_base.n_show.flash_index] = '+';
+								}
+							}else if(h->m_base.n_show.flash_index == 1)
+							{
+								if(h->m_base.n_show.show_data[h->m_base.n_show.flash_index] == h->m_base.n_show.max_char_1)
+								{
+									h->m_base.n_show.show_data[h->m_base.n_show.flash_index] = '0';
+								}else
+									h->m_base.n_show.show_data[h->m_base.n_show.flash_index]++;
+							}else if(h->m_base.n_show.flash_index == 2)
+							{
+								if(h->m_base.n_show.show_data[h->m_base.n_show.flash_index] == h->m_base.n_show.max_char_2)
+								{
+									h->m_base.n_show.show_data[h->m_base.n_show.flash_index] = '0';
+								}else
+								{
+									h->m_base.n_show.show_data[h->m_base.n_show.flash_index]++;
+								}
+							}
+						}
+						break;
+						case BASE_ITEM_DATE:
+						{
+							if(h->m_base.n_show.flash_index == 5 || h->m_base.n_show.flash_index == 8)
+							{
+								if(h->m_base.n_show.show_data[h->m_base.n_show.flash_index] == h->m_base.n_show.max_char_1)
+								{
+									h->m_base.n_show.show_data[h->m_base.n_show.flash_index] = '0';
+								}else
+								{
+									h->m_base.n_show.show_data[h->m_base.n_show.flash_index] ++;
+								}
+							}else if(h->m_base.n_show.flash_index == 6 || h->m_base.n_show.flash_index == 9)
+							{
+								if(h->m_base.n_show.show_data[h->m_base.n_show.flash_index] == h->m_base.n_show.max_char_2)
+								{
+									h->m_base.n_show.show_data[h->m_base.n_show.flash_index] = '0';
+								}else
+								{
+									h->m_base.n_show.show_data[h->m_base.n_show.flash_index] ++;
+								}
+							}else
+							{
+								if(h->m_base.n_show.show_data[h->m_base.n_show.flash_index] == '9')
+								{
+									h->m_base.n_show.show_data[h->m_base.n_show.flash_index] = '0';
+								}else
+								{
+									h->m_base.n_show.show_data[h->m_base.n_show.flash_index] ++;
+								}
+							}
+						}
+							break;
+						case BASE_ITEM_TIME:
+						{
+							if(h->m_base.n_show.flash_index == 6 || h->m_base.n_show.flash_index == 3)
+							{
+								if(h->m_base.n_show.show_data[h->m_base.n_show.flash_index] == '5')
+								{
+									h->m_base.n_show.show_data[h->m_base.n_show.flash_index] = '0';
+								}else
+									h->m_base.n_show.show_data[h->m_base.n_show.flash_index] ++;
+							}
+							if(h->m_base.n_show.flash_index == 7 || h->m_base.n_show.flash_index == 4)
+							{
+								if(h->m_base.n_show.show_data[h->m_base.n_show.flash_index] == '9')
+								{
+									h->m_base.n_show.show_data[h->m_base.n_show.flash_index] = '0';
+								}else
+									h->m_base.n_show.show_data[h->m_base.n_show.flash_index] ++;								
+							}
+						}
+							break;
+						default:
+							break;
+					}
+				}
+			}
+				break;
+			case KEY_OK:
+			{
+				if(h->menu.menu_lv==1) {
+					if(h->menu.page[h->menu.menu_id].item_id==BASE_ITEM_SAVE || h->menu.page[h->menu.menu_id].item_id==BASE_ITEM_QUIT) {
+						if(h->menu.page[h->menu.menu_id].item_id==BASE_ITEM_SAVE) {
+							//save net base data
+							paras_get()->misc.rotate = h->m_base.n_bak.route;
+							paras_get()->sys.lang = h->m_base.n_bak.lang;
+							paras_get()->sys.tzone = h->m_base.n_bak.zone;
+							h->lang = h->m_base.n_bak.lang;
+							
+							lcd_rotate(h->m_base.n_bak.route);
+							lcd_fill(COLOR_BLACK);
+							//time and date
+							
+						}
+						h->menu.page[h->menu.menu_id].item_id = 0;
+            h->menu.menu_lv = 0;
+					}else
+					{
+						h->menu.menu_lv = 2;
+						h->m_base.n_show.flash_index = 0;
+						switch(h->menu.page[h->menu.menu_id].item_id)
+						{
+							case BASE_ITEM_ZONE:
+							{
+								if(h->m_base.n_show.flash_index == 0)
+								{
+									h->m_base.n_show.max_char_1 = '1';
+								}
+							}
+							break;
+							case BASE_ITEM_DATE:
+							{
+								//sprintf(h->m_base.n_show.show_data,"%s",h->m_base.n_bak.date);
+							}
+							break;
+							case BASE_ITEM_TIME:
+							{
+								//sprintf(h->m_base.n_show.show_data,"%s",h->m_base.n_bak.time);
+								if(h->m_base.n_show.flash_index == 0)
+								{
+									h->m_base.n_show.max_char_1 = '2';
+								}								
+							}
+							break;
+							default:
+								break;
+						}
+						
+					}
+				}else if(h->menu.menu_lv == 2  && (kv->type==TYPE_SHORT || kv->type==TYPE_LONG))
+				{
+					switch(h->menu.page[h->menu.menu_id].item_id)
+					{
+						case BASE_ITEM_ROUTE:
+						case BASE_ITEM_LANG:
+						{
+							h->menu.menu_lv = 1;
+						}
+						break;
+						case BASE_ITEM_ZONE:
+						{
+							h->m_base.n_show.flash_index++;
+							if(h->m_base.n_show.flash_index == 2)
+							{
+								if(h->m_base.n_show.show_data[h->m_base.n_show.flash_index-1] == '0')
+								{
+									h->m_base.n_show.max_char_2 = '9';
+								}else
+								{
+									h->m_base.n_show.max_char_2 = '2';
+								}
+								if(h->m_base.n_show.show_data[h->m_base.n_show.flash_index] > h->m_base.n_show.max_char_2)
+								{
+									h->m_base.n_show.show_data[h->m_base.n_show.flash_index] = h->m_base.n_show.max_char_2;
+								}
+							}
+							if(h->m_base.n_show.flash_index>= 3)
+							{
+								//save zone
+								h->m_base.n_bak.zone = atoi(h->m_base.n_show.show_data);
+								h->menu.menu_lv = 1;
+							}
+						}
+						break;
+						case BASE_ITEM_DATE:
+						{
+							h->m_base.n_show.flash_index++;
+							if(h->m_base.n_show.show_data[h->m_base.n_show.flash_index] == '/')
+							{
+								if(h->m_base.n_show.flash_index == 4)
+								{
+									h->m_base.n_show.max_char_1 = '1';
+								}else if(h->m_base.n_show.flash_index == 7)
+								{
+									h->m_base.n_show.max_char_1 = '3';
+								}
+								h->m_base.n_show.flash_index++;
+							}
+							if(h->m_base.n_show.flash_index == 6)
+							{
+								if(h->m_base.n_show.show_data[h->m_base.n_show.flash_index-1] == '1')
+								{
+									h->m_base.n_show.max_char_2 = '2';
+								}else
+								{
+									h->m_base.n_show.max_char_2 = '9';
+								}
+								if(h->m_base.n_show.show_data[h->m_base.n_show.flash_index] >h->m_base.n_show.max_char_2)
+								{
+									h->m_base.n_show.show_data[h->m_base.n_show.flash_index] = h->m_base.n_show.max_char_2;
+								}
+							}
+							if(h->m_base.n_show.flash_index == 9)
+							{
+								if(h->m_base.n_show.show_data[h->m_base.n_show.flash_index-1] == '3')
+								{
+									h->m_base.n_show.max_char_2 = '1';
+								}else
+								{
+									h->m_base.n_show.max_char_2 = '9';
+								}
+								if(h->m_base.n_show.show_data[h->m_base.n_show.flash_index] >h->m_base.n_show.max_char_2)
+								{
+									h->m_base.n_show.show_data[h->m_base.n_show.flash_index] = h->m_base.n_show.max_char_2;
+								}
+							}
+							if(h->m_base.n_show.flash_index>= 10)
+							{
+								//save date
+								strcpy(h->m_base.n_bak.date,h->m_base.n_show.show_data);
+								h->menu.menu_lv = 1;
+							}
+						}
+						break;
+						case BASE_ITEM_TIME:
+						{
+							h->m_base.n_show.flash_index++;
+							if(h->m_base.n_show.show_data[h->m_base.n_show.flash_index] == ':')
+							{
+								h->m_base.n_show.flash_index++;
+							}
+							if(h->m_base.n_show.flash_index == 1)
+							{
+								if(h->m_base.n_show.show_data[h->m_base.n_show.flash_index-1]== '2')
+								{
+									h->m_base.n_show.max_char_2 ='3';
+								}else
+								{
+									h->m_base.n_show.max_char_2 ='9';
+								}
+							}
+							
+							if(h->m_base.n_show.flash_index >= 8)
+							{
+								//save time
+								strcpy(h->m_base.n_bak.time,h->m_base.n_show.show_data);
+								h->menu.menu_lv = 1;
+							}
+						}
+						break;
+						default:
+							break;
+					}
+				}
+				else
+				{
+					if(kv->type==TYPE_LONG) {
+             h->menu.menu_lv = 1;
+          }
+				}
+			}
+				break;
+		
+		}
+	return r;	
+}
+
+
 
 static int menu_net_key_handle(menu_handle_t *h, key_val_t *kv)
 {
@@ -926,7 +1638,7 @@ static int menu_net_key_handle(menu_handle_t *h, key_val_t *kv)
 			case KEY_DOWN:
 			{
 				if(h->menu.menu_lv==0) {
-					h->menu.menu_id = MENU_SYSTEM;
+					h->menu.menu_id ++;
 				}else if(h->menu.menu_lv==1)
 				{
            if(h->menu.page[h->menu.menu_id].item_id < NET_ITEM_QUIT) {
@@ -1138,6 +1850,8 @@ static int menu_net_key_handle(menu_handle_t *h, key_val_t *kv)
 			}
 			break;
 		}
+		
+		return r;
 }
 
 
@@ -1289,6 +2003,11 @@ static int menu_key_handle(menu_handle_t *h, key_val_t *kv)
 					r = menu_net_key_handle(h, kv);
 				}
 				break;
+				case MENU_BASE_SET:
+				{
+					r = menu_base_key_handle(h, kv);
+				}
+				break;
         case MENU_SENSOR:
 				{
 					if(h->menu.menu_lv==0) {
@@ -1402,8 +2121,9 @@ static int menu_key_handle(menu_handle_t *h, key_val_t *kv)
             r = menu_modbus_key_handle(h, kv);
         }
         break;
-				
-				break;
+
+				default:
+					break;
     }
     
     if(menu_id!=h->menu.menu_id) {
@@ -1430,12 +2150,22 @@ int menu_handle(void)
         {
             if(kv.type==TYPE_SHORT) {
                 if(h->menu.menu_lv==0) {
-            #if 0
+            #if 1
                     if(rotate==0) {
-                        lcd_rotate(180);
-                    }
+                        lcd_rotate(90);
+											lcd_fill(COLOR_BLACK);
+                    }else if(rotate == 90)
+										{
+											lcd_rotate(180);
+											lcd_fill(COLOR_BLACK);
+										}else if(rotate == 180)
+										{
+											lcd_rotate(270);
+											lcd_fill(COLOR_BLACK);
+										}
                     else {
                         lcd_rotate(0);
+											lcd_fill(COLOR_BLACK);
                     }
             #endif
                 }
@@ -1483,12 +2213,14 @@ int menu_handle(void)
 
         case MENU_INPUT:
         {
+					item_h=LCD_HEIGHT/6;
             menu_input_paint(h, font1, font2, item_h, &kv);
         }
         break;
 
         case MENU_OUTPUT:
         {
+					item_h=LCD_HEIGHT/6;
             menu_output_paint(h, font1, font2, item_h, &kv);
         }
         break;
@@ -1510,6 +2242,11 @@ int menu_handle(void)
 					menu_net_paint(h, font1, font2, item_h, &kv);
 				}
 				break;
+				case MENU_BASE_SET:
+				{
+					item_h=LCD_HEIGHT/7;
+					menu_base_paint(h, font1, font2, item_h, &kv);
+				}
     }
     h->uflag = 0;
     //printf("___ menu_id: %d, menu_lv: %d\n", h->menu.menu_id, h->menu.menu_lv);

+ 22 - 2
f427/applications/ui/st77xx.c

@@ -89,12 +89,32 @@ void st77xx_set_win(lcd_handle_t *hd, uint16_t x, uint16_t y, uint16_t w, uint16
 {
     int x1=x,y1=y;
     int x2=x+w-1,y2=y+h-1;
-    
+	
+
+	if(hd->rotate == 0)
+	{
+		
+	}else if(hd->rotate == 90)
+	{
+
+	}else if(hd->rotate == 180)
+	{
+		y1+=80;
+		y2+=80;		
+	}else
+	{
+		x1+=80;
+		x2+=80;		
+	}
+	
+	
     write_cmd (hd,ST77XX_CASET);
     write_data(hd,x1>>8);
     write_data(hd,x1);
     write_data(hd,x2>>8);
-    write_data(hd,x2);
+    write_data(hd,x2);		
+
+    
 
     write_cmd (hd,ST77XX_RASET);
     write_data(hd,y1>>8);

+ 6 - 3
f427/drivers/libraries/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_eth.c

@@ -2261,9 +2261,12 @@ static void ETH_FlushTransmitFIFO(ETH_HandleTypeDef *heth)
   
   /* Wait until the write operation will be taken into account:
      at least four TX_CLK/RX_CLK clock cycles */
-  tmpreg1 = (heth->Instance)->DMAOMR;
-  ETH_Delay(ETH_REG_WRITE_DELAY);
-  (heth->Instance)->DMAOMR = tmpreg1;
+  while((ETH->DMAOMR & ETH_DMAOMR_FTF) !=0);
+	
+	//for(uint32_t i = 0; i < 0xFFFF;i++);
+//	tmpreg1 = (heth->Instance)->DMAOMR;
+//  ETH_Delay(ETH_REG_WRITE_DELAY);
+//  (heth->Instance)->DMAOMR = tmpreg1;
 }
 
 /**

+ 5 - 5
f427/rt-thread/components/net/lwip/lwip-2.1.2/src/include/lwip/apps/snmp_opts.h

@@ -192,7 +192,7 @@
  * to apply for your own enterprise ID with IANA:
  * http://www.iana.org/numbers.html
  */
-#define SNMP_DEVICE_ENTERPRISE_OID {1, 3, 6, 1, 4, 1, SNMP_LWIP_ENTERPRISE_OID}
+#define SNMP_DEVICE_ENTERPRISE_OID {1, 3, 6, 1, 2, 1, 1}
 /**
  * Length of SNMP_DEVICE_ENTERPRISE_OID
  */
@@ -224,7 +224,7 @@
  * Value return for sysDesc field of MIB2.
  */
 #if !defined SNMP_LWIP_MIB2_SYSDESC || defined __DOXYGEN__
-#define SNMP_LWIP_MIB2_SYSDESC              "lwIP"
+#define SNMP_LWIP_MIB2_SYSDESC              "GOWONE_CD"
 #endif
 
 /**
@@ -232,7 +232,7 @@
  * To make sysName field settable, call snmp_mib2_set_sysname() to provide the necessary buffers.
  */
 #if !defined SNMP_LWIP_MIB2_SYSNAME || defined __DOXYGEN__
-#define SNMP_LWIP_MIB2_SYSNAME              "FQDN-unk"
+#define SNMP_LWIP_MIB2_SYSNAME              "RT_THREAD"
 #endif
 
 /**
@@ -240,7 +240,7 @@
  * To make sysContact field settable, call snmp_mib2_set_syscontact() to provide the necessary buffers.
  */
 #if !defined SNMP_LWIP_MIB2_SYSCONTACT || defined __DOXYGEN__
-#define SNMP_LWIP_MIB2_SYSCONTACT           ""
+#define SNMP_LWIP_MIB2_SYSCONTACT           "EMALLL"
 #endif
 
 /**
@@ -248,7 +248,7 @@
  * To make sysLocation field settable, call snmp_mib2_set_syslocation() to provide the necessary buffers.
  */
 #if !defined SNMP_LWIP_MIB2_SYSLOCATION || defined __DOXYGEN__
-#define SNMP_LWIP_MIB2_SYSLOCATION          ""
+#define SNMP_LWIP_MIB2_SYSLOCATION          "GXXXXXX"
 #endif
 
 /**