mirror of https://github.com/arendst/Tasmota.git
parent
d1b726ee10
commit
4d9b53bc1a
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue