cec: keep a separate write and read lock in CCECBusDevice
[deb_libcec.git] / src / lib / devices / CECPlaybackDevice.cpp
index 98ec750a9d51453e83d25d0b7caf2c7b9d8b1b19..d1b1e5112da13d1e87fd8d3b0a6e6c559f1a1c0e 100644 (file)
@@ -44,8 +44,15 @@ CCECPlaybackDevice::CCECPlaybackDevice(CCECProcessor *processor, cec_logical_add
   m_type = CEC_DEVICE_TYPE_PLAYBACK_DEVICE;
 }
 
+cec_deck_info CCECPlaybackDevice::GetDeckStatus(void)
+{
+  CLockObject lock(&m_mutex);
+  return m_deckStatus;
+}
+
 void CCECPlaybackDevice::SetDeckStatus(cec_deck_info deckStatus)
 {
+  CLockObject lock(&m_writeMutex);
   if (m_deckStatus != deckStatus)
   {
     CStdString strLog;
@@ -56,8 +63,15 @@ void CCECPlaybackDevice::SetDeckStatus(cec_deck_info deckStatus)
   }
 }
 
+cec_deck_control_mode CCECPlaybackDevice::GetDeckControlMode(void)
+{
+  CLockObject lock(&m_mutex);
+  return m_deckControlMode;
+}
+
 void CCECPlaybackDevice::SetDeckControlMode(cec_deck_control_mode mode)
 {
+  CLockObject lock(&m_writeMutex);
   if (m_deckControlMode != mode)
   {
     CStdString strLog;
@@ -70,6 +84,7 @@ void CCECPlaybackDevice::SetDeckControlMode(cec_deck_control_mode mode)
 
 bool CCECPlaybackDevice::TransmitDeckStatus(cec_logical_address dest)
 {
+  CLockObject lock(&m_writeMutex);
   CStdString strLog;
   strLog.Format("<< %s (%X) -> %s (%X): deck status '%s'", GetLogicalAddressName(), m_iLogicalAddress, CCECCommandHandler::ToString(dest), dest, CCECCommandHandler::ToString(m_deckStatus));
   AddLog(CEC_LOG_NOTICE, strLog);