@@ -23,6 +23,7 @@ typedef struct {
23
23
} JsGpioPinInst ;
24
24
25
25
ARRAY_DEF (ManagedPinsArray , JsGpioPinInst * , M_PTR_OPLIST ); //-V575
26
+ #define M_OPL_ManagedPinsArray_t () ARRAY_OPLIST(ManagedPinsArray)
26
27
27
28
/**
28
29
* Per-module instance control structure
@@ -444,20 +445,26 @@ static void js_gpio_destroy(void* inst) {
444
445
JsGpioInst * module = (JsGpioInst * )inst ;
445
446
446
447
// reset pins
447
- ManagedPinsArray_it_t iterator ;
448
- for (ManagedPinsArray_it (iterator , module -> managed_pins ); !ManagedPinsArray_end_p (iterator );
449
- ManagedPinsArray_next (iterator )) {
450
- JsGpioPinInst * manager_data = * ManagedPinsArray_cref (iterator );
451
- if (manager_data -> had_interrupt ) {
452
- furi_hal_gpio_disable_int_callback (manager_data -> pin );
453
- furi_hal_gpio_remove_int_callback (manager_data -> pin );
448
+ for
449
+ M_EACH (item , module -> managed_pins , ManagedPinsArray_t ) {
450
+ JsGpioPinInst * manager_data = * item ;
451
+
452
+ if (manager_data -> had_interrupt ) {
453
+ furi_hal_gpio_disable_int_callback (manager_data -> pin );
454
+ furi_hal_gpio_remove_int_callback (manager_data -> pin );
455
+ }
456
+ if (manager_data -> pwm_output != FuriHalPwmOutputIdNone ) {
457
+ if (furi_hal_pwm_is_running (manager_data -> pwm_output ))
458
+ furi_hal_pwm_stop (manager_data -> pwm_output );
459
+ }
460
+ furi_hal_gpio_init (manager_data -> pin , GpioModeAnalog , GpioPullNo , GpioSpeedLow );
461
+
462
+ furi_event_loop_maybe_unsubscribe (module -> loop , manager_data -> interrupt_semaphore );
463
+ furi_semaphore_free (manager_data -> interrupt_semaphore );
464
+
465
+ free (manager_data -> interrupt_contract );
466
+ free (manager_data );
454
467
}
455
- furi_hal_gpio_init (manager_data -> pin , GpioModeAnalog , GpioPullNo , GpioSpeedLow );
456
- furi_event_loop_maybe_unsubscribe (module -> loop , manager_data -> interrupt_semaphore );
457
- furi_semaphore_free (manager_data -> interrupt_semaphore );
458
- free (manager_data -> interrupt_contract );
459
- free (manager_data );
460
- }
461
468
462
469
// free buffers
463
470
furi_hal_adc_release (module -> adc_handle );
0 commit comments