Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/ClusterM/flipperzero-firmware.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/targets/f7/furi-hal/furi-hal-subghz.c')
-rw-r--r--firmware/targets/f7/furi-hal/furi-hal-subghz.c132
1 files changed, 66 insertions, 66 deletions
diff --git a/firmware/targets/f7/furi-hal/furi-hal-subghz.c b/firmware/targets/f7/furi-hal/furi-hal-subghz.c
index 25fa3b7a..dac4514e 100644
--- a/firmware/targets/f7/furi-hal/furi-hal-subghz.c
+++ b/firmware/targets/f7/furi-hal/furi-hal-subghz.c
@@ -269,7 +269,7 @@ void furi_hal_subghz_init() {
furi_assert(furi_hal_subghz_state == SubGhzStateInit);
furi_hal_subghz_state = SubGhzStateIdle;
- const FuriHalSpiDevice* device = furi_hal_spi_device_get(FuriHalSpiDeviceIdSubGhz);
+ furi_hal_spi_acquire(&furi_hal_spi_bus_handle_subghz);
#ifdef FURI_HAL_SUBGHZ_TX_GPIO
hal_gpio_init(&FURI_HAL_SUBGHZ_TX_GPIO, GpioModeOutputPushPull, GpioPullNo, GpioSpeedLow);
@@ -277,58 +277,58 @@ void furi_hal_subghz_init() {
// Reset
hal_gpio_init(&gpio_cc1101_g0, GpioModeAnalog, GpioPullNo, GpioSpeedLow);
- cc1101_reset(device);
- cc1101_write_reg(device, CC1101_IOCFG0, CC1101IocfgHighImpedance);
+ cc1101_reset(&furi_hal_spi_bus_handle_subghz);
+ cc1101_write_reg(&furi_hal_spi_bus_handle_subghz, CC1101_IOCFG0, CC1101IocfgHighImpedance);
// Prepare GD0 for power on self test
hal_gpio_init(&gpio_cc1101_g0, GpioModeInput, GpioPullNo, GpioSpeedLow);
// GD0 low
- cc1101_write_reg(device, CC1101_IOCFG0, CC1101IocfgHW);
+ cc1101_write_reg(&furi_hal_spi_bus_handle_subghz, CC1101_IOCFG0, CC1101IocfgHW);
while(hal_gpio_read(&gpio_cc1101_g0) != false)
;
// GD0 high
- cc1101_write_reg(device, CC1101_IOCFG0, CC1101IocfgHW | CC1101_IOCFG_INV);
+ cc1101_write_reg(&furi_hal_spi_bus_handle_subghz, CC1101_IOCFG0, CC1101IocfgHW | CC1101_IOCFG_INV);
while(hal_gpio_read(&gpio_cc1101_g0) != true)
;
// Reset GD0 to floating state
- cc1101_write_reg(device, CC1101_IOCFG0, CC1101IocfgHighImpedance);
+ cc1101_write_reg(&furi_hal_spi_bus_handle_subghz, CC1101_IOCFG0, CC1101IocfgHighImpedance);
hal_gpio_init(&gpio_cc1101_g0, GpioModeAnalog, GpioPullNo, GpioSpeedLow);
// RF switches
hal_gpio_init(&gpio_rf_sw_0, GpioModeOutputPushPull, GpioPullNo, GpioSpeedLow);
- cc1101_write_reg(device, CC1101_IOCFG2, CC1101IocfgHW);
+ cc1101_write_reg(&furi_hal_spi_bus_handle_subghz, CC1101_IOCFG2, CC1101IocfgHW);
// Go to sleep
- cc1101_shutdown(device);
+ cc1101_shutdown(&furi_hal_spi_bus_handle_subghz);
- furi_hal_spi_device_return(device);
+ furi_hal_spi_release(&furi_hal_spi_bus_handle_subghz);
FURI_LOG_I(TAG, "Init OK");
}
void furi_hal_subghz_sleep() {
furi_assert(furi_hal_subghz_state == SubGhzStateIdle);
- const FuriHalSpiDevice* device = furi_hal_spi_device_get(FuriHalSpiDeviceIdSubGhz);
+ furi_hal_spi_acquire(&furi_hal_spi_bus_handle_subghz);
- cc1101_switch_to_idle(device);
+ cc1101_switch_to_idle(&furi_hal_spi_bus_handle_subghz);
- cc1101_write_reg(device, CC1101_IOCFG0, CC1101IocfgHighImpedance);
+ cc1101_write_reg(&furi_hal_spi_bus_handle_subghz, CC1101_IOCFG0, CC1101IocfgHighImpedance);
hal_gpio_init(&gpio_cc1101_g0, GpioModeAnalog, GpioPullNo, GpioSpeedLow);
- cc1101_shutdown(device);
+ cc1101_shutdown(&furi_hal_spi_bus_handle_subghz);
- furi_hal_spi_device_return(device);
+ furi_hal_spi_release(&furi_hal_spi_bus_handle_subghz);
}
void furi_hal_subghz_dump_state() {
- const FuriHalSpiDevice* device = furi_hal_spi_device_get(FuriHalSpiDeviceIdSubGhz);
+ furi_hal_spi_acquire(&furi_hal_spi_bus_handle_subghz);
printf(
"[furi_hal_subghz] cc1101 chip %d, version %d\r\n",
- cc1101_get_partnumber(device),
- cc1101_get_version(device));
- furi_hal_spi_device_return(device);
+ cc1101_get_partnumber(&furi_hal_spi_bus_handle_subghz),
+ cc1101_get_version(&furi_hal_spi_bus_handle_subghz));
+ furi_hal_spi_release(&furi_hal_spi_bus_handle_subghz);
}
void furi_hal_subghz_load_preset(FuriHalSubGhzPreset preset) {
@@ -350,81 +350,81 @@ void furi_hal_subghz_load_preset(FuriHalSubGhzPreset preset) {
}
void furi_hal_subghz_load_registers(const uint8_t data[][2]) {
- const FuriHalSpiDevice* device = furi_hal_spi_device_get(FuriHalSpiDeviceIdSubGhz);
- cc1101_reset(device);
+ furi_hal_spi_acquire(&furi_hal_spi_bus_handle_subghz);
+ cc1101_reset(&furi_hal_spi_bus_handle_subghz);
uint32_t i = 0;
while(data[i][0]) {
- cc1101_write_reg(device, data[i][0], data[i][1]);
+ cc1101_write_reg(&furi_hal_spi_bus_handle_subghz, data[i][0], data[i][1]);
i++;
}
- furi_hal_spi_device_return(device);
+ furi_hal_spi_release(&furi_hal_spi_bus_handle_subghz);
}
void furi_hal_subghz_load_patable(const uint8_t data[8]) {
- const FuriHalSpiDevice* device = furi_hal_spi_device_get(FuriHalSpiDeviceIdSubGhz);
- cc1101_set_pa_table(device, data);
- furi_hal_spi_device_return(device);
+ furi_hal_spi_acquire(&furi_hal_spi_bus_handle_subghz);
+ cc1101_set_pa_table(&furi_hal_spi_bus_handle_subghz, data);
+ furi_hal_spi_release(&furi_hal_spi_bus_handle_subghz);
}
void furi_hal_subghz_write_packet(const uint8_t* data, uint8_t size) {
- const FuriHalSpiDevice* device = furi_hal_spi_device_get(FuriHalSpiDeviceIdSubGhz);
- cc1101_flush_tx(device);
- cc1101_write_fifo(device, data, size);
- furi_hal_spi_device_return(device);
+ furi_hal_spi_acquire(&furi_hal_spi_bus_handle_subghz);
+ cc1101_flush_tx(&furi_hal_spi_bus_handle_subghz);
+ cc1101_write_fifo(&furi_hal_spi_bus_handle_subghz, data, size);
+ furi_hal_spi_release(&furi_hal_spi_bus_handle_subghz);
}
void furi_hal_subghz_flush_rx() {
- const FuriHalSpiDevice* device = furi_hal_spi_device_get(FuriHalSpiDeviceIdSubGhz);
- cc1101_flush_rx(device);
- furi_hal_spi_device_return(device);
+ furi_hal_spi_acquire(&furi_hal_spi_bus_handle_subghz);
+ cc1101_flush_rx(&furi_hal_spi_bus_handle_subghz);
+ furi_hal_spi_release(&furi_hal_spi_bus_handle_subghz);
}
void furi_hal_subghz_read_packet(uint8_t* data, uint8_t* size) {
- const FuriHalSpiDevice* device = furi_hal_spi_device_get(FuriHalSpiDeviceIdSubGhz);
- cc1101_read_fifo(device, data, size);
- furi_hal_spi_device_return(device);
+ furi_hal_spi_acquire(&furi_hal_spi_bus_handle_subghz);
+ cc1101_read_fifo(&furi_hal_spi_bus_handle_subghz, data, size);
+ furi_hal_spi_release(&furi_hal_spi_bus_handle_subghz);
}
void furi_hal_subghz_shutdown() {
- const FuriHalSpiDevice* device = furi_hal_spi_device_get(FuriHalSpiDeviceIdSubGhz);
+ furi_hal_spi_acquire(&furi_hal_spi_bus_handle_subghz);
// Reset and shutdown
- cc1101_shutdown(device);
- furi_hal_spi_device_return(device);
+ cc1101_shutdown(&furi_hal_spi_bus_handle_subghz);
+ furi_hal_spi_release(&furi_hal_spi_bus_handle_subghz);
}
void furi_hal_subghz_reset() {
- const FuriHalSpiDevice* device = furi_hal_spi_device_get(FuriHalSpiDeviceIdSubGhz);
+ furi_hal_spi_acquire(&furi_hal_spi_bus_handle_subghz);
hal_gpio_init(&gpio_cc1101_g0, GpioModeAnalog, GpioPullNo, GpioSpeedLow);
- cc1101_switch_to_idle(device);
- cc1101_reset(device);
- cc1101_write_reg(device, CC1101_IOCFG0, CC1101IocfgHighImpedance);
- furi_hal_spi_device_return(device);
+ cc1101_switch_to_idle(&furi_hal_spi_bus_handle_subghz);
+ cc1101_reset(&furi_hal_spi_bus_handle_subghz);
+ cc1101_write_reg(&furi_hal_spi_bus_handle_subghz, CC1101_IOCFG0, CC1101IocfgHighImpedance);
+ furi_hal_spi_release(&furi_hal_spi_bus_handle_subghz);
}
void furi_hal_subghz_idle() {
- const FuriHalSpiDevice* device = furi_hal_spi_device_get(FuriHalSpiDeviceIdSubGhz);
- cc1101_switch_to_idle(device);
- furi_hal_spi_device_return(device);
+ furi_hal_spi_acquire(&furi_hal_spi_bus_handle_subghz);
+ cc1101_switch_to_idle(&furi_hal_spi_bus_handle_subghz);
+ furi_hal_spi_release(&furi_hal_spi_bus_handle_subghz);
}
void furi_hal_subghz_rx() {
- const FuriHalSpiDevice* device = furi_hal_spi_device_get(FuriHalSpiDeviceIdSubGhz);
- cc1101_switch_to_rx(device);
- furi_hal_spi_device_return(device);
+ furi_hal_spi_acquire(&furi_hal_spi_bus_handle_subghz);
+ cc1101_switch_to_rx(&furi_hal_spi_bus_handle_subghz);
+ furi_hal_spi_release(&furi_hal_spi_bus_handle_subghz);
}
bool furi_hal_subghz_tx() {
if(furi_hal_subghz_regulation != SubGhzRegulationTxRx) return false;
- const FuriHalSpiDevice* device = furi_hal_spi_device_get(FuriHalSpiDeviceIdSubGhz);
- cc1101_switch_to_tx(device);
- furi_hal_spi_device_return(device);
+ furi_hal_spi_acquire(&furi_hal_spi_bus_handle_subghz);
+ cc1101_switch_to_tx(&furi_hal_spi_bus_handle_subghz);
+ furi_hal_spi_release(&furi_hal_spi_bus_handle_subghz);
return true;
}
float furi_hal_subghz_get_rssi() {
- const FuriHalSpiDevice* device = furi_hal_spi_device_get(FuriHalSpiDeviceIdSubGhz);
- int32_t rssi_dec = cc1101_get_rssi(device);
- furi_hal_spi_device_return(device);
+ furi_hal_spi_acquire(&furi_hal_spi_bus_handle_subghz);
+ int32_t rssi_dec = cc1101_get_rssi(&furi_hal_spi_bus_handle_subghz);
+ furi_hal_spi_release(&furi_hal_spi_bus_handle_subghz);
float rssi = rssi_dec;
if(rssi_dec >= 128) {
@@ -461,7 +461,7 @@ uint32_t furi_hal_subghz_set_frequency_and_path(uint32_t value) {
}
uint32_t furi_hal_subghz_set_frequency(uint32_t value) {
- const FuriHalSpiDevice* device = furi_hal_spi_device_get(FuriHalSpiDeviceIdSubGhz);
+ furi_hal_spi_acquire(&furi_hal_spi_bus_handle_subghz);
//checking regional settings
bool txrx = false;
@@ -503,37 +503,37 @@ uint32_t furi_hal_subghz_set_frequency(uint32_t value) {
furi_hal_subghz_regulation = SubGhzRegulationOnlyRx;
}
- uint32_t real_frequency = cc1101_set_frequency(device, value);
- cc1101_calibrate(device);
+ uint32_t real_frequency = cc1101_set_frequency(&furi_hal_spi_bus_handle_subghz, value);
+ cc1101_calibrate(&furi_hal_spi_bus_handle_subghz);
while(true) {
- CC1101Status status = cc1101_get_status(device);
+ CC1101Status status = cc1101_get_status(&furi_hal_spi_bus_handle_subghz);
if(status.STATE == CC1101StateIDLE) break;
}
- furi_hal_spi_device_return(device);
+ furi_hal_spi_release(&furi_hal_spi_bus_handle_subghz);
return real_frequency;
}
void furi_hal_subghz_set_path(FuriHalSubGhzPath path) {
- const FuriHalSpiDevice* device = furi_hal_spi_device_get(FuriHalSpiDeviceIdSubGhz);
+ furi_hal_spi_acquire(&furi_hal_spi_bus_handle_subghz);
if(path == FuriHalSubGhzPath433) {
hal_gpio_write(&gpio_rf_sw_0, 0);
- cc1101_write_reg(device, CC1101_IOCFG2, CC1101IocfgHW | CC1101_IOCFG_INV);
+ cc1101_write_reg(&furi_hal_spi_bus_handle_subghz, CC1101_IOCFG2, CC1101IocfgHW | CC1101_IOCFG_INV);
} else if(path == FuriHalSubGhzPath315) {
hal_gpio_write(&gpio_rf_sw_0, 1);
- cc1101_write_reg(device, CC1101_IOCFG2, CC1101IocfgHW);
+ cc1101_write_reg(&furi_hal_spi_bus_handle_subghz, CC1101_IOCFG2, CC1101IocfgHW);
} else if(path == FuriHalSubGhzPath868) {
hal_gpio_write(&gpio_rf_sw_0, 1);
- cc1101_write_reg(device, CC1101_IOCFG2, CC1101IocfgHW | CC1101_IOCFG_INV);
+ cc1101_write_reg(&furi_hal_spi_bus_handle_subghz, CC1101_IOCFG2, CC1101IocfgHW | CC1101_IOCFG_INV);
} else if(path == FuriHalSubGhzPathIsolate) {
hal_gpio_write(&gpio_rf_sw_0, 0);
- cc1101_write_reg(device, CC1101_IOCFG2, CC1101IocfgHW);
+ cc1101_write_reg(&furi_hal_spi_bus_handle_subghz, CC1101_IOCFG2, CC1101IocfgHW);
} else {
furi_crash(NULL);
}
- furi_hal_spi_device_return(device);
+ furi_hal_spi_release(&furi_hal_spi_bus_handle_subghz);
}
volatile uint32_t furi_hal_subghz_capture_delta_duration = 0;