semf
stm32analogindma.h
Go to the documentation of this file.
1
10#ifndef SEMF_HARDWAREABSTRACTION_STM32_STM32ANALOGINDMA_H_
11#define SEMF_HARDWAREABSTRACTION_STM32_STM32ANALOGINDMA_H_
12
15
16#if defined(STM32) && defined(HAL_ADC_MODULE_ENABLED)
18namespace semf
19{
20class Stm32AnalogInDma : public AnalogInDma, public LinkedQueue<Stm32AnalogInDma>::Node
21{
22public:
24 enum class ErrorCode : uint8_t
25 {
26 Start_HalError = 0,
27 Start_HalBusy,
28 Start_HalTimeout,
29 Stop_HalError,
30 Stop_HalBusy,
31 Stop_HalTimeout,
32 IsrError_Isr
33 };
34
39 explicit Stm32AnalogInDma(ADC_HandleTypeDef& hwHandle);
40 explicit Stm32AnalogInDma(const Stm32AnalogInDma& other) = delete;
41 virtual ~Stm32AnalogInDma() = default;
42
49 void start(uint8_t buffer[], size_t bufferSize) override;
56 void stop() override;
66 static void systemIsr(ADC_HandleTypeDef& adc);
71 static void systemIsrError(ADC_HandleTypeDef& adc);
76 void isr(ADC_HandleTypeDef& adc);
82 void isrError(ADC_HandleTypeDef& adc);
83
84private:
86 static LinkedQueue<Stm32AnalogInDma> m_queue;
88 ADC_HandleTypeDef* m_hwHandle;
90 static constexpr Error::ClassID kSemfClassId = Error::ClassID::Stm32AnalogInDma;
91};
92} /* namespace semf */
93#endif
94#endif /* SEMF_HARDWAREABSTRACTION_STM32_STM32ANALOGINDMA_H_ */
Interface for using ADC (Analog to Digital Conversion) hardware in DMA (Direct Memory Access) mode.
Definition: analogindma.h:26
ClassID
Semf class IDs.
Definition: error.h:28
LinkedQueue is an managed single linked queue implementation.
Definition: linkedqueue.h:38
virtual ~Stm32AnalogInDma()=default
void isrError(ADC_HandleTypeDef &adc)
Sending a error signal.
static void systemIsr(ADC_HandleTypeDef &adc)
System-wide interrupt service routine for adc conversion finished.
void isr(ADC_HandleTypeDef &adc)
Interrupt service routine for adc conversion finished.
Stm32AnalogInDma(const Stm32AnalogInDma &other)=delete
Stm32AnalogInDma(ADC_HandleTypeDef &hwHandle)
Constructor.
static void systemIsrError(ADC_HandleTypeDef &adc)
System-wide interrupt service routine for adc error.
void start(uint8_t buffer[], size_t bufferSize) override
Starts the hardware modules (ADC with DMA) for reading ADC values.
static LinkedQueue< Stm32AnalogInDma > * queue()
Get the list with all analog ins.