#ifndef FSFW_HAL_STM32H7_DEVICETEST_GYRO_L3GD20H_H_ #define FSFW_HAL_STM32H7_DEVICETEST_GYRO_L3GD20H_H_ #include "stm32h7xx_hal.h" #include "stm32h7xx_hal_spi.h" #include "../spi/spiDefinitions.h" #include "fsfw/returnvalues/HasReturnvaluesIF.h" #include #include enum class TransferStates { IDLE, WAIT, SUCCESS, FAILURE }; class GyroL3GD20H { public: GyroL3GD20H(SPI_HandleTypeDef* spiHandle, spi::TransferModes transferMode); ReturnValue_t initialize(); ReturnValue_t performOperation(); private: const uint8_t WHO_AM_I_REG = 0b00001111; const uint8_t STM_READ_MASK = 0b10000000; const uint8_t EXPECTED_WHO_AM_I_VAL = 0b11010111; SPI_HandleTypeDef* spiHandle; spi::TransferModes transferMode; static constexpr size_t recvBufferSize = 32 * 10; static std::array rxBuffer; std::array txBuffer; ReturnValue_t handleDmaTransfer(); ReturnValue_t handlePollingTransfer(); }; #endif /* FSFW_HAL_STM32H7_DEVICETEST_GYRO_L3GD20H_H_ */