From 6b92ce74d2661a56e93e66126829a7bcb9357532 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=91=D1=8B=D1=87=D0=BA=D0=BE=D0=B2=20=D0=90=D0=BD=D0=B4?= =?UTF-8?q?=D1=80=D0=B5=D0=B9?= Date: Thu, 7 Dec 2017 07:21:02 +0000 Subject: [PATCH] git-svn-id: svn://db.shs.com.ru/pip@572 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5 --- main.cpp | 1 + src_main/io/pispi.cpp | 8 +++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/main.cpp b/main.cpp index ad962c55..8f41dc46 100644 --- a/main.cpp +++ b/main.cpp @@ -13,6 +13,7 @@ int main(int argc, char *argv[]) { } PIString path = cli.argumentValue("dev"); PISPI spi(path, 1000000); + spi.setDebug(true); if (cli.hasArgument("speed")) spi.setSpeed(cli.argumentValue("speed").toInt()); piCout << "open" << spi.open(); piCout << "write" << spi.write(PIByteArray::fromHex("0000000000000000000000000000000000000000000000000000000000000000")); diff --git a/src_main/io/pispi.cpp b/src_main/io/pispi.cpp index 3cb2177f..7e95ef42 100644 --- a/src_main/io/pispi.cpp +++ b/src_main/io/pispi.cpp @@ -37,17 +37,21 @@ void PISPI::setSpeed(uint speed_hz) { bool PISPI::openDevice() { #ifndef WINDOWS int ret = 0; + 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; 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; 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; 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; PRIVATE->spi_ioc_tr.delay_usecs = 0; - PRIVATE->spi_ioc_tr.speed_hz = spi_speed; + PRIVATE->spi_ioc_tr.speed_hz = 0; PRIVATE->spi_ioc_tr.bits_per_word = spi_bits; return true; #else @@ -85,9 +89,11 @@ 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(); 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); + if (recv_buf.size() > threadedReadBufferSize()) recv_buf.resize(threadedReadBufferSize()); return max_size; } #endif