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

@@ -4,9 +4,10 @@
int main(int argc, char *argv[]) {
PICLI cli(argc, argv);
cli.setOptionalArgumentsCount(1);
cli.setOptionalArgumentsCount(2);
cli.addArgument("dev", true);
cli.addArgument("speed", true);
cli.addArgument("write", true);
if (!cli.hasArgument("dev")) {
piCout << "no device";
return 0;
@@ -15,13 +16,15 @@ int main(int argc, char *argv[]) {
PISPI spi(path, 1000000);
piCout << "SPI" << path;
//spi.setDebug(true);
PIByteArray wba = PIByteArray::fromHex("0000000000000000000000000000000000000000000000000000000000000000");
if (cli.hasArgument("speed")) spi.setSpeed(cli.argumentValue("speed").toInt());
if (cli.hasArgument("write")) wba = PIByteArray::fromHex(cli.argumentValue("write"));
piCout << "try opening..";
bool ok = spi.open();
piCout << "open" << ok;
int r = spi.write(PIByteArray::fromHex("0000000000000000000000000000000000000000000000000000000000000000"));
piCout << "write" << r;
PIByteArray ba = spi.readForTime(10);
int r = spi.write(wba);
piCout << "write" << r << wba.toHex();
PIByteArray ba = spi.readForTime(1);
piCout << "read" << ba.toHex();
return 0;
}

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();