1 /* 2 * Author: Brendan Le Foll <brendan.le.foll@intel.com> 3 * Copyright (c) 2014 Intel Corporation. 4 * 5 * Permission is hereby granted, free of charge, to any person obtaining 6 * a copy of this software and associated documentation files (the 7 * "Software"), to deal in the Software without restriction, including 8 * without limitation the rights to use, copy, modify, merge, publish, 9 * distribute, sublicense, and/or sell copies of the Software, and to 10 * permit persons to whom the Software is furnished to do so, subject to 11 * the following conditions: 12 * 13 * The above copyright notice and this permission notice shall be 14 * included in all copies or substantial portions of the Software. 15 * 16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 19 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 20 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 21 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 22 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 */ 24 25 #pragma once 26 27 #include <stdexcept> 28 #include "aio.h" 29 #include "types.hpp" 30 31 namespace mraa 32 { 33 34 /** 35 * @brief API to Analog IO 36 * 37 * This file defines the aio interface for libmraa 38 * 39 * @snippet AioA0.cpp Interesting 40 */ 41 class Aio 42 { 43 public: 44 /** 45 * Aio Constructor, takes a pin number which will map directly to the 46 * board number 47 * 48 * @param pin channel number to read ADC inputs 49 */ Aio(unsigned int pin)50 Aio(unsigned int pin) 51 { 52 m_aio = mraa_aio_init(pin); 53 if (m_aio == NULL) { 54 throw std::invalid_argument("Invalid AIO pin specified - do you have an ADC?"); 55 } 56 } 57 /** 58 * Aio destructor 59 */ ~Aio()60 ~Aio() 61 { 62 mraa_aio_close(m_aio); 63 } 64 /** 65 * Read a value from the AIO pin. By default mraa will shift 66 * the raw value up or down to a 10 bit value. 67 * 68 * @returns The current input voltage. By default, a 10bit value 69 */ 70 int read()71 read() 72 { 73 return mraa_aio_read(m_aio); 74 } 75 /** 76 * Read a value from the AIO pin and return it as a normalized float. 77 * 78 * @returns The current input voltage as a normalized float (0.0f-1.0f) 79 */ 80 float readFloat()81 readFloat() 82 { 83 return mraa_aio_read_float(m_aio); 84 } 85 /** 86 * Set the bit value which mraa will shift the raw reading 87 * from the ADC to. I.e. 10bits 88 * @param bits the bits the return from read should be i.e 10 89 * @return mraa::Result type 90 */ 91 Result setBit(int bits)92 setBit(int bits) 93 { 94 return (Result) mraa_aio_set_bit(m_aio, bits); 95 } 96 /** 97 * Gets the bit value mraa is shifting the analog read to. 98 * 99 * @return bit value mraa is set return from the read function 100 */ 101 int getBit()102 getBit() 103 { 104 return mraa_aio_get_bit(m_aio); 105 } 106 107 private: 108 mraa_aio_context m_aio; 109 }; 110 } 111