spi: Add 16bit wide convenience functions for spi
Signed-off-by: Michael Ring <mail@michael-ring.org> Signed-off-by: Brendan Le Foll <brendan.le.foll@intel.com>
This commit is contained in:
committed by
Brendan Le Foll
parent
3a5b992524
commit
55ac2e8996
@@ -256,6 +256,27 @@ mraa_spi_write(mraa_spi_context dev, uint8_t data)
|
||||
return recv;
|
||||
}
|
||||
|
||||
uint16_t
|
||||
mraa_spi_write_word(mraa_spi_context dev, uint16_t data) {
|
||||
struct spi_ioc_transfer msg;
|
||||
memset(&msg, 0, sizeof(msg));
|
||||
|
||||
uint16_t length = 2;
|
||||
|
||||
uint16_t recv = 0;
|
||||
msg.tx_buf = (unsigned long) &data;
|
||||
msg.rx_buf = (unsigned long) &recv;
|
||||
msg.speed_hz = dev->clock;
|
||||
msg.bits_per_word = dev->bpw;
|
||||
msg.delay_usecs = 0;
|
||||
msg.len = length;
|
||||
if (ioctl(dev->devfd, SPI_IOC_MESSAGE(1), &msg) < 0) {
|
||||
syslog(LOG_ERR, "spi: Failed to perform dev transfer");
|
||||
return -1;
|
||||
}
|
||||
return recv;
|
||||
}
|
||||
|
||||
mraa_result_t
|
||||
mraa_spi_transfer_buf(mraa_spi_context dev, uint8_t* data, uint8_t* rxbuf, int length)
|
||||
{
|
||||
@@ -275,6 +296,24 @@ mraa_spi_transfer_buf(mraa_spi_context dev, uint8_t* data, uint8_t* rxbuf, int l
|
||||
return MRAA_SUCCESS;
|
||||
}
|
||||
|
||||
mraa_result_t
|
||||
mraa_spi_transfer_buf_word(mraa_spi_context dev, uint16_t *data, uint16_t *rxbuf, int length) {
|
||||
struct spi_ioc_transfer msg;
|
||||
memset(&msg, 0, sizeof(msg));
|
||||
|
||||
msg.tx_buf = (unsigned long) data;
|
||||
msg.rx_buf = (unsigned long) rxbuf;
|
||||
msg.speed_hz = dev->clock;
|
||||
msg.bits_per_word = dev->bpw;
|
||||
msg.delay_usecs = 0;
|
||||
msg.len = length;
|
||||
if (ioctl(dev->devfd, SPI_IOC_MESSAGE(1), &msg) < 0) {
|
||||
syslog(LOG_ERR, "spi: Failed to perform dev transfer");
|
||||
return MRAA_ERROR_INVALID_RESOURCE;
|
||||
}
|
||||
return MRAA_SUCCESS;
|
||||
}
|
||||
|
||||
uint8_t*
|
||||
mraa_spi_write_buf(mraa_spi_context dev, uint8_t* data, int length)
|
||||
{
|
||||
@@ -287,6 +326,19 @@ mraa_spi_write_buf(mraa_spi_context dev, uint8_t* data, int length)
|
||||
return recv;
|
||||
}
|
||||
|
||||
uint16_t *
|
||||
mraa_spi_write_buf_word(mraa_spi_context dev, uint16_t *data, int length) {
|
||||
uint16_t* recv = malloc(sizeof(uint16_t) * length);
|
||||
|
||||
if (mraa_spi_transfer_buf_word(dev, data, recv, length) != MRAA_SUCCESS) {
|
||||
free(recv);
|
||||
return NULL;
|
||||
}
|
||||
return recv;
|
||||
}
|
||||
|
||||
|
||||
|
||||
mraa_result_t
|
||||
mraa_spi_stop(mraa_spi_context dev)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user