Bläddra i källkod

继续完善ui,未知原因导致定时器在设置小间隔时不准

guohui 1 år sedan
förälder
incheckning
3195c8d6c5
7 ändrade filer med 150 tillägg och 79 borttagningar
  1. 10 3
      pro/config/cfg.h
  2. 5 2
      pro/src/appweb_handle.c
  3. 13 9
      pro/src/cascade_slave_tcp.c
  4. 3 3
      pro/src/dflt.c
  5. 16 6
      pro/src/sys.c
  6. 92 53
      pro/ui/menu.c
  7. 11 3
      pro/ui/ui.c

+ 10 - 3
pro/config/cfg.h

@@ -4,7 +4,6 @@
 
 #define VERSION                                 "V0.0.2"
 #define PROD_ID                                 0
-#define PROD_TYPE                               1
 
 
 /////////////customer demannd//////////////////////
@@ -14,7 +13,7 @@
 //#define PRJ_USASL_AC_I3_O3
 //#define PRJ_ITK_AC_I1_O1
 //#define PRJ_ITK_AC_I3_O1
-#define PRJ_STSC_I3_O3
+//#define PRJ_STSC_I3_O3
 //#define PRJ_LITECH_AC_I1_O1
 //#define PRJ_LITECH_AC_I3_O1
 //#define PRJ_INSPUR_DC_I_DC_O
@@ -25,7 +24,7 @@
 //#define PRJ_TEST_AC_I1_O1
 //#define PRJ_TEST_AC_I3_O1
 //#define PRJ_IP_AC_I3_O3
-//#define PRJ_INST2302_DC_OLED
+#define PRJ_INST2302_DC_OLED
 
 
 //#define USE_BOARD_UPGRADE
@@ -220,6 +219,14 @@
     #define CHANNEL_DELAY                       8
 
     #define PROD_POWER_TYPE                     1
+
+    #define USE_UI
+    #define USE_SCREEN_LED
+    //#define USE_SCREEN_LCD
+
+    //#define MENU_SLIDER
+    //#define CHANNEL_SLIDER
+
 #else
     #error define a PRJ_XXXX please!
 #endif

+ 5 - 2
pro/src/appweb_handle.c

@@ -77,11 +77,14 @@ static char* g_product_board_cpu[] = {
     "xxx",
     "T113"
 };
+ 
 static char* g_product_type_str[] = {
     "SmartPDU(DC)",
     "SmartPDU(AC)",
-    "SmartPDU(Tree_AC_Tree)",
-    "SmartPDU(Tree_AC_One)",
+    "SmartPDU",
+    "SmartPDU(Three_AC_Tree)",
+    "SmartPDU(Three_AC_One)",
+    "SmartPDU(Three_AC_One_B)",
 };
 static char* g_product_pwr_type_str[] = {
     "xxx",

+ 13 - 9
pro/src/cascade_slave_tcp.c

@@ -122,15 +122,19 @@ static void *pthread_handle_tcp(void *arg)
             if(h.func==MODBUS_FC_READ_HOLDING_REGISTERS) {
                 cascade_slave_read(h.reg, h.regcnt);
                 modbus_reply(mb->ctx,query,rc,cascade_slave_map());
-            }    
-            }else if(rc < 0)
-            {
-                log_d("thread out!!!!!\n");
-                break;
-            }else
-            {
-                continue;
             }
+            else if(h.func==MODBUS_FC_WRITE_SINGLE_REGISTER) {
+                cascade_slave_write(h.reg, h.regcnt);
+                modbus_reply(mb->ctx,query,rc,cascade_slave_map());
+            }
+        }else if(rc < 0)
+        {
+            log_d("thread out!!!!!\n");
+            break;
+        }else
+        {
+            continue;
+        }
     }
     modbus_close(mb->ctx);
     modbus_free(mb->ctx);
@@ -177,5 +181,5 @@ void* tcp_modbus_thread(void *arg)
             }
         }
     }
-
+    pthread_exit(NULL);
 }

+ 3 - 3
pro/src/dflt.c

