Skip to content

Commit fb090da

Browse files
committed
RDKEMW-1015 : HDMICEC SINK COMRPC
1 parent 57a7c25 commit fb090da

File tree

2 files changed

+43
-119
lines changed

2 files changed

+43
-119
lines changed

HdmiCecSink/HdmiCecSink.cpp

Lines changed: 42 additions & 118 deletions
Original file line numberDiff line numberDiff line change
@@ -62,124 +62,41 @@ namespace WPEFramework
6262
return (std::string("Not supported"));
6363
}
6464

65-
HdmiCecSink::_instance = this;
66-
smConnection=NULL;
67-
cecEnableStatus = false;
68-
HdmiCecSink::_instance->m_numberOfDevices = 0;
69-
m_logicalAddressAllocated = LogicalAddress::UNREGISTERED;
70-
m_currentActiveSource = -1;
71-
m_isHdmiInConnected = false;
72-
hdmiCecAudioDeviceConnected = false;
73-
m_isAudioStatusInfoUpdated = false;
74-
m_audioStatusReceived = false;
75-
m_audioStatusTimerStarted = false;
76-
m_audioDevicePowerStatusRequested = false;
77-
m_pollNextState = POLL_THREAD_STATE_NONE;
78-
m_pollThreadState = POLL_THREAD_STATE_NONE;
79-
m_video_latency = DEFAULT_VIDEO_LATENCY;
80-
m_latency_flags = DEFAULT_LATENCY_FLAGS ;
81-
m_audio_output_delay = DEFAULT_AUDIO_OUTPUT_DELAY;
82-
83-
Register(HDMICECSINK_METHOD_SET_ENABLED, &HdmiCecSink::setEnabledWrapper, this);
84-
Register(HDMICECSINK_METHOD_GET_ENABLED, &HdmiCecSink::getEnabledWrapper, this);
85-
Register(HDMICECSINK_METHOD_SET_OSD_NAME, &HdmiCecSink::setOSDNameWrapper, this);
86-
Register(HDMICECSINK_METHOD_GET_OSD_NAME, &HdmiCecSink::getOSDNameWrapper, this);
87-
Register(HDMICECSINK_METHOD_SET_VENDOR_ID, &HdmiCecSink::setVendorIdWrapper, this);
88-
Register(HDMICECSINK_METHOD_GET_VENDOR_ID, &HdmiCecSink::getVendorIdWrapper, this);
89-
Register(HDMICECSINK_METHOD_PRINT_DEVICE_LIST, &HdmiCecSink::printDeviceListWrapper, this);
90-
Register(HDMICECSINK_METHOD_SET_ACTIVE_PATH, &HdmiCecSink::setActivePathWrapper, this);
91-
Register(HDMICECSINK_METHOD_SET_ROUTING_CHANGE, &HdmiCecSink::setRoutingChangeWrapper, this);
92-
Register(HDMICECSINK_METHOD_GET_DEVICE_LIST, &HdmiCecSink::getDeviceListWrapper, this);
93-
Register(HDMICECSINK_METHOD_GET_ACTIVE_SOURCE, &HdmiCecSink::getActiveSourceWrapper, this);
94-
Register(HDMICECSINK_METHOD_SET_ACTIVE_SOURCE, &HdmiCecSink::setActiveSourceWrapper, this);
95-
Register(HDMICECSINK_METHOD_GET_ACTIVE_ROUTE, &HdmiCecSink::getActiveRouteWrapper, this);
96-
Register(HDMICECSINK_METHOD_REQUEST_ACTIVE_SOURCE, &HdmiCecSink::requestActiveSourceWrapper, this);
97-
Register(HDMICECSINK_METHOD_SETUP_ARC, &HdmiCecSink::setArcEnableDisableWrapper, this);
98-
Register(HDMICECSINK_METHOD_SET_MENU_LANGUAGE, &HdmiCecSink::setMenuLanguageWrapper, this);
99-
Register(HDMICECSINK_METHOD_REQUEST_SHORT_AUDIO_DESCRIPTOR, &HdmiCecSink::requestShortAudioDescriptorWrapper, this);
100-
Register(HDMICECSINK_METHOD_SEND_STANDBY_MESSAGE, &HdmiCecSink::sendStandbyMessageWrapper, this);
101-
Register(HDMICECSINK_METHOD_SEND_AUDIO_DEVICE_POWER_ON, &HdmiCecSink::sendAudioDevicePowerOnMsgWrapper, this);
102-
Register(HDMICECSINK_METHOD_SEND_KEY_PRESS,&HdmiCecSink::sendRemoteKeyPressWrapper,this);
103-
Register(HDMICECSINK_METHOD_SEND_USER_CONTROL_PRESSED,&HdmiCecSink::sendUserControlPressedWrapper,this);
104-
Register(HDMICECSINK_METHOD_SEND_USER_CONTROL_RELEASED,&HdmiCecSink::sendUserControlReleasedWrapper,this);
105-
Register(HDMICECSINK_METHOD_SEND_GIVE_AUDIO_STATUS,&HdmiCecSink::sendGiveAudioStatusWrapper,this);
106-
Register(HDMICECSINK_METHOD_GET_AUDIO_DEVICE_CONNECTED_STATUS,&HdmiCecSink::getAudioDeviceConnectedStatusWrapper,this);
107-
Register(HDMICECSINK_METHOD_REQUEST_AUDIO_DEVICE_POWER_STATUS,&HdmiCecSink::requestAudioDevicePowerStatusWrapper,this);
108-
Register(HDMICECSINK_METHOD_SET_LATENCY_INFO, &HdmiCecSink::setLatencyInfoWrapper, this);
109-
logicalAddressDeviceType = "None";
110-
logicalAddress = 0xFF;
111-
// load persistence setting
112-
loadSettings();
113-
114-
int err;
115-
dsHdmiInGetNumberOfInputsParam_t hdmiInput;
116-
InitializeIARM();
117-
m_sendKeyEventThreadExit = false;
118-
m_sendKeyEventThread = std::thread(threadSendKeyEvent);
119-
120-
m_currentArcRoutingState = ARC_STATE_ARC_TERMINATED;
121-
m_semSignaltoArcRoutingThread.acquire();
122-
m_arcRoutingThread = std::thread(threadArcRouting);
123-
124-
m_audioStatusDetectionTimer.connect( std::bind( &HdmiCecSink::audioStatusTimerFunction, this ) );
125-
m_audioStatusDetectionTimer.setSingleShot(true);
126-
m_arcStartStopTimer.connect( std::bind( &HdmiCecSink::arcStartStopTimerFunction, this ) );
127-
m_arcStartStopTimer.setSingleShot(true);
128-
// get power state:
129-
uint32_t res = Core::ERROR_GENERAL;
130-
PowerState pwrStateCur = WPEFramework::Exchange::IPowerManager::POWER_STATE_UNKNOWN;
131-
PowerState pwrStatePrev = WPEFramework::Exchange::IPowerManager::POWER_STATE_UNKNOWN;
132-
133-
ASSERT (_powerManagerPlugin);
134-
if (_powerManagerPlugin) {
135-
res = _powerManagerPlugin->GetPowerState(pwrStateCur, pwrStatePrev);
136-
if (Core::ERROR_NONE == res) {
137-
powerState = (pwrStateCur == WPEFramework::Exchange::IPowerManager::POWER_STATE_ON) ? DEVICE_POWER_STATE_ON : DEVICE_POWER_STATE_OFF;
138-
LOGINFO("Current state is PowerManagerPlugin: (%d) powerState :%d \n", pwrStateCur, powerState);
139-
}
140-
}
65+
string msg = "";
14166

