@@ -62,40 +62,122 @@ namespace WPEFramework
62
62
return (std::string (" Not supported" ));
63
63
}
64
64
65
- string msg = " " ;
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
+ }
66
141
67
- ASSERT ( nullptr != service);
68
- ASSERT ( nullptr == _service);
69
- ASSERT ( nullptr == _hdmiCecSink);
70
- ASSERT ( 0 == _connectionId );
142
+ err = IARM_Bus_Call (IARM_BUS_DSMGR_NAME,
143
+ IARM_BUS_DSMGR_API_dsHdmiInGetNumberOfInputs,
144
+ ( void *)&hdmiInput,
145
+ sizeof (hdmiInput) );
71
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
+ }
72
155
73
- _service = service;
74
- _service->AddRef ();
75
- _service->Register (&_notification);
76
- _hdmiCecSink = _service->Root <Exchange::IHdmiCecSink>(_connectionId, 5000 , _T (" HdmiCecSinkImplementation" ));
156
+ LOGINFO (" initalize inputs \n " );
77
157
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
- }
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
+ }
163
+
164
+ LOGINFO (" Check the HDMI State \n " );
90
165
91
- if (0 != msg.length ())
166
+ CheckHdmiInState ();
167
+ if (cecSettingEnabled)
92
168
{
93
- Deinitialize (service);
169
+ try
170
+ {
171
+ CECEnable ();
172
+ }
173
+ catch (...)
174
+ {
175
+ LOGWARN (" Exception while enabling CEC settings .\r\n " );
176
+ }
94
177
}
95
-
96
- // On success return empty, to indicate there is no error text.
97
- return msg;
98
-
178
+ getCecVersion ();
179
+ LOGINFO (" HdmiCecSink plugin Initialize completed \n " );
180
+ return (std::string ());
99
181
100
182
}
101
183
0 commit comments