git-svn-id: svn://db.shs.com.ru/pip@578 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user