cec: new libCEC methods added to LibCecSharp. fixed some compiler warnings
[deb_libcec.git] / src / lib / CECProcessor.cpp
index 8315cd297b1f66ba6d204b924351f939b7bdd6df..772f1e2e2e36e0417a9d2ae92afdd594b0387003 100644 (file)
@@ -231,6 +231,8 @@ void *CCECProcessor::Process(void)
 
     SetAckMask(m_logicalAddresses.AckMask());
 
+    ScanCECBus();
+
     {
       CLockObject lock(&m_mutex);
       m_bStarted = true;
@@ -271,7 +273,7 @@ void *CCECProcessor::Process(void)
 
     m_controller->CheckKeypressTimeout();
 
-    for (unsigned int iDevicePtr = 0; iDevicePtr < 16; iDevicePtr++)
+    for (uint8_t iDevicePtr = 0; iDevicePtr < 16; iDevicePtr++)
     {
       if (!m_logicalAddresses[iDevicePtr])
         m_busDevices[iDevicePtr]->PollVendorId();
@@ -385,6 +387,21 @@ bool CCECProcessor::SetHDMIPort(uint8_t iPort)
   return bReturn;
 }
 
+void CCECProcessor::ScanCECBus(void)
+{
+  CCECBusDevice *device(NULL);
+  for (unsigned int iPtr = 0; iPtr < 16; iPtr++)
+  {
+    device = m_busDevices[iPtr];
+    if (device && device->GetStatus() == CEC_DEVICE_STATUS_PRESENT)
+    {
+      device->GetPhysicalAddress();
+      device->GetCecVersion();
+      device->GetVendorId();
+    }
+  }
+}
+
 bool CCECProcessor::CheckPhysicalAddress(uint16_t iPhysicalAddress)
 {
   for (unsigned int iPtr = 0; iPtr < 16; iPtr++)
@@ -488,10 +505,41 @@ bool CCECProcessor::SwitchMonitoring(bool bEnable)
 bool CCECProcessor::PollDevice(cec_logical_address iAddress)
 {
   if (iAddress != CECDEVICE_UNKNOWN && m_busDevices[iAddress])
-    return m_busDevices[m_logicalAddresses.primary]->TransmitPoll(iAddress);
+  {
+    return m_logicalAddresses.primary == CECDEVICE_UNKNOWN ?
+        m_busDevices[iAddress]->TransmitPoll(iAddress) :
+        m_busDevices[m_logicalAddresses.primary]->TransmitPoll(iAddress);
+  }
   return false;
 }
 
+uint8_t CCECProcessor::VolumeUp(bool bWait /* = true */)
+{
+  uint8_t status = 0;
+  if (IsActiveDevice(CECDEVICE_AUDIOSYSTEM))
+    status = ((CCECAudioSystem *)m_busDevices[CECDEVICE_AUDIOSYSTEM])->VolumeUp(bWait);
+
+  return status;
+}
+
+uint8_t CCECProcessor::VolumeDown(bool bWait /* = true */)
+{
+  uint8_t status = 0;
+  if (IsActiveDevice(CECDEVICE_AUDIOSYSTEM))
+    status = ((CCECAudioSystem *)m_busDevices[CECDEVICE_AUDIOSYSTEM])->VolumeDown(bWait);
+
+  return status;
+}
+
+uint8_t CCECProcessor::MuteAudio(bool bWait /* = true */)
+{
+  uint8_t status = 0;
+  if (IsActiveDevice(CECDEVICE_AUDIOSYSTEM))
+    status = ((CCECAudioSystem *)m_busDevices[CECDEVICE_AUDIOSYSTEM])->MuteAudio(bWait);
+
+  return status;
+}
+
 CCECBusDevice *CCECProcessor::GetDeviceByPhysicalAddress(uint16_t iPhysicalAddress, bool bRefresh /* = false */) const
 {
   if (m_busDevices[m_logicalAddresses.primary]->GetPhysicalAddress(false) == iPhysicalAddress)
@@ -531,6 +579,17 @@ cec_version CCECProcessor::GetDeviceCecVersion(cec_logical_address iAddress)
   return m_busDevices[iAddress]->GetCecVersion();
 }
 
+cec_osd_name CCECProcessor::GetDeviceOSDName(cec_logical_address iAddress)
+{
+  CStdString strOSDName = m_busDevices[iAddress]->GetOSDName();
+  cec_osd_name retVal;
+
+  snprintf(retVal.name, sizeof(retVal.name), "%s", strOSDName.c_str());
+  retVal.device = iAddress;
+
+  return retVal;
+}
+
 bool CCECProcessor::GetDeviceMenuLanguage(cec_logical_address iAddress, cec_menu_language *language)
 {
   if (m_busDevices[iAddress])
@@ -708,6 +767,7 @@ void CCECProcessor::ParseCommand(cec_command &command)
 cec_logical_addresses CCECProcessor::GetActiveDevices(void)
 {
   cec_logical_addresses addresses;
+  addresses.Clear();
   for (unsigned int iPtr = 0; iPtr < 15; iPtr++)
   {
     if (m_busDevices[iPtr]->GetStatus() == CEC_DEVICE_STATUS_PRESENT)
@@ -786,3 +846,13 @@ bool CCECProcessor::SetAckMask(uint16_t iMask)
 
   return bReturn;
 }
+
+bool CCECProcessor::SendKeypress(cec_logical_address iDestination, cec_user_control_code key, bool bWait /* = false */)
+{
+  return m_busDevices[iDestination]->SendKeypress(key, bWait);
+}
+
+bool CCECProcessor::SendKeyRelease(cec_logical_address iDestination, bool bWait /* = false */)
+{
+  return m_busDevices[iDestination]->SendKeyRelease(bWait);
+}