Log In
New Account
  
Home My Page Project Cloud Code Snippets Project Openings Pierogi
Summary Forums Tracker Lists Tasks Docs News SCM Files
authorJohn Pietrzak <john@pietrzak.org>
Thu, 23 Feb 2012 17:22:19 +0000 (12:22 -0500)
committerJohn Pietrzak <john@pietrzak.org>
Thu, 23 Feb 2012 17:22:19 +0000 (12:22 -0500)
This commit includes a fix for a nasty volume rocker switch bug (big thanks to
sixwheeledbeast for catching it), and includes new keysets for Foxtel, NAD, and
Universum.

19 files changed:
keysets/foxtel.cpp [new file with mode: 0644]
keysets/foxtel.h [new file with mode: 0644]
keysets/motorola.cpp
keysets/nad.cpp [new file with mode: 0644]
keysets/nad.h [new file with mode: 0644]
keysets/philips.cpp
keysets/sony.cpp
keysets/universum.cpp [new file with mode: 0644]
keysets/universum.h [new file with mode: 0644]
mainwindow.cpp
pierogi.pro
pierogi.pro.user
pirapplication.cpp
pirapplication.h
pirkeysetmanager.cpp
pirmakenames.cpp
pirmakenames.h
qtc_packaging/debian_fremantle/changelog
qtc_packaging/debian_fremantle/control

