Updated ValueHandling.

This commit is contained in:
Christoph Holzheuer
2026-01-07 17:13:35 +01:00
parent 7d43b0a694
commit 3bdc491830
17 changed files with 152 additions and 150 deletions

View File

@@ -31,7 +31,7 @@
#include <QThread>
#include <QDebug>
#include <//qDebug>
#include <QCoreApplication>
#include <bctransmitter.h>
@@ -56,7 +56,7 @@ BCTransmitter::BCTransmitter(QObject *parent)
void BCTransmitter::onToggleDriverConnection( bool connect )
{
qDebug() << " --- onToggleDriverConnection: " << connect;
//qDebug() << " --- onToggleDriverConnection: " << connect;
emit driverStateChanged(BCDriver::DriverState::Initialized, "BUSY!");
bc::delay_millis(350);
// kill all pending stuff
@@ -103,13 +103,13 @@ void BCTransmitter::connectCanDriver()
if( hwVersion.has_value() )
{
message = " ---- HAIL to the king!";
qDebug() << message;
//qDebug() << message;
// swap driver
_canDriver = &_tinyCanDriver;
}
else
{
qDebug() << "Console not responding";
//qDebug() << "Console not responding";
}
}
else
@@ -144,7 +144,7 @@ void BCTransmitter::onUpdateValue( BCValuePtrConst valuePtr)
// der aktuelle Auftragsblock abgearbeit wurde.
_valueQueue.enqueue( valuePtr );
qDebug() << " # #### ENQ: " <<_valueQueue.size();
//qDebug() << " # #### ENQ: " <<_valueQueue.size();
// Wir schicken den event gleich wieder weiter ...
QMetaObject::invokeMethod(this, "onProcessValue", Qt::QueuedConnection);
@@ -160,12 +160,12 @@ void BCTransmitter::onProcessValue()
if (_valueQueue.isEmpty())
{
//_isBusy = false;
qDebug() << " --- XXXXXXXXXX Warum so oft?";
//qDebug() << " --- XXXXXXXXXX Warum so oft?";
emit valueQueueEmpty();
break; // Schleife verlassen, warten auf neue Events
}
valuePtr =_valueQueue.dequeue();
qDebug() << " # #### DEQ: " <<_valueQueue.size();
//qDebug() << " # #### DEQ: " <<_valueQueue.size();
} // Mutex wird hier freigegeben! WICHTIG: Execute ohne Lock!
// Kosmetik
@@ -174,19 +174,20 @@ void BCTransmitter::onProcessValue()
// Kosmetik
//const BCValue& value = *(valuePtr.get());
qDebug() << "------- DE.-.QUEUE: " << QThread::currentThreadId() << ": " << value.label;
//qDebug() << "------- DE.-.QUEUE: " << QThread::currentThreadId() << ": " << value.label;
// Value ist 'under construction'
//emit valueUpdated( value.deviceID, value.indexRow, BCValue::State::Locked );
//emit valueUpdated( value.deviceID, value.indexRow, BCValue::Flag::Locked );
uint32_t devID = static_cast<uint32_t>(value.deviceID);
uint8_t regID = static_cast<uint8_t> (value.registerID);
QString newVisibleValue;
BCValue::State newState = BCValue::State::NoState;
// Für den Fehlerfall: Wir senden den alten Wert einfach zurück
uint32_t newValue = value.rawUIntValue;
BCValue::Flag newState = BCValue::Flag::Failed;;
if(value.state.testFlag( BCValue::State::WriteMe ) )
if(value.flags.testFlag( BCValue::Flag::WriteMe ) )
{
@@ -194,23 +195,18 @@ void BCTransmitter::onProcessValue()
// oder sollen wir hier beides erlauben ? readFlag & writeFlag ?
// Was kommt dann zuerst? Schreiben und lesen als verify ?
else if( value.state.testFlag( BCValue::State::ReadMe ) )
else if( value.flags.testFlag( BCValue::Flag::ReadMe ) )
{
// wir sind hier im anderen thread! nicht einfach so reinschreiben, nur lesen
TransmitResult result = value.isWord ? readWordValue( devID, regID ) : readByteValue( devID, regID );
TransmitResult result = value.isWord() ? readWordValue( devID, regID ) : readByteValue( devID, regID );
if( result.has_value() )
{
// quark! das gehört hier nicht hin!
newVisibleValue = value.formatValues( result.value() );
newState = BCValue::State::InSync;
}
else
{
newState = BCValue::State::Failed;
newState = BCValue::Flag::InSync;
newValue = result.value();
}
}
emit valueUpdated( value.deviceID, value.indexRow, newState, newVisibleValue );
emit valueUpdated( value.deviceID, value.indexRow, newState, newValue );
// __fix
//bc::processEventsFor(150);
@@ -223,7 +219,7 @@ void BCTransmitter::onProcessValue()
TransmitResult BCTransmitter::readByteValue( uint32_t deviceID, uint8_t registerID )
{
//qDebug() << " --- YES: Read ByteValue: " << registerID;
////qDebug() << " --- YES: Read ByteValue: " << registerID;
// Wir lesen nur ein Byte und gut.
return _canDriver->readRawByte( deviceID, registerID );
}
@@ -231,7 +227,7 @@ TransmitResult BCTransmitter::readByteValue( uint32_t deviceID, uint8_t register
TransmitResult BCTransmitter::readWordValue( uint32_t deviceID, uint8_t registerID )
{
//qDebug() << " --- YES: Read WordValue: " << registerID;
////qDebug() << " --- YES: Read WordValue: " << registerID;
uint32_t result{};
// hi byte Leseversuch.