Sfoglia il codice sorgente

F427 V1.0.0 第一个版本。

liyi 1 anno fa
parent
commit
309e18805a

+ 6 - 0
f427/applications/datadef.h

@@ -4,6 +4,10 @@
 #include <stdint.h>
 #include "log.h"
 
+
+
+#define VERSION_SMART              "V1.0.0"
+
 #define POWER_CH_MAX                12
 #define POWER_BOARD_MAX             32
 #define POWER_BOARD_TIMEOUT         200
@@ -268,6 +272,8 @@ typedef struct {
 typedef struct {
     uint8_t             lang;
     int8_t              tzone;
+		uint16_t						route;
+		char                ver[16];
 		char                sys_time[32];
 }system_data_t;
 

+ 2 - 0
f427/applications/main.c

@@ -15,6 +15,7 @@
 #include "cascade.h"
 #include "snmp.h"
 #include "net.h"
+#include "wanning.h"
 
 //https://embedded-rd.blog.csdn.net/article/details/109643188
 
@@ -101,6 +102,7 @@ static int user_init(void)
 {
     paras_data_t *p=paras_get();
     modbus_data_t *cas=&p->cas;
+		wanning_init();
 		net_init();
     snmp2_init();
     power_init();

+ 22 - 23
f427/applications/net.c

@@ -20,7 +20,8 @@
 #include "lwip/ip4_addr.h"
 #include "net.h"
 #include "netdev.h"
-
+#include "lwip/sockets.h"
+//#include "netdev_ipaddr.h"
 
 
 #if 0
@@ -28,9 +29,9 @@
     #define LOGW  LOG_W
     #define LOGD  LOG_D
 #else
-    #define LOGD  printf
-    #define LOGW  printf
-    #define LOGE  printf
+//    #define LOGD  printf
+//    #define LOGW  printf
+//    #define LOGE  printf
 #endif
 
 
@@ -39,6 +40,9 @@
 
 
 
+
+
+
 typedef struct{
 	struct netif *netif;
 	struct netdev *netdev;
@@ -74,19 +78,6 @@ static int set_ipaddr(int family, const char* iface, const char* addr, const cha
 {
     ip4_addr_t  ipaddr4;
     ip6_addr_t  ipaddr6;
-
-//    if(family==AF_INET) {
-        //ip4_addr_set(&ipaddr4, IP4_ADDR(&ipaddr4, 0xbeef, 0xfeed, 0xdead, 0xbeef));
-//    }
-//    else {
-        //ip6_addr_set(&ipaddr6, IP6_ADDR(&ipaddr6, 0xbeef, 0xfeed, 0xdead, 0xbeef, 0x1337, 0xbabe, 0xbaad, 0xface));
-        
-        //netif_add_ip6_address(&netif, &ipaddr_v6, &chosen_idx);
-        //netif.ip6_addr_state[chosen_idx] = IP6_ADDR_VALID;
-        //ip6_addr_assign_zone(ip_2_ip6(&netif.ip6_addr[0]), IP6_UNICAST, &netif);
-        //netif_ip6_addr_set_state(&netif, 0, IP6_ADDR_TENTATIVE);
-//    }
-    
     return 0;
 }
 static int get_ipaddr(int family, char *iface, char *addr, char *netmask)
@@ -132,17 +123,17 @@ static int ip_check(char* addr)
 {
 
     int flag=0;
-#if 0
+#if 1
     struct in_addr addr4;
     struct in6_addr addr6;
 
-    if (inet_pton(AF_INET, addr, &addr4) == 1) {
-        flag = IP_V4;
-    } else if (inet_pton(AF_INET6, addr, &addr6) == 1) {
-        flag = IP_V6;
+    if (lwip_inet_pton(AF_INET, addr, &addr4) == 1) {
+        flag = 1;
+    } else if (lwip_inet_pton(AF_INET6, addr, &addr6) == 1) {
+        flag = 1;
     }
 
-    if(flag==IP_ERR) {
+    if(flag==0) {
         LOGE("____ wrong ip addr: %s\n", addr);
     }
 #endif
@@ -334,6 +325,14 @@ void net_get_ip(network_data_t *data)
 			str =  ip4addr_ntoa(netif_ip4_gw(handle_net.netif));
 			memcpy(data->gateway,str,strlen(str));
 			data->mode = para->netwk.mode;
+			//get dns
+		  const ip_addr_t *dns1 = dns_getserver(0);
+			str = ip4addr_ntoa(&dns1->u_addr.ip4);
+			memcpy(data->dns1,str,strlen(str));
+		
+			const ip_addr_t *dns2 = dns_getserver(1);
+			str = ip4addr_ntoa(&dns2->u_addr.ip4);
+			memcpy(data->dns2,str,strlen(str));
 		
 	}else
 	{

+ 6 - 5
f427/applications/net.h

@@ -9,17 +9,18 @@
 //    IP_DHCP=0,
 //    IP_STATIC,
 //};
-//enum {
-//    IP_ERR=0,
-//    IP_V4,
-//    IP_V6,
-//};
+enum {
+    IP_ERR=0,
+    IP_V4,
+    IP_V6,
+};
 
 //int net_ip_check(char *ip);
 //int netget_mac(char *mac, int maclen);
 //int net_get_net(network_data_t *para, int ip_version);
 //int net_set_net(network_data_t *para, int ip_version);
 
+int sys_ip_check(char* addr);
 int net_init(void);
 void net_get_ip(network_data_t *data);
 int net_ipaddr_set(network_data_t *data);

+ 133 - 13
f427/applications/power.c

@@ -7,7 +7,12 @@
 #include "power.h"
 #include "thread.h"
 #include "datadef.h"
+#include "wanning.h"
+#include "beep.h"
+#include "time.h"
+#include "snmp.h"
 
+extern AlarmTrapinfo data;
 
 #define LIMIT_HOF(x)  (x*1.1f)
 #define LIMIT_LOF(x)  (x*0.9f)
@@ -549,11 +554,115 @@ static int board_read(power_handle_t *h, board_data_t *pbrd)
                     pch = &pbrd->pch[i];
                     //pch->power[0].status = tmp[i] & (0x01);
 										pch->status = tmp[i] & (0x01);
+										uint8_t old_v_upper = pch->alarm.v_upper;
+										uint8_t old_v_lower = pch->alarm.v_lower;
+										uint8_t old_c_upper = pch->alarm.c_upper;
+										uint8_t old_p_upper = pch->alarm.p_upper;
+										uint8_t old_w_upper = pch->alarm.w_upper;
+									
                     pch->alarm.v_upper   = (tmp[i] & BIT(2))?1:0;
                     pch->alarm.v_lower   = (tmp[i] & BIT(4))?1:0;
                     pch->alarm.c_upper   = (tmp[i] & BIT(6))?1:0;
                     pch->alarm.p_upper   = (tmp[i] & BIT(8))?1:0;
                     pch->alarm.w_upper   = (tmp[i] & BIT(10))?1:0;
+										
+										waning_info_t info= {0};
+										info.type = ALARM_TYPE_POWER;
+										time_t t=time(NULL);
+										struct tm *tm=localtime(&t);
+										if(!old_v_upper && pch->alarm.v_upper)
+										{
+											
+											memset(&info.waning_context,0,sizeof(32));
+											sprintf(info.date, "%04d%/%02d/%02d %2d:%2d:%2d", (tm->tm_year+1900), tm->tm_mon+1, tm->tm_mday,tm->tm_hour, tm->tm_min, tm->tm_sec);
+											sprintf(info.waning_context,"%s over max voltage",pch->info.name);
+											wanning_insert(info);
+
+											if(paras_get()->snmp.trapmode == 1)
+											{
+												//AlarmTrapinfo t_info={0};
+												data.ID = i;
+												data.Alarmid = ALARM_TYPE_POWER;
+												memcpy(data.AlarmDate,info.date,32);
+												memcpy(data.AlarmContext,info.waning_context,32);
+												send_snmp_tarp();
+												//snmp_power_alarm_trap(&t_info);
+//												system("snmp");
+											}
+											beep_set(1);
+										}
+									
+										if(!old_v_lower && pch->alarm.v_lower)
+										{
+											memset(&info.waning_context,0,sizeof(32));
+											sprintf(info.date, "%04d%/%02d/%02d %2d:%2d:%2d", (tm->tm_year+1900), tm->tm_mon+1, tm->tm_mday,tm->tm_hour, tm->tm_min, tm->tm_sec);
+											sprintf(info.waning_context,"%s over min voltage",pch->info.name);
+											wanning_insert(info);
+//											if(paras_get()->snmp.trapmode == 1)
+//											{
+//												AlarmTrapinfo t_info={0};
+//												t_info.ID = i;
+//												t_info.Alarmid = ALARM_TYPE_POWER;
+//												memcpy(t_info.AlarmDate,info.date,32);
+//												memcpy(t_info.AlarmContext,info.waning_context,32);
+//												snmp_power_alarm_trap(&t_info);
+//											}
+											beep_set(1);
+										}									
+									
+										if(!old_c_upper && pch->alarm.c_upper)
+										{
+											memset(&info.waning_context,0,sizeof(32));
+											sprintf(info.date, "%04d%/%02d/%02d %2d:%2d:%2d", (tm->tm_year+1900), tm->tm_mon+1, tm->tm_mday,tm->tm_hour, tm->tm_min, tm->tm_sec);
+											sprintf(info.waning_context,"%s over max current",pch->info.name);
+											wanning_insert(info);
+											beep_set(1);
+//											if(paras_get()->snmp.trapmode == 1)
+//											{
+//												AlarmTrapinfo t_info={0};
+//												t_info.ID = i;
+//												t_info.Alarmid = ALARM_TYPE_POWER;
+//												memcpy(t_info.AlarmDate,info.date,32);
+//												memcpy(t_info.AlarmContext,info.waning_context,32);
+//												snmp_power_alarm_trap(&t_info);
+//											}
+										}										
+
+										if(!old_p_upper && pch->alarm.p_upper)
+										{
+											memset(&info.waning_context,0,sizeof(32));
+											sprintf(info.date, "%04d%/%02d/%02d %2d:%2d:%2d", (tm->tm_year+1900), tm->tm_mon+1, tm->tm_mday,tm->tm_hour, tm->tm_min, tm->tm_sec);
+											sprintf(info.waning_context,"%s over max power",pch->info.name);
+											wanning_insert(info);
+											beep_set(1);
+//											if(paras_get()->snmp.trapmode == 1)
+//											{
+//												AlarmTrapinfo t_info={0};
+//												t_info.ID = i;
+//												t_info.Alarmid = ALARM_TYPE_POWER;
+//												memcpy(t_info.AlarmDate,info.date,32);
+//												memcpy(t_info.AlarmContext,info.waning_context,32);
+//												snmp_power_alarm_trap(&t_info);
+//											}
+										}				
+
+										if(!old_w_upper && pch->alarm.w_upper)
+										{
+											memset(&info.waning_context,0,sizeof(32));
+											sprintf(info.date, "%04d%/%02d/%02d %2d:%2d:%2d", (tm->tm_year+1900), tm->tm_mon+1, tm->tm_mday,tm->tm_hour, tm->tm_min, tm->tm_sec);
+											sprintf(info.waning_context,"%s over max consumer",pch->info.name);
+											wanning_insert(info);
+											beep_set(1);
+//											if(paras_get()->snmp.trapmode == 1)
+//											{
+//												AlarmTrapinfo t_info={0};
+//												t_info.ID = i;
+//												t_info.Alarmid = ALARM_TYPE_POWER;
+//												memcpy(t_info.AlarmDate,info.date,32);
+//												memcpy(t_info.AlarmContext,info.waning_context,32);
+//												snmp_power_alarm_trap(&t_info);
+//											}
+										}														
                     //pch->alarm.ph_loss   = 0;
                 }
                 
@@ -588,6 +697,7 @@ static int board_read(power_handle_t *h, board_data_t *pbrd)
 								r =read_reg(h, pch->info.addr, offset, buffer, pbrd->chs);
 								for(int i = 0; i < pbrd->chs;i++)
 								{
+									pch = &pbrd->pch[i];
 									pch->info.open_delay = buffer[i] / 1000;
 								}
 								
@@ -596,6 +706,7 @@ static int board_read(power_handle_t *h, board_data_t *pbrd)
 								r =read_reg(h, pch->info.addr, offset, buffer, pbrd->chs);
 								for(int i = 0; i < pbrd->chs;i++)
 								{
+									pch = &pbrd->pch[i];
 									pch->info.close_delay = buffer[i] / 1000;
 								}								
             }
@@ -955,7 +1066,7 @@ static int power_copy(power_handle_t *h)
         if(pd->pch) {
             pd->chs = h->chs;
             for(i=0; i<pd->chs; i++) {
-                pd->pch[i] = *h->pch[i];
+                pd->pch[i] = *(h->pch[i]);
             }
         }
     }
@@ -1498,11 +1609,20 @@ int power_set_board_sw(uint8_t addr, uint8_t on)
 int power_set_all_sw(uint8_t on)
 {
     int i,r;
-    power_handle_t *h=&pwrHandle;
+    power_handle_t *handle=&pwrHandle;
+	
+		if(handle->cnt > 0)
+		{
+			for(int i = 1 ; i <= handle->cnt;i++)
+			{
+				if(handle->pbrd[i])
+				{
+					handle->pbrd[i]->fn.set_all(on,handle->pbrd[i]);
+				}
+			}
+		}
     
-    for(i=1; i<=h->chs; i++) {
-        power_set_ch_sw(i, on);
-    }
+
     
     return 0;
 }
@@ -1928,8 +2048,8 @@ int power_set_open_delay(power_ch_t *pch)
         case AC_SINGLE_S_TYPE:
         case AC_SINGLE_B_TYPE:
         {
-            tmp[0] = pch->info.open_delay;
-            offset = POWER_AC_OPEN_DELAY_TIME_L+pch->info.ch-1;
+            tmp[0] = pch->info.open_delay*1000;
+            offset = POWER_AC_OPEN_DELAY_TIME_L+pch->info.sch;
             r = write_reg(h, pch->info.addr, offset, tmp, 1);
         }
         break;
@@ -1939,7 +2059,7 @@ int power_set_open_delay(power_ch_t *pch)
             uint32_t time=pch->info.open_delay*100;
             tmp[0] = time & 0xffff;
             tmp[1] = (time >> 16) & 0xffff;
-            offset = POWER_DC_SET_OPEN_DELAY+pch->info.ch-1;
+            offset = POWER_DC_SET_OPEN_DELAY+pch->info.sch;
             r = write_reg(h, pch->info.addr, offset, tmp, 2);
         }
         break;
@@ -1989,21 +2109,21 @@ int power_set_clear_consumer(power_ch_t *pch)
     case AC_SINGLE_B_TYPE:
 		{
 			uint16_t val = 1;
-			offset = POWER_AC_RESET_CONSUMP + pch->info.ch-1;
+			offset = POWER_AC_RESET_CONSUMP + pch->info.sch;
 			r = write_reg(h, pch->info.addr, offset, &val, 1);
 		}		
 		break;
 		case DCPDU_TYPE:
 		{
 			uint32_t val = 1;
-			offset = POWER_DC_CONSUMP_CLEAR + pch->info.ch-1;
+			offset = POWER_DC_CONSUMP_CLEAR + pch->info.sch;
 			r = write_reg(h, pch->info.addr, offset, (uint16_t*)&val, 1);
 		}
 		break;
 		case TREE_AC_TYPE:
 		{
 			uint32_t val = 1;
-			offset = POWER_AC3_RESET_CONSUMP + pch->info.ch-1;
+			offset = POWER_AC3_RESET_CONSUMP + pch->info.sch;
 			r = write_reg(h, pch->info.addr, offset, (uint16_t*)&val, 1);			
 		}
 		break;		
@@ -2025,8 +2145,8 @@ int power_set_close_delay(power_ch_t *pch)
         case AC_SINGLE_S_TYPE:
         case AC_SINGLE_B_TYPE:
         {
-            tmp[0] = pch->info.close_delay;
-            offset = POWER_AC_CLOSE_DELAY_TIME_L+pch->info.ch-1;
+            tmp[0] = pch->info.close_delay*1000;
+            offset = POWER_AC_CLOSE_DELAY_TIME_L+pch->info.sch;
             r = write_reg(h, pch->info.addr, offset, tmp, 1);
         }
         break;

+ 86 - 42
f427/applications/snmp.c

@@ -12,6 +12,9 @@
 #include "datadef.h"
 #include "sensor.h"
 #include "paras.h"
+#include "pthread.h"
+#include "rtthread.h"
+
 
 
 
@@ -37,22 +40,21 @@ typedef struct
 //	char *id_sn;
 //	char *id_version;	
 //	power_all_t all;
+	pthread_mutex_t mutex;
+	pthread_cond_t cond;
+	pthread_t       id;
 }snmp_smarpdu_t;
 
-//static snmp_smarpdu_t snmp_smart={
-//		.sysdescr={"Smart_pdu"},
-//		.syscontact={"KyKy"},
-//		.sysname={"Rt"},
-//		.syslocation={"CN"},
-//		.device_enterprose_oid={
-//			.len = 7,
-//			.id = SNMP_SMARTPDU_OID,
-//		},
-////		.id_manifacture = "Gowone Industry",
-////		.id_device = "Smart_PDU",
-////		.id_sn = "SN123465",
-////		.id_version = "v1.0.0.0",
-//};
+static snmp_smarpdu_t snmp_smart={
+		.sysdescr={"Smart_pdu"},
+		.syscontact={"KyKy"},
+		.sysname={"Rt"},
+		.syslocation={"CN"},
+		.device_enterprose_oid={
+			.len = 7,
+			.id = SNMP_SMARTPDU_OID,
+		},
+};
 
 
 
@@ -1296,21 +1298,21 @@ void snmp_power_alarm_trap(AlarmTrapinfo *data)
 		snmp_oid_assign(&vb2.oid, pduAlarmContext_oid, LWIP_ARRAYSIZE(pduAlarmContext_oid));
 		snmp_oid_assign(&vb3.oid, pduAlarmDate_oid, LWIP_ARRAYSIZE(pduAlarmDate_oid));
 		
-    vb.type = SNMP_ASN1_TYPE_OBJECT_ID;
-    vb.value = (void*)&a;
+    vb.type = SNMP_ASN1_TYPE_INTEGER;
+    vb.value = (void*)&(data->ID);
     vb.value_len = 4;
 		
 	  vb1.type = SNMP_ASN1_TYPE_INTEGER;
-    vb1.value = (void*)&data->Alarmid;
+    vb1.value = (void*)&(data->Alarmid);
     vb1.value_len = 4;	
 		
 	  vb2.type = SNMP_ASN1_TYPE_OCTET_STRING;
-    vb2.value = (void*)&data->AlarmContext;
-    vb2.value_len = strlen(data->AlarmContext);	
+    vb2.value = (void*)(&data->AlarmDate);
+    vb2.value_len = strlen(data->AlarmDate);	
 		
 	  vb3.type = SNMP_ASN1_TYPE_OCTET_STRING;
-    vb3.value = (void*)&data->AlarmDate;
-    vb3.value_len = strlen(data->AlarmDate);	
+    vb3.value = (void*)(&data->AlarmContext);
+    vb3.value_len = strlen(data->AlarmContext);	
 		
 		vb.next = &vb1;
 		vb1.next = &vb2;
@@ -1320,9 +1322,9 @@ void snmp_power_alarm_trap(AlarmTrapinfo *data)
 		vb1.prev = &vb;		
 		
     snmp_send_trap_specific(SNMP_GENTRAP_COLDSTART, &vb);
-//		snmp_send_trap_specific(SNMP_GENTRAP_COLDSTART, &vb1);
-//		snmp_send_trap_specific(SNMP_GENTRAP_COLDSTART, &vb2);
-//		snmp_send_trap_specific(SNMP_GENTRAP_COLDSTART, &vb3);
+		//snmp_send_trap_specific(SNMP_GENTRAP_COLDSTART, &vb1);
+		//snmp_send_trap_specific(SNMP_GENTRAP_COLDSTART, &vb2);
+		//snmp_send_trap_specific(SNMP_GENTRAP_COLDSTART, &vb3);
 
 }
 
@@ -1341,7 +1343,7 @@ void snmp_sensor_alarm_trap(AlarmTrapinfo *data)
 		snmp_oid_assign(&vb2.oid, pduAlarmContext_oid, LWIP_ARRAYSIZE(pduAlarmContext_oid));
 		snmp_oid_assign(&vb3.oid, pduAlarmDate_oid, LWIP_ARRAYSIZE(pduAlarmDate_oid));
 		
-    vb.type = SNMP_ASN1_TYPE_OBJECT_ID;
+    vb.type = SNMP_ASN1_TYPE_INTEGER;
     vb.value = (void*)&a;
     vb.value_len = 4;
 		
@@ -1367,10 +1369,60 @@ void snmp_sensor_alarm_trap(AlarmTrapinfo *data)
     snmp_send_trap_specific(SNMP_GENTRAP_COLDSTART, &vb);	
 }
 
