14 #include <linux/spi/spidev.h> 15 #include <linux/types.h> 16 #include <sys/ioctl.h> 29 "Cannot use SPI driver without full string formatting");
37 void LinuxSpiDriverComponentImpl::SpiReadWrite_handler(
const FwIndexType portNum,
42 if (this->m_fd == -1) {
48 memset(&tr, 0,
sizeof(tr));
49 tr.tx_buf =
reinterpret_cast<__u64
>(writeBuffer.
getData());
50 tr.rx_buf =
reinterpret_cast<__u64
>(readBuffer.
getData());
52 tr.len =
static_cast<__u32
>(writeBuffer.
getSize());
63 int stat = ioctl(this->m_fd, SPI_IOC_MESSAGE(1), &tr);
68 this->m_bytes += readBuffer.
getSize();
73 FW_ASSERT(device >= 0, static_cast<FwAssertArgType>(device));
74 FW_ASSERT(select >= 0, static_cast<FwAssertArgType>(select));
76 this->m_device = device;
77 this->m_select = select;
120 ret = ioctl(fd, SPI_IOC_WR_MODE, &mode);
127 ret = ioctl(fd, SPI_IOC_RD_MODE, &read_mode);
133 if (mode != read_mode) {
141 ret = ioctl(fd, SPI_IOC_WR_BITS_PER_WORD, &bits);
148 ret = ioctl(fd, SPI_IOC_RD_BITS_PER_WORD, &read_bits);
154 if (bits != read_bits) {
161 ret = ioctl(fd, SPI_IOC_WR_MAX_SPEED_HZ, &clock);
168 ret = ioctl(fd, SPI_IOC_RD_MAX_SPEED_HZ, &read_clock);
174 if (clock != read_clock) {
182 (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)
void log_WARNING_LO_SPI_ConfigMismatch(I32 device, I32 select, const Fw::StringBase ¶meter, U32 write_value, U32 read_value) const
#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