Explorar o código

继续添加rotate配置项,增加堆led,rotate,beep配置项的处理

guohui hai 1 ano
pai
achega
0bc3c4e44e
Modificáronse 9 ficheiros con 112 adicións e 67 borrados
  1. 3 0
      pro/src/app.c
  2. 1 0
      pro/src/common.h
  3. 2 1
      pro/src/dflt.c
  4. 25 0
      pro/src/paras.c
  5. 9 2
      pro/ui/beep.c
  6. 8 8
      pro/ui/lcd.c
  7. 1 7
      pro/ui/lcd.h
  8. 8 1
      pro/ui/led.c
  9. 55 48
      pro/ui/menu.c

+ 3 - 0
pro/src/app.c

@@ -2334,7 +2334,10 @@ int app_init(void)
 
     thread_start(THREAD_ID_POWER,  power_thread,  _globalDeviceManager);
     thread_start(THREAD_ID_SENSOR, sensor_thread, _globalDeviceManager);
+
+#ifndef USE_UI
     thread_start(THREAD_ID_SHMW,   shm_thread,    _globalDeviceManager);
+#endif
 
     thread_start(THREAD_ID_BREAKER_SCANNER, breaker_scanner_thread, _globalDeviceManager);
     thread_start(THREAD_ID_BREAKER, breaker_thread, _globalDeviceManager);

+ 1 - 0
pro/src/common.h

@@ -376,6 +376,7 @@ typedef struct {
     int         flip_time;
     int         led;
     int         beep;
+    int         rotate;
 }MiscInfo_t;
 
 

+ 2 - 1
pro/src/dflt.c

@@ -66,9 +66,10 @@ GlobalDeviceInfo DFLT_PARAS={
 
         .misc = {
             .watchdog = 0,
-            .flip_time = 5,
+            .flip_time = 3,
             .led = 0,
             .beep = 0,
+            .rotate = 180,
         },
 };
 

+ 25 - 0
pro/src/paras.c

@@ -845,6 +845,11 @@ static int proc_misc(dictionary *dic, int op, MiscInfo_t *misc)
             LOGE("___ check misc, beep is invalid, correct value is 0/1\n");
             r = -1; 
         }
+
+        if(misc->rotate!=0 && misc->rotate!=90 && misc->rotate!=180 && misc->rotate!=270) {
+            LOGE("___ check misc, rotate is invalid, correct value is 0/90/180/270\n");
+            r = -1; 
+        }
     }
     else if (op==PARAS_CREATE) {
 
@@ -932,6 +937,25 @@ static int proc_misc(dictionary *dic, int op, MiscInfo_t *misc)
         }
     }
 