142-
err = IARM_Bus_Call(IARM_BUS_DSMGR_NAME,
143-
IARM_BUS_DSMGR_API_dsHdmiInGetNumberOfInputs,
144-
(void *)&hdmiInput,
145-
sizeof(hdmiInput));
146-
147-
if (err == IARM_RESULT_SUCCESS && hdmiInput.result == dsERR_NONE)
148-
{
149-
LOGINFO("Number of Inputs [%d] \n", hdmiInput.numHdmiInputs );
150-
m_numofHdmiInput = hdmiInput.numHdmiInputs;
151-
}else{
152-
LOGINFO("Not able to get Numebr of inputs so defaulting to 3 \n");
153-
m_numofHdmiInput = 3;
154-
}
67+
ASSERT(nullptr != service);
68+
ASSERT(nullptr == _service);
69+
ASSERT(nullptr == _hdmiCecSink);
70+
ASSERT(0 == _connectionId);
15571

156-
LOGINFO("initalize inputs \n");
15772

158-
for (int i = 0; i < m_numofHdmiInput; i++){
159-
HdmiPortMap hdmiPort((uint8_t)i);
160-
LOGINFO(" Add to vector [%d] \n", i);
161-
hdmiInputs.push_back(hdmiPort);
162-
}
73+
_service = service;
74+
_service->AddRef();
75+
_service->Register(&_notification);
76+
_hdmiCecSink = _service->Root<Exchange::IHdmiCecSink>(_connectionId, 5000, _T("HdmiCecSinkImplementation"));
16377

