git-svn-id: svn://db.shs.com.ru/pip@578 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5
This commit is contained in:
11
main.cpp
11
main.cpp
@@ -4,9 +4,10 @@
|
|||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
int main(int argc, char *argv[]) {
|
||||||
PICLI cli(argc, argv);
|
PICLI cli(argc, argv);
|
||||||
cli.setOptionalArgumentsCount(1);
|
cli.setOptionalArgumentsCount(2);
|
||||||
cli.addArgument("dev", true);
|
cli.addArgument("dev", true);
|
||||||
cli.addArgument("speed", true);
|
cli.addArgument("speed", true);
|
||||||
|
cli.addArgument("write", true);
|
||||||
if (!cli.hasArgument("dev")) {
|
if (!cli.hasArgument("dev")) {
|
||||||
piCout << "no device";
|
piCout << "no device";
|
||||||
return 0;
|
return 0;
|
||||||
@@ -15,13 +16,15 @@ int main(int argc, char *argv[]) {
|
|||||||
PISPI spi(path, 1000000);
|
PISPI spi(path, 1000000);
|
||||||
piCout << "SPI" << path;
|
piCout << "SPI" << path;
|
||||||
//spi.setDebug(true);
|
//spi.setDebug(true);
|
||||||
|
PIByteArray wba = PIByteArray::fromHex("0000000000000000000000000000000000000000000000000000000000000000");
|
||||||
if (cli.hasArgument("speed")) spi.setSpeed(cli.argumentValue("speed").toInt());
|
if (cli.hasArgument("speed")) spi.setSpeed(cli.argumentValue("speed").toInt());
|
||||||
|
if (cli.hasArgument("write")) wba = PIByteArray::fromHex(cli.argumentValue("write"));
|
||||||
piCout << "try opening..";
|
piCout << "try opening..";
|
||||||
bool ok = spi.open();
|
bool ok = spi.open();
|
||||||
piCout << "open" << ok;
|
piCout << "open" << ok;
|
||||||
int r = spi.write(PIByteArray::fromHex("0000000000000000000000000000000000000000000000000000000000000000"));
|
int r = spi.write(wba);
|
||||||
piCout << "write" << r;
|
piCout << "write" << r << wba.toHex();
|
||||||
PIByteArray ba = spi.readForTime(10);
|
PIByteArray ba = spi.readForTime(1);
|
||||||
piCout << "read" << ba.toHex();
|
piCout << "read" << ba.toHex();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,10 +19,11 @@ REGISTER_DEVICE(PISPI)
|
|||||||
|
|
||||||
|
|
||||||
PISPI::PISPI(const PIString & path, uint speed, PIIODevice::DeviceMode mode) : PIIODevice(path, mode) {
|
PISPI::PISPI(const PIString & path, uint speed, PIIODevice::DeviceMode mode) : PIIODevice(path, mode) {
|
||||||
|
setThreadedReadBufferSize(1024);
|
||||||
setPath(path);
|
setPath(path);
|
||||||
setSpeed(speed);
|
setSpeed(speed);
|
||||||
|
setBits(8);
|
||||||
spi_mode = 0;
|
spi_mode = 0;
|
||||||
spi_bits = 8;
|
|
||||||
#ifndef WINDOWS
|
#ifndef WINDOWS
|
||||||
PRIVATE->fd = 0;
|
PRIVATE->fd = 0;
|
||||||
#endif
|
#endif
|
||||||
@@ -34,19 +35,24 @@ void PISPI::setSpeed(uint speed_hz) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void PISPI::setBits(uchar bits) {
|
||||||
|
spi_bits = bits;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
bool PISPI::openDevice() {
|
bool PISPI::openDevice() {
|
||||||
#ifndef WINDOWS
|
#ifndef WINDOWS
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
piCoutObj << "open device" << path();
|
//piCoutObj << "open device" << path();
|
||||||
PRIVATE->fd = ::open(path().dataAscii(), O_RDWR);
|
PRIVATE->fd = ::open(path().dataAscii(), O_RDWR);
|
||||||
if (PRIVATE->fd < 0) {piCoutObj << "can't open device";return false;}
|
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);
|
ret = ioctl(PRIVATE->fd, SPI_IOC_WR_MODE, &spi_mode);
|
||||||
if (ret == -1) {piCoutObj << "can't set spi write mode";return false;}
|
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);
|
ret = ioctl(PRIVATE->fd, SPI_IOC_WR_BITS_PER_WORD, &spi_bits);
|
||||||
if (ret == -1) {piCoutObj << "can't set bits per word";return false;}
|
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);
|
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;}
|
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;
|
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);
|
memcpy(tx_buf.data(), data, max_size);
|
||||||
int ret;
|
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);
|
ret = ioctl(PRIVATE->fd, SPI_IOC_MESSAGE(1), &PRIVATE->spi_ioc_tr);
|
||||||
if (ret < 1) {piCoutObj << "can't send spi message" << ret; return -1;}
|
if (ret < 1) {piCoutObj << "can't send spi message" << ret; return -1;}
|
||||||
recv_buf.append(rx_buf);
|
recv_buf.append(rx_buf);
|
||||||
|
|||||||
@@ -12,6 +12,10 @@ public:
|
|||||||
~PISPI() {}
|
~PISPI() {}
|
||||||
|
|
||||||
void setSpeed(uint speed_hz);
|
void setSpeed(uint speed_hz);
|
||||||
|
uint speed() const {return spi_speed;}
|
||||||
|
|
||||||
|
void setBits(uchar bits = 8);
|
||||||
|
uchar bits() const {return spi_bits;}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
bool openDevice();
|
bool openDevice();
|
||||||
|
|||||||
Reference in New Issue
Block a user