[FL-2060] FuriHal: SPI refactoring, flexible bus reconfiguration on fly, same design as i2c. (#853)
* FuriHal: SPI refactoring, flexible bus reconfigration on fly, same desiag as i2c. * Lib: update CC1101 driver documentation * FuriHal: update spi symbol names to match naming convention.
This commit is contained in:
@@ -7,7 +7,6 @@
|
||||
static osThreadAttr_t platform_irq_thread_attr;
|
||||
static volatile osThreadId_t platform_irq_thread_id = NULL;
|
||||
static volatile PlatformIrqCallback platform_irq_callback = NULL;
|
||||
static FuriHalSpiDevice* platform_st25r3916 = NULL;
|
||||
static const GpioPin pin = {ST25R_INT_PORT, ST25R_INT_PIN};
|
||||
|
||||
void nfc_isr(void* _ctx) {
|
||||
@@ -49,14 +48,13 @@ void platformSetIrqCallback(PlatformIrqCallback callback) {
|
||||
}
|
||||
|
||||
HAL_StatusTypeDef platformSpiTxRx(const uint8_t *txBuf, uint8_t *rxBuf, uint16_t len) {
|
||||
furi_assert(platform_st25r3916);
|
||||
bool ret = false;
|
||||
if (txBuf && rxBuf) {
|
||||
ret = furi_hal_spi_bus_trx(platform_st25r3916->bus, (uint8_t*)txBuf, rxBuf, len, 1000);
|
||||
ret = furi_hal_spi_bus_trx(&furi_hal_spi_bus_handle_nfc, (uint8_t*)txBuf, rxBuf, len, 1000);
|
||||
} else if (txBuf) {
|
||||
ret = furi_hal_spi_bus_tx(platform_st25r3916->bus, (uint8_t*)txBuf, len, 1000);
|
||||
ret = furi_hal_spi_bus_tx(&furi_hal_spi_bus_handle_nfc, (uint8_t*)txBuf, len, 1000);
|
||||
} else if (rxBuf) {
|
||||
ret = furi_hal_spi_bus_rx(platform_st25r3916->bus, (uint8_t*)rxBuf, len, 1000);
|
||||
ret = furi_hal_spi_bus_rx(&furi_hal_spi_bus_handle_nfc, (uint8_t*)rxBuf, len, 1000);
|
||||
}
|
||||
|
||||
if(!ret) {
|
||||
@@ -68,15 +66,9 @@ HAL_StatusTypeDef platformSpiTxRx(const uint8_t *txBuf, uint8_t *rxBuf, uint16_t
|
||||
}
|
||||
|
||||
void platformProtectST25RComm() {
|
||||
// Don't check platform_st25r3916 since spi device is used simultaneously from nfc worker
|
||||
// thread and platformIrqWorker thread with the highest priority
|
||||
|
||||
// furi_assert(platform_st25r3916 == NULL);
|
||||
platform_st25r3916 = (FuriHalSpiDevice*)furi_hal_spi_device_get(FuriHalSpiDeviceIdNfc);
|
||||
furi_hal_spi_acquire(&furi_hal_spi_bus_handle_nfc);
|
||||
}
|
||||
|
||||
void platformUnprotectST25RComm() {
|
||||
// furi_assert(platform_st25r3916);
|
||||
furi_hal_spi_device_return(platform_st25r3916);
|
||||
// platform_st25r3916 = NULL;
|
||||
furi_hal_spi_release(&furi_hal_spi_bus_handle_nfc);
|
||||
}
|
||||
|
@@ -4,180 +4,164 @@
|
||||
#include <assert.h>
|
||||
#include <string.h>
|
||||
|
||||
CC1101Status cc1101_strobe(const FuriHalSpiDevice* device, uint8_t strobe) {
|
||||
CC1101Status cc1101_strobe(FuriHalSpiBusHandle* handle, uint8_t strobe) {
|
||||
uint8_t tx[1] = { strobe };
|
||||
CC1101Status rx[1] = { 0 };
|
||||
|
||||
hal_gpio_write(device->chip_select, false);
|
||||
while(hal_gpio_read(device->bus->miso));
|
||||
furi_hal_spi_bus_trx(device->bus, tx, (uint8_t*)rx, 1, CC1101_TIMEOUT);
|
||||
hal_gpio_write(device->chip_select, true);
|
||||
while(hal_gpio_read(handle->miso));
|
||||
furi_hal_spi_bus_trx(handle, tx, (uint8_t*)rx, 1, CC1101_TIMEOUT);
|
||||
|
||||
assert(rx[0].CHIP_RDYn == 0);
|
||||
return rx[0];
|
||||
}
|
||||
|
||||
CC1101Status cc1101_write_reg(const FuriHalSpiDevice* device, uint8_t reg, uint8_t data) {
|
||||
CC1101Status cc1101_write_reg(FuriHalSpiBusHandle* handle, uint8_t reg, uint8_t data) {
|
||||
uint8_t tx[2] = { reg, data };
|
||||
CC1101Status rx[2] = { 0 };
|
||||
|
||||
hal_gpio_write(device->chip_select, false);
|
||||
while(hal_gpio_read(device->bus->miso));
|
||||
furi_hal_spi_bus_trx(device->bus, tx, (uint8_t*)rx, 2, CC1101_TIMEOUT);
|
||||
hal_gpio_write(device->chip_select, true);
|
||||
while(hal_gpio_read(handle->miso));
|
||||
furi_hal_spi_bus_trx(handle, tx, (uint8_t*)rx, 2, CC1101_TIMEOUT);
|
||||
|
||||
assert((rx[0].CHIP_RDYn|rx[1].CHIP_RDYn) == 0);
|
||||
return rx[1];
|
||||
}
|
||||
|
||||
CC1101Status cc1101_read_reg(const FuriHalSpiDevice* device, uint8_t reg, uint8_t* data) {
|
||||
CC1101Status cc1101_read_reg(FuriHalSpiBusHandle* handle, uint8_t reg, uint8_t* data) {
|
||||
assert(sizeof(CC1101Status) == 1);
|
||||
uint8_t tx[2] = { reg|CC1101_READ, 0};
|
||||
CC1101Status rx[2] = { 0 };
|
||||
|
||||
hal_gpio_write(device->chip_select, false);
|
||||
while(hal_gpio_read(device->bus->miso));
|
||||
furi_hal_spi_bus_trx(device->bus, tx, (uint8_t*)rx, 2, CC1101_TIMEOUT);
|
||||
hal_gpio_write(device->chip_select, true);
|
||||
while(hal_gpio_read(handle->miso));
|
||||
furi_hal_spi_bus_trx(handle, tx, (uint8_t*)rx, 2, CC1101_TIMEOUT);
|
||||
|
||||
assert((rx[0].CHIP_RDYn) == 0);
|
||||
*data = *(uint8_t*)&rx[1];
|
||||
return rx[0];
|
||||
}
|
||||
|
||||
uint8_t cc1101_get_partnumber(const FuriHalSpiDevice* device) {
|
||||
uint8_t cc1101_get_partnumber(FuriHalSpiBusHandle* handle) {
|
||||
uint8_t partnumber=0;
|
||||
cc1101_read_reg(device, CC1101_STATUS_PARTNUM|CC1101_BURST, &partnumber);
|
||||
cc1101_read_reg(handle, CC1101_STATUS_PARTNUM|CC1101_BURST, &partnumber);
|
||||
return partnumber;
|
||||
}
|
||||
|
||||
uint8_t cc1101_get_version(const FuriHalSpiDevice* device) {
|
||||
uint8_t cc1101_get_version(FuriHalSpiBusHandle* handle) {
|
||||
uint8_t version=0;
|
||||
cc1101_read_reg(device, CC1101_STATUS_VERSION|CC1101_BURST, &version);
|
||||
cc1101_read_reg(handle, CC1101_STATUS_VERSION|CC1101_BURST, &version);
|
||||
return version;
|
||||
}
|
||||
|
||||
uint8_t cc1101_get_rssi(const FuriHalSpiDevice* device) {
|
||||
uint8_t cc1101_get_rssi(FuriHalSpiBusHandle* handle) {
|
||||
uint8_t rssi=0;
|
||||
cc1101_read_reg(device, CC1101_STATUS_RSSI|CC1101_BURST, &rssi);
|
||||
cc1101_read_reg(handle, CC1101_STATUS_RSSI|CC1101_BURST, &rssi);
|
||||
return rssi;
|
||||
}
|
||||
|
||||
void cc1101_reset(const FuriHalSpiDevice* device) {
|
||||
hal_gpio_write(device->chip_select, false);
|
||||
void cc1101_reset(FuriHalSpiBusHandle* handle) {
|
||||
delay_us(1000);
|
||||
hal_gpio_write(device->chip_select, true);
|
||||
delay_us(1000);
|
||||
cc1101_strobe(device, CC1101_STROBE_SRES);
|
||||
cc1101_strobe(handle, CC1101_STROBE_SRES);
|
||||
}
|
||||
|
||||
CC1101Status cc1101_get_status(const FuriHalSpiDevice* device) {
|
||||
return cc1101_strobe(device, CC1101_STROBE_SNOP);
|
||||
CC1101Status cc1101_get_status(FuriHalSpiBusHandle* handle) {
|
||||
return cc1101_strobe(handle, CC1101_STROBE_SNOP);
|
||||
}
|
||||
|
||||
void cc1101_shutdown(const FuriHalSpiDevice* device) {
|
||||
cc1101_strobe(device, CC1101_STROBE_SPWD);
|
||||
void cc1101_shutdown(FuriHalSpiBusHandle* handle) {
|
||||
cc1101_strobe(handle, CC1101_STROBE_SPWD);
|
||||
}
|
||||
|
||||
void cc1101_calibrate(const FuriHalSpiDevice* device) {
|
||||
cc1101_strobe(device, CC1101_STROBE_SCAL);
|
||||
void cc1101_calibrate(FuriHalSpiBusHandle* handle) {
|
||||
cc1101_strobe(handle, CC1101_STROBE_SCAL);
|
||||
}
|
||||
|
||||
void cc1101_switch_to_idle(const FuriHalSpiDevice* device) {
|
||||
cc1101_strobe(device, CC1101_STROBE_SIDLE);
|
||||
void cc1101_switch_to_idle(FuriHalSpiBusHandle* handle) {
|
||||
cc1101_strobe(handle, CC1101_STROBE_SIDLE);
|
||||
}
|
||||
|
||||
void cc1101_switch_to_rx(const FuriHalSpiDevice* device) {
|
||||
cc1101_strobe(device, CC1101_STROBE_SRX);
|
||||
void cc1101_switch_to_rx(FuriHalSpiBusHandle* handle) {
|
||||
cc1101_strobe(handle, CC1101_STROBE_SRX);
|
||||
}
|
||||
|
||||
void cc1101_switch_to_tx(const FuriHalSpiDevice* device) {
|
||||
cc1101_strobe(device, CC1101_STROBE_STX);
|
||||
void cc1101_switch_to_tx(FuriHalSpiBusHandle* handle) {
|
||||
cc1101_strobe(handle, CC1101_STROBE_STX);
|
||||
}
|
||||
|
||||
void cc1101_flush_rx(const FuriHalSpiDevice* device) {
|
||||
cc1101_strobe(device, CC1101_STROBE_SFRX);
|
||||
void cc1101_flush_rx(FuriHalSpiBusHandle* handle) {
|
||||
cc1101_strobe(handle, CC1101_STROBE_SFRX);
|
||||
}
|
||||
|
||||
void cc1101_flush_tx(const FuriHalSpiDevice* device) {
|
||||
cc1101_strobe(device, CC1101_STROBE_SFTX);
|
||||
void cc1101_flush_tx(FuriHalSpiBusHandle* handle) {
|
||||
cc1101_strobe(handle, CC1101_STROBE_SFTX);
|
||||
}
|
||||
|
||||
uint32_t cc1101_set_frequency(const FuriHalSpiDevice* device, uint32_t value) {
|
||||
uint32_t cc1101_set_frequency(FuriHalSpiBusHandle* handle, uint32_t value) {
|
||||
uint64_t real_value = (uint64_t)value * CC1101_FDIV / CC1101_QUARTZ;
|
||||
|
||||
// Sanity check
|
||||
assert((real_value & CC1101_FMASK) == real_value);
|
||||
|
||||
cc1101_write_reg(device, CC1101_FREQ2, (real_value >> 16) & 0xFF);
|
||||
cc1101_write_reg(device, CC1101_FREQ1, (real_value >> 8 ) & 0xFF);
|
||||
cc1101_write_reg(device, CC1101_FREQ0, (real_value >> 0 ) & 0xFF);
|
||||
cc1101_write_reg(handle, CC1101_FREQ2, (real_value >> 16) & 0xFF);
|
||||
cc1101_write_reg(handle, CC1101_FREQ1, (real_value >> 8 ) & 0xFF);
|
||||
cc1101_write_reg(handle, CC1101_FREQ0, (real_value >> 0 ) & 0xFF);
|
||||
|
||||
uint64_t real_frequency = real_value * CC1101_QUARTZ / CC1101_FDIV;
|
||||
|
||||
return (uint32_t)real_frequency;
|
||||
}
|
||||
|
||||
uint32_t cc1101_set_intermediate_frequency(const FuriHalSpiDevice* device, uint32_t value) {
|
||||
uint32_t cc1101_set_intermediate_frequency(FuriHalSpiBusHandle* handle, uint32_t value) {
|
||||
uint64_t real_value = value * CC1101_IFDIV / CC1101_QUARTZ;
|
||||
assert((real_value & 0xFF) == real_value);
|
||||
|
||||
cc1101_write_reg(device, CC1101_FSCTRL0, (real_value >> 0 ) & 0xFF);
|
||||
cc1101_write_reg(handle, CC1101_FSCTRL0, (real_value >> 0 ) & 0xFF);
|
||||
|
||||
uint64_t real_frequency = real_value * CC1101_QUARTZ / CC1101_IFDIV;
|
||||
|
||||
return (uint32_t)real_frequency;
|
||||
}
|
||||
|
||||
void cc1101_set_pa_table(const FuriHalSpiDevice* device, const uint8_t value[8]) {
|
||||
void cc1101_set_pa_table(FuriHalSpiBusHandle* handle, const uint8_t value[8]) {
|
||||
uint8_t tx[9] = { CC1101_PATABLE | CC1101_BURST };
|
||||
CC1101Status rx[9] = { 0 };
|
||||
|
||||
memcpy(&tx[1], &value[0], 8);
|
||||
|
||||
hal_gpio_write(device->chip_select, false);
|
||||
while(hal_gpio_read(device->bus->miso));
|
||||
furi_hal_spi_bus_trx(device->bus, tx, (uint8_t*)rx, sizeof(rx), CC1101_TIMEOUT);
|
||||
hal_gpio_write(device->chip_select, true);
|
||||
while(hal_gpio_read(handle->miso));
|
||||
furi_hal_spi_bus_trx(handle, tx, (uint8_t*)rx, sizeof(rx), CC1101_TIMEOUT);
|
||||
|
||||
assert((rx[0].CHIP_RDYn|rx[8].CHIP_RDYn) == 0);
|
||||
}
|
||||
|
||||
uint8_t cc1101_write_fifo(const FuriHalSpiDevice* device, const uint8_t* data, uint8_t size) {
|
||||
uint8_t cc1101_write_fifo(FuriHalSpiBusHandle* handle, const uint8_t* data, uint8_t size) {
|
||||
uint8_t buff_tx[64];
|
||||
uint8_t buff_rx[64];
|
||||
buff_tx[0] = CC1101_FIFO | CC1101_BURST;
|
||||
memcpy(&buff_tx[1], data, size);
|
||||
|
||||
// Start transaction
|
||||
hal_gpio_write(device->chip_select, false);
|
||||
// Wait IC to become ready
|
||||
while(hal_gpio_read(device->bus->miso));
|
||||
while(hal_gpio_read(handle->miso));
|
||||
// Tell IC what we want
|
||||
furi_hal_spi_bus_trx(device->bus, buff_tx, (uint8_t*) buff_rx, size + 1, CC1101_TIMEOUT);
|
||||
|
||||
// Finish transaction
|
||||
hal_gpio_write(device->chip_select, true);
|
||||
furi_hal_spi_bus_trx(handle, buff_tx, (uint8_t*) buff_rx, size + 1, CC1101_TIMEOUT);
|
||||
|
||||
return size;
|
||||
}
|
||||
|
||||
uint8_t cc1101_read_fifo(const FuriHalSpiDevice* device, uint8_t* data, uint8_t* size) {
|
||||
uint8_t cc1101_read_fifo(FuriHalSpiBusHandle* handle, uint8_t* data, uint8_t* size) {
|
||||
uint8_t buff_tx[64];
|
||||
buff_tx[0] = CC1101_FIFO | CC1101_READ | CC1101_BURST;
|
||||
uint8_t buff_rx[2];
|
||||
|
||||
// Start transaction
|
||||
hal_gpio_write(device->chip_select, false);
|
||||
// Wait IC to become ready
|
||||
while(hal_gpio_read(device->bus->miso));
|
||||
while(hal_gpio_read(handle->miso));
|
||||
|
||||
// First byte - packet length
|
||||
furi_hal_spi_bus_trx(device->bus, buff_tx, buff_rx, 2, CC1101_TIMEOUT);
|
||||
furi_hal_spi_bus_trx(handle, buff_tx, buff_rx, 2, CC1101_TIMEOUT);
|
||||
*size = buff_rx[1];
|
||||
furi_hal_spi_bus_trx(device->bus, &buff_tx[1], data, *size, CC1101_TIMEOUT);
|
||||
cc1101_flush_rx(device);
|
||||
furi_hal_spi_bus_trx(handle, &buff_tx[1], data, *size, CC1101_TIMEOUT);
|
||||
cc1101_flush_rx(handle);
|
||||
|
||||
hal_gpio_write(device->chip_select, true);
|
||||
return *size;
|
||||
}
|
||||
|
@@ -13,131 +13,167 @@ extern "C" {
|
||||
/* Low level API */
|
||||
|
||||
/** Strobe command to the device
|
||||
* @param device - pointer to FuriHalSpiDevice
|
||||
* @param strobe - command to execute
|
||||
* @return device status
|
||||
*
|
||||
* @param handle - pointer to FuriHalSpiHandle
|
||||
* @param strobe - command to execute
|
||||
*
|
||||
* @return device status
|
||||
*/
|
||||
CC1101Status cc1101_strobe(const FuriHalSpiDevice* device, uint8_t strobe);
|
||||
CC1101Status cc1101_strobe(FuriHalSpiBusHandle* handle, uint8_t strobe);
|
||||
|
||||
/** Write device register
|
||||
* @param device - pointer to FuriHalSpiDevice
|
||||
* @param reg - register
|
||||
* @param data - data to write
|
||||
* @return device status
|
||||
*
|
||||
* @param handle - pointer to FuriHalSpiHandle
|
||||
* @param reg - register
|
||||
* @param data - data to write
|
||||
*
|
||||
* @return device status
|
||||
*/
|
||||
CC1101Status cc1101_write_reg(const FuriHalSpiDevice* device, uint8_t reg, uint8_t data);
|
||||
CC1101Status cc1101_write_reg(FuriHalSpiBusHandle* handle, uint8_t reg, uint8_t data);
|
||||
|
||||
/** Read device register
|
||||
* @param device - pointer to FuriHalSpiDevice
|
||||
* @param reg - register
|
||||
* @param[out] data - pointer to data
|
||||
* @return device status
|
||||
*
|
||||
* @param handle - pointer to FuriHalSpiHandle
|
||||
* @param reg - register
|
||||
* @param[out] data - pointer to data
|
||||
*
|
||||
* @return device status
|
||||
*/
|
||||
CC1101Status cc1101_read_reg(const FuriHalSpiDevice* device, uint8_t reg, uint8_t* data);
|
||||
CC1101Status cc1101_read_reg(FuriHalSpiBusHandle* handle, uint8_t reg, uint8_t* data);
|
||||
|
||||
/* High level API */
|
||||
|
||||
/** Reset
|
||||
* @param device - pointer to FuriHalSpiDevice
|
||||
*
|
||||
* @param handle - pointer to FuriHalSpiHandle
|
||||
*/
|
||||
void cc1101_reset(const FuriHalSpiDevice* device);
|
||||
void cc1101_reset(FuriHalSpiBusHandle* handle);
|
||||
|
||||
/** Get status
|
||||
* @param device - pointer to FuriHalSpiDevice
|
||||
*
|
||||
* @param handle - pointer to FuriHalSpiHandle
|
||||
*
|
||||
* @return CC1101Status structure
|
||||
*/
|
||||
CC1101Status cc1101_get_status(const FuriHalSpiDevice* device);
|
||||
CC1101Status cc1101_get_status(FuriHalSpiBusHandle* handle);
|
||||
|
||||
/** Enable shutdown mode
|
||||
* @param device - pointer to FuriHalSpiDevice
|
||||
*
|
||||
* @param handle - pointer to FuriHalSpiHandle
|
||||
*/
|
||||
void cc1101_shutdown(const FuriHalSpiDevice* device);
|
||||
void cc1101_shutdown(FuriHalSpiBusHandle* handle);
|
||||
|
||||
/** Get Partnumber
|
||||
* @param device - pointer to FuriHalSpiDevice
|
||||
*
|
||||
* @param handle - pointer to FuriHalSpiHandle
|
||||
*
|
||||
* @return part number id
|
||||
*/
|
||||
uint8_t cc1101_get_partnumber(const FuriHalSpiDevice* device);
|
||||
uint8_t cc1101_get_partnumber(FuriHalSpiBusHandle* handle);
|
||||
|
||||
/** Get Version
|
||||
* @param device - pointer to FuriHalSpiDevice
|
||||
*
|
||||
* @param handle - pointer to FuriHalSpiHandle
|
||||
*
|
||||
* @return version
|
||||
*/
|
||||
uint8_t cc1101_get_version(const FuriHalSpiDevice* device);
|
||||
uint8_t cc1101_get_version(FuriHalSpiBusHandle* handle);
|
||||
|
||||
/** Get raw RSSI value
|
||||
* @param device - pointer to FuriHalSpiDevice
|
||||
*
|
||||
* @param handle - pointer to FuriHalSpiHandle
|
||||
*
|
||||
* @return rssi value
|
||||
*/
|
||||
uint8_t cc1101_get_rssi(const FuriHalSpiDevice* device);
|
||||
uint8_t cc1101_get_rssi(FuriHalSpiBusHandle* handle);
|
||||
|
||||
/** Calibrate oscillator
|
||||
* @param device - pointer to FuriHalSpiDevice
|
||||
*
|
||||
* @param handle - pointer to FuriHalSpiHandle
|
||||
*/
|
||||
void cc1101_calibrate(const FuriHalSpiDevice* device);
|
||||
void cc1101_calibrate(FuriHalSpiBusHandle* handle);
|
||||
|
||||
/** Switch to idle
|
||||
* @param device - pointer to FuriHalSpiDevice
|
||||
*
|
||||
* @param handle - pointer to FuriHalSpiHandle
|
||||
*/
|
||||
void cc1101_switch_to_idle(const FuriHalSpiDevice* device);
|
||||
void cc1101_switch_to_idle(FuriHalSpiBusHandle* handle);
|
||||
|
||||
/** Switch to RX
|
||||
* @param device - pointer to FuriHalSpiDevice
|
||||
*
|
||||
* @param handle - pointer to FuriHalSpiHandle
|
||||
*/
|
||||
void cc1101_switch_to_rx(const FuriHalSpiDevice* device);
|
||||
void cc1101_switch_to_rx(FuriHalSpiBusHandle* handle);
|
||||
|
||||
/** Switch to TX
|
||||
* @param device - pointer to FuriHalSpiDevice
|
||||
*
|
||||
* @param handle - pointer to FuriHalSpiHandle
|
||||
*/
|
||||
void cc1101_switch_to_tx(const FuriHalSpiDevice* device);
|
||||
void cc1101_switch_to_tx(FuriHalSpiBusHandle* handle);
|
||||
|
||||
/** Flush RX FIFO
|
||||
* @param device - pointer to FuriHalSpiDevice
|
||||
*
|
||||
* @param handle - pointer to FuriHalSpiHandle
|
||||
*/
|
||||
void cc1101_flush_rx(const FuriHalSpiDevice* device);
|
||||
void cc1101_flush_rx(FuriHalSpiBusHandle* handle);
|
||||
|
||||
/** Flush TX FIFO
|
||||
* @param device - pointer to FuriHalSpiDevice
|
||||
*
|
||||
* @param handle - pointer to FuriHalSpiHandle
|
||||
*/
|
||||
void cc1101_flush_tx(const FuriHalSpiDevice* device);
|
||||
void cc1101_flush_tx(FuriHalSpiBusHandle* handle);
|
||||
|
||||
/** Set Frequency
|
||||
* @param device - pointer to FuriHalSpiDevice
|
||||
* @param value - frequency in herz
|
||||
* @return real frequency that were synthesized
|
||||
*
|
||||
* @param handle - pointer to FuriHalSpiHandle
|
||||
* @param value - frequency in herz
|
||||
*
|
||||
* @return real frequency that were synthesized
|
||||
*/
|
||||
uint32_t cc1101_set_frequency(const FuriHalSpiDevice* device, uint32_t value);
|
||||
uint32_t cc1101_set_frequency(FuriHalSpiBusHandle* handle, uint32_t value);
|
||||
|
||||
/** Set Intermediate Frequency
|
||||
* @param device - pointer to FuriHalSpiDevice
|
||||
* @param value - frequency in herz
|
||||
* @return real inermediate frequency that were synthesized
|
||||
*
|
||||
* @param handle - pointer to FuriHalSpiHandle
|
||||
* @param value - frequency in herz
|
||||
*
|
||||
* @return real inermediate frequency that were synthesized
|
||||
*/
|
||||
uint32_t cc1101_set_intermediate_frequency(const FuriHalSpiDevice* device, uint32_t value);
|
||||
uint32_t cc1101_set_intermediate_frequency(FuriHalSpiBusHandle* handle, uint32_t value);
|
||||
|
||||
/** Set Power Amplifier level table, ramp
|
||||
* @param device - pointer to FuriHalSpiDevice
|
||||
* @param value - array of power level values
|
||||
*
|
||||
* @param handle - pointer to FuriHalSpiHandle
|
||||
* @param value - array of power level values
|
||||
*/
|
||||
void cc1101_set_pa_table(const FuriHalSpiDevice* device, const uint8_t value[8]);
|
||||
void cc1101_set_pa_table(FuriHalSpiBusHandle* handle, const uint8_t value[8]);
|
||||
|
||||
/** Set Power Amplifier level table, ramp
|
||||
* @param device - pointer to FuriHalSpiDevice
|
||||
* @param value - array of power level values
|
||||
*
|
||||
* @param handle - pointer to FuriHalSpiHandle
|
||||
* @param value - array of power level values
|
||||
*/
|
||||
void cc1101_set_pa_table(const FuriHalSpiDevice* device, const uint8_t value[8]);
|
||||
void cc1101_set_pa_table(FuriHalSpiBusHandle* handle, const uint8_t value[8]);
|
||||
|
||||
/** Write FIFO
|
||||
* @param device - pointer to FuriHalSpiDevice
|
||||
* @param data, pointer to byte array
|
||||
* @param size, write bytes count
|
||||
* @return size, written bytes count
|
||||
*
|
||||
* @param handle - pointer to FuriHalSpiHandle
|
||||
* @param data pointer to byte array
|
||||
* @param size write bytes count
|
||||
*
|
||||
* @return size, written bytes count
|
||||
*/
|
||||
uint8_t cc1101_write_fifo(const FuriHalSpiDevice* device, const uint8_t* data, uint8_t size);
|
||||
uint8_t cc1101_write_fifo(FuriHalSpiBusHandle* handle, const uint8_t* data, uint8_t size);
|
||||
|
||||
/** Read FIFO
|
||||
* @param device - pointer to FuriHalSpiDevice
|
||||
* @param data, pointer to byte array
|
||||
* @param size, bytes to read from fifo
|
||||
* @return size, read bytes count
|
||||
*
|
||||
* @param handle - pointer to FuriHalSpiHandle
|
||||
* @param data pointer to byte array
|
||||
* @param size bytes to read from fifo
|
||||
*
|
||||
* @return size, read bytes count
|
||||
*/
|
||||
uint8_t cc1101_read_fifo(const FuriHalSpiDevice* device, uint8_t* data, uint8_t* size);
|
||||
uint8_t cc1101_read_fifo(FuriHalSpiBusHandle* handle, uint8_t* data, uint8_t* size);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
@@ -2,8 +2,6 @@
|
||||
|
||||
#include <furi-hal.h>
|
||||
|
||||
static FuriHalSpiDevice* u8g2_periphery_display = NULL;
|
||||
|
||||
uint8_t u8g2_gpio_and_delay_stm32(u8x8_t* u8x8, uint8_t msg, uint8_t arg_int, void* arg_ptr) {
|
||||
switch(msg) {
|
||||
case U8X8_MSG_GPIO_AND_DELAY_INIT:
|
||||
@@ -31,7 +29,7 @@ uint8_t u8g2_gpio_and_delay_stm32(u8x8_t* u8x8, uint8_t msg, uint8_t arg_int, vo
|
||||
uint8_t u8x8_hw_spi_stm32(u8x8_t* u8x8, uint8_t msg, uint8_t arg_int, void* arg_ptr) {
|
||||
switch(msg) {
|
||||
case U8X8_MSG_BYTE_SEND:
|
||||
furi_hal_spi_bus_tx(u8g2_periphery_display->bus, (uint8_t*)arg_ptr, arg_int, 10000);
|
||||
furi_hal_spi_bus_tx(&furi_hal_spi_bus_handle_display, (uint8_t*)arg_ptr, arg_int, 10000);
|
||||
break;
|
||||
case U8X8_MSG_BYTE_SET_DC:
|
||||
hal_gpio_write(&gpio_display_di, arg_int);
|
||||
@@ -39,16 +37,10 @@ uint8_t u8x8_hw_spi_stm32(u8x8_t* u8x8, uint8_t msg, uint8_t arg_int, void* arg_
|
||||
case U8X8_MSG_BYTE_INIT:
|
||||
break;
|
||||
case U8X8_MSG_BYTE_START_TRANSFER:
|
||||
furi_assert(u8g2_periphery_display == NULL);
|
||||
u8g2_periphery_display =
|
||||
(FuriHalSpiDevice*)furi_hal_spi_device_get(FuriHalSpiDeviceIdDisplay);
|
||||
hal_gpio_write(u8g2_periphery_display->chip_select, false);
|
||||
furi_hal_spi_acquire(&furi_hal_spi_bus_handle_display);
|
||||
break;
|
||||
case U8X8_MSG_BYTE_END_TRANSFER:
|
||||
furi_assert(u8g2_periphery_display);
|
||||
hal_gpio_write(u8g2_periphery_display->chip_select, true);
|
||||
furi_hal_spi_device_return(u8g2_periphery_display);
|
||||
u8g2_periphery_display = NULL;
|
||||
furi_hal_spi_release(&furi_hal_spi_bus_handle_display);
|
||||
break;
|
||||
default:
|
||||
return 0;
|
||||
|
Reference in New Issue
Block a user