git-svn-id: svn://db.shs.com.ru/pip@578 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5

This commit is contained in:
2017-12-07 08:55:43 +00:00
parent 79f9c853af
commit 603e19ae18
3 changed files with 23 additions and 10 deletions

View File

@@ -19,10 +19,11 @@ REGISTER_DEVICE(PISPI)
PISPI::PISPI(const PIString & path, uint speed, PIIODevice::DeviceMode mode) : PIIODevice(path, mode) {
setThreadedReadBufferSize(1024);
setPath(path);
setSpeed(speed);
setBits(8);
spi_mode = 0;
spi_bits = 8;
#ifndef WINDOWS
PRIVATE->fd = 0;
#endif
@@ -34,19 +35,24 @@ void PISPI::setSpeed(uint speed_hz) {
}
void PISPI::setBits(uchar bits) {
spi_bits = bits;
}
bool PISPI::openDevice() {
#ifndef WINDOWS
int ret = 0;
piCoutObj << "open device" << path();
//piCoutObj << "open device" << path();
PRIVATE->fd = ::open(path().dataAscii(), O_RDWR);
if (PRIVATE->fd < 0) {piCoutObj << "can't open device";return false;}
piCoutObj << "set mode" << spi_mode;
//piCoutObj << "set mode" << spi_mode;
ret = ioctl(PRIVATE->fd, SPI_IOC_WR_MODE, &spi_mode);
if (ret == -1) {piCoutObj << "can't set spi write mode";return false;}
piCoutObj << "set bits" << spi_bits;
//piCoutObj << "set bits" << spi_bits;
ret = ioctl(PRIVATE->fd, SPI_IOC_WR_BITS_PER_WORD, &spi_bits);
if (ret == -1) {piCoutObj << "can't set bits per word";return false;}
piCoutObj << "set speed" << spi_speed;
//piCoutObj << "set speed" << spi_speed;
ret = ioctl(PRIVATE->fd, SPI_IOC_WR_MAX_SPEED_HZ, &spi_speed);
if (ret == -1) {piCoutObj << "can't set max write speed hz";return false;}
piCoutObj << "SPI open" << path() << "speed:" << spi_speed/1000 << "KHz" << "mode" << spi_mode << "bits" << spi_bits;
@@ -89,7 +95,7 @@ int PISPI::writeDevice(const void * data, int max_size) {
}
memcpy(tx_buf.data(), data, max_size);
int ret;
piCoutObj << "write" << max_size << tx_buf.size();
//piCoutObj << "write" << max_size << tx_buf.size();
ret = ioctl(PRIVATE->fd, SPI_IOC_MESSAGE(1), &PRIVATE->spi_ioc_tr);
if (ret < 1) {piCoutObj << "can't send spi message" << ret; return -1;}
recv_buf.append(rx_buf);

View File

@@ -12,6 +12,10 @@ public:
~PISPI() {}
void setSpeed(uint speed_hz);
uint speed() const {return spi_speed;}
void setBits(uchar bits = 8);
uchar bits() const {return spi_bits;}
protected:
bool openDevice();