diff options
Diffstat (limited to 'HAL-afb/HAL_MOST_UNICENS/ucs2-vol/src')
4 files changed, 45 insertions, 5 deletions
diff --git a/HAL-afb/HAL_MOST_UNICENS/ucs2-vol/src/device_container.cpp b/HAL-afb/HAL_MOST_UNICENS/ucs2-vol/src/device_container.cpp index 40177fc..4c99c89 100644 --- a/HAL-afb/HAL_MOST_UNICENS/ucs2-vol/src/device_container.cpp +++ b/HAL-afb/HAL_MOST_UNICENS/ucs2-vol/src/device_container.cpp @@ -164,3 +164,21 @@ void CDeviceContainer::RequestService(uint16_t timeout) } } } + +void CDeviceContainer::ChangeNodeAvailable(uint16_t address, bool available) +{ + uint16_t idx; + + for (idx = 0U; idx < this->_values_sz; idx++) + { + if (this->_values_pptr[idx]->GetAddress() == address) + { + this->_values_pptr[idx]->SetAvailable(available); + } + } + + if (available) + { + RequestService(DEVCONT_TIME_RETRIGGER); + } +} diff --git a/HAL-afb/HAL_MOST_UNICENS/ucs2-vol/src/device_value.cpp b/HAL-afb/HAL_MOST_UNICENS/ucs2-vol/src/device_value.cpp index 5a74354..b5f5679 100644 --- a/HAL-afb/HAL_MOST_UNICENS/ucs2-vol/src/device_value.cpp +++ b/HAL-afb/HAL_MOST_UNICENS/ucs2-vol/src/device_value.cpp @@ -35,6 +35,7 @@ CDeviceValue::CDeviceValue(uint16_t address, DeviceValueType type, uint16_t key) { this->_is_initial = true; + this->_is_available = false; this->_address = address; this->_target_value = 0x01u; this->_actual_value = 0x01u; @@ -85,7 +86,7 @@ void CDeviceValue::ApplyMostValue(uint8_t value, DeviceValueType type, uint8_t t // returns true if target is not actual value bool CDeviceValue::RequiresUpdate() { - if (this->_target_value != this->_actual_value) + if (this->_is_available && (this->_target_value != this->_actual_value)) { return true; } @@ -97,12 +98,15 @@ bool CDeviceValue::FireUpdateMessage(lib_most_volume_writei2c_cb_t writei2c_fptr lib_most_volume_writei2c_result_cb_t result_fptr, void *result_user_ptr) { - int ret; + int ret = -1; ApplyMostValue(this->_target_value, _type, _tx_payload); - ret = writei2c_fptr(this->_address, &_tx_payload[0], _tx_payload_sz, - result_fptr, - result_user_ptr); + if (this->_is_available) + { + ret = writei2c_fptr(this->_address, &_tx_payload[0], _tx_payload_sz, + result_fptr, + result_user_ptr); + } if (ret == 0) { diff --git a/HAL-afb/HAL_MOST_UNICENS/ucs2-vol/src/libmostvolume.cpp b/HAL-afb/HAL_MOST_UNICENS/ucs2-vol/src/libmostvolume.cpp index 72d2b04..5eea3fd 100644 --- a/HAL-afb/HAL_MOST_UNICENS/ucs2-vol/src/libmostvolume.cpp +++ b/HAL-afb/HAL_MOST_UNICENS/ucs2-vol/src/libmostvolume.cpp @@ -71,6 +71,19 @@ extern "C" uint8_t lib_most_volume_set(enum lib_most_volume_channel_t channel, u return success; } +extern uint8_t lib_most_volume_node_available(uint16_t address, uint8_t available) +{ + uint8_t success = 1U; + + if (_running) + { + CSetup::GetInstance()->SetNodeAvailable(address, available); + success = 0U; + } + + return success; +} + extern "C" uint8_t lib_most_volume_service(void) { uint8_t success = 1U; diff --git a/HAL-afb/HAL_MOST_UNICENS/ucs2-vol/src/setup.cpp b/HAL-afb/HAL_MOST_UNICENS/ucs2-vol/src/setup.cpp index 61b8a68..dd6675b 100644 --- a/HAL-afb/HAL_MOST_UNICENS/ucs2-vol/src/setup.cpp +++ b/HAL-afb/HAL_MOST_UNICENS/ucs2-vol/src/setup.cpp @@ -87,3 +87,8 @@ void CSetup::Update() { _value_container.Update(); } + +void CSetup::SetNodeAvailable(uint16_t address, bool available) +{ + _value_container.ChangeNodeAvailable(address, available); +} |