Преглед на файлове

1、修改ui中单相的bug
2、针对启动后无ip的情况,修改处理方式

guohui преди 1 година
родител
ревизия
fe4edb60b9
променени са 5 файла, в които са добавени 112 реда и са изтрити 36 реда
  1. 3 3
      pro/config/cfg.h
  2. 2 2
      pro/src/sensor_handle.c
  3. 17 0
      pro/src/switch_ctrl.c
  4. 79 26
      pro/src/sys.c
  5. 11 5
      pro/ui/menu.c

+ 3 - 3
pro/config/cfg.h

@@ -25,7 +25,7 @@
 //#define PRJ_TEST_AC_I3_O1
 //#define PRJ_IP_AC_I3_O3
 //#define PRJ_INST2302_DC_OLED
-#define PRJ_INST2106_AC_I3_O1_OLED
+#define PRJ_INST2106_AC_I1_O1_OLED
 
 
 //#define USE_BOARD_UPGRADE
@@ -223,7 +223,7 @@
     #define USE_UI
     #define USE_SCREEN_LED
     //#define USE_SCREEN_LCD
-#elif defined PRJ_INST2106_AC_I3_O1_OLED
+#elif defined PRJ_INST2106_AC_I1_O1_OLED
     #define LANGUAGE                            0           //chinese
     #define SMPLE_TIME                          30          //ms
     #define SAVE_TIME                           60000       //ms
@@ -232,7 +232,7 @@
     #define PHASE_GROUP                         8
     #define CHANNEL_DELAY                       8
 
-    #define PROD_POWER_TYPE                     5
+    #define PROD_POWER_TYPE                     0
 
     #define USE_UI
     #define ROTATE                              180

+ 2 - 2
pro/src/sensor_handle.c

@@ -225,7 +225,7 @@ int sensor_get_data(int type, int subtype, int addr, int subaddr, sensor_dat_t *
                 {
                     r = g_modbus_read_x_reg(mm, addr, 0, 1, &tmp);
                     if (r <= 0) {
-                        printf("___ sensor BTG50H8EL3200 read failed, addr: %d, %s\n", addr, modbus_strerror(errno));
+                        //printf("___ sensor BTG50H8EL3200 read failed, addr: %d, %s\n", addr, modbus_strerror(errno));
                         return -1;
                     }
                     data->val[0] = tmp/10.0f - 50;
@@ -244,7 +244,7 @@ int sensor_get_data(int type, int subtype, int addr, int subaddr, sensor_dat_t *
                     uint16_t tmp[4]={0};
                     r = g_modbus_read_input_reg(mm, addr, 0, 4, tmp);
                     if (r <= 0) {
-                        printf("___ sensor XWDC01A read failed, addr: %d, %s\n", addr, modbus_strerror(errno));
+                        //printf("___ sensor XWDC01A read failed, addr: %d, %s\n", addr, modbus_strerror(errno));
                         return -1;
                     }
                     //printf("___ XWDC01A read: 0x%04x, 0x%04x, 0x%04x, 0x%04x\n", tmp[0],tmp[1],tmp[2],tmp[3]);

+ 17 - 0
pro/src/switch_ctrl.c

@@ -1117,6 +1117,23 @@ int g_switch_set_all_single_threshold(void* manger,int ntype,int saddr,char chn,
                     log_e("Threshold AlarmCtrl Set Error=%s", modbus_strerror(errno));
                 }
             }
+
+#if 1
+            if(setCh &&__globalDeviceManage._globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_Tree) {
+                if (_global_over_manager->product_vol_upper_enable == 1)
+                    sts |= ENABLE_TAC_V_UP;
+                if (_global_over_manager->product_vol_lower_enable == 1)
+                    sts |= ENABLE_TAC_V_DOWN;
+                if (_global_over_manager->product_cur_upper_enable == 1)
+                    sts |= ENABLE_TAC_A_UP;
+                if (_global_over_manager->product_pwr_upper_enable == 1)
+                    sts |= ENABLE_TAC_W_UP;
+                if (_global_over_manager->product_pwrcon_upper_enable == 1)
+                    sts |= ENABLE_TAC_P_UP;
+
+                ret = g_switch_set_t_ac_phchn_ctrl(manger, saddr, (chn - 1), sts);
+            }
+#endif
         }
     }
     break;

+ 79 - 26
pro/src/sys.c

