diff --git a/bc.h b/bc.h index 0bb7f58..75068c8 100644 --- a/bc.h +++ b/bc.h @@ -748,7 +748,7 @@ public: enum class ID : uint8_t { Invalid = 0, - Console = uint8_t( BC::ID::ID_Console_Slave ), + Console = static_cast( BC::ID::ID_Console_Slave ), Console_Master = uint8_t( BC::ID::ID_Console_Master), Battery = uint8_t( BC::ID::ID_Battery), Motor = uint8_t( BC::ID::ID_Motor ), diff --git a/bccandrivertinycan.cpp b/bccandrivertinycan.cpp index b19c07b..48ee2b8 100644 --- a/bccandrivertinycan.cpp +++ b/bccandrivertinycan.cpp @@ -116,7 +116,7 @@ uint BCCanDriverTinyCan::getValue(BCDevice::ID deviceID, BC::ID registerID ) con struct TCanMsg msg; uint32_t device = static_cast(deviceID); - uint32_t reg = static_cast(registerID); + uint8_t reg = static_cast (registerID); // msg verpacken msg.MsgFlags = 0L; @@ -128,9 +128,9 @@ uint BCCanDriverTinyCan::getValue(BCDevice::ID deviceID, BC::ID registerID ) con // msg verschicken ::CanTransmit( 0, &msg, 1 ); - int retries = _retries; + int retries = _retries; // 5? // _timeOuts (== 20) mal cTIMEOUT_MS (== 10 ms ) Versuche ... - int timeOuts = _timeOuts; + int timeOuts = _timeOuts; // 20 ? // ... warten bis der Sendepuffer leer ist while( timeOuts-- && ::CanTransmitGetCount( 0 ) ) @@ -170,7 +170,7 @@ retry: throw std::runtime_error( "CAN --response errror" ); return (unsigned int) msg.MsgData[3]; - +//das ist mist! } @@ -181,7 +181,7 @@ void BCCanDriverTinyCan::setValue(BCDevice::ID deviceID, BC::ID registerID, int qDebug() << "SaveItem( BCCanDriverTinyCan::CBCItem& item ): "; uint32_t device = static_cast(deviceID); - uint32_t reg = static_cast(registerID); + uint8_t reg = static_cast (registerID); struct TCanMsg msg; int timeout_count = cTIMEOUT_COUNT; diff --git a/bcitemdelegate.cpp b/bcitemdelegate.cpp index 5b9554d..2e463b7 100644 --- a/bcitemdelegate.cpp +++ b/bcitemdelegate.cpp @@ -27,9 +27,9 @@ BCItemDelegate::BCItemDelegate(QListView *view) QString BCItemDelegate::displayText(const QVariant& dataValue, const QLocale& locale) const { // Wir prüfen, ob im Variant unser Struct steckt - if (dataValue.canConvert()) + if (dataValue.canConvert()) { - BCValue bc = dataValue.value(); + BCValue& bc = *dataValue.value(); //qDebug() << " --- YES: " << bc.label; // Hier bauen wir den String zusammen, den man sieht, // wenn KEIN Editor offen ist. @@ -45,10 +45,10 @@ QString BCItemDelegate::displayText(const QVariant& dataValue, const QLocale& lo QWidget *BCItemDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const { QVariant rawData = index.data(Qt::EditRole); - if (!rawData.canConvert()) + if (!rawData.canConvert()) return QStyledItemDelegate::createEditor(parent, option, index); - BCValue bc = rawData.value(); + const BCValue& bc = *rawData.value(); // Nur bei Integern den Slider-Editor bauen if (bc.value.typeId() == QMetaType::Int) @@ -93,7 +93,7 @@ QWidget *BCItemDelegate::createEditor(QWidget *parent, const QStyleOptionViewIte void BCItemDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const { // Daten vom Model in den Editor laden - BCValue bc = index.data(Qt::EditRole).value(); + const BCValue& bc = *index.data(Qt::EditRole).value(); QSlider *slider = editor->findChild("slider"); QLabel *lblUnit = editor->findChild("lblUnit"); diff --git a/bctransmitter.cpp b/bctransmitter.cpp index 724f0db..bb5e8c2 100644 --- a/bctransmitter.cpp +++ b/bctransmitter.cpp @@ -94,7 +94,7 @@ void BCTransmitter::processValueOp( BC::OpID opID ) currentValue =_valueQueue.dequeue(); } // Mutex wird hier freigegeben! WICHTIG: Execute ohne Lock! - std::optional result; + std::optional result; /* if( opID == BC::OpID::ReadValue ) @@ -107,7 +107,7 @@ void BCTransmitter::processValueOp( BC::OpID opID ) } } -std::optional BCTransmitter::executeRead(const BCValue& value) +std::optional BCTransmitter::executeRead(const BCValue& value) { return 0; @@ -128,7 +128,7 @@ std::optional BCTransmitter::executeRead(const BCValue& value) } -std::optional BCTransmitter::executeWrite(const BCValue& value) +std::optional BCTransmitter::executeWrite(const BCValue& value) { } diff --git a/bctransmitter.h b/bctransmitter.h index ff06af8..a4cfbde 100644 --- a/bctransmitter.h +++ b/bctransmitter.h @@ -32,8 +32,8 @@ signals: private: - std::optional executeRead(const BCValue& value); - std::optional executeWrite(const BCValue& value); + std::optional executeRead(const BCValue& value); + std::optional executeWrite(const BCValue& value); using BCValueQueue = QQueue; diff --git a/bcvalue.cpp b/bcvalue.cpp index 38c1307..b021014 100644 --- a/bcvalue.cpp +++ b/bcvalue.cpp @@ -45,11 +45,12 @@ BCValueType::BCValueType( TypeID ID_, QString unitLabel_, optDouble factor_, opt ///------------------------------- +/* BCValue::BCValue() { } - +*/ BCValue::BCValue(const BCValueType& valueType_, BCDevice::ID deviceID_, BC::ID targetID_) : valueType{valueType_}, deviceID{deviceID_}, targetID{targetID_} diff --git a/bcvalue.h b/bcvalue.h index d08e4cd..6bc5fa5 100644 --- a/bcvalue.h +++ b/bcvalue.h @@ -53,6 +53,7 @@ - */ +using bcdata_t = uint32_t; class BCAbstractTransmitter { @@ -60,7 +61,7 @@ class BCAbstractTransmitter public: // - virtual uint32_t readValue( BCDevice::ID deviceID_, BC::ID targetID_ ) const = 0; + virtual bcdata_t readValue( BCDevice::ID deviceID_, BC::ID targetID_ ) const { return 0;}; ///virtual uint32_t readByte( BCDevice::ID deviceID_, BC::ID targetID_ ) const = 0; }; @@ -109,6 +110,7 @@ public: }; +// really needed? using BCValueTypeCRef = std::optional>; @@ -117,7 +119,7 @@ class BCValue public: - BCValue(); + //BCValue(); BCValue( const BCValueType& valueType_, BCDevice::ID deviceID_, BC::ID targetID_ ); void readRawValue( const BCAbstractTransmitter& transmitter ) const; @@ -140,7 +142,7 @@ public: }; -Q_DECLARE_METATYPE(BCValue) +Q_DECLARE_METATYPE(BCValue*) struct BCValueParams diff --git a/bcvaluemanager.cpp b/bcvaluemanager.cpp index b611e76..522f4a4 100644 --- a/bcvaluemanager.cpp +++ b/bcvaluemanager.cpp @@ -49,14 +49,12 @@ BCValueManager::BCValueManager(QObject *parent) { createValueTypes(); - qRegisterMetaType("BCValue"); + //qRegisterMetaType("BCValue*"); + qRegisterMetaType(); _transmitter.moveToThread(&_worker); - // 4. Verbindungen herstellen (Signal/Slot über Thread-Grenzen) - - // A) Befehl senden (Manager -> Runner) - connect(this, &BCValueManager::sendValueCommand, &_transmitter, &BCTransmitter::enqueueValueCommand); + connect(this, &BCValueManager::sendValueCommand, &_transmitter, &BCTransmitter::enqueueValueOp); // B) Ergebnisse empfangen (Runner -> Manager) //connect(&_transmitter, &BCTransmitter::commandFinished, this, &BCValueManager::onCommandFinished); @@ -156,7 +154,7 @@ void BCValueManager::onSyncFromDevice() // wir das eleganter über emit sendValueCommand() //_transmitter.enqueueValueCommand( value ); - emit sendValueCommand( BC::OpID::ReadValue, value); + emit sendValueCommand( BC::OpID::ReadValue, &value); emit valueTouched( value.rowInModel ); diff --git a/bcvaluemanager.h b/bcvaluemanager.h index 4c2ccdb..599f171 100644 --- a/bcvaluemanager.h +++ b/bcvaluemanager.h @@ -64,7 +64,7 @@ public slots: signals: // Internes Signal, um Daten an den Worker Thread zu senden - void sendValueCommand( BC::OpID, const BCValue& cmd); + void sendValueCommand( BC::OpID, const BCValue* cmd); //void valuedTouched(const BCValue& cmd); void valueTouched(int rowInModel ); diff --git a/doc/bigxionflasher-usb-src-0.2.4r97/BigXionFlasher.c b/doc/bigxionflasher-usb-src-0.2.4r97/BigXionFlasher.c index 089e574..90a9c9e 100644 --- a/doc/bigxionflasher-usb-src-0.2.4r97/BigXionFlasher.c +++ b/doc/bigxionflasher-usb-src-0.2.4r97/BigXionFlasher.c @@ -144,11 +144,13 @@ unsigned int getValue(unsigned char receipient, unsigned char reg) printf("error: could not send value to node %s" _NL, getNodeName(receipient)); retry: + timeout = TIMEOUT_VALUE; while(timeout-- && !CanReceiveGetCount(0)) usleep(TIMEOUT_US); - if (timeout == -1) { + if (timeout == -1) + { printf("error: no response from node %s" _NL, getNodeName(receipient)); return 0; }