Private
Public Access
2
0

spi.c: added context validity checks

Signed-off-by: Alex Tereschenko <alext.mkrs@gmail.com>
Signed-off-by: Brendan Le Foll <brendan.le.foll@intel.com>
This commit is contained in:
Alex Tereschenko
2016-08-18 16:23:07 +02:00
committed by Brendan Le Foll
parent 07f6181c91
commit 3a638caf01

View File

@@ -181,6 +181,11 @@ mraa_spi_init_raw(unsigned int bus, unsigned int cs)
mraa_result_t
mraa_spi_mode(mraa_spi_context dev, mraa_spi_mode_t mode)
{
if (dev == NULL) {
syslog(LOG_ERR, "spi: mode: context is invalid");
return MRAA_ERROR_INVALID_HANDLE;
}
uint8_t spi_mode = 0;
switch (mode) {
case MRAA_SPI_MODE0:
@@ -212,6 +217,11 @@ mraa_spi_mode(mraa_spi_context dev, mraa_spi_mode_t mode)
mraa_result_t
mraa_spi_frequency(mraa_spi_context dev, int hz)
{
if (dev == NULL) {
syslog(LOG_ERR, "spi: frequency: context is invalid");
return MRAA_ERROR_INVALID_HANDLE;
}
int speed = 0;
dev->clock = hz;
if (ioctl(dev->devfd, SPI_IOC_RD_MAX_SPEED_HZ, &speed) != -1) {
@@ -226,6 +236,11 @@ mraa_spi_frequency(mraa_spi_context dev, int hz)
mraa_result_t
mraa_spi_lsbmode(mraa_spi_context dev, mraa_boolean_t lsb)
{
if (dev == NULL) {
syslog(LOG_ERR, "spi: lsbmode: context is invalid");
return MRAA_ERROR_INVALID_HANDLE;
}
if (IS_FUNC_DEFINED(dev, spi_lsbmode_replace)) {
return dev->advance_func->spi_lsbmode_replace(dev, lsb);
}
@@ -246,6 +261,11 @@ mraa_spi_lsbmode(mraa_spi_context dev, mraa_boolean_t lsb)
mraa_result_t
mraa_spi_bit_per_word(mraa_spi_context dev, unsigned int bits)
{
if (dev == NULL) {
syslog(LOG_ERR, "spi: bit_per_word: context is invalid");
return MRAA_ERROR_INVALID_HANDLE;
}
if (ioctl(dev->devfd, SPI_IOC_WR_BITS_PER_WORD, &bits) < 0) {
syslog(LOG_ERR, "spi: Failed to set bit per word");
return MRAA_ERROR_INVALID_RESOURCE;
@@ -257,6 +277,11 @@ mraa_spi_bit_per_word(mraa_spi_context dev, unsigned int bits)
int
mraa_spi_write(mraa_spi_context dev, uint8_t data)
{
if (dev == NULL) {
syslog(LOG_ERR, "spi: write: context is invalid");
return -1;
}
struct spi_ioc_transfer msg;
memset(&msg, 0, sizeof(msg));
@@ -279,6 +304,11 @@ mraa_spi_write(mraa_spi_context dev, uint8_t data)
int
mraa_spi_write_word(mraa_spi_context dev, uint16_t data)
{
if (dev == NULL) {
syslog(LOG_ERR, "spi: write_word: context is invalid");
return -1;
}
struct spi_ioc_transfer msg;
memset(&msg, 0, sizeof(msg));
@@ -301,6 +331,11 @@ mraa_spi_write_word(mraa_spi_context dev, uint16_t data)
mraa_result_t
mraa_spi_transfer_buf(mraa_spi_context dev, uint8_t* data, uint8_t* rxbuf, int length)
{
if (dev == NULL) {
syslog(LOG_ERR, "spi: transfer_buf: context is invalid");
return MRAA_ERROR_INVALID_HANDLE;
}
struct spi_ioc_transfer msg;
memset(&msg, 0, sizeof(msg));
@@ -320,6 +355,11 @@ mraa_spi_transfer_buf(mraa_spi_context dev, uint8_t* data, uint8_t* rxbuf, int l
mraa_result_t
mraa_spi_transfer_buf_word(mraa_spi_context dev, uint16_t* data, uint16_t* rxbuf, int length)
{
if (dev == NULL) {
syslog(LOG_ERR, "spi: transfer_buf_word: context is invalid");
return MRAA_ERROR_INVALID_HANDLE;
}
struct spi_ioc_transfer msg;
memset(&msg, 0, sizeof(msg));
@@ -339,6 +379,11 @@ mraa_spi_transfer_buf_word(mraa_spi_context dev, uint16_t* data, uint16_t* rxbuf
uint8_t*
mraa_spi_write_buf(mraa_spi_context dev, uint8_t* data, int length)
{
if (dev == NULL) {
syslog(LOG_ERR, "spi: write_buf: context is invalid");
return NULL;
}
uint8_t* recv = malloc(sizeof(uint8_t) * length);
if (mraa_spi_transfer_buf(dev, data, recv, length) != MRAA_SUCCESS) {
@@ -351,6 +396,11 @@ mraa_spi_write_buf(mraa_spi_context dev, uint8_t* data, int length)
uint16_t*
mraa_spi_write_buf_word(mraa_spi_context dev, uint16_t* data, int length)
{
if (dev == NULL) {
syslog(LOG_ERR, "spi: write_buf_word: context is invalid");
return NULL;
}
uint16_t* recv = malloc(sizeof(uint16_t) * length);
if (mraa_spi_transfer_buf_word(dev, data, recv, length) != MRAA_SUCCESS) {
@@ -363,6 +413,11 @@ mraa_spi_write_buf_word(mraa_spi_context dev, uint16_t* data, int length)
mraa_result_t
mraa_spi_stop(mraa_spi_context dev)
{
if (dev == NULL) {
syslog(LOG_ERR, "spi: stop: context is invalid");
return MRAA_ERROR_INVALID_HANDLE;
}
close(dev->devfd);
free(dev);
return MRAA_SUCCESS;