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[]) {
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -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