aboutsummaryrefslogtreecommitdiffstats
path: root/HAL-afb/HAL_MOST_UNICENS/ucs2-vol/src
diff options
context:
space:
mode:
Diffstat (limited to 'HAL-afb/HAL_MOST_UNICENS/ucs2-vol/src')
-rw-r--r--HAL-afb/HAL_MOST_UNICENS/ucs2-vol/src/device_container.cpp18
-rw-r--r--HAL-afb/HAL_MOST_UNICENS/ucs2-vol/src/device_value.cpp14
-rw-r--r--HAL-afb/HAL_MOST_UNICENS/ucs2-vol/src/libmostvolume.cpp13
-rw-r--r--HAL-afb/HAL_MOST_UNICENS/ucs2-vol/src/setup.cpp5
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);
+}