diff --git a/framework/settings.c b/framework/settings.c index 6ad1870..42277bd 100644 --- a/framework/settings.c +++ b/framework/settings.c @@ -270,7 +270,7 @@ void settings_load_ini_begin(void) void settings_load_ini_key(const char *restrict section, const char *restrict key, const char *restrict value) { - dbg("[%s] %s = %s", section, key, value); +// dbg("[%s] %s = %s", section, key, value); static char namebuf[INI_KEY_MAX]; // SYSTEM and UNITS files must be separate. diff --git a/framework/unit_registry.c b/framework/unit_registry.c index 6978429..7af2d51 100644 --- a/framework/unit_registry.c +++ b/framework/unit_registry.c @@ -74,6 +74,7 @@ static void free_le_unit(UlistEntry *le) { Unit *const pUnit = &le->unit; + assert_param(pUnit->data); pUnit->driver->deInit(pUnit); // Name is not expected to be freed by the deInit() function // - was alloc'd in the settings load loop diff --git a/units/digital_in/unit_din.c b/units/digital_in/unit_din.c index 642e546..f55247e 100644 --- a/units/digital_in/unit_din.c +++ b/units/digital_in/unit_din.c @@ -164,6 +164,8 @@ static void DI_deInit(Unit *unit) struct priv *priv = unit->data; if (unit->status == E_SUCCESS) { + assert_param(priv->port); + bool suc = true; uint16_t mask = 1; for (int i = 0; i < 16; i++, mask <<= 1) { diff --git a/units/digital_out/unit_dout.c b/units/digital_out/unit_dout.c index 850de4f..a573208 100644 --- a/units/digital_out/unit_dout.c +++ b/units/digital_out/unit_dout.c @@ -155,6 +155,8 @@ static void DO_deInit(Unit *unit) // de-init the pins only if inited correctly if (unit->status == E_SUCCESS) { + assert_param(priv->port); + bool suc = true; uint16_t mask = 1; for (int i = 0; i < 16; i++, mask <<= 1) { diff --git a/units/i2c/unit_i2c.c b/units/i2c/unit_i2c.c index 30d2d57..c410c91 100644 --- a/units/i2c/unit_i2c.c +++ b/units/i2c/unit_i2c.c @@ -193,24 +193,24 @@ static error_t UI2C_init(Unit *unit) TRY(rsc_claim(unit, r_sda)); TRY(rsc_claim(unit, r_scl)); - GPIO_TypeDef *port = port2periph(portname, &suc); + priv->port = port2periph(portname, &suc); uint32_t ll_pin_scl = pin2ll(pin_scl, &suc); uint32_t ll_pin_sda = pin2ll(pin_sda, &suc); if (!suc) return E_BAD_CONFIG; // configure AF - if (pin_scl < 8) LL_GPIO_SetAFPin_0_7(port, ll_pin_scl, af_i2c); - else LL_GPIO_SetAFPin_8_15(port, ll_pin_scl, af_i2c); + if (pin_scl < 8) LL_GPIO_SetAFPin_0_7(priv->port, ll_pin_scl, af_i2c); + else LL_GPIO_SetAFPin_8_15(priv->port, ll_pin_scl, af_i2c); - if (pin_sda < 8) LL_GPIO_SetAFPin_0_7(port, ll_pin_sda, af_i2c); - else LL_GPIO_SetAFPin_8_15(port, ll_pin_sda, af_i2c); + if (pin_sda < 8) LL_GPIO_SetAFPin_0_7(priv->port, ll_pin_sda, af_i2c); + else LL_GPIO_SetAFPin_8_15(priv->port, ll_pin_sda, af_i2c); - LL_GPIO_SetPinMode(port, ll_pin_scl, LL_GPIO_MODE_ALTERNATE); - LL_GPIO_SetPinMode(port, ll_pin_sda, LL_GPIO_MODE_ALTERNATE); + LL_GPIO_SetPinMode(priv->port, ll_pin_scl, LL_GPIO_MODE_ALTERNATE); + LL_GPIO_SetPinMode(priv->port, ll_pin_sda, LL_GPIO_MODE_ALTERNATE); // set as OpenDrain (this may not be needed - TODO check) - LL_GPIO_SetPinOutputType(port, ll_pin_scl, LL_GPIO_OUTPUT_OPENDRAIN); - LL_GPIO_SetPinOutputType(port, ll_pin_sda, LL_GPIO_OUTPUT_OPENDRAIN); + LL_GPIO_SetPinOutputType(priv->port, ll_pin_scl, LL_GPIO_OUTPUT_OPENDRAIN); + LL_GPIO_SetPinOutputType(priv->port, ll_pin_sda, LL_GPIO_OUTPUT_OPENDRAIN); if (priv->periph_num == 1) { @@ -243,6 +243,9 @@ static void UI2C_deInit(Unit *unit) // de-init the pins & peripheral only if inited correctly if (unit->status == E_SUCCESS) { + assert_param(priv->periph); + assert_param(priv->port); + LL_I2C_DeInit(priv->periph); if (priv->periph_num == 1) { diff --git a/units/neopixel/unit_neopixel.c b/units/neopixel/unit_neopixel.c index ef46fa2..b5b1a21 100644 --- a/units/neopixel/unit_neopixel.c +++ b/units/neopixel/unit_neopixel.c @@ -124,6 +124,7 @@ static void Npx_deInit(Unit *unit) struct priv *priv = unit->data; if (unit->status == E_SUCCESS) { + assert_param(priv->port); // configure the pin as analog LL_GPIO_SetPinMode(priv->port, priv->ll_pin, LL_GPIO_MODE_ANALOG); }