From c819459d19afd7da035746d38fb08bdfd8731a9a Mon Sep 17 00:00:00 2001 From: Collin Kidder Date: Sun, 26 Nov 2017 16:41:10 -0500 Subject: [PATCH] Significant changes to GVRET code to make debugging easier and to make code more robust. --- config.h | 2 +- connections/connectionwindow.cpp | 24 ++++----- connections/gvretserial.cpp | 86 +++++++++++++++++++------------- connections/gvretserial.h | 1 + 4 files changed, 64 insertions(+), 49 deletions(-) diff --git a/config.h b/config.h index 6dfdecb..a7ebdb6 100644 --- a/config.h +++ b/config.h @@ -1,7 +1,7 @@ #ifndef CONFIG #define CONFIG -#define VERSION 180 +#define VERSION 181 //try to keep this in sync. //SavvyCAN will complain if you connect a GVRET board with a revision diff --git a/connections/connectionwindow.cpp b/connections/connectionwindow.cpp index 29f4011..6e9bd69 100644 --- a/connections/connectionwindow.cpp +++ b/connections/connectionwindow.cpp @@ -164,25 +164,24 @@ void ConnectionWindow::handleReconnect() } void ConnectionWindow::consoleEnableChanged(bool checked) { - int busId; - - CANConnection* conn_p = connModel->getAtIdx(ui->tableConnections->currentIndex().row(), busId); - ui->textConsole->setEnabled(checked); ui->btnClearDebug->setEnabled(checked); ui->btnSendHex->setEnabled(checked); ui->btnSendText->setEnabled(checked); ui->lineSend->setEnabled(checked); - if(!conn_p) return; + QList& conns = CANConManager::getInstance()->getConnections(); - if (checked) { //enable console - connect(conn_p, SIGNAL(debugOutput(QString)), this, SLOT(getDebugText(QString))); - connect(this, SIGNAL(sendDebugData(QByteArray)), conn_p, SLOT(debugInput(QByteArray))); - } - else { //turn it off - disconnect(conn_p, SIGNAL(debugOutput(QString)), 0, 0); - disconnect(this, SIGNAL(sendDebugData(QByteArray)), conn_p, SLOT(debugInput(QByteArray))); + foreach(CANConnection* conn_p, conns) + { + if (checked) { //enable console + connect(conn_p, SIGNAL(debugOutput(QString)), this, SLOT(getDebugText(QString))); + connect(this, SIGNAL(sendDebugData(QByteArray)), conn_p, SLOT(debugInput(QByteArray))); + } + else { //turn it off + disconnect(conn_p, SIGNAL(debugOutput(QString)), 0, 0); + disconnect(this, SIGNAL(sendDebugData(QByteArray)), conn_p, SLOT(debugInput(QByteArray))); + } } } @@ -233,6 +232,7 @@ void ConnectionWindow::handleOKButton() return; /* add connection to model */ connModel->add(conn_p); + consoleEnableChanged(ui->ckEnableConsole->isChecked()); } } diff --git a/connections/gvretserial.cpp b/connections/gvretserial.cpp index c5c334a..0bc861c 100644 --- a/connections/gvretserial.cpp +++ b/connections/gvretserial.cpp @@ -35,6 +35,29 @@ GVRetSerial::~GVRetSerial() debugOutput("~GVRetSerial()"); } +void GVRetSerial::sendToSerial(const QByteArray &bytes) +{ + if (serial == NULL) + { + debugOutput("Attempt to write to serial port when it has not been initialized!"); + return; + } + if (!serial->isOpen()) + { + debugOutput("Attempt to write to serial port when it is not open!"); + return; + } + + QString buildDebug; + buildDebug = "Write to serial -> "; + foreach (int byt, bytes) { + byt = (unsigned char)byt; + buildDebug = buildDebug % QString::number(byt, 16) % " "; + } + debugOutput(buildDebug); + + serial->write(bytes); +} void GVRetSerial::piStarted() { @@ -161,9 +184,7 @@ void GVRetSerial::piSetBusSettings(int pBusIdx, CANBus bus) buffer[8] = (unsigned char)(can1Baud >> 16); buffer[9] = (unsigned char)(can1Baud >> 24); buffer[10] = 0; - if (serial == NULL) return; - if (!serial->isOpen()) return; - serial->write(buffer); + sendToSerial(buffer); } else { @@ -186,9 +207,7 @@ void GVRetSerial::piSetBusSettings(int pBusIdx, CANBus bus) buffer[12] = (unsigned char)(lin2Baud >> 16); buffer[13] = (unsigned char)(lin2Baud >> 24); buffer[14] = 0; - if (serial == NULL) return; - if (!serial->isOpen()) return; - serial->write(buffer); + sendToSerial(buffer); } } @@ -210,7 +229,7 @@ bool GVRetSerial::piSendFrame(const CANFrame& frame) ID = frame.ID; if (frame.extended) ID |= 1 << 31; - buffer[0] = (char)0xF1; //start of a command over serial + buffer[0] = (unsigned char)0xF1; //start of a command over serial buffer[1] = 0; //command ID for sending a CANBUS frame buffer[2] = (unsigned char)(ID & 0xFF); //four bytes of ID LSB first buffer[3] = (unsigned char)(ID >> 8); @@ -224,9 +243,7 @@ bool GVRetSerial::piSendFrame(const CANFrame& frame) } buffer[8 + frame.len] = 0; - //qDebug() << "writing " << buffer.length() << " bytes to serial port"; - debugOutput("writing " + QString::number(buffer.length()) + " bytes to serial port"); - serial->write(buffer); + sendToSerial(buffer); return true; } @@ -262,6 +279,7 @@ void GVRetSerial::connectDevice() debugOutput("can't open serial port " + getPort()); return; } + debugOutput("Created Serial Port Object"); /* configure */ serial->setDataBits(serial->Data8); @@ -273,20 +291,22 @@ void GVRetSerial::connectDevice() serial->setDataTerminalReady(true); //you do need to set these or the fan gets dirty serial->setRequestToSend(true); + debugOutput("Opened Serial Port"); + QByteArray output; - output.append((char)0xE7); //this puts the device into binary comm mode - output.append((char)0xE7); + output.append((unsigned char)0xE7); //this puts the device into binary comm mode + output.append((unsigned char)0xE7); - output.append((char)0xF1); - output.append((char)0x0C); //get number of actually implemented buses. Not implemented except on M2RET + output.append((unsigned char)0xF1); + output.append((unsigned char)0x0C); //get number of actually implemented buses. Not implemented except on M2RET mNumBuses = 2; //the proper number if C/12 is not implemented - output.append((char)0xF1); //signal we want to issue a command - output.append((char)0x06); //request canbus stats from the board + output.append((unsigned char)0xF1); //signal we want to issue a command + output.append((unsigned char)0x06); //request canbus stats from the board - output.append((char)0xF1); //another command to the GVRET - output.append((char)0x07); //request device information + output.append((unsigned char)0xF1); //another command to the GVRET + output.append((unsigned char)0x07); //request device information /*output.append((char)0xF1); output.append((char)0x08); //setting singlewire mode @@ -299,21 +319,15 @@ void GVRetSerial::connectDevice() output.append((char)0xFF); //signal we don't want single wire mode }*/ - output.append((char)0xF1); //and another command - output.append((char)0x01); //Time Sync - Not implemented until 333 but we can try + output.append((unsigned char)0xF1); //and another command + output.append((unsigned char)0x01); //Time Sync - Not implemented until 333 but we can try - output.append((char)0xF1); //yet another command - output.append((char)0x09); //comm validation command + output.append((unsigned char)0xF1); //yet another command + output.append((unsigned char)0x09); //comm validation command continuousTimeSync = true; - serial->write(output); - QString buildDebug; - buildDebug = "Write to serial -> "; - foreach (int byt, output) { - buildDebug = buildDebug % QString::number(byt, 16) % " "; - } - debugOutput(buildDebug); + sendToSerial(output); if(doValidation) { QTimer::singleShot(1000, this, SLOT(connectionTimeout())); @@ -457,7 +471,7 @@ void GVRetSerial::readSerialData() //Debugging data sent from connection window. Inject it into Comm traffic. void GVRetSerial::debugInput(QByteArray bytes) { - serial->write(bytes); + sendToSerial(bytes); } void GVRetSerial::procRXChar(unsigned char c) @@ -766,9 +780,9 @@ void GVRetSerial::procRXChar(unsigned char c) } } - output.append((char)0xF1); //start a new command - output.append((char)13); //get extended buses - serial->write(output); + output.append((unsigned char)0xF1); //start a new command + output.append((unsigned char)13); //get extended buses + sendToSerial(output); emit status(stats); break; @@ -888,10 +902,10 @@ void GVRetSerial::sendCommValidation() QByteArray output; gotValidated = false; - output.append((char)0xF1); //another command to the GVRET - output.append((char)0x09); //request a reply to get validation + output.append((unsigned char)0xF1); //another command to the GVRET + output.append((unsigned char)0x09); //request a reply to get validation - serial->write(output); + sendToSerial(output); } diff --git a/connections/gvretserial.h b/connections/gvretserial.h index 63e7f9f..345d0d8 100644 --- a/connections/gvretserial.h +++ b/connections/gvretserial.h @@ -70,6 +70,7 @@ private: void procRXChar(unsigned char); void sendCommValidation(); void rebuildLocalTimeBasis(); + void sendToSerial(const QByteArray &bytes); protected: QTimer mTimer;