1 /* 2 * Author: Nandkishor Sonar 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 * @file 28 * @brief Analog input/output 29 * 30 * AIO is the anlog input & output interface to libmraa. It is used to read or 31 * set the voltage applied to an AIO pin. 32 * 33 * @snippet analogin_a0.c Interesting 34 */ 35 36 #ifdef __cplusplus 37 extern "C" { 38 #endif 39 40 #include <stdio.h> 41 #include <unistd.h> 42 #include <stdint.h> 43 44 #include "common.h" 45 #include "gpio.h" 46 47 /** 48 * Opaque pointer definition to the internal struct _aio. This context refers 49 * to one single AIO pin on the board. 50 */ 51 typedef struct _aio* mraa_aio_context; 52 53 /** 54 * Initialise an Analog input device, connected to the specified pin 55 * 56 * @param pin Channel number to read ADC inputs 57 * @returns aio context or NULL 58 */ 59 mraa_aio_context mraa_aio_init(unsigned int pin); 60 61 /** 62 * Read the input voltage. By default mraa will shift 63 * the raw value up or down to a 10 bit value. 64 * 65 * @param dev The AIO context 66 * @returns The current input voltage. 67 */ 68 unsigned int mraa_aio_read(mraa_aio_context dev); 69 70 /** 71 * Read the input voltage and return it as a normalized float (0.0f-1.0f). 72 * 73 * @param dev The AIO context 74 * @returns The current input voltage as a normalized float (0.0f-1.0f) 75 */ 76 float mraa_aio_read_float(mraa_aio_context dev); 77 78 /** 79 * Close the analog input context, this will free the memory for the context 80 * 81 * @param dev The AIO context 82 * @return Result of operation 83 */ 84 mraa_result_t mraa_aio_close(mraa_aio_context dev); 85 86 /** 87 * Set the bit value which mraa will shift the raw reading 88 * from the ADC to. I.e. 10bits 89 * @param dev the analog input context 90 * @param bits the bits the return from read should be i.e 10 91 * 92 * @return mraa result type 93 */ 94 mraa_result_t mraa_aio_set_bit(mraa_aio_context dev, int bits); 95 96 /** 97 * Gets the bit value mraa is shifting the analog read to. 98 * @param dev the analog input context 99 * 100 * @return bit value mraa is set return from the read function 101 */ 102 int mraa_aio_get_bit(mraa_aio_context dev); 103 104 #ifdef __cplusplus 105 } 106 #endif 107