164-
LOGINFO("Check the HDMI State \n");
78+
if(nullptr != _hdmiCecSink)
79+
{
80+
_hdmiCecSink->Configure(service);
81+
_hdmiCecSink->Register(&_notification);
82+
Exchange::JHdmiCecSink::Register(*this, _hdmiCecSink);
83+
LOGINFO("HdmiCecSink plugin is available. Successfully activated HdmiCecSink Plugin");
84+
}
85+
else
86+
{
87+
msg = "HdmiCecSink plugin is not available";
88+
LOGINFO("HdmiCecSink plugin is not available. Failed to activate HdmiCecSink Plugin");
89+
}
16590

166-
CheckHdmiInState();
167-
if (cecSettingEnabled)
91+
if (0 != msg.length())
16892
{
169-
try
170-
{
171-
CECEnable();
172-
}
173-
catch(...)
174-
{
175-
LOGWARN("Exception while enabling CEC settings .\r\n");
176-
}
93+
Deinitialize(service);
17794
}
178-
getCecVersion();
179-
LOGINFO(" HdmiCecSink plugin Initialize completed \n");
180-
return (std::string());
18195

182-
}
96+
// On success return empty, to indicate there is no error text.
97+
return msg;
98+
}
99+
183100

184101
void HdmiCecSink::Deinitialize(PluginHost::IShell* /* service */)
185102
{
@@ -191,11 +108,18 @@ namespace WPEFramework
191108
return ;
192109
}
193110

194-
Exchange::IHdmiCecSink::HdmiCecSinkSuccess success;
111+
bool enabled = false;
112+
bool ret = false;
113+
HdmiCecSink::_hdmiCecSink->GetEnabled(enabled,ret);
195114

196-
HdmiCecSink::_hdmiCecSink->SetEnabled(false,success);
115+
if(ret && enabled)
116+
{
117+
Exchange::IHdmiCecSink::HdmiCecSinkSuccess success;
118+
HdmiCecSink::_hdmiCecSink->SetEnabled(false,success);
119+
}
120+
HdmiCecSink::_notification.OnActiveSourceStatusUpdated(false);
197121

198-
if(nullptr != _hdmiCecSink)
122+
if(nullptr != _hdmiCecSink)
199123
{
200124
_hdmiCecSink->Unregister(&_notification);
201125
Exchange::JHdmiCecSink::Unregister(*this);
@@ -219,11 +143,11 @@ namespace WPEFramework
219143
}
220144
}
221145

222-
_connectionId = 0;
223-
_service->Release();
224-
_service = nullptr;
225-
LOGWARN(" HdmiCecSink Deinitialize() Done");
226-
}
146+
_connectionId = 0;
147+
_service->Release();
148+
_service = nullptr;
149+
LOGINFO("HdmiCecSink plugin is deactivated. Successfully deactivated HdmiCecSink Plugin");
150+
}
227151

228152
string HdmiCecSink::Information() const
229153
{

HdmiCecSink/HdmiCecSink.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ namespace WPEFramework {
194194
Exchange::JHdmiCecSink::Event::SetSystemAudioModeEvent(_parent, audioMode);
195195
}
196196

197-
void ShortAudiodescriptorEvent(IValueIterator* const& ShortAudioDescriptor) override
197+
void ShortAudiodescriptorEvent(IHdmiCecSinkShortAudioDescriptorIterator* const& ShortAudioDescriptor) override
198198
{
199199
LOGINFO("ShortAudiodescriptorEvent");
200200
Exchange::JHdmiCecSink::Event::ShortAudiodescriptorEvent(_parent, &ShortAudioDescriptor);

0 commit comments

Comments
 (0)