/**
 * \file
 *   Header file for ADC.
 * \author
 *   Anthony "Asterisk" Ambuehl
 *
 */

#ifndef __ADC_H
#define __ADC_H
#define ADC_DMA_CONFIG_CHANNEL 1
#define ADC_CHANNELS 8
#include "cc2430_sfr.h"
#include "dma.h"
#include "banked.h"

typedef struct adc_result
{
  uint16_t adc:14;
  uint16_t unused:2;
} adc_result_t;

typedef enum adc_stsel_t
{
	EXT = 0, /* externally triggered by P2_0 */
	CONTINUOUS = 1, /* continuous full speed conversion */
	TIMER1 = 2, /* Timer 1 channel 0 compare event  */
	ST = 3 /* ADCCON1.ST = 1  */
} adc_stsel_t;

extern void adc_init(void) __banked;
extern void adc_single_shot(void) __banked;
extern int16_t adc_convert_result(int16_t ptr) __banked;
extern int16_t adc_get_last_conv() __banked;
extern void adc_dma_callback(void) __banked;
#ifdef HAVE_DMA
extern xDMAHandle adc_dma;
extern unsigned int *adc_dma_dest;
#endif

#endif /*__ADC_H*/