MHVLib
20111011
An efficiency oriented runtime library for AVR microcontrollers
|
00001 /* 00002 * Copyright (c) 2011, Make, Hack, Void Inc 00003 * All rights reserved. 00004 * 00005 * Redistribution and use in source and binary forms, with or without 00006 * modification, are permitted provided that the following conditions are met: 00007 * * Redistributions of source code must retain the above copyright 00008 * notice, this list of conditions and the following disclaimer. 00009 * * Redistributions in binary form must reproduce the above copyright 00010 * notice, this list of conditions and the following disclaimer in the 00011 * documentation and/or other materials provided with the distribution. 00012 * * Neither the name of the Make, Hack, Void nor the 00013 * names of its contributors may be used to endorse or promote products 00014 * derived from this software without specific prior written permission. 00015 * 00016 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 00017 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 00018 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 00019 * DISCLAIMED. IN NO EVENT SHALL MAKE, HACK, VOID BE LIABLE FOR ANY 00020 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 00021 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 00022 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 00023 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 00024 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 00025 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00026 */ 00027 00028 #ifndef MHV_ADC_H_ 00029 #define MHV_ADC_H_ 00030 00031 #include <MHV_io.h> 00032 #include <MHV_AD.h> 00033 00034 00035 #define MHV_ADC_ASSIGN_INTERRUPT(__mhvADCManager) \ 00036 ISR(ADC_vect) { \ 00037 __mhvADCManager.adc(); \ 00038 } 00039 00043 #define MHV_ADC_BUFFER_CREATE(_mhvADCBufferName, _mhvADCBufferCount) \ 00044 MHV_EVENT_ADC _mhvADCBufferName[_mhvADCBufferCount]; 00045 00046 class MHV_ADCListener { 00047 public: 00048 virtual void adc(uint8_t adcChannel, uint16_t adcValue) =0; 00049 }; 00050 00051 struct mhv_eventADC { 00052 uint8_t channel; 00053 MHV_ADCListener *listener; 00054 }; 00055 typedef struct mhv_eventADC MHV_EVENT_ADC; 00056 00057 class MHV_ADC { 00058 protected: 00059 uint16_t _adcValue; 00060 int8_t _adcChannel; 00061 MHV_EVENT_ADC *_adcs; 00062 uint8_t _adcCount; 00063 00064 00065 public: 00066 MHV_ADC(MHV_EVENT_ADC *adcs, uint8_t adcCount); 00067 00068 // ADC 00069 void adc(); 00070 void registerListener(uint8_t channel, MHV_ADCListener *listener); 00071 void deregisterListener(uint8_t channel); 00072 void enable(); 00073 void disable(); 00074 uint16_t busyRead(uint8_t channel, uint8_t reference); 00075 void asyncRead(uint8_t channel, uint8_t reference); 00076 void setPrescaler(MHV_AD_PRESCALER prescaler); 00077 00078 void handleEvents(); 00079 }; 00080 00081 #endif /* MHV_ADC_H_ */