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_result_t
|
||||||
mraa_spi_mode(mraa_spi_context dev, mraa_spi_mode_t mode)
|
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;
|
uint8_t spi_mode = 0;
|
||||||
switch (mode) {
|
switch (mode) {
|
||||||
case MRAA_SPI_MODE0:
|
case MRAA_SPI_MODE0:
|
||||||
@@ -212,6 +217,11 @@ mraa_spi_mode(mraa_spi_context dev, mraa_spi_mode_t mode)
|
|||||||
mraa_result_t
|
mraa_result_t
|
||||||
mraa_spi_frequency(mraa_spi_context dev, int hz)
|
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;
|
int speed = 0;
|
||||||
dev->clock = hz;
|
dev->clock = hz;
|
||||||
if (ioctl(dev->devfd, SPI_IOC_RD_MAX_SPEED_HZ, &speed) != -1) {
|
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_result_t
|
||||||
mraa_spi_lsbmode(mraa_spi_context dev, mraa_boolean_t lsb)
|
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)) {
|
if (IS_FUNC_DEFINED(dev, spi_lsbmode_replace)) {
|
||||||
return dev->advance_func->spi_lsbmode_replace(dev, lsb);
|
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_result_t
|
||||||
mraa_spi_bit_per_word(mraa_spi_context dev, unsigned int bits)
|
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) {
|
if (ioctl(dev->devfd, SPI_IOC_WR_BITS_PER_WORD, &bits) < 0) {
|
||||||
syslog(LOG_ERR, "spi: Failed to set bit per word");
|
syslog(LOG_ERR, "spi: Failed to set bit per word");
|
||||||
return MRAA_ERROR_INVALID_RESOURCE;
|
return MRAA_ERROR_INVALID_RESOURCE;
|
||||||
@@ -257,6 +277,11 @@ mraa_spi_bit_per_word(mraa_spi_context dev, unsigned int bits)
|
|||||||
int
|
int
|
||||||
mraa_spi_write(mraa_spi_context dev, uint8_t data)
|
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;
|
struct spi_ioc_transfer msg;
|
||||||
memset(&msg, 0, sizeof(msg));
|
memset(&msg, 0, sizeof(msg));
|
||||||
|
|
||||||
@@ -279,6 +304,11 @@ mraa_spi_write(mraa_spi_context dev, uint8_t data)
|
|||||||
int
|
int
|
||||||
mraa_spi_write_word(mraa_spi_context dev, uint16_t data)
|
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;
|
struct spi_ioc_transfer msg;
|
||||||
memset(&msg, 0, sizeof(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_result_t
|
||||||
mraa_spi_transfer_buf(mraa_spi_context dev, uint8_t* data, uint8_t* rxbuf, int length)
|
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;
|
struct spi_ioc_transfer msg;
|
||||||
memset(&msg, 0, sizeof(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_result_t
|
||||||
mraa_spi_transfer_buf_word(mraa_spi_context dev, uint16_t* data, uint16_t* rxbuf, int length)
|
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;
|
struct spi_ioc_transfer msg;
|
||||||
memset(&msg, 0, sizeof(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*
|
uint8_t*
|
||||||
mraa_spi_write_buf(mraa_spi_context dev, uint8_t* data, int length)
|
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);
|
uint8_t* recv = malloc(sizeof(uint8_t) * length);
|
||||||
|
|
||||||
if (mraa_spi_transfer_buf(dev, data, recv, length) != MRAA_SUCCESS) {
|
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*
|
uint16_t*
|
||||||
mraa_spi_write_buf_word(mraa_spi_context dev, uint16_t* data, int length)
|
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);
|
uint16_t* recv = malloc(sizeof(uint16_t) * length);
|
||||||
|
|
||||||
if (mraa_spi_transfer_buf_word(dev, data, recv, length) != MRAA_SUCCESS) {
|
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_result_t
|
||||||
mraa_spi_stop(mraa_spi_context dev)
|
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);
|
close(dev->devfd);
|
||||||
free(dev);
|
free(dev);
|
||||||
return MRAA_SUCCESS;
|
return MRAA_SUCCESS;
|
||||||
|
|||||||
Reference in New Issue
Block a user