|
|
@@ -71,6 +71,9 @@ typedef struct {
|
|
|
uint64_t ms;
|
|
|
uint16_t uflag;
|
|
|
int fliptime;
|
|
|
+
|
|
|
+ ModbusInfo_t mb;
|
|
|
+ GlobalDeviceManager *dm;
|
|
|
}menu_handle_t;
|
|
|
static int lang_id=LANG_ID_CHINESE;
|
|
|
//static int lang_id=LANG_ID_ENGLISH;
|
|
|
@@ -87,52 +90,59 @@ static uint64_t get_ms(void)
|
|
|
gettimeofday(&tv, NULL);
|
|
|
return (uint64_t)(tv.tv_sec)*1000 + (uint64_t)(tv.tv_usec)/1000;
|
|
|
}
|
|
|
-static int get_ch_out_max(void)
|
|
|
+static ModbusInfo_t*get_pmb(menu_handle_t *h)
|
|
|
+{
|
|
|
+ if(h->menu.menu_lv==0) {
|
|
|
+ return &h->dm->_globalDevInfo.cascade;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ return &h->mb;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+static int get_ch_out_max(menu_handle_t *h)
|
|
|
{
|
|
|
int ch=0;
|
|
|
GlobalPowerManger *tmp;
|
|
|
- GlobalDeviceManager *dm=get_dm();
|
|
|
|
|
|
if(!thread_is_running(THREAD_ID_POWER)) {
|
|
|
- printf("777\n");
|
|
|
return 0;
|
|
|
}
|
|
|
- if(list_empty(&dm->_globalPowerManger.list)) {
|
|
|
- printf("8888\n");
|
|
|
+ if(list_empty(&h->dm->_globalPowerManger.list)) {
|
|
|
return 0;
|
|
|
}
|
|
|
- list_for_each_entry(tmp, &dm->_globalPowerManger.list, list) {
|
|
|
+ list_for_each_entry(tmp, &h->dm->_globalPowerManger.list, list) {
|
|
|
ch++;
|
|
|
}
|
|
|
return ch;
|
|
|
}
|
|
|
-static int is_ph3_in(GlobalDeviceManager *dm)
|
|
|
+static int is_ph3_in(menu_handle_t *h)
|
|
|
{
|
|
|
- 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)) {
|
|
|
+ if ((h->dm->_globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_Tree ||
|
|
|
+ h->dm->_globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_One ||
|
|
|
+ h->dm->_globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_One_B)) {
|
|
|
return 1;
|
|
|
}
|
|
|
return 0;
|
|
|
}
|
|
|
-static int is_ph3_out(GlobalDeviceManager *dm)
|
|
|
+static int is_ph3_out(menu_handle_t *h)
|
|
|
{
|
|
|
- if (dm->_globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_Tree) {
|
|
|
+ if (h->dm->_globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_Tree) {
|
|
|
return 1;
|
|
|
}
|
|
|
return 0;
|
|
|
}
|
|
|
-static int get_input(GlobalDeviceManager *dm, int ph, PowerInfo *info)
|
|
|
+static int get_input(menu_handle_t *h, int ph, PowerInfo *info)
|
|
|
{
|
|
|
- int i=-1;
|
|
|
+ int i=0;
|
|
|
GlobalTreeACManager *tmp3=NULL;
|
|
|
|
|
|
- if (is_ph3_in(dm)) {
|
|
|
- if(list_empty(&dm->_globalPowerManger.list_Tree_AC)) {
|
|
|
+ if (is_ph3_in(h) && ph>0) {
|
|
|
+ if(list_empty(&h->dm->_globalPowerManger.list_Tree_AC)) {
|
|
|
return -1;
|
|
|
}
|
|
|
|
|
|
- list_for_each_entry(tmp3, &dm->_globalPowerManger.list_Tree_AC, list_Tree_AC) {
|
|
|
+ list_for_each_entry(tmp3, &h->dm->_globalPowerManger.list_Tree_AC, list_Tree_AC) {
|
|
|
i++;
|
|
|
if (i==ph)
|
|
|
break;
|
|
|
@@ -142,21 +152,21 @@ static int get_input(GlobalDeviceManager *dm, int ph, PowerInfo *info)
|
|
|
}
|
|
|
}
|
|
|
else {
|
|
|
- *info = dm->_globalPowerManger._PowerInfo;
|
|
|
+ *info = h->dm->_globalPowerManger._PowerInfo;
|
|
|
}
|
|
|
return 0;
|
|
|
}
|
|
|
-static int get_output(GlobalDeviceManager *dm, int ch, int ph, PowerInfo *info)
|
|
|
+static int get_output(menu_handle_t *h, int ch, int ph, PowerInfo *info)
|
|
|
{
|
|
|
- int i=-1,j=-1;
|
|
|
+ int i=-1,j=0;
|
|
|
GlobalPowerManger *tmp;
|
|
|
GlobalTreeACManager *tmp3 = NULL;
|
|
|
|
|
|
- list_for_each_entry(tmp, &dm->_globalPowerManger.list, list)
|
|
|
+ list_for_each_entry(tmp, &h->dm->_globalPowerManger.list, list)
|
|
|
{
|
|
|
i++;
|
|
|
if (i==ch) {
|
|
|
- if (is_ph3_out(dm)) {
|
|
|
+ if (is_ph3_out(h) && ph>0) {
|
|
|
list_for_each_entry(tmp3, &tmp->list_Tree_AC, list_Tree_AC)
|
|
|
{
|
|
|
j++;
|
|
|
@@ -196,10 +206,10 @@ static void tmr_stop(menu_handle_t *h)
|
|
|
h->tmr = -1;
|
|
|
}
|
|
|
|
|
|
-static void menu_system_paint(menu_handle_t *h, int font1, int font2, int item_h)
|
|
|
+static void menu_system_paint(menu_handle_t *h, int font1, int font2, int item_h, key_val_t *kv)
|
|
|
{
|
|
|
char time[60],tmp[100];
|
|
|
-
|
|
|
+
|
|
|
lcd_fill(0);
|
|
|
sprintf(tmp, "SmartPDU");
|
|
|
lcd_draw_string(0, 0, LCD_WIDTH, item_h, tmp, font1, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_CENTER, VERTICAL_CENTER);
|
|
|
@@ -214,28 +224,20 @@ static void menu_system_paint(menu_handle_t *h, int font1, int font2, int item_h
|
|
|
sprintf(tmp, "IP:%s", getLocalIpAddress("eth0"));
|
|
|
lcd_draw_string(0, item_h*3, LCD_WIDTH, item_h, tmp, font2, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);
|
|
|
lcd_refresh();
|
|
|
-
|
|
|
- if(h->menu.menu_lv==0 && h->uflag&UFLAG_FLIP) {
|
|
|
- h->menu.menu_id++;
|
|
|
- }
|
|
|
}
|
|
|
-static void menu_input_paint(menu_handle_t *h, int font1, int font2, int item_h)
|
|
|
+static void menu_input_paint(menu_handle_t *h, int font1, int font2, int item_h, key_val_t *kv)
|
|
|
{
|
|
|
int r;
|
|
|
char tmp[100];
|
|
|
-
|
|
|
PowerInfo *pwr,info={0};
|
|
|
- GlobalDeviceManager *dm=get_dm();
|
|
|
- int ph3_in=is_ph3_in(dm);
|
|
|
|
|
|
pwr = &info;
|
|
|
sprintf(tmp, "%s", lang_get_str(h->lang, STR_ID_INPUT));
|
|
|
|
|
|
- r = get_input(dm, h->ph_in, &info);
|
|
|
+ r = get_input(h, h->ph_in, &info);
|
|
|
if(r==0) {
|
|
|
- if(ph3_in) {
|
|
|
- h->ph_in++;
|
|
|
- sprintf(tmp, "%s L%d", lang_get_str(h->lang, STR_ID_INPUT), h->ph_in);
|
|
|
+ if(h->menu.menu_lv==1 && h->ph_in>0) {
|
|
|
+ sprintf(tmp, "%s-L%d", lang_get_str(h->lang, STR_ID_INPUT), h->ph_in);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -263,34 +265,20 @@ static void menu_input_paint(menu_handle_t *h, int font1, int font2, int item_h)
|
|
|
lcd_draw_string(0, item_h*3, LCD_WIDTH, item_h, tmp, font2, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);
|
|
|
|
|
|
lcd_refresh();
|
|
|
-
|
|
|
- if(ph3_in) {
|
|
|
- if(h->ph_in==3) {
|
|
|
- h->ph_in = 0;
|
|
|
- h->menu.menu_id++;
|
|
|
- }
|
|
|
- }
|
|
|
- else {
|
|
|
- h->menu.menu_id++;
|
|
|
- }
|
|
|
+
|
|
|
}
|
|
|
-static void menu_output_paint(menu_handle_t *h, int font1, int font2, int item_h)
|
|
|
+static void menu_output_paint(menu_handle_t *h, int font1, int font2, int item_h, key_val_t *kv)
|
|
|
{
|
|
|
int r;
|
|
|
char tmp[100];
|
|
|
PowerInfo *pwr,info={0};
|
|
|
- GlobalDeviceManager *dm=get_dm();
|
|
|
|
|
|
pwr = &info;
|
|
|
- h->ch_out_max = get_ch_out_max();
|
|
|
sprintf(tmp, "%s", lang_get_str(h->lang, STR_ID_OUTPUT));
|
|
|
|
|
|
- r = get_output(dm, h->ch_out, h->ph_out, &info);
|
|
|
- if(r==0) {
|
|
|
- h->ch_out++;
|
|
|
- if(h->ch_out_max>0) {
|
|
|
- sprintf(tmp, "%s CH%d", lang_get_str(h->lang, STR_ID_OUTPUT), h->ch_out+1);
|
|
|
- }
|
|
|
+ r = get_output(h, h->ch_out, h->ph_out, &info);
|
|
|
+ if(r==0 && h->ch_out_max>0) {
|
|
|
+ sprintf(tmp, "%s CH%d", lang_get_str(h->lang, STR_ID_OUTPUT), h->ch_out+1);
|
|
|
}
|
|
|
|
|
|
lcd_fill(0);
|
|
|
@@ -318,16 +306,11 @@ static void menu_output_paint(menu_handle_t *h, int font1, int font2, int item_h
|
|
|
lcd_draw_string(0, item_h*3, LCD_WIDTH, item_h, tmp, font2, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);
|
|
|
|
|
|
lcd_refresh();
|
|
|
-
|
|
|
- if(h->ch_out==h->ch_out_max) {
|
|
|
- h->ch_out = 0;
|
|
|
- h->menu.menu_id++;
|
|
|
- }
|
|
|
+
|
|
|
}
|
|
|
-static void menu_sensor_paint(menu_handle_t *h, int font1, int font2, int item_h)
|
|
|
+static void menu_sensor_paint(menu_handle_t *h, int font1, int font2, int item_h, key_val_t *kv)
|
|
|
{
|
|
|
char tmp[100];
|
|
|
- GlobalDeviceManager *dm=get_dm();
|
|
|
|
|
|
lcd_fill(0);
|
|
|
sprintf(tmp, "%s/%s", lang_get_str(h->lang, STR_ID_TEMP), lang_get_str(h->lang, STR_ID_HUMI));
|
|
|
@@ -344,131 +327,23 @@ static void menu_sensor_paint(menu_handle_t *h, int font1, int font2, int item_h
|
|
|
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), dm->g_modebus_read.temprature/100.0f);
|
|
|
+ sprintf(tmp, " %s: %0.1f", lang_get_str(h->lang, STR_ID_TEMP), h->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), dm->g_modebus_read.humidity/100.0f);
|
|
|
+ sprintf(tmp, " %s: %0.1f", lang_get_str(h->lang, STR_ID_HUMI), h->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
|
|
|
|
|
|
lcd_refresh();
|
|
|
-
|
|
|
- if(h->menu.menu_lv==0 && h->uflag&UFLAG_FLIP) {
|
|
|
- h->menu.menu_id++;
|
|
|
- }
|
|
|
-}
|
|
|
-static int menu_modbus_handle(menu_handle_t *h, ModbusInfo_t *pmb, key_val_t *kv)
|
|
|
-{
|
|
|
- int r=-1;
|
|
|
-
|
|
|
- switch(kv->key) {
|
|
|
- case KEY_UP:
|
|
|
- {
|
|
|
- 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 = MODBUS_ITEM_QUIT;
|
|
|
- }
|
|
|
- }
|
|
|
- else if(h->menu.menu_lv==2) {
|
|
|
- if(h->menu.page[h->menu.menu_id].item_id==MODBUS_ITEM_ADDR) { //addr
|
|
|
- if(pmb->addr<CASCADE_MAX) {
|
|
|
- pmb->addr++;
|
|
|
- }
|
|
|
- else {
|
|
|
- pmb->addr = 1;
|
|
|
- }
|
|
|
- }
|
|
|
- else if(h->menu.page[h->menu.menu_id].item_id==MODBUS_ITEM_MODE) { //mode
|
|
|
- pmb->mode = !pmb->mode;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- break;
|
|
|
-
|
|
|
- case KEY_DOWN:
|
|
|
- {
|
|
|
- if(h->menu.menu_lv==1) {
|
|
|
- if(h->menu.page[h->menu.menu_id].item_id<MODBUS_ITEM_QUIT) {
|
|
|
- h->menu.page[h->menu.menu_id].item_id++;
|
|
|
- }
|
|
|
- else {
|
|
|
- h->menu.page[h->menu.menu_id].item_id = 0;
|
|
|
- }
|
|
|
- }
|
|
|
- else if(h->menu.menu_lv==2) {
|
|
|
- if(h->menu.page[h->menu.menu_id].item_id==MODBUS_ITEM_ADDR) { //addr
|
|
|
- if(pmb->addr) {
|
|
|
- pmb->addr--;
|
|
|
- }
|
|
|
- else {
|
|
|
- pmb->addr = CASCADE_MAX;
|
|
|
- }
|
|
|
- }
|
|
|
- else if(h->menu.page[h->menu.menu_id].item_id==MODBUS_ITEM_MODE) { //mode
|
|
|
- pmb->mode = !pmb->mode;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- break;
|
|
|
-
|
|
|
- case KEY_OK:
|
|
|
- {
|
|
|
- if(h->menu.menu_lv==1) {
|
|
|
- if(h->menu.page[h->menu.menu_id].item_id==MODBUS_ITEM_SAVE || h->menu.page[h->menu.menu_id].item_id==MODBUS_ITEM_QUIT) { //save
|
|
|
- if(h->menu.page[h->menu.menu_id].item_id==MODBUS_ITEM_SAVE) {
|
|
|
- r = cascade_set_modbus(pmb);
|
|
|
- if(r==0) {
|
|
|
- r = paras_save();
|
|
|
- }
|
|
|
- }
|
|
|
- h->menu.page[h->menu.menu_id].item_id = 0;
|
|
|
- h->menu.menu_lv = 0;
|
|
|
- tmr_stop(h);
|
|
|
- }
|
|
|
- else {
|
|
|
- h->menu.menu_lv = 2;
|
|
|
- tmr_start(h, 500);
|
|
|
- }
|
|
|
- }
|
|
|
- else if(h->menu.menu_lv==2) {
|
|
|
- h->menu.menu_lv = 1;
|
|
|
- }
|
|
|
- else {
|
|
|
- if(kv->type==TYPE_LONG) {
|
|
|
- h->menu.menu_lv = 1;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- break;
|
|
|
- }
|
|
|
|
|
|
- return r;
|
|
|
}
|
|
|
static void menu_modbus_paint(menu_handle_t *h, int font1, int font2, int item_h, key_val_t *kv)
|
|
|
{
|
|
|
int r,font_color;
|
|
|
char tmp[100];
|
|
|
+ ModbusInfo_t *pmb=get_pmb(h);
|
|
|
static uint8_t flash_cnt=0;
|
|
|
|
|
|
- GlobalDeviceManager *dm=get_dm();
|
|
|
- static ModbusInfo_t *pmb,mb_cas;
|
|
|
- GlobalDeviceInfo *dev=&dm->_globalDevInfo;
|
|
|
-
|
|
|
- if(h->menu.menu_lv) {
|
|
|
- pmb = &mb_cas;
|
|
|
- }
|
|
|
- else {
|
|
|
- mb_cas = dev->cascade;
|
|
|
- pmb = &dev->cascade;
|
|
|
- }
|
|
|
- r = menu_modbus_handle(h, pmb, kv);
|
|
|
- if(r==0) {
|
|
|
- dev->cascade = mb_cas;
|
|
|
- }
|
|
|
-
|
|
|
if(kv->key==-1) {
|
|
|
flash_cnt++;
|
|
|
}
|
|
|
@@ -531,10 +406,6 @@ static void menu_modbus_paint(menu_handle_t *h, int font1, int font2, int item_h
|
|
|
lcd_draw_string(LCD_WIDTH/2, item_h*3, LCD_WIDTH/2, item_h, tmp, font2, font_color, COLOR_BLACK, HORIZONTAL_CENTER, VERTICAL_CENTER);
|
|
|
|
|
|
lcd_refresh();
|
|
|
-
|
|
|
- if(h->menu.menu_lv==0 && h->uflag&UFLAG_FLIP) {
|
|
|
- h->menu.menu_id = MENU_SYSTEM;
|
|
|
- }
|
|
|
}
|
|
|
/////////////////////////////////////////////////
|
|
|
|
|
|
@@ -549,8 +420,9 @@ int menu_init(void)
|
|
|
h->tmr = timer_init();
|
|
|
h->ms = get_ms();
|
|
|
h->uflag = 1;
|
|
|
+ h->dm = get_dm();
|
|
|
h->fliptime = misc->flip_time*1000;
|
|
|
-
|
|
|
+
|
|
|
h->ph_in = 0;
|
|
|
h->ph_out = 0;
|
|
|
h->ch_out = 0;
|
|
|
@@ -598,6 +470,240 @@ static void key_remap(key_val_t *kv, int rotate)
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+static int menu_modbus_key_handle(menu_handle_t *h, key_val_t *kv)
|
|
|
+{
|
|
|
+ int r=-1;
|
|
|
+
|
|
|
+ if(h->menu.menu_lv==0) {
|
|
|
+ h->mb = h->dm->_globalDevInfo.cascade;
|
|
|
+ }
|
|
|
+
|
|
|
+ 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 = MODBUS_ITEM_QUIT;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if(h->menu.menu_lv==2) {
|
|
|
+ ModbusInfo_t *pmb=&h->mb;
|
|
|
+ if(h->menu.page[h->menu.menu_id].item_id==MODBUS_ITEM_ADDR) { //addr
|
|
|
+ if(pmb->addr<CASCADE_MAX) {
|
|
|
+ pmb->addr++;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ pmb->addr = 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if(h->menu.page[h->menu.menu_id].item_id==MODBUS_ITEM_MODE) { //mode
|
|
|
+ pmb->mode = !pmb->mode;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break;
|
|
|
+
|
|
|
+ case KEY_DOWN:
|
|
|
+ {
|
|
|
+ if(h->menu.menu_lv==0) {
|
|
|
+ if(kv->type==TYPE_SHORT) {
|
|
|
+ h->menu.menu_id = MENU_SYSTEM;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if(h->menu.menu_lv==1) {
|
|
|
+ if(h->menu.page[h->menu.menu_id].item_id<MODBUS_ITEM_QUIT) {
|
|
|
+ h->menu.page[h->menu.menu_id].item_id++;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ h->menu.page[h->menu.menu_id].item_id = 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if(h->menu.menu_lv==2) {
|
|
|
+ ModbusInfo_t *pmb=&h->mb;
|
|
|
+ if(h->menu.page[h->menu.menu_id].item_id==MODBUS_ITEM_ADDR) { //addr
|
|
|
+ if(pmb->addr) {
|
|
|
+ pmb->addr--;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ pmb->addr = CASCADE_MAX;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if(h->menu.page[h->menu.menu_id].item_id==MODBUS_ITEM_MODE) { //mode
|
|
|
+ pmb->mode = !pmb->mode;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break;
|
|
|
+
|
|
|
+ case KEY_OK:
|
|
|
+ {
|
|
|
+ if(h->menu.menu_lv==1) {
|
|
|
+ if(h->menu.page[h->menu.menu_id].item_id==MODBUS_ITEM_SAVE || h->menu.page[h->menu.menu_id].item_id==MODBUS_ITEM_QUIT) { //save
|
|
|
+ if(h->menu.page[h->menu.menu_id].item_id==MODBUS_ITEM_SAVE) {
|
|
|
+ r = cascade_set_modbus(&h->mb);
|
|
|
+ if(r==0) {
|
|
|
+ h->dm->_globalDevInfo.cascade = h->mb;
|
|
|
+ r = paras_save();
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ h->menu.page[h->menu.menu_id].item_id = 0;
|
|
|
+ h->menu.menu_lv = 0;
|
|
|
+ tmr_stop(h);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ h->menu.menu_lv = 2;
|
|
|
+ tmr_start(h, 500);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if(h->menu.menu_lv==2 && kv->type==TYPE_SHORT) {
|
|
|
+ h->menu.menu_lv = 1;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ if(kv->type==TYPE_LONG) {
|
|
|
+ h->menu.menu_lv = 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break;
|
|
|
+
|
|
|
+ default:
|
|
|
+ {
|
|
|
+ if(h->menu.menu_lv==0 && h->uflag&UFLAG_FLIP) {
|
|
|
+ h->menu.menu_id = MENU_SYSTEM;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return r;
|
|
|
+}
|
|
|
+static int menu_key_handle(menu_handle_t *h, key_val_t *kv)
|
|
|
+{
|
|
|
+ int r=0;
|
|
|
+
|
|
|
+ h->ch_out_max = get_ch_out_max(h);
|
|
|
+ switch(h->menu.menu_id) {
|
|
|
+ case MENU_SYSTEM:
|
|
|
+ case MENU_SENSOR:
|
|
|
+ {
|
|
|
+ if(h->menu.menu_lv==0) {
|
|
|
+ if(h->uflag&UFLAG_FLIP || ((kv->key==KEY_UP || kv->key==KEY_DOWN) && kv->type==TYPE_SHORT)) {
|
|
|
+ if(kv->key==KEY_UP) {
|
|
|
+ h->menu.menu_id = h->menu.menu_id?(h->menu.menu_id-1):MENU_MAX-1;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ h->menu.menu_id = (h->menu.menu_id==MENU_MAX-1)?0:(h->menu.menu_id+1);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break;
|
|
|
+
|
|
|
+ case MENU_INPUT:
|
|
|
+ {
|
|
|
+ if(h->menu.menu_lv==0) {
|
|
|
+ if((kv->key==KEY_UP || kv->key==KEY_DOWN) && kv->type==TYPE_SHORT) {
|
|
|
+ if(kv->key==KEY_UP) {
|
|
|
+ h->menu.menu_id--;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ h->menu.menu_id++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if(kv->key==KEY_OK && kv->type==TYPE_SHORT) {
|
|
|
+ if(is_ph3_in(h)) {
|
|
|
+ h->ph_in = 1;
|
|
|
+ h->menu.menu_lv = 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if(h->uflag&UFLAG_FLIP) {
|
|
|
+ if(is_ph3_in(h)) {
|
|
|
+ h->ph_in = 1;
|
|
|
+ h->menu.menu_lv = 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if(h->menu.menu_lv==1) {
|
|
|
+ if((kv->key==KEY_UP || kv->key==KEY_DOWN) && kv->type==TYPE_SHORT) {
|
|
|
+ if(kv->key==KEY_UP) {
|
|
|
+ if(h->ph_in>1) {
|
|
|
+ h->ph_in--;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ h->ph_in = 3;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ if(h->ph_in<3) {
|
|
|
+ h->ph_in++;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ h->ph_in = 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if(h->uflag&UFLAG_FLIP) {
|
|
|
+ if(h->ph_in<3) {
|
|
|
+ h->ph_in++;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ h->ph_in = 0;
|
|
|
+ h->menu.menu_lv = 0;
|
|
|
+ h->menu.menu_id++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ h->ph_in = 0;
|
|
|
+ h->menu.menu_lv = 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break;
|
|
|
+
|
|
|
+ case MENU_OUTPUT:
|
|
|
+ {
|
|
|
+ if(h->uflag&UFLAG_FLIP || ((kv->key==KEY_UP || kv->key==KEY_DOWN) && kv->type==TYPE_SHORT)) {
|
|
|
+ if(kv->key==KEY_UP) {
|
|
|
+ if(h->ch_out>0) {
|
|
|
+ h->ch_out--;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ h->ch_out = 0;
|
|
|
+ h->menu.menu_id--;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ if(h->ch_out<h->ch_out_max-1) {
|
|
|
+ h->ch_out++;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ h->ch_out = 0;
|
|
|
+ h->menu.menu_id++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break;
|
|
|
+
|
|
|
+ case MENU_MODBUS:
|
|
|
+ {
|
|
|
+ r = menu_modbus_key_handle(h, kv);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ return r;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
int menu_handle(void)
|
|
|
{
|
|
|
int r;
|
|
|
@@ -623,37 +729,13 @@ int menu_handle(void)
|
|
|
#endif
|
|
|
}
|
|
|
}
|
|
|
- h->uflag |= UFLAG_KEY;
|
|
|
}
|
|
|
break;
|
|
|
|
|
|
case KEY_UP:
|
|
|
- {
|
|
|
- led_reset(); beep_reset();
|
|
|
- if(h->menu.menu_lv==0 && kv.type==TYPE_SHORT) {
|
|
|
- if(h->menu.menu_id>0) {
|
|
|
- h->menu.menu_id--;
|
|
|
- }
|
|
|
- else {
|
|
|
- h->menu.menu_id = MENU_MAX-1;
|
|
|
- }
|
|
|
- }
|
|
|
- h->uflag |= UFLAG_KEY;
|
|
|
- }
|
|
|
- break;
|
|
|
-
|
|
|
case KEY_DOWN:
|
|
|
{
|
|
|
led_reset(); beep_reset();
|
|
|
- if(h->menu.menu_lv==0 && kv.type==TYPE_SHORT) {
|
|
|
- if(h->menu.menu_id<MENU_MAX-1) {
|
|
|
- h->menu.menu_id++;
|
|
|
- }
|
|
|
- else {
|
|
|
- h->menu.menu_id = 0;
|
|
|
- }
|
|
|
- }
|
|
|
- h->uflag |= UFLAG_KEY;
|
|
|
}
|
|
|
break;
|
|
|
|
|
|
@@ -661,45 +743,41 @@ int menu_handle(void)
|
|
|
{
|
|
|
#if 1
|
|
|
if(h->fliptime>0) {
|
|
|
- if(h->menu.menu_lv==0) {
|
|
|
- if((get_ms()-h->ms)>=h->fliptime) {
|
|
|
- h->uflag = UFLAG_FLIP;
|
|
|
- h->ms = get_ms();
|
|
|
- }
|
|
|
- }
|
|
|
- else {
|
|
|
+ if((get_ms()-h->ms)>=h->fliptime) {
|
|
|
+ h->uflag |= UFLAG_FLIP;
|
|
|
h->ms = get_ms();
|
|
|
}
|
|
|
}
|
|
|
#endif
|
|
|
}
|
|
|
}
|
|
|
- if(h->uflag==0) {
|
|
|
+ if(h->uflag==0 && kv.key<0) {
|
|
|
return -1;
|
|
|
}
|
|
|
|
|
|
+ menu_key_handle(h, &kv);
|
|
|
switch(h->menu.menu_id) {
|
|
|
case MENU_SYSTEM:
|
|
|
{
|
|
|
- menu_system_paint(h, font1, font2, item_h);
|
|
|
+ menu_system_paint(h, font1, font2, item_h, &kv);
|
|
|
}
|
|
|
break;
|
|
|
|
|
|
case MENU_INPUT:
|
|
|
{
|
|
|
- menu_input_paint(h, font1, font2, item_h);
|
|
|
+ menu_input_paint(h, font1, font2, item_h, &kv);
|
|
|
}
|
|
|
break;
|
|
|
|
|
|
case MENU_OUTPUT:
|
|
|
{
|
|
|
- menu_output_paint(h, font1, font2, item_h);
|
|
|
+ menu_output_paint(h, font1, font2, item_h, &kv);
|
|
|
}
|
|
|
break;
|
|
|
|
|
|
case MENU_SENSOR:
|
|
|
{
|
|
|
- menu_sensor_paint(h, font1, font2, item_h);
|
|
|
+ menu_sensor_paint(h, font1, font2, item_h, &kv);
|
|
|
}
|
|
|
break;
|
|
|
|
|
|
@@ -710,6 +788,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);
|
|
|
|
|
|
return 0;
|
|
|
}
|