summaryrefslogtreecommitdiffstats
path: root/plugin/ucs2-vol
diff options
context:
space:
mode:
authorTobias Jahnke <tobias.jahnke@microchip.com>2018-10-15 14:22:58 +0200
committerTobias Jahnke <tobias.jahnke@microchip.com>2018-12-18 13:01:13 +0100
commit2fac61e232dbdc5135345a07b19a66a5ebb2a015 (patch)
tree80d00b70d6adfa38a24829908f48fa8ad08df161 /plugin/ucs2-vol
parent3798969ce5771058d9526e2b3cbfec2c74e23fed (diff)
4a-hal-unicens: prepare support for Fiberdyne Amp
Bug-AGL: SPEC-1758 - updated VolumeLib to support ctrl messages - added master volume setup for amplifier node - known issue: message transmission is commented out due to wrap_json issue Signed-off-by: Tobias Jahnke <tobias.jahnke@microchip.com>
Diffstat (limited to 'plugin/ucs2-vol')
-rw-r--r--plugin/ucs2-vol/inc/device_value.h9
-rw-r--r--plugin/ucs2-vol/inc/libmostvolume.h3
-rw-r--r--plugin/ucs2-vol/inc/setup.h2
-rw-r--r--plugin/ucs2-vol/src/device_container.cpp23
-rw-r--r--plugin/ucs2-vol/src/device_value.cpp31
-rw-r--r--plugin/ucs2-vol/src/setup.cpp26
6 files changed, 69 insertions, 25 deletions
diff --git a/plugin/ucs2-vol/inc/device_value.h b/plugin/ucs2-vol/inc/device_value.h
index fe6d3a5..ef57003 100644
--- a/plugin/ucs2-vol/inc/device_value.h
+++ b/plugin/ucs2-vol/inc/device_value.h
@@ -53,13 +53,14 @@ struct STxMessage {
enum DeviceValueType {
DEVICE_VAL_MASTER = 0,
DEVICE_VAL_LEFT = 1,
- DEVICE_VAL_RIGHT = 2
+ DEVICE_VAL_RIGHT = 2,
+ DEVICE_VAL_FIBERDYNE_MASTER = 3
};
class CDeviceValue {
public:
- CDeviceValue(uint16_t address, DeviceValueType type, uint16_t key);
+ CDeviceValue(uint16_t address, DeviceValueType type, uint16_t key, bool is_i2c);
virtual ~CDeviceValue();
uint16_t GetKey(){return _key;}
@@ -72,7 +73,8 @@ public:
bool FireUpdateMessage(lib_most_volume_writei2c_cb_t writei2c_fptr,
lib_most_volume_writei2c_result_cb_t result_fptr,
void *result_user_ptr);// fires message & updates actual value
-
+ bool FireControlMessage(lib_most_volume_sendmessage_cb_t sendmsg_fptr);
+
void SetAvailable(bool active){this->_is_available = active; _actual_value = 0x01u;}
bool IsAvailable() {return this->_is_available;}
uint16_t GetAddress() {return this->_address;}
@@ -84,6 +86,7 @@ private:
bool _is_available; // related node is available
bool _is_busy; // do not update while busy
+ bool _is_i2c;
DeviceValueType _type; // determines the remote i2c command
uint16_t _key; // lookup key
uint16_t _address; // target node/group address
diff --git a/plugin/ucs2-vol/inc/libmostvolume.h b/plugin/ucs2-vol/inc/libmostvolume.h
index 1147993..5335754 100644
--- a/plugin/ucs2-vol/inc/libmostvolume.h
+++ b/plugin/ucs2-vol/inc/libmostvolume.h
@@ -63,9 +63,12 @@ typedef int (*lib_most_volume_writei2c_cb_t)(uint16_t node, uint8_t *data_ptr, u
lib_most_volume_writei2c_result_cb_t result_fptr,
void *result_user_ptr);
+typedef int (*lib_most_volume_sendmessage_cb_t)(uint16_t node, uint16_t msgid, uint8_t *data_ptr, uint8_t data_sz);
+
typedef struct lib_most_volume_init_ {
lib_most_volume_service_cb_t service_cb;
lib_most_volume_writei2c_cb_t writei2c_cb;
+ lib_most_volume_sendmessage_cb_t sendmsg_cb;
} lib_most_volume_init_t;
diff --git a/plugin/ucs2-vol/inc/setup.h b/plugin/ucs2-vol/inc/setup.h
index e7cda01..3be8bf4 100644
--- a/plugin/ucs2-vol/inc/setup.h
+++ b/plugin/ucs2-vol/inc/setup.h
@@ -51,6 +51,8 @@ private:
CDeviceValue _volume_amp_272_m;
CDeviceValue _volume_amp_272_l;
CDeviceValue _volume_amp_272_r;
+
+ CDeviceValue _volume_amp_510_m;
CDeviceContainer _value_container;
lib_most_volume_init_t init_data;
diff --git a/plugin/ucs2-vol/src/device_container.cpp b/plugin/ucs2-vol/src/device_container.cpp
index 0639c10..f804a42 100644
--- a/plugin/ucs2-vol/src/device_container.cpp
+++ b/plugin/ucs2-vol/src/device_container.cpp
@@ -119,18 +119,25 @@ void CDeviceContainer::Update()
if (_values_pptr[_idx_processing]->RequiresUpdate())
{
- if (_values_pptr[_idx_processing]->FireUpdateMessage(this->_init_ptr->writei2c_cb,
- &OnI2cResult,
- this))
+ if (_values_pptr[_idx_processing]->GetType() == DEVICE_VAL_FIBERDYNE_MASTER)
{
- this->_tx_busy = true;
- error = false;
- break;
+ _values_pptr[_idx_processing]->FireControlMessage(this->_init_ptr->sendmsg_cb);
}
else
{
- error = true;
- break;
+ if (_values_pptr[_idx_processing]->FireUpdateMessage(this->_init_ptr->writei2c_cb,
+ &OnI2cResult,
+ this))
+ {
+ this->_tx_busy = true;
+ error = false;
+ break;
+ }
+ else
+ {
+ error = true;
+ break;
+ }
}
}
}
diff --git a/plugin/ucs2-vol/src/device_value.cpp b/plugin/ucs2-vol/src/device_value.cpp
index b6ec4d5..4031778 100644
--- a/plugin/ucs2-vol/src/device_value.cpp
+++ b/plugin/ucs2-vol/src/device_value.cpp
@@ -32,11 +32,12 @@
#define CONTROL_CH_1 0x08U
#define CONTROL_CH_2 0x09U
-CDeviceValue::CDeviceValue(uint16_t address, DeviceValueType type, uint16_t key)
+CDeviceValue::CDeviceValue(uint16_t address, DeviceValueType type, uint16_t key, bool is_i2c)
{
this->_is_available = false;
this->_is_busy = false;
this->_address = address;
+ this->_is_i2c = is_i2c;
this->_target_value = 0x01u;
this->_actual_value = 0x01u;
@@ -49,7 +50,11 @@ CDeviceValue::CDeviceValue(uint16_t address, DeviceValueType type, uint16_t key)
_tx_payload[0] = CONTROL_MASTER;// 7: master, 8: channel 1, 9: Channel 2
_tx_payload[1] = MUTE_VALUE_HB; //HB:Volume
_tx_payload[2] = MUTE_VALUE_LB; //LB:Volume
- _tx_payload_sz = 3u;
+
+ if (type == DEVICE_VAL_FIBERDYNE_MASTER)
+ _tx_payload_sz = 2u;
+ else
+ _tx_payload_sz = 3u;
}
CDeviceValue::~CDeviceValue()
@@ -60,6 +65,14 @@ void CDeviceValue::ApplyMostValue(uint8_t value, DeviceValueType type, uint8_t t
{
uint16_t tmp = MUTE_VALUE;
+ if (type == DEVICE_VAL_FIBERDYNE_MASTER)
+ {
+ tx_payload[0] = 0x00U;
+ tx_payload[1] = value;
+
+ return;
+ }
+
switch (type)
{
case DEVICE_VAL_LEFT:
@@ -97,6 +110,20 @@ bool CDeviceValue::RequiresUpdate()
return false;
}
+bool CDeviceValue::FireControlMessage(lib_most_volume_sendmessage_cb_t sendmsg_fptr)
+{
+ ApplyMostValue(this->_target_value, _type, _tx_payload);
+
+ if (this->_is_available && !this->_is_busy)
+ {
+ sendmsg_fptr(this->_address, 0x100U, _tx_payload, _tx_payload_sz);
+
+ this->_actual_value = this->_target_value;
+ }
+
+ return true;
+}
+
bool CDeviceValue::FireUpdateMessage(lib_most_volume_writei2c_cb_t writei2c_fptr,
lib_most_volume_writei2c_result_cb_t result_fptr,
void *result_user_ptr)
diff --git a/plugin/ucs2-vol/src/setup.cpp b/plugin/ucs2-vol/src/setup.cpp
index dd6675b..ad841ab 100644
--- a/plugin/ucs2-vol/src/setup.cpp
+++ b/plugin/ucs2-vol/src/setup.cpp
@@ -43,18 +43,19 @@ void CSetup::Release() {
}
CSetup::CSetup()
- : _volume_amp_270_m(0x270U, DEVICE_VAL_MASTER, LIB_MOST_VOLUME_MASTER),
- _volume_amp_270_l(0x270U, DEVICE_VAL_LEFT, LIB_MOST_VOLUME_CH_FRONT_LEFT),
- _volume_amp_270_r(0x270U, DEVICE_VAL_RIGHT, LIB_MOST_VOLUME_CH_FRONT_RIGHT),
- _volume_amp_271_m(0x271U, DEVICE_VAL_MASTER, LIB_MOST_VOLUME_MASTER),
- _volume_amp_271_l(0x271U, DEVICE_VAL_LEFT, LIB_MOST_VOLUME_CH_REAR_LEFT),
- _volume_amp_271_r(0x271U, DEVICE_VAL_RIGHT, LIB_MOST_VOLUME_CH_REAR_RIGHT),
- _volume_amp_272_m(0x272U, DEVICE_VAL_MASTER, LIB_MOST_VOLUME_MASTER),
- _volume_amp_272_l(0x272U, DEVICE_VAL_LEFT, LIB_MOST_VOLUME_CH_CENTER),
- _volume_amp_272_r(0x272U, DEVICE_VAL_RIGHT, LIB_MOST_VOLUME_CH_SUB),
+ : _volume_amp_270_m(0x270U, DEVICE_VAL_MASTER, LIB_MOST_VOLUME_MASTER, true),
+ _volume_amp_270_l(0x270U, DEVICE_VAL_LEFT, LIB_MOST_VOLUME_CH_FRONT_LEFT, true),
+ _volume_amp_270_r(0x270U, DEVICE_VAL_RIGHT, LIB_MOST_VOLUME_CH_FRONT_RIGHT, true),
+ _volume_amp_271_m(0x271U, DEVICE_VAL_MASTER, LIB_MOST_VOLUME_MASTER, true),
+ _volume_amp_271_l(0x271U, DEVICE_VAL_LEFT, LIB_MOST_VOLUME_CH_REAR_LEFT, true),
+ _volume_amp_271_r(0x271U, DEVICE_VAL_RIGHT, LIB_MOST_VOLUME_CH_REAR_RIGHT, true),
+ _volume_amp_272_m(0x272U, DEVICE_VAL_MASTER, LIB_MOST_VOLUME_MASTER, true),
+ _volume_amp_272_l(0x272U, DEVICE_VAL_LEFT, LIB_MOST_VOLUME_CH_CENTER, true),
+ _volume_amp_272_r(0x272U, DEVICE_VAL_RIGHT, LIB_MOST_VOLUME_CH_SUB, true),
+ _volume_amp_510_m(0x510U, DEVICE_VAL_FIBERDYNE_MASTER, LIB_MOST_VOLUME_MASTER, false),
_value_container()
{
- static CDeviceValue* value_list[9] = { &_volume_amp_270_m,
+ static CDeviceValue* value_list[10] = { &_volume_amp_270_m,
&_volume_amp_270_l,
&_volume_amp_270_r,
&_volume_amp_271_m,
@@ -62,9 +63,10 @@ CSetup::CSetup()
&_volume_amp_271_r,
&_volume_amp_272_m,
&_volume_amp_272_l,
- &_volume_amp_272_r};
+ &_volume_amp_272_r,
+ &_volume_amp_510_m};
- _value_container.RegisterValues(value_list, 9U);
+ _value_container.RegisterValues(value_list, 10U);
}
CSetup::~CSetup()