diff --git a/include/mraa_adv_func.h b/include/mraa_adv_func.h index 56ebba2..f8b4ce0 100644 --- a/include/mraa_adv_func.h +++ b/include/mraa_adv_func.h @@ -57,4 +57,7 @@ typedef struct { mraa_result_t (*pwm_init_pre) (int pin); mraa_result_t (*pwm_init_post) (mraa_pwm_context pwm); mraa_result_t (*pwm_period_replace) (mraa_pwm_context dev, int period); + + mraa_result_t (*spi_init_pre) (int bus); + mraa_result_t (*spi_init_post) (mraa_spi_context spi); } mraa_adv_func_t; diff --git a/src/spi/spi.c b/src/spi/spi.c index bea58a3..45f4e76 100644 --- a/src/spi/spi.c +++ b/src/spi/spi.c @@ -52,6 +52,11 @@ struct _spi { mraa_spi_context mraa_spi_init(int bus) { + if (advance_func->spi_init_pre != NULL) { + if (advance_func->spi_init_pre(bus) != MRAA_SUCCESS) + return NULL; + } + mraa_spi_bus_t *spi = mraa_setup_spi(bus); if(bus < 0) { fprintf(stderr, "Failed. SPI platform Error\n"); @@ -74,6 +79,14 @@ mraa_spi_init(int bus) dev->lsb = 0; dev->mode = 0; + if (advance_func->spi_init_post != NULL) { + mraa_result_t ret = advance_func->spi_init_post(dev); + if (ret != MRAA_SUCCESS) { + free(dev); + return NULL; + } + } + return dev; }