@@ -12,9 +12,9 @@ GlobalDeviceInfo DFLT_PARAS={
             .number     = "X00001",
             .name       = "Smart PDU",
             .status     = "",
-            .date = "2024.01.01",
-            .batch= "1",
-            .type       = PROD_TYPE,
+            .date       = "2024.01.01",
+            .batch      = "1",
+            .type       = PROD_POWER_TYPE,
             .pwr_type   = PROD_POWER_TYPE,
             .version    = VERSION,
             .language   = LANGUAGE,                     //多国语言

+ 16 - 6
pro/src/sys.c

@@ -45,13 +45,16 @@
 
 static int set_net(NetworkInfo_t *para, int ipv);
 
-static void nic_restart(char *nic)
+static void nic_restart(void)
 {
-    char tmp[100];
-    sprintf(tmp, "ifdown %s;ifup %s;", nic, nic);
-    system(tmp);
+    system("ifdown eth0;ifup eth0");
+}
+static void nic_set_mac(void)
+{
+    system("ip link set dev eth0 address `cat /sys/class/addr_mgt/addr_eth`");
 }
 
+
 ////////////////////////////////////////////////////////////////////
 int sys_reboot(void)
 {
@@ -1513,6 +1516,13 @@ int sys_chmod(void)
 
     return 0;
 }
+static void net_init(void)
+{
+    nic_restart();
+    nic_set_mac();
+}
+
+
 
 #include "ui.h"
 int sys_init(void)
@@ -1524,8 +1534,8 @@ int sys_init(void)
     sys_chmod();
     init_hash_table();
     
-    //ui_init();
-    nic_restart(DFLT_NIC);
+    ui_init();
+    net_init();
     thread_start(THREAD_ID_POLLING, polling_thread, NULL);
 
     return 0;

+ 92 - 53
pro/ui/menu.c

@@ -123,112 +123,151 @@ static void menu_system_paint(menu_handle_t *h, int font1, int font2, int item_h
     lcd_refresh();
 }
 
-static int get_power(int ph)
+static int is_pwrin_3(GlobalDeviceManager *dm)
 {
-    int k = 0;
-    GlobalTreeACManager *tmp3 = NULL;
-    GlobalDeviceManager *dm=get_dm();
-    //输入数据
-    int nselectPH = dm->g_shm_Data->nSelectPh;
     if ((dm->_globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_Tree ||
-         dm->_globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_One ||
-         dm->_globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_One_B))
-    {//三项输入数据
+         dm->_globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_One  ||
+         dm->_globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_One_B)) {
+        return 1;
+    }
+    return 0;
+}
+static int is_pwrout_3(GlobalDeviceManager *dm)
+{
+    if (dm->_globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_Tree) {
+        return 1;
+    }
+    return 0;
+}
+
+static int get_input(GlobalDeviceManager *dm, int ph, PowerInfo *info)
+{
+    int i=0;
+    GlobalTreeACManager *tmp3=NULL;
+
+    if (is_pwrin_3(dm)) {
+        if(list_empty(&dm->_globalPowerManger.list_Tree_AC)) {
+            return -1;
+        }
+
         list_for_each_entry(tmp3, &dm->_globalPowerManger.list_Tree_AC, list_Tree_AC) {
-            k += 1;
-            if (ph == k)
+            i++;
+            if (i==ph)
                 break;
         }
         if (tmp3) {
-            dm->g_shm_Data->fV = tmp3->_PowerInfo.voltage;
-            dm->g_shm_Data->fA = tmp3->_PowerInfo.current;
-            dm->g_shm_Data->fW = tmp3->_PowerInfo.power;
-            dm->g_shm_Data->fF = tmp3->_PowerInfo.factor;
-            dm->g_shm_Data->fS = tmp3->_PowerInfo.consumption;
-            dm->g_shm_Data->nStatus = tmp3->_PowerInfo.status;
-            dm->g_shm_Data->fT = dm->g_modebus_read.temprature/100.0f;
-            dm->g_shm_Data->fH = dm->g_modebus_read.humidity/100.0f;
+            *info = tmp3->_PowerInfo;
         }
     }
-    else
+    else {
+        *info = dm->_globalPowerManger._PowerInfo;
+    }
+    return 0;
+}
+
+static int get_output(GlobalDeviceManager *dm, int ch, int ph, PowerInfo *info)
+{
+    int i=0,j=0;
+    GlobalPowerManger *tmp;
+    GlobalTreeACManager *tmp3 = NULL;
+    
+    list_for_each_entry(tmp, &dm->_globalPowerManger.list, list)
     {
-        //其他输入数据
-        dm->g_shm_Data->fV = dm->_globalPowerManger._PowerInfo.voltage;
-        dm->g_shm_Data->fA = dm->_globalPowerManger._PowerInfo.current;
-        dm->g_shm_Data->fW = dm->_globalPowerManger._PowerInfo.power;
-        dm->g_shm_Data->fF = dm->_globalPowerManger._PowerInfo.factor;
-        dm->g_shm_Data->fS = dm->_globalPowerManger._PowerInfo.consumption;
-        dm->g_shm_Data->nStatus = dm->_globalPowerManger._PowerInfo.status;
-        dm->g_shm_Data->fT = dm->g_modebus_read.temprature/100.0f;
-        dm->g_shm_Data->fH = dm->g_modebus_read.humidity/100.0f;
+        i++;
+        if (i==ch) {
+            if (is_pwrout_3(dm)) {
+                list_for_each_entry(tmp3, &tmp->list_Tree_AC, list_Tree_AC)
+                {
+                    j++;
+                    if(j==ph) {
+                        *info = tmp3->_PowerInfo;
+                    }
+                }
+            }
+            else {
+                *info = tmp->_PowerInfo;
+            }
+            return 0;
+        }
     }
 
-    return 0;
+    return -1;
 }
 static void menu_input_paint(menu_handle_t *h, int font1, int font2, int item_h)
 {
+    int r;
     char tmp[100];
+    PowerInfo *pwr,info;
     GlobalDeviceManager *dm=get_dm();
 
+    r = get_input(dm, 0, &info);
+    if(r) {
+        return;
+    }
+    pwr = &info;
+
     lcd_fill(0);
     sprintf(tmp, "%s", lang_get_str(h->lang, STR_ID_INPUT));
     lcd_draw_string(0, 0, LCD_WIDTH, item_h, tmp, font1, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_CENTER, VERTICAL_CENTER);
 
 #ifdef TEXT_ALIGN
-    sprintf(tmp, "%s:%0.2f", lang_get_str(h->lang, STR_ID_VOLTAGE), 220.0f);
+    sprintf(tmp, "%s:%0.2f", lang_get_str(h->lang, STR_ID_VOLTAGE), pwr->voltage);
     lcd_draw_string(0, item_h, LCD_WIDTH/2, 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), 10.0f);
