ソースを参照

Update for FW const changes

Willy-JL 10 ヶ月 前
コミット
8f612574f7

+ 1 - 1
airmouse/tracking/imu/lsm6ds3trc.c

@@ -28,7 +28,7 @@ bool lsm6ds3trc_begin() {
     lsm6ds3trc_ctx.write_reg = lsm6ds3trc_write_i2c;
     lsm6ds3trc_ctx.read_reg = lsm6ds3trc_read_i2c;
     lsm6ds3trc_ctx.mdelay = furi_delay_ms;
-    lsm6ds3trc_ctx.handle = &furi_hal_i2c_handle_external;
+    lsm6ds3trc_ctx.handle = (void*)&furi_hal_i2c_handle_external;
 
     uint8_t whoami;
     lsm6ds3tr_c_device_id_get(&lsm6ds3trc_ctx, &whoami);

+ 1 - 1
airmouse/tracking/imu/lsm6dso.c

@@ -27,7 +27,7 @@ bool lsm6dso_begin() {
     lsm6dso_ctx.write_reg = lsm6dso_write_i2c;
     lsm6dso_ctx.read_reg = lsm6dso_read_i2c;
     lsm6dso_ctx.mdelay = furi_delay_ms;
-    lsm6dso_ctx.handle = &furi_hal_i2c_handle_external;
+    lsm6dso_ctx.handle = (void*)&furi_hal_i2c_handle_external;
 
     uint8_t whoami;
     lsm6dso_device_id_get(&lsm6dso_ctx, &whoami);

+ 1 - 1
cli_bridge/cli_control.c

@@ -112,7 +112,7 @@ void clicontrol_unhijack(bool persist) {
 
     if(persist) {
         // Don't trigger a terminal reset as the session switches
-        cli_vcp.is_connected = &furi_hal_version_do_i_belong_here;
+        // cli_vcp.is_connected = &furi_hal_version_do_i_belong_here;
     } else {
         // Send CTRL-C a few times
         char eot = 0x03;

+ 0 - 1
cli_bridge/cligui_main.c

@@ -76,7 +76,6 @@ int32_t cligui_main(void* p) {
     FuriPubSub* input_events = furi_record_open(RECORD_INPUT_EVENTS);
     FuriPubSubSubscription* input_events_sub =
         furi_pubsub_subscribe(input_events, input_callback, (void*)cligui);
-    view_dispatcher_enable_queue(cligui->view_dispatcher);
     view_dispatcher_set_event_callback_context(cligui->view_dispatcher, cligui);
     view_dispatcher_set_custom_event_callback(cligui->view_dispatcher, cligui_custom_event_cb);
     view_dispatcher_set_navigation_event_callback(cligui->view_dispatcher, cligui_back_event_cb);

+ 35 - 29
nrf24batch/lib/nrf24/nrf24.c

@@ -37,21 +37,24 @@ void nrf24_deinit() {
     }
 }
 
-void nrf24_spi_trx(FuriHalSpiBusHandle* handle, uint8_t* tx, uint8_t* rx, uint8_t size) {
+void nrf24_spi_trx(const FuriHalSpiBusHandle* handle, uint8_t* tx, uint8_t* rx, uint8_t size) {
     furi_hal_gpio_write(handle->cs, false);
     furi_hal_spi_bus_trx(handle, tx, rx, size, nrf24_TIMEOUT);
     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 buf[] = {W_REGISTER | (REGISTER_MASK & reg), data};
     nrf24_spi_trx(handle, buf, buf, 2);
     //FURI_LOG_D("NRF_WR", " #%02X=%02X", reg, data);
     return buf[0];
 }
 
-uint8_t
-    nrf24_write_buf_reg(FuriHalSpiBusHandle* handle, uint8_t reg, uint8_t* data, uint8_t size) {
+uint8_t nrf24_write_buf_reg(
+    const FuriHalSpiBusHandle* handle,
+    uint8_t reg,
+    uint8_t* data,
+    uint8_t size) {
     uint8_t buf[size + 1];
     buf[0] = W_REGISTER | (REGISTER_MASK & reg);
     memcpy(&buf[1], data, size);
@@ -60,7 +63,8 @@ uint8_t
     return buf[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 buf[size + 1];
     memset(buf, 0, size + 1);
     buf[0] = R_REGISTER | (REGISTER_MASK & reg);
@@ -69,47 +73,47 @@ uint8_t nrf24_read_reg(FuriHalSpiBusHandle* handle, uint8_t reg, uint8_t* data,
     return buf[0];
 }
 
-uint8_t nrf24_read_register(FuriHalSpiBusHandle* handle, uint8_t reg) {
+uint8_t nrf24_read_register(const FuriHalSpiBusHandle* handle, uint8_t reg) {
     uint8_t buf[] = {R_REGISTER | (REGISTER_MASK & reg), 0};
     nrf24_spi_trx(handle, buf, buf, 2);
     return buf[1];
 }
 
-uint8_t nrf24_flush_rx(FuriHalSpiBusHandle* handle) {
+uint8_t nrf24_flush_rx(const FuriHalSpiBusHandle* handle) {
     uint8_t tx[] = {FLUSH_RX};
     uint8_t rx[] = {0};
     nrf24_spi_trx(handle, tx, rx, 1);
     return rx[0];
 }
 
-uint8_t nrf24_flush_tx(FuriHalSpiBusHandle* handle) {
+uint8_t nrf24_flush_tx(const FuriHalSpiBusHandle* handle) {
     uint8_t tx[] = {FLUSH_TX};
     uint8_t rx[] = {0};
     nrf24_spi_trx(handle, tx, rx, 1);
     return rx[0];
 }
 
-uint8_t nrf24_get_maclen(FuriHalSpiBusHandle* handle) {
+uint8_t nrf24_get_maclen(const FuriHalSpiBusHandle* handle) {
     uint8_t maclen;
     nrf24_read_reg(handle, REG_SETUP_AW, &maclen, 1);
     maclen &= 3;
     return maclen + 2;
 }
 
-uint8_t nrf24_set_maclen(FuriHalSpiBusHandle* handle, uint8_t maclen) {
+uint8_t nrf24_set_maclen(const FuriHalSpiBusHandle* handle, uint8_t maclen) {
     assert(maclen > 1 && maclen < 6);
     uint8_t status = 0;
     status = nrf24_write_reg(handle, REG_SETUP_AW, maclen - 2);
     return status;
 }
 
-uint8_t nrf24_status(FuriHalSpiBusHandle* handle) {
+uint8_t nrf24_status(const FuriHalSpiBusHandle* handle) {
     uint8_t tx = RF24_NOP;
     nrf24_spi_trx(handle, &tx, &tx, 1);
     return tx;
 }
 
-uint32_t nrf24_get_rate(FuriHalSpiBusHandle* handle) {
+uint32_t nrf24_get_rate(const FuriHalSpiBusHandle* handle) {
     uint8_t setup = 0;
     uint32_t rate = 0;
     nrf24_read_reg(handle, REG_RF_SETUP, &setup, 1);
@@ -124,7 +128,7 @@ uint32_t nrf24_get_rate(FuriHalSpiBusHandle* handle) {
     return rate;
 }
 
-uint8_t nrf24_set_rate(FuriHalSpiBusHandle* handle, uint32_t rate) {
+uint8_t nrf24_set_rate(const FuriHalSpiBusHandle* handle, uint32_t rate) {
     uint8_t r6 = 0;
     uint8_t status = 0;
     if(!rate) rate = 2000000;
@@ -142,19 +146,19 @@ uint8_t nrf24_set_rate(FuriHalSpiBusHandle* handle, uint32_t rate) {
     return status;
 }
 
-uint8_t nrf24_get_chan(FuriHalSpiBusHandle* handle) {
+uint8_t nrf24_get_chan(const FuriHalSpiBusHandle* handle) {
     uint8_t channel = 0;
     nrf24_read_reg(handle, REG_RF_CH, &channel, 1);
     return channel;
 }
 
-uint8_t nrf24_set_chan(FuriHalSpiBusHandle* handle, uint8_t chan) {
+uint8_t nrf24_set_chan(const FuriHalSpiBusHandle* handle, uint8_t chan) {
     uint8_t status;
     status = nrf24_write_reg(handle, REG_RF_CH, chan);
     return status;
 }
 
-uint8_t nrf24_get_src_mac(FuriHalSpiBusHandle* handle, uint8_t* mac) {
+uint8_t nrf24_get_src_mac(const FuriHalSpiBusHandle* handle, uint8_t* mac) {
     uint8_t size = 0;
     uint8_t status = 0;
     size = nrf24_get_maclen(handle);
@@ -162,7 +166,7 @@ uint8_t nrf24_get_src_mac(FuriHalSpiBusHandle* handle, uint8_t* mac) {
     return status;
 }
 
-uint8_t nrf24_set_src_mac(FuriHalSpiBusHandle* handle, uint8_t* mac, uint8_t size) {
+uint8_t nrf24_set_src_mac(const FuriHalSpiBusHandle* handle, uint8_t* mac, uint8_t size) {
     uint8_t status = 0;
     uint8_t clearmac[] = {0, 0, 0, 0, 0};
     nrf24_set_maclen(handle, size);
@@ -171,7 +175,7 @@ uint8_t nrf24_set_src_mac(FuriHalSpiBusHandle* handle, uint8_t* mac, uint8_t siz
     return status;
 }
 
-uint8_t nrf24_get_dst_mac(FuriHalSpiBusHandle* handle, uint8_t* mac) {
+uint8_t nrf24_get_dst_mac(const FuriHalSpiBusHandle* handle, uint8_t* mac) {
     uint8_t size = 0;
     uint8_t status = 0;
     size = nrf24_get_maclen(handle);
@@ -179,7 +183,7 @@ uint8_t nrf24_get_dst_mac(FuriHalSpiBusHandle* handle, uint8_t* mac) {
     return status;
 }
 
-uint8_t nrf24_set_dst_mac(FuriHalSpiBusHandle* handle, uint8_t* mac, uint8_t size) {
+uint8_t nrf24_set_dst_mac(const FuriHalSpiBusHandle* handle, uint8_t* mac, uint8_t size) {
     uint8_t status = 0;
     uint8_t clearmac[] = {0, 0, 0, 0, 0};
     nrf24_set_maclen(handle, size);
@@ -188,14 +192,14 @@ uint8_t nrf24_set_dst_mac(FuriHalSpiBusHandle* handle, uint8_t* mac, uint8_t siz
     return status;
 }
 
-uint8_t nrf24_get_packetlen(FuriHalSpiBusHandle* handle, uint8_t pipe) {
+uint8_t nrf24_get_packetlen(const FuriHalSpiBusHandle* handle, uint8_t pipe) {
     uint8_t len = 0;
     if(pipe > 5) pipe = 0;
     nrf24_read_reg(handle, RX_PW_P0 + pipe, &len, 1);
     return len;
 }
 
-uint8_t nrf24_set_packetlen(FuriHalSpiBusHandle* handle, uint8_t len) {
+uint8_t nrf24_set_packetlen(const FuriHalSpiBusHandle* handle, uint8_t len) {
     uint8_t status = 0;
     status = nrf24_write_reg(handle, RX_PW_P0, len);
     return status;
@@ -204,7 +208,7 @@ uint8_t nrf24_set_packetlen(FuriHalSpiBusHandle* handle, uint8_t len) {
 // packet_size: 0 - dyn payload (read from PL_WID), 1 - read from pipe size, >1 - override
 // Return STATUS reg + additional: RX_DR - new data available, 0x80 - NRF24 hardware error
 uint8_t nrf24_rxpacket(
-    FuriHalSpiBusHandle* handle,
+    const FuriHalSpiBusHandle* handle,
     uint8_t* packet,
     uint8_t* ret_packetsize,
     uint8_t packet_size) {
@@ -246,7 +250,8 @@ uint8_t nrf24_rxpacket(
 }
 
 // Return 0 when error
-uint8_t nrf24_txpacket(FuriHalSpiBusHandle* handle, uint8_t* payload, uint8_t size, bool ack) {
+uint8_t
+    nrf24_txpacket(const FuriHalSpiBusHandle* handle, uint8_t* payload, uint8_t size, bool ack) {
     uint8_t status = 0;
     uint8_t buf[size + 1];
     buf[0] = ack ? W_TX_PAYLOAD : W_TX_PAYLOAD_NOACK;
@@ -270,7 +275,7 @@ uint8_t nrf24_txpacket(FuriHalSpiBusHandle* handle, uint8_t* payload, uint8_t si
     return status & TX_DS;
 }
 
-uint8_t nrf24_power_up(FuriHalSpiBusHandle* handle) {
+uint8_t nrf24_power_up(const FuriHalSpiBusHandle* handle) {
     uint8_t status = 0;
     uint8_t cfg = 0;
     nrf24_read_reg(handle, REG_CONFIG, &cfg, 1);
@@ -280,7 +285,7 @@ uint8_t nrf24_power_up(FuriHalSpiBusHandle* handle) {
     return status;
 }
 
-uint8_t nrf24_set_idle(FuriHalSpiBusHandle* handle) {
+uint8_t nrf24_set_idle(const FuriHalSpiBusHandle* handle) {
     uint8_t status = 0;
     uint8_t cfg = 0;
     nrf24_read_reg(handle, REG_CONFIG, &cfg, 1);
@@ -290,7 +295,7 @@ uint8_t nrf24_set_idle(FuriHalSpiBusHandle* handle) {
     return status;
 }
 
-uint8_t nrf24_set_rx_mode(FuriHalSpiBusHandle* handle) {
+uint8_t nrf24_set_rx_mode(const FuriHalSpiBusHandle* handle) {
     uint8_t cfg = 0;
     cfg = nrf24_read_register(handle, REG_CONFIG);
     cfg |= 0x03; // PWR_UP, and PRIM_RX
@@ -299,7 +304,7 @@ uint8_t nrf24_set_rx_mode(FuriHalSpiBusHandle* handle) {
     return cfg;
 }
 
-uint8_t nrf24_set_tx_mode(FuriHalSpiBusHandle* handle) {
+uint8_t nrf24_set_tx_mode(const FuriHalSpiBusHandle* handle) {
     uint8_t reg;
     furi_hal_gpio_write(nrf24_CE_PIN, false);
     //nrf24_write_reg(handle, REG_STATUS, TX_DS | MAX_RT);
@@ -379,6 +384,7 @@ void int16_to_bytes(uint16_t val, uint8_t* out, bool bigendian) {
 
 uint8_t nrf24_set_mac(uint8_t mac_addr, uint8_t* mac, uint8_t mlen) {
     uint8_t addr[5];
-    for(int i = 0; i < mlen; i++) addr[i] = mac[mlen - i - 1];
+    for(int i = 0; i < mlen; i++)
+        addr[i] = mac[mlen - i - 1];
     return nrf24_write_buf_reg(nrf24_HANDLE, mac_addr, addr, mlen);
-}
+}

+ 78 - 72
nrf24batch/lib/nrf24/nrf24.h

@@ -8,53 +8,53 @@
 extern "C" {
 #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_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_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_P1 0x0B
-#define REG_RX_ADDR_P2 0x0C
-#define REG_RX_ADDR_P3 0x0D
-#define REG_RX_ADDR_P4 0x0E
-#define REG_RX_ADDR_P5 0x0F
-#define REG_RF_CH 0x05
-#define REG_TX_ADDR 0x10
+#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_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_P1  0x0B
+#define REG_RX_ADDR_P2  0x0C
+#define REG_RX_ADDR_P3  0x0D
+#define REG_RX_ADDR_P4  0x0E
+#define REG_RX_ADDR_P5  0x0F
+#define REG_RF_CH       0x05
+#define REG_TX_ADDR     0x10
 #define REG_FIFO_STATUS 0x17
-#define REG_OBSERVE_TX 0x08
-
-#define RX_PW_P0 0x11
-#define RX_PW_P1 0x12
-#define RX_PW_P2 0x13
-#define RX_PW_P3 0x14
-#define RX_PW_P4 0x15
-#define RX_PW_P5 0x16
-#define RX_DR 0x40
-#define TX_DS 0x20
-#define MAX_RT 0x10
+#define REG_OBSERVE_TX  0x08
+
+#define RX_PW_P0         0x11
+#define RX_PW_P1         0x12
+#define RX_PW_P2         0x13
+#define RX_PW_P3         0x14
+#define RX_PW_P4         0x15
+#define RX_PW_P5         0x16
+#define RX_DR            0x40
+#define TX_DS            0x20
+#define MAX_RT           0x10
 #define NRF24_EN_DYN_ACK 0x01
 
 #define nrf24_TIMEOUT 500
-#define nrf24_CE_PIN &gpio_ext_pb2
+#define nrf24_CE_PIN  &gpio_ext_pb2
 #define nrf24_HANDLE                                                                        \
     (momentum_settings.spi_nrf24_handle == SpiDefault ? &furi_hal_spi_bus_handle_external : \
                                                         &furi_hal_spi_bus_handle_external_extra)
@@ -69,7 +69,7 @@ extern "C" {
  *
  * @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);
 
 /** Write buffer to device register
  *
@@ -80,7 +80,11 @@ uint8_t nrf24_write_reg(FuriHalSpiBusHandle* handle, uint8_t reg, uint8_t data);
  *
  * @return     device status
  */
-uint8_t nrf24_write_buf_reg(FuriHalSpiBusHandle* handle, uint8_t reg, uint8_t* data, uint8_t size);
+uint8_t nrf24_write_buf_reg(
+    const FuriHalSpiBusHandle* handle,
+    uint8_t reg,
+    uint8_t* data,
+    uint8_t size);
 
 /** Read device register
  *
@@ -90,10 +94,11 @@ uint8_t nrf24_write_buf_reg(FuriHalSpiBusHandle* handle, uint8_t reg, uint8_t* d
  *
  * @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);
 
 // Read single register (1 byte)
-uint8_t nrf24_read_register(FuriHalSpiBusHandle* handle, uint8_t reg);
+uint8_t nrf24_read_register(const FuriHalSpiBusHandle* handle, uint8_t reg);
 
 /** Power up the radio for operation
  * 
@@ -101,7 +106,7 @@ uint8_t nrf24_read_register(FuriHalSpiBusHandle* handle, uint8_t reg);
  * 
  * @return     device status
  */
-uint8_t nrf24_power_up(FuriHalSpiBusHandle* handle);
+uint8_t nrf24_power_up(const FuriHalSpiBusHandle* handle);
 
 /** Power down the radio
  * 
@@ -109,7 +114,7 @@ uint8_t nrf24_power_up(FuriHalSpiBusHandle* handle);
  * 
  * @return     device status
  */
-uint8_t nrf24_set_idle(FuriHalSpiBusHandle* handle);
+uint8_t nrf24_set_idle(const FuriHalSpiBusHandle* handle);
 
 /** Sets the radio to RX mode
  *
@@ -117,7 +122,7 @@ uint8_t nrf24_set_idle(FuriHalSpiBusHandle* handle);
  * 
  * @return     device status
  */
-uint8_t nrf24_set_rx_mode(FuriHalSpiBusHandle* handle);
+uint8_t nrf24_set_rx_mode(const FuriHalSpiBusHandle* handle);
 
 /** Sets the radio to TX mode
  *
@@ -125,7 +130,7 @@ uint8_t nrf24_set_rx_mode(FuriHalSpiBusHandle* handle);
  * 
  * @return     device status
  */
-uint8_t nrf24_set_tx_mode(FuriHalSpiBusHandle* handle);
+uint8_t nrf24_set_tx_mode(const FuriHalSpiBusHandle* handle);
 
 /*=============================================================================================================*/
 
@@ -147,7 +152,7 @@ void nrf24_deinit();
  *
  * @return     device status
  */
-uint8_t nrf24_flush_rx(FuriHalSpiBusHandle* handle);
+uint8_t nrf24_flush_rx(const FuriHalSpiBusHandle* handle);
 
 /** Send flush tx command
  *
@@ -155,7 +160,7 @@ uint8_t nrf24_flush_rx(FuriHalSpiBusHandle* handle);
  *
  * @return     device status
  */
-uint8_t nrf24_flush_tx(FuriHalSpiBusHandle* handle);
+uint8_t nrf24_flush_tx(const FuriHalSpiBusHandle* handle);
 
 /** Gets the RX packet length in data pipe 0
  * 
@@ -163,7 +168,7 @@ uint8_t nrf24_flush_tx(FuriHalSpiBusHandle* handle);
  *             pipe - pipe index (0..5)
  * @return     packet length in data pipe 0
  */
-uint8_t nrf24_get_packetlen(FuriHalSpiBusHandle* handle, uint8_t pipe);
+uint8_t nrf24_get_packetlen(const FuriHalSpiBusHandle* handle, uint8_t pipe);
 
 /** Sets the RX packet length in data pipe 0
  * 
@@ -172,7 +177,7 @@ uint8_t nrf24_get_packetlen(FuriHalSpiBusHandle* handle, uint8_t pipe);
  * 
  * @return     device status
  */
-uint8_t nrf24_set_packetlen(FuriHalSpiBusHandle* handle, uint8_t len);
+uint8_t nrf24_set_packetlen(const FuriHalSpiBusHandle* handle, uint8_t len);
 
 /** Gets configured length of MAC address
  *
@@ -180,7 +185,7 @@ uint8_t nrf24_set_packetlen(FuriHalSpiBusHandle* handle, uint8_t len);
  * 
  * @return     MAC address length
  */
-uint8_t nrf24_get_maclen(FuriHalSpiBusHandle* handle);
+uint8_t nrf24_get_maclen(const FuriHalSpiBusHandle* handle);
 
 /** Sets configured length of MAC address
  *
@@ -189,7 +194,7 @@ uint8_t nrf24_get_maclen(FuriHalSpiBusHandle* handle);
  * 
  * @return     MAC address length
  */
-uint8_t nrf24_set_maclen(FuriHalSpiBusHandle* handle, uint8_t maclen);
+uint8_t nrf24_set_maclen(const FuriHalSpiBusHandle* handle, uint8_t maclen);
 
 /** Gets the current status flags from the STATUS register
  * 
@@ -197,7 +202,7 @@ uint8_t nrf24_set_maclen(FuriHalSpiBusHandle* handle, uint8_t maclen);
  * 
  * @return     status flags
  */
-uint8_t nrf24_status(FuriHalSpiBusHandle* handle);
+uint8_t nrf24_status(const FuriHalSpiBusHandle* handle);
 
 /** Gets the current transfer rate
  * 
@@ -205,7 +210,7 @@ uint8_t nrf24_status(FuriHalSpiBusHandle* handle);
  * 
  * @return     transfer rate in bps
  */
-uint32_t nrf24_get_rate(FuriHalSpiBusHandle* handle);
+uint32_t nrf24_get_rate(const FuriHalSpiBusHandle* handle);
 
 /** Sets the transfer rate
  *
@@ -214,7 +219,7 @@ uint32_t nrf24_get_rate(FuriHalSpiBusHandle* handle);
  * 
  * @return     device status
  */
-uint8_t nrf24_set_rate(FuriHalSpiBusHandle* handle, uint32_t rate);
+uint8_t nrf24_set_rate(const FuriHalSpiBusHandle* handle, uint32_t rate);
 
 /** Gets the current channel
  * In nrf24, the channel number is multiplied times 1MHz and added to 2400MHz to get the frequency
@@ -223,7 +228,7 @@ uint8_t nrf24_set_rate(FuriHalSpiBusHandle* handle, uint32_t rate);
  * 
  * @return     channel
  */
-uint8_t nrf24_get_chan(FuriHalSpiBusHandle* handle);
+uint8_t nrf24_get_chan(const FuriHalSpiBusHandle* handle);
 
 /** Sets the channel
  *
@@ -232,7 +237,7 @@ uint8_t nrf24_get_chan(FuriHalSpiBusHandle* handle);
  * 
  * @return     device status
  */
-uint8_t nrf24_set_chan(FuriHalSpiBusHandle* handle, uint8_t chan);
+uint8_t nrf24_set_chan(const FuriHalSpiBusHandle* handle, uint8_t chan);
 
 /** Gets the source mac address
  *
@@ -241,7 +246,7 @@ uint8_t nrf24_set_chan(FuriHalSpiBusHandle* handle, uint8_t chan);
  * 
  * @return     device status
  */
-uint8_t nrf24_get_src_mac(FuriHalSpiBusHandle* handle, uint8_t* mac);
+uint8_t nrf24_get_src_mac(const FuriHalSpiBusHandle* handle, uint8_t* mac);
 
 /** Sets the source mac address
  *
@@ -251,7 +256,7 @@ uint8_t nrf24_get_src_mac(FuriHalSpiBusHandle* handle, uint8_t* mac);
  * 
  * @return     device status
  */
-uint8_t nrf24_set_src_mac(FuriHalSpiBusHandle* handle, uint8_t* mac, uint8_t size);
+uint8_t nrf24_set_src_mac(const FuriHalSpiBusHandle* handle, uint8_t* mac, uint8_t size);
 
 /** Gets the dest mac address
  *
@@ -260,7 +265,7 @@ uint8_t nrf24_set_src_mac(FuriHalSpiBusHandle* handle, uint8_t* mac, uint8_t siz
  * 
  * @return     device status
  */
-uint8_t nrf24_get_dst_mac(FuriHalSpiBusHandle* handle, uint8_t* mac);
+uint8_t nrf24_get_dst_mac(const FuriHalSpiBusHandle* handle, uint8_t* mac);
 
 /** Sets the dest mac address
  *
@@ -270,7 +275,7 @@ uint8_t nrf24_get_dst_mac(FuriHalSpiBusHandle* handle, uint8_t* mac);
  * 
  * @return     device status
  */
-uint8_t nrf24_set_dst_mac(FuriHalSpiBusHandle* handle, uint8_t* mac, uint8_t size);
+uint8_t nrf24_set_dst_mac(const FuriHalSpiBusHandle* handle, uint8_t* mac, uint8_t size);
 
 /** Reads RX packet
  *
@@ -282,7 +287,7 @@ uint8_t nrf24_set_dst_mac(FuriHalSpiBusHandle* handle, uint8_t* mac, uint8_t siz
  * @return     device status
  */
 uint8_t nrf24_rxpacket(
-    FuriHalSpiBusHandle* handle,
+    const FuriHalSpiBusHandle* handle,
     uint8_t* packet,
     uint8_t* ret_packetsize,
     uint8_t packet_size_flag);
@@ -296,7 +301,8 @@ uint8_t nrf24_rxpacket(
  * 
  * @return     device status
  */
-uint8_t nrf24_txpacket(FuriHalSpiBusHandle* handle, uint8_t* payload, uint8_t size, bool ack);
+uint8_t
+    nrf24_txpacket(const FuriHalSpiBusHandle* handle, uint8_t* payload, uint8_t size, bool ack);
 
 /** Configure the radio
  * This is not comprehensive, but covers a lot of the common configuration options that may be changed
@@ -311,7 +317,7 @@ uint8_t nrf24_txpacket(FuriHalSpiBusHandle* handle, uint8_t* payload, uint8_t si
  * 
  */
 void nrf24_configure(
-    FuriHalSpiBusHandle* handle,
+    const FuriHalSpiBusHandle* handle,
     uint8_t rate,
     uint8_t* srcmac,
     uint8_t* dstmac,
@@ -330,7 +336,7 @@ uint8_t nrf24_set_mac(uint8_t mac_addr, uint8_t* mac, uint8_t mlen);
  * @param      channel - channel to tune to
  * @param      rate - transfer rate in Mbps (1 or 2) 
  */
-void nrf24_init_promisc_mode(FuriHalSpiBusHandle* handle, uint8_t channel, uint8_t rate);
+void nrf24_init_promisc_mode(const FuriHalSpiBusHandle* handle, uint8_t channel, uint8_t rate);
 
 /** Listens for a packet and returns first possible address sniffed
  * Call this only after calling nrf24_init_promisc_mode
@@ -340,7 +346,7 @@ void nrf24_init_promisc_mode(FuriHalSpiBusHandle* handle, uint8_t channel, uint8
  * 
  * @return     success
  */
-bool nrf24_sniff_address(FuriHalSpiBusHandle* handle, uint8_t maclen, uint8_t* address);
+bool nrf24_sniff_address(const FuriHalSpiBusHandle* handle, uint8_t maclen, uint8_t* address);
 
 /** Sends ping packet on each channel for designated tx mac looking for ack
  * 
@@ -356,7 +362,7 @@ bool nrf24_sniff_address(FuriHalSpiBusHandle* handle, uint8_t maclen, uint8_t* a
  * @return     channel that the address is listening on, if this value is above the max_channel param, it failed
  */
 uint8_t nrf24_find_channel(
-    FuriHalSpiBusHandle* handle,
+    const FuriHalSpiBusHandle* handle,
     uint8_t* srcmac,
     uint8_t* dstmac,
     uint8_t maclen,
@@ -389,4 +395,4 @@ uint32_t bytes_to_int32(uint8_t* bytes, bool bigendian);
 
 #ifdef __cplusplus
 }
-#endif
+#endif

+ 10 - 9
nrf24channelscanner/lib/nrf24/nrf24.c

@@ -45,7 +45,7 @@ void nrf24_deinit() {
 }
 
 void nrf24_spi_trx(
-    FuriHalSpiBusHandle* handle,
+    const FuriHalSpiBusHandle* handle,
     uint8_t* tx,
     uint8_t* rx,
     uint8_t size,
@@ -56,14 +56,15 @@ void nrf24_spi_trx(
     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 rx[2] = {0};
     nrf24_spi_trx(handle, tx, rx, 2, nrf24_TIMEOUT);
     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 rx[size + 1];
     memset(rx, 0, size + 1);
@@ -74,27 +75,27 @@ uint8_t nrf24_read_reg(FuriHalSpiBusHandle* handle, uint8_t reg, uint8_t* data,
     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 rx[] = {0};
     nrf24_spi_trx(handle, tx, rx, 1, nrf24_TIMEOUT);
     return rx[0];
 }
 
-uint8_t nrf24_get_rdp(FuriHalSpiBusHandle* handle) {
+uint8_t nrf24_get_rdp(const FuriHalSpiBusHandle* handle) {
     uint8_t rdp;
     nrf24_read_reg(handle, REG_RDP, &rdp, 1);
     return rdp;
 }
 
-uint8_t nrf24_status(FuriHalSpiBusHandle* handle) {
+uint8_t nrf24_status(const FuriHalSpiBusHandle* handle) {
     uint8_t status;
     uint8_t tx[] = {R_REGISTER | (REGISTER_MASK & REG_STATUS)};
     nrf24_spi_trx(handle, tx, &status, 1, nrf24_TIMEOUT);
     return status;
 }
 
-uint8_t nrf24_set_idle(FuriHalSpiBusHandle* handle) {
+uint8_t nrf24_set_idle(const FuriHalSpiBusHandle* handle) {
     uint8_t status = 0;
     uint8_t cfg = 0;
     nrf24_read_reg(handle, REG_CONFIG, &cfg, 1);
@@ -104,7 +105,7 @@ uint8_t nrf24_set_idle(FuriHalSpiBusHandle* handle) {
     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 cfg = 0;
     nrf24_read_reg(handle, REG_CONFIG, &cfg, 1);
@@ -115,7 +116,7 @@ uint8_t nrf24_set_rx_mode(FuriHalSpiBusHandle* handle, bool nodelay) {
     return status;
 }
 
-bool nrf24_check_connected(FuriHalSpiBusHandle* handle) {
+bool nrf24_check_connected(const FuriHalSpiBusHandle* handle) {
     uint8_t status = nrf24_status(handle);
 
     if(status != 0x00) {

+ 36 - 35
nrf24channelscanner/lib/nrf24/nrf24.h

@@ -10,40 +10,40 @@
 extern "C" {
 #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_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_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_RF_CH 0x05
-#define REG_TX_ADDR 0x10
+#define REG_RF_CH      0x05
+#define REG_TX_ADDR    0x10
 
 #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_CE_PIN &gpio_ext_pb2
+#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 : \
@@ -61,7 +61,7 @@ extern "C" {
  *
  * @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
  *
@@ -71,7 +71,8 @@ uint8_t nrf24_write_reg(FuriHalSpiBusHandle* handle, uint8_t reg, uint8_t data);
  *
  * @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
  * 
@@ -79,7 +80,7 @@ uint8_t nrf24_read_reg(FuriHalSpiBusHandle* handle, uint8_t reg, uint8_t* data,
  * 
  * @return     device status
  */
-uint8_t nrf24_set_idle(FuriHalSpiBusHandle* handle);
+uint8_t nrf24_set_idle(const FuriHalSpiBusHandle* handle);
 
 /** Sets the radio to RX mode
  *
@@ -87,7 +88,7 @@ uint8_t nrf24_set_idle(FuriHalSpiBusHandle* handle);
  * 
  * @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 +110,7 @@ void nrf24_deinit();
  *
  * @return     device status
  */
-uint8_t nrf24_flush_rx(FuriHalSpiBusHandle* handle);
+uint8_t nrf24_flush_rx(const FuriHalSpiBusHandle* handle);
 
 /** Gets RDP from register 0x09
  *
@@ -117,7 +118,7 @@ uint8_t nrf24_flush_rx(FuriHalSpiBusHandle* handle);
  * 
  * @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
  * 
@@ -125,9 +126,9 @@ uint8_t nrf24_get_rdp(FuriHalSpiBusHandle* handle);
  * 
  * @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
 }

+ 45 - 35
nrf24mousejacker/lib/nrf24/nrf24.c

@@ -36,7 +36,7 @@ void nrf24_deinit() {
 }
 
 void nrf24_spi_trx(
-    FuriHalSpiBusHandle* handle,
+    const FuriHalSpiBusHandle* handle,
     uint8_t* tx,
     uint8_t* rx,
     uint8_t size,
@@ -47,15 +47,18 @@ void nrf24_spi_trx(
     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 rx[2] = {0};
     nrf24_spi_trx(handle, tx, rx, 2, nrf24_TIMEOUT);
     return rx[0];
 }
 
-uint8_t
-    nrf24_write_buf_reg(FuriHalSpiBusHandle* handle, uint8_t reg, uint8_t* data, uint8_t size) {
+uint8_t nrf24_write_buf_reg(
+    const FuriHalSpiBusHandle* handle,
+    uint8_t reg,
+    uint8_t* data,
+    uint8_t size) {
     uint8_t tx[size + 1];
     uint8_t rx[size + 1];
     memset(rx, 0, size + 1);
@@ -65,7 +68,8 @@ uint8_t
     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 rx[size + 1];
     memset(rx, 0, size + 1);
@@ -76,42 +80,42 @@ uint8_t nrf24_read_reg(FuriHalSpiBusHandle* handle, uint8_t reg, uint8_t* data,
     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 rx[] = {0};
     nrf24_spi_trx(handle, tx, rx, 1, nrf24_TIMEOUT);
     return rx[0];
 }
 
-uint8_t nrf24_flush_tx(FuriHalSpiBusHandle* handle) {
+uint8_t nrf24_flush_tx(const FuriHalSpiBusHandle* handle) {
     uint8_t tx[] = {FLUSH_TX};
     uint8_t rx[] = {0};
     nrf24_spi_trx(handle, tx, rx, 1, nrf24_TIMEOUT);
     return rx[0];
 }
 
-uint8_t nrf24_get_maclen(FuriHalSpiBusHandle* handle) {
+uint8_t nrf24_get_maclen(const FuriHalSpiBusHandle* handle) {
     uint8_t maclen;
     nrf24_read_reg(handle, REG_SETUP_AW, &maclen, 1);
     maclen &= 3;
     return maclen + 2;
 }
 
-uint8_t nrf24_set_maclen(FuriHalSpiBusHandle* handle, uint8_t maclen) {
+uint8_t nrf24_set_maclen(const FuriHalSpiBusHandle* handle, uint8_t maclen) {
     assert(maclen > 1 && maclen < 6);
     uint8_t status = 0;
     status = nrf24_write_reg(handle, REG_SETUP_AW, maclen - 2);
     return status;
 }
 
-uint8_t nrf24_status(FuriHalSpiBusHandle* handle) {
+uint8_t nrf24_status(const FuriHalSpiBusHandle* handle) {
     uint8_t status;
     uint8_t tx[] = {R_REGISTER | (REGISTER_MASK & REG_STATUS)};
     nrf24_spi_trx(handle, tx, &status, 1, nrf24_TIMEOUT);
     return status;
 }
 
-uint32_t nrf24_get_rate(FuriHalSpiBusHandle* handle) {
+uint32_t nrf24_get_rate(const FuriHalSpiBusHandle* handle) {
     uint8_t setup = 0;
     uint32_t rate = 0;
     nrf24_read_reg(handle, REG_RF_SETUP, &setup, 1);
@@ -126,7 +130,7 @@ uint32_t nrf24_get_rate(FuriHalSpiBusHandle* handle) {
     return rate;
 }
 
-uint8_t nrf24_set_rate(FuriHalSpiBusHandle* handle, uint32_t rate) {
+uint8_t nrf24_set_rate(const FuriHalSpiBusHandle* handle, uint32_t rate) {
     uint8_t r6 = 0;
     uint8_t status = 0;
     if(!rate) rate = 2000000;
@@ -144,19 +148,19 @@ uint8_t nrf24_set_rate(FuriHalSpiBusHandle* handle, uint32_t rate) {
     return status;
 }
 
-uint8_t nrf24_get_chan(FuriHalSpiBusHandle* handle) {
+uint8_t nrf24_get_chan(const FuriHalSpiBusHandle* handle) {
     uint8_t channel = 0;
     nrf24_read_reg(handle, REG_RF_CH, &channel, 1);
     return channel;
 }
 
-uint8_t nrf24_set_chan(FuriHalSpiBusHandle* handle, uint8_t chan) {
+uint8_t nrf24_set_chan(const FuriHalSpiBusHandle* handle, uint8_t chan) {
     uint8_t status;
     status = nrf24_write_reg(handle, REG_RF_CH, chan);
     return status;
 }
 
-uint8_t nrf24_get_src_mac(FuriHalSpiBusHandle* handle, uint8_t* mac) {
+uint8_t nrf24_get_src_mac(const FuriHalSpiBusHandle* handle, uint8_t* mac) {
     uint8_t size = 0;
     uint8_t status = 0;
     size = nrf24_get_maclen(handle);
@@ -164,7 +168,7 @@ uint8_t nrf24_get_src_mac(FuriHalSpiBusHandle* handle, uint8_t* mac) {
     return status;
 }
 
-uint8_t nrf24_set_src_mac(FuriHalSpiBusHandle* handle, uint8_t* mac, uint8_t size) {
+uint8_t nrf24_set_src_mac(const FuriHalSpiBusHandle* handle, uint8_t* mac, uint8_t size) {
     uint8_t status = 0;
     uint8_t clearmac[] = {0, 0, 0, 0, 0};
     nrf24_set_maclen(handle, size);
@@ -173,7 +177,7 @@ uint8_t nrf24_set_src_mac(FuriHalSpiBusHandle* handle, uint8_t* mac, uint8_t siz
     return status;
 }
 
-uint8_t nrf24_get_dst_mac(FuriHalSpiBusHandle* handle, uint8_t* mac) {
+uint8_t nrf24_get_dst_mac(const FuriHalSpiBusHandle* handle, uint8_t* mac) {
     uint8_t size = 0;
     uint8_t status = 0;
     size = nrf24_get_maclen(handle);
@@ -181,7 +185,7 @@ uint8_t nrf24_get_dst_mac(FuriHalSpiBusHandle* handle, uint8_t* mac) {
     return status;
 }
 
-uint8_t nrf24_set_dst_mac(FuriHalSpiBusHandle* handle, uint8_t* mac, uint8_t size) {
+uint8_t nrf24_set_dst_mac(const FuriHalSpiBusHandle* handle, uint8_t* mac, uint8_t size) {
     uint8_t status = 0;
     uint8_t clearmac[] = {0, 0, 0, 0, 0};
     nrf24_set_maclen(handle, size);
@@ -190,20 +194,23 @@ uint8_t nrf24_set_dst_mac(FuriHalSpiBusHandle* handle, uint8_t* mac, uint8_t siz
     return status;
 }
 
-uint8_t nrf24_get_packetlen(FuriHalSpiBusHandle* handle) {
+uint8_t nrf24_get_packetlen(const FuriHalSpiBusHandle* handle) {
     uint8_t len = 0;
     nrf24_read_reg(handle, RX_PW_P0, &len, 1);
     return len;
 }
 
-uint8_t nrf24_set_packetlen(FuriHalSpiBusHandle* handle, uint8_t len) {
+uint8_t nrf24_set_packetlen(const FuriHalSpiBusHandle* handle, uint8_t len) {
     uint8_t status = 0;
     status = nrf24_write_reg(handle, RX_PW_P0, len);
     return status;
 }
 
-uint8_t
-    nrf24_rxpacket(FuriHalSpiBusHandle* handle, uint8_t* packet, uint8_t* packetsize, bool full) {
+uint8_t nrf24_rxpacket(
+    const FuriHalSpiBusHandle* handle,
+    uint8_t* packet,
+    uint8_t* packetsize,
+    bool full) {
     uint8_t status = 0;
     uint8_t size = 0;
     uint8_t tx_pl_wid[] = {R_RX_PL_WID, 0};
@@ -234,7 +241,8 @@ uint8_t
     return status;
 }
 
-uint8_t nrf24_txpacket(FuriHalSpiBusHandle* handle, uint8_t* payload, uint8_t size, bool ack) {
+uint8_t
+    nrf24_txpacket(const FuriHalSpiBusHandle* handle, uint8_t* payload, uint8_t size, bool ack) {
     uint8_t status = 0;
     uint8_t tx[size + 1];
     uint8_t rx[size + 1];
@@ -250,7 +258,8 @@ uint8_t nrf24_txpacket(FuriHalSpiBusHandle* handle, uint8_t* payload, uint8_t si
     nrf24_spi_trx(handle, tx, rx, size + 1, nrf24_TIMEOUT);
     nrf24_set_tx_mode(handle);
 
-    while(!(status & (TX_DS | MAX_RT))) status = nrf24_status(handle);
+    while(!(status & (TX_DS | MAX_RT)))
+        status = nrf24_status(handle);
 
     if(status & MAX_RT) nrf24_flush_tx(handle);
 
@@ -259,7 +268,7 @@ uint8_t nrf24_txpacket(FuriHalSpiBusHandle* handle, uint8_t* payload, uint8_t si
     return status & TX_DS;
 }
 
-uint8_t nrf24_power_up(FuriHalSpiBusHandle* handle) {
+uint8_t nrf24_power_up(const FuriHalSpiBusHandle* handle) {
     uint8_t status = 0;
     uint8_t cfg = 0;
     nrf24_read_reg(handle, REG_CONFIG, &cfg, 1);
@@ -269,7 +278,7 @@ uint8_t nrf24_power_up(FuriHalSpiBusHandle* handle) {
     return status;
 }
 
-uint8_t nrf24_set_idle(FuriHalSpiBusHandle* handle) {
+uint8_t nrf24_set_idle(const FuriHalSpiBusHandle* handle) {
     uint8_t status = 0;
     uint8_t cfg = 0;
     nrf24_read_reg(handle, REG_CONFIG, &cfg, 1);
@@ -280,7 +289,7 @@ uint8_t nrf24_set_idle(FuriHalSpiBusHandle* handle) {
     return status;
 }
 
-uint8_t nrf24_set_rx_mode(FuriHalSpiBusHandle* handle) {
+uint8_t nrf24_set_rx_mode(const FuriHalSpiBusHandle* handle) {
     uint8_t status = 0;
     uint8_t cfg = 0;
     //status = nrf24_write_reg(handle, REG_CONFIG, 0x0F); // enable 2-byte CRC, PWR_UP, and PRIM_RX
@@ -293,7 +302,7 @@ uint8_t nrf24_set_rx_mode(FuriHalSpiBusHandle* handle) {
     return status;
 }
 
-uint8_t nrf24_set_tx_mode(FuriHalSpiBusHandle* handle) {
+uint8_t nrf24_set_tx_mode(const FuriHalSpiBusHandle* handle) {
     uint8_t status = 0;
     uint8_t cfg = 0;
     furi_hal_gpio_write(nrf24_CE_PIN, false);
@@ -309,7 +318,7 @@ uint8_t nrf24_set_tx_mode(FuriHalSpiBusHandle* handle) {
 }
 
 void nrf24_configure(
-    FuriHalSpiBusHandle* handle,
+    const FuriHalSpiBusHandle* handle,
     uint8_t rate,
     uint8_t* srcmac,
     uint8_t* dstmac,
@@ -355,7 +364,7 @@ void nrf24_configure(
     furi_delay_ms(200);
 }
 
-void nrf24_init_promisc_mode(FuriHalSpiBusHandle* handle, uint8_t channel, uint8_t rate) {
+void nrf24_init_promisc_mode(const FuriHalSpiBusHandle* handle, uint8_t channel, uint8_t rate) {
     //uint8_t preamble[] = {0x55, 0x00}; // little endian
     uint8_t preamble[] = {0xAA, 0x00}; // little endian
     //uint8_t preamble[] = {0x00, 0x55}; // little endian
@@ -482,7 +491,7 @@ bool validate_address(uint8_t* addr) {
     return true;
 }
 
-bool nrf24_sniff_address(FuriHalSpiBusHandle* handle, uint8_t maclen, uint8_t* address) {
+bool nrf24_sniff_address(const FuriHalSpiBusHandle* handle, uint8_t maclen, uint8_t* address) {
     bool found = false;
     uint8_t packet[32] = {0};
     uint8_t packetsize;
@@ -491,7 +500,8 @@ bool nrf24_sniff_address(FuriHalSpiBusHandle* handle, uint8_t maclen, uint8_t* a
     status = nrf24_rxpacket(handle, packet, &packetsize, true);
     if(status & 0x40) {
         if(validate_address(packet)) {
-            for(int i = 0; i < maclen; i++) address[i] = packet[maclen - 1 - i];
+            for(int i = 0; i < maclen; i++)
+                address[i] = packet[maclen - 1 - i];
 
             /*
             alt_address(packet, packet);
@@ -510,7 +520,7 @@ bool nrf24_sniff_address(FuriHalSpiBusHandle* handle, uint8_t maclen, uint8_t* a
 }
 
 uint8_t nrf24_find_channel(
-    FuriHalSpiBusHandle* handle,
+    const FuriHalSpiBusHandle* handle,
     uint8_t* srcmac,
     uint8_t* dstmac,
     uint8_t maclen,
@@ -535,7 +545,7 @@ uint8_t nrf24_find_channel(
     return ch;
 }
 
-bool nrf24_check_connected(FuriHalSpiBusHandle* handle) {
+bool nrf24_check_connected(const FuriHalSpiBusHandle* handle) {
     uint8_t status = nrf24_status(handle);
 
     if(status != 0x00) {
@@ -543,4 +553,4 @@ bool nrf24_check_connected(FuriHalSpiBusHandle* handle) {
     } else {
         return false;
     }
-}
+}

+ 66 - 57
nrf24mousejacker/lib/nrf24/nrf24.h

@@ -9,39 +9,39 @@
 extern "C" {
 #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_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_DYNPD 0x1C
-#define REG_FEATURE 0x1D
-#define REG_RF_SETUP 0x06
-#define REG_STATUS 0x07
+#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_RF_CH 0x05
-#define REG_TX_ADDR 0x10
+#define REG_RF_CH      0x05
+#define REG_TX_ADDR    0x10
 
 #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_CE_PIN &gpio_ext_pb2
+#define nrf24_CE_PIN  &gpio_ext_pb2
 #define nrf24_HANDLE                                                                        \
     (momentum_settings.spi_nrf24_handle == SpiDefault ? &furi_hal_spi_bus_handle_external : \
                                                         &furi_hal_spi_bus_handle_external_extra)
@@ -56,7 +56,7 @@ extern "C" {
  *
  * @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);
 
 /** Write buffer to device register
  *
@@ -67,7 +67,11 @@ uint8_t nrf24_write_reg(FuriHalSpiBusHandle* handle, uint8_t reg, uint8_t data);
  *
  * @return     device status
  */
-uint8_t nrf24_write_buf_reg(FuriHalSpiBusHandle* handle, uint8_t reg, uint8_t* data, uint8_t size);
+uint8_t nrf24_write_buf_reg(
+    const FuriHalSpiBusHandle* handle,
+    uint8_t reg,
+    uint8_t* data,
+    uint8_t size);
 
 /** Read device register
  *
@@ -77,7 +81,8 @@ uint8_t nrf24_write_buf_reg(FuriHalSpiBusHandle* handle, uint8_t reg, uint8_t* d
  *
  * @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 up the radio for operation
  * 
@@ -85,7 +90,7 @@ uint8_t nrf24_read_reg(FuriHalSpiBusHandle* handle, uint8_t reg, uint8_t* data,
  * 
  * @return     device status
  */
-uint8_t nrf24_power_up(FuriHalSpiBusHandle* handle);
+uint8_t nrf24_power_up(const FuriHalSpiBusHandle* handle);
 
 /** Power down the radio
  * 
@@ -93,7 +98,7 @@ uint8_t nrf24_power_up(FuriHalSpiBusHandle* handle);
  * 
  * @return     device status
  */
-uint8_t nrf24_set_idle(FuriHalSpiBusHandle* handle);
+uint8_t nrf24_set_idle(const FuriHalSpiBusHandle* handle);
 
 /** Sets the radio to RX mode
  *
@@ -101,7 +106,7 @@ uint8_t nrf24_set_idle(FuriHalSpiBusHandle* handle);
  * 
  * @return     device status
  */
-uint8_t nrf24_set_rx_mode(FuriHalSpiBusHandle* handle);
+uint8_t nrf24_set_rx_mode(const FuriHalSpiBusHandle* handle);
 
 /** Sets the radio to TX mode
  *
@@ -109,7 +114,7 @@ uint8_t nrf24_set_rx_mode(FuriHalSpiBusHandle* handle);
  * 
  * @return     device status
  */
-uint8_t nrf24_set_tx_mode(FuriHalSpiBusHandle* handle);
+uint8_t nrf24_set_tx_mode(const FuriHalSpiBusHandle* handle);
 
 /*=============================================================================================================*/
 
@@ -131,7 +136,7 @@ void nrf24_deinit();
  *
  * @return     device status
  */
-uint8_t nrf24_flush_rx(FuriHalSpiBusHandle* handle);
+uint8_t nrf24_flush_rx(const FuriHalSpiBusHandle* handle);
 
 /** Send flush tx command
  *
@@ -139,7 +144,7 @@ uint8_t nrf24_flush_rx(FuriHalSpiBusHandle* handle);
  *
  * @return     device status
  */
-uint8_t nrf24_flush_tx(FuriHalSpiBusHandle* handle);
+uint8_t nrf24_flush_tx(const FuriHalSpiBusHandle* handle);
 
 /** Gets the RX packet length in data pipe 0
  * 
@@ -147,7 +152,7 @@ uint8_t nrf24_flush_tx(FuriHalSpiBusHandle* handle);
  * 
  * @return     packet length in data pipe 0
  */
-uint8_t nrf24_get_packetlen(FuriHalSpiBusHandle* handle);
+uint8_t nrf24_get_packetlen(const FuriHalSpiBusHandle* handle);
 
 /** Sets the RX packet length in data pipe 0
  * 
@@ -156,7 +161,7 @@ uint8_t nrf24_get_packetlen(FuriHalSpiBusHandle* handle);
  * 
  * @return     device status
  */
-uint8_t nrf24_set_packetlen(FuriHalSpiBusHandle* handle, uint8_t len);
+uint8_t nrf24_set_packetlen(const FuriHalSpiBusHandle* handle, uint8_t len);
 
 /** Gets configured length of MAC address
  *
@@ -164,7 +169,7 @@ uint8_t nrf24_set_packetlen(FuriHalSpiBusHandle* handle, uint8_t len);
  * 
  * @return     MAC address length
  */
-uint8_t nrf24_get_maclen(FuriHalSpiBusHandle* handle);
+uint8_t nrf24_get_maclen(const FuriHalSpiBusHandle* handle);
 
 /** Sets configured length of MAC address
  *
@@ -173,7 +178,7 @@ uint8_t nrf24_get_maclen(FuriHalSpiBusHandle* handle);
  * 
  * @return     MAC address length
  */
-uint8_t nrf24_set_maclen(FuriHalSpiBusHandle* handle, uint8_t maclen);
+uint8_t nrf24_set_maclen(const FuriHalSpiBusHandle* handle, uint8_t maclen);
 
 /** Gets the current status flags from the STATUS register
  * 
@@ -181,7 +186,7 @@ uint8_t nrf24_set_maclen(FuriHalSpiBusHandle* handle, uint8_t maclen);
  * 
  * @return     status flags
  */
-uint8_t nrf24_status(FuriHalSpiBusHandle* handle);
+uint8_t nrf24_status(const FuriHalSpiBusHandle* handle);
 
 /** Gets the current transfer rate
  * 
@@ -189,7 +194,7 @@ uint8_t nrf24_status(FuriHalSpiBusHandle* handle);
  * 
  * @return     transfer rate in bps
  */
-uint32_t nrf24_get_rate(FuriHalSpiBusHandle* handle);
+uint32_t nrf24_get_rate(const FuriHalSpiBusHandle* handle);
 
 /** Sets the transfer rate
  *
@@ -198,7 +203,7 @@ uint32_t nrf24_get_rate(FuriHalSpiBusHandle* handle);
  * 
  * @return     device status
  */
-uint8_t nrf24_set_rate(FuriHalSpiBusHandle* handle, uint32_t rate);
+uint8_t nrf24_set_rate(const FuriHalSpiBusHandle* handle, uint32_t rate);
 
 /** Gets the current channel
  * In nrf24, the channel number is multiplied times 1MHz and added to 2400MHz to get the frequency
@@ -207,7 +212,7 @@ uint8_t nrf24_set_rate(FuriHalSpiBusHandle* handle, uint32_t rate);
  * 
  * @return     channel
  */
-uint8_t nrf24_get_chan(FuriHalSpiBusHandle* handle);
+uint8_t nrf24_get_chan(const FuriHalSpiBusHandle* handle);
 
 /** Sets the channel
  *
@@ -216,7 +221,7 @@ uint8_t nrf24_get_chan(FuriHalSpiBusHandle* handle);
  * 
  * @return     device status
  */
-uint8_t nrf24_set_chan(FuriHalSpiBusHandle* handle, uint8_t chan);
+uint8_t nrf24_set_chan(const FuriHalSpiBusHandle* handle, uint8_t chan);
 
 /** Gets the source mac address
  *
@@ -225,7 +230,7 @@ uint8_t nrf24_set_chan(FuriHalSpiBusHandle* handle, uint8_t chan);
  * 
  * @return     device status
  */
-uint8_t nrf24_get_src_mac(FuriHalSpiBusHandle* handle, uint8_t* mac);
+uint8_t nrf24_get_src_mac(const FuriHalSpiBusHandle* handle, uint8_t* mac);
 
 /** Sets the source mac address
  *
@@ -235,7 +240,7 @@ uint8_t nrf24_get_src_mac(FuriHalSpiBusHandle* handle, uint8_t* mac);
  * 
  * @return     device status
  */
-uint8_t nrf24_set_src_mac(FuriHalSpiBusHandle* handle, uint8_t* mac, uint8_t size);
+uint8_t nrf24_set_src_mac(const FuriHalSpiBusHandle* handle, uint8_t* mac, uint8_t size);
 
 /** Gets the dest mac address
  *
@@ -244,7 +249,7 @@ uint8_t nrf24_set_src_mac(FuriHalSpiBusHandle* handle, uint8_t* mac, uint8_t siz
  * 
  * @return     device status
  */
-uint8_t nrf24_get_dst_mac(FuriHalSpiBusHandle* handle, uint8_t* mac);
+uint8_t nrf24_get_dst_mac(const FuriHalSpiBusHandle* handle, uint8_t* mac);
 
 /** Sets the dest mac address
  *
@@ -254,7 +259,7 @@ uint8_t nrf24_get_dst_mac(FuriHalSpiBusHandle* handle, uint8_t* mac);
  * 
  * @return     device status
  */
-uint8_t nrf24_set_dst_mac(FuriHalSpiBusHandle* handle, uint8_t* mac, uint8_t size);
+uint8_t nrf24_set_dst_mac(const FuriHalSpiBusHandle* handle, uint8_t* mac, uint8_t size);
 
 /** Reads RX packet
  *
@@ -265,8 +270,11 @@ uint8_t nrf24_set_dst_mac(FuriHalSpiBusHandle* handle, uint8_t* mac, uint8_t siz
  * 
  * @return     device status
  */
-uint8_t
-    nrf24_rxpacket(FuriHalSpiBusHandle* handle, uint8_t* packet, uint8_t* packetsize, bool full);
+uint8_t nrf24_rxpacket(
+    const FuriHalSpiBusHandle* handle,
+    uint8_t* packet,
+    uint8_t* packetsize,
+    bool full);
 
 /** Sends TX packet
  *
@@ -277,7 +285,8 @@ uint8_t
  * 
  * @return     device status
  */
-uint8_t nrf24_txpacket(FuriHalSpiBusHandle* handle, uint8_t* payload, uint8_t size, bool ack);
+uint8_t
+    nrf24_txpacket(const FuriHalSpiBusHandle* handle, uint8_t* payload, uint8_t size, bool ack);
 
 /** Configure the radio
  * This is not comprehensive, but covers a lot of the common configuration options that may be changed
@@ -292,7 +301,7 @@ uint8_t nrf24_txpacket(FuriHalSpiBusHandle* handle, uint8_t* payload, uint8_t si
  * 
  */
 void nrf24_configure(
-    FuriHalSpiBusHandle* handle,
+    const FuriHalSpiBusHandle* handle,
     uint8_t rate,
     uint8_t* srcmac,
     uint8_t* dstmac,
@@ -308,7 +317,7 @@ void nrf24_configure(
  * @param      channel - channel to tune to
  * @param      rate - transfer rate in Mbps (1 or 2) 
  */
-void nrf24_init_promisc_mode(FuriHalSpiBusHandle* handle, uint8_t channel, uint8_t rate);
+void nrf24_init_promisc_mode(const FuriHalSpiBusHandle* handle, uint8_t channel, uint8_t rate);
 
 /** Listens for a packet and returns first possible address sniffed
  * Call this only after calling nrf24_init_promisc_mode
@@ -318,7 +327,7 @@ void nrf24_init_promisc_mode(FuriHalSpiBusHandle* handle, uint8_t channel, uint8
  * 
  * @return     success
  */
-bool nrf24_sniff_address(FuriHalSpiBusHandle* handle, uint8_t maclen, uint8_t* address);
+bool nrf24_sniff_address(const FuriHalSpiBusHandle* handle, uint8_t maclen, uint8_t* address);
 
 /** Sends ping packet on each channel for designated tx mac looking for ack
  * 
@@ -334,7 +343,7 @@ bool nrf24_sniff_address(FuriHalSpiBusHandle* handle, uint8_t maclen, uint8_t* a
  * @return     channel that the address is listening on, if this value is above the max_channel param, it failed
  */
 uint8_t nrf24_find_channel(
-    FuriHalSpiBusHandle* handle,
+    const FuriHalSpiBusHandle* handle,
     uint8_t* srcmac,
     uint8_t* dstmac,
     uint8_t maclen,
@@ -370,8 +379,8 @@ uint32_t bytes_to_int32(uint8_t* bytes, bool bigendian);
  * 
  * @return     true if connected, otherwise false
 */
-bool nrf24_check_connected(FuriHalSpiBusHandle* handle);
+bool nrf24_check_connected(const FuriHalSpiBusHandle* handle);
 
 #ifdef __cplusplus
 }
-#endif
+#endif

+ 5 - 5
nrf24mousejacker/mousejacker_ducky.c

@@ -120,7 +120,7 @@ static void checksum(uint8_t* payload, size_t len) {
 }
 
 static void inject_packet(
-    FuriHalSpiBusHandle* handle,
+    const FuriHalSpiBusHandle* handle,
     uint8_t* addr,
     uint8_t addr_size,
     uint8_t rate,
@@ -165,7 +165,7 @@ static void build_hid_packet(uint8_t mod, uint8_t hid, uint8_t* payload) {
 }
 
 static void release_key(
-    FuriHalSpiBusHandle* handle,
+    const FuriHalSpiBusHandle* handle,
     uint8_t* addr,
     uint8_t addr_size,
     uint8_t rate,
@@ -189,7 +189,7 @@ static void release_key(
 }
 
 static void send_hid_packet(
-    FuriHalSpiBusHandle* handle,
+    const FuriHalSpiBusHandle* handle,
     uint8_t* addr,
     uint8_t addr_size,
     uint8_t rate,
@@ -215,7 +215,7 @@ static bool ducky_end_line(const char chr) {
 
 // returns false if there was an error processing script line
 static bool mj_process_ducky_line(
-    FuriHalSpiBusHandle* handle,
+    const FuriHalSpiBusHandle* handle,
     uint8_t* addr,
     uint8_t addr_size,
     uint8_t rate,
@@ -434,7 +434,7 @@ static bool mj_process_ducky_line(
 }
 
 void mj_process_ducky_script(
-    FuriHalSpiBusHandle* handle,
+    const FuriHalSpiBusHandle* handle,
     uint8_t* addr,
     uint8_t addr_size,
     uint8_t rate,

+ 1 - 1
nrf24mousejacker/mousejacker_ducky.h

@@ -34,7 +34,7 @@ typedef struct {
 } PluginState;
 
 void mj_process_ducky_script(
-    FuriHalSpiBusHandle* handle,
+    const FuriHalSpiBusHandle* handle,
     uint8_t* addr,
     uint8_t addr_size,
     uint8_t rate,

+ 40 - 33
nrf24scan/lib/nrf24/nrf24.c

@@ -38,7 +38,7 @@ void nrf24_deinit() {
 }
 
 void nrf24_spi_trx(
-    FuriHalSpiBusHandle* handle,
+    const FuriHalSpiBusHandle* handle,
     uint8_t* tx,
     uint8_t* rx,
     uint8_t size,
@@ -49,7 +49,7 @@ void nrf24_spi_trx(
     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 rx[2] = {0};
     nrf24_spi_trx(handle, tx, rx, 2, nrf24_TIMEOUT);
@@ -57,8 +57,11 @@ uint8_t nrf24_write_reg(FuriHalSpiBusHandle* handle, uint8_t reg, uint8_t data)
     return rx[0];
 }
 
-uint8_t
-    nrf24_write_buf_reg(FuriHalSpiBusHandle* handle, uint8_t reg, uint8_t* data, uint8_t size) {
+uint8_t nrf24_write_buf_reg(
+    const FuriHalSpiBusHandle* handle,
+    uint8_t reg,
+    uint8_t* data,
+    uint8_t size) {
     uint8_t tx[size + 1];
     uint8_t rx[size + 1];
     memset(rx, 0, size + 1);
@@ -69,7 +72,8 @@ uint8_t
     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 rx[size + 1];
     memset(rx, 0, size + 1);
@@ -80,42 +84,42 @@ uint8_t nrf24_read_reg(FuriHalSpiBusHandle* handle, uint8_t reg, uint8_t* data,
     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 rx[] = {0};
     nrf24_spi_trx(handle, tx, rx, 1, nrf24_TIMEOUT);
     return rx[0];
 }
 
-uint8_t nrf24_flush_tx(FuriHalSpiBusHandle* handle) {
+uint8_t nrf24_flush_tx(const FuriHalSpiBusHandle* handle) {
     uint8_t tx[] = {FLUSH_TX};
     uint8_t rx[] = {0};
     nrf24_spi_trx(handle, tx, rx, 1, nrf24_TIMEOUT);
     return rx[0];
 }
 
-uint8_t nrf24_get_maclen(FuriHalSpiBusHandle* handle) {
+uint8_t nrf24_get_maclen(const FuriHalSpiBusHandle* handle) {
     uint8_t maclen;
     nrf24_read_reg(handle, REG_SETUP_AW, &maclen, 1);
     maclen &= 3;
     return maclen + 2;
 }
 
-uint8_t nrf24_set_maclen(FuriHalSpiBusHandle* handle, uint8_t maclen) {
+uint8_t nrf24_set_maclen(const FuriHalSpiBusHandle* handle, uint8_t maclen) {
     assert(maclen > 1 && maclen < 6);
     uint8_t status = 0;
     status = nrf24_write_reg(handle, REG_SETUP_AW, maclen - 2);
     return status;
 }
 
-uint8_t nrf24_status(FuriHalSpiBusHandle* handle) {
+uint8_t nrf24_status(const FuriHalSpiBusHandle* handle) {
     uint8_t status;
     uint8_t tx[] = {R_REGISTER | (REGISTER_MASK & REG_STATUS)};
     nrf24_spi_trx(handle, tx, &status, 1, nrf24_TIMEOUT);
     return status;
 }
 
-uint32_t nrf24_get_rate(FuriHalSpiBusHandle* handle) {
+uint32_t nrf24_get_rate(const FuriHalSpiBusHandle* handle) {
     uint8_t setup = 0;
     uint32_t rate = 0;
     nrf24_read_reg(handle, REG_RF_SETUP, &setup, 1);
@@ -130,7 +134,7 @@ uint32_t nrf24_get_rate(FuriHalSpiBusHandle* handle) {
     return rate;
 }
 
-uint8_t nrf24_set_rate(FuriHalSpiBusHandle* handle, uint32_t rate) {
+uint8_t nrf24_set_rate(const FuriHalSpiBusHandle* handle, uint32_t rate) {
     uint8_t r6 = 0;
     uint8_t status = 0;
     if(!rate) rate = 2000000;
@@ -148,19 +152,19 @@ uint8_t nrf24_set_rate(FuriHalSpiBusHandle* handle, uint32_t rate) {
     return status;
 }
 
-uint8_t nrf24_get_chan(FuriHalSpiBusHandle* handle) {
+uint8_t nrf24_get_chan(const FuriHalSpiBusHandle* handle) {
     uint8_t channel = 0;
     nrf24_read_reg(handle, REG_RF_CH, &channel, 1);
     return channel;
 }
 
-uint8_t nrf24_set_chan(FuriHalSpiBusHandle* handle, uint8_t chan) {
+uint8_t nrf24_set_chan(const FuriHalSpiBusHandle* handle, uint8_t chan) {
     uint8_t status;
     status = nrf24_write_reg(handle, REG_RF_CH, chan);
     return status;
 }
 
-uint8_t nrf24_get_src_mac(FuriHalSpiBusHandle* handle, uint8_t* mac) {
+uint8_t nrf24_get_src_mac(const FuriHalSpiBusHandle* handle, uint8_t* mac) {
     uint8_t size = 0;
     uint8_t status = 0;
     size = nrf24_get_maclen(handle);
@@ -168,7 +172,7 @@ uint8_t nrf24_get_src_mac(FuriHalSpiBusHandle* handle, uint8_t* mac) {
     return status;
 }
 
-uint8_t nrf24_set_src_mac(FuriHalSpiBusHandle* handle, uint8_t* mac, uint8_t size) {
+uint8_t nrf24_set_src_mac(const FuriHalSpiBusHandle* handle, uint8_t* mac, uint8_t size) {
     uint8_t status = 0;
     uint8_t clearmac[] = {0, 0, 0, 0, 0};
     nrf24_set_maclen(handle, size);
@@ -177,7 +181,7 @@ uint8_t nrf24_set_src_mac(FuriHalSpiBusHandle* handle, uint8_t* mac, uint8_t siz
     return status;
 }
 
-uint8_t nrf24_get_dst_mac(FuriHalSpiBusHandle* handle, uint8_t* mac) {
+uint8_t nrf24_get_dst_mac(const FuriHalSpiBusHandle* handle, uint8_t* mac) {
     uint8_t size = 0;
     uint8_t status = 0;
     size = nrf24_get_maclen(handle);
@@ -185,7 +189,7 @@ uint8_t nrf24_get_dst_mac(FuriHalSpiBusHandle* handle, uint8_t* mac) {
     return status;
 }
 
-uint8_t nrf24_set_dst_mac(FuriHalSpiBusHandle* handle, uint8_t* mac, uint8_t size) {
+uint8_t nrf24_set_dst_mac(const FuriHalSpiBusHandle* handle, uint8_t* mac, uint8_t size) {
     uint8_t status = 0;
     uint8_t clearmac[] = {0, 0, 0, 0, 0};
     nrf24_set_maclen(handle, size);
@@ -194,21 +198,21 @@ uint8_t nrf24_set_dst_mac(FuriHalSpiBusHandle* handle, uint8_t* mac, uint8_t siz
     return status;
 }
 
-uint8_t nrf24_get_packetlen(FuriHalSpiBusHandle* handle, uint8_t pipe) {
+uint8_t nrf24_get_packetlen(const FuriHalSpiBusHandle* handle, uint8_t pipe) {
     uint8_t len = 0;
     if(pipe > 5) pipe = 0;
     nrf24_read_reg(handle, RX_PW_P0 + pipe, &len, 1);
     return len;
 }
 
-uint8_t nrf24_set_packetlen(FuriHalSpiBusHandle* handle, uint8_t len) {
+uint8_t nrf24_set_packetlen(const FuriHalSpiBusHandle* handle, uint8_t len) {
     uint8_t status = 0;
     status = nrf24_write_reg(handle, RX_PW_P0, len);
     return status;
 }
 
 uint8_t nrf24_rxpacket(
-    FuriHalSpiBusHandle* handle,
+    const FuriHalSpiBusHandle* handle,
     uint8_t* packet,
     uint8_t* ret_packetsize,
     uint8_t packet_size) {
@@ -246,7 +250,8 @@ uint8_t nrf24_rxpacket(
 }
 
 // Return 0 when error
-uint8_t nrf24_txpacket(FuriHalSpiBusHandle* handle, uint8_t* payload, uint8_t size, bool ack) {
+uint8_t
+    nrf24_txpacket(const FuriHalSpiBusHandle* handle, uint8_t* payload, uint8_t size, bool ack) {
     uint8_t status = 0;
     uint8_t tx[size + 1];
     uint8_t rx[size + 1];
@@ -273,7 +278,7 @@ uint8_t nrf24_txpacket(FuriHalSpiBusHandle* handle, uint8_t* payload, uint8_t si
     return status & TX_DS;
 }
 
-uint8_t nrf24_power_up(FuriHalSpiBusHandle* handle) {
+uint8_t nrf24_power_up(const FuriHalSpiBusHandle* handle) {
     uint8_t status = 0;
     uint8_t cfg = 0;
     nrf24_read_reg(handle, REG_CONFIG, &cfg, 1);
@@ -283,7 +288,7 @@ uint8_t nrf24_power_up(FuriHalSpiBusHandle* handle) {
     return status;
 }
 
-uint8_t nrf24_set_idle(FuriHalSpiBusHandle* handle) {
+uint8_t nrf24_set_idle(const FuriHalSpiBusHandle* handle) {
     uint8_t status = 0;
     uint8_t cfg = 0;
     nrf24_read_reg(handle, REG_CONFIG, &cfg, 1);
@@ -294,7 +299,7 @@ uint8_t nrf24_set_idle(FuriHalSpiBusHandle* handle) {
     return status;
 }
 
-uint8_t nrf24_set_rx_mode(FuriHalSpiBusHandle* handle) {
+uint8_t nrf24_set_rx_mode(const FuriHalSpiBusHandle* handle) {
     uint8_t status = 0;
     uint8_t cfg = 0;
     //status = nrf24_write_reg(handle, REG_CONFIG, 0x0F); // enable 2-byte CRC, PWR_UP, and PRIM_RX
@@ -307,7 +312,7 @@ uint8_t nrf24_set_rx_mode(FuriHalSpiBusHandle* handle) {
     return status;
 }
 
-uint8_t nrf24_set_tx_mode(FuriHalSpiBusHandle* handle) {
+uint8_t nrf24_set_tx_mode(const FuriHalSpiBusHandle* handle) {
     uint8_t status = 0;
     uint8_t cfg = 0;
     furi_hal_gpio_write(nrf24_CE_PIN, false);
@@ -323,7 +328,7 @@ uint8_t nrf24_set_tx_mode(FuriHalSpiBusHandle* handle) {
 }
 
 void nrf24_configure(
-    FuriHalSpiBusHandle* handle,
+    const FuriHalSpiBusHandle* handle,
     uint8_t rate,
     uint8_t* srcmac,
     uint8_t* dstmac,
@@ -369,7 +374,7 @@ void nrf24_configure(
     furi_delay_ms(200);
 }
 
-void nrf24_init_promisc_mode(FuriHalSpiBusHandle* handle, uint8_t channel, uint8_t rate) {
+void nrf24_init_promisc_mode(const FuriHalSpiBusHandle* handle, uint8_t channel, uint8_t rate) {
     //uint8_t preamble[] = {0x55, 0x00}; // little endian
     uint8_t preamble[] = {0xAA, 0x00}; // little endian
     //uint8_t preamble[] = {0x00, 0x55}; // little endian
@@ -496,7 +501,7 @@ bool validate_address(uint8_t* addr) {
     return true;
 }
 
-bool nrf24_sniff_address(FuriHalSpiBusHandle* handle, uint8_t maclen, uint8_t* address) {
+bool nrf24_sniff_address(const FuriHalSpiBusHandle* handle, uint8_t maclen, uint8_t* address) {
     bool found = false;
     uint8_t packet[32] = {0};
     uint8_t packetsize;
@@ -505,7 +510,8 @@ bool nrf24_sniff_address(FuriHalSpiBusHandle* handle, uint8_t maclen, uint8_t* a
     status = nrf24_rxpacket(handle, packet, &packetsize, true);
     if(status & 0x40) {
         if(validate_address(packet)) {
-            for(int i = 0; i < maclen; i++) address[i] = packet[maclen - 1 - i];
+            for(int i = 0; i < maclen; i++)
+                address[i] = packet[maclen - 1 - i];
 
             /*
             alt_address(packet, packet);
@@ -524,7 +530,7 @@ bool nrf24_sniff_address(FuriHalSpiBusHandle* handle, uint8_t maclen, uint8_t* a
 }
 
 uint8_t nrf24_find_channel(
-    FuriHalSpiBusHandle* handle,
+    const FuriHalSpiBusHandle* handle,
     uint8_t* srcmac,
     uint8_t* dstmac,
     uint8_t maclen,
@@ -551,6 +557,7 @@ uint8_t nrf24_find_channel(
 
 uint8_t nrf24_set_mac(uint8_t mac_addr, uint8_t* mac, uint8_t mlen) {
     uint8_t addr[5];
-    for(int i = 0; i < mlen; i++) addr[i] = mac[mlen - i - 1];
+    for(int i = 0; i < mlen; i++)
+        addr[i] = mac[mlen - i - 1];
     return nrf24_write_buf_reg(nrf24_HANDLE, mac_addr, addr, mlen);
-}
+}

+ 69 - 63
nrf24scan/lib/nrf24/nrf24.h

@@ -8,37 +8,37 @@
 extern "C" {
 #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_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_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_P1 0x0B
-#define REG_RX_ADDR_P2 0x0C
-#define REG_RX_ADDR_P3 0x0D
-#define REG_RX_ADDR_P4 0x0E
-#define REG_RX_ADDR_P5 0x0F
-#define REG_RF_CH 0x05
-#define REG_TX_ADDR 0x10
+#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_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_P1  0x0B
+#define REG_RX_ADDR_P2  0x0C
+#define REG_RX_ADDR_P3  0x0D
+#define REG_RX_ADDR_P4  0x0E
+#define REG_RX_ADDR_P5  0x0F
+#define REG_RF_CH       0x05
+#define REG_TX_ADDR     0x10
 #define REG_FIFO_STATUS 0x17
 
 #define RX_PW_P0 0x11
@@ -47,12 +47,12 @@ extern "C" {
 #define RX_PW_P3 0x14
 #define RX_PW_P4 0x15
 #define RX_PW_P5 0x16
-#define RX_DR 0x40
-#define TX_DS 0x20
-#define MAX_RT 0x10
+#define RX_DR    0x40
+#define TX_DS    0x20
+#define MAX_RT   0x10
 
 #define nrf24_TIMEOUT 500
-#define nrf24_CE_PIN &gpio_ext_pb2
+#define nrf24_CE_PIN  &gpio_ext_pb2
 #define nrf24_HANDLE                                                                        \
     (momentum_settings.spi_nrf24_handle == SpiDefault ? &furi_hal_spi_bus_handle_external : \
                                                         &furi_hal_spi_bus_handle_external_extra)
@@ -67,7 +67,7 @@ extern "C" {
  *
  * @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);
 
 /** Write buffer to device register
  *
@@ -78,7 +78,11 @@ uint8_t nrf24_write_reg(FuriHalSpiBusHandle* handle, uint8_t reg, uint8_t data);
  *
  * @return     device status
  */
-uint8_t nrf24_write_buf_reg(FuriHalSpiBusHandle* handle, uint8_t reg, uint8_t* data, uint8_t size);
+uint8_t nrf24_write_buf_reg(
+    const FuriHalSpiBusHandle* handle,
+    uint8_t reg,
+    uint8_t* data,
+    uint8_t size);
 
 /** Read device register
  *
@@ -88,7 +92,8 @@ uint8_t nrf24_write_buf_reg(FuriHalSpiBusHandle* handle, uint8_t reg, uint8_t* d
  *
  * @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 up the radio for operation
  * 
@@ -96,7 +101,7 @@ uint8_t nrf24_read_reg(FuriHalSpiBusHandle* handle, uint8_t reg, uint8_t* data,
  * 
  * @return     device status
  */
-uint8_t nrf24_power_up(FuriHalSpiBusHandle* handle);
+uint8_t nrf24_power_up(const FuriHalSpiBusHandle* handle);
 
 /** Power down the radio
  * 
@@ -104,7 +109,7 @@ uint8_t nrf24_power_up(FuriHalSpiBusHandle* handle);
  * 
  * @return     device status
  */
-uint8_t nrf24_set_idle(FuriHalSpiBusHandle* handle);
+uint8_t nrf24_set_idle(const FuriHalSpiBusHandle* handle);
 
 /** Sets the radio to RX mode
  *
@@ -112,7 +117,7 @@ uint8_t nrf24_set_idle(FuriHalSpiBusHandle* handle);
  * 
  * @return     device status
  */
-uint8_t nrf24_set_rx_mode(FuriHalSpiBusHandle* handle);
+uint8_t nrf24_set_rx_mode(const FuriHalSpiBusHandle* handle);
 
 /** Sets the radio to TX mode
  *
@@ -120,7 +125,7 @@ uint8_t nrf24_set_rx_mode(FuriHalSpiBusHandle* handle);
  * 
  * @return     device status
  */
-uint8_t nrf24_set_tx_mode(FuriHalSpiBusHandle* handle);
+uint8_t nrf24_set_tx_mode(const FuriHalSpiBusHandle* handle);
 
 /*=============================================================================================================*/
 
@@ -142,7 +147,7 @@ void nrf24_deinit();
  *
  * @return     device status
  */
-uint8_t nrf24_flush_rx(FuriHalSpiBusHandle* handle);
+uint8_t nrf24_flush_rx(const FuriHalSpiBusHandle* handle);
 
 /** Send flush tx command
  *
@@ -150,7 +155,7 @@ uint8_t nrf24_flush_rx(FuriHalSpiBusHandle* handle);
  *
  * @return     device status
  */
-uint8_t nrf24_flush_tx(FuriHalSpiBusHandle* handle);
+uint8_t nrf24_flush_tx(const FuriHalSpiBusHandle* handle);
 
 /** Gets the RX packet length in data pipe 0
  * 
@@ -158,7 +163,7 @@ uint8_t nrf24_flush_tx(FuriHalSpiBusHandle* handle);
  *             pipe - pipe index (0..5)
  * @return     packet length in data pipe 0
  */
-uint8_t nrf24_get_packetlen(FuriHalSpiBusHandle* handle, uint8_t pipe);
+uint8_t nrf24_get_packetlen(const FuriHalSpiBusHandle* handle, uint8_t pipe);
 
 /** Sets the RX packet length in data pipe 0
  * 
@@ -167,7 +172,7 @@ uint8_t nrf24_get_packetlen(FuriHalSpiBusHandle* handle, uint8_t pipe);
  * 
  * @return     device status
  */
-uint8_t nrf24_set_packetlen(FuriHalSpiBusHandle* handle, uint8_t len);
+uint8_t nrf24_set_packetlen(const FuriHalSpiBusHandle* handle, uint8_t len);
 
 /** Gets configured length of MAC address
  *
@@ -175,7 +180,7 @@ uint8_t nrf24_set_packetlen(FuriHalSpiBusHandle* handle, uint8_t len);
  * 
  * @return     MAC address length
  */
-uint8_t nrf24_get_maclen(FuriHalSpiBusHandle* handle);
+uint8_t nrf24_get_maclen(const FuriHalSpiBusHandle* handle);
 
 /** Sets configured length of MAC address
  *
@@ -184,7 +189,7 @@ uint8_t nrf24_get_maclen(FuriHalSpiBusHandle* handle);
  * 
  * @return     MAC address length
  */
-uint8_t nrf24_set_maclen(FuriHalSpiBusHandle* handle, uint8_t maclen);
+uint8_t nrf24_set_maclen(const FuriHalSpiBusHandle* handle, uint8_t maclen);
 
 /** Gets the current status flags from the STATUS register
  * 
@@ -192,7 +197,7 @@ uint8_t nrf24_set_maclen(FuriHalSpiBusHandle* handle, uint8_t maclen);
  * 
  * @return     status flags
  */
-uint8_t nrf24_status(FuriHalSpiBusHandle* handle);
+uint8_t nrf24_status(const FuriHalSpiBusHandle* handle);
 
 /** Gets the current transfer rate
  * 
@@ -200,7 +205,7 @@ uint8_t nrf24_status(FuriHalSpiBusHandle* handle);
  * 
  * @return     transfer rate in bps
  */
-uint32_t nrf24_get_rate(FuriHalSpiBusHandle* handle);
+uint32_t nrf24_get_rate(const FuriHalSpiBusHandle* handle);
 
 /** Sets the transfer rate
  *
@@ -209,7 +214,7 @@ uint32_t nrf24_get_rate(FuriHalSpiBusHandle* handle);
  * 
  * @return     device status
  */
-uint8_t nrf24_set_rate(FuriHalSpiBusHandle* handle, uint32_t rate);
+uint8_t nrf24_set_rate(const FuriHalSpiBusHandle* handle, uint32_t rate);
 
 /** Gets the current channel
  * In nrf24, the channel number is multiplied times 1MHz and added to 2400MHz to get the frequency
@@ -218,7 +223,7 @@ uint8_t nrf24_set_rate(FuriHalSpiBusHandle* handle, uint32_t rate);
  * 
  * @return     channel
  */
-uint8_t nrf24_get_chan(FuriHalSpiBusHandle* handle);
+uint8_t nrf24_get_chan(const FuriHalSpiBusHandle* handle);
 
 /** Sets the channel
  *
@@ -227,7 +232,7 @@ uint8_t nrf24_get_chan(FuriHalSpiBusHandle* handle);
  * 
  * @return     device status
  */
-uint8_t nrf24_set_chan(FuriHalSpiBusHandle* handle, uint8_t chan);
+uint8_t nrf24_set_chan(const FuriHalSpiBusHandle* handle, uint8_t chan);
 
 /** Gets the source mac address
  *
@@ -236,7 +241,7 @@ uint8_t nrf24_set_chan(FuriHalSpiBusHandle* handle, uint8_t chan);
  * 
  * @return     device status
  */
-uint8_t nrf24_get_src_mac(FuriHalSpiBusHandle* handle, uint8_t* mac);
+uint8_t nrf24_get_src_mac(const FuriHalSpiBusHandle* handle, uint8_t* mac);
 
 /** Sets the source mac address
  *
@@ -246,7 +251,7 @@ uint8_t nrf24_get_src_mac(FuriHalSpiBusHandle* handle, uint8_t* mac);
  * 
  * @return     device status
  */
-uint8_t nrf24_set_src_mac(FuriHalSpiBusHandle* handle, uint8_t* mac, uint8_t size);
+uint8_t nrf24_set_src_mac(const FuriHalSpiBusHandle* handle, uint8_t* mac, uint8_t size);
 
 /** Gets the dest mac address
  *
@@ -255,7 +260,7 @@ uint8_t nrf24_set_src_mac(FuriHalSpiBusHandle* handle, uint8_t* mac, uint8_t siz
  * 
  * @return     device status
  */
-uint8_t nrf24_get_dst_mac(FuriHalSpiBusHandle* handle, uint8_t* mac);
+uint8_t nrf24_get_dst_mac(const FuriHalSpiBusHandle* handle, uint8_t* mac);
 
 /** Sets the dest mac address
  *
@@ -265,7 +270,7 @@ uint8_t nrf24_get_dst_mac(FuriHalSpiBusHandle* handle, uint8_t* mac);
  * 
  * @return     device status
  */
-uint8_t nrf24_set_dst_mac(FuriHalSpiBusHandle* handle, uint8_t* mac, uint8_t size);
+uint8_t nrf24_set_dst_mac(const FuriHalSpiBusHandle* handle, uint8_t* mac, uint8_t size);
 
 /** Reads RX packet
  *
@@ -277,7 +282,7 @@ uint8_t nrf24_set_dst_mac(FuriHalSpiBusHandle* handle, uint8_t* mac, uint8_t siz
  * @return     device status
  */
 uint8_t nrf24_rxpacket(
-    FuriHalSpiBusHandle* handle,
+    const FuriHalSpiBusHandle* handle,
     uint8_t* packet,
     uint8_t* ret_packetsize,
     uint8_t packet_size_flag);
@@ -291,7 +296,8 @@ uint8_t nrf24_rxpacket(
  * 
  * @return     device status
  */
-uint8_t nrf24_txpacket(FuriHalSpiBusHandle* handle, uint8_t* payload, uint8_t size, bool ack);
+uint8_t
+    nrf24_txpacket(const FuriHalSpiBusHandle* handle, uint8_t* payload, uint8_t size, bool ack);
 
 /** Configure the radio
  * This is not comprehensive, but covers a lot of the common configuration options that may be changed
@@ -306,7 +312,7 @@ uint8_t nrf24_txpacket(FuriHalSpiBusHandle* handle, uint8_t* payload, uint8_t si
  * 
  */
 void nrf24_configure(
-    FuriHalSpiBusHandle* handle,
+    const FuriHalSpiBusHandle* handle,
     uint8_t rate,
     uint8_t* srcmac,
     uint8_t* dstmac,
@@ -325,7 +331,7 @@ uint8_t nrf24_set_mac(uint8_t mac_addr, uint8_t* mac, uint8_t mlen);
  * @param      channel - channel to tune to
  * @param      rate - transfer rate in Mbps (1 or 2) 
  */
-void nrf24_init_promisc_mode(FuriHalSpiBusHandle* handle, uint8_t channel, uint8_t rate);
+void nrf24_init_promisc_mode(const FuriHalSpiBusHandle* handle, uint8_t channel, uint8_t rate);
 
 /** Listens for a packet and returns first possible address sniffed
  * Call this only after calling nrf24_init_promisc_mode
@@ -335,7 +341,7 @@ void nrf24_init_promisc_mode(FuriHalSpiBusHandle* handle, uint8_t channel, uint8
  * 
  * @return     success
  */
-bool nrf24_sniff_address(FuriHalSpiBusHandle* handle, uint8_t maclen, uint8_t* address);
+bool nrf24_sniff_address(const FuriHalSpiBusHandle* handle, uint8_t maclen, uint8_t* address);
 
 /** Sends ping packet on each channel for designated tx mac looking for ack
  * 
@@ -351,7 +357,7 @@ bool nrf24_sniff_address(FuriHalSpiBusHandle* handle, uint8_t maclen, uint8_t* a
  * @return     channel that the address is listening on, if this value is above the max_channel param, it failed
  */
 uint8_t nrf24_find_channel(
-    FuriHalSpiBusHandle* handle,
+    const FuriHalSpiBusHandle* handle,
     uint8_t* srcmac,
     uint8_t* dstmac,
     uint8_t maclen,
@@ -384,4 +390,4 @@ uint32_t bytes_to_int32(uint8_t* bytes, bool bigendian);
 
 #ifdef __cplusplus
 }
-#endif
+#endif

+ 45 - 35
nrf24sniff/lib/nrf24/nrf24.c

@@ -36,7 +36,7 @@ void nrf24_deinit() {
 }
 
 void nrf24_spi_trx(
-    FuriHalSpiBusHandle* handle,
+    const FuriHalSpiBusHandle* handle,
     uint8_t* tx,
     uint8_t* rx,
     uint8_t size,
@@ -47,15 +47,18 @@ void nrf24_spi_trx(
     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 rx[2] = {0};
     nrf24_spi_trx(handle, tx, rx, 2, nrf24_TIMEOUT);
     return rx[0];
 }
 
-uint8_t
-    nrf24_write_buf_reg(FuriHalSpiBusHandle* handle, uint8_t reg, uint8_t* data, uint8_t size) {
+uint8_t nrf24_write_buf_reg(
+    const FuriHalSpiBusHandle* handle,
+    uint8_t reg,
+    uint8_t* data,
+    uint8_t size) {
     uint8_t tx[size + 1];
     uint8_t rx[size + 1];
     memset(rx, 0, size + 1);
@@ -65,7 +68,8 @@ uint8_t
     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 rx[size + 1];
     memset(rx, 0, size + 1);
@@ -76,42 +80,42 @@ uint8_t nrf24_read_reg(FuriHalSpiBusHandle* handle, uint8_t reg, uint8_t* data,
     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 rx[] = {0};
     nrf24_spi_trx(handle, tx, rx, 1, nrf24_TIMEOUT);
     return rx[0];
 }
 
-uint8_t nrf24_flush_tx(FuriHalSpiBusHandle* handle) {
+uint8_t nrf24_flush_tx(const FuriHalSpiBusHandle* handle) {
     uint8_t tx[] = {FLUSH_TX};
     uint8_t rx[] = {0};
     nrf24_spi_trx(handle, tx, rx, 1, nrf24_TIMEOUT);
     return rx[0];
 }
 
-uint8_t nrf24_get_maclen(FuriHalSpiBusHandle* handle) {
+uint8_t nrf24_get_maclen(const FuriHalSpiBusHandle* handle) {
     uint8_t maclen;
     nrf24_read_reg(handle, REG_SETUP_AW, &maclen, 1);
     maclen &= 3;
     return maclen + 2;
 }
 
-uint8_t nrf24_set_maclen(FuriHalSpiBusHandle* handle, uint8_t maclen) {
+uint8_t nrf24_set_maclen(const FuriHalSpiBusHandle* handle, uint8_t maclen) {
     assert(maclen > 1 && maclen < 6);
     uint8_t status = 0;
     status = nrf24_write_reg(handle, REG_SETUP_AW, maclen - 2);
     return status;
 }
 
-uint8_t nrf24_status(FuriHalSpiBusHandle* handle) {
+uint8_t nrf24_status(const FuriHalSpiBusHandle* handle) {
     uint8_t status;
     uint8_t tx[] = {R_REGISTER | (REGISTER_MASK & REG_STATUS)};
     nrf24_spi_trx(handle, tx, &status, 1, nrf24_TIMEOUT);
     return status;
 }
 
-uint32_t nrf24_get_rate(FuriHalSpiBusHandle* handle) {
+uint32_t nrf24_get_rate(const FuriHalSpiBusHandle* handle) {
     uint8_t setup = 0;
     uint32_t rate = 0;
     nrf24_read_reg(handle, REG_RF_SETUP, &setup, 1);
@@ -126,7 +130,7 @@ uint32_t nrf24_get_rate(FuriHalSpiBusHandle* handle) {
     return rate;
 }
 
-uint8_t nrf24_set_rate(FuriHalSpiBusHandle* handle, uint32_t rate) {
+uint8_t nrf24_set_rate(const FuriHalSpiBusHandle* handle, uint32_t rate) {
     uint8_t r6 = 0;
     uint8_t status = 0;
     if(!rate) rate = 2000000;
@@ -144,19 +148,19 @@ uint8_t nrf24_set_rate(FuriHalSpiBusHandle* handle, uint32_t rate) {
     return status;
 }
 
-uint8_t nrf24_get_chan(FuriHalSpiBusHandle* handle) {
+uint8_t nrf24_get_chan(const FuriHalSpiBusHandle* handle) {
     uint8_t channel = 0;
     nrf24_read_reg(handle, REG_RF_CH, &channel, 1);
     return channel;
 }
 
-uint8_t nrf24_set_chan(FuriHalSpiBusHandle* handle, uint8_t chan) {
+uint8_t nrf24_set_chan(const FuriHalSpiBusHandle* handle, uint8_t chan) {
     uint8_t status;
     status = nrf24_write_reg(handle, REG_RF_CH, chan);
     return status;
 }
 
-uint8_t nrf24_get_src_mac(FuriHalSpiBusHandle* handle, uint8_t* mac) {
+uint8_t nrf24_get_src_mac(const FuriHalSpiBusHandle* handle, uint8_t* mac) {
     uint8_t size = 0;
     uint8_t status = 0;
     size = nrf24_get_maclen(handle);
@@ -164,7 +168,7 @@ uint8_t nrf24_get_src_mac(FuriHalSpiBusHandle* handle, uint8_t* mac) {
     return status;
 }
 
-uint8_t nrf24_set_src_mac(FuriHalSpiBusHandle* handle, uint8_t* mac, uint8_t size) {
+uint8_t nrf24_set_src_mac(const FuriHalSpiBusHandle* handle, uint8_t* mac, uint8_t size) {
     uint8_t status = 0;
     uint8_t clearmac[] = {0, 0, 0, 0, 0};
     nrf24_set_maclen(handle, size);
@@ -173,7 +177,7 @@ uint8_t nrf24_set_src_mac(FuriHalSpiBusHandle* handle, uint8_t* mac, uint8_t siz
     return status;
 }
 
-uint8_t nrf24_get_dst_mac(FuriHalSpiBusHandle* handle, uint8_t* mac) {
+uint8_t nrf24_get_dst_mac(const FuriHalSpiBusHandle* handle, uint8_t* mac) {
     uint8_t size = 0;
     uint8_t status = 0;
     size = nrf24_get_maclen(handle);
@@ -181,7 +185,7 @@ uint8_t nrf24_get_dst_mac(FuriHalSpiBusHandle* handle, uint8_t* mac) {
     return status;
 }
 
-uint8_t nrf24_set_dst_mac(FuriHalSpiBusHandle* handle, uint8_t* mac, uint8_t size) {
+uint8_t nrf24_set_dst_mac(const FuriHalSpiBusHandle* handle, uint8_t* mac, uint8_t size) {
     uint8_t status = 0;
     uint8_t clearmac[] = {0, 0, 0, 0, 0};
     nrf24_set_maclen(handle, size);
@@ -190,20 +194,23 @@ uint8_t nrf24_set_dst_mac(FuriHalSpiBusHandle* handle, uint8_t* mac, uint8_t siz
     return status;
 }
 
-uint8_t nrf24_get_packetlen(FuriHalSpiBusHandle* handle) {
+uint8_t nrf24_get_packetlen(const FuriHalSpiBusHandle* handle) {
     uint8_t len = 0;
     nrf24_read_reg(handle, RX_PW_P0, &len, 1);
     return len;
 }
 
-uint8_t nrf24_set_packetlen(FuriHalSpiBusHandle* handle, uint8_t len) {
+uint8_t nrf24_set_packetlen(const FuriHalSpiBusHandle* handle, uint8_t len) {
     uint8_t status = 0;
     status = nrf24_write_reg(handle, RX_PW_P0, len);
     return status;
 }
 
-uint8_t
-    nrf24_rxpacket(FuriHalSpiBusHandle* handle, uint8_t* packet, uint8_t* packetsize, bool full) {
+uint8_t nrf24_rxpacket(
+    const FuriHalSpiBusHandle* handle,
+    uint8_t* packet,
+    uint8_t* packetsize,
+    bool full) {
     uint8_t status = 0;
     uint8_t size = 0;
     uint8_t tx_pl_wid[] = {R_RX_PL_WID, 0};
@@ -234,7 +241,8 @@ uint8_t
     return status;
 }
 
-uint8_t nrf24_txpacket(FuriHalSpiBusHandle* handle, uint8_t* payload, uint8_t size, bool ack) {
+uint8_t
+    nrf24_txpacket(const FuriHalSpiBusHandle* handle, uint8_t* payload, uint8_t size, bool ack) {
     uint8_t status = 0;
     uint8_t tx[size + 1];
     uint8_t rx[size + 1];
@@ -250,7 +258,8 @@ uint8_t nrf24_txpacket(FuriHalSpiBusHandle* handle, uint8_t* payload, uint8_t si
     nrf24_spi_trx(handle, tx, rx, size + 1, nrf24_TIMEOUT);
     nrf24_set_tx_mode(handle);
 
-    while(!(status & (TX_DS | MAX_RT))) status = nrf24_status(handle);
+    while(!(status & (TX_DS | MAX_RT)))
+        status = nrf24_status(handle);
 
     if(status & MAX_RT) nrf24_flush_tx(handle);
 
@@ -259,7 +268,7 @@ uint8_t nrf24_txpacket(FuriHalSpiBusHandle* handle, uint8_t* payload, uint8_t si
     return status & TX_DS;
 }
 
-uint8_t nrf24_power_up(FuriHalSpiBusHandle* handle) {
+uint8_t nrf24_power_up(const FuriHalSpiBusHandle* handle) {
     uint8_t status = 0;
     uint8_t cfg = 0;
     nrf24_read_reg(handle, REG_CONFIG, &cfg, 1);
@@ -269,7 +278,7 @@ uint8_t nrf24_power_up(FuriHalSpiBusHandle* handle) {
     return status;
 }
 
-uint8_t nrf24_set_idle(FuriHalSpiBusHandle* handle) {
+uint8_t nrf24_set_idle(const FuriHalSpiBusHandle* handle) {
     uint8_t status = 0;
     uint8_t cfg = 0;
     nrf24_read_reg(handle, REG_CONFIG, &cfg, 1);
@@ -280,7 +289,7 @@ uint8_t nrf24_set_idle(FuriHalSpiBusHandle* handle) {
     return status;
 }
 
-uint8_t nrf24_set_rx_mode(FuriHalSpiBusHandle* handle) {
+uint8_t nrf24_set_rx_mode(const FuriHalSpiBusHandle* handle) {
     uint8_t status = 0;
     uint8_t cfg = 0;
     //status = nrf24_write_reg(handle, REG_CONFIG, 0x0F); // enable 2-byte CRC, PWR_UP, and PRIM_RX
@@ -293,7 +302,7 @@ uint8_t nrf24_set_rx_mode(FuriHalSpiBusHandle* handle) {
     return status;
 }
 
-uint8_t nrf24_set_tx_mode(FuriHalSpiBusHandle* handle) {
+uint8_t nrf24_set_tx_mode(const FuriHalSpiBusHandle* handle) {
     uint8_t status = 0;
     uint8_t cfg = 0;
     furi_hal_gpio_write(nrf24_CE_PIN, false);
@@ -309,7 +318,7 @@ uint8_t nrf24_set_tx_mode(FuriHalSpiBusHandle* handle) {
 }
 
 void nrf24_configure(
-    FuriHalSpiBusHandle* handle,
+    const FuriHalSpiBusHandle* handle,
     uint8_t rate,
     uint8_t* srcmac,
     uint8_t* dstmac,
@@ -355,7 +364,7 @@ void nrf24_configure(
     furi_delay_ms(200);
 }
 
-void nrf24_init_promisc_mode(FuriHalSpiBusHandle* handle, uint8_t channel, uint8_t rate) {
+void nrf24_init_promisc_mode(const FuriHalSpiBusHandle* handle, uint8_t channel, uint8_t rate) {
     //uint8_t preamble[] = {0x55, 0x00}; // little endian
     uint8_t preamble[] = {0xAA, 0x00}; // little endian
     //uint8_t preamble[] = {0x00, 0x55}; // little endian
@@ -482,7 +491,7 @@ bool validate_address(uint8_t* addr) {
     return true;
 }
 
-bool nrf24_sniff_address(FuriHalSpiBusHandle* handle, uint8_t maclen, uint8_t* address) {
+bool nrf24_sniff_address(const FuriHalSpiBusHandle* handle, uint8_t maclen, uint8_t* address) {
     bool found = false;
     uint8_t packet[32] = {0};
     uint8_t packetsize;
@@ -491,7 +500,8 @@ bool nrf24_sniff_address(FuriHalSpiBusHandle* handle, uint8_t maclen, uint8_t* a
     status = nrf24_rxpacket(handle, packet, &packetsize, true);
     if(status & 0x40) {
         if(validate_address(packet)) {
-            for(int i = 0; i < maclen; i++) address[i] = packet[maclen - 1 - i];
+            for(int i = 0; i < maclen; i++)
+                address[i] = packet[maclen - 1 - i];
 
             /*
             alt_address(packet, packet);
@@ -510,7 +520,7 @@ bool nrf24_sniff_address(FuriHalSpiBusHandle* handle, uint8_t maclen, uint8_t* a
 }
 
 uint8_t nrf24_find_channel(
-    FuriHalSpiBusHandle* handle,
+    const FuriHalSpiBusHandle* handle,
     uint8_t* srcmac,
     uint8_t* dstmac,
     uint8_t maclen,
@@ -535,7 +545,7 @@ uint8_t nrf24_find_channel(
     return ch;
 }
 
-bool nrf24_check_connected(FuriHalSpiBusHandle* handle) {
+bool nrf24_check_connected(const FuriHalSpiBusHandle* handle) {
     uint8_t status = nrf24_status(handle);
 
     if(status != 0x00) {
@@ -543,4 +553,4 @@ bool nrf24_check_connected(FuriHalSpiBusHandle* handle) {
     } else {
         return false;
     }
-}
+}

+ 66 - 57
nrf24sniff/lib/nrf24/nrf24.h

@@ -9,39 +9,39 @@
 extern "C" {
 #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_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_DYNPD 0x1C
-#define REG_FEATURE 0x1D
-#define REG_RF_SETUP 0x06
-#define REG_STATUS 0x07
+#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_RF_CH 0x05
-#define REG_TX_ADDR 0x10
+#define REG_RF_CH      0x05
+#define REG_TX_ADDR    0x10
 
 #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_CE_PIN &gpio_ext_pb2
+#define nrf24_CE_PIN  &gpio_ext_pb2
 #define nrf24_HANDLE                                                                        \
     (momentum_settings.spi_nrf24_handle == SpiDefault ? &furi_hal_spi_bus_handle_external : \
                                                         &furi_hal_spi_bus_handle_external_extra)
@@ -56,7 +56,7 @@ extern "C" {
  *
  * @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);
 
 /** Write buffer to device register
  *
@@ -67,7 +67,11 @@ uint8_t nrf24_write_reg(FuriHalSpiBusHandle* handle, uint8_t reg, uint8_t data);
  *
  * @return     device status
  */
-uint8_t nrf24_write_buf_reg(FuriHalSpiBusHandle* handle, uint8_t reg, uint8_t* data, uint8_t size);
+uint8_t nrf24_write_buf_reg(
+    const FuriHalSpiBusHandle* handle,
+    uint8_t reg,
+    uint8_t* data,
+    uint8_t size);
 
 /** Read device register
  *
@@ -77,7 +81,8 @@ uint8_t nrf24_write_buf_reg(FuriHalSpiBusHandle* handle, uint8_t reg, uint8_t* d
  *
  * @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 up the radio for operation
  * 
@@ -85,7 +90,7 @@ uint8_t nrf24_read_reg(FuriHalSpiBusHandle* handle, uint8_t reg, uint8_t* data,
  * 
  * @return     device status
  */
-uint8_t nrf24_power_up(FuriHalSpiBusHandle* handle);
+uint8_t nrf24_power_up(const FuriHalSpiBusHandle* handle);
 
 /** Power down the radio
  * 
@@ -93,7 +98,7 @@ uint8_t nrf24_power_up(FuriHalSpiBusHandle* handle);
  * 
  * @return     device status
  */
-uint8_t nrf24_set_idle(FuriHalSpiBusHandle* handle);
+uint8_t nrf24_set_idle(const FuriHalSpiBusHandle* handle);
 
 /** Sets the radio to RX mode
  *
@@ -101,7 +106,7 @@ uint8_t nrf24_set_idle(FuriHalSpiBusHandle* handle);
  * 
  * @return     device status
  */
-uint8_t nrf24_set_rx_mode(FuriHalSpiBusHandle* handle);
+uint8_t nrf24_set_rx_mode(const FuriHalSpiBusHandle* handle);
 
 /** Sets the radio to TX mode
  *
@@ -109,7 +114,7 @@ uint8_t nrf24_set_rx_mode(FuriHalSpiBusHandle* handle);
  * 
  * @return     device status
  */
-uint8_t nrf24_set_tx_mode(FuriHalSpiBusHandle* handle);
+uint8_t nrf24_set_tx_mode(const FuriHalSpiBusHandle* handle);
 
 /*=============================================================================================================*/
 
@@ -131,7 +136,7 @@ void nrf24_deinit();
  *
  * @return     device status
  */
-uint8_t nrf24_flush_rx(FuriHalSpiBusHandle* handle);
+uint8_t nrf24_flush_rx(const FuriHalSpiBusHandle* handle);
 
 /** Send flush tx command
  *
@@ -139,7 +144,7 @@ uint8_t nrf24_flush_rx(FuriHalSpiBusHandle* handle);
  *
  * @return     device status
  */
-uint8_t nrf24_flush_tx(FuriHalSpiBusHandle* handle);
+uint8_t nrf24_flush_tx(const FuriHalSpiBusHandle* handle);
 
 /** Gets the RX packet length in data pipe 0
  * 
@@ -147,7 +152,7 @@ uint8_t nrf24_flush_tx(FuriHalSpiBusHandle* handle);
  * 
  * @return     packet length in data pipe 0
  */
-uint8_t nrf24_get_packetlen(FuriHalSpiBusHandle* handle);
+uint8_t nrf24_get_packetlen(const FuriHalSpiBusHandle* handle);
 
 /** Sets the RX packet length in data pipe 0
  * 
@@ -156,7 +161,7 @@ uint8_t nrf24_get_packetlen(FuriHalSpiBusHandle* handle);
  * 
  * @return     device status
  */
-uint8_t nrf24_set_packetlen(FuriHalSpiBusHandle* handle, uint8_t len);
+uint8_t nrf24_set_packetlen(const FuriHalSpiBusHandle* handle, uint8_t len);
 
 /** Gets configured length of MAC address
  *
@@ -164,7 +169,7 @@ uint8_t nrf24_set_packetlen(FuriHalSpiBusHandle* handle, uint8_t len);
  * 
  * @return     MAC address length
  */
-uint8_t nrf24_get_maclen(FuriHalSpiBusHandle* handle);
+uint8_t nrf24_get_maclen(const FuriHalSpiBusHandle* handle);
 
 /** Sets configured length of MAC address
  *
@@ -173,7 +178,7 @@ uint8_t nrf24_get_maclen(FuriHalSpiBusHandle* handle);
  * 
  * @return     MAC address length
  */
-uint8_t nrf24_set_maclen(FuriHalSpiBusHandle* handle, uint8_t maclen);
+uint8_t nrf24_set_maclen(const FuriHalSpiBusHandle* handle, uint8_t maclen);
 
 /** Gets the current status flags from the STATUS register
  * 
@@ -181,7 +186,7 @@ uint8_t nrf24_set_maclen(FuriHalSpiBusHandle* handle, uint8_t maclen);
  * 
  * @return     status flags
  */
-uint8_t nrf24_status(FuriHalSpiBusHandle* handle);
+uint8_t nrf24_status(const FuriHalSpiBusHandle* handle);
 
 /** Gets the current transfer rate
  * 
@@ -189,7 +194,7 @@ uint8_t nrf24_status(FuriHalSpiBusHandle* handle);
  * 
  * @return     transfer rate in bps
  */
-uint32_t nrf24_get_rate(FuriHalSpiBusHandle* handle);
+uint32_t nrf24_get_rate(const FuriHalSpiBusHandle* handle);
 
 /** Sets the transfer rate
  *
@@ -198,7 +203,7 @@ uint32_t nrf24_get_rate(FuriHalSpiBusHandle* handle);
  * 
  * @return     device status
  */
-uint8_t nrf24_set_rate(FuriHalSpiBusHandle* handle, uint32_t rate);
+uint8_t nrf24_set_rate(const FuriHalSpiBusHandle* handle, uint32_t rate);
 
 /** Gets the current channel
  * In nrf24, the channel number is multiplied times 1MHz and added to 2400MHz to get the frequency
@@ -207,7 +212,7 @@ uint8_t nrf24_set_rate(FuriHalSpiBusHandle* handle, uint32_t rate);
  * 
  * @return     channel
  */
-uint8_t nrf24_get_chan(FuriHalSpiBusHandle* handle);
+uint8_t nrf24_get_chan(const FuriHalSpiBusHandle* handle);
 
 /** Sets the channel
  *
@@ -216,7 +221,7 @@ uint8_t nrf24_get_chan(FuriHalSpiBusHandle* handle);
  * 
  * @return     device status
  */
-uint8_t nrf24_set_chan(FuriHalSpiBusHandle* handle, uint8_t chan);
+uint8_t nrf24_set_chan(const FuriHalSpiBusHandle* handle, uint8_t chan);
 
 /** Gets the source mac address
  *
@@ -225,7 +230,7 @@ uint8_t nrf24_set_chan(FuriHalSpiBusHandle* handle, uint8_t chan);
  * 
  * @return     device status
  */
-uint8_t nrf24_get_src_mac(FuriHalSpiBusHandle* handle, uint8_t* mac);
+uint8_t nrf24_get_src_mac(const FuriHalSpiBusHandle* handle, uint8_t* mac);
 
 /** Sets the source mac address
  *
@@ -235,7 +240,7 @@ uint8_t nrf24_get_src_mac(FuriHalSpiBusHandle* handle, uint8_t* mac);
  * 
  * @return     device status
  */
-uint8_t nrf24_set_src_mac(FuriHalSpiBusHandle* handle, uint8_t* mac, uint8_t size);
+uint8_t nrf24_set_src_mac(const FuriHalSpiBusHandle* handle, uint8_t* mac, uint8_t size);
 
 /** Gets the dest mac address
  *
@@ -244,7 +249,7 @@ uint8_t nrf24_set_src_mac(FuriHalSpiBusHandle* handle, uint8_t* mac, uint8_t siz
  * 
  * @return     device status
  */
-uint8_t nrf24_get_dst_mac(FuriHalSpiBusHandle* handle, uint8_t* mac);
+uint8_t nrf24_get_dst_mac(const FuriHalSpiBusHandle* handle, uint8_t* mac);
 
 /** Sets the dest mac address
  *
@@ -254,7 +259,7 @@ uint8_t nrf24_get_dst_mac(FuriHalSpiBusHandle* handle, uint8_t* mac);
  * 
  * @return     device status
  */
-uint8_t nrf24_set_dst_mac(FuriHalSpiBusHandle* handle, uint8_t* mac, uint8_t size);
+uint8_t nrf24_set_dst_mac(const FuriHalSpiBusHandle* handle, uint8_t* mac, uint8_t size);
 
 /** Reads RX packet
  *
@@ -265,8 +270,11 @@ uint8_t nrf24_set_dst_mac(FuriHalSpiBusHandle* handle, uint8_t* mac, uint8_t siz
  * 
  * @return     device status
  */
-uint8_t
-    nrf24_rxpacket(FuriHalSpiBusHandle* handle, uint8_t* packet, uint8_t* packetsize, bool full);
+uint8_t nrf24_rxpacket(
+    const FuriHalSpiBusHandle* handle,
+    uint8_t* packet,
+    uint8_t* packetsize,
+    bool full);
 
 /** Sends TX packet
  *
@@ -277,7 +285,8 @@ uint8_t
  * 
  * @return     device status
  */
-uint8_t nrf24_txpacket(FuriHalSpiBusHandle* handle, uint8_t* payload, uint8_t size, bool ack);
+uint8_t
+    nrf24_txpacket(const FuriHalSpiBusHandle* handle, uint8_t* payload, uint8_t size, bool ack);
 
 /** Configure the radio
  * This is not comprehensive, but covers a lot of the common configuration options that may be changed
@@ -292,7 +301,7 @@ uint8_t nrf24_txpacket(FuriHalSpiBusHandle* handle, uint8_t* payload, uint8_t si
  * 
  */
 void nrf24_configure(
-    FuriHalSpiBusHandle* handle,
+    const FuriHalSpiBusHandle* handle,
     uint8_t rate,
     uint8_t* srcmac,
     uint8_t* dstmac,
@@ -308,7 +317,7 @@ void nrf24_configure(
  * @param      channel - channel to tune to
  * @param      rate - transfer rate in Mbps (1 or 2) 
  */
-void nrf24_init_promisc_mode(FuriHalSpiBusHandle* handle, uint8_t channel, uint8_t rate);
+void nrf24_init_promisc_mode(const FuriHalSpiBusHandle* handle, uint8_t channel, uint8_t rate);
 
 /** Listens for a packet and returns first possible address sniffed
  * Call this only after calling nrf24_init_promisc_mode
@@ -318,7 +327,7 @@ void nrf24_init_promisc_mode(FuriHalSpiBusHandle* handle, uint8_t channel, uint8
  * 
  * @return     success
  */
-bool nrf24_sniff_address(FuriHalSpiBusHandle* handle, uint8_t maclen, uint8_t* address);
+bool nrf24_sniff_address(const FuriHalSpiBusHandle* handle, uint8_t maclen, uint8_t* address);
 
 /** Sends ping packet on each channel for designated tx mac looking for ack
  * 
@@ -334,7 +343,7 @@ bool nrf24_sniff_address(FuriHalSpiBusHandle* handle, uint8_t maclen, uint8_t* a
  * @return     channel that the address is listening on, if this value is above the max_channel param, it failed
  */
 uint8_t nrf24_find_channel(
-    FuriHalSpiBusHandle* handle,
+    const FuriHalSpiBusHandle* handle,
     uint8_t* srcmac,
     uint8_t* dstmac,
     uint8_t maclen,
@@ -370,8 +379,8 @@ uint32_t bytes_to_int32(uint8_t* bytes, bool bigendian);
  * 
  * @return     true if connected, otherwise false
 */
-bool nrf24_check_connected(FuriHalSpiBusHandle* handle);
+bool nrf24_check_connected(const FuriHalSpiBusHandle* handle);
 
 #ifdef __cplusplus
 }
-#endif
+#endif

+ 1 - 1
unitemp/interfaces/I2CSensor.c

@@ -19,7 +19,7 @@
 
 static uint8_t sensors_count = 0;
 
-void unitemp_i2c_acquire(FuriHalI2cBusHandle* handle) {
+void unitemp_i2c_acquire(const FuriHalI2cBusHandle* handle) {
     furi_hal_i2c_acquire(handle);
     LL_GPIO_SetPinPull(gpio_ext_pc1.port, gpio_ext_pc1.pin, LL_GPIO_PULL_UP);
     LL_GPIO_SetPinPull(gpio_ext_pc0.port, gpio_ext_pc0.pin, LL_GPIO_PULL_UP);

+ 2 - 2
unitemp/interfaces/I2CSensor.h

@@ -25,7 +25,7 @@
 //Структура I2C датчика
 typedef struct I2CSensor {
     //Указатель на интерфейс I2C
-    FuriHalI2cBusHandle* i2c;
+    const FuriHalI2cBusHandle* i2c;
     //Минимальный адрес устройства на шине I2C
     uint8_t minI2CAdr;
     //Максимальный адрес устройства на шине I2C
@@ -41,7 +41,7 @@ typedef struct I2CSensor {
  * 
  * @param handle Указатель на шину
  */
-void unitemp_i2c_acquire(FuriHalI2cBusHandle* handle);
+void unitemp_i2c_acquire(const FuriHalI2cBusHandle* handle);
 
 /**
  * @brief Проверить наличие датчика на шине

+ 7 - 7
wiiec/i2c_workaround.h

@@ -6,7 +6,7 @@
 
 	FYI. *something* in the following code is the fix
 
-void  furi_hal_i2c_acquire (FuriHalI2cBusHandle* handle)
+void  furi_hal_i2c_acquire (const FuriHalI2cBusHandle* handle)
 {
 	// 1. Disable the power/backlight (it uses i2c)
     furi_hal_power_insomnia_enter();
@@ -22,7 +22,7 @@ void  furi_hal_i2c_acquire (FuriHalI2cBusHandle* handle)
     handle->callback(handle, FuriHalI2cBusHandleEventActivate);
 }
 
-void  furi_hal_i2c_release (FuriHalI2cBusHandle* handle)
+void  furi_hal_i2c_release (const FuriHalI2cBusHandle* handle)
 {
     // Ensure that current handle is our handle
     furi_check(handle->bus->current_handle == handle);
@@ -50,7 +50,7 @@ void  furi_hal_i2c_release (FuriHalI2cBusHandle* handle)
 #if ENABLE_WORKAROUND == 1
 //+============================================================================ ========================================
 static inline bool furi_hal_Wi2c_is_device_ready(
-    FuriHalI2cBusHandle* const bus,
+    const FuriHalI2cBusHandle* const bus,
     const uint8_t addr,
     const uint32_t tmo) {
     furi_hal_i2c_acquire(bus);
@@ -61,7 +61,7 @@ static inline bool furi_hal_Wi2c_is_device_ready(
 
 //+============================================================================
 static inline bool furi_hal_Wi2c_tx(
-    FuriHalI2cBusHandle* const bus,
+    const FuriHalI2cBusHandle* const bus,
     const uint8_t addr,
     const void* buf,
     const size_t len,
@@ -74,7 +74,7 @@ static inline bool furi_hal_Wi2c_tx(
 
 //+============================================================================
 static inline bool furi_hal_Wi2c_rx(
-    FuriHalI2cBusHandle* const bus,
+    const FuriHalI2cBusHandle* const bus,
     const uint8_t addr,
     void* buf,
     const size_t len,
@@ -87,7 +87,7 @@ static inline bool furi_hal_Wi2c_rx(
 
 //+============================================================================
 static inline bool furi_hal_Wi2c_trx(
-    FuriHalI2cBusHandle* const bus,
+    const FuriHalI2cBusHandle* const bus,
     const uint8_t addr,
     const void* tx,
     const size_t txlen,
@@ -112,7 +112,7 @@ static inline bool furi_hal_Wi2c_trx(
 // The puts a delay between the address being set and the data being read
 //
 static inline bool furi_hal_i2c_trxd(
-    FuriHalI2cBusHandle* const bus,
+    const FuriHalI2cBusHandle* const bus,
     const uint8_t addr,
     const void* tx,
     const size_t txlen,