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:
committed by
Brendan Le Foll
parent
07f6181c91
commit
3a638caf01
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user