+AlarmTrapinfo data = {
+		2,
+		1,
+		"dasdasdasdas",
+		"dasdasdjkhasdjia"
+};
+
+
+void *snmp_thread(void *args)
+{
+	while(1)
+	{
+		 pthread_mutex_lock(&snmp_smart.mutex);
+		 while(pthread_cond_wait(&snmp_smart.cond, &snmp_smart.mutex));
+		 if(paras_get()->snmp.trapmode == 1)
+			 snmp_power_alarm_trap(&data);
+//				system("snmp");
+			
+		 pthread_mutex_unlock(&snmp_smart.mutex);
+	}
+}
+
 
+void send_snmp_tarp(void)
+{
+	pthread_mutex_lock(&snmp_smart.mutex);
+	pthread_cond_signal(&snmp_smart.cond);
+	pthread_mutex_unlock(&snmp_smart.mutex);
+}
 
 
-//MSH_CMD_EXPORT_ALIAS(cmd_snmp_tarp_test, snmp, snmp agent test);
+void cmd_snmp_test(int argc, char **argv)
+{
+#if 0
+    struct snmp_varbind vb;
+    memset(&vb, 0, sizeof(struct snmp_varbind));
+    char *str = "trap test";
+
+    static const u32_t oid[] = {1, 3, 6, 1, 4, 1, 5888, 1, 5, 0};
+    snmp_oid_assign(&vb.oid, oid, LWIP_ARRAYSIZE(oid));
+    vb.type = SNMP_ASN1_TYPE_OCTET_STRING;
+    vb.value = (void *)str;
+    vb.value_len = strlen(str);
+
+    snmp_send_trap_specific(0, &vb);
+	
+#endif
+	
+
+	snmp_power_alarm_trap(&data);
+	
+    // snmp_send_trap_generic(SNMP_GENTRAP_COLDSTART);
+}
+MSH_CMD_EXPORT_ALIAS(cmd_snmp_test, snmp, snmp agent test);
 
 
 
