#ifndef __ELUA_ADC_H__ #define __ELUA_ADC_H__ #include "type.h" typedef struct { // Status Bit Flags volatile u8 op_pending: 1, // Is there a pending conversion? blocking: 1, // Are we in blocking or non-blocking mode? (0 - blocking, 1 - nonblocking) freerunning: 1, // If true, we don't stop when we've acquired the requested number of samples clocked: 1, // Acquiring at fixed rate using a clock smooth_ready: 1; // Has smoothing filter warmed up (i.e. smoothlen samples collected) unsigned id, timer_id; u8 logsmoothlen; volatile u16 smoothidx; volatile u32 smoothsum; u16 *smoothbuf; volatile u16 reqsamples; } elua_adc_state; void adc_smooth_data( unsigned id ); elua_adc_state *adc_get_ch_state( unsigned id ); u16 adc_get_processed_sample( unsigned id ); void adc_init_state( unsigned id ); int adc_update_smoothing( unsigned id, u8 loglen ); void adc_flush_smoothing( unsigned id ); u16 adc_samples_requested( unsigned id ); u16 adc_samples_available( unsigned id ); void adc_wait_samples( unsigned id, unsigned samples ); #endif