Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
119 changes: 67 additions & 52 deletions HdmiCecSink/HdmiCecSinkImplementation.cpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/**

Check failure on line 1 in HdmiCecSink/HdmiCecSinkImplementation.cpp

View workflow job for this annotation

GitHub Actions / call-fossid-workflow / Fossid Annotate PR

FossID License Issue Detected

Source code with 'Apache-2.0' license found in local file 'HdmiCecSink/HdmiCecSinkImplementation.cpp' (Match: rdkcentral/rdkservices/1, 3595 lines, url: https://github.com/rdkcentral/rdkservices/archive/GRT_v1.tar.gz, file: HdmiCecSink/HdmiCecSink.cpp)
* If not stated otherwise in this file or this component's LICENSE
* file the following copyright and licenses apply:
*
Expand Down Expand Up @@ -46,7 +46,7 @@
#define HDMICECSINK_NUMBER_TV_ADDR 2
#define HDMICECSINK_UPDATE_POWER_STATUS_INTERVA_MS (60 * 1000)
#define HDMISINK_ARC_START_STOP_MAX_WAIT_MS 4000
#define HDMICECSINK_UPDATE_AUDIO_STATUS_INTERVAL_MS 500
#define HDMICECSINK_UPDATE_AUDIO_STATUS_INTERVAL_MS 2000


#define SAD_FMT_CODE_AC3 2
Expand Down Expand Up @@ -677,6 +677,7 @@
m_isHdmiInConnected = false;
hdmiCecAudioDeviceConnected = false;
m_isAudioStatusInfoUpdated = false;
m_audioStatusRequestedCount = 0;
m_audioStatusReceived = false;
m_audioStatusTimerStarted = false;
m_audioDevicePowerStatusRequested = false;
Expand Down Expand Up @@ -1108,8 +1109,10 @@
LOGINFO("AudioStatus received from the Audio Device and the timer is still active. So stopping the timer!\n");
m_audioStatusDetectionTimer.stop();
}
LOGINFO("AudioStatus received from the Audio Device. Updating the AudioStatus info! m_isAudioStatusInfoUpdated :%d, m_audioStatusReceived :%d, m_audioStatusTimerStarted:%d ", m_isAudioStatusInfoUpdated,m_audioStatusReceived,m_audioStatusTimerStarted);
}
LOGINFO("AudioStatus received from the Audio Device. Updating the AudioStatus info! m_isAudioStatusInfoUpdated :%d, m_audioStatusRequestedCount :%d, m_audioStatusReceived :%d, m_audioStatusTimerStarted:%d ", m_isAudioStatusInfoUpdated,m_audioStatusRequestedCount,m_audioStatusReceived,m_audioStatusTimerStarted);
}
if(m_audioStatusRequestedCount > 0)
m_audioStatusRequestedCount--;
LOGINFO("Command: ReportAudioStatus %s audio Mute status %d means %s and current Volume level is %d \n",GetOpName(msg.opCode()),msg.status.getAudioMuteStatus(),msg.status.toString().c_str(),msg.status.getAudioVolume());
std::list<Exchange::IHdmiCecSink::INotification*>::const_iterator index(_hdmiCecSinkNotifications.begin());
while (index != _hdmiCecSinkNotifications.end()) {
Expand Down Expand Up @@ -1315,7 +1318,15 @@
{
return;
}
if (m_audioStatusDetectionTimer.isActive())
{
LOGINFO("Stopping the Audio Status Timer!\n");
m_audioStatusDetectionTimer.stop();
m_audioStatusTimerStarted = false;
LOGINFO("m_isAudioStatusInfoUpdated :%d, m_audioStatusReceived :%d, m_audioStatusTimerStarted:%d ",m_isAudioStatusInfoUpdated,m_audioStatusReceived,m_audioStatusTimerStarted);
}
LOGINFO(" Send GiveAudioStatus ");
m_audioStatusRequestedCount++;
_instance->smConnection->sendTo(LogicalAddress::AUDIO_SYSTEM,MessageEncoder().encode(GiveAudioStatus()), 100);

}
Expand Down Expand Up @@ -2492,10 +2503,11 @@
m_audioStatusDetectionTimer.stop();
}
m_isAudioStatusInfoUpdated = false;
m_audioStatusRequestedCount = 0;
m_audioStatusReceived = false;
m_audioStatusTimerStarted = false;
LOGINFO("Audio device removed, reset the audio status info. m_isAudioStatusInfoUpdated :%d, m_audioStatusReceived :%d, m_audioStatusTimerStarted:%d ", m_isAudioStatusInfoUpdated,m_audioStatusReceived,m_audioStatusTimerStarted);
std::list<Exchange::IHdmiCecSink::INotification*>::const_iterator index(_hdmiCecSinkNotifications.begin());
LOGINFO("Audio device removed, reset the audio status info. m_isAudioStatusInfoUpdated :%d, m_audioStatusRequestedCount :%d, m_audioStatusReceived :%d, m_audioStatusTimerStarted:%d", m_isAudioStatusInfoUpdated,m_audioStatusRequestedCount,m_audioStatusReceived,m_audioStatusTimerStarted);
std::list<Exchange::IHdmiCecSink::INotification*>::const_iterator index(_hdmiCecSinkNotifications.begin());
while (index != _hdmiCecSinkNotifications.end()) {
(*index)->ReportAudioDeviceConnectedStatus("success", "false");
index++;
Expand Down Expand Up @@ -3132,10 +3144,10 @@
m_audioStatusDetectionTimer.stop();
}
m_isAudioStatusInfoUpdated = false;
m_audioStatusRequestedCount = 0;
m_audioStatusReceived = false;
m_audioStatusTimerStarted = false;
LOGINFO("CEC Disabled, reset the audio status info. m_isAudioStatusInfoUpdated :%d, m_audioStatusReceived :%d, m_audioStatusTimerStarted:%d ", m_isAudioStatusInfoUpdated,m_audioStatusReceived,m_audioStatusTimerStarted);

LOGINFO("CEC Disabled, reset the audio status info. m_isAudioStatusInfoUpdated :%d, m_audioStatusRequestedCount :%d, m_audioStatusReceived :%d, m_audioStatusTimerStarted:%d ", m_isAudioStatusInfoUpdated,m_audioStatusRequestedCount,m_audioStatusReceived,m_audioStatusTimerStarted);
for(int i=0; i< 16; i++)
{
if (_instance->deviceList[i].m_isDevicePresent)
Expand Down Expand Up @@ -3381,51 +3393,54 @@
keyInfo = _instance->m_SendKeyQueue.front();
_instance->m_SendKeyQueue.pop();

if(keyInfo.UserControl == "sendUserControlPressed" )
{
LOGINFO("sendUserControlPressed : logical addr:0x%x keyCode: 0x%x queue size :%zu \n",keyInfo.logicalAddr,keyInfo.keyCode,_instance->m_SendKeyQueue.size());
_instance->sendUserControlPressed(keyInfo.logicalAddr,keyInfo.keyCode);
}
else if(keyInfo.UserControl == "sendUserControlReleased")
{
LOGINFO("sendUserControlReleased : logical addr:0x%x queue size :%zu \n",keyInfo.logicalAddr,_instance->m_SendKeyQueue.size());
_instance->sendUserControlReleased(keyInfo.logicalAddr);
}
else
{
LOGINFO("sendKeyPressEvent : logical addr:0x%x keyCode: 0x%x queue size :%zu \n",keyInfo.logicalAddr,keyInfo.keyCode,_instance->m_SendKeyQueue.size());
_instance->sendKeyPressEvent(keyInfo.logicalAddr,keyInfo.keyCode);
_instance->sendKeyReleaseEvent(keyInfo.logicalAddr);
}

if((_instance->m_SendKeyQueue.size()<=1 || (_instance->m_SendKeyQueue.size() % 2 == 0)) && ((keyInfo.keyCode == VOLUME_UP) || (keyInfo.keyCode == VOLUME_DOWN) || (keyInfo.keyCode == MUTE)) )
{
if(keyInfo.keyCode == MUTE)
{
_instance->sendGiveAudioStatusMsg();
}
else
{
LOGINFO("m_isAudioStatusInfoUpdated :%d, m_audioStatusReceived :%d, m_audioStatusTimerStarted:%d ",_instance->m_isAudioStatusInfoUpdated,_instance->m_audioStatusReceived,_instance->m_audioStatusTimerStarted);
if (!_instance->m_isAudioStatusInfoUpdated)
{
if ( !(_instance->m_audioStatusDetectionTimer.isActive()))
{
LOGINFO("Audio status info not updated. Starting the Timer!");
_instance->m_audioStatusTimerStarted = true;
_instance->m_audioStatusDetectionTimer.start((HDMICECSINK_UPDATE_AUDIO_STATUS_INTERVAL_MS));
}
LOGINFO("m_isAudioStatusInfoUpdated :%d, m_audioStatusReceived :%d, m_audioStatusTimerStarted:%d ", _instance->m_isAudioStatusInfoUpdated,_instance->m_audioStatusReceived,_instance->m_audioStatusTimerStarted);
}
else
{
if (!_instance->m_audioStatusReceived){
_instance->sendGiveAudioStatusMsg();
}
}
}
}
}//while(!_instance->m_sendKeyEventThreadExit)
if((keyInfo.logicalAddr != 0x5) || ((keyInfo.logicalAddr == 0x5) && (_instance->hdmiCecAudioDeviceConnected == true)))
{
if(keyInfo.UserControl == "sendUserControlPressed" )
{
LOGINFO("sendUserControlPressed : logical addr:0x%x keyCode: 0x%x queue size :%zu \n",keyInfo.logicalAddr,keyInfo.keyCode,_instance->m_SendKeyQueue.size());
_instance->sendUserControlPressed(keyInfo.logicalAddr,keyInfo.keyCode);
}
else if(keyInfo.UserControl == "sendUserControlReleased")
{
LOGINFO("sendUserControlReleased : logical addr:0x%x queue size :%zu \n",keyInfo.logicalAddr,_instance->m_SendKeyQueue.size());
_instance->sendUserControlReleased(keyInfo.logicalAddr);
}
else
{
LOGINFO("sendKeyPressEvent : logical addr:0x%x keyCode: 0x%x queue size :%zu \n",keyInfo.logicalAddr,keyInfo.keyCode,_instance->m_SendKeyQueue.size());
_instance->sendKeyPressEvent(keyInfo.logicalAddr,keyInfo.keyCode);
_instance->sendKeyReleaseEvent(keyInfo.logicalAddr);
}

if((_instance->m_SendKeyQueue.size()<=1 || (_instance->m_SendKeyQueue.size() % 2 == 0)) && ((keyInfo.keyCode == VOLUME_UP) || (keyInfo.keyCode == VOLUME_DOWN) || (keyInfo.keyCode == MUTE)) )
{
LOGINFO("m_isAudioStatusInfoUpdated :%d, m_audioStatusRequestedCount :%d, m_audioStatusReceived :%d, m_audioStatusTimerStarted:%d ",_instance->m_isAudioStatusInfoUpdated,_instance->m_audioStatusRequestedCount,_instance->m_audioStatusReceived,_instance->m_audioStatusTimerStarted);
if(keyInfo.keyCode == MUTE)
{
_instance->sendGiveAudioStatusMsg();
}
else
{
if (!_instance->m_isAudioStatusInfoUpdated)
{
if ((!(_instance->m_audioStatusDetectionTimer.isActive())) && (_instance->m_audioStatusRequestedCount == 0))
{
LOGINFO("Audio status info not updated. Starting the Timer!");
_instance->m_audioStatusTimerStarted = true;
_instance->m_audioStatusDetectionTimer.start((HDMICECSINK_UPDATE_AUDIO_STATUS_INTERVAL_MS));
}
LOGINFO("m_isAudioStatusInfoUpdated :%d, m_audioStatusReceived :%d, m_audioStatusTimerStarted:%d ", _instance->m_isAudioStatusInfoUpdated,_instance->m_audioStatusReceived,_instance->m_audioStatusTimerStarted);
}
else
{
if (!_instance->m_audioStatusReceived){
_instance->sendGiveAudioStatusMsg();
}
}
}
}
}
}//while(!_instance->m_sendKeyEventThreadExit)
}//threadSendKeyEvent

void HdmiCecSinkImplementation::audioStatusTimerFunction()
Expand Down
1 change: 1 addition & 0 deletions HdmiCecSink/HdmiCecSinkImplementation.h
Original file line number Diff line number Diff line change
Expand Up @@ -644,6 +644,7 @@ namespace WPEFramework {
bool m_isAudioStatusInfoUpdated;
bool m_audioStatusReceived;
bool m_audioStatusTimerStarted;
int m_audioStatusRequestedCount;
std::thread m_sendKeyEventThread;
std::mutex m_sendKeyEventMutex;
std::queue<SendKeyInfo> m_SendKeyQueue;
Expand Down
Loading