diff --git a/main/driver.c b/main/driver.c index 01f0b4e..faabfc1 100644 --- a/main/driver.c +++ b/main/driver.c @@ -477,10 +477,13 @@ IRAM_ATTR static void driver_delay_ms (uint32_t ms, void (*callback)(void)) xTimerDelete(xDelayTimer, 3); xDelayTimer = NULL; } - xDelayTimer = xTimerCreate("msDelay", pdMS_TO_TICKS(ms), pdFALSE, callback, vTimerCallback); - xTimerStartFromISR(xDelayTimer, &xHigherPriorityTaskWoken); - if(xHigherPriorityTaskWoken) - portYIELD_FROM_ISR(); + if(ms) { + xDelayTimer = xTimerCreate("msDelay", pdMS_TO_TICKS(ms), pdFALSE, callback, vTimerCallback); + xTimerStartFromISR(xDelayTimer, &xHigherPriorityTaskWoken); + if(xHigherPriorityTaskWoken) + portYIELD_FROM_ISR(); + } else + callback(); } else { if(xDelayTimer) { xTimerDelete(xDelayTimer, 3); @@ -2735,7 +2738,7 @@ bool driver_init (void) #else hal.info = "ESP32"; #endif - hal.driver_version = "240127"; + hal.driver_version = "240202"; hal.driver_url = GRBL_URL "/ESP32"; #ifdef BOARD_NAME hal.board = BOARD_NAME; diff --git a/main/ioports.c b/main/ioports.c index 8c332a9..64dc8f5 100644 --- a/main/ioports.c +++ b/main/ioports.c @@ -326,8 +326,7 @@ static void on_setting_changed (setting_id_t id) switch(id) { case Settings_IoPort_InvertIn: - port = digital.in.n_ports; - do { + if((port = digital.in.n_ports)) do { port--; aux_in[port].mode.inverted = !!(settings.ioport.invert_in.mask & (1 << port)); if(aux_in[port].aux_ctrl) { @@ -341,8 +340,7 @@ static void on_setting_changed (setting_id_t id) break; case Settings_IoPort_InvertOut: - if(invert_digital_out.mask != settings.ioport.invert_out.mask) { - port = digital.out.n_ports; + if((port = digital.out.n_ports) && invert_digital_out.mask != settings.ioport.invert_out.mask) { do { port--; aux_out[port].mode.inverted = !!(settings.ioport.invert_out.mask & (1 << port)); @@ -355,8 +353,7 @@ static void on_setting_changed (setting_id_t id) break; case Setting_ControlInvertMask: - port = digital.in.n_ports; - do { + if((port = digital.in.n_ports)) do { if(aux_in[--port].aux_ctrl) { write = true; if(settings.control_invert.mask & aux_in[port].aux_ctrl->cap.mask) @@ -379,18 +376,17 @@ static void on_setting_changed (setting_id_t id) static void on_settings_loaded (void) { bool write = false; - uint_fast8_t port = digital.out.n_ports; + uint_fast8_t port; invert_digital_out = settings.ioport.invert_out; - if(digital.out.n_ports) do { + if((port = digital.out.n_ports)) do { port--; aux_out[port].mode.inverted = !!(settings.ioport.invert_out.mask & (1 << port)); DIGITAL_OUT(aux_out[port].pin, aux_out[port].mode.inverted); } while(port); - port = digital.in.n_ports; - do { + if((port = digital.in.n_ports)) do { if(aux_in[--port].aux_ctrl && !!(settings.control_invert.mask & aux_in[port].aux_ctrl->cap.mask) != !!(settings.ioport.invert_in.mask & (1 << port))) {