+    sprintf(tmp, "%s:%0.2f", lang_get_str(h->lang, STR_ID_CURRENT), pwr->current);
     lcd_draw_string(LCD_WIDTH/2, item_h, LCD_WIDTH/2, 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), 111.0f);
+    sprintf(tmp, "%s:%0.2f", lang_get_str(h->lang, STR_ID_POWER), pwr->power);
     lcd_draw_string(0, item_h*2, LCD_WIDTH/2, 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), 0.99f);
+    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:%0.2f%s:%0.2f", lang_get_str(h->lang, STR_ID_VOLTAGE), 220.0f, lang_get_str(h->lang, STR_ID_CURRENT), 10.0f);
+    sprintf(tmp, "%s:%0.2f%s:%0.2f", lang_get_str(h->lang, STR_ID_VOLTAGE), pwr->voltage, lang_get_str(h->lang, STR_ID_CURRENT), pwr->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%s:%0.2f", lang_get_str(h->lang, STR_ID_POWER), 111.0f, lang_get_str(h->lang, STR_ID_FACTOR), 0.99f);
+    sprintf(tmp, "%s:%0.2f%s:%0.2f", lang_get_str(h->lang, STR_ID_POWER), pwr->power, lang_get_str(h->lang, STR_ID_FACTOR), pwr->factor);
     lcd_draw_string(0, item_h*2, 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), 1122.0f);
+    sprintf(tmp, "%s:%0.2f", lang_get_str(h->lang, STR_ID_CONSUMP), pwr->consumption);
     lcd_draw_string(0, item_h*3, LCD_WIDTH, item_h, tmp, font2, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);
 
     lcd_refresh();
 }
 static void menu_output_paint(menu_handle_t *h, int font1, int font2, int item_h)
 {
+    int r;
     char tmp[100];
-    PowerInfo ttt;
-    PowerInfo *pwr=&ttt;
+    PowerInfo *pwr,info;
     GlobalDeviceManager *dm=get_dm();
 
+    r = get_output(dm, 0, 0, &info);
+    if(r) {
+        return;
+    }
+    pwr = &info;
+
     lcd_fill(0);
     sprintf(tmp, "%s CH3", lang_get_str(h->lang, STR_ID_OUTPUT));
     lcd_draw_string(0, 0, LCD_WIDTH, item_h, tmp, font1, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_CENTER, VERTICAL_CENTER);
 
+    char *pon=((pwr->status)?lang_get_str(h->lang, STR_ID_ON):lang_get_str(h->lang, STR_ID_OFF));
 #ifdef TEXT_ALIGN
-    int on=1;
-    char *pon=on?lang_get_str(h->lang, STR_ID_ON):lang_get_str(h->lang, STR_ID_OFF);
     sprintf(tmp, "%s:%s", lang_get_str(h->lang, STR_ID_SWITCH), pon);
     lcd_draw_string(0, item_h, LCD_WIDTH/2, 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), 10.0f);
