Prep support for SO114 until SO145

This commit is contained in:
Theo Arends 2020-08-13 16:49:11 +02:00
parent 72068cd10f
commit 18bf102e4f
3 changed files with 60 additions and 10 deletions

View File

@ -127,15 +127,53 @@ typedef union { // Restricted by MISRA-C Rule 18.4 bu
uint32_t white_blend_mode : 1; // bit 23 (v8.4.0.1) - SetOption105 - White Blend Mode - used to be `RGBWWTable` last value `0`, now deprecated in favor of this option
uint32_t virtual_ct : 1; // bit 24 (v8.4.0.1) - SetOption106 - Virtual CT - Creates a virtual White ColorTemp for RGBW lights
uint32_t virtual_ct_cw : 1; // bit 25 (v8.4.0.1) - SetOption107 - Virtual CT Channel - signals whether the hardware white is cold CW (true) or warm WW (false)
uint32_t spare26 : 1;
uint32_t spare27 : 1;
uint32_t spare28 : 1;
uint32_t spare29 : 1;
uint32_t spare30 : 1;
uint32_t spare26 : 1; // bit 26
uint32_t spare27 : 1; // bit 27
uint32_t spare28 : 1; // bit 28
uint32_t spare29 : 1; // bit 29
uint32_t spare30 : 1; // bit 30
uint32_t spare31 : 1; // bit 31
};
} SysBitfield4;
typedef union { // Restricted by MISRA-C Rule 18.4 but so useful...
uint32_t data; // Allow bit manipulation using SetOption
struct { // SetOption114 .. SetOption145
uint32_t spare00 : 1; // bit 0
uint32_t spare01 : 1; // bit 1
uint32_t spare02 : 1; // bit 2
uint32_t spare03 : 1; // bit 3
uint32_t spare04 : 1; // bit 4
uint32_t spare05 : 1; // bit 5
uint32_t spare06 : 1; // bit 6
uint32_t spare07 : 1; // bit 7
uint32_t spare08 : 1; // bit 8
uint32_t spare09 : 1; // bit 9
uint32_t spare10 : 1; // bit 10
uint32_t spare11 : 1; // bit 11
uint32_t spare12 : 1; // bit 12
uint32_t spare13 : 1; // bit 13
uint32_t spare14 : 1; // bit 14
uint32_t spare15 : 1; // bit 15
uint32_t spare16 : 1; // bit 16
uint32_t spare17 : 1; // bit 17
uint32_t spare18 : 1; // bit 18
uint32_t spare19 : 1; // bit 19
uint32_t spare20 : 1; // bit 20
uint32_t spare21 : 1; // bit 21
uint32_t spare22 : 1; // bit 22
uint32_t spare23 : 1; // bit 23
uint32_t spare24 : 1; // bit 24
uint32_t spare25 : 1; // bit 25
uint32_t spare26 : 1; // bit 26
uint32_t spare27 : 1; // bit 27
uint32_t spare28 : 1; // bit 28
uint32_t spare29 : 1; // bit 29
uint32_t spare30 : 1; // bit 30
uint32_t spare31 : 1; // bit 31
};
} SysBitfield5;
typedef union {
uint32_t data; // Allow bit manipulation
struct {
@ -572,9 +610,10 @@ struct {
uint8_t tcp_baudrate; // F41
uint8_t fallback_module; // F42
uint8_t free_f43[117]; // F43 - Decrement if adding new Setting variables just above and below
uint8_t free_f43[113]; // F43 - Decrement if adding new Setting variables just above and below
// Only 32 bit boundary variables below
SysBitfield5 flag5; // EB4
uint16_t pulse_counter_debounce_low; // FB8
uint16_t pulse_counter_debounce_high; // FBA
uint32_t keeloq_master_msb; // FBC

View File

@ -767,6 +767,7 @@ void SettingsDefaultSet2(void)
SysBitfield2 flag2 = { 0 };
SysBitfield3 flag3 = { 0 };
SysBitfield4 flag4 = { 0 };
SysBitfield5 flag5 = { 0 };
#ifdef ESP8266
// Settings.config_version = 0; // ESP8266 (Has been 0 for long time)

View File

@ -458,11 +458,11 @@ void CmndStatus(void)
if ((0 == payload) || (3 == payload)) {
Response_P(PSTR("{\"" D_CMND_STATUS D_STATUS3_LOGGING "\":{\"" D_CMND_SERIALLOG "\":%d,\"" D_CMND_WEBLOG "\":%d,\"" D_CMND_MQTTLOG "\":%d,\"" D_CMND_SYSLOG "\":%d,\""
D_CMND_LOGHOST "\":\"%s\",\"" D_CMND_LOGPORT "\":%d,\"" D_CMND_SSID "\":[\"%s\",\"%s\"],\"" D_CMND_TELEPERIOD "\":%d,\""
D_JSON_RESOLUTION "\":\"%08X\",\"" D_CMND_SETOPTION "\":[\"%08X\",\"%s\",\"%08X\",\"%08X\"]}}"),
D_JSON_RESOLUTION "\":\"%08X\",\"" D_CMND_SETOPTION "\":[\"%08X\",\"%s\",\"%08X\",\"%08X\",\"%08X\"]}}"),
Settings.seriallog_level, Settings.weblog_level, Settings.mqttlog_level, Settings.syslog_level,
SettingsText(SET_SYSLOG_HOST), Settings.syslog_port, EscapeJSONString(SettingsText(SET_STASSID1)).c_str(), EscapeJSONString(SettingsText(SET_STASSID2)).c_str(), Settings.tele_period,
Settings.flag2.data, Settings.flag.data, ToHex_P((unsigned char*)Settings.param, PARAM8_SIZE, stemp2, sizeof(stemp2)),
Settings.flag3.data, Settings.flag4.data);
Settings.flag3.data, Settings.flag4.data, Settings.flag5.data);
MqttPublishPrefixTopic_P(option, PSTR(D_CMND_STATUS "3"));
}
@ -803,7 +803,7 @@ void CmndSetoption(void)
{
snprintf_P(XdrvMailbox.command, CMDSZ, PSTR(D_CMND_SETOPTION)); // Rename result shortcut command SO to SetOption
if (XdrvMailbox.index < 114) {
if (XdrvMailbox.index < 146) {
uint32_t ptype;
uint32_t pindex;
if (XdrvMailbox.index <= 31) { // SetOption0 .. 31 = Settings.flag
@ -818,10 +818,14 @@ void CmndSetoption(void)
ptype = 3;
pindex = XdrvMailbox.index -50; // 0 .. 31
}
else { // SetOption82 .. 113 = Settings.flag4
else if (XdrvMailbox.index <= 113) { // SetOption82 .. 113 = Settings.flag4
ptype = 4;
pindex = XdrvMailbox.index -82; // 0 .. 31
}
else { // SetOption114 .. 145 = Settings.flag5
ptype = 5;
pindex = XdrvMailbox.index -114; // 0 .. 31
}
if (XdrvMailbox.payload >= 0) {
if (1 == ptype) { // SetOption32 .. 49
@ -911,6 +915,9 @@ void CmndSetoption(void)
break;
}
}
else if (5 == ptype) { // SetOption114 .. 145
bitWrite(Settings.flag5.data, pindex, XdrvMailbox.payload);
}
} else {
ptype = 99; // Command Error
}
@ -928,6 +935,9 @@ void CmndSetoption(void)
else if (4 == ptype) {
flag = Settings.flag4.data;
}
else if (5 == ptype) {
flag = Settings.flag5.data;
}
ResponseCmndIdxChar(GetStateText(bitRead(flag, pindex)));
}
}