From 95dd9d18e6d26d3155053c2f44baf00acd3db3ad Mon Sep 17 00:00:00 2001 From: Christoph Holzheuer Date: Tue, 13 Jan 2026 16:29:02 +0100 Subject: [PATCH] Added setFromDouble --- bcmainwindow.cpp | 2 +- bctransmitter.cpp | 5 +++-- bcvalue.cpp | 40 ++++++++++++++++++++++++++++++++++------ bcvalue.h | 4 ++-- 4 files changed, 40 insertions(+), 11 deletions(-) diff --git a/bcmainwindow.cpp b/bcmainwindow.cpp index 85ea2c6..3c1783d 100644 --- a/bcmainwindow.cpp +++ b/bcmainwindow.cpp @@ -341,7 +341,7 @@ void BCMainWindow::onSyncDeviceView() for( const BCValuePtr& value : currentList ) { // wir setzen auf 'lesen' - value->getValueFlags().setFlag( BCValue::Flag::ReadMe ); + value->setFlag( BCValue::Flag::ReadMe ); // statt '_transmitter.onUpdateValue( value )' müssen wir hier // über emit requestValueUpdate() zur Thread sysnchronisation diff --git a/bctransmitter.cpp b/bctransmitter.cpp index e2b92a7..2ad4d82 100644 --- a/bctransmitter.cpp +++ b/bctransmitter.cpp @@ -151,14 +151,15 @@ void BCTransmitter::onUpdateValue( BCValuePtrConst valuePtr) uint32_t newValue = value.getRawValue(); BCValue::Flag newState = BCValue::Flag::Failed; - if(value.getValueFlags().testFlag( BCValue::Flag::WriteMe ) ) + + if(value.testFlag( BCValue::Flag::WriteMe ) ) { } // oder sollen wir hier beides erlauben ? readFlag & writeFlag ? // Was kommt dann zuerst? Schreiben und lesen als verify ? - else if( value.getValueFlags().testFlag( BCValue::Flag::ReadMe ) ) + else if( value.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 ); diff --git a/bcvalue.cpp b/bcvalue.cpp index f2e5157..9668a85 100644 --- a/bcvalue.cpp +++ b/bcvalue.cpp @@ -63,19 +63,47 @@ bool BCValue::isReadOnly() const return _valueFlags.testFlag(BCValue::Flag::ReadOnly); } +bool BCValue::testFlag( BCValue::Flag flag ) const +{ + return _valueFlags.testFlag( flag ); +} + + +void BCValue::setFlag( BCValue::Flag flag, bool state) const +{ + _valueFlags.setFlag( flag, state ); +} + void BCValue::setFromDouble( double value ) { - if( _optMin.has_value() && _optMax.has_value() ) + //if( _isReadOnly) + switch(_valueType) { - double min = _optMin.value(); - double max = _optMax.value(); + // wir betrachten plain - value = qBound( min,value,max); + case ValueType::Bool : + _rawValue = value >0 ? 1 : 0; + break; + + case ValueType::Plain : + case ValueType::Number: + case ValueType::Float: + + if( _optMin.has_value() && _optMax.has_value() ) + { + + double min = _optMin.value(); + double max = _optMax.value(); + + value = qBound( min,value,max); + } + _rawValue = value / _factor; + + default : + break; } - _rawValue = value / _factor; - } diff --git a/bcvalue.h b/bcvalue.h index be573d5..48ffcf7 100644 --- a/bcvalue.h +++ b/bcvalue.h @@ -104,8 +104,8 @@ public: bool isWord() const; bool isReadOnly() const; - Flags& getValueFlags() const noexcept { return _valueFlags; } - void setValueFlags(Flags newFlags) { _valueFlags = newFlags; } + bool testFlag( Flag flag ) const; + void setFlag( Flag flag, bool state=true ) const; BCDevice::ID getDeviceID() const noexcept { return _deviceID; } BC::ID getRegisterID() const noexcept { return _registerID; }