@ -43,6 +43,7 @@
@@ -43,6 +43,7 @@
# include <fcntl.h>
# include <unistd.h>
# include <sys/ioctl.h>
# include "dev_fs_lib_spi.h"
# include <px4_platform_common/px4_config.h>
@ -79,7 +80,7 @@ SPI::init()
@@ -79,7 +80,7 @@ SPI::init()
{
// Open the actual SPI device
char dev_path [ 16 ] ;
snprintf ( dev_path , sizeof ( dev_path ) , " dev/spi- %lu" , PX4_SPI_DEV_ID ( _device ) ) ;
snprintf ( dev_path , sizeof ( dev_path ) , DEV_FS_SPI_DEVICE_TYPE_STRING " %lu " , PX4_SPI_DEV_ID ( _device ) ) ;
DEVICE_DEBUG ( " %s " , dev_path ) ;
_fd = : : open ( dev_path , O_RDWR ) ;
@ -117,7 +118,29 @@ SPI::transfer(uint8_t *send, uint8_t *recv, unsigned len)
@@ -117,7 +118,29 @@ SPI::transfer(uint8_t *send, uint8_t *recv, unsigned len)
return - EINVAL ;
}
// set bus frequency
dspal_spi_ioctl_set_bus_frequency bus_freq { } ;
bus_freq . bus_frequency_in_hz = _frequency ;
if ( : : ioctl ( _fd , SPI_IOCTL_SET_BUS_FREQUENCY_IN_HZ , & bus_freq ) < 0 ) {
PX4_ERR ( " setting bus frequency failed " ) ;
return PX4_ERROR ;
}
// set bus mode
// dspal_spi_ioctl_set_spi_mode bus_mode{};
// bus_mode.eClockPolarity = SPI_CLOCK_IDLE_HIGH;
// bus_mode.eShiftMode = SPI_OUTPUT_FIRST;
// if (::ioctl(spi_fildes, SPI_IOCTL_SET_SPI_MODE, &bus_mode) < 0) {
// PX4_ERR("setting mode failed");
// return PX4_ERROR;
// }
// transfer data
dspal_spi_ioctl_read_write ioctl_write_read { } ;
ioctl_write_read . read_buffer = send ;
ioctl_write_read . read_buffer_length = len ;
ioctl_write_read . write_buffer = recv ;
@ -127,10 +150,10 @@ SPI::transfer(uint8_t *send, uint8_t *recv, unsigned len)
@@ -127,10 +150,10 @@ SPI::transfer(uint8_t *send, uint8_t *recv, unsigned len)
if ( result < 0 ) {
PX4_ERR ( " transfer error %d " , result ) ;
return result ;
return PX4_ERROR ;
}
return result ;
return PX4_OK ;
}
int
@ -140,15 +163,28 @@ SPI::transferhword(uint16_t *send, uint16_t *recv, unsigned len)
@@ -140,15 +163,28 @@ SPI::transferhword(uint16_t *send, uint16_t *recv, unsigned len)
return - EINVAL ;
}
// int bits = 16;
// result = ::ioctl(_fd, SPI_IOC_WR_BITS_PER_WORD, &bits);
// set bus frequency
dspal_spi_ioctl_set_bus_frequency bus_freq { } ;
bus_freq . bus_frequency_in_hz = _frequency ;
if ( : : ioctl ( _fd , SPI_IOCTL_SET_BUS_FREQUENCY_IN_HZ , & bus_freq ) < 0 ) {
PX4_ERR ( " setting bus frequency failed " ) ;
return PX4_ERROR ;
}
// set bus mode
// dspal_spi_ioctl_set_spi_mode bus_mode{};
// bus_mode.eClockPolarity = SPI_CLOCK_IDLE_HIGH;
// bus_mode.eShiftMode = SPI_OUTPUT_FIRST;
// if (result == -1) {
// PX4_ERR("can’t set 16 bit spi mode");
// if (::ioctl(spi_fildes, SPI_IOCTL_SET_SPI_MODE, &bus_mode) < 0 ) {
// PX4_ERR("setting mode failed ");
// return PX4_ERROR;
// }
// transfer data
dspal_spi_ioctl_read_write ioctl_write_read { } ;
ioctl_write_read . read_buffer = send ;
ioctl_write_read . read_buffer_length = len * 2 ;
ioctl_write_read . write_buffer = recv ;
@ -158,10 +194,10 @@ SPI::transferhword(uint16_t *send, uint16_t *recv, unsigned len)
@@ -158,10 +194,10 @@ SPI::transferhword(uint16_t *send, uint16_t *recv, unsigned len)
if ( result < 0 ) {
PX4_ERR ( " transfer error %d " , result ) ;
return result ;
return PX4_ERROR ;
}
return result ;
return PX4_OK ;
}
} // namespace device