14 #include <linux/spi/spidev.h> 15 #include <linux/types.h> 16 #include <sys/ioctl.h> 28 "Cannot use SPI driver without full string formatting");
36 void LinuxSpiDriverComponentImpl::SpiReadWrite_handler(
const FwIndexType portNum,
39 if (this->m_fd == -1) {
45 memset(&tr, 0,
sizeof(tr));
46 tr.tx_buf =
reinterpret_cast<__u64
>(writeBuffer.
getData());
47 tr.rx_buf =
reinterpret_cast<__u64
>(readBuffer.
getData());
49 tr.len =
static_cast<__u32
>(writeBuffer.
getSize());
60 int stat = ioctl(this->m_fd, SPI_IOC_MESSAGE(1), &tr);
65 this->m_bytes += readBuffer.
getSize();
70 FW_ASSERT(device >= 0, static_cast<FwAssertArgType>(device));
71 FW_ASSERT(select >= 0, static_cast<FwAssertArgType>(select));
73 this->m_device = device;
74 this->m_select = select;
117 ret = ioctl(fd, SPI_IOC_WR_MODE, &mode);
123 ret = ioctl(fd, SPI_IOC_RD_MODE, &mode);
133 ret = ioctl(fd, SPI_IOC_WR_BITS_PER_WORD, &bits);
139 ret = ioctl(fd, SPI_IOC_RD_BITS_PER_WORD, &bits);
148 ret = ioctl(fd, SPI_IOC_WR_MAX_SPEED_HZ, &clock);
154 ret = ioctl(fd, SPI_IOC_RD_MAX_SPEED_HZ, &clock);
164 (void)close(this->m_fd);
bool open(FwIndexType device, FwIndexType select, SpiFrequency clock, SpiMode spiMode=SpiMode::SPI_MODE_CPOL_LOW_CPHA_LOW)
Open device.
void log_WARNING_HI_SPI_ConfigError(I32 device, I32 select, I32 error) const
void log_WARNING_HI_SPI_WriteError(I32 device, I32 select, I32 error)
#define FW_USE_PRINTF_FAMILY_FUNCTIONS_IN_STRING_FORMATTING
void tlmWrite_SPI_Bytes(FwSizeType arg, Fw::Time _tlmTime=Fw::Time()) const
const char * toChar() const
FormatStatus format(const CHAR *formatString,...)
write formatted string to buffer
void log_WARNING_HI_SPI_OpenError(I32 device, I32 select, I32 error) const
~LinuxSpiDriverComponentImpl()
uint8_t U8
8-bit unsigned integer
FwSizeType getSize() const
PlatformIndexType FwIndexType
#define FW_ASSERT_NO_OVERFLOW(value, T)
FormatStatus
status of string format calls