diff --git a/main.cpp b/main.cpp index 099ef01f..40397458 100644 --- a/main.cpp +++ b/main.cpp @@ -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; } diff --git a/src_main/io/pispi.cpp b/src_main/io/pispi.cpp index e75ce18a..d90a553a 100644 --- a/src_main/io/pispi.cpp +++ b/src_main/io/pispi.cpp @@ -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); diff --git a/src_main/io/pispi.h b/src_main/io/pispi.h index d6009921..005f1833 100644 --- a/src_main/io/pispi.h +++ b/src_main/io/pispi.h @@ -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();