HAL_PX4: go direct to NuttX for SPI transfers
This commit is contained in:
parent
bf0b0c1773
commit
972f85c490
@ -50,7 +50,7 @@ SPIDesc SPIDeviceManager::device_table[] = {
|
||||
SPIDevice::SPIDevice(SPIBus &_bus, SPIDesc &_device_desc)
|
||||
: bus(_bus)
|
||||
, device_desc(_device_desc)
|
||||
, px4dev(device_desc.bus, device_desc.name, device_desc.devname, device_desc.device, device_desc.mode, device_desc.lowspeed)
|
||||
, px4dev(device_desc.bus, device_desc.device, device_desc.mode, device_desc.lowspeed)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -7,26 +7,35 @@
|
||||
|
||||
extern const AP_HAL::HAL& hal;
|
||||
/*
|
||||
wrapper class for SPI to expose protected functions from PX4Firmware
|
||||
wrapper class for SPI to expose protected functions from PX4NuttX
|
||||
*/
|
||||
class PX4::PX4_SPI : public device::SPI {
|
||||
class PX4::PX4_SPI {
|
||||
public:
|
||||
PX4_SPI(uint8_t bus, const char *name, const char *devname, enum spi_dev_e device, enum spi_mode_e mode, uint32_t frequency) :
|
||||
SPI(name, devname, bus, device, mode, frequency) {}
|
||||
PX4_SPI(uint8_t bus, enum spi_dev_e device, enum spi_mode_e mode, uint32_t frequency) :
|
||||
_bus(bus), _device(device), _mode(mode), _frequency(frequency) {
|
||||
_dev = up_spiinitialize(_bus);
|
||||
SPI_SELECT(_dev, _device, false);
|
||||
}
|
||||
|
||||
bool do_transfer(uint8_t *send, uint8_t *recv, uint32_t len) {
|
||||
if (!init_done) {
|
||||
if (init() != 0) {
|
||||
return false;
|
||||
}
|
||||
init_done = true;
|
||||
}
|
||||
return transfer(send, recv, len) == 0;
|
||||
irqstate_t state = irqsave();
|
||||
SPI_SETFREQUENCY(_dev, _frequency);
|
||||
SPI_SETMODE(_dev, _mode);
|
||||
SPI_SETBITS(_dev, 8);
|
||||
SPI_SELECT(_dev, _device, true);
|
||||
SPI_EXCHANGE(_dev, send, recv, len);
|
||||
SPI_SELECT(_dev, _device, false);
|
||||
irqrestore(state);
|
||||
return true;
|
||||
}
|
||||
void set_speed(uint32_t speed_hz) {
|
||||
set_frequency(speed_hz);
|
||||
_frequency = speed_hz;
|
||||
}
|
||||
private:
|
||||
bool init_done;
|
||||
struct spi_dev_s *_dev;
|
||||
uint8_t _bus;
|
||||
enum spi_dev_e _device;
|
||||
enum spi_mode_e _mode;
|
||||
uint32_t _frequency;
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user