From d379858dd205ffec51be73b4c4b7d40af362467b Mon Sep 17 00:00:00 2001 From: Sebastien Date: Thu, 8 Oct 2020 21:09:36 -0400 Subject: [PATCH] Display config UI fixes - release Add 2 entries as a replacement for the ST77xx driver name, remove SSD1306 default. --- components/display/display.c | 3 ++- components/platform_console/cmd_config.c | 10 +++++----- components/platform_console/cmd_i2ctools.c | 9 +++------ components/services/accessors.c | 1 - components/wifi-manager/res/code.js | 2 +- components/wifi-manager/res/code.js.gz | Bin 11180 -> 11182 bytes components/wifi-manager/status-messages.json | 2 +- 7 files changed, 12 insertions(+), 15 deletions(-) diff --git a/components/display/display.c b/components/display/display.c index bae3d6cc..37214028 100644 --- a/components/display/display.c +++ b/components/display/display.c @@ -52,7 +52,8 @@ static const char *known_drivers[] = {"SH1106", "SSD1327", "SSD1675", "SSD1351", - "ST77xx", + "ST7735", + "ST7789", "ILI9341", NULL }; diff --git a/components/platform_console/cmd_config.c b/components/platform_console/cmd_config.c index 586d1e16..4b094eba 100644 --- a/components/platform_console/cmd_config.c +++ b/components/platform_console/cmd_config.c @@ -154,7 +154,7 @@ static int do_spdif_cmd(int argc, char **argv){ esp_err_t err=ESP_OK; int nerrors = arg_parse(argc, argv,(void **)&spdif_args); if (spdif_args.clear->count) { - cmd_send_messaging(argv[0],MESSAGING_WARNING,"SPDIF config cleared"); + cmd_send_messaging(argv[0],MESSAGING_WARNING,"SPDIF config cleared\n"); config_set_value(NVS_TYPE_STR, "spdif_config", ""); return 0; } @@ -163,7 +163,7 @@ static int do_spdif_cmd(int argc, char **argv){ size_t buf_size = 0; FILE *f = open_memstream(&buf, &buf_size); if (f == NULL) { - cmd_send_messaging(argv[0],MESSAGING_ERROR,"Unable to open memory stream."); + cmd_send_messaging(argv[0],MESSAGING_ERROR,"Unable to open memory stream.\n"); return 1; } if(nerrors >0){ @@ -205,7 +205,7 @@ static int do_i2s_cmd(int argc, char **argv) esp_err_t err=ESP_OK; int nerrors = arg_parse(argc, argv,(void **)&i2s_args); if (i2s_args.clear->count) { - cmd_send_messaging(argv[0],MESSAGING_WARNING,"DAC config cleared"); + cmd_send_messaging(argv[0],MESSAGING_WARNING,"DAC config cleared\n"); config_set_value(NVS_TYPE_STR, "dac_config", ""); return 0; } @@ -214,7 +214,7 @@ static int do_i2s_cmd(int argc, char **argv) size_t buf_size = 0; FILE *f = open_memstream(&buf, &buf_size); if (f == NULL) { - cmd_send_messaging(argv[0],MESSAGING_ERROR,"Unable to open memory stream."); + cmd_send_messaging(argv[0],MESSAGING_ERROR,"Unable to open memory stream.\n"); return 1; } if(nerrors >0){ @@ -360,7 +360,7 @@ static int do_squeezelite_cmd(int argc, char **argv) size_t buf_size = 0; FILE *f = open_memstream(&buf, &buf_size); if (f == NULL) { - cmd_send_messaging(argv[0],MESSAGING_ERROR,"Unable to open memory stream."); + cmd_send_messaging(argv[0],MESSAGING_ERROR,"Unable to open memory stream.\n"); return 1; } fprintf(f,"Not yet implemented!"); diff --git a/components/platform_console/cmd_i2ctools.c b/components/platform_console/cmd_i2ctools.c index f1565955..7daef03b 100644 --- a/components/platform_console/cmd_i2ctools.c +++ b/components/platform_console/cmd_i2ctools.c @@ -365,7 +365,7 @@ static int do_i2c_set_display(int argc, char **argv) config.speed = 8000000; } /* Check "--cs" option */ - nerrors +=is_output_gpio(i2cdisp_args.cs,f,&config.CS_pin, true); + nerrors +=is_output_gpio(i2cdisp_args.cs,f,&config.CS_pin, false); } nerrors +=is_output_gpio(i2cdisp_args.reset,f,&config.RST_pin, false); @@ -382,15 +382,12 @@ static int do_i2c_set_display(int argc, char **argv) if (i2cdisp_args.driver->count) { config.drivername=display_conf_get_driver_name(i2cdisp_args.driver->sval[0]) ; } - else { - config.drivername = display_conf_get_driver_name("SSD1306"); - } if(i2cdisp_args.depth->count > 0 && strcasecmp(config.drivername,"SSD1326")==0) { config.depth = i2cdisp_args.depth->ival[0]; } /* Check "--back" option */ nerrors +=is_output_gpio(i2cdisp_args.back,f,&config.back, false); - if(!display_is_valid_driver(config.drivername)){ + if(!config.drivername || !display_is_valid_driver(config.drivername)){ fprintf(f,"Unsupported display driver %s\n",config.drivername); nerrors++; } @@ -905,7 +902,7 @@ static void register_i2c_set_display(){ i2cdisp_args.reset = arg_int0(NULL, "reset", "", "Reset GPIO"); i2cdisp_args.hflip = arg_lit0(NULL, "hf", "Flip horizontally"); i2cdisp_args.vflip = arg_lit0(NULL, "vf", "Flip vertically"); - i2cdisp_args.driver = arg_str0("d", "driver", supported_drivers?supported_drivers:"", "Driver (default SSD1306)"); + i2cdisp_args.driver = arg_str0("d", "driver", supported_drivers?supported_drivers:"", "Driver"); i2cdisp_args.cs = arg_int0("b", "cs", "","SPI Only. CS GPIO (for SPI displays)"); i2cdisp_args.speed = arg_int0("s", "speed", "","SPI Only. Bus Speed (Default 8000000). SPI interface can work up to 26MHz~40MHz"); i2cdisp_args.back = arg_int0("b", "back", "","Backlight GPIO (if applicable)"); diff --git a/components/services/accessors.c b/components/services/accessors.c index 81093050..cf7ed9bf 100644 --- a/components/services/accessors.c +++ b/components/services/accessors.c @@ -343,7 +343,6 @@ const display_config_t * config_display_get(){ dstruct.drivername = display_conf_get_driver_name(strchr(p, '=') + 1); } - dstruct.drivername=dstruct.drivername?dstruct.drivername:"SSD1306"; if ((p = strcasestr(config, "width")) != NULL) dstruct.width = atoi(strchr(p, '=') + 1); if ((p = strcasestr(config, "height")) != NULL) dstruct.height = atoi(strchr(p, '=') + 1); if ((p = strcasestr(config, "reset")) != NULL) dstruct.RST_pin = atoi(strchr(p, '=') + 1); diff --git a/components/wifi-manager/res/code.js b/components/wifi-manager/res/code.js index ae781172..43c43d46 100644 --- a/components/wifi-manager/res/code.js +++ b/components/wifi-manager/res/code.js @@ -284,7 +284,7 @@ function delay_reboot(duration,cmdname, ota=false){ showCmdMessage(cmdname,'MESSAGING_WARNING','Rebooting the ESP32.\n',true); } else { - showLocalMessage('MESSAGING_WARNING','Rebooting the ESP32.\n') + showLocalMessage('Rebooting the ESP32.\n','MESSAGING_WARNING') } console.log('now triggering reboot'); $.ajax({ diff --git a/components/wifi-manager/res/code.js.gz b/components/wifi-manager/res/code.js.gz index 04afcc8e67fb7bf1a92498b556e955b87b15b4cb..950649595199feffff73ee1a038c443925c4a247 100644 GIT binary patch delta 8577 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 H?56+#wwuN} delta 8575 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 z zN%U6T$Y4gfrW`q_>?erIzGta$S6M!Iww!+(Jum2K51^VIqQyQ- zF+WROFWt43oyYltl-Gm%TYSd%dZ~?Bg7x*_xotCxi3jWhz@{zYnPyGD+hnzEeu|mR zNXXXKEf+00LIV)tHkn0fQlcX??@1zOj1}&L$xl8vs!jGDHiS_sW9xF}$UM6-)R7*v zh|~8b!pjTt5+mzDSlNHYDs(h2^Od?7aGT7lYQ8jUw#c>1^)pj68Tg2H zF$`w1kV_1Z1zeg7TD3v1ram&4UX&-gVjW;FddPetBe0+D+$4;8m{0%iMWM`QWeOtQ zDt2F!?W6%~$!T^ORaO(UFRxyYO(%7L+etSci$<=o#$7ELku52Y9%)K1%CdjL%@~Bf zK?s9D)&!F?k2Tl?Y%wwUI^7T!|Ma+ffy!PDjUXpI86;xjKbZZ zgwr3j52M1b!a_TGYF~tJcxM=%hJV?pU1F%jBo#hA9}x{C30yFNk%gG!3QU~zHE2n4s5493 z3_{Kg522i-3p0}>A4|*Hkk}1tWZ!>uR`K#{%_6_xa;Qh%KPF*CX`Mr+=SikSCG3}$ z>1F^+(`hh%x&3g~ypewqQ?tzCg4N4m02GFD2#X{P$OU7S-eE{lKoERYp>dh5)A@wY z(YktdcXk?VvQ2Up(jJKlzkPh$-4l z|NFn7?GOh7mRmcmZ%mmIv@<25qUCO#q?YrT*na8_xda%q+h)iELpwX zuGss6ZfL^?(+z)U!9R)id^_tQe@*mMlInb<4@EWyp0%?e%p`qEHK0|d^llUR*mi*r znhY0 zIBqol#m6+w=R(Z>lkZ&U9t&%y!Xv{MP22T_ZIj#t4{TFVlI=r zfm1LITUB6Sz>^$zJWqT0Mp@kF;4N6kbNueM>_wZ(<$a%Tvrxlvbhul3H#|xa^^a(x zywlS1g7NCAd~VqS*~fE@XP|Sf7i?f-m?m1;L$*kF1;OD3Wo7UzAb#mJfeyCKcDJsiJ9UB_H!h74}(4K1zkFVOZ&hikgO}GOKv0YIOFIO5Nw_9V`F9T9G z8f5Q_i_R>(oc$bLK7+rXW!058UZR zFvUJMz?W()PMYg2Xr81n(}}IqHMEC8K1EGYfWcS1N7WXQB$a59L#OI5L-bS>RaG&) z9FgZ)<=V+dWUC>$Hg=dh3&jjJ$^8K8jjVqQg$S`CFm!5MQop2J9*=s-D%?=_`SV~} zdADlI6J+$J^=i3Iv&gaqX2M{2*{}qnIVP8esp<Hn;7JeCG1JX zL|bP=0i>n`SvO05E24>9ZcPrM5qBU{+H~ShS$f&7Pe^Sr`k{|L@$eC=