From 21e731f69d11c7a0584e0d21e6845b1a7c10d766 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Sat, 25 Aug 2018 11:38:32 +0200 Subject: [PATCH] Fix MCP230XX regression Fix MCP230XX functional regression (#3579) --- sonoff/xsns_29_mcp230xx.ino | 46 ++++++++++++++++++------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/sonoff/xsns_29_mcp230xx.ino b/sonoff/xsns_29_mcp230xx.ino index 03007fb54..5aab8da53 100644 --- a/sonoff/xsns_29_mcp230xx.ino +++ b/sonoff/xsns_29_mcp230xx.ino @@ -68,7 +68,7 @@ const char MCP230XX_CMND_RESPONSE[] PROGMEM = "{\"S29cmnd_D%i\":{\"COMMAND\":\"% const char* ConvertNumTxt(uint8_t statu, uint8_t pinmod=0) { #ifdef USE_MCP230xx_OUTPUT -if ((pinmod == 6) && (statu < 2)) statu = abs(statu-1); +if ((6 == pinmod) && (statu < 2)) { statu = abs(statu-1); } #endif // USE_MCP230xx_OUTPUT switch (statu) { case 0: @@ -128,7 +128,7 @@ void MCP230xx_ApplySettings(void) { case 2 ... 4: reg_iodir |= (1 << idx); reg_gpinten |= (1 << idx); - int_en=1; + int_en = 1; break; #ifdef USE_MCP230xx_OUTPUT case 5 ... 6: @@ -165,7 +165,7 @@ void MCP230xx_ApplySettings(void) { for (uint8_t idx=0;idx>0)&1,(gpio>>1)&1,(gpio>>2)&1,(gpio>>3)&1,(gpio>>4)&1,(gpio>>5)&1,(gpio>>6)&1,(gpio>>7)&1); - if (mcp230xx_type == 2) { + if (2 == mcp230xx_type) { gpio = MCP230xx_readGPIO(1); snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s,\"D8\":%i,\"D9\":%i,\"D10\":%i,\"D11\":%i,\"D12\":%i,\"D13\":%i,\"D14\":%i,\"D15\":%i"), mqtt_data,(gpio>>0)&1,(gpio>>1)&1,(gpio>>2)&1,(gpio>>3)&1,(gpio>>4)&1,(gpio>>5)&1,(gpio>>6)&1,(gpio>>7)&1); @@ -299,17 +299,17 @@ void MCP230xx_SetOutPin(uint8_t pin,uint8_t pinstate) { uint8_t interlock = Settings.flag.interlock; int pinadd = (pin % 2)+1-(3*(pin % 2)); //check if pin is odd or even and convert to 1 (if even) or -1 (if odd) char cmnd[7], stt[4]; - if (pin > 7) port=1; + if (pin > 7) { port = 1; } portpins = MCP230xx_readGPIO(port); - if ((interlock && pinmo) == (Settings.mcp230xx_config[pin+pinadd].pinmode)) { + if (interlock && (pinmo == Settings.mcp230xx_config[pin+pinadd].pinmode)) { if (pinstate < 2) { - if (pinmo == 6) { + if (6 == pinmo) { if (pinstate) portpins |= (1 << pin-(port*8)); else portpins |= (1 << pin+pinadd-(port*8)),portpins &= ~(1 << pin-(port*8)); } else { if (pinstate) portpins &= ~(1 << pin+pinadd-(port*8)),portpins |= (1 << pin-(port*8)); else portpins &= ~(1 << pin-(port*8)); } } else { - if (pinmo == 6) { + if (6 == pinmo) { portpins |= (1 << pin+pinadd-(port*8)),portpins ^= (1 << pin-(port*8)); } else { portpins &= ~(1 << pin+pinadd-(port*8)),portpins ^= (1 << pin-(port*8)); @@ -329,7 +329,7 @@ void MCP230xx_SetOutPin(uint8_t pin,uint8_t pinstate) { } sprintf(cmnd,ConvertNumTxt(pinstate, pinmo)); sprintf(stt,ConvertNumTxt((portpins >> (pin-(port*8))&1), pinmo)); - if ((interlock && pinmo) == Settings.mcp230xx_config[pin+pinadd].pinmode) { + if (interlock && (pinmo == Settings.mcp230xx_config[pin+pinadd].pinmode)) { char stt1[4]; sprintf(stt1,ConvertNumTxt((portpins >> (pin+pinadd-(port*8))&1), pinmo)); snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"S29cmnd_D%i\":{\"COMMAND\":\"%s\",\"STATE\":\"%s\"},\"S29cmnd_D%i\":{\"STATE\":\"%s\"}}"),pin, cmnd, stt, pin+pinadd, stt1); @@ -342,7 +342,7 @@ void MCP230xx_SetOutPin(uint8_t pin,uint8_t pinstate) { void MCP230xx_Reset(uint8_t pinmode) { uint8_t pullup = 0; - if ((pinmode > 1) && (pinmode < 5)) pullup=1; + if ((pinmode > 1) && (pinmode < 5)) { pullup=1; } for (uint8_t pinx=0;pinx<16;pinx++) { Settings.mcp230xx_config[pinx].pinmode=pinmode; Settings.mcp230xx_config[pinx].pullup=pullup; @@ -365,7 +365,7 @@ void MCP230xx_Reset(uint8_t pinmode) { char intmodetxt[9]; sprintf(pulluptxt,ConvertNumTxt(pullup)); uint8_t intmode = 3; - if ((pinmode > 1) && (pinmode < 5)) intmode=0; + if ((pinmode > 1) && (pinmode < 5)) { intmode = 0; } sprintf(intmodetxt,IntModeTxt(intmode)); snprintf_P(mqtt_data, sizeof(mqtt_data), MCP230XX_SENSOR_RESPONSE,99,pinmode,pulluptxt,intmodetxt,""); } @@ -381,8 +381,8 @@ bool MCP230xx_Command(void) { } char sub_string[XdrvMailbox.data_len +1]; for (uint8_t ca=0;ca 2)) { + if (validpin && (paramcount > 2)) { if (!strcmp(subStr(sub_string, XdrvMailbox.data, ",", 2), "?")) { uint8_t port = 0; - if (pin > 7) port = 1; + if (pin > 7) { port = 1; } uint8_t portdata = MCP230xx_readGPIO(port); char pulluptxtr[7],pinstatustxtr[7]; char intmodetxt[9]; @@ -466,7 +466,7 @@ bool MCP230xx_Command(void) { } MCP230xx_ApplySettings(); uint8_t port = 0; - if (pin > 7) port = 1; + if (pin > 7) { port = 1; } uint8_t portdata = MCP230xx_readGPIO(port); char pulluptxtc[7], pinstatustxtc[7]; char intmodetxt[9]; @@ -494,8 +494,8 @@ const char HTTP_SNS_MCP230xx_OUTPUT[] PROGMEM = "%s{s}MCP230XX D%d{m}%s{e}"; // void MCP230xx_UpdateWebData(void) { uint8_t gpio1 = MCP230xx_readGPIO(0); uint8_t gpio2 = 0; - if (mcp230xx_type == 2) { - gpio2=MCP230xx_readGPIO(1); + if (2 == mcp230xx_type) { + gpio2 = MCP230xx_readGPIO(1); } uint16_t gpio = (gpio2 << 8) + gpio1; for (uint8_t pin = 0; pin < mcp230xx_pincount; pin++) { @@ -512,13 +512,13 @@ void MCP230xx_UpdateWebData(void) { #ifdef USE_MCP230xx_OUTPUT void MCP230xx_OutputTelemetry(void) { - if (mcp230xx_type == 0) return; // We do not do this if the MCP has not been detected + if (0 == mcp230xx_type) { return; } // We do not do this if the MCP has not been detected uint8_t outputcount = 0; uint16_t gpiototal = 0; uint8_t gpioa = 0; uint8_t gpiob = 0; gpioa=MCP230xx_readGPIO(0); - if (mcp230xx_type == 2) gpiob=MCP230xx_readGPIO(1); + if (2 == mcp230xx_type) { gpiob=MCP230xx_readGPIO(1); } gpiototal=((uint16_t)gpiob << 8) | gpioa; for (uint8_t pinx = 0;pinx < mcp230xx_pincount;pinx++) { if (Settings.mcp230xx_config[pinx].pinmode >= 5) outputcount++;