@@ -1395,24 +1447,13 @@ static void mibs_init(void) {
 //    snmp_mib2_set_syslocation(snmp_smart.syslocation, &len, 0);	
 //	
 //	  snmp_set_device_enterprise_oid(&snmp_smart.device_enterprose_oid);
+	
+		pthread_mutex_init(&snmp_smart.mutex,NULL);
+	  pthread_cond_init(&snmp_smart.cond,NULL);
+	
+	
     snmp_set_auth_traps_enabled(SNMP_AUTH_TRAPS_DISABLED);
 		snmp_strap_set();
-//		if(para->snmp.trapmode == 1)
-//		{
-//			ip_addr_t  ip_addr={0};
-//			if(ipaddr_aton(para->snmp.nms_ip,&ip_addr) == 0)
-//			{
-//				snmp_trap_dst_enable(0, 1);
-//				snmp_trap_dst_ip_set(0, &ip_addr);
-//			}else
-//			{
-//				LOG_E("snmp trap ip error!!!!\n");
-//				snmp_trap_dst_enable(0, 0);
-//			}
-//		}else
-//		{
-//			snmp_trap_dst_enable(0, 0);
-//		}
 
     snmp_set_mibs(&dev_mibs[0], LWIP_ARRAYSIZE(dev_mibs));
     snmp_set_community("public");
@@ -1425,6 +1466,9 @@ static void mibs_init(void) {
 		}
 		
 		//snmp_send_trap_specific();
+		
+		pthread_create(&snmp_smart.id,NULL,snmp_thread,NULL);
+		//pthread_detach(snmp_smart.id);
 }
 
 int snmp2_init(void)

