fsfw/hal/src/fsfw_hal/stm32h7/devicetest/GyroL3GD20H.h

66 lines
2.0 KiB
C
Raw Normal View History

2021-07-13 19:19:25 +02:00
#ifndef FSFW_HAL_STM32H7_DEVICETEST_GYRO_L3GD20H_H_
#define FSFW_HAL_STM32H7_DEVICETEST_GYRO_L3GD20H_H_
2022-02-02 10:29:30 +01:00
#include <array>
#include <cstdint>
2021-07-13 19:19:25 +02:00
#include "../spi/mspInit.h"
#include "../spi/spiDefinitions.h"
#include "fsfw/returnvalues/HasReturnvaluesIF.h"
2022-02-02 10:29:30 +01:00
#include "stm32h7xx_hal.h"
#include "stm32h7xx_hal_spi.h"
2021-07-13 19:19:25 +02:00
2022-05-29 18:41:13 +02:00
#ifndef STM_USE_PERIPHERAL_TX_BUFFER_MPU_PROTECTION
#define STM_USE_PERIPHERAL_TX_BUFFER_MPU_PROTECTION 1
#endif
2022-02-02 10:29:30 +01:00
enum class TransferStates { IDLE, WAIT, SUCCESS, FAILURE };
2021-07-13 19:19:25 +02:00
class GyroL3GD20H {
2022-02-02 10:29:30 +01:00
public:
GyroL3GD20H(SPI_HandleTypeDef* spiHandle, spi::TransferModes transferMode);
~GyroL3GD20H();
2021-07-13 19:19:25 +02:00
2022-02-02 10:29:30 +01:00
ReturnValue_t initialize();
ReturnValue_t performOperation();
2021-07-13 19:19:25 +02:00
2022-02-02 10:29:30 +01:00
private:
const uint8_t WHO_AM_I_REG = 0b00001111;
const uint8_t STM_READ_MASK = 0b10000000;
const uint8_t STM_AUTO_INCREMENT_MASK = 0b01000000;
const uint8_t EXPECTED_WHO_AM_I_VAL = 0b11010111;
const uint8_t CTRL_REG_1 = 0b00100000;
const uint32_t L3G_RANGE = 245;
2021-07-13 19:19:25 +02:00
2022-02-02 10:29:30 +01:00
SPI_HandleTypeDef* spiHandle;
2021-07-13 19:19:25 +02:00
2022-02-02 10:29:30 +01:00
static spi::TransferModes transferMode;
static constexpr size_t recvBufferSize = 32 * 10;
static std::array<uint8_t, recvBufferSize> rxBuffer;
static constexpr size_t txBufferSize = 32;
static std::array<uint8_t, txBufferSize> txBuffer;
2021-07-13 19:19:25 +02:00
2022-02-02 10:29:30 +01:00
ReturnValue_t handleDmaTransferInit();
ReturnValue_t handlePollingTransferInit();
ReturnValue_t handleInterruptTransferInit();
2021-07-13 19:19:25 +02:00
2022-02-02 10:29:30 +01:00
ReturnValue_t handleDmaSensorRead();
HAL_StatusTypeDef performDmaTransfer(size_t sendSize);
ReturnValue_t handlePollingSensorRead();
ReturnValue_t handleInterruptSensorRead();
2021-07-13 19:19:25 +02:00
2022-02-02 10:29:30 +01:00
uint8_t readRegPolling(uint8_t reg);
2021-07-13 19:19:25 +02:00
2022-02-02 10:29:30 +01:00
static void spiTransferCompleteCallback(SPI_HandleTypeDef* hspi, void* args);
static void spiTransferErrorCallback(SPI_HandleTypeDef* hspi, void* args);
2021-07-13 19:19:25 +02:00
2022-02-02 10:29:30 +01:00
void prepareConfigRegs(uint8_t* configRegs);
void handleSensorReadout();
2021-07-13 19:19:25 +02:00
2022-02-02 10:29:30 +01:00
DMA_HandleTypeDef* txDmaHandle = {};
DMA_HandleTypeDef* rxDmaHandle = {};
spi::MspCfgBase* mspCfg = {};
2021-07-13 19:19:25 +02:00
};
#endif /* FSFW_HAL_STM32H7_DEVICETEST_GYRO_L3GD20H_H_ */