Home | History | Annotate | Download | only in mraa
      1 /*
      2  * Author: Brendan Le Foll <brendan.le.foll (at) intel.com>
      3  * Author: Thomas Ingleby <thomas.c.ingleby (at) intel.com>
      4  * Copyright  2014 Intel Corporation
      5  *
      6  * Permission is hereby granted, free of charge, to any person obtaining a copy
      7  * of this software and associated documentation files (the "Software"), to
      8  * deal in the Software without restriction, including without limitation the
      9  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
     10  * sell copies of the Software, and to permit persons to whom the Software is
     11  * furnished to do so, subject to the following conditions:
     12  *
     13  * The above copyright notice and this permission notice shall be included in
     14  * all copies or substantial portions of the Software.
     15  *
     16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
     17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
     19  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
     20  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
     21  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
     22  * IN THE SOFTWARE.
     23  */
     24 
     25 #pragma once
     26 
     27 #include <stdint.h>
     28 #include "types.h"
     29 
     30 #define MRAA_PLATFORM_NAME_MAX_SIZE 64
     31 #define MRAA_PIN_NAME_SIZE 12
     32 
     33 #define MRAA_SUB_PLATFORM_BIT_SHIFT 9
     34 #define MRAA_SUB_PLATFORM_MASK (1<<MRAA_SUB_PLATFORM_BIT_SHIFT)
     35 
     36 #define MRAA_MAIN_PLATFORM_OFFSET 0
     37 #define MRAA_SUB_PLATFORM_OFFSET 1
     38 
     39 /** Executes function func and returns its result in case of error
     40  */
     41 #define MRAA_RETURN_FOR_ERROR(func) do { \
     42                                       mraa_result_t res; \
     43                                       res = func; \
     44                                       if (res != MRAA_SUCCESS) \
     45                                       return res;} while(0)
     46 
     47 /** @file
     48  *
     49  * This file defines the basic shared values for libmraa
     50  */
     51 
     52 #ifdef __cplusplus
     53 extern "C" {
     54 #endif
     55 
     56 /**
     57  * MRAA boolean type
     58  * 1 For TRUE
     59  */
     60 typedef unsigned int mraa_boolean_t;
     61 
     62 /**
     63  * Initialise MRAA
     64  *
     65  * Detects running platform and attempts to use included pinmap, this is run on
     66  * module/library init/load but is handy to rerun to check board initialised
     67  * correctly. MRAA_SUCCESS inidicates correct (first time) initialisation
     68  * whilst MRAA_ERROR_PLATFORM_ALREADY_INITIALISED indicates the board is
     69  * already initialised correctly
     70  *
     71  * @return Result of operation
     72  */
     73 #if (defined SWIGPYTHON) || (defined SWIG)
     74 mraa_result_t mraa_init();
     75 #else
     76 // this sets a compiler attribute (supported by GCC & clang) to have mraa_init()
     77 // be called as a constructor make sure your libc supports this!  uclibc needs
     78 // to be compiled with UCLIBC_CTOR_DTOR
     79 mraa_result_t mraa_init() __attribute__((constructor));
     80 #endif
     81 
     82 /**
     83  * De-Initilise MRAA
     84  *
     85  * This is not a strict requirement but useful to test memory leaks and for
     86  * people who like super clean code. If dynamically loading & unloading
     87  * libmraa you need to call this before unloading the library.
     88  */
     89 void mraa_deinit();
     90 
     91 /**
     92  * Checks if a pin is able to use the passed in mode.
     93  *
     94  * @param pin Physical Pin to be checked.
     95  * @param mode the mode to be tested.
     96  * @return boolean if the mode is supported, 0=false.
     97  */
     98 mraa_boolean_t mraa_pin_mode_test(int pin, mraa_pinmodes_t mode);
     99 
    100 /**
    101  * Check the board's  bit size when reading the value
    102  *
    103  * @return raw bits being read from kernel module. zero if no ADC
    104  */
    105 unsigned int mraa_adc_raw_bits();
    106 
    107 /**
    108  * Check the specified board's bit size when reading the value
    109  *
    110  * @param specified platform offset; 0 for main platform, 1 foor sub platform
    111  * @return raw bits being read from kernel module. zero if no ADC
    112  */
    113 unsigned int mraa_get_platform_adc_raw_bits(uint8_t platform_offset);
    114 
    115 /**
    116  * Return value that the raw value should be shifted to. Zero if no ADC
    117  *
    118  * @return return actual bit size the adc value should be understood as.
    119  */
    120 unsigned int mraa_adc_supported_bits();
    121 
    122 /**
    123  * Return value that the raw value should be shifted to. Zero if no ADC
    124  *
    125  * @param specified platform offset; 0 for main platform, 1 foor sub platform
    126  * @return return actual bit size the adc value should be understood as.
    127  */
    128 unsigned int mraa_get_platform_adc_supported_bits(int platform_offset);
    129 
    130 /**
    131  * Sets the log level to use from 0-7 where 7 is very verbose. These are the
    132  * syslog log levels, see syslog(3) for more information on the levels.
    133  *
    134  * @return Result of operation
    135  */
    136 mraa_result_t mraa_set_log_level(int level);
    137 
    138 /**
    139  * Return the Platform's Name, If no platform detected return NULL
    140  *
    141  * @return platform name
    142  */
    143 const char* mraa_get_platform_name();
    144 
    145 /**
    146  * Return the platform's versioning info, the information given depends per
    147  * platform and can be NULL. platform_offset has to be given. Do not modify
    148  * this pointer
    149  *
    150  * @param specified platform offset; 0 for main platform, 1 for sub platform
    151  * @return platform's versioning string
    152  */
    153 const char* mraa_get_platform_version(int platform_offset);
    154 
    155 /**
    156  * This function attempts to set the mraa process to a given priority and the
    157  * scheduler to SCHED_RR. Highest * priority is typically 99 and minimum is 0.
    158  * This function * will set to MAX if * priority is > MAX. Function will return
    159  * -1 on failure.
    160  *
    161  * @param priority Value from typically 0 to 99
    162  * @return The priority value set
    163  */
    164 int mraa_set_priority(const unsigned int priority);
    165 
    166 /** Get the version string of mraa autogenerated from git tag
    167  *
    168  * The version returned may not be what is expected however it is a reliable
    169  * number associated with the git tag closest to that version at build time
    170  *
    171  * @return version string from version.h
    172  */
    173 const char* mraa_get_version();
    174 
    175 /**
    176  * Print a textual representation of the mraa_result_t
    177  *
    178  * @param result the result to print
    179  */
    180 void mraa_result_print(mraa_result_t result);
    181 
    182 /**
    183  * Get platform type, board must be initialised.
    184  *
    185  * @return mraa_platform_t Platform type enum
    186  */
    187 mraa_platform_t mraa_get_platform_type();
    188 
    189 /**
    190  * Get combined platform type, board must be initialised.
    191  * The combined type is represented as
    192  * (sub_platform_type << 8) | main_platform_type
    193  *
    194  * @return int combined platform type
    195  */
    196 int mraa_get_platform_combined_type();
    197 
    198 /**
    199  * Get platform pincount, board must be initialised.
    200  *
    201  * @return uint of physical pin count on the in-use platform
    202  */
    203 unsigned int mraa_get_pin_count();
    204 
    205 /**
    206  * Get platform usable I2C bus count, board must be initialised.
    207  *
    208  * @return number f usable I2C bus count on the current platform. Function will
    209  * return -1 on failure
    210  */
    211 int mraa_get_i2c_bus_count();
    212 
    213 /**
    214  * Get I2C adapter number in sysfs.
    215  *
    216  * @param i2c_bus the logical I2C bus number
    217  * @return I2C adapter number in sysfs. Function will return -1 on failure
    218  */
    219 int mraa_get_i2c_bus_id(unsigned int i2c_bus);
    220 
    221 /**
    222  * Get specified platform pincount, board must be initialised.
    223  *
    224  * @param specified platform offset; 0 for main platform, 1 foor sub platform
    225  * @return uint of physical pin count on the in-use platform
    226  */
    227 unsigned int mraa_get_platform_pin_count(uint8_t platform_offset);
    228 
    229 /**
    230 * Get name of pin, board must be initialised.
    231 *
    232 * @param pin number
    233 * @return char* of pin name
    234 */
    235 char* mraa_get_pin_name(int pin);
    236 
    237 /**
    238  * Get default i2c bus, board must be initialised.
    239  *
    240  * @return int default i2c bus index
    241  */
    242 int mraa_get_default_i2c_bus(uint8_t platform_offset);
    243 
    244 /**
    245  * Detect presence of sub platform.
    246  *
    247  * @return mraa_boolean_t 1 if sub platform is present and initialized, 0 otherwise
    248  */
    249 mraa_boolean_t mraa_has_sub_platform();
    250 
    251 
    252 /**
    253  * Check if pin or bus id includes sub platform mask.
    254  *
    255  * @param int pin or bus number
    256  *
    257  * @return mraa_boolean_t 1 if pin or bus is for sub platform, 0 otherwise
    258  */
    259 mraa_boolean_t mraa_is_sub_platform_id(int pin_or_bus_id);
    260 
    261 /**
    262  * Convert pin or bus index to corresponding sub platform id.
    263  *
    264  * @param int pin or bus index
    265  *
    266  * @return int sub platform pin or bus number
    267  */
    268 int mraa_get_sub_platform_id(int pin_or_bus_index);
    269 
    270 /**
    271  * Convert pin or bus sub platform id to index.
    272  *
    273  * @param int sub platform pin or bus id
    274  *
    275  * @return int pin or bus index
    276  */
    277 int mraa_get_sub_platform_index(int pin_or_bus_id);
    278 
    279 
    280 
    281 #ifdef __cplusplus
    282 }
    283 #endif
    284