Refactor Armtronix driver

Refactor Armtronix driver
This commit is contained in:
Theo Arends 2019-08-17 15:07:46 +02:00
parent 12d17030ca
commit 9eed3ebfea

View File

@ -32,10 +32,12 @@
TasmotaSerial *ArmtronixSerial = nullptr; TasmotaSerial *ArmtronixSerial = nullptr;
bool armtronix_ignore_dim = false; // Flag to skip serial send to prevent looping when processing inbound states from the faceplate interaction struct ARMTRONIX {
int8_t armtronix_wifi_state = -2; // Keep MCU wifi-status in sync with WifiState() bool ignore_dim = false; // Flag to skip serial send to prevent looping when processing inbound states from the faceplate interaction
int8_t armtronix_dimState[2]; // Dimmer state values. int8_t wifi_state = -2; // Keep MCU wifi-status in sync with WifiState()
int8_t armtronix_knobState[2]; // Dimmer state values. int8_t dim_state[2]; // Dimmer state values.
int8_t knob_state[2]; // Dimmer state values.
} Armtronix;
/*********************************************************************************************\ /*********************************************************************************************\
* Internal Functions * Internal Functions
@ -49,21 +51,21 @@ bool ArmtronixSetChannels(void)
void LightSerial2Duty(uint8_t duty1, uint8_t duty2) void LightSerial2Duty(uint8_t duty1, uint8_t duty2)
{ {
if (ArmtronixSerial && !armtronix_ignore_dim) { if (ArmtronixSerial && !Armtronix.ignore_dim) {
duty1 = ((float)duty1)/2.575757; //max 99 duty1 = ((float)duty1)/2.575757; //max 99
duty2 = ((float)duty2)/2.575757; //max 99 duty2 = ((float)duty2)/2.575757; //max 99
armtronix_dimState[0] = duty1; Armtronix.dim_state[0] = duty1;
armtronix_dimState[1] = duty2; Armtronix.dim_state[1] = duty2;
ArmtronixSerial->print("Dimmer1:"); ArmtronixSerial->print("Dimmer1:");
ArmtronixSerial->print(duty1); ArmtronixSerial->print(duty1);
ArmtronixSerial->print("\nDimmer2:"); ArmtronixSerial->print("\nDimmer2:");
ArmtronixSerial->println(duty2); ArmtronixSerial->println(duty2);
AddLog_P2(LOG_LEVEL_DEBUG, PSTR("ARM: Send Serial Packet Dim Values=%d,%d"), armtronix_dimState[0],armtronix_dimState[1]); AddLog_P2(LOG_LEVEL_DEBUG, PSTR("ARM: Send Serial Packet Dim Values=%d,%d"), Armtronix.dim_state[0],Armtronix.dim_state[1]);
} else { } else {
armtronix_ignore_dim = false; Armtronix.ignore_dim = false;
AddLog_P2(LOG_LEVEL_DEBUG, PSTR("ARM: Send Dim Level skipped due to already set. Value=%d,%d"), armtronix_dimState[0],armtronix_dimState[1]); AddLog_P2(LOG_LEVEL_DEBUG, PSTR("ARM: Send Dim Level skipped due to already set. Value=%d,%d"), Armtronix.dim_state[0],Armtronix.dim_state[1]);
} }
} }
@ -90,10 +92,10 @@ bool ArmtronixModuleSelected(void)
void ArmtronixInit(void) void ArmtronixInit(void)
{ {
armtronix_dimState[0] = -1; Armtronix.dim_state[0] = -1;
armtronix_dimState[1] = -1; Armtronix.dim_state[1] = -1;
armtronix_knobState[0] = -1; Armtronix.knob_state[0] = -1;
armtronix_knobState[1] = -1; Armtronix.knob_state[1] = -1;
ArmtronixSerial = new TasmotaSerial(pin[GPIO_RXD], pin[GPIO_TXD], 2); ArmtronixSerial = new TasmotaSerial(pin[GPIO_RXD], pin[GPIO_TXD], 2);
if (ArmtronixSerial->begin(115200)) { if (ArmtronixSerial->begin(115200)) {
if (ArmtronixSerial->hardwareSerial()) { ClaimSerial(); } if (ArmtronixSerial->hardwareSerial()) { ClaimSerial(); }
@ -115,19 +117,19 @@ void ArmtronixSerialInput(void)
commaIndex = 6; commaIndex = 6;
for (uint32_t i =0; i<2; i++) { for (uint32_t i =0; i<2; i++) {
newDimState[i] = answer.substring(commaIndex+1,answer.indexOf(',',commaIndex+1)).toInt(); newDimState[i] = answer.substring(commaIndex+1,answer.indexOf(',',commaIndex+1)).toInt();
if (newDimState[i] != armtronix_dimState[i]) { if (newDimState[i] != Armtronix.dim_state[i]) {
temp = ((float)newDimState[i])*1.01010101010101; //max 255 temp = ((float)newDimState[i])*1.01010101010101; //max 255
armtronix_dimState[i] = newDimState[i]; Armtronix.dim_state[i] = newDimState[i];
armtronix_ignore_dim = true; Armtronix.ignore_dim = true;
snprintf_P(scmnd, sizeof(scmnd), PSTR(D_CMND_CHANNEL "%d %d"),i+1, temp); snprintf_P(scmnd, sizeof(scmnd), PSTR(D_CMND_CHANNEL "%d %d"),i+1, temp);
ExecuteCommand(scmnd,SRC_SWITCH); ExecuteCommand(scmnd,SRC_SWITCH);
AddLog_P2(LOG_LEVEL_DEBUG, PSTR("ARM: Send CMND_CHANNEL=%s"), scmnd ); AddLog_P2(LOG_LEVEL_DEBUG, PSTR("ARM: Send CMND_CHANNEL=%s"), scmnd );
} }
commaIndex = answer.indexOf(',',commaIndex+1); commaIndex = answer.indexOf(',',commaIndex+1);
} }
armtronix_knobState[0] = answer.substring(commaIndex+1,answer.indexOf(',',commaIndex+1)).toInt(); Armtronix.knob_state[0] = answer.substring(commaIndex+1,answer.indexOf(',',commaIndex+1)).toInt();
commaIndex = answer.indexOf(',',commaIndex+1); commaIndex = answer.indexOf(',',commaIndex+1);
armtronix_knobState[1] = answer.substring(commaIndex+1,answer.indexOf(',',commaIndex+1)).toInt(); Armtronix.knob_state[1] = answer.substring(commaIndex+1,answer.indexOf(',',commaIndex+1)).toInt();
} }
} }
} }
@ -158,7 +160,7 @@ void ArmtronixSetWifiLed(void)
state = '0' + ((wifi_state & 2) > 0); state = '0' + ((wifi_state & 2) > 0);
ArmtronixSerial->write(state); ArmtronixSerial->write(state);
ArmtronixSerial->write(10); ArmtronixSerial->write(10);
armtronix_wifi_state = WifiState(); Armtronix.wifi_state = WifiState();
} }
/*********************************************************************************************\ /*********************************************************************************************\
@ -182,7 +184,7 @@ bool Xdrv18(uint8_t function)
break; break;
case FUNC_EVERY_SECOND: case FUNC_EVERY_SECOND:
if (ArmtronixSerial) { if (ArmtronixSerial) {
if (armtronix_wifi_state!=WifiState()) { ArmtronixSetWifiLed(); } if (Armtronix.wifi_state!=WifiState()) { ArmtronixSetWifiLed(); }
if (uptime &1) { if (uptime &1) {
ArmtronixSerial->println("Status"); ArmtronixSerial->println("Status");
} }