2015-07-10 06:01:56 -07:00
|
|
|
/**
|
|
|
|
* @file adc_inputs.h
|
|
|
|
* @brief Low level ADC code
|
|
|
|
*
|
|
|
|
* @date Jan 14, 2013
|
2015-12-31 13:02:30 -08:00
|
|
|
* @author Andrey Belomutskiy, (c) 2012-2016
|
2015-07-10 06:01:56 -07:00
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef ADC_INPUTS_H_
|
|
|
|
#define ADC_INPUTS_H_
|
|
|
|
|
|
|
|
#include "main.h"
|
|
|
|
#include "adc_math.h"
|
|
|
|
|
|
|
|
#if HAL_USE_ADC || defined(__DOXYGEN__)
|
|
|
|
|
|
|
|
const char * getAdcMode(adc_channel_e hwChannel);
|
|
|
|
int getAdcChannelPin(adc_channel_e hwChannel);
|
|
|
|
void initAdcInputs(bool boardTestMode);
|
|
|
|
void adc_callback_fast(ADCDriver *adcp, adcsample_t *buffer, size_t n);
|
|
|
|
GPIO_TypeDef* getAdcChannelPort(adc_channel_e hwChannel);
|
|
|
|
adc_channel_e getAdcChannel(brain_pin_e pin);
|
|
|
|
|
|
|
|
int getAdcHardwareIndexByInternalIndex(int index);
|
|
|
|
|
|
|
|
void pokeAdcInputs(void);
|
|
|
|
int getInternalAdcValue(const char *msg, adc_channel_e index);
|
|
|
|
|
|
|
|
/* Depth of the conversion buffer, channels are sampled X times each.*/
|
|
|
|
#define ADC_BUF_DEPTH_SLOW 1
|
|
|
|
#define ADC_BUF_DEPTH_FAST 1
|
|
|
|
|
|
|
|
// max(ADC_BUF_DEPTH_SLOW, ADC_BUF_DEPTH_FAST)
|
|
|
|
#define MAX_ADC_GRP_BUF_DEPTH 1
|
|
|
|
|
|
|
|
#define ADC_MAX_CHANNELS_COUNT 16
|
|
|
|
|
|
|
|
//typedef struct
|
|
|
|
|
|
|
|
// this structure contains one multi-channel ADC state snapshot
|
|
|
|
typedef struct {
|
|
|
|
volatile adcsample_t adc_data[ADC_MAX_CHANNELS_COUNT];
|
|
|
|
// time_t time;
|
|
|
|
} adc_state;
|
|
|
|
|
|
|
|
#define getAdcValue(msg, hwChannel) getInternalAdcValue(msg, hwChannel)
|
|
|
|
|
|
|
|
// todo: migrate to adcToVoltageInputDividerCoefficient
|
|
|
|
#define adcToVoltsDivided(adc) (adcToVolts(adc) * engineConfiguration->analogInputDividerCoefficient)
|
|
|
|
|
|
|
|
#else
|
|
|
|
#define getAdcValue(channel) 0
|
|
|
|
#endif /* HAL_USE_ADC */
|
|
|
|
|
|
|
|
#endif /* ADC_INPUTS_H_ */
|