spi: added spi mode to mraa
Signed-off-by: Kiveisha Yevgeniy <yevgeniy.kiveisha@intel.com>
This commit is contained in:
@@ -43,6 +43,16 @@ extern "C" {
|
||||
|
||||
#include "common.h"
|
||||
|
||||
/**
|
||||
* MRAA supported platform types
|
||||
*/
|
||||
typedef enum {
|
||||
MODE0 = 0, /**< CPOL = 0, CPHA = 0, Clock idle low, data is clocked in on rising edge, output data (change) on falling edge */
|
||||
MODE1 = 1, /**< CPOL = 0, CPHA = 1, Clock idle low, data is clocked in on falling edge, output data (change) on rising edge */
|
||||
MODE2 = 2, /**< CPOL = 1, CPHA = 0, Clock idle low, data is clocked in on falling edge, output data (change) on rising edge */
|
||||
MODE3 = 3, /**< CPOL = 1, CPHA = 1, Clock idle low, data is clocked in on rising, edge output data (change) on falling edge */
|
||||
} mraa_spi_mode_t;
|
||||
|
||||
/**
|
||||
* Opaque pointer definition to the internal struct _spi
|
||||
*/
|
||||
@@ -63,7 +73,7 @@ mraa_spi_context mraa_spi_init(int bus);
|
||||
* @param mode The SPI mode, See Linux spidev
|
||||
* @return Spi context or NULL
|
||||
*/
|
||||
mraa_result_t mraa_spi_mode(mraa_spi_context dev,unsigned short mode);
|
||||
mraa_result_t mraa_spi_mode(mraa_spi_context dev, mraa_spi_mode_t mode);
|
||||
|
||||
/** Set the SPI device operating clock frequency.
|
||||
*
|
||||
|
||||
@@ -57,7 +57,7 @@ class Spi {
|
||||
* @param mode the mode. See Linux spidev doc
|
||||
* @return Result of operation
|
||||
*/
|
||||
mraa_result_t mode(unsigned short mode) {
|
||||
mraa_result_t mode(mraa_spi_mode_t mode) {
|
||||
return mraa_spi_mode(m_spi, mode);
|
||||
}
|
||||
/**
|
||||
|
||||
@@ -78,9 +78,33 @@ mraa_spi_init(int bus)
|
||||
}
|
||||
|
||||
mraa_result_t
|
||||
mraa_spi_mode(mraa_spi_context dev, unsigned short mode)
|
||||
mraa_spi_mode(mraa_spi_context dev, mraa_spi_mode_t mode)
|
||||
{
|
||||
dev->mode = mode;
|
||||
uint8_t spi_mode = 0;
|
||||
switch (mode) {
|
||||
case MODE0:
|
||||
spi_mode = SPI_MODE_0;
|
||||
break;
|
||||
case MODE1:
|
||||
spi_mode = SPI_MODE_1;
|
||||
break;
|
||||
case MODE2:
|
||||
spi_mode = SPI_MODE_2;
|
||||
break;
|
||||
case MODE3:
|
||||
spi_mode = SPI_MODE_3;
|
||||
break;
|
||||
default:
|
||||
spi_mode = SPI_MODE_0;
|
||||
break;
|
||||
}
|
||||
|
||||
if (ioctl (dev->devfd, SPI_IOC_WR_MODE, &spi_mode) < 0) {
|
||||
fprintf(stderr, "Failed to set spi mode\n");
|
||||
return MRAA_ERROR_INVALID_RESOURCE;
|
||||
}
|
||||
|
||||
dev->mode = spi_mode;
|
||||
return MRAA_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user