+ 4 - 1
f427/applications/snmp.h

@@ -89,7 +89,7 @@
 
 
 			 
-typedef struct AlarmTrapinfo{
+typedef struct {
     uint32_t    Alarmid;
     uint32_t    ID;
     char            AlarmContext[64];
@@ -105,5 +105,8 @@ void snmp_strap_set(void);
 void snmp_power_alarm_trap(AlarmTrapinfo *data);
 void snmp_sensor_alarm_trap(AlarmTrapinfo *data);
 
+
+void send_snmp_tarp(void);
+
 #endif
 

+ 1 - 1
f427/applications/thread.c

@@ -6,7 +6,7 @@ static thread_attr_t thdAttrs[THREAD_ID_MAX]={
     //name          fn              arg             stacksize       prio
     {"web",         NULL,           NULL,           4*KB,           20},
     {"snmp",        NULL,           NULL,           2*KB,           20},
-    {"power",       NULL,           NULL,           2*KB,           20},
+    {"power",       NULL,           NULL,           5*KB,           20},
     {"polling",     NULL,           NULL,           2*KB,           20},
     {"mqtt",        NULL,           NULL,           2*KB,           20},
     {"mail",        NULL,           NULL,           2*KB,           20},

+ 16 - 3
f427/applications/ui/menu.c

@@ -1060,7 +1060,7 @@ static int menu_base_key_handle(menu_handle_t *h, key_val_t *kv)
 			//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;
+			h->m_base.n_bak.zone = rt_tz_get() / 3600;
 			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);
@@ -1393,11 +1393,24 @@ static int menu_base_key_handle(menu_handle_t *h, key_val_t *kv)
 							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);
+							char data[32] = {0};
+							
+							sprintf(data,"%s %s",h->m_base.n_bak.date,h->m_base.n_bak.time);
+							int lenth = strlen(data);
+							for(int i = 0; i < lenth;i++)
+							{
+									if(data[i] <'0' || data[i] > '9')
+									{
+												data[i]=' ';
+									}
+							}
+							char str[42] = {0};
+							sprintf(str,"date %s",data);
+							system(str);
+							paras_save();
 							lcd_fill(COLOR_BLACK);
 							//time and date
-							
 						}
 						h->menu.page[h->menu.menu_id].item_id = 0;
             h->menu.menu_lv = 0;

