Advanced Settings Panel
[pierogi] / pirkeysetmetadata.cpp
index dd1574f..ce7cf00 100644 (file)
@@ -11,6 +11,9 @@ extern PIRMakeMgr makeManager;
 // Static member definition:
 PIRDeviceCollection PIRKeysetMetaData::controlledDevices;
 
+// Thread synchronization stuff:
+extern bool commandInFlight;
+
 PIRKeysetMetaData::PIRKeysetMetaData(
   const char *r,
   PIRMakeName m,
@@ -22,6 +25,13 @@ PIRKeysetMetaData::PIRKeysetMetaData(
 {
 }
 
+
+PIRKeysetMetaData::~PIRKeysetMetaData()
+{
+  clearProtocol();
+}
+
+
 bool PIRKeysetMetaData::hasKey(
   PIRKeyName name) const
 {
@@ -81,6 +91,52 @@ const char *PIRKeysetMetaData::getKeysetName() const
 }
 
 
+unsigned int PIRKeysetMetaData::getCarrierFrequency() const
+{
+  if (!threadableProtocol)
+  {
+    return 0;
+  }
+
+  return threadableProtocol->getCarrierFrequency();
+}
+
+
+void PIRKeysetMetaData::setCarrierFrequency(
+  unsigned int carrierFrequency)
+{
+  if (!threadableProtocol)
+  {
+    return;
+  }
+
+  threadableProtocol->setCarrierFrequency(carrierFrequency);
+}
+
+
+unsigned int PIRKeysetMetaData::getDutyCycle() const
+{
+  if (!threadableProtocol)
+  {
+    return 0;
+  }
+
+  return threadableProtocol->getDutyCycle();
+}
+
+
+void PIRKeysetMetaData::setDutyCycle(
+  unsigned int dutyCycle)
+{
+  if (!threadableProtocol)
+  {
+    return;
+  }
+
+  threadableProtocol->setDutyCycle(dutyCycle);
+}
+
+
 void PIRKeysetMetaData::addControlledDevice(
   PIRMakeName make,
   const char *model,
@@ -294,11 +350,18 @@ void PIRKeysetMetaData::setKeysetName(
 }
 
 
-void PIRKeysetMetaData::clearProtocol()
+bool PIRKeysetMetaData::clearProtocol()
 {
-  if (threadableProtocol)
+  if (!threadableProtocol)
+  {
+    return true;
+  }
+  else if (!commandInFlight)
   {
     delete threadableProtocol;
     threadableProtocol = 0;
+    return true;
   }
+
+  return false;
 }