diff --git a/canconnection.h b/canconnection.h index 57be38b..598d967 100644 --- a/canconnection.h +++ b/canconnection.h @@ -55,7 +55,13 @@ signals: void frameUpdate(int); void connectionSuccess(); void connectionFailure(); - void deviceInfo(int, int); //First param = driver version (or version of whatever you want), second param a status byte (listen only, single wire, etc) + void deviceInfo(int, int); //First param = driver version (or version of whatever you want), second param a status byte + + //bus number, bus speed, status (bit 0 = enabled, 1 = single wire, 2 = listen only) + //3 = Use value stored for enabled, 4 = use value passed for single wire, 5 = use value passed for listen only + //6 = use value passed for speed. This allows bus status to be updated but set that some things aren't really + //being passed. Just set for things that really are being updated. + void busStatus(int, int, int); public slots: virtual void run(); diff --git a/canconnectionmodel.cpp b/canconnectionmodel.cpp index 089bba0..8510f8d 100644 --- a/canconnectionmodel.cpp +++ b/canconnectionmodel.cpp @@ -7,6 +7,12 @@ CANConnectionModel::CANConnectionModel(QObject *parent) { } +void CANConnectionModel::refreshView() +{ + beginResetModel(); + endResetModel(); +} + QVariant CANConnectionModel::headerData(int section, Qt::Orientation orientation, int role) const { if (role != Qt::DisplayRole) diff --git a/canconnectionmodel.h b/canconnectionmodel.h index f6a183b..1e0410e 100644 --- a/canconnectionmodel.h +++ b/canconnectionmodel.h @@ -27,6 +27,7 @@ public: void addBus(CAN_Bus &bus); CAN_Bus* getBus(int bus); CANConnection* getConnection(int conn); + void refreshView(); private: QList connections; diff --git a/connectionwindow.cpp b/connectionwindow.cpp index be52a32..ea5dea5 100644 --- a/connectionwindow.cpp +++ b/connectionwindow.cpp @@ -89,6 +89,7 @@ void ConnectionWindow::handleOKButton() if (ui->rbGVRET->isChecked()) { SerialWorker *serial = new SerialWorker(canModel, connModel->rowCount()); + connect(serial, SIGNAL(busStatus(int,int,int)), this, SLOT(receiveBusStatus(int,int,int))); connModel->addConnection(serial); qDebug() << "Setup initial connection object"; @@ -136,40 +137,26 @@ void ConnectionWindow::handleOKButton() } } +} -/* - if (ui->rbGVRET->isChecked()) +void ConnectionWindow::receiveBusStatus(int bus, int speed, int status) +{ + qDebug() << "bus " << bus << " speed " << speed << " status " << status; + CAN_Bus *busRef = connModel->getBus(bus); + if (status & 40) busRef->setSpeed(speed); + if (status & 8) //update enabled status { - conn = "GVRET"; - connType = 0; - currentConnType = ConnectionType::GVRET_SERIAL; + busRef->setEnabled((status & 1)?true:false); } - - if (ui->rbKvaser->isChecked()) + if (status & 0x10) //update single wire status { - conn = "KVASER"; - connType = 1; - currentConnType = ConnectionType::KVASER; + busRef->setSingleWire((status & 2)?true:false); } - - if (ui->rbSocketCAN->isChecked()) + if (status & 0x20) //update listen only status { - conn = "SOCKETCAN"; - connType = 2; - currentConnType = ConnectionType::SOCKETCAN; + busRef->setListenOnly((status & 4)?true:false); } - - currentPortName = getPortName(); - currentSpeed1 = getSpeed(); - - settings->setValue("Main/DefaultConnectionPort", currentPortName); - settings->setValue("Main/DefaultConnectionType", connType); - settings->setValue("Main/SingleWireMode", ui->ckSingleWire->isChecked()); - - emit updateConnectionSettings(conn, getPortName(), getSpeed()); - - this->close(); -*/ + connModel->refreshView(); } void ConnectionWindow::handleConnSelectionChanged() diff --git a/connectionwindow.h b/connectionwindow.h index afa75e3..399c838 100644 --- a/connectionwindow.h +++ b/connectionwindow.h @@ -53,7 +53,7 @@ private slots: void handleConnSelectionChanged(); void handleRemoveConn(); void handleRevert(); - + void receiveBusStatus(int bus, int speed, int status); private: Ui::ConnectionWindow *ui; diff --git a/serialworker.cpp b/serialworker.cpp index 811dea7..a55f9d5 100644 --- a/serialworker.cpp +++ b/serialworker.cpp @@ -81,7 +81,6 @@ void SerialWorker::setSerialPort(QSerialPortInfo *port) serial = new QSerialPort(*port); qDebug() << "Serial port name is " << port->portName(); - //serial->setBaudRate(10000000); //more speed! probably does nothing for USB serial serial->setDataBits(serial->Data8); serial->setFlowControl(serial->HardwareControl); //this is important though if (!serial->open(QIODevice::ReadWrite)) @@ -414,6 +413,8 @@ void SerialWorker::procRXChar(unsigned char c) if (!can0Enabled) can0Baud = 0; isConnected = true; emit connectionSuccess(); + emit busStatus(busBase, can0Baud, can0Enabled?0x49:0x48); //say that we're updating baud rate and set enabled status + emit busStatus(busBase + 1, can1Baud, can1Enabled?0x49:0x48); break; } rx_step++;