HTotoo 9 месяцев назад
Родитель
Сommit
566f9bf9a9
4 измененных файлов с 79 добавлено и 77 удалено
  1. 2 2
      application.fam
  2. 28 28
      lib/nrf24/nrf24.c
  3. 41 41
      lib/nrf24/nrf24.h
  4. 8 6
      nrf24channelscanner.c

+ 2 - 2
application.fam

@@ -7,8 +7,8 @@ App(
     fap_weburl="https://github.com/htotoo/NRF24ChannelScanner",
     fap_weburl="https://github.com/htotoo/NRF24ChannelScanner",
     stack_size=2 * 1024,
     stack_size=2 * 1024,
     requires=["gui"],
     requires=["gui"],
-    fap_category="GPIO",
-    fap_version=(1, 3),
+    fap_category="GPIO/NRF24",
+    fap_version=(1, 4),
     fap_icon_assets="images",
     fap_icon_assets="images",
     fap_icon="fapicon.png",
     fap_icon="fapicon.png",
     fap_description="Scans 2.4Ghz frequency for usage data.",
     fap_description="Scans 2.4Ghz frequency for usage data.",

+ 28 - 28
lib/nrf24/nrf24.c

@@ -6,20 +6,20 @@
 #include <string.h>
 #include <string.h>
 
 
 void nrf24_init() {
 void nrf24_init() {
-    // this is needed if multiple SPI devices are connected to the same bus but with different CS pins
-	#ifdef XTREME_SETTINGS_PATH
-	
-    if(xtreme_settings.spi_nrf24_handle == SpiDefault) {
+// this is needed if multiple SPI devices are connected to the same bus but with different CS pins
+#ifdef MOMENTUM_SETTINGS_PATH
+
+    if(momentum_settings.spi_nrf24_handle == SpiDefault) {
         furi_hal_gpio_init_simple(&gpio_ext_pc3, GpioModeOutputPushPull);
         furi_hal_gpio_init_simple(&gpio_ext_pc3, GpioModeOutputPushPull);
         furi_hal_gpio_write(&gpio_ext_pc3, true);
         furi_hal_gpio_write(&gpio_ext_pc3, true);
-    } else if(xtreme_settings.spi_nrf24_handle == SpiExtra) {
+    } else if(momentum_settings.spi_nrf24_handle == SpiExtra) {
         furi_hal_gpio_init_simple(&gpio_ext_pa4, GpioModeOutputPushPull);
         furi_hal_gpio_init_simple(&gpio_ext_pa4, GpioModeOutputPushPull);
         furi_hal_gpio_write(&gpio_ext_pa4, true);
         furi_hal_gpio_write(&gpio_ext_pa4, true);
     }
     }
-	#else
-		furi_hal_gpio_init_simple(&gpio_ext_pc3, GpioModeOutputPushPull);
-		furi_hal_gpio_write(&gpio_ext_pc3, true);
-	#endif
+#else
+    furi_hal_gpio_init_simple(&gpio_ext_pc3, GpioModeOutputPushPull);
+    furi_hal_gpio_write(&gpio_ext_pc3, true);
+#endif
     furi_hal_spi_bus_handle_init(nrf24_HANDLE);
     furi_hal_spi_bus_handle_init(nrf24_HANDLE);
     furi_hal_spi_acquire(nrf24_HANDLE);
     furi_hal_spi_acquire(nrf24_HANDLE);
     furi_hal_gpio_init(nrf24_CE_PIN, GpioModeOutputPushPull, GpioPullUp, GpioSpeedVeryHigh);
     furi_hal_gpio_init(nrf24_CE_PIN, GpioModeOutputPushPull, GpioPullUp, GpioSpeedVeryHigh);
@@ -32,20 +32,20 @@ void nrf24_deinit() {
     furi_hal_gpio_write(nrf24_CE_PIN, false);
     furi_hal_gpio_write(nrf24_CE_PIN, false);
     furi_hal_gpio_init(nrf24_CE_PIN, GpioModeAnalog, GpioPullNo, GpioSpeedLow);
     furi_hal_gpio_init(nrf24_CE_PIN, GpioModeAnalog, GpioPullNo, GpioSpeedLow);
 
 
-	#ifdef XTREME_SETTINGS_PATH
-		// resetting the CS pins to floating
-		if(xtreme_settings.spi_nrf24_handle == SpiDefault) {
-			furi_hal_gpio_init_simple(&gpio_ext_pc3, GpioModeAnalog);
-		} else if(xtreme_settings.spi_nrf24_handle == SpiExtra) {
-			furi_hal_gpio_init_simple(&gpio_ext_pa4, GpioModeAnalog);
-		}
-	#else
-		furi_hal_gpio_init_simple(&gpio_ext_pc3, GpioModeAnalog);
-	#endif
+#ifdef MOMENTUM_SETTINGS_PATH
+    // resetting the CS pins to floating
+    if(momentum_settings.spi_nrf24_handle == SpiDefault) {
+        furi_hal_gpio_init_simple(&gpio_ext_pc3, GpioModeAnalog);
+    } else if(momentum_settings.spi_nrf24_handle == SpiExtra) {
+        furi_hal_gpio_init_simple(&gpio_ext_pa4, GpioModeAnalog);
+    }
+#else
+    furi_hal_gpio_init_simple(&gpio_ext_pc3, GpioModeAnalog);
+#endif
 }
 }
 
 
 void nrf24_spi_trx(
 void nrf24_spi_trx(
-    FuriHalSpiBusHandle* handle,
+    const FuriHalSpiBusHandle* handle,
     uint8_t* tx,
     uint8_t* tx,
     uint8_t* rx,
     uint8_t* rx,
     uint8_t size,
     uint8_t size,
@@ -56,14 +56,14 @@ void nrf24_spi_trx(
     furi_hal_gpio_write(handle->cs, true);
     furi_hal_gpio_write(handle->cs, true);
 }
 }
 
 
-uint8_t nrf24_write_reg(FuriHalSpiBusHandle* handle, uint8_t reg, uint8_t data) {
+uint8_t nrf24_write_reg(const FuriHalSpiBusHandle* handle, uint8_t reg, uint8_t data) {
     uint8_t tx[2] = {W_REGISTER | (REGISTER_MASK & reg), data};
     uint8_t tx[2] = {W_REGISTER | (REGISTER_MASK & reg), data};
     uint8_t rx[2] = {0};
     uint8_t rx[2] = {0};
     nrf24_spi_trx(handle, tx, rx, 2, nrf24_TIMEOUT);
     nrf24_spi_trx(handle, tx, rx, 2, nrf24_TIMEOUT);
     return rx[0];
     return rx[0];
 }
 }
 
 
-uint8_t nrf24_read_reg(FuriHalSpiBusHandle* handle, uint8_t reg, uint8_t* data, uint8_t size) {
+uint8_t nrf24_read_reg(const FuriHalSpiBusHandle* handle, uint8_t reg, uint8_t* data, uint8_t size) {
     uint8_t tx[size + 1];
     uint8_t tx[size + 1];
     uint8_t rx[size + 1];
     uint8_t rx[size + 1];
     memset(rx, 0, size + 1);
     memset(rx, 0, size + 1);
@@ -74,27 +74,27 @@ uint8_t nrf24_read_reg(FuriHalSpiBusHandle* handle, uint8_t reg, uint8_t* data,
     return rx[0];
     return rx[0];
 }
 }
 
 
-uint8_t nrf24_flush_rx(FuriHalSpiBusHandle* handle) {
+uint8_t nrf24_flush_rx(const FuriHalSpiBusHandle* handle) {
     uint8_t tx[] = {FLUSH_RX};
     uint8_t tx[] = {FLUSH_RX};
     uint8_t rx[] = {0};
     uint8_t rx[] = {0};
     nrf24_spi_trx(handle, tx, rx, 1, nrf24_TIMEOUT);
     nrf24_spi_trx(handle, tx, rx, 1, nrf24_TIMEOUT);
     return rx[0];
     return rx[0];
 }
 }
 
 
-uint8_t nrf24_get_rdp(FuriHalSpiBusHandle* handle) {
+uint8_t nrf24_get_rdp(const FuriHalSpiBusHandle* handle) {
     uint8_t rdp;
     uint8_t rdp;
     nrf24_read_reg(handle, REG_RDP, &rdp, 1);
     nrf24_read_reg(handle, REG_RDP, &rdp, 1);
     return rdp;
     return rdp;
 }
 }
 
 
-uint8_t nrf24_status(FuriHalSpiBusHandle* handle) {
+uint8_t nrf24_status(const FuriHalSpiBusHandle* handle) {
     uint8_t status;
     uint8_t status;
     uint8_t tx[] = {R_REGISTER | (REGISTER_MASK & REG_STATUS)};
     uint8_t tx[] = {R_REGISTER | (REGISTER_MASK & REG_STATUS)};
     nrf24_spi_trx(handle, tx, &status, 1, nrf24_TIMEOUT);
     nrf24_spi_trx(handle, tx, &status, 1, nrf24_TIMEOUT);
     return status;
     return status;
 }
 }
 
 
-uint8_t nrf24_set_idle(FuriHalSpiBusHandle* handle) {
+uint8_t nrf24_set_idle(const FuriHalSpiBusHandle* handle) {
     uint8_t status = 0;
     uint8_t status = 0;
     uint8_t cfg = 0;
     uint8_t cfg = 0;
     nrf24_read_reg(handle, REG_CONFIG, &cfg, 1);
     nrf24_read_reg(handle, REG_CONFIG, &cfg, 1);
@@ -104,7 +104,7 @@ uint8_t nrf24_set_idle(FuriHalSpiBusHandle* handle) {
     return status;
     return status;
 }
 }
 
 
-uint8_t nrf24_set_rx_mode(FuriHalSpiBusHandle* handle, bool nodelay) {
+uint8_t nrf24_set_rx_mode(const FuriHalSpiBusHandle* handle, bool nodelay) {
     uint8_t status = 0;
     uint8_t status = 0;
     uint8_t cfg = 0;
     uint8_t cfg = 0;
     nrf24_read_reg(handle, REG_CONFIG, &cfg, 1);
     nrf24_read_reg(handle, REG_CONFIG, &cfg, 1);
@@ -115,7 +115,7 @@ uint8_t nrf24_set_rx_mode(FuriHalSpiBusHandle* handle, bool nodelay) {
     return status;
     return status;
 }
 }
 
 
-bool nrf24_check_connected(FuriHalSpiBusHandle* handle) {
+bool nrf24_check_connected(const FuriHalSpiBusHandle* handle) {
     uint8_t status = nrf24_status(handle);
     uint8_t status = nrf24_status(handle);
 
 
     if(status != 0x00) {
     if(status != 0x00) {

+ 41 - 41
lib/nrf24/nrf24.h

@@ -2,52 +2,52 @@
 #include <stdbool.h>
 #include <stdbool.h>
 #include <stdint.h>
 #include <stdint.h>
 #include <furi_hal_spi.h>
 #include <furi_hal_spi.h>
-#if __has_include("xtreme.h") 
-#include <xtreme.h>
+#if __has_include("momentum.h")
+#include <momentum/momentum.h>
 #endif
 #endif
 
 
 #ifdef __cplusplus
 #ifdef __cplusplus
 extern "C" {
 extern "C" {
 #endif
 #endif
 
 
-#define R_REGISTER 0x00
-#define W_REGISTER 0x20
-#define REGISTER_MASK 0x1F
-#define ACTIVATE 0x50
-#define R_RX_PL_WID 0x60
-#define R_RX_PAYLOAD 0x61
-#define W_TX_PAYLOAD 0xA0
+#define R_REGISTER         0x00
+#define W_REGISTER         0x20
+#define REGISTER_MASK      0x1F
+#define ACTIVATE           0x50
+#define R_RX_PL_WID        0x60
+#define R_RX_PAYLOAD       0x61
+#define W_TX_PAYLOAD       0xA0
 #define W_TX_PAYLOAD_NOACK 0xB0
 #define W_TX_PAYLOAD_NOACK 0xB0
-#define W_ACK_PAYLOAD 0xA8
-#define FLUSH_TX 0xE1
-#define FLUSH_RX 0xE2
-#define REUSE_TX_PL 0xE3
-#define RF24_NOP 0xFF
-
-#define REG_CONFIG 0x00
-#define REG_EN_AA 0x01
-#define REG_EN_RXADDR 0x02
-#define REG_SETUP_AW 0x03
+#define W_ACK_PAYLOAD      0xA8
+#define FLUSH_TX           0xE1
+#define FLUSH_RX           0xE2
+#define REUSE_TX_PL        0xE3
+#define RF24_NOP           0xFF
+
+#define REG_CONFIG     0x00
+#define REG_EN_AA      0x01
+#define REG_EN_RXADDR  0x02
+#define REG_SETUP_AW   0x03
 #define REG_SETUP_RETR 0x04
 #define REG_SETUP_RETR 0x04
-#define REG_RDP 0x09
-#define REG_DYNPD 0x1C
-#define REG_FEATURE 0x1D
-#define REG_RF_SETUP 0x06
-#define REG_STATUS 0x07
+#define REG_RDP        0x09
+#define REG_DYNPD      0x1C
+#define REG_FEATURE    0x1D
+#define REG_RF_SETUP   0x06
+#define REG_STATUS     0x07
 #define REG_RX_ADDR_P0 0x0A
 #define REG_RX_ADDR_P0 0x0A
-#define REG_RF_CH 0x05
-#define REG_TX_ADDR 0x10
+#define REG_RF_CH      0x05
+#define REG_TX_ADDR    0x10
 
 
 #define RX_PW_P0 0x11
 #define RX_PW_P0 0x11
-#define TX_DS 0x20
-#define MAX_RT 0x10
+#define TX_DS    0x20
+#define MAX_RT   0x10
 
 
 #define nrf24_TIMEOUT 500
 #define nrf24_TIMEOUT 500
-#define nrf24_CE_PIN &gpio_ext_pb2
-#ifdef XTREME_SETTINGS_PATH
-#define nrf24_HANDLE                                                                         \
-    (xtreme_settings.spi_nrf24_handle == SpiDefault ? &furi_hal_spi_bus_handle_external : \
-                                                         &furi_hal_spi_bus_handle_external_extra)
+#define nrf24_CE_PIN  &gpio_ext_pb2
+#ifdef MOMENTUM_SETTINGS_PATH
+#define nrf24_HANDLE                                                                        \
+    (momentum_settings.spi_nrf24_handle == SpiDefault ? &furi_hal_spi_bus_handle_external : \
+                                                        &furi_hal_spi_bus_handle_external_extra)
 #else
 #else
 #define nrf24_HANDLE &furi_hal_spi_bus_handle_external
 #define nrf24_HANDLE &furi_hal_spi_bus_handle_external
 #endif
 #endif
@@ -61,7 +61,7 @@ extern "C" {
  *
  *
  * @return     device status
  * @return     device status
  */
  */
-uint8_t nrf24_write_reg(FuriHalSpiBusHandle* handle, uint8_t reg, uint8_t data);
+uint8_t nrf24_write_reg(const FuriHalSpiBusHandle* handle, uint8_t reg, uint8_t data);
 
 
 /** Read device register
 /** Read device register
  *
  *
@@ -71,7 +71,7 @@ uint8_t nrf24_write_reg(FuriHalSpiBusHandle* handle, uint8_t reg, uint8_t data);
  *
  *
  * @return     device status
  * @return     device status
  */
  */
-uint8_t nrf24_read_reg(FuriHalSpiBusHandle* handle, uint8_t reg, uint8_t* data, uint8_t size);
+uint8_t nrf24_read_reg(const FuriHalSpiBusHandle* handle, uint8_t reg, uint8_t* data, uint8_t size);
 
 
 /** Power down the radio
 /** Power down the radio
  * 
  * 
@@ -79,7 +79,7 @@ uint8_t nrf24_read_reg(FuriHalSpiBusHandle* handle, uint8_t reg, uint8_t* data,
  * 
  * 
  * @return     device status
  * @return     device status
  */
  */
-uint8_t nrf24_set_idle(FuriHalSpiBusHandle* handle);
+uint8_t nrf24_set_idle(const FuriHalSpiBusHandle* handle);
 
 
 /** Sets the radio to RX mode
 /** Sets the radio to RX mode
  *
  *
@@ -87,7 +87,7 @@ uint8_t nrf24_set_idle(FuriHalSpiBusHandle* handle);
  * 
  * 
  * @return     device status
  * @return     device status
  */
  */
-uint8_t nrf24_set_rx_mode(FuriHalSpiBusHandle* handle, bool nodelay);
+uint8_t nrf24_set_rx_mode(const FuriHalSpiBusHandle* handle, bool nodelay);
 
 
 /*=============================================================================================================*/
 /*=============================================================================================================*/
 
 
@@ -109,7 +109,7 @@ void nrf24_deinit();
  *
  *
  * @return     device status
  * @return     device status
  */
  */
-uint8_t nrf24_flush_rx(FuriHalSpiBusHandle* handle);
+uint8_t nrf24_flush_rx(const FuriHalSpiBusHandle* handle);
 
 
 /** Gets RDP from register 0x09
 /** Gets RDP from register 0x09
  *
  *
@@ -117,7 +117,7 @@ uint8_t nrf24_flush_rx(FuriHalSpiBusHandle* handle);
  * 
  * 
  * @return     RDP from register 0x09
  * @return     RDP from register 0x09
  */
  */
-uint8_t nrf24_get_rdp(FuriHalSpiBusHandle* handle);
+uint8_t nrf24_get_rdp(const FuriHalSpiBusHandle* handle);
 
 
 /** Gets the current status flags from the STATUS register
 /** Gets the current status flags from the STATUS register
  * 
  * 
@@ -125,9 +125,9 @@ uint8_t nrf24_get_rdp(FuriHalSpiBusHandle* handle);
  * 
  * 
  * @return     status flags
  * @return     status flags
  */
  */
-uint8_t nrf24_status(FuriHalSpiBusHandle* handle);
+uint8_t nrf24_status(const FuriHalSpiBusHandle* handle);
 
 
-bool nrf24_check_connected(FuriHalSpiBusHandle* handle);
+bool nrf24_check_connected(const FuriHalSpiBusHandle* handle);
 
 
 #ifdef __cplusplus
 #ifdef __cplusplus
 }
 }

+ 8 - 6
nrf24channelscanner.c

@@ -42,7 +42,7 @@ static void draw_callback(Canvas* canvas, void* ctx) {
     UNUSED(ctx);
     UNUSED(ctx);
 
 
     canvas_clear(canvas);
     canvas_clear(canvas);
-    canvas_set_bitmap_mode(canvas, 1);
+    canvas_set_bitmap_mode(canvas, true);
     canvas_draw_icon(canvas, 100, 0, &I_Pin_back_arrow_10x8);
     canvas_draw_icon(canvas, 100, 0, &I_Pin_back_arrow_10x8);
     canvas_set_font(canvas, FontSecondary);
     canvas_set_font(canvas, FontSecondary);
     canvas_draw_str(canvas, 112, 8, "Exit");
     canvas_draw_str(canvas, 112, 8, "Exit");
@@ -173,6 +173,7 @@ int32_t nrf24channelscanner_main(void* p) {
 
 
     //turn on 5v for some modules
     //turn on 5v for some modules
     uint8_t attempts = 0;
     uint8_t attempts = 0;
+    bool otg_was_enabled = furi_hal_power_is_otg_enabled();
     while(!furi_hal_power_is_otg_enabled() && attempts++ < 5) {
     while(!furi_hal_power_is_otg_enabled() && attempts++ < 5) {
         furi_hal_power_enable_otg();
         furi_hal_power_enable_otg();
         furi_delay_ms(10);
         furi_delay_ms(10);
@@ -257,13 +258,14 @@ int32_t nrf24channelscanner_main(void* p) {
         }
         }
     }
     }
     nrf24_deinit();
     nrf24_deinit();
+
+    if(furi_hal_power_is_otg_enabled() && !otg_was_enabled) {
+        furi_hal_power_disable_otg();
+    }
+
     furi_message_queue_free(event_queue);
     furi_message_queue_free(event_queue);
     gui_remove_view_port(gui, view_port);
     gui_remove_view_port(gui, view_port);
     view_port_free(view_port);
     view_port_free(view_port);
     furi_record_close(RECORD_GUI);
     furi_record_close(RECORD_GUI);
-    //turn off 5v
-    if(furi_hal_power_is_otg_enabled()) {
-        furi_hal_power_disable_otg();
-    }
     return 0;
     return 0;
-}
+}