2021-02-14 19:22:58 +01:00
|
|
|
#ifndef LINUX_BOARDTEST_SPITESTCLASS_H_
|
|
|
|
#define LINUX_BOARDTEST_SPITESTCLASS_H_
|
|
|
|
|
2021-09-13 18:07:07 +02:00
|
|
|
#include "OBSWConfig.h"
|
|
|
|
|
|
|
|
#if defined(XIPHOS_Q7S)
|
|
|
|
#include "busConf.h"
|
|
|
|
#endif
|
|
|
|
|
2021-08-03 15:58:01 +02:00
|
|
|
#include <fsfw_hal/common/gpio/GpioIF.h>
|
|
|
|
#include <fsfw_hal/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 {
|
2021-02-23 18:19:11 +01:00
|
|
|
NONE,
|
2021-02-23 16:47:34 +01:00
|
|
|
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;
|
2021-03-06 20:21:23 +01:00
|
|
|
struct spi_ioc_transfer spiTransferStruct = {};
|
2021-02-23 16:47:34 +01:00
|
|
|
|
2021-02-23 17:05:48 +01:00
|
|
|
void performRm3100Test(uint8_t mgmId);
|
2021-02-24 00:24:14 +01:00
|
|
|
void performLis3MdlTest(uint8_t lis3Id);
|
2021-03-07 12:50:41 +01:00
|
|
|
void performL3gTest(uint8_t l3gId);
|
2021-02-24 00:24:14 +01:00
|
|
|
|
2021-02-23 16:47:34 +01:00
|
|
|
/* ACS board specific code which pulls all GPIOs high */
|
|
|
|
void acsInit();
|
|
|
|
|
|
|
|
/* ACS board specific variables */
|
2021-04-02 15:14:08 +02:00
|
|
|
#ifdef RASPBERRY_PI
|
2021-09-22 12:29:43 +02:00
|
|
|
uint8_t mgm0Lis3mdlChipSelect = gpio::MGM_0_BCM_PIN;
|
|
|
|
uint8_t mgm1Rm3100ChipSelect = gpio::MGM_1_BCM_PIN;
|
|
|
|
uint8_t mgm2Lis3mdlChipSelect = gpio::MGM_2_BCM_PIN;
|
|
|
|
uint8_t mgm3Rm3100ChipSelect = gpio::MGM_3_BCM_PIN;
|
|
|
|
|
|
|
|
uint8_t gyro0AdisChipSelect = gpio::GYRO_0_BCM_PIN;
|
|
|
|
uint8_t gyro1L3gd20ChipSelect = gpio::GYRO_1_BCM_PIN;
|
|
|
|
uint8_t gyro2AdisChipSelect = gpio::GYRO_2_BCM_PIN;
|
|
|
|
uint8_t gyro3L3gd20ChipSelect = gpio::GYRO_3_BCM_PIN;
|
2021-04-02 15:14:08 +02:00
|
|
|
#elif defined(XIPHOS_Q7S)
|
2021-09-13 18:07:07 +02:00
|
|
|
uint8_t mgm0Lis3mdlChipSelect = q7s::GPIO_MGM_0_LIS3_CS;
|
|
|
|
uint8_t mgm1Rm3100ChipSelect = q7s::GPIO_MGM_1_RM3100_CS;
|
|
|
|
uint8_t gyro0AdisChipSelect = q7s::GPIO_GYRO_0_ADIS_CS;
|
|
|
|
uint8_t gyro2AdisChipSelect = q7s::GPIO_GYRO_2_ADIS_CS;
|
|
|
|
uint8_t gyro1L3gd20ChipSelect = q7s::GPIO_GYRO_1_L3G_CS;
|
|
|
|
uint8_t gyro3L3gd20ChipSelect = q7s::GPIO_GYRO_3_L3G_CS;
|
|
|
|
uint8_t mgm2Lis3mdlChipSelect = q7s::GPIO_MGM_2_LIS3_CS;
|
|
|
|
uint8_t mgm3Rm3100ChipSelect = q7s::GPIO_MGM_3_RM3100_CS;
|
2021-05-05 22:47:24 +02:00
|
|
|
#else
|
|
|
|
uint8_t mgm0Lis3mdlChipSelect = 0;
|
|
|
|
uint8_t mgm1Rm3100ChipSelect = 0;
|
|
|
|
uint8_t gyro0AdisResetLine = 0;
|
|
|
|
uint8_t gyro0AdisChipSelect = 0;
|
|
|
|
uint8_t gyro1L3gd20ChipSelect = 0;
|
|
|
|
uint8_t gyro2L3gd20ChipSelect = 0;
|
|
|
|
uint8_t mgm2Lis3mdlChipSelect = 0;
|
|
|
|
uint8_t mgm3Rm3100ChipSelect = 0;
|
2021-04-02 15:14:08 +02:00
|
|
|
#endif
|
2021-02-23 16:47:34 +01:00
|
|
|
|
2021-02-23 18:01:28 +01:00
|
|
|
static constexpr uint8_t STM_READ_MASK = 0b1000'0000;
|
2021-03-06 18:12:50 +01:00
|
|
|
static constexpr uint8_t RM3100_READ_MASK = STM_READ_MASK;
|
2021-02-23 18:01:28 +01:00
|
|
|
static constexpr uint8_t STM_AUTO_INCR_MASK = 0b0100'0000;
|
|
|
|
|
2021-03-07 14:06:29 +01:00
|
|
|
void setSpiSpeedAndMode(int spiFd, spi::SpiModes mode, uint32_t speed);
|
2021-03-07 12:50:41 +01:00
|
|
|
|
2021-02-23 18:01:28 +01:00
|
|
|
void writeStmRegister(int fd, gpioId_t chipSelect, uint8_t reg, uint8_t value,
|
|
|
|
bool autoIncrement);
|
2021-03-07 12:50:41 +01:00
|
|
|
void writeMultipleStmRegisters(int fd, gpioId_t chipSelect, uint8_t reg, uint8_t* values,
|
|
|
|
size_t len);
|
|
|
|
void writeMultipleRegisters(int fd, gpioId_t chipSelect, uint8_t reg, uint8_t *values,
|
|
|
|
size_t len);
|
|
|
|
void writeRegister(int fd, gpioId_t chipSelect, uint8_t reg, uint8_t value);
|
|
|
|
|
2021-03-06 18:12:50 +01:00
|
|
|
uint8_t readRm3100Register(int fd, gpioId_t chipSelect, uint8_t reg);
|
2021-02-23 18:01:28 +01:00
|
|
|
uint8_t readStmRegister(int fd, gpioId_t chipSelect, uint8_t reg, bool autoIncrement);
|
2021-03-07 12:50:41 +01:00
|
|
|
uint8_t readRegister(int fd, gpioId_t chipSelect, uint8_t reg);
|
|
|
|
void readMultipleStmRegisters(int fd, gpioId_t chipSelect, uint8_t reg, uint8_t *reply,
|
|
|
|
size_t len);
|
|
|
|
void readMultipleRegisters(int fd, gpioId_t chipSelect, uint8_t reg,
|
|
|
|
uint8_t* reply, size_t len);
|
2021-02-23 18:01:28 +01:00
|
|
|
|
2021-02-14 19:22:58 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#endif /* LINUX_BOARDTEST_SPITESTCLASS_H_ */
|