@@ -2,6 +2,9 @@
 #include <sys/stat.h>
 #include <sys/statvfs.h>
 #include <fcntl.h>
+#include <dirent.h>
+#include <signal.h>
+#include <sys/wait.h>
 #include <unistd.h>
 #include <string.h>
 #include <limits.h>
@@ -42,12 +45,19 @@
 #define FILE_NET            "/etc/network/interfaces"
 #define FILE_DNS            "/etc/dnsmasq.conf"
 
-
+static int net_check(void);
+static int get_pid(char *proc);
+static int get_net(NetworkInfo_t *para, int ipv);
 static int set_net(NetworkInfo_t *para, int ipv);
 
+
 static void nic_restart(void)
 {
-    system("ifdown eth0;ifup eth0");
+    NetworkInfo_t info;
+    char *p=getLocalIpAddress(DFLT_NIC);
+    if(p==NULL) {
+        system("ifdown eth0;ifup eth0;sleep 2");
+    }
 }
 static void nic_set_mac(void)
 {
@@ -229,6 +239,7 @@ static int set_ipaddr(int family, const char* iface, const char* addr, const cha
 }
 static int get_ipaddr(int family, char *iface, char *addr, char *netmask)
 {
+    int r=-1;
     struct ifaddrs *ifap, *ifa;
 
     if (getifaddrs(&ifap) == -1) {
@@ -244,14 +255,19 @@ static int get_ipaddr(int family, char *iface, char *addr, char *netmask)
                 msk = (struct sockaddr_in *) ifa->ifa_netmask;
 
                 if(addr) {
-                    inet_ntop(family, &sa->sin_addr, addr, INET6_ADDRSTRLEN);
-                    //printf("___addr: %s\n", addr);
+                    char *p = (char*)inet_ntop(family, &sa->sin_addr, addr, INET6_ADDRSTRLEN);
+                    if(p && strcmp(p, "127.0.0.1") && strcmp(p, "172.17.0.1")) {
+                        printf("___addr4: %s\n", addr);
+                        r = 0;
+                    }
                 }
 
                 if(netmask) {
                     inet_ntop(family, &msk->sin_addr, netmask, INET6_ADDRSTRLEN);
-                    //printf("___netmask: %s\n", netmask);
+                    //printf("___netmask4: %s\n", netmask);
                 }
+
+                if(r==0) break;
             }
             else {
                 struct sockaddr_in6 *sa,*msk;
@@ -259,20 +275,25 @@ static int get_ipaddr(int family, char *iface, char *addr, char *netmask)
                 msk = (struct sockaddr_in6 *) ifa->ifa_netmask;
                 
                 if(addr) {
-                    inet_ntop(family, &sa->sin6_addr, addr, INET6_ADDRSTRLEN);
-                    //printf("___addr6: %s\n", addr);
+                    char *p = (char*)inet_ntop(family, &sa->sin6_addr, addr, INET6_ADDRSTRLEN);
+                    if(p && strcmp(p, "::1")) {
+                        printf("___addr6: %s\n", addr);
+                        r = 0;
+                    }
                 }
 
                 if(netmask) {
                     inet_ntop(family, &msk->sin6_addr, netmask, INET6_ADDRSTRLEN);
                     //printf("___netmask6: %s\n", netmask);
                 }
+
+                if(r==0) break;
             }
         }
     }
     freeifaddrs(ifap);
     
-    return 0;
+    return r;
 }
 
 static int set_gateway(int family, const char* gateway)
@@ -1374,6 +1395,7 @@ static void* polling_thread(void *arg)
     wdog_init();
     tmp_create();
     while(h->quit==0) {
+        net_check();
         wdog_feed();
         mem_check();
         send_check();
@@ -1518,39 +1540,70 @@ int sys_chmod(void)
 }
 
 
