Refactor Display commands

Refactor Display commands
This commit is contained in:
Theo Arends 2019-08-02 17:22:38 +02:00
parent d1b726ee10
commit 4d9b53bc1a
1 changed files with 203 additions and 184 deletions

View File

@ -53,13 +53,15 @@ enum XdspFunctions { FUNC_DISPLAY_INIT_DRIVER, FUNC_DISPLAY_INIT, FUNC_DISPLAY_E
enum DisplayInitModes { DISPLAY_INIT_MODE, DISPLAY_INIT_PARTIAL, DISPLAY_INIT_FULL };
enum DisplayCommands {
CMND_DISPLAY, CMND_DISP_MODEL, CMND_DISP_WIDTH, CMND_DISP_HEIGHT, CMND_DISP_MODE, CMND_DISP_REFRESH, CMND_DISP_DIMMER,
CMND_DISP_COLS, CMND_DISP_ROWS, CMND_DISP_SIZE, CMND_DISP_FONT, CMND_DISP_ROTATE, CMND_DISP_TEXT, CMND_DISP_ADDRESS };
const char kDisplayCommands[] PROGMEM =
"|" D_CMND_DISP_MODEL "|" D_CMND_DISP_WIDTH "|" D_CMND_DISP_HEIGHT "|" D_CMND_DISP_MODE "|" D_CMND_DISP_REFRESH "|" D_CMND_DISP_DIMMER "|"
D_CMND_DISP_COLS "|" D_CMND_DISP_ROWS "|" D_CMND_DISP_SIZE "|" D_CMND_DISP_FONT "|" D_CMND_DISP_ROTATE "|" D_CMND_DISP_TEXT "|" D_CMND_DISP_ADDRESS ;
"|" D_CMND_DISP_MODEL "|" D_CMND_DISP_WIDTH "|" D_CMND_DISP_HEIGHT "|" D_CMND_DISP_MODE "|" D_CMND_DISP_REFRESH "|"
D_CMND_DISP_DIMMER "|" D_CMND_DISP_COLS "|" D_CMND_DISP_ROWS "|" D_CMND_DISP_SIZE "|" D_CMND_DISP_FONT "|"
D_CMND_DISP_ROTATE "|" D_CMND_DISP_TEXT "|" D_CMND_DISP_ADDRESS ;
void (* const DisplayCommand[])(void) PROGMEM = {
&CmndDisplay, &CmndDisplayModel, &CmndDisplayWidth, &CmndDisplayHeight, &CmndDisplayMode, &CmndDisplayRefresh,
&CmndDisplayDimmer, &CmndDisplayColumns, &CmndDisplayRows, &CmndDisplaySize, &CmndDisplayFont,
&CmndDisplayRotate, &CmndDisplayText, &CmndDisplayAddress };
const char S_JSON_DISPLAY_COMMAND_VALUE[] PROGMEM = "{\"" D_CMND_DISPLAY "%s\":\"%s\"}";
const char S_JSON_DISPLAY_COMMAND_NVALUE[] PROGMEM = "{\"" D_CMND_DISPLAY "%s\":%d}";
@ -103,7 +105,7 @@ bool disp_subscribed = false;
/*********************************************************************************************/
void DisplayInit(uint8_t mode)
void DisplayInit(uint32_t mode)
{
dsp_init = mode;
XdspCall(FUNC_DISPLAY_INIT);
@ -114,7 +116,7 @@ void DisplayClear(void)
XdspCall(FUNC_DISPLAY_CLEAR);
}
void DisplayDrawHLine(uint16_t x, uint16_t y, int16_t len, uint16_t color)
void DisplayDrawHLine(uint32_t x, uint32_t y, int32_t len, uint32_t color)
{
dsp_x = x;
dsp_y = y;
@ -123,7 +125,7 @@ void DisplayDrawHLine(uint16_t x, uint16_t y, int16_t len, uint16_t color)
XdspCall(FUNC_DISPLAY_DRAW_HLINE);
}
void DisplayDrawVLine(uint16_t x, uint16_t y, int16_t len, uint16_t color)
void DisplayDrawVLine(uint32_t x, uint32_t y, int32_t len, uint32_t color)
{
dsp_x = x;
dsp_y = y;
@ -132,7 +134,7 @@ void DisplayDrawVLine(uint16_t x, uint16_t y, int16_t len, uint16_t color)
XdspCall(FUNC_DISPLAY_DRAW_VLINE);
}
void DisplayDrawLine(uint16_t x, uint16_t y, uint16_t x2, uint16_t y2, uint16_t color)
void DisplayDrawLine(uint32_t x, uint32_t y, uint32_t x2, uint32_t y2, uint32_t color)
{
dsp_x = x;
dsp_y = y;
@ -142,7 +144,7 @@ void DisplayDrawLine(uint16_t x, uint16_t y, uint16_t x2, uint16_t y2, uint16_t
XdspCall(FUNC_DISPLAY_DRAW_LINE);
}
void DisplayDrawCircle(uint16_t x, uint16_t y, uint16_t rad, uint16_t color)
void DisplayDrawCircle(uint32_t x, uint32_t y, uint32_t rad, uint32_t color)
{
dsp_x = x;
dsp_y = y;
@ -151,7 +153,7 @@ void DisplayDrawCircle(uint16_t x, uint16_t y, uint16_t rad, uint16_t color)
XdspCall(FUNC_DISPLAY_DRAW_CIRCLE);
}
void DisplayDrawFilledCircle(uint16_t x, uint16_t y, uint16_t rad, uint16_t color)
void DisplayDrawFilledCircle(uint32_t x, uint32_t y, uint32_t rad, uint32_t color)
{
dsp_x = x;
dsp_y = y;
@ -160,7 +162,7 @@ void DisplayDrawFilledCircle(uint16_t x, uint16_t y, uint16_t rad, uint16_t colo
XdspCall(FUNC_DISPLAY_FILL_CIRCLE);
}
void DisplayDrawRectangle(uint16_t x, uint16_t y, uint16_t x2, uint16_t y2, uint16_t color)
void DisplayDrawRectangle(uint32_t x, uint32_t y, uint32_t x2, uint32_t y2, uint32_t color)
{
dsp_x = x;
dsp_y = y;
@ -170,7 +172,7 @@ void DisplayDrawRectangle(uint16_t x, uint16_t y, uint16_t x2, uint16_t y2, uint
XdspCall(FUNC_DISPLAY_DRAW_RECTANGLE);
}
void DisplayDrawFilledRectangle(uint16_t x, uint16_t y, uint16_t x2, uint16_t y2, uint16_t color)
void DisplayDrawFilledRectangle(uint32_t x, uint32_t y, uint32_t x2, uint32_t y2, uint32_t color)
{
dsp_x = x;
dsp_y = y;
@ -185,25 +187,25 @@ void DisplayDrawFrame(void)
XdspCall(FUNC_DISPLAY_DRAW_FRAME);
}
void DisplaySetSize(uint8_t size)
void DisplaySetSize(uint32_t size)
{
Settings.display_size = size &3;
XdspCall(FUNC_DISPLAY_TEXT_SIZE);
}
void DisplaySetFont(uint8_t font)
void DisplaySetFont(uint32_t font)
{
Settings.display_font = font &3;
XdspCall(FUNC_DISPLAY_FONT_SIZE);
}
void DisplaySetRotation(uint8_t rotation)
void DisplaySetRotation(uint32_t rotation)
{
Settings.display_rotate = rotation &3;
XdspCall(FUNC_DISPLAY_ROTATION);
}
void DisplayDrawStringAt(uint16_t x, uint16_t y, char *str, uint16_t color, uint8_t flag)
void DisplayDrawStringAt(uint32_t x, uint32_t y, char *str, uint32_t color, uint32_t flag)
{
dsp_x = x;
dsp_y = y;
@ -213,7 +215,7 @@ void DisplayDrawStringAt(uint16_t x, uint16_t y, char *str, uint16_t color, uint
XdspCall(FUNC_DISPLAY_DRAW_STRING);
}
void DisplayOnOff(uint8_t on)
void DisplayOnOff(uint32_t on)
{
dsp_on = on;
XdspCall(FUNC_DISPLAY_ONOFF);
@ -543,9 +545,9 @@ void DisplayReAllocScreenBuffer(void)
DisplayAllocScreenBuffer();
}
void DisplayFillScreen(uint8_t line)
void DisplayFillScreen(uint32_t line)
{
uint8_t len = disp_screen_buffer_cols - strlen(disp_screen_buffer[line]);
uint32_t len = disp_screen_buffer_cols - strlen(disp_screen_buffer[line]);
if (len) {
memset(disp_screen_buffer[line] + strlen(disp_screen_buffer[line]), 0x20, len);
disp_screen_buffer[line][disp_screen_buffer_cols -1] = 0;
@ -911,56 +913,54 @@ void DisplaySetPower(void)
* Commands
\*********************************************************************************************/
bool DisplayCommand(void)
void CmndDisplay(void)
{
char command [CMDSZ];
bool serviced = true;
uint8_t disp_len = strlen(D_CMND_DISPLAY); // Prep for string length change
Response_P(PSTR("{\"" D_CMND_DISPLAY "\":{\"" D_CMND_DISP_MODEL "\":%d,\"" D_CMND_DISP_WIDTH "\":%d,\"" D_CMND_DISP_HEIGHT "\":%d,\""
D_CMND_DISP_MODE "\":%d,\"" D_CMND_DISP_DIMMER "\":%d,\"" D_CMND_DISP_SIZE "\":%d,\"" D_CMND_DISP_FONT "\":%d,\""
D_CMND_DISP_ROTATE "\":%d,\"" D_CMND_DISP_REFRESH "\":%d,\"" D_CMND_DISP_COLS "\":[%d,%d],\"" D_CMND_DISP_ROWS "\":%d}}"),
Settings.display_model, Settings.display_width, Settings.display_height,
Settings.display_mode, Settings.display_dimmer, Settings.display_size, Settings.display_font,
Settings.display_rotate, Settings.display_refresh, Settings.display_cols[0], Settings.display_cols[1], Settings.display_rows);
}
if (!strncasecmp_P(XdrvMailbox.topic, PSTR(D_CMND_DISPLAY), disp_len)) { // Prefix
int command_code = GetCommandCode(command, sizeof(command), XdrvMailbox.topic +disp_len, kDisplayCommands);
if (-1 == command_code) {
serviced = false; // Unknown command
void CmndDisplayModel(void)
{
if ((XdrvMailbox.payload >= 0) && (XdrvMailbox.payload < DISPLAY_MAX_DRIVERS)) {
uint32_t last_display_model = Settings.display_model;
Settings.display_model = XdrvMailbox.payload;
if (XdspCall(FUNC_DISPLAY_MODEL)) {
restart_flag = 2; // Restart to re-init interface and add/Remove MQTT subscribe
} else {
Settings.display_model = last_display_model;
}
else if (CMND_DISPLAY == command_code) {
Response_P(PSTR("{\"" D_CMND_DISPLAY "\":{\"" D_CMND_DISP_MODEL "\":%d,\"" D_CMND_DISP_WIDTH "\":%d,\"" D_CMND_DISP_HEIGHT "\":%d,\"" D_CMND_DISP_MODE "\":%d,\""
D_CMND_DISP_DIMMER "\":%d,\"" D_CMND_DISP_SIZE "\":%d,\"" D_CMND_DISP_FONT "\":%d,\"" D_CMND_DISP_ROTATE "\":%d,\"" D_CMND_DISP_REFRESH "\":%d,\""
D_CMND_DISP_COLS "\":[%d,%d],\"" D_CMND_DISP_ROWS "\":%d}}"),
Settings.display_model, Settings.display_width, Settings.display_height, Settings.display_mode,
Settings.display_dimmer, Settings.display_size, Settings.display_font, Settings.display_rotate, Settings.display_refresh,
Settings.display_cols[0], Settings.display_cols[1], Settings.display_rows);
}
Response_P(S_JSON_DISPLAY_COMMAND_NVALUE, XdrvMailbox.command, Settings.display_model);
}
void CmndDisplayWidth(void)
{
if (XdrvMailbox.payload > 0) {
if (XdrvMailbox.payload != Settings.display_width) {
Settings.display_width = XdrvMailbox.payload;
restart_flag = 2; // Restart to re-init width
}
else if (CMND_DISP_MODEL == command_code) {
if ((XdrvMailbox.payload >= 0) && (XdrvMailbox.payload < DISPLAY_MAX_DRIVERS)) {
uint8_t last_display_model = Settings.display_model;
Settings.display_model = XdrvMailbox.payload;
if (XdspCall(FUNC_DISPLAY_MODEL)) {
restart_flag = 2; // Restart to re-init interface and add/Remove MQTT subscribe
} else {
Settings.display_model = last_display_model;
}
}
Response_P(S_JSON_DISPLAY_COMMAND_NVALUE, command, Settings.display_model);
}
Response_P(S_JSON_DISPLAY_COMMAND_NVALUE, XdrvMailbox.command, Settings.display_width);
}
void CmndDisplayHeight(void)
{
if (XdrvMailbox.payload > 0) {
if (XdrvMailbox.payload != Settings.display_height) {
Settings.display_height = XdrvMailbox.payload;
restart_flag = 2; // Restart to re-init height
}
else if (CMND_DISP_WIDTH == command_code) {
if (XdrvMailbox.payload > 0) {
if (XdrvMailbox.payload != Settings.display_width) {
Settings.display_width = XdrvMailbox.payload;
restart_flag = 2; // Restart to re-init width
}
}
Response_P(S_JSON_DISPLAY_COMMAND_NVALUE, command, Settings.display_width);
}
else if (CMND_DISP_HEIGHT == command_code) {
if (XdrvMailbox.payload > 0) {
if (XdrvMailbox.payload != Settings.display_height) {
Settings.display_height = XdrvMailbox.payload;
restart_flag = 2; // Restart to re-init height
}
}
Response_P(S_JSON_DISPLAY_COMMAND_NVALUE, command, Settings.display_height);
}
else if (CMND_DISP_MODE == command_code) {
}
Response_P(S_JSON_DISPLAY_COMMAND_NVALUE, XdrvMailbox.command, Settings.display_height);
}
void CmndDisplayMode(void)
{
#ifdef USE_DISPLAY_MODES1TO5
/* Matrix LCD / Oled TFT
* 1 = Text up and time Time
@ -969,130 +969,146 @@ bool DisplayCommand(void)
* 4 = Mqtt left and time Mqtt (incl local) sensors Mqtt (incl local) sensors
* 5 = Mqtt up and time Mqtt (incl local) sensors and time Mqtt (incl local) sensors and time
*/
if ((XdrvMailbox.payload >= 0) && (XdrvMailbox.payload <= 5)) {
uint32_t last_display_mode = Settings.display_mode;
Settings.display_mode = XdrvMailbox.payload;
if ((XdrvMailbox.payload >= 0) && (XdrvMailbox.payload <= 5)) {
uint32_t last_display_mode = Settings.display_mode;
Settings.display_mode = XdrvMailbox.payload;
if (disp_subscribed != (Settings.display_mode &0x04)) {
restart_flag = 2; // Restart to Add/Remove MQTT subscribe
} else {
if (last_display_mode && !Settings.display_mode) { // Switch to mode 0
DisplayInit(DISPLAY_INIT_MODE);
DisplayClear();
} else {
DisplayLogBufferInit();
DisplayInit(DISPLAY_INIT_MODE);
}
}
}
#endif // USE_DISPLAY_MODES1TO5
Response_P(S_JSON_DISPLAY_COMMAND_NVALUE, command, Settings.display_mode);
}
else if (CMND_DISP_DIMMER == command_code) {
if ((XdrvMailbox.payload >= 0) && (XdrvMailbox.payload <= 100)) {
Settings.display_dimmer = ((XdrvMailbox.payload +1) * 100) / 666; // Correction for Domoticz (0 - 15)
if (Settings.display_dimmer && !(disp_power)) {
ExecuteCommandPower(disp_device, POWER_ON, SRC_DISPLAY);
}
else if (!Settings.display_dimmer && disp_power) {
ExecuteCommandPower(disp_device, POWER_OFF, SRC_DISPLAY);
}
}
Response_P(S_JSON_DISPLAY_COMMAND_NVALUE, command, Settings.display_dimmer);
}
else if (CMND_DISP_SIZE == command_code) {
if ((XdrvMailbox.payload > 0) && (XdrvMailbox.payload <= 4)) {
Settings.display_size = XdrvMailbox.payload;
}
Response_P(S_JSON_DISPLAY_COMMAND_NVALUE, command, Settings.display_size);
}
else if (CMND_DISP_FONT == command_code) {
if ((XdrvMailbox.payload > 0) && (XdrvMailbox.payload <= 4)) {
Settings.display_font = XdrvMailbox.payload;
}
Response_P(S_JSON_DISPLAY_COMMAND_NVALUE, command, Settings.display_font);
}
else if (CMND_DISP_ROTATE == command_code) {
if ((XdrvMailbox.payload >= 0) && (XdrvMailbox.payload < 4)) {
if (Settings.display_rotate != XdrvMailbox.payload) {
/*
// Needs font info regarding height and width
if ((Settings.display_rotate &1) != (XdrvMailbox.payload &1)) {
uint8_t temp_rows = Settings.display_rows;
Settings.display_rows = Settings.display_cols[0];
Settings.display_cols[0] = temp_rows;
#ifdef USE_DISPLAY_MODES1TO5
DisplayReAllocScreenBuffer();
#endif // USE_DISPLAY_MODES1TO5
}
*/
Settings.display_rotate = XdrvMailbox.payload;
DisplayInit(DISPLAY_INIT_MODE);
#ifdef USE_DISPLAY_MODES1TO5
DisplayLogBufferInit();
#endif // USE_DISPLAY_MODES1TO5
}
}
Response_P(S_JSON_DISPLAY_COMMAND_NVALUE, command, Settings.display_rotate);
}
else if (CMND_DISP_TEXT == command_code) {
mqtt_data[0] = '\0';
if (disp_device && XdrvMailbox.data_len > 0) {
#ifndef USE_DISPLAY_MODES1TO5
DisplayText();
#else
if (!Settings.display_mode) {
DisplayText();
} else {
DisplayLogBufferAdd(XdrvMailbox.data);
}
#endif // USE_DISPLAY_MODES1TO5
if (disp_subscribed != (Settings.display_mode &0x04)) {
restart_flag = 2; // Restart to Add/Remove MQTT subscribe
} else {
if (last_display_mode && !Settings.display_mode) { // Switch to mode 0
DisplayInit(DISPLAY_INIT_MODE);
DisplayClear();
} else {
Response_P(PSTR("No Text"));
}
if (mqtt_data[0] == '\0') {
Response_P(S_JSON_DISPLAY_COMMAND_VALUE, command, XdrvMailbox.data);
}
}
else if ((CMND_DISP_ADDRESS == command_code) && (XdrvMailbox.index > 0) && (XdrvMailbox.index <= 8)) {
if ((XdrvMailbox.payload >= 0) && (XdrvMailbox.payload <= 255)) {
Settings.display_address[XdrvMailbox.index -1] = XdrvMailbox.payload;
}
Response_P(S_JSON_DISPLAY_COMMAND_INDEX_NVALUE, command, XdrvMailbox.index, Settings.display_address[XdrvMailbox.index -1]);
}
else if (CMND_DISP_REFRESH == command_code) {
if ((XdrvMailbox.payload >= 1) && (XdrvMailbox.payload <= 7)) {
Settings.display_refresh = XdrvMailbox.payload;
}
Response_P(S_JSON_DISPLAY_COMMAND_NVALUE, command, Settings.display_refresh);
}
else if ((CMND_DISP_COLS == command_code) && (XdrvMailbox.index > 0) && (XdrvMailbox.index <= 2)) {
if ((XdrvMailbox.payload > 0) && (XdrvMailbox.payload <= DISPLAY_MAX_COLS)) {
Settings.display_cols[XdrvMailbox.index -1] = XdrvMailbox.payload;
#ifdef USE_DISPLAY_MODES1TO5
if (1 == XdrvMailbox.index) {
DisplayLogBufferInit();
DisplayReAllocScreenBuffer();
}
#endif // USE_DISPLAY_MODES1TO5
}
Response_P(S_JSON_DISPLAY_COMMAND_INDEX_NVALUE, command, XdrvMailbox.index, Settings.display_cols[XdrvMailbox.index -1]);
}
else if (CMND_DISP_ROWS == command_code) {
if ((XdrvMailbox.payload > 0) && (XdrvMailbox.payload <= DISPLAY_MAX_ROWS)) {
Settings.display_rows = XdrvMailbox.payload;
#ifdef USE_DISPLAY_MODES1TO5
DisplayLogBufferInit();
DisplayInit(DISPLAY_INIT_MODE);
}
}
}
#endif // USE_DISPLAY_MODES1TO5
Response_P(S_JSON_DISPLAY_COMMAND_NVALUE, XdrvMailbox.command, Settings.display_mode);
}
void CmndDisplayDimmer(void)
{
if ((XdrvMailbox.payload >= 0) && (XdrvMailbox.payload <= 100)) {
Settings.display_dimmer = ((XdrvMailbox.payload +1) * 100) / 666; // Correction for Domoticz (0 - 15)
if (Settings.display_dimmer && !(disp_power)) {
ExecuteCommandPower(disp_device, POWER_ON, SRC_DISPLAY);
}
else if (!Settings.display_dimmer && disp_power) {
ExecuteCommandPower(disp_device, POWER_OFF, SRC_DISPLAY);
}
}
Response_P(S_JSON_DISPLAY_COMMAND_NVALUE, XdrvMailbox.command, Settings.display_dimmer);
}
void CmndDisplaySize(void)
{
if ((XdrvMailbox.payload > 0) && (XdrvMailbox.payload <= 4)) {
Settings.display_size = XdrvMailbox.payload;
}
Response_P(S_JSON_DISPLAY_COMMAND_NVALUE, XdrvMailbox.command, Settings.display_size);
}
void CmndDisplayFont(void)
{
if ((XdrvMailbox.payload > 0) && (XdrvMailbox.payload <= 4)) {
Settings.display_font = XdrvMailbox.payload;
}
Response_P(S_JSON_DISPLAY_COMMAND_NVALUE, XdrvMailbox.command, Settings.display_font);
}
void CmndDisplayRotate(void)
{
if ((XdrvMailbox.payload >= 0) && (XdrvMailbox.payload < 4)) {
if (Settings.display_rotate != XdrvMailbox.payload) {
/*
// Needs font info regarding height and width
if ((Settings.display_rotate &1) != (XdrvMailbox.payload &1)) {
uint8_t temp_rows = Settings.display_rows;
Settings.display_rows = Settings.display_cols[0];
Settings.display_cols[0] = temp_rows;
#ifdef USE_DISPLAY_MODES1TO5
DisplayReAllocScreenBuffer();
#endif // USE_DISPLAY_MODES1TO5
}
Response_P(S_JSON_DISPLAY_COMMAND_NVALUE, command, Settings.display_rows);
*/
Settings.display_rotate = XdrvMailbox.payload;
DisplayInit(DISPLAY_INIT_MODE);
#ifdef USE_DISPLAY_MODES1TO5
DisplayLogBufferInit();
#endif // USE_DISPLAY_MODES1TO5
}
else serviced = false; // Unknown command
}
else serviced = false; // Unknown command
Response_P(S_JSON_DISPLAY_COMMAND_NVALUE, XdrvMailbox.command, Settings.display_rotate);
}
return serviced;
void CmndDisplayText(void)
{
mqtt_data[0] = '\0';
if (disp_device && XdrvMailbox.data_len > 0) {
#ifndef USE_DISPLAY_MODES1TO5
DisplayText();
#else
if (!Settings.display_mode) {
DisplayText();
} else {
DisplayLogBufferAdd(XdrvMailbox.data);
}
#endif // USE_DISPLAY_MODES1TO5
} else {
Response_P(PSTR("No Text"));
}
if (mqtt_data[0] == '\0') {
Response_P(S_JSON_DISPLAY_COMMAND_VALUE, XdrvMailbox.command, XdrvMailbox.data);
}
}
void CmndDisplayAddress(void)
{
if ((XdrvMailbox.index > 0) && (XdrvMailbox.index <= 8)) {
if ((XdrvMailbox.payload >= 0) && (XdrvMailbox.payload <= 255)) {
Settings.display_address[XdrvMailbox.index -1] = XdrvMailbox.payload;
}
Response_P(S_JSON_DISPLAY_COMMAND_INDEX_NVALUE, XdrvMailbox.command, XdrvMailbox.index, Settings.display_address[XdrvMailbox.index -1]);
}
}
void CmndDisplayRefresh(void)
{
if ((XdrvMailbox.payload >= 1) && (XdrvMailbox.payload <= 7)) {
Settings.display_refresh = XdrvMailbox.payload;
}
Response_P(S_JSON_DISPLAY_COMMAND_NVALUE, XdrvMailbox.command, Settings.display_refresh);
}
void CmndDisplayColumns(void)
{
if ((XdrvMailbox.index > 0) && (XdrvMailbox.index <= 2)) {
if ((XdrvMailbox.payload > 0) && (XdrvMailbox.payload <= DISPLAY_MAX_COLS)) {
Settings.display_cols[XdrvMailbox.index -1] = XdrvMailbox.payload;
#ifdef USE_DISPLAY_MODES1TO5
if (1 == XdrvMailbox.index) {
DisplayLogBufferInit();
DisplayReAllocScreenBuffer();
}
#endif // USE_DISPLAY_MODES1TO5
}
Response_P(S_JSON_DISPLAY_COMMAND_INDEX_NVALUE, XdrvMailbox.command, XdrvMailbox.index, Settings.display_cols[XdrvMailbox.index -1]);
}
}
void CmndDisplayRows(void)
{
if ((XdrvMailbox.payload > 0) && (XdrvMailbox.payload <= DISPLAY_MAX_ROWS)) {
Settings.display_rows = XdrvMailbox.payload;
#ifdef USE_DISPLAY_MODES1TO5
DisplayLogBufferInit();
DisplayReAllocScreenBuffer();
#endif // USE_DISPLAY_MODES1TO5
}
Response_P(S_JSON_DISPLAY_COMMAND_NVALUE, XdrvMailbox.command, Settings.display_rows);
}
/*********************************************************************************************\
@ -1111,9 +1127,6 @@ bool Xdrv13(uint8_t function)
case FUNC_EVERY_50_MSECOND:
if (Settings.display_model) { XdspCall(FUNC_DISPLAY_EVERY_50_MSECOND); }
break;
case FUNC_COMMAND:
result = DisplayCommand();
break;
case FUNC_SET_POWER:
DisplaySetPower();
break;
@ -1131,6 +1144,12 @@ bool Xdrv13(uint8_t function)
DisplayLocalSensor();
break;
#endif // USE_DISPLAY_MODES1TO5
case FUNC_COMMAND:
if (!strncasecmp_P(XdrvMailbox.topic, PSTR(D_CMND_DISPLAY), strlen(D_CMND_DISPLAY))) { // Prefix
XdrvMailbox.topic += strlen(D_CMND_DISPLAY);
result = DecodeCommand(kDisplayCommands, DisplayCommand);
}
break;
}
}
return result;