Skip to content

Commit 6bb5cc0

Browse files
HdmiCecSink changes moved to COMRPC latest
1 parent ef2d7ed commit 6bb5cc0

File tree

2 files changed

+73
-84
lines changed

2 files changed

+73
-84
lines changed

HdmiCecSink/HdmiCecSinkImplementation.cpp

Lines changed: 61 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,8 @@
2323
#include "ccec/Connection.hpp"
2424
#include "ccec/CECFrame.hpp"
2525
#include "ccec/MessageEncoder.hpp"
26-
#include "host.hpp"
2726
#include "UtilsgetRFCConfig.h"
2827

29-
#include "dsMgr.h"
30-
#include "dsRpc.h"
3128
#include "dsDisplay.h"
3229
#include "videoOutputPort.hpp"
3330
#include "manager.hpp"
@@ -36,6 +33,9 @@
3633
#include "UtilsIarm.h"
3734
#include "UtilsJsonRpc.h"
3835
#include "UtilssyncPersistFile.h"
36+
#include "exception.hpp"
37+
#include "hdmiIn.hpp"
38+
#include "dsError.h"
3939

4040
using CCECRequestActiveSource = ::RequestActiveSource;
4141
using CCECSetMenuLanguage = ::SetMenuLanguage;
@@ -692,7 +692,18 @@ namespace WPEFramework
692692
}
693693

694694
HdmiCecSinkImplementation::_instance = nullptr;
695-
DeinitializeIARM();
695+
device::Host::getInstance().UnRegister(baseInterface<device::Host::IHdmiInEvents>());
696+
697+
try
698+
{
699+
device::Manager::DeInitialize();
700+
LOGINFO("HdmiCecSink plugin device::Manager::DeInitialize success");
701+
}
702+
catch(const device::Exception& err)
703+
{
704+
LOGINFO("HdmiCecSink plugin device::Manager::DeInitialize failed");
705+
LOG_DEVICE_EXCEPTION0();
706+
}
696707
}
697708

698709
Core::hresult HdmiCecSinkImplementation::Configure(PluginHost::IShell *service)
@@ -719,12 +730,22 @@ namespace WPEFramework
719730

720731
logicalAddressDeviceType = "None";
721732
logicalAddress = 0xFF;
733+
734+
try
735+
{
736+
device::Manager::Initialize();
737+
LOGINFO("HdmiCecSink plugin device::Manager::Initialize success");
738+
}
739+
catch(const device::Exception& err)
740+
{
741+
LOGINFO("HdmiCecSink plugin device::Manager::Initialize failed");
742+
LOG_DEVICE_EXCEPTION0();
743+
}
744+
722745
// load persistence setting
723746
loadSettings();
747+
device::Host::getInstance().Register(baseInterface<device::Host::IHdmiInEvents>(), "WPE::CecSink");
724748

725-
int err;
726-
dsHdmiInGetNumberOfInputsParam_t hdmiInput;
727-
InitializeIARM();
728749
m_sendKeyEventThreadExit = false;
729750
m_sendKeyEventThread = std::thread(threadSendKeyEvent);
730751

@@ -751,18 +772,16 @@ namespace WPEFramework
751772
}
752773
}
753774

754-
err = IARM_Bus_Call(IARM_BUS_DSMGR_NAME,
755-
IARM_BUS_DSMGR_API_dsHdmiInGetNumberOfInputs,
756-
(void *)&hdmiInput,
757-
sizeof(hdmiInput));
758-
759-
if (err == IARM_RESULT_SUCCESS && hdmiInput.result == dsERR_NONE)
760-
{
761-
LOGINFO("Number of Inputs [%d] \n", hdmiInput.numHdmiInputs );
762-
m_numofHdmiInput = hdmiInput.numHdmiInputs;
763-
}else{
764-
LOGINFO("Not able to get Numebr of inputs so defaulting to 3 \n");
765-
m_numofHdmiInput = 3;
775+
try
776+
{
777+
m_numofHdmiInput = device::HdmiInput::getInstance().getNumberOfInputs();
778+
LOGINFO("HdmiCecSink plugin m_numofHdmiInput %d", m_numofHdmiInput);
779+
}
780+
catch(const device::Exception& err)
781+
{
782+
LOGINFO("HdmiCecSink plugin device::HdmiInput::getInstance().getNumberOfInputs failed so defaulting to 3");
783+
m_numofHdmiInput = 3;
784+
LOG_DEVICE_EXCEPTION0();
766785
}
767786

768787
LOGINFO("initalize inputs \n");
@@ -834,25 +853,6 @@ namespace WPEFramework
834853
return Core::ERROR_NONE;
835854
}
836855

