Spi(int bus, int cs) { m_spi = mraa_spi_init_raw(bus, cs); if (m_spi == NULL) { throw std::invalid_argument("Error initialising SPI bus"); } }
mraa_spi_context mraa_spi_init(int bus) { if (plat == NULL) { syslog(LOG_ERR, "spi: Platform Not Initialised"); return NULL; } if (mraa_is_sub_platform_id(bus)) { syslog(LOG_ERR, "spi: Spi module doesn't support subplatforms"); return NULL; } if (plat->spi_bus_count == 0) { syslog(LOG_ERR, "spi: no spi buses defined in platform"); return NULL; } if (plat->spi_bus_count == 1) { bus = plat->def_spi_bus; } if (bus >= plat->spi_bus_count) { syslog(LOG_ERR, "spi: requested bus above spi bus count"); return NULL; } if (plat->adv_func->spi_init_pre != NULL) { if (plat->adv_func->spi_init_pre(bus) != MRAA_SUCCESS) { return NULL; } } int pos = plat->spi_bus[bus].sclk; if (plat->pins[pos].spi.mux_total > 0) { if (mraa_setup_mux_mapped(plat->pins[pos].spi) != MRAA_SUCCESS) { syslog(LOG_ERR, "spi: failed to set-up spi sclk multiplexer"); return NULL; } } pos = plat->spi_bus[bus].mosi; if (plat->pins[pos].spi.mux_total > 0) { if (mraa_setup_mux_mapped(plat->pins[pos].spi) != MRAA_SUCCESS) { syslog(LOG_ERR, "spi: failed to set-up spi mosi multiplexer"); return NULL; } } pos = plat->spi_bus[bus].miso; if (plat->pins[pos].spi.mux_total > 0) { if (mraa_setup_mux_mapped(plat->pins[pos].spi) != MRAA_SUCCESS) { syslog(LOG_ERR, "spi: failed to set-up spi miso multiplexer"); return NULL; } } pos = plat->spi_bus[bus].cs; if (plat->pins[pos].spi.mux_total > 0) { if (mraa_setup_mux_mapped(plat->pins[pos].spi) != MRAA_SUCCESS) { syslog(LOG_ERR, "spi: failed to set-up spi cs multiplexer"); return NULL; } } mraa_spi_context dev = mraa_spi_init_raw(plat->spi_bus[bus].bus_id, plat->spi_bus[bus].slave_s); if (plat->adv_func->spi_init_post != NULL) { mraa_result_t ret = plat->adv_func->spi_init_post(dev); if (ret != MRAA_SUCCESS) { free(dev); return NULL; } } return dev; }