Beispiel #1
0
	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");
        }
    }
Beispiel #2
0
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;
}