+    sprintf(tmp, "%s:%0.2f", lang_get_str(h->lang, STR_ID_CURRENT), pwr->current);
     lcd_draw_string(LCD_WIDTH/2, item_h, LCD_WIDTH/2, 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), 111.0f);
+    sprintf(tmp, "%s:%0.2f ", lang_get_str(h->lang, STR_ID_POWER), pwr->power);
     lcd_draw_string(0, item_h*2, LCD_WIDTH/2, 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), 0.99f);
+    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
-    int on=1;
-    char *pon=on?lang_get_str(h->lang, STR_ID_ON):lang_get_str(h->lang, STR_ID_OFF);
-    sprintf(tmp, "%s:%s %s:%0.2f", lang_get_str(h->lang, STR_ID_SWITCH), pon, lang_get_str(h->lang, STR_ID_CURRENT), 10.0f);
+    sprintf(tmp, "%s:%s %s:%0.2f", lang_get_str(h->lang, STR_ID_SWITCH), pon, lang_get_str(h->lang, STR_ID_CURRENT), pwr->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%s:%0.2f", lang_get_str(h->lang, STR_ID_POWER), 111.0f, lang_get_str(h->lang, STR_ID_FACTOR), 0.99f);
+    sprintf(tmp, "%s:%0.2f%s:%0.2f", lang_get_str(h->lang, STR_ID_POWER), pwr->power, lang_get_str(h->lang, STR_ID_FACTOR), pwr->factor);
     lcd_draw_string(0, item_h*2, 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), 888.88f);
+    sprintf(tmp, "%s:%0.2f", lang_get_str(h->lang, STR_ID_CONSUMP), pwr->consumption);
     lcd_draw_string(0, item_h*3, LCD_WIDTH, item_h, tmp, font2, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);
 
     lcd_refresh();
@@ -247,18 +286,18 @@ static void menu_sensor_paint(menu_handle_t *h, int font1, int font2, int item_h
 #ifdef TEXT_ALIGN
     sprintf(tmp, "%s:", lang_get_str(h->lang, STR_ID_TEMP));
     lcd_draw_string(0, item_h, LCD_WIDTH/2, item_h, tmp, font2, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);
-    sprintf(tmp, "%0.1f", 10.0f);
+    sprintf(tmp, "%0.1f", dm->g_modebus_read.temprature/100.0f);
     lcd_draw_string(LCD_WIDTH/2, item_h, LCD_WIDTH/2, item_h, tmp, font2, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);
 
     sprintf(tmp, "%s:", lang_get_str(h->lang, STR_ID_HUMI));
     lcd_draw_string(0, item_h*2, LCD_WIDTH/2, item_h, tmp, font2, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);
-    sprintf(tmp, "%0.1f", 88.0f);
+    sprintf(tmp, "%0.1f", dm->g_modebus_read.humidity/100.0f);
     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.1f", lang_get_str(h->lang, STR_ID_TEMP), 10.0f);
+    sprintf(tmp, " %s: %0.1f", lang_get_str(h->lang, STR_ID_TEMP), dm->g_modebus_read.temprature/100.0f);
     lcd_draw_string(0, item_h, LCD_WIDTH, item_h, tmp, font2, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);
 
-    sprintf(tmp, " %s: %0.1f", lang_get_str(h->lang, STR_ID_HUMI), 88.0f);
+    sprintf(tmp, " %s: %0.1f", lang_get_str(h->lang, STR_ID_HUMI), dm->g_modebus_read.humidity/100.0f);
     lcd_draw_string(0, item_h*2, LCD_WIDTH, item_h, tmp, font2, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);
 #endif
 

+ 11 - 3
pro/ui/ui.c

@@ -1,7 +1,9 @@
 #include "ui.h"
 #include <unistd.h>
+#include <stdlib.h>
 #include "menu.h"
 #include "thread.h"
+#include "cfg.h"
 
 
 #if 1
@@ -40,14 +42,20 @@ static void *ui_thread(void *arg)
     pthread_exit(NULL);
 }
 /////////////////////////////////////////////////////
-
+static void rm_qt(void)
+{
+    system("killall Qt_Test; rm /root/run/app/Qt_Test");
+}
 
 int ui_init(void)
 {
     ui_handle_t *h=&uiHandle;
-    
+
+#ifdef USE_UI
+    rm_qt();
     thread_start(THREAD_ID_UI, ui_thread, h);
-    
+#endif
+
     return 0;
 }