+ 49 - 26
f427/applications/web.c

@@ -15,6 +15,8 @@
 #include "cascade.h"
 #include "snmp.h"
 #include "net.h"
+#include "cfg.h"
+#include "lcd.h"
 
 #define TIMER_INTERVAL      1000
 #define ONCE_SEND_CNT       13
@@ -160,7 +162,7 @@ static void send_powerc(web_handle_t *h, mg_conn_t *c, uint8_t addr)
 				for(j=0;j<count;j++)
 				{
 					offset = j*sizeof(power_ch_t);
-					memcpy(hdr->data+offset, &all.pch[i*ONCE_SEND_CNT+j],sizeof(power_ch_t));
+					memcpy(hdr->data+offset, &all.pch[i+j],sizeof(power_ch_t));
 					hdr->flag = (-1);
 				}
 				xlen = sizeof(power_ch_t) * count + sizeof(pkt_hdr_t);
@@ -169,10 +171,10 @@ static void send_powerc(web_handle_t *h, mg_conn_t *c, uint8_t addr)
 				count -= count;
 			}else
 			{
-				for(j=0;j<ONCE_SEND_CNT;j++)
+				for(j=0;j < ONCE_SEND_CNT;j++)
 				{
-					offset = j*sizeof(power_ch_t);
-					memcpy(hdr->data+offset, &all.pch[i*ONCE_SEND_CNT+j],sizeof(power_ch_t));
+					offset =j*sizeof(power_ch_t);
+					memcpy(hdr->data+offset, &all.pch[i+j],sizeof(power_ch_t));
 				}
 				xlen = sizeof(power_ch_t) * ONCE_SEND_CNT + sizeof(pkt_hdr_t);
 				hdr->dlen  = xlen-sizeof(pkt_hdr_t);
@@ -180,7 +182,7 @@ static void send_powerc(web_handle_t *h, mg_conn_t *c, uint8_t addr)
 				hdr->flag = bag;
 				i += ONCE_SEND_CNT;
 			}
