diff --git a/include/mraa_adv_func.h b/include/mraa_adv_func.h index 98f21ab..4b04802 100644 --- a/include/mraa_adv_func.h +++ b/include/mraa_adv_func.h @@ -50,5 +50,9 @@ typedef struct { mraa_result_t (*i2c_init_pre) (unsigned int bus); mraa_result_t (*i2c_init_post) (mraa_i2c_context dev); + mraa_result_t (*aio_get_valid_fp) (mraa_aio_context dev); + mraa_result_t (*aio_init_pre) (unsigned int aio); + mraa_result_t (*aio_init_post) (mraa_aio_context dev); + mraa_result_t (*pwm_period_replace) (mraa_pwm_context dev, int period); } mraa_adv_func_t; diff --git a/src/aio/aio.c b/src/aio/aio.c index 09a4a4a..7a171d0 100644 --- a/src/aio/aio.c +++ b/src/aio/aio.c @@ -39,6 +39,8 @@ static int sup_bits; static mraa_result_t aio_get_valid_fp(mraa_aio_context dev) { + if (advance_func->aio_get_valid_fp != NULL) + return advance_func->aio_get_valid_fp(dev); char file_path[64]= ""; //Open file Analog device input channel raw voltage file for reading. @@ -63,6 +65,12 @@ static mraa_result_t aio_get_valid_fp(mraa_aio_context dev) */ mraa_aio_context mraa_aio_init(unsigned int aio_channel) { + if (advance_func->aio_init_pre != NULL) { + mraa_result_t pre_ret = (advance_func->aio_init_pre(aio_channel)); + if(pre_ret != MRAA_SUCCESS) + return NULL; + } + int checked_pin = mraa_setup_aio(aio_channel); if (checked_pin < 0) { switch(checked_pin) { @@ -98,6 +106,13 @@ mraa_aio_context mraa_aio_init(unsigned int aio_channel) raw_bits = mraa_adc_raw_bits(); sup_bits = mraa_adc_supported_bits(); + if (advance_func->aio_init_post != NULL) { + mraa_result_t ret = advance_func->aio_init_post(dev); + if (ret != MRAA_SUCCESS) { + free(dev); + return NULL; + } + } return dev; }