diff --git a/SavvyCAN.pro b/SavvyCAN.pro index 64cbc55..bfdb709 100644 --- a/SavvyCAN.pro +++ b/SavvyCAN.pro @@ -21,6 +21,7 @@ ICON = icons/SavvyIcon.icns SOURCES += main.cpp\ canbridgewindow.cpp \ + connections/canlogserver.cpp \ connections/canserver.cpp \ connections/lawicel_serial.cpp \ connections/mqtt_bus.cpp \ @@ -104,6 +105,7 @@ HEADERS += mainwindow.h \ can_structs.h \ canbridgewindow.h \ canframemodel.h \ + connections/canlogserver.h \ connections/canserver.h \ connections/lawicel_serial.h \ connections/socketcand.h \ diff --git a/connections/canconconst.h b/connections/canconconst.h index 88fa31e..0f7ba9c 100644 --- a/connections/canconconst.h +++ b/connections/canconconst.h @@ -22,6 +22,7 @@ namespace CANCon { MQTT, LAWICEL, CANSERVER, + CANLOGSERVER, NONE }; } diff --git a/connections/canconfactory.cpp b/connections/canconfactory.cpp index 5fd3035..ae2bc6b 100644 --- a/connections/canconfactory.cpp +++ b/connections/canconfactory.cpp @@ -6,6 +6,7 @@ #include "socketcand.h" #include "lawicel_serial.h" #include "canserver.h" +#include "canlogserver.h" using namespace CANCon; @@ -29,6 +30,8 @@ CANConnection* CanConFactory::create(type pType, QString pPortName, QString pDri return new MQTT_BUS(pPortName); case CANSERVER: return new CANserver(pPortName); + case CANLOGSERVER: + return new CanLogServer(pPortName); default: {} } diff --git a/connections/canconnectionmodel.cpp b/connections/canconnectionmodel.cpp index b3a5e09..c014f55 100644 --- a/connections/canconnectionmodel.cpp +++ b/connections/canconnectionmodel.cpp @@ -88,6 +88,7 @@ QVariant CANConnectionModel::data(const QModelIndex &index, int role) const case CANCon::KAYAK: return "socketcand"; case CANCon::LAWICEL: return "LAWICEL"; case CANCon::CANSERVER: return "CANserver"; + case CANCon::CANLOGSERVER: return "CanLogServer"; default: {} } else qDebug() << "Tried to show connection type but connection was nullptr"; diff --git a/connections/canlogserver.cpp b/connections/canlogserver.cpp index 8ddc5b0..78a2bc5 100644 --- a/connections/canlogserver.cpp +++ b/connections/canlogserver.cpp @@ -9,7 +9,7 @@ #include "canlogserver.h" CanLogServer::CanLogServer(QString serverAddressString) : - CANConnection(serverAddressString, "CanLogserver", CANCon::CANLOGSERVER, 0, 0, 1, 4000, true), + CANConnection(serverAddressString, "CanLogserver", CANCon::CANLOGSERVER, 0, 0, false, 0, 1, 4000, true), m_ptcpSocket(new QTcpSocket(this)) { diff --git a/connections/newconnectiondialog.cpp b/connections/newconnectiondialog.cpp index a796b08..134e182 100644 --- a/connections/newconnectiondialog.cpp +++ b/connections/newconnectiondialog.cpp @@ -29,6 +29,7 @@ NewConnectionDialog::NewConnectionDialog(QVector* gvretips, QVectorrbMQTT, &QAbstractButton::clicked, this, &NewConnectionDialog::handleConnTypeChanged); connect(ui->rbLawicel, &QAbstractButton::clicked, this, &NewConnectionDialog::handleConnTypeChanged); connect(ui->rbCANserver, &QAbstractButton::clicked, this, &NewConnectionDialog::handleConnTypeChanged); + connect(ui->rbCanlogserver, &QAbstractButton::clicked, this, &NewConnectionDialog::handleConnTypeChanged); connect(ui->cbDeviceType, QOverload::of(&QComboBox::currentIndexChanged), this, &NewConnectionDialog::handleDeviceTypeChanged); connect(ui->btnOK, &QPushButton::clicked, this, &NewConnectionDialog::handleCreateButton); @@ -68,6 +69,7 @@ void NewConnectionDialog::handleConnTypeChanged() if (ui->rbKayak->isChecked()) selectKayak(); if (ui->rbMQTT->isChecked()) selectMQTT(); if (ui->rbCANserver->isChecked()) selectCANserver(); + if (ui->rbCanlogserver->isChecked()) selectCANlogserver(); } void NewConnectionDialog::handleDeviceTypeChanged() @@ -250,6 +252,23 @@ void NewConnectionDialog::selectCANserver() ui->cbPort->clear(); } +void NewConnectionDialog::selectCANlogserver() +{ + ui->lPort->setText("CANlogserver IP Address:"); + + ui->lblDeviceType->setHidden(true); + ui->cbDeviceType->setHidden(true); + ui->cbCANSpeed->setHidden(true); + ui->cbSerialSpeed->setHidden(true); + ui->lblCANSpeed->setHidden(true); + ui->lblSerialSpeed->setHidden(true); + ui->cbCanFd->setHidden(true); + ui->cbDataRate->setHidden(true); + ui->lblDataRate->setHidden(true); + + ui->cbPort->clear(); +} + void NewConnectionDialog::setPortName(CANCon::type pType, QString pPortName, QString pDriver) { @@ -276,6 +295,9 @@ void NewConnectionDialog::setPortName(CANCon::type pType, QString pPortName, QSt case CANCon::CANSERVER: ui->rbCANserver->setChecked(true); break; + case CANCon::CANLOGSERVER: + ui->rbCanlogserver->setChecked(true); + break; default: {} } @@ -320,6 +342,7 @@ void NewConnectionDialog::setPortName(CANCon::type pType, QString pPortName, QSt ui->cbPort->setCurrentText(pPortName); break; case CANCon::CANSERVER: + case CANCon::CANLOGSERVER: { ui->cbPort->setCurrentText(pPortName); break; @@ -340,6 +363,7 @@ QString NewConnectionDialog::getPortName() case CANCon::KAYAK: return ui->cbPort->currentText(); case CANCon::CANSERVER: + case CANCon::CANLOGSERVER: return ui->cbPort->currentText(); default: @@ -385,6 +409,7 @@ CANCon::type NewConnectionDialog::getConnectionType() if (ui->rbMQTT->isChecked()) return CANCon::MQTT; if (ui->rbLawicel->isChecked()) return CANCon::LAWICEL; if (ui->rbCANserver->isChecked()) return CANCon::CANSERVER; + if (ui->rbCanlogserver->isChecked()) return CANCon::CANLOGSERVER; qDebug() << "getConnectionType: error"; return CANCon::NONE; diff --git a/connections/newconnectiondialog.h b/connections/newconnectiondialog.h index e48636f..387a4fb 100644 --- a/connections/newconnectiondialog.h +++ b/connections/newconnectiondialog.h @@ -49,6 +49,7 @@ private: void selectMQTT(); void selectLawicel(); void selectCANserver(); + void selectCANlogserver(); bool isSerialBusAvailable(); void setPortName(CANCon::type pType, QString pPortName, QString pDriver); }; diff --git a/connections/serialbusconnection.cpp b/connections/serialbusconnection.cpp index 9f9be82..a5ec860 100644 --- a/connections/serialbusconnection.cpp +++ b/connections/serialbusconnection.cpp @@ -78,6 +78,8 @@ bool SerialBusConnection::piGetBusSettings(int pBusIdx, CANBus& pBus) void SerialBusConnection::piSetBusSettings(int pBusIdx, CANBus bus) { + quint32 sbusconfig = 0; + //CANConStatus stats; /* sanity checks */ if(0 != pBusIdx) @@ -106,6 +108,10 @@ void SerialBusConnection::piSetBusSettings(int pBusIdx, CANBus bus) mDev_p->setConfigurationParameter(QCanBusDevice::BitRateKey, bus.speed); mDev_p->setConfigurationParameter(QCanBusDevice::CanFdKey, bus.canFD); + if(bus.listenOnly) + sbusconfig |= EN_SILENT_MODE; + mDev_p->setConfigurationParameter(QCanBusDevice::UserKey, sbusconfig); + /* connect device */ if (!mDev_p->connectDevice()) { disconnectDevice(); diff --git a/connections/serialbusconnection.h b/connections/serialbusconnection.h index e430ebd..f65be43 100644 --- a/connections/serialbusconnection.h +++ b/connections/serialbusconnection.h @@ -7,6 +7,21 @@ #include #include +/* +QCanBusDevice::UserKey +0x00000001 - enable silent mode +0x00000002 - enable loopback mode +0x00000004 - disable auto retransmissions +0x00000008 - enable terminator +0x00000010 - enable automatic bus off recovery +*/ + +#define EN_SILENT_MODE 0x00000001 +#define EN_LOOPBACK_MODE 0x00000002 +#define DIS_AUTO_RETRANSMISSIONS 0x00000004 +#define EN_TERMINATOR 0x00000008 +#define EN_AUTOMATIC_BUSOFF_RECOVERY 0x00000010 + class SerialBusConnection : public CANConnection { Q_OBJECT diff --git a/ui/newconnectiondialog.ui b/ui/newconnectiondialog.ui index d03d701..e459583 100644 --- a/ui/newconnectiondialog.ui +++ b/ui/newconnectiondialog.ui @@ -78,6 +78,13 @@ + + + + CANlogserver + + +