foreach (const QSerialPortInfo &info, BlinkyTape::findBlinkyTapeBootloaders()) { report.append(" " + info.portName() + "\r"); report.append(" Manufacturer: " + info.manufacturer() + "\r"); report.append(" Description: " + info.description() + "\r"); report.append(" VID: 0x" + QString::number(info.vendorIdentifier(),16) + "\r"); report.append(" PID: 0x" + QString::number(info.productIdentifier(),16) + "\r"); }
// Found the available ports, associated vendor id and product id foreach(const QSerialPortInfo &serialPortInfo, QSerialPortInfo::availablePorts()){ if(serialPortInfo.hasVendorIdentifier() && serialPortInfo.hasProductIdentifier()){ if(serialPortInfo.vendorIdentifier() == found_vendorID){ if(serialPortInfo.productIdentifier() == found_productID){ arm_portname = serialPortInfo.portName(); arm_port_is_available = true; } } } }
void StatusBar::setToolTip(const QSerialPort *port) { QSerialPortInfo info = QSerialPortInfo(*port); if (info.isValid()) { QString deviceInfo = QString("%1 %2\n%3:%4 " #if QT_VERSION < QT_VERSION_CHECK(5, 3, 0) ) #else "# %5") #endif .arg(info.manufacturer()) .arg(info.description()) .arg(info.vendorIdentifier()) .arg(info.productIdentifier()) #if QT_VERSION < QT_VERSION_CHECK(5, 3, 0) ; #else .arg(info.serialNumber());
int main(int argc, char *argv[]) { QCoreApplication app(argc, argv); // Get list of all serial ports QList<QSerialPortInfo> serialInfoList = QSerialPortInfo::availablePorts(); qDebug(); if (!serialInfoList.size() > 0) { qDebug() << "no serial ports found"; return app.exec(); } else { qDebug() << "List all serial ports"; qDebug() << "---------------------"; for (int i=0; i<serialInfoList.size(); i++) { QSerialPortInfo serialInfo = serialInfoList.at(i); qDebug() << "port: " << i; qDebug() << " name: " << serialInfo.portName(); qDebug() << " description: " << serialInfo.description(); qDebug() << " manufacturer: " << serialInfo.manufacturer(); //qDebug() << " serial Number: " << serialInfo.serialNumber(); if (serialInfo.hasVendorIdentifier()) { qDebug() << " vendorId: " << serialInfo.vendorIdentifier(); } if (serialInfo.hasProductIdentifier()) { qDebug() << " producId: " << serialInfo.productIdentifier(); } qDebug(); } } qDebug() << "opening panels controller"; QSerialPortInfo serialInfo = serialInfoList.at(0); bias::PanelsController pcontrol(serialInfo); bool isOpen = pcontrol.open(); if (!isOpen) { qDebug() << " unable to open device"; return app.exec(); } qDebug() << " device opened"; if (true) { qDebug() << " blink led"; pcontrol.blinkLED(); QThread::msleep(4000); } // Test allOn, allOff if (true) { for (int i=0; i<5; i++) { qDebug() << " all on"; pcontrol.allOn(); QThread::msleep(500); qDebug() << " all off"; pcontrol.allOff(); QThread::msleep(500); } } // Test setToGrayLevel if (true) { for (int i=0; i<2; i++) { for (int j=1; j<bias::PanelsController::NUM_GRAY_LEVEL; j++) { qDebug() << " set to gray level = " << j; pcontrol.setToGrayLevel(j); QThread::msleep(100); } for (int j=bias::PanelsController::NUM_GRAY_LEVEL-1; j>=0; j--) { qDebug() << " set to gray level = " << j; pcontrol.setToGrayLevel(j); QThread::msleep(100); } } } // Test setConfigID if (true) { int id = 1; qDebug() << " set config id = " << id; pcontrol.setConfigID(id); QThread::msleep(1000); } // Test setPatternID if (true) { int id = 1; qDebug() << " set pattern id = " << id; pcontrol.setPatternID(id); QThread::msleep(1000); } // Test start/stop if (true) { qDebug() << " start"; pcontrol.start(); QThread::msleep(5000); qDebug() << " stop"; pcontrol.stop(); QThread::msleep(1000); } // Test controller reset if (true) { qDebug() << " reset controller"; pcontrol.reset(true); qDebug() << " allOn"; pcontrol.allOn(); QThread::msleep(1000); qDebug() << " allOff"; pcontrol.allOff(); QThread::msleep(1000); } // Test show bus number if (true) { qDebug() << " show bus number"; pcontrol.showBusNumber(); QThread::msleep(1000); } // Test set position (not sure how this works??) if (false) { qDebug() << " test set position"; pcontrol.stop(); for (int i=0;i<100;i++) { qDebug() << " i = " << i; pcontrol.setPosition(i,0); pcontrol.start(); QThread::msleep(500); pcontrol.stop(); } pcontrol.stop(); } // Test set gainAndOffset if (true) { qDebug() << " test set gain and offset"; pcontrol.setPatternID(1); pcontrol.start(); pcontrol.setGainAndBias(0,0,0,0); qDebug() << " test x gain"; QThread::msleep(2000); pcontrol.setGainAndBias(10,0,0,0); QThread::msleep(2000); pcontrol.setGainAndBias(-10,0,0,0); QThread::msleep(2000); pcontrol.setGainAndBias(0,0,0,0); QThread::msleep(500); qDebug() << " test y gain"; pcontrol.setGainAndBias(0,0,10,0); QThread::msleep(2000); pcontrol.setGainAndBias(0,0,-10,0); QThread::msleep(2000); pcontrol.setGainAndBias(0,0,0,0); QThread::msleep(500); qDebug() << " test x offset"; pcontrol.setGainAndBias(0,10,0,0); QThread::msleep(2000); pcontrol.setGainAndBias(0,-10,0,0); QThread::msleep(2000); pcontrol.setGainAndBias(0,0,0,0); QThread::msleep(500); qDebug() << " test y offset"; pcontrol.setGainAndBias(0,0,0,10); QThread::msleep(2000); pcontrol.setGainAndBias(0,0,0,-10); QThread::msleep(2000); pcontrol.setGainAndBias(0,0,0,0); QThread::msleep(500); pcontrol.stop(); } // Test set offsets again if (true) { pcontrol.setPatternID(1); qDebug() << " testing y offset"; int8_t n = 30; for (int8_t i=0; i<n; i++) { pcontrol.stop(); pcontrol.setGainAndBias(0,0,0,i); pcontrol.start(); QThread::msleep(200); } for (int8_t i=n; i>-n; i--) { pcontrol.stop(); pcontrol.setGainAndBias(0,0,0,i); pcontrol.start(); QThread::msleep(200); } for (int8_t i=-n; i<1; i++) { pcontrol.stop(); pcontrol.setGainAndBias(0,0,0,i); pcontrol.start(); QThread::msleep(200); } pcontrol.stop(); } pcontrol.close(); qDebug() << "Press Ctl-C to exit"; return app.exec(); }
bool BlinkyPendantUploader::startUpload(BlinkyController &controller, QList<PatternWriter> &patternWriters) { // TODO: push the image conversions into here so they are less awkward. #define PIXEL_COUNT 10 // Probe for the blinkypendant version // TODO: Update the firmware first! QSerialPortInfo portInfo; if (!controller.getPortInfo(portInfo)) { errorString = "Couln't get port information!"; return false; } int version = getVersionForDevice(portInfo.vendorIdentifier(), portInfo.productIdentifier()); QByteArray data; if (version == BLINKY_PENDANT_VERSION_1) { qDebug() << "Using version 1 upload mechanism, please update firmware!"; // Make sure we have an image compatible with the BlinkyPendant if (patternWriters.front().getLedCount() != 10) { errorString = "Wrong pattern size- must be 10 pixels high!"; return false; } if (patternWriters.front().getEncoding() != PatternWriter::RGB24) { errorString = "Wrong encoding type- must be RGB24!"; return false; } if(patternWriters.front().getFrameCount() > 255) { errorString = "Pattern too long, must be < 256 frames"; return false; } // Create the data structure to write to the device memory data.append((char)0x13); // header data.append((char)0x37); data.append((char)patternWriters.front().getFrameCount()); // frame count data += patternWriters.front().getData(); // image data (RGB24, uncompressed) } else { // Create the data structure to write to the device memory // Animation table QByteArray patternData; data.append((char)0x31); // header data.append((char)0x23); data.append((char)patternWriters.size()); // Number of patterns in the table data.append((char)PIXEL_COUNT); // Number of LEDs in the pattern foreach (PatternWriter pattern, patternWriters) { // Make sure we have an image compatible with the BlinkyPendant if (pattern.getLedCount() != 10) { errorString = "Wrong pattern size- must be 10 pixels high!"; return false; } if (pattern.getEncoding() != PatternWriter::RGB24) { errorString = "Wrong encoding type- must be RGB24!"; return false; } if(pattern.getFrameCount() > 65535) { errorString = "Pattern too long, must be < 65535 frames"; return false; } // Animation entry data.append((char)0); // Encoding type (1 byte) (RGB24, uncompressed) (TODO) data += encodeInt(patternData.length()); // Data offset (4 bytes) data += encodeWord(pattern.getFrameCount()); // Frame count (2 bytes) data += encodeWord(0); // Frame delay (2 bytes) TODO // Make sure we have an image compatible with the BlinkyPendant patternData += pattern.getData(); // image data (RGB24, uncompressed) } data += patternData; } // TODO: Check if the data can fit in the device memory // Set up the commandQueue using the serial descriptor, and close the tape connection controller.close(); commandQueue.open(portInfo); setProgress(0); // Queue the following commands: // 1. start write commandQueue.enqueue(BlinkyPendantCommands::startWrite()); // 2-n. write data (aligned to 1024-byte sectors, 64 bytes at a time) commandQueue.enqueue(BlinkyPendantCommands::writeData(data)); // n+1 stop write commandQueue.enqueue(BlinkyPendantCommands::stopWrite()); return true; }