-			
+			usleep(100000);
 
 			ws_send(c, h->buf, xlen, 1);
 		}while(count > 0);
@@ -233,10 +235,10 @@ static void send_sensor(web_handle_t *h, mg_conn_t *c, uint8_t addr)
         offset = i*sizeof(sensor_data_t);
         memcpy(hdr->data+offset, &all.data[all.cnt-left+i], sizeof(sensor_data_t));
     }
-    xlen = (all.cnt%ONCE_SEND_CNT)*sizeof(breaker_data_t)+sizeof(pkt_hdr_t);
+    xlen = (all.cnt%ONCE_SEND_CNT)*sizeof(sensor_data_t)+sizeof(pkt_hdr_t);
     hdr->dlen  = xlen-sizeof(pkt_hdr_t);
     ws_send(c, h->buf, xlen, 1);
-    sensor_data_free(&all);
+   // sensor_data_free(&all);
 }
 static void send_breaker(web_handle_t *h, mg_conn_t *c, uint8_t addr)
 {
@@ -280,7 +282,7 @@ static void send_breaker(web_handle_t *h, mg_conn_t *c, uint8_t addr)
 
 static void send_net(web_handle_t *h, mg_conn_t *c)
 {
-	paras_data_t* para=paras_get();
+	//paras_data_t* para=paras_get();
 	pkt_hdr_t *hdr=NULL;
 	hdr = (pkt_hdr_t*)h->buf;
 	hdr->magic = PKT_MAGIC;
@@ -291,7 +293,8 @@ static void send_net(web_handle_t *h, mg_conn_t *c)
 
 	network_data_t data = {0};
 	
-	data = para->netwk;
+	net_get_ip(&data);
+	//data = para->netwk;
 	hdr->dlen  = sizeof(network_data_t);
 	memcpy(hdr->data,&data,hdr->dlen);
 	
@@ -372,14 +375,14 @@ static void send_modbus(web_handle_t *h, mg_conn_t *c)
 }
 
 
-static void sendntp(web_handle_t *h, mg_conn_t *c)
+static void send_sys(web_handle_t *h, mg_conn_t *c)
 {
 	time_t t=time(NULL);
   struct tm *tm=localtime(&t);
 	char date[40] = {0};
 	char _time[40] = {0};
 	snprintf(date, 40, "%04d%/%02d/%02d", (tm->tm_year+1900), tm->tm_mon+1, tm->tm_mday);
-	snprintf(_time, 40, "%04d%:%02d:%02d", tm->tm_hour, tm->tm_min, tm->tm_sec);
+	snprintf(_time, 40, "%02d%:%02d:%02d", tm->tm_hour, tm->tm_min, tm->tm_sec);
 	paras_data_t* para=paras_get();
 	pkt_hdr_t *hdr=NULL;
 	hdr = (pkt_hdr_t*)h->buf;
@@ -388,16 +391,19 @@ static void sendntp(web_handle_t *h, mg_conn_t *c)
   hdr->addr  = 0;
   hdr->type  = PKT_TYPE_PARAS;
   hdr->nack  = 0;
-	hdr->subtype = SUB_TYPE_PARAS_NTP;
+	hdr->subtype = SUB_TYPE_PARAS_SYS;
 	
 	system_data_t data = {0};
 	data.lang = para->sys.lang;
-	data.tzone = para->sys.tzone;
+	data.tzone = (rt_tz_get()/3600);
+	strcpy(data.ver,VERSION);
+	data.route = para->misc.rotate;
 	sprintf(data.sys_time,"%s %s",date,_time);
 	
 	memcpy(hdr->data, &data, sizeof(system_data_t));
 	hdr->dlen  = sizeof(system_data_t);
-	ws_send(c, h->buf, hdr->dlen, 1);
+	uint32_t xlen = hdr->dlen + sizeof(pkt_hdr_t);
+	ws_send(c, h->buf, xlen, 1);
 }
 
 static void send_dlist(web_handle_t *h, mg_conn_t *c)
@@ -466,15 +472,22 @@ static int ws_handle(web_handle_t *h, pkt_hdr_t *hdr, mg_conn_t *c)
 												sys->sys_time[i]=' ';
 											}
 										}