+    token = "misc:rotate";
+    if(op==PARAS_READ) {
+        r = iniparser_getint(dic, token, -1);
+        if(r==-1) {
+            LOGE("___ iniparser_getint %s failed\n", token);
+            return -1;
+        } else {
+            misc->rotate = r;
+        }
+    }
+    else {
+        sprintf(temp, "%d", misc->rotate);
+        r = iniparser_set(dic, token, temp);
+        if(r) {
+            LOGE("___ iniparser_set %s failed\n", token);
+            return -1;
+        }
+    }
+
     r = 0;
     if(op==PARAS_READ) {
         r = proc_misc(dic, PARAS_CHECK, misc);
@@ -3366,6 +3390,7 @@ static int ini_reset(paras_handle_t *h)
     fprintf(fp, "fliptime    = \"%d\"\n", info->misc.flip_time);
     fprintf(fp, "led         = \"%d\"\n", info->misc.led);
     fprintf(fp, "beep        = \"%d\"\n", info->misc.beep);
+    fprintf(fp, "rotate      = \"%d\"\n", info->misc.rotate);
 
     fprintf(fp, "\n");
 

+ 9 - 2
pro/ui/beep.c

@@ -2,6 +2,7 @@
 #include "timer.h"
 #include "elog.h"
 #include "beep.h"
+#include "common.h"
 #include <stdio.h>
 #include <sys/time.h>
 
@@ -43,6 +44,11 @@ typedef struct {
 }beep_handle_t;
 static beep_handle_t bpHandle={0};
 
+static inline MiscInfo_t* get_misc(void)
+{
+    return &__globalDeviceManage._globalDevInfo.misc;
+}
+
 static void beep_handler(void *arg, int last)
 {
     beep_handle_t *h=(beep_handle_t*)arg;
@@ -105,8 +111,9 @@ int beep_set_ex(beep_para_t *para)
 {
     int r = 0;
     beep_handle_t *h=&bpHandle;
-    
-    if(!para || (para->on_ms<=0 && para->off_ms<=0) || para->times==0) {
+    MiscInfo_t* misc=get_misc();
+
+    if(!misc->led || !para || (para->on_ms<=0 && para->off_ms<=0) || para->times==0) {
         return -1;
     }
     

+ 8 - 8
pro/ui/lcd.c

@@ -48,7 +48,7 @@ typedef struct {
     int         width;
     int         height;
     int         color;
-    int         angle;
+    int         rotate;
 
     int         fd;
 #ifdef USE_FB
@@ -227,7 +227,7 @@ static inline int set_point(lcd_handle_t *h, int x, int y, int data)
 {
     int pos,bit;
 
-    if(h->angle==ANGLE_180) {
+    if(h->rotate==180) {
         x = h->width-1-x;
         y = h->height-1-y;
     }
@@ -270,7 +270,7 @@ void lcd_init(int width, int height, int color)
     h->width  = width;
     h->height = height;
     h->color  = color;
-    h->angle = ANGLE_0;
+    h->rotate = 0;
 
     lcd_hw_init(h);
 }
@@ -282,20 +282,20 @@ void lcd_deinit(void)
 }
 
 
-void lcd_rotate(int angle)
+void lcd_rotate(int rotate)
 {
     lcd_handle_t *h=&lcdHandle;
 
-    if(angle==ANGLE_0 || angle==ANGLE_180) {
-        h->angle = angle;
+    if(rotate==0 || rotate==180) {
+        h->rotate = rotate;
     }
 }
 
 
-int lcd_get_angle(void)
+int lcd_get_rotate(void)
 {
     lcd_handle_t *h=&lcdHandle;
-    return h->angle;
+    return h->rotate;
 }
 
 

+ 1 - 7
pro/ui/lcd.h

@@ -35,12 +35,6 @@
 
 #endif
 
-enum {
-    ANGLE_0=0,
-    ANGLE_90,
-    ANGLE_180,
-    ANGLE_270,
-};
 
 enum {
     HORIZONTAL_LEFT=0,
@@ -68,7 +62,7 @@ void lcd_init(int width, int height, int color);
 void lcd_deinit(void);
 
 void lcd_rotate(int angle);
-int lcd_get_angle(void);
+int lcd_get_rotate(void);
 void lcd_set_backlight(int on);
 void lcd_fill(int color);
 void lcd_draw_line(int x1, int y1, int x2, int y2, int color);

+ 8 - 1
pro/ui/led.c

@@ -59,6 +59,12 @@ static led_para_t led_para[LED_MODE_MAX]={
 };
 static led_handle_t ledHandle={0};
 
+
+static inline MiscInfo_t* get_misc(void)
+{
+    return &__globalDeviceManage._globalDevInfo.misc;
+}
+
 static void led_handler(void *arg, int last)
 {
     int level;
@@ -135,8 +141,9 @@ int led_set_ex(led_para_t *para)
 {
     int r=0;
     led_handle_t *h=&ledHandle;
+    MiscInfo_t* misc=get_misc();
     
-    if(!para || (para->on_ms<=0 && para->off_ms<=0) || para->times==0) {
+    if(!misc->beep || !para || (para->on_ms<=0 && para->off_ms<=0) || para->times==0) {
         return -1;
     }
     led_data_t *ld=&h->data[para->led_id];

+ 55 - 48
pro/ui/menu.c

@@ -93,7 +93,7 @@ static int get_ch_max(void)
     GlobalPowerManger *tmp;
     GlobalDeviceManager *dm=get_dm();
     
-    if(list_empty(&dm->_globalPowerManger.list)) {
+    if(!thread_is_running(THREAD_ID_POWER) || list_empty(&dm->_globalPowerManger.list)) {
         return 0;
     }
     list_for_each_entry(tmp, &dm->_globalPowerManger.list, list)
@@ -266,43 +266,16 @@ static void menu_output_paint(menu_handle_t *h, int font1, int font2, int item_h
 {
     int r;
     char tmp[100];
-    PowerInfo *pwr,info;
+    PowerInfo *pwr,info={0};
     GlobalDeviceManager *dm=get_dm();
 
+    pwr = &info;
     r = get_output(dm, h->ch_out, h->ph_out, &info);
     if(r==0) {
-        pwr = &info;
         h->ch_out = (h->ch_out+1)%h->ch_max;
         if(is_ph3_out(dm)) {
             h->ph_out = (h->ph_out+1)%3;
         }
-
-        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
-        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), 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), 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), 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), 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), 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), 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();
     }
     else {
         h->ch_out = 0;
@@ -310,6 +283,38 @@ static void menu_output_paint(menu_handle_t *h, int font1, int font2, int item_h
             h->menu.menu_id++;
         }
     }
+
+    lcd_fill(0);
+    if(h->ch_max>0) {
+        sprintf(tmp, "%s CH%d", lang_get_str(h->lang, STR_ID_OUTPUT), h->ch_out+1);
+    }
+    else {
+        sprintf(tmp, "%s", 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
+    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), 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), 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), 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), 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), 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), 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_sensor_paint(menu_handle_t *h, int font1, int font2, int item_h)
 {
@@ -419,8 +424,11 @@ static int menu_modbus_handle(menu_handle_t *h, ModbusInfo_t *pmb, key_val_t *kv
                     tmr_start(h, 500);
                 }
             }
+            else if(h->menu.menu_lv==2) {
+                h->menu.menu_lv = 1;
+            }
             else {
-                if(kv->type==TYPE_SHORT) {
+                if(kv->type==TYPE_LONG) {
                     h->menu.menu_lv = 1;
                 }
             }
@@ -525,17 +533,19 @@ int menu_init(void)
 {
     int i;
     menu_handle_t *h=&mnHandle;
+    MiscInfo_t *misc=&get_dm()->_globalDevInfo.misc;
     
     memset(h, 0, sizeof(menu_handle_t));
     h->lang = lang_id;
     h->tmr = timer_init();
     h->ms = get_ms();
     h->uflag = 1;
-    h->fliptime = get_dm()->_globalDevInfo.misc.flip_time*1000;
+    h->fliptime = misc->flip_time*1000;
 
     h->ph_in = 0;
     h->ph_out = 0;
     h->ch_out = 0;
+    h->ch_max = 0;
     h->menu.menu_id = 0;
     h->menu.menu_lv = 0;
     for(i=0; i<MENU_MAX; i++) {
@@ -547,6 +557,8 @@ int menu_init(void)
     led_init();
     beep_init();
     lcd_init(LCD_WIDTH,LCD_HEIGHT,LCD_COLOR);
+    lcd_rotate(misc->rotate);
+    printf("_________________misc.rotate: %d\n", misc->rotate);
     
     return 0;
 }
@@ -580,19 +592,14 @@ int menu_handle(void)
         {
             if(kv.type==TYPE_SHORT) {
                 if(h->menu.menu_lv==0) {
-                    if(lcd_get_angle()==ANGLE_0) {
-                        //lcd_rotate(ANGLE_180);
+            #if 0
+                    if(lcd_get_rotate()==0) {
+                        lcd_rotate(180);
                     }
                     else {
-                        //lcd_rotate(ANGLE_0);
-                    }
-                }
-            }
-            else {
-                if(h->menu.menu_lv==0) {
-                    if(h->menu.menu_id==MENU_MODBUS) {
-                        h->menu.menu_lv = 1;
+                        lcd_rotate(0);
                     }
+            #endif
                 }
             }
             h->uflag = UFLAG_KEY;
@@ -632,16 +639,15 @@ int menu_handle(void)
 
         default:
         {
-#if 0
+#if 1
             if(h->fliptime>0) {
                 if(h->menu.menu_lv==0) {
                     if((get_ms()-h->ms)>=h->fliptime) {
                         if(h->menu.menu_id<MENU_MAX-1) {
-                            if() {
                             h->menu.menu_id++;
                         }
                         else {
-                            h->menu.menu_id = 0;
+                            h->menu.menu_id = MENU_SYSTEM;
                         }
                         h->uflag = UFLAG_FLIP;
                         h->ms = get_ms();
@@ -658,6 +664,10 @@ int menu_handle(void)
         return -1;
     }
     
+    if(h->ch_max==0) {
+        h->ch_max = get_ch_max();
+    }
+
     switch(h->menu.menu_id) {
         case MENU_SYSTEM:
         {
@@ -667,21 +677,18 @@ int menu_handle(void)
 
         case MENU_INPUT:
         {
-            h->menu.menu_id++;
             menu_input_paint(h, font1, font2, item_h);
         }
         break;
 
         case MENU_OUTPUT:
         {
-            h->menu.menu_id++;
             menu_output_paint(h, font1, font2, item_h);
         }
         break;
 
         case MENU_SENSOR:
         {
-            h->menu.menu_id++;
             menu_sensor_paint(h, font1, font2, item_h);
         }
         break;