Add service and theme commands for testing purposes

This commit is contained in:
fvanroie 2021-07-11 13:48:04 +02:00
parent f671a8beb0
commit d99e848e19
3 changed files with 176 additions and 93 deletions

View File

@ -26,6 +26,7 @@
#include "lv_fs_if.h"
#include "hasp_gui.h"
#include "hasp_config.h"
#include "font/hasp_font_loader.h"
//#include "hasp_filesystem.h" included in hasp_conf.h
#endif
@ -84,15 +85,15 @@ lv_style_t style_mbox_bg; /*Black bg. style with opacity*/
lv_obj_t* kb;
// lv_font_t * defaultFont;
static lv_font_t* haspFonts[4] = {nullptr, nullptr, nullptr, nullptr};
uint8_t current_page = 1;
static lv_font_t* haspFonts[12] = {nullptr};
uint8_t current_page = 1;
/**
* Get Font ID
*/
lv_font_t* hasp_get_font(uint8_t fontid)
{
if(fontid >= 4) {
if(fontid >= sizeof(haspFonts) / sizeof(haspFonts[0])) {
return nullptr;
} else {
return haspFonts[fontid];
@ -300,6 +301,84 @@ static void custom_font_apply_cb(lv_theme_t* th, lv_obj_t* obj, lv_theme_style_t
} */
}
void hasp_set_theme(uint8_t themeid)
{
lv_theme_t* th = NULL;
lv_color_t color_primary = lv_color_hsv_to_rgb(haspThemeHue, 100, 100);
lv_color_t color_secondary = lv_color_hsv_to_rgb(haspThemeHue, 100, 100);
/* ********** Theme Initializations ********** */
if(themeid == 8) themeid = 1; // update old HASP id
if(themeid == 9) themeid = 5; // update old material id
if(themeid < 0 || themeid > 5) return; // check bounds
#if(LV_USE_THEME_HASP == 1)
uint32_t hasp_flags = LV_THEME_HASP_FLAG_LIGHT;
#endif
#if(LV_USE_THEME_MATERIAL == 1)
// LV_THEME_MATERIAL_FLAG_NO_TRANSITION : disable transitions(state change animations)
// LV_THEME_MATERIAL_FLAG_NO_FOCUS: disable indication of focused state)
uint32_t material_flags = LV_THEME_MATERIAL_FLAG_LIGHT + LV_THEME_MATERIAL_FLAG_NO_TRANSITION;
#endif
switch(themeid) {
#if(LV_USE_THEME_EMPTY == 1)
case 0:
th = lv_theme_empty_init(lv_color_hsv_to_rgb(haspThemeHue, 100, 100),
lv_color_hsv_to_rgb(haspThemeHue, 100, 100), LV_THEME_DEFAULT_FLAGS, haspFonts[0],
haspFonts[1], haspFonts[2], haspFonts[3]);
break;
#endif
#if(LV_USE_THEME_HASP == 1)
case 2: // Dark
hasp_flags = LV_THEME_HASP_FLAG_DARK;
case 1: // Light
case 8: // Light (old id)
th = lv_theme_hasp_init(color_primary, color_secondary, hasp_flags + LV_THEME_HASP_FLAG_NO_FOCUS,
haspFonts[0], haspFonts[1], haspFonts[2], haspFonts[3]);
break;
#endif
#if(LV_USE_THEME_MONO == 1)
case 3:
th = lv_theme_mono_init(color_primary, color_secondary, LV_THEME_DEFAULT_FLAGS, haspFonts[0], haspFonts[1],
haspFonts[2], haspFonts[3]);
break;
#endif
#if LV_USE_THEME_MATERIAL == 1
case 5: // Dark
material_flags = LV_THEME_MATERIAL_FLAG_DARK + LV_THEME_MATERIAL_FLAG_NO_TRANSITION;
case 4: // Light
case 9: // Light (old id)
th =
lv_theme_material_init(color_primary, color_secondary, material_flags + LV_THEME_MATERIAL_FLAG_NO_FOCUS,
haspFonts[0], haspFonts[1], haspFonts[2], haspFonts[3]);
break;
#endif
#if LV_USE_THEME_TEMPLATE == 1
case 7:
th = lv_theme_template_init(LV_COLOR_PURPLE, LV_COLOR_ORANGE, LV_THEME_DEFAULT_FLAGS, haspFonts[0],
haspFonts[1], haspFonts[2], haspFonts[3]);
break;
#endif
default:
LOG_ERROR(TAG_HASP, F("Unknown theme selected"));
}
if(th) {
lv_theme_set_act(th);
LOG_INFO(TAG_HASP, F("Custom theme loaded"));
} else {
LOG_ERROR(TAG_HASP, F("Theme could not be loaded"));
}
}
/**
* Create a demo application
*/
@ -362,99 +441,17 @@ void haspSetup(void)
#endif
#endif
if(haspFonts[0] == nullptr) haspFonts[0] = LV_THEME_DEFAULT_FONT_SMALL;
if(haspFonts[1] == nullptr) haspFonts[1] = LV_THEME_DEFAULT_FONT_NORMAL;
if(haspFonts[2] == nullptr) haspFonts[2] = LV_THEME_DEFAULT_FONT_SUBTITLE;
if(haspFonts[3] == nullptr) haspFonts[3] = LV_THEME_DEFAULT_FONT_TITLE;
if(haspFonts[0] == nullptr) haspFonts[0] = &HASP_FONT_1; // LV_THEME_DEFAULT_FONT_SMALL;
if(haspFonts[1] == nullptr) haspFonts[1] = &HASP_FONT_2; // LV_THEME_DEFAULT_FONT_NORMAL;
if(haspFonts[2] == nullptr) haspFonts[2] = &HASP_FONT_3; // LV_THEME_DEFAULT_FONT_SUBTITLE;
if(haspFonts[3] == nullptr) haspFonts[3] = &HASP_FONT_4; // LV_THEME_DEFAULT_FONT_TITLE;
// haspFonts[0] = lv_font_load("E:/font_1.fnt");
// haspFonts[2] = lv_font_load("E:/font_2.fnt");
// haspFonts[3] = lv_font_load("E:/font_3.fnt");
/* ********** Theme Initializations ********** */
if(haspThemeId == 8) haspThemeId = 1; // update old HASP id
if(haspThemeId == 9) haspThemeId = 5; // update old material id
if(haspThemeId < 0 || haspThemeId > 5) haspThemeId = 1; // check bounds
// haspFonts[3] = hasp_font_load("L:/robotocondensed_60_latin1.bin");
lv_theme_t* th = NULL;
#if(LV_USE_THEME_HASP == 1)
lv_theme_hasp_flag_t hasp_flags = LV_THEME_HASP_FLAG_LIGHT;
#endif
#if(LV_USE_THEME_MATERIAL == 1)
lv_theme_material_flag_t material_flags = LV_THEME_MATERIAL_FLAG_LIGHT;
#endif
switch(haspThemeId) {
#if(LV_USE_THEME_EMPTY == 1)
case 0:
th = lv_theme_empty_init(lv_color_hsv_to_rgb(haspThemeHue, 100, 100),
lv_color_hsv_to_rgb(haspThemeHue, 100, 100), LV_THEME_DEFAULT_FLAGS, haspFonts[0],
haspFonts[1], haspFonts[2], haspFonts[3]);
break;
#endif
#if(LV_USE_THEME_HASP == 1)
case 2: // Dark
hasp_flags = LV_THEME_HASP_FLAG_DARK;
case 1: // Light
case 8: // Light (old id)
th = lv_theme_hasp_init(
lv_color_hsv_to_rgb(haspThemeHue, 100, 100), lv_color_hsv_to_rgb(haspThemeHue, 100, 100),
hasp_flags + LV_THEME_HASP_FLAG_NO_FOCUS, haspFonts[0], haspFonts[1], haspFonts[2], haspFonts[3]);
break;
#endif
#if LV_USE_THEME_ALIEN == 1
case 1:
th = lv_theme_alien_init(haspThemeHue, defaultFont);
break;
#endif
#if LV_USE_THEME_NIGHT == 1
case 2:
th = lv_theme_night_init(haspThemeHue, defaultFont); // heavy
break;
#endif
#if(LV_USE_THEME_MONO == 1)
case 3:
th = lv_theme_mono_init(LV_COLOR_PURPLE, LV_COLOR_BLACK, LV_THEME_DEFAULT_FLAGS, haspFonts[0], haspFonts[1],
haspFonts[2], haspFonts[3]);
break;
#endif
// LV_THEME_MATERIAL_FLAG_NO_TRANSITION : disable transitions(state change animations)
// LV_THEME_MATERIAL_FLAG_NO_FOCUS: disable indication of focused state)
#if LV_USE_THEME_MATERIAL == 1
case 5: // Dark
material_flags = LV_THEME_MATERIAL_FLAG_DARK;
case 4: // Light
case 9: // Light (old id)
th = lv_theme_material_init(
lv_color_hsv_to_rgb(haspThemeHue, 100, 100), lv_color_hsv_to_rgb(haspThemeHue, 100, 100),
material_flags + LV_THEME_MATERIAL_FLAG_NO_FOCUS + LV_THEME_MATERIAL_FLAG_NO_TRANSITION, haspFonts[0],
haspFonts[1], haspFonts[2], haspFonts[3]);
break;
#endif
#if LV_USE_THEME_TEMPLATE == 1
case 7:
th = lv_theme_template_init(LV_COLOR_PURPLE, LV_COLOR_ORANGE, LV_THEME_DEFAULT_FLAGS, haspFonts[0],
haspFonts[1], haspFonts[2], haspFonts[3]);
break;
#endif
default:
LOG_ERROR(TAG_HASP, F("Unknown theme selected"));
}
if(th) {
lv_theme_set_act(th);
LOG_INFO(TAG_HASP, F("Custom theme loaded"));
} else {
LOG_ERROR(TAG_HASP, F("Theme could not be loaded"));
}
hasp_set_theme(haspThemeId);
/* Create all screens using the theme */
@ -467,6 +464,11 @@ void haspSetup(void)
hasp_init();
hasp_load_json();
haspPages.set(haspStartPage, LV_SCR_LOAD_ANIM_FADE_ON);
// lv_obj_t* obj = lv_datetime_create(haspPages.get_obj(haspPages.get()), NULL);
// obj->user_data.objid = LV_HASP_DATETIME;
// obj->user_data.id = 199;
// lv_datetime_set_text_fmt(obj,"%A, %B %d");
}
/**********************

View File

@ -75,6 +75,7 @@ void hasp_init(void);
void hasp_load_json(void);
void hasp_get_info(JsonDocument& info);
void hasp_set_theme(uint8_t themeid);
/**********************
* MACROS

View File

@ -40,7 +40,7 @@ dispatch_conf_t dispatch_setings = {.teleperiod = 300};
uint16_t dispatchSecondsToNextTeleperiod = 0;
uint8_t nCommands = 0;
haspCommand_t commands[22];
haspCommand_t commands[24];
moodlight_t moodlight = {.brightness = 255};
@ -468,7 +468,7 @@ void dispatch_config(const char* topic, const char* payload)
mdnsGetConfig(settings);
}
#endif
#if HASP_USE_HTTP > 0
#if HASP_USE_HTTP > 0 || HASP_USE_HTTP_ASYNC > 0
else if(strcasecmp_P(topic, PSTR("http")) == 0) {
if(update)
httpSetConfig(settings);
@ -866,6 +866,64 @@ void dispatch_reboot(bool saveConfig)
/******************************************* Command Wrapper Functions *********************************/
// Periodically publish a JSON string indicating system status
void dispatch_send_sensordata(const char*, const char*)
{
#if HASP_USE_MQTT > 0
StaticJsonDocument<1024> doc;
time_t rawtime;
time(&rawtime);
char buffer[80];
struct tm* timeinfo = localtime(&rawtime);
strftime(buffer, sizeof(buffer), "%FT%T", timeinfo);
doc[F("time")] = buffer;
long uptime = haspDevice.get_uptime();
doc[F("uptimeSec")] = (uint32_t)uptime;
uint32_t seconds = uptime % 60;
uint32_t minutes = uptime / 60;
uint32_t hours = minutes / 60;
uint32_t days = hours / 24;
minutes = minutes % 60;
hours = hours % 24;
snprintf_P(buffer, sizeof(buffer), PSTR("%dT%02d:%02d:%02d"), days, hours, minutes, seconds);
doc[F("uptime")] = buffer;
haspDevice.get_sensors(doc);
// JsonObject input = doc.createNestedObject(F("input"));
// JsonArray relay = doc.createNestedArray(F("power"));
// JsonArray led = doc.createNestedArray(F("light"));
// JsonArray dimmer = doc.createNestedArray(F("dim"));
// #if HASP_USE_GPIO > 0
// gpio_discovery(input, relay, led, dimmer);
// #endif
char data[1024];
size_t len = serializeJson(doc, data);
switch(mqtt_send_discovery(data, len)) {
case MQTT_ERR_OK:
LOG_TRACE(TAG_MQTT_PUB, F(MQTT_TOPIC_DISCOVERY " => %s"), data);
break;
case MQTT_ERR_PUB_FAIL:
LOG_ERROR(TAG_MQTT_PUB, F(D_MQTT_FAILED " " MQTT_TOPIC_DISCOVERY " => %s"), data);
break;
case MQTT_ERR_NO_CONN:
LOG_ERROR(TAG_MQTT, F(D_MQTT_NOT_CONNECTED));
break;
default:
LOG_ERROR(TAG_MQTT, F(D_ERROR_UNKNOWN));
}
#endif
}
// Periodically publish a JSON string indicating system status
void dispatch_send_discovery(const char*, const char*)
{
@ -1038,6 +1096,25 @@ void dispatch_factory_reset(const char*, const char*)
dispatch_reboot(false); // don't save running config
}
void dispatch_theme(const char*, const char* themeid)
{
hasp_set_theme(atoi(themeid));
}
void dispatch_service(const char*, const char* payload)
{
if(!strcmp_P(payload, "start telnet")) {
telnetStart();
} else if(!strcmp_P(payload, "stop telnet")) {
telnetStop();
} else if(!strcmp_P(payload, "start http")) {
httpStart();
} else if(!strcmp_P(payload, "stop http")) {
httpStop();
} else {
}
}
/******************************************* Commands builder *******************************************/
static void dispatch_add_command(const char* p_cmdstr, void (*func)(const char*, const char*))
@ -1073,6 +1150,8 @@ void dispatchSetup()
dispatch_add_command(PSTR("dim"), dispatch_backlight_obsolete); // dim
dispatch_add_command(PSTR("brightness"), dispatch_backlight_obsolete); // dim
dispatch_add_command(PSTR("light"), dispatch_backlight_obsolete);
dispatch_add_command(PSTR("theme"), dispatch_theme);
dispatch_add_command(PSTR("service"), dispatch_service);
dispatch_add_command(PSTR("wakeup"), dispatch_wakeup_obsolete);
dispatch_add_command(PSTR("calibrate"), dispatch_calibrate);
dispatch_add_command(PSTR("update"), dispatch_web_update);
@ -1106,6 +1185,7 @@ void dispatchEverySecond()
} else if(dispatch_setings.teleperiod > 0 && mqttIsConnected()) {
dispatch_statusupdate(NULL, NULL);
dispatch_send_discovery(NULL, NULL);
dispatch_send_sensordata(NULL, NULL);
dispatchSecondsToNextTeleperiod = dispatch_setings.teleperiod;
}
}