+										if(sys->route == 90 || sys->route == 180 || sys->route == 0 || sys->route == 270)
+										{
+											if(para->misc.rotate != sys->route)
+											{
+												para->misc.rotate = sys->route;
+												lcd_rotate(sys->route);
+											}
+										}
 										sprintf(str,"date %s",sys->sys_time);
                     system(str);
-										
-                    if(flag) {
-                        paras_save();
-                    }
+							
+                    paras_save();
+                    
 									}else
 									{
-										sendntp(h, c);
+										send_sys(h, c);
 									}
                 }
                 break;
@@ -538,10 +551,19 @@ static int ws_handle(web_handle_t *h, pkt_hdr_t *hdr, mg_conn_t *c)
 									if(hdr->dlen>0) {
 										
                     network_data_t *p=(network_data_t*)hdr->data;
-										paras_data_t *para = paras_get();
-										net_ipaddr_set(p);
-										para->netwk = *p;
-										paras_save();
+										if(sys_ip_check(p->ipaddr) && 
+											 sys_ip_check(p->dns1)  &&
+											 sys_ip_check(p->dns2) &&
+										   sys_ip_check(p->mask) &&
+											 sys_ip_check(p->gateway) &&
+										   (p->mode < 2))
+										{
+											paras_data_t *para = paras_get();
+											net_ipaddr_set(p);
+											para->netwk = *p;
+											paras_save();											
+										}
+
 									}else
 									{
 										send_net(h, c);
@@ -563,9 +585,10 @@ static int ws_handle(web_handle_t *h, pkt_hdr_t *hdr, mg_conn_t *c)
 										paras_data_t *para = paras_get();
 										strcpy(para->snmp.publics,p->publics);
 										strcpy(para->snmp.nms_ip,p->nms_ip);
-										//para->snmp = *p;
+										para->snmp = *p;
 										snmp_strap_set();
 										paras_save();
+										
 									}else
 									{
 										send_smnp(h, c);
@@ -793,7 +816,7 @@ static void web_thread(void *arg)
     thread_handle_t *th=(thread_handle_t*)arg;
     web_handle_t *h=(web_handle_t*)th->attr->arg;
 
-    strcpy(h->rootDir, "/sd");
+    strcpy(h->rootDir, "/nor/web");
 
 #ifdef USE_MG716
     mg_log_set(MG_LL_VERBOSE);
@@ -815,7 +838,7 @@ static void web_thread(void *arg)
     mg_mgr_init(&h->mgr, NULL);
     nc = mg_bind(&h->mgr, "80", http_fn);
 
-    strcpy(h->rootDir, "/sd");
+    strcpy(h->rootDir, "/nor/web");
     
     mg_set_protocol_http_websocket(nc);
     h->opts.document_root = h->rootDir;

File diff suppressed because it is too large
+ 338 - 176
f427/project/all.uvmpw.uvgui.Gowon


File diff suppressed because it is too large
+ 44492 - 41708
f427/project/app/JLinkLog.txt


File diff suppressed because it is too large
+ 77 - 77
f427/project/app/app.uvguix.Gowon


File diff suppressed because it is too large
+ 550 - 440
f427/project/app/app.uvoptx


File diff suppressed because it is too large
+ 12 - 2
f427/project/app/app.uvprojx


File diff suppressed because it is too large
+ 12 - 12
f427/project/boot/boot.uvguix.Gowon