-static void dhcp_restart(void)
+static int net_check(void)
 {
-    int r;
+    int r,pid;
+    char tmp[200];
     char ipaddr[64],mask[64];
     NetworkInfo_t net4,net6;
+    static uint32_t dhcp_cnt=0;
 
-    r = get_net(&net4, IP_V4);
-    if(r==0) {
-        r = get_ipaddr(AF_INET, DFLT_NIC, ipaddr, mask);
-        if(r && net4.mode==IP_DHCP) {
-            set_dhcp(1);
+    if(dhcp_cnt%10==0) {
+        printf("__ dhcp check\n");
+        r = get_net(&net4, IP_V4);
+        if(r==0) {
+            r = get_ipaddr(AF_INET, DFLT_NIC, ipaddr, mask);
+            if(r) {
+                if(net4.mode==IP_DHCP) {
+#if 0
+                    pid = get_pid("udhcpc");
+                    printf("___udhcpc pid: %d\n", pid);
+                    if(pid>=0) {
+                        kill(pid, SIGUSR2);
+                    }
+#else
+                    system("killall udhcpc; udhcpc");
+#endif
+                }
+                else {
+                    sprintf(tmp, "ifconfig %s %s up", DFLT_NIC, ipaddr);
+                    system(tmp);
+                }
+            }
         }
-    }
 
-    r = get_net(&net6, IP_V6);
-    if(r==0) {
-        r = get_ipaddr(AF_INET6, DFLT_NIC, ipaddr, mask);
-        if(r && net6.mode==IP_DHCP) {
-            
+        r = get_net(&net6, IP_V6);
+        if(r==0) {
+            r = get_ipaddr(AF_INET6, DFLT_NIC, ipaddr, mask);
+            if(r) {
+                if(net6.mode==IP_DHCP) {
+                    pid = get_pid("udhcpc6");
+                    printf("___udhcpc6 pid: %d\n", pid);
+                    if(pid>=0) {
+                        kill(pid, SIGUSR2);
+                    }
+                }
+                else {
+                    sprintf(tmp, "ip addr add %s/%s dev %s", ipaddr, mask, DFLT_NIC);
+                    system(tmp);
+                    sprintf(tmp, "ip link set dev %s up", DFLT_NIC);
+                    system(tmp);
+                }
+            }
         }
     }
+    dhcp_cnt++;
 
+    return 0;
 }
 
+
 static void net_init(void)
 {
-    nic_restart();
     nic_set_mac();
 }
 
-#include <dirent.h>
-#include <signal.h>
-#include <sys/wait.h>
+
 static int get_pid(char *proc)
 {
     DIR *dir;
@@ -1608,8 +1661,8 @@ int sys_init(void)
     sys_chmod();
     init_hash_table();
     
-    ui_init();
     net_init();
+    ui_init();
     thread_start(THREAD_ID_POLLING, polling_thread, NULL);
 
     return 0;

+ 11 - 5
pro/ui/menu.c

@@ -627,6 +627,9 @@ static int menu_key_handle(menu_handle_t *h, key_val_t *kv)
                         h->ph_in = 1;
                         h->menu.menu_lv = 1;
                     }
+                    else {
+                        h->menu.menu_id++;
+                    }
                 }
             }
             else if(h->menu.menu_lv==1) {
@@ -708,6 +711,7 @@ static int menu_key_handle(menu_handle_t *h, key_val_t *kv)
 int menu_handle(void)
 {
     int r;
+    uint64_t cur_ms;
     key_val_t kv;
     int rotate=lcd_get_rotate();
     int item_h=LCD_HEIGHT/4;
@@ -742,23 +746,25 @@ int menu_handle(void)
 
         default:
         {
+            cur_ms = get_ms();
 #if 1
             if(h->fliptime>0) {
-                if((get_ms()-h->flip_ms)>=h->fliptime) {
+                if((cur_ms-h->flip_ms)>=h->fliptime) {
                     h->uflag |= UFLAG_FLIP;
-                    h->flip_ms = get_ms();
+                    h->flip_ms = cur_ms;
                 }
             }
 #endif
-            if((get_ms()-h->refresh_ms)>=REFRESH_TIME) {
+            if((cur_ms-h->refresh_ms)>=REFRESH_TIME) {
                 h->uflag |= UFLAG_REFRESH;
-                h->refresh_ms = get_ms();
+                h->refresh_ms = cur_ms;
             }
         }
     }
     if(h->uflag==0 && kv.key<0) {
         return -1;
     }
+    //printf("___ uflag: %d\n", h->uflag);
 
     menu_key_handle(h, &kv);
     switch(h->menu.menu_id) {
@@ -793,7 +799,7 @@ int menu_handle(void)
         break;
     }
     h->uflag = 0;
-    printf("___ menu_id: %d, menu_lv: %d\n", h->menu.menu_id, h->menu.menu_lv);
+    //printf("___ menu_id: %d, menu_lv: %d\n", h->menu.menu_id, h->menu.menu_lv);
     
     return 0;
 }