diff --git a/keysets/foxtel.cpp b/keysets/foxtel.cpp
new file mode 100644 (file)
index 0000000..be14584
--- /dev/null
@@ -0,0 +1,61 @@
+#include "foxtel.h"
+#include "protocols/necprotocol.h"
+
+
+FoxtelSTB1::FoxtelSTB1(
+  unsigned int index)
+  : PIRKeysetMetaData(
+      "STB Keyset 1",
+      Foxtel_Make,
+      index)
+{
+}
+
+
+void FoxtelSTB1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // Keyset already populated.
+    return;
+  }
+
+  threadableProtocol = new NECProtocol(guiObject, index, true, false);
+
+  setPreData(0x3C84, 16);
+
+  addKey("5", Five_Key, 0x00, 8);
+  addKey("4", Four_Key, 0x01, 8);
+  addKey("1", One_Key, 0x02, 8);
+  addKey("6", Six_Key, 0x03, 8);
+  addKey("Power", Power_Key, 0x04, 8);
+  addKey("2", Two_Key, 0x05, 8);
+  addKey("Fav", Favorites_Key, 0x06, 8);
+  addKey("3", Three_Key, 0x07, 8);
+  addKey("9", Nine_Key, 0x08, 8);
+  addKey("8", Eight_Key, 0x09, 8);
+  addKey("7", Seven_Key, 0x0A, 8);
+  addKey("Unknown1", Unmapped_Key, 0x0B, 8);
+  addKey("Menu", Menu_Key, 0x0C, 8);
+  addKey("up", Up_Key, 0x0D, 8);
+  addKey("0", Zero_Key, 0x0E, 8);
+  addKey(">", Right_Key, 0x0F, 8);
+
+  addKey("down", Down_Key, 0x10, 8);
+  addKey("Info", Info_Key, 0x11, 8);
+  addKey("<", Left_Key, 0x12, 8);
+  addKey("Unknown2", Unmapped_Key, 0x13, 8);
+  addKey("Mute", Mute_Key, 0x14, 8);
+  addKey("Exit", Exit_Key, 0x15, 8);
+  addKey("Store", Memory_Key, 0x16, 8);
+  addKey("Auth", Unmapped_Key, 0x17, 8);
+  addKey("Vol+", VolumeUp_Key, 0x18, 8);
+  addKey(">-<", Unmapped_Key, 0x19, 8);
+  addKey("Unknown3", Unmapped_Key, 0x1A, 8);
+  addKey("Prog+", ChannelUp_Key, 0x1B, 8);
+  addKey("Vol-", VolumeDown_Key, 0x1C, 8);
+  addKey("Ok", Select_Key, 0x1D,8);
+  addKey("Unknown4", Unmapped_Key, 0x1E, 8);
+  addKey("Prog-", ChannelDown_Key, 0x1F, 8);
+}
diff --git a/keysets/foxtel.h b/keysets/foxtel.h
new file mode 100644 (file)
index 0000000..24c2d59
--- /dev/null
@@ -0,0 +1,18 @@
+#ifndef FOXTEL_H
+#define FOXTEL_H
+
+#include "pirkeysetmetadata.h"
+
+class QObject;
+
+class FoxtelSTB1: public PIRKeysetMetaData
+{
+public:
+  FoxtelSTB1(
+    unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
+};
+
+#endif // FOXTEL_H
index 36582af..f00e579 100644 (file)
@@ -139,7 +139,9 @@ void MotorolaSTB1::populateProtocol(
   addKey("play", Play_Key, 0x5038, 16);
   addKey("stop", Stop_Key, 0x4039, 16);
   addKey("page+", PageUp_Key, 0x303A, 16);
+  addKey("page+", StepForward_Key, 0x303A, 16); // for convenience
   addKey("page-", PageDown_Key, 0x203B, 16);
+  addKey("page-", StepBack_Key, 0x203B, 16); // Also for convenience
   addKey("skipback", Replay_Key, 0x103C, 16);
   addKey("mydvr", HDDInput_Key, 0x003D, 16);
   addKey("live", LiveTV_Key, 0xF03E, 16);
diff --git a/keysets/nad.cpp b/keysets/nad.cpp
new file mode 100644 (file)
index 0000000..606ab35
--- /dev/null
@@ -0,0 +1,355 @@
+#include "nad.h"
+#include "protocols/necprotocol.h"
+#include "protocols/necxprotocol.h"
+#include "protocols/sircprotocol.h"
+
+
+NADAudio1::NADAudio1(
+  unsigned int index)
+  : PIRKeysetMetaData(
+      "Receiver Component 1",
+      NAD_Make,
+      index)
+{
+}
+
+
+void NADAudio1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // Keyset already populated.
+    return;
+  }
+
+  threadableProtocol = new NECProtocol(guiObject, index, true, true);
+
+  setPreData(0x7C87, 16);
+
+  addKey("CD-Play", Play_Key, 0x01, 8);
+  addKey("CD-Stop", Stop_Key, 0x02, 8);
+  addKey("CD-Previous", Previous_Key, 0x05, 8);
+  addKey("CD-Next", Next_Key, 0x06, 8);
+  addKey("disp-info", Info_Key, 0x08, 8);
+  addKey("rpt", Repeat_Key, 0x0A, 8);
+
+  addKey("CD-Disc", NextDisc_Key, 0x17, 8);
+  addKey("SLEEP", Sleep_Key, 0x20, 8);
+  addKey("Tuner-Bank", Unmapped_Key, 0x24, 8);
+  addKey("Power-On", PowerOn_Key, 0x25, 8);
+  addKey("RCVR_LEVEL", Unmapped_Key, 0x2B, 8);
+  addKey("EXT._5.1", Unmapped_Key, 0x2E, 8);
+  addKey("RCVR_DYN.R", NoiseReduction_Key, 0x2F, 8);
+
+  addKey("VIDEO_4", Unmapped_Key, 0x30, 8);
+  addKey("VIDEO_5", Unmapped_Key, 0x31, 8);
+  addKey("RCVR_TUNE_MODE", Mode_Key, 0x33, 8);
+  addKey("CD-Pause", Pause_Key, 0x4A, 8);
+
+  addKey("TapeA-Stop", Unmapped_Key, 0x52, 8);
+  addKey("TapeA-Play", Unmapped_Key, 0x53, 8);
+  addKey("TapeA-Rev", Unmapped_Key, 0x54, 8);
+  addKey("TapeA-Record", Unmapped_Key, 0x55, 8);
+  addKey("TapeA-FastForward", Unmapped_Key, 0x56, 8);
+  addKey("TapeA-Rewind", Unmapped_Key, 0x57, 8);
+
+  addKey("Standby", Power_Key, 0x80, 8);  // "RCVR_POWER"
+  addKey("Input-TunerFM", Unmapped_Key, 0x81, 8);
+  addKey("Input-TunerAM", Unmapped_Key, 0x82, 8);
+  addKey("Input-CD", CDInput_Key, 0x85, 8);
+  addKey("VolumeUp", VolumeUp_Key, 0x88, 8);
+  addKey("Input-Disc", PhonoInput_Key, 0x89, 8);
+  addKey("RCVR_1", One_Key, 0x8A, 8);
+  addKey("RCVR_5", Five_Key, 0x8B, 8);
+  addKey("VolumeDown", VolumeDown_Key, 0x8C, 8);
+  addKey("Input-Tape1", TapeInput_Key, 0x8D, 8);
+  addKey("RCVR_2", Two_Key, 0x8E, 8);
+  addKey("RCVR_6", Six_Key, 0x8F, 8);
+
+  addKey("Input-Tape2", Unmapped_Key, 0x91, 8);
+  addKey("RCVR_3", Three_Key, 0x92, 8);
+  addKey("RCVR_7", Seven_Key, 0x93, 8);
+  addKey("Mute", Mute_Key, 0x94, 8); // "RCVR_MUTE_ENTER"
+  addKey("RCVR_4", Four_Key, 0x96, 8);
+  addKey("RCVR_8", Eight_Key, 0x97, 8);
+  addKey("RCVR_9", Nine_Key, 0x98, 8);
+  addKey("TapeB-Record", Unmapped_Key, 0x9A, 8);
+  addKey("Input-Aux", AuxInput_Key, 0x9B, 8);
+  addKey("TapeB-Play", Unmapped_Key, 0x9C, 8);
+  addKey("TapeB-FastForward", Unmapped_Key, 0x9D, 8);
+  addKey("TapeB-Rewind", Unmapped_Key, 0x9E, 8);
+  addKey("TapeB-Stop", Unmapped_Key, 0x9F, 8);
+
+  addKey("Input-Video2", SatInput_Key, 0xC0, 8); // "SAT"
+  addKey("Input-Video3", VCRInput_Key, 0xC1, 8); // "VCR"
+  addKey("Input-Video1", DVDInput_Key, 0xC2, 8); // "DVD", "LD"
+  addKey("RCVR_0", Zero_Key, 0xC7, 8);
+  addKey("Power-Off", PowerOff_Key, 0xC8, 8);
+  addKey("RCVR_SURR.", Surround_Key, 0xCC, 8);
+  addKey("RCVR_TEST", Unmapped_Key, 0xCD, 8);
+  addKey("Speakers-A", Unmapped_Key, 0xCE, 8);
+  addKey("Speakers-B", Unmapped_Key, 0xCF, 8);
+
+  addKey("Tuner-PresetLeft", ChannelDown_Key, 0xD1, 8);
+  addKey("Tuner-PresetRight", ChannelUp_Key, 0xD2, 8);
+  addKey("FM/AM", TunerBand_Key, 0xDD, 8); // "tuner"
+  addKey("FM/AM", TunerInput_Key, 0xDD, 8); // "tuner"
+  addKey("TapeB-Rev", Unmapped_Key, 0xDE, 8);
+}
+
+
+NADTuner1::NADTuner1(
+  unsigned int index)
+  : PIRKeysetMetaData(
+      "Tuner Component 1",
+      NAD_Make,
+      index)
+{
+}
+
+
+void NADTuner1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // Keyset already populated.
+    return;
+  }
+
+  threadableProtocol = new NECProtocol(guiObject, index, true, true);
+
+  setPreData(0x7C87, 16);
+
+  addKey("Tuner-Bank", Unmapped_Key, 0x24, 8);
+  addKey("tuner-disp-info", Info_Key, 0x26, 8); // "RCVR_DISPLAY"
+
+  addKey("tuner-1", One_Key, 0x8A, 8);
+  addKey("tuner-2", Two_Key, 0x8E, 8);
+  addKey("tuner-3", Three_Key, 0x92, 8);
+  addKey("tuner-4", Four_Key, 0x96, 8);
+  addKey("tuner-5", Five_Key, 0x8B, 8);
+  addKey("tuner-6", Six_Key, 0x8F, 8);
+  addKey("tuner-7", Seven_Key, 0x93, 8);
+  addKey("tuner-8", Eight_Key, 0x97, 8);
+  addKey("tuner-9", Nine_Key, 0x98, 8);
+  addKey("tuner-0", Zero_Key, 0xC7, 8);
+  addKey("tuner-10", Unmapped_Key, 0xF2, 8);
+  addKey("tuner-+10", DoubleDigit_Key, 0xF3, 8);
+
+  addKey("tuner-enter", Select_Key, 0xC5, 8);
+  addKey("tuner-enter", Enter_Key, 0xC5, 8);
+  addKey("Tuner-PresetRight", ChannelUp_Key, 0xD2, 8);
+  addKey("Tuner-PresetRight", Up_Key, 0xD2, 8);
+  addKey("Tuner-PresetLeft", ChannelDown_Key, 0xD1, 8);
+  addKey("Tuner-PresetLeft", Down_Key, 0xD1, 8);
+  addKey("tuner-tune-left", Left_Key, 0xD3, 8);
+  addKey("tuner-tune-right", Right_Key, 0xD4, 8);
+
+  addKey("tuner-fm-mute", Unmapped_Key, 0x37, 8);
+  addKey("tuner-blend", Unmapped_Key, 0x35, 8);
+  addKey("tuner-am-fm-dab", TunerBand_Key, 0xDD, 8);
+
+  addKey("Standby", Power_Key, 0x80, 8);  // "RCVR_POWER"
+  addKey("VolumeUp", VolumeUp_Key, 0x88, 8);
+  addKey("VolumeDown", VolumeDown_Key, 0x8C, 8);
+  addKey("Mute", Mute_Key, 0x94, 8); // "RCVR_MUTE_ENTER"
+}
+
+
+NADDVD1::NADDVD1(
+  unsigned int index)
+  : PIRKeysetMetaData(
+      "DVD Keyset 1",
+      NAD_Make,
+      index)
+{
+}
+
+void NADDVD1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // Keyset already populated.
+    return;
+  }
+
+  threadableProtocol = new NECXProtocol(guiObject, index, true);
+
+  setPreData(0x2D2D, 16);
+
+  addKey("OPEN/CLOSE", Eject_Key, 0x36, 8);
+  addKey("STOP", Stop_Key, 0x39, 8);
+  addKey("PLAY", Play_Key, 0x31, 8);
+  addKey("PAUSE/STEP", Pause_Key, 0x38, 8);
+  addKey("SKIP-", Previous_Key, 0x35, 8);
+  addKey("SKIP+", Next_Key, 0x34, 8);
+  addKey("SCAN-", Rewind_Key, 0x32, 8);
+  addKey("SCAN+", FastForward_Key, 0x33, 8);
+  addKey("REPEAT", Repeat_Key, 0x53, 8);
+  addKey("PROGRAM", Program_Key, 0x57, 8);
+  addKey("AUDIO", Audio_Key, 0x4F, 8);
+  addKey("SUBTITLE", Captions_Key, 0x50, 8);
+  addKey("CLEAR", Clear_Key, 0x46, 8);
+  addKey("ZOOM", Zoom_Key, 0x64, 8);
+  addKey("DVD_POWER", Power_Key, 0x30, 8);
+  addKey("DVD_1", One_Key, 0x3B, 8);
+  addKey("DVD_2", Two_Key, 0x3C, 8);
+  addKey("DVD_3", Three_Key, 0x3D, 8);
+  addKey("DVD_4", Four_Key, 0x3E, 8);
+  addKey("DVD_5", Five_Key, 0x3F, 8);
+  addKey("DVD_6", Six_Key, 0x40, 8);
+  addKey("DVD_7", Seven_Key, 0x41, 8);
+  addKey("DVD_8", Eight_Key, 0x42, 8);
+  addKey("DVD_9", Nine_Key, 0x43, 8);
+  addKey("DVD_0", Zero_Key, 0x44, 8);
+  addKey("DVD_VOLUME+", VolumeUp_Key, 0x47, 8);
+  addKey("DVD_VOLUME+", Up_Key, 0x47, 8);
+  addKey("DVD_VOLUME-", VolumeDown_Key, 0x48, 8);
+  addKey("DVD_VOLUME-", Down_Key, 0x48, 8);
+  addKey("DVD_TUNE_DOWN", Left_Key, 0x59, 8);
+  addKey("DVD_TUNE_UP", Right_Key, 0x5A, 8);
+  addKey("DVD_MUTE_ENTER", Select_Key, 0x58, 8);
+  addKey("DVD_MUTE_ENTER", Mute_Key, 0x58, 8);
+  addKey("DVD_SET_UP", Menu_Key, 0x56, 8);
+  addKey("DVD_NEXT_DISC", NextDisc_Key, 0x49, 8);
+  addKey("DVD_TITLE", DiscTitle_Key, 0x4A, 8);
+  addKey("DVD_MENU", DiscMenu_Key, 0x4B, 8);
+  addKey("DVD_DISPLAY", Info_Key, 0x3A, 8);
+  addKey("DVD_RETURN", Exit_Key, 0x45, 8);
+}
+
+
+NADCD1::NADCD1(
+  unsigned int index)
+  : PIRKeysetMetaData(
+      "CD Component 1",
+      NAD_Make,
+      index)
+{
+}
+
+
+void NADCD1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // Keyset already populated.
+    return;
+  }
+
+  threadableProtocol = new SIRCProtocol(guiObject, index);
+
+  addSIRC12Key("PLAY", Play_Key, 0x11, 0x32);
+  addSIRC12Key("STOP", Stop_Key, 0x11, 0x38);
+  addSIRC12Key("PAUSE", Pause_Key, 0x11, 0x39);
+  addSIRC12Key("SKIP_LEFT", Previous_Key, 0x11, 0x30);
+  addSIRC12Key("SKIP_RIGHT", Next_Key, 0x11, 0x31);
+  addSIRC12Key("SCAN_LEFT", Rewind_Key, 0x11, 0x3A);
+  addSIRC12Key("SCAN_RIGHT", FastForward_Key, 0x11, 0x3B);
+}
+
+
+NADCD2::NADCD2(
+  unsigned int index)
+  : PIRKeysetMetaData(
+      "CD Component 2",
+      NAD_Make,
+      index)
+{
+}
+
+
+void NADCD2::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // Keyset already populated.
+    return;
+  }
+
+  threadableProtocol = new NECProtocol(guiObject, index, true, true);
+
+  setPreData(0x7C87, 16);
+
+  addKey("PlayPause", Play_Key, 0x01, 8);
+//  addKey("PlayPause", Pause_Key, 0x01, 8);
+  addKey("Stop", Stop_Key, 0x02, 8);
+  addKey("Random", Random_Key, 0x03, 8);
+  addKey("ScanBack", Rewind_Key, 0x04, 8);
+  addKey("SkipBack", Previous_Key, 0x05, 8);
+  addKey("SkipForward", Next_Key, 0x06, 8);
+  addKey("ScanForward", FastForward_Key, 0x07, 8);
+  addKey("cd-disp-info", Info_Key, 0x08, 8); // "Time"
+  addKey("Repeat", Repeat_Key, 0x0A, 8);
+  addKey("Program", Program_Key, 0x0B, 8);
+  addKey("1", One_Key, 0x0C, 8);
+  addKey("2", Two_Key, 0x0D, 8);
+  addKey("3", Three_Key, 0x0E, 8);
+  addKey("4", Four_Key, 0x0F, 8);
+
+  addKey("5", Five_Key, 0x10, 8);
+  addKey("6", Six_Key, 0x11, 8);
+  addKey("7", Seven_Key, 0x12, 8);
+  addKey("8", Eight_Key, 0x13, 8);
+  addKey("9", Nine_Key, 0x15, 8);
+  addKey("0", Zero_Key, 0x16, 8);
+
+  addKey("cd-eject", Eject_Key, 0x48, 8);
+  addKey("cd-pause", Pause_Key, 0x4A, 8);
+  addKey("10", Unmapped_Key, 0x4C, 8);
+  addKey("Add10", DoubleDigit_Key, 0x4D, 8);
+
+  addKey("Standby", Power_Key, 0x80, 8);  // "RCVR_POWER"
+  addKey("VolumeUp", VolumeUp_Key, 0x88, 8);
+  addKey("VolumeDown", VolumeDown_Key, 0x8C, 8);
+  addKey("Mute", Mute_Key, 0x94, 8); // "RCVR_MUTE_ENTER"
+}
+
+
+NADTape1::NADTape1(
+  unsigned int index)
+  : PIRKeysetMetaData(
+      "Tape Component 1",
+      NAD_Make,
+      index)
+{
+}
+
+
+void NADTape1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // Keyset already published.
+    return;
+  }
+
+  threadableProtocol = new NECProtocol(guiObject, index, true, true);
+
+  setPreData(0x7C87, 16);
+
+  addKey("TapeA-Stop", Stop_Key, 0x52, 8);
+  addKey("TapeA-Play", Play_Key, 0x53, 8);
+  addKey("TapeA-Rev", StepBack_Key, 0x54, 8);
+  addKey("TapeA-Record", Record_Key, 0x55, 8);
+  addKey("TapeA-FastForward", FastForward_Key, 0x56, 8);
+  addKey("TapeA-Rewind", Rewind_Key, 0x57, 8);
+
+  addKey("TapeB-Play", Unmapped_Key, 0x9C, 8);
+  addKey("TapeB-Rev", Unmapped_Key, 0xDE, 8);
+  addKey("TapeB-Stop", Unmapped_Key, 0x9F, 8);
+  addKey("TapeB-Record", Unmapped_Key, 0x9A, 8);
+  addKey("TapeB-FastForward", Unmapped_Key, 0x9D, 8);
+  addKey("TapeB-Rewind", Unmapped_Key, 0x9E, 8);
+
+  addKey("Standby", Power_Key, 0x80, 8);  // "RCVR_POWER"
+  addKey("VolumeUp", VolumeUp_Key, 0x88, 8);
+  addKey("VolumeDown", VolumeDown_Key, 0x8C, 8);
+  addKey("Mute", Mute_Key, 0x94, 8); // "RCVR_MUTE_ENTER"
+}
diff --git a/keysets/nad.h b/keysets/nad.h
new file mode 100644 (file)
index 0000000..ef898c8
--- /dev/null
@@ -0,0 +1,68 @@
+#ifndef NAD_H
+#define NAD_H
+
+#include "pirkeysetmetadata.h"
+
+class QObject;
+
+class NADAudio1: public PIRKeysetMetaData
+{
+public:
+  NADAudio1(
+    unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
+};
+
+class NADTuner1: public PIRKeysetMetaData
+{
+public:
+  NADTuner1(
+    unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
+};
+
+class NADDVD1: public PIRKeysetMetaData
+{
+public:
+  NADDVD1(
+    unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
+};
+
+class NADCD1: public PIRKeysetMetaData
+{
+public:
+  NADCD1(
+    unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
+};
+
+class NADCD2: public PIRKeysetMetaData
+{
+public:
+  NADCD2(
+    unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
+};
+
+class NADTape1: public PIRKeysetMetaData
+{
+public:
+  NADTape1(
+    unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
+};
+
+#endif // NAD_H
index a2713ea..dc0f851 100644 (file)
@@ -57,8 +57,8 @@ void PhilipsTV1::populateProtocol(
   addKey("1-", DoubleDigit_Key, 0x100A, 13); // -/--
   addKey("100", PlusOneHundred_Key, 0x100A, 13);
   addKey("TV-Dash", Dash_Key, 0x100A, 13);
-  addKey("ON/OFF", Power_Key, 0x100C, 13);
   addKey("CP", Unmapped_Key, 0x100B, 13); // "C/P"
+  addKey("ON/OFF", Power_Key, 0x100C, 13);
   addKey("MUTE", Mute_Key, 0x100D, 13);
   addKey("pp", PrevChannel_Key, 0x100E, 13); // "GREEN"
   addKey("INFO", Info_Key, 0x100F, 13); // "+", "OSD"
index 3458051..feef80c 100644 (file)
@@ -11,6 +11,7 @@ SonyTV1::SonyTV1(
 {
   addControlledDevice(Sony_Make, "KV-M1420D", TV_Device);
   addControlledDevice(Sony_Make, "KV-20FV10", TV_Device);
+  addControlledDevice(Sony_Make, "KV-2167MT", TV_Device);
   addControlledDevice(Sony_Make, "KV-2184MT", TV_Device);
   addControlledDevice(Sony_Make, "KV-27FX210", TV_Device);
   addControlledDevice(Sony_Make, "KV-32FS210", TV_Device);
@@ -544,6 +545,7 @@ SonyDVD1::SonyDVD1(
       index)
 {
   addControlledDevice(Sony_Make, "DVP-CX985V", DVD_Device);
+  addControlledDevice(Sony_Make, "DVP-NS608P", DVD_Device);
 }
 
 
diff --git a/keysets/universum.cpp b/keysets/universum.cpp
new file mode 100644 (file)
index 0000000..6097475
--- /dev/null
@@ -0,0 +1,448 @@
+#include "universum.h"
+#include "protocols/necprotocol.h"
+#include "protocols/necxprotocol.h"
+#include "protocols/rc5protocol.h"
+
+
+UniversumVCR1::UniversumVCR1(
+  unsigned int index)
+  : PIRKeysetMetaData(
+      "VCR Keyset 1",
+      Universum_Make,
+      index)
+{
+}
+
+
+void UniversumVCR1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // Keyset already populated.
+    return;
+  }
+
+  threadableProtocol = new NECProtocol(guiObject, index, false, true);
+
+  setPreData(0x31, 8);
+
+  addKey("ch/track_+", ChannelUp_Key, 0x01, 8);
+  addKey("ch/track_-", ChannelDown_Key, 0x02, 8);
+  addKey("audio", Audio_Key, 0x03, 8);
+  addKey("1", One_Key, 0x04, 8);
+  addKey("2", Two_Key, 0x05, 8);
+  addKey("3", Three_Key, 0x06, 8);
+  addKey("4", Four_Key, 0x07, 8);
+  addKey("tv/vcr", Unmapped_Key, 0x08, 8);
+  addKey("SportsRevue", Unmapped_Key, 0x0B, 8);
+  addKey("5", Five_Key, 0x0C, 8);
+  addKey("6", Six_Key, 0x0D, 8);
+  addKey("7", Seven_Key, 0x0E, 8);
+  addKey("8", Eight_Key, 0x0F, 8);
+
+  addKey("stop", Stop_Key, 0x10, 8);
+  addKey("pause/still", Pause_Key, 0x11, 8);
+  addKey("rew<<", Rewind_Key, 0x12, 8);
+  addKey("f.f>>", FastForward_Key, 0x13, 8);
+  addKey("play", Play_Key, 0x14, 8);
+  addKey("rec", Record_Key, 0x15, 8);
+  addKey("type", Unmapped_Key, 0x18, 8);
+  addKey("index", Unmapped_Key, 0x19, 8);
+  addKey("slow", Slow_Key, 0x1A, 8);
+  addKey("9", Nine_Key, 0x1C, 8);
+  addKey("0", Zero_Key, 0x1D, 8);
+  addKey("input", Input_Key, 0x1E, 8);
+
+  addKey(">0</m", Unmapped_Key, 0x43, 8);
+  addKey("reset", Reset_Key, 0x44, 8);
+  addKey("Type", Unmapped_Key, 0x46, 8);
+  addKey("a-dub", Unmapped_Key, 0x49, 8);
+  addKey("clear", Clear_Key, 0x4A, 8);
+  addKey("ok", Select_Key, 0x4B, 8);
+  addKey("display", Info_Key, 0x4C, 8);
+  addKey("dpc_plus/vps/pdc", Unmapped_Key, 0x4F, 8);
+  addKey("Surround", Surround_Key, 0x50, 8);
+  addKey("remain", Unmapped_Key, 0x57, 8);
+  addKey("power", Power_Key, 0x5B, 8);
+  addKey("sp/lp", VHSSpeed_Key, 0x5E, 8);
+  addKey("showview", Unmapped_Key, 0x8C, 8);
+  addKey("pip", PIP_Key, 0x8D, 8);
+  addKey("strobe", Unmapped_Key, 0x9A, 8);
+  addKey("preset", Unmapped_Key, 0x9E, 8);
+  addKey("menu/tv", Menu_Key, 0xCA, 8);
+  addKey("tv-scan", Scan_Key, 0xDA, 8);
+  addKey("surround", Surround_Key, 0xD5, 8);
+  addKey("m-index", Unmapped_Key, 0xDC, 8);
+}
+
+
+UniversumVCR2::UniversumVCR2(
+  unsigned int index)
+  : PIRKeysetMetaData(
+      "VCR Keyset 2",
+      Universum_Make,
+      index)
+{
+}
+
+
+void UniversumVCR2::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // Keyset already populated.
+    return;
+  }
+
+  threadableProtocol = new RC5Protocol(guiObject, index);
+
+  addKey("STANDBY", Power_Key, 0x114C, 13);
+  addKey("CASS", Eject_Key, 0x017E, 13);
+  addKey("TIMER", Timer_Key, 0x115D, 13);
+  addKey("1", One_Key, 0x1141, 13);
+  addKey("2", Two_Key, 0x1142, 13);
+  addKey("3", Three_Key, 0x1143, 13);
+  addKey("4", Four_Key, 0x1144, 13);
+  addKey("5", Five_Key, 0x1145, 13);
+  addKey("6", Six_Key, 0x1146, 13);
+  addKey("7", Seven_Key, 0x1147, 13);
+  addKey("8", Eight_Key, 0x1148, 13);
+  addKey("9", Nine_Key, 0x1149, 13);
+  addKey("0", Zero_Key, 0x1140, 13);
+  addKey("+", ChannelUp_Key, 0x1160, 13);
+  addKey("-", ChannelDown_Key, 0x1161, 13);
+  addKey("SEL/VPS", Unmapped_Key, 0x114B, 13);
+  addKey("CLEAR", Clear_Key, 0x1171, 13);
+  addKey("RECORD", Record_Key, 0x1177, 13);
+  addKey("STILL", Pause_Key, 0x1169, 13);
+  addKey("FWD", FastForward_Key, 0x1166, 13);
+  addKey("RWD", Rewind_Key, 0x1165, 13);
+  addKey("PLAY", Play_Key, 0x1175, 13);
+  addKey("PREVIOUS", Previous_Key, 0x0171, 13);
+  addKey("NEXT", Next_Key, 0x0170, 13);
+  addKey("STOP", Stop_Key, 0x1176, 13);
+  addKey("MONITOR", Unmapped_Key, 0x017A, 13);
+  addKey("TUNER", Unmapped_Key, 0x017D, 13);
+  addKey("TRACKING", AutoTracking_Key, 0x114E, 13);
+  addKey("SP/LP", VHSSpeed_Key, 0x117A, 13);
+  addKey("pip", PIP_Key, 0x8D, 8);
+}
+
+
+UniversumVCR3::UniversumVCR3(
+  unsigned int index)
+  : PIRKeysetMetaData(
+      "VCR Keyset 3",
+      Universum_Make,
+      index)
+{
+}
+
+
+void UniversumVCR3::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // Keyset already populated.
+    return;
+  }
+
+  threadableProtocol = new NECProtocol(guiObject, index, true, false);
+
+  setPreData(0x7B80, 16);
+
+  addKey("power", Power_Key, 0x13, 8);
+  addKey("showview", Unmapped_Key, 0x1D, 8);
+  addKey("eject", Eject_Key, 0x4E, 8);
+  addKey("ch_up", ChannelUp_Key, 0x0A, 8);
+  addKey("ch_down", ChannelDown_Key, 0x0B, 8);
+  addKey("1", One_Key, 0x01, 8);
+  addKey("2", Two_Key, 0x02, 8);
+  addKey("3", Three_Key, 0x03, 8);
+  addKey("4", Four_Key, 0x04, 8);
+  addKey("5", Five_Key, 0x05, 8);
+  addKey("6", Six_Key, 0x06, 8);
+  addKey("7", Seven_Key, 0x07, 8);
+  addKey("8", Eight_Key, 0x08, 8);
+  addKey("9", Nine_Key, 0x09, 8);
+  addKey("0", Zero_Key, 0x00, 8);
+  addKey("tv_vcr_scart_sw", Input_Key, 0x12, 8);
+  addKey("index", Unmapped_Key, 0x14, 8);
+  addKey("once", Unmapped_Key, 0x58, 8);
+  addKey("daily", Unmapped_Key, 0x49, 8);
+  addKey("weekly", Unmapped_Key, 0x4D, 8);
+  addKey("timer_rec", Unmapped_Key, 0x0D, 8);
+  addKey("clock_counter", Unmapped_Key, 0x51, 8);
+  addKey("aft_vps", Unmapped_Key, 0x46, 8);
+  addKey("preset", Unmapped_Key, 0x40, 8);
+  addKey("memory", Memory_Key, 0x4B, 8);
+  addKey("reset", Reset_Key, 0x4C, 8);
+  addKey("call", Call_Key, 0x5F, 8);
+  addKey("trck_auto", AutoTracking_Key, 0x52, 8);
+  addKey("trck_fine_minus", TrackingMinus_Key, 0x44, 8);
+  addKey("trck_fine_plus", TrackingPlus_Key, 0x43, 8);
+  addKey("menu", Menu_Key, 0x50, 8);
+  addKey("set_minus", Left_Key, 0x42, 8);
+  addKey("set_plus", Right_Key, 0x41, 8);
+  addKey("enter", Select_Key, 0x45, 8);
+  addKey("cancel", Clear_Key, 0x4A, 8);
+  addKey("slow", Slow_Key, 0x1F, 8);
+  addKey("input_select", Unmapped_Key, 0x0C, 8);
+  addKey("sp_lp", VHSSpeed_Key, 0x1E, 8);
+  addKey("pause", Pause_Key, 0x1A, 8);
+  addKey("stop", Stop_Key, 0x17, 8);
+  addKey("rec_otr", Record_Key, 0x15, 8);
+  addKey("rew", Rewind_Key, 0x19, 8);
+  addKey("play", Play_Key, 0x16, 8);
+  addKey("f.fwd", FastForward_Key, 0x18, 8);
+}
+
+
+UniversumTV1::UniversumTV1(
+  unsigned int index)
+  : PIRKeysetMetaData(
+      "TV Keyset 1",
+      Universum_Make,
+      index)
+{
+}
+
+
+void UniversumTV1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // Keyset already populated.
+    return;
+  }
+
+  threadableProtocol = new RC5Protocol(guiObject, index);
+
+  addKey("0", Zero_Key, 0x1000, 13);
+  addKey("1", One_Key, 0x1001, 13);
+  addKey("2", Two_Key, 0x1002, 13);
+  addKey("3", Three_Key, 0x1003, 13);
+  addKey("4", Four_Key, 0x1004, 13);
+  addKey("5", Five_Key, 0x1005, 13);
+  addKey("6", Six_Key, 0x1006, 13);
+  addKey("7", Seven_Key, 0x1007, 13);
+  addKey("8", Eight_Key, 0x1008, 13);
+  addKey("9", Nine_Key, 0x1009, 13);
+  addKey("--", Dash_Key, 0x100A, 13);
+  addKey("POWER_OFF", Power_Key, 0x100C, 13);
+  addKey("MUTE", Mute_Key, 0x100D, 13);
+  addKey("PP", PrevChannel_Key, 0x100E, 13);
+
+  addKey("VOL_UP", VolumeUp_Key, 0x1010, 13);
+  addKey("VOL_DOWN", VolumeDown_Key, 0x1011, 13);
+  addKey("INFO", Info_Key, 0x1012, 13);
+  addKey("LEFT", Left_Key, 0x0015, 13);
+  addKey("RIGHT", Right_Key, 0x0016, 13);
+
+  addKey("UP", ChannelUp_Key, 0x1020, 13);
+  addKey("UP", Up_Key, 0x1020, 13);
+  addKey("DOWN", ChannelDown_Key, 0x1021, 13);
+  addKey("DOWN", Down_Key, 0x1021, 13);
+  addKey("P<P", Unmapped_Key, 0x1022, 13);
+  addKey("VT_STOP", TeletextHold_Key, 0x1029, 13); // "TEXT_ZOOM"
+  addKey("TEXT_CLOCK", TeletextTime_Key, 0x102A, 13);
+  addKey("VT_?", TeletextReveal_Key, 0x102C, 13); // "TEXT_QUESTION"
+  addKey("VT_X", TeletextOff_Key, 0x102D, 13); // "TEXT_X"
+  addKey("VT_TRANSPARENT", TeletextAndTV_Key, 0x102E, 13); // "TEXT_HALFPAGE"
+  addKey("VT_I", Unmapped_Key, 0x102F, 13);
+
+  addKey("MENU", Menu_Key, 0x1030, 13);
+  addKey("YELLOW", Yellow_Key, 0x1032, 13);
+  addKey("BLUE", Blue_Key, 0x1034, 13);
+  addKey("GREEN", Green_Key, 0x1036, 13);
+  addKey("RED", Red_Key, 0x1037, 13);
+  addKey("AV", AuxInput_Key, 0x1038, 13);
+  addKey("VIDEOTEXT", Teletext_Key, 0x103C, 13);
+  addKey("TV", Unmapped_Key, 0x103F, 13);
+}
+
+
+UniversumTV1a::UniversumTV1a(
+  unsigned int index)
+  : UniversumTV1(index)
+{
+  setKeysetName("TV Keyset 1a");
+}
+
+
+void UniversumTV1a::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // Keyset already populated.
+    return;
+  }
+
+  UniversumTV1::populateProtocol(guiObject);
+
+  addKey("UP", Up_Key, 0x0010, 13);
+  addKey("DOWN", Down_Key, 0x0011, 13);
+  addKey("MENU", Menu_Key, 0x0012, 13);
+  addKey("-", Left_Key, 0x0015, 13);
+  addKey("+", Right_Key, 0x0016, 13);
+  addKey("TV_UPPERRIGHT", Unmapped_Key, 0x0018, 13);
+  addKey("TV_FROMUPPERRIGHT", Unmapped_Key, 0x0019, 13);
+  addKey("TV_FROMUPPERLEFT", Unmapped_Key, 0x001A, 13);
+  addKey("TV_TRIANGLE_ETC", Unmapped_Key, 0x001F, 13);
+
+  addKey("TV_MUSTER", Unmapped_Key, 0x0020, 13);
+  addKey("BRIGHT_LEVEL", BrightnessUp_Key, 0x0024, 13);
+  addKey("TV_CORNER_TRIANGLE", Unmapped_Key, 0x0025, 13);
+  addKey("GRAY+", Unmapped_Key, 0x0026, 13);
+  addKey("GRAY-", Unmapped_Key, 0x0027, 13);
+  addKey("TV_UPPERLEFT", Unmapped_Key, 0x0028, 13);
+  addKey("RED", Red_Key, 0x002B, 13);
+  addKey("GREEN", Green_Key, 0x002C, 13);
+  addKey("YELLOW", Yellow_Key, 0x002D, 13);
+  addKey("BLUE", Blue_Key, 0x002E, 13);
+  addKey("WHITE", Unmapped_Key, 0x002F, 13);
+  addKey("SATELLITE", SatInput_Key, 0x0031, 13);
+  addKey("TV_FORMAT", AspectRatio_Key, 0x003E, 13);
+
+  addKey("TV_+", Info_Key, 0x100F, 13);
+
+  addKey("TEXT_UPDOWN", TeletextSize_Key, 0x102B, 13);
+  addKey("TEXT_QUESTION", TeletextReveal_Key, 0x102C, 13);
+
+  addKey("TV_MOVE_HORIZ", Unmapped_Key, 0x1038, 13);
+}
+
+
+UniversumSat1::UniversumSat1(
+  unsigned int index)
+  : PIRKeysetMetaData(
+      "Sat Keyset 1",
+      Universum_Make,
+      index)
+{
+}
+
+
+void UniversumSat1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // Keyset already populated.
+    return;
+  }
+
+  threadableProtocol = new RC5Protocol(guiObject, index);
+
+  addKey("on", Power_Key, 0x13CC, 13);
+  addKey("mute", Mute_Key, 0x13CD, 13);
+  addKey("1", One_Key, 0x13C1, 13);
+  addKey("2", Two_Key, 0x13C2, 13);
+  addKey("3", Three_Key, 0x13C3, 13);
+  addKey("4", Four_Key, 0x13C4, 13);
+  addKey("5", Five_Key, 0x13C5, 13);
+  addKey("6", Six_Key, 0x13C6, 13);
+  addKey("7", Seven_Key, 0x13C7, 13);
+  addKey("8", Eight_Key, 0x13C8, 13);
+  addKey("9", Nine_Key, 0x13C9, 13);
+  addKey("0", Zero_Key, 0x13C0, 13);
+  addKey("tv", AntennaInput_Key, 0x03C5, 13);
+  addKey("radio", TunerInput_Key, 0x03C4, 13);
+  addKey("av", AuxInput_Key, 0x13F8, 13);
+  addKey("info", Info_Key, 0x13EC, 13);
+  addKey("list", Unmapped_Key, 0x13EA, 13);
+  addKey("swap", Unmapped_Key, 0x13E2, 13);
+  addKey("red", Red_Key, 0x13F7, 13);
+  addKey("green", Green_Key, 0x13F6, 13);
+  addKey("yellow", Yellow_Key, 0x13F2, 13);
+  addKey("blue", Blue_Key, 0x13F4, 13);
+  addKey("exit", Exit_Key, 0x13ED, 13);
+  addKey("menu", Menu_Key, 0x03D2, 13);
+  addKey("ch_up", ChannelUp_Key, 0x13E0, 13);
+  addKey("ch_up", Up_Key, 0x13E0, 13);
+  addKey("ch_down", ChannelDown_Key, 0x13E1, 13);
+  addKey("ch_down", Down_Key, 0x13E1, 13);
+  addKey("vol+", VolumeUp_Key, 0x13D0, 13);
+  addKey("vol+", Right_Key, 0x13D0, 13);
+  addKey("vol-", VolumeDown_Key, 0x13D1, 13);
+  addKey("vol-", Left_Key, 0x13D1, 13);
+  addKey("ok", Select_Key, 0x03D7, 13);
+}
+
+
+UniversumAudio1::UniversumAudio1(
+  unsigned int index)
+  : PIRKeysetMetaData(
+      "Audio Keyset 1",
+      Universum_Make,
+      index)
+{
+}
+
+
+void UniversumAudio1::populateProtocol(
+  QObject *guiObject)
+{
+  if (threadableProtocol)
+  {
+    // Keyset already populated
+    return;
+  }
+
+  threadableProtocol = new NECXProtocol(guiObject, index, true);
+
+  setPreData(0x1010, 16);
+
+  addKey("FM", TunerBand_Key, 0x00, 8);
+  addKey("MW", Unmapped_Key, 0x01, 8);
+  addKey("LW", Unmapped_Key, 0x02, 8);
+  addKey("CDP", CDInput_Key, 0x03, 8);
+  addKey("CD_PLAY", Play_Key, 0x04, 8);
+  addKey("CD_STOP", Stop_Key, 0x05, 8);
+  addKey("CD_TRACK-", Previous_Key, 0x06, 8);
+  addKey("CD_TRACK+", Next_Key, 0x07, 8);
+  addKey("TAPE", TapeInput_Key, 0x08, 8);
+  addKey("AUX", AuxInput_Key, 0x09, 8);
+  addKey("PHONO", PhonoInput_Key, 0x0B, 8);
+  addKey("TP_PLAYR", Unmapped_Key, 0x0C, 8);
+  addKey("TP_PLAY", Unmapped_Key, 0x0D, 8);
+  addKey("TP_STOP", Unmapped_Key, 0x0E, 8);
+  addKey("AUTO", FMMode_Key, 0x0F, 8); // might be wrong
+
+  addKey("TP_REW", Unmapped_Key, 0x10, 8);
+  addKey("TP_FFD", Unmapped_Key, 0x11, 8);
+  addKey("TP_PAUSE", Unmapped_Key, 0x14, 8);
+  addKey("TP_REC", Unmapped_Key, 0x15, 8);
+  addKey("VOL-", VolumeDown_Key, 0x16, 8);
+  addKey("VOL+", VolumeUp_Key, 0x17, 8);
+  addKey("TUN-", ChannelDown_Key, 0x1A, 8);
+  addKey("TUN+", ChannelUp_Key, 0x1B, 8);
+  addKey("TP_A", Unmapped_Key, 0x1C, 8);
+  addKey("POWER", Power_Key, 0x1E, 8);
+  addKey("MUTE", Mute_Key, 0x1F, 8);
+
+  addKey("1", One_Key, 0x41, 8);
+  addKey("2", Two_Key, 0x42, 8);
+  addKey("3", Three_Key, 0x43, 8);
+  addKey("4", Four_Key, 0x44, 8);
+  addKey("5", Five_Key, 0x45, 8);
+  addKey("6", Six_Key, 0x46, 8);
+  addKey("7", Seven_Key, 0x47, 8);
+  addKey("8", Eight_Key, 0x48, 8);
+  addKey("9", Nine_Key, 0x49, 8);
+  addKey("0", Zero_Key, 0x4B, 8);
+  addKey("CD_PROG", Program_Key, 0x4D, 8);
+  addKey("CD_REPEAT", Repeat_Key, 0x4E, 8);
+
+  addKey("CD_FFWD", FastForward_Key, 0x52, 8);
+  addKey("CD_REW", Rewind_Key, 0x53, 8);
+  addKey("TP_B", Unmapped_Key, 0x83, 8);
+  addKey("CLOCK", Info_Key, 0xC1, 8);
+  addKey("SLEEP", Sleep_Key, 0xC2, 8);
+  addKey("TP_RMUTE", Unmapped_Key, 0xD1, 8);
+}
diff --git a/keysets/universum.h b/keysets/universum.h
new file mode 100644 (file)
index 0000000..cecd70c
--- /dev/null
@@ -0,0 +1,78 @@
+#ifndef UNIVERSUM_H
+#define UNIVERSUM_H
+
+#include "pirkeysetmetadata.h"
+
+class QObject;
+
+class UniversumVCR1: public PIRKeysetMetaData
+{
+public:
+  UniversumVCR1(
+    unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
+};
+
+class UniversumVCR2: public PIRKeysetMetaData
+{
+public:
+  UniversumVCR2(
+    unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
+};
+
+class UniversumVCR3: public PIRKeysetMetaData
+{
+public:
+  UniversumVCR3(
+    unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
+};
+
+class UniversumTV1: public PIRKeysetMetaData
+{
+public:
+  UniversumTV1(
+    unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
+};
+
+class UniversumTV1a: public UniversumTV1
+{
+public:
+  UniversumTV1a(
+    unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
+};
+
+class UniversumSat1: public PIRKeysetMetaData
+{
+public:
+  UniversumSat1(
+    unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
+};
+
+class UniversumAudio1: public PIRKeysetMetaData
+{
+public:
+  UniversumAudio1(
+    unsigned int index);
+
+  virtual void populateProtocol(
+    QObject *guiObject);
+};
+
+#endif // UNIVERSUM_H
index cbc276b..1b5ee5e 100644 (file)
@@ -27,6 +27,7 @@ QMutex commandIFMutex;
 bool stopRepeatingFlag = false;
 QMutex stopRepeatingMutex;
 
+
 extern PIRMakeMgr makeManager;
 
 
index 2abae1c..cfdd504 100644 (file)
@@ -129,7 +129,10 @@ SOURCES += main.cpp mainwindow.cpp \
     keysets/epson.cpp \
     keysets/humax.cpp \
     keysets/technics.cpp \
-    keysets/united.cpp
+    keysets/united.cpp \
+    keysets/foxtel.cpp \
+    keysets/nad.cpp \
+    keysets/universum.cpp
 HEADERS += mainwindow.h \
     pirkeynames.h \
     pirmakenames.h \
@@ -233,7 +236,10 @@ HEADERS += mainwindow.h \
     keysets/epson.h \
     keysets/humax.h \
     keysets/technics.h \
-    keysets/united.h
+    keysets/united.h \
+    keysets/foxtel.h \
+    keysets/nad.h \
+    keysets/universum.h
 FORMS += mainwindow.ui \
     pirdocumentationform.ui \
     piraboutform.ui \
index 2f3b5ed..40203ea 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE QtCreatorProject>
-<!-- Written by Qt Creator 2.4.1, 2012-02-22T09:26:22. -->
+<!-- Written by Qt Creator 2.4.1, 2012-02-23T11:46:34. -->
 <qtcreator>
  <data>
   <variable>ProjectExplorer.Project.ActiveTarget</variable>
@@ -79,7 +79,7 @@
       <value type="QString" key="ProjectExplorer.ProcessStep.Arguments">dpkg-buildpackage -sa -S -uc -us</value>
       <value type="QString" key="ProjectExplorer.ProcessStep.Command">/Users/john/QtSDK/Maemo/4.6.2/bin/mad</value>
       <value type="bool" key="ProjectExplorer.ProcessStep.Enabled">false</value>
-      <value type="QString" key="ProjectExplorer.ProcessStep.WorkingDirectory">/Users/john/Develop/n900/pierogi-0.6.9</value>
+      <value type="QString" key="ProjectExplorer.ProcessStep.WorkingDirectory">/Users/john/Develop/n900/pierogi-0.6.10</value>
       <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Custom Process Step</value>
       <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
       <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.ProcessStep</value>
        <value type="QString">/Users/john/Develop/n900/pierogi-build-maemo-Qt_for_Fremantle_PR1_3_Devices__Qt_SDK__Release/pierogi_0_1_0_armel.deb</value>
        <value type="QString">/Users/john/Develop/n900/pierogi-build-maemo-Qt_for_Fremantle_PR1_3_Devices__Qt_SDK__Release/pierogi_0_0_1_armel.deb</value>
        <value type="QString">/Users/john/Develop/n900/pierogi-build-maemo-Qt_for_Fremantle_PR1_3_Devices__Qt_SDK__Release/pierogi_0_1_6_armel.deb</value>
+       <value type="QString">/Users/john/Develop/n900/pierogi-build-maemo-Qt_for_Fremantle_PR1_3_Devices__Qt_SDK__Release/pierogi_0_6_10_armel.deb</value>
        <value type="QString">/Users/john/Develop/n900/pierogi-build-maemo-Qt_for_Fremantle_PR1_3_Devices__Qt_SDK__Release/pierogi_0_1_2_armel.deb</value>
       </valuelist>
       <valuelist type="QVariantList" key="Qt4ProjectManager.MaemoRunConfiguration.LastDeployedHosts">
        <value type="QString">192.168.0.15</value>
        <value type="QString">192.168.0.15</value>
        <value type="QString">192.168.0.15</value>
+       <value type="QString">192.168.0.15</value>
       </valuelist>
       <valuelist type="QVariantList" key="Qt4ProjectManager.MaemoRunConfiguration.LastDeployedRemotePaths">
        <value type="QString"></value>
        <value type="QString"></value>
        <value type="QString"></value>
        <value type="QString"></value>
+       <value type="QString"></value>
       </valuelist>
       <valuelist type="QVariantList" key="Qt4ProjectManager.MaemoRunConfiguration.LastDeployedTimes">
        <value type="QDateTime">2012-01-19T22:18:07</value>
        <value type="QDateTime">2012-01-17T00:03:13</value>
        <value type="QDateTime">2012-01-14T13:11:32</value>
        <value type="QDateTime">2012-01-25T13:42:55</value>
+       <value type="QDateTime">2012-02-22T09:37:53</value>
        <value type="QDateTime">2012-01-17T12:19:28</value>
       </valuelist>
      </valuemap>
index b5711d8..44af66b 100644 (file)
@@ -4,11 +4,14 @@
 #include <X11/Xlib.h>
 #include <X11/Xatom.h>
 #include <QX11Info>
+#include <QTimer>
+
 
 PIRApplication::PIRApplication(
   int &argc,
   char **argv)
-  : QApplication(argc, argv)
+  : QApplication(argc, argv),
+    changingKeyset(false)
 {
 }
 
@@ -46,17 +49,33 @@ bool PIRApplication::x11EventFilter(
       event->xkey.keycode == 73 ||
       event->xkey.keycode == QKeySequence::ZoomOut)
     {
-      emit decreaseRockerPressed();
+      if (!changingKeyset)
+      {
+        changingKeyset = true;
+        QTimer::singleShot(500, this, SLOT(finishChangingKeyset()));
+        emit decreaseRockerPressed();
+      }
       return true;
     }
     else if (
       event->xkey.keycode == 74 ||
       event->xkey.keycode == QKeySequence::ZoomIn)
     {
-      emit increaseRockerPressed();
+      if (!changingKeyset)
+      {
+        changingKeyset = true;
+        QTimer::singleShot(500, this, SLOT(finishChangingKeyset()));
+        emit increaseRockerPressed();
+      }
       return true;
     }
   }
 
   return false;
 }
+
+
+void PIRApplication::finishChangingKeyset()
+{
+  changingKeyset = false;
+}
index 16d4194..75ac145 100644 (file)
@@ -22,6 +22,12 @@ public:
 signals:
   void increaseRockerPressed();
   void decreaseRockerPressed();
+
+private slots:
+  void finishChangingKeyset();
+
+private:
+  bool changingKeyset;
 };
 
 #endif // PIRAPPLICATION_H
index 7bc2cc7..e8619c6 100644 (file)
@@ -23,6 +23,7 @@
 #include "keysets/emerson.h"
 #include "keysets/epson.h"
 #include "keysets/fortec.h"
+#include "keysets/foxtel.h"
 #include "keysets/goldstar.h"
 #include "keysets/grundig.h"
 #include "keysets/haier.h"
@@ -40,6 +41,7 @@
 #include "keysets/mce.h"
 #include "keysets/mitsubishi.h"
 #include "keysets/motorola.h"
+#include "keysets/nad.h"
 #include "keysets/nokia.h"
 #include "keysets/onida.h"
 #include "keysets/panasonic.h"
@@ -62,6 +64,7 @@
 #include "keysets/topfield.h"
 #include "keysets/toshiba.h"
 #include "keysets/united.h"
+#include "keysets/universum.h"
 #include "keysets/vestel.h"
 #include "keysets/virgin.h"
 #include "keysets/vizio.h"
@@ -199,6 +202,8 @@ PIRKeysetManager::PIRKeysetManager()
   setupKeyset(new FortecReceiver1(counter++));
   setupKeyset(new FortecReceiver2(counter++));
 
+  setupKeyset(new FoxtelSTB1(counter++));
+
   setupKeyset(new GoldStarTV1(counter++));
   setupKeyset(new GoldStarTV2(counter++));
   setupKeyset(new GoldStarVCR1(counter++));
@@ -319,6 +324,13 @@ PIRKeysetManager::PIRKeysetManager()
   setupKeyset(new MotorolaSTB1b(counter++));
   setupKeyset(new MotorolaSkyDigital(counter++));
 
+  setupKeyset(new NADAudio1(counter++));
+  setupKeyset(new NADTuner1(counter++));
+  setupKeyset(new NADDVD1(counter++));
+  setupKeyset(new NADCD1(counter++));
+  setupKeyset(new NADCD2(counter++));
+  setupKeyset(new NADTape1(counter++));
+
   setupKeyset(new NokiaGenericVCR(counter++));
 
   setupKeyset(new OnidaTV1(counter++));
@@ -517,6 +529,14 @@ PIRKeysetManager::PIRKeysetManager()
   setupKeyset(new UnitedDVD1(counter++));
   setupKeyset(new UnitedDVBT1(counter++));
 
+  setupKeyset(new UniversumVCR1(counter++));
+  setupKeyset(new UniversumVCR2(counter++));
+  setupKeyset(new UniversumVCR3(counter++));
+  setupKeyset(new UniversumTV1(counter++));
+  setupKeyset(new UniversumTV1a(counter++));
+  setupKeyset(new UniversumSat1(counter++));
+  setupKeyset(new UniversumAudio1(counter++));
+
   setupKeyset(new VestelTV1(counter++));
   setupKeyset(new VestelTV2(counter++));
 
index 6a1353a..cb21475 100644 (file)
@@ -24,6 +24,7 @@ PIRMakeMgr::PIRMakeMgr()
   makes[Emerson_Make] = "Emerson";
   makes[Epson_Make] = "Epson";
   makes[Fortec_Make] = "Fortec Star";
+  makes[Foxtel_Make] = "Foxtel";
   makes[GoldStar_Make] = "GoldStar";
   makes[Grundig_Make] = "Grundig";
   makes[Haier_Make] = "Haier";
@@ -41,6 +42,7 @@ PIRMakeMgr::PIRMakeMgr()
   makes[Microsoft_Make] = "Microsoft";
   makes[Mitsubishi_Make] = "Mitsubishi";
   makes[Motorola_Make] = "Motorola";
+  makes[NAD_Make] = "NAD";
   makes[Nokia_Make] = "Nokia";
   makes[Onida_Make] = "Onida";
   makes[Panasonic_Make] = "Panasonic";
@@ -63,6 +65,7 @@ PIRMakeMgr::PIRMakeMgr()
   makes[Topfield_Make] = "Topfield";
   makes[Toshiba_Make] = "Toshiba";
   makes[United_Make] = "United";
+  makes[Universum_Make] = "Universum";
   makes[Vestel_Make] = "Vestel";
   makes[Virgin_Make] = "Virgin Media";
   makes[Vizio_Make] = "Vizio";
index 3867174..9cc15b1 100644 (file)
@@ -25,6 +25,7 @@ enum PIRMakeName{
   Emerson_Make,
   Epson_Make,
   Fortec_Make,
+  Foxtel_Make,
   GoldStar_Make,
   Grundig_Make,
   Haier_Make,
@@ -42,6 +43,7 @@ enum PIRMakeName{
   Microsoft_Make,
   Mitsubishi_Make,
   Motorola_Make,
+  NAD_Make,
   Nokia_Make,
   Onida_Make,
   Panasonic_Make,
@@ -64,6 +66,7 @@ enum PIRMakeName{
   Topfield_Make,
   Toshiba_Make,
   United_Make,
+  Universum_Make,
   Vestel_Make,
   Virgin_Make,
   Vizio_Make,
index 01260b6..84c25ac 100644 (file)
@@ -1,3 +1,9 @@
+pierogi (0.6.11) unstable; urgency=low
+  * Fix for a nasty bug with the volume-rocker keys (thanks sixwheeledbeast!).
+  * First pass at keysets for Foxtel, NAD, and Universum.
+
+ -- John Pietrzak <jpietrzak8@gmail.com>  Thu, 23 Feb 2012 11:46:22 -0500
+
 pierogi (0.6.10) unstable; urgency=low
   * Fixed several GUI issues (thanks to sombragris and sixwheeledbeast for discovering them)
 
index 9728e40..37ae1b3 100644 (file)
@@ -11,8 +11,8 @@ Architecture: armel
 Depends: ${shlibs:Depends}, ${misc:Depends}
 Description: Universal Infrared (IR) Remote Control for N900
  Pierogi is a Universal Infrared Remote Control app for the Nokia N900.  It is independent from the LIRC server, and stores all configuration info internally.
-XB-Maemo-Upgrade-Description: Fix a couple of GUI bugs
- This update fixes a GUI selection bug in the Favorites list, and cleans up the volume rocker controls a bit.
+XB-Maemo-Upgrade-Description: Fix volume rocker switch
+ This update fixes a nasty bug with the volume rocker switch.  Also, new keysets for Foxtel, NAD, and Universum.
 XSBC-Bugtracker: https://garage.maemo.org/tracker/?func=add&group_id=2286&atid=7641
 XB-Maemo-Display-Name: Pierogi
 XB-Maemo-Icon-26: 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

Terms of Use    Privacy Policy    Contribution Guidelines    Feedback

Powered By GForge Collaborative Development Environment