837-
838-
void HdmiCecSinkImplementation::InitializeIARM()
839-
{
840-
if (Utils::IARM::init())
841-
{
842-
IARM_Result_t res;
843-
IARM_CHECK( IARM_Bus_RegisterEventHandler(IARM_BUS_DSMGR_NAME,IARM_BUS_DSMGR_EVENT_HDMI_IN_HOTPLUG, dsHdmiEventHandler) );
844-
}
845-
}
846-
847-
void HdmiCecSinkImplementation::DeinitializeIARM()
848-
{
849-
if (Utils::IARM::isConnected())
850-
{
851-
IARM_Result_t res;
852-
IARM_CHECK( IARM_Bus_RemoveEventHandler(IARM_BUS_DSMGR_NAME,IARM_BUS_DSMGR_EVENT_HDMI_IN_HOTPLUG, dsHdmiEventHandler) );
853-
}
854-
}
855-
856856
void HdmiCecSinkImplementation::InitializePowerManager(PluginHost::IShell *service)
857857
{
858858
_powerManagerPlugin = PowerManagerInterfaceBuilder(_T("org.rdk.PowerManager"))
@@ -872,21 +872,13 @@ namespace WPEFramework
872872
}
873873
}
874874

875-
void HdmiCecSinkImplementation::dsHdmiEventHandler(const char *owner, IARM_EventId_t eventId, void *data, size_t len)
875+
void HdmiCecSink::OnHdmiInEventHotPlug(dsHdmiInPort_t port, bool isConnected)
876876
{
877-
if(!HdmiCecSinkImplementation::_instance)
878-
{
877+
if(!HdmiCecSink::_instance)
879878
return;
880-
}
881879

882-
if (IARM_BUS_DSMGR_EVENT_HDMI_IN_HOTPLUG == eventId)
883-
{
884-
IARM_Bus_DSMgr_EventData_t *eventData = (IARM_Bus_DSMgr_EventData_t *)data;
885-
bool isHdmiConnected = eventData->data.hdmi_in_connect.isPortConnected;
886-
dsHdmiInPort_t portId = eventData->data.hdmi_in_connect.port;
887-
LOGINFO("Received IARM_BUS_DSMGR_EVENT_HDMI_IN_HOTPLUG event port: %d data:%d \r\n",portId, isHdmiConnected);
888-
HdmiCecSinkImplementation::_instance->onHdmiHotPlug(portId,isHdmiConnected);
889-
}
880+
LOGINFO("Received HdmiCecSink::OnHdmiInEventHotPlug event port: %d isConnected: %d \r\n", port, isConnected);
881+
HdmiCecSink::_instance->onHdmiHotPlug((int) port, isConnected);
890882
}
891883

892884
void HdmiCecSinkImplementation::onPowerModeChanged(const PowerState &currentState, const PowerState &newState)
@@ -2020,28 +2012,18 @@ namespace WPEFramework
20202012

20212013
void HdmiCecSinkImplementation::CheckHdmiInState()
20222014
{
2023-
int err;
20242015
bool isAnyPortConnected = false;
20252016

2026-
dsHdmiInGetStatusParam_t params;
2027-
err = IARM_Bus_Call(IARM_BUS_DSMGR_NAME,
2028-
IARM_BUS_DSMGR_API_dsHdmiInGetStatus,
2029-
(void *)&params,
2030-
sizeof(params));
2031-
2032-
if(err == IARM_RESULT_SUCCESS && params.result == dsERR_NONE )
2017+
for( int i = 0; i < m_numofHdmiInput; i++ )
20332018
{
2034-
for( int i = 0; i < m_numofHdmiInput; i++ )
2035-
{
2036-
LOGINFO("Is HDMI In Port [%d] connected [%d] \n",i, params.status.isPortConnected[i]);
2037-
if ( params.status.isPortConnected[i] )
2038-
{
2039-
isAnyPortConnected = true;
2040-
}
2019+
LOGINFO("update Port Status [%d] \n", i);
2020+
hdmiInputs[i].update(device::HdmiInput::getInstance().isPortConnected(i));
20412021

2042-
LOGINFO("update Port Status [%d] \n", i);
2043-
hdmiInputs[i].update(params.status.isPortConnected[i]);
2044-
}
2022+
LOGINFO("Is HDMI In Port [%d] connected [%d] \n",i, hdmiInputs[i].m_isConnected);
2023+
if ( hdmiInputs[i].m_isConnected )
2024+
{
2025+
isAnyPortConnected = true;
2026+
}
20452027
}
20462028

20472029
if ( isAnyPortConnected ) {
@@ -3590,17 +3572,17 @@ namespace WPEFramework
35903572

35913573
void HdmiCecSinkImplementation::getHdmiArcPortID()
35923574
{
3593-
int err;
3594-
dsGetHDMIARCPortIdParam_t param;
3595-
err = IARM_Bus_Call(IARM_BUS_DSMGR_NAME,
3596-
(char *)IARM_BUS_DSMGR_API_dsGetHDMIARCPortId,
3597-
(void *)&param,
3598-
sizeof(param));
3599-
if (IARM_RESULT_SUCCESS == err)
3600-
{
3601-
LOGINFO("HDMI ARC port ID HdmiArcPortID=[%d] \n", param.portId);
3602-
HdmiArcPortID = param.portId;
3603-
}
3575+
int portId = -1;
3576+
dsError_t error = device::HdmiInput::getInstance().getHDMIARCPortId(portId);
3577+
if (dsERR_NONE == error)
3578+
{
3579+
LOGINFO("HDMI ARC port ID HdmiArcPortID[%d]", portId);
3580+
HdmiArcPortID = portId;
3581+
}
3582+
else
3583+
{
3584+
LOGWARN("getHDMIARCPortId failed");
3585+
}
36043586
}
36053587

36063588
void HdmiCecSinkImplementation::getCecVersion()

HdmiCecSink/HdmiCecSinkImplementation.h

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
#include <interfaces/IPowerManager.h>
4343
#include "PowerManagerInterface.h"
4444
#include <interfaces/IHdmiCecSink.h>
45+
#include "host.hpp"
4546

4647
using namespace WPEFramework;
4748
using PowerState = WPEFramework::Exchange::IPowerManager::PowerState;
@@ -483,7 +484,7 @@ namespace WPEFramework {
483484
// As the registration/unregistration of notifications is realized by the class PluginHost::JSONRPC,
484485
// this class exposes a public method called, Notify(), using this methods, all subscribed clients
485486
// will receive a JSONRPC message as a notification, in case this method is called.
486-
class HdmiCecSinkImplementation : public Exchange::IHdmiCecSink {
487+
class HdmiCecSinkImplementation : public Exchange::IHdmiCecSink, public device::Host::IHdmiInEvents {
487488

488489
enum {
489490
POLL_THREAD_STATE_NONE,
@@ -670,8 +671,6 @@ namespace WPEFramework {
670671
PowerManagerInterfaceRef _powerManagerPlugin;
671672
Core::Sink<PowerManagerNotification> _pwrMgrNotification;
672673
bool _registeredEventHandlers;
673-
void InitializeIARM();
674-
void DeinitializeIARM();
675674
void allocateLogicalAddress(int deviceType);
676675
void allocateLAforTV();
677676
void pingDevices(std::vector<int> &connected , std::vector<int> &disconnected);
@@ -681,7 +680,6 @@ namespace WPEFramework {
681680
int requestStatus(const int logicalAddress);
682681
static void threadRun();
683682
void cecMonitoringThread();
684-
static void dsHdmiEventHandler(const char *owner, IARM_EventId_t eventId, void *data, size_t len);
685683
void onHdmiHotPlug(int portId, int connectStatus);
686684
bool loadSettings();
687685
void persistSettings(bool enableStatus);
@@ -743,7 +741,16 @@ namespace WPEFramework {
743741
Core::hresult SetMenuLanguage(const string &language, HdmiCecSinkSuccess &successResult) override;
744742
Core::hresult RequestAudioDevicePowerStatus(HdmiCecSinkSuccess &successResult) override;
745743

746-
private:
744+
/*devicesetting APIs*/
745+
virtual void OnHdmiInEventHotPlug(dsHdmiInPort_t port, bool isConnected) override;
746+
747+
private:
748+
template <typename T>
749+
T* baseInterface()
750+
{
751+
static_assert(std::is_base_of<T, HdmiCecSink>(), "base type mismatch");
752+
return static_cast<T*>(this);
753+
}
747754
std::list<Exchange::IHdmiCecSink::INotification*> _hdmiCecSinkNotifications;
748755
mutable Core::CriticalSection _adminLock;
749756
};

0 commit comments

Comments
 (0)