From 0f1e03fa512312b0f6ac554a0ccbe8403be77ffa Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Wed, 2 Nov 2022 03:42:38 +0300 Subject: [PATCH] Fix: proper deinit of gpio and spi bus in NRF24 driver --- applications/plugins/mousejacker/mousejacker.c | 2 +- applications/plugins/nrfsniff/nrfsniff.c | 2 +- firmware/targets/f7/api_symbols.csv | 3 ++- lib/drivers/nrf24.c | 7 +++++++ lib/drivers/nrf24.h | 5 +++++ 5 files changed, 16 insertions(+), 3 deletions(-) diff --git a/applications/plugins/mousejacker/mousejacker.c b/applications/plugins/mousejacker/mousejacker.c index e050f0a25..79067bce3 100644 --- a/applications/plugins/mousejacker/mousejacker.c +++ b/applications/plugins/mousejacker/mousejacker.c @@ -382,7 +382,7 @@ int32_t mousejacker_app(void* p) { } furi_thread_free(plugin_state->mjthread); - furi_hal_spi_release(nrf24_HANDLE); + nrf24_deinit(); view_port_enabled_set(view_port, false); gui_remove_view_port(gui, view_port); furi_record_close(RECORD_GUI); diff --git a/applications/plugins/nrfsniff/nrfsniff.c b/applications/plugins/nrfsniff/nrfsniff.c index acf413d65..315db831c 100644 --- a/applications/plugins/nrfsniff/nrfsniff.c +++ b/applications/plugins/nrfsniff/nrfsniff.c @@ -440,7 +440,7 @@ int32_t nrfsniff_app(void* p) { sample_time = DEFAULT_SAMPLE_TIME; target_rate = 8; // rate can be either 8 (2Mbps) or 0 (1Mbps) sniffing_state = false; - furi_hal_spi_release(nrf24_HANDLE); + nrf24_deinit(); view_port_enabled_set(view_port, false); gui_remove_view_port(gui, view_port); furi_record_close(RECORD_GUI); diff --git a/firmware/targets/f7/api_symbols.csv b/firmware/targets/f7/api_symbols.csv index a05319b9d..77e93c0ca 100644 --- a/firmware/targets/f7/api_symbols.csv +++ b/firmware/targets/f7/api_symbols.csv @@ -1,5 +1,5 @@ entry,status,name,type,params -Version,+,8.2,, +Version,+,8.3,, Header,+,applications/services/bt/bt_service/bt.h,, Header,+,applications/services/cli/cli.h,, Header,+,applications/services/cli/cli_vcp.h,, @@ -1790,6 +1790,7 @@ Function,+,notification_message,void,"NotificationApp*, const NotificationSequen Function,+,notification_message_block,void,"NotificationApp*, const NotificationSequence*" Function,-,nrand48,long,unsigned short[3] Function,-,nrf24_configure,void,"FuriHalSpiBusHandle*, uint8_t, uint8_t*, uint8_t*, uint8_t, uint8_t, _Bool, _Bool" +Function,+,nrf24_deinit,void, Function,+,nrf24_find_channel,uint8_t,"FuriHalSpiBusHandle*, uint8_t*, uint8_t*, uint8_t, uint8_t, uint8_t, uint8_t, _Bool" Function,-,nrf24_flush_rx,uint8_t,FuriHalSpiBusHandle* Function,-,nrf24_flush_tx,uint8_t,FuriHalSpiBusHandle* diff --git a/lib/drivers/nrf24.c b/lib/drivers/nrf24.c index 2905072d3..8b3776445 100644 --- a/lib/drivers/nrf24.c +++ b/lib/drivers/nrf24.c @@ -12,6 +12,13 @@ void nrf24_init() { furi_hal_gpio_write(nrf24_CE_PIN, false); } +void nrf24_deinit() { + furi_hal_spi_release(nrf24_HANDLE); + furi_hal_spi_bus_handle_deinit(nrf24_HANDLE); + furi_hal_gpio_write(nrf24_CE_PIN, false); + furi_hal_gpio_init(nrf24_CE_PIN, GpioModeAnalog, GpioPullNo, GpioSpeedLow); +} + void nrf24_spi_trx( FuriHalSpiBusHandle* handle, uint8_t* tx, diff --git a/lib/drivers/nrf24.h b/lib/drivers/nrf24.h index 584eaaea7..3cfcfe089 100644 --- a/lib/drivers/nrf24.h +++ b/lib/drivers/nrf24.h @@ -116,6 +116,11 @@ uint8_t nrf24_set_tx_mode(FuriHalSpiBusHandle* handle); */ void nrf24_init(); +/** Must call this when we end using nrf24 device + * + */ +void nrf24_deinit(); + /** Send flush rx command * * @param handle - pointer to FuriHalSpiHandle