Standardize on unconnected pin being -1

This commit is contained in:
Theo Arends 2021-02-14 13:06:19 +01:00
parent 7cb17713d7
commit e6bff6bf9e
20 changed files with 49 additions and 81 deletions

View File

@ -1320,8 +1320,8 @@ void DumpConvertTable(void) {
*/
#endif // ESP8266
uint32_t ICACHE_RAM_ATTR Pin(uint32_t gpio, uint32_t index = 0);
uint32_t ICACHE_RAM_ATTR Pin(uint32_t gpio, uint32_t index) {
int ICACHE_RAM_ATTR Pin(uint32_t gpio, uint32_t index = 0);
int ICACHE_RAM_ATTR Pin(uint32_t gpio, uint32_t index) {
uint16_t real_gpio = gpio << 5;
uint16_t mask = 0xFFE0;
if (index < GPIO_ANY) {
@ -1333,12 +1333,12 @@ uint32_t ICACHE_RAM_ATTR Pin(uint32_t gpio, uint32_t index) {
return i; // Pin number configured for gpio
}
}
return 99; // No pin used for gpio
return -1; // No pin used for gpio
}
bool PinUsed(uint32_t gpio, uint32_t index = 0);
bool PinUsed(uint32_t gpio, uint32_t index) {
return (Pin(gpio, index) < 99);
return (Pin(gpio, index) > -1);
}
uint32_t GetPin(uint32_t lpin) {
@ -1569,7 +1569,7 @@ bool ValidSpiPinUsed(uint32_t gpio) {
// ESP8266: If SPI pin selected chk if it's not one of the three Hardware SPI pins (12..14)
bool result = false;
if (PinUsed(gpio)) {
uint32_t pin = Pin(gpio);
int pin = Pin(gpio);
result = ((pin < 12) || (pin > 14));
}
return result;

View File

@ -407,12 +407,12 @@ void SetLedPowerAll(uint32_t state)
void SetLedLink(uint32_t state)
{
uint32_t led_pin = Pin(GPIO_LEDLNK);
int led_pin = Pin(GPIO_LEDLNK);
uint32_t led_inv = TasmotaGlobal.ledlnk_inverted;
if (99 == led_pin) { // Legacy - LED1 is status
if (-1 == led_pin) { // Legacy - LED1 is status
SetLedPowerIdx(0, state);
}
else if (led_pin < 99) {
else if (led_pin > -1) {
if (state) { state = 1; }
digitalWrite(led_pin, (led_inv) ? !state : state);
}

View File

@ -1334,7 +1334,7 @@ void CmndZbScan(void) {
buf.add32(0x07FFF800); // standard channels 11-26
buf.add8(0x04); // duration 2 ^ 4
ZigbeeEZSPSendCmd(buf.getBuffer(), buf.len());
#endif // USE_ZIGBEE_EZSP
ResponseCmndDone();
}
@ -1516,8 +1516,8 @@ void ZigbeeGlowPermitJoinLight(void) {
}
// change the led state
uint32_t led_pin = Pin(GPIO_LEDLNK);
if (led_pin < 99) {
int led_pin = Pin(GPIO_LEDLNK);
if (led_pin > -1) {
analogWrite(led_pin, TasmotaGlobal.ledlnk_inverted ? 1023 - led_power : led_power);
}
}

View File

@ -54,8 +54,8 @@ struct JAROLIFT_DEVICE {
uint64_t pack = 0; // Contains data to send.
int count = 0;
uint32_t serial = 0x0;
uint8_t port_tx;
uint8_t port_rx;
int8_t port_tx;
int8_t port_rx;
} jaroliftDevice;
void CmdSet(void)

View File

@ -204,8 +204,8 @@ uint32_t WcSetup(int32_t fsiz) {
config.pin_href = Pin(GPIO_WEBCAM_HREF); // HREF_GPIO_NUM;
config.pin_sscb_sda = Pin(GPIO_WEBCAM_SIOD); // SIOD_GPIO_NUM;
config.pin_sscb_scl = Pin(GPIO_WEBCAM_SIOC); // SIOC_GPIO_NUM;
config.pin_pwdn = (PinUsed(GPIO_WEBCAM_PWDN)) ? Pin(GPIO_WEBCAM_PWDN) : -1; // PWDN_GPIO_NUM;
config.pin_reset = (PinUsed(GPIO_WEBCAM_RESET)) ? Pin(GPIO_WEBCAM_RESET) : -1; // RESET_GPIO_NUM;
config.pin_pwdn = Pin(GPIO_WEBCAM_PWDN); // PWDN_GPIO_NUM;
config.pin_reset = Pin(GPIO_WEBCAM_RESET); // RESET_GPIO_NUM;
AddLog(LOG_LEVEL_DEBUG, PSTR("CAM: User template"));
} else {

View File

@ -133,7 +133,7 @@ void EthernetInit(void) {
WiFi.onEvent(EthernetEvent);
int eth_power = (PinUsed(GPIO_ETH_PHY_POWER)) ? Pin(GPIO_ETH_PHY_POWER) : -1;
int eth_power = Pin(GPIO_ETH_PHY_POWER);
int eth_mdc = Pin(GPIO_ETH_PHY_MDC);
int eth_mdio = Pin(GPIO_ETH_PHY_MDIO);
if (!ETH.begin(Settings.eth_address, eth_power, eth_mdc, eth_mdio, (eth_phy_type_t)Settings.eth_type, (eth_clock_mode_t)Settings.eth_clk_mode)) {

View File

@ -70,11 +70,6 @@ void SSD1306InitDriver(void)
Settings.display_height = 64;
}
uint8_t reset_pin = -1;
if (PinUsed(GPIO_OLED_RESET)) {
reset_pin = Pin(GPIO_OLED_RESET);
}
// allocate screen buffer
if (buffer) { free(buffer); }
buffer = (unsigned char*)calloc((Settings.display_width * Settings.display_height) / 8,1);
@ -82,8 +77,8 @@ void SSD1306InitDriver(void)
// init renderer
// oled1306 = new Adafruit_SSD1306(SSD1306_LCDWIDTH,SSD1306_LCDHEIGHT);
oled1306 = new Adafruit_SSD1306(Settings.display_width, Settings.display_height, &Wire, reset_pin);
oled1306->begin(SSD1306_SWITCHCAPVCC, Settings.display_address[0], reset_pin >= 0);
oled1306 = new Adafruit_SSD1306(Settings.display_width, Settings.display_height, &Wire, Pin(GPIO_OLED_RESET));
oled1306->begin(SSD1306_SWITCHCAPVCC, Settings.display_address[0], Pin(GPIO_OLED_RESET) >= 0);
renderer = oled1306;
renderer->DisplayInit(DISPLAY_INIT_MODE, Settings.display_size, Settings.display_rotate, Settings.display_font);
renderer->setTextColor(1,0);

View File

@ -69,29 +69,17 @@ void ILI9341_InitDriver()
ili9341_2 = new ILI9341_2(5, -2, 15, -2);
#else
// There are displays without CS
int8_t spi_cs_pin = -1;
if (PinUsed(GPIO_ILI9341_CS)) {
spi_cs_pin = Pin(GPIO_ILI9341_CS);
}
int8_t backlight_pin = -1;
if (PinUsed(GPIO_BACKLIGHT)) {
backlight_pin = Pin(GPIO_BACKLIGHT);
}
int8_t oled_reset_pin = -1;
if (PinUsed(GPIO_OLED_RESET)) {
oled_reset_pin = Pin(GPIO_OLED_RESET);
}
// There are displays without CS
// check for special case with 2 SPI busses (ESP32 bitcoin)
if (TasmotaGlobal.soft_spi_enabled) {
// Init renderer, may use hardware spi, however we use SSPI defintion because SD card uses SPI definition (2 spi busses)
if (PinUsed(GPIO_SSPI_MOSI) && PinUsed(GPIO_SSPI_MISO) && PinUsed(GPIO_SSPI_SCLK)) {
ili9341_2 = new ILI9341_2(spi_cs_pin, Pin(GPIO_SSPI_MOSI), Pin(GPIO_SSPI_MISO), Pin(GPIO_SSPI_SCLK), oled_reset_pin, Pin(GPIO_ILI9341_DC), backlight_pin, 2);
ili9341_2 = new ILI9341_2(Pin(GPIO_ILI9341_CS), Pin(GPIO_SSPI_MOSI), Pin(GPIO_SSPI_MISO), Pin(GPIO_SSPI_SCLK), Pin(GPIO_OLED_RESET), Pin(GPIO_ILI9341_DC), Pin(GPIO_BACKLIGHT), 2);
}
} else if (TasmotaGlobal.spi_enabled) {
if (PinUsed(GPIO_ILI9341_DC)) {
ili9341_2 = new ILI9341_2(spi_cs_pin, Pin(GPIO_SPI_MOSI), Pin(GPIO_SPI_MISO), Pin(GPIO_SPI_CLK), oled_reset_pin, Pin(GPIO_ILI9341_DC), backlight_pin, 1);
ili9341_2 = new ILI9341_2(Pin(GPIO_ILI9341_CS), Pin(GPIO_SPI_MOSI), Pin(GPIO_SPI_MISO), Pin(GPIO_SPI_CLK), Pin(GPIO_OLED_RESET), Pin(GPIO_ILI9341_DC), Pin(GPIO_BACKLIGHT), 1);
}
}
#endif // USE_M5STACK_CORE2

View File

@ -65,7 +65,7 @@ void ILI9488_InitDriver(void) {
fg_color = ILI9488_WHITE;
bg_color = ILI9488_BLACK;
uint8_t bppin = BACKPLANE_PIN;
int8_t bppin = BACKPLANE_PIN;
if (PinUsed(GPIO_BACKLIGHT)) {
bppin = Pin(GPIO_BACKLIGHT);
}

View File

@ -86,22 +86,12 @@ void ST7789_InitDriver(void) {
bppin = Pin(GPIO_BACKLIGHT);
}
int8_t reset = -1;
if (PinUsed(GPIO_OLED_RESET)) {
reset = Pin(GPIO_OLED_RESET);
}
int8_t cs = -1;
if (PinUsed(GPIO_ST7789_CS)) {
cs = Pin(GPIO_ST7789_CS);
}
// init renderer, may use hardware spi
if (TasmotaGlobal.soft_spi_enabled) {
st7789 = new Arduino_ST7789(Pin(GPIO_ST7789_DC), reset, Pin(GPIO_SSPI_MOSI), Pin(GPIO_SSPI_SCLK), cs, bppin);
st7789 = new Arduino_ST7789(Pin(GPIO_ST7789_DC), Pin(GPIO_OLED_RESET), Pin(GPIO_SSPI_MOSI), Pin(GPIO_SSPI_SCLK), Pin(GPIO_ST7789_CS), bppin);
}
else if (TasmotaGlobal.spi_enabled) {
st7789 = new Arduino_ST7789(Pin(GPIO_ST7789_DC), reset, cs, bppin);
st7789 = new Arduino_ST7789(Pin(GPIO_ST7789_DC), Pin(GPIO_OLED_RESET), Pin(GPIO_ST7789_CS), bppin);
}
st7789->init(Settings.display_width,Settings.display_height);

View File

@ -61,17 +61,12 @@ void SSD1331_InitDriver() {
fg_color = SSD1331_WHITE;
bg_color = SSD1331_BLACK;
int8_t reset = -1;
if (PinUsed(GPIO_OLED_RESET)) {
reset = Pin(GPIO_OLED_RESET);
}
// init renderer
if (TasmotaGlobal.soft_spi_enabled) {
ssd1331 = new Adafruit_SSD1331(Pin(GPIO_SSD1331_CS), Pin(GPIO_SSD1331_DC), Pin(GPIO_SSPI_MOSI), Pin(GPIO_SSPI_SCLK), reset);
ssd1331 = new Adafruit_SSD1331(Pin(GPIO_SSD1331_CS), Pin(GPIO_SSD1331_DC), Pin(GPIO_SSPI_MOSI), Pin(GPIO_SSPI_SCLK), Pin(GPIO_OLED_RESET));
}
else if (TasmotaGlobal.spi_enabled) {
ssd1331 = new Adafruit_SSD1331(&SPI, Pin(GPIO_SSD1331_CS), Pin(GPIO_SSD1331_DC), reset);
ssd1331 = new Adafruit_SSD1331(&SPI, Pin(GPIO_SSD1331_CS), Pin(GPIO_SSD1331_DC), Pin(GPIO_OLED_RESET));
}
delay(100);

View File

@ -26,8 +26,8 @@
#define XLGT_02 2
struct MY92X1 {
uint8_t pdi_pin = 0;
uint8_t pdcki_pin = 0;
int8_t pdi_pin = 0;
int8_t pdcki_pin = 0;
uint8_t model = 0;
} My92x1;

View File

@ -31,9 +31,9 @@
#define D_LOG_SM16716 "SM16716: "
struct SM16716 {
uint8_t pin_clk = 0;
uint8_t pin_dat = 0;
uint8_t pin_sel = 0;
int8_t pin_clk = 0;
int8_t pin_dat = 0;
int8_t pin_sel = 0;
bool enabled = false;
} Sm16716;
@ -62,7 +62,7 @@ void SM16716_SendByte(uint8_t v)
void SM16716_Update(uint8_t duty_r, uint8_t duty_g, uint8_t duty_b)
{
if (Sm16716.pin_sel < 99) {
if (Sm16716.pin_sel > -1) {
bool should_enable = (duty_r | duty_g | duty_b);
if (!Sm16716.enabled && should_enable) {
DEBUG_DRIVER_LOG(PSTR(D_LOG_SM16716 "turning color on"));
@ -104,7 +104,7 @@ bool SM16716_ModuleSelected(void)
Sm16716.pin_dat = Pin(GPIO_SM16716_DAT);
Sm16716.pin_sel = Pin(GPIO_SM16716_SEL);
DEBUG_DRIVER_LOG(PSTR(D_LOG_SM16716 "ModuleSelected; clk_pin=%d, dat_pin=%d)"), Sm16716.pin_clk, Sm16716.pin_dat);
return (Sm16716.pin_clk < 99) && (Sm16716.pin_dat < 99);
return (Sm16716.pin_clk > -1) && (Sm16716.pin_dat > -1);
}
*/
@ -165,7 +165,7 @@ void Sm16716ModuleSelected(void)
pinMode(Sm16716.pin_dat, OUTPUT);
digitalWrite(Sm16716.pin_dat, LOW);
if (Sm16716.pin_sel < 99) {
if (Sm16716.pin_sel > -1) {
pinMode(Sm16716.pin_sel, OUTPUT);
digitalWrite(Sm16716.pin_sel, LOW);
// no need to call SM16716_Init here, it will be called after sel goes HIGH

View File

@ -456,12 +456,12 @@ void TInfoInit(void)
}
if (PinUsed(GPIO_TELEINFO_RX)) {
uint8_t rx_pin = Pin(GPIO_TELEINFO_RX);
int8_t rx_pin = Pin(GPIO_TELEINFO_RX);
AddLog(LOG_LEVEL_INFO, PSTR("TIC: RX on GPIO%d, baudrate %d"), rx_pin, baudrate);
// Enable Teleinfo pin used, control it
if (PinUsed(GPIO_TELEINFO_ENABLE)) {
uint8_t en_pin = Pin(GPIO_TELEINFO_ENABLE);
int8_t en_pin = Pin(GPIO_TELEINFO_ENABLE);
pinMode(en_pin, OUTPUT);
digitalWrite(en_pin, HIGH);
AddLog(LOG_LEVEL_INFO, PSTR("TIC: Enable with GPIO%d"), en_pin);
@ -484,7 +484,7 @@ void TInfoInit(void)
// this is not working, need to call SetSerialConfig after
if (TInfoSerial->begin(baudrate)) {
#ifdef ESP8266
if (TInfoSerial->hardwareSerial() ) {
ClaimSerial();

View File

@ -54,8 +54,8 @@ struct DS18X20STRUCT {
float temperature;
} ds18x20_sensor[DS18X20_MAX_SENSORS];
uint8_t ds18x20_sensors = 0;
uint8_t ds18x20_pin = 0; // Shelly GPIO3 input only
uint8_t ds18x20_pin_out = 0; // Shelly GPIO00 output only
int8_t ds18x20_pin = 0; // Shelly GPIO3 input only
int8_t ds18x20_pin_out = 0; // Shelly GPIO00 output only
bool ds18x20_dual_mode = false; // Single pin mode
char ds18x20_types[17];
#ifdef W1_PARASITE_POWER

View File

@ -39,7 +39,7 @@ bool dht_active = true; // DHT configured
bool dht_dual_mode = false; // Single pin mode
struct DHTSTRUCT {
uint8_t pin;
int8_t pin;
uint8_t type;
uint8_t lastresult;
char stype[12];

View File

@ -37,8 +37,8 @@ enum {
SHT1X_CMD_SOFT_RESET = B00011110
};
uint8_t sht_sda_pin;
uint8_t sht_scl_pin;
int8_t sht_sda_pin;
int8_t sht_scl_pin;
uint8_t sht_type = 0;
char sht_types[] = "SHT1X";
uint8_t sht_valid = 0;

View File

@ -33,9 +33,9 @@
#define TM1638_CLOCK_DELAY 1 // uSec
uint8_t tm1638_type = 1;
uint8_t tm1638_clock_pin = 0;
uint8_t tm1638_data_pin = 0;
uint8_t tm1638_strobe_pin = 0;
int8_t tm1638_clock_pin = 0;
int8_t tm1638_data_pin = 0;
int8_t tm1638_strobe_pin = 0;
uint8_t tm1638_displays = 8;
uint8_t tm1638_active_display = 1;
uint8_t tm1638_intensity = 0;

View File

@ -78,8 +78,8 @@ struct HX {
uint8_t calibrate_step = HX_CAL_END;
uint8_t calibrate_timer = 0;
uint8_t calibrate_msg = 0;
uint8_t pin_sck;
uint8_t pin_dout;
int8_t pin_sck;
int8_t pin_dout;
bool tare_flg = false;
bool weight_changed = false;
uint16_t weight_delta = 4;

View File

@ -39,8 +39,8 @@
#define MGC3130_I2C_ADDR 0x42
uint8_t MGC3130_xfer = 0;
uint8_t MGC3130_reset = 0;
int8_t MGC3130_xfer = 0;
int8_t MGC3130_reset = 0;
bool MGC3130_type = false;
char MGC3130stype[] = "MGC3130";