eive-obsw/linux/boardtest/SpiTestClass.h

59 lines
1.5 KiB
C
Raw Normal View History

2021-02-14 19:22:58 +01:00
#ifndef LINUX_BOARDTEST_SPITESTCLASS_H_
#define LINUX_BOARDTEST_SPITESTCLASS_H_
2021-02-23 16:47:34 +01:00
#include <linux/gpio/GpioIF.h>
#include <linux/spi/SpiCookie.h>
2021-02-14 19:22:58 +01:00
#include <test/testtasks/TestTask.h>
2021-02-23 16:47:34 +01:00
#include <vector>
2021-02-14 19:22:58 +01:00
class SpiTestClass: public TestTask {
public:
2021-02-23 16:47:34 +01:00
enum TestModes {
MGM_LIS3MDL,
MGM_RM3100,
GYRO_L3GD20H,
};
TestModes testMode;
2021-02-14 19:22:58 +01:00
2021-02-23 16:47:34 +01:00
SpiTestClass(object_id_t objectId, GpioIF* gpioIF);
ReturnValue_t performOneShotAction() override;
2021-02-14 19:22:58 +01:00
ReturnValue_t performPeriodicAction() override;
private:
2021-02-23 16:47:34 +01:00
GpioIF* gpioIF;
std::array<uint8_t, 128> recvBuffer;
std::array<uint8_t, 128> sendBuffer;
struct spi_ioc_transfer spiTransferStruct;
2021-02-23 17:05:48 +01:00
void performRm3100Test(uint8_t mgmId);
2021-02-23 16:47:34 +01:00
/* ACS board specific code which pulls all GPIOs high */
void acsInit();
/* ACS board specific variables */
uint8_t mgm0Lis3ChipSelect = 0;
uint8_t mgm1Rm3100ChipSelect = 1;
uint8_t gyro0AdisChipSelect = 5;
uint8_t gyro1L3gd20ChipSelect = 6;
uint8_t gyro2L3gd20ChipSelect = 4;
uint8_t mgm2Lis3mdlChipSelect = 17;
uint8_t mgm3Rm3100ChipSelect = 27;
2021-02-23 18:01:28 +01:00
static constexpr uint8_t STM_READ_MASK = 0b1000'0000;
static constexpr uint8_t STM_AUTO_INCR_MASK = 0b0100'0000;
void setSpiSpeedAndMode(int spiFd, spi::SpiMode mode, uint32_t speed);
void writeStmRegister(int fd, gpioId_t chipSelect, uint8_t reg, uint8_t value,
bool autoIncrement);
uint8_t readStmRegister(int fd, gpioId_t chipSelect, uint8_t reg, bool autoIncrement);
2021-02-14 19:22:58 +01:00
};
#endif /* LINUX_BOARDTEST_